@strapi/upload 5.51.2 → 5.52.1

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 (253) hide show
  1. package/dist/admin/future/App.js +3 -3
  2. package/dist/admin/future/App.js.map +1 -1
  3. package/dist/admin/future/App.mjs +4 -4
  4. package/dist/admin/future/App.mjs.map +1 -1
  5. package/dist/admin/future/components/BetaNotice.js +72 -0
  6. package/dist/admin/future/components/BetaNotice.js.map +1 -0
  7. package/dist/admin/future/components/BetaNotice.mjs +70 -0
  8. package/dist/admin/future/components/BetaNotice.mjs.map +1 -0
  9. package/dist/admin/future/components/Drawer.js +16 -3
  10. package/dist/admin/future/components/Drawer.js.map +1 -1
  11. package/dist/admin/future/components/Drawer.mjs +16 -3
  12. package/dist/admin/future/components/Drawer.mjs.map +1 -1
  13. package/dist/admin/future/components/TruncatedText.js +76 -0
  14. package/dist/admin/future/components/TruncatedText.js.map +1 -0
  15. package/dist/admin/future/components/TruncatedText.mjs +74 -0
  16. package/dist/admin/future/components/TruncatedText.mjs.map +1 -0
  17. package/dist/admin/future/hooks/useAIMetadataEnabled.js +39 -0
  18. package/dist/admin/future/hooks/useAIMetadataEnabled.js.map +1 -0
  19. package/dist/admin/future/hooks/useAIMetadataEnabled.mjs +37 -0
  20. package/dist/admin/future/hooks/useAIMetadataEnabled.mjs.map +1 -0
  21. package/dist/admin/future/hooks/useTracking.js +57 -0
  22. package/dist/admin/future/hooks/useTracking.js.map +1 -0
  23. package/dist/admin/future/hooks/useTracking.mjs +53 -0
  24. package/dist/admin/future/hooks/useTracking.mjs.map +1 -0
  25. package/dist/admin/future/pages/Assets/AssetsPage.js +328 -139
  26. package/dist/admin/future/pages/Assets/AssetsPage.js.map +1 -1
  27. package/dist/admin/future/pages/Assets/AssetsPage.mjs +332 -143
  28. package/dist/admin/future/pages/Assets/AssetsPage.mjs.map +1 -1
  29. package/dist/admin/future/pages/Assets/components/ActionsMenuContent.js +46 -0
  30. package/dist/admin/future/pages/Assets/components/ActionsMenuContent.js.map +1 -0
  31. package/dist/admin/future/pages/Assets/components/ActionsMenuContent.mjs +44 -0
  32. package/dist/admin/future/pages/Assets/components/ActionsMenuContent.mjs.map +1 -0
  33. package/dist/admin/future/pages/Assets/components/AssetActionsMenu.js +328 -0
  34. package/dist/admin/future/pages/Assets/components/AssetActionsMenu.js.map +1 -0
  35. package/dist/admin/future/pages/Assets/components/AssetActionsMenu.mjs +326 -0
  36. package/dist/admin/future/pages/Assets/components/AssetActionsMenu.mjs.map +1 -0
  37. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.js +35 -14
  38. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.js.map +1 -1
  39. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.mjs +35 -14
  40. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.mjs.map +1 -1
  41. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js +74 -53
  42. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js.map +1 -1
  43. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs +74 -54
  44. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs.map +1 -1
  45. package/dist/admin/future/pages/Assets/components/AssetsGrid.js +92 -28
  46. package/dist/admin/future/pages/Assets/components/AssetsGrid.js.map +1 -1
  47. package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs +94 -30
  48. package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs.map +1 -1
  49. package/dist/admin/future/pages/Assets/components/AssetsSearchInput.js +26 -4
  50. package/dist/admin/future/pages/Assets/components/AssetsSearchInput.js.map +1 -1
  51. package/dist/admin/future/pages/Assets/components/AssetsSearchInput.mjs +27 -5
  52. package/dist/admin/future/pages/Assets/components/AssetsSearchInput.mjs.map +1 -1
  53. package/dist/admin/future/pages/Assets/components/AssetsTable.js +172 -60
  54. package/dist/admin/future/pages/Assets/components/AssetsTable.js.map +1 -1
  55. package/dist/admin/future/pages/Assets/components/AssetsTable.mjs +175 -63
  56. package/dist/admin/future/pages/Assets/components/AssetsTable.mjs.map +1 -1
  57. package/dist/admin/future/pages/Assets/components/BulkActionsBar.js +64 -132
  58. package/dist/admin/future/pages/Assets/components/BulkActionsBar.js.map +1 -1
  59. package/dist/admin/future/pages/Assets/components/BulkActionsBar.mjs +64 -132
  60. package/dist/admin/future/pages/Assets/components/BulkActionsBar.mjs.map +1 -1
  61. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.js +123 -76
  62. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.js.map +1 -1
  63. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.mjs +126 -79
  64. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.mjs.map +1 -1
  65. package/dist/admin/future/pages/Assets/components/BusyOverlay.js +36 -0
  66. package/dist/admin/future/pages/Assets/components/BusyOverlay.js.map +1 -0
  67. package/dist/admin/future/pages/Assets/components/BusyOverlay.mjs +34 -0
  68. package/dist/admin/future/pages/Assets/components/BusyOverlay.mjs.map +1 -0
  69. package/dist/admin/future/pages/Assets/components/DeleteItemsDialog.js +131 -0
  70. package/dist/admin/future/pages/Assets/components/DeleteItemsDialog.js.map +1 -0
  71. package/dist/admin/future/pages/Assets/components/DeleteItemsDialog.mjs +129 -0
  72. package/dist/admin/future/pages/Assets/components/DeleteItemsDialog.mjs.map +1 -0
  73. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.js +27 -17
  74. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.js.map +1 -1
  75. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.mjs +28 -18
  76. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.mjs.map +1 -1
  77. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.js +28 -31
  78. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.js.map +1 -1
  79. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.mjs +28 -31
  80. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.mjs.map +1 -1
  81. package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.js +10 -15
  82. package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.js.map +1 -1
  83. package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.mjs +10 -15
  84. package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.mjs.map +1 -1
  85. package/dist/admin/future/pages/Assets/components/FilterBadges.js +13 -4
  86. package/dist/admin/future/pages/Assets/components/FilterBadges.js.map +1 -1
  87. package/dist/admin/future/pages/Assets/components/FilterBadges.mjs +13 -4
  88. package/dist/admin/future/pages/Assets/components/FilterBadges.mjs.map +1 -1
  89. package/dist/admin/future/pages/Assets/components/FilterMenu.js +259 -63
  90. package/dist/admin/future/pages/Assets/components/FilterMenu.js.map +1 -1
  91. package/dist/admin/future/pages/Assets/components/FilterMenu.mjs +262 -66
  92. package/dist/admin/future/pages/Assets/components/FilterMenu.mjs.map +1 -1
  93. package/dist/admin/future/pages/Assets/components/FolderActionsMenu.js +146 -0
  94. package/dist/admin/future/pages/Assets/components/FolderActionsMenu.js.map +1 -0
  95. package/dist/admin/future/pages/Assets/components/FolderActionsMenu.mjs +144 -0
  96. package/dist/admin/future/pages/Assets/components/FolderActionsMenu.mjs.map +1 -0
  97. package/dist/admin/future/pages/Assets/components/{CreateFolderDialog.js → FolderFormDialog.js} +62 -16
  98. package/dist/admin/future/pages/Assets/components/FolderFormDialog.js.map +1 -0
  99. package/dist/admin/future/pages/Assets/components/{CreateFolderDialog.mjs → FolderFormDialog.mjs} +64 -18
  100. package/dist/admin/future/pages/Assets/components/FolderFormDialog.mjs.map +1 -0
  101. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.js +132 -229
  102. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.js.map +1 -1
  103. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.mjs +135 -232
  104. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.mjs.map +1 -1
  105. package/dist/admin/future/pages/Assets/components/SortMenu.js +14 -0
  106. package/dist/admin/future/pages/Assets/components/SortMenu.js.map +1 -1
  107. package/dist/admin/future/pages/Assets/components/SortMenu.mjs +14 -0
  108. package/dist/admin/future/pages/Assets/components/SortMenu.mjs.map +1 -1
  109. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.js +5 -0
  110. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.js.map +1 -1
  111. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.mjs +6 -1
  112. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.mjs.map +1 -1
  113. package/dist/admin/future/pages/Assets/hooks/useBusyAssets.js +47 -0
  114. package/dist/admin/future/pages/Assets/hooks/useBusyAssets.js.map +1 -0
  115. package/dist/admin/future/pages/Assets/hooks/useBusyAssets.mjs +44 -0
  116. package/dist/admin/future/pages/Assets/hooks/useBusyAssets.mjs.map +1 -0
  117. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.js +203 -62
  118. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.js.map +1 -1
  119. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.mjs +204 -63
  120. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.mjs.map +1 -1
  121. package/dist/admin/future/pages/Assets/hooks/useInfiniteScrollSentinel.js +75 -0
  122. package/dist/admin/future/pages/Assets/hooks/useInfiniteScrollSentinel.js.map +1 -0
  123. package/dist/admin/future/pages/Assets/hooks/useInfiniteScrollSentinel.mjs +73 -0
  124. package/dist/admin/future/pages/Assets/hooks/useInfiniteScrollSentinel.mjs.map +1 -0
  125. package/dist/admin/future/pages/Assets/utils/selection.js +17 -0
  126. package/dist/admin/future/pages/Assets/utils/selection.js.map +1 -1
  127. package/dist/admin/future/pages/Assets/utils/selection.mjs +17 -1
  128. package/dist/admin/future/pages/Assets/utils/selection.mjs.map +1 -1
  129. package/dist/admin/future/services/api.js +31 -8
  130. package/dist/admin/future/services/api.js.map +1 -1
  131. package/dist/admin/future/services/api.mjs +31 -8
  132. package/dist/admin/future/services/api.mjs.map +1 -1
  133. package/dist/admin/future/services/assets.js +22 -23
  134. package/dist/admin/future/services/assets.js.map +1 -1
  135. package/dist/admin/future/services/assets.mjs +22 -23
  136. package/dist/admin/future/services/assets.mjs.map +1 -1
  137. package/dist/admin/future/services/folders.js +37 -2
  138. package/dist/admin/future/services/folders.js.map +1 -1
  139. package/dist/admin/future/services/folders.mjs +37 -3
  140. package/dist/admin/future/services/folders.mjs.map +1 -1
  141. package/dist/admin/future/utils/buildDragSetFromSelection.js +7 -5
  142. package/dist/admin/future/utils/buildDragSetFromSelection.js.map +1 -1
  143. package/dist/admin/future/utils/buildDragSetFromSelection.mjs +7 -5
  144. package/dist/admin/future/utils/buildDragSetFromSelection.mjs.map +1 -1
  145. package/dist/admin/future/utils/formatMoveSuccessMessage.js +12 -1
  146. package/dist/admin/future/utils/formatMoveSuccessMessage.js.map +1 -1
  147. package/dist/admin/future/utils/formatMoveSuccessMessage.mjs +12 -1
  148. package/dist/admin/future/utils/formatMoveSuccessMessage.mjs.map +1 -1
  149. package/dist/admin/future/utils/getRelationId.js +24 -0
  150. package/dist/admin/future/utils/getRelationId.js.map +1 -0
  151. package/dist/admin/future/utils/getRelationId.mjs +22 -0
  152. package/dist/admin/future/utils/getRelationId.mjs.map +1 -0
  153. package/dist/admin/future/utils/isEventFromWithin.js +14 -0
  154. package/dist/admin/future/utils/isEventFromWithin.js.map +1 -0
  155. package/dist/admin/future/utils/isEventFromWithin.mjs +12 -0
  156. package/dist/admin/future/utils/isEventFromWithin.mjs.map +1 -0
  157. package/dist/admin/future/utils/itemLocations.js +40 -0
  158. package/dist/admin/future/utils/itemLocations.js.map +1 -0
  159. package/dist/admin/future/utils/itemLocations.mjs +36 -0
  160. package/dist/admin/future/utils/itemLocations.mjs.map +1 -0
  161. package/dist/admin/future/utils/itemSource.js +36 -0
  162. package/dist/admin/future/utils/itemSource.js.map +1 -0
  163. package/dist/admin/future/utils/itemSource.mjs +32 -0
  164. package/dist/admin/future/utils/itemSource.mjs.map +1 -0
  165. package/dist/admin/hooks/useAIMetadataJob.js +1 -1
  166. package/dist/admin/hooks/useAIMetadataJob.js.map +1 -1
  167. package/dist/admin/hooks/useAIMetadataJob.mjs +1 -1
  168. package/dist/admin/hooks/useAIMetadataJob.mjs.map +1 -1
  169. package/dist/admin/index.js +11 -17
  170. package/dist/admin/index.js.map +1 -1
  171. package/dist/admin/index.mjs +12 -18
  172. package/dist/admin/index.mjs.map +1 -1
  173. package/dist/admin/pages/SettingsPage/SettingsPage.js +2 -2
  174. package/dist/admin/pages/SettingsPage/SettingsPage.js.map +1 -1
  175. package/dist/admin/pages/SettingsPage/SettingsPage.mjs +2 -2
  176. package/dist/admin/pages/SettingsPage/SettingsPage.mjs.map +1 -1
  177. package/dist/admin/src/future/App.d.ts +1 -1
  178. package/dist/admin/src/future/components/BetaNotice.d.ts +11 -0
  179. package/dist/admin/src/future/components/Drawer.d.ts +5 -1
  180. package/dist/admin/src/future/components/TruncatedText.d.ts +32 -0
  181. package/dist/admin/src/future/hooks/useAIMetadataEnabled.d.ts +26 -0
  182. package/dist/admin/src/future/hooks/useTracking.d.ts +29 -0
  183. package/dist/admin/src/future/pages/Assets/components/ActionsMenuContent.d.ts +33 -0
  184. package/dist/admin/src/future/pages/Assets/components/AssetActionsMenu.d.ts +26 -0
  185. package/dist/admin/src/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.d.ts +16 -0
  186. package/dist/admin/src/future/pages/Assets/components/BulkActionsBar.d.ts +8 -1
  187. package/dist/admin/src/future/pages/Assets/components/BulkMoveDialog.d.ts +17 -6
  188. package/dist/admin/src/future/pages/Assets/components/BusyOverlay.d.ts +9 -0
  189. package/dist/admin/src/future/pages/Assets/components/DeleteItemsDialog.d.ts +27 -0
  190. package/dist/admin/src/future/pages/Assets/components/Dnd/AssetsDndProvider.d.ts +8 -1
  191. package/dist/admin/src/future/pages/Assets/components/Dnd/buildDragSet.d.ts +18 -3
  192. package/dist/admin/src/future/pages/Assets/components/Dnd/useAssetDnd.d.ts +2 -1
  193. package/dist/admin/src/future/pages/Assets/components/FilterBadges.d.ts +3 -1
  194. package/dist/admin/src/future/pages/Assets/components/FilterMenu.d.ts +4 -0
  195. package/dist/admin/src/future/pages/Assets/components/FolderActionsMenu.d.ts +21 -0
  196. package/dist/admin/src/future/pages/Assets/components/FolderFormDialog.d.ts +16 -0
  197. package/dist/admin/src/future/pages/Assets/hooks/useAssetSelection.d.ts +2 -0
  198. package/dist/admin/src/future/pages/Assets/hooks/useBusyAssets.d.ts +38 -0
  199. package/dist/admin/src/future/pages/Assets/hooks/useInfiniteAssets.d.ts +20 -6
  200. package/dist/admin/src/future/pages/Assets/hooks/useInfiniteScrollSentinel.d.ts +41 -0
  201. package/dist/admin/src/future/pages/Assets/utils/selection.d.ts +10 -0
  202. package/dist/admin/src/future/services/api.d.ts +6 -7
  203. package/dist/admin/src/future/services/folders.d.ts +6 -1
  204. package/dist/admin/src/future/utils/buildDragSetFromSelection.d.ts +4 -3
  205. package/dist/admin/src/future/utils/formatMoveSuccessMessage.d.ts +7 -1
  206. package/dist/admin/src/future/utils/getRelationId.d.ts +11 -0
  207. package/dist/admin/src/future/utils/isEventFromWithin.d.ts +11 -0
  208. package/dist/admin/src/future/utils/itemLocations.d.ts +31 -0
  209. package/dist/admin/src/future/utils/itemSource.d.ts +22 -0
  210. package/dist/admin/translations/en.json.js +25 -4
  211. package/dist/admin/translations/en.json.js.map +1 -1
  212. package/dist/admin/translations/en.json.mjs +25 -4
  213. package/dist/admin/translations/en.json.mjs.map +1 -1
  214. package/dist/server/controllers/admin-file.js +27 -9
  215. package/dist/server/controllers/admin-file.js.map +1 -1
  216. package/dist/server/controllers/admin-file.mjs +27 -9
  217. package/dist/server/controllers/admin-file.mjs.map +1 -1
  218. package/dist/server/controllers/admin-upload.js +24 -8
  219. package/dist/server/controllers/admin-upload.js.map +1 -1
  220. package/dist/server/controllers/admin-upload.mjs +24 -8
  221. package/dist/server/controllers/admin-upload.mjs.map +1 -1
  222. package/dist/server/routes/admin.js +41 -21
  223. package/dist/server/routes/admin.js.map +1 -1
  224. package/dist/server/routes/admin.mjs +41 -21
  225. package/dist/server/routes/admin.mjs.map +1 -1
  226. package/dist/server/services/ai-metadata.js.map +1 -1
  227. package/dist/server/services/ai-metadata.mjs.map +1 -1
  228. package/dist/server/services/image-manipulation.js.map +1 -1
  229. package/dist/server/services/image-manipulation.mjs.map +1 -1
  230. package/dist/server/src/controllers/admin-file.d.ts +29 -8
  231. package/dist/server/src/controllers/admin-file.d.ts.map +1 -1
  232. package/dist/server/src/controllers/admin-upload.d.ts +20 -4
  233. package/dist/server/src/controllers/admin-upload.d.ts.map +1 -1
  234. package/dist/server/src/controllers/index.d.ts +4 -4
  235. package/dist/server/src/index.d.ts +4 -4
  236. package/dist/server/src/routes/admin.d.ts.map +1 -1
  237. package/dist/server/src/services/ai-metadata.d.ts +2 -2
  238. package/dist/server/src/services/ai-metadata.d.ts.map +1 -1
  239. package/dist/server/src/services/image-manipulation.d.ts +0 -5
  240. package/dist/server/src/services/image-manipulation.d.ts.map +1 -1
  241. package/dist/shared/contracts/ai-metadata-jobs.d.ts +10 -32
  242. package/dist/shared/contracts/ai-metadata-jobs.d.ts.map +1 -1
  243. package/dist/shared/contracts/files.d.ts +10 -10
  244. package/dist/shared/contracts/files.d.ts.map +1 -1
  245. package/package.json +9 -9
  246. package/dist/admin/future/pages/Assets/components/CreateFolderDialog.js.map +0 -1
  247. package/dist/admin/future/pages/Assets/components/CreateFolderDialog.mjs.map +0 -1
  248. package/dist/admin/future/pages/Assets/components/FolderTree/filterFolderTree.js +0 -33
  249. package/dist/admin/future/pages/Assets/components/FolderTree/filterFolderTree.js.map +0 -1
  250. package/dist/admin/future/pages/Assets/components/FolderTree/filterFolderTree.mjs +0 -31
  251. package/dist/admin/future/pages/Assets/components/FolderTree/filterFolderTree.mjs.map +0 -1
  252. package/dist/admin/src/future/pages/Assets/components/CreateFolderDialog.d.ts +0 -8
  253. package/dist/admin/src/future/pages/Assets/components/FolderTree/filterFolderTree.d.ts +0 -16
