@spotify/backstage-plugin-soundcheck 0.19.2 → 0.19.4

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 (290) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/config.d.ts +54 -1
  3. package/dist/alpha/integrations.esm.js +1 -1
  4. package/dist/alpha/pages.esm.js +1 -1
  5. package/dist/alpha.d.ts +2 -2
  6. package/dist/api.esm.js +1 -1
  7. package/dist/blueprints/IntegrationPageBlueprint.esm.js +1 -1
  8. package/dist/components/Badges/NoLevelBadge.esm.js +2 -2
  9. package/dist/components/CampaignCreatePage/CampaignCreatePage.esm.js +1 -1
  10. package/dist/components/CampaignForm/CampaignForm.esm.js +1 -1
  11. package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignOwnerField.esm.js +1 -1
  12. package/dist/components/CampaignForm/hooks/useCampaignForm.esm.js +1 -1
  13. package/dist/components/CampaignPage/CampaignPage.esm.js +2 -0
  14. package/dist/components/CampaignPage/CampaignPageBUI.esm.js +2 -0
  15. package/dist/components/CampaignPage/CampaignPageDeprecated.esm.js +2 -0
  16. package/dist/components/CampaignPage/CampaignStatusHistoryChart.esm.js +2 -0
  17. package/dist/components/CampaignPage/CampaignStatusHistoryTile.esm.js +2 -0
  18. package/dist/components/CampaignPage/CampaignStatusTile.esm.js +2 -0
  19. package/dist/components/CampaignPage/CampaignTechInsightsExplorerPage.esm.js +2 -0
  20. package/dist/components/CampaignsPage/CampaignListPage/CampaignListPageDeprecated.esm.js +2 -0
  21. package/dist/components/CampaignsPage/CampaignListPage/CampaignSummaryCard.esm.js +1 -1
  22. package/dist/components/CampaignsPage/CampaignListPageBUI.esm.js +2 -0
  23. package/dist/components/CampaignsPage/CampaignsPage.esm.js +1 -1
  24. package/dist/components/CampaignsPage/EditCampaignView.esm.js +1 -1
  25. package/dist/components/Cards/CheckStatusCard/CheckStatusCard.esm.js +2 -0
  26. package/dist/components/Cards/DescriptionCard/DescriptionCard.esm.js +2 -0
  27. package/dist/components/Cards/HistoricalCheckStatusCard/HistoricalCheckStatusCard.esm.js +2 -0
  28. package/dist/components/Cards/HistoricalTrackStatusCard/HistoricalTrackStatusCard.esm.js +2 -0
  29. package/dist/components/Cards/TrackStatusCard/TrackStatusCard.esm.js +2 -0
  30. package/dist/components/CertificationAccordion/CertificationAccordion.esm.js +1 -1
  31. package/dist/components/CertificationSidebar/CertificationSidebar.esm.js +1 -1
  32. package/dist/components/CertificationSidebar/CertificationSummary.esm.js +1 -1
  33. package/dist/components/CertificationSidebar/Check.esm.js +1 -1
  34. package/dist/components/CertificationSidebar/ExemptionJustificationDialog.esm.js +1 -1
  35. package/dist/components/CertificationSidebar/LevelSummary.esm.js +1 -1
  36. package/dist/components/CertificationsPage/CertificationTab.esm.js +1 -1
  37. package/dist/components/CertificationsPage/CertificationTabs.esm.js +1 -1
  38. package/dist/components/CertificationsPage/CertificationsPage.esm.js +1 -1
  39. package/dist/components/CertificationsPage/Playlist/PlaylistComponent.esm.js +1 -1
  40. package/dist/components/CertificationsPage/Playlist/PlaylistContext.esm.js +1 -1
  41. package/dist/components/CertificationsPage/Playlist/PlaylistSummary.esm.js +1 -1
  42. package/dist/components/Charts/chartUtils.esm.js +1 -1
  43. package/dist/components/CheckCreatePage/CheckCreatePage.esm.js +1 -1
  44. package/dist/components/CheckDetails/CheckDetails.esm.js +1 -1
  45. package/dist/components/CheckDetails/JustificationDetails.esm.js +1 -1
  46. package/dist/components/CheckDetails/ResultStateBox.esm.js +1 -1
  47. package/dist/components/CheckForm/CheckForm.esm.js +1 -1
  48. package/dist/components/CheckForm/FormFields/CheckPathResolverInput.esm.js +1 -1
  49. package/dist/components/CheckForm/FormFields/RuleInput/AddMenuButton.esm.js +1 -1
  50. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/RuleConditionInput.esm.js +1 -1
  51. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/useRuleOptions.esm.js +1 -1
  52. package/dist/components/CheckForm/FormFields/RuleInput/RuleInputBox.esm.js +1 -1
  53. package/dist/components/CheckForm/FormFields/TeamDetailsInput/TeamDetailsInput.esm.js +1 -1
  54. package/dist/components/CheckForm/Steps/CheckApplicabilityStep.esm.js +1 -1
  55. package/dist/components/CheckForm/Steps/CheckDetailsStep.esm.js +1 -1
  56. package/dist/components/CheckForm/Steps/CheckRulesStep.esm.js +1 -1
  57. package/dist/components/CheckForm/useCheckForm.esm.js +1 -1
  58. package/dist/components/CheckPage/CheckEditPage.esm.js +1 -1
  59. package/dist/components/CheckPage/CheckEditView.esm.js +1 -1
  60. package/dist/components/CheckPage/CheckEntitiesTable/CheckEntitiesTableBUI.esm.js +2 -0
  61. package/dist/components/CheckPage/CheckPage.esm.js +2 -0
  62. package/dist/components/CheckPage/CheckPageBUI.esm.js +2 -0
  63. package/dist/components/CheckPage/CheckPageDeprecated.esm.js +2 -0
  64. package/dist/components/CheckPage/CheckStatusHistoryChart.esm.js +1 -1
  65. package/dist/components/CheckPage/CheckStatusHistoryChartBUI.esm.js +2 -0
  66. package/dist/components/CheckPage/CheckStatusTable.esm.js +1 -1
  67. package/dist/components/CheckPage/CheckStatusTableBUI.esm.js +2 -0
  68. package/dist/components/CheckPage/ExemptionsTableBUI.esm.js +2 -0
  69. package/dist/components/CheckPage/utils.esm.js +1 -1
  70. package/dist/components/CheckSelection/CheckPreview.esm.js +1 -1
  71. package/dist/components/CheckSelection/CheckSelection.esm.js +1 -1
  72. package/dist/components/CheckStatusBar/CheckStatusBar.esm.js +1 -1
  73. package/dist/components/CheckStatusBar/CheckStatusBarBUI.esm.js +2 -0
  74. package/dist/components/CheckTemplatesPage/CheckTemplatesPage.esm.js +1 -1
  75. package/dist/components/CheckTemplatesPage/CheckTemplatesPageBUI.esm.js +2 -0
  76. package/dist/components/CheckTemplatesPage/CheckTemplatesPageDeprecated.esm.js +2 -0
  77. package/dist/components/CheckTemplatesPage/TemplateCategoryBUI.esm.js +2 -0
  78. package/dist/components/ChecksPage/CheckListPage/CheckListPageDeprecated.esm.js +2 -0
  79. package/dist/components/ChecksPage/CheckListPage/CheckSummaryCard.esm.js +1 -1
  80. package/dist/components/ChecksPage/ChecksListPageBUI.esm.js +2 -0
  81. package/dist/components/ChecksPage/ChecksPage.esm.js +1 -1
  82. package/dist/components/ChecksTable/ChecksTable.esm.js +2 -0
  83. package/dist/components/ChipSelector/ChipSelector.esm.js +2 -0
  84. package/dist/components/CollapsablePanel/CollapsablePanel.esm.js +1 -1
  85. package/dist/components/CollectorPage/CollectorDetailsPage.esm.js +1 -1
  86. package/dist/components/CollectorPage/CollectorDetailsPageBUI.esm.js +2 -0
  87. package/dist/components/CollectorPage/CollectorDetailsPageDeprecated.esm.js +2 -0
  88. package/dist/components/CollectorPage/CollectorFactTable.esm.js +1 -1
  89. package/dist/components/CollectorPage/CollectorFactTableBUI.esm.js +2 -0
  90. package/dist/components/CollectorPage/CollectorPage.esm.js +1 -1
  91. package/dist/components/CollectorPage/Configurators/AzureDevOps/AzureDevOpsConfigurator.esm.js +1 -1
  92. package/dist/components/CollectorPage/Configurators/BigQuery/BigQueryConfigurator.esm.js +1 -1
  93. package/dist/components/CollectorPage/Configurators/Catalog/CatalogConfigurator.esm.js +1 -1
  94. package/dist/components/CollectorPage/Configurators/DataDog/DataDogConfigurator.esm.js +1 -1
  95. package/dist/components/CollectorPage/Configurators/DataRegistry/DataRegistryConfigurator.esm.js +1 -1
  96. package/dist/components/CollectorPage/Configurators/Github/CodeScanningAlertsFactDetails.esm.js +1 -1
  97. package/dist/components/CollectorPage/Configurators/Github/GithubConfigurator.esm.js +1 -1
  98. package/dist/components/CollectorPage/Configurators/Github/SecretScanningAlertsFactDetails.esm.js +1 -1
  99. package/dist/components/CollectorPage/Configurators/Github/SecurityAdvisoriesFactDetails.esm.js +1 -1
  100. package/dist/components/CollectorPage/Configurators/Gitlab/GitlabConfigurator.esm.js +1 -1
  101. package/dist/components/CollectorPage/Configurators/HTTP/HttpConfigurator.esm.js +1 -1
  102. package/dist/components/CollectorPage/Configurators/HTTP/HttpStatusesInput.esm.js +1 -1
  103. package/dist/components/CollectorPage/Configurators/Jira/IssuesFactDetailsComponent.esm.js +2 -0
  104. package/dist/components/CollectorPage/Configurators/Jira/JiraConfigurator.esm.js +1 -1
  105. package/dist/components/CollectorPage/Configurators/Jira/utils.esm.js +1 -1
  106. package/dist/components/CollectorPage/Configurators/Jira/validation.esm.js +1 -1
  107. package/dist/components/CollectorPage/Configurators/Kubernetes/KubernetesConfigurator.esm.js +1 -1
  108. package/dist/components/CollectorPage/Configurators/NewRelic/NewRelicConfigurator.esm.js +1 -1
  109. package/dist/components/CollectorPage/Configurators/PagerDuty/PagerDutyConfigurator.esm.js +1 -1
  110. package/dist/components/CollectorPage/Configurators/SCM/ScmConfigurator.esm.js +1 -1
  111. package/dist/components/CollectorPage/Configurators/SonarQube/SonarQubeConfigurator.esm.js +1 -1
  112. package/dist/components/CollectorPage/DependantCheckCard.esm.js +2 -0
  113. package/dist/components/CollectorsPage/CollectorListPage/CollectorListPageDeprecated.esm.js +2 -0
  114. package/dist/components/CollectorsPage/CollectorListPage/CollectorSummaryCard.esm.js +1 -1
  115. package/dist/components/CollectorsPage/CollectorsPage.esm.js +1 -1
  116. package/dist/components/CollectorsPage/IntegrationLogoBUI.esm.js +2 -0
  117. package/dist/components/CollectorsPage/IntegrationsListPageBUI.esm.js +2 -0
  118. package/dist/components/CustomCell/CustomCell.esm.js +2 -0
  119. package/dist/components/DescriptionCell/DescriptionCell.esm.js +2 -0
  120. package/dist/components/DocLinkButton/DocLinkButton.esm.js +2 -0
  121. package/dist/components/EmptyState/EmptyStateBUI.esm.js +2 -0
  122. package/dist/components/EmptyState/EmptyStateNoCampaigns.esm.js +2 -0
  123. package/dist/components/EmptyState/EmptyStateNoChecks.esm.js +2 -0
  124. package/dist/components/EmptyState/EmptyStateNoTracks.esm.js +2 -0
  125. package/dist/components/EntitiesAutocompletePicker/EntitiesAutocompletePicker.esm.js +1 -1
  126. package/dist/components/EntitySoundcheckCard/Card.esm.js +1 -1
  127. package/dist/components/ExpandableSection/ExpandableSection.esm.js +1 -1
  128. package/dist/components/FactExplorer/FactExplorer.esm.js +1 -1
  129. package/dist/components/FactExplorer/FactExplorerDialogBUI.esm.js +2 -0
  130. package/dist/components/FactExplorer/useFactOptions.esm.js +1 -1
  131. package/dist/components/Filter/EntityAutocompletePicker.esm.js +1 -1
  132. package/dist/components/Filter/FilterComponent.esm.js +1 -1
  133. package/dist/components/Filter/FilterPreviewTable/FilterPreviewTable.esm.js +1 -1
  134. package/dist/components/Filter/KeyValueInputDialog.esm.js +1 -1
  135. package/dist/components/FilterMenu/FilterMenu.esm.js +2 -0
  136. package/dist/components/FilterSidebar/FilterSidebar.esm.js +1 -1
  137. package/dist/components/FilterSidebar/StateFilter.esm.js +1 -1
  138. package/dist/components/FilterSidebar/useTrackFilterSidebar.esm.js +1 -1
  139. package/dist/components/FilterSidebar/util.esm.js +1 -1
  140. package/dist/components/FormControlledAutocomplete/FormControlledAutocomplete.esm.js +1 -1
  141. package/dist/components/FormControlledAutocomplete/FormControlledMultipleAutocomplete.esm.js +1 -1
  142. package/dist/components/FormControlledAutocomplete/useLabelValueOptions.esm.js +2 -0
  143. package/dist/components/FormMarkdownInput/FormMarkdownInput.esm.js +1 -1
  144. package/dist/components/FormattedPreview/FormattedPreview.esm.js +1 -1
  145. package/dist/components/GroupHierarchySelector/GroupHierarchyGroupInfo.esm.js +1 -1
  146. package/dist/components/GroupHierarchySelector/GroupHierarchySelector.esm.js +1 -1
  147. package/dist/components/GroupSelectorBUI/GroupSelectList.esm.js +2 -0
  148. package/dist/components/GroupSelectorBUI/GroupSelectionHistory.esm.js +2 -0
  149. package/dist/components/GroupSelectorBUI/GroupSelectorBUI.esm.js +2 -0
  150. package/dist/components/GroupSelectorBUI/GroupTag.esm.js +2 -0
  151. package/dist/components/GroupSelectorBUI/useGroupHistory.esm.js +2 -0
  152. package/dist/components/GroupSelectorBUI/usePreviousSelectedGroups.esm.js +2 -0
  153. package/dist/components/HierarchicalTechInsightsPage/HierarchicalTechInsightsPage.esm.js +1 -1
  154. package/dist/components/HierarchicalTechInsightsPage/HierarchyTable.esm.js +1 -1
  155. package/dist/components/HierarchicalTechInsightsPage/SelectedNodeSidebar.esm.js +1 -1
  156. package/dist/components/HierarchicalTechInsightsPage/visualizations/hierarchyToNivo.esm.js +1 -1
  157. package/dist/components/ImportExportPanel/ImportExportPanelBUI.esm.js +2 -0
  158. package/dist/components/ImportExportPanel/{ImportExportPanel.esm.js → ImportExportPanelDeprecated.esm.js} +2 -2
  159. package/dist/components/LevelUpParty/LevelUpParty.esm.js +1 -1
  160. package/dist/components/LevelsTable/CheckRowContent.esm.js +1 -1
  161. package/dist/components/LevelsTable/LevelsTable.esm.js +1 -1
  162. package/dist/components/ListPageCustomActions/ListPageCustomActions.esm.js +2 -0
  163. package/dist/components/LoadingTableSkeleton/LoadingTableSkeleton.esm.js +2 -0
  164. package/dist/components/Menus/SimpleMenu.esm.js +2 -0
  165. package/dist/components/Menus/useCampaignActions.esm.js +2 -0
  166. package/dist/components/Menus/useCheckActions.esm.js +2 -0
  167. package/dist/components/Menus/useTrackActions.esm.js +2 -0
  168. package/dist/components/OverviewPage/OverviewPage.esm.js +1 -1
  169. package/dist/components/OverviewPage/OverviewPageContent.esm.js +1 -1
  170. package/dist/components/OverviewTable/Cell/CheckCellTooltip.esm.js +1 -1
  171. package/dist/components/OverviewTable/Cell/CheckLabelCell.esm.js +1 -1
  172. package/dist/components/OverviewTable/OverviewTable.esm.js +1 -1
  173. package/dist/components/OverviewTable/ResultsTable.esm.js +1 -1
  174. package/dist/components/PageCustomActions/PageCustomActions.esm.js +2 -0
  175. package/dist/components/PassRateTable/PassRateTable.esm.js +1 -1
  176. package/dist/components/QuickstartPage/QuickstartPage.esm.js +2 -2
  177. package/dist/components/RefetchingIndicator/RefetchingIndicator.esm.js +1 -1
  178. package/dist/components/Router.esm.js +1 -1
  179. package/dist/components/RoutingPage/RoutingMainMenu.esm.js +2 -0
  180. package/dist/components/RoutingPage/RoutingPage.esm.js +1 -1
  181. package/dist/components/RoutingPage/RoutingPageBUI.esm.js +2 -0
  182. package/dist/components/RoutingPage/RoutingPageDeprecated.esm.js +2 -0
  183. package/dist/components/RoutingPage/RoutingPageWrapper.esm.js +2 -0
  184. package/dist/components/RoutingPage/RoutingPageWrapperBUI.esm.js +2 -0
  185. package/dist/components/RoutingPage/RoutingPageWrapperDeprecated.esm.js +2 -0
  186. package/dist/components/RoutingPage/index.esm.js +1 -1
  187. package/dist/components/SearchFilters/SearchFilters.esm.js +1 -1
  188. package/dist/components/SendCampaignNotificationDialog/SendCampaignNotificationDialog.esm.js +1 -1
  189. package/dist/components/SoundcheckHeader/SoundcheckHeaderBUI.esm.js +2 -0
  190. package/dist/components/SoundcheckMarkdownContent/ComponentRenders.esm.js +1 -1
  191. package/dist/components/SoundcheckMarkdownContent/SoundcheckMarkdownContentBUI.esm.js +2 -0
  192. package/dist/components/SoundcheckMarkdownContent/SoundcheckMarkdownContentDeprecated.esm.js +2 -0
  193. package/dist/components/StatusBar/StatusBar.esm.js +2 -0
  194. package/dist/components/SummaryCard/SummaryCard.esm.js +1 -1
  195. package/dist/components/SummaryCard/SummaryCardActionsMenu.esm.js +1 -1
  196. package/dist/components/TableRowWithOwner/TableRowWithOwner.esm.js +2 -0
  197. package/dist/components/TeamStatusBar/TeamStatusBar.esm.js +1 -1
  198. package/dist/components/TechHealth/Filters/FacetFilter.esm.js +1 -1
  199. package/dist/components/TechHealth/Filters/useFacetOptions.esm.js +1 -1
  200. package/dist/components/TechHealth/Loading/TechHealthLoading.esm.js +1 -1
  201. package/dist/components/TechHealth/TechHealth.esm.js +1 -1
  202. package/dist/components/TechHealthSummary/SummaryAggregationsProvider.esm.js +1 -1
  203. package/dist/components/TechHealthTabs/CampaignResultsTab/CampaignResultsTab.esm.js +1 -1
  204. package/dist/components/TechHealthTabs/CheckResultsTab/CheckResultsTab.esm.js +1 -1
  205. package/dist/components/TechHealthTabs/EntityResultsTab/EntityResultsTab.esm.js +1 -1
  206. package/dist/components/TechHealthTabs/GroupResultsTab/GroupResultsTab.esm.js +1 -1
  207. package/dist/components/TechHealthTabs/NameColumn.esm.js +1 -1
  208. package/dist/components/TechHealthTabs/TrackResultsTab/TrackResultsTab.esm.js +1 -1
  209. package/dist/components/TechInsights/FilterControls.esm.js +1 -1
  210. package/dist/components/TechInsights/SummaryTiles.esm.js +1 -1
  211. package/dist/components/TechInsights/SummaryTilesBUI.esm.js +2 -0
  212. package/dist/components/TechInsights/TechInsightsPage.esm.js +1 -1
  213. package/dist/components/TechInsights/TechInsightsPageBUI.esm.js +2 -0
  214. package/dist/components/TechInsights/TechInsightsPageDeprecated.esm.js +2 -0
  215. package/dist/components/TechInsights/TechInsightsTableBUI.esm.js +2 -0
  216. package/dist/components/TechInsights/TechInsightsTableView.esm.js +1 -1
  217. package/dist/components/TechInsightsExplorerTable/TechInsightsExplorerTable.esm.js +2 -0
  218. package/dist/components/TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js +1 -1
  219. package/dist/components/TimePeriodBar/TimePeriodBar.esm.js +1 -1
  220. package/dist/components/TimePeriodBar/TimePeriodBarBUI.esm.js +2 -0
  221. package/dist/components/TopAndBottomPerformingTeams/TopAndBottomPerformingTeams.esm.js +2 -0
  222. package/dist/components/TopFailingChecksTable/TopFailingChecksTableBUI.esm.js +2 -0
  223. package/dist/components/TrackCreatePage/TrackCreatePage.esm.js +1 -1
  224. package/dist/components/TrackEditPage/TrackEditPage.esm.js +1 -1
  225. package/dist/components/TrackEditPage/TrackEditView.esm.js +1 -1
  226. package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackBadgeTypeSelect/TrackBadgeTypeSelect.esm.js +1 -1
  227. package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackOwnerSelect/TrackOwnerSelect.esm.js +1 -1
  228. package/dist/components/TrackForm/TrackForm.esm.js +1 -1
  229. package/dist/components/TrackForm/utils/useTrackForm.esm.js +1 -1
  230. package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js +1 -1
  231. package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTableBUI.esm.js +2 -0
  232. package/dist/components/TrackPage/TrackHistoryChart.esm.js +1 -1
  233. package/dist/components/TrackPage/TrackHistoryChartBUI.esm.js +2 -0
  234. package/dist/components/TrackPage/TrackPage.esm.js +1 -1
  235. package/dist/components/TrackPage/TrackPageBUI.esm.js +2 -0
  236. package/dist/components/TrackPage/TrackPageDeprecated.esm.js +2 -0
  237. package/dist/components/TrackPage/TrackStatusBarBUI.esm.js +2 -0
  238. package/dist/components/TrackPage/TrackStatusTableBUI.esm.js +2 -0
  239. package/dist/components/TrackPage/TrackTechInsightsExplorerPage.esm.js +2 -0
  240. package/dist/components/TrackSelection/TrackSelection.esm.js +1 -1
  241. package/dist/components/TracksPage/TrackListPage/TrackListPageDeprecated.esm.js +2 -0
  242. package/dist/components/TracksPage/TrackListPage/TrackSummaryCard.esm.js +1 -1
  243. package/dist/components/TracksPage/TracksListPageBUI.esm.js +2 -0
  244. package/dist/components/TracksPage/TracksPage.esm.js +1 -1
  245. package/dist/graphql/generated/index.esm.js +126 -117
  246. package/dist/hooks/aggregations/useCheckStatus.esm.js +1 -1
  247. package/dist/hooks/catalog/useGetEntityRefs.esm.js +1 -1
  248. package/dist/hooks/catalog/useGetLimitedEntityRefs.esm.js +1 -1
  249. package/dist/hooks/catalog/useProfileImages.esm.js +2 -0
  250. package/dist/hooks/checks/useCheckDetails.esm.js +1 -1
  251. package/dist/hooks/entities/useTrackEntities.esm.js +1 -1
  252. package/dist/hooks/filters/useFilters.esm.js +2 -0
  253. package/dist/hooks/graphqlKeys.esm.js +1 -1
  254. package/dist/hooks/groups/useAllGroups.esm.js +1 -1
  255. package/dist/hooks/groups/useGroupOptions.esm.js +1 -1
  256. package/dist/hooks/groups/useUsersGroupClaims.esm.js +1 -1
  257. package/dist/hooks/heirarchy/useBatchedHierarchicalTrackStatuses.esm.js +1 -1
  258. package/dist/hooks/heirarchy/useGroupHierarchy.esm.js +1 -1
  259. package/dist/hooks/tracks/useRecertifyTrack.esm.js +2 -0
  260. package/dist/hooks/tracks/useTracksApplicableToGroup.esm.js +1 -1
  261. package/dist/hooks/useConfirmationModal.esm.js +1 -1
  262. package/dist/hooks/useLoadTimeReporting.esm.js +2 -0
  263. package/dist/hooks/usePagination.esm.js +2 -0
  264. package/dist/hooks/useSearchName.esm.js +2 -0
  265. package/dist/hooks/useSortTableLocalStorage.esm.js +2 -0
  266. package/dist/routes.esm.js +1 -1
  267. package/dist/utils/charts.esm.js +1 -1
  268. package/dist/utils/formStyles.esm.js +1 -1
  269. package/dist/utils/formatters.esm.js +1 -1
  270. package/dist/utils/helpers.esm.js +1 -1
  271. package/dist/utils/lcpReporting.esm.js +1 -1
  272. package/dist/utils/time.esm.js +1 -1
  273. package/package.json +25 -33
  274. package/dist/components/CampaignInsightsPage/CampaignInsightsPage.esm.js +0 -2
  275. package/dist/components/CampaignInsightsPage/CampaignStatusHistoryTile.esm.js +0 -2
  276. package/dist/components/CampaignInsightsPage/CampaignStatusTile.esm.js +0 -2
  277. package/dist/components/CampaignsPage/CampaignListPage/CampaignListPage.esm.js +0 -2
  278. package/dist/components/CheckPage/CheckInsightsPage.esm.js +0 -2
  279. package/dist/components/ChecksPage/CheckListPage/CheckListPage.esm.js +0 -2
  280. package/dist/components/CollectorPage/Configurators/Jira/IssuesSearchFactDetailsComponent.esm.js +0 -2
  281. package/dist/components/CollectorsPage/CollectorListPage/CollectorListPage.esm.js +0 -2
  282. package/dist/components/GroupHierarchySelector/usePreviousSelectedGroups.esm.js +0 -2
  283. package/dist/components/SoundcheckMarkdownContent/SoundcheckMarkdownContent.esm.js +0 -2
  284. package/dist/components/TechInsights/TechInsightsCardsView.esm.js +0 -2
  285. package/dist/components/TechInsights/TrackStatusCard.esm.js +0 -2
  286. package/dist/components/TechInsights/ViewModeControls.esm.js +0 -2
  287. package/dist/components/TechInsights/convertToCommonTrackStatus.esm.js +0 -2
  288. package/dist/components/TracksPage/TrackListPage/TrackListPage.esm.js +0 -2
  289. /package/dist/components/{CampaignInsightsPage → CampaignPage}/DaysRemainingTile.esm.js +0 -0
  290. /package/dist/{components/GroupHierarchySelector → utils}/getAllOwnedEntityCount.esm.js +0 -0
