@payloadcms/ui 3.80.0-internal.c396c15 → 3.80.0-internal.cdd7ef7

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 (518) hide show
  1. package/dist/elements/BulkUpload/EditForm/index.d.ts.map +1 -1
  2. package/dist/elements/BulkUpload/EditForm/index.js +0 -12
  3. package/dist/elements/BulkUpload/EditForm/index.js.map +1 -1
  4. package/dist/elements/Button/index.d.ts.map +1 -1
  5. package/dist/elements/Button/index.js +5 -3
  6. package/dist/elements/Button/index.js.map +1 -1
  7. package/dist/elements/Button/index.scss +38 -5
  8. package/dist/elements/Button/types.d.ts +1 -1
  9. package/dist/elements/Button/types.d.ts.map +1 -1
  10. package/dist/elements/Button/types.js.map +1 -1
  11. package/dist/elements/CheckboxPopup/index.d.ts.map +1 -1
  12. package/dist/elements/CheckboxPopup/index.js +0 -1
  13. package/dist/elements/CheckboxPopup/index.js.map +1 -1
  14. package/dist/elements/CheckboxPopup/index.scss +1 -0
  15. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.d.ts.map +1 -1
  16. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js +53 -3
  17. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js.map +1 -1
  18. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js +541 -0
  19. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js.map +1 -0
  20. package/dist/elements/Combobox/index.d.ts.map +1 -1
  21. package/dist/elements/Combobox/index.js +1 -0
  22. package/dist/elements/Combobox/index.js.map +1 -1
  23. package/dist/elements/CreateDocumentButton/index.d.ts +26 -0
  24. package/dist/elements/CreateDocumentButton/index.d.ts.map +1 -0
  25. package/dist/elements/CreateDocumentButton/index.js +182 -0
  26. package/dist/elements/CreateDocumentButton/index.js.map +1 -0
  27. package/dist/elements/DefaultListViewTabs/index.d.ts.map +1 -1
  28. package/dist/elements/DefaultListViewTabs/index.js +28 -54
  29. package/dist/elements/DefaultListViewTabs/index.js.map +1 -1
  30. package/dist/elements/DelayedSpinner/index.d.ts +23 -0
  31. package/dist/elements/DelayedSpinner/index.d.ts.map +1 -0
  32. package/dist/elements/DelayedSpinner/index.js +61 -0
  33. package/dist/elements/DelayedSpinner/index.js.map +1 -0
  34. package/dist/elements/DocumentControls/index.d.ts +1 -0
  35. package/dist/elements/DocumentControls/index.d.ts.map +1 -1
  36. package/dist/elements/DocumentControls/index.js +6 -10
  37. package/dist/elements/DocumentControls/index.js.map +1 -1
  38. package/dist/elements/DocumentControls/index.scss +1 -1
  39. package/dist/elements/DocumentDrawer/index.d.ts.map +1 -1
  40. package/dist/elements/DocumentDrawer/index.js +54 -141
  41. package/dist/elements/DocumentDrawer/index.js.map +1 -1
  42. package/dist/elements/DocumentDrawer/types.d.ts +7 -1
  43. package/dist/elements/DocumentDrawer/types.d.ts.map +1 -1
  44. package/dist/elements/DocumentDrawer/types.js.map +1 -1
  45. package/dist/elements/DrawerActionHeader/index.d.ts.map +1 -1
  46. package/dist/elements/DrawerActionHeader/index.js +2 -0
  47. package/dist/elements/DrawerActionHeader/index.js.map +1 -1
  48. package/dist/elements/DrawerActionHeader/index.scss +2 -2
  49. package/dist/elements/Hierarchy/ColumnBrowser/Column/index.d.ts +5 -0
  50. package/dist/elements/Hierarchy/ColumnBrowser/Column/index.d.ts.map +1 -0
  51. package/dist/elements/Hierarchy/ColumnBrowser/Column/index.js +166 -0
  52. package/dist/elements/Hierarchy/ColumnBrowser/Column/index.js.map +1 -0
  53. package/dist/elements/Hierarchy/ColumnBrowser/Column/index.scss +63 -0
  54. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.d.ts +5 -0
  55. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.d.ts.map +1 -0
  56. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.js +161 -0
  57. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.js.map +1 -0
  58. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.scss +105 -0
  59. package/dist/elements/Hierarchy/ColumnBrowser/index.d.ts +8 -0
  60. package/dist/elements/Hierarchy/ColumnBrowser/index.d.ts.map +1 -0
  61. package/dist/elements/Hierarchy/ColumnBrowser/index.js +473 -0
  62. package/dist/elements/Hierarchy/ColumnBrowser/index.js.map +1 -0
  63. package/dist/elements/Hierarchy/ColumnBrowser/index.scss +20 -0
  64. package/dist/elements/Hierarchy/ColumnBrowser/types.d.ts +106 -0
  65. package/dist/elements/Hierarchy/ColumnBrowser/types.d.ts.map +1 -0
  66. package/dist/elements/Hierarchy/ColumnBrowser/types.js +2 -0
  67. package/dist/elements/Hierarchy/ColumnBrowser/types.js.map +1 -0
  68. package/dist/elements/Hierarchy/DocHeaderButton/index.d.ts +11 -0
  69. package/dist/elements/Hierarchy/DocHeaderButton/index.d.ts.map +1 -0
  70. package/dist/elements/Hierarchy/DocHeaderButton/index.js +126 -0
  71. package/dist/elements/Hierarchy/DocHeaderButton/index.js.map +1 -0
  72. package/dist/elements/{FolderView/MoveDocToFolder → Hierarchy/DocHeaderButton}/index.scss +7 -1
  73. package/dist/elements/Hierarchy/DocHeaderButton/index.server.d.ts +10 -0
  74. package/dist/elements/Hierarchy/DocHeaderButton/index.server.d.ts.map +1 -0
  75. package/dist/elements/Hierarchy/DocHeaderButton/index.server.js +34 -0
  76. package/dist/elements/Hierarchy/DocHeaderButton/index.server.js.map +1 -0
  77. package/dist/elements/Hierarchy/Drawer/fetchAncestorPath.d.ts +15 -0
  78. package/dist/elements/Hierarchy/Drawer/fetchAncestorPath.d.ts.map +1 -0
  79. package/dist/elements/Hierarchy/Drawer/fetchAncestorPath.js +60 -0
  80. package/dist/elements/Hierarchy/Drawer/fetchAncestorPath.js.map +1 -0
  81. package/dist/elements/Hierarchy/Drawer/index.d.ts +20 -0
  82. package/dist/elements/Hierarchy/Drawer/index.d.ts.map +1 -0
  83. package/dist/elements/Hierarchy/Drawer/index.js +291 -0
  84. package/dist/elements/Hierarchy/Drawer/index.js.map +1 -0
  85. package/dist/elements/Hierarchy/Drawer/index.scss +81 -0
  86. package/dist/elements/Hierarchy/Drawer/types.d.ts +68 -0
  87. package/dist/elements/Hierarchy/Drawer/types.d.ts.map +1 -0
  88. package/dist/elements/Hierarchy/Drawer/types.js +3 -0
  89. package/dist/elements/Hierarchy/Drawer/types.js.map +1 -0
  90. package/dist/elements/Hierarchy/Drawer/useHierarchyDrawer.d.ts +30 -0
  91. package/dist/elements/Hierarchy/Drawer/useHierarchyDrawer.d.ts.map +1 -0
  92. package/dist/elements/Hierarchy/Drawer/useHierarchyDrawer.js +148 -0
  93. package/dist/elements/Hierarchy/Drawer/useHierarchyDrawer.js.map +1 -0
  94. package/dist/elements/Hierarchy/Field/SelectedHierarchies.d.ts +13 -0
  95. package/dist/elements/Hierarchy/Field/SelectedHierarchies.d.ts.map +1 -0
  96. package/dist/elements/Hierarchy/Field/SelectedHierarchies.js +185 -0
  97. package/dist/elements/Hierarchy/Field/SelectedHierarchies.js.map +1 -0
  98. package/dist/elements/Hierarchy/Field/SelectedHierarchies.scss +78 -0
  99. package/dist/elements/Hierarchy/Field/index.client.d.ts +8 -0
  100. package/dist/elements/Hierarchy/Field/index.client.d.ts.map +1 -0
  101. package/dist/elements/Hierarchy/Field/index.client.js +186 -0
  102. package/dist/elements/Hierarchy/Field/index.client.js.map +1 -0
  103. package/dist/elements/Hierarchy/Field/index.scss +35 -0
  104. package/dist/elements/Hierarchy/Field/index.server.d.ts +3 -0
  105. package/dist/elements/Hierarchy/Field/index.server.d.ts.map +1 -0
  106. package/dist/elements/Hierarchy/Field/index.server.js +30 -0
  107. package/dist/elements/Hierarchy/Field/index.server.js.map +1 -0
  108. package/dist/elements/Hierarchy/HydrateProvider/index.d.ts +4 -0
  109. package/dist/elements/Hierarchy/HydrateProvider/index.d.ts.map +1 -0
  110. package/dist/elements/Hierarchy/HydrateProvider/index.js +70 -0
  111. package/dist/elements/Hierarchy/HydrateProvider/index.js.map +1 -0
  112. package/dist/elements/Hierarchy/MoveMany/index.d.ts +22 -0
  113. package/dist/elements/Hierarchy/MoveMany/index.d.ts.map +1 -0
  114. package/dist/elements/Hierarchy/MoveMany/index.js +278 -0
  115. package/dist/elements/Hierarchy/MoveMany/index.js.map +1 -0
  116. package/dist/elements/Hierarchy/MoveMany/index.scss +7 -0
  117. package/dist/elements/Hierarchy/Search/HierarchySearchInput.d.ts +18 -0
  118. package/dist/elements/Hierarchy/Search/HierarchySearchInput.d.ts.map +1 -0
  119. package/dist/elements/Hierarchy/Search/HierarchySearchInput.js +115 -0
  120. package/dist/elements/Hierarchy/Search/HierarchySearchInput.js.map +1 -0
  121. package/dist/elements/Hierarchy/Search/HierarchySearchResultItem.d.ts +13 -0
  122. package/dist/elements/Hierarchy/Search/HierarchySearchResultItem.d.ts.map +1 -0
  123. package/dist/elements/Hierarchy/Search/HierarchySearchResultItem.js +88 -0
  124. package/dist/elements/Hierarchy/Search/HierarchySearchResultItem.js.map +1 -0
  125. package/dist/elements/Hierarchy/Search/HierarchySearchResults.d.ts +17 -0
  126. package/dist/elements/Hierarchy/Search/HierarchySearchResults.d.ts.map +1 -0
  127. package/dist/elements/Hierarchy/Search/HierarchySearchResults.js +85 -0
  128. package/dist/elements/Hierarchy/Search/HierarchySearchResults.js.map +1 -0
  129. package/dist/elements/Hierarchy/Search/index.d.ts +10 -0
  130. package/dist/elements/Hierarchy/Search/index.d.ts.map +1 -0
  131. package/dist/elements/Hierarchy/Search/index.js +144 -0
  132. package/dist/elements/Hierarchy/Search/index.js.map +1 -0
  133. package/dist/elements/Hierarchy/Search/index.scss +212 -0
  134. package/dist/elements/Hierarchy/Search/types.d.ts +21 -0
  135. package/dist/elements/Hierarchy/Search/types.d.ts.map +1 -0
  136. package/dist/elements/Hierarchy/Search/types.js +2 -0
  137. package/dist/elements/Hierarchy/Search/types.js.map +1 -0
  138. package/dist/elements/Hierarchy/Search/useHierarchySearch.d.ts +20 -0
  139. package/dist/elements/Hierarchy/Search/useHierarchySearch.d.ts.map +1 -0
  140. package/dist/elements/Hierarchy/Search/useHierarchySearch.js +122 -0
  141. package/dist/elements/Hierarchy/Search/useHierarchySearch.js.map +1 -0
  142. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.d.ts +21 -0
  143. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.d.ts.map +1 -0
  144. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.js +162 -0
  145. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.js.map +1 -0
  146. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.d.ts +7 -0
  147. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.d.ts.map +1 -0
  148. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.js +177 -0
  149. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.js.map +1 -0
  150. package/dist/elements/Hierarchy/Tree/LoadMore/LoadMoreButton.d.ts +8 -0
  151. package/dist/elements/Hierarchy/Tree/LoadMore/LoadMoreButton.d.ts.map +1 -0
  152. package/dist/elements/Hierarchy/Tree/LoadMore/LoadMoreButton.js +36 -0
  153. package/dist/elements/Hierarchy/Tree/LoadMore/LoadMoreButton.js.map +1 -0
  154. package/dist/elements/Hierarchy/Tree/LoadMore/index.d.ts +12 -0
  155. package/dist/elements/Hierarchy/Tree/LoadMore/index.d.ts.map +1 -0
  156. package/dist/elements/Hierarchy/Tree/LoadMore/index.js +29 -0
  157. package/dist/elements/Hierarchy/Tree/LoadMore/index.js.map +1 -0
  158. package/dist/elements/Hierarchy/Tree/LoadMore/index.scss +26 -0
  159. package/dist/elements/Hierarchy/Tree/TreeConnector.d.ts +7 -0
  160. package/dist/elements/Hierarchy/Tree/TreeConnector.d.ts.map +1 -0
  161. package/dist/elements/Hierarchy/Tree/TreeConnector.js +23 -0
  162. package/dist/elements/Hierarchy/Tree/TreeConnector.js.map +1 -0
  163. package/dist/elements/Hierarchy/Tree/TreeFocusContext.d.ts +28 -0
  164. package/dist/elements/Hierarchy/Tree/TreeFocusContext.d.ts.map +1 -0
  165. package/dist/elements/Hierarchy/Tree/TreeFocusContext.js +140 -0
  166. package/dist/elements/Hierarchy/Tree/TreeFocusContext.js.map +1 -0
  167. package/dist/elements/Hierarchy/Tree/TreeNode/index.d.ts +5 -0
  168. package/dist/elements/Hierarchy/Tree/TreeNode/index.d.ts.map +1 -0
  169. package/dist/elements/Hierarchy/Tree/TreeNode/index.js +225 -0
  170. package/dist/elements/Hierarchy/Tree/TreeNode/index.js.map +1 -0
  171. package/dist/elements/Hierarchy/Tree/TreeNode/index.scss +110 -0
  172. package/dist/elements/Hierarchy/Tree/index.d.ts +5 -0
  173. package/dist/elements/Hierarchy/Tree/index.d.ts.map +1 -0
  174. package/dist/elements/Hierarchy/Tree/index.js +270 -0
  175. package/dist/elements/Hierarchy/Tree/index.js.map +1 -0
  176. package/dist/elements/Hierarchy/Tree/index.scss +60 -0
  177. package/dist/elements/Hierarchy/Tree/types.d.ts +76 -0
  178. package/dist/elements/Hierarchy/Tree/types.d.ts.map +1 -0
  179. package/dist/elements/Hierarchy/Tree/types.js +2 -0
  180. package/dist/elements/Hierarchy/Tree/types.js.map +1 -0
  181. package/dist/elements/Hierarchy/Tree/useChildren.d.ts +32 -0
  182. package/dist/elements/Hierarchy/Tree/useChildren.d.ts.map +1 -0
  183. package/dist/elements/Hierarchy/Tree/useChildren.js +229 -0
  184. package/dist/elements/Hierarchy/Tree/useChildren.js.map +1 -0
  185. package/dist/elements/Link/index.d.ts +4 -0
  186. package/dist/elements/Link/index.d.ts.map +1 -1
  187. package/dist/elements/Link/index.js +5 -0
  188. package/dist/elements/Link/index.js.map +1 -1
  189. package/dist/elements/ListHeader/TitleActions/index.d.ts +0 -1
  190. package/dist/elements/ListHeader/TitleActions/index.d.ts.map +1 -1
  191. package/dist/elements/ListHeader/TitleActions/index.js +0 -1
  192. package/dist/elements/ListHeader/TitleActions/index.js.map +1 -1
  193. package/dist/elements/ListHeader/index.js +2 -2
  194. package/dist/elements/ListHeader/index.js.map +1 -1
  195. package/dist/elements/ListSelection/index.scss +2 -1
  196. package/dist/elements/LoadMoreRow/index.d.ts +15 -0
  197. package/dist/elements/LoadMoreRow/index.d.ts.map +1 -0
  198. package/dist/elements/LoadMoreRow/index.js +75 -0
  199. package/dist/elements/LoadMoreRow/index.js.map +1 -0
  200. package/dist/elements/LoadMoreRow/index.scss +42 -0
  201. package/dist/elements/Locked/index.scss +1 -1
  202. package/dist/elements/PublishButton/index.d.ts.map +1 -1
  203. package/dist/elements/PublishButton/index.js +3 -1
  204. package/dist/elements/PublishButton/index.js.map +1 -1
  205. package/dist/elements/RelationshipTable/index.d.ts.map +1 -1
  206. package/dist/elements/RelationshipTable/index.js +17 -12
  207. package/dist/elements/RelationshipTable/index.js.map +1 -1
  208. package/dist/elements/Spinner/index.d.ts +16 -0
  209. package/dist/elements/Spinner/index.d.ts.map +1 -0
  210. package/dist/elements/Spinner/index.js +49 -0
  211. package/dist/elements/Spinner/index.js.map +1 -0
  212. package/dist/elements/Spinner/index.scss +39 -0
  213. package/dist/elements/StepNav/index.d.ts.map +1 -1
  214. package/dist/elements/StepNav/index.js +10 -1
  215. package/dist/elements/StepNav/index.js.map +1 -1
  216. package/dist/elements/StepNav/types.d.ts +1 -0
  217. package/dist/elements/StepNav/types.d.ts.map +1 -1
  218. package/dist/elements/StepNav/types.js.map +1 -1
  219. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.d.ts +6 -0
  220. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.d.ts.map +1 -0
  221. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.js +187 -0
  222. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.js.map +1 -0
  223. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.scss +29 -0
  224. package/dist/elements/Table/DefaultCell/index.d.ts.map +1 -1
  225. package/dist/elements/Table/DefaultCell/index.js +20 -0
  226. package/dist/elements/Table/DefaultCell/index.js.map +1 -1
  227. package/dist/elements/Toasts/fieldErrors.d.ts +4 -0
  228. package/dist/elements/Toasts/fieldErrors.d.ts.map +1 -1
  229. package/dist/elements/Toasts/fieldErrors.js +4 -2
  230. package/dist/elements/Toasts/fieldErrors.js.map +1 -1
  231. package/dist/elements/Toasts/fieldErrors.spec.js +46 -0
  232. package/dist/elements/Toasts/fieldErrors.spec.js.map +1 -0
  233. package/dist/elements/Tooltip/index.js +1 -1
  234. package/dist/elements/Tooltip/index.js.map +1 -1
  235. package/dist/elements/Tooltip/index.scss +1 -15
  236. package/dist/elements/WhereBuilder/Condition/Relationship/index.d.ts.map +1 -1
  237. package/dist/elements/WhereBuilder/Condition/Relationship/index.js +8 -6
  238. package/dist/elements/WhereBuilder/Condition/Relationship/index.js.map +1 -1
  239. package/dist/elements/WhereBuilder/field-types.d.ts.map +1 -1
  240. package/dist/elements/WhereBuilder/field-types.js +2 -5
  241. package/dist/elements/WhereBuilder/field-types.js.map +1 -1
  242. package/dist/exports/client/{DatePicker-CL2EGBVQ.js → DatePicker-T2DMDMM5.js} +2 -2
  243. package/dist/exports/client/chunk-WDZJLNNB.js +29 -0
  244. package/dist/exports/client/{chunk-SH42NW5R.js.map → chunk-WDZJLNNB.js.map} +4 -4
  245. package/dist/exports/client/index.d.ts +26 -9
  246. package/dist/exports/client/index.d.ts.map +1 -1
  247. package/dist/exports/client/index.js +26 -24
  248. package/dist/exports/client/index.js.map +4 -4
  249. package/dist/exports/rsc/index.d.ts +3 -3
  250. package/dist/exports/rsc/index.d.ts.map +1 -1
  251. package/dist/exports/rsc/index.js +3 -3
  252. package/dist/exports/rsc/index.js.map +1 -1
  253. package/dist/fields/Join/index.d.ts.map +1 -1
  254. package/dist/fields/Join/index.js +1 -1
  255. package/dist/fields/Join/index.js.map +1 -1
  256. package/dist/fields/Null/index.d.ts +11 -0
  257. package/dist/fields/Null/index.d.ts.map +1 -0
  258. package/dist/fields/Null/index.js +13 -0
  259. package/dist/fields/Null/index.js.map +1 -0
  260. package/dist/forms/Form/mergeServerFormState.d.ts.map +1 -1
  261. package/dist/forms/Form/mergeServerFormState.js +101 -24
  262. package/dist/forms/Form/mergeServerFormState.js.map +1 -1
  263. package/dist/icons/Chevron/index.d.ts.map +1 -1
  264. package/dist/icons/Chevron/index.js +5 -1
  265. package/dist/icons/Chevron/index.js.map +1 -1
  266. package/dist/icons/Document/index.d.ts +3 -1
  267. package/dist/icons/Document/index.d.ts.map +1 -1
  268. package/dist/icons/Document/index.js +4 -2
  269. package/dist/icons/Document/index.js.map +1 -1
  270. package/dist/icons/Document/index.scss +4 -0
  271. package/dist/icons/Filter/index.d.ts +4 -0
  272. package/dist/icons/Filter/index.d.ts.map +1 -0
  273. package/dist/icons/Filter/index.js +15 -0
  274. package/dist/icons/Filter/index.js.map +1 -0
  275. package/dist/icons/Filter/index.scss +13 -0
  276. package/dist/icons/Folder/index.d.ts +4 -2
  277. package/dist/icons/Folder/index.d.ts.map +1 -1
  278. package/dist/icons/Folder/index.js +4 -2
  279. package/dist/icons/Folder/index.js.map +1 -1
  280. package/dist/icons/Folder/index.scss +8 -0
  281. package/dist/icons/Lock/index.scss +1 -1
  282. package/dist/icons/Plus/index.d.ts.map +1 -1
  283. package/dist/icons/Plus/index.js +2 -1
  284. package/dist/icons/Plus/index.js.map +1 -1
  285. package/dist/icons/TableView/index.d.ts +3 -0
  286. package/dist/icons/TableView/index.d.ts.map +1 -0
  287. package/dist/icons/TableView/index.js +16 -0
  288. package/dist/icons/TableView/index.js.map +1 -0
  289. package/dist/icons/Tag/index.d.ts +8 -0
  290. package/dist/icons/Tag/index.d.ts.map +1 -0
  291. package/dist/icons/Tag/index.js +22 -0
  292. package/dist/icons/Tag/index.js.map +1 -0
  293. package/dist/icons/Tag/index.scss +14 -0
  294. package/dist/providers/DocumentSelection/index.d.ts +8 -0
  295. package/dist/providers/DocumentSelection/index.d.ts.map +1 -0
  296. package/dist/providers/DocumentSelection/index.js +239 -0
  297. package/dist/providers/DocumentSelection/index.js.map +1 -0
  298. package/dist/providers/DocumentSelection/types.d.ts +122 -0
  299. package/dist/providers/DocumentSelection/types.d.ts.map +1 -0
  300. package/dist/providers/DocumentSelection/types.js +5 -0
  301. package/dist/providers/DocumentSelection/types.js.map +1 -0
  302. package/dist/providers/Hierarchy/index.d.ts +5 -0
  303. package/dist/providers/Hierarchy/index.d.ts.map +1 -0
  304. package/dist/providers/Hierarchy/index.js +350 -0
  305. package/dist/providers/Hierarchy/index.js.map +1 -0
  306. package/dist/providers/Hierarchy/types.d.ts +106 -0
  307. package/dist/providers/Hierarchy/types.d.ts.map +1 -0
  308. package/dist/providers/Hierarchy/types.js +2 -0
  309. package/dist/providers/Hierarchy/types.js.map +1 -0
  310. package/dist/providers/Root/index.d.ts.map +1 -1
  311. package/dist/providers/Root/index.js +18 -15
  312. package/dist/providers/Root/index.js.map +1 -1
  313. package/dist/providers/ServerFunctions/index.d.ts +1 -6
  314. package/dist/providers/ServerFunctions/index.d.ts.map +1 -1
  315. package/dist/providers/ServerFunctions/index.js +0 -18
  316. package/dist/providers/ServerFunctions/index.js.map +1 -1
  317. package/dist/providers/SidebarTabs/index.d.ts +19 -0
  318. package/dist/providers/SidebarTabs/index.d.ts.map +1 -0
  319. package/dist/providers/SidebarTabs/index.js +24 -0
  320. package/dist/providers/SidebarTabs/index.js.map +1 -0
  321. package/dist/providers/TableColumns/buildColumnState/renderCell.d.ts +2 -1
  322. package/dist/providers/TableColumns/buildColumnState/renderCell.d.ts.map +1 -1
  323. package/dist/providers/TableColumns/buildColumnState/renderCell.js +34 -1
  324. package/dist/providers/TableColumns/buildColumnState/renderCell.js.map +1 -1
  325. package/dist/styles.css +1 -1
  326. package/dist/utilities/handleLivePreview.d.ts.map +1 -1
  327. package/dist/utilities/isSuperset.d.ts +6 -0
  328. package/dist/utilities/isSuperset.d.ts.map +1 -0
  329. package/dist/utilities/isSuperset.js +10 -0
  330. package/dist/utilities/isSuperset.js.map +1 -0
  331. package/dist/utilities/renderTable.d.ts +3 -1
  332. package/dist/utilities/renderTable.d.ts.map +1 -1
  333. package/dist/utilities/renderTable.js +9 -3
  334. package/dist/utilities/renderTable.js.map +1 -1
  335. package/dist/views/Edit/index.d.ts +1 -1
  336. package/dist/views/Edit/index.d.ts.map +1 -1
  337. package/dist/views/Edit/index.js +15 -4
  338. package/dist/views/Edit/index.js.map +1 -1
  339. package/dist/views/HierarchyList/DocumentListSelection/index.d.ts +10 -0
  340. package/dist/views/HierarchyList/DocumentListSelection/index.d.ts.map +1 -0
  341. package/dist/views/HierarchyList/DocumentListSelection/index.js +194 -0
  342. package/dist/views/HierarchyList/DocumentListSelection/index.js.map +1 -0
  343. package/dist/views/HierarchyList/HierarchyListHeader/index.d.ts +21 -0
  344. package/dist/views/HierarchyList/HierarchyListHeader/index.d.ts.map +1 -0
  345. package/dist/views/HierarchyList/HierarchyListHeader/index.js +67 -0
  346. package/dist/views/HierarchyList/HierarchyListHeader/index.js.map +1 -0
  347. package/dist/views/HierarchyList/HierarchyListHeader/index.scss +9 -0
  348. package/dist/views/HierarchyList/HierarchyTable/ChildNameCell.d.ts +4 -0
  349. package/dist/views/HierarchyList/HierarchyTable/ChildNameCell.d.ts.map +1 -0
  350. package/dist/views/HierarchyList/HierarchyTable/ChildNameCell.js +104 -0
  351. package/dist/views/HierarchyList/HierarchyTable/ChildNameCell.js.map +1 -0
  352. package/dist/views/HierarchyList/HierarchyTable/DateCell.d.ts +4 -0
  353. package/dist/views/HierarchyList/HierarchyTable/DateCell.d.ts.map +1 -0
  354. package/dist/views/HierarchyList/HierarchyTable/DateCell.js +53 -0
  355. package/dist/views/HierarchyList/HierarchyTable/DateCell.js.map +1 -0
  356. package/dist/views/HierarchyList/HierarchyTable/RelatedNameCell.d.ts +4 -0
  357. package/dist/views/HierarchyList/HierarchyTable/RelatedNameCell.d.ts.map +1 -0
  358. package/dist/views/HierarchyList/HierarchyTable/RelatedNameCell.js +128 -0
  359. package/dist/views/HierarchyList/HierarchyTable/RelatedNameCell.js.map +1 -0
  360. package/dist/views/HierarchyList/HierarchyTable/SlotTable.d.ts +99 -0
  361. package/dist/views/HierarchyList/HierarchyTable/SlotTable.d.ts.map +1 -0
  362. package/dist/views/HierarchyList/HierarchyTable/SlotTable.js +118 -0
  363. package/dist/views/HierarchyList/HierarchyTable/SlotTable.js.map +1 -0
  364. package/dist/views/HierarchyList/HierarchyTable/SlotTable.scss +214 -0
  365. package/dist/views/HierarchyList/HierarchyTable/index.d.ts +27 -0
  366. package/dist/views/HierarchyList/HierarchyTable/index.d.ts.map +1 -0
  367. package/dist/views/HierarchyList/HierarchyTable/index.js +388 -0
  368. package/dist/views/HierarchyList/HierarchyTable/index.js.map +1 -0
  369. package/dist/views/HierarchyList/HierarchyTable/index.scss +148 -0
  370. package/dist/views/HierarchyList/HierarchyTable/types.d.ts +20 -0
  371. package/dist/views/HierarchyList/HierarchyTable/types.d.ts.map +1 -0
  372. package/dist/views/HierarchyList/HierarchyTable/types.js +2 -0
  373. package/dist/views/HierarchyList/HierarchyTable/types.js.map +1 -0
  374. package/dist/views/HierarchyList/TypeFilter/index.d.ts +15 -0
  375. package/dist/views/HierarchyList/TypeFilter/index.d.ts.map +1 -0
  376. package/dist/views/HierarchyList/TypeFilter/index.js +37 -0
  377. package/dist/views/HierarchyList/TypeFilter/index.js.map +1 -0
  378. package/dist/views/HierarchyList/TypeFilter/index.scss +32 -0
  379. package/dist/views/HierarchyList/index.d.ts +5 -0
  380. package/dist/views/HierarchyList/index.d.ts.map +1 -0
  381. package/dist/views/HierarchyList/index.js +305 -0
  382. package/dist/views/HierarchyList/index.js.map +1 -0
  383. package/dist/views/HierarchyList/index.scss +72 -0
  384. package/dist/views/List/index.d.ts.map +1 -1
  385. package/dist/views/List/index.js +51 -7
  386. package/dist/views/List/index.js.map +1 -1
  387. package/package.json +4 -4
  388. package/dist/elements/FolderView/Breadcrumbs/index.d.ts +0 -19
  389. package/dist/elements/FolderView/Breadcrumbs/index.d.ts.map +0 -1
  390. package/dist/elements/FolderView/Breadcrumbs/index.js +0 -96
  391. package/dist/elements/FolderView/Breadcrumbs/index.js.map +0 -1
  392. package/dist/elements/FolderView/Breadcrumbs/index.scss +0 -56
  393. package/dist/elements/FolderView/BrowseByFolderButton/index.d.ts +0 -6
  394. package/dist/elements/FolderView/BrowseByFolderButton/index.d.ts.map +0 -1
  395. package/dist/elements/FolderView/BrowseByFolderButton/index.js +0 -40
  396. package/dist/elements/FolderView/BrowseByFolderButton/index.js.map +0 -1
  397. package/dist/elements/FolderView/BrowseByFolderButton/index.scss +0 -30
  398. package/dist/elements/FolderView/Cell/index.client.d.ts +0 -13
  399. package/dist/elements/FolderView/Cell/index.client.d.ts.map +0 -1
  400. package/dist/elements/FolderView/Cell/index.client.js +0 -95
  401. package/dist/elements/FolderView/Cell/index.client.js.map +0 -1
  402. package/dist/elements/FolderView/Cell/index.server.d.ts +0 -4
  403. package/dist/elements/FolderView/Cell/index.server.d.ts.map +0 -1
  404. package/dist/elements/FolderView/Cell/index.server.js +0 -18
  405. package/dist/elements/FolderView/Cell/index.server.js.map +0 -1
  406. package/dist/elements/FolderView/ColoredFolderIcon/index.d.ts +0 -3
  407. package/dist/elements/FolderView/ColoredFolderIcon/index.d.ts.map +0 -1
  408. package/dist/elements/FolderView/ColoredFolderIcon/index.js +0 -9
  409. package/dist/elements/FolderView/ColoredFolderIcon/index.js.map +0 -1
  410. package/dist/elements/FolderView/ColoredFolderIcon/index.scss +0 -5
  411. package/dist/elements/FolderView/CurrentFolderActions/index.d.ts +0 -7
  412. package/dist/elements/FolderView/CurrentFolderActions/index.d.ts.map +0 -1
  413. package/dist/elements/FolderView/CurrentFolderActions/index.js +0 -162
  414. package/dist/elements/FolderView/CurrentFolderActions/index.js.map +0 -1
  415. package/dist/elements/FolderView/DragOverlaySelection/index.d.ts +0 -11
  416. package/dist/elements/FolderView/DragOverlaySelection/index.d.ts.map +0 -1
  417. package/dist/elements/FolderView/DragOverlaySelection/index.js +0 -62
  418. package/dist/elements/FolderView/DragOverlaySelection/index.js.map +0 -1
  419. package/dist/elements/FolderView/DragOverlaySelection/index.scss +0 -35
  420. package/dist/elements/FolderView/DraggableTableRow/index.d.ts +0 -18
  421. package/dist/elements/FolderView/DraggableTableRow/index.d.ts.map +0 -1
  422. package/dist/elements/FolderView/DraggableTableRow/index.js +0 -63
  423. package/dist/elements/FolderView/DraggableTableRow/index.js.map +0 -1
  424. package/dist/elements/FolderView/DraggableTableRow/index.scss +0 -135
  425. package/dist/elements/FolderView/DraggableWithClick/index.d.ts +0 -15
  426. package/dist/elements/FolderView/DraggableWithClick/index.d.ts.map +0 -1
  427. package/dist/elements/FolderView/DraggableWithClick/index.js +0 -86
  428. package/dist/elements/FolderView/DraggableWithClick/index.js.map +0 -1
  429. package/dist/elements/FolderView/DraggableWithClick/index.scss +0 -5
  430. package/dist/elements/FolderView/Drawers/EditFolderAction/index.d.ts +0 -7
  431. package/dist/elements/FolderView/Drawers/EditFolderAction/index.d.ts.map +0 -1
  432. package/dist/elements/FolderView/Drawers/EditFolderAction/index.js +0 -39
  433. package/dist/elements/FolderView/Drawers/EditFolderAction/index.js.map +0 -1
  434. package/dist/elements/FolderView/Drawers/MoveToFolder/index.d.ts +0 -37
  435. package/dist/elements/FolderView/Drawers/MoveToFolder/index.d.ts.map +0 -1
  436. package/dist/elements/FolderView/Drawers/MoveToFolder/index.js +0 -609
  437. package/dist/elements/FolderView/Drawers/MoveToFolder/index.js.map +0 -1
  438. package/dist/elements/FolderView/Drawers/MoveToFolder/index.scss +0 -30
  439. package/dist/elements/FolderView/FilterFolderTypePill/index.d.ts +0 -4
  440. package/dist/elements/FolderView/FilterFolderTypePill/index.d.ts.map +0 -1
  441. package/dist/elements/FolderView/FilterFolderTypePill/index.js +0 -102
  442. package/dist/elements/FolderView/FilterFolderTypePill/index.js.map +0 -1
  443. package/dist/elements/FolderView/FilterFolderTypePill/index.scss +0 -16
  444. package/dist/elements/FolderView/FolderField/index.scss +0 -12
  445. package/dist/elements/FolderView/FolderField/index.server.d.ts +0 -4
  446. package/dist/elements/FolderView/FolderField/index.server.d.ts.map +0 -1
  447. package/dist/elements/FolderView/FolderField/index.server.js +0 -16
  448. package/dist/elements/FolderView/FolderField/index.server.js.map +0 -1
  449. package/dist/elements/FolderView/FolderFileCard/index.d.ts +0 -30
  450. package/dist/elements/FolderView/FolderFileCard/index.d.ts.map +0 -1
  451. package/dist/elements/FolderView/FolderFileCard/index.js +0 -209
  452. package/dist/elements/FolderView/FolderFileCard/index.js.map +0 -1
  453. package/dist/elements/FolderView/FolderFileCard/index.scss +0 -247
  454. package/dist/elements/FolderView/FolderFileTable/index.d.ts +0 -8
  455. package/dist/elements/FolderView/FolderFileTable/index.d.ts.map +0 -1
  456. package/dist/elements/FolderView/FolderFileTable/index.js +0 -284
  457. package/dist/elements/FolderView/FolderFileTable/index.js.map +0 -1
  458. package/dist/elements/FolderView/FolderFileTable/index.scss +0 -11
  459. package/dist/elements/FolderView/FolderTypeField/index.d.ts +0 -4
  460. package/dist/elements/FolderView/FolderTypeField/index.d.ts.map +0 -1
  461. package/dist/elements/FolderView/FolderTypeField/index.js +0 -123
  462. package/dist/elements/FolderView/FolderTypeField/index.js.map +0 -1
  463. package/dist/elements/FolderView/ItemCardGrid/index.d.ts +0 -16
  464. package/dist/elements/FolderView/ItemCardGrid/index.d.ts.map +0 -1
  465. package/dist/elements/FolderView/ItemCardGrid/index.js +0 -34
  466. package/dist/elements/FolderView/ItemCardGrid/index.js.map +0 -1
  467. package/dist/elements/FolderView/ItemCardGrid/index.scss +0 -16
  468. package/dist/elements/FolderView/MoveDocToFolder/index.d.ts +0 -37
  469. package/dist/elements/FolderView/MoveDocToFolder/index.d.ts.map +0 -1
  470. package/dist/elements/FolderView/MoveDocToFolder/index.js +0 -292
  471. package/dist/elements/FolderView/MoveDocToFolder/index.js.map +0 -1
  472. package/dist/elements/FolderView/SimpleTable/index.d.ts +0 -19
  473. package/dist/elements/FolderView/SimpleTable/index.d.ts.map +0 -1
  474. package/dist/elements/FolderView/SimpleTable/index.js +0 -95
  475. package/dist/elements/FolderView/SimpleTable/index.js.map +0 -1
  476. package/dist/elements/FolderView/SimpleTable/index.scss +0 -59
  477. package/dist/elements/FolderView/SortByPill/index.d.ts +0 -4
  478. package/dist/elements/FolderView/SortByPill/index.d.ts.map +0 -1
  479. package/dist/elements/FolderView/SortByPill/index.js +0 -112
  480. package/dist/elements/FolderView/SortByPill/index.js.map +0 -1
  481. package/dist/elements/FolderView/SortByPill/index.scss +0 -16
  482. package/dist/elements/FolderView/ToggleViewButtons/index.d.ts +0 -8
  483. package/dist/elements/FolderView/ToggleViewButtons/index.d.ts.map +0 -1
  484. package/dist/elements/FolderView/ToggleViewButtons/index.js +0 -31
  485. package/dist/elements/FolderView/ToggleViewButtons/index.js.map +0 -1
  486. package/dist/elements/FolderView/ToggleViewButtons/index.scss +0 -17
  487. package/dist/elements/ListHeader/TitleActions/ListCreateNewDocInFolderButton.d.ts +0 -15
  488. package/dist/elements/ListHeader/TitleActions/ListCreateNewDocInFolderButton.d.ts.map +0 -1
  489. package/dist/elements/ListHeader/TitleActions/ListCreateNewDocInFolderButton.js +0 -182
  490. package/dist/elements/ListHeader/TitleActions/ListCreateNewDocInFolderButton.js.map +0 -1
  491. package/dist/exports/client/chunk-SH42NW5R.js +0 -29
  492. package/dist/providers/Folders/groupItemIDsByRelation.d.ts +0 -3
  493. package/dist/providers/Folders/groupItemIDsByRelation.d.ts.map +0 -1
  494. package/dist/providers/Folders/groupItemIDsByRelation.js +0 -10
  495. package/dist/providers/Folders/groupItemIDsByRelation.js.map +0 -1
  496. package/dist/providers/Folders/index.d.ts +0 -143
  497. package/dist/providers/Folders/index.d.ts.map +0 -1
  498. package/dist/providers/Folders/index.js +0 -641
  499. package/dist/providers/Folders/index.js.map +0 -1
  500. package/dist/utilities/getFolderResultsComponentAndData.d.ts +0 -25
  501. package/dist/utilities/getFolderResultsComponentAndData.d.ts.map +0 -1
  502. package/dist/utilities/getFolderResultsComponentAndData.js +0 -135
  503. package/dist/utilities/getFolderResultsComponentAndData.js.map +0 -1
  504. package/dist/views/BrowseByFolder/index.d.ts +0 -5
  505. package/dist/views/BrowseByFolder/index.d.ts.map +0 -1
  506. package/dist/views/BrowseByFolder/index.js +0 -342
  507. package/dist/views/BrowseByFolder/index.js.map +0 -1
  508. package/dist/views/BrowseByFolder/index.scss +0 -174
  509. package/dist/views/CollectionFolder/ListSelection/index.d.ts +0 -9
  510. package/dist/views/CollectionFolder/ListSelection/index.d.ts.map +0 -1
  511. package/dist/views/CollectionFolder/ListSelection/index.js +0 -180
  512. package/dist/views/CollectionFolder/ListSelection/index.js.map +0 -1
  513. package/dist/views/CollectionFolder/index.d.ts +0 -5
  514. package/dist/views/CollectionFolder/index.d.ts.map +0 -1
  515. package/dist/views/CollectionFolder/index.js +0 -325
  516. package/dist/views/CollectionFolder/index.js.map +0 -1
  517. package/dist/views/CollectionFolder/index.scss +0 -162
  518. /package/dist/exports/client/{DatePicker-CL2EGBVQ.js.map → DatePicker-T2DMDMM5.js.map} +0 -0
