@strapi/upload 5.51.2 → 5.52.1

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 (253) hide show
  1. package/dist/admin/future/App.js +3 -3
  2. package/dist/admin/future/App.js.map +1 -1
  3. package/dist/admin/future/App.mjs +4 -4
  4. package/dist/admin/future/App.mjs.map +1 -1
  5. package/dist/admin/future/components/BetaNotice.js +72 -0
  6. package/dist/admin/future/components/BetaNotice.js.map +1 -0
  7. package/dist/admin/future/components/BetaNotice.mjs +70 -0
  8. package/dist/admin/future/components/BetaNotice.mjs.map +1 -0
  9. package/dist/admin/future/components/Drawer.js +16 -3
  10. package/dist/admin/future/components/Drawer.js.map +1 -1
  11. package/dist/admin/future/components/Drawer.mjs +16 -3
  12. package/dist/admin/future/components/Drawer.mjs.map +1 -1
  13. package/dist/admin/future/components/TruncatedText.js +76 -0
  14. package/dist/admin/future/components/TruncatedText.js.map +1 -0
  15. package/dist/admin/future/components/TruncatedText.mjs +74 -0
  16. package/dist/admin/future/components/TruncatedText.mjs.map +1 -0
  17. package/dist/admin/future/hooks/useAIMetadataEnabled.js +39 -0
  18. package/dist/admin/future/hooks/useAIMetadataEnabled.js.map +1 -0
  19. package/dist/admin/future/hooks/useAIMetadataEnabled.mjs +37 -0
  20. package/dist/admin/future/hooks/useAIMetadataEnabled.mjs.map +1 -0
  21. package/dist/admin/future/hooks/useTracking.js +57 -0
  22. package/dist/admin/future/hooks/useTracking.js.map +1 -0
  23. package/dist/admin/future/hooks/useTracking.mjs +53 -0
  24. package/dist/admin/future/hooks/useTracking.mjs.map +1 -0
  25. package/dist/admin/future/pages/Assets/AssetsPage.js +328 -139
  26. package/dist/admin/future/pages/Assets/AssetsPage.js.map +1 -1
  27. package/dist/admin/future/pages/Assets/AssetsPage.mjs +332 -143
  28. package/dist/admin/future/pages/Assets/AssetsPage.mjs.map +1 -1
  29. package/dist/admin/future/pages/Assets/components/ActionsMenuContent.js +46 -0
  30. package/dist/admin/future/pages/Assets/components/ActionsMenuContent.js.map +1 -0
  31. package/dist/admin/future/pages/Assets/components/ActionsMenuContent.mjs +44 -0
  32. package/dist/admin/future/pages/Assets/components/ActionsMenuContent.mjs.map +1 -0
  33. package/dist/admin/future/pages/Assets/components/AssetActionsMenu.js +328 -0
  34. package/dist/admin/future/pages/Assets/components/AssetActionsMenu.js.map +1 -0
  35. package/dist/admin/future/pages/Assets/components/AssetActionsMenu.mjs +326 -0
  36. package/dist/admin/future/pages/Assets/components/AssetActionsMenu.mjs.map +1 -0
  37. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.js +35 -14
  38. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.js.map +1 -1
  39. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.mjs +35 -14
  40. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetCropEditor.mjs.map +1 -1
  41. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js +74 -53
  42. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.js.map +1 -1
  43. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs +74 -54
  44. package/dist/admin/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.mjs.map +1 -1
  45. package/dist/admin/future/pages/Assets/components/AssetsGrid.js +92 -28
  46. package/dist/admin/future/pages/Assets/components/AssetsGrid.js.map +1 -1
  47. package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs +94 -30
  48. package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs.map +1 -1
  49. package/dist/admin/future/pages/Assets/components/AssetsSearchInput.js +26 -4
  50. package/dist/admin/future/pages/Assets/components/AssetsSearchInput.js.map +1 -1
  51. package/dist/admin/future/pages/Assets/components/AssetsSearchInput.mjs +27 -5
  52. package/dist/admin/future/pages/Assets/components/AssetsSearchInput.mjs.map +1 -1
  53. package/dist/admin/future/pages/Assets/components/AssetsTable.js +172 -60
  54. package/dist/admin/future/pages/Assets/components/AssetsTable.js.map +1 -1
  55. package/dist/admin/future/pages/Assets/components/AssetsTable.mjs +175 -63
  56. package/dist/admin/future/pages/Assets/components/AssetsTable.mjs.map +1 -1
  57. package/dist/admin/future/pages/Assets/components/BulkActionsBar.js +64 -132
  58. package/dist/admin/future/pages/Assets/components/BulkActionsBar.js.map +1 -1
  59. package/dist/admin/future/pages/Assets/components/BulkActionsBar.mjs +64 -132
  60. package/dist/admin/future/pages/Assets/components/BulkActionsBar.mjs.map +1 -1
  61. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.js +123 -76
  62. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.js.map +1 -1
  63. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.mjs +126 -79
  64. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.mjs.map +1 -1
  65. package/dist/admin/future/pages/Assets/components/BusyOverlay.js +36 -0
  66. package/dist/admin/future/pages/Assets/components/BusyOverlay.js.map +1 -0
  67. package/dist/admin/future/pages/Assets/components/BusyOverlay.mjs +34 -0
  68. package/dist/admin/future/pages/Assets/components/BusyOverlay.mjs.map +1 -0
  69. package/dist/admin/future/pages/Assets/components/DeleteItemsDialog.js +131 -0
  70. package/dist/admin/future/pages/Assets/components/DeleteItemsDialog.js.map +1 -0
  71. package/dist/admin/future/pages/Assets/components/DeleteItemsDialog.mjs +129 -0
  72. package/dist/admin/future/pages/Assets/components/DeleteItemsDialog.mjs.map +1 -0
  73. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.js +27 -17
  74. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.js.map +1 -1
  75. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.mjs +28 -18
  76. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.mjs.map +1 -1
  77. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.js +28 -31
  78. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.js.map +1 -1
  79. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.mjs +28 -31
  80. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.mjs.map +1 -1
  81. package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.js +10 -15
  82. package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.js.map +1 -1
  83. package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.mjs +10 -15
  84. package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.mjs.map +1 -1
  85. package/dist/admin/future/pages/Assets/components/FilterBadges.js +13 -4
  86. package/dist/admin/future/pages/Assets/components/FilterBadges.js.map +1 -1
  87. package/dist/admin/future/pages/Assets/components/FilterBadges.mjs +13 -4
  88. package/dist/admin/future/pages/Assets/components/FilterBadges.mjs.map +1 -1
  89. package/dist/admin/future/pages/Assets/components/FilterMenu.js +259 -63
  90. package/dist/admin/future/pages/Assets/components/FilterMenu.js.map +1 -1
  91. package/dist/admin/future/pages/Assets/components/FilterMenu.mjs +262 -66
  92. package/dist/admin/future/pages/Assets/components/FilterMenu.mjs.map +1 -1
  93. package/dist/admin/future/pages/Assets/components/FolderActionsMenu.js +146 -0
  94. package/dist/admin/future/pages/Assets/components/FolderActionsMenu.js.map +1 -0
  95. package/dist/admin/future/pages/Assets/components/FolderActionsMenu.mjs +144 -0
  96. package/dist/admin/future/pages/Assets/components/FolderActionsMenu.mjs.map +1 -0
  97. package/dist/admin/future/pages/Assets/components/{CreateFolderDialog.js → FolderFormDialog.js} +62 -16
  98. package/dist/admin/future/pages/Assets/components/FolderFormDialog.js.map +1 -0
  99. package/dist/admin/future/pages/Assets/components/{CreateFolderDialog.mjs → FolderFormDialog.mjs} +64 -18
  100. package/dist/admin/future/pages/Assets/components/FolderFormDialog.mjs.map +1 -0
  101. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.js +132 -229
  102. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.js.map +1 -1
  103. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.mjs +135 -232
  104. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.mjs.map +1 -1
  105. package/dist/admin/future/pages/Assets/components/SortMenu.js +14 -0
  106. package/dist/admin/future/pages/Assets/components/SortMenu.js.map +1 -1
  107. package/dist/admin/future/pages/Assets/components/SortMenu.mjs +14 -0
  108. package/dist/admin/future/pages/Assets/components/SortMenu.mjs.map +1 -1
  109. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.js +5 -0
  110. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.js.map +1 -1
  111. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.mjs +6 -1
  112. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.mjs.map +1 -1
  113. package/dist/admin/future/pages/Assets/hooks/useBusyAssets.js +47 -0
  114. package/dist/admin/future/pages/Assets/hooks/useBusyAssets.js.map +1 -0
  115. package/dist/admin/future/pages/Assets/hooks/useBusyAssets.mjs +44 -0
  116. package/dist/admin/future/pages/Assets/hooks/useBusyAssets.mjs.map +1 -0
  117. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.js +203 -62
  118. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.js.map +1 -1
  119. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.mjs +204 -63
  120. package/dist/admin/future/pages/Assets/hooks/useInfiniteAssets.mjs.map +1 -1
  121. package/dist/admin/future/pages/Assets/hooks/useInfiniteScrollSentinel.js +75 -0
  122. package/dist/admin/future/pages/Assets/hooks/useInfiniteScrollSentinel.js.map +1 -0
  123. package/dist/admin/future/pages/Assets/hooks/useInfiniteScrollSentinel.mjs +73 -0
  124. package/dist/admin/future/pages/Assets/hooks/useInfiniteScrollSentinel.mjs.map +1 -0
  125. package/dist/admin/future/pages/Assets/utils/selection.js +17 -0
  126. package/dist/admin/future/pages/Assets/utils/selection.js.map +1 -1
  127. package/dist/admin/future/pages/Assets/utils/selection.mjs +17 -1
  128. package/dist/admin/future/pages/Assets/utils/selection.mjs.map +1 -1
  129. package/dist/admin/future/services/api.js +31 -8
  130. package/dist/admin/future/services/api.js.map +1 -1
  131. package/dist/admin/future/services/api.mjs +31 -8
  132. package/dist/admin/future/services/api.mjs.map +1 -1
  133. package/dist/admin/future/services/assets.js +22 -23
  134. package/dist/admin/future/services/assets.js.map +1 -1
  135. package/dist/admin/future/services/assets.mjs +22 -23
  136. package/dist/admin/future/services/assets.mjs.map +1 -1
  137. package/dist/admin/future/services/folders.js +37 -2
  138. package/dist/admin/future/services/folders.js.map +1 -1
  139. package/dist/admin/future/services/folders.mjs +37 -3
  140. package/dist/admin/future/services/folders.mjs.map +1 -1
  141. package/dist/admin/future/utils/buildDragSetFromSelection.js +7 -5
  142. package/dist/admin/future/utils/buildDragSetFromSelection.js.map +1 -1
  143. package/dist/admin/future/utils/buildDragSetFromSelection.mjs +7 -5
  144. package/dist/admin/future/utils/buildDragSetFromSelection.mjs.map +1 -1
  145. package/dist/admin/future/utils/formatMoveSuccessMessage.js +12 -1
  146. package/dist/admin/future/utils/formatMoveSuccessMessage.js.map +1 -1
  147. package/dist/admin/future/utils/formatMoveSuccessMessage.mjs +12 -1
  148. package/dist/admin/future/utils/formatMoveSuccessMessage.mjs.map +1 -1
  149. package/dist/admin/future/utils/getRelationId.js +24 -0
  150. package/dist/admin/future/utils/getRelationId.js.map +1 -0
  151. package/dist/admin/future/utils/getRelationId.mjs +22 -0
  152. package/dist/admin/future/utils/getRelationId.mjs.map +1 -0
  153. package/dist/admin/future/utils/isEventFromWithin.js +14 -0
  154. package/dist/admin/future/utils/isEventFromWithin.js.map +1 -0
  155. package/dist/admin/future/utils/isEventFromWithin.mjs +12 -0
  156. package/dist/admin/future/utils/isEventFromWithin.mjs.map +1 -0
  157. package/dist/admin/future/utils/itemLocations.js +40 -0
  158. package/dist/admin/future/utils/itemLocations.js.map +1 -0
  159. package/dist/admin/future/utils/itemLocations.mjs +36 -0
  160. package/dist/admin/future/utils/itemLocations.mjs.map +1 -0
  161. package/dist/admin/future/utils/itemSource.js +36 -0
  162. package/dist/admin/future/utils/itemSource.js.map +1 -0
  163. package/dist/admin/future/utils/itemSource.mjs +32 -0
  164. package/dist/admin/future/utils/itemSource.mjs.map +1 -0
  165. package/dist/admin/hooks/useAIMetadataJob.js +1 -1
  166. package/dist/admin/hooks/useAIMetadataJob.js.map +1 -1
  167. package/dist/admin/hooks/useAIMetadataJob.mjs +1 -1
  168. package/dist/admin/hooks/useAIMetadataJob.mjs.map +1 -1
  169. package/dist/admin/index.js +11 -17
  170. package/dist/admin/index.js.map +1 -1
  171. package/dist/admin/index.mjs +12 -18
  172. package/dist/admin/index.mjs.map +1 -1
  173. package/dist/admin/pages/SettingsPage/SettingsPage.js +2 -2
  174. package/dist/admin/pages/SettingsPage/SettingsPage.js.map +1 -1
  175. package/dist/admin/pages/SettingsPage/SettingsPage.mjs +2 -2
  176. package/dist/admin/pages/SettingsPage/SettingsPage.mjs.map +1 -1
  177. package/dist/admin/src/future/App.d.ts +1 -1
  178. package/dist/admin/src/future/components/BetaNotice.d.ts +11 -0
  179. package/dist/admin/src/future/components/Drawer.d.ts +5 -1
  180. package/dist/admin/src/future/components/TruncatedText.d.ts +32 -0
  181. package/dist/admin/src/future/hooks/useAIMetadataEnabled.d.ts +26 -0
  182. package/dist/admin/src/future/hooks/useTracking.d.ts +29 -0
  183. package/dist/admin/src/future/pages/Assets/components/ActionsMenuContent.d.ts +33 -0
  184. package/dist/admin/src/future/pages/Assets/components/AssetActionsMenu.d.ts +26 -0
  185. package/dist/admin/src/future/pages/Assets/components/AssetDetails/AssetDetailsDrawer.d.ts +16 -0
  186. package/dist/admin/src/future/pages/Assets/components/BulkActionsBar.d.ts +8 -1
  187. package/dist/admin/src/future/pages/Assets/components/BulkMoveDialog.d.ts +17 -6
  188. package/dist/admin/src/future/pages/Assets/components/BusyOverlay.d.ts +9 -0
  189. package/dist/admin/src/future/pages/Assets/components/DeleteItemsDialog.d.ts +27 -0
  190. package/dist/admin/src/future/pages/Assets/components/Dnd/AssetsDndProvider.d.ts +8 -1
  191. package/dist/admin/src/future/pages/Assets/components/Dnd/buildDragSet.d.ts +18 -3
  192. package/dist/admin/src/future/pages/Assets/components/Dnd/useAssetDnd.d.ts +2 -1
  193. package/dist/admin/src/future/pages/Assets/components/FilterBadges.d.ts +3 -1
  194. package/dist/admin/src/future/pages/Assets/components/FilterMenu.d.ts +4 -0
  195. package/dist/admin/src/future/pages/Assets/components/FolderActionsMenu.d.ts +21 -0
  196. package/dist/admin/src/future/pages/Assets/components/FolderFormDialog.d.ts +16 -0
  197. package/dist/admin/src/future/pages/Assets/hooks/useAssetSelection.d.ts +2 -0
  198. package/dist/admin/src/future/pages/Assets/hooks/useBusyAssets.d.ts +38 -0
  199. package/dist/admin/src/future/pages/Assets/hooks/useInfiniteAssets.d.ts +20 -6
  200. package/dist/admin/src/future/pages/Assets/hooks/useInfiniteScrollSentinel.d.ts +41 -0
  201. package/dist/admin/src/future/pages/Assets/utils/selection.d.ts +10 -0
  202. package/dist/admin/src/future/services/api.d.ts +6 -7
  203. package/dist/admin/src/future/services/folders.d.ts +6 -1
  204. package/dist/admin/src/future/utils/buildDragSetFromSelection.d.ts +4 -3
  205. package/dist/admin/src/future/utils/formatMoveSuccessMessage.d.ts +7 -1
  206. package/dist/admin/src/future/utils/getRelationId.d.ts +11 -0
  207. package/dist/admin/src/future/utils/isEventFromWithin.d.ts +11 -0
  208. package/dist/admin/src/future/utils/itemLocations.d.ts +31 -0
  209. package/dist/admin/src/future/utils/itemSource.d.ts +22 -0
  210. package/dist/admin/translations/en.json.js +25 -4
  211. package/dist/admin/translations/en.json.js.map +1 -1
  212. package/dist/admin/translations/en.json.mjs +25 -4
  213. package/dist/admin/translations/en.json.mjs.map +1 -1
  214. package/dist/server/controllers/admin-file.js +27 -9
  215. package/dist/server/controllers/admin-file.js.map +1 -1
  216. package/dist/server/controllers/admin-file.mjs +27 -9
  217. package/dist/server/controllers/admin-file.mjs.map +1 -1
  218. package/dist/server/controllers/admin-upload.js +24 -8
  219. package/dist/server/controllers/admin-upload.js.map +1 -1
  220. package/dist/server/controllers/admin-upload.mjs +24 -8
  221. package/dist/server/controllers/admin-upload.mjs.map +1 -1
  222. package/dist/server/routes/admin.js +41 -21
  223. package/dist/server/routes/admin.js.map +1 -1
  224. package/dist/server/routes/admin.mjs +41 -21
  225. package/dist/server/routes/admin.mjs.map +1 -1
  226. package/dist/server/services/ai-metadata.js.map +1 -1
  227. package/dist/server/services/ai-metadata.mjs.map +1 -1
  228. package/dist/server/services/image-manipulation.js.map +1 -1
  229. package/dist/server/services/image-manipulation.mjs.map +1 -1
  230. package/dist/server/src/controllers/admin-file.d.ts +29 -8
  231. package/dist/server/src/controllers/admin-file.d.ts.map +1 -1
  232. package/dist/server/src/controllers/admin-upload.d.ts +20 -4
  233. package/dist/server/src/controllers/admin-upload.d.ts.map +1 -1
  234. package/dist/server/src/controllers/index.d.ts +4 -4
  235. package/dist/server/src/index.d.ts +4 -4
  236. package/dist/server/src/routes/admin.d.ts.map +1 -1
  237. package/dist/server/src/services/ai-metadata.d.ts +2 -2
  238. package/dist/server/src/services/ai-metadata.d.ts.map +1 -1
  239. package/dist/server/src/services/image-manipulation.d.ts +0 -5
  240. package/dist/server/src/services/image-manipulation.d.ts.map +1 -1
  241. package/dist/shared/contracts/ai-metadata-jobs.d.ts +10 -32
  242. package/dist/shared/contracts/ai-metadata-jobs.d.ts.map +1 -1
  243. package/dist/shared/contracts/files.d.ts +10 -10
  244. package/dist/shared/contracts/files.d.ts.map +1 -1
  245. package/package.json +9 -9
  246. package/dist/admin/future/pages/Assets/components/CreateFolderDialog.js.map +0 -1
  247. package/dist/admin/future/pages/Assets/components/CreateFolderDialog.mjs.map +0 -1
  248. package/dist/admin/future/pages/Assets/components/FolderTree/filterFolderTree.js +0 -33
  249. package/dist/admin/future/pages/Assets/components/FolderTree/filterFolderTree.js.map +0 -1
  250. package/dist/admin/future/pages/Assets/components/FolderTree/filterFolderTree.mjs +0 -31
  251. package/dist/admin/future/pages/Assets/components/FolderTree/filterFolderTree.mjs.map +0 -1
  252. package/dist/admin/src/future/pages/Assets/components/CreateFolderDialog.d.ts +0 -8
  253. package/dist/admin/src/future/pages/Assets/components/FolderTree/filterFolderTree.d.ts +0 -16
