@strapi/upload 5.51.1 → 5.52.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 (369) hide show
  1. package/dist/admin/components/AssetCard/VideoPreview.js +1 -1
  2. package/dist/admin/components/AssetCard/VideoPreview.js.map +1 -1
  3. package/dist/admin/components/AssetCard/VideoPreview.mjs +1 -1
  4. package/dist/admin/components/AssetCard/VideoPreview.mjs.map +1 -1
  5. package/dist/admin/components/TableList/TableList.js +1 -1
  6. package/dist/admin/components/TableList/TableList.js.map +1 -1
  7. package/dist/admin/components/TableList/TableList.mjs +1 -1
  8. package/dist/admin/components/TableList/TableList.mjs.map +1 -1
  9. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js +21 -4
  10. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js.map +1 -1
  11. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.mjs +21 -4
  12. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.mjs.map +1 -1
  13. package/dist/admin/future/App.js +3 -3
  14. package/dist/admin/future/App.js.map +1 -1
  15. package/dist/admin/future/App.mjs +4 -4
  16. package/dist/admin/future/App.mjs.map +1 -1
  17. package/dist/admin/future/components/BetaNotice.js +72 -0
  18. package/dist/admin/future/components/BetaNotice.js.map +1 -0
  19. package/dist/admin/future/components/BetaNotice.mjs +70 -0
  20. package/dist/admin/future/components/BetaNotice.mjs.map +1 -0
  21. package/dist/admin/future/components/Drawer.js +18 -3
  22. package/dist/admin/future/components/Drawer.js.map +1 -1
  23. package/dist/admin/future/components/Drawer.mjs +18 -3
  24. package/dist/admin/future/components/Drawer.mjs.map +1 -1
  25. package/dist/admin/future/components/UploadProgressDialog.js +200 -27
  26. package/dist/admin/future/components/UploadProgressDialog.js.map +1 -1
  27. package/dist/admin/future/components/UploadProgressDialog.mjs +203 -30
  28. package/dist/admin/future/components/UploadProgressDialog.mjs.map +1 -1
  29. package/dist/admin/future/hooks/useAIMetadataEnabled.js +39 -0
  30. package/dist/admin/future/hooks/useAIMetadataEnabled.js.map +1 -0
  31. package/dist/admin/future/hooks/useAIMetadataEnabled.mjs +37 -0
  32. package/dist/admin/future/hooks/useAIMetadataEnabled.mjs.map +1 -0
  33. package/dist/admin/future/hooks/useMediaLibraryPermissions.js +35 -0
  34. package/dist/admin/future/hooks/useMediaLibraryPermissions.js.map +1 -0
  35. package/dist/admin/future/hooks/useMediaLibraryPermissions.mjs +33 -0
  36. package/dist/admin/future/hooks/useMediaLibraryPermissions.mjs.map +1 -0
  37. package/dist/admin/future/pages/Assets/AssetsPage.js +453 -170
  38. package/dist/admin/future/pages/Assets/AssetsPage.js.map +1 -1
  39. package/dist/admin/future/pages/Assets/AssetsPage.mjs +454 -171
  40. package/dist/admin/future/pages/Assets/AssetsPage.mjs.map +1 -1
  41. package/dist/admin/future/pages/Assets/components/ActionsMenuContent.js +46 -0
  42. package/dist/admin/future/pages/Assets/components/ActionsMenuContent.js.map +1 -0
  43. package/dist/admin/future/pages/Assets/components/ActionsMenuContent.mjs +44 -0
  44. package/dist/admin/future/pages/Assets/components/ActionsMenuContent.mjs.map +1 -0
  45. package/dist/admin/future/pages/Assets/components/AssetActionsMenu.js +325 -0
  46. package/dist/admin/future/pages/Assets/components/AssetActionsMenu.js.map +1 -0
  47. package/dist/admin/future/pages/Assets/components/AssetActionsMenu.mjs +323 -0
  48. package/dist/admin/future/pages/Assets/components/AssetActionsMenu.mjs.map +1 -0
  49. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.js +110 -46
  50. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.js.map +1 -1
  51. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.mjs +110 -46
  52. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.mjs.map +1 -1
  53. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js +95 -67
  54. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js.map +1 -1
  55. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs +95 -68
  56. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs.map +1 -1
  57. package/dist/admin/future/pages/Assets/components/AssetsGrid.js +94 -26
  58. package/dist/admin/future/pages/Assets/components/AssetsGrid.js.map +1 -1
  59. package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs +96 -28
  60. package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs.map +1 -1
  61. package/dist/admin/future/pages/Assets/components/AssetsSearchInput.js +112 -0
  62. package/dist/admin/future/pages/Assets/components/AssetsSearchInput.js.map +1 -0
  63. package/dist/admin/future/pages/Assets/components/AssetsSearchInput.mjs +110 -0
  64. package/dist/admin/future/pages/Assets/components/AssetsSearchInput.mjs.map +1 -0
  65. package/dist/admin/future/pages/Assets/components/AssetsTable.js +172 -56
  66. package/dist/admin/future/pages/Assets/components/AssetsTable.js.map +1 -1
  67. package/dist/admin/future/pages/Assets/components/AssetsTable.mjs +175 -59
  68. package/dist/admin/future/pages/Assets/components/AssetsTable.mjs.map +1 -1
  69. package/dist/admin/future/pages/Assets/components/BulkActionsBar.js +188 -138
  70. package/dist/admin/future/pages/Assets/components/BulkActionsBar.js.map +1 -1
  71. package/dist/admin/future/pages/Assets/components/BulkActionsBar.mjs +191 -141
  72. package/dist/admin/future/pages/Assets/components/BulkActionsBar.mjs.map +1 -1
  73. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.js +123 -76
  74. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.js.map +1 -1
  75. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.mjs +126 -79
  76. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.mjs.map +1 -1
  77. package/dist/admin/future/pages/Assets/components/BusyOverlay.js +36 -0
  78. package/dist/admin/future/pages/Assets/components/BusyOverlay.js.map +1 -0
  79. package/dist/admin/future/pages/Assets/components/BusyOverlay.mjs +34 -0
  80. package/dist/admin/future/pages/Assets/components/BusyOverlay.mjs.map +1 -0
  81. package/dist/admin/future/pages/Assets/components/DateRangeCalendar.js +193 -0
  82. package/dist/admin/future/pages/Assets/components/DateRangeCalendar.js.map +1 -0
  83. package/dist/admin/future/pages/Assets/components/DateRangeCalendar.mjs +191 -0
  84. package/dist/admin/future/pages/Assets/components/DateRangeCalendar.mjs.map +1 -0
  85. package/dist/admin/future/pages/Assets/components/DeleteItemsDialog.js +131 -0
  86. package/dist/admin/future/pages/Assets/components/DeleteItemsDialog.js.map +1 -0
  87. package/dist/admin/future/pages/Assets/components/DeleteItemsDialog.mjs +129 -0
  88. package/dist/admin/future/pages/Assets/components/DeleteItemsDialog.mjs.map +1 -0
  89. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.js +45 -18
  90. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.js.map +1 -1
  91. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.mjs +46 -19
  92. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.mjs.map +1 -1
  93. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.js +28 -31
  94. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.js.map +1 -1
  95. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.mjs +28 -31
  96. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.mjs.map +1 -1
  97. package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.js +10 -15
  98. package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.js.map +1 -1
  99. package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.mjs +10 -15
  100. package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.mjs.map +1 -1
  101. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.js +13 -3
  102. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.js.map +1 -1
  103. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.mjs +13 -3
  104. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.mjs.map +1 -1
  105. package/dist/admin/future/pages/Assets/components/EmptyState.js +62 -3
  106. package/dist/admin/future/pages/Assets/components/EmptyState.js.map +1 -1
  107. package/dist/admin/future/pages/Assets/components/EmptyState.mjs +62 -4
  108. package/dist/admin/future/pages/Assets/components/EmptyState.mjs.map +1 -1
  109. package/dist/admin/future/pages/Assets/components/FilterBadges.js +417 -0
  110. package/dist/admin/future/pages/Assets/components/FilterBadges.js.map +1 -0
  111. package/dist/admin/future/pages/Assets/components/FilterBadges.mjs +415 -0
  112. package/dist/admin/future/pages/Assets/components/FilterBadges.mjs.map +1 -0
  113. package/dist/admin/future/pages/Assets/components/FilterMenu.js +453 -0
  114. package/dist/admin/future/pages/Assets/components/FilterMenu.js.map +1 -0
  115. package/dist/admin/future/pages/Assets/components/FilterMenu.mjs +447 -0
  116. package/dist/admin/future/pages/Assets/components/FilterMenu.mjs.map +1 -0
  117. package/dist/admin/future/pages/Assets/components/FolderActionsMenu.js +144 -0
  118. package/dist/admin/future/pages/Assets/components/FolderActionsMenu.js.map +1 -0
  119. package/dist/admin/future/pages/Assets/components/FolderActionsMenu.mjs +142 -0
  120. package/dist/admin/future/pages/Assets/components/FolderActionsMenu.mjs.map +1 -0
  121. package/dist/admin/future/pages/Assets/components/{CreateFolderDialog.js → FolderFormDialog.js} +50 -16
  122. package/dist/admin/future/pages/Assets/components/FolderFormDialog.js.map +1 -0
  123. package/dist/admin/future/pages/Assets/components/{CreateFolderDialog.mjs → FolderFormDialog.mjs} +52 -18
  124. package/dist/admin/future/pages/Assets/components/FolderFormDialog.mjs.map +1 -0
  125. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.js +125 -148
  126. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.js.map +1 -1
  127. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.mjs +127 -150
  128. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.mjs.map +1 -1
  129. package/dist/admin/future/pages/Assets/components/SortMenu.js +21 -32
  130. package/dist/admin/future/pages/Assets/components/SortMenu.js.map +1 -1
  131. package/dist/admin/future/pages/Assets/components/SortMenu.mjs +22 -33
  132. package/dist/admin/future/pages/Assets/components/SortMenu.mjs.map +1 -1
  133. package/dist/admin/future/pages/Assets/hooks/useAssetSearch.js +40 -0
  134. package/dist/admin/future/pages/Assets/hooks/useAssetSearch.js.map +1 -0
  135. package/dist/admin/future/pages/Assets/hooks/useAssetSearch.mjs +38 -0
  136. package/dist/admin/future/pages/Assets/hooks/useAssetSearch.mjs.map +1 -0
  137. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.js +21 -5
  138. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.js.map +1 -1
  139. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.mjs +21 -5
  140. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.mjs.map +1 -1
  141. package/dist/admin/future/pages/Assets/hooks/useBusyAssets.js +47 -0
  142. package/dist/admin/future/pages/Assets/hooks/useBusyAssets.js.map +1 -0
  143. package/dist/admin/future/pages/Assets/hooks/useBusyAssets.mjs +44 -0
  144. package/dist/admin/future/pages/Assets/hooks/useBusyAssets.mjs.map +1 -0
  145. package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.js +33 -12
  146. package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.js.map +1 -1
  147. package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.mjs +33 -12
  148. package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.mjs.map +1 -1
  149. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.js +222 -45
  150. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.js.map +1 -1
  151. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.mjs +223 -46
  152. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.mjs.map +1 -1
  153. package/dist/admin/future/pages/Assets/hooks/useInfiniteScrollSentinel.js +75 -0
  154. package/dist/admin/future/pages/Assets/hooks/useInfiniteScrollSentinel.js.map +1 -0
  155. package/dist/admin/future/pages/Assets/hooks/useInfiniteScrollSentinel.mjs +73 -0
  156. package/dist/admin/future/pages/Assets/hooks/useInfiniteScrollSentinel.mjs.map +1 -0
  157. package/dist/admin/future/pages/Assets/hooks/useListFilters.js +168 -0
  158. package/dist/admin/future/pages/Assets/hooks/useListFilters.js.map +1 -0
  159. package/dist/admin/future/pages/Assets/hooks/useListFilters.mjs +162 -0
  160. package/dist/admin/future/pages/Assets/hooks/useListFilters.mjs.map +1 -0
  161. package/dist/admin/future/pages/Assets/utils/buildAssetFilters.js +201 -0
  162. package/dist/admin/future/pages/Assets/utils/buildAssetFilters.js.map +1 -0
  163. package/dist/admin/future/pages/Assets/utils/buildAssetFilters.mjs +198 -0
  164. package/dist/admin/future/pages/Assets/utils/buildAssetFilters.mjs.map +1 -0
  165. package/dist/admin/future/pages/Assets/utils/listQueryKey.js +2 -2
  166. package/dist/admin/future/pages/Assets/utils/listQueryKey.js.map +1 -1
  167. package/dist/admin/future/pages/Assets/utils/listQueryKey.mjs +2 -2
  168. package/dist/admin/future/pages/Assets/utils/listQueryKey.mjs.map +1 -1
  169. package/dist/admin/future/services/api.js +187 -28
  170. package/dist/admin/future/services/api.js.map +1 -1
  171. package/dist/admin/future/services/api.mjs +187 -30
  172. package/dist/admin/future/services/api.mjs.map +1 -1
  173. package/dist/admin/future/services/assets.js +40 -17
  174. package/dist/admin/future/services/assets.js.map +1 -1
  175. package/dist/admin/future/services/assets.mjs +40 -17
  176. package/dist/admin/future/services/assets.mjs.map +1 -1
  177. package/dist/admin/future/services/folders.js +66 -19
  178. package/dist/admin/future/services/folders.js.map +1 -1
  179. package/dist/admin/future/services/folders.mjs +66 -20
  180. package/dist/admin/future/services/folders.mjs.map +1 -1
  181. package/dist/admin/future/services/settings.js +10 -3
  182. package/dist/admin/future/services/settings.js.map +1 -1
  183. package/dist/admin/future/services/settings.mjs +10 -3
  184. package/dist/admin/future/services/settings.mjs.map +1 -1
  185. package/dist/admin/future/store/uploadProgress.js +109 -2
  186. package/dist/admin/future/store/uploadProgress.js.map +1 -1
  187. package/dist/admin/future/store/uploadProgress.mjs +105 -3
  188. package/dist/admin/future/store/uploadProgress.mjs.map +1 -1
  189. package/dist/admin/future/utils/buildDragSetFromSelection.js +7 -5
  190. package/dist/admin/future/utils/buildDragSetFromSelection.js.map +1 -1
  191. package/dist/admin/future/utils/buildDragSetFromSelection.mjs +7 -5
  192. package/dist/admin/future/utils/buildDragSetFromSelection.mjs.map +1 -1
  193. package/dist/admin/future/utils/formatMoveSuccessMessage.js +12 -1
  194. package/dist/admin/future/utils/formatMoveSuccessMessage.js.map +1 -1
  195. package/dist/admin/future/utils/formatMoveSuccessMessage.mjs +12 -1
  196. package/dist/admin/future/utils/formatMoveSuccessMessage.mjs.map +1 -1
  197. package/dist/admin/future/utils/getRelationId.js +24 -0
  198. package/dist/admin/future/utils/getRelationId.js.map +1 -0
  199. package/dist/admin/future/utils/getRelationId.mjs +22 -0
  200. package/dist/admin/future/utils/getRelationId.mjs.map +1 -0
  201. package/dist/admin/future/utils/isEventFromWithin.js +14 -0
  202. package/dist/admin/future/utils/isEventFromWithin.js.map +1 -0
  203. package/dist/admin/future/utils/isEventFromWithin.mjs +12 -0
  204. package/dist/admin/future/utils/isEventFromWithin.mjs.map +1 -0
  205. package/dist/admin/future/utils/itemLocations.js +40 -0
  206. package/dist/admin/future/utils/itemLocations.js.map +1 -0
  207. package/dist/admin/future/utils/itemLocations.mjs +36 -0
  208. package/dist/admin/future/utils/itemLocations.mjs.map +1 -0
  209. package/dist/admin/future/utils/itemSource.js +36 -0
  210. package/dist/admin/future/utils/itemSource.js.map +1 -0
  211. package/dist/admin/future/utils/itemSource.mjs +32 -0
  212. package/dist/admin/future/utils/itemSource.mjs.map +1 -0
  213. package/dist/admin/future/utils/searchQueryParam.js +11 -0
  214. package/dist/admin/future/utils/searchQueryParam.js.map +1 -0
  215. package/dist/admin/future/utils/searchQueryParam.mjs +9 -0
  216. package/dist/admin/future/utils/searchQueryParam.mjs.map +1 -0
  217. package/dist/admin/hooks/useSelectionState.js +2 -4
  218. package/dist/admin/hooks/useSelectionState.js.map +1 -1
  219. package/dist/admin/hooks/useSelectionState.mjs +2 -4
  220. package/dist/admin/hooks/useSelectionState.mjs.map +1 -1
  221. package/dist/admin/index.js +11 -17
  222. package/dist/admin/index.js.map +1 -1
  223. package/dist/admin/index.mjs +12 -18
  224. package/dist/admin/index.mjs.map +1 -1
  225. package/dist/admin/shared/constants.js +43 -0
  226. package/dist/admin/shared/constants.js.map +1 -0
  227. package/dist/admin/shared/constants.mjs +38 -0
  228. package/dist/admin/shared/constants.mjs.map +1 -0
  229. package/dist/admin/src/future/App.d.ts +1 -1
  230. package/dist/admin/src/future/components/BetaNotice.d.ts +11 -0
  231. package/dist/admin/src/future/components/Drawer.d.ts +5 -1
  232. package/dist/admin/src/future/hooks/useAIMetadataEnabled.d.ts +26 -0
  233. package/dist/admin/src/future/hooks/useMediaLibraryPermissions.d.ts +21 -0
  234. package/dist/admin/src/future/pages/Assets/components/ActionsMenuContent.d.ts +33 -0
  235. package/dist/admin/src/future/pages/Assets/components/AssetActionsMenu.d.ts +24 -0
  236. package/dist/admin/src/future/pages/Assets/components/AssetDetails/AssetCropEditor.d.ts +7 -1
  237. package/dist/admin/src/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.d.ts +16 -0
  238. package/dist/admin/src/future/pages/Assets/components/AssetsSearchInput.d.ts +5 -0
  239. package/dist/admin/src/future/pages/Assets/components/BulkActionsBar.d.ts +21 -1
  240. package/dist/admin/src/future/pages/Assets/components/BulkMoveDialog.d.ts +17 -6
  241. package/dist/admin/src/future/pages/Assets/components/BusyOverlay.d.ts +9 -0
  242. package/dist/admin/src/future/pages/Assets/components/DateRangeCalendar.d.ts +8 -0
  243. package/dist/admin/src/future/pages/Assets/components/DeleteItemsDialog.d.ts +27 -0
  244. package/dist/admin/src/future/pages/Assets/components/Dnd/AssetsDndProvider.d.ts +8 -1
  245. package/dist/admin/src/future/pages/Assets/components/Dnd/buildDragSet.d.ts +18 -3
  246. package/dist/admin/src/future/pages/Assets/components/Dnd/useAssetDnd.d.ts +2 -1
  247. package/dist/admin/src/future/pages/Assets/components/DropZone/UploadDropZoneContext.d.ts +8 -1
  248. package/dist/admin/src/future/pages/Assets/components/EmptyState.d.ts +18 -1
  249. package/dist/admin/src/future/pages/Assets/components/FilterBadges.d.ts +8 -0
  250. package/dist/admin/src/future/pages/Assets/components/FilterMenu.d.ts +26 -0
  251. package/dist/admin/src/future/pages/Assets/components/FolderActionsMenu.d.ts +20 -0
  252. package/dist/admin/src/future/pages/Assets/components/FolderFormDialog.d.ts +16 -0
  253. package/dist/admin/src/future/pages/Assets/components/FolderTree/FolderTree.d.ts +13 -4
  254. package/dist/admin/src/future/pages/Assets/components/SortMenu.d.ts +6 -0
  255. package/dist/admin/src/future/pages/Assets/hooks/useAssetSearch.d.ts +12 -0
  256. package/dist/admin/src/future/pages/Assets/hooks/useAssetSelection.d.ts +8 -1
  257. package/dist/admin/src/future/pages/Assets/hooks/useBusyAssets.d.ts +38 -0
  258. package/dist/admin/src/future/pages/Assets/hooks/useInfiniteAssets.d.ts +27 -3
  259. package/dist/admin/src/future/pages/Assets/hooks/useInfiniteScrollSentinel.d.ts +41 -0
  260. package/dist/admin/src/future/pages/Assets/hooks/useListFilters.d.ts +69 -0
  261. package/dist/admin/src/future/pages/Assets/utils/buildAssetFilters.d.ts +46 -0
  262. package/dist/admin/src/future/pages/Assets/utils/listQueryKey.d.ts +3 -4
  263. package/dist/admin/src/future/services/api.d.ts +53 -5
  264. package/dist/admin/src/future/services/assets.d.ts +9 -1
  265. package/dist/admin/src/future/services/folders.d.ts +9 -1
  266. package/dist/admin/src/future/services/settings.d.ts +2 -2
  267. package/dist/admin/src/future/store/uploadProgress.d.ts +83 -1
  268. package/dist/admin/src/future/utils/buildDragSetFromSelection.d.ts +4 -3
  269. package/dist/admin/src/future/utils/formatMoveSuccessMessage.d.ts +7 -1
  270. package/dist/admin/src/future/utils/getRelationId.d.ts +11 -0
  271. package/dist/admin/src/future/utils/isEventFromWithin.d.ts +11 -0
  272. package/dist/admin/src/future/utils/itemLocations.d.ts +31 -0
  273. package/dist/admin/src/future/utils/itemSource.d.ts +22 -0
  274. package/dist/admin/src/future/utils/searchQueryParam.d.ts +7 -0
  275. package/dist/admin/src/hooks/useAiAvailability.d.ts +1 -1
  276. package/dist/admin/src/hooks/useEditAsset.d.ts +4 -4
  277. package/dist/admin/src/hooks/useEditFolder.d.ts +4 -4
  278. package/dist/admin/src/hooks/useSettings.d.ts +1 -0
  279. package/dist/admin/src/hooks/useTracking.d.ts +1 -1
  280. package/dist/admin/src/hooks/useUpload.d.ts +1 -1
  281. package/dist/admin/translations/en.json.js +73 -2
  282. package/dist/admin/translations/en.json.js.map +1 -1
  283. package/dist/admin/translations/en.json.mjs +73 -2
  284. package/dist/admin/translations/en.json.mjs.map +1 -1
  285. package/dist/admin/utils/urlYupSchema.js +33 -9
  286. package/dist/admin/utils/urlYupSchema.js.map +1 -1
  287. package/dist/admin/utils/urlYupSchema.mjs +33 -9
  288. package/dist/admin/utils/urlYupSchema.mjs.map +1 -1
  289. package/dist/server/config.js +13 -5
  290. package/dist/server/config.js.map +1 -1
  291. package/dist/server/config.mjs +13 -5
  292. package/dist/server/config.mjs.map +1 -1
  293. package/dist/server/constants.js.map +1 -1
  294. package/dist/server/constants.mjs.map +1 -1
  295. package/dist/server/controllers/admin-file.js +30 -0
  296. package/dist/server/controllers/admin-file.js.map +1 -1
  297. package/dist/server/controllers/admin-file.mjs +30 -0
  298. package/dist/server/controllers/admin-file.mjs.map +1 -1
  299. package/dist/server/controllers/admin-settings.js +20 -2
  300. package/dist/server/controllers/admin-settings.js.map +1 -1
  301. package/dist/server/controllers/admin-settings.mjs +21 -3
  302. package/dist/server/controllers/admin-settings.mjs.map +1 -1
  303. package/dist/server/controllers/content-api.js +1 -2
  304. package/dist/server/controllers/content-api.js.map +1 -1
  305. package/dist/server/controllers/content-api.mjs +2 -2
  306. package/dist/server/controllers/content-api.mjs.map +1 -1
  307. package/dist/server/controllers/validation/admin/ai-metadata.js +12 -0
  308. package/dist/server/controllers/validation/admin/ai-metadata.js.map +1 -0
  309. package/dist/server/controllers/validation/admin/ai-metadata.mjs +10 -0
  310. package/dist/server/controllers/validation/admin/ai-metadata.mjs.map +1 -0
  311. package/dist/server/controllers/validation/admin/settings.js +4 -1
  312. package/dist/server/controllers/validation/admin/settings.js.map +1 -1
  313. package/dist/server/controllers/validation/admin/settings.mjs +1 -1
  314. package/dist/server/controllers/validation/admin/settings.mjs.map +1 -1
  315. package/dist/server/routes/admin.js +18 -0
  316. package/dist/server/routes/admin.js.map +1 -1
  317. package/dist/server/routes/admin.mjs +18 -0
  318. package/dist/server/routes/admin.mjs.map +1 -1
  319. package/dist/server/services/ai-metadata.js +108 -11
  320. package/dist/server/services/ai-metadata.js.map +1 -1
  321. package/dist/server/services/ai-metadata.mjs +108 -11
  322. package/dist/server/services/ai-metadata.mjs.map +1 -1
  323. package/dist/server/services/file.js +86 -13
  324. package/dist/server/services/file.js.map +1 -1
  325. package/dist/server/services/file.mjs +87 -14
  326. package/dist/server/services/file.mjs.map +1 -1
  327. package/dist/server/services/image-manipulation.js +4 -4
  328. package/dist/server/services/image-manipulation.js.map +1 -1
  329. package/dist/server/services/image-manipulation.mjs +4 -4
  330. package/dist/server/services/image-manipulation.mjs.map +1 -1
  331. package/dist/server/shared/constants.js +43 -0
  332. package/dist/server/shared/constants.js.map +1 -0
  333. package/dist/server/shared/constants.mjs +38 -0
  334. package/dist/server/shared/constants.mjs.map +1 -0
  335. package/dist/server/src/config.d.ts +2 -0
  336. package/dist/server/src/config.d.ts.map +1 -1
  337. package/dist/server/src/constants.d.ts +2 -1
  338. package/dist/server/src/constants.d.ts.map +1 -1
  339. package/dist/server/src/controllers/admin-file.d.ts +10 -0
  340. package/dist/server/src/controllers/admin-file.d.ts.map +1 -1
  341. package/dist/server/src/controllers/admin-settings.d.ts.map +1 -1
  342. package/dist/server/src/controllers/index.d.ts +1 -0
  343. package/dist/server/src/controllers/index.d.ts.map +1 -1
  344. package/dist/server/src/controllers/validation/admin/ai-metadata.d.ts +2 -0
  345. package/dist/server/src/controllers/validation/admin/ai-metadata.d.ts.map +1 -0
  346. package/dist/server/src/controllers/validation/admin/settings.d.ts +1 -1
  347. package/dist/server/src/controllers/validation/admin/settings.d.ts.map +1 -1
  348. package/dist/server/src/index.d.ts +7 -1
  349. package/dist/server/src/index.d.ts.map +1 -1
  350. package/dist/server/src/routes/admin.d.ts.map +1 -1
  351. package/dist/server/src/services/ai-metadata.d.ts +19 -0
  352. package/dist/server/src/services/ai-metadata.d.ts.map +1 -1
  353. package/dist/server/src/services/file.d.ts +12 -2
  354. package/dist/server/src/services/file.d.ts.map +1 -1
  355. package/dist/server/src/services/image-manipulation.d.ts +0 -5
  356. package/dist/server/src/services/image-manipulation.d.ts.map +1 -1
  357. package/dist/server/src/services/index.d.ts +4 -1
  358. package/dist/server/src/services/index.d.ts.map +1 -1
  359. package/dist/server/src/types.d.ts +3 -0
  360. package/dist/server/src/types.d.ts.map +1 -1
  361. package/dist/shared/constants.d.ts +35 -0
  362. package/dist/shared/constants.d.ts.map +1 -0
  363. package/dist/shared/contracts/files.d.ts +25 -0
  364. package/dist/shared/contracts/files.d.ts.map +1 -1
  365. package/dist/shared/contracts/settings.d.ts +7 -0
  366. package/package.json +10 -10
  367. package/dist/admin/future/pages/Assets/components/CreateFolderDialog.js.map +0 -1
  368. package/dist/admin/future/pages/Assets/components/CreateFolderDialog.mjs.map +0 -1
  369. package/dist/admin/src/future/pages/Assets/components/CreateFolderDialog.d.ts +0 -8
