@strapi/upload 5.59.0 → 5.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. package/dist/admin/components/AssetPickerDialog/AssetPickerDialog.js +434 -0
  2. package/dist/admin/components/AssetPickerDialog/AssetPickerDialog.js.map +1 -0
  3. package/dist/admin/components/AssetPickerDialog/AssetPickerDialog.mjs +432 -0
  4. package/dist/admin/components/AssetPickerDialog/AssetPickerDialog.mjs.map +1 -0
  5. package/dist/admin/components/AssetPickerDialog/FolderBreadcrumbs.js +91 -0
  6. package/dist/admin/components/AssetPickerDialog/FolderBreadcrumbs.js.map +1 -0
  7. package/dist/admin/components/AssetPickerDialog/FolderBreadcrumbs.mjs +89 -0
  8. package/dist/admin/components/AssetPickerDialog/FolderBreadcrumbs.mjs.map +1 -0
  9. package/dist/admin/components/AssetPickerDialog/MediaLibraryPickerDialog.js +29 -0
  10. package/dist/admin/components/AssetPickerDialog/MediaLibraryPickerDialog.js.map +1 -0
  11. package/dist/admin/components/AssetPickerDialog/MediaLibraryPickerDialog.mjs +27 -0
  12. package/dist/admin/components/AssetPickerDialog/MediaLibraryPickerDialog.mjs.map +1 -0
  13. package/dist/admin/components/AssetPickerDialog/PickerSelectionProvider.js +178 -0
  14. package/dist/admin/components/AssetPickerDialog/PickerSelectionProvider.js.map +1 -0
  15. package/dist/admin/components/AssetPickerDialog/PickerSelectionProvider.mjs +175 -0
  16. package/dist/admin/components/AssetPickerDialog/PickerSelectionProvider.mjs.map +1 -0
  17. package/dist/admin/components/AssetPickerDialog/SortableSelection.js +143 -0
  18. package/dist/admin/components/AssetPickerDialog/SortableSelection.js.map +1 -0
  19. package/dist/admin/components/AssetPickerDialog/SortableSelection.mjs +141 -0
  20. package/dist/admin/components/AssetPickerDialog/SortableSelection.mjs.map +1 -0
  21. package/dist/admin/components/AssetPickerDialog/pickerSelection.js +49 -0
  22. package/dist/admin/components/AssetPickerDialog/pickerSelection.js.map +1 -0
  23. package/dist/admin/components/AssetPickerDialog/pickerSelection.mjs +41 -0
  24. package/dist/admin/components/AssetPickerDialog/pickerSelection.mjs.map +1 -0
  25. package/dist/admin/components/Drawer.js +12 -7
  26. package/dist/admin/components/Drawer.js.map +1 -1
  27. package/dist/admin/components/Drawer.mjs +12 -7
  28. package/dist/admin/components/Drawer.mjs.map +1 -1
  29. package/dist/admin/components/EditorFileDropZone/EditorFileDropZone.js +188 -0
  30. package/dist/admin/components/EditorFileDropZone/EditorFileDropZone.js.map +1 -0
  31. package/dist/admin/components/EditorFileDropZone/EditorFileDropZone.mjs +186 -0
  32. package/dist/admin/components/EditorFileDropZone/EditorFileDropZone.mjs.map +1 -0
  33. package/dist/admin/components/MediaLibraryInput/AddAssetMenu.js +9 -4
  34. package/dist/admin/components/MediaLibraryInput/AddAssetMenu.js.map +1 -1
  35. package/dist/admin/components/MediaLibraryInput/AddAssetMenu.mjs +9 -4
  36. package/dist/admin/components/MediaLibraryInput/AddAssetMenu.mjs.map +1 -1
  37. package/dist/admin/components/MediaLibraryInput/AssetCard.js +240 -0
  38. package/dist/admin/components/MediaLibraryInput/AssetCard.js.map +1 -0
  39. package/dist/admin/components/MediaLibraryInput/AssetCard.mjs +237 -0
  40. package/dist/admin/components/MediaLibraryInput/AssetCard.mjs.map +1 -0
  41. package/dist/admin/components/MediaLibraryInput/AssetCarousel.js +161 -0
  42. package/dist/admin/components/MediaLibraryInput/AssetCarousel.js.map +1 -0
  43. package/dist/admin/components/MediaLibraryInput/AssetCarousel.mjs +159 -0
  44. package/dist/admin/components/MediaLibraryInput/AssetCarousel.mjs.map +1 -0
  45. package/dist/admin/components/MediaLibraryInput/AssetDropZone.js +76 -49
  46. package/dist/admin/components/MediaLibraryInput/AssetDropZone.js.map +1 -1
  47. package/dist/admin/components/MediaLibraryInput/AssetDropZone.mjs +77 -50
  48. package/dist/admin/components/MediaLibraryInput/AssetDropZone.mjs.map +1 -1
  49. package/dist/admin/components/MediaLibraryInput/AssetPreview.js +109 -0
  50. package/dist/admin/components/MediaLibraryInput/AssetPreview.js.map +1 -0
  51. package/dist/admin/components/MediaLibraryInput/AssetPreview.mjs +106 -0
  52. package/dist/admin/components/MediaLibraryInput/AssetPreview.mjs.map +1 -0
  53. package/dist/admin/components/MediaLibraryInput/AssetRow.js +146 -79
  54. package/dist/admin/components/MediaLibraryInput/AssetRow.js.map +1 -1
  55. package/dist/admin/components/MediaLibraryInput/AssetRow.mjs +148 -82
  56. package/dist/admin/components/MediaLibraryInput/AssetRow.mjs.map +1 -1
  57. package/dist/admin/components/MediaLibraryInput/FieldControls.js +32 -0
  58. package/dist/admin/components/MediaLibraryInput/FieldControls.js.map +1 -0
  59. package/dist/admin/components/MediaLibraryInput/FieldControls.mjs +29 -0
  60. package/dist/admin/components/MediaLibraryInput/FieldControls.mjs.map +1 -0
  61. package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js +163 -111
  62. package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js.map +1 -1
  63. package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs +162 -114
  64. package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs.map +1 -1
  65. package/dist/admin/components/MediaLibraryInput/UploadProgressBar.js +42 -0
  66. package/dist/admin/components/MediaLibraryInput/UploadProgressBar.js.map +1 -0
  67. package/dist/admin/components/MediaLibraryInput/UploadProgressBar.mjs +40 -0
  68. package/dist/admin/components/MediaLibraryInput/UploadProgressBar.mjs.map +1 -0
  69. package/dist/admin/components/MediaLibraryInput/openAssetDetails.js +46 -0
  70. package/dist/admin/components/MediaLibraryInput/openAssetDetails.js.map +1 -0
  71. package/dist/admin/components/MediaLibraryInput/openAssetDetails.mjs +43 -0
  72. package/dist/admin/components/MediaLibraryInput/openAssetDetails.mjs.map +1 -0
  73. package/dist/admin/components/MediaLibraryInput/useFieldUploads.js +122 -0
  74. package/dist/admin/components/MediaLibraryInput/useFieldUploads.js.map +1 -0
  75. package/dist/admin/components/MediaLibraryInput/useFieldUploads.mjs +120 -0
  76. package/dist/admin/components/MediaLibraryInput/useFieldUploads.mjs.map +1 -0
  77. package/dist/admin/components/UploadProgressDialog.js +2 -1
  78. package/dist/admin/components/UploadProgressDialog.js.map +1 -1
  79. package/dist/admin/components/UploadProgressDialog.mjs +2 -1
  80. package/dist/admin/components/UploadProgressDialog.mjs.map +1 -1
  81. package/dist/admin/hooks/useMediaLibraryPermissions.js +12 -2
  82. package/dist/admin/hooks/useMediaLibraryPermissions.js.map +1 -1
  83. package/dist/admin/hooks/useMediaLibraryPermissions.mjs +12 -2
  84. package/dist/admin/hooks/useMediaLibraryPermissions.mjs.map +1 -1
  85. package/dist/admin/index.js +10 -1
  86. package/dist/admin/index.js.map +1 -1
  87. package/dist/admin/index.mjs +10 -1
  88. package/dist/admin/index.mjs.map +1 -1
  89. package/dist/admin/pages/Assets/AssetsPage.js +14 -303
  90. package/dist/admin/pages/Assets/AssetsPage.js.map +1 -1
  91. package/dist/admin/pages/Assets/AssetsPage.mjs +13 -282
  92. package/dist/admin/pages/Assets/AssetsPage.mjs.map +1 -1
  93. package/dist/admin/pages/Assets/components/AssetDetails/AssetCropEditor.mjs +2 -2
  94. package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js +181 -65
  95. package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js.map +1 -1
  96. package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs +184 -69
  97. package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs.map +1 -1
  98. package/dist/admin/pages/Assets/components/AssetDetails/AssetPreview.mjs +1 -1
  99. package/dist/admin/pages/Assets/components/AssetsGrid.js +142 -31
  100. package/dist/admin/pages/Assets/components/AssetsGrid.js.map +1 -1
  101. package/dist/admin/pages/Assets/components/AssetsGrid.mjs +145 -34
  102. package/dist/admin/pages/Assets/components/AssetsGrid.mjs.map +1 -1
  103. package/dist/admin/pages/Assets/components/AssetsSearchInput.js +43 -2
  104. package/dist/admin/pages/Assets/components/AssetsSearchInput.js.map +1 -1
  105. package/dist/admin/pages/Assets/components/AssetsSearchInput.mjs +45 -4
  106. package/dist/admin/pages/Assets/components/AssetsSearchInput.mjs.map +1 -1
  107. package/dist/admin/pages/Assets/components/AssetsTable.js +58 -34
  108. package/dist/admin/pages/Assets/components/AssetsTable.js.map +1 -1
  109. package/dist/admin/pages/Assets/components/AssetsTable.mjs +60 -36
  110. package/dist/admin/pages/Assets/components/AssetsTable.mjs.map +1 -1
  111. package/dist/admin/pages/Assets/components/AssetsView.js +145 -0
  112. package/dist/admin/pages/Assets/components/AssetsView.js.map +1 -0
  113. package/dist/admin/pages/Assets/components/AssetsView.mjs +143 -0
  114. package/dist/admin/pages/Assets/components/AssetsView.mjs.map +1 -0
  115. package/dist/admin/pages/Assets/components/BulkActionsBar.mjs +1 -1
  116. package/dist/admin/pages/Assets/components/BusyOverlay.mjs +1 -1
  117. package/dist/admin/pages/Assets/components/Dnd/DragOverlayChip.mjs +1 -1
  118. package/dist/admin/pages/Assets/components/Dnd/ReorderHandle.js +40 -0
  119. package/dist/admin/pages/Assets/components/Dnd/ReorderHandle.js.map +1 -0
  120. package/dist/admin/pages/Assets/components/Dnd/ReorderHandle.mjs +38 -0
  121. package/dist/admin/pages/Assets/components/Dnd/ReorderHandle.mjs.map +1 -0
  122. package/dist/admin/pages/Assets/components/Dnd/assetSortable.js +29 -0
  123. package/dist/admin/pages/Assets/components/Dnd/assetSortable.js.map +1 -0
  124. package/dist/admin/pages/Assets/components/Dnd/assetSortable.mjs +24 -0
  125. package/dist/admin/pages/Assets/components/Dnd/assetSortable.mjs.map +1 -0
  126. package/dist/admin/pages/Assets/components/Dnd/dndIds.js +5 -0
  127. package/dist/admin/pages/Assets/components/Dnd/dndIds.js.map +1 -1
  128. package/dist/admin/pages/Assets/components/Dnd/dndIds.mjs +5 -1
  129. package/dist/admin/pages/Assets/components/Dnd/dndIds.mjs.map +1 -1
  130. package/dist/admin/pages/Assets/components/Dnd/useAssetDnd.js +41 -13
  131. package/dist/admin/pages/Assets/components/Dnd/useAssetDnd.js.map +1 -1
  132. package/dist/admin/pages/Assets/components/Dnd/useAssetDnd.mjs +41 -13
  133. package/dist/admin/pages/Assets/components/Dnd/useAssetDnd.mjs.map +1 -1
  134. package/dist/admin/pages/Assets/components/FilterBadges.mjs +2 -2
  135. package/dist/admin/pages/Assets/components/FilterMenu.mjs +2 -2
  136. package/dist/admin/pages/Assets/components/FolderTree/FolderTree.js +274 -55
  137. package/dist/admin/pages/Assets/components/FolderTree/FolderTree.js.map +1 -1
  138. package/dist/admin/pages/Assets/components/FolderTree/FolderTree.mjs +277 -59
  139. package/dist/admin/pages/Assets/components/FolderTree/FolderTree.mjs.map +1 -1
  140. package/dist/admin/pages/Assets/components/FolderTree/collapsedBranch.js +32 -0
  141. package/dist/admin/pages/Assets/components/FolderTree/collapsedBranch.js.map +1 -0
  142. package/dist/admin/pages/Assets/components/FolderTree/collapsedBranch.mjs +29 -0
  143. package/dist/admin/pages/Assets/components/FolderTree/collapsedBranch.mjs.map +1 -0
  144. package/dist/admin/pages/Assets/components/ViewToggle.js +126 -0
  145. package/dist/admin/pages/Assets/components/ViewToggle.js.map +1 -0
  146. package/dist/admin/pages/Assets/components/ViewToggle.mjs +104 -0
  147. package/dist/admin/pages/Assets/components/ViewToggle.mjs.map +1 -0
  148. package/dist/admin/pages/Assets/hooks/useAssetSearch.js +2 -2
  149. package/dist/admin/pages/Assets/hooks/useAssetSearch.js.map +1 -1
  150. package/dist/admin/pages/Assets/hooks/useAssetSearch.mjs +2 -2
  151. package/dist/admin/pages/Assets/hooks/useAssetSearch.mjs.map +1 -1
  152. package/dist/admin/pages/Assets/hooks/useAssetSelection.js +19 -1
  153. package/dist/admin/pages/Assets/hooks/useAssetSelection.js.map +1 -1
  154. package/dist/admin/pages/Assets/hooks/useAssetSelection.mjs +20 -3
  155. package/dist/admin/pages/Assets/hooks/useAssetSelection.mjs.map +1 -1
  156. package/dist/admin/pages/Assets/hooks/useAssetsList.js +87 -0
  157. package/dist/admin/pages/Assets/hooks/useAssetsList.js.map +1 -0
  158. package/dist/admin/pages/Assets/hooks/useAssetsList.mjs +85 -0
  159. package/dist/admin/pages/Assets/hooks/useAssetsList.mjs.map +1 -0
  160. package/dist/admin/pages/Assets/hooks/useBusyAssets.mjs +1 -1
  161. package/dist/admin/pages/Assets/hooks/useFolderNavigation.js +2 -1
  162. package/dist/admin/pages/Assets/hooks/useFolderNavigation.js.map +1 -1
  163. package/dist/admin/pages/Assets/hooks/useFolderNavigation.mjs +3 -2
  164. package/dist/admin/pages/Assets/hooks/useFolderNavigation.mjs.map +1 -1
  165. package/dist/admin/pages/Assets/hooks/useIsAssetDetailsOpen.js +2 -6
  166. package/dist/admin/pages/Assets/hooks/useIsAssetDetailsOpen.js.map +1 -1
  167. package/dist/admin/pages/Assets/hooks/useIsAssetDetailsOpen.mjs +2 -6
  168. package/dist/admin/pages/Assets/hooks/useIsAssetDetailsOpen.mjs.map +1 -1
  169. package/dist/admin/pages/Assets/hooks/useListFilters.js +2 -1
  170. package/dist/admin/pages/Assets/hooks/useListFilters.js.map +1 -1
  171. package/dist/admin/pages/Assets/hooks/useListFilters.mjs +3 -2
  172. package/dist/admin/pages/Assets/hooks/useListFilters.mjs.map +1 -1
  173. package/dist/admin/pages/Assets/hooks/useListQueryParams.js +80 -0
  174. package/dist/admin/pages/Assets/hooks/useListQueryParams.js.map +1 -0
  175. package/dist/admin/pages/Assets/hooks/useListQueryParams.mjs +77 -0
  176. package/dist/admin/pages/Assets/hooks/useListQueryParams.mjs.map +1 -0
  177. package/dist/admin/pages/Assets/hooks/useListSettings.js +32 -0
  178. package/dist/admin/pages/Assets/hooks/useListSettings.js.map +1 -0
  179. package/dist/admin/pages/Assets/hooks/useListSettings.mjs +29 -0
  180. package/dist/admin/pages/Assets/hooks/useListSettings.mjs.map +1 -0
  181. package/dist/admin/pages/Assets/hooks/useListSort.js +2 -1
  182. package/dist/admin/pages/Assets/hooks/useListSort.js.map +1 -1
  183. package/dist/admin/pages/Assets/hooks/useListSort.mjs +3 -2
  184. package/dist/admin/pages/Assets/hooks/useListSort.mjs.map +1 -1
  185. package/dist/admin/services/api.js +92 -7
  186. package/dist/admin/services/api.js.map +1 -1
  187. package/dist/admin/services/api.mjs +91 -9
  188. package/dist/admin/services/api.mjs.map +1 -1
  189. package/dist/admin/src/components/AssetPickerDialog/AssetPickerDialog.d.ts +19 -0
  190. package/dist/admin/src/components/AssetPickerDialog/FolderBreadcrumbs.d.ts +10 -0
  191. package/dist/admin/src/components/AssetPickerDialog/MediaLibraryPickerDialog.d.ts +19 -0
  192. package/dist/admin/src/components/AssetPickerDialog/PickerSelectionProvider.d.ts +28 -0
  193. package/dist/admin/src/components/AssetPickerDialog/SortableSelection.d.ts +12 -0
  194. package/dist/admin/src/components/AssetPickerDialog/pickerSelection.d.ts +26 -0
  195. package/dist/admin/src/components/Drawer.d.ts +8 -0
  196. package/dist/admin/src/components/EditorFileDropZone/EditorFileDropZone.d.ts +21 -0
  197. package/dist/admin/src/components/MediaLibraryInput/AddAssetMenu.d.ts +7 -1
  198. package/dist/admin/src/components/MediaLibraryInput/AssetCard.d.ts +25 -0
  199. package/dist/admin/src/components/MediaLibraryInput/AssetCarousel.d.ts +16 -0
  200. package/dist/admin/src/components/MediaLibraryInput/AssetDropZone.d.ts +11 -3
  201. package/dist/admin/src/components/MediaLibraryInput/AssetPreview.d.ts +17 -0
  202. package/dist/admin/src/components/MediaLibraryInput/AssetRow.d.ts +13 -3
  203. package/dist/admin/src/components/MediaLibraryInput/FieldControls.d.ts +19 -0
  204. package/dist/admin/src/components/MediaLibraryInput/MediaLibraryInput.d.ts +3 -1
  205. package/dist/admin/src/components/MediaLibraryInput/UploadProgressBar.d.ts +7 -0
  206. package/dist/admin/src/components/MediaLibraryInput/openAssetDetails.d.ts +10 -0
  207. package/dist/admin/src/components/MediaLibraryInput/useFieldUploads.d.ts +31 -0
  208. package/dist/admin/src/hooks/useMediaLibraryPermissions.d.ts +2 -0
  209. package/dist/admin/src/pages/Assets/components/AssetDetails/AssetDetailsDrawer.d.ts +41 -5
  210. package/dist/admin/src/pages/Assets/components/AssetsGrid.d.ts +3 -1
  211. package/dist/admin/src/pages/Assets/components/AssetsSearchInput.d.ts +11 -1
  212. package/dist/admin/src/pages/Assets/components/AssetsView.d.ts +29 -0
  213. package/dist/admin/src/pages/Assets/components/Dnd/ReorderHandle.d.ts +12 -0
  214. package/dist/admin/src/pages/Assets/components/Dnd/assetSortable.d.ts +37 -0
  215. package/dist/admin/src/pages/Assets/components/Dnd/dndIds.d.ts +5 -0
  216. package/dist/admin/src/pages/Assets/components/Dnd/useAssetDnd.d.ts +23 -2
  217. package/dist/admin/src/pages/Assets/components/FolderTree/FolderTree.d.ts +1 -0
  218. package/dist/admin/src/pages/Assets/components/FolderTree/collapsedBranch.d.ts +21 -0
  219. package/dist/admin/src/pages/Assets/components/ViewToggle.d.ts +8 -0
  220. package/dist/admin/src/pages/Assets/hooks/useAssetSelection.d.ts +26 -0
  221. package/dist/admin/src/pages/Assets/hooks/useAssetsList.d.ts +30 -0
  222. package/dist/admin/src/pages/Assets/hooks/useIsAssetDetailsOpen.d.ts +2 -6
  223. package/dist/admin/src/pages/Assets/hooks/useListQueryParams.d.ts +27 -0
  224. package/dist/admin/src/pages/Assets/hooks/useListSettings.d.ts +29 -0
  225. package/dist/admin/src/services/api.d.ts +24 -1
  226. package/dist/admin/src/store/uploadProgress.d.ts +14 -1
  227. package/dist/admin/src/utils/findFolderPath.d.ts +6 -0
  228. package/dist/admin/src/utils/isAllowedAssetType.d.ts +14 -0
  229. package/dist/admin/store/uploadProgress.js +30 -3
  230. package/dist/admin/store/uploadProgress.js.map +1 -1
  231. package/dist/admin/store/uploadProgress.mjs +29 -4
  232. package/dist/admin/store/uploadProgress.mjs.map +1 -1
  233. package/dist/admin/translations/en.json.js +24 -0
  234. package/dist/admin/translations/en.json.js.map +1 -1
  235. package/dist/admin/translations/en.json.mjs +24 -0
  236. package/dist/admin/translations/en.json.mjs.map +1 -1
  237. package/dist/admin/utils/findFolderPath.js +26 -0
  238. package/dist/admin/utils/findFolderPath.js.map +1 -0
  239. package/dist/admin/utils/findFolderPath.mjs +24 -0
  240. package/dist/admin/utils/findFolderPath.mjs.map +1 -0
  241. package/dist/admin/utils/isAllowedAssetType.js +33 -0
  242. package/dist/admin/utils/isAllowedAssetType.js.map +1 -0
  243. package/dist/admin/utils/isAllowedAssetType.mjs +31 -0
  244. package/dist/admin/utils/isAllowedAssetType.mjs.map +1 -0
  245. package/dist/server/audit-logs.js +264 -0
  246. package/dist/server/audit-logs.js.map +1 -0
  247. package/dist/server/audit-logs.mjs +255 -0
  248. package/dist/server/audit-logs.mjs.map +1 -0
  249. package/dist/server/bootstrap.js +4 -0
  250. package/dist/server/bootstrap.js.map +1 -1
  251. package/dist/server/bootstrap.mjs +4 -0
  252. package/dist/server/bootstrap.mjs.map +1 -1
  253. package/dist/server/controllers/admin-folder-file.js +23 -1
  254. package/dist/server/controllers/admin-folder-file.js.map +1 -1
  255. package/dist/server/controllers/admin-folder-file.mjs +23 -1
  256. package/dist/server/controllers/admin-folder-file.mjs.map +1 -1
  257. package/dist/server/controllers/admin-settings.js +5 -1
  258. package/dist/server/controllers/admin-settings.js.map +1 -1
  259. package/dist/server/controllers/admin-settings.mjs +5 -1
  260. package/dist/server/controllers/admin-settings.mjs.map +1 -1
  261. package/dist/server/services/folder.js +48 -1
  262. package/dist/server/services/folder.js.map +1 -1
  263. package/dist/server/services/folder.mjs +48 -1
  264. package/dist/server/services/folder.mjs.map +1 -1
  265. package/dist/server/services/image-manipulation.js +14 -7
  266. package/dist/server/services/image-manipulation.js.map +1 -1
  267. package/dist/server/services/image-manipulation.mjs +14 -7
  268. package/dist/server/services/image-manipulation.mjs.map +1 -1
  269. package/dist/server/services/upload.js +100 -16
  270. package/dist/server/services/upload.js.map +1 -1
  271. package/dist/server/services/upload.mjs +102 -18
  272. package/dist/server/services/upload.mjs.map +1 -1
  273. package/dist/server/src/audit-logs.d.ts +142 -0
  274. package/dist/server/src/audit-logs.d.ts.map +1 -0
  275. package/dist/server/src/bootstrap.d.ts.map +1 -1
  276. package/dist/server/src/controllers/admin-folder-file.d.ts.map +1 -1
  277. package/dist/server/src/controllers/admin-settings.d.ts.map +1 -1
  278. package/dist/server/src/index.d.ts +4 -4
  279. package/dist/server/src/index.d.ts.map +1 -1
  280. package/dist/server/src/mcp/ambient-instance.d.ts.map +1 -1
  281. package/dist/server/src/services/extensions/utils.d.ts +11 -11
  282. package/dist/server/src/services/folder.d.ts.map +1 -1
  283. package/dist/server/src/services/image-manipulation.d.ts +4 -4
  284. package/dist/server/src/services/image-manipulation.d.ts.map +1 -1
  285. package/dist/server/src/services/index.d.ts +4 -4
  286. package/dist/server/src/services/index.d.ts.map +1 -1
  287. package/dist/server/src/services/upload.d.ts.map +1 -1
  288. package/dist/server/src/types.d.ts +63 -12
  289. package/dist/server/src/types.d.ts.map +1 -1
  290. package/package.json +11 -16
  291. package/dist/admin/components/MediaLibraryInput/NoLibraryAccessDialog.js +0 -45
  292. package/dist/admin/components/MediaLibraryInput/NoLibraryAccessDialog.js.map +0 -1
  293. package/dist/admin/components/MediaLibraryInput/NoLibraryAccessDialog.mjs +0 -43
  294. package/dist/admin/components/MediaLibraryInput/NoLibraryAccessDialog.mjs.map +0 -1
  295. package/dist/admin/src/components/MediaLibraryInput/NoLibraryAccessDialog.d.ts +0 -10