@@ -1,2 +1,2 @@
1
- import{useApi as n,useAnalytics as a}from"@backstage/core-plugin-api";import{useQuery as o}from"@tanstack/react-query";import{soundcheckApiRef as p}from"../../api.esm.js";import{QueryKeys as u}from"../graphqlKeys.esm.js";const c=(t,r=!0)=>{const i=n(p),s=a();return o([u.CheckStatus,t],async()=>{const e=await i.getCheckStatus(t);return e&&s.captureEvent("page_details","Check Status",{attributes:{id:e.id,error:e.error,exempt:e.exempt,failed:e.failed,notApplicable:e.notApplicable,notReported:e.notReported,numberOfEntities:e.numberOfEntities,passed:e.passed,warning:e.warning,filter:t.filter}}),e},{enabled:r,staleTime:10*60*1e3,refetchInterval:!1,refetchOnWindowFocus:!1})};export{c as useCheckStatus};
1
+ import{useApi as u,useAnalytics as f}from"@backstage/core-plugin-api";import{useQuery as d}from"@tanstack/react-query";import{soundcheckApiRef as l}from"../../api.esm.js";import{QueryKeys as m}from"../graphqlKeys.esm.js";const h=(t,r=!0)=>{const i=u(l),n=f();return d([m.CheckStatus,t],async()=>{const{checkId:s,entityRefs:a,filter:c,trackId:o}=t,p={checkId:s,entityRefs:a,filter:c,trackId:o},e=await i.getCheckStatus(p);return e&&n.captureEvent("page_details","Check Status",{attributes:{id:e.id,error:e.error,exempt:e.exempt,failed:e.failed,notApplicable:e.notApplicable,notReported:e.notReported,numberOfEntities:e.numberOfEntities,passed:e.passed,warning:e.warning,filter:t.filter}}),e},{enabled:r,staleTime:10*60*1e3,refetchInterval:!1,refetchOnWindowFocus:!1})};export{h as useCheckStatus};
2
2
  //# sourceMappingURL=useCheckStatus.esm.js.map
@@ -1,2 +1,2 @@
1
- import{stringifyEntityRef as m}from"@backstage/catalog-model";import{useApi as t,alertApiRef as n}from"@backstage/core-plugin-api";import{catalogApiRef as f}from"@backstage/plugin-catalog-react";import{useQuery as p}from"@tanstack/react-query";import{QueryKeys as y}from"../graphqlKeys.esm.js";const d=(e,i,r=!0)=>{const o=t(n),s=t(f);return p([y.GetEntityRefs,e],async()=>(await s.getEntities({filter:e,limit:i,fields:["kind","metadata.name","metadata.namespace"]})).items.map(a=>m(a)),{enabled:r,refetchOnWindowFocus:!1,onError:()=>{o.post({message:"Failed to load entities",severity:"error"})}})};export{d as useGetEntityRefs};
1
+ import{useApi as t,alertApiRef as s}from"@backstage/core-plugin-api";import{catalogApiRef as n}from"@backstage/plugin-catalog-react";import{useQuery as m}from"@tanstack/react-query";import{QueryKeys as f}from"../graphqlKeys.esm.js";const p=(e,i,r=!0)=>{const a=t(s),o=t(n);return m([f.GetEntityRefs,e],async()=>o.getEntities({filter:e,limit:i,fields:["kind","metadata.name","metadata.description","metadata.namespace"]}),{enabled:r,refetchOnWindowFocus:!1,onError:()=>{a.post({message:"Failed to load entities",severity:"error"})}})};export{p as useGetEntityRefs};
2
2
  //# sourceMappingURL=useGetEntityRefs.esm.js.map
@@ -1,2 +1,2 @@
1
- import{uniq as y}from"lodash";import{useMemo as L}from"react";import{useGetEntityRefs as t}from"./useGetEntityRefs.esm.js";const g=(i=500,e=!0,n=[])=>{const{data:s,isLoading:d}=t({kind:["Component"]},i,e&&!n.includes("Component")),{data:o,isLoading:a}=t({kind:["System"]},i,e&&!n.includes("System")),{data:m,isLoading:r}=t({kind:["Resource"]},i,e&&!n.includes("Resource")),{data:u,isLoading:c}=t({kind:["API"]},i,e&&!n.includes("API")),f=L(()=>y([...s??[],...o??[],...m??[],...u??[]]),[u,s,m,o]);return{allLoading:d&&a&&r&&c,anyLoading:d||a||r||c,entityRefs:f}};export{g as useGetLimitedEntityRefs};
1
+ import{stringifyEntityRef as m}from"@backstage/catalog-model";import{uniq as k}from"lodash";import{useMemo as E}from"react";import{useGetEntityRefs as s}from"./useGetEntityRefs.esm.js";const A=(t=500,e=!0,n=[])=>{const{data:y,isLoading:a}=s({kind:["Component"]},t,e&&!n.includes("Component")),o=y?.items.map(i=>m(i)),{data:g,isLoading:d}=s({kind:["System"]},t,e&&!n.includes("System")),r=g?.items.map(i=>m(i)),{data:L,isLoading:p}=s({kind:["Resource"]},t,e&&!n.includes("Resource")),u=L?.items.map(i=>m(i)),{data:R,isLoading:f}=s({kind:["API"]},t,e&&!n.includes("API")),c=R?.items.map(i=>m(i)),l=E(()=>k([...o??[],...r??[],...u??[],...c??[]]),[c,o,u,r]);return{allLoading:a&&d&&p&&f,anyLoading:a||d||p||f,entityRefs:l}};export{A as useGetLimitedEntityRefs};
2
2
  //# sourceMappingURL=useGetLimitedEntityRefs.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{isUserEntity as o,isGroupEntity as a,stringifyEntityRef as p}from"@backstage/catalog-model";import{isEmpty as n}from"lodash";import{useMemo as f}from"react";import{useEntitiesByRefs as c}from"./useEntitiesByRefs.esm.js";const d=s=>{const{data:i,isLoading:r}=c({entityRefs:s,fields:["kind","metadata.name","metadata.namespace","spec.profile.picture"]}),m=f(()=>n(i?.items)?{}:i?.items.reduce((e,t)=>(t&&(o(t)||a(t))&&(e[p(t)]=t?.spec?.profile?.picture),e),{}),[i?.items]);return{isLoading:r,profileImageMap:m}};export{d as useProfileImages};
2
+ //# sourceMappingURL=useProfileImages.esm.js.map
@@ -1,2 +1,2 @@
1
- import{stringifyEntityRef as s}from"@backstage/catalog-model";import{useApi as m}from"@backstage/core-plugin-api";import{useQuery as f}from"@tanstack/react-query";import{soundcheckApiRef as n}from"../../api.esm.js";import{QueryKeys as u}from"../graphqlKeys.esm.js";function c(t,e,r){const o=m(n),i=s(t);return f([u.CheckDetails,i,e,r],async()=>o.getCheckResultDetails(i,e,r),{enabled:!!e&&!!r})}export{c as useCheckDetails};
1
+ import{stringifyEntityRef as s}from"@backstage/catalog-model";import{useApi as m}from"@backstage/core-plugin-api";import{useQuery as f}from"@tanstack/react-query";import{soundcheckApiRef as n}from"../../api.esm.js";import{QueryKeys as u}from"../graphqlKeys.esm.js";function c(o,e,r){const t=m(n),i=s(o);return f([u.CheckDetails,i,e,r],async()=>t.getCheckResultDetails(i,e,r),{enabled:!!e&&!!r})}export{c as useCheckDetails};
2
2
  //# sourceMappingURL=useCheckDetails.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useApi as t}from"@backstage/core-plugin-api";import{useQuery as i}from"@tanstack/react-query";import{soundcheckApiRef as o}from"../../api.esm.js";import{QueryKeys as n}from"../graphqlKeys.esm.js";function s(r){const e=t(o);return i([n.TrackEntities,r],async()=>e.getTrackEntities(r),{refetchOnWindowFocus:!1})}export{s as useTrackEntities};
1
+ import{useApi as t}from"@backstage/core-plugin-api";import{useQuery as i}from"@tanstack/react-query";import{soundcheckApiRef as o}from"../../api.esm.js";import{QueryKeys as n}from"../graphqlKeys.esm.js";function s(r){const e=t(o);return i({queryKey:[n.TrackEntities,r],queryFn:async()=>e.getTrackEntities(r),refetchOnWindowFocus:!1})}export{s as useTrackEntities};
2
2
  //# sourceMappingURL=useTrackEntities.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{stringifyEntityRef as I,parseEntityRef as b}from"@backstage/catalog-model";import{useApi as G,configApiRef as M}from"@backstage/core-plugin-api";import{combineEntityFilterQueries as N,getGroupFilterFromConfig as j}from"@spotify/backstage-plugin-soundcheck-common";import l from"lodash/startCase";import{useMemo as w,useCallback as B}from"react";import{useSearchParams as Q}from"react-router-dom";import{CheckState as r}from"../../components/CheckPage/utils.esm.js";import{useGetEntityFacets as f}from"../catalog/useGetEntityFacets.esm.js";import{useGetEntityRefs as _}from"../catalog/useGetEntityRefs.esm.js";function x({entityFilterQuery:m,hasStatusFilters:E=!1,hasCertificationStatusFilters:d=!1}){const R=G(M),[o,u]=Q(),A=N({kind:["group"]},j(R)),{data:y}=_(A),h=w(()=>y?.items.map(e=>({label:e.metadata.title??e.metadata.name,value:I(e)}))??[],[y]),{data:F}=f("spec.lifecycle",m),L=F?.map(e=>({label:e,value:e}))??[],{data:$}=f("spec.type",m),k=$?.map(e=>({label:e,value:e}))??[],{data:C}=f("relations.partOf",m),g=C?.map(e=>({label:b(e).name,value:e}))??[],O=[r.PASSED,r.FAILED,r.WARNING,r.EXEMPT,r.NOT_APPLICABLE,r.ERROR].map(e=>({label:l(e.toLowerCase()),value:e})),P=[r.PASSED,r.FAILED,r.NOT_REPORTED].map(e=>{const t=l(e.toLowerCase());return{label:t,value:t}}),v=(e,t)=>{const s=["owners","systems"];if(e==="certificationStatuses")return`statuses: ${l(t.toLowerCase())}`;const a=e.replace(/s$/,"");return s.includes(e)?`${a}: ${b(t).name}`:e==="states"?`${a}: ${l(t.toLowerCase())}`:`${a}: ${t}`},c=w(()=>{const e=["numberOfDays","search"],t={owners:new Set,lifecycles:new Set,types:new Set,systems:new Set,states:new Set,certificationStatuses:new Set};for(const[s,a]of o.entries())if(!e.includes(s)){const i=a.split(",").map(n=>n.trim()).filter(Boolean);t[s]=new Set(i)}return t},[o]),S=B((e,t)=>{const s=new URLSearchParams(o),a=Array.from(t);a.length>0?s.set(e,a.join(",")):s.delete(e),u(s,{replace:!0})},[o,u]),T=Object.entries(c).flatMap(([e,t])=>Array.from(t).map(s=>({label:v(e,s),value:`${e}:${s}`}))),D=e=>{e.forEach(t=>{if(typeof t!="string")return;const[s,a]=t.split(/:(.+)/),i=c[s];if(!i)return;const n=new Set(i);n.delete(a),S(s,n)})},p=[{key:"owners",label:"Owner",options:h},{key:"lifecycles",label:"Lifecycle",options:L},{key:"types",label:"Type",options:k},{key:"systems",label:"System",options:g}];return E&&p.push({key:"states",label:"States",options:O}),d&&p.push({key:"certificationStatuses",label:"Status",options:P}),{filters:p,selected:c,setSelected:S,selectedTags:T,onRemoveTag:D}}export{x as useFilters};
