@strapi/upload 5.59.0 → 5.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. package/dist/admin/components/AssetPickerDialog/AssetPickerDialog.js +434 -0
  2. package/dist/admin/components/AssetPickerDialog/AssetPickerDialog.js.map +1 -0
  3. package/dist/admin/components/AssetPickerDialog/AssetPickerDialog.mjs +432 -0
  4. package/dist/admin/components/AssetPickerDialog/AssetPickerDialog.mjs.map +1 -0
  5. package/dist/admin/components/AssetPickerDialog/FolderBreadcrumbs.js +91 -0
  6. package/dist/admin/components/AssetPickerDialog/FolderBreadcrumbs.js.map +1 -0
  7. package/dist/admin/components/AssetPickerDialog/FolderBreadcrumbs.mjs +89 -0
  8. package/dist/admin/components/AssetPickerDialog/FolderBreadcrumbs.mjs.map +1 -0
  9. package/dist/admin/components/AssetPickerDialog/MediaLibraryPickerDialog.js +29 -0
  10. package/dist/admin/components/AssetPickerDialog/MediaLibraryPickerDialog.js.map +1 -0
  11. package/dist/admin/components/AssetPickerDialog/MediaLibraryPickerDialog.mjs +27 -0
  12. package/dist/admin/components/AssetPickerDialog/MediaLibraryPickerDialog.mjs.map +1 -0
  13. package/dist/admin/components/AssetPickerDialog/PickerSelectionProvider.js +178 -0
  14. package/dist/admin/components/AssetPickerDialog/PickerSelectionProvider.js.map +1 -0
  15. package/dist/admin/components/AssetPickerDialog/PickerSelectionProvider.mjs +175 -0
  16. package/dist/admin/components/AssetPickerDialog/PickerSelectionProvider.mjs.map +1 -0
  17. package/dist/admin/components/AssetPickerDialog/SortableSelection.js +143 -0
  18. package/dist/admin/components/AssetPickerDialog/SortableSelection.js.map +1 -0
  19. package/dist/admin/components/AssetPickerDialog/SortableSelection.mjs +141 -0
  20. package/dist/admin/components/AssetPickerDialog/SortableSelection.mjs.map +1 -0
  21. package/dist/admin/components/AssetPickerDialog/pickerSelection.js +49 -0
  22. package/dist/admin/components/AssetPickerDialog/pickerSelection.js.map +1 -0
  23. package/dist/admin/components/AssetPickerDialog/pickerSelection.mjs +41 -0
  24. package/dist/admin/components/AssetPickerDialog/pickerSelection.mjs.map +1 -0
  25. package/dist/admin/components/Drawer.js +12 -7
  26. package/dist/admin/components/Drawer.js.map +1 -1
  27. package/dist/admin/components/Drawer.mjs +12 -7
  28. package/dist/admin/components/Drawer.mjs.map +1 -1
  29. package/dist/admin/components/EditorFileDropZone/EditorFileDropZone.js +188 -0
  30. package/dist/admin/components/EditorFileDropZone/EditorFileDropZone.js.map +1 -0
  31. package/dist/admin/components/EditorFileDropZone/EditorFileDropZone.mjs +186 -0
  32. package/dist/admin/components/EditorFileDropZone/EditorFileDropZone.mjs.map +1 -0
  33. package/dist/admin/components/MediaLibraryInput/AddAssetMenu.js +9 -4
  34. package/dist/admin/components/MediaLibraryInput/AddAssetMenu.js.map +1 -1
  35. package/dist/admin/components/MediaLibraryInput/AddAssetMenu.mjs +9 -4
  36. package/dist/admin/components/MediaLibraryInput/AddAssetMenu.mjs.map +1 -1
  37. package/dist/admin/components/MediaLibraryInput/AssetCard.js +240 -0
  38. package/dist/admin/components/MediaLibraryInput/AssetCard.js.map +1 -0
  39. package/dist/admin/components/MediaLibraryInput/AssetCard.mjs +237 -0
  40. package/dist/admin/components/MediaLibraryInput/AssetCard.mjs.map +1 -0
  41. package/dist/admin/components/MediaLibraryInput/AssetCarousel.js +161 -0
  42. package/dist/admin/components/MediaLibraryInput/AssetCarousel.js.map +1 -0
  43. package/dist/admin/components/MediaLibraryInput/AssetCarousel.mjs +159 -0
  44. package/dist/admin/components/MediaLibraryInput/AssetCarousel.mjs.map +1 -0
  45. package/dist/admin/components/MediaLibraryInput/AssetDropZone.js +76 -49
  46. package/dist/admin/components/MediaLibraryInput/AssetDropZone.js.map +1 -1
  47. package/dist/admin/components/MediaLibraryInput/AssetDropZone.mjs +77 -50
  48. package/dist/admin/components/MediaLibraryInput/AssetDropZone.mjs.map +1 -1
  49. package/dist/admin/components/MediaLibraryInput/AssetPreview.js +109 -0
  50. package/dist/admin/components/MediaLibraryInput/AssetPreview.js.map +1 -0
  51. package/dist/admin/components/MediaLibraryInput/AssetPreview.mjs +106 -0
  52. package/dist/admin/components/MediaLibraryInput/AssetPreview.mjs.map +1 -0
  53. package/dist/admin/components/MediaLibraryInput/AssetRow.js +146 -79
  54. package/dist/admin/components/MediaLibraryInput/AssetRow.js.map +1 -1
  55. package/dist/admin/components/MediaLibraryInput/AssetRow.mjs +148 -82
  56. package/dist/admin/components/MediaLibraryInput/AssetRow.mjs.map +1 -1
  57. package/dist/admin/components/MediaLibraryInput/FieldControls.js +32 -0
  58. package/dist/admin/components/MediaLibraryInput/FieldControls.js.map +1 -0
  59. package/dist/admin/components/MediaLibraryInput/FieldControls.mjs +29 -0
  60. package/dist/admin/components/MediaLibraryInput/FieldControls.mjs.map +1 -0
  61. package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js +163 -111
  62. package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.js.map +1 -1
  63. package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs +162 -114
  64. package/dist/admin/components/MediaLibraryInput/MediaLibraryInput.mjs.map +1 -1
  65. package/dist/admin/components/MediaLibraryInput/UploadProgressBar.js +42 -0
  66. package/dist/admin/components/MediaLibraryInput/UploadProgressBar.js.map +1 -0
  67. package/dist/admin/components/MediaLibraryInput/UploadProgressBar.mjs +40 -0
  68. package/dist/admin/components/MediaLibraryInput/UploadProgressBar.mjs.map +1 -0
  69. package/dist/admin/components/MediaLibraryInput/openAssetDetails.js +46 -0
  70. package/dist/admin/components/MediaLibraryInput/openAssetDetails.js.map +1 -0
  71. package/dist/admin/components/MediaLibraryInput/openAssetDetails.mjs +43 -0
  72. package/dist/admin/components/MediaLibraryInput/openAssetDetails.mjs.map +1 -0
  73. package/dist/admin/components/MediaLibraryInput/useFieldUploads.js +122 -0
  74. package/dist/admin/components/MediaLibraryInput/useFieldUploads.js.map +1 -0
  75. package/dist/admin/components/MediaLibraryInput/useFieldUploads.mjs +120 -0
  76. package/dist/admin/components/MediaLibraryInput/useFieldUploads.mjs.map +1 -0
  77. package/dist/admin/components/UploadProgressDialog.js +2 -1
  78. package/dist/admin/components/UploadProgressDialog.js.map +1 -1
  79. package/dist/admin/components/UploadProgressDialog.mjs +2 -1
  80. package/dist/admin/components/UploadProgressDialog.mjs.map +1 -1
  81. package/dist/admin/hooks/useMediaLibraryPermissions.js +12 -2
  82. package/dist/admin/hooks/useMediaLibraryPermissions.js.map +1 -1
  83. package/dist/admin/hooks/useMediaLibraryPermissions.mjs +12 -2
  84. package/dist/admin/hooks/useMediaLibraryPermissions.mjs.map +1 -1
  85. package/dist/admin/index.js +10 -1
  86. package/dist/admin/index.js.map +1 -1
  87. package/dist/admin/index.mjs +10 -1
  88. package/dist/admin/index.mjs.map +1 -1
  89. package/dist/admin/pages/Assets/AssetsPage.js +14 -303
  90. package/dist/admin/pages/Assets/AssetsPage.js.map +1 -1
  91. package/dist/admin/pages/Assets/AssetsPage.mjs +13 -282
  92. package/dist/admin/pages/Assets/AssetsPage.mjs.map +1 -1
  93. package/dist/admin/pages/Assets/components/AssetDetails/AssetCropEditor.mjs +2 -2
  94. package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js +181 -65
  95. package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js.map +1 -1
  96. package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs +184 -69
  97. package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs.map +1 -1
  98. package/dist/admin/pages/Assets/components/AssetDetails/AssetPreview.mjs +1 -1
  99. package/dist/admin/pages/Assets/components/AssetsGrid.js +142 -31
  100. package/dist/admin/pages/Assets/components/AssetsGrid.js.map +1 -1
  101. package/dist/admin/pages/Assets/components/AssetsGrid.mjs +145 -34
  102. package/dist/admin/pages/Assets/components/AssetsGrid.mjs.map +1 -1
  103. package/dist/admin/pages/Assets/components/AssetsSearchInput.js +43 -2
  104. package/dist/admin/pages/Assets/components/AssetsSearchInput.js.map +1 -1
  105. package/dist/admin/pages/Assets/components/AssetsSearchInput.mjs +45 -4
  106. package/dist/admin/pages/Assets/components/AssetsSearchInput.mjs.map +1 -1
  107. package/dist/admin/pages/Assets/components/AssetsTable.js +58 -34
  108. package/dist/admin/pages/Assets/components/AssetsTable.js.map +1 -1
  109. package/dist/admin/pages/Assets/components/AssetsTable.mjs +60 -36
  110. package/dist/admin/pages/Assets/components/AssetsTable.mjs.map +1 -1
  111. package/dist/admin/pages/Assets/components/AssetsView.js +145 -0
  112. package/dist/admin/pages/Assets/components/AssetsView.js.map +1 -0
  113. package/dist/admin/pages/Assets/components/AssetsView.mjs +143 -0
  114. package/dist/admin/pages/Assets/components/AssetsView.mjs.map +1 -0
  115. package/dist/admin/pages/Assets/components/BulkActionsBar.mjs +1 -1
  116. package/dist/admin/pages/Assets/components/BusyOverlay.mjs +1 -1
  117. package/dist/admin/pages/Assets/components/Dnd/DragOverlayChip.mjs +1 -1
  118. package/dist/admin/pages/Assets/components/Dnd/ReorderHandle.js +40 -0
  119. package/dist/admin/pages/Assets/components/Dnd/ReorderHandle.js.map +1 -0
  120. package/dist/admin/pages/Assets/components/Dnd/ReorderHandle.mjs +38 -0
  121. package/dist/admin/pages/Assets/components/Dnd/ReorderHandle.mjs.map +1 -0
  122. package/dist/admin/pages/Assets/components/Dnd/assetSortable.js +29 -0
  123. package/dist/admin/pages/Assets/components/Dnd/assetSortable.js.map +1 -0
  124. package/dist/admin/pages/Assets/components/Dnd/assetSortable.mjs +24 -0
  125. package/dist/admin/pages/Assets/components/Dnd/assetSortable.mjs.map +1 -0
  126. package/dist/admin/pages/Assets/components/Dnd/dndIds.js +5 -0
  127. package/dist/admin/pages/Assets/components/Dnd/dndIds.js.map +1 -1
  128. package/dist/admin/pages/Assets/components/Dnd/dndIds.mjs +5 -1
  129. package/dist/admin/pages/Assets/components/Dnd/dndIds.mjs.map +1 -1
  130. package/dist/admin/pages/Assets/components/Dnd/useAssetDnd.js +41 -13
  131. package/dist/admin/pages/Assets/components/Dnd/useAssetDnd.js.map +1 -1
  132. package/dist/admin/pages/Assets/components/Dnd/useAssetDnd.mjs +41 -13
  133. package/dist/admin/pages/Assets/components/Dnd/useAssetDnd.mjs.map +1 -1
  134. package/dist/admin/pages/Assets/components/FilterBadges.mjs +2 -2
  135. package/dist/admin/pages/Assets/components/FilterMenu.mjs +2 -2
  136. package/dist/admin/pages/Assets/components/FolderTree/FolderTree.js +274 -55
  137. package/dist/admin/pages/Assets/components/FolderTree/FolderTree.js.map +1 -1
  138. package/dist/admin/pages/Assets/components/FolderTree/FolderTree.mjs +277 -59
  139. package/dist/admin/pages/Assets/components/FolderTree/FolderTree.mjs.map +1 -1
  140. package/dist/admin/pages/Assets/components/FolderTree/collapsedBranch.js +32 -0
  141. package/dist/admin/pages/Assets/components/FolderTree/collapsedBranch.js.map +1 -0
  142. package/dist/admin/pages/Assets/components/FolderTree/collapsedBranch.mjs +29 -0
  143. package/dist/admin/pages/Assets/components/FolderTree/collapsedBranch.mjs.map +1 -0
  144. package/dist/admin/pages/Assets/components/ViewToggle.js +126 -0
  145. package/dist/admin/pages/Assets/components/ViewToggle.js.map +1 -0
  146. package/dist/admin/pages/Assets/components/ViewToggle.mjs +104 -0
  147. package/dist/admin/pages/Assets/components/ViewToggle.mjs.map +1 -0
  148. package/dist/admin/pages/Assets/hooks/useAssetSearch.js +2 -2
  149. package/dist/admin/pages/Assets/hooks/useAssetSearch.js.map +1 -1
  150. package/dist/admin/pages/Assets/hooks/useAssetSearch.mjs +2 -2
  151. package/dist/admin/pages/Assets/hooks/useAssetSearch.mjs.map +1 -1
  152. package/dist/admin/pages/Assets/hooks/useAssetSelection.js +19 -1
  153. package/dist/admin/pages/Assets/hooks/useAssetSelection.js.map +1 -1
  154. package/dist/admin/pages/Assets/hooks/useAssetSelection.mjs +20 -3
  155. package/dist/admin/pages/Assets/hooks/useAssetSelection.mjs.map +1 -1
  156. package/dist/admin/pages/Assets/hooks/useAssetsList.js +87 -0
  157. package/dist/admin/pages/Assets/hooks/useAssetsList.js.map +1 -0
  158. package/dist/admin/pages/Assets/hooks/useAssetsList.mjs +85 -0
  159. package/dist/admin/pages/Assets/hooks/useAssetsList.mjs.map +1 -0
  160. package/dist/admin/pages/Assets/hooks/useBusyAssets.mjs +1 -1
  161. package/dist/admin/pages/Assets/hooks/useFolderNavigation.js +2 -1
  162. package/dist/admin/pages/Assets/hooks/useFolderNavigation.js.map +1 -1
  163. package/dist/admin/pages/Assets/hooks/useFolderNavigation.mjs +3 -2
  164. package/dist/admin/pages/Assets/hooks/useFolderNavigation.mjs.map +1 -1
  165. package/dist/admin/pages/Assets/hooks/useIsAssetDetailsOpen.js +2 -6
  166. package/dist/admin/pages/Assets/hooks/useIsAssetDetailsOpen.js.map +1 -1
  167. package/dist/admin/pages/Assets/hooks/useIsAssetDetailsOpen.mjs +2 -6
  168. package/dist/admin/pages/Assets/hooks/useIsAssetDetailsOpen.mjs.map +1 -1
  169. package/dist/admin/pages/Assets/hooks/useListFilters.js +2 -1
  170. package/dist/admin/pages/Assets/hooks/useListFilters.js.map +1 -1
  171. package/dist/admin/pages/Assets/hooks/useListFilters.mjs +3 -2
  172. package/dist/admin/pages/Assets/hooks/useListFilters.mjs.map +1 -1
  173. package/dist/admin/pages/Assets/hooks/useListQueryParams.js +80 -0
  174. package/dist/admin/pages/Assets/hooks/useListQueryParams.js.map +1 -0
  175. package/dist/admin/pages/Assets/hooks/useListQueryParams.mjs +77 -0
  176. package/dist/admin/pages/Assets/hooks/useListQueryParams.mjs.map +1 -0
  177. package/dist/admin/pages/Assets/hooks/useListSettings.js +32 -0
  178. package/dist/admin/pages/Assets/hooks/useListSettings.js.map +1 -0
  179. package/dist/admin/pages/Assets/hooks/useListSettings.mjs +29 -0
  180. package/dist/admin/pages/Assets/hooks/useListSettings.mjs.map +1 -0
  181. package/dist/admin/pages/Assets/hooks/useListSort.js +2 -1
  182. package/dist/admin/pages/Assets/hooks/useListSort.js.map +1 -1
  183. package/dist/admin/pages/Assets/hooks/useListSort.mjs +3 -2
  184. package/dist/admin/pages/Assets/hooks/useListSort.mjs.map +1 -1
  185. package/dist/admin/services/api.js +92 -7
  186. package/dist/admin/services/api.js.map +1 -1
  187. package/dist/admin/services/api.mjs +91 -9
  188. package/dist/admin/services/api.mjs.map +1 -1
  189. package/dist/admin/src/components/AssetPickerDialog/AssetPickerDialog.d.ts +19 -0
  190. package/dist/admin/src/components/AssetPickerDialog/FolderBreadcrumbs.d.ts +10 -0
  191. package/dist/admin/src/components/AssetPickerDialog/MediaLibraryPickerDialog.d.ts +19 -0
  192. package/dist/admin/src/components/AssetPickerDialog/PickerSelectionProvider.d.ts +28 -0
  193. package/dist/admin/src/components/AssetPickerDialog/SortableSelection.d.ts +12 -0
  194. package/dist/admin/src/components/AssetPickerDialog/pickerSelection.d.ts +26 -0
  195. package/dist/admin/src/components/Drawer.d.ts +8 -0
  196. package/dist/admin/src/components/EditorFileDropZone/EditorFileDropZone.d.ts +21 -0
  197. package/dist/admin/src/components/MediaLibraryInput/AddAssetMenu.d.ts +7 -1
  198. package/dist/admin/src/components/MediaLibraryInput/AssetCard.d.ts +25 -0
  199. package/dist/admin/src/components/MediaLibraryInput/AssetCarousel.d.ts +16 -0
  200. package/dist/admin/src/components/MediaLibraryInput/AssetDropZone.d.ts +11 -3
  201. package/dist/admin/src/components/MediaLibraryInput/AssetPreview.d.ts +17 -0
  202. package/dist/admin/src/components/MediaLibraryInput/AssetRow.d.ts +13 -3
  203. package/dist/admin/src/components/MediaLibraryInput/FieldControls.d.ts +19 -0
  204. package/dist/admin/src/components/MediaLibraryInput/MediaLibraryInput.d.ts +3 -1
  205. package/dist/admin/src/components/MediaLibraryInput/UploadProgressBar.d.ts +7 -0
  206. package/dist/admin/src/components/MediaLibraryInput/openAssetDetails.d.ts +10 -0
  207. package/dist/admin/src/components/MediaLibraryInput/useFieldUploads.d.ts +31 -0
  208. package/dist/admin/src/hooks/useMediaLibraryPermissions.d.ts +2 -0
  209. package/dist/admin/src/pages/Assets/components/AssetDetails/AssetDetailsDrawer.d.ts +41 -5
  210. package/dist/admin/src/pages/Assets/components/AssetsGrid.d.ts +3 -1
  211. package/dist/admin/src/pages/Assets/components/AssetsSearchInput.d.ts +11 -1
  212. package/dist/admin/src/pages/Assets/components/AssetsView.d.ts +29 -0
  213. package/dist/admin/src/pages/Assets/components/Dnd/ReorderHandle.d.ts +12 -0
  214. package/dist/admin/src/pages/Assets/components/Dnd/assetSortable.d.ts +37 -0
  215. package/dist/admin/src/pages/Assets/components/Dnd/dndIds.d.ts +5 -0
  216. package/dist/admin/src/pages/Assets/components/Dnd/useAssetDnd.d.ts +23 -2
  217. package/dist/admin/src/pages/Assets/components/FolderTree/FolderTree.d.ts +1 -0
  218. package/dist/admin/src/pages/Assets/components/FolderTree/collapsedBranch.d.ts +21 -0
  219. package/dist/admin/src/pages/Assets/components/ViewToggle.d.ts +8 -0
  220. package/dist/admin/src/pages/Assets/hooks/useAssetSelection.d.ts +26 -0
  221. package/dist/admin/src/pages/Assets/hooks/useAssetsList.d.ts +30 -0
  222. package/dist/admin/src/pages/Assets/hooks/useIsAssetDetailsOpen.d.ts +2 -6
  223. package/dist/admin/src/pages/Assets/hooks/useListQueryParams.d.ts +27 -0
  224. package/dist/admin/src/pages/Assets/hooks/useListSettings.d.ts +29 -0
  225. package/dist/admin/src/services/api.d.ts +24 -1
  226. package/dist/admin/src/store/uploadProgress.d.ts +14 -1
  227. package/dist/admin/src/utils/findFolderPath.d.ts +6 -0
  228. package/dist/admin/src/utils/isAllowedAssetType.d.ts +14 -0
  229. package/dist/admin/store/uploadProgress.js +30 -3
  230. package/dist/admin/store/uploadProgress.js.map +1 -1
  231. package/dist/admin/store/uploadProgress.mjs +29 -4
  232. package/dist/admin/store/uploadProgress.mjs.map +1 -1
  233. package/dist/admin/translations/en.json.js +24 -0
  234. package/dist/admin/translations/en.json.js.map +1 -1
  235. package/dist/admin/translations/en.json.mjs +24 -0
  236. package/dist/admin/translations/en.json.mjs.map +1 -1
  237. package/dist/admin/utils/findFolderPath.js +26 -0
  238. package/dist/admin/utils/findFolderPath.js.map +1 -0
  239. package/dist/admin/utils/findFolderPath.mjs +24 -0
  240. package/dist/admin/utils/findFolderPath.mjs.map +1 -0
  241. package/dist/admin/utils/isAllowedAssetType.js +33 -0
  242. package/dist/admin/utils/isAllowedAssetType.js.map +1 -0
  243. package/dist/admin/utils/isAllowedAssetType.mjs +31 -0
  244. package/dist/admin/utils/isAllowedAssetType.mjs.map +1 -0
  245. package/dist/server/audit-logs.js +264 -0
  246. package/dist/server/audit-logs.js.map +1 -0
  247. package/dist/server/audit-logs.mjs +255 -0
  248. package/dist/server/audit-logs.mjs.map +1 -0
  249. package/dist/server/bootstrap.js +4 -0
  250. package/dist/server/bootstrap.js.map +1 -1
  251. package/dist/server/bootstrap.mjs +4 -0
  252. package/dist/server/bootstrap.mjs.map +1 -1
  253. package/dist/server/controllers/admin-folder-file.js +23 -1
  254. package/dist/server/controllers/admin-folder-file.js.map +1 -1
  255. package/dist/server/controllers/admin-folder-file.mjs +23 -1
  256. package/dist/server/controllers/admin-folder-file.mjs.map +1 -1
  257. package/dist/server/controllers/admin-settings.js +5 -1
  258. package/dist/server/controllers/admin-settings.js.map +1 -1
  259. package/dist/server/controllers/admin-settings.mjs +5 -1
  260. package/dist/server/controllers/admin-settings.mjs.map +1 -1
  261. package/dist/server/services/folder.js +48 -1
  262. package/dist/server/services/folder.js.map +1 -1
  263. package/dist/server/services/folder.mjs +48 -1
  264. package/dist/server/services/folder.mjs.map +1 -1
  265. package/dist/server/services/image-manipulation.js +14 -7
  266. package/dist/server/services/image-manipulation.js.map +1 -1
  267. package/dist/server/services/image-manipulation.mjs +14 -7
  268. package/dist/server/services/image-manipulation.mjs.map +1 -1
  269. package/dist/server/services/upload.js +100 -16
  270. package/dist/server/services/upload.js.map +1 -1
  271. package/dist/server/services/upload.mjs +102 -18
  272. package/dist/server/services/upload.mjs.map +1 -1
  273. package/dist/server/src/audit-logs.d.ts +142 -0
  274. package/dist/server/src/audit-logs.d.ts.map +1 -0
  275. package/dist/server/src/bootstrap.d.ts.map +1 -1
  276. package/dist/server/src/controllers/admin-folder-file.d.ts.map +1 -1
  277. package/dist/server/src/controllers/admin-settings.d.ts.map +1 -1
  278. package/dist/server/src/index.d.ts +4 -4
  279. package/dist/server/src/index.d.ts.map +1 -1
  280. package/dist/server/src/mcp/ambient-instance.d.ts.map +1 -1
  281. package/dist/server/src/services/extensions/utils.d.ts +11 -11
  282. package/dist/server/src/services/folder.d.ts.map +1 -1
  283. package/dist/server/src/services/image-manipulation.d.ts +4 -4
  284. package/dist/server/src/services/image-manipulation.d.ts.map +1 -1
  285. package/dist/server/src/services/index.d.ts +4 -4
  286. package/dist/server/src/services/index.d.ts.map +1 -1
  287. package/dist/server/src/services/upload.d.ts.map +1 -1
  288. package/dist/server/src/types.d.ts +63 -12
  289. package/dist/server/src/types.d.ts.map +1 -1
  290. package/package.json +11 -16
  291. package/dist/admin/components/MediaLibraryInput/NoLibraryAccessDialog.js +0 -45
  292. package/dist/admin/components/MediaLibraryInput/NoLibraryAccessDialog.js.map +0 -1
  293. package/dist/admin/components/MediaLibraryInput/NoLibraryAccessDialog.mjs +0 -43
  294. package/dist/admin/components/MediaLibraryInput/NoLibraryAccessDialog.mjs.map +0 -1
  295. package/dist/admin/src/components/MediaLibraryInput/NoLibraryAccessDialog.d.ts +0 -10