@@ -1 +1 @@
1
- {"version":3,"file":"FilterBadges.js","sources":["../../../../../../admin/src/future/pages/Assets/components/FilterBadges.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { Checkbox, Flex, Popover, Typography } from '@strapi/design-system';\nimport { Check, Cross } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { getTranslationKey } from '../../../utils/translations';\nimport {\n DATE_PRESETS,\n TYPE_VALUES,\n type DateFilter,\n type DatePreset,\n type ListFilter,\n type ListFilters,\n type PresetCondition,\n type RangeCondition,\n type TypeCondition,\n type TypeFilter,\n type TypeValue,\n} from '../hooks/useListFilters';\nimport { parseCalendarDate } from '../utils/buildAssetFilters';\n\nimport { DateRangeCalendar } from './DateRangeCalendar';\nimport { DATE_FIELD_LABELS, FILTER_PANEL_WIDTH, PRESET_LABELS, TYPE_LABELS } from './FilterMenu';\n\nimport type { MessageDescriptor } from 'react-intl';\n\n/**\n * Row of applied-filter badges under the toolbar. A badge has three segments —\n * field (static), condition (click → select popover), value (click → type\n * checkboxes / preset list / range calendar) — plus a remove button.\n */\n\nconst BadgePill = styled(Flex)`\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-radius: ${({ theme }) => theme.borderRadius};\n background: ${({ theme }) => theme.colors.neutral0};\n overflow: hidden;\n`;\n\nconst Segment = styled.button<{ $interactive?: boolean }>`\n border: none;\n background: transparent;\n font: inherit;\n padding: ${({ theme }) => `${theme.spaces[1]} ${theme.spaces[2]}`};\n cursor: ${({ $interactive }) => ($interactive ? 'pointer' : 'default')};\n border-right: 1px solid ${({ theme }) => theme.colors.neutral200};\n\n ${({ $interactive, theme }) =>\n $interactive && `&:hover { background: ${theme.colors.primary100}; }`}\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme.colors.primary600};\n outline-offset: -2px;\n }\n`;\n\n// Non-interactive field segment (first pill cell).\nconst FieldSegment = styled.span`\n display: inline-flex;\n align-items: center;\n padding: ${({ theme }) => `${theme.spaces[1]} ${theme.spaces[2]}`};\n border-right: 1px solid ${({ theme }) => theme.colors.neutral200};\n`;\n\n// Badge popovers mirror the filter-menu panels: same fixed width, same font.\nconst PanelPopoverContent = styled(Popover.Content)`\n width: ${FILTER_PANEL_WIDTH};\n`;\n\n// Option row inside a segment popover — sized like a DS Menu.Item so the badge\n// dropdowns read as the same control family as the filter menu.\nconst OptionButton = styled.button`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: ${({ theme }) => theme.spaces[4]};\n width: 100%;\n border: none;\n background: transparent;\n font-size: ${({ theme }) => theme.fontSizes[2]};\n line-height: ${({ theme }) => theme.lineHeights[4]};\n font-family: inherit;\n text-align: left;\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[4]}`};\n border-radius: ${({ theme }) => theme.borderRadius};\n cursor: pointer;\n color: ${({ theme }) => theme.colors.neutral800};\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\nconst RemoveButton = styled.button`\n border: none;\n background: transparent;\n display: inline-flex;\n align-items: center;\n padding: ${({ theme }) => `0 ${theme.spaces[2]}`};\n cursor: pointer;\n color: ${({ theme }) => theme.colors.neutral600};\n\n &:hover {\n color: ${({ theme }) => theme.colors.neutral800};\n }\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme.colors.primary600};\n outline-offset: -2px;\n }\n`;\n\nconst TYPE_CONDITION_LABELS: Record<TypeCondition, MessageDescriptor> = {\n is: { id: getTranslationKey('list.filters.condition.is'), defaultMessage: 'is' },\n isNot: { id: getTranslationKey('list.filters.condition.is-not'), defaultMessage: 'is not' },\n};\n\nconst PRESET_CONDITION_LABELS: Record<PresetCondition, MessageDescriptor> = {\n isExactly: {\n id: getTranslationKey('list.filters.condition.is-exactly'),\n defaultMessage: 'is exactly',\n },\n withinLast: {\n id: getTranslationKey('list.filters.condition.within-last'),\n defaultMessage: 'within the last',\n },\n notWithinLast: {\n id: getTranslationKey('list.filters.condition.not-within-last'),\n defaultMessage: 'not within the last',\n },\n};\n\nconst RANGE_CONDITION_LABELS: Record<RangeCondition, MessageDescriptor> = {\n is: { id: getTranslationKey('list.filters.condition.is'), defaultMessage: 'is' },\n isNot: { id: getTranslationKey('list.filters.condition.is-not'), defaultMessage: 'is not' },\n};\n\n/** A small single-choice popover listing options with a check on the active one. */\ninterface SegmentPopoverProps<T extends string> {\n label: string;\n options: T[];\n active: T;\n getOptionLabel: (option: T) => string;\n onPick: (option: T) => void;\n}\n\nconst SegmentPopover = <T extends string>({\n label,\n options,\n active,\n getOptionLabel,\n onPick,\n}: SegmentPopoverProps<T>) => {\n const [open, setOpen] = useState(false);\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger>\n <Segment type=\"button\" $interactive>\n <Typography variant=\"pi\" textColor=\"neutral800\">\n {label}\n </Typography>\n </Segment>\n </Popover.Trigger>\n <PanelPopoverContent>\n <Flex direction=\"column\" alignItems=\"stretch\" padding={1}>\n {options.map((option) => (\n <OptionButton\n key={option}\n type=\"button\"\n onClick={() => {\n onPick(option);\n setOpen(false);\n }}\n >\n {getOptionLabel(option)}\n {option === active && <Check aria-hidden width=\"1.6rem\" height=\"1.6rem\" />}\n </OptionButton>\n ))}\n </Flex>\n </PanelPopoverContent>\n </Popover.Root>\n );\n};\n\nconst TypeValuePopover = ({\n filter,\n onChange,\n}: {\n filter: TypeFilter;\n onChange: (next: TypeFilter) => void;\n}) => {\n const { formatMessage } = useIntl();\n const [open, setOpen] = useState(false);\n\n const label = filter.values.map((value) => formatMessage(TYPE_LABELS[value])).join(', ');\n\n const toggleValue = (value: TypeValue) => {\n const nextValues = filter.values.includes(value)\n ? filter.values.filter((v) => v !== value)\n : [...filter.values, value];\n\n // At least one value stays checked — an empty badge is removed via ×, not here.\n if (nextValues.length > 0) {\n onChange({ ...filter, values: nextValues });\n }\n };\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger>\n <Segment type=\"button\" $interactive>\n <Typography variant=\"pi\" textColor=\"neutral800\">\n {label}\n </Typography>\n </Segment>\n </Popover.Trigger>\n <PanelPopoverContent>\n <Flex direction=\"column\" alignItems=\"flex-start\" padding={3} gap={2}>\n {TYPE_VALUES.map((value) => (\n <Checkbox\n key={value}\n checked={filter.values.includes(value)}\n onCheckedChange={() => toggleValue(value)}\n >\n {formatMessage(TYPE_LABELS[value])}\n </Checkbox>\n ))}\n </Flex>\n </PanelPopoverContent>\n </Popover.Root>\n );\n};\n\nconst DateValuePopover = ({\n filter,\n onChange,\n}: {\n filter: DateFilter;\n onChange: (next: DateFilter) => void;\n}) => {\n const { formatMessage, formatDate } = useIntl();\n const [open, setOpen] = useState(false);\n\n // Parse as LOCAL calendar dates before formatting: react-intl would coerce\n // the raw `YYYY-MM-DD` strings via `new Date(value)` = UTC midnight, showing\n // the previous day in every timezone west of UTC while the query (also\n // local, see buildAssetFilters) filters the day the user actually picked.\n const label =\n filter.mode === 'preset'\n ? formatMessage(PRESET_LABELS[filter.preset])\n : `${formatDate(parseCalendarDate(filter.from), {\n day: '2-digit',\n month: 'short',\n })} - ${formatDate(parseCalendarDate(filter.to), {\n day: '2-digit',\n month: 'short',\n year: 'numeric',\n })}`;\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger>\n <Segment type=\"button\" $interactive>\n <Typography variant=\"pi\" textColor=\"neutral800\">\n {label}\n </Typography>\n </Segment>\n </Popover.Trigger>\n <PanelPopoverContent>\n {filter.mode === 'preset' ? (\n <Flex direction=\"column\" alignItems=\"stretch\" padding={1}>\n {DATE_PRESETS.map((preset: DatePreset) => (\n <OptionButton\n key={preset}\n type=\"button\"\n onClick={() => {\n onChange({ ...filter, preset });\n setOpen(false);\n }}\n >\n {formatMessage(PRESET_LABELS[preset])}\n {preset === filter.preset && <Check aria-hidden width=\"1.6rem\" height=\"1.6rem\" />}\n </OptionButton>\n ))}\n </Flex>\n ) : (\n <DateRangeCalendar\n from={filter.from}\n to={filter.to}\n onSelect={(from, to) => {\n onChange({ ...filter, from, to });\n setOpen(false);\n }}\n />\n )}\n </PanelPopoverContent>\n </Popover.Root>\n );\n};\n\nconst FilterBadge = ({\n filter,\n onChange,\n onRemove,\n}: {\n filter: ListFilter;\n onChange: (next: ListFilter) => void;\n onRemove: () => void;\n}) => {\n const { formatMessage } = useIntl();\n\n const fieldLabel =\n filter.kind === 'type'\n ? formatMessage({ id: getTranslationKey('list.filters.field.type'), defaultMessage: 'Type' })\n : formatMessage(DATE_FIELD_LABELS[filter.field]);\n\n return (\n <BadgePill alignItems=\"stretch\" data-testid=\"filter-badge\">\n <FieldSegment>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {fieldLabel}\n </Typography>\n </FieldSegment>\n\n {filter.kind === 'type' && (\n <>\n <SegmentPopover\n label={formatMessage(TYPE_CONDITION_LABELS[filter.condition])}\n options={['is', 'isNot'] as TypeCondition[]}\n active={filter.condition}\n getOptionLabel={(option) => formatMessage(TYPE_CONDITION_LABELS[option])}\n onPick={(condition) => onChange({ ...filter, condition })}\n />\n <TypeValuePopover filter={filter} onChange={onChange} />\n </>\n )}\n\n {filter.kind === 'date' && filter.mode === 'preset' && (\n <>\n <SegmentPopover\n label={formatMessage(PRESET_CONDITION_LABELS[filter.condition])}\n options={['isExactly', 'withinLast', 'notWithinLast'] as PresetCondition[]}\n active={filter.condition}\n getOptionLabel={(option) => formatMessage(PRESET_CONDITION_LABELS[option])}\n onPick={(condition) => onChange({ ...filter, condition })}\n />\n <DateValuePopover filter={filter} onChange={onChange} />\n </>\n )}\n\n {filter.kind === 'date' && filter.mode === 'range' && (\n <>\n <SegmentPopover\n label={formatMessage(RANGE_CONDITION_LABELS[filter.condition])}\n options={['is', 'isNot'] as RangeCondition[]}\n active={filter.condition}\n getOptionLabel={(option) => formatMessage(RANGE_CONDITION_LABELS[option])}\n onPick={(condition) => onChange({ ...filter, condition })}\n />\n <DateValuePopover filter={filter} onChange={onChange} />\n </>\n )}\n\n <RemoveButton\n type=\"button\"\n onClick={onRemove}\n aria-label={formatMessage(\n {\n id: getTranslationKey('list.filters.remove'),\n defaultMessage: 'Remove {filter} filter',\n },\n { filter: fieldLabel }\n )}\n >\n <Cross width=\"1.2rem\" height=\"1.2rem\" aria-hidden />\n </RemoveButton>\n </BadgePill>\n );\n};\n\ninterface FilterBadgesProps {\n listFilters: ListFilters;\n}\n\nexport const FilterBadges = ({ listFilters }: FilterBadgesProps) => {\n const { filters, updateFilter, removeFilter } = listFilters;\n\n if (filters.length === 0) {\n return null;\n }\n\n return (\n <Flex gap={2} wrap=\"wrap\" paddingTop={2} data-testid=\"filter-badges\">\n {filters.map((filter, index) => (\n <FilterBadge\n // Position is identity: badges are edited/removed by index.\n key={index}\n filter={filter}\n onChange={(next) => updateFilter(index, next)}\n onRemove={() => removeFilter(index)}\n />\n ))}\n </Flex>\n );\n};\n"],"names":["BadgePill","styled","Flex","theme","colors","neutral200","borderRadius","neutral0","Segment","button","spaces","$interactive","primary100","primary600","FieldSegment","span","PanelPopoverContent","Popover","Content","FILTER_PANEL_WIDTH","OptionButton","fontSizes","lineHeights","neutral800","RemoveButton","neutral600","TYPE_CONDITION_LABELS","is","id","getTranslationKey","defaultMessage","isNot","PRESET_CONDITION_LABELS","isExactly","withinLast","notWithinLast","RANGE_CONDITION_LABELS","SegmentPopover","label","options","active","getOptionLabel","onPick","open","setOpen","useState","_jsxs","Root","onOpenChange","_jsx","Trigger","type","Typography","variant","textColor","direction","alignItems","padding","map","option","onClick","Check","aria-hidden","width","height","TypeValuePopover","filter","onChange","formatMessage","useIntl","values","value","TYPE_LABELS","join","toggleValue","nextValues","includes","v","length","gap","TYPE_VALUES","Checkbox","checked","onCheckedChange","DateValuePopover","formatDate","mode","PRESET_LABELS","preset","parseCalendarDate","from","day","month","to","year","DATE_PRESETS","DateRangeCalendar","onSelect","FilterBadge","onRemove","fieldLabel","kind","DATE_FIELD_LABELS","field","data-testid","_Fragment","condition","aria-label","Cross","FilterBadges","listFilters","filters","updateFilter","removeFilter","wrap","paddingTop","index","next"],"mappings":"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"}
1
+ {"version":3,"file":"FilterBadges.js","sources":["../../../../../../admin/src/future/pages/Assets/components/FilterBadges.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { Checkbox, Flex, Popover, Typography } from '@strapi/design-system';\nimport { Check, Cross } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { getTranslationKey } from '../../../utils/translations';\nimport {\n DATE_PRESETS,\n TYPE_VALUES,\n type DateFilter,\n type DatePreset,\n type ListFilter,\n type ListFilters,\n type PresetCondition,\n type RangeCondition,\n type TypeCondition,\n type TypeFilter,\n type TypeValue,\n} from '../hooks/useListFilters';\nimport { parseCalendarDate } from '../utils/buildAssetFilters';\n\nimport { DateRangeCalendar } from './DateRangeCalendar';\nimport { DATE_FIELD_LABELS, FILTER_PANEL_WIDTH, PRESET_LABELS, TYPE_LABELS } from './FilterMenu';\n\nimport type { MessageDescriptor } from 'react-intl';\n\n/**\n * Row of applied-filter badges under the toolbar. A badge has three segments —\n * field (static), condition (click → select popover), value (click → type\n * checkboxes / preset list / range calendar) — plus a remove button.\n */\n\nconst BadgePill = styled(Flex)`\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-radius: ${({ theme }) => theme.borderRadius};\n background: ${({ theme }) => theme.colors.neutral0};\n overflow: hidden;\n`;\n\nconst Segment = styled.button<{ $interactive?: boolean }>`\n border: none;\n background: transparent;\n font: inherit;\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[3]}`};\n cursor: ${({ $interactive }) => ($interactive ? 'pointer' : 'default')};\n border-right: 1px solid ${({ theme }) => theme.colors.neutral200};\n\n ${({ theme }) => theme.breakpoints.medium} {\n padding: ${({ theme }) => `${theme.spaces[1]} ${theme.spaces[2]}`};\n }\n ${({ $interactive, theme }) =>\n $interactive && `&:hover { background: ${theme.colors.primary100}; }`}\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme.colors.primary600};\n outline-offset: -2px;\n }\n`;\n\n// Non-interactive field segment (first pill cell).\nconst FieldSegment = styled.span`\n display: inline-flex;\n align-items: center;\n padding: ${({ theme }) => `${theme.spaces[1]} ${theme.spaces[2]}`};\n border-right: 1px solid ${({ theme }) => theme.colors.neutral200};\n`;\n\n// Badge popovers mirror the filter-menu panels: same fixed width, same font.\nconst PanelPopoverContent = styled(Popover.Content)`\n width: ${FILTER_PANEL_WIDTH};\n`;\n\n// Option row inside a segment popover — sized like a DS Menu.Item so the badge\n// dropdowns read as the same control family as the filter menu.\nconst OptionButton = styled.button`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: ${({ theme }) => theme.spaces[4]};\n width: 100%;\n border: none;\n background: transparent;\n font-size: ${({ theme }) => theme.fontSizes[2]};\n line-height: ${({ theme }) => theme.lineHeights[4]};\n font-family: inherit;\n text-align: left;\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[4]}`};\n border-radius: ${({ theme }) => theme.borderRadius};\n cursor: pointer;\n color: ${({ theme }) => theme.colors.neutral800};\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\nconst RemoveButton = styled.button`\n border: none;\n background: transparent;\n display: inline-flex;\n align-items: center;\n padding: ${({ theme }) => `0 ${theme.spaces[2]}`};\n cursor: pointer;\n color: ${({ theme }) => theme.colors.neutral600};\n\n &:hover {\n color: ${({ theme }) => theme.colors.neutral800};\n }\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme.colors.primary600};\n outline-offset: -2px;\n }\n`;\n\nconst TYPE_CONDITION_LABELS: Record<TypeCondition, MessageDescriptor> = {\n is: { id: getTranslationKey('list.filters.condition.is'), defaultMessage: 'is' },\n isNot: { id: getTranslationKey('list.filters.condition.is-not'), defaultMessage: 'is not' },\n};\n\nconst PRESET_CONDITION_LABELS: Record<PresetCondition, MessageDescriptor> = {\n isExactly: {\n id: getTranslationKey('list.filters.condition.is-exactly'),\n defaultMessage: 'is exactly',\n },\n withinLast: {\n id: getTranslationKey('list.filters.condition.within-last'),\n defaultMessage: 'within the last',\n },\n notWithinLast: {\n id: getTranslationKey('list.filters.condition.not-within-last'),\n defaultMessage: 'not within the last',\n },\n};\n\nconst RANGE_CONDITION_LABELS: Record<RangeCondition, MessageDescriptor> = {\n is: { id: getTranslationKey('list.filters.condition.is'), defaultMessage: 'is' },\n isNot: { id: getTranslationKey('list.filters.condition.is-not'), defaultMessage: 'is not' },\n};\n\n/** A small single-choice popover listing options with a check on the active one. */\ninterface SegmentPopoverProps<T extends string> {\n label: string;\n options: T[];\n active: T;\n getOptionLabel: (option: T) => string;\n onPick: (option: T) => void;\n}\n\nconst SegmentPopover = <T extends string>({\n label,\n options,\n active,\n getOptionLabel,\n onPick,\n}: SegmentPopoverProps<T>) => {\n const [open, setOpen] = useState(false);\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger>\n <Segment type=\"button\" $interactive>\n <Typography variant=\"pi\" textColor=\"neutral800\">\n {label}\n </Typography>\n </Segment>\n </Popover.Trigger>\n <PanelPopoverContent>\n <Flex direction=\"column\" alignItems=\"stretch\" padding={1}>\n {options.map((option) => (\n <OptionButton\n key={option}\n type=\"button\"\n onClick={() => {\n onPick(option);\n setOpen(false);\n }}\n >\n {getOptionLabel(option)}\n {option === active && <Check aria-hidden width=\"1.6rem\" height=\"1.6rem\" />}\n </OptionButton>\n ))}\n </Flex>\n </PanelPopoverContent>\n </Popover.Root>\n );\n};\n\nconst TypeValuePopover = ({\n filter,\n onChange,\n}: {\n filter: TypeFilter;\n onChange: (next: TypeFilter) => void;\n}) => {\n const { formatMessage } = useIntl();\n const [open, setOpen] = useState(false);\n\n const label = filter.values.map((value) => formatMessage(TYPE_LABELS[value])).join(', ');\n\n const toggleValue = (value: TypeValue) => {\n const nextValues = filter.values.includes(value)\n ? filter.values.filter((v) => v !== value)\n : [...filter.values, value];\n\n // At least one value stays checked — an empty badge is removed via ×, not here.\n if (nextValues.length > 0) {\n onChange({ ...filter, values: nextValues });\n }\n };\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger>\n <Segment type=\"button\" $interactive>\n <Typography variant=\"pi\" textColor=\"neutral800\">\n {label}\n </Typography>\n </Segment>\n </Popover.Trigger>\n <PanelPopoverContent>\n <Flex direction=\"column\" alignItems=\"flex-start\" padding={3} gap={2}>\n {TYPE_VALUES.map((value) => (\n <Checkbox\n key={value}\n checked={filter.values.includes(value)}\n onCheckedChange={() => toggleValue(value)}\n >\n {formatMessage(TYPE_LABELS[value])}\n </Checkbox>\n ))}\n </Flex>\n </PanelPopoverContent>\n </Popover.Root>\n );\n};\n\nconst DateValuePopover = ({\n filter,\n onChange,\n}: {\n filter: DateFilter;\n onChange: (next: DateFilter) => void;\n}) => {\n const { formatMessage, formatDate } = useIntl();\n const [open, setOpen] = useState(false);\n\n // Parse as LOCAL calendar dates before formatting: react-intl would coerce\n // the raw `YYYY-MM-DD` strings via `new Date(value)` = UTC midnight, showing\n // the previous day in every timezone west of UTC while the query (also\n // local, see buildAssetFilters) filters the day the user actually picked.\n const label =\n filter.mode === 'preset'\n ? formatMessage(PRESET_LABELS[filter.preset])\n : `${formatDate(parseCalendarDate(filter.from), {\n day: '2-digit',\n month: 'short',\n })} - ${formatDate(parseCalendarDate(filter.to), {\n day: '2-digit',\n month: 'short',\n year: 'numeric',\n })}`;\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger>\n <Segment type=\"button\" $interactive>\n <Typography variant=\"pi\" textColor=\"neutral800\">\n {label}\n </Typography>\n </Segment>\n </Popover.Trigger>\n <PanelPopoverContent>\n {filter.mode === 'preset' ? (\n <Flex direction=\"column\" alignItems=\"stretch\" padding={1}>\n {DATE_PRESETS.map((preset: DatePreset) => (\n <OptionButton\n key={preset}\n type=\"button\"\n onClick={() => {\n onChange({ ...filter, preset });\n setOpen(false);\n }}\n >\n {formatMessage(PRESET_LABELS[preset])}\n {preset === filter.preset && <Check aria-hidden width=\"1.6rem\" height=\"1.6rem\" />}\n </OptionButton>\n ))}\n </Flex>\n ) : (\n <DateRangeCalendar\n from={filter.from}\n to={filter.to}\n onSelect={(from, to) => {\n onChange({ ...filter, from, to });\n setOpen(false);\n }}\n />\n )}\n </PanelPopoverContent>\n </Popover.Root>\n );\n};\n\nconst FilterBadge = ({\n filter,\n onChange,\n onRemove,\n}: {\n filter: ListFilter;\n onChange: (next: ListFilter) => void;\n onRemove: () => void;\n}) => {\n const { formatMessage } = useIntl();\n\n const fieldLabel =\n filter.kind === 'type'\n ? formatMessage({ id: getTranslationKey('list.filters.field.type'), defaultMessage: 'Type' })\n : formatMessage(DATE_FIELD_LABELS[filter.field]);\n\n return (\n <BadgePill alignItems=\"stretch\" data-testid=\"filter-badge\">\n <FieldSegment>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {fieldLabel}\n </Typography>\n </FieldSegment>\n\n {filter.kind === 'type' && (\n <>\n <SegmentPopover\n label={formatMessage(TYPE_CONDITION_LABELS[filter.condition])}\n options={['is', 'isNot'] as TypeCondition[]}\n active={filter.condition}\n getOptionLabel={(option) => formatMessage(TYPE_CONDITION_LABELS[option])}\n onPick={(condition) => onChange({ ...filter, condition })}\n />\n <TypeValuePopover filter={filter} onChange={onChange} />\n </>\n )}\n\n {filter.kind === 'date' && filter.mode === 'preset' && (\n <>\n <SegmentPopover\n label={formatMessage(PRESET_CONDITION_LABELS[filter.condition])}\n options={['isExactly', 'withinLast', 'notWithinLast'] as PresetCondition[]}\n active={filter.condition}\n getOptionLabel={(option) => formatMessage(PRESET_CONDITION_LABELS[option])}\n onPick={(condition) => onChange({ ...filter, condition })}\n />\n <DateValuePopover filter={filter} onChange={onChange} />\n </>\n )}\n\n {filter.kind === 'date' && filter.mode === 'range' && (\n <>\n <SegmentPopover\n label={formatMessage(RANGE_CONDITION_LABELS[filter.condition])}\n options={['is', 'isNot'] as RangeCondition[]}\n active={filter.condition}\n getOptionLabel={(option) => formatMessage(RANGE_CONDITION_LABELS[option])}\n onPick={(condition) => onChange({ ...filter, condition })}\n />\n <DateValuePopover filter={filter} onChange={onChange} />\n </>\n )}\n\n <RemoveButton\n type=\"button\"\n onClick={onRemove}\n aria-label={formatMessage(\n {\n id: getTranslationKey('list.filters.remove'),\n defaultMessage: 'Remove {filter} filter',\n },\n { filter: fieldLabel }\n )}\n >\n <Cross width=\"1.2rem\" height=\"1.2rem\" aria-hidden />\n </RemoveButton>\n </BadgePill>\n );\n};\n\n// Tighten the gap above the badges when the sticky header is in its compact\n// (scrolled) state, matching the header's own shrink.\nconst BadgesRoot = styled(Flex)<{ $compact: boolean }>`\n padding-top: ${({ theme, $compact }) => ($compact ? theme.spaces[1] : theme.spaces[6])};\n transition: padding-top 0.2s ease;\n`;\n\ninterface FilterBadgesProps {\n listFilters: ListFilters;\n /** Sticky header is scrolled/compact — reduce the space above the badges. */\n compact?: boolean;\n}\n\nexport const FilterBadges = ({ listFilters, compact = false }: FilterBadgesProps) => {\n const { filters, updateFilter, removeFilter } = listFilters;\n\n if (filters.length === 0) {\n return null;\n }\n\n return (\n <BadgesRoot $compact={compact} gap={2} wrap=\"wrap\" data-testid=\"filter-badges\">\n {filters.map((filter, index) => (\n <FilterBadge\n // Position is identity: badges are edited/removed by index.\n key={index}\n filter={filter}\n onChange={(next) => updateFilter(index, next)}\n onRemove={() => removeFilter(index)}\n />\n ))}\n </BadgesRoot>\n );\n};\n"],"names":["BadgePill","styled","Flex","theme","colors","neutral200","borderRadius","neutral0","Segment","button","spaces","$interactive","breakpoints","medium","primary100","primary600","FieldSegment","span","PanelPopoverContent","Popover","Content","FILTER_PANEL_WIDTH","OptionButton","fontSizes","lineHeights","neutral800","RemoveButton","neutral600","TYPE_CONDITION_LABELS","is","id","getTranslationKey","defaultMessage","isNot","PRESET_CONDITION_LABELS","isExactly","withinLast","notWithinLast","RANGE_CONDITION_LABELS","SegmentPopover","label","options","active","getOptionLabel","onPick","open","setOpen","useState","_jsxs","Root","onOpenChange","_jsx","Trigger","type","Typography","variant","textColor","direction","alignItems","padding","map","option","onClick","Check","aria-hidden","width","height","TypeValuePopover","filter","onChange","formatMessage","useIntl","values","value","TYPE_LABELS","join","toggleValue","nextValues","includes","v","length","gap","TYPE_VALUES","Checkbox","checked","onCheckedChange","DateValuePopover","formatDate","mode","PRESET_LABELS","preset","parseCalendarDate","from","day","month","to","year","DATE_PRESETS","DateRangeCalendar","onSelect","FilterBadge","onRemove","fieldLabel","kind","DATE_FIELD_LABELS","field","data-testid","_Fragment","condition","aria-label","Cross","BadgesRoot","$compact","FilterBadges","listFilters","compact","filters","updateFilter","removeFilter","wrap","index","next"],"mappings":"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"}
@@ -24,10 +24,13 @@ const Segment = styled.button`
24
24
  border: none;
25
25
  background: transparent;
26
26
  font: inherit;
27
- padding: ${({ theme })=>`${theme.spaces[1]} ${theme.spaces[2]}`};
27
+ padding: ${({ theme })=>`${theme.spaces[2]} ${theme.spaces[3]}`};
28
28
  cursor: ${({ $interactive })=>$interactive ? 'pointer' : 'default'};
29
29
  border-right: 1px solid ${({ theme })=>theme.colors.neutral200};
30
30
 
31
+ ${({ theme })=>theme.breakpoints.medium} {
32
+ padding: ${({ theme })=>`${theme.spaces[1]} ${theme.spaces[2]}`};
33
+ }
31
34
  ${({ $interactive, theme })=>$interactive && `&:hover { background: ${theme.colors.primary100}; }`}
32
35
 
33
36
  &:focus-visible {
@@ -384,15 +387,21 @@ const FilterBadge = ({ filter, onChange, onRemove })=>{
384
387
  ]
385
388
  });
386
389
  };
387
- const FilterBadges = ({ listFilters })=>{
390
+ // Tighten the gap above the badges when the sticky header is in its compact
391
+ // (scrolled) state, matching the header's own shrink.
392
+ const BadgesRoot = styled(Flex)`
393
+ padding-top: ${({ theme, $compact })=>$compact ? theme.spaces[1] : theme.spaces[6]};
394
+ transition: padding-top 0.2s ease;
395
+ `;
396
+ const FilterBadges = ({ listFilters, compact = false })=>{
388
397
  const { filters, updateFilter, removeFilter } = listFilters;
389
398
  if (filters.length === 0) {
390
399
  return null;
391
400
  }
392
- return /*#__PURE__*/ jsx(Flex, {
401
+ return /*#__PURE__*/ jsx(BadgesRoot, {
402
+ $compact: compact,
393
403
  gap: 2,
394
404
  wrap: "wrap",
395
- paddingTop: 2,
396
405
  "data-testid": "filter-badges",
397
406
  children: filters.map((filter, index)=>/*#__PURE__*/ jsx(FilterBadge, {
398
407
  filter: filter,
@@ -1 +1 @@
1
- {"version":3,"file":"FilterBadges.mjs","sources":["../../../../../../admin/src/future/pages/Assets/components/FilterBadges.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { Checkbox, Flex, Popover, Typography } from '@strapi/design-system';\nimport { Check, Cross } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { getTranslationKey } from '../../../utils/translations';\nimport {\n DATE_PRESETS,\n TYPE_VALUES,\n type DateFilter,\n type DatePreset,\n type ListFilter,\n type ListFilters,\n type PresetCondition,\n type RangeCondition,\n type TypeCondition,\n type TypeFilter,\n type TypeValue,\n} from '../hooks/useListFilters';\nimport { parseCalendarDate } from '../utils/buildAssetFilters';\n\nimport { DateRangeCalendar } from './DateRangeCalendar';\nimport { DATE_FIELD_LABELS, FILTER_PANEL_WIDTH, PRESET_LABELS, TYPE_LABELS } from './FilterMenu';\n\nimport type { MessageDescriptor } from 'react-intl';\n\n/**\n * Row of applied-filter badges under the toolbar. A badge has three segments —\n * field (static), condition (click → select popover), value (click → type\n * checkboxes / preset list / range calendar) — plus a remove button.\n */\n\nconst BadgePill = styled(Flex)`\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-radius: ${({ theme }) => theme.borderRadius};\n background: ${({ theme }) => theme.colors.neutral0};\n overflow: hidden;\n`;\n\nconst Segment = styled.button<{ $interactive?: boolean }>`\n border: none;\n background: transparent;\n font: inherit;\n padding: ${({ theme }) => `${theme.spaces[1]} ${theme.spaces[2]}`};\n cursor: ${({ $interactive }) => ($interactive ? 'pointer' : 'default')};\n border-right: 1px solid ${({ theme }) => theme.colors.neutral200};\n\n ${({ $interactive, theme }) =>\n $interactive && `&:hover { background: ${theme.colors.primary100}; }`}\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme.colors.primary600};\n outline-offset: -2px;\n }\n`;\n\n// Non-interactive field segment (first pill cell).\nconst FieldSegment = styled.span`\n display: inline-flex;\n align-items: center;\n padding: ${({ theme }) => `${theme.spaces[1]} ${theme.spaces[2]}`};\n border-right: 1px solid ${({ theme }) => theme.colors.neutral200};\n`;\n\n// Badge popovers mirror the filter-menu panels: same fixed width, same font.\nconst PanelPopoverContent = styled(Popover.Content)`\n width: ${FILTER_PANEL_WIDTH};\n`;\n\n// Option row inside a segment popover — sized like a DS Menu.Item so the badge\n// dropdowns read as the same control family as the filter menu.\nconst OptionButton = styled.button`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: ${({ theme }) => theme.spaces[4]};\n width: 100%;\n border: none;\n background: transparent;\n font-size: ${({ theme }) => theme.fontSizes[2]};\n line-height: ${({ theme }) => theme.lineHeights[4]};\n font-family: inherit;\n text-align: left;\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[4]}`};\n border-radius: ${({ theme }) => theme.borderRadius};\n cursor: pointer;\n color: ${({ theme }) => theme.colors.neutral800};\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\nconst RemoveButton = styled.button`\n border: none;\n background: transparent;\n display: inline-flex;\n align-items: center;\n padding: ${({ theme }) => `0 ${theme.spaces[2]}`};\n cursor: pointer;\n color: ${({ theme }) => theme.colors.neutral600};\n\n &:hover {\n color: ${({ theme }) => theme.colors.neutral800};\n }\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme.colors.primary600};\n outline-offset: -2px;\n }\n`;\n\nconst TYPE_CONDITION_LABELS: Record<TypeCondition, MessageDescriptor> = {\n is: { id: getTranslationKey('list.filters.condition.is'), defaultMessage: 'is' },\n isNot: { id: getTranslationKey('list.filters.condition.is-not'), defaultMessage: 'is not' },\n};\n\nconst PRESET_CONDITION_LABELS: Record<PresetCondition, MessageDescriptor> = {\n isExactly: {\n id: getTranslationKey('list.filters.condition.is-exactly'),\n defaultMessage: 'is exactly',\n },\n withinLast: {\n id: getTranslationKey('list.filters.condition.within-last'),\n defaultMessage: 'within the last',\n },\n notWithinLast: {\n id: getTranslationKey('list.filters.condition.not-within-last'),\n defaultMessage: 'not within the last',\n },\n};\n\nconst RANGE_CONDITION_LABELS: Record<RangeCondition, MessageDescriptor> = {\n is: { id: getTranslationKey('list.filters.condition.is'), defaultMessage: 'is' },\n isNot: { id: getTranslationKey('list.filters.condition.is-not'), defaultMessage: 'is not' },\n};\n\n/** A small single-choice popover listing options with a check on the active one. */\ninterface SegmentPopoverProps<T extends string> {\n label: string;\n options: T[];\n active: T;\n getOptionLabel: (option: T) => string;\n onPick: (option: T) => void;\n}\n\nconst SegmentPopover = <T extends string>({\n label,\n options,\n active,\n getOptionLabel,\n onPick,\n}: SegmentPopoverProps<T>) => {\n const [open, setOpen] = useState(false);\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger>\n <Segment type=\"button\" $interactive>\n <Typography variant=\"pi\" textColor=\"neutral800\">\n {label}\n </Typography>\n </Segment>\n </Popover.Trigger>\n <PanelPopoverContent>\n <Flex direction=\"column\" alignItems=\"stretch\" padding={1}>\n {options.map((option) => (\n <OptionButton\n key={option}\n type=\"button\"\n onClick={() => {\n onPick(option);\n setOpen(false);\n }}\n >\n {getOptionLabel(option)}\n {option === active && <Check aria-hidden width=\"1.6rem\" height=\"1.6rem\" />}\n </OptionButton>\n ))}\n </Flex>\n </PanelPopoverContent>\n </Popover.Root>\n );\n};\n\nconst TypeValuePopover = ({\n filter,\n onChange,\n}: {\n filter: TypeFilter;\n onChange: (next: TypeFilter) => void;\n}) => {\n const { formatMessage } = useIntl();\n const [open, setOpen] = useState(false);\n\n const label = filter.values.map((value) => formatMessage(TYPE_LABELS[value])).join(', ');\n\n const toggleValue = (value: TypeValue) => {\n const nextValues = filter.values.includes(value)\n ? filter.values.filter((v) => v !== value)\n : [...filter.values, value];\n\n // At least one value stays checked — an empty badge is removed via ×, not here.\n if (nextValues.length > 0) {\n onChange({ ...filter, values: nextValues });\n }\n };\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger>\n <Segment type=\"button\" $interactive>\n <Typography variant=\"pi\" textColor=\"neutral800\">\n {label}\n </Typography>\n </Segment>\n </Popover.Trigger>\n <PanelPopoverContent>\n <Flex direction=\"column\" alignItems=\"flex-start\" padding={3} gap={2}>\n {TYPE_VALUES.map((value) => (\n <Checkbox\n key={value}\n checked={filter.values.includes(value)}\n onCheckedChange={() => toggleValue(value)}\n >\n {formatMessage(TYPE_LABELS[value])}\n </Checkbox>\n ))}\n </Flex>\n </PanelPopoverContent>\n </Popover.Root>\n );\n};\n\nconst DateValuePopover = ({\n filter,\n onChange,\n}: {\n filter: DateFilter;\n onChange: (next: DateFilter) => void;\n}) => {\n const { formatMessage, formatDate } = useIntl();\n const [open, setOpen] = useState(false);\n\n // Parse as LOCAL calendar dates before formatting: react-intl would coerce\n // the raw `YYYY-MM-DD` strings via `new Date(value)` = UTC midnight, showing\n // the previous day in every timezone west of UTC while the query (also\n // local, see buildAssetFilters) filters the day the user actually picked.\n const label =\n filter.mode === 'preset'\n ? formatMessage(PRESET_LABELS[filter.preset])\n : `${formatDate(parseCalendarDate(filter.from), {\n day: '2-digit',\n month: 'short',\n })} - ${formatDate(parseCalendarDate(filter.to), {\n day: '2-digit',\n month: 'short',\n year: 'numeric',\n })}`;\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger>\n <Segment type=\"button\" $interactive>\n <Typography variant=\"pi\" textColor=\"neutral800\">\n {label}\n </Typography>\n </Segment>\n </Popover.Trigger>\n <PanelPopoverContent>\n {filter.mode === 'preset' ? (\n <Flex direction=\"column\" alignItems=\"stretch\" padding={1}>\n {DATE_PRESETS.map((preset: DatePreset) => (\n <OptionButton\n key={preset}\n type=\"button\"\n onClick={() => {\n onChange({ ...filter, preset });\n setOpen(false);\n }}\n >\n {formatMessage(PRESET_LABELS[preset])}\n {preset === filter.preset && <Check aria-hidden width=\"1.6rem\" height=\"1.6rem\" />}\n </OptionButton>\n ))}\n </Flex>\n ) : (\n <DateRangeCalendar\n from={filter.from}\n to={filter.to}\n onSelect={(from, to) => {\n onChange({ ...filter, from, to });\n setOpen(false);\n }}\n />\n )}\n </PanelPopoverContent>\n </Popover.Root>\n );\n};\n\nconst FilterBadge = ({\n filter,\n onChange,\n onRemove,\n}: {\n filter: ListFilter;\n onChange: (next: ListFilter) => void;\n onRemove: () => void;\n}) => {\n const { formatMessage } = useIntl();\n\n const fieldLabel =\n filter.kind === 'type'\n ? formatMessage({ id: getTranslationKey('list.filters.field.type'), defaultMessage: 'Type' })\n : formatMessage(DATE_FIELD_LABELS[filter.field]);\n\n return (\n <BadgePill alignItems=\"stretch\" data-testid=\"filter-badge\">\n <FieldSegment>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {fieldLabel}\n </Typography>\n </FieldSegment>\n\n {filter.kind === 'type' && (\n <>\n <SegmentPopover\n label={formatMessage(TYPE_CONDITION_LABELS[filter.condition])}\n options={['is', 'isNot'] as TypeCondition[]}\n active={filter.condition}\n getOptionLabel={(option) => formatMessage(TYPE_CONDITION_LABELS[option])}\n onPick={(condition) => onChange({ ...filter, condition })}\n />\n <TypeValuePopover filter={filter} onChange={onChange} />\n </>\n )}\n\n {filter.kind === 'date' && filter.mode === 'preset' && (\n <>\n <SegmentPopover\n label={formatMessage(PRESET_CONDITION_LABELS[filter.condition])}\n options={['isExactly', 'withinLast', 'notWithinLast'] as PresetCondition[]}\n active={filter.condition}\n getOptionLabel={(option) => formatMessage(PRESET_CONDITION_LABELS[option])}\n onPick={(condition) => onChange({ ...filter, condition })}\n />\n <DateValuePopover filter={filter} onChange={onChange} />\n </>\n )}\n\n {filter.kind === 'date' && filter.mode === 'range' && (\n <>\n <SegmentPopover\n label={formatMessage(RANGE_CONDITION_LABELS[filter.condition])}\n options={['is', 'isNot'] as RangeCondition[]}\n active={filter.condition}\n getOptionLabel={(option) => formatMessage(RANGE_CONDITION_LABELS[option])}\n onPick={(condition) => onChange({ ...filter, condition })}\n />\n <DateValuePopover filter={filter} onChange={onChange} />\n </>\n )}\n\n <RemoveButton\n type=\"button\"\n onClick={onRemove}\n aria-label={formatMessage(\n {\n id: getTranslationKey('list.filters.remove'),\n defaultMessage: 'Remove {filter} filter',\n },\n { filter: fieldLabel }\n )}\n >\n <Cross width=\"1.2rem\" height=\"1.2rem\" aria-hidden />\n </RemoveButton>\n </BadgePill>\n );\n};\n\ninterface FilterBadgesProps {\n listFilters: ListFilters;\n}\n\nexport const FilterBadges = ({ listFilters }: FilterBadgesProps) => {\n const { filters, updateFilter, removeFilter } = listFilters;\n\n if (filters.length === 0) {\n return null;\n }\n\n return (\n <Flex gap={2} wrap=\"wrap\" paddingTop={2} data-testid=\"filter-badges\">\n {filters.map((filter, index) => (\n <FilterBadge\n // Position is identity: badges are edited/removed by index.\n key={index}\n filter={filter}\n onChange={(next) => updateFilter(index, next)}\n onRemove={() => removeFilter(index)}\n />\n ))}\n </Flex>\n );\n};\n"],"names":["BadgePill","styled","Flex","theme","colors","neutral200","borderRadius","neutral0","Segment","button","spaces","$interactive","primary100","primary600","FieldSegment","span","PanelPopoverContent","Popover","Content","FILTER_PANEL_WIDTH","OptionButton","fontSizes","lineHeights","neutral800","RemoveButton","neutral600","TYPE_CONDITION_LABELS","is","id","getTranslationKey","defaultMessage","isNot","PRESET_CONDITION_LABELS","isExactly","withinLast","notWithinLast","RANGE_CONDITION_LABELS","SegmentPopover","label","options","active","getOptionLabel","onPick","open","setOpen","useState","_jsxs","Root","onOpenChange","_jsx","Trigger","type","Typography","variant","textColor","direction","alignItems","padding","map","option","onClick","Check","aria-hidden","width","height","TypeValuePopover","filter","onChange","formatMessage","useIntl","values","value","TYPE_LABELS","join","toggleValue","nextValues","includes","v","length","gap","TYPE_VALUES","Checkbox","checked","onCheckedChange","DateValuePopover","formatDate","mode","PRESET_LABELS","preset","parseCalendarDate","from","day","month","to","year","DATE_PRESETS","DateRangeCalendar","onSelect","FilterBadge","onRemove","fieldLabel","kind","DATE_FIELD_LABELS","field","data-testid","_Fragment","condition","aria-label","Cross","FilterBadges","listFilters","filters","updateFilter","removeFilter","wrap","paddingTop","index","next"],"mappings":"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"}
1
+ {"version":3,"file":"FilterBadges.mjs","sources":["../../../../../../admin/src/future/pages/Assets/components/FilterBadges.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { Checkbox, Flex, Popover, Typography } from '@strapi/design-system';\nimport { Check, Cross } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { getTranslationKey } from '../../../utils/translations';\nimport {\n DATE_PRESETS,\n TYPE_VALUES,\n type DateFilter,\n type DatePreset,\n type ListFilter,\n type ListFilters,\n type PresetCondition,\n type RangeCondition,\n type TypeCondition,\n type TypeFilter,\n type TypeValue,\n} from '../hooks/useListFilters';\nimport { parseCalendarDate } from '../utils/buildAssetFilters';\n\nimport { DateRangeCalendar } from './DateRangeCalendar';\nimport { DATE_FIELD_LABELS, FILTER_PANEL_WIDTH, PRESET_LABELS, TYPE_LABELS } from './FilterMenu';\n\nimport type { MessageDescriptor } from 'react-intl';\n\n/**\n * Row of applied-filter badges under the toolbar. A badge has three segments —\n * field (static), condition (click → select popover), value (click → type\n * checkboxes / preset list / range calendar) — plus a remove button.\n */\n\nconst BadgePill = styled(Flex)`\n border: 1px solid ${({ theme }) => theme.colors.neutral200};\n border-radius: ${({ theme }) => theme.borderRadius};\n background: ${({ theme }) => theme.colors.neutral0};\n overflow: hidden;\n`;\n\nconst Segment = styled.button<{ $interactive?: boolean }>`\n border: none;\n background: transparent;\n font: inherit;\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[3]}`};\n cursor: ${({ $interactive }) => ($interactive ? 'pointer' : 'default')};\n border-right: 1px solid ${({ theme }) => theme.colors.neutral200};\n\n ${({ theme }) => theme.breakpoints.medium} {\n padding: ${({ theme }) => `${theme.spaces[1]} ${theme.spaces[2]}`};\n }\n ${({ $interactive, theme }) =>\n $interactive && `&:hover { background: ${theme.colors.primary100}; }`}\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme.colors.primary600};\n outline-offset: -2px;\n }\n`;\n\n// Non-interactive field segment (first pill cell).\nconst FieldSegment = styled.span`\n display: inline-flex;\n align-items: center;\n padding: ${({ theme }) => `${theme.spaces[1]} ${theme.spaces[2]}`};\n border-right: 1px solid ${({ theme }) => theme.colors.neutral200};\n`;\n\n// Badge popovers mirror the filter-menu panels: same fixed width, same font.\nconst PanelPopoverContent = styled(Popover.Content)`\n width: ${FILTER_PANEL_WIDTH};\n`;\n\n// Option row inside a segment popover — sized like a DS Menu.Item so the badge\n// dropdowns read as the same control family as the filter menu.\nconst OptionButton = styled.button`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: ${({ theme }) => theme.spaces[4]};\n width: 100%;\n border: none;\n background: transparent;\n font-size: ${({ theme }) => theme.fontSizes[2]};\n line-height: ${({ theme }) => theme.lineHeights[4]};\n font-family: inherit;\n text-align: left;\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[4]}`};\n border-radius: ${({ theme }) => theme.borderRadius};\n cursor: pointer;\n color: ${({ theme }) => theme.colors.neutral800};\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\nconst RemoveButton = styled.button`\n border: none;\n background: transparent;\n display: inline-flex;\n align-items: center;\n padding: ${({ theme }) => `0 ${theme.spaces[2]}`};\n cursor: pointer;\n color: ${({ theme }) => theme.colors.neutral600};\n\n &:hover {\n color: ${({ theme }) => theme.colors.neutral800};\n }\n\n &:focus-visible {\n outline: 2px solid ${({ theme }) => theme.colors.primary600};\n outline-offset: -2px;\n }\n`;\n\nconst TYPE_CONDITION_LABELS: Record<TypeCondition, MessageDescriptor> = {\n is: { id: getTranslationKey('list.filters.condition.is'), defaultMessage: 'is' },\n isNot: { id: getTranslationKey('list.filters.condition.is-not'), defaultMessage: 'is not' },\n};\n\nconst PRESET_CONDITION_LABELS: Record<PresetCondition, MessageDescriptor> = {\n isExactly: {\n id: getTranslationKey('list.filters.condition.is-exactly'),\n defaultMessage: 'is exactly',\n },\n withinLast: {\n id: getTranslationKey('list.filters.condition.within-last'),\n defaultMessage: 'within the last',\n },\n notWithinLast: {\n id: getTranslationKey('list.filters.condition.not-within-last'),\n defaultMessage: 'not within the last',\n },\n};\n\nconst RANGE_CONDITION_LABELS: Record<RangeCondition, MessageDescriptor> = {\n is: { id: getTranslationKey('list.filters.condition.is'), defaultMessage: 'is' },\n isNot: { id: getTranslationKey('list.filters.condition.is-not'), defaultMessage: 'is not' },\n};\n\n/** A small single-choice popover listing options with a check on the active one. */\ninterface SegmentPopoverProps<T extends string> {\n label: string;\n options: T[];\n active: T;\n getOptionLabel: (option: T) => string;\n onPick: (option: T) => void;\n}\n\nconst SegmentPopover = <T extends string>({\n label,\n options,\n active,\n getOptionLabel,\n onPick,\n}: SegmentPopoverProps<T>) => {\n const [open, setOpen] = useState(false);\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger>\n <Segment type=\"button\" $interactive>\n <Typography variant=\"pi\" textColor=\"neutral800\">\n {label}\n </Typography>\n </Segment>\n </Popover.Trigger>\n <PanelPopoverContent>\n <Flex direction=\"column\" alignItems=\"stretch\" padding={1}>\n {options.map((option) => (\n <OptionButton\n key={option}\n type=\"button\"\n onClick={() => {\n onPick(option);\n setOpen(false);\n }}\n >\n {getOptionLabel(option)}\n {option === active && <Check aria-hidden width=\"1.6rem\" height=\"1.6rem\" />}\n </OptionButton>\n ))}\n </Flex>\n </PanelPopoverContent>\n </Popover.Root>\n );\n};\n\nconst TypeValuePopover = ({\n filter,\n onChange,\n}: {\n filter: TypeFilter;\n onChange: (next: TypeFilter) => void;\n}) => {\n const { formatMessage } = useIntl();\n const [open, setOpen] = useState(false);\n\n const label = filter.values.map((value) => formatMessage(TYPE_LABELS[value])).join(', ');\n\n const toggleValue = (value: TypeValue) => {\n const nextValues = filter.values.includes(value)\n ? filter.values.filter((v) => v !== value)\n : [...filter.values, value];\n\n // At least one value stays checked — an empty badge is removed via ×, not here.\n if (nextValues.length > 0) {\n onChange({ ...filter, values: nextValues });\n }\n };\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger>\n <Segment type=\"button\" $interactive>\n <Typography variant=\"pi\" textColor=\"neutral800\">\n {label}\n </Typography>\n </Segment>\n </Popover.Trigger>\n <PanelPopoverContent>\n <Flex direction=\"column\" alignItems=\"flex-start\" padding={3} gap={2}>\n {TYPE_VALUES.map((value) => (\n <Checkbox\n key={value}\n checked={filter.values.includes(value)}\n onCheckedChange={() => toggleValue(value)}\n >\n {formatMessage(TYPE_LABELS[value])}\n </Checkbox>\n ))}\n </Flex>\n </PanelPopoverContent>\n </Popover.Root>\n );\n};\n\nconst DateValuePopover = ({\n filter,\n onChange,\n}: {\n filter: DateFilter;\n onChange: (next: DateFilter) => void;\n}) => {\n const { formatMessage, formatDate } = useIntl();\n const [open, setOpen] = useState(false);\n\n // Parse as LOCAL calendar dates before formatting: react-intl would coerce\n // the raw `YYYY-MM-DD` strings via `new Date(value)` = UTC midnight, showing\n // the previous day in every timezone west of UTC while the query (also\n // local, see buildAssetFilters) filters the day the user actually picked.\n const label =\n filter.mode === 'preset'\n ? formatMessage(PRESET_LABELS[filter.preset])\n : `${formatDate(parseCalendarDate(filter.from), {\n day: '2-digit',\n month: 'short',\n })} - ${formatDate(parseCalendarDate(filter.to), {\n day: '2-digit',\n month: 'short',\n year: 'numeric',\n })}`;\n\n return (\n <Popover.Root open={open} onOpenChange={setOpen}>\n <Popover.Trigger>\n <Segment type=\"button\" $interactive>\n <Typography variant=\"pi\" textColor=\"neutral800\">\n {label}\n </Typography>\n </Segment>\n </Popover.Trigger>\n <PanelPopoverContent>\n {filter.mode === 'preset' ? (\n <Flex direction=\"column\" alignItems=\"stretch\" padding={1}>\n {DATE_PRESETS.map((preset: DatePreset) => (\n <OptionButton\n key={preset}\n type=\"button\"\n onClick={() => {\n onChange({ ...filter, preset });\n setOpen(false);\n }}\n >\n {formatMessage(PRESET_LABELS[preset])}\n {preset === filter.preset && <Check aria-hidden width=\"1.6rem\" height=\"1.6rem\" />}\n </OptionButton>\n ))}\n </Flex>\n ) : (\n <DateRangeCalendar\n from={filter.from}\n to={filter.to}\n onSelect={(from, to) => {\n onChange({ ...filter, from, to });\n setOpen(false);\n }}\n />\n )}\n </PanelPopoverContent>\n </Popover.Root>\n );\n};\n\nconst FilterBadge = ({\n filter,\n onChange,\n onRemove,\n}: {\n filter: ListFilter;\n onChange: (next: ListFilter) => void;\n onRemove: () => void;\n}) => {\n const { formatMessage } = useIntl();\n\n const fieldLabel =\n filter.kind === 'type'\n ? formatMessage({ id: getTranslationKey('list.filters.field.type'), defaultMessage: 'Type' })\n : formatMessage(DATE_FIELD_LABELS[filter.field]);\n\n return (\n <BadgePill alignItems=\"stretch\" data-testid=\"filter-badge\">\n <FieldSegment>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {fieldLabel}\n </Typography>\n </FieldSegment>\n\n {filter.kind === 'type' && (\n <>\n <SegmentPopover\n label={formatMessage(TYPE_CONDITION_LABELS[filter.condition])}\n options={['is', 'isNot'] as TypeCondition[]}\n active={filter.condition}\n getOptionLabel={(option) => formatMessage(TYPE_CONDITION_LABELS[option])}\n onPick={(condition) => onChange({ ...filter, condition })}\n />\n <TypeValuePopover filter={filter} onChange={onChange} />\n </>\n )}\n\n {filter.kind === 'date' && filter.mode === 'preset' && (\n <>\n <SegmentPopover\n label={formatMessage(PRESET_CONDITION_LABELS[filter.condition])}\n options={['isExactly', 'withinLast', 'notWithinLast'] as PresetCondition[]}\n active={filter.condition}\n getOptionLabel={(option) => formatMessage(PRESET_CONDITION_LABELS[option])}\n onPick={(condition) => onChange({ ...filter, condition })}\n />\n <DateValuePopover filter={filter} onChange={onChange} />\n </>\n )}\n\n {filter.kind === 'date' && filter.mode === 'range' && (\n <>\n <SegmentPopover\n label={formatMessage(RANGE_CONDITION_LABELS[filter.condition])}\n options={['is', 'isNot'] as RangeCondition[]}\n active={filter.condition}\n getOptionLabel={(option) => formatMessage(RANGE_CONDITION_LABELS[option])}\n onPick={(condition) => onChange({ ...filter, condition })}\n />\n <DateValuePopover filter={filter} onChange={onChange} />\n </>\n )}\n\n <RemoveButton\n type=\"button\"\n onClick={onRemove}\n aria-label={formatMessage(\n {\n id: getTranslationKey('list.filters.remove'),\n defaultMessage: 'Remove {filter} filter',\n },\n { filter: fieldLabel }\n )}\n >\n <Cross width=\"1.2rem\" height=\"1.2rem\" aria-hidden />\n </RemoveButton>\n </BadgePill>\n );\n};\n\n// Tighten the gap above the badges when the sticky header is in its compact\n// (scrolled) state, matching the header's own shrink.\nconst BadgesRoot = styled(Flex)<{ $compact: boolean }>`\n padding-top: ${({ theme, $compact }) => ($compact ? theme.spaces[1] : theme.spaces[6])};\n transition: padding-top 0.2s ease;\n`;\n\ninterface FilterBadgesProps {\n listFilters: ListFilters;\n /** Sticky header is scrolled/compact — reduce the space above the badges. */\n compact?: boolean;\n}\n\nexport const FilterBadges = ({ listFilters, compact = false }: FilterBadgesProps) => {\n const { filters, updateFilter, removeFilter } = listFilters;\n\n if (filters.length === 0) {\n return null;\n }\n\n return (\n <BadgesRoot $compact={compact} gap={2} wrap=\"wrap\" data-testid=\"filter-badges\">\n {filters.map((filter, index) => (\n <FilterBadge\n // Position is identity: badges are edited/removed by index.\n key={index}\n filter={filter}\n onChange={(next) => updateFilter(index, next)}\n onRemove={() => removeFilter(index)}\n />\n ))}\n </BadgesRoot>\n );\n};\n"],"names":["BadgePill","styled","Flex","theme","colors","neutral200","borderRadius","neutral0","Segment","button","spaces","$interactive","breakpoints","medium","primary100","primary600","FieldSegment","span","PanelPopoverContent","Popover","Content","FILTER_PANEL_WIDTH","OptionButton","fontSizes","lineHeights","neutral800","RemoveButton","neutral600","TYPE_CONDITION_LABELS","is","id","getTranslationKey","defaultMessage","isNot","PRESET_CONDITION_LABELS","isExactly","withinLast","notWithinLast","RANGE_CONDITION_LABELS","SegmentPopover","label","options","active","getOptionLabel","onPick","open","setOpen","useState","_jsxs","Root","onOpenChange","_jsx","Trigger","type","Typography","variant","textColor","direction","alignItems","padding","map","option","onClick","Check","aria-hidden","width","height","TypeValuePopover","filter","onChange","formatMessage","useIntl","values","value","TYPE_LABELS","join","toggleValue","nextValues","includes","v","length","gap","TYPE_VALUES","Checkbox","checked","onCheckedChange","DateValuePopover","formatDate","mode","PRESET_LABELS","preset","parseCalendarDate","from","day","month","to","year","DATE_PRESETS","DateRangeCalendar","onSelect","FilterBadge","onRemove","fieldLabel","kind","DATE_FIELD_LABELS","field","data-testid","_Fragment","condition","aria-label","Cross","BadgesRoot","$compact","FilterBadges","listFilters","compact","filters","updateFilter","removeFilter","wrap","index","next"],"mappings":"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"}