@strapi/upload 5.55.1 → 5.57.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 (304) hide show
  1. package/dist/admin/hooks/useAIMetadataAvailability.js +14 -0
  2. package/dist/admin/hooks/useAIMetadataAvailability.js.map +1 -0
  3. package/dist/admin/hooks/useAIMetadataAvailability.mjs +12 -0
  4. package/dist/admin/hooks/useAIMetadataAvailability.mjs.map +1 -0
  5. package/dist/admin/hooks/useAIMetadataEnabled.js +7 -5
  6. package/dist/admin/hooks/useAIMetadataEnabled.js.map +1 -1
  7. package/dist/admin/hooks/useAIMetadataEnabled.mjs +7 -5
  8. package/dist/admin/hooks/useAIMetadataEnabled.mjs.map +1 -1
  9. package/dist/admin/hooks/useTracking.js +4 -10
  10. package/dist/admin/hooks/useTracking.js.map +1 -1
  11. package/dist/admin/hooks/useTracking.mjs +5 -10
  12. package/dist/admin/hooks/useTracking.mjs.map +1 -1
  13. package/dist/admin/legacy/hooks/useAIMetadataAvailability.js +14 -0
  14. package/dist/admin/legacy/hooks/useAIMetadataAvailability.js.map +1 -0
  15. package/dist/admin/legacy/hooks/useAIMetadataAvailability.mjs +12 -0
  16. package/dist/admin/legacy/hooks/useAIMetadataAvailability.mjs.map +1 -0
  17. package/dist/admin/legacy/hooks/useAIMetadataEnabled.js +23 -0
  18. package/dist/admin/legacy/hooks/useAIMetadataEnabled.js.map +1 -0
  19. package/dist/admin/legacy/hooks/useAIMetadataEnabled.mjs +21 -0
  20. package/dist/admin/legacy/hooks/useAIMetadataEnabled.mjs.map +1 -0
  21. package/dist/admin/legacy/hooks/useTracking.js +5 -3
  22. package/dist/admin/legacy/hooks/useTracking.js.map +1 -1
  23. package/dist/admin/legacy/hooks/useTracking.mjs +5 -3
  24. package/dist/admin/legacy/hooks/useTracking.mjs.map +1 -1
  25. package/dist/admin/legacy/pages/App/ConfigureTheView/ConfigureTheView.js +2 -1
  26. package/dist/admin/legacy/pages/App/ConfigureTheView/ConfigureTheView.js.map +1 -1
  27. package/dist/admin/legacy/pages/App/ConfigureTheView/ConfigureTheView.mjs +2 -1
  28. package/dist/admin/legacy/pages/App/ConfigureTheView/ConfigureTheView.mjs.map +1 -1
  29. package/dist/admin/legacy/pages/App/MediaLibrary.js +6 -5
  30. package/dist/admin/legacy/pages/App/MediaLibrary.js.map +1 -1
  31. package/dist/admin/legacy/pages/App/MediaLibrary.mjs +6 -5
  32. package/dist/admin/legacy/pages/App/MediaLibrary.mjs.map +1 -1
  33. package/dist/admin/pages/Assets/AssetsPage.js +24 -12
  34. package/dist/admin/pages/Assets/AssetsPage.js.map +1 -1
  35. package/dist/admin/pages/Assets/AssetsPage.mjs +25 -13
  36. package/dist/admin/pages/Assets/AssetsPage.mjs.map +1 -1
  37. package/dist/admin/pages/Assets/components/AssetActions.js +326 -0
  38. package/dist/admin/pages/Assets/components/AssetActions.js.map +1 -0
  39. package/dist/admin/pages/Assets/components/AssetActions.mjs +324 -0
  40. package/dist/admin/pages/Assets/components/AssetActions.mjs.map +1 -0
  41. package/dist/admin/pages/Assets/components/AssetActionsMenu.js +28 -309
  42. package/dist/admin/pages/Assets/components/AssetActionsMenu.js.map +1 -1
  43. package/dist/admin/pages/Assets/components/AssetActionsMenu.mjs +31 -312
  44. package/dist/admin/pages/Assets/components/AssetActionsMenu.mjs.map +1 -1
  45. package/dist/admin/pages/Assets/components/AssetContextMenu.js +79 -0
  46. package/dist/admin/pages/Assets/components/AssetContextMenu.js.map +1 -0
  47. package/dist/admin/pages/Assets/components/AssetContextMenu.mjs +77 -0
  48. package/dist/admin/pages/Assets/components/AssetContextMenu.mjs.map +1 -0
  49. package/dist/admin/pages/Assets/components/AssetDetails/AssetCropEditor.js +87 -5
  50. package/dist/admin/pages/Assets/components/AssetDetails/AssetCropEditor.js.map +1 -1
  51. package/dist/admin/pages/Assets/components/AssetDetails/AssetCropEditor.mjs +89 -7
  52. package/dist/admin/pages/Assets/components/AssetDetails/AssetCropEditor.mjs.map +1 -1
  53. package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js +3 -3
  54. package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js.map +1 -1
  55. package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs +3 -3
  56. package/dist/admin/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs.map +1 -1
  57. package/dist/admin/pages/Assets/components/AssetDetails/useCropImg.js +62 -5
  58. package/dist/admin/pages/Assets/components/AssetDetails/useCropImg.js.map +1 -1
  59. package/dist/admin/pages/Assets/components/AssetDetails/useCropImg.mjs +60 -6
  60. package/dist/admin/pages/Assets/components/AssetDetails/useCropImg.mjs.map +1 -1
  61. package/dist/admin/pages/Assets/components/AssetsGrid.js +27 -4
  62. package/dist/admin/pages/Assets/components/AssetsGrid.js.map +1 -1
  63. package/dist/admin/pages/Assets/components/AssetsGrid.mjs +27 -4
  64. package/dist/admin/pages/Assets/components/AssetsGrid.mjs.map +1 -1
  65. package/dist/admin/pages/Assets/components/AssetsTable.js +27 -4
  66. package/dist/admin/pages/Assets/components/AssetsTable.js.map +1 -1
  67. package/dist/admin/pages/Assets/components/AssetsTable.mjs +27 -4
  68. package/dist/admin/pages/Assets/components/AssetsTable.mjs.map +1 -1
  69. package/dist/admin/pages/Assets/components/CursorAnchoredMenu.js +77 -0
  70. package/dist/admin/pages/Assets/components/CursorAnchoredMenu.js.map +1 -0
  71. package/dist/admin/pages/Assets/components/CursorAnchoredMenu.mjs +75 -0
  72. package/dist/admin/pages/Assets/components/CursorAnchoredMenu.mjs.map +1 -0
  73. package/dist/admin/pages/Assets/components/DeleteItemsDialog.js +4 -2
  74. package/dist/admin/pages/Assets/components/DeleteItemsDialog.js.map +1 -1
  75. package/dist/admin/pages/Assets/components/DeleteItemsDialog.mjs +4 -2
  76. package/dist/admin/pages/Assets/components/DeleteItemsDialog.mjs.map +1 -1
  77. package/dist/admin/pages/Assets/components/FolderActions.js +139 -0
  78. package/dist/admin/pages/Assets/components/FolderActions.js.map +1 -0
  79. package/dist/admin/pages/Assets/components/FolderActions.mjs +137 -0
  80. package/dist/admin/pages/Assets/components/FolderActions.mjs.map +1 -0
  81. package/dist/admin/pages/Assets/components/FolderActionsMenu.js +25 -119
  82. package/dist/admin/pages/Assets/components/FolderActionsMenu.js.map +1 -1
  83. package/dist/admin/pages/Assets/components/FolderActionsMenu.mjs +27 -121
  84. package/dist/admin/pages/Assets/components/FolderActionsMenu.mjs.map +1 -1
  85. package/dist/admin/pages/Assets/components/FolderContextMenu.js +67 -0
  86. package/dist/admin/pages/Assets/components/FolderContextMenu.js.map +1 -0
  87. package/dist/admin/pages/Assets/components/FolderContextMenu.mjs +65 -0
  88. package/dist/admin/pages/Assets/components/FolderContextMenu.mjs.map +1 -0
  89. package/dist/admin/pages/Assets/components/FolderTree/FolderTree.js +139 -45
  90. package/dist/admin/pages/Assets/components/FolderTree/FolderTree.js.map +1 -1
  91. package/dist/admin/pages/Assets/components/FolderTree/FolderTree.mjs +140 -47
  92. package/dist/admin/pages/Assets/components/FolderTree/FolderTree.mjs.map +1 -1
  93. package/dist/admin/pages/Assets/components/FolderTree/FolderTreeRowMenu.js +115 -0
  94. package/dist/admin/pages/Assets/components/FolderTree/FolderTreeRowMenu.js.map +1 -0
  95. package/dist/admin/pages/Assets/components/FolderTree/FolderTreeRowMenu.mjs +113 -0
  96. package/dist/admin/pages/Assets/components/FolderTree/FolderTreeRowMenu.mjs.map +1 -0
  97. package/dist/admin/pages/Assets/components/ItemContextMenu.js +125 -0
  98. package/dist/admin/pages/Assets/components/ItemContextMenu.js.map +1 -0
  99. package/dist/admin/pages/Assets/components/ItemContextMenu.mjs +122 -0
  100. package/dist/admin/pages/Assets/components/ItemContextMenu.mjs.map +1 -0
  101. package/dist/admin/pages/Assets/components/MainAreaContextMenu.js +88 -63
  102. package/dist/admin/pages/Assets/components/MainAreaContextMenu.js.map +1 -1
  103. package/dist/admin/pages/Assets/components/MainAreaContextMenu.mjs +88 -63
  104. package/dist/admin/pages/Assets/components/MainAreaContextMenu.mjs.map +1 -1
  105. package/dist/admin/pages/Assets/components/SelectionActions.js +111 -0
  106. package/dist/admin/pages/Assets/components/SelectionActions.js.map +1 -0
  107. package/dist/admin/pages/Assets/components/SelectionActions.mjs +109 -0
  108. package/dist/admin/pages/Assets/components/SelectionActions.mjs.map +1 -0
  109. package/dist/admin/pages/Assets/components/SelectionContextMenu.js +82 -0
  110. package/dist/admin/pages/Assets/components/SelectionContextMenu.js.map +1 -0
  111. package/dist/admin/pages/Assets/components/SelectionContextMenu.mjs +80 -0
  112. package/dist/admin/pages/Assets/components/SelectionContextMenu.mjs.map +1 -0
  113. package/dist/admin/pages/Assets/hooks/useAssetSelection.js +10 -0
  114. package/dist/admin/pages/Assets/hooks/useAssetSelection.js.map +1 -1
  115. package/dist/admin/pages/Assets/hooks/useAssetSelection.mjs +10 -0
  116. package/dist/admin/pages/Assets/hooks/useAssetSelection.mjs.map +1 -1
  117. package/dist/admin/pages/SettingsPage/SettingsPage.js +10 -3
  118. package/dist/admin/pages/SettingsPage/SettingsPage.js.map +1 -1
  119. package/dist/admin/pages/SettingsPage/SettingsPage.mjs +10 -3
  120. package/dist/admin/pages/SettingsPage/SettingsPage.mjs.map +1 -1
  121. package/dist/admin/services/api.js.map +1 -1
  122. package/dist/admin/services/api.mjs.map +1 -1
  123. package/dist/admin/src/hooks/useAIMetadataAvailability.d.ts +5 -0
  124. package/dist/admin/src/hooks/useAIMetadataEnabled.d.ts +5 -3
  125. package/dist/admin/src/hooks/useTracking.d.ts +0 -7
  126. package/dist/admin/src/legacy/components/EditAssetDialog/PreviewBox/PreviewComponents.d.ts +2 -2
  127. package/dist/admin/src/legacy/hooks/useAIMetadataAvailability.d.ts +5 -0
  128. package/dist/admin/src/legacy/hooks/useAIMetadataEnabled.d.ts +12 -0
  129. package/dist/admin/src/legacy/hooks/useSettings.d.ts +1 -0
  130. package/dist/admin/src/pages/Assets/components/ActionsMenuContent.d.ts +2 -2
  131. package/dist/admin/src/pages/Assets/components/AssetActions.d.ts +70 -0
  132. package/dist/admin/src/pages/Assets/components/AssetActionsMenu.d.ts +5 -14
  133. package/dist/admin/src/pages/Assets/components/AssetContextMenu.d.ts +27 -0
  134. package/dist/admin/src/pages/Assets/components/AssetDetails/useCropImg.d.ts +16 -0
  135. package/dist/admin/src/pages/Assets/components/CursorAnchoredMenu.d.ts +32 -0
  136. package/dist/admin/src/pages/Assets/components/FolderActions.d.ts +48 -0
  137. package/dist/admin/src/pages/Assets/components/FolderActionsMenu.d.ts +4 -8
  138. package/dist/admin/src/pages/Assets/components/FolderContextMenu.d.ts +21 -0
  139. package/dist/admin/src/pages/Assets/components/FolderTree/FolderTree.d.ts +5 -1
  140. package/dist/admin/src/pages/Assets/components/FolderTree/FolderTreeRowMenu.d.ts +25 -0
  141. package/dist/admin/src/pages/Assets/components/ItemContextMenu.d.ts +53 -0
  142. package/dist/admin/src/pages/Assets/components/MainAreaContextMenu.d.ts +15 -1
  143. package/dist/admin/src/pages/Assets/components/SelectionActions.d.ts +40 -0
  144. package/dist/admin/src/pages/Assets/components/SelectionContextMenu.d.ts +25 -0
  145. package/dist/admin/src/pages/Assets/hooks/useAssetSelection.d.ts +5 -0
  146. package/dist/admin/src/utils/mediaLibraryVersion.d.ts +18 -0
  147. package/dist/admin/translations/en.json.js +9 -3
  148. package/dist/admin/translations/en.json.js.map +1 -1
  149. package/dist/admin/translations/en.json.mjs +9 -3
  150. package/dist/admin/translations/en.json.mjs.map +1 -1
  151. package/dist/admin/utils/mediaLibraryVersion.js +24 -0
  152. package/dist/admin/utils/mediaLibraryVersion.js.map +1 -0
  153. package/dist/admin/utils/mediaLibraryVersion.mjs +20 -0
  154. package/dist/admin/utils/mediaLibraryVersion.mjs.map +1 -0
  155. package/dist/server/bootstrap.js +7 -0
  156. package/dist/server/bootstrap.js.map +1 -1
  157. package/dist/server/bootstrap.mjs +7 -0
  158. package/dist/server/bootstrap.mjs.map +1 -1
  159. package/dist/server/controllers/admin-file.js +2 -2
  160. package/dist/server/controllers/admin-file.js.map +1 -1
  161. package/dist/server/controllers/admin-file.mjs +2 -2
  162. package/dist/server/controllers/admin-file.mjs.map +1 -1
  163. package/dist/server/controllers/admin-folder-file.js +51 -4
  164. package/dist/server/controllers/admin-folder-file.js.map +1 -1
  165. package/dist/server/controllers/admin-folder-file.mjs +52 -5
  166. package/dist/server/controllers/admin-folder-file.mjs.map +1 -1
  167. package/dist/server/controllers/admin-folder.js +5 -5
  168. package/dist/server/controllers/admin-folder.js.map +1 -1
  169. package/dist/server/controllers/admin-folder.mjs +5 -5
  170. package/dist/server/controllers/admin-folder.mjs.map +1 -1
  171. package/dist/server/controllers/admin-settings.js +2 -1
  172. package/dist/server/controllers/admin-settings.js.map +1 -1
  173. package/dist/server/controllers/admin-settings.mjs +2 -1
  174. package/dist/server/controllers/admin-settings.mjs.map +1 -1
  175. package/dist/server/controllers/content-api.js +30 -7
  176. package/dist/server/controllers/content-api.js.map +1 -1
  177. package/dist/server/controllers/content-api.mjs +30 -7
  178. package/dist/server/controllers/content-api.mjs.map +1 -1
  179. package/dist/server/controllers/validation/admin/folder-file.js +4 -4
  180. package/dist/server/controllers/validation/admin/folder-file.js.map +1 -1
  181. package/dist/server/controllers/validation/admin/folder-file.mjs +2 -2
  182. package/dist/server/controllers/validation/admin/folder-file.mjs.map +1 -1
  183. package/dist/server/controllers/validation/admin/folder.js +3 -4
  184. package/dist/server/controllers/validation/admin/folder.js.map +1 -1
  185. package/dist/server/controllers/validation/admin/folder.mjs +3 -4
  186. package/dist/server/controllers/validation/admin/folder.mjs.map +1 -1
  187. package/dist/server/controllers/validation/admin/upload.js +1 -2
  188. package/dist/server/controllers/validation/admin/upload.js.map +1 -1
  189. package/dist/server/controllers/validation/admin/upload.mjs +1 -2
  190. package/dist/server/controllers/validation/admin/upload.mjs.map +1 -1
  191. package/dist/server/controllers/validation/admin/utils.js +1 -2
  192. package/dist/server/controllers/validation/admin/utils.js.map +1 -1
  193. package/dist/server/controllers/validation/admin/utils.mjs +1 -2
  194. package/dist/server/controllers/validation/admin/utils.mjs.map +1 -1
  195. package/dist/server/errors.js +12 -0
  196. package/dist/server/errors.js.map +1 -0
  197. package/dist/server/errors.mjs +10 -0
  198. package/dist/server/errors.mjs.map +1 -0
  199. package/dist/server/migrations/unsign-richtext-and-blocks-urls.js +2 -2
  200. package/dist/server/migrations/unsign-richtext-and-blocks-urls.js.map +1 -1
  201. package/dist/server/migrations/unsign-richtext-and-blocks-urls.mjs +1 -1
  202. package/dist/server/migrations/unsign-richtext-and-blocks-urls.mjs.map +1 -1
  203. package/dist/server/routes/content-api.js +3 -3
  204. package/dist/server/routes/content-api.js.map +1 -1
  205. package/dist/server/routes/content-api.mjs +3 -3
  206. package/dist/server/routes/content-api.mjs.map +1 -1
  207. package/dist/server/routes/validation/upload.js +8 -0
  208. package/dist/server/routes/validation/upload.js.map +1 -1
  209. package/dist/server/routes/validation/upload.mjs +8 -0
  210. package/dist/server/routes/validation/upload.mjs.map +1 -1
  211. package/dist/server/services/ai-metadata-provider.js +83 -0
  212. package/dist/server/services/ai-metadata-provider.js.map +1 -0
  213. package/dist/server/services/ai-metadata-provider.mjs +61 -0
  214. package/dist/server/services/ai-metadata-provider.mjs.map +1 -0
  215. package/dist/server/services/ai-metadata-strapi-managed.js +48 -0
  216. package/dist/server/services/ai-metadata-strapi-managed.js.map +1 -0
  217. package/dist/server/services/ai-metadata-strapi-managed.mjs +46 -0
  218. package/dist/server/services/ai-metadata-strapi-managed.mjs.map +1 -0
  219. package/dist/server/services/ai-metadata.js +5 -58
  220. package/dist/server/services/ai-metadata.js.map +1 -1
  221. package/dist/server/services/ai-metadata.mjs +6 -39
  222. package/dist/server/services/ai-metadata.mjs.map +1 -1
  223. package/dist/server/services/api-upload-folder.js +3 -3
  224. package/dist/server/services/api-upload-folder.js.map +1 -1
  225. package/dist/server/services/api-upload-folder.mjs +3 -3
  226. package/dist/server/services/api-upload-folder.mjs.map +1 -1
  227. package/dist/server/services/extensions/utils.js +19 -15
  228. package/dist/server/services/extensions/utils.js.map +1 -1
  229. package/dist/server/services/extensions/utils.mjs +19 -15
  230. package/dist/server/services/extensions/utils.mjs.map +1 -1
  231. package/dist/server/services/file.js +2 -2
  232. package/dist/server/services/file.js.map +1 -1
  233. package/dist/server/services/file.mjs +1 -1
  234. package/dist/server/services/file.mjs.map +1 -1
  235. package/dist/server/services/folder.js +9 -6
  236. package/dist/server/services/folder.js.map +1 -1
  237. package/dist/server/services/folder.mjs +9 -6
  238. package/dist/server/services/folder.mjs.map +1 -1
  239. package/dist/server/services/index.js +3 -1
  240. package/dist/server/services/index.js.map +1 -1
  241. package/dist/server/services/index.mjs +3 -1
  242. package/dist/server/services/index.mjs.map +1 -1
  243. package/dist/server/services/metrics.js +1 -1
  244. package/dist/server/services/metrics.js.map +1 -1
  245. package/dist/server/services/metrics.mjs +1 -1
  246. package/dist/server/services/metrics.mjs.map +1 -1
  247. package/dist/server/services/provider.js +3 -4
  248. package/dist/server/services/provider.js.map +1 -1
  249. package/dist/server/services/provider.mjs +3 -4
  250. package/dist/server/services/provider.mjs.map +1 -1
  251. package/dist/server/services/upload.js +5 -6
  252. package/dist/server/services/upload.js.map +1 -1
  253. package/dist/server/services/upload.mjs +4 -5
  254. package/dist/server/services/upload.mjs.map +1 -1
  255. package/dist/server/services/weekly-metrics.js +2 -2
  256. package/dist/server/services/weekly-metrics.js.map +1 -1
  257. package/dist/server/services/weekly-metrics.mjs +2 -2
  258. package/dist/server/services/weekly-metrics.mjs.map +1 -1
  259. package/dist/server/src/bootstrap.d.ts.map +1 -1
  260. package/dist/server/src/controllers/admin-folder-file.d.ts.map +1 -1
  261. package/dist/server/src/controllers/admin-folder.d.ts.map +1 -1
  262. package/dist/server/src/controllers/admin-settings.d.ts.map +1 -1
  263. package/dist/server/src/controllers/content-api.d.ts.map +1 -1
  264. package/dist/server/src/controllers/validation/admin/folder.d.ts.map +1 -1
  265. package/dist/server/src/controllers/validation/admin/upload.d.ts.map +1 -1
  266. package/dist/server/src/controllers/validation/admin/utils.d.ts.map +1 -1
  267. package/dist/server/src/errors.d.ts +6 -0
  268. package/dist/server/src/errors.d.ts.map +1 -0
  269. package/dist/server/src/index.d.ts +6 -1
  270. package/dist/server/src/index.d.ts.map +1 -1
  271. package/dist/server/src/mcp/ambient-instance.d.ts +3 -1
  272. package/dist/server/src/mcp/ambient-instance.d.ts.map +1 -1
  273. package/dist/server/src/routes/validation/upload.d.ts +4 -0
  274. package/dist/server/src/routes/validation/upload.d.ts.map +1 -1
  275. package/dist/server/src/services/ai-metadata-provider.d.ts +26 -0
  276. package/dist/server/src/services/ai-metadata-provider.d.ts.map +1 -0
  277. package/dist/server/src/services/ai-metadata-strapi-managed.d.ts +7 -0
  278. package/dist/server/src/services/ai-metadata-strapi-managed.d.ts.map +1 -0
  279. package/dist/server/src/services/ai-metadata.d.ts.map +1 -1
  280. package/dist/server/src/services/extensions/utils.d.ts +33 -1
  281. package/dist/server/src/services/extensions/utils.d.ts.map +1 -1
  282. package/dist/server/src/services/folder.d.ts +5 -2
  283. package/dist/server/src/services/folder.d.ts.map +1 -1
  284. package/dist/server/src/services/index.d.ts +6 -1
  285. package/dist/server/src/services/index.d.ts.map +1 -1
  286. package/dist/server/src/services/provider.d.ts.map +1 -1
  287. package/dist/server/src/services/upload.d.ts.map +1 -1
  288. package/dist/server/src/utils/images.d.ts +2 -2
  289. package/dist/server/src/utils/images.d.ts.map +1 -1
  290. package/dist/server/src/utils/index.d.ts +2 -0
  291. package/dist/server/src/utils/index.d.ts.map +1 -1
  292. package/dist/server/utils/images.js +6 -7
  293. package/dist/server/utils/images.js.map +1 -1
  294. package/dist/server/utils/images.mjs +6 -7
  295. package/dist/server/utils/images.mjs.map +1 -1
  296. package/dist/server/utils/index.js.map +1 -1
  297. package/dist/server/utils/index.mjs.map +1 -1
  298. package/dist/shared/contracts/settings.d.ts +6 -0
  299. package/package.json +11 -11
  300. package/dist/admin/legacy/hooks/useAiAvailability.js +0 -22
  301. package/dist/admin/legacy/hooks/useAiAvailability.js.map +0 -1
  302. package/dist/admin/legacy/hooks/useAiAvailability.mjs +0 -20
  303. package/dist/admin/legacy/hooks/useAiAvailability.mjs.map +0 -1
  304. package/dist/admin/src/legacy/hooks/useAiAvailability.d.ts +0 -4
