@strapi/upload 5.51.1 → 5.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (369) 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/App.js +3 -3
  14. package/dist/admin/future/App.js.map +1 -1
  15. package/dist/admin/future/App.mjs +4 -4
  16. package/dist/admin/future/App.mjs.map +1 -1
  17. package/dist/admin/future/components/BetaNotice.js +72 -0
  18. package/dist/admin/future/components/BetaNotice.js.map +1 -0
  19. package/dist/admin/future/components/BetaNotice.mjs +70 -0
  20. package/dist/admin/future/components/BetaNotice.mjs.map +1 -0
  21. package/dist/admin/future/components/Drawer.js +18 -3
  22. package/dist/admin/future/components/Drawer.js.map +1 -1
  23. package/dist/admin/future/components/Drawer.mjs +18 -3
  24. package/dist/admin/future/components/Drawer.mjs.map +1 -1
  25. package/dist/admin/future/components/UploadProgressDialog.js +200 -27
  26. package/dist/admin/future/components/UploadProgressDialog.js.map +1 -1
  27. package/dist/admin/future/components/UploadProgressDialog.mjs +203 -30
  28. package/dist/admin/future/components/UploadProgressDialog.mjs.map +1 -1
  29. package/dist/admin/future/hooks/useAIMetadataEnabled.js +39 -0
  30. package/dist/admin/future/hooks/useAIMetadataEnabled.js.map +1 -0
  31. package/dist/admin/future/hooks/useAIMetadataEnabled.mjs +37 -0
  32. package/dist/admin/future/hooks/useAIMetadataEnabled.mjs.map +1 -0
  33. package/dist/admin/future/hooks/useMediaLibraryPermissions.js +35 -0
  34. package/dist/admin/future/hooks/useMediaLibraryPermissions.js.map +1 -0
  35. package/dist/admin/future/hooks/useMediaLibraryPermissions.mjs +33 -0
  36. package/dist/admin/future/hooks/useMediaLibraryPermissions.mjs.map +1 -0
  37. package/dist/admin/future/pages/Assets/AssetsPage.js +453 -170
  38. package/dist/admin/future/pages/Assets/AssetsPage.js.map +1 -1
  39. package/dist/admin/future/pages/Assets/AssetsPage.mjs +454 -171
  40. package/dist/admin/future/pages/Assets/AssetsPage.mjs.map +1 -1
  41. package/dist/admin/future/pages/Assets/components/ActionsMenuContent.js +46 -0
  42. package/dist/admin/future/pages/Assets/components/ActionsMenuContent.js.map +1 -0
  43. package/dist/admin/future/pages/Assets/components/ActionsMenuContent.mjs +44 -0
  44. package/dist/admin/future/pages/Assets/components/ActionsMenuContent.mjs.map +1 -0
  45. package/dist/admin/future/pages/Assets/components/AssetActionsMenu.js +325 -0
  46. package/dist/admin/future/pages/Assets/components/AssetActionsMenu.js.map +1 -0
  47. package/dist/admin/future/pages/Assets/components/AssetActionsMenu.mjs +323 -0
  48. package/dist/admin/future/pages/Assets/components/AssetActionsMenu.mjs.map +1 -0
  49. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.js +110 -46
  50. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.js.map +1 -1
  51. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.mjs +110 -46
  52. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.mjs.map +1 -1
  53. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js +95 -67
  54. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js.map +1 -1
  55. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs +95 -68
  56. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs.map +1 -1
  57. package/dist/admin/future/pages/Assets/components/AssetsGrid.js +94 -26
  58. package/dist/admin/future/pages/Assets/components/AssetsGrid.js.map +1 -1
  59. package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs +96 -28
  60. package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs.map +1 -1
  61. package/dist/admin/future/pages/Assets/components/AssetsSearchInput.js +112 -0
  62. package/dist/admin/future/pages/Assets/components/AssetsSearchInput.js.map +1 -0
  63. package/dist/admin/future/pages/Assets/components/AssetsSearchInput.mjs +110 -0
  64. package/dist/admin/future/pages/Assets/components/AssetsSearchInput.mjs.map +1 -0
  65. package/dist/admin/future/pages/Assets/components/AssetsTable.js +172 -56
  66. package/dist/admin/future/pages/Assets/components/AssetsTable.js.map +1 -1
  67. package/dist/admin/future/pages/Assets/components/AssetsTable.mjs +175 -59
  68. package/dist/admin/future/pages/Assets/components/AssetsTable.mjs.map +1 -1
  69. package/dist/admin/future/pages/Assets/components/BulkActionsBar.js +188 -138
  70. package/dist/admin/future/pages/Assets/components/BulkActionsBar.js.map +1 -1
  71. package/dist/admin/future/pages/Assets/components/BulkActionsBar.mjs +191 -141
  72. package/dist/admin/future/pages/Assets/components/BulkActionsBar.mjs.map +1 -1
  73. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.js +123 -76
  74. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.js.map +1 -1
  75. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.mjs +126 -79
  76. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.mjs.map +1 -1
  77. package/dist/admin/future/pages/Assets/components/BusyOverlay.js +36 -0
  78. package/dist/admin/future/pages/Assets/components/BusyOverlay.js.map +1 -0
  79. package/dist/admin/future/pages/Assets/components/BusyOverlay.mjs +34 -0
  80. package/dist/admin/future/pages/Assets/components/BusyOverlay.mjs.map +1 -0
  81. package/dist/admin/future/pages/Assets/components/DateRangeCalendar.js +193 -0
  82. package/dist/admin/future/pages/Assets/components/DateRangeCalendar.js.map +1 -0
  83. package/dist/admin/future/pages/Assets/components/DateRangeCalendar.mjs +191 -0
  84. package/dist/admin/future/pages/Assets/components/DateRangeCalendar.mjs.map +1 -0
  85. package/dist/admin/future/pages/Assets/components/DeleteItemsDialog.js +131 -0
  86. package/dist/admin/future/pages/Assets/components/DeleteItemsDialog.js.map +1 -0
  87. package/dist/admin/future/pages/Assets/components/DeleteItemsDialog.mjs +129 -0
  88. package/dist/admin/future/pages/Assets/components/DeleteItemsDialog.mjs.map +1 -0
  89. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.js +45 -18
  90. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.js.map +1 -1
  91. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.mjs +46 -19
  92. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.mjs.map +1 -1
  93. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.js +28 -31
  94. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.js.map +1 -1
  95. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.mjs +28 -31
  96. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.mjs.map +1 -1
  97. package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.js +10 -15
  98. package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.js.map +1 -1
  99. package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.mjs +10 -15
  100. package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.mjs.map +1 -1
  101. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.js +13 -3
  102. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.js.map +1 -1
  103. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.mjs +13 -3
  104. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.mjs.map +1 -1
  105. package/dist/admin/future/pages/Assets/components/EmptyState.js +62 -3
  106. package/dist/admin/future/pages/Assets/components/EmptyState.js.map +1 -1
  107. package/dist/admin/future/pages/Assets/components/EmptyState.mjs +62 -4
  108. package/dist/admin/future/pages/Assets/components/EmptyState.mjs.map +1 -1
  109. package/dist/admin/future/pages/Assets/components/FilterBadges.js +417 -0
  110. package/dist/admin/future/pages/Assets/components/FilterBadges.js.map +1 -0
  111. package/dist/admin/future/pages/Assets/components/FilterBadges.mjs +415 -0
  112. package/dist/admin/future/pages/Assets/components/FilterBadges.mjs.map +1 -0
  113. package/dist/admin/future/pages/Assets/components/FilterMenu.js +453 -0
  114. package/dist/admin/future/pages/Assets/components/FilterMenu.js.map +1 -0
  115. package/dist/admin/future/pages/Assets/components/FilterMenu.mjs +447 -0
  116. package/dist/admin/future/pages/Assets/components/FilterMenu.mjs.map +1 -0
  117. package/dist/admin/future/pages/Assets/components/FolderActionsMenu.js +144 -0
  118. package/dist/admin/future/pages/Assets/components/FolderActionsMenu.js.map +1 -0
  119. package/dist/admin/future/pages/Assets/components/FolderActionsMenu.mjs +142 -0
  120. package/dist/admin/future/pages/Assets/components/FolderActionsMenu.mjs.map +1 -0
  121. package/dist/admin/future/pages/Assets/components/{CreateFolderDialog.js → FolderFormDialog.js} +50 -16
  122. package/dist/admin/future/pages/Assets/components/FolderFormDialog.js.map +1 -0
  123. package/dist/admin/future/pages/Assets/components/{CreateFolderDialog.mjs → FolderFormDialog.mjs} +52 -18
  124. package/dist/admin/future/pages/Assets/components/FolderFormDialog.mjs.map +1 -0
  125. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.js +125 -148
  126. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.js.map +1 -1
  127. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.mjs +127 -150
  128. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.mjs.map +1 -1
  129. package/dist/admin/future/pages/Assets/components/SortMenu.js +21 -32
  130. package/dist/admin/future/pages/Assets/components/SortMenu.js.map +1 -1
  131. package/dist/admin/future/pages/Assets/components/SortMenu.mjs +22 -33
  132. package/dist/admin/future/pages/Assets/components/SortMenu.mjs.map +1 -1
  133. package/dist/admin/future/pages/Assets/hooks/useAssetSearch.js +40 -0
  134. package/dist/admin/future/pages/Assets/hooks/useAssetSearch.js.map +1 -0
  135. package/dist/admin/future/pages/Assets/hooks/useAssetSearch.mjs +38 -0
  136. package/dist/admin/future/pages/Assets/hooks/useAssetSearch.mjs.map +1 -0
  137. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.js +21 -5
  138. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.js.map +1 -1
  139. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.mjs +21 -5
  140. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.mjs.map +1 -1
  141. package/dist/admin/future/pages/Assets/hooks/useBusyAssets.js +47 -0
  142. package/dist/admin/future/pages/Assets/hooks/useBusyAssets.js.map +1 -0
  143. package/dist/admin/future/pages/Assets/hooks/useBusyAssets.mjs +44 -0
  144. package/dist/admin/future/pages/Assets/hooks/useBusyAssets.mjs.map +1 -0
  145. package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.js +33 -12
  146. package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.js.map +1 -1
  147. package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.mjs +33 -12
  148. package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.mjs.map +1 -1
  149. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.js +222 -45
  150. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.js.map +1 -1
  151. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.mjs +223 -46
  152. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.mjs.map +1 -1
  153. package/dist/admin/future/pages/Assets/hooks/useInfiniteScrollSentinel.js +75 -0
  154. package/dist/admin/future/pages/Assets/hooks/useInfiniteScrollSentinel.js.map +1 -0
  155. package/dist/admin/future/pages/Assets/hooks/useInfiniteScrollSentinel.mjs +73 -0
  156. package/dist/admin/future/pages/Assets/hooks/useInfiniteScrollSentinel.mjs.map +1 -0
  157. package/dist/admin/future/pages/Assets/hooks/useListFilters.js +168 -0
  158. package/dist/admin/future/pages/Assets/hooks/useListFilters.js.map +1 -0
  159. package/dist/admin/future/pages/Assets/hooks/useListFilters.mjs +162 -0
  160. package/dist/admin/future/pages/Assets/hooks/useListFilters.mjs.map +1 -0
  161. package/dist/admin/future/pages/Assets/utils/buildAssetFilters.js +201 -0
  162. package/dist/admin/future/pages/Assets/utils/buildAssetFilters.js.map +1 -0
  163. package/dist/admin/future/pages/Assets/utils/buildAssetFilters.mjs +198 -0
  164. package/dist/admin/future/pages/Assets/utils/buildAssetFilters.mjs.map +1 -0
  165. package/dist/admin/future/pages/Assets/utils/listQueryKey.js +2 -2
  166. package/dist/admin/future/pages/Assets/utils/listQueryKey.js.map +1 -1
  167. package/dist/admin/future/pages/Assets/utils/listQueryKey.mjs +2 -2
  168. package/dist/admin/future/pages/Assets/utils/listQueryKey.mjs.map +1 -1
  169. package/dist/admin/future/services/api.js +187 -28
  170. package/dist/admin/future/services/api.js.map +1 -1
  171. package/dist/admin/future/services/api.mjs +187 -30
  172. package/dist/admin/future/services/api.mjs.map +1 -1
  173. package/dist/admin/future/services/assets.js +40 -17
  174. package/dist/admin/future/services/assets.js.map +1 -1
  175. package/dist/admin/future/services/assets.mjs +40 -17
  176. package/dist/admin/future/services/assets.mjs.map +1 -1
  177. package/dist/admin/future/services/folders.js +66 -19
  178. package/dist/admin/future/services/folders.js.map +1 -1
  179. package/dist/admin/future/services/folders.mjs +66 -20
  180. package/dist/admin/future/services/folders.mjs.map +1 -1
  181. package/dist/admin/future/services/settings.js +10 -3
  182. package/dist/admin/future/services/settings.js.map +1 -1
  183. package/dist/admin/future/services/settings.mjs +10 -3
  184. package/dist/admin/future/services/settings.mjs.map +1 -1
  185. package/dist/admin/future/store/uploadProgress.js +109 -2
  186. package/dist/admin/future/store/uploadProgress.js.map +1 -1
  187. package/dist/admin/future/store/uploadProgress.mjs +105 -3
  188. package/dist/admin/future/store/uploadProgress.mjs.map +1 -1
  189. package/dist/admin/future/utils/buildDragSetFromSelection.js +7 -5
  190. package/dist/admin/future/utils/buildDragSetFromSelection.js.map +1 -1
  191. package/dist/admin/future/utils/buildDragSetFromSelection.mjs +7 -5
  192. package/dist/admin/future/utils/buildDragSetFromSelection.mjs.map +1 -1
  193. package/dist/admin/future/utils/formatMoveSuccessMessage.js +12 -1
  194. package/dist/admin/future/utils/formatMoveSuccessMessage.js.map +1 -1
  195. package/dist/admin/future/utils/formatMoveSuccessMessage.mjs +12 -1
  196. package/dist/admin/future/utils/formatMoveSuccessMessage.mjs.map +1 -1
  197. package/dist/admin/future/utils/getRelationId.js +24 -0
  198. package/dist/admin/future/utils/getRelationId.js.map +1 -0
  199. package/dist/admin/future/utils/getRelationId.mjs +22 -0
  200. package/dist/admin/future/utils/getRelationId.mjs.map +1 -0
  201. package/dist/admin/future/utils/isEventFromWithin.js +14 -0
  202. package/dist/admin/future/utils/isEventFromWithin.js.map +1 -0
  203. package/dist/admin/future/utils/isEventFromWithin.mjs +12 -0
  204. package/dist/admin/future/utils/isEventFromWithin.mjs.map +1 -0
  205. package/dist/admin/future/utils/itemLocations.js +40 -0
  206. package/dist/admin/future/utils/itemLocations.js.map +1 -0
  207. package/dist/admin/future/utils/itemLocations.mjs +36 -0
  208. package/dist/admin/future/utils/itemLocations.mjs.map +1 -0
  209. package/dist/admin/future/utils/itemSource.js +36 -0
  210. package/dist/admin/future/utils/itemSource.js.map +1 -0
  211. package/dist/admin/future/utils/itemSource.mjs +32 -0
  212. package/dist/admin/future/utils/itemSource.mjs.map +1 -0
  213. package/dist/admin/future/utils/searchQueryParam.js +11 -0
  214. package/dist/admin/future/utils/searchQueryParam.js.map +1 -0
  215. package/dist/admin/future/utils/searchQueryParam.mjs +9 -0
  216. package/dist/admin/future/utils/searchQueryParam.mjs.map +1 -0
  217. package/dist/admin/hooks/useSelectionState.js +2 -4
  218. package/dist/admin/hooks/useSelectionState.js.map +1 -1
  219. package/dist/admin/hooks/useSelectionState.mjs +2 -4
  220. package/dist/admin/hooks/useSelectionState.mjs.map +1 -1
  221. package/dist/admin/index.js +11 -17
  222. package/dist/admin/index.js.map +1 -1
  223. package/dist/admin/index.mjs +12 -18
  224. package/dist/admin/index.mjs.map +1 -1
  225. package/dist/admin/shared/constants.js +43 -0
  226. package/dist/admin/shared/constants.js.map +1 -0
  227. package/dist/admin/shared/constants.mjs +38 -0
  228. package/dist/admin/shared/constants.mjs.map +1 -0
  229. package/dist/admin/src/future/App.d.ts +1 -1
  230. package/dist/admin/src/future/components/BetaNotice.d.ts +11 -0
  231. package/dist/admin/src/future/components/Drawer.d.ts +5 -1
  232. package/dist/admin/src/future/hooks/useAIMetadataEnabled.d.ts +26 -0
  233. package/dist/admin/src/future/hooks/useMediaLibraryPermissions.d.ts +21 -0
  234. package/dist/admin/src/future/pages/Assets/components/ActionsMenuContent.d.ts +33 -0
  235. package/dist/admin/src/future/pages/Assets/components/AssetActionsMenu.d.ts +24 -0
  236. package/dist/admin/src/future/pages/Assets/components/AssetDetails/AssetCropEditor.d.ts +7 -1
  237. package/dist/admin/src/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.d.ts +16 -0
  238. package/dist/admin/src/future/pages/Assets/components/AssetsSearchInput.d.ts +5 -0
  239. package/dist/admin/src/future/pages/Assets/components/BulkActionsBar.d.ts +21 -1
  240. package/dist/admin/src/future/pages/Assets/components/BulkMoveDialog.d.ts +17 -6
  241. package/dist/admin/src/future/pages/Assets/components/BusyOverlay.d.ts +9 -0
  242. package/dist/admin/src/future/pages/Assets/components/DateRangeCalendar.d.ts +8 -0
  243. package/dist/admin/src/future/pages/Assets/components/DeleteItemsDialog.d.ts +27 -0
  244. package/dist/admin/src/future/pages/Assets/components/Dnd/AssetsDndProvider.d.ts +8 -1
  245. package/dist/admin/src/future/pages/Assets/components/Dnd/buildDragSet.d.ts +18 -3
  246. package/dist/admin/src/future/pages/Assets/components/Dnd/useAssetDnd.d.ts +2 -1
  247. package/dist/admin/src/future/pages/Assets/components/DropZone/UploadDropZoneContext.d.ts +8 -1
  248. package/dist/admin/src/future/pages/Assets/components/EmptyState.d.ts +18 -1
  249. package/dist/admin/src/future/pages/Assets/components/FilterBadges.d.ts +8 -0
  250. package/dist/admin/src/future/pages/Assets/components/FilterMenu.d.ts +26 -0
  251. package/dist/admin/src/future/pages/Assets/components/FolderActionsMenu.d.ts +20 -0
  252. package/dist/admin/src/future/pages/Assets/components/FolderFormDialog.d.ts +16 -0
  253. package/dist/admin/src/future/pages/Assets/components/FolderTree/FolderTree.d.ts +13 -4
  254. package/dist/admin/src/future/pages/Assets/components/SortMenu.d.ts +6 -0
  255. package/dist/admin/src/future/pages/Assets/hooks/useAssetSearch.d.ts +12 -0
  256. package/dist/admin/src/future/pages/Assets/hooks/useAssetSelection.d.ts +8 -1
  257. package/dist/admin/src/future/pages/Assets/hooks/useBusyAssets.d.ts +38 -0
  258. package/dist/admin/src/future/pages/Assets/hooks/useInfiniteAssets.d.ts +27 -3
  259. package/dist/admin/src/future/pages/Assets/hooks/useInfiniteScrollSentinel.d.ts +41 -0
  260. package/dist/admin/src/future/pages/Assets/hooks/useListFilters.d.ts +69 -0
  261. package/dist/admin/src/future/pages/Assets/utils/buildAssetFilters.d.ts +46 -0
  262. package/dist/admin/src/future/pages/Assets/utils/listQueryKey.d.ts +3 -4
  263. package/dist/admin/src/future/services/api.d.ts +53 -5
  264. package/dist/admin/src/future/services/assets.d.ts +9 -1
  265. package/dist/admin/src/future/services/folders.d.ts +9 -1
  266. package/dist/admin/src/future/services/settings.d.ts +2 -2
  267. package/dist/admin/src/future/store/uploadProgress.d.ts +83 -1
  268. package/dist/admin/src/future/utils/buildDragSetFromSelection.d.ts +4 -3
  269. package/dist/admin/src/future/utils/formatMoveSuccessMessage.d.ts +7 -1
  270. package/dist/admin/src/future/utils/getRelationId.d.ts +11 -0
  271. package/dist/admin/src/future/utils/isEventFromWithin.d.ts +11 -0
  272. package/dist/admin/src/future/utils/itemLocations.d.ts +31 -0
  273. package/dist/admin/src/future/utils/itemSource.d.ts +22 -0
  274. package/dist/admin/src/future/utils/searchQueryParam.d.ts +7 -0
  275. package/dist/admin/src/hooks/useAiAvailability.d.ts +1 -1
  276. package/dist/admin/src/hooks/useEditAsset.d.ts +4 -4
  277. package/dist/admin/src/hooks/useEditFolder.d.ts +4 -4
  278. package/dist/admin/src/hooks/useSettings.d.ts +1 -0
  279. package/dist/admin/src/hooks/useTracking.d.ts +1 -1
  280. package/dist/admin/src/hooks/useUpload.d.ts +1 -1
  281. package/dist/admin/translations/en.json.js +73 -2
  282. package/dist/admin/translations/en.json.js.map +1 -1
  283. package/dist/admin/translations/en.json.mjs +73 -2
  284. package/dist/admin/translations/en.json.mjs.map +1 -1
  285. package/dist/admin/utils/urlYupSchema.js +33 -9
  286. package/dist/admin/utils/urlYupSchema.js.map +1 -1
  287. package/dist/admin/utils/urlYupSchema.mjs +33 -9
  288. package/dist/admin/utils/urlYupSchema.mjs.map +1 -1
  289. package/dist/server/config.js +13 -5
  290. package/dist/server/config.js.map +1 -1
  291. package/dist/server/config.mjs +13 -5
  292. package/dist/server/config.mjs.map +1 -1
  293. package/dist/server/constants.js.map +1 -1
  294. package/dist/server/constants.mjs.map +1 -1
  295. package/dist/server/controllers/admin-file.js +30 -0
  296. package/dist/server/controllers/admin-file.js.map +1 -1
  297. package/dist/server/controllers/admin-file.mjs +30 -0
  298. package/dist/server/controllers/admin-file.mjs.map +1 -1
  299. package/dist/server/controllers/admin-settings.js +20 -2
  300. package/dist/server/controllers/admin-settings.js.map +1 -1
  301. package/dist/server/controllers/admin-settings.mjs +21 -3
  302. package/dist/server/controllers/admin-settings.mjs.map +1 -1
  303. package/dist/server/controllers/content-api.js +1 -2
  304. package/dist/server/controllers/content-api.js.map +1 -1
  305. package/dist/server/controllers/content-api.mjs +2 -2
  306. package/dist/server/controllers/content-api.mjs.map +1 -1
  307. package/dist/server/controllers/validation/admin/ai-metadata.js +12 -0
  308. package/dist/server/controllers/validation/admin/ai-metadata.js.map +1 -0
  309. package/dist/server/controllers/validation/admin/ai-metadata.mjs +10 -0
  310. package/dist/server/controllers/validation/admin/ai-metadata.mjs.map +1 -0
  311. package/dist/server/controllers/validation/admin/settings.js +4 -1
  312. package/dist/server/controllers/validation/admin/settings.js.map +1 -1
  313. package/dist/server/controllers/validation/admin/settings.mjs +1 -1
  314. package/dist/server/controllers/validation/admin/settings.mjs.map +1 -1
  315. package/dist/server/routes/admin.js +18 -0
  316. package/dist/server/routes/admin.js.map +1 -1
  317. package/dist/server/routes/admin.mjs +18 -0
  318. package/dist/server/routes/admin.mjs.map +1 -1
  319. package/dist/server/services/ai-metadata.js +108 -11
  320. package/dist/server/services/ai-metadata.js.map +1 -1
  321. package/dist/server/services/ai-metadata.mjs +108 -11
  322. package/dist/server/services/ai-metadata.mjs.map +1 -1
  323. package/dist/server/services/file.js +86 -13
  324. package/dist/server/services/file.js.map +1 -1
  325. package/dist/server/services/file.mjs +87 -14
  326. package/dist/server/services/file.mjs.map +1 -1
  327. package/dist/server/services/image-manipulation.js +4 -4
  328. package/dist/server/services/image-manipulation.js.map +1 -1
  329. package/dist/server/services/image-manipulation.mjs +4 -4
  330. package/dist/server/services/image-manipulation.mjs.map +1 -1
  331. package/dist/server/shared/constants.js +43 -0
  332. package/dist/server/shared/constants.js.map +1 -0
  333. package/dist/server/shared/constants.mjs +38 -0
  334. package/dist/server/shared/constants.mjs.map +1 -0
  335. package/dist/server/src/config.d.ts +2 -0
  336. package/dist/server/src/config.d.ts.map +1 -1
  337. package/dist/server/src/constants.d.ts +2 -1
  338. package/dist/server/src/constants.d.ts.map +1 -1
  339. package/dist/server/src/controllers/admin-file.d.ts +10 -0
  340. package/dist/server/src/controllers/admin-file.d.ts.map +1 -1
  341. package/dist/server/src/controllers/admin-settings.d.ts.map +1 -1
  342. package/dist/server/src/controllers/index.d.ts +1 -0
  343. package/dist/server/src/controllers/index.d.ts.map +1 -1
  344. package/dist/server/src/controllers/validation/admin/ai-metadata.d.ts +2 -0
  345. package/dist/server/src/controllers/validation/admin/ai-metadata.d.ts.map +1 -0
  346. package/dist/server/src/controllers/validation/admin/settings.d.ts +1 -1
  347. package/dist/server/src/controllers/validation/admin/settings.d.ts.map +1 -1
  348. package/dist/server/src/index.d.ts +7 -1
  349. package/dist/server/src/index.d.ts.map +1 -1
  350. package/dist/server/src/routes/admin.d.ts.map +1 -1
  351. package/dist/server/src/services/ai-metadata.d.ts +19 -0
  352. package/dist/server/src/services/ai-metadata.d.ts.map +1 -1
  353. package/dist/server/src/services/file.d.ts +12 -2
  354. package/dist/server/src/services/file.d.ts.map +1 -1
  355. package/dist/server/src/services/image-manipulation.d.ts +0 -5
  356. package/dist/server/src/services/image-manipulation.d.ts.map +1 -1
  357. package/dist/server/src/services/index.d.ts +4 -1
  358. package/dist/server/src/services/index.d.ts.map +1 -1
  359. package/dist/server/src/types.d.ts +3 -0
  360. package/dist/server/src/types.d.ts.map +1 -1
  361. package/dist/shared/constants.d.ts +35 -0
  362. package/dist/shared/constants.d.ts.map +1 -0
  363. package/dist/shared/contracts/files.d.ts +25 -0
  364. package/dist/shared/contracts/files.d.ts.map +1 -1
  365. package/dist/shared/contracts/settings.d.ts +7 -0
  366. package/package.json +10 -10
  367. package/dist/admin/future/pages/Assets/components/CreateFolderDialog.js.map +0 -1
  368. package/dist/admin/future/pages/Assets/components/CreateFolderDialog.mjs.map +0 -1
  369. package/dist/admin/src/future/pages/Assets/components/CreateFolderDialog.d.ts +0 -8
