openvsx-webui-test 0.17.2 → 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
@@ -9,7 +9,17 @@
9
9
  ********************************************************************************/
10
10
 
11
11
  import React, { Fragment, FunctionComponent, ReactNode, useContext, useState, useEffect, useRef } from 'react';
12
- import { Box, Typography, Divider, Link } from '@mui/material';
12
+ import {
13
+ Box,
14
+ Typography,
15
+ Divider,
16
+ Link,
17
+ Dialog,
18
+ DialogTitle,
19
+ DialogContent,
20
+ DialogContentText,
21
+ DialogActions, Button
22
+ } from '@mui/material';
13
23
  import { MainContext } from '../../context';
14
24
  import { toLocalTime } from '../../utils';
15
25
  import { ExtensionReview, Extension, ExtensionReviewList, isEqualUser, isError, UserData } from '../../extension-registry-types';
@@ -17,16 +27,30 @@ import { TextDivider } from '../../components/text-divider';
17
27
  import { DelayedLoadIndicator } from '../../components/delayed-load-indicator';
18
28
  import { ButtonWithProgress } from '../../components/button-with-progress';
19
29
  import { Timestamp } from '../../components/timestamp';
20
- import { ExportRatingStars } from './extension-rating-stars';
30
+ import { ExtensionRatingStars } from './extension-rating-stars';
21
31
  import { ExtensionReviewDialog } from './extension-review-dialog';
22
32
 
