@strapi/upload 5.51.0 → 5.51.2

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 (346) hide show
  1. package/dist/admin/components/AssetCard/VideoPreview.js +1 -1
  2. package/dist/admin/components/AssetCard/VideoPreview.js.map +1 -1
  3. package/dist/admin/components/AssetCard/VideoPreview.mjs +1 -1
  4. package/dist/admin/components/AssetCard/VideoPreview.mjs.map +1 -1
  5. package/dist/admin/components/TableList/TableList.js +1 -1
  6. package/dist/admin/components/TableList/TableList.js.map +1 -1
  7. package/dist/admin/components/TableList/TableList.mjs +1 -1
  8. package/dist/admin/components/TableList/TableList.mjs.map +1 -1
  9. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js +21 -4
  10. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js.map +1 -1
  11. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.mjs +21 -4
  12. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.mjs.map +1 -1
  13. package/dist/admin/future/components/Drawer.js +3 -1
  14. package/dist/admin/future/components/Drawer.js.map +1 -1
  15. package/dist/admin/future/components/Drawer.mjs +3 -1
  16. package/dist/admin/future/components/Drawer.mjs.map +1 -1
  17. package/dist/admin/future/components/UploadProgressDialog.js +200 -27
  18. package/dist/admin/future/components/UploadProgressDialog.js.map +1 -1
  19. package/dist/admin/future/components/UploadProgressDialog.mjs +203 -30
  20. package/dist/admin/future/components/UploadProgressDialog.mjs.map +1 -1
  21. package/dist/admin/future/hooks/useMediaLibraryPermissions.js +35 -0
  22. package/dist/admin/future/hooks/useMediaLibraryPermissions.js.map +1 -0
  23. package/dist/admin/future/hooks/useMediaLibraryPermissions.mjs +33 -0
  24. package/dist/admin/future/hooks/useMediaLibraryPermissions.mjs.map +1 -0
  25. package/dist/admin/future/pages/Assets/AssetsPage.js +344 -150
  26. package/dist/admin/future/pages/Assets/AssetsPage.js.map +1 -1
  27. package/dist/admin/future/pages/Assets/AssetsPage.mjs +343 -149
  28. package/dist/admin/future/pages/Assets/AssetsPage.mjs.map +1 -1
  29. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.js +75 -32
  30. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.js.map +1 -1
  31. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.mjs +75 -32
  32. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.mjs.map +1 -1
  33. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js +46 -19
  34. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js.map +1 -1
  35. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs +47 -20
  36. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs.map +1 -1
  37. package/dist/admin/future/pages/Assets/components/AssetsGrid.js +161 -19
  38. package/dist/admin/future/pages/Assets/components/AssetsGrid.js.map +1 -1
  39. package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs +162 -20
  40. package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs.map +1 -1
  41. package/dist/admin/future/pages/Assets/components/AssetsSearchInput.js +100 -0
  42. package/dist/admin/future/pages/Assets/components/AssetsSearchInput.js.map +1 -0
  43. package/dist/admin/future/pages/Assets/components/AssetsSearchInput.mjs +98 -0
  44. package/dist/admin/future/pages/Assets/components/AssetsSearchInput.mjs.map +1 -0
  45. package/dist/admin/future/pages/Assets/components/AssetsTable.js +218 -37
  46. package/dist/admin/future/pages/Assets/components/AssetsTable.js.map +1 -1
  47. package/dist/admin/future/pages/Assets/components/AssetsTable.mjs +219 -38
  48. package/dist/admin/future/pages/Assets/components/AssetsTable.mjs.map +1 -1
  49. package/dist/admin/future/pages/Assets/components/BulkActionsBar.js +370 -0
  50. package/dist/admin/future/pages/Assets/components/BulkActionsBar.js.map +1 -0
  51. package/dist/admin/future/pages/Assets/components/BulkActionsBar.mjs +368 -0
  52. package/dist/admin/future/pages/Assets/components/BulkActionsBar.mjs.map +1 -0
  53. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.js +209 -0
  54. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.js.map +1 -0
  55. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.mjs +207 -0
  56. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.mjs.map +1 -0
  57. package/dist/admin/future/pages/Assets/components/DateRangeCalendar.js +193 -0
  58. package/dist/admin/future/pages/Assets/components/DateRangeCalendar.js.map +1 -0
  59. package/dist/admin/future/pages/Assets/components/DateRangeCalendar.mjs +191 -0
  60. package/dist/admin/future/pages/Assets/components/DateRangeCalendar.mjs.map +1 -0
  61. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.js +129 -37
  62. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.js.map +1 -1
  63. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.mjs +131 -39
  64. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.mjs.map +1 -1
  65. package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.js +120 -13
  66. package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.js.map +1 -1
  67. package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.mjs +120 -13
  68. package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.mjs.map +1 -1
  69. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.js +71 -0
  70. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.js.map +1 -0
  71. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.mjs +69 -0
  72. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.mjs.map +1 -0
  73. package/dist/admin/future/pages/Assets/components/Dnd/computeValidDropTargets.js +34 -0
  74. package/dist/admin/future/pages/Assets/components/Dnd/computeValidDropTargets.js.map +1 -0
  75. package/dist/admin/future/pages/Assets/components/Dnd/computeValidDropTargets.mjs +32 -0
  76. package/dist/admin/future/pages/Assets/components/Dnd/computeValidDropTargets.mjs.map +1 -0
  77. package/dist/admin/future/pages/Assets/components/Dnd/dndIds.js +15 -0
  78. package/dist/admin/future/pages/Assets/components/Dnd/dndIds.js.map +1 -1
  79. package/dist/admin/future/pages/Assets/components/Dnd/dndIds.mjs +13 -1
  80. package/dist/admin/future/pages/Assets/components/Dnd/dndIds.mjs.map +1 -1
  81. package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.js +19 -25
  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 +19 -25
  84. package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.mjs.map +1 -1
  85. package/dist/admin/future/pages/Assets/components/Dnd/useFolderTreeDroppable.js +35 -0
  86. package/dist/admin/future/pages/Assets/components/Dnd/useFolderTreeDroppable.js.map +1 -0
  87. package/dist/admin/future/pages/Assets/components/Dnd/useFolderTreeDroppable.mjs +33 -0
  88. package/dist/admin/future/pages/Assets/components/Dnd/useFolderTreeDroppable.mjs.map +1 -0
  89. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.js +13 -3
  90. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.js.map +1 -1
  91. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.mjs +13 -3
  92. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.mjs.map +1 -1
  93. package/dist/admin/future/pages/Assets/components/EmptyState.js +62 -3
  94. package/dist/admin/future/pages/Assets/components/EmptyState.js.map +1 -1
  95. package/dist/admin/future/pages/Assets/components/EmptyState.mjs +62 -4
  96. package/dist/admin/future/pages/Assets/components/EmptyState.mjs.map +1 -1
  97. package/dist/admin/future/pages/Assets/components/FilterBadges.js +408 -0
  98. package/dist/admin/future/pages/Assets/components/FilterBadges.js.map +1 -0
  99. package/dist/admin/future/pages/Assets/components/FilterBadges.mjs +406 -0
  100. package/dist/admin/future/pages/Assets/components/FilterBadges.mjs.map +1 -0
  101. package/dist/admin/future/pages/Assets/components/FilterMenu.js +273 -0
  102. package/dist/admin/future/pages/Assets/components/FilterMenu.js.map +1 -0
  103. package/dist/admin/future/pages/Assets/components/FilterMenu.mjs +267 -0
  104. package/dist/admin/future/pages/Assets/components/FilterMenu.mjs.map +1 -0
  105. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.js +195 -40
  106. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.js.map +1 -1
  107. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.mjs +198 -43
  108. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.mjs.map +1 -1
  109. package/dist/admin/future/pages/Assets/components/FolderTree/filterFolderTree.js +33 -0
  110. package/dist/admin/future/pages/Assets/components/FolderTree/filterFolderTree.js.map +1 -0
  111. package/dist/admin/future/pages/Assets/components/FolderTree/filterFolderTree.mjs +31 -0
  112. package/dist/admin/future/pages/Assets/components/FolderTree/filterFolderTree.mjs.map +1 -0
  113. package/dist/admin/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.js +22 -0
  114. package/dist/admin/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.js.map +1 -0
  115. package/dist/admin/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.mjs +19 -0
  116. package/dist/admin/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.mjs.map +1 -0
  117. package/dist/admin/future/pages/Assets/components/SortMenu.js +154 -0
  118. package/dist/admin/future/pages/Assets/components/SortMenu.js.map +1 -0
  119. package/dist/admin/future/pages/Assets/components/SortMenu.mjs +152 -0
  120. package/dist/admin/future/pages/Assets/components/SortMenu.mjs.map +1 -0
  121. package/dist/admin/future/pages/Assets/hooks/useAssetSearch.js +40 -0
  122. package/dist/admin/future/pages/Assets/hooks/useAssetSearch.js.map +1 -0
  123. package/dist/admin/future/pages/Assets/hooks/useAssetSearch.mjs +38 -0
  124. package/dist/admin/future/pages/Assets/hooks/useAssetSearch.mjs.map +1 -0
  125. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.js +75 -0
  126. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.js.map +1 -0
  127. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.mjs +71 -0
  128. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.mjs.map +1 -0
  129. package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.js +33 -12
  130. package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.js.map +1 -1
  131. package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.mjs +33 -12
  132. package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.mjs.map +1 -1
  133. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.js +40 -4
  134. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.js.map +1 -1
  135. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.mjs +40 -4
  136. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.mjs.map +1 -1
  137. package/dist/admin/future/pages/Assets/hooks/useListFilters.js +168 -0
  138. package/dist/admin/future/pages/Assets/hooks/useListFilters.js.map +1 -0
  139. package/dist/admin/future/pages/Assets/hooks/useListFilters.mjs +162 -0
  140. package/dist/admin/future/pages/Assets/hooks/useListFilters.mjs.map +1 -0
  141. package/dist/admin/future/pages/Assets/hooks/useListSort.js +124 -0
  142. package/dist/admin/future/pages/Assets/hooks/useListSort.js.map +1 -0
  143. package/dist/admin/future/pages/Assets/hooks/useListSort.mjs +120 -0
  144. package/dist/admin/future/pages/Assets/hooks/useListSort.mjs.map +1 -0
  145. package/dist/admin/future/pages/Assets/utils/buildAssetFilters.js +201 -0
  146. package/dist/admin/future/pages/Assets/utils/buildAssetFilters.js.map +1 -0
  147. package/dist/admin/future/pages/Assets/utils/buildAssetFilters.mjs +198 -0
  148. package/dist/admin/future/pages/Assets/utils/buildAssetFilters.mjs.map +1 -0
  149. package/dist/admin/future/pages/Assets/utils/listQueryKey.js +29 -0
  150. package/dist/admin/future/pages/Assets/utils/listQueryKey.js.map +1 -0
  151. package/dist/admin/future/pages/Assets/utils/listQueryKey.mjs +27 -0
  152. package/dist/admin/future/pages/Assets/utils/listQueryKey.mjs.map +1 -0
  153. package/dist/admin/future/pages/Assets/utils/mergeMixedList.js +84 -0
  154. package/dist/admin/future/pages/Assets/utils/mergeMixedList.js.map +1 -0
  155. package/dist/admin/future/pages/Assets/utils/mergeMixedList.mjs +81 -0
  156. package/dist/admin/future/pages/Assets/utils/mergeMixedList.mjs.map +1 -0
  157. package/dist/admin/future/pages/Assets/utils/selection.js +104 -0
  158. package/dist/admin/future/pages/Assets/utils/selection.js.map +1 -0
  159. package/dist/admin/future/pages/Assets/utils/selection.mjs +94 -0
  160. package/dist/admin/future/pages/Assets/utils/selection.mjs.map +1 -0
  161. package/dist/admin/future/services/api.js +163 -28
  162. package/dist/admin/future/services/api.js.map +1 -1
  163. package/dist/admin/future/services/api.mjs +163 -30
  164. package/dist/admin/future/services/api.mjs.map +1 -1
  165. package/dist/admin/future/services/assets.js +62 -18
  166. package/dist/admin/future/services/assets.js.map +1 -1
  167. package/dist/admin/future/services/assets.mjs +62 -19
  168. package/dist/admin/future/services/assets.mjs.map +1 -1
  169. package/dist/admin/future/services/folders.js +31 -19
  170. package/dist/admin/future/services/folders.js.map +1 -1
  171. package/dist/admin/future/services/folders.mjs +31 -19
  172. package/dist/admin/future/services/folders.mjs.map +1 -1
  173. package/dist/admin/future/services/settings.js +10 -3
  174. package/dist/admin/future/services/settings.js.map +1 -1
  175. package/dist/admin/future/services/settings.mjs +10 -3
  176. package/dist/admin/future/services/settings.mjs.map +1 -1
  177. package/dist/admin/future/store/uploadProgress.js +109 -2
  178. package/dist/admin/future/store/uploadProgress.js.map +1 -1
  179. package/dist/admin/future/store/uploadProgress.mjs +105 -3
  180. package/dist/admin/future/store/uploadProgress.mjs.map +1 -1
  181. package/dist/admin/future/utils/buildDragSetFromSelection.js +33 -0
  182. package/dist/admin/future/utils/buildDragSetFromSelection.js.map +1 -0
  183. package/dist/admin/future/utils/buildDragSetFromSelection.mjs +31 -0
  184. package/dist/admin/future/utils/buildDragSetFromSelection.mjs.map +1 -0
  185. package/dist/admin/future/utils/canDropItemOnFolder.js +4 -0
  186. package/dist/admin/future/utils/canDropItemOnFolder.js.map +1 -1
  187. package/dist/admin/future/utils/canDropItemOnFolder.mjs +4 -0
  188. package/dist/admin/future/utils/canDropItemOnFolder.mjs.map +1 -1
  189. package/dist/admin/future/utils/flattenFolderStructure.js +28 -0
  190. package/dist/admin/future/utils/flattenFolderStructure.js.map +1 -0
  191. package/dist/admin/future/utils/flattenFolderStructure.mjs +26 -0
  192. package/dist/admin/future/utils/flattenFolderStructure.mjs.map +1 -0
  193. package/dist/admin/future/utils/formatMoveSuccessMessage.js +19 -0
  194. package/dist/admin/future/utils/formatMoveSuccessMessage.js.map +1 -0
  195. package/dist/admin/future/utils/formatMoveSuccessMessage.mjs +17 -0
  196. package/dist/admin/future/utils/formatMoveSuccessMessage.mjs.map +1 -0
  197. package/dist/admin/future/utils/getFolderLabel.js +31 -0
  198. package/dist/admin/future/utils/getFolderLabel.js.map +1 -0
  199. package/dist/admin/future/utils/getFolderLabel.mjs +29 -0
  200. package/dist/admin/future/utils/getFolderLabel.mjs.map +1 -0
  201. package/dist/admin/future/utils/searchQueryParam.js +11 -0
  202. package/dist/admin/future/utils/searchQueryParam.js.map +1 -0
  203. package/dist/admin/future/utils/searchQueryParam.mjs +9 -0
  204. package/dist/admin/future/utils/searchQueryParam.mjs.map +1 -0
  205. package/dist/admin/hooks/useSelectionState.js +2 -4
  206. package/dist/admin/hooks/useSelectionState.js.map +1 -1
  207. package/dist/admin/hooks/useSelectionState.mjs +2 -4
  208. package/dist/admin/hooks/useSelectionState.mjs.map +1 -1
  209. package/dist/admin/shared/constants.js +43 -0
  210. package/dist/admin/shared/constants.js.map +1 -0
  211. package/dist/admin/shared/constants.mjs +38 -0
  212. package/dist/admin/shared/constants.mjs.map +1 -0
  213. package/dist/admin/src/future/hooks/useMediaLibraryPermissions.d.ts +21 -0
  214. package/dist/admin/src/future/pages/Assets/components/AssetDetails/AssetCropEditor.d.ts +7 -1
  215. package/dist/admin/src/future/pages/Assets/components/AssetsSearchInput.d.ts +5 -0
  216. package/dist/admin/src/future/pages/Assets/components/AssetsTable.d.ts +7 -1
  217. package/dist/admin/src/future/pages/Assets/components/BulkActionsBar.d.ts +14 -0
  218. package/dist/admin/src/future/pages/Assets/components/BulkMoveDialog.d.ts +13 -0
  219. package/dist/admin/src/future/pages/Assets/components/DateRangeCalendar.d.ts +8 -0
  220. package/dist/admin/src/future/pages/Assets/components/Dnd/AssetsDndProvider.d.ts +2 -0
  221. package/dist/admin/src/future/pages/Assets/components/Dnd/DragOverlayChip.d.ts +2 -2
  222. package/dist/admin/src/future/pages/Assets/components/Dnd/buildDragSet.d.ts +17 -0
  223. package/dist/admin/src/future/pages/Assets/components/Dnd/computeValidDropTargets.d.ts +7 -0
  224. package/dist/admin/src/future/pages/Assets/components/Dnd/dndIds.d.ts +3 -0
  225. package/dist/admin/src/future/pages/Assets/components/Dnd/useAssetDnd.d.ts +3 -1
  226. package/dist/admin/src/future/pages/Assets/components/Dnd/useFolderTreeDroppable.d.ts +19 -0
  227. package/dist/admin/src/future/pages/Assets/components/DropZone/UploadDropZoneContext.d.ts +8 -1
  228. package/dist/admin/src/future/pages/Assets/components/EmptyState.d.ts +18 -1
  229. package/dist/admin/src/future/pages/Assets/components/FilterBadges.d.ts +6 -0
  230. package/dist/admin/src/future/pages/Assets/components/FilterMenu.d.ts +22 -0
  231. package/dist/admin/src/future/pages/Assets/components/FolderTree/FolderTree.d.ts +13 -4
  232. package/dist/admin/src/future/pages/Assets/components/FolderTree/filterFolderTree.d.ts +16 -0
  233. package/dist/admin/src/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.d.ts +6 -0
  234. package/dist/admin/src/future/pages/Assets/components/SortMenu.d.ts +23 -0
  235. package/dist/admin/src/future/pages/Assets/hooks/useAssetSearch.d.ts +12 -0
  236. package/dist/admin/src/future/pages/Assets/hooks/useAssetSelection.d.ts +46 -0
  237. package/dist/admin/src/future/pages/Assets/hooks/useInfiniteAssets.d.ts +13 -3
  238. package/dist/admin/src/future/pages/Assets/hooks/useListFilters.d.ts +69 -0
  239. package/dist/admin/src/future/pages/Assets/hooks/useListSort.d.ts +47 -0
  240. package/dist/admin/src/future/pages/Assets/utils/buildAssetFilters.d.ts +46 -0
  241. package/dist/admin/src/future/pages/Assets/utils/listQueryKey.d.ts +29 -0
  242. package/dist/admin/src/future/pages/Assets/utils/mergeMixedList.d.ts +40 -0
  243. package/dist/admin/src/future/pages/Assets/utils/selection.d.ts +50 -0
  244. package/dist/admin/src/future/services/api.d.ts +53 -5
  245. package/dist/admin/src/future/services/assets.d.ts +13 -2
  246. package/dist/admin/src/future/services/folders.d.ts +7 -1
  247. package/dist/admin/src/future/services/settings.d.ts +2 -2
  248. package/dist/admin/src/future/store/uploadProgress.d.ts +83 -1
  249. package/dist/admin/src/future/types/dnd.d.ts +5 -0
  250. package/dist/admin/src/future/utils/buildDragSetFromSelection.d.ts +11 -0
  251. package/dist/admin/src/future/utils/canDropItemOnFolder.d.ts +1 -1
  252. package/dist/admin/src/future/utils/flattenFolderStructure.d.ts +18 -0
  253. package/dist/admin/src/future/utils/formatMoveSuccessMessage.d.ts +14 -0
  254. package/dist/admin/src/future/utils/getFolderLabel.d.ts +11 -0
  255. package/dist/admin/src/future/utils/searchQueryParam.d.ts +7 -0
  256. package/dist/admin/src/hooks/useAiAvailability.d.ts +1 -1
  257. package/dist/admin/src/hooks/useEditAsset.d.ts +4 -4
  258. package/dist/admin/src/hooks/useEditFolder.d.ts +4 -4
  259. package/dist/admin/src/hooks/useSettings.d.ts +1 -0
  260. package/dist/admin/src/hooks/useTracking.d.ts +1 -1
  261. package/dist/admin/src/hooks/useUpload.d.ts +1 -1
  262. package/dist/admin/translations/en.json.js +85 -2
  263. package/dist/admin/translations/en.json.js.map +1 -1
  264. package/dist/admin/translations/en.json.mjs +85 -2
  265. package/dist/admin/translations/en.json.mjs.map +1 -1
  266. package/dist/admin/utils/urlYupSchema.js +33 -9
  267. package/dist/admin/utils/urlYupSchema.js.map +1 -1
  268. package/dist/admin/utils/urlYupSchema.mjs +33 -9
  269. package/dist/admin/utils/urlYupSchema.mjs.map +1 -1
  270. package/dist/server/config.js +13 -5
  271. package/dist/server/config.js.map +1 -1
  272. package/dist/server/config.mjs +13 -5
  273. package/dist/server/config.mjs.map +1 -1
  274. package/dist/server/constants.js.map +1 -1
  275. package/dist/server/constants.mjs.map +1 -1
  276. package/dist/server/controllers/admin-file.js +30 -0
  277. package/dist/server/controllers/admin-file.js.map +1 -1
  278. package/dist/server/controllers/admin-file.mjs +30 -0
  279. package/dist/server/controllers/admin-file.mjs.map +1 -1
  280. package/dist/server/controllers/admin-settings.js +20 -2
  281. package/dist/server/controllers/admin-settings.js.map +1 -1
  282. package/dist/server/controllers/admin-settings.mjs +21 -3
  283. package/dist/server/controllers/admin-settings.mjs.map +1 -1
  284. package/dist/server/controllers/content-api.js +1 -2
  285. package/dist/server/controllers/content-api.js.map +1 -1
  286. package/dist/server/controllers/content-api.mjs +2 -2
  287. package/dist/server/controllers/content-api.mjs.map +1 -1
  288. package/dist/server/controllers/validation/admin/ai-metadata.js +12 -0
  289. package/dist/server/controllers/validation/admin/ai-metadata.js.map +1 -0
  290. package/dist/server/controllers/validation/admin/ai-metadata.mjs +10 -0
  291. package/dist/server/controllers/validation/admin/ai-metadata.mjs.map +1 -0
  292. package/dist/server/controllers/validation/admin/settings.js +4 -1
  293. package/dist/server/controllers/validation/admin/settings.js.map +1 -1
  294. package/dist/server/controllers/validation/admin/settings.mjs +1 -1
  295. package/dist/server/controllers/validation/admin/settings.mjs.map +1 -1
  296. package/dist/server/routes/admin.js +18 -0
  297. package/dist/server/routes/admin.js.map +1 -1
  298. package/dist/server/routes/admin.mjs +18 -0
  299. package/dist/server/routes/admin.mjs.map +1 -1
  300. package/dist/server/services/ai-metadata.js +108 -11
  301. package/dist/server/services/ai-metadata.js.map +1 -1
  302. package/dist/server/services/ai-metadata.mjs +108 -11
  303. package/dist/server/services/ai-metadata.mjs.map +1 -1
  304. package/dist/server/services/file.js +86 -13
  305. package/dist/server/services/file.js.map +1 -1
  306. package/dist/server/services/file.mjs +87 -14
  307. package/dist/server/services/file.mjs.map +1 -1
  308. package/dist/server/services/image-manipulation.js +4 -4
  309. package/dist/server/services/image-manipulation.js.map +1 -1
  310. package/dist/server/services/image-manipulation.mjs +4 -4
  311. package/dist/server/services/image-manipulation.mjs.map +1 -1
  312. package/dist/server/shared/constants.js +43 -0
  313. package/dist/server/shared/constants.js.map +1 -0
  314. package/dist/server/shared/constants.mjs +38 -0
  315. package/dist/server/shared/constants.mjs.map +1 -0
  316. package/dist/server/src/config.d.ts +2 -0
  317. package/dist/server/src/config.d.ts.map +1 -1
  318. package/dist/server/src/constants.d.ts +2 -1
  319. package/dist/server/src/constants.d.ts.map +1 -1
  320. package/dist/server/src/controllers/admin-file.d.ts +10 -0
  321. package/dist/server/src/controllers/admin-file.d.ts.map +1 -1
  322. package/dist/server/src/controllers/admin-settings.d.ts.map +1 -1
  323. package/dist/server/src/controllers/index.d.ts +1 -0
  324. package/dist/server/src/controllers/index.d.ts.map +1 -1
  325. package/dist/server/src/controllers/validation/admin/ai-metadata.d.ts +2 -0
  326. package/dist/server/src/controllers/validation/admin/ai-metadata.d.ts.map +1 -0
  327. package/dist/server/src/controllers/validation/admin/settings.d.ts +1 -1
  328. package/dist/server/src/controllers/validation/admin/settings.d.ts.map +1 -1
  329. package/dist/server/src/index.d.ts +7 -1
  330. package/dist/server/src/index.d.ts.map +1 -1
  331. package/dist/server/src/routes/admin.d.ts.map +1 -1
  332. package/dist/server/src/services/ai-metadata.d.ts +19 -0
  333. package/dist/server/src/services/ai-metadata.d.ts.map +1 -1
  334. package/dist/server/src/services/file.d.ts +12 -2
  335. package/dist/server/src/services/file.d.ts.map +1 -1
  336. package/dist/server/src/services/index.d.ts +4 -1
  337. package/dist/server/src/services/index.d.ts.map +1 -1
  338. package/dist/server/src/types.d.ts +3 -0
  339. package/dist/server/src/types.d.ts.map +1 -1
  340. package/dist/shared/constants.d.ts +35 -0
  341. package/dist/shared/constants.d.ts.map +1 -0
  342. package/dist/shared/contracts/files.d.ts +25 -0
  343. package/dist/shared/contracts/files.d.ts.map +1 -1
  344. package/dist/shared/contracts/folders.d.ts +1 -1
  345. package/dist/shared/contracts/settings.d.ts +7 -0
  346. package/package.json +8 -8
