openvsx-webui-test 0.19.0-dev.2 → 0.20.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 (350) hide show
  1. package/lib/components/banner.js +1 -2
  2. package/lib/components/banner.js.map +1 -1
  3. package/lib/components/copy-to-clipboard.js +1 -2
  4. package/lib/components/copy-to-clipboard.js.map +1 -1
  5. package/lib/components/delayed-load-indicator.js +2 -4
  6. package/lib/components/delayed-load-indicator.js.map +1 -1
  7. package/lib/components/error-dialog.d.ts.map +1 -1
  8. package/lib/components/error-dialog.js +5 -3
  9. package/lib/components/error-dialog.js.map +1 -1
  10. package/lib/components/rate-limiting/customer/general-details.d.ts +20 -0
  11. package/lib/components/rate-limiting/customer/general-details.d.ts.map +1 -0
  12. package/lib/components/rate-limiting/customer/general-details.js +8 -0
  13. package/lib/components/rate-limiting/customer/general-details.js.map +1 -0
  14. package/lib/components/rate-limiting/customer/index.d.ts +17 -0
  15. package/lib/components/rate-limiting/customer/index.d.ts.map +1 -0
  16. package/lib/components/rate-limiting/customer/index.js +15 -0
  17. package/lib/components/rate-limiting/customer/index.js.map +1 -0
  18. package/lib/components/rate-limiting/customer/usage-stats.d.ts +24 -0
  19. package/lib/components/rate-limiting/customer/usage-stats.d.ts.map +1 -0
  20. package/lib/components/rate-limiting/customer/usage-stats.js +6 -0
  21. package/lib/components/rate-limiting/customer/usage-stats.js.map +1 -0
  22. package/lib/{pages/admin-dashboard → components/rate-limiting}/usage-stats/usage-stats-chart.d.ts +5 -2
  23. package/lib/components/rate-limiting/usage-stats/usage-stats-chart.d.ts.map +1 -0
  24. package/lib/{pages/admin-dashboard → components/rate-limiting}/usage-stats/usage-stats-chart.js +25 -18
  25. package/lib/components/rate-limiting/usage-stats/usage-stats-chart.js.map +1 -0
  26. package/lib/components/rate-limiting/usage-stats/usage-stats-utils.d.ts +15 -0
  27. package/lib/components/rate-limiting/usage-stats/usage-stats-utils.d.ts.map +1 -0
  28. package/{src/pages/admin-dashboard/usage-stats/usage-stats-utils.ts → lib/components/rate-limiting/usage-stats/usage-stats-utils.js} +4 -3
  29. package/lib/components/rate-limiting/usage-stats/usage-stats-utils.js.map +1 -0
  30. package/lib/components/rate-limiting/usage-stats/use-usage-stats.d.ts +22 -0
  31. package/lib/components/rate-limiting/usage-stats/use-usage-stats.d.ts.map +1 -0
  32. package/lib/components/rate-limiting/usage-stats/use-usage-stats.js +58 -0
  33. package/lib/components/rate-limiting/usage-stats/use-usage-stats.js.map +1 -0
  34. package/lib/components/scan-admin/common/conditional-tooltip.js +4 -16
  35. package/lib/components/scan-admin/common/conditional-tooltip.js.map +1 -1
  36. package/lib/components/scan-admin/common/file-table.js +24 -13
  37. package/lib/components/scan-admin/common/file-table.js.map +1 -1
  38. package/lib/components/scan-admin/dialogs/quarantine-dialog.js +4 -8
  39. package/lib/components/scan-admin/dialogs/quarantine-dialog.js.map +1 -1
  40. package/lib/components/scan-admin/scan-card/scan-card-content.js +2 -2
  41. package/lib/components/scan-admin/scan-card/scan-card-content.js.map +1 -1
  42. package/lib/components/scan-admin/scan-card/scan-card-expand-strip-badges.js +21 -16
  43. package/lib/components/scan-admin/scan-card/scan-card-expand-strip-badges.js.map +1 -1
  44. package/lib/components/scan-admin/scan-card/scan-card-expanded-content.js +1 -2
  45. package/lib/components/scan-admin/scan-card/scan-card-expanded-content.js.map +1 -1
  46. package/lib/components/scan-admin/scan-card/scan-card-header.js +10 -5
  47. package/lib/components/scan-admin/scan-card/scan-card-header.js.map +1 -1
  48. package/lib/components/scan-admin/scan-card/utils.js +1 -2
  49. package/lib/components/scan-admin/scan-card/utils.js.map +1 -1
  50. package/lib/components/scan-admin/tab-contents/quarantined-tab-content.js +4 -6
  51. package/lib/components/scan-admin/tab-contents/quarantined-tab-content.js.map +1 -1
  52. package/lib/components/sidepanel/drawer-header.d.ts +14 -0
  53. package/lib/components/sidepanel/drawer-header.d.ts.map +1 -0
  54. package/lib/components/sidepanel/drawer-header.js +22 -0
  55. package/lib/components/sidepanel/drawer-header.js.map +1 -0
  56. package/lib/components/sidepanel/navigation-item.d.ts.map +1 -1
  57. package/lib/components/sidepanel/navigation-item.js +3 -3
  58. package/lib/components/sidepanel/navigation-item.js.map +1 -1
  59. package/lib/components/sidepanel/sidepanel.d.ts +7 -1
  60. package/lib/components/sidepanel/sidepanel.d.ts.map +1 -1
  61. package/lib/components/sidepanel/sidepanel.js +12 -13
  62. package/lib/components/sidepanel/sidepanel.js.map +1 -1
  63. package/lib/components/text-divider.js +1 -2
  64. package/lib/components/text-divider.js.map +1 -1
  65. package/lib/components/timestamp.d.ts +0 -1
  66. package/lib/components/timestamp.d.ts.map +1 -1
  67. package/lib/components/timestamp.js +2 -4
  68. package/lib/components/timestamp.js.map +1 -1
  69. package/lib/context/scan-admin/scan-api-actions.js +7 -16
  70. package/lib/context/scan-admin/scan-api-actions.js.map +1 -1
  71. package/lib/context/scan-admin/scan-api-effects.js +77 -93
  72. package/lib/context/scan-admin/scan-api-effects.js.map +1 -1
  73. package/lib/context/scan-admin/scan-context.d.ts.map +1 -1
  74. package/lib/context/scan-admin/scan-context.js +1 -0
  75. package/lib/context/scan-admin/scan-context.js.map +1 -1
  76. package/lib/context/scan-admin/scan-reducer.js +134 -53
  77. package/lib/context/scan-admin/scan-reducer.js.map +1 -1
  78. package/lib/default/default-app.d.ts +1 -1
  79. package/lib/default/default-app.d.ts.map +1 -1
  80. package/lib/default/default-app.js +11 -22
  81. package/lib/default/default-app.js.map +1 -1
  82. package/lib/default/menu-content.d.ts.map +1 -1
  83. package/lib/default/menu-content.js +7 -3
  84. package/lib/default/menu-content.js.map +1 -1
  85. package/lib/default/page-settings.js +13 -18
  86. package/lib/default/page-settings.js.map +1 -1
  87. package/lib/extension-registry-service.d.ts +11 -1
  88. package/lib/extension-registry-service.d.ts.map +1 -1
  89. package/lib/extension-registry-service.js +618 -629
  90. package/lib/extension-registry-service.js.map +1 -1
  91. package/lib/extension-registry-types.d.ts +7 -0
  92. package/lib/extension-registry-types.d.ts.map +1 -1
  93. package/lib/hooks/scan-admin/use-auto-rejected-tab.js +5 -7
  94. package/lib/hooks/scan-admin/use-auto-rejected-tab.js.map +1 -1
  95. package/lib/hooks/scan-admin/use-quarantined-tab.js +5 -7
  96. package/lib/hooks/scan-admin/use-quarantined-tab.js.map +1 -1
  97. package/lib/main.d.ts.map +1 -1
  98. package/lib/main.js +8 -16
  99. package/lib/main.js.map +1 -1
  100. package/lib/other-pages.d.ts +12 -0
  101. package/lib/other-pages.d.ts.map +1 -1
  102. package/lib/other-pages.js +25 -12
  103. package/lib/other-pages.js.map +1 -1
  104. package/lib/pages/admin-dashboard/admin-dashboard.d.ts +0 -12
  105. package/lib/pages/admin-dashboard/admin-dashboard.d.ts.map +1 -1
  106. package/lib/pages/admin-dashboard/admin-dashboard.js +136 -49
  107. package/lib/pages/admin-dashboard/admin-dashboard.js.map +1 -1
  108. package/lib/pages/admin-dashboard/admin-routes.d.ts +25 -0
  109. package/lib/pages/admin-dashboard/admin-routes.d.ts.map +1 -0
  110. package/lib/pages/admin-dashboard/admin-routes.js +27 -0
  111. package/lib/pages/admin-dashboard/admin-routes.js.map +1 -0
  112. package/lib/pages/admin-dashboard/components/data-grid-filter-operators.d.ts +1 -9
  113. package/lib/pages/admin-dashboard/components/data-grid-filter-operators.d.ts.map +1 -1
  114. package/lib/pages/admin-dashboard/components/data-grid-filter-operators.js +17 -15
  115. package/lib/pages/admin-dashboard/components/data-grid-filter-operators.js.map +1 -1
  116. package/lib/pages/admin-dashboard/components/data-grid-filter.d.ts +22 -0
  117. package/lib/pages/admin-dashboard/components/data-grid-filter.d.ts.map +1 -0
  118. package/lib/pages/admin-dashboard/components/data-grid-filter.js +13 -0
  119. package/lib/pages/admin-dashboard/components/data-grid-filter.js.map +1 -0
  120. package/lib/pages/admin-dashboard/components/index.d.ts +2 -1
  121. package/lib/pages/admin-dashboard/components/index.d.ts.map +1 -1
  122. package/lib/pages/admin-dashboard/components/index.js +2 -1
  123. package/lib/pages/admin-dashboard/components/index.js.map +1 -1
  124. package/lib/pages/admin-dashboard/{usage-stats/usage-stats-utils.d.ts → customers/customer-details.d.ts} +3 -2
  125. package/lib/pages/admin-dashboard/customers/customer-details.d.ts.map +1 -0
  126. package/lib/pages/admin-dashboard/customers/customer-details.js +77 -0
  127. package/lib/pages/admin-dashboard/customers/customer-details.js.map +1 -0
  128. package/lib/pages/admin-dashboard/customers/customer-form-dialog.d.ts +1 -1
  129. package/lib/pages/admin-dashboard/customers/customer-form-dialog.d.ts.map +1 -1
  130. package/lib/pages/admin-dashboard/customers/customer-form-dialog.js +33 -34
  131. package/lib/pages/admin-dashboard/customers/customer-form-dialog.js.map +1 -1
  132. package/lib/pages/admin-dashboard/customers/customer-member-list.d.ts +19 -0
  133. package/lib/pages/admin-dashboard/customers/customer-member-list.d.ts.map +1 -0
  134. package/lib/pages/admin-dashboard/customers/customer-member-list.js +88 -0
  135. package/lib/pages/admin-dashboard/customers/customer-member-list.js.map +1 -0
  136. package/lib/pages/admin-dashboard/customers/customers.d.ts +1 -1
  137. package/lib/pages/admin-dashboard/customers/customers.js +20 -29
  138. package/lib/pages/admin-dashboard/customers/customers.js.map +1 -1
  139. package/lib/pages/admin-dashboard/customers/delete-customer-dialog.js +4 -14
  140. package/lib/pages/admin-dashboard/customers/delete-customer-dialog.js.map +1 -1
  141. package/lib/pages/admin-dashboard/extension-admin.js +7 -16
  142. package/lib/pages/admin-dashboard/extension-admin.js.map +1 -1
  143. package/lib/pages/admin-dashboard/extension-remove-dialog.js +3 -12
  144. package/lib/pages/admin-dashboard/extension-remove-dialog.js.map +1 -1
  145. package/lib/pages/admin-dashboard/extension-version-container.js +3 -5
  146. package/lib/pages/admin-dashboard/extension-version-container.js.map +1 -1
  147. package/lib/pages/admin-dashboard/logs/logs.d.ts.map +1 -1
  148. package/lib/pages/admin-dashboard/logs/logs.js +6 -24
  149. package/lib/pages/admin-dashboard/logs/logs.js.map +1 -1
  150. package/lib/pages/admin-dashboard/namespace-admin.js +7 -16
  151. package/lib/pages/admin-dashboard/namespace-admin.js.map +1 -1
  152. package/lib/pages/admin-dashboard/namespace-change-dialog.js +3 -12
  153. package/lib/pages/admin-dashboard/namespace-change-dialog.js.map +1 -1
  154. package/lib/pages/admin-dashboard/namespace-input.js +1 -1
  155. package/lib/pages/admin-dashboard/namespace-input.js.map +1 -1
  156. package/lib/pages/admin-dashboard/publisher-admin.d.ts.map +1 -1
  157. package/lib/pages/admin-dashboard/publisher-admin.js +28 -22
  158. package/lib/pages/admin-dashboard/publisher-admin.js.map +1 -1
  159. package/lib/pages/admin-dashboard/publisher-revoke-dialog.js +5 -15
  160. package/lib/pages/admin-dashboard/publisher-revoke-dialog.js.map +1 -1
  161. package/lib/pages/admin-dashboard/publisher-revoke-tokens-button.js +3 -12
  162. package/lib/pages/admin-dashboard/publisher-revoke-tokens-button.js.map +1 -1
  163. package/lib/pages/admin-dashboard/tiers/delete-tier-dialog.js +4 -13
  164. package/lib/pages/admin-dashboard/tiers/delete-tier-dialog.js.map +1 -1
  165. package/lib/pages/admin-dashboard/tiers/tier-form-dialog.js +34 -23
  166. package/lib/pages/admin-dashboard/tiers/tier-form-dialog.js.map +1 -1
  167. package/lib/pages/admin-dashboard/tiers/tiers.js +12 -21
  168. package/lib/pages/admin-dashboard/tiers/tiers.js.map +1 -1
  169. package/lib/pages/admin-dashboard/usage-stats/usage-stats-search.js +3 -14
  170. package/lib/pages/admin-dashboard/usage-stats/usage-stats-search.js.map +1 -1
  171. package/lib/pages/admin-dashboard/usage-stats/usage-stats.d.ts.map +1 -1
  172. package/lib/pages/admin-dashboard/usage-stats/usage-stats.js +11 -45
  173. package/lib/pages/admin-dashboard/usage-stats/usage-stats.js.map +1 -1
  174. package/lib/pages/admin-dashboard/usage-stats/use-usage-stats.d.ts +22 -0
  175. package/lib/pages/admin-dashboard/usage-stats/use-usage-stats.d.ts.map +1 -0
  176. package/lib/pages/admin-dashboard/usage-stats/use-usage-stats.js +58 -0
  177. package/lib/pages/admin-dashboard/usage-stats/use-usage-stats.js.map +1 -0
  178. package/lib/pages/admin-dashboard/welcome.js +1 -1
  179. package/lib/pages/admin-dashboard/welcome.js.map +1 -1
  180. package/lib/pages/extension-detail/extension-detail-changes.js +3 -12
  181. package/lib/pages/extension-detail/extension-detail-changes.js.map +1 -1
  182. package/lib/pages/extension-detail/extension-detail-overview.js +6 -16
  183. package/lib/pages/extension-detail/extension-detail-overview.js.map +1 -1
  184. package/lib/pages/extension-detail/extension-detail-reviews.js +12 -24
  185. package/lib/pages/extension-detail/extension-detail-reviews.js.map +1 -1
  186. package/lib/pages/extension-detail/extension-detail-routes.d.ts +32 -0
  187. package/lib/pages/extension-detail/extension-detail-routes.d.ts.map +1 -0
  188. package/lib/pages/extension-detail/extension-detail-routes.js +35 -0
  189. package/lib/pages/extension-detail/extension-detail-routes.js.map +1 -0
  190. package/lib/pages/extension-detail/extension-detail.d.ts +0 -19
  191. package/lib/pages/extension-detail/extension-detail.d.ts.map +1 -1
  192. package/lib/pages/extension-detail/extension-detail.js +28 -50
  193. package/lib/pages/extension-detail/extension-detail.js.map +1 -1
  194. package/lib/pages/extension-detail/extension-rating-stars.js +1 -2
  195. package/lib/pages/extension-detail/extension-rating-stars.js.map +1 -1
  196. package/lib/pages/extension-detail/extension-review-dialog.js +4 -14
  197. package/lib/pages/extension-detail/extension-review-dialog.js.map +1 -1
  198. package/lib/pages/extension-list/extension-list-container.d.ts +0 -3
  199. package/lib/pages/extension-list/extension-list-container.d.ts.map +1 -1
  200. package/lib/pages/extension-list/extension-list-container.js +5 -10
  201. package/lib/pages/extension-list/extension-list-container.js.map +1 -1
  202. package/lib/pages/extension-list/extension-list-header.js +3 -6
  203. package/lib/pages/extension-list/extension-list-header.js.map +1 -1
  204. package/lib/pages/extension-list/extension-list-item.js +7 -17
  205. package/lib/pages/extension-list/extension-list-item.js.map +1 -1
  206. package/lib/pages/extension-list/extension-list-routes.d.ts +16 -0
  207. package/lib/pages/extension-list/extension-list-routes.d.ts.map +1 -0
  208. package/lib/pages/extension-list/extension-list-routes.js +18 -0
  209. package/lib/pages/extension-list/extension-list-routes.js.map +1 -0
  210. package/lib/pages/extension-list/extension-list-searchfield.js +4 -7
  211. package/lib/pages/extension-list/extension-list-searchfield.js.map +1 -1
  212. package/lib/pages/extension-list/extension-list.js +8 -19
  213. package/lib/pages/extension-list/extension-list.js.map +1 -1
  214. package/lib/pages/namespace-detail/namespace-detail-routes.d.ts +20 -0
  215. package/lib/pages/namespace-detail/namespace-detail-routes.d.ts.map +1 -0
  216. package/lib/pages/namespace-detail/namespace-detail-routes.js +23 -0
  217. package/lib/pages/namespace-detail/namespace-detail-routes.js.map +1 -0
  218. package/lib/pages/namespace-detail/namespace-detail.d.ts +0 -7
  219. package/lib/pages/namespace-detail/namespace-detail.d.ts.map +1 -1
  220. package/lib/pages/namespace-detail/namespace-detail.js +4 -24
  221. package/lib/pages/namespace-detail/namespace-detail.js.map +1 -1
  222. package/lib/pages/user/add-namespace-member-dialog.d.ts.map +1 -1
  223. package/lib/pages/user/add-namespace-member-dialog.js +8 -67
  224. package/lib/pages/user/add-namespace-member-dialog.js.map +1 -1
  225. package/lib/pages/user/add-user-dialog.d.ts +25 -0
  226. package/lib/pages/user/add-user-dialog.d.ts.map +1 -0
  227. package/lib/pages/user/add-user-dialog.js +66 -0
  228. package/lib/pages/user/add-user-dialog.js.map +1 -0
  229. package/lib/pages/user/avatar.js +3 -3
  230. package/lib/pages/user/avatar.js.map +1 -1
  231. package/lib/pages/user/create-namespace-dialog.js +3 -12
  232. package/lib/pages/user/create-namespace-dialog.js.map +1 -1
  233. package/lib/pages/user/generate-token-dialog.js +3 -12
  234. package/lib/pages/user/generate-token-dialog.js.map +1 -1
  235. package/lib/pages/user/logout.js +3 -12
  236. package/lib/pages/user/logout.js.map +1 -1
  237. package/lib/pages/user/publish-extension-dialog.js +12 -21
  238. package/lib/pages/user/publish-extension-dialog.js.map +1 -1
  239. package/lib/pages/user/user-namespace-details.js +29 -42
  240. package/lib/pages/user/user-namespace-details.js.map +1 -1
  241. package/lib/pages/user/user-namespace-extension-list-item.js +6 -8
  242. package/lib/pages/user/user-namespace-extension-list-item.js.map +1 -1
  243. package/lib/pages/user/user-namespace-extension-list.js +6 -15
  244. package/lib/pages/user/user-namespace-extension-list.js.map +1 -1
  245. package/lib/pages/user/user-namespace-member-component.js +1 -1
  246. package/lib/pages/user/user-namespace-member-component.js.map +1 -1
  247. package/lib/pages/user/user-namespace-member-list.js +9 -18
  248. package/lib/pages/user/user-namespace-member-list.js.map +1 -1
  249. package/lib/pages/user/user-publisher-agreement.js +8 -18
  250. package/lib/pages/user/user-publisher-agreement.js.map +1 -1
  251. package/lib/pages/user/user-setting-tabs.d.ts.map +1 -1
  252. package/lib/pages/user/user-setting-tabs.js +2 -2
  253. package/lib/pages/user/user-setting-tabs.js.map +1 -1
  254. package/lib/pages/user/user-settings-customer-detail.d.ts +19 -0
  255. package/lib/pages/user/user-settings-customer-detail.d.ts.map +1 -0
  256. package/lib/pages/user/user-settings-customer-detail.js +9 -0
  257. package/lib/pages/user/user-settings-customer-detail.js.map +1 -0
  258. package/lib/pages/user/user-settings-customers.d.ts +15 -0
  259. package/lib/pages/user/user-settings-customers.d.ts.map +1 -0
  260. package/lib/pages/user/user-settings-customers.js +66 -0
  261. package/lib/pages/user/user-settings-customers.js.map +1 -0
  262. package/lib/pages/user/user-settings-delete-extension.js +8 -17
  263. package/lib/pages/user/user-settings-delete-extension.js.map +1 -1
  264. package/lib/pages/user/user-settings-extensions.js +3 -12
  265. package/lib/pages/user/user-settings-extensions.js.map +1 -1
  266. package/lib/pages/user/user-settings-namespace-detail.d.ts.map +1 -1
  267. package/lib/pages/user/user-settings-namespace-detail.js +4 -12
  268. package/lib/pages/user/user-settings-namespace-detail.js.map +1 -1
  269. package/lib/pages/user/user-settings-namespaces.js +6 -15
  270. package/lib/pages/user/user-settings-namespaces.js.map +1 -1
  271. package/lib/pages/user/user-settings-profile.js +1 -2
  272. package/lib/pages/user/user-settings-profile.js.map +1 -1
  273. package/lib/pages/user/user-settings-routes.d.ts +23 -0
  274. package/lib/pages/user/user-settings-routes.d.ts.map +1 -0
  275. package/lib/pages/user/user-settings-routes.js +25 -0
  276. package/lib/pages/user/user-settings-routes.js.map +1 -0
  277. package/lib/pages/user/user-settings-tokens.d.ts +0 -7
  278. package/lib/pages/user/user-settings-tokens.d.ts.map +1 -1
  279. package/lib/pages/user/user-settings-tokens.js +14 -24
  280. package/lib/pages/user/user-settings-tokens.js.map +1 -1
  281. package/lib/pages/user/user-settings.d.ts +0 -9
  282. package/lib/pages/user/user-settings.d.ts.map +1 -1
  283. package/lib/pages/user/user-settings.js +4 -12
  284. package/lib/pages/user/user-settings.js.map +1 -1
  285. package/lib/server-request.js +64 -76
  286. package/lib/server-request.js.map +1 -1
  287. package/lib/utils.d.ts +1 -1
  288. package/lib/utils.d.ts.map +1 -1
  289. package/lib/utils.js +7 -14
  290. package/lib/utils.js.map +1 -1
  291. package/package.json +4 -2
  292. package/src/components/error-dialog.tsx +5 -3
  293. package/src/components/rate-limiting/customer/general-details.tsx +106 -0
  294. package/src/components/rate-limiting/customer/index.ts +18 -0
  295. package/src/components/rate-limiting/customer/usage-stats.tsx +50 -0
  296. package/src/{pages/admin-dashboard → components/rate-limiting}/usage-stats/usage-stats-chart.tsx +46 -26
  297. package/{lib/pages/admin-dashboard/usage-stats/usage-stats-utils.js → src/components/rate-limiting/usage-stats/usage-stats-utils.ts} +4 -2
  298. package/src/components/rate-limiting/usage-stats/use-usage-stats.ts +70 -0
  299. package/src/components/scan-admin/scan-card/scan-card-header.tsx +2 -2
  300. package/src/components/sidepanel/drawer-header.tsx +23 -0
  301. package/src/components/sidepanel/navigation-item.tsx +3 -2
  302. package/src/components/sidepanel/sidepanel.tsx +29 -17
  303. package/src/components/timestamp.tsx +1 -3
  304. package/src/context/scan-admin/scan-context.tsx +1 -0
  305. package/src/default/default-app.tsx +1 -1
  306. package/src/default/menu-content.tsx +6 -2
  307. package/src/default/page-settings.tsx +1 -1
  308. package/src/extension-registry-service.ts +105 -26
  309. package/src/extension-registry-types.ts +9 -0
  310. package/src/main.tsx +2 -1
  311. package/src/other-pages.tsx +21 -4
  312. package/src/pages/admin-dashboard/admin-dashboard.tsx +260 -83
  313. package/src/pages/admin-dashboard/admin-routes.ts +27 -0
  314. package/src/pages/admin-dashboard/components/data-grid-filter-operators.tsx +1 -31
  315. package/src/pages/admin-dashboard/components/data-grid-filter.tsx +45 -0
  316. package/src/pages/admin-dashboard/components/index.ts +1 -1
  317. package/src/pages/admin-dashboard/customers/customer-details.tsx +129 -0
  318. package/src/pages/admin-dashboard/customers/customer-form-dialog.tsx +3 -4
  319. package/src/pages/admin-dashboard/customers/customer-member-list.tsx +174 -0
  320. package/src/pages/admin-dashboard/customers/customers.tsx +8 -8
  321. package/src/pages/admin-dashboard/logs/logs.tsx +1 -10
  322. package/src/pages/admin-dashboard/publisher-admin.tsx +29 -11
  323. package/src/pages/admin-dashboard/usage-stats/usage-stats.tsx +10 -39
  324. package/src/pages/admin-dashboard/usage-stats/use-usage-stats.ts +70 -0
  325. package/src/pages/admin-dashboard/welcome.tsx +1 -1
  326. package/src/pages/extension-detail/extension-detail-overview.tsx +2 -2
  327. package/src/pages/extension-detail/extension-detail-routes.ts +35 -0
  328. package/src/pages/extension-detail/extension-detail.tsx +3 -23
  329. package/src/pages/extension-list/extension-list-container.tsx +1 -5
  330. package/src/pages/extension-list/extension-list-item.tsx +1 -1
  331. package/src/pages/extension-list/extension-list-routes.ts +18 -0
  332. package/src/pages/namespace-detail/namespace-detail-routes.ts +23 -0
  333. package/src/pages/namespace-detail/namespace-detail.tsx +0 -10
  334. package/src/pages/user/add-namespace-member-dialog.tsx +17 -116
  335. package/src/pages/user/add-user-dialog.tsx +141 -0
  336. package/src/pages/user/avatar.tsx +2 -2
  337. package/src/pages/user/user-namespace-extension-list-item.tsx +2 -2
  338. package/src/pages/user/user-setting-tabs.tsx +2 -1
  339. package/src/pages/user/user-settings-customer-detail.tsx +39 -0
  340. package/src/pages/user/user-settings-customers.tsx +120 -0
  341. package/src/pages/user/user-settings-delete-extension.tsx +1 -1
  342. package/src/pages/user/user-settings-namespace-detail.tsx +3 -1
  343. package/src/pages/user/user-settings-routes.ts +25 -0
  344. package/src/pages/user/user-settings-tokens.tsx +2 -9
  345. package/src/pages/user/user-settings.tsx +4 -12
  346. package/src/utils.ts +5 -9
  347. package/lib/pages/admin-dashboard/usage-stats/usage-stats-chart.d.ts.map +0 -1
  348. package/lib/pages/admin-dashboard/usage-stats/usage-stats-chart.js.map +0 -1
  349. package/lib/pages/admin-dashboard/usage-stats/usage-stats-utils.d.ts.map +0 -1
  350. package/lib/pages/admin-dashboard/usage-stats/usage-stats-utils.js.map +0 -1
