@payloadcms/ui 4.0.0-internal.af6aad0 → 4.0.0-internal.b8e7c89

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 (510) hide show
  1. package/dist/elements/AddNewRelation/index.css +4 -0
  2. package/dist/elements/AddNewRelation/index.js +2 -2
  3. package/dist/elements/AddNewRelation/index.js.map +1 -1
  4. package/dist/elements/AppHeader/index.css +0 -4
  5. package/dist/elements/AppHeader/index.d.ts +8 -1
  6. package/dist/elements/AppHeader/index.d.ts.map +1 -1
  7. package/dist/elements/AppHeader/index.js +14 -5
  8. package/dist/elements/AppHeader/index.js.map +1 -1
  9. package/dist/elements/Autosave/index.d.ts.map +1 -1
  10. package/dist/elements/Autosave/index.js +2 -3
  11. package/dist/elements/Autosave/index.js.map +1 -1
  12. package/dist/elements/BulkUpload/FormsManager/index.d.ts.map +1 -1
  13. package/dist/elements/BulkUpload/FormsManager/index.js +2 -3
  14. package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
  15. package/dist/elements/Button/index.css +0 -23
  16. package/dist/elements/Button/types.d.ts +1 -1
  17. package/dist/elements/Button/types.d.ts.map +1 -1
  18. package/dist/elements/Button/types.js.map +1 -1
  19. package/dist/elements/CopyLocaleData/index.d.ts.map +1 -1
  20. package/dist/elements/CopyLocaleData/index.js +8 -9
  21. package/dist/elements/CopyLocaleData/index.js.map +1 -1
  22. package/dist/elements/DefaultListViewTabs/index.css +0 -1
  23. package/dist/elements/DefaultListViewTabs/index.d.ts.map +1 -1
  24. package/dist/elements/DefaultListViewTabs/index.js +62 -84
  25. package/dist/elements/DefaultListViewTabs/index.js.map +1 -1
  26. package/dist/elements/DeleteMany/index.d.ts.map +1 -1
  27. package/dist/elements/DeleteMany/index.js +2 -3
  28. package/dist/elements/DeleteMany/index.js.map +1 -1
  29. package/dist/elements/DocumentDrawer/types.d.ts +1 -1
  30. package/dist/elements/DocumentDrawer/types.d.ts.map +1 -1
  31. package/dist/elements/DocumentDrawer/types.js.map +1 -1
  32. package/dist/elements/Drawer/types.d.ts +2 -2
  33. package/dist/elements/Drawer/types.d.ts.map +1 -1
  34. package/dist/elements/Drawer/types.js.map +1 -1
  35. package/dist/elements/DuplicateDocument/index.d.ts.map +1 -1
  36. package/dist/elements/DuplicateDocument/index.js +2 -3
  37. package/dist/elements/DuplicateDocument/index.js.map +1 -1
  38. package/dist/elements/EditMany/DrawerContent.d.ts.map +1 -1
  39. package/dist/elements/EditMany/DrawerContent.js +2 -3
  40. package/dist/elements/EditMany/DrawerContent.js.map +1 -1
  41. package/dist/elements/Hierarchy/ColumnBrowser/Column/index.css +4 -22
  42. package/dist/elements/Hierarchy/ColumnBrowser/Column/index.d.ts.map +1 -1
  43. package/dist/elements/Hierarchy/ColumnBrowser/Column/index.js +49 -68
  44. package/dist/elements/Hierarchy/ColumnBrowser/Column/index.js.map +1 -1
  45. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.css +15 -100
  46. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.d.ts.map +1 -1
  47. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.js +137 -97
  48. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.js.map +1 -1
  49. package/dist/elements/Hierarchy/ColumnBrowser/index.d.ts +1 -1
  50. package/dist/elements/Hierarchy/ColumnBrowser/index.d.ts.map +1 -1
  51. package/dist/elements/Hierarchy/ColumnBrowser/index.js +23 -51
  52. package/dist/elements/Hierarchy/ColumnBrowser/index.js.map +1 -1
  53. package/dist/elements/Hierarchy/ColumnBrowser/types.d.ts +3 -26
  54. package/dist/elements/Hierarchy/ColumnBrowser/types.d.ts.map +1 -1
  55. package/dist/elements/Hierarchy/ColumnBrowser/types.js.map +1 -1
  56. package/dist/elements/Hierarchy/DocHeaderButton/index.d.ts.map +1 -1
  57. package/dist/elements/Hierarchy/DocHeaderButton/index.js +1 -6
  58. package/dist/elements/Hierarchy/DocHeaderButton/index.js.map +1 -1
  59. package/dist/elements/Hierarchy/DocHeaderButton/index.server.js +3 -1
  60. package/dist/elements/Hierarchy/DocHeaderButton/index.server.js.map +1 -1
  61. package/dist/elements/Hierarchy/Field/SelectedHierarchies.css +36 -0
  62. package/dist/elements/Hierarchy/Field/SelectedHierarchies.d.ts +13 -0
  63. package/dist/elements/Hierarchy/Field/SelectedHierarchies.d.ts.map +1 -0
  64. package/dist/elements/Hierarchy/Field/SelectedHierarchies.js +141 -0
  65. package/dist/elements/Hierarchy/Field/SelectedHierarchies.js.map +1 -0
  66. package/dist/elements/Hierarchy/Field/index.client.d.ts +0 -5
  67. package/dist/elements/Hierarchy/Field/index.client.d.ts.map +1 -1
  68. package/dist/elements/Hierarchy/Field/index.client.js +95 -120
  69. package/dist/elements/Hierarchy/Field/index.client.js.map +1 -1
  70. package/dist/elements/Hierarchy/Field/index.css +34 -3
  71. package/dist/elements/Hierarchy/Modal/fetchAncestorPath.d.ts +4 -18
  72. package/dist/elements/Hierarchy/Modal/fetchAncestorPath.d.ts.map +1 -1
  73. package/dist/elements/Hierarchy/Modal/fetchAncestorPath.js +24 -88
  74. package/dist/elements/Hierarchy/Modal/fetchAncestorPath.js.map +1 -1
  75. package/dist/elements/Hierarchy/Modal/index.css +53 -4
  76. package/dist/elements/Hierarchy/Modal/index.d.ts +2 -5
  77. package/dist/elements/Hierarchy/Modal/index.d.ts.map +1 -1
  78. package/dist/elements/Hierarchy/Modal/index.js +99 -136
  79. package/dist/elements/Hierarchy/Modal/index.js.map +1 -1
  80. package/dist/elements/Hierarchy/Modal/types.d.ts +0 -15
  81. package/dist/elements/Hierarchy/Modal/types.d.ts.map +1 -1
  82. package/dist/elements/Hierarchy/Modal/types.js.map +1 -1
  83. package/dist/elements/Hierarchy/MoveMany/index.d.ts +3 -7
  84. package/dist/elements/Hierarchy/MoveMany/index.d.ts.map +1 -1
  85. package/dist/elements/Hierarchy/MoveMany/index.js +171 -45
  86. package/dist/elements/Hierarchy/MoveMany/index.js.map +1 -1
  87. package/dist/elements/Hierarchy/Search/index.css +9 -2
  88. package/dist/elements/Hierarchy/Search/index.d.ts.map +1 -1
  89. package/dist/elements/Hierarchy/Search/index.js +73 -6
  90. package/dist/elements/Hierarchy/Search/index.js.map +1 -1
  91. package/dist/elements/Hierarchy/Search/types.d.ts +6 -2
  92. package/dist/elements/Hierarchy/Search/types.d.ts.map +1 -1
  93. package/dist/elements/Hierarchy/Search/types.js.map +1 -1
  94. package/dist/elements/Hierarchy/Search/useHierarchySearch.d.ts.map +1 -1
  95. package/dist/elements/Hierarchy/Search/useHierarchySearch.js +2 -3
  96. package/dist/elements/Hierarchy/Search/useHierarchySearch.js.map +1 -1
  97. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.d.ts +4 -0
  98. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.d.ts.map +1 -1
  99. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.js +186 -101
  100. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.js.map +1 -1
  101. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.d.ts.map +1 -1
  102. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.js +21 -1
  103. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.js.map +1 -1
  104. package/dist/elements/Hierarchy/Tree/LoadMore/index.css +3 -3
  105. package/dist/elements/Hierarchy/Tree/TreeNode/index.css +29 -59
  106. package/dist/elements/Hierarchy/Tree/TreeNode/index.d.ts +1 -1
  107. package/dist/elements/Hierarchy/Tree/TreeNode/index.d.ts.map +1 -1
  108. package/dist/elements/Hierarchy/Tree/TreeNode/index.js +10 -54
  109. package/dist/elements/Hierarchy/Tree/TreeNode/index.js.map +1 -1
  110. package/dist/elements/Hierarchy/Tree/index.css +9 -8
  111. package/dist/elements/Hierarchy/Tree/index.d.ts.map +1 -1
  112. package/dist/elements/Hierarchy/Tree/index.js +47 -29
  113. package/dist/elements/Hierarchy/Tree/index.js.map +1 -1
  114. package/dist/elements/Hierarchy/Tree/types.d.ts +1 -9
  115. package/dist/elements/Hierarchy/Tree/types.d.ts.map +1 -1
  116. package/dist/elements/Hierarchy/Tree/types.js.map +1 -1
  117. package/dist/elements/Hierarchy/Tree/useChildren.d.ts.map +1 -1
  118. package/dist/elements/Hierarchy/Tree/useChildren.js +1 -11
  119. package/dist/elements/Hierarchy/Tree/useChildren.js.map +1 -1
  120. package/dist/elements/ListControls/index.d.ts.map +1 -1
  121. package/dist/elements/ListControls/index.js +2 -3
  122. package/dist/elements/ListControls/index.js.map +1 -1
  123. package/dist/elements/ListControls/types.d.ts +0 -4
  124. package/dist/elements/ListControls/types.d.ts.map +1 -1
  125. package/dist/elements/ListControls/types.js.map +1 -1
  126. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.d.ts.map +1 -1
  127. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js +2 -3
  128. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js.map +1 -1
  129. package/dist/elements/LivePreview/Window/index.js +1 -1
  130. package/dist/elements/LivePreview/Window/index.js.map +1 -1
  131. package/dist/elements/Localizer/index.js +1 -1
  132. package/dist/elements/Localizer/index.js.map +1 -1
  133. package/dist/elements/Nav/NavSidebarToggle/index.js +1 -1
  134. package/dist/elements/Nav/NavSidebarToggle/index.js.map +1 -1
  135. package/dist/elements/Nav/NavWrapper/index.d.ts +0 -1
  136. package/dist/elements/Nav/NavWrapper/index.d.ts.map +1 -1
  137. package/dist/elements/Nav/NavWrapper/index.js +18 -12
  138. package/dist/elements/Nav/NavWrapper/index.js.map +1 -1
  139. package/dist/elements/Nav/SidebarTabs/index.css +2 -1
  140. package/dist/elements/Nav/context.d.ts +1 -0
  141. package/dist/elements/Nav/context.d.ts.map +1 -1
  142. package/dist/elements/Nav/context.js +67 -92
  143. package/dist/elements/Nav/context.js.map +1 -1
  144. package/dist/elements/Nav/index.css +42 -47
  145. package/dist/elements/Nav/index.d.ts +0 -4
  146. package/dist/elements/Nav/index.d.ts.map +1 -1
  147. package/dist/elements/Nav/index.js +1 -16
  148. package/dist/elements/Nav/index.js.map +1 -1
  149. package/dist/elements/NavGroup/index.css +15 -29
  150. package/dist/elements/Popup/PopupButtonList/index.css +16 -32
  151. package/dist/elements/Popup/index.css +0 -6
  152. package/dist/elements/Popup/index.d.ts +0 -10
  153. package/dist/elements/Popup/index.d.ts.map +1 -1
  154. package/dist/elements/Popup/index.js +5 -12
  155. package/dist/elements/Popup/index.js.map +1 -1
  156. package/dist/elements/PublishButton/ScheduleDrawer/index.d.ts.map +1 -1
  157. package/dist/elements/PublishButton/ScheduleDrawer/index.js +8 -30
  158. package/dist/elements/PublishButton/ScheduleDrawer/index.js.map +1 -1
  159. package/dist/elements/PublishButton/ScheduleDrawer/types.d.ts +1 -1
  160. package/dist/elements/PublishButton/ScheduleDrawer/types.d.ts.map +1 -1
  161. package/dist/elements/PublishButton/ScheduleDrawer/types.js.map +1 -1
  162. package/dist/elements/PublishButton/index.d.ts.map +1 -1
  163. package/dist/elements/PublishButton/index.js +5 -6
  164. package/dist/elements/PublishButton/index.js.map +1 -1
  165. package/dist/elements/PublishMany/DrawerContent.d.ts.map +1 -1
  166. package/dist/elements/PublishMany/DrawerContent.js +2 -3
  167. package/dist/elements/PublishMany/DrawerContent.js.map +1 -1
  168. package/dist/elements/ReactSelect/types.d.ts +0 -5
  169. package/dist/elements/ReactSelect/types.d.ts.map +1 -1
  170. package/dist/elements/ReactSelect/types.js.map +1 -1
  171. package/dist/elements/RestoreMany/index.d.ts.map +1 -1
  172. package/dist/elements/RestoreMany/index.js +2 -3
  173. package/dist/elements/RestoreMany/index.js.map +1 -1
  174. package/dist/elements/SaveDraftButton/index.d.ts.map +1 -1
  175. package/dist/elements/SaveDraftButton/index.js +2 -3
  176. package/dist/elements/SaveDraftButton/index.js.map +1 -1
  177. package/dist/elements/SelectAll/index.d.ts.map +1 -1
  178. package/dist/elements/SelectAll/index.js +2 -1
  179. package/dist/elements/SelectAll/index.js.map +1 -1
  180. package/dist/elements/SelectRow/index.d.ts.map +1 -1
  181. package/dist/elements/SelectRow/index.js +2 -1
  182. package/dist/elements/SelectRow/index.js.map +1 -1
  183. package/dist/elements/SidebarRow/index.css +5 -1
  184. package/dist/elements/SidebarToggle/index.css +1 -3
  185. package/dist/elements/Status/index.d.ts.map +1 -1
  186. package/dist/elements/Status/index.js +2 -3
  187. package/dist/elements/Status/index.js.map +1 -1
  188. package/dist/elements/StepNav/index.d.ts.map +1 -1
  189. package/dist/elements/StepNav/index.js +10 -14
  190. package/dist/elements/StepNav/index.js.map +1 -1
  191. package/dist/elements/StepNav/types.d.ts +0 -6
  192. package/dist/elements/StepNav/types.d.ts.map +1 -1
  193. package/dist/elements/StepNav/types.js.map +1 -1
  194. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.css +7 -5
  195. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.d.ts.map +1 -1
  196. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.js +3 -14
  197. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.js.map +1 -1
  198. package/dist/elements/Table/OrderableTable.d.ts.map +1 -1
  199. package/dist/elements/Table/OrderableTable.js +2 -3
  200. package/dist/elements/Table/OrderableTable.js.map +1 -1
  201. package/dist/elements/Table/RelationshipProvider/index.d.ts.map +1 -1
  202. package/dist/elements/Table/RelationshipProvider/index.js +2 -3
  203. package/dist/elements/Table/RelationshipProvider/index.js.map +1 -1
  204. package/dist/elements/UnpublishButton/index.d.ts.map +1 -1
  205. package/dist/elements/UnpublishButton/index.js +3 -4
  206. package/dist/elements/UnpublishButton/index.js.map +1 -1
  207. package/dist/elements/UnpublishMany/DrawerContent.d.ts.map +1 -1
  208. package/dist/elements/UnpublishMany/DrawerContent.js +2 -3
  209. package/dist/elements/UnpublishMany/DrawerContent.js.map +1 -1
  210. package/dist/elements/UserMenu/LanguageMenu/index.d.ts.map +1 -1
  211. package/dist/elements/UserMenu/LanguageMenu/index.js +39 -83
  212. package/dist/elements/UserMenu/LanguageMenu/index.js.map +1 -1
  213. package/dist/elements/UserMenu/SettingsMenu/index.d.ts.map +1 -1
  214. package/dist/elements/UserMenu/SettingsMenu/index.js +21 -57
  215. package/dist/elements/UserMenu/SettingsMenu/index.js.map +1 -1
  216. package/dist/elements/UserMenu/ThemeMenu/index.d.ts.map +1 -1
  217. package/dist/elements/UserMenu/ThemeMenu/index.js +39 -83
  218. package/dist/elements/UserMenu/ThemeMenu/index.js.map +1 -1
  219. package/dist/elements/UserMenu/index.css +2 -32
  220. package/dist/elements/UserMenu/index.d.ts +0 -1
  221. package/dist/elements/UserMenu/index.d.ts.map +1 -1
  222. package/dist/elements/UserMenu/index.js +51 -77
  223. package/dist/elements/UserMenu/index.js.map +1 -1
  224. package/dist/elements/WhereBuilder/Condition/Relationship/index.js +1 -1
  225. package/dist/elements/WhereBuilder/Condition/Relationship/index.js.map +1 -1
  226. package/dist/exports/client/index.d.ts +0 -4
  227. package/dist/exports/client/index.d.ts.map +1 -1
  228. package/dist/exports/client/index.js +1 -1
  229. package/dist/exports/client/index.js.map +3 -3
  230. package/dist/fields/Array/index.d.ts.map +1 -1
  231. package/dist/fields/Array/index.js +2 -3
  232. package/dist/fields/Array/index.js.map +1 -1
  233. package/dist/fields/Blocks/index.d.ts.map +1 -1
  234. package/dist/fields/Blocks/index.js +2 -3
  235. package/dist/fields/Blocks/index.js.map +1 -1
  236. package/dist/fields/Checkbox/Input.d.ts +2 -2
  237. package/dist/fields/Checkbox/Input.d.ts.map +1 -1
  238. package/dist/fields/Checkbox/Input.js +152 -134
  239. package/dist/fields/Checkbox/Input.js.map +1 -1
  240. package/dist/fields/Checkbox/index.css +155 -168
  241. package/dist/fields/FieldLabel/index.d.ts.map +1 -1
  242. package/dist/fields/FieldLabel/index.js +4 -5
  243. package/dist/fields/FieldLabel/index.js.map +1 -1
  244. package/dist/fields/Relationship/Input.d.ts.map +1 -1
  245. package/dist/fields/Relationship/Input.js +8 -27
  246. package/dist/fields/Relationship/Input.js.map +1 -1
  247. package/dist/fields/Relationship/optionsReducer.d.ts.map +1 -1
  248. package/dist/fields/Relationship/optionsReducer.js +0 -2
  249. package/dist/fields/Relationship/optionsReducer.js.map +1 -1
  250. package/dist/fields/Relationship/types.d.ts +0 -24
  251. package/dist/fields/Relationship/types.d.ts.map +1 -1
  252. package/dist/fields/Relationship/types.js.map +1 -1
  253. package/dist/fields/Slug/index.d.ts.map +1 -1
  254. package/dist/fields/Slug/index.js +2 -3
  255. package/dist/fields/Slug/index.js.map +1 -1
  256. package/dist/fields/Upload/Input.d.ts.map +1 -1
  257. package/dist/fields/Upload/Input.js +2 -3
  258. package/dist/fields/Upload/Input.js.map +1 -1
  259. package/dist/fields/Upload/Input.spec.js +2 -1
  260. package/dist/fields/Upload/Input.spec.js.map +1 -1
  261. package/dist/fields/shared/index.d.ts +1 -1
  262. package/dist/fields/shared/index.d.ts.map +1 -1
  263. package/dist/fields/shared/index.js.map +1 -1
  264. package/dist/forms/Form/index.d.ts.map +1 -1
  265. package/dist/forms/Form/index.js +2 -3
  266. package/dist/forms/Form/index.js.map +1 -1
  267. package/dist/forms/NullifyField/index.d.ts.map +1 -1
  268. package/dist/forms/NullifyField/index.js +2 -3
  269. package/dist/forms/NullifyField/index.js.map +1 -1
  270. package/dist/hooks/usePayloadAPI.d.ts.map +1 -1
  271. package/dist/hooks/usePayloadAPI.js +2 -3
  272. package/dist/hooks/usePayloadAPI.js.map +1 -1
  273. package/dist/providers/DocumentInfo/index.d.ts.map +1 -1
  274. package/dist/providers/DocumentInfo/index.js +2 -3
  275. package/dist/providers/DocumentInfo/index.js.map +1 -1
  276. package/dist/providers/Hierarchy/index.d.ts.map +1 -1
  277. package/dist/providers/Hierarchy/index.js +24 -53
  278. package/dist/providers/Hierarchy/index.js.map +1 -1
  279. package/dist/providers/Hierarchy/types.d.ts +0 -2
  280. package/dist/providers/Hierarchy/types.d.ts.map +1 -1
  281. package/dist/providers/Hierarchy/types.js.map +1 -1
  282. package/dist/providers/LivePreview/index.d.ts.map +1 -1
  283. package/dist/providers/LivePreview/index.js +13 -6
  284. package/dist/providers/LivePreview/index.js.map +1 -1
  285. package/dist/providers/Locale/index.d.ts +1 -5
  286. package/dist/providers/Locale/index.d.ts.map +1 -1
  287. package/dist/providers/Locale/index.js +61 -139
  288. package/dist/providers/Locale/index.js.map +1 -1
  289. package/dist/providers/Selection/index.d.ts.map +1 -1
  290. package/dist/providers/Selection/index.js +2 -3
  291. package/dist/providers/Selection/index.js.map +1 -1
  292. package/dist/providers/ServerFunctions/index.d.ts +5 -1
  293. package/dist/providers/ServerFunctions/index.d.ts.map +1 -1
  294. package/dist/providers/ServerFunctions/index.js +15 -0
  295. package/dist/providers/ServerFunctions/index.js.map +1 -1
  296. package/dist/providers/TableColumns/buildColumnState/index.d.ts.map +1 -1
  297. package/dist/providers/TableColumns/buildColumnState/index.js +0 -1
  298. package/dist/providers/TableColumns/buildColumnState/index.js.map +1 -1
  299. package/dist/styles.css +1 -1
  300. package/dist/templates/Default/Wrapper/index.css +1 -2
  301. package/dist/templates/Default/Wrapper/index.d.ts +0 -2
  302. package/dist/templates/Default/Wrapper/index.d.ts.map +1 -1
  303. package/dist/templates/Default/Wrapper/index.js +6 -12
  304. package/dist/templates/Default/Wrapper/index.js.map +1 -1
  305. package/dist/templates/Default/index.css +1 -3
  306. package/dist/templates/Default/index.d.ts.map +1 -1
  307. package/dist/templates/Default/index.js +15 -17
  308. package/dist/templates/Default/index.js.map +1 -1
  309. package/dist/utilities/formatAbsoluteURL.d.ts +1 -1
  310. package/dist/utilities/formatAbsoluteURL.d.ts.map +1 -1
  311. package/dist/utilities/formatAbsoluteURL.js +18 -8
  312. package/dist/utilities/formatAbsoluteURL.js.map +1 -1
  313. package/dist/utilities/formatAbsoluteURL.spec.js +27 -0
  314. package/dist/utilities/formatAbsoluteURL.spec.js.map +1 -0
  315. package/dist/utilities/getHasScheduledPublish.d.ts +2 -3
  316. package/dist/utilities/getHasScheduledPublish.d.ts.map +1 -1
  317. package/dist/utilities/getHasScheduledPublish.js +2 -5
  318. package/dist/utilities/getHasScheduledPublish.js.map +1 -1
  319. package/dist/utilities/isAbsoluteURL.d.ts +3 -0
  320. package/dist/utilities/isAbsoluteURL.d.ts.map +1 -0
  321. package/dist/utilities/isAbsoluteURL.js +15 -0
  322. package/dist/utilities/isAbsoluteURL.js.map +1 -0
  323. package/dist/utilities/isAbsoluteURL.spec.js +11 -0
  324. package/dist/utilities/isAbsoluteURL.spec.js.map +1 -0
  325. package/dist/utilities/isHttpURL.d.ts +3 -0
  326. package/dist/utilities/isHttpURL.d.ts.map +1 -0
  327. package/dist/utilities/isHttpURL.js +12 -0
  328. package/dist/utilities/isHttpURL.js.map +1 -0
  329. package/dist/utilities/isHttpURL.spec.js +25 -0
  330. package/dist/utilities/isHttpURL.spec.js.map +1 -0
  331. package/dist/utilities/schedulePublishHandler.d.ts +8 -1
  332. package/dist/utilities/schedulePublishHandler.d.ts.map +1 -1
  333. package/dist/utilities/schedulePublishHandler.js +68 -4
  334. package/dist/utilities/schedulePublishHandler.js.map +1 -1
  335. package/dist/utilities/serverFunctionRegistry.d.ts.map +1 -1
  336. package/dist/utilities/serverFunctionRegistry.js +2 -1
  337. package/dist/utilities/serverFunctionRegistry.js.map +1 -1
  338. package/dist/utilities/slugify.d.ts.map +1 -1
  339. package/dist/utilities/slugify.js +2 -0
  340. package/dist/utilities/slugify.js.map +1 -1
  341. package/dist/views/API/index.client.d.ts.map +1 -1
  342. package/dist/views/API/index.client.js +2 -3
  343. package/dist/views/API/index.client.js.map +1 -1
  344. package/dist/views/Document/index.d.ts.map +1 -1
  345. package/dist/views/Document/index.js +1 -2
  346. package/dist/views/Document/index.js.map +1 -1
  347. package/dist/views/HierarchyList/DocumentListSelection/index.d.ts.map +1 -1
  348. package/dist/views/HierarchyList/DocumentListSelection/index.js +105 -100
  349. package/dist/views/HierarchyList/DocumentListSelection/index.js.map +1 -1
  350. package/dist/views/HierarchyList/HierarchyListHeader/index.d.ts +1 -6
  351. package/dist/views/HierarchyList/HierarchyListHeader/index.d.ts.map +1 -1
  352. package/dist/views/HierarchyList/HierarchyListHeader/index.js +8 -10
  353. package/dist/views/HierarchyList/HierarchyListHeader/index.js.map +1 -1
  354. package/dist/views/HierarchyList/HierarchyTable/ChildNameCell.d.ts.map +1 -1
  355. package/dist/views/HierarchyList/HierarchyTable/ChildNameCell.js +10 -11
  356. package/dist/views/HierarchyList/HierarchyTable/ChildNameCell.js.map +1 -1
  357. package/dist/views/HierarchyList/HierarchyTable/SlotTable.d.ts.map +1 -1
  358. package/dist/views/HierarchyList/HierarchyTable/SlotTable.js +6 -3
  359. package/dist/views/HierarchyList/HierarchyTable/SlotTable.js.map +1 -1
  360. package/dist/views/HierarchyList/HierarchyTable/index.css +0 -51
  361. package/dist/views/HierarchyList/HierarchyTable/index.d.ts +1 -13
  362. package/dist/views/HierarchyList/HierarchyTable/index.d.ts.map +1 -1
  363. package/dist/views/HierarchyList/HierarchyTable/index.js +38 -156
  364. package/dist/views/HierarchyList/HierarchyTable/index.js.map +1 -1
  365. package/dist/views/HierarchyList/HierarchyTable/types.d.ts +0 -6
  366. package/dist/views/HierarchyList/HierarchyTable/types.d.ts.map +1 -1
  367. package/dist/views/HierarchyList/HierarchyTable/types.js.map +1 -1
  368. package/dist/views/HierarchyList/index.d.ts.map +1 -1
  369. package/dist/views/HierarchyList/index.js +20 -103
  370. package/dist/views/HierarchyList/index.js.map +1 -1
  371. package/dist/views/List/ListSelection/index.d.ts.map +1 -1
  372. package/dist/views/List/ListSelection/index.js +122 -138
  373. package/dist/views/List/ListSelection/index.js.map +1 -1
  374. package/dist/views/List/handleHierarchy.d.ts +1 -6
  375. package/dist/views/List/handleHierarchy.d.ts.map +1 -1
  376. package/dist/views/List/handleHierarchy.js +3 -34
  377. package/dist/views/List/handleHierarchy.js.map +1 -1
  378. package/dist/views/List/index.client.d.ts.map +1 -1
  379. package/dist/views/List/index.client.js +5 -129
  380. package/dist/views/List/index.client.js.map +1 -1
  381. package/dist/views/List/index.d.ts.map +1 -1
  382. package/dist/views/List/index.js +16 -27
  383. package/dist/views/List/index.js.map +1 -1
  384. package/dist/views/Root/getRouteData.d.ts.map +1 -1
  385. package/dist/views/Root/getRouteData.js +2 -8
  386. package/dist/views/Root/getRouteData.js.map +1 -1
  387. package/dist/views/Version/Default/SetStepNav.d.ts.map +1 -1
  388. package/dist/views/Version/Default/SetStepNav.js +10 -13
  389. package/dist/views/Version/Default/SetStepNav.js.map +1 -1
  390. package/dist/views/Version/Default/index.d.ts.map +1 -1
  391. package/dist/views/Version/Default/index.js +12 -13
  392. package/dist/views/Version/Default/index.js.map +1 -1
  393. package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.d.ts +1 -0
  394. package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.d.ts.map +1 -1
  395. package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.js +56 -50
  396. package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.js.map +1 -1
  397. package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.d.ts.map +1 -1
  398. package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.js +41 -27
  399. package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.js.map +1 -1
  400. package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.spec.js +258 -0
  401. package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.spec.js.map +1 -0
  402. package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.d.ts.map +1 -1
  403. package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js +10 -0
  404. package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js.map +1 -1
  405. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.d.ts.map +1 -1
  406. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.js +33 -1
  407. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.js.map +1 -1
  408. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.spec.js +56 -2
  409. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.spec.js.map +1 -1
  410. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.d.ts +8 -2
  411. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.d.ts.map +1 -1
  412. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.js +17 -19
  413. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.js.map +1 -1
  414. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.spec.js +3 -13
  415. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.spec.js.map +1 -1
  416. package/dist/views/Versions/VersionPillLabel/VersionPillLabel.d.ts.map +1 -1
  417. package/dist/views/Versions/VersionPillLabel/VersionPillLabel.js +2 -3
  418. package/dist/views/Versions/VersionPillLabel/VersionPillLabel.js.map +1 -1
  419. package/package.json +6 -5
  420. package/dist/elements/Hierarchy/CreateNewButton/index.css +0 -9
  421. package/dist/elements/Hierarchy/CreateNewButton/index.d.ts +0 -9
  422. package/dist/elements/Hierarchy/CreateNewButton/index.d.ts.map +0 -1
  423. package/dist/elements/Hierarchy/CreateNewButton/index.js +0 -111
  424. package/dist/elements/Hierarchy/CreateNewButton/index.js.map +0 -1
  425. package/dist/elements/Hierarchy/Modal/Footer/index.css +0 -45
  426. package/dist/elements/Hierarchy/Modal/Footer/index.d.ts +0 -28
  427. package/dist/elements/Hierarchy/Modal/Footer/index.d.ts.map +0 -1
  428. package/dist/elements/Hierarchy/Modal/Footer/index.js +0 -166
  429. package/dist/elements/Hierarchy/Modal/Footer/index.js.map +0 -1
  430. package/dist/elements/Hierarchy/getFolderHierarchySlug.d.ts +0 -22
  431. package/dist/elements/Hierarchy/getFolderHierarchySlug.d.ts.map +0 -1
  432. package/dist/elements/Hierarchy/getFolderHierarchySlug.js +0 -17
  433. package/dist/elements/Hierarchy/getFolderHierarchySlug.js.map +0 -1
  434. package/dist/elements/Hierarchy/move/moveDocuments.d.ts +0 -34
  435. package/dist/elements/Hierarchy/move/moveDocuments.d.ts.map +0 -1
  436. package/dist/elements/Hierarchy/move/moveDocuments.js +0 -94
  437. package/dist/elements/Hierarchy/move/moveDocuments.js.map +0 -1
  438. package/dist/elements/SegmentedControl/index.css +0 -58
  439. package/dist/elements/SegmentedControl/index.d.ts +0 -19
  440. package/dist/elements/SegmentedControl/index.d.ts.map +0 -1
  441. package/dist/elements/SegmentedControl/index.js +0 -104
  442. package/dist/elements/SegmentedControl/index.js.map +0 -1
  443. package/dist/elements/StepNav/DropTarget/index.css +0 -20
  444. package/dist/elements/StepNav/DropTarget/index.d.ts +0 -16
  445. package/dist/elements/StepNav/DropTarget/index.d.ts.map +0 -1
  446. package/dist/elements/StepNav/DropTarget/index.js +0 -71
  447. package/dist/elements/StepNav/DropTarget/index.js.map +0 -1
  448. package/dist/elements/UserMenu/HoverSubmenuGroup.d.ts +0 -18
  449. package/dist/elements/UserMenu/HoverSubmenuGroup.d.ts.map +0 -1
  450. package/dist/elements/UserMenu/HoverSubmenuGroup.js +0 -38
  451. package/dist/elements/UserMenu/HoverSubmenuGroup.js.map +0 -1
  452. package/dist/elements/UserMenu/useHoverSubmenu.d.ts +0 -21
  453. package/dist/elements/UserMenu/useHoverSubmenu.d.ts.map +0 -1
  454. package/dist/elements/UserMenu/useHoverSubmenu.js +0 -260
  455. package/dist/elements/UserMenu/useHoverSubmenu.js.map +0 -1
  456. package/dist/elements/ViewModeToggle/index.d.ts +0 -8
  457. package/dist/elements/ViewModeToggle/index.d.ts.map +0 -1
  458. package/dist/elements/ViewModeToggle/index.js +0 -29
  459. package/dist/elements/ViewModeToggle/index.js.map +0 -1
  460. package/dist/icons/CollapseLayers/index.css +0 -5
  461. package/dist/icons/CollapseLayers/index.d.ts +0 -7
  462. package/dist/icons/CollapseLayers/index.d.ts.map +0 -1
  463. package/dist/icons/CollapseLayers/index.js +0 -23
  464. package/dist/icons/CollapseLayers/index.js.map +0 -1
  465. package/dist/icons/Table/index.css +0 -5
  466. package/dist/icons/Table/index.d.ts +0 -7
  467. package/dist/icons/Table/index.d.ts.map +0 -1
  468. package/dist/icons/Table/index.js +0 -25
  469. package/dist/icons/Table/index.js.map +0 -1
  470. package/dist/providers/HierarchyDnd/index.css +0 -51
  471. package/dist/providers/HierarchyDnd/index.d.ts +0 -21
  472. package/dist/providers/HierarchyDnd/index.d.ts.map +0 -1
  473. package/dist/providers/HierarchyDnd/index.js +0 -163
  474. package/dist/providers/HierarchyDnd/index.js.map +0 -1
  475. package/dist/providers/HierarchyDnd/types.d.ts +0 -56
  476. package/dist/providers/HierarchyDnd/types.d.ts.map +0 -1
  477. package/dist/providers/HierarchyDnd/types.js +0 -21
  478. package/dist/providers/HierarchyDnd/types.js.map +0 -1
  479. package/dist/views/HierarchyList/HierarchyCards/DocumentCard/index.css +0 -216
  480. package/dist/views/HierarchyList/HierarchyCards/DocumentCard/index.d.ts +0 -20
  481. package/dist/views/HierarchyList/HierarchyCards/DocumentCard/index.d.ts.map +0 -1
  482. package/dist/views/HierarchyList/HierarchyCards/DocumentCard/index.js +0 -182
  483. package/dist/views/HierarchyList/HierarchyCards/DocumentCard/index.js.map +0 -1
  484. package/dist/views/HierarchyList/HierarchyCards/DragPreviewItem/index.css +0 -38
  485. package/dist/views/HierarchyList/HierarchyCards/DragPreviewItem/index.d.ts +0 -15
  486. package/dist/views/HierarchyList/HierarchyCards/DragPreviewItem/index.d.ts.map +0 -1
  487. package/dist/views/HierarchyList/HierarchyCards/DragPreviewItem/index.js +0 -85
  488. package/dist/views/HierarchyList/HierarchyCards/DragPreviewItem/index.js.map +0 -1
  489. package/dist/views/HierarchyList/HierarchyCards/FolderCard/index.css +0 -98
  490. package/dist/views/HierarchyList/HierarchyCards/FolderCard/index.d.ts +0 -27
  491. package/dist/views/HierarchyList/HierarchyCards/FolderCard/index.d.ts.map +0 -1
  492. package/dist/views/HierarchyList/HierarchyCards/FolderCard/index.js +0 -84
  493. package/dist/views/HierarchyList/HierarchyCards/FolderCard/index.js.map +0 -1
  494. package/dist/views/HierarchyList/HierarchyCards/HierarchyCard/index.d.ts +0 -19
  495. package/dist/views/HierarchyList/HierarchyCards/HierarchyCard/index.d.ts.map +0 -1
  496. package/dist/views/HierarchyList/HierarchyCards/HierarchyCard/index.js +0 -100
  497. package/dist/views/HierarchyList/HierarchyCards/HierarchyCard/index.js.map +0 -1
  498. package/dist/views/HierarchyList/HierarchyCards/PlaneItem/index.d.ts +0 -53
  499. package/dist/views/HierarchyList/HierarchyCards/PlaneItem/index.d.ts.map +0 -1
  500. package/dist/views/HierarchyList/HierarchyCards/PlaneItem/index.js +0 -145
  501. package/dist/views/HierarchyList/HierarchyCards/PlaneItem/index.js.map +0 -1
  502. package/dist/views/HierarchyList/HierarchyCards/getThumbnailSrc.d.ts +0 -8
  503. package/dist/views/HierarchyList/HierarchyCards/getThumbnailSrc.d.ts.map +0 -1
  504. package/dist/views/HierarchyList/HierarchyCards/getThumbnailSrc.js +0 -21
  505. package/dist/views/HierarchyList/HierarchyCards/getThumbnailSrc.js.map +0 -1
  506. package/dist/views/HierarchyList/HierarchyCards/index.css +0 -115
  507. package/dist/views/HierarchyList/HierarchyCards/index.d.ts +0 -80
  508. package/dist/views/HierarchyList/HierarchyCards/index.d.ts.map +0 -1
  509. package/dist/views/HierarchyList/HierarchyCards/index.js +0 -457
  510. package/dist/views/HierarchyList/HierarchyCards/index.js.map +0 -1