@@ -8,33 +8,39 @@ var designSystem = require('@strapi/design-system');
8
8
  var icons = require('@strapi/icons');
9
9
  var reactIntl = require('react-intl');
10
10
  var styledComponents = require('styled-components');
11
- var useAiAvailability = require('../../../hooks/useAiAvailability.js');
11
+ var typeFromMime = require('../../../utils/typeFromMime.js');
12
+ var BetaNotice = require('../../components/BetaNotice.js');
13
+ var useAIMetadataEnabled = require('../../hooks/useAIMetadataEnabled.js');
12
14
  var useMediaLibraryPermissions = require('../../hooks/useMediaLibraryPermissions.js');
15
+ var useTracking = require('../../hooks/useTracking.js');
13
16
  var api = require('../../services/api.js');
14
17
  var folders = require('../../services/folders.js');
15
18
  var settings = require('../../services/settings.js');
19
+ var itemLocations = require('../../utils/itemLocations.js');
16
20
  var translations = require('../../utils/translations.js');
17
21
  var AssetDetailsDrawer = require('./components/AssetDetails/AssetDetailsDrawer.js');
18
22
  var AssetsGrid = require('./components/AssetsGrid.js');
19
23
  var AssetsSearchInput = require('./components/AssetsSearchInput.js');