@@ -8,23 +8,38 @@ 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');
12
+ var useMediaLibraryPermissions = require('../../hooks/useMediaLibraryPermissions.js');
11
13
  var api = require('../../services/api.js');
12
14
  var folders = require('../../services/folders.js');
15
+ var settings = require('../../services/settings.js');
13
16
  var translations = require('../../utils/translations.js');
14
17
  var AssetDetailsDrawer = require('./components/AssetDetails/AssetDetailsDrawer.js');
15
18
  var AssetsGrid = require('./components/AssetsGrid.js');
19
+ var AssetsSearchInput = require('./components/AssetsSearchInput.js');
16
20
  var AssetsTable = require('./components/AssetsTable.js');
21
+ var BulkActionsBar = require('./components/BulkActionsBar.js');
17
22
  var CreateFolderDialog = require('./components/CreateFolderDialog.js');
18
23
  var AssetsDndProvider = require('./components/Dnd/AssetsDndProvider.js');
19
24
  var UploadDropZone = require('./components/DropZone/UploadDropZone.js');
20
25
  var UploadDropZoneContext = require('./components/DropZone/UploadDropZoneContext.js');
21
26
  var EmptyState = require('./components/EmptyState.js');
27
+ var FilterBadges = require('./components/FilterBadges.js');
28
+ var FilterMenu = require('./components/FilterMenu.js');
22
29
  var FolderTree = require('./components/FolderTree/FolderTree.js');