2
+ //# sourceMappingURL=useFilters.esm.js.map
@@ -1,2 +1,2 @@
1
- var t=(e=>(e.GetTrack="soundcheck/track",e.GetAllTracks="soundcheck/tracks",e.GetTracksApplicableEntityCount="soundcheck/tracks/applicableEntities",e.GetChecks="soundcheck/checks",e.GetCollectors="soundcheck/collectors",e.GetFactSchema="soundcheck/collectors/schema",e.GetEntityFacets="soundcheck/catalog/facets",e.GetSoftwareEntityRefsForUser="soundcheck/entities/softwareEntityRefsForUser",e.GetEntityRefs="soundcheck/catalog/entityRefs",e.ExecutableChecks="soundcheck/executableChecks",e.GetCampaigns="soundcheck/campaigns",e.GetOverallCheckPassRateTrends="soundcheck/charts/overallCheckPassRateTrends",e.GetIndividualCheckPassRateTrends="soundcheck/charts/getIndividualCheckPassRateTrends",e.GetOverallTrackPassRateTrends="soundcheck/charts/overallTrackPassRateTrends",e.GetIndividualTrackPassRateTrends="soundcheck/charts/individualTrackPassRateTrends",e.GetOverallEntityPassRateTrends="soundcheck/charts/overallEntityPassRateTrends",e.GetIndividualEntityPassRateTrends="soundcheck/charts/individualEntityPassRateTrends",e.GetOverallGroupPassRateTrends="soundcheck/charts/overallGroupPassRateTrends",e.GetIndividualGroupPassRateTrends="soundcheck/charts/individualGroupPassRateTrends",e.EntityByRef="soundcheck/catalog/entityByRef",e.EntitiesByRefs="soundcheck/catalog/entitiesByRef",e.TrackEntities="soundcheck/track/entities",e.CheckEntities="soundcheck/check/entities",e.CertificationStatus="soundcheck/certificationStatus",e.CertificationStatuses="soundcheck/certificationStatuses",e.MultipleTrackStatuses="soundcheck/multipleTrackStatuses",e.CertificationStatusHistory="soundcheck/certificationStatusHistory",e.CertificationStatusHistories="soundcheck/certificationStatusHistories",e.CheckStatus="soundcheck/checkStatus",e.CheckStatuses="soundcheck/checkStatuses",e.SavedViews="soundcheck/savedViews",e.CheckStatusHistory="soundcheck/checkStatusHistory",e.CheckStatusHistories="soundcheck/checkStatusHistories",e.CheckStatusHistoriesMultiFilter="soundcheck/checkStatusHistoriesMultiFilter",e.TrackStatusHistory="soundcheck/trackStatusHistory",e.TrackStatusHistories="soundcheck/trackStatusHistories",e.Check="soundcheck/check",e.CheckDetails="soundcheck/checkDetails",e.Certifications="soundcheck/certifications",e.CertificationDetails="soundcheck/certificationDetails",e.GetCheckOwners="soundcheck/checks/getOwners",e.GetTrackOwners="soundcheck/tracks/getOwners",e.GetCampaignOwners="soundcheck/campaigns/getOwners",e.GetTrackRelatedGroups="soundcheck/track/getTrackRelatedGroups",e.CheckTemplates="soundcheck/checkTemplates",e.GetFacetsForOwner="soundcheck/facets-for-owner",e.GetTrackOverviewForOwner="soundcheck/track-overview-for-owner",e.GetExemption="soundcheck/getExemption",e.GetExemptions="soundcheck/getExemptions",e.GetExemptCheckIds="soundcheck/getExemptCheckIds",e))(t||{}),s=(e=>(e.DeleteCheck="soundcheck/deleteCheck",e.CreateCheck="soundcheck/createCheck",e.UpdateCheck="soundcheck/updateCheck",e.ExecuteCheck="soundcheck/executeCheck",e.ImportChecks="soundcheck/importChecks",e.SetResult="soundcheck/setResult",e.CreateExemption="soundcheck/createExemption",e.UpdateExemption="soundcheck/updateExemption",e.DeleteExemption="soundcheck/deleteExemption",e.SaveView="soundcheck/saveView",e.DeleteTrack="soundcheck/deleteTrack",e.CreateTrack="soundcheck/createTrack",e.UpdateTrack="soundcheck/updateTrack",e.ImportTracks="soundcheck/importTracks",e.UpdateCollectorConfig="soundcheck/updateCollectorConfig",e.DeleteCollectorConfig="soundcheck/deleteCollectorConfig",e.CreateCampaign="soundcheck/createCampaign",e.UpdateCampaign="soundcheck/updateCampaign",e.DeleteCampaign="soundcheck/deleteCampaign",e.ArchiveCampaign="soundcheck/archiveCampaign",e.SendCampaignNotification="soundcheck/sendCampaignNotification",e))(s||{});export{s as MutationKeys,t as QueryKeys};
1
+ var t=(e=>(e.GetTrack="soundcheck/track",e.GetAllTracks="soundcheck/tracks",e.GetTracksApplicableEntityCount="soundcheck/tracks/applicableEntities",e.GetChecks="soundcheck/checks",e.GetCollectors="soundcheck/collectors",e.GetFactSchema="soundcheck/collectors/schema",e.GetEntityFacets="soundcheck/catalog/facets",e.GetSoftwareEntityRefsForUser="soundcheck/entities/softwareEntityRefsForUser",e.GetEntityRefs="soundcheck/catalog/entityRefs",e.ExecutableChecks="soundcheck/executableChecks",e.GetCampaigns="soundcheck/campaigns",e.GetOverallCheckPassRateTrends="soundcheck/charts/overallCheckPassRateTrends",e.GetIndividualCheckPassRateTrends="soundcheck/charts/getIndividualCheckPassRateTrends",e.GetOverallTrackPassRateTrends="soundcheck/charts/overallTrackPassRateTrends",e.GetIndividualTrackPassRateTrends="soundcheck/charts/individualTrackPassRateTrends",e.GetOverallEntityPassRateTrends="soundcheck/charts/overallEntityPassRateTrends",e.GetIndividualEntityPassRateTrends="soundcheck/charts/individualEntityPassRateTrends",e.GetOverallGroupPassRateTrends="soundcheck/charts/overallGroupPassRateTrends",e.GetIndividualGroupPassRateTrends="soundcheck/charts/individualGroupPassRateTrends",e.EntityByRef="soundcheck/catalog/entityByRef",e.EntitiesByRefs="soundcheck/catalog/entitiesByRef",e.TrackEntities="soundcheck/track/entities",e.CheckEntities="soundcheck/check/entities",e.CertificationStatus="soundcheck/certificationStatus",e.CertificationStatuses="soundcheck/certificationStatuses",e.MultipleTrackStatuses="soundcheck/multipleTrackStatuses",e.CertificationStatusHistory="soundcheck/certificationStatusHistory",e.CertificationStatusHistories="soundcheck/certificationStatusHistories",e.CheckStatus="soundcheck/checkStatus",e.CheckStatuses="soundcheck/checkStatuses",e.SavedViews="soundcheck/savedViews",e.CheckStatusHistory="soundcheck/checkStatusHistory",e.CheckStatusHistories="soundcheck/checkStatusHistories",e.CheckStatusHistoriesMultiFilter="soundcheck/checkStatusHistoriesMultiFilter",e.TrackStatusHistory="soundcheck/trackStatusHistory",e.TrackStatusHistories="soundcheck/trackStatusHistories",e.Check="soundcheck/check",e.CheckDetails="soundcheck/checkDetails",e.Certifications="soundcheck/certifications",e.CertificationDetails="soundcheck/certificationDetails",e.GetCheckOwners="soundcheck/checks/getOwners",e.GetTrackOwners="soundcheck/tracks/getOwners",e.GetCampaignOwners="soundcheck/campaigns/getOwners",e.GetTrackRelatedGroups="soundcheck/track/getTrackRelatedGroups",e.CheckTemplates="soundcheck/checkTemplates",e.GetFacetsForOwner="soundcheck/facets-for-owner",e.GetTrackOverviewForOwner="soundcheck/track-overview-for-owner",e.GetExemption="soundcheck/getExemption",e.GetExemptions="soundcheck/getExemptions",e.GetExemptCheckIds="soundcheck/getExemptCheckIds",e))(t||{}),s=(e=>(e.DeleteCheck="soundcheck/deleteCheck",e.CreateCheck="soundcheck/createCheck",e.UpdateCheck="soundcheck/updateCheck",e.ExecuteCheck="soundcheck/executeCheck",e.ImportChecks="soundcheck/importChecks",e.SetResult="soundcheck/setResult",e.CreateExemption="soundcheck/createExemption",e.UpdateExemption="soundcheck/updateExemption",e.DeleteExemption="soundcheck/deleteExemption",e.SaveView="soundcheck/saveView",e.DeleteTrack="soundcheck/deleteTrack",e.CreateTrack="soundcheck/createTrack",e.UpdateTrack="soundcheck/updateTrack",e.ImportTracks="soundcheck/importTracks",e.RecertifyTrack="soundcheck/recertifyTrack",e.UpdateCollectorConfig="soundcheck/updateCollectorConfig",e.DeleteCollectorConfig="soundcheck/deleteCollectorConfig",e.CreateCampaign="soundcheck/createCampaign",e.UpdateCampaign="soundcheck/updateCampaign",e.DeleteCampaign="soundcheck/deleteCampaign",e.ArchiveCampaign="soundcheck/archiveCampaign",e.SendCampaignNotification="soundcheck/sendCampaignNotification",e))(s||{});export{s as MutationKeys,t as QueryKeys};
2
2
  //# sourceMappingURL=graphqlKeys.esm.js.map
@@ -1,2 +1,2 @@
1
- import{stringifyEntityRef as m}from"@backstage/catalog-model";import{useApi as t,configApiRef as n}from"@backstage/core-plugin-api";import{catalogApiRef as s}from"@backstage/plugin-catalog-react";import{getGroupFilterFromConfig as f,combineEntityFilterQueries as l}from"@spotify/backstage-plugin-soundcheck-common";import{useQuery as c}from"@tanstack/react-query";function u(){const i=t(s),r=t(n);return c(["soundcheck/all-groups"],async()=>{const a=f(r),o=l({kind:"Group"},a),{items:p}=await i.getEntities({filter:o,fields:["spec.profile.displayName","metadata.title","metadata.name","metadata.namespace","kind","spec.type"]});return p.filter(e=>e?.kind==="Group").map(e=>({name:e.spec?.profile?.displayName??e.metadata.title??e.metadata.name,ref:m(e),type:e.spec?.type}))},{staleTime:5*60*1e3,refetchInterval:!1,refetchOnWindowFocus:!1})}export{u as useAllGroups};
1
+ import{stringifyEntityRef as m}from"@backstage/catalog-model";import{useApi as t,configApiRef as n}from"@backstage/core-plugin-api";import{catalogApiRef as s}from"@backstage/plugin-catalog-react";import{getGroupFilterFromConfig as c,combineEntityFilterQueries as f}from"@spotify/backstage-plugin-soundcheck-common";import{useQuery as d}from"@tanstack/react-query";function l(){const i=t(s),a=t(n);return d(["soundcheck/all-groups"],async()=>{const r=c(a),o=f({kind:"Group"},r),{items:p}=await i.getEntities({filter:o,fields:["spec.profile.displayName","metadata.title","metadata.name","metadata.description","metadata.namespace","kind","spec.type"]});return p.filter(e=>e?.kind==="Group").map(e=>({name:e.spec?.profile?.displayName??e.metadata.title??e.metadata.name,description:e.metadata.description,ref:m(e),type:e.spec?.type}))},{staleTime:5*60*1e3,refetchInterval:!1,refetchOnWindowFocus:!1})}export{l as useAllGroups};
2
2
  //# sourceMappingURL=useAllGroups.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useMemo as u}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../graphqlKeys.esm.js";import{useAllGroups as f}from"./useAllGroups.esm.js";import{useUsersGroupClaims as y}from"./useUsersGroupClaims.esm.js";import"../useSoundcheckAlert.esm.js";import"../useConfirmationModal.esm.js";import"react-router-dom";const l=()=>{const{data:e,isLoading:i,isError:m}=y(),{data:t,isLoading:a,isError:n}=f();return{options:u(()=>{const o=new Map;return e&&e.forEach(({name:s,ref:r,type:p})=>{o.set(`${r}`,{name:s,ref:r,type:p,key:"My Groups"})}),t&&t.forEach(({name:s,ref:r,type:p})=>{o.has(`${r}`)||o.set(`${r}`,{name:s,ref:r,type:p,key:"All Groups"})}),[...o.values()]},[e,t]),isLoading:i||a,isError:m||n}};export{l as useGroupOptions};
1
+ import{useMemo as c}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../graphqlKeys.esm.js";import{useAllGroups as d}from"./useAllGroups.esm.js";import{useUsersGroupClaims as f}from"./useUsersGroupClaims.esm.js";import"../useSoundcheckAlert.esm.js";import"../useConfirmationModal.esm.js";import"react-router-dom";import"react-use/lib/useLocalStorage";const y=()=>{const{data:i,isLoading:m,isError:n}=f(),{data:e,isLoading:a,isError:u}=d();return{options:c(()=>{const o=new Map;return i&&i.forEach(({name:t,description:s,ref:r,type:p})=>{o.set(`${r}`,{name:t,description:s,ref:r,type:p,key:"My Groups"})}),e&&e.forEach(({name:t,description:s,ref:r,type:p})=>{o.has(`${r}`)||o.set(`${r}`,{name:t,description:s,ref:r,type:p,key:"All Groups"})}),[...o.values()]},[i,e]),isLoading:m||a,isError:n||u}};export{y as useGroupOptions};
2
2
  //# sourceMappingURL=useGroupOptions.esm.js.map
@@ -1,2 +1,2 @@
1
- import{stringifyEntityRef as n}from"@backstage/catalog-model";import{useApi as t,identityApiRef as p,configApiRef as f}from"@backstage/core-plugin-api";import{catalogApiRef as m}from"@backstage/plugin-catalog-react";import{getGroupFilterFromConfig as u}from"@spotify/backstage-plugin-soundcheck-common";import{useQuery as c}from"@tanstack/react-query";function y(){const i=t(p),r=t(m),o=t(f);return c(["soundcheck/user-groups-claims"],async()=>{const{ownershipEntityRefs:s}=await i.getBackstageIdentity(),a=u(o);return(await r.getEntitiesByRefs({entityRefs:s,filter:a})).items.filter(e=>e?.kind==="Group").map(e=>({name:e.spec?.profile?.displayName??e.metadata.title??e.metadata.name,ref:n(e),type:e.spec?.type}))})}export{y as useUsersGroupClaims};
1
+ import{stringifyEntityRef as n}from"@backstage/catalog-model";import{useApi as t,identityApiRef as p,configApiRef as m}from"@backstage/core-plugin-api";import{catalogApiRef as f}from"@backstage/plugin-catalog-react";import{getGroupFilterFromConfig as c}from"@spotify/backstage-plugin-soundcheck-common";import{useQuery as u}from"@tanstack/react-query";function y(){const i=t(p),r=t(f),o=t(m);return u(["soundcheck/user-groups-claims"],async()=>{const{ownershipEntityRefs:s}=await i.getBackstageIdentity(),a=c(o);return(await r.getEntitiesByRefs({entityRefs:s,filter:a})).items.filter(e=>e?.kind==="Group").map(e=>({name:e.spec?.profile?.displayName??e.metadata.title??e.metadata.name,description:e.metadata.description,ref:n(e),type:e.spec?.type}))})}export{y as useUsersGroupClaims};
2
2
  //# sourceMappingURL=useUsersGroupClaims.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useApi as T}from"@backstage/core-plugin-api";import{useQueryClient as A,useQueries as L}from"@tanstack/react-query";import{useMemo as c,useState as S,useEffect as k}from"react";import{soundcheckApiRef as q}from"../../api.esm.js";const I=({trackIds:d,groupRef:o,batchSize:n=4,skip:u})=>{const h=T(q),f=A(),s=c(()=>[...d].sort(),[d]),g=c(()=>{const r=[];for(let a=0;a<s.length;a+=n)r.push(s.slice(a,a+n));return r},[s,n]),y=c(()=>g.map((r,a)=>({queryKey:["hierarchicalTrackStatuses",r,o,a],queryFn:async()=>await h.getHierarchicalTrackStatuses(r,o),enabled:!u&&r.length>0,staleTime:1e3*60*60,cacheTime:1e3*60*60*4,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,refetchInterval:0})),[g,o,u,h]),t=L({queries:y}),[i,p]=S({loadedTracks:0,totalTracks:s.length,isLoading:!1,error:null}),m=c(()=>t.map(r=>[r.isLoading,r.error,Array.isArray(r.data)?r.data.length:0].join(":")).join("|"),[t]);return k(()=>{let r=0,a=!1,l=null;for(const e of t)e.isLoading&&(a=!0),e.error&&(l=e.error),e.data&&Array.isArray(e.data)&&(r+=e.data.length);p(e=>e.loadedTracks===r&&e.totalTracks===s.length&&e.isLoading===a&&e.error===l?e:{loadedTracks:r,totalTracks:s.length,isLoading:a,error:l})},[t,m,s.length]),k(()=>{for(const r of t)if(r.data&&Array.isArray(r.data))for(const a of r.data)f.setQueryData(["hierarchicalTrackStatus",a.trackId,o],a)},[t,f,o]),{data:c(()=>{if(t.length===0)return[];const r=[];for(const a of t)a.data&&Array.isArray(a.data)&&r.push(...a.data);return r},[t]),isLoading:i.isLoading,progress:i,error:i.error}};export{I as useBatchedHierarchicalTrackStatuses};
