@strapi/upload 5.52.2 → 5.53.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 (285) hide show
  1. package/dist/admin/components/AssetCard/AssetCard.js +1 -0
  2. package/dist/admin/components/AssetCard/AssetCard.js.map +1 -1
  3. package/dist/admin/components/AssetCard/AssetCard.mjs +1 -0
  4. package/dist/admin/components/AssetCard/AssetCard.mjs.map +1 -1
  5. package/dist/admin/components/AssetCard/AssetCardBase.js +1 -0
  6. package/dist/admin/components/AssetCard/AssetCardBase.js.map +1 -1
  7. package/dist/admin/components/AssetCard/AssetCardBase.mjs +1 -0
  8. package/dist/admin/components/AssetCard/AssetCardBase.mjs.map +1 -1
  9. package/dist/admin/components/AssetCard/ImageAssetCard.js +1 -0
  10. package/dist/admin/components/AssetCard/ImageAssetCard.js.map +1 -1
  11. package/dist/admin/components/AssetCard/ImageAssetCard.mjs +1 -0
  12. package/dist/admin/components/AssetCard/ImageAssetCard.mjs.map +1 -1
  13. package/dist/admin/components/AssetCard/UploadingAssetCard.js +1 -0
  14. package/dist/admin/components/AssetCard/UploadingAssetCard.js.map +1 -1
  15. package/dist/admin/components/AssetCard/UploadingAssetCard.mjs +1 -0
  16. package/dist/admin/components/AssetCard/UploadingAssetCard.mjs.map +1 -1
  17. package/dist/admin/components/AssetCard/VideoAssetCard.js +1 -0
  18. package/dist/admin/components/AssetCard/VideoAssetCard.js.map +1 -1
  19. package/dist/admin/components/AssetCard/VideoAssetCard.mjs +1 -0
  20. package/dist/admin/components/AssetCard/VideoAssetCard.mjs.map +1 -1
  21. package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.js +1 -0
  22. package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.js.map +1 -1
  23. package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.mjs +1 -0
  24. package/dist/admin/components/AssetDialog/BrowseStep/BrowseStep.mjs.map +1 -1
  25. package/dist/admin/components/AssetDialog/BrowseStep/Filters.js +1 -0
  26. package/dist/admin/components/AssetDialog/BrowseStep/Filters.js.map +1 -1
  27. package/dist/admin/components/AssetDialog/BrowseStep/Filters.mjs +1 -0
  28. package/dist/admin/components/AssetDialog/BrowseStep/Filters.mjs.map +1 -1
  29. package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.js +1 -0
  30. package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.js.map +1 -1
  31. package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.mjs +1 -0
  32. package/dist/admin/components/AssetDialog/BrowseStep/SearchAsset/SearchAsset.mjs.map +1 -1
  33. package/dist/admin/components/AssetDialog/SelectedStep/SelectedStep.js +1 -0
  34. package/dist/admin/components/AssetDialog/SelectedStep/SelectedStep.js.map +1 -1
  35. package/dist/admin/components/AssetDialog/SelectedStep/SelectedStep.mjs +1 -0
  36. package/dist/admin/components/AssetDialog/SelectedStep/SelectedStep.mjs.map +1 -1
  37. package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.js +1 -0
  38. package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.js.map +1 -1
  39. package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.mjs +1 -0
  40. package/dist/admin/components/BulkMoveDialog/BulkMoveDialog.mjs.map +1 -1
  41. package/dist/admin/components/EditAssetDialog/EditAssetContent.js +1 -0
  42. package/dist/admin/components/EditAssetDialog/EditAssetContent.js.map +1 -1
  43. package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs +1 -0
  44. package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs.map +1 -1
  45. package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.js +1 -0
  46. package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.js.map +1 -1
  47. package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.mjs +1 -0
  48. package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.mjs.map +1 -1
  49. package/dist/admin/components/EditAssetDialog/PreviewBox/CroppingActions.js +1 -0
  50. package/dist/admin/components/EditAssetDialog/PreviewBox/CroppingActions.js.map +1 -1
  51. package/dist/admin/components/EditAssetDialog/PreviewBox/CroppingActions.mjs +1 -0
  52. package/dist/admin/components/EditAssetDialog/PreviewBox/CroppingActions.mjs.map +1 -1
  53. package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.js +1 -0
  54. package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.js.map +1 -1
  55. package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.mjs +1 -0
  56. package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.mjs.map +1 -1
  57. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.js +1 -0
  58. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.js.map +1 -1
  59. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.mjs +1 -0
  60. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.mjs.map +1 -1
  61. package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.js +1 -0
  62. package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.js.map +1 -1
  63. package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.mjs +1 -0
  64. package/dist/admin/components/EditAssetDialog/ReplaceMediaButton.mjs.map +1 -1
  65. package/dist/admin/components/EditFolderDialog/ModalHeader/ModalHeader.js +1 -0
  66. package/dist/admin/components/EditFolderDialog/ModalHeader/ModalHeader.js.map +1 -1
  67. package/dist/admin/components/EditFolderDialog/ModalHeader/ModalHeader.mjs +1 -0
  68. package/dist/admin/components/EditFolderDialog/ModalHeader/ModalHeader.mjs.map +1 -1
  69. package/dist/admin/components/FilterList/FilterList.js +2 -2
  70. package/dist/admin/components/FilterList/FilterList.js.map +1 -1
  71. package/dist/admin/components/FilterList/FilterList.mjs +2 -2
  72. package/dist/admin/components/FilterList/FilterList.mjs.map +1 -1
  73. package/dist/admin/components/FilterPopover/FilterPopover.js +4 -4
  74. package/dist/admin/components/FilterPopover/FilterPopover.js.map +1 -1
  75. package/dist/admin/components/FilterPopover/FilterPopover.mjs +4 -4
  76. package/dist/admin/components/FilterPopover/FilterPopover.mjs.map +1 -1
  77. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.js +1 -0
  78. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.js.map +1 -1
  79. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.mjs +1 -0
  80. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAsset.mjs.map +1 -1
  81. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssetActions.js +1 -0
  82. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssetActions.js.map +1 -1
  83. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssetActions.mjs +1 -0
  84. package/dist/admin/components/MediaLibraryInput/Carousel/CarouselAssetActions.mjs.map +1 -1
  85. package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.js +4 -10
  86. package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.js.map +1 -1
  87. package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.mjs +4 -10
  88. package/dist/admin/components/MediaLibraryInput/Carousel/EmptyStateAsset.mjs.map +1 -1
  89. package/dist/admin/components/SortPicker/SortPicker.js +1 -0
  90. package/dist/admin/components/SortPicker/SortPicker.js.map +1 -1
  91. package/dist/admin/components/SortPicker/SortPicker.mjs +1 -0
  92. package/dist/admin/components/SortPicker/SortPicker.mjs.map +1 -1
  93. package/dist/admin/components/TableList/CellContent.js +1 -0
  94. package/dist/admin/components/TableList/CellContent.js.map +1 -1
  95. package/dist/admin/components/TableList/CellContent.mjs +1 -0
  96. package/dist/admin/components/TableList/CellContent.mjs.map +1 -1
  97. package/dist/admin/components/TableList/PreviewCell.js +1 -0
  98. package/dist/admin/components/TableList/PreviewCell.js.map +1 -1
  99. package/dist/admin/components/TableList/PreviewCell.mjs +1 -0
  100. package/dist/admin/components/TableList/PreviewCell.mjs.map +1 -1
  101. package/dist/admin/components/TableList/TableList.js +1 -0
  102. package/dist/admin/components/TableList/TableList.js.map +1 -1
  103. package/dist/admin/components/TableList/TableList.mjs +1 -0
  104. package/dist/admin/components/TableList/TableList.mjs.map +1 -1
  105. package/dist/admin/components/TableList/TableRows.js +1 -0
  106. package/dist/admin/components/TableList/TableRows.js.map +1 -1
  107. package/dist/admin/components/TableList/TableRows.mjs +1 -0
  108. package/dist/admin/components/TableList/TableRows.mjs.map +1 -1
  109. package/dist/admin/components/UploadAssetDialog/AddAssetStep/AddAssetStep.js +1 -0
  110. package/dist/admin/components/UploadAssetDialog/AddAssetStep/AddAssetStep.js.map +1 -1
  111. package/dist/admin/components/UploadAssetDialog/AddAssetStep/AddAssetStep.mjs +1 -0
  112. package/dist/admin/components/UploadAssetDialog/AddAssetStep/AddAssetStep.mjs.map +1 -1
  113. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.js +9 -21
  114. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.js.map +1 -1
  115. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.mjs +9 -21
  116. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromComputerForm.mjs.map +1 -1
  117. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js +1 -0
  118. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js.map +1 -1
  119. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.mjs +1 -0
  120. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.mjs.map +1 -1
  121. package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.js +1 -0
  122. package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.js.map +1 -1
  123. package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.mjs +1 -0
  124. package/dist/admin/components/UploadAssetDialog/PendingAssetStep/PendingAssetStep.mjs.map +1 -1
  125. package/dist/admin/constants.js +1 -0
  126. package/dist/admin/constants.js.map +1 -1
  127. package/dist/admin/constants.mjs +1 -0
  128. package/dist/admin/constants.mjs.map +1 -1
  129. package/dist/admin/future/components/Drawer.js +17 -3
  130. package/dist/admin/future/components/Drawer.js.map +1 -1
  131. package/dist/admin/future/components/Drawer.mjs +17 -3
  132. package/dist/admin/future/components/Drawer.mjs.map +1 -1
  133. package/dist/admin/future/components/UploadProgressDialog.js +46 -12
  134. package/dist/admin/future/components/UploadProgressDialog.js.map +1 -1
  135. package/dist/admin/future/components/UploadProgressDialog.mjs +47 -13
  136. package/dist/admin/future/components/UploadProgressDialog.mjs.map +1 -1
  137. package/dist/admin/future/pages/Assets/AssetsPage.js +27 -2
  138. package/dist/admin/future/pages/Assets/AssetsPage.js.map +1 -1
  139. package/dist/admin/future/pages/Assets/AssetsPage.mjs +27 -2
  140. package/dist/admin/future/pages/Assets/AssetsPage.mjs.map +1 -1
  141. package/dist/admin/future/pages/Assets/components/AssetActionsMenu.js +9 -1
  142. package/dist/admin/future/pages/Assets/components/AssetActionsMenu.js.map +1 -1
  143. package/dist/admin/future/pages/Assets/components/AssetActionsMenu.mjs +9 -1
  144. package/dist/admin/future/pages/Assets/components/AssetActionsMenu.mjs.map +1 -1
  145. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.js +19 -4
  146. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.js.map +1 -1
  147. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.mjs +19 -4
  148. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.mjs.map +1 -1
  149. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js +64 -10
  150. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js.map +1 -1
  151. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs +66 -12
  152. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs.map +1 -1
  153. package/dist/admin/future/pages/Assets/components/AssetsGrid.js +17 -5
  154. package/dist/admin/future/pages/Assets/components/AssetsGrid.js.map +1 -1
  155. package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs +17 -5
  156. package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs.map +1 -1
  157. package/dist/admin/future/pages/Assets/components/AssetsTable.js +56 -28
  158. package/dist/admin/future/pages/Assets/components/AssetsTable.js.map +1 -1
  159. package/dist/admin/future/pages/Assets/components/AssetsTable.mjs +58 -30
  160. package/dist/admin/future/pages/Assets/components/AssetsTable.mjs.map +1 -1
  161. package/dist/admin/future/pages/Assets/components/BulkActionsBar.js +203 -83
  162. package/dist/admin/future/pages/Assets/components/BulkActionsBar.js.map +1 -1
  163. package/dist/admin/future/pages/Assets/components/BulkActionsBar.mjs +207 -87
  164. package/dist/admin/future/pages/Assets/components/BulkActionsBar.mjs.map +1 -1
  165. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.js +21 -3
  166. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.js.map +1 -1
  167. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.mjs +21 -3
  168. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.mjs.map +1 -1
  169. package/dist/admin/future/pages/Assets/components/MainAreaContextMenu.js +181 -0
  170. package/dist/admin/future/pages/Assets/components/MainAreaContextMenu.js.map +1 -0
  171. package/dist/admin/future/pages/Assets/components/MainAreaContextMenu.mjs +179 -0
  172. package/dist/admin/future/pages/Assets/components/MainAreaContextMenu.mjs.map +1 -0
  173. package/dist/admin/future/pages/Assets/constants.js +22 -0
  174. package/dist/admin/future/pages/Assets/constants.js.map +1 -1
  175. package/dist/admin/future/pages/Assets/constants.mjs +19 -1
  176. package/dist/admin/future/pages/Assets/constants.mjs.map +1 -1
  177. package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.js +4 -3
  178. package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.js.map +1 -1
  179. package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.mjs +5 -4
  180. package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.mjs.map +1 -1
  181. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.js +105 -12
  182. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.js.map +1 -1
  183. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.mjs +106 -13
  184. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.mjs.map +1 -1
  185. package/dist/admin/future/pages/Assets/hooks/useListFilters.js +5 -5
  186. package/dist/admin/future/pages/Assets/hooks/useListFilters.js.map +1 -1
  187. package/dist/admin/future/pages/Assets/hooks/useListFilters.mjs +6 -6
  188. package/dist/admin/future/pages/Assets/hooks/useListFilters.mjs.map +1 -1
  189. package/dist/admin/future/pages/Assets/hooks/useListScrollRestoration.js +111 -0
  190. package/dist/admin/future/pages/Assets/hooks/useListScrollRestoration.js.map +1 -0
  191. package/dist/admin/future/pages/Assets/hooks/useListScrollRestoration.mjs +109 -0
  192. package/dist/admin/future/pages/Assets/hooks/useListScrollRestoration.mjs.map +1 -0
  193. package/dist/admin/future/pages/Assets/hooks/useListSort.js +10 -10
  194. package/dist/admin/future/pages/Assets/hooks/useListSort.js.map +1 -1
  195. package/dist/admin/future/pages/Assets/hooks/useListSort.mjs +11 -11
  196. package/dist/admin/future/pages/Assets/hooks/useListSort.mjs.map +1 -1
  197. package/dist/admin/future/pages/Assets/utils/mergeUploadedAssets.js +86 -0
  198. package/dist/admin/future/pages/Assets/utils/mergeUploadedAssets.js.map +1 -0
  199. package/dist/admin/future/pages/Assets/utils/mergeUploadedAssets.mjs +83 -0
  200. package/dist/admin/future/pages/Assets/utils/mergeUploadedAssets.mjs.map +1 -0
  201. package/dist/admin/future/pages/Assets/utils/renderedKeys.js +19 -0
  202. package/dist/admin/future/pages/Assets/utils/renderedKeys.js.map +1 -0
  203. package/dist/admin/future/pages/Assets/utils/renderedKeys.mjs +17 -0
  204. package/dist/admin/future/pages/Assets/utils/renderedKeys.mjs.map +1 -0
  205. package/dist/admin/future/services/api.js +19 -6
  206. package/dist/admin/future/services/api.js.map +1 -1
  207. package/dist/admin/future/services/api.mjs +19 -6
  208. package/dist/admin/future/services/api.mjs.map +1 -1
  209. package/dist/admin/future/store/uploadProgress.js +55 -2
  210. package/dist/admin/future/store/uploadProgress.js.map +1 -1
  211. package/dist/admin/future/store/uploadProgress.mjs +53 -3
  212. package/dist/admin/future/store/uploadProgress.mjs.map +1 -1
  213. package/dist/admin/index.js +1 -0
  214. package/dist/admin/index.js.map +1 -1
  215. package/dist/admin/index.mjs +1 -0
  216. package/dist/admin/index.mjs.map +1 -1
  217. package/dist/admin/pages/App/ConfigureTheView/components/Settings.js +1 -0
  218. package/dist/admin/pages/App/ConfigureTheView/components/Settings.js.map +1 -1
  219. package/dist/admin/pages/App/ConfigureTheView/components/Settings.mjs +1 -0
  220. package/dist/admin/pages/App/ConfigureTheView/components/Settings.mjs.map +1 -1
  221. package/dist/admin/pages/App/MediaLibrary.js +7 -9
  222. package/dist/admin/pages/App/MediaLibrary.js.map +1 -1
  223. package/dist/admin/pages/App/MediaLibrary.mjs +8 -10
  224. package/dist/admin/pages/App/MediaLibrary.mjs.map +1 -1
  225. package/dist/admin/pages/App/components/BulkActions.js +1 -0
  226. package/dist/admin/pages/App/components/BulkActions.js.map +1 -1
  227. package/dist/admin/pages/App/components/BulkActions.mjs +1 -0
  228. package/dist/admin/pages/App/components/BulkActions.mjs.map +1 -1
  229. package/dist/admin/pages/App/components/EmptyOrNoPermissions.js +1 -0
  230. package/dist/admin/pages/App/components/EmptyOrNoPermissions.js.map +1 -1
  231. package/dist/admin/pages/App/components/EmptyOrNoPermissions.mjs +1 -0
  232. package/dist/admin/pages/App/components/EmptyOrNoPermissions.mjs.map +1 -1
  233. package/dist/admin/pages/App/components/Filters.js +8 -8
  234. package/dist/admin/pages/App/components/Filters.js.map +1 -1
  235. package/dist/admin/pages/App/components/Filters.mjs +9 -9
  236. package/dist/admin/pages/App/components/Filters.mjs.map +1 -1
  237. package/dist/admin/pages/App/components/Header.js +1 -1
  238. package/dist/admin/pages/App/components/Header.js.map +1 -1
  239. package/dist/admin/pages/App/components/Header.mjs +2 -2
  240. package/dist/admin/pages/App/components/Header.mjs.map +1 -1
  241. package/dist/admin/src/future/components/Drawer.d.ts +10 -0
  242. package/dist/admin/src/future/pages/Assets/components/AssetsGrid.d.ts +4 -1
  243. package/dist/admin/src/future/pages/Assets/components/AssetsTable.d.ts +4 -1
  244. package/dist/admin/src/future/pages/Assets/components/BulkActionsBar.d.ts +8 -1
  245. package/dist/admin/src/future/pages/Assets/components/MainAreaContextMenu.d.ts +28 -0
  246. package/dist/admin/src/future/pages/Assets/constants.d.ts +20 -0
  247. package/dist/admin/src/future/pages/Assets/hooks/useInfiniteAssets.d.ts +4 -0
  248. package/dist/admin/src/future/pages/Assets/hooks/useListScrollRestoration.d.ts +15 -0
  249. package/dist/admin/src/future/pages/Assets/utils/mergeUploadedAssets.d.ts +35 -0
  250. package/dist/admin/src/future/pages/Assets/utils/renderedKeys.d.ts +19 -0
  251. package/dist/admin/src/future/store/uploadProgress.d.ts +51 -0
  252. package/dist/admin/src/utils/index.d.ts +1 -0
  253. package/dist/admin/src/utils/rawFileToAsset.d.ts +2 -2
  254. package/dist/admin/src/utils/resolveFileMime.d.ts +13 -0
  255. package/dist/admin/translations/en.json.js +5 -1
  256. package/dist/admin/translations/en.json.js.map +1 -1
  257. package/dist/admin/translations/en.json.mjs +5 -1
  258. package/dist/admin/translations/en.json.mjs.map +1 -1
  259. package/dist/admin/utils/getFolderURL.js +2 -1
  260. package/dist/admin/utils/getFolderURL.js.map +1 -1
  261. package/dist/admin/utils/getFolderURL.mjs +2 -1
  262. package/dist/admin/utils/getFolderURL.mjs.map +1 -1
  263. package/dist/admin/utils/rawFileToAsset.js +5 -3
  264. package/dist/admin/utils/rawFileToAsset.js.map +1 -1
  265. package/dist/admin/utils/rawFileToAsset.mjs +5 -3
  266. package/dist/admin/utils/rawFileToAsset.mjs.map +1 -1
  267. package/dist/admin/utils/resolveFileMime.js +69 -0
  268. package/dist/admin/utils/resolveFileMime.js.map +1 -0
  269. package/dist/admin/utils/resolveFileMime.mjs +64 -0
  270. package/dist/admin/utils/resolveFileMime.mjs.map +1 -0
  271. package/dist/admin/utils/urlsToAssets.js +8 -4
  272. package/dist/admin/utils/urlsToAssets.js.map +1 -1
  273. package/dist/admin/utils/urlsToAssets.mjs +8 -4
  274. package/dist/admin/utils/urlsToAssets.mjs.map +1 -1
  275. package/dist/server/services/upload.js +20 -8
  276. package/dist/server/services/upload.js.map +1 -1
  277. package/dist/server/services/upload.mjs +20 -8
  278. package/dist/server/services/upload.mjs.map +1 -1
  279. package/dist/server/src/index.d.ts +2 -0
  280. package/dist/server/src/index.d.ts.map +1 -1
  281. package/dist/server/src/services/index.d.ts +2 -0
  282. package/dist/server/src/services/index.d.ts.map +1 -1
  283. package/dist/server/src/services/upload.d.ts +2 -0
  284. package/dist/server/src/services/upload.d.ts.map +1 -1
  285. package/package.json +6 -6