23
30
  var ImportFromUrlDialog = require('./components/ImportFromUrlDialog.js');
31
+ var SortMenu = require('./components/SortMenu.js');
24
32
  var constants = require('./constants.js');
33
+ var useAssetSearch = require('./hooks/useAssetSearch.js');
34
+ var useAssetSelection = require('./hooks/useAssetSelection.js');
25
35
  var useFolderInfo = require('./hooks/useFolderInfo.js');
26
36
  var useFolderNavigation = require('./hooks/useFolderNavigation.js');
27
37
  var useInfiniteAssets = require('./hooks/useInfiniteAssets.js');
38
+ var useListFilters = require('./hooks/useListFilters.js');
39
+ var useListSort = require('./hooks/useListSort.js');
40
+ var buildAssetFilters = require('./utils/buildAssetFilters.js');
41
+ var listQueryKey = require('./utils/listQueryKey.js');
42
+ var mergeMixedList = require('./utils/mergeMixedList.js');
28
43
 
29
44
  function _interopNamespace(e) {
30
45
  if (e && e.__esModule) return e;
@@ -49,16 +64,53 @@ var ToggleGroup__namespace = /*#__PURE__*/_interopNamespace(ToggleGroup);
49
64
  const INTERSECTION_OPTIONS = {
50
65
  threshold: 0.1
51
66
  };
52
- const AssetsView = ({ view, folderId, onAssetItemClick, onAddAssets })=>{
67
+ const ITEM_COUNT_MESSAGE = {
68
+ id: translations.getTranslationKey('header.content.item-count'),
69
+ defaultMessage: '{count, plural, =1 {# item} other {# items}}'
70
+ };
71
+ const SEARCH_RESULTS_COUNT_MESSAGES = {
72
+ both: {
73
+ id: translations.getTranslationKey('header.search-results.count'),
74
+ defaultMessage: '{numberFolders, plural, one {1 folder} other {# folders}} - {numberAssets, plural, one {1 asset} other {# assets}}'
75
+ },
76
+ folders: {
77
+ id: translations.getTranslationKey('header.search-results.count.folders'),
78
+ defaultMessage: '{numberFolders, plural, one {1 folder} other {# folders}}'
79
+ },
80
+ assets: {
81
+ id: translations.getTranslationKey('header.search-results.count.assets'),
82
+ defaultMessage: '{numberAssets, plural, =0 {0 assets} one {1 asset} other {# assets}}'
83
+ }
84
+ };
85
+ const getSearchResultsCountMessage = (numberFolders, numberAssets)=>{
86
+ if (numberFolders === 0) {
87
+ return SEARCH_RESULTS_COUNT_MESSAGES.assets;
88
+ }
89
+ if (numberAssets === 0) {
90
+ return SEARCH_RESULTS_COUNT_MESSAGES.folders;
91
+ }
92
+ return SEARCH_RESULTS_COUNT_MESSAGES.both;
93
+ };
94
+ const AssetsView = ({ view, folders, isLoadingFolders, assets, isLoadingAssets, isFetchingMore, hasNextPage, fetchNextPage, error, searchQuery, assetsSort, foldersPosition, hasActiveFilters, onClearFilters, onAssetItemClick, onAddAssets, canAddAssets, onClearSearch })=>{
53
95
  const { formatMessage } = reactIntl.useIntl();
54
- const { assets, isLoading: isLoadingAssets, isFetchingMore, hasNextPage, fetchNextPage, error } = useInfiniteAssets.useInfiniteAssets({
55
- folder: folderId
56
- });
57
- const { data: folders$1 = [], isLoading: isLoadingFolders } = folders.useGetFoldersQuery({
58
- parentId: folderId
59
- });
60
96
  const isGridView = view === constants.viewOptions.GRID;
61
97
  const isLoading = isLoadingAssets || isLoadingFolders;
98
+ // "Folders: Mixed with files" — interleave the complete folder list into the
99
+ // loaded asset stream client-side, following the active sort. Table view
100
+ // only: the grid always keeps folders in their own band on top.
101
+ const mixedItems = React.useMemo(()=>foldersPosition === 'mixed' && !isGridView ? mergeMixedList.mergeMixedList({
102
+ folders,
103
+ assets,
104
+ sort: assetsSort,
105
+ hasNextPage
106
+ }) : null, [
107
+ foldersPosition,
108
+ isGridView,
109
+ folders,
110
+ assets,
111
+ assetsSort,
112
+ hasNextPage
113
+ ]);
62
114
  const loadMoreRef = strapiAdmin.useElementOnScreen(React.useCallback((isVisible)=>{
63
115
  if (isVisible && hasNextPage && !isFetchingMore) {
64
116
  fetchNextPage();
@@ -92,20 +144,28 @@ const AssetsView = ({ view, folderId, onAssetItemClick, onAddAssets })=>{
92
144
  })
93
145
  });
94
146
  }
95
- if (folders$1.length === 0 && assets.length === 0) {
96
- return /*#__PURE__*/ jsxRuntime.jsx(EmptyState.EmptyState, {
97
- onAddAssets: onAddAssets
147
+ if (folders.length === 0 && assets.length === 0) {
148
+ // While searching, the search empty state wins (it names the query); a
149
+ // filter-only dead end gets the filtered variant with its Clear action.
150
+ return hasActiveFilters && !searchQuery ? /*#__PURE__*/ jsxRuntime.jsx(EmptyState.FilteredEmptyState, {
151
+ onClearFilters: onClearFilters
152
+ }) : /*#__PURE__*/ jsxRuntime.jsx(EmptyState.EmptyState, {
153
+ onAddAssets: onAddAssets,
154
+ canAddAssets: canAddAssets,
155
+ searchQuery: searchQuery,
156
+ onClearSearch: onClearSearch
98
157
  });
99
158
  }
100
159
  return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
101
160
  children: [
102
161
  isGridView ? /*#__PURE__*/ jsxRuntime.jsx(AssetsGrid.AssetsGrid, {
103
- folders: folders$1,
162
+ folders: folders,
104
163
  assets: assets,
105
164
  onAssetItemClick: onAssetItemClick
106
165
  }) : /*#__PURE__*/ jsxRuntime.jsx(AssetsTable.AssetsTable, {
107
166
  assets: assets,
108
- folders: folders$1,
167
+ folders: folders,
168
+ mixedItems: mixedItems,
109
169
  onAssetItemClick: onAssetItemClick
110
170
  }),
111
171
  /*#__PURE__*/ jsxRuntime.jsx("div", {
@@ -123,36 +183,61 @@ const AssetsView = ({ view, folderId, onAssetItemClick, onAddAssets })=>{
123
183
  defaultMessage: 'Loading more assets...'
124
184
  })
125
185
  })
186
+ }),
187
+ /*#__PURE__*/ jsxRuntime.jsx(BulkActionsBar.BulkActionsBar, {
188
+ assets: assets
126
189
  })
127
190
  ]
128
191
  });
129
192
  };
