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

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 (558) hide show
  1. package/dist/elements/AddNewRelation/index.css +0 -4
  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 +5 -0
  5. package/dist/elements/AppHeader/index.d.ts +1 -8
  6. package/dist/elements/AppHeader/index.d.ts.map +1 -1
  7. package/dist/elements/AppHeader/index.js +4 -13
  8. package/dist/elements/AppHeader/index.js.map +1 -1
  9. package/dist/elements/ArrayAction/index.d.ts +1 -0
  10. package/dist/elements/ArrayAction/index.d.ts.map +1 -1
  11. package/dist/elements/ArrayAction/index.js +45 -32
  12. package/dist/elements/ArrayAction/index.js.map +1 -1
  13. package/dist/elements/BulkUpload/AddFilesView/index.css +10 -4
  14. package/dist/elements/BulkUpload/AddFilesView/index.d.ts.map +1 -1
  15. package/dist/elements/BulkUpload/AddFilesView/index.js +71 -51
  16. package/dist/elements/BulkUpload/AddFilesView/index.js.map +1 -1
  17. package/dist/elements/Button/index.css +25 -2
  18. package/dist/elements/Button/index.d.ts.map +1 -1
  19. package/dist/elements/Button/index.js +2 -0
  20. package/dist/elements/Button/index.js.map +1 -1
  21. package/dist/elements/Button/types.d.ts +1 -1
  22. package/dist/elements/Button/types.d.ts.map +1 -1
  23. package/dist/elements/Button/types.js.map +1 -1
  24. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.d.ts +10 -0
  25. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.d.ts.map +1 -1
  26. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js +65 -3
  27. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js.map +1 -1
  28. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js +345 -1
  29. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js.map +1 -1
  30. package/dist/elements/DefaultListViewTabs/index.css +1 -0
  31. package/dist/elements/DefaultListViewTabs/index.d.ts.map +1 -1
  32. package/dist/elements/DefaultListViewTabs/index.js +84 -62
  33. package/dist/elements/DefaultListViewTabs/index.js.map +1 -1
  34. package/dist/elements/DocumentDrawer/types.d.ts +1 -1
  35. package/dist/elements/DocumentDrawer/types.d.ts.map +1 -1
  36. package/dist/elements/DocumentDrawer/types.js.map +1 -1
  37. package/dist/elements/Drawer/index.css +10 -4
  38. package/dist/elements/Drawer/types.d.ts +2 -2
  39. package/dist/elements/Drawer/types.d.ts.map +1 -1
  40. package/dist/elements/Drawer/types.js.map +1 -1
  41. package/dist/elements/Dropzone/index.css +10 -4
  42. package/dist/elements/DuplicateDocument/SelectLocalesDrawer/index.js +3 -2
  43. package/dist/elements/DuplicateDocument/SelectLocalesDrawer/index.js.map +1 -1
  44. package/dist/elements/FileManager/index.css +0 -30
  45. package/dist/elements/FileManager/index.d.ts.map +1 -1
  46. package/dist/elements/FileManager/index.js +379 -287
  47. package/dist/elements/FileManager/index.js.map +1 -1
  48. package/dist/elements/Hierarchy/ColumnBrowser/Column/index.css +22 -4
  49. package/dist/elements/Hierarchy/ColumnBrowser/Column/index.d.ts.map +1 -1
  50. package/dist/elements/Hierarchy/ColumnBrowser/Column/index.js +68 -49
  51. package/dist/elements/Hierarchy/ColumnBrowser/Column/index.js.map +1 -1
  52. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.css +100 -15
  53. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.d.ts.map +1 -1
  54. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.js +97 -137
  55. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.js.map +1 -1
  56. package/dist/elements/Hierarchy/ColumnBrowser/index.d.ts +1 -1
  57. package/dist/elements/Hierarchy/ColumnBrowser/index.d.ts.map +1 -1
  58. package/dist/elements/Hierarchy/ColumnBrowser/index.js +51 -23
  59. package/dist/elements/Hierarchy/ColumnBrowser/index.js.map +1 -1
  60. package/dist/elements/Hierarchy/ColumnBrowser/types.d.ts +26 -3
  61. package/dist/elements/Hierarchy/ColumnBrowser/types.d.ts.map +1 -1
  62. package/dist/elements/Hierarchy/ColumnBrowser/types.js.map +1 -1
  63. package/dist/elements/Hierarchy/CreateNewButton/index.css +9 -0
  64. package/dist/elements/Hierarchy/CreateNewButton/index.d.ts +9 -0
  65. package/dist/elements/Hierarchy/CreateNewButton/index.d.ts.map +1 -0
  66. package/dist/elements/Hierarchy/CreateNewButton/index.js +111 -0
  67. package/dist/elements/Hierarchy/CreateNewButton/index.js.map +1 -0
  68. package/dist/elements/Hierarchy/DocHeaderButton/index.d.ts.map +1 -1
  69. package/dist/elements/Hierarchy/DocHeaderButton/index.js +6 -1
  70. package/dist/elements/Hierarchy/DocHeaderButton/index.js.map +1 -1
  71. package/dist/elements/Hierarchy/DocHeaderButton/index.server.js +1 -3
  72. package/dist/elements/Hierarchy/DocHeaderButton/index.server.js.map +1 -1
  73. package/dist/elements/Hierarchy/Field/index.client.d.ts +5 -0
  74. package/dist/elements/Hierarchy/Field/index.client.d.ts.map +1 -1
  75. package/dist/elements/Hierarchy/Field/index.client.js +120 -95
  76. package/dist/elements/Hierarchy/Field/index.client.js.map +1 -1
  77. package/dist/elements/Hierarchy/Field/index.css +3 -34
  78. package/dist/elements/Hierarchy/Modal/Footer/index.css +45 -0
  79. package/dist/elements/Hierarchy/Modal/Footer/index.d.ts +28 -0
  80. package/dist/elements/Hierarchy/Modal/Footer/index.d.ts.map +1 -0
  81. package/dist/elements/Hierarchy/Modal/Footer/index.js +166 -0
  82. package/dist/elements/Hierarchy/Modal/Footer/index.js.map +1 -0
  83. package/dist/elements/Hierarchy/Modal/fetchAncestorPath.d.ts +18 -4
  84. package/dist/elements/Hierarchy/Modal/fetchAncestorPath.d.ts.map +1 -1
  85. package/dist/elements/Hierarchy/Modal/fetchAncestorPath.js +88 -24
  86. package/dist/elements/Hierarchy/Modal/fetchAncestorPath.js.map +1 -1
  87. package/dist/elements/Hierarchy/Modal/index.css +4 -53
  88. package/dist/elements/Hierarchy/Modal/index.d.ts +5 -2
  89. package/dist/elements/Hierarchy/Modal/index.d.ts.map +1 -1
  90. package/dist/elements/Hierarchy/Modal/index.js +136 -99
  91. package/dist/elements/Hierarchy/Modal/index.js.map +1 -1
  92. package/dist/elements/Hierarchy/Modal/types.d.ts +15 -0
  93. package/dist/elements/Hierarchy/Modal/types.d.ts.map +1 -1
  94. package/dist/elements/Hierarchy/Modal/types.js.map +1 -1
  95. package/dist/elements/Hierarchy/MoveMany/index.d.ts +7 -3
  96. package/dist/elements/Hierarchy/MoveMany/index.d.ts.map +1 -1
  97. package/dist/elements/Hierarchy/MoveMany/index.js +43 -170
  98. package/dist/elements/Hierarchy/MoveMany/index.js.map +1 -1
  99. package/dist/elements/Hierarchy/Search/index.css +2 -9
  100. package/dist/elements/Hierarchy/Search/index.d.ts.map +1 -1
  101. package/dist/elements/Hierarchy/Search/index.js +6 -73
  102. package/dist/elements/Hierarchy/Search/index.js.map +1 -1
  103. package/dist/elements/Hierarchy/Search/types.d.ts +2 -6
  104. package/dist/elements/Hierarchy/Search/types.d.ts.map +1 -1
  105. package/dist/elements/Hierarchy/Search/types.js.map +1 -1
  106. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.d.ts +0 -4
  107. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.d.ts.map +1 -1
  108. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.js +101 -186
  109. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.js.map +1 -1
  110. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.d.ts.map +1 -1
  111. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.js +1 -21
  112. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.js.map +1 -1
  113. package/dist/elements/Hierarchy/Tree/LoadMore/index.css +3 -3
  114. package/dist/elements/Hierarchy/Tree/TreeNode/index.css +59 -29
  115. package/dist/elements/Hierarchy/Tree/TreeNode/index.d.ts +1 -1
  116. package/dist/elements/Hierarchy/Tree/TreeNode/index.d.ts.map +1 -1
  117. package/dist/elements/Hierarchy/Tree/TreeNode/index.js +54 -10
  118. package/dist/elements/Hierarchy/Tree/TreeNode/index.js.map +1 -1
  119. package/dist/elements/Hierarchy/Tree/index.css +8 -9
  120. package/dist/elements/Hierarchy/Tree/index.d.ts.map +1 -1
  121. package/dist/elements/Hierarchy/Tree/index.js +29 -47
  122. package/dist/elements/Hierarchy/Tree/index.js.map +1 -1
  123. package/dist/elements/Hierarchy/Tree/types.d.ts +9 -1
  124. package/dist/elements/Hierarchy/Tree/types.d.ts.map +1 -1
  125. package/dist/elements/Hierarchy/Tree/types.js.map +1 -1
  126. package/dist/elements/Hierarchy/Tree/useChildren.d.ts.map +1 -1
  127. package/dist/elements/Hierarchy/Tree/useChildren.js +11 -1
  128. package/dist/elements/Hierarchy/Tree/useChildren.js.map +1 -1
  129. package/dist/elements/Hierarchy/getFolderHierarchySlug.d.ts +22 -0
  130. package/dist/elements/Hierarchy/getFolderHierarchySlug.d.ts.map +1 -0
  131. package/dist/elements/Hierarchy/getFolderHierarchySlug.js +17 -0
  132. package/dist/elements/Hierarchy/getFolderHierarchySlug.js.map +1 -0
  133. package/dist/elements/Hierarchy/move/moveDocuments.d.ts +34 -0
  134. package/dist/elements/Hierarchy/move/moveDocuments.d.ts.map +1 -0
  135. package/dist/elements/Hierarchy/move/moveDocuments.js +94 -0
  136. package/dist/elements/Hierarchy/move/moveDocuments.js.map +1 -0
  137. package/dist/elements/IDLabel/index.css +6 -0
  138. package/dist/elements/IDLabel/index.d.ts +1 -1
  139. package/dist/elements/IDLabel/index.d.ts.map +1 -1
  140. package/dist/elements/IDLabel/index.js +16 -21
  141. package/dist/elements/IDLabel/index.js.map +1 -1
  142. package/dist/elements/ListControls/index.d.ts.map +1 -1
  143. package/dist/elements/ListControls/index.js +3 -2
  144. package/dist/elements/ListControls/index.js.map +1 -1
  145. package/dist/elements/ListControls/types.d.ts +4 -0
  146. package/dist/elements/ListControls/types.d.ts.map +1 -1
  147. package/dist/elements/ListControls/types.js.map +1 -1
  148. package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.d.ts +1 -7
  149. package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.d.ts.map +1 -1
  150. package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.js +26 -32
  151. package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.js.map +1 -1
  152. package/dist/elements/Nav/NavSidebarToggle/index.js +1 -1
  153. package/dist/elements/Nav/NavSidebarToggle/index.js.map +1 -1
  154. package/dist/elements/Nav/NavWrapper/index.d.ts +1 -0
  155. package/dist/elements/Nav/NavWrapper/index.d.ts.map +1 -1
  156. package/dist/elements/Nav/NavWrapper/index.js +12 -18
  157. package/dist/elements/Nav/NavWrapper/index.js.map +1 -1
  158. package/dist/elements/Nav/SidebarTabs/index.css +1 -2
  159. package/dist/elements/Nav/context.d.ts +0 -1
  160. package/dist/elements/Nav/context.d.ts.map +1 -1
  161. package/dist/elements/Nav/context.js +92 -67
  162. package/dist/elements/Nav/context.js.map +1 -1
  163. package/dist/elements/Nav/index.css +47 -42
  164. package/dist/elements/Nav/index.d.ts +4 -0
  165. package/dist/elements/Nav/index.d.ts.map +1 -1
  166. package/dist/elements/Nav/index.js +16 -1
  167. package/dist/elements/Nav/index.js.map +1 -1
  168. package/dist/elements/NavGroup/index.css +29 -15
  169. package/dist/elements/Popup/PopupButtonList/index.css +33 -17
  170. package/dist/elements/Popup/index.css +6 -0
  171. package/dist/elements/Popup/index.d.ts +10 -0
  172. package/dist/elements/Popup/index.d.ts.map +1 -1
  173. package/dist/elements/Popup/index.js +13 -6
  174. package/dist/elements/Popup/index.js.map +1 -1
  175. package/dist/elements/PublishButton/ScheduleDrawer/index.js +1 -1
  176. package/dist/elements/PublishButton/ScheduleDrawer/index.js.map +1 -1
  177. package/dist/elements/QueryPresets/QueryPresetBar/index.js +1 -3
  178. package/dist/elements/QueryPresets/QueryPresetBar/index.js.map +1 -1
  179. package/dist/elements/ReactSelect/types.d.ts +5 -0
  180. package/dist/elements/ReactSelect/types.d.ts.map +1 -1
  181. package/dist/elements/ReactSelect/types.js.map +1 -1
  182. package/dist/elements/RelationshipTable/index.d.ts.map +1 -1
  183. package/dist/elements/RelationshipTable/index.js +5 -2
  184. package/dist/elements/RelationshipTable/index.js.map +1 -1
  185. package/dist/elements/SegmentedControl/index.css +58 -0
  186. package/dist/elements/SegmentedControl/index.d.ts +19 -0
  187. package/dist/elements/SegmentedControl/index.d.ts.map +1 -0
  188. package/dist/elements/SegmentedControl/index.js +104 -0
  189. package/dist/elements/SegmentedControl/index.js.map +1 -0
  190. package/dist/elements/SelectAll/index.d.ts.map +1 -1
  191. package/dist/elements/SelectAll/index.js +1 -2
  192. package/dist/elements/SelectAll/index.js.map +1 -1
  193. package/dist/elements/SelectRow/index.d.ts.map +1 -1
  194. package/dist/elements/SelectRow/index.js +1 -2
  195. package/dist/elements/SelectRow/index.js.map +1 -1
  196. package/dist/elements/SidebarRow/index.css +1 -5
  197. package/dist/elements/SidebarToggle/index.css +3 -1
  198. package/dist/elements/SortHeader/index.d.ts.map +1 -1
  199. package/dist/elements/SortHeader/index.js +29 -26
  200. package/dist/elements/SortHeader/index.js.map +1 -1
  201. package/dist/elements/StepNav/DropTarget/index.css +20 -0
  202. package/dist/elements/StepNav/DropTarget/index.d.ts +16 -0
  203. package/dist/elements/StepNav/DropTarget/index.d.ts.map +1 -0
  204. package/dist/elements/StepNav/DropTarget/index.js +71 -0
  205. package/dist/elements/StepNav/DropTarget/index.js.map +1 -0
  206. package/dist/elements/StepNav/index.css +64 -14
  207. package/dist/elements/StepNav/index.d.ts.map +1 -1
  208. package/dist/elements/StepNav/index.js +147 -69
  209. package/dist/elements/StepNav/index.js.map +1 -1
  210. package/dist/elements/StepNav/types.d.ts +6 -0
  211. package/dist/elements/StepNav/types.d.ts.map +1 -1
  212. package/dist/elements/StepNav/types.js.map +1 -1
  213. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.css +5 -7
  214. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.d.ts.map +1 -1
  215. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.js +14 -3
  216. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.js.map +1 -1
  217. package/dist/elements/Table/DefaultCell/index.d.ts.map +1 -1
  218. package/dist/elements/Table/DefaultCell/index.js +3 -11
  219. package/dist/elements/Table/DefaultCell/index.js.map +1 -1
  220. package/dist/elements/Upload/UploadFromURLModal/index.d.ts +1 -1
  221. package/dist/elements/Upload/UploadFromURLModal/index.d.ts.map +1 -1
  222. package/dist/elements/Upload/UploadFromURLModal/index.js.map +1 -1
  223. package/dist/elements/Upload/index.css +39 -32
  224. package/dist/elements/Upload/index.d.ts.map +1 -1
  225. package/dist/elements/Upload/index.js +37 -99
  226. package/dist/elements/Upload/index.js.map +1 -1
  227. package/dist/elements/Upload/usePasteFromClipboard.d.ts +14 -0
  228. package/dist/elements/Upload/usePasteFromClipboard.d.ts.map +1 -0
  229. package/dist/elements/Upload/usePasteFromClipboard.js +93 -0
  230. package/dist/elements/Upload/usePasteFromClipboard.js.map +1 -0
  231. package/dist/elements/Upload/useUploadFromUrl.d.ts +20 -0
  232. package/dist/elements/Upload/useUploadFromUrl.d.ts.map +1 -0
  233. package/dist/elements/Upload/useUploadFromUrl.js +201 -0
  234. package/dist/elements/Upload/useUploadFromUrl.js.map +1 -0
  235. package/dist/elements/UploadDropzoneContent/index.css +31 -0
  236. package/dist/elements/UploadDropzoneContent/index.d.ts +17 -0
  237. package/dist/elements/UploadDropzoneContent/index.d.ts.map +1 -0
  238. package/dist/elements/UploadDropzoneContent/index.js +62 -0
  239. package/dist/elements/UploadDropzoneContent/index.js.map +1 -0
  240. package/dist/elements/UserMenu/HoverSubmenuGroup.d.ts +18 -0
  241. package/dist/elements/UserMenu/HoverSubmenuGroup.d.ts.map +1 -0
  242. package/dist/elements/UserMenu/HoverSubmenuGroup.js +38 -0
  243. package/dist/elements/UserMenu/HoverSubmenuGroup.js.map +1 -0
  244. package/dist/elements/UserMenu/LanguageMenu/index.d.ts.map +1 -1
  245. package/dist/elements/UserMenu/LanguageMenu/index.js +83 -39
  246. package/dist/elements/UserMenu/LanguageMenu/index.js.map +1 -1
  247. package/dist/elements/UserMenu/SettingsMenu/index.d.ts.map +1 -1
  248. package/dist/elements/UserMenu/SettingsMenu/index.js +57 -21
  249. package/dist/elements/UserMenu/SettingsMenu/index.js.map +1 -1
  250. package/dist/elements/UserMenu/ThemeMenu/index.d.ts.map +1 -1
  251. package/dist/elements/UserMenu/ThemeMenu/index.js +83 -39
  252. package/dist/elements/UserMenu/ThemeMenu/index.js.map +1 -1
  253. package/dist/elements/UserMenu/index.css +32 -2
  254. package/dist/elements/UserMenu/index.d.ts +1 -0
  255. package/dist/elements/UserMenu/index.d.ts.map +1 -1
  256. package/dist/elements/UserMenu/index.js +77 -51
  257. package/dist/elements/UserMenu/index.js.map +1 -1
  258. package/dist/elements/UserMenu/useHoverSubmenu.d.ts +21 -0
  259. package/dist/elements/UserMenu/useHoverSubmenu.d.ts.map +1 -0
  260. package/dist/elements/UserMenu/useHoverSubmenu.js +260 -0
  261. package/dist/elements/UserMenu/useHoverSubmenu.js.map +1 -0
  262. package/dist/elements/ViewModeToggle/index.d.ts +8 -0
  263. package/dist/elements/ViewModeToggle/index.d.ts.map +1 -0
  264. package/dist/elements/ViewModeToggle/index.js +29 -0
  265. package/dist/elements/ViewModeToggle/index.js.map +1 -0
  266. package/dist/elements/WhereBuilder/conditionValue.d.ts +32 -0
  267. package/dist/elements/WhereBuilder/conditionValue.d.ts.map +1 -0
  268. package/dist/elements/WhereBuilder/conditionValue.js +32 -0
  269. package/dist/elements/WhereBuilder/conditionValue.js.map +1 -0
  270. package/dist/elements/WhereBuilder/conditionValue.spec.js +65 -0
  271. package/dist/elements/WhereBuilder/conditionValue.spec.js.map +1 -0
  272. package/dist/elements/WhereBuilder/index.d.ts.map +1 -1
  273. package/dist/elements/WhereBuilder/index.js +15 -4
  274. package/dist/elements/WhereBuilder/index.js.map +1 -1
  275. package/dist/exports/client/index.d.ts +6 -1
  276. package/dist/exports/client/index.d.ts.map +1 -1
  277. package/dist/exports/client/index.js +1 -1
  278. package/dist/exports/client/index.js.map +3 -3
  279. package/dist/fields/Array/ArrayRow.d.ts +1 -0
  280. package/dist/fields/Array/ArrayRow.d.ts.map +1 -1
  281. package/dist/fields/Array/ArrayRow.js +2 -0
  282. package/dist/fields/Array/ArrayRow.js.map +1 -1
  283. package/dist/fields/Array/index.d.ts.map +1 -1
  284. package/dist/fields/Array/index.js +38 -10
  285. package/dist/fields/Array/index.js.map +1 -1
  286. package/dist/fields/Blocks/BlockRow.d.ts +1 -0
  287. package/dist/fields/Blocks/BlockRow.d.ts.map +1 -1
  288. package/dist/fields/Blocks/BlockRow.js +2 -0
  289. package/dist/fields/Blocks/BlockRow.js.map +1 -1
  290. package/dist/fields/Blocks/RowActions.d.ts +1 -0
  291. package/dist/fields/Blocks/RowActions.d.ts.map +1 -1
  292. package/dist/fields/Blocks/RowActions.js +22 -19
  293. package/dist/fields/Blocks/RowActions.js.map +1 -1
  294. package/dist/fields/Blocks/index.d.ts.map +1 -1
  295. package/dist/fields/Blocks/index.js +35 -7
  296. package/dist/fields/Blocks/index.js.map +1 -1
  297. package/dist/fields/Checkbox/Input.d.ts +2 -2
  298. package/dist/fields/Checkbox/Input.d.ts.map +1 -1
  299. package/dist/fields/Checkbox/Input.js +134 -152
  300. package/dist/fields/Checkbox/Input.js.map +1 -1
  301. package/dist/fields/Checkbox/index.css +168 -155
  302. package/dist/fields/Relationship/Input.d.ts.map +1 -1
  303. package/dist/fields/Relationship/Input.js +24 -6
  304. package/dist/fields/Relationship/Input.js.map +1 -1
  305. package/dist/fields/Relationship/optionsReducer.d.ts.map +1 -1
  306. package/dist/fields/Relationship/optionsReducer.js +2 -0
  307. package/dist/fields/Relationship/optionsReducer.js.map +1 -1
  308. package/dist/fields/Relationship/types.d.ts +24 -0
  309. package/dist/fields/Relationship/types.d.ts.map +1 -1
  310. package/dist/fields/Relationship/types.js.map +1 -1
  311. package/dist/fields/Upload/Input.d.ts.map +1 -1
  312. package/dist/fields/Upload/Input.js +44 -16
  313. package/dist/fields/Upload/Input.js.map +1 -1
  314. package/dist/fields/Upload/Input.spec.js +241 -0
  315. package/dist/fields/Upload/Input.spec.js.map +1 -0
  316. package/dist/forms/Form/index.d.ts.map +1 -1
  317. package/dist/forms/Form/index.js +4 -1
  318. package/dist/forms/Form/index.js.map +1 -1
  319. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts.map +1 -1
  320. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +1 -0
  321. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
  322. package/dist/icons/CollapseLayers/index.css +5 -0
  323. package/dist/icons/CollapseLayers/index.d.ts +7 -0
  324. package/dist/icons/CollapseLayers/index.d.ts.map +1 -0
  325. package/dist/icons/CollapseLayers/index.js +23 -0
  326. package/dist/icons/CollapseLayers/index.js.map +1 -0
  327. package/dist/icons/Edit/index.d.ts +0 -1
  328. package/dist/icons/Edit/index.d.ts.map +1 -1
  329. package/dist/icons/Edit/index.js +4 -4
  330. package/dist/icons/Edit/index.js.map +1 -1
  331. package/dist/icons/Table/index.css +5 -0
  332. package/dist/icons/Table/index.d.ts +7 -0
  333. package/dist/icons/Table/index.d.ts.map +1 -0
  334. package/dist/icons/Table/index.js +25 -0
  335. package/dist/icons/Table/index.js.map +1 -0
  336. package/dist/providers/Actions/index.d.ts +1 -0
  337. package/dist/providers/Actions/index.d.ts.map +1 -1
  338. package/dist/providers/Actions/index.js +43 -11
  339. package/dist/providers/Actions/index.js.map +1 -1
  340. package/dist/providers/Auth/AuthSessionDebug/index.css +48 -0
  341. package/dist/providers/Auth/AuthSessionDebug/index.d.ts +13 -0
  342. package/dist/providers/Auth/AuthSessionDebug/index.d.ts.map +1 -0
  343. package/dist/providers/Auth/AuthSessionDebug/index.js +93 -0
  344. package/dist/providers/Auth/AuthSessionDebug/index.js.map +1 -0
  345. package/dist/providers/Auth/AuthSessionDebug/utilities.d.ts +21 -0
  346. package/dist/providers/Auth/AuthSessionDebug/utilities.d.ts.map +1 -0
  347. package/dist/providers/Auth/AuthSessionDebug/utilities.js +53 -0
  348. package/dist/providers/Auth/AuthSessionDebug/utilities.js.map +1 -0
  349. package/dist/providers/Auth/authSessionRequests.d.ts +27 -0
  350. package/dist/providers/Auth/authSessionRequests.d.ts.map +1 -0
  351. package/dist/providers/Auth/authSessionRequests.js +119 -0
  352. package/dist/providers/Auth/authSessionRequests.js.map +1 -0
  353. package/dist/providers/Auth/authSessionRequests.spec.js +121 -0
  354. package/dist/providers/Auth/authSessionRequests.spec.js.map +1 -0
  355. package/dist/providers/Auth/index.d.ts +2 -56
  356. package/dist/providers/Auth/index.d.ts.map +1 -1
  357. package/dist/providers/Auth/index.js +283 -135
  358. package/dist/providers/Auth/index.js.map +1 -1
  359. package/dist/providers/Auth/sessionActivity.d.ts +23 -0
  360. package/dist/providers/Auth/sessionActivity.d.ts.map +1 -0
  361. package/dist/providers/Auth/sessionActivity.js +49 -0
  362. package/dist/providers/Auth/sessionActivity.js.map +1 -0
  363. package/dist/providers/Auth/sessionActivity.spec.js +44 -0
  364. package/dist/providers/Auth/sessionActivity.spec.js.map +1 -0
  365. package/dist/providers/Auth/sessionTiming.d.ts +11 -0
  366. package/dist/providers/Auth/sessionTiming.d.ts.map +1 -0
  367. package/dist/providers/Auth/sessionTiming.js +18 -0
  368. package/dist/providers/Auth/sessionTiming.js.map +1 -0
  369. package/dist/providers/Auth/tabSessionSync/index.d.ts +17 -0
  370. package/dist/providers/Auth/tabSessionSync/index.d.ts.map +1 -0
  371. package/dist/providers/Auth/tabSessionSync/index.js +263 -0
  372. package/dist/providers/Auth/tabSessionSync/index.js.map +1 -0
  373. package/dist/providers/Auth/tabSessionSync/index.spec.js +463 -0
  374. package/dist/providers/Auth/tabSessionSync/index.spec.js.map +1 -0
  375. package/dist/providers/Auth/tabSessionSync/types.d.ts +107 -0
  376. package/dist/providers/Auth/tabSessionSync/types.d.ts.map +1 -0
  377. package/dist/providers/Auth/tabSessionSync/types.js +6 -0
  378. package/dist/providers/Auth/tabSessionSync/types.js.map +1 -0
  379. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.d.ts +11 -0
  380. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.d.ts.map +1 -0
  381. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.js +90 -0
  382. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.js.map +1 -0
  383. package/dist/providers/Auth/tabSessionSync/utilities.d.ts +26 -0
  384. package/dist/providers/Auth/tabSessionSync/utilities.d.ts.map +1 -0
  385. package/dist/providers/Auth/tabSessionSync/utilities.js +159 -0
  386. package/dist/providers/Auth/tabSessionSync/utilities.js.map +1 -0
  387. package/dist/providers/Auth/types.d.ts +65 -0
  388. package/dist/providers/Auth/types.d.ts.map +1 -0
  389. package/dist/providers/Auth/types.js +2 -0
  390. package/dist/providers/Auth/types.js.map +1 -0
  391. package/dist/providers/Auth/useAuthSessionTimers.d.ts +26 -0
  392. package/dist/providers/Auth/useAuthSessionTimers.d.ts.map +1 -0
  393. package/dist/providers/Auth/useAuthSessionTimers.js +203 -0
  394. package/dist/providers/Auth/useAuthSessionTimers.js.map +1 -0
  395. package/dist/providers/Auth/useAuthSessionTimers.spec.js +311 -0
  396. package/dist/providers/Auth/useAuthSessionTimers.spec.js.map +1 -0
  397. package/dist/providers/FormErrorHandler/index.d.ts +5 -1
  398. package/dist/providers/FormErrorHandler/index.d.ts.map +1 -1
  399. package/dist/providers/FormErrorHandler/index.js.map +1 -1
  400. package/dist/providers/Hierarchy/index.d.ts.map +1 -1
  401. package/dist/providers/Hierarchy/index.js +53 -24
  402. package/dist/providers/Hierarchy/index.js.map +1 -1
  403. package/dist/providers/Hierarchy/types.d.ts +2 -0
  404. package/dist/providers/Hierarchy/types.d.ts.map +1 -1
  405. package/dist/providers/Hierarchy/types.js.map +1 -1
  406. package/dist/providers/HierarchyDnd/index.css +51 -0
  407. package/dist/providers/HierarchyDnd/index.d.ts +21 -0
  408. package/dist/providers/HierarchyDnd/index.d.ts.map +1 -0
  409. package/dist/providers/HierarchyDnd/index.js +163 -0
  410. package/dist/providers/HierarchyDnd/index.js.map +1 -0
  411. package/dist/providers/HierarchyDnd/types.d.ts +56 -0
  412. package/dist/providers/HierarchyDnd/types.d.ts.map +1 -0
  413. package/dist/providers/HierarchyDnd/types.js +21 -0
  414. package/dist/providers/HierarchyDnd/types.js.map +1 -0
  415. package/dist/providers/Locale/index.d.ts.map +1 -1
  416. package/dist/providers/Locale/index.js +41 -36
  417. package/dist/providers/Locale/index.js.map +1 -1
  418. package/dist/providers/Root/index.js +4 -4
  419. package/dist/providers/Root/index.js.map +1 -1
  420. package/dist/providers/RouteTransition/ProgressBar/index.js +4 -1
  421. package/dist/providers/RouteTransition/ProgressBar/index.js.map +1 -1
  422. package/dist/providers/RouteTransition/ProgressBar/index.spec.js +44 -0
  423. package/dist/providers/RouteTransition/ProgressBar/index.spec.js.map +1 -0
  424. package/dist/providers/RouteTransition/index.d.ts +2 -0
  425. package/dist/providers/RouteTransition/index.d.ts.map +1 -1
  426. package/dist/providers/RouteTransition/index.js +42 -14
  427. package/dist/providers/RouteTransition/index.js.map +1 -1
  428. package/dist/styles.css +1 -1
  429. package/dist/templates/Default/Wrapper/index.css +2 -1
  430. package/dist/templates/Default/Wrapper/index.d.ts +2 -0
  431. package/dist/templates/Default/Wrapper/index.d.ts.map +1 -1
  432. package/dist/templates/Default/Wrapper/index.js +12 -6
  433. package/dist/templates/Default/Wrapper/index.js.map +1 -1
  434. package/dist/templates/Default/index.css +3 -1
  435. package/dist/templates/Default/index.d.ts +1 -0
  436. package/dist/templates/Default/index.d.ts.map +1 -1
  437. package/dist/templates/Default/index.js +19 -15
  438. package/dist/templates/Default/index.js.map +1 -1
  439. package/dist/utilities/formatMetadata.d.ts.map +1 -1
  440. package/dist/utilities/formatMetadata.js +0 -5
  441. package/dist/utilities/formatMetadata.js.map +1 -1
  442. package/dist/utilities/getFilesFromClipboard.d.ts +10 -0
  443. package/dist/utilities/getFilesFromClipboard.d.ts.map +1 -0
  444. package/dist/utilities/getFilesFromClipboard.js +49 -0
  445. package/dist/utilities/getFilesFromClipboard.js.map +1 -0
  446. package/dist/utilities/slugify.d.ts.map +1 -1
  447. package/dist/utilities/slugify.js +1 -0
  448. package/dist/utilities/slugify.js.map +1 -1
  449. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.d.ts.map +1 -1
  450. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js +3 -2
  451. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js.map +1 -1
  452. package/dist/views/Dashboard/Default/ModularDashboard/WidgetEditControl.d.ts.map +1 -1
  453. package/dist/views/Dashboard/Default/ModularDashboard/WidgetEditControl.js +7 -7
  454. package/dist/views/Dashboard/Default/ModularDashboard/WidgetEditControl.js.map +1 -1
  455. package/dist/views/Dashboard/Default/ModularDashboard/index.client.d.ts.map +1 -1
  456. package/dist/views/Dashboard/Default/ModularDashboard/index.client.js +104 -66
  457. package/dist/views/Dashboard/Default/ModularDashboard/index.client.js.map +1 -1
  458. package/dist/views/Dashboard/Default/ModularDashboard/index.css +33 -140
  459. package/dist/views/Edit/SetDocumentTitle/index.d.ts.map +1 -1
  460. package/dist/views/Edit/SetDocumentTitle/index.js +4 -1
  461. package/dist/views/Edit/SetDocumentTitle/index.js.map +1 -1
  462. package/dist/views/Edit/index.d.ts.map +1 -1
  463. package/dist/views/Edit/index.js +3 -2
  464. package/dist/views/Edit/index.js.map +1 -1
  465. package/dist/views/HierarchyList/DocumentListSelection/index.d.ts.map +1 -1
  466. package/dist/views/HierarchyList/DocumentListSelection/index.js +100 -105
  467. package/dist/views/HierarchyList/DocumentListSelection/index.js.map +1 -1
  468. package/dist/views/HierarchyList/HierarchyCards/DocumentCard/index.css +216 -0
  469. package/dist/views/HierarchyList/HierarchyCards/DocumentCard/index.d.ts +20 -0
  470. package/dist/views/HierarchyList/HierarchyCards/DocumentCard/index.d.ts.map +1 -0
  471. package/dist/views/HierarchyList/HierarchyCards/DocumentCard/index.js +182 -0
  472. package/dist/views/HierarchyList/HierarchyCards/DocumentCard/index.js.map +1 -0
  473. package/dist/views/HierarchyList/HierarchyCards/DragPreviewItem/index.css +38 -0
  474. package/dist/views/HierarchyList/HierarchyCards/DragPreviewItem/index.d.ts +15 -0
  475. package/dist/views/HierarchyList/HierarchyCards/DragPreviewItem/index.d.ts.map +1 -0
  476. package/dist/views/HierarchyList/HierarchyCards/DragPreviewItem/index.js +85 -0
  477. package/dist/views/HierarchyList/HierarchyCards/DragPreviewItem/index.js.map +1 -0
  478. package/dist/views/HierarchyList/HierarchyCards/FolderCard/index.css +98 -0
  479. package/dist/views/HierarchyList/HierarchyCards/FolderCard/index.d.ts +27 -0
  480. package/dist/views/HierarchyList/HierarchyCards/FolderCard/index.d.ts.map +1 -0
  481. package/dist/views/HierarchyList/HierarchyCards/FolderCard/index.js +84 -0
  482. package/dist/views/HierarchyList/HierarchyCards/FolderCard/index.js.map +1 -0
  483. package/dist/views/HierarchyList/HierarchyCards/HierarchyCard/index.d.ts +19 -0
  484. package/dist/views/HierarchyList/HierarchyCards/HierarchyCard/index.d.ts.map +1 -0
  485. package/dist/views/HierarchyList/HierarchyCards/HierarchyCard/index.js +100 -0
  486. package/dist/views/HierarchyList/HierarchyCards/HierarchyCard/index.js.map +1 -0
  487. package/dist/views/HierarchyList/HierarchyCards/PlaneItem/index.d.ts +53 -0
  488. package/dist/views/HierarchyList/HierarchyCards/PlaneItem/index.d.ts.map +1 -0
  489. package/dist/views/HierarchyList/HierarchyCards/PlaneItem/index.js +145 -0
  490. package/dist/views/HierarchyList/HierarchyCards/PlaneItem/index.js.map +1 -0
  491. package/dist/views/HierarchyList/HierarchyCards/getThumbnailSrc.d.ts +8 -0
  492. package/dist/views/HierarchyList/HierarchyCards/getThumbnailSrc.d.ts.map +1 -0
  493. package/dist/views/HierarchyList/HierarchyCards/getThumbnailSrc.js +21 -0
  494. package/dist/views/HierarchyList/HierarchyCards/getThumbnailSrc.js.map +1 -0
  495. package/dist/views/HierarchyList/HierarchyCards/index.css +115 -0
  496. package/dist/views/HierarchyList/HierarchyCards/index.d.ts +80 -0
  497. package/dist/views/HierarchyList/HierarchyCards/index.d.ts.map +1 -0
  498. package/dist/views/HierarchyList/HierarchyCards/index.js +457 -0
  499. package/dist/views/HierarchyList/HierarchyCards/index.js.map +1 -0
  500. package/dist/views/HierarchyList/HierarchyListHeader/index.d.ts +6 -1
  501. package/dist/views/HierarchyList/HierarchyListHeader/index.d.ts.map +1 -1
  502. package/dist/views/HierarchyList/HierarchyListHeader/index.js +10 -8
  503. package/dist/views/HierarchyList/HierarchyListHeader/index.js.map +1 -1
  504. package/dist/views/HierarchyList/HierarchyTable/ChildNameCell.d.ts.map +1 -1
  505. package/dist/views/HierarchyList/HierarchyTable/ChildNameCell.js +11 -10
  506. package/dist/views/HierarchyList/HierarchyTable/ChildNameCell.js.map +1 -1
  507. package/dist/views/HierarchyList/HierarchyTable/SlotTable.d.ts.map +1 -1
  508. package/dist/views/HierarchyList/HierarchyTable/SlotTable.js +3 -6
  509. package/dist/views/HierarchyList/HierarchyTable/SlotTable.js.map +1 -1
  510. package/dist/views/HierarchyList/HierarchyTable/index.css +51 -0
  511. package/dist/views/HierarchyList/HierarchyTable/index.d.ts +13 -1
  512. package/dist/views/HierarchyList/HierarchyTable/index.d.ts.map +1 -1
  513. package/dist/views/HierarchyList/HierarchyTable/index.js +156 -38
  514. package/dist/views/HierarchyList/HierarchyTable/index.js.map +1 -1
  515. package/dist/views/HierarchyList/HierarchyTable/types.d.ts +6 -0
  516. package/dist/views/HierarchyList/HierarchyTable/types.d.ts.map +1 -1
  517. package/dist/views/HierarchyList/HierarchyTable/types.js.map +1 -1
  518. package/dist/views/HierarchyList/index.d.ts.map +1 -1
  519. package/dist/views/HierarchyList/index.js +103 -20
  520. package/dist/views/HierarchyList/index.js.map +1 -1
  521. package/dist/views/List/ListHeader/index.d.ts +1 -10
  522. package/dist/views/List/ListHeader/index.d.ts.map +1 -1
  523. package/dist/views/List/ListHeader/index.js +1 -3
  524. package/dist/views/List/ListHeader/index.js.map +1 -1
  525. package/dist/views/List/ListSelection/index.d.ts.map +1 -1
  526. package/dist/views/List/ListSelection/index.js +138 -122
  527. package/dist/views/List/ListSelection/index.js.map +1 -1
  528. package/dist/views/List/handleHierarchy.d.ts +6 -1
  529. package/dist/views/List/handleHierarchy.d.ts.map +1 -1
  530. package/dist/views/List/handleHierarchy.js +34 -3
  531. package/dist/views/List/handleHierarchy.js.map +1 -1
  532. package/dist/views/List/index.client.d.ts.map +1 -1
  533. package/dist/views/List/index.client.js +128 -18
  534. package/dist/views/List/index.client.js.map +1 -1
  535. package/dist/views/List/index.css +5 -0
  536. package/dist/views/List/index.d.ts.map +1 -1
  537. package/dist/views/List/index.js +27 -16
  538. package/dist/views/List/index.js.map +1 -1
  539. package/dist/views/Root/getCustomCollectionViewByRoute.d.ts.map +1 -1
  540. package/dist/views/Root/getCustomCollectionViewByRoute.js.map +1 -1
  541. package/dist/views/Root/getCustomGlobalViewByRoute.d.ts.map +1 -1
  542. package/dist/views/Root/getCustomGlobalViewByRoute.js.map +1 -1
  543. package/dist/views/Root/getCustomViewByKey.d.ts.map +1 -1
  544. package/dist/views/Root/getCustomViewByKey.js.map +1 -1
  545. package/dist/views/Root/getRouteData.d.ts.map +1 -1
  546. package/dist/views/Root/getRouteData.js +8 -2
  547. package/dist/views/Root/getRouteData.js.map +1 -1
  548. package/dist/views/Root/index.d.ts.map +1 -1
  549. package/dist/views/Root/index.js +1 -0
  550. package/dist/views/Root/index.js.map +1 -1
  551. package/dist/views/Version/generateVersionViewMetadata.js.map +1 -1
  552. package/dist/views/Versions/generateVersionsViewMetadata.js.map +1 -1
  553. package/package.json +4 -4
  554. package/dist/elements/Hierarchy/Field/SelectedHierarchies.css +0 -36
  555. package/dist/elements/Hierarchy/Field/SelectedHierarchies.d.ts +0 -13
  556. package/dist/elements/Hierarchy/Field/SelectedHierarchies.d.ts.map +0 -1
  557. package/dist/elements/Hierarchy/Field/SelectedHierarchies.js +0 -141
  558. package/dist/elements/Hierarchy/Field/SelectedHierarchies.js.map +0 -1