@@ -11,11 +11,12 @@ import { formatBytes } from '../../../utils/files.mjs';
11
11
  import { getAssetIcon } from '../../../utils/getAssetIcon.mjs';
12
12
  import { isEventFromWithin } from '../../../utils/isEventFromWithin.mjs';
13
13
  import { getTranslationKey } from '../../../utils/translations.mjs';
14
- import { TABLE_HEADERS } from '../constants.mjs';
14
+ import { TABLE_HEADERS, ASSET_DETAILS_TRIGGER_PROPS, ASSET_ITEM_CONTROL_PROPS } from '../constants.mjs';
15
15
  import { useAssetSelection } from '../hooks/useAssetSelection.mjs';
16
16
  import { useBusyAssetsOptional } from '../hooks/useBusyAssets.mjs';
17
17
  import { useFolderNavigation } from '../hooks/useFolderNavigation.mjs';
18
- import { folderKey, assetKey, getSelectAllState } from '../utils/selection.mjs';
18
+ import { buildRenderedKeys } from '../utils/renderedKeys.mjs';
19
+ import { getSelectAllState, folderKey, assetKey } from '../utils/selection.mjs';
19
20
  import { AssetActionsMenu } from './AssetActionsMenu.mjs';
20
21
  import { useAssetsDndOptional } from './Dnd/AssetsDndProvider.mjs';
21
22
  import { useFolderDraggableDroppable, useFileDraggable } from './Dnd/useAssetDnd.mjs';
@@ -29,27 +30,16 @@ const StyledTable = styled(RawTable)`
29
30
  border-radius: 4px;
30
31
  overflow: hidden;
31
32
 
32
- /* Below desktop only the name column remains. A fixed layout makes a long
33
- name ellipsize instead of widening the table past the viewport the
34
- checkbox (first) and actions (last) columns keep a fixed width and the name
35
- takes the rest. Desktop keeps the content-sized auto layout. */
36
- table-layout: fixed;
33
+ /* An auto layout lets every column but the name size itself to its content,
34
+ so the dates never wrap. The name cell is what absorbs the leftover and
35
+ ellipsizes see NameTd. */
36
+ table-layout: auto;
37
37
 
38
38
  & td:last-child,
39
39
  & th:last-child {
40
40
  width: 5.6rem;
41
41
  white-space: nowrap;
42
42
  }
43
-
44
- ${({ theme })=>theme.breakpoints.large} {
45
- table-layout: auto;
46
-
47
- & td:last-child,
48
- & th:last-child {
49
- width: auto;
50
- white-space: normal;
51
- }
52
- }
53
43
  `;
54
44
  const StyledThead = styled(RawThead)`
55
45
  background: ${({ theme })=>theme.colors.neutral100};
@@ -58,15 +48,41 @@ const StyledThead = styled(RawThead)`
58
48
  border-bottom: 1px solid ${({ theme })=>theme.colors.neutral150};
59
49
  }
60
50
  `;
51
+ /**
52
+ * Column sizing, applied to the header and body cells alike.
53
+ *
54
+ * `hug` shrinks a column to its content: `width: 1%` is a floor the content
55
+ * overrides, and `nowrap` stops a date breaking across lines.
56
+ *
57
+ * `flex` claims everything left over. `width: 100%` asks for all of it and
58
+ * `max-width: 0` is what allows the cell to be narrower than its content, which
59
+ * is what lets the name inside ellipsize instead of widening the table.
60
+ */ const hugColumn = css`
61
+ width: 1%;
62
+ white-space: nowrap;
63
+ `;
64
+ const flexColumn = css`
65
+ width: 100%;
66
+ max-width: 0;
67
+ overflow: hidden;
68
+ `;
61
69
  const StyledTh = styled(RawTh)`
62
70
  height: 40px;
63
71
  padding: 0 ${({ theme })=>theme.spaces[4]};
64
72
  text-align: left;
73
+
74
+ ${({ $flex })=>$flex ? flexColumn : hugColumn}
65
75
  `;
66
76
  const StyledTd = styled(RawTd)`
67
77
  padding: 0 ${({ theme })=>theme.spaces[4]};
68
78
  border-bottom: 1px solid ${({ theme })=>theme.colors.neutral150};
69
79
  `;
80
+ /** The name column: takes whatever the others leave and ellipsizes. */ const NameTd = styled(StyledTd)`
81
+ ${flexColumn}
82
+ `;
83
+ /** Every other column: as wide as its content, never wrapping. */ const HugTd = styled(StyledTd)`
84
+ ${hugColumn}
85
+ `;
70
86
  const StyledTr = styled.tr`
71
87
  height: 48px;
72
88
  user-select: none;
