@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
@@ -7,15 +7,17 @@ import { useIntl } from 'react-intl';
7
7
  import { styled } from 'styled-components';
8
8
  import { ASSET_TYPES } from '../../../../../enums.mjs';
9
9
  import { Drawer } from '../../../../components/Drawer.mjs';
10
+ import { useAIMetadataEnabled } from '../../../../hooks/useAIMetadataEnabled.mjs';
11
+ import { useMediaLibraryPermissions } from '../../../../hooks/useMediaLibraryPermissions.mjs';
10
12
  import { useUploadFileSilentlyMutation } from '../../../../services/api.mjs';
11
13
  import { useGetAssetQuery, useUpdateAssetMutation, useReplaceAssetMutation, useDeleteAssetMutation } from '../../../../services/assets.mjs';
12
14
  import { useGetAllFoldersQuery } from '../../../../services/folders.mjs';
13
- import { useGetSettingsQuery } from '../../../../services/settings.mjs';
14
15
  import { downloadFile } from '../../../../utils/downloadFile.mjs';
15
16
  import { formatBytes, getFileExtension, prefixFileUrlWithBackendUrl } from '../../../../utils/files.mjs';
16
17
  import { getAssetIcon } from '../../../../utils/getAssetIcon.mjs';
17
18
  import { getTranslationKey } from '../../../../utils/translations.mjs';
18
19
  import { useFolderInfo } from '../../hooks/useFolderInfo.mjs';
20
+ import { BusyOverlay } from '../BusyOverlay.mjs';
19
21
  import { AssetCropEditor } from './AssetCropEditor.mjs';
20
22
  import { AssetPreview } from './AssetPreview.mjs';
21
23
 