@@ -2,49 +2,66 @@
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
-
12
5
  &:focus-visible {
13
6
  outline: none;
14
7
  }
15
8
  }
16
9
 
17
- .tree-node:focus-visible > .tree-node__content-wrapper > .tree-node__content {
10
+ .tree-node:focus-visible > .tree-node__content-wrapper > .tree-node__content::before {
18
11
  outline: var(--accessibility-outline);
19
12
  outline-offset: var(--accessibility-outline-offset);
20
13
  }
21
14
 
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
-
29
15
  .tree-node__content {
16
+ position: relative;
17
+ isolation: isolate;
30
18
  display: flex;
31
19
  align-items: center;
20
+ height: var(--spacer-5);
21
+ font-family: var(--text-body-medium-font-family);
32
22
  font-size: var(--tree-font-size);
23
+ font-weight: var(--text-body-medium-font-weight);
33
24
  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
+ }
34
48
  }
35
49
 
36
50
  .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);
37
56
  background: none;
38
57
  border: none;
39
- padding-block: var(--spacer-1);
40
- padding-inline-start: var(--spacer-1);
58
+ padding: 0;
41
59
  margin: 0;
42
60
  display: flex;
43
61
  align-items: center;
44
62
  justify-content: center;
45
63
  cursor: default;