1
+ import{useApi as T}from"@backstage/core-plugin-api";import{useQueryClient as A,useQueries as L}from"@tanstack/react-query";import{useMemo as c,useState as S,useEffect as k}from"react";import{soundcheckApiRef as q}from"../../api.esm.js";const I=({trackIds:d,groupRef:o,batchSize:n=4,skip:u})=>{const h=T(q),f=A(),s=c(()=>[...d].sort(),[d]),g=c(()=>{const r=[];for(let a=0;a<s.length;a+=n)r.push(s.slice(a,a+n));return r},[s,n]),y=c(()=>g.map((r,a)=>({queryKey:["hierarchicalTrackStatuses",r,o,a],queryFn:async()=>await h.getHierarchicalTrackStatuses(r,o),enabled:!u&&r.length>0,staleTime:1e3*60*60,cacheTime:1e3*60*60*4,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,refetchInterval:0})),[g,o,u,h]),t=L({queries:y}),[i,p]=S({loadedTracks:0,totalTracks:s.length,isLoading:!1,error:null}),m=c(()=>t.map(r=>[r.isLoading,r.error,Array.isArray(r.data)?r.data.length:0].join(":")).join("|"),[t]);return k(()=>{let r=0,a=!1,l=null;for(const e of t)e.isLoading&&(a=!0),e.error&&(l=e.error),e.data&&Array.isArray(e.data)&&(r+=e.data.length);p(e=>e.loadedTracks===r&&e.totalTracks===s.length&&e.isLoading===a&&e.error===l?e:{loadedTracks:r,totalTracks:s.length,isLoading:a,error:l})},[t,m,s.length]),k(()=>{for(const r of t)if(r.data&&Array.isArray(r.data))for(const a of r.data)f.setQueryData(["hierarchicalTrackStatus",a.trackId,o],a)},[t,f,o]),{data:c(()=>{if(t.length===0)return[];const r=[];for(const a of t)a.data&&Array.isArray(a.data)&&r.push(...a.data);return r},[t])??[],isLoading:i.isLoading,progress:i,error:i.error}};export{I as useBatchedHierarchicalTrackStatuses};
2
2
  //# sourceMappingURL=useBatchedHierarchicalTrackStatuses.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useApi as n}from"@backstage/core-plugin-api";import{useQuery as i}from"@tanstack/react-query";import{soundcheckApiRef as c}from"../../api.esm.js";const o=(r,e)=>{const t=n(c);return i({queryKey:["groupHierarchy",r,e?.ownedEntitiesFilter,!!e?.includeParent],queryFn:async()=>(await t.getGroupHierarchy(r,e?.ownedEntitiesFilter,e?.includeParent)).hierarchy,staleTime:1e3*60*60,cacheTime:1e3*60*60*4,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,refetchInterval:!1})};export{o as useGroupHierarchy};
1
+ import{useApi as n}from"@backstage/core-plugin-api";import{useQuery as i}from"@tanstack/react-query";import{soundcheckApiRef as c}from"../../api.esm.js";const o=(r,e)=>{const t=n(c);return i({queryKey:["groupHierarchy",r,e?.ownedEntitiesFilter,!!e?.includeParent],queryFn:async()=>(await t.getGroupHierarchy(r,e?.ownedEntitiesFilter,e?.includeParent)).hierarchy,staleTime:1e3*60*60,cacheTime:1e3*60*60*4,refetchOnWindowFocus:!1,refetchOnMount:!1,refetchOnReconnect:!1,refetchInterval:!1,enabled:!!r&&r.trim()!==""&&e?.enabled!==!1})};export{o as useGroupHierarchy};
2
2
  //# sourceMappingURL=useGroupHierarchy.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{useApi as u}from"@backstage/core-plugin-api";import{useQueryClient as m,useMutation as f}from"@tanstack/react-query";import{soundcheckApiRef as y}from"../../api.esm.js";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"react/jsx-runtime";import"react";import{useLoggedInUser as p}from"../../contexts/UserProvider.esm.js";import{MutationKeys as l,QueryKeys as i}from"../graphqlKeys.esm.js";import{useSoundcheckAlert as d}from"../useSoundcheckAlert.esm.js";const k="Error Recertifying Track";function T(){const o=u(y),s=m(),{showAlert:a}=d(),{userEntityRef:n}=p(),c=async r=>{const{trackId:e,numberOfDays:t}=r;return await o.recertifyTrack(e,t,n)};return f([l.RecertifyTrack],c,{onSuccess:()=>{const r=[i.CertificationStatus,i.CertificationStatusHistory,i.GetOverallTrackPassRateTrends,i.GetIndividualTrackPassRateTrends];return Promise.all(r.map(e=>s.invalidateQueries({queryKey:[e]})))},onError:(r,e)=>{let t=`Failed to recertify track ${e}`;r instanceof Error&&(t=r.message),a({severity:"error",title:k,message:t})}})}export{T as useRecertifyTrack};
2
+ //# sourceMappingURL=useRecertifyTrack.esm.js.map
@@ -1,2 +1,2 @@
1
- import{parseEntityRef as G}from"@backstage/catalog-model";import{useMemo as o}from"react";import{useGetCampaigns as L}from"../campaigns/useGetCampaigns.esm.js";import{useGetAllTracks as E}from"./useGetAllTracks.esm.js";import{useGetTracksApplicableEntityCount as T}from"./useGetTracksApplicableEntityCount.esm.js";function A(r){if(!r||r.trim()==="")return!1;try{return G(r).kind.toLowerCase()==="group"}catch{return!1}}function M(r,h={},k){const n=A(r)&&(k?.enabled??!0),{data:d,isLoading:s,error:m}=E(h,{enabled:n}),{data:p,isLoading:l,error:c}=L({},n),u=o(()=>p?.edges?new Set(p.edges.filter(({node:e})=>e.archived).map(({node:e})=>e.track.id)):new Set,[p]),i=o(()=>d?.edges?d.edges.map(({node:e})=>e).filter(e=>!u.has(e.id)).filter(e=>!e.draft).sort((e,a)=>e.id.localeCompare(a.id)):[],[d,u]),{data:t,isLoading:f,error:g}=T(r,{ids:i.map(e=>e.id)},{enabled:n&&i.length>0&&!s&&!l}),b=o(()=>t?new Map(t.map(e=>[e.id,e.applicableEntityCount])):new Map,[t]),w=o(()=>t?i.filter(e=>{const a=b.get(e.id);return a!==void 0&&a>0}):[],[i,b,t]),y=o(()=>s||l||f||!!r&&!t&&i.length>0,[s,l,f,r,t,i.length]),C=o(()=>m||c||g,[m,c,g]);return{tracks:w,counts:t,isLoading:y,error:C}}export{M as useTracksApplicableToGroup};
1
+ import{parseEntityRef as G}from"@backstage/catalog-model";import{useMemo as i}from"react";import{useGetCampaigns as T}from"../campaigns/useGetCampaigns.esm.js";import{useGetAllTracks as y}from"./useGetAllTracks.esm.js";import{useGetTracksApplicableEntityCount as E}from"./useGetTracksApplicableEntityCount.esm.js";function v(r){if(!r||r.trim()==="")return!1;try{return G(r).kind.toLowerCase()==="group"}catch{return!1}}function A(r,b={},h){const d=v(r)&&(h?.enabled??!0),{data:s,isLoading:p,error:c}=y(b,{enabled:d}),{data:o,isLoading:l,error:m}=T({},d),u=i(()=>o?.edges?new Set(o.edges.filter(({node:e})=>e.archived).map(({node:e})=>e.track.id)):new Set,[o]),a=i(()=>s?.edges?s.edges.map(({node:e})=>e).filter(e=>!u.has(e.id)).filter(e=>!e.draft).sort((e,n)=>e.id.localeCompare(n.id)):[],[s,u]),{data:t,isLoading:g,error:f}=E(r,{ids:a.map(e=>e.id)},{enabled:d&&a.length>0&&!p&&!l}),k=i(()=>t?new Map(t.map(e=>[e.id,e.applicableEntityCount])):new Map,[t]),C=i(()=>t?a.filter(e=>{const n=k.get(e.id);return n!==void 0&&n>0}):[],[a,k,t]),L=i(()=>p||l||g||!!r&&!t&&a.length>0,[p,l,g,r,t,a.length]),w=i(()=>c||m||f,[c,m,f]);return{tracks:C??[],campaigns:o,counts:t,isLoading:L,error:w,activeTrackCount:a?.length}}export{A as useTracksApplicableToGroup};
2
2
  //# sourceMappingURL=useTracksApplicableToGroup.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as n,jsx as o}from"react/jsx-runtime";import{makeStyles as v,Modal as k,Box as B,Typography as s,Button as c}from"@material-ui/core";import{createContext as N,useState as m,useRef as M,useCallback as l,useContext as w}from"react";const T=v(e=>({modalContent:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",backgroundColor:e.palette.background.paper},modalButtons:{display:"flex",justifyContent:"flex-end","& button":{width:"40%",maxWidth:"185px"},padding:e.spacing(2,3),borderTop:`1px solid ${e.palette.divider}`},modalMessage:{margin:"15px 0 35px"},modalText:{padding:e.spacing(2,3,0,3)},cancelButton:{color:e.palette.text.primary}})),p=N({}),j=e=>{const a=T(),[u,i]=m(!1),[t,f]=m(),r=M(),x=l(({title:C,message:b,error:g})=>(f({title:C,message:b,error:g}),i(!0),new Promise(y=>{r.current=y})),[]),h=l(()=>{r.current&&r.current(!0),i(!1)},[]),d=l(()=>{r.current&&r.current(!1),i(!1)},[]);return n(p.Provider,{value:{showModal:x},children:[e.children,t&&o(k,{open:u,onClose:d,"aria-labelledby":"confirmation-modal-title","aria-describedby":"confirmation-modal-description",children:n(B,{className:a.modalContent,children:[n("div",{className:a.modalText,children:[o(s,{id:"confirmation-modal-title",variant:"h6",children:t.title}),o(s,{className:a.modalMessage,id:"confirmation-modal-description",variant:"body1",children:t.message})]}),n("div",{className:a.modalButtons,children:[!t.error&&o(c,{onClick:d,variant:"text","aria-label":"cancel",className:a.cancelButton,children:"Cancel"}),o(c,{color:"primary",onClick:h,variant:"contained","aria-label":"confirm",children:t.error?"Ok":"Confirm"})]})]})})]})},S=()=>w(p);export{j as default,S as useConfirmationModal};
1
+ import{jsxs as n,jsx as o}from"react/jsx-runtime";import{makeStyles as v,Modal as k,Box as B,Typography as s,Button as c}from"@material-ui/core";import{createContext as N,useState as m,useRef as M,useCallback as l,useContext as w}from"react";const T=v(e=>({modalContent:{position:"absolute",top:"50%",left:"50%",transform:"translate(-50%, -50%)",backgroundColor:e.palette.background.paper,maxWidth:"650px"},modalButtons:{display:"flex",justifyContent:"flex-end","& button":{width:"40%",maxWidth:"185px"},padding:e.spacing(2,3),borderTop:`1px solid ${e.palette.divider}`},modalMessage:{margin:"15px 0 35px"},modalText:{padding:e.spacing(2,3,0,3)},cancelButton:{color:e.palette.text.primary}})),p=N({}),j=e=>{const a=T(),[u,i]=m(!1),[t,x]=m(),r=M(),f=l(({title:C,message:b,error:g})=>(x({title:C,message:b,error:g}),i(!0),new Promise(y=>{r.current=y})),[]),h=l(()=>{r.current&&r.current(!0),i(!1)},[]),d=l(()=>{r.current&&r.current(!1),i(!1)},[]);return n(p.Provider,{value:{showModal:f},children:[e.children,t&&o(k,{open:u,onClose:d,"aria-labelledby":"confirmation-modal-title","aria-describedby":"confirmation-modal-description",children:n(B,{className:a.modalContent,children:[n("div",{className:a.modalText,children:[o(s,{id:"confirmation-modal-title",variant:"h6",children:t.title}),o(s,{className:a.modalMessage,id:"confirmation-modal-description",variant:"body1",children:t.message})]}),n("div",{className:a.modalButtons,children:[!t.error&&o(c,{onClick:d,variant:"text","aria-label":"cancel",className:a.cancelButton,children:"Cancel"}),o(c,{color:"primary",onClick:h,variant:"contained","aria-label":"confirm",children:t.error?"Ok":"Confirm"})]})]})})]})},S=()=>w(p);export{j as default,S as useConfirmationModal};
2
2
  //# sourceMappingURL=useConfirmationModal.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{useApi as k,useAnalytics as b}from"@backstage/core-plugin-api";import{useRef as v,useEffect as y,useCallback as $}from"react";import{useLocation as A}from"react-router-dom";import{soundcheckApiRef as E}from"../api.esm.js";import{useFeatureFlag as L}from"./useFeatureFlag.esm.js";function T(g={}){const t=L("enable-load-time-reporting"),{enabled:a=!0,routeName:n,additionalAttributes:m}=g,r=A(),e=v(""),p=k(E),f=b();return y(()=>{if(!a||!t)return;const c=n||r.pathname;return e.current=`loading-started-for-${c}`,performance.mark(e.current),document.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&(performance.clearMarks(e.current),performance.clearMeasures(`time-since-${e.current}`))}),()=>{e.current&&(performance.clearMarks(e.current),performance.clearMeasures(`time-since-${e.current}`))}},[a,t,n,m,r.pathname]),{reportContentLoaded:$(c=>{if(!a||!t||!e.current)return;const s=n||r.pathname;if(!e.current.includes(s)){performance.clearMarks(e.current),performance.clearMeasures(`time-since-${e.current}`);return}const o=`loading-ended-for-${r.pathname}`,i=`time-since-${e.current}`;try{performance.mark(o),performance.measure(i,e.current,o);const u=performance.getEntriesByName(i);if(u.length>0){const M=u[u.length-1],l=Math.round(M.duration),d=l/1e3;if(d>1e3*60*60){performance.clearMarks(o),performance.clearMeasures(i);return}const h={pathname:r.pathname,refresh:!!c?.lcp,...m,...c};p.recordLoadTime({metricType:"navigation",routeName:s,loadTimeMs:l,additionalAttributes:h}).catch(N=>{}),f.captureEvent("performance","navigation",{attributes:{metricType:"navigation",value:d,route:s,timestamp:Date.now().toString(),...h}})}}catch{}finally{performance.clearMarks(o),performance.clearMeasures(i)}},[a,t,n,m,r.pathname,p,f])}}export{T as useLoadTimeReporting};