@@ -146,22 +148,13 @@ const DetailItem = ({ label, value })=>/*#__PURE__*/ jsxs(DetailItemContainer, {
146
148
  z-index: 10;
147
149
  width: calc(100% - ${({ theme })=>theme.spaces[2]});
148
150
  `;
149
- /**
150
- * Full-form overlay rendered during long-running drawer-scoped mutations
151
- * (e.g. replacing the binary). Sits above the toast slot (z-index 10) and
152
- * the in-drawer Alert so the user can't interact with the form mid-flight.
153
- */ const DrawerBusyOverlay = styled(Flex)`
154
- position: absolute;
155
- inset: 0;
156
- z-index: 20;
157
- align-items: center;
158
- justify-content: center;
159
- background: ${({ theme })=>theme.colors.neutral0};
160
- opacity: 0.7;
161
- `;
162
151
  /**
163
152
  * Map the drawer-scoped mutation flags to a single i18n message for the busy
164
153
  * overlay loader. Returns `null` when nothing is in flight.
154
+ *
155
+ * Exported for the unit test: the branch order only matters when two flags are
156
+ * true at once, which the UI makes hard to stage through the rendered drawer
157
+ * (each trigger disables itself while its own mutation runs).
165
158
  */ const getBusyMessage = (state)=>{
166
159
  if (state.isDeleting) {
167
160
  return {
@@ -191,11 +184,24 @@ const StyledWarning = styled(WarningCircle)`
191
184
  fill: ${({ theme })=>theme.colors.warning500};
192
185
  }
193
186
  `;
194
- const DetailField = ({ name, label, required })=>{
187
+ const DetailField = ({ name, label, required, disabled })=>{
195
188
  const { formatMessage } = useIntl();
196
189
  const field = useField(name);
197
190
  const isSubmitting = useForm('DetailField', (state)=>state.isSubmitting);
198
- const value = field.value ?? '';
191
+ // The form context (use-context-selector) echoes changes back
192
+ // asynchronously — driving the input straight from `field.value` makes
193
+ // React rewrite the DOM value after the keystroke, which throws the cursor
194
+ // to the end of the field. The input is therefore controlled by local state
195
+ // (synchronous, cursor-safe) and the form follows; the effect below only
196
+ // matters for EXTERNAL value changes (discard/reset), where a cursor jump
197
+ // is fine because the user isn't typing.
198
+ const fieldValue = field.value ?? '';
199
+ const [value, setValue] = React.useState(fieldValue);
200
+ React.useEffect(()=>{
201
+ setValue(fieldValue);
202
+ }, [
203
+ fieldValue
204
+ ]);
199
205
  const emptyTooltipLabel = formatMessage({
200
206
  id: getTranslationKey('asset-details.field.empty'),
201
207
  defaultMessage: '{label} is currently empty.'
@@ -211,7 +217,10 @@ const DetailField = ({ name, label, required })=>{
211
217
  }),
212
218
  /*#__PURE__*/ jsx(TextInput, {
213
219
  value: value,
214
- onChange: (event)=>field.onChange(name, event.target.value),
220
+ onChange: (event)=>{
221
+ setValue(event.target.value);
222
+ field.onChange(name, event.target.value);
223
+ },
215
224
  endAction: !value ? /*#__PURE__*/ jsx(Tooltip, {
216
225
  label: emptyTooltipLabel,
217
226
  children: /*#__PURE__*/ jsx(StyledWarning, {
@@ -220,12 +229,12 @@ const DetailField = ({ name, label, required })=>{
220
229
  })
221
230
  }) : undefined,
222
231
  type: "text",
223
- disabled: isSubmitting
232
+ disabled: isSubmitting || disabled
224
233
  })
225
234
  ]
226
235
  });
227
236
  };
228
- const LocationField = ({ label, rootLabel, folders })=>{
237
+ const LocationField = ({ label, rootLabel, folders, disabled })=>{
229
238
  const field = useField('folder');
230
239
  const isSubmitting = useForm('LocationField', (state)=>state.isSubmitting);
231
240
  return /*#__PURE__*/ jsxs(Field.Root, {
@@ -241,7 +250,7 @@ const LocationField = ({ label, rootLabel, folders })=>{
241
250
  const next = value === '' ? null : Number(value);
242
251
  field.onChange('folder', next);
243
252
  },
244
- disabled: isSubmitting,
253
+ disabled: isSubmitting || disabled,
245
254
  children: [
246
255
  /*#__PURE__*/ jsx(SingleSelectOption, {
247
256
  value: "",
@@ -398,15 +407,14 @@ const DownloadAssetButton = ({ asset })=>{
398
407
  children: /*#__PURE__*/ jsx(Download, {})
399
408
  });
400
409
  };
401
- /* -------------------------------------------------------------------------------------------------
402
- * ReplaceAssetButton
403
- * -----------------------------------------------------------------------------------------------*/ const ReplaceAssetButton = ()=>{
410
+ const ReplaceAssetButton = ({ mime })=>{
404
411
  const { formatMessage } = useIntl();
405
412
  const { replaceAsset, isReplacing } = useAssetOperation();
406
413
  const fileInputRef = React.useRef(null);
407
414
  const [isDialogOpen, setIsDialogOpen] = React.useState(false);
408
- const { data: settings } = useGetSettingsQuery();
409
- const aiEnabled = settings?.data?.aiMetadata ?? false;
415
+ const aiEnabled = useAIMetadataEnabled({
416
+ mime
417
+ });
410
418
  const handleTriggerClick = ()=>{
411
419
  setIsDialogOpen(true);
412
420
  };
@@ -514,7 +522,7 @@ const DownloadAssetButton = ({ asset })=>{
514
522
  ]
515
523
  });
516
524
  };
517
- const AssetImageActions = ({ onCrop })=>{
525
+ const AssetImageActions = ({ onCrop, mime })=>{
518
526
  const { formatMessage } = useIntl();
519
527
  const isSubmitting = useForm('AssetImageActions', (state)=>state.isSubmitting);
520
528
  return /*#__PURE__*/ jsxs(Flex, {
@@ -532,12 +540,15 @@ const AssetImageActions = ({ onCrop })=>{
532
540
  disabled: isSubmitting || !onCrop,
533
541
  children: /*#__PURE__*/ jsx(Crop, {})
534
542
  }),
535
- /*#__PURE__*/ jsx(ReplaceAssetButton, {})
543
+ /*#__PURE__*/ jsx(ReplaceAssetButton, {
544
+ mime: mime
545
+ })
536
546
  ]
537
547
  });
538
548
  };
539
549
  const AssetDetails = ({ asset, closeDetails })=>{
540
550
  const { formatMessage, formatDate } = useIntl();
551
+ const { canCreate, canUpdate, canDownload, canCopyLink } = useMediaLibraryPermissions();
541
552
  const { data: folders = [] } = useGetAllFoldersQuery();
542
553
  const { toggleNotification } = useNotification();
543
554
  const [updateAsset] = useUpdateAssetMutation();
@@ -595,7 +606,7 @@ const AssetDetails = ({ asset, closeDetails })=>{
595
606
  };
596
607
  const { title: folderName } = useFolderInfo(typeof asset.folder === 'object' && asset.folder !== null ? asset.folder.id ?? null : asset.folder ?? null);
597
608
  // Owns the replace upload so isReplacing can drive the busy overlay.
598
- const handleReplace = async (file)=>{
609
+ const handleReplace = React.useCallback(async (file)=>{
599
610
  const res = await replaceMutation({
600
611
  id: asset.id,
601
612
  file
@@ -619,10 +630,15 @@ const AssetDetails = ({ asset, closeDetails })=>{
619
630
  defaultMessage: 'File replaced.'
620
631
  })
621
632
  });
622
- };
633
+ }, [
634
+ asset.id,
635
+ formatMessage,
636
+ notify,
637
+ replaceMutation
638
+ ]);
623
639
  // Owns the delete: on error notify in-drawer (drawer stays), on success fire
624
640
  // a persistent global notification then close the drawer.
625
- const handleDelete = async ()=>{
641
+ const handleDelete = React.useCallback(async ()=>{
626
642
  const res = await deleteMutation(asset.id);
627
643
  if ('error' in res) {
628
644
  const error = res.error;
@@ -646,7 +662,15 @@ const AssetDetails = ({ asset, closeDetails })=>{
646
662
  })
647
663
  });
648
664
  closeDetails();
649
- };
665
+ }, [
666
+ asset.id,
667
+ closeDetails,
668
+ deleteMutation,
669
+ folderName,
670
+ formatMessage,
671
+ notify,
672
+ toggleNotification
673
+ ]);
650
674
  const notifyCropError = ()=>{
651
675
  notify({
652
676
  type: 'danger',
@@ -712,10 +736,9 @@ const AssetDetails = ({ asset, closeDetails })=>{
712
736
  deleteAsset: handleDelete,
713
737
  isReplacing,
714
738
  isDeleting
715
- }), // handleReplace / handleDelete close over asset+mutations and don't need a
716
- // stable identity here; the consumers re-render with the new context value.
717
- // eslint-disable-next-line react-hooks/exhaustive-deps
718
- [
739
+ }), [
740
+ handleReplace,
741
+ handleDelete,
719
742
  isReplacing,
720
743
  isDeleting
721
744
  ]);
@@ -746,12 +769,11 @@ const AssetDetails = ({ asset, closeDetails })=>{
746
769
  asset: asset,
747
770
  onClose: ()=>setIsCropOpen(false),
748
771
  onApply: handleCropApply,
749
- onSaveAsCopy: handleCropSaveAsCopy
772
+ onSaveAsCopy: handleCropSaveAsCopy,
773
+ canSaveAsCopy: canCreate
750
774
  }) : null,
751
- busyMessage ? /*#__PURE__*/ jsx(DrawerBusyOverlay, {
752
- children: /*#__PURE__*/ jsx(Loader, {
753
- children: formatMessage(busyMessage)
754
- })
775
+ busyMessage ? /*#__PURE__*/ jsx(BusyOverlay, {
776
+ children: formatMessage(busyMessage)
755
777
  }) : null,
756
778
  drawerToast ? /*#__PURE__*/ jsx(DrawerToastSlot, {
757
779
  children: /*#__PURE__*/ jsx(Alert, {
@@ -768,8 +790,9 @@ const AssetDetails = ({ asset, closeDetails })=>{
768
790
  children: [
769
791
  /*#__PURE__*/ jsx(AssetPreview, {
770
792
  asset: asset,
771
- actions: isImage ? /*#__PURE__*/ jsx(AssetImageActions, {
772
- onCrop: ()=>setIsCropOpen(true)
793
+ actions: isImage && canUpdate ? /*#__PURE__*/ jsx(AssetImageActions, {
794
+ onCrop: ()=>setIsCropOpen(true),
795
+ mime: asset.mime
773
796
  }) : null
774
797
  }),
775
798
  /*#__PURE__*/ jsxs(Flex, {
@@ -868,7 +891,8 @@ const AssetDetails = ({ asset, closeDetails })=>{
868
891
  id: getTranslationKey('asset-details.fileName'),
869
892
  defaultMessage: 'File name'
870
893
  }),
871
- required: true
894
+ required: true,
895
+ disabled: !canUpdate
872
896
  }),
873
897
  /*#__PURE__*/ jsx(LocationField, {
874
898
  label: formatMessage({
@@ -879,31 +903,30 @@ const AssetDetails = ({ asset, closeDetails })=>{
879
903
  id: getTranslationKey('plugin.home'),
880
904
  defaultMessage: 'Home'
881
905
  }),
882
- folders: folders
906
+ folders: folders,
907
+ disabled: !canUpdate
883
908
  }),
884
- isImage && /*#__PURE__*/ jsxs(Fragment, {
885
- children: [
886
- /*#__PURE__*/ jsx(DetailField, {
887
- name: "caption",
888
- label: formatMessage({
889
- id: getTranslationKey('asset-details.caption'),
890
- defaultMessage: 'Caption'
891
- })
892
- }),
893
- /*#__PURE__*/ jsx(DetailField, {
894
- name: "alternativeText",
895
- label: formatMessage({
896
- id: getTranslationKey('asset-details.alternativeText'),
897
- defaultMessage: 'Alternative text'
898
- })
899
- })
900
- ]
909
+ /*#__PURE__*/ jsx(DetailField, {
910
+ name: "caption",
911
+ label: formatMessage({
912
+ id: getTranslationKey('asset-details.caption'),
913
+ defaultMessage: 'Caption'
914
+ }),
915
+ disabled: !canUpdate
916
+ }),
917
+ /*#__PURE__*/ jsx(DetailField, {
918
+ name: "alternativeText",
919
+ label: formatMessage({
920
+ id: getTranslationKey('asset-details.alternativeText'),
921
+ defaultMessage: 'Alternative text'
922
+ }),
923
+ disabled: !canUpdate
901
924
  })
902
925
  ]
903
926
  })
904
927
  ]
905
928
  }),
906
- /*#__PURE__*/ jsxs(Flex, {
929
+ (canUpdate || canCopyLink || canDownload) && /*#__PURE__*/ jsxs(Flex, {
907
930
  justifyContent: "space-between",
908
931
  alignItems: "center",
909
932
  gap: 2,
@@ -916,16 +939,16 @@ const AssetDetails = ({ asset, closeDetails })=>{
916
939
  /*#__PURE__*/ jsxs(Flex, {
917
940
  gap: 2,
918
941
  children: [
919
- /*#__PURE__*/ jsx(DeleteAssetButton, {}),
920
- /*#__PURE__*/ jsx(CopyLinkButton, {
942
+ canUpdate && /*#__PURE__*/ jsx(DeleteAssetButton, {}),
943
+ canCopyLink && /*#__PURE__*/ jsx(CopyLinkButton, {
921
944
  asset: asset
922
945
  }),
923
- /*#__PURE__*/ jsx(DownloadAssetButton, {
946
+ canDownload && /*#__PURE__*/ jsx(DownloadAssetButton, {
924
947
  asset: asset
925
948
  })
926
949
  ]
927
950
  }),
928
- /*#__PURE__*/ jsx(Button, {
951
+ canUpdate && /*#__PURE__*/ jsx(Button, {
929
952
  type: "submit",
930
953
  variant: "default",
931
954
  loading: isSubmitting,
@@ -1068,7 +1091,11 @@ const DrawerContent = ({ assetId, closeDetails })=>{
1068
1091
  /*#__PURE__*/ jsx(Drawer.Body, {
1069
1092
  animationDirection: "left",
1070
1093
  width: "41.6rem",
1071
- height: "100vh",
1094
+ // dvh, not vh: the drawer is anchored to the bottom, so with 100vh on
1095
+ // mobile (where the URL bar shrinks the visual viewport below 100vh)
1096
+ // the top of the drawer — header, title, close button — is pushed
1097
+ // off-screen. dvh tracks the actual visible height.
1098
+ height: "100dvh",
1072
1099
  onAnimationEnd: onCloseAnimationEnd,
1073
1100
  children: /*#__PURE__*/ jsx(DrawerContent, {
1074
1101
  assetId: assetId,
@@ -1079,5 +1106,5 @@ const DrawerContent = ({ assetId, closeDetails })=>{
1079
1106
  });
1080
1107
  };
1081
1108
 
1082
- export { AssetDetails, AssetDetailsDrawer, AssetOperationsContext, DrawerNotifyContext, useAssetDetailsParam };
1109
+ export { AssetDetails, AssetDetailsDrawer, AssetOperationsContext, DrawerNotifyContext, getBusyMessage, useAssetDetailsParam };
1083
1110
  //# sourceMappingURL=AssetDetailsDrawer.mjs.map