@strapi/upload 5.51.0 → 5.51.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (346) hide show
  1. package/dist/admin/components/AssetCard/VideoPreview.js +1 -1
  2. package/dist/admin/components/AssetCard/VideoPreview.js.map +1 -1
  3. package/dist/admin/components/AssetCard/VideoPreview.mjs +1 -1
  4. package/dist/admin/components/AssetCard/VideoPreview.mjs.map +1 -1
  5. package/dist/admin/components/TableList/TableList.js +1 -1
  6. package/dist/admin/components/TableList/TableList.js.map +1 -1
  7. package/dist/admin/components/TableList/TableList.mjs +1 -1
  8. package/dist/admin/components/TableList/TableList.mjs.map +1 -1
  9. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js +21 -4
  10. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js.map +1 -1
  11. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.mjs +21 -4
  12. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.mjs.map +1 -1
  13. package/dist/admin/future/components/Drawer.js +3 -1
  14. package/dist/admin/future/components/Drawer.js.map +1 -1
  15. package/dist/admin/future/components/Drawer.mjs +3 -1
  16. package/dist/admin/future/components/Drawer.mjs.map +1 -1
  17. package/dist/admin/future/components/UploadProgressDialog.js +200 -27
  18. package/dist/admin/future/components/UploadProgressDialog.js.map +1 -1
  19. package/dist/admin/future/components/UploadProgressDialog.mjs +203 -30
  20. package/dist/admin/future/components/UploadProgressDialog.mjs.map +1 -1
  21. package/dist/admin/future/hooks/useMediaLibraryPermissions.js +35 -0
  22. package/dist/admin/future/hooks/useMediaLibraryPermissions.js.map +1 -0
  23. package/dist/admin/future/hooks/useMediaLibraryPermissions.mjs +33 -0
  24. package/dist/admin/future/hooks/useMediaLibraryPermissions.mjs.map +1 -0
  25. package/dist/admin/future/pages/Assets/AssetsPage.js +344 -150
  26. package/dist/admin/future/pages/Assets/AssetsPage.js.map +1 -1
  27. package/dist/admin/future/pages/Assets/AssetsPage.mjs +343 -149
  28. package/dist/admin/future/pages/Assets/AssetsPage.mjs.map +1 -1
  29. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.js +75 -32
  30. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.js.map +1 -1
  31. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.mjs +75 -32
  32. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.mjs.map +1 -1
  33. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js +46 -19
  34. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js.map +1 -1
  35. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs +47 -20
  36. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs.map +1 -1
  37. package/dist/admin/future/pages/Assets/components/AssetsGrid.js +161 -19
  38. package/dist/admin/future/pages/Assets/components/AssetsGrid.js.map +1 -1
  39. package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs +162 -20
  40. package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs.map +1 -1
  41. package/dist/admin/future/pages/Assets/components/AssetsSearchInput.js +100 -0
  42. package/dist/admin/future/pages/Assets/components/AssetsSearchInput.js.map +1 -0
  43. package/dist/admin/future/pages/Assets/components/AssetsSearchInput.mjs +98 -0
  44. package/dist/admin/future/pages/Assets/components/AssetsSearchInput.mjs.map +1 -0
  45. package/dist/admin/future/pages/Assets/components/AssetsTable.js +218 -37
  46. package/dist/admin/future/pages/Assets/components/AssetsTable.js.map +1 -1
  47. package/dist/admin/future/pages/Assets/components/AssetsTable.mjs +219 -38
  48. package/dist/admin/future/pages/Assets/components/AssetsTable.mjs.map +1 -1
  49. package/dist/admin/future/pages/Assets/components/BulkActionsBar.js +370 -0
  50. package/dist/admin/future/pages/Assets/components/BulkActionsBar.js.map +1 -0
  51. package/dist/admin/future/pages/Assets/components/BulkActionsBar.mjs +368 -0
  52. package/dist/admin/future/pages/Assets/components/BulkActionsBar.mjs.map +1 -0
  53. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.js +209 -0
  54. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.js.map +1 -0
  55. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.mjs +207 -0
  56. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.mjs.map +1 -0
  57. package/dist/admin/future/pages/Assets/components/DateRangeCalendar.js +193 -0
  58. package/dist/admin/future/pages/Assets/components/DateRangeCalendar.js.map +1 -0
  59. package/dist/admin/future/pages/Assets/components/DateRangeCalendar.mjs +191 -0
  60. package/dist/admin/future/pages/Assets/components/DateRangeCalendar.mjs.map +1 -0
  61. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.js +129 -37
  62. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.js.map +1 -1
  63. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.mjs +131 -39
  64. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.mjs.map +1 -1
  65. package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.js +120 -13
  66. package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.js.map +1 -1
  67. package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.mjs +120 -13
  68. package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.mjs.map +1 -1
  69. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.js +71 -0
  70. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.js.map +1 -0
  71. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.mjs +69 -0
  72. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.mjs.map +1 -0
  73. package/dist/admin/future/pages/Assets/components/Dnd/computeValidDropTargets.js +34 -0
  74. package/dist/admin/future/pages/Assets/components/Dnd/computeValidDropTargets.js.map +1 -0
  75. package/dist/admin/future/pages/Assets/components/Dnd/computeValidDropTargets.mjs +32 -0
  76. package/dist/admin/future/pages/Assets/components/Dnd/computeValidDropTargets.mjs.map +1 -0
  77. package/dist/admin/future/pages/Assets/components/Dnd/dndIds.js +15 -0
  78. package/dist/admin/future/pages/Assets/components/Dnd/dndIds.js.map +1 -1
  79. package/dist/admin/future/pages/Assets/components/Dnd/dndIds.mjs +13 -1
  80. package/dist/admin/future/pages/Assets/components/Dnd/dndIds.mjs.map +1 -1
  81. package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.js +19 -25
  82. package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.js.map +1 -1
  83. package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.mjs +19 -25
  84. package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.mjs.map +1 -1
  85. package/dist/admin/future/pages/Assets/components/Dnd/useFolderTreeDroppable.js +35 -0
  86. package/dist/admin/future/pages/Assets/components/Dnd/useFolderTreeDroppable.js.map +1 -0
  87. package/dist/admin/future/pages/Assets/components/Dnd/useFolderTreeDroppable.mjs +33 -0
  88. package/dist/admin/future/pages/Assets/components/Dnd/useFolderTreeDroppable.mjs.map +1 -0
  89. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.js +13 -3
  90. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.js.map +1 -1
  91. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.mjs +13 -3
  92. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.mjs.map +1 -1
  93. package/dist/admin/future/pages/Assets/components/EmptyState.js +62 -3
  94. package/dist/admin/future/pages/Assets/components/EmptyState.js.map +1 -1
  95. package/dist/admin/future/pages/Assets/components/EmptyState.mjs +62 -4
  96. package/dist/admin/future/pages/Assets/components/EmptyState.mjs.map +1 -1
  97. package/dist/admin/future/pages/Assets/components/FilterBadges.js +408 -0
  98. package/dist/admin/future/pages/Assets/components/FilterBadges.js.map +1 -0
  99. package/dist/admin/future/pages/Assets/components/FilterBadges.mjs +406 -0
  100. package/dist/admin/future/pages/Assets/components/FilterBadges.mjs.map +1 -0
  101. package/dist/admin/future/pages/Assets/components/FilterMenu.js +273 -0
  102. package/dist/admin/future/pages/Assets/components/FilterMenu.js.map +1 -0
  103. package/dist/admin/future/pages/Assets/components/FilterMenu.mjs +267 -0
  104. package/dist/admin/future/pages/Assets/components/FilterMenu.mjs.map +1 -0
  105. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.js +195 -40
  106. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.js.map +1 -1
  107. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.mjs +198 -43
  108. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.mjs.map +1 -1
  109. package/dist/admin/future/pages/Assets/components/FolderTree/filterFolderTree.js +33 -0
  110. package/dist/admin/future/pages/Assets/components/FolderTree/filterFolderTree.js.map +1 -0
  111. package/dist/admin/future/pages/Assets/components/FolderTree/filterFolderTree.mjs +31 -0
  112. package/dist/admin/future/pages/Assets/components/FolderTree/filterFolderTree.mjs.map +1 -0
  113. package/dist/admin/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.js +22 -0
  114. package/dist/admin/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.js.map +1 -0
  115. package/dist/admin/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.mjs +19 -0
  116. package/dist/admin/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.mjs.map +1 -0
  117. package/dist/admin/future/pages/Assets/components/SortMenu.js +154 -0
  118. package/dist/admin/future/pages/Assets/components/SortMenu.js.map +1 -0
  119. package/dist/admin/future/pages/Assets/components/SortMenu.mjs +152 -0
  120. package/dist/admin/future/pages/Assets/components/SortMenu.mjs.map +1 -0
  121. package/dist/admin/future/pages/Assets/hooks/useAssetSearch.js +40 -0
  122. package/dist/admin/future/pages/Assets/hooks/useAssetSearch.js.map +1 -0
  123. package/dist/admin/future/pages/Assets/hooks/useAssetSearch.mjs +38 -0
  124. package/dist/admin/future/pages/Assets/hooks/useAssetSearch.mjs.map +1 -0
  125. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.js +75 -0
  126. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.js.map +1 -0
  127. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.mjs +71 -0
  128. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.mjs.map +1 -0
  129. package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.js +33 -12
  130. package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.js.map +1 -1
  131. package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.mjs +33 -12
  132. package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.mjs.map +1 -1
  133. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.js +40 -4
  134. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.js.map +1 -1
  135. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.mjs +40 -4
  136. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.mjs.map +1 -1
  137. package/dist/admin/future/pages/Assets/hooks/useListFilters.js +168 -0
  138. package/dist/admin/future/pages/Assets/hooks/useListFilters.js.map +1 -0
  139. package/dist/admin/future/pages/Assets/hooks/useListFilters.mjs +162 -0
  140. package/dist/admin/future/pages/Assets/hooks/useListFilters.mjs.map +1 -0
  141. package/dist/admin/future/pages/Assets/hooks/useListSort.js +124 -0
  142. package/dist/admin/future/pages/Assets/hooks/useListSort.js.map +1 -0
  143. package/dist/admin/future/pages/Assets/hooks/useListSort.mjs +120 -0
  144. package/dist/admin/future/pages/Assets/hooks/useListSort.mjs.map +1 -0
  145. package/dist/admin/future/pages/Assets/utils/buildAssetFilters.js +201 -0
  146. package/dist/admin/future/pages/Assets/utils/buildAssetFilters.js.map +1 -0
  147. package/dist/admin/future/pages/Assets/utils/buildAssetFilters.mjs +198 -0
  148. package/dist/admin/future/pages/Assets/utils/buildAssetFilters.mjs.map +1 -0
  149. package/dist/admin/future/pages/Assets/utils/listQueryKey.js +29 -0
  150. package/dist/admin/future/pages/Assets/utils/listQueryKey.js.map +1 -0
  151. package/dist/admin/future/pages/Assets/utils/listQueryKey.mjs +27 -0
  152. package/dist/admin/future/pages/Assets/utils/listQueryKey.mjs.map +1 -0
  153. package/dist/admin/future/pages/Assets/utils/mergeMixedList.js +84 -0
  154. package/dist/admin/future/pages/Assets/utils/mergeMixedList.js.map +1 -0
  155. package/dist/admin/future/pages/Assets/utils/mergeMixedList.mjs +81 -0
  156. package/dist/admin/future/pages/Assets/utils/mergeMixedList.mjs.map +1 -0
  157. package/dist/admin/future/pages/Assets/utils/selection.js +104 -0
  158. package/dist/admin/future/pages/Assets/utils/selection.js.map +1 -0
  159. package/dist/admin/future/pages/Assets/utils/selection.mjs +94 -0
  160. package/dist/admin/future/pages/Assets/utils/selection.mjs.map +1 -0
  161. package/dist/admin/future/services/api.js +163 -28
  162. package/dist/admin/future/services/api.js.map +1 -1
  163. package/dist/admin/future/services/api.mjs +163 -30
  164. package/dist/admin/future/services/api.mjs.map +1 -1
  165. package/dist/admin/future/services/assets.js +62 -18
  166. package/dist/admin/future/services/assets.js.map +1 -1
  167. package/dist/admin/future/services/assets.mjs +62 -19
  168. package/dist/admin/future/services/assets.mjs.map +1 -1
  169. package/dist/admin/future/services/folders.js +31 -19
  170. package/dist/admin/future/services/folders.js.map +1 -1
  171. package/dist/admin/future/services/folders.mjs +31 -19
  172. package/dist/admin/future/services/folders.mjs.map +1 -1
  173. package/dist/admin/future/services/settings.js +10 -3
  174. package/dist/admin/future/services/settings.js.map +1 -1
  175. package/dist/admin/future/services/settings.mjs +10 -3
  176. package/dist/admin/future/services/settings.mjs.map +1 -1
  177. package/dist/admin/future/store/uploadProgress.js +109 -2
  178. package/dist/admin/future/store/uploadProgress.js.map +1 -1
  179. package/dist/admin/future/store/uploadProgress.mjs +105 -3
  180. package/dist/admin/future/store/uploadProgress.mjs.map +1 -1
  181. package/dist/admin/future/utils/buildDragSetFromSelection.js +33 -0
  182. package/dist/admin/future/utils/buildDragSetFromSelection.js.map +1 -0
  183. package/dist/admin/future/utils/buildDragSetFromSelection.mjs +31 -0
  184. package/dist/admin/future/utils/buildDragSetFromSelection.mjs.map +1 -0
  185. package/dist/admin/future/utils/canDropItemOnFolder.js +4 -0
  186. package/dist/admin/future/utils/canDropItemOnFolder.js.map +1 -1
  187. package/dist/admin/future/utils/canDropItemOnFolder.mjs +4 -0
  188. package/dist/admin/future/utils/canDropItemOnFolder.mjs.map +1 -1
  189. package/dist/admin/future/utils/flattenFolderStructure.js +28 -0
  190. package/dist/admin/future/utils/flattenFolderStructure.js.map +1 -0
  191. package/dist/admin/future/utils/flattenFolderStructure.mjs +26 -0
  192. package/dist/admin/future/utils/flattenFolderStructure.mjs.map +1 -0
  193. package/dist/admin/future/utils/formatMoveSuccessMessage.js +19 -0
  194. package/dist/admin/future/utils/formatMoveSuccessMessage.js.map +1 -0
  195. package/dist/admin/future/utils/formatMoveSuccessMessage.mjs +17 -0
  196. package/dist/admin/future/utils/formatMoveSuccessMessage.mjs.map +1 -0
  197. package/dist/admin/future/utils/getFolderLabel.js +31 -0
  198. package/dist/admin/future/utils/getFolderLabel.js.map +1 -0
  199. package/dist/admin/future/utils/getFolderLabel.mjs +29 -0
  200. package/dist/admin/future/utils/getFolderLabel.mjs.map +1 -0
  201. package/dist/admin/future/utils/searchQueryParam.js +11 -0
  202. package/dist/admin/future/utils/searchQueryParam.js.map +1 -0
  203. package/dist/admin/future/utils/searchQueryParam.mjs +9 -0
  204. package/dist/admin/future/utils/searchQueryParam.mjs.map +1 -0
  205. package/dist/admin/hooks/useSelectionState.js +2 -4
  206. package/dist/admin/hooks/useSelectionState.js.map +1 -1
  207. package/dist/admin/hooks/useSelectionState.mjs +2 -4
  208. package/dist/admin/hooks/useSelectionState.mjs.map +1 -1
  209. package/dist/admin/shared/constants.js +43 -0
  210. package/dist/admin/shared/constants.js.map +1 -0
  211. package/dist/admin/shared/constants.mjs +38 -0
  212. package/dist/admin/shared/constants.mjs.map +1 -0
  213. package/dist/admin/src/future/hooks/useMediaLibraryPermissions.d.ts +21 -0
  214. package/dist/admin/src/future/pages/Assets/components/AssetDetails/AssetCropEditor.d.ts +7 -1
  215. package/dist/admin/src/future/pages/Assets/components/AssetsSearchInput.d.ts +5 -0
  216. package/dist/admin/src/future/pages/Assets/components/AssetsTable.d.ts +7 -1
  217. package/dist/admin/src/future/pages/Assets/components/BulkActionsBar.d.ts +14 -0
  218. package/dist/admin/src/future/pages/Assets/components/BulkMoveDialog.d.ts +13 -0
  219. package/dist/admin/src/future/pages/Assets/components/DateRangeCalendar.d.ts +8 -0
  220. package/dist/admin/src/future/pages/Assets/components/Dnd/AssetsDndProvider.d.ts +2 -0
  221. package/dist/admin/src/future/pages/Assets/components/Dnd/DragOverlayChip.d.ts +2 -2
  222. package/dist/admin/src/future/pages/Assets/components/Dnd/buildDragSet.d.ts +17 -0
  223. package/dist/admin/src/future/pages/Assets/components/Dnd/computeValidDropTargets.d.ts +7 -0
  224. package/dist/admin/src/future/pages/Assets/components/Dnd/dndIds.d.ts +3 -0
  225. package/dist/admin/src/future/pages/Assets/components/Dnd/useAssetDnd.d.ts +3 -1
  226. package/dist/admin/src/future/pages/Assets/components/Dnd/useFolderTreeDroppable.d.ts +19 -0
  227. package/dist/admin/src/future/pages/Assets/components/DropZone/UploadDropZoneContext.d.ts +8 -1
  228. package/dist/admin/src/future/pages/Assets/components/EmptyState.d.ts +18 -1
  229. package/dist/admin/src/future/pages/Assets/components/FilterBadges.d.ts +6 -0
  230. package/dist/admin/src/future/pages/Assets/components/FilterMenu.d.ts +22 -0
  231. package/dist/admin/src/future/pages/Assets/components/FolderTree/FolderTree.d.ts +13 -4
  232. package/dist/admin/src/future/pages/Assets/components/FolderTree/filterFolderTree.d.ts +16 -0
  233. package/dist/admin/src/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.d.ts +6 -0
  234. package/dist/admin/src/future/pages/Assets/components/SortMenu.d.ts +23 -0
  235. package/dist/admin/src/future/pages/Assets/hooks/useAssetSearch.d.ts +12 -0
  236. package/dist/admin/src/future/pages/Assets/hooks/useAssetSelection.d.ts +46 -0
  237. package/dist/admin/src/future/pages/Assets/hooks/useInfiniteAssets.d.ts +13 -3
  238. package/dist/admin/src/future/pages/Assets/hooks/useListFilters.d.ts +69 -0
  239. package/dist/admin/src/future/pages/Assets/hooks/useListSort.d.ts +47 -0
  240. package/dist/admin/src/future/pages/Assets/utils/buildAssetFilters.d.ts +46 -0
  241. package/dist/admin/src/future/pages/Assets/utils/listQueryKey.d.ts +29 -0
  242. package/dist/admin/src/future/pages/Assets/utils/mergeMixedList.d.ts +40 -0
  243. package/dist/admin/src/future/pages/Assets/utils/selection.d.ts +50 -0
  244. package/dist/admin/src/future/services/api.d.ts +53 -5
  245. package/dist/admin/src/future/services/assets.d.ts +13 -2
  246. package/dist/admin/src/future/services/folders.d.ts +7 -1
  247. package/dist/admin/src/future/services/settings.d.ts +2 -2
  248. package/dist/admin/src/future/store/uploadProgress.d.ts +83 -1
  249. package/dist/admin/src/future/types/dnd.d.ts +5 -0
  250. package/dist/admin/src/future/utils/buildDragSetFromSelection.d.ts +11 -0
  251. package/dist/admin/src/future/utils/canDropItemOnFolder.d.ts +1 -1
  252. package/dist/admin/src/future/utils/flattenFolderStructure.d.ts +18 -0
  253. package/dist/admin/src/future/utils/formatMoveSuccessMessage.d.ts +14 -0
  254. package/dist/admin/src/future/utils/getFolderLabel.d.ts +11 -0
  255. package/dist/admin/src/future/utils/searchQueryParam.d.ts +7 -0
  256. package/dist/admin/src/hooks/useAiAvailability.d.ts +1 -1
  257. package/dist/admin/src/hooks/useEditAsset.d.ts +4 -4
  258. package/dist/admin/src/hooks/useEditFolder.d.ts +4 -4
  259. package/dist/admin/src/hooks/useSettings.d.ts +1 -0
  260. package/dist/admin/src/hooks/useTracking.d.ts +1 -1
  261. package/dist/admin/src/hooks/useUpload.d.ts +1 -1
  262. package/dist/admin/translations/en.json.js +85 -2
  263. package/dist/admin/translations/en.json.js.map +1 -1
  264. package/dist/admin/translations/en.json.mjs +85 -2
  265. package/dist/admin/translations/en.json.mjs.map +1 -1
  266. package/dist/admin/utils/urlYupSchema.js +33 -9
  267. package/dist/admin/utils/urlYupSchema.js.map +1 -1
  268. package/dist/admin/utils/urlYupSchema.mjs +33 -9
  269. package/dist/admin/utils/urlYupSchema.mjs.map +1 -1
  270. package/dist/server/config.js +13 -5
  271. package/dist/server/config.js.map +1 -1
  272. package/dist/server/config.mjs +13 -5
  273. package/dist/server/config.mjs.map +1 -1
  274. package/dist/server/constants.js.map +1 -1
  275. package/dist/server/constants.mjs.map +1 -1
  276. package/dist/server/controllers/admin-file.js +30 -0
  277. package/dist/server/controllers/admin-file.js.map +1 -1
  278. package/dist/server/controllers/admin-file.mjs +30 -0
  279. package/dist/server/controllers/admin-file.mjs.map +1 -1
  280. package/dist/server/controllers/admin-settings.js +20 -2
  281. package/dist/server/controllers/admin-settings.js.map +1 -1
  282. package/dist/server/controllers/admin-settings.mjs +21 -3
  283. package/dist/server/controllers/admin-settings.mjs.map +1 -1
  284. package/dist/server/controllers/content-api.js +1 -2
  285. package/dist/server/controllers/content-api.js.map +1 -1
  286. package/dist/server/controllers/content-api.mjs +2 -2
  287. package/dist/server/controllers/content-api.mjs.map +1 -1
  288. package/dist/server/controllers/validation/admin/ai-metadata.js +12 -0
  289. package/dist/server/controllers/validation/admin/ai-metadata.js.map +1 -0
  290. package/dist/server/controllers/validation/admin/ai-metadata.mjs +10 -0
  291. package/dist/server/controllers/validation/admin/ai-metadata.mjs.map +1 -0
  292. package/dist/server/controllers/validation/admin/settings.js +4 -1
  293. package/dist/server/controllers/validation/admin/settings.js.map +1 -1
  294. package/dist/server/controllers/validation/admin/settings.mjs +1 -1
  295. package/dist/server/controllers/validation/admin/settings.mjs.map +1 -1
  296. package/dist/server/routes/admin.js +18 -0
  297. package/dist/server/routes/admin.js.map +1 -1
  298. package/dist/server/routes/admin.mjs +18 -0
  299. package/dist/server/routes/admin.mjs.map +1 -1
  300. package/dist/server/services/ai-metadata.js +108 -11
  301. package/dist/server/services/ai-metadata.js.map +1 -1
  302. package/dist/server/services/ai-metadata.mjs +108 -11
  303. package/dist/server/services/ai-metadata.mjs.map +1 -1
  304. package/dist/server/services/file.js +86 -13
  305. package/dist/server/services/file.js.map +1 -1
  306. package/dist/server/services/file.mjs +87 -14
  307. package/dist/server/services/file.mjs.map +1 -1
  308. package/dist/server/services/image-manipulation.js +4 -4
  309. package/dist/server/services/image-manipulation.js.map +1 -1
  310. package/dist/server/services/image-manipulation.mjs +4 -4
  311. package/dist/server/services/image-manipulation.mjs.map +1 -1
  312. package/dist/server/shared/constants.js +43 -0
  313. package/dist/server/shared/constants.js.map +1 -0
  314. package/dist/server/shared/constants.mjs +38 -0
  315. package/dist/server/shared/constants.mjs.map +1 -0
  316. package/dist/server/src/config.d.ts +2 -0
  317. package/dist/server/src/config.d.ts.map +1 -1
  318. package/dist/server/src/constants.d.ts +2 -1
  319. package/dist/server/src/constants.d.ts.map +1 -1
  320. package/dist/server/src/controllers/admin-file.d.ts +10 -0
  321. package/dist/server/src/controllers/admin-file.d.ts.map +1 -1
  322. package/dist/server/src/controllers/admin-settings.d.ts.map +1 -1
  323. package/dist/server/src/controllers/index.d.ts +1 -0
  324. package/dist/server/src/controllers/index.d.ts.map +1 -1
  325. package/dist/server/src/controllers/validation/admin/ai-metadata.d.ts +2 -0
  326. package/dist/server/src/controllers/validation/admin/ai-metadata.d.ts.map +1 -0
  327. package/dist/server/src/controllers/validation/admin/settings.d.ts +1 -1
  328. package/dist/server/src/controllers/validation/admin/settings.d.ts.map +1 -1
  329. package/dist/server/src/index.d.ts +7 -1
  330. package/dist/server/src/index.d.ts.map +1 -1
  331. package/dist/server/src/routes/admin.d.ts.map +1 -1
  332. package/dist/server/src/services/ai-metadata.d.ts +19 -0
  333. package/dist/server/src/services/ai-metadata.d.ts.map +1 -1
  334. package/dist/server/src/services/file.d.ts +12 -2
  335. package/dist/server/src/services/file.d.ts.map +1 -1
  336. package/dist/server/src/services/index.d.ts +4 -1
  337. package/dist/server/src/services/index.d.ts.map +1 -1
  338. package/dist/server/src/types.d.ts +3 -0
  339. package/dist/server/src/types.d.ts.map +1 -1
  340. package/dist/shared/constants.d.ts +35 -0
  341. package/dist/shared/constants.d.ts.map +1 -0
  342. package/dist/shared/contracts/files.d.ts +25 -0
  343. package/dist/shared/contracts/files.d.ts.map +1 -1
  344. package/dist/shared/contracts/folders.d.ts +1 -1
  345. package/dist/shared/contracts/settings.d.ts +7 -0
  346. package/package.json +8 -8
@@ -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,6 +90,13 @@ 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",
@@ -137,6 +144,11 @@ var en = {
137
144
  "header.content.assets-empty": "No assets",
138
145
  "header.content.assets": "{numberFolders, plural, one {1 folder} other {# folders}} - {numberAssets, plural, one {1 asset} other {# assets}}",
139
146
  "header.content.item-count": "{count, plural, =1 {# item} other {# items}}",
147
+ "header.search.placeholder": "Search",
148
+ "header.search-results": "Search results for \"{query}\"",
149
+ "header.search-results.count": "{numberFolders, plural, one {1 folder} other {# folders}} - {numberAssets, plural, one {1 asset} other {# assets}}",
150
+ "header.search-results.count.assets": "{numberAssets, plural, =0 {0 assets} one {1 asset} other {# assets}}",
151
+ "header.search-results.count.folders": "{numberFolders, plural, one {1 folder} other {# folders}}",
140
152
  "import-files": "File upload",
141
153
  "import-from-url": "File upload from URL",
142
154
  "input.button.label": "Browse files",
@@ -162,6 +174,49 @@ var en = {
162
174
  "list.empty.title": "No assets yet",
163
175
  "list.empty.description": "Get started by uploading assets or creating a folder.",
164
176
  "list.empty.add-assets": "Add assets",
177
+ "list.filters.trigger": "Filter",
178
+ "list.filters.field.type": "Type",
179
+ "list.filters.field.created": "Creation date",
180
+ "list.filters.field.updated": "Last modified",
181
+ "list.filters.type.folder": "Folder",
182
+ "list.filters.type.picture": "Picture",
183
+ "list.filters.type.audio": "Audio",
184
+ "list.filters.type.video": "Video",
185
+ "list.filters.type.document": "Document",
186
+ "list.filters.preset.1day": "1 day ago",
187
+ "list.filters.preset.3days": "3 days ago",
188
+ "list.filters.preset.1week": "1 week ago",
189
+ "list.filters.preset.1month": "1 month ago",
190
+ "list.filters.preset.3months": "3 months ago",
191
+ "list.filters.preset.6months": "6 months ago",
192
+ "list.filters.preset.1year": "1 year ago",
193
+ "list.filters.select-date-range": "Select date range",
194
+ "list.filters.condition.is": "is",
195
+ "list.filters.condition.is-not": "is not",
196
+ "list.filters.condition.is-exactly": "is exactly",
197
+ "list.filters.condition.within-last": "within the last",
198
+ "list.filters.condition.not-within-last": "not within the last",
199
+ "list.filters.remove": "Remove {filter} filter",
200
+ "list.filters.empty": "No items matched current filters",
201
+ "list.filters.clear": "Clear filters",
202
+ "list.filters.calendar.previous-month": "Previous month",
203
+ "list.filters.calendar.next-month": "Next month",
204
+ "list.filters.calendar.label": "Select date range",
205
+ "list.sort.trigger": "Sort: {active}",
206
+ "list.sort.section": "Sort",
207
+ "list.sort.oldest-uploads": "Oldest uploads",
208
+ "list.sort.most-recent-updates": "Most recent updates",
209
+ "list.sort.name-asc": "A to Z",
210
+ "list.sort.name-desc": "Z to A",
211
+ "list.sort.size-asc": "File size ascending",
212
+ "list.sort.size-desc": "File size descending",
213
+ "list.sort.folders": "Folders",
214
+ "list.sort.folders-on-top": "On top",
215
+ "list.sort.folders-mixed": "Mixed with files",
216
+ "list.sort.active": "(active)",
217
+ "list.search.empty.title": "No results found",
218
+ "list.search.empty.description": "No assets or folders match \"{query}\". Try a different search.",
219
+ "list.search.empty.clear": "Clear search",
165
220
  "list.assets.loading-more": "Loading more assets...",
166
221
  "list.assets.loading-asset": "Loading the preview for the media: {path}",
167
222
  "list.assets.not-supported-content": "No preview available",
@@ -203,6 +258,8 @@ var en = {
203
258
  "dnd.announce.invalid-drop": "Cannot move item to this folder.",
204
259
  "dnd.announce.move-failure": "Move failed. {message}",
205
260
  "dnd.announce.cancel": "Drag cancelled.",
261
+ "dnd.overlay.folders": "{count, plural, one {# folder} other {# folders}}",
262
+ "dnd.overlay.files": "{count, plural, one {# file} other {# files}}",
206
263
  "modal.selected-list.sub-header-subtitle": "Drag & drop to reorder the assets in the field",
207
264
  "modal.upload-list.footer.button": "Upload {number, plural, one {# asset} other {# assets}} to the library",
208
265
  "modal.upload-list.sub-header-subtitle": "Manage the assets before adding them to the Media Library",
@@ -258,7 +315,30 @@ var en = {
258
315
  "list.table.header.creationDate": "Creation Date",
259
316
  "list.table.header.lastModified": "Last Modified",
260
317
  "list.table.header.sort": "Sort on {label}",
318
+ "list.table.header.select-all": "Select all",
319
+ "list.table.row.select": "Select {name}",
261
320
  "list.table.content.empty-label": "This field is empty",
321
+ "list.bulk-actions.label": "Bulk actions",
322
+ "list.bulk-actions.selected-count": "{count, plural, =1 {# item selected} other {# items selected}}",
323
+ "list.bulk-actions.clear": "Clear selection",
324
+ "list.bulk-actions.create-metadata": "Create metadata",
325
+ "list.bulk-actions.create-metadata.success": "{count, plural, =1 {Metadata generated for # asset} other {Metadata generated for # assets}}",
326
+ "list.bulk-actions.create-metadata.partial": "{successCount} generated, {skippedCount} skipped (unsupported file type), {errorCount} failed{folderCount, plural, =0 {} one {, # folder ignored} other {, # folders ignored}}",
327
+ "list.bulk-actions.create-metadata.error": "An error occurred while generating metadata.",
328
+ "list.bulk-actions.create-metadata.too-many": "Metadata can be generated for up to {max} assets at a time. Select fewer assets to continue.",
329
+ "list.bulk-actions.create-metadata.no-eligible": "Metadata can only be generated for images. None of the selected assets are supported.",
330
+ "list.bulk-actions.move": "Move",
331
+ "list.bulk-actions.move.title": "Move elements to",
332
+ "list.bulk-actions.move.location": "Location",
333
+ "list.bulk-actions.move.submit": "Move",
334
+ "list.bulk-actions.move.success": "{count, plural, =1 {# element has} other {# elements have}} been moved from {source} to {destination}",
335
+ "list.bulk-actions.move.error": "An error occurred while moving the items.",
336
+ "list.bulk-actions.delete": "Delete",
337
+ "list.bulk-actions.delete.confirm.title": "Delete {count, plural, =1 {# item} other {# items}}?",
338
+ "list.bulk-actions.delete.confirm.description.are-you-sure": "Are you sure you want to delete the selected items?",
339
+ "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.",
340
+ "list.bulk-actions.delete.success": "{count, plural, =1 {# item has been deleted} other {# items have been deleted}}",
341
+ "list.bulk-actions.delete.error": "An error occurred while deleting the items.",
262
342
  "tabs.title": "How do you want to upload your assets?",
263
343
  "window.confirm.close-modal.file": "Are you sure? Your changes will be lost.",
264
344
  "window.confirm.close-modal.files": "Are you sure? You have some files that have not been uploaded yet.",
@@ -284,8 +364,11 @@ var en = {
284
364
  "sidebar.tree.expand": "Expand {name}",
285
365
  "sidebar.tree.collapse": "Collapse {name}",
286
366
  "sidebar.tree.empty": "No folders yet",
367
+ "sidebar.tree.no-results": "No folders match \"{query}\"",
287
368
  "sidebar.tree.loading": "Loading folders...",
288
- "sidebar.tree.error": "Could not load folders."
369
+ "sidebar.tree.error": "Could not load folders.",
370
+ "sidebar.search.label": "Search folders",
371
+ "sidebar.search.placeholder": "Search folders"
289
372
  };
290
373
 
291
374
  module.exports = en;
@@ -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,6 +88,13 @@ 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",
@@ -135,6 +142,11 @@ var en = {
135
142
  "header.content.assets-empty": "No assets",
136
143
  "header.content.assets": "{numberFolders, plural, one {1 folder} other {# folders}} - {numberAssets, plural, one {1 asset} other {# assets}}",
137
144
  "header.content.item-count": "{count, plural, =1 {# item} other {# items}}",
145
+ "header.search.placeholder": "Search",
146
+ "header.search-results": "Search results for \"{query}\"",
147
+ "header.search-results.count": "{numberFolders, plural, one {1 folder} other {# folders}} - {numberAssets, plural, one {1 asset} other {# assets}}",
148
+ "header.search-results.count.assets": "{numberAssets, plural, =0 {0 assets} one {1 asset} other {# assets}}",
149
+ "header.search-results.count.folders": "{numberFolders, plural, one {1 folder} other {# folders}}",
138
150
  "import-files": "File upload",
139
151
  "import-from-url": "File upload from URL",
140
152
  "input.button.label": "Browse files",
@@ -160,6 +172,49 @@ var en = {
160
172
  "list.empty.title": "No assets yet",
161
173
  "list.empty.description": "Get started by uploading assets or creating a folder.",
162
174
  "list.empty.add-assets": "Add assets",
175
+ "list.filters.trigger": "Filter",
176
+ "list.filters.field.type": "Type",
177
+ "list.filters.field.created": "Creation date",
178
+ "list.filters.field.updated": "Last modified",
179
+ "list.filters.type.folder": "Folder",
180
+ "list.filters.type.picture": "Picture",
181
+ "list.filters.type.audio": "Audio",
182
+ "list.filters.type.video": "Video",
183
+ "list.filters.type.document": "Document",
184
+ "list.filters.preset.1day": "1 day ago",
185
+ "list.filters.preset.3days": "3 days ago",
186
+ "list.filters.preset.1week": "1 week ago",
187
+ "list.filters.preset.1month": "1 month ago",
188
+ "list.filters.preset.3months": "3 months ago",
189
+ "list.filters.preset.6months": "6 months ago",
190
+ "list.filters.preset.1year": "1 year ago",
191
+ "list.filters.select-date-range": "Select date range",
192
+ "list.filters.condition.is": "is",
193
+ "list.filters.condition.is-not": "is not",
194
+ "list.filters.condition.is-exactly": "is exactly",
195
+ "list.filters.condition.within-last": "within the last",
196
+ "list.filters.condition.not-within-last": "not within the last",
197
+ "list.filters.remove": "Remove {filter} filter",
198
+ "list.filters.empty": "No items matched current filters",
199
+ "list.filters.clear": "Clear filters",
200
+ "list.filters.calendar.previous-month": "Previous month",
201
+ "list.filters.calendar.next-month": "Next month",
202
+ "list.filters.calendar.label": "Select date range",
203
+ "list.sort.trigger": "Sort: {active}",
204
+ "list.sort.section": "Sort",
205
+ "list.sort.oldest-uploads": "Oldest uploads",
206
+ "list.sort.most-recent-updates": "Most recent updates",
207
+ "list.sort.name-asc": "A to Z",
208
+ "list.sort.name-desc": "Z to A",
209
+ "list.sort.size-asc": "File size ascending",
210
+ "list.sort.size-desc": "File size descending",
211
+ "list.sort.folders": "Folders",
212
+ "list.sort.folders-on-top": "On top",
213
+ "list.sort.folders-mixed": "Mixed with files",
214
+ "list.sort.active": "(active)",
215
+ "list.search.empty.title": "No results found",
216
+ "list.search.empty.description": "No assets or folders match \"{query}\". Try a different search.",
217
+ "list.search.empty.clear": "Clear search",
163
218
  "list.assets.loading-more": "Loading more assets...",
164
219
  "list.assets.loading-asset": "Loading the preview for the media: {path}",
165
220
  "list.assets.not-supported-content": "No preview available",
@@ -201,6 +256,8 @@ var en = {
201
256
  "dnd.announce.invalid-drop": "Cannot move item to this folder.",
202
257
  "dnd.announce.move-failure": "Move failed. {message}",
203
258
  "dnd.announce.cancel": "Drag cancelled.",
259
+ "dnd.overlay.folders": "{count, plural, one {# folder} other {# folders}}",
260
+ "dnd.overlay.files": "{count, plural, one {# file} other {# files}}",
204
261
  "modal.selected-list.sub-header-subtitle": "Drag & drop to reorder the assets in the field",
205
262
  "modal.upload-list.footer.button": "Upload {number, plural, one {# asset} other {# assets}} to the library",
206
263
  "modal.upload-list.sub-header-subtitle": "Manage the assets before adding them to the Media Library",
@@ -256,7 +313,30 @@ var en = {
256
313
  "list.table.header.creationDate": "Creation Date",
257
314
  "list.table.header.lastModified": "Last Modified",
258
315
  "list.table.header.sort": "Sort on {label}",
316
+ "list.table.header.select-all": "Select all",
317
+ "list.table.row.select": "Select {name}",
259
318
  "list.table.content.empty-label": "This field is empty",
319
+ "list.bulk-actions.label": "Bulk actions",
320
+ "list.bulk-actions.selected-count": "{count, plural, =1 {# item selected} other {# items selected}}",
321
+ "list.bulk-actions.clear": "Clear selection",
322
+ "list.bulk-actions.create-metadata": "Create metadata",
323
+ "list.bulk-actions.create-metadata.success": "{count, plural, =1 {Metadata generated for # asset} other {Metadata generated for # assets}}",
324
+ "list.bulk-actions.create-metadata.partial": "{successCount} generated, {skippedCount} skipped (unsupported file type), {errorCount} failed{folderCount, plural, =0 {} one {, # folder ignored} other {, # folders ignored}}",
325
+ "list.bulk-actions.create-metadata.error": "An error occurred while generating metadata.",
326
+ "list.bulk-actions.create-metadata.too-many": "Metadata can be generated for up to {max} assets at a time. Select fewer assets to continue.",
327
+ "list.bulk-actions.create-metadata.no-eligible": "Metadata can only be generated for images. None of the selected assets are supported.",
328
+ "list.bulk-actions.move": "Move",
329
+ "list.bulk-actions.move.title": "Move elements to",
330
+ "list.bulk-actions.move.location": "Location",
331
+ "list.bulk-actions.move.submit": "Move",
332
+ "list.bulk-actions.move.success": "{count, plural, =1 {# element has} other {# elements have}} been moved from {source} to {destination}",
333
+ "list.bulk-actions.move.error": "An error occurred while moving the items.",
334
+ "list.bulk-actions.delete": "Delete",
335
+ "list.bulk-actions.delete.confirm.title": "Delete {count, plural, =1 {# item} other {# items}}?",
336
+ "list.bulk-actions.delete.confirm.description.are-you-sure": "Are you sure you want to delete the selected items?",
337
+ "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.",
338
+ "list.bulk-actions.delete.success": "{count, plural, =1 {# item has been deleted} other {# items have been deleted}}",
339
+ "list.bulk-actions.delete.error": "An error occurred while deleting the items.",
260
340
  "tabs.title": "How do you want to upload your assets?",
261
341
  "window.confirm.close-modal.file": "Are you sure? Your changes will be lost.",
262
342
  "window.confirm.close-modal.files": "Are you sure? You have some files that have not been uploaded yet.",
@@ -282,8 +362,11 @@ var en = {
282
362
  "sidebar.tree.expand": "Expand {name}",
283
363
  "sidebar.tree.collapse": "Collapse {name}",
284
364
  "sidebar.tree.empty": "No folders yet",
365
+ "sidebar.tree.no-results": "No folders match \"{query}\"",
285
366
  "sidebar.tree.loading": "Loading folders...",
286
- "sidebar.tree.error": "Could not load folders."
367
+ "sidebar.tree.error": "Could not load folders.",
368
+ "sidebar.search.label": "Search folders",
369
+ "sidebar.search.placeholder": "Search folders"
287
370
  };
288
371
 
289
372
  export { en as default };
@@ -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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"urlYupSchema.mjs","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,GAAAA,CAAIC,MAAM,EAAA,CAAGC,KAAK,CAAC;AAC1CC,IAAAA,IAAAA,EAAMH,GAAAA,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,gBAAAA,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,gBAAAA,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,OAAAA,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.mjs","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,GAAAA,CAAIC,MAAM,EAAA,CAAGC,KAAK,CAAC;AAC1CC,IAAAA,IAAAA,EAAMH,GAAAA,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,iBAAYC,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,iBAAYE,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,OAAAA,CAAQH,aAAaC,EAAE,CAAA;oBAC3Bd,MAAAA,EAAQ;wBAAEiB,MAAAA,EAAQL;AAAe;AACnC;AACF,aAAA,CAAA;AACF,QAAA;AACF,KAAA;AACF,CAAA;;;;"}
@@ -10,14 +10,22 @@ const config = {
10
10
  cache: false,
11
11
  concurrency: 1
12
12
  },
13
- concurrentUploadSize: 1
13
+ concurrentUploadSize: 1,
14
+ concurrentUploadRequests: 1
14
15
  },
15
16
  validator (config) {
16
- if (config.concurrentUploadSize !== undefined) {
17
- if (typeof config.concurrentUploadSize !== 'number' || !Number.isInteger(config.concurrentUploadSize) || config.concurrentUploadSize < 1) {
18
- throw new Error('upload plugin config: "concurrentUploadSize" must be an integer greater than or equal to 1');
17
+ const assertPositiveInteger = (key, value)=>{
18
+ if (value === undefined) {
19
+ return;
19
20
  }
20
- }
21
+ if (typeof value !== 'number' || !Number.isInteger(value) || value < 1) {
22
+ throw new Error(`upload plugin config: "${key}" must be an integer greater than or equal to 1`);
23
+ }
24
+ };
25
+ // Server-side ceiling: files processed in parallel within one request.
26
+ assertPositiveInteger('concurrentUploadSize', config.concurrentUploadSize);
27
+ // Client-side parallelism: upload requests the admin fires at once.
28
+ assertPositiveInteger('concurrentUploadRequests', config.concurrentUploadRequests);
21
29
  }
22
30
  };
23
31