@strapi/upload 5.37.0 → 5.38.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 (526) hide show
  1. package/dist/admin/ai/components/AIAssetCard.js.map +1 -1
  2. package/dist/admin/ai/components/AIAssetCard.mjs +1 -1
  3. package/dist/admin/ai/components/AIAssetCard.mjs.map +1 -1
  4. package/dist/admin/ai/components/AIUploadModal.js.map +1 -1
  5. package/dist/admin/ai/components/AIUploadModal.mjs +1 -1
  6. package/dist/admin/ai/components/AIUploadModal.mjs.map +1 -1
  7. package/dist/admin/components/AssetCard/AssetCard.js.map +1 -1
  8. package/dist/admin/components/AssetCard/AssetCard.mjs.map +1 -1
  9. package/dist/admin/components/AssetCard/AssetCardBase.js.map +1 -1
  10. package/dist/admin/components/AssetCard/AssetCardBase.mjs.map +1 -1
  11. package/dist/admin/components/AssetCard/AudioAssetCard.js.map +1 -1
  12. package/dist/admin/components/AssetCard/AudioAssetCard.mjs.map +1 -1
  13. package/dist/admin/components/AssetCard/AudioPreview.js.map +1 -1
  14. package/dist/admin/components/AssetCard/AudioPreview.mjs.map +1 -1
  15. package/dist/admin/components/AssetCard/DocAssetCard.js.map +1 -1
  16. package/dist/admin/components/AssetCard/DocAssetCard.mjs.map +1 -1
  17. package/dist/admin/components/AssetCard/ImageAssetCard.js.map +1 -1
  18. package/dist/admin/components/AssetCard/ImageAssetCard.mjs.map +1 -1
  19. package/dist/admin/components/AssetCard/UploadingAssetCard.js.map +1 -1
  20. package/dist/admin/components/AssetCard/UploadingAssetCard.mjs.map +1 -1
  21. package/dist/admin/components/AssetCard/VideoAssetCard.js.map +1 -1
  22. package/dist/admin/components/AssetCard/VideoAssetCard.mjs.map +1 -1
  23. package/dist/admin/components/AssetCard/VideoPreview.js.map +1 -1
  24. package/dist/admin/components/AssetCard/VideoPreview.mjs.map +1 -1
  25. package/dist/admin/components/AssetDialog/AssetDialog.js.map +1 -1
  26. package/dist/admin/components/AssetDialog/AssetDialog.mjs.map +1 -1
  27. package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.js +1 -1
  28. package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.js.map +1 -1
  29. package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.mjs +1 -1
  30. package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.mjs.map +1 -1
  31. package/dist/admin/components/AssetDialog/BrowseStep/Filters.js.map +1 -1
  32. package/dist/admin/components/AssetDialog/BrowseStep/Filters.mjs.map +1 -1
  33. package/dist/admin/components/AssetDialog/BrowseStep/PageSize.js.map +1 -1
  34. package/dist/admin/components/AssetDialog/BrowseStep/PageSize.mjs.map +1 -1
  35. package/dist/admin/components/AssetDialog/BrowseStep/PaginationFooter/Pagination.js.map +1 -1
  36. package/dist/admin/components/AssetDialog/BrowseStep/PaginationFooter/Pagination.mjs.map +1 -1
  37. package/dist/admin/components/AssetDialog/BrowseStep/PaginationFooter/PaginationFooter.js.map +1 -1
  38. package/dist/admin/components/AssetDialog/BrowseStep/PaginationFooter/PaginationFooter.mjs.map +1 -1
  39. package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.js.map +1 -1
  40. package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.mjs.map +1 -1
  41. package/dist/admin/components/AssetDialog/BrowseStep/utils/isSelectable.js.map +1 -1
  42. package/dist/admin/components/AssetDialog/BrowseStep/utils/isSelectable.mjs.map +1 -1
  43. package/dist/admin/components/AssetDialog/DialogFooter.js.map +1 -1
  44. package/dist/admin/components/AssetDialog/DialogFooter.mjs.map +1 -1
  45. package/dist/admin/components/AssetDialog/SelectedStep/SelectedStep.js.map +1 -1
  46. package/dist/admin/components/AssetDialog/SelectedStep/SelectedStep.mjs.map +1 -1
  47. package/dist/admin/components/AssetGridList/AssetGridList.js.map +1 -1
  48. package/dist/admin/components/AssetGridList/AssetGridList.mjs.map +1 -1
  49. package/dist/admin/components/AssetGridList/Draggable.js.map +1 -1
  50. package/dist/admin/components/AssetGridList/Draggable.mjs.map +1 -1
  51. package/dist/admin/components/Breadcrumbs/Breadcrumbs.js.map +1 -1
  52. package/dist/admin/components/Breadcrumbs/Breadcrumbs.mjs.map +1 -1
  53. package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.js.map +1 -1
  54. package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.mjs.map +1 -1
  55. package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.js.map +1 -1
  56. package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.mjs.map +1 -1
  57. package/dist/admin/components/ContextInfo/ContextInfo.js.map +1 -1
  58. package/dist/admin/components/ContextInfo/ContextInfo.mjs.map +1 -1
  59. package/dist/admin/components/CopyLinkButton/CopyLinkButton.js.map +1 -1
  60. package/dist/admin/components/CopyLinkButton/CopyLinkButton.mjs.map +1 -1
  61. package/dist/admin/components/EditAssetDialog/DialogHeader.js.map +1 -1
  62. package/dist/admin/components/EditAssetDialog/DialogHeader.mjs.map +1 -1
  63. package/dist/admin/components/EditAssetDialog/EditAssetContent.js.map +1 -1
  64. package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs.map +1 -1
  65. package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.js.map +1 -1
  66. package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.mjs.map +1 -1
  67. package/dist/admin/components/EditAssetDialog/PreviewBox/CroppingActions.js.map +1 -1
  68. package/dist/admin/components/EditAssetDialog/PreviewBox/CroppingActions.mjs.map +1 -1
  69. package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.js.map +1 -1
  70. package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.mjs.map +1 -1
  71. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.js +1 -4
  72. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.js.map +1 -1
  73. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.mjs +1 -4
  74. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.mjs.map +1 -1
  75. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewComponents.js.map +1 -1
  76. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewComponents.mjs.map +1 -1
  77. package/dist/admin/components/EditAssetDialog/RemoveAssetDialog.js.map +1 -1
  78. package/dist/admin/components/EditAssetDialog/RemoveAssetDialog.mjs.map +1 -1
  79. package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.js.map +1 -1
  80. package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.mjs.map +1 -1
  81. package/dist/admin/components/EditFolderDialog/EditFolderDialog.js.map +1 -1
  82. package/dist/admin/components/EditFolderDialog/EditFolderDialog.mjs.map +1 -1
  83. package/dist/admin/components/EditFolderDialog/ModalHeader/ModalHeader.js.map +1 -1
  84. package/dist/admin/components/EditFolderDialog/ModalHeader/ModalHeader.mjs.map +1 -1
  85. package/dist/admin/components/EditFolderDialog/RemoveFolderDialog.js.map +1 -1
  86. package/dist/admin/components/EditFolderDialog/RemoveFolderDialog.mjs.map +1 -1
  87. package/dist/admin/components/EmptyAssets/EmptyAssetGrid.js.map +1 -1
  88. package/dist/admin/components/EmptyAssets/EmptyAssetGrid.mjs.map +1 -1
  89. package/dist/admin/components/EmptyAssets/EmptyAssets.js.map +1 -1
  90. package/dist/admin/components/EmptyAssets/EmptyAssets.mjs.map +1 -1
  91. package/dist/admin/components/FilterList/FilterList.js.map +1 -1
  92. package/dist/admin/components/FilterList/FilterList.mjs.map +1 -1
  93. package/dist/admin/components/FilterList/FilterTag.js.map +1 -1
  94. package/dist/admin/components/FilterList/FilterTag.mjs.map +1 -1
  95. package/dist/admin/components/FilterPopover/FilterPopover.js.map +1 -1
  96. package/dist/admin/components/FilterPopover/FilterPopover.mjs.map +1 -1
  97. package/dist/admin/components/FilterPopover/FilterValueInput.js.map +1 -1
  98. package/dist/admin/components/FilterPopover/FilterValueInput.mjs.map +1 -1
  99. package/dist/admin/components/FilterPopover/utils/getFilterList.js.map +1 -1
  100. package/dist/admin/components/FilterPopover/utils/getFilterList.mjs.map +1 -1
  101. package/dist/admin/components/FolderCard/FolderCard/FolderCard.js.map +1 -1
  102. package/dist/admin/components/FolderCard/FolderCard/FolderCard.mjs.map +1 -1
  103. package/dist/admin/components/FolderCard/FolderCardBody/FolderCardBody.js.map +1 -1
  104. package/dist/admin/components/FolderCard/FolderCardBody/FolderCardBody.mjs.map +1 -1
  105. package/dist/admin/components/FolderCard/FolderCardBodyAction/FolderCardBodyAction.js.map +1 -1
  106. package/dist/admin/components/FolderCard/FolderCardBodyAction/FolderCardBodyAction.mjs.map +1 -1
  107. package/dist/admin/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.js.map +1 -1
  108. package/dist/admin/components/FolderCard/FolderCardCheckbox/FolderCardCheckbox.mjs.map +1 -1
  109. package/dist/admin/components/FolderCard/contexts/FolderCard.js.map +1 -1
  110. package/dist/admin/components/FolderCard/contexts/FolderCard.mjs.map +1 -1
  111. package/dist/admin/components/FolderGridList/FolderGridList.js.map +1 -1
  112. package/dist/admin/components/FolderGridList/FolderGridList.mjs.map +1 -1
  113. package/dist/admin/components/MediaLibraryDialog/MediaLibraryDialog.js.map +1 -1
  114. package/dist/admin/components/MediaLibraryDialog/MediaLibraryDialog.mjs.map +1 -1
  115. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.js.map +1 -1
  116. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.mjs.map +1 -1
  117. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssetActions.js.map +1 -1
  118. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssetActions.mjs.map +1 -1
  119. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.js.map +1 -1
  120. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.mjs.map +1 -1
  121. package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.js.map +1 -1
  122. package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.mjs.map +1 -1
  123. package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js.map +1 -1
  124. package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs.map +1 -1
  125. package/dist/admin/components/SelectTree/Option.js.map +1 -1
  126. package/dist/admin/components/SelectTree/Option.mjs.map +1 -1
  127. package/dist/admin/components/SelectTree/SelectTree.js.map +1 -1
  128. package/dist/admin/components/SelectTree/SelectTree.mjs +1 -1
  129. package/dist/admin/components/SelectTree/SelectTree.mjs.map +1 -1
  130. package/dist/admin/components/SelectTree/utils/flattenTree.js.map +1 -1
  131. package/dist/admin/components/SelectTree/utils/flattenTree.mjs.map +1 -1
  132. package/dist/admin/components/SelectTree/utils/getOpenValues.js.map +1 -1
  133. package/dist/admin/components/SelectTree/utils/getOpenValues.mjs.map +1 -1
  134. package/dist/admin/components/SelectTree/utils/getValuesToClose.js.map +1 -1
  135. package/dist/admin/components/SelectTree/utils/getValuesToClose.mjs.map +1 -1
  136. package/dist/admin/components/SortPicker/SortPicker.js.map +1 -1
  137. package/dist/admin/components/SortPicker/SortPicker.mjs.map +1 -1
  138. package/dist/admin/components/TableList/CellContent.js.map +1 -1
  139. package/dist/admin/components/TableList/CellContent.mjs.map +1 -1
  140. package/dist/admin/components/TableList/PreviewCell.js.map +1 -1
  141. package/dist/admin/components/TableList/PreviewCell.mjs +1 -1
  142. package/dist/admin/components/TableList/PreviewCell.mjs.map +1 -1
  143. package/dist/admin/components/TableList/TableList.js.map +1 -1
  144. package/dist/admin/components/TableList/TableList.mjs +1 -1
  145. package/dist/admin/components/TableList/TableList.mjs.map +1 -1
  146. package/dist/admin/components/TableList/TableRows.js.map +1 -1
  147. package/dist/admin/components/TableList/TableRows.mjs.map +1 -1
  148. package/dist/admin/components/UploadAssetDialog/AddAssetStep/AddAssetStep.js.map +1 -1
  149. package/dist/admin/components/UploadAssetDialog/AddAssetStep/AddAssetStep.mjs.map +1 -1
  150. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.js.map +1 -1
  151. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.mjs.map +1 -1
  152. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js.map +1 -1
  153. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.mjs.map +1 -1
  154. package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.js.map +1 -1
  155. package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.mjs.map +1 -1
  156. package/dist/admin/components/UploadAssetDialog/UploadAssetDialog.js.map +1 -1
  157. package/dist/admin/components/UploadAssetDialog/UploadAssetDialog.mjs.map +1 -1
  158. package/dist/admin/components/UploadProgress/UploadProgress.js.map +1 -1
  159. package/dist/admin/components/UploadProgress/UploadProgress.mjs.map +1 -1
  160. package/dist/admin/constants.js.map +1 -1
  161. package/dist/admin/constants.mjs.map +1 -1
  162. package/dist/admin/future/App.js.map +1 -1
  163. package/dist/admin/future/App.mjs.map +1 -1
  164. package/dist/admin/future/components/Drawer.js +189 -0
  165. package/dist/admin/future/components/Drawer.js.map +1 -0
  166. package/dist/admin/future/components/Drawer.mjs +166 -0
  167. package/dist/admin/future/components/Drawer.mjs.map +1 -0
  168. package/dist/admin/future/components/UploadProgressDialog.js +60 -101
  169. package/dist/admin/future/components/UploadProgressDialog.js.map +1 -1
  170. package/dist/admin/future/components/UploadProgressDialog.mjs +62 -84
  171. package/dist/admin/future/components/UploadProgressDialog.mjs.map +1 -1
  172. package/dist/admin/future/pages/Assets/AssetsPage.js +155 -100
  173. package/dist/admin/future/pages/Assets/AssetsPage.js.map +1 -1
  174. package/dist/admin/future/pages/Assets/AssetsPage.mjs +160 -105
  175. package/dist/admin/future/pages/Assets/AssetsPage.mjs.map +1 -1
  176. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js +406 -0
  177. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js.map +1 -0
  178. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs +384 -0
  179. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs.map +1 -0
  180. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetPreview.js +215 -0
  181. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetPreview.js.map +1 -0
  182. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetPreview.mjs +194 -0
  183. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetPreview.mjs.map +1 -0
  184. package/dist/admin/future/pages/Assets/components/AssetsGrid.js +37 -8
  185. package/dist/admin/future/pages/Assets/components/AssetsGrid.js.map +1 -1
  186. package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs +38 -9
  187. package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs.map +1 -1
  188. package/dist/admin/future/pages/Assets/components/AssetsTable.js +35 -5
  189. package/dist/admin/future/pages/Assets/components/AssetsTable.js.map +1 -1
  190. package/dist/admin/future/pages/Assets/components/AssetsTable.mjs +37 -7
  191. package/dist/admin/future/pages/Assets/components/AssetsTable.mjs.map +1 -1
  192. package/dist/admin/future/pages/Assets/components/CreateFolderDialog.js +143 -0
  193. package/dist/admin/future/pages/Assets/components/CreateFolderDialog.js.map +1 -0
  194. package/dist/admin/future/pages/Assets/components/CreateFolderDialog.mjs +141 -0
  195. package/dist/admin/future/pages/Assets/components/CreateFolderDialog.mjs.map +1 -0
  196. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZone.js.map +1 -1
  197. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZone.mjs.map +1 -1
  198. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.js.map +1 -1
  199. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.mjs.map +1 -1
  200. package/dist/admin/future/pages/Assets/components/ImportFromUrlDialog.js +127 -0
  201. package/dist/admin/future/pages/Assets/components/ImportFromUrlDialog.js.map +1 -0
  202. package/dist/admin/future/pages/Assets/components/ImportFromUrlDialog.mjs +106 -0
  203. package/dist/admin/future/pages/Assets/components/ImportFromUrlDialog.mjs.map +1 -0
  204. package/dist/admin/future/pages/Assets/constants.js.map +1 -1
  205. package/dist/admin/future/pages/Assets/constants.mjs.map +1 -1
  206. package/dist/admin/future/pages/Assets/hooks/useFolderInfo.js.map +1 -1
  207. package/dist/admin/future/pages/Assets/hooks/useFolderInfo.mjs.map +1 -1
  208. package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.js.map +1 -1
  209. package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.mjs.map +1 -1
  210. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.js.map +1 -1
  211. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.mjs.map +1 -1
  212. package/dist/admin/future/services/api.js +181 -97
  213. package/dist/admin/future/services/api.js.map +1 -1
  214. package/dist/admin/future/services/api.mjs +181 -98
  215. package/dist/admin/future/services/api.mjs.map +1 -1
  216. package/dist/admin/future/services/assets.js +14 -1
  217. package/dist/admin/future/services/assets.js.map +1 -1
  218. package/dist/admin/future/services/assets.mjs +14 -2
  219. package/dist/admin/future/services/assets.mjs.map +1 -1
  220. package/dist/admin/future/services/folders.js +16 -1
  221. package/dist/admin/future/services/folders.js.map +1 -1
  222. package/dist/admin/future/services/folders.mjs +16 -2
  223. package/dist/admin/future/services/folders.mjs.map +1 -1
  224. package/dist/admin/future/store/hooks.js.map +1 -1
  225. package/dist/admin/future/store/hooks.mjs.map +1 -1
  226. package/dist/admin/future/store/uploadProgress.js +7 -4
  227. package/dist/admin/future/store/uploadProgress.js.map +1 -1
  228. package/dist/admin/future/store/uploadProgress.mjs +7 -4
  229. package/dist/admin/future/store/uploadProgress.mjs.map +1 -1
  230. package/dist/admin/future/utils/files.js +105 -3
  231. package/dist/admin/future/utils/files.js.map +1 -1
  232. package/dist/admin/future/utils/files.mjs +104 -4
  233. package/dist/admin/future/utils/files.mjs.map +1 -1
  234. package/dist/admin/future/utils/getAssetIcon.js +3 -3
  235. package/dist/admin/future/utils/getAssetIcon.js.map +1 -1
  236. package/dist/admin/future/utils/getAssetIcon.mjs +4 -4
  237. package/dist/admin/future/utils/getAssetIcon.mjs.map +1 -1
  238. package/dist/admin/future/utils/translations.js.map +1 -1
  239. package/dist/admin/future/utils/translations.mjs.map +1 -1
  240. package/dist/admin/hooks/useAIMetadataJob.js.map +1 -1
  241. package/dist/admin/hooks/useAIMetadataJob.mjs.map +1 -1
  242. package/dist/admin/hooks/useAiAvailability.js.map +1 -1
  243. package/dist/admin/hooks/useAiAvailability.mjs.map +1 -1
  244. package/dist/admin/hooks/useAssets.js.map +1 -1
  245. package/dist/admin/hooks/useAssets.mjs.map +1 -1
  246. package/dist/admin/hooks/useBulkEdit.js.map +1 -1
  247. package/dist/admin/hooks/useBulkEdit.mjs.map +1 -1
  248. package/dist/admin/hooks/useBulkMove.js.map +1 -1
  249. package/dist/admin/hooks/useBulkMove.mjs.map +1 -1
  250. package/dist/admin/hooks/useBulkRemove.js.map +1 -1
  251. package/dist/admin/hooks/useBulkRemove.mjs.map +1 -1
  252. package/dist/admin/hooks/useConfig.js.map +1 -1
  253. package/dist/admin/hooks/useConfig.mjs.map +1 -1
  254. package/dist/admin/hooks/useCropImg.js.map +1 -1
  255. package/dist/admin/hooks/useCropImg.mjs.map +1 -1
  256. package/dist/admin/hooks/useEditAsset.js.map +1 -1
  257. package/dist/admin/hooks/useEditAsset.mjs.map +1 -1
  258. package/dist/admin/hooks/useEditFolder.js.map +1 -1
  259. package/dist/admin/hooks/useEditFolder.mjs.map +1 -1
  260. package/dist/admin/hooks/useFolder.js.map +1 -1
  261. package/dist/admin/hooks/useFolder.mjs.map +1 -1
  262. package/dist/admin/hooks/useFolderStructure.js.map +1 -1
  263. package/dist/admin/hooks/useFolderStructure.mjs.map +1 -1
  264. package/dist/admin/hooks/useFolders.js.map +1 -1
  265. package/dist/admin/hooks/useFolders.mjs.map +1 -1
  266. package/dist/admin/hooks/useMediaLibraryPermissions.js.map +1 -1
  267. package/dist/admin/hooks/useMediaLibraryPermissions.mjs.map +1 -1
  268. package/dist/admin/hooks/useModalQueryParams.js.map +1 -1
  269. package/dist/admin/hooks/useModalQueryParams.mjs.map +1 -1
  270. package/dist/admin/hooks/usePersistentState.js.map +1 -1
  271. package/dist/admin/hooks/usePersistentState.mjs.map +1 -1
  272. package/dist/admin/hooks/useRemoveAsset.js.map +1 -1
  273. package/dist/admin/hooks/useRemoveAsset.mjs.map +1 -1
  274. package/dist/admin/hooks/useSelectionState.js.map +1 -1
  275. package/dist/admin/hooks/useSelectionState.mjs.map +1 -1
  276. package/dist/admin/hooks/useSettings.js.map +1 -1
  277. package/dist/admin/hooks/useSettings.mjs.map +1 -1
  278. package/dist/admin/hooks/useTracking.js.map +1 -1
  279. package/dist/admin/hooks/useTracking.mjs.map +1 -1
  280. package/dist/admin/hooks/useUpload.js.map +1 -1
  281. package/dist/admin/hooks/useUpload.mjs.map +1 -1
  282. package/dist/admin/hooks/utils/renameKeys.js.map +1 -1
  283. package/dist/admin/hooks/utils/renameKeys.mjs.map +1 -1
  284. package/dist/admin/index.js.map +1 -1
  285. package/dist/admin/index.mjs.map +1 -1
  286. package/dist/admin/package.json.js +1 -152
  287. package/dist/admin/package.json.js.map +1 -1
  288. package/dist/admin/package.json.mjs +2 -141
  289. package/dist/admin/package.json.mjs.map +1 -1
  290. package/dist/admin/pages/App/App.js.map +1 -1
  291. package/dist/admin/pages/App/App.mjs.map +1 -1
  292. package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.js.map +1 -1
  293. package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.mjs +3 -3
  294. package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.mjs.map +1 -1
  295. package/dist/admin/pages/App/ConfigureTheView/components/Settings.js.map +1 -1
  296. package/dist/admin/pages/App/ConfigureTheView/components/Settings.mjs.map +1 -1
  297. package/dist/admin/pages/App/ConfigureTheView/state/actionTypes.js.map +1 -1
  298. package/dist/admin/pages/App/ConfigureTheView/state/actionTypes.mjs.map +1 -1
  299. package/dist/admin/pages/App/ConfigureTheView/state/actions.js.map +1 -1
  300. package/dist/admin/pages/App/ConfigureTheView/state/actions.mjs.map +1 -1
  301. package/dist/admin/pages/App/ConfigureTheView/state/init.js.map +1 -1
  302. package/dist/admin/pages/App/ConfigureTheView/state/init.mjs.map +1 -1
  303. package/dist/admin/pages/App/ConfigureTheView/state/reducer.js.map +1 -1
  304. package/dist/admin/pages/App/ConfigureTheView/state/reducer.mjs +1 -1
  305. package/dist/admin/pages/App/ConfigureTheView/state/reducer.mjs.map +1 -1
  306. package/dist/admin/pages/App/MediaLibrary.js +1 -1
  307. package/dist/admin/pages/App/MediaLibrary.js.map +1 -1
  308. package/dist/admin/pages/App/MediaLibrary.mjs +2 -2
  309. package/dist/admin/pages/App/MediaLibrary.mjs.map +1 -1
  310. package/dist/admin/pages/App/components/BulkActions.js.map +1 -1
  311. package/dist/admin/pages/App/components/BulkActions.mjs.map +1 -1
  312. package/dist/admin/pages/App/components/BulkDeleteButton.js.map +1 -1
  313. package/dist/admin/pages/App/components/BulkDeleteButton.mjs.map +1 -1
  314. package/dist/admin/pages/App/components/BulkMoveButton.js.map +1 -1
  315. package/dist/admin/pages/App/components/BulkMoveButton.mjs.map +1 -1
  316. package/dist/admin/pages/App/components/EmptyOrNoPermissions.js.map +1 -1
  317. package/dist/admin/pages/App/components/EmptyOrNoPermissions.mjs.map +1 -1
  318. package/dist/admin/pages/App/components/Filters.js.map +1 -1
  319. package/dist/admin/pages/App/components/Filters.mjs.map +1 -1
  320. package/dist/admin/pages/App/components/Header.js.map +1 -1
  321. package/dist/admin/pages/App/components/Header.mjs +2 -2
  322. package/dist/admin/pages/App/components/Header.mjs.map +1 -1
  323. package/dist/admin/pages/SettingsPage/SettingsPage.js.map +1 -1
  324. package/dist/admin/pages/SettingsPage/SettingsPage.mjs.map +1 -1
  325. package/dist/admin/pages/SettingsPage/reducer.js.map +1 -1
  326. package/dist/admin/pages/SettingsPage/reducer.mjs.map +1 -1
  327. package/dist/admin/pluginId.js.map +1 -1
  328. package/dist/admin/pluginId.mjs.map +1 -1
  329. package/dist/admin/src/future/components/Drawer.d.ts +32 -0
  330. package/dist/admin/src/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.d.ts +8 -0
  331. package/dist/admin/src/future/pages/Assets/components/AssetDetails/AssetPreview.d.ts +6 -0
  332. package/dist/admin/src/future/pages/Assets/components/AssetsGrid.d.ts +2 -1
  333. package/dist/admin/src/future/pages/Assets/components/AssetsTable.d.ts +2 -1
  334. package/dist/admin/src/future/pages/Assets/components/CreateFolderDialog.d.ts +8 -0
  335. package/dist/admin/src/future/pages/Assets/components/ImportFromUrlDialog.d.ts +7 -0
  336. package/dist/admin/src/future/services/api.d.ts +10 -1
  337. package/dist/admin/src/future/services/assets.d.ts +2 -2
  338. package/dist/admin/src/future/services/folders.d.ts +1 -1
  339. package/dist/admin/src/future/store/uploadProgress.d.ts +1 -1
  340. package/dist/admin/src/future/utils/files.d.ts +70 -0
  341. package/dist/admin/translations/en.json.js +35 -3
  342. package/dist/admin/translations/en.json.js.map +1 -1
  343. package/dist/admin/translations/en.json.mjs +35 -3
  344. package/dist/admin/translations/en.json.mjs.map +1 -1
  345. package/dist/admin/translations/es.json.js +1 -1
  346. package/dist/admin/translations/es.json.mjs +1 -1
  347. package/dist/admin/utils/appendSearchParamsToUrl.js.map +1 -1
  348. package/dist/admin/utils/appendSearchParamsToUrl.mjs.map +1 -1
  349. package/dist/admin/utils/containsAssetFilter.js.map +1 -1
  350. package/dist/admin/utils/containsAssetFilter.mjs.map +1 -1
  351. package/dist/admin/utils/createAssetUrl.js.map +1 -1
  352. package/dist/admin/utils/createAssetUrl.mjs.map +1 -1
  353. package/dist/admin/utils/displayedFilters.js.map +1 -1
  354. package/dist/admin/utils/displayedFilters.mjs.map +1 -1
  355. package/dist/admin/utils/downloadFile.js.map +1 -1
  356. package/dist/admin/utils/downloadFile.mjs.map +1 -1
  357. package/dist/admin/utils/findRecursiveFolderByValue.js.map +1 -1
  358. package/dist/admin/utils/findRecursiveFolderByValue.mjs.map +1 -1
  359. package/dist/admin/utils/formatBytes.js.map +1 -1
  360. package/dist/admin/utils/formatBytes.mjs.map +1 -1
  361. package/dist/admin/utils/formatDuration.js.map +1 -1
  362. package/dist/admin/utils/formatDuration.mjs.map +1 -1
  363. package/dist/admin/utils/getAPIInnerErrors.js.map +1 -1
  364. package/dist/admin/utils/getAPIInnerErrors.mjs.map +1 -1
  365. package/dist/admin/utils/getAllowedFiles.js.map +1 -1
  366. package/dist/admin/utils/getAllowedFiles.mjs.map +1 -1
  367. package/dist/admin/utils/getBreadcrumbDataCM.js.map +1 -1
  368. package/dist/admin/utils/getBreadcrumbDataCM.mjs.map +1 -1
  369. package/dist/admin/utils/getBreadcrumbDataML.js.map +1 -1
  370. package/dist/admin/utils/getBreadcrumbDataML.mjs.map +1 -1
  371. package/dist/admin/utils/getFileExtension.js.map +1 -1
  372. package/dist/admin/utils/getFileExtension.mjs.map +1 -1
  373. package/dist/admin/utils/getFolderParents.js.map +1 -1
  374. package/dist/admin/utils/getFolderParents.mjs.map +1 -1
  375. package/dist/admin/utils/getFolderURL.js.map +1 -1
  376. package/dist/admin/utils/getFolderURL.mjs.map +1 -1
  377. package/dist/admin/utils/getTrad.js.map +1 -1
  378. package/dist/admin/utils/getTrad.mjs.map +1 -1
  379. package/dist/admin/utils/icons.js.map +1 -1
  380. package/dist/admin/utils/icons.mjs +1 -1
  381. package/dist/admin/utils/icons.mjs.map +1 -1
  382. package/dist/admin/utils/moveElement.js.map +1 -1
  383. package/dist/admin/utils/moveElement.mjs.map +1 -1
  384. package/dist/admin/utils/normalizeAPIError.js.map +1 -1
  385. package/dist/admin/utils/normalizeAPIError.mjs.map +1 -1
  386. package/dist/admin/utils/prefixFileUrlWithBackendUrl.js.map +1 -1
  387. package/dist/admin/utils/prefixFileUrlWithBackendUrl.mjs.map +1 -1
  388. package/dist/admin/utils/prefixPluginTranslations.js.map +1 -1
  389. package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -1
  390. package/dist/admin/utils/rawFileToAsset.js.map +1 -1
  391. package/dist/admin/utils/rawFileToAsset.mjs.map +1 -1
  392. package/dist/admin/utils/toSingularTypes.js.map +1 -1
  393. package/dist/admin/utils/toSingularTypes.mjs.map +1 -1
  394. package/dist/admin/utils/typeFromMime.js.map +1 -1
  395. package/dist/admin/utils/typeFromMime.mjs.map +1 -1
  396. package/dist/admin/utils/urlYupSchema.js.map +1 -1
  397. package/dist/admin/utils/urlYupSchema.mjs.map +1 -1
  398. package/dist/admin/utils/urlsToAssets.js.map +1 -1
  399. package/dist/admin/utils/urlsToAssets.mjs.map +1 -1
  400. package/dist/server/bootstrap.js.map +1 -1
  401. package/dist/server/bootstrap.mjs.map +1 -1
  402. package/dist/server/config.js.map +1 -1
  403. package/dist/server/config.mjs.map +1 -1
  404. package/dist/server/constants.js.map +1 -1
  405. package/dist/server/constants.mjs.map +1 -1
  406. package/dist/server/content-types/file.js.map +1 -1
  407. package/dist/server/content-types/file.mjs.map +1 -1
  408. package/dist/server/content-types/folder.js.map +1 -1
  409. package/dist/server/content-types/folder.mjs +1 -1
  410. package/dist/server/content-types/folder.mjs.map +1 -1
  411. package/dist/server/content-types/index.js.map +1 -1
  412. package/dist/server/content-types/index.mjs.map +1 -1
  413. package/dist/server/controllers/admin-file.js.map +1 -1
  414. package/dist/server/controllers/admin-file.mjs +1 -1
  415. package/dist/server/controllers/admin-file.mjs.map +1 -1
  416. package/dist/server/controllers/admin-folder-file.js.map +1 -1
  417. package/dist/server/controllers/admin-folder-file.mjs +2 -2
  418. package/dist/server/controllers/admin-folder-file.mjs.map +1 -1
  419. package/dist/server/controllers/admin-folder.js.map +1 -1
  420. package/dist/server/controllers/admin-folder.mjs +1 -1
  421. package/dist/server/controllers/admin-folder.mjs.map +1 -1
  422. package/dist/server/controllers/admin-settings.js.map +1 -1
  423. package/dist/server/controllers/admin-settings.mjs.map +1 -1
  424. package/dist/server/controllers/admin-upload.js +144 -0
  425. package/dist/server/controllers/admin-upload.js.map +1 -1
  426. package/dist/server/controllers/admin-upload.mjs +147 -3
  427. package/dist/server/controllers/admin-upload.mjs.map +1 -1
  428. package/dist/server/controllers/content-api.js.map +1 -1
  429. package/dist/server/controllers/content-api.mjs.map +1 -1
  430. package/dist/server/controllers/index.js.map +1 -1
  431. package/dist/server/controllers/index.mjs.map +1 -1
  432. package/dist/server/controllers/utils/find-entity-and-check-permissions.js.map +1 -1
  433. package/dist/server/controllers/utils/find-entity-and-check-permissions.mjs.map +1 -1
  434. package/dist/server/controllers/utils/folders.js.map +1 -1
  435. package/dist/server/controllers/utils/folders.mjs.map +1 -1
  436. package/dist/server/controllers/validation/admin/configureView.js.map +1 -1
  437. package/dist/server/controllers/validation/admin/configureView.mjs.map +1 -1
  438. package/dist/server/controllers/validation/admin/folder-file.js.map +1 -1
  439. package/dist/server/controllers/validation/admin/folder-file.mjs.map +1 -1
  440. package/dist/server/controllers/validation/admin/folder.js.map +1 -1
  441. package/dist/server/controllers/validation/admin/folder.mjs.map +1 -1
  442. package/dist/server/controllers/validation/admin/settings.js.map +1 -1
  443. package/dist/server/controllers/validation/admin/settings.mjs.map +1 -1
  444. package/dist/server/controllers/validation/admin/upload.js.map +1 -1
  445. package/dist/server/controllers/validation/admin/upload.mjs.map +1 -1
  446. package/dist/server/controllers/validation/admin/utils.js.map +1 -1
  447. package/dist/server/controllers/validation/admin/utils.mjs.map +1 -1
  448. package/dist/server/controllers/validation/content-api/upload.js.map +1 -1
  449. package/dist/server/controllers/validation/content-api/upload.mjs.map +1 -1
  450. package/dist/server/controllers/view-configuration.js.map +1 -1
  451. package/dist/server/controllers/view-configuration.mjs.map +1 -1
  452. package/dist/server/graphql.js.map +1 -1
  453. package/dist/server/graphql.mjs.map +1 -1
  454. package/dist/server/index.js +8 -8
  455. package/dist/server/middlewares/upload.js.map +1 -1
  456. package/dist/server/middlewares/upload.mjs.map +1 -1
  457. package/dist/server/models/ai-metadata-job.js.map +1 -1
  458. package/dist/server/models/ai-metadata-job.mjs.map +1 -1
  459. package/dist/server/register.js.map +1 -1
  460. package/dist/server/register.mjs.map +1 -1
  461. package/dist/server/routes/admin.js +10 -0
  462. package/dist/server/routes/admin.js.map +1 -1
  463. package/dist/server/routes/admin.mjs +10 -0
  464. package/dist/server/routes/admin.mjs.map +1 -1
  465. package/dist/server/routes/content-api.js.map +1 -1
  466. package/dist/server/routes/content-api.mjs.map +1 -1
  467. package/dist/server/routes/index.js.map +1 -1
  468. package/dist/server/routes/index.mjs +4 -4
  469. package/dist/server/routes/index.mjs.map +1 -1
  470. package/dist/server/routes/validation/upload.js.map +1 -1
  471. package/dist/server/routes/validation/upload.mjs.map +1 -1
  472. package/dist/server/routes/view-configuration.js.map +1 -1
  473. package/dist/server/routes/view-configuration.mjs.map +1 -1
  474. package/dist/server/services/ai-metadata-jobs.js.map +1 -1
  475. package/dist/server/services/ai-metadata-jobs.mjs.map +1 -1
  476. package/dist/server/services/ai-metadata.js.map +1 -1
  477. package/dist/server/services/ai-metadata.mjs.map +1 -1
  478. package/dist/server/services/api-upload-folder.js.map +1 -1
  479. package/dist/server/services/api-upload-folder.mjs.map +1 -1
  480. package/dist/server/services/extensions/index.js.map +1 -1
  481. package/dist/server/services/extensions/index.mjs.map +1 -1
  482. package/dist/server/services/extensions/utils.js.map +1 -1
  483. package/dist/server/services/extensions/utils.mjs.map +1 -1
  484. package/dist/server/services/file.js +120 -1
  485. package/dist/server/services/file.js.map +1 -1
  486. package/dist/server/services/file.mjs +122 -3
  487. package/dist/server/services/file.mjs.map +1 -1
  488. package/dist/server/services/folder.js.map +1 -1
  489. package/dist/server/services/folder.mjs +1 -1
  490. package/dist/server/services/folder.mjs.map +1 -1
  491. package/dist/server/services/image-manipulation.js.map +1 -1
  492. package/dist/server/services/image-manipulation.mjs +1 -1
  493. package/dist/server/services/image-manipulation.mjs.map +1 -1
  494. package/dist/server/services/index.js.map +1 -1
  495. package/dist/server/services/index.mjs.map +1 -1
  496. package/dist/server/services/metrics.js.map +1 -1
  497. package/dist/server/services/metrics.mjs.map +1 -1
  498. package/dist/server/services/provider.js.map +1 -1
  499. package/dist/server/services/provider.mjs.map +1 -1
  500. package/dist/server/services/upload.js.map +1 -1
  501. package/dist/server/services/upload.mjs +1 -1
  502. package/dist/server/services/upload.mjs.map +1 -1
  503. package/dist/server/services/weekly-metrics.js.map +1 -1
  504. package/dist/server/services/weekly-metrics.mjs.map +1 -1
  505. package/dist/server/src/controllers/admin-upload.d.ts +13 -0
  506. package/dist/server/src/controllers/admin-upload.d.ts.map +1 -1
  507. package/dist/server/src/controllers/index.d.ts +1 -0
  508. package/dist/server/src/controllers/index.d.ts.map +1 -1
  509. package/dist/server/src/index.d.ts +2 -0
  510. package/dist/server/src/index.d.ts.map +1 -1
  511. package/dist/server/src/routes/admin.d.ts.map +1 -1
  512. package/dist/server/src/services/file.d.ts +15 -0
  513. package/dist/server/src/services/file.d.ts.map +1 -1
  514. package/dist/server/src/services/index.d.ts +1 -0
  515. package/dist/server/src/services/index.d.ts.map +1 -1
  516. package/dist/server/utils/cron.js.map +1 -1
  517. package/dist/server/utils/cron.mjs.map +1 -1
  518. package/dist/server/utils/images.js.map +1 -1
  519. package/dist/server/utils/images.mjs.map +1 -1
  520. package/dist/server/utils/index.js.map +1 -1
  521. package/dist/server/utils/index.mjs.map +1 -1
  522. package/dist/server/utils/mime-validation.js.map +1 -1
  523. package/dist/server/utils/mime-validation.mjs.map +1 -1
  524. package/dist/shared/contracts/files.d.ts +11 -0
  525. package/dist/shared/contracts/files.d.ts.map +1 -1
  526. package/package.json +8 -8
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssetPreview.js","sources":["../../../../../../../admin/src/future/pages/Assets/components/AssetDetails/AssetPreview.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Flex, Loader, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { AssetType } from '../../../../enums';\nimport { prefixFileUrlWithBackendUrl } from '../../../../utils/files';\nimport { getAssetIcon } from '../../../../utils/getAssetIcon';\nimport { getTranslationKey } from '../../../../utils/translations';\n\nimport type {\n File,\n AssetWithPopulatedCreatedBy,\n} from '../../../../../../../shared/contracts/files';\n\n/* -------------------------------------------------------------------------------------------------\n * Styled components\n * -----------------------------------------------------------------------------------------------*/\n\nconst PreviewContainer = styled(Box)`\n position: relative;\n width: 100%;\n aspect-ratio: 16 / 9;\n max-height: 24rem;\n overflow: hidden;\n border-radius: ${({ theme }) => theme.borderRadius};\n padding: ${({ theme }) => theme.spaces[3]};\n background: repeating-conic-gradient(\n ${({ theme }) => theme.colors.neutral100} 0% 25%,\n transparent 0% 50%\n )\n 50% / 20px 20px;\n`;\n\nconst AssetContainer = styled(Flex)`\n justify-content: center;\n position: relative;\n z-index: 2;\n width: 100%;\n height: 100%;\n`;\n\nconst StyledImage = styled.img`\n max-width: 100%;\n max-height: 100%;\n object-fit: contain;\n`;\n\nconst StyledVideo = styled.video`\n max-width: 100%;\n max-height: 100%;\n object-fit: contain;\n`;\n\nconst StyledAudio = styled.audio`\n width: 100%;\n`;\n\nconst StyledPdfIframe = styled.iframe`\n width: 100%;\n height: 100%;\n min-height: 200px;\n border: none;\n`;\n\nconst IconFallback = styled(Flex)`\n height: 100%;\n aspect-ratio: 1;\n width: auto;\n max-width: 100%;\n margin: 0 auto;\n color: ${({ theme }) => theme.colors.neutral500};\n background: ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst LoaderOverlay = styled(Flex)`\n position: absolute;\n inset: 0;\n z-index: 1;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * AssetLoader\n * -----------------------------------------------------------------------------------------------*/\n\nconst AssetLoader = () => {\n const { formatMessage } = useIntl();\n return (\n <LoaderOverlay justifyContent=\"center\" alignItems=\"center\">\n <Loader>{formatMessage({ id: 'app.loading', defaultMessage: 'Loading...' })}</Loader>\n </LoaderOverlay>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AssetPreviewContent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AssetPreviewProps {\n asset: File | AssetWithPopulatedCreatedBy;\n}\n\nexport const AssetPreview = ({ asset }: AssetPreviewProps) => {\n const { formatMessage } = useIntl();\n const { alternativeText, ext, mime, url } = asset;\n const mediaUrl = prefixFileUrlWithBackendUrl(url);\n\n const [isMediaLoaded, setIsMediaLoaded] = React.useState(false);\n React.useEffect(() => {\n setIsMediaLoaded(false);\n }, [mediaUrl]);\n\n if (mime?.includes(AssetType.Image)) {\n const imageUrl = prefixFileUrlWithBackendUrl(url);\n\n if (imageUrl) {\n return (\n <PreviewContainer>\n {!isMediaLoaded && <AssetLoader />}\n <AssetContainer>\n <StyledImage\n src={imageUrl}\n alt={alternativeText || asset.name || ''}\n onLoad={() => setIsMediaLoaded(true)}\n onError={() => setIsMediaLoaded(true)}\n />\n </AssetContainer>\n </PreviewContainer>\n );\n }\n }\n\n if (mime?.includes(AssetType.Video) && mediaUrl) {\n return (\n <PreviewContainer>\n {!isMediaLoaded && <AssetLoader />}\n <AssetContainer>\n <StyledVideo\n src={mediaUrl}\n controls\n title={asset.name}\n onLoadedData={() => setIsMediaLoaded(true)}\n onError={() => setIsMediaLoaded(true)}\n >\n {formatMessage({\n id: getTranslationKey('asset-details.videoNotSupported'),\n defaultMessage: 'Your browser does not support the video tag.',\n })}\n </StyledVideo>\n </AssetContainer>\n </PreviewContainer>\n );\n }\n\n if (mime?.includes(AssetType.Audio) && mediaUrl) {\n return (\n <PreviewContainer>\n {!isMediaLoaded && <AssetLoader />}\n <AssetContainer>\n <Flex\n width=\"100%\"\n padding={4}\n justifyContent=\"center\"\n alignItems=\"center\"\n height=\"100%\"\n minHeight=\"12rem\"\n >\n <StyledAudio\n src={mediaUrl}\n controls\n onLoadedData={() => setIsMediaLoaded(true)}\n onError={() => setIsMediaLoaded(true)}\n />\n </Flex>\n </AssetContainer>\n </PreviewContainer>\n );\n }\n\n const isPdf =\n ext?.toLowerCase() === 'pdf' || ext?.toLowerCase() === '.pdf' || mime === 'application/pdf';\n if (isPdf && mediaUrl) {\n return (\n <PreviewContainer>\n {!isMediaLoaded && <AssetLoader />}\n <AssetContainer>\n <StyledPdfIframe\n src={`${mediaUrl}#toolbar=0`}\n title={asset.name}\n onLoad={() => setIsMediaLoaded(true)}\n />\n </AssetContainer>\n </PreviewContainer>\n );\n }\n\n const DocIcon = getAssetIcon(mime, ext);\n return (\n <PreviewContainer>\n <IconFallback\n justifyContent=\"center\"\n alignItems=\"center\"\n gap={1}\n direction=\"column\"\n hasRadius\n >\n <DocIcon width={24} height={24} />\n <Typography variant=\"pi\">\n {formatMessage({\n id: getTranslationKey('asset-details.noPreview'),\n defaultMessage: 'No preview available',\n })}\n </Typography>\n </IconFallback>\n </PreviewContainer>\n );\n};\n"],"names":["PreviewContainer","styled","Box","theme","borderRadius","spaces","colors","neutral100","AssetContainer","Flex","StyledImage","img","StyledVideo","video","StyledAudio","audio","StyledPdfIframe","iframe","IconFallback","neutral500","neutral150","LoaderOverlay","AssetLoader","formatMessage","useIntl","_jsx","justifyContent","alignItems","Loader","id","defaultMessage","AssetPreview","asset","alternativeText","ext","mime","url","mediaUrl","prefixFileUrlWithBackendUrl","isMediaLoaded","setIsMediaLoaded","React","useState","useEffect","includes","AssetType","Image","imageUrl","_jsxs","src","alt","name","onLoad","onError","Video","controls","title","onLoadedData","getTranslationKey","Audio","width","padding","height","minHeight","isPdf","toLowerCase","DocIcon","getAssetIcon","gap","direction","hasRadius","Typography","variant"],"mappings":"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"}
@@ -0,0 +1,194 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import { Flex, Typography, Box, Loader } from '@strapi/design-system';
4
+ import { useIntl } from 'react-intl';
5
+ import { styled } from 'styled-components';
6
+ import { AssetType } from '../../../../enums.mjs';
7
+ import { prefixFileUrlWithBackendUrl } from '../../../../utils/files.mjs';
8
+ import { getAssetIcon } from '../../../../utils/getAssetIcon.mjs';
9
+ import { getTranslationKey } from '../../../../utils/translations.mjs';
10
+
11
+ /* -------------------------------------------------------------------------------------------------
12
+ * Styled components
13
+ * -----------------------------------------------------------------------------------------------*/ const PreviewContainer = styled(Box)`
14
+ position: relative;
15
+ width: 100%;
16
+ aspect-ratio: 16 / 9;
17
+ max-height: 24rem;
18
+ overflow: hidden;
19
+ border-radius: ${({ theme })=>theme.borderRadius};
20
+ padding: ${({ theme })=>theme.spaces[3]};
21
+ background: repeating-conic-gradient(
22
+ ${({ theme })=>theme.colors.neutral100} 0% 25%,
23
+ transparent 0% 50%
24
+ )
25
+ 50% / 20px 20px;
26
+ `;
27
+ const AssetContainer = styled(Flex)`
28
+ justify-content: center;
29
+ position: relative;
30
+ z-index: 2;
31
+ width: 100%;
32
+ height: 100%;
33
+ `;
34
+ const StyledImage = styled.img`
35
+ max-width: 100%;
36
+ max-height: 100%;
37
+ object-fit: contain;
38
+ `;
39
+ const StyledVideo = styled.video`
40
+ max-width: 100%;
41
+ max-height: 100%;
42
+ object-fit: contain;
43
+ `;
44
+ const StyledAudio = styled.audio`
45
+ width: 100%;
46
+ `;
47
+ const StyledPdfIframe = styled.iframe`
48
+ width: 100%;
49
+ height: 100%;
50
+ min-height: 200px;
51
+ border: none;
52
+ `;
53
+ const IconFallback = styled(Flex)`
54
+ height: 100%;
55
+ aspect-ratio: 1;
56
+ width: auto;
57
+ max-width: 100%;
58
+ margin: 0 auto;
59
+ color: ${({ theme })=>theme.colors.neutral500};
60
+ background: ${({ theme })=>theme.colors.neutral150};
61
+ `;
62
+ const LoaderOverlay = styled(Flex)`
63
+ position: absolute;
64
+ inset: 0;
65
+ z-index: 1;
66
+ `;
67
+ /* -------------------------------------------------------------------------------------------------
68
+ * AssetLoader
69
+ * -----------------------------------------------------------------------------------------------*/ const AssetLoader = ()=>{
70
+ const { formatMessage } = useIntl();
71
+ return /*#__PURE__*/ jsx(LoaderOverlay, {
72
+ justifyContent: "center",
73
+ alignItems: "center",
74
+ children: /*#__PURE__*/ jsx(Loader, {
75
+ children: formatMessage({
76
+ id: 'app.loading',
77
+ defaultMessage: 'Loading...'
78
+ })
79
+ })
80
+ });
81
+ };
82
+ const AssetPreview = ({ asset })=>{
83
+ const { formatMessage } = useIntl();
84
+ const { alternativeText, ext, mime, url } = asset;
85
+ const mediaUrl = prefixFileUrlWithBackendUrl(url);
86
+ const [isMediaLoaded, setIsMediaLoaded] = React.useState(false);
87
+ React.useEffect(()=>{
88
+ setIsMediaLoaded(false);
89
+ }, [
90
+ mediaUrl
91
+ ]);
92
+ if (mime?.includes(AssetType.Image)) {
93
+ const imageUrl = prefixFileUrlWithBackendUrl(url);
94
+ if (imageUrl) {
95
+ return /*#__PURE__*/ jsxs(PreviewContainer, {
96
+ children: [
97
+ !isMediaLoaded && /*#__PURE__*/ jsx(AssetLoader, {}),
98
+ /*#__PURE__*/ jsx(AssetContainer, {
99
+ children: /*#__PURE__*/ jsx(StyledImage, {
100
+ src: imageUrl,
101
+ alt: alternativeText || asset.name || '',
102
+ onLoad: ()=>setIsMediaLoaded(true),
103
+ onError: ()=>setIsMediaLoaded(true)
104
+ })
105
+ })
106
+ ]
107
+ });
108
+ }
109
+ }
110
+ if (mime?.includes(AssetType.Video) && mediaUrl) {
111
+ return /*#__PURE__*/ jsxs(PreviewContainer, {
112
+ children: [
113
+ !isMediaLoaded && /*#__PURE__*/ jsx(AssetLoader, {}),
114
+ /*#__PURE__*/ jsx(AssetContainer, {
115
+ children: /*#__PURE__*/ jsx(StyledVideo, {
116
+ src: mediaUrl,
117
+ controls: true,
118
+ title: asset.name,
119
+ onLoadedData: ()=>setIsMediaLoaded(true),
120
+ onError: ()=>setIsMediaLoaded(true),
121
+ children: formatMessage({
122
+ id: getTranslationKey('asset-details.videoNotSupported'),
123
+ defaultMessage: 'Your browser does not support the video tag.'
124
+ })
125
+ })
126
+ })
127
+ ]
128
+ });
129
+ }
130
+ if (mime?.includes(AssetType.Audio) && mediaUrl) {
131
+ return /*#__PURE__*/ jsxs(PreviewContainer, {
132
+ children: [
133
+ !isMediaLoaded && /*#__PURE__*/ jsx(AssetLoader, {}),
134
+ /*#__PURE__*/ jsx(AssetContainer, {
135
+ children: /*#__PURE__*/ jsx(Flex, {
136
+ width: "100%",
137
+ padding: 4,
138
+ justifyContent: "center",
139
+ alignItems: "center",
140
+ height: "100%",
141
+ minHeight: "12rem",
142
+ children: /*#__PURE__*/ jsx(StyledAudio, {
143
+ src: mediaUrl,
144
+ controls: true,
145
+ onLoadedData: ()=>setIsMediaLoaded(true),
146
+ onError: ()=>setIsMediaLoaded(true)
147
+ })
148
+ })
149
+ })
150
+ ]
151
+ });
152
+ }
153
+ const isPdf = ext?.toLowerCase() === 'pdf' || ext?.toLowerCase() === '.pdf' || mime === 'application/pdf';
154
+ if (isPdf && mediaUrl) {
155
+ return /*#__PURE__*/ jsxs(PreviewContainer, {
156
+ children: [
157
+ !isMediaLoaded && /*#__PURE__*/ jsx(AssetLoader, {}),
158
+ /*#__PURE__*/ jsx(AssetContainer, {
159
+ children: /*#__PURE__*/ jsx(StyledPdfIframe, {
160
+ src: `${mediaUrl}#toolbar=0`,
161
+ title: asset.name,
162
+ onLoad: ()=>setIsMediaLoaded(true)
163
+ })
164
+ })
165
+ ]
166
+ });
167
+ }
168
+ const DocIcon = getAssetIcon(mime, ext);
169
+ return /*#__PURE__*/ jsx(PreviewContainer, {
170
+ children: /*#__PURE__*/ jsxs(IconFallback, {
171
+ justifyContent: "center",
172
+ alignItems: "center",
173
+ gap: 1,
174
+ direction: "column",
175
+ hasRadius: true,
176
+ children: [
177
+ /*#__PURE__*/ jsx(DocIcon, {
178
+ width: 24,
179
+ height: 24
180
+ }),
181
+ /*#__PURE__*/ jsx(Typography, {
182
+ variant: "pi",
183
+ children: formatMessage({
184
+ id: getTranslationKey('asset-details.noPreview'),
185
+ defaultMessage: 'No preview available'
186
+ })
187
+ })
188
+ ]
189
+ })
190
+ });
191
+ };
192
+
193
+ export { AssetPreview };
194
+ //# sourceMappingURL=AssetPreview.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssetPreview.mjs","sources":["../../../../../../../admin/src/future/pages/Assets/components/AssetDetails/AssetPreview.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Flex, Loader, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { AssetType } from '../../../../enums';\nimport { prefixFileUrlWithBackendUrl } from '../../../../utils/files';\nimport { getAssetIcon } from '../../../../utils/getAssetIcon';\nimport { getTranslationKey } from '../../../../utils/translations';\n\nimport type {\n File,\n AssetWithPopulatedCreatedBy,\n} from '../../../../../../../shared/contracts/files';\n\n/* -------------------------------------------------------------------------------------------------\n * Styled components\n * -----------------------------------------------------------------------------------------------*/\n\nconst PreviewContainer = styled(Box)`\n position: relative;\n width: 100%;\n aspect-ratio: 16 / 9;\n max-height: 24rem;\n overflow: hidden;\n border-radius: ${({ theme }) => theme.borderRadius};\n padding: ${({ theme }) => theme.spaces[3]};\n background: repeating-conic-gradient(\n ${({ theme }) => theme.colors.neutral100} 0% 25%,\n transparent 0% 50%\n )\n 50% / 20px 20px;\n`;\n\nconst AssetContainer = styled(Flex)`\n justify-content: center;\n position: relative;\n z-index: 2;\n width: 100%;\n height: 100%;\n`;\n\nconst StyledImage = styled.img`\n max-width: 100%;\n max-height: 100%;\n object-fit: contain;\n`;\n\nconst StyledVideo = styled.video`\n max-width: 100%;\n max-height: 100%;\n object-fit: contain;\n`;\n\nconst StyledAudio = styled.audio`\n width: 100%;\n`;\n\nconst StyledPdfIframe = styled.iframe`\n width: 100%;\n height: 100%;\n min-height: 200px;\n border: none;\n`;\n\nconst IconFallback = styled(Flex)`\n height: 100%;\n aspect-ratio: 1;\n width: auto;\n max-width: 100%;\n margin: 0 auto;\n color: ${({ theme }) => theme.colors.neutral500};\n background: ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst LoaderOverlay = styled(Flex)`\n position: absolute;\n inset: 0;\n z-index: 1;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * AssetLoader\n * -----------------------------------------------------------------------------------------------*/\n\nconst AssetLoader = () => {\n const { formatMessage } = useIntl();\n return (\n <LoaderOverlay justifyContent=\"center\" alignItems=\"center\">\n <Loader>{formatMessage({ id: 'app.loading', defaultMessage: 'Loading...' })}</Loader>\n </LoaderOverlay>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AssetPreviewContent\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AssetPreviewProps {\n asset: File | AssetWithPopulatedCreatedBy;\n}\n\nexport const AssetPreview = ({ asset }: AssetPreviewProps) => {\n const { formatMessage } = useIntl();\n const { alternativeText, ext, mime, url } = asset;\n const mediaUrl = prefixFileUrlWithBackendUrl(url);\n\n const [isMediaLoaded, setIsMediaLoaded] = React.useState(false);\n React.useEffect(() => {\n setIsMediaLoaded(false);\n }, [mediaUrl]);\n\n if (mime?.includes(AssetType.Image)) {\n const imageUrl = prefixFileUrlWithBackendUrl(url);\n\n if (imageUrl) {\n return (\n <PreviewContainer>\n {!isMediaLoaded && <AssetLoader />}\n <AssetContainer>\n <StyledImage\n src={imageUrl}\n alt={alternativeText || asset.name || ''}\n onLoad={() => setIsMediaLoaded(true)}\n onError={() => setIsMediaLoaded(true)}\n />\n </AssetContainer>\n </PreviewContainer>\n );\n }\n }\n\n if (mime?.includes(AssetType.Video) && mediaUrl) {\n return (\n <PreviewContainer>\n {!isMediaLoaded && <AssetLoader />}\n <AssetContainer>\n <StyledVideo\n src={mediaUrl}\n controls\n title={asset.name}\n onLoadedData={() => setIsMediaLoaded(true)}\n onError={() => setIsMediaLoaded(true)}\n >\n {formatMessage({\n id: getTranslationKey('asset-details.videoNotSupported'),\n defaultMessage: 'Your browser does not support the video tag.',\n })}\n </StyledVideo>\n </AssetContainer>\n </PreviewContainer>\n );\n }\n\n if (mime?.includes(AssetType.Audio) && mediaUrl) {\n return (\n <PreviewContainer>\n {!isMediaLoaded && <AssetLoader />}\n <AssetContainer>\n <Flex\n width=\"100%\"\n padding={4}\n justifyContent=\"center\"\n alignItems=\"center\"\n height=\"100%\"\n minHeight=\"12rem\"\n >\n <StyledAudio\n src={mediaUrl}\n controls\n onLoadedData={() => setIsMediaLoaded(true)}\n onError={() => setIsMediaLoaded(true)}\n />\n </Flex>\n </AssetContainer>\n </PreviewContainer>\n );\n }\n\n const isPdf =\n ext?.toLowerCase() === 'pdf' || ext?.toLowerCase() === '.pdf' || mime === 'application/pdf';\n if (isPdf && mediaUrl) {\n return (\n <PreviewContainer>\n {!isMediaLoaded && <AssetLoader />}\n <AssetContainer>\n <StyledPdfIframe\n src={`${mediaUrl}#toolbar=0`}\n title={asset.name}\n onLoad={() => setIsMediaLoaded(true)}\n />\n </AssetContainer>\n </PreviewContainer>\n );\n }\n\n const DocIcon = getAssetIcon(mime, ext);\n return (\n <PreviewContainer>\n <IconFallback\n justifyContent=\"center\"\n alignItems=\"center\"\n gap={1}\n direction=\"column\"\n hasRadius\n >\n <DocIcon width={24} height={24} />\n <Typography variant=\"pi\">\n {formatMessage({\n id: getTranslationKey('asset-details.noPreview'),\n defaultMessage: 'No preview available',\n })}\n </Typography>\n </IconFallback>\n </PreviewContainer>\n );\n};\n"],"names":["PreviewContainer","styled","Box","theme","borderRadius","spaces","colors","neutral100","AssetContainer","Flex","StyledImage","img","StyledVideo","video","StyledAudio","audio","StyledPdfIframe","iframe","IconFallback","neutral500","neutral150","LoaderOverlay","AssetLoader","formatMessage","useIntl","_jsx","justifyContent","alignItems","Loader","id","defaultMessage","AssetPreview","asset","alternativeText","ext","mime","url","mediaUrl","prefixFileUrlWithBackendUrl","isMediaLoaded","setIsMediaLoaded","React","useState","useEffect","includes","AssetType","Image","imageUrl","_jsxs","src","alt","name","onLoad","onError","Video","controls","title","onLoadedData","getTranslationKey","Audio","width","padding","height","minHeight","isPdf","toLowerCase","DocIcon","getAssetIcon","gap","direction","hasRadius","Typography","variant"],"mappings":"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"}
@@ -17,6 +17,16 @@ var useFolderNavigation = require('../hooks/useFolderNavigation.js');
17
17
  border: 1px solid ${({ theme })=>theme.colors.neutral200};