2
+ //# sourceMappingURL=useLoadTimeReporting.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{useCallback as g,useMemo as x}from"react";import{useSearchParams as M}from"react-router-dom";const z=({pageParam:p,defaultPageSize:l=10,items:r})=>{const[a,n]=M(),m=a.get(p),h=a.get("page"),s=m?parseInt(m,10):l,o=h?parseInt(h,10):1,c=(o-1)*s,i=g(e=>{const t=new URLSearchParams(a.toString());t.set("page",String(e)),n(t,{replace:!0})},[a,n]),P=g(e=>{const t=new URLSearchParams(a.toString());t.set(p,String(e)),t.set("page","1"),n(t,{replace:!0})},[p,a,n]),S=x(()=>r.length>s?r.slice(c,c+s):r,[r,c,s]),u=g(()=>{const e=Math.ceil(r.length/s),t=Math.min(o+1,e);i(t)},[o,r.length,s,i]),f=g(()=>{const e=Math.max(o-1,1);i(e)},[o,i]),w=g(()=>{const e=new URLSearchParams(a.toString());e.set("page","1"),n(e,{replace:!0})},[a,n]);return{paginationProps:{pageSize:s,rowCount:r.length,offset:c,onNextPage:u,onPreviousPage:f,onPageSizeChange:P},paginatedItems:S,reset:w}};export{z as usePagination};
2
+ //# sourceMappingURL=usePagination.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{useMemo as a}from"react";const i=({items:t,searchTerm:o})=>a(()=>{let r=t;const s=o?.toLowerCase().trim()??"";return o&&o.length>1?r=t.filter(e=>e.name?e.name.toLowerCase().includes(s):e.id.toLowerCase().includes(s)):r=t.filter(e=>e.name?e.name.toLowerCase().startsWith(s):e.id.toLowerCase().startsWith(s)),r},[t,o]);export{i as useSearchName};
2
+ //# sourceMappingURL=useSearchName.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{useEffect as B,useCallback as P}from"react";import{useSearchParams as h}from"react-router-dom";import u from"react-use/lib/useLocalStorage";const b=({localStoragePrefix:f,defaultSortBy:g,defaultDirection:p})=>{const[t,s]=h(),[a,n]=u(`${f}-sort-column`),[i,l]=u(`${f}-direction`),r=t.get("sortBy"),o=t.get("direction"),d=r||g,m=o||p||"desc";B(()=>{r&&r!==a&&n(r),o&&o!==i&&l(o);const e=new URLSearchParams(t.toString());let c=!1;!r&&a&&(e.set("sortBy",a),c=!0),!o&&i&&(e.set("direction",i),c=!0),c&&s(e,{replace:!0})},[a,i,t,n,l,s,o,r]);const y=P(e=>{const c=d===e&&m==="asc"?"desc":"asc",S=new URLSearchParams(t.toString());S.set("sortBy",e),S.set("direction",c),s(S,{replace:!0}),n(e),l(c)},[m,d,t,n,l,s]);return{orderBy:d,order:m,handleSort:y}};export{b as useSortTableLocalStorage};
2
+ //# sourceMappingURL=useSortTableLocalStorage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{createRouteRef as a,createSubRouteRef as t}from"@backstage/core-plugin-api";const c=a({id:"soundcheck-entity"}),i=a({id:"soundcheck-group"}),n=t({id:"soundcheck-entity-certification-track-redirect",parent:c,path:"/tracks/:trackId"}),s=t({id:"soundcheck-entity-certification",parent:c,path:"/tracks/:trackId/checks/:checkId"}),r=t({id:"soundcheck-entity-playlist-redirect",parent:c,path:"/playlists/:playlistId"}),h=t({id:"soundcheck-entity-playlist-track-redirect",parent:c,path:"/playlists/:playlistId/tracks/:trackId"}),d=t({id:"soundcheck-entity-playlist-track-redirect",parent:c,path:"/playlists/:playlistId/tracks/:trackId/checks/:checkId"}),e=a({id:"soundcheck"}),k=t({id:"soundcheck-quickstart",parent:e,path:"/quickstart"}),o=t({id:"soundcheck-checks",parent:e,path:"/checks"}),p=t({id:"soundcheck-check-details",parent:e,path:"/checks/:checkId"}),u=t({id:"soundcheck-check-edit",parent:e,path:"/checks/:checkId/edit"}),R=t({id:"soundcheck-check-create",parent:e,path:"/checks/create"}),g=t({id:"soundcheck-check-templates",parent:e,path:"/checks/templates"}),l=t({id:"soundcheck-tracks",parent:e,path:"/tracks"}),f=t({id:"soundcheck-track-details",parent:e,path:"/tracks/:trackId"}),I=t({id:"soundcheck-track-edit",parent:e,path:"/tracks/:trackId/edit"}),m=t({id:"soundcheck-track-create",parent:e,path:"/tracks/create"}),y=t({id:"soundcheck-track-check-details",parent:e,path:"/tracks/:trackId/checks/:checkId"}),P=t({id:"soundcheck-campaigns",parent:e,path:"/campaigns"}),C=t({id:"soundcheck-campaign-details",parent:e,path:"/campaigns/:campaignId"}),D=t({id:"soundcheck-campaign-edit",parent:e,path:"/campaigns/:campaignId/edit"}),T=t({id:"soundcheck-campaign-create",parent:e,path:"/campaigns/create"}),E=t({id:"soundcheck-tech-health",parent:e,path:"/tech-health"}),q=t({id:"soundcheck-tech-insights",parent:e,path:"/tech-insights"}),b=t({id:"soundcheck-integrations-page",parent:e,path:"/integrations"}),x=t({id:"soundcheck-integration-details",parent:e,path:"/integrations/:integrationId"}),H=t({id:"soundcheck-integration-edit",parent:e,path:"/integrations/:integrationId/edit"});t({id:"soundcheck-tech-insights-tracks",parent:e,path:"/tech-insights/tracks"});const S=t({id:"soundcheck-tech-insights-track",parent:e,path:"/tech-insights/track"});export{T as campaignCreateRouteRef,C as campaignDetailsRouteRef,D as campaignEditRouteRef,P as campaignsPageRouteRef,r as certificationPlaylistRouteRef,d as certificationPlaylistTrackCheckRouteRef,h as certificationPlaylistTrackRouteRef,s as certificationRouteRef,n as certificationTrackRouteRef,R as checkCreateRouteRef,p as checkDetailsRouteRef,u as checkEditRouteRef,g as checkTemplatesRouteRef,o as checksPageRouteRef,c as entityRootRouteRef,i as groupRootRouteRef,x as integrationDetailsRouteRef,H as integrationEditRouteRef,b as integrationsPageRouteRef,k as quickstartRouteRef,e as rootRouteRef,E as techHealthRouteRef,q as techInsightsPageRouteRef,S as techInsightsTrackRouteRef,y as trackCheckDetailsRouteRef,m as trackCreateRouteRef,f as trackDetailsRouteRef,I as trackEditRouteRef,l as tracksPageRouteRef};
1
+ import{createRouteRef as a,createSubRouteRef as e}from"@backstage/core-plugin-api";const c=a({id:"soundcheck-entity"}),i=a({id:"soundcheck-group"}),r=e({id:"soundcheck-entity-certification-track-redirect",parent:c,path:"/tracks/:trackId"}),n=e({id:"soundcheck-entity-certification",parent:c,path:"/tracks/:trackId/checks/:checkId"}),s=e({id:"soundcheck-entity-playlist-redirect",parent:c,path:"/playlists/:playlistId"}),d=e({id:"soundcheck-entity-playlist-track-redirect",parent:c,path:"/playlists/:playlistId/tracks/:trackId"}),h=e({id:"soundcheck-entity-playlist-track-redirect",parent:c,path:"/playlists/:playlistId/tracks/:trackId/checks/:checkId"}),t=a({id:"soundcheck"}),o=e({id:"soundcheck-quickstart",parent:t,path:"/quickstart"}),k=e({id:"soundcheck-checks",parent:t,path:"/checks"}),p=e({id:"soundcheck-check-details",parent:t,path:"/checks/:checkId"}),u=e({id:"soundcheck-check-edit",parent:t,path:"/checks/:checkId/edit"}),R=e({id:"soundcheck-check-create",parent:t,path:"/checks/create"}),g=e({id:"soundcheck-check-templates",parent:t,path:"/checks/templates"}),l=e({id:"soundcheck-tracks",parent:t,path:"/tracks"}),f=e({id:"soundcheck-track-details",parent:t,path:"/tracks/:trackId"}),m=e({id:"soundcheck-track-edit",parent:t,path:"/tracks/:trackId/edit"}),I=e({id:"soundcheck-track-create",parent:t,path:"/tracks/create"}),y=e({id:"soundcheck-track-check-details",parent:t,path:"/tracks/:trackId/checks/:checkId"}),v=e({id:"soundcheck-campaigns",parent:t,path:"/campaigns"}),P=e({id:"soundcheck-campaign-details",parent:t,path:"/campaigns/:campaignId"}),x=e({id:"soundcheck-campaign-edit",parent:t,path:"/campaigns/:campaignId/edit"}),w=e({id:"soundcheck-campaign-create",parent:t,path:"/campaigns/create"}),E=e({id:"soundcheck-tech-health",parent:t,path:"/tech-health"}),C=e({id:"soundcheck-tech-insights",parent:t,path:"/tech-insights"}),D=e({id:"soundcheck-integrations-page",parent:t,path:"/integrations"}),T=e({id:"soundcheck-integration-details",parent:t,path:"/integrations/:integrationId"}),q=e({id:"soundcheck-integration-edit",parent:t,path:"/integrations/:integrationId/edit"}),O=e({id:"soundcheck-tech-insights-track",parent:t,path:"/tech-insights/track"}),b=e({id:"soundcheck-track-overview",parent:t,path:"/tracks/:trackId/overview"}),H=e({id:"soundcheck-track-explorer",parent:t,path:"/tracks/:trackId/explorer"}),S=e({id:"soundcheck-campaign-overview",parent:t,path:"/campaigns/:campaignId/overview"}),j=e({id:"soundcheck-campaign-explorer",parent:t,path:"/campaigns/:campaignId/explorer"});export{w as campaignCreateRouteRef,P as campaignDetailsRouteRef,x as campaignEditRouteRef,j as campaignExplorerRouteRef,S as campaignOverviewRouteRef,v as campaignsPageRouteRef,s as certificationPlaylistRouteRef,h as certificationPlaylistTrackCheckRouteRef,d as certificationPlaylistTrackRouteRef,n as certificationRouteRef,r as certificationTrackRouteRef,R as checkCreateRouteRef,p as checkDetailsRouteRef,u as checkEditRouteRef,g as checkTemplatesRouteRef,k as checksPageRouteRef,c as entityRootRouteRef,i as groupRootRouteRef,T as integrationDetailsRouteRef,q as integrationEditRouteRef,D as integrationsPageRouteRef,o as quickstartRouteRef,t as rootRouteRef,E as techHealthRouteRef,C as techInsightsPageRouteRef,O as techInsightsTrackRouteRef,y as trackCheckDetailsRouteRef,I as trackCreateRouteRef,f as trackDetailsRouteRef,m as trackEditRouteRef,H as trackExplorerRouteRef,b as trackOverviewRouteRef,l as tracksPageRouteRef};
2
2
  //# sourceMappingURL=routes.esm.js.map
@@ -1,2 +1,2 @@
1
- const s="check-pass-rates-summary.csv",a="track-pass-rates-summary.csv",e="entity-pass-rates-summary.csv",t="team-pass-rates-summary.csv",m="check-pass-rates.csv",c="track-pass-rates.csv",r="entity-pass-rates.csv",v="team-pass-rates.csv",n="campaign-track-pass-rates.csv";export{n as campaignTrackPassRatesCsvFilename,m as checkPassRatesCsvFilename,s as checkPassRatesSummaryCsvFilename,r as entityPassRatesCsvFilename,e as entityPassRatesSummaryCsvFilename,v as groupPassRatesCsvFilename,t as groupPassRatesSummaryCsvFilename,c as trackPassRatesCsvFilename,a as trackPassRatesSummaryCsvFilename};
1
+ import{sum as v}from"lodash";const g="check-pass-rates-summary.csv",y="track-pass-rates-summary.csv",C="entity-pass-rates-summary.csv",R="team-pass-rates-summary.csv",d="check-pass-rates.csv",f="track-pass-rates.csv",h="entity-pass-rates.csv",k="team-pass-rates.csv",F="campaign-track-pass-rates.csv",P=(a,e=2)=>{if(a.length===0)return[];const o=a.filter(s=>s>0),r=v(o);if(r===0)return a.map(()=>0);const t=a.map(s=>s>0?s/r*100:0),n=t.filter(s=>s>0&&s<e).length,m=n*e;if(n===0||m>=100)return t;const p=100-m,c=t.filter(s=>s>=e).reduce((s,l)=>s+l,0);return t.map(s=>s===0?0:s<e?e:c>0?s/c*p:s)},i=["Passed","Failed","Warning","Exempt","Error","Not Reported"];function u(a){return a==="Not Reported"?"notReported":a.toLowerCase()}function S(){return i.map(a=>u(a))}function b(a){return{passed:"rgb(76, 175, 80)",failed:"rgb(244, 67, 54)",warning:"rgb(255, 152, 0)",exempt:"rgb(33, 150, 243)",error:"rgb(246, 104, 94)",notReported:"rgb(97, 97, 97)"}[a]}export{P as calculateAdjustedBarWidths,F as campaignTrackPassRatesCsvFilename,i as chartStatuses,d as checkPassRatesCsvFilename,g as checkPassRatesSummaryCsvFilename,h as entityPassRatesCsvFilename,C as entityPassRatesSummaryCsvFilename,b as getChartStatusColor,u as getChartStatusKey,S as getChartStatusKeys,k as groupPassRatesCsvFilename,R as groupPassRatesSummaryCsvFilename,f as trackPassRatesCsvFilename,y as trackPassRatesSummaryCsvFilename};
2
2
  //# sourceMappingURL=charts.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as i}from"@material-ui/core/styles";const a=i(t=>({root:{overflow:"hidden",display:"flex"},card:{padding:t.spacing(3),display:"flex",gap:t.spacing(2.5)},buttonChoices:{margin:"20px 0","& button":{marginRight:"10px"}},backButton:{color:t.palette.text.primary},filters:{display:"flex",gap:t.spacing(1),flexDirection:"column"},stepLabel:{cursor:"pointer !important"},stepper:{width:"100%"},formWrapper:{paddingTop:t.spacing(2),maxWidth:1920}}));export{a as formStyles};
1
+ import{makeStyles as t}from"@material-ui/core/styles";const i=t(a=>({root:{overflow:"hidden",display:"flex"},card:{padding:a.spacing(3),display:"flex",gap:a.spacing(2.5)},buttonChoices:{margin:"20px 0","& button":{marginRight:"10px"}},backButton:{color:a.palette.text.primary},filters:{display:"flex",gap:a.spacing(1),flexDirection:"column"},stepLabel:{cursor:"pointer !important"},stepper:{width:"100%"},formWrapper:{paddingTop:a.spacing(2),maxWidth:1920},formWrapperBUI:{padding:"0 var(--bui-space-4)",maxWidth:1920}}));export{i as formStyles};
2
2
  //# sourceMappingURL=formStyles.esm.js.map
@@ -1,2 +1,2 @@
1
- const o=Intl.NumberFormat("en",{notation:"compact"}),m=t=>o.format(t);export{m as compactNumberFormatter};
1
+ const o=Intl.NumberFormat("en",{notation:"compact"}),r=t=>o.format(t);function e(t,n){return n<=0?0:Math.round((t??0)/n*100)}export{r as compactNumberFormatter,e as getPercentage};
2
2
  //# sourceMappingURL=formatters.esm.js.map
@@ -1,2 +1,2 @@
1
- const y=r=>{const{lifecycles:e,owners:t,types:s,systems:n}=r,o=e?.length?{"spec.lifecycle":e}:void 0,i=t?.length?{"relations.ownedBy":t}:void 0,l=s?.length?{"spec.type":s}:void 0,c=n?.length?{"relations.partOf":n}:void 0;if(o||i||l||c)return{...o,...i,...l,...c}};export{y as toFilter};
1
+ const k=e=>{const{lifecycles:t,owners:s,types:c,systems:i}=e,n=t?.length?{"spec.lifecycle":t}:void 0,o=s?.length?{"relations.ownedBy":s}:void 0,l=c?.length?{"spec.type":c}:void 0,r=i?.length?{"relations.partOf":i}:void 0;if(n||o||l||r)return{...n,...o,...l,...r}},g=e=>e<1e4?"<10k":e<1e5?"[10k-100k)":e<1e6?"[100k-1M)":">=1M",p=e=>e<5?"<5":e<10?"[5-10)":e<50?"[10-50)":">=50",y=e=>e<10?"<10":e<50?"[10-50)":e<100?"[50-100)":">=100";export{y as getChecksBucket,g as getEntitiesBucket,p as getTracksBucket,k as toFilter};
2
2
  //# sourceMappingURL=helpers.esm.js.map