@@ -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","expandedNodes","contextExpanded","size","Set","handleToggleNode","childrenCache","Map","prevBaseFilterKeyRef","current","clear","docs","length","docsByParent","parentId","parentKey","has","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","map","node","nodeId","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\n const expandedNodes = useMemo(() => {\n const contextExpanded = getExpandedNodesForCollection(collectionSlug)\n if (contextExpanded.size > 0) {\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 toggleNodeForCollection(collectionSlug, id)\n },\n [collectionSlug, toggleNodeForCollection],\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":[]}
@@ -0,0 +1,60 @@
1
+ @import '../../../scss/styles.scss';
2
+
3
+ .tree {
4
+ --tree-indent: 20px;
5
+ --tree-chevron-width: 16px;
6
+ --tree-chevron-spacing: 8px;
7
+ --tree-node-padding-y: calc(var(--base) / 4);
8
+ --tree-node-content-height: 24px;
9
+ --tree-row-gap: 8px;
10
+ --tree-font-size: 13px;
11
+
12
+ padding: 0;
13
+ margin: 0;
14
+ margin-top: 2px; // account for accessibility outline
15
+
16
+ &__all-option {
17
+ display: flex;
18
+ align-items: center;
19
+ gap: 8px;
20
+ padding: var(--tree-node-padding-y) 0;
21
+ font-size: var(--tree-font-size);
22
+ line-height: var(--tree-node-content-height);
23
+ height: var(--tree-node-content-height);
24
+ margin-bottom: var(--tree-row-gap);
25
+ cursor: pointer;
26
+ user-select: none;
27
+ color: var(--theme-text);
28
+ border-radius: var(--style-radius-s);
29
+
30
+ &:hover {
31
+ text-decoration: underline;
32
+ }
33
+ &:focus-visible {
34
+ outline: var(--accessibility-outline);
35
+ }
36
+ &--selected {
37
+ font-weight: 600;
38
+ }
39
+
40
+ svg {
41
+ width: 16px;
42
+ height: 16px;
43
+ flex-shrink: 0;
44
+ }
45
+ }
46
+
47
+ &__loading {
48
+ display: flex;
49
+ align-items: center;
50
+ justify-content: center;
51
+ padding: var(--base);
52
+ min-height: 100px;
53
+ }
54
+
55
+ &__empty {
56
+ padding: 12px 16px;
57
+ color: var(--theme-elevation-500);
58
+ font-size: var(--tree-font-size);
59
+ }
60
+ }
@@ -0,0 +1,76 @@
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
+ };
30
+ export type TreeDocument = {
31
+ [key: string]: unknown;
32
+ id: number | string;
33
+ };
34
+ export type TreeNodeData = {
35
+ hasChildren: boolean;
36
+ id: number | string;
37
+ title: string;
38
+ };
39
+ export type CachedChildren = {
40
+ children: TreeDocument[];
41
+ hasMore: boolean;
42
+ page: number;
43
+ totalDocs: number;
44
+ };
45
+ export type TreeCache = RefObject<Map<string, CachedChildren>>;
46
+ export type TreeInitialData = {
47
+ docs: TreeDocument[];
48
+ loadedParents: Record<string, {
49
+ hasMore: boolean;
50
+ loadedCount?: number;
51
+ totalDocs: number;
52
+ }>;
53
+ };
54
+ export type TreeNodeProps = {
55
+ allPossibleTypeValues?: string[];
56
+ baseFilter?: null | Where;
57
+ cache: TreeCache;
58
+ collectionSlug: string;
59
+ depth: number;
60
+ expandedNodes: Set<number | string>;
61
+ filterByCollections?: string[];
62
+ limit: number;
63
+ node: TreeNodeData;
64
+ onSelect?: ({ id }: {
65
+ id: number | string;
66
+ }) => void;
67
+ onToggle: ({ id }: {
68
+ id: number | string;
69
+ }) => void;
70
+ parentFieldName: string;
71
+ selected?: boolean;
72
+ selectedNodeId?: number | string;
73
+ typeFieldName?: null | string;
74
+ useAsTitle?: string;
75
+ };
76
+ //# sourceMappingURL=types.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useChildren.d.ts","sourceRoot":"","sources":["../../../../src/elements/Hierarchy/Tree/useChildren.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAMpC,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAK1E,KAAK,eAAe,GAAG;IACrB,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAA;IAChC,gEAAgE;IAChE,UAAU,CAAC,EAAE,IAAI,GAAG,KAAK,CAAA;IACzB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC9B,WAAW,CAAC,EAAE,IAAI,GAAG,eAAe,CAAA;IACpC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,eAAe,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;IACzB,aAAa,CAAC,EAAE,IAAI,GAAG,MAAM,CAAA;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,KAAK,iBAAiB,GAAG;IACvB,QAAQ,EAAE,IAAI,GAAG,YAAY,EAAE,CAAA;IAC/B,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,OAAO,CAAA;IAClB,wFAAwF;IACxF,IAAI,EAAE,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IACnC,QAAQ,EAAE,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IACvC,OAAO,EAAE,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IACtC,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,WAAW,kMAcrB,eAAe,KAAG,iBAqPpB,CAAA"}
@@ -0,0 +1,229 @@
1
+ import { combineWhereConstraints, formatAdminURL } from 'payload/shared';
2
+ import * as qs from 'qs-esm';
3
+ import { useCallback, useEffect, useRef, useState } from 'react';
4
+ import { useConfig } from '../../../providers/Config/index.js';
5
+ import { isSuperset } from '../../../utilities/isSuperset.js';
6
+ export const useChildren = ({
7
+ allPossibleTypeValues,
8
+ baseFilter,
9
+ cache,
10
+ cacheKey: cacheKeyProp,
11
+ collectionSlug,
12
+ enabled = true,
13
+ filterByCollections,
14
+ initialData,
15
+ limit = 2,
16
+ parentFieldName,
17
+ parentId,
18
+ typeFieldName,
19
+ useAsTitle
20
+ }) => {
21
+ const filterKey = filterByCollections?.length ? filterByCollections.slice().sort().join(',') : '';
22
+ const baseFilterKey = baseFilter ? JSON.stringify(baseFilter) : '';
23
+ // Use provided cacheKey for consistency with cache population, or compute if not provided
24
+ const cacheKey = cacheKeyProp ?? `${collectionSlug}-${String(parentId)}-${filterKey}-${baseFilterKey}`;
25
+ const cachedData = cache?.current.get(cacheKey);
26
+ // Check if we have initial data for this specific parent
27
+ const parentKey = parentId === 'null' ? 'null' : String(parentId);
28
+ const parentMeta = initialData?.loadedParents?.[parentKey];
29
+ const hasInitialData = !!parentMeta;
30
+ // Extract docs for this parent from initialData if available
31
+ // Apply same superset filter as fetchPage for consistency
32
+ const initialDocsForParent = hasInitialData ? initialData.docs.filter(doc => {
33
+ const docParent = doc[parentFieldName] || 'null';
34
+ if (String(docParent) !== parentKey) {
35
+ return false;
36
+ }
37
+ if (filterByCollections?.length && typeFieldName) {
38
+ return isSuperset(doc[typeFieldName], filterByCollections);
39
+ }
40
+ return true;
41
+ }) : null;
42
+ const [children, setChildren] = useState(initialDocsForParent || cachedData?.children || null);
43
+ const [isLoading, setIsLoading] = useState(false);
44
+ const [page, setPage] = useState(cachedData?.page || 1);
45
+ const [totalDocs, setTotalDocs] = useState(parentMeta?.totalDocs || cachedData?.totalDocs || 0);
46
+ const [hasMore, setHasMore] = useState(parentMeta?.hasMore || cachedData?.hasMore || false);
47
+ const initializedRef = useRef(!!hasInitialData);
48
+ // Refs for stable access inside load() without adding state to its dep array
49
+ const childrenRef = useRef(children);
50
+ childrenRef.current = children;
51
+ const isLoadingRef = useRef(isLoading);
52
+ isLoadingRef.current = isLoading;
53
+ const {
54
+ config: {
55
+ routes: {
56
+ api
57
+ },
58
+ serverURL
59
+ }
60
+ } = useConfig();
61
+ const fetchPage = useCallback(async (pageToFetch, currentChildren) => {
62
+ setIsLoading(true);
63
+ try {
64
+ const parentCondition = parentId === 'null' || parentId === null ? {
65
+ or: [{
66
+ [parentFieldName]: {
67
+ exists: false
68
+ }
69
+ }, {
70
+ [parentFieldName]: {
71
+ equals: null
72
+ }
73
+ }]
74
+ } : {
75
+ [parentFieldName]: {
76
+ equals: parentId
77
+ }
78
+ };
79
+ // Build filter condition for collection type filtering
80
+ // Matches items that:
81
+ // - allow ANY of the selected collections, OR
82
+ // - are unrestricted (type field doesn't exist), OR
83
+ // - have empty allowedTypes array (unrestricted)
84
+ const filterCondition = filterByCollections?.length && typeFieldName ? {
85
+ or: [{
86
+ [typeFieldName]: {
87
+ in: filterByCollections
88
+ }
89
+ }, {
90
+ [typeFieldName]: {
91
+ exists: false
92
+ }
93
+ },
94
+ // Using not_in with all possible values matches empty arrays in both MongoDB and Postgres
95
+ ...(allPossibleTypeValues?.length ? [{
96
+ [typeFieldName]: {
97
+ not_in: allPossibleTypeValues
98
+ }
99
+ }] : [])]
100
+ } : undefined;
101
+ // Combine conditions: parent + filter + baseFilter
102
+ const where = combineWhereConstraints([parentCondition, filterCondition, baseFilter]);
103
+ const queryParams = {
104
+ limit,
105
+ page: pageToFetch,
106
+ sort: useAsTitle ?? 'id',
107
+ where
108
+ };
109
+ const queryString = qs.stringify(queryParams, {
110
+ addQueryPrefix: true
111
+ });
112
+ const url = formatAdminURL({
113
+ apiRoute: api,
114
+ path: `/${collectionSlug}${queryString}`,
115
+ serverURL
116
+ });
117
+ const response = await fetch(url, {
118
+ credentials: 'include'
119
+ });
120
+ if (!response.ok) {
121
+ throw new Error('Failed to fetch children');
122
+ }
123
+ const data = await response.json();
124
+ const allDocs = data.docs || [];
125
+ // Client-side filter: only show items that are a superset of required collections
126
+ // Server query uses ANY (due to PG limitations), but we want ALL (superset)
127
+ const newDocs = filterByCollections?.length && typeFieldName ? allDocs.filter(doc => isSuperset(doc[typeFieldName], filterByCollections)) : allDocs;
128
+ const newChildren = pageToFetch === 1 ? newDocs : [...(currentChildren || []), ...newDocs];
129
+ setChildren(newChildren);
130
+ setTotalDocs(data.totalDocs || 0);
131
+ setHasMore(data.hasNextPage || false);
132
+ setPage(pageToFetch);
133
+ if (cache) {
134
+ cache.current.set(cacheKey, {
135
+ children: newChildren,
136
+ hasMore: data.hasNextPage || false,
137
+ page: pageToFetch,
138
+ totalDocs: data.totalDocs || 0
139
+ });
140
+ }
141
+ return newDocs;
142
+ } catch {
143
+ if (pageToFetch === 1) {
144
+ const emptyChildren = [];
145
+ setChildren(emptyChildren);
146
+ setHasMore(false);
147
+ if (cache) {
148
+ cache.current.set(cacheKey, {
149
+ children: emptyChildren,
150
+ hasMore: false,
151
+ page: 1,
152
+ totalDocs: 0
153
+ });
154
+ }
155
+ }
156
+ return [];
157
+ } finally {
158
+ setIsLoading(false);
159
+ }
160
+ }, [allPossibleTypeValues, baseFilter, parentId, parentFieldName, filterByCollections, typeFieldName, limit, useAsTitle, api, collectionSlug, serverURL, cache, cacheKey]);
161
+ // Reset state and reload when filter changes
162
+ const prevFilterKeyRef = useRef(filterKey);
163
+ useEffect(() => {
164
+ if (prevFilterKeyRef.current !== filterKey) {
165
+ prevFilterKeyRef.current = filterKey;
166
+ setChildren(null);
167
+ setPage(1);
168
+ setTotalDocs(0);
169
+ setHasMore(false);
170
+ // If the node is currently expanded, immediately reload with the new filter
171
+ if (enabled) {
172
+ void fetchPage(1, null);
173
+ }
174
+ }
175
+ }, [filterKey, enabled, fetchPage]);
176
+ // Load children explicitly. Safe to call multiple times — no-ops if already loaded or loading.
177
+ const load = useCallback(async () => {
178
+ // Consume initialData on first call without re-fetching
179
+ if (initializedRef.current && childrenRef.current !== null) {
180
+ initializedRef.current = false;
181
+ return childrenRef.current;
182
+ }
183
+ // Already loaded
184
+ if (childrenRef.current !== null) {
185
+ return childrenRef.current;
186
+ }
187
+ // Guard against concurrent calls
188
+ if (isLoadingRef.current) {
189
+ return [];
190
+ }
191
+ // Restore from cache when available (e.g., after a filter reset)
192
+ const currentCachedData = cache?.current.get(cacheKey);
193
+ if (currentCachedData) {
194
+ setChildren(currentCachedData.children);
195
+ setPage(currentCachedData.page);
196
+ setTotalDocs(currentCachedData.totalDocs);
197
+ setHasMore(currentCachedData.hasMore);
198
+ return currentCachedData.children;
199
+ }
200
+ return fetchPage(1, null);
201
+ }, [cache, cacheKey, fetchPage]);
202
+ const loadMore = useCallback(async () => {
203
+ if (isLoading || !hasMore) {
204
+ return [];
205
+ }
206
+ // If we have fewer items than our limit, the cached data was fetched with a smaller limit
207
+ // We need to re-fetch page 1 with our limit to get the full first page
208
+ const shouldRefetchPage1 = children && children.length < limit;
209
+ return fetchPage(shouldRefetchPage1 ? 1 : page + 1, children);
210
+ }, [isLoading, hasMore, page, children, fetchPage, limit]);
211
+ const refresh = useCallback(async () => {
212
+ if (cache) {
213
+ cache.current.delete(cacheKey);
214
+ }
215
+ setChildren(null);
216
+ setPage(1);
217
+ return fetchPage(1, null);
218
+ }, [cache, cacheKey, fetchPage]);
219
+ return {
220
+ children,
221
+ hasMore,
222
+ isLoading,
223
+ load,
224
+ loadMore,
225
+ refresh,
226
+ totalDocs
227
+ };
228
+ };
229
+ //# sourceMappingURL=useChildren.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useChildren.js","names":["combineWhereConstraints","formatAdminURL","qs","useCallback","useEffect","useRef","useState","useConfig","isSuperset","useChildren","allPossibleTypeValues","baseFilter","cache","cacheKey","cacheKeyProp","collectionSlug","enabled","filterByCollections","initialData","limit","parentFieldName","parentId","typeFieldName","useAsTitle","filterKey","length","slice","sort","join","baseFilterKey","JSON","stringify","String","cachedData","current","get","parentKey","parentMeta","loadedParents","hasInitialData","initialDocsForParent","docs","filter","doc","docParent","children","setChildren","isLoading","setIsLoading","page","setPage","totalDocs","setTotalDocs","hasMore","setHasMore","initializedRef","childrenRef","isLoadingRef","config","routes","api","serverURL","fetchPage","pageToFetch","currentChildren","parentCondition","or","exists","equals","filterCondition","in","not_in","undefined","where","queryParams","queryString","addQueryPrefix","url","apiRoute","path","response","fetch","credentials","ok","Error","data","json","allDocs","newDocs","newChildren","hasNextPage","set","emptyChildren","prevFilterKeyRef","load","currentCachedData","loadMore","shouldRefetchPage1","refresh","delete"],"sources":["../../../../src/elements/Hierarchy/Tree/useChildren.tsx"],"sourcesContent":["import type { Where } from 'payload'\n\nimport { combineWhereConstraints, formatAdminURL } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport { useCallback, useEffect, useRef, useState } from 'react'\n\nimport type { TreeCache, TreeDocument, TreeInitialData } from './types.js'\n\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { isSuperset } from '../../../utilities/isSuperset.js'\n\ntype UseChildrenArgs = {\n allPossibleTypeValues?: string[]\n /** Base filter to apply to all queries (e.g., tenant filter) */\n baseFilter?: null | Where\n cache?: TreeCache\n /** Pre-computed cache key to ensure consistency with cache population */\n cacheKey?: string\n collectionSlug: string\n enabled?: boolean\n filterByCollections?: string[]\n initialData?: null | TreeInitialData\n limit?: number\n parentFieldName: string\n parentId: number | string\n typeFieldName?: null | string\n useAsTitle?: string\n}\n\ntype UseChildrenReturn = {\n children: null | TreeDocument[]\n hasMore: boolean\n isLoading: boolean\n /** Explicitly load children. Safe to call multiple times — no-ops if already loaded. */\n load: () => Promise<TreeDocument[]>\n loadMore: () => Promise<TreeDocument[]>\n refresh: () => Promise<TreeDocument[]>\n totalDocs: number\n}\n\nexport const useChildren = ({\n allPossibleTypeValues,\n baseFilter,\n cache,\n cacheKey: cacheKeyProp,\n collectionSlug,\n enabled = true,\n filterByCollections,\n initialData,\n limit = 2,\n parentFieldName,\n parentId,\n typeFieldName,\n useAsTitle,\n}: UseChildrenArgs): UseChildrenReturn => {\n const filterKey = filterByCollections?.length ? filterByCollections.slice().sort().join(',') : ''\n const baseFilterKey = baseFilter ? JSON.stringify(baseFilter) : ''\n // Use provided cacheKey for consistency with cache population, or compute if not provided\n const cacheKey =\n cacheKeyProp ?? `${collectionSlug}-${String(parentId)}-${filterKey}-${baseFilterKey}`\n const cachedData = cache?.current.get(cacheKey)\n\n // Check if we have initial data for this specific parent\n const parentKey = parentId === 'null' ? 'null' : String(parentId)\n const parentMeta = initialData?.loadedParents?.[parentKey]\n const hasInitialData = !!parentMeta\n\n // Extract docs for this parent from initialData if available\n // Apply same superset filter as fetchPage for consistency\n const initialDocsForParent = hasInitialData\n ? initialData.docs.filter((doc) => {\n const docParent = doc[parentFieldName] || 'null'\n if (String(docParent) !== parentKey) {\n return false\n }\n if (filterByCollections?.length && typeFieldName) {\n return isSuperset(doc[typeFieldName] as string[] | undefined, filterByCollections)\n }\n return true\n })\n : null\n\n const [children, setChildren] = useState<null | TreeDocument[]>(\n initialDocsForParent || cachedData?.children || null,\n )\n const [isLoading, setIsLoading] = useState(false)\n const [page, setPage] = useState(cachedData?.page || 1)\n const [totalDocs, setTotalDocs] = useState(parentMeta?.totalDocs || cachedData?.totalDocs || 0)\n const [hasMore, setHasMore] = useState(parentMeta?.hasMore || cachedData?.hasMore || false)\n const initializedRef = useRef(!!hasInitialData)\n // Refs for stable access inside load() without adding state to its dep array\n const childrenRef = useRef(children)\n childrenRef.current = children\n const isLoadingRef = useRef(isLoading)\n isLoadingRef.current = isLoading\n const {\n config: {\n routes: { api },\n serverURL,\n },\n } = useConfig()\n\n const fetchPage = useCallback(\n async (\n pageToFetch: number,\n currentChildren: null | TreeDocument[],\n ): Promise<TreeDocument[]> => {\n setIsLoading(true)\n\n try {\n const parentCondition =\n parentId === 'null' || parentId === null\n ? {\n or: [\n { [parentFieldName]: { exists: false } },\n { [parentFieldName]: { equals: null } },\n ],\n }\n : { [parentFieldName]: { equals: parentId } }\n\n // Build filter condition for collection type filtering\n // Matches items that:\n // - allow ANY of the selected collections, OR\n // - are unrestricted (type field doesn't exist), OR\n // - have empty allowedTypes array (unrestricted)\n const filterCondition: undefined | Where =\n filterByCollections?.length && typeFieldName\n ? {\n or: [\n { [typeFieldName]: { in: filterByCollections } },\n { [typeFieldName]: { exists: false } },\n // Using not_in with all possible values matches empty arrays in both MongoDB and Postgres\n ...(allPossibleTypeValues?.length\n ? [{ [typeFieldName]: { not_in: allPossibleTypeValues } }]\n : []),\n ],\n }\n : undefined\n\n // Combine conditions: parent + filter + baseFilter\n const where = combineWhereConstraints([parentCondition, filterCondition, baseFilter])\n\n const queryParams: Record<string, unknown> = {\n limit,\n page: pageToFetch,\n sort: useAsTitle ?? 'id',\n where,\n }\n\n const queryString = qs.stringify(queryParams, { addQueryPrefix: true })\n const url = formatAdminURL({\n apiRoute: api,\n path: `/${collectionSlug}${queryString}`,\n serverURL,\n })\n const response = await fetch(url, {\n credentials: 'include',\n })\n\n if (!response.ok) {\n throw new Error('Failed to fetch children')\n }\n\n const data = await response.json()\n const allDocs: TreeDocument[] = data.docs || []\n\n // Client-side filter: only show items that are a superset of required collections\n // Server query uses ANY (due to PG limitations), but we want ALL (superset)\n const newDocs =\n filterByCollections?.length && typeFieldName\n ? allDocs.filter((doc) =>\n isSuperset(doc[typeFieldName] as string[] | undefined, filterByCollections),\n )\n : allDocs\n\n const newChildren = pageToFetch === 1 ? newDocs : [...(currentChildren || []), ...newDocs]\n\n setChildren(newChildren)\n setTotalDocs(data.totalDocs || 0)\n setHasMore(data.hasNextPage || false)\n setPage(pageToFetch)\n\n if (cache) {\n cache.current.set(cacheKey, {\n children: newChildren,\n hasMore: data.hasNextPage || false,\n page: pageToFetch,\n totalDocs: data.totalDocs || 0,\n })\n }\n\n return newDocs\n } catch {\n if (pageToFetch === 1) {\n const emptyChildren: TreeDocument[] = []\n setChildren(emptyChildren)\n setHasMore(false)\n\n if (cache) {\n cache.current.set(cacheKey, {\n children: emptyChildren,\n hasMore: false,\n page: 1,\n totalDocs: 0,\n })\n }\n }\n\n return []\n } finally {\n setIsLoading(false)\n }\n },\n [\n allPossibleTypeValues,\n baseFilter,\n parentId,\n parentFieldName,\n filterByCollections,\n typeFieldName,\n limit,\n useAsTitle,\n api,\n collectionSlug,\n serverURL,\n cache,\n cacheKey,\n ],\n )\n\n // Reset state and reload when filter changes\n const prevFilterKeyRef = useRef(filterKey)\n useEffect(() => {\n if (prevFilterKeyRef.current !== filterKey) {\n prevFilterKeyRef.current = filterKey\n setChildren(null)\n setPage(1)\n setTotalDocs(0)\n setHasMore(false)\n // If the node is currently expanded, immediately reload with the new filter\n if (enabled) {\n void fetchPage(1, null)\n }\n }\n }, [filterKey, enabled, fetchPage])\n\n // Load children explicitly. Safe to call multiple times — no-ops if already loaded or loading.\n const load = useCallback(async (): Promise<TreeDocument[]> => {\n // Consume initialData on first call without re-fetching\n if (initializedRef.current && childrenRef.current !== null) {\n initializedRef.current = false\n return childrenRef.current\n }\n\n // Already loaded\n if (childrenRef.current !== null) {\n return childrenRef.current\n }\n\n // Guard against concurrent calls\n if (isLoadingRef.current) {\n return []\n }\n\n // Restore from cache when available (e.g., after a filter reset)\n const currentCachedData = cache?.current.get(cacheKey)\n if (currentCachedData) {\n setChildren(currentCachedData.children)\n setPage(currentCachedData.page)\n setTotalDocs(currentCachedData.totalDocs)\n setHasMore(currentCachedData.hasMore)\n return currentCachedData.children\n }\n\n return fetchPage(1, null)\n }, [cache, cacheKey, fetchPage])\n\n const loadMore = useCallback(async (): Promise<TreeDocument[]> => {\n if (isLoading || !hasMore) {\n return []\n }\n\n // If we have fewer items than our limit, the cached data was fetched with a smaller limit\n // We need to re-fetch page 1 with our limit to get the full first page\n const shouldRefetchPage1 = children && children.length < limit\n\n return fetchPage(shouldRefetchPage1 ? 1 : page + 1, children)\n }, [isLoading, hasMore, page, children, fetchPage, limit])\n\n const refresh = useCallback(async (): Promise<TreeDocument[]> => {\n if (cache) {\n cache.current.delete(cacheKey)\n }\n setChildren(null)\n setPage(1)\n return fetchPage(1, null)\n }, [cache, cacheKey, fetchPage])\n\n return { children, hasMore, isLoading, load, loadMore, refresh, totalDocs }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -4,6 +4,10 @@ declare const NextLink: React.ForwardRefExoticComponent<Omit<React.AnchorHTMLAtt
4
4
  children?: React.ReactNode | undefined;
5
5
  } & React.RefAttributes<HTMLAnchorElement>>;