18
18
  border-radius: 8px;
19
19
  overflow: hidden;
20
+ cursor: pointer;
21
+
22
+ &:hover {
23
+ background: ${({ theme })=>theme.colors.primary100};
24
+ }
25
+
26
+ &:focus-visible {
27
+ outline: 2px solid ${({ theme })=>theme.colors.primary600};
28
+ outline-offset: 2px;
29
+ }
20
30
  `;
21
31
  /* -------------------------------------------------------------------------------------------------
22
32
  * FolderCard
@@ -54,9 +64,16 @@ const FolderName = styledComponents.styled(designSystem.Typography)`
54
64
  const FolderCard = ({ folder })=>{
55
65
  const { formatMessage } = reactIntl.useIntl();
56
66
  const { navigateToFolder } = useFolderNavigation.useFolderNavigation();
67
+ const handleKeyDown = (e)=>{
68
+ if (e.key === 'Enter' || e.key === ' ') {
69
+ e.preventDefault();
70
+ navigateToFolder(folder);
71
+ }
72
+ };
57
73
  return /*#__PURE__*/ jsxRuntime.jsxs(StyledFolderCard, {
58
74
  onClick: ()=>navigateToFolder(folder),
59
- role: "button",
75
+ onKeyDown: handleKeyDown,
76
+ role: "listitem",
60
77
  tabIndex: 0,
61
78
  children: [
62
79
  /*#__PURE__*/ jsxRuntime.jsx(FolderIconContainer, {
@@ -141,10 +158,11 @@ const AssetPreview = ({ asset })=>{
141
158
  /* -------------------------------------------------------------------------------------------------
142
159
  * AssetCard
143
160
  * -----------------------------------------------------------------------------------------------*/ const StyledCardHeader = styledComponents.styled(designSystem.CardHeader)`
144
- border-bottom: none;
161
+ border-bottom: 1px solid ${({ theme })=>theme.colors.neutral200};
145
162
  `;
146
163
  const CardFooter = styledComponents.styled(designSystem.Flex)`
147
164
  min-width: 0;
165
+ width: 100%;
148
166
  `;
149
167
  const FileTypeIcon = styledComponents.styled(designSystem.Flex)`
150
168
  color: ${({ theme })=>theme.colors.neutral600};
@@ -154,10 +172,20 @@ const FileName = styledComponents.styled(designSystem.Typography)`
154
172
  flex: 1;
155
173
  min-width: 0;
156
174
  `;
157
- const AssetCard = ({ asset })=>{
175
+ const AssetCard = ({ asset, onAssetItemClick })=>{
158
176
  const { formatMessage } = reactIntl.useIntl();
159
177
  const TypeIcon = getAssetIcon.getAssetIcon(asset.mime, asset.ext);
178
+ const handleKeyDown = (e)=>{
179
+ if (e.key === 'Enter' || e.key === ' ') {
180
+ e.preventDefault();
181
+ onAssetItemClick(asset.id);
182
+ }
183
+ };
160
184
  return /*#__PURE__*/ jsxRuntime.jsxs(StyledCard, {
185
+ tabIndex: 0,
186
+ role: "listitem",
187
+ onClick: ()=>onAssetItemClick(asset.id),
188
+ onKeyDown: handleKeyDown,
161
189
  children: [
162
190
  /*#__PURE__*/ jsxRuntime.jsx(StyledCardHeader, {
163
191
  children: /*#__PURE__*/ jsxRuntime.jsx(AssetPreview, {
@@ -168,12 +196,11 @@ const AssetCard = ({ asset })=>{
168
196
  children: /*#__PURE__*/ jsxRuntime.jsxs(CardFooter, {
169
197
  alignItems: "center",
170
198
  gap: 2,
171
- paddingTop: 2,
172
199
  children: [
173
200
  /*#__PURE__*/ jsxRuntime.jsx(FileTypeIcon, {
174
201
  children: /*#__PURE__*/ jsxRuntime.jsx(TypeIcon, {
175
- width: 16,
176
- height: 16
202
+ width: 20,
203
+ height: 20
177
204
  })
178
205
  }),
179
206
  /*#__PURE__*/ jsxRuntime.jsx(FileName, {
@@ -195,7 +222,7 @@ const AssetCard = ({ asset })=>{
195
222
  ]
196
223
  });
197
224
  };
198
- const AssetsGrid = ({ assets, folders = [] })=>{
225
+ const AssetsGrid = ({ assets, folders = [], onAssetItemClick })=>{
199
226
  const { formatMessage } = reactIntl.useIntl();
200
227
  const totalItems = folders.length + assets.length;
201
228
  if (totalItems === 0) {
@@ -212,6 +239,7 @@ const AssetsGrid = ({ assets, folders = [] })=>{
212
239
  }
213
240
  return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Grid.Root, {
214
241
  gap: 4,
242
+ role: "list",
215
243
  children: [
216
244
  folders.length > 0 && /*#__PURE__*/ jsxRuntime.jsx(FoldersRow, {
217
245
  children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Root, {
@@ -235,7 +263,8 @@ const AssetsGrid = ({ assets, folders = [] })=>{
235
263
  direction: "column",
236
264
  alignItems: "stretch",
237
265
  children: /*#__PURE__*/ jsxRuntime.jsx(AssetCard, {
238
- asset: asset
266
+ asset: asset,
267
+ onAssetItemClick: onAssetItemClick
239
268
  })
240
269
  }, asset.id))
241
270
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"AssetsGrid.js","sources":["../../../../../../admin/src/future/pages/Assets/components/AssetsGrid.tsx"],"sourcesContent":["import {\n Box,\n Card,\n CardBody,\n CardHeader,\n Flex,\n Grid,\n IconButton,\n Typography,\n} from '@strapi/design-system';\nimport { Folder as FolderIcon, More } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { AssetType } from '../../../enums';\nimport { prefixFileUrlWithBackendUrl } from '../../../utils/files';\nimport { getAssetIcon } from '../../../utils/getAssetIcon';\nimport { getTranslationKey } from '../../../utils/translations';\nimport { useFolderNavigation } from '../hooks/useFolderNavigation';\n\nimport type { File } from '../../../../../../shared/contracts/files';\nimport type { Folder } from '../../../../../../shared/contracts/folders';\n\n/* -------------------------------------------------------------------------------------------------\n * AssetsGrid\n * -----------------------------------------------------------------------------------------------*/\n\nconst StyledCard = styled(Card)`\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-radius: 8px;\n overflow: hidden;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * FolderCard\n * -----------------------------------------------------------------------------------------------*/\n\nconst FoldersRow = styled(Box)`\n grid-column: 1 / -1;\n`;\n\nconst StyledFolderCard = styled(Flex)`\n width: 100%;\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[3]}`}; // 8px 12px\n align-items: center;\n gap: ${({ theme }) => theme.spaces[2]}; // 8px\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-radius: ${({ theme }) => theme.borderRadius};\n background: ${({ theme }) => theme.colors.neutral0};\n cursor: pointer;\n transition: background 0.2s;\n\n &:hover {\n background: ${({ theme }) => theme.colors.primary100};\n }\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme.colors.primary600};\n outline-offset: 2px;\n }\n`;\n\nconst FolderIconContainer = styled(Flex)`\n flex-shrink: 0;\n color: ${({ theme }) => theme.colors.neutral600};\n`;\n\nconst FolderName = styled(Typography)`\n flex: 1;\n min-width: 0;\n`;\n\ninterface FolderCardProps {\n folder: Folder;\n}\n\nconst FolderCard = ({ folder }: FolderCardProps) => {\n const { formatMessage } = useIntl();\n const { navigateToFolder } = useFolderNavigation();\n\n return (\n <StyledFolderCard onClick={() => navigateToFolder(folder)} role=\"button\" tabIndex={0}>\n <FolderIconContainer>\n <FolderIcon width={20} height={20} />\n </FolderIconContainer>\n <FolderName textColor=\"neutral800\" ellipsis>\n {folder.name}\n </FolderName>\n <IconButton\n label={formatMessage({\n id: getTranslationKey('control-card.more-actions'),\n defaultMessage: 'More actions',\n })}\n variant=\"ghost\"\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n >\n <More />\n </IconButton>\n </StyledFolderCard>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AssetPreview\n * -----------------------------------------------------------------------------------------------*/\n\nconst PreviewContainer = styled(Box)`\n position: relative;\n width: 100%;\n padding-bottom: 62.5%;\n height: 0;\n overflow: hidden;\n background: repeating-conic-gradient(\n ${({ theme }) => theme.colors.neutral100} 0% 25%,\n transparent 0% 50%\n )\n 50% / 20px 20px;\n`;\n\nconst StyledImage = styled.img`\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n`;\n\nconst IconPreview = styled(Flex)`\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n color: ${({ theme }) => theme.colors.neutral500};\n background: ${({ theme }) => theme.colors.neutral100};\n`;\n\ninterface AssetPreviewProps {\n asset: File;\n}\n\nconst AssetPreview = ({ asset }: AssetPreviewProps) => {\n const { alternativeText, ext, formats, mime, url } = asset;\n\n if (mime?.includes(AssetType.Image)) {\n const mediaURL =\n prefixFileUrlWithBackendUrl(formats?.thumbnail?.url) ?? prefixFileUrlWithBackendUrl(url);\n\n if (mediaURL) {\n return (\n <PreviewContainer>\n <StyledImage src={mediaURL} alt={alternativeText || ''} />\n </PreviewContainer>\n );\n }\n }\n\n const DocIcon = getAssetIcon(mime, ext);\n\n return (\n <PreviewContainer>\n <IconPreview justifyContent=\"center\" alignItems=\"center\">\n <DocIcon width={48} height={48} />\n </IconPreview>\n </PreviewContainer>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AssetCard\n * -----------------------------------------------------------------------------------------------*/\n\nconst StyledCardHeader = styled(CardHeader)`\n border-bottom: none;\n`;\n\nconst CardFooter = styled(Flex)`\n min-width: 0;\n`;\n\nconst FileTypeIcon = styled(Flex)`\n color: ${({ theme }) => theme.colors.neutral600};\n flex-shrink: 0;\n`;\n\nconst FileName = styled(Typography)`\n flex: 1;\n min-width: 0;\n`;\n\ninterface AssetCardProps {\n asset: File;\n}\n\nconst AssetCard = ({ asset }: AssetCardProps) => {\n const { formatMessage } = useIntl();\n const TypeIcon = getAssetIcon(asset.mime, asset.ext);\n\n return (\n <StyledCard>\n <StyledCardHeader>\n <AssetPreview asset={asset} />\n </StyledCardHeader>\n <CardBody>\n <CardFooter alignItems=\"center\" gap={2} paddingTop={2}>\n <FileTypeIcon>\n <TypeIcon width={16} height={16} />\n </FileTypeIcon>\n <FileName textColor=\"primary800\" ellipsis>\n {asset.name}\n </FileName>\n <IconButton\n label={formatMessage({\n id: getTranslationKey('control-card.more-actions'),\n defaultMessage: 'More actions',\n })}\n variant=\"ghost\"\n >\n <More />\n </IconButton>\n </CardFooter>\n </CardBody>\n </StyledCard>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AssetsGrid\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AssetsGridProps {\n assets: File[];\n folders?: Folder[];\n}\n\nexport const AssetsGrid = ({ assets, folders = [] }: AssetsGridProps) => {\n const { formatMessage } = useIntl();\n\n const totalItems = folders.length + assets.length;\n\n if (totalItems === 0) {\n return (\n <Box padding={8}>\n <Typography textColor=\"neutral600\">\n {formatMessage({\n id: 'app.components.EmptyStateLayout.content-document',\n defaultMessage: 'No content found',\n })}\n </Typography>\n </Box>\n );\n }\n\n return (\n <Grid.Root gap={4}>\n {folders.length > 0 && (\n <FoldersRow>\n <Grid.Root gap={4}>\n {folders.map((folder) => (\n <Grid.Item col={3} m={4} s={6} xs={12} key={`folder-${folder.id}`}>\n <FolderCard folder={folder} />\n </Grid.Item>\n ))}\n </Grid.Root>\n </FoldersRow>\n )}\n {assets.map((asset) => (\n <Grid.Item\n col={3}\n m={4}\n s={6}\n xs={12}\n key={asset.id}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <AssetCard asset={asset} />\n </Grid.Item>\n ))}\n </Grid.Root>\n );\n};\n"],"names":["StyledCard","styled","Card","theme","colors","neutral200","FoldersRow","Box","StyledFolderCard","Flex","spaces","borderRadius","neutral0","primary100","primary600","FolderIconContainer","neutral600","FolderName","Typography","FolderCard","folder","formatMessage","useIntl","navigateToFolder","useFolderNavigation","_jsxs","onClick","role","tabIndex","_jsx","FolderIcon","width","height","textColor","ellipsis","name","IconButton","label","id","getTranslationKey","defaultMessage","variant","e","stopPropagation","More","PreviewContainer","neutral100","StyledImage","img","IconPreview","neutral500","AssetPreview","asset","alternativeText","ext","formats","mime","url","includes","AssetType","Image","mediaURL","prefixFileUrlWithBackendUrl","thumbnail","src","alt","DocIcon","getAssetIcon","justifyContent","alignItems","StyledCardHeader","CardHeader","CardFooter","FileTypeIcon","FileName","AssetCard","TypeIcon","CardBody","gap","paddingTop","AssetsGrid","assets","folders","totalItems","length","padding","Grid","Root","map","Item","col","m","s","xs","direction"],"mappings":"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"}
1
+ {"version":3,"file":"AssetsGrid.js","sources":["../../../../../../admin/src/future/pages/Assets/components/AssetsGrid.tsx"],"sourcesContent":["import {\n Box,\n Card,\n CardBody,\n CardHeader,\n Flex,\n Grid,\n IconButton,\n Typography,\n} from '@strapi/design-system';\nimport { Folder as FolderIcon, More } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { AssetType } from '../../../enums';\nimport { prefixFileUrlWithBackendUrl } from '../../../utils/files';\nimport { getAssetIcon } from '../../../utils/getAssetIcon';\nimport { getTranslationKey } from '../../../utils/translations';\nimport { useFolderNavigation } from '../hooks/useFolderNavigation';\n\nimport type { File } from '../../../../../../shared/contracts/files';\nimport type { Folder } from '../../../../../../shared/contracts/folders';\n\n/* -------------------------------------------------------------------------------------------------\n * AssetsGrid\n * -----------------------------------------------------------------------------------------------*/\n\nconst StyledCard = styled(Card)`\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-radius: 8px;\n overflow: hidden;\n cursor: pointer;\n\n &:hover {\n background: ${({ theme }) => theme.colors.primary100};\n }\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme.colors.primary600};\n outline-offset: 2px;\n }\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * FolderCard\n * -----------------------------------------------------------------------------------------------*/\n\nconst FoldersRow = styled(Box)`\n grid-column: 1 / -1;\n`;\n\nconst StyledFolderCard = styled(Flex)`\n width: 100%;\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[3]}`}; // 8px 12px\n align-items: center;\n gap: ${({ theme }) => theme.spaces[2]}; // 8px\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-radius: ${({ theme }) => theme.borderRadius};\n background: ${({ theme }) => theme.colors.neutral0};\n cursor: pointer;\n transition: background 0.2s;\n\n &:hover {\n background: ${({ theme }) => theme.colors.primary100};\n }\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme.colors.primary600};\n outline-offset: 2px;\n }\n`;\n\nconst FolderIconContainer = styled(Flex)`\n flex-shrink: 0;\n color: ${({ theme }) => theme.colors.neutral600};\n`;\n\nconst FolderName = styled(Typography)`\n flex: 1;\n min-width: 0;\n`;\n\ninterface FolderCardProps {\n folder: Folder;\n}\n\nconst FolderCard = ({ folder }: FolderCardProps) => {\n const { formatMessage } = useIntl();\n const { navigateToFolder } = useFolderNavigation();\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n navigateToFolder(folder);\n }\n };\n\n return (\n <StyledFolderCard\n onClick={() => navigateToFolder(folder)}\n onKeyDown={handleKeyDown}\n role=\"listitem\"\n tabIndex={0}\n >\n <FolderIconContainer>\n <FolderIcon width={20} height={20} />\n </FolderIconContainer>\n <FolderName textColor=\"neutral800\" ellipsis>\n {folder.name}\n </FolderName>\n <IconButton\n label={formatMessage({\n id: getTranslationKey('control-card.more-actions'),\n defaultMessage: 'More actions',\n })}\n variant=\"ghost\"\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n >\n <More />\n </IconButton>\n </StyledFolderCard>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AssetPreview\n * -----------------------------------------------------------------------------------------------*/\n\nconst PreviewContainer = styled(Box)`\n position: relative;\n width: 100%;\n padding-bottom: 62.5%;\n height: 0;\n overflow: hidden;\n background: repeating-conic-gradient(\n ${({ theme }) => theme.colors.neutral100} 0% 25%,\n transparent 0% 50%\n )\n 50% / 20px 20px;\n`;\n\nconst StyledImage = styled.img`\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n object-fit: cover;\n`;\n\nconst IconPreview = styled(Flex)`\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n color: ${({ theme }) => theme.colors.neutral500};\n background: ${({ theme }) => theme.colors.neutral100};\n`;\n\ninterface AssetPreviewProps {\n asset: File;\n}\n\nconst AssetPreview = ({ asset }: AssetPreviewProps) => {\n const { alternativeText, ext, formats, mime, url } = asset;\n\n if (mime?.includes(AssetType.Image)) {\n const mediaURL =\n prefixFileUrlWithBackendUrl(formats?.thumbnail?.url) ?? prefixFileUrlWithBackendUrl(url);\n\n if (mediaURL) {\n return (\n <PreviewContainer>\n <StyledImage src={mediaURL} alt={alternativeText || ''} />\n </PreviewContainer>\n );\n }\n }\n\n const DocIcon = getAssetIcon(mime, ext);\n\n return (\n <PreviewContainer>\n <IconPreview justifyContent=\"center\" alignItems=\"center\">\n <DocIcon width={48} height={48} />\n </IconPreview>\n </PreviewContainer>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AssetCard\n * -----------------------------------------------------------------------------------------------*/\n\nconst StyledCardHeader = styled(CardHeader)`\n border-bottom: 1px solid ${({ theme }) => theme.colors.neutral200};\n`;\n\nconst CardFooter = styled(Flex)`\n min-width: 0;\n width: 100%;\n`;\n\nconst FileTypeIcon = styled(Flex)`\n color: ${({ theme }) => theme.colors.neutral600};\n flex-shrink: 0;\n`;\n\nconst FileName = styled(Typography)`\n flex: 1;\n min-width: 0;\n`;\n\ninterface AssetCardProps {\n asset: File;\n onAssetItemClick: (assetId: number) => void;\n}\n\nconst AssetCard = ({ asset, onAssetItemClick }: AssetCardProps) => {\n const { formatMessage } = useIntl();\n const TypeIcon = getAssetIcon(asset.mime, asset.ext);\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onAssetItemClick(asset.id);\n }\n };\n\n return (\n <StyledCard\n tabIndex={0}\n role=\"listitem\"\n onClick={() => onAssetItemClick(asset.id)}\n onKeyDown={handleKeyDown}\n >\n <StyledCardHeader>\n <AssetPreview asset={asset} />\n </StyledCardHeader>\n <CardBody>\n <CardFooter alignItems=\"center\" gap={2}>\n <FileTypeIcon>\n <TypeIcon width={20} height={20} />\n </FileTypeIcon>\n <FileName textColor=\"primary800\" ellipsis>\n {asset.name}\n </FileName>\n <IconButton\n label={formatMessage({\n id: getTranslationKey('control-card.more-actions'),\n defaultMessage: 'More actions',\n })}\n variant=\"ghost\"\n >\n <More />\n </IconButton>\n </CardFooter>\n </CardBody>\n </StyledCard>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * AssetsGrid\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AssetsGridProps {\n assets: File[];\n folders?: Folder[];\n onAssetItemClick: (assetId: number) => void;\n}\n\nexport const AssetsGrid = ({ assets, folders = [], onAssetItemClick }: AssetsGridProps) => {\n const { formatMessage } = useIntl();\n\n const totalItems = folders.length + assets.length;\n\n if (totalItems === 0) {\n return (\n <Box padding={8}>\n <Typography textColor=\"neutral600\">\n {formatMessage({\n id: 'app.components.EmptyStateLayout.content-document',\n defaultMessage: 'No content found',\n })}\n </Typography>\n </Box>\n );\n }\n\n return (\n <Grid.Root gap={4} role=\"list\">\n {folders.length > 0 && (\n <FoldersRow>\n <Grid.Root gap={4}>\n {folders.map((folder) => (\n <Grid.Item col={3} m={4} s={6} xs={12} key={`folder-${folder.id}`}>\n <FolderCard folder={folder} />\n </Grid.Item>\n ))}\n </Grid.Root>\n </FoldersRow>\n )}\n {assets.map((asset) => (\n <Grid.Item\n col={3}\n m={4}\n s={6}\n xs={12}\n key={asset.id}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <AssetCard asset={asset} onAssetItemClick={onAssetItemClick} />\n </Grid.Item>\n ))}\n </Grid.Root>\n );\n};\n"],"names":["StyledCard","styled","Card","theme","colors","neutral200","primary100","primary600","FoldersRow","Box","StyledFolderCard","Flex","spaces","borderRadius","neutral0","FolderIconContainer","neutral600","FolderName","Typography","FolderCard","folder","formatMessage","useIntl","navigateToFolder","useFolderNavigation","handleKeyDown","e","key","preventDefault","_jsxs","onClick","onKeyDown","role","tabIndex","_jsx","FolderIcon","width","height","textColor","ellipsis","name","IconButton","label","id","getTranslationKey","defaultMessage","variant","stopPropagation","More","PreviewContainer","neutral100","StyledImage","img","IconPreview","neutral500","AssetPreview","asset","alternativeText","ext","formats","mime","url","includes","AssetType","Image","mediaURL","prefixFileUrlWithBackendUrl","thumbnail","src","alt","DocIcon","getAssetIcon","justifyContent","alignItems","StyledCardHeader","CardHeader","CardFooter","FileTypeIcon","FileName","AssetCard","onAssetItemClick","TypeIcon","CardBody","gap","AssetsGrid","assets","folders","totalItems","length","padding","Grid","Root","map","Item","col","m","s","xs","direction"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
- import { Card, Box, Flex, Typography, CardHeader, Grid, IconButton, CardBody } from '@strapi/design-system';
2
+ import { Box, Typography, Grid, IconButton, CardBody, Flex, Card, CardHeader } from '@strapi/design-system';
3
3
  import { Folder, More } from '@strapi/icons';
4
4
  import { useIntl } from 'react-intl';
5
5
  import { styled } from 'styled-components';
@@ -15,6 +15,16 @@ import { useFolderNavigation } from '../hooks/useFolderNavigation.mjs';
15
15
  border: 1px solid ${({ theme })=>theme.colors.neutral200};
16
16
  border-radius: 8px;
17
17
  overflow: hidden;
18
+ cursor: pointer;
19
+
20
+ &:hover {
21
+ background: ${({ theme })=>theme.colors.primary100};
22
+ }
23
+
24
+ &:focus-visible {
25
+ outline: 2px solid ${({ theme })=>theme.colors.primary600};
26
+ outline-offset: 2px;
27
+ }
18
28
  `;
19
29
  /* -------------------------------------------------------------------------------------------------
20
30
  * FolderCard
@@ -52,9 +62,16 @@ const FolderName = styled(Typography)`
52
62
  const FolderCard = ({ folder })=>{
53
63
  const { formatMessage } = useIntl();
54
64
  const { navigateToFolder } = useFolderNavigation();
65
+ const handleKeyDown = (e)=>{
66
+ if (e.key === 'Enter' || e.key === ' ') {
67
+ e.preventDefault();
68
+ navigateToFolder(folder);
69
+ }
70
+ };
55
71
  return /*#__PURE__*/ jsxs(StyledFolderCard, {
56
72
  onClick: ()=>navigateToFolder(folder),
57
- role: "button",
73
+ onKeyDown: handleKeyDown,
74
+ role: "listitem",
58
75
  tabIndex: 0,
59
76
  children: [
60
77
  /*#__PURE__*/ jsx(FolderIconContainer, {
@@ -139,10 +156,11 @@ const AssetPreview = ({ asset })=>{
139
156
  /* -------------------------------------------------------------------------------------------------
140
157
  * AssetCard
141
158
  * -----------------------------------------------------------------------------------------------*/ const StyledCardHeader = styled(CardHeader)`
142
- border-bottom: none;
159
+ border-bottom: 1px solid ${({ theme })=>theme.colors.neutral200};
143
160
  `;
144
161
  const CardFooter = styled(Flex)`
145
162
  min-width: 0;
163
+ width: 100%;
146
164
  `;
147
165
  const FileTypeIcon = styled(Flex)`
148
166
  color: ${({ theme })=>theme.colors.neutral600};
@@ -152,10 +170,20 @@ const FileName = styled(Typography)`
152
170
  flex: 1;
153
171
  min-width: 0;
154
172
  `;
155
- const AssetCard = ({ asset })=>{
173
+ const AssetCard = ({ asset, onAssetItemClick })=>{
156
174
  const { formatMessage } = useIntl();
157
175
  const TypeIcon = getAssetIcon(asset.mime, asset.ext);
176
+ const handleKeyDown = (e)=>{
177
+ if (e.key === 'Enter' || e.key === ' ') {
178
+ e.preventDefault();
179
+ onAssetItemClick(asset.id);
180
+ }
181
+ };
158
182
  return /*#__PURE__*/ jsxs(StyledCard, {
183
+ tabIndex: 0,
184
+ role: "listitem",
185
+ onClick: ()=>onAssetItemClick(asset.id),
186
+ onKeyDown: handleKeyDown,
159
187
  children: [
160
188
  /*#__PURE__*/ jsx(StyledCardHeader, {
161
189
  children: /*#__PURE__*/ jsx(AssetPreview, {
@@ -166,12 +194,11 @@ const AssetCard = ({ asset })=>{
166
194
  children: /*#__PURE__*/ jsxs(CardFooter, {
167
195
  alignItems: "center",
168
196
  gap: 2,
169
- paddingTop: 2,
170
197
  children: [
171
198
  /*#__PURE__*/ jsx(FileTypeIcon, {
172
199
  children: /*#__PURE__*/ jsx(TypeIcon, {
173
- width: 16,
174
- height: 16
200
+ width: 20,
201
+ height: 20
175
202
  })
176
203
  }),
177
204
  /*#__PURE__*/ jsx(FileName, {
@@ -193,7 +220,7 @@ const AssetCard = ({ asset })=>{
193
220
  ]
194
221
  });
195
222
  };
196
- const AssetsGrid = ({ assets, folders = [] })=>{
223
+ const AssetsGrid = ({ assets, folders = [], onAssetItemClick })=>{
197
224
  const { formatMessage } = useIntl();
198
225
  const totalItems = folders.length + assets.length;
199
226
  if (totalItems === 0) {
@@ -210,6 +237,7 @@ const AssetsGrid = ({ assets, folders = [] })=>{
210
237
  }
211
238
  return /*#__PURE__*/ jsxs(Grid.Root, {
212
239
  gap: 4,
240
+ role: "list",
213
241
  children: [
214
242
  folders.length > 0 && /*#__PURE__*/ jsx(FoldersRow, {
215
243
  children: /*#__PURE__*/ jsx(Grid.Root, {
@@ -233,7 +261,8 @@ const AssetsGrid = ({ assets, folders = [] })=>{
233
261
  direction: "column",
234
262
  alignItems: "stretch",
235
263
  children: /*#__PURE__*/ jsx(AssetCard, {
236
- asset: asset
264
+ asset: asset,
265
+ onAssetItemClick: onAssetItemClick
237
266
  })
238
267
  }, asset.id))
239
268
  ]