@@ -1,2 +1,2 @@
1
- class r{#n;#e;#i;#r;#t=null;constructor(t){this.#n=t.analytics,this.#e=t.routeName,this.#i=t.additionalAttributes||{},this.#r=t.soundcheckApi}startMeasuring(){if("PerformanceObserver"in window){try{this.#t=new PerformanceObserver(t=>{const n=t.getEntries(),e=n[n.length-1];e&&e.renderTime!==void 0&&this.#s({value:e.renderTime,id:e.name||"unknown",delta:e.renderTime,entries:[e]})}),this.#t.observe({type:"largest-contentful-paint"})}catch{}document.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&this.stopMeasuring()})}}#s(t){const n=t.value/1e3,e=this.#a(n);console.log(`[LCPReporter] LCP: ${n}s, Rating: ${e}, Route: ${this.#e||"unknown"}`),this.#r.recordLoadTime({routeName:this.#e||"unknown",loadTimeMs:t.value}).then(o=>{}),this.#o(n,e)}#o(t,n){this.#n.captureEvent("performance_metric","LCP Measurement",{attributes:{metricType:"lcp",value:t.toString(),rating:n,route:this.#e||"unknown",timestamp:Date.now().toString(),...this.#i}})}#a(t){return t<=2.5?"good":t<=4?"needs-improvement":"poor"}stopMeasuring(){this.#t&&(this.#t.disconnect(),this.#t=null)}}function s(i){return new r(i)}export{r as LCPReporter,s as createLCPReporter};
1
+ class n{#n;#e;#i;#s;#t=null;#r;constructor(t){this.#n=t.analytics,this.#e=t.routeName,this.#i=t.additionalAttributes||{},this.#s=t.soundcheckApi,this.#r=0}getLCPValue(){return this.#r}startMeasuring(){if("PerformanceObserver"in window){try{this.#t=new PerformanceObserver(t=>{const e=t.getEntries(),i=e[e.length-1];i&&i.renderTime!==void 0&&this.#o({value:i.renderTime,entry:i})}),this.#t.observe({type:"largest-contentful-paint"})}catch{}document.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&this.stopMeasuring()})}}#o(t){this.#r=t.value;const e=t.value/1e3,i=this.#c(e);this.#s.recordLoadTime({metricType:"lcp",routeName:this.#e||"unknown",loadTimeMs:t.value,additionalAttributes:this.#i}).catch(o=>{}),this.#a(e,i)}#a(t,e){this.#n.captureEvent("performance","lcp",{attributes:{metricType:"lcp",value:t,rating:e,route:this.#e||"unknown",timestamp:Date.now().toString(),...this.#i}})}#c(t){return t<=2.5?"good":t<=4?"needs-improvement":"poor"}stopMeasuring(){this.#t&&(this.#t.disconnect(),this.#t=null)}}function s(r){return new n(r)}export{n as LCPReporter,s as createLCPReporter};
2
2
  //# sourceMappingURL=lcpReporting.esm.js.map
@@ -1,2 +1,2 @@
1
- const i=1,r=31536e3,n=e=>{if(e){if(isNaN(e))return"Invalid value";if(e<1)return"Minimum of 1";if(e>31536e3)return"Maximum exceeded"}else return"Enter a value";return!0};export{r as MAX_TIME_UNIT_VALUE,i as MIN_TIME_UNIT_VALUE,n as validateTimeUnitValue};
1
+ const i=1,n=31536e3,a=t=>{if(t){if(isNaN(t))return"Invalid value";if(t<1)return"Minimum of 1";if(t>31536e3)return"Maximum exceeded"}else return"Enter a value";return!0};function u(t){if(!t)return"";const r=!isNaN(t)&&!isNaN(parseFloat(t));let e;return r&&String(t).length>=10?e=new Date(Number(t)):e=new Date(t),isNaN(e.getTime())?String(t):e.toLocaleDateString()}export{n as MAX_TIME_UNIT_VALUE,i as MIN_TIME_UNIT_VALUE,u as formatTimestamp,a as validateTimeUnitValue};
2
2
  //# sourceMappingURL=time.esm.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@spotify/backstage-plugin-soundcheck",
3
3
  "description": "Ensure quality, reliability and alignment of software development with codified checks and guidance.",
4
- "version": "0.19.2",
4
+ "version": "0.19.4",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "homepage": "https://backstage.spotify.com",
7
7
  "main": "./dist/index.esm.js",
@@ -58,17 +58,18 @@
58
58
  "prepare": "yarn generate"
59
59
  },
60
60
  "dependencies": {
61
- "@backstage/catalog-client": "^1.11.0",
61
+ "@backstage/catalog-client": "^1.12.0",
62
62
  "@backstage/catalog-model": "^1.7.5",
63
- "@backstage/config": "^1.3.3",
64
- "@backstage/core-compat-api": "^0.5.0",
65
- "@backstage/core-components": "^0.17.5",
66
- "@backstage/core-plugin-api": "^1.10.9",
67
- "@backstage/frontend-plugin-api": "^0.11.0",
68
- "@backstage/plugin-catalog-react": "^1.20.0",
69
- "@backstage/plugin-permission-react": "^0.4.36",
70
- "@backstage/plugin-scaffolder-react": "^1.19.0",
71
- "@backstage/types": "^1.2.1",
63
+ "@backstage/config": "^1.3.5",
64
+ "@backstage/core-compat-api": "^0.5.3",
65
+ "@backstage/core-components": "^0.18.2",
66
+ "@backstage/core-plugin-api": "^1.11.1",
67
+ "@backstage/frontend-plugin-api": "^0.12.1",
68
+ "@backstage/plugin-catalog-react": "^1.21.2",
69
+ "@backstage/plugin-permission-react": "^0.4.37",
70
+ "@backstage/plugin-scaffolder-react": "^1.19.2",
71
+ "@backstage/types": "^1.2.2",
72
+ "@backstage/ui": "^0.8.1",
72
73
  "@date-io/luxon": "^1.0.0",
73
74
  "@hookform/resolvers": "^4.0.0",
74
75
  "@material-ui/core": "^4.12.2",
@@ -78,37 +79,32 @@
78
79
  "@mui/styles": "^5.14.7",
79
80
  "@nivo/circle-packing": "^0.99.0",
80
81
  "@nivo/colors": "^0.99.0",
81
- "@nivo/core": "^0.99.0",
82
82
  "@nivo/heatmap": "^0.99.0",
83
83
  "@nivo/icicle": "^0.99.0",
84
84
  "@nivo/sunburst": "^0.99.0",
85
85
  "@nivo/treemap": "^0.99.0",
86
86
  "@remixicon/react": "^4.6.0",
87
- "@spotify/backstage-plugin-core": "^0.8.10",
88
- "@spotify/backstage-plugin-soundcheck-common": "^0.19.0",
87
+ "@spotify/backstage-plugin-core": "^0.8.11",
88
+ "@spotify/backstage-plugin-soundcheck-common": "^0.19.2",
89
89
  "@tanstack/react-query": "^4.6.1",
90
- "@tanstack/react-virtual": "^3.13.9",
91
- "@types/react-csv": "^1.1.6",
92
90
  "@uiw/react-md-editor": "3.20.10",
93
91
  "classnames": "^2.3.2",
94
92
  "copy-to-clipboard": "^3.3.3",
95
93
  "cron-validate": "^1.4.5",
96
94
  "cronstrue": "^2.28.0",
97
95
  "d3-color": "^3.1.0",
98
- "d3-hierarchy": "^3.1.2",
99
96
  "d3-interpolate": "^3.0.1",
100
97
  "d3-scale": "^4.0.2",
101
98
  "d3-scale-chromatic": "^3.0.0",
102
- "d3-shape": "^3.2.0",
103
99
  "framer-motion": "^6.0.0",
104
100
  "git-url-parse": "^16.0.0",
105
101
  "graphql-request": "6.1.0",
106
- "immer": "^10.1.1",
107
102
  "js-yaml": "^4.1.0",
108
103
  "lodash": "^4.17.21",
109
- "lodash.debounce": "^4.0.8",
110
104
  "luxon": "^3.1.1",
105
+ "pako": "^2.1.0",
111
106
  "prismjs": "^1.27.0",
107
+ "react-aria-components": "^1.10.1",
112
108
  "react-circular-progressbar": "^2.1.0",
113
109
  "react-confetti": "^6.1.0",
114
110
  "react-csv": "^2.2.2",
@@ -117,14 +113,11 @@
117
113
  "react-markdown": "^10.1.0",
118
114
  "react-simple-code-editor": "^0.14.1",
119
115
  "react-use": "^17.2.4",
120
- "react-virtuoso": "^4.0.0",
121
116
  "react-window": "^1.8.8",
122
117
  "recharts": "^2.8.0",
123
118
  "rehype-raw": "^7.0.0",
124
119
  "remark-gfm": "^4.0.0",
125
- "slate": "^0.117.0",
126
120
  "use-immer": "^0.11.0",
127
- "use-resize-observer": "^9.1.0",
128
121
  "uuid": "^11.0.0",
129
122
  "zod": "^3.20.0"
130
123
  },
@@ -134,34 +127,33 @@
134
127
  "react-router-dom": "6.0.0-beta.0 || ^6.3.0"
135
128
  },
