@strapi/upload 5.49.0 → 5.50.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 (332) hide show
  1. package/dist/admin/ai/components/AIAssetCard.js +10 -10
  2. package/dist/admin/ai/components/AIAssetCard.js.map +1 -1
  3. package/dist/admin/ai/components/AIAssetCard.mjs +11 -11
  4. package/dist/admin/ai/components/AIAssetCard.mjs.map +1 -1
  5. package/dist/admin/ai/components/AIUploadModal.js +0 -1
  6. package/dist/admin/ai/components/AIUploadModal.js.map +1 -1
  7. package/dist/admin/ai/components/AIUploadModal.mjs +0 -1
  8. package/dist/admin/ai/components/AIUploadModal.mjs.map +1 -1
  9. package/dist/admin/components/AssetCard/AssetCard.js +3 -4
  10. package/dist/admin/components/AssetCard/AssetCard.js.map +1 -1
  11. package/dist/admin/components/AssetCard/AssetCard.mjs +4 -5
  12. package/dist/admin/components/AssetCard/AssetCard.mjs.map +1 -1
  13. package/dist/admin/components/AssetCard/AssetCardBase.js +0 -1
  14. package/dist/admin/components/AssetCard/AssetCardBase.js.map +1 -1
  15. package/dist/admin/components/AssetCard/AssetCardBase.mjs +0 -1
  16. package/dist/admin/components/AssetCard/AssetCardBase.mjs.map +1 -1
  17. package/dist/admin/components/AssetCard/ImageAssetCard.js +0 -1
  18. package/dist/admin/components/AssetCard/ImageAssetCard.js.map +1 -1
  19. package/dist/admin/components/AssetCard/ImageAssetCard.mjs +0 -1
  20. package/dist/admin/components/AssetCard/ImageAssetCard.mjs.map +1 -1
  21. package/dist/admin/components/AssetCard/UploadingAssetCard.js +3 -4
  22. package/dist/admin/components/AssetCard/UploadingAssetCard.js.map +1 -1
  23. package/dist/admin/components/AssetCard/UploadingAssetCard.mjs +4 -5
  24. package/dist/admin/components/AssetCard/UploadingAssetCard.mjs.map +1 -1
  25. package/dist/admin/components/AssetCard/VideoAssetCard.js +0 -1
  26. package/dist/admin/components/AssetCard/VideoAssetCard.js.map +1 -1
  27. package/dist/admin/components/AssetCard/VideoAssetCard.mjs +0 -1
  28. package/dist/admin/components/AssetCard/VideoAssetCard.mjs.map +1 -1
  29. package/dist/admin/components/AssetDialog/AssetDialog.js +0 -1
  30. package/dist/admin/components/AssetDialog/AssetDialog.js.map +1 -1
  31. package/dist/admin/components/AssetDialog/AssetDialog.mjs +0 -1
  32. package/dist/admin/components/AssetDialog/AssetDialog.mjs.map +1 -1
  33. package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.js +0 -1
  34. package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.js.map +1 -1
  35. package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.mjs +0 -1
  36. package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.mjs.map +1 -1
  37. package/dist/admin/components/AssetDialog/BrowseStep/Filters.js +0 -1
  38. package/dist/admin/components/AssetDialog/BrowseStep/Filters.js.map +1 -1
  39. package/dist/admin/components/AssetDialog/BrowseStep/Filters.mjs +0 -1
  40. package/dist/admin/components/AssetDialog/BrowseStep/Filters.mjs.map +1 -1
  41. package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.js +0 -1
  42. package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.js.map +1 -1
  43. package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.mjs +0 -1
  44. package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.mjs.map +1 -1
  45. package/dist/admin/components/AssetDialog/SelectedStep/SelectedStep.js +0 -1
  46. package/dist/admin/components/AssetDialog/SelectedStep/SelectedStep.js.map +1 -1
  47. package/dist/admin/components/AssetDialog/SelectedStep/SelectedStep.mjs +0 -1
  48. package/dist/admin/components/AssetDialog/SelectedStep/SelectedStep.mjs.map +1 -1
  49. package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.js +0 -1
  50. package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.js.map +1 -1
  51. package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.mjs +0 -1
  52. package/dist/admin/components/Breadcrumbs/CrumbSimpleMenuAsync.mjs.map +1 -1
  53. package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.js +0 -1
  54. package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.js.map +1 -1
  55. package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.mjs +0 -1
  56. package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.mjs.map +1 -1
  57. package/dist/admin/components/CopyLinkButton/CopyLinkButton.js +0 -1
  58. package/dist/admin/components/CopyLinkButton/CopyLinkButton.js.map +1 -1
  59. package/dist/admin/components/CopyLinkButton/CopyLinkButton.mjs +0 -1
  60. package/dist/admin/components/CopyLinkButton/CopyLinkButton.mjs.map +1 -1
  61. package/dist/admin/components/EditAssetDialog/EditAssetContent.js +0 -1
  62. package/dist/admin/components/EditAssetDialog/EditAssetContent.js.map +1 -1
  63. package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs +0 -1
  64. package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs.map +1 -1
  65. package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.js +3 -3
  66. package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.js.map +1 -1
  67. package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.mjs +4 -4
  68. package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.mjs.map +1 -1
  69. package/dist/admin/components/EditAssetDialog/PreviewBox/CroppingActions.js +0 -1
  70. package/dist/admin/components/EditAssetDialog/PreviewBox/CroppingActions.js.map +1 -1
  71. package/dist/admin/components/EditAssetDialog/PreviewBox/CroppingActions.mjs +0 -1
  72. package/dist/admin/components/EditAssetDialog/PreviewBox/CroppingActions.mjs.map +1 -1
  73. package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.js +0 -1
  74. package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.js.map +1 -1
  75. package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.mjs +0 -1
  76. package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.mjs.map +1 -1
  77. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.js +2 -3
  78. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.js.map +1 -1
  79. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.mjs +3 -4
  80. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.mjs.map +1 -1
  81. package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.js +0 -1
  82. package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.js.map +1 -1
  83. package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.mjs +0 -1
  84. package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.mjs.map +1 -1
  85. package/dist/admin/components/EditFolderDialog/EditFolderDialog.js +0 -1
  86. package/dist/admin/components/EditFolderDialog/EditFolderDialog.js.map +1 -1
  87. package/dist/admin/components/EditFolderDialog/EditFolderDialog.mjs +0 -1
  88. package/dist/admin/components/EditFolderDialog/EditFolderDialog.mjs.map +1 -1
  89. package/dist/admin/components/EditFolderDialog/ModalHeader/ModalHeader.js +0 -1
  90. package/dist/admin/components/EditFolderDialog/ModalHeader/ModalHeader.js.map +1 -1
  91. package/dist/admin/components/EditFolderDialog/ModalHeader/ModalHeader.mjs +0 -1
  92. package/dist/admin/components/EditFolderDialog/ModalHeader/ModalHeader.mjs.map +1 -1
  93. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.js +3 -4
  94. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.js.map +1 -1
  95. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.mjs +4 -5
  96. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.mjs.map +1 -1
  97. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssetActions.js +0 -1
  98. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssetActions.js.map +1 -1
  99. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssetActions.mjs +0 -1
  100. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssetActions.mjs.map +1 -1
  101. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.js +2 -1
  102. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.js.map +1 -1
  103. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.mjs +2 -1
  104. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssets.mjs.map +1 -1
  105. package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.js +1 -2
  106. package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.js.map +1 -1
  107. package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.mjs +2 -3
  108. package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.mjs.map +1 -1
  109. package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js +1 -1
  110. package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js.map +1 -1
  111. package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs +1 -1
  112. package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs.map +1 -1
  113. package/dist/admin/components/SortPicker/SortPicker.js +0 -1
  114. package/dist/admin/components/SortPicker/SortPicker.js.map +1 -1
  115. package/dist/admin/components/SortPicker/SortPicker.mjs +0 -1
  116. package/dist/admin/components/SortPicker/SortPicker.mjs.map +1 -1
  117. package/dist/admin/components/TableList/CellContent.js +0 -1
  118. package/dist/admin/components/TableList/CellContent.js.map +1 -1
  119. package/dist/admin/components/TableList/CellContent.mjs +0 -1
  120. package/dist/admin/components/TableList/CellContent.mjs.map +1 -1
  121. package/dist/admin/components/TableList/PreviewCell.js +3 -4
  122. package/dist/admin/components/TableList/PreviewCell.js.map +1 -1
  123. package/dist/admin/components/TableList/PreviewCell.mjs +4 -5
  124. package/dist/admin/components/TableList/PreviewCell.mjs.map +1 -1
  125. package/dist/admin/components/TableList/TableList.js +0 -1
  126. package/dist/admin/components/TableList/TableList.js.map +1 -1
  127. package/dist/admin/components/TableList/TableList.mjs +0 -1
  128. package/dist/admin/components/TableList/TableList.mjs.map +1 -1
  129. package/dist/admin/components/TableList/TableRows.js +0 -1
  130. package/dist/admin/components/TableList/TableRows.js.map +1 -1
  131. package/dist/admin/components/TableList/TableRows.mjs +0 -1
  132. package/dist/admin/components/TableList/TableRows.mjs.map +1 -1
  133. package/dist/admin/components/UploadAssetDialog/AddAssetStep/AddAssetStep.js +0 -1
  134. package/dist/admin/components/UploadAssetDialog/AddAssetStep/AddAssetStep.js.map +1 -1
  135. package/dist/admin/components/UploadAssetDialog/AddAssetStep/AddAssetStep.mjs +0 -1
  136. package/dist/admin/components/UploadAssetDialog/AddAssetStep/AddAssetStep.mjs.map +1 -1
  137. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.js +2 -3
  138. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.js.map +1 -1
  139. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.mjs +3 -4
  140. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.mjs.map +1 -1
  141. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js +0 -1
  142. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js.map +1 -1
  143. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.mjs +0 -1
  144. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.mjs.map +1 -1
  145. package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.js +0 -1
  146. package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.js.map +1 -1
  147. package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.mjs +0 -1
  148. package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.mjs.map +1 -1
  149. package/dist/admin/constants.js +4 -7
  150. package/dist/admin/constants.js.map +1 -1
  151. package/dist/admin/constants.mjs +4 -7
  152. package/dist/admin/constants.mjs.map +1 -1
  153. package/dist/admin/enums.js +14 -16
  154. package/dist/admin/enums.js.map +1 -1
  155. package/dist/admin/enums.mjs +13 -15
  156. package/dist/admin/enums.mjs.map +1 -1
  157. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js +2 -2
  158. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js.map +1 -1
  159. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs +2 -2
  160. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs.map +1 -1
  161. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetPreview.js +4 -4
  162. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetPreview.js.map +1 -1
  163. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetPreview.mjs +4 -4
  164. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetPreview.mjs.map +1 -1
  165. package/dist/admin/future/pages/Assets/components/AssetsGrid.js +2 -2
  166. package/dist/admin/future/pages/Assets/components/AssetsGrid.js.map +1 -1
  167. package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs +2 -2
  168. package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs.map +1 -1
  169. package/dist/admin/future/utils/getAssetIcon.js +4 -4
  170. package/dist/admin/future/utils/getAssetIcon.js.map +1 -1
  171. package/dist/admin/future/utils/getAssetIcon.mjs +4 -4
  172. package/dist/admin/future/utils/getAssetIcon.mjs.map +1 -1
  173. package/dist/admin/hooks/useAIMetadataJob.js +0 -1
  174. package/dist/admin/hooks/useAIMetadataJob.js.map +1 -1
  175. package/dist/admin/hooks/useAIMetadataJob.mjs +0 -1
  176. package/dist/admin/hooks/useAIMetadataJob.mjs.map +1 -1
  177. package/dist/admin/hooks/useBulkEdit.js +0 -1
  178. package/dist/admin/hooks/useBulkEdit.js.map +1 -1
  179. package/dist/admin/hooks/useBulkEdit.mjs +0 -1
  180. package/dist/admin/hooks/useBulkEdit.mjs.map +1 -1
  181. package/dist/admin/hooks/useBulkMove.js +0 -1
  182. package/dist/admin/hooks/useBulkMove.js.map +1 -1
  183. package/dist/admin/hooks/useBulkMove.mjs +0 -1
  184. package/dist/admin/hooks/useBulkMove.mjs.map +1 -1
  185. package/dist/admin/hooks/useBulkRemove.js +0 -1
  186. package/dist/admin/hooks/useBulkRemove.js.map +1 -1
  187. package/dist/admin/hooks/useBulkRemove.mjs +0 -1
  188. package/dist/admin/hooks/useBulkRemove.mjs.map +1 -1
  189. package/dist/admin/hooks/useEditAsset.js +0 -1
  190. package/dist/admin/hooks/useEditAsset.js.map +1 -1
  191. package/dist/admin/hooks/useEditAsset.mjs +0 -1
  192. package/dist/admin/hooks/useEditAsset.mjs.map +1 -1
  193. package/dist/admin/hooks/useFolder.js +0 -1
  194. package/dist/admin/hooks/useFolder.js.map +1 -1
  195. package/dist/admin/hooks/useFolder.mjs +0 -1
  196. package/dist/admin/hooks/useFolder.mjs.map +1 -1
  197. package/dist/admin/hooks/useFolderStructure.js +0 -1
  198. package/dist/admin/hooks/useFolderStructure.js.map +1 -1
  199. package/dist/admin/hooks/useFolderStructure.mjs +0 -1
  200. package/dist/admin/hooks/useFolderStructure.mjs.map +1 -1
  201. package/dist/admin/index.js +0 -1
  202. package/dist/admin/index.js.map +1 -1
  203. package/dist/admin/index.mjs +0 -1
  204. package/dist/admin/index.mjs.map +1 -1
  205. package/dist/admin/pages/App/App.js +0 -1
  206. package/dist/admin/pages/App/App.js.map +1 -1
  207. package/dist/admin/pages/App/App.mjs +0 -1
  208. package/dist/admin/pages/App/App.mjs.map +1 -1
  209. package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.js +0 -1
  210. package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.js.map +1 -1
  211. package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.mjs +0 -1
  212. package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.mjs.map +1 -1
  213. package/dist/admin/pages/App/ConfigureTheView/components/Settings.js +0 -1
  214. package/dist/admin/pages/App/ConfigureTheView/components/Settings.js.map +1 -1
  215. package/dist/admin/pages/App/ConfigureTheView/components/Settings.mjs +0 -1
  216. package/dist/admin/pages/App/ConfigureTheView/components/Settings.mjs.map +1 -1
  217. package/dist/admin/pages/App/MediaLibrary.js +0 -1
  218. package/dist/admin/pages/App/MediaLibrary.js.map +1 -1
  219. package/dist/admin/pages/App/MediaLibrary.mjs +0 -1
  220. package/dist/admin/pages/App/MediaLibrary.mjs.map +1 -1
  221. package/dist/admin/pages/App/components/BulkActions.js +0 -1
  222. package/dist/admin/pages/App/components/BulkActions.js.map +1 -1
  223. package/dist/admin/pages/App/components/BulkActions.mjs +0 -1
  224. package/dist/admin/pages/App/components/BulkActions.mjs.map +1 -1
  225. package/dist/admin/pages/App/components/EmptyOrNoPermissions.js +0 -1
  226. package/dist/admin/pages/App/components/EmptyOrNoPermissions.js.map +1 -1
  227. package/dist/admin/pages/App/components/EmptyOrNoPermissions.mjs +0 -1
  228. package/dist/admin/pages/App/components/EmptyOrNoPermissions.mjs.map +1 -1
  229. package/dist/admin/pages/App/components/Filters.js +0 -1
  230. package/dist/admin/pages/App/components/Filters.js.map +1 -1
  231. package/dist/admin/pages/App/components/Filters.mjs +0 -1
  232. package/dist/admin/pages/App/components/Filters.mjs.map +1 -1
  233. package/dist/admin/pages/App/components/Header.js +0 -1
  234. package/dist/admin/pages/App/components/Header.js.map +1 -1
  235. package/dist/admin/pages/App/components/Header.mjs +0 -1
  236. package/dist/admin/pages/App/components/Header.mjs.map +1 -1
  237. package/dist/admin/pages/SettingsPage/SettingsPage.js +0 -1
  238. package/dist/admin/pages/SettingsPage/SettingsPage.js.map +1 -1
  239. package/dist/admin/pages/SettingsPage/SettingsPage.mjs +0 -1
  240. package/dist/admin/pages/SettingsPage/SettingsPage.mjs.map +1 -1
  241. package/dist/admin/src/components/EditAssetDialog/PreviewBox/PreviewComponents.d.ts +11 -12
  242. package/dist/admin/src/components/EmptyAssets/EmptyAssets.d.ts +0 -1
  243. package/dist/admin/src/components/FolderCard/contexts/FolderCard.d.ts +2 -3
  244. package/dist/admin/src/constants.d.ts +5 -4
  245. package/dist/admin/src/enums.d.ts +14 -12
  246. package/dist/admin/src/future/store/uploadProgress.d.ts +1 -1
  247. package/dist/admin/src/hooks/useCropImg.d.ts +2 -2
  248. package/dist/admin/src/hooks/useEditFolder.d.ts +4 -4
  249. package/dist/admin/src/hooks/useModalQueryParams.d.ts +5 -5
  250. package/dist/admin/src/hooks/usePersistentState.d.ts +0 -1
  251. package/dist/admin/src/hooks/useSettings.d.ts +5 -5
  252. package/dist/admin/src/hooks/useTracking.d.ts +1 -1
  253. package/dist/admin/src/pages/App/ConfigureTheView/state/actions.d.ts +1 -1
  254. package/dist/admin/src/pages/App/ConfigureTheView/state/init.d.ts +1 -1
  255. package/dist/admin/src/utils/getBreadcrumbDataML.d.ts +1 -1
  256. package/dist/admin/src/utils/getFolderParents.d.ts +3 -3
  257. package/dist/admin/src/utils/icons.d.ts +2 -1
  258. package/dist/admin/src/utils/rawFileToAsset.d.ts +1 -1
  259. package/dist/admin/src/utils/urlsToAssets.d.ts +2 -10
  260. package/dist/admin/translations/ja.json.js +175 -0
  261. package/dist/admin/translations/ja.json.js.map +1 -1
  262. package/dist/admin/translations/ja.json.mjs +175 -0
  263. package/dist/admin/translations/ja.json.mjs.map +1 -1
  264. package/dist/admin/utils/icons.js +5 -5
  265. package/dist/admin/utils/icons.js.map +1 -1
  266. package/dist/admin/utils/icons.mjs +6 -6
  267. package/dist/admin/utils/icons.mjs.map +1 -1
  268. package/dist/admin/utils/typeFromMime.js +9 -9
  269. package/dist/admin/utils/typeFromMime.js.map +1 -1
  270. package/dist/admin/utils/typeFromMime.mjs +10 -10
  271. package/dist/admin/utils/typeFromMime.mjs.map +1 -1
  272. package/dist/admin/utils/urlsToAssets.js +1 -2
  273. package/dist/admin/utils/urlsToAssets.js.map +1 -1
  274. package/dist/admin/utils/urlsToAssets.mjs +1 -2
  275. package/dist/admin/utils/urlsToAssets.mjs.map +1 -1
  276. package/dist/server/src/controllers/admin-file.d.ts +4 -12
  277. package/dist/server/src/controllers/admin-file.d.ts.map +1 -1
  278. package/dist/server/src/controllers/admin-folder.d.ts +2 -2
  279. package/dist/server/src/controllers/admin-settings.d.ts +2 -2
  280. package/dist/server/src/controllers/admin-upload.d.ts +3 -3
  281. package/dist/server/src/controllers/content-api.d.ts +2 -2
  282. package/dist/server/src/controllers/content-api.d.ts.map +1 -1
  283. package/dist/server/src/controllers/index.d.ts +14 -23
  284. package/dist/server/src/controllers/index.d.ts.map +1 -1
  285. package/dist/server/src/controllers/utils/find-entity-and-check-permissions.d.ts.map +1 -1
  286. package/dist/server/src/controllers/utils/folders.d.ts.map +1 -1
  287. package/dist/server/src/controllers/validation/admin/configureView.d.ts +1 -1
  288. package/dist/server/src/controllers/validation/admin/folder-file.d.ts +1 -1
  289. package/dist/server/src/controllers/validation/admin/folder-file.d.ts.map +1 -1
  290. package/dist/server/src/controllers/validation/admin/folder.d.ts +2 -2
  291. package/dist/server/src/controllers/validation/admin/folder.d.ts.map +1 -1
  292. package/dist/server/src/controllers/validation/admin/settings.d.ts +1 -1
  293. package/dist/server/src/controllers/validation/admin/upload.d.ts +1 -1
  294. package/dist/server/src/controllers/validation/admin/upload.d.ts.map +1 -1
  295. package/dist/server/src/controllers/validation/admin/utils.d.ts.map +1 -1
  296. package/dist/server/src/controllers/validation/content-api/upload.d.ts.map +1 -1
  297. package/dist/server/src/controllers/view-configuration.d.ts +1 -1
  298. package/dist/server/src/graphql.d.ts.map +1 -1
  299. package/dist/server/src/index.d.ts +36 -53
  300. package/dist/server/src/index.d.ts.map +1 -1
  301. package/dist/server/src/middlewares/upload.d.ts.map +1 -1
  302. package/dist/server/src/services/ai-metadata-jobs.d.ts +1 -1
  303. package/dist/server/src/services/ai-metadata-jobs.d.ts.map +1 -1
  304. package/dist/server/src/services/ai-metadata.d.ts.map +1 -1
  305. package/dist/server/src/services/extensions/utils.d.ts.map +1 -1
  306. package/dist/server/src/services/file.d.ts +2 -2
  307. package/dist/server/src/services/file.d.ts.map +1 -1
  308. package/dist/server/src/services/folder.d.ts +1 -1
  309. package/dist/server/src/services/folder.d.ts.map +1 -1
  310. package/dist/server/src/services/image-manipulation.d.ts.map +1 -1
  311. package/dist/server/src/services/index.d.ts +22 -30
  312. package/dist/server/src/services/index.d.ts.map +1 -1
  313. package/dist/server/src/services/metrics.d.ts.map +1 -1
  314. package/dist/server/src/services/provider.d.ts.map +1 -1
  315. package/dist/server/src/services/upload.d.ts +1 -1
  316. package/dist/server/src/services/upload.d.ts.map +1 -1
  317. package/dist/server/src/services/weekly-metrics.d.ts.map +1 -1
  318. package/dist/server/src/types.d.ts +4 -3
  319. package/dist/server/src/types.d.ts.map +1 -1
  320. package/dist/server/src/utils/cron.d.ts.map +1 -1
  321. package/dist/server/src/utils/index.d.ts.map +1 -1
  322. package/dist/server/src/utils/mime-validation.d.ts.map +1 -1
  323. package/dist/server/utils/mime-validation.js +3 -1
  324. package/dist/server/utils/mime-validation.js.map +1 -1
  325. package/dist/server/utils/mime-validation.mjs +3 -1
  326. package/dist/server/utils/mime-validation.mjs.map +1 -1
  327. package/package.json +9 -9
  328. package/dist/admin/future/enums.js +0 -12
  329. package/dist/admin/future/enums.js.map +0 -1
  330. package/dist/admin/future/enums.mjs +0 -10
  331. package/dist/admin/future/enums.mjs.map +0 -1
  332. package/dist/admin/src/future/enums.d.ts +0 -6
