openvsx-webui-test 0.17.1 → 0.18.0-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (337) hide show
  1. package/lib/components/button-with-progress.d.ts +1 -0
  2. package/lib/components/button-with-progress.d.ts.map +1 -1
  3. package/lib/components/button-with-progress.js +1 -1
  4. package/lib/components/button-with-progress.js.map +1 -1
  5. package/lib/components/sanitized-markdown.d.ts.map +1 -1
  6. package/lib/components/sanitized-markdown.js +79 -1
  7. package/lib/components/sanitized-markdown.js.map +1 -1
  8. package/lib/components/scan-admin/common/auto-refresh.d.ts +21 -0
  9. package/lib/components/scan-admin/common/auto-refresh.d.ts.map +1 -0
  10. package/lib/components/scan-admin/common/auto-refresh.js +45 -0
  11. package/lib/components/scan-admin/common/auto-refresh.js.map +1 -0
  12. package/lib/components/scan-admin/common/conditional-tooltip.d.ts +24 -0
  13. package/lib/components/scan-admin/common/conditional-tooltip.d.ts.map +1 -0
  14. package/lib/components/scan-admin/common/conditional-tooltip.js +63 -0
  15. package/lib/components/scan-admin/common/conditional-tooltip.js.map +1 -0
  16. package/lib/components/scan-admin/common/file-table.d.ts +23 -0
  17. package/lib/components/scan-admin/common/file-table.d.ts.map +1 -0
  18. package/lib/components/scan-admin/common/file-table.js +350 -0
  19. package/lib/components/scan-admin/common/file-table.js.map +1 -0
  20. package/lib/components/scan-admin/common/index.d.ts +18 -0
  21. package/lib/components/scan-admin/common/index.d.ts.map +1 -0
  22. package/lib/components/scan-admin/common/index.js +18 -0
  23. package/lib/components/scan-admin/common/index.js.map +1 -0
  24. package/lib/components/scan-admin/common/tab-panel.d.ts +25 -0
  25. package/lib/components/scan-admin/common/tab-panel.d.ts.map +1 -0
  26. package/lib/components/scan-admin/common/tab-panel.js +22 -0
  27. package/lib/components/scan-admin/common/tab-panel.js.map +1 -0
  28. package/lib/components/scan-admin/common/utils.d.ts +15 -0
  29. package/lib/components/scan-admin/common/utils.d.ts.map +1 -0
  30. package/lib/components/scan-admin/common/utils.js +46 -0
  31. package/lib/components/scan-admin/common/utils.js.map +1 -0
  32. package/lib/components/scan-admin/dialogs/file-dialog.d.ts +19 -0
  33. package/lib/components/scan-admin/dialogs/file-dialog.d.ts.map +1 -0
  34. package/lib/components/scan-admin/dialogs/file-dialog.js +85 -0
  35. package/lib/components/scan-admin/dialogs/file-dialog.js.map +1 -0
  36. package/lib/components/scan-admin/dialogs/index.d.ts +15 -0
  37. package/lib/components/scan-admin/dialogs/index.d.ts.map +1 -0
  38. package/lib/components/scan-admin/dialogs/index.js +15 -0
  39. package/lib/components/scan-admin/dialogs/index.js.map +1 -0
  40. package/lib/components/scan-admin/dialogs/quarantine-dialog.d.ts +23 -0
  41. package/lib/components/scan-admin/dialogs/quarantine-dialog.d.ts.map +1 -0
  42. package/lib/components/scan-admin/dialogs/quarantine-dialog.js +192 -0
  43. package/lib/components/scan-admin/dialogs/quarantine-dialog.js.map +1 -0
  44. package/lib/components/scan-admin/index.d.ts +20 -0
  45. package/lib/components/scan-admin/index.d.ts.map +1 -0
  46. package/lib/components/scan-admin/index.js +25 -0
  47. package/lib/components/scan-admin/index.js.map +1 -0
  48. package/lib/components/scan-admin/scan-card/index.d.ts +20 -0
  49. package/lib/components/scan-admin/scan-card/index.d.ts.map +1 -0
  50. package/lib/components/scan-admin/scan-card/index.js +20 -0
  51. package/lib/components/scan-admin/scan-card/index.js.map +1 -0
  52. package/lib/components/scan-admin/scan-card/scan-card-content.d.ts +30 -0
  53. package/lib/components/scan-admin/scan-card/scan-card-content.d.ts.map +1 -0
  54. package/lib/components/scan-admin/scan-card/scan-card-content.js +232 -0
  55. package/lib/components/scan-admin/scan-card/scan-card-content.js.map +1 -0
  56. package/lib/components/scan-admin/scan-card/scan-card-expand-strip-badges.d.ts +26 -0
  57. package/lib/components/scan-admin/scan-card/scan-card-expand-strip-badges.d.ts.map +1 -0
  58. package/lib/components/scan-admin/scan-card/scan-card-expand-strip-badges.js +121 -0
  59. package/lib/components/scan-admin/scan-card/scan-card-expand-strip-badges.js.map +1 -0
  60. package/lib/components/scan-admin/scan-card/scan-card-expand-strip.d.ts +27 -0
  61. package/lib/components/scan-admin/scan-card/scan-card-expand-strip.d.ts.map +1 -0
  62. package/lib/components/scan-admin/scan-card/scan-card-expand-strip.js +66 -0
  63. package/lib/components/scan-admin/scan-card/scan-card-expand-strip.js.map +1 -0
  64. package/lib/components/scan-admin/scan-card/scan-card-expanded-content.d.ts +26 -0
  65. package/lib/components/scan-admin/scan-card/scan-card-expanded-content.d.ts.map +1 -0
  66. package/lib/components/scan-admin/scan-card/scan-card-expanded-content.js +151 -0
  67. package/lib/components/scan-admin/scan-card/scan-card-expanded-content.js.map +1 -0
  68. package/lib/components/scan-admin/scan-card/scan-card-header.d.ts +26 -0
  69. package/lib/components/scan-admin/scan-card/scan-card-header.d.ts.map +1 -0
  70. package/lib/components/scan-admin/scan-card/scan-card-header.js +101 -0
  71. package/lib/components/scan-admin/scan-card/scan-card-header.js.map +1 -0
  72. package/lib/components/scan-admin/scan-card/scan-card.d.ts +34 -0
  73. package/lib/components/scan-admin/scan-card/scan-card.d.ts.map +1 -0
  74. package/lib/components/scan-admin/scan-card/scan-card.js +90 -0
  75. package/lib/components/scan-admin/scan-card/scan-card.js.map +1 -0
  76. package/lib/components/scan-admin/scan-card/scan-detail-card.d.ts +38 -0
  77. package/lib/components/scan-admin/scan-card/scan-detail-card.d.ts.map +1 -0
  78. package/lib/components/scan-admin/scan-card/scan-detail-card.js +72 -0
  79. package/lib/components/scan-admin/scan-card/scan-detail-card.js.map +1 -0
  80. package/lib/components/scan-admin/scan-card/utils.d.ts +48 -0
  81. package/lib/components/scan-admin/scan-card/utils.d.ts.map +1 -0
  82. package/lib/components/scan-admin/scan-card/utils.js +166 -0
  83. package/lib/components/scan-admin/scan-card/utils.js.map +1 -0
  84. package/lib/components/scan-admin/tab-contents/allow-list-tab-content.d.ts +19 -0
  85. package/lib/components/scan-admin/tab-contents/allow-list-tab-content.d.ts.map +1 -0
  86. package/lib/components/scan-admin/tab-contents/allow-list-tab-content.js +55 -0
  87. package/lib/components/scan-admin/tab-contents/allow-list-tab-content.js.map +1 -0
  88. package/lib/components/scan-admin/tab-contents/auto-rejected-tab-content.d.ts +19 -0
  89. package/lib/components/scan-admin/tab-contents/auto-rejected-tab-content.d.ts.map +1 -0
  90. package/lib/components/scan-admin/tab-contents/auto-rejected-tab-content.js +43 -0
  91. package/lib/components/scan-admin/tab-contents/auto-rejected-tab-content.js.map +1 -0
  92. package/lib/components/scan-admin/tab-contents/block-list-tab-content.d.ts +19 -0
  93. package/lib/components/scan-admin/tab-contents/block-list-tab-content.d.ts.map +1 -0
  94. package/lib/components/scan-admin/tab-contents/block-list-tab-content.js +55 -0
  95. package/lib/components/scan-admin/tab-contents/block-list-tab-content.js.map +1 -0
  96. package/lib/components/scan-admin/tab-contents/index.d.ts +18 -0
  97. package/lib/components/scan-admin/tab-contents/index.d.ts.map +1 -0
  98. package/lib/components/scan-admin/tab-contents/index.js +18 -0
  99. package/lib/components/scan-admin/tab-contents/index.js.map +1 -0
  100. package/lib/components/scan-admin/tab-contents/quarantined-tab-content.d.ts +19 -0
  101. package/lib/components/scan-admin/tab-contents/quarantined-tab-content.d.ts.map +1 -0
  102. package/lib/components/scan-admin/tab-contents/quarantined-tab-content.js +78 -0
  103. package/lib/components/scan-admin/tab-contents/quarantined-tab-content.js.map +1 -0
  104. package/lib/components/scan-admin/tab-contents/scans-tab-content.d.ts +19 -0
  105. package/lib/components/scan-admin/tab-contents/scans-tab-content.d.ts.map +1 -0
  106. package/lib/components/scan-admin/tab-contents/scans-tab-content.js +52 -0
  107. package/lib/components/scan-admin/tab-contents/scans-tab-content.js.map +1 -0
  108. package/lib/components/scan-admin/toolbars/counts-toolbar.d.ts +35 -0
  109. package/lib/components/scan-admin/toolbars/counts-toolbar.d.ts.map +1 -0
  110. package/lib/components/scan-admin/toolbars/counts-toolbar.js +132 -0
  111. package/lib/components/scan-admin/toolbars/counts-toolbar.js.map +1 -0
  112. package/lib/components/scan-admin/toolbars/index.d.ts +16 -0
  113. package/lib/components/scan-admin/toolbars/index.d.ts.map +1 -0
  114. package/lib/components/scan-admin/toolbars/index.js +16 -0
  115. package/lib/components/scan-admin/toolbars/index.js.map +1 -0
  116. package/lib/components/scan-admin/toolbars/search-toolbar.d.ts +43 -0
  117. package/lib/components/scan-admin/toolbars/search-toolbar.d.ts.map +1 -0
  118. package/lib/components/scan-admin/toolbars/search-toolbar.js +106 -0
  119. package/lib/components/scan-admin/toolbars/search-toolbar.js.map +1 -0
  120. package/lib/components/scan-admin/toolbars/tab-toolbar.d.ts +25 -0
  121. package/lib/components/scan-admin/toolbars/tab-toolbar.d.ts.map +1 -0
  122. package/lib/components/scan-admin/toolbars/tab-toolbar.js +33 -0
  123. package/lib/components/scan-admin/toolbars/tab-toolbar.js.map +1 -0
  124. package/lib/context/scan-admin/index.d.ts +21 -0
  125. package/lib/context/scan-admin/index.d.ts.map +1 -0
  126. package/lib/context/scan-admin/index.js +27 -0
  127. package/lib/context/scan-admin/index.js.map +1 -0
  128. package/lib/context/scan-admin/scan-actions.d.ts +19 -0
  129. package/lib/context/scan-admin/scan-actions.d.ts.map +1 -0
  130. package/lib/context/scan-admin/scan-actions.js +64 -0
  131. package/lib/context/scan-admin/scan-actions.js.map +1 -0
  132. package/lib/context/scan-admin/scan-api-actions.d.ts +26 -0
  133. package/lib/context/scan-admin/scan-api-actions.d.ts.map +1 -0
  134. package/lib/context/scan-admin/scan-api-actions.js +118 -0
  135. package/lib/context/scan-admin/scan-api-actions.js.map +1 -0
  136. package/lib/context/scan-admin/scan-api-effects.d.ts +40 -0
  137. package/lib/context/scan-admin/scan-api-effects.d.ts.map +1 -0
  138. package/lib/context/scan-admin/scan-api-effects.js +446 -0
  139. package/lib/context/scan-admin/scan-api-effects.js.map +1 -0
  140. package/lib/context/scan-admin/scan-context-types.d.ts +69 -0
  141. package/lib/context/scan-admin/scan-context-types.d.ts.map +1 -0
  142. package/lib/context/scan-admin/scan-context-types.js +14 -0
  143. package/lib/context/scan-admin/scan-context-types.js.map +1 -0
  144. package/lib/context/scan-admin/scan-context.d.ts +17 -0
  145. package/lib/context/scan-admin/scan-context.d.ts.map +1 -0
  146. package/lib/context/scan-admin/scan-context.js +90 -0
  147. package/lib/context/scan-admin/scan-context.js.map +1 -0
  148. package/lib/context/scan-admin/scan-helpers.d.ts +28 -0
  149. package/lib/context/scan-admin/scan-helpers.d.ts.map +1 -0
  150. package/lib/context/scan-admin/scan-helpers.js +56 -0
  151. package/lib/context/scan-admin/scan-helpers.js.map +1 -0
  152. package/lib/context/scan-admin/scan-reducer.d.ts +18 -0
  153. package/lib/context/scan-admin/scan-reducer.d.ts.map +1 -0
  154. package/lib/context/scan-admin/scan-reducer.js +194 -0
  155. package/lib/context/scan-admin/scan-reducer.js.map +1 -0
  156. package/lib/context/scan-admin/scan-types.d.ts +292 -0
  157. package/lib/context/scan-admin/scan-types.d.ts.map +1 -0
  158. package/lib/context/scan-admin/scan-types.js +67 -0
  159. package/lib/context/scan-admin/scan-types.js.map +1 -0
  160. package/lib/default/page-settings.d.ts.map +1 -1
  161. package/lib/default/page-settings.js +3 -0
  162. package/lib/default/page-settings.js.map +1 -1
  163. package/lib/default/theme.d.ts +50 -12
  164. package/lib/default/theme.d.ts.map +1 -1
  165. package/lib/default/theme.js +42 -0
  166. package/lib/default/theme.js.map +1 -1
  167. package/lib/extension-registry-service.d.ts +85 -1
  168. package/lib/extension-registry-service.d.ts.map +1 -1
  169. package/lib/extension-registry-service.js +197 -0
  170. package/lib/extension-registry-service.js.map +1 -1
  171. package/lib/extension-registry-types.d.ts +140 -0
  172. package/lib/extension-registry-types.d.ts.map +1 -1
  173. package/lib/extension-registry-types.js.map +1 -1
  174. package/lib/hooks/scan-admin/index.d.ts +34 -0
  175. package/lib/hooks/scan-admin/index.d.ts.map +1 -0
  176. package/lib/hooks/scan-admin/index.js +28 -0
  177. package/lib/hooks/scan-admin/index.js.map +1 -0
  178. package/lib/hooks/scan-admin/use-auto-rejected-tab.d.ts +76 -0
  179. package/lib/hooks/scan-admin/use-auto-rejected-tab.d.ts.map +1 -0
  180. package/lib/hooks/scan-admin/use-auto-rejected-tab.js +79 -0
  181. package/lib/hooks/scan-admin/use-auto-rejected-tab.js.map +1 -0
  182. package/lib/hooks/scan-admin/use-dialogs.d.ts +43 -0
  183. package/lib/hooks/scan-admin/use-dialogs.d.ts.map +1 -0
  184. package/lib/hooks/scan-admin/use-dialogs.js +55 -0
  185. package/lib/hooks/scan-admin/use-dialogs.js.map +1 -0
  186. package/lib/hooks/scan-admin/use-file-list-tab.d.ts +208 -0
  187. package/lib/hooks/scan-admin/use-file-list-tab.d.ts.map +1 -0
  188. package/lib/hooks/scan-admin/use-file-list-tab.js +125 -0
  189. package/lib/hooks/scan-admin/use-file-list-tab.js.map +1 -0
  190. package/lib/hooks/scan-admin/use-pagination.d.ts +36 -0
  191. package/lib/hooks/scan-admin/use-pagination.d.ts.map +1 -0
  192. package/lib/hooks/scan-admin/use-pagination.js +79 -0
  193. package/lib/hooks/scan-admin/use-pagination.js.map +1 -0
  194. package/lib/hooks/scan-admin/use-quarantined-tab.d.ts +92 -0
  195. package/lib/hooks/scan-admin/use-quarantined-tab.d.ts.map +1 -0
  196. package/lib/hooks/scan-admin/use-quarantined-tab.js +125 -0
  197. package/lib/hooks/scan-admin/use-quarantined-tab.js.map +1 -0
  198. package/lib/hooks/scan-admin/use-scan-card-state.d.ts +29 -0
  199. package/lib/hooks/scan-admin/use-scan-card-state.d.ts.map +1 -0
  200. package/lib/hooks/scan-admin/use-scan-card-state.js +50 -0
  201. package/lib/hooks/scan-admin/use-scan-card-state.js.map +1 -0
  202. package/lib/hooks/scan-admin/use-scan-filters.d.ts +53 -0
  203. package/lib/hooks/scan-admin/use-scan-filters.d.ts.map +1 -0
  204. package/lib/hooks/scan-admin/use-scan-filters.js +75 -0
  205. package/lib/hooks/scan-admin/use-scan-filters.js.map +1 -0
  206. package/lib/hooks/scan-admin/use-scans-tab.d.ts +85 -0
  207. package/lib/hooks/scan-admin/use-scans-tab.d.ts.map +1 -0
  208. package/lib/hooks/scan-admin/use-scans-tab.js +87 -0
  209. package/lib/hooks/scan-admin/use-scans-tab.js.map +1 -0
  210. package/lib/hooks/scan-admin/use-search.d.ts +32 -0
  211. package/lib/hooks/scan-admin/use-search.d.ts.map +1 -0
  212. package/lib/hooks/scan-admin/use-search.js +48 -0
  213. package/lib/hooks/scan-admin/use-search.js.map +1 -0
  214. package/lib/hooks/scan-admin/use-tab-navigation.d.ts +96 -0
  215. package/lib/hooks/scan-admin/use-tab-navigation.d.ts.map +1 -0
  216. package/lib/hooks/scan-admin/use-tab-navigation.js +70 -0
  217. package/lib/hooks/scan-admin/use-tab-navigation.js.map +1 -0
  218. package/lib/hooks/scan-admin/use-url-sync.d.ts +22 -0
  219. package/lib/hooks/scan-admin/use-url-sync.d.ts.map +1 -0
  220. package/lib/hooks/scan-admin/use-url-sync.js +252 -0
  221. package/lib/hooks/scan-admin/use-url-sync.js.map +1 -0
  222. package/lib/page-settings.d.ts +4 -0
  223. package/lib/page-settings.d.ts.map +1 -1
  224. package/lib/pages/admin-dashboard/admin-dashboard.d.ts +1 -0
  225. package/lib/pages/admin-dashboard/admin-dashboard.d.ts.map +1 -1
  226. package/lib/pages/admin-dashboard/admin-dashboard.js +23 -3
  227. package/lib/pages/admin-dashboard/admin-dashboard.js.map +1 -1
  228. package/lib/pages/admin-dashboard/publisher-admin.js +1 -1
  229. package/lib/pages/admin-dashboard/publisher-admin.js.map +1 -1
  230. package/lib/pages/admin-dashboard/publisher-revoke-dialog.d.ts.map +1 -1
  231. package/lib/pages/admin-dashboard/publisher-revoke-dialog.js +1 -1
  232. package/lib/pages/admin-dashboard/publisher-revoke-dialog.js.map +1 -1
  233. package/lib/pages/admin-dashboard/scan-admin.d.ts +20 -0
  234. package/lib/pages/admin-dashboard/scan-admin.d.ts.map +1 -0
  235. package/lib/pages/admin-dashboard/scan-admin.js +66 -0
  236. package/lib/pages/admin-dashboard/scan-admin.js.map +1 -0
  237. package/lib/pages/admin-dashboard/welcome.d.ts.map +1 -1
  238. package/lib/pages/admin-dashboard/welcome.js +2 -1
  239. package/lib/pages/admin-dashboard/welcome.js.map +1 -1
  240. package/lib/pages/extension-detail/extension-detail-overview.d.ts.map +1 -1
  241. package/lib/pages/extension-detail/extension-detail-overview.js +9 -1
  242. package/lib/pages/extension-detail/extension-detail-overview.js.map +1 -1
  243. package/lib/pages/extension-detail/extension-detail-reviews.d.ts.map +1 -1
  244. package/lib/pages/extension-detail/extension-detail-reviews.js +67 -18
  245. package/lib/pages/extension-detail/extension-detail-reviews.js.map +1 -1
  246. package/lib/pages/extension-detail/extension-detail.js +2 -2
  247. package/lib/pages/extension-detail/extension-detail.js.map +1 -1
  248. package/lib/pages/extension-detail/extension-rating-stars.d.ts +2 -2
  249. package/lib/pages/extension-detail/extension-rating-stars.d.ts.map +1 -1
  250. package/lib/pages/extension-detail/extension-rating-stars.js +1 -1
  251. package/lib/pages/extension-detail/extension-rating-stars.js.map +1 -1
  252. package/lib/pages/extension-list/extension-list-item.js +2 -2
  253. package/lib/pages/extension-list/extension-list-item.js.map +1 -1
  254. package/lib/pages/user/user-namespace-extension-list-item.d.ts.map +1 -1
  255. package/lib/pages/user/user-namespace-extension-list-item.js +23 -9
  256. package/lib/pages/user/user-namespace-extension-list-item.js.map +1 -1
  257. package/lib/pages/user/user-publisher-agreement.d.ts.map +1 -1
  258. package/lib/pages/user/user-publisher-agreement.js +34 -13
  259. package/lib/pages/user/user-publisher-agreement.js.map +1 -1
  260. package/lib/pages/user/user-settings-profile.d.ts.map +1 -1
  261. package/lib/pages/user/user-settings-profile.js +10 -5
  262. package/lib/pages/user/user-settings-profile.js.map +1 -1
  263. package/lib/pages/user/user-settings-tokens.d.ts.map +1 -1
  264. package/lib/pages/user/user-settings-tokens.js +13 -5
  265. package/lib/pages/user/user-settings-tokens.js.map +1 -1
  266. package/package.json +10 -9
  267. package/src/components/button-with-progress.tsx +2 -1
  268. package/src/components/sanitized-markdown.tsx +81 -1
  269. package/src/components/scan-admin/common/auto-refresh.tsx +79 -0
  270. package/src/components/scan-admin/common/conditional-tooltip.tsx +74 -0
  271. package/src/components/scan-admin/common/file-table.tsx +508 -0
  272. package/src/components/scan-admin/common/index.ts +18 -0
  273. package/src/components/scan-admin/common/tab-panel.tsx +42 -0
  274. package/src/components/scan-admin/common/utils.ts +48 -0
  275. package/src/components/scan-admin/dialogs/file-dialog.tsx +137 -0
  276. package/src/components/scan-admin/dialogs/index.ts +15 -0
  277. package/src/components/scan-admin/dialogs/quarantine-dialog.tsx +270 -0
  278. package/src/components/scan-admin/index.ts +52 -0
  279. package/src/components/scan-admin/scan-card/index.ts +20 -0
  280. package/src/components/scan-admin/scan-card/scan-card-content.tsx +457 -0
  281. package/src/components/scan-admin/scan-card/scan-card-expand-strip-badges.tsx +186 -0
  282. package/src/components/scan-admin/scan-card/scan-card-expand-strip.tsx +104 -0
  283. package/src/components/scan-admin/scan-card/scan-card-expanded-content.tsx +262 -0
  284. package/src/components/scan-admin/scan-card/scan-card-header.tsx +176 -0
  285. package/src/components/scan-admin/scan-card/scan-card.tsx +152 -0
  286. package/src/components/scan-admin/scan-card/scan-detail-card.tsx +144 -0
  287. package/src/components/scan-admin/scan-card/utils.ts +199 -0
  288. package/src/components/scan-admin/tab-contents/allow-list-tab-content.tsx +119 -0
  289. package/src/components/scan-admin/tab-contents/auto-rejected-tab-content.tsx +106 -0
  290. package/src/components/scan-admin/tab-contents/block-list-tab-content.tsx +119 -0
  291. package/src/components/scan-admin/tab-contents/index.ts +18 -0
  292. package/src/components/scan-admin/tab-contents/quarantined-tab-content.tsx +158 -0
  293. package/src/components/scan-admin/tab-contents/scans-tab-content.tsx +113 -0
  294. package/src/components/scan-admin/toolbars/counts-toolbar.tsx +262 -0
  295. package/src/components/scan-admin/toolbars/index.ts +16 -0
  296. package/src/components/scan-admin/toolbars/search-toolbar.tsx +255 -0
  297. package/src/components/scan-admin/toolbars/tab-toolbar.tsx +56 -0
  298. package/src/context/scan-admin/index.ts +43 -0
  299. package/src/context/scan-admin/scan-actions.ts +87 -0
  300. package/src/context/scan-admin/scan-api-actions.ts +137 -0
  301. package/src/context/scan-admin/scan-api-effects.ts +491 -0
  302. package/src/context/scan-admin/scan-context-types.ts +102 -0
  303. package/src/context/scan-admin/scan-context.tsx +123 -0
  304. package/src/context/scan-admin/scan-helpers.ts +63 -0
  305. package/src/context/scan-admin/scan-reducer.ts +321 -0
  306. package/src/context/scan-admin/scan-types.ts +337 -0
  307. package/src/default/page-settings.tsx +3 -0
  308. package/src/default/theme.tsx +102 -13
  309. package/src/extension-registry-service.ts +216 -1
  310. package/src/extension-registry-types.ts +157 -0
  311. package/src/hooks/scan-admin/index.ts +48 -0
  312. package/src/hooks/scan-admin/use-auto-rejected-tab.ts +85 -0
  313. package/src/hooks/scan-admin/use-dialogs.ts +83 -0
  314. package/src/hooks/scan-admin/use-file-list-tab.ts +149 -0
  315. package/src/hooks/scan-admin/use-pagination.ts +90 -0
  316. package/src/hooks/scan-admin/use-quarantined-tab.ts +138 -0
  317. package/src/hooks/scan-admin/use-scan-card-state.ts +73 -0
  318. package/src/hooks/scan-admin/use-scan-filters.ts +83 -0
  319. package/src/hooks/scan-admin/use-scans-tab.ts +92 -0
  320. package/src/hooks/scan-admin/use-search.ts +54 -0
  321. package/src/hooks/scan-admin/use-tab-navigation.ts +82 -0
  322. package/src/hooks/scan-admin/use-url-sync.ts +293 -0
  323. package/src/page-settings.ts +4 -0
  324. package/src/pages/admin-dashboard/admin-dashboard.tsx +26 -2
  325. package/src/pages/admin-dashboard/publisher-admin.tsx +1 -1
  326. package/src/pages/admin-dashboard/publisher-revoke-dialog.tsx +2 -1
  327. package/src/pages/admin-dashboard/scan-admin.tsx +109 -0
  328. package/src/pages/admin-dashboard/welcome.tsx +1 -0
  329. package/src/pages/extension-detail/extension-detail-overview.tsx +16 -2
  330. package/src/pages/extension-detail/extension-detail-reviews.tsx +116 -30
  331. package/src/pages/extension-detail/extension-detail.tsx +2 -2
  332. package/src/pages/extension-detail/extension-rating-stars.tsx +2 -2
  333. package/src/pages/extension-list/extension-list-item.tsx +2 -2
  334. package/src/pages/user/user-namespace-extension-list-item.tsx +38 -13
  335. package/src/pages/user/user-publisher-agreement.tsx +30 -11
  336. package/src/pages/user/user-settings-profile.tsx +10 -6
  337. package/src/pages/user/user-settings-tokens.tsx +15 -6