136
129
  "devDependencies": {
137
- "@backstage/cli": "^0.34.0",
138
- "@backstage/core-app-api": "^1.18.0",
139
- "@backstage/dev-utils": "^1.1.13",
130
+ "@backstage/cli": "^0.34.4",
131
+ "@backstage/core-app-api": "^1.19.1",
132
+ "@backstage/dev-utils": "^1.1.16",
140
133
  "@backstage/e2e-test-utils": "^0.1.1",
141
- "@backstage/frontend-test-utils": "^0.3.5",
142
- "@backstage/plugin-permission-common": "^0.9.1",
143
- "@backstage/test-utils": "^1.7.11",
134
+ "@backstage/frontend-test-utils": "^0.4.0",
135
+ "@backstage/plugin-permission-common": "^0.9.2",
136
+ "@backstage/test-utils": "^1.7.12",
144
137
  "@graphql-codegen/cli": "^5.0.0",
145
138
  "@graphql-codegen/typescript": "^4.0.0",
146
139
  "@graphql-codegen/typescript-graphql-request": "^6.0.0",
147
140
  "@graphql-codegen/typescript-operations": "^4.0.0",
148
141
  "@playwright/test": "^1.32.3",
149
142
  "@sp4b-dev/test-utils": "^0.0.13",
150
- "@spotify/backstage-plugin-core-common": "^0.6.9",
151
- "@spotify/backstage-plugin-soundcheck-node": "^0.10.0",
143
+ "@spotify/backstage-plugin-core-common": "^0.6.10",
144
+ "@spotify/backstage-plugin-soundcheck-node": "^0.10.2",
152
145
  "@testing-library/jest-dom": "^6.0.0",
153
146
  "@testing-library/react": "^14.0.0",
154
147
  "@testing-library/user-event": "^14.0.0",
155
148
  "@types/d3-color": "^3.1.0",
156
- "@types/d3-hierarchy": "^3",
157
149
  "@types/d3-interpolate": "^3",
158
150
  "@types/d3-scale": "^4",
159
151
  "@types/d3-scale-chromatic": "^3.0.0",
160
- "@types/d3-shape": "^3",
161
152
  "@types/git-url-parse": "^16.0.0",
162
153
  "@types/jest": "^30.0.0",
163
154
  "@types/luxon": "^3.0.1",
164
155
  "@types/node": "^22.0.0",
156
+ "@types/react-csv": "^1.1.6",
165
157
  "@types/react-window": "^1.8.5",
166
158
  "cross-fetch": "^4.0.0",
167
159
  "msw": "^1.0.0"
@@ -1,2 +0,0 @@
1
- import{jsx as i,jsxs as o,Fragment as X}from"react/jsx-runtime";import{useRouteRef as Y,useApi as Z,configApiRef as ee}from"@backstage/core-plugin-api";import{EntityRefLink as ie}from"@backstage/plugin-catalog-react";import{usePermission as u}from"@backstage/plugin-permission-react";import{makeStyles as te,Button as ae,Box as n,Typography as N,Divider as oe,Tabs as ne,Tab as y}from"@material-ui/core";import{soundcheckCampaignReadPermission as re,soundcheckCampaignUpdatePermission as se,soundcheckCampaignNotificationsCreatePermission as ce,toEntityFilterQuery as le}from"@spotify/backstage-plugin-soundcheck-common";import{useMemo as s,useState as me,useCallback as pe}from"react";import{useParams as de,useNavigate as ge}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetCampaigns as fe}from"../../hooks/campaigns/useGetCampaigns.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatus as he}from"../../hooks/aggregations/useCertificationStatus.esm.js";import{useCheckStatuses as ue}from"../../hooks/aggregations/useCheckStatuses.esm.js";import{useLCPReporting as ye}from"../../hooks/useLCPReporting.esm.js";import{campaignEditRouteRef as ke}from"../../routes.esm.js";import{FilterSidebar as Ce}from"../FilterSidebar/FilterSidebar.esm.js";import"../FilterSidebar/StateFilter.esm.js";import{useTrackFilterSidebar as Se}from"../FilterSidebar/useTrackFilterSidebar.esm.js";import{toFilter as be}from"../FilterSidebar/util.esm.js";import{LevelsTable as Te}from"../LevelsTable/LevelsTable.esm.js";import{LoadingIndicator as we}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as ve}from"../PageWarningMessage/PageWarningMessage.esm.js";import{SendCampaignNotificationDialog as xe}from"../SendCampaignNotificationDialog/SendCampaignNotificationDialog.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as Ne}from"../SoundcheckHeader/useHeader.esm.js";import{SoundcheckMarkdownContent as Re}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContent.esm.js";import"@backstage/core-components";import"react-markdown";import"rehype-raw";import"remark-gfm";import{TopFailingChecksTable as Fe}from"../TopFailingChecksTable/TopFailingChecksTable.esm.js";import{TrackEntitiesTable as Le}from"../TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js";import{CampaignStatusHistoryTile as Be}from"./CampaignStatusHistoryTile.esm.js";import{CampaignStatusTile as Ae}from"./CampaignStatusTile.esm.js";import{DaysRemainingTile as Ee}from"./DaysRemainingTile.esm.js";const De=te(e=>({root:{height:"100%",background:e.palette.background.default,display:"flex",width:"100%",borderTop:`1px solid ${e.palette.divider}`},progressContainer:{flex:1,borderBottom:`1px solid ${e.palette.divider}`,padding:e.spacing(2)},campaignContainerContent:{paddingTop:e.spacing(1),paddingBottom:e.spacing(1),backgroundColor:e.palette.background.paper},editButton:{marginLeft:"auto"},notificationButton:{marginRight:e.spacing(1)},checksContainer:{},entitiesContainer:{marginTop:e.spacing(3)},headerDescription:{fontSize:e.typography.body2.fontSize,margin:e.spacing(.5,0,0),"& p":{margin:0},"& a":{color:"inherit",textDecoration:"underline"}},content:{paddingTop:0,flex:1},ownerLink:{"& span":{color:"inherit","&:hover":{textDecoration:"underline"}}},sectionTitle:{paddingBottom:e.spacing(1)},chartSection:{flex:1,flexBasis:"auto",minWidth:320,display:"flex",flexDirection:"column",height:"100%"},title:{fontWeight:"bold",fontSize:"1.1rem",lineHeight:`${e.typography.h5.fontSize}px`,cursor:"default",marginBottom:e.spacing(2)},divider:{marginTop:e.spacing(1),marginBottom:e.spacing(1)},tabs:{padding:e.spacing(2,2,0,2)},contentArea:{flex:1,padding:e.spacing(0,2)},tableArea:{margin:e.spacing(1,0,2)}})),Ie=()=>{const e=De(),{owners:c,lifecycles:l,types:m,systems:p,stagedLifecycles:R,setStagedLifecycles:F,stagedOwners:L,setStagedOwners:B,stagedTypes:A,setStagedTypes:E,stagedSystems:D,setStagedSystems:I,hasFilterChanges:P,handleApplyFilters:j,handleClearFilters:O}=Se(),d=s(()=>be({lifecycles:l,owners:c,types:m,systems:p}),[l,c,m,p]),[g,z]=me("checks"),H=pe((f,K)=>{z(K)},[]),{campaignId:r}=de();ye({routeName:"soundcheck-campaign-details",additionalAttributes:{campaignId:r??"",owners:c?.join(",")??"",lifecycles:l?.join(",")??"",types:m?.join(",")??"",systems:p?.join(",")??""}});const{data:M,isLoading:h}=fe({ids:[r],first:1}),a=M?.edges?.[0]?.node,t=a?.track,{loading:W,allowed:$}=u({permission:re,resourceRef:r}),{loading:k,allowed:C}=u({permission:se,resourceRef:r}),G=Array.from(new Set(t?.levels.flatMap(f=>f.checks).map(f=>f.id)??[])),{data:S,isLoading:Q}=ue({trackId:t?.id,checkIds:G,filter:d},!!t),b=ge(),T=Y(ke),U=s(()=>t?.ownerEntityRef?i(ie,{color:"inherit",entityRef:t.ownerEntityRef,className:e.ownerLink}):null,[t?.ownerEntityRef,e.ownerLink]),w=Z(ee).getOptionalBoolean("soundcheck.notifications.enabled"),{loading:v,allowed:x}=u({permission:ce}),{data:V}=he({trackId:t?.id??"",filter:d},!!a),q=s(()=>o(X,{children:[w&&!v&&x&&a&&i(xe,{campaign:a,buttonClass:e.notificationButton}),!k&&C&&t?.isEditable?i(ae,{className:e.editButton,variant:"contained",color:"primary",onClick:()=>{b(T({campaignId:r}))},children:"Edit Campaign"}):null]}),[w,v,x,a,e.notificationButton,e.editButton,k,C,t?.isEditable,b,T,r]),J=s(()=>t?.description?i(Re,{className:e.headerDescription,content:t.description}):null,[e.headerDescription,t?.description]);Ne({title:t?.name,description:J,customSubtitle:U,sectionRight:q});const _=s(()=>le(t?.filter),[t]);return o("div",{children:[i(ve,{entityName:"track",entityId:r,showNotFound:!h&&!a,showCannotView:!W&&!$}),h&&i(we,{}),t&&o("div",{className:e.root,children:[i(n,{children:i(Ce,{trackFilter:_,stagedTypes:A,stagedLifecycles:R,stagedOwners:L,stagedSystems:D,onTypesChange:E,onLifecyclesChange:F,onOwnersChange:B,onSystemsChange:I,onApplyFilters:j,onClearFilters:O,hasFilterChanges:P})}),o(n,{className:e.content,children:[i("div",{className:e.progressContainer,children:o(n,{display:"flex",marginTop:2,children:[o(n,{display:"flex",flexDirection:"column",marginRight:3,minWidth:320,children:[i(N,{className:e.title,children:"Current Status"}),i(Ae,{campaign:a,filter:d}),i(oe,{className:e.divider}),i(Ee,{campaign:a})]}),o(n,{className:e.chartSection,children:[i(N,{className:e.title,children:"Historical Status"}),i(Be,{campaign:a,filter:d})]})]})}),i(n,{className:e.tabs,children:o(ne,{value:g,onChange:H,indicatorColor:"primary",textColor:"primary",children:[i(y,{label:"Checks",value:"checks"}),i(y,{label:"Top Failing Checks",value:"topFailingChecks"}),i(y,{label:"Entities",value:"entities"})]})}),o(n,{className:e.contentArea,children:[g==="checks"&&i("div",{className:e.tableArea,children:i(Te,{track:t,checkStatuses:S,isLoading:h||Q,hideLevel:!0})}),g==="entities"&&i(n,{marginTop:1,children:i(Le,{track:t,lifecycles:l,owners:c,types:m,systems:p})}),g==="topFailingChecks"&&i("div",{className:e.tableArea,children:i(Fe,{track:t,checkStatuses:S,certificationStatus:V?.certificationStatus,hideLevel:!0})})]})]})]})]})};export{Ie as CampaignInsightsPage};
2
- //# sourceMappingURL=CampaignInsightsPage.esm.js.map
@@ -1,2 +0,0 @@
1
- import{jsx as e}from"react/jsx-runtime";import{useTheme as h,Box as m}from"@material-ui/core";import{makeStyles as f}from"@material-ui/core/styles";import{DateTime as n}from"luxon";import{useMemo as u}from"react";import{ResponsiveContainer as g}from"recharts";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatusHistory as y}from"../../hooks/aggregations/useCertificationStatusHistory.esm.js";import"react-router-dom";import{AreaChart as x}from"../AreaChart/AreaChart.esm.js";import{LineChartPlaceholder as S}from"../Charts/LineChart/LineChartPlaceholder.esm.js";const C=f(t=>({card:{display:"flex",flexDirection:"column",width:"100%",height:290},title:{fontWeight:"bold",fontSize:"1.1rem",lineHeight:`${t.typography.h5.fontSize}px`,cursor:"default"},content:{padding:t.spacing(1,2,1,0),width:"100%",height:"100%"}}));function H({campaign:t,filter:p}){const c=h(),r=C(),d=n.fromISO(t.startDate),l=Math.max(Math.ceil(n.now().diff(d,"days").days),1),{data:o}=y({trackId:t.track.id,filter:p,numberOfDays:l},!!t),i=o?.certificationStatusHistory.numberOfEntities??0,a=u(()=>i>0?o?.certificationStatusHistory.history.map(s=>({date:s.date,Passed:Math.round(s.statusByLevel[0].passed/i*100)})):[],[i,o]);return e(g,{height:290,debounce:1,children:e(m,{className:r.card,children:e(m,{className:r.content,children:a?.length?e(x,{data:a,categories:["Passed"],categoryColors:{Passed:c.palette.success.main},index:"date",minValue:0,maxValue:100,showLegend:!1}):e(S,{height:290,text:i>0?"No Historical Data":"No Applicable Entities"})})})})}export{H as CampaignStatusHistoryTile};
2
- //# sourceMappingURL=CampaignStatusHistoryTile.esm.js.map
@@ -1,2 +0,0 @@
1
- import{jsx as t,jsxs as s}from"react/jsx-runtime";import{useTheme as S,Box as i,Grid as b,Typography as f}from"@material-ui/core";import{makeStyles as B}from"@material-ui/core/styles";import I from"@material-ui/icons/TrendingDown";import k from"@material-ui/icons/TrendingFlat";import R from"@material-ui/icons/TrendingUp";import{DateTime as N}from"luxon";import{useMemo as T}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatus as w}from"../../hooks/aggregations/useCertificationStatus.esm.js";import{useCertificationStatusHistory as L}from"../../hooks/aggregations/useCertificationStatusHistory.esm.js";import"react-router-dom";import{compactNumberFormatter as g}from"../../utils/formatters.esm.js";import{CategoryBar as j}from"../CategoryBar/CategoryBar.esm.js";import{LoadingIndicator as M}from"../LoadingIndicator/LoadingIndicator.esm.js";const C=B(e=>({card:{display:"flex",flexDirection:"column"},content:{padding:0,display:"flex",margin:0,gap:e.spacing(1)},item:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:e.spacing(.5)},legendDash:{width:e.spacing(2),height:e.spacing(1),borderRadius:e.spacing(.375),marginRight:e.spacing(1)},category:{display:"flex",alignItems:"center",flex:1,marginRight:e.spacing(2)}}));function v({label:e,value:l,total:a,color:m,valueFormatter:c}){const p=C();return s(b,{item:!0,xs:12,className:p.item,children:[s(i,{className:p.category,children:[t("span",{className:p.legendDash,style:{backgroundColor:m}}),t(f,{children:e})]}),a&&s(f,{children:[c(l)," of ",c(a)," (",Math.round(l/a*100),"%)"]})]})}function H({campaign:e,filter:l}){const a=S(),m=C(),{data:c,isLoading:p}=w({trackId:e.track.id,filter:l},!0),r=c?.certificationStatus.statusByLevel[0],D=Math.max(Math.ceil(N.now().diff(N.fromISO(e.startDate),"days").days),1),{data:u}=L({trackId:e.track.id,filter:l,numberOfDays:D},!!e),o=c?.certificationStatus.numberOfEntities??0,d=T(()=>{if(o===void 0||u===void 0||r===void 0)return;const x=(u.certificationStatusHistory.history[0]?.statusByLevel[0].passed??0)/o*100;return r.passed/o*100-x},[u,r,o]);let h=k,y="inherit",n;return d&&(n=`${d.toFixed(0)}% since campaign start`,d<=-1?(h=I,n=`-${n}`,y="error"):d>=1&&(h=R,n=`+${n}`,y="primary")),p?t(i,{className:m.card,children:t(M,{})}):t(i,{className:m.card,children:r?t(i,{className:m.content,children:s(i,{width:"100%",children:[t(j,{data:r,valueFormatter:g,categories:["passed","failed","notReported"],categoryFormatter:x=>x.replace(/\b\w/g,F=>F.toUpperCase()),colors:[a.palette.success.main,a.palette.error.main,a.palette.text.disabled]}),t(i,{paddingTop:"12px",children:s(b,{spacing:2,children:[t(v,{label:"Passing",value:r.passed,total:o,color:a.palette.success.main,valueFormatter:g}),t(v,{label:"Failing",value:r.failed,total:o,color:a.palette.error.main,valueFormatter:g}),t(v,{label:"Not Reported",value:r.notReported,total:o,color:a.palette.text.disabled,valueFormatter:g}),!!d&&s(i,{display:"flex",alignItems:"center",paddingTop:"12px",children:[t(h,{color:y}),t(f,{style:{marginLeft:a.spacing(1)},children:n})]})]})})]})}):t(i,{margin:"auto",minHeight:125,display:"flex",flexDirection:"column",justifyContent:"center",children:t(f,{style:{marginBottom:8},variant:"subtitle1",children:"No Data"})})})}export{H as CampaignStatusTile};
2
- //# sourceMappingURL=CampaignStatusTile.esm.js.map
@@ -1,2 +0,0 @@
1
- import{jsx as a,jsxs as y}from"react/jsx-runtime";import{useRouteRef as M,useApi as X,featureFlagsApiRef as q}from"@backstage/core-plugin-api";import{usePermission as z}from"@backstage/plugin-permission-react";import{makeStyles as J,Grid as i,Button as K}from"@material-ui/core";import{soundcheckCampaignCreatePermission as Q}from"@spotify/backstage-plugin-soundcheck-common";import{useState as t,useEffect as U}from"react";import{useNavigate as V}from"react-router-dom";import Y from"react-use/lib/useDebounce";import{useGetCampaignOwners as Z}from"../../../hooks/campaigns/useGetCampaignOwners.esm.js";import{useGetCampaigns as _}from"../../../hooks/campaigns/useGetCampaigns.esm.js";import{campaignCreateRouteRef as $}from"../../../routes.esm.js";import{FilterDefault as p}from"../../../utils/filters.esm.js";import{EmptyCampaignState as ee}from"../CampaignEmptyState.esm.js";import{EmptyState as ae}from"../../EmptyState/EmptyState.esm.js";import{Pagination as re}from"../../Pagination/Pagination.esm.js";import{SearchFilters as ie}from"../../SearchFilters/SearchFilters.esm.js";import{CampaignsOverviewSkeleton as te}from"./CampaignsOverviewSkeleton.esm.js";import{CampaignSummaryCard as ne}from"./CampaignSummaryCard.esm.js";import se from"./useArchiveConfirmationModal.esm.js";var N=(e=>(e.title="No campaigns found",e.description="No campaigns matched your search. Consider changing search term and filters.",e))(N||{});const oe=J(e=>({headerButtons:{display:"flex",gap:e.spacing(1),flexWrap:"nowrap",justifyContent:"end",alignItems:"end"},header:{padding:e.spacing(0,0,1)},container:{padding:e.spacing(3),gap:e.spacing(3)},createButton:{lineHeight:"1.25rem",paddingTop:e.spacing(1.5),paddingBottom:e.spacing(1.5)}})),me=({campaignsPerPage:e,currentCursor:x})=>{const n=oe(),[g,d]=t(x),[o,w]=t(""),[h,b]=t(""),[u,B]=t(p.Alpha),[f,A]=t(p.Owner),[C,R]=t(p.Status),{data:F,isLoading:k}=Z();Y(()=>{b(o)},500,[o]);const{loading:O,allowed:L}=z({permission:Q}),{data:m,isLoading:l}=_({ids:void 0,first:e,after:g,orderAlphabetical:u,searchByOwner:f,searchByName:h,searchByStatus:C}),E=V(),G=M($),T=()=>E(G()),c=m?.edges.map(r=>r.node),[P,v]=t([]);U(()=>{d(void 0),v([])},[h]);const S=X(q),j=!S.getRegisteredFlags().find(r=>r.name==="soundcheck-enable-campaigns")||S.isActive("soundcheck-enable-campaigns"),D=!L||!j,I=r=>{B(r.target.value)},H=r=>{A(r.target.value)},W=r=>{R(r.target.value)};if(!l&&!c)return a(ee,{});let s;return l?s=a(te,{}):c?.length?s=c.map(r=>a(i,{xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem","aria-label":"result",children:a(se,{children:a(ne,{campaign:r})})},r.id)):s=a(i,{xs:12,item:!0,role:"listitem","aria-label":"result",children:a(ae,{title:"No campaigns found",description:"No campaigns matched your search. Consider changing search term and filters."})}),y(i,{container:!0,direction:"row",className:n.container,children:[y(i,{container:!0,className:n.header,children:[a(ie,{searchPlaceholder:"Search Available Campaigns",isLoading:l||k,searchTerm:o,setSearchTerm:w,filterAlpha:u,handleAlphabeticalFilterChange:I,filterOwner:f,handleOwnerFilterChange:H,filterStatus:C,handleStatusFilterChange:W,owners:F}),a(i,{item:!0,xs:4,className:n.headerButtons,children:!O&&a(K,{disabled:D,variant:"contained",color:"primary",onClick:T,className:n.createButton,children:"Create Campaign"})})]}),a(i,{container:!0,spacing:4,role:"list","aria-label":"campaigns",children:s}),(m?.pageInfo.hasNextPage||P?.length>0)&&a(i,{item:!0,xs:12,children:a(re,{response:m,listingsPerPage:e,cursor:g,setCursor:d,prevCursors:P,setPrevCursors:v,labelPerPageDropdown:"Campaigns Per Page:",urlRoute:"campaigns?campaignsPerPage="})})]})};export{me as CampaignListPage,N as CampaignNoResults};
2
- //# sourceMappingURL=CampaignListPage.esm.js.map
@@ -1,2 +0,0 @@
1
- import{jsx as i,jsxs as u}from"react/jsx-runtime";import{useRouteRef as ne}from"@backstage/core-plugin-api";import{EntityRefLink as se}from"@backstage/plugin-catalog-react";import{usePermission as Q}from"@backstage/plugin-permission-react";import{makeStyles as ae,useTheme as le,Button as ce,Typography as G,Tabs as de,Tab as K,Box as V}from"@material-ui/core";import{soundcheckCheckReadPermission as me,soundcheckCheckUpdatePermission as pe,toEntityFilterQuery as D,combineEntityFilterQueries as he}from"@spotify/backstage-plugin-soundcheck-common";import v from"lodash/isEqual";import{useMemo as a,useState as b,useEffect as fe,useCallback as X}from"react";import{useSearchParams as ue,useParams as ge,useNavigate as ye}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useCheck as ke}from"../../hooks/checks/useCheck.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useTrack as Ce}from"../../hooks/tracks/useTrack.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCheckStatus as Se}from"../../hooks/aggregations/useCheckStatus.esm.js";import{useLCPReporting as xe}from"../../hooks/useLCPReporting.esm.js";import{checkEditRouteRef as we}from"../../routes.esm.js";import{toFilter as be}from"../../utils/helpers.esm.js";import{CheckStatusBar as ve}from"../CheckStatusBar/CheckStatusBar.esm.js";import{FilterSidebar as Ee}from"../FilterSidebar/FilterSidebar.esm.js";import{StateFilter as Ne}from"../FilterSidebar/StateFilter.esm.js";import{LoadingIndicator as Ie}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as Y}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as Re}from"../SoundcheckHeader/useHeader.esm.js";import{SoundcheckMarkdownContent as Fe}from"../SoundcheckMarkdownContent/SoundcheckMarkdownContent.esm.js";import"@backstage/core-components";import"react-markdown";import"rehype-raw";import"remark-gfm";import"../TechHealth/Filters/types.esm.js";import"../TechHealth/Filters/FacetFilter.esm.js";import"../TechHealth/Filters/FilterProvider.esm.js";import"../TechHealth/Filters/Filters.esm.js";import"../TechHealth/Filters/FiltersHeader.esm.js";import"../TechHealth/Filters/FiltersSection.esm.js";import"lodash";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{parseNumberOfDays as Te}from"../TechHealth/Filters/utils.esm.js";import{CheckEntitiesTable as Le}from"./CheckEntitiesTable/CheckEntitiesTable.esm.js";import{CheckStatusHistoryChart as Ae}from"./CheckStatusHistoryChart.esm.js";import{CheckStatusTable as Be}from"./CheckStatusTable.esm.js";import{ExemptionsTable as De}from"./ExemptionsTable.esm.js";function Pe(e,r){for(const y of e.levels)for(const l of y.checks)if(l.id===r)return l;return null}const je=ae(e=>({root:{height:"100%"},pageContent:{display:"flex",minHeight:`calc(100vh - ${e.spacing(15)}px)`,borderTop:`1px solid ${e.palette.divider}`,height:"100%"},mainContentArea:{flex:1,display:"flex",flexDirection:"column",minWidth:0},editButton:{marginLeft:"auto"},statusContainer:{borderBottom:`1px solid ${e.palette.divider}`,padding:e.spacing(3,0,2,3)},statusCards:{display:"flex",gap:e.spacing(2)},currentStatusSection:{width:"325px",minWidth:"325px",flex:0,display:"flex",flexDirection:"column"},historicalStatusSection:{flex:1,flexShrink:1,flexGrow:1,flexBasis:"auto",minWidth:"150px",display:"flex",flexDirection:"column"},statusTitle:{fontWeight:"bold",fontSize:"1.1rem",lineHeight:`${e.typography.h5.fontSize}px`,cursor:"default",marginBottom:e.spacing(2)},headerDescription:{fontSize:e.typography.body2.fontSize,margin:e.spacing(.5,0,0),"& p":{margin:0},"& a":{color:"inherit",textDecoration:"underline"}},entitiesContainer:{padding:e.spacing(2,3,3,3)},ownerLink:{"& span":{color:"inherit","&:hover":{textDecoration:"underline"}}}})),Oe=()=>{const e=je(),[r,y]=ue(),{trackId:l,checkId:o}=ge(),s=a(()=>r.getAll("states"),[r]),m=a(()=>r.getAll("owners"),[r]),p=a(()=>r.getAll("lifecycles"),[r]),h=a(()=>r.getAll("types"),[r]),f=a(()=>r.getAll("systems"),[r]),P=a(()=>Te(r.get("numberOfDays")),[r]),[k,E]=b(p),[C,N]=b(m),[S,I]=b(h),[x,R]=b(f),[w,F]=b(s);fe(()=>{N(m),E(p),I(h),R(f),F(s)},[m,p,h,f,s]);const Z=a(()=>{const t={owners:!v(C,m),lifecycles:!v(k,p),types:!v(S,h),systems:!v(x,f),states:!v(w,s)};return Object.values(t).some(Boolean)},[C,m,k,p,S,h,x,f,w,s]),q=X(()=>{const t=new URLSearchParams(r);t.delete("lifecycles"),t.delete("owners"),t.delete("types"),t.delete("systems"),t.delete("states"),k.length>0&&k.forEach(n=>t.append("lifecycles",n)),C.length>0&&C.forEach(n=>t.append("owners",n)),S.length>0&&S.forEach(n=>t.append("types",n)),x.length>0&&x.forEach(n=>t.append("systems",n)),w.length>0&&w.forEach(n=>t.append("states",n)),y(t)},[r,k,C,S,x,w,y]),J=X(()=>{E([]),N([]),I([]),R([]),F([]);const t=new URLSearchParams(r);t.delete("lifecycles"),t.delete("owners"),t.delete("types"),t.delete("systems"),t.delete("states"),y(t)},[r,y]),T=be({lifecycles:p,owners:m,types:h,systems:f}),{data:g,isLoading:j}=Ce(l),{data:c,isLoading:O}=ke(o),{loading:H,allowed:L}=Q({permission:me,resourceRef:o}),d=a(()=>c??g?.levels.flatMap(t=>t.checks).find(t=>t.id===o),[c,o,g?.levels]),{loading:W,allowed:z}=Q({permission:pe,resourceRef:o}),M=ye(),U=ne(we),_=le();let A;if(o)if(g){const t=D(g.filter),n=D(Pe(g,o)?.filter);A=he(t,n)}else d?.filter&&(A=D(d.filter));const{data:$}=Se({checkId:o,trackId:l,filter:T,states:s?.length?s:void 0},!!o),ee=a(()=>c?.ownerEntityRef?i(se,{color:"inherit",entityRef:c.ownerEntityRef,className:e.ownerLink}):null,[c?.ownerEntityRef,e.ownerLink]),te=a(()=>!W&&z&&c?.isEditable?i(ce,{className:e.editButton,variant:"contained",color:"primary",onClick:()=>{M(U({checkId:c.id}))},children:"Edit Check"}):null,[z,c?.id,c?.isEditable,e.editButton,U,W,M]),ie=a(()=>d?.description?i(Fe,{className:e.headerDescription,content:d.description}):null,[e.headerDescription,d?.description]);Re({title:d?.name??o??"Soundcheck",description:ie,customSubtitle:ee,sectionRight:te}),xe({routeName:"soundcheck-check-details",additionalAttributes:{checkId:o||"unknown",trackId:l||"unknown",checkName:d?.name||"unknown",filtersApplied:(m.length+p.length+h.length+f.length+s.length).toString(),ownersFilter:m.join(",")||"none",lifecyclesFilter:p.join(",")||"none",typesFilter:h.join(",")||"none",systemsFilter:f.join(",")||"none",statesFilter:s.join(",")||"none",numberOfDays:P.toString()}});const re=a(()=>!!d&&!H&&!L,[L,d,H]),[B,oe]=b(0);return u("div",{children:[i(Y,{entityName:"track",entityId:l,showNotFound:!!l&&!j&&!g}),i(Y,{entityName:"check",entityId:o,showCannotView:re}),(O||!!l&&j)&&i(Ie,{}),!O&&L&&i("div",{className:e.root,children:u("div",{className:e.pageContent,children:[i(Ee,{trackFilter:A,stagedTypes:S,stagedLifecycles:k,stagedOwners:C,stagedSystems:x,onTypesChange:I,onLifecyclesChange:E,onOwnersChange:N,onSystemsChange:R,onApplyFilters:q,onClearFilters:J,hasFilterChanges:Z,children:i(Ne,{states:s,stagedStates:w,onStagedStatesChange:F})}),u("div",{className:e.mainContentArea,children:[i("div",{className:e.statusContainer,children:u("div",{className:e.statusCards,children:[u("div",{className:e.currentStatusSection,children:[i(G,{className:e.statusTitle,children:"Current Status"}),i("div",{style:{width:"100%",height:30,display:"flex",alignItems:"flex-start",marginBottom:_.spacing(2)},children:i(ve,{status:$})}),i("div",{children:i(Be,{checkStatus:$})})]}),u("div",{className:e.historicalStatusSection,children:[i(G,{className:e.statusTitle,children:"Historical Status"}),i("div",{style:{height:"100%"},children:i(Ae,{checkId:o,trackId:l,filter:T,states:s,numberOfDays:P})})]})]})}),u("div",{className:e.entitiesContainer,children:[u(de,{value:B,onChange:(t,n)=>oe(n),indicatorColor:"primary",textColor:"primary","aria-label":"Entities and Exemptions Tabs",children:[i(K,{label:"Entities"}),i(K,{label:"Exemptions"})]}),i(V,{hidden:B!==0,children:i(Le,{checkId:o,trackId:g?.id,filter:T,states:s})}),i(V,{hidden:B!==1,children:i(De,{checkId:o})})]})]})]})})]})};export{Oe as CheckInsightsPage};
2
- //# sourceMappingURL=CheckInsightsPage.esm.js.map
@@ -1,2 +0,0 @@
1
- import{jsx as t,jsxs as u}from"react/jsx-runtime";import{useApi as w,featureFlagsApiRef as Y,useRouteRef as Z}from"@backstage/core-plugin-api";import{usePermission as _}from"@backstage/plugin-permission-react";import{makeStyles as ee,Button as A,Grid as o}from"@material-ui/core";import{soundcheckCheckCreatePermission as re}from"@spotify/backstage-plugin-soundcheck-common";import{useState as i,useEffect as N}from"react";import{useNavigate as te}from"react-router-dom";import ae from"react-use/lib/useDebounce";import{soundcheckApiRef as oe}from"../../../api.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import{useGetChecks as ie}from"../../../hooks/checks/useGetChecks.esm.js";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{useGetCheckOwners as se}from"../../../hooks/checks/useGetCheckOwners.esm.js";import{useImportChecks as ce}from"../../../hooks/checks/useImportChecks.esm.js";import ne from"../../../images/no-results.svg";import{checkTemplatesRouteRef as me}from"../../../routes.esm.js";import{exportChecks as le}from"../../../utils/export.esm.js";import{FilterDefault as I}from"../../../utils/filters.esm.js";import{EmptyState as S}from"../../EmptyState/EmptyState.esm.js";import{ImportExportPanel as pe}from"../../ImportExportPanel/ImportExportPanel.esm.js";import{Pagination as de}from"../../Pagination/Pagination.esm.js";import{SearchFilters as he}from"../../SearchFilters/SearchFilters.esm.js";import{ChecksOverviewSkeleton as ge}from"../skeletons/ChecksOverviewSkeleton.esm.js";import{CheckSummaryCard as ue}from"./CheckSummaryCard.esm.js";var B=(e=>(e.title="Create a check",e.description="A check is a comparison between a defined acceptable outcome and the actual outcome of a given process.",e.callToAction="Get started",e))(B||{}),R=(e=>(e.title="No checks found",e.description="No checks matched your search. Consider changing search term and filters.",e))(R||{});const fe=ee(e=>({headerButtons:{display:"flex",gap:e.spacing(1),flexWrap:"nowrap",justifyContent:"end",alignItems:"end"},header:{padding:e.spacing(0,0,1)},container:{padding:e.spacing(3),gap:e.spacing(3)},createButton:{lineHeight:"1.25rem",paddingTop:e.spacing(1.5),paddingBottom:e.spacing(1.5)}})),ke=({checksPerPage:e,currentCursor:E})=>{const s=fe(),[f,k]=i(E),[l,F]=i(""),[p,O]=i(I.Alpha),[d,T]=i(I.Owner),[C,G]=i(""),{data:L,isLoading:j}=se();ae(()=>{G(l)},500,[l]);const{loading:P,allowed:D}=_({permission:re}),{data:a,isLoading:c}=ie({ids:void 0,first:e,after:f,orderAlphabetical:p,searchByOwner:d,searchByName:C}),[h,H]=i(a),n=h?.edges?.map(r=>r.node),[b,v]=i([]);N(()=>{k(void 0),v([])},[C,p,d]);const x=w(Y),W=!x.getRegisteredFlags().find(r=>r.name==="soundcheck-enable-check-creation")||x.isActive("soundcheck-enable-check-creation"),g=!D||!W,$=r=>{O(r.target.value)},q=r=>{T(r.target.value)};N(()=>{a&&H(()=>({totalCount:a.totalCount,edges:a.edges,pageInfo:{startCursor:a.pageInfo.startCursor,endCursor:a.pageInfo.endCursor,hasNextPage:a?.pageInfo.hasNextPage??!1,hasPreviousPage:a?.pageInfo.hasPreviousPage??!1}}))},[a]);const z=te(),J=Z(me),y=()=>z(J()),M=w(oe),{mutateAsync:Q}=ce(),V=async r=>Q(r),X=async()=>{const r=await M.getChecks({orderAlphabetical:"asc"});return le(r.edges.map(U=>U.node))};if(!c&&!n)return t(S,{title:"Create a check",description:"A check is a comparison between a defined acceptable outcome and the actual outcome of a given process.",imgSrc:ne,action:!P&&t(A,{disabled:g,variant:"contained",color:"primary",onClick:y,children:"Get started"})});let m;c?m=t(ge,{}):n?.length?m=n?.map(r=>t(o,{xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem","aria-label":`check card ${r.id}`,children:t(ue,{check:r})},r.id)):m=t(o,{xs:12,item:!0,role:"listitem","aria-label":"result",children:t(S,{title:"No checks found",description:"No checks matched your search. Consider changing search term and filters."})});const K=h?.pageInfo.hasNextPage||b?.length>0;return u(o,{container:!0,direction:"row",className:s.container,children:[u(o,{container:!0,className:s.header,children:[t(he,{searchPlaceholder:"Search Available Checks",isLoading:c||j,searchTerm:l,setSearchTerm:F,filterAlpha:p,handleAlphabeticalFilterChange:$,filterOwner:d,handleOwnerFilterChange:q,owners:L}),u(o,{item:!0,xs:4,className:s.headerButtons,children:[t(pe,{resourceType:"check",disableImport:g,disableExport:c||!n?.length,onImport:V,onExport:X}),!P&&t(A,{disabled:g,variant:"contained",color:"primary",onClick:y,className:s.createButton,children:"Create Check"})]})]}),t(o,{container:!0,spacing:4,role:"list","aria-label":"checks",children:m}),K&&t(o,{item:!0,xs:12,children:t(de,{response:h,listingsPerPage:e,cursor:f,setCursor:k,prevCursors:b,setPrevCursors:v,labelPerPageDropdown:"Checks Per Page:",urlRoute:"checks?checksPerPage="})})]})};export{B as CheckEmptyState,ke as CheckListPage,R as CheckNoResults};
2
- //# sourceMappingURL=CheckListPage.esm.js.map
@@ -1,2 +0,0 @@
1
- import{jsxs as i,jsx as e}from"react/jsx-runtime";import{makeStyles as h,Grid as s,Typography as d,TextField as c}from"@material-ui/core";import{useFormContext as T,Controller as x}from"react-hook-form";import{JIRA_COLLECTOR_FIELDS as f}from"./utils.esm.js";const u=h(a=>({root:{paddingTop:a.spacing(1)},textInput:{marginTop:0,width:"500px"},helperText:{marginLeft:0}})),g=({name:a,disabled:m})=>{const t=u(),{factName:l,jql:o}=f.factDetails,{control:p}=T();return i(s,{container:!0,spacing:1,direction:"column",className:t.root,children:[i(s,{item:!0,children:[e(d,{variant:"subtitle2",children:l.name}),e(x,{name:`${a}.factName`,control:p,render:({field:n,fieldState:{error:r}})=>e(c,{...n,type:"text",variant:"outlined",margin:"dense",placeholder:l.placeholder,className:t.textInput,disabled:m,error:!!r,helperText:r?.message??l.helperText,FormHelperTextProps:{className:t.helperText}})})]}),i(s,{item:!0,children:[e(d,{variant:"subtitle2",children:o.name}),e(x,{name:`${a}.jql`,control:p,render:({field:n,fieldState:{error:r}})=>e(c,{...n,type:"text",variant:"outlined",margin:"dense",placeholder:o.placeholder,className:t.textInput,disabled:m,error:!!r,helperText:r?.message??o.helperText,FormHelperTextProps:{className:t.helperText}})})]})]})};export{g as IssuesSearchFactDetailsComponent};
2
- //# sourceMappingURL=IssuesSearchFactDetailsComponent.esm.js.map
@@ -1,2 +0,0 @@
1
- import{jsx as t}from"react/jsx-runtime";import{Grid as r}from"@material-ui/core";import{useGetCollectors as c}from"../../../hooks/collectors/useGetCollectors.esm.js";import{CollectorListSkeleton as s}from"./CollectorListSkeleton.esm.js";import{CollectorSummaryCard as m}from"./CollectorSummaryCard.esm.js";const a=["github","gitlab","scm","pagerduty","datadog","kubernetes","jira","sonarqube","newrelic","bigquery","catalog","azure","http","data-registry"],u=({integrations:l})=>{const{data:d,isLoading:n}=c(),o=l?.map(e=>e.integrationId)??a;return t(r,{container:!0,direction:"row",children:t(r,{container:!0,spacing:4,role:"list","aria-label":"checks",children:n?t(s,{}):d?.filter(e=>e.isConfigurable)?.sort((e,i)=>!o.includes(e.id)&&o.includes(i.id)?1:o.includes(e.id)&&!o.includes(i.id)?-1:(e.name??e.id).localeCompare(i.name??i.id))?.map(e=>t(r,{xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem","aria-label":`collector card ${e.id}`,children:t(m,{collector:e,hasNoCodeUI:o.includes(e.id),routePath:l?.find(i=>i.integrationId===e.id)?.routePath})},e.id))})})};export{u as CollectorListPage,a as ConfigurableCollectorIds};
2
- //# sourceMappingURL=CollectorListPage.esm.js.map
@@ -1,2 +0,0 @@
1
- import{useCallback as n}from"react";import u from"react-use/lib/useLocalStorage";const c=10,i=l=>{const[o,s]=u("soundcheck-previously-selected-groups",[]),p=n(r=>{const e=o??[],t=e.indexOf(r);t>-1&&e.splice(t,1),e.unshift(r),e.length>c&&e.pop(),s(e)},[o,s]);return{groupEntityRefs:o,addGroup:p}};export{i as usePreviousSelectedGroups};
2
- //# sourceMappingURL=usePreviousSelectedGroups.esm.js.map
@@ -1,2 +0,0 @@
1
- import{jsx as e}from"react/jsx-runtime";import{makeStyles as n}from"@material-ui/core";import l from"react-markdown";import i from"rehype-raw";import p from"remark-gfm";import{components as m}from"./ComponentRenders.esm.js";const t=["h1","h2","h3","h4","h5","h6","p","div","span","a","img","table","th","td","tr","thead","tbody","ol","li","ul","details","summary","br","hr","del","pre","code","strong","em","blockquote","input"],o=n(r=>({markdown:{"& table":{borderCollapse:"collapse",border:`1px solid ${r.palette.border}`},"& th, & td":{border:`1px solid ${r.palette.border}`,padding:r.spacing(1)},"& td":{wordBreak:"break-word",overflow:"hidden",verticalAlign:"middle",lineHeight:"1",margin:0,padding:r.spacing(3,2,3,2.5),borderBottom:0},"& th":{backgroundColor:r.palette.background.paper},"& tr":{backgroundColor:r.palette.background.paper},"& tr:nth-child(odd)":{backgroundColor:r.palette.background.default},"& a":{color:r.palette.link},"& img":{maxWidth:"100%"},"& ul":{marginTop:r.spacing(1)},"& ol":{marginTop:r.spacing(1)},"& pre":{background:`${r.palette.background.default} !important`},"& details":{width:"100%"},"& h1,h2,h3,h4,h5,h6":{marginBottom:r.spacing(1)}}}),{name:"SoundcheckMarkdownContent"}),c=({content:r,className:a=""})=>{const d=o();return e("div",{className:`${d.markdown} ${a}`.trim(),children:e(l,{components:m,remarkPlugins:[p],rehypePlugins:[i],allowedElements:t,children:r})})};export{t as ALLOWED_HTML_TAGS,c as SoundcheckMarkdownContent,o as useStyles};
2
- //# sourceMappingURL=SoundcheckMarkdownContent.esm.js.map
@@ -1,2 +0,0 @@
1
- import{jsxs as p,Fragment as P,jsx as e}from"react/jsx-runtime";import{Box as r,Typography as d,Divider as T}from"@material-ui/core";import{useCallback as x,useMemo as k}from"react";import"../Badges/LevelBadge.esm.js";import"../Badges/NoLevelBadge.esm.js";import{CampaignBadge as w}from"../Badges/CampaignBadge.esm.js";import{StatusBadge as G}from"../Badges/StatusBadge.esm.js";const I=({filteredCampaigns:g,filteredTracks:u,campaignTracks:B,TrackCard:h,classes:n,isTracksLoading:b,trackStatusMap:i,trackCountsMap:f})=>{const s=x(t=>i?[...t].sort((a,c)=>{const N=i.get(a.id),v=i.get(c.id),m=N?.status?.allPassPercentage,l=v?.status?.allPassPercentage;return typeof m=="number"&&typeof l=="number"?m-l:typeof m=="number"&&typeof l!="number"?-1:typeof m!="number"&&typeof l=="number"?1:0}):t,[i]),o=x(t=>{const a=i?.get(t.id)?.status,c=(a?.passed??0)+(a?.failed??0)+(a?.warning??0)+(a?.error??0)+(a?.notReported??0)+(a?.exempt??0);return!a||c>0},[i]),y=k(()=>s(g.filter(o)),[o,g,s]),C=k(()=>s(u.filter(o)),[o,u,s]);return b?null:p(P,{children:[p(r,{display:"flex",alignItems:"center",className:n.sectionHeader,marginBottom:.5,marginTop:4,gridGap:12,children:[e(w,{}),e(d,{variant:"h5",style:{marginBottom:0},children:"Campaigns"})]}),e(T,{style:{marginBottom:16}}),y.length>0?e(r,{className:n.gridContainer,style:{marginTop:0},children:e(r,{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(300px, 1fr))",style:{gap:24},children:y.map(t=>e(h,{track:t,entityCount:f?.get(t.id)},t.id))})}):e(r,{className:n.emptyState,children:e(d,{variant:"h6",children:B.length>0?"No active campaigns matching the current filters":"No active campaigns."})}),C.length>0&&p(r,{className:n.gridContainer,children:[p(r,{display:"flex",alignItems:"center",className:n.sectionHeader,marginBottom:.5,gridGap:12,children:[e(G,{hideTooltip:!0,status:{passed:10,failed:10,error:0,exempt:0,notApplicable:0,notReported:10,passPercentage:50,warning:0},size:"small"}),e(d,{variant:"h5",style:{marginBottom:0},children:"Tracks"})]}),e(T,{style:{marginBottom:16}}),e(r,{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(300px, 1fr))",gridGap:24,marginBottom:.5,children:C.map(t=>e(h,{track:t,entityCount:f?.get(t.id)},t.id))})]})]})};export{I as TechInsightsCardsView};
2
- //# sourceMappingURL=TechInsightsCardsView.esm.js.map
@@ -1,2 +0,0 @@
1
- import{jsxs as a,jsx as t}from"react/jsx-runtime";import{useApi as x}from"@backstage/core-plugin-api";import{entityPresentationApiRef as u}from"@backstage/plugin-catalog-react";import{useTheme as v,Paper as N,Box as r,Typography as n}from"@material-ui/core";import{makeStyles as w}from"@material-ui/core/styles";import{Skeleton as h}from"@material-ui/lab";import{interpolateRgb as S}from"d3-interpolate";import{scaleLinear as b}from"d3-scale";import{TeamStatusBar as k}from"../TeamStatusBar/TeamStatusBar.esm.js";import{convertToCommonTrackStatus as T}from"./convertToCommonTrackStatus.esm.js";const B=w(e=>({card:{display:"flex",flexDirection:"column",border:`1px solid ${e.palette.divider}`,height:"100%",maxWidth:"280px",padding:e.spacing(2),cursor:"pointer"},content:{display:"flex",flex:1},categoryBarContainer:{width:"100%",height:e.spacing(1),marginBottom:e.spacing(1),cursor:"pointer"},cardHeader:{lineHeight:1.2}})),C=(e,o)=>b().domain([0,50,100]).range([e.palette.error.main,e.palette.warning.main,e.palette.success.main]).interpolate(S.gamma(2.2))(o),D=({track:e,trackStatus:o,entityCount:l})=>{const p=v(),f=x(u),i=B(),s=e.ownerEntityRef?f.forEntity(e.ownerEntityRef):null,c=o?.allPassPercentage??0,m=!o,d=e.levels.reduce((g,y)=>g+y.checks.length,0);return a(N,{className:i.card,children:[a(r,{display:"flex",flexDirection:"column",alignItems:"flex-start",mb:1,children:[t(n,{variant:"h6",className:i.cardHeader,children:e.name}),s&&t(n,{variant:"caption",color:"textSecondary",children:s.snapshot.primaryTitle})]}),a(r,{display:"flex",flexDirection:"column",alignItems:"flex-start",mb:1,children:[a(n,{variant:"caption",color:"textSecondary",children:[d," check",d!==1?"s":""]}),l!==void 0&&a(n,{variant:"caption",color:"textSecondary",children:[new Intl.NumberFormat("en-US",{notation:"compact",maximumFractionDigits:1}).format(l)," ","entit",l!==1?"ies":"y"]})]}),m&&t(r,{className:i.content,children:a(r,{width:"100%",children:[t(r,{mb:2,children:t(h,{variant:"text",width:"60%",height:48})}),t(r,{className:i.categoryBarContainer,children:t(h,{variant:"rect",width:"100%",height:8})})]})}),!m&&isNaN(c)&&t(r,{margin:"auto",children:t(n,{variant:"body2",children:"No Data"})}),!m&&!isNaN(c)&&t(r,{className:i.content,children:a(r,{width:"100%",children:[t(r,{mb:2,children:t(n,{variant:"h3",style:{color:C(p,Math.floor(c))},children:`${Math.floor(c)}%`})}),t(r,{className:i.categoryBarContainer,children:t(k,{status:T(o)})})]})})]})};export{D as TrackStatusCard};
2
- //# sourceMappingURL=TrackStatusCard.esm.js.map
@@ -1,2 +0,0 @@
1
- import{jsxs as s,jsx as t}from"react/jsx-runtime";import{Box as l,Button as r}from"@material-ui/core";import{makeStyles as d}from"@material-ui/core/styles";import c from"@material-ui/icons/ViewList";import m from"@material-ui/icons/ViewModule";const C=d(()=>({viewModeButton:{marginRight:8},viewModeButtonLast:{marginRight:16}})),e={Cards:"cards",Table:"table"},o={Contained:"contained",Outlined:"outlined"},u=({viewMode:n,onViewModeChange:i})=>{const a=C();return s(l,{display:"flex",alignItems:"center",children:[t(r,{variant:n===e.Table?o.Contained:o.Outlined,startIcon:t(c,{}),onClick:()=>i(e.Table),size:"small",className:a.viewModeButton,children:"Table"}),t(r,{variant:n===e.Cards?o.Contained:o.Outlined,startIcon:t(m,{}),onClick:()=>i(e.Cards),size:"small",className:a.viewModeButton,children:"Cards"})]})};export{e as TECH_INSIGHTS_VIEW_MODE,u as ViewModeControls};
2
- //# sourceMappingURL=ViewModeControls.esm.js.map
@@ -1,2 +0,0 @@
1
- const a=e=>({passed:e.passed,failed:e.failed,warning:e.warning,error:e.error,exempt:e.exempt,notApplicable:e.notApplicable,notReported:e.notReported,allPassPercentage:e.allPassPercentage??0,statusByLevel:(e.statusByLevel||[]).map(t=>({ordinal:t.ordinal,passed:t.passed,failed:t.failed,warning:t.warning,error:t.error,notApplicable:t.notApplicable,notReported:t.notReported,passPercentage:t.passPercentage??0,exempt:t.exempt}))});export{a as convertToCommonTrackStatus};
2
- //# sourceMappingURL=convertToCommonTrackStatus.esm.js.map