@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
@@ -12,7 +12,7 @@ export declare const useEditAsset: () => {
12
12
  cancel: () => void;
13
13
  editAsset: (asset: FileAsset, file: File) => Promise<FileAsset>;
14
14
  progress: number;
15
- status: "loading" | "success" | "error" | "idle";
15
+ status: "success" | "error" | "loading" | "idle";
16
16
  data: undefined;
17
17
  error: null;
18
18
  isError: false;
@@ -39,7 +39,7 @@ export declare const useEditAsset: () => {
39
39
  cancel: () => void;
40
40
  editAsset: (asset: FileAsset, file: File) => Promise<FileAsset>;
41
41
  progress: number;
42
- status: "loading" | "success" | "error" | "idle";
42
+ status: "success" | "error" | "loading" | "idle";
43
43
  data: undefined;
44
44
  error: null;
45
45
  isError: false;
@@ -66,7 +66,7 @@ export declare const useEditAsset: () => {
66
66
  cancel: () => void;
67
67
  editAsset: (asset: FileAsset, file: File) => Promise<FileAsset>;
68
68
  progress: number;
69
- status: "loading" | "success" | "error" | "idle";
69
+ status: "success" | "error" | "loading" | "idle";
70
70
  data: undefined;
71
71
  error: ErrorMutation;
72
72
  isError: true;
@@ -93,7 +93,7 @@ export declare const useEditAsset: () => {
93
93
  cancel: () => void;
94
94
  editAsset: (asset: FileAsset, file: File) => Promise<FileAsset>;
95
95
  progress: number;
96
- status: "loading" | "success" | "error" | "idle";
96
+ status: "success" | "error" | "loading" | "idle";
97
97
  data: FileAsset;
98
98
  error: null;
99
99
  isError: false;
@@ -6,7 +6,7 @@ interface EditFolderRequestParams {
6
6
  }
7
7
  export declare const useEditFolder: () => {
8
8
  editFolder: (attrs: EditFolderRequestParams["attrs"], id?: EditFolderRequestParams["id"]) => Promise<import("../../../shared/contracts/folders").Folder>;
9
- status: "loading" | "success" | "error" | "idle";
9
+ status: "success" | "error" | "loading" | "idle";
10
10
  data: undefined;
11
11
  error: null;
12
12
  isError: false;
@@ -22,7 +22,7 @@ export declare const useEditFolder: () => {
22
22
  mutateAsync: import("react-query").UseMutateAsyncFunction<import("../../../shared/contracts/folders").Folder, import("@strapi/utils/dist/errors").ApplicationError<"ApplicationError", string, unknown> | import("@strapi/utils/dist/errors").NotFoundError<string, unknown> | import("@strapi/utils/dist/errors").ValidationError<string, unknown> | undefined, EditFolderRequestParams, unknown>;
23
23
  } | {
24
24
  editFolder: (attrs: EditFolderRequestParams["attrs"], id?: EditFolderRequestParams["id"]) => Promise<import("../../../shared/contracts/folders").Folder>;
25
- status: "loading" | "success" | "error" | "idle";
25
+ status: "success" | "error" | "loading" | "idle";
26
26
  data: undefined;
27
27
  error: null;
28
28
  isError: false;
@@ -38,7 +38,7 @@ export declare const useEditFolder: () => {
38
38
  mutateAsync: import("react-query").UseMutateAsyncFunction<import("../../../shared/contracts/folders").Folder, import("@strapi/utils/dist/errors").ApplicationError<"ApplicationError", string, unknown> | import("@strapi/utils/dist/errors").NotFoundError<string, unknown> | import("@strapi/utils/dist/errors").ValidationError<string, unknown> | undefined, EditFolderRequestParams, unknown>;
39
39
  } | {
40
40
  editFolder: (attrs: EditFolderRequestParams["attrs"], id?: EditFolderRequestParams["id"]) => Promise<import("../../../shared/contracts/folders").Folder>;
41
- status: "loading" | "success" | "error" | "idle";
41
+ status: "success" | "error" | "loading" | "idle";
42
42
  data: undefined;
43
43
  error: import("@strapi/utils/dist/errors").ApplicationError<"ApplicationError", string, unknown> | import("@strapi/utils/dist/errors").NotFoundError<string, unknown> | import("@strapi/utils/dist/errors").ValidationError<string, unknown> | undefined;
44
44
  isError: true;
@@ -54,7 +54,7 @@ export declare const useEditFolder: () => {
54
54
  mutateAsync: import("react-query").UseMutateAsyncFunction<import("../../../shared/contracts/folders").Folder, import("@strapi/utils/dist/errors").ApplicationError<"ApplicationError", string, unknown> | import("@strapi/utils/dist/errors").NotFoundError<string, unknown> | import("@strapi/utils/dist/errors").ValidationError<string, unknown> | undefined, EditFolderRequestParams, unknown>;
55
55
  } | {
56
56
  editFolder: (attrs: EditFolderRequestParams["attrs"], id?: EditFolderRequestParams["id"]) => Promise<import("../../../shared/contracts/folders").Folder>;
57
- status: "loading" | "success" | "error" | "idle";
57
+ status: "success" | "error" | "loading" | "idle";
58
58
  data: import("../../../shared/contracts/folders").Folder;
59
59
  error: null;
60
60
  isError: false;
@@ -4,4 +4,5 @@ export declare function useSettings(isEnabled?: boolean): import("react-query").
4
4
  autoOrientation?: boolean;
5
5
  videoPreview?: boolean;
6
6
  aiMetadata?: boolean;
7
+ concurrentUploadRequests?: number;
7
8
  }, unknown>;
@@ -1,4 +1,4 @@
1
1
  import { TrackingEvent } from '@strapi/admin/strapi-admin';
2
2
  export declare const useTracking: () => {
3
- trackUsage: <TEvent extends TrackingEvent>(event: TEvent["name"], properties?: TEvent["properties"]) => Promise<import("axios").AxiosResponse<string, any, {}> | null>;
3
+ trackUsage: <TEvent extends TrackingEvent>(event: TEvent["name"], properties?: TEvent["properties"]) => Promise<import("axios").AxiosResponse<string, any, {}, any> | null>;
4
4
  };
@@ -10,6 +10,6 @@ export declare const useUpload: () => {
10
10
  cancel: () => void;
11
11
  error: import("@strapi/utils/dist/errors").ApplicationError<"ApplicationError", string, unknown> | import("@strapi/utils/dist/errors").ValidationError<string, unknown> | null | undefined;
12
12
  progress: number;
13
- status: "loading" | "success" | "error" | "idle";
13
+ status: "success" | "error" | "loading" | "idle";
14
14
  };
15
15
  export {};
@@ -82,7 +82,7 @@ var en = {
82
82
  "upload.progress.indicator.complete": "Upload complete indicator",
83
83
  "upload.progress.label": "Upload",
84
84
  "upload.progress.errors.title": "Failed to upload:",
85
- "upload.progress.cancel": "Cancel",
85
+ "upload.progress.cancel": "Cancel all",
86
86
  "upload.progress.canceled": "Uploads canceled",
87
87
  "upload.progress.canceled.subtitle": "Some files were not uploaded",
88
88
  "upload.progress.canceled.subtitle.all": "All uploads were canceled",
@@ -90,9 +90,19 @@ var en = {
90
90
  "upload.progress.file.uploading": "Uploading...",
91
91
  "upload.progress.file.canceled": "Canceled",
92
92
  "upload.progress.file.uploaded": "Uploaded",
93
+ "upload.progress.file.generatingMetadata": "Uploaded • Generating metadata…",
94
+ "upload.progress.file.metadataGenerated": "Uploaded • Metadata generated",
95
+ "upload.progress.file.metadataSkipped": "Upload complete • Metadata generation skipped",
96
+ "upload.progress.file.metadataFailed": "Upload complete • Metadata generation failed",
97
+ "upload.progress.generatingMetadata.withCount": "Generating metadata with AI ({percentage}%)",
98
+ "upload.progress.metadataGenerated.withCount": "{count, plural, one {Metadata successfully generated on # file} other {Metadata successfully generated on # files}}",
99
+ "upload.progress.metadataGenerated.withFailures": "{generatedCount} generated, {failedCount} failed",
93
100
  "upload.progress.maximize": "Maximize",
94
101
  "upload.progress.minimize": "Minimize",
95
102
  "upload.progress.close": "Close",
103
+ "beta.badge": "Beta",
104
+ "beta.notice.close": "Close",
105
+ "beta.notice.content": "This is a beta version of the Media Library. Some features are still in progress — please report any issue you run into.",
96
106
  "bulk.select.label": "Select all assets",
97
107
  "button.next": "Next",
98
108
  "new": "New",
@@ -109,6 +119,7 @@ var en = {
109
119
  "control-card.save-focal-point": "Save focal point",
110
120
  "control-card.download": "Download",
111
121
  "control-card.edit": "Edit",
122
+ "control-card.more-actions": "More actions",
112
123
  "control-card.remove-selection": "Remove from selection",
113
124
  "control-card.replace-media": "Replace Media",
114
125
  "control-card.save": "Save",
@@ -126,17 +137,27 @@ var en = {
126
137
  "header.actions.add-assets": "Add new assets",
127
138
  "header.actions.add-folder": "Add new folder",
128
139
  "folder.create.title": "New folder",
140
+ "folder.create.title-in": "New folder in {folderName}",
129
141
  "folder.form.name.label": "Folder name",
130
142
  "folder.create.submit": "Create folder",
131
143
  "folder.create.form.error.name-required": "Name is required",
132
144
  "folder.create.form.error.unknown": "An error occurred while creating the folder",
133
145
  "folder.create.success": "Folder has been created",
146
+ "folder.rename.title": "Rename folder",
147
+ "folder.rename.submit": "Save",
148
+ "folder.rename.form.error.unknown": "An error occurred while renaming the folder",
149
+ "folder.rename.success": "Folder has been renamed",
134
150
  "header.actions.add-assets.folder": "folder",
135
151
  "header.actions.upload-assets": "Upload assets",
136
152
  "header.actions.upload-new-asset": "Upload new asset",
137
153
  "header.content.assets-empty": "No assets",
138
154
  "header.content.assets": "{numberFolders, plural, one {1 folder} other {# folders}} - {numberAssets, plural, one {1 asset} other {# assets}}",
139
155
  "header.content.item-count": "{count, plural, =1 {# item} other {# items}}",
156
+ "header.search.placeholder": "Search",
157
+ "header.search-results": "Search results for \"{query}\"",
158
+ "header.search-results.count": "{numberFolders, plural, one {1 folder} other {# folders}} - {numberAssets, plural, one {1 asset} other {# assets}}",
159
+ "header.search-results.count.assets": "{numberAssets, plural, =0 {0 assets} one {1 asset} other {# assets}}",
160
+ "header.search-results.count.folders": "{numberFolders, plural, one {1 folder} other {# folders}}",
140
161
  "import-files": "File upload",
141
162
  "import-from-url": "File upload from URL",
142
163
  "input.button.label": "Browse files",
@@ -162,6 +183,34 @@ var en = {
162
183
  "list.empty.title": "No assets yet",
163
184
  "list.empty.description": "Get started by uploading assets or creating a folder.",
164
185
  "list.empty.add-assets": "Add assets",
186
+ "list.filters.trigger": "Filter",
187
+ "list.filters.field.type": "Type",
188
+ "list.filters.field.created": "Creation date",
189
+ "list.filters.field.updated": "Last modified",
190
+ "list.filters.type.folder": "Folder",
191
+ "list.filters.type.picture": "Picture",
192
+ "list.filters.type.audio": "Audio",
193
+ "list.filters.type.video": "Video",
194
+ "list.filters.type.document": "Document",
195
+ "list.filters.preset.1day": "1 day ago",
196
+ "list.filters.preset.3days": "3 days ago",
197
+ "list.filters.preset.1week": "1 week ago",
198
+ "list.filters.preset.1month": "1 month ago",
199
+ "list.filters.preset.3months": "3 months ago",
200
+ "list.filters.preset.6months": "6 months ago",
201
+ "list.filters.preset.1year": "1 year ago",
202
+ "list.filters.select-date-range": "Select date range",
203
+ "list.filters.condition.is": "is",
204
+ "list.filters.condition.is-not": "is not",
205
+ "list.filters.condition.is-exactly": "is exactly",
206
+ "list.filters.condition.within-last": "within the last",
207
+ "list.filters.condition.not-within-last": "not within the last",
208
+ "list.filters.remove": "Remove {filter} filter",
209
+ "list.filters.empty": "No items matched current filters",
210
+ "list.filters.clear": "Clear filters",
211
+ "list.filters.calendar.previous-month": "Previous month",
212
+ "list.filters.calendar.next-month": "Next month",
213
+ "list.filters.calendar.label": "Select date range",
165
214
  "list.sort.trigger": "Sort: {active}",
166
215
  "list.sort.section": "Sort",
167
216
  "list.sort.oldest-uploads": "Oldest uploads",
@@ -174,14 +223,28 @@ var en = {
174
223
  "list.sort.folders-on-top": "On top",
175
224
  "list.sort.folders-mixed": "Mixed with files",
176
225
  "list.sort.active": "(active)",
226
+ "list.search.empty.title": "No results found",
227
+ "list.search.empty.description": "No assets or folders match \"{query}\". Try a different search.",
228
+ "list.search.empty.clear": "Clear search",
177
229
  "list.assets.loading-more": "Loading more assets...",
178
230
  "list.assets.loading-asset": "Loading the preview for the media: {path}",
179
231
  "list.assets.not-supported-content": "No preview available",
180
232
  "list.assets.preview-asset": "Preview for the video at path {path}",
181
233
  "list.assets.selected": "{numberFolders, plural, one {1 folder} other {# folders}} - {numberAssets, plural, one {1 asset} other {# assets}}",
182
234
  "list-assets-select": "Select {name} asset",
235
+ "list.assets.actions.replace": "Replace media",
236
+ "list.assets.actions.copy-link": "Copy link to media",
237
+ "list.assets.actions.download": "Download media",
238
+ "list.assets.actions.move": "Move to folder",
239
+ "list.assets.actions.delete": "Delete",
183
240
  "list.assets.type-not-allowed": "This type of file is not allowed.",
184
241
  "list.assets.to-upload": "{number, plural, =0 {No asset} one {1 asset} other {# assets}} ready to upload",
242
+ "list.folder.actions.copy-link": "Copy link to folder",
243
+ "list.folder.actions.copy-link.success": "Folder link copied.",
244
+ "list.folder.actions.copy-link.error": "Failed to copy the folder link.",
245
+ "list.folder.actions.rename": "Rename folder",
246
+ "list.folder.actions.move": "Move to folder",
247
+ "list.folder.actions.delete": "Delete folder",
185
248
  "list.folder.edit": "Edit folder",
186
249
  "list.folder.select": "Select {name} folder",
187
250
  "list.folder.subtitle": "{folderCount, plural, one {# folder} other {# folders}}, {filesCount, plural, one {# asset} other {# assets}}",
@@ -274,16 +337,25 @@ var en = {
274
337
  "list.table.header.sort": "Sort on {label}",
275
338
  "list.table.header.select-all": "Select all",
276
339
  "list.table.row.select": "Select {name}",
340
+ "list.table.row.metadata-missing": "This asset is missing metadata (caption or alternative text).",
277
341
  "list.table.content.empty-label": "This field is empty",
278
342
  "list.bulk-actions.label": "Bulk actions",
279
343
  "list.bulk-actions.selected-count": "{count, plural, =1 {# item selected} other {# items selected}}",
280
344
  "list.bulk-actions.clear": "Clear selection",
281
345
  "list.bulk-actions.create-metadata": "Create metadata",
346
+ "list.bulk-actions.create-metadata.success": "{count, plural, =1 {Metadata generated for # asset} other {Metadata generated for # assets}}",
347
+ "list.bulk-actions.create-metadata.partial": "{successCount} generated, {skippedCount} skipped (unsupported file type), {errorCount} failed{folderCount, plural, =0 {} one {, # folder ignored} other {, # folders ignored}}",
348
+ "list.bulk-actions.create-metadata.error": "An error occurred while generating metadata.",
349
+ "list.bulk-actions.create-metadata.too-many": "Metadata can be generated for up to {max} assets at a time. Select fewer assets to continue.",
350
+ "list.bulk-actions.create-metadata.no-eligible": "Metadata can only be generated for images. None of the selected assets are supported.",
282
351
  "list.bulk-actions.move": "Move",
283
352
  "list.bulk-actions.move.title": "Move elements to",
284
353
  "list.bulk-actions.move.location": "Location",
354
+ "list.bulk-actions.move.no-destination": "There is no other folder to move this to.",
355
+ "list.bulk-actions.move.load-error": "Couldn't load the folder list. Please try again.",
285
356
  "list.bulk-actions.move.submit": "Move",
286
357
  "list.bulk-actions.move.success": "{count, plural, =1 {# element has} other {# elements have}} been moved from {source} to {destination}",
358
+ "list.bulk-actions.move.success-multiple-sources": "{count, plural, =1 {# element has} other {# elements have}} been moved to {destination}",
287
359
  "list.bulk-actions.move.error": "An error occurred while moving the items.",
288
360
  "list.bulk-actions.delete": "Delete",
289
361
  "list.bulk-actions.delete.confirm.title": "Delete {count, plural, =1 {# item} other {# items}}?",
@@ -291,7 +363,6 @@ var en = {
291
363
  "list.bulk-actions.delete.confirm.description.cant-be-undone": "This action can’t be undone. Deleting a folder also removes everything inside it, and any linked content will break – media asset containers will appear empty.",
292
364
  "list.bulk-actions.delete.success": "{count, plural, =1 {# item has been deleted} other {# items have been deleted}}",
293
365
  "list.bulk-actions.delete.error": "An error occurred while deleting the items.",
294
- "list.bulk-actions.create-metadata-not-available": "Generate metadata isn't available yet",
295
366
  "tabs.title": "How do you want to upload your assets?",
296
367
  "window.confirm.close-modal.file": "Are you sure? Your changes will be lost.",
297
368
  "window.confirm.close-modal.files": "Are you sure? You have some files that have not been uploaded yet.",
@@ -1 +1 @@
1
- {"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -80,7 +80,7 @@ var en = {
80
80
  "upload.progress.indicator.complete": "Upload complete indicator",
81
81
  "upload.progress.label": "Upload",
82
82
  "upload.progress.errors.title": "Failed to upload:",
83
- "upload.progress.cancel": "Cancel",
83
+ "upload.progress.cancel": "Cancel all",
84
84
  "upload.progress.canceled": "Uploads canceled",
85
85
  "upload.progress.canceled.subtitle": "Some files were not uploaded",
86
86
  "upload.progress.canceled.subtitle.all": "All uploads were canceled",
@@ -88,9 +88,19 @@ var en = {
88
88
  "upload.progress.file.uploading": "Uploading...",
89
89
  "upload.progress.file.canceled": "Canceled",
90
90
  "upload.progress.file.uploaded": "Uploaded",
91
+ "upload.progress.file.generatingMetadata": "Uploaded • Generating metadata…",
92
+ "upload.progress.file.metadataGenerated": "Uploaded • Metadata generated",
93
+ "upload.progress.file.metadataSkipped": "Upload complete • Metadata generation skipped",
94
+ "upload.progress.file.metadataFailed": "Upload complete • Metadata generation failed",
95
+ "upload.progress.generatingMetadata.withCount": "Generating metadata with AI ({percentage}%)",
96
+ "upload.progress.metadataGenerated.withCount": "{count, plural, one {Metadata successfully generated on # file} other {Metadata successfully generated on # files}}",
97
+ "upload.progress.metadataGenerated.withFailures": "{generatedCount} generated, {failedCount} failed",
91
98
  "upload.progress.maximize": "Maximize",
92
99
  "upload.progress.minimize": "Minimize",
93
100
  "upload.progress.close": "Close",
101
+ "beta.badge": "Beta",
102
+ "beta.notice.close": "Close",
103
+ "beta.notice.content": "This is a beta version of the Media Library. Some features are still in progress — please report any issue you run into.",
94
104
  "bulk.select.label": "Select all assets",
95
105
  "button.next": "Next",
96
106
  "new": "New",
@@ -107,6 +117,7 @@ var en = {
107
117
  "control-card.save-focal-point": "Save focal point",
108
118
  "control-card.download": "Download",
109
119
  "control-card.edit": "Edit",
120
+ "control-card.more-actions": "More actions",
110
121
  "control-card.remove-selection": "Remove from selection",
111
122
  "control-card.replace-media": "Replace Media",
112
123
  "control-card.save": "Save",
@@ -124,17 +135,27 @@ var en = {
124
135
  "header.actions.add-assets": "Add new assets",
125
136
  "header.actions.add-folder": "Add new folder",
126
137
  "folder.create.title": "New folder",
138
+ "folder.create.title-in": "New folder in {folderName}",
127
139
  "folder.form.name.label": "Folder name",
128
140
  "folder.create.submit": "Create folder",
129
141
  "folder.create.form.error.name-required": "Name is required",
130
142
  "folder.create.form.error.unknown": "An error occurred while creating the folder",
131
143
  "folder.create.success": "Folder has been created",
144
+ "folder.rename.title": "Rename folder",
145
+ "folder.rename.submit": "Save",
146
+ "folder.rename.form.error.unknown": "An error occurred while renaming the folder",
147
+ "folder.rename.success": "Folder has been renamed",
132
148
  "header.actions.add-assets.folder": "folder",
133
149
  "header.actions.upload-assets": "Upload assets",
134
150
  "header.actions.upload-new-asset": "Upload new asset",
135
151
  "header.content.assets-empty": "No assets",
136
152
  "header.content.assets": "{numberFolders, plural, one {1 folder} other {# folders}} - {numberAssets, plural, one {1 asset} other {# assets}}",
137
153
  "header.content.item-count": "{count, plural, =1 {# item} other {# items}}",
154
+ "header.search.placeholder": "Search",
155
+ "header.search-results": "Search results for \"{query}\"",
156
+ "header.search-results.count": "{numberFolders, plural, one {1 folder} other {# folders}} - {numberAssets, plural, one {1 asset} other {# assets}}",
157
+ "header.search-results.count.assets": "{numberAssets, plural, =0 {0 assets} one {1 asset} other {# assets}}",
158
+ "header.search-results.count.folders": "{numberFolders, plural, one {1 folder} other {# folders}}",
138
159
  "import-files": "File upload",
139
160
  "import-from-url": "File upload from URL",
140
161
  "input.button.label": "Browse files",
@@ -160,6 +181,34 @@ var en = {
160
181
  "list.empty.title": "No assets yet",
161
182
  "list.empty.description": "Get started by uploading assets or creating a folder.",
162
183
  "list.empty.add-assets": "Add assets",
184
+ "list.filters.trigger": "Filter",
185
+ "list.filters.field.type": "Type",
186
+ "list.filters.field.created": "Creation date",
187
+ "list.filters.field.updated": "Last modified",
188
+ "list.filters.type.folder": "Folder",
189
+ "list.filters.type.picture": "Picture",
190
+ "list.filters.type.audio": "Audio",
191
+ "list.filters.type.video": "Video",
192
+ "list.filters.type.document": "Document",
193
+ "list.filters.preset.1day": "1 day ago",
194
+ "list.filters.preset.3days": "3 days ago",
195
+ "list.filters.preset.1week": "1 week ago",
196
+ "list.filters.preset.1month": "1 month ago",
197
+ "list.filters.preset.3months": "3 months ago",
198
+ "list.filters.preset.6months": "6 months ago",
199
+ "list.filters.preset.1year": "1 year ago",
200
+ "list.filters.select-date-range": "Select date range",
201
+ "list.filters.condition.is": "is",
202
+ "list.filters.condition.is-not": "is not",
203
+ "list.filters.condition.is-exactly": "is exactly",
204
+ "list.filters.condition.within-last": "within the last",
205
+ "list.filters.condition.not-within-last": "not within the last",
206
+ "list.filters.remove": "Remove {filter} filter",
207
+ "list.filters.empty": "No items matched current filters",
208
+ "list.filters.clear": "Clear filters",
209
+ "list.filters.calendar.previous-month": "Previous month",
210
+ "list.filters.calendar.next-month": "Next month",
211
+ "list.filters.calendar.label": "Select date range",
163
212
  "list.sort.trigger": "Sort: {active}",
164
213
  "list.sort.section": "Sort",
165
214
  "list.sort.oldest-uploads": "Oldest uploads",
@@ -172,14 +221,28 @@ var en = {
172
221
  "list.sort.folders-on-top": "On top",
173
222
  "list.sort.folders-mixed": "Mixed with files",
174
223
  "list.sort.active": "(active)",
224
+ "list.search.empty.title": "No results found",
225
+ "list.search.empty.description": "No assets or folders match \"{query}\". Try a different search.",
226
+ "list.search.empty.clear": "Clear search",
175
227
  "list.assets.loading-more": "Loading more assets...",
176
228
  "list.assets.loading-asset": "Loading the preview for the media: {path}",
177
229
  "list.assets.not-supported-content": "No preview available",
178
230
  "list.assets.preview-asset": "Preview for the video at path {path}",
179
231
  "list.assets.selected": "{numberFolders, plural, one {1 folder} other {# folders}} - {numberAssets, plural, one {1 asset} other {# assets}}",
180
232
  "list-assets-select": "Select {name} asset",
233
+ "list.assets.actions.replace": "Replace media",
234
+ "list.assets.actions.copy-link": "Copy link to media",
235
+ "list.assets.actions.download": "Download media",
236
+ "list.assets.actions.move": "Move to folder",
237
+ "list.assets.actions.delete": "Delete",
181
238
  "list.assets.type-not-allowed": "This type of file is not allowed.",
182
239
  "list.assets.to-upload": "{number, plural, =0 {No asset} one {1 asset} other {# assets}} ready to upload",
240
+ "list.folder.actions.copy-link": "Copy link to folder",
241
+ "list.folder.actions.copy-link.success": "Folder link copied.",
242
+ "list.folder.actions.copy-link.error": "Failed to copy the folder link.",
243
+ "list.folder.actions.rename": "Rename folder",
244
+ "list.folder.actions.move": "Move to folder",
245
+ "list.folder.actions.delete": "Delete folder",
183
246
  "list.folder.edit": "Edit folder",
184
247
  "list.folder.select": "Select {name} folder",
185
248
  "list.folder.subtitle": "{folderCount, plural, one {# folder} other {# folders}}, {filesCount, plural, one {# asset} other {# assets}}",
@@ -272,16 +335,25 @@ var en = {
272
335
  "list.table.header.sort": "Sort on {label}",
273
336
  "list.table.header.select-all": "Select all",
274
337
  "list.table.row.select": "Select {name}",
338
+ "list.table.row.metadata-missing": "This asset is missing metadata (caption or alternative text).",
275
339
  "list.table.content.empty-label": "This field is empty",
276
340
  "list.bulk-actions.label": "Bulk actions",
277
341
  "list.bulk-actions.selected-count": "{count, plural, =1 {# item selected} other {# items selected}}",
278
342
  "list.bulk-actions.clear": "Clear selection",
279
343
  "list.bulk-actions.create-metadata": "Create metadata",
344
+ "list.bulk-actions.create-metadata.success": "{count, plural, =1 {Metadata generated for # asset} other {Metadata generated for # assets}}",
345
+ "list.bulk-actions.create-metadata.partial": "{successCount} generated, {skippedCount} skipped (unsupported file type), {errorCount} failed{folderCount, plural, =0 {} one {, # folder ignored} other {, # folders ignored}}",
346
+ "list.bulk-actions.create-metadata.error": "An error occurred while generating metadata.",
347
+ "list.bulk-actions.create-metadata.too-many": "Metadata can be generated for up to {max} assets at a time. Select fewer assets to continue.",
348
+ "list.bulk-actions.create-metadata.no-eligible": "Metadata can only be generated for images. None of the selected assets are supported.",
280
349
  "list.bulk-actions.move": "Move",
281
350
  "list.bulk-actions.move.title": "Move elements to",
282
351
  "list.bulk-actions.move.location": "Location",
352
+ "list.bulk-actions.move.no-destination": "There is no other folder to move this to.",
353
+ "list.bulk-actions.move.load-error": "Couldn't load the folder list. Please try again.",
283
354
  "list.bulk-actions.move.submit": "Move",
284
355
  "list.bulk-actions.move.success": "{count, plural, =1 {# element has} other {# elements have}} been moved from {source} to {destination}",
356
+ "list.bulk-actions.move.success-multiple-sources": "{count, plural, =1 {# element has} other {# elements have}} been moved to {destination}",
285
357
  "list.bulk-actions.move.error": "An error occurred while moving the items.",
286
358
  "list.bulk-actions.delete": "Delete",
287
359
  "list.bulk-actions.delete.confirm.title": "Delete {count, plural, =1 {# item} other {# items}}?",
@@ -289,7 +361,6 @@ var en = {
289
361
  "list.bulk-actions.delete.confirm.description.cant-be-undone": "This action can’t be undone. Deleting a folder also removes everything inside it, and any linked content will break – media asset containers will appear empty.",
290
362
  "list.bulk-actions.delete.success": "{count, plural, =1 {# item has been deleted} other {# items have been deleted}}",
291
363
  "list.bulk-actions.delete.error": "An error occurred while deleting the items.",
292
- "list.bulk-actions.create-metadata-not-available": "Generate metadata isn't available yet",
293
364
  "tabs.title": "How do you want to upload your assets?",
294
365
  "window.confirm.close-modal.file": "Are you sure? Your changes will be lost.",
295
366
  "window.confirm.close-modal.files": "Are you sure? You have some files that have not been uploaded yet.",
@@ -1 +1 @@
1
- {"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -24,6 +24,7 @@ function _interopNamespace(e) {
24
24
 
25
25
  var yup__namespace = /*#__PURE__*/_interopNamespace(yup);
26
26
 
27
+ const MAX_URLS = 20;
27
28
  const urlSchema = yup__namespace.object().shape({
28
29
  urls: yup__namespace.string().test({
29
30
  name: 'isUrlValid',
@@ -31,16 +32,30 @@ const urlSchema = yup__namespace.object().shape({
31
32
  message: '${path}',
32
33
  test (values = '') {
33
34
  const urls = values.split(/\r?\n/);
34
- if (urls.length === 0) {
35
+ /**
36
+ * Messages are message descriptors rather than bare ids because these translations
37
+ * interpolate values (`{min}`, `{max}`, `{number}`). Without `values`, react-intl
38
+ * fails to format them and renders the raw placeholder. See strapi/strapi#19030.
39
+ */ if (urls.length === 0) {
35
40
  return this.createError({
36
41
  path: this.path,
37
- message: strapiAdmin.translatedErrors.min.id
42
+ message: {
43
+ ...strapiAdmin.translatedErrors.min,
44
+ values: {
45
+ min: 1
46
+ }
47
+ }
38
48
  });
39
49
  }
40
- if (urls.length > 20) {
50
+ if (urls.length > MAX_URLS) {
41
51
  return this.createError({
42
52
  path: this.path,
43
- message: strapiAdmin.translatedErrors.max.id
53
+ message: {
54
+ ...strapiAdmin.translatedErrors.max,
55
+ values: {
56
+ max: MAX_URLS
57
+ }
58
+ }
44
59
  });
45
60
  }
46
61
  const filtered = urls.filter((val)=>{
@@ -48,7 +63,7 @@ const urlSchema = yup__namespace.object().shape({
48
63
  // eslint-disable-next-line no-new
49
64
  new URL(val);
50
65
  return false;
51
- } catch (err) {
66
+ } catch {
52
67
  // invalid url
53
68
  return true;
54
69
  }
@@ -57,12 +72,21 @@ const urlSchema = yup__namespace.object().shape({
57
72
  if (filteredLength === 0) {
58
73
  return true;
59
74
  }
60
- const errorMessage = filteredLength > 1 ? 'form.upload-url.error.url.invalids' : 'form.upload-url.error.url.invalid';
75
+ const errorMessage = filteredLength > 1 ? {
76
+ id: 'form.upload-url.error.url.invalids',
77
+ defaultMessage: '{number} URLs are invalids'
78
+ } : {
79
+ id: 'form.upload-url.error.url.invalid',
80
+ defaultMessage: 'One URL is invalid'
81
+ };
61
82
  return this.createError({
62
83
  path: this.path,
63
- message: getTrad.getTrad(errorMessage),
64
- params: {
65
- number: filtered.length
84
+ message: {
85
+ ...errorMessage,
86
+ id: getTrad.getTrad(errorMessage.id),
87
+ values: {
88
+ number: filteredLength
89
+ }
66
90
  }
67
91
  });
68
92
  }
@@ -1 +1 @@
1
- {"version":3,"file":"urlYupSchema.js","sources":["../../../admin/src/utils/urlYupSchema.ts"],"sourcesContent":["import { translatedErrors as errorsTrads } from '@strapi/admin/strapi-admin';\nimport * as yup from 'yup';\n\nimport { getTrad } from './getTrad';\n\nexport const urlSchema = yup.object().shape({\n urls: yup.string().test({\n name: 'isUrlValid',\n // eslint-disable-next-line no-template-curly-in-string\n message: '${path}',\n test(values = '') {\n const urls = values.split(/\\r?\\n/);\n\n if (urls.length === 0) {\n return this.createError({\n path: this.path,\n message: errorsTrads.min.id,\n });\n }\n\n if (urls.length > 20) {\n return this.createError({\n path: this.path,\n message: errorsTrads.max.id,\n });\n }\n\n const filtered = urls.filter((val) => {\n try {\n // eslint-disable-next-line no-new\n new URL(val);\n\n return false;\n } catch (err) {\n // invalid url\n return true;\n }\n });\n\n const filteredLength = filtered.length;\n\n if (filteredLength === 0) {\n return true;\n }\n\n const errorMessage =\n filteredLength > 1\n ? 'form.upload-url.error.url.invalids'\n : 'form.upload-url.error.url.invalid';\n\n return this.createError({\n path: this.path,\n message: getTrad(errorMessage),\n params: { number: filtered.length },\n });\n },\n }),\n});\n"],"names":["urlSchema","yup","object","shape","urls","string","test","name","message","values","split","length","createError","path","errorsTrads","min","id","max","filtered","filter","val","URL","err","filteredLength","errorMessage","getTrad","params","number"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;MAKaA,SAAAA,GAAYC,cAAAA,CAAIC,MAAM,EAAA,CAAGC,KAAK,CAAC;AAC1CC,IAAAA,IAAAA,EAAMH,cAAAA,CAAII,MAAM,EAAA,CAAGC,IAAI,CAAC;QACtBC,IAAAA,EAAM,YAAA;;QAENC,OAAAA,EAAS,SAAA;AACTF,QAAAA,IAAAA,CAAAA,CAAKG,SAAS,EAAE,EAAA;YACd,MAAML,IAAAA,GAAOK,MAAAA,CAAOC,KAAK,CAAC,OAAA,CAAA;YAE1B,IAAIN,IAAAA,CAAKO,MAAM,KAAK,CAAA,EAAG;gBACrB,OAAO,IAAI,CAACC,WAAW,CAAC;oBACtBC,IAAAA,EAAM,IAAI,CAACA,IAAI;oBACfL,OAAAA,EAASM,4BAAAA,CAAYC,GAAG,CAACC;AAC3B,iBAAA,CAAA;AACF,YAAA;YAEA,IAAIZ,IAAAA,CAAKO,MAAM,GAAG,EAAA,EAAI;gBACpB,OAAO,IAAI,CAACC,WAAW,CAAC;oBACtBC,IAAAA,EAAM,IAAI,CAACA,IAAI;oBACfL,OAAAA,EAASM,4BAAAA,CAAYG,GAAG,CAACD;AAC3B,iBAAA,CAAA;AACF,YAAA;AAEA,YAAA,MAAME,QAAAA,GAAWd,IAAAA,CAAKe,MAAM,CAAC,CAACC,GAAAA,GAAAA;gBAC5B,IAAI;;AAEF,oBAAA,IAAIC,GAAAA,CAAID,GAAAA,CAAAA;oBAER,OAAO,KAAA;AACT,gBAAA,CAAA,CAAE,OAAOE,GAAAA,EAAK;;oBAEZ,OAAO,IAAA;AACT,gBAAA;AACF,YAAA,CAAA,CAAA;YAEA,MAAMC,cAAAA,GAAiBL,SAASP,MAAM;AAEtC,YAAA,IAAIY,mBAAmB,CAAA,EAAG;gBACxB,OAAO,IAAA;AACT,YAAA;YAEA,MAAMC,YAAAA,GACJD,cAAAA,GAAiB,CAAA,GACb,oCAAA,GACA,mCAAA;YAEN,OAAO,IAAI,CAACX,WAAW,CAAC;gBACtBC,IAAAA,EAAM,IAAI,CAACA,IAAI;AACfL,gBAAAA,OAAAA,EAASiB,eAAAA,CAAQD,YAAAA,CAAAA;gBACjBE,MAAAA,EAAQ;AAAEC,oBAAAA,MAAAA,EAAQT,SAASP;AAAO;AACpC,aAAA,CAAA;AACF,QAAA;AACF,KAAA;AACF,CAAA;;;;"}
1
+ {"version":3,"file":"urlYupSchema.js","sources":["../../../admin/src/utils/urlYupSchema.ts"],"sourcesContent":["import { translatedErrors as errorsTrads } from '@strapi/admin/strapi-admin';\nimport * as yup from 'yup';\n\nimport { getTrad } from './getTrad';\n\nconst MAX_URLS = 20;\n\nexport const urlSchema = yup.object().shape({\n urls: yup.string().test({\n name: 'isUrlValid',\n // eslint-disable-next-line no-template-curly-in-string\n message: '${path}',\n test(values = '') {\n const urls = values.split(/\\r?\\n/);\n\n /**\n * Messages are message descriptors rather than bare ids because these translations\n * interpolate values (`{min}`, `{max}`, `{number}`). Without `values`, react-intl\n * fails to format them and renders the raw placeholder. See strapi/strapi#19030.\n */\n if (urls.length === 0) {\n return this.createError({\n path: this.path,\n message: { ...errorsTrads.min, values: { min: 1 } },\n });\n }\n\n if (urls.length > MAX_URLS) {\n return this.createError({\n path: this.path,\n message: { ...errorsTrads.max, values: { max: MAX_URLS } },\n });\n }\n\n const filtered = urls.filter((val) => {\n try {\n // eslint-disable-next-line no-new\n new URL(val);\n\n return false;\n } catch {\n // invalid url\n return true;\n }\n });\n\n const filteredLength = filtered.length;\n\n if (filteredLength === 0) {\n return true;\n }\n\n const errorMessage =\n filteredLength > 1\n ? {\n id: 'form.upload-url.error.url.invalids',\n defaultMessage: '{number} URLs are invalids',\n }\n : { id: 'form.upload-url.error.url.invalid', defaultMessage: 'One URL is invalid' };\n\n return this.createError({\n path: this.path,\n message: {\n ...errorMessage,\n id: getTrad(errorMessage.id),\n values: { number: filteredLength },\n },\n });\n },\n }),\n});\n"],"names":["MAX_URLS","urlSchema","yup","object","shape","urls","string","test","name","message","values","split","length","createError","path","errorsTrads","min","max","filtered","filter","val","URL","filteredLength","errorMessage","id","defaultMessage","getTrad","number"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,MAAMA,QAAAA,GAAW,EAAA;MAEJC,SAAAA,GAAYC,cAAAA,CAAIC,MAAM,EAAA,CAAGC,KAAK,CAAC;AAC1CC,IAAAA,IAAAA,EAAMH,cAAAA,CAAII,MAAM,EAAA,CAAGC,IAAI,CAAC;QACtBC,IAAAA,EAAM,YAAA;;QAENC,OAAAA,EAAS,SAAA;AACTF,QAAAA,IAAAA,CAAAA,CAAKG,SAAS,EAAE,EAAA;YACd,MAAML,IAAAA,GAAOK,MAAAA,CAAOC,KAAK,CAAC,OAAA,CAAA;AAE1B;;;;AAIC,UACD,IAAIN,IAAAA,CAAKO,MAAM,KAAK,CAAA,EAAG;gBACrB,OAAO,IAAI,CAACC,WAAW,CAAC;oBACtBC,IAAAA,EAAM,IAAI,CAACA,IAAI;oBACfL,OAAAA,EAAS;AAAE,wBAAA,GAAGM,6BAAYC,GAAG;wBAAEN,MAAAA,EAAQ;4BAAEM,GAAAA,EAAK;AAAE;AAAE;AACpD,iBAAA,CAAA;AACF,YAAA;YAEA,IAAIX,IAAAA,CAAKO,MAAM,GAAGZ,QAAAA,EAAU;gBAC1B,OAAO,IAAI,CAACa,WAAW,CAAC;oBACtBC,IAAAA,EAAM,IAAI,CAACA,IAAI;oBACfL,OAAAA,EAAS;AAAE,wBAAA,GAAGM,6BAAYE,GAAG;wBAAEP,MAAAA,EAAQ;4BAAEO,GAAAA,EAAKjB;AAAS;AAAE;AAC3D,iBAAA,CAAA;AACF,YAAA;AAEA,YAAA,MAAMkB,QAAAA,GAAWb,IAAAA,CAAKc,MAAM,CAAC,CAACC,GAAAA,GAAAA;gBAC5B,IAAI;;AAEF,oBAAA,IAAIC,GAAAA,CAAID,GAAAA,CAAAA;oBAER,OAAO,KAAA;AACT,gBAAA,CAAA,CAAE,OAAM;;oBAEN,OAAO,IAAA;AACT,gBAAA;AACF,YAAA,CAAA,CAAA;YAEA,MAAME,cAAAA,GAAiBJ,SAASN,MAAM;AAEtC,YAAA,IAAIU,mBAAmB,CAAA,EAAG;gBACxB,OAAO,IAAA;AACT,YAAA;YAEA,MAAMC,YAAAA,GACJD,iBAAiB,CAAA,GACb;gBACEE,EAAAA,EAAI,oCAAA;gBACJC,cAAAA,EAAgB;aAClB,GACA;gBAAED,EAAAA,EAAI,mCAAA;gBAAqCC,cAAAA,EAAgB;AAAqB,aAAA;YAEtF,OAAO,IAAI,CAACZ,WAAW,CAAC;gBACtBC,IAAAA,EAAM,IAAI,CAACA,IAAI;gBACfL,OAAAA,EAAS;AACP,oBAAA,GAAGc,YAAY;oBACfC,EAAAA,EAAIE,eAAAA,CAAQH,aAAaC,EAAE,CAAA;oBAC3Bd,MAAAA,EAAQ;wBAAEiB,MAAAA,EAAQL;AAAe;AACnC;AACF,aAAA,CAAA;AACF,QAAA;AACF,KAAA;AACF,CAAA;;;;"}
@@ -2,6 +2,7 @@ import { translatedErrors } from '@strapi/admin/strapi-admin';
2
2
  import * as yup from 'yup';
3
3
  import { getTrad } from './getTrad.mjs';
4
4
 
5
+ const MAX_URLS = 20;
5
6
  const urlSchema = yup.object().shape({
6
7
  urls: yup.string().test({
7
8
  name: 'isUrlValid',
@@ -9,16 +10,30 @@ const urlSchema = yup.object().shape({
9
10
  message: '${path}',
10
11
  test (values = '') {
11
12
  const urls = values.split(/\r?\n/);
12
- if (urls.length === 0) {
13
+ /**
14
+ * Messages are message descriptors rather than bare ids because these translations
15
+ * interpolate values (`{min}`, `{max}`, `{number}`). Without `values`, react-intl
16
+ * fails to format them and renders the raw placeholder. See strapi/strapi#19030.
17
+ */ if (urls.length === 0) {
13
18
  return this.createError({
14
19
  path: this.path,
15
- message: translatedErrors.min.id
20
+ message: {
21
+ ...translatedErrors.min,
22
+ values: {
23
+ min: 1
24
+ }
25
+ }
16
26
  });
17
27
  }
18
- if (urls.length > 20) {
28
+ if (urls.length > MAX_URLS) {
19
29
  return this.createError({
20
30
  path: this.path,
21
- message: translatedErrors.max.id
31
+ message: {
32
+ ...translatedErrors.max,
33
+ values: {
34
+ max: MAX_URLS
35
+ }
36
+ }
22
37
  });
23
38
  }
24
39
  const filtered = urls.filter((val)=>{
@@ -26,7 +41,7 @@ const urlSchema = yup.object().shape({
26
41
  // eslint-disable-next-line no-new
27
42
  new URL(val);
28
43
  return false;
29
- } catch (err) {
44
+ } catch {
30
45
  // invalid url
31
46
  return true;
32
47
  }
@@ -35,12 +50,21 @@ const urlSchema = yup.object().shape({
35
50
  if (filteredLength === 0) {
36
51
  return true;
37
52
  }
38
- const errorMessage = filteredLength > 1 ? 'form.upload-url.error.url.invalids' : 'form.upload-url.error.url.invalid';
53
+ const errorMessage = filteredLength > 1 ? {
54
+ id: 'form.upload-url.error.url.invalids',
55
+ defaultMessage: '{number} URLs are invalids'
56
+ } : {
57
+ id: 'form.upload-url.error.url.invalid',
58
+ defaultMessage: 'One URL is invalid'
59
+ };
39
60
  return this.createError({
40
61
  path: this.path,
41
- message: getTrad(errorMessage),
42
- params: {
43
- number: filtered.length
62
+ message: {
63
+ ...errorMessage,
64
+ id: getTrad(errorMessage.id),
65
+ values: {
66
+ number: filteredLength
67
+ }
44
68
  }
45
69
  });
46
70
  }