20
24
  var AssetsTable = require('./components/AssetsTable.js');
21
25
  var BulkActionsBar = require('./components/BulkActionsBar.js');
22
- var CreateFolderDialog = require('./components/CreateFolderDialog.js');
23
26
  var AssetsDndProvider = require('./components/Dnd/AssetsDndProvider.js');
24
27
  var UploadDropZone = require('./components/DropZone/UploadDropZone.js');
25
28
  var UploadDropZoneContext = require('./components/DropZone/UploadDropZoneContext.js');
26
29
  var EmptyState = require('./components/EmptyState.js');
27
30
  var FilterBadges = require('./components/FilterBadges.js');
28
31
  var FilterMenu = require('./components/FilterMenu.js');
32
+ var FolderFormDialog = require('./components/FolderFormDialog.js');
29
33
  var FolderTree = require('./components/FolderTree/FolderTree.js');
30
34
  var ImportFromUrlDialog = require('./components/ImportFromUrlDialog.js');
31
35
  var SortMenu = require('./components/SortMenu.js');
32
36
  var constants = require('./constants.js');
33
37
  var useAssetSearch = require('./hooks/useAssetSearch.js');
34
38
  var useAssetSelection = require('./hooks/useAssetSelection.js');
39
+ var useBusyAssets = require('./hooks/useBusyAssets.js');
35
40
  var useFolderInfo = require('./hooks/useFolderInfo.js');
