openvsx-webui-test 0.18.0-security.5 → 0.19.0-dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/banner.d.ts.map +1 -1
- package/lib/components/banner.js +10 -24
- package/lib/components/banner.js.map +1 -1
- package/lib/components/button-with-progress.d.ts.map +1 -1
- package/lib/components/button-with-progress.js +11 -22
- package/lib/components/button-with-progress.js.map +1 -1
- package/lib/components/copy-to-clipboard.d.ts.map +1 -1
- package/lib/components/copy-to-clipboard.js +3 -2
- package/lib/components/copy-to-clipboard.js.map +1 -1
- package/lib/components/delayed-load-indicator.d.ts.map +1 -1
- package/lib/components/delayed-load-indicator.js +4 -3
- package/lib/components/delayed-load-indicator.js.map +1 -1
- package/lib/components/error-dialog.d.ts.map +1 -1
- package/lib/components/error-dialog.js +8 -23
- package/lib/components/error-dialog.js.map +1 -1
- package/lib/components/hover-popover.d.ts.map +1 -1
- package/lib/components/hover-popover.js +9 -10
- package/lib/components/hover-popover.js.map +1 -1
- package/lib/components/info-dialog.d.ts.map +1 -1
- package/lib/components/info-dialog.js +3 -7
- package/lib/components/info-dialog.js.map +1 -1
- package/lib/components/sanitized-markdown.d.ts.map +1 -1
- package/lib/components/sanitized-markdown.js +3 -2
- package/lib/components/sanitized-markdown.js.map +1 -1
- package/lib/components/scan-admin/common/auto-refresh.d.ts.map +1 -1
- package/lib/components/scan-admin/common/auto-refresh.js +12 -30
- package/lib/components/scan-admin/common/auto-refresh.js.map +1 -1
- package/lib/components/scan-admin/common/conditional-tooltip.d.ts.map +1 -1
- package/lib/components/scan-admin/common/conditional-tooltip.js +6 -17
- package/lib/components/scan-admin/common/conditional-tooltip.js.map +1 -1
- package/lib/components/scan-admin/common/file-table.d.ts.map +1 -1
- package/lib/components/scan-admin/common/file-table.js +84 -144
- package/lib/components/scan-admin/common/file-table.js.map +1 -1
- package/lib/components/scan-admin/common/tab-panel.d.ts.map +1 -1
- package/lib/components/scan-admin/common/tab-panel.js +2 -14
- package/lib/components/scan-admin/common/tab-panel.js.map +1 -1
- package/lib/components/scan-admin/common/utils.d.ts.map +1 -1
- package/lib/components/scan-admin/common/utils.js.map +1 -1
- package/lib/components/scan-admin/dialogs/file-dialog.d.ts.map +1 -1
- package/lib/components/scan-admin/dialogs/file-dialog.js +31 -73
- package/lib/components/scan-admin/dialogs/file-dialog.js.map +1 -1
- package/lib/components/scan-admin/dialogs/quarantine-dialog.d.ts.map +1 -1
- package/lib/components/scan-admin/dialogs/quarantine-dialog.js +60 -120
- package/lib/components/scan-admin/dialogs/quarantine-dialog.js.map +1 -1
- package/lib/components/scan-admin/scan-card/scan-card-content.d.ts +3 -3
- package/lib/components/scan-admin/scan-card/scan-card-content.d.ts.map +1 -1
- package/lib/components/scan-admin/scan-card/scan-card-content.js +139 -204
- package/lib/components/scan-admin/scan-card/scan-card-content.js.map +1 -1
- package/lib/components/scan-admin/scan-card/scan-card-expand-strip-badges.d.ts +2 -2
- package/lib/components/scan-admin/scan-card/scan-card-expand-strip-badges.d.ts.map +1 -1
- package/lib/components/scan-admin/scan-card/scan-card-expand-strip-badges.js +28 -34
- package/lib/components/scan-admin/scan-card/scan-card-expand-strip-badges.js.map +1 -1
- package/lib/components/scan-admin/scan-card/scan-card-expand-strip.d.ts +2 -2
- package/lib/components/scan-admin/scan-card/scan-card-expand-strip.d.ts.map +1 -1
- package/lib/components/scan-admin/scan-card/scan-card-expand-strip.js +9 -12
- package/lib/components/scan-admin/scan-card/scan-card-expand-strip.js.map +1 -1
- package/lib/components/scan-admin/scan-card/scan-card-expanded-content.d.ts +0 -1
- package/lib/components/scan-admin/scan-card/scan-card-expanded-content.d.ts.map +1 -1
- package/lib/components/scan-admin/scan-card/scan-card-expanded-content.js +20 -51
- package/lib/components/scan-admin/scan-card/scan-card-expanded-content.js.map +1 -1
- package/lib/components/scan-admin/scan-card/scan-card-header.d.ts +2 -2
- package/lib/components/scan-admin/scan-card/scan-card-header.d.ts.map +1 -1
- package/lib/components/scan-admin/scan-card/scan-card-header.js +58 -61
- package/lib/components/scan-admin/scan-card/scan-card-header.js.map +1 -1
- package/lib/components/scan-admin/scan-card/scan-card.d.ts.map +1 -1
- package/lib/components/scan-admin/scan-card/scan-card.js +20 -25
- package/lib/components/scan-admin/scan-card/scan-card.js.map +1 -1
- package/lib/components/scan-admin/scan-card/scan-detail-card.d.ts.map +1 -1
- package/lib/components/scan-admin/scan-card/scan-detail-card.js +19 -43
- package/lib/components/scan-admin/scan-card/scan-detail-card.js.map +1 -1
- package/lib/components/scan-admin/scan-card/utils.d.ts +4 -4
- package/lib/components/scan-admin/scan-card/utils.d.ts.map +1 -1
- package/lib/components/scan-admin/scan-card/utils.js.map +1 -1
- package/lib/components/scan-admin/tab-contents/allow-list-tab-content.d.ts.map +1 -1
- package/lib/components/scan-admin/tab-contents/allow-list-tab-content.js +17 -39
- package/lib/components/scan-admin/tab-contents/allow-list-tab-content.js.map +1 -1
- package/lib/components/scan-admin/tab-contents/auto-rejected-tab-content.d.ts.map +1 -1
- package/lib/components/scan-admin/tab-contents/auto-rejected-tab-content.js +8 -30
- package/lib/components/scan-admin/tab-contents/auto-rejected-tab-content.js.map +1 -1
- package/lib/components/scan-admin/tab-contents/block-list-tab-content.d.ts.map +1 -1
- package/lib/components/scan-admin/tab-contents/block-list-tab-content.js +17 -39
- package/lib/components/scan-admin/tab-contents/block-list-tab-content.js.map +1 -1
- package/lib/components/scan-admin/tab-contents/quarantined-tab-content.d.ts.map +1 -1
- package/lib/components/scan-admin/tab-contents/quarantined-tab-content.js +26 -48
- package/lib/components/scan-admin/tab-contents/quarantined-tab-content.js.map +1 -1
- package/lib/components/scan-admin/tab-contents/scans-tab-content.d.ts.map +1 -1
- package/lib/components/scan-admin/tab-contents/scans-tab-content.js +15 -37
- package/lib/components/scan-admin/tab-contents/scans-tab-content.js.map +1 -1
- package/lib/components/scan-admin/toolbars/counts-toolbar.d.ts.map +1 -1
- package/lib/components/scan-admin/toolbars/counts-toolbar.js +70 -94
- package/lib/components/scan-admin/toolbars/counts-toolbar.js.map +1 -1
- package/lib/components/scan-admin/toolbars/search-toolbar.d.ts +5 -4
- package/lib/components/scan-admin/toolbars/search-toolbar.d.ts.map +1 -1
- package/lib/components/scan-admin/toolbars/search-toolbar.js +72 -98
- package/lib/components/scan-admin/toolbars/search-toolbar.js.map +1 -1
- package/lib/components/scan-admin/toolbars/tab-toolbar.d.ts +1 -1
- package/lib/components/scan-admin/toolbars/tab-toolbar.d.ts.map +1 -1
- package/lib/components/scan-admin/toolbars/tab-toolbar.js +3 -16
- package/lib/components/scan-admin/toolbars/tab-toolbar.js.map +1 -1
- package/lib/components/sidepanel/navigation-item.d.ts.map +1 -1
- package/lib/components/sidepanel/navigation-item.js +4 -9
- package/lib/components/sidepanel/navigation-item.js.map +1 -1
- package/lib/components/sidepanel/sidepanel.d.ts.map +1 -1
- package/lib/components/sidepanel/sidepanel.js +3 -13
- package/lib/components/sidepanel/sidepanel.js.map +1 -1
- package/lib/components/text-divider.d.ts.map +1 -1
- package/lib/components/text-divider.js +2 -11
- package/lib/components/text-divider.js.map +1 -1
- package/lib/components/timestamp.d.ts.map +1 -1
- package/lib/components/timestamp.js +2 -11
- package/lib/components/timestamp.js.map +1 -1
- package/lib/context/scan-admin/scan-actions.d.ts +2 -1
- package/lib/context/scan-admin/scan-actions.d.ts.map +1 -1
- package/lib/context/scan-admin/scan-actions.js.map +1 -1
- package/lib/context/scan-admin/scan-api-actions.d.ts +3 -3
- package/lib/context/scan-admin/scan-api-actions.d.ts.map +1 -1
- package/lib/context/scan-admin/scan-api-actions.js.map +1 -1
- package/lib/context/scan-admin/scan-api-effects.d.ts +7 -7
- package/lib/context/scan-admin/scan-api-effects.d.ts.map +1 -1
- package/lib/context/scan-admin/scan-api-effects.js.map +1 -1
- package/lib/context/scan-admin/scan-context-types.d.ts +9 -9
- package/lib/context/scan-admin/scan-context-types.d.ts.map +1 -1
- package/lib/context/scan-admin/scan-context.d.ts +2 -2
- package/lib/context/scan-admin/scan-context.d.ts.map +1 -1
- package/lib/context/scan-admin/scan-context.js +3 -2
- package/lib/context/scan-admin/scan-context.js.map +1 -1
- package/lib/context/scan-admin/scan-helpers.d.ts.map +1 -1
- package/lib/context/scan-admin/scan-helpers.js.map +1 -1
- package/lib/context/scan-admin/scan-reducer.d.ts.map +1 -1
- package/lib/context/scan-admin/scan-reducer.js.map +1 -1
- package/lib/context/scan-admin/scan-types.js +1 -1
- package/lib/context/scan-admin/scan-types.js.map +1 -1
- package/lib/context.d.ts +0 -1
- package/lib/context.d.ts.map +1 -1
- package/lib/default/about.d.ts.map +1 -1
- package/lib/default/about.js +2 -22
- package/lib/default/about.js.map +1 -1
- package/lib/default/default-app.js +13 -15
- package/lib/default/default-app.js.map +1 -1
- package/lib/default/login.d.ts.map +1 -1
- package/lib/default/login.js +3 -7
- package/lib/default/login.js.map +1 -1
- package/lib/default/menu-content.d.ts +5 -8
- package/lib/default/menu-content.d.ts.map +1 -1
- package/lib/default/menu-content.js +21 -91
- package/lib/default/menu-content.js.map +1 -1
- package/lib/default/openvsx-registry-logo.d.ts.map +1 -1
- package/lib/default/openvsx-registry-logo.js +2 -14
- package/lib/default/openvsx-registry-logo.js.map +1 -1
- package/lib/default/page-settings.js +18 -27
- package/lib/default/page-settings.js.map +1 -1
- package/lib/extension-registry-service.d.ts +24 -1
- package/lib/extension-registry-service.d.ts.map +1 -1
- package/lib/extension-registry-service.js +169 -2
- package/lib/extension-registry-service.js.map +1 -1
- package/lib/extension-registry-types.d.ts +57 -0
- package/lib/extension-registry-types.d.ts.map +1 -1
- package/lib/extension-registry-types.js +16 -0
- package/lib/extension-registry-types.js.map +1 -1
- package/lib/header-menu.d.ts.map +1 -1
- package/lib/header-menu.js +8 -11
- package/lib/header-menu.js.map +1 -1
- package/lib/hooks/scan-admin/use-auto-rejected-tab.d.ts +1 -2
- package/lib/hooks/scan-admin/use-auto-rejected-tab.d.ts.map +1 -1
- package/lib/hooks/scan-admin/use-dialogs.d.ts +1 -1
- package/lib/hooks/scan-admin/use-dialogs.d.ts.map +1 -1
- package/lib/hooks/scan-admin/use-file-list-tab.d.ts +0 -1
- package/lib/hooks/scan-admin/use-file-list-tab.d.ts.map +1 -1
- package/lib/hooks/scan-admin/use-pagination.js.map +1 -1
- package/lib/hooks/scan-admin/use-quarantined-tab.d.ts +1 -2
- package/lib/hooks/scan-admin/use-quarantined-tab.d.ts.map +1 -1
- package/lib/hooks/scan-admin/use-quarantined-tab.js +2 -3
- package/lib/hooks/scan-admin/use-quarantined-tab.js.map +1 -1
- package/lib/hooks/scan-admin/use-query-params-state.d.ts +15 -0
- package/lib/hooks/scan-admin/use-query-params-state.d.ts.map +1 -0
- package/lib/hooks/scan-admin/use-query-params-state.js +44 -0
- package/lib/hooks/scan-admin/use-query-params-state.js.map +1 -0
- package/lib/hooks/scan-admin/use-scan-card-state.d.ts +3 -3
- package/lib/hooks/scan-admin/use-scan-card-state.d.ts.map +1 -1
- package/lib/hooks/scan-admin/use-scan-card-state.js +1 -1
- package/lib/hooks/scan-admin/use-scan-card-state.js.map +1 -1
- package/lib/hooks/scan-admin/use-scan-filters.d.ts +3 -4
- package/lib/hooks/scan-admin/use-scan-filters.d.ts.map +1 -1
- package/lib/hooks/scan-admin/use-scans-tab.d.ts +1 -2
- package/lib/hooks/scan-admin/use-scans-tab.d.ts.map +1 -1
- package/lib/hooks/scan-admin/use-scans-tab.js.map +1 -1
- package/lib/hooks/scan-admin/use-search.d.ts +0 -1
- package/lib/hooks/scan-admin/use-search.d.ts.map +1 -1
- package/lib/hooks/scan-admin/use-tab-navigation.js.map +1 -1
- package/lib/hooks/scan-admin/use-url-sync.js.map +1 -1
- package/lib/main.d.ts.map +1 -1
- package/lib/main.js +15 -21
- package/lib/main.js.map +1 -1
- package/lib/not-found.d.ts.map +1 -1
- package/lib/not-found.js +2 -5
- package/lib/not-found.js.map +1 -1
- package/lib/other-pages.d.ts.map +1 -1
- package/lib/other-pages.js +7 -24
- package/lib/other-pages.js.map +1 -1
- package/lib/pages/admin-dashboard/admin-dashboard.d.ts +4 -0
- package/lib/pages/admin-dashboard/admin-dashboard.d.ts.map +1 -1
- package/lib/pages/admin-dashboard/admin-dashboard.js +43 -39
- package/lib/pages/admin-dashboard/admin-dashboard.js.map +1 -1
- package/lib/pages/admin-dashboard/components/data-grid-filter-operators.d.ts +40 -0
- package/lib/pages/admin-dashboard/components/data-grid-filter-operators.d.ts.map +1 -0
- package/lib/pages/admin-dashboard/components/data-grid-filter-operators.js +81 -0
- package/lib/pages/admin-dashboard/components/data-grid-filter-operators.js.map +1 -0
- package/lib/pages/admin-dashboard/components/index.d.ts +14 -0
- package/lib/pages/admin-dashboard/components/index.d.ts.map +1 -0
- package/lib/pages/admin-dashboard/components/index.js +14 -0
- package/lib/pages/admin-dashboard/components/index.js.map +1 -0
- package/lib/pages/admin-dashboard/customers/customer-form-dialog.d.ts +23 -0
- package/lib/pages/admin-dashboard/customers/customer-form-dialog.d.ts.map +1 -0
- package/lib/pages/admin-dashboard/customers/customer-form-dialog.js +206 -0
- package/lib/pages/admin-dashboard/customers/customer-form-dialog.js.map +1 -0
- package/lib/pages/admin-dashboard/customers/customers.d.ts +15 -0
- package/lib/pages/admin-dashboard/customers/customers.d.ts.map +1 -0
- package/lib/pages/admin-dashboard/customers/customers.js +156 -0
- package/lib/pages/admin-dashboard/customers/customers.js.map +1 -0
- package/lib/pages/admin-dashboard/customers/delete-customer-dialog.d.ts +23 -0
- package/lib/pages/admin-dashboard/customers/delete-customer-dialog.d.ts.map +1 -0
- package/lib/pages/admin-dashboard/customers/delete-customer-dialog.js +47 -0
- package/lib/pages/admin-dashboard/customers/delete-customer-dialog.js.map +1 -0
- package/lib/pages/admin-dashboard/extension-admin.d.ts.map +1 -1
- package/lib/pages/admin-dashboard/extension-admin.js +20 -18
- package/lib/pages/admin-dashboard/extension-admin.js.map +1 -1
- package/lib/pages/admin-dashboard/extension-remove-dialog.d.ts.map +1 -1
- package/lib/pages/admin-dashboard/extension-remove-dialog.js +13 -31
- package/lib/pages/admin-dashboard/extension-remove-dialog.js.map +1 -1
- package/lib/pages/admin-dashboard/extension-version-container.d.ts.map +1 -1
- package/lib/pages/admin-dashboard/extension-version-container.js +26 -53
- package/lib/pages/admin-dashboard/extension-version-container.js.map +1 -1
- package/lib/pages/admin-dashboard/logs/logs.d.ts +15 -0
- package/lib/pages/admin-dashboard/logs/logs.d.ts.map +1 -0
- package/lib/pages/admin-dashboard/logs/logs.js +133 -0
- package/lib/pages/admin-dashboard/logs/logs.js.map +1 -0
- package/lib/pages/admin-dashboard/namespace-admin.d.ts.map +1 -1
- package/lib/pages/admin-dashboard/namespace-admin.js +14 -22
- package/lib/pages/admin-dashboard/namespace-admin.js.map +1 -1
- package/lib/pages/admin-dashboard/namespace-change-dialog.d.ts.map +1 -1
- package/lib/pages/admin-dashboard/namespace-change-dialog.js +14 -24
- package/lib/pages/admin-dashboard/namespace-change-dialog.js.map +1 -1
- package/lib/pages/admin-dashboard/namespace-input.d.ts +1 -0
- package/lib/pages/admin-dashboard/namespace-input.d.ts.map +1 -1
- package/lib/pages/admin-dashboard/namespace-input.js +17 -19
- package/lib/pages/admin-dashboard/namespace-input.js.map +1 -1
- package/lib/pages/admin-dashboard/publisher-admin.d.ts +2 -2
- package/lib/pages/admin-dashboard/publisher-admin.d.ts.map +1 -1
- package/lib/pages/admin-dashboard/publisher-admin.js +18 -22
- package/lib/pages/admin-dashboard/publisher-admin.js.map +1 -1
- package/lib/pages/admin-dashboard/publisher-details.d.ts.map +1 -1
- package/lib/pages/admin-dashboard/publisher-details.js +5 -28
- package/lib/pages/admin-dashboard/publisher-details.js.map +1 -1
- package/lib/pages/admin-dashboard/publisher-revoke-dialog.d.ts.map +1 -1
- package/lib/pages/admin-dashboard/publisher-revoke-dialog.js +22 -51
- package/lib/pages/admin-dashboard/publisher-revoke-dialog.js.map +1 -1
- package/lib/pages/admin-dashboard/publisher-revoke-tokens-button.d.ts.map +1 -1
- package/lib/pages/admin-dashboard/publisher-revoke-tokens-button.js +12 -12
- package/lib/pages/admin-dashboard/publisher-revoke-tokens-button.js.map +1 -1
- package/lib/pages/admin-dashboard/scan-admin.d.ts.map +1 -1
- package/lib/pages/admin-dashboard/scan-admin.js +5 -32
- package/lib/pages/admin-dashboard/scan-admin.js.map +1 -1
- package/lib/pages/admin-dashboard/search-list-container.d.ts.map +1 -1
- package/lib/pages/admin-dashboard/search-list-container.js +4 -19
- package/lib/pages/admin-dashboard/search-list-container.js.map +1 -1
- package/lib/pages/admin-dashboard/tiers/delete-tier-dialog.d.ts +23 -0
- package/lib/pages/admin-dashboard/tiers/delete-tier-dialog.d.ts.map +1 -0
- package/lib/pages/admin-dashboard/tiers/delete-tier-dialog.js +45 -0
- package/lib/pages/admin-dashboard/tiers/delete-tier-dialog.js.map +1 -0
- package/lib/pages/admin-dashboard/tiers/tier-form-dialog.d.ts +23 -0
- package/lib/pages/admin-dashboard/tiers/tier-form-dialog.d.ts.map +1 -0
- package/lib/pages/admin-dashboard/tiers/tier-form-dialog.js +174 -0
- package/lib/pages/admin-dashboard/tiers/tier-form-dialog.js.map +1 -0
- package/lib/pages/admin-dashboard/tiers/tiers.d.ts +15 -0
- package/lib/pages/admin-dashboard/tiers/tiers.d.ts.map +1 -0
- package/lib/pages/admin-dashboard/tiers/tiers.js +159 -0
- package/lib/pages/admin-dashboard/tiers/tiers.js.map +1 -0
- package/lib/pages/admin-dashboard/usage-stats/usage-stats-chart.d.ts +23 -0
- package/lib/pages/admin-dashboard/usage-stats/usage-stats-chart.d.ts.map +1 -0
- package/lib/pages/admin-dashboard/usage-stats/usage-stats-chart.js +87 -0
- package/lib/pages/admin-dashboard/usage-stats/usage-stats-chart.js.map +1 -0
- package/lib/pages/admin-dashboard/usage-stats/usage-stats-search.d.ts +26 -0
- package/lib/pages/admin-dashboard/usage-stats/usage-stats-search.d.ts.map +1 -0
- package/lib/pages/admin-dashboard/usage-stats/usage-stats-search.js +35 -0
- package/lib/pages/admin-dashboard/usage-stats/usage-stats-search.js.map +1 -0
- package/lib/pages/admin-dashboard/usage-stats/usage-stats-utils.d.ts +14 -0
- package/lib/pages/admin-dashboard/usage-stats/usage-stats-utils.d.ts.map +1 -0
- package/lib/pages/admin-dashboard/usage-stats/usage-stats-utils.js +16 -0
- package/lib/pages/admin-dashboard/usage-stats/usage-stats-utils.js.map +1 -0
- package/lib/pages/admin-dashboard/usage-stats/usage-stats.d.ts +15 -0
- package/lib/pages/admin-dashboard/usage-stats/usage-stats.d.ts.map +1 -0
- package/lib/pages/admin-dashboard/usage-stats/usage-stats.js +102 -0
- package/lib/pages/admin-dashboard/usage-stats/usage-stats.js.map +1 -0
- package/lib/pages/admin-dashboard/welcome.d.ts.map +1 -1
- package/lib/pages/admin-dashboard/welcome.js +3 -27
- package/lib/pages/admin-dashboard/welcome.js.map +1 -1
- package/lib/pages/extension-detail/extension-detail-changes.d.ts.map +1 -1
- package/lib/pages/extension-detail/extension-detail-changes.js +27 -33
- package/lib/pages/extension-detail/extension-detail-changes.js.map +1 -1
- package/lib/pages/extension-detail/extension-detail-downloads-menu.d.ts.map +1 -1
- package/lib/pages/extension-detail/extension-detail-downloads-menu.js +6 -9
- package/lib/pages/extension-detail/extension-detail-downloads-menu.js.map +1 -1
- package/lib/pages/extension-detail/extension-detail-overview.d.ts.map +1 -1
- package/lib/pages/extension-detail/extension-detail-overview.js +66 -133
- package/lib/pages/extension-detail/extension-detail-overview.js.map +1 -1
- package/lib/pages/extension-detail/extension-detail-reviews.d.ts.map +1 -1
- package/lib/pages/extension-detail/extension-detail-reviews.js +53 -75
- package/lib/pages/extension-detail/extension-detail-reviews.js.map +1 -1
- package/lib/pages/extension-detail/extension-detail.d.ts.map +1 -1
- package/lib/pages/extension-detail/extension-detail.js +56 -129
- package/lib/pages/extension-detail/extension-detail.js.map +1 -1
- package/lib/pages/extension-detail/extension-rating-star-setter.d.ts.map +1 -1
- package/lib/pages/extension-detail/extension-rating-star-setter.js +4 -3
- package/lib/pages/extension-detail/extension-rating-star-setter.js.map +1 -1
- package/lib/pages/extension-detail/extension-rating-stars.d.ts.map +1 -1
- package/lib/pages/extension-detail/extension-rating-stars.js +5 -16
- package/lib/pages/extension-detail/extension-rating-stars.js.map +1 -1
- package/lib/pages/extension-detail/extension-review-dialog.d.ts.map +1 -1
- package/lib/pages/extension-detail/extension-review-dialog.js +15 -28
- package/lib/pages/extension-detail/extension-review-dialog.js.map +1 -1
- package/lib/pages/extension-list/extension-list-container.d.ts.map +1 -1
- package/lib/pages/extension-list/extension-list-container.js +3 -4
- package/lib/pages/extension-list/extension-list-container.js.map +1 -1
- package/lib/pages/extension-list/extension-list-header.d.ts.map +1 -1
- package/lib/pages/extension-list/extension-list-header.js +55 -74
- package/lib/pages/extension-list/extension-list-header.js.map +1 -1
- package/lib/pages/extension-list/extension-list-item.d.ts.map +1 -1
- package/lib/pages/extension-list/extension-list-item.js +13 -29
- package/lib/pages/extension-list/extension-list-item.js.map +1 -1
- package/lib/pages/extension-list/extension-list-searchfield.d.ts.map +1 -1
- package/lib/pages/extension-list/extension-list-searchfield.js +17 -20
- package/lib/pages/extension-list/extension-list-searchfield.js.map +1 -1
- package/lib/pages/extension-list/extension-list.d.ts.map +1 -1
- package/lib/pages/extension-list/extension-list.js +15 -19
- package/lib/pages/extension-list/extension-list.js.map +1 -1
- package/lib/pages/namespace-detail/namespace-detail.d.ts.map +1 -1
- package/lib/pages/namespace-detail/namespace-detail.js +50 -87
- package/lib/pages/namespace-detail/namespace-detail.js.map +1 -1
- package/lib/pages/user/add-namespace-member-dialog.d.ts.map +1 -1
- package/lib/pages/user/add-namespace-member-dialog.js +27 -40
- package/lib/pages/user/add-namespace-member-dialog.js.map +1 -1
- package/lib/pages/user/avatar.d.ts.map +1 -1
- package/lib/pages/user/avatar.js +12 -28
- package/lib/pages/user/avatar.js.map +1 -1
- package/lib/pages/user/create-namespace-dialog.d.ts.map +1 -1
- package/lib/pages/user/create-namespace-dialog.js +12 -20
- package/lib/pages/user/create-namespace-dialog.js.map +1 -1
- package/lib/pages/user/generate-token-dialog.d.ts.map +1 -1
- package/lib/pages/user/generate-token-dialog.js +18 -31
- package/lib/pages/user/generate-token-dialog.js.map +1 -1
- package/lib/pages/user/logout.d.ts +3 -2
- package/lib/pages/user/logout.d.ts.map +1 -1
- package/lib/pages/user/logout.js +15 -15
- package/lib/pages/user/logout.js.map +1 -1
- package/lib/pages/user/publish-extension-dialog.d.ts.map +1 -1
- package/lib/pages/user/publish-extension-dialog.js +25 -46
- package/lib/pages/user/publish-extension-dialog.js.map +1 -1
- package/lib/pages/user/user-extension-list.d.ts.map +1 -1
- package/lib/pages/user/user-extension-list.js +5 -16
- package/lib/pages/user/user-extension-list.js.map +1 -1
- package/lib/pages/user/user-namespace-details.d.ts.map +1 -1
- package/lib/pages/user/user-namespace-details.js +53 -136
- package/lib/pages/user/user-namespace-details.js.map +1 -1
- package/lib/pages/user/user-namespace-extension-list-item.d.ts.map +1 -1
- package/lib/pages/user/user-namespace-extension-list-item.js +14 -39
- package/lib/pages/user/user-namespace-extension-list-item.js.map +1 -1
- package/lib/pages/user/user-namespace-extension-list.d.ts.map +1 -1
- package/lib/pages/user/user-namespace-extension-list.js +14 -15
- package/lib/pages/user/user-namespace-extension-list.js.map +1 -1
- package/lib/pages/user/user-namespace-member-component.d.ts.map +1 -1
- package/lib/pages/user/user-namespace-member-component.js +24 -34
- package/lib/pages/user/user-namespace-member-component.js.map +1 -1
- package/lib/pages/user/user-namespace-member-list.d.ts.map +1 -1
- package/lib/pages/user/user-namespace-member-list.js +20 -24
- package/lib/pages/user/user-namespace-member-list.js.map +1 -1
- package/lib/pages/user/user-publisher-agreement.d.ts.map +1 -1
- package/lib/pages/user/user-publisher-agreement.js +21 -52
- package/lib/pages/user/user-publisher-agreement.js.map +1 -1
- package/lib/pages/user/user-setting-tabs.d.ts.map +1 -1
- package/lib/pages/user/user-setting-tabs.js +2 -15
- package/lib/pages/user/user-setting-tabs.js.map +1 -1
- package/lib/pages/user/user-settings-delete-extension.d.ts.map +1 -1
- package/lib/pages/user/user-settings-delete-extension.js +14 -15
- package/lib/pages/user/user-settings-delete-extension.js.map +1 -1
- package/lib/pages/user/user-settings-extensions.d.ts.map +1 -1
- package/lib/pages/user/user-settings-extensions.js +22 -30
- package/lib/pages/user/user-settings-extensions.js.map +1 -1
- package/lib/pages/user/user-settings-namespace-detail.d.ts +2 -2
- package/lib/pages/user/user-settings-namespace-detail.d.ts.map +1 -1
- package/lib/pages/user/user-settings-namespace-detail.js +27 -45
- package/lib/pages/user/user-settings-namespace-detail.js.map +1 -1
- package/lib/pages/user/user-settings-namespaces.d.ts.map +1 -1
- package/lib/pages/user/user-settings-namespaces.js +33 -46
- package/lib/pages/user/user-settings-namespaces.js.map +1 -1
- package/lib/pages/user/user-settings-profile.d.ts.map +1 -1
- package/lib/pages/user/user-settings-profile.js +10 -29
- package/lib/pages/user/user-settings-profile.js.map +1 -1
- package/lib/pages/user/user-settings-tokens.d.ts.map +1 -1
- package/lib/pages/user/user-settings-tokens.js +24 -62
- package/lib/pages/user/user-settings-tokens.js.map +1 -1
- package/lib/pages/user/user-settings.d.ts.map +1 -1
- package/lib/pages/user/user-settings.js +18 -35
- package/lib/pages/user/user-settings.js.map +1 -1
- package/lib/server-request.d.ts +1 -1
- package/lib/server-request.d.ts.map +1 -1
- package/lib/server-request.js +10 -6
- package/lib/server-request.js.map +1 -1
- package/lib/utils.d.ts.map +1 -1
- package/lib/utils.js +48 -20
- package/lib/utils.js.map +1 -1
- package/package.json +44 -38
- package/src/components/banner.tsx +1 -1
- package/src/components/button-with-progress.tsx +1 -1
- package/src/components/copy-to-clipboard.tsx +2 -1
- package/src/components/delayed-load-indicator.tsx +2 -2
- package/src/components/error-dialog.tsx +1 -1
- package/src/components/hover-popover.tsx +1 -1
- package/src/components/info-dialog.tsx +1 -1
- package/src/components/sanitized-markdown.tsx +1 -1
- package/src/components/scan-admin/common/auto-refresh.tsx +1 -1
- package/src/components/scan-admin/common/conditional-tooltip.tsx +3 -3
- package/src/components/scan-admin/common/file-table.tsx +1 -1
- package/src/components/scan-admin/common/tab-panel.tsx +1 -1
- package/src/components/scan-admin/dialogs/file-dialog.tsx +1 -1
- package/src/components/scan-admin/dialogs/quarantine-dialog.tsx +1 -1
- package/src/components/scan-admin/scan-card/scan-card-content.tsx +380 -408
- package/src/components/scan-admin/scan-card/scan-card-expand-strip-badges.tsx +2 -2
- package/src/components/scan-admin/scan-card/scan-card-expand-strip.tsx +2 -2
- package/src/components/scan-admin/scan-card/scan-card-expanded-content.tsx +2 -2
- package/src/components/scan-admin/scan-card/scan-card-header.tsx +37 -8
- package/src/components/scan-admin/scan-card/scan-card.tsx +5 -5
- package/src/components/scan-admin/scan-card/scan-detail-card.tsx +1 -1
- package/src/components/scan-admin/tab-contents/allow-list-tab-content.tsx +1 -1
- package/src/components/scan-admin/tab-contents/auto-rejected-tab-content.tsx +1 -1
- package/src/components/scan-admin/tab-contents/block-list-tab-content.tsx +1 -1
- package/src/components/scan-admin/tab-contents/quarantined-tab-content.tsx +1 -1
- package/src/components/scan-admin/tab-contents/scans-tab-content.tsx +1 -1
- package/src/components/scan-admin/toolbars/counts-toolbar.tsx +1 -1
- package/src/components/scan-admin/toolbars/search-toolbar.tsx +6 -6
- package/src/components/scan-admin/toolbars/tab-toolbar.tsx +1 -1
- package/src/components/sidepanel/navigation-item.tsx +1 -1
- package/src/components/sidepanel/sidepanel.tsx +1 -1
- package/src/components/text-divider.tsx +1 -1
- package/src/components/timestamp.tsx +1 -1
- package/src/context/scan-admin/scan-actions.ts +8 -7
- package/src/context/scan-admin/scan-api-actions.ts +5 -4
- package/src/context/scan-admin/scan-api-effects.ts +12 -11
- package/src/context/scan-admin/scan-context-types.ts +9 -9
- package/src/context/scan-admin/scan-context.tsx +2 -2
- package/src/default/about.tsx +1 -1
- package/src/default/default-app.tsx +1 -1
- package/src/default/login.tsx +2 -1
- package/src/default/menu-content.tsx +70 -96
- package/src/default/openvsx-registry-logo.tsx +1 -1
- package/src/default/page-settings.tsx +1 -1
- package/src/default/server.ts +1 -1
- package/src/extension-registry-service.ts +180 -2
- package/src/extension-registry-types.ts +68 -0
- package/src/header-menu.tsx +1 -1
- package/src/hooks/scan-admin/use-dialogs.ts +1 -1
- package/src/hooks/scan-admin/use-quarantined-tab.ts +2 -3
- package/src/hooks/scan-admin/use-query-params-state.ts +55 -0
- package/src/hooks/scan-admin/use-scan-card-state.ts +3 -2
- package/src/hooks/scan-admin/use-url-sync.ts +1 -1
- package/src/main.tsx +1 -1
- package/src/not-found.tsx +1 -1
- package/src/other-pages.tsx +1 -1
- package/src/pages/admin-dashboard/admin-dashboard.tsx +52 -3
- package/src/pages/admin-dashboard/components/data-grid-filter-operators.tsx +127 -0
- package/src/pages/admin-dashboard/components/index.ts +18 -0
- package/src/pages/admin-dashboard/customers/customer-form-dialog.tsx +347 -0
- package/src/pages/admin-dashboard/customers/customers.tsx +278 -0
- package/src/pages/admin-dashboard/customers/delete-customer-dialog.tsx +93 -0
- package/src/pages/admin-dashboard/extension-admin.tsx +5 -3
- package/src/pages/admin-dashboard/extension-remove-dialog.tsx +1 -1
- package/src/pages/admin-dashboard/extension-version-container.tsx +1 -1
- package/src/pages/admin-dashboard/logs/logs.tsx +213 -0
- package/src/pages/admin-dashboard/namespace-admin.tsx +1 -1
- package/src/pages/admin-dashboard/namespace-change-dialog.tsx +1 -1
- package/src/pages/admin-dashboard/namespace-input.tsx +4 -2
- package/src/pages/admin-dashboard/publisher-admin.tsx +5 -5
- package/src/pages/admin-dashboard/publisher-details.tsx +1 -1
- package/src/pages/admin-dashboard/publisher-revoke-dialog.tsx +1 -1
- package/src/pages/admin-dashboard/publisher-revoke-tokens-button.tsx +1 -1
- package/src/pages/admin-dashboard/scan-admin.tsx +3 -2
- package/src/pages/admin-dashboard/search-list-container.tsx +1 -1
- package/src/pages/admin-dashboard/tiers/delete-tier-dialog.tsx +83 -0
- package/src/pages/admin-dashboard/tiers/tier-form-dialog.tsx +373 -0
- package/src/pages/admin-dashboard/tiers/tiers.tsx +254 -0
- package/src/pages/admin-dashboard/usage-stats/usage-stats-chart.tsx +189 -0
- package/src/pages/admin-dashboard/usage-stats/usage-stats-search.tsx +83 -0
- package/src/pages/admin-dashboard/usage-stats/usage-stats-utils.ts +16 -0
- package/src/pages/admin-dashboard/usage-stats/usage-stats.tsx +127 -0
- package/src/pages/admin-dashboard/welcome.tsx +5 -1
- package/src/pages/extension-detail/extension-detail-changes.tsx +1 -1
- package/src/pages/extension-detail/extension-detail-downloads-menu.tsx +1 -1
- package/src/pages/extension-detail/extension-detail-overview.tsx +17 -3
- package/src/pages/extension-detail/extension-detail-reviews.tsx +53 -41
- package/src/pages/extension-detail/extension-detail.tsx +0 -1
- package/src/pages/extension-detail/extension-rating-star-setter.tsx +1 -1
- package/src/pages/extension-detail/extension-rating-stars.tsx +2 -2
- package/src/pages/extension-detail/extension-review-dialog.tsx +1 -1
- package/src/pages/extension-list/extension-list-container.tsx +1 -1
- package/src/pages/extension-list/extension-list-header.tsx +1 -1
- package/src/pages/extension-list/extension-list-item.tsx +1 -1
- package/src/pages/extension-list/extension-list-searchfield.tsx +1 -1
- package/src/pages/extension-list/extension-list.tsx +2 -2
- package/src/pages/namespace-detail/namespace-detail.tsx +1 -1
- package/src/pages/user/add-namespace-member-dialog.tsx +1 -1
- package/src/pages/user/avatar.tsx +31 -36
- package/src/pages/user/create-namespace-dialog.tsx +1 -1
- package/src/pages/user/generate-token-dialog.tsx +1 -1
- package/src/pages/user/logout.tsx +6 -4
- package/src/pages/user/publish-extension-dialog.tsx +1 -1
- package/src/pages/user/user-extension-list.tsx +1 -1
- package/src/pages/user/user-namespace-details.tsx +1 -1
- package/src/pages/user/user-namespace-extension-list-item.tsx +2 -1
- package/src/pages/user/user-namespace-extension-list.tsx +1 -1
- package/src/pages/user/user-namespace-member-component.tsx +1 -1
- package/src/pages/user/user-namespace-member-list.tsx +1 -1
- package/src/pages/user/user-publisher-agreement.tsx +1 -1
- package/src/pages/user/user-setting-tabs.tsx +1 -1
- package/src/pages/user/user-settings-delete-extension.tsx +1 -1
- package/src/pages/user/user-settings-extensions.tsx +2 -2
- package/src/pages/user/user-settings-namespace-detail.tsx +1 -1
- package/src/pages/user/user-settings-namespaces.tsx +1 -1
- package/src/pages/user/user-settings-profile.tsx +1 -1
- package/src/pages/user/user-settings-tokens.tsx +3 -4
- package/src/pages/user/user-settings.tsx +1 -1
- package/src/server-request.ts +8 -4
- package/src/utils.ts +39 -16
- package/lib/default/server.d.ts +0 -11
- package/lib/default/server.d.ts.map +0 -1
- package/lib/default/server.js +0 -50
- package/lib/default/server.js.map +0 -1
|
@@ -8,10 +8,9 @@
|
|
|
8
8
|
* SPDX-License-Identifier: EPL-2.0
|
|
9
9
|
********************************************************************************/
|
|
10
10
|
|
|
11
|
-
import
|
|
11
|
+
import { FunctionComponent, PropsWithChildren, useContext, useRef } from 'react';
|
|
12
12
|
import { Typography, MenuItem, Link, Button, IconButton, Accordion, AccordionSummary, Avatar, AccordionDetails } from '@mui/material';
|
|
13
|
-
import { useLocation } from 'react-router-dom';
|
|
14
|
-
import { Link as RouteLink } from 'react-router-dom';
|
|
13
|
+
import { useLocation, Link as RouteLink } from 'react-router-dom';
|
|
15
14
|
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
|
|
16
15
|
import GitHubIcon from '@mui/icons-material/GitHub';
|
|
17
16
|
import MenuBookIcon from '@mui/icons-material/MenuBook';
|
|
@@ -31,21 +30,13 @@ import { LogoutForm } from '../pages/user/logout';
|
|
|
31
30
|
import { LoginComponent } from './login';
|
|
32
31
|
|
|
33
32
|
//-------------------- Mobile View --------------------//
|
|
34
|
-
|
|
35
|
-
export const MobileMenuItem = styled(MenuItem)({
|
|
36
|
-
cursor: 'auto',
|
|
37
|
-
'&>a': {
|
|
38
|
-
textDecoration: 'none'
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
|
|
42
33
|
export const itemIcon = {
|
|
43
34
|
mr: 1,
|
|
44
35
|
width: '16px',
|
|
45
36
|
height: '16px',
|
|
46
37
|
};
|
|
47
38
|
|
|
48
|
-
export const
|
|
39
|
+
export const MenuItemText: FunctionComponent<PropsWithChildren> = ({ children }) => {
|
|
49
40
|
return (
|
|
50
41
|
<Typography variant='body2' color='text.primary' sx={{ display: 'flex', alignItems: 'center', textTransform: 'none' }}>
|
|
51
42
|
{children}
|
|
@@ -56,6 +47,7 @@ export const MobileMenuItemText: FunctionComponent<PropsWithChildren> = ({ child
|
|
|
56
47
|
export const MobileUserAvatar: FunctionComponent = () => {
|
|
57
48
|
const context = useContext(MainContext);
|
|
58
49
|
const user = context.user;
|
|
50
|
+
const logoutFormRef = useRef<HTMLFormElement>(null);
|
|
59
51
|
if (!user) {
|
|
60
52
|
return null;
|
|
61
53
|
}
|
|
@@ -66,52 +58,46 @@ export const MobileUserAvatar: FunctionComponent = () => {
|
|
|
66
58
|
aria-controls='user-actions'
|
|
67
59
|
id='user-avatar'
|
|
68
60
|
>
|
|
69
|
-
<
|
|
61
|
+
<MenuItemText>
|
|
70
62
|
<Avatar
|
|
71
63
|
src={user.avatarUrl}
|
|
72
64
|
alt={user.loginName}
|
|
73
65
|
variant='rounded'
|
|
74
66
|
sx={itemIcon} />
|
|
75
67
|
{user.loginName}
|
|
76
|
-
</
|
|
68
|
+
</MenuItemText>
|
|
77
69
|
</AccordionSummary>
|
|
78
70
|
<AccordionDetails>
|
|
79
|
-
<
|
|
80
|
-
<
|
|
81
|
-
<
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
Settings
|
|
92
|
-
</MobileMenuItemText>
|
|
93
|
-
</RouteLink>
|
|
94
|
-
</MobileMenuItem>
|
|
71
|
+
<MenuItem component={Link} href={user.homepage}>
|
|
72
|
+
<MenuItemText>
|
|
73
|
+
<GitHubIcon sx={itemIcon} />
|
|
74
|
+
{user.loginName}
|
|
75
|
+
</MenuItemText>
|
|
76
|
+
</MenuItem>
|
|
77
|
+
<MenuItem component={RouteLink} to={UserSettingsRoutes.PROFILE}>
|
|
78
|
+
<MenuItemText>
|
|
79
|
+
<SettingsIcon sx={itemIcon} />
|
|
80
|
+
Settings
|
|
81
|
+
</MenuItemText>
|
|
82
|
+
</MenuItem>
|
|
95
83
|
{
|
|
96
84
|
user.role === 'admin'
|
|
97
|
-
? <
|
|
98
|
-
<
|
|
99
|
-
<
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
</RouteLink>
|
|
104
|
-
</MobileMenuItem>
|
|
85
|
+
? <MenuItem component={RouteLink} to={AdminDashboardRoutes.MAIN}>
|
|
86
|
+
<MenuItemText>
|
|
87
|
+
<AdminPanelSettingsIcon sx={itemIcon} />
|
|
88
|
+
Admin Dashboard
|
|
89
|
+
</MenuItemText>
|
|
90
|
+
</MenuItem>
|
|
105
91
|
: null
|
|
106
92
|
}
|
|
107
|
-
<
|
|
108
|
-
<LogoutForm>
|
|
109
|
-
<
|
|
93
|
+
<MenuItem onClick={() => logoutFormRef.current?.submit()}>
|
|
94
|
+
<LogoutForm ref={logoutFormRef}>
|
|
95
|
+
<MenuItemText>
|
|
110
96
|
<LogoutIcon sx={itemIcon} />
|
|
111
97
|
Log Out
|
|
112
|
-
</
|
|
98
|
+
</MenuItemText>
|
|
113
99
|
</LogoutForm>
|
|
114
|
-
</
|
|
100
|
+
</MenuItem>
|
|
115
101
|
</AccordionDetails>
|
|
116
102
|
</Accordion>;
|
|
117
103
|
};
|
|
@@ -125,63 +111,51 @@ export const MobileMenuContent: FunctionComponent = () => {
|
|
|
125
111
|
user ? (
|
|
126
112
|
<MobileUserAvatar />
|
|
127
113
|
) : (
|
|
128
|
-
<
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
<
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
/>
|
|
140
|
-
</MobileMenuItem>
|
|
114
|
+
<LoginComponent
|
|
115
|
+
loginProviders={loginProviders}
|
|
116
|
+
renderButton={(href, onClick) => (
|
|
117
|
+
<MenuItem component={Link} href={href} onClick={onClick}>
|
|
118
|
+
<MenuItemText>
|
|
119
|
+
<AccountBoxIcon sx={itemIcon} />
|
|
120
|
+
Log In
|
|
121
|
+
</MenuItemText>
|
|
122
|
+
</MenuItem>
|
|
123
|
+
)}
|
|
124
|
+
/>
|
|
141
125
|
)
|
|
142
126
|
)}
|
|
143
127
|
{loginProviders && !location.pathname.startsWith(UserSettingsRoutes.ROOT) && (
|
|
144
|
-
<
|
|
145
|
-
<
|
|
146
|
-
<
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
</RouteLink>
|
|
151
|
-
</MobileMenuItem>
|
|
128
|
+
<MenuItem component={RouteLink} to='/user-settings/extensions'>
|
|
129
|
+
<MenuItemText>
|
|
130
|
+
<PublishIcon sx={itemIcon} />
|
|
131
|
+
Publish Extension
|
|
132
|
+
</MenuItemText>
|
|
133
|
+
</MenuItem>
|
|
152
134
|
)}
|
|
153
|
-
<
|
|
154
|
-
<
|
|
155
|
-
<
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
</
|
|
176
|
-
</
|
|
177
|
-
<MobileMenuItem>
|
|
178
|
-
<RouteLink to='/about'>
|
|
179
|
-
<MobileMenuItemText>
|
|
180
|
-
<InfoIcon sx={itemIcon} />
|
|
181
|
-
About This Service
|
|
182
|
-
</MobileMenuItemText>
|
|
183
|
-
</RouteLink>
|
|
184
|
-
</MobileMenuItem>
|
|
135
|
+
<MenuItem component={Link} href='https://github.com/eclipse/openvsx' target='_blank'>
|
|
136
|
+
<MenuItemText>
|
|
137
|
+
<GitHubIcon sx={itemIcon} />
|
|
138
|
+
Source Code
|
|
139
|
+
</MenuItemText>
|
|
140
|
+
</MenuItem>
|
|
141
|
+
<MenuItem component={Link} href='https://github.com/eclipse/openvsx/wiki'>
|
|
142
|
+
<MenuItemText>
|
|
143
|
+
<MenuBookIcon sx={itemIcon} />
|
|
144
|
+
Documentation
|
|
145
|
+
</MenuItemText>
|
|
146
|
+
</MenuItem>
|
|
147
|
+
<MenuItem component={Link} href='https://join.slack.com/t/openvsxworkinggroup/shared_invite/zt-2y07y1ggy-ct3IfJljjGI6xWUQ9llv6A'>
|
|
148
|
+
<MenuItemText>
|
|
149
|
+
<ForumIcon sx={itemIcon} />
|
|
150
|
+
Slack Workspace
|
|
151
|
+
</MenuItemText>
|
|
152
|
+
</MenuItem>
|
|
153
|
+
<MenuItem component={RouteLink} to='/about'>
|
|
154
|
+
<MenuItemText>
|
|
155
|
+
<InfoIcon sx={itemIcon} />
|
|
156
|
+
About This Service
|
|
157
|
+
</MenuItemText>
|
|
158
|
+
</MenuItem>
|
|
185
159
|
</>;
|
|
186
160
|
};
|
|
187
161
|
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* SPDX-License-Identifier: EPL-2.0
|
|
9
9
|
********************************************************************************/
|
|
10
10
|
|
|
11
|
-
import
|
|
11
|
+
import { FunctionComponent } from 'react';
|
|
12
12
|
|
|
13
13
|
const OpenVSXLogo: FunctionComponent<{width: string, height: string, marginTop: string, prefersDarkMode: boolean }> = props => {
|
|
14
14
|
return (
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* SPDX-License-Identifier: EPL-2.0
|
|
9
9
|
********************************************************************************/
|
|
10
10
|
|
|
11
|
-
import
|
|
11
|
+
import { FunctionComponent, ReactNode, Suspense, lazy } from 'react';
|
|
12
12
|
import { Helmet } from 'react-helmet-async';
|
|
13
13
|
import { styled, Theme } from '@mui/material/styles';
|
|
14
14
|
import { Link, Typography, Box } from '@mui/material';
|
package/src/default/server.ts
CHANGED
|
@@ -44,7 +44,7 @@ if (args.indexOf('-ratelimit') != -1) {
|
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
// Serve static resources
|
|
47
|
-
const staticPath = path.join(__dirname, '..', '..', '
|
|
47
|
+
const staticPath = path.join(__dirname, '..', '..', 'dist');
|
|
48
48
|
app.use(express.static(staticPath));
|
|
49
49
|
|
|
50
50
|
// Enable react-router by forwarding the main page to all paths that don't match a resource
|
|
@@ -14,7 +14,8 @@ import {
|
|
|
14
14
|
SortOrder, UrlString, NamespaceMembershipList, PublisherInfo, SearchEntry, RegistryVersion,
|
|
15
15
|
LoginProviders, ScanResultJson, ScanCounts, ScanResultsResponse, ScanFilterOptions,
|
|
16
16
|
FilesResponse, FileDecisionCountsJson, ScanDecisionRequest, ScanDecisionResponse,
|
|
17
|
-
FileDecisionRequest, FileDecisionResponse, FileDecisionDeleteRequest, FileDecisionDeleteResponse
|
|
17
|
+
FileDecisionRequest, FileDecisionResponse, FileDecisionDeleteRequest, FileDecisionDeleteResponse,
|
|
18
|
+
Tier, TierList, Customer, CustomerList, UsageStatsList, LogPageableList,
|
|
18
19
|
} from './extension-registry-types';
|
|
19
20
|
import { createAbsoluteURL, addQuery } from './utils';
|
|
20
21
|
import { sendRequest, ErrorResponse } from './server-request';
|
|
@@ -396,7 +397,7 @@ export class ExtensionRegistryService {
|
|
|
396
397
|
payload: extensionPackage,
|
|
397
398
|
headers: headers,
|
|
398
399
|
endpoint: createAbsoluteURL([this.serverUrl, 'api', 'user', 'publish'])
|
|
399
|
-
});
|
|
400
|
+
}, false); // do not retry publishing an extension but show the explicit error received
|
|
400
401
|
}
|
|
401
402
|
|
|
402
403
|
async createNamespace(abortController: AbortController, name: string): Promise<Readonly<SuccessResult | ErrorResult>> {
|
|
@@ -499,6 +500,16 @@ export interface AdminService {
|
|
|
499
500
|
makeScanDecision(abortController: AbortController, request: ScanDecisionRequest): Promise<Readonly<ScanDecisionResponse>>
|
|
500
501
|
makeFileDecision(abortController: AbortController, request: FileDecisionRequest): Promise<Readonly<FileDecisionResponse>>
|
|
501
502
|
deleteFileDecisions(abortController: AbortController, request: FileDecisionDeleteRequest): Promise<Readonly<FileDecisionDeleteResponse>>
|
|
503
|
+
getTiers(abortController: AbortController): Promise<Readonly<TierList>>;
|
|
504
|
+
createTier(abortController: AbortController, tier: Tier): Promise<Readonly<Tier>>;
|
|
505
|
+
updateTier(abortController: AbortController, name: string, tier: Tier): Promise<Readonly<Tier>>;
|
|
506
|
+
deleteTier(abortController: AbortController, name: string): Promise<Readonly<SuccessResult | ErrorResult>>;
|
|
507
|
+
getCustomers(abortController: AbortController): Promise<Readonly<CustomerList>>;
|
|
508
|
+
createCustomer(abortController: AbortController, customer: Customer): Promise<Readonly<Customer>>;
|
|
509
|
+
updateCustomer(abortController: AbortController, name: string, customer: Customer): Promise<Readonly<Customer>>;
|
|
510
|
+
deleteCustomer(abortController: AbortController, name: string): Promise<Readonly<SuccessResult | ErrorResult>>;
|
|
511
|
+
getUsageStats(abortController: AbortController, customerName: string, date: Date): Promise<Readonly<UsageStatsList>>;
|
|
512
|
+
getLogs(abortController: AbortController, page?: number, size?: number, period?: string): Promise<Readonly<LogPageableList>>;
|
|
502
513
|
}
|
|
503
514
|
|
|
504
515
|
export interface AdminServiceConstructor {
|
|
@@ -808,6 +819,173 @@ export class AdminServiceImpl implements AdminService {
|
|
|
808
819
|
payload: request
|
|
809
820
|
});
|
|
810
821
|
}
|
|
822
|
+
|
|
823
|
+
async getTiers(abortController: AbortController): Promise<Readonly<TierList>> {
|
|
824
|
+
return sendRequest({
|
|
825
|
+
abortController,
|
|
826
|
+
endpoint: createAbsoluteURL([this.registry.serverUrl, 'admin', 'ratelimit', 'tiers']),
|
|
827
|
+
credentials: true
|
|
828
|
+
}, false);
|
|
829
|
+
}
|
|
830
|
+
|
|
831
|
+
async createTier(abortController: AbortController, tier: Tier): Promise<Readonly<Tier>> {
|
|
832
|
+
const csrfResponse = await this.registry.getCsrfToken(abortController);
|
|
833
|
+
const headers: Record<string, string> = {
|
|
834
|
+
'Content-Type': 'application/json;charset=UTF-8'
|
|
835
|
+
};
|
|
836
|
+
if (!isError(csrfResponse)) {
|
|
837
|
+
const csrfToken = csrfResponse as CsrfTokenJson;
|
|
838
|
+
headers[csrfToken.header] = csrfToken.value;
|
|
839
|
+
}
|
|
840
|
+
return sendRequest({
|
|
841
|
+
abortController,
|
|
842
|
+
method: 'POST',
|
|
843
|
+
payload: tier,
|
|
844
|
+
credentials: true,
|
|
845
|
+
endpoint: createAbsoluteURL([this.registry.serverUrl, 'admin', 'ratelimit', 'tiers', 'create']),
|
|
846
|
+
headers
|
|
847
|
+
}, false);
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
async updateTier(abortController: AbortController, name: string, tier: Tier): Promise<Readonly<Tier>> {
|
|
851
|
+
const csrfResponse = await this.registry.getCsrfToken(abortController);
|
|
852
|
+
const headers: Record<string, string> = {
|
|
853
|
+
'Content-Type': 'application/json;charset=UTF-8'
|
|
854
|
+
};
|
|
855
|
+
if (!isError(csrfResponse)) {
|
|
856
|
+
const csrfToken = csrfResponse as CsrfTokenJson;
|
|
857
|
+
headers[csrfToken.header] = csrfToken.value;
|
|
858
|
+
}
|
|
859
|
+
return sendRequest({
|
|
860
|
+
abortController,
|
|
861
|
+
method: 'PUT',
|
|
862
|
+
payload: tier,
|
|
863
|
+
credentials: true,
|
|
864
|
+
endpoint: createAbsoluteURL([this.registry.serverUrl, 'admin', 'ratelimit', 'tiers', name]),
|
|
865
|
+
headers
|
|
866
|
+
}, false);
|
|
867
|
+
}
|
|
868
|
+
|
|
869
|
+
async deleteTier(abortController: AbortController, name: string): Promise<SuccessResult | ErrorResult> {
|
|
870
|
+
const csrfResponse = await this.registry.getCsrfToken(abortController);
|
|
871
|
+
const headers: Record<string, string> = {
|
|
872
|
+
'Content-Type': 'application/json;charset=UTF-8'
|
|
873
|
+
};
|
|
874
|
+
if (!isError(csrfResponse)) {
|
|
875
|
+
const csrfToken = csrfResponse as CsrfTokenJson;
|
|
876
|
+
headers[csrfToken.header] = csrfToken.value;
|
|
877
|
+
}
|
|
878
|
+
return sendRequest({
|
|
879
|
+
abortController,
|
|
880
|
+
method: 'DELETE',
|
|
881
|
+
credentials: true,
|
|
882
|
+
endpoint: createAbsoluteURL([this.registry.serverUrl, 'admin', 'ratelimit', 'tiers', name]),
|
|
883
|
+
headers
|
|
884
|
+
}, false);
|
|
885
|
+
}
|
|
886
|
+
|
|
887
|
+
async getCustomers(abortController: AbortController): Promise<Readonly<CustomerList>> {
|
|
888
|
+
return sendRequest({
|
|
889
|
+
abortController,
|
|
890
|
+
endpoint: createAbsoluteURL([this.registry.serverUrl, 'admin', 'ratelimit', 'customers']),
|
|
891
|
+
credentials: true
|
|
892
|
+
}, false);
|
|
893
|
+
}
|
|
894
|
+
|
|
895
|
+
async createCustomer(abortController: AbortController, customer: Customer): Promise<Readonly<Customer>> {
|
|
896
|
+
const csrfResponse = await this.registry.getCsrfToken(abortController);
|
|
897
|
+
const headers: Record<string, string> = {
|
|
898
|
+
'Content-Type': 'application/json;charset=UTF-8'
|
|
899
|
+
};
|
|
900
|
+
if (!isError(csrfResponse)) {
|
|
901
|
+
const csrfToken = csrfResponse as CsrfTokenJson;
|
|
902
|
+
headers[csrfToken.header] = csrfToken.value;
|
|
903
|
+
}
|
|
904
|
+
return sendRequest({
|
|
905
|
+
abortController,
|
|
906
|
+
method: 'POST',
|
|
907
|
+
payload: customer,
|
|
908
|
+
credentials: true,
|
|
909
|
+
endpoint: createAbsoluteURL([this.registry.serverUrl, 'admin', 'ratelimit', 'customers', 'create']),
|
|
910
|
+
headers
|
|
911
|
+
}, false);
|
|
912
|
+
}
|
|
913
|
+
|
|
914
|
+
async updateCustomer(abortController: AbortController, name: string, customer: Customer): Promise<Readonly<Customer>> {
|
|
915
|
+
const csrfResponse = await this.registry.getCsrfToken(abortController);
|
|
916
|
+
const headers: Record<string, string> = {
|
|
917
|
+
'Content-Type': 'application/json;charset=UTF-8'
|
|
918
|
+
};
|
|
919
|
+
if (!isError(csrfResponse)) {
|
|
920
|
+
const csrfToken = csrfResponse as CsrfTokenJson;
|
|
921
|
+
headers[csrfToken.header] = csrfToken.value;
|
|
922
|
+
}
|
|
923
|
+
return sendRequest({
|
|
924
|
+
abortController,
|
|
925
|
+
method: 'PUT',
|
|
926
|
+
payload: customer,
|
|
927
|
+
credentials: true,
|
|
928
|
+
endpoint: createAbsoluteURL([this.registry.serverUrl, 'admin', 'ratelimit', 'customers', name]),
|
|
929
|
+
headers
|
|
930
|
+
}, false);
|
|
931
|
+
}
|
|
932
|
+
|
|
933
|
+
async deleteCustomer(abortController: AbortController, name: string): Promise<SuccessResult | ErrorResult> {
|
|
934
|
+
const csrfResponse = await this.registry.getCsrfToken(abortController);
|
|
935
|
+
const headers: Record<string, string> = {
|
|
936
|
+
'Content-Type': 'application/json;charset=UTF-8'
|
|
937
|
+
};
|
|
938
|
+
if (!isError(csrfResponse)) {
|
|
939
|
+
const csrfToken = csrfResponse as CsrfTokenJson;
|
|
940
|
+
headers[csrfToken.header] = csrfToken.value;
|
|
941
|
+
}
|
|
942
|
+
return sendRequest({
|
|
943
|
+
abortController,
|
|
944
|
+
method: 'DELETE',
|
|
945
|
+
credentials: true,
|
|
946
|
+
endpoint: createAbsoluteURL([this.registry.serverUrl, 'admin', 'ratelimit', 'customers', name]),
|
|
947
|
+
headers
|
|
948
|
+
}, false);
|
|
949
|
+
}
|
|
950
|
+
|
|
951
|
+
/**
|
|
952
|
+
* Get usage stats for a customer within an optional date range.
|
|
953
|
+
*/
|
|
954
|
+
async getUsageStats(
|
|
955
|
+
abortController: AbortController,
|
|
956
|
+
customerName: string,
|
|
957
|
+
date: Date,
|
|
958
|
+
): Promise<Readonly<UsageStatsList>> {
|
|
959
|
+
const query: { key: string, value: string | number }[] = [];
|
|
960
|
+
query.push({ key: 'date', value: date.toISOString() });
|
|
961
|
+
|
|
962
|
+
return sendRequest({
|
|
963
|
+
abortController,
|
|
964
|
+
endpoint: createAbsoluteURL([this.registry.serverUrl, 'admin', 'ratelimit', 'customers', customerName, 'usage'], query),
|
|
965
|
+
credentials: true
|
|
966
|
+
}, false);
|
|
967
|
+
}
|
|
968
|
+
|
|
969
|
+
async getLogs(
|
|
970
|
+
abortController: AbortController,
|
|
971
|
+
page: number = 0,
|
|
972
|
+
size: number = 20,
|
|
973
|
+
period?: string
|
|
974
|
+
): Promise<Readonly<LogPageableList>> {
|
|
975
|
+
const query: { key: string, value: string | number }[] = [
|
|
976
|
+
{ key: 'page', value: page },
|
|
977
|
+
{ key: 'size', value: size }
|
|
978
|
+
];
|
|
979
|
+
if (period) {
|
|
980
|
+
query.push({ key: 'period', value: period });
|
|
981
|
+
}
|
|
982
|
+
const endpoint = addQuery(createAbsoluteURL([this.registry.serverUrl, 'admin', 'logs']), query);
|
|
983
|
+
return sendRequest({
|
|
984
|
+
abortController,
|
|
985
|
+
endpoint,
|
|
986
|
+
credentials: true
|
|
987
|
+
}, false);
|
|
988
|
+
}
|
|
811
989
|
}
|
|
812
990
|
|
|
813
991
|
export interface ExtensionFilter {
|
|
@@ -180,6 +180,8 @@ export interface PersonalAccessToken {
|
|
|
180
180
|
value?: string;
|
|
181
181
|
createdTimestamp: TimestampString;
|
|
182
182
|
accessedTimestamp?: TimestampString;
|
|
183
|
+
expiresTimestamp?: TimestampString;
|
|
184
|
+
notified?: boolean;
|
|
183
185
|
description: string;
|
|
184
186
|
deleteTokenUrl: UrlString;
|
|
185
187
|
}
|
|
@@ -415,3 +417,69 @@ export interface FileDecisionDeleteResponse {
|
|
|
415
417
|
failed: number;
|
|
416
418
|
results: FileDecisionDeleteResult[];
|
|
417
419
|
}
|
|
420
|
+
|
|
421
|
+
export enum TierType {
|
|
422
|
+
FREE = 'FREE',
|
|
423
|
+
SAFETY = 'SAFETY',
|
|
424
|
+
NON_FREE = 'NON_FREE'
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
export enum RefillStrategy {
|
|
428
|
+
GREEDY = 'GREEDY',
|
|
429
|
+
INTERVAL = 'INTERVAL'
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
export interface Tier {
|
|
433
|
+
name: string;
|
|
434
|
+
description?: string;
|
|
435
|
+
tierType: TierType;
|
|
436
|
+
capacity: number;
|
|
437
|
+
duration: number;
|
|
438
|
+
refillStrategy: RefillStrategy;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
export interface TierList {
|
|
442
|
+
tiers: Tier[];
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
export enum EnforcementState {
|
|
446
|
+
EVALUATION = 'EVALUATION',
|
|
447
|
+
ENFORCEMENT = 'ENFORCEMENT'
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
export interface Customer {
|
|
451
|
+
name: string;
|
|
452
|
+
tier?: Tier;
|
|
453
|
+
state: EnforcementState;
|
|
454
|
+
cidrBlocks: string[];
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
export interface CustomerList {
|
|
458
|
+
customers: Customer[];
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
export interface UsageStats {
|
|
462
|
+
windowStart: number; // epoch seconds in UTC
|
|
463
|
+
duration: number; // in seconds
|
|
464
|
+
count: number;
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
export interface UsageStatsList {
|
|
468
|
+
stats: UsageStats[];
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
export interface Log {
|
|
472
|
+
timestamp: string;
|
|
473
|
+
user: string;
|
|
474
|
+
message: string;
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
export interface LogPageableList {
|
|
478
|
+
content: Log[];
|
|
479
|
+
page: {
|
|
480
|
+
size: number;
|
|
481
|
+
number: number;
|
|
482
|
+
totalElements: number;
|
|
483
|
+
totalPages: number;
|
|
484
|
+
};
|
|
485
|
+
}
|
package/src/header-menu.tsx
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* SPDX-License-Identifier: EPL-2.0
|
|
9
9
|
********************************************************************************/
|
|
10
10
|
|
|
11
|
-
import
|
|
11
|
+
import { ComponentType, FunctionComponent, useContext, useEffect, useState } from 'react';
|
|
12
12
|
import { Menu, IconButton, useTheme } from '@mui/material';
|
|
13
13
|
import useMediaQuery from '@mui/material/useMediaQuery';
|
|
14
14
|
import MenuIcon from '@mui/icons-material/Menu';
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
import { useMemo } from 'react';
|
|
15
15
|
import { useScanContext } from '../../context/scan-admin';
|
|
16
|
-
import { ConfirmActionType, FileActionType, ScanResult, FileDecision } from '../../context/scan-admin
|
|
16
|
+
import { ConfirmActionType, FileActionType, ScanResult, FileDecision } from '../../context/scan-admin';
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* Return type for the useDialogs hook
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* SPDX-License-Identifier: EPL-2.0
|
|
12
12
|
********************************************************************************/
|
|
13
13
|
|
|
14
|
-
import {
|
|
14
|
+
import { useCallback, useMemo } from 'react';
|
|
15
15
|
import { useScanContext } from '../../context/scan-admin';
|
|
16
16
|
import { useScanFilters } from './use-scan-filters';
|
|
17
17
|
import { usePagination } from './use-pagination';
|
|
@@ -35,8 +35,7 @@ export const useQuarantinedTab = () => {
|
|
|
35
35
|
const selectableScans = useMemo(() => {
|
|
36
36
|
return quarantinedScans.filter(scan => {
|
|
37
37
|
const hasEnforcedThreat = scan.threats.some(t => t.enforcedFlag);
|
|
38
|
-
|
|
39
|
-
return needsReview;
|
|
38
|
+
return !scan.adminDecision?.decision && hasEnforcedThreat;
|
|
40
39
|
});
|
|
41
40
|
}, [quarantinedScans]);
|
|
42
41
|
|
|
@@ -0,0 +1,55 @@
|
|
|
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 { useState } from 'react';
|
|
15
|
+
|
|
16
|
+
const getQuery = () => {
|
|
17
|
+
if (typeof window !== 'undefined') {
|
|
18
|
+
return new URLSearchParams(window.location.search);
|
|
19
|
+
}
|
|
20
|
+
return new URLSearchParams();
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const getQueryStringVal = (key: string): string | null => {
|
|
24
|
+
return getQuery().get(key);
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const useQueryParam = (
|
|
28
|
+
key: string,
|
|
29
|
+
defaultVal: string
|
|
30
|
+
): [string, (val: string) => void] => {
|
|
31
|
+
const [query, setQuery] = useState(getQueryStringVal(key) || defaultVal);
|
|
32
|
+
|
|
33
|
+
const updateUrl = (newVal: string) => {
|
|
34
|
+
setQuery(newVal);
|
|
35
|
+
|
|
36
|
+
const query = getQuery();
|
|
37
|
+
|
|
38
|
+
if (newVal.trim() !== '') {
|
|
39
|
+
query.set(key, newVal);
|
|
40
|
+
} else {
|
|
41
|
+
query.delete(key);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// This check is necessary if using the hook with Gatsby
|
|
45
|
+
if (typeof window !== 'undefined') {
|
|
46
|
+
const { protocol, pathname, host } = window.location;
|
|
47
|
+
const newUrl = `${protocol}//${host}${pathname}?${query.toString()}`;
|
|
48
|
+
window.history.pushState({}, '', newUrl);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
return [query, updateUrl];
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export default useQueryParam;
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* SPDX-License-Identifier: EPL-2.0
|
|
12
12
|
********************************************************************************/
|
|
13
13
|
|
|
14
|
+
import type { RefObject } from "react";
|
|
14
15
|
import { useState, useEffect, useRef, useMemo } from 'react';
|
|
15
16
|
import { ScanResult } from '../../context/scan-admin';
|
|
16
17
|
import { formatDuration } from '../../components/scan-admin/common';
|
|
@@ -19,7 +20,7 @@ import {
|
|
|
19
20
|
shouldShowExpandButton,
|
|
20
21
|
getDetailBadges,
|
|
21
22
|
DetailBadge,
|
|
22
|
-
} from '../../components/scan-admin
|
|
23
|
+
} from '../../components/scan-admin';
|
|
23
24
|
|
|
24
25
|
interface UseScanCardStateReturn {
|
|
25
26
|
expanded: boolean;
|
|
@@ -28,7 +29,7 @@ interface UseScanCardStateReturn {
|
|
|
28
29
|
badges: DetailBadge[];
|
|
29
30
|
liveDuration: string;
|
|
30
31
|
// Card ref for height tracking
|
|
31
|
-
cardRef:
|
|
32
|
+
cardRef: RefObject<HTMLDivElement>;
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
/**
|