@@ -237,12 +253,16 @@ const AssetRow = ({ asset, orderedItemKeys, onAssetItemClick })=>{
237
253
  ref: setNodeRef,
238
254
  ...attributes,
239
255
  ...listeners,
256
+ ...ASSET_DETAILS_TRIGGER_PROPS,
240
257
  $isDragging: isDragging,
241
258
  $isMovePending: isMovePending,
242
259
  $isBusy: busyMessage !== null,
243
260
  $isSelected: selected,
244
261
  tabIndex: 0,
245
262
  role: "row",
263
+ // Right-clicking an item is not the background gesture: the row keeps the
264
+ // browser's own menu. See MainAreaContextMenu.
265
+ "data-native-context-menu": true,
246
266
  onDragStart: (e)=>e.preventDefault(),
247
267
  onClick: handleRowClick,
248
268
  onKeyDown: handleKeyDown,
@@ -253,6 +273,7 @@ const AssetRow = ({ asset, orderedItemKeys, onAssetItemClick })=>{
253
273
  },
254
274
  children: [
255
275
  canUpdate && /*#__PURE__*/ jsx(CheckboxTd, {
276
+ ...ASSET_ITEM_CONTROL_PROPS,
256
277
  onClick: stopRowEvent,
257
278
  onKeyDown: stopRowEvent,
258
279
  children: /*#__PURE__*/ jsx(Flex, {
@@ -268,7 +289,7 @@ const AssetRow = ({ asset, orderedItemKeys, onAssetItemClick })=>{
268
289
  })
269
290
  })
270
291
  }),
271
- /*#__PURE__*/ jsx(StyledTd, {
292
+ /*#__PURE__*/ jsx(NameTd, {
272
293
  children: /*#__PURE__*/ jsxs(Flex, {
273
294
  alignItems: "center",
274
295
  justifyContent: "space-between",
@@ -326,7 +347,7 @@ const AssetRow = ({ asset, orderedItemKeys, onAssetItemClick })=>{
326
347
  }),
327
348
  isDesktop && /*#__PURE__*/ jsxs(Fragment, {
328
349
  children: [
329
- /*#__PURE__*/ jsx(StyledTd, {
350
+ /*#__PURE__*/ jsx(HugTd, {
330
351
  children: /*#__PURE__*/ jsx(Typography, {
331
352
  textColor: "neutral600",
332
353
  children: asset.createdAt ? formatDate(new Date(asset.createdAt), {
@@ -334,7 +355,7 @@ const AssetRow = ({ asset, orderedItemKeys, onAssetItemClick })=>{
334
355
  }) : '-'
335
356
  })
336
357
  }),
337
- /*#__PURE__*/ jsx(StyledTd, {
358
+ /*#__PURE__*/ jsx(HugTd, {
338
359
  children: /*#__PURE__*/ jsx(Typography, {
339
360
  textColor: "neutral600",
340
361
  children: asset.updatedAt ? formatDate(new Date(asset.updatedAt), {
@@ -342,7 +363,7 @@ const AssetRow = ({ asset, orderedItemKeys, onAssetItemClick })=>{
342
363
  }) : '-'
343
364
  })
344
365
  }),
345
- /*#__PURE__*/ jsx(StyledTd, {
366
+ /*#__PURE__*/ jsx(HugTd, {
346
367
  children: /*#__PURE__*/ jsx(Typography, {
347
368
  textColor: "neutral600",
348
369
  children: asset.size ? formatBytes(asset.size, 1) : '-'
@@ -351,6 +372,7 @@ const AssetRow = ({ asset, orderedItemKeys, onAssetItemClick })=>{
351
372
  ]
352
373
  }),
353
374
  /*#__PURE__*/ jsx(StyledTd, {
375
+ ...ASSET_ITEM_CONTROL_PROPS,
354
376
  onClick: stopRowEvent,
355
377
  onKeyDown: stopRowEvent,
356
378
  onPointerDown: stopRowEvent,
@@ -434,6 +456,9 @@ const FolderRow = ({ folder, orderedItemKeys })=>{
434
456
  $isSelected: isSelected(key),
435
457
  tabIndex: 0,
436
458
  role: "row",
459
+ // Right-clicking an item is not the background gesture: the row keeps the
460
+ // browser's own menu. See MainAreaContextMenu.
461
+ "data-native-context-menu": true,
437
462
  onDragStart: (e)=>{
438
463
  if (isEventFromWithin(e)) {
439
464
  e.preventDefault();
@@ -463,7 +488,7 @@ const FolderRow = ({ folder, orderedItemKeys })=>{
463
488
  })
464
489
  })
465
490
  }),
466
- /*#__PURE__*/ jsx(StyledTd, {
491
+ /*#__PURE__*/ jsx(NameTd, {
467
492
  children: /*#__PURE__*/ jsxs(Flex, {
468
493
  gap: 3,
469
494
  alignItems: "center",
@@ -492,7 +517,7 @@ const FolderRow = ({ folder, orderedItemKeys })=>{
492
517
  }),
493
518
  isDesktop && /*#__PURE__*/ jsxs(Fragment, {
494
519
  children: [
495
- /*#__PURE__*/ jsx(StyledTd, {
520
+ /*#__PURE__*/ jsx(HugTd, {
496
521
  children: /*#__PURE__*/ jsx(Typography, {
497
522
  textColor: "neutral600",
498
523
  children: folder.createdAt ? formatDate(new Date(folder.createdAt), {
@@ -500,7 +525,7 @@ const FolderRow = ({ folder, orderedItemKeys })=>{
500
525
  }) : '-'
501
526
  })
502
527
  }),
503
- /*#__PURE__*/ jsx(StyledTd, {
528
+ /*#__PURE__*/ jsx(HugTd, {
504
529
  children: /*#__PURE__*/ jsx(Typography, {
505
530
  textColor: "neutral600",
506
531
  children: folder.updatedAt ? formatDate(new Date(folder.updatedAt), {
@@ -508,7 +533,7 @@ const FolderRow = ({ folder, orderedItemKeys })=>{
508
533
  }) : '-'
509
534
  })
510
535
  }),
511
- /*#__PURE__*/ jsx(StyledTd, {
536
+ /*#__PURE__*/ jsx(HugTd, {
512
537
  children: /*#__PURE__*/ jsx(Typography, {
513
538
  textColor: "neutral600",
514
539
  children: "-"
@@ -531,7 +556,7 @@ const FolderRow = ({ folder, orderedItemKeys })=>{
531
556
  ]
532
557
  });
533
558
  };
534
- const AssetsTable = ({ assets, folders = [], mixedItems = null, onAssetItemClick })=>{
559
+ const AssetsTable = ({ assets, folders = [], mixedItems = null, renderedKeys, onAssetItemClick })=>{
535
560
  const isDesktop = useIsDesktop();
536
561
  const { formatMessage } = useIntl();
537
562
  const { selectedKeys, selectAll, clear } = useAssetSelection();
@@ -548,10 +573,11 @@ const AssetsTable = ({ assets, folders = [], mixedItems = null, onAssetItemClick
548
573
  const totalRows = folders.length + assets.length;
549
574
  // Render order — folders first by default, or the interleaved mixed order.
550
575
  // Range selection follows it.
551
- const orderedItemKeys = mixedItems ? mixedItems.map((item)=>item.kind === 'folder' ? folderKey(item.folder.id) : assetKey(item.asset.id)) : [
552
- ...folders.map((folder)=>folderKey(folder.id)),
553
- ...assets.map((asset)=>assetKey(asset.id))
554
- ];
576
+ const orderedItemKeys = renderedKeys ?? buildRenderedKeys({
577
+ folders,
578
+ assets,
579
+ mixedItems
580
+ });
555
581
  const { allSelected, isIndeterminate } = getSelectAllState(selectedKeys, orderedItemKeys);
556
582
  const handleSelectAll = ()=>{
557
583
  if (allSelected) {
@@ -591,6 +617,7 @@ const AssetsTable = ({ assets, folders = [], mixedItems = null, onAssetItemClick
591
617
  const isVisuallyHidden = 'isVisuallyHidden' in header && header.isVisuallyHidden;
592
618
  if (isVisuallyHidden) {
593
619
  return /*#__PURE__*/ jsx(StyledTh, {
620
+ $flex: header.name === 'name',
594
621
  children: /*#__PURE__*/ jsx(VisuallyHidden, {
595
622
  children: formatMessage({
596
623
  id: getTranslationKey('table.header.actions'),
@@ -600,6 +627,7 @@ const AssetsTable = ({ assets, folders = [], mixedItems = null, onAssetItemClick
600
627
  }, header.name);
601
628
  }
602
629
  return /*#__PURE__*/ jsx(StyledTh, {
630
+ $flex: header.name === 'name',
603
631
  children: /*#__PURE__*/ jsx(Typography, {
604
632
  textColor: "neutral600",
605
633
  variant: "sigma",
@@ -1 +1 @@
1
- {"version":3,"file":"AssetsTable.mjs","sources":["../../../../../../admin/src/future/pages/Assets/components/AssetsTable.tsx"],"sourcesContent":["import { useIsDesktop } from '@strapi/admin/strapi-admin';\nimport {\n Checkbox,\n Flex,\n Loader,\n RawTable,\n RawTbody,\n RawTd,\n RawTh,\n RawThead,\n RawTr,\n Tooltip,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Folder as FolderIcon, WarningCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled, css } from 'styled-components';\n\nimport { TruncatedText } from '../../../components/TruncatedText';\nimport { useMediaLibraryPermissions } from '../../../hooks/useMediaLibraryPermissions';\nimport { useTracking } from '../../../hooks/useTracking';\nimport { formatBytes } from '../../../utils/files';\nimport { getAssetIcon } from '../../../utils/getAssetIcon';\nimport { isEventFromWithin } from '../../../utils/isEventFromWithin';\nimport { getTranslationKey } from '../../../utils/translations';\nimport { TABLE_HEADERS } from '../constants';\nimport { useAssetSelection } from '../hooks/useAssetSelection';\nimport { useBusyAssetsOptional } from '../hooks/useBusyAssets';\nimport { useFolderNavigation } from '../hooks/useFolderNavigation';\nimport { type MixedItem } from '../utils/mergeMixedList';\nimport { assetKey, folderKey, getSelectAllState, type ItemKey } from '../utils/selection';\n\nimport { AssetActionsMenu } from './AssetActionsMenu';\nimport { useAssetsDndOptional } from './Dnd/AssetsDndProvider';\nimport { useFileDraggable, useFolderDraggableDroppable } from './Dnd/useAssetDnd';\nimport { FolderActionsMenu } from './FolderActionsMenu';\n\nimport type { File } from '../../../../../../shared/contracts/files';\nimport type { Folder } from '../../../../../../shared/contracts/folders';\n\nconst StyledTable = styled(RawTable)`\n width: 100%;\n border-collapse: separate;\n border-spacing: 0;\n border: 1px solid ${({ theme }) => theme.colors.neutral150};\n border-radius: 4px;\n overflow: hidden;\n\n /* Below desktop only the name column remains. A fixed layout makes a long\n name ellipsize instead of widening the table past the viewport — the\n checkbox (first) and actions (last) columns keep a fixed width and the name\n takes the rest. Desktop keeps the content-sized auto layout. */\n table-layout: fixed;\n\n & td:last-child,\n & th:last-child {\n width: 5.6rem;\n white-space: nowrap;\n }\n\n ${({ theme }) => theme.breakpoints.large} {\n table-layout: auto;\n\n & td:last-child,\n & th:last-child {\n width: auto;\n white-space: normal;\n }\n }\n`;\n\nconst StyledThead = styled(RawThead)`\n background: ${({ theme }) => theme.colors.neutral100};\n\n tr {\n border-bottom: 1px solid ${({ theme }) => theme.colors.neutral150};\n }\n`;\n\nconst StyledTh = styled(RawTh)`\n height: 40px;\n padding: 0 ${({ theme }) => theme.spaces[4]};\n text-align: left;\n`;\n\nconst StyledTd = styled(RawTd)`\n padding: 0 ${({ theme }) => theme.spaces[4]};\n border-bottom: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst StyledTr = styled.tr<{\n $isDragging?: boolean;\n $isMovePending?: boolean;\n $isBusy?: boolean;\n $isValidDropTarget?: boolean;\n $isInvalidDropTarget?: boolean;\n $isSelected?: boolean;\n}>`\n height: 48px;\n user-select: none;\n background: ${({ theme, $isSelected }) =>\n $isSelected ? theme.colors.primary100 : theme.colors.neutral0};\n cursor: ${({ $isMovePending, $isBusy, $isInvalidDropTarget }) => {\n if ($isMovePending || $isBusy) {\n return 'wait';\n }\n\n return $isInvalidDropTarget ? 'not-allowed' : 'pointer';\n }};\n opacity: ${({ $isDragging, $isBusy }) => ($isDragging || $isBusy ? 0.4 : 1)};\n pointer-events: ${({ $isMovePending, $isBusy }) => ($isMovePending || $isBusy ? 'none' : 'auto')};\n\n ${({ $isValidDropTarget, theme }) =>\n $isValidDropTarget &&\n css`\n background: ${theme.colors.primary100};\n outline: 1px dashed ${theme.colors.primary600};\n outline-offset: -1px;\n `}\n\n &:hover {\n background: ${({ theme }) => theme.colors.primary100};\n }\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme.colors.primary600};\n outline-offset: -2px;\n }\n\n &:last-child {\n ${StyledTd} {\n border-bottom: 0;\n }\n }\n`;\n\n// Leading checkbox column. Fixed narrow width so it holds its own column under\n// the mobile fixed table-layout (a 1% width would collapse and let the name\n// cell's preview overlap the control).\nconst CheckboxTd = styled(StyledTd)`\n width: 5.6rem;\n white-space: nowrap;\n`;\n\nconst CheckboxTh = styled(StyledTh)`\n width: 5.6rem;\n white-space: nowrap;\n`;\n\n// Flags an asset whose caption or alternative text is empty — mirrors the\n// per-field warning shown in the details drawer. Pushed to the far end of the\n// name cell (shrink 0 so a long name never crowds it out).\nconst MetadataWarning = styled(WarningCircle)`\n flex-shrink: 0;\n width: 1.6rem;\n height: 1.6rem;\n\n path {\n fill: ${({ theme }) => theme.colors.warning500};\n }\n`;\n\n// The asset filename is its own interactive element: clicking it opens the\n// details drawer instead of selecting the row.\nconst NameButton = styled.button`\n display: inline-flex;\n max-width: 100%;\n border: none;\n background: transparent;\n padding: 0;\n margin: 0;\n cursor: pointer;\n text-align: left;\n color: inherit;\n font: inherit;\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme.colors.primary600};\n outline-offset: 2px;\n border-radius: 2px;\n }\n`;\n\n// Shields the row from its own controls (checkbox, \"...\" trigger) without\n// severing propagation for the menu's portaled content — those events are React\n// children of the cell but not DOM descendants, and Radix needs them to reach\n// `document` to dismiss its layers.\nconst stopRowEvent = (e: React.SyntheticEvent) => {\n if (isEventFromWithin(e)) {\n e.stopPropagation();\n }\n};\n\ninterface AssetPreviewCellProps {\n asset: File;\n}\n\nconst AssetPreviewCell = ({ asset }: AssetPreviewCellProps) => {\n const { ext, mime } = asset;\n\n const DocIcon = getAssetIcon(mime, ext);\n\n return (\n <Flex\n justifyContent=\"center\"\n alignItems=\"center\"\n borderRadius=\"4px\"\n color=\"neutral500\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n shrink={0}\n >\n <DocIcon width={20} height={20} />\n </Flex>\n );\n};\n\ninterface AssetRowProps {\n asset: File;\n orderedItemKeys: ItemKey[];\n onAssetItemClick: (assetId: number) => void;\n}\n\nconst AssetRow = ({ asset, orderedItemKeys, onAssetItemClick }: AssetRowProps) => {\n const isDesktop = useIsDesktop();\n const { formatDate, formatMessage } = useIntl();\n const { isMovePending } = useAssetsDndOptional() ?? { isMovePending: false };\n const { attributes, listeners, setNodeRef, isDragging, dragData } = useFileDraggable(asset);\n const { isSelected, toggle, selectRange } = useAssetSelection();\n const { canUpdate } = useMediaLibraryPermissions();\n const busyMessage = useBusyAssetsOptional()?.getBusyMessage(asset.id) ?? null;\n\n const key = assetKey(asset.id);\n const selected = isSelected(key);\n\n // Caption and alternative text apply to every file type — same \"empty =\n // falsy\" rule as the drawer's per-field warning.\n const isMetadataMissing = !asset.caption || !asset.alternativeText;\n const metadataMissingLabel = formatMessage({\n id: getTranslationKey('list.table.row.metadata-missing'),\n defaultMessage: 'This asset is missing metadata (caption or alternative text).',\n });\n\n // Plain click opens the asset details; pointer selection lives on the\n // checkbox only. Modifier clicks keep the selection semantics: shift selects\n // a range, cmd/ctrl toggles.\n //\n // The containment guard on this and the handler below is what keeps the\n // actions menu's portaled dialogs — React children of this row — from\n // opening the details drawer or toggling the selection.\n const handleRowClick = (e: React.MouseEvent) => {\n if (!isEventFromWithin(e)) {\n return;\n }\n\n if (e.shiftKey) {\n selectRange(orderedItemKeys, key);\n } else if (e.metaKey || e.ctrlKey) {\n toggle(key);\n } else {\n onAssetItemClick(asset.id);\n }\n };\n\n // Desktop: Space toggles selection (additive), Enter opens the details drawer.\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (!isEventFromWithin(e)) {\n return;\n }\n\n if (e.key === 'Enter') {\n e.preventDefault();\n onAssetItemClick(asset.id);\n } else if (e.key === ' ') {\n e.preventDefault();\n toggle(key);\n }\n };\n\n const handleNameClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n onAssetItemClick(asset.id);\n };\n\n const handleCheckboxClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (e.shiftKey) {\n selectRange(orderedItemKeys, key);\n } else {\n toggle(key);\n }\n };\n\n return (\n <StyledTr\n ref={setNodeRef}\n {...attributes}\n {...listeners}\n $isDragging={isDragging}\n $isMovePending={isMovePending}\n $isBusy={busyMessage !== null}\n $isSelected={selected}\n tabIndex={0}\n role=\"row\"\n onDragStart={(e) => e.preventDefault()}\n onClick={handleRowClick}\n onKeyDown={handleKeyDown}\n onPointerDown={(e: React.PointerEvent) => {\n if (isEventFromWithin(e)) {\n listeners?.onPointerDown?.(e);\n }\n }}\n >\n {/* No checkbox without the update permission (nothing selectable can be\n acted on). Shown at every viewport width otherwise. */}\n {canUpdate && (\n <CheckboxTd onClick={stopRowEvent} onKeyDown={stopRowEvent}>\n <Flex>\n <Checkbox\n checked={selected}\n onClick={handleCheckboxClick}\n aria-label={formatMessage(\n {\n id: getTranslationKey('list.table.row.select'),\n defaultMessage: 'Select {name}',\n },\n { name: asset.name }\n )}\n />\n </Flex>\n </CheckboxTd>\n )}\n <StyledTd>\n <Flex alignItems=\"center\" justifyContent=\"space-between\" gap={2} minWidth={0}>\n <Flex gap={3} alignItems=\"center\" minWidth={0}>\n {/* The row is dimmed and inert while busy; the spinner in place of the\n thumbnail is what says so positively. Its label carries the reason\n to screen readers — the row itself has no other announcement. */}\n {busyMessage !== null ? (\n <Flex justifyContent=\"center\" width=\"3.2rem\" height=\"3.2rem\">\n <Loader small>{busyMessage}</Loader>\n </Flex>\n ) : (\n <AssetPreviewCell asset={asset} />\n )}\n <Flex direction=\"column\" alignItems=\"flex-start\" minWidth={0}>\n <NameButton type=\"button\" onClick={handleNameClick}>\n <TruncatedText textColor=\"neutral800\" fontWeight=\"semiBold\">\n {asset.name}\n </TruncatedText>\n </NameButton>\n {!isDesktop && (\n <Typography textColor=\"neutral600\" variant=\"pi\">\n {asset.size ? formatBytes(asset.size, 1) : '-'}\n </Typography>\n )}\n </Flex>\n </Flex>\n {isMetadataMissing && (\n <Tooltip label={metadataMissingLabel}>\n <MetadataWarning aria-label={metadataMissingLabel} role=\"img\" />\n </Tooltip>\n )}\n </Flex>\n </StyledTd>\n {isDesktop && (\n <>\n <StyledTd>\n <Typography textColor=\"neutral600\">\n {asset.createdAt ? formatDate(new Date(asset.createdAt), { dateStyle: 'long' }) : '-'}\n </Typography>\n </StyledTd>\n <StyledTd>\n <Typography textColor=\"neutral600\">\n {asset.updatedAt ? formatDate(new Date(asset.updatedAt), { dateStyle: 'long' }) : '-'}\n </Typography>\n </StyledTd>\n <StyledTd>\n <Typography textColor=\"neutral600\">\n {asset.size ? formatBytes(asset.size, 1) : '-'}\n </Typography>\n </StyledTd>\n </>\n )}\n {/* The row owns click, Enter and Space; none of them should reach it from\n the menu trigger (Enter would open the details drawer). */}\n <StyledTd onClick={stopRowEvent} onKeyDown={stopRowEvent} onPointerDown={stopRowEvent}>\n <Flex justifyContent=\"flex-end\">\n <AssetActionsMenu asset={asset} dragData={dragData} />\n </Flex>\n </StyledTd>\n </StyledTr>\n );\n};\n\nconst FolderTr = styled(StyledTr)`\n &:hover {\n background: ${({ theme }) => theme.colors.primary100};\n }\n`;\n\ninterface FolderRowProps {\n folder: Folder;\n orderedItemKeys: ItemKey[];\n}\n\nconst FolderRow = ({ folder, orderedItemKeys }: FolderRowProps) => {\n const isDesktop = useIsDesktop();\n const { formatDate, formatMessage } = useIntl();\n const { navigateToFolder } = useFolderNavigation();\n const { isSelected, toggle, selectRange } = useAssetSelection();\n const { canUpdate } = useMediaLibraryPermissions();\n const { isMovePending } = useAssetsDndOptional() ?? { isMovePending: false };\n const {\n dragData,\n draggable: { attributes, listeners, setNodeRef: setDragRef, isDragging },\n droppable: { setNodeRef: setDropRef },\n showValidDropHighlight,\n showInvalidDropCursor,\n } = useFolderDraggableDroppable(folder);\n\n const key = folderKey(folder.id);\n\n // Folders share the selection mechanism with assets. Only the plain-click\n // semantic differs: it navigates into the folder instead of selecting it.\n //\n // The containment guard on this and the handlers below is what keeps the\n // actions menu's portaled dialogs — React children of this row — from\n // navigating into the folder or starting a drag.\n const handleRowClick = (e: React.MouseEvent) => {\n if (!isEventFromWithin(e)) {\n return;\n }\n\n if (e.shiftKey) {\n selectRange(orderedItemKeys, key);\n } else if (e.metaKey || e.ctrlKey) {\n toggle(key);\n } else {\n navigateToFolder(folder);\n }\n };\n\n // Enter navigates into the folder, Space toggles selection (same as assets).\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (!isEventFromWithin(e)) {\n return;\n }\n\n if (e.key === 'Enter') {\n e.preventDefault();\n navigateToFolder(folder);\n } else if (e.key === ' ') {\n e.preventDefault();\n toggle(key);\n }\n };\n\n const handleCheckboxClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (e.shiftKey) {\n selectRange(orderedItemKeys, key);\n } else {\n toggle(key);\n }\n };\n\n return (\n <FolderTr\n ref={(node) => {\n setDragRef(node);\n setDropRef(node);\n }}\n {...attributes}\n {...listeners}\n $isDragging={isDragging}\n $isMovePending={isMovePending}\n $isValidDropTarget={showValidDropHighlight}\n $isInvalidDropTarget={showInvalidDropCursor}\n $isSelected={isSelected(key)}\n tabIndex={0}\n role=\"row\"\n onDragStart={(e: React.DragEvent) => {\n if (isEventFromWithin(e)) {\n e.preventDefault();\n }\n }}\n onClick={handleRowClick}\n onKeyDown={handleKeyDown}\n onPointerDown={(e: React.PointerEvent) => {\n if (isEventFromWithin(e)) {\n listeners?.onPointerDown?.(e);\n }\n }}\n >\n {canUpdate && (\n <CheckboxTd onClick={stopRowEvent} onKeyDown={stopRowEvent}>\n <Flex>\n <Checkbox\n checked={isSelected(key)}\n onClick={handleCheckboxClick}\n aria-label={formatMessage(\n {\n id: getTranslationKey('list.table.row.select'),\n defaultMessage: 'Select {name}',\n },\n { name: folder.name }\n )}\n />\n </Flex>\n </CheckboxTd>\n )}\n <StyledTd>\n <Flex gap={3} alignItems=\"center\" minWidth={0}>\n <Flex\n justifyContent=\"center\"\n alignItems=\"center\"\n borderRadius=\"4px\"\n color=\"neutral600\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n shrink={0}\n >\n <FolderIcon width={20} height={20} />\n </Flex>\n <TruncatedText textColor=\"neutral800\" fontWeight=\"semiBold\">\n {folder.name}\n </TruncatedText>\n </Flex>\n </StyledTd>\n {isDesktop && (\n <>\n <StyledTd>\n <Typography textColor=\"neutral600\">\n {folder.createdAt\n ? formatDate(new Date(folder.createdAt), { dateStyle: 'long' })\n : '-'}\n </Typography>\n </StyledTd>\n <StyledTd>\n <Typography textColor=\"neutral600\">\n {folder.updatedAt\n ? formatDate(new Date(folder.updatedAt), { dateStyle: 'long' })\n : '-'}\n </Typography>\n </StyledTd>\n <StyledTd>\n <Typography textColor=\"neutral600\">-</Typography>\n </StyledTd>\n </>\n )}\n {/* The row owns click, Enter and Space; none of them should reach it from\n the menu trigger (Enter would navigate into the folder). */}\n <StyledTd onClick={stopRowEvent} onKeyDown={stopRowEvent} onPointerDown={stopRowEvent}>\n <Flex justifyContent=\"flex-end\">\n <FolderActionsMenu folder={folder} dragData={dragData} />\n </Flex>\n </StyledTd>\n </FolderTr>\n );\n};\n\ninterface AssetsTableProps {\n assets: File[];\n folders?: Folder[];\n /**\n * When set (\"Folders: Mixed with files\"), rows render in this interleaved\n * order instead of folders-first. Range selection follows the same order.\n */\n mixedItems?: MixedItem[] | null;\n onAssetItemClick: (assetId: number) => void;\n}\n\nexport const AssetsTable = ({\n assets,\n folders = [],\n mixedItems = null,\n onAssetItemClick,\n}: AssetsTableProps) => {\n const isDesktop = useIsDesktop();\n const { formatMessage } = useIntl();\n const { selectedKeys, selectAll, clear } = useAssetSelection();\n const { canUpdate } = useMediaLibraryPermissions();\n const { trackUsage } = useTracking();\n\n // Below the desktop breakpoint only the name (and actions) column is kept —\n // the date/size columns don't fit; size moves under the name as a subtitle.\n const visibleHeaders = isDesktop\n ? TABLE_HEADERS\n : TABLE_HEADERS.filter((h) => h.name === 'name' || h.name === 'actions');\n\n // The checkbox column is a dedicated structural column (not part of\n // TABLE_HEADERS). Hidden only without the update permission — every bulk\n // action needs `assets.update`, so a read-only user has nothing to select for.\n const showCheckboxColumn = canUpdate;\n const colCount = visibleHeaders.length + (showCheckboxColumn ? 1 : 0);\n\n const totalRows = folders.length + assets.length;\n\n // Render order — folders first by default, or the interleaved mixed order.\n // Range selection follows it.\n const orderedItemKeys: ItemKey[] = mixedItems\n ? mixedItems.map((item) =>\n item.kind === 'folder' ? folderKey(item.folder.id) : assetKey(item.asset.id)\n )\n : [\n ...folders.map((folder) => folderKey(folder.id)),\n ...assets.map((asset) => assetKey(asset.id)),\n ];\n const { allSelected, isIndeterminate } = getSelectAllState(selectedKeys, orderedItemKeys);\n\n const handleSelectAll = () => {\n if (allSelected) {\n clear();\n } else {\n trackUsage('didSelectAllMediaLibraryElements');\n selectAll(orderedItemKeys);\n }\n };\n\n // The empty state is owned by the page (`AssetsView` renders `EmptyState`) — an\n // empty table renders nothing at all, not headers over an empty body.\n if (totalRows === 0) {\n return null;\n }\n\n return (\n <StyledTable colCount={colCount} rowCount={(mixedItems ? mixedItems.length : totalRows) + 1}>\n <StyledThead>\n <RawTr>\n {showCheckboxColumn && (\n <CheckboxTh>\n <Flex>\n <Checkbox\n checked={isIndeterminate ? 'indeterminate' : allSelected}\n disabled={orderedItemKeys.length === 0}\n onCheckedChange={handleSelectAll}\n aria-label={formatMessage({\n id: getTranslationKey('list.table.header.select-all'),\n defaultMessage: 'Select all',\n })}\n />\n </Flex>\n </CheckboxTh>\n )}\n {visibleHeaders.map((header) => {\n const tableHeaderLabel = formatMessage(header.label);\n const isVisuallyHidden = 'isVisuallyHidden' in header && header.isVisuallyHidden;\n\n if (isVisuallyHidden) {\n return (\n <StyledTh key={header.name}>\n <VisuallyHidden>\n {formatMessage({\n id: getTranslationKey('table.header.actions'),\n defaultMessage: 'actions',\n })}\n </VisuallyHidden>\n </StyledTh>\n );\n }\n\n return (\n <StyledTh key={header.name}>\n <Typography textColor=\"neutral600\" variant=\"sigma\">\n {tableHeaderLabel}\n </Typography>\n </StyledTh>\n );\n })}\n </RawTr>\n </StyledThead>\n <RawTbody>\n {mixedItems?.map((item) =>\n item.kind === 'folder' ? (\n <FolderRow\n key={`folder-${item.folder.id}`}\n folder={item.folder}\n orderedItemKeys={orderedItemKeys}\n />\n ) : (\n <AssetRow\n key={item.asset.id}\n asset={item.asset}\n orderedItemKeys={orderedItemKeys}\n onAssetItemClick={onAssetItemClick}\n />\n )\n )}\n {!mixedItems &&\n folders.map((folder) => (\n <FolderRow\n key={`folder-${folder.id}`}\n folder={folder}\n orderedItemKeys={orderedItemKeys}\n />\n ))}\n {!mixedItems &&\n assets.map((asset) => (\n <AssetRow\n key={asset.id}\n asset={asset}\n orderedItemKeys={orderedItemKeys}\n onAssetItemClick={onAssetItemClick}\n />\n ))}\n </RawTbody>\n </StyledTable>\n );\n};\n"],"names":["StyledTable","styled","RawTable","theme","colors","neutral150","breakpoints","large","StyledThead","RawThead","neutral100","StyledTh","RawTh","spaces","StyledTd","RawTd","StyledTr","tr","$isSelected","primary100","neutral0","$isMovePending","$isBusy","$isInvalidDropTarget","$isDragging","$isValidDropTarget","css","primary600","CheckboxTd","CheckboxTh","MetadataWarning","WarningCircle","warning500","NameButton","button","stopRowEvent","e","isEventFromWithin","stopPropagation","AssetPreviewCell","asset","ext","mime","DocIcon","getAssetIcon","_jsx","Flex","justifyContent","alignItems","borderRadius","color","width","height","shrink","AssetRow","orderedItemKeys","onAssetItemClick","isDesktop","useIsDesktop","formatDate","formatMessage","useIntl","isMovePending","useAssetsDndOptional","attributes","listeners","setNodeRef","isDragging","dragData","useFileDraggable","isSelected","toggle","selectRange","useAssetSelection","canUpdate","useMediaLibraryPermissions","busyMessage","useBusyAssetsOptional","getBusyMessage","id","key","assetKey","selected","isMetadataMissing","caption","alternativeText","metadataMissingLabel","getTranslationKey","defaultMessage","handleRowClick","shiftKey","metaKey","ctrlKey","handleKeyDown","preventDefault","handleNameClick","handleCheckboxClick","_jsxs","ref","tabIndex","role","onDragStart","onClick","onKeyDown","onPointerDown","Checkbox","checked","aria-label","name","gap","minWidth","Loader","small","direction","type","TruncatedText","textColor","fontWeight","Typography","variant","size","formatBytes","Tooltip","label","_Fragment","createdAt","Date","dateStyle","updatedAt","AssetActionsMenu","FolderTr","FolderRow","folder","navigateToFolder","useFolderNavigation","draggable","setDragRef","droppable","setDropRef","showValidDropHighlight","showInvalidDropCursor","useFolderDraggableDroppable","folderKey","node","FolderIcon","FolderActionsMenu","AssetsTable","assets","folders","mixedItems","selectedKeys","selectAll","clear","trackUsage","useTracking","visibleHeaders","TABLE_HEADERS","filter","h","showCheckboxColumn","colCount","length","totalRows","map","item","kind","allSelected","isIndeterminate","getSelectAllState","handleSelectAll","rowCount","RawTr","disabled","onCheckedChange","header","tableHeaderLabel","isVisuallyHidden","VisuallyHidden","RawTbody"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAyCA,MAAMA,WAAAA,GAAcC,MAAAA,CAAOC,QAAAA,CAAS;;;;oBAIhB,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACC,UAAU,CAAC;;;;;;;;;;;;;;;;EAgB3D,EAAE,CAAC,EAAEF,KAAK,EAAE,GAAKA,KAAAA,CAAMG,WAAW,CAACC,KAAK,CAAC;;;;;;;;;AAS3C,CAAC;AAED,MAAMC,WAAAA,GAAcP,MAAAA,CAAOQ,QAAAA,CAAS;cACtB,EAAE,CAAC,EAAEN,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACM,UAAU,CAAC;;;6BAG1B,EAAE,CAAC,EAAEP,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACC,UAAU,CAAC;;AAEtE,CAAC;AAED,MAAMM,QAAAA,GAAWV,MAAAA,CAAOW,KAAAA,CAAM;;aAEjB,EAAE,CAAC,EAAET,KAAK,EAAE,GAAKA,KAAAA,CAAMU,MAAM,CAAC,CAAA,CAAE,CAAC;;AAE9C,CAAC;AAED,MAAMC,QAAAA,GAAWb,MAAAA,CAAOc,KAAAA,CAAM;aACjB,EAAE,CAAC,EAAEZ,KAAK,EAAE,GAAKA,KAAAA,CAAMU,MAAM,CAAC,CAAA,CAAE,CAAC;2BACnB,EAAE,CAAC,EAAEV,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACC,UAAU,CAAC;AACpE,CAAC;AAED,MAAMW,QAAAA,GAAWf,MAAAA,CAAOgB,EAOtB;;;AAGY,cAAA,EAAE,CAAC,EAAEd,KAAK,EAAEe,WAAW,EAAE,GACnCA,WAAAA,GAAcf,KAAAA,CAAMC,MAAM,CAACe,UAAU,GAAGhB,MAAMC,MAAM,CAACgB,QAAQ,CAAC;AACxD,UAAA,EAAE,CAAC,EAAEC,cAAc,EAAEC,OAAO,EAAEC,oBAAoB,EAAE,GAAA;AAC1D,IAAA,IAAIF,kBAAkBC,OAAAA,EAAS;QAC7B,OAAO,MAAA;AACT,IAAA;AAEA,IAAA,OAAOC,uBAAuB,aAAA,GAAgB,SAAA;AAChD,CAAA,CAAE;WACO,EAAE,CAAC,EAAEC,WAAW,EAAEF,OAAO,EAAE,GAAME,WAAAA,IAAeF,OAAAA,GAAU,GAAA,GAAM,CAAA,CAAG;kBAC5D,EAAE,CAAC,EAAED,cAAc,EAAEC,OAAO,EAAE,GAAMD,cAAAA,IAAkBC,OAAAA,GAAU,MAAA,GAAS,MAAA,CAAQ;;EAEjG,EAAE,CAAC,EAAEG,kBAAkB,EAAEtB,KAAK,EAAE,GAC9BsB,kBAAAA,IACAC,GAAG;AACW,kBAAA,EAAEvB,KAAAA,CAAMC,MAAM,CAACe,UAAU,CAAC;AAClB,0BAAA,EAAEhB,KAAAA,CAAMC,MAAM,CAACuB,UAAU,CAAC;;AAEhD,IAAA,CAAC;;;gBAGW,EAAE,CAAC,EAAExB,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACe,UAAU,CAAC;;;;uBAIlC,EAAE,CAAC,EAAEhB,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACuB,UAAU,CAAC;;;;;AAK5D,IAAA,EAAEb,QAAAA,CAAS;;;;AAIf,CAAC;AAED;AACA;AACA;AACA,MAAMc,UAAAA,GAAa3B,MAAAA,CAAOa,QAAAA,CAAS;;;AAGnC,CAAC;AAED,MAAMe,UAAAA,GAAa5B,MAAAA,CAAOU,QAAAA,CAAS;;;AAGnC,CAAC;AAED;AACA;AACA;AACA,MAAMmB,eAAAA,GAAkB7B,MAAAA,CAAO8B,aAAAA,CAAc;;;;;;UAMnC,EAAE,CAAC,EAAE5B,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAAC4B,UAAU,CAAC;;AAEnD,CAAC;AAED;AACA;AACA,MAAMC,UAAAA,GAAahC,MAAAA,CAAOiC,MAAM;;;;;;;;;;;;;uBAaT,EAAE,CAAC,EAAE/B,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACuB,UAAU,CAAC;;;;AAIhE,CAAC;AAED;AACA;AACA;AACA;AACA,MAAMQ,eAAe,CAACC,CAAAA,GAAAA;AACpB,IAAA,IAAIC,kBAAkBD,CAAAA,CAAAA,EAAI;AACxBA,QAAAA,CAAAA,CAAEE,eAAe,EAAA;AACnB,IAAA;AACF,CAAA;AAMA,MAAMC,gBAAAA,GAAmB,CAAC,EAAEC,KAAK,EAAyB,GAAA;AACxD,IAAA,MAAM,EAAEC,GAAG,EAAEC,IAAI,EAAE,GAAGF,KAAAA;IAEtB,MAAMG,OAAAA,GAAUC,aAAaF,IAAAA,EAAMD,GAAAA,CAAAA;AAEnC,IAAA,qBACEI,GAAA,CAACC,IAAAA,EAAAA;QACCC,cAAAA,EAAe,QAAA;QACfC,UAAAA,EAAW,QAAA;QACXC,YAAAA,EAAa,KAAA;QACbC,KAAAA,EAAM,YAAA;QACNC,KAAAA,EAAM,QAAA;QACNC,MAAAA,EAAO,QAAA;QACPC,MAAAA,EAAQ,CAAA;AAER,QAAA,QAAA,gBAAAR,GAAA,CAACF,OAAAA,EAAAA;YAAQQ,KAAAA,EAAO,EAAA;YAAIC,MAAAA,EAAQ;;;AAGlC,CAAA;AAQA,MAAME,QAAAA,GAAW,CAAC,EAAEd,KAAK,EAAEe,eAAe,EAAEC,gBAAgB,EAAiB,GAAA;AAC3E,IAAA,MAAMC,SAAAA,GAAYC,YAAAA,EAAAA;AAClB,IAAA,MAAM,EAAEC,UAAU,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AACtC,IAAA,MAAM,EAAEC,aAAa,EAAE,GAAGC,oBAAAA,EAAAA,IAA0B;QAAED,aAAAA,EAAe;AAAM,KAAA;AAC3E,IAAA,MAAM,EAAEE,UAAU,EAAEC,SAAS,EAAEC,UAAU,EAAEC,UAAU,EAAEC,QAAQ,EAAE,GAAGC,gBAAAA,CAAiB7B,KAAAA,CAAAA;AACrF,IAAA,MAAM,EAAE8B,UAAU,EAAEC,MAAM,EAAEC,WAAW,EAAE,GAAGC,iBAAAA,EAAAA;IAC5C,MAAM,EAAEC,SAAS,EAAE,GAAGC,0BAAAA,EAAAA;AACtB,IAAA,MAAMC,WAAAA,GAAcC,qBAAAA,EAAAA,EAAyBC,cAAAA,CAAetC,KAAAA,CAAMuC,EAAE,CAAA,IAAK,IAAA;IAEzE,MAAMC,GAAAA,GAAMC,QAAAA,CAASzC,KAAAA,CAAMuC,EAAE,CAAA;AAC7B,IAAA,MAAMG,WAAWZ,UAAAA,CAAWU,GAAAA,CAAAA;;;AAI5B,IAAA,MAAMG,oBAAoB,CAAC3C,KAAAA,CAAM4C,OAAO,IAAI,CAAC5C,MAAM6C,eAAe;AAClE,IAAA,MAAMC,uBAAuB1B,aAAAA,CAAc;AACzCmB,QAAAA,EAAAA,EAAIQ,iBAAAA,CAAkB,iCAAA,CAAA;QACtBC,cAAAA,EAAgB;AAClB,KAAA,CAAA;;;;;;;;AASA,IAAA,MAAMC,iBAAiB,CAACrD,CAAAA,GAAAA;QACtB,IAAI,CAACC,kBAAkBD,CAAAA,CAAAA,EAAI;AACzB,YAAA;AACF,QAAA;QAEA,IAAIA,CAAAA,CAAEsD,QAAQ,EAAE;AACdlB,YAAAA,WAAAA,CAAYjB,eAAAA,EAAiByB,GAAAA,CAAAA;AAC/B,QAAA,CAAA,MAAO,IAAI5C,CAAAA,CAAEuD,OAAO,IAAIvD,CAAAA,CAAEwD,OAAO,EAAE;YACjCrB,MAAAA,CAAOS,GAAAA,CAAAA;QACT,CAAA,MAAO;AACLxB,YAAAA,gBAAAA,CAAiBhB,MAAMuC,EAAE,CAAA;AAC3B,QAAA;AACF,IAAA,CAAA;;AAGA,IAAA,MAAMc,gBAAgB,CAACzD,CAAAA,GAAAA;QACrB,IAAI,CAACC,kBAAkBD,CAAAA,CAAAA,EAAI;AACzB,YAAA;AACF,QAAA;QAEA,IAAIA,CAAAA,CAAE4C,GAAG,KAAK,OAAA,EAAS;AACrB5C,YAAAA,CAAAA,CAAE0D,cAAc,EAAA;AAChBtC,YAAAA,gBAAAA,CAAiBhB,MAAMuC,EAAE,CAAA;AAC3B,QAAA,CAAA,MAAO,IAAI3C,CAAAA,CAAE4C,GAAG,KAAK,GAAA,EAAK;AACxB5C,YAAAA,CAAAA,CAAE0D,cAAc,EAAA;YAChBvB,MAAAA,CAAOS,GAAAA,CAAAA;AACT,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMe,kBAAkB,CAAC3D,CAAAA,GAAAA;AACvBA,QAAAA,CAAAA,CAAEE,eAAe,EAAA;AACjBkB,QAAAA,gBAAAA,CAAiBhB,MAAMuC,EAAE,CAAA;AAC3B,IAAA,CAAA;AAEA,IAAA,MAAMiB,sBAAsB,CAAC5D,CAAAA,GAAAA;AAC3BA,QAAAA,CAAAA,CAAEE,eAAe,EAAA;QACjB,IAAIF,CAAAA,CAAEsD,QAAQ,EAAE;AACdlB,YAAAA,WAAAA,CAAYjB,eAAAA,EAAiByB,GAAAA,CAAAA;QAC/B,CAAA,MAAO;YACLT,MAAAA,CAAOS,GAAAA,CAAAA;AACT,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,qBACEiB,IAAA,CAACjF,QAAAA,EAAAA;QACCkF,GAAAA,EAAKhC,UAAAA;AACJ,QAAA,GAAGF,UAAU;AACb,QAAA,GAAGC,SAAS;QACbzC,WAAAA,EAAa2C,UAAAA;QACb9C,cAAAA,EAAgByC,aAAAA;AAChBxC,QAAAA,OAAAA,EAASsD,WAAAA,KAAgB,IAAA;QACzB1D,WAAAA,EAAagE,QAAAA;QACbiB,QAAAA,EAAU,CAAA;QACVC,IAAAA,EAAK,KAAA;QACLC,WAAAA,EAAa,CAACjE,CAAAA,GAAMA,CAAAA,CAAE0D,cAAc,EAAA;QACpCQ,OAAAA,EAASb,cAAAA;QACTc,SAAAA,EAAWV,aAAAA;AACXW,QAAAA,aAAAA,EAAe,CAACpE,CAAAA,GAAAA;AACd,YAAA,IAAIC,kBAAkBD,CAAAA,CAAAA,EAAI;AACxB6B,gBAAAA,SAAAA,EAAWuC,aAAAA,GAAgBpE,CAAAA,CAAAA;AAC7B,YAAA;AACF,QAAA,CAAA;;AAICsC,YAAAA,SAAAA,kBACC7B,GAAA,CAACjB,UAAAA,EAAAA;gBAAW0E,OAAAA,EAASnE,YAAAA;gBAAcoE,SAAAA,EAAWpE,YAAAA;AAC5C,gBAAA,QAAA,gBAAAU,GAAA,CAACC,IAAAA,EAAAA;AACC,oBAAA,QAAA,gBAAAD,GAAA,CAAC4D,QAAAA,EAAAA;wBACCC,OAAAA,EAASxB,QAAAA;wBACToB,OAAAA,EAASN,mBAAAA;AACTW,wBAAAA,YAAAA,EAAY/C,aAAAA,CACV;AACEmB,4BAAAA,EAAAA,EAAIQ,iBAAAA,CAAkB,uBAAA,CAAA;4BACtBC,cAAAA,EAAgB;yBAClB,EACA;AAAEoB,4BAAAA,IAAAA,EAAMpE,MAAMoE;AAAK,yBAAA;;;;0BAM7B/D,GAAA,CAAC/B,QAAAA,EAAAA;AACC,gBAAA,QAAA,gBAAAmF,IAAA,CAACnD,IAAAA,EAAAA;oBAAKE,UAAAA,EAAW,QAAA;oBAASD,cAAAA,EAAe,eAAA;oBAAgB8D,GAAAA,EAAK,CAAA;oBAAGC,QAAAA,EAAU,CAAA;;sCACzEb,IAAA,CAACnD,IAAAA,EAAAA;4BAAK+D,GAAAA,EAAK,CAAA;4BAAG7D,UAAAA,EAAW,QAAA;4BAAS8D,QAAAA,EAAU,CAAA;;AAIzClC,gCAAAA,WAAAA,KAAgB,qBACf/B,GAAA,CAACC,IAAAA,EAAAA;oCAAKC,cAAAA,EAAe,QAAA;oCAASI,KAAAA,EAAM,QAAA;oCAASC,MAAAA,EAAO,QAAA;AAClD,oCAAA,QAAA,gBAAAP,GAAA,CAACkE,MAAAA,EAAAA;wCAAOC,KAAK,EAAA,IAAA;AAAEpC,wCAAAA,QAAAA,EAAAA;;mDAGjB/B,GAAA,CAACN,gBAAAA,EAAAA;oCAAiBC,KAAAA,EAAOA;;8CAE3ByD,IAAA,CAACnD,IAAAA,EAAAA;oCAAKmE,SAAAA,EAAU,QAAA;oCAASjE,UAAAA,EAAW,YAAA;oCAAa8D,QAAAA,EAAU,CAAA;;sDACzDjE,GAAA,CAACZ,UAAAA,EAAAA;4CAAWiF,IAAAA,EAAK,QAAA;4CAASZ,OAAAA,EAASP,eAAAA;AACjC,4CAAA,QAAA,gBAAAlD,GAAA,CAACsE,aAAAA,EAAAA;gDAAcC,SAAAA,EAAU,YAAA;gDAAaC,UAAAA,EAAW,UAAA;AAC9C7E,gDAAAA,QAAAA,EAAAA,KAAAA,CAAMoE;;;AAGV,wCAAA,CAACnD,2BACAZ,GAAA,CAACyE,UAAAA,EAAAA;4CAAWF,SAAAA,EAAU,YAAA;4CAAaG,OAAAA,EAAQ,IAAA;AACxC/E,4CAAAA,QAAAA,EAAAA,KAAAA,CAAMgF,IAAI,GAAGC,WAAAA,CAAYjF,KAAAA,CAAMgF,IAAI,EAAE,CAAA,CAAA,GAAK;;;;;;AAKlDrC,wBAAAA,iBAAAA,kBACCtC,GAAA,CAAC6E,OAAAA,EAAAA;4BAAQC,KAAAA,EAAOrC,oBAAAA;AACd,4BAAA,QAAA,gBAAAzC,GAAA,CAACf,eAAAA,EAAAA;gCAAgB6E,YAAAA,EAAYrB,oBAAAA;gCAAsBc,IAAAA,EAAK;;;;;;YAK/D3C,SAAAA,kBACCwC,IAAA,CAAA2B,QAAA,EAAA;;kCACE/E,GAAA,CAAC/B,QAAAA,EAAAA;AACC,wBAAA,QAAA,gBAAA+B,GAAA,CAACyE,UAAAA,EAAAA;4BAAWF,SAAAA,EAAU,YAAA;AACnB5E,4BAAAA,QAAAA,EAAAA,KAAAA,CAAMqF,SAAS,GAAGlE,UAAAA,CAAW,IAAImE,IAAAA,CAAKtF,KAAAA,CAAMqF,SAAS,CAAA,EAAG;gCAAEE,SAAAA,EAAW;6BAAO,CAAA,GAAK;;;kCAGtFlF,GAAA,CAAC/B,QAAAA,EAAAA;AACC,wBAAA,QAAA,gBAAA+B,GAAA,CAACyE,UAAAA,EAAAA;4BAAWF,SAAAA,EAAU,YAAA;AACnB5E,4BAAAA,QAAAA,EAAAA,KAAAA,CAAMwF,SAAS,GAAGrE,UAAAA,CAAW,IAAImE,IAAAA,CAAKtF,KAAAA,CAAMwF,SAAS,CAAA,EAAG;gCAAED,SAAAA,EAAW;6BAAO,CAAA,GAAK;;;kCAGtFlF,GAAA,CAAC/B,QAAAA,EAAAA;AACC,wBAAA,QAAA,gBAAA+B,GAAA,CAACyE,UAAAA,EAAAA;4BAAWF,SAAAA,EAAU,YAAA;AACnB5E,4BAAAA,QAAAA,EAAAA,KAAAA,CAAMgF,IAAI,GAAGC,WAAAA,CAAYjF,KAAAA,CAAMgF,IAAI,EAAE,CAAA,CAAA,GAAK;;;;;0BAOnD3E,GAAA,CAAC/B,QAAAA,EAAAA;gBAASwF,OAAAA,EAASnE,YAAAA;gBAAcoE,SAAAA,EAAWpE,YAAAA;gBAAcqE,aAAAA,EAAerE,YAAAA;AACvE,gBAAA,QAAA,gBAAAU,GAAA,CAACC,IAAAA,EAAAA;oBAAKC,cAAAA,EAAe,UAAA;AACnB,oBAAA,QAAA,gBAAAF,GAAA,CAACoF,gBAAAA,EAAAA;wBAAiBzF,KAAAA,EAAOA,KAAAA;wBAAO4B,QAAAA,EAAUA;;;;;;AAKpD,CAAA;AAEA,MAAM8D,QAAAA,GAAWjI,MAAAA,CAAOe,QAAAA,CAAS;;gBAEjB,EAAE,CAAC,EAAEb,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACe,UAAU,CAAC;;AAEzD,CAAC;AAOD,MAAMgH,YAAY,CAAC,EAAEC,MAAM,EAAE7E,eAAe,EAAkB,GAAA;AAC5D,IAAA,MAAME,SAAAA,GAAYC,YAAAA,EAAAA;AAClB,IAAA,MAAM,EAAEC,UAAU,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IACtC,MAAM,EAAEwE,gBAAgB,EAAE,GAAGC,mBAAAA,EAAAA;AAC7B,IAAA,MAAM,EAAEhE,UAAU,EAAEC,MAAM,EAAEC,WAAW,EAAE,GAAGC,iBAAAA,EAAAA;IAC5C,MAAM,EAAEC,SAAS,EAAE,GAAGC,0BAAAA,EAAAA;AACtB,IAAA,MAAM,EAAEb,aAAa,EAAE,GAAGC,oBAAAA,EAAAA,IAA0B;QAAED,aAAAA,EAAe;AAAM,KAAA;IAC3E,MAAM,EACJM,QAAQ,EACRmE,SAAAA,EAAW,EAAEvE,UAAU,EAAEC,SAAS,EAAEC,UAAAA,EAAYsE,UAAU,EAAErE,UAAU,EAAE,EACxEsE,SAAAA,EAAW,EAAEvE,UAAAA,EAAYwE,UAAU,EAAE,EACrCC,sBAAsB,EACtBC,qBAAqB,EACtB,GAAGC,2BAAAA,CAA4BT,MAAAA,CAAAA;IAEhC,MAAMpD,GAAAA,GAAM8D,SAAAA,CAAUV,MAAAA,CAAOrD,EAAE,CAAA;;;;;;;AAQ/B,IAAA,MAAMU,iBAAiB,CAACrD,CAAAA,GAAAA;QACtB,IAAI,CAACC,kBAAkBD,CAAAA,CAAAA,EAAI;AACzB,YAAA;AACF,QAAA;QAEA,IAAIA,CAAAA,CAAEsD,QAAQ,EAAE;AACdlB,YAAAA,WAAAA,CAAYjB,eAAAA,EAAiByB,GAAAA,CAAAA;AAC/B,QAAA,CAAA,MAAO,IAAI5C,CAAAA,CAAEuD,OAAO,IAAIvD,CAAAA,CAAEwD,OAAO,EAAE;YACjCrB,MAAAA,CAAOS,GAAAA,CAAAA;QACT,CAAA,MAAO;YACLqD,gBAAAA,CAAiBD,MAAAA,CAAAA;AACnB,QAAA;AACF,IAAA,CAAA;;AAGA,IAAA,MAAMvC,gBAAgB,CAACzD,CAAAA,GAAAA;QACrB,IAAI,CAACC,kBAAkBD,CAAAA,CAAAA,EAAI;AACzB,YAAA;AACF,QAAA;QAEA,IAAIA,CAAAA,CAAE4C,GAAG,KAAK,OAAA,EAAS;AACrB5C,YAAAA,CAAAA,CAAE0D,cAAc,EAAA;YAChBuC,gBAAAA,CAAiBD,MAAAA,CAAAA;AACnB,QAAA,CAAA,MAAO,IAAIhG,CAAAA,CAAE4C,GAAG,KAAK,GAAA,EAAK;AACxB5C,YAAAA,CAAAA,CAAE0D,cAAc,EAAA;YAChBvB,MAAAA,CAAOS,GAAAA,CAAAA;AACT,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMgB,sBAAsB,CAAC5D,CAAAA,GAAAA;AAC3BA,QAAAA,CAAAA,CAAEE,eAAe,EAAA;QACjB,IAAIF,CAAAA,CAAEsD,QAAQ,EAAE;AACdlB,YAAAA,WAAAA,CAAYjB,eAAAA,EAAiByB,GAAAA,CAAAA;QAC/B,CAAA,MAAO;YACLT,MAAAA,CAAOS,GAAAA,CAAAA;AACT,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,qBACEiB,IAAA,CAACiC,QAAAA,EAAAA;AACChC,QAAAA,GAAAA,EAAK,CAAC6C,IAAAA,GAAAA;YACJP,UAAAA,CAAWO,IAAAA,CAAAA;YACXL,UAAAA,CAAWK,IAAAA,CAAAA;AACb,QAAA,CAAA;AACC,QAAA,GAAG/E,UAAU;AACb,QAAA,GAAGC,SAAS;QACbzC,WAAAA,EAAa2C,UAAAA;QACb9C,cAAAA,EAAgByC,aAAAA;QAChBrC,kBAAAA,EAAoBkH,sBAAAA;QACpBpH,oBAAAA,EAAsBqH,qBAAAA;AACtB1H,QAAAA,WAAAA,EAAaoD,UAAAA,CAAWU,GAAAA,CAAAA;QACxBmB,QAAAA,EAAU,CAAA;QACVC,IAAAA,EAAK,KAAA;AACLC,QAAAA,WAAAA,EAAa,CAACjE,CAAAA,GAAAA;AACZ,YAAA,IAAIC,kBAAkBD,CAAAA,CAAAA,EAAI;AACxBA,gBAAAA,CAAAA,CAAE0D,cAAc,EAAA;AAClB,YAAA;AACF,QAAA,CAAA;QACAQ,OAAAA,EAASb,cAAAA;QACTc,SAAAA,EAAWV,aAAAA;AACXW,QAAAA,aAAAA,EAAe,CAACpE,CAAAA,GAAAA;AACd,YAAA,IAAIC,kBAAkBD,CAAAA,CAAAA,EAAI;AACxB6B,gBAAAA,SAAAA,EAAWuC,aAAAA,GAAgBpE,CAAAA,CAAAA;AAC7B,YAAA;AACF,QAAA,CAAA;;AAECsC,YAAAA,SAAAA,kBACC7B,GAAA,CAACjB,UAAAA,EAAAA;gBAAW0E,OAAAA,EAASnE,YAAAA;gBAAcoE,SAAAA,EAAWpE,YAAAA;AAC5C,gBAAA,QAAA,gBAAAU,GAAA,CAACC,IAAAA,EAAAA;AACC,oBAAA,QAAA,gBAAAD,GAAA,CAAC4D,QAAAA,EAAAA;AACCC,wBAAAA,OAAAA,EAASpC,UAAAA,CAAWU,GAAAA,CAAAA;wBACpBsB,OAAAA,EAASN,mBAAAA;AACTW,wBAAAA,YAAAA,EAAY/C,aAAAA,CACV;AACEmB,4BAAAA,EAAAA,EAAIQ,iBAAAA,CAAkB,uBAAA,CAAA;4BACtBC,cAAAA,EAAgB;yBAClB,EACA;AAAEoB,4BAAAA,IAAAA,EAAMwB,OAAOxB;AAAK,yBAAA;;;;0BAM9B/D,GAAA,CAAC/B,QAAAA,EAAAA;AACC,gBAAA,QAAA,gBAAAmF,IAAA,CAACnD,IAAAA,EAAAA;oBAAK+D,GAAAA,EAAK,CAAA;oBAAG7D,UAAAA,EAAW,QAAA;oBAAS8D,QAAAA,EAAU,CAAA;;sCAC1CjE,GAAA,CAACC,IAAAA,EAAAA;4BACCC,cAAAA,EAAe,QAAA;4BACfC,UAAAA,EAAW,QAAA;4BACXC,YAAAA,EAAa,KAAA;4BACbC,KAAAA,EAAM,YAAA;4BACNC,KAAAA,EAAM,QAAA;4BACNC,MAAAA,EAAO,QAAA;4BACPC,MAAAA,EAAQ,CAAA;AAER,4BAAA,QAAA,gBAAAR,GAAA,CAACmG,MAAAA,EAAAA;gCAAW7F,KAAAA,EAAO,EAAA;gCAAIC,MAAAA,EAAQ;;;sCAEjCP,GAAA,CAACsE,aAAAA,EAAAA;4BAAcC,SAAAA,EAAU,YAAA;4BAAaC,UAAAA,EAAW,UAAA;AAC9Ce,4BAAAA,QAAAA,EAAAA,MAAAA,CAAOxB;;;;;YAIbnD,SAAAA,kBACCwC,IAAA,CAAA2B,QAAA,EAAA;;kCACE/E,GAAA,CAAC/B,QAAAA,EAAAA;AACC,wBAAA,QAAA,gBAAA+B,GAAA,CAACyE,UAAAA,EAAAA;4BAAWF,SAAAA,EAAU,YAAA;AACnBgB,4BAAAA,QAAAA,EAAAA,MAAAA,CAAOP,SAAS,GACblE,UAAAA,CAAW,IAAImE,IAAAA,CAAKM,MAAAA,CAAOP,SAAS,CAAA,EAAG;gCAAEE,SAAAA,EAAW;6BAAO,CAAA,GAC3D;;;kCAGRlF,GAAA,CAAC/B,QAAAA,EAAAA;AACC,wBAAA,QAAA,gBAAA+B,GAAA,CAACyE,UAAAA,EAAAA;4BAAWF,SAAAA,EAAU,YAAA;AACnBgB,4BAAAA,QAAAA,EAAAA,MAAAA,CAAOJ,SAAS,GACbrE,UAAAA,CAAW,IAAImE,IAAAA,CAAKM,MAAAA,CAAOJ,SAAS,CAAA,EAAG;gCAAED,SAAAA,EAAW;6BAAO,CAAA,GAC3D;;;kCAGRlF,GAAA,CAAC/B,QAAAA,EAAAA;AACC,wBAAA,QAAA,gBAAA+B,GAAA,CAACyE,UAAAA,EAAAA;4BAAWF,SAAAA,EAAU,YAAA;AAAa,4BAAA,QAAA,EAAA;;;;;0BAMzCvE,GAAA,CAAC/B,QAAAA,EAAAA;gBAASwF,OAAAA,EAASnE,YAAAA;gBAAcoE,SAAAA,EAAWpE,YAAAA;gBAAcqE,aAAAA,EAAerE,YAAAA;AACvE,gBAAA,QAAA,gBAAAU,GAAA,CAACC,IAAAA,EAAAA;oBAAKC,cAAAA,EAAe,UAAA;AACnB,oBAAA,QAAA,gBAAAF,GAAA,CAACoG,iBAAAA,EAAAA;wBAAkBb,MAAAA,EAAQA,MAAAA;wBAAQhE,QAAAA,EAAUA;;;;;;AAKvD,CAAA;AAaO,MAAM8E,WAAAA,GAAc,CAAC,EAC1BC,MAAM,EACNC,OAAAA,GAAU,EAAE,EACZC,UAAAA,GAAa,IAAI,EACjB7F,gBAAgB,EACC,GAAA;AACjB,IAAA,MAAMC,SAAAA,GAAYC,YAAAA,EAAAA;IAClB,MAAM,EAAEE,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAEyF,YAAY,EAAEC,SAAS,EAAEC,KAAK,EAAE,GAAG/E,iBAAAA,EAAAA;IAC3C,MAAM,EAAEC,SAAS,EAAE,GAAGC,0BAAAA,EAAAA;IACtB,MAAM,EAAE8E,UAAU,EAAE,GAAGC,WAAAA,EAAAA;;;AAIvB,IAAA,MAAMC,cAAAA,GAAiBlG,SAAAA,GACnBmG,aAAAA,GACAA,aAAAA,CAAcC,MAAM,CAAC,CAACC,CAAAA,GAAMA,CAAAA,CAAElD,IAAI,KAAK,MAAA,IAAUkD,CAAAA,CAAElD,IAAI,KAAK,SAAA,CAAA;;;;AAKhE,IAAA,MAAMmD,kBAAAA,GAAqBrF,SAAAA;AAC3B,IAAA,MAAMsF,WAAWL,cAAAA,CAAeM,MAAM,IAAIF,kBAAAA,GAAqB,IAAI,CAAA,CAAA;AAEnE,IAAA,MAAMG,SAAAA,GAAYd,OAAAA,CAAQa,MAAM,GAAGd,OAAOc,MAAM;;;IAIhD,MAAM1G,eAAAA,GAA6B8F,aAC/BA,UAAAA,CAAWc,GAAG,CAAC,CAACC,IAAAA,GACdA,IAAAA,CAAKC,IAAI,KAAK,QAAA,GAAWvB,UAAUsB,IAAAA,CAAKhC,MAAM,CAACrD,EAAE,CAAA,GAAIE,SAASmF,IAAAA,CAAK5H,KAAK,CAACuC,EAAE,CAAA,CAAA,GAE7E;AACKqE,QAAAA,GAAAA,OAAAA,CAAQe,GAAG,CAAC,CAAC/B,MAAAA,GAAWU,SAAAA,CAAUV,OAAOrD,EAAE,CAAA,CAAA;AAC3CoE,QAAAA,GAAAA,MAAAA,CAAOgB,GAAG,CAAC,CAAC3H,KAAAA,GAAUyC,QAAAA,CAASzC,MAAMuC,EAAE,CAAA;AAC3C,KAAA;AACL,IAAA,MAAM,EAAEuF,WAAW,EAAEC,eAAe,EAAE,GAAGC,kBAAkBlB,YAAAA,EAAc/F,eAAAA,CAAAA;AAEzE,IAAA,MAAMkH,eAAAA,GAAkB,IAAA;AACtB,QAAA,IAAIH,WAAAA,EAAa;AACfd,YAAAA,KAAAA,EAAAA;QACF,CAAA,MAAO;YACLC,UAAAA,CAAW,kCAAA,CAAA;YACXF,SAAAA,CAAUhG,eAAAA,CAAAA;AACZ,QAAA;AACF,IAAA,CAAA;;;AAIA,IAAA,IAAI2G,cAAc,CAAA,EAAG;QACnB,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,qBACEjE,IAAA,CAACjG,WAAAA,EAAAA;QAAYgK,QAAAA,EAAUA,QAAAA;AAAUU,QAAAA,QAAAA,EAAU,CAACrB,UAAAA,GAAaA,WAAWY,MAAM,GAAGC,SAAQ,IAAK,CAAA;;0BACxFrH,GAAA,CAACrC,WAAAA,EAAAA;AACC,gBAAA,QAAA,gBAAAyF,IAAA,CAAC0E,KAAAA,EAAAA;;AACEZ,wBAAAA,kBAAAA,kBACClH,GAAA,CAAChB,UAAAA,EAAAA;AACC,4BAAA,QAAA,gBAAAgB,GAAA,CAACC,IAAAA,EAAAA;AACC,gCAAA,QAAA,gBAAAD,GAAA,CAAC4D,QAAAA,EAAAA;AACCC,oCAAAA,OAAAA,EAAS6D,kBAAkB,eAAA,GAAkBD,WAAAA;oCAC7CM,QAAAA,EAAUrH,eAAAA,CAAgB0G,MAAM,KAAK,CAAA;oCACrCY,eAAAA,EAAiBJ,eAAAA;AACjB9D,oCAAAA,YAAAA,EAAY/C,aAAAA,CAAc;AACxBmB,wCAAAA,EAAAA,EAAIQ,iBAAAA,CAAkB,8BAAA,CAAA;wCACtBC,cAAAA,EAAgB;AAClB,qCAAA;;;;wBAKPmE,cAAAA,CAAeQ,GAAG,CAAC,CAACW,MAAAA,GAAAA;4BACnB,MAAMC,gBAAAA,GAAmBnH,aAAAA,CAAckH,MAAAA,CAAOnD,KAAK,CAAA;AACnD,4BAAA,MAAMqD,gBAAAA,GAAmB,kBAAA,IAAsBF,MAAAA,IAAUA,MAAAA,CAAOE,gBAAgB;AAEhF,4BAAA,IAAIA,gBAAAA,EAAkB;AACpB,gCAAA,qBACEnI,GAAA,CAAClC,QAAAA,EAAAA;AACC,oCAAA,QAAA,gBAAAkC,GAAA,CAACoI,cAAAA,EAAAA;kDACErH,aAAAA,CAAc;AACbmB,4CAAAA,EAAAA,EAAIQ,iBAAAA,CAAkB,sBAAA,CAAA;4CACtBC,cAAAA,EAAgB;AAClB,yCAAA;;AALWsF,iCAAAA,EAAAA,MAAAA,CAAOlE,IAAI,CAAA;AAS9B,4BAAA;AAEA,4BAAA,qBACE/D,GAAA,CAAClC,QAAAA,EAAAA;AACC,gCAAA,QAAA,gBAAAkC,GAAA,CAACyE,UAAAA,EAAAA;oCAAWF,SAAAA,EAAU,YAAA;oCAAaG,OAAAA,EAAQ,OAAA;AACxCwD,oCAAAA,QAAAA,EAAAA;;AAFUD,6BAAAA,EAAAA,MAAAA,CAAOlE,IAAI,CAAA;AAM9B,wBAAA,CAAA;;;;0BAGJX,IAAA,CAACiF,QAAAA,EAAAA;;AACE7B,oBAAAA,UAAAA,EAAYc,IAAI,CAACC,IAAAA,GAChBA,KAAKC,IAAI,KAAK,yBACZxH,GAAA,CAACsF,SAAAA,EAAAA;AAECC,4BAAAA,MAAAA,EAAQgC,KAAKhC,MAAM;4BACnB7E,eAAAA,EAAiBA;2BAFZ,CAAC,OAAO,EAAE6G,IAAAA,CAAKhC,MAAM,CAACrD,EAAE,CAAA,CAAE,kBAKjClC,GAAA,CAACS,QAAAA,EAAAA;AAECd,4BAAAA,KAAAA,EAAO4H,KAAK5H,KAAK;4BACjBe,eAAAA,EAAiBA,eAAAA;4BACjBC,gBAAAA,EAAkBA;2BAHb4G,IAAAA,CAAK5H,KAAK,CAACuC,EAAE,CAAA,CAAA;AAOvB,oBAAA,CAACsE,cACAD,OAAAA,CAAQe,GAAG,CAAC,CAAC/B,uBACXvF,GAAA,CAACsF,SAAAA,EAAAA;4BAECC,MAAAA,EAAQA,MAAAA;4BACR7E,eAAAA,EAAiBA;AAFZ,yBAAA,EAAA,CAAC,OAAO,EAAE6E,MAAAA,CAAOrD,EAAE,CAAA,CAAE,CAAA,CAAA;AAK/B,oBAAA,CAACsE,cACAF,MAAAA,CAAOgB,GAAG,CAAC,CAAC3H,sBACVK,GAAA,CAACS,QAAAA,EAAAA;4BAECd,KAAAA,EAAOA,KAAAA;4BACPe,eAAAA,EAAiBA,eAAAA;4BACjBC,gBAAAA,EAAkBA;AAHbhB,yBAAAA,EAAAA,KAAAA,CAAMuC,EAAE,CAAA;;;;;AAS3B;;;;"}
1
+ {"version":3,"file":"AssetsTable.mjs","sources":["../../../../../../admin/src/future/pages/Assets/components/AssetsTable.tsx"],"sourcesContent":["import { useIsDesktop } from '@strapi/admin/strapi-admin';\nimport {\n Checkbox,\n Flex,\n Loader,\n RawTable,\n RawTbody,\n RawTd,\n RawTh,\n RawThead,\n RawTr,\n Tooltip,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Folder as FolderIcon, WarningCircle } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled, css } from 'styled-components';\n\nimport { TruncatedText } from '../../../components/TruncatedText';\nimport { useMediaLibraryPermissions } from '../../../hooks/useMediaLibraryPermissions';\nimport { useTracking } from '../../../hooks/useTracking';\nimport { formatBytes } from '../../../utils/files';\nimport { getAssetIcon } from '../../../utils/getAssetIcon';\nimport { isEventFromWithin } from '../../../utils/isEventFromWithin';\nimport { getTranslationKey } from '../../../utils/translations';\nimport { ASSET_DETAILS_TRIGGER_PROPS, ASSET_ITEM_CONTROL_PROPS, TABLE_HEADERS } from '../constants';\nimport { useAssetSelection } from '../hooks/useAssetSelection';\nimport { useBusyAssetsOptional } from '../hooks/useBusyAssets';\nimport { useFolderNavigation } from '../hooks/useFolderNavigation';\nimport { type MixedItem } from '../utils/mergeMixedList';\nimport { buildRenderedKeys } from '../utils/renderedKeys';\nimport { assetKey, folderKey, getSelectAllState, type ItemKey } from '../utils/selection';\n\nimport { AssetActionsMenu } from './AssetActionsMenu';\nimport { useAssetsDndOptional } from './Dnd/AssetsDndProvider';\nimport { useFileDraggable, useFolderDraggableDroppable } from './Dnd/useAssetDnd';\nimport { FolderActionsMenu } from './FolderActionsMenu';\n\nimport type { File } from '../../../../../../shared/contracts/files';\nimport type { Folder } from '../../../../../../shared/contracts/folders';\n\nconst StyledTable = styled(RawTable)`\n width: 100%;\n border-collapse: separate;\n border-spacing: 0;\n border: 1px solid ${({ theme }) => theme.colors.neutral150};\n border-radius: 4px;\n overflow: hidden;\n\n /* An auto layout lets every column but the name size itself to its content,\n so the dates never wrap. The name cell is what absorbs the leftover and\n ellipsizes — see NameTd. */\n table-layout: auto;\n\n & td:last-child,\n & th:last-child {\n width: 5.6rem;\n white-space: nowrap;\n }\n`;\n\nconst StyledThead = styled(RawThead)`\n background: ${({ theme }) => theme.colors.neutral100};\n\n tr {\n border-bottom: 1px solid ${({ theme }) => theme.colors.neutral150};\n }\n`;\n\n/**\n * Column sizing, applied to the header and body cells alike.\n *\n * `hug` shrinks a column to its content: `width: 1%` is a floor the content\n * overrides, and `nowrap` stops a date breaking across lines.\n *\n * `flex` claims everything left over. `width: 100%` asks for all of it and\n * `max-width: 0` is what allows the cell to be narrower than its content, which\n * is what lets the name inside ellipsize instead of widening the table.\n */\nconst hugColumn = css`\n width: 1%;\n white-space: nowrap;\n`;\n\nconst flexColumn = css`\n width: 100%;\n max-width: 0;\n overflow: hidden;\n`;\n\nconst StyledTh = styled(RawTh)<{ $flex?: boolean }>`\n height: 40px;\n padding: 0 ${({ theme }) => theme.spaces[4]};\n text-align: left;\n\n ${({ $flex }) => ($flex ? flexColumn : hugColumn)}\n`;\n\nconst StyledTd = styled(RawTd)`\n padding: 0 ${({ theme }) => theme.spaces[4]};\n border-bottom: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\n/** The name column: takes whatever the others leave and ellipsizes. */\nconst NameTd = styled(StyledTd)`\n ${flexColumn}\n`;\n\n/** Every other column: as wide as its content, never wrapping. */\nconst HugTd = styled(StyledTd)`\n ${hugColumn}\n`;\n\nconst StyledTr = styled.tr<{\n $isDragging?: boolean;\n $isMovePending?: boolean;\n $isBusy?: boolean;\n $isValidDropTarget?: boolean;\n $isInvalidDropTarget?: boolean;\n $isSelected?: boolean;\n}>`\n height: 48px;\n user-select: none;\n background: ${({ theme, $isSelected }) =>\n $isSelected ? theme.colors.primary100 : theme.colors.neutral0};\n cursor: ${({ $isMovePending, $isBusy, $isInvalidDropTarget }) => {\n if ($isMovePending || $isBusy) {\n return 'wait';\n }\n\n return $isInvalidDropTarget ? 'not-allowed' : 'pointer';\n }};\n opacity: ${({ $isDragging, $isBusy }) => ($isDragging || $isBusy ? 0.4 : 1)};\n pointer-events: ${({ $isMovePending, $isBusy }) => ($isMovePending || $isBusy ? 'none' : 'auto')};\n\n ${({ $isValidDropTarget, theme }) =>\n $isValidDropTarget &&\n css`\n background: ${theme.colors.primary100};\n outline: 1px dashed ${theme.colors.primary600};\n outline-offset: -1px;\n `}\n\n &:hover {\n background: ${({ theme }) => theme.colors.primary100};\n }\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme.colors.primary600};\n outline-offset: -2px;\n }\n\n &:last-child {\n ${StyledTd} {\n border-bottom: 0;\n }\n }\n`;\n\n// Leading checkbox column. Fixed narrow width so it holds its own column under\n// the mobile fixed table-layout (a 1% width would collapse and let the name\n// cell's preview overlap the control).\nconst CheckboxTd = styled(StyledTd)`\n width: 5.6rem;\n white-space: nowrap;\n`;\n\nconst CheckboxTh = styled(StyledTh)`\n width: 5.6rem;\n white-space: nowrap;\n`;\n\n// Flags an asset whose caption or alternative text is empty — mirrors the\n// per-field warning shown in the details drawer. Pushed to the far end of the\n// name cell (shrink 0 so a long name never crowds it out).\nconst MetadataWarning = styled(WarningCircle)`\n flex-shrink: 0;\n width: 1.6rem;\n height: 1.6rem;\n\n path {\n fill: ${({ theme }) => theme.colors.warning500};\n }\n`;\n\n// The asset filename is its own interactive element: clicking it opens the\n// details drawer instead of selecting the row.\nconst NameButton = styled.button`\n display: inline-flex;\n max-width: 100%;\n border: none;\n background: transparent;\n padding: 0;\n margin: 0;\n cursor: pointer;\n text-align: left;\n color: inherit;\n font: inherit;\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme.colors.primary600};\n outline-offset: 2px;\n border-radius: 2px;\n }\n`;\n\n// Shields the row from its own controls (checkbox, \"...\" trigger) without\n// severing propagation for the menu's portaled content — those events are React\n// children of the cell but not DOM descendants, and Radix needs them to reach\n// `document` to dismiss its layers.\nconst stopRowEvent = (e: React.SyntheticEvent) => {\n if (isEventFromWithin(e)) {\n e.stopPropagation();\n }\n};\n\ninterface AssetPreviewCellProps {\n asset: File;\n}\n\nconst AssetPreviewCell = ({ asset }: AssetPreviewCellProps) => {\n const { ext, mime } = asset;\n\n const DocIcon = getAssetIcon(mime, ext);\n\n return (\n <Flex\n justifyContent=\"center\"\n alignItems=\"center\"\n borderRadius=\"4px\"\n color=\"neutral500\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n shrink={0}\n >\n <DocIcon width={20} height={20} />\n </Flex>\n );\n};\n\ninterface AssetRowProps {\n asset: File;\n orderedItemKeys: ItemKey[];\n onAssetItemClick: (assetId: number) => void;\n}\n\nconst AssetRow = ({ asset, orderedItemKeys, onAssetItemClick }: AssetRowProps) => {\n const isDesktop = useIsDesktop();\n const { formatDate, formatMessage } = useIntl();\n const { isMovePending } = useAssetsDndOptional() ?? { isMovePending: false };\n const { attributes, listeners, setNodeRef, isDragging, dragData } = useFileDraggable(asset);\n const { isSelected, toggle, selectRange } = useAssetSelection();\n const { canUpdate } = useMediaLibraryPermissions();\n const busyMessage = useBusyAssetsOptional()?.getBusyMessage(asset.id) ?? null;\n\n const key = assetKey(asset.id);\n const selected = isSelected(key);\n\n // Caption and alternative text apply to every file type — same \"empty =\n // falsy\" rule as the drawer's per-field warning.\n const isMetadataMissing = !asset.caption || !asset.alternativeText;\n const metadataMissingLabel = formatMessage({\n id: getTranslationKey('list.table.row.metadata-missing'),\n defaultMessage: 'This asset is missing metadata (caption or alternative text).',\n });\n\n // Plain click opens the asset details; pointer selection lives on the\n // checkbox only. Modifier clicks keep the selection semantics: shift selects\n // a range, cmd/ctrl toggles.\n //\n // The containment guard on this and the handler below is what keeps the\n // actions menu's portaled dialogs — React children of this row — from\n // opening the details drawer or toggling the selection.\n const handleRowClick = (e: React.MouseEvent) => {\n if (!isEventFromWithin(e)) {\n return;\n }\n\n if (e.shiftKey) {\n selectRange(orderedItemKeys, key);\n } else if (e.metaKey || e.ctrlKey) {\n toggle(key);\n } else {\n onAssetItemClick(asset.id);\n }\n };\n\n // Desktop: Space toggles selection (additive), Enter opens the details drawer.\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (!isEventFromWithin(e)) {\n return;\n }\n\n if (e.key === 'Enter') {\n e.preventDefault();\n onAssetItemClick(asset.id);\n } else if (e.key === ' ') {\n e.preventDefault();\n toggle(key);\n }\n };\n\n const handleNameClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n onAssetItemClick(asset.id);\n };\n\n const handleCheckboxClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (e.shiftKey) {\n selectRange(orderedItemKeys, key);\n } else {\n toggle(key);\n }\n };\n\n return (\n <StyledTr\n ref={setNodeRef}\n {...attributes}\n {...listeners}\n {...ASSET_DETAILS_TRIGGER_PROPS}\n $isDragging={isDragging}\n $isMovePending={isMovePending}\n $isBusy={busyMessage !== null}\n $isSelected={selected}\n tabIndex={0}\n role=\"row\"\n // Right-clicking an item is not the background gesture: the row keeps the\n // browser's own menu. See MainAreaContextMenu.\n data-native-context-menu\n onDragStart={(e) => e.preventDefault()}\n onClick={handleRowClick}\n onKeyDown={handleKeyDown}\n onPointerDown={(e: React.PointerEvent) => {\n if (isEventFromWithin(e)) {\n listeners?.onPointerDown?.(e);\n }\n }}\n >\n {/* No checkbox without the update permission (nothing selectable can be\n acted on). Shown at every viewport width otherwise. */}\n {canUpdate && (\n <CheckboxTd {...ASSET_ITEM_CONTROL_PROPS} onClick={stopRowEvent} onKeyDown={stopRowEvent}>\n <Flex>\n <Checkbox\n checked={selected}\n onClick={handleCheckboxClick}\n aria-label={formatMessage(\n {\n id: getTranslationKey('list.table.row.select'),\n defaultMessage: 'Select {name}',\n },\n { name: asset.name }\n )}\n />\n </Flex>\n </CheckboxTd>\n )}\n <NameTd>\n <Flex alignItems=\"center\" justifyContent=\"space-between\" gap={2} minWidth={0}>\n <Flex gap={3} alignItems=\"center\" minWidth={0}>\n {/* The row is dimmed and inert while busy; the spinner in place of the\n thumbnail is what says so positively. Its label carries the reason\n to screen readers — the row itself has no other announcement. */}\n {busyMessage !== null ? (\n <Flex justifyContent=\"center\" width=\"3.2rem\" height=\"3.2rem\">\n <Loader small>{busyMessage}</Loader>\n </Flex>\n ) : (\n <AssetPreviewCell asset={asset} />\n )}\n <Flex direction=\"column\" alignItems=\"flex-start\" minWidth={0}>\n <NameButton type=\"button\" onClick={handleNameClick}>\n <TruncatedText textColor=\"neutral800\" fontWeight=\"semiBold\">\n {asset.name}\n </TruncatedText>\n </NameButton>\n {!isDesktop && (\n <Typography textColor=\"neutral600\" variant=\"pi\">\n {asset.size ? formatBytes(asset.size, 1) : '-'}\n </Typography>\n )}\n </Flex>\n </Flex>\n {isMetadataMissing && (\n <Tooltip label={metadataMissingLabel}>\n <MetadataWarning aria-label={metadataMissingLabel} role=\"img\" />\n </Tooltip>\n )}\n </Flex>\n </NameTd>\n {isDesktop && (\n <>\n <HugTd>\n <Typography textColor=\"neutral600\">\n {asset.createdAt ? formatDate(new Date(asset.createdAt), { dateStyle: 'long' }) : '-'}\n </Typography>\n </HugTd>\n <HugTd>\n <Typography textColor=\"neutral600\">\n {asset.updatedAt ? formatDate(new Date(asset.updatedAt), { dateStyle: 'long' }) : '-'}\n </Typography>\n </HugTd>\n <HugTd>\n <Typography textColor=\"neutral600\">\n {asset.size ? formatBytes(asset.size, 1) : '-'}\n </Typography>\n </HugTd>\n </>\n )}\n {/* The row owns click, Enter and Space; none of them should reach it from\n the menu trigger (Enter would open the details drawer). */}\n <StyledTd\n {...ASSET_ITEM_CONTROL_PROPS}\n onClick={stopRowEvent}\n onKeyDown={stopRowEvent}\n onPointerDown={stopRowEvent}\n >\n <Flex justifyContent=\"flex-end\">\n <AssetActionsMenu asset={asset} dragData={dragData} />\n </Flex>\n </StyledTd>\n </StyledTr>\n );\n};\n\nconst FolderTr = styled(StyledTr)`\n &:hover {\n background: ${({ theme }) => theme.colors.primary100};\n }\n`;\n\ninterface FolderRowProps {\n folder: Folder;\n orderedItemKeys: ItemKey[];\n}\n\nconst FolderRow = ({ folder, orderedItemKeys }: FolderRowProps) => {\n const isDesktop = useIsDesktop();\n const { formatDate, formatMessage } = useIntl();\n const { navigateToFolder } = useFolderNavigation();\n const { isSelected, toggle, selectRange } = useAssetSelection();\n const { canUpdate } = useMediaLibraryPermissions();\n const { isMovePending } = useAssetsDndOptional() ?? { isMovePending: false };\n const {\n dragData,\n draggable: { attributes, listeners, setNodeRef: setDragRef, isDragging },\n droppable: { setNodeRef: setDropRef },\n showValidDropHighlight,\n showInvalidDropCursor,\n } = useFolderDraggableDroppable(folder);\n\n const key = folderKey(folder.id);\n\n // Folders share the selection mechanism with assets. Only the plain-click\n // semantic differs: it navigates into the folder instead of selecting it.\n //\n // The containment guard on this and the handlers below is what keeps the\n // actions menu's portaled dialogs — React children of this row — from\n // navigating into the folder or starting a drag.\n const handleRowClick = (e: React.MouseEvent) => {\n if (!isEventFromWithin(e)) {\n return;\n }\n\n if (e.shiftKey) {\n selectRange(orderedItemKeys, key);\n } else if (e.metaKey || e.ctrlKey) {\n toggle(key);\n } else {\n navigateToFolder(folder);\n }\n };\n\n // Enter navigates into the folder, Space toggles selection (same as assets).\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (!isEventFromWithin(e)) {\n return;\n }\n\n if (e.key === 'Enter') {\n e.preventDefault();\n navigateToFolder(folder);\n } else if (e.key === ' ') {\n e.preventDefault();\n toggle(key);\n }\n };\n\n const handleCheckboxClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (e.shiftKey) {\n selectRange(orderedItemKeys, key);\n } else {\n toggle(key);\n }\n };\n\n return (\n <FolderTr\n ref={(node) => {\n setDragRef(node);\n setDropRef(node);\n }}\n {...attributes}\n {...listeners}\n $isDragging={isDragging}\n $isMovePending={isMovePending}\n $isValidDropTarget={showValidDropHighlight}\n $isInvalidDropTarget={showInvalidDropCursor}\n $isSelected={isSelected(key)}\n tabIndex={0}\n role=\"row\"\n // Right-clicking an item is not the background gesture: the row keeps the\n // browser's own menu. See MainAreaContextMenu.\n data-native-context-menu\n onDragStart={(e: React.DragEvent) => {\n if (isEventFromWithin(e)) {\n e.preventDefault();\n }\n }}\n onClick={handleRowClick}\n onKeyDown={handleKeyDown}\n onPointerDown={(e: React.PointerEvent) => {\n if (isEventFromWithin(e)) {\n listeners?.onPointerDown?.(e);\n }\n }}\n >\n {canUpdate && (\n <CheckboxTd onClick={stopRowEvent} onKeyDown={stopRowEvent}>\n <Flex>\n <Checkbox\n checked={isSelected(key)}\n onClick={handleCheckboxClick}\n aria-label={formatMessage(\n {\n id: getTranslationKey('list.table.row.select'),\n defaultMessage: 'Select {name}',\n },\n { name: folder.name }\n )}\n />\n </Flex>\n </CheckboxTd>\n )}\n <NameTd>\n <Flex gap={3} alignItems=\"center\" minWidth={0}>\n <Flex\n justifyContent=\"center\"\n alignItems=\"center\"\n borderRadius=\"4px\"\n color=\"neutral600\"\n width=\"3.2rem\"\n height=\"3.2rem\"\n shrink={0}\n >\n <FolderIcon width={20} height={20} />\n </Flex>\n <TruncatedText textColor=\"neutral800\" fontWeight=\"semiBold\">\n {folder.name}\n </TruncatedText>\n </Flex>\n </NameTd>\n {isDesktop && (\n <>\n <HugTd>\n <Typography textColor=\"neutral600\">\n {folder.createdAt\n ? formatDate(new Date(folder.createdAt), { dateStyle: 'long' })\n : '-'}\n </Typography>\n </HugTd>\n <HugTd>\n <Typography textColor=\"neutral600\">\n {folder.updatedAt\n ? formatDate(new Date(folder.updatedAt), { dateStyle: 'long' })\n : '-'}\n </Typography>\n </HugTd>\n <HugTd>\n <Typography textColor=\"neutral600\">-</Typography>\n </HugTd>\n </>\n )}\n {/* The row owns click, Enter and Space; none of them should reach it from\n the menu trigger (Enter would navigate into the folder). */}\n <StyledTd onClick={stopRowEvent} onKeyDown={stopRowEvent} onPointerDown={stopRowEvent}>\n <Flex justifyContent=\"flex-end\">\n <FolderActionsMenu folder={folder} dragData={dragData} />\n </Flex>\n </StyledTd>\n </FolderTr>\n );\n};\n\ninterface AssetsTableProps {\n assets: File[];\n folders?: Folder[];\n /**\n * When set (\"Folders: Mixed with files\"), rows render in this interleaved\n * order instead of folders-first. Range selection follows the same order.\n */\n mixedItems?: MixedItem[] | null;\n /** Keys of the rendered rows, in render order. Owned by the view. */\n renderedKeys?: ItemKey[];\n onAssetItemClick: (assetId: number) => void;\n}\n\nexport const AssetsTable = ({\n assets,\n folders = [],\n mixedItems = null,\n renderedKeys,\n onAssetItemClick,\n}: AssetsTableProps) => {\n const isDesktop = useIsDesktop();\n const { formatMessage } = useIntl();\n const { selectedKeys, selectAll, clear } = useAssetSelection();\n const { canUpdate } = useMediaLibraryPermissions();\n const { trackUsage } = useTracking();\n\n // Below the desktop breakpoint only the name (and actions) column is kept —\n // the date/size columns don't fit; size moves under the name as a subtitle.\n const visibleHeaders = isDesktop\n ? TABLE_HEADERS\n : TABLE_HEADERS.filter((h) => h.name === 'name' || h.name === 'actions');\n\n // The checkbox column is a dedicated structural column (not part of\n // TABLE_HEADERS). Hidden only without the update permission — every bulk\n // action needs `assets.update`, so a read-only user has nothing to select for.\n const showCheckboxColumn = canUpdate;\n const colCount = visibleHeaders.length + (showCheckboxColumn ? 1 : 0);\n\n const totalRows = folders.length + assets.length;\n\n // Render order — folders first by default, or the interleaved mixed order.\n // Range selection follows it.\n const orderedItemKeys: ItemKey[] =\n renderedKeys ?? buildRenderedKeys({ folders, assets, mixedItems });\n const { allSelected, isIndeterminate } = getSelectAllState(selectedKeys, orderedItemKeys);\n\n const handleSelectAll = () => {\n if (allSelected) {\n clear();\n } else {\n trackUsage('didSelectAllMediaLibraryElements');\n selectAll(orderedItemKeys);\n }\n };\n\n // The empty state is owned by the page (`AssetsView` renders `EmptyState`) — an\n // empty table renders nothing at all, not headers over an empty body.\n if (totalRows === 0) {\n return null;\n }\n\n return (\n <StyledTable colCount={colCount} rowCount={(mixedItems ? mixedItems.length : totalRows) + 1}>\n <StyledThead>\n <RawTr>\n {showCheckboxColumn && (\n <CheckboxTh>\n <Flex>\n <Checkbox\n checked={isIndeterminate ? 'indeterminate' : allSelected}\n disabled={orderedItemKeys.length === 0}\n onCheckedChange={handleSelectAll}\n aria-label={formatMessage({\n id: getTranslationKey('list.table.header.select-all'),\n defaultMessage: 'Select all',\n })}\n />\n </Flex>\n </CheckboxTh>\n )}\n {visibleHeaders.map((header) => {\n const tableHeaderLabel = formatMessage(header.label);\n const isVisuallyHidden = 'isVisuallyHidden' in header && header.isVisuallyHidden;\n\n if (isVisuallyHidden) {\n return (\n <StyledTh key={header.name} $flex={header.name === 'name'}>\n <VisuallyHidden>\n {formatMessage({\n id: getTranslationKey('table.header.actions'),\n defaultMessage: 'actions',\n })}\n </VisuallyHidden>\n </StyledTh>\n );\n }\n\n return (\n <StyledTh key={header.name} $flex={header.name === 'name'}>\n <Typography textColor=\"neutral600\" variant=\"sigma\">\n {tableHeaderLabel}\n </Typography>\n </StyledTh>\n );\n })}\n </RawTr>\n </StyledThead>\n <RawTbody>\n {mixedItems?.map((item) =>\n item.kind === 'folder' ? (\n <FolderRow\n key={`folder-${item.folder.id}`}\n folder={item.folder}\n orderedItemKeys={orderedItemKeys}\n />\n ) : (\n <AssetRow\n key={item.asset.id}\n asset={item.asset}\n orderedItemKeys={orderedItemKeys}\n onAssetItemClick={onAssetItemClick}\n />\n )\n )}\n {!mixedItems &&\n folders.map((folder) => (\n <FolderRow\n key={`folder-${folder.id}`}\n folder={folder}\n orderedItemKeys={orderedItemKeys}\n />\n ))}\n {!mixedItems &&\n assets.map((asset) => (\n <AssetRow\n key={asset.id}\n asset={asset}\n orderedItemKeys={orderedItemKeys}\n onAssetItemClick={onAssetItemClick}\n />\n ))}\n </RawTbody>\n </StyledTable>\n );\n};\n"],"names":["StyledTable","styled","RawTable","theme","colors","neutral150","StyledThead","RawThead","neutral100","hugColumn","css","flexColumn","StyledTh","RawTh","spaces","$flex","StyledTd","RawTd","NameTd","HugTd","StyledTr","tr","$isSelected","primary100","neutral0","$isMovePending","$isBusy","$isInvalidDropTarget","$isDragging","$isValidDropTarget","primary600","CheckboxTd","CheckboxTh","MetadataWarning","WarningCircle","warning500","NameButton","button","stopRowEvent","e","isEventFromWithin","stopPropagation","AssetPreviewCell","asset","ext","mime","DocIcon","getAssetIcon","_jsx","Flex","justifyContent","alignItems","borderRadius","color","width","height","shrink","AssetRow","orderedItemKeys","onAssetItemClick","isDesktop","useIsDesktop","formatDate","formatMessage","useIntl","isMovePending","useAssetsDndOptional","attributes","listeners","setNodeRef","isDragging","dragData","useFileDraggable","isSelected","toggle","selectRange","useAssetSelection","canUpdate","useMediaLibraryPermissions","busyMessage","useBusyAssetsOptional","getBusyMessage","id","key","assetKey","selected","isMetadataMissing","caption","alternativeText","metadataMissingLabel","getTranslationKey","defaultMessage","handleRowClick","shiftKey","metaKey","ctrlKey","handleKeyDown","preventDefault","handleNameClick","handleCheckboxClick","_jsxs","ref","ASSET_DETAILS_TRIGGER_PROPS","tabIndex","role","data-native-context-menu","onDragStart","onClick","onKeyDown","onPointerDown","ASSET_ITEM_CONTROL_PROPS","Checkbox","checked","aria-label","name","gap","minWidth","Loader","small","direction","type","TruncatedText","textColor","fontWeight","Typography","variant","size","formatBytes","Tooltip","label","_Fragment","createdAt","Date","dateStyle","updatedAt","AssetActionsMenu","FolderTr","FolderRow","folder","navigateToFolder","useFolderNavigation","draggable","setDragRef","droppable","setDropRef","showValidDropHighlight","showInvalidDropCursor","useFolderDraggableDroppable","folderKey","node","FolderIcon","FolderActionsMenu","AssetsTable","assets","folders","mixedItems","renderedKeys","selectedKeys","selectAll","clear","trackUsage","useTracking","visibleHeaders","TABLE_HEADERS","filter","h","showCheckboxColumn","colCount","length","totalRows","buildRenderedKeys","allSelected","isIndeterminate","getSelectAllState","handleSelectAll","rowCount","RawTr","disabled","onCheckedChange","map","header","tableHeaderLabel","isVisuallyHidden","VisuallyHidden","RawTbody","item","kind"],"mappings":"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"}