36
41
  var useFolderNavigation = require('./hooks/useFolderNavigation.js');
37
42
  var useInfiniteAssets = require('./hooks/useInfiniteAssets.js');
43
+ var useInfiniteScrollSentinel = require('./hooks/useInfiniteScrollSentinel.js');
38
44
  var useListFilters = require('./hooks/useListFilters.js');
39
45
  var useListSort = require('./hooks/useListSort.js');
40
46
  var buildAssetFilters = require('./utils/buildAssetFilters.js');
@@ -61,8 +67,18 @@ function _interopNamespace(e) {
61
67
 
62
68
  var ToggleGroup__namespace = /*#__PURE__*/_interopNamespace(ToggleGroup);
63
69
 
70
+ // The negative bottom margin shrinks the trigger area by a pixel so the 1px
71
+ // sentinel sitting exactly at the fold (when a page's rows happen to fill the
72
+ // viewport) reads as "not visible" and doesn't pull an extra page. It still
73
+ // triggers as soon as the sentinel scrolls a hair into view. Tune the bottom
74
+ // value if the list over- or under-fetches near the fold.
64
75
  const INTERSECTION_OPTIONS = {
65
- threshold: 0.1
76
+ threshold: 0,
77
+ rootMargin: '0px 0px -1px 0px'
78
+ };
79
+ // Module-level so the header sentinel's observer isn't rebuilt every render.
80
+ const HEADER_SENTINEL_OPTIONS = {
81
+ threshold: 0
66
82
  };
67
83
  const ITEM_COUNT_MESSAGE = {
68
84
  id: translations.getTranslationKey('header.content.item-count'),
@@ -91,7 +107,7 @@ const getSearchResultsCountMessage = (numberFolders, numberAssets)=>{
91
107
  }
92
108
  return SEARCH_RESULTS_COUNT_MESSAGES.both;
93
109
  };
94
- const AssetsView = ({ view, folders, isLoadingFolders, assets, isLoadingAssets, isFetchingMore, hasNextPage, fetchNextPage, error, searchQuery, assetsSort, foldersPosition, hasActiveFilters, onClearFilters, onAssetItemClick, onAddAssets, canAddAssets, onClearSearch })=>{
110
+ const AssetsView = ({ view, folders, isLoadingFolders, assets, isLoadingAssets, isFetchingMore, hasNextPage, fetchNextPage, error, locations, searchQuery, assetsSort, foldersPosition, hasActiveFilters, onClearFilters, onAssetItemClick, onAddAssets, canAddAssets, onClearSearch })=>{
95
111
  const { formatMessage } = reactIntl.useIntl();
96
112
  const isGridView = view === constants.viewOptions.GRID;
97
113
  const isLoading = isLoadingAssets || isLoadingFolders;
@@ -111,15 +127,12 @@ const AssetsView = ({ view, folders, isLoadingFolders, assets, isLoadingAssets,
111
127
  assetsSort,
112
128
  hasNextPage
113
129
  ]);
114
- const loadMoreRef = strapiAdmin.useElementOnScreen(React.useCallback((isVisible)=>{
115
- if (isVisible && hasNextPage && !isFetchingMore) {
116
- fetchNextPage();
117
- }
118
- }, [
130
+ const loadMoreRef = useInfiniteScrollSentinel.useInfiniteScrollSentinel({
119
131
  hasNextPage,
120
132
  isFetchingMore,
121
- fetchNextPage
122
- ]), INTERSECTION_OPTIONS);
133
+ onLoadMore: fetchNextPage,
134
+ options: INTERSECTION_OPTIONS
135
+ });
123
136
  if (isLoading) {
124
137
  return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
125
138
  justifyContent: "center",
@@ -185,7 +198,8 @@ const AssetsView = ({ view, folders, isLoadingFolders, assets, isLoadingAssets,
185
198
  })
186
199
  }),
187
200
  /*#__PURE__*/ jsxRuntime.jsx(BulkActionsBar.BulkActionsBar, {
188
- assets: assets
201
+ assets: assets,
202
+ locations: locations
189
203
  })
190
204
  ]
191
205
  });