@@ -1 +1 @@
1
- {"version":3,"file":"AssetsPage.js","sources":["../../../../../admin/src/future/pages/Assets/AssetsPage.tsx"],"sourcesContent":["import { useRef, useCallback, useMemo, useState, useEffect, type ChangeEvent } from 'react';\n\nimport * as ToggleGroup from '@radix-ui/react-toggle-group';\nimport { Layouts, useElementOnScreen, usePersistentState } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n Loader,\n MenuItem,\n SimpleMenu,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { ChevronDown, Files, Folder, GridFour as GridIcon, Link, List } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { useUploadFromUrlsMutation, useUploadFilesMutation } from '../../services/api';\nimport { useGetFolderQuery, useGetFoldersQuery } from '../../services/folders';\nimport { getTranslationKey } from '../../utils/translations';\n\nimport {\n AssetDetailsDrawer,\n useAssetDetailsParam,\n} from './components/AssetDetails/AssetDetailsDrawer';\nimport { AssetsGrid } from './components/AssetsGrid';\nimport { AssetsTable } from './components/AssetsTable';\nimport { BulkActionsBar } from './components/BulkActionsBar';\nimport { CreateFolderDialog } from './components/CreateFolderDialog';\nimport { AssetsDndProvider } from './components/Dnd/AssetsDndProvider';\nimport { DropFilesMessage, DropZoneWithOverlay } from './components/DropZone/UploadDropZone';\nimport { UploadDropZoneProvider } from './components/DropZone/UploadDropZoneContext';\nimport { EmptyState } from './components/EmptyState';\nimport { FolderTree } from './components/FolderTree/FolderTree';\nimport { ImportFromUrlDialog } from './components/ImportFromUrlDialog';\nimport { SortMenu } from './components/SortMenu';\nimport { localStorageKeys, viewOptions } from './constants';\nimport { AssetSelectionProvider, useAssetSelection } from './hooks/useAssetSelection';\nimport { useFolderInfo } from './hooks/useFolderInfo';\nimport { useFolderNavigation } from './hooks/useFolderNavigation';\nimport { useInfiniteAssets } from './hooks/useInfiniteAssets';\nimport { useListSort, type FoldersPosition } from './hooks/useListSort';\nimport { getListQueryKey } from './utils/listQueryKey';\nimport { mergeMixedList } from './utils/mergeMixedList';\n\nimport type { UploadFileInfo } from '../../../../../shared/contracts/files';\n\nconst INTERSECTION_OPTIONS: IntersectionObserverInit = { threshold: 0.1 };\n\n/* -------------------------------------------------------------------------------------------------\n * AssetsView\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AssetsViewProps {\n view: number;\n folderId: number | null;\n assetsSort: string;\n foldersSort: string;\n foldersPosition: FoldersPosition;\n onAssetItemClick: (assetId: number) => void;\n onAddAssets: () => void;\n}\n\nconst AssetsView = ({\n view,\n folderId,\n assetsSort,\n foldersSort,\n foldersPosition,\n onAssetItemClick,\n onAddAssets,\n}: AssetsViewProps) => {\n const { formatMessage } = useIntl();\n const {\n assets,\n isLoading: isLoadingAssets,\n isFetchingMore,\n hasNextPage,\n fetchNextPage,\n error,\n } = useInfiniteAssets({ folder: folderId, sort: assetsSort });\n const { data: folders = [], isLoading: isLoadingFolders } = useGetFoldersQuery({\n parentId: folderId,\n sort: foldersSort,\n });\n\n const isGridView = view === viewOptions.GRID;\n const isLoading = isLoadingAssets || isLoadingFolders;\n\n // \"Folders: Mixed with files\" — interleave the complete folder list into the\n // loaded asset stream client-side, following the active sort. Table view\n // only: the grid always keeps folders in their own band on top.\n const mixedItems = useMemo(\n () =>\n foldersPosition === 'mixed' && !isGridView\n ? mergeMixedList({ folders, assets, sort: assetsSort, hasNextPage })\n : null,\n [foldersPosition, isGridView, folders, assets, assetsSort, hasNextPage]\n );\n\n const loadMoreRef = useElementOnScreen<HTMLDivElement>(\n useCallback(\n (isVisible) => {\n if (isVisible && hasNextPage && !isFetchingMore) {\n fetchNextPage();\n }\n },\n [hasNextPage, isFetchingMore, fetchNextPage]\n ),\n INTERSECTION_OPTIONS\n );\n\n if (isLoading) {\n return (\n <Flex justifyContent=\"center\" padding={8}>\n <Loader>{formatMessage({ id: 'app.loading', defaultMessage: 'Loading...' })}</Loader>\n </Flex>\n );\n }\n\n if (error) {\n return (\n <Box padding={8}>\n <Typography textColor=\"danger600\">\n {formatMessage({\n id: getTranslationKey('list.assets.error'),\n defaultMessage: 'An error occurred while fetching assets.',\n })}\n </Typography>\n </Box>\n );\n }\n\n if (folders.length === 0 && assets.length === 0) {\n return <EmptyState onAddAssets={onAddAssets} />;\n }\n return (\n <>\n {isGridView ? (\n <AssetsGrid folders={folders} assets={assets} onAssetItemClick={onAssetItemClick} />\n ) : (\n <AssetsTable\n assets={assets}\n folders={folders}\n mixedItems={mixedItems}\n onAssetItemClick={onAssetItemClick}\n />\n )}\n <div ref={loadMoreRef} style={{ height: 1 }} />\n {isFetchingMore && (\n <Flex justifyContent=\"center\" padding={4}>\n <Loader>\n {formatMessage({\n id: getTranslationKey('list.assets.loading-more'),\n defaultMessage: 'Loading more assets...',\n })}\n </Loader>\n </Flex>\n )}\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ClearSelectionOnChange\n *\n * Selection is list-scoped: it resets when the user is looking at a different list.\n * The list fingerprint is getListQueryKey() — folder, search, sort, filter.\n *\n * Hybrid rule: infinite scroll does not change the key (selection persists).\n * Search/sort/filter changes do (selection clears) — same mental model as folder nav.\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ClearSelectionOnChangeProps {\n listQueryKey: string;\n}\n\nconst ClearSelectionOnChange = ({ listQueryKey }: ClearSelectionOnChangeProps) => {\n const { clear } = useAssetSelection();\n\n useEffect(() => {\n clear();\n }, [listQueryKey, clear]);\n\n return null;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AssetsPage\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Mirrors the design-system Toggle look (grey track, white active segment\n * card) — reproduced locally because the DS component is a labels-only\n * boolean input (no icons) and paints its left segment in danger red. Here\n * both segments use the primary blue when active.\n */\nconst StyledToggleGroup = styled(ToggleGroup.Root)`\n display: flex;\n padding: ${({ theme }) => theme.spaces[1]};\n background: ${({ theme }) => theme.colors.neutral100};\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-radius: ${({ theme }) => theme.borderRadius};\n`;\n\nconst StyledToggleItem = styled(ToggleGroup.Item)`\n display: flex;\n flex: 1 1 50%;\n align-items: center;\n justify-content: center;\n gap: ${({ theme }) => theme.spaces[2]};\n padding: 0.6rem ${({ theme }) => theme.spaces[3]};\n border: 1px solid transparent;\n border-radius: ${({ theme }) => theme.borderRadius};\n background: transparent;\n color: ${({ theme }) => theme.colors.neutral600};\n cursor: pointer;\n font-size: ${({ theme }) => theme.fontSizes[1]};\n font-weight: ${({ theme }) => theme.fontWeights.semiBold};\n white-space: nowrap;\n\n &:hover {\n color: ${({ theme }) => theme.colors.neutral700};\n }\n\n &[data-state='on'] {\n background: ${({ theme }) => theme.colors.neutral0};\n border-color: ${({ theme }) => theme.colors.neutral200};\n color: ${({ theme }) => theme.colors.primary600};\n }\n\n svg {\n width: 1.6rem;\n height: 1.6rem;\n }\n`;\n\nconst HeaderWrapper = styled(Box)`\n [data-strapi-header] {\n background: ${({ theme }) => theme.colors.neutral0};\n\n h1 {\n font-size: 1.8rem;\n }\n }\n`;\n\nexport const AssetsPage = () => {\n const { formatMessage } = useIntl();\n const { openDetails } = useAssetDetailsParam();\n\n const { currentFolderId, navigateToFolderId, navigateToRoot } = useFolderNavigation();\n // Deleted or missing folders (404) need a fetch — handled here, not in\n // `useFolderNavigation` (which only strips malformed ?folder= values).\n const { error: currentFolderError } = useGetFolderQuery(\n { id: currentFolderId! },\n { skip: currentFolderId === null }\n );\n\n useEffect(() => {\n if (currentFolderError?.name === 'NotFoundError') {\n navigateToRoot();\n }\n }, [currentFolderError, navigateToRoot]);\n const { title, itemCount } = useFolderInfo(currentFolderId);\n const itemCountLabel = formatMessage(\n {\n id: getTranslationKey('header.content.item-count'),\n defaultMessage: '{count, plural, =1 {# item} other {# items}}',\n },\n { count: itemCount }\n );\n const pageHeaderTitle = title\n ? `${title} (${itemCountLabel})`\n : formatMessage({ id: 'app.loading', defaultMessage: 'Loading...' });\n\n const [isCreateFolderDialogOpen, setIsCreateFolderDialogOpen] = useState(false);\n\n // View state\n const [view, setView] = usePersistentState(localStorageKeys.view, viewOptions.GRID);\n const isGridView = view === viewOptions.GRID;\n\n // Dialog state\n const [isUrlDialogOpen, setIsUrlDialogOpen] = useState(false);\n\n // Refs\n const fileInputRef = useRef<HTMLInputElement>(null);\n const uploadDropZoneRef = useRef<HTMLDivElement>(null);\n\n // Upload handlers\n const [uploadFiles] = useUploadFilesMutation();\n const [uploadFromUrls] = useUploadFromUrlsMutation();\n\n const uploadFilesToFolder = async (files: globalThis.File[], folderId: number | null) => {\n if (files.length === 0) return;\n\n const formData = new FormData();\n const fileInfoArray: UploadFileInfo[] = [];\n\n files.forEach((file) => {\n formData.append('files', file);\n fileInfoArray.push({\n name: file.name,\n caption: null,\n alternativeText: null,\n folder: folderId,\n });\n });\n\n formData.append('fileInfo', JSON.stringify(fileInfoArray));\n try {\n await uploadFiles({ formData, totalFiles: files.length }).unwrap();\n } catch (error) {\n // Error is already dispatched to store from the API queryFn\n }\n };\n\n const handleFileSelect = () => {\n fileInputRef.current?.click();\n };\n\n const handleFileChange = async (e: ChangeEvent<HTMLInputElement>) => {\n const files = e.target.files;\n if (files && files.length > 0) {\n await uploadFilesToFolder(Array.from(files), currentFolderId);\n }\n e.target.value = '';\n };\n\n const handleDrop = async (files: globalThis.File[]) => {\n await uploadFilesToFolder(files, currentFolderId);\n };\n\n const handleUrlUpload = async (urls: string[]) => {\n try {\n await uploadFromUrls({ urls, folderId: currentFolderId }).unwrap();\n } catch (error) {\n // Error is already dispatched to store from the API queryFn\n }\n };\n\n const listSort = useListSort();\n\n // The view is deliberately absent: table and grid render the same list, so\n // toggling views keeps the selection.\n const listQueryKey = getListQueryKey({\n folderId: currentFolderId,\n search: '', // TODO: wire when building header search\n // Folder position changes the render order too — selection must reset.\n sort: `${listSort.assetsSort};folders=${listSort.foldersPosition}`,\n filter: null, // TODO: wire when building header filters\n });\n\n return (\n <>\n <UploadDropZoneProvider onDrop={handleDrop}>\n <AssetSelectionProvider>\n <AssetsDndProvider>\n <ClearSelectionOnChange listQueryKey={listQueryKey} />\n <Box ref={uploadDropZoneRef}>\n <Layouts.Root\n minHeight=\"100vh\"\n background=\"neutral0\"\n sideNav={\n <FolderTree\n currentFolderId={currentFolderId}\n onSelectFolder={navigateToFolderId}\n />\n }\n >\n <VisuallyHidden>\n <input type=\"file\" ref={fileInputRef} onChange={handleFileChange} multiple />\n </VisuallyHidden>\n\n <HeaderWrapper>\n <Layouts.Header\n title={pageHeaderTitle}\n primaryAction={\n <SimpleMenu\n popoverPlacement=\"bottom-end\"\n variant=\"default\"\n endIcon={<ChevronDown />}\n label={formatMessage({\n id: getTranslationKey('new'),\n defaultMessage: 'New',\n })}\n >\n <MenuItem\n onSelect={() => setIsCreateFolderDialogOpen(true)}\n startIcon={<Folder />}\n >\n {formatMessage({\n id: getTranslationKey('folder.create.title'),\n defaultMessage: 'New folder',\n })}\n </MenuItem>\n <MenuItem onSelect={handleFileSelect} startIcon={<Files />}>\n {formatMessage({\n id: getTranslationKey('import-files'),\n defaultMessage: 'Import files',\n })}\n </MenuItem>\n <MenuItem onSelect={() => setIsUrlDialogOpen(true)} startIcon={<Link />}>\n {formatMessage({\n id: getTranslationKey('import-from-url'),\n defaultMessage: 'Import from URL',\n })}\n </MenuItem>\n </SimpleMenu>\n }\n subtitle={\n <Flex justifyContent=\"space-between\" alignItems=\"center\" gap={4} width=\"100%\">\n <Flex gap={4} alignItems=\"center\">\n TODO: Filters and search\n </Flex>\n\n <Flex gap={4} alignItems=\"stretch\">\n <SortMenu sort={listSort} showFoldersGroup={!isGridView} />\n <StyledToggleGroup\n type=\"single\"\n value={isGridView ? 'grid' : 'table'}\n onValueChange={(value) =>\n value &&\n setView(value === 'grid' ? viewOptions.GRID : viewOptions.TABLE)\n }\n aria-label={formatMessage({\n id: getTranslationKey('view.switch.label'),\n defaultMessage: 'View options',\n })}\n >\n <StyledToggleItem\n value=\"table\"\n aria-label={formatMessage({\n id: getTranslationKey('view.table'),\n defaultMessage: 'Table view',\n })}\n >\n <List />\n {formatMessage({\n id: getTranslationKey('view.table'),\n defaultMessage: 'Table view',\n })}\n </StyledToggleItem>\n <StyledToggleItem\n value=\"grid\"\n aria-label={formatMessage({\n id: getTranslationKey('view.grid'),\n defaultMessage: 'Grid view',\n })}\n >\n <GridIcon />\n {formatMessage({\n id: getTranslationKey('view.grid'),\n defaultMessage: 'Grid view',\n })}\n </StyledToggleItem>\n </StyledToggleGroup>\n </Flex>\n </Flex>\n }\n />\n </HeaderWrapper>\n\n <Layouts.Content>\n <DropZoneWithOverlay>\n <DropFilesMessage uploadDropZoneRef={uploadDropZoneRef} folderName={title} />\n <AssetsView\n view={view}\n folderId={currentFolderId}\n assetsSort={listSort.assetsSort}\n foldersSort={listSort.foldersSort}\n foldersPosition={listSort.foldersPosition}\n onAssetItemClick={openDetails}\n onAddAssets={handleFileSelect}\n />\n </DropZoneWithOverlay>\n </Layouts.Content>\n </Layouts.Root>\n </Box>\n <BulkActionsBar />\n </AssetsDndProvider>\n </AssetSelectionProvider>\n </UploadDropZoneProvider>\n <CreateFolderDialog\n open={isCreateFolderDialogOpen}\n folderName={title}\n parentFolderId={currentFolderId}\n onClose={() => setIsCreateFolderDialogOpen(false)}\n />\n <ImportFromUrlDialog\n open={isUrlDialogOpen}\n onClose={() => setIsUrlDialogOpen(false)}\n onUpload={handleUrlUpload}\n />\n <AssetDetailsDrawer />\n </>\n );\n};\n"],"names":["INTERSECTION_OPTIONS","threshold","AssetsView","view","folderId","assetsSort","foldersSort","foldersPosition","onAssetItemClick","onAddAssets","formatMessage","useIntl","assets","isLoading","isLoadingAssets","isFetchingMore","hasNextPage","fetchNextPage","error","useInfiniteAssets","folder","sort","data","folders","isLoadingFolders","useGetFoldersQuery","parentId","isGridView","viewOptions","GRID","mixedItems","useMemo","mergeMixedList","loadMoreRef","useElementOnScreen","useCallback","isVisible","_jsx","Flex","justifyContent","padding","Loader","id","defaultMessage","Box","Typography","textColor","getTranslationKey","length","EmptyState","_jsxs","_Fragment","AssetsGrid","AssetsTable","div","ref","style","height","ClearSelectionOnChange","listQueryKey","clear","useAssetSelection","useEffect","StyledToggleGroup","styled","ToggleGroup","Root","theme","spaces","colors","neutral100","neutral200","borderRadius","StyledToggleItem","Item","neutral600","fontSizes","fontWeights","semiBold","neutral700","neutral0","primary600","HeaderWrapper","AssetsPage","openDetails","useAssetDetailsParam","currentFolderId","navigateToFolderId","navigateToRoot","useFolderNavigation","currentFolderError","useGetFolderQuery","skip","name","title","itemCount","useFolderInfo","itemCountLabel","count","pageHeaderTitle","isCreateFolderDialogOpen","setIsCreateFolderDialogOpen","useState","setView","usePersistentState","localStorageKeys","isUrlDialogOpen","setIsUrlDialogOpen","fileInputRef","useRef","uploadDropZoneRef","uploadFiles","useUploadFilesMutation","uploadFromUrls","useUploadFromUrlsMutation","uploadFilesToFolder","files","formData","FormData","fileInfoArray","forEach","file","append","push","caption","alternativeText","JSON","stringify","totalFiles","unwrap","handleFileSelect","current","click","handleFileChange","e","target","Array","from","value","handleDrop","handleUrlUpload","urls","listSort","useListSort","getListQueryKey","search","filter","UploadDropZoneProvider","onDrop","AssetSelectionProvider","AssetsDndProvider","Layouts","minHeight","background","sideNav","FolderTree","onSelectFolder","VisuallyHidden","input","type","onChange","multiple","Header","primaryAction","SimpleMenu","popoverPlacement","variant","endIcon","ChevronDown","label","MenuItem","onSelect","startIcon","Folder","Files","Link","subtitle","alignItems","gap","width","SortMenu","showFoldersGroup","onValueChange","TABLE","aria-label","List","GridIcon","Content","DropZoneWithOverlay","DropFilesMessage","folderName","BulkActionsBar","CreateFolderDialog","open","parentFolderId","onClose","ImportFromUrlDialog","onUpload","AssetDetailsDrawer"],"mappings":"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"}
1
+ {"version":3,"file":"AssetsPage.js","sources":["../../../../../admin/src/future/pages/Assets/AssetsPage.tsx"],"sourcesContent":["import { useRef, useCallback, useMemo, useState, useEffect, type ChangeEvent } from 'react';\n\nimport * as ToggleGroup from '@radix-ui/react-toggle-group';\nimport { Layouts, Page, useElementOnScreen, usePersistentState } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Flex,\n Loader,\n MenuItem,\n SimpleMenu,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport {\n ChevronDown,\n Files,\n Folder as FolderIcon,\n GridFour as GridIcon,\n Link,\n List,\n} from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled, css } from 'styled-components';\n\nimport { BetaNotice } from '../../components/BetaNotice';\nimport { useAIMetadataEnabled } from '../../hooks/useAIMetadataEnabled';\nimport { useMediaLibraryPermissions } from '../../hooks/useMediaLibraryPermissions';\nimport { useUploadFromUrlsMutation, useUploadFilesMutation } from '../../services/api';\nimport { useGetFolderQuery, useGetFoldersQuery } from '../../services/folders';\nimport { useGetUploadSettingsQuery } from '../../services/settings';\nimport { buildItemLocations, type ItemLocations } from '../../utils/itemLocations';\nimport { getTranslationKey } from '../../utils/translations';\n\nimport {\n AssetDetailsDrawer,\n useAssetDetailsParam,\n} from './components/AssetDetails/AssetDetailsDrawer';\nimport { AssetsGrid } from './components/AssetsGrid';\nimport { AssetsSearchInput } from './components/AssetsSearchInput';\nimport { AssetsTable } from './components/AssetsTable';\nimport { BulkActionsBar } from './components/BulkActionsBar';\nimport { AssetsDndProvider } from './components/Dnd/AssetsDndProvider';\nimport { DropFilesMessage, DropZoneWithOverlay } from './components/DropZone/UploadDropZone';\nimport { UploadDropZoneProvider } from './components/DropZone/UploadDropZoneContext';\nimport { EmptyState, FilteredEmptyState } from './components/EmptyState';\nimport { FilterBadges } from './components/FilterBadges';\nimport { FilterMenu } from './components/FilterMenu';\nimport { FolderFormDialog } from './components/FolderFormDialog';\nimport { FolderTree } from './components/FolderTree/FolderTree';\nimport { ImportFromUrlDialog } from './components/ImportFromUrlDialog';\nimport { SortMenu } from './components/SortMenu';\nimport { localStorageKeys, viewOptions } from './constants';\nimport { useAssetSearch } from './hooks/useAssetSearch';\nimport { AssetSelectionProvider, useAssetSelection } from './hooks/useAssetSelection';\nimport { BusyAssetsProvider } from './hooks/useBusyAssets';\nimport { useFolderInfo } from './hooks/useFolderInfo';\nimport { useFolderNavigation } from './hooks/useFolderNavigation';\nimport { useInfiniteAssets } from './hooks/useInfiniteAssets';\nimport { useInfiniteScrollSentinel } from './hooks/useInfiniteScrollSentinel';\nimport { useListFilters } from './hooks/useListFilters';\nimport { useListSort, type FoldersPosition } from './hooks/useListSort';\nimport { buildAssetFilters } from './utils/buildAssetFilters';\nimport { getListQueryKey } from './utils/listQueryKey';\nimport { mergeMixedList } from './utils/mergeMixedList';\n\nimport type { File, UploadFileInfo } from '../../../../../shared/contracts/files';\nimport type { Folder } from '../../../../../shared/contracts/folders';\n\n// The negative bottom margin shrinks the trigger area by a pixel so the 1px\n// sentinel sitting exactly at the fold (when a page's rows happen to fill the\n// viewport) reads as \"not visible\" and doesn't pull an extra page. It still\n// triggers as soon as the sentinel scrolls a hair into view. Tune the bottom\n// value if the list over- or under-fetches near the fold.\nconst INTERSECTION_OPTIONS: IntersectionObserverInit = {\n threshold: 0,\n rootMargin: '0px 0px -1px 0px',\n};\n\n// Module-level so the header sentinel's observer isn't rebuilt every render.\nconst HEADER_SENTINEL_OPTIONS: IntersectionObserverInit = { threshold: 0 };\n\nconst ITEM_COUNT_MESSAGE = {\n id: getTranslationKey('header.content.item-count'),\n defaultMessage: '{count, plural, =1 {# item} other {# items}}',\n};\n\nconst SEARCH_RESULTS_COUNT_MESSAGES = {\n both: {\n id: getTranslationKey('header.search-results.count'),\n defaultMessage:\n '{numberFolders, plural, one {1 folder} other {# folders}} - {numberAssets, plural, one {1 asset} other {# assets}}',\n },\n folders: {\n id: getTranslationKey('header.search-results.count.folders'),\n defaultMessage: '{numberFolders, plural, one {1 folder} other {# folders}}',\n },\n assets: {\n id: getTranslationKey('header.search-results.count.assets'),\n defaultMessage: '{numberAssets, plural, =0 {0 assets} one {1 asset} other {# assets}}',\n },\n};\n\nconst getSearchResultsCountMessage = (numberFolders: number, numberAssets: number) => {\n if (numberFolders === 0) {\n return SEARCH_RESULTS_COUNT_MESSAGES.assets;\n }\n\n if (numberAssets === 0) {\n return SEARCH_RESULTS_COUNT_MESSAGES.folders;\n }\n\n return SEARCH_RESULTS_COUNT_MESSAGES.both;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AssetsView\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AssetsViewProps {\n view: number;\n folders: Folder[];\n isLoadingFolders: boolean;\n assets: File[];\n isLoadingAssets: boolean;\n isFetchingMore: boolean;\n hasNextPage: boolean;\n fetchNextPage: () => void;\n error: unknown;\n locations: ItemLocations;\n searchQuery: string;\n assetsSort: string;\n foldersPosition: FoldersPosition;\n hasActiveFilters: boolean;\n onClearFilters: () => void;\n onAssetItemClick: (assetId: number) => void;\n onAddAssets: () => void;\n canAddAssets: boolean;\n onClearSearch: () => void;\n}\n\nconst AssetsView = ({\n view,\n folders,\n isLoadingFolders,\n assets,\n isLoadingAssets,\n isFetchingMore,\n hasNextPage,\n fetchNextPage,\n error,\n locations,\n searchQuery,\n assetsSort,\n foldersPosition,\n hasActiveFilters,\n onClearFilters,\n onAssetItemClick,\n onAddAssets,\n canAddAssets,\n onClearSearch,\n}: AssetsViewProps) => {\n const { formatMessage } = useIntl();\n\n const isGridView = view === viewOptions.GRID;\n const isLoading = isLoadingAssets || isLoadingFolders;\n\n // \"Folders: Mixed with files\" — interleave the complete folder list into the\n // loaded asset stream client-side, following the active sort. Table view\n // only: the grid always keeps folders in their own band on top.\n const mixedItems = useMemo(\n () =>\n foldersPosition === 'mixed' && !isGridView\n ? mergeMixedList({ folders, assets, sort: assetsSort, hasNextPage })\n : null,\n [foldersPosition, isGridView, folders, assets, assetsSort, hasNextPage]\n );\n\n const loadMoreRef = useInfiniteScrollSentinel({\n hasNextPage,\n isFetchingMore,\n onLoadMore: fetchNextPage,\n options: INTERSECTION_OPTIONS,\n });\n\n if (isLoading) {\n return (\n <Flex justifyContent=\"center\" padding={8}>\n <Loader>{formatMessage({ id: 'app.loading', defaultMessage: 'Loading...' })}</Loader>\n </Flex>\n );\n }\n\n if (error) {\n return (\n <Box padding={8}>\n <Typography textColor=\"danger600\">\n {formatMessage({\n id: getTranslationKey('list.assets.error'),\n defaultMessage: 'An error occurred while fetching assets.',\n })}\n </Typography>\n </Box>\n );\n }\n\n if (folders.length === 0 && assets.length === 0) {\n // While searching, the search empty state wins (it names the query); a\n // filter-only dead end gets the filtered variant with its Clear action.\n return hasActiveFilters && !searchQuery ? (\n <FilteredEmptyState onClearFilters={onClearFilters} />\n ) : (\n <EmptyState\n onAddAssets={onAddAssets}\n canAddAssets={canAddAssets}\n searchQuery={searchQuery}\n onClearSearch={onClearSearch}\n />\n );\n }\n return (\n <>\n {isGridView ? (\n <AssetsGrid folders={folders} assets={assets} onAssetItemClick={onAssetItemClick} />\n ) : (\n <AssetsTable\n assets={assets}\n folders={folders}\n mixedItems={mixedItems}\n onAssetItemClick={onAssetItemClick}\n />\n )}\n <div ref={loadMoreRef} style={{ height: 1 }} />\n {isFetchingMore && (\n <Flex justifyContent=\"center\" padding={4}>\n <Loader>\n {formatMessage({\n id: getTranslationKey('list.assets.loading-more'),\n defaultMessage: 'Loading more assets...',\n })}\n </Loader>\n </Flex>\n )}\n {/* Lives here rather than in `AssetsPage` so it can read the loaded\n assets: the AI metadata action needs their mime types to know what\n the provider can handle. `position: fixed` keeps it visually anchored\n regardless of where it sits in the tree. */}\n <BulkActionsBar assets={assets} locations={locations} />\n </>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ClearSelectionOnChange\n *\n * Selection is list-scoped: it resets when the user is looking at a different list.\n * The list fingerprint is getListQueryKey() — folder, search, sort, filter.\n *\n * Hybrid rule: infinite scroll does not change the key (selection persists), and\n * neither does the table/grid toggle — both views render the same list.\n * Search/sort/filter changes do (selection clears) — same mental model as folder nav.\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ClearSelectionOnChangeProps {\n listQueryKey: string;\n}\n\nconst ClearSelectionOnChange = ({ listQueryKey }: ClearSelectionOnChangeProps) => {\n const { clear } = useAssetSelection();\n\n useEffect(() => {\n clear();\n }, [listQueryKey, clear]);\n\n return null;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AssetsPage\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * Mirrors the design-system Toggle look (grey track, white active segment\n * card) — reproduced locally because the DS component is a labels-only\n * boolean input (no icons) and paints its left segment in danger red. Here\n * both segments use the primary blue when active.\n */\nconst StyledToggleGroup = styled(ToggleGroup.Root)`\n display: flex;\n padding: ${({ theme }) => theme.spaces[1]};\n background: ${({ theme }) => theme.colors.neutral100};\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-radius: ${({ theme }) => theme.borderRadius};\n`;\n\nconst StyledToggleItem = styled(ToggleGroup.Item)`\n display: flex;\n flex: 1 1 50%;\n align-items: center;\n justify-content: center;\n gap: ${({ theme }) => theme.spaces[2]};\n padding: 0.6rem ${({ theme }) => theme.spaces[3]};\n border: 1px solid transparent;\n border-radius: ${({ theme }) => theme.borderRadius};\n background: transparent;\n color: ${({ theme }) => theme.colors.neutral600};\n cursor: pointer;\n font-size: ${({ theme }) => theme.fontSizes[1]};\n font-weight: ${({ theme }) => theme.fontWeights.semiBold};\n white-space: nowrap;\n\n &:hover {\n color: ${({ theme }) => theme.colors.neutral700};\n }\n\n &[data-state='on'] {\n background: ${({ theme }) => theme.colors.neutral0};\n border-color: ${({ theme }) => theme.colors.neutral200};\n color: ${({ theme }) => theme.colors.primary600};\n }\n\n svg {\n width: 1.6rem;\n height: 1.6rem;\n }\n`;\n\n// A single sticky header — same layout scrolled or not, so the toolbar\n// alignment can't reflow the way the shared sticky header did. Once the list\n// scrolls under it, it shrinks (reduced vertical padding + a shadow to lift it\n// off the rows), like the sticky headers elsewhere in the admin. Horizontal\n// padding stays responsive (passed as props); only the vertical rhythm + shadow\n// change here so they can animate.\nconst StickyHeader = styled(Box)<{ $compact: boolean }>`\n position: sticky;\n top: 0;\n z-index: 2;\n /* Transparent at rest (the grey page shows through); an opaque background +\n shadow appear only once it sticks and content scrolls under it. */\n background: transparent;\n /* Horizontal padding matches the list's default spacing (Layouts.Content /\n RESPONSIVE_DEFAULT_SPACING: 4 / 6 / 10) so the header lines up with the rows. */\n padding: ${({ theme }) => `${theme.spaces[6]} ${theme.spaces[4]}`};\n transition:\n padding 0.2s ease,\n background 0.2s ease,\n box-shadow 0.2s ease;\n\n ${({ theme }) => theme.breakpoints.medium} {\n padding-left: ${({ theme }) => theme.spaces[6]};\n padding-right: ${({ theme }) => theme.spaces[6]};\n }\n ${({ theme }) => theme.breakpoints.large} {\n padding-left: ${({ theme }) => theme.spaces[10]};\n padding-right: ${({ theme }) => theme.spaces[10]};\n }\n\n /* Compacting is scoped to medium and up, where the header actually sticks. On\n mobile it scrolls away with the list, so shrinking it mid-scroll animated a\n header the user could no longer see — the transition read as a glitch on the\n way back up rather than as the header settling. */\n ${({ $compact, theme }) =>\n $compact &&\n css`\n ${theme.breakpoints.medium} {\n padding-top: ${theme.spaces[3]};\n padding-bottom: ${theme.spaces[3]};\n padding-left: ${theme.spaces[4]};\n padding-right: ${theme.spaces[4]};\n background: ${theme.colors.neutral0};\n box-shadow: ${theme.shadows.tableShadow};\n }\n ${theme.breakpoints.large} {\n padding-left: ${theme.spaces[6]};\n padding-right: ${theme.spaces[6]};\n }\n `}\n`;\n\n// New button aligns with the title, not the toolbar.\nconst TitleRow = styled(Flex)`\n justify-content: space-between;\n align-items: flex-start;\n gap: ${({ theme }) => theme.spaces[4]};\n\n h1 {\n font-size: 1.8rem;\n }\n`;\n\n// Two groups in source order (Filter, Search / Sort, Toggle). Mobile: stacked —\n// Filter+Search on row 1, Sort+Toggle on row 2. Desktop (large+): one row,\n// Filter+Search on the left, Sort+Toggle pushed right.\nconst Toolbar = styled(Flex)<{ $compact: boolean }>`\n margin-top: ${({ theme }) => theme.spaces[5]};\n flex-direction: column;\n align-items: stretch;\n gap: ${({ theme }) => theme.spaces[3]};\n transition: margin-top 0.2s ease;\n\n /* Tightening the gap to the title belongs to the compact header, so it is\n scoped to the breakpoints that compact. On mobile the header never sticks,\n and this was the last thing still shifting as the page scrolled. */\n ${({ $compact, theme }) =>\n $compact &&\n css`\n ${theme.breakpoints.medium} {\n margin-top: ${theme.spaces[2]};\n }\n `}\n\n ${({ theme }) => theme.breakpoints.large} {\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n }\n`;\n\nconst ToolbarGroup = styled(Flex)`\n align-items: center;\n gap: ${({ theme }) => theme.spaces[3]};\n`;\n\n// Filter + Search. On mobile the group fills the row (search grows into it);\n// on desktop it keeps its intrinsic size and sits at the left edge.\nconst FilterSearchGroup = styled(ToolbarGroup)``;\n\n// Sort + Toggle. Mobile: spread across the row (Sort left, Toggle right).\n// Desktop: sit together at the right edge (space-between on the toolbar leaves\n// the empty space between the search and here).\nconst SortToggleGroup = styled(ToolbarGroup)`\n justify-content: space-between;\n\n ${({ theme }) => theme.breakpoints.large} {\n justify-content: flex-end;\n flex: 0 0 auto;\n }\n`;\n\n// Fills the row on mobile; intrinsic width on desktop.\nconst SearchSlot = styled(Box)`\n flex: 1;\n\n ${({ theme }) => theme.breakpoints.large} {\n flex: 0 1 auto;\n }\n`;\n\n// Toggle labels are hidden below desktop — icons only (buttons keep aria-label).\nconst ToggleLabel = styled.span`\n display: none;\n\n ${({ theme }) => theme.breakpoints.large} {\n display: inline;\n }\n`;\n\nexport const AssetsPage = () => {\n const { formatMessage } = useIntl();\n const { openDetails } = useAssetDetailsParam();\n const { canCreate, canUpdate } = useMediaLibraryPermissions();\n\n const { currentFolderId, navigateToFolderId, navigateToRoot } = useFolderNavigation();\n // Deleted or missing folders (404) need a fetch — handled here, not in\n // `useFolderNavigation` (which only strips malformed ?folder= values).\n const { error: currentFolderError } = useGetFolderQuery(\n { id: currentFolderId! },\n { skip: currentFolderId === null }\n );\n\n useEffect(() => {\n if (currentFolderError?.name === 'NotFoundError') {\n navigateToRoot();\n }\n }, [currentFolderError, navigateToRoot]);\n const { title, itemCount } = useFolderInfo(currentFolderId);\n\n const { searchQuery, isSearching, clearSearch } = useAssetSearch();\n const listSort = useListSort();\n const listFilters = useListFilters();\n\n // Resolve relative presets against \"now\" only when the filters change —\n // keeps the query args (and RTK cache keys) stable between renders.\n const builtFilters = useMemo(\n () => buildAssetFilters(listFilters.filters, new Date()),\n // eslint-disable-next-line react-hooks/exhaustive-deps -- serialized is the value identity of filters\n [listFilters.serialized]\n );\n\n const {\n assets,\n subscribers: assetPageSubscribers,\n pagination,\n isLoading: isLoadingAssets,\n isFetchingMore,\n hasNextPage,\n fetchNextPage,\n error: assetsError,\n } = useInfiniteAssets({\n // The real folder is passed even while searching: the service drops the folder\n // filter when `search` is set, so results are still global. List filters\n // compose with both modes.\n folder: currentFolderId,\n search: searchQuery || undefined,\n sort: listSort.assetsSort,\n filters: builtFilters.fileClauses,\n enabled: builtFilters.showFiles,\n });\n\n const { data: fetchedFolders = [], isLoading: isLoadingFolders } = useGetFoldersQuery(\n {\n parentId: currentFolderId,\n search: searchQuery || undefined,\n sort: listSort.foldersSort,\n filters: builtFilters.folderClauses,\n },\n { skip: !builtFilters.showFolders }\n );\n // A type badge can exclude folders structurally (e.g. \"Type is Picture\").\n const folders = useMemo(\n () => (builtFilters.showFolders ? fetchedFolders : []),\n [builtFilters.showFolders, fetchedFolders]\n );\n\n // Both move affordances (drag and the bulk bar) resolve each item's parent\n // from the rows on screen — while searching, results are global and the\n // folder currently open says nothing about where an item lives.\n const itemLocations = useMemo(() => buildItemLocations(assets, folders), [assets, folders]);\n\n const itemCountLabel = formatMessage(ITEM_COUNT_MESSAGE, { count: itemCount });\n\n const searchResultsTitle = formatMessage(\n {\n id: getTranslationKey('header.search-results'),\n defaultMessage: 'Search results for \"{query}\"',\n },\n { query: searchQuery }\n );\n const numberFolders = folders.length;\n const numberAssets = pagination?.total ?? 0;\n\n const searchResultsCountLabel = formatMessage(\n getSearchResultsCountMessage(numberFolders, numberAssets),\n { numberFolders, numberAssets }\n );\n\n let pageHeaderTitle: string;\n if (isSearching) {\n pageHeaderTitle = `${searchResultsTitle} (${searchResultsCountLabel})`;\n } else if (title) {\n pageHeaderTitle = `${title} (${itemCountLabel})`;\n } else {\n pageHeaderTitle = formatMessage({ id: 'app.loading', defaultMessage: 'Loading...' });\n }\n\n const [isCreateFolderDialogOpen, setIsCreateFolderDialogOpen] = useState(false);\n\n // View state\n const [view, setView] = usePersistentState(localStorageKeys.view, viewOptions.GRID);\n const isGridView = view === viewOptions.GRID;\n\n // Dialog state\n const [isUrlDialogOpen, setIsUrlDialogOpen] = useState(false);\n\n // Refs\n const fileInputRef = useRef<HTMLInputElement>(null);\n const uploadDropZoneRef = useRef<HTMLDivElement>(null);\n\n // Shrink the sticky header once the list scrolls beneath it. A zero-height\n // sentinel sits at the very top of the scroll content; when it leaves the\n // viewport we're scrolled → compact.\n const [isHeaderCompact, setIsHeaderCompact] = useState(false);\n const onHeaderSentinelVisibility = useCallback(\n (isVisible: boolean) => setIsHeaderCompact(!isVisible),\n []\n );\n const headerSentinelRef = useElementOnScreen<HTMLDivElement>(\n onHeaderSentinelVisibility,\n HEADER_SENTINEL_OPTIONS\n );\n\n // Upload handlers\n const [uploadFiles] = useUploadFilesMutation();\n const [uploadFromUrls] = useUploadFromUrlsMutation();\n // `concurrentUploadRequests` echoes the app config. Missing settings (still\n // loading, no permission) fall back to sequential — never faster than the\n // server asked for.\n const { data: settings } = useGetUploadSettingsQuery();\n const concurrency = settings?.data?.concurrentUploadRequests ?? 1;\n // Drives the post-upload AI metadata phase shown per row in the progress\n // dialog. No mime argument: the files are not known until they are picked,\n // and the server filters the batch on the same allowlist anyway.\n const isAiMetadataEnabled = useAIMetadataEnabled();\n\n const uploadFilesToFolder = async (files: globalThis.File[], folderId: number | null) => {\n if (files.length === 0) return;\n\n const formData = new FormData();\n const fileInfoArray: UploadFileInfo[] = [];\n\n files.forEach((file) => {\n formData.append('files', file);\n fileInfoArray.push({\n name: file.name,\n caption: null,\n alternativeText: null,\n folder: folderId,\n });\n });\n\n formData.append('fileInfo', JSON.stringify(fileInfoArray));\n try {\n await uploadFiles({\n formData,\n totalFiles: files.length,\n concurrency,\n generateAiMetadata: Boolean(isAiMetadataEnabled),\n }).unwrap();\n } catch {\n // Error is already dispatched to store from the API queryFn\n }\n };\n\n const handleFileSelect = () => {\n fileInputRef.current?.click();\n };\n\n const handleFileChange = async (e: ChangeEvent<HTMLInputElement>) => {\n const files = e.target.files;\n if (files && files.length > 0) {\n await uploadFilesToFolder(Array.from(files), currentFolderId);\n }\n e.target.value = '';\n };\n\n const handleDrop = async (files: globalThis.File[]) => {\n // Defence in depth: the provider is `disabled` without `assets.create`\n // (so onDrop won't fire), but guard here too in case it's ever wired live.\n if (!canCreate) return;\n await uploadFilesToFolder(files, currentFolderId);\n };\n\n const handleUrlUpload = async (urls: string[]) => {\n try {\n await uploadFromUrls({\n urls,\n folderId: currentFolderId,\n generateAiMetadata: Boolean(isAiMetadataEnabled),\n }).unwrap();\n } catch {\n // Error is already dispatched to store from the API queryFn\n }\n };\n\n // The view is deliberately absent: table and grid render the same list, so\n // toggling views keeps the selection.\n const listQueryKey = getListQueryKey({\n folderId: currentFolderId,\n search: searchQuery,\n // Folder position changes the render order too — selection must reset.\n sort: `${listSort.assetsSort};folders=${listSort.foldersPosition}`,\n filter: listFilters.serialized || null,\n });\n\n return (\n <>\n <UploadDropZoneProvider onDrop={handleDrop} disabled={!canCreate}>\n <AssetSelectionProvider disabled={!canUpdate}>\n <BusyAssetsProvider>\n <AssetsDndProvider locations={itemLocations}>\n <ClearSelectionOnChange listQueryKey={listQueryKey} />\n <Layouts.Root\n sideNav={\n <FolderTree\n currentFolderId={currentFolderId}\n showActiveFolder={!isSearching}\n onSelectFolder={navigateToFolderId}\n />\n }\n >\n <Page.Main>\n <Box ref={uploadDropZoneRef}>\n <VisuallyHidden>\n <input type=\"file\" ref={fileInputRef} onChange={handleFileChange} multiple />\n </VisuallyHidden>\n\n {/* Zero-height marker: leaves the viewport as soon as the list\n scrolls, flipping the header into its compact state. */}\n <Box ref={headerSentinelRef} height={0} aria-hidden />\n\n <StickyHeader $compact={isHeaderCompact}>\n <TitleRow>\n <Typography variant=\"alpha\" tag=\"h1\">\n {pageHeaderTitle}\n </Typography>\n {canCreate && (\n <SimpleMenu\n popoverPlacement=\"bottom-end\"\n variant=\"default\"\n endIcon={<ChevronDown />}\n label={formatMessage({\n id: getTranslationKey('new'),\n defaultMessage: 'New',\n })}\n >\n <MenuItem\n onSelect={() => setIsCreateFolderDialogOpen(true)}\n startIcon={<FolderIcon />}\n >\n {formatMessage({\n id: getTranslationKey('folder.create.title'),\n defaultMessage: 'New folder',\n })}\n </MenuItem>\n <MenuItem onSelect={handleFileSelect} startIcon={<Files />}>\n {formatMessage({\n id: getTranslationKey('import-files'),\n defaultMessage: 'Import files',\n })}\n </MenuItem>\n <MenuItem\n onSelect={() => setIsUrlDialogOpen(true)}\n startIcon={<Link />}\n >\n {formatMessage({\n id: getTranslationKey('import-from-url'),\n defaultMessage: 'Import from URL',\n })}\n </MenuItem>\n </SimpleMenu>\n )}\n </TitleRow>\n\n <Toolbar $compact={isHeaderCompact}>\n <FilterSearchGroup>\n <Box>\n <FilterMenu listFilters={listFilters} />\n </Box>\n <SearchSlot>\n <AssetsSearchInput />\n </SearchSlot>\n </FilterSearchGroup>\n <SortToggleGroup>\n <Box>\n <SortMenu sort={listSort} showFoldersGroup={!isGridView} />\n </Box>\n <StyledToggleGroup\n type=\"single\"\n value={isGridView ? 'grid' : 'table'}\n onValueChange={(value) =>\n value &&\n setView(value === 'grid' ? viewOptions.GRID : viewOptions.TABLE)\n }\n aria-label={formatMessage({\n id: getTranslationKey('view.switch.label'),\n defaultMessage: 'View options',\n })}\n >\n <StyledToggleItem\n value=\"table\"\n aria-label={formatMessage({\n id: getTranslationKey('view.table'),\n defaultMessage: 'Table view',\n })}\n >\n <List />\n <ToggleLabel>\n {formatMessage({\n id: getTranslationKey('view.table'),\n defaultMessage: 'Table view',\n })}\n </ToggleLabel>\n </StyledToggleItem>\n <StyledToggleItem\n value=\"grid\"\n aria-label={formatMessage({\n id: getTranslationKey('view.grid'),\n defaultMessage: 'Grid view',\n })}\n >\n <GridIcon />\n <ToggleLabel>\n {formatMessage({\n id: getTranslationKey('view.grid'),\n defaultMessage: 'Grid view',\n })}\n </ToggleLabel>\n </StyledToggleItem>\n </StyledToggleGroup>\n </SortToggleGroup>\n </Toolbar>\n\n <FilterBadges listFilters={listFilters} compact={isHeaderCompact} />\n </StickyHeader>\n\n <Layouts.Content>\n <BetaNotice />\n {/* Renders nothing — keeps every loaded page's query subscribed\n so a rename/delete refreshes the whole list. */}\n {assetPageSubscribers}\n <DropZoneWithOverlay>\n <DropFilesMessage\n uploadDropZoneRef={uploadDropZoneRef}\n folderName={title}\n />\n <AssetsView\n view={view}\n folders={folders}\n isLoadingFolders={isLoadingFolders}\n assets={assets}\n isLoadingAssets={isLoadingAssets}\n isFetchingMore={isFetchingMore}\n hasNextPage={hasNextPage}\n fetchNextPage={fetchNextPage}\n error={assetsError}\n locations={itemLocations}\n searchQuery={searchQuery}\n assetsSort={listSort.assetsSort}\n foldersPosition={listSort.foldersPosition}\n hasActiveFilters={listFilters.filters.length > 0}\n onClearFilters={listFilters.clearFilters}\n onAssetItemClick={openDetails}\n onAddAssets={handleFileSelect}\n canAddAssets={canCreate}\n onClearSearch={clearSearch}\n />\n </DropZoneWithOverlay>\n </Layouts.Content>\n </Box>\n </Page.Main>\n </Layouts.Root>\n </AssetsDndProvider>\n </BusyAssetsProvider>\n </AssetSelectionProvider>\n </UploadDropZoneProvider>\n <FolderFormDialog\n open={isCreateFolderDialogOpen}\n mode=\"create\"\n parentFolderName={title}\n parentFolderId={currentFolderId}\n onClose={() => setIsCreateFolderDialogOpen(false)}\n />\n <ImportFromUrlDialog\n open={isUrlDialogOpen}\n onClose={() => setIsUrlDialogOpen(false)}\n onUpload={handleUrlUpload}\n />\n <AssetDetailsDrawer />\n </>\n );\n};\n"],"names":["INTERSECTION_OPTIONS","threshold","rootMargin","HEADER_SENTINEL_OPTIONS","ITEM_COUNT_MESSAGE","id","getTranslationKey","defaultMessage","SEARCH_RESULTS_COUNT_MESSAGES","both","folders","assets","getSearchResultsCountMessage","numberFolders","numberAssets","AssetsView","view","isLoadingFolders","isLoadingAssets","isFetchingMore","hasNextPage","fetchNextPage","error","locations","searchQuery","assetsSort","foldersPosition","hasActiveFilters","onClearFilters","onAssetItemClick","onAddAssets","canAddAssets","onClearSearch","formatMessage","useIntl","isGridView","viewOptions","GRID","isLoading","mixedItems","useMemo","mergeMixedList","sort","loadMoreRef","useInfiniteScrollSentinel","onLoadMore","options","_jsx","Flex","justifyContent","padding","Loader","Box","Typography","textColor","length","FilteredEmptyState","EmptyState","_jsxs","_Fragment","AssetsGrid","AssetsTable","div","ref","style","height","BulkActionsBar","ClearSelectionOnChange","listQueryKey","clear","useAssetSelection","useEffect","StyledToggleGroup","styled","ToggleGroup","Root","theme","spaces","colors","neutral100","neutral200","borderRadius","StyledToggleItem","Item","neutral600","fontSizes","fontWeights","semiBold","neutral700","neutral0","primary600","StickyHeader","breakpoints","medium","large","$compact","css","shadows","tableShadow","TitleRow","Toolbar","ToolbarGroup","FilterSearchGroup","SortToggleGroup","SearchSlot","ToggleLabel","span","AssetsPage","openDetails","useAssetDetailsParam","canCreate","canUpdate","useMediaLibraryPermissions","currentFolderId","navigateToFolderId","navigateToRoot","useFolderNavigation","currentFolderError","useGetFolderQuery","skip","name","title","itemCount","useFolderInfo","isSearching","clearSearch","useAssetSearch","listSort","useListSort","listFilters","useListFilters","builtFilters","buildAssetFilters","filters","Date","serialized","subscribers","assetPageSubscribers","pagination","assetsError","useInfiniteAssets","folder","search","undefined","fileClauses","enabled","showFiles","data","fetchedFolders","useGetFoldersQuery","parentId","foldersSort","folderClauses","showFolders","itemLocations","buildItemLocations","itemCountLabel","count","searchResultsTitle","query","total","searchResultsCountLabel","pageHeaderTitle","isCreateFolderDialogOpen","setIsCreateFolderDialogOpen","useState","setView","usePersistentState","localStorageKeys","isUrlDialogOpen","setIsUrlDialogOpen","fileInputRef","useRef","uploadDropZoneRef","isHeaderCompact","setIsHeaderCompact","onHeaderSentinelVisibility","useCallback","isVisible","headerSentinelRef","useElementOnScreen","uploadFiles","useUploadFilesMutation","uploadFromUrls","useUploadFromUrlsMutation","settings","useGetUploadSettingsQuery","concurrency","concurrentUploadRequests","isAiMetadataEnabled","useAIMetadataEnabled","uploadFilesToFolder","files","folderId","formData","FormData","fileInfoArray","forEach","file","append","push","caption","alternativeText","JSON","stringify","totalFiles","generateAiMetadata","Boolean","unwrap","handleFileSelect","current","click","handleFileChange","e","target","Array","from","value","handleDrop","handleUrlUpload","urls","getListQueryKey","filter","UploadDropZoneProvider","onDrop","disabled","AssetSelectionProvider","BusyAssetsProvider","AssetsDndProvider","Layouts","sideNav","FolderTree","showActiveFolder","onSelectFolder","Page","Main","VisuallyHidden","input","type","onChange","multiple","aria-hidden","variant","tag","SimpleMenu","popoverPlacement","endIcon","ChevronDown","label","MenuItem","onSelect","startIcon","FolderIcon","Files","Link","FilterMenu","AssetsSearchInput","SortMenu","showFoldersGroup","onValueChange","TABLE","aria-label","List","GridIcon","FilterBadges","compact","Content","BetaNotice","DropZoneWithOverlay","DropFilesMessage","folderName","clearFilters","FolderFormDialog","open","mode","parentFolderName","parentFolderId","onClose","ImportFromUrlDialog","onUpload","AssetDetailsDrawer"],"mappings":"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"}