@strapi/upload 5.59.0 → 5.61.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 (295) hide show
  1. package/dist/admin/components/AssetPickerDialog/AssetPickerDialog.js +434 -0
  2. package/dist/admin/components/AssetPickerDialog/AssetPickerDialog.js.map +1 -0
  3. package/dist/admin/components/AssetPickerDialog/AssetPickerDialog.mjs +432 -0
  4. package/dist/admin/components/AssetPickerDialog/AssetPickerDialog.mjs.map +1 -0
  5. package/dist/admin/components/AssetPickerDialog/FolderBreadcrumbs.js +91 -0
  6. package/dist/admin/components/AssetPickerDialog/FolderBreadcrumbs.js.map +1 -0
  7. package/dist/admin/components/AssetPickerDialog/FolderBreadcrumbs.mjs +89 -0
  8. package/dist/admin/components/AssetPickerDialog/FolderBreadcrumbs.mjs.map +1 -0
  9. package/dist/admin/components/AssetPickerDialog/MediaLibraryPickerDialog.js +29 -0
  10. package/dist/admin/components/AssetPickerDialog/MediaLibraryPickerDialog.js.map +1 -0
  11. package/dist/admin/components/AssetPickerDialog/MediaLibraryPickerDialog.mjs +27 -0
  12. package/dist/admin/components/AssetPickerDialog/MediaLibraryPickerDialog.mjs.map +1 -0
  13. package/dist/admin/components/AssetPickerDialog/PickerSelectionProvider.js +178 -0
  14. package/dist/admin/components/AssetPickerDialog/PickerSelectionProvider.js.map +1 -0
  15. package/dist/admin/components/AssetPickerDialog/PickerSelectionProvider.mjs +175 -0
  16. package/dist/admin/components/AssetPickerDialog/PickerSelectionProvider.mjs.map +1 -0
  17. package/dist/admin/components/AssetPickerDialog/SortableSelection.js +143 -0
  18. package/dist/admin/components/AssetPickerDialog/SortableSelection.js.map +1 -0
  19. package/dist/admin/components/AssetPickerDialog/SortableSelection.mjs +141 -0
  20. package/dist/admin/components/AssetPickerDialog/SortableSelection.mjs.map +1 -0
  21. package/dist/admin/components/AssetPickerDialog/pickerSelection.js +49 -0
  22. package/dist/admin/components/AssetPickerDialog/pickerSelection.js.map +1 -0
  23. package/dist/admin/components/AssetPickerDialog/pickerSelection.mjs +41 -0
  24. package/dist/admin/components/AssetPickerDialog/pickerSelection.mjs.map +1 -0
  25. package/dist/admin/components/Drawer.js +12 -7
  26. package/dist/admin/components/Drawer.js.map +1 -1
  27. package/dist/admin/components/Drawer.mjs +12 -7
  28. package/dist/admin/components/Drawer.mjs.map +1 -1
  29. package/dist/admin/components/EditorFileDropZone/EditorFileDropZone.js +188 -0
  30. package/dist/admin/components/EditorFileDropZone/EditorFileDropZone.js.map +1 -0
  31. package/dist/admin/components/EditorFileDropZone/EditorFileDropZone.mjs +186 -0
  32. package/dist/admin/components/EditorFileDropZone/EditorFileDropZone.mjs.map +1 -0
  33. package/dist/admin/components/MediaLibraryInput/AddAssetMenu.js +9 -4
  34. package/dist/admin/components/MediaLibraryInput/AddAssetMenu.js.map +1 -1
  35. package/dist/admin/components/MediaLibraryInput/AddAssetMenu.mjs +9 -4
  36. package/dist/admin/components/MediaLibraryInput/AddAssetMenu.mjs.map +1 -1
  37. package/dist/admin/components/MediaLibraryInput/AssetCard.js +240 -0
  38. package/dist/admin/components/MediaLibraryInput/AssetCard.js.map +1 -0
  39. package/dist/admin/components/MediaLibraryInput/AssetCard.mjs +237 -0
  40. package/dist/admin/components/MediaLibraryInput/AssetCard.mjs.map +1 -0
  41. package/dist/admin/components/MediaLibraryInput/AssetCarousel.js +161 -0
  42. package/dist/admin/components/MediaLibraryInput/AssetCarousel.js.map +1 -0
  43. package/dist/admin/components/MediaLibraryInput/AssetCarousel.mjs +159 -0
  44. package/dist/admin/components/MediaLibraryInput/AssetCarousel.mjs.map +1 -0
  45. package/dist/admin/components/MediaLibraryInput/AssetDropZone.js +76 -49
  46. package/dist/admin/components/MediaLibraryInput/AssetDropZone.js.map +1 -1
  47. package/dist/admin/components/MediaLibraryInput/AssetDropZone.mjs +77 -50
  48. package/dist/admin/components/MediaLibraryInput/AssetDropZone.mjs.map +1 -1
  49. package/dist/admin/components/MediaLibraryInput/AssetPreview.js +109 -0
  50. package/dist/admin/components/MediaLibraryInput/AssetPreview.js.map +1 -0
  51. package/dist/admin/components/MediaLibraryInput/AssetPreview.mjs +106 -0
  52. package/dist/admin/components/MediaLibraryInput/AssetPreview.mjs.map +1 -0
  53. package/dist/admin/components/MediaLibraryInput/AssetRow.js +146 -79
  54. package/dist/admin/components/MediaLibraryInput/AssetRow.js.map +1 -1
  55. package/dist/admin/components/MediaLibraryInput/AssetRow.mjs +148 -82
  56. package/dist/admin/components/MediaLibraryInput/AssetRow.mjs.map +1 -1
  57. package/dist/admin/components/MediaLibraryInput/FieldControls.js +32 -0
  58. package/dist/admin/components/MediaLibraryInput/FieldControls.js.map +1 -0
  59. package/dist/admin/components/MediaLibraryInput/FieldControls.mjs +29 -0
  60. package/dist/admin/components/MediaLibraryInput/FieldControls.mjs.map +1 -0
  61. package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js +163 -111
  62. package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js.map +1 -1
  63. package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs +162 -114
  64. package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs.map +1 -1
  65. package/dist/admin/components/MediaLibraryInput/UploadProgressBar.js +42 -0
  66. package/dist/admin/components/MediaLibraryInput/UploadProgressBar.js.map +1 -0
  67. package/dist/admin/components/MediaLibraryInput/UploadProgressBar.mjs +40 -0
  68. package/dist/admin/components/MediaLibraryInput/UploadProgressBar.mjs.map +1 -0
  69. package/dist/admin/components/MediaLibraryInput/openAssetDetails.js +46 -0
  70. package/dist/admin/components/MediaLibraryInput/openAssetDetails.js.map +1 -0
  71. package/dist/admin/components/MediaLibraryInput/openAssetDetails.mjs +43 -0
  72. package/dist/admin/components/MediaLibraryInput/openAssetDetails.mjs.map +1 -0
  73. package/dist/admin/components/MediaLibraryInput/useFieldUploads.js +122 -0
  74. package/dist/admin/components/MediaLibraryInput/useFieldUploads.js.map +1 -0
  75. package/dist/admin/components/MediaLibraryInput/useFieldUploads.mjs +120 -0
  76. package/dist/admin/components/MediaLibraryInput/useFieldUploads.mjs.map +1 -0
  77. package/dist/admin/components/UploadProgressDialog.js +2 -1
  78. package/dist/admin/components/UploadProgressDialog.js.map +1 -1
  79. package/dist/admin/components/UploadProgressDialog.mjs +2 -1
  80. package/dist/admin/components/UploadProgressDialog.mjs.map +1 -1
  81. package/dist/admin/hooks/useMediaLibraryPermissions.js +12 -2
  82. package/dist/admin/hooks/useMediaLibraryPermissions.js.map +1 -1
  83. package/dist/admin/hooks/useMediaLibraryPermissions.mjs +12 -2
  84. package/dist/admin/hooks/useMediaLibraryPermissions.mjs.map +1 -1
  85. package/dist/admin/index.js +10 -1
  86. package/dist/admin/index.js.map +1 -1
  87. package/dist/admin/index.mjs +10 -1
  88. package/dist/admin/index.mjs.map +1 -1
  89. package/dist/admin/pages/Assets/AssetsPage.js +14 -303
  90. package/dist/admin/pages/Assets/AssetsPage.js.map +1 -1
  91. package/dist/admin/pages/Assets/AssetsPage.mjs +13 -282
  92. package/dist/admin/pages/Assets/AssetsPage.mjs.map +1 -1
  93. package/dist/admin/pages/Assets/components/AssetDetails/AssetCropEditor.mjs +2 -2
  94. package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js +181 -65
  95. package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js.map +1 -1
  96. package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs +184 -69
  97. package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs.map +1 -1
  98. package/dist/admin/pages/Assets/components/AssetDetails/AssetPreview.mjs +1 -1
  99. package/dist/admin/pages/Assets/components/AssetsGrid.js +142 -31
  100. package/dist/admin/pages/Assets/components/AssetsGrid.js.map +1 -1
  101. package/dist/admin/pages/Assets/components/AssetsGrid.mjs +145 -34
  102. package/dist/admin/pages/Assets/components/AssetsGrid.mjs.map +1 -1
  103. package/dist/admin/pages/Assets/components/AssetsSearchInput.js +43 -2
  104. package/dist/admin/pages/Assets/components/AssetsSearchInput.js.map +1 -1
  105. package/dist/admin/pages/Assets/components/AssetsSearchInput.mjs +45 -4
  106. package/dist/admin/pages/Assets/components/AssetsSearchInput.mjs.map +1 -1
  107. package/dist/admin/pages/Assets/components/AssetsTable.js +58 -34
  108. package/dist/admin/pages/Assets/components/AssetsTable.js.map +1 -1
  109. package/dist/admin/pages/Assets/components/AssetsTable.mjs +60 -36
  110. package/dist/admin/pages/Assets/components/AssetsTable.mjs.map +1 -1
  111. package/dist/admin/pages/Assets/components/AssetsView.js +145 -0
  112. package/dist/admin/pages/Assets/components/AssetsView.js.map +1 -0
  113. package/dist/admin/pages/Assets/components/AssetsView.mjs +143 -0
  114. package/dist/admin/pages/Assets/components/AssetsView.mjs.map +1 -0
  115. package/dist/admin/pages/Assets/components/BulkActionsBar.mjs +1 -1
  116. package/dist/admin/pages/Assets/components/BusyOverlay.mjs +1 -1
  117. package/dist/admin/pages/Assets/components/Dnd/DragOverlayChip.mjs +1 -1
  118. package/dist/admin/pages/Assets/components/Dnd/ReorderHandle.js +40 -0
  119. package/dist/admin/pages/Assets/components/Dnd/ReorderHandle.js.map +1 -0
  120. package/dist/admin/pages/Assets/components/Dnd/ReorderHandle.mjs +38 -0
  121. package/dist/admin/pages/Assets/components/Dnd/ReorderHandle.mjs.map +1 -0
  122. package/dist/admin/pages/Assets/components/Dnd/assetSortable.js +29 -0
  123. package/dist/admin/pages/Assets/components/Dnd/assetSortable.js.map +1 -0
  124. package/dist/admin/pages/Assets/components/Dnd/assetSortable.mjs +24 -0
  125. package/dist/admin/pages/Assets/components/Dnd/assetSortable.mjs.map +1 -0
  126. package/dist/admin/pages/Assets/components/Dnd/dndIds.js +5 -0
  127. package/dist/admin/pages/Assets/components/Dnd/dndIds.js.map +1 -1
  128. package/dist/admin/pages/Assets/components/Dnd/dndIds.mjs +5 -1
  129. package/dist/admin/pages/Assets/components/Dnd/dndIds.mjs.map +1 -1
  130. package/dist/admin/pages/Assets/components/Dnd/useAssetDnd.js +41 -13
  131. package/dist/admin/pages/Assets/components/Dnd/useAssetDnd.js.map +1 -1
  132. package/dist/admin/pages/Assets/components/Dnd/useAssetDnd.mjs +41 -13
  133. package/dist/admin/pages/Assets/components/Dnd/useAssetDnd.mjs.map +1 -1
  134. package/dist/admin/pages/Assets/components/FilterBadges.mjs +2 -2
  135. package/dist/admin/pages/Assets/components/FilterMenu.mjs +2 -2
  136. package/dist/admin/pages/Assets/components/FolderTree/FolderTree.js +274 -55
  137. package/dist/admin/pages/Assets/components/FolderTree/FolderTree.js.map +1 -1
  138. package/dist/admin/pages/Assets/components/FolderTree/FolderTree.mjs +277 -59
  139. package/dist/admin/pages/Assets/components/FolderTree/FolderTree.mjs.map +1 -1
  140. package/dist/admin/pages/Assets/components/FolderTree/collapsedBranch.js +32 -0
  141. package/dist/admin/pages/Assets/components/FolderTree/collapsedBranch.js.map +1 -0
  142. package/dist/admin/pages/Assets/components/FolderTree/collapsedBranch.mjs +29 -0
  143. package/dist/admin/pages/Assets/components/FolderTree/collapsedBranch.mjs.map +1 -0
  144. package/dist/admin/pages/Assets/components/ViewToggle.js +126 -0
  145. package/dist/admin/pages/Assets/components/ViewToggle.js.map +1 -0
  146. package/dist/admin/pages/Assets/components/ViewToggle.mjs +104 -0
  147. package/dist/admin/pages/Assets/components/ViewToggle.mjs.map +1 -0
  148. package/dist/admin/pages/Assets/hooks/useAssetSearch.js +2 -2
  149. package/dist/admin/pages/Assets/hooks/useAssetSearch.js.map +1 -1
  150. package/dist/admin/pages/Assets/hooks/useAssetSearch.mjs +2 -2
  151. package/dist/admin/pages/Assets/hooks/useAssetSearch.mjs.map +1 -1
  152. package/dist/admin/pages/Assets/hooks/useAssetSelection.js +19 -1
  153. package/dist/admin/pages/Assets/hooks/useAssetSelection.js.map +1 -1
  154. package/dist/admin/pages/Assets/hooks/useAssetSelection.mjs +20 -3
  155. package/dist/admin/pages/Assets/hooks/useAssetSelection.mjs.map +1 -1
  156. package/dist/admin/pages/Assets/hooks/useAssetsList.js +87 -0
  157. package/dist/admin/pages/Assets/hooks/useAssetsList.js.map +1 -0
  158. package/dist/admin/pages/Assets/hooks/useAssetsList.mjs +85 -0
  159. package/dist/admin/pages/Assets/hooks/useAssetsList.mjs.map +1 -0
  160. package/dist/admin/pages/Assets/hooks/useBusyAssets.mjs +1 -1
  161. package/dist/admin/pages/Assets/hooks/useFolderNavigation.js +2 -1
  162. package/dist/admin/pages/Assets/hooks/useFolderNavigation.js.map +1 -1
  163. package/dist/admin/pages/Assets/hooks/useFolderNavigation.mjs +3 -2
  164. package/dist/admin/pages/Assets/hooks/useFolderNavigation.mjs.map +1 -1
  165. package/dist/admin/pages/Assets/hooks/useIsAssetDetailsOpen.js +2 -6
  166. package/dist/admin/pages/Assets/hooks/useIsAssetDetailsOpen.js.map +1 -1
  167. package/dist/admin/pages/Assets/hooks/useIsAssetDetailsOpen.mjs +2 -6
  168. package/dist/admin/pages/Assets/hooks/useIsAssetDetailsOpen.mjs.map +1 -1
  169. package/dist/admin/pages/Assets/hooks/useListFilters.js +2 -1
  170. package/dist/admin/pages/Assets/hooks/useListFilters.js.map +1 -1
  171. package/dist/admin/pages/Assets/hooks/useListFilters.mjs +3 -2
  172. package/dist/admin/pages/Assets/hooks/useListFilters.mjs.map +1 -1
  173. package/dist/admin/pages/Assets/hooks/useListQueryParams.js +80 -0
  174. package/dist/admin/pages/Assets/hooks/useListQueryParams.js.map +1 -0
  175. package/dist/admin/pages/Assets/hooks/useListQueryParams.mjs +77 -0
  176. package/dist/admin/pages/Assets/hooks/useListQueryParams.mjs.map +1 -0
  177. package/dist/admin/pages/Assets/hooks/useListSettings.js +32 -0
  178. package/dist/admin/pages/Assets/hooks/useListSettings.js.map +1 -0
  179. package/dist/admin/pages/Assets/hooks/useListSettings.mjs +29 -0
  180. package/dist/admin/pages/Assets/hooks/useListSettings.mjs.map +1 -0
  181. package/dist/admin/pages/Assets/hooks/useListSort.js +2 -1
  182. package/dist/admin/pages/Assets/hooks/useListSort.js.map +1 -1
  183. package/dist/admin/pages/Assets/hooks/useListSort.mjs +3 -2
  184. package/dist/admin/pages/Assets/hooks/useListSort.mjs.map +1 -1
  185. package/dist/admin/services/api.js +92 -7
  186. package/dist/admin/services/api.js.map +1 -1
  187. package/dist/admin/services/api.mjs +91 -9
  188. package/dist/admin/services/api.mjs.map +1 -1
  189. package/dist/admin/src/components/AssetPickerDialog/AssetPickerDialog.d.ts +19 -0
  190. package/dist/admin/src/components/AssetPickerDialog/FolderBreadcrumbs.d.ts +10 -0
  191. package/dist/admin/src/components/AssetPickerDialog/MediaLibraryPickerDialog.d.ts +19 -0
  192. package/dist/admin/src/components/AssetPickerDialog/PickerSelectionProvider.d.ts +28 -0
  193. package/dist/admin/src/components/AssetPickerDialog/SortableSelection.d.ts +12 -0
  194. package/dist/admin/src/components/AssetPickerDialog/pickerSelection.d.ts +26 -0
  195. package/dist/admin/src/components/Drawer.d.ts +8 -0
  196. package/dist/admin/src/components/EditorFileDropZone/EditorFileDropZone.d.ts +21 -0
  197. package/dist/admin/src/components/MediaLibraryInput/AddAssetMenu.d.ts +7 -1
  198. package/dist/admin/src/components/MediaLibraryInput/AssetCard.d.ts +25 -0
  199. package/dist/admin/src/components/MediaLibraryInput/AssetCarousel.d.ts +16 -0
  200. package/dist/admin/src/components/MediaLibraryInput/AssetDropZone.d.ts +11 -3
  201. package/dist/admin/src/components/MediaLibraryInput/AssetPreview.d.ts +17 -0
  202. package/dist/admin/src/components/MediaLibraryInput/AssetRow.d.ts +13 -3
  203. package/dist/admin/src/components/MediaLibraryInput/FieldControls.d.ts +19 -0
  204. package/dist/admin/src/components/MediaLibraryInput/MediaLibraryInput.d.ts +3 -1
  205. package/dist/admin/src/components/MediaLibraryInput/UploadProgressBar.d.ts +7 -0
  206. package/dist/admin/src/components/MediaLibraryInput/openAssetDetails.d.ts +10 -0
  207. package/dist/admin/src/components/MediaLibraryInput/useFieldUploads.d.ts +31 -0
  208. package/dist/admin/src/hooks/useMediaLibraryPermissions.d.ts +2 -0
  209. package/dist/admin/src/pages/Assets/components/AssetDetails/AssetDetailsDrawer.d.ts +41 -5
  210. package/dist/admin/src/pages/Assets/components/AssetsGrid.d.ts +3 -1
  211. package/dist/admin/src/pages/Assets/components/AssetsSearchInput.d.ts +11 -1
  212. package/dist/admin/src/pages/Assets/components/AssetsView.d.ts +29 -0
  213. package/dist/admin/src/pages/Assets/components/Dnd/ReorderHandle.d.ts +12 -0
  214. package/dist/admin/src/pages/Assets/components/Dnd/assetSortable.d.ts +37 -0
  215. package/dist/admin/src/pages/Assets/components/Dnd/dndIds.d.ts +5 -0
  216. package/dist/admin/src/pages/Assets/components/Dnd/useAssetDnd.d.ts +23 -2
  217. package/dist/admin/src/pages/Assets/components/FolderTree/FolderTree.d.ts +1 -0
  218. package/dist/admin/src/pages/Assets/components/FolderTree/collapsedBranch.d.ts +21 -0
  219. package/dist/admin/src/pages/Assets/components/ViewToggle.d.ts +8 -0
  220. package/dist/admin/src/pages/Assets/hooks/useAssetSelection.d.ts +26 -0
  221. package/dist/admin/src/pages/Assets/hooks/useAssetsList.d.ts +30 -0
  222. package/dist/admin/src/pages/Assets/hooks/useIsAssetDetailsOpen.d.ts +2 -6
  223. package/dist/admin/src/pages/Assets/hooks/useListQueryParams.d.ts +27 -0
  224. package/dist/admin/src/pages/Assets/hooks/useListSettings.d.ts +29 -0
  225. package/dist/admin/src/services/api.d.ts +24 -1
  226. package/dist/admin/src/store/uploadProgress.d.ts +14 -1
  227. package/dist/admin/src/utils/findFolderPath.d.ts +6 -0
  228. package/dist/admin/src/utils/isAllowedAssetType.d.ts +14 -0
  229. package/dist/admin/store/uploadProgress.js +30 -3
  230. package/dist/admin/store/uploadProgress.js.map +1 -1
  231. package/dist/admin/store/uploadProgress.mjs +29 -4
  232. package/dist/admin/store/uploadProgress.mjs.map +1 -1
  233. package/dist/admin/translations/en.json.js +24 -0
  234. package/dist/admin/translations/en.json.js.map +1 -1
  235. package/dist/admin/translations/en.json.mjs +24 -0
  236. package/dist/admin/translations/en.json.mjs.map +1 -1
  237. package/dist/admin/utils/findFolderPath.js +26 -0
  238. package/dist/admin/utils/findFolderPath.js.map +1 -0
  239. package/dist/admin/utils/findFolderPath.mjs +24 -0
  240. package/dist/admin/utils/findFolderPath.mjs.map +1 -0
  241. package/dist/admin/utils/isAllowedAssetType.js +33 -0
  242. package/dist/admin/utils/isAllowedAssetType.js.map +1 -0
  243. package/dist/admin/utils/isAllowedAssetType.mjs +31 -0
  244. package/dist/admin/utils/isAllowedAssetType.mjs.map +1 -0
  245. package/dist/server/audit-logs.js +264 -0
  246. package/dist/server/audit-logs.js.map +1 -0
  247. package/dist/server/audit-logs.mjs +255 -0
  248. package/dist/server/audit-logs.mjs.map +1 -0
  249. package/dist/server/bootstrap.js +4 -0
  250. package/dist/server/bootstrap.js.map +1 -1
  251. package/dist/server/bootstrap.mjs +4 -0
  252. package/dist/server/bootstrap.mjs.map +1 -1
  253. package/dist/server/controllers/admin-folder-file.js +23 -1
  254. package/dist/server/controllers/admin-folder-file.js.map +1 -1
  255. package/dist/server/controllers/admin-folder-file.mjs +23 -1
  256. package/dist/server/controllers/admin-folder-file.mjs.map +1 -1
  257. package/dist/server/controllers/admin-settings.js +5 -1
  258. package/dist/server/controllers/admin-settings.js.map +1 -1
  259. package/dist/server/controllers/admin-settings.mjs +5 -1
  260. package/dist/server/controllers/admin-settings.mjs.map +1 -1
  261. package/dist/server/services/folder.js +48 -1
  262. package/dist/server/services/folder.js.map +1 -1
  263. package/dist/server/services/folder.mjs +48 -1
  264. package/dist/server/services/folder.mjs.map +1 -1
  265. package/dist/server/services/image-manipulation.js +14 -7
  266. package/dist/server/services/image-manipulation.js.map +1 -1
  267. package/dist/server/services/image-manipulation.mjs +14 -7
  268. package/dist/server/services/image-manipulation.mjs.map +1 -1
  269. package/dist/server/services/upload.js +100 -16
  270. package/dist/server/services/upload.js.map +1 -1
  271. package/dist/server/services/upload.mjs +102 -18
  272. package/dist/server/services/upload.mjs.map +1 -1
  273. package/dist/server/src/audit-logs.d.ts +142 -0
  274. package/dist/server/src/audit-logs.d.ts.map +1 -0
  275. package/dist/server/src/bootstrap.d.ts.map +1 -1
  276. package/dist/server/src/controllers/admin-folder-file.d.ts.map +1 -1
  277. package/dist/server/src/controllers/admin-settings.d.ts.map +1 -1
  278. package/dist/server/src/index.d.ts +4 -4
  279. package/dist/server/src/index.d.ts.map +1 -1
  280. package/dist/server/src/mcp/ambient-instance.d.ts.map +1 -1
  281. package/dist/server/src/services/extensions/utils.d.ts +11 -11
  282. package/dist/server/src/services/folder.d.ts.map +1 -1
  283. package/dist/server/src/services/image-manipulation.d.ts +4 -4
  284. package/dist/server/src/services/image-manipulation.d.ts.map +1 -1
  285. package/dist/server/src/services/index.d.ts +4 -4
  286. package/dist/server/src/services/index.d.ts.map +1 -1
  287. package/dist/server/src/services/upload.d.ts.map +1 -1
  288. package/dist/server/src/types.d.ts +63 -12
  289. package/dist/server/src/types.d.ts.map +1 -1
  290. package/package.json +11 -16
  291. package/dist/admin/components/MediaLibraryInput/NoLibraryAccessDialog.js +0 -45
  292. package/dist/admin/components/MediaLibraryInput/NoLibraryAccessDialog.js.map +0 -1
  293. package/dist/admin/components/MediaLibraryInput/NoLibraryAccessDialog.mjs +0 -43
  294. package/dist/admin/components/MediaLibraryInput/NoLibraryAccessDialog.mjs.map +0 -1
  295. package/dist/admin/src/components/MediaLibraryInput/NoLibraryAccessDialog.d.ts +0 -10