@@ -1,142 +1,48 @@
1
- import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
- import { useState, useMemo } from 'react';
3
- import { useClipboard, useNotification } from '@strapi/admin/strapi-admin';
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
4
2
  import { Menu, IconButton } from '@strapi/design-system';
5
- import { More, Link, Pencil, ArrowRight, Trash } from '@strapi/icons';
3
+ import { More } from '@strapi/icons';
6
4
  import { useIntl } from 'react-intl';
7
5
  import { getTranslationKey } from '../../../utils/translations.mjs';
8
- import { useAssetSelection } from '../hooks/useAssetSelection.mjs';
9
- import { folderKey } from '../utils/selection.mjs';
10
6
  import { ActionsMenuContent } from './ActionsMenuContent.mjs';
11
- import { BulkMoveDialog } from './BulkMoveDialog.mjs';
12
- import { DeleteItemsDialog } from './DeleteItemsDialog.mjs';
13
- import { FolderFormDialog } from './FolderFormDialog.mjs';
7
+ import { FolderActions } from './FolderActions.mjs';
14
8
 
15
9
  /**
16
10
  * The "..." menu on a folder row/card. Always acts on that one folder, whatever
17
- * the current multi-selection is (the bulk actions bar is the selection-scoped
18
- * affordance). It reuses the shared move and delete dialogs, which mount only
19
- * while open.
11
+ * the current multi-selection is (the bulk actions bar and the right-click menu
12
+ * are the selection-scoped affordances).
20
13
  *
21
- * A successful move or delete deselects this one folder and leaves the rest of
22
- * the selection intact: they only invalidate RTK tags, so without it a
23
- * `folder:<id>` key for a folder that no longer lives where the selection thinks
24
- * it does would linger. A rename leaves the id valid and the folder in place, so
25
- * it touches the selection not at all.
14
+ * The actions themselves live in `FolderActions`, shared with
15
+ * `FolderContextMenu`. This component is only the trigger.
26
16
  */ const FolderActionsMenu = ({ folder, dragData })=>{
27
17
  const { formatMessage } = useIntl();
28
- const { copy } = useClipboard();
29
- const { toggleNotification } = useNotification();
30
- const { deselect } = useAssetSelection();
31
- const [isRenameOpen, setIsRenameOpen] = useState(false);
32
- const [isMoveOpen, setIsMoveOpen] = useState(false);
33
- const [isDeleteOpen, setIsDeleteOpen] = useState(false);
34
- // Stable identity: the move dialog memoizes its destination walk on it.
35
- const moveItems = useMemo(()=>[
36
- dragData
37
- ], [
38
- dragData
39
- ]);
40
- // Built from window.location so the link inherits whatever path the library is
41
- // mounted at. Every other query param (search, sort, open drawer) is dropped —
42
- // this is a clean deep-link to the folder.
43
- const handleCopyLink = async ()=>{
44
- const url = `${window.location.origin}${window.location.pathname}?folder=${folder.id}`;
45
- const didCopy = await copy(url);
46
- toggleNotification({
47
- type: didCopy ? 'success' : 'danger',
48
- message: formatMessage(didCopy ? {
49
- id: getTranslationKey('list.folder.actions.copy-link.success'),
50
- defaultMessage: 'Folder link copied.'
51
- } : {
52
- id: getTranslationKey('list.folder.actions.copy-link.error'),
53
- defaultMessage: 'Failed to copy the folder link.'
54
- })
55
- });
56
- };
57
- return /*#__PURE__*/ jsxs(Fragment, {
58
- children: [
59
- /*#__PURE__*/ jsxs(Menu.Root, {
60
- modal: false,
18
+ return /*#__PURE__*/ jsx(FolderActions, {
19
+ folder: folder,
20
+ dragData: dragData,
21
+ children: ({ items, dialogs })=>/*#__PURE__*/ jsxs(Fragment, {
61
22
  children: [
62
- /*#__PURE__*/ jsx(Menu.Trigger, {
63
- tag: IconButton,
64
- icon: /*#__PURE__*/ jsx(More, {}),
65
- variant: "ghost",
66
- label: formatMessage({
67
- id: getTranslationKey('control-card.more-actions'),
68
- defaultMessage: 'More actions'
69
- })
70
- }),
71
- /*#__PURE__*/ jsxs(ActionsMenuContent, {
72
- popoverPlacement: "bottom-end",
73
- zIndex: 2,
74
- minWidth: "22rem",
23
+ /*#__PURE__*/ jsxs(Menu.Root, {
24
+ modal: false,
75
25
  children: [
76
- /*#__PURE__*/ jsx(Menu.Item, {
77
- startIcon: /*#__PURE__*/ jsx(Link, {}),
78
- onSelect: handleCopyLink,
79
- children: formatMessage({
80
- id: getTranslationKey('list.folder.actions.copy-link'),
81
- defaultMessage: 'Copy link to folder'
82
- })
83
- }),
84
- /*#__PURE__*/ jsx(Menu.Separator, {}),
85
- /*#__PURE__*/ jsx(Menu.Item, {
86
- startIcon: /*#__PURE__*/ jsx(Pencil, {}),
87
- onSelect: ()=>setIsRenameOpen(true),
88
- children: formatMessage({
89
- id: getTranslationKey('list.folder.actions.rename'),
90
- defaultMessage: 'Rename folder'
26
+ /*#__PURE__*/ jsx(Menu.Trigger, {
27
+ tag: IconButton,
28
+ icon: /*#__PURE__*/ jsx(More, {}),
29
+ variant: "ghost",
30
+ label: formatMessage({
31
+ id: getTranslationKey('control-card.more-actions'),
32
+ defaultMessage: 'More actions'
91
33
  })
92
34
  }),
93
- /*#__PURE__*/ jsx(Menu.Item, {
94
- startIcon: /*#__PURE__*/ jsx(ArrowRight, {}),
95
- onSelect: ()=>setIsMoveOpen(true),
96
- children: formatMessage({
97
- id: getTranslationKey('list.folder.actions.move'),
98
- defaultMessage: 'Move to folder'
99
- })
100
- }),
101
- /*#__PURE__*/ jsx(Menu.Item, {
102
- startIcon: /*#__PURE__*/ jsx(Trash, {}),
103
- variant: "danger",
104
- onSelect: ()=>setIsDeleteOpen(true),
105
- children: formatMessage({
106
- id: getTranslationKey('list.folder.actions.delete'),
107
- defaultMessage: 'Delete folder'
108
- })
35
+ /*#__PURE__*/ jsx(ActionsMenuContent, {
36
+ popoverPlacement: "bottom-end",
37
+ zIndex: 2,
38
+ minWidth: "22rem",
39
+ children: items
109
40
  })
110
41
  ]
111
- })
42
+ }),
43
+ dialogs
112
44
  ]
113
- }),
114
- isRenameOpen && /*#__PURE__*/ jsx(FolderFormDialog, {
115
- open: true,
116
- mode: "rename",
117
- folderId: folder.id,
118
- initialName: folder.name,
119
- parentFolderId: dragData.parentId,
120
- onClose: ()=>setIsRenameOpen(false)
121
- }),
122
- isMoveOpen && /*#__PURE__*/ jsx(BulkMoveDialog, {
123
- open: true,
124
- onClose: ()=>setIsMoveOpen(false),
125
- items: moveItems,
126
- onSuccess: ()=>deselect(folderKey(folder.id))
127
- }),
128
- isDeleteOpen && /*#__PURE__*/ jsx(DeleteItemsDialog, {
129
- open: true,
130
- onClose: ()=>setIsDeleteOpen(false),
131
- target: {
132
- fileIds: [],
133
- folderIds: [
134
- folder.id
135
- ]
136
- },
137
- onSuccess: ()=>deselect(folderKey(folder.id))
138
45
  })
139
- ]
140
46
  });
141
47
  };
142
48
 
@@ -1 +1 @@
1
- {"version":3,"file":"FolderActionsMenu.mjs","sources":["../../../../../admin/src/pages/Assets/components/FolderActionsMenu.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\n\nimport { useClipboard, useNotification } from '@strapi/admin/strapi-admin';\nimport { IconButton, Menu } from '@strapi/design-system';\nimport { ArrowRight, Link, More, Pencil, Trash } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { getTranslationKey } from '../../../utils/translations';\nimport { useAssetSelection } from '../hooks/useAssetSelection';\nimport { folderKey } from '../utils/selection';\n\nimport { ActionsMenuContent } from './ActionsMenuContent';\nimport { BulkMoveDialog } from './BulkMoveDialog';\nimport { DeleteItemsDialog } from './DeleteItemsDialog';\nimport { FolderFormDialog } from './FolderFormDialog';\n\nimport type { Folder } from '../../../../../shared/contracts/folders';\nimport type { DragFolderData } from '../../../types/dnd';\n\ninterface FolderActionsMenuProps {\n folder: Folder;\n /** Drag data for this folder, so the move dialog validates against its real parent. */\n dragData: DragFolderData;\n}\n\n/**\n * The \"...\" menu on a folder row/card. Always acts on that one folder, whatever\n * the current multi-selection is (the bulk actions bar is the selection-scoped\n * affordance). It reuses the shared move and delete dialogs, which mount only\n * while open.\n *\n * A successful move or delete deselects this one folder and leaves the rest of\n * the selection intact: they only invalidate RTK tags, so without it a\n * `folder:<id>` key for a folder that no longer lives where the selection thinks\n * it does would linger. A rename leaves the id valid and the folder in place, so\n * it touches the selection not at all.\n */\nexport const FolderActionsMenu = ({ folder, dragData }: FolderActionsMenuProps) => {\n const { formatMessage } = useIntl();\n const { copy } = useClipboard();\n const { toggleNotification } = useNotification();\n const { deselect } = useAssetSelection();\n const [isRenameOpen, setIsRenameOpen] = useState(false);\n const [isMoveOpen, setIsMoveOpen] = useState(false);\n const [isDeleteOpen, setIsDeleteOpen] = useState(false);\n\n // Stable identity: the move dialog memoizes its destination walk on it.\n const moveItems = useMemo(() => [dragData], [dragData]);\n\n // Built from window.location so the link inherits whatever path the library is\n // mounted at. Every other query param (search, sort, open drawer) is dropped —\n // this is a clean deep-link to the folder.\n const handleCopyLink = async () => {\n const url = `${window.location.origin}${window.location.pathname}?folder=${folder.id}`;\n const didCopy = await copy(url);\n\n toggleNotification({\n type: didCopy ? 'success' : 'danger',\n message: formatMessage(\n didCopy\n ? {\n id: getTranslationKey('list.folder.actions.copy-link.success'),\n defaultMessage: 'Folder link copied.',\n }\n : {\n id: getTranslationKey('list.folder.actions.copy-link.error'),\n defaultMessage: 'Failed to copy the folder link.',\n }\n ),\n });\n };\n\n return (\n <>\n {/* See AssetActionsMenu: non-modal so clicking another row's trigger\n closes this menu and opens that one in a single click. */}\n <Menu.Root modal={false}>\n <Menu.Trigger\n tag={IconButton}\n icon={<More />}\n variant=\"ghost\"\n label={formatMessage({\n id: getTranslationKey('control-card.more-actions'),\n defaultMessage: 'More actions',\n })}\n />\n {/* See ActionsMenuContent: the design system's 15rem default clamps the\n menu against a hidden scrollbar, so items can be silently cut off\n near the viewport edge. This one is shorter, but kept in sync. */}\n <ActionsMenuContent popoverPlacement=\"bottom-end\" zIndex={2} minWidth=\"22rem\">\n <Menu.Item startIcon={<Link />} onSelect={handleCopyLink}>\n {formatMessage({\n id: getTranslationKey('list.folder.actions.copy-link'),\n defaultMessage: 'Copy link to folder',\n })}\n </Menu.Item>\n <Menu.Separator />\n {/* TODO: gate Rename, Move and Delete on `assets.canUpdate` CMS-387 */}\n <Menu.Item startIcon={<Pencil />} onSelect={() => setIsRenameOpen(true)}>\n {formatMessage({\n id: getTranslationKey('list.folder.actions.rename'),\n defaultMessage: 'Rename folder',\n })}\n </Menu.Item>\n <Menu.Item startIcon={<ArrowRight />} onSelect={() => setIsMoveOpen(true)}>\n {formatMessage({\n id: getTranslationKey('list.folder.actions.move'),\n defaultMessage: 'Move to folder',\n })}\n </Menu.Item>\n <Menu.Item startIcon={<Trash />} variant=\"danger\" onSelect={() => setIsDeleteOpen(true)}>\n {formatMessage({\n id: getTranslationKey('list.folder.actions.delete'),\n defaultMessage: 'Delete folder',\n })}\n </Menu.Item>\n </ActionsMenuContent>\n </Menu.Root>\n {/* These dialogs live inside the row, so a background refetch that drops\n the row would take an open dialog with it. Nothing invalidates until\n the mutation resolves, and the dialog closes in the same tick, so the\n flows themselves can't trigger it. */}\n {isRenameOpen && (\n <FolderFormDialog\n open\n mode=\"rename\"\n folderId={folder.id}\n initialName={folder.name}\n parentFolderId={dragData.parentId}\n onClose={() => setIsRenameOpen(false)}\n />\n )}\n {isMoveOpen && (\n <BulkMoveDialog\n open\n onClose={() => setIsMoveOpen(false)}\n items={moveItems}\n onSuccess={() => deselect(folderKey(folder.id))}\n />\n )}\n {isDeleteOpen && (\n <DeleteItemsDialog\n open\n onClose={() => setIsDeleteOpen(false)}\n target={{ fileIds: [], folderIds: [folder.id] }}\n onSuccess={() => deselect(folderKey(folder.id))}\n />\n )}\n </>\n );\n};\n"],"names":["FolderActionsMenu","folder","dragData","formatMessage","useIntl","copy","useClipboard","toggleNotification","useNotification","deselect","useAssetSelection","isRenameOpen","setIsRenameOpen","useState","isMoveOpen","setIsMoveOpen","isDeleteOpen","setIsDeleteOpen","moveItems","useMemo","handleCopyLink","url","window","location","origin","pathname","id","didCopy","type","message","getTranslationKey","defaultMessage","_jsxs","_Fragment","Menu","Root","modal","_jsx","Trigger","tag","IconButton","icon","More","variant","label","ActionsMenuContent","popoverPlacement","zIndex","minWidth","Item","startIcon","Link","onSelect","Separator","Pencil","ArrowRight","Trash","FolderFormDialog","open","mode","folderId","initialName","name","parentFolderId","parentId","onClose","BulkMoveDialog","items","onSuccess","folderKey","DeleteItemsDialog","target","fileIds","folderIds"],"mappings":";;;;;;;;;;;;;;AAyBA;;;;;;;;;;;UAYaA,iBAAAA,GAAoB,CAAC,EAAEC,MAAM,EAAEC,QAAQ,EAA0B,GAAA;IAC5E,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEC,IAAI,EAAE,GAAGC,YAAAA,EAAAA;IACjB,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;IAC/B,MAAM,EAAEC,QAAQ,EAAE,GAAGC,iBAAAA,EAAAA;AACrB,IAAA,MAAM,CAACC,YAAAA,EAAcC,eAAAA,CAAgB,GAAGC,QAAAA,CAAS,KAAA,CAAA;AACjD,IAAA,MAAM,CAACC,UAAAA,EAAYC,aAAAA,CAAc,GAAGF,QAAAA,CAAS,KAAA,CAAA;AAC7C,IAAA,MAAM,CAACG,YAAAA,EAAcC,eAAAA,CAAgB,GAAGJ,QAAAA,CAAS,KAAA,CAAA;;IAGjD,MAAMK,SAAAA,GAAYC,QAAQ,IAAM;AAACjB,YAAAA;SAAS,EAAE;AAACA,QAAAA;AAAS,KAAA,CAAA;;;;AAKtD,IAAA,MAAMkB,cAAAA,GAAiB,UAAA;AACrB,QAAA,MAAMC,MAAM,CAAA,EAAGC,MAAAA,CAAOC,QAAQ,CAACC,MAAM,CAAA,EAAGF,MAAAA,CAAOC,QAAQ,CAACE,QAAQ,CAAC,QAAQ,EAAExB,MAAAA,CAAOyB,EAAE,CAAA,CAAE;QACtF,MAAMC,OAAAA,GAAU,MAAMtB,IAAAA,CAAKgB,GAAAA,CAAAA;QAE3Bd,kBAAAA,CAAmB;AACjBqB,YAAAA,IAAAA,EAAMD,UAAU,SAAA,GAAY,QAAA;AAC5BE,YAAAA,OAAAA,EAAS1B,cACPwB,OAAAA,GACI;AACED,gBAAAA,EAAAA,EAAII,iBAAAA,CAAkB,uCAAA,CAAA;gBACtBC,cAAAA,EAAgB;aAClB,GACA;AACEL,gBAAAA,EAAAA,EAAII,iBAAAA,CAAkB,qCAAA,CAAA;gBACtBC,cAAAA,EAAgB;AAClB,aAAA;AAER,SAAA,CAAA;AACF,IAAA,CAAA;IAEA,qBACEC,IAAA,CAAAC,QAAA,EAAA;;AAGE,0BAAAD,IAAA,CAACE,KAAKC,IAAI,EAAA;gBAACC,KAAAA,EAAO,KAAA;;AAChB,kCAAAC,GAAA,CAACH,KAAKI,OAAO,EAAA;wBACXC,GAAAA,EAAKC,UAAAA;AACLC,wBAAAA,IAAAA,gBAAMJ,GAAA,CAACK,IAAAA,EAAAA,EAAAA,CAAAA;wBACPC,OAAAA,EAAQ,OAAA;AACRC,wBAAAA,KAAAA,EAAOzC,aAAAA,CAAc;AACnBuB,4BAAAA,EAAAA,EAAII,iBAAAA,CAAkB,2BAAA,CAAA;4BACtBC,cAAAA,EAAgB;AAClB,yBAAA;;kCAKFC,IAAA,CAACa,kBAAAA,EAAAA;wBAAmBC,gBAAAA,EAAiB,YAAA;wBAAaC,MAAAA,EAAQ,CAAA;wBAAGC,QAAAA,EAAS,OAAA;;AACpE,0CAAAX,GAAA,CAACH,KAAKe,IAAI,EAAA;AAACC,gCAAAA,SAAAA,gBAAWb,GAAA,CAACc,IAAAA,EAAAA,EAAAA,CAAAA;gCAASC,QAAAA,EAAUhC,cAAAA;0CACvCjB,aAAAA,CAAc;AACbuB,oCAAAA,EAAAA,EAAII,iBAAAA,CAAkB,+BAAA,CAAA;oCACtBC,cAAAA,EAAgB;AAClB,iCAAA;;AAEF,0CAAAM,GAAA,CAACH,KAAKmB,SAAS,EAAA,EAAA,CAAA;AAEf,0CAAAhB,GAAA,CAACH,KAAKe,IAAI,EAAA;AAACC,gCAAAA,SAAAA,gBAAWb,GAAA,CAACiB,MAAAA,EAAAA,EAAAA,CAAAA;AAAWF,gCAAAA,QAAAA,EAAU,IAAMxC,eAAAA,CAAgB,IAAA,CAAA;0CAC/DT,aAAAA,CAAc;AACbuB,oCAAAA,EAAAA,EAAII,iBAAAA,CAAkB,4BAAA,CAAA;oCACtBC,cAAAA,EAAgB;AAClB,iCAAA;;AAEF,0CAAAM,GAAA,CAACH,KAAKe,IAAI,EAAA;AAACC,gCAAAA,SAAAA,gBAAWb,GAAA,CAACkB,UAAAA,EAAAA,EAAAA,CAAAA;AAAeH,gCAAAA,QAAAA,EAAU,IAAMrC,aAAAA,CAAc,IAAA,CAAA;0CACjEZ,aAAAA,CAAc;AACbuB,oCAAAA,EAAAA,EAAII,iBAAAA,CAAkB,0BAAA,CAAA;oCACtBC,cAAAA,EAAgB;AAClB,iCAAA;;AAEF,0CAAAM,GAAA,CAACH,KAAKe,IAAI,EAAA;AAACC,gCAAAA,SAAAA,gBAAWb,GAAA,CAACmB,KAAAA,EAAAA,EAAAA,CAAAA;gCAAUb,OAAAA,EAAQ,QAAA;AAASS,gCAAAA,QAAAA,EAAU,IAAMnC,eAAAA,CAAgB,IAAA,CAAA;0CAC/Ed,aAAAA,CAAc;AACbuB,oCAAAA,EAAAA,EAAII,iBAAAA,CAAkB,4BAAA,CAAA;oCACtBC,cAAAA,EAAgB;AAClB,iCAAA;;;;;;AAQLpB,YAAAA,YAAAA,kBACC0B,GAAA,CAACoB,gBAAAA,EAAAA;gBACCC,IAAI,EAAA,IAAA;gBACJC,IAAAA,EAAK,QAAA;AACLC,gBAAAA,QAAAA,EAAU3D,OAAOyB,EAAE;AACnBmC,gBAAAA,WAAAA,EAAa5D,OAAO6D,IAAI;AACxBC,gBAAAA,cAAAA,EAAgB7D,SAAS8D,QAAQ;AACjCC,gBAAAA,OAAAA,EAAS,IAAMrD,eAAAA,CAAgB,KAAA;;AAGlCE,YAAAA,UAAAA,kBACCuB,GAAA,CAAC6B,cAAAA,EAAAA;gBACCR,IAAI,EAAA,IAAA;AACJO,gBAAAA,OAAAA,EAAS,IAAMlD,aAAAA,CAAc,KAAA,CAAA;gBAC7BoD,KAAAA,EAAOjD,SAAAA;AACPkD,gBAAAA,SAAAA,EAAW,IAAM3D,QAAAA,CAAS4D,SAAAA,CAAUpE,MAAAA,CAAOyB,EAAE,CAAA;;AAGhDV,YAAAA,YAAAA,kBACCqB,GAAA,CAACiC,iBAAAA,EAAAA;gBACCZ,IAAI,EAAA,IAAA;AACJO,gBAAAA,OAAAA,EAAS,IAAMhD,eAAAA,CAAgB,KAAA,CAAA;gBAC/BsD,MAAAA,EAAQ;AAAEC,oBAAAA,OAAAA,EAAS,EAAE;oBAAEC,SAAAA,EAAW;AAACxE,wBAAAA,MAAAA,CAAOyB;AAAG;AAAC,iBAAA;AAC9C0C,gBAAAA,SAAAA,EAAW,IAAM3D,QAAAA,CAAS4D,SAAAA,CAAUpE,MAAAA,CAAOyB,EAAE,CAAA;;;;AAKvD;;;;"}
1
+ {"version":3,"file":"FolderActionsMenu.mjs","sources":["../../../../../admin/src/pages/Assets/components/FolderActionsMenu.tsx"],"sourcesContent":["import { IconButton, Menu } from '@strapi/design-system';\nimport { More } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { getTranslationKey } from '../../../utils/translations';\n\nimport { ActionsMenuContent } from './ActionsMenuContent';\nimport { FolderActions } from './FolderActions';\n\nimport type { Folder } from '../../../../../shared/contracts/folders';\nimport type { DragFolderData } from '../../../types/dnd';\n\ninterface FolderActionsMenuProps {\n folder: Folder;\n /** Drag data for this folder, so the move dialog validates against its real parent. */\n dragData: DragFolderData;\n}\n\n/**\n * The \"...\" menu on a folder row/card. Always acts on that one folder, whatever\n * the current multi-selection is (the bulk actions bar and the right-click menu\n * are the selection-scoped affordances).\n *\n * The actions themselves live in `FolderActions`, shared with\n * `FolderContextMenu`. This component is only the trigger.\n */\nexport const FolderActionsMenu = ({ folder, dragData }: FolderActionsMenuProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <FolderActions folder={folder} dragData={dragData}>\n {({ items, dialogs }) => (\n <>\n {/* See AssetActionsMenu: non-modal so clicking another row's trigger\n closes this menu and opens that one in a single click. */}\n <Menu.Root modal={false}>\n <Menu.Trigger\n tag={IconButton}\n icon={<More />}\n variant=\"ghost\"\n label={formatMessage({\n id: getTranslationKey('control-card.more-actions'),\n defaultMessage: 'More actions',\n })}\n />\n {/* See ActionsMenuContent: the design system's 15rem default clamps the\n menu against a hidden scrollbar, so items can be silently cut off\n near the viewport edge. This one is shorter, but kept in sync. */}\n <ActionsMenuContent popoverPlacement=\"bottom-end\" zIndex={2} minWidth=\"22rem\">\n {items}\n </ActionsMenuContent>\n </Menu.Root>\n {dialogs}\n </>\n )}\n </FolderActions>\n );\n};\n"],"names":["FolderActionsMenu","folder","dragData","formatMessage","useIntl","_jsx","FolderActions","items","dialogs","_jsxs","_Fragment","Menu","Root","modal","Trigger","tag","IconButton","icon","More","variant","label","id","getTranslationKey","defaultMessage","ActionsMenuContent","popoverPlacement","zIndex","minWidth"],"mappings":";;;;;;;;AAkBA;;;;;;;UAQaA,iBAAAA,GAAoB,CAAC,EAAEC,MAAM,EAAEC,QAAQ,EAA0B,GAAA;IAC5E,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAE1B,IAAA,qBACEC,GAAA,CAACC,aAAAA,EAAAA;QAAcL,MAAAA,EAAQA,MAAAA;QAAQC,QAAAA,EAAUA,QAAAA;AACtC,QAAA,QAAA,EAAA,CAAC,EAAEK,KAAK,EAAEC,OAAO,EAAE,iBAClBC,IAAA,CAAAC,QAAA,EAAA;;AAGE,kCAAAD,IAAA,CAACE,KAAKC,IAAI,EAAA;wBAACC,KAAAA,EAAO,KAAA;;AAChB,0CAAAR,GAAA,CAACM,KAAKG,OAAO,EAAA;gCACXC,GAAAA,EAAKC,UAAAA;AACLC,gCAAAA,IAAAA,gBAAMZ,GAAA,CAACa,IAAAA,EAAAA,EAAAA,CAAAA;gCACPC,OAAAA,EAAQ,OAAA;AACRC,gCAAAA,KAAAA,EAAOjB,aAAAA,CAAc;AACnBkB,oCAAAA,EAAAA,EAAIC,iBAAAA,CAAkB,2BAAA,CAAA;oCACtBC,cAAAA,EAAgB;AAClB,iCAAA;;0CAKFlB,GAAA,CAACmB,kBAAAA,EAAAA;gCAAmBC,gBAAAA,EAAiB,YAAA;gCAAaC,MAAAA,EAAQ,CAAA;gCAAGC,QAAAA,EAAS,OAAA;AACnEpB,gCAAAA,QAAAA,EAAAA;;;;AAGJC,oBAAAA;;;;AAKX;;;;"}
@@ -0,0 +1,67 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
+ var reactIntl = require('react-intl');
6
+ var translations = require('../../../utils/translations.js');
7
+ var CursorAnchoredMenu = require('./CursorAnchoredMenu.js');
8
+ var FolderActions = require('./FolderActions.js');
9
+
10
+ /**
11
+ * The right-click twin of `FolderActionsMenu`: same actions, opened at the
12
+ * cursor. Mirrors `AssetContextMenu`, including keeping "the menu is shut" and
13
+ * "this is unmounted" as separate things — a dialog opened from an item is
14
+ * rendered here and would go with an early unmount.
15
+ */ const FolderContextMenu = ({ folder, dragData, showRename, position, returnFocusTo, onClose })=>{
16
+ const { formatMessage } = reactIntl.useIntl();
17
+ const [isMenuOpen, setIsMenuOpen] = React.useState(true);
18
+ return /*#__PURE__*/ jsxRuntime.jsx(FolderActions.FolderActions, {
19
+ folder: folder,
20
+ dragData: dragData,
21
+ showRename: showRename,
22
+ children: ({ items, dialogs, isBusy })=>/*#__PURE__*/ jsxRuntime.jsx(FolderContextMenuBody, {
23
+ isBusy: isBusy,
24
+ isMenuOpen: isMenuOpen,
25
+ onMenuClose: ()=>setIsMenuOpen(false),
26
+ onClose: onClose,
27
+ position: position,
28
+ returnFocusTo: returnFocusTo,
29
+ label: formatMessage({
30
+ id: translations.getTranslationKey('list.folder.context-menu.label'),
31
+ defaultMessage: 'Folder actions'
32
+ }),
33
+ items: items,
34
+ dialogs: dialogs
35
+ })
36
+ });
37
+ };
38
+ /**
39
+ * Split out because the "nothing left on screen" effect can't run inside the
40
+ * render prop above — hooks don't belong in a callback.
41
+ */ const FolderContextMenuBody = ({ isBusy, isMenuOpen, onMenuClose, onClose, position, returnFocusTo, label, items, dialogs })=>{
42
+ React.useEffect(()=>{
43
+ if (!isMenuOpen && !isBusy) {
44
+ onClose();
45
+ }
46
+ }, [
47
+ isMenuOpen,
48
+ isBusy,
49
+ onClose
50
+ ]);
51
+ return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
52
+ children: [
53
+ /*#__PURE__*/ jsxRuntime.jsx(CursorAnchoredMenu.CursorAnchoredMenu, {
54
+ position: position,
55
+ open: isMenuOpen,
56
+ label: label,
57
+ returnFocusTo: returnFocusTo,
58
+ onClose: onMenuClose,
59
+ children: items
60
+ }),
61
+ dialogs
62
+ ]
63
+ });
64
+ };
65
+
66
+ exports.FolderContextMenu = FolderContextMenu;
67
+ //# sourceMappingURL=FolderContextMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FolderContextMenu.js","sources":["../../../../../admin/src/pages/Assets/components/FolderContextMenu.tsx"],"sourcesContent":["import { useEffect, useState, type ReactNode } from 'react';\n\nimport { useIntl } from 'react-intl';\n\nimport { getTranslationKey } from '../../../utils/translations';\n\nimport { CursorAnchoredMenu, type CursorPosition } from './CursorAnchoredMenu';\nimport { FolderActions } from './FolderActions';\n\nimport type { Folder } from '../../../../../shared/contracts/folders';\nimport type { DragFolderData } from '../../../types/dnd';\n\ninterface FolderContextMenuProps {\n folder: Pick<Folder, 'id' | 'name'>;\n dragData: DragFolderData;\n /** Passed through — the folder tree offers the menu without Rename. */\n showRename?: boolean;\n position: CursorPosition;\n returnFocusTo: HTMLElement | null;\n /** Mounted only while it has something on screen, so the parent drops it on this. */\n onClose: () => void;\n}\n\n/**\n * The right-click twin of `FolderActionsMenu`: same actions, opened at the\n * cursor. Mirrors `AssetContextMenu`, including keeping \"the menu is shut\" and\n * \"this is unmounted\" as separate things — a dialog opened from an item is\n * rendered here and would go with an early unmount.\n */\nexport const FolderContextMenu = ({\n folder,\n dragData,\n showRename,\n position,\n returnFocusTo,\n onClose,\n}: FolderContextMenuProps) => {\n const { formatMessage } = useIntl();\n const [isMenuOpen, setIsMenuOpen] = useState(true);\n\n return (\n <FolderActions folder={folder} dragData={dragData} showRename={showRename}>\n {({ items, dialogs, isBusy }) => (\n <FolderContextMenuBody\n isBusy={isBusy}\n isMenuOpen={isMenuOpen}\n onMenuClose={() => setIsMenuOpen(false)}\n onClose={onClose}\n position={position}\n returnFocusTo={returnFocusTo}\n label={formatMessage({\n id: getTranslationKey('list.folder.context-menu.label'),\n defaultMessage: 'Folder actions',\n })}\n items={items}\n dialogs={dialogs}\n />\n )}\n </FolderActions>\n );\n};\n\ninterface FolderContextMenuBodyProps {\n isBusy: boolean;\n isMenuOpen: boolean;\n onMenuClose: () => void;\n onClose: () => void;\n position: CursorPosition;\n returnFocusTo: HTMLElement | null;\n label: string;\n items: ReactNode;\n dialogs: ReactNode;\n}\n\n/**\n * Split out because the \"nothing left on screen\" effect can't run inside the\n * render prop above — hooks don't belong in a callback.\n */\nconst FolderContextMenuBody = ({\n isBusy,\n isMenuOpen,\n onMenuClose,\n onClose,\n position,\n returnFocusTo,\n label,\n items,\n dialogs,\n}: FolderContextMenuBodyProps) => {\n useEffect(() => {\n if (!isMenuOpen && !isBusy) {\n onClose();\n }\n }, [isMenuOpen, isBusy, onClose]);\n\n return (\n <>\n <CursorAnchoredMenu\n position={position}\n open={isMenuOpen}\n label={label}\n returnFocusTo={returnFocusTo}\n onClose={onMenuClose}\n >\n {items}\n </CursorAnchoredMenu>\n {dialogs}\n </>\n );\n};\n"],"names":["FolderContextMenu","folder","dragData","showRename","position","returnFocusTo","onClose","formatMessage","useIntl","isMenuOpen","setIsMenuOpen","useState","_jsx","FolderActions","items","dialogs","isBusy","FolderContextMenuBody","onMenuClose","label","id","getTranslationKey","defaultMessage","useEffect","_jsxs","_Fragment","CursorAnchoredMenu","open"],"mappings":";;;;;;;;;AAuBA;;;;;AAKC,IACM,MAAMA,iBAAAA,GAAoB,CAAC,EAChCC,MAAM,EACNC,QAAQ,EACRC,UAAU,EACVC,QAAQ,EACRC,aAAa,EACbC,OAAO,EACgB,GAAA;IACvB,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAM,CAACC,UAAAA,EAAYC,aAAAA,CAAc,GAAGC,cAAAA,CAAS,IAAA,CAAA;AAE7C,IAAA,qBACEC,cAAA,CAACC,2BAAAA,EAAAA;QAAcZ,MAAAA,EAAQA,MAAAA;QAAQC,QAAAA,EAAUA,QAAAA;QAAUC,UAAAA,EAAYA,UAAAA;kBAC5D,CAAC,EAAEW,KAAK,EAAEC,OAAO,EAAEC,MAAM,EAAE,iBAC1BJ,cAAA,CAACK,qBAAAA,EAAAA;gBACCD,MAAAA,EAAQA,MAAAA;gBACRP,UAAAA,EAAYA,UAAAA;AACZS,gBAAAA,WAAAA,EAAa,IAAMR,aAAAA,CAAc,KAAA,CAAA;gBACjCJ,OAAAA,EAASA,OAAAA;gBACTF,QAAAA,EAAUA,QAAAA;gBACVC,aAAAA,EAAeA,aAAAA;AACfc,gBAAAA,KAAAA,EAAOZ,aAAAA,CAAc;AACnBa,oBAAAA,EAAAA,EAAIC,8BAAAA,CAAkB,gCAAA,CAAA;oBACtBC,cAAAA,EAAgB;AAClB,iBAAA,CAAA;gBACAR,KAAAA,EAAOA,KAAAA;gBACPC,OAAAA,EAASA;;;AAKnB;AAcA;;;IAIA,MAAME,wBAAwB,CAAC,EAC7BD,MAAM,EACNP,UAAU,EACVS,WAAW,EACXZ,OAAO,EACPF,QAAQ,EACRC,aAAa,EACbc,KAAK,EACLL,KAAK,EACLC,OAAO,EACoB,GAAA;IAC3BQ,eAAAA,CAAU,IAAA;QACR,IAAI,CAACd,UAAAA,IAAc,CAACO,MAAAA,EAAQ;AAC1BV,YAAAA,OAAAA,EAAAA;AACF,QAAA;IACF,CAAA,EAAG;AAACG,QAAAA,UAAAA;AAAYO,QAAAA,MAAAA;AAAQV,QAAAA;AAAQ,KAAA,CAAA;IAEhC,qBACEkB,eAAA,CAAAC,mBAAA,EAAA;;0BACEb,cAAA,CAACc,qCAAAA,EAAAA;gBACCtB,QAAAA,EAAUA,QAAAA;gBACVuB,IAAAA,EAAMlB,UAAAA;gBACNU,KAAAA,EAAOA,KAAAA;gBACPd,aAAAA,EAAeA,aAAAA;gBACfC,OAAAA,EAASY,WAAAA;AAERJ,gBAAAA,QAAAA,EAAAA;;AAEFC,YAAAA;;;AAGP,CAAA;;;;"}
@@ -0,0 +1,65 @@
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import { useState, useEffect } from 'react';
3
+ import { useIntl } from 'react-intl';
4
+ import { getTranslationKey } from '../../../utils/translations.mjs';
5
+ import { CursorAnchoredMenu } from './CursorAnchoredMenu.mjs';
6
+ import { FolderActions } from './FolderActions.mjs';
7
+
8
+ /**
9
+ * The right-click twin of `FolderActionsMenu`: same actions, opened at the
10
+ * cursor. Mirrors `AssetContextMenu`, including keeping "the menu is shut" and
11
+ * "this is unmounted" as separate things — a dialog opened from an item is
12
+ * rendered here and would go with an early unmount.
13
+ */ const FolderContextMenu = ({ folder, dragData, showRename, position, returnFocusTo, onClose })=>{
14
+ const { formatMessage } = useIntl();
15
+ const [isMenuOpen, setIsMenuOpen] = useState(true);
16
+ return /*#__PURE__*/ jsx(FolderActions, {
17
+ folder: folder,
18
+ dragData: dragData,
19
+ showRename: showRename,
20
+ children: ({ items, dialogs, isBusy })=>/*#__PURE__*/ jsx(FolderContextMenuBody, {
21
+ isBusy: isBusy,
22
+ isMenuOpen: isMenuOpen,
23
+ onMenuClose: ()=>setIsMenuOpen(false),
24
+ onClose: onClose,
25
+ position: position,
26
+ returnFocusTo: returnFocusTo,
27
+ label: formatMessage({
28
+ id: getTranslationKey('list.folder.context-menu.label'),
29
+ defaultMessage: 'Folder actions'
30
+ }),
31
+ items: items,
32
+ dialogs: dialogs
33
+ })
34
+ });
35
+ };
36
+ /**
37
+ * Split out because the "nothing left on screen" effect can't run inside the
38
+ * render prop above — hooks don't belong in a callback.
39
+ */ const FolderContextMenuBody = ({ isBusy, isMenuOpen, onMenuClose, onClose, position, returnFocusTo, label, items, dialogs })=>{
40
+ useEffect(()=>{
41
+ if (!isMenuOpen && !isBusy) {
42
+ onClose();
43
+ }
44
+ }, [
45
+ isMenuOpen,
46
+ isBusy,
47
+ onClose
48
+ ]);
49
+ return /*#__PURE__*/ jsxs(Fragment, {
50
+ children: [
51
+ /*#__PURE__*/ jsx(CursorAnchoredMenu, {
52
+ position: position,
53
+ open: isMenuOpen,
54
+ label: label,
55
+ returnFocusTo: returnFocusTo,
56
+ onClose: onMenuClose,
57
+ children: items
58
+ }),
59
+ dialogs
60
+ ]
61
+ });
62
+ };
63
+
64
+ export { FolderContextMenu };
65
+ //# sourceMappingURL=FolderContextMenu.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FolderContextMenu.mjs","sources":["../../../../../admin/src/pages/Assets/components/FolderContextMenu.tsx"],"sourcesContent":["import { useEffect, useState, type ReactNode } from 'react';\n\nimport { useIntl } from 'react-intl';\n\nimport { getTranslationKey } from '../../../utils/translations';\n\nimport { CursorAnchoredMenu, type CursorPosition } from './CursorAnchoredMenu';\nimport { FolderActions } from './FolderActions';\n\nimport type { Folder } from '../../../../../shared/contracts/folders';\nimport type { DragFolderData } from '../../../types/dnd';\n\ninterface FolderContextMenuProps {\n folder: Pick<Folder, 'id' | 'name'>;\n dragData: DragFolderData;\n /** Passed through — the folder tree offers the menu without Rename. */\n showRename?: boolean;\n position: CursorPosition;\n returnFocusTo: HTMLElement | null;\n /** Mounted only while it has something on screen, so the parent drops it on this. */\n onClose: () => void;\n}\n\n/**\n * The right-click twin of `FolderActionsMenu`: same actions, opened at the\n * cursor. Mirrors `AssetContextMenu`, including keeping \"the menu is shut\" and\n * \"this is unmounted\" as separate things — a dialog opened from an item is\n * rendered here and would go with an early unmount.\n */\nexport const FolderContextMenu = ({\n folder,\n dragData,\n showRename,\n position,\n returnFocusTo,\n onClose,\n}: FolderContextMenuProps) => {\n const { formatMessage } = useIntl();\n const [isMenuOpen, setIsMenuOpen] = useState(true);\n\n return (\n <FolderActions folder={folder} dragData={dragData} showRename={showRename}>\n {({ items, dialogs, isBusy }) => (\n <FolderContextMenuBody\n isBusy={isBusy}\n isMenuOpen={isMenuOpen}\n onMenuClose={() => setIsMenuOpen(false)}\n onClose={onClose}\n position={position}\n returnFocusTo={returnFocusTo}\n label={formatMessage({\n id: getTranslationKey('list.folder.context-menu.label'),\n defaultMessage: 'Folder actions',\n })}\n items={items}\n dialogs={dialogs}\n />\n )}\n </FolderActions>\n );\n};\n\ninterface FolderContextMenuBodyProps {\n isBusy: boolean;\n isMenuOpen: boolean;\n onMenuClose: () => void;\n onClose: () => void;\n position: CursorPosition;\n returnFocusTo: HTMLElement | null;\n label: string;\n items: ReactNode;\n dialogs: ReactNode;\n}\n\n/**\n * Split out because the \"nothing left on screen\" effect can't run inside the\n * render prop above — hooks don't belong in a callback.\n */\nconst FolderContextMenuBody = ({\n isBusy,\n isMenuOpen,\n onMenuClose,\n onClose,\n position,\n returnFocusTo,\n label,\n items,\n dialogs,\n}: FolderContextMenuBodyProps) => {\n useEffect(() => {\n if (!isMenuOpen && !isBusy) {\n onClose();\n }\n }, [isMenuOpen, isBusy, onClose]);\n\n return (\n <>\n <CursorAnchoredMenu\n position={position}\n open={isMenuOpen}\n label={label}\n returnFocusTo={returnFocusTo}\n onClose={onMenuClose}\n >\n {items}\n </CursorAnchoredMenu>\n {dialogs}\n </>\n );\n};\n"],"names":["FolderContextMenu","folder","dragData","showRename","position","returnFocusTo","onClose","formatMessage","useIntl","isMenuOpen","setIsMenuOpen","useState","_jsx","FolderActions","items","dialogs","isBusy","FolderContextMenuBody","onMenuClose","label","id","getTranslationKey","defaultMessage","useEffect","_jsxs","_Fragment","CursorAnchoredMenu","open"],"mappings":";;;;;;;AAuBA;;;;;AAKC,IACM,MAAMA,iBAAAA,GAAoB,CAAC,EAChCC,MAAM,EACNC,QAAQ,EACRC,UAAU,EACVC,QAAQ,EACRC,aAAa,EACbC,OAAO,EACgB,GAAA;IACvB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,CAACC,UAAAA,EAAYC,aAAAA,CAAc,GAAGC,QAAAA,CAAS,IAAA,CAAA;AAE7C,IAAA,qBACEC,GAAA,CAACC,aAAAA,EAAAA;QAAcZ,MAAAA,EAAQA,MAAAA;QAAQC,QAAAA,EAAUA,QAAAA;QAAUC,UAAAA,EAAYA,UAAAA;kBAC5D,CAAC,EAAEW,KAAK,EAAEC,OAAO,EAAEC,MAAM,EAAE,iBAC1BJ,GAAA,CAACK,qBAAAA,EAAAA;gBACCD,MAAAA,EAAQA,MAAAA;gBACRP,UAAAA,EAAYA,UAAAA;AACZS,gBAAAA,WAAAA,EAAa,IAAMR,aAAAA,CAAc,KAAA,CAAA;gBACjCJ,OAAAA,EAASA,OAAAA;gBACTF,QAAAA,EAAUA,QAAAA;gBACVC,aAAAA,EAAeA,aAAAA;AACfc,gBAAAA,KAAAA,EAAOZ,aAAAA,CAAc;AACnBa,oBAAAA,EAAAA,EAAIC,iBAAAA,CAAkB,gCAAA,CAAA;oBACtBC,cAAAA,EAAgB;AAClB,iBAAA,CAAA;gBACAR,KAAAA,EAAOA,KAAAA;gBACPC,OAAAA,EAASA;;;AAKnB;AAcA;;;IAIA,MAAME,wBAAwB,CAAC,EAC7BD,MAAM,EACNP,UAAU,EACVS,WAAW,EACXZ,OAAO,EACPF,QAAQ,EACRC,aAAa,EACbc,KAAK,EACLL,KAAK,EACLC,OAAO,EACoB,GAAA;IAC3BQ,SAAAA,CAAU,IAAA;QACR,IAAI,CAACd,UAAAA,IAAc,CAACO,MAAAA,EAAQ;AAC1BV,YAAAA,OAAAA,EAAAA;AACF,QAAA;IACF,CAAA,EAAG;AAACG,QAAAA,UAAAA;AAAYO,QAAAA,MAAAA;AAAQV,QAAAA;AAAQ,KAAA,CAAA;IAEhC,qBACEkB,IAAA,CAAAC,QAAA,EAAA;;0BACEb,GAAA,CAACc,kBAAAA,EAAAA;gBACCtB,QAAAA,EAAUA,QAAAA;gBACVuB,IAAAA,EAAMlB,UAAAA;gBACNU,KAAAA,EAAOA,KAAAA;gBACPd,aAAAA,EAAeA,aAAAA;gBACfC,OAAAA,EAASY,WAAAA;AAERJ,gBAAAA,QAAAA,EAAAA;;AAEFC,YAAAA;;;AAGP,CAAA;;;;"}