@@ -0,0 +1,40 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var designSystem = require('@strapi/design-system');
5
+ var icons = require('@strapi/icons');
6
+ var reactIntl = require('react-intl');
7
+ var translations = require('../../../../utils/translations.js');
8
+ var assetSortable = require('./assetSortable.js');
9
+
10
+ /**
11
+ * The keyboard path into reordering (Space picks the item up, arrows move it,
12
+ * Space drops it). Pointer drags start from anywhere on the item, this grip
13
+ * included.
14
+ */ const ReorderHandle = ({ name, handle })=>{
15
+ const { formatMessage } = reactIntl.useIntl();
16
+ const { ref, onKeyDown, ...attributes } = handle;
17
+ return /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
18
+ ...attributes,
19
+ ref: ref,
20
+ size: "XS",
21
+ variant: "ghost",
22
+ withTooltip: false,
23
+ label: formatMessage({
24
+ id: translations.getTranslationKey('list.item.reorder'),
25
+ defaultMessage: 'Reorder {name}'
26
+ }, {
27
+ name
28
+ }),
29
+ ...assetSortable.REORDER_HANDLE_PROPS,
30
+ // Not stopped: once a drag starts, the arrows and the drop key are read on
31
+ // the document. The item ignores keys from here (`isFromReorderHandle`).
32
+ onKeyDown: onKeyDown,
33
+ // A click on the grip is not a click on the item.
34
+ onClick: (event)=>event.stopPropagation(),
35
+ children: /*#__PURE__*/ jsxRuntime.jsx(icons.Drag, {})
36
+ });
37
+ };
38
+
39
+ exports.ReorderHandle = ReorderHandle;
40
+ //# sourceMappingURL=ReorderHandle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReorderHandle.js","sources":["../../../../../../admin/src/pages/Assets/components/Dnd/ReorderHandle.tsx"],"sourcesContent":["import { IconButton } from '@strapi/design-system';\nimport { Drag } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { getTranslationKey } from '../../../../utils/translations';\n\nimport { REORDER_HANDLE_PROPS, type AssetSortable } from './assetSortable';\n\ninterface ReorderHandleProps {\n name: string;\n handle: AssetSortable['handle'];\n}\n\n/**\n * The keyboard path into reordering (Space picks the item up, arrows move it,\n * Space drops it). Pointer drags start from anywhere on the item, this grip\n * included.\n */\nexport const ReorderHandle = ({ name, handle }: ReorderHandleProps) => {\n const { formatMessage } = useIntl();\n const { ref, onKeyDown, ...attributes } = handle;\n\n return (\n <IconButton\n {...attributes}\n ref={ref}\n size=\"XS\"\n variant=\"ghost\"\n withTooltip={false}\n label={formatMessage(\n { id: getTranslationKey('list.item.reorder'), defaultMessage: 'Reorder {name}' },\n { name }\n )}\n {...REORDER_HANDLE_PROPS}\n // Not stopped: once a drag starts, the arrows and the drop key are read on\n // the document. The item ignores keys from here (`isFromReorderHandle`).\n onKeyDown={onKeyDown}\n // A click on the grip is not a click on the item.\n onClick={(event) => event.stopPropagation()}\n >\n <Drag />\n </IconButton>\n );\n};\n"],"names":["ReorderHandle","name","handle","formatMessage","useIntl","ref","onKeyDown","attributes","_jsx","IconButton","size","variant","withTooltip","label","id","getTranslationKey","defaultMessage","REORDER_HANDLE_PROPS","onClick","event","stopPropagation","Drag"],"mappings":";;;;;;;;;AAaA;;;;UAKaA,aAAAA,GAAgB,CAAC,EAAEC,IAAI,EAAEC,MAAM,EAAsB,GAAA;IAChE,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAEC,GAAG,EAAEC,SAAS,EAAE,GAAGC,YAAY,GAAGL,MAAAA;AAE1C,IAAA,qBACEM,cAAA,CAACC,uBAAAA,EAAAA;AACE,QAAA,GAAGF,UAAU;QACdF,GAAAA,EAAKA,GAAAA;QACLK,IAAAA,EAAK,IAAA;QACLC,OAAAA,EAAQ,OAAA;QACRC,WAAAA,EAAa,KAAA;AACbC,QAAAA,KAAAA,EAAOV,aAAAA,CACL;AAAEW,YAAAA,EAAAA,EAAIC,8BAAAA,CAAkB,mBAAA,CAAA;YAAsBC,cAAAA,EAAgB;SAAiB,EAC/E;AAAEf,YAAAA;AAAK,SAAA,CAAA;AAER,QAAA,GAAGgB,kCAAoB;;;QAGxBX,SAAAA,EAAWA,SAAAA;;QAEXY,OAAAA,EAAS,CAACC,KAAAA,GAAUA,KAAAA,CAAMC,eAAe,EAAA;AAEzC,QAAA,QAAA,gBAAAZ,cAAA,CAACa,UAAAA,EAAAA,EAAAA;;AAGP;;;;"}
@@ -0,0 +1,38 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { IconButton } from '@strapi/design-system';
3
+ import { Drag } from '@strapi/icons';
4
+ import { useIntl } from 'react-intl';
5
+ import { getTranslationKey } from '../../../../utils/translations.mjs';
6
+ import { REORDER_HANDLE_PROPS } from './assetSortable.mjs';
7
+
8
+ /**
9
+ * The keyboard path into reordering (Space picks the item up, arrows move it,
10
+ * Space drops it). Pointer drags start from anywhere on the item, this grip
11
+ * included.
12
+ */ const ReorderHandle = ({ name, handle })=>{
13
+ const { formatMessage } = useIntl();
14
+ const { ref, onKeyDown, ...attributes } = handle;
15
+ return /*#__PURE__*/ jsx(IconButton, {
16
+ ...attributes,
17
+ ref: ref,
18
+ size: "XS",
19
+ variant: "ghost",
20
+ withTooltip: false,
21
+ label: formatMessage({
22
+ id: getTranslationKey('list.item.reorder'),
23
+ defaultMessage: 'Reorder {name}'
24
+ }, {
25
+ name
26
+ }),
27
+ ...REORDER_HANDLE_PROPS,
28
+ // Not stopped: once a drag starts, the arrows and the drop key are read on
29
+ // the document. The item ignores keys from here (`isFromReorderHandle`).
30
+ onKeyDown: onKeyDown,
31
+ // A click on the grip is not a click on the item.
32
+ onClick: (event)=>event.stopPropagation(),
33
+ children: /*#__PURE__*/ jsx(Drag, {})
34
+ });
35
+ };
36
+
37
+ export { ReorderHandle };
38
+ //# sourceMappingURL=ReorderHandle.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReorderHandle.mjs","sources":["../../../../../../admin/src/pages/Assets/components/Dnd/ReorderHandle.tsx"],"sourcesContent":["import { IconButton } from '@strapi/design-system';\nimport { Drag } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { getTranslationKey } from '../../../../utils/translations';\n\nimport { REORDER_HANDLE_PROPS, type AssetSortable } from './assetSortable';\n\ninterface ReorderHandleProps {\n name: string;\n handle: AssetSortable['handle'];\n}\n\n/**\n * The keyboard path into reordering (Space picks the item up, arrows move it,\n * Space drops it). Pointer drags start from anywhere on the item, this grip\n * included.\n */\nexport const ReorderHandle = ({ name, handle }: ReorderHandleProps) => {\n const { formatMessage } = useIntl();\n const { ref, onKeyDown, ...attributes } = handle;\n\n return (\n <IconButton\n {...attributes}\n ref={ref}\n size=\"XS\"\n variant=\"ghost\"\n withTooltip={false}\n label={formatMessage(\n { id: getTranslationKey('list.item.reorder'), defaultMessage: 'Reorder {name}' },\n { name }\n )}\n {...REORDER_HANDLE_PROPS}\n // Not stopped: once a drag starts, the arrows and the drop key are read on\n // the document. The item ignores keys from here (`isFromReorderHandle`).\n onKeyDown={onKeyDown}\n // A click on the grip is not a click on the item.\n onClick={(event) => event.stopPropagation()}\n >\n <Drag />\n </IconButton>\n );\n};\n"],"names":["ReorderHandle","name","handle","formatMessage","useIntl","ref","onKeyDown","attributes","_jsx","IconButton","size","variant","withTooltip","label","id","getTranslationKey","defaultMessage","REORDER_HANDLE_PROPS","onClick","event","stopPropagation","Drag"],"mappings":";;;;;;;AAaA;;;;UAKaA,aAAAA,GAAgB,CAAC,EAAEC,IAAI,EAAEC,MAAM,EAAsB,GAAA;IAChE,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAEC,GAAG,EAAEC,SAAS,EAAE,GAAGC,YAAY,GAAGL,MAAAA;AAE1C,IAAA,qBACEM,GAAA,CAACC,UAAAA,EAAAA;AACE,QAAA,GAAGF,UAAU;QACdF,GAAAA,EAAKA,GAAAA;QACLK,IAAAA,EAAK,IAAA;QACLC,OAAAA,EAAQ,OAAA;QACRC,WAAAA,EAAa,KAAA;AACbC,QAAAA,KAAAA,EAAOV,aAAAA,CACL;AAAEW,YAAAA,EAAAA,EAAIC,iBAAAA,CAAkB,mBAAA,CAAA;YAAsBC,cAAAA,EAAgB;SAAiB,EAC/E;AAAEf,YAAAA;AAAK,SAAA,CAAA;AAER,QAAA,GAAGgB,oBAAoB;;;QAGxBX,SAAAA,EAAWA,SAAAA;;QAEXY,OAAAA,EAAS,CAACC,KAAAA,GAAUA,KAAAA,CAAMC,eAAe,EAAA;AAEzC,QAAA,QAAA,gBAAAZ,GAAA,CAACa,IAAAA,EAAAA,EAAAA;;AAGP;;;;"}
@@ -0,0 +1,29 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+
5
+ const useNotSortable = ()=>null;
6
+ /**
7
+ * Holds the hook that makes an asset sortable, rather than a value: the hook
8
+ * needs each item's id. A given subtree always gets the same hook, so calling
9
+ * it from `useAssetSortable` keeps the rules of hooks.
10
+ */ const AssetSortableContext = React.createContext(useNotSortable);
11
+ const useAssetSortable = (assetId)=>{
12
+ const useSortableAsset = React.useContext(AssetSortableContext);
13
+ return useSortableAsset(assetId);
14
+ };
15
+ const REORDER_HANDLE_ATTRIBUTE = 'data-reorder-handle';
16
+ /** Marks the reorder grip, so the item can tell its keys apart. */ const REORDER_HANDLE_PROPS = {
17
+ [REORDER_HANDLE_ATTRIBUTE]: ''
18
+ };
19
+ /**
20
+ * Keys pressed on the grip, including the arrows and the drop key mid-drag,
21
+ * belong to reordering. The item must not also read them as its own
22
+ * Enter/Space.
23
+ */ const isFromReorderHandle = (event)=>event.target instanceof Element && event.target.closest(`[${REORDER_HANDLE_ATTRIBUTE}]`) !== null;
24
+
25
+ exports.AssetSortableContext = AssetSortableContext;
26
+ exports.REORDER_HANDLE_PROPS = REORDER_HANDLE_PROPS;
27
+ exports.isFromReorderHandle = isFromReorderHandle;
28
+ exports.useAssetSortable = useAssetSortable;
29
+ //# sourceMappingURL=assetSortable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assetSortable.js","sources":["../../../../../../admin/src/pages/Assets/components/Dnd/assetSortable.ts"],"sourcesContent":["import {\n createContext,\n useContext,\n type CSSProperties,\n type KeyboardEvent,\n type SyntheticEvent,\n} from 'react';\n\nimport type { DraggableAttributes, DraggableSyntheticListeners } from '@dnd-kit/core';\n\n/**\n * What a list item needs to take part in reordering: the whole item drags with\n * the pointer, and a grip button carries the keyboard path (Space to pick up,\n * arrows to move) so it doesn't collide with the item's own Space/click.\n */\nexport interface AssetSortable {\n setNodeRef: (node: HTMLElement | null) => void;\n isDragging: boolean;\n style: CSSProperties;\n /** Pointer activation, for the item itself. */\n listeners: DraggableSyntheticListeners;\n handle: Partial<DraggableAttributes> & {\n ref: (node: HTMLElement | null) => void;\n onKeyDown?: (event: KeyboardEvent) => void;\n };\n}\n\ntype UseAssetSortable = (assetId: number) => AssetSortable | null;\n\nconst useNotSortable: UseAssetSortable = () => null;\n\n/**\n * Holds the hook that makes an asset sortable, rather than a value: the hook\n * needs each item's id. A given subtree always gets the same hook, so calling\n * it from `useAssetSortable` keeps the rules of hooks.\n */\nexport const AssetSortableContext = createContext<UseAssetSortable>(useNotSortable);\n\nexport const useAssetSortable = (assetId: number) => {\n const useSortableAsset = useContext(AssetSortableContext);\n\n return useSortableAsset(assetId);\n};\n\nconst REORDER_HANDLE_ATTRIBUTE = 'data-reorder-handle';\n\n/** Marks the reorder grip, so the item can tell its keys apart. */\nexport const REORDER_HANDLE_PROPS = { [REORDER_HANDLE_ATTRIBUTE]: '' };\n\n/**\n * Keys pressed on the grip, including the arrows and the drop key mid-drag,\n * belong to reordering. The item must not also read them as its own\n * Enter/Space.\n */\nexport const isFromReorderHandle = (event: SyntheticEvent) =>\n event.target instanceof Element && event.target.closest(`[${REORDER_HANDLE_ATTRIBUTE}]`) !== null;\n"],"names":["useNotSortable","AssetSortableContext","createContext","useAssetSortable","assetId","useSortableAsset","useContext","REORDER_HANDLE_ATTRIBUTE","REORDER_HANDLE_PROPS","isFromReorderHandle","event","target","Element","closest"],"mappings":";;;;AA6BA,MAAMA,iBAAmC,IAAM,IAAA;AAE/C;;;;AAIC,IACM,MAAMC,oBAAAA,GAAuBC,mBAAAA,CAAgCF,cAAAA;AAE7D,MAAMG,mBAAmB,CAACC,OAAAA,GAAAA;AAC/B,IAAA,MAAMC,mBAAmBC,gBAAAA,CAAWL,oBAAAA,CAAAA;AAEpC,IAAA,OAAOI,gBAAAA,CAAiBD,OAAAA,CAAAA;AAC1B;AAEA,MAAMG,wBAAAA,GAA2B,qBAAA;AAEjC,oEACO,MAAMC,oBAAAA,GAAuB;AAAE,IAAA,CAACD,2BAA2B;AAAG;AAErE;;;;UAKaE,mBAAAA,GAAsB,CAACC,QAClCA,KAAAA,CAAMC,MAAM,YAAYC,OAAAA,IAAWF,KAAAA,CAAMC,MAAM,CAACE,OAAO,CAAC,CAAC,CAAC,EAAEN,wBAAAA,CAAyB,CAAC,CAAC,CAAA,KAAM;;;;;;;"}
@@ -0,0 +1,24 @@
1
+ import { createContext, useContext } from 'react';
2
+
3
+ const useNotSortable = ()=>null;
4
+ /**
5
+ * Holds the hook that makes an asset sortable, rather than a value: the hook
6
+ * needs each item's id. A given subtree always gets the same hook, so calling
7
+ * it from `useAssetSortable` keeps the rules of hooks.
8
+ */ const AssetSortableContext = createContext(useNotSortable);
9
+ const useAssetSortable = (assetId)=>{
10
+ const useSortableAsset = useContext(AssetSortableContext);
11
+ return useSortableAsset(assetId);
12
+ };
13
+ const REORDER_HANDLE_ATTRIBUTE = 'data-reorder-handle';
14
+ /** Marks the reorder grip, so the item can tell its keys apart. */ const REORDER_HANDLE_PROPS = {
15
+ [REORDER_HANDLE_ATTRIBUTE]: ''
16
+ };
17
+ /**
18
+ * Keys pressed on the grip, including the arrows and the drop key mid-drag,
19
+ * belong to reordering. The item must not also read them as its own
20
+ * Enter/Space.
21
+ */ const isFromReorderHandle = (event)=>event.target instanceof Element && event.target.closest(`[${REORDER_HANDLE_ATTRIBUTE}]`) !== null;
22
+
23
+ export { AssetSortableContext, REORDER_HANDLE_PROPS, isFromReorderHandle, useAssetSortable };
24
+ //# sourceMappingURL=assetSortable.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assetSortable.mjs","sources":["../../../../../../admin/src/pages/Assets/components/Dnd/assetSortable.ts"],"sourcesContent":["import {\n createContext,\n useContext,\n type CSSProperties,\n type KeyboardEvent,\n type SyntheticEvent,\n} from 'react';\n\nimport type { DraggableAttributes, DraggableSyntheticListeners } from '@dnd-kit/core';\n\n/**\n * What a list item needs to take part in reordering: the whole item drags with\n * the pointer, and a grip button carries the keyboard path (Space to pick up,\n * arrows to move) so it doesn't collide with the item's own Space/click.\n */\nexport interface AssetSortable {\n setNodeRef: (node: HTMLElement | null) => void;\n isDragging: boolean;\n style: CSSProperties;\n /** Pointer activation, for the item itself. */\n listeners: DraggableSyntheticListeners;\n handle: Partial<DraggableAttributes> & {\n ref: (node: HTMLElement | null) => void;\n onKeyDown?: (event: KeyboardEvent) => void;\n };\n}\n\ntype UseAssetSortable = (assetId: number) => AssetSortable | null;\n\nconst useNotSortable: UseAssetSortable = () => null;\n\n/**\n * Holds the hook that makes an asset sortable, rather than a value: the hook\n * needs each item's id. A given subtree always gets the same hook, so calling\n * it from `useAssetSortable` keeps the rules of hooks.\n */\nexport const AssetSortableContext = createContext<UseAssetSortable>(useNotSortable);\n\nexport const useAssetSortable = (assetId: number) => {\n const useSortableAsset = useContext(AssetSortableContext);\n\n return useSortableAsset(assetId);\n};\n\nconst REORDER_HANDLE_ATTRIBUTE = 'data-reorder-handle';\n\n/** Marks the reorder grip, so the item can tell its keys apart. */\nexport const REORDER_HANDLE_PROPS = { [REORDER_HANDLE_ATTRIBUTE]: '' };\n\n/**\n * Keys pressed on the grip, including the arrows and the drop key mid-drag,\n * belong to reordering. The item must not also read them as its own\n * Enter/Space.\n */\nexport const isFromReorderHandle = (event: SyntheticEvent) =>\n event.target instanceof Element && event.target.closest(`[${REORDER_HANDLE_ATTRIBUTE}]`) !== null;\n"],"names":["useNotSortable","AssetSortableContext","createContext","useAssetSortable","assetId","useSortableAsset","useContext","REORDER_HANDLE_ATTRIBUTE","REORDER_HANDLE_PROPS","isFromReorderHandle","event","target","Element","closest"],"mappings":";;AA6BA,MAAMA,iBAAmC,IAAM,IAAA;AAE/C;;;;AAIC,IACM,MAAMC,oBAAAA,GAAuBC,aAAAA,CAAgCF,cAAAA;AAE7D,MAAMG,mBAAmB,CAACC,OAAAA,GAAAA;AAC/B,IAAA,MAAMC,mBAAmBC,UAAAA,CAAWL,oBAAAA,CAAAA;AAEpC,IAAA,OAAOI,gBAAAA,CAAiBD,OAAAA,CAAAA;AAC1B;AAEA,MAAMG,wBAAAA,GAA2B,qBAAA;AAEjC,oEACO,MAAMC,oBAAAA,GAAuB;AAAE,IAAA,CAACD,2BAA2B;AAAG;AAErE;;;;UAKaE,mBAAAA,GAAsB,CAACC,QAClCA,KAAAA,CAAMC,MAAM,YAAYC,OAAAA,IAAWF,KAAAA,CAAMC,MAAM,CAACE,OAAO,CAAC,CAAC,CAAC,EAAEN,wBAAAA,CAAyB,CAAC,CAAC,CAAA,KAAM;;;;"}
@@ -11,6 +11,10 @@ const parseFolderTargetId = (dndId)=>{
11
11
  return match ? Number(match[1]) : null;
12
12
  };