@@ -2,66 +2,49 @@
2
2
 
3
3
  @layer payload-default {
4
4
  .tree-node {
5
+ border-radius: var(--button-radius);
6
+
7
+ .tree-node {
8
+ margin-left: 0;
9
+ margin-right: 0;
10
+ }
11
+
5
12
  &:focus-visible {
6
13
  outline: none;
7
14
  }
8
15
  }
9
16
 
10
- .tree-node:focus-visible > .tree-node__content-wrapper > .tree-node__content::before {
17
+ .tree-node:focus-visible > .tree-node__content-wrapper > .tree-node__content {
11
18
  outline: var(--accessibility-outline);
12
19
  outline-offset: var(--accessibility-outline-offset);
13
20
  }
14
21
 
22
+ .tree-node__content-wrapper {
23
+ margin-left: calc(
24
+ (var(--tree-depth, 0) * var(--tree-indent)) + (var(--spacer-1) * var(--tree-depth))
25
+ );
26
+ margin-bottom: var(--tree-row-gap);
27
+ }
28
+
15
29
  .tree-node__content {
16
- position: relative;
17
- isolation: isolate;
18
30
  display: flex;
19
31
  align-items: center;
20
- height: var(--spacer-5);
21
- font-family: var(--text-body-medium-font-family);
22
32
  font-size: var(--tree-font-size);
23
- font-weight: var(--text-body-medium-font-weight);
24
33
  line-height: var(--tree-node-content-height);
25
- cursor: pointer;
26
- user-select: none;
27
-
28
- &::before {
29
- content: '';
30
- position: absolute;
31
- inset-block: var(--spacer-1);
32
- inset-inline: var(--spacer-2);
33
- border-radius: var(--button-radius);
34
- z-index: -1;
35
- }
36
-
37
- &:hover:not(.tree-node__content--selected)::before {
38
- background: var(--color-bg-secondary);
39
- }
40
- }
41
-
42
- .tree-node__content--selected {
43
- font-weight: var(--text-body-medium-strong-font-weight);
44
-
45
- &::before {
46
- background: var(--color-bg-selected);
47
- }
48
34
  }
49
35
 
50
36
  .tree-node__toggle {
51
- position: absolute;
52
- inset-block: 0;
53
- inset-inline-start: calc((var(--tree-depth, 0) * var(--tree-indent)) + var(--spacer-3));
54
- z-index: 1;
55
- width: var(--tree-chevron-width);
56
37
  background: none;
57
38
  border: none;
58
- padding: 0;
39
+ padding-block: var(--spacer-1);
40
+ padding-inline-start: var(--spacer-1);
59
41
  margin: 0;
60
42
  display: flex;
61
43
  align-items: center;
62
44
  justify-content: center;
63
45
  cursor: default;
64
46
  color: var(--color-icon-tertiary);
47
+ flex-shrink: 0;
65
48
  border-radius: var(--button-radius);
66
49
 
67
50
  &:hover {
@@ -70,48 +53,35 @@
70
53
  }
71
54
 
72
55
  .tree-node__node-trigger {
73
- position: absolute;
74
- inset: 0;
75
56
  border: none;
76
57
  background: none;
77
58
  margin: 0;
59
+ padding: 0;
78
60
  color: inherit;
79
61
  font: inherit;
80
- text-align: left;
81
- cursor: pointer;
82
62
  min-width: 0;
63
+ flex: 1;
83
64
  display: flex;
84
65
  align-items: center;
85
- padding-block: 0;
86
- padding-inline: calc(
87
- (var(--tree-depth, 0) * var(--tree-indent)) + var(--spacer-3) + var(--tree-chevron-width) +
88
- var(--tree-chevron-spacing)
89
- )
90
- var(--spacer-3);
66
+ gap: var(--spacer-1);
67
+ text-align: left;
68
+ cursor: pointer;
69
+ padding-block: var(--spacer-1);
70
+ padding-inline-end: var(--spacer-1);
91
71
  }
92
72
 
93
73
  .tree-node__title {
94
74
  padding-left: 0;
75
+ margin-left: var(--spacer-1);
95
76
  }
96
77
 
97
78
  .tree-node__loading {
98
- position: relative;
99
- z-index: 1;
100
- margin-inline: auto var(--spacer-3);
79
+ margin-left: auto;
101
80
  display: inline-flex;
102
81
  align-items: center;
103
82
  }
104
83
 
105
- /*
106
- * Drop invitation. An inset ring rather than an outset one, because tree rows are full-bleed and
107
- * an outset ring would be clipped by the sidebar's own overflow.
108
- */
109
- .tree-node__content--drop-over {
110
- background: color-mix(in srgb, var(--color-border-selected) 8%, transparent);
111
- box-shadow: inset 0 0 0 var(--stroke-width-medium) var(--color-border-selected);
112
- }
113
-
114
- .tree-node__content--drop-invalid {
115
- cursor: not-allowed;
84
+ .tree-node__children {
85
+ /* Children are rendered with depth variable set */
116
86
  }
117
87
  }
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
2
  import type { TreeNodeProps } from '../types.js';
3
3
  import './index.css';
4
- export declare const TreeNode: ({ allPossibleTypeValues, ancestorIds, baseFilter, cache, collectionSlug, depth, dropParentFieldName, expandedNodes, filterByCollections, limit, node, onSelect, onToggle, parentFieldName, selected, selectedNodeId, typeFieldName, useAsTitle, }: TreeNodeProps) => React.JSX.Element;
4
+ export declare const TreeNode: ({ allPossibleTypeValues, baseFilter, cache, collectionSlug, depth, expandedNodes, filterByCollections, icon, limit, node, onSelect, onToggle, parentFieldName, selected, selectedNodeId, typeFieldName, useAsTitle, }: TreeNodeProps) => React.JSX.Element;
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/elements/Hierarchy/Tree/TreeNode/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAkD,MAAM,OAAO,CAAA;AAGtE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAShD,OAAO,aAAa,CAAA;AA2BpB,eAAO,MAAM,QAAQ,sPAmBlB,aAAa,sBA8Pf,CAAA"}
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,aAAa,CAAA;AAqBpB,eAAO,MAAM,QAAQ,0NAkBlB,aAAa,sBAgNf,CAAA"}
@@ -1,22 +1,15 @@
1
1
  'use client';
2
2
 
3
3
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
4
- import { useDroppable } from '@dnd-kit/core';
5
- import React, { useCallback, useEffect, useMemo, useRef } from 'react';
4
+ import React, { useCallback, useRef } from 'react';
6
5
  import { Spinner } from '../../../../elements/Spinner/index.js';
7
6
  import { ChevronIcon } from '../../../../icons/Chevron/index.js';
8
- import { useHierarchyDnd } from '../../../../providers/HierarchyDnd/index.js';
9
7
  import { useTranslation } from '../../../../providers/Translation/index.js';
10
8
  import { LoadMore } from '../LoadMore/index.js';
11
9
  import { useFocusableItem, useTreeFocus } from '../TreeFocusContext.js';
12
10
  import { useChildren } from '../useChildren.js';
13
11
  import './index.css';
14
12
  const DEFAULT_TREE_LIMIT = 10;
15
- /**
16
- * How long a drag has to hover a collapsed node before it springs open, so a drag can drill into the
17
- * tree without being dropped and restarted.
18
- */
19
- const SPRING_LOAD_DELAY = 600;
20
13
  const baseClass = 'tree-node';
21
14
  const getDocumentTitle = (doc, useAsTitle) => {
22
15
  const docId = doc.id;
@@ -32,14 +25,13 @@ const getDocumentTitle = (doc, useAsTitle) => {
32
25
  };
33
26
  export const TreeNode = ({
34
27
  allPossibleTypeValues,
35
- ancestorIds,
36
28
  baseFilter,
37
29
  cache,
38
30
  collectionSlug,
39
31
  depth = 0,
40
- dropParentFieldName,
41
32
  expandedNodes,
42
33
  filterByCollections,
34
+ icon,
43
35
  limit = DEFAULT_TREE_LIMIT,
44
36
  node,
45
37
  onSelect,
@@ -108,48 +100,11 @@ export const TreeNode = ({
108
100
  id: node.id
109
101
  });
110
102
  }, [load, node.id, onToggle]);
111
- const {
112
- canDrop
113
- } = useHierarchyDnd();
114
- const childAncestorIds = useMemo(() => [...(ancestorIds ?? []), node.id], [ancestorIds, node.id]);
115
- const dropData = useMemo(() => dropParentFieldName ? {
116
- type: 'hierarchy-folder',
117
- // Tree nodes carry only id/title/hasChildren, not the folder's collectionSpecific value,
118
- // so type acceptance is left to the server validator here. The self/descendant check
119
- // below still runs, since that only needs ids.
120
- ancestorIds: ancestorIds ?? [],
121
- folderId: node.id,
122
- hierarchySlug: collectionSlug,
123
- parentFieldName: dropParentFieldName,
124
- title: node.title
125
- } : undefined, [ancestorIds, collectionSlug, dropParentFieldName, node.id, node.title]);
126
- const {
127
- isOver,
128
- setNodeRef: setDropRef
129
- } = useDroppable({
130
- id: `tree-node-drop-${collectionSlug}-${node.id}`,
131
- data: dropData,
132
- disabled: !dropData
133
- });
134
- const dropState = isOver && dropData ? canDrop(dropData) ? 'over' : 'invalid' : undefined;
135
103
  const handleSelectClick = useCallback(() => {
136
104
  onSelect?.({
137
105
  id: node.id
138
106
  });
139
107
  }, [node.id, onSelect]);
140
- /**
141
- * Hovering a collapsed node mid-drag opens it after a beat. The timer is cleared when the drag
142
- * leaves, so a pass-over on the way somewhere else doesn't expand the whole tree.
143
- */
144
- useEffect(() => {
145
- if (!isOver || expanded || !hasChildren) {
146
- return;
147
- }
148
- const timeout = setTimeout(() => {
149
- handleToggle();
150
- }, SPRING_LOAD_DELAY);
151
- return () => clearTimeout(timeout);
152
- }, [expanded, handleToggle, hasChildren, isOver]);
153
108
  const handleKeyDown = useCallback(e_0 => {
154
109
  if (e_0.target !== e_0.currentTarget) {
155
110
  return;
@@ -199,8 +154,7 @@ export const TreeNode = ({
199
154
  children: [/*#__PURE__*/_jsx("div", {
200
155
  className: `${baseClass}__content-wrapper`,
201
156
  children: /*#__PURE__*/_jsxs("div", {
202
- className: [`${baseClass}__content`, selected && `${baseClass}__content--selected`, dropState && `${baseClass}__content--drop-${dropState}`].filter(Boolean).join(' '),
203
- ref: setDropRef,
157
+ className: [`${baseClass}__content`, 'sidebar-row', selected && `${baseClass}__content--selected`, selected && 'sidebar-row--selected'].filter(Boolean).join(' '),
204
158
  children: [hasChildren && /*#__PURE__*/_jsx("button", {
205
159
  "aria-label": expanded ? t('general:collapse') : t('general:open'),
206
160
  className: `${baseClass}__toggle`,
@@ -212,17 +166,20 @@ export const TreeNode = ({
212
166
  direction: expanded ? 'down' : 'right',
213
167
  size: 16
214
168
  })
215
- }), /*#__PURE__*/_jsx("button", {
169
+ }), /*#__PURE__*/_jsxs("button", {
216
170
  className: [`${baseClass}__node-trigger`, selected && `${baseClass}__node-trigger--selected`].filter(Boolean).join(' '),
217
171
  onClick: handleSelectClick,
218
172
  onMouseDown: e_3 => e_3.preventDefault(),
219
173
  tabIndex: -1,
220
174
  title: node.title,
221
175
  type: "button",
222
- children: /*#__PURE__*/_jsx("span", {
176
+ children: [Boolean(icon) && /*#__PURE__*/_jsx("span", {
177
+ className: "sidebar-row__icon",
178
+ children: icon
179
+ }), /*#__PURE__*/_jsx("span", {
223
180
  className: `${baseClass}__title sidebar-row__title`,
224
181
  children: node.title
225
- })
182
+ })]
226
183
  }), isLoading && expanded && /*#__PURE__*/_jsx("span", {
227
184
  className: `${baseClass}__loading`,
228
185
  children: /*#__PURE__*/_jsx(Spinner, {
@@ -241,14 +198,13 @@ export const TreeNode = ({
241
198
  const childTitle = getDocumentTitle(child, useAsTitle);
242
199
  return /*#__PURE__*/_jsx(TreeNode, {
243
200
  allPossibleTypeValues: allPossibleTypeValues,
244
- ancestorIds: childAncestorIds,
245
201
  baseFilter: baseFilter,
246
202
  cache: cache,
247
203
  collectionSlug: collectionSlug,
248
204
  depth: depth + 1,
249
- dropParentFieldName: dropParentFieldName,
250
205
  expandedNodes: expandedNodes,
251
206
  filterByCollections: filterByCollections,
207
+ icon: icon,
252
208
  limit: limit,
253
209
  node: {
254
210
  id: childId,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useDroppable","React","useCallback","useEffect","useMemo","useRef","Spinner","ChevronIcon","useHierarchyDnd","useTranslation","LoadMore","useFocusableItem","useTreeFocus","useChildren","DEFAULT_TREE_LIMIT","SPRING_LOAD_DELAY","baseClass","getDocumentTitle","doc","useAsTitle","docId","id","idStr","String","value","TreeNode","allPossibleTypeValues","ancestorIds","baseFilter","cache","collectionSlug","depth","dropParentFieldName","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","window","requestAnimationFrame","handleFocus","tabIndex","type","ref","hasChildren","handleToggle","e","stopPropagation","canDrop","childAncestorIds","dropData","folderId","hierarchySlug","title","undefined","isOver","setNodeRef","setDropRef","data","disabled","dropState","handleSelectClick","timeout","setTimeout","clearTimeout","handleKeyDown","target","currentTarget","key","preventDefault","_jsxs","className","onFocus","onKeyDown","role","style","_jsx","filter","Boolean","join","onClick","onMouseDown","direction","size","loadingText","_Fragment","map","child","childData","childId","childTitle","currentCount","onLoadMore"],"sources":["../../../../../src/elements/Hierarchy/Tree/TreeNode/index.tsx"],"sourcesContent":["'use client'\n\nimport { useDroppable } from '@dnd-kit/core'\nimport React, { useCallback, useEffect, useMemo, useRef } from 'react'\n\nimport type { HierarchyDropData } from '../../../../providers/HierarchyDnd/types.js'\nimport type { TreeNodeProps } from '../types.js'\n\nimport { Spinner } from '../../../../elements/Spinner/index.js'\nimport { ChevronIcon } from '../../../../icons/Chevron/index.js'\nimport { useHierarchyDnd } from '../../../../providers/HierarchyDnd/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.css'\n\nconst DEFAULT_TREE_LIMIT = 10\n\n/**\n * How long a drag has to hover a collapsed node before it springs open, so a drag can drill into the\n * tree without being dropped and restarted.\n */\nconst SPRING_LOAD_DELAY = 600\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 ancestorIds,\n baseFilter,\n cache,\n collectionSlug,\n depth = 0,\n dropParentFieldName,\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 window.requestAnimationFrame(() => {\n setFocusedId(`node-${docId}`)\n })\n }\n }, [loadMoreFromHook, setFocusedId])\n\n const { handleFocus, tabIndex } = useFocusableItem({\n id: `node-${node.id}`,\n type: 'node',\n ref: nodeRef,\n })\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 handleToggle = useCallback(\n (e?: React.SyntheticEvent) => {\n e?.stopPropagation()\n void load()\n onToggle({ id: node.id })\n },\n [load, node.id, onToggle],\n )\n\n const { canDrop } = useHierarchyDnd()\n\n const childAncestorIds = useMemo(() => [...(ancestorIds ?? []), node.id], [ancestorIds, node.id])\n\n const dropData = useMemo<HierarchyDropData | undefined>(\n () =>\n dropParentFieldName\n ? {\n type: 'hierarchy-folder',\n // Tree nodes carry only id/title/hasChildren, not the folder's collectionSpecific value,\n // so type acceptance is left to the server validator here. The self/descendant check\n // below still runs, since that only needs ids.\n ancestorIds: ancestorIds ?? [],\n folderId: node.id,\n hierarchySlug: collectionSlug,\n parentFieldName: dropParentFieldName,\n title: node.title,\n }\n : undefined,\n [ancestorIds, collectionSlug, dropParentFieldName, node.id, node.title],\n )\n\n const { isOver, setNodeRef: setDropRef } = useDroppable({\n id: `tree-node-drop-${collectionSlug}-${node.id}`,\n data: dropData,\n disabled: !dropData,\n })\n\n const dropState = isOver && dropData ? (canDrop(dropData) ? 'over' : 'invalid') : undefined\n\n const handleSelectClick = useCallback(() => {\n onSelect?.({ id: node.id })\n }, [node.id, onSelect])\n\n /**\n * Hovering a collapsed node mid-drag opens it after a beat. The timer is cleared when the drag\n * leaves, so a pass-over on the way somewhere else doesn't expand the whole tree.\n */\n useEffect(() => {\n if (!isOver || expanded || !hasChildren) {\n return\n }\n\n const timeout = setTimeout(() => {\n handleToggle()\n }, SPRING_LOAD_DELAY)\n\n return () => clearTimeout(timeout)\n }, [expanded, handleToggle, hasChildren, isOver])\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.target !== e.currentTarget) {\n return\n }\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 handleToggle()\n }\n break\n }\n },\n [expanded, handleSelectClick, handleToggle, hasChildren, node.id, onToggle],\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={(e) => {\n if (e.target === e.currentTarget) {\n handleFocus()\n }\n }}\n onKeyDown={handleKeyDown}\n ref={nodeRef}\n role=\"treeitem\"\n style={{ '--tree-depth': depth } as React.CSSProperties}\n tabIndex={tabIndex}\n >\n <div className={`${baseClass}__content-wrapper`}>\n <div\n className={[\n `${baseClass}__content`,\n selected && `${baseClass}__content--selected`,\n dropState && `${baseClass}__content--drop-${dropState}`,\n ]\n .filter(Boolean)\n .join(' ')}\n ref={setDropRef}\n >\n {hasChildren && (\n <button\n aria-label={expanded ? t('general:collapse') : t('general:open')}\n className={`${baseClass}__toggle`}\n onClick={handleToggle}\n onMouseDown={(e) => e.preventDefault()}\n tabIndex={-1}\n type=\"button\"\n >\n <ChevronIcon direction={expanded ? 'down' : 'right'} size={16} />\n </button>\n )}\n <button\n className={[\n `${baseClass}__node-trigger`,\n selected && `${baseClass}__node-trigger--selected`,\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={handleSelectClick}\n onMouseDown={(e) => e.preventDefault()}\n tabIndex={-1}\n title={node.title}\n type=\"button\"\n >\n <span className={`${baseClass}__title sidebar-row__title`}>{node.title}</span>\n </button>\n {isLoading && expanded && (\n <span className={`${baseClass}__loading`}>\n <Spinner loadingText={null} size=\"sm\" />\n </span>\n )}\n </div>\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 ancestorIds={childAncestorIds}\n baseFilter={baseFilter}\n cache={cache}\n collectionSlug={collectionSlug}\n depth={depth + 1}\n dropParentFieldName={dropParentFieldName}\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
+ {"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","icon","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","window","requestAnimationFrame","handleFocus","tabIndex","type","ref","hasChildren","handleToggle","e","stopPropagation","handleSelectClick","handleKeyDown","target","currentTarget","key","preventDefault","_jsxs","undefined","className","onFocus","onKeyDown","role","style","_jsx","filter","Boolean","join","onClick","onMouseDown","direction","size","title","loadingText","_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.css'\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 icon,\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 window.requestAnimationFrame(() => {\n setFocusedId(`node-${docId}`)\n })\n }\n }, [loadMoreFromHook, setFocusedId])\n\n const { handleFocus, tabIndex } = useFocusableItem({\n id: `node-${node.id}`,\n type: 'node',\n ref: nodeRef,\n })\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 handleToggle = useCallback(\n (e?: React.SyntheticEvent) => {\n e?.stopPropagation()\n void load()\n onToggle({ id: node.id })\n },\n [load, node.id, onToggle],\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 if (e.target !== e.currentTarget) {\n return\n }\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 handleToggle()\n }\n break\n }\n },\n [expanded, handleSelectClick, handleToggle, hasChildren, node.id, onToggle],\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={(e) => {\n if (e.target === e.currentTarget) {\n handleFocus()\n }\n }}\n onKeyDown={handleKeyDown}\n ref={nodeRef}\n role=\"treeitem\"\n style={{ '--tree-depth': depth } as React.CSSProperties}\n tabIndex={tabIndex}\n >\n <div className={`${baseClass}__content-wrapper`}>\n <div\n className={[\n `${baseClass}__content`,\n 'sidebar-row',\n selected && `${baseClass}__content--selected`,\n selected && 'sidebar-row--selected',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n {hasChildren && (\n <button\n aria-label={expanded ? t('general:collapse') : t('general:open')}\n className={`${baseClass}__toggle`}\n onClick={handleToggle}\n onMouseDown={(e) => e.preventDefault()}\n tabIndex={-1}\n type=\"button\"\n >\n <ChevronIcon direction={expanded ? 'down' : 'right'} size={16} />\n </button>\n )}\n <button\n className={[\n `${baseClass}__node-trigger`,\n selected && `${baseClass}__node-trigger--selected`,\n ]\n .filter(Boolean)\n .join(' ')}\n onClick={handleSelectClick}\n onMouseDown={(e) => e.preventDefault()}\n tabIndex={-1}\n title={node.title}\n type=\"button\"\n >\n {Boolean(icon) && <span className=\"sidebar-row__icon\">{icon}</span>}\n <span className={`${baseClass}__title sidebar-row__title`}>{node.title}</span>\n </button>\n {isLoading && expanded && (\n <span className={`${baseClass}__loading`}>\n <Spinner loadingText={null} size=\"sm\" />\n </span>\n )}\n </div>\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 icon={icon}\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":[]}
@@ -3,29 +3,29 @@
3
3
  .hierarchy-sidebar-tab {
4
4
  display: flex;
5
5
  flex-direction: column;
6
+ gap: var(--spacer-2);
6
7
  }
7
8
 
8
9
  .tree {
9
10
  --tree-indent: var(--spacer-3);
10
11
  --tree-chevron-width: var(--spacer-3);
11
- --tree-chevron-spacing: var(--spacer-1);
12
+ --tree-chevron-spacing: var(--spacer-2);
12
13
  --tree-node-content-height: var(--text-body-medium-line-height);
13
14
  --tree-row-gap: var(--spacer-1);
14
15
  --tree-font-size: var(--text-body-medium-font-size);
15
16
 
16
- padding: var(--spacer-1) 0;
17
+ padding: 0;
17
18
  margin: 0;
18
19
  }
19
20
 
20
21
  .tree__all-option-wrapper {
21
22
  display: grid;
22
- padding: var(--spacer-1) var(--spacer-2) var(--spacer-1) var(--spacer-2-5);
23
23
  gap: var(--spacer-1);
24
- grid-template-columns: auto auto;
24
+ grid-template-columns: 1fr auto;
25
25
  align-items: center;
26
- justify-content: space-between;
26
+ margin-bottom: var(--spacer-2);
27
27
 
28
- .tree__collapse-all-button {
28
+ .tree__create-button {
29
29
  padding: 0;
30
30
 
31
31
  &:hover {
@@ -35,8 +35,9 @@
35
35
  }
36
36
 
37
37
  .tree__all-option {
38
- gap: 0;
39
- padding-inline-end: var(--spacer-2);
38
+ gap: var(--spacer-1);
39
+ padding-left: var(--spacer-2);
40
+ padding-block: var(--spacer-1);
40
41
 
41
42
  .sidebar-row__title {
42
43
  font-weight: var(--text-body-medium-strong-font-weight);
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/Hierarchy/Tree/index.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA8C,MAAM,OAAO,CAAA;AAElE,OAAO,KAAK,EAAkB,kBAAkB,EAAgB,MAAM,YAAY,CAAA;AAclF,OAAO,aAAa,CAAA;AA4XpB,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAMtD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/Hierarchy/Tree/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAwD,MAAM,OAAO,CAAA;AAE5E,OAAO,KAAK,EAAkB,kBAAkB,EAAgB,MAAM,YAAY,CAAA;AAgBlF,OAAO,aAAa,CAAA;AAsYpB,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAMtD,CAAA"}
@@ -1,10 +1,12 @@
1
1
  'use client';
2
2
 
3
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
4
+ import { useModal } from '@faceless-ui/modal';
4
5
  import { getTranslation } from '@payloadcms/translations';
5
6
  import { DEFAULT_HIERARCHY_TREE_LIMIT } from 'payload/shared';
6
- import React, { useCallback, useId, useMemo, useRef } from 'react';
7
- import { CollapseLayersIcon } from '../../../icons/CollapseLayers/index.js';
7
+ import React, { useCallback, useId, useMemo, useRef, useState } from 'react';
8
+ import { PlusIcon } from '../../../icons/Plus/index.js';
9
+ import { useAuth } from '../../../providers/Auth/index.js';
8
10
  import { useConfig } from '../../../providers/Config/index.js';
9
11
  import { useHierarchy } from '../../../providers/Hierarchy/index.js';
10
12
  import { useRouter } from '../../../providers/RouterAdapter/index.js';
@@ -12,14 +14,13 @@ import { useTranslation } from '../../../providers/Translation/index.js';
12
14
  import { Button } from '../../Button/index.js';
13
15
  import { CreateDocumentButton } from '../../CreateDocumentButton/index.js';
14
16
  import { DelayedSpinner } from '../../DelayedSpinner/index.js';
17
+ import { DocumentDrawer } from '../../DocumentDrawer/index.js';
15
18
  import { LoadMore } from './LoadMore/index.js';
16
19
  import { TreeFocusProvider, useTreeFocus } from './TreeFocusContext.js';
17
20
  import { TreeNode } from './TreeNode/index.js';
18
21
  import { useChildren } from './useChildren.js';
19
22
  import './index.css';
20
23
  const baseClass = 'tree';
21
- /** Root nodes have no ancestors; hoisted so the reference stays stable across renders. */
22
- const ROOT_ANCESTOR_IDS = [];
23
24
  const getDocumentTitle = (doc, useAsTitle) => {
24
25
  const docId = doc.id;
25
26
  const idStr = typeof docId === 'number' ? String(docId) : docId;
@@ -53,12 +54,19 @@ const HierarchyTreeInner = ({
53
54
  i18n,
54
55
  t
55
56
  } = useTranslation();
57
+ const {
58
+ permissions
59
+ } = useAuth();
56
60
  const {
57
61
  getEntityConfig
58
62
  } = useConfig();
63
+ const {
64
+ closeModal,
65
+ openModal
66
+ } = useModal();
59
67
  const createDrawerSlug = `tree-create-${useId()}`;
68
+ const [isCreateDrawerOpen, setIsCreateDrawerOpen] = useState(false);
60
69
  const {
61
- collapseAllForCollection,
62
70
  getExpandedNodesForCollection,
63
71
  getTreeDataForCollection,
64
72
  toggleNodeForCollection,
@@ -71,6 +79,7 @@ const HierarchyTreeInner = ({
71
79
  const parentFieldName = hierarchyConfig?.parentFieldName;
72
80
  const treeLimit = hierarchyConfig?.admin?.treeLimit ?? DEFAULT_HIERARCHY_TREE_LIMIT;
73
81
  const useAsTitle = useAsTitleProp ?? collectionConfig.admin?.useAsTitle;
82
+ const canCreate = Boolean(permissions?.collections?.[collectionSlug]?.create);
74
83
  const allPossibleTypeValues = useMemo(() => hierarchyConfig?.relatedCollections ? Object.keys(hierarchyConfig.relatedCollections) : undefined, [hierarchyConfig?.relatedCollections]);
75
84
  const contextData = getTreeDataForCollection(collectionSlug);
76
85
  const baseFilterKey = baseFilter ? JSON.stringify(baseFilter) : '';
@@ -123,12 +132,6 @@ const HierarchyTreeInner = ({
123
132
  }
124
133
  toggleNodeForCollection(collectionSlug, id);
125
134
  }, [collectionSlug, getExpandedNodesForCollection, initialExpandedNodesProp, toggleNodeForCollection]);
126
- const handleCollapseAll = useCallback(() => {
127
- // Mark context as seeded so the expandedNodes memo trusts the now-empty context
128
- // rather than falling back to the server-provided initial nodes.
129
- contextSeededRef.current = true;
130
- collapseAllForCollection(collectionSlug);
131
- }, [collapseAllForCollection, collectionSlug]);
132
135
  // Pre-populate cache with initialData synchronously before first render
133
136
  const childrenCache = useRef(new Map());
134
137
  const prevBaseFilterKeyRef = useRef(baseFilterKey);
@@ -266,7 +269,7 @@ const HierarchyTreeInner = ({
266
269
  tabIndex: -1,
267
270
  children: [/*#__PURE__*/_jsxs("div", {
268
271
  className: `${baseClass}__all-option-wrapper`,
269
- children: [/*#__PURE__*/_jsxs("div", {
272
+ children: [/*#__PURE__*/_jsx("div", {
270
273
  "aria-selected": isAllSelected,
271
274
  className: [`${baseClass}__all-option`, 'sidebar-row', isAllSelected && `${baseClass}__all-option--selected`, isAllSelected && 'sidebar-row--selected'].filter(Boolean).join(' '),
272
275
  onClick: handleAllClick,
@@ -278,23 +281,39 @@ const HierarchyTreeInner = ({
278
281
  },
279
282
  role: "treeitem",
280
283
  tabIndex: 0,
281
- children: [Boolean(icon) && /*#__PURE__*/_jsx("span", {
282
- className: "sidebar-row__icon",
283
- children: icon
284
- }), /*#__PURE__*/_jsx("span", {
284
+ children: /*#__PURE__*/_jsxs("span", {
285
285
  className: "sidebar-row__title",
286
- children: getTranslation(getEntityConfig({
286
+ children: [t('general:all'), ' ', getTranslation(getEntityConfig({
287
287
  collectionSlug
288
- })?.labels?.plural, i18n)
288
+ })?.labels?.plural, i18n)]
289
+ })
290
+ }), canCreate && /*#__PURE__*/_jsxs(_Fragment, {
291
+ children: [/*#__PURE__*/_jsx(Button, {
292
+ "aria-label": t('general:createNew'),
293
+ buttonStyle: "ghost",
294
+ className: `${baseClass}__create-button`,
295
+ margin: false,
296
+ onClick: () => {
297
+ setIsCreateDrawerOpen(true);
298
+ openModal(createDrawerSlug);
299
+ },
300
+ children: /*#__PURE__*/_jsx(PlusIcon, {
301
+ size: 24
302
+ })
303
+ }), isCreateDrawerOpen && /*#__PURE__*/_jsx(DocumentDrawer, {
304
+ collectionSlug: collectionSlug,
305
+ drawerSlug: createDrawerSlug,
306
+ initialData: parentFieldName ? {
307
+ [parentFieldName]: null
308
+ } : undefined,
309
+ onSave: async () => {
310
+ closeModal(createDrawerSlug);
311
+ setIsCreateDrawerOpen(false);
312
+ await refresh();
313
+ router.refresh();
314
+ },
315
+ redirectAfterCreate: false
289
316
  })]
290
- }), expandedNodes.size > 0 && /*#__PURE__*/_jsx(Button, {
291
- "aria-label": t('fields:collapseAll'),
292
- buttonStyle: "ghost",
293
- className: `${baseClass}__collapse-all-button`,
294
- margin: false,
295
- onClick: handleCollapseAll,
296
- tooltip: t('fields:collapseAll'),
297
- children: /*#__PURE__*/_jsx(CollapseLayersIcon, {})
298
317
  })]
299
318
  }), rootNodes.map(node_0 => {
300
319
  const nodeId_0 = node_0.id;
@@ -302,14 +321,13 @@ const HierarchyTreeInner = ({
302
321
  const nodeTitle = getDocumentTitle(node_0, useAsTitle);
303
322
  return /*#__PURE__*/_jsx(TreeNode, {
304
323
  allPossibleTypeValues: allPossibleTypeValues,
305
- ancestorIds: ROOT_ANCESTOR_IDS,
306
324
  baseFilter: baseFilter,
307
325
  cache: childrenCache,
308
326
  collectionSlug: collectionSlug,
309
327
  depth: 0,
310
- dropParentFieldName: parentFieldName,
311
328
  expandedNodes: expandedNodes,
312
329
  filterByCollections: filterByCollections,
330
+ icon: icon,
313
331
  limit: treeLimit,
314
332
  node: {
315
333
  id: nodeId_0,