46
64
  color: var(--color-icon-tertiary);
47
- flex-shrink: 0;
48
65
  border-radius: var(--button-radius);
49
66
 
50
67
  &:hover {
@@ -53,35 +70,48 @@
53
70
  }
54
71
 
55
72
  .tree-node__node-trigger {
73
+ position: absolute;
74
+ inset: 0;
56
75
  border: none;
57
76
  background: none;
58
77
  margin: 0;
59
- padding: 0;
60
78
  color: inherit;
61
79
  font: inherit;
80
+ text-align: left;
81
+ cursor: pointer;
62
82
  min-width: 0;
63
- flex: 1;
64
83
  display: flex;
65
84
  align-items: center;
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);
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);
71
91
  }
72
92
 
73
93
  .tree-node__title {
74
94
  padding-left: 0;
75
- margin-left: var(--spacer-1);
76
95
  }
77
96
 
78
97
  .tree-node__loading {
79
- margin-left: auto;
98
+ position: relative;
99
+ z-index: 1;
100
+ margin-inline: auto var(--spacer-3);
80
101
  display: inline-flex;
81
102
  align-items: center;
82
103
  }
83
104
 
84
- .tree-node__children {
85
- /* Children are rendered with depth variable set */
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;
86
116
  }
87
117
  }