@@ -0,0 +1,232 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 Contributors to the Eclipse Foundation
3
+ *
4
+ * See the NOTICE file(s) distributed with this work for additional
5
+ * information regarding copyright ownership.
6
+ *
7
+ * This program and the accompanying materials are made available under the
8
+ * terms of the Eclipse Public License 2.0 which is available at
9
+ * https://www.eclipse.org/legal/epl-2.0
10
+ *
11
+ * SPDX-License-Identifier: EPL-2.0
12
+ ********************************************************************************/
13
+ import React from 'react';
14
+ import { Box, Typography, Link, IconButton, Tooltip } from '@mui/material';
15
+ import { Check as CheckIcon, Warning as WarningAmberIcon, } from '@mui/icons-material';
16
+ import { ConditionalTooltip, formatDateTime, formatDuration } from '../common';
17
+ import { useTheme } from '@mui/material/styles';
18
+ import { isRunning, hasDownload, getFileName, } from './utils';
19
+ /**
20
+ * Content section of the ScanCard containing:
21
+ * - Publisher, Version, Download (Row 2)
22
+ * - Scan Start, Scan End, Duration, Decision Status (Row 3)
23
+ * - Checkbox for selection
24
+ */
25
+ export const ScanCardContent = ({ scan, showCheckbox, checked, onCheckboxChange, liveDuration, }) => {
26
+ const theme = useTheme();
27
+ const [isCheckboxHovering, setIsCheckboxHovering] = React.useState(false);
28
+ return (React.createElement(React.Fragment, null,
29
+ React.createElement(Box, { sx: { gridRow: '2', gridColumn: '1' } }),
30
+ React.createElement(Box, { sx: { gridRow: '2', gridColumn: '2', minWidth: 0 } },
31
+ React.createElement(Typography, { variant: 'caption', color: 'text.secondary', display: 'block', sx: {
32
+ overflow: 'hidden',
33
+ textOverflow: 'ellipsis',
34
+ whiteSpace: 'nowrap',
35
+ } }, "Publisher"),
36
+ React.createElement(ConditionalTooltip, { title: scan.publisher, arrow: true },
37
+ React.createElement(Box, { sx: {
38
+ overflow: 'hidden',
39
+ textOverflow: 'ellipsis',
40
+ whiteSpace: 'nowrap',
41
+ } },
42
+ React.createElement(Link, { href: scan.publisherUrl || undefined, target: '_blank', rel: 'noopener noreferrer', variant: 'body2', sx: {
43
+ overflow: 'hidden',
44
+ textOverflow: 'ellipsis',
45
+ whiteSpace: 'nowrap',
46
+ display: 'block',
47
+ } }, scan.publisher)))),
48
+ React.createElement(Box, { sx: { gridRow: '2', gridColumn: '3', minWidth: 0 } },
49
+ React.createElement(Typography, { variant: 'caption', color: 'text.secondary', display: 'block', sx: {
50
+ overflow: 'hidden',
51
+ textOverflow: 'ellipsis',
52
+ whiteSpace: 'nowrap',
53
+ } }, "Version"),
54
+ React.createElement(ConditionalTooltip, { title: scan.version, arrow: true },
55
+ React.createElement(Typography, { variant: 'body2', sx: {
56
+ display: 'block',
57
+ overflow: 'hidden',
58
+ textOverflow: 'ellipsis',
59
+ whiteSpace: 'nowrap',
60
+ } }, scan.version))),
61
+ React.createElement(Box, { sx: { gridRow: '2', gridColumn: '4', minWidth: 0 } },
62
+ React.createElement(Typography, { variant: 'caption', color: 'text.secondary', display: 'block', sx: {
63
+ overflow: 'hidden',
64
+ textOverflow: 'ellipsis',
65
+ whiteSpace: 'nowrap',
66
+ } }, "Download"),
67
+ isRunning(scan.status) ? (React.createElement(Typography, { variant: 'body2', color: 'text.disabled' }, "N/A")) : hasDownload(scan) && scan.downloadUrl ? (React.createElement(Box, { sx: { display: 'flex', alignItems: 'center', gap: 0.5, minWidth: 0 } },
68
+ scan.status === 'QUARANTINED' && (React.createElement(Tooltip, { title: 'Potentially malicious', arrow: true, disableInteractive: true, PopperProps: {
69
+ disablePortal: true,
70
+ sx: { pointerEvents: 'none' },
71
+ } },
72
+ React.createElement(WarningAmberIcon, { sx: {
73
+ fontSize: 16,
74
+ color: theme.palette.quarantined.dark,
75
+ flexShrink: 0,
76
+ } }))),
77
+ React.createElement(ConditionalTooltip, { title: getFileName(scan.downloadUrl), arrow: true },
78
+ React.createElement(Link, { href: scan.downloadUrl, variant: 'body2', sx: {
79
+ overflow: 'hidden',
80
+ textOverflow: 'ellipsis',
81
+ whiteSpace: 'nowrap',
82
+ minWidth: 0,
83
+ display: 'block',
84
+ fontSize: '0.875rem',
85
+ } }, getFileName(scan.downloadUrl))))) : (React.createElement(Typography, { variant: 'body2', color: 'text.disabled' }, "N/A"))),
86
+ React.createElement(Box, { sx: { gridRow: '2', gridColumn: '5', display: 'flex', alignItems: 'center', justifyContent: 'flex-end', minWidth: 0 } }, showCheckbox && (React.createElement(IconButton, { onClick: () => onCheckboxChange === null || onCheckboxChange === void 0 ? void 0 : onCheckboxChange(scan.id, !checked), onMouseEnter: () => setIsCheckboxHovering(true), onMouseLeave: () => setIsCheckboxHovering(false), disableRipple: true, sx: {
87
+ padding: 0,
88
+ width: 36,
89
+ height: 36,
90
+ backgroundColor: 'transparent',
91
+ } },
92
+ React.createElement(Box, { className: 'checkbox-circle', sx: {
93
+ position: 'relative',
94
+ width: 36,
95
+ height: 36,
96
+ display: 'flex',
97
+ alignItems: 'center',
98
+ justifyContent: 'center',
99
+ } },
100
+ React.createElement(Box, { className: 'checkbox-circle-outline', sx: {
101
+ position: 'absolute',
102
+ width: 36,
103
+ height: 36,
104
+ borderRadius: '50%',
105
+ border: checked ? 'none' : `2px solid ${isCheckboxHovering ? theme.palette.selected.border : theme.palette.scanBackground.light}`,
106
+ backgroundColor: checked
107
+ ? 'secondary.main'
108
+ : isCheckboxHovering
109
+ ? theme.palette.selected.background
110
+ : 'transparent',
111
+ transition: 'border-color 0.2s, background-color 0.2s',
112
+ } }),
113
+ React.createElement(CheckIcon, { className: 'checkbox-icon', sx: {
114
+ fontSize: 24,
115
+ color: checked
116
+ ? 'white'
117
+ : isCheckboxHovering
118
+ ? theme.palette.selected.border
119
+ : theme.palette.scanBackground.light,
120
+ position: 'relative',
121
+ zIndex: 1,
122
+ transition: 'color 0.2s',
123
+ } }))))),
124
+ React.createElement(Box, { sx: { gridRow: '3', gridColumn: '1' } }),
125
+ React.createElement(Box, { sx: { gridRow: '3', gridColumn: '2', minWidth: 0 } },
126
+ React.createElement(Typography, { variant: 'caption', color: 'text.secondary', display: 'block', sx: {
127
+ overflow: 'hidden',
128
+ textOverflow: 'ellipsis',
129
+ whiteSpace: 'nowrap',
130
+ } }, "Scan Start"),
131
+ React.createElement(ConditionalTooltip, { title: formatDateTime(scan.dateScanStarted), arrow: true },
132
+ React.createElement(Typography, { variant: 'body2', sx: {
133
+ display: 'block',
134
+ fontSize: '0.8rem',
135
+ overflow: 'hidden',
136
+ textOverflow: 'ellipsis',
137
+ whiteSpace: 'nowrap',
138
+ } }, formatDateTime(scan.dateScanStarted)))),
139
+ React.createElement(Box, { sx: { gridRow: '3', gridColumn: '3', minWidth: 0 } },
140
+ React.createElement(Typography, { variant: 'caption', color: 'text.secondary', display: 'block', sx: {
141
+ overflow: 'hidden',
142
+ textOverflow: 'ellipsis',
143
+ whiteSpace: 'nowrap',
144
+ } }, "Scan End"),
145
+ isRunning(scan.status) ? (React.createElement(ConditionalTooltip, { title: `${scan.status}...`, arrow: true },
146
+ React.createElement(Typography, { variant: 'body2', sx: {
147
+ display: 'block',
148
+ background: theme.palette.gray.gradient,
149
+ backgroundSize: '200% 100%',
150
+ backgroundClip: 'text',
151
+ WebkitBackgroundClip: 'text',
152
+ color: 'transparent',
153
+ animation: 'shimmer 2s infinite',
154
+ '@keyframes shimmer': {
155
+ '0%': { backgroundPosition: '200% 0' },
156
+ '100%': { backgroundPosition: '-200% 0' },
157
+ },
158
+ overflow: 'hidden',
159
+ textOverflow: 'ellipsis',
160
+ whiteSpace: 'nowrap',
161
+ } },
162
+ scan.status,
163
+ "..."))) : scan.dateScanEnded ? (React.createElement(ConditionalTooltip, { title: formatDateTime(scan.dateScanEnded), arrow: true },
164
+ React.createElement(Typography, { variant: 'body2', sx: {
165
+ display: 'block',
166
+ fontSize: '0.8rem',
167
+ overflow: 'hidden',
168
+ textOverflow: 'ellipsis',
169
+ whiteSpace: 'nowrap',
170
+ } }, formatDateTime(scan.dateScanEnded)))) : (React.createElement(Typography, { variant: 'body2', color: 'text.disabled' }, "N/A"))),
171
+ React.createElement(Box, { sx: { gridRow: '3', gridColumn: '4', minWidth: 0 } },
172
+ React.createElement(Typography, { variant: 'caption', color: 'text.secondary', display: 'block', sx: {
173
+ overflow: 'hidden',
174
+ textOverflow: 'ellipsis',
175
+ whiteSpace: 'nowrap',
176
+ } }, "Scan Duration"),
177
+ isRunning(scan.status) ? (React.createElement(ConditionalTooltip, { title: liveDuration, arrow: true },
178
+ React.createElement(Typography, { variant: 'body2', sx: {
179
+ display: 'block',
180
+ background: theme.palette.gray.gradient,
181
+ backgroundSize: '200% 100%',
182
+ backgroundClip: 'text',
183
+ WebkitBackgroundClip: 'text',
184
+ color: 'transparent',
185
+ animation: 'shimmer 2s infinite',
186
+ '@keyframes shimmer': {
187
+ '0%': { backgroundPosition: '200% 0' },
188
+ '100%': { backgroundPosition: '-200% 0' },
189
+ },
190
+ overflow: 'hidden',
191
+ textOverflow: 'ellipsis',
192
+ whiteSpace: 'nowrap',
193
+ } }, liveDuration))) : (React.createElement(ConditionalTooltip, { title: formatDuration(scan.dateScanStarted, scan.dateScanEnded || undefined), arrow: true },
194
+ React.createElement(Typography, { variant: 'body2', sx: {
195
+ display: 'block',
196
+ overflow: 'hidden',
197
+ textOverflow: 'ellipsis',
198
+ whiteSpace: 'nowrap',
199
+ } }, formatDuration(scan.dateScanStarted, scan.dateScanEnded || undefined))))),
200
+ scan.status === 'QUARANTINED' && scan.adminDecision && (React.createElement(Box, { sx: {
201
+ gridRow: '3',
202
+ gridColumn: '5',
203
+ display: 'flex',
204
+ justifyContent: 'flex-end',
205
+ alignSelf: 'end',
206
+ minWidth: 0,
207
+ } },
208
+ React.createElement(Tooltip, { title: `Decided by ${scan.adminDecision.decidedBy} on ${formatDateTime(scan.adminDecision.dateDecided)}`, arrow: true, disableInteractive: true, PopperProps: {
209
+ disablePortal: true,
210
+ sx: { pointerEvents: 'none' },
211
+ } },
212
+ React.createElement(Typography, { variant: 'h6', sx: {
213
+ fontWeight: 700,
214
+ color: scan.adminDecision.decision.toLowerCase() === 'allowed' ? theme.palette.allowed : theme.palette.blocked,
215
+ whiteSpace: 'nowrap',
216
+ cursor: 'help',
217
+ } }, scan.adminDecision.decision.toLowerCase() === 'allowed' ? 'ALLOWED' : 'BLOCKED')))),
218
+ scan.status === 'QUARANTINED' && !scan.adminDecision && (React.createElement(Box, { sx: {
219
+ gridRow: '3',
220
+ gridColumn: '5',
221
+ display: 'flex',
222
+ justifyContent: 'flex-end',
223
+ alignSelf: 'end',
224
+ minWidth: 0,
225
+ } },
226
+ React.createElement(Typography, { variant: 'h6', sx: {
227
+ fontWeight: 700,
228
+ color: theme.palette.review,
229
+ whiteSpace: 'nowrap',
230
+ } }, "NEEDS REVIEW")))));
231
+ };
232
+ //# sourceMappingURL=scan-card-content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-card-content.js","sourceRoot":"","sources":["../../../../src/components/scan-admin/scan-card/scan-card-content.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 Contributors to the Eclipse Foundation
3
+ *
4
+ * See the NOTICE file(s) distributed with this work for additional
5
+ * information regarding copyright ownership.
6
+ *
7
+ * This program and the accompanying materials are made available under the
8
+ * terms of the Eclipse Public License 2.0 which is available at
9
+ * https://www.eclipse.org/legal/epl-2.0
10
+ *
11
+ * SPDX-License-Identifier: EPL-2.0
12
+ ********************************************************************************/
13
+ import React from 'react';
14
+ import { DetailBadge } from './utils';
15
+ interface ScanCardExpandStripBadgesProps {
16
+ badges: DetailBadge[];
17
+ containerWidth: number;
18
+ maxWidthPercent?: number;
19
+ }
20
+ /**
21
+ * Renders badges with overflow handling - shows as many badges as fit
22
+ * within the available width, plus a "+ X more" indicator for hidden badges.
23
+ */
24
+ export declare const ScanCardExpandStripBadges: React.FC<ScanCardExpandStripBadgesProps>;
25
+ export {};
26
+ //# sourceMappingURL=scan-card-expand-strip-badges.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-card-expand-strip-badges.d.ts","sourceRoot":"","sources":["../../../../src/components/scan-admin/scan-card/scan-card-expand-strip-badges.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;kFAWkF;AAElF,OAAO,KAAuD,MAAM,OAAO,CAAC;AAG5E,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,UAAU,8BAA8B;IACpC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,KAAK,CAAC,EAAE,CAAC,8BAA8B,CA6J9E,CAAC"}
@@ -0,0 +1,121 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 Contributors to the Eclipse Foundation
3
+ *
4
+ * See the NOTICE file(s) distributed with this work for additional
5
+ * information regarding copyright ownership.
6
+ *
7
+ * This program and the accompanying materials are made available under the
8
+ * terms of the Eclipse Public License 2.0 which is available at
9
+ * https://www.eclipse.org/legal/epl-2.0
10
+ *
11
+ * SPDX-License-Identifier: EPL-2.0
12
+ ********************************************************************************/
13
+ import React, { useRef, useEffect, useState, useLayoutEffect } from 'react';
14
+ import { Box, Chip, Typography } from '@mui/material';
15
+ import { useTheme, alpha } from '@mui/material/styles';
16
+ /**
17
+ * Renders badges with overflow handling - shows as many badges as fit
18
+ * within the available width, plus a "+ X more" indicator for hidden badges.
19
+ */
20
+ export const ScanCardExpandStripBadges = ({ badges, containerWidth, maxWidthPercent = 0.45, }) => {
21
+ const theme = useTheme();
22
+ const measureRef = useRef(null);
23
+ const [visibleCount, setVisibleCount] = useState(null);
24
+ const calculateVisibleBadges = () => {
25
+ if (!measureRef.current || badges.length === 0 || containerWidth <= 0) {
26
+ return;
27
+ }
28
+ const availableWidth = containerWidth * maxWidthPercent;
29
+ const chips = measureRef.current.querySelectorAll('.measure-chip');
30
+ if (chips.length === 0) {
31
+ return;
32
+ }
33
+ // 65px width for "+ X more" text
34
+ const moreIndicatorWidth = 65;
35
+ const gap = 4; // 0.5 spacing unit = 4px
36
+ let totalWidth = 0;
37
+ let count = 0;
38
+ for (let index = 0; index < chips.length; index++) {
39
+ const chip = chips[index];
40
+ const chipWidth = chip.offsetWidth;
41
+ const widthWithGap = chipWidth + (index > 0 ? gap : 0);
42
+ // Check if this chip fits
43
+ // If not all badges fit, we need room for the "+ X more" indicator
44
+ const remainingBadges = badges.length - (index + 1);
45
+ const needsMoreIndicator = remainingBadges > 0;
46
+ const reservedWidth = needsMoreIndicator ? moreIndicatorWidth + gap : 0;
47
+ if (totalWidth + widthWithGap + reservedWidth <= availableWidth) {
48
+ totalWidth += widthWithGap;
49
+ count++;
50
+ }
51
+ else {
52
+ break;
53
+ }
54
+ }
55
+ setVisibleCount(count);
56
+ };
57
+ // Use layoutEffect to measure before paint (to avoid flicker)
58
+ useLayoutEffect(() => {
59
+ calculateVisibleBadges();
60
+ }, [badges, containerWidth]);
61
+ // Recalculate when container width changes
62
+ useEffect(() => {
63
+ calculateVisibleBadges();
64
+ }, [containerWidth]);
65
+ // Use all badges until calculation completes
66
+ const effectiveVisibleCount = visibleCount !== null && visibleCount !== void 0 ? visibleCount : badges.length;
67
+ const visibleBadges = badges.slice(0, effectiveVisibleCount);
68
+ const hiddenCount = badges.length - effectiveVisibleCount;
69
+ const chipStyles = (badge) => (Object.assign({ height: '20px', fontSize: '0.7rem', flexShrink: 0 }, (badge.type === 'error' ? {
70
+ // Error badges: solid grey for required, striped for optional
71
+ // Must set backgroundColor to 'transparent' when using striped background to override Chip defaults
72
+ backgroundColor: badge.isEnforced ? theme.palette.errorStatus.dark : 'transparent',
73
+ color: theme.palette.errorStatus.light,
74
+ background: !badge.isEnforced ? `${theme.palette.unenforced.stripe}, ${theme.palette.errorStatus.dark}` : undefined,
75
+ } : badge.type === 'threat' ? {
76
+ backgroundColor: badge.isEnforced ? theme.palette.quarantined.dark : 'transparent',
77
+ color: theme.palette.quarantined.light,
78
+ background: !badge.isEnforced ? `${theme.palette.unenforced.stripe}, ${theme.palette.quarantined.dark}` : undefined,
79
+ } : {
80
+ backgroundColor: badge.isEnforced ? theme.palette.rejected.dark : 'transparent',
81
+ color: theme.palette.rejected.light,
82
+ background: !badge.isEnforced ? `${theme.palette.unenforced.stripe}, ${theme.palette.rejected.dark}` : undefined,
83
+ })));
84
+ if (badges.length === 0) {
85
+ return null;
86
+ }
87
+ return (React.createElement(React.Fragment, null,
88
+ React.createElement(Box, { ref: measureRef, sx: {
89
+ position: 'absolute',
90
+ visibility: 'hidden',
91
+ pointerEvents: 'none',
92
+ display: 'flex',
93
+ alignItems: 'center',
94
+ gap: 0.5,
95
+ flexWrap: 'nowrap',
96
+ left: 0,
97
+ top: 0,
98
+ }, "aria-hidden": 'true' }, badges.map((badge, index) => (React.createElement(Chip, { key: `measure-${badge.label}-${index}`, className: 'measure-chip', label: badge.label, size: 'small', sx: chipStyles(badge) })))),
99
+ React.createElement(Box, { sx: {
100
+ display: 'flex',
101
+ alignItems: 'center',
102
+ gap: 0.5,
103
+ flexWrap: 'nowrap',
104
+ overflow: 'hidden',
105
+ maxWidth: `${maxWidthPercent * 100}%`,
106
+ minWidth: 0,
107
+ } },
108
+ visibleBadges.map((badge, index) => (React.createElement(Chip, { key: `${badge.label}-${index}`, label: badge.label, size: 'small', sx: chipStyles(badge) }))),
109
+ hiddenCount > 0 && (React.createElement(Typography, { variant: 'caption', sx: {
110
+ flexShrink: 0,
111
+ color: alpha(theme.palette.text.secondary, 0.8),
112
+ fontSize: '0.7rem',
113
+ fontWeight: 500,
114
+ whiteSpace: 'nowrap',
115
+ ml: 0.5,
116
+ } },
117
+ "+ ",
118
+ hiddenCount,
119
+ " more")))));
120
+ };
121
+ //# sourceMappingURL=scan-card-expand-strip-badges.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-card-expand-strip-badges.js","sourceRoot":"","sources":["../../../../src/components/scan-admin/scan-card/scan-card-expand-strip-badges.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 Contributors to the Eclipse Foundation
3
+ *
4
+ * See the NOTICE file(s) distributed with this work for additional
5
+ * information regarding copyright ownership.
6
+ *
7
+ * This program and the accompanying materials are made available under the
8
+ * terms of the Eclipse Public License 2.0 which is available at
9
+ * https://www.eclipse.org/legal/epl-2.0
10
+ *
11
+ * SPDX-License-Identifier: EPL-2.0
12
+ ********************************************************************************/
13
+ import React from 'react';
14
+ import { DetailBadge } from './utils';
15
+ interface ScanCardExpandStripProps {
16
+ expanded: boolean;
17
+ onExpandClick: () => void;
18
+ badges: DetailBadge[];
19
+ collapseComplete: boolean;
20
+ }
21
+ /**
22
+ * Expandable strip at the bottom of the card
23
+ * Shows validationFailure/threat badges (click to expand/show detail cards)
24
+ */
25
+ export declare const ScanCardExpandStrip: React.FC<ScanCardExpandStripProps>;
26
+ export {};
27
+ //# sourceMappingURL=scan-card-expand-strip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-card-expand-strip.d.ts","sourceRoot":"","sources":["../../../../src/components/scan-admin/scan-card/scan-card-expand-strip.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;kFAWkF;AAElF,OAAO,KAAsC,MAAM,OAAO,CAAC;AAI3D,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGtC,UAAU,wBAAwB;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,gBAAgB,EAAE,OAAO,CAAC;CAC7B;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAwElE,CAAC"}
@@ -0,0 +1,66 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 Contributors to the Eclipse Foundation
3
+ *
4
+ * See the NOTICE file(s) distributed with this work for additional
5
+ * information regarding copyright ownership.
6
+ *
7
+ * This program and the accompanying materials are made available under the
8
+ * terms of the Eclipse Public License 2.0 which is available at
9
+ * https://www.eclipse.org/legal/epl-2.0
10
+ *
11
+ * SPDX-License-Identifier: EPL-2.0
12
+ ********************************************************************************/
13
+ import React, { useRef, useEffect, useState } from 'react';
14
+ import { Box } from '@mui/material';
15
+ import { ExpandMore as ExpandMoreIcon } from '@mui/icons-material';
16
+ import { useTheme } from '@mui/material/styles';
17
+ import { ScanCardExpandStripBadges } from './scan-card-expand-strip-badges';
18
+ /**
19
+ * Expandable strip at the bottom of the card
20
+ * Shows validationFailure/threat badges (click to expand/show detail cards)
21
+ */
22
+ export const ScanCardExpandStrip = ({ expanded, onExpandClick, badges, collapseComplete, }) => {
23
+ const theme = useTheme();
24
+ const [isHovering, setIsHovering] = useState(false);
25
+ const wrapperRef = useRef(null);
26
+ const [containerWidth, setContainerWidth] = useState(0);
27
+ useEffect(() => {
28
+ const updateWidth = () => {
29
+ if (wrapperRef.current) {
30
+ setContainerWidth(wrapperRef.current.offsetWidth);
31
+ }
32
+ };
33
+ updateWidth();
34
+ const resizeObserver = new ResizeObserver(() => {
35
+ updateWidth();
36
+ });
37
+ if (wrapperRef.current) {
38
+ resizeObserver.observe(wrapperRef.current);
39
+ }
40
+ return () => resizeObserver.disconnect();
41
+ }, []);
42
+ return (React.createElement(Box, { ref: wrapperRef, onClick: onExpandClick, onMouseEnter: () => setIsHovering(true), onMouseLeave: () => setIsHovering(false), sx: {
43
+ pb: 0,
44
+ pt: 0.5,
45
+ px: 5,
46
+ display: 'flex',
47
+ alignItems: 'center',
48
+ justifyContent: 'space-between',
49
+ cursor: 'pointer',
50
+ borderBottomRightRadius: expanded ? 0 : 8,
51
+ minHeight: 40,
52
+ backgroundColor: isHovering ? theme.palette.selected.hover : 'transparent',
53
+ transition: 'background-color 0.2s',
54
+ position: 'relative',
55
+ } },
56
+ React.createElement(Box, { sx: { flex: 1 } }),
57
+ React.createElement(Box, { sx: { display: 'flex', alignItems: 'center', justifyContent: 'center', position: 'absolute', left: '50%', transform: 'translateX(-50%)' } },
58
+ React.createElement(ExpandMoreIcon, { sx: {
59
+ fontSize: 36,
60
+ color: 'secondary.main',
61
+ transform: expanded ? 'rotate(180deg)' : 'rotate(0deg)',
62
+ transition: 'transform 0.3s',
63
+ } })),
64
+ !expanded && collapseComplete && (React.createElement(ScanCardExpandStripBadges, { badges: badges, containerWidth: containerWidth }))));
65
+ };
66
+ //# sourceMappingURL=scan-card-expand-strip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-card-expand-strip.js","sourceRoot":"","sources":["../../../../src/components/scan-admin/scan-card/scan-card-expand-strip.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /********************************************************************************
2
+ * Copyright (c) 2026 Contributors to the Eclipse Foundation
3
+ *
4
+ * See the NOTICE file(s) distributed with this work for additional
5
+ * information regarding copyright ownership.
6
+ *
7
+ * This program and the accompanying materials are made available under the
8
+ * terms of the Eclipse Public License 2.0 which is available at
9
+ * https://www.eclipse.org/legal/epl-2.0
10
+ *
11
+ * SPDX-License-Identifier: EPL-2.0
12
+ ********************************************************************************/
13
+ import React from 'react';
14
+ import { ScanResult } from '../../../context/scan-admin';
15
+ interface ScanCardExpandedContentProps {
16
+ scan: ScanResult;
17
+ expanded: boolean;
18
+ onCollapseComplete?: () => void;
19
+ }
20
+ /**
21
+ * The expanded content section showing threats, validation failures, and check results.
22
+ * Each item's enforcedFlag controls its individual striping effect.
23
+ */
24
+ export declare const ScanCardExpandedContent: React.FC<ScanCardExpandedContentProps>;
25
+ export {};
26
+ //# sourceMappingURL=scan-card-expanded-content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-card-expanded-content.d.ts","sourceRoot":"","sources":["../../../../src/components/scan-admin/scan-card/scan-card-expanded-content.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;kFAWkF;AAElF,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,UAAU,EAA0C,MAAM,6BAA6B,CAAC;AAIjG,UAAU,4BAA4B;IAClC,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;CACnC;AA4JD;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,KAAK,CAAC,EAAE,CAAC,4BAA4B,CA6E1E,CAAC"}