6
6
  type Props = {
7
+ /**
8
+ * Force a hard navigation using window.location instead of client-side routing
9
+ */
10
+ forceReload?: boolean;
7
11
  /**
8
12
  * Disable the e.preventDefault() call on click if you want to handle it yourself via onClick
9
13
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Link/index.tsx"],"names":[],"mappings":"AACA,OAAO,cAAc,MAAM,cAAc,CAAA;AAEzC,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,QAAA,MAAM,QAAQ;eA4E+nF,MAAO,SAAS;2CA5EvkF,CAAA;AAgBtF,KAAK,KAAK,GAAG;IACX;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;AAElC,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAkDhC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Link/index.tsx"],"names":[],"mappings":"AACA,OAAO,cAAc,MAAM,cAAc,CAAA;AAEzC,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,QAAA,MAAM,QAAQ;eAsFk7F,MAAO,SAAS;2CAtF13F,CAAA;AAgBtF,KAAK,KAAK,GAAG;IACX;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;AAElC,eAAO,MAAM,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAwDhC,CAAA"}
@@ -17,6 +17,7 @@ function isModifiedEvent(event) {
17
17
  }
18
18
  export const Link = ({
19
19
  children,
20
+ forceReload = false,
20
21
  href,
21
22
  onClick,
22
23
  preventDefault = true,
@@ -44,6 +45,10 @@ export const Link = ({
44
45
  e.preventDefault();
45
46
  }
46
47
  const url = typeof href === 'string' ? href : formatUrl(href);
48
+ if (forceReload) {
49
+ window.location.href = url;
50
+ return;
51
+ }
47
52
  const navigate = () => {
48
53
  if (replace) {
49
54
  void router.replace(url, {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["NextLinkImport","useRouter","React","useRouteTransition","formatUrl","NextLink","default","isModifiedEvent","event","eventTarget","currentTarget","target","getAttribute","metaKey","ctrlKey","shiftKey","altKey","nativeEvent","which","Link","children","href","onClick","preventDefault","ref","replace","scroll","rest","router","startRouteTransition","_jsx","e","url","navigate","push"],"sources":["../../../src/elements/Link/index.tsx"],"sourcesContent":["'use client'\nimport NextLinkImport from 'next/link.js'\nimport { useRouter } from 'next/navigation.js'\nimport React from 'react'\n\nimport { useRouteTransition } from '../../providers/RouteTransition/index.js'\nimport { formatUrl } from './formatUrl.js'\n\nconst NextLink = 'default' in NextLinkImport ? NextLinkImport.default : NextLinkImport\n\n// Copied from https://github.com/vercel/next.js/blob/canary/packages/next/src/client/link.tsx#L180-L191\nfunction isModifiedEvent(event: React.MouseEvent): boolean {\n const eventTarget = event.currentTarget as HTMLAnchorElement | SVGAElement\n const target = eventTarget.getAttribute('target')\n return (\n (target && target !== '_self') ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey ||\n event.altKey || // triggers resource download\n (event.nativeEvent && event.nativeEvent.which === 2)\n )\n}\n\ntype Props = {\n /**\n * Disable the e.preventDefault() call on click if you want to handle it yourself via onClick\n *\n * @default true\n */\n preventDefault?: boolean\n} & Parameters<typeof NextLink>[0]\n\nexport const Link: React.FC<Props> = ({\n children,\n href,\n onClick,\n preventDefault = true,\n ref,\n replace,\n scroll,\n ...rest\n}) => {\n const router = useRouter()\n const { startRouteTransition } = useRouteTransition()\n\n return (\n <NextLink\n href={href}\n onClick={(e) => {\n if (isModifiedEvent(e)) {\n return\n }\n\n if (onClick) {\n onClick(e)\n }\n\n // We need a preventDefault here so that a clicked link doesn't trigger twice,\n // once for default browser navigation and once for startRouteTransition\n if (preventDefault) {\n e.preventDefault()\n }\n\n const url = typeof href === 'string' ? href : formatUrl(href)\n\n const navigate = () => {\n if (replace) {\n void router.replace(url, { scroll })\n } else {\n void router.push(url, { scroll })\n }\n }\n\n // Call startRouteTransition if available, otherwise navigate directly\n startRouteTransition(navigate)\n }}\n ref={ref}\n {...rest}\n >\n {children}\n </NextLink>\n )\n}\n"],"mappings":"AAAA;;;AACA,OAAOA,cAAA,MAAoB;AAC3B,SAASC,SAAS,QAAQ;AAC1B,OAAOC,KAAA,MAAW;AAElB,SAASC,kBAAkB,QAAQ;AACnC,SAASC,SAAS,QAAQ;AAE1B,MAAMC,QAAA,GAAW,aAAaL,cAAA,GAAiBA,cAAA,CAAeM,OAAO,GAAGN,cAAA;AAExE;AACA,SAASO,gBAAgBC,KAAuB;EAC9C,MAAMC,WAAA,GAAcD,KAAA,CAAME,aAAa;EACvC,MAAMC,MAAA,GAASF,WAAA,CAAYG,YAAY,CAAC;EACxC,OACED,MAAC,IAAUA,MAAA,KAAW,WACtBH,KAAA,CAAMK,OAAO,IACbL,KAAA,CAAMM,OAAO,IACbN,KAAA,CAAMO,QAAQ,IACdP,KAAA,CAAMQ,MAAM;EAAI;EACfR,KAAA,CAAMS,WAAW,IAAIT,KAAA,CAAMS,WAAW,CAACC,KAAK,KAAK;AAEtD;AAWA,OAAO,MAAMC,IAAA,GAAwBA,CAAC;EACpCC,QAAQ;EACRC,IAAI;EACJC,OAAO;EACPC,cAAA,GAAiB,IAAI;EACrBC,GAAG;EACHC,OAAO;EACPC,MAAM;EACN,GAAGC;AAAA,CACJ;EACC,MAAMC,MAAA,GAAS3B,SAAA;EACf,MAAM;IAAE4B;EAAoB,CAAE,GAAG1B,kBAAA;EAEjC,oBACE2B,IAAA,CAACzB,QAAA;IACCgB,IAAA,EAAMA,IAAA;IACNC,OAAA,EAAUS,CAAA;MACR,IAAIxB,eAAA,CAAgBwB,CAAA,GAAI;QACtB;MACF;MAEA,IAAIT,OAAA,EAAS;QACXA,OAAA,CAAQS,CAAA;MACV;MAEA;MACA;MACA,IAAIR,cAAA,EAAgB;QAClBQ,CAAA,CAAER,cAAc;MAClB;MAEA,MAAMS,GAAA,GAAM,OAAOX,IAAA,KAAS,WAAWA,IAAA,GAAOjB,SAAA,CAAUiB,IAAA;MAExD,MAAMY,QAAA,GAAWA,CAAA;QACf,IAAIR,OAAA,EAAS;UACX,KAAKG,MAAA,CAAOH,OAAO,CAACO,GAAA,EAAK;YAAEN;UAAO;QACpC,OAAO;UACL,KAAKE,MAAA,CAAOM,IAAI,CAACF,GAAA,EAAK;YAAEN;UAAO;QACjC;MACF;MAEA;MACAG,oBAAA,CAAqBI,QAAA;IACvB;IACAT,GAAA,EAAKA,GAAA;IACJ,GAAGG,IAAI;cAEPP;;AAGP","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["NextLinkImport","useRouter","React","useRouteTransition","formatUrl","NextLink","default","isModifiedEvent","event","eventTarget","currentTarget","target","getAttribute","metaKey","ctrlKey","shiftKey","altKey","nativeEvent","which","Link","children","forceReload","href","onClick","preventDefault","ref","replace","scroll","rest","router","startRouteTransition","_jsx","e","url","window","location","navigate","push"],"sources":["../../../src/elements/Link/index.tsx"],"sourcesContent":["'use client'\nimport NextLinkImport from 'next/link.js'\nimport { useRouter } from 'next/navigation.js'\nimport React from 'react'\n\nimport { useRouteTransition } from '../../providers/RouteTransition/index.js'\nimport { formatUrl } from './formatUrl.js'\n\nconst NextLink = 'default' in NextLinkImport ? NextLinkImport.default : NextLinkImport\n\n// Copied from https://github.com/vercel/next.js/blob/canary/packages/next/src/client/link.tsx#L180-L191\nfunction isModifiedEvent(event: React.MouseEvent): boolean {\n const eventTarget = event.currentTarget as HTMLAnchorElement | SVGAElement\n const target = eventTarget.getAttribute('target')\n return (\n (target && target !== '_self') ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey ||\n event.altKey || // triggers resource download\n (event.nativeEvent && event.nativeEvent.which === 2)\n )\n}\n\ntype Props = {\n /**\n * Force a hard navigation using window.location instead of client-side routing\n */\n forceReload?: boolean\n /**\n * Disable the e.preventDefault() call on click if you want to handle it yourself via onClick\n *\n * @default true\n */\n preventDefault?: boolean\n} & Parameters<typeof NextLink>[0]\n\nexport const Link: React.FC<Props> = ({\n children,\n forceReload = false,\n href,\n onClick,\n preventDefault = true,\n ref,\n replace,\n scroll,\n ...rest\n}) => {\n const router = useRouter()\n const { startRouteTransition } = useRouteTransition()\n\n return (\n <NextLink\n href={href}\n onClick={(e) => {\n if (isModifiedEvent(e)) {\n return\n }\n\n if (onClick) {\n onClick(e)\n }\n\n // We need a preventDefault here so that a clicked link doesn't trigger twice,\n // once for default browser navigation and once for startRouteTransition\n if (preventDefault) {\n e.preventDefault()\n }\n\n const url = typeof href === 'string' ? href : formatUrl(href)\n\n if (forceReload) {\n window.location.href = url\n return\n }\n\n const navigate = () => {\n if (replace) {\n void router.replace(url, { scroll })\n } else {\n void router.push(url, { scroll })\n }\n }\n\n // Call startRouteTransition if available, otherwise navigate directly\n startRouteTransition(navigate)\n }}\n ref={ref}\n {...rest}\n >\n {children}\n </NextLink>\n )\n}\n"],"mappings":"AAAA;;;AACA,OAAOA,cAAA,MAAoB;AAC3B,SAASC,SAAS,QAAQ;AAC1B,OAAOC,KAAA,MAAW;AAElB,SAASC,kBAAkB,QAAQ;AACnC,SAASC,SAAS,QAAQ;AAE1B,MAAMC,QAAA,GAAW,aAAaL,cAAA,GAAiBA,cAAA,CAAeM,OAAO,GAAGN,cAAA;AAExE;AACA,SAASO,gBAAgBC,KAAuB;EAC9C,MAAMC,WAAA,GAAcD,KAAA,CAAME,aAAa;EACvC,MAAMC,MAAA,GAASF,WAAA,CAAYG,YAAY,CAAC;EACxC,OACED,MAAC,IAAUA,MAAA,KAAW,WACtBH,KAAA,CAAMK,OAAO,IACbL,KAAA,CAAMM,OAAO,IACbN,KAAA,CAAMO,QAAQ,IACdP,KAAA,CAAMQ,MAAM;EAAI;EACfR,KAAA,CAAMS,WAAW,IAAIT,KAAA,CAAMS,WAAW,CAACC,KAAK,KAAK;AAEtD;AAeA,OAAO,MAAMC,IAAA,GAAwBA,CAAC;EACpCC,QAAQ;EACRC,WAAA,GAAc,KAAK;EACnBC,IAAI;EACJC,OAAO;EACPC,cAAA,GAAiB,IAAI;EACrBC,GAAG;EACHC,OAAO;EACPC,MAAM;EACN,GAAGC;AAAA,CACJ;EACC,MAAMC,MAAA,GAAS5B,SAAA;EACf,MAAM;IAAE6B;EAAoB,CAAE,GAAG3B,kBAAA;EAEjC,oBACE4B,IAAA,CAAC1B,QAAA;IACCiB,IAAA,EAAMA,IAAA;IACNC,OAAA,EAAUS,CAAA;MACR,IAAIzB,eAAA,CAAgByB,CAAA,GAAI;QACtB;MACF;MAEA,IAAIT,OAAA,EAAS;QACXA,OAAA,CAAQS,CAAA;MACV;MAEA;MACA;MACA,IAAIR,cAAA,EAAgB;QAClBQ,CAAA,CAAER,cAAc;MAClB;MAEA,MAAMS,GAAA,GAAM,OAAOX,IAAA,KAAS,WAAWA,IAAA,GAAOlB,SAAA,CAAUkB,IAAA;MAExD,IAAID,WAAA,EAAa;QACfa,MAAA,CAAOC,QAAQ,CAACb,IAAI,GAAGW,GAAA;QACvB;MACF;MAEA,MAAMG,QAAA,GAAWA,CAAA;QACf,IAAIV,OAAA,EAAS;UACX,KAAKG,MAAA,CAAOH,OAAO,CAACO,GAAA,EAAK;YAAEN;UAAO;QACpC,OAAO;UACL,KAAKE,MAAA,CAAOQ,IAAI,CAACJ,GAAA,EAAK;YAAEN;UAAO;QACjC;MACF;MAEA;MACAG,oBAAA,CAAqBM,QAAA;IACvB;IACAX,GAAA,EAAKA,GAAA;IACJ,GAAGG,IAAI;cAEPR;;AAGP","ignoreList":[]}
@@ -1,5 +1,4 @@
1
1
  export { ListBulkUploadButton } from './ListBulkUploadButton.js';
2
2
  export { ListCreateNewButton } from './ListCreateNewDocButton.js';
3
- export { ListCreateNewDocInFolderButton } from './ListCreateNewDocInFolderButton.js';
4
3
  export { ListEmptyTrashButton } from './ListEmptyTrashButton.js';
5
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/ListHeader/TitleActions/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,8BAA8B,EAAE,MAAM,qCAAqC,CAAA;AACpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/ListHeader/TitleActions/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA"}
@@ -1,5 +1,4 @@
1
1
  export { ListBulkUploadButton } from './ListBulkUploadButton.js';
2
2
  export { ListCreateNewButton } from './ListCreateNewDocButton.js';
3
- export { ListCreateNewDocInFolderButton } from './ListCreateNewDocInFolderButton.js';
4
3
  export { ListEmptyTrashButton } from './ListEmptyTrashButton.js';
5
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["ListBulkUploadButton","ListCreateNewButton","ListCreateNewDocInFolderButton","ListEmptyTrashButton"],"sources":["../../../../src/elements/ListHeader/TitleActions/index.tsx"],"sourcesContent":["export { ListBulkUploadButton } from './ListBulkUploadButton.js'\nexport { ListCreateNewButton } from './ListCreateNewDocButton.js'\nexport { ListCreateNewDocInFolderButton } from './ListCreateNewDocInFolderButton.js'\nexport { ListEmptyTrashButton } from './ListEmptyTrashButton.js'\n"],"mappings":"AAAA,SAASA,oBAAoB,QAAQ;AACrC,SAASC,mBAAmB,QAAQ;AACpC,SAASC,8BAA8B,QAAQ;AAC/C,SAASC,oBAAoB,QAAQ","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["ListBulkUploadButton","ListCreateNewButton","ListEmptyTrashButton"],"sources":["../../../../src/elements/ListHeader/TitleActions/index.tsx"],"sourcesContent":["export { ListBulkUploadButton } from './ListBulkUploadButton.js'\nexport { ListCreateNewButton } from './ListCreateNewDocButton.js'\nexport { ListEmptyTrashButton } from './ListEmptyTrashButton.js'\n"],"mappings":"AAAA,SAASA,oBAAoB,QAAQ;AACrC,SAASC,mBAAmB,QAAQ;AACpC,SAASC,oBAAoB,QAAQ","ignoreList":[]}
@@ -12,11 +12,11 @@ export const ListHeader = props => {
12
12
  children: [/*#__PURE__*/_jsx("h1", {
13
13
  className: `${listHeaderClass}__title`,
14
14
  children: props.title
15
- }), props.TitleActions.length ? /*#__PURE__*/_jsx("div", {
15
+ }), props.TitleActions?.length ? /*#__PURE__*/_jsx("div", {
16
16
  className: `${listHeaderClass}__title-actions`,
17
17
  children: props.TitleActions
18
18
  }) : null]
19
- }), props.Actions.length ? /*#__PURE__*/_jsx("div", {
19
+ }), props.Actions?.length ? /*#__PURE__*/_jsx("div", {
20
20
  className: `${listHeaderClass}__actions`,
21
21
  children: props.Actions
22
22
  }) : null]
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["React","listHeaderClass","ListHeader","props","_jsxs","className","filter","Boolean","join","_jsx","title","TitleActions","length","Actions","AfterListHeaderContent"],"sources":["../../../src/elements/ListHeader/index.tsx"],"sourcesContent":["import React from 'react'\n\nimport './index.scss'\n\nexport const listHeaderClass = 'list-header'\n\ntype ListHeaderProps = {\n readonly Actions?: React.ReactNode[]\n readonly AfterListHeaderContent?: React.ReactNode\n readonly className?: string\n readonly title: string\n readonly TitleActions?: React.ReactNode[]\n}\nexport const ListHeader: React.FC<ListHeaderProps> = (props) => {\n return (\n <header className={[listHeaderClass, props.className].filter(Boolean).join(' ')}>\n <div className={`${listHeaderClass}__content`}>\n <div className={`${listHeaderClass}__title-and-actions`}>\n <h1 className={`${listHeaderClass}__title`}>{props.title}</h1>\n {props.TitleActions.length ? (\n <div className={`${listHeaderClass}__title-actions`}>{props.TitleActions}</div>\n ) : null}\n </div>\n {props.Actions.length ? (\n <div className={`${listHeaderClass}__actions`}>{props.Actions}</div>\n ) : null}\n </div>\n {props.AfterListHeaderContent ? (\n <div className={`${listHeaderClass}__after-header-content`}>\n {props.AfterListHeaderContent}\n </div>\n ) : null}\n </header>\n )\n}\n"],"mappings":";AAAA,OAAOA,KAAA,MAAW;AAElB,OAAO;AAEP,OAAO,MAAMC,eAAA,GAAkB;AAS/B,OAAO,MAAMC,UAAA,GAAyCC,KAAA;EACpD,oBACEC,KAAA,CAAC;IAAOC,SAAA,EAAW,CAACJ,eAAA,EAAiBE,KAAA,CAAME,SAAS,CAAC,CAACC,MAAM,CAACC,OAAA,EAASC,IAAI,CAAC;4BACzEJ,KAAA,CAAC;MAAIC,SAAA,EAAW,GAAGJ,eAAA,WAA0B;8BAC3CG,KAAA,CAAC;QAAIC,SAAA,EAAW,GAAGJ,eAAA,qBAAoC;gCACrDQ,IAAA,CAAC;UAAGJ,SAAA,EAAW,GAAGJ,eAAA,SAAwB;oBAAGE,KAAA,CAAMO;YAClDP,KAAA,CAAMQ,YAAY,CAACC,MAAM,gBACxBH,IAAA,CAAC;UAAIJ,SAAA,EAAW,GAAGJ,eAAA,iBAAgC;oBAAGE,KAAA,CAAMQ;aAC1D;UAELR,KAAA,CAAMU,OAAO,CAACD,MAAM,gBACnBH,IAAA,CAAC;QAAIJ,SAAA,EAAW,GAAGJ,eAAA,WAA0B;kBAAGE,KAAA,CAAMU;WACpD;QAELV,KAAA,CAAMW,sBAAsB,gBAC3BL,IAAA,CAAC;MAAIJ,SAAA,EAAW,GAAGJ,eAAA,wBAAuC;gBACvDE,KAAA,CAAMW;SAEP;;AAGV","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["React","listHeaderClass","ListHeader","props","_jsxs","className","filter","Boolean","join","_jsx","title","TitleActions","length","Actions","AfterListHeaderContent"],"sources":["../../../src/elements/ListHeader/index.tsx"],"sourcesContent":["import React from 'react'\n\nimport './index.scss'\n\nexport const listHeaderClass = 'list-header'\n\ntype ListHeaderProps = {\n readonly Actions?: React.ReactNode[]\n readonly AfterListHeaderContent?: React.ReactNode\n readonly className?: string\n readonly title: string\n readonly TitleActions?: React.ReactNode[]\n}\nexport const ListHeader: React.FC<ListHeaderProps> = (props) => {\n return (\n <header className={[listHeaderClass, props.className].filter(Boolean).join(' ')}>\n <div className={`${listHeaderClass}__content`}>\n <div className={`${listHeaderClass}__title-and-actions`}>\n <h1 className={`${listHeaderClass}__title`}>{props.title}</h1>\n {props.TitleActions?.length ? (\n <div className={`${listHeaderClass}__title-actions`}>{props.TitleActions}</div>\n ) : null}\n </div>\n {props.Actions?.length ? (\n <div className={`${listHeaderClass}__actions`}>{props.Actions}</div>\n ) : null}\n </div>\n {props.AfterListHeaderContent ? (\n <div className={`${listHeaderClass}__after-header-content`}>\n {props.AfterListHeaderContent}\n </div>\n ) : null}\n </header>\n )\n}\n"],"mappings":";AAAA,OAAOA,KAAA,MAAW;AAElB,OAAO;AAEP,OAAO,MAAMC,eAAA,GAAkB;AAS/B,OAAO,MAAMC,UAAA,GAAyCC,KAAA;EACpD,oBACEC,KAAA,CAAC;IAAOC,SAAA,EAAW,CAACJ,eAAA,EAAiBE,KAAA,CAAME,SAAS,CAAC,CAACC,MAAM,CAACC,OAAA,EAASC,IAAI,CAAC;4BACzEJ,KAAA,CAAC;MAAIC,SAAA,EAAW,GAAGJ,eAAA,WAA0B;8BAC3CG,KAAA,CAAC;QAAIC,SAAA,EAAW,GAAGJ,eAAA,qBAAoC;gCACrDQ,IAAA,CAAC;UAAGJ,SAAA,EAAW,GAAGJ,eAAA,SAAwB;oBAAGE,KAAA,CAAMO;YAClDP,KAAA,CAAMQ,YAAY,EAAEC,MAAA,gBACnBH,IAAA,CAAC;UAAIJ,SAAA,EAAW,GAAGJ,eAAA,iBAAgC;oBAAGE,KAAA,CAAMQ;aAC1D;UAELR,KAAA,CAAMU,OAAO,EAAED,MAAA,gBACdH,IAAA,CAAC;QAAIJ,SAAA,EAAW,GAAGJ,eAAA,WAA0B;kBAAGE,KAAA,CAAMU;WACpD;QAELV,KAAA,CAAMW,sBAAsB,gBAC3BL,IAAA,CAAC;MAAIJ,SAAA,EAAW,GAAGJ,eAAA,wBAAuC;gBACvDE,KAAA,CAAMW;SAEP;;AAGV","ignoreList":[]}