@@ -1 +1 @@
1
- {"version":3,"file":"AssetPreview.js","sources":["../../../../../admin/src/components/EditAssetDialog/PreviewBox/AssetPreview.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/media-has-caption */\nimport * as React from 'react';\n\nimport MuxPlayer from '@mux/mux-player-react';\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled, useTheme } from 'styled-components';\n\nimport { AssetType } from '../../../enums';\nimport { typeFromMime } from '../../../utils';\nimport { getFileIconComponent } from '../../../utils/icons';\n\nconst CardAsset = styled(Flex)`\n min-height: 26.4rem;\n border-radius: ${({ theme }) => theme.borderRadius} ${({ theme }) => theme.borderRadius} 0 0;\n background: linear-gradient(\n 180deg,\n ${({ theme }) => theme.colors.neutral0} 0%,\n ${({ theme }) => theme.colors.neutral100} 121.48%\n );\n`;\n\ninterface AssetPreviewProps extends React.HTMLAttributes<HTMLElement> {\n mime: string;\n name: string;\n url: string;\n}\n\nexport const AssetPreview = React.forwardRef<\n HTMLImageElement | HTMLVideoElement | HTMLAudioElement,\n AssetPreviewProps\n>(({ mime, url, name, ...props }, ref) => {\n const theme = useTheme();\n\n const assetType = typeFromMime(mime);\n\n const { formatMessage } = useIntl();\n\n if (assetType === AssetType.Image) {\n return (\n <img\n ref={ref as React.ForwardedRef<HTMLImageElement>}\n src={url}\n alt={name}\n crossOrigin=\"anonymous\"\n {...props}\n />\n );\n }\n\n if (assetType === AssetType.Video) {\n return <MuxPlayer src={url} accentColor={theme.colors.primary500} />;\n }\n\n if (assetType === AssetType.Audio) {\n return (\n <Box margin=\"5\">\n <audio controls src={url} ref={ref as React.ForwardedRef<HTMLAudioElement>} {...props}>\n {name}\n </audio>\n </Box>\n );\n }\n\n // getFileIconComponent will handle all other file types, eg. PDF, CSV, XLS, ZIP\n // If the file type is not recognized, the default icon will be used\n const IconComponent = getFileIconComponent(assetType);\n return (\n <CardAsset width=\"100%\" justifyContent=\"center\" {...props}>\n <Flex gap={2} direction=\"column\" alignItems=\"center\">\n <IconComponent aria-label={name} fill=\"neutral500\" width={24} height={24} />\n <Typography textColor=\"neutral500\" variant=\"pi\">\n {formatMessage({\n id: 'noPreview',\n defaultMessage: 'No preview available',\n })}\n </Typography>\n </Flex>\n </CardAsset>\n );\n});\n\nAssetPreview.displayName = 'AssetPreview';\n"],"names":["CardAsset","styled","Flex","theme","borderRadius","colors","neutral0","neutral100","AssetPreview","React","forwardRef","mime","url","name","props","ref","useTheme","assetType","typeFromMime","formatMessage","useIntl","AssetType","Image","_jsx","img","src","alt","crossOrigin","Video","MuxPlayer","accentColor","primary500","Audio","Box","margin","audio","controls","IconComponent","getFileIconComponent","width","justifyContent","_jsxs","gap","direction","alignItems","aria-label","fill","height","Typography","textColor","variant","id","defaultMessage","displayName"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,MAAMA,SAAAA,GAAYC,uBAAAA,CAAOC,iBAAAA,CAAK;;AAEb,iBAAA,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,MAAMC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAAA,CAAMC,YAAY,CAAC;;;IAGtF,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAAA,CAAME,MAAM,CAACC,QAAQ,CAAC;IACvC,EAAE,CAAC,EAAEH,KAAK,EAAE,GAAKA,KAAAA,CAAME,MAAM,CAACE,UAAU,CAAC;;AAE7C,CAAC;AAQM,MAAMC,YAAAA,iBAAeC,gBAAAA,CAAMC,UAAU,CAG1C,CAAC,EAAEC,IAAI,EAAEC,GAAG,EAAEC,IAAI,EAAE,GAAGC,OAAO,EAAEC,GAAAA,GAAAA;AAChC,IAAA,MAAMZ,KAAAA,GAAQa,yBAAAA,EAAAA;AAEd,IAAA,MAAMC,YAAYC,yBAAAA,CAAaP,IAAAA,CAAAA;IAE/B,MAAM,EAAEQ,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAE1B,IAAIH,SAAAA,KAAcI,eAAAA,CAAUC,KAAK,EAAE;AACjC,QAAA,qBACEC,cAAA,CAACC,KAAAA,EAAAA;YACCT,GAAAA,EAAKA,GAAAA;YACLU,GAAAA,EAAKb,GAAAA;YACLc,GAAAA,EAAKb,IAAAA;YACLc,WAAAA,EAAY,WAAA;AACX,YAAA,GAAGb;;AAGV,IAAA;IAEA,IAAIG,SAAAA,KAAcI,eAAAA,CAAUO,KAAK,EAAE;AACjC,QAAA,qBAAOL,cAAA,CAACM,0BAAAA,EAAAA;YAAUJ,GAAAA,EAAKb,GAAAA;YAAKkB,WAAAA,EAAa3B,KAAAA,CAAME,MAAM,CAAC0B;;AACxD,IAAA;IAEA,IAAId,SAAAA,KAAcI,eAAAA,CAAUW,KAAK,EAAE;AACjC,QAAA,qBACET,cAAA,CAACU,gBAAAA,EAAAA;YAAIC,MAAAA,EAAO,GAAA;AACV,YAAA,QAAA,gBAAAX,cAAA,CAACY,OAAAA,EAAAA;gBAAMC,QAAQ,EAAA,IAAA;gBAACX,GAAAA,EAAKb,GAAAA;gBAAKG,GAAAA,EAAKA,GAAAA;AAA8C,gBAAA,GAAGD,KAAK;AAClFD,gBAAAA,QAAAA,EAAAA;;;AAIT,IAAA;;;AAIA,IAAA,MAAMwB,gBAAgBC,0BAAAA,CAAqBrB,SAAAA,CAAAA;AAC3C,IAAA,qBACEM,cAAA,CAACvB,SAAAA,EAAAA;QAAUuC,KAAAA,EAAM,MAAA;QAAOC,cAAAA,EAAe,QAAA;AAAU,QAAA,GAAG1B,KAAK;AACvD,QAAA,QAAA,gBAAA2B,eAAA,CAACvC,iBAAAA,EAAAA;YAAKwC,GAAAA,EAAK,CAAA;YAAGC,SAAAA,EAAU,QAAA;YAASC,UAAAA,EAAW,QAAA;;8BAC1CrB,cAAA,CAACc,aAAAA,EAAAA;oBAAcQ,YAAAA,EAAYhC,IAAAA;oBAAMiC,IAAAA,EAAK,YAAA;oBAAaP,KAAAA,EAAO,EAAA;oBAAIQ,MAAAA,EAAQ;;8BACtExB,cAAA,CAACyB,uBAAAA,EAAAA;oBAAWC,SAAAA,EAAU,YAAA;oBAAaC,OAAAA,EAAQ,IAAA;8BACxC/B,aAAAA,CAAc;wBACbgC,EAAAA,EAAI,WAAA;wBACJC,cAAAA,EAAgB;AAClB,qBAAA;;;;;AAKV,CAAA;AAEA5C,YAAAA,CAAa6C,WAAW,GAAG,cAAA;;;;"}
1
+ {"version":3,"file":"AssetPreview.js","sources":["../../../../../admin/src/components/EditAssetDialog/PreviewBox/AssetPreview.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/media-has-caption */\nimport * as React from 'react';\n\nimport MuxPlayer from '@mux/mux-player-react';\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled, useTheme } from 'styled-components';\n\nimport { ASSET_TYPES } from '../../../enums';\nimport { typeFromMime } from '../../../utils';\nimport { getFileIconComponent } from '../../../utils/icons';\n\nconst CardAsset = styled(Flex)`\n min-height: 26.4rem;\n border-radius: ${({ theme }) => theme.borderRadius} ${({ theme }) => theme.borderRadius} 0 0;\n background: linear-gradient(\n 180deg,\n ${({ theme }) => theme.colors.neutral0} 0%,\n ${({ theme }) => theme.colors.neutral100} 121.48%\n );\n`;\n\ninterface AssetPreviewProps extends React.HTMLAttributes<HTMLElement> {\n mime: string;\n name: string;\n url: string;\n}\n\nexport const AssetPreview = React.forwardRef<\n HTMLImageElement | HTMLVideoElement | HTMLAudioElement,\n AssetPreviewProps\n>(({ mime, url, name, ...props }, ref) => {\n const theme = useTheme();\n\n const assetType = typeFromMime(mime);\n\n const { formatMessage } = useIntl();\n\n if (assetType === ASSET_TYPES.Image) {\n return (\n <img\n ref={ref as React.ForwardedRef<HTMLImageElement>}\n src={url}\n alt={name}\n crossOrigin=\"anonymous\"\n {...props}\n />\n );\n }\n\n if (assetType === ASSET_TYPES.Video) {\n return <MuxPlayer src={url} accentColor={theme.colors.primary500} />;\n }\n\n if (assetType === ASSET_TYPES.Audio) {\n return (\n <Box margin=\"5\">\n <audio controls src={url} ref={ref as React.ForwardedRef<HTMLAudioElement>} {...props}>\n {name}\n </audio>\n </Box>\n );\n }\n\n // getFileIconComponent will handle all other file types, eg. PDF, CSV, XLS, ZIP\n // If the file type is not recognized, the default icon will be used\n const IconComponent = getFileIconComponent(assetType);\n return (\n <CardAsset width=\"100%\" justifyContent=\"center\" {...props}>\n <Flex gap={2} direction=\"column\" alignItems=\"center\">\n <IconComponent aria-label={name} fill=\"neutral500\" width={24} height={24} />\n <Typography textColor=\"neutral500\" variant=\"pi\">\n {formatMessage({\n id: 'noPreview',\n defaultMessage: 'No preview available',\n })}\n </Typography>\n </Flex>\n </CardAsset>\n );\n});\n\nAssetPreview.displayName = 'AssetPreview';\n"],"names":["CardAsset","styled","Flex","theme","borderRadius","colors","neutral0","neutral100","AssetPreview","React","forwardRef","mime","url","name","props","ref","useTheme","assetType","typeFromMime","formatMessage","useIntl","ASSET_TYPES","Image","_jsx","img","src","alt","crossOrigin","Video","MuxPlayer","accentColor","primary500","Audio","Box","margin","audio","controls","IconComponent","getFileIconComponent","width","justifyContent","_jsxs","gap","direction","alignItems","aria-label","fill","height","Typography","textColor","variant","id","defaultMessage","displayName"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,MAAMA,SAAAA,GAAYC,uBAAAA,CAAOC,iBAAAA,CAAK;;AAEb,iBAAA,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,MAAMC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAAA,CAAMC,YAAY,CAAC;;;IAGtF,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAAA,CAAME,MAAM,CAACC,QAAQ,CAAC;IACvC,EAAE,CAAC,EAAEH,KAAK,EAAE,GAAKA,KAAAA,CAAME,MAAM,CAACE,UAAU,CAAC;;AAE7C,CAAC;AAQM,MAAMC,YAAAA,iBAAeC,gBAAAA,CAAMC,UAAU,CAG1C,CAAC,EAAEC,IAAI,EAAEC,GAAG,EAAEC,IAAI,EAAE,GAAGC,OAAO,EAAEC,GAAAA,GAAAA;AAChC,IAAA,MAAMZ,KAAAA,GAAQa,yBAAAA,EAAAA;AAEd,IAAA,MAAMC,YAAYC,yBAAAA,CAAaP,IAAAA,CAAAA;IAE/B,MAAM,EAAEQ,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAE1B,IAAIH,SAAAA,KAAcI,iBAAAA,CAAYC,KAAK,EAAE;AACnC,QAAA,qBACEC,cAAA,CAACC,KAAAA,EAAAA;YACCT,GAAAA,EAAKA,GAAAA;YACLU,GAAAA,EAAKb,GAAAA;YACLc,GAAAA,EAAKb,IAAAA;YACLc,WAAAA,EAAY,WAAA;AACX,YAAA,GAAGb;;AAGV,IAAA;IAEA,IAAIG,SAAAA,KAAcI,iBAAAA,CAAYO,KAAK,EAAE;AACnC,QAAA,qBAAOL,cAAA,CAACM,0BAAAA,EAAAA;YAAUJ,GAAAA,EAAKb,GAAAA;YAAKkB,WAAAA,EAAa3B,KAAAA,CAAME,MAAM,CAAC0B;;AACxD,IAAA;IAEA,IAAId,SAAAA,KAAcI,iBAAAA,CAAYW,KAAK,EAAE;AACnC,QAAA,qBACET,cAAA,CAACU,gBAAAA,EAAAA;YAAIC,MAAAA,EAAO,GAAA;AACV,YAAA,QAAA,gBAAAX,cAAA,CAACY,OAAAA,EAAAA;gBAAMC,QAAQ,EAAA,IAAA;gBAACX,GAAAA,EAAKb,GAAAA;gBAAKG,GAAAA,EAAKA,GAAAA;AAA8C,gBAAA,GAAGD,KAAK;AAClFD,gBAAAA,QAAAA,EAAAA;;;AAIT,IAAA;;;AAIA,IAAA,MAAMwB,gBAAgBC,0BAAAA,CAAqBrB,SAAAA,CAAAA;AAC3C,IAAA,qBACEM,cAAA,CAACvB,SAAAA,EAAAA;QAAUuC,KAAAA,EAAM,MAAA;QAAOC,cAAAA,EAAe,QAAA;AAAU,QAAA,GAAG1B,KAAK;AACvD,QAAA,QAAA,gBAAA2B,eAAA,CAACvC,iBAAAA,EAAAA;YAAKwC,GAAAA,EAAK,CAAA;YAAGC,SAAAA,EAAU,QAAA;YAASC,UAAAA,EAAW,QAAA;;8BAC1CrB,cAAA,CAACc,aAAAA,EAAAA;oBAAcQ,YAAAA,EAAYhC,IAAAA;oBAAMiC,IAAAA,EAAK,YAAA;oBAAaP,KAAAA,EAAO,EAAA;oBAAIQ,MAAAA,EAAQ;;8BACtExB,cAAA,CAACyB,uBAAAA,EAAAA;oBAAWC,SAAAA,EAAU,YAAA;oBAAaC,OAAAA,EAAQ,IAAA;8BACxC/B,aAAAA,CAAc;wBACbgC,EAAAA,EAAI,WAAA;wBACJC,cAAAA,EAAgB;AAClB,qBAAA;;;;;AAKV,CAAA;AAEA5C,YAAAA,CAAa6C,WAAW,GAAG,cAAA;;;;"}
@@ -4,7 +4,7 @@ import MuxPlayer from '@mux/mux-player-react';
4
4
  import { Flex, Box, Typography } from '@strapi/design-system';
5
5
  import { useIntl } from 'react-intl';
6
6
  import { styled, useTheme } from 'styled-components';
7
- import { AssetType } from '../../../enums.mjs';
7
+ import { ASSET_TYPES } from '../../../enums.mjs';
8
8
  import 'byte-size';
9
9
  import 'date-fns';
10
10
  import 'qs';
@@ -25,7 +25,7 @@ const AssetPreview = /*#__PURE__*/ React.forwardRef(({ mime, url, name, ...props
25
25
  const theme = useTheme();
26
26
  const assetType = typeFromMime(mime);
27
27
  const { formatMessage } = useIntl();
28
- if (assetType === AssetType.Image) {
28
+ if (assetType === ASSET_TYPES.Image) {
29
29
  return /*#__PURE__*/ jsx("img", {
30
30
  ref: ref,
31
31
  src: url,
@@ -34,13 +34,13 @@ const AssetPreview = /*#__PURE__*/ React.forwardRef(({ mime, url, name, ...props
34
34
  ...props
35
35
  });
36
36
  }
37
- if (assetType === AssetType.Video) {
37
+ if (assetType === ASSET_TYPES.Video) {
38
38
  return /*#__PURE__*/ jsx(MuxPlayer, {
39
39
  src: url,
40
40
  accentColor: theme.colors.primary500
41
41
  });
42
42
  }
43
- if (assetType === AssetType.Audio) {
43
+ if (assetType === ASSET_TYPES.Audio) {
44
44
  return /*#__PURE__*/ jsx(Box, {
45
45
  margin: "5",
46
46
  children: /*#__PURE__*/ jsx("audio", {
@@ -1 +1 @@
1
- {"version":3,"file":"AssetPreview.mjs","sources":["../../../../../admin/src/components/EditAssetDialog/PreviewBox/AssetPreview.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/media-has-caption */\nimport * as React from 'react';\n\nimport MuxPlayer from '@mux/mux-player-react';\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled, useTheme } from 'styled-components';\n\nimport { AssetType } from '../../../enums';\nimport { typeFromMime } from '../../../utils';\nimport { getFileIconComponent } from '../../../utils/icons';\n\nconst CardAsset = styled(Flex)`\n min-height: 26.4rem;\n border-radius: ${({ theme }) => theme.borderRadius} ${({ theme }) => theme.borderRadius} 0 0;\n background: linear-gradient(\n 180deg,\n ${({ theme }) => theme.colors.neutral0} 0%,\n ${({ theme }) => theme.colors.neutral100} 121.48%\n );\n`;\n\ninterface AssetPreviewProps extends React.HTMLAttributes<HTMLElement> {\n mime: string;\n name: string;\n url: string;\n}\n\nexport const AssetPreview = React.forwardRef<\n HTMLImageElement | HTMLVideoElement | HTMLAudioElement,\n AssetPreviewProps\n>(({ mime, url, name, ...props }, ref) => {\n const theme = useTheme();\n\n const assetType = typeFromMime(mime);\n\n const { formatMessage } = useIntl();\n\n if (assetType === AssetType.Image) {\n return (\n <img\n ref={ref as React.ForwardedRef<HTMLImageElement>}\n src={url}\n alt={name}\n crossOrigin=\"anonymous\"\n {...props}\n />\n );\n }\n\n if (assetType === AssetType.Video) {\n return <MuxPlayer src={url} accentColor={theme.colors.primary500} />;\n }\n\n if (assetType === AssetType.Audio) {\n return (\n <Box margin=\"5\">\n <audio controls src={url} ref={ref as React.ForwardedRef<HTMLAudioElement>} {...props}>\n {name}\n </audio>\n </Box>\n );\n }\n\n // getFileIconComponent will handle all other file types, eg. PDF, CSV, XLS, ZIP\n // If the file type is not recognized, the default icon will be used\n const IconComponent = getFileIconComponent(assetType);\n return (\n <CardAsset width=\"100%\" justifyContent=\"center\" {...props}>\n <Flex gap={2} direction=\"column\" alignItems=\"center\">\n <IconComponent aria-label={name} fill=\"neutral500\" width={24} height={24} />\n <Typography textColor=\"neutral500\" variant=\"pi\">\n {formatMessage({\n id: 'noPreview',\n defaultMessage: 'No preview available',\n })}\n </Typography>\n </Flex>\n </CardAsset>\n );\n});\n\nAssetPreview.displayName = 'AssetPreview';\n"],"names":["CardAsset","styled","Flex","theme","borderRadius","colors","neutral0","neutral100","AssetPreview","React","forwardRef","mime","url","name","props","ref","useTheme","assetType","typeFromMime","formatMessage","useIntl","AssetType","Image","_jsx","img","src","alt","crossOrigin","Video","MuxPlayer","accentColor","primary500","Audio","Box","margin","audio","controls","IconComponent","getFileIconComponent","width","justifyContent","_jsxs","gap","direction","alignItems","aria-label","fill","height","Typography","textColor","variant","id","defaultMessage","displayName"],"mappings":";;;;;;;;;;;;;;AAYA,MAAMA,SAAAA,GAAYC,MAAAA,CAAOC,IAAAA,CAAK;;AAEb,iBAAA,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,MAAMC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAAA,CAAMC,YAAY,CAAC;;;IAGtF,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAAA,CAAME,MAAM,CAACC,QAAQ,CAAC;IACvC,EAAE,CAAC,EAAEH,KAAK,EAAE,GAAKA,KAAAA,CAAME,MAAM,CAACE,UAAU,CAAC;;AAE7C,CAAC;AAQM,MAAMC,YAAAA,iBAAeC,KAAAA,CAAMC,UAAU,CAG1C,CAAC,EAAEC,IAAI,EAAEC,GAAG,EAAEC,IAAI,EAAE,GAAGC,OAAO,EAAEC,GAAAA,GAAAA;AAChC,IAAA,MAAMZ,KAAAA,GAAQa,QAAAA,EAAAA;AAEd,IAAA,MAAMC,YAAYC,YAAAA,CAAaP,IAAAA,CAAAA;IAE/B,MAAM,EAAEQ,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAE1B,IAAIH,SAAAA,KAAcI,SAAAA,CAAUC,KAAK,EAAE;AACjC,QAAA,qBACEC,GAAA,CAACC,KAAAA,EAAAA;YACCT,GAAAA,EAAKA,GAAAA;YACLU,GAAAA,EAAKb,GAAAA;YACLc,GAAAA,EAAKb,IAAAA;YACLc,WAAAA,EAAY,WAAA;AACX,YAAA,GAAGb;;AAGV,IAAA;IAEA,IAAIG,SAAAA,KAAcI,SAAAA,CAAUO,KAAK,EAAE;AACjC,QAAA,qBAAOL,GAAA,CAACM,SAAAA,EAAAA;YAAUJ,GAAAA,EAAKb,GAAAA;YAAKkB,WAAAA,EAAa3B,KAAAA,CAAME,MAAM,CAAC0B;;AACxD,IAAA;IAEA,IAAId,SAAAA,KAAcI,SAAAA,CAAUW,KAAK,EAAE;AACjC,QAAA,qBACET,GAAA,CAACU,GAAAA,EAAAA;YAAIC,MAAAA,EAAO,GAAA;AACV,YAAA,QAAA,gBAAAX,GAAA,CAACY,OAAAA,EAAAA;gBAAMC,QAAQ,EAAA,IAAA;gBAACX,GAAAA,EAAKb,GAAAA;gBAAKG,GAAAA,EAAKA,GAAAA;AAA8C,gBAAA,GAAGD,KAAK;AAClFD,gBAAAA,QAAAA,EAAAA;;;AAIT,IAAA;;;AAIA,IAAA,MAAMwB,gBAAgBC,oBAAAA,CAAqBrB,SAAAA,CAAAA;AAC3C,IAAA,qBACEM,GAAA,CAACvB,SAAAA,EAAAA;QAAUuC,KAAAA,EAAM,MAAA;QAAOC,cAAAA,EAAe,QAAA;AAAU,QAAA,GAAG1B,KAAK;AACvD,QAAA,QAAA,gBAAA2B,IAAA,CAACvC,IAAAA,EAAAA;YAAKwC,GAAAA,EAAK,CAAA;YAAGC,SAAAA,EAAU,QAAA;YAASC,UAAAA,EAAW,QAAA;;8BAC1CrB,GAAA,CAACc,aAAAA,EAAAA;oBAAcQ,YAAAA,EAAYhC,IAAAA;oBAAMiC,IAAAA,EAAK,YAAA;oBAAaP,KAAAA,EAAO,EAAA;oBAAIQ,MAAAA,EAAQ;;8BACtExB,GAAA,CAACyB,UAAAA,EAAAA;oBAAWC,SAAAA,EAAU,YAAA;oBAAaC,OAAAA,EAAQ,IAAA;8BACxC/B,aAAAA,CAAc;wBACbgC,EAAAA,EAAI,WAAA;wBACJC,cAAAA,EAAgB;AAClB,qBAAA;;;;;AAKV,CAAA;AAEA5C,YAAAA,CAAa6C,WAAW,GAAG,cAAA;;;;"}
1
+ {"version":3,"file":"AssetPreview.mjs","sources":["../../../../../admin/src/components/EditAssetDialog/PreviewBox/AssetPreview.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/media-has-caption */\nimport * as React from 'react';\n\nimport MuxPlayer from '@mux/mux-player-react';\nimport { Box, Flex, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport { styled, useTheme } from 'styled-components';\n\nimport { ASSET_TYPES } from '../../../enums';\nimport { typeFromMime } from '../../../utils';\nimport { getFileIconComponent } from '../../../utils/icons';\n\nconst CardAsset = styled(Flex)`\n min-height: 26.4rem;\n border-radius: ${({ theme }) => theme.borderRadius} ${({ theme }) => theme.borderRadius} 0 0;\n background: linear-gradient(\n 180deg,\n ${({ theme }) => theme.colors.neutral0} 0%,\n ${({ theme }) => theme.colors.neutral100} 121.48%\n );\n`;\n\ninterface AssetPreviewProps extends React.HTMLAttributes<HTMLElement> {\n mime: string;\n name: string;\n url: string;\n}\n\nexport const AssetPreview = React.forwardRef<\n HTMLImageElement | HTMLVideoElement | HTMLAudioElement,\n AssetPreviewProps\n>(({ mime, url, name, ...props }, ref) => {\n const theme = useTheme();\n\n const assetType = typeFromMime(mime);\n\n const { formatMessage } = useIntl();\n\n if (assetType === ASSET_TYPES.Image) {\n return (\n <img\n ref={ref as React.ForwardedRef<HTMLImageElement>}\n src={url}\n alt={name}\n crossOrigin=\"anonymous\"\n {...props}\n />\n );\n }\n\n if (assetType === ASSET_TYPES.Video) {\n return <MuxPlayer src={url} accentColor={theme.colors.primary500} />;\n }\n\n if (assetType === ASSET_TYPES.Audio) {\n return (\n <Box margin=\"5\">\n <audio controls src={url} ref={ref as React.ForwardedRef<HTMLAudioElement>} {...props}>\n {name}\n </audio>\n </Box>\n );\n }\n\n // getFileIconComponent will handle all other file types, eg. PDF, CSV, XLS, ZIP\n // If the file type is not recognized, the default icon will be used\n const IconComponent = getFileIconComponent(assetType);\n return (\n <CardAsset width=\"100%\" justifyContent=\"center\" {...props}>\n <Flex gap={2} direction=\"column\" alignItems=\"center\">\n <IconComponent aria-label={name} fill=\"neutral500\" width={24} height={24} />\n <Typography textColor=\"neutral500\" variant=\"pi\">\n {formatMessage({\n id: 'noPreview',\n defaultMessage: 'No preview available',\n })}\n </Typography>\n </Flex>\n </CardAsset>\n );\n});\n\nAssetPreview.displayName = 'AssetPreview';\n"],"names":["CardAsset","styled","Flex","theme","borderRadius","colors","neutral0","neutral100","AssetPreview","React","forwardRef","mime","url","name","props","ref","useTheme","assetType","typeFromMime","formatMessage","useIntl","ASSET_TYPES","Image","_jsx","img","src","alt","crossOrigin","Video","MuxPlayer","accentColor","primary500","Audio","Box","margin","audio","controls","IconComponent","getFileIconComponent","width","justifyContent","_jsxs","gap","direction","alignItems","aria-label","fill","height","Typography","textColor","variant","id","defaultMessage","displayName"],"mappings":";;;;;;;;;;;;;;AAYA,MAAMA,SAAAA,GAAYC,MAAAA,CAAOC,IAAAA,CAAK;;AAEb,iBAAA,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,MAAMC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAAA,CAAMC,YAAY,CAAC;;;IAGtF,EAAE,CAAC,EAAED,KAAK,EAAE,GAAKA,KAAAA,CAAME,MAAM,CAACC,QAAQ,CAAC;IACvC,EAAE,CAAC,EAAEH,KAAK,EAAE,GAAKA,KAAAA,CAAME,MAAM,CAACE,UAAU,CAAC;;AAE7C,CAAC;AAQM,MAAMC,YAAAA,iBAAeC,KAAAA,CAAMC,UAAU,CAG1C,CAAC,EAAEC,IAAI,EAAEC,GAAG,EAAEC,IAAI,EAAE,GAAGC,OAAO,EAAEC,GAAAA,GAAAA;AAChC,IAAA,MAAMZ,KAAAA,GAAQa,QAAAA,EAAAA;AAEd,IAAA,MAAMC,YAAYC,YAAAA,CAAaP,IAAAA,CAAAA;IAE/B,MAAM,EAAEQ,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAE1B,IAAIH,SAAAA,KAAcI,WAAAA,CAAYC,KAAK,EAAE;AACnC,QAAA,qBACEC,GAAA,CAACC,KAAAA,EAAAA;YACCT,GAAAA,EAAKA,GAAAA;YACLU,GAAAA,EAAKb,GAAAA;YACLc,GAAAA,EAAKb,IAAAA;YACLc,WAAAA,EAAY,WAAA;AACX,YAAA,GAAGb;;AAGV,IAAA;IAEA,IAAIG,SAAAA,KAAcI,WAAAA,CAAYO,KAAK,EAAE;AACnC,QAAA,qBAAOL,GAAA,CAACM,SAAAA,EAAAA;YAAUJ,GAAAA,EAAKb,GAAAA;YAAKkB,WAAAA,EAAa3B,KAAAA,CAAME,MAAM,CAAC0B;;AACxD,IAAA;IAEA,IAAId,SAAAA,KAAcI,WAAAA,CAAYW,KAAK,EAAE;AACnC,QAAA,qBACET,GAAA,CAACU,GAAAA,EAAAA;YAAIC,MAAAA,EAAO,GAAA;AACV,YAAA,QAAA,gBAAAX,GAAA,CAACY,OAAAA,EAAAA;gBAAMC,QAAQ,EAAA,IAAA;gBAACX,GAAAA,EAAKb,GAAAA;gBAAKG,GAAAA,EAAKA,GAAAA;AAA8C,gBAAA,GAAGD,KAAK;AAClFD,gBAAAA,QAAAA,EAAAA;;;AAIT,IAAA;;;AAIA,IAAA,MAAMwB,gBAAgBC,oBAAAA,CAAqBrB,SAAAA,CAAAA;AAC3C,IAAA,qBACEM,GAAA,CAACvB,SAAAA,EAAAA;QAAUuC,KAAAA,EAAM,MAAA;QAAOC,cAAAA,EAAe,QAAA;AAAU,QAAA,GAAG1B,KAAK;AACvD,QAAA,QAAA,gBAAA2B,IAAA,CAACvC,IAAAA,EAAAA;YAAKwC,GAAAA,EAAK,CAAA;YAAGC,SAAAA,EAAU,QAAA;YAASC,UAAAA,EAAW,QAAA;;8BAC1CrB,GAAA,CAACc,aAAAA,EAAAA;oBAAcQ,YAAAA,EAAYhC,IAAAA;oBAAMiC,IAAAA,EAAK,YAAA;oBAAaP,KAAAA,EAAO,EAAA;oBAAIQ,MAAAA,EAAQ;;8BACtExB,GAAA,CAACyB,UAAAA,EAAAA;oBAAWC,SAAAA,EAAU,YAAA;oBAAaC,OAAAA,EAAQ,IAAA;8BACxC/B,aAAAA,CAAc;wBACbgC,EAAAA,EAAI,WAAA;wBACJC,cAAAA,EAAgB;AAClB,qBAAA;;;;;AAKV,CAAA;AAEA5C,YAAAA,CAAa6C,WAAW,GAAG,cAAA;;;;"}
@@ -9,7 +9,6 @@ require('byte-size');
9
9
  require('date-fns');
10
10
  var getTrad = require('../../../utils/getTrad.js');
11
11
  require('qs');
12
- require('../../../utils/typeFromMime.js');
13
12
  require('../../../utils/urlYupSchema.js');
14
13
  var PreviewComponents = require('./PreviewComponents.js');
15
14
 
@@ -1 +1 @@
1
- {"version":3,"file":"CroppingActions.js","sources":["../../../../../admin/src/components/EditAssetDialog/PreviewBox/CroppingActions.tsx"],"sourcesContent":["import { Flex, FocusTrap, IconButton, Menu } from '@strapi/design-system';\nimport { Check, Cross } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled, useTheme } from 'styled-components';\n\nimport { getTrad } from '../../../utils';\n\nimport { CroppingActionRow } from './PreviewComponents';\n\ninterface CroppingActionsProps {\n onCancel: () => void;\n onValidate: () => void;\n onDuplicate?: () => void;\n}\n\nexport const CroppingActions = ({ onCancel, onValidate, onDuplicate }: CroppingActionsProps) => {\n const { formatMessage } = useIntl();\n const theme = useTheme();\n\n return (\n <FocusTrap onEscape={onCancel}>\n <CroppingActionRow justifyContent=\"flex-end\" paddingLeft={3} paddingRight={3}>\n <Flex gap={1}>\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.stop-crop'),\n defaultMessage: 'Stop cropping',\n })}\n onClick={onCancel}\n >\n <Cross />\n </IconButton>\n\n <Menu.Root>\n <Trigger\n aria-label={formatMessage({\n id: getTrad('control-card.crop'),\n defaultMessage: 'Crop',\n })}\n variant=\"tertiary\"\n paddingLeft={2}\n paddingRight={2}\n endIcon={null}\n >\n <Check\n aria-hidden\n focusable={false}\n style={{ position: 'relative', top: 2 }}\n fill=\"#C0C0D0\"\n />\n </Trigger>\n <Menu.Content zIndex={theme.zIndices.dialog}>\n <Menu.Item onSelect={onValidate}>\n {formatMessage({\n id: getTrad('checkControl.crop-original'),\n defaultMessage: 'Crop the original asset',\n })}\n </Menu.Item>\n\n {onDuplicate && (\n <Menu.Item onSelect={onDuplicate}>\n {formatMessage({\n id: getTrad('checkControl.crop-duplicate'),\n defaultMessage: 'Duplicate & crop the asset',\n })}\n </Menu.Item>\n )}\n </Menu.Content>\n </Menu.Root>\n </Flex>\n </CroppingActionRow>\n </FocusTrap>\n );\n};\n\nconst Trigger = styled(Menu.Trigger)`\n svg {\n > g,\n path {\n fill: ${({ theme }) => theme.colors.neutral500};\n }\n }\n\n &:hover {\n svg {\n > g,\n path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n }\n }\n\n &:active {\n svg {\n > g,\n path {\n fill: ${({ theme }) => theme.colors.neutral400};\n }\n }\n }\n`;\n"],"names":["CroppingActions","onCancel","onValidate","onDuplicate","formatMessage","useIntl","theme","useTheme","_jsx","FocusTrap","onEscape","CroppingActionRow","justifyContent","paddingLeft","paddingRight","_jsxs","Flex","gap","IconButton","label","id","getTrad","defaultMessage","onClick","Cross","Menu","Root","Trigger","aria-label","variant","endIcon","Check","aria-hidden","focusable","style","position","top","fill","Content","zIndex","zIndices","dialog","Item","onSelect","styled","colors","neutral500","neutral600","neutral400"],"mappings":";;;;;;;;;;;;;;;AAeO,MAAMA,kBAAkB,CAAC,EAAEC,QAAQ,EAAEC,UAAU,EAAEC,WAAW,EAAwB,GAAA;IACzF,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAMC,KAAAA,GAAQC,yBAAAA,EAAAA;AAEd,IAAA,qBACEC,cAAA,CAACC,sBAAAA,EAAAA;QAAUC,QAAAA,EAAUT,QAAAA;AACnB,QAAA,QAAA,gBAAAO,cAAA,CAACG,mCAAAA,EAAAA;YAAkBC,cAAAA,EAAe,UAAA;YAAWC,WAAAA,EAAa,CAAA;YAAGC,YAAAA,EAAc,CAAA;AACzE,YAAA,QAAA,gBAAAC,eAAA,CAACC,iBAAAA,EAAAA;gBAAKC,GAAAA,EAAK,CAAA;;kCACTT,cAAA,CAACU,uBAAAA,EAAAA;AACCC,wBAAAA,KAAAA,EAAOf,aAAAA,CAAc;AACnBgB,4BAAAA,EAAAA,EAAIC,eAAAA,CAAQ,wBAAA,CAAA;4BACZC,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACAC,OAAAA,EAAStB,QAAAA;AAET,wBAAA,QAAA,gBAAAO,cAAA,CAACgB,WAAAA,EAAAA,EAAAA;;AAGH,kCAAAT,eAAA,CAACU,kBAAKC,IAAI,EAAA;;0CACRlB,cAAA,CAACmB,OAAAA,EAAAA;AACCC,gCAAAA,YAAAA,EAAYxB,aAAAA,CAAc;AACxBgB,oCAAAA,EAAAA,EAAIC,eAAAA,CAAQ,mBAAA,CAAA;oCACZC,cAAAA,EAAgB;AAClB,iCAAA,CAAA;gCACAO,OAAAA,EAAQ,UAAA;gCACRhB,WAAAA,EAAa,CAAA;gCACbC,YAAAA,EAAc,CAAA;gCACdgB,OAAAA,EAAS,IAAA;AAET,gCAAA,QAAA,gBAAAtB,cAAA,CAACuB,WAAAA,EAAAA;oCACCC,aAAW,EAAA,IAAA;oCACXC,SAAAA,EAAW,KAAA;oCACXC,KAAAA,EAAO;wCAAEC,QAAAA,EAAU,UAAA;wCAAYC,GAAAA,EAAK;AAAE,qCAAA;oCACtCC,IAAAA,EAAK;;;AAGT,0CAAAtB,eAAA,CAACU,kBAAKa,OAAO,EAAA;gCAACC,MAAAA,EAAQjC,KAAAA,CAAMkC,QAAQ,CAACC,MAAM;;AACzC,kDAAAjC,cAAA,CAACiB,kBAAKiB,IAAI,EAAA;wCAACC,QAAAA,EAAUzC,UAAAA;kDAClBE,aAAAA,CAAc;AACbgB,4CAAAA,EAAAA,EAAIC,eAAAA,CAAQ,4BAAA,CAAA;4CACZC,cAAAA,EAAgB;AAClB,yCAAA;;oCAGDnB,WAAAA,kBACCK,cAAA,CAACiB,kBAAKiB,IAAI,EAAA;wCAACC,QAAAA,EAAUxC,WAAAA;kDAClBC,aAAAA,CAAc;AACbgB,4CAAAA,EAAAA,EAAIC,eAAAA,CAAQ,6BAAA,CAAA;4CACZC,cAAAA,EAAgB;AAClB,yCAAA;;;;;;;;;;AASlB;AAEA,MAAMK,OAAAA,GAAUiB,uBAAAA,CAAOnB,iBAAAA,CAAKE,OAAO,CAAC;;;;YAIxB,EAAE,CAAC,EAAErB,KAAK,EAAE,GAAKA,KAAAA,CAAMuC,MAAM,CAACC,UAAU,CAAC;;;;;;;;cAQvC,EAAE,CAAC,EAAExC,KAAK,EAAE,GAAKA,KAAAA,CAAMuC,MAAM,CAACE,UAAU,CAAC;;;;;;;;;cASzC,EAAE,CAAC,EAAEzC,KAAK,EAAE,GAAKA,KAAAA,CAAMuC,MAAM,CAACG,UAAU,CAAC;;;;AAIvD,CAAC;;;;"}
1
+ {"version":3,"file":"CroppingActions.js","sources":["../../../../../admin/src/components/EditAssetDialog/PreviewBox/CroppingActions.tsx"],"sourcesContent":["import { Flex, FocusTrap, IconButton, Menu } from '@strapi/design-system';\nimport { Check, Cross } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled, useTheme } from 'styled-components';\n\nimport { getTrad } from '../../../utils';\n\nimport { CroppingActionRow } from './PreviewComponents';\n\ninterface CroppingActionsProps {\n onCancel: () => void;\n onValidate: () => void;\n onDuplicate?: () => void;\n}\n\nexport const CroppingActions = ({ onCancel, onValidate, onDuplicate }: CroppingActionsProps) => {\n const { formatMessage } = useIntl();\n const theme = useTheme();\n\n return (\n <FocusTrap onEscape={onCancel}>\n <CroppingActionRow justifyContent=\"flex-end\" paddingLeft={3} paddingRight={3}>\n <Flex gap={1}>\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.stop-crop'),\n defaultMessage: 'Stop cropping',\n })}\n onClick={onCancel}\n >\n <Cross />\n </IconButton>\n\n <Menu.Root>\n <Trigger\n aria-label={formatMessage({\n id: getTrad('control-card.crop'),\n defaultMessage: 'Crop',\n })}\n variant=\"tertiary\"\n paddingLeft={2}\n paddingRight={2}\n endIcon={null}\n >\n <Check\n aria-hidden\n focusable={false}\n style={{ position: 'relative', top: 2 }}\n fill=\"#C0C0D0\"\n />\n </Trigger>\n <Menu.Content zIndex={theme.zIndices.dialog}>\n <Menu.Item onSelect={onValidate}>\n {formatMessage({\n id: getTrad('checkControl.crop-original'),\n defaultMessage: 'Crop the original asset',\n })}\n </Menu.Item>\n\n {onDuplicate && (\n <Menu.Item onSelect={onDuplicate}>\n {formatMessage({\n id: getTrad('checkControl.crop-duplicate'),\n defaultMessage: 'Duplicate & crop the asset',\n })}\n </Menu.Item>\n )}\n </Menu.Content>\n </Menu.Root>\n </Flex>\n </CroppingActionRow>\n </FocusTrap>\n );\n};\n\nconst Trigger = styled(Menu.Trigger)`\n svg {\n > g,\n path {\n fill: ${({ theme }) => theme.colors.neutral500};\n }\n }\n\n &:hover {\n svg {\n > g,\n path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n }\n }\n\n &:active {\n svg {\n > g,\n path {\n fill: ${({ theme }) => theme.colors.neutral400};\n }\n }\n }\n`;\n"],"names":["CroppingActions","onCancel","onValidate","onDuplicate","formatMessage","useIntl","theme","useTheme","_jsx","FocusTrap","onEscape","CroppingActionRow","justifyContent","paddingLeft","paddingRight","_jsxs","Flex","gap","IconButton","label","id","getTrad","defaultMessage","onClick","Cross","Menu","Root","Trigger","aria-label","variant","endIcon","Check","aria-hidden","focusable","style","position","top","fill","Content","zIndex","zIndices","dialog","Item","onSelect","styled","colors","neutral500","neutral600","neutral400"],"mappings":";;;;;;;;;;;;;;AAeO,MAAMA,kBAAkB,CAAC,EAAEC,QAAQ,EAAEC,UAAU,EAAEC,WAAW,EAAwB,GAAA;IACzF,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAMC,KAAAA,GAAQC,yBAAAA,EAAAA;AAEd,IAAA,qBACEC,cAAA,CAACC,sBAAAA,EAAAA;QAAUC,QAAAA,EAAUT,QAAAA;AACnB,QAAA,QAAA,gBAAAO,cAAA,CAACG,mCAAAA,EAAAA;YAAkBC,cAAAA,EAAe,UAAA;YAAWC,WAAAA,EAAa,CAAA;YAAGC,YAAAA,EAAc,CAAA;AACzE,YAAA,QAAA,gBAAAC,eAAA,CAACC,iBAAAA,EAAAA;gBAAKC,GAAAA,EAAK,CAAA;;kCACTT,cAAA,CAACU,uBAAAA,EAAAA;AACCC,wBAAAA,KAAAA,EAAOf,aAAAA,CAAc;AACnBgB,4BAAAA,EAAAA,EAAIC,eAAAA,CAAQ,wBAAA,CAAA;4BACZC,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACAC,OAAAA,EAAStB,QAAAA;AAET,wBAAA,QAAA,gBAAAO,cAAA,CAACgB,WAAAA,EAAAA,EAAAA;;AAGH,kCAAAT,eAAA,CAACU,kBAAKC,IAAI,EAAA;;0CACRlB,cAAA,CAACmB,OAAAA,EAAAA;AACCC,gCAAAA,YAAAA,EAAYxB,aAAAA,CAAc;AACxBgB,oCAAAA,EAAAA,EAAIC,eAAAA,CAAQ,mBAAA,CAAA;oCACZC,cAAAA,EAAgB;AAClB,iCAAA,CAAA;gCACAO,OAAAA,EAAQ,UAAA;gCACRhB,WAAAA,EAAa,CAAA;gCACbC,YAAAA,EAAc,CAAA;gCACdgB,OAAAA,EAAS,IAAA;AAET,gCAAA,QAAA,gBAAAtB,cAAA,CAACuB,WAAAA,EAAAA;oCACCC,aAAW,EAAA,IAAA;oCACXC,SAAAA,EAAW,KAAA;oCACXC,KAAAA,EAAO;wCAAEC,QAAAA,EAAU,UAAA;wCAAYC,GAAAA,EAAK;AAAE,qCAAA;oCACtCC,IAAAA,EAAK;;;AAGT,0CAAAtB,eAAA,CAACU,kBAAKa,OAAO,EAAA;gCAACC,MAAAA,EAAQjC,KAAAA,CAAMkC,QAAQ,CAACC,MAAM;;AACzC,kDAAAjC,cAAA,CAACiB,kBAAKiB,IAAI,EAAA;wCAACC,QAAAA,EAAUzC,UAAAA;kDAClBE,aAAAA,CAAc;AACbgB,4CAAAA,EAAAA,EAAIC,eAAAA,CAAQ,4BAAA,CAAA;4CACZC,cAAAA,EAAgB;AAClB,yCAAA;;oCAGDnB,WAAAA,kBACCK,cAAA,CAACiB,kBAAKiB,IAAI,EAAA;wCAACC,QAAAA,EAAUxC,WAAAA;kDAClBC,aAAAA,CAAc;AACbgB,4CAAAA,EAAAA,EAAIC,eAAAA,CAAQ,6BAAA,CAAA;4CACZC,cAAAA,EAAgB;AAClB,yCAAA;;;;;;;;;;AASlB;AAEA,MAAMK,OAAAA,GAAUiB,uBAAAA,CAAOnB,iBAAAA,CAAKE,OAAO,CAAC;;;;YAIxB,EAAE,CAAC,EAAErB,KAAK,EAAE,GAAKA,KAAAA,CAAMuC,MAAM,CAACC,UAAU,CAAC;;;;;;;;cAQvC,EAAE,CAAC,EAAExC,KAAK,EAAE,GAAKA,KAAAA,CAAMuC,MAAM,CAACE,UAAU,CAAC;;;;;;;;;cASzC,EAAE,CAAC,EAAEzC,KAAK,EAAE,GAAKA,KAAAA,CAAMuC,MAAM,CAACG,UAAU,CAAC;;;;AAIvD,CAAC;;;;"}
@@ -7,7 +7,6 @@ import 'byte-size';
7
7
  import 'date-fns';
8
8
  import { getTrad } from '../../../utils/getTrad.mjs';
9
9
  import 'qs';
10
- import '../../../utils/typeFromMime.mjs';
11
10
  import '../../../utils/urlYupSchema.mjs';
12
11
  import { CroppingActionRow } from './PreviewComponents.mjs';
13
12
 
@@ -1 +1 @@
1
- {"version":3,"file":"CroppingActions.mjs","sources":["../../../../../admin/src/components/EditAssetDialog/PreviewBox/CroppingActions.tsx"],"sourcesContent":["import { Flex, FocusTrap, IconButton, Menu } from '@strapi/design-system';\nimport { Check, Cross } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled, useTheme } from 'styled-components';\n\nimport { getTrad } from '../../../utils';\n\nimport { CroppingActionRow } from './PreviewComponents';\n\ninterface CroppingActionsProps {\n onCancel: () => void;\n onValidate: () => void;\n onDuplicate?: () => void;\n}\n\nexport const CroppingActions = ({ onCancel, onValidate, onDuplicate }: CroppingActionsProps) => {\n const { formatMessage } = useIntl();\n const theme = useTheme();\n\n return (\n <FocusTrap onEscape={onCancel}>\n <CroppingActionRow justifyContent=\"flex-end\" paddingLeft={3} paddingRight={3}>\n <Flex gap={1}>\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.stop-crop'),\n defaultMessage: 'Stop cropping',\n })}\n onClick={onCancel}\n >\n <Cross />\n </IconButton>\n\n <Menu.Root>\n <Trigger\n aria-label={formatMessage({\n id: getTrad('control-card.crop'),\n defaultMessage: 'Crop',\n })}\n variant=\"tertiary\"\n paddingLeft={2}\n paddingRight={2}\n endIcon={null}\n >\n <Check\n aria-hidden\n focusable={false}\n style={{ position: 'relative', top: 2 }}\n fill=\"#C0C0D0\"\n />\n </Trigger>\n <Menu.Content zIndex={theme.zIndices.dialog}>\n <Menu.Item onSelect={onValidate}>\n {formatMessage({\n id: getTrad('checkControl.crop-original'),\n defaultMessage: 'Crop the original asset',\n })}\n </Menu.Item>\n\n {onDuplicate && (\n <Menu.Item onSelect={onDuplicate}>\n {formatMessage({\n id: getTrad('checkControl.crop-duplicate'),\n defaultMessage: 'Duplicate & crop the asset',\n })}\n </Menu.Item>\n )}\n </Menu.Content>\n </Menu.Root>\n </Flex>\n </CroppingActionRow>\n </FocusTrap>\n );\n};\n\nconst Trigger = styled(Menu.Trigger)`\n svg {\n > g,\n path {\n fill: ${({ theme }) => theme.colors.neutral500};\n }\n }\n\n &:hover {\n svg {\n > g,\n path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n }\n }\n\n &:active {\n svg {\n > g,\n path {\n fill: ${({ theme }) => theme.colors.neutral400};\n }\n }\n }\n`;\n"],"names":["CroppingActions","onCancel","onValidate","onDuplicate","formatMessage","useIntl","theme","useTheme","_jsx","FocusTrap","onEscape","CroppingActionRow","justifyContent","paddingLeft","paddingRight","_jsxs","Flex","gap","IconButton","label","id","getTrad","defaultMessage","onClick","Cross","Menu","Root","Trigger","aria-label","variant","endIcon","Check","aria-hidden","focusable","style","position","top","fill","Content","zIndex","zIndices","dialog","Item","onSelect","styled","colors","neutral500","neutral600","neutral400"],"mappings":";;;;;;;;;;;;;AAeO,MAAMA,kBAAkB,CAAC,EAAEC,QAAQ,EAAEC,UAAU,EAAEC,WAAW,EAAwB,GAAA;IACzF,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMC,KAAAA,GAAQC,QAAAA,EAAAA;AAEd,IAAA,qBACEC,GAAA,CAACC,SAAAA,EAAAA;QAAUC,QAAAA,EAAUT,QAAAA;AACnB,QAAA,QAAA,gBAAAO,GAAA,CAACG,iBAAAA,EAAAA;YAAkBC,cAAAA,EAAe,UAAA;YAAWC,WAAAA,EAAa,CAAA;YAAGC,YAAAA,EAAc,CAAA;AACzE,YAAA,QAAA,gBAAAC,IAAA,CAACC,IAAAA,EAAAA;gBAAKC,GAAAA,EAAK,CAAA;;kCACTT,GAAA,CAACU,UAAAA,EAAAA;AACCC,wBAAAA,KAAAA,EAAOf,aAAAA,CAAc;AACnBgB,4BAAAA,EAAAA,EAAIC,OAAAA,CAAQ,wBAAA,CAAA;4BACZC,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACAC,OAAAA,EAAStB,QAAAA;AAET,wBAAA,QAAA,gBAAAO,GAAA,CAACgB,KAAAA,EAAAA,EAAAA;;AAGH,kCAAAT,IAAA,CAACU,KAAKC,IAAI,EAAA;;0CACRlB,GAAA,CAACmB,OAAAA,EAAAA;AACCC,gCAAAA,YAAAA,EAAYxB,aAAAA,CAAc;AACxBgB,oCAAAA,EAAAA,EAAIC,OAAAA,CAAQ,mBAAA,CAAA;oCACZC,cAAAA,EAAgB;AAClB,iCAAA,CAAA;gCACAO,OAAAA,EAAQ,UAAA;gCACRhB,WAAAA,EAAa,CAAA;gCACbC,YAAAA,EAAc,CAAA;gCACdgB,OAAAA,EAAS,IAAA;AAET,gCAAA,QAAA,gBAAAtB,GAAA,CAACuB,KAAAA,EAAAA;oCACCC,aAAW,EAAA,IAAA;oCACXC,SAAAA,EAAW,KAAA;oCACXC,KAAAA,EAAO;wCAAEC,QAAAA,EAAU,UAAA;wCAAYC,GAAAA,EAAK;AAAE,qCAAA;oCACtCC,IAAAA,EAAK;;;AAGT,0CAAAtB,IAAA,CAACU,KAAKa,OAAO,EAAA;gCAACC,MAAAA,EAAQjC,KAAAA,CAAMkC,QAAQ,CAACC,MAAM;;AACzC,kDAAAjC,GAAA,CAACiB,KAAKiB,IAAI,EAAA;wCAACC,QAAAA,EAAUzC,UAAAA;kDAClBE,aAAAA,CAAc;AACbgB,4CAAAA,EAAAA,EAAIC,OAAAA,CAAQ,4BAAA,CAAA;4CACZC,cAAAA,EAAgB;AAClB,yCAAA;;oCAGDnB,WAAAA,kBACCK,GAAA,CAACiB,KAAKiB,IAAI,EAAA;wCAACC,QAAAA,EAAUxC,WAAAA;kDAClBC,aAAAA,CAAc;AACbgB,4CAAAA,EAAAA,EAAIC,OAAAA,CAAQ,6BAAA,CAAA;4CACZC,cAAAA,EAAgB;AAClB,yCAAA;;;;;;;;;;AASlB;AAEA,MAAMK,OAAAA,GAAUiB,MAAAA,CAAOnB,IAAAA,CAAKE,OAAO,CAAC;;;;YAIxB,EAAE,CAAC,EAAErB,KAAK,EAAE,GAAKA,KAAAA,CAAMuC,MAAM,CAACC,UAAU,CAAC;;;;;;;;cAQvC,EAAE,CAAC,EAAExC,KAAK,EAAE,GAAKA,KAAAA,CAAMuC,MAAM,CAACE,UAAU,CAAC;;;;;;;;;cASzC,EAAE,CAAC,EAAEzC,KAAK,EAAE,GAAKA,KAAAA,CAAMuC,MAAM,CAACG,UAAU,CAAC;;;;AAIvD,CAAC;;;;"}
1
+ {"version":3,"file":"CroppingActions.mjs","sources":["../../../../../admin/src/components/EditAssetDialog/PreviewBox/CroppingActions.tsx"],"sourcesContent":["import { Flex, FocusTrap, IconButton, Menu } from '@strapi/design-system';\nimport { Check, Cross } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled, useTheme } from 'styled-components';\n\nimport { getTrad } from '../../../utils';\n\nimport { CroppingActionRow } from './PreviewComponents';\n\ninterface CroppingActionsProps {\n onCancel: () => void;\n onValidate: () => void;\n onDuplicate?: () => void;\n}\n\nexport const CroppingActions = ({ onCancel, onValidate, onDuplicate }: CroppingActionsProps) => {\n const { formatMessage } = useIntl();\n const theme = useTheme();\n\n return (\n <FocusTrap onEscape={onCancel}>\n <CroppingActionRow justifyContent=\"flex-end\" paddingLeft={3} paddingRight={3}>\n <Flex gap={1}>\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.stop-crop'),\n defaultMessage: 'Stop cropping',\n })}\n onClick={onCancel}\n >\n <Cross />\n </IconButton>\n\n <Menu.Root>\n <Trigger\n aria-label={formatMessage({\n id: getTrad('control-card.crop'),\n defaultMessage: 'Crop',\n })}\n variant=\"tertiary\"\n paddingLeft={2}\n paddingRight={2}\n endIcon={null}\n >\n <Check\n aria-hidden\n focusable={false}\n style={{ position: 'relative', top: 2 }}\n fill=\"#C0C0D0\"\n />\n </Trigger>\n <Menu.Content zIndex={theme.zIndices.dialog}>\n <Menu.Item onSelect={onValidate}>\n {formatMessage({\n id: getTrad('checkControl.crop-original'),\n defaultMessage: 'Crop the original asset',\n })}\n </Menu.Item>\n\n {onDuplicate && (\n <Menu.Item onSelect={onDuplicate}>\n {formatMessage({\n id: getTrad('checkControl.crop-duplicate'),\n defaultMessage: 'Duplicate & crop the asset',\n })}\n </Menu.Item>\n )}\n </Menu.Content>\n </Menu.Root>\n </Flex>\n </CroppingActionRow>\n </FocusTrap>\n );\n};\n\nconst Trigger = styled(Menu.Trigger)`\n svg {\n > g,\n path {\n fill: ${({ theme }) => theme.colors.neutral500};\n }\n }\n\n &:hover {\n svg {\n > g,\n path {\n fill: ${({ theme }) => theme.colors.neutral600};\n }\n }\n }\n\n &:active {\n svg {\n > g,\n path {\n fill: ${({ theme }) => theme.colors.neutral400};\n }\n }\n }\n`;\n"],"names":["CroppingActions","onCancel","onValidate","onDuplicate","formatMessage","useIntl","theme","useTheme","_jsx","FocusTrap","onEscape","CroppingActionRow","justifyContent","paddingLeft","paddingRight","_jsxs","Flex","gap","IconButton","label","id","getTrad","defaultMessage","onClick","Cross","Menu","Root","Trigger","aria-label","variant","endIcon","Check","aria-hidden","focusable","style","position","top","fill","Content","zIndex","zIndices","dialog","Item","onSelect","styled","colors","neutral500","neutral600","neutral400"],"mappings":";;;;;;;;;;;;AAeO,MAAMA,kBAAkB,CAAC,EAAEC,QAAQ,EAAEC,UAAU,EAAEC,WAAW,EAAwB,GAAA;IACzF,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMC,KAAAA,GAAQC,QAAAA,EAAAA;AAEd,IAAA,qBACEC,GAAA,CAACC,SAAAA,EAAAA;QAAUC,QAAAA,EAAUT,QAAAA;AACnB,QAAA,QAAA,gBAAAO,GAAA,CAACG,iBAAAA,EAAAA;YAAkBC,cAAAA,EAAe,UAAA;YAAWC,WAAAA,EAAa,CAAA;YAAGC,YAAAA,EAAc,CAAA;AACzE,YAAA,QAAA,gBAAAC,IAAA,CAACC,IAAAA,EAAAA;gBAAKC,GAAAA,EAAK,CAAA;;kCACTT,GAAA,CAACU,UAAAA,EAAAA;AACCC,wBAAAA,KAAAA,EAAOf,aAAAA,CAAc;AACnBgB,4BAAAA,EAAAA,EAAIC,OAAAA,CAAQ,wBAAA,CAAA;4BACZC,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACAC,OAAAA,EAAStB,QAAAA;AAET,wBAAA,QAAA,gBAAAO,GAAA,CAACgB,KAAAA,EAAAA,EAAAA;;AAGH,kCAAAT,IAAA,CAACU,KAAKC,IAAI,EAAA;;0CACRlB,GAAA,CAACmB,OAAAA,EAAAA;AACCC,gCAAAA,YAAAA,EAAYxB,aAAAA,CAAc;AACxBgB,oCAAAA,EAAAA,EAAIC,OAAAA,CAAQ,mBAAA,CAAA;oCACZC,cAAAA,EAAgB;AAClB,iCAAA,CAAA;gCACAO,OAAAA,EAAQ,UAAA;gCACRhB,WAAAA,EAAa,CAAA;gCACbC,YAAAA,EAAc,CAAA;gCACdgB,OAAAA,EAAS,IAAA;AAET,gCAAA,QAAA,gBAAAtB,GAAA,CAACuB,KAAAA,EAAAA;oCACCC,aAAW,EAAA,IAAA;oCACXC,SAAAA,EAAW,KAAA;oCACXC,KAAAA,EAAO;wCAAEC,QAAAA,EAAU,UAAA;wCAAYC,GAAAA,EAAK;AAAE,qCAAA;oCACtCC,IAAAA,EAAK;;;AAGT,0CAAAtB,IAAA,CAACU,KAAKa,OAAO,EAAA;gCAACC,MAAAA,EAAQjC,KAAAA,CAAMkC,QAAQ,CAACC,MAAM;;AACzC,kDAAAjC,GAAA,CAACiB,KAAKiB,IAAI,EAAA;wCAACC,QAAAA,EAAUzC,UAAAA;kDAClBE,aAAAA,CAAc;AACbgB,4CAAAA,EAAAA,EAAIC,OAAAA,CAAQ,4BAAA,CAAA;4CACZC,cAAAA,EAAgB;AAClB,yCAAA;;oCAGDnB,WAAAA,kBACCK,GAAA,CAACiB,KAAKiB,IAAI,EAAA;wCAACC,QAAAA,EAAUxC,WAAAA;kDAClBC,aAAAA,CAAc;AACbgB,4CAAAA,EAAAA,EAAIC,OAAAA,CAAQ,6BAAA,CAAA;4CACZC,cAAAA,EAAgB;AAClB,yCAAA;;;;;;;;;;AASlB;AAEA,MAAMK,OAAAA,GAAUiB,MAAAA,CAAOnB,IAAAA,CAAKE,OAAO,CAAC;;;;YAIxB,EAAE,CAAC,EAAErB,KAAK,EAAE,GAAKA,KAAAA,CAAMuC,MAAM,CAACC,UAAU,CAAC;;;;;;;;cAQvC,EAAE,CAAC,EAAExC,KAAK,EAAE,GAAKA,KAAAA,CAAMuC,MAAM,CAACE,UAAU,CAAC;;;;;;;;;cASzC,EAAE,CAAC,EAAEzC,KAAK,EAAE,GAAKA,KAAAA,CAAMuC,MAAM,CAACG,UAAU,CAAC;;;;AAIvD,CAAC;;;;"}
@@ -8,7 +8,6 @@ require('byte-size');
8
8
  require('date-fns');
9
9
  var getTrad = require('../../../utils/getTrad.js');
10
10
  require('qs');
11
- require('../../../utils/typeFromMime.js');
12
11
  require('../../../utils/urlYupSchema.js');
13
12
  var PreviewComponents = require('./PreviewComponents.js');
14
13
 
@@ -1 +1 @@
1
- {"version":3,"file":"FocalPointActions.js","sources":["../../../../../admin/src/components/EditAssetDialog/PreviewBox/FocalPointActions.tsx"],"sourcesContent":["import { Flex, FocusTrap, IconButton } from '@strapi/design-system';\nimport { Check, Cross, ArrowsCounterClockwise } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../../utils';\n\nimport { FocalPointActionRow } from './PreviewComponents';\n\ninterface FocalPointActionsProps {\n onCancel: () => void;\n onValidate: () => void;\n onReset: () => void;\n}\n\nexport const FocalPointActions = ({ onCancel, onValidate, onReset }: FocalPointActionsProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <FocusTrap onEscape={onCancel}>\n <FocalPointActionRow justifyContent=\"flex-end\" paddingLeft={3} paddingRight={3}>\n <Flex gap={1}>\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.stop-focal-point'),\n defaultMessage: 'Cancel focal point selection',\n })}\n onClick={onCancel}\n >\n <Cross />\n </IconButton>\n\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.reset-focal-point'),\n defaultMessage: 'Reset to center',\n })}\n onClick={onReset}\n >\n <ArrowsCounterClockwise />\n </IconButton>\n\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.save-focal-point'),\n defaultMessage: 'Save focal point',\n })}\n onClick={onValidate}\n >\n <Check />\n </IconButton>\n </Flex>\n </FocalPointActionRow>\n </FocusTrap>\n );\n};\n"],"names":["FocalPointActions","onCancel","onValidate","onReset","formatMessage","useIntl","_jsx","FocusTrap","onEscape","FocalPointActionRow","justifyContent","paddingLeft","paddingRight","_jsxs","Flex","gap","IconButton","label","id","getTrad","defaultMessage","onClick","Cross","ArrowsCounterClockwise","Check"],"mappings":";;;;;;;;;;;;;;AAcO,MAAMA,oBAAoB,CAAC,EAAEC,QAAQ,EAAEC,UAAU,EAAEC,OAAO,EAA0B,GAAA;IACzF,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAE1B,IAAA,qBACEC,cAAA,CAACC,sBAAAA,EAAAA;QAAUC,QAAAA,EAAUP,QAAAA;AACnB,QAAA,QAAA,gBAAAK,cAAA,CAACG,qCAAAA,EAAAA;YAAoBC,cAAAA,EAAe,UAAA;YAAWC,WAAAA,EAAa,CAAA;YAAGC,YAAAA,EAAc,CAAA;AAC3E,YAAA,QAAA,gBAAAC,eAAA,CAACC,iBAAAA,EAAAA;gBAAKC,GAAAA,EAAK,CAAA;;kCACTT,cAAA,CAACU,uBAAAA,EAAAA;AACCC,wBAAAA,KAAAA,EAAOb,aAAAA,CAAc;AACnBc,4BAAAA,EAAAA,EAAIC,eAAAA,CAAQ,+BAAA,CAAA;4BACZC,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACAC,OAAAA,EAASpB,QAAAA;AAET,wBAAA,QAAA,gBAAAK,cAAA,CAACgB,WAAAA,EAAAA,EAAAA;;kCAGHhB,cAAA,CAACU,uBAAAA,EAAAA;AACCC,wBAAAA,KAAAA,EAAOb,aAAAA,CAAc;AACnBc,4BAAAA,EAAAA,EAAIC,eAAAA,CAAQ,gCAAA,CAAA;4BACZC,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACAC,OAAAA,EAASlB,OAAAA;AAET,wBAAA,QAAA,gBAAAG,cAAA,CAACiB,4BAAAA,EAAAA,EAAAA;;kCAGHjB,cAAA,CAACU,uBAAAA,EAAAA;AACCC,wBAAAA,KAAAA,EAAOb,aAAAA,CAAc;AACnBc,4BAAAA,EAAAA,EAAIC,eAAAA,CAAQ,+BAAA,CAAA;4BACZC,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACAC,OAAAA,EAASnB,UAAAA;AAET,wBAAA,QAAA,gBAAAI,cAAA,CAACkB,WAAAA,EAAAA,EAAAA;;;;;;AAMb;;;;"}
1
+ {"version":3,"file":"FocalPointActions.js","sources":["../../../../../admin/src/components/EditAssetDialog/PreviewBox/FocalPointActions.tsx"],"sourcesContent":["import { Flex, FocusTrap, IconButton } from '@strapi/design-system';\nimport { Check, Cross, ArrowsCounterClockwise } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../../utils';\n\nimport { FocalPointActionRow } from './PreviewComponents';\n\ninterface FocalPointActionsProps {\n onCancel: () => void;\n onValidate: () => void;\n onReset: () => void;\n}\n\nexport const FocalPointActions = ({ onCancel, onValidate, onReset }: FocalPointActionsProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <FocusTrap onEscape={onCancel}>\n <FocalPointActionRow justifyContent=\"flex-end\" paddingLeft={3} paddingRight={3}>\n <Flex gap={1}>\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.stop-focal-point'),\n defaultMessage: 'Cancel focal point selection',\n })}\n onClick={onCancel}\n >\n <Cross />\n </IconButton>\n\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.reset-focal-point'),\n defaultMessage: 'Reset to center',\n })}\n onClick={onReset}\n >\n <ArrowsCounterClockwise />\n </IconButton>\n\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.save-focal-point'),\n defaultMessage: 'Save focal point',\n })}\n onClick={onValidate}\n >\n <Check />\n </IconButton>\n </Flex>\n </FocalPointActionRow>\n </FocusTrap>\n );\n};\n"],"names":["FocalPointActions","onCancel","onValidate","onReset","formatMessage","useIntl","_jsx","FocusTrap","onEscape","FocalPointActionRow","justifyContent","paddingLeft","paddingRight","_jsxs","Flex","gap","IconButton","label","id","getTrad","defaultMessage","onClick","Cross","ArrowsCounterClockwise","Check"],"mappings":";;;;;;;;;;;;;AAcO,MAAMA,oBAAoB,CAAC,EAAEC,QAAQ,EAAEC,UAAU,EAAEC,OAAO,EAA0B,GAAA;IACzF,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAE1B,IAAA,qBACEC,cAAA,CAACC,sBAAAA,EAAAA;QAAUC,QAAAA,EAAUP,QAAAA;AACnB,QAAA,QAAA,gBAAAK,cAAA,CAACG,qCAAAA,EAAAA;YAAoBC,cAAAA,EAAe,UAAA;YAAWC,WAAAA,EAAa,CAAA;YAAGC,YAAAA,EAAc,CAAA;AAC3E,YAAA,QAAA,gBAAAC,eAAA,CAACC,iBAAAA,EAAAA;gBAAKC,GAAAA,EAAK,CAAA;;kCACTT,cAAA,CAACU,uBAAAA,EAAAA;AACCC,wBAAAA,KAAAA,EAAOb,aAAAA,CAAc;AACnBc,4BAAAA,EAAAA,EAAIC,eAAAA,CAAQ,+BAAA,CAAA;4BACZC,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACAC,OAAAA,EAASpB,QAAAA;AAET,wBAAA,QAAA,gBAAAK,cAAA,CAACgB,WAAAA,EAAAA,EAAAA;;kCAGHhB,cAAA,CAACU,uBAAAA,EAAAA;AACCC,wBAAAA,KAAAA,EAAOb,aAAAA,CAAc;AACnBc,4BAAAA,EAAAA,EAAIC,eAAAA,CAAQ,gCAAA,CAAA;4BACZC,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACAC,OAAAA,EAASlB,OAAAA;AAET,wBAAA,QAAA,gBAAAG,cAAA,CAACiB,4BAAAA,EAAAA,EAAAA;;kCAGHjB,cAAA,CAACU,uBAAAA,EAAAA;AACCC,wBAAAA,KAAAA,EAAOb,aAAAA,CAAc;AACnBc,4BAAAA,EAAAA,EAAIC,eAAAA,CAAQ,+BAAA,CAAA;4BACZC,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACAC,OAAAA,EAASnB,UAAAA;AAET,wBAAA,QAAA,gBAAAI,cAAA,CAACkB,WAAAA,EAAAA,EAAAA;;;;;;AAMb;;;;"}
@@ -6,7 +6,6 @@ import 'byte-size';
6
6
  import 'date-fns';
7
7
  import { getTrad } from '../../../utils/getTrad.mjs';
8
8
  import 'qs';
9
- import '../../../utils/typeFromMime.mjs';
10
9
  import '../../../utils/urlYupSchema.mjs';
11
10
  import { FocalPointActionRow } from './PreviewComponents.mjs';
12
11
 
@@ -1 +1 @@
1
- {"version":3,"file":"FocalPointActions.mjs","sources":["../../../../../admin/src/components/EditAssetDialog/PreviewBox/FocalPointActions.tsx"],"sourcesContent":["import { Flex, FocusTrap, IconButton } from '@strapi/design-system';\nimport { Check, Cross, ArrowsCounterClockwise } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../../utils';\n\nimport { FocalPointActionRow } from './PreviewComponents';\n\ninterface FocalPointActionsProps {\n onCancel: () => void;\n onValidate: () => void;\n onReset: () => void;\n}\n\nexport const FocalPointActions = ({ onCancel, onValidate, onReset }: FocalPointActionsProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <FocusTrap onEscape={onCancel}>\n <FocalPointActionRow justifyContent=\"flex-end\" paddingLeft={3} paddingRight={3}>\n <Flex gap={1}>\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.stop-focal-point'),\n defaultMessage: 'Cancel focal point selection',\n })}\n onClick={onCancel}\n >\n <Cross />\n </IconButton>\n\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.reset-focal-point'),\n defaultMessage: 'Reset to center',\n })}\n onClick={onReset}\n >\n <ArrowsCounterClockwise />\n </IconButton>\n\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.save-focal-point'),\n defaultMessage: 'Save focal point',\n })}\n onClick={onValidate}\n >\n <Check />\n </IconButton>\n </Flex>\n </FocalPointActionRow>\n </FocusTrap>\n );\n};\n"],"names":["FocalPointActions","onCancel","onValidate","onReset","formatMessage","useIntl","_jsx","FocusTrap","onEscape","FocalPointActionRow","justifyContent","paddingLeft","paddingRight","_jsxs","Flex","gap","IconButton","label","id","getTrad","defaultMessage","onClick","Cross","ArrowsCounterClockwise","Check"],"mappings":";;;;;;;;;;;;AAcO,MAAMA,oBAAoB,CAAC,EAAEC,QAAQ,EAAEC,UAAU,EAAEC,OAAO,EAA0B,GAAA;IACzF,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAE1B,IAAA,qBACEC,GAAA,CAACC,SAAAA,EAAAA;QAAUC,QAAAA,EAAUP,QAAAA;AACnB,QAAA,QAAA,gBAAAK,GAAA,CAACG,mBAAAA,EAAAA;YAAoBC,cAAAA,EAAe,UAAA;YAAWC,WAAAA,EAAa,CAAA;YAAGC,YAAAA,EAAc,CAAA;AAC3E,YAAA,QAAA,gBAAAC,IAAA,CAACC,IAAAA,EAAAA;gBAAKC,GAAAA,EAAK,CAAA;;kCACTT,GAAA,CAACU,UAAAA,EAAAA;AACCC,wBAAAA,KAAAA,EAAOb,aAAAA,CAAc;AACnBc,4BAAAA,EAAAA,EAAIC,OAAAA,CAAQ,+BAAA,CAAA;4BACZC,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACAC,OAAAA,EAASpB,QAAAA;AAET,wBAAA,QAAA,gBAAAK,GAAA,CAACgB,KAAAA,EAAAA,EAAAA;;kCAGHhB,GAAA,CAACU,UAAAA,EAAAA;AACCC,wBAAAA,KAAAA,EAAOb,aAAAA,CAAc;AACnBc,4BAAAA,EAAAA,EAAIC,OAAAA,CAAQ,gCAAA,CAAA;4BACZC,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACAC,OAAAA,EAASlB,OAAAA;AAET,wBAAA,QAAA,gBAAAG,GAAA,CAACiB,sBAAAA,EAAAA,EAAAA;;kCAGHjB,GAAA,CAACU,UAAAA,EAAAA;AACCC,wBAAAA,KAAAA,EAAOb,aAAAA,CAAc;AACnBc,4BAAAA,EAAAA,EAAIC,OAAAA,CAAQ,+BAAA,CAAA;4BACZC,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACAC,OAAAA,EAASnB,UAAAA;AAET,wBAAA,QAAA,gBAAAI,GAAA,CAACkB,KAAAA,EAAAA,EAAAA;;;;;;AAMb;;;;"}
1
+ {"version":3,"file":"FocalPointActions.mjs","sources":["../../../../../admin/src/components/EditAssetDialog/PreviewBox/FocalPointActions.tsx"],"sourcesContent":["import { Flex, FocusTrap, IconButton } from '@strapi/design-system';\nimport { Check, Cross, ArrowsCounterClockwise } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { getTrad } from '../../../utils';\n\nimport { FocalPointActionRow } from './PreviewComponents';\n\ninterface FocalPointActionsProps {\n onCancel: () => void;\n onValidate: () => void;\n onReset: () => void;\n}\n\nexport const FocalPointActions = ({ onCancel, onValidate, onReset }: FocalPointActionsProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <FocusTrap onEscape={onCancel}>\n <FocalPointActionRow justifyContent=\"flex-end\" paddingLeft={3} paddingRight={3}>\n <Flex gap={1}>\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.stop-focal-point'),\n defaultMessage: 'Cancel focal point selection',\n })}\n onClick={onCancel}\n >\n <Cross />\n </IconButton>\n\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.reset-focal-point'),\n defaultMessage: 'Reset to center',\n })}\n onClick={onReset}\n >\n <ArrowsCounterClockwise />\n </IconButton>\n\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.save-focal-point'),\n defaultMessage: 'Save focal point',\n })}\n onClick={onValidate}\n >\n <Check />\n </IconButton>\n </Flex>\n </FocalPointActionRow>\n </FocusTrap>\n );\n};\n"],"names":["FocalPointActions","onCancel","onValidate","onReset","formatMessage","useIntl","_jsx","FocusTrap","onEscape","FocalPointActionRow","justifyContent","paddingLeft","paddingRight","_jsxs","Flex","gap","IconButton","label","id","getTrad","defaultMessage","onClick","Cross","ArrowsCounterClockwise","Check"],"mappings":";;;;;;;;;;;AAcO,MAAMA,oBAAoB,CAAC,EAAEC,QAAQ,EAAEC,UAAU,EAAEC,OAAO,EAA0B,GAAA;IACzF,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAE1B,IAAA,qBACEC,GAAA,CAACC,SAAAA,EAAAA;QAAUC,QAAAA,EAAUP,QAAAA;AACnB,QAAA,QAAA,gBAAAK,GAAA,CAACG,mBAAAA,EAAAA;YAAoBC,cAAAA,EAAe,UAAA;YAAWC,WAAAA,EAAa,CAAA;YAAGC,YAAAA,EAAc,CAAA;AAC3E,YAAA,QAAA,gBAAAC,IAAA,CAACC,IAAAA,EAAAA;gBAAKC,GAAAA,EAAK,CAAA;;kCACTT,GAAA,CAACU,UAAAA,EAAAA;AACCC,wBAAAA,KAAAA,EAAOb,aAAAA,CAAc;AACnBc,4BAAAA,EAAAA,EAAIC,OAAAA,CAAQ,+BAAA,CAAA;4BACZC,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACAC,OAAAA,EAASpB,QAAAA;AAET,wBAAA,QAAA,gBAAAK,GAAA,CAACgB,KAAAA,EAAAA,EAAAA;;kCAGHhB,GAAA,CAACU,UAAAA,EAAAA;AACCC,wBAAAA,KAAAA,EAAOb,aAAAA,CAAc;AACnBc,4BAAAA,EAAAA,EAAIC,OAAAA,CAAQ,gCAAA,CAAA;4BACZC,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACAC,OAAAA,EAASlB,OAAAA;AAET,wBAAA,QAAA,gBAAAG,GAAA,CAACiB,sBAAAA,EAAAA,EAAAA;;kCAGHjB,GAAA,CAACU,UAAAA,EAAAA;AACCC,wBAAAA,KAAAA,EAAOb,aAAAA,CAAc;AACnBc,4BAAAA,EAAAA,EAAIC,OAAAA,CAAQ,+BAAA,CAAA;4BACZC,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACAC,OAAAA,EAASnB,UAAAA;AAET,wBAAA,QAAA,gBAAAI,GAAA,CAACkB,KAAAA,EAAAA,EAAAA;;;;;;AAMb;;;;"}
@@ -19,7 +19,6 @@ require('byte-size');
19
19
  require('date-fns');
20
20
  var getTrad = require('../../../utils/getTrad.js');
21
21
  require('qs');
22
- require('../../../utils/typeFromMime.js');
23
22
  require('../../../utils/urlYupSchema.js');
24
23
  var CopyLinkButton = require('../../CopyLinkButton/CopyLinkButton.js');
25
24
  var UploadProgress = require('../../UploadProgress/UploadProgress.js');
@@ -264,7 +263,7 @@ const PreviewBox = ({ asset, canUpdate, canCopyLink, canDownload, onDelete, onCr
264
263
  canCopyLink && /*#__PURE__*/ jsxRuntime.jsx(CopyLinkButton.CopyLinkButton, {
265
264
  url: assetUrl
266
265
  }),
267
- canUpdate && asset.mime?.includes(enums.AssetType.Image) && /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
266
+ canUpdate && asset.mime?.includes(enums.ASSET_TYPES.Image) && /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
268
267
  label: formatMessage({
269
268
  id: getTrad.getTrad('control-card.crop'),
270
269
  defaultMessage: 'Crop'
@@ -272,7 +271,7 @@ const PreviewBox = ({ asset, canUpdate, canCopyLink, canDownload, onDelete, onCr
272
271
  onClick: handleCropStart,
273
272
  children: /*#__PURE__*/ jsxRuntime.jsx(icons.Crop, {})
274
273
  }),
275
- canUpdate && asset.mime?.includes(enums.AssetType.Image) && /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
274
+ canUpdate && asset.mime?.includes(enums.ASSET_TYPES.Image) && /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
276
275
  label: formatMessage({
277
276
  id: getTrad.getTrad('control-card.set-focal-point'),
278
277
  defaultMessage: 'Set focal point'
@@ -1 +1 @@
1
- {"version":3,"file":"PreviewBox.js","sources":["../../../../../admin/src/components/EditAssetDialog/PreviewBox/PreviewBox.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport { Flex, IconButton } from '@strapi/design-system';\nimport { Crop as Resize, Download as DownloadIcon, Trash, PinMap } from '@strapi/icons';\nimport cropperjscss from 'cropperjs/dist/cropper.css?raw';\nimport { useIntl } from 'react-intl';\nimport { createGlobalStyle } from 'styled-components';\n\nimport { AssetType } from '../../../enums';\nimport { useCropImg } from '../../../hooks/useCropImg';\nimport { useEditAsset } from '../../../hooks/useEditAsset';\nimport { useTracking } from '../../../hooks/useTracking';\nimport { useUpload } from '../../../hooks/useUpload';\nimport { appendSearchParamsToUrl, createAssetUrl, getTrad, downloadFile } from '../../../utils';\nimport { CopyLinkButton } from '../../CopyLinkButton/CopyLinkButton';\nimport { UploadProgress } from '../../UploadProgress/UploadProgress';\nimport { RemoveAssetDialog } from '../RemoveAssetDialog';\n\nimport { AssetPreview } from './AssetPreview';\nimport { CroppingActions } from './CroppingActions';\nimport { FocalPointActions } from './FocalPointActions';\nimport {\n ActionRow,\n BadgeOverride,\n RelativeBox,\n UploadProgressWrapper,\n Wrapper,\n FocalPointImageWrapper,\n FocalPointAim,\n FocalPointHalo,\n} from './PreviewComponents';\n\nimport type {\n File as FileDefinition,\n RawFile,\n FocalPoint,\n} from '../../../../../shared/contracts/files';\n\ninterface Asset extends Omit<FileDefinition, 'folder'> {\n isLocal?: boolean;\n rawFile?: RawFile;\n folder?: FileDefinition['folder'] & { id: number };\n}\n\ninterface PreviewBoxProps {\n asset: Asset;\n canUpdate: boolean;\n canCopyLink: boolean;\n canDownload: boolean;\n replacementFile?: File;\n onDelete: (asset?: Asset | null) => void;\n onCropFinish: () => void;\n onCropStart: () => void;\n onCropCancel: () => void;\n trackedLocation?: string;\n formFocalPoint?: FocalPoint | null;\n onFocalPointStart: () => void;\n onFocalPointFinish: (focalPoint: FocalPoint) => void;\n onFocalPointCancel: () => void;\n}\n\nexport const PreviewBox = ({\n asset,\n canUpdate,\n canCopyLink,\n canDownload,\n onDelete,\n onCropFinish,\n onCropStart,\n onCropCancel,\n replacementFile,\n trackedLocation,\n formFocalPoint,\n onFocalPointStart,\n onFocalPointFinish,\n onFocalPointCancel,\n}: PreviewBoxProps) => {\n const CropperjsStyle = createGlobalStyle`${cropperjscss}`;\n const { trackUsage } = useTracking();\n const previewRef = React.useRef(null);\n const [isCropImageReady, setIsCropImageReady] = React.useState(false);\n const [hasCropIntent, setHasCropIntent] = React.useState<boolean | null>(null);\n const [assetUrl, setAssetUrl] = React.useState(createAssetUrl(asset, false));\n const [thumbnailUrl, setThumbnailUrl] = React.useState(createAssetUrl(asset, true));\n\n // When loading a cross-origin image for cropping, append a cache-busting parameter\n // so the browser makes a fresh request with CORS headers instead of serving a\n // previously cached non-CORS response (which would taint the canvas and break\n // cropping). Signed URLs are excluded because modifying them invalidates the signature.\n const cropUrl = React.useMemo(() => {\n if (!asset.isLocal && !asset.isUrlSigned && assetUrl) {\n return appendSearchParamsToUrl({ url: assetUrl, params: { updatedAt: asset.updatedAt } });\n }\n\n return assetUrl;\n }, [assetUrl, asset.isLocal, asset.isUrlSigned, asset.updatedAt]);\n\n const { formatMessage } = useIntl();\n const [showConfirmDialog, setShowConfirmDialog] = React.useState(false);\n const { crop, produceFile, stopCropping, isCropping, isCropperReady, width, height } =\n useCropImg();\n const { editAsset, error, isLoading, progress, cancel } = useEditAsset();\n const [isInFocalPointMode, setIsInFocalPointMode] = React.useState<boolean>(false);\n const [focalPoint, setFocalPoint] = React.useState<FocalPoint>(\n formFocalPoint ?? { x: 50, y: 50 }\n );\n\n const {\n upload,\n isLoading: isLoadingUpload,\n cancel: cancelUpload,\n error: uploadError,\n progress: progressUpload,\n } = useUpload();\n\n React.useEffect(() => {\n // Whenever a replacementUrl is set, make sure to permutate the real asset.url by\n // the locally generated one\n if (replacementFile) {\n const fileLocalUrl = URL.createObjectURL(replacementFile);\n\n if (asset.isLocal) {\n asset.url = fileLocalUrl;\n }\n\n setAssetUrl(fileLocalUrl);\n setThumbnailUrl(fileLocalUrl);\n }\n }, [replacementFile, asset]);\n\n React.useEffect(() => {\n if (hasCropIntent === false) {\n stopCropping();\n onCropCancel();\n }\n }, [hasCropIntent, stopCropping, onCropCancel, onCropFinish]);\n\n React.useEffect(() => {\n if (hasCropIntent && isCropImageReady) {\n crop(previewRef.current!);\n onCropStart();\n }\n }, [isCropImageReady, hasCropIntent, onCropStart, crop]);\n\n const handleCropping = async () => {\n const nextAsset = { ...asset, width, height, folder: asset.folder?.id };\n const file = (await produceFile(nextAsset.name, nextAsset.mime!, nextAsset.updatedAt!)) as File;\n\n // Making sure that when persisting the new asset, the URL changes with width and height\n // So that the browser makes a request and handle the image caching correctly at the good size\n let optimizedCachingImage;\n let optimizedCachingThumbnailImage;\n\n if (asset.isLocal) {\n optimizedCachingImage = URL.createObjectURL(file);\n optimizedCachingThumbnailImage = optimizedCachingImage;\n asset.url = optimizedCachingImage;\n asset.rawFile = file;\n\n trackUsage('didCropFile', { duplicatedFile: null, location: trackedLocation! });\n } else {\n const updatedAsset = await editAsset(nextAsset, file);\n optimizedCachingImage = createAssetUrl(updatedAsset, false);\n optimizedCachingThumbnailImage = createAssetUrl(updatedAsset, true);\n\n trackUsage('didCropFile', { duplicatedFile: false, location: trackedLocation! });\n }\n\n setAssetUrl(optimizedCachingImage);\n setThumbnailUrl(optimizedCachingThumbnailImage);\n setHasCropIntent(false);\n };\n\n const isInCroppingMode = isCropping && !isLoading;\n\n const handleDuplication = async () => {\n const nextAsset = { ...asset, width, height };\n const file = (await produceFile(\n nextAsset.name,\n nextAsset.mime!,\n nextAsset.updatedAt!\n )) as RawFile;\n\n await upload({ name: file.name, rawFile: file }, asset.folder?.id ? asset.folder.id : null);\n\n trackUsage('didCropFile', { duplicatedFile: true, location: trackedLocation! });\n\n setHasCropIntent(false);\n onCropFinish();\n };\n\n const handleCropCancel = () => {\n setHasCropIntent(false);\n };\n\n const handleCropStart = () => {\n setHasCropIntent(true);\n };\n\n const calculateFocalPointFromEvent = (e: React.MouseEvent<HTMLElement>): FocalPoint => {\n const { clientX, clientY } = e;\n const rect = e.currentTarget.getBoundingClientRect();\n const posX = clientX - rect.left;\n const posY = clientY - rect.top;\n\n return {\n x: Number(((posX / rect.width) * 100).toFixed(2)),\n y: Number(((posY / rect.height) * 100).toFixed(2)),\n };\n };\n\n const handleFocalPointClick = (e: React.MouseEvent<HTMLElement>) => {\n if (!isInFocalPointMode) return;\n setFocalPoint(calculateFocalPointFromEvent(e));\n };\n\n const handleFocalPointCancel = () => {\n setIsInFocalPointMode(false);\n setFocalPoint(formFocalPoint ?? { x: 50, y: 50 });\n onFocalPointCancel();\n };\n\n const handleFocalPointStart = () => {\n onFocalPointStart();\n setIsInFocalPointMode(true);\n };\n\n const handleFocalPointValidate = () => {\n setIsInFocalPointMode(false);\n onFocalPointFinish(focalPoint);\n };\n\n const handleFocalPointReset = () => {\n setFocalPoint({ x: 50, y: 50 });\n };\n\n return (\n <>\n <CropperjsStyle />\n <RelativeBox hasRadius background=\"neutral150\" borderColor=\"neutral200\">\n {isCropperReady && isInCroppingMode && (\n <CroppingActions\n onValidate={handleCropping}\n onDuplicate={asset.isLocal ? undefined : handleDuplication}\n onCancel={handleCropCancel}\n />\n )}\n\n {isInFocalPointMode && (\n <FocalPointActions\n onValidate={handleFocalPointValidate}\n onCancel={handleFocalPointCancel}\n onReset={handleFocalPointReset}\n />\n )}\n\n <ActionRow paddingLeft={3} paddingRight={3} justifyContent=\"flex-end\">\n <Flex gap={1}>\n {canUpdate && !asset.isLocal && (\n <IconButton\n label={formatMessage({\n id: 'global.delete',\n defaultMessage: 'Delete',\n })}\n onClick={() => setShowConfirmDialog(true)}\n >\n <Trash />\n </IconButton>\n )}\n\n {canDownload && (\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.download'),\n defaultMessage: 'Download',\n })}\n onClick={() => downloadFile(assetUrl!, asset.name)}\n >\n <DownloadIcon />\n </IconButton>\n )}\n\n {canCopyLink && <CopyLinkButton url={assetUrl!} />}\n\n {canUpdate && asset.mime?.includes(AssetType.Image) && (\n <IconButton\n label={formatMessage({ id: getTrad('control-card.crop'), defaultMessage: 'Crop' })}\n onClick={handleCropStart}\n >\n <Resize />\n </IconButton>\n )}\n\n {canUpdate && asset.mime?.includes(AssetType.Image) && (\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.set-focal-point'),\n defaultMessage: 'Set focal point',\n })}\n onClick={handleFocalPointStart}\n >\n <PinMap />\n </IconButton>\n )}\n </Flex>\n </ActionRow>\n\n <Wrapper>\n {/* This one is for editting an asset */}\n {isLoading && (\n <UploadProgressWrapper>\n <UploadProgress error={error} onCancel={cancel} progress={progress} />\n </UploadProgressWrapper>\n )}\n\n {/* This one is for duplicating an asset after cropping */}\n {isLoadingUpload && (\n <UploadProgressWrapper>\n <UploadProgress\n error={uploadError}\n onCancel={cancelUpload}\n progress={progressUpload}\n />\n </UploadProgressWrapper>\n )}\n\n <FocalPointImageWrapper>\n <AssetPreview\n ref={previewRef}\n mime={asset.mime!}\n name={asset.name}\n url={hasCropIntent ? cropUrl! : thumbnailUrl!}\n onLoad={() => {\n if (asset.isLocal || hasCropIntent) {\n setIsCropImageReady(true);\n }\n }}\n onClick={handleFocalPointClick}\n style={{ cursor: isInFocalPointMode ? 'crosshair' : undefined }}\n />\n\n {/* Show the set focal point marker */}\n {isInFocalPointMode && (\n <FocalPointAim $focalPoint={focalPoint}>\n <FocalPointHalo />\n </FocalPointAim>\n )}\n </FocalPointImageWrapper>\n </Wrapper>\n\n <ActionRow\n paddingLeft={2}\n paddingRight={2}\n justifyContent=\"flex-end\"\n $blurry={isInCroppingMode || isInFocalPointMode}\n >\n {isInCroppingMode && width && height && (\n <BadgeOverride background=\"neutral900\" color=\"neutral0\">\n {width && height ? `${height}✕${width}` : 'N/A'}\n </BadgeOverride>\n )}\n {isInFocalPointMode && (\n <BadgeOverride background=\"neutral900\" color=\"neutral0\">\n {`x: ${focalPoint.x}% | y: ${focalPoint.y}%`}\n </BadgeOverride>\n )}\n </ActionRow>\n </RelativeBox>\n\n <RemoveAssetDialog\n open={showConfirmDialog}\n onClose={(value) => {\n setShowConfirmDialog(false);\n if (value === null) {\n onDelete(null);\n }\n }}\n asset={asset}\n />\n </>\n );\n};\n"],"names":["PreviewBox","asset","canUpdate","canCopyLink","canDownload","onDelete","onCropFinish","onCropStart","onCropCancel","replacementFile","trackedLocation","formFocalPoint","onFocalPointStart","onFocalPointFinish","onFocalPointCancel","CropperjsStyle","createGlobalStyle","cropperjscss","trackUsage","useTracking","previewRef","React","useRef","isCropImageReady","setIsCropImageReady","useState","hasCropIntent","setHasCropIntent","assetUrl","setAssetUrl","createAssetUrl","thumbnailUrl","setThumbnailUrl","cropUrl","useMemo","isLocal","isUrlSigned","appendSearchParamsToUrl","url","params","updatedAt","formatMessage","useIntl","showConfirmDialog","setShowConfirmDialog","crop","produceFile","stopCropping","isCropping","isCropperReady","width","height","useCropImg","editAsset","error","isLoading","progress","cancel","useEditAsset","isInFocalPointMode","setIsInFocalPointMode","focalPoint","setFocalPoint","x","y","upload","isLoadingUpload","cancelUpload","uploadError","progressUpload","useUpload","useEffect","fileLocalUrl","URL","createObjectURL","current","handleCropping","nextAsset","folder","id","file","name","mime","optimizedCachingImage","optimizedCachingThumbnailImage","rawFile","duplicatedFile","location","updatedAsset","isInCroppingMode","handleDuplication","handleCropCancel","handleCropStart","calculateFocalPointFromEvent","e","clientX","clientY","rect","currentTarget","getBoundingClientRect","posX","left","posY","top","Number","toFixed","handleFocalPointClick","handleFocalPointCancel","handleFocalPointStart","handleFocalPointValidate","handleFocalPointReset","_jsxs","_Fragment","_jsx","RelativeBox","hasRadius","background","borderColor","CroppingActions","onValidate","onDuplicate","undefined","onCancel","FocalPointActions","onReset","ActionRow","paddingLeft","paddingRight","justifyContent","Flex","gap","IconButton","label","defaultMessage","onClick","Trash","getTrad","downloadFile","DownloadIcon","CopyLinkButton","includes","AssetType","Image","Resize","PinMap","Wrapper","UploadProgressWrapper","UploadProgress","FocalPointImageWrapper","AssetPreview","ref","onLoad","style","cursor","FocalPointAim","$focalPoint","FocalPointHalo","$blurry","BadgeOverride","color","RemoveAssetDialog","open","onClose","value"],"mappings":"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"}
1
+ {"version":3,"file":"PreviewBox.js","sources":["../../../../../admin/src/components/EditAssetDialog/PreviewBox/PreviewBox.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport { Flex, IconButton } from '@strapi/design-system';\nimport { Crop as Resize, Download as DownloadIcon, Trash, PinMap } from '@strapi/icons';\nimport cropperjscss from 'cropperjs/dist/cropper.css?raw';\nimport { useIntl } from 'react-intl';\nimport { createGlobalStyle } from 'styled-components';\n\nimport { ASSET_TYPES } from '../../../enums';\nimport { useCropImg } from '../../../hooks/useCropImg';\nimport { useEditAsset } from '../../../hooks/useEditAsset';\nimport { useTracking } from '../../../hooks/useTracking';\nimport { useUpload } from '../../../hooks/useUpload';\nimport { appendSearchParamsToUrl, createAssetUrl, getTrad, downloadFile } from '../../../utils';\nimport { CopyLinkButton } from '../../CopyLinkButton/CopyLinkButton';\nimport { UploadProgress } from '../../UploadProgress/UploadProgress';\nimport { RemoveAssetDialog } from '../RemoveAssetDialog';\n\nimport { AssetPreview } from './AssetPreview';\nimport { CroppingActions } from './CroppingActions';\nimport { FocalPointActions } from './FocalPointActions';\nimport {\n ActionRow,\n BadgeOverride,\n RelativeBox,\n UploadProgressWrapper,\n Wrapper,\n FocalPointImageWrapper,\n FocalPointAim,\n FocalPointHalo,\n} from './PreviewComponents';\n\nimport type {\n File as FileDefinition,\n RawFile,\n FocalPoint,\n} from '../../../../../shared/contracts/files';\n\ninterface Asset extends Omit<FileDefinition, 'folder'> {\n isLocal?: boolean;\n rawFile?: RawFile;\n folder?: FileDefinition['folder'] & { id: number };\n}\n\ninterface PreviewBoxProps {\n asset: Asset;\n canUpdate: boolean;\n canCopyLink: boolean;\n canDownload: boolean;\n replacementFile?: File;\n onDelete: (asset?: Asset | null) => void;\n onCropFinish: () => void;\n onCropStart: () => void;\n onCropCancel: () => void;\n trackedLocation?: string;\n formFocalPoint?: FocalPoint | null;\n onFocalPointStart: () => void;\n onFocalPointFinish: (focalPoint: FocalPoint) => void;\n onFocalPointCancel: () => void;\n}\n\nexport const PreviewBox = ({\n asset,\n canUpdate,\n canCopyLink,\n canDownload,\n onDelete,\n onCropFinish,\n onCropStart,\n onCropCancel,\n replacementFile,\n trackedLocation,\n formFocalPoint,\n onFocalPointStart,\n onFocalPointFinish,\n onFocalPointCancel,\n}: PreviewBoxProps) => {\n const CropperjsStyle = createGlobalStyle`${cropperjscss}`;\n const { trackUsage } = useTracking();\n const previewRef = React.useRef(null);\n const [isCropImageReady, setIsCropImageReady] = React.useState(false);\n const [hasCropIntent, setHasCropIntent] = React.useState<boolean | null>(null);\n const [assetUrl, setAssetUrl] = React.useState(createAssetUrl(asset, false));\n const [thumbnailUrl, setThumbnailUrl] = React.useState(createAssetUrl(asset, true));\n\n // When loading a cross-origin image for cropping, append a cache-busting parameter\n // so the browser makes a fresh request with CORS headers instead of serving a\n // previously cached non-CORS response (which would taint the canvas and break\n // cropping). Signed URLs are excluded because modifying them invalidates the signature.\n const cropUrl = React.useMemo(() => {\n if (!asset.isLocal && !asset.isUrlSigned && assetUrl) {\n return appendSearchParamsToUrl({ url: assetUrl, params: { updatedAt: asset.updatedAt } });\n }\n\n return assetUrl;\n }, [assetUrl, asset.isLocal, asset.isUrlSigned, asset.updatedAt]);\n\n const { formatMessage } = useIntl();\n const [showConfirmDialog, setShowConfirmDialog] = React.useState(false);\n const { crop, produceFile, stopCropping, isCropping, isCropperReady, width, height } =\n useCropImg();\n const { editAsset, error, isLoading, progress, cancel } = useEditAsset();\n const [isInFocalPointMode, setIsInFocalPointMode] = React.useState<boolean>(false);\n const [focalPoint, setFocalPoint] = React.useState<FocalPoint>(\n formFocalPoint ?? { x: 50, y: 50 }\n );\n\n const {\n upload,\n isLoading: isLoadingUpload,\n cancel: cancelUpload,\n error: uploadError,\n progress: progressUpload,\n } = useUpload();\n\n React.useEffect(() => {\n // Whenever a replacementUrl is set, make sure to permutate the real asset.url by\n // the locally generated one\n if (replacementFile) {\n const fileLocalUrl = URL.createObjectURL(replacementFile);\n\n if (asset.isLocal) {\n asset.url = fileLocalUrl;\n }\n\n setAssetUrl(fileLocalUrl);\n setThumbnailUrl(fileLocalUrl);\n }\n }, [replacementFile, asset]);\n\n React.useEffect(() => {\n if (hasCropIntent === false) {\n stopCropping();\n onCropCancel();\n }\n }, [hasCropIntent, stopCropping, onCropCancel, onCropFinish]);\n\n React.useEffect(() => {\n if (hasCropIntent && isCropImageReady) {\n crop(previewRef.current!);\n onCropStart();\n }\n }, [isCropImageReady, hasCropIntent, onCropStart, crop]);\n\n const handleCropping = async () => {\n const nextAsset = { ...asset, width, height, folder: asset.folder?.id };\n const file = (await produceFile(nextAsset.name, nextAsset.mime!, nextAsset.updatedAt!)) as File;\n\n // Making sure that when persisting the new asset, the URL changes with width and height\n // So that the browser makes a request and handle the image caching correctly at the good size\n let optimizedCachingImage;\n let optimizedCachingThumbnailImage;\n\n if (asset.isLocal) {\n optimizedCachingImage = URL.createObjectURL(file);\n optimizedCachingThumbnailImage = optimizedCachingImage;\n asset.url = optimizedCachingImage;\n asset.rawFile = file;\n\n trackUsage('didCropFile', { duplicatedFile: null, location: trackedLocation! });\n } else {\n const updatedAsset = await editAsset(nextAsset, file);\n optimizedCachingImage = createAssetUrl(updatedAsset, false);\n optimizedCachingThumbnailImage = createAssetUrl(updatedAsset, true);\n\n trackUsage('didCropFile', { duplicatedFile: false, location: trackedLocation! });\n }\n\n setAssetUrl(optimizedCachingImage);\n setThumbnailUrl(optimizedCachingThumbnailImage);\n setHasCropIntent(false);\n };\n\n const isInCroppingMode = isCropping && !isLoading;\n\n const handleDuplication = async () => {\n const nextAsset = { ...asset, width, height };\n const file = (await produceFile(\n nextAsset.name,\n nextAsset.mime!,\n nextAsset.updatedAt!\n )) as RawFile;\n\n await upload({ name: file.name, rawFile: file }, asset.folder?.id ? asset.folder.id : null);\n\n trackUsage('didCropFile', { duplicatedFile: true, location: trackedLocation! });\n\n setHasCropIntent(false);\n onCropFinish();\n };\n\n const handleCropCancel = () => {\n setHasCropIntent(false);\n };\n\n const handleCropStart = () => {\n setHasCropIntent(true);\n };\n\n const calculateFocalPointFromEvent = (e: React.MouseEvent<HTMLElement>): FocalPoint => {\n const { clientX, clientY } = e;\n const rect = e.currentTarget.getBoundingClientRect();\n const posX = clientX - rect.left;\n const posY = clientY - rect.top;\n\n return {\n x: Number(((posX / rect.width) * 100).toFixed(2)),\n y: Number(((posY / rect.height) * 100).toFixed(2)),\n };\n };\n\n const handleFocalPointClick = (e: React.MouseEvent<HTMLElement>) => {\n if (!isInFocalPointMode) return;\n setFocalPoint(calculateFocalPointFromEvent(e));\n };\n\n const handleFocalPointCancel = () => {\n setIsInFocalPointMode(false);\n setFocalPoint(formFocalPoint ?? { x: 50, y: 50 });\n onFocalPointCancel();\n };\n\n const handleFocalPointStart = () => {\n onFocalPointStart();\n setIsInFocalPointMode(true);\n };\n\n const handleFocalPointValidate = () => {\n setIsInFocalPointMode(false);\n onFocalPointFinish(focalPoint);\n };\n\n const handleFocalPointReset = () => {\n setFocalPoint({ x: 50, y: 50 });\n };\n\n return (\n <>\n <CropperjsStyle />\n <RelativeBox hasRadius background=\"neutral150\" borderColor=\"neutral200\">\n {isCropperReady && isInCroppingMode && (\n <CroppingActions\n onValidate={handleCropping}\n onDuplicate={asset.isLocal ? undefined : handleDuplication}\n onCancel={handleCropCancel}\n />\n )}\n\n {isInFocalPointMode && (\n <FocalPointActions\n onValidate={handleFocalPointValidate}\n onCancel={handleFocalPointCancel}\n onReset={handleFocalPointReset}\n />\n )}\n\n <ActionRow paddingLeft={3} paddingRight={3} justifyContent=\"flex-end\">\n <Flex gap={1}>\n {canUpdate && !asset.isLocal && (\n <IconButton\n label={formatMessage({\n id: 'global.delete',\n defaultMessage: 'Delete',\n })}\n onClick={() => setShowConfirmDialog(true)}\n >\n <Trash />\n </IconButton>\n )}\n\n {canDownload && (\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.download'),\n defaultMessage: 'Download',\n })}\n onClick={() => downloadFile(assetUrl!, asset.name)}\n >\n <DownloadIcon />\n </IconButton>\n )}\n\n {canCopyLink && <CopyLinkButton url={assetUrl!} />}\n\n {canUpdate && asset.mime?.includes(ASSET_TYPES.Image) && (\n <IconButton\n label={formatMessage({ id: getTrad('control-card.crop'), defaultMessage: 'Crop' })}\n onClick={handleCropStart}\n >\n <Resize />\n </IconButton>\n )}\n\n {canUpdate && asset.mime?.includes(ASSET_TYPES.Image) && (\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.set-focal-point'),\n defaultMessage: 'Set focal point',\n })}\n onClick={handleFocalPointStart}\n >\n <PinMap />\n </IconButton>\n )}\n </Flex>\n </ActionRow>\n\n <Wrapper>\n {/* This one is for editting an asset */}\n {isLoading && (\n <UploadProgressWrapper>\n <UploadProgress error={error} onCancel={cancel} progress={progress} />\n </UploadProgressWrapper>\n )}\n\n {/* This one is for duplicating an asset after cropping */}\n {isLoadingUpload && (\n <UploadProgressWrapper>\n <UploadProgress\n error={uploadError}\n onCancel={cancelUpload}\n progress={progressUpload}\n />\n </UploadProgressWrapper>\n )}\n\n <FocalPointImageWrapper>\n <AssetPreview\n ref={previewRef}\n mime={asset.mime!}\n name={asset.name}\n url={hasCropIntent ? cropUrl! : thumbnailUrl!}\n onLoad={() => {\n if (asset.isLocal || hasCropIntent) {\n setIsCropImageReady(true);\n }\n }}\n onClick={handleFocalPointClick}\n style={{ cursor: isInFocalPointMode ? 'crosshair' : undefined }}\n />\n\n {/* Show the set focal point marker */}\n {isInFocalPointMode && (\n <FocalPointAim $focalPoint={focalPoint}>\n <FocalPointHalo />\n </FocalPointAim>\n )}\n </FocalPointImageWrapper>\n </Wrapper>\n\n <ActionRow\n paddingLeft={2}\n paddingRight={2}\n justifyContent=\"flex-end\"\n $blurry={isInCroppingMode || isInFocalPointMode}\n >\n {isInCroppingMode && width && height && (\n <BadgeOverride background=\"neutral900\" color=\"neutral0\">\n {width && height ? `${height}✕${width}` : 'N/A'}\n </BadgeOverride>\n )}\n {isInFocalPointMode && (\n <BadgeOverride background=\"neutral900\" color=\"neutral0\">\n {`x: ${focalPoint.x}% | y: ${focalPoint.y}%`}\n </BadgeOverride>\n )}\n </ActionRow>\n </RelativeBox>\n\n <RemoveAssetDialog\n open={showConfirmDialog}\n onClose={(value) => {\n setShowConfirmDialog(false);\n if (value === null) {\n onDelete(null);\n }\n }}\n asset={asset}\n />\n </>\n );\n};\n"],"names":["PreviewBox","asset","canUpdate","canCopyLink","canDownload","onDelete","onCropFinish","onCropStart","onCropCancel","replacementFile","trackedLocation","formFocalPoint","onFocalPointStart","onFocalPointFinish","onFocalPointCancel","CropperjsStyle","createGlobalStyle","cropperjscss","trackUsage","useTracking","previewRef","React","useRef","isCropImageReady","setIsCropImageReady","useState","hasCropIntent","setHasCropIntent","assetUrl","setAssetUrl","createAssetUrl","thumbnailUrl","setThumbnailUrl","cropUrl","useMemo","isLocal","isUrlSigned","appendSearchParamsToUrl","url","params","updatedAt","formatMessage","useIntl","showConfirmDialog","setShowConfirmDialog","crop","produceFile","stopCropping","isCropping","isCropperReady","width","height","useCropImg","editAsset","error","isLoading","progress","cancel","useEditAsset","isInFocalPointMode","setIsInFocalPointMode","focalPoint","setFocalPoint","x","y","upload","isLoadingUpload","cancelUpload","uploadError","progressUpload","useUpload","useEffect","fileLocalUrl","URL","createObjectURL","current","handleCropping","nextAsset","folder","id","file","name","mime","optimizedCachingImage","optimizedCachingThumbnailImage","rawFile","duplicatedFile","location","updatedAsset","isInCroppingMode","handleDuplication","handleCropCancel","handleCropStart","calculateFocalPointFromEvent","e","clientX","clientY","rect","currentTarget","getBoundingClientRect","posX","left","posY","top","Number","toFixed","handleFocalPointClick","handleFocalPointCancel","handleFocalPointStart","handleFocalPointValidate","handleFocalPointReset","_jsxs","_Fragment","_jsx","RelativeBox","hasRadius","background","borderColor","CroppingActions","onValidate","onDuplicate","undefined","onCancel","FocalPointActions","onReset","ActionRow","paddingLeft","paddingRight","justifyContent","Flex","gap","IconButton","label","defaultMessage","onClick","Trash","getTrad","downloadFile","DownloadIcon","CopyLinkButton","includes","ASSET_TYPES","Image","Resize","PinMap","Wrapper","UploadProgressWrapper","UploadProgress","FocalPointImageWrapper","AssetPreview","ref","onLoad","style","cursor","FocalPointAim","$focalPoint","FocalPointHalo","$blurry","BadgeOverride","color","RemoveAssetDialog","open","onClose","value"],"mappings":"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"}
@@ -5,7 +5,7 @@ import { Trash, Download, Crop, PinMap } from '@strapi/icons';
5
5
  import cropperjscss from 'cropperjs/dist/cropper.css?raw';
6
6
  import { useIntl } from 'react-intl';
7
7
  import { createGlobalStyle } from 'styled-components';
8
- import { AssetType } from '../../../enums.mjs';
8
+ import { ASSET_TYPES } from '../../../enums.mjs';
9
9
  import { useCropImg } from '../../../hooks/useCropImg.mjs';
10
10
  import { useEditAsset } from '../../../hooks/useEditAsset.mjs';
11
11
  import { useTracking } from '../../../hooks/useTracking.mjs';
@@ -17,7 +17,6 @@ import 'byte-size';
17
17
  import 'date-fns';
18
18
  import { getTrad } from '../../../utils/getTrad.mjs';
19
19
  import 'qs';
20
- import '../../../utils/typeFromMime.mjs';
21
20
  import '../../../utils/urlYupSchema.mjs';
22
21
  import { CopyLinkButton } from '../../CopyLinkButton/CopyLinkButton.mjs';
23
22
  import { UploadProgress } from '../../UploadProgress/UploadProgress.mjs';
@@ -239,7 +238,7 @@ const PreviewBox = ({ asset, canUpdate, canCopyLink, canDownload, onDelete, onCr
239
238
  canCopyLink && /*#__PURE__*/ jsx(CopyLinkButton, {
240
239
  url: assetUrl
241
240
  }),
242
- canUpdate && asset.mime?.includes(AssetType.Image) && /*#__PURE__*/ jsx(IconButton, {
241
+ canUpdate && asset.mime?.includes(ASSET_TYPES.Image) && /*#__PURE__*/ jsx(IconButton, {
243
242
  label: formatMessage({
244
243
  id: getTrad('control-card.crop'),
245
244
  defaultMessage: 'Crop'
@@ -247,7 +246,7 @@ const PreviewBox = ({ asset, canUpdate, canCopyLink, canDownload, onDelete, onCr
247
246
  onClick: handleCropStart,
248
247
  children: /*#__PURE__*/ jsx(Crop, {})
249
248
  }),
250
- canUpdate && asset.mime?.includes(AssetType.Image) && /*#__PURE__*/ jsx(IconButton, {
249
+ canUpdate && asset.mime?.includes(ASSET_TYPES.Image) && /*#__PURE__*/ jsx(IconButton, {
251
250
  label: formatMessage({
252
251
  id: getTrad('control-card.set-focal-point'),
253
252
  defaultMessage: 'Set focal point'
@@ -1 +1 @@
1
- {"version":3,"file":"PreviewBox.mjs","sources":["../../../../../admin/src/components/EditAssetDialog/PreviewBox/PreviewBox.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport { Flex, IconButton } from '@strapi/design-system';\nimport { Crop as Resize, Download as DownloadIcon, Trash, PinMap } from '@strapi/icons';\nimport cropperjscss from 'cropperjs/dist/cropper.css?raw';\nimport { useIntl } from 'react-intl';\nimport { createGlobalStyle } from 'styled-components';\n\nimport { AssetType } from '../../../enums';\nimport { useCropImg } from '../../../hooks/useCropImg';\nimport { useEditAsset } from '../../../hooks/useEditAsset';\nimport { useTracking } from '../../../hooks/useTracking';\nimport { useUpload } from '../../../hooks/useUpload';\nimport { appendSearchParamsToUrl, createAssetUrl, getTrad, downloadFile } from '../../../utils';\nimport { CopyLinkButton } from '../../CopyLinkButton/CopyLinkButton';\nimport { UploadProgress } from '../../UploadProgress/UploadProgress';\nimport { RemoveAssetDialog } from '../RemoveAssetDialog';\n\nimport { AssetPreview } from './AssetPreview';\nimport { CroppingActions } from './CroppingActions';\nimport { FocalPointActions } from './FocalPointActions';\nimport {\n ActionRow,\n BadgeOverride,\n RelativeBox,\n UploadProgressWrapper,\n Wrapper,\n FocalPointImageWrapper,\n FocalPointAim,\n FocalPointHalo,\n} from './PreviewComponents';\n\nimport type {\n File as FileDefinition,\n RawFile,\n FocalPoint,\n} from '../../../../../shared/contracts/files';\n\ninterface Asset extends Omit<FileDefinition, 'folder'> {\n isLocal?: boolean;\n rawFile?: RawFile;\n folder?: FileDefinition['folder'] & { id: number };\n}\n\ninterface PreviewBoxProps {\n asset: Asset;\n canUpdate: boolean;\n canCopyLink: boolean;\n canDownload: boolean;\n replacementFile?: File;\n onDelete: (asset?: Asset | null) => void;\n onCropFinish: () => void;\n onCropStart: () => void;\n onCropCancel: () => void;\n trackedLocation?: string;\n formFocalPoint?: FocalPoint | null;\n onFocalPointStart: () => void;\n onFocalPointFinish: (focalPoint: FocalPoint) => void;\n onFocalPointCancel: () => void;\n}\n\nexport const PreviewBox = ({\n asset,\n canUpdate,\n canCopyLink,\n canDownload,\n onDelete,\n onCropFinish,\n onCropStart,\n onCropCancel,\n replacementFile,\n trackedLocation,\n formFocalPoint,\n onFocalPointStart,\n onFocalPointFinish,\n onFocalPointCancel,\n}: PreviewBoxProps) => {\n const CropperjsStyle = createGlobalStyle`${cropperjscss}`;\n const { trackUsage } = useTracking();\n const previewRef = React.useRef(null);\n const [isCropImageReady, setIsCropImageReady] = React.useState(false);\n const [hasCropIntent, setHasCropIntent] = React.useState<boolean | null>(null);\n const [assetUrl, setAssetUrl] = React.useState(createAssetUrl(asset, false));\n const [thumbnailUrl, setThumbnailUrl] = React.useState(createAssetUrl(asset, true));\n\n // When loading a cross-origin image for cropping, append a cache-busting parameter\n // so the browser makes a fresh request with CORS headers instead of serving a\n // previously cached non-CORS response (which would taint the canvas and break\n // cropping). Signed URLs are excluded because modifying them invalidates the signature.\n const cropUrl = React.useMemo(() => {\n if (!asset.isLocal && !asset.isUrlSigned && assetUrl) {\n return appendSearchParamsToUrl({ url: assetUrl, params: { updatedAt: asset.updatedAt } });\n }\n\n return assetUrl;\n }, [assetUrl, asset.isLocal, asset.isUrlSigned, asset.updatedAt]);\n\n const { formatMessage } = useIntl();\n const [showConfirmDialog, setShowConfirmDialog] = React.useState(false);\n const { crop, produceFile, stopCropping, isCropping, isCropperReady, width, height } =\n useCropImg();\n const { editAsset, error, isLoading, progress, cancel } = useEditAsset();\n const [isInFocalPointMode, setIsInFocalPointMode] = React.useState<boolean>(false);\n const [focalPoint, setFocalPoint] = React.useState<FocalPoint>(\n formFocalPoint ?? { x: 50, y: 50 }\n );\n\n const {\n upload,\n isLoading: isLoadingUpload,\n cancel: cancelUpload,\n error: uploadError,\n progress: progressUpload,\n } = useUpload();\n\n React.useEffect(() => {\n // Whenever a replacementUrl is set, make sure to permutate the real asset.url by\n // the locally generated one\n if (replacementFile) {\n const fileLocalUrl = URL.createObjectURL(replacementFile);\n\n if (asset.isLocal) {\n asset.url = fileLocalUrl;\n }\n\n setAssetUrl(fileLocalUrl);\n setThumbnailUrl(fileLocalUrl);\n }\n }, [replacementFile, asset]);\n\n React.useEffect(() => {\n if (hasCropIntent === false) {\n stopCropping();\n onCropCancel();\n }\n }, [hasCropIntent, stopCropping, onCropCancel, onCropFinish]);\n\n React.useEffect(() => {\n if (hasCropIntent && isCropImageReady) {\n crop(previewRef.current!);\n onCropStart();\n }\n }, [isCropImageReady, hasCropIntent, onCropStart, crop]);\n\n const handleCropping = async () => {\n const nextAsset = { ...asset, width, height, folder: asset.folder?.id };\n const file = (await produceFile(nextAsset.name, nextAsset.mime!, nextAsset.updatedAt!)) as File;\n\n // Making sure that when persisting the new asset, the URL changes with width and height\n // So that the browser makes a request and handle the image caching correctly at the good size\n let optimizedCachingImage;\n let optimizedCachingThumbnailImage;\n\n if (asset.isLocal) {\n optimizedCachingImage = URL.createObjectURL(file);\n optimizedCachingThumbnailImage = optimizedCachingImage;\n asset.url = optimizedCachingImage;\n asset.rawFile = file;\n\n trackUsage('didCropFile', { duplicatedFile: null, location: trackedLocation! });\n } else {\n const updatedAsset = await editAsset(nextAsset, file);\n optimizedCachingImage = createAssetUrl(updatedAsset, false);\n optimizedCachingThumbnailImage = createAssetUrl(updatedAsset, true);\n\n trackUsage('didCropFile', { duplicatedFile: false, location: trackedLocation! });\n }\n\n setAssetUrl(optimizedCachingImage);\n setThumbnailUrl(optimizedCachingThumbnailImage);\n setHasCropIntent(false);\n };\n\n const isInCroppingMode = isCropping && !isLoading;\n\n const handleDuplication = async () => {\n const nextAsset = { ...asset, width, height };\n const file = (await produceFile(\n nextAsset.name,\n nextAsset.mime!,\n nextAsset.updatedAt!\n )) as RawFile;\n\n await upload({ name: file.name, rawFile: file }, asset.folder?.id ? asset.folder.id : null);\n\n trackUsage('didCropFile', { duplicatedFile: true, location: trackedLocation! });\n\n setHasCropIntent(false);\n onCropFinish();\n };\n\n const handleCropCancel = () => {\n setHasCropIntent(false);\n };\n\n const handleCropStart = () => {\n setHasCropIntent(true);\n };\n\n const calculateFocalPointFromEvent = (e: React.MouseEvent<HTMLElement>): FocalPoint => {\n const { clientX, clientY } = e;\n const rect = e.currentTarget.getBoundingClientRect();\n const posX = clientX - rect.left;\n const posY = clientY - rect.top;\n\n return {\n x: Number(((posX / rect.width) * 100).toFixed(2)),\n y: Number(((posY / rect.height) * 100).toFixed(2)),\n };\n };\n\n const handleFocalPointClick = (e: React.MouseEvent<HTMLElement>) => {\n if (!isInFocalPointMode) return;\n setFocalPoint(calculateFocalPointFromEvent(e));\n };\n\n const handleFocalPointCancel = () => {\n setIsInFocalPointMode(false);\n setFocalPoint(formFocalPoint ?? { x: 50, y: 50 });\n onFocalPointCancel();\n };\n\n const handleFocalPointStart = () => {\n onFocalPointStart();\n setIsInFocalPointMode(true);\n };\n\n const handleFocalPointValidate = () => {\n setIsInFocalPointMode(false);\n onFocalPointFinish(focalPoint);\n };\n\n const handleFocalPointReset = () => {\n setFocalPoint({ x: 50, y: 50 });\n };\n\n return (\n <>\n <CropperjsStyle />\n <RelativeBox hasRadius background=\"neutral150\" borderColor=\"neutral200\">\n {isCropperReady && isInCroppingMode && (\n <CroppingActions\n onValidate={handleCropping}\n onDuplicate={asset.isLocal ? undefined : handleDuplication}\n onCancel={handleCropCancel}\n />\n )}\n\n {isInFocalPointMode && (\n <FocalPointActions\n onValidate={handleFocalPointValidate}\n onCancel={handleFocalPointCancel}\n onReset={handleFocalPointReset}\n />\n )}\n\n <ActionRow paddingLeft={3} paddingRight={3} justifyContent=\"flex-end\">\n <Flex gap={1}>\n {canUpdate && !asset.isLocal && (\n <IconButton\n label={formatMessage({\n id: 'global.delete',\n defaultMessage: 'Delete',\n })}\n onClick={() => setShowConfirmDialog(true)}\n >\n <Trash />\n </IconButton>\n )}\n\n {canDownload && (\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.download'),\n defaultMessage: 'Download',\n })}\n onClick={() => downloadFile(assetUrl!, asset.name)}\n >\n <DownloadIcon />\n </IconButton>\n )}\n\n {canCopyLink && <CopyLinkButton url={assetUrl!} />}\n\n {canUpdate && asset.mime?.includes(AssetType.Image) && (\n <IconButton\n label={formatMessage({ id: getTrad('control-card.crop'), defaultMessage: 'Crop' })}\n onClick={handleCropStart}\n >\n <Resize />\n </IconButton>\n )}\n\n {canUpdate && asset.mime?.includes(AssetType.Image) && (\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.set-focal-point'),\n defaultMessage: 'Set focal point',\n })}\n onClick={handleFocalPointStart}\n >\n <PinMap />\n </IconButton>\n )}\n </Flex>\n </ActionRow>\n\n <Wrapper>\n {/* This one is for editting an asset */}\n {isLoading && (\n <UploadProgressWrapper>\n <UploadProgress error={error} onCancel={cancel} progress={progress} />\n </UploadProgressWrapper>\n )}\n\n {/* This one is for duplicating an asset after cropping */}\n {isLoadingUpload && (\n <UploadProgressWrapper>\n <UploadProgress\n error={uploadError}\n onCancel={cancelUpload}\n progress={progressUpload}\n />\n </UploadProgressWrapper>\n )}\n\n <FocalPointImageWrapper>\n <AssetPreview\n ref={previewRef}\n mime={asset.mime!}\n name={asset.name}\n url={hasCropIntent ? cropUrl! : thumbnailUrl!}\n onLoad={() => {\n if (asset.isLocal || hasCropIntent) {\n setIsCropImageReady(true);\n }\n }}\n onClick={handleFocalPointClick}\n style={{ cursor: isInFocalPointMode ? 'crosshair' : undefined }}\n />\n\n {/* Show the set focal point marker */}\n {isInFocalPointMode && (\n <FocalPointAim $focalPoint={focalPoint}>\n <FocalPointHalo />\n </FocalPointAim>\n )}\n </FocalPointImageWrapper>\n </Wrapper>\n\n <ActionRow\n paddingLeft={2}\n paddingRight={2}\n justifyContent=\"flex-end\"\n $blurry={isInCroppingMode || isInFocalPointMode}\n >\n {isInCroppingMode && width && height && (\n <BadgeOverride background=\"neutral900\" color=\"neutral0\">\n {width && height ? `${height}✕${width}` : 'N/A'}\n </BadgeOverride>\n )}\n {isInFocalPointMode && (\n <BadgeOverride background=\"neutral900\" color=\"neutral0\">\n {`x: ${focalPoint.x}% | y: ${focalPoint.y}%`}\n </BadgeOverride>\n )}\n </ActionRow>\n </RelativeBox>\n\n <RemoveAssetDialog\n open={showConfirmDialog}\n onClose={(value) => {\n setShowConfirmDialog(false);\n if (value === null) {\n onDelete(null);\n }\n }}\n asset={asset}\n />\n </>\n );\n};\n"],"names":["PreviewBox","asset","canUpdate","canCopyLink","canDownload","onDelete","onCropFinish","onCropStart","onCropCancel","replacementFile","trackedLocation","formFocalPoint","onFocalPointStart","onFocalPointFinish","onFocalPointCancel","CropperjsStyle","createGlobalStyle","cropperjscss","trackUsage","useTracking","previewRef","React","useRef","isCropImageReady","setIsCropImageReady","useState","hasCropIntent","setHasCropIntent","assetUrl","setAssetUrl","createAssetUrl","thumbnailUrl","setThumbnailUrl","cropUrl","useMemo","isLocal","isUrlSigned","appendSearchParamsToUrl","url","params","updatedAt","formatMessage","useIntl","showConfirmDialog","setShowConfirmDialog","crop","produceFile","stopCropping","isCropping","isCropperReady","width","height","useCropImg","editAsset","error","isLoading","progress","cancel","useEditAsset","isInFocalPointMode","setIsInFocalPointMode","focalPoint","setFocalPoint","x","y","upload","isLoadingUpload","cancelUpload","uploadError","progressUpload","useUpload","useEffect","fileLocalUrl","URL","createObjectURL","current","handleCropping","nextAsset","folder","id","file","name","mime","optimizedCachingImage","optimizedCachingThumbnailImage","rawFile","duplicatedFile","location","updatedAsset","isInCroppingMode","handleDuplication","handleCropCancel","handleCropStart","calculateFocalPointFromEvent","e","clientX","clientY","rect","currentTarget","getBoundingClientRect","posX","left","posY","top","Number","toFixed","handleFocalPointClick","handleFocalPointCancel","handleFocalPointStart","handleFocalPointValidate","handleFocalPointReset","_jsxs","_Fragment","_jsx","RelativeBox","hasRadius","background","borderColor","CroppingActions","onValidate","onDuplicate","undefined","onCancel","FocalPointActions","onReset","ActionRow","paddingLeft","paddingRight","justifyContent","Flex","gap","IconButton","label","defaultMessage","onClick","Trash","getTrad","downloadFile","DownloadIcon","CopyLinkButton","includes","AssetType","Image","Resize","PinMap","Wrapper","UploadProgressWrapper","UploadProgress","FocalPointImageWrapper","AssetPreview","ref","onLoad","style","cursor","FocalPointAim","$focalPoint","FocalPointHalo","$blurry","BadgeOverride","color","RemoveAssetDialog","open","onClose","value"],"mappings":"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"}
1
+ {"version":3,"file":"PreviewBox.mjs","sources":["../../../../../admin/src/components/EditAssetDialog/PreviewBox/PreviewBox.tsx"],"sourcesContent":["// TODO: find a better naming convention for the file that was an index file before\nimport * as React from 'react';\n\nimport { Flex, IconButton } from '@strapi/design-system';\nimport { Crop as Resize, Download as DownloadIcon, Trash, PinMap } from '@strapi/icons';\nimport cropperjscss from 'cropperjs/dist/cropper.css?raw';\nimport { useIntl } from 'react-intl';\nimport { createGlobalStyle } from 'styled-components';\n\nimport { ASSET_TYPES } from '../../../enums';\nimport { useCropImg } from '../../../hooks/useCropImg';\nimport { useEditAsset } from '../../../hooks/useEditAsset';\nimport { useTracking } from '../../../hooks/useTracking';\nimport { useUpload } from '../../../hooks/useUpload';\nimport { appendSearchParamsToUrl, createAssetUrl, getTrad, downloadFile } from '../../../utils';\nimport { CopyLinkButton } from '../../CopyLinkButton/CopyLinkButton';\nimport { UploadProgress } from '../../UploadProgress/UploadProgress';\nimport { RemoveAssetDialog } from '../RemoveAssetDialog';\n\nimport { AssetPreview } from './AssetPreview';\nimport { CroppingActions } from './CroppingActions';\nimport { FocalPointActions } from './FocalPointActions';\nimport {\n ActionRow,\n BadgeOverride,\n RelativeBox,\n UploadProgressWrapper,\n Wrapper,\n FocalPointImageWrapper,\n FocalPointAim,\n FocalPointHalo,\n} from './PreviewComponents';\n\nimport type {\n File as FileDefinition,\n RawFile,\n FocalPoint,\n} from '../../../../../shared/contracts/files';\n\ninterface Asset extends Omit<FileDefinition, 'folder'> {\n isLocal?: boolean;\n rawFile?: RawFile;\n folder?: FileDefinition['folder'] & { id: number };\n}\n\ninterface PreviewBoxProps {\n asset: Asset;\n canUpdate: boolean;\n canCopyLink: boolean;\n canDownload: boolean;\n replacementFile?: File;\n onDelete: (asset?: Asset | null) => void;\n onCropFinish: () => void;\n onCropStart: () => void;\n onCropCancel: () => void;\n trackedLocation?: string;\n formFocalPoint?: FocalPoint | null;\n onFocalPointStart: () => void;\n onFocalPointFinish: (focalPoint: FocalPoint) => void;\n onFocalPointCancel: () => void;\n}\n\nexport const PreviewBox = ({\n asset,\n canUpdate,\n canCopyLink,\n canDownload,\n onDelete,\n onCropFinish,\n onCropStart,\n onCropCancel,\n replacementFile,\n trackedLocation,\n formFocalPoint,\n onFocalPointStart,\n onFocalPointFinish,\n onFocalPointCancel,\n}: PreviewBoxProps) => {\n const CropperjsStyle = createGlobalStyle`${cropperjscss}`;\n const { trackUsage } = useTracking();\n const previewRef = React.useRef(null);\n const [isCropImageReady, setIsCropImageReady] = React.useState(false);\n const [hasCropIntent, setHasCropIntent] = React.useState<boolean | null>(null);\n const [assetUrl, setAssetUrl] = React.useState(createAssetUrl(asset, false));\n const [thumbnailUrl, setThumbnailUrl] = React.useState(createAssetUrl(asset, true));\n\n // When loading a cross-origin image for cropping, append a cache-busting parameter\n // so the browser makes a fresh request with CORS headers instead of serving a\n // previously cached non-CORS response (which would taint the canvas and break\n // cropping). Signed URLs are excluded because modifying them invalidates the signature.\n const cropUrl = React.useMemo(() => {\n if (!asset.isLocal && !asset.isUrlSigned && assetUrl) {\n return appendSearchParamsToUrl({ url: assetUrl, params: { updatedAt: asset.updatedAt } });\n }\n\n return assetUrl;\n }, [assetUrl, asset.isLocal, asset.isUrlSigned, asset.updatedAt]);\n\n const { formatMessage } = useIntl();\n const [showConfirmDialog, setShowConfirmDialog] = React.useState(false);\n const { crop, produceFile, stopCropping, isCropping, isCropperReady, width, height } =\n useCropImg();\n const { editAsset, error, isLoading, progress, cancel } = useEditAsset();\n const [isInFocalPointMode, setIsInFocalPointMode] = React.useState<boolean>(false);\n const [focalPoint, setFocalPoint] = React.useState<FocalPoint>(\n formFocalPoint ?? { x: 50, y: 50 }\n );\n\n const {\n upload,\n isLoading: isLoadingUpload,\n cancel: cancelUpload,\n error: uploadError,\n progress: progressUpload,\n } = useUpload();\n\n React.useEffect(() => {\n // Whenever a replacementUrl is set, make sure to permutate the real asset.url by\n // the locally generated one\n if (replacementFile) {\n const fileLocalUrl = URL.createObjectURL(replacementFile);\n\n if (asset.isLocal) {\n asset.url = fileLocalUrl;\n }\n\n setAssetUrl(fileLocalUrl);\n setThumbnailUrl(fileLocalUrl);\n }\n }, [replacementFile, asset]);\n\n React.useEffect(() => {\n if (hasCropIntent === false) {\n stopCropping();\n onCropCancel();\n }\n }, [hasCropIntent, stopCropping, onCropCancel, onCropFinish]);\n\n React.useEffect(() => {\n if (hasCropIntent && isCropImageReady) {\n crop(previewRef.current!);\n onCropStart();\n }\n }, [isCropImageReady, hasCropIntent, onCropStart, crop]);\n\n const handleCropping = async () => {\n const nextAsset = { ...asset, width, height, folder: asset.folder?.id };\n const file = (await produceFile(nextAsset.name, nextAsset.mime!, nextAsset.updatedAt!)) as File;\n\n // Making sure that when persisting the new asset, the URL changes with width and height\n // So that the browser makes a request and handle the image caching correctly at the good size\n let optimizedCachingImage;\n let optimizedCachingThumbnailImage;\n\n if (asset.isLocal) {\n optimizedCachingImage = URL.createObjectURL(file);\n optimizedCachingThumbnailImage = optimizedCachingImage;\n asset.url = optimizedCachingImage;\n asset.rawFile = file;\n\n trackUsage('didCropFile', { duplicatedFile: null, location: trackedLocation! });\n } else {\n const updatedAsset = await editAsset(nextAsset, file);\n optimizedCachingImage = createAssetUrl(updatedAsset, false);\n optimizedCachingThumbnailImage = createAssetUrl(updatedAsset, true);\n\n trackUsage('didCropFile', { duplicatedFile: false, location: trackedLocation! });\n }\n\n setAssetUrl(optimizedCachingImage);\n setThumbnailUrl(optimizedCachingThumbnailImage);\n setHasCropIntent(false);\n };\n\n const isInCroppingMode = isCropping && !isLoading;\n\n const handleDuplication = async () => {\n const nextAsset = { ...asset, width, height };\n const file = (await produceFile(\n nextAsset.name,\n nextAsset.mime!,\n nextAsset.updatedAt!\n )) as RawFile;\n\n await upload({ name: file.name, rawFile: file }, asset.folder?.id ? asset.folder.id : null);\n\n trackUsage('didCropFile', { duplicatedFile: true, location: trackedLocation! });\n\n setHasCropIntent(false);\n onCropFinish();\n };\n\n const handleCropCancel = () => {\n setHasCropIntent(false);\n };\n\n const handleCropStart = () => {\n setHasCropIntent(true);\n };\n\n const calculateFocalPointFromEvent = (e: React.MouseEvent<HTMLElement>): FocalPoint => {\n const { clientX, clientY } = e;\n const rect = e.currentTarget.getBoundingClientRect();\n const posX = clientX - rect.left;\n const posY = clientY - rect.top;\n\n return {\n x: Number(((posX / rect.width) * 100).toFixed(2)),\n y: Number(((posY / rect.height) * 100).toFixed(2)),\n };\n };\n\n const handleFocalPointClick = (e: React.MouseEvent<HTMLElement>) => {\n if (!isInFocalPointMode) return;\n setFocalPoint(calculateFocalPointFromEvent(e));\n };\n\n const handleFocalPointCancel = () => {\n setIsInFocalPointMode(false);\n setFocalPoint(formFocalPoint ?? { x: 50, y: 50 });\n onFocalPointCancel();\n };\n\n const handleFocalPointStart = () => {\n onFocalPointStart();\n setIsInFocalPointMode(true);\n };\n\n const handleFocalPointValidate = () => {\n setIsInFocalPointMode(false);\n onFocalPointFinish(focalPoint);\n };\n\n const handleFocalPointReset = () => {\n setFocalPoint({ x: 50, y: 50 });\n };\n\n return (\n <>\n <CropperjsStyle />\n <RelativeBox hasRadius background=\"neutral150\" borderColor=\"neutral200\">\n {isCropperReady && isInCroppingMode && (\n <CroppingActions\n onValidate={handleCropping}\n onDuplicate={asset.isLocal ? undefined : handleDuplication}\n onCancel={handleCropCancel}\n />\n )}\n\n {isInFocalPointMode && (\n <FocalPointActions\n onValidate={handleFocalPointValidate}\n onCancel={handleFocalPointCancel}\n onReset={handleFocalPointReset}\n />\n )}\n\n <ActionRow paddingLeft={3} paddingRight={3} justifyContent=\"flex-end\">\n <Flex gap={1}>\n {canUpdate && !asset.isLocal && (\n <IconButton\n label={formatMessage({\n id: 'global.delete',\n defaultMessage: 'Delete',\n })}\n onClick={() => setShowConfirmDialog(true)}\n >\n <Trash />\n </IconButton>\n )}\n\n {canDownload && (\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.download'),\n defaultMessage: 'Download',\n })}\n onClick={() => downloadFile(assetUrl!, asset.name)}\n >\n <DownloadIcon />\n </IconButton>\n )}\n\n {canCopyLink && <CopyLinkButton url={assetUrl!} />}\n\n {canUpdate && asset.mime?.includes(ASSET_TYPES.Image) && (\n <IconButton\n label={formatMessage({ id: getTrad('control-card.crop'), defaultMessage: 'Crop' })}\n onClick={handleCropStart}\n >\n <Resize />\n </IconButton>\n )}\n\n {canUpdate && asset.mime?.includes(ASSET_TYPES.Image) && (\n <IconButton\n label={formatMessage({\n id: getTrad('control-card.set-focal-point'),\n defaultMessage: 'Set focal point',\n })}\n onClick={handleFocalPointStart}\n >\n <PinMap />\n </IconButton>\n )}\n </Flex>\n </ActionRow>\n\n <Wrapper>\n {/* This one is for editting an asset */}\n {isLoading && (\n <UploadProgressWrapper>\n <UploadProgress error={error} onCancel={cancel} progress={progress} />\n </UploadProgressWrapper>\n )}\n\n {/* This one is for duplicating an asset after cropping */}\n {isLoadingUpload && (\n <UploadProgressWrapper>\n <UploadProgress\n error={uploadError}\n onCancel={cancelUpload}\n progress={progressUpload}\n />\n </UploadProgressWrapper>\n )}\n\n <FocalPointImageWrapper>\n <AssetPreview\n ref={previewRef}\n mime={asset.mime!}\n name={asset.name}\n url={hasCropIntent ? cropUrl! : thumbnailUrl!}\n onLoad={() => {\n if (asset.isLocal || hasCropIntent) {\n setIsCropImageReady(true);\n }\n }}\n onClick={handleFocalPointClick}\n style={{ cursor: isInFocalPointMode ? 'crosshair' : undefined }}\n />\n\n {/* Show the set focal point marker */}\n {isInFocalPointMode && (\n <FocalPointAim $focalPoint={focalPoint}>\n <FocalPointHalo />\n </FocalPointAim>\n )}\n </FocalPointImageWrapper>\n </Wrapper>\n\n <ActionRow\n paddingLeft={2}\n paddingRight={2}\n justifyContent=\"flex-end\"\n $blurry={isInCroppingMode || isInFocalPointMode}\n >\n {isInCroppingMode && width && height && (\n <BadgeOverride background=\"neutral900\" color=\"neutral0\">\n {width && height ? `${height}✕${width}` : 'N/A'}\n </BadgeOverride>\n )}\n {isInFocalPointMode && (\n <BadgeOverride background=\"neutral900\" color=\"neutral0\">\n {`x: ${focalPoint.x}% | y: ${focalPoint.y}%`}\n </BadgeOverride>\n )}\n </ActionRow>\n </RelativeBox>\n\n <RemoveAssetDialog\n open={showConfirmDialog}\n onClose={(value) => {\n setShowConfirmDialog(false);\n if (value === null) {\n onDelete(null);\n }\n }}\n asset={asset}\n />\n </>\n );\n};\n"],"names":["PreviewBox","asset","canUpdate","canCopyLink","canDownload","onDelete","onCropFinish","onCropStart","onCropCancel","replacementFile","trackedLocation","formFocalPoint","onFocalPointStart","onFocalPointFinish","onFocalPointCancel","CropperjsStyle","createGlobalStyle","cropperjscss","trackUsage","useTracking","previewRef","React","useRef","isCropImageReady","setIsCropImageReady","useState","hasCropIntent","setHasCropIntent","assetUrl","setAssetUrl","createAssetUrl","thumbnailUrl","setThumbnailUrl","cropUrl","useMemo","isLocal","isUrlSigned","appendSearchParamsToUrl","url","params","updatedAt","formatMessage","useIntl","showConfirmDialog","setShowConfirmDialog","crop","produceFile","stopCropping","isCropping","isCropperReady","width","height","useCropImg","editAsset","error","isLoading","progress","cancel","useEditAsset","isInFocalPointMode","setIsInFocalPointMode","focalPoint","setFocalPoint","x","y","upload","isLoadingUpload","cancelUpload","uploadError","progressUpload","useUpload","useEffect","fileLocalUrl","URL","createObjectURL","current","handleCropping","nextAsset","folder","id","file","name","mime","optimizedCachingImage","optimizedCachingThumbnailImage","rawFile","duplicatedFile","location","updatedAsset","isInCroppingMode","handleDuplication","handleCropCancel","handleCropStart","calculateFocalPointFromEvent","e","clientX","clientY","rect","currentTarget","getBoundingClientRect","posX","left","posY","top","Number","toFixed","handleFocalPointClick","handleFocalPointCancel","handleFocalPointStart","handleFocalPointValidate","handleFocalPointReset","_jsxs","_Fragment","_jsx","RelativeBox","hasRadius","background","borderColor","CroppingActions","onValidate","onDuplicate","undefined","onCancel","FocalPointActions","onReset","ActionRow","paddingLeft","paddingRight","justifyContent","Flex","gap","IconButton","label","defaultMessage","onClick","Trash","getTrad","downloadFile","DownloadIcon","CopyLinkButton","includes","ASSET_TYPES","Image","Resize","PinMap","Wrapper","UploadProgressWrapper","UploadProgress","FocalPointImageWrapper","AssetPreview","ref","onLoad","style","cursor","FocalPointAim","$focalPoint","FocalPointHalo","$blurry","BadgeOverride","color","RemoveAssetDialog","open","onClose","value"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AA8DO,MAAMA,UAAAA,GAAa,CAAC,EACzBC,KAAK,EACLC,SAAS,EACTC,WAAW,EACXC,WAAW,EACXC,QAAQ,EACRC,YAAY,EACZC,WAAW,EACXC,YAAY,EACZC,eAAe,EACfC,eAAe,EACfC,cAAc,EACdC,iBAAiB,EACjBC,kBAAkB,EAClBC,kBAAkB,EACF,GAAA;AAChB,IAAA,MAAMC,cAAAA,GAAiBC,iBAAiB,CAAC,EAAEC,aAAa,CAAC;IACzD,MAAM,EAAEC,UAAU,EAAE,GAAGC,WAAAA,EAAAA;IACvB,MAAMC,UAAAA,GAAaC,KAAAA,CAAMC,MAAM,CAAC,IAAA,CAAA;AAChC,IAAA,MAAM,CAACC,gBAAAA,EAAkBC,mBAAAA,CAAoB,GAAGH,KAAAA,CAAMI,QAAQ,CAAC,KAAA,CAAA;AAC/D,IAAA,MAAM,CAACC,aAAAA,EAAeC,gBAAAA,CAAiB,GAAGN,KAAAA,CAAMI,QAAQ,CAAiB,IAAA,CAAA;IACzE,MAAM,CAACG,UAAUC,WAAAA,CAAY,GAAGR,MAAMI,QAAQ,CAACK,eAAe7B,KAAAA,EAAO,KAAA,CAAA,CAAA;IACrE,MAAM,CAAC8B,cAAcC,eAAAA,CAAgB,GAAGX,MAAMI,QAAQ,CAACK,eAAe7B,KAAAA,EAAO,IAAA,CAAA,CAAA;;;;;IAM7E,MAAMgC,OAAAA,GAAUZ,KAAAA,CAAMa,OAAO,CAAC,IAAA;QAC5B,IAAI,CAACjC,MAAMkC,OAAO,IAAI,CAAClC,KAAAA,CAAMmC,WAAW,IAAIR,QAAAA,EAAU;AACpD,YAAA,OAAOS,uBAAAA,CAAwB;gBAAEC,GAAAA,EAAKV,QAAAA;gBAAUW,MAAAA,EAAQ;AAAEC,oBAAAA,SAAAA,EAAWvC,MAAMuC;AAAU;AAAE,aAAA,CAAA;AACzF,QAAA;QAEA,OAAOZ,QAAAA;IACT,CAAA,EAAG;AAACA,QAAAA,QAAAA;AAAU3B,QAAAA,KAAAA,CAAMkC,OAAO;AAAElC,QAAAA,KAAAA,CAAMmC,WAAW;AAAEnC,QAAAA,KAAAA,CAAMuC;AAAU,KAAA,CAAA;IAEhE,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,CAACC,iBAAAA,EAAmBC,oBAAAA,CAAqB,GAAGvB,KAAAA,CAAMI,QAAQ,CAAC,KAAA,CAAA;AACjE,IAAA,MAAM,EAAEoB,IAAI,EAAEC,WAAW,EAAEC,YAAY,EAAEC,UAAU,EAAEC,cAAc,EAAEC,KAAK,EAAEC,MAAM,EAAE,GAClFC,UAAAA,EAAAA;IACF,MAAM,EAAEC,SAAS,EAAEC,KAAK,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAE,GAAGC,YAAAA,EAAAA;AAC1D,IAAA,MAAM,CAACC,kBAAAA,EAAoBC,qBAAAA,CAAsB,GAAGvC,KAAAA,CAAMI,QAAQ,CAAU,KAAA,CAAA;AAC5E,IAAA,MAAM,CAACoC,UAAAA,EAAYC,aAAAA,CAAc,GAAGzC,KAAAA,CAAMI,QAAQ,CAChDd,cAAAA,IAAkB;QAAEoD,CAAAA,EAAG,EAAA;QAAIC,CAAAA,EAAG;AAAG,KAAA,CAAA;AAGnC,IAAA,MAAM,EACJC,MAAM,EACNV,SAAAA,EAAWW,eAAe,EAC1BT,MAAAA,EAAQU,YAAY,EACpBb,OAAOc,WAAW,EAClBZ,QAAAA,EAAUa,cAAc,EACzB,GAAGC,SAAAA,EAAAA;AAEJjD,IAAAA,KAAAA,CAAMkD,SAAS,CAAC,IAAA;;;AAGd,QAAA,IAAI9D,eAAAA,EAAiB;YACnB,MAAM+D,YAAAA,GAAeC,GAAAA,CAAIC,eAAe,CAACjE,eAAAA,CAAAA;YAEzC,IAAIR,KAAAA,CAAMkC,OAAO,EAAE;AACjBlC,gBAAAA,KAAAA,CAAMqC,GAAG,GAAGkC,YAAAA;AACd,YAAA;YAEA3C,WAAAA,CAAY2C,YAAAA,CAAAA;YACZxC,eAAAA,CAAgBwC,YAAAA,CAAAA;AAClB,QAAA;IACF,CAAA,EAAG;AAAC/D,QAAAA,eAAAA;AAAiBR,QAAAA;AAAM,KAAA,CAAA;AAE3BoB,IAAAA,KAAAA,CAAMkD,SAAS,CAAC,IAAA;AACd,QAAA,IAAI7C,kBAAkB,KAAA,EAAO;AAC3BqB,YAAAA,YAAAA,EAAAA;AACAvC,YAAAA,YAAAA,EAAAA;AACF,QAAA;IACF,CAAA,EAAG;AAACkB,QAAAA,aAAAA;AAAeqB,QAAAA,YAAAA;AAAcvC,QAAAA,YAAAA;AAAcF,QAAAA;AAAa,KAAA,CAAA;AAE5De,IAAAA,KAAAA,CAAMkD,SAAS,CAAC,IAAA;AACd,QAAA,IAAI7C,iBAAiBH,gBAAAA,EAAkB;AACrCsB,YAAAA,IAAAA,CAAKzB,WAAWuD,OAAO,CAAA;AACvBpE,YAAAA,WAAAA,EAAAA;AACF,QAAA;IACF,CAAA,EAAG;AAACgB,QAAAA,gBAAAA;AAAkBG,QAAAA,aAAAA;AAAenB,QAAAA,WAAAA;AAAasC,QAAAA;AAAK,KAAA,CAAA;AAEvD,IAAA,MAAM+B,cAAAA,GAAiB,UAAA;AACrB,QAAA,MAAMC,SAAAA,GAAY;AAAE,YAAA,GAAG5E,KAAK;AAAEiD,YAAAA,KAAAA;AAAOC,YAAAA,MAAAA;YAAQ2B,MAAAA,EAAQ7E,KAAAA,CAAM6E,MAAM,EAAEC;AAAG,SAAA;QACtE,MAAMC,IAAAA,GAAQ,MAAMlC,WAAAA,CAAY+B,SAAAA,CAAUI,IAAI,EAAEJ,SAAAA,CAAUK,IAAI,EAAGL,SAAAA,CAAUrC,SAAS,CAAA;;;QAIpF,IAAI2C,qBAAAA;QACJ,IAAIC,8BAAAA;QAEJ,IAAInF,KAAAA,CAAMkC,OAAO,EAAE;YACjBgD,qBAAAA,GAAwBV,GAAAA,CAAIC,eAAe,CAACM,IAAAA,CAAAA;YAC5CI,8BAAAA,GAAiCD,qBAAAA;AACjClF,YAAAA,KAAAA,CAAMqC,GAAG,GAAG6C,qBAAAA;AACZlF,YAAAA,KAAAA,CAAMoF,OAAO,GAAGL,IAAAA;AAEhB9D,YAAAA,UAAAA,CAAW,aAAA,EAAe;gBAAEoE,cAAAA,EAAgB,IAAA;gBAAMC,QAAAA,EAAU7E;AAAiB,aAAA,CAAA;QAC/E,CAAA,MAAO;YACL,MAAM8E,YAAAA,GAAe,MAAMnC,SAAAA,CAAUwB,SAAAA,EAAWG,IAAAA,CAAAA;AAChDG,YAAAA,qBAAAA,GAAwBrD,eAAe0D,YAAAA,EAAc,KAAA,CAAA;AACrDJ,YAAAA,8BAAAA,GAAiCtD,eAAe0D,YAAAA,EAAc,IAAA,CAAA;AAE9DtE,YAAAA,UAAAA,CAAW,aAAA,EAAe;gBAAEoE,cAAAA,EAAgB,KAAA;gBAAOC,QAAAA,EAAU7E;AAAiB,aAAA,CAAA;AAChF,QAAA;QAEAmB,WAAAA,CAAYsD,qBAAAA,CAAAA;QACZnD,eAAAA,CAAgBoD,8BAAAA,CAAAA;QAChBzD,gBAAAA,CAAiB,KAAA,CAAA;AACnB,IAAA,CAAA;IAEA,MAAM8D,gBAAAA,GAAmBzC,cAAc,CAACO,SAAAA;AAExC,IAAA,MAAMmC,iBAAAA,GAAoB,UAAA;AACxB,QAAA,MAAMb,SAAAA,GAAY;AAAE,YAAA,GAAG5E,KAAqB,CAAA;QAC5C,MAAM+E,IAAAA,GAAQ,MAAMlC,WAAAA,CAClB+B,SAAAA,CAAUI,IAAI,EACdJ,SAAAA,CAAUK,IAAI,EACdL,SAAAA,CAAUrC,SAAS,CAAA;AAGrB,QAAA,MAAMyB,MAAAA,CAAO;AAAEgB,YAAAA,IAAAA,EAAMD,KAAKC,IAAI;YAAEI,OAAAA,EAASL;SAAK,EAAG/E,KAAAA,CAAM6E,MAAM,EAAEC,EAAAA,GAAK9E,MAAM6E,MAAM,CAACC,EAAE,GAAG,IAAA,CAAA;AAEtF7D,QAAAA,UAAAA,CAAW,aAAA,EAAe;YAAEoE,cAAAA,EAAgB,IAAA;YAAMC,QAAAA,EAAU7E;AAAiB,SAAA,CAAA;QAE7EiB,gBAAAA,CAAiB,KAAA,CAAA;AACjBrB,QAAAA,YAAAA,EAAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMqF,gBAAAA,GAAmB,IAAA;QACvBhE,gBAAAA,CAAiB,KAAA,CAAA;AACnB,IAAA,CAAA;AAEA,IAAA,MAAMiE,eAAAA,GAAkB,IAAA;QACtBjE,gBAAAA,CAAiB,IAAA,CAAA;AACnB,IAAA,CAAA;AAEA,IAAA,MAAMkE,+BAA+B,CAACC,CAAAA,GAAAA;AACpC,QAAA,MAAM,EAAEC,OAAO,EAAEC,OAAO,EAAE,GAAGF,CAAAA;AAC7B,QAAA,MAAMG,IAAAA,GAAOH,CAAAA,CAAEI,aAAa,CAACC,qBAAqB,EAAA;QAClD,MAAMC,IAAAA,GAAOL,OAAAA,GAAUE,IAAAA,CAAKI,IAAI;QAChC,MAAMC,IAAAA,GAAON,OAAAA,GAAUC,IAAAA,CAAKM,GAAG;QAE/B,OAAO;YACLxC,CAAAA,EAAGyC,MAAAA,CAAO,CAAC,IAACJ,GAAOH,IAAAA,CAAK/C,KAAK,GAAI,GAAE,EAAGuD,OAAO,CAAC,CAAA,CAAA,CAAA;YAC9CzC,CAAAA,EAAGwC,MAAAA,CAAO,CAAC,IAACF,GAAOL,IAAAA,CAAK9C,MAAM,GAAI,GAAE,EAAGsD,OAAO,CAAC,CAAA,CAAA;AACjD,SAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMC,wBAAwB,CAACZ,CAAAA,GAAAA;AAC7B,QAAA,IAAI,CAACnC,kBAAAA,EAAoB;AACzBG,QAAAA,aAAAA,CAAc+B,4BAAAA,CAA6BC,CAAAA,CAAAA,CAAAA;AAC7C,IAAA,CAAA;AAEA,IAAA,MAAMa,sBAAAA,GAAyB,IAAA;QAC7B/C,qBAAAA,CAAsB,KAAA,CAAA;AACtBE,QAAAA,aAAAA,CAAcnD,cAAAA,IAAkB;YAAEoD,CAAAA,EAAG,EAAA;YAAIC,CAAAA,EAAG;AAAG,SAAA,CAAA;AAC/ClD,QAAAA,kBAAAA,EAAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAM8F,qBAAAA,GAAwB,IAAA;AAC5BhG,QAAAA,iBAAAA,EAAAA;QACAgD,qBAAAA,CAAsB,IAAA,CAAA;AACxB,IAAA,CAAA;AAEA,IAAA,MAAMiD,wBAAAA,GAA2B,IAAA;QAC/BjD,qBAAAA,CAAsB,KAAA,CAAA;QACtB/C,kBAAAA,CAAmBgD,UAAAA,CAAAA;AACrB,IAAA,CAAA;AAEA,IAAA,MAAMiD,qBAAAA,GAAwB,IAAA;QAC5BhD,aAAAA,CAAc;YAAEC,CAAAA,EAAG,EAAA;YAAIC,CAAAA,EAAG;AAAG,SAAA,CAAA;AAC/B,IAAA,CAAA;IAEA,qBACE+C,IAAA,CAAAC,QAAA,EAAA;;0BACEC,GAAA,CAAClG,cAAAA,EAAAA,EAAAA,CAAAA;0BACDgG,IAAA,CAACG,WAAAA,EAAAA;gBAAYC,SAAS,EAAA,IAAA;gBAACC,UAAAA,EAAW,YAAA;gBAAaC,WAAAA,EAAY,YAAA;;AACxDpE,oBAAAA,cAAAA,IAAkBwC,kCACjBwB,GAAA,CAACK,eAAAA,EAAAA;wBACCC,UAAAA,EAAY3C,cAAAA;wBACZ4C,WAAAA,EAAavH,KAAAA,CAAMkC,OAAO,GAAGsF,SAAAA,GAAY/B,iBAAAA;wBACzCgC,QAAAA,EAAU/B;;AAIbhC,oBAAAA,kBAAAA,kBACCsD,GAAA,CAACU,iBAAAA,EAAAA;wBACCJ,UAAAA,EAAYV,wBAAAA;wBACZa,QAAAA,EAAUf,sBAAAA;wBACViB,OAAAA,EAASd;;kCAIbG,GAAA,CAACY,SAAAA,EAAAA;wBAAUC,WAAAA,EAAa,CAAA;wBAAGC,YAAAA,EAAc,CAAA;wBAAGC,cAAAA,EAAe,UAAA;AACzD,wBAAA,QAAA,gBAAAjB,IAAA,CAACkB,IAAAA,EAAAA;4BAAKC,GAAAA,EAAK,CAAA;;AACRhI,gCAAAA,SAAAA,IAAa,CAACD,KAAAA,CAAMkC,OAAO,kBAC1B8E,GAAA,CAACkB,UAAAA,EAAAA;AACCC,oCAAAA,KAAAA,EAAO3F,aAAAA,CAAc;wCACnBsC,EAAAA,EAAI,eAAA;wCACJsD,cAAAA,EAAgB;AAClB,qCAAA,CAAA;AACAC,oCAAAA,OAAAA,EAAS,IAAM1F,oBAAAA,CAAqB,IAAA,CAAA;AAEpC,oCAAA,QAAA,gBAAAqE,GAAA,CAACsB,KAAAA,EAAAA,EAAAA;;AAIJnI,gCAAAA,WAAAA,kBACC6G,GAAA,CAACkB,UAAAA,EAAAA;AACCC,oCAAAA,KAAAA,EAAO3F,aAAAA,CAAc;AACnBsC,wCAAAA,EAAAA,EAAIyD,OAAAA,CAAQ,uBAAA,CAAA;wCACZH,cAAAA,EAAgB;AAClB,qCAAA,CAAA;AACAC,oCAAAA,OAAAA,EAAS,IAAMG,YAAAA,CAAa7G,QAAAA,EAAW3B,KAAAA,CAAMgF,IAAI,CAAA;AAEjD,oCAAA,QAAA,gBAAAgC,GAAA,CAACyB,QAAAA,EAAAA,EAAAA;;AAIJvI,gCAAAA,WAAAA,kBAAe8G,GAAA,CAAC0B,cAAAA,EAAAA;oCAAerG,GAAAA,EAAKV;;AAEpC1B,gCAAAA,SAAAA,IAAaD,MAAMiF,IAAI,EAAE0D,SAASC,WAAAA,CAAYC,KAAK,mBAClD7B,GAAA,CAACkB,UAAAA,EAAAA;AACCC,oCAAAA,KAAAA,EAAO3F,aAAAA,CAAc;AAAEsC,wCAAAA,EAAAA,EAAIyD,OAAAA,CAAQ,mBAAA,CAAA;wCAAsBH,cAAAA,EAAgB;AAAO,qCAAA,CAAA;oCAChFC,OAAAA,EAAS1C,eAAAA;AAET,oCAAA,QAAA,gBAAAqB,GAAA,CAAC8B,IAAAA,EAAAA,EAAAA;;AAIJ7I,gCAAAA,SAAAA,IAAaD,MAAMiF,IAAI,EAAE0D,SAASC,WAAAA,CAAYC,KAAK,mBAClD7B,GAAA,CAACkB,UAAAA,EAAAA;AACCC,oCAAAA,KAAAA,EAAO3F,aAAAA,CAAc;AACnBsC,wCAAAA,EAAAA,EAAIyD,OAAAA,CAAQ,8BAAA,CAAA;wCACZH,cAAAA,EAAgB;AAClB,qCAAA,CAAA;oCACAC,OAAAA,EAAS1B,qBAAAA;AAET,oCAAA,QAAA,gBAAAK,GAAA,CAAC+B,MAAAA,EAAAA,EAAAA;;;;;kCAMTjC,IAAA,CAACkC,OAAAA,EAAAA;;AAEE1F,4BAAAA,SAAAA,kBACC0D,GAAA,CAACiC,qBAAAA,EAAAA;AACC,gCAAA,QAAA,gBAAAjC,GAAA,CAACkC,cAAAA,EAAAA;oCAAe7F,KAAAA,EAAOA,KAAAA;oCAAOoE,QAAAA,EAAUjE,MAAAA;oCAAQD,QAAAA,EAAUA;;;AAK7DU,4BAAAA,eAAAA,kBACC+C,GAAA,CAACiC,qBAAAA,EAAAA;AACC,gCAAA,QAAA,gBAAAjC,GAAA,CAACkC,cAAAA,EAAAA;oCACC7F,KAAAA,EAAOc,WAAAA;oCACPsD,QAAAA,EAAUvD,YAAAA;oCACVX,QAAAA,EAAUa;;;0CAKhB0C,IAAA,CAACqC,sBAAAA,EAAAA;;kDACCnC,GAAA,CAACoC,YAAAA,EAAAA;wCACCC,GAAAA,EAAKlI,UAAAA;AACL8D,wCAAAA,IAAAA,EAAMjF,MAAMiF,IAAI;AAChBD,wCAAAA,IAAAA,EAAMhF,MAAMgF,IAAI;AAChB3C,wCAAAA,GAAAA,EAAKZ,gBAAgBO,OAAAA,GAAWF,YAAAA;wCAChCwH,MAAAA,EAAQ,IAAA;4CACN,IAAItJ,KAAAA,CAAMkC,OAAO,IAAIT,aAAAA,EAAe;gDAClCF,mBAAAA,CAAoB,IAAA,CAAA;AACtB,4CAAA;AACF,wCAAA,CAAA;wCACA8G,OAAAA,EAAS5B,qBAAAA;wCACT8C,KAAAA,EAAO;AAAEC,4CAAAA,MAAAA,EAAQ9F,qBAAqB,WAAA,GAAc8D;AAAU;;AAI/D9D,oCAAAA,kBAAAA,kBACCsD,GAAA,CAACyC,aAAAA,EAAAA;wCAAcC,WAAAA,EAAa9F,UAAAA;AAC1B,wCAAA,QAAA,gBAAAoD,GAAA,CAAC2C,cAAAA,EAAAA,EAAAA;;;;;;kCAMT7C,IAAA,CAACc,SAAAA,EAAAA;wBACCC,WAAAA,EAAa,CAAA;wBACbC,YAAAA,EAAc,CAAA;wBACdC,cAAAA,EAAe,UAAA;AACf6B,wBAAAA,OAAAA,EAASpE,gBAAAA,IAAoB9B,kBAAAA;;4BAE5B8B,gBAAAA,IAAoBvC,KAAAA,IAASC,wBAC5B8D,GAAA,CAAC6C,aAAAA,EAAAA;gCAAc1C,UAAAA,EAAW,YAAA;gCAAa2C,KAAAA,EAAM,UAAA;AAC1C7G,gCAAAA,QAAAA,EAAAA,KAAAA,IAASC,SAAS,CAAA,EAAGA,MAAAA,CAAO,CAAC,EAAED,OAAO,GAAG;;AAG7CS,4BAAAA,kBAAAA,kBACCsD,GAAA,CAAC6C,aAAAA,EAAAA;gCAAc1C,UAAAA,EAAW,YAAA;gCAAa2C,KAAAA,EAAM,UAAA;0CAC1C,CAAC,GAAG,EAAElG,UAAAA,CAAWE,CAAC,CAAC,OAAO,EAAEF,UAAAA,CAAWG,CAAC,CAAC,CAAC;;;;;;0BAMnDiD,GAAA,CAAC+C,iBAAAA,EAAAA;gBACCC,IAAAA,EAAMtH,iBAAAA;AACNuH,gBAAAA,OAAAA,EAAS,CAACC,KAAAA,GAAAA;oBACRvH,oBAAAA,CAAqB,KAAA,CAAA;AACrB,oBAAA,IAAIuH,UAAU,IAAA,EAAM;wBAClB9J,QAAAA,CAAS,IAAA,CAAA;AACX,oBAAA;AACF,gBAAA,CAAA;gBACAJ,KAAAA,EAAOA;;;;AAIf;;;;"}
@@ -9,7 +9,6 @@ require('byte-size');
9
9
  require('date-fns');
10
10
  var getTrad = require('../../utils/getTrad.js');
11
11
  require('qs');
12
- require('../../utils/typeFromMime.js');
13
12
  require('../../utils/urlYupSchema.js');
14
13
 
15
14
  function _interopNamespace(e) {