23
33
  export const ExtensionDetailReviews: FunctionComponent<ExtensionDetailReviewsProps> = props => {
24
34
  const [reviewList, setReviewList] = useState<ExtensionReviewList>();
25
35
  const [loading, setLoading] = useState<boolean>(true);
26
36
  const [revoked, setRevoked] = useState<boolean>(false);
37
+ const [removeDialogOpen, setRemoveDialogOpen] = useState(false);
38
+ const [removeReviewSet, setRemoveReviewSet] = useState(new Set<string>());
27
39
  const context = useContext(MainContext);
28
40
  const abortController = useRef<AbortController>(new AbortController());
29
41
 
42
+ const addRemoveReviewRequest = (loginName: string) => {
43
+ const newSet = new Set<string>(removeReviewSet);
44
+ newSet.add(loginName);
45
+ setRemoveReviewSet(newSet);
46
+ };
47
+
48
+ const deleteRemoveReviewRequest = (loginName: string) => {
49
+ const newSet = new Set<string>(removeReviewSet);
50
+ newSet.delete(loginName);
51
+ setRemoveReviewSet(newSet);
52
+ };
53
+
30
54
  useEffect(() => {
31
55
  updateReviews();
32
56
  return () => abortController.current.abort();
@@ -87,6 +111,58 @@ export const ExtensionDetailReviews: FunctionComponent<ExtensionDetailReviewsPro
87
111
  }
88
112
  };
89
113
 
114
+ const handleAdminRemoveReviewButton = async (r: ExtensionReview) => {
115
+ addRemoveReviewRequest(r.user.loginName);
116
+ try {
117
+ const result = await context.service.deleteUserReview(abortController.current, props.extension, r.user);
118
+ if (isError(result)) {
119
+ throw result;
120
+ }
121
+ saveCompleted();
122
+ } catch (err) {
123
+ context.handleError(err);
124
+ } finally {
125
+ deleteRemoveReviewRequest(r.user.loginName);
126
+ }
127
+ };
128
+
129
+ const renderAdminRemoveButton = (r: ExtensionReview): ReactNode => {
130
+ return <>
131
+ <Button
132
+ variant='contained'
133
+ color='error'
134
+ onClick={() => setRemoveDialogOpen(true)} >
135
+ Remove review
136
+ </Button>
137
+ <Dialog
138
+ open={removeDialogOpen}
139
+ onClose={() => setRemoveDialogOpen(false)}>
140
+ <DialogTitle>Remove Review</DialogTitle>
141
+ <DialogContent>
142
+ <DialogContentText component='div'>
143
+ <Typography>Confirm removal of review comment from <code>{r.user.loginName}</code>?</Typography>
144
+ </DialogContentText>
145
+ </DialogContent>
146
+ <DialogActions>
147
+ <Button
148
+ variant='contained'
149
+ color='primary'
150
+ onClick={() => setRemoveDialogOpen(false)} >
151
+ Cancel
152
+ </Button>
153
+ <ButtonWithProgress
154
+ autoFocus
155
+ color='error'
156
+ sx={{ ml: 1 }}
157
+ working={removeReviewSet.has(r.user.loginName)}
158
+ onClick={() => handleAdminRemoveReviewButton(r)} >
159
+ Remove review
160
+ </ButtonWithProgress>
161
+ </DialogActions>
162
+ </Dialog>
163
+ </>;
164
+ };
165
+
90
166
  const renderReviewList = (list?: ExtensionReviewList): ReactNode => {
91
167
  if (!list) {
92
168
  return '';
@@ -101,37 +177,47 @@ export const ExtensionDetailReviews: FunctionComponent<ExtensionDetailReviewsPro
101
177
 
102
178
  const renderReview = (r: ExtensionReview): ReactNode => {
103
179
  return <Fragment key={r.user.loginName + r.timestamp}>
104
- <Box my={2}>
105
- <Box display='flex'>
106
- {
107
- r.timestamp ?
108
- <>
109
- <Typography variant='body2'><Timestamp value={r.timestamp}/></Typography>
110
- <TextDivider />
111
- </>
112
- : null
113
- }
114
- <Typography variant='body2'>
180
+ <Box display='flex' justifyContent='space-between'>
181
+ <Box my={2}>
182
+ <Box display='flex'>
115
183
  {
116
- r.user.homepage ?
117
- <Link
118
- href={r.user.homepage}
119
- color='text.primary'
120
- underline='hover'
121
- >
122
- {r.user.loginName}
123
- </Link>
124
- :
125
- r.user.loginName
184
+ r.timestamp ?
185
+ <>
186
+ <Typography variant='body2'><Timestamp value={r.timestamp}/></Typography>
187
+ <TextDivider />
188
+ </>
189
+ : null
126
190
  }
127
- </Typography>
128
- </Box>
129
- <Box display='flex' alignItems='center'>
130
- <ExportRatingStars number={r.rating} />
131
- </Box>
132
- <Box overflow='auto'>
133
- <Typography variant='body1' sx={{ overflow: 'hidden', textOverflow: 'ellipsis' }}>{r.comment}</Typography>
191
+ <Typography variant='body2'>
192
+ {
193
+ r.user.homepage ?
194
+ <Link
195
+ href={r.user.homepage}
196
+ color='text.primary'
197
+ underline='hover'
198
+ >
199
+ {r.user.loginName}
200
+ </Link>
201
+ :
202
+ r.user.loginName
203
+ }
204
+ </Typography>
205
+ </Box>
206
+ <Box display='flex' alignItems='center'>
207
+ <ExtensionRatingStars number={r.rating} />
208
+ </Box>
209
+ <Box overflow='auto'>
210
+ <Typography variant='body1' sx={{ overflow: 'hidden', textOverflow: 'ellipsis' }}>{r.comment}</Typography>
211
+ </Box>
134
212
  </Box>
213
+ {
214
+ context.user?.role === 'admin' ?
215
+ <Box mb={2} display='flex' alignItems='end'>
216
+ {renderAdminRemoveButton(r)}
217
+ </Box>
218
+ :
219
+ null
220
+ }
135
221
  </Box>
136
222
  <Divider />
137
223
  </Fragment>;
@@ -24,7 +24,7 @@ import { DelayedLoadIndicator } from '../../components/delayed-load-indicator';
24
24
  import { HoverPopover } from '../../components/hover-popover';
25
25
  import { Extension, UserData, isError } from '../../extension-registry-types';
26
26
  import { TextDivider } from '../../components/text-divider';
27
- import { ExportRatingStars } from './extension-rating-stars';
27
+ import { ExtensionRatingStars } from './extension-rating-stars';
28
28
  import { NamespaceDetailRoutes } from '../namespace-detail/namespace-detail';
29
29
  import { ExtensionDetailOverview } from './extension-detail-overview';
30
30
  import { ExtensionDetailChanges } from './extension-detail-changes';
@@ -399,7 +399,7 @@ export const ExtensionDetail: FunctionComponent = () => {
399
399
  `Average rating: ${getRoundedRating(extension.averageRating)} out of 5 (${extension.reviewCount} reviews)`
400
400
  : 'Not rated yet'
401
401
  }>
402
- <ExportRatingStars number={extension.averageRating ?? 0} fontSize='small' />
402
+ <ExtensionRatingStars number={extension.averageRating ?? 0} fontSize='small' />
403
403
  ({reviewCountFormatted})
404
404
  </StyledLink>
405
405
  </Box>
@@ -13,12 +13,12 @@ import StarIcon from '@mui/icons-material/Star';
13
13
  import StarHalfIcon from '@mui/icons-material/StarHalf';
14
14
  import { Box } from '@mui/material';
15
15
 
16
- export interface ExportRatingStarsProps {
16
+ export interface ExtensionRatingStarsProps {
17
17
  number: number;
18
18
  fontSize?: 'inherit' | 'small' | 'medium' | 'large';
19
19
  }
20
20
 
21
- export const ExportRatingStars: FunctionComponent<ExportRatingStarsProps> = props => {
21
+ export const ExtensionRatingStars: FunctionComponent<ExtensionRatingStarsProps> = props => {
22
22
  const getStar = (i: number): ReactNode => {
23
23
  const starsNumber = props.number;
24
24
  const fontSize = props.fontSize ?? 'medium';
@@ -15,7 +15,7 @@ import SaveAltIcon from '@mui/icons-material/SaveAlt';
15
15
  import { MainContext } from '../../context';
16
16
  import { ExtensionDetailRoutes } from '../extension-detail/extension-detail';
17
17
  import { SearchEntry } from '../../extension-registry-types';
18
- import { ExportRatingStars } from '../extension-detail/extension-rating-stars';
18
+ import { ExtensionRatingStars } from '../extension-detail/extension-rating-stars';
19
19
  import { createRoute } from '../../utils';
20
20
 
21
21
  export const ExtensionListItem: FunctionComponent<ExtensionListItemProps> = props => {
@@ -92,7 +92,7 @@ export const ExtensionListItem: FunctionComponent<ExtensionListItemProps> = prop
92
92
  </Typography>
93
93
  </Box>
94
94
  <Box display='flex' justifyContent='center'>
95
- <ExportRatingStars number={extension.averageRating ?? 0} fontSize='small' />
95
+ <ExtensionRatingStars number={extension.averageRating ?? 0} fontSize='small' />
96
96
  &nbsp;
97
97
  {downloadCountFormatted != "0" && <><SaveAltIcon /> {downloadCountFormatted}</>}
98
98
  </Box>
@@ -63,19 +63,44 @@ export const UserNamespaceExtensionListItem: FunctionComponent<UserNamespaceExte
63
63
  service.getExtensionIcon(abortController.current, extension).then(setIcon);
64
64
  }, [extension]);
65
65
 
66
- let status: ReactNode = null;
67
- if (inactive) {
68
- status = <Box mt={0.25}>
69
- Deactivated
70
- </Box>;
71
- } else if (extension.timestamp) {
72
- status = <Paragraph mt={0.25}>
73
- <span>Published:</span>
74
- <Timestamp
75
- value={extension.timestamp}
76
- sx={noOverflow} />
77
- </Paragraph>;
78
- }
66
+ const renderStatus = (): ReactNode => {
67
+ if (extension.reviewStatus === 'under_review') {
68
+ return <Box mt={0.25}>
69
+ <Typography variant='body2' sx={{ fontWeight: 600 }}>Under review</Typography>
70
+ <Typography variant='body2' sx={{ color: 'text.secondary' }}>
71
+ {extension.reviewMessage ?? 'Your extension is being reviewed. Please contact support for details.'}
72
+ </Typography>
73
+ </Box>;
74
+ }
75
+
76
+ if (extension.reviewStatus === 'rejected') {
77
+ return <Box mt={0.25}>
78
+ <Typography variant='body2' sx={{ fontWeight: 600, color: 'error.main' }}>Rejected</Typography>
79
+ <Typography variant='body2' sx={{ color: 'text.secondary' }}>
80
+ {extension.reviewMessage ?? 'Your extension could not be published.'}
81
+ </Typography>
82
+ </Box>;
83
+ }
84
+
85
+ if (inactive) {
86
+ return <Box mt={0.25}>
87
+ Deactivated
88
+ </Box>;
89
+ }
90
+
91
+ if (extension.timestamp) {
92
+ return <Paragraph mt={0.25}>
93
+ <span>Published:</span>
94
+ <Timestamp
95
+ value={extension.timestamp}
96
+ sx={noOverflow} />
97
+ </Paragraph>;
98
+ }
99
+
100
+ return null;
101
+ };
102
+
103
+ const status = renderStatus();
79
104
 
80
105
  const gotoDeleteRoute = (e: MouseEvent) => {
81
106
  e.preventDefault();
@@ -39,6 +39,10 @@ export const UserPublisherAgreement: FunctionComponent<UserPublisherAgreementPro
39
39
  }
40
40
  }, [dialogOpen]);
41
41
 
42
+ const closePublisherAgreement = () => {
43
+ setDialogOpen(false);
44
+ };
45
+
42
46
  const signPublisherAgreement = async (): Promise<void> => {
43
47
  try {
44
48
  setWorking(true);
@@ -89,19 +93,29 @@ export const UserPublisherAgreement: FunctionComponent<UserPublisherAgreementPro
89
93
  return null;
90
94
  }
91
95
 
96
+ const publisherAgreementName = pageSettings?.publisherAgreement?.name ?? '';
97
+ const publisherAgreementSigned = user.publisherAgreement.status == 'signed';
98
+
92
99
  let content: ReactNode;
93
- if (user.publisherAgreement.status === 'signed') {
94
- content = <Typography variant='body1'>
100
+ if (publisherAgreementSigned) {
101
+ content = <Box display='flex' justifyContent='space-between' alignItems='start'>
102
+ <Typography variant='body1'>
95
103
  {
96
104
  user.publisherAgreement.timestamp
97
- ? <>You signed the Eclipse Foundation Open VSX Publisher Agreement <Timestamp value={user.publisherAgreement.timestamp} />.</>
98
- : 'You signed the Eclipse Foundation Open VSX Publisher Agreement.'
105
+ ? <>You signed the {publisherAgreementName} Publisher Agreement <Timestamp value={user.publisherAgreement.timestamp} />.</>
106
+ : <>You signed the {publisherAgreementName} Publisher Agreement.</>
99
107
  }
100
- </Typography>;
108
+ </Typography>
109
+ <Box display='flex' justifyContent='flex-end'>
110
+ <Button onClick={openPublisherAgreement} variant='outlined' color='secondary'>
111
+ Show Publisher Agreement
112
+ </Button>
113
+ </Box>
114
+ </Box>;
101
115
  } else if (user.additionalLogins?.find(login => login.provider === 'eclipse')) {
102
116
  content = <>
103
117
  <Typography variant='body1'>
104
- You need to sign the Eclipse Foundation Open VSX Publisher Agreement before you can publish
118
+ You need to sign the {publisherAgreementName} Publisher Agreement before you can publish
105
119
  any extension to this registry.
106
120
  </Typography>
107
121
  <Box mt={2} display='flex' justifyContent='flex-end'>
@@ -113,7 +127,7 @@ export const UserPublisherAgreement: FunctionComponent<UserPublisherAgreementPro
113
127
  } else {
114
128
  content = <>
115
129
  <Typography variant='body1'>
116
- You need to sign the Eclipse Foundation Open VSX Publisher Agreement before you can publish
130
+ You need to sign the {publisherAgreementName} Publisher Agreement before you can publish
117
131
  any extension to this registry. To start the signing process, please log in with
118
132
  an Eclipse Foundation account.
119
133
  </Typography>
@@ -132,7 +146,7 @@ export const UserPublisherAgreement: FunctionComponent<UserPublisherAgreementPro
132
146
  <Dialog
133
147
  open={dialogOpen}
134
148
  onClose={onClose}
135
- maxWidth='md'
149
+ maxWidth='xl'
136
150
  sx={{ paperScrollPaper: { height: '75%', width: '100%' } }}>
137
151
  <DialogContent>
138
152
  {
@@ -143,9 +157,14 @@ export const UserPublisherAgreement: FunctionComponent<UserPublisherAgreementPro
143
157
  sanitize={false}
144
158
  linkify={false} />
145
159
  <Box display='flex' justifyContent='flex-end' >
146
- <ButtonWithProgress working={working} onClick={signPublisherAgreement}>
147
- Agree
148
- </ButtonWithProgress>
160
+ <Button onClick={closePublisherAgreement}>
161
+ Close
162
+ </Button>
163
+ { !publisherAgreementSigned &&
164
+ <ButtonWithProgress working={working} onClick={signPublisherAgreement}>
165
+ Agree
166
+ </ButtonWithProgress>
167
+ }
149
168
  </Box>
150
169
  </DialogContentText>
151
170
  :
@@ -8,12 +8,13 @@
8
8
  * SPDX-License-Identifier: EPL-2.0
9
9
  ********************************************************************************/
10
10
 
11
- import React, { FunctionComponent, ReactNode } from 'react';
11
+ import React, { FunctionComponent, ReactNode, useContext } from 'react';
12
12
  import { Theme, Grid, Typography, Avatar } from '@mui/material';
13
13
  import { toLocalTime } from '../../utils';
14
14
  import { UserData } from '../../extension-registry-types';
15
15
  import { UserPublisherAgreement } from './user-publisher-agreement';
16
16
  import styled from '@mui/material/styles/styled';
17
+ import { MainContext } from "../../context";
17
18
 
18
19
  const ProfileGrid = styled(Grid)(({ theme }: {theme: Theme}) => ({
19
20
  [theme.breakpoints.up('lg')]: {
@@ -37,12 +38,13 @@ const ProfileGrid = styled(Grid)(({ theme }: {theme: Theme}) => ({
37
38
  marginBottom: theme.spacing(2)
38
39
  }));
39
40
 
40
- export const UserSettingsProfile: FunctionComponent<UserSettingsProfileProps> = props => {
41
+ export const UserSettingsProfile: FunctionComponent<UserSettingsProfileProps> = ({ user, isAdmin }) => {
42
+
43
+ const { pageSettings } = useContext(MainContext);
41
44
 
42
- const user = props.user;
43
45
  let publisherAgreementPanel: ReactNode = null;
44
46
  if (user.publisherAgreement) {
45
- if (props.isAdmin) {
47
+ if (isAdmin) {
46
48
  let statusText = 'has not signed';
47
49
  if (user.publisherAgreement.status === 'signed') {
48
50
  statusText = 'has signed';
@@ -50,8 +52,10 @@ export const UserSettingsProfile: FunctionComponent<UserSettingsProfileProps> =
50
52
  statusText = 'has signed an outdated version of';
51
53
  }
52
54
 
55
+ const publisherAgreementName = pageSettings?.publisherAgreement?.name ?? '';
56
+
53
57
  publisherAgreementPanel = <Typography variant='body1' title={toLocalTime(user.publisherAgreement.timestamp)}>
54
- {user.loginName} {statusText} the Eclipse publisher agreement.
58
+ {user.loginName} {statusText} the {publisherAgreementName} Publisher Agreement.
55
59
  </Typography>;
56
60
  } else {
57
61
  publisherAgreementPanel = <Grid container>
@@ -89,4 +93,4 @@ export const UserSettingsProfile: FunctionComponent<UserSettingsProfileProps> =
89
93
  export interface UserSettingsProfileProps {
90
94
  user: UserData;
91
95
  isAdmin?: boolean;
92
- }
96
+ }
@@ -9,7 +9,9 @@
9
9
  ********************************************************************************/
10
10
 
11
11
  import React, { FunctionComponent, ReactNode, useContext, useEffect, useState, useRef } from 'react';
12
- import { Theme, Typography, Box, Paper, Button, Link, Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions } from '@mui/material';
12
+ import {
13
+ Theme, Typography, Box, Paper, Button, Link, Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions
14
+ } from '@mui/material';
13
15
  import { Link as RouteLink } from 'react-router-dom';
14
16
  import { DelayedLoadIndicator } from '../../components/delayed-load-indicator';
15
17
  import { Timestamp } from '../../components/timestamp';
@@ -43,7 +45,7 @@ const DeleteButton = styled(Button)(({ theme }: { theme: Theme }) => ({
43
45
 
44
46
  export const UserSettingsTokens: FunctionComponent = () => {
45
47
 
46
- const { service, user, handleError } = useContext(MainContext);
48
+ const { service, user, handleError, pageSettings } = useContext(MainContext);
47
49
 
48
50
  const [tokens, setTokens] = useState(new Array<PersonalAccessToken>());
49
51
  const [loading, setLoading] = useState(true);
@@ -120,13 +122,20 @@ export const UserSettingsTokens: FunctionComponent = () => {
120
122
 
121
123
  const agreement = user?.publisherAgreement;
122
124
  if (agreement && (agreement.status === 'none' || agreement.status === 'outdated')) {
125
+ const publisherAgreementName = pageSettings?.publisherAgreement?.name ?? '';
126
+ const publisherAgreementContact = pageSettings?.publisherAgreement?.email;
127
+
123
128
  return <Box>
124
129
  <EmptyTypography variant='body1'>
125
- Access tokens cannot be created as you currently do not have an Eclipse Foundation Open VSX
126
- Publisher Agreement signed. Please return to
130
+ Access tokens cannot be created as you currently do not have
131
+ an {publisherAgreementName} Publisher Agreement signed. Please return to
127
132
  your <StyledRouteLink to={UserSettingsRoutes.PROFILE}>Profile</StyledRouteLink> page
128
- to sign the Publisher Agreement. Should you believe this is in error, please
129
- contact <StyledLink href='mailto:license@eclipse.org'>license@eclipse.org</StyledLink>.
133
+ to sign the Publisher Agreement.
134
+ { publisherAgreementContact !== undefined &&
135
+ <> Should you believe this is in error, please
136
+ contact <StyledLink href='mailto:{publisherAgreementContact}'>{publisherAgreementContact}</StyledLink>.
137
+ </>
138
+ }
130
139
  </EmptyTypography>
131
140
  </Box>;
132
141
  }