@@ -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, baseFilter, cache, collectionSlug, depth, expandedNodes, filterByCollections, icon, limit, node, onSelect, onToggle, parentFieldName, selected, selectedNodeId, typeFieldName, useAsTitle, }: TreeNodeProps) => React.JSX.Element;
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;
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":"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
+ {"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,15 +1,22 @@
1
1
  'use client';
2
2
 
3
3
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
4
- import React, { useCallback, useRef } from 'react';
4
+ import { useDroppable } from '@dnd-kit/core';
5
+ import React, { useCallback, useEffect, useMemo, useRef } from 'react';
5
6
  import { Spinner } from '../../../../elements/Spinner/index.js';
6
7
  import { ChevronIcon } from '../../../../icons/Chevron/index.js';
8
+ import { useHierarchyDnd } from '../../../../providers/HierarchyDnd/index.js';
7
9
  import { useTranslation } from '../../../../providers/Translation/index.js';
8
10
  import { LoadMore } from '../LoadMore/index.js';
9
11
  import { useFocusableItem, useTreeFocus } from '../TreeFocusContext.js';
10
12
  import { useChildren } from '../useChildren.js';
11
13
  import './index.css';
12
14
  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;
13
20
  const baseClass = 'tree-node';
14
21
  const getDocumentTitle = (doc, useAsTitle) => {
15
22
  const docId = doc.id;
@@ -25,13 +32,14 @@ const getDocumentTitle = (doc, useAsTitle) => {
25
32
  };
26
33
  export const TreeNode = ({
27
34
  allPossibleTypeValues,
35
+ ancestorIds,
28
36
  baseFilter,
29
37
  cache,
30
38
  collectionSlug,
31
39
  depth = 0,
40
+ dropParentFieldName,
32
41
  expandedNodes,
33
42
  filterByCollections,
34
- icon,
35
43
  limit = DEFAULT_TREE_LIMIT,
36
44
  node,
37
45
  onSelect,
@@ -100,11 +108,48 @@ export const TreeNode = ({
100
108
  id: node.id
101
109
  });
102
110
  }, [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;
103
135
  const handleSelectClick = useCallback(() => {
104
136
  onSelect?.({
105
137
  id: node.id
106
138
  });
107
139
  }, [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]);
108
153
  const handleKeyDown = useCallback(e_0 => {
109
154
  if (e_0.target !== e_0.currentTarget) {
110
155
  return;
@@ -154,7 +199,8 @@ export const TreeNode = ({
154
199
  children: [/*#__PURE__*/_jsx("div", {
155
200
  className: `${baseClass}__content-wrapper`,
156
201
  children: /*#__PURE__*/_jsxs("div", {
157
- className: [`${baseClass}__content`, 'sidebar-row', selected && `${baseClass}__content--selected`, selected && 'sidebar-row--selected'].filter(Boolean).join(' '),
202
+ className: [`${baseClass}__content`, selected && `${baseClass}__content--selected`, dropState && `${baseClass}__content--drop-${dropState}`].filter(Boolean).join(' '),
203
+ ref: setDropRef,
158
204
  children: [hasChildren && /*#__PURE__*/_jsx("button", {
159
205
  "aria-label": expanded ? t('general:collapse') : t('general:open'),
160
206
  className: `${baseClass}__toggle`,
@@ -166,20 +212,17 @@ export const TreeNode = ({
166
212
  direction: expanded ? 'down' : 'right',
167
213
  size: 16
168
214
  })
169
- }), /*#__PURE__*/_jsxs("button", {
215
+ }), /*#__PURE__*/_jsx("button", {
170
216
  className: [`${baseClass}__node-trigger`, selected && `${baseClass}__node-trigger--selected`].filter(Boolean).join(' '),
171
217
  onClick: handleSelectClick,
172
218
  onMouseDown: e_3 => e_3.preventDefault(),
173
219
  tabIndex: -1,
174
220
  title: node.title,
175
221
  type: "button",
176
- children: [Boolean(icon) && /*#__PURE__*/_jsx("span", {
177
- className: "sidebar-row__icon",
178
- children: icon
179
- }), /*#__PURE__*/_jsx("span", {
222
+ children: /*#__PURE__*/_jsx("span", {
180
223
  className: `${baseClass}__title sidebar-row__title`,
181
224
  children: node.title
182
- })]
225
+ })
183
226
  }), isLoading && expanded && /*#__PURE__*/_jsx("span", {
184
227
  className: `${baseClass}__loading`,
185
228
  children: /*#__PURE__*/_jsx(Spinner, {
@@ -198,13 +241,14 @@ export const TreeNode = ({
198
241
  const childTitle = getDocumentTitle(child, useAsTitle);
199
242
  return /*#__PURE__*/_jsx(TreeNode, {
200
243
  allPossibleTypeValues: allPossibleTypeValues,
244
+ ancestorIds: childAncestorIds,
201
245
  baseFilter: baseFilter,
202
246
  cache: cache,
203
247
  collectionSlug: collectionSlug,
204
248
  depth: depth + 1,
249
+ dropParentFieldName: dropParentFieldName,
205
250
  expandedNodes: expandedNodes,
206
251
  filterByCollections: filterByCollections,
207
- icon: icon,
208
252
  limit: limit,
209
253
  node: {
210
254
  id: childId,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["React","useCallback","useRef","Spinner","ChevronIcon","useTranslation","LoadMore","useFocusableItem","useTreeFocus","useChildren","DEFAULT_TREE_LIMIT","baseClass","getDocumentTitle","doc","useAsTitle","docId","id","idStr","String","value","TreeNode","allPossibleTypeValues","baseFilter","cache","collectionSlug","depth","expandedNodes","filterByCollections","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":[]}
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":[]}
@@ -3,29 +3,29 @@
3
3
  .hierarchy-sidebar-tab {
4
4
  display: flex;
5
5
  flex-direction: column;
6
- gap: var(--spacer-2);
7
6
  }
8
7
 
9
8
  .tree {
10
9
  --tree-indent: var(--spacer-3);
11
10
  --tree-chevron-width: var(--spacer-3);
12
- --tree-chevron-spacing: var(--spacer-2);
11
+ --tree-chevron-spacing: var(--spacer-1);
13
12
  --tree-node-content-height: var(--text-body-medium-line-height);
14
13
  --tree-row-gap: var(--spacer-1);
15
14
  --tree-font-size: var(--text-body-medium-font-size);
16
15
 
17
- padding: 0;
16
+ padding: var(--spacer-1) 0;
18
17
  margin: 0;
19
18
  }
20
19
 
21
20
  .tree__all-option-wrapper {
22
21
  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: 1fr auto;
24
+ grid-template-columns: auto auto;
25
25
  align-items: center;
26
- margin-bottom: var(--spacer-2);
26
+ justify-content: space-between;
27
27
 
28
- .tree__create-button {
28
+ .tree__collapse-all-button {
29
29
  padding: 0;
30
30
 
31
31
  &:hover {
@@ -35,9 +35,8 @@
35
35
  }
36
36
 
37
37
  .tree__all-option {
38
- gap: var(--spacer-1);
39
- padding-left: var(--spacer-2);
40
- padding-block: var(--spacer-1);
38
+ gap: 0;
39
+ padding-inline-end: var(--spacer-2);
41
40
 
42
41
  .sidebar-row__title {
43
42
  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":"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
+ {"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,12 +1,10 @@
1
1
  'use client';
2
2
 
3
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
4
- import { useModal } from '@faceless-ui/modal';
3
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
4
  import { getTranslation } from '@payloadcms/translations';
6
5
  import { DEFAULT_HIERARCHY_TREE_LIMIT } from 'payload/shared';
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';
6
+ import React, { useCallback, useId, useMemo, useRef } from 'react';
7
+ import { CollapseLayersIcon } from '../../../icons/CollapseLayers/index.js';
10
8
  import { useConfig } from '../../../providers/Config/index.js';
11
9
  import { useHierarchy } from '../../../providers/Hierarchy/index.js';
12
10
  import { useRouter } from '../../../providers/RouterAdapter/index.js';
@@ -14,13 +12,14 @@ import { useTranslation } from '../../../providers/Translation/index.js';
14
12
  import { Button } from '../../Button/index.js';
15
13
  import { CreateDocumentButton } from '../../CreateDocumentButton/index.js';
16
14
  import { DelayedSpinner } from '../../DelayedSpinner/index.js';
17
- import { DocumentDrawer } from '../../DocumentDrawer/index.js';
18
15
  import { LoadMore } from './LoadMore/index.js';
19
16
  import { TreeFocusProvider, useTreeFocus } from './TreeFocusContext.js';
20
17
  import { TreeNode } from './TreeNode/index.js';
21
18
  import { useChildren } from './useChildren.js';
22
19
  import './index.css';
23
20
  const baseClass = 'tree';
21
+ /** Root nodes have no ancestors; hoisted so the reference stays stable across renders. */
22
+ const ROOT_ANCESTOR_IDS = [];
24
23
  const getDocumentTitle = (doc, useAsTitle) => {
25
24
  const docId = doc.id;
26
25
  const idStr = typeof docId === 'number' ? String(docId) : docId;
@@ -54,19 +53,12 @@ const HierarchyTreeInner = ({
54
53
  i18n,
55
54
  t
56
55
  } = useTranslation();
57
- const {
58
- permissions
59
- } = useAuth();
60
56
  const {
61
57
  getEntityConfig
62
58
  } = useConfig();
63
- const {
64
- closeModal,
65
- openModal
66
- } = useModal();
67
59
  const createDrawerSlug = `tree-create-${useId()}`;
68
- const [isCreateDrawerOpen, setIsCreateDrawerOpen] = useState(false);
69
60
  const {
61
+ collapseAllForCollection,
70
62
  getExpandedNodesForCollection,
71
63
  getTreeDataForCollection,
72
64
  toggleNodeForCollection,
@@ -79,7 +71,6 @@ const HierarchyTreeInner = ({
79
71
  const parentFieldName = hierarchyConfig?.parentFieldName;
80
72
  const treeLimit = hierarchyConfig?.admin?.treeLimit ?? DEFAULT_HIERARCHY_TREE_LIMIT;
81
73
  const useAsTitle = useAsTitleProp ?? collectionConfig.admin?.useAsTitle;
82
- const canCreate = Boolean(permissions?.collections?.[collectionSlug]?.create);
83
74
  const allPossibleTypeValues = useMemo(() => hierarchyConfig?.relatedCollections ? Object.keys(hierarchyConfig.relatedCollections) : undefined, [hierarchyConfig?.relatedCollections]);
84
75
  const contextData = getTreeDataForCollection(collectionSlug);
85
76
  const baseFilterKey = baseFilter ? JSON.stringify(baseFilter) : '';
@@ -132,6 +123,12 @@ const HierarchyTreeInner = ({
132
123
  }
133
124
  toggleNodeForCollection(collectionSlug, id);
134
125
  }, [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]);
135
132
  // Pre-populate cache with initialData synchronously before first render
136
133
  const childrenCache = useRef(new Map());
137
134
  const prevBaseFilterKeyRef = useRef(baseFilterKey);
@@ -269,7 +266,7 @@ const HierarchyTreeInner = ({
269
266
  tabIndex: -1,
270
267
  children: [/*#__PURE__*/_jsxs("div", {
271
268
  className: `${baseClass}__all-option-wrapper`,
272
- children: [/*#__PURE__*/_jsx("div", {
269
+ children: [/*#__PURE__*/_jsxs("div", {
273
270
  "aria-selected": isAllSelected,
274
271
  className: [`${baseClass}__all-option`, 'sidebar-row', isAllSelected && `${baseClass}__all-option--selected`, isAllSelected && 'sidebar-row--selected'].filter(Boolean).join(' '),
275
272
  onClick: handleAllClick,
@@ -281,39 +278,23 @@ const HierarchyTreeInner = ({
281
278
  },
282
279
  role: "treeitem",
283
280
  tabIndex: 0,
284
- children: /*#__PURE__*/_jsxs("span", {
281
+ children: [Boolean(icon) && /*#__PURE__*/_jsx("span", {
282
+ className: "sidebar-row__icon",
283
+ children: icon
284
+ }), /*#__PURE__*/_jsx("span", {
285
285
  className: "sidebar-row__title",
286
- children: [t('general:all'), ' ', getTranslation(getEntityConfig({
286
+ children: getTranslation(getEntityConfig({
287
287
  collectionSlug
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
288
+ })?.labels?.plural, i18n)
316
289
  })]
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, {})
317
298
  })]
318
299
  }), rootNodes.map(node_0 => {
319
300
  const nodeId_0 = node_0.id;
@@ -321,13 +302,14 @@ const HierarchyTreeInner = ({
321
302
  const nodeTitle = getDocumentTitle(node_0, useAsTitle);
322
303
  return /*#__PURE__*/_jsx(TreeNode, {
323
304
  allPossibleTypeValues: allPossibleTypeValues,
305
+ ancestorIds: ROOT_ANCESTOR_IDS,
324
306
  baseFilter: baseFilter,
325
307
  cache: childrenCache,
326
308
  collectionSlug: collectionSlug,
327
309
  depth: 0,
310
+ dropParentFieldName: parentFieldName,
328
311
  expandedNodes: expandedNodes,
329
312
  filterByCollections: filterByCollections,
330
- icon: icon,
331
313
  limit: treeLimit,
332
314
  node: {
333
315
  id: nodeId_0,