193
+ const ClearSelectionOnChange = ({ listQueryKey })=>{
194
+ const { clear } = useAssetSelection.useAssetSelection();
195
+ React.useEffect(()=>{
196
+ clear();
197
+ }, [
198
+ listQueryKey,
199
+ clear
200
+ ]);
201
+ return null;
202
+ };
130
203
  /* -------------------------------------------------------------------------------------------------
131
204
  * AssetsPage
132
- * -----------------------------------------------------------------------------------------------*/ const StyledToggleGroup = styledComponents.styled(ToggleGroup__namespace.Root)`
205
+ * -----------------------------------------------------------------------------------------------*/ /**
206
+ * Mirrors the design-system Toggle look (grey track, white active segment
207
+ * card) — reproduced locally because the DS component is a labels-only
208
+ * boolean input (no icons) and paints its left segment in danger red. Here
209
+ * both segments use the primary blue when active.
210
+ */ const StyledToggleGroup = styledComponents.styled(ToggleGroup__namespace.Root)`
133
211
  display: flex;
212
+ padding: ${({ theme })=>theme.spaces[1]};
213
+ background: ${({ theme })=>theme.colors.neutral100};
134
214
  border: 1px solid ${({ theme })=>theme.colors.neutral200};
135
215
  border-radius: ${({ theme })=>theme.borderRadius};