@@ -1 +1 @@
1
- {"version":3,"file":"FolderTree.js","sources":["../../../../../../admin/src/pages/Assets/components/FolderTree/FolderTree.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState, type ReactNode } from 'react';\n\nimport { SubNav } from '@strapi/admin/strapi-admin';\nimport { Box, Flex, IconButton, Loader, Typography } from '@strapi/design-system';\nimport { ChevronDown, Folder as FolderIcon, House } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { css, styled } from 'styled-components';\n\nimport { TruncatedText } from '../../../../components/TruncatedText';\nimport { useGetFolderStructureQuery } from '../../../../services/folders';\nimport { isEventFromWithin } from '../../../../utils/isEventFromWithin';\nimport { getTranslationKey } from '../../../../utils/translations';\nimport { useAssetsDndOptional } from '../Dnd/AssetsDndProvider';\nimport { useFolderTreeDroppable } from '../Dnd/useFolderTreeDroppable';\n\nimport { FolderTreeRowMenu } from './FolderTreeRowMenu';\nimport { useSpringLoadedExpand } from './useSpringLoadedExpand';\n\nimport type { FolderNode } from '../../../../../../shared/contracts/folders';\n\n/* -------------------------------------------------------------------------------------------------\n * RowButton — shared row styling aligned with admin SubNav.Link\n * -----------------------------------------------------------------------------------------------*/\n\nconst RowButton = styled.button<{\n $isActive: boolean;\n $isValidDropTarget?: boolean;\n $isInvalidDropCursor?: boolean;\n $isMovePending?: boolean;\n}>`\n display: flex;\n align-items: center;\n // Matches the row's own gap, so Home — the one row whose icon sits inside\n // this button rather than beside it — puts its label on the same line as a\n // folder's.\n gap: ${({ theme }) => theme.spaces[1]};\n width: 100%;\n min-height: 3.2rem;\n // No padding of its own: the row owns the inset, so the label lines up with\n // the icon boxes instead of being pushed in by a second layer of spacing.\n padding: 0;\n border: 0;\n // The surface — hover, active, drop target — is painted by the row behind\n // this, so it spans the chevron and the actions menu too, not just the label.\n background: transparent;\n color: ${({ $isActive, theme }) =>\n $isActive ? theme.colors.primary700 : theme.colors.neutral800};\n border-radius: ${({ theme }) => theme.borderRadius};\n cursor: ${({ $isMovePending, $isInvalidDropCursor }) => {\n if ($isMovePending) {\n return 'wait';\n }\n\n return $isInvalidDropCursor ? 'not-allowed' : 'pointer';\n }};\n text-align: left;\n font: inherit;\n pointer-events: ${({ $isMovePending }) => ($isMovePending ? 'none' : 'auto')};\n\n ${({ $isValidDropTarget, theme }) =>\n $isValidDropTarget &&\n css`\n outline: 1px dashed ${theme.colors.primary600};\n outline-offset: -1px;\n `}\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme.colors.primary600};\n outline-offset: -2px;\n }\n`;\n\nconst TreeRow = styled(Flex)<{\n $isActive?: boolean;\n $isValidDropTarget?: boolean;\n $isInvalidDropCursor?: boolean;\n $isMovePending?: boolean;\n}>`\n cursor: ${({ $isMovePending, $isInvalidDropCursor }) => {\n if ($isMovePending) {\n return 'wait';\n }\n\n return $isInvalidDropCursor ? 'not-allowed' : 'default';\n }};\n pointer-events: ${({ $isMovePending }) => ($isMovePending ? 'none' : 'auto')};\n border-radius: ${({ theme }) => theme.borderRadius};\n background: ${({ $isActive, theme }) => ($isActive ? theme.colors.primary100 : 'transparent')};\n\n // The whole row lights up, so pointing anywhere along it — chevron, label or\n // the actions trigger — reads as one target.\n &:hover {\n background: ${({ $isActive, theme }) =>\n $isActive ? theme.colors.primary100 : theme.colors.neutral100};\n }\n\n ${({ $isValidDropTarget, theme }) =>\n $isValidDropTarget &&\n css`\n background: ${theme.colors.primary100};\n outline: 1px dashed ${theme.colors.primary600};\n outline-offset: -1px;\n\n &:hover {\n background: ${theme.colors.primary100};\n }\n `}\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * useExpandedFolders — local expand/collapse state\n * -----------------------------------------------------------------------------------------------*/\n\nconst findAncestorIds = (\n nodes: FolderNode[],\n targetId: number,\n trail: number[] = []\n): number[] | null => {\n for (const node of nodes) {\n if (node.id === targetId) {\n return trail;\n }\n\n if (node.children?.length) {\n const nextTrail = node.id != null ? [...trail, node.id] : trail;\n const found = findAncestorIds(node.children, targetId, nextTrail);\n if (found !== null) {\n return found;\n }\n }\n }\n\n return null;\n};\n\nconst useExpandedFolders = (folderStructure: FolderNode[], currentFolderId: number | null) => {\n const [expandedIds, setExpandedIds] = useState<Set<number>>(() => new Set());\n\n useEffect(() => {\n if (currentFolderId == null) {\n return;\n }\n\n const ancestors = findAncestorIds(folderStructure, currentFolderId);\n if (!ancestors || ancestors.length === 0) {\n return;\n }\n\n setExpandedIds((prev) => {\n const next = new Set(prev);\n let changed = false;\n for (const id of ancestors) {\n if (!next.has(id)) {\n next.add(id);\n changed = true;\n }\n }\n return changed ? next : prev;\n });\n }, [folderStructure, currentFolderId]);\n\n const toggleExpanded = useCallback((id: number) => {\n setExpandedIds((prev) => {\n const next = new Set(prev);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n return next;\n });\n }, []);\n\n const expandFolder = useCallback((id: number) => {\n setExpandedIds((prev) => {\n if (prev.has(id)) {\n return prev;\n }\n\n const next = new Set(prev);\n next.add(id);\n return next;\n });\n }, []);\n\n const isExpanded = useCallback((id: number) => expandedIds.has(id), [expandedIds]);\n\n return { isExpanded, toggleExpanded, expandFolder };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * NavList — unstyled list for tree rows\n * -----------------------------------------------------------------------------------------------*/\n\nconst NavList = styled.ul`\n list-style: none;\n margin: 0;\n padding: 0;\n\n /* Grid rather than block, and load-bearing despite rendering a single column:\n a minmax(0, 1fr) track contributes a minimum of 0, which is what stops each\n row propagating the min-content width of its own label.\n\n Folder names ellipsize, and text-overflow needs white-space: nowrap — so a\n label's min-content width is the entire name, and no box lays out narrower\n than its min-content. In block flow that floor travels up to the SubNav\n ScrollArea, which widens the rail and shows a horizontal scrollbar instead of\n truncating the name. Nesting makes it worse: the indent is spent before the\n label is measured, so shorter names trigger it the deeper you go.\n\n Measured in Chromium — dropping either declaration brings the scrollbar\n back, and neither min-width nor overflow on the row is a substitute. */\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * FolderTreeItem — single tree row (internal)\n * -----------------------------------------------------------------------------------------------*/\n\nconst INDENT_PER_LEVEL_REM = 1.6;\n\n/**\n * Breathing room between the row's highlight and the controls at either end.\n * Asymmetric on purpose: the chevron reads as part of the indent, while the\n * actions trigger sits closer to the edge so it stays out of the name's way.\n */\nconst ROW_INSET_LEFT_REM = 0.8;\nconst ROW_INSET_RIGHT_REM = 0.4;\n\n/**\n * Every icon in the rail occupies the same 24px box, whether or not it is a\n * control: the chevron and the actions trigger are buttons, the home and folder\n * marks are not. Sizing the box rather than the glyph is what keeps the labels\n * on one vertical line across rows that mix the two.\n */\nconst IconSlot = styled(Flex)`\n width: 2.4rem;\n height: 2.4rem;\n min-width: 2.4rem;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n`;\n\n/**\n * A leaf's chevron is present only to keep the folder names aligned, so it\n * should read as absent. The design system's disabled state is built for real\n * controls — a filled, bordered pill — which draws more attention than the\n * enabled chevron next to it. Doubled selector to outrank that rule.\n */\nconst ChevronButton = styled(IconButton)`\n // Square, so it and the actions trigger read as one pair of controls.\n && {\n width: 2.4rem;\n height: 2.4rem;\n min-width: 2.4rem;\n min-height: 2.4rem;\n padding: 0.4rem;\n }\n\n // The row paints its own hover, so the control needs a stronger one of its own\n // to read as a separate target sitting on top of it.\n &&:hover:not([aria-disabled='true']) {\n background: ${({ theme }) => theme.colors.primary200};\n }\n\n &&[aria-disabled='true'] {\n background: transparent;\n border-color: transparent;\n opacity: 0.3;\n }\n`;\n\nconst RotatingChevron = styled(ChevronDown)<{ $expanded: boolean }>`\n transform: rotate(${({ $expanded }) => ($expanded ? '0deg' : '-90deg')});\n transition: transform 0.2s ease;\n`;\n\ninterface FolderTreeItemProps {\n node: FolderNode;\n /** Its parent's id, so the actions can validate a move against the real parent. */\n parentId: number | null;\n level: number;\n currentFolderId: number | null;\n showActiveFolder: boolean;\n isExpanded: (id: number) => boolean;\n onToggle: (id: number) => void;\n onExpand: (id: number) => void;\n onSelect: (folderId: number) => void;\n isMovePending: boolean;\n}\n\ninterface FolderTreeItemInnerProps extends Omit<FolderTreeItemProps, 'node'> {\n id: number;\n name: string;\n folderChildren: FolderNode[];\n}\n\nconst FolderTreeItemInner = ({\n id,\n name,\n parentId,\n folderChildren,\n level,\n currentFolderId,\n showActiveFolder,\n isExpanded,\n onToggle,\n onExpand,\n onSelect,\n isMovePending,\n}: FolderTreeItemInnerProps) => {\n const { formatMessage } = useIntl();\n const hasChildren = folderChildren.length > 0;\n // A folder keeps its entry in the expanded set after its last subfolder is\n // moved away, so \"expanded\" has to mean \"expanded *and* still has something to\n // show\" — otherwise the chevron stays rotated on what is now a leaf.\n const isFolderExpanded = isExpanded(id) && hasChildren;\n const isActive = showActiveFolder && currentFolderId === id;\n\n const {\n droppable: { setNodeRef },\n isOver,\n showValidDropHighlight,\n showInvalidDropCursor,\n } = useFolderTreeDroppable({ id, name });\n\n const handleExpand = useCallback(() => onExpand(id), [id, onExpand]);\n\n // Tree rows carry no selection, so a right-click always means \"this folder\" —\n // none of the list's selection rules apply here.\n const [menuPosition, setMenuPosition] = useState<{ x: number; y: number } | null>(null);\n const rowButtonRef = useRef<HTMLButtonElement>(null);\n\n useSpringLoadedExpand({\n isOver,\n canExpand: hasChildren && !isFolderExpanded,\n onExpand: handleExpand,\n });\n\n // TODO: full `role=\"tree\"` + arrow-key treeview navigation before revamp GA\n // if an accessibility audit requires it (v1 is button rows only).\n return (\n <li>\n <TreeRow\n ref={setNodeRef}\n data-native-context-menu\n alignItems=\"center\"\n // Indent plus the row's own inset, so the chevron never sits flush\n // against the edge of the highlight at any depth.\n paddingLeft={`${level * INDENT_PER_LEVEL_REM + ROW_INSET_LEFT_REM}rem`}\n paddingRight={`${ROW_INSET_RIGHT_REM}rem`}\n gap={1}\n $isActive={isActive}\n $isValidDropTarget={showValidDropHighlight}\n $isInvalidDropCursor={showInvalidDropCursor}\n $isMovePending={isMovePending}\n onContextMenu={(event: React.MouseEvent) => {\n if (!isEventFromWithin(event)) {\n return;\n }\n\n event.preventDefault();\n setMenuPosition({ x: event.clientX, y: event.clientY });\n }}\n >\n <ChevronButton\n label={\n hasChildren\n ? formatMessage(\n {\n id: getTranslationKey(\n isFolderExpanded ? 'sidebar.tree.collapse' : 'sidebar.tree.expand'\n ),\n defaultMessage: isFolderExpanded ? 'Collapse {name}' : 'Expand {name}',\n },\n { name }\n )\n : formatMessage(\n {\n id: getTranslationKey('sidebar.tree.no-subfolders'),\n defaultMessage: 'The folder {name} has no subfolders',\n },\n { name }\n )\n }\n disabled={!hasChildren}\n onClick={(event: React.MouseEvent) => {\n event.stopPropagation();\n onToggle(id);\n }}\n variant=\"ghost\"\n withTooltip={false}\n aria-expanded={hasChildren ? isFolderExpanded : undefined}\n >\n <RotatingChevron $expanded={isFolderExpanded} fill=\"neutral500\" />\n </ChevronButton>\n\n <Box flex=\"1\" minWidth={0}>\n <RowButton\n ref={rowButtonRef}\n type=\"button\"\n $isActive={isActive}\n $isValidDropTarget={showValidDropHighlight}\n $isInvalidDropCursor={showInvalidDropCursor}\n $isMovePending={isMovePending}\n aria-current={isActive ? 'page' : undefined}\n onClick={() => onSelect(id)}\n data-testid={`folder-tree-node-${id}`}\n data-folder-id={id}\n >\n <TruncatedText variant=\"omega\" fontWeight={isActive ? 'semiBold' : 'regular'}>\n {name}\n </TruncatedText>\n </RowButton>\n </Box>\n\n <FolderTreeRowMenu\n folder={{ id, name }}\n parentId={parentId}\n menuPosition={menuPosition}\n returnFocusTo={rowButtonRef.current}\n onCloseMenu={() => setMenuPosition(null)}\n />\n </TreeRow>\n\n {hasChildren && isFolderExpanded && (\n <NavList>\n {folderChildren.map((child) => (\n <FolderTreeItem\n key={child.id ?? child.name}\n node={child}\n parentId={id}\n level={level + 1}\n currentFolderId={currentFolderId}\n showActiveFolder={showActiveFolder}\n isExpanded={isExpanded}\n onToggle={onToggle}\n onExpand={onExpand}\n onSelect={onSelect}\n isMovePending={isMovePending}\n />\n ))}\n </NavList>\n )}\n </li>\n );\n};\n\nconst FolderTreeItem = ({ node, ...props }: FolderTreeItemProps) => {\n if (node.id == null) {\n return null;\n }\n\n return (\n <FolderTreeItemInner\n {...props}\n id={node.id}\n name={node.name ?? ''}\n folderChildren={node.children ?? []}\n />\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * FolderTree — public sidebar component\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FolderTreeProps {\n currentFolderId: number | null;\n /**\n * Set to `false` while a global asset search is active: the results span the\n * whole library, so highlighting one folder would misrepresent them.\n * */\n showActiveFolder?: boolean;\n onSelectFolder: (folderId: number | null) => void;\n /** Rendered inside the sidebar, which it can listen on through `FOLDER_TREE_ROOT_SELECTOR`. */\n backgroundContextMenu?: ReactNode;\n}\n\nexport const FOLDER_TREE_ROOT_SELECTOR = '[data-folder-tree-root]';\n\n/**\n * Left-rail navigation for the Media Library. Fetches folder structure internally\n * and renders:\n *\n * 1. A \"Media library\" title\n * 2. A filter input that prunes the tree to matching destinations\n * 3. A \"Home\" entry that clears the folder query param\n * 4. A \"FOLDERS\" section header\n * 5. The folder tree itself\n *\n * The filter is purely local: it never touches the URL and never affects the\n * asset list, which has its own independent search in the content toolbar.\n *\n * Presentational with respect to routing — navigation is delegated to the parent\n * via `onSelectFolder` so the URL stays the single source of truth (see\n * `useFolderNavigation`).\n */\nexport const FolderTree = ({\n currentFolderId,\n showActiveFolder = true,\n onSelectFolder,\n backgroundContextMenu,\n}: FolderTreeProps) => {\n const { formatMessage } = useIntl();\n const { data: folderStructure = [], isLoading, isError } = useGetFolderStructureQuery();\n const { isExpanded, toggleExpanded, expandFolder } = useExpandedFolders(\n folderStructure,\n currentFolderId\n );\n const { isMovePending } = useAssetsDndOptional() ?? { isMovePending: false };\n\n const isHomeActive = showActiveFolder && currentFolderId == null;\n const homeLabel = formatMessage({\n id: getTranslationKey('sidebar.home'),\n defaultMessage: 'Home',\n });\n\n const {\n droppable: { setNodeRef: setHomeDropRef },\n showValidDropHighlight: showHomeValidDropHighlight,\n showInvalidDropCursor: showHomeInvalidDropCursor,\n } = useFolderTreeDroppable({ id: null, name: homeLabel });\n\n return (\n <SubNav.Main\n data-folder-tree-root\n aria-label={formatMessage({\n id: getTranslationKey('sidebar.tree.aria-label'),\n defaultMessage: 'Media library folders',\n })}\n >\n {backgroundContextMenu}\n <SubNav.Header\n label={formatMessage({\n id: getTranslationKey('sidebar.title'),\n defaultMessage: 'Media library',\n })}\n />\n\n <SubNav.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" padding={3}>\n {/* Same row wrapper as a folder, so Home highlights across its whole\n width rather than only behind the label. */}\n <TreeRow\n ref={setHomeDropRef}\n data-native-context-menu\n alignItems=\"center\"\n // Level 0, so the indent contributes nothing — but the row's own\n // inset still applies, exactly as it does for a top-level folder.\n paddingLeft={`${ROW_INSET_LEFT_REM}rem`}\n paddingRight={`${ROW_INSET_RIGHT_REM}rem`}\n $isActive={isHomeActive}\n $isValidDropTarget={showHomeValidDropHighlight}\n $isInvalidDropCursor={showHomeInvalidDropCursor}\n $isMovePending={isMovePending}\n >\n <RowButton\n type=\"button\"\n $isActive={isHomeActive}\n $isValidDropTarget={showHomeValidDropHighlight}\n $isInvalidDropCursor={showHomeInvalidDropCursor}\n $isMovePending={isMovePending}\n aria-current={isHomeActive ? 'page' : undefined}\n onClick={() => onSelectFolder(null)}\n data-testid=\"folder-tree-home\"\n >\n <IconSlot>\n <House aria-hidden width=\"1.6rem\" height=\"1.6rem\" />\n </IconSlot>\n <Typography variant=\"omega\" fontWeight={isHomeActive ? 'semiBold' : 'regular'}>\n {homeLabel}\n </Typography>\n </RowButton>\n </TreeRow>\n\n <Box marginTop={4}>\n <Flex\n alignItems=\"center\"\n gap={1}\n paddingTop={1}\n paddingBottom={1}\n paddingLeft={2}\n paddingRight={2}\n >\n <IconSlot>\n <FolderIcon aria-hidden width=\"1.6rem\" height=\"1.6rem\" fill=\"neutral500\" />\n </IconSlot>\n <Typography\n variant=\"sigma\"\n textColor=\"neutral600\"\n style={{ textTransform: 'uppercase' }}\n >\n {formatMessage({\n id: getTranslationKey('sidebar.folders'),\n defaultMessage: 'Folders',\n })}\n </Typography>\n </Flex>\n\n {isLoading ? (\n // TODO: revisit loading state before revamp GA\n <Flex justifyContent=\"center\" padding={1} paddingTop={2}>\n <Loader>\n {formatMessage({\n id: getTranslationKey('sidebar.tree.loading'),\n defaultMessage: 'Loading folders...',\n })}\n </Loader>\n </Flex>\n ) : isError ? (\n // TODO: revisit error state before revamp GA\n <Box padding={1} paddingTop={2}>\n <Typography variant=\"pi\" textColor=\"danger600\">\n {formatMessage({\n id: getTranslationKey('sidebar.tree.error'),\n defaultMessage: 'Could not load folders.',\n })}\n </Typography>\n </Box>\n ) : folderStructure.length === 0 ? (\n // TODO: revisit empty state before revamp GA\n <Box padding={1} paddingTop={2}>\n <Typography variant=\"pi\" textColor=\"neutral500\">\n {formatMessage({\n id: getTranslationKey('sidebar.tree.empty'),\n defaultMessage: 'No folders yet',\n })}\n </Typography>\n </Box>\n ) : (\n <NavList>\n {folderStructure.map((node) => (\n <FolderTreeItem\n key={node.id ?? node.name}\n node={node}\n // Top of the tree — these sit at the library root.\n parentId={null}\n level={0}\n currentFolderId={currentFolderId}\n showActiveFolder={showActiveFolder}\n isExpanded={isExpanded}\n onToggle={toggleExpanded}\n onExpand={expandFolder}\n onSelect={onSelectFolder}\n isMovePending={isMovePending}\n />\n ))}\n </NavList>\n )}\n </Box>\n </Flex>\n </SubNav.Content>\n </SubNav.Main>\n );\n};\n"],"names":["RowButton","styled","button","theme","spaces","$isActive","colors","primary700","neutral800","borderRadius","$isMovePending","$isInvalidDropCursor","$isValidDropTarget","css","primary600","TreeRow","Flex","primary100","neutral100","findAncestorIds","nodes","targetId","trail","node","id","children","length","nextTrail","found","useExpandedFolders","folderStructure","currentFolderId","expandedIds","setExpandedIds","useState","Set","useEffect","ancestors","prev","next","changed","has","add","toggleExpanded","useCallback","delete","expandFolder","isExpanded","NavList","ul","INDENT_PER_LEVEL_REM","ROW_INSET_LEFT_REM","ROW_INSET_RIGHT_REM","IconSlot","ChevronButton","IconButton","primary200","RotatingChevron","ChevronDown","$expanded","FolderTreeItemInner","name","parentId","folderChildren","level","showActiveFolder","onToggle","onExpand","onSelect","isMovePending","formatMessage","useIntl","hasChildren","isFolderExpanded","isActive","droppable","setNodeRef","isOver","showValidDropHighlight","showInvalidDropCursor","useFolderTreeDroppable","handleExpand","menuPosition","setMenuPosition","rowButtonRef","useRef","useSpringLoadedExpand","canExpand","_jsxs","li","ref","data-native-context-menu","alignItems","paddingLeft","paddingRight","gap","onContextMenu","event","isEventFromWithin","preventDefault","x","clientX","y","clientY","_jsx","label","getTranslationKey","defaultMessage","disabled","onClick","stopPropagation","variant","withTooltip","aria-expanded","undefined","fill","Box","flex","minWidth","type","aria-current","data-testid","data-folder-id","TruncatedText","fontWeight","FolderTreeRowMenu","folder","returnFocusTo","current","onCloseMenu","map","child","FolderTreeItem","props","FOLDER_TREE_ROOT_SELECTOR","FolderTree","onSelectFolder","backgroundContextMenu","data","isLoading","isError","useGetFolderStructureQuery","useAssetsDndOptional","isHomeActive","homeLabel","setHomeDropRef","showHomeValidDropHighlight","showHomeInvalidDropCursor","SubNav","Main","data-folder-tree-root","aria-label","Header","Content","direction","padding","House","aria-hidden","width","height","Typography","marginTop","paddingTop","paddingBottom","FolderIcon","textColor","style","textTransform","justifyContent","Loader"],"mappings":"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"}
1
+ {"version":3,"file":"FolderTree.js","sources":["../../../../../../admin/src/pages/Assets/components/FolderTree/FolderTree.tsx"],"sourcesContent":["import { useCallback, useEffect, useId, useMemo, useRef, useState, type ReactNode } from 'react';\n\nimport { useDroppable } from '@dnd-kit/core';\nimport { SubNav } from '@strapi/admin/strapi-admin';\nimport { Box, Flex, IconButton, Loader, Tooltip, Typography } from '@strapi/design-system';\nimport { ChevronDown, ChevronRight, Folder as FolderIcon, House, More } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { css, styled } from 'styled-components';\n\nimport { useGetFolderStructureQuery } from '../../../../services/folders';\nimport { findFolderPath } from '../../../../utils/findFolderPath';\nimport { isEventFromWithin } from '../../../../utils/isEventFromWithin';\nimport { getTranslationKey } from '../../../../utils/translations';\nimport { useAssetsDndOptional } from '../Dnd/AssetsDndProvider';\nimport { toFolderTreeSummaryId } from '../Dnd/dndIds';\nimport { useFolderTreeDroppable } from '../Dnd/useFolderTreeDroppable';\n\nimport { getCollapsedBranch, type CollapsedBranch } from './collapsedBranch';\nimport { FolderTreeRowMenu } from './FolderTreeRowMenu';\nimport { useSpringLoadedExpand } from './useSpringLoadedExpand';\n\nimport type { FolderNode } from '../../../../../../shared/contracts/folders';\n\n/* -------------------------------------------------------------------------------------------------\n * RowButton — shared row styling aligned with admin SubNav.Link\n * -----------------------------------------------------------------------------------------------*/\n\nconst RowButton = styled.button<{\n $isActive: boolean;\n $isValidDropTarget?: boolean;\n $isInvalidDropCursor?: boolean;\n $isMovePending?: boolean;\n}>`\n display: flex;\n align-items: center;\n // Matches the row's own gap, so Home — the one row whose icon sits inside\n // this button rather than beside it — puts its label on the same line as a\n // folder's.\n gap: ${({ theme }) => theme.spaces[1]};\n width: 100%;\n min-height: 3.2rem;\n // No padding of its own: the row owns the inset, so the label lines up with\n // the icon boxes instead of being pushed in by a second layer of spacing.\n padding: 0;\n border: 0;\n // The surface — hover, active, drop target — is painted by the row behind\n // this, so it spans the chevron and the actions menu too, not just the label.\n background: transparent;\n color: ${({ $isActive, theme }) =>\n $isActive ? theme.colors.primary700 : theme.colors.neutral800};\n border-radius: ${({ theme }) => theme.borderRadius};\n cursor: ${({ $isMovePending, $isInvalidDropCursor }) => {\n if ($isMovePending) {\n return 'wait';\n }\n\n return $isInvalidDropCursor ? 'not-allowed' : 'pointer';\n }};\n text-align: left;\n font: inherit;\n pointer-events: ${({ $isMovePending }) => ($isMovePending ? 'none' : 'auto')};\n\n ${({ $isValidDropTarget, theme }) =>\n $isValidDropTarget &&\n css`\n outline: 1px dashed ${theme.colors.primary600};\n outline-offset: -1px;\n `}\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme.colors.primary600};\n outline-offset: -2px;\n }\n`;\n\n/**\n * Where a row sits in the tinted path an open summary row reveals: its hidden\n * folders, then the open folder's parent.\n */\ntype OpenPathSegment = 'start' | 'middle' | 'end';\n\n// Squared where path rows meet, so the path reads as one block rather than a\n// stack of separately highlighted rows.\nconst getOpenPathRadius = (segment: OpenPathSegment, radius: string) =>\n ({\n start: `${radius} ${radius} 0 0`,\n middle: '0',\n end: `0 0 ${radius} ${radius}`,\n })[segment];\n\nconst TreeRow = styled(Flex)<{\n $isActive?: boolean;\n $isValidDropTarget?: boolean;\n $isInvalidDropCursor?: boolean;\n $isMovePending?: boolean;\n $openPathSegment?: OpenPathSegment;\n}>`\n cursor: ${({ $isMovePending, $isInvalidDropCursor }) => {\n if ($isMovePending) {\n return 'wait';\n }\n\n return $isInvalidDropCursor ? 'not-allowed' : 'default';\n }};\n pointer-events: ${({ $isMovePending }) => ($isMovePending ? 'none' : 'auto')};\n border-radius: ${({ $openPathSegment, theme }) =>\n $openPathSegment\n ? getOpenPathRadius($openPathSegment, theme.borderRadius)\n : theme.borderRadius};\n background: ${({ $isActive, $openPathSegment, theme }) => {\n if ($isActive) {\n return theme.colors.primary100;\n }\n\n // While a summary row is open, the path down to the open folder is tinted —\n // the folders it reveals plus the parent — so the tint reads as \"on the way\n // here\" and the open folder's own highlight as \"here\".\n return $openPathSegment ? theme.colors.neutral100 : 'transparent';\n }};\n\n // The whole row lights up, so pointing anywhere along it — chevron, label or\n // the actions trigger — reads as one target. A path row steps past its tint\n // rather than to primary100, which would make it look like a second open\n // folder (and, in dark mode, is the same colour as the tint).\n &:hover {\n background: ${({ $isActive, $openPathSegment, theme }) => {\n if ($isActive) {\n return theme.colors.primary100;\n }\n\n return $openPathSegment ? theme.colors.neutral150 : theme.colors.neutral100;\n }};\n }\n\n ${({ $isValidDropTarget, theme }) =>\n $isValidDropTarget &&\n css`\n background: ${theme.colors.primary100};\n outline: 1px dashed ${theme.colors.primary600};\n outline-offset: -1px;\n\n &:hover {\n background: ${theme.colors.primary100};\n }\n `}\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * useExpandedFolders — local expand/collapse state\n * -----------------------------------------------------------------------------------------------*/\n\nconst useExpandedFolders = (folderStructure: FolderNode[], currentFolderId: number | null) => {\n const [expandedIds, setExpandedIds] = useState<Set<number>>(() => new Set());\n\n useEffect(() => {\n if (currentFolderId == null) {\n return;\n }\n\n // The path ends with the current folder itself, which needs no expanding.\n const ancestors = findFolderPath(folderStructure, currentFolderId)\n ?.slice(0, -1)\n .map((folder) => folder.id)\n .filter((id): id is number => id != null);\n if (!ancestors || ancestors.length === 0) {\n return;\n }\n\n setExpandedIds((prev) => {\n const next = new Set(prev);\n let changed = false;\n for (const id of ancestors) {\n if (!next.has(id)) {\n next.add(id);\n changed = true;\n }\n }\n return changed ? next : prev;\n });\n }, [folderStructure, currentFolderId]);\n\n const toggleExpanded = useCallback((id: number) => {\n setExpandedIds((prev) => {\n const next = new Set(prev);\n if (next.has(id)) {\n next.delete(id);\n } else {\n next.add(id);\n }\n return next;\n });\n }, []);\n\n const expandFolder = useCallback((id: number) => {\n setExpandedIds((prev) => {\n if (prev.has(id)) {\n return prev;\n }\n\n const next = new Set(prev);\n next.add(id);\n return next;\n });\n }, []);\n\n const isExpanded = useCallback((id: number) => expandedIds.has(id), [expandedIds]);\n\n return { isExpanded, toggleExpanded, expandFolder };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * NavList — unstyled list for tree rows\n * -----------------------------------------------------------------------------------------------*/\n\nconst NavList = styled.ul`\n list-style: none;\n margin: 0;\n padding: 0;\n\n /* Grid rather than block, and load-bearing despite rendering a single column:\n a minmax(0, 1fr) track contributes a minimum of 0, which is what stops each\n row propagating the min-content width of its own label.\n\n Folder names ellipsize, and text-overflow needs white-space: nowrap — so a\n label's min-content width is the entire name, and no box lays out narrower\n than its min-content. In block flow that floor travels up to the SubNav\n ScrollArea, which widens the rail and shows a horizontal scrollbar instead of\n truncating the name. Nesting makes it worse: the indent is spent before the\n label is measured, so shorter names trigger it the deeper you go.\n\n Measured in Chromium — dropping either declaration brings the scrollbar\n back, and neither min-width nor overflow on the row is a substitute. */\n display: grid;\n grid-template-columns: minmax(0, 1fr);\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * FolderTreeItem — single tree row (internal)\n * -----------------------------------------------------------------------------------------------*/\n\nconst INDENT_PER_LEVEL_REM = 1.6;\n\n/**\n * Deeper rows keep this level's indent, so a name never runs out of room however\n * deep the tree goes. Rows past it stay readable through their path tooltip.\n */\nconst MAX_VISUAL_LEVEL = 4;\n\nexport const getIndentRem = (level: number) =>\n Math.min(level, MAX_VISUAL_LEVEL) * INDENT_PER_LEVEL_REM;\n\n/**\n * Breathing room between the row's highlight and the controls at either end.\n * Asymmetric on purpose: the chevron reads as part of the indent, while the\n * actions trigger sits closer to the edge so it stays out of the name's way.\n */\nconst ROW_INSET_LEFT_REM = 0.8;\nconst ROW_INSET_RIGHT_REM = 0.4;\n\n/**\n * Every icon in the rail occupies the same 24px box, whether or not it is a\n * control: the chevron and the actions trigger are buttons, the home and folder\n * marks are not. Sizing the box rather than the glyph is what keeps the labels\n * on one vertical line across rows that mix the two.\n */\nconst IconSlot = styled(Flex)`\n width: 2.4rem;\n height: 2.4rem;\n min-width: 2.4rem;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n`;\n\n/**\n * A leaf's chevron is present only to keep the folder names aligned, so it\n * should read as absent. The design system's disabled state is built for real\n * controls — a filled, bordered pill — which draws more attention than the\n * enabled chevron next to it. Doubled selector to outrank that rule.\n */\nconst ChevronButton = styled(IconButton)`\n // Square, so it and the actions trigger read as one pair of controls.\n && {\n width: 2.4rem;\n height: 2.4rem;\n min-width: 2.4rem;\n min-height: 2.4rem;\n padding: 0.4rem;\n }\n\n // The row paints its own hover, so the control needs a stronger one of its own\n // to read as a separate target sitting on top of it.\n &&:hover:not([aria-disabled='true']) {\n background: ${({ theme }) => theme.colors.primary200};\n }\n\n &&[aria-disabled='true'] {\n background: transparent;\n border-color: transparent;\n opacity: 0.3;\n }\n`;\n\nconst RotatingChevron = styled(ChevronDown)<{ $expanded: boolean }>`\n transform: rotate(${({ $expanded }) => ($expanded ? '0deg' : '-90deg')});\n transition: transform 0.2s ease;\n`;\n\ninterface FolderTreeItemProps {\n node: FolderNode;\n /** Its parent's id, so the actions can validate a move against the real parent. */\n parentId: number | null;\n level: number;\n currentFolderId: number | null;\n showActiveFolder: boolean;\n isExpanded: (id: number) => boolean;\n onToggle: (id: number) => void;\n onExpand: (id: number) => void;\n onSelect: (folderId: number) => void;\n isMovePending: boolean;\n /** Root folder first, down to this folder's parent — for the path tooltip. */\n ancestorNames: string[];\n /**\n * Listed under an opened \"N parent folders\" row: the next folder on the path is\n * already the row below it, so it shows no chevron and no subfolders.\n */\n isHiddenAncestor?: boolean;\n /** Set while a summary row is open, on the rows of the path it reveals. */\n openPathSegment?: OpenPathSegment;\n /** Rendered in place of the subfolders while expanded — the collapsed branch. */\n subtree?: ReactNode;\n}\n\ninterface FolderTreeItemInnerProps extends Omit<FolderTreeItemProps, 'node'> {\n id: number;\n name: string;\n folderChildren: FolderNode[];\n}\n\nconst FolderTreeItemInner = ({\n id,\n name,\n parentId,\n folderChildren,\n level,\n currentFolderId,\n showActiveFolder,\n isExpanded,\n onToggle,\n onExpand,\n onSelect,\n isMovePending,\n ancestorNames,\n isHiddenAncestor = false,\n openPathSegment,\n subtree,\n}: FolderTreeItemInnerProps) => {\n const { formatMessage } = useIntl();\n const hasChildren = folderChildren.length > 0;\n // A folder keeps its entry in the expanded set after its last subfolder is\n // moved away, so \"expanded\" has to mean \"expanded *and* still has something to\n // show\" — otherwise the chevron stays rotated on what is now a leaf.\n const isFolderExpanded = isExpanded(id) && hasChildren;\n const isActive = showActiveFolder && currentFolderId === id;\n const pathLabel = [\n formatMessage({ id: getTranslationKey('plugin.name'), defaultMessage: 'Media Library' }),\n ...ancestorNames,\n name,\n ].join(' / ');\n\n const {\n droppable: { setNodeRef },\n isOver,\n showValidDropHighlight,\n showInvalidDropCursor,\n } = useFolderTreeDroppable({ id, name });\n\n const handleExpand = useCallback(() => onExpand(id), [id, onExpand]);\n\n // Tree rows carry no selection, so a right-click always means \"this folder\" —\n // none of the list's selection rules apply here.\n const [menuPosition, setMenuPosition] = useState<{ x: number; y: number } | null>(null);\n const rowButtonRef = useRef<HTMLButtonElement>(null);\n\n useSpringLoadedExpand({\n isOver,\n canExpand: !isHiddenAncestor && hasChildren && !isFolderExpanded,\n onExpand: handleExpand,\n });\n\n // TODO: full `role=\"tree\"` + arrow-key treeview navigation before revamp GA\n // if an accessibility audit requires it (v1 is button rows only).\n return (\n <li>\n <TreeRow\n ref={setNodeRef}\n data-native-context-menu\n alignItems=\"center\"\n // Indent plus the row's own inset, so the chevron never sits flush\n // against the edge of the highlight at any depth.\n paddingLeft={`${getIndentRem(level) + ROW_INSET_LEFT_REM}rem`}\n paddingRight={`${ROW_INSET_RIGHT_REM}rem`}\n gap={1}\n $isActive={isActive}\n $openPathSegment={openPathSegment}\n $isValidDropTarget={showValidDropHighlight}\n $isInvalidDropCursor={showInvalidDropCursor}\n $isMovePending={isMovePending}\n onContextMenu={(event: React.MouseEvent) => {\n if (!isEventFromWithin(event)) {\n return;\n }\n\n event.preventDefault();\n setMenuPosition({ x: event.clientX, y: event.clientY });\n }}\n >\n {isHiddenAncestor ? (\n <IconSlot aria-hidden />\n ) : (\n <ChevronButton\n label={\n hasChildren\n ? formatMessage(\n {\n id: getTranslationKey(\n isFolderExpanded ? 'sidebar.tree.collapse' : 'sidebar.tree.expand'\n ),\n defaultMessage: isFolderExpanded ? 'Collapse {name}' : 'Expand {name}',\n },\n { name }\n )\n : formatMessage(\n {\n id: getTranslationKey('sidebar.tree.no-subfolders'),\n defaultMessage: 'The folder {name} has no subfolders',\n },\n { name }\n )\n }\n disabled={!hasChildren}\n onClick={(event: React.MouseEvent) => {\n event.stopPropagation();\n onToggle(id);\n }}\n variant=\"ghost\"\n withTooltip={false}\n aria-expanded={hasChildren ? isFolderExpanded : undefined}\n >\n <RotatingChevron $expanded={isFolderExpanded} fill=\"neutral500\" />\n </ChevronButton>\n )}\n\n <Box flex=\"1\" minWidth={0}>\n {/* Always on, unlike a truncation-only tooltip: the path is more than\n the visible name, so it never just repeats what is on screen. */}\n <Tooltip label={pathLabel}>\n <RowButton\n ref={rowButtonRef}\n type=\"button\"\n $isActive={isActive}\n $isValidDropTarget={showValidDropHighlight}\n $isInvalidDropCursor={showInvalidDropCursor}\n $isMovePending={isMovePending}\n aria-current={isActive ? 'page' : undefined}\n onClick={() => onSelect(id)}\n data-testid={`folder-tree-node-${id}`}\n data-folder-id={id}\n >\n <Typography ellipsis variant=\"omega\" fontWeight={isActive ? 'semiBold' : 'regular'}>\n {name}\n </Typography>\n </RowButton>\n </Tooltip>\n </Box>\n\n <FolderTreeRowMenu\n folder={{ id, name }}\n parentId={parentId}\n menuPosition={menuPosition}\n returnFocusTo={rowButtonRef.current}\n onCloseMenu={() => setMenuPosition(null)}\n />\n </TreeRow>\n\n {hasChildren &&\n isFolderExpanded &&\n !isHiddenAncestor &&\n (subtree ?? (\n <NavList>\n {folderChildren.map((child) => (\n <FolderTreeItem\n key={child.id ?? child.name}\n node={child}\n parentId={id}\n level={level + 1}\n currentFolderId={currentFolderId}\n showActiveFolder={showActiveFolder}\n isExpanded={isExpanded}\n onToggle={onToggle}\n onExpand={onExpand}\n onSelect={onSelect}\n isMovePending={isMovePending}\n ancestorNames={[...ancestorNames, name]}\n />\n ))}\n </NavList>\n ))}\n </li>\n );\n};\n\nconst FolderTreeItem = ({ node, ...props }: FolderTreeItemProps) => {\n if (node.id == null) {\n return null;\n }\n\n return (\n <FolderTreeItemInner\n {...props}\n id={node.id}\n name={node.name ?? ''}\n folderChildren={node.children ?? []}\n />\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CollapsedAncestors — the \"N parent folders\" row of a deep branch (internal)\n * -----------------------------------------------------------------------------------------------*/\n\nconst SummaryLabel = styled(Typography)`\n font-style: italic;\n`;\n\nconst SummaryChevron = styled(ChevronRight)<{ $expanded: boolean }>`\n transform: rotate(${({ $expanded }) => ($expanded ? '90deg' : '0deg')});\n transition: transform 0.2s ease;\n`;\n\ntype SharedItemProps = Pick<\n FolderTreeItemProps,\n | 'currentFolderId'\n | 'showActiveFolder'\n | 'isExpanded'\n | 'onToggle'\n | 'onExpand'\n | 'onSelect'\n | 'isMovePending'\n>;\n\ninterface CollapsedBranchItemProps extends SharedItemProps {\n branch: CollapsedBranch;\n}\n\ninterface CollapsedAncestorsProps extends CollapsedBranchItemProps {\n isOpen: boolean;\n onOpenChange: (isOpen: boolean) => void;\n}\n\n/**\n * Stands in for the folders between a deep branch's root and the selected\n * folder's parent, and lists them in place when opened.\n */\nconst CollapsedAncestors = ({\n branch,\n isOpen,\n onOpenChange,\n ...itemProps\n}: CollapsedAncestorsProps) => {\n const { formatMessage } = useIntl();\n const listId = useId();\n const open = useCallback(() => onOpenChange(true), [onOpenChange]);\n\n const rootName = branch.root.name ?? '';\n const hiddenNames = branch.hidden.map((node) => node.name ?? '');\n\n // Without this the hidden folders would be unreachable mid-drag, since the row\n // can't be clicked while dragging. It never resolves to a destination.\n const { setNodeRef, isOver } = useDroppable({\n id: toFolderTreeSummaryId(branch.root.id!),\n disabled: itemProps.isMovePending,\n });\n\n useSpringLoadedExpand({ isOver, canExpand: !isOpen, onExpand: open });\n\n return (\n <li>\n <TreeRow\n ref={setNodeRef}\n data-native-context-menu\n alignItems=\"center\"\n paddingLeft={`${getIndentRem(1) + ROW_INSET_LEFT_REM}rem`}\n paddingRight={`${ROW_INSET_RIGHT_REM}rem`}\n $isInvalidDropCursor={isOver}\n $isMovePending={itemProps.isMovePending}\n >\n <Tooltip label={hiddenNames.join(' / ')}>\n <RowButton\n type=\"button\"\n $isActive={false}\n $isInvalidDropCursor={isOver}\n $isMovePending={itemProps.isMovePending}\n aria-expanded={isOpen}\n aria-controls={isOpen ? listId : undefined}\n onClick={() => onOpenChange(!isOpen)}\n data-testid=\"folder-tree-hidden-ancestors\"\n >\n <IconSlot>\n <More aria-hidden fill=\"neutral500\" />\n </IconSlot>\n <Box flex=\"1\" minWidth={0}>\n <SummaryLabel ellipsis variant=\"omega\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: getTranslationKey('sidebar.tree.hidden-ancestors'),\n defaultMessage:\n '{count, plural, one {# parent folder} other {# parent folders}}',\n },\n { count: branch.hidden.length }\n )}\n </SummaryLabel>\n </Box>\n <IconSlot>\n <SummaryChevron aria-hidden $expanded={isOpen} fill=\"neutral500\" />\n </IconSlot>\n </RowButton>\n </Tooltip>\n </TreeRow>\n\n {isOpen && (\n <NavList id={listId}>\n {branch.hidden.map((node, index) => (\n <FolderTreeItem\n {...itemProps}\n key={node.id ?? node.name}\n node={node}\n parentId={(index === 0 ? branch.root.id : branch.hidden[index - 1].id) ?? null}\n // All at one level: they are a list of the path, not a nested tree.\n level={2}\n ancestorNames={[rootName, ...hiddenNames.slice(0, index)]}\n isHiddenAncestor\n openPathSegment={index === 0 ? 'start' : 'middle'}\n />\n ))}\n </NavList>\n )}\n </li>\n );\n};\n\n/**\n * The root folder of a deep branch, with everything between it and the selected\n * folder's parent folded into one row. See `getCollapsedBranch`.\n */\nconst CollapsedBranchItem = ({ branch, ...itemProps }: CollapsedBranchItemProps) => {\n const { currentFolderId } = itemProps;\n const [isOpen, setIsOpen] = useState(false);\n\n // Closed again on every new selection, clicking a hidden folder included.\n // Reset during render rather than in an effect, so the list never paints open\n // for a folder it wasn't opened on.\n const [openedOn, setOpenedOn] = useState(currentFolderId);\n if (openedOn !== currentFolderId) {\n setOpenedOn(currentFolderId);\n setIsOpen(false);\n }\n\n const ancestorNamesOfParent = [branch.root, ...branch.hidden].map((node) => node.name ?? '');\n\n return (\n <FolderTreeItem\n {...itemProps}\n node={branch.root}\n parentId={null}\n level={0}\n ancestorNames={[]}\n subtree={\n <NavList>\n <CollapsedAncestors\n {...itemProps}\n branch={branch}\n isOpen={isOpen}\n onOpenChange={setIsOpen}\n />\n <FolderTreeItem\n {...itemProps}\n node={branch.parent}\n parentId={branch.hidden[branch.hidden.length - 1]?.id ?? branch.root.id ?? null}\n level={2}\n ancestorNames={ancestorNamesOfParent}\n openPathSegment={isOpen ? 'end' : undefined}\n />\n </NavList>\n }\n />\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * FolderTree — public sidebar component\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FolderTreeProps {\n currentFolderId: number | null;\n /**\n * Set to `false` while a global asset search is active: the results span the\n * whole library, so highlighting one folder would misrepresent them.\n * */\n showActiveFolder?: boolean;\n onSelectFolder: (folderId: number | null) => void;\n /** Rendered inside the sidebar, which it can listen on through `FOLDER_TREE_ROOT_SELECTOR`. */\n backgroundContextMenu?: ReactNode;\n}\n\nexport const FOLDER_TREE_ROOT_SELECTOR = '[data-folder-tree-root]';\n\n/**\n * Left-rail navigation for the Media Library. Fetches folder structure internally\n * and renders:\n *\n * 1. A \"Media library\" title\n * 2. A filter input that prunes the tree to matching destinations\n * 3. A \"Home\" entry that clears the folder query param\n * 4. A \"FOLDERS\" section header\n * 5. The folder tree itself\n *\n * The filter is purely local: it never touches the URL and never affects the\n * asset list, which has its own independent search in the content toolbar.\n *\n * Presentational with respect to routing — navigation is delegated to the parent\n * via `onSelectFolder` so the URL stays the single source of truth (see\n * `useFolderNavigation`).\n */\nexport const FolderTree = ({\n currentFolderId,\n showActiveFolder = true,\n onSelectFolder,\n backgroundContextMenu,\n}: FolderTreeProps) => {\n const { formatMessage } = useIntl();\n const { data: folderStructure = [], isLoading, isError } = useGetFolderStructureQuery();\n const { isExpanded, toggleExpanded, expandFolder } = useExpandedFolders(\n folderStructure,\n currentFolderId\n );\n const { isMovePending } = useAssetsDndOptional() ?? { isMovePending: false };\n const collapsedBranch = useMemo(\n () => getCollapsedBranch(folderStructure, currentFolderId),\n [folderStructure, currentFolderId]\n );\n // A selection that folds or unfolds a branch remounts the selected row, which\n // drops focus to <body>. Whether focus was in the tree has to be read before\n // the selection, since by the time the new row renders the old one is gone.\n const restoreFocusRef = useRef(false);\n const handleSelectFolder = useCallback(\n (folderId: number) => {\n // Re-selecting the open folder renders nothing new, so a flag set here\n // would linger and pull focus back on a later, unrelated navigation.\n restoreFocusRef.current =\n folderId !== currentFolderId &&\n document.activeElement?.closest(FOLDER_TREE_ROOT_SELECTOR) != null;\n onSelectFolder(folderId);\n },\n [currentFolderId, onSelectFolder]\n );\n\n useEffect(() => {\n if (!restoreFocusRef.current || currentFolderId == null) {\n return;\n }\n\n restoreFocusRef.current = false;\n // Only take back the focus the remount dropped, never steal it from elsewhere.\n if (document.activeElement !== document.body) {\n return;\n }\n\n document\n .querySelector<HTMLElement>(\n `${FOLDER_TREE_ROOT_SELECTOR} [data-folder-id=\"${currentFolderId}\"]`\n )\n ?.focus();\n }, [currentFolderId]);\n\n const sharedItemProps: SharedItemProps = {\n currentFolderId,\n showActiveFolder,\n isExpanded,\n onToggle: toggleExpanded,\n onExpand: expandFolder,\n onSelect: handleSelectFolder,\n isMovePending,\n };\n\n const isHomeActive = showActiveFolder && currentFolderId == null;\n const homeLabel = formatMessage({\n id: getTranslationKey('sidebar.home'),\n defaultMessage: 'Home',\n });\n\n const {\n droppable: { setNodeRef: setHomeDropRef },\n showValidDropHighlight: showHomeValidDropHighlight,\n showInvalidDropCursor: showHomeInvalidDropCursor,\n } = useFolderTreeDroppable({ id: null, name: homeLabel });\n\n return (\n <SubNav.Main\n data-folder-tree-root\n aria-label={formatMessage({\n id: getTranslationKey('sidebar.tree.aria-label'),\n defaultMessage: 'Media library folders',\n })}\n >\n {backgroundContextMenu}\n <SubNav.Header\n label={formatMessage({\n id: getTranslationKey('sidebar.title'),\n defaultMessage: 'Media library',\n })}\n />\n\n <SubNav.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" padding={3}>\n {/* Same row wrapper as a folder, so Home highlights across its whole\n width rather than only behind the label. */}\n <TreeRow\n ref={setHomeDropRef}\n data-native-context-menu\n alignItems=\"center\"\n // Level 0, so the indent contributes nothing — but the row's own\n // inset still applies, exactly as it does for a top-level folder.\n paddingLeft={`${ROW_INSET_LEFT_REM}rem`}\n paddingRight={`${ROW_INSET_RIGHT_REM}rem`}\n $isActive={isHomeActive}\n $isValidDropTarget={showHomeValidDropHighlight}\n $isInvalidDropCursor={showHomeInvalidDropCursor}\n $isMovePending={isMovePending}\n >\n <RowButton\n type=\"button\"\n $isActive={isHomeActive}\n $isValidDropTarget={showHomeValidDropHighlight}\n $isInvalidDropCursor={showHomeInvalidDropCursor}\n $isMovePending={isMovePending}\n aria-current={isHomeActive ? 'page' : undefined}\n onClick={() => onSelectFolder(null)}\n data-testid=\"folder-tree-home\"\n >\n <IconSlot>\n <House aria-hidden width=\"1.6rem\" height=\"1.6rem\" />\n </IconSlot>\n <Typography variant=\"omega\" fontWeight={isHomeActive ? 'semiBold' : 'regular'}>\n {homeLabel}\n </Typography>\n </RowButton>\n </TreeRow>\n\n <Box marginTop={4}>\n <Flex\n alignItems=\"center\"\n gap={1}\n paddingTop={1}\n paddingBottom={1}\n paddingLeft={2}\n paddingRight={2}\n >\n <IconSlot>\n <FolderIcon aria-hidden width=\"1.6rem\" height=\"1.6rem\" fill=\"neutral500\" />\n </IconSlot>\n <Typography\n variant=\"sigma\"\n textColor=\"neutral600\"\n style={{ textTransform: 'uppercase' }}\n >\n {formatMessage({\n id: getTranslationKey('sidebar.folders'),\n defaultMessage: 'Folders',\n })}\n </Typography>\n </Flex>\n\n {isLoading ? (\n // TODO: revisit loading state before revamp GA\n <Flex justifyContent=\"center\" padding={1} paddingTop={2}>\n <Loader>\n {formatMessage({\n id: getTranslationKey('sidebar.tree.loading'),\n defaultMessage: 'Loading folders...',\n })}\n </Loader>\n </Flex>\n ) : isError ? (\n // TODO: revisit error state before revamp GA\n <Box padding={1} paddingTop={2}>\n <Typography variant=\"pi\" textColor=\"danger600\">\n {formatMessage({\n id: getTranslationKey('sidebar.tree.error'),\n defaultMessage: 'Could not load folders.',\n })}\n </Typography>\n </Box>\n ) : folderStructure.length === 0 ? (\n // TODO: revisit empty state before revamp GA\n <Box padding={1} paddingTop={2}>\n <Typography variant=\"pi\" textColor=\"neutral500\">\n {formatMessage({\n id: getTranslationKey('sidebar.tree.empty'),\n defaultMessage: 'No folders yet',\n })}\n </Typography>\n </Box>\n ) : (\n <NavList>\n {folderStructure.map((node) =>\n collapsedBranch && node.id === collapsedBranch.root.id ? (\n <CollapsedBranchItem\n key={node.id}\n branch={collapsedBranch}\n {...sharedItemProps}\n />\n ) : (\n <FolderTreeItem\n key={node.id ?? node.name}\n node={node}\n // Top of the tree — these sit at the library root.\n parentId={null}\n level={0}\n ancestorNames={[]}\n {...sharedItemProps}\n />\n )\n )}\n </NavList>\n )}\n </Box>\n </Flex>\n </SubNav.Content>\n </SubNav.Main>\n );\n};\n"],"names":["RowButton","styled","button","theme","spaces","$isActive","colors","primary700","neutral800","borderRadius","$isMovePending","$isInvalidDropCursor","$isValidDropTarget","css","primary600","getOpenPathRadius","segment","radius","start","middle","end","TreeRow","Flex","$openPathSegment","primary100","neutral100","neutral150","useExpandedFolders","folderStructure","currentFolderId","expandedIds","setExpandedIds","useState","Set","useEffect","ancestors","findFolderPath","slice","map","folder","id","filter","length","prev","next","changed","has","add","toggleExpanded","useCallback","delete","expandFolder","isExpanded","NavList","ul","INDENT_PER_LEVEL_REM","MAX_VISUAL_LEVEL","getIndentRem","level","Math","min","ROW_INSET_LEFT_REM","ROW_INSET_RIGHT_REM","IconSlot","ChevronButton","IconButton","primary200","RotatingChevron","ChevronDown","$expanded","FolderTreeItemInner","name","parentId","folderChildren","showActiveFolder","onToggle","onExpand","onSelect","isMovePending","ancestorNames","isHiddenAncestor","openPathSegment","subtree","formatMessage","useIntl","hasChildren","isFolderExpanded","isActive","pathLabel","getTranslationKey","defaultMessage","join","droppable","setNodeRef","isOver","showValidDropHighlight","showInvalidDropCursor","useFolderTreeDroppable","handleExpand","menuPosition","setMenuPosition","rowButtonRef","useRef","useSpringLoadedExpand","canExpand","_jsxs","li","ref","data-native-context-menu","alignItems","paddingLeft","paddingRight","gap","onContextMenu","event","isEventFromWithin","preventDefault","x","clientX","y","clientY","_jsx","aria-hidden","label","disabled","onClick","stopPropagation","variant","withTooltip","aria-expanded","undefined","fill","Box","flex","minWidth","Tooltip","type","aria-current","data-testid","data-folder-id","Typography","ellipsis","fontWeight","FolderTreeRowMenu","returnFocusTo","current","onCloseMenu","child","FolderTreeItem","node","props","children","SummaryLabel","SummaryChevron","ChevronRight","CollapsedAncestors","branch","isOpen","onOpenChange","itemProps","listId","useId","open","rootName","root","hiddenNames","hidden","useDroppable","toFolderTreeSummaryId","aria-controls","More","textColor","count","index","_createElement","key","CollapsedBranchItem","setIsOpen","openedOn","setOpenedOn","ancestorNamesOfParent","parent","FOLDER_TREE_ROOT_SELECTOR","FolderTree","onSelectFolder","backgroundContextMenu","data","isLoading","isError","useGetFolderStructureQuery","useAssetsDndOptional","collapsedBranch","useMemo","getCollapsedBranch","restoreFocusRef","handleSelectFolder","folderId","document","activeElement","closest","body","querySelector","focus","sharedItemProps","isHomeActive","homeLabel","setHomeDropRef","showHomeValidDropHighlight","showHomeInvalidDropCursor","SubNav","Main","data-folder-tree-root","aria-label","Header","Content","direction","padding","House","width","height","marginTop","paddingTop","paddingBottom","FolderIcon","style","textTransform","justifyContent","Loader"],"mappings":"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"}