13
13
  const toFolderTreeTargetId = (id)=>`folder-tree-target:${id}`;
14
+ /**
15
+ * The "N parent folders" row in the sidebar. Only there so hovering it during a
16
+ * drag opens it; no parser recognises it, so a drop on it moves nothing.
17
+ */ const toFolderTreeSummaryId = (rootId)=>`folder-tree-summary:${rootId}`;
14
18
  const HOME_TREE_TARGET_ID = 'folder-tree-target:home';
15
19
  const parseFolderTreeTargetId = (dndId)=>{
16
20
  if (typeof dndId !== 'string') {
@@ -29,5 +33,6 @@ exports.parseFolderTreeTargetId = parseFolderTreeTargetId;
29
33
  exports.toFileDraggableId = toFileDraggableId;
30
34
  exports.toFolderDraggableId = toFolderDraggableId;
31
35
  exports.toFolderTargetId = toFolderTargetId;
36
+ exports.toFolderTreeSummaryId = toFolderTreeSummaryId;
32
37
  exports.toFolderTreeTargetId = toFolderTreeTargetId;
33
38
  //# sourceMappingURL=dndIds.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dndIds.js","sources":["../../../../../../admin/src/pages/Assets/components/Dnd/dndIds.ts"],"sourcesContent":["export const toFileDraggableId = (id: number) => `file:${id}` as const;\n\nexport const toFolderDraggableId = (id: number) => `folder:${id}` as const;\n\nexport const toFolderTargetId = (id: number) => `folder-target:${id}` as const;\n\nexport const parseFolderTargetId = (dndId: string | number): number | null => {\n if (typeof dndId !== 'string') {\n return null;\n }\n\n const match = /^folder-target:(\\d+)$/.exec(dndId);\n return match ? Number(match[1]) : null;\n};\n\nexport const toFolderTreeTargetId = (id: number) => `folder-tree-target:${id}` as const;\n\nexport const HOME_TREE_TARGET_ID = 'folder-tree-target:home' as const;\n\nexport const parseFolderTreeTargetId = (dndId: string | number): number | 'root' | null => {\n if (typeof dndId !== 'string') {\n return null;\n }\n\n if (dndId === HOME_TREE_TARGET_ID) {\n return 'root';\n }\n\n const match = /^folder-tree-target:(\\d+)$/.exec(dndId);\n return match ? Number(match[1]) : null;\n};\n"],"names":["toFileDraggableId","id","toFolderDraggableId","toFolderTargetId","parseFolderTargetId","dndId","match","exec","Number","toFolderTreeTargetId","HOME_TREE_TARGET_ID","parseFolderTreeTargetId"],"mappings":";;AAAO,MAAMA,oBAAoB,CAACC,EAAAA,GAAe,CAAC,KAAK,EAAEA;AAElD,MAAMC,sBAAsB,CAACD,EAAAA,GAAe,CAAC,OAAO,EAAEA;AAEtD,MAAME,mBAAmB,CAACF,EAAAA,GAAe,CAAC,cAAc,EAAEA;AAE1D,MAAMG,sBAAsB,CAACC,KAAAA,GAAAA;IAClC,IAAI,OAAOA,UAAU,QAAA,EAAU;QAC7B,OAAO,IAAA;AACT,IAAA;IAEA,MAAMC,KAAAA,GAAQ,uBAAA,CAAwBC,IAAI,CAACF,KAAAA,CAAAA;AAC3C,IAAA,OAAOC,KAAAA,GAAQE,MAAAA,CAAOF,KAAK,CAAC,EAAE,CAAA,GAAI,IAAA;AACpC;AAEO,MAAMG,uBAAuB,CAACR,EAAAA,GAAe,CAAC,mBAAmB,EAAEA;AAEnE,MAAMS,sBAAsB;AAE5B,MAAMC,0BAA0B,CAACN,KAAAA,GAAAA;IACtC,IAAI,OAAOA,UAAU,QAAA,EAAU;QAC7B,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,IAAIA,UAAUK,mBAAAA,EAAqB;QACjC,OAAO,MAAA;AACT,IAAA;IAEA,MAAMJ,KAAAA,GAAQ,4BAAA,CAA6BC,IAAI,CAACF,KAAAA,CAAAA;AAChD,IAAA,OAAOC,KAAAA,GAAQE,MAAAA,CAAOF,KAAK,CAAC,EAAE,CAAA,GAAI,IAAA;AACpC;;;;;;;;;;"}
1
+ {"version":3,"file":"dndIds.js","sources":["../../../../../../admin/src/pages/Assets/components/Dnd/dndIds.ts"],"sourcesContent":["export const toFileDraggableId = (id: number) => `file:${id}` as const;\n\nexport const toFolderDraggableId = (id: number) => `folder:${id}` as const;\n\nexport const toFolderTargetId = (id: number) => `folder-target:${id}` as const;\n\nexport const parseFolderTargetId = (dndId: string | number): number | null => {\n if (typeof dndId !== 'string') {\n return null;\n }\n\n const match = /^folder-target:(\\d+)$/.exec(dndId);\n return match ? Number(match[1]) : null;\n};\n\nexport const toFolderTreeTargetId = (id: number) => `folder-tree-target:${id}` as const;\n\n/**\n * The \"N parent folders\" row in the sidebar. Only there so hovering it during a\n * drag opens it; no parser recognises it, so a drop on it moves nothing.\n */\nexport const toFolderTreeSummaryId = (rootId: number) => `folder-tree-summary:${rootId}` as const;\n\nexport const HOME_TREE_TARGET_ID = 'folder-tree-target:home' as const;\n\nexport const parseFolderTreeTargetId = (dndId: string | number): number | 'root' | null => {\n if (typeof dndId !== 'string') {\n return null;\n }\n\n if (dndId === HOME_TREE_TARGET_ID) {\n return 'root';\n }\n\n const match = /^folder-tree-target:(\\d+)$/.exec(dndId);\n return match ? Number(match[1]) : null;\n};\n"],"names":["toFileDraggableId","id","toFolderDraggableId","toFolderTargetId","parseFolderTargetId","dndId","match","exec","Number","toFolderTreeTargetId","toFolderTreeSummaryId","rootId","HOME_TREE_TARGET_ID","parseFolderTreeTargetId"],"mappings":";;AAAO,MAAMA,oBAAoB,CAACC,EAAAA,GAAe,CAAC,KAAK,EAAEA;AAElD,MAAMC,sBAAsB,CAACD,EAAAA,GAAe,CAAC,OAAO,EAAEA;AAEtD,MAAME,mBAAmB,CAACF,EAAAA,GAAe,CAAC,cAAc,EAAEA;AAE1D,MAAMG,sBAAsB,CAACC,KAAAA,GAAAA;IAClC,IAAI,OAAOA,UAAU,QAAA,EAAU;QAC7B,OAAO,IAAA;AACT,IAAA;IAEA,MAAMC,KAAAA,GAAQ,uBAAA,CAAwBC,IAAI,CAACF,KAAAA,CAAAA;AAC3C,IAAA,OAAOC,KAAAA,GAAQE,MAAAA,CAAOF,KAAK,CAAC,EAAE,CAAA,GAAI,IAAA;AACpC;AAEO,MAAMG,uBAAuB,CAACR,EAAAA,GAAe,CAAC,mBAAmB,EAAEA;AAE1E;;;UAIaS,qBAAAA,GAAwB,CAACC,SAAmB,CAAC,oBAAoB,EAAEA,MAAAA,CAAAA;AAEzE,MAAMC,sBAAsB;AAE5B,MAAMC,0BAA0B,CAACR,KAAAA,GAAAA;IACtC,IAAI,OAAOA,UAAU,QAAA,EAAU;QAC7B,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,IAAIA,UAAUO,mBAAAA,EAAqB;QACjC,OAAO,MAAA;AACT,IAAA;IAEA,MAAMN,KAAAA,GAAQ,4BAAA,CAA6BC,IAAI,CAACF,KAAAA,CAAAA;AAChD,IAAA,OAAOC,KAAAA,GAAQE,MAAAA,CAAOF,KAAK,CAAC,EAAE,CAAA,GAAI,IAAA;AACpC;;;;;;;;;;;"}
@@ -9,6 +9,10 @@ const parseFolderTargetId = (dndId)=>{
9
9
  return match ? Number(match[1]) : null;
10
10
  };
11
11
  const toFolderTreeTargetId = (id)=>`folder-tree-target:${id}`;
12
+ /**
13
+ * The "N parent folders" row in the sidebar. Only there so hovering it during a
14
+ * drag opens it; no parser recognises it, so a drop on it moves nothing.
15
+ */ const toFolderTreeSummaryId = (rootId)=>`folder-tree-summary:${rootId}`;
12
16
  const HOME_TREE_TARGET_ID = 'folder-tree-target:home';
13
17
  const parseFolderTreeTargetId = (dndId)=>{
14
18
  if (typeof dndId !== 'string') {
@@ -21,5 +25,5 @@ const parseFolderTreeTargetId = (dndId)=>{
21
25
  return match ? Number(match[1]) : null;
22
26
  };
23
27
 
24
- export { HOME_TREE_TARGET_ID, parseFolderTargetId, parseFolderTreeTargetId, toFileDraggableId, toFolderDraggableId, toFolderTargetId, toFolderTreeTargetId };
28
+ export { HOME_TREE_TARGET_ID, parseFolderTargetId, parseFolderTreeTargetId, toFileDraggableId, toFolderDraggableId, toFolderTargetId, toFolderTreeSummaryId, toFolderTreeTargetId };
25
29
  //# sourceMappingURL=dndIds.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"dndIds.mjs","sources":["../../../../../../admin/src/pages/Assets/components/Dnd/dndIds.ts"],"sourcesContent":["export const toFileDraggableId = (id: number) => `file:${id}` as const;\n\nexport const toFolderDraggableId = (id: number) => `folder:${id}` as const;\n\nexport const toFolderTargetId = (id: number) => `folder-target:${id}` as const;\n\nexport const parseFolderTargetId = (dndId: string | number): number | null => {\n if (typeof dndId !== 'string') {\n return null;\n }\n\n const match = /^folder-target:(\\d+)$/.exec(dndId);\n return match ? Number(match[1]) : null;\n};\n\nexport const toFolderTreeTargetId = (id: number) => `folder-tree-target:${id}` as const;\n\nexport const HOME_TREE_TARGET_ID = 'folder-tree-target:home' as const;\n\nexport const parseFolderTreeTargetId = (dndId: string | number): number | 'root' | null => {\n if (typeof dndId !== 'string') {\n return null;\n }\n\n if (dndId === HOME_TREE_TARGET_ID) {\n return 'root';\n }\n\n const match = /^folder-tree-target:(\\d+)$/.exec(dndId);\n return match ? Number(match[1]) : null;\n};\n"],"names":["toFileDraggableId","id","toFolderDraggableId","toFolderTargetId","parseFolderTargetId","dndId","match","exec","Number","toFolderTreeTargetId","HOME_TREE_TARGET_ID","parseFolderTreeTargetId"],"mappings":"AAAO,MAAMA,oBAAoB,CAACC,EAAAA,GAAe,CAAC,KAAK,EAAEA;AAElD,MAAMC,sBAAsB,CAACD,EAAAA,GAAe,CAAC,OAAO,EAAEA;AAEtD,MAAME,mBAAmB,CAACF,EAAAA,GAAe,CAAC,cAAc,EAAEA;AAE1D,MAAMG,sBAAsB,CAACC,KAAAA,GAAAA;IAClC,IAAI,OAAOA,UAAU,QAAA,EAAU;QAC7B,OAAO,IAAA;AACT,IAAA;IAEA,MAAMC,KAAAA,GAAQ,uBAAA,CAAwBC,IAAI,CAACF,KAAAA,CAAAA;AAC3C,IAAA,OAAOC,KAAAA,GAAQE,MAAAA,CAAOF,KAAK,CAAC,EAAE,CAAA,GAAI,IAAA;AACpC;AAEO,MAAMG,uBAAuB,CAACR,EAAAA,GAAe,CAAC,mBAAmB,EAAEA;AAEnE,MAAMS,sBAAsB;AAE5B,MAAMC,0BAA0B,CAACN,KAAAA,GAAAA;IACtC,IAAI,OAAOA,UAAU,QAAA,EAAU;QAC7B,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,IAAIA,UAAUK,mBAAAA,EAAqB;QACjC,OAAO,MAAA;AACT,IAAA;IAEA,MAAMJ,KAAAA,GAAQ,4BAAA,CAA6BC,IAAI,CAACF,KAAAA,CAAAA;AAChD,IAAA,OAAOC,KAAAA,GAAQE,MAAAA,CAAOF,KAAK,CAAC,EAAE,CAAA,GAAI,IAAA;AACpC;;;;"}
1
+ {"version":3,"file":"dndIds.mjs","sources":["../../../../../../admin/src/pages/Assets/components/Dnd/dndIds.ts"],"sourcesContent":["export const toFileDraggableId = (id: number) => `file:${id}` as const;\n\nexport const toFolderDraggableId = (id: number) => `folder:${id}` as const;\n\nexport const toFolderTargetId = (id: number) => `folder-target:${id}` as const;\n\nexport const parseFolderTargetId = (dndId: string | number): number | null => {\n if (typeof dndId !== 'string') {\n return null;\n }\n\n const match = /^folder-target:(\\d+)$/.exec(dndId);\n return match ? Number(match[1]) : null;\n};\n\nexport const toFolderTreeTargetId = (id: number) => `folder-tree-target:${id}` as const;\n\n/**\n * The \"N parent folders\" row in the sidebar. Only there so hovering it during a\n * drag opens it; no parser recognises it, so a drop on it moves nothing.\n */\nexport const toFolderTreeSummaryId = (rootId: number) => `folder-tree-summary:${rootId}` as const;\n\nexport const HOME_TREE_TARGET_ID = 'folder-tree-target:home' as const;\n\nexport const parseFolderTreeTargetId = (dndId: string | number): number | 'root' | null => {\n if (typeof dndId !== 'string') {\n return null;\n }\n\n if (dndId === HOME_TREE_TARGET_ID) {\n return 'root';\n }\n\n const match = /^folder-tree-target:(\\d+)$/.exec(dndId);\n return match ? Number(match[1]) : null;\n};\n"],"names":["toFileDraggableId","id","toFolderDraggableId","toFolderTargetId","parseFolderTargetId","dndId","match","exec","Number","toFolderTreeTargetId","toFolderTreeSummaryId","rootId","HOME_TREE_TARGET_ID","parseFolderTreeTargetId"],"mappings":"AAAO,MAAMA,oBAAoB,CAACC,EAAAA,GAAe,CAAC,KAAK,EAAEA;AAElD,MAAMC,sBAAsB,CAACD,EAAAA,GAAe,CAAC,OAAO,EAAEA;AAEtD,MAAME,mBAAmB,CAACF,EAAAA,GAAe,CAAC,cAAc,EAAEA;AAE1D,MAAMG,sBAAsB,CAACC,KAAAA,GAAAA;IAClC,IAAI,OAAOA,UAAU,QAAA,EAAU;QAC7B,OAAO,IAAA;AACT,IAAA;IAEA,MAAMC,KAAAA,GAAQ,uBAAA,CAAwBC,IAAI,CAACF,KAAAA,CAAAA;AAC3C,IAAA,OAAOC,KAAAA,GAAQE,MAAAA,CAAOF,KAAK,CAAC,EAAE,CAAA,GAAI,IAAA;AACpC;AAEO,MAAMG,uBAAuB,CAACR,EAAAA,GAAe,CAAC,mBAAmB,EAAEA;AAE1E;;;UAIaS,qBAAAA,GAAwB,CAACC,SAAmB,CAAC,oBAAoB,EAAEA,MAAAA,CAAAA;AAEzE,MAAMC,sBAAsB;AAE5B,MAAMC,0BAA0B,CAACR,KAAAA,GAAAA;IACtC,IAAI,OAAOA,UAAU,QAAA,EAAU;QAC7B,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,IAAIA,UAAUO,mBAAAA,EAAqB;QACjC,OAAO,MAAA;AACT,IAAA;IAEA,MAAMN,KAAAA,GAAQ,4BAAA,CAA6BC,IAAI,CAACF,KAAAA,CAAAA;AAChD,IAAA,OAAOC,KAAAA,GAAQE,MAAAA,CAAOF,KAAK,CAAC,EAAE,CAAA,GAAI,IAAA;AACpC;;;;"}
@@ -4,12 +4,23 @@ var React = require('react');
4
4
  var core = require('@dnd-kit/core');
5
5
  var getRelationId = require('../../../../utils/getRelationId.js');
6
6
  var AssetsDndProvider = require('./AssetsDndProvider.js');
7
+ var assetSortable = require('./assetSortable.js');
7
8
  var dndIds = require('./dndIds.js');
8
9
 
9
- const useFileDraggable = (asset)=>{
10
- const { isMovePending } = AssetsDndProvider.useAssetsDndOptional() ?? {
11
- isMovePending: false
10
+ /**
11
+ * Without an `AssetsDndProvider` (the Content Manager asset picker mounts none)
12
+ * items are not draggable: nothing handles the drop. Their drag attributes are
13
+ * withheld too, so they aren't announced as draggable.
14
+ */ const NO_DRAG_ATTRIBUTES = {};
15
+ const withoutDrag = (draggable, isDndEnabled)=>isDndEnabled ? draggable : {
16
+ ...draggable,
17
+ attributes: NO_DRAG_ATTRIBUTES,
18
+ listeners: undefined
12
19
  };
20
+ const useFileDraggable = (asset)=>{
21
+ const dnd = AssetsDndProvider.useAssetsDndOptional();
22
+ const isDndEnabled = dnd !== null;
23
+ const isMovePending = dnd?.isMovePending ?? false;
13
24
  const data = React.useMemo(()=>({
14
25
  kind: 'file',
15
26
  id: asset.id,
@@ -23,20 +34,37 @@ const useFileDraggable = (asset)=>{
23
34
  const draggable = core.useDraggable({
24
35
  id: dndIds.toFileDraggableId(asset.id),
25
36
  data,
26
- disabled: isMovePending
37
+ disabled: !isDndEnabled || isMovePending
27
38
  });
39
+ const sortable = assetSortable.useAssetSortable(asset.id);
40
+ // In a reorderable list (the picker's Selected tab) dragging reorders
41
+ // instead of moving between folders: the item takes the sortable's node,
42
+ // pointer listeners and transform, and exposes a grip for the keyboard.
43
+ if (sortable) {
44
+ return {
45
+ ...withoutDrag(draggable, false),
46
+ setNodeRef: sortable.setNodeRef,
47
+ isDragging: sortable.isDragging,
48
+ listeners: sortable.listeners,
49
+ dragStyle: sortable.style,
50
+ dragHandle: sortable.handle,
51
+ dragData: data
52
+ };
53
+ }
28
54
  // `dragData` is re-exposed (like `useFolderDraggableDroppable` does) so the
29
55
  // row's actions menu can hand the move dialog the asset's real folder.
30
56
  return {
31
- ...draggable,
57
+ ...withoutDrag(draggable, isDndEnabled),
58
+ dragStyle: undefined,
59
+ dragHandle: undefined,
32
60
  dragData: data
33
61
  };
34
62
  };
35
63
  const useFolderDraggableDroppable = (folder)=>{
36
- const { isMovePending, isValidDropTarget } = AssetsDndProvider.useAssetsDndOptional() ?? {
37
- isMovePending: false,
38
- isValidDropTarget: ()=>false
39
- };
64
+ const dnd = AssetsDndProvider.useAssetsDndOptional();
65
+ const isDndEnabled = dnd !== null;
66
+ const isMovePending = dnd?.isMovePending ?? false;
67
+ const isValidDropTarget = dnd?.isValidDropTarget ?? (()=>false);
40
68
  const { active } = core.useDndContext();
41
69
  const parentId = getRelationId.getRelationId(folder.parent);
42
70
  const dragData = React.useMemo(()=>({
@@ -57,15 +85,15 @@ const useFolderDraggableDroppable = (folder)=>{
57
85
  folder.id,
58
86
  folder.name
59
87
  ]);
60
- const draggable = core.useDraggable({
88
+ const draggable = withoutDrag(core.useDraggable({
61
89
  id: dndIds.toFolderDraggableId(folder.id),
62
90
  data: dragData,
63
- disabled: isMovePending
64
- });
91
+ disabled: !isDndEnabled || isMovePending
92
+ }), isDndEnabled);
65
93
  const droppable = core.useDroppable({
66
94
  id: dndIds.toFolderTargetId(folder.id),
67
95
  data: dropData,
68
- disabled: isMovePending
96
+ disabled: !isDndEnabled || isMovePending
69
97
  });
70
98
  const isValidTarget = isValidDropTarget(folder.id);
71
99
  const isOver = droppable.isOver;
@@ -1 +1 @@
1
- {"version":3,"file":"useAssetDnd.js","sources":["../../../../../../admin/src/pages/Assets/components/Dnd/useAssetDnd.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport { useDndContext, useDraggable, useDroppable } from '@dnd-kit/core';\n\nimport { getRelationId } from '../../../../utils/getRelationId';\n\nimport { useAssetsDndOptional } from './AssetsDndProvider';\nimport { toFileDraggableId, toFolderDraggableId, toFolderTargetId } from './dndIds';\n\nimport type { DragFileData, DragFolderData, FolderTargetData } from '../../../../types/dnd';\n\nexport const useFileDraggable = (asset: {\n id: number;\n name: string;\n folder?: number | string | { id?: number } | null;\n}) => {\n const { isMovePending } = useAssetsDndOptional() ?? { isMovePending: false };\n\n const data = useMemo<DragFileData>(\n () => ({\n kind: 'file',\n id: asset.id,\n name: asset.name,\n folderId: getRelationId(asset.folder),\n }),\n [asset.folder, asset.id, asset.name]\n );\n\n const draggable = useDraggable({\n id: toFileDraggableId(asset.id),\n data,\n disabled: isMovePending,\n });\n\n // `dragData` is re-exposed (like `useFolderDraggableDroppable` does) so the\n // row's actions menu can hand the move dialog the asset's real folder.\n return { ...draggable, dragData: data };\n};\n\nexport const useFolderDraggableDroppable = (folder: {\n id: number;\n name: string;\n parent?: number | null | { id?: number };\n}) => {\n const { isMovePending, isValidDropTarget } = useAssetsDndOptional() ?? {\n isMovePending: false,\n isValidDropTarget: () => false,\n };\n const { active } = useDndContext();\n\n const parentId = getRelationId(folder.parent);\n\n const dragData = useMemo<DragFolderData>(\n () => ({\n kind: 'folder',\n id: folder.id,\n name: folder.name,\n parentId,\n }),\n [folder.id, folder.name, parentId]\n );\n\n const dropData = useMemo<FolderTargetData>(\n () => ({\n kind: 'folder-target',\n id: folder.id,\n name: folder.name,\n }),\n [folder.id, folder.name]\n );\n\n const draggable = useDraggable({\n id: toFolderDraggableId(folder.id),\n data: dragData,\n disabled: isMovePending,\n });\n\n const droppable = useDroppable({\n id: toFolderTargetId(folder.id),\n data: dropData,\n disabled: isMovePending,\n });\n\n const isValidTarget = isValidDropTarget(folder.id);\n const isOver = droppable.isOver;\n const showValidDropHighlight = isOver && isValidTarget;\n const showInvalidDropCursor = isOver && !isValidTarget && active != null;\n\n return {\n dragData,\n draggable,\n droppable,\n isDragging: draggable.isDragging,\n showValidDropHighlight,\n showInvalidDropCursor,\n };\n};\n"],"names":["useFileDraggable","asset","isMovePending","useAssetsDndOptional","data","useMemo","kind","id","name","folderId","getRelationId","folder","draggable","useDraggable","toFileDraggableId","disabled","dragData","useFolderDraggableDroppable","isValidDropTarget","active","useDndContext","parentId","parent","dropData","toFolderDraggableId","droppable","useDroppable","toFolderTargetId","isValidTarget","isOver","showValidDropHighlight","showInvalidDropCursor","isDragging"],"mappings":"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"}
1
+ {"version":3,"file":"useAssetDnd.js","sources":["../../../../../../admin/src/pages/Assets/components/Dnd/useAssetDnd.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport { useDndContext, useDraggable, useDroppable, type DraggableAttributes } from '@dnd-kit/core';\n\nimport { getRelationId } from '../../../../utils/getRelationId';\n\nimport { useAssetsDndOptional } from './AssetsDndProvider';\nimport { useAssetSortable } from './assetSortable';\nimport { toFileDraggableId, toFolderDraggableId, toFolderTargetId } from './dndIds';\n\nimport type { DragFileData, DragFolderData, FolderTargetData } from '../../../../types/dnd';\n\n/**\n * Without an `AssetsDndProvider` (the Content Manager asset picker mounts none)\n * items are not draggable: nothing handles the drop. Their drag attributes are\n * withheld too, so they aren't announced as draggable.\n */\nconst NO_DRAG_ATTRIBUTES: Partial<DraggableAttributes> = {};\n\nconst withoutDrag = <T extends { attributes: DraggableAttributes }>(\n draggable: T,\n isDndEnabled: boolean\n) =>\n isDndEnabled ? draggable : { ...draggable, attributes: NO_DRAG_ATTRIBUTES, listeners: undefined };\n\nexport const useFileDraggable = (asset: {\n id: number;\n name: string;\n folder?: number | string | { id?: number } | null;\n}) => {\n const dnd = useAssetsDndOptional();\n const isDndEnabled = dnd !== null;\n const isMovePending = dnd?.isMovePending ?? false;\n\n const data = useMemo<DragFileData>(\n () => ({\n kind: 'file',\n id: asset.id,\n name: asset.name,\n folderId: getRelationId(asset.folder),\n }),\n [asset.folder, asset.id, asset.name]\n );\n\n const draggable = useDraggable({\n id: toFileDraggableId(asset.id),\n data,\n disabled: !isDndEnabled || isMovePending,\n });\n\n const sortable = useAssetSortable(asset.id);\n\n // In a reorderable list (the picker's Selected tab) dragging reorders\n // instead of moving between folders: the item takes the sortable's node,\n // pointer listeners and transform, and exposes a grip for the keyboard.\n if (sortable) {\n return {\n ...withoutDrag(draggable, false),\n setNodeRef: sortable.setNodeRef,\n isDragging: sortable.isDragging,\n listeners: sortable.listeners,\n dragStyle: sortable.style,\n dragHandle: sortable.handle,\n dragData: data,\n };\n }\n\n // `dragData` is re-exposed (like `useFolderDraggableDroppable` does) so the\n // row's actions menu can hand the move dialog the asset's real folder.\n return {\n ...withoutDrag(draggable, isDndEnabled),\n dragStyle: undefined,\n dragHandle: undefined,\n dragData: data,\n };\n};\n\nexport const useFolderDraggableDroppable = (folder: {\n id: number;\n name: string;\n parent?: number | null | { id?: number };\n}) => {\n const dnd = useAssetsDndOptional();\n const isDndEnabled = dnd !== null;\n const isMovePending = dnd?.isMovePending ?? false;\n const isValidDropTarget = dnd?.isValidDropTarget ?? (() => false);\n const { active } = useDndContext();\n\n const parentId = getRelationId(folder.parent);\n\n const dragData = useMemo<DragFolderData>(\n () => ({\n kind: 'folder',\n id: folder.id,\n name: folder.name,\n parentId,\n }),\n [folder.id, folder.name, parentId]\n );\n\n const dropData = useMemo<FolderTargetData>(\n () => ({\n kind: 'folder-target',\n id: folder.id,\n name: folder.name,\n }),\n [folder.id, folder.name]\n );\n\n const draggable = withoutDrag(\n useDraggable({\n id: toFolderDraggableId(folder.id),\n data: dragData,\n disabled: !isDndEnabled || isMovePending,\n }),\n isDndEnabled\n );\n\n const droppable = useDroppable({\n id: toFolderTargetId(folder.id),\n data: dropData,\n disabled: !isDndEnabled || isMovePending,\n });\n\n const isValidTarget = isValidDropTarget(folder.id);\n const isOver = droppable.isOver;\n const showValidDropHighlight = isOver && isValidTarget;\n const showInvalidDropCursor = isOver && !isValidTarget && active != null;\n\n return {\n dragData,\n draggable,\n droppable,\n isDragging: draggable.isDragging,\n showValidDropHighlight,\n showInvalidDropCursor,\n };\n};\n"],"names":["NO_DRAG_ATTRIBUTES","withoutDrag","draggable","isDndEnabled","attributes","listeners","undefined","useFileDraggable","asset","dnd","useAssetsDndOptional","isMovePending","data","useMemo","kind","id","name","folderId","getRelationId","folder","useDraggable","toFileDraggableId","disabled","sortable","useAssetSortable","setNodeRef","isDragging","dragStyle","style","dragHandle","handle","dragData","useFolderDraggableDroppable","isValidDropTarget","active","useDndContext","parentId","parent","dropData","toFolderDraggableId","droppable","useDroppable","toFolderTargetId","isValidTarget","isOver","showValidDropHighlight","showInvalidDropCursor"],"mappings":"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"}
@@ -2,12 +2,23 @@ import { useMemo } from 'react';
2
2
  import { useDndContext, useDraggable, useDroppable } from '@dnd-kit/core';
3
3
  import { getRelationId } from '../../../../utils/getRelationId.mjs';
4
4
  import { useAssetsDndOptional } from './AssetsDndProvider.mjs';
5
+ import { useAssetSortable } from './assetSortable.mjs';
5
6
  import { toFolderDraggableId, toFolderTargetId, toFileDraggableId } from './dndIds.mjs';
6
7
 
7
- const useFileDraggable = (asset)=>{
8
- const { isMovePending } = useAssetsDndOptional() ?? {
9
- isMovePending: false
8
+ /**
9
+ * Without an `AssetsDndProvider` (the Content Manager asset picker mounts none)
10
+ * items are not draggable: nothing handles the drop. Their drag attributes are
11
+ * withheld too, so they aren't announced as draggable.
12
+ */ const NO_DRAG_ATTRIBUTES = {};
13
+ const withoutDrag = (draggable, isDndEnabled)=>isDndEnabled ? draggable : {
14
+ ...draggable,
15
+ attributes: NO_DRAG_ATTRIBUTES,
16
+ listeners: undefined
10
17
  };
18
+ const useFileDraggable = (asset)=>{
19
+ const dnd = useAssetsDndOptional();
20
+ const isDndEnabled = dnd !== null;
21
+ const isMovePending = dnd?.isMovePending ?? false;
11
22
  const data = useMemo(()=>({
12
23
  kind: 'file',
13
24
  id: asset.id,
@@ -21,20 +32,37 @@ const useFileDraggable = (asset)=>{
21
32
  const draggable = useDraggable({
22
33
  id: toFileDraggableId(asset.id),
23
34
  data,
24
- disabled: isMovePending
35
+ disabled: !isDndEnabled || isMovePending
25
36
  });
37
+ const sortable = useAssetSortable(asset.id);
38
+ // In a reorderable list (the picker's Selected tab) dragging reorders
39
+ // instead of moving between folders: the item takes the sortable's node,
40
+ // pointer listeners and transform, and exposes a grip for the keyboard.
41
+ if (sortable) {
42
+ return {
43
+ ...withoutDrag(draggable, false),
44
+ setNodeRef: sortable.setNodeRef,
45
+ isDragging: sortable.isDragging,
46
+ listeners: sortable.listeners,
47
+ dragStyle: sortable.style,
48
+ dragHandle: sortable.handle,
49
+ dragData: data
50
+ };
51
+ }
26
52
  // `dragData` is re-exposed (like `useFolderDraggableDroppable` does) so the
27
53
  // row's actions menu can hand the move dialog the asset's real folder.
28
54
  return {
29
- ...draggable,
55
+ ...withoutDrag(draggable, isDndEnabled),
56
+ dragStyle: undefined,
57
+ dragHandle: undefined,
30
58
  dragData: data
31
59
  };
32
60
  };
33
61
  const useFolderDraggableDroppable = (folder)=>{
34
- const { isMovePending, isValidDropTarget } = useAssetsDndOptional() ?? {
35
- isMovePending: false,
36
- isValidDropTarget: ()=>false
37
- };
62
+ const dnd = useAssetsDndOptional();
63
+ const isDndEnabled = dnd !== null;
64
+ const isMovePending = dnd?.isMovePending ?? false;
65
+ const isValidDropTarget = dnd?.isValidDropTarget ?? (()=>false);
38
66
  const { active } = useDndContext();
39
67
  const parentId = getRelationId(folder.parent);
40
68
  const dragData = useMemo(()=>({
@@ -55,15 +83,15 @@ const useFolderDraggableDroppable = (folder)=>{
55
83
  folder.id,
56
84
  folder.name
57
85
  ]);
58
- const draggable = useDraggable({
86
+ const draggable = withoutDrag(useDraggable({
59
87
  id: toFolderDraggableId(folder.id),
60
88
  data: dragData,
61
- disabled: isMovePending
62
- });
89
+ disabled: !isDndEnabled || isMovePending
90
+ }), isDndEnabled);
63
91
  const droppable = useDroppable({
64
92
  id: toFolderTargetId(folder.id),
65
93
  data: dropData,
66
- disabled: isMovePending
94
+ disabled: !isDndEnabled || isMovePending
67
95
  });
68
96
  const isValidTarget = isValidDropTarget(folder.id);
69
97
  const isOver = droppable.isOver;
@@ -1 +1 @@
1
- {"version":3,"file":"useAssetDnd.mjs","sources":["../../../../../../admin/src/pages/Assets/components/Dnd/useAssetDnd.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport { useDndContext, useDraggable, useDroppable } from '@dnd-kit/core';\n\nimport { getRelationId } from '../../../../utils/getRelationId';\n\nimport { useAssetsDndOptional } from './AssetsDndProvider';\nimport { toFileDraggableId, toFolderDraggableId, toFolderTargetId } from './dndIds';\n\nimport type { DragFileData, DragFolderData, FolderTargetData } from '../../../../types/dnd';\n\nexport const useFileDraggable = (asset: {\n id: number;\n name: string;\n folder?: number | string | { id?: number } | null;\n}) => {\n const { isMovePending } = useAssetsDndOptional() ?? { isMovePending: false };\n\n const data = useMemo<DragFileData>(\n () => ({\n kind: 'file',\n id: asset.id,\n name: asset.name,\n folderId: getRelationId(asset.folder),\n }),\n [asset.folder, asset.id, asset.name]\n );\n\n const draggable = useDraggable({\n id: toFileDraggableId(asset.id),\n data,\n disabled: isMovePending,\n });\n\n // `dragData` is re-exposed (like `useFolderDraggableDroppable` does) so the\n // row's actions menu can hand the move dialog the asset's real folder.\n return { ...draggable, dragData: data };\n};\n\nexport const useFolderDraggableDroppable = (folder: {\n id: number;\n name: string;\n parent?: number | null | { id?: number };\n}) => {\n const { isMovePending, isValidDropTarget } = useAssetsDndOptional() ?? {\n isMovePending: false,\n isValidDropTarget: () => false,\n };\n const { active } = useDndContext();\n\n const parentId = getRelationId(folder.parent);\n\n const dragData = useMemo<DragFolderData>(\n () => ({\n kind: 'folder',\n id: folder.id,\n name: folder.name,\n parentId,\n }),\n [folder.id, folder.name, parentId]\n );\n\n const dropData = useMemo<FolderTargetData>(\n () => ({\n kind: 'folder-target',\n id: folder.id,\n name: folder.name,\n }),\n [folder.id, folder.name]\n );\n\n const draggable = useDraggable({\n id: toFolderDraggableId(folder.id),\n data: dragData,\n disabled: isMovePending,\n });\n\n const droppable = useDroppable({\n id: toFolderTargetId(folder.id),\n data: dropData,\n disabled: isMovePending,\n });\n\n const isValidTarget = isValidDropTarget(folder.id);\n const isOver = droppable.isOver;\n const showValidDropHighlight = isOver && isValidTarget;\n const showInvalidDropCursor = isOver && !isValidTarget && active != null;\n\n return {\n dragData,\n draggable,\n droppable,\n isDragging: draggable.isDragging,\n showValidDropHighlight,\n showInvalidDropCursor,\n };\n};\n"],"names":["useFileDraggable","asset","isMovePending","useAssetsDndOptional","data","useMemo","kind","id","name","folderId","getRelationId","folder","draggable","useDraggable","toFileDraggableId","disabled","dragData","useFolderDraggableDroppable","isValidDropTarget","active","useDndContext","parentId","parent","dropData","toFolderDraggableId","droppable","useDroppable","toFolderTargetId","isValidTarget","isOver","showValidDropHighlight","showInvalidDropCursor","isDragging"],"mappings":"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"}
1
+ {"version":3,"file":"useAssetDnd.mjs","sources":["../../../../../../admin/src/pages/Assets/components/Dnd/useAssetDnd.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport { useDndContext, useDraggable, useDroppable, type DraggableAttributes } from '@dnd-kit/core';\n\nimport { getRelationId } from '../../../../utils/getRelationId';\n\nimport { useAssetsDndOptional } from './AssetsDndProvider';\nimport { useAssetSortable } from './assetSortable';\nimport { toFileDraggableId, toFolderDraggableId, toFolderTargetId } from './dndIds';\n\nimport type { DragFileData, DragFolderData, FolderTargetData } from '../../../../types/dnd';\n\n/**\n * Without an `AssetsDndProvider` (the Content Manager asset picker mounts none)\n * items are not draggable: nothing handles the drop. Their drag attributes are\n * withheld too, so they aren't announced as draggable.\n */\nconst NO_DRAG_ATTRIBUTES: Partial<DraggableAttributes> = {};\n\nconst withoutDrag = <T extends { attributes: DraggableAttributes }>(\n draggable: T,\n isDndEnabled: boolean\n) =>\n isDndEnabled ? draggable : { ...draggable, attributes: NO_DRAG_ATTRIBUTES, listeners: undefined };\n\nexport const useFileDraggable = (asset: {\n id: number;\n name: string;\n folder?: number | string | { id?: number } | null;\n}) => {\n const dnd = useAssetsDndOptional();\n const isDndEnabled = dnd !== null;\n const isMovePending = dnd?.isMovePending ?? false;\n\n const data = useMemo<DragFileData>(\n () => ({\n kind: 'file',\n id: asset.id,\n name: asset.name,\n folderId: getRelationId(asset.folder),\n }),\n [asset.folder, asset.id, asset.name]\n );\n\n const draggable = useDraggable({\n id: toFileDraggableId(asset.id),\n data,\n disabled: !isDndEnabled || isMovePending,\n });\n\n const sortable = useAssetSortable(asset.id);\n\n // In a reorderable list (the picker's Selected tab) dragging reorders\n // instead of moving between folders: the item takes the sortable's node,\n // pointer listeners and transform, and exposes a grip for the keyboard.\n if (sortable) {\n return {\n ...withoutDrag(draggable, false),\n setNodeRef: sortable.setNodeRef,\n isDragging: sortable.isDragging,\n listeners: sortable.listeners,\n dragStyle: sortable.style,\n dragHandle: sortable.handle,\n dragData: data,\n };\n }\n\n // `dragData` is re-exposed (like `useFolderDraggableDroppable` does) so the\n // row's actions menu can hand the move dialog the asset's real folder.\n return {\n ...withoutDrag(draggable, isDndEnabled),\n dragStyle: undefined,\n dragHandle: undefined,\n dragData: data,\n };\n};\n\nexport const useFolderDraggableDroppable = (folder: {\n id: number;\n name: string;\n parent?: number | null | { id?: number };\n}) => {\n const dnd = useAssetsDndOptional();\n const isDndEnabled = dnd !== null;\n const isMovePending = dnd?.isMovePending ?? false;\n const isValidDropTarget = dnd?.isValidDropTarget ?? (() => false);\n const { active } = useDndContext();\n\n const parentId = getRelationId(folder.parent);\n\n const dragData = useMemo<DragFolderData>(\n () => ({\n kind: 'folder',\n id: folder.id,\n name: folder.name,\n parentId,\n }),\n [folder.id, folder.name, parentId]\n );\n\n const dropData = useMemo<FolderTargetData>(\n () => ({\n kind: 'folder-target',\n id: folder.id,\n name: folder.name,\n }),\n [folder.id, folder.name]\n );\n\n const draggable = withoutDrag(\n useDraggable({\n id: toFolderDraggableId(folder.id),\n data: dragData,\n disabled: !isDndEnabled || isMovePending,\n }),\n isDndEnabled\n );\n\n const droppable = useDroppable({\n id: toFolderTargetId(folder.id),\n data: dropData,\n disabled: !isDndEnabled || isMovePending,\n });\n\n const isValidTarget = isValidDropTarget(folder.id);\n const isOver = droppable.isOver;\n const showValidDropHighlight = isOver && isValidTarget;\n const showInvalidDropCursor = isOver && !isValidTarget && active != null;\n\n return {\n dragData,\n draggable,\n droppable,\n isDragging: draggable.isDragging,\n showValidDropHighlight,\n showInvalidDropCursor,\n };\n};\n"],"names":["NO_DRAG_ATTRIBUTES","withoutDrag","draggable","isDndEnabled","attributes","listeners","undefined","useFileDraggable","asset","dnd","useAssetsDndOptional","isMovePending","data","useMemo","kind","id","name","folderId","getRelationId","folder","useDraggable","toFileDraggableId","disabled","sortable","useAssetSortable","setNodeRef","isDragging","dragStyle","style","dragHandle","handle","dragData","useFolderDraggableDroppable","isValidDropTarget","active","useDndContext","parentId","parent","dropData","toFolderDraggableId","droppable","useDroppable","toFolderTargetId","isValidTarget","isOver","showValidDropHighlight","showInvalidDropCursor"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { useId, useRef, useState } from 'react';
3
- import { Flex, Typography, Popover, Checkbox } from '@strapi/design-system';
3
+ import { Flex, Popover, Typography, Checkbox } from '@strapi/design-system';
4
4
  import { Cross, Check } from '@strapi/icons';
5
5
  import { useIntl } from 'react-intl';
6
6
  import { styled } from 'styled-components';
@@ -8,7 +8,7 @@ import { getTranslationKey } from '../../../utils/translations.mjs';
8
8
  import { TYPE_VALUES, DATE_PRESETS } from '../hooks/useListFilters.mjs';
9
9
  import { parseCalendarDate } from '../utils/buildAssetFilters.mjs';
10
10
  import { DateRangeCalendar } from './DateRangeCalendar.mjs';
11
- import { DATE_FIELD_LABELS, TYPE_LABELS, PRESET_LABELS, FILTER_PANEL_WIDTH } from './FilterMenu.mjs';
11
+ import { FILTER_PANEL_WIDTH, DATE_FIELD_LABELS, TYPE_LABELS, PRESET_LABELS } from './FilterMenu.mjs';
12
12
 
13
13
  /**
14
14
  * Row of applied-filter badges under the toolbar. A badge has three segments —
@@ -1,8 +1,8 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { useState } from 'react';
3
3
  import { useIsMobile } from '@strapi/admin/strapi-admin';
4
- import { Menu, Checkbox, Flex, Box, Badge } from '@strapi/design-system';
5
- import { Filter, ChevronDown, Check } from '@strapi/icons';
4
+ import { Menu, Box, Badge, Checkbox, Flex } from '@strapi/design-system';
5
+ import { ChevronDown, Filter, Check } from '@strapi/icons';
6
6
  import { useIntl } from 'react-intl';
7
7
  import { styled } from 'styled-components';
8
8
  import { useTracking, MEDIA_LIBRARY_LOCATION } from '../../../hooks/useTracking.mjs';