136
- overflow: hidden;
137
216
  `;
138
217
  const StyledToggleItem = styledComponents.styled(ToggleGroup__namespace.Item)`
139
218
  display: flex;
219
+ flex: 1 1 50%;
140
220
  align-items: center;
221
+ justify-content: center;
141
222
  gap: ${({ theme })=>theme.spaces[2]};
142
- padding: ${({ theme })=>`${theme.spaces[2]} ${theme.spaces[4]}`};
143
- border: none;
144
- background: ${({ theme })=>theme.colors.neutral0};
145
- color: ${({ theme })=>theme.colors.neutral800};
223
+ padding: 0.6rem ${({ theme })=>theme.spaces[3]};
224
+ border: 1px solid transparent;
225
+ border-radius: ${({ theme })=>theme.borderRadius};
226
+ background: transparent;
227
+ color: ${({ theme })=>theme.colors.neutral600};
146
228
  cursor: pointer;
147
229
  font-size: ${({ theme })=>theme.fontSizes[1]};
148
230
  font-weight: ${({ theme })=>theme.fontWeights.semiBold};
231
+ white-space: nowrap;
149
232
 
150
233
  &:hover {
151
- background: ${({ theme })=>theme.colors.primary100};
234
+ color: ${({ theme })=>theme.colors.neutral700};
152
235
  }
