@strapi/upload 5.51.1 → 5.51.2

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 (262) hide show
  1. package/dist/admin/components/AssetCard/VideoPreview.js +1 -1
  2. package/dist/admin/components/AssetCard/VideoPreview.js.map +1 -1
  3. package/dist/admin/components/AssetCard/VideoPreview.mjs +1 -1
  4. package/dist/admin/components/AssetCard/VideoPreview.mjs.map +1 -1
  5. package/dist/admin/components/TableList/TableList.js +1 -1
  6. package/dist/admin/components/TableList/TableList.js.map +1 -1
  7. package/dist/admin/components/TableList/TableList.mjs +1 -1
  8. package/dist/admin/components/TableList/TableList.mjs.map +1 -1
  9. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js +21 -4
  10. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.js.map +1 -1
  11. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.mjs +21 -4
  12. package/dist/admin/components/UploadAssetDialog/AddAssetStep/FromUrlForm.mjs.map +1 -1
  13. package/dist/admin/future/components/Drawer.js +3 -1
  14. package/dist/admin/future/components/Drawer.js.map +1 -1
  15. package/dist/admin/future/components/Drawer.mjs +3 -1
  16. package/dist/admin/future/components/Drawer.mjs.map +1 -1
  17. package/dist/admin/future/components/UploadProgressDialog.js +200 -27
  18. package/dist/admin/future/components/UploadProgressDialog.js.map +1 -1
  19. package/dist/admin/future/components/UploadProgressDialog.mjs +203 -30
  20. package/dist/admin/future/components/UploadProgressDialog.mjs.map +1 -1
  21. package/dist/admin/future/hooks/useMediaLibraryPermissions.js +35 -0
  22. package/dist/admin/future/hooks/useMediaLibraryPermissions.js.map +1 -0
  23. package/dist/admin/future/hooks/useMediaLibraryPermissions.mjs +33 -0
  24. package/dist/admin/future/hooks/useMediaLibraryPermissions.mjs.map +1 -0
  25. package/dist/admin/future/pages/Assets/AssetsPage.js +203 -78
  26. package/dist/admin/future/pages/Assets/AssetsPage.js.map +1 -1
  27. package/dist/admin/future/pages/Assets/AssetsPage.mjs +200 -75
  28. package/dist/admin/future/pages/Assets/AssetsPage.mjs.map +1 -1
  29. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.js +75 -32
  30. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.js.map +1 -1
  31. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.mjs +75 -32
  32. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.mjs.map +1 -1
  33. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js +46 -19
  34. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js.map +1 -1
  35. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs +47 -20
  36. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs.map +1 -1
  37. package/dist/admin/future/pages/Assets/components/AssetsGrid.js +5 -2
  38. package/dist/admin/future/pages/Assets/components/AssetsGrid.js.map +1 -1
  39. package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs +5 -2
  40. package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs.map +1 -1
  41. package/dist/admin/future/pages/Assets/components/AssetsSearchInput.js +100 -0
  42. package/dist/admin/future/pages/Assets/components/AssetsSearchInput.js.map +1 -0
  43. package/dist/admin/future/pages/Assets/components/AssetsSearchInput.mjs +98 -0
  44. package/dist/admin/future/pages/Assets/components/AssetsSearchInput.mjs.map +1 -0
  45. package/dist/admin/future/pages/Assets/components/AssetsTable.js +10 -4
  46. package/dist/admin/future/pages/Assets/components/AssetsTable.js.map +1 -1
  47. package/dist/admin/future/pages/Assets/components/AssetsTable.mjs +10 -4
  48. package/dist/admin/future/pages/Assets/components/AssetsTable.mjs.map +1 -1
  49. package/dist/admin/future/pages/Assets/components/BulkActionsBar.js +140 -22
  50. package/dist/admin/future/pages/Assets/components/BulkActionsBar.js.map +1 -1
  51. package/dist/admin/future/pages/Assets/components/BulkActionsBar.mjs +142 -24
  52. package/dist/admin/future/pages/Assets/components/BulkActionsBar.mjs.map +1 -1
  53. package/dist/admin/future/pages/Assets/components/DateRangeCalendar.js +193 -0
  54. package/dist/admin/future/pages/Assets/components/DateRangeCalendar.js.map +1 -0
  55. package/dist/admin/future/pages/Assets/components/DateRangeCalendar.mjs +191 -0
  56. package/dist/admin/future/pages/Assets/components/DateRangeCalendar.mjs.map +1 -0
  57. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.js +18 -1
  58. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.js.map +1 -1
  59. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.mjs +18 -1
  60. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.mjs.map +1 -1
  61. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.js +13 -3
  62. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.js.map +1 -1
  63. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.mjs +13 -3
  64. package/dist/admin/future/pages/Assets/components/DropZone/UploadDropZoneContext.mjs.map +1 -1
  65. package/dist/admin/future/pages/Assets/components/EmptyState.js +62 -3
  66. package/dist/admin/future/pages/Assets/components/EmptyState.js.map +1 -1
  67. package/dist/admin/future/pages/Assets/components/EmptyState.mjs +62 -4
  68. package/dist/admin/future/pages/Assets/components/EmptyState.mjs.map +1 -1
  69. package/dist/admin/future/pages/Assets/components/FilterBadges.js +408 -0
  70. package/dist/admin/future/pages/Assets/components/FilterBadges.js.map +1 -0
  71. package/dist/admin/future/pages/Assets/components/FilterBadges.mjs +406 -0
  72. package/dist/admin/future/pages/Assets/components/FilterBadges.mjs.map +1 -0
  73. package/dist/admin/future/pages/Assets/components/FilterMenu.js +273 -0
  74. package/dist/admin/future/pages/Assets/components/FilterMenu.js.map +1 -0
  75. package/dist/admin/future/pages/Assets/components/FilterMenu.mjs +267 -0
  76. package/dist/admin/future/pages/Assets/components/FilterMenu.mjs.map +1 -0
  77. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.js +76 -19
  78. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.js.map +1 -1
  79. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.mjs +78 -21
  80. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.mjs.map +1 -1
  81. package/dist/admin/future/pages/Assets/components/FolderTree/filterFolderTree.js +33 -0
  82. package/dist/admin/future/pages/Assets/components/FolderTree/filterFolderTree.js.map +1 -0
  83. package/dist/admin/future/pages/Assets/components/FolderTree/filterFolderTree.mjs +31 -0
  84. package/dist/admin/future/pages/Assets/components/FolderTree/filterFolderTree.mjs.map +1 -0
  85. package/dist/admin/future/pages/Assets/components/SortMenu.js +21 -32
  86. package/dist/admin/future/pages/Assets/components/SortMenu.js.map +1 -1
  87. package/dist/admin/future/pages/Assets/components/SortMenu.mjs +22 -33
  88. package/dist/admin/future/pages/Assets/components/SortMenu.mjs.map +1 -1
  89. package/dist/admin/future/pages/Assets/hooks/useAssetSearch.js +40 -0
  90. package/dist/admin/future/pages/Assets/hooks/useAssetSearch.js.map +1 -0
  91. package/dist/admin/future/pages/Assets/hooks/useAssetSearch.mjs +38 -0
  92. package/dist/admin/future/pages/Assets/hooks/useAssetSearch.mjs.map +1 -0
  93. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.js +21 -5
  94. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.js.map +1 -1
  95. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.mjs +21 -5
  96. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.mjs.map +1 -1
  97. package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.js +33 -12
  98. package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.js.map +1 -1
  99. package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.mjs +33 -12
  100. package/dist/admin/future/pages/Assets/hooks/useFolderNavigation.mjs.map +1 -1
  101. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.js +40 -4
  102. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.js.map +1 -1
  103. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.mjs +40 -4
  104. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.mjs.map +1 -1
  105. package/dist/admin/future/pages/Assets/hooks/useListFilters.js +168 -0
  106. package/dist/admin/future/pages/Assets/hooks/useListFilters.js.map +1 -0
  107. package/dist/admin/future/pages/Assets/hooks/useListFilters.mjs +162 -0
  108. package/dist/admin/future/pages/Assets/hooks/useListFilters.mjs.map +1 -0
  109. package/dist/admin/future/pages/Assets/utils/buildAssetFilters.js +201 -0
  110. package/dist/admin/future/pages/Assets/utils/buildAssetFilters.js.map +1 -0
  111. package/dist/admin/future/pages/Assets/utils/buildAssetFilters.mjs +198 -0
  112. package/dist/admin/future/pages/Assets/utils/buildAssetFilters.mjs.map +1 -0
  113. package/dist/admin/future/pages/Assets/utils/listQueryKey.js +2 -2
  114. package/dist/admin/future/pages/Assets/utils/listQueryKey.js.map +1 -1
  115. package/dist/admin/future/pages/Assets/utils/listQueryKey.mjs +2 -2
  116. package/dist/admin/future/pages/Assets/utils/listQueryKey.mjs.map +1 -1
  117. package/dist/admin/future/services/api.js +163 -28
  118. package/dist/admin/future/services/api.js.map +1 -1
  119. package/dist/admin/future/services/api.mjs +163 -30
  120. package/dist/admin/future/services/api.mjs.map +1 -1
  121. package/dist/admin/future/services/assets.js +29 -17
  122. package/dist/admin/future/services/assets.js.map +1 -1
  123. package/dist/admin/future/services/assets.mjs +29 -17
  124. package/dist/admin/future/services/assets.mjs.map +1 -1
  125. package/dist/admin/future/services/folders.js +29 -17
  126. package/dist/admin/future/services/folders.js.map +1 -1
  127. package/dist/admin/future/services/folders.mjs +29 -17
  128. package/dist/admin/future/services/folders.mjs.map +1 -1
  129. package/dist/admin/future/services/settings.js +10 -3
  130. package/dist/admin/future/services/settings.js.map +1 -1
  131. package/dist/admin/future/services/settings.mjs +10 -3
  132. package/dist/admin/future/services/settings.mjs.map +1 -1
  133. package/dist/admin/future/store/uploadProgress.js +109 -2
  134. package/dist/admin/future/store/uploadProgress.js.map +1 -1
  135. package/dist/admin/future/store/uploadProgress.mjs +105 -3
  136. package/dist/admin/future/store/uploadProgress.mjs.map +1 -1
  137. package/dist/admin/future/utils/searchQueryParam.js +11 -0
  138. package/dist/admin/future/utils/searchQueryParam.js.map +1 -0
  139. package/dist/admin/future/utils/searchQueryParam.mjs +9 -0
  140. package/dist/admin/future/utils/searchQueryParam.mjs.map +1 -0
  141. package/dist/admin/hooks/useSelectionState.js +2 -4
  142. package/dist/admin/hooks/useSelectionState.js.map +1 -1
  143. package/dist/admin/hooks/useSelectionState.mjs +2 -4
  144. package/dist/admin/hooks/useSelectionState.mjs.map +1 -1
  145. package/dist/admin/shared/constants.js +43 -0
  146. package/dist/admin/shared/constants.js.map +1 -0
  147. package/dist/admin/shared/constants.mjs +38 -0
  148. package/dist/admin/shared/constants.mjs.map +1 -0
  149. package/dist/admin/src/future/hooks/useMediaLibraryPermissions.d.ts +21 -0
  150. package/dist/admin/src/future/pages/Assets/components/AssetDetails/AssetCropEditor.d.ts +7 -1
  151. package/dist/admin/src/future/pages/Assets/components/AssetsSearchInput.d.ts +5 -0
  152. package/dist/admin/src/future/pages/Assets/components/BulkActionsBar.d.ts +14 -1
  153. package/dist/admin/src/future/pages/Assets/components/DateRangeCalendar.d.ts +8 -0
  154. package/dist/admin/src/future/pages/Assets/components/DropZone/UploadDropZoneContext.d.ts +8 -1
  155. package/dist/admin/src/future/pages/Assets/components/EmptyState.d.ts +18 -1
  156. package/dist/admin/src/future/pages/Assets/components/FilterBadges.d.ts +6 -0
  157. package/dist/admin/src/future/pages/Assets/components/FilterMenu.d.ts +22 -0
  158. package/dist/admin/src/future/pages/Assets/components/FolderTree/FolderTree.d.ts +13 -4
  159. package/dist/admin/src/future/pages/Assets/components/FolderTree/filterFolderTree.d.ts +16 -0
  160. package/dist/admin/src/future/pages/Assets/components/SortMenu.d.ts +6 -0
  161. package/dist/admin/src/future/pages/Assets/hooks/useAssetSearch.d.ts +12 -0
  162. package/dist/admin/src/future/pages/Assets/hooks/useAssetSelection.d.ts +8 -1
  163. package/dist/admin/src/future/pages/Assets/hooks/useInfiniteAssets.d.ts +13 -3
  164. package/dist/admin/src/future/pages/Assets/hooks/useListFilters.d.ts +69 -0
  165. package/dist/admin/src/future/pages/Assets/utils/buildAssetFilters.d.ts +46 -0
  166. package/dist/admin/src/future/pages/Assets/utils/listQueryKey.d.ts +3 -4
  167. package/dist/admin/src/future/services/api.d.ts +53 -5
  168. package/dist/admin/src/future/services/assets.d.ts +9 -1
  169. package/dist/admin/src/future/services/folders.d.ts +3 -0
  170. package/dist/admin/src/future/services/settings.d.ts +2 -2
  171. package/dist/admin/src/future/store/uploadProgress.d.ts +83 -1
  172. package/dist/admin/src/future/utils/searchQueryParam.d.ts +7 -0
  173. package/dist/admin/src/hooks/useAiAvailability.d.ts +1 -1
  174. package/dist/admin/src/hooks/useEditAsset.d.ts +4 -4
  175. package/dist/admin/src/hooks/useEditFolder.d.ts +4 -4
  176. package/dist/admin/src/hooks/useSettings.d.ts +1 -0
  177. package/dist/admin/src/hooks/useTracking.d.ts +1 -1
  178. package/dist/admin/src/hooks/useUpload.d.ts +1 -1
  179. package/dist/admin/translations/en.json.js +53 -3
  180. package/dist/admin/translations/en.json.js.map +1 -1
  181. package/dist/admin/translations/en.json.mjs +53 -3
  182. package/dist/admin/translations/en.json.mjs.map +1 -1
  183. package/dist/admin/utils/urlYupSchema.js +33 -9
  184. package/dist/admin/utils/urlYupSchema.js.map +1 -1
  185. package/dist/admin/utils/urlYupSchema.mjs +33 -9
  186. package/dist/admin/utils/urlYupSchema.mjs.map +1 -1
  187. package/dist/server/config.js +13 -5
  188. package/dist/server/config.js.map +1 -1
  189. package/dist/server/config.mjs +13 -5
  190. package/dist/server/config.mjs.map +1 -1
  191. package/dist/server/constants.js.map +1 -1
  192. package/dist/server/constants.mjs.map +1 -1
  193. package/dist/server/controllers/admin-file.js +30 -0
  194. package/dist/server/controllers/admin-file.js.map +1 -1
  195. package/dist/server/controllers/admin-file.mjs +30 -0
  196. package/dist/server/controllers/admin-file.mjs.map +1 -1
  197. package/dist/server/controllers/admin-settings.js +20 -2
  198. package/dist/server/controllers/admin-settings.js.map +1 -1
  199. package/dist/server/controllers/admin-settings.mjs +21 -3
  200. package/dist/server/controllers/admin-settings.mjs.map +1 -1
  201. package/dist/server/controllers/content-api.js +1 -2
  202. package/dist/server/controllers/content-api.js.map +1 -1
  203. package/dist/server/controllers/content-api.mjs +2 -2
  204. package/dist/server/controllers/content-api.mjs.map +1 -1
  205. package/dist/server/controllers/validation/admin/ai-metadata.js +12 -0
  206. package/dist/server/controllers/validation/admin/ai-metadata.js.map +1 -0
  207. package/dist/server/controllers/validation/admin/ai-metadata.mjs +10 -0
  208. package/dist/server/controllers/validation/admin/ai-metadata.mjs.map +1 -0
  209. package/dist/server/controllers/validation/admin/settings.js +4 -1
  210. package/dist/server/controllers/validation/admin/settings.js.map +1 -1
  211. package/dist/server/controllers/validation/admin/settings.mjs +1 -1
  212. package/dist/server/controllers/validation/admin/settings.mjs.map +1 -1
  213. package/dist/server/routes/admin.js +18 -0
  214. package/dist/server/routes/admin.js.map +1 -1
  215. package/dist/server/routes/admin.mjs +18 -0
  216. package/dist/server/routes/admin.mjs.map +1 -1
  217. package/dist/server/services/ai-metadata.js +108 -11
  218. package/dist/server/services/ai-metadata.js.map +1 -1
  219. package/dist/server/services/ai-metadata.mjs +108 -11
  220. package/dist/server/services/ai-metadata.mjs.map +1 -1
  221. package/dist/server/services/file.js +86 -13
  222. package/dist/server/services/file.js.map +1 -1
  223. package/dist/server/services/file.mjs +87 -14
  224. package/dist/server/services/file.mjs.map +1 -1
  225. package/dist/server/services/image-manipulation.js +4 -4
  226. package/dist/server/services/image-manipulation.js.map +1 -1
  227. package/dist/server/services/image-manipulation.mjs +4 -4
  228. package/dist/server/services/image-manipulation.mjs.map +1 -1
  229. package/dist/server/shared/constants.js +43 -0
  230. package/dist/server/shared/constants.js.map +1 -0
  231. package/dist/server/shared/constants.mjs +38 -0
  232. package/dist/server/shared/constants.mjs.map +1 -0
  233. package/dist/server/src/config.d.ts +2 -0
  234. package/dist/server/src/config.d.ts.map +1 -1
  235. package/dist/server/src/constants.d.ts +2 -1
  236. package/dist/server/src/constants.d.ts.map +1 -1
  237. package/dist/server/src/controllers/admin-file.d.ts +10 -0
  238. package/dist/server/src/controllers/admin-file.d.ts.map +1 -1
  239. package/dist/server/src/controllers/admin-settings.d.ts.map +1 -1
  240. package/dist/server/src/controllers/index.d.ts +1 -0
  241. package/dist/server/src/controllers/index.d.ts.map +1 -1
  242. package/dist/server/src/controllers/validation/admin/ai-metadata.d.ts +2 -0
  243. package/dist/server/src/controllers/validation/admin/ai-metadata.d.ts.map +1 -0
  244. package/dist/server/src/controllers/validation/admin/settings.d.ts +1 -1
  245. package/dist/server/src/controllers/validation/admin/settings.d.ts.map +1 -1
  246. package/dist/server/src/index.d.ts +7 -1
  247. package/dist/server/src/index.d.ts.map +1 -1
  248. package/dist/server/src/routes/admin.d.ts.map +1 -1
  249. package/dist/server/src/services/ai-metadata.d.ts +19 -0
  250. package/dist/server/src/services/ai-metadata.d.ts.map +1 -1
  251. package/dist/server/src/services/file.d.ts +12 -2
  252. package/dist/server/src/services/file.d.ts.map +1 -1
  253. package/dist/server/src/services/index.d.ts +4 -1
  254. package/dist/server/src/services/index.d.ts.map +1 -1
  255. package/dist/server/src/types.d.ts +3 -0
  256. package/dist/server/src/types.d.ts.map +1 -1
  257. package/dist/shared/constants.d.ts +35 -0
  258. package/dist/shared/constants.d.ts.map +1 -0
  259. package/dist/shared/contracts/files.d.ts +25 -0
  260. package/dist/shared/contracts/files.d.ts.map +1 -1
  261. package/dist/shared/contracts/settings.d.ts +7 -0
  262. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"AssetsTable.js","sources":["../../../../../../admin/src/future/pages/Assets/components/AssetsTable.tsx"],"sourcesContent":["import { useIsMobile } from '@strapi/admin/strapi-admin';\nimport {\n Checkbox,\n Flex,\n IconButton,\n RawTable,\n RawTbody,\n RawTd,\n RawTh,\n RawThead,\n RawTr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Folder as FolderIcon, More } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled, css } from 'styled-components';\n\nimport { formatBytes } from '../../../utils/files';\nimport { getAssetIcon } from '../../../utils/getAssetIcon';\nimport { getTranslationKey } from '../../../utils/translations';\nimport { TABLE_HEADERS } from '../constants';\nimport { useAssetSelection } from '../hooks/useAssetSelection';\nimport { useFolderNavigation } from '../hooks/useFolderNavigation';\nimport { type MixedItem } from '../utils/mergeMixedList';\nimport { assetKey, folderKey, getSelectAllState, type ItemKey } from '../utils/selection';\n\nimport { useAssetsDndOptional } from './Dnd/AssetsDndProvider';\nimport { useFileDraggable, useFolderDraggableDroppable } from './Dnd/useAssetDnd';\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\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 $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, $isInvalidDropTarget }) => {\n if ($isMovePending) {\n return 'wait';\n }\n\n return $isInvalidDropTarget ? 'not-allowed' : 'pointer';\n }};\n opacity: ${({ $isDragging }) => ($isDragging ? 0.4 : 1)};\n pointer-events: ${({ $isMovePending }) => ($isMovePending ? '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. Narrow + centred so the control sits flush against the\n// row's left edge.\nconst CheckboxTd = styled(StyledTd)`\n width: 1%;\n white-space: nowrap;\n`;\n\nconst CheckboxTh = styled(StyledTh)`\n width: 1%;\n white-space: nowrap;\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\nconst stopRowEvent = (e: React.SyntheticEvent) => {\n e.stopPropagation();\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 isMobile = useIsMobile();\n const { formatDate, formatMessage } = useIntl();\n const { isMovePending } = useAssetsDndOptional() ?? { isMovePending: false };\n const { attributes, listeners, setNodeRef, isDragging } = useFileDraggable(asset);\n const { isSelected, toggle, selectRange } = useAssetSelection();\n\n const key = assetKey(asset.id);\n const selected = isSelected(key);\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 const handleRowClick = (e: React.MouseEvent) => {\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 (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 $isSelected={selected}\n tabIndex={0}\n role=\"row\"\n onDragStart={(e) => e.preventDefault()}\n onClick={handleRowClick}\n onKeyDown={handleKeyDown}\n >\n {/* TODO:? no checkbox column on mobile — multi-select on mobile is deferred. */}\n {!isMobile && (\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 gap={3} alignItems=\"center\">\n <AssetPreviewCell asset={asset} />\n <Flex direction=\"column\" alignItems=\"flex-start\" minWidth={0}>\n <NameButton type=\"button\" onClick={handleNameClick}>\n <Typography textColor=\"neutral800\" fontWeight=\"semiBold\" ellipsis>\n {asset.name}\n </Typography>\n </NameButton>\n {isMobile && (\n <Typography textColor=\"neutral600\" variant=\"pi\">\n {asset.size ? formatBytes(asset.size, 1) : '-'}\n </Typography>\n )}\n </Flex>\n </Flex>\n </StyledTd>\n {!isMobile && (\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 <StyledTd>\n <Flex justifyContent=\"flex-end\">\n <IconButton\n label={formatMessage({\n id: getTranslationKey('control-card.more-actions'),\n defaultMessage: 'More actions',\n })}\n variant=\"ghost\"\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n >\n <More />\n </IconButton>\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 isMobile = useIsMobile();\n const { formatDate, formatMessage } = useIntl();\n const { navigateToFolder } = useFolderNavigation();\n const { isSelected, toggle, selectRange } = useAssetSelection();\n const { isMovePending } = useAssetsDndOptional() ?? { isMovePending: false };\n const {\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 const handleRowClick = (e: React.MouseEvent) => {\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 (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) => e.preventDefault()}\n onClick={handleRowClick}\n onKeyDown={handleKeyDown}\n >\n {!isMobile && (\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\">\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 <Typography textColor=\"neutral800\" fontWeight=\"semiBold\" ellipsis>\n {folder.name}\n </Typography>\n </Flex>\n </StyledTd>\n {!isMobile && (\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 <StyledTd>\n <Flex justifyContent=\"flex-end\">\n <IconButton\n label={formatMessage({\n id: getTranslationKey('control-card.more-actions'),\n defaultMessage: 'More actions',\n })}\n variant=\"ghost\"\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n >\n <More />\n </IconButton>\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 isMobile = useIsMobile();\n const { formatMessage } = useIntl();\n const { selectedKeys, selectAll, clear } = useAssetSelection();\n\n const visibleHeaders = isMobile\n ? TABLE_HEADERS.filter((h) => h.name === 'name' || h.name === 'actions')\n : TABLE_HEADERS;\n\n // The checkbox column is a dedicated structural column (not part of\n // TABLE_HEADERS) and is hidden on mobile.\n const showCheckboxColumn = !isMobile;\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 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","StyledThead","RawThead","neutral100","StyledTh","RawTh","spaces","StyledTd","RawTd","StyledTr","tr","$isSelected","primary100","neutral0","$isMovePending","$isInvalidDropTarget","$isDragging","$isValidDropTarget","css","primary600","CheckboxTd","CheckboxTh","NameButton","button","stopRowEvent","e","stopPropagation","AssetPreviewCell","asset","ext","mime","DocIcon","getAssetIcon","_jsx","Flex","justifyContent","alignItems","borderRadius","color","width","height","shrink","AssetRow","orderedItemKeys","onAssetItemClick","isMobile","useIsMobile","formatDate","formatMessage","useIntl","isMovePending","useAssetsDndOptional","attributes","listeners","setNodeRef","isDragging","useFileDraggable","isSelected","toggle","selectRange","useAssetSelection","key","assetKey","id","selected","handleRowClick","shiftKey","metaKey","ctrlKey","handleKeyDown","preventDefault","handleNameClick","handleCheckboxClick","_jsxs","ref","tabIndex","role","onDragStart","onClick","onKeyDown","Checkbox","checked","aria-label","getTranslationKey","defaultMessage","name","gap","direction","minWidth","type","Typography","textColor","fontWeight","ellipsis","variant","size","formatBytes","_Fragment","createdAt","Date","dateStyle","updatedAt","IconButton","label","More","FolderTr","FolderRow","folder","navigateToFolder","useFolderNavigation","draggable","setDragRef","droppable","setDropRef","showValidDropHighlight","showInvalidDropCursor","useFolderDraggableDroppable","folderKey","node","FolderIcon","AssetsTable","assets","folders","mixedItems","selectedKeys","selectAll","clear","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":"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"}