@@ -17,14 +17,16 @@ import {
17
17
  Paper,
18
18
  Typography,
19
19
  Alert,
20
- Stack
20
+ Stack,
21
+ IconButton
21
22
  } from "@mui/material";
22
23
  import { BarPlot } from "@mui/x-charts/BarChart";
23
24
  import { DatePicker } from "@mui/x-date-pickers/DatePicker";
24
25
  import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider";
25
- import { AdapterDateFns } from "@mui/x-date-pickers/AdapterDateFns";
26
+ import { AdapterLuxon } from "@mui/x-date-pickers/AdapterLuxon";
27
+ import ChevronLeftIcon from "@mui/icons-material/ChevronLeft";
28
+ import ChevronRightIcon from "@mui/icons-material/ChevronRight";
26
29
  import type { Customer, UsageStats } from "../../../extension-registry-types";
27
- import { addDays, format, startOfDay } from "date-fns";
28
30
  import {
29
31
  ChartsReferenceLine,
30
32
  ChartsTooltip,
@@ -32,22 +34,27 @@ import {
32
34
  ChartsYAxis,
33
35
  ResponsiveChartContainer
34
36
  } from "@mui/x-charts";
37
+ import { DateTime } from "luxon";
35
38
 
36
39
  interface UsageStatsChartProps {
37
40
  usageStats: readonly UsageStats[];
38
41
  customer: Customer | null;
39
- startDate: Date;
40
- onStartDateChange: (date: Date) => void;
42
+ startDate: DateTime;
43
+ onStartDateChange: (date: DateTime) => void;
44
+ embedded?: boolean;
45
+ compact?: boolean;
41
46
  }
42
47
 
43
48
  export const UsageStatsChart: FC<UsageStatsChartProps> = ({
44
49
  usageStats,
45
50
  customer,
46
51
  startDate,
47
- onStartDateChange
52
+ onStartDateChange,
53
+ embedded = false,
54
+ compact = false
48
55
  }) => {
49
- const dayStart = startOfDay(startDate).getTime() / 1000;
50
- const dayEnd = startOfDay(addDays(startDate, 1)).getTime() / 1000;
56
+ const dayStart = startDate.startOf('day').toMillis() / 1000;
57
+ const dayEnd = startDate.endOf('day').toMillis() / 1000;
51
58
 
52
59
  // we have 5min steps
53
60
  const step = 5 * 60;
@@ -68,7 +75,9 @@ export const UsageStatsChart: FC<UsageStatsChartProps> = ({
68
75
 
69
76
  for (const stat of usageStats) {
70
77
  const idx = (stat.windowStart - dayStart) / step;
71
- arr[idx].count = stat.count;
78
+ if (idx >= 0 && idx < arr.length) {
79
+ arr[idx].count = stat.count;
80
+ }
72
81
  }
73
82
  return arr;
74
83
  }, [usageStats]
@@ -89,9 +98,11 @@ export const UsageStatsChart: FC<UsageStatsChartProps> = ({
89
98
  [usageStats]
90
99
  );
91
100
 
101
+ const Wrapper: typeof Box = embedded ? Box : Paper;
102
+
92
103
  return (
93
- <LocalizationProvider dateAdapter={AdapterDateFns}>
94
- <Paper sx={{ p: 2, mb: 3 }}>
104
+ <LocalizationProvider dateAdapter={AdapterLuxon}>
105
+ <Wrapper sx={{ p: 2, mb: embedded ? 2 : 3 }}>
95
106
  <Typography variant='subtitle2' gutterBottom color='text.secondary'>
96
107
  Filters
97
108
  </Typography>
@@ -100,16 +111,23 @@ export const UsageStatsChart: FC<UsageStatsChartProps> = ({
100
111
  label='Start Date'
101
112
  value={startDate}
102
113
  onChange={onStartDateChange}
103
- slotProps={{ textField: { size: 'small' } }}
114
+ timezone='UTC'
115
+ slotProps={{ textField: { size: 'small' }, actionBar: { actions: ['today'] } }}
104
116
  />
117
+ <IconButton size='small' onClick={() => onStartDateChange(startDate.minus({ days: 1 }))}>
118
+ <ChevronLeftIcon />
119
+ </IconButton>
120
+ <IconButton size='small' onClick={() => onStartDateChange(startDate.plus({ days: 1 }))}>
121
+ <ChevronRightIcon />
122
+ </IconButton>
105
123
  </Stack>
106
- </Paper>
124
+ </Wrapper>
107
125
 
108
126
  {usageStats.length === 0 ?
109
127
  <Alert severity='info'>No usage data available for this customer.</Alert>
110
128
  :
111
129
  <>
112
- <Paper sx={{ p: 2 }}>
130
+ <Wrapper sx={{ p: 2 }}>
113
131
  <ResponsiveChartContainer
114
132
  series={[{
115
133
  type: 'bar',
@@ -118,14 +136,14 @@ export const UsageStatsChart: FC<UsageStatsChartProps> = ({
118
136
  color: 'lightgray',
119
137
  }]}
120
138
 
121
- height={400}
122
- margin={{ top: 10 }}
139
+ height={compact ? 300 : 400}
140
+ margin={{ top: 30 }}
123
141
  xAxis={[
124
142
  {
125
143
  id: 'date',
126
- data: data.map((value) => new Date(value.windowStart * 1000)),
144
+ data: data.map((value) => value.windowStart * 1000),
145
+ valueFormatter: (value) => DateTime.fromMillis(value).toLocaleString(DateTime.TIME_24_SIMPLE),
127
146
  scaleType: 'band',
128
- valueFormatter: (value) => format(new Date(value), 'HH:mm'),
129
147
  },
130
148
  ]}
131
149
  yAxis={[
@@ -133,7 +151,7 @@ export const UsageStatsChart: FC<UsageStatsChartProps> = ({
133
151
  id: 'requests',
134
152
  scaleType: 'linear',
135
153
  min: 0,
136
- max: Math.max(tierCapacity, maxDataValue) + 10
154
+ max: Math.max(tierCapacity, maxDataValue) + 30
137
155
  },
138
156
  ]}
139
157
  >
@@ -153,14 +171,16 @@ export const UsageStatsChart: FC<UsageStatsChartProps> = ({
153
171
  }
154
172
 
155
173
  <ChartsXAxis
156
- label='Time'
174
+ label='Time (UTC)'
157
175
  position='bottom'
158
176
  axisId='date'
159
- tickInterval={(value, index) => {
160
- return new Date(value).getMinutes() === 0;
177
+ tickInterval={(value) => {
178
+ const d = new Date(value);
179
+ return d.getMinutes() === 0 && (!compact || d.getHours() % 3 === 0);
161
180
  }}
162
- tickLabelInterval={(value, index) => {
163
- return new Date(value).getMinutes() === 0;
181
+ tickLabelInterval={(value) => {
182
+ const d = new Date(value);
183
+ return d.getMinutes() === 0 && (!compact || d.getHours() % 3 === 0);
164
184
  }}
165
185
  tickLabelStyle={{
166
186
  fontSize: 10,
@@ -174,7 +194,7 @@ export const UsageStatsChart: FC<UsageStatsChartProps> = ({
174
194
  />
175
195
  <ChartsTooltip />
176
196
  </ResponsiveChartContainer>
177
- </Paper>
197
+ </Wrapper>
178
198
 
179
199
  <Box mt={2}>
180
200
  <Typography variant='body2' color='text.secondary'>
@@ -186,4 +206,4 @@ export const UsageStatsChart: FC<UsageStatsChartProps> = ({
186
206
  }
187
207
  </LocalizationProvider>
188
208
  );
189
- };
209
+ };
@@ -10,7 +10,9 @@
10
10
  *
11
11
  * SPDX-License-Identifier: EPL-2.0
12
12
  *****************************************************************************/
13
+
14
+ import { DateTime } from "luxon";
15
+
13
16
  export const getDefaultStartDate = () => {
14
- return new Date();
17
+ return DateTime.now().setZone("UTC");
15
18
  };
16
- //# sourceMappingURL=usage-stats-utils.js.map
@@ -0,0 +1,70 @@
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
+
14
+ import { useContext, useState, useEffect, useRef, useCallback } from "react";
15
+ import { MainContext } from "../../../context";
16
+ import type { UsageStats } from "../../../extension-registry-types";
17
+ import { handleError } from "../../../utils";
18
+ import { getDefaultStartDate } from "./usage-stats-utils";
19
+ import { DateTime } from "luxon";
20
+
21
+ export const useUsageStats = (customerName: string | undefined) => {
22
+ const abortController = useRef(new AbortController());
23
+ const { service } = useContext(MainContext);
24
+
25
+ const [usageStats, setUsageStats] = useState<readonly UsageStats[]>([]);
26
+ const [loading, setLoading] = useState(false);
27
+ const [error, setError] = useState<string | null>(null);
28
+ const [internalStartDate, setInternalStartDate] = useState<DateTime>(getDefaultStartDate);
29
+
30
+ const startDateRef = useRef(internalStartDate);
31
+ startDateRef.current = internalStartDate;
32
+
33
+ const fetchUsageStats = useCallback(async (date: DateTime) => {
34
+ if (!customerName) {
35
+ setUsageStats([]);
36
+ setLoading(false);
37
+ return;
38
+ }
39
+
40
+ try {
41
+ setLoading(true);
42
+ setError(null);
43
+ const data = await service.getUsageStats(
44
+ abortController.current,
45
+ customerName,
46
+ date.toJSDate()
47
+ );
48
+ setUsageStats(data.stats);
49
+ } catch (err) {
50
+ setError(handleError(err as Error));
51
+ } finally {
52
+ setLoading(false);
53
+ }
54
+ }, [service, customerName]);
55
+
56
+ const setStartDate = useCallback((date: DateTime) => {
57
+ setInternalStartDate(date);
58
+ fetchUsageStats(date);
59
+ }, [fetchUsageStats]);
60
+
61
+ useEffect(() => {
62
+ fetchUsageStats(startDateRef.current);
63
+ return () => {
64
+ abortController.current.abort();
65
+ abortController.current = new AbortController();
66
+ };
67
+ }, [fetchUsageStats]);
68
+
69
+ return { usageStats, loading, error, startDate: internalStartDate, setStartDate };
70
+ };
@@ -32,8 +32,8 @@ import {
32
32
  getStatusColorSx,
33
33
  } from './utils';
34
34
  import { createRoute } from '../../../utils';
35
- import { AdminDashboardRoutes } from '../../../pages/admin-dashboard/admin-dashboard';
36
- import { ExtensionDetailRoutes } from '../../../pages/extension-detail/extension-detail';
35
+ import { AdminDashboardRoutes } from '../../../pages/admin-dashboard/admin-routes';
36
+ import { ExtensionDetailRoutes } from '../../../pages/extension-detail/extension-detail-routes';
37
37
 
38
38
  interface ScanCardHeaderProps {
39
39
  scan: ScanResult;
@@ -0,0 +1,23 @@
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
+
14
+ import { styled } from '@mui/material/styles';
15
+
16
+ export const DrawerHeader = styled('div')(({ theme }) => ({
17
+ display: 'flex',
18
+ alignItems: 'center',
19
+ padding: theme.spacing(0, 1),
20
+ // necessary for content to be below app bar
21
+ ...theme.mixins.toolbar,
22
+ justifyContent: 'flex-end',
23
+ }));
@@ -11,6 +11,7 @@
11
11
  import { FunctionComponent, PropsWithChildren, ReactNode, useState } from 'react';
12
12
  import { ListItemButton, ListItemText, Collapse, List, ListItemIcon } from '@mui/material';
13
13
  import ExpandLess from '@mui/icons-material/ExpandLess';
14
+ import ExpandMore from '@mui/icons-material/ExpandMore';
14
15
  import { useNavigate } from 'react-router';
15
16
 
16
17
  export const NavigationItem: FunctionComponent<PropsWithChildren<NavigationProps>> = props => {
@@ -21,7 +22,7 @@ export const NavigationItem: FunctionComponent<PropsWithChildren<NavigationProps
21
22
  if (props.children) {
22
23
  setOpen(!open);
23
24
  } else if (props.route) {
24
- props.onOpenRoute?.call(props.route);
25
+ props.onOpenRoute?.call(this, props.route);
25
26
  navigate(props.route);
26
27
  }
27
28
  };
@@ -32,7 +33,7 @@ export const NavigationItem: FunctionComponent<PropsWithChildren<NavigationProps
32
33
  props.icon && <ListItemIcon>{props.icon}</ListItemIcon>
33
34
  }
34
35
  <ListItemText primary={props.label} />
35
- {props.children && open && <ExpandLess />}
36
+ {props.children && (open ? <ExpandLess /> : <ExpandMore />)}
36
37
  </ListItemButton>
37
38
  {
38
39
  props.children &&
@@ -9,30 +9,42 @@
9
9
  ********************************************************************************/
10
10
 
11
11
  import { FunctionComponent, PropsWithChildren } from 'react';
12
- import { Drawer, List } from '@mui/material';
13
- import { Theme } from '@mui/material/styles';
12
+ import { Divider, Drawer, IconButton, List } from '@mui/material';
13
+ import ChevronLeftIcon from '@mui/icons-material/ChevronLeft';
14
+ import { DrawerHeader } from './drawer-header';
15
+
16
+ export const Sidepanel: FunctionComponent<PropsWithChildren<SidepanelProps>> = props => {
17
+ const width = props.width;
14
18
 
15
- export const Sidepanel: FunctionComponent<PropsWithChildren> = props => {
16
19
  return (
17
20
  <Drawer
18
- variant='permanent'
19
- PaperProps={{ elevation: 3 }}
20
- sx={(theme: Theme) => ({
21
+ sx={{
22
+ width: width,
23
+ flexShrink: 0,
21
24
  '& .MuiDrawer-paper': {
22
- position: 'relative',
23
- justifyContent: 'space-between',
24
- transition: theme.transitions.create('width', {
25
- easing: theme.transitions.easing.sharp,
26
- duration: theme.transitions.duration.enteringScreen
27
- }),
28
- overflowX: { xs: 'hidden', sm: 'hidden', md: 'none', lg: 'none', xl: 'none' },
29
- width: { xs: theme.spacing(7) + 1, sm: theme.spacing(9) + 1, md: 240 },
30
- }
31
- })}
25
+ width: width,
26
+ boxSizing: 'border-box',
27
+ },
28
+ }}
29
+ variant='persistent'
30
+ anchor='left'
31
+ open={props.open}
32
32
  >
33
+ <DrawerHeader>
34
+ <IconButton onClick={props.handleDrawerClose}>
35
+ <ChevronLeftIcon />
36
+ </IconButton>
37
+ </DrawerHeader>
38
+ <Divider />
33
39
  <List>
34
40
  {props.children}
35
41
  </List>
36
42
  </Drawer>
37
43
  );
38
- };
44
+ };
45
+
46
+ interface SidepanelProps {
47
+ width: number;
48
+ open: boolean;
49
+ handleDrawerClose: () => void;
50
+ }
@@ -15,18 +15,16 @@ import { toRelativeTime, toLocalTime } from '../utils';
15
15
 
16
16
  export const Timestamp: FunctionComponent<TimestampProps> = props => {
17
17
  const sx = props.sx ?? [];
18
- const isFutureTime = props.isFutureTime ?? false;
19
18
  const timestamp = props.value;
20
19
  return <Box
21
20
  component='span'
22
21
  title={toLocalTime(timestamp)}
23
22
  sx={[...(Array.isArray(sx) ? sx : [sx])]}>
24
- {toRelativeTime(timestamp, isFutureTime)}
23
+ {toRelativeTime(timestamp)}
25
24
  </Box>;
26
25
  };
27
26
 
28
27
  export interface TimestampProps {
29
28
  value: string;
30
- isFutureTime?: boolean;
31
29
  sx?: SxProps<Theme>;
32
30
  }
@@ -114,6 +114,7 @@ export const ScanProvider: FC<ScanProviderProps> = ({ children, service, handleE
114
114
  // Custom Hook
115
115
  // ============================================================================
116
116
 
117
+ // eslint-disable-next-line react-refresh/only-export-components
117
118
  export const useScanContext = (): ScanContextValue => {
118
119
  const context = useContext(ScanContext);
119
120
  if (!context) {
@@ -48,7 +48,7 @@ async function getServerVersion(): Promise<string> {
48
48
  }
49
49
  }
50
50
 
51
- const App = () => {
51
+ export const App = () => {
52
52
  const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)');
53
53
  const theme = useMemo(
54
54
  () => createDefaultTheme(prefersDarkMode ? 'dark' : 'light'),
@@ -19,17 +19,18 @@ import InfoIcon from '@mui/icons-material/Info';
19
19
  import PublishIcon from '@mui/icons-material/Publish';
20
20
  import AccountBoxIcon from '@mui/icons-material/AccountBox';
21
21
  import { UserAvatar } from '../pages/user/avatar';
22
- import { UserSettingsRoutes } from '../pages/user/user-settings';
22
+ import { UserSettingsRoutes } from '../pages/user/user-settings-routes';
23
23
  import { styled, Theme } from '@mui/material/styles';
24
24
  import { MainContext } from '../context';
25
25
  import SettingsIcon from '@mui/icons-material/Settings';
26
26
  import AdminPanelSettingsIcon from '@mui/icons-material/AdminPanelSettings';
27
27
  import LogoutIcon from '@mui/icons-material/Logout';
28
- import { AdminDashboardRoutes } from '../pages/admin-dashboard/admin-dashboard';
28
+ import { AdminDashboardRoutes } from '../pages/admin-dashboard/admin-routes';
29
29
  import { LogoutForm } from '../pages/user/logout';
30
30
  import { LoginComponent } from './login';
31
31
 
32
32
  //-------------------- Mobile View --------------------//
33
+ // eslint-disable-next-line react-refresh/only-export-components
33
34
  export const itemIcon = {
34
35
  mr: 1,
35
36
  width: '16px',
@@ -161,6 +162,7 @@ export const MobileMenuContent: FunctionComponent = () => {
161
162
 
162
163
  //-------------------- Default View --------------------//
163
164
 
165
+ // eslint-disable-next-line react-refresh/only-export-components
164
166
  export const headerItem = ({ theme }: { theme: Theme }) => ({
165
167
  margin: theme.spacing(2.5),
166
168
  color: theme.palette.text.primary,
@@ -175,7 +177,9 @@ export const headerItem = ({ theme }: { theme: Theme }) => ({
175
177
  }
176
178
  });
177
179
 
180
+ // eslint-disable-next-line react-refresh/only-export-components
178
181
  export const MenuLink = styled(Link)(headerItem);
182
+ // eslint-disable-next-line react-refresh/only-export-components
179
183
  export const MenuRouteLink = styled(RouteLink)(headerItem);
180
184
 
181
185
  export const DefaultMenuContent: FunctionComponent = () => {
@@ -16,7 +16,7 @@ import { Link as RouteLink, Route, useParams } from 'react-router-dom';
16
16
  import GitHubIcon from '@mui/icons-material/GitHub';
17
17
  import { Extension, NamespaceDetails } from '../extension-registry-types';
18
18
  import { PageSettings } from '../page-settings';
19
- import { ExtensionListRoutes } from '../pages/extension-list/extension-list-container';
19
+ import { ExtensionListRoutes } from '../pages/extension-list/extension-list-routes';
20
20
  import { DefaultMenuContent, MobileMenuContent } from './menu-content';
21
21
  import OpenVSXLogo from './openvsx-registry-logo';
22
22
  import About from './about';