153
236
 
154
237
  &[data-state='on'] {
155
- background: ${({ theme })=>theme.colors.neutral150};
238
+ background: ${({ theme })=>theme.colors.neutral0};
239
+ border-color: ${({ theme })=>theme.colors.neutral200};
240
+ color: ${({ theme })=>theme.colors.primary600};
156
241
  }
157
242
 
158
243
  svg {
@@ -172,6 +257,7 @@ const HeaderWrapper = styledComponents.styled(designSystem.Box)`
172
257
  const AssetsPage = ()=>{
173
258
  const { formatMessage } = reactIntl.useIntl();
174
259
  const { openDetails } = AssetDetailsDrawer.useAssetDetailsParam();
260
+ const { canCreate, canUpdate } = useMediaLibraryPermissions.useMediaLibraryPermissions();
175
261
  const { currentFolderId, navigateToFolderId, navigateToRoot } = useFolderNavigation.useFolderNavigation();
176
262
  // Deleted or missing folders (404) need a fetch — handled here, not in
177
263
  // `useFolderNavigation` (which only strips malformed ?folder= values).
@@ -189,16 +275,65 @@ const AssetsPage = ()=>{
189
275
  navigateToRoot
190
276
  ]);
191
277
  const { title, itemCount } = useFolderInfo.useFolderInfo(currentFolderId);
192
- const itemCountLabel = formatMessage({
193
- id: translations.getTranslationKey('header.content.item-count'),
194
- defaultMessage: '{count, plural, =1 {# item} other {# items}}'
278
+ const { searchQuery, isSearching, clearSearch } = useAssetSearch.useAssetSearch();
279
+ const listSort = useListSort.useListSort();
280
+ const listFilters = useListFilters.useListFilters();
281
+ // Resolve relative presets against "now" only when the filters change —
282
+ // keeps the query args (and RTK cache keys) stable between renders.
283
+ const builtFilters = React.useMemo(()=>buildAssetFilters.buildAssetFilters(listFilters.filters, new Date()), // eslint-disable-next-line react-hooks/exhaustive-deps -- serialized is the value identity of filters
284
+ [
285
+ listFilters.serialized
286
+ ]);
287
+ const { assets, pagination, isLoading: isLoadingAssets, isFetchingMore, hasNextPage, fetchNextPage, error: assetsError } = useInfiniteAssets.useInfiniteAssets({
288
+ // The real folder is passed even while searching: the service drops the folder
289
+ // filter when `search` is set, so results are still global. List filters
290
+ // compose with both modes.
291
+ folder: currentFolderId,
292
+ search: searchQuery || undefined,
293
+ sort: listSort.assetsSort,
294
+ filters: builtFilters.fileClauses,
295
+ filtersKey: listFilters.serialized,
296
+ enabled: builtFilters.showFiles
297
+ });
298
+ const { data: fetchedFolders = [], isLoading: isLoadingFolders } = folders.useGetFoldersQuery({
299
+ parentId: currentFolderId,
300
+ search: searchQuery || undefined,
301
+ sort: listSort.foldersSort,
302
+ filters: builtFilters.folderClauses
195
303
  }, {
304
+ skip: !builtFilters.showFolders
305
+ });
306
+ // A type badge can exclude folders structurally (e.g. "Type is Picture").
307
+ const folders$1 = React.useMemo(()=>builtFilters.showFolders ? fetchedFolders : [], [
308
+ builtFilters.showFolders,
309
+ fetchedFolders
310
+ ]);
311
+ const itemCountLabel = formatMessage(ITEM_COUNT_MESSAGE, {
196
312
  count: itemCount
197
313
  });
198
- const pageHeaderTitle = title ? `${title} (${itemCountLabel})` : formatMessage({
199
- id: 'app.loading',
200
- defaultMessage: 'Loading...'
314
+ const searchResultsTitle = formatMessage({
315
+ id: translations.getTranslationKey('header.search-results'),
316
+ defaultMessage: 'Search results for "{query}"'
317
+ }, {
318
+ query: searchQuery
201
319
  });
320
+ const numberFolders = folders$1.length;
321
+ const numberAssets = pagination?.total ?? 0;
322
+ const searchResultsCountLabel = formatMessage(getSearchResultsCountMessage(numberFolders, numberAssets), {
323
+ numberFolders,
324
+ numberAssets
325
+ });
326
+ let pageHeaderTitle;
327
+ if (isSearching) {
328
+ pageHeaderTitle = `${searchResultsTitle} (${searchResultsCountLabel})`;
329
+ } else if (title) {
330
+ pageHeaderTitle = `${title} (${itemCountLabel})`;
331
+ } else {
332
+ pageHeaderTitle = formatMessage({
333
+ id: 'app.loading',
334
+ defaultMessage: 'Loading...'
335
+ });
336
+ }
202
337
  const [isCreateFolderDialogOpen, setIsCreateFolderDialogOpen] = React.useState(false);
203
338
  // View state
204
339
  const [view, setView] = strapiAdmin.usePersistentState(constants.localStorageKeys.view, constants.viewOptions.GRID);
@@ -211,6 +346,13 @@ const AssetsPage = ()=>{
211
346
  // Upload handlers
212
347
  const [uploadFiles] = api.useUploadFilesMutation();
213
348
  const [uploadFromUrls] = api.useUploadFromUrlsMutation();
349
+ // `concurrentUploadRequests` echoes the app config. Missing settings (still
350
+ // loading, no permission) fall back to sequential — never faster than the
351
+ // server asked for.
352
+ const { data: settings$1 } = settings.useGetUploadSettingsQuery();
353
+ 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();
214
356
  const uploadFilesToFolder = async (files, folderId)=>{
215
357
  if (files.length === 0) return;
216
358
  const formData = new FormData();
@@ -228,9 +370,11 @@ const AssetsPage = ()=>{
228
370
  try {
229
371
  await uploadFiles({
230
372
  formData,
231
- totalFiles: files.length
373
+ totalFiles: files.length,
374
+ concurrency,
375
+ generateAiMetadata: Boolean(isAiMetadataEnabled)
232
376
  }).unwrap();
233
- } catch (error) {
377
+ } catch {
234
378
  // Error is already dispatched to store from the API queryFn
235
379
  }
236
380
  };
@@ -245,160 +389,210 @@ const AssetsPage = ()=>{
245
389
  e.target.value = '';
246
390
  };
247
391
  const handleDrop = async (files)=>{
392
+ // Defence in depth: the provider is `disabled` without `assets.create`
393
+ // (so onDrop won't fire), but guard here too in case it's ever wired live.
394
+ if (!canCreate) return;
248
395
  await uploadFilesToFolder(files, currentFolderId);
249
396
  };
250
397
  const handleUrlUpload = async (urls)=>{
251
398
  try {
252
399
  await uploadFromUrls({
253
400
  urls,
254
- folderId: currentFolderId
401
+ folderId: currentFolderId,
402
+ generateAiMetadata: Boolean(isAiMetadataEnabled)
255
403
  }).unwrap();
256
- } catch (error) {
404
+ } catch {
257
405
  // Error is already dispatched to store from the API queryFn
258
406
  }
259
407
  };
408
+ // The view is deliberately absent: table and grid render the same list, so
409
+ // toggling views keeps the selection.
410
+ const listQueryKey$1 = listQueryKey.getListQueryKey({
411
+ folderId: currentFolderId,
412
+ search: searchQuery,
413
+ // Folder position changes the render order too — selection must reset.
414
+ sort: `${listSort.assetsSort};folders=${listSort.foldersPosition}`,
415
+ filter: listFilters.serialized || null
416
+ });
260
417
  return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
261
418
  children: [
262
419
  /*#__PURE__*/ jsxRuntime.jsx(UploadDropZoneContext.UploadDropZoneProvider, {
263
420
  onDrop: handleDrop,
264
- children: /*#__PURE__*/ jsxRuntime.jsx(AssetsDndProvider.AssetsDndProvider, {
265
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
266
- ref: uploadDropZoneRef,
267
- children: /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Layouts.Root, {
268
- minHeight: "100vh",
269
- background: "neutral0",
270
- sideNav: /*#__PURE__*/ jsxRuntime.jsx(FolderTree.FolderTree, {
271
- currentFolderId: currentFolderId,
272
- onSelectFolder: navigateToFolderId
421
+ disabled: !canCreate,
422
+ children: /*#__PURE__*/ jsxRuntime.jsx(useAssetSelection.AssetSelectionProvider, {
423
+ disabled: !canUpdate,
424
+ children: /*#__PURE__*/ jsxRuntime.jsxs(AssetsDndProvider.AssetsDndProvider, {
425
+ children: [
426
+ /*#__PURE__*/ jsxRuntime.jsx(ClearSelectionOnChange, {
427
+ listQueryKey: listQueryKey$1
273
428
  }),
274
- children: [
275
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.VisuallyHidden, {
276
- children: /*#__PURE__*/ jsxRuntime.jsx("input", {
277
- type: "file",
278
- ref: fileInputRef,
279
- onChange: handleFileChange,
280
- multiple: true
281
- })
282
- }),
283
- /*#__PURE__*/ jsxRuntime.jsx(HeaderWrapper, {
284
- children: /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Layouts.Header, {
285
- title: pageHeaderTitle,
286
- primaryAction: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.SimpleMenu, {
287
- popoverPlacement: "bottom-end",
288
- variant: "default",
289
- endIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.ChevronDown, {}),
290
- label: formatMessage({
291
- id: translations.getTranslationKey('new'),
292
- defaultMessage: 'New'
293
- }),
294
- children: [
295
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.MenuItem, {
296
- onSelect: ()=>setIsCreateFolderDialogOpen(true),
297
- startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Folder, {}),
298
- children: formatMessage({
299
- id: translations.getTranslationKey('folder.create.title'),
300
- defaultMessage: 'New folder'
301
- })
302
- }),
303
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.MenuItem, {
304
- onSelect: handleFileSelect,
305
- startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Files, {}),
306
- children: formatMessage({
307
- id: translations.getTranslationKey('import-files'),
308
- defaultMessage: 'Import files'
309
- })
310
- }),
311
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.MenuItem, {
312
- onSelect: ()=>setIsUrlDialogOpen(true),
313
- startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Link, {}),
314
- children: formatMessage({
315
- id: translations.getTranslationKey('import-from-url'),
316
- defaultMessage: 'Import from URL'
317
- })
318
- })
319
- ]
429
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
430
+ ref: uploadDropZoneRef,
431
+ children: /*#__PURE__*/ jsxRuntime.jsxs(strapiAdmin.Layouts.Root, {
432
+ minHeight: "100vh",
433
+ background: "neutral0",
434
+ sideNav: /*#__PURE__*/ jsxRuntime.jsx(FolderTree.FolderTree, {
435
+ currentFolderId: currentFolderId,
436
+ showActiveFolder: !isSearching,
437
+ onSelectFolder: navigateToFolderId
438
+ }),
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
+ })
320
447
  }),
321
- subtitle: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
322
- justifyContent: "space-between",
323
- alignItems: "center",
324
- gap: 4,
325
- width: "100%",
326
- children: [
327
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
328
- gap: 4,
329
- alignItems: "center",
330
- children: "TODO: Filters and search"
331
- }),
332
- /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
333
- gap: 4,
334
- alignItems: "center",
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
+ }),
335
459
  children: [
336
- /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
337
- children: "TODO: Sort"
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
+ })
338
475
  }),
339
- /*#__PURE__*/ jsxRuntime.jsxs(StyledToggleGroup, {
340
- type: "single",
341
- value: isGridView ? 'grid' : 'table',
342
- onValueChange: (value)=>value && setView(value === 'grid' ? constants.viewOptions.GRID : constants.viewOptions.TABLE),
343
- "aria-label": formatMessage({
344
- id: translations.getTranslationKey('view.switch.label'),
345
- defaultMessage: 'View options'
346
- }),
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
+ ]
485
+ }),
486
+ subtitle: /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
487
+ children: [
488
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
489
+ justifyContent: "space-between",
490
+ alignItems: "center",
491
+ gap: 4,
492
+ width: "100%",
347
493
  children: [
348
- /*#__PURE__*/ jsxRuntime.jsxs(StyledToggleItem, {
349
- value: "table",
350
- "aria-label": formatMessage({
351
- id: translations.getTranslationKey('view.table'),
352
- defaultMessage: 'Table view'
353
- }),
494
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
495
+ gap: 4,
496
+ alignItems: "center",
354
497
  children: [
355
- /*#__PURE__*/ jsxRuntime.jsx(icons.List, {}),
356
- formatMessage({
357
- id: translations.getTranslationKey('view.table'),
358
- defaultMessage: 'Table view'
359
- })
498
+ /*#__PURE__*/ jsxRuntime.jsx(FilterMenu.FilterMenu, {
499
+ listFilters: listFilters
500
+ }),
501
+ /*#__PURE__*/ jsxRuntime.jsx(AssetsSearchInput.AssetsSearchInput, {})
360
502
  ]
361
503
  }),
362
- /*#__PURE__*/ jsxRuntime.jsxs(StyledToggleItem, {
363
- value: "grid",
364
- "aria-label": formatMessage({
365
- id: translations.getTranslationKey('view.grid'),
366
- defaultMessage: 'Grid view'
367
- }),
504
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
505
+ gap: 4,
506
+ alignItems: "center",
368
507
  children: [
369
- /*#__PURE__*/ jsxRuntime.jsx(icons.GridFour, {}),
370
- formatMessage({
371
- id: translations.getTranslationKey('view.grid'),
372
- defaultMessage: 'Grid view'
508
+ /*#__PURE__*/ jsxRuntime.jsx(SortMenu.SortMenu, {
509
+ sort: listSort,
510
+ showFoldersGroup: !isGridView
511
+ }),
512
+ /*#__PURE__*/ jsxRuntime.jsxs(StyledToggleGroup, {
513
+ type: "single",
514
+ value: isGridView ? 'grid' : 'table',
515
+ onValueChange: (value)=>value && setView(value === 'grid' ? constants.viewOptions.GRID : constants.viewOptions.TABLE),
516
+ "aria-label": formatMessage({
517
+ id: translations.getTranslationKey('view.switch.label'),
518
+ defaultMessage: 'View options'
519
+ }),
520
+ children: [
521
+ /*#__PURE__*/ jsxRuntime.jsxs(StyledToggleItem, {
522
+ value: "table",
523
+ "aria-label": formatMessage({
524
+ id: translations.getTranslationKey('view.table'),
525
+ defaultMessage: 'Table view'
526
+ }),
527
+ children: [
528
+ /*#__PURE__*/ jsxRuntime.jsx(icons.List, {}),
529
+ formatMessage({
530
+ id: translations.getTranslationKey('view.table'),
531
+ defaultMessage: 'Table view'
532
+ })
533
+ ]
534
+ }),
535
+ /*#__PURE__*/ jsxRuntime.jsxs(StyledToggleItem, {
536
+ value: "grid",
537
+ "aria-label": formatMessage({
538
+ id: translations.getTranslationKey('view.grid'),
539
+ defaultMessage: 'Grid view'
540
+ }),
541
+ children: [
542
+ /*#__PURE__*/ jsxRuntime.jsx(icons.GridFour, {}),
543
+ formatMessage({
544
+ id: translations.getTranslationKey('view.grid'),
545
+ defaultMessage: 'Grid view'
546
+ })
547
+ ]
548
+ })
549
+ ]
373
550
  })
374
551
  ]
375
552
  })
376
553
  ]
554
+ }),
555
+ /*#__PURE__*/ jsxRuntime.jsx(FilterBadges.FilterBadges, {
556
+ listFilters: listFilters
377
557
  })
378
558
  ]
379
559
  })
380
- ]
381
- })
382
- })
383
- }),
384
- /*#__PURE__*/ jsxRuntime.jsx(strapiAdmin.Layouts.Content, {
385
- children: /*#__PURE__*/ jsxRuntime.jsxs(UploadDropZone.DropZoneWithOverlay, {
386
- children: [
387
- /*#__PURE__*/ jsxRuntime.jsx(UploadDropZone.DropFilesMessage, {
388
- uploadDropZoneRef: uploadDropZoneRef,
389
- folderName: title
390
- }),
391
- /*#__PURE__*/ jsxRuntime.jsx(AssetsView, {
392
- view: view,
393
- folderId: currentFolderId,
394
- onAssetItemClick: openDetails,
395
- onAddAssets: handleFileSelect
396
560
  })
397
- ]
398
- })
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
+ })
591
+ })
592
+ ]
399
593
  })
400
- ]
401
- })
594
+ })
595
+ ]
402
596
  })
403
597
  })
404
598
  }),