@@ -0,0 +1,21 @@
1
+ import { type DragEvent, type ReactNode } from 'react';
2
+ import { type AllowedMediaType } from '../../utils/allowedMediaTypes';
3
+ import type { File } from '../../../../shared/contracts/files';
4
+ export interface EditorFileDropZoneProps {
5
+ children: ReactNode;
6
+ disabled?: boolean;
7
+ allowedTypes?: AllowedMediaType[];
8
+ /**
9
+ * Called once per accepted drop, while the drop event is still current. It
10
+ * returns what receives each of that drop's files once uploaded, including
11
+ * files a Retry in the progress dialog uploads later.
12
+ */
13
+ onDropFiles: (event: DragEvent<HTMLElement>) => (file: File) => void;
14
+ }
15
+ /**
16
+ * Lets an editor take files dropped onto it: they upload to the root of the
17
+ * Media Library, through the global upload progress dialog, and are handed
18
+ * back to the editor one by one. Drags that carry no file, such as an editor
19
+ * reordering its own blocks, pass through untouched.
20
+ */
21
+ export declare const EditorFileDropZone: ({ children, disabled, allowedTypes, onDropFiles, }: EditorFileDropZoneProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,5 +1,11 @@
1
1
  interface AddAssetMenuProps {
2
2
  disabled?: boolean;
3
+ /**
4
+ * Ignore requests to open, without looking disabled. The press still reaches
5
+ * whatever listens for presses outside it, so an open drawer closes — or asks
6
+ * about unsaved edits — instead of having the menu stacked over it.
7
+ */
8
+ preventOpen?: boolean;
3
9
  onBrowseLibrary: () => void;
4
10
  onUploadFromDevice: () => void;
5
11
  onUploadFromUrl: () => void;
@@ -15,5 +21,5 @@ interface AddAssetMenuProps {
15
21
  * The drop zone below keeps working whatever this shows — it is a second way
16
22
  * in, not the only one.
17
23
  */
18
- export declare const AddAssetMenu: ({ disabled, onBrowseLibrary, onUploadFromDevice, onUploadFromUrl, }: AddAssetMenuProps) => import("react/jsx-runtime").JSX.Element | null;
24
+ export declare const AddAssetMenu: ({ disabled, preventOpen, onBrowseLibrary, onUploadFromDevice, onUploadFromUrl, }: AddAssetMenuProps) => import("react/jsx-runtime").JSX.Element | null;
19
25
  export {};
@@ -0,0 +1,25 @@
1
+ import type { FieldUpload } from './useFieldUploads';
2
+ import type { File } from '../../../../shared/contracts/files';
3
+ interface AssetCardProps {
4
+ asset: File;
5
+ disabled?: boolean;
6
+ onCopyLink: (asset: File) => void;
7
+ onEdit?: (asset: File) => void;
8
+ onRemove: (asset: File) => void;
9
+ }
10
+ /**
11
+ * An asset a multiple-value field holds.
12
+ */
13
+ export declare const AssetCard: ({ asset, disabled, onCopyLink, onEdit, onRemove, }: AssetCardProps) => import("react/jsx-runtime").JSX.Element;
14
+ interface UploadCardProps {
15
+ upload: FieldUpload;
16
+ disabled?: boolean;
17
+ onCancel: (upload: FieldUpload) => void;
18
+ onRetry: (upload: FieldUpload) => void;
19
+ onRemove: (upload: FieldUpload) => void;
20
+ }
21
+ /**
22
+ * A file a multiple-value field is uploading, or failed to upload.
23
+ */
24
+ export declare const UploadCard: ({ upload, disabled, onCancel, onRetry, onRemove, }: UploadCardProps) => import("react/jsx-runtime").JSX.Element;
25
+ export {};
@@ -0,0 +1,16 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { ZoneVariant } from './AssetDropZone';
3
+ interface AssetCarouselProps {
4
+ /** One card per asset or upload, in field order. */
5
+ children: ReactNode;
6
+ /** Always shown: after the cards, or below them on a narrow field. */
7
+ renderDropZone: (variant: Exclude<ZoneVariant, 'bar'>) => ReactNode;
8
+ /** The field's width in the edit layout, out of 12, when the host knows it. */
9
+ layoutSize?: number;
10
+ }
11
+ /**
12
+ * A single row of cards followed by the drop tile. When the field holds more
13
+ * than fit, arrows page through the cards and the tile stays put.
14
+ */
15
+ export declare const AssetCarousel: ({ children, renderDropZone, layoutSize }: AssetCarouselProps) => import("react/jsx-runtime").JSX.Element;
16
+ export {};
@@ -1,13 +1,21 @@
1
+ /**
2
+ * `bar` on an empty field, `tile` after a multiple field's cards, `stacked`
3
+ * below them when the field is too narrow for both on one row.
4
+ */
5
+ export type ZoneVariant = 'bar' | 'tile' | 'stacked';
1
6
  interface AssetDropZoneProps {
7
+ variant?: ZoneVariant;
2
8
  disabled?: boolean;
3
- onClick: () => void;
4
9
  onDropFiles: (files: globalThis.File[]) => void;
5
10
  }
6
11
  /**
7
- * The field's own drop target. Deliberately not the Media Library page's
12
+ * The field's own drop target. It only takes drops: browsing and picking files
13
+ * go through the "Add asset" menu, so the field has one way in, not two.
14
+ *
15
+ * Deliberately not the Media Library page's
8
16
  * `UploadDropZoneProvider`: that one covers a whole route and paints a
9
17
  * full-surface overlay, where this has to stay inside one field on a form that
10
18
  * may hold several of them.
11
19
  */
12
- export declare const AssetDropZone: ({ disabled, onClick, onDropFiles }: AssetDropZoneProps) => import("react/jsx-runtime").JSX.Element;
20
+ export declare const AssetDropZone: ({ variant, disabled, onDropFiles, }: AssetDropZoneProps) => import("react/jsx-runtime").JSX.Element;
13
21
  export {};
@@ -0,0 +1,17 @@
1
+ import type { File } from '../../../../shared/contracts/files';
2
+ type PreviewSize = 'S' | 'L';
3
+ interface AssetPreviewProps {
4
+ asset: File;
5
+ size: PreviewSize;
6
+ }
7
+ export declare const AssetPreview: ({ asset, size }: AssetPreviewProps) => import("react/jsx-runtime").JSX.Element;
8
+ interface UploadPreviewProps {
9
+ file?: globalThis.File;
10
+ size: PreviewSize;
11
+ }
12
+ /**
13
+ * Previews a file that has not reached the server yet, straight from the
14
+ * user's disk.
15
+ */
16
+ export declare const UploadPreview: ({ file, size }: UploadPreviewProps) => import("react/jsx-runtime").JSX.Element;
17
+ export {};
@@ -1,3 +1,4 @@
1
+ import type { FieldUpload } from './useFieldUploads';
1
2
  import type { File } from '../../../../shared/contracts/files';
2
3
  interface AssetRowProps {
3
4
  asset: File;
@@ -7,9 +8,18 @@ interface AssetRowProps {
7
8
  onRemove: (asset: File) => void;
8
9
  }
9
10
  /**
10
- * One asset already held by the field. The uploading and failed variants the
11
- * design also specifies are not here yet — while an upload runs, the global
12
- * progress dialog is what reports it.
11
+ * The asset a single-value field holds.
13
12
  */
14
13
  export declare const AssetRow: ({ asset, disabled, onCopyLink, onEdit, onRemove, }: AssetRowProps) => import("react/jsx-runtime").JSX.Element;
14
+ interface UploadRowProps {
15
+ upload: FieldUpload;
16
+ disabled?: boolean;
17
+ onCancel: (upload: FieldUpload) => void;
18
+ onRetry: (upload: FieldUpload) => void;
19
+ onRemove: (upload: FieldUpload) => void;
20
+ }
21
+ /**
22
+ * A file a single-value field is uploading, or failed to upload.
23
+ */
24
+ export declare const UploadRow: ({ upload, disabled, onCancel, onRetry, onRemove, }: UploadRowProps) => import("react/jsx-runtime").JSX.Element;
15
25
  export {};
@@ -0,0 +1,19 @@
1
+ import { Menu } from '@strapi/design-system';
2
+ /**
3
+ * A ghost `IconButton` that stays a bare icon when disabled. The design system
4
+ * paints every disabled button, ghost included, as a bordered grey plate.
5
+ */
6
+ export declare const GhostIconButton: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<Omit<Omit<import("@strapi/design-system").IconButtonProps<import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements>>, "ref"> & import("react").RefAttributes<unknown>, "ref"> & {
7
+ ref?: ((instance: unknown) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | import("react").RefObject<unknown> | null | undefined;
8
+ }, string | number | symbol> & Omit<Omit<import("@strapi/design-system").IconButtonProps<import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements>>, "ref"> & import("react").RefAttributes<unknown>, "ref"> & {
9
+ ref?: ((instance: unknown) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | import("react").RefObject<unknown> | null | undefined;
10
+ }, "variant"> & Partial<Pick<import("styled-components").FastOmit<Omit<Omit<import("@strapi/design-system").IconButtonProps<import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements>>, "ref"> & import("react").RefAttributes<unknown>, "ref"> & {
11
+ ref?: ((instance: unknown) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | import("react").RefObject<unknown> | null | undefined;
12
+ }, string | number | symbol> & Omit<Omit<import("@strapi/design-system").IconButtonProps<import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements>>, "ref"> & import("react").RefAttributes<unknown>, "ref"> & {
13
+ ref?: ((instance: unknown) => void | import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof import("react").DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES]) | import("react").RefObject<unknown> | null | undefined;
14
+ }, "variant">>> & string & Omit<(<C extends React.ElementType<any, keyof React.JSX.IntrinsicElements> = "button">(props: React.PropsWithoutRef<import("@strapi/design-system").IconButtonProps<C>> & React.RefAttributes<unknown>) => React.ReactNode), keyof import("react").Component<any, {}, any>>;
15
+ /**
16
+ * A `Menu.Item` whose label greys out with its icon when disabled. The design
17
+ * system computes a disabled text colour, then its own stylesheet overrides it.
18
+ */
19
+ export declare const FieldMenuItem: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<Menu.ItemProps<(props: Omit<import("@strapi/design-system").BaseLinkProps<"a">, "ref"> & React.RefAttributes<HTMLAnchorElement>) => React.ReactNode> & import("styled-components/dist/types").BaseObject, never> & Partial<Pick<Menu.ItemProps<(props: Omit<import("@strapi/design-system").BaseLinkProps<"a">, "ref"> & React.RefAttributes<HTMLAnchorElement>) => React.ReactNode> & import("styled-components/dist/types").BaseObject, never>>> & string & Omit<({ onSelect, disabled, isLink, startIcon, endIcon, isExternal, variant, ...props }: Menu.ItemProps) => import("react/jsx-runtime").JSX.Element, keyof import("react").Component<any, {}, any>>;
@@ -11,6 +11,8 @@ export interface MediaLibraryInputProps {
11
11
  allowedTypes?: AllowedMediaType[] | null;
12
12
  multiple?: boolean;
13
13
  };
14
+ /** The field's width in the edit layout, out of 12. Set by the Content Manager. */
15
+ layoutSize?: number;
14
16
  }
15
17
  /**
16
18
  * The Content Manager's `media` field, on the current Media Library stack.
@@ -23,4 +25,4 @@ export interface MediaLibraryInputProps {
23
25
  * The legacy input is still registered when `useLegacyMediaLibrary` is on, and
24
26
  * is untouched by this.
25
27
  */
26
- export declare const MediaLibraryInput: ({ name, label, labelAction, hint, required, disabled, attribute, }: MediaLibraryInputProps) => import("react/jsx-runtime").JSX.Element;
28
+ export declare const MediaLibraryInput: ({ name, label, labelAction, hint, required, disabled, attribute, layoutSize, }: MediaLibraryInputProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,7 @@
1
+ interface UploadProgressBarProps {
2
+ /** 0–100, or `null` for an upload whose size is not known. */
3
+ progress: number | null;
4
+ label: string;
5
+ }
6
+ export declare const UploadProgressBar: ({ progress, label }: UploadProgressBarProps) => import("react/jsx-runtime").JSX.Element;
7
+ export {};
@@ -0,0 +1,10 @@
1
+ /** Read at event time, so a handler never acts on a stale render. */
2
+ export declare const isAnyAssetDetailsOpen: () => boolean;
3
+ /**
4
+ * Registers this field's drawer while `isOpen`, and returns whether any field —
5
+ * this one included — has one open.
6
+ *
7
+ * A layout effect, not a plain one: the drawer that a press closes must be gone
8
+ * from the set before that press's click reaches the next field.
9
+ */
10
+ export declare const useOpenAssetDetails: (isOpen: boolean) => boolean;
@@ -0,0 +1,31 @@
1
+ export interface FieldUpload {
2
+ key: string;
3
+ uploadId: number;
4
+ index: number;
5
+ name: string;
6
+ status: 'uploading' | 'failed';
7
+ /** 0–100, or `null` while the size is unknown. */
8
+ progress: number | null;
9
+ /** The file the user picked, for the preview. Gone once the page reloads. */
10
+ sourceFile?: globalThis.File;
11
+ /** Whether the progress store still holds the row, i.e. it can be retried in place. */
12
+ isInStore: boolean;
13
+ }
14
+ /**
15
+ * The uploads a field started, read from the shared progress store so the field
16
+ * and the progress dialog always agree.
17
+ *
18
+ * The store only holds the latest batch, and closing the dialog empties it. Rows
19
+ * are therefore remembered here once seen: a failed upload stays on the field
20
+ * until the user retries or removes it, whatever happened to the dialog. A row
21
+ * that vanished while still in flight was cancelled along with its batch.
22
+ *
23
+ * Completed rows leave the list. Attaching them to the field is the upload's
24
+ * `onFileUploaded`, which outlives the input.
25
+ */
26
+ export declare const useFieldUploads: (owner: string) => {
27
+ uploads: FieldUpload[];
28
+ cancel: ({ uploadId, index }: FieldUpload) => void;
29
+ retry: (upload: FieldUpload, reupload: (file: globalThis.File) => void) => Promise<void>;
30
+ dismiss: (key: string) => void;
31
+ };
@@ -6,6 +6,8 @@
6
6
  * hook is what keeps the UI honest so users don't discover a missing
7
7
  * permission through a 403.
8
8
  *
9
+ * - `canRead` — browse the library (the Content Manager asset picker needs
10
+ * nothing more)
9
11
  * - `canCreate` — upload (files, from URL) and New folder
10
12
  * - `canUpdate` — edit details, replace, crop, move (dnd + bulk), delete
11
13
  * (single + bulk), AI metadata — the `assets.update` action covers
@@ -15,9 +15,6 @@ interface AssetOperations {
15
15
  export declare const AssetOperationsContext: React.Context<AssetOperations | null>;
16
16
  export declare const useAssetDetailsParam: () => {
17
17
  assetId: number | null;
18
- isVisible: boolean;
19
- shouldRenderDrawer: boolean;
20
- onCloseAnimationEnd: (event: React.AnimationEvent) => void;
21
18
  openDetails: (id: number) => void;
22
19
  closeDetails: () => void;
23
20
  };
@@ -40,7 +37,46 @@ export declare const getBusyMessage: (state: {
40
37
  interface AssetDetailsProps {
41
38
  asset: AssetWithPopulatedCreatedBy;
42
39
  closeDetails: () => void;
40
+ /** Receives whether the form has unsaved edits. */
41
+ hasUnsavedEditsRef?: React.MutableRefObject<boolean>;
42
+ /** Guard unsaved edits with <Blocker>, for a drawer whose closing is a navigation. */
43
+ guardNavigation?: boolean;
44
+ /** After the asset was updated, replaced or cropped in place, with the server's copy. */
45
+ onAssetChange?: (asset: AssetWithPopulatedCreatedBy) => void;
46
+ /** After the asset was deleted from the library. */
47
+ onAssetDelete?: (id: number) => void;
48
+ /** `location` stamped on the tracking events, for analytics to tell hosts apart. */
49
+ trackedLocation?: string;
43
50
  }
44
- export declare const AssetDetails: ({ asset, closeDetails }: AssetDetailsProps) => import("react/jsx-runtime").JSX.Element;
45
- export declare const AssetDetailsDrawer: () => import("react/jsx-runtime").JSX.Element | null;
51
+ export declare const AssetDetails: ({ asset, closeDetails, hasUnsavedEditsRef, guardNavigation, onAssetChange, onAssetDelete, trackedLocation, }: AssetDetailsProps) => import("react/jsx-runtime").JSX.Element;
52
+ interface AssetDetailsDrawerProps {
53
+ /** The asset to show, or `null` to close the drawer. */
54
+ assetId: number | null;
55
+ onClose: () => void;
56
+ /**
57
+ * Guard unsaved edits with <Blocker> instead of the drawer's own confirmation.
58
+ * Only for a drawer whose closing is itself a navigation, which <Blocker> then
59
+ * covers along with route changes and browser history. Not for a host that
60
+ * has its own <Blocker>: react-router allows one per page.
61
+ */
62
+ guardNavigation?: boolean;
63
+ /**
64
+ * After the asset was updated, replaced or cropped in place, with the server's
65
+ * copy, so a host holding the asset (e.g. a form field) can stay in sync.
66
+ */
67
+ onAssetChange?: (asset: AssetWithPopulatedCreatedBy) => void;
68
+ /** After the asset was deleted from the library, just before the drawer closes. */
69
+ onAssetDelete?: (id: number) => void;
70
+ /**
71
+ * `location` stamped on the tracking events, for analytics to tell hosts
72
+ * apart. Defaults to the Media Library page's.
73
+ */
74
+ trackedLocation?: string;
75
+ }
76
+ export declare const AssetDetailsDrawer: ({ assetId, onClose, guardNavigation, onAssetChange, onAssetDelete, trackedLocation, }: AssetDetailsDrawerProps) => import("react/jsx-runtime").JSX.Element | null;
77
+ /**
78
+ * The drawer bound to the URL's `?assetId=`, as the Media Library page uses it:
79
+ * linkable, survives a refresh, and closing is a navigation.
80
+ */
81
+ export declare const AssetDetailsDrawerFromUrl: () => import("react/jsx-runtime").JSX.Element;
46
82
  export {};
@@ -3,10 +3,12 @@ import type { File } from '../../../../../shared/contracts/files';
3
3
  import type { Folder } from '../../../../../shared/contracts/folders';
4
4
  interface AssetsGridProps {
5
5
  assets: File[];
6
+ /** Shown in the "Assets (n)" heading; falls back to the loaded count. */
7
+ assetsTotal?: number;
6
8
  folders?: Folder[];
7
9
  /** Keys of the rendered items, in render order. Owned by the view. */
8
10
  renderedKeys?: ItemKey[];
9
11
  onAssetItemClick: (assetId: number) => void;
10
12
  }
11
- export declare const AssetsGrid: ({ assets, folders, renderedKeys, onAssetItemClick, }: AssetsGridProps) => import("react/jsx-runtime").JSX.Element | null;
13
+ export declare const AssetsGrid: ({ assets, assetsTotal, folders, renderedKeys, onAssetItemClick, }: AssetsGridProps) => import("react/jsx-runtime").JSX.Element | null;
12
14
  export {};
@@ -1,5 +1,15 @@
1
+ interface AssetsSearchInputProps {
2
+ /**
3
+ * Starts as an icon button that opens the field, which folds back once it
4
+ * loses focus empty, like the admin's own `SearchInput` in list views. Used
5
+ * where the toolbar is narrow (the Content Manager asset picker). Mobile
6
+ * always shows the field.
7
+ */
8
+ collapsible?: boolean;
9
+ }
1
10
  /**
2
11
  * Keyword search over the whole Media Library. Owns the typing state and the
3
12
  * debounce; `useAssetSearch` owns the `?_q=` URL param.
4
13
  */
5
- export declare const AssetsSearchInput: () => import("react/jsx-runtime").JSX.Element;
14
+ export declare const AssetsSearchInput: ({ collapsible }: AssetsSearchInputProps) => import("react/jsx-runtime").JSX.Element;
15
+ export {};
@@ -0,0 +1,29 @@
1
+ import { type ItemLocations } from '../../../utils/itemLocations';
2
+ import { type FoldersPosition } from '../hooks/useListSort';
3
+ import type { File } from '../../../../../shared/contracts/files';
4
+ import type { Folder } from '../../../../../shared/contracts/folders';
5
+ interface AssetsViewProps {
6
+ view: number;
7
+ folders: Folder[];
8
+ isLoadingFolders: boolean;
9
+ assets: File[];
10
+ /** Total matching assets on the server, beyond the pages loaded so far. */
11
+ assetsTotal?: number;
12
+ isLoadingAssets: boolean;
13
+ isFetchingMore: boolean;
14
+ hasNextPage: boolean;
15
+ fetchNextPage: () => void;
16
+ error: unknown;
17
+ locations: ItemLocations;
18
+ searchQuery: string;
19
+ assetsSort: string;
20
+ foldersPosition: FoldersPosition;
21
+ hasActiveFilters: boolean;
22
+ onClearFilters: () => void;
23
+ onAssetItemClick: (assetId: number) => void;
24
+ onAddAssets: () => void;
25
+ canAddAssets: boolean;
26
+ onClearSearch: () => void;
27
+ }
28
+ export declare const AssetsView: ({ view, folders, isLoadingFolders, assets, assetsTotal, isLoadingAssets, isFetchingMore, hasNextPage, fetchNextPage, error, locations, searchQuery, assetsSort, foldersPosition, hasActiveFilters, onClearFilters, onAssetItemClick, onAddAssets, canAddAssets, onClearSearch, }: AssetsViewProps) => import("react/jsx-runtime").JSX.Element;
29
+ export {};
@@ -0,0 +1,12 @@
1
+ import { type AssetSortable } from './assetSortable';
2
+ interface ReorderHandleProps {
3
+ name: string;
4
+ handle: AssetSortable['handle'];
5
+ }
6
+ /**
7
+ * The keyboard path into reordering (Space picks the item up, arrows move it,
8
+ * Space drops it). Pointer drags start from anywhere on the item, this grip
9
+ * included.
10
+ */
11
+ export declare const ReorderHandle: ({ name, handle }: ReorderHandleProps) => import("react/jsx-runtime").JSX.Element;
12
+ export {};
@@ -0,0 +1,37 @@
1
+ import { type CSSProperties, type KeyboardEvent, type SyntheticEvent } from 'react';
2
+ import type { DraggableAttributes, DraggableSyntheticListeners } from '@dnd-kit/core';
3
+ /**
4
+ * What a list item needs to take part in reordering: the whole item drags with
5
+ * the pointer, and a grip button carries the keyboard path (Space to pick up,
6
+ * arrows to move) so it doesn't collide with the item's own Space/click.
7
+ */
8
+ export interface AssetSortable {
9
+ setNodeRef: (node: HTMLElement | null) => void;
10
+ isDragging: boolean;
11
+ style: CSSProperties;
12
+ /** Pointer activation, for the item itself. */
13
+ listeners: DraggableSyntheticListeners;
14
+ handle: Partial<DraggableAttributes> & {
15
+ ref: (node: HTMLElement | null) => void;
16
+ onKeyDown?: (event: KeyboardEvent) => void;
17
+ };
18
+ }
19
+ type UseAssetSortable = (assetId: number) => AssetSortable | null;
20
+ /**
21
+ * Holds the hook that makes an asset sortable, rather than a value: the hook
22
+ * needs each item's id. A given subtree always gets the same hook, so calling
23
+ * it from `useAssetSortable` keeps the rules of hooks.
24
+ */
25
+ export declare const AssetSortableContext: import("react").Context<UseAssetSortable>;
26
+ export declare const useAssetSortable: (assetId: number) => AssetSortable | null;
27
+ /** Marks the reorder grip, so the item can tell its keys apart. */
28
+ export declare const REORDER_HANDLE_PROPS: {
29
+ "data-reorder-handle": string;
30
+ };
31
+ /**
32
+ * Keys pressed on the grip, including the arrows and the drop key mid-drag,
33
+ * belong to reordering. The item must not also read them as its own
34
+ * Enter/Space.
35
+ */
36
+ export declare const isFromReorderHandle: (event: SyntheticEvent) => boolean;
37
+ export {};
@@ -3,5 +3,10 @@ export declare const toFolderDraggableId: (id: number) => `folder:${number}`;
3
3
  export declare const toFolderTargetId: (id: number) => `folder-target:${number}`;
4
4
  export declare const parseFolderTargetId: (dndId: string | number) => number | null;
5
5
  export declare const toFolderTreeTargetId: (id: number) => `folder-tree-target:${number}`;
6
+ /**
7
+ * The "N parent folders" row in the sidebar. Only there so hovering it during a
8
+ * drag opens it; no parser recognises it, so a drop on it moves nothing.
9
+ */
10
+ export declare const toFolderTreeSummaryId: (rootId: number) => `folder-tree-summary:${number}`;
6
11
  export declare const HOME_TREE_TARGET_ID: "folder-tree-target:home";
7
12
  export declare const parseFolderTreeTargetId: (dndId: string | number) => number | "root" | null;
@@ -1,3 +1,4 @@
1
+ import { type DraggableAttributes } from '@dnd-kit/core';
1
2
  import type { DragFileData, DragFolderData } from '../../../../types/dnd';
2
3
  export declare const useFileDraggable: (asset: {
3
4
  id: number;
@@ -6,11 +7,31 @@ export declare const useFileDraggable: (asset: {
6
7
  id?: number;
7
8
  } | null;
8
9
  }) => {
10
+ setNodeRef: (node: HTMLElement | null) => void;
11
+ isDragging: boolean;
12
+ listeners: import("@dnd-kit/core").DraggableSyntheticListeners;
13
+ dragStyle: import("react").CSSProperties;
14
+ dragHandle: Partial<DraggableAttributes> & {
15
+ ref: (node: HTMLElement | null) => void;
16
+ onKeyDown?: (event: import("react").KeyboardEvent) => void;
17
+ };
18
+ dragData: DragFileData;
19
+ active: import("@dnd-kit/core").Active | null;
20
+ activatorEvent: Event | null;
21
+ activeNodeRect: import("@dnd-kit/core").ClientRect | null;
22
+ attributes: DraggableAttributes;
23
+ node: import("react").MutableRefObject<HTMLElement | null>;
24
+ over: import("@dnd-kit/core").Over | null;
25
+ setActivatorNodeRef: (element: HTMLElement | null) => void;
26
+ transform: import("@dnd-kit/utilities").Transform | null;
27
+ } | {
28
+ dragStyle: undefined;
29
+ dragHandle: undefined;
9
30
  dragData: DragFileData;
10
31
  active: import("@dnd-kit/core").Active | null;
11
32
  activatorEvent: Event | null;
12
33
  activeNodeRect: import("@dnd-kit/core").ClientRect | null;
13
- attributes: import("@dnd-kit/core").DraggableAttributes;
34
+ attributes: DraggableAttributes;
14
35
  isDragging: boolean;
15
36
  listeners: import("@dnd-kit/core/dist/hooks/utilities").SyntheticListenerMap | undefined;
16
37
  node: import("react").MutableRefObject<HTMLElement | null>;
@@ -31,7 +52,7 @@ export declare const useFolderDraggableDroppable: (folder: {
31
52
  active: import("@dnd-kit/core").Active | null;
32
53
  activatorEvent: Event | null;
33
54
  activeNodeRect: import("@dnd-kit/core").ClientRect | null;
34
- attributes: import("@dnd-kit/core").DraggableAttributes;
55
+ attributes: DraggableAttributes;
35
56
  isDragging: boolean;
36
57
  listeners: import("@dnd-kit/core/dist/hooks/utilities").SyntheticListenerMap | undefined;
37
58
  node: import("react").MutableRefObject<HTMLElement | null>;
@@ -1,4 +1,5 @@
1
1
  import { type ReactNode } from 'react';
2
+ export declare const getIndentRem: (level: number) => number;
2
3
  interface FolderTreeProps {
3
4
  currentFolderId: number | null;
4
5
  /**
@@ -0,0 +1,21 @@
1
+ import type { FolderNode } from '../../../../../../shared/contracts/folders';
2
+ /**
3
+ * Depth (0 = a root folder) from which the selected folder's ancestors fold into
4
+ * a single "N parent folders" row in the sidebar. Picked so the deepest visible
5
+ * row still has room for a readable name in the 23.2rem rail.
6
+ */
7
+ export declare const COLLAPSE_FROM_DEPTH = 4;
8
+ export interface CollapsedBranch {
9
+ root: FolderNode;
10
+ /** Between `root` and `parent`, shallowest first. */
11
+ hidden: FolderNode[];
12
+ /** The selected folder's parent. */
13
+ parent: FolderNode;
14
+ }
15
+ /**
16
+ * How the selected folder's branch folds once it is deep enough: the root stays,
17
+ * everything between the root and the parent is hidden, and the parent stays so
18
+ * the selected folder is shown alongside its siblings. `null` means the branch
19
+ * renders in full.
20
+ */
21
+ export declare const getCollapsedBranch: (nodes: FolderNode[], selectedId: number | null) => CollapsedBranch | null;
@@ -0,0 +1,8 @@
1
+ interface ViewToggleProps {
2
+ view: number;
3
+ onChange: (view: number) => void;
4
+ /** Drops the visible labels at every width, for narrow hosts like a modal. */
5
+ iconsOnly?: boolean;
6
+ }
7
+ export declare const ViewToggle: ({ view, onChange, iconsOnly }: ViewToggleProps) => import("react/jsx-runtime").JSX.Element;
8
+ export {};
@@ -12,7 +12,21 @@ import { type ItemKey } from '../utils/selection';
12
12
  * ordered key array from the caller (the view owns the rendered order), keeping
13
13
  * the context data-source-agnostic.
14
14
  */
15
+ /**
16
+ * How an item takes part in selection: `enabled` shows a working checkbox,
17
+ * `disabled` shows it greyed out (the item cannot be chosen here), `hidden`
18
+ * shows none (the item is not something this selection is about).
19
+ */
20
+ export type Selectability = 'enabled' | 'disabled' | 'hidden';
15
21
  export interface AssetSelection {
22
+ /**
23
+ * Whether selection is on at all. Views show the checkbox column and
24
+ * select-all only when it is.
25
+ */
26
+ isEnabled: boolean;
27
+ /** Whether the table offers a select-all header (not on a single-value picker). */
28
+ canSelectAll: boolean;
29
+ getSelectability: (key: ItemKey) => Selectability;
16
30
  /** Every selected item key (assets and folders), render-order agnostic. */
17
31
  selectedKeys: Set<ItemKey>;
18
32
  /** Selected asset ids, derived from {@link selectedKeys}. */
@@ -34,9 +48,21 @@ export interface AssetSelection {
34
48
  selectOnly: (key: ItemKey) => void;
35
49
  /** Row-level "..." menu — drops one key when its item leaves the list (move, delete). */
36
50
  deselect: (key: ItemKey) => void;
51
+ /**
52
+ * Header checkbox, when everything it covers is selected. The host decides how
53
+ * far that reaches: the Media Library page clears the whole selection, because
54
+ * it can still hold keys that left the list without being deselected (moved or
55
+ * deleted from the details drawer). The picker drops only these keys.
56
+ */
57
+ deselectAll: (orderedKeys: ItemKey[]) => void;
37
58
  /** Close button / folder navigation / list-identity changes. */
38
59
  clear: () => void;
39
60
  }
61
+ /**
62
+ * Exported so a host with its own selection rules (the Content Manager asset
63
+ * picker) can feed the same views a different implementation.
64
+ */
65
+ export declare const AssetSelectionContext: import("react").Context<AssetSelection | null>;
40
66
  interface AssetSelectionProviderProps {
41
67
  children: ReactNode;
42
68
  /**
@@ -0,0 +1,30 @@
1
+ /**
2
+ * The list behind the Media Library page and the Content Manager asset picker:
3
+ * the current folder, search, sort and filters, and the folders and assets they
4
+ * select. Where that query state lives (URL or memory) is decided by
5
+ * `ListQueryStateProvider`, not here.
6
+ */
7
+ export declare const useAssetsList: () => {
8
+ listSort: import("./useListSort").ListSort;
9
+ listFilters: import("./useListFilters").ListFilters;
10
+ assets: import("../../../../../shared/contracts/files").File[];
11
+ subscribers: import("react").FunctionComponentElement<{
12
+ children?: import("react").ReactNode | undefined;
13
+ }> | null;
14
+ pagination: import("../../../../../shared/contracts/files").Pagination | undefined;
15
+ isLoadingAssets: boolean;
16
+ isFetchingMore: boolean;
17
+ hasNextPage: boolean;
18
+ fetchNextPage: () => void;
19
+ assetsError: import("@strapi/admin/strapi-admin").BaseQueryError | import("@reduxjs/toolkit").SerializedError | undefined;
20
+ folders: import("../../../../../shared/contracts/folders").Folder[];
21
+ isLoadingFolders: boolean;
22
+ searchQuery: string;
23
+ isSearching: boolean;
24
+ setSearchQuery: (value: string) => void;
25
+ clearSearch: () => void;
26
+ currentFolderId: number | null;
27
+ navigateToFolder: (folder: import("../../../../../shared/contracts/folders").Folder) => void;
28
+ navigateToRoot: () => void;
29
+ navigateToFolderId: (folderId: number | null) => void;
30
+ };
@@ -8,11 +8,7 @@ export declare const ASSET_DETAILS_URL_PARAM = "assetId";
8
8
  */
9
9
  export declare const parseAssetDetailsId: (raw: string | undefined) => number | null;
10
10
  /**
11
- * Whether the asset details drawer is open, derived purely from the URL.
12
- *
13
- * Deliberately separate from `useAssetDetailsParam`, which additionally owns the
14
- * drawer's mount lifecycle: its `shouldRenderDrawer` only stays correct in the
15
- * component wired to the close animation, so a second caller would strand it at
16
- * `true`. Anything that just needs the answer reads this instead.
11
+ * Whether the asset details drawer is open, derived purely from the URL — so it
12
+ * turns false as soon as closing starts, while the drawer is still sliding out.
17
13
  */
18
14
  export declare const useIsAssetDetailsOpen: () => boolean;