@@ -0,0 +1,447 @@
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import { useState } from 'react';
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';
6
+ import { useIntl } from 'react-intl';
7
+ import { styled } from 'styled-components';
8
+ import { getTranslationKey } from '../../../utils/translations.mjs';
9
+ import { TYPE_VALUES, DATE_PRESETS } from '../hooks/useListFilters.mjs';
10
+ import { DateRangeCalendar } from './DateRangeCalendar.mjs';
11
+
12
+ const TYPE_LABELS = {
13
+ folder: {
14
+ id: getTranslationKey('list.filters.type.folder'),
15
+ defaultMessage: 'Folder'
16
+ },
17
+ picture: {
18
+ id: getTranslationKey('list.filters.type.picture'),
19
+ defaultMessage: 'Picture'
20
+ },
21
+ audio: {
22
+ id: getTranslationKey('list.filters.type.audio'),
23
+ defaultMessage: 'Audio'
24
+ },
25
+ video: {
26
+ id: getTranslationKey('list.filters.type.video'),
27
+ defaultMessage: 'Video'
28
+ },
29
+ document: {
30
+ id: getTranslationKey('list.filters.type.document'),
31
+ defaultMessage: 'Document'
32
+ }
33
+ };
34
+ const PRESET_LABELS = {
35
+ '1day': {
36
+ id: getTranslationKey('list.filters.preset.1day'),
37
+ defaultMessage: '1 day ago'
38
+ },
39
+ '3days': {
40
+ id: getTranslationKey('list.filters.preset.3days'),
41
+ defaultMessage: '3 days ago'
42
+ },
43
+ '1week': {
44
+ id: getTranslationKey('list.filters.preset.1week'),
45
+ defaultMessage: '1 week ago'
46
+ },
47
+ '1month': {
48
+ id: getTranslationKey('list.filters.preset.1month'),
49
+ defaultMessage: '1 month ago'
50
+ },
51
+ '3months': {
52
+ id: getTranslationKey('list.filters.preset.3months'),
53
+ defaultMessage: '3 months ago'
54
+ },
55
+ '6months': {
56
+ id: getTranslationKey('list.filters.preset.6months'),
57
+ defaultMessage: '6 months ago'
58
+ },
59
+ '1year': {
60
+ id: getTranslationKey('list.filters.preset.1year'),
61
+ defaultMessage: '1 year ago'
62
+ }
63
+ };
64
+ const DATE_FIELD_LABELS = {
65
+ createdAt: {
66
+ id: getTranslationKey('list.filters.field.created'),
67
+ defaultMessage: 'Creation date'
68
+ },
69
+ updatedAt: {
70
+ id: getTranslationKey('list.filters.field.updated'),
71
+ defaultMessage: 'Last modified'
72
+ }
73
+ };
74
+ // The DS SubTrigger renders its chevron inline right after the label — push it
75
+ // to the far edge so every field row reads label · · · ›, like the mock.
76
+ const FieldSubTrigger = styled(Menu.SubTrigger)`
77
+ width: 100%;
78
+ justify-content: space-between;
79
+ `;
80
+ /** Every panel of the filter tree shares this fixed width (design). */ const FILTER_PANEL_WIDTH = '24.2rem';
81
+ // dvh, not vh: on a phone `vh` ignores the browser chrome, so a 70vh panel can
82
+ // extend past the visual viewport and leave its lower rows (the last field, and
83
+ // anything under the date-range calendar) stranded under the URL bar with no way
84
+ // to scroll to them. Same reason the drawer caps on dvh.
85
+ const PANEL_MAX_HEIGHT = '70dvh';
86
+ // Mobile uses one flat panel (accordion), so it never needs room for a side
87
+ // flyout — cap it to the viewport so it can't overflow a narrow screen.
88
+ const MOBILE_PANEL_WIDTH = `min(${FILTER_PANEL_WIDTH}, calc(100dvw - 2rem))`;
89
+ // Mobile accordion: the field row is a plain menu item that expands its options
90
+ // inline below it (Radix sub-menus can only fly out sideways, off a phone).
91
+ const FieldToggle = styled(Menu.Item)`
92
+ width: 100%;
93
+ `;
94
+ // The options revealed under a field row.
95
+ //
96
+ // `width: 100%` is load-bearing: Menu.Content is a column flex with
97
+ // `align-items: flex-start`, so a child shrink-wraps to its content unless it
98
+ // sets a width explicitly. Without it the group collapsed to the widest option
99
+ // label and the rows' own `width: 100%` resolved against that, so a selected row
100
+ // highlighted only part of the panel.
101
+ //
102
+ // The indent then lives on each row's padding rather than on this wrapper —
103
+ // padding here would inset the rows, and the highlight with them.
104
+ const OptionGroup = styled(Box)`
105
+ width: 100%;
106
+
107
+ > * {
108
+ width: 100%;
109
+ }
110
+
111
+ /* menuitem, menuitemradio and menuitemcheckbox — every option row, plus the
112
+ "Select date range" toggle, which sits at the same level. */
113
+ > [role^='menuitem'] {
114
+ padding-left: ${({ theme })=>theme.spaces[6]};
115
+ }
116
+ `;
117
+ // Rotates the chevron when its section is open.
118
+ const Chevron = styled(ChevronDown)`
119
+ transition: transform 0.2s ease;
120
+ transform: rotate(${({ $open })=>$open ? '180deg' : '0deg'});
121
+ `;
122
+ // Sub panels: fixed width, no 15rem clamp (the DS default folds the calendar),
123
+ // and a negative top margin cancelling the parent panel's padding + border so
124
+ // the sub panel's top edge lines up with the parent panel, not the item.
125
+ const SubPanel = styled(Menu.SubContent)`
126
+ margin-top: calc(-1 * (${({ theme })=>theme.spaces[1]} + 1px));
127
+ `;
128
+ const CountBadge = styled(Badge)`
129
+ height: 1.6rem;
130
+ min-width: auto;
131
+ padding: 0 0.4rem;
132
+ `;
133
+ /**
134
+ * Toolbar "Filter" dropdown. Picking anything ADDS a badge (editing happens on
135
+ * the badge itself, see FilterBadges):
136
+ *
137
+ * - Type → keep-open checkbox list; the badge is created/updated live with the
138
+ * checked set (`is` by default, condition editable on the badge).
139
+ * - Creation date / Last modified → preset list (single pick, `within the
140
+ * last` by default) + "Select date range" (creation date only) opening the
141
+ * range calendar; a completed range adds an `is` range badge.
142
+ *
143
+ * Closing behaviour follows how many values a field can hold: a date is one
144
+ * value, so picking a preset (or committing a range) closes the menu; Type is a
145
+ * set, so it stays open until dismissed.
146
+ */ const FilterMenu = ({ listFilters })=>{
147
+ const { formatMessage } = useIntl();
148
+ const [isOpen, setIsOpen] = useState(false);
149
+ const { filters, addFilter, updateFilter, removeFilter } = listFilters;
150
+ // The Type submenu edits the LAST type badge in place while the menu stays
151
+ // open (checking values accumulates into one badge, per design).
152
+ let lastTypeIndex = -1;
153
+ for(let i = filters.length - 1; i >= 0; i -= 1){
154
+ if (filters[i].kind === 'type') {
155
+ lastTypeIndex = i;
156
+ break;
157
+ }
158
+ }
159
+ const lastTypeFilter = lastTypeIndex >= 0 ? filters[lastTypeIndex] : null;
160
+ const checkedValues = lastTypeFilter && lastTypeFilter.kind === 'type' ? lastTypeFilter.values : [];
161
+ const toggleTypeValue = (value)=>{
162
+ const nextValues = checkedValues.includes(value) ? checkedValues.filter((v)=>v !== value) : [
163
+ ...checkedValues,
164
+ value
165
+ ];
166
+ if (lastTypeFilter && lastTypeFilter.kind === 'type') {
167
+ if (nextValues.length === 0) {
168
+ // Unchecking the final value removes the badge outright — a type
169
+ // filter with no values is not a state (it would serialize to a
170
+ // malformed `type:is:` the parser drops anyway).
171
+ removeFilter(lastTypeIndex);
172
+ } else {
173
+ updateFilter(lastTypeIndex, {
174
+ ...lastTypeFilter,
175
+ values: nextValues
176
+ });
177
+ }
178
+ } else if (nextValues.length > 0) {
179
+ addFilter({
180
+ kind: 'type',
181
+ condition: 'is',
182
+ values: nextValues
183
+ });
184
+ }
185
+ };
186
+ // Creation date / Last modified are single-select (per design): selecting a
187
+ // preset replaces the field's existing preset badge in place (keeping its
188
+ // condition) rather than adding another pill; a badge is created only when the
189
+ // field has none yet.
190
+ const addPreset = (field, preset)=>{
191
+ for(let i = filters.length - 1; i >= 0; i -= 1){
192
+ const f = filters[i];
193
+ if (f.kind === 'date' && f.mode === 'preset' && f.field === field) {
194
+ updateFilter(i, {
195
+ ...f,
196
+ preset
197
+ });
198
+ return;
199
+ }
200
+ }
201
+ addFilter({
202
+ kind: 'date',
203
+ field,
204
+ mode: 'preset',
205
+ condition: 'withinLast',
206
+ preset
207
+ });
208
+ };
209
+ const addRange = (from, to)=>{
210
+ addFilter({
211
+ kind: 'date',
212
+ field: 'createdAt',
213
+ mode: 'range',
214
+ condition: 'is',
215
+ from,
216
+ to
217
+ });
218
+ // The calendar is not a Menu.Item — close the menu explicitly on commit.
219
+ setIsOpen(false);
220
+ };
221
+ const isMobile = useIsMobile();
222
+ // Mobile accordion state: which field is expanded, and whether its date-range
223
+ // calendar is open. Both reset when the whole menu closes.
224
+ const [openField, setOpenField] = useState(null);
225
+ const [rangeOpen, setRangeOpen] = useState(false);
226
+ const handleOpenChange = (next)=>{
227
+ setIsOpen(next);
228
+ if (!next) {
229
+ setOpenField(null);
230
+ setRangeOpen(false);
231
+ }
232
+ };
233
+ const toggleField = (field)=>{
234
+ setOpenField((current)=>current === field ? null : field);
235
+ setRangeOpen(false);
236
+ };
237
+ // Option lists, shared by the desktop flyouts and the mobile accordion.
238
+ // Multi-select semantics: menuitemcheckbox + aria-checked carry the state for
239
+ // assistive tech; the Checkbox is purely decorative (aria-hidden, unfocusable)
240
+ // — the Menu.Item is the control.
241
+ const typeItems = TYPE_VALUES.map((value)=>/*#__PURE__*/ jsx(Menu.Item, {
242
+ role: "menuitemcheckbox",
243
+ "aria-checked": checkedValues.includes(value),
244
+ onSelect: (e)=>{
245
+ e.preventDefault();
246
+ toggleTypeValue(value);
247
+ },
248
+ startIcon: /*#__PURE__*/ jsx(Checkbox, {
249
+ checked: checkedValues.includes(value),
250
+ tabIndex: -1,
251
+ "aria-hidden": true
252
+ }),
253
+ children: formatMessage(TYPE_LABELS[value])
254
+ }, value));
255
+ // The field's currently-selected preset (single-select), so the menu can mark
256
+ // it with a check.
257
+ const selectedPresetForField = (field)=>{
258
+ for(let i = filters.length - 1; i >= 0; i -= 1){
259
+ const f = filters[i];
260
+ if (f.kind === 'date' && f.mode === 'preset' && f.field === field) {
261
+ return f.preset;
262
+ }
263
+ }
264
+ return null;
265
+ };
266
+ const presetItems = (field)=>{
267
+ const selected = selectedPresetForField(field);
268
+ return DATE_PRESETS.map((preset)=>/*#__PURE__*/ jsx(Menu.Item, {
269
+ role: "menuitemradio",
270
+ "aria-checked": selected === preset,
271
+ onSelect: ()=>{
272
+ // No preventDefault, unlike Type: a date field holds exactly one
273
+ // value, so the pick is complete and the menu closes on it. Type stays
274
+ // open because the user may still be building up a multi-value set.
275
+ addPreset(field, preset);
276
+ },
277
+ endIcon: selected === preset ? /*#__PURE__*/ jsx(Check, {
278
+ "aria-hidden": true,
279
+ width: "1.6rem",
280
+ height: "1.6rem",
281
+ fill: "primary600"
282
+ }) : null,
283
+ children: formatMessage(PRESET_LABELS[preset])
284
+ }, preset));
285
+ };
286
+ const typeLabel = formatMessage({
287
+ id: getTranslationKey('list.filters.field.type'),
288
+ defaultMessage: 'Type'
289
+ });
290
+ const selectDateRangeLabel = formatMessage({
291
+ id: getTranslationKey('list.filters.select-date-range'),
292
+ defaultMessage: 'Select date range'
293
+ });
294
+ return /*#__PURE__*/ jsxs(Menu.Root, {
295
+ open: isOpen,
296
+ onOpenChange: handleOpenChange,
297
+ children: [
298
+ /*#__PURE__*/ jsx(Menu.Trigger, {
299
+ variant: "tertiary",
300
+ startIcon: /*#__PURE__*/ jsx(Filter, {
301
+ "aria-hidden": true
302
+ }),
303
+ endIcon: null,
304
+ children: /*#__PURE__*/ jsxs(Flex, {
305
+ gap: 2,
306
+ alignItems: "center",
307
+ tag: "span",
308
+ children: [
309
+ formatMessage({
310
+ id: getTranslationKey('list.filters.trigger'),
311
+ defaultMessage: 'Filter'
312
+ }),
313
+ filters.length > 0 && /*#__PURE__*/ jsx(CountBadge, {
314
+ children: filters.length
315
+ })
316
+ ]
317
+ })
318
+ }),
319
+ /*#__PURE__*/ jsx(Menu.Content, {
320
+ popoverPlacement: "bottom-start",
321
+ zIndex: 2,
322
+ maxHeight: PANEL_MAX_HEIGHT,
323
+ width: isMobile ? MOBILE_PANEL_WIDTH : FILTER_PANEL_WIDTH,
324
+ children: isMobile ? // Mobile: one flat panel. Each field expands its options inline below
325
+ // itself — Radix sub-menus can only fly out sideways, off a phone.
326
+ /*#__PURE__*/ jsxs(Fragment, {
327
+ children: [
328
+ /*#__PURE__*/ jsx(FieldToggle, {
329
+ "aria-expanded": openField === 'type',
330
+ onSelect: (e)=>{
331
+ e.preventDefault();
332
+ toggleField('type');
333
+ },
334
+ endIcon: /*#__PURE__*/ jsx(Chevron, {
335
+ $open: openField === 'type',
336
+ "aria-hidden": true
337
+ }),
338
+ children: typeLabel
339
+ }),
340
+ openField === 'type' && /*#__PURE__*/ jsx(OptionGroup, {
341
+ children: typeItems
342
+ }),
343
+ [
344
+ 'createdAt',
345
+ 'updatedAt'
346
+ ].map((field)=>/*#__PURE__*/ jsxs(Box, {
347
+ width: "100%",
348
+ children: [
349
+ /*#__PURE__*/ jsx(FieldToggle, {
350
+ "aria-expanded": openField === field,
351
+ onSelect: (e)=>{
352
+ e.preventDefault();
353
+ toggleField(field);
354
+ },
355
+ endIcon: /*#__PURE__*/ jsx(Chevron, {
356
+ $open: openField === field,
357
+ "aria-hidden": true
358
+ }),
359
+ children: formatMessage(DATE_FIELD_LABELS[field])
360
+ }),
361
+ openField === field && /*#__PURE__*/ jsxs(OptionGroup, {
362
+ children: [
363
+ presetItems(field),
364
+ field === 'createdAt' && /*#__PURE__*/ jsxs(Fragment, {
365
+ children: [
366
+ /*#__PURE__*/ jsx(FieldToggle, {
367
+ "aria-expanded": rangeOpen,
368
+ onSelect: (e)=>{
369
+ e.preventDefault();
370
+ setRangeOpen((open)=>!open);
371
+ },
372
+ endIcon: /*#__PURE__*/ jsx(Chevron, {
373
+ $open: rangeOpen,
374
+ "aria-hidden": true
375
+ }),
376
+ children: selectDateRangeLabel
377
+ }),
378
+ rangeOpen && /*#__PURE__*/ jsx(Box, {
379
+ paddingLeft: 2,
380
+ children: /*#__PURE__*/ jsx(DateRangeCalendar, {
381
+ onSelect: addRange
382
+ })
383
+ })
384
+ ]
385
+ })
386
+ ]
387
+ })
388
+ ]
389
+ }, field))
390
+ ]
391
+ }) : /*#__PURE__*/ jsxs(Fragment, {
392
+ children: [
393
+ /*#__PURE__*/ jsxs(Menu.SubRoot, {
394
+ children: [
395
+ /*#__PURE__*/ jsx(FieldSubTrigger, {
396
+ children: typeLabel
397
+ }),
398
+ /*#__PURE__*/ jsx(SubPanel, {
399
+ zIndex: 2,
400
+ maxHeight: PANEL_MAX_HEIGHT,
401
+ width: FILTER_PANEL_WIDTH,
402
+ children: typeItems
403
+ })
404
+ ]
405
+ }),
406
+ [
407
+ 'createdAt',
408
+ 'updatedAt'
409
+ ].map((field)=>/*#__PURE__*/ jsxs(Menu.SubRoot, {
410
+ children: [
411
+ /*#__PURE__*/ jsx(FieldSubTrigger, {
412
+ children: formatMessage(DATE_FIELD_LABELS[field])
413
+ }),
414
+ /*#__PURE__*/ jsxs(SubPanel, {
415
+ zIndex: 2,
416
+ maxHeight: PANEL_MAX_HEIGHT,
417
+ width: FILTER_PANEL_WIDTH,
418
+ children: [
419
+ presetItems(field),
420
+ field === 'createdAt' && /*#__PURE__*/ jsxs(Menu.SubRoot, {
421
+ children: [
422
+ /*#__PURE__*/ jsx(FieldSubTrigger, {
423
+ children: selectDateRangeLabel
424
+ }),
425
+ /*#__PURE__*/ jsx(SubPanel, {
426
+ zIndex: 2,
427
+ maxHeight: "none",
428
+ width: FILTER_PANEL_WIDTH,
429
+ children: /*#__PURE__*/ jsx(DateRangeCalendar, {
430
+ onSelect: addRange
431
+ })
432
+ })
433
+ ]
434
+ })
435
+ ]
436
+ })
437
+ ]
438
+ }, field))
439
+ ]
440
+ })
441
+ })
442
+ ]
443
+ });
444
+ };
445
+
446
+ export { DATE_FIELD_LABELS, FILTER_PANEL_WIDTH, FilterMenu, PRESET_LABELS, TYPE_LABELS };
447
+ //# sourceMappingURL=FilterMenu.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterMenu.mjs","sources":["../../../../../../admin/src/future/pages/Assets/components/FilterMenu.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { useIsMobile } from '@strapi/admin/strapi-admin';\nimport { Badge, Box, Checkbox, Flex, Menu } from '@strapi/design-system';\nimport { Check, ChevronDown, Filter as FilterIcon } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { getTranslationKey } from '../../../utils/translations';\nimport {\n DATE_PRESETS,\n TYPE_VALUES,\n type DateField,\n type DatePreset,\n type ListFilters,\n type TypeValue,\n} from '../hooks/useListFilters';\n\nimport { DateRangeCalendar } from './DateRangeCalendar';\n\nimport type { MessageDescriptor } from 'react-intl';\n\nexport const TYPE_LABELS: Record<TypeValue, MessageDescriptor> = {\n folder: { id: getTranslationKey('list.filters.type.folder'), defaultMessage: 'Folder' },\n picture: { id: getTranslationKey('list.filters.type.picture'), defaultMessage: 'Picture' },\n audio: { id: getTranslationKey('list.filters.type.audio'), defaultMessage: 'Audio' },\n video: { id: getTranslationKey('list.filters.type.video'), defaultMessage: 'Video' },\n document: { id: getTranslationKey('list.filters.type.document'), defaultMessage: 'Document' },\n};\n\nexport const PRESET_LABELS: Record<DatePreset, MessageDescriptor> = {\n '1day': { id: getTranslationKey('list.filters.preset.1day'), defaultMessage: '1 day ago' },\n '3days': { id: getTranslationKey('list.filters.preset.3days'), defaultMessage: '3 days ago' },\n '1week': { id: getTranslationKey('list.filters.preset.1week'), defaultMessage: '1 week ago' },\n '1month': { id: getTranslationKey('list.filters.preset.1month'), defaultMessage: '1 month ago' },\n '3months': {\n id: getTranslationKey('list.filters.preset.3months'),\n defaultMessage: '3 months ago',\n },\n '6months': {\n id: getTranslationKey('list.filters.preset.6months'),\n defaultMessage: '6 months ago',\n },\n '1year': { id: getTranslationKey('list.filters.preset.1year'), defaultMessage: '1 year ago' },\n};\n\nexport const DATE_FIELD_LABELS: Record<DateField, MessageDescriptor> = {\n createdAt: {\n id: getTranslationKey('list.filters.field.created'),\n defaultMessage: 'Creation date',\n },\n updatedAt: {\n id: getTranslationKey('list.filters.field.updated'),\n defaultMessage: 'Last modified',\n },\n};\n\n// The DS SubTrigger renders its chevron inline right after the label — push it\n// to the far edge so every field row reads label · · · ›, like the mock.\nconst FieldSubTrigger = styled(Menu.SubTrigger)`\n width: 100%;\n justify-content: space-between;\n`;\n\n/** Every panel of the filter tree shares this fixed width (design). */\nexport const FILTER_PANEL_WIDTH = '24.2rem';\n\n// dvh, not vh: on a phone `vh` ignores the browser chrome, so a 70vh panel can\n// extend past the visual viewport and leave its lower rows (the last field, and\n// anything under the date-range calendar) stranded under the URL bar with no way\n// to scroll to them. Same reason the drawer caps on dvh.\nconst PANEL_MAX_HEIGHT = '70dvh';\n\n// Mobile uses one flat panel (accordion), so it never needs room for a side\n// flyout — cap it to the viewport so it can't overflow a narrow screen.\nconst MOBILE_PANEL_WIDTH = `min(${FILTER_PANEL_WIDTH}, calc(100dvw - 2rem))`;\n\n// Mobile accordion: the field row is a plain menu item that expands its options\n// inline below it (Radix sub-menus can only fly out sideways, off a phone).\nconst FieldToggle = styled(Menu.Item)`\n width: 100%;\n`;\n\n// The options revealed under a field row.\n//\n// `width: 100%` is load-bearing: Menu.Content is a column flex with\n// `align-items: flex-start`, so a child shrink-wraps to its content unless it\n// sets a width explicitly. Without it the group collapsed to the widest option\n// label and the rows' own `width: 100%` resolved against that, so a selected row\n// highlighted only part of the panel.\n//\n// The indent then lives on each row's padding rather than on this wrapper —\n// padding here would inset the rows, and the highlight with them.\nconst OptionGroup = styled(Box)`\n width: 100%;\n\n > * {\n width: 100%;\n }\n\n /* menuitem, menuitemradio and menuitemcheckbox — every option row, plus the\n \"Select date range\" toggle, which sits at the same level. */\n > [role^='menuitem'] {\n padding-left: ${({ theme }) => theme.spaces[6]};\n }\n`;\n\n// Rotates the chevron when its section is open.\nconst Chevron = styled(ChevronDown)<{ $open: boolean }>`\n transition: transform 0.2s ease;\n transform: rotate(${({ $open }) => ($open ? '180deg' : '0deg')});\n`;\n\n// Sub panels: fixed width, no 15rem clamp (the DS default folds the calendar),\n// and a negative top margin cancelling the parent panel's padding + border so\n// the sub panel's top edge lines up with the parent panel, not the item.\nconst SubPanel = styled(Menu.SubContent)`\n margin-top: calc(-1 * (${({ theme }) => theme.spaces[1]} + 1px));\n`;\n\nconst CountBadge = styled(Badge)`\n height: 1.6rem;\n min-width: auto;\n padding: 0 0.4rem;\n`;\n\ninterface FilterMenuProps {\n listFilters: ListFilters;\n}\n\n/**\n * Toolbar \"Filter\" dropdown. Picking anything ADDS a badge (editing happens on\n * the badge itself, see FilterBadges):\n *\n * - Type → keep-open checkbox list; the badge is created/updated live with the\n * checked set (`is` by default, condition editable on the badge).\n * - Creation date / Last modified → preset list (single pick, `within the\n * last` by default) + \"Select date range\" (creation date only) opening the\n * range calendar; a completed range adds an `is` range badge.\n *\n * Closing behaviour follows how many values a field can hold: a date is one\n * value, so picking a preset (or committing a range) closes the menu; Type is a\n * set, so it stays open until dismissed.\n */\nexport const FilterMenu = ({ listFilters }: FilterMenuProps) => {\n const { formatMessage } = useIntl();\n const [isOpen, setIsOpen] = useState(false);\n const { filters, addFilter, updateFilter, removeFilter } = listFilters;\n\n // The Type submenu edits the LAST type badge in place while the menu stays\n // open (checking values accumulates into one badge, per design).\n let lastTypeIndex = -1;\n for (let i = filters.length - 1; i >= 0; i -= 1) {\n if (filters[i].kind === 'type') {\n lastTypeIndex = i;\n break;\n }\n }\n const lastTypeFilter = lastTypeIndex >= 0 ? filters[lastTypeIndex] : null;\n const checkedValues =\n lastTypeFilter && lastTypeFilter.kind === 'type' ? lastTypeFilter.values : [];\n\n const toggleTypeValue = (value: TypeValue) => {\n const nextValues = checkedValues.includes(value)\n ? checkedValues.filter((v) => v !== value)\n : [...checkedValues, value];\n\n if (lastTypeFilter && lastTypeFilter.kind === 'type') {\n if (nextValues.length === 0) {\n // Unchecking the final value removes the badge outright — a type\n // filter with no values is not a state (it would serialize to a\n // malformed `type:is:` the parser drops anyway).\n removeFilter(lastTypeIndex);\n } else {\n updateFilter(lastTypeIndex, { ...lastTypeFilter, values: nextValues });\n }\n } else if (nextValues.length > 0) {\n addFilter({ kind: 'type', condition: 'is', values: nextValues });\n }\n };\n\n // Creation date / Last modified are single-select (per design): selecting a\n // preset replaces the field's existing preset badge in place (keeping its\n // condition) rather than adding another pill; a badge is created only when the\n // field has none yet.\n const addPreset = (field: DateField, preset: DatePreset) => {\n for (let i = filters.length - 1; i >= 0; i -= 1) {\n const f = filters[i];\n if (f.kind === 'date' && f.mode === 'preset' && f.field === field) {\n updateFilter(i, { ...f, preset });\n return;\n }\n }\n addFilter({ kind: 'date', field, mode: 'preset', condition: 'withinLast', preset });\n };\n\n const addRange = (from: string, to: string) => {\n addFilter({ kind: 'date', field: 'createdAt', mode: 'range', condition: 'is', from, to });\n // The calendar is not a Menu.Item — close the menu explicitly on commit.\n setIsOpen(false);\n };\n\n const isMobile = useIsMobile();\n // Mobile accordion state: which field is expanded, and whether its date-range\n // calendar is open. Both reset when the whole menu closes.\n const [openField, setOpenField] = useState<'type' | 'createdAt' | 'updatedAt' | null>(null);\n const [rangeOpen, setRangeOpen] = useState(false);\n\n const handleOpenChange = (next: boolean) => {\n setIsOpen(next);\n if (!next) {\n setOpenField(null);\n setRangeOpen(false);\n }\n };\n\n const toggleField = (field: 'type' | 'createdAt' | 'updatedAt') => {\n setOpenField((current) => (current === field ? null : field));\n setRangeOpen(false);\n };\n\n // Option lists, shared by the desktop flyouts and the mobile accordion.\n // Multi-select semantics: menuitemcheckbox + aria-checked carry the state for\n // assistive tech; the Checkbox is purely decorative (aria-hidden, unfocusable)\n // — the Menu.Item is the control.\n const typeItems = TYPE_VALUES.map((value) => (\n <Menu.Item\n key={value}\n role=\"menuitemcheckbox\"\n aria-checked={checkedValues.includes(value)}\n onSelect={(e: Event) => {\n e.preventDefault();\n toggleTypeValue(value);\n }}\n startIcon={<Checkbox checked={checkedValues.includes(value)} tabIndex={-1} aria-hidden />}\n >\n {formatMessage(TYPE_LABELS[value])}\n </Menu.Item>\n ));\n\n // The field's currently-selected preset (single-select), so the menu can mark\n // it with a check.\n const selectedPresetForField = (field: DateField): DatePreset | null => {\n for (let i = filters.length - 1; i >= 0; i -= 1) {\n const f = filters[i];\n if (f.kind === 'date' && f.mode === 'preset' && f.field === field) {\n return f.preset;\n }\n }\n return null;\n };\n\n const presetItems = (field: DateField) => {\n const selected = selectedPresetForField(field);\n\n return DATE_PRESETS.map((preset) => (\n <Menu.Item\n key={preset}\n role=\"menuitemradio\"\n aria-checked={selected === preset}\n onSelect={() => {\n // No preventDefault, unlike Type: a date field holds exactly one\n // value, so the pick is complete and the menu closes on it. Type stays\n // open because the user may still be building up a multi-value set.\n addPreset(field, preset);\n }}\n endIcon={\n selected === preset ? (\n <Check aria-hidden width=\"1.6rem\" height=\"1.6rem\" fill=\"primary600\" />\n ) : null\n }\n >\n {formatMessage(PRESET_LABELS[preset])}\n </Menu.Item>\n ));\n };\n\n const typeLabel = formatMessage({\n id: getTranslationKey('list.filters.field.type'),\n defaultMessage: 'Type',\n });\n const selectDateRangeLabel = formatMessage({\n id: getTranslationKey('list.filters.select-date-range'),\n defaultMessage: 'Select date range',\n });\n\n return (\n <Menu.Root open={isOpen} onOpenChange={handleOpenChange}>\n {/* endIcon={null} drops the DS default chevron — the mock has none. */}\n <Menu.Trigger variant=\"tertiary\" startIcon={<FilterIcon aria-hidden />} endIcon={null}>\n <Flex gap={2} alignItems=\"center\" tag=\"span\">\n {formatMessage({\n id: getTranslationKey('list.filters.trigger'),\n defaultMessage: 'Filter',\n })}\n {filters.length > 0 && <CountBadge>{filters.length}</CountBadge>}\n </Flex>\n </Menu.Trigger>\n <Menu.Content\n popoverPlacement=\"bottom-start\"\n zIndex={2}\n maxHeight={PANEL_MAX_HEIGHT}\n width={isMobile ? MOBILE_PANEL_WIDTH : FILTER_PANEL_WIDTH}\n >\n {isMobile ? (\n // Mobile: one flat panel. Each field expands its options inline below\n // itself — Radix sub-menus can only fly out sideways, off a phone.\n <>\n <FieldToggle\n aria-expanded={openField === 'type'}\n onSelect={(e: Event) => {\n e.preventDefault();\n toggleField('type');\n }}\n endIcon={<Chevron $open={openField === 'type'} aria-hidden />}\n >\n {typeLabel}\n </FieldToggle>\n {openField === 'type' && <OptionGroup>{typeItems}</OptionGroup>}\n\n {(['createdAt', 'updatedAt'] as const).map((field) => (\n <Box key={field} width=\"100%\">\n <FieldToggle\n aria-expanded={openField === field}\n onSelect={(e: Event) => {\n e.preventDefault();\n toggleField(field);\n }}\n endIcon={<Chevron $open={openField === field} aria-hidden />}\n >\n {formatMessage(DATE_FIELD_LABELS[field])}\n </FieldToggle>\n {openField === field && (\n <OptionGroup>\n {presetItems(field)}\n {/* Only Creation date offers a range from the UI (design). */}\n {field === 'createdAt' && (\n <>\n <FieldToggle\n aria-expanded={rangeOpen}\n onSelect={(e: Event) => {\n e.preventDefault();\n setRangeOpen((open) => !open);\n }}\n endIcon={<Chevron $open={rangeOpen} aria-hidden />}\n >\n {selectDateRangeLabel}\n </FieldToggle>\n {rangeOpen && (\n <Box paddingLeft={2}>\n <DateRangeCalendar onSelect={addRange} />\n </Box>\n )}\n </>\n )}\n </OptionGroup>\n )}\n </Box>\n ))}\n </>\n ) : (\n <>\n <Menu.SubRoot>\n <FieldSubTrigger>{typeLabel}</FieldSubTrigger>\n <SubPanel zIndex={2} maxHeight={PANEL_MAX_HEIGHT} width={FILTER_PANEL_WIDTH}>\n {typeItems}\n </SubPanel>\n </Menu.SubRoot>\n\n {(['createdAt', 'updatedAt'] as const).map((field) => (\n <Menu.SubRoot key={field}>\n <FieldSubTrigger>{formatMessage(DATE_FIELD_LABELS[field])}</FieldSubTrigger>\n <SubPanel zIndex={2} maxHeight={PANEL_MAX_HEIGHT} width={FILTER_PANEL_WIDTH}>\n {presetItems(field)}\n {/* Design constraint: only Creation date offers a range from the\n UI. The URL codec and the badges support ranges on both date\n fields (`updated:rangeis:…` works when hand-crafted) so this\n stays a one-line change if design extends it later. */}\n {field === 'createdAt' && (\n <Menu.SubRoot>\n <FieldSubTrigger>{selectDateRangeLabel}</FieldSubTrigger>\n <SubPanel zIndex={2} maxHeight=\"none\" width={FILTER_PANEL_WIDTH}>\n <DateRangeCalendar onSelect={addRange} />\n </SubPanel>\n </Menu.SubRoot>\n )}\n </SubPanel>\n </Menu.SubRoot>\n ))}\n </>\n )}\n </Menu.Content>\n </Menu.Root>\n );\n};\n"],"names":["TYPE_LABELS","folder","id","getTranslationKey","defaultMessage","picture","audio","video","document","PRESET_LABELS","DATE_FIELD_LABELS","createdAt","updatedAt","FieldSubTrigger","styled","Menu","SubTrigger","FILTER_PANEL_WIDTH","PANEL_MAX_HEIGHT","MOBILE_PANEL_WIDTH","FieldToggle","Item","OptionGroup","Box","theme","spaces","Chevron","ChevronDown","$open","SubPanel","SubContent","CountBadge","Badge","FilterMenu","listFilters","formatMessage","useIntl","isOpen","setIsOpen","useState","filters","addFilter","updateFilter","removeFilter","lastTypeIndex","i","length","kind","lastTypeFilter","checkedValues","values","toggleTypeValue","value","nextValues","includes","filter","v","condition","addPreset","field","preset","f","mode","addRange","from","to","isMobile","useIsMobile","openField","setOpenField","rangeOpen","setRangeOpen","handleOpenChange","next","toggleField","current","typeItems","TYPE_VALUES","map","_jsx","role","aria-checked","onSelect","e","preventDefault","startIcon","Checkbox","checked","tabIndex","aria-hidden","selectedPresetForField","presetItems","selected","DATE_PRESETS","endIcon","Check","width","height","fill","typeLabel","selectDateRangeLabel","_jsxs","Root","open","onOpenChange","Trigger","variant","FilterIcon","Flex","gap","alignItems","tag","Content","popoverPlacement","zIndex","maxHeight","_Fragment","aria-expanded","paddingLeft","DateRangeCalendar","SubRoot"],"mappings":"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"}
@@ -0,0 +1,144 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
+ var strapiAdmin = require('@strapi/admin/strapi-admin');
6
+ var designSystem = require('@strapi/design-system');
7
+ var icons = require('@strapi/icons');
8
+ var reactIntl = require('react-intl');
9
+ var translations = require('../../../utils/translations.js');
10
+ var useAssetSelection = require('../hooks/useAssetSelection.js');
11
+ var ActionsMenuContent = require('./ActionsMenuContent.js');
12
+ var BulkMoveDialog = require('./BulkMoveDialog.js');
13
+ var DeleteItemsDialog = require('./DeleteItemsDialog.js');
14
+ var FolderFormDialog = require('./FolderFormDialog.js');
15
+
16
+ /**
17
+ * The "..." menu on a folder row/card. Always acts on that one folder, whatever
18
+ * the current multi-selection is (the bulk actions bar is the selection-scoped
19
+ * affordance). It reuses the shared move and delete dialogs, which mount only
20
+ * while open.
21
+ *
22
+ * A successful move or delete clears the whole selection: they only invalidate
23
+ * RTK tags, so without it a `folder:<id>` key for a folder that no longer lives
24
+ * where the selection thinks it does would linger. A rename leaves the id
25
+ * valid, so it deliberately keeps the selection.
26
+ */ const FolderActionsMenu = ({ folder, dragData })=>{
27
+ const { formatMessage } = reactIntl.useIntl();
28
+ const { copy } = strapiAdmin.useClipboard();
29
+ const { toggleNotification } = strapiAdmin.useNotification();
30
+ const { clear } = useAssetSelection.useAssetSelection();
31
+ const [isRenameOpen, setIsRenameOpen] = React.useState(false);
32
+ const [isMoveOpen, setIsMoveOpen] = React.useState(false);
33
+ const [isDeleteOpen, setIsDeleteOpen] = React.useState(false);
34
+ // Stable identity: the move dialog memoizes its destination walk on it.
35
+ const moveItems = React.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: translations.getTranslationKey('list.folder.actions.copy-link.success'),
50
+ defaultMessage: 'Folder link copied.'
51
+ } : {
52
+ id: translations.getTranslationKey('list.folder.actions.copy-link.error'),
53
+ defaultMessage: 'Failed to copy the folder link.'
54
+ })
55
+ });
56
+ };
57
+ return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
58
+ children: [
59
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Menu.Root, {
60
+ modal: false,
61
+ children: [
62
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Menu.Trigger, {
63
+ tag: designSystem.IconButton,
64
+ icon: /*#__PURE__*/ jsxRuntime.jsx(icons.More, {}),
65
+ variant: "ghost",
66
+ label: formatMessage({
67
+ id: translations.getTranslationKey('control-card.more-actions'),
68
+ defaultMessage: 'More actions'
69
+ })
70
+ }),
71
+ /*#__PURE__*/ jsxRuntime.jsxs(ActionsMenuContent.ActionsMenuContent, {
72
+ popoverPlacement: "bottom-end",
73
+ zIndex: 2,
74
+ minWidth: "22rem",
75
+ children: [
76
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Menu.Item, {
77
+ startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Link, {}),
78
+ onSelect: handleCopyLink,
79
+ children: formatMessage({
80
+ id: translations.getTranslationKey('list.folder.actions.copy-link'),
81
+ defaultMessage: 'Copy link to folder'
82
+ })
83
+ }),
84
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Menu.Separator, {}),
85
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Menu.Item, {
86
+ startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Pencil, {}),
87
+ onSelect: ()=>setIsRenameOpen(true),
88
+ children: formatMessage({
89
+ id: translations.getTranslationKey('list.folder.actions.rename'),
90
+ defaultMessage: 'Rename folder'
91
+ })
92
+ }),
93
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Menu.Item, {
94
+ startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.ArrowRight, {}),
95
+ onSelect: ()=>setIsMoveOpen(true),
96
+ children: formatMessage({
97
+ id: translations.getTranslationKey('list.folder.actions.move'),
98
+ defaultMessage: 'Move to folder'
99
+ })
100
+ }),
101
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Menu.Item, {
102
+ startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Trash, {}),
103
+ variant: "danger",
104
+ onSelect: ()=>setIsDeleteOpen(true),
105
+ children: formatMessage({
106
+ id: translations.getTranslationKey('list.folder.actions.delete'),
107
+ defaultMessage: 'Delete folder'
108
+ })
109
+ })
110
+ ]
111
+ })
112
+ ]
113
+ }),
114
+ isRenameOpen && /*#__PURE__*/ jsxRuntime.jsx(FolderFormDialog.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__*/ jsxRuntime.jsx(BulkMoveDialog.BulkMoveDialog, {
123
+ open: true,
124
+ onClose: ()=>setIsMoveOpen(false),
125
+ items: moveItems,
126
+ onSuccess: clear
127
+ }),
128
+ isDeleteOpen && /*#__PURE__*/ jsxRuntime.jsx(DeleteItemsDialog.DeleteItemsDialog, {
129
+ open: true,
130
+ onClose: ()=>setIsDeleteOpen(false),
131
+ target: {
132
+ fileIds: [],
133
+ folderIds: [
134
+ folder.id
135
+ ]
136
+ },
137
+ onSuccess: clear
138
+ })
139
+ ]
140
+ });
141
+ };
142
+
143
+ exports.FolderActionsMenu = FolderActionsMenu;
144
+ //# sourceMappingURL=FolderActionsMenu.js.map