1
+ {"version":3,"file":"AssetsTable.js","sources":["../../../../../../admin/src/future/pages/Assets/components/AssetsTable.tsx"],"sourcesContent":["import { useIsMobile } from '@strapi/admin/strapi-admin';\nimport {\n Checkbox,\n Flex,\n IconButton,\n RawTable,\n RawTbody,\n RawTd,\n RawTh,\n RawThead,\n RawTr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Folder as FolderIcon, More } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled, css } from 'styled-components';\n\nimport { useMediaLibraryPermissions } from '../../../hooks/useMediaLibraryPermissions';\nimport { formatBytes } from '../../../utils/files';\nimport { getAssetIcon } from '../../../utils/getAssetIcon';\nimport { getTranslationKey } from '../../../utils/translations';\nimport { TABLE_HEADERS } from '../constants';\nimport { useAssetSelection } from '../hooks/useAssetSelection';\nimport { useFolderNavigation } from '../hooks/useFolderNavigation';\nimport { type MixedItem } from '../utils/mergeMixedList';\nimport { assetKey, folderKey, getSelectAllState, type ItemKey } from '../utils/selection';\n\nimport { useAssetsDndOptional } from './Dnd/AssetsDndProvider';\nimport { useFileDraggable, useFolderDraggableDroppable } from './Dnd/useAssetDnd';\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\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 $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, $isInvalidDropTarget }) => {\n if ($isMovePending) {\n return 'wait';\n }\n\n return $isInvalidDropTarget ? 'not-allowed' : 'pointer';\n }};\n opacity: ${({ $isDragging }) => ($isDragging ? 0.4 : 1)};\n pointer-events: ${({ $isMovePending }) => ($isMovePending ? '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. Narrow + centred so the control sits flush against the\n// row's left edge.\nconst CheckboxTd = styled(StyledTd)`\n width: 1%;\n white-space: nowrap;\n`;\n\nconst CheckboxTh = styled(StyledTh)`\n width: 1%;\n white-space: nowrap;\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\nconst stopRowEvent = (e: React.SyntheticEvent) => {\n e.stopPropagation();\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 isMobile = useIsMobile();\n const { formatDate, formatMessage } = useIntl();\n const { isMovePending } = useAssetsDndOptional() ?? { isMovePending: false };\n const { attributes, listeners, setNodeRef, isDragging } = useFileDraggable(asset);\n const { isSelected, toggle, selectRange } = useAssetSelection();\n const { canUpdate } = useMediaLibraryPermissions();\n\n const key = assetKey(asset.id);\n const selected = isSelected(key);\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 const handleRowClick = (e: React.MouseEvent) => {\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 (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 $isSelected={selected}\n tabIndex={0}\n role=\"row\"\n onDragStart={(e) => e.preventDefault()}\n onClick={handleRowClick}\n onKeyDown={handleKeyDown}\n >\n {/* No checkbox column on mobile (multi-select deferred) or without the\n update permission (nothing selectable can be acted on). */}\n {!isMobile && 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 gap={3} alignItems=\"center\">\n <AssetPreviewCell asset={asset} />\n <Flex direction=\"column\" alignItems=\"flex-start\" minWidth={0}>\n <NameButton type=\"button\" onClick={handleNameClick}>\n <Typography textColor=\"neutral800\" fontWeight=\"semiBold\" ellipsis>\n {asset.name}\n </Typography>\n </NameButton>\n {isMobile && (\n <Typography textColor=\"neutral600\" variant=\"pi\">\n {asset.size ? formatBytes(asset.size, 1) : '-'}\n </Typography>\n )}\n </Flex>\n </Flex>\n </StyledTd>\n {!isMobile && (\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 <StyledTd>\n <Flex justifyContent=\"flex-end\">\n <IconButton\n label={formatMessage({\n id: getTranslationKey('control-card.more-actions'),\n defaultMessage: 'More actions',\n })}\n variant=\"ghost\"\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n >\n <More />\n </IconButton>\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 isMobile = useIsMobile();\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 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 const handleRowClick = (e: React.MouseEvent) => {\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 (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) => e.preventDefault()}\n onClick={handleRowClick}\n onKeyDown={handleKeyDown}\n >\n {!isMobile && 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\">\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 <Typography textColor=\"neutral800\" fontWeight=\"semiBold\" ellipsis>\n {folder.name}\n </Typography>\n </Flex>\n </StyledTd>\n {!isMobile && (\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 <StyledTd>\n <Flex justifyContent=\"flex-end\">\n <IconButton\n label={formatMessage({\n id: getTranslationKey('control-card.more-actions'),\n defaultMessage: 'More actions',\n })}\n variant=\"ghost\"\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n >\n <More />\n </IconButton>\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 isMobile = useIsMobile();\n const { formatMessage } = useIntl();\n const { selectedKeys, selectAll, clear } = useAssetSelection();\n const { canUpdate } = useMediaLibraryPermissions();\n\n const visibleHeaders = isMobile\n ? TABLE_HEADERS.filter((h) => h.name === 'name' || h.name === 'actions')\n : TABLE_HEADERS;\n\n // The checkbox column is a dedicated structural column (not part of\n // TABLE_HEADERS). Hidden on mobile (multi-select deferred) and without the\n // update permission — every bulk action needs `assets.update`, so a\n // read-only user has nothing to select for.\n const showCheckboxColumn = !isMobile && 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 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","StyledThead","RawThead","neutral100","StyledTh","RawTh","spaces","StyledTd","RawTd","StyledTr","tr","$isSelected","primary100","neutral0","$isMovePending","$isInvalidDropTarget","$isDragging","$isValidDropTarget","css","primary600","CheckboxTd","CheckboxTh","NameButton","button","stopRowEvent","e","stopPropagation","AssetPreviewCell","asset","ext","mime","DocIcon","getAssetIcon","_jsx","Flex","justifyContent","alignItems","borderRadius","color","width","height","shrink","AssetRow","orderedItemKeys","onAssetItemClick","isMobile","useIsMobile","formatDate","formatMessage","useIntl","isMovePending","useAssetsDndOptional","attributes","listeners","setNodeRef","isDragging","useFileDraggable","isSelected","toggle","selectRange","useAssetSelection","canUpdate","useMediaLibraryPermissions","key","assetKey","id","selected","handleRowClick","shiftKey","metaKey","ctrlKey","handleKeyDown","preventDefault","handleNameClick","handleCheckboxClick","_jsxs","ref","tabIndex","role","onDragStart","onClick","onKeyDown","Checkbox","checked","aria-label","getTranslationKey","defaultMessage","name","gap","direction","minWidth","type","Typography","textColor","fontWeight","ellipsis","variant","size","formatBytes","_Fragment","createdAt","Date","dateStyle","updatedAt","IconButton","label","More","FolderTr","FolderRow","folder","navigateToFolder","useFolderNavigation","draggable","setDragRef","droppable","setDropRef","showValidDropHighlight","showInvalidDropCursor","useFolderDraggableDroppable","folderKey","node","FolderIcon","AssetsTable","assets","folders","mixedItems","selectedKeys","selectAll","clear","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":";;;;;;;;;;;;;;;;;;;AAkCA,MAAMA,WAAAA,GAAcC,uBAAAA,CAAOC,qBAAAA,CAAS;;;;oBAIhB,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACC,UAAU,CAAC;;;AAG7D,CAAC;AAED,MAAMC,WAAAA,GAAcL,uBAAAA,CAAOM,qBAAAA,CAAS;cACtB,EAAE,CAAC,EAAEJ,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACI,UAAU,CAAC;;;6BAG1B,EAAE,CAAC,EAAEL,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACC,UAAU,CAAC;;AAEtE,CAAC;AAED,MAAMI,QAAAA,GAAWR,uBAAAA,CAAOS,kBAAAA,CAAM;;aAEjB,EAAE,CAAC,EAAEP,KAAK,EAAE,GAAKA,KAAAA,CAAMQ,MAAM,CAAC,CAAA,CAAE,CAAC;;AAE9C,CAAC;AAED,MAAMC,QAAAA,GAAWX,uBAAAA,CAAOY,kBAAAA,CAAM;aACjB,EAAE,CAAC,EAAEV,KAAK,EAAE,GAAKA,KAAAA,CAAMQ,MAAM,CAAC,CAAA,CAAE,CAAC;2BACnB,EAAE,CAAC,EAAER,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACC,UAAU,CAAC;AACpE,CAAC;AAED,MAAMS,QAAAA,GAAWb,uBAAAA,CAAOc,EAMtB;;;AAGY,cAAA,EAAE,CAAC,EAAEZ,KAAK,EAAEa,WAAW,EAAE,GACnCA,WAAAA,GAAcb,KAAAA,CAAMC,MAAM,CAACa,UAAU,GAAGd,MAAMC,MAAM,CAACc,QAAQ,CAAC;AACxD,UAAA,EAAE,CAAC,EAAEC,cAAc,EAAEC,oBAAoB,EAAE,GAAA;AACjD,IAAA,IAAID,cAAAA,EAAgB;QAClB,OAAO,MAAA;AACT,IAAA;AAEA,IAAA,OAAOC,uBAAuB,aAAA,GAAgB,SAAA;AAChD,CAAA,CAAE;AACO,WAAA,EAAE,CAAC,EAAEC,WAAW,EAAE,GAAMA,WAAAA,GAAc,MAAM,CAAA,CAAG;AACxC,kBAAA,EAAE,CAAC,EAAEF,cAAc,EAAE,GAAMA,cAAAA,GAAiB,SAAS,MAAA,CAAQ;;EAE7E,EAAE,CAAC,EAAEG,kBAAkB,EAAEnB,KAAK,EAAE,GAC9BmB,kBAAAA,IACAC,oBAAG;AACW,kBAAA,EAAEpB,KAAAA,CAAMC,MAAM,CAACa,UAAU,CAAC;AAClB,0BAAA,EAAEd,KAAAA,CAAMC,MAAM,CAACoB,UAAU,CAAC;;AAEhD,IAAA,CAAC;;;gBAGW,EAAE,CAAC,EAAErB,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACa,UAAU,CAAC;;;;uBAIlC,EAAE,CAAC,EAAEd,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACoB,UAAU,CAAC;;;;;AAK5D,IAAA,EAAEZ,QAAAA,CAAS;;;;AAIf,CAAC;AAED;AACA;AACA,MAAMa,UAAAA,GAAaxB,uBAAAA,CAAOW,QAAAA,CAAS;;;AAGnC,CAAC;AAED,MAAMc,UAAAA,GAAazB,uBAAAA,CAAOQ,QAAAA,CAAS;;;AAGnC,CAAC;AAED;AACA;AACA,MAAMkB,UAAAA,GAAa1B,uBAAAA,CAAO2B,MAAM;;;;;;;;;;;;;uBAaT,EAAE,CAAC,EAAEzB,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACoB,UAAU,CAAC;;;;AAIhE,CAAC;AAED,MAAMK,eAAe,CAACC,CAAAA,GAAAA;AACpBA,IAAAA,CAAAA,CAAEC,eAAe,EAAA;AACnB,CAAA;AAMA,MAAMC,gBAAAA,GAAmB,CAAC,EAAEC,KAAK,EAAyB,GAAA;AACxD,IAAA,MAAM,EAAEC,GAAG,EAAEC,IAAI,EAAE,GAAGF,KAAAA;IAEtB,MAAMG,OAAAA,GAAUC,0BAAaF,IAAAA,EAAMD,GAAAA,CAAAA;AAEnC,IAAA,qBACEI,cAAA,CAACC,iBAAAA,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,cAAA,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,QAAAA,GAAWC,uBAAAA,EAAAA;AACjB,IAAA,MAAM,EAAEC,UAAU,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AACtC,IAAA,MAAM,EAAEC,aAAa,EAAE,GAAGC,sCAAAA,EAAAA,IAA0B;QAAED,aAAAA,EAAe;AAAM,KAAA;IAC3E,MAAM,EAAEE,UAAU,EAAEC,SAAS,EAAEC,UAAU,EAAEC,UAAU,EAAE,GAAGC,4BAAAA,CAAiB5B,KAAAA,CAAAA;AAC3E,IAAA,MAAM,EAAE6B,UAAU,EAAEC,MAAM,EAAEC,WAAW,EAAE,GAAGC,mCAAAA,EAAAA;IAC5C,MAAM,EAAEC,SAAS,EAAE,GAAGC,qDAAAA,EAAAA;IAEtB,MAAMC,GAAAA,GAAMC,kBAAAA,CAASpC,KAAAA,CAAMqC,EAAE,CAAA;AAC7B,IAAA,MAAMC,WAAWT,UAAAA,CAAWM,GAAAA,CAAAA;;;;AAK5B,IAAA,MAAMI,iBAAiB,CAAC1C,CAAAA,GAAAA;QACtB,IAAIA,CAAAA,CAAE2C,QAAQ,EAAE;AACdT,YAAAA,WAAAA,CAAYhB,eAAAA,EAAiBoB,GAAAA,CAAAA;AAC/B,QAAA,CAAA,MAAO,IAAItC,CAAAA,CAAE4C,OAAO,IAAI5C,CAAAA,CAAE6C,OAAO,EAAE;YACjCZ,MAAAA,CAAOK,GAAAA,CAAAA;QACT,CAAA,MAAO;AACLnB,YAAAA,gBAAAA,CAAiBhB,MAAMqC,EAAE,CAAA;AAC3B,QAAA;AACF,IAAA,CAAA;;AAGA,IAAA,MAAMM,gBAAgB,CAAC9C,CAAAA,GAAAA;QACrB,IAAIA,CAAAA,CAAEsC,GAAG,KAAK,OAAA,EAAS;AACrBtC,YAAAA,CAAAA,CAAE+C,cAAc,EAAA;AAChB5B,YAAAA,gBAAAA,CAAiBhB,MAAMqC,EAAE,CAAA;AAC3B,QAAA,CAAA,MAAO,IAAIxC,CAAAA,CAAEsC,GAAG,KAAK,GAAA,EAAK;AACxBtC,YAAAA,CAAAA,CAAE+C,cAAc,EAAA;YAChBd,MAAAA,CAAOK,GAAAA,CAAAA;AACT,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMU,kBAAkB,CAAChD,CAAAA,GAAAA;AACvBA,QAAAA,CAAAA,CAAEC,eAAe,EAAA;AACjBkB,QAAAA,gBAAAA,CAAiBhB,MAAMqC,EAAE,CAAA;AAC3B,IAAA,CAAA;AAEA,IAAA,MAAMS,sBAAsB,CAACjD,CAAAA,GAAAA;AAC3BA,QAAAA,CAAAA,CAAEC,eAAe,EAAA;QACjB,IAAID,CAAAA,CAAE2C,QAAQ,EAAE;AACdT,YAAAA,WAAAA,CAAYhB,eAAAA,EAAiBoB,GAAAA,CAAAA;QAC/B,CAAA,MAAO;YACLL,MAAAA,CAAOK,GAAAA,CAAAA;AACT,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,qBACEY,eAAA,CAAClE,QAAAA,EAAAA;QACCmE,GAAAA,EAAKtB,UAAAA;AACJ,QAAA,GAAGF,UAAU;AACb,QAAA,GAAGC,SAAS;QACbrC,WAAAA,EAAauC,UAAAA;QACbzC,cAAAA,EAAgBoC,aAAAA;QAChBvC,WAAAA,EAAauD,QAAAA;QACbW,QAAAA,EAAU,CAAA;QACVC,IAAAA,EAAK,KAAA;QACLC,WAAAA,EAAa,CAACtD,CAAAA,GAAMA,CAAAA,CAAE+C,cAAc,EAAA;QACpCQ,OAAAA,EAASb,cAAAA;QACTc,SAAAA,EAAWV,aAAAA;;YAIV,CAAC1B,QAAAA,IAAYgB,2BACZ5B,cAAA,CAACb,UAAAA,EAAAA;gBAAW4D,OAAAA,EAASxD,YAAAA;gBAAcyD,SAAAA,EAAWzD,YAAAA;AAC5C,gBAAA,QAAA,gBAAAS,cAAA,CAACC,iBAAAA,EAAAA;AACC,oBAAA,QAAA,gBAAAD,cAAA,CAACiD,qBAAAA,EAAAA;wBACCC,OAAAA,EAASjB,QAAAA;wBACTc,OAAAA,EAASN,mBAAAA;AACTU,wBAAAA,YAAAA,EAAYpC,aAAAA,CACV;AACEiB,4BAAAA,EAAAA,EAAIoB,8BAAAA,CAAkB,uBAAA,CAAA;4BACtBC,cAAAA,EAAgB;yBAClB,EACA;AAAEC,4BAAAA,IAAAA,EAAM3D,MAAM2D;AAAK,yBAAA;;;;0BAM7BtD,cAAA,CAAC1B,QAAAA,EAAAA;AACC,gBAAA,QAAA,gBAAAoE,eAAA,CAACzC,iBAAAA,EAAAA;oBAAKsD,GAAAA,EAAK,CAAA;oBAAGpD,UAAAA,EAAW,QAAA;;sCACvBH,cAAA,CAACN,gBAAAA,EAAAA;4BAAiBC,KAAAA,EAAOA;;sCACzB+C,eAAA,CAACzC,iBAAAA,EAAAA;4BAAKuD,SAAAA,EAAU,QAAA;4BAASrD,UAAAA,EAAW,YAAA;4BAAasD,QAAAA,EAAU,CAAA;;8CACzDzD,cAAA,CAACX,UAAAA,EAAAA;oCAAWqE,IAAAA,EAAK,QAAA;oCAASX,OAAAA,EAASP,eAAAA;AACjC,oCAAA,QAAA,gBAAAxC,cAAA,CAAC2D,uBAAAA,EAAAA;wCAAWC,SAAAA,EAAU,YAAA;wCAAaC,UAAAA,EAAW,UAAA;wCAAWC,QAAQ,EAAA,IAAA;AAC9DnE,wCAAAA,QAAAA,EAAAA,KAAAA,CAAM2D;;;AAGV1C,gCAAAA,QAAAA,kBACCZ,cAAA,CAAC2D,uBAAAA,EAAAA;oCAAWC,SAAAA,EAAU,YAAA;oCAAaG,OAAAA,EAAQ,IAAA;AACxCpE,oCAAAA,QAAAA,EAAAA,KAAAA,CAAMqE,IAAI,GAAGC,iBAAAA,CAAYtE,KAAAA,CAAMqE,IAAI,EAAE,CAAA,CAAA,GAAK;;;;;;;AAMpD,YAAA,CAACpD,QAAAA,kBACA8B,eAAA,CAAAwB,mBAAA,EAAA;;kCACElE,cAAA,CAAC1B,QAAAA,EAAAA;AACC,wBAAA,QAAA,gBAAA0B,cAAA,CAAC2D,uBAAAA,EAAAA;4BAAWC,SAAAA,EAAU,YAAA;AACnBjE,4BAAAA,QAAAA,EAAAA,KAAAA,CAAMwE,SAAS,GAAGrD,UAAAA,CAAW,IAAIsD,IAAAA,CAAKzE,KAAAA,CAAMwE,SAAS,CAAA,EAAG;gCAAEE,SAAAA,EAAW;6BAAO,CAAA,GAAK;;;kCAGtFrE,cAAA,CAAC1B,QAAAA,EAAAA;AACC,wBAAA,QAAA,gBAAA0B,cAAA,CAAC2D,uBAAAA,EAAAA;4BAAWC,SAAAA,EAAU,YAAA;AACnBjE,4BAAAA,QAAAA,EAAAA,KAAAA,CAAM2E,SAAS,GAAGxD,UAAAA,CAAW,IAAIsD,IAAAA,CAAKzE,KAAAA,CAAM2E,SAAS,CAAA,EAAG;gCAAED,SAAAA,EAAW;6BAAO,CAAA,GAAK;;;kCAGtFrE,cAAA,CAAC1B,QAAAA,EAAAA;AACC,wBAAA,QAAA,gBAAA0B,cAAA,CAAC2D,uBAAAA,EAAAA;4BAAWC,SAAAA,EAAU,YAAA;AACnBjE,4BAAAA,QAAAA,EAAAA,KAAAA,CAAMqE,IAAI,GAAGC,iBAAAA,CAAYtE,KAAAA,CAAMqE,IAAI,EAAE,CAAA,CAAA,GAAK;;;;;0BAKnDhE,cAAA,CAAC1B,QAAAA,EAAAA;AACC,gBAAA,QAAA,gBAAA0B,cAAA,CAACC,iBAAAA,EAAAA;oBAAKC,cAAAA,EAAe,UAAA;AACnB,oBAAA,QAAA,gBAAAF,cAAA,CAACuE,uBAAAA,EAAAA;AACCC,wBAAAA,KAAAA,EAAOzD,aAAAA,CAAc;AACnBiB,4BAAAA,EAAAA,EAAIoB,8BAAAA,CAAkB,2BAAA,CAAA;4BACtBC,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACAU,OAAAA,EAAQ,OAAA;wBACRhB,OAAAA,EAAS,CAACvD,CAAAA,GAAwBA,CAAAA,CAAEC,eAAe,EAAA;AAEnD,wBAAA,QAAA,gBAAAO,cAAA,CAACyE,UAAAA,EAAAA,EAAAA;;;;;;AAMb,CAAA;AAEA,MAAMC,QAAAA,GAAW/G,uBAAAA,CAAOa,QAAAA,CAAS;;gBAEjB,EAAE,CAAC,EAAEX,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACa,UAAU,CAAC;;AAEzD,CAAC;AAOD,MAAMgG,YAAY,CAAC,EAAEC,MAAM,EAAElE,eAAe,EAAkB,GAAA;AAC5D,IAAA,MAAME,QAAAA,GAAWC,uBAAAA,EAAAA;AACjB,IAAA,MAAM,EAAEC,UAAU,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IACtC,MAAM,EAAE6D,gBAAgB,EAAE,GAAGC,uCAAAA,EAAAA;AAC7B,IAAA,MAAM,EAAEtD,UAAU,EAAEC,MAAM,EAAEC,WAAW,EAAE,GAAGC,mCAAAA,EAAAA;IAC5C,MAAM,EAAEC,SAAS,EAAE,GAAGC,qDAAAA,EAAAA;AACtB,IAAA,MAAM,EAAEZ,aAAa,EAAE,GAAGC,sCAAAA,EAAAA,IAA0B;QAAED,aAAAA,EAAe;AAAM,KAAA;IAC3E,MAAM,EACJ8D,SAAAA,EAAW,EAAE5D,UAAU,EAAEC,SAAS,EAAEC,UAAAA,EAAY2D,UAAU,EAAE1D,UAAU,EAAE,EACxE2D,SAAAA,EAAW,EAAE5D,UAAAA,EAAY6D,UAAU,EAAE,EACrCC,sBAAsB,EACtBC,qBAAqB,EACtB,GAAGC,uCAAAA,CAA4BT,MAAAA,CAAAA;IAEhC,MAAM9C,GAAAA,GAAMwD,mBAAAA,CAAUV,MAAAA,CAAO5C,EAAE,CAAA;;;AAI/B,IAAA,MAAME,iBAAiB,CAAC1C,CAAAA,GAAAA;QACtB,IAAIA,CAAAA,CAAE2C,QAAQ,EAAE;AACdT,YAAAA,WAAAA,CAAYhB,eAAAA,EAAiBoB,GAAAA,CAAAA;AAC/B,QAAA,CAAA,MAAO,IAAItC,CAAAA,CAAE4C,OAAO,IAAI5C,CAAAA,CAAE6C,OAAO,EAAE;YACjCZ,MAAAA,CAAOK,GAAAA,CAAAA;QACT,CAAA,MAAO;YACL+C,gBAAAA,CAAiBD,MAAAA,CAAAA;AACnB,QAAA;AACF,IAAA,CAAA;;AAGA,IAAA,MAAMtC,gBAAgB,CAAC9C,CAAAA,GAAAA;QACrB,IAAIA,CAAAA,CAAEsC,GAAG,KAAK,OAAA,EAAS;AACrBtC,YAAAA,CAAAA,CAAE+C,cAAc,EAAA;YAChBsC,gBAAAA,CAAiBD,MAAAA,CAAAA;AACnB,QAAA,CAAA,MAAO,IAAIpF,CAAAA,CAAEsC,GAAG,KAAK,GAAA,EAAK;AACxBtC,YAAAA,CAAAA,CAAE+C,cAAc,EAAA;YAChBd,MAAAA,CAAOK,GAAAA,CAAAA;AACT,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMW,sBAAsB,CAACjD,CAAAA,GAAAA;AAC3BA,QAAAA,CAAAA,CAAEC,eAAe,EAAA;QACjB,IAAID,CAAAA,CAAE2C,QAAQ,EAAE;AACdT,YAAAA,WAAAA,CAAYhB,eAAAA,EAAiBoB,GAAAA,CAAAA;QAC/B,CAAA,MAAO;YACLL,MAAAA,CAAOK,GAAAA,CAAAA;AACT,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,qBACEY,eAAA,CAACgC,QAAAA,EAAAA;AACC/B,QAAAA,GAAAA,EAAK,CAAC4C,IAAAA,GAAAA;YACJP,UAAAA,CAAWO,IAAAA,CAAAA;YACXL,UAAAA,CAAWK,IAAAA,CAAAA;AACb,QAAA,CAAA;AACC,QAAA,GAAGpE,UAAU;AACb,QAAA,GAAGC,SAAS;QACbrC,WAAAA,EAAauC,UAAAA;QACbzC,cAAAA,EAAgBoC,aAAAA;QAChBjC,kBAAAA,EAAoBmG,sBAAAA;QACpBrG,oBAAAA,EAAsBsG,qBAAAA;AACtB1G,QAAAA,WAAAA,EAAa8C,UAAAA,CAAWM,GAAAA,CAAAA;QACxBc,QAAAA,EAAU,CAAA;QACVC,IAAAA,EAAK,KAAA;QACLC,WAAAA,EAAa,CAACtD,CAAAA,GAAMA,CAAAA,CAAE+C,cAAc,EAAA;QACpCQ,OAAAA,EAASb,cAAAA;QACTc,SAAAA,EAAWV,aAAAA;;YAEV,CAAC1B,QAAAA,IAAYgB,2BACZ5B,cAAA,CAACb,UAAAA,EAAAA;gBAAW4D,OAAAA,EAASxD,YAAAA;gBAAcyD,SAAAA,EAAWzD,YAAAA;AAC5C,gBAAA,QAAA,gBAAAS,cAAA,CAACC,iBAAAA,EAAAA;AACC,oBAAA,QAAA,gBAAAD,cAAA,CAACiD,qBAAAA,EAAAA;AACCC,wBAAAA,OAAAA,EAAS1B,UAAAA,CAAWM,GAAAA,CAAAA;wBACpBiB,OAAAA,EAASN,mBAAAA;AACTU,wBAAAA,YAAAA,EAAYpC,aAAAA,CACV;AACEiB,4BAAAA,EAAAA,EAAIoB,8BAAAA,CAAkB,uBAAA,CAAA;4BACtBC,cAAAA,EAAgB;yBAClB,EACA;AAAEC,4BAAAA,IAAAA,EAAMsB,OAAOtB;AAAK,yBAAA;;;;0BAM9BtD,cAAA,CAAC1B,QAAAA,EAAAA;AACC,gBAAA,QAAA,gBAAAoE,eAAA,CAACzC,iBAAAA,EAAAA;oBAAKsD,GAAAA,EAAK,CAAA;oBAAGpD,UAAAA,EAAW,QAAA;;sCACvBH,cAAA,CAACC,iBAAAA,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,cAAA,CAACwF,YAAAA,EAAAA;gCAAWlF,KAAAA,EAAO,EAAA;gCAAIC,MAAAA,EAAQ;;;sCAEjCP,cAAA,CAAC2D,uBAAAA,EAAAA;4BAAWC,SAAAA,EAAU,YAAA;4BAAaC,UAAAA,EAAW,UAAA;4BAAWC,QAAQ,EAAA,IAAA;AAC9Dc,4BAAAA,QAAAA,EAAAA,MAAAA,CAAOtB;;;;;AAIb,YAAA,CAAC1C,QAAAA,kBACA8B,eAAA,CAAAwB,mBAAA,EAAA;;kCACElE,cAAA,CAAC1B,QAAAA,EAAAA;AACC,wBAAA,QAAA,gBAAA0B,cAAA,CAAC2D,uBAAAA,EAAAA;4BAAWC,SAAAA,EAAU,YAAA;AACnBgB,4BAAAA,QAAAA,EAAAA,MAAAA,CAAOT,SAAS,GACbrD,UAAAA,CAAW,IAAIsD,IAAAA,CAAKQ,MAAAA,CAAOT,SAAS,CAAA,EAAG;gCAAEE,SAAAA,EAAW;6BAAO,CAAA,GAC3D;;;kCAGRrE,cAAA,CAAC1B,QAAAA,EAAAA;AACC,wBAAA,QAAA,gBAAA0B,cAAA,CAAC2D,uBAAAA,EAAAA;4BAAWC,SAAAA,EAAU,YAAA;AACnBgB,4BAAAA,QAAAA,EAAAA,MAAAA,CAAON,SAAS,GACbxD,UAAAA,CAAW,IAAIsD,IAAAA,CAAKQ,MAAAA,CAAON,SAAS,CAAA,EAAG;gCAAED,SAAAA,EAAW;6BAAO,CAAA,GAC3D;;;kCAGRrE,cAAA,CAAC1B,QAAAA,EAAAA;AACC,wBAAA,QAAA,gBAAA0B,cAAA,CAAC2D,uBAAAA,EAAAA;4BAAWC,SAAAA,EAAU,YAAA;AAAa,4BAAA,QAAA,EAAA;;;;;0BAIzC5D,cAAA,CAAC1B,QAAAA,EAAAA;AACC,gBAAA,QAAA,gBAAA0B,cAAA,CAACC,iBAAAA,EAAAA;oBAAKC,cAAAA,EAAe,UAAA;AACnB,oBAAA,QAAA,gBAAAF,cAAA,CAACuE,uBAAAA,EAAAA;AACCC,wBAAAA,KAAAA,EAAOzD,aAAAA,CAAc;AACnBiB,4BAAAA,EAAAA,EAAIoB,8BAAAA,CAAkB,2BAAA,CAAA;4BACtBC,cAAAA,EAAgB;AAClB,yBAAA,CAAA;wBACAU,OAAAA,EAAQ,OAAA;wBACRhB,OAAAA,EAAS,CAACvD,CAAAA,GAAwBA,CAAAA,CAAEC,eAAe,EAAA;AAEnD,wBAAA,QAAA,gBAAAO,cAAA,CAACyE,UAAAA,EAAAA,EAAAA;;;;;;AAMb,CAAA;AAaO,MAAMgB,WAAAA,GAAc,CAAC,EAC1BC,MAAM,EACNC,OAAAA,GAAU,EAAE,EACZC,UAAAA,GAAa,IAAI,EACjBjF,gBAAgB,EACC,GAAA;AACjB,IAAA,MAAMC,QAAAA,GAAWC,uBAAAA,EAAAA;IACjB,MAAM,EAAEE,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAM,EAAE6E,YAAY,EAAEC,SAAS,EAAEC,KAAK,EAAE,GAAGpE,mCAAAA,EAAAA;IAC3C,MAAM,EAAEC,SAAS,EAAE,GAAGC,qDAAAA,EAAAA;AAEtB,IAAA,MAAMmE,cAAAA,GAAiBpF,QAAAA,GACnBqF,uBAAAA,CAAcC,MAAM,CAAC,CAACC,CAAAA,GAAMA,CAAAA,CAAE7C,IAAI,KAAK,MAAA,IAAU6C,CAAAA,CAAE7C,IAAI,KAAK,SAAA,CAAA,GAC5D2C,uBAAAA;;;;;IAMJ,MAAMG,kBAAAA,GAAqB,CAACxF,QAAAA,IAAYgB,SAAAA;AACxC,IAAA,MAAMyE,WAAWL,cAAAA,CAAeM,MAAM,IAAIF,kBAAAA,GAAqB,IAAI,CAAA,CAAA;AAEnE,IAAA,MAAMG,SAAAA,GAAYZ,OAAAA,CAAQW,MAAM,GAAGZ,OAAOY,MAAM;;;IAIhD,MAAM5F,eAAAA,GAA6BkF,aAC/BA,UAAAA,CAAWY,GAAG,CAAC,CAACC,IAAAA,GACdA,IAAAA,CAAKC,IAAI,KAAK,QAAA,GAAWpB,oBAAUmB,IAAAA,CAAK7B,MAAM,CAAC5C,EAAE,CAAA,GAAID,mBAAS0E,IAAAA,CAAK9G,KAAK,CAACqC,EAAE,CAAA,CAAA,GAE7E;AACK2D,QAAAA,GAAAA,OAAAA,CAAQa,GAAG,CAAC,CAAC5B,MAAAA,GAAWU,mBAAAA,CAAUV,OAAO5C,EAAE,CAAA,CAAA;AAC3C0D,QAAAA,GAAAA,MAAAA,CAAOc,GAAG,CAAC,CAAC7G,KAAAA,GAAUoC,kBAAAA,CAASpC,MAAMqC,EAAE,CAAA;AAC3C,KAAA;AACL,IAAA,MAAM,EAAE2E,WAAW,EAAEC,eAAe,EAAE,GAAGC,4BAAkBhB,YAAAA,EAAcnF,eAAAA,CAAAA;AAEzE,IAAA,MAAMoG,eAAAA,GAAkB,IAAA;AACtB,QAAA,IAAIH,WAAAA,EAAa;AACfZ,YAAAA,KAAAA,EAAAA;QACF,CAAA,MAAO;YACLD,SAAAA,CAAUpF,eAAAA,CAAAA;AACZ,QAAA;AACF,IAAA,CAAA;;;AAIA,IAAA,IAAI6F,cAAc,CAAA,EAAG;QACnB,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,qBACE7D,eAAA,CAAChF,WAAAA,EAAAA;QAAY2I,QAAAA,EAAUA,QAAAA;AAAUU,QAAAA,QAAAA,EAAU,CAACnB,UAAAA,GAAaA,WAAWU,MAAM,GAAGC,SAAQ,IAAK,CAAA;;0BACxFvG,cAAA,CAAChC,WAAAA,EAAAA;AACC,gBAAA,QAAA,gBAAA0E,eAAA,CAACsE,kBAAAA,EAAAA;;AACEZ,wBAAAA,kBAAAA,kBACCpG,cAAA,CAACZ,UAAAA,EAAAA;AACC,4BAAA,QAAA,gBAAAY,cAAA,CAACC,iBAAAA,EAAAA;AACC,gCAAA,QAAA,gBAAAD,cAAA,CAACiD,qBAAAA,EAAAA;AACCC,oCAAAA,OAAAA,EAAS0D,kBAAkB,eAAA,GAAkBD,WAAAA;oCAC7CM,QAAAA,EAAUvG,eAAAA,CAAgB4F,MAAM,KAAK,CAAA;oCACrCY,eAAAA,EAAiBJ,eAAAA;AACjB3D,oCAAAA,YAAAA,EAAYpC,aAAAA,CAAc;AACxBiB,wCAAAA,EAAAA,EAAIoB,8BAAAA,CAAkB,8BAAA,CAAA;wCACtBC,cAAAA,EAAgB;AAClB,qCAAA;;;;wBAKP2C,cAAAA,CAAeQ,GAAG,CAAC,CAACW,MAAAA,GAAAA;4BACnB,MAAMC,gBAAAA,GAAmBrG,aAAAA,CAAcoG,MAAAA,CAAO3C,KAAK,CAAA;AACnD,4BAAA,MAAM6C,gBAAAA,GAAmB,kBAAA,IAAsBF,MAAAA,IAAUA,MAAAA,CAAOE,gBAAgB;AAEhF,4BAAA,IAAIA,gBAAAA,EAAkB;AACpB,gCAAA,qBACErH,cAAA,CAAC7B,QAAAA,EAAAA;AACC,oCAAA,QAAA,gBAAA6B,cAAA,CAACsH,2BAAAA,EAAAA;kDACEvG,aAAAA,CAAc;AACbiB,4CAAAA,EAAAA,EAAIoB,8BAAAA,CAAkB,sBAAA,CAAA;4CACtBC,cAAAA,EAAgB;AAClB,yCAAA;;AALW8D,iCAAAA,EAAAA,MAAAA,CAAO7D,IAAI,CAAA;AAS9B,4BAAA;AAEA,4BAAA,qBACEtD,cAAA,CAAC7B,QAAAA,EAAAA;AACC,gCAAA,QAAA,gBAAA6B,cAAA,CAAC2D,uBAAAA,EAAAA;oCAAWC,SAAAA,EAAU,YAAA;oCAAaG,OAAAA,EAAQ,OAAA;AACxCqD,oCAAAA,QAAAA,EAAAA;;AAFUD,6BAAAA,EAAAA,MAAAA,CAAO7D,IAAI,CAAA;AAM9B,wBAAA,CAAA;;;;0BAGJZ,eAAA,CAAC6E,qBAAAA,EAAAA;;AACE3B,oBAAAA,UAAAA,EAAYY,IAAI,CAACC,IAAAA,GAChBA,KAAKC,IAAI,KAAK,yBACZ1G,cAAA,CAAC2E,SAAAA,EAAAA;AAECC,4BAAAA,MAAAA,EAAQ6B,KAAK7B,MAAM;4BACnBlE,eAAAA,EAAiBA;2BAFZ,CAAC,OAAO,EAAE+F,IAAAA,CAAK7B,MAAM,CAAC5C,EAAE,CAAA,CAAE,kBAKjChC,cAAA,CAACS,QAAAA,EAAAA;AAECd,4BAAAA,KAAAA,EAAO8G,KAAK9G,KAAK;4BACjBe,eAAAA,EAAiBA,eAAAA;4BACjBC,gBAAAA,EAAkBA;2BAHb8F,IAAAA,CAAK9G,KAAK,CAACqC,EAAE,CAAA,CAAA;AAOvB,oBAAA,CAAC4D,cACAD,OAAAA,CAAQa,GAAG,CAAC,CAAC5B,uBACX5E,cAAA,CAAC2E,SAAAA,EAAAA;4BAECC,MAAAA,EAAQA,MAAAA;4BACRlE,eAAAA,EAAiBA;AAFZ,yBAAA,EAAA,CAAC,OAAO,EAAEkE,MAAAA,CAAO5C,EAAE,CAAA,CAAE,CAAA,CAAA;AAK/B,oBAAA,CAAC4D,cACAF,MAAAA,CAAOc,GAAG,CAAC,CAAC7G,sBACVK,cAAA,CAACS,QAAAA,EAAAA;4BAECd,KAAAA,EAAOA,KAAAA;4BACPe,eAAAA,EAAiBA,eAAAA;4BACjBC,gBAAAA,EAAkBA;AAHbhB,yBAAAA,EAAAA,KAAAA,CAAMqC,EAAE,CAAA;;;;;AAS3B;;;;"}
@@ -4,6 +4,7 @@ import { RawTr, Flex, Checkbox, VisuallyHidden, Typography, RawTbody, RawTable,
4
4
  import { Folder, More } from '@strapi/icons';
5
5
  import { useIntl } from 'react-intl';
6
6
  import { styled, css } from 'styled-components';
7
+ import { useMediaLibraryPermissions } from '../../../hooks/useMediaLibraryPermissions.mjs';
7
8
  import { formatBytes } from '../../../utils/files.mjs';
8
9
  import { getAssetIcon } from '../../../utils/getAssetIcon.mjs';
9
10
  import { getTranslationKey } from '../../../utils/translations.mjs';
@@ -130,6 +131,7 @@ const AssetRow = ({ asset, orderedItemKeys, onAssetItemClick })=>{
130
131
  };
131
132
  const { attributes, listeners, setNodeRef, isDragging } = useFileDraggable(asset);
132
133
  const { isSelected, toggle, selectRange } = useAssetSelection();
134
+ const { canUpdate } = useMediaLibraryPermissions();
133
135
  const key = assetKey(asset.id);
134
136
  const selected = isSelected(key);
135
137
  // Plain click opens the asset details; pointer selection lives on the
@@ -179,7 +181,7 @@ const AssetRow = ({ asset, orderedItemKeys, onAssetItemClick })=>{
179
181
  onClick: handleRowClick,
180
182
  onKeyDown: handleKeyDown,
181
183
  children: [
182
- !isMobile && /*#__PURE__*/ jsx(CheckboxTd, {
184
+ !isMobile && canUpdate && /*#__PURE__*/ jsx(CheckboxTd, {
183
185
  onClick: stopRowEvent,
184
186
  onKeyDown: stopRowEvent,
185
187
  children: /*#__PURE__*/ jsx(Flex, {
@@ -281,6 +283,7 @@ const FolderRow = ({ folder, orderedItemKeys })=>{
281
283
  const { formatDate, formatMessage } = useIntl();
282
284
  const { navigateToFolder } = useFolderNavigation();
283
285
  const { isSelected, toggle, selectRange } = useAssetSelection();
286
+ const { canUpdate } = useMediaLibraryPermissions();
284
287
  const { isMovePending } = useAssetsDndOptional() ?? {
285
288
  isMovePending: false
286
289
  };
@@ -333,7 +336,7 @@ const FolderRow = ({ folder, orderedItemKeys })=>{
333
336
  onClick: handleRowClick,
334
337
  onKeyDown: handleKeyDown,
335
338
  children: [
336
- !isMobile && /*#__PURE__*/ jsx(CheckboxTd, {
339
+ !isMobile && canUpdate && /*#__PURE__*/ jsx(CheckboxTd, {
337
340
  onClick: stopRowEvent,
338
341
  onKeyDown: stopRowEvent,
339
342
  children: /*#__PURE__*/ jsx(Flex, {
@@ -423,10 +426,13 @@ const AssetsTable = ({ assets, folders = [], mixedItems = null, onAssetItemClick
423
426
  const isMobile = useIsMobile();
424
427
  const { formatMessage } = useIntl();
425
428
  const { selectedKeys, selectAll, clear } = useAssetSelection();
429
+ const { canUpdate } = useMediaLibraryPermissions();
426
430
  const visibleHeaders = isMobile ? TABLE_HEADERS.filter((h)=>h.name === 'name' || h.name === 'actions') : TABLE_HEADERS;
427
431
  // The checkbox column is a dedicated structural column (not part of
428
- // TABLE_HEADERS) and is hidden on mobile.
429
- const showCheckboxColumn = !isMobile;
432
+ // TABLE_HEADERS). Hidden on mobile (multi-select deferred) and without the
433
+ // update permission — every bulk action needs `assets.update`, so a
434
+ // read-only user has nothing to select for.
435
+ const showCheckboxColumn = !isMobile && canUpdate;
430
436
  const colCount = visibleHeaders.length + (showCheckboxColumn ? 1 : 0);
431
437
  const totalRows = folders.length + assets.length;
432
438
  // Render order — folders first by default, or the interleaved mixed order.
@@ -1 +1 @@
1
- {"version":3,"file":"AssetsTable.mjs","sources":["../../../../../../admin/src/future/pages/Assets/components/AssetsTable.tsx"],"sourcesContent":["import { useIsMobile } from '@strapi/admin/strapi-admin';\nimport {\n Checkbox,\n Flex,\n IconButton,\n RawTable,\n RawTbody,\n RawTd,\n RawTh,\n RawThead,\n RawTr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Folder as FolderIcon, More } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled, css } from 'styled-components';\n\nimport { formatBytes } from '../../../utils/files';\nimport { getAssetIcon } from '../../../utils/getAssetIcon';\nimport { getTranslationKey } from '../../../utils/translations';\nimport { TABLE_HEADERS } from '../constants';\nimport { useAssetSelection } from '../hooks/useAssetSelection';\nimport { useFolderNavigation } from '../hooks/useFolderNavigation';\nimport { type MixedItem } from '../utils/mergeMixedList';\nimport { assetKey, folderKey, getSelectAllState, type ItemKey } from '../utils/selection';\n\nimport { useAssetsDndOptional } from './Dnd/AssetsDndProvider';\nimport { useFileDraggable, useFolderDraggableDroppable } from './Dnd/useAssetDnd';\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\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 $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, $isInvalidDropTarget }) => {\n if ($isMovePending) {\n return 'wait';\n }\n\n return $isInvalidDropTarget ? 'not-allowed' : 'pointer';\n }};\n opacity: ${({ $isDragging }) => ($isDragging ? 0.4 : 1)};\n pointer-events: ${({ $isMovePending }) => ($isMovePending ? '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. Narrow + centred so the control sits flush against the\n// row's left edge.\nconst CheckboxTd = styled(StyledTd)`\n width: 1%;\n white-space: nowrap;\n`;\n\nconst CheckboxTh = styled(StyledTh)`\n width: 1%;\n white-space: nowrap;\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\nconst stopRowEvent = (e: React.SyntheticEvent) => {\n e.stopPropagation();\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 isMobile = useIsMobile();\n const { formatDate, formatMessage } = useIntl();\n const { isMovePending } = useAssetsDndOptional() ?? { isMovePending: false };\n const { attributes, listeners, setNodeRef, isDragging } = useFileDraggable(asset);\n const { isSelected, toggle, selectRange } = useAssetSelection();\n\n const key = assetKey(asset.id);\n const selected = isSelected(key);\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 const handleRowClick = (e: React.MouseEvent) => {\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 (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 $isSelected={selected}\n tabIndex={0}\n role=\"row\"\n onDragStart={(e) => e.preventDefault()}\n onClick={handleRowClick}\n onKeyDown={handleKeyDown}\n >\n {/* TODO:? no checkbox column on mobile — multi-select on mobile is deferred. */}\n {!isMobile && (\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 gap={3} alignItems=\"center\">\n <AssetPreviewCell asset={asset} />\n <Flex direction=\"column\" alignItems=\"flex-start\" minWidth={0}>\n <NameButton type=\"button\" onClick={handleNameClick}>\n <Typography textColor=\"neutral800\" fontWeight=\"semiBold\" ellipsis>\n {asset.name}\n </Typography>\n </NameButton>\n {isMobile && (\n <Typography textColor=\"neutral600\" variant=\"pi\">\n {asset.size ? formatBytes(asset.size, 1) : '-'}\n </Typography>\n )}\n </Flex>\n </Flex>\n </StyledTd>\n {!isMobile && (\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 <StyledTd>\n <Flex justifyContent=\"flex-end\">\n <IconButton\n label={formatMessage({\n id: getTranslationKey('control-card.more-actions'),\n defaultMessage: 'More actions',\n })}\n variant=\"ghost\"\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n >\n <More />\n </IconButton>\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 isMobile = useIsMobile();\n const { formatDate, formatMessage } = useIntl();\n const { navigateToFolder } = useFolderNavigation();\n const { isSelected, toggle, selectRange } = useAssetSelection();\n const { isMovePending } = useAssetsDndOptional() ?? { isMovePending: false };\n const {\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 const handleRowClick = (e: React.MouseEvent) => {\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 (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) => e.preventDefault()}\n onClick={handleRowClick}\n onKeyDown={handleKeyDown}\n >\n {!isMobile && (\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\">\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 <Typography textColor=\"neutral800\" fontWeight=\"semiBold\" ellipsis>\n {folder.name}\n </Typography>\n </Flex>\n </StyledTd>\n {!isMobile && (\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 <StyledTd>\n <Flex justifyContent=\"flex-end\">\n <IconButton\n label={formatMessage({\n id: getTranslationKey('control-card.more-actions'),\n defaultMessage: 'More actions',\n })}\n variant=\"ghost\"\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n >\n <More />\n </IconButton>\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 isMobile = useIsMobile();\n const { formatMessage } = useIntl();\n const { selectedKeys, selectAll, clear } = useAssetSelection();\n\n const visibleHeaders = isMobile\n ? TABLE_HEADERS.filter((h) => h.name === 'name' || h.name === 'actions')\n : TABLE_HEADERS;\n\n // The checkbox column is a dedicated structural column (not part of\n // TABLE_HEADERS) and is hidden on mobile.\n const showCheckboxColumn = !isMobile;\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 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","StyledThead","RawThead","neutral100","StyledTh","RawTh","spaces","StyledTd","RawTd","StyledTr","tr","$isSelected","primary100","neutral0","$isMovePending","$isInvalidDropTarget","$isDragging","$isValidDropTarget","css","primary600","CheckboxTd","CheckboxTh","NameButton","button","stopRowEvent","e","stopPropagation","AssetPreviewCell","asset","ext","mime","DocIcon","getAssetIcon","_jsx","Flex","justifyContent","alignItems","borderRadius","color","width","height","shrink","AssetRow","orderedItemKeys","onAssetItemClick","isMobile","useIsMobile","formatDate","formatMessage","useIntl","isMovePending","useAssetsDndOptional","attributes","listeners","setNodeRef","isDragging","useFileDraggable","isSelected","toggle","selectRange","useAssetSelection","key","assetKey","id","selected","handleRowClick","shiftKey","metaKey","ctrlKey","handleKeyDown","preventDefault","handleNameClick","handleCheckboxClick","_jsxs","ref","tabIndex","role","onDragStart","onClick","onKeyDown","Checkbox","checked","aria-label","getTranslationKey","defaultMessage","name","gap","direction","minWidth","type","Typography","textColor","fontWeight","ellipsis","variant","size","formatBytes","_Fragment","createdAt","Date","dateStyle","updatedAt","IconButton","label","More","FolderTr","FolderRow","folder","navigateToFolder","useFolderNavigation","draggable","setDragRef","droppable","setDropRef","showValidDropHighlight","showInvalidDropCursor","useFolderDraggableDroppable","folderKey","node","FolderIcon","AssetsTable","assets","folders","mixedItems","selectedKeys","selectAll","clear","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":"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"}
1
+ {"version":3,"file":"AssetsTable.mjs","sources":["../../../../../../admin/src/future/pages/Assets/components/AssetsTable.tsx"],"sourcesContent":["import { useIsMobile } from '@strapi/admin/strapi-admin';\nimport {\n Checkbox,\n Flex,\n IconButton,\n RawTable,\n RawTbody,\n RawTd,\n RawTh,\n RawThead,\n RawTr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Folder as FolderIcon, More } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled, css } from 'styled-components';\n\nimport { useMediaLibraryPermissions } from '../../../hooks/useMediaLibraryPermissions';\nimport { formatBytes } from '../../../utils/files';\nimport { getAssetIcon } from '../../../utils/getAssetIcon';\nimport { getTranslationKey } from '../../../utils/translations';\nimport { TABLE_HEADERS } from '../constants';\nimport { useAssetSelection } from '../hooks/useAssetSelection';\nimport { useFolderNavigation } from '../hooks/useFolderNavigation';\nimport { type MixedItem } from '../utils/mergeMixedList';\nimport { assetKey, folderKey, getSelectAllState, type ItemKey } from '../utils/selection';\n\nimport { useAssetsDndOptional } from './Dnd/AssetsDndProvider';\nimport { useFileDraggable, useFolderDraggableDroppable } from './Dnd/useAssetDnd';\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\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 $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, $isInvalidDropTarget }) => {\n if ($isMovePending) {\n return 'wait';\n }\n\n return $isInvalidDropTarget ? 'not-allowed' : 'pointer';\n }};\n opacity: ${({ $isDragging }) => ($isDragging ? 0.4 : 1)};\n pointer-events: ${({ $isMovePending }) => ($isMovePending ? '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. Narrow + centred so the control sits flush against the\n// row's left edge.\nconst CheckboxTd = styled(StyledTd)`\n width: 1%;\n white-space: nowrap;\n`;\n\nconst CheckboxTh = styled(StyledTh)`\n width: 1%;\n white-space: nowrap;\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\nconst stopRowEvent = (e: React.SyntheticEvent) => {\n e.stopPropagation();\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 isMobile = useIsMobile();\n const { formatDate, formatMessage } = useIntl();\n const { isMovePending } = useAssetsDndOptional() ?? { isMovePending: false };\n const { attributes, listeners, setNodeRef, isDragging } = useFileDraggable(asset);\n const { isSelected, toggle, selectRange } = useAssetSelection();\n const { canUpdate } = useMediaLibraryPermissions();\n\n const key = assetKey(asset.id);\n const selected = isSelected(key);\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 const handleRowClick = (e: React.MouseEvent) => {\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 (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 $isSelected={selected}\n tabIndex={0}\n role=\"row\"\n onDragStart={(e) => e.preventDefault()}\n onClick={handleRowClick}\n onKeyDown={handleKeyDown}\n >\n {/* No checkbox column on mobile (multi-select deferred) or without the\n update permission (nothing selectable can be acted on). */}\n {!isMobile && 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 gap={3} alignItems=\"center\">\n <AssetPreviewCell asset={asset} />\n <Flex direction=\"column\" alignItems=\"flex-start\" minWidth={0}>\n <NameButton type=\"button\" onClick={handleNameClick}>\n <Typography textColor=\"neutral800\" fontWeight=\"semiBold\" ellipsis>\n {asset.name}\n </Typography>\n </NameButton>\n {isMobile && (\n <Typography textColor=\"neutral600\" variant=\"pi\">\n {asset.size ? formatBytes(asset.size, 1) : '-'}\n </Typography>\n )}\n </Flex>\n </Flex>\n </StyledTd>\n {!isMobile && (\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 <StyledTd>\n <Flex justifyContent=\"flex-end\">\n <IconButton\n label={formatMessage({\n id: getTranslationKey('control-card.more-actions'),\n defaultMessage: 'More actions',\n })}\n variant=\"ghost\"\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n >\n <More />\n </IconButton>\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 isMobile = useIsMobile();\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 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 const handleRowClick = (e: React.MouseEvent) => {\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 (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) => e.preventDefault()}\n onClick={handleRowClick}\n onKeyDown={handleKeyDown}\n >\n {!isMobile && 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\">\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 <Typography textColor=\"neutral800\" fontWeight=\"semiBold\" ellipsis>\n {folder.name}\n </Typography>\n </Flex>\n </StyledTd>\n {!isMobile && (\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 <StyledTd>\n <Flex justifyContent=\"flex-end\">\n <IconButton\n label={formatMessage({\n id: getTranslationKey('control-card.more-actions'),\n defaultMessage: 'More actions',\n })}\n variant=\"ghost\"\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n >\n <More />\n </IconButton>\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 isMobile = useIsMobile();\n const { formatMessage } = useIntl();\n const { selectedKeys, selectAll, clear } = useAssetSelection();\n const { canUpdate } = useMediaLibraryPermissions();\n\n const visibleHeaders = isMobile\n ? TABLE_HEADERS.filter((h) => h.name === 'name' || h.name === 'actions')\n : TABLE_HEADERS;\n\n // The checkbox column is a dedicated structural column (not part of\n // TABLE_HEADERS). Hidden on mobile (multi-select deferred) and without the\n // update permission — every bulk action needs `assets.update`, so a\n // read-only user has nothing to select for.\n const showCheckboxColumn = !isMobile && 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 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","StyledThead","RawThead","neutral100","StyledTh","RawTh","spaces","StyledTd","RawTd","StyledTr","tr","$isSelected","primary100","neutral0","$isMovePending","$isInvalidDropTarget","$isDragging","$isValidDropTarget","css","primary600","CheckboxTd","CheckboxTh","NameButton","button","stopRowEvent","e","stopPropagation","AssetPreviewCell","asset","ext","mime","DocIcon","getAssetIcon","_jsx","Flex","justifyContent","alignItems","borderRadius","color","width","height","shrink","AssetRow","orderedItemKeys","onAssetItemClick","isMobile","useIsMobile","formatDate","formatMessage","useIntl","isMovePending","useAssetsDndOptional","attributes","listeners","setNodeRef","isDragging","useFileDraggable","isSelected","toggle","selectRange","useAssetSelection","canUpdate","useMediaLibraryPermissions","key","assetKey","id","selected","handleRowClick","shiftKey","metaKey","ctrlKey","handleKeyDown","preventDefault","handleNameClick","handleCheckboxClick","_jsxs","ref","tabIndex","role","onDragStart","onClick","onKeyDown","Checkbox","checked","aria-label","getTranslationKey","defaultMessage","name","gap","direction","minWidth","type","Typography","textColor","fontWeight","ellipsis","variant","size","formatBytes","_Fragment","createdAt","Date","dateStyle","updatedAt","IconButton","label","More","FolderTr","FolderRow","folder","navigateToFolder","useFolderNavigation","draggable","setDragRef","droppable","setDropRef","showValidDropHighlight","showInvalidDropCursor","useFolderDraggableDroppable","folderKey","node","FolderIcon","AssetsTable","assets","folders","mixedItems","selectedKeys","selectAll","clear","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":"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"}