@@ -245,13 +259,122 @@ const StyledToggleItem = styledComponents.styled(ToggleGroup__namespace.Item)`
245
259
  height: 1.6rem;
246
260
  }
247
261
  `;
248
- const HeaderWrapper = styledComponents.styled(designSystem.Box)`
249
- [data-strapi-header] {
250
- background: ${({ theme })=>theme.colors.neutral0};
262
+ // A single sticky header — same layout scrolled or not, so the toolbar
263
+ // alignment can't reflow the way the shared sticky header did. Once the list
264
+ // scrolls under it, it shrinks (reduced vertical padding + a shadow to lift it
265
+ // off the rows), like the sticky headers elsewhere in the admin. Horizontal
266
+ // padding stays responsive (passed as props); only the vertical rhythm + shadow
267
+ // change here so they can animate.
268
+ const StickyHeader = styledComponents.styled(designSystem.Box)`
269
+ position: sticky;
270
+ top: 0;
271
+ z-index: 2;
272
+ /* Transparent at rest (the grey page shows through); an opaque background +
273
+ shadow appear only once it sticks and content scrolls under it. */
274
+ background: transparent;
275
+ /* Horizontal padding matches the list's default spacing (Layouts.Content /
276
+ RESPONSIVE_DEFAULT_SPACING: 4 / 6 / 10) so the header lines up with the rows. */
277
+ padding: ${({ theme })=>`${theme.spaces[6]} ${theme.spaces[4]}`};
278
+ transition:
279
+ padding 0.2s ease,
280
+ background 0.2s ease,
281
+ box-shadow 0.2s ease;
251
282
 
252
- h1 {
253
- font-size: 1.8rem;
254
- }
283
+ ${({ theme })=>theme.breakpoints.medium} {
284
+ padding-left: ${({ theme })=>theme.spaces[6]};
285
+ padding-right: ${({ theme })=>theme.spaces[6]};
286
+ }
287
+ ${({ theme })=>theme.breakpoints.large} {
288
+ padding-left: ${({ theme })=>theme.spaces[10]};
289
+ padding-right: ${({ theme })=>theme.spaces[10]};
290
+ }
291
+
292
+ /* Compacting is scoped to medium and up, where the header actually sticks. On
293
+ mobile it scrolls away with the list, so shrinking it mid-scroll animated a
294
+ header the user could no longer see — the transition read as a glitch on the
295
+ way back up rather than as the header settling. */
296
+ ${({ $compact, theme })=>$compact && styledComponents.css`
297
+ ${theme.breakpoints.medium} {
298
+ padding-top: ${theme.spaces[3]};
299
+ padding-bottom: ${theme.spaces[3]};
300
+ padding-left: ${theme.spaces[4]};
301
+ padding-right: ${theme.spaces[4]};
302
+ background: ${theme.colors.neutral0};
303
+ box-shadow: ${theme.shadows.tableShadow};
304
+ }
305
+ ${theme.breakpoints.large} {
306
+ padding-left: ${theme.spaces[6]};
307
+ padding-right: ${theme.spaces[6]};
308
+ }
309
+ `}
310
+ `;
311
+ // New button aligns with the title, not the toolbar.
312
+ const TitleRow = styledComponents.styled(designSystem.Flex)`
313
+ justify-content: space-between;
314
+ align-items: flex-start;
315
+ gap: ${({ theme })=>theme.spaces[4]};
316
+
317
+ h1 {
318
+ font-size: 1.8rem;
319
+ }
320
+ `;
321
+ // Two groups in source order (Filter, Search / Sort, Toggle). Mobile: stacked —
322
+ // Filter+Search on row 1, Sort+Toggle on row 2. Desktop (large+): one row,
323
+ // Filter+Search on the left, Sort+Toggle pushed right.
324
+ const Toolbar = styledComponents.styled(designSystem.Flex)`
325
+ margin-top: ${({ theme })=>theme.spaces[5]};
326
+ flex-direction: column;
327
+ align-items: stretch;
328
+ gap: ${({ theme })=>theme.spaces[3]};
329
+ transition: margin-top 0.2s ease;
330
+
331
+ /* Tightening the gap to the title belongs to the compact header, so it is
332
+ scoped to the breakpoints that compact. On mobile the header never sticks,
333
+ and this was the last thing still shifting as the page scrolled. */
334
+ ${({ $compact, theme })=>$compact && styledComponents.css`
335
+ ${theme.breakpoints.medium} {
336
+ margin-top: ${theme.spaces[2]};
337
+ }
338
+ `}
339
+
340
+ ${({ theme })=>theme.breakpoints.large} {
341
+ flex-direction: row;
342
+ align-items: center;
343
+ justify-content: space-between;
344
+ }
345
+ `;
346
+ const ToolbarGroup = styledComponents.styled(designSystem.Flex)`
347
+ align-items: center;
348
+ gap: ${({ theme })=>theme.spaces[3]};
349
+ `;
350
+ // Filter + Search. On mobile the group fills the row (search grows into it);
351
+ // on desktop it keeps its intrinsic size and sits at the left edge.
352
+ const FilterSearchGroup = styledComponents.styled(ToolbarGroup)``;
353
+ // Sort + Toggle. Mobile: spread across the row (Sort left, Toggle right).
354
+ // Desktop: sit together at the right edge (space-between on the toolbar leaves
355
+ // the empty space between the search and here).
356
+ const SortToggleGroup = styledComponents.styled(ToolbarGroup)`
357
+ justify-content: space-between;
358
+
359
+ ${({ theme })=>theme.breakpoints.large} {
360
+ justify-content: flex-end;
361
+ flex: 0 0 auto;
362
+ }
363
+ `;
364
+ // Fills the row on mobile; intrinsic width on desktop.
365
+ const SearchSlot = styledComponents.styled(designSystem.Box)`
366
+ flex: 1;
367
+
368
+ ${({ theme })=>theme.breakpoints.large} {
369
+ flex: 0 1 auto;
370
+ }
371
+ `;
372
+ // Toggle labels are hidden below desktop — icons only (buttons keep aria-label).
373
+ const ToggleLabel = styledComponents.styled.span`
374
+ display: none;
375
+
376
+ ${({ theme })=>theme.breakpoints.large} {
377
+ display: inline;
255
378
  }
256
379
  `;
257
380
  const AssetsPage = ()=>{
@@ -284,7 +407,7 @@ const AssetsPage = ()=>{
284
407
  [
285
408
  listFilters.serialized
286
409
  ]);
287
- const { assets, pagination, isLoading: isLoadingAssets, isFetchingMore, hasNextPage, fetchNextPage, error: assetsError } = useInfiniteAssets.useInfiniteAssets({
410
+ const { assets, subscribers: assetPageSubscribers, pagination, isLoading: isLoadingAssets, isFetchingMore, hasNextPage, fetchNextPage, error: assetsError } = useInfiniteAssets.useInfiniteAssets({
288
411
  // The real folder is passed even while searching: the service drops the folder
289
412
  // filter when `search` is set, so results are still global. List filters
290
413
  // compose with both modes.
@@ -292,7 +415,6 @@ const AssetsPage = ()=>{
292
415
  search: searchQuery || undefined,
293
416
  sort: listSort.assetsSort,
294
417
  filters: builtFilters.fileClauses,
295
- filtersKey: listFilters.serialized,
296
418
  enabled: builtFilters.showFiles
297
419
  });
298
420
  const { data: fetchedFolders = [], isLoading: isLoadingFolders } = folders.useGetFoldersQuery({
@@ -308,6 +430,13 @@ const AssetsPage = ()=>{
308
430
  builtFilters.showFolders,
309
431
  fetchedFolders
310
432
  ]);
433
+ // Both move affordances (drag and the bulk bar) resolve each item's parent
434
+ // from the rows on screen — while searching, results are global and the
435
+ // folder currently open says nothing about where an item lives.
436
+ const itemLocations$1 = React.useMemo(()=>itemLocations.buildItemLocations(assets, folders$1), [
437
+ assets,
438
+ folders$1
439
+ ]);
311
440
  const itemCountLabel = formatMessage(ITEM_COUNT_MESSAGE, {
312
441
  count: itemCount
313
442
  });
@@ -343,6 +472,12 @@ const AssetsPage = ()=>{
343
472
  // Refs
344
473
  const fileInputRef = React.useRef(null);
345
474
  const uploadDropZoneRef = React.useRef(null);
475
+ // Shrink the sticky header once the list scrolls beneath it. A zero-height
476
+ // sentinel sits at the very top of the scroll content; when it leaves the
477
+ // viewport we're scrolled → compact.
478
+ const [isHeaderCompact, setIsHeaderCompact] = React.useState(false);
479
+ const onHeaderSentinelVisibility = React.useCallback((isVisible)=>setIsHeaderCompact(!isVisible), []);
480
+ const headerSentinelRef = strapiAdmin.useElementOnScreen(onHeaderSentinelVisibility, HEADER_SENTINEL_OPTIONS);
346
481
  // Upload handlers
347
482
  const [uploadFiles] = api.useUploadFilesMutation();
348
483
  const [uploadFromUrls] = api.useUploadFromUrlsMutation();
@@ -351,10 +486,24 @@ const AssetsPage = ()=>{
351
486
  // server asked for.
352
487
  const { data: settings$1 } = settings.useGetUploadSettingsQuery();
353
488
  const concurrency = settings$1?.data?.concurrentUploadRequests ?? 1;
354
- // Drives the post-upload AI metadata phase shown per row in the progress dialog.
355
- const { isEnabled: isAiMetadataEnabled } = useAiAvailability.useAIAvailability();
489
+ // Drives the post-upload AI metadata phase shown per row in the progress
490
+ // dialog. No mime argument: the files are not known until they are picked,
491
+ // and the server filters the batch on the same allowlist anyway.
492
+ const isAiMetadataEnabled = useAIMetadataEnabled.useAIMetadataEnabled();
493
+ const { trackUsage } = useTracking.useTracking();
356
494
  const uploadFilesToFolder = async (files, folderId)=>{
357
495
  if (files.length === 0) return;
496
+ // Mirror the legacy `willAddMediaLibraryAssets` payload: the count of files
497
+ // about to upload, broken down by asset type.
498
+ const assetsCountByType = files.reduce((acc, file)=>{
499
+ const type = typeFromMime.typeFromMime(file.type);
500
+ acc[type] = (acc[type] ?? 0) + 1;
501
+ return acc;
502
+ }, {});
503
+ trackUsage('willAddMediaLibraryAssets', {
504
+ location: useTracking.MEDIA_LIBRARY_LOCATION,
505
+ ...assetsCountByType
506
+ });
358
507
  const formData = new FormData();
359
508
  const fileInfoArray = [];
360
509
  files.forEach((file)=>{
@@ -384,6 +533,10 @@ const AssetsPage = ()=>{
384
533
  const handleFileChange = async (e)=>{
385
534
  const files = e.target.files;
386
535
  if (files && files.length > 0) {
536
+ trackUsage('didSelectFile', {
537
+ source: 'computer',
538
+ location: useTracking.MEDIA_LIBRARY_LOCATION
539
+ });
387
540
  await uploadFilesToFolder(Array.from(files), currentFolderId);
388
541
  }
389
542
  e.target.value = '';
@@ -392,9 +545,22 @@ const AssetsPage = ()=>{
392
545
  // Defence in depth: the provider is `disabled` without `assets.create`
393
546
  // (so onDrop won't fire), but guard here too in case it's ever wired live.
394
547
  if (!canCreate) return;
548
+ trackUsage('didSelectFile', {
549
+ source: 'computer',
550
+ location: useTracking.MEDIA_LIBRARY_LOCATION
551
+ });
395
552
  await uploadFilesToFolder(files, currentFolderId);
396
553
  };
397
554
  const handleUrlUpload = async (urls)=>{
555
+ trackUsage('didSelectFile', {
556
+ source: 'url',
557
+ location: useTracking.MEDIA_LIBRARY_LOCATION
558
+ });
559
+ // Counts-by-type aren't available client-side for the URL flow (the server
560
+ // fetches the files), so this fires the event with location only.
561
+ trackUsage('willAddMediaLibraryAssets', {
562
+ location: useTracking.MEDIA_LIBRARY_LOCATION
563
+ });
398
564
  try {
399
565
  await uploadFromUrls({
400
566
  urls,
@@ -421,93 +587,105 @@ const AssetsPage = ()=>{
421
587
  disabled: !canCreate,
422
588
  children: /*#__PURE__*/ jsxRuntime.jsx(useAssetSelection.AssetSelectionProvider, {
423
589
  disabled: !canUpdate,
424
- children: /*#__PURE__*/ jsxRuntime.jsxs(AssetsDndProvider.AssetsDndProvider, {
425
- children: [
426
- /*#__PURE__*/ jsxRuntime.jsx(ClearSelectionOnChange, {
427
- listQueryKey: listQueryKey$1
428
- }),
429
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
430
- ref: uploadDropZoneRef,
431
- children: /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Layouts.Root, {
432
- minHeight: "100vh",
433
- background: "neutral0",
590
+ children: /*#__PURE__*/ jsxRuntime.jsx(useBusyAssets.BusyAssetsProvider, {
591
+ children: /*#__PURE__*/ jsxRuntime.jsxs(AssetsDndProvider.AssetsDndProvider, {
592
+ locations: itemLocations$1,
593
+ children: [
594
+ /*#__PURE__*/ jsxRuntime.jsx(ClearSelectionOnChange, {
595
+ listQueryKey: listQueryKey$1
596
+ }),
597
+ /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Layouts.Root, {
434
598
  sideNav: /*#__PURE__*/ jsxRuntime.jsx(FolderTree.FolderTree, {
435
599
  currentFolderId: currentFolderId,
436
600
  showActiveFolder: !isSearching,
437
601
  onSelectFolder: navigateToFolderId
438
602
  }),
439
- children: [
440
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.VisuallyHidden, {
441
- children: /*#__PURE__*/ jsxRuntime.jsx("input", {
442
- type: "file",
443
- ref: fileInputRef,
444
- onChange: handleFileChange,
445
- multiple: true
446
- })
447
- }),
448
- /*#__PURE__*/ jsxRuntime.jsx(HeaderWrapper, {
449
- children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Layouts.Header, {
450
- title: pageHeaderTitle,
451
- primaryAction: canCreate && /*#__PURE__*/ jsxRuntime.jsxs(designSystem.SimpleMenu, {
452
- popoverPlacement: "bottom-end",
453
- variant: "default",
454
- endIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.ChevronDown, {}),
455
- label: formatMessage({
456
- id: translations.getTranslationKey('new'),
457
- defaultMessage: 'New'
458
- }),
459
- children: [
460
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.MenuItem, {
461
- onSelect: ()=>setIsCreateFolderDialogOpen(true),
462
- startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Folder, {}),
463
- children: formatMessage({
464
- id: translations.getTranslationKey('folder.create.title'),
465
- defaultMessage: 'New folder'
466
- })
467
- }),
468
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.MenuItem, {
469
- onSelect: handleFileSelect,
470
- startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Files, {}),
471
- children: formatMessage({
472
- id: translations.getTranslationKey('import-files'),
473
- defaultMessage: 'Import files'
474
- })
475
- }),
476
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.MenuItem, {
477
- onSelect: ()=>setIsUrlDialogOpen(true),
478
- startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Link, {}),
479
- children: formatMessage({
480
- id: translations.getTranslationKey('import-from-url'),
481
- defaultMessage: 'Import from URL'
482
- })
483
- })
484
- ]
603
+ children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Page.Main, {
604
+ children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Box, {
605
+ ref: uploadDropZoneRef,
606
+ children: [
607
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.VisuallyHidden, {
608
+ children: /*#__PURE__*/ jsxRuntime.jsx("input", {
609
+ type: "file",
610
+ ref: fileInputRef,
611
+ onChange: handleFileChange,
612
+ multiple: true
613
+ })
614
+ }),
615
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
616
+ ref: headerSentinelRef,
617
+ height: 0,
618
+ "aria-hidden": true
485
619
  }),
486
- subtitle: /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
620
+ /*#__PURE__*/ jsxRuntime.jsxs(StickyHeader, {
621
+ $compact: isHeaderCompact,
487
622
  children: [
488
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
489
- justifyContent: "space-between",
490
- alignItems: "center",
491
- gap: 4,
492
- width: "100%",
623
+ /*#__PURE__*/ jsxRuntime.jsxs(TitleRow, {
624
+ children: [
625
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
626
+ variant: "alpha",
627
+ tag: "h1",
628
+ children: pageHeaderTitle
629
+ }),
630
+ canCreate && /*#__PURE__*/ jsxRuntime.jsxs(designSystem.SimpleMenu, {
631
+ popoverPlacement: "bottom-end",
632
+ variant: "default",
633
+ endIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.ChevronDown, {}),
634
+ label: formatMessage({
635
+ id: translations.getTranslationKey('new'),
636
+ defaultMessage: 'New'
637
+ }),
638
+ children: [
639
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.MenuItem, {
640
+ onSelect: ()=>setIsCreateFolderDialogOpen(true),
641
+ startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Folder, {}),
642
+ children: formatMessage({
643
+ id: translations.getTranslationKey('folder.create.title'),
644
+ defaultMessage: 'New folder'
645
+ })
646
+ }),
647
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.MenuItem, {
648
+ onSelect: handleFileSelect,
649
+ startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Files, {}),
650
+ children: formatMessage({
651
+ id: translations.getTranslationKey('import-files'),
652
+ defaultMessage: 'Import files'
653
+ })
654
+ }),
655
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.MenuItem, {
656
+ onSelect: ()=>setIsUrlDialogOpen(true),
657
+ startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Link, {}),
658
+ children: formatMessage({
659
+ id: translations.getTranslationKey('import-from-url'),
660
+ defaultMessage: 'Import from URL'
661
+ })
662
+ })
663
+ ]
664
+ })
665
+ ]
666
+ }),
667
+ /*#__PURE__*/ jsxRuntime.jsxs(Toolbar, {
668
+ $compact: isHeaderCompact,
493
669
  children: [
494
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
495
- gap: 4,
496
- alignItems: "center",
670
+ /*#__PURE__*/ jsxRuntime.jsxs(FilterSearchGroup, {
497
671
  children: [
498
- /*#__PURE__*/ jsxRuntime.jsx(FilterMenu.FilterMenu, {
499
- listFilters: listFilters
672
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
673
+ children: /*#__PURE__*/ jsxRuntime.jsx(FilterMenu.FilterMenu, {
674
+ listFilters: listFilters
675
+ })
500
676
  }),
501
- /*#__PURE__*/ jsxRuntime.jsx(AssetsSearchInput.AssetsSearchInput, {})
677
+ /*#__PURE__*/ jsxRuntime.jsx(SearchSlot, {
678
+ children: /*#__PURE__*/ jsxRuntime.jsx(AssetsSearchInput.AssetsSearchInput, {})
679
+ })
502
680
  ]
503
681
  }),
504
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
505
- gap: 4,
506
- alignItems: "center",
682
+ /*#__PURE__*/ jsxRuntime.jsxs(SortToggleGroup, {
507
683
  children: [
508
- /*#__PURE__*/ jsxRuntime.jsx(SortMenu.SortMenu, {
509
- sort: listSort,
510
- showFoldersGroup: !isGridView
684
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
685
+ children: /*#__PURE__*/ jsxRuntime.jsx(SortMenu.SortMenu, {
686
+ sort: listSort,
687
+ showFoldersGroup: !isGridView
688
+ })
511
689
  }),
512
690
  /*#__PURE__*/ jsxRuntime.jsxs(StyledToggleGroup, {
513
691
  type: "single",
@@ -526,9 +704,11 @@ const AssetsPage = ()=>{
526
704
  }),
527
705
  children: [
528
706
  /*#__PURE__*/ jsxRuntime.jsx(icons.List, {}),
529
- formatMessage({
530
- id: translations.getTranslationKey('view.table'),
531
- defaultMessage: 'Table view'
707
+ /*#__PURE__*/ jsxRuntime.jsx(ToggleLabel, {
708
+ children: formatMessage({
709
+ id: translations.getTranslationKey('view.table'),
710
+ defaultMessage: 'Table view'
711
+ })
532
712
  })
533
713
  ]
534
714
  }),
@@ -540,9 +720,11 @@ const AssetsPage = ()=>{
540
720
  }),
541
721
  children: [
542
722
  /*#__PURE__*/ jsxRuntime.jsx(icons.GridFour, {}),
543
- formatMessage({
544
- id: translations.getTranslationKey('view.grid'),
545
- defaultMessage: 'Grid view'
723
+ /*#__PURE__*/ jsxRuntime.jsx(ToggleLabel, {
724
+ children: formatMessage({
725
+ id: translations.getTranslationKey('view.grid'),
726
+ defaultMessage: 'Grid view'
727
+ })
546
728
  })
547
729
  ]
548
730
  })
@@ -553,52 +735,59 @@ const AssetsPage = ()=>{
553
735
  ]
554
736
  }),
555
737
  /*#__PURE__*/ jsxRuntime.jsx(FilterBadges.FilterBadges, {
556
- listFilters: listFilters
738
+ listFilters: listFilters,
739
+ compact: isHeaderCompact
740
+ })
741
+ ]
742
+ }),
743
+ /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Layouts.Content, {
744
+ children: [
745
+ /*#__PURE__*/ jsxRuntime.jsx(BetaNotice.BetaNotice, {}),
746
+ assetPageSubscribers,
747
+ /*#__PURE__*/ jsxRuntime.jsxs(UploadDropZone.DropZoneWithOverlay, {
748
+ children: [
749
+ /*#__PURE__*/ jsxRuntime.jsx(UploadDropZone.DropFilesMessage, {
750
+ uploadDropZoneRef: uploadDropZoneRef,
751
+ folderName: title
752
+ }),
753
+ /*#__PURE__*/ jsxRuntime.jsx(AssetsView, {
754
+ view: view,
755
+ folders: folders$1,
756
+ isLoadingFolders: isLoadingFolders,
757
+ assets: assets,
758
+ isLoadingAssets: isLoadingAssets,
759
+ isFetchingMore: isFetchingMore,
760
+ hasNextPage: hasNextPage,
761
+ fetchNextPage: fetchNextPage,
762
+ error: assetsError,
763
+ locations: itemLocations$1,
764
+ searchQuery: searchQuery,
765
+ assetsSort: listSort.assetsSort,
766
+ foldersPosition: listSort.foldersPosition,
767
+ hasActiveFilters: listFilters.filters.length > 0,
768
+ onClearFilters: listFilters.clearFilters,
769
+ onAssetItemClick: openDetails,
770
+ onAddAssets: handleFileSelect,
771
+ canAddAssets: canCreate,
772
+ onClearSearch: clearSearch
773
+ })
774
+ ]
557
775
  })
558
776
  ]
559
777
  })
560
- })
561
- }),
562
- /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Layouts.Content, {
563
- children: /*#__PURE__*/ jsxRuntime.jsxs(UploadDropZone.DropZoneWithOverlay, {
564
- children: [
565
- /*#__PURE__*/ jsxRuntime.jsx(UploadDropZone.DropFilesMessage, {
566
- uploadDropZoneRef: uploadDropZoneRef,
567
- folderName: title
568
- }),
569
- /*#__PURE__*/ jsxRuntime.jsx(AssetsView, {
570
- view: view,
571
- folders: folders$1,
572
- isLoadingFolders: isLoadingFolders,
573
- assets: assets,
574
- isLoadingAssets: isLoadingAssets,
575
- isFetchingMore: isFetchingMore,
576
- hasNextPage: hasNextPage,
577
- fetchNextPage: fetchNextPage,
578
- error: assetsError,
579
- searchQuery: searchQuery,
580
- assetsSort: listSort.assetsSort,
581
- foldersPosition: listSort.foldersPosition,
582
- hasActiveFilters: listFilters.filters.length > 0,
583
- onClearFilters: listFilters.clearFilters,
584
- onAssetItemClick: openDetails,
585
- onAddAssets: handleFileSelect,
586
- canAddAssets: canCreate,
587
- onClearSearch: clearSearch
588
- })
589
- ]
590
- })
778
+ ]
591
779
  })
592
- ]
780
+ })
593
781
  })
594
- })
595
- ]
782
+ ]
783
+ })
596
784
  })
597
785
  })
598
786
  }),
599
- /*#__PURE__*/ jsxRuntime.jsx(CreateFolderDialog.CreateFolderDialog, {
787
+ /*#__PURE__*/ jsxRuntime.jsx(FolderFormDialog.FolderFormDialog, {
600
788
  open: isCreateFolderDialogOpen,
601
- folderName: title,
789
+ mode: "create",
790
+ parentFolderName: title,
602
791
  parentFolderId: currentFolderId,
603
792
  onClose: ()=>setIsCreateFolderDialogOpen(false)
604
793
  }),