@spotify/backstage-plugin-soundcheck 0.12.6 → 0.12.8

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 (390) hide show
  1. package/CHANGELOG.md +31 -11
  2. package/alpha/package.json +1 -1
  3. package/dist/alpha/apis.esm.js +2 -0
  4. package/dist/alpha/entity-content.esm.js +2 -0
  5. package/dist/alpha/pages.esm.js +2 -0
  6. package/dist/alpha/plugin.esm.js +2 -0
  7. package/dist/alpha/sidebar-item.esm.js +2 -0
  8. package/dist/alpha.esm.js +1 -1
  9. package/dist/api.esm.js +2 -0
  10. package/dist/components/AlertPanel/AlertPanel.esm.js +2 -0
  11. package/dist/components/Badges/BaseBadge.esm.js +2 -0
  12. package/dist/components/Badges/CampaignBadge.esm.js +2 -0
  13. package/dist/components/Badges/CertificationBadge.esm.js +2 -0
  14. package/dist/components/Badges/LevelBadge.esm.js +2 -0
  15. package/dist/components/Badges/NoLevelBadge.esm.js +2 -0
  16. package/dist/components/Badges/PlaylistBadge.esm.js +2 -0
  17. package/dist/components/Badges/badge.esm.js +2 -0
  18. package/dist/components/CacheConfig/CacheConfigComponent.esm.js +2 -0
  19. package/dist/components/CacheConfig/utils.esm.js +2 -0
  20. package/dist/components/CampaignsPage/CampaignsPage.esm.js +2 -0
  21. package/dist/components/CampaignsTab/CampaignDetailsPage/CampaignChecks.esm.js +2 -0
  22. package/dist/components/CampaignsTab/CampaignDetailsPage/CampaignDetailRow.esm.js +2 -0
  23. package/dist/components/CampaignsTab/CampaignDetailsPage/CampaignDetails.esm.js +2 -0
  24. package/dist/components/CampaignsTab/CampaignDetailsPage/CampaignDetailsPage.esm.js +2 -0
  25. package/dist/components/CampaignsTab/CampaignDetailsPage/CampaignMilestones.esm.js +2 -0
  26. package/dist/components/CampaignsTab/CampaignDetailsPage/CampaignProgress.esm.js +2 -0
  27. package/dist/components/CampaignsTab/CampaignDetailsPage/CampaignResultsTable.esm.js +2 -0
  28. package/dist/components/CampaignsTab/CampaignListPage/CampaignListPage.esm.js +2 -0
  29. package/dist/components/CampaignsTab/CampaignListPage/CampaignMetadata.esm.js +2 -0
  30. package/dist/components/CampaignsTab/CampaignListPage/CampaignSummaryCard.esm.js +2 -0
  31. package/dist/components/CampaignsTab/CampaignListPage/useArchiveConfirmationModal.esm.js +2 -0
  32. package/dist/components/CampaignsTab/CampaignTypes.esm.js +2 -0
  33. package/dist/components/CampaignsTab/MutateCampaignsViews/AddCampaignView.esm.js +2 -0
  34. package/dist/components/CampaignsTab/MutateCampaignsViews/CampaignForm.esm.js +2 -0
  35. package/dist/components/CampaignsTab/MutateCampaignsViews/CampaignFormDescription.esm.js +2 -0
  36. package/dist/components/CampaignsTab/MutateCampaignsViews/EditCampaignView.esm.js +2 -0
  37. package/dist/components/CampaignsTab/MutateCampaignsViews/Steps/CampaignDetailsStep/CampaignDescriptionField.esm.js +2 -0
  38. package/dist/components/CampaignsTab/MutateCampaignsViews/Steps/CampaignDetailsStep/CampaignDetailsStep.esm.js +2 -0
  39. package/dist/components/CampaignsTab/MutateCampaignsViews/Steps/CampaignDetailsStep/CampaignNameField.esm.js +2 -0
  40. package/dist/components/CampaignsTab/MutateCampaignsViews/Steps/CampaignDetailsStep/CampaignOwnerField.esm.js +2 -0
  41. package/dist/components/CampaignsTab/MutateCampaignsViews/Steps/CampaignDetailsStep/CampaignScheduleField/CampaignScheduleField.esm.js +2 -0
  42. package/dist/components/CampaignsTab/MutateCampaignsViews/Steps/CampaignDetailsStep/CampaignScheduleField/EndDateChips.esm.js +2 -0
  43. package/dist/components/CampaignsTab/MutateCampaignsViews/Steps/CampaignDetailsStep/CampaignSupportChannelField.esm.js +2 -0
  44. package/dist/components/CampaignsTab/MutateCampaignsViews/Steps/CampaignMilestonesStep.esm.js +2 -0
  45. package/dist/components/CampaignsTab/MutateCampaignsViews/Steps/CampaignTrackStep.esm.js +2 -0
  46. package/dist/components/CampaignsTab/MutateCampaignsViews/hooks/useCampaignForm.esm.js +2 -0
  47. package/dist/components/CampaignsTab/MutateCampaignsViews/hooks/utils.esm.js +2 -0
  48. package/dist/components/CampaignsTab/MutateCampaignsViews/types/CampaignFormTypes.esm.js +2 -0
  49. package/dist/components/CampaignsTab/MutateCampaignsViews/utils/campaignFormUtils.esm.js +2 -0
  50. package/dist/components/CampaignsTab/MutateCampaignsViews/utils/validation.esm.js +2 -0
  51. package/dist/components/CampaignsTab/skeletons/CampaignsOverviewSkeleton.esm.js +2 -0
  52. package/dist/components/CertificationAccordion/CertificationAccordion.esm.js +2 -0
  53. package/dist/components/CertificationSidebar/CertificationLevel.esm.js +2 -0
  54. package/dist/components/CertificationSidebar/CertificationSidebar.esm.js +2 -0
  55. package/dist/components/CertificationSidebar/CertificationSummary.esm.js +2 -0
  56. package/dist/components/CertificationSidebar/Check.esm.js +2 -0
  57. package/dist/components/CertificationSidebar/CheckResultSummaryList.esm.js +2 -0
  58. package/dist/components/CertificationSidebar/LevelSummary.esm.js +2 -0
  59. package/dist/components/CertificationSidebar/skeletons/CertificationSidebarSkeleton.esm.js +2 -0
  60. package/dist/components/CertificationSidebar/skeletons/CertificationSummarySkeleton.esm.js +2 -0
  61. package/dist/components/CertificationSidebar/skeletons/CheckSkeleton.esm.js +2 -0
  62. package/dist/components/CertificationSidebar/skeletons/LevelSummarySkeleton.esm.js +2 -0
  63. package/dist/components/CertificationsPage/CertificationTab.esm.js +2 -0
  64. package/dist/components/CertificationsPage/CertificationTabs.esm.js +2 -0
  65. package/dist/components/CertificationsPage/CertificationsPage.esm.js +2 -0
  66. package/dist/components/CertificationsPage/Playlist/PlaylistComponent.esm.js +2 -0
  67. package/dist/components/CertificationsPage/Playlist/PlaylistContext.esm.js +2 -0
  68. package/dist/components/CertificationsPage/Playlist/PlaylistProgress.esm.js +2 -0
  69. package/dist/components/CertificationsPage/Playlist/PlaylistSummary.esm.js +2 -0
  70. package/dist/components/CertificationsPage/PlaylistCertificationTab.esm.js +2 -0
  71. package/dist/components/CertificationsPage/skeletons/CertificationTabSkeleton.esm.js +2 -0
  72. package/dist/components/CertificationsPage/skeletons/CertificationTabsSkeleton.esm.js +2 -0
  73. package/dist/components/Charts/BarChart/BarChart.esm.js +2 -0
  74. package/dist/components/Charts/BarChart/BarChartPlaceholder.esm.js +2 -0
  75. package/dist/components/Charts/BarChart/GroupPassRateHistoryBarChart.esm.js +2 -0
  76. package/dist/components/Charts/BarChart/TrackSummaryBarChart.esm.js +2 -0
  77. package/dist/components/Charts/ChartTypes.esm.js +2 -0
  78. package/dist/components/Charts/ChartWrapper/ChartWrapper.esm.js +2 -0
  79. package/dist/components/Charts/LineChart/EntityPassRateHistoryLineChart.esm.js +2 -0
  80. package/dist/components/Charts/LineChart/LineChart.esm.js +2 -0
  81. package/dist/components/Charts/LineChart/LineChartPlaceholder.esm.js +2 -0
  82. package/dist/components/Charts/LineChart/PassRateHistoryLineChart.esm.js +2 -0
  83. package/dist/components/Charts/LineChart/TableLineChart.esm.js +2 -0
  84. package/dist/components/Charts/LineChart/TrackPassRateHistoryLineChart.esm.js +2 -0
  85. package/dist/components/Charts/chartUtils.esm.js +2 -0
  86. package/dist/components/CheckCard/CheckCard.esm.js +2 -0
  87. package/dist/components/CheckCard/CheckHistoryChart.esm.js +2 -0
  88. package/dist/components/CheckCard/utils.esm.js +2 -0
  89. package/dist/components/CheckDetails/CheckDetails.esm.js +2 -0
  90. package/dist/components/CheckDetails/ResultStateBox.esm.js +2 -0
  91. package/dist/components/CheckDetails/skeletons/CheckDetailsSkeleton.esm.js +2 -0
  92. package/dist/components/CheckHistoryChartCard/CheckHistoryChartCard.esm.js +2 -0
  93. package/dist/components/CheckIcon/CheckIcon.esm.js +2 -0
  94. package/dist/components/CheckPage/CheckDetailsView.esm.js +2 -0
  95. package/dist/components/CheckPage/CheckEditView.esm.js +2 -0
  96. package/dist/components/CheckPage/CheckPage.esm.js +2 -0
  97. package/dist/components/ChecksErrors/ChecksErrors.esm.js +2 -0
  98. package/dist/components/ChecksPage/CheckListPage/CheckListPage.esm.js +2 -0
  99. package/dist/components/ChecksPage/CheckListPage/CheckMetadata.esm.js +2 -0
  100. package/dist/components/ChecksPage/CheckListPage/CheckSummaryCard.esm.js +2 -0
  101. package/dist/components/ChecksPage/ChecksPage.esm.js +2 -0
  102. package/dist/components/ChecksPage/MutateCheckViews/AddCheckView.esm.js +2 -0
  103. package/dist/components/ChecksPage/MutateCheckViews/CheckForm/CheckForm.esm.js +2 -0
  104. package/dist/components/ChecksPage/MutateCheckViews/CheckForm/CheckFormDescription.esm.js +2 -0
  105. package/dist/components/ChecksPage/MutateCheckViews/CheckForm/Steps/CheckDetailsStep.esm.js +2 -0
  106. package/dist/components/ChecksPage/MutateCheckViews/CheckForm/Steps/CheckRulesStep.esm.js +2 -0
  107. package/dist/components/ChecksPage/MutateCheckViews/FormFields/CheckDescriptionInput/CheckDescriptionInput.esm.js +2 -0
  108. package/dist/components/ChecksPage/MutateCheckViews/FormFields/CheckNameInput/CheckNameInput.esm.js +2 -0
  109. package/dist/components/ChecksPage/MutateCheckViews/FormFields/CheckScheduleSection/ScheduleSection.esm.js +2 -0
  110. package/dist/components/ChecksPage/MutateCheckViews/FormFields/PassFailMessageInput/PassFailMessageInput.esm.js +2 -0
  111. package/dist/components/ChecksPage/MutateCheckViews/FormFields/RuleInput/AddMenuButton.esm.js +2 -0
  112. package/dist/components/ChecksPage/MutateCheckViews/FormFields/RuleInput/Conditions/ConditionList.esm.js +2 -0
  113. package/dist/components/ChecksPage/MutateCheckViews/FormFields/RuleInput/Conditions/ControlledAutocomplete.esm.js +2 -0
  114. package/dist/components/ChecksPage/MutateCheckViews/FormFields/RuleInput/Conditions/RuleConditionInput.esm.js +2 -0
  115. package/dist/components/ChecksPage/MutateCheckViews/FormFields/RuleInput/Conditions/styles.esm.js +2 -0
  116. package/dist/components/ChecksPage/MutateCheckViews/FormFields/RuleInput/Conditions/useRuleOptions.esm.js +2 -0
  117. package/dist/components/ChecksPage/MutateCheckViews/FormFields/RuleInput/Expressions/ExpressionBox.esm.js +2 -0
  118. package/dist/components/ChecksPage/MutateCheckViews/FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js +2 -0
  119. package/dist/components/ChecksPage/MutateCheckViews/FormFields/RuleInput/RuleInputBox.esm.js +2 -0
  120. package/dist/components/ChecksPage/MutateCheckViews/FormFields/RuleInput/useRuleInputHandlers.esm.js +2 -0
  121. package/dist/components/ChecksPage/MutateCheckViews/FormFields/TeamDetailsInput/TeamDetailsInput.esm.js +2 -0
  122. package/dist/components/ChecksPage/MutateCheckViews/hooks/useCheckForm.esm.js +2 -0
  123. package/dist/components/ChecksPage/MutateCheckViews/types/CheckFormTypes.esm.js +2 -0
  124. package/dist/components/ChecksPage/MutateCheckViews/types/ExpressionType.esm.js +2 -0
  125. package/dist/components/ChecksPage/MutateCheckViews/types/Path.esm.js +2 -0
  126. package/dist/components/ChecksPage/MutateCheckViews/types/Schedule.esm.js +2 -0
  127. package/dist/components/ChecksPage/MutateCheckViews/utils/checkFormUtils.esm.js +2 -0
  128. package/dist/components/ChecksPage/MutateCheckViews/utils/validation.esm.js +2 -0
  129. package/dist/components/ChecksPage/skeletons/ChecksOverviewSkeleton.esm.js +2 -0
  130. package/dist/components/ChecksTab/ChecksTab.esm.js +2 -0
  131. package/dist/components/CollectorPage/CollectorPage.esm.js +2 -0
  132. package/dist/components/CollectorPage/Configurators/Configurator.esm.js +2 -0
  133. package/dist/components/CollectorPage/Configurators/Github/FactCollectionConfig.esm.js +2 -0
  134. package/dist/components/CollectorPage/Configurators/Github/GithubConfigurator.esm.js +2 -0
  135. package/dist/components/CollectorPage/Configurators/Github/utils.esm.js +2 -0
  136. package/dist/components/CollectorsPage/CollectorListPage/CollectorListPage.esm.js +2 -0
  137. package/dist/components/CollectorsPage/CollectorListPage/CollectorListSkeleton.esm.js +2 -0
  138. package/dist/components/CollectorsPage/CollectorListPage/CollectorLogo.esm.js +2 -0
  139. package/dist/components/CollectorsPage/CollectorListPage/CollectorSummaryCard.esm.js +2 -0
  140. package/dist/components/CollectorsPage/CollectorsPage.esm.js +2 -0
  141. package/dist/components/ContextMenu/ContextMenu.esm.js +2 -0
  142. package/dist/components/DraggableChip/DraggableChip.esm.js +2 -0
  143. package/dist/components/DraggableChip/chipStyles.esm.js +2 -0
  144. package/dist/components/DroppableInput/DroppableInput.esm.js +2 -0
  145. package/dist/components/EditTrackPage/EditTrackPage.esm.js +2 -0
  146. package/dist/components/EditTrackPage/EditTrackView.esm.js +2 -0
  147. package/dist/components/EmptyState/CampaignEmptyState.esm.js +2 -0
  148. package/dist/components/EmptyState/EmptyState.esm.js +2 -0
  149. package/dist/components/EntityContent/EntityContent.esm.js +2 -0
  150. package/dist/components/EntityPassRateCard/EntityPassRateCard.esm.js +2 -0
  151. package/dist/components/EntitySoundcheckCard/Card.esm.js +2 -0
  152. package/dist/components/EntitySoundcheckCard/EntitySoundcheckCard.esm.js +2 -0
  153. package/dist/components/EntitySoundcheckCard/index.esm.js +2 -0
  154. package/dist/components/EntitySoundcheckCard/skeletons/CardSkeleton.esm.js +2 -0
  155. package/dist/components/EntitySoundcheckContent.esm.js +2 -0
  156. package/dist/components/Expand/Expand.esm.js +2 -0
  157. package/dist/components/FadeIn/FadeIn.esm.js +2 -0
  158. package/dist/components/Filter/EntityAutocompletePicker.esm.js +2 -0
  159. package/dist/components/Filter/FilterComponent.esm.js +2 -0
  160. package/dist/components/Filter/FilterPreviewTable/EntityKindsFilter.esm.js +2 -0
  161. package/dist/components/Filter/FilterPreviewTable/EntitySystemsFilter.esm.js +2 -0
  162. package/dist/components/Filter/FilterPreviewTable/EntityTableToolbar.esm.js +2 -0
  163. package/dist/components/Filter/FilterPreviewTable/EntityTagFilter.esm.js +2 -0
  164. package/dist/components/Filter/FilterPreviewTable/FilterPreviewTable.esm.js +2 -0
  165. package/dist/components/Filter/types.esm.js +2 -0
  166. package/dist/components/Filter/utils.esm.js +2 -0
  167. package/dist/components/FooterButtons/FooterButtons.esm.js +2 -0
  168. package/dist/components/FormControlledSelect/FormControlledSelect.esm.js +2 -0
  169. package/dist/components/FormFilterSection/FormFilterSection.esm.js +2 -0
  170. package/dist/components/FormMarkdownInput/FormMarkdownInput.esm.js +2 -0
  171. package/dist/components/FormStepper/FormStepper.esm.js +2 -0
  172. package/dist/components/FormTextInput/FormTextInput.esm.js +2 -0
  173. package/dist/components/Frequency/FrequencyComponent.esm.js +2 -0
  174. package/dist/components/Frequency/types.esm.js +2 -0
  175. package/dist/components/Frequency/util.esm.js +2 -0
  176. package/dist/components/FullScreenDialog/FullScreenDialog.esm.js +2 -0
  177. package/dist/components/GroupPassRateCard/GroupPassRateCard.esm.js +2 -0
  178. package/dist/components/GroupSelector/GroupSelector.esm.js +2 -0
  179. package/dist/components/GroupSelector/useOptions.esm.js +2 -0
  180. package/dist/components/LevelCard/LevelCard.esm.js +2 -0
  181. package/dist/components/LevelCard/LevelTooltip.esm.js +2 -0
  182. package/dist/components/LevelUpParty/LevelUpParty.esm.js +2 -0
  183. package/dist/components/LoadingIndicator/LoadingIndicator.esm.js +2 -0
  184. package/dist/components/MultiSelectFilter/MultiSelectFilter.esm.js +2 -0
  185. package/dist/components/NoBorderButton/NoBorderButton.esm.js +2 -0
  186. package/dist/components/OverviewChartCard/OverviewChartCard.esm.js +2 -0
  187. package/dist/components/OverviewChartCard/OverviewChartCardStyles.esm.js +2 -0
  188. package/dist/components/OverviewPage/CampaignRow/CampaignRow.esm.js +2 -0
  189. package/dist/components/OverviewPage/CampaignRow/useCampaignRowStyles.esm.js +2 -0
  190. package/dist/components/OverviewPage/CampaignRow/utils.esm.js +2 -0
  191. package/dist/components/OverviewPage/FixedGroupOverviewPage.esm.js +2 -0
  192. package/dist/components/OverviewPage/OverviewPage.esm.js +2 -0
  193. package/dist/components/OverviewPage/OverviewPageContent.esm.js +2 -0
  194. package/dist/components/OverviewPage/OverviewTabs.esm.js +2 -0
  195. package/dist/components/OverviewPage/TableContent/TableContent.esm.js +2 -0
  196. package/dist/components/OverviewPage/TableContent/VirtualTableContent.esm.js +2 -0
  197. package/dist/components/OverviewPage/index.esm.js +2 -0
  198. package/dist/components/OverviewPage/skeletons/OverviewTabsSkeleton.esm.js +2 -0
  199. package/dist/components/PageWarningMessage/PageWarningMessage.esm.js +2 -0
  200. package/dist/components/Pagination/CursorPagination.esm.js +2 -0
  201. package/dist/components/Pagination/Pagination.esm.js +2 -0
  202. package/dist/components/PassRateGrid/PassRateGrid.esm.js +2 -0
  203. package/dist/components/PassRateGrid/PassRateMetadata.esm.js +2 -0
  204. package/dist/components/PassRateGrid/types.esm.js +2 -0
  205. package/dist/components/PassRateTable/NewPassRateTable.esm.js +2 -0
  206. package/dist/components/PassRateTable/PassRateTable.esm.js +2 -0
  207. package/dist/components/PassRateTable/types.esm.js +2 -0
  208. package/dist/components/RefetchingIndicator/RefetchingIndicator.esm.js +2 -0
  209. package/dist/components/RelativeTime/RelativeTime.esm.js +2 -0
  210. package/dist/components/ResultsTable/CheckCell/CheckCell.esm.js +2 -0
  211. package/dist/components/ResultsTable/CheckCell/CheckCellTooltip.esm.js +2 -0
  212. package/dist/components/ResultsTable/HighestLevelBadge.esm.js +2 -0
  213. package/dist/components/ResultsTable/ProgramCheckIndicator.esm.js +2 -0
  214. package/dist/components/ResultsTable/ProgramCheckRow.esm.js +2 -0
  215. package/dist/components/ResultsTable/ProgramLevelRow.esm.js +2 -0
  216. package/dist/components/ResultsTable/ProgramTitleRow.esm.js +2 -0
  217. package/dist/components/ResultsTable/ResultsTableFooter.esm.js +2 -0
  218. package/dist/components/ResultsTable/skeletons/ResultsTableSkeleton.esm.js +2 -0
  219. package/dist/components/ResultsTable/virtualized/Cell.esm.js +2 -0
  220. package/dist/components/ResultsTable/virtualized/Row.esm.js +2 -0
  221. package/dist/components/ResultsTable/virtualized/VirtualizedResultsTable.esm.js +2 -0
  222. package/dist/components/ResultsTable/virtualized/virtualizedTableUtils.esm.js +2 -0
  223. package/dist/components/RichTooltip/RichTooltip.esm.js +2 -0
  224. package/dist/components/Router.esm.js +2 -0
  225. package/dist/components/RoutingPage/Breadcrumbs.esm.js +2 -0
  226. package/dist/components/RoutingPage/RoutingPage.esm.js +2 -0
  227. package/dist/components/RoutingPage/index.esm.js +2 -0
  228. package/dist/components/RoutingPage/utils.esm.js +2 -0
  229. package/dist/components/SearchBar/SearchBar.esm.js +2 -0
  230. package/dist/components/SearchFilters/SearchFilters.esm.js +2 -0
  231. package/dist/components/SoundcheckQueryClientProvider/SoundcheckQueryClientProvider.esm.js +2 -0
  232. package/dist/components/StyledTooltip/StyledTooltip.esm.js +2 -0
  233. package/dist/components/SummaryCard/SummaryCard.esm.js +2 -0
  234. package/dist/components/SummaryCard/SummaryCardActionsMenu.esm.js +2 -0
  235. package/dist/components/TechHealth/Filters/FacetFilter.esm.js +2 -0
  236. package/dist/components/TechHealth/Filters/FilterProvider.esm.js +2 -0
  237. package/dist/components/TechHealth/Filters/Filters.esm.js +2 -0
  238. package/dist/components/TechHealth/Filters/FiltersHeader.esm.js +2 -0
  239. package/dist/components/TechHealth/Filters/FiltersSection.esm.js +2 -0
  240. package/dist/components/TechHealth/Filters/NumberOfDaysFilter.esm.js +2 -0
  241. package/dist/components/TechHealth/Filters/types.esm.js +2 -0
  242. package/dist/components/TechHealth/Filters/useFacetOptions.esm.js +2 -0
  243. package/dist/components/TechHealth/Filters/utils.esm.js +2 -0
  244. package/dist/components/TechHealth/Loading/Emoji.esm.js +2 -0
  245. package/dist/components/TechHealth/Loading/EmojiFountain.esm.js +2 -0
  246. package/dist/components/TechHealth/Loading/Loading.esm.js +2 -0
  247. package/dist/components/TechHealth/Loading/TechHealthLoading.esm.js +2 -0
  248. package/dist/components/TechHealth/TechHealth.esm.js +2 -0
  249. package/dist/components/TechHealthSummary/SummaryAggregationsProvider.esm.js +2 -0
  250. package/dist/components/TechHealthSummary/TechHealthSummary.esm.js +2 -0
  251. package/dist/components/TechHealthTabs/ActionColumn.esm.js +2 -0
  252. package/dist/components/TechHealthTabs/CampaignResultsTab/CampaignResultsTab.esm.js +2 -0
  253. package/dist/components/TechHealthTabs/CheckResultsTab/CheckResultsTab.esm.js +2 -0
  254. package/dist/components/TechHealthTabs/CheckResultsTab/CheckTrendColumn.esm.js +2 -0
  255. package/dist/components/TechHealthTabs/EntityResultsTab/EntityResultsTab.esm.js +2 -0
  256. package/dist/components/TechHealthTabs/EntityResultsTab/EntityTrendColumn.esm.js +2 -0
  257. package/dist/components/TechHealthTabs/GroupResultsTab/GroupResultsTab.esm.js +2 -0
  258. package/dist/components/TechHealthTabs/GroupResultsTab/GroupTrendColumn.esm.js +2 -0
  259. package/dist/components/TechHealthTabs/MostRecentColumn.esm.js +2 -0
  260. package/dist/components/TechHealthTabs/NameColumn.esm.js +2 -0
  261. package/dist/components/TechHealthTabs/OwnerColumn.esm.js +2 -0
  262. package/dist/components/TechHealthTabs/PassRateTabHeader.esm.js +2 -0
  263. package/dist/components/TechHealthTabs/PassRateTabStyles.esm.js +2 -0
  264. package/dist/components/TechHealthTabs/TechHealthExportFunctions.esm.js +2 -0
  265. package/dist/components/TechHealthTabs/TrackResultsTab/TrackLevelTrendColumn.esm.js +2 -0
  266. package/dist/components/TechHealthTabs/TrackResultsTab/TrackResultsTab.esm.js +2 -0
  267. package/dist/components/TechHealthTabs/techHealthTabUtils.esm.js +2 -0
  268. package/dist/components/TrackForm/Steps/LevelsStep/ChecksSection/ChecksSection.esm.js +2 -0
  269. package/dist/components/TrackForm/Steps/LevelsStep/LevelsSection/LevelChipsSection.esm.js +2 -0
  270. package/dist/components/TrackForm/Steps/LevelsStep/LevelsSection/LevelsSection.esm.js +2 -0
  271. package/dist/components/TrackForm/Steps/LevelsStep/LevelsStep.esm.js +2 -0
  272. package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackDescriptionInput/TrackDescriptionInput.esm.js +2 -0
  273. package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackDetailsStep.esm.js +2 -0
  274. package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackDocumentationUrlInput/TrackDocumentationUrlInput.esm.js +2 -0
  275. package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackNameInput/TrackNameInput.esm.js +2 -0
  276. package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackOwnerSelect/TrackOwnerSelect.esm.js +2 -0
  277. package/dist/components/TrackForm/TrackForm.esm.js +2 -0
  278. package/dist/components/TrackForm/utils/trackFormUtils.esm.js +2 -0
  279. package/dist/components/TrackForm/utils/types.esm.js +2 -0
  280. package/dist/components/TrackForm/utils/useTrackForm.esm.js +2 -0
  281. package/dist/components/TrackForm/utils/validation.esm.js +2 -0
  282. package/dist/components/TrackHistoryChartCard/TrackHistoryChartCard.esm.js +2 -0
  283. package/dist/components/TrackPage/FilterBar/FilterBar.esm.js +2 -0
  284. package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js +2 -0
  285. package/dist/components/TrackPage/TrackEntitiesTable/TrackStatusChip.esm.js +2 -0
  286. package/dist/components/TrackPage/TrackEntitiesTable/columns.esm.js +2 -0
  287. package/dist/components/TrackPage/TrackEntitiesTable/utils.esm.js +2 -0
  288. package/dist/components/TrackPage/TrackHistoryChart.esm.js +2 -0
  289. package/dist/components/TrackPage/TrackLevelsChart.esm.js +2 -0
  290. package/dist/components/TrackPage/TrackPage.esm.js +2 -0
  291. package/dist/components/TrackPage/TrackProgressCard.esm.js +2 -0
  292. package/dist/components/TrackPage/utils.esm.js +2 -0
  293. package/dist/components/TracksPage/AddTrackView.esm.js +2 -0
  294. package/dist/components/TracksPage/TrackListPage/TrackEmptyState.esm.js +2 -0
  295. package/dist/components/TracksPage/TrackListPage/TrackListPage.esm.js +2 -0
  296. package/dist/components/TracksPage/TrackListPage/TrackMetadata.esm.js +2 -0
  297. package/dist/components/TracksPage/TrackListPage/TrackSummaryCard.esm.js +2 -0
  298. package/dist/components/TracksPage/TrackListPage/TracksOverviewSkeleton.esm.js +2 -0
  299. package/dist/components/TracksPage/TracksPage.esm.js +2 -0
  300. package/dist/components/TracksTab/TracksTab.esm.js +2 -0
  301. package/dist/contexts/CampaignFormContext.esm.js +2 -0
  302. package/dist/contexts/CheckFormContext.esm.js +2 -0
  303. package/dist/contexts/GenericFormContext.esm.js +2 -0
  304. package/dist/contexts/TrackFormContext.esm.js +2 -0
  305. package/dist/contexts/UserProvider.esm.js +2 -0
  306. package/dist/graphql/generated/index.esm.js +717 -0
  307. package/dist/hooks/aggregations/useAggregatedCheckPassRateTrend.esm.js +2 -0
  308. package/dist/hooks/aggregations/useAggregatedEntityPassRateTrend.esm.js +2 -0
  309. package/dist/hooks/aggregations/useAggregatedGroupPassRateTrend.esm.js +2 -0
  310. package/dist/hooks/aggregations/useAggregatedTrackPassRateTrend.esm.js +2 -0
  311. package/dist/hooks/aggregations/useCertificationStatus.esm.js +2 -0
  312. package/dist/hooks/aggregations/useCertificationStatusHistory.esm.js +2 -0
  313. package/dist/hooks/aggregations/useCheckPassRateTrend.esm.js +2 -0
  314. package/dist/hooks/aggregations/useCheckStatus.esm.js +2 -0
  315. package/dist/hooks/aggregations/useCheckStatusHistory.esm.js +2 -0
  316. package/dist/hooks/aggregations/useEntityPassRateTrend.esm.js +2 -0
  317. package/dist/hooks/aggregations/useGroupPassRateTrend.esm.js +2 -0
  318. package/dist/hooks/aggregations/useTrackPassRateTrend.esm.js +2 -0
  319. package/dist/hooks/campaigns/useArchiveCampaign.esm.js +2 -0
  320. package/dist/hooks/campaigns/useCreateCampaign.esm.js +2 -0
  321. package/dist/hooks/campaigns/useDeleteCampaign.esm.js +2 -0
  322. package/dist/hooks/campaigns/useGetCampaign.esm.js +2 -0
  323. package/dist/hooks/campaigns/useGetCampaignOwners.esm.js +2 -0
  324. package/dist/hooks/campaigns/useGetCampaignProgress.esm.js +2 -0
  325. package/dist/hooks/campaigns/useGetCampaigns.esm.js +2 -0
  326. package/dist/hooks/campaigns/useUpdateCampaign.esm.js +2 -0
  327. package/dist/hooks/catalog/useEntitiesByRefs.esm.js +2 -0
  328. package/dist/hooks/catalog/useEntityByRef.esm.js +2 -0
  329. package/dist/hooks/catalog/useGetEntityFacets.esm.js +2 -0
  330. package/dist/hooks/certifications/useAllCertifications.esm.js +2 -0
  331. package/dist/hooks/certifications/useCertificationDetails.esm.js +2 -0
  332. package/dist/hooks/certifications/useCertificationDetailsForTrack.esm.js +2 -0
  333. package/dist/hooks/certifications/useProgramOverviewForOwner.esm.js +2 -0
  334. package/dist/hooks/checks/useCheckDetails.esm.js +2 -0
  335. package/dist/hooks/checks/useCreateCheck.esm.js +2 -0
  336. package/dist/hooks/checks/useDeleteCheck.esm.js +2 -0
  337. package/dist/hooks/checks/useGetCheckOwners.esm.js +2 -0
  338. package/dist/hooks/checks/useGetChecks.esm.js +2 -0
  339. package/dist/hooks/checks/useUpdateCheck.esm.js +2 -0
  340. package/dist/hooks/collectors/useGetCollectors.esm.js +2 -0
  341. package/dist/hooks/collectors/useGetFactSchema.esm.js +2 -0
  342. package/dist/hooks/collectors/useUpdateCollectorConfig.esm.js +2 -0
  343. package/dist/hooks/entities/useEntityRefsForUser.esm.js +2 -0
  344. package/dist/hooks/entities/useTrackEntities.esm.js +2 -0
  345. package/dist/hooks/facets/useFacetFilters.esm.js +2 -0
  346. package/dist/hooks/facets/useFacetsForOwner.esm.js +2 -0
  347. package/dist/hooks/graphqlKeys.esm.js +2 -0
  348. package/dist/hooks/groups/useAllGroups.esm.js +2 -0
  349. package/dist/hooks/groups/useUsersGroupClaims.esm.js +2 -0
  350. package/dist/hooks/operators/useOperators.esm.js +2 -0
  351. package/dist/hooks/playlists/usePlaylists.esm.js +2 -0
  352. package/dist/hooks/tracks/useCreateTrack.esm.js +2 -0
  353. package/dist/hooks/tracks/useDeleteTrack.esm.js +2 -0
  354. package/dist/hooks/tracks/useGetAllTracks.esm.js +2 -0
  355. package/dist/hooks/tracks/useGetChecksMap.esm.js +2 -0
  356. package/dist/hooks/tracks/useGetTrackOwners.esm.js +2 -0
  357. package/dist/hooks/tracks/useUpdateTrack.esm.js +2 -0
  358. package/dist/hooks/useConfirmationModal.esm.js +2 -0
  359. package/dist/hooks/useContextMenu.esm.js +2 -0
  360. package/dist/hooks/useNavigateBack.esm.js +2 -0
  361. package/dist/hooks/useSearchParam.esm.js +2 -0
  362. package/dist/hooks/useSoundcheckAlert.esm.js +2 -0
  363. package/dist/hooks/useStepper.esm.js +2 -0
  364. package/dist/index.esm.js +1 -1
  365. package/dist/plugin.esm.js +2 -0
  366. package/dist/routes.esm.js +2 -0
  367. package/dist/text.esm.js +2 -0
  368. package/dist/utils/charts.esm.js +2 -0
  369. package/dist/utils/collectors.esm.js +2 -0
  370. package/dist/utils/cron.esm.js +2 -0
  371. package/dist/utils/export.esm.js +6 -0
  372. package/dist/utils/filters.esm.js +2 -0
  373. package/dist/utils/formStyles.esm.js +2 -0
  374. package/dist/utils/frequency.esm.js +2 -0
  375. package/dist/utils/license.esm.js +2 -0
  376. package/dist/utils/time.esm.js +2 -0
  377. package/dist/utils/validation.esm.js +2 -0
  378. package/package.json +14 -13
  379. package/dist/esm/Card-BU6-9YfF.esm.js +0 -2
  380. package/dist/esm/CertificationSidebar-DB4UqW7X.esm.js +0 -2
  381. package/dist/esm/EmptyState-C2zsaDrr.esm.js +0 -2
  382. package/dist/esm/EntitySoundcheckContent-DAnk6B9A.esm.js +0 -2
  383. package/dist/esm/OverviewPageContent-CBL-e1xr.esm.js +0 -2
  384. package/dist/esm/RefetchingIndicator-BrP7yEiB.esm.js +0 -2
  385. package/dist/esm/chartUtils-CD083K30.esm.js +0 -2
  386. package/dist/esm/index-1faKkIS7.esm.js +0 -2
  387. package/dist/esm/index-B3L_axCg.esm.js +0 -2
  388. package/dist/esm/index-Otz7FNIb.esm.js +0 -2
  389. package/dist/esm/license-CQErZDIh.esm.js +0 -2
  390. package/dist/esm/routes-DcGwdXHX.esm.js +0 -699
package/CHANGELOG.md CHANGED
@@ -1,5 +1,36 @@
1
1
  # @spotify/backstage-plugin-soundcheck
2
2
 
3
+ ## 0.12.8
4
+
5
+ ### Patch Changes
6
+
7
+ - Fixes an issue that prevented use of the grid view on Soundcheck Tech-Health pages.
8
+ - Resolves an issue that can sometimes occur when reading persisted Tech Health filters from local storage.
9
+ - Check form rule input will now cast string values for booleans and numbers to the proper type upon form submission (create/edit).
10
+ - Add edit to drop down menu on summary cards for checks, tracks and campaigns page.
11
+ - Minor performance improvement to the Track Insights page.
12
+ - Fixed discrepancies in Tech Health numbers.
13
+ - Adds tooltip showing counts on the track insights pages for pass rates.
14
+ - Add yaml exports for tracks and checks in the UI. Exports can be performed via the drop down menu on the Track and Check cards on their respective list pages.
15
+ - Add theme overrides using the following component name `CheckResultStateBox` for customization of the check result box in the Soundcheck tab of the component pages.
16
+
17
+ The following check status states are available for override:
18
+
19
+ - `passed`
20
+ - `failed`
21
+ - `warning`
22
+ - `notReported`
23
+ - `notApplicable`
24
+
25
+ - Updated dependencies
26
+ - @spotify/backstage-plugin-soundcheck-common@0.13.2
27
+
28
+ ## 0.12.7
29
+
30
+ ### Patch Changes
31
+
32
+ - Resolves an issue that can sometimes occur when reading persisted Tech Health filters from local storage.
33
+
3
34
  ## 0.12.6
4
35
 
5
36
  ### Patch Changes
@@ -29,17 +60,6 @@
29
60
  - Tech Health Entities and Teams tabs can now display unlimited number of entities.
30
61
  - Added a possibility to export full dataset as CSV in Tech Health.
31
62
  - Updated backstage dependencies to `v1.26.0`
32
- - Updated dependencies
33
- - Updated dependencies
34
- - Updated dependencies
35
- - Updated dependencies
36
- - Updated dependencies
37
- - Updated dependencies
38
- - Updated dependencies
39
- - Updated dependencies
40
- - Updated dependencies
41
- - Updated dependencies
42
- - Updated dependencies
43
63
  - Updated dependencies
44
64
  - @spotify/backstage-plugin-core@0.7.1
45
65
  - @spotify/backstage-plugin-soundcheck-common@0.13.1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spotify/backstage-plugin-soundcheck",
3
- "version": "0.12.6",
3
+ "version": "0.12.8",
4
4
  "main": "../dist/alpha.esm.js",
5
5
  "module": "../dist/alpha.esm.js",
6
6
  "types": "../dist/alpha.d.ts"
@@ -0,0 +1,2 @@
1
+ import{createApiExtension as c,createApiFactory as i,discoveryApiRef as o,fetchApiRef as p}from"@backstage/frontend-plugin-api";import{soundcheckApiRef as r,SoundcheckApi as t}from"../api.esm.js";const f=c({factory:i({api:r,deps:{discoveryApi:o,fetchApi:p},factory:e=>new t(e)})});export{f as soundcheckApi};
2
+ //# sourceMappingURL=apis.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{convertLegacyRouteRef as n,compatWrapper as t}from"@backstage/core-compat-api";import{createEntityContentExtension as r,createEntityCardExtension as a}from"@backstage/plugin-catalog-react/alpha";import o from"react";import{entityRootRouteRef as c,groupRootRouteRef as u}from"../routes.esm.js";const i=r({defaultPath:"soundcheck",defaultTitle:"Soundcheck",name:"entity",routeRef:n(c),loader:()=>import("../components/EntitySoundcheckContent.esm.js").then(e=>t(o.createElement(e.EntitySoundcheckContent,null)))}),d=a({name:"card",loader:()=>import("../components/EntitySoundcheckCard/index.esm.js").then(e=>t(o.createElement(e.EntitySoundcheckCard,null)))}),l=r({defaultPath:"soundcheck",defaultTitle:"Soundcheck",name:"group",routeRef:n(u),attachTo:{id:"page:catalog/group-details",input:"contents"},loader:()=>import("../components/OverviewPage/index.esm.js").then(e=>t(o.createElement(e.FixedGroupOverviewPage,null)))});export{d as entitySoundcheckCard,i as entitySoundcheckContent,l as groupSoundcheckContent};
2
+ //# sourceMappingURL=entity-content.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{convertLegacyRouteRef as o,compatWrapper as t}from"@backstage/core-compat-api";import{createPageExtension as r}from"@backstage/frontend-plugin-api";import a from"react";import{rootRouteRef as n,overviewRouteRef as c}from"../routes.esm.js";const u=r({name:"SoundcheckRoutingPage",namespace:"soundcheck",routeRef:o(n),defaultPath:"/soundcheck",loader:()=>import("../components/RoutingPage/index.esm.js").then(e=>t(a.createElement(e.RoutingPage,null)))}),m=r({name:"overview",namespace:"soundcheck",routeRef:o(c),defaultPath:"/soundcheck",loader:()=>import("../components/OverviewPage/index.esm.js").then(e=>t(a.createElement(e.OverviewPage,null)))});export{m as soundcheckOverviewPage,u as soundcheckRoutingPage};
2
+ //# sourceMappingURL=pages.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{createPlugin as e}from"@backstage/frontend-plugin-api";import{soundcheckApi as o}from"./apis.esm.js";import{entitySoundcheckContent as n,entitySoundcheckCard as t,groupSoundcheckContent as c}from"./entity-content.esm.js";import{soundcheckRoutingPage as r,soundcheckOverviewPage as i}from"./pages.esm.js";import{soundcheckSidebarItem as u}from"./sidebar-item.esm.js";var d=e({id:"soundcheck",extensions:[r,i,o,n,t,c,u]});export{d as default};
2
+ //# sourceMappingURL=plugin.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{convertLegacyRouteRef as o}from"@backstage/core-compat-api";import{createNavItemExtension as e}from"@backstage/frontend-plugin-api";import t from"@material-ui/icons/DoneAll";import{rootRouteRef as r}from"../routes.esm.js";const m=e({title:"Soundcheck",icon:t,routeRef:o(r)});export{m as soundcheckSidebarItem};
2
+ //# sourceMappingURL=sidebar-item.esm.js.map
package/dist/alpha.esm.js CHANGED
@@ -1,2 +1,2 @@
1
- import{createApiExtension as i,createApiFactory as u,discoveryApiRef as d,fetchApiRef as p,createPageExtension as c,createNavItemExtension as s,createPlugin as m}from"@backstage/frontend-plugin-api";import{s as h,S as l,e as f,g as R,r as a,o as k}from"./esm/routes-DcGwdXHX.esm.js";import{convertLegacyRouteRef as t,compatWrapper as o}from"@backstage/core-compat-api";import{createEntityContentExtension as r,createEntityCardExtension as g}from"@backstage/plugin-catalog-react/alpha";import n from"react";import v from"@material-ui/icons/DoneAll";import"@backstage/core-plugin-api";import"graphql-request";import"graphql-tag";const y=i({factory:u({api:h,deps:{discoveryApi:d,fetchApi:p},factory:e=>new l(e)})}),E=r({defaultPath:"soundcheck",defaultTitle:"Soundcheck",name:"entity",routeRef:t(f),loader:()=>import("./esm/EntitySoundcheckContent-DAnk6B9A.esm.js").then(e=>o(n.createElement(e.EntitySoundcheckContent,null)))}),P=g({name:"card",loader:()=>import("./esm/index-B3L_axCg.esm.js").then(e=>o(n.createElement(e.EntitySoundcheckCard,null)))}),S=r({defaultPath:"soundcheck",defaultTitle:"Soundcheck",name:"group",routeRef:t(R),attachTo:{id:"page:catalog/group-details",input:"contents"},loader:()=>import("./esm/index-1faKkIS7.esm.js").then(e=>o(n.createElement(e.FixedGroupOverviewPage,null)))}),A=c({name:"SoundcheckRoutingPage",namespace:"soundcheck",routeRef:t(a),defaultPath:"/soundcheck",loader:()=>import("./esm/index-Otz7FNIb.esm.js").then(e=>o(n.createElement(e.RoutingPage,null)))}),x=c({name:"overview",namespace:"soundcheck",routeRef:t(k),defaultPath:"/soundcheck",loader:()=>import("./esm/index-1faKkIS7.esm.js").then(e=>o(n.createElement(e.OverviewPage,null)))}),C=s({title:"Soundcheck",icon:v,routeRef:t(a)});var w=m({id:"soundcheck",extensions:[A,x,y,E,P,S,C]});export{w as default};
1
+ import{default as o}from"./alpha/plugin.esm.js";export{o as default};
2
2
  //# sourceMappingURL=alpha.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{createApiRef as d}from"@backstage/core-plugin-api";import{GraphQLClient as m}from"graphql-request";import{getSdk as f}from"./graphql/generated/index.esm.js";var w=(n,t,e)=>{if(!t.has(n))throw TypeError("Cannot "+e)},a=(n,t,e)=>(w(n,t,"read from private field"),e?e.call(n):t.get(n)),l=(n,t,e)=>{if(t.has(n))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(n):t.set(n,e)},g=(n,t,e,i)=>(w(n,t,"write to private field"),i?i.call(n,e):t.set(n,e),e),o,u,s,y,r;const C=d({id:"plugin.soundcheck"}),k=n=>"response"in n&&"errors"in n.response,v=n=>"response"in n&&"message"in n.response;class R{constructor(t){l(this,o,void 0),l(this,u,void 0),l(this,s,void 0),l(this,y,i=>{var c,h,p;return k(i)?(p=(h=(c=i.response)==null?void 0:c.errors)==null?void 0:h[0].message)!=null?p:`${i}`:v(i)?i.response.message:`${i}`}),l(this,r,async i=>{try{return await i()}catch(c){throw new Error(`Error from Soundcheck backend: ${a(this,y).call(this,c)}`)}}),g(this,o,t.fetchApi),g(this,u,t.discoveryApi);const e=new m("/graphql",{fetch:async(i,c)=>{const h=`${await a(this,u).getBaseUrl("soundcheck")}${i}`;return a(this,o).fetch(h,c)}});g(this,s,f(e))}async getAllCertifications(t){return a(this,r).call(this,async()=>{const{certifications:e}=await a(this,s).getAllCertifications({entityRef:t});return e})}async getCertificationDetails(t){return a(this,r).call(this,async()=>{const{certifications:e}=await a(this,s).getCertificationDetails({entityRef:t});return e})}async getCertificationDetailsForTrack(t,e){return a(this,r).call(this,async()=>{const{programCertification:i}=await a(this,s).getCertificationDetailsForTrack({entityRef:t,programId:e});return i})}async getCheckResultDetails(t,e,i){return a(this,r).call(this,async()=>{const{checkResult:c}=await a(this,s).getCheckResultDetails({entityRef:t,programId:e,checkId:i});return c})}async getFacetsForOwner(t){return a(this,r).call(this,async()=>{const{facetsForOwner:e}=await a(this,s).getFacetsForOwner({ownerEntityRef:t});return e})}async getProgramOverviewForOwner(t,e,i,c){return a(this,r).call(this,async()=>{const{programOverviewForOwner:h}=await a(this,s).getProgramOverviewForOwner({ownerEntityRef:t,facet:e,first:i,after:c});return h})}async getTracks(t){return a(this,r).call(this,async()=>{const{programs:e}=await a(this,s).getTracks({filter:t});return e})}async createProgram(t){return a(this,r).call(this,async()=>{const{program:e}=await a(this,s).createProgram({input:t});return e})}async updateProgram(t){return a(this,r).call(this,async()=>{const{program:e}=await a(this,s).updateProgram({input:t});return e})}async deleteProgram(t){return a(this,r).call(this,async()=>{const{programDeleted:e}=await a(this,s).deleteProgram({programId:t});return e})}async getPlaylists(t){return a(this,r).call(this,async()=>{const{playlists:e}=await a(this,s).getPlaylists({entityRef:t});return e})}async getOperators(){return a(this,r).call(this,async()=>{const{operators:t}=await a(this,s).getOperators();return t})}async getChecks(t){return a(this,r).call(this,async()=>{const{checkers:e}=await a(this,s).getCheckers({filter:t});return e})}async createCheck(t){return a(this,r).call(this,async()=>{const{check:e}=await a(this,s).createCheck({input:t});return e})}async updateCheck(t){return a(this,r).call(this,async()=>{const{check:e}=await a(this,s).updateCheck({input:t});return e})}async deleteCheck(t){return a(this,r).call(this,async()=>await a(this,s).deleteChecker({checkerId:t}))}async getCollectors(t){return a(this,r).call(this,async()=>{const{collectors:e}=await a(this,s).getCollectors({ids:t});return e})}async getFactSchema(t,e){if(!(!t||!e))return a(this,r).call(this,async()=>{const{factSchema:i}=await a(this,s).getFactSchemas({collectorId:t,factName:e});return i})}async updateCollectorConfig(t){return a(this,r).call(this,async()=>{const{collector:e}=await a(this,s).updateCollectorConfig({input:t});return e})}async getOverallCheckPassRates(t){return a(this,r).call(this,async()=>await a(this,s).getOverallCheckPassRates({filter:t}))}async getIndividualCheckPassRates(t){return a(this,r).call(this,async()=>await a(this,s).getIndividualCheckPassRates({filter:t}))}async getOverallTrackPassRate(t){return a(this,r).call(this,async()=>await a(this,s).getOverallTrackPassRate({filter:t}))}async getIndividualTrackPassRate(t){return a(this,r).call(this,async()=>await a(this,s).getIndividualTrackPassRate({filter:t}))}async getOverallEntityPassRates(t){return a(this,r).call(this,async()=>await a(this,s).getOverallEntityPassRates({filter:t}))}async getIndividualEntityPassRates(t){return a(this,r).call(this,async()=>await a(this,s).getIndividualEntityPassRates({input:t}))}async getOverallGroupPassRates(t){return a(this,r).call(this,async()=>await a(this,s).getOverallGroupPassRates({input:t}))}async getIndividualGroupPassRates(t){return a(this,r).call(this,async()=>await a(this,s).getIndividualGroupPassRates({input:t}))}async getEntityRefsForTechHealthFilter(t){return a(this,r).call(this,async()=>await a(this,s).getEntityRefsForTechHealthFilter({ownerEntityRef:t}))}async getTrackEntities(t){return a(this,r).call(this,async()=>await a(this,s).getTrackEntities({input:t}))}async getCampaigns(t){return a(this,r).call(this,async()=>{const{campaigns:e}=await a(this,s).getCampaigns({filter:t});return e})}async createCampaign(t){return a(this,r).call(this,async()=>{const{campaign:e}=await a(this,s).createCampaign({input:t});return e})}async updateCampaign(t){return a(this,r).call(this,async()=>{const{campaign:e}=await a(this,s).updateCampaign({input:t});return e})}async deleteCampaign(t){return a(this,r).call(this,async()=>{const{campaignDeleted:e}=await a(this,s).deleteCampaign({campaignId:t});return e})}async archiveCampaign(t){return a(this,r).call(this,async()=>{const{campaignArchived:e}=await a(this,s).archiveCampaign({campaignId:t});return e})}async getCampaignProgress(t,e,i){return a(this,r).call(this,async()=>{const{campaignProgress:c}=await a(this,s).getCampaignProgress({id:t,first:e,after:i});return c})}async getCampaignOwners(){return a(this,r).call(this,async()=>{const{campaignOwners:t}=await a(this,s).getCampaignOwners();return t})}async getCheckOwners(){return a(this,r).call(this,async()=>{const{checkOwners:t}=await a(this,s).getCheckOwners();return t})}async getTrackOwners(){return a(this,r).call(this,async()=>{const{trackOwners:t}=await a(this,s).getTrackOwners();return t})}async getCertificationStatus(t){return a(this,r).call(this,async()=>a(this,s).getCertificationStatus({input:t}))}async getCertificationStatusHistory(t){return a(this,r).call(this,async()=>a(this,s).getCertificationStatusHistory({input:t}))}async getCheckStatus(t){return a(this,r).call(this,async()=>a(this,s).getCheckStatus({input:t}))}async getCheckStatusHistory(t){return a(this,r).call(this,async()=>a(this,s).getCheckStatusHistory({input:t}))}async getCheckEntities(t){return a(this,r).call(this,async()=>await a(this,s).getCheckEntities({input:t}))}}o=new WeakMap,u=new WeakMap,s=new WeakMap,y=new WeakMap,r=new WeakMap;export{R as SoundcheckApi,C as soundcheckApiRef};
2
+ //# sourceMappingURL=api.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as r}from"@material-ui/core";import{Alert as o,AlertTitle as a}from"@material-ui/lab";import l from"react";const i=r(e=>({root:{alignItems:"flex-start",padding:e.spacing(2)},alertTitle:{marginBottom:0}})),s=e=>{const t=i();return l.createElement(o,{severity:e.severity,elevation:1,classes:{...t},onClose:e.onClose,variant:"filled"},l.createElement(a,{className:t.alertTitle},e.title),e.children)};export{s as AlertPanel};
2
+ //# sourceMappingURL=AlertPanel.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as a}from"@material-ui/core";import l from"classnames";import n from"react";const o=24,m=11,t=e=>e==="small"?1:2,p=a({root:{position:"relative",display:"inline-flex",alignItems:"center",justifyContent:"center",borderRadius:"50%",borderWidth:"2px",fontWeight:700,width:({size:e})=>`${o*t(e)}px`,height:({size:e})=>`${o*t(e)}px`,fontSize:({size:e})=>`${m*t(e)}px`}}),c=({className:e,label:i,size:s="small"})=>{const r=p({size:s});return n.createElement("span",{className:l(e,r.root),role:"img","aria-label":`${i} badge`},i)};export{c as BaseBadge};
2
+ //# sourceMappingURL=BaseBadge.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as t}from"@material-ui/core";import m from"classnames";import a from"react";import{BaseBadge as l}from"./BaseBadge.esm.js";const s=t({root:{borderColor:"currentColor",borderStyle:"solid"}}),i=({className:o,size:r="small"})=>{const e=s();return a.createElement(l,{className:m(o,e.root),size:r,label:"C"})};export{i as CampaignBadge};
2
+ //# sourceMappingURL=CampaignBadge.esm.js.map
@@ -0,0 +1,2 @@
1
+ import t from"react";import{CampaignBadge as c}from"./CampaignBadge.esm.js";import{LevelBadge as l}from"./LevelBadge.esm.js";import{NoLevelBadge as o}from"./NoLevelBadge.esm.js";const n=({badge:r,className:s,size:e="small",trackType:i})=>{const a=s||"";let m=t.createElement(o,{className:a,size:e});return i==="campaign"?m=t.createElement(c,{className:a,size:e}):r&&(m=t.createElement(l,{className:a,size:e,badge:r})),m};export{n as CertificationBadge};
2
+ //# sourceMappingURL=CertificationBadge.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as a,alpha as l}from"@material-ui/core";import p from"classnames";import i from"react";import{BaseBadge as s}from"./BaseBadge.esm.js";const m=a(t=>({root:{background:({color:e})=>e,color:({color:e})=>e?t.palette.getContrastText(e):t.palette.text.primary,border:({size:e})=>t.palette.type==="dark"?void 0:`${e==="small"?"1px":"2px"} solid ${l(t.palette.text.primary,.8)}`,"&::after":{position:"absolute",display:"block",content:'""',top:0,left:0,width:"100%",height:"100%",borderRadius:"50%",boxShadow:["inset 0 -0.10em 0 0 rgba(0, 0, 0, 0.15)","inset 0px 0.10em 0px 0px rgba(255, 255, 255, 0.4)","inset 0px 0.9em 0px -0.4em rgba(255, 255, 255, 0.1)"].join(",")}},borderTheme:{borderColor:t.palette.text.primary,borderStyle:"solid",color:t.palette.text.primary}})),d=({className:t,badge:e,size:o="small"})=>{const r=m({color:e.options.color,size:o});return i.createElement(s,{className:p(t,e.options.color?r.root:r.borderTheme),size:o,label:`L${e.options.level}`})};export{d as LevelBadge};
2
+ //# sourceMappingURL=LevelBadge.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as t}from"@material-ui/core";import m from"classnames";import l from"react";import{BaseBadge as s}from"./BaseBadge.esm.js";const a=t({root:{borderColor:"currentColor",borderStyle:"dashed"}}),c=({className:e,size:o="small"})=>{const r=a();return l.createElement(s,{className:m(e,r.root),size:o,label:"NL"})};export{c as NoLevelBadge};
2
+ //# sourceMappingURL=NoLevelBadge.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as t}from"@material-ui/core";import l from"classnames";import s from"react";import{BaseBadge as m}from"./BaseBadge.esm.js";const a=t({root:{borderColor:"currentColor",borderStyle:"solid"}}),i=({className:o,size:r="small"})=>{const e=a();return s.createElement(m,{className:l(o,e.root),size:r,label:"\u25BA"})};export{i as PlaylistBadge};
2
+ //# sourceMappingURL=PlaylistBadge.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{BadgeVariant as r}from"../../graphql/generated/index.esm.js";const l={WHITE:"#ffffff",BRONZE:"#A36652",SILVER:"#D9D9D9",GOLD:"#FCE54F"},o=[l.BRONZE,l.SILVER,l.GOLD],a={variant:r.Medal,options:{level:0,color:""}},f=(n,t)=>{const e=o.slice(o.length-Math.min(t,o.length));return e.length<t&&e.unshift(...Array(t-e.length).fill(l.WHITE)),e[n-1]},s=(n,t)=>{if(n===0)return a;const e=t.levels.filter(i=>i.ordinal!==0).length;return{variant:r.Medal,options:{level:n,color:f(n,e)}}};export{a as LEVEL_ZERO_BADGE,s as generateBadge};
2
+ //# sourceMappingURL=badge.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as D,Grid as n,Checkbox as u,Typography as d,TextField as C,FormControl as v,InputLabel as N,Select as T,MenuItem as y}from"@material-ui/core";import e,{useState as p,useEffect as L}from"react";import{MIN_TIME_UNIT_VALUE as x,MAX_TIME_UNIT_VALUE as k}from"../../utils/time.esm.js";import{TimeUnit as M}from"../Frequency/types.esm.js";import{VALID_TIME_UNITS as S,toTimeUnit as U}from"../Frequency/util.esm.js";import"../Frequency/FrequencyComponent.esm.js";const _=D(l=>({duration:{display:"flex",gap:l.spacing(2),alignItems:"flex-start",marginTop:l.spacing(1)},durationInput:{paddingLeft:0},label:{cursor:"pointer"},font:{fontSize:l.typography.body1.fontSize},inputLabel:{color:`${l.palette.text.primary} !important`},inputLabelDisabled:{color:l.palette.action.disabled},unitInput:{minWidth:100},unitMenu:{backgroundColor:l.palette.background.paper}})),F=({value:l,onChange:s,disabled:r,errors:m})=>{const i=_(),[t,c]=p(l),[b,h]=p(`${l.value}`);L(()=>{s&&s(t)},[t,s]);const g=a=>{c({...t,enabled:a.target.checked,hasDuration:a.target.checked&&t.hasDuration})},E=a=>{c({...t,hasDuration:a.target.checked})},f=a=>{h(a.target.value);const o=parseInt(a.target.value,10);c({...t,value:isNaN(o)?0:o})},I=a=>{var o;c({...t,unit:(o=U(a.target.value))!=null?o:M.Hours})};return e.createElement(n,{container:!0,direction:"column",className:i.font},e.createElement(n,{item:!0},e.createElement(n,{container:!0,alignItems:"center"},e.createElement(n,{item:!0},e.createElement(u,{id:"enableCaching",disabled:r,checked:t.enabled,onChange:g,"data-testid":"enableCaching"})),e.createElement(n,{item:!0},e.createElement("label",{htmlFor:"enableCaching",className:i.label},"Enable caching")))),e.createElement(n,{item:!0},e.createElement(n,{container:!0,alignItems:"flex-start"},e.createElement(n,{item:!0},e.createElement(u,{id:"hasDuration",disabled:r||!t.enabled,checked:t.enabled&&t.hasDuration,onChange:E,"data-testid":"hasDuration"})),e.createElement(n,{item:!0,className:i.durationInput},e.createElement(d,{variant:"body1"},e.createElement("label",{htmlFor:"hasDuration",className:t.enabled?i.label:""},"Duration")),e.createElement(d,{variant:"caption"},"Set the maximum length that fact data is cached for"),e.createElement(n,{className:i.duration},e.createElement(n,{item:!0},e.createElement(C,{id:"every",type:"number",label:"For",name:"for",disabled:r||!t.hasDuration,value:b,onChange:f,error:!!(m!=null&&m.message),helperText:m==null?void 0:m.message,inputProps:{min:x,max:k},"data-testid":"forTextField",InputLabelProps:{className:r||!t.hasDuration?i.inputLabelDisabled:i.inputLabel}})),e.createElement(n,{item:!0},e.createElement(v,null,e.createElement(N,{className:r||!t.hasDuration?i.inputLabelDisabled:i.inputLabel,id:"duration-unit"},"Unit"),e.createElement(T,{labelId:"duration-unit",disabled:r||!t.hasDuration,value:t.unit,onChange:I,"data-testid":"unitSelect",inputProps:{className:i.unitInput},MenuProps:{classes:{list:i.unitMenu}}},S.map(a=>e.createElement(y,{key:a,value:a},a))))))))))};export{F as CacheConfigComponent};
2
+ //# sourceMappingURL=CacheConfigComponent.esm.js.map
@@ -0,0 +1,2 @@
1
+ import i from"lodash";import{TimeUnit as a}from"../Frequency/types.esm.js";import{toTimeUnit as s}from"../Frequency/util.esm.js";import"../Frequency/FrequencyComponent.esm.js";const u=()=>({enabled:!1,hasDuration:!1,unit:a.Days,value:1});function l(t){if(t){const{enabled:e,hasDuration:n}=t;if(e&&n){const{unit:o,value:r}=t;return{duration:{[o]:r}}}return e}}function m(t){var e;const n=u();if(!t)return n;if(typeof t=="boolean")return{...n,enabled:t};if(!i.isObject(t)||!("duration"in t))return n;const o=t.duration;if(!i.isObject(o))return n;const r=Object.entries(o);if(r.length===0)return n;const[f,c]=r[0];return{...n,enabled:!0,hasDuration:!0,unit:(e=s(f))!=null?e:a.Days,value:c}}export{u as defaultCacheConfig,l as mapCacheConfigToHumanDurationOrBoolean,m as mapToCacheConfig};
2
+ //# sourceMappingURL=utils.esm.js.map
@@ -0,0 +1,2 @@
1
+ import e from"react";import{useSearchParams as t}from"react-router-dom";import"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import{CampaignFormProvider as i}from"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{RESULTS_PER_PAGE as o}from"../../utils/filters.esm.js";import{CampaignListPage as p}from"../CampaignsTab/CampaignListPage/CampaignListPage.esm.js";import"../CampaignsTab/MutateCampaignsViews/CampaignForm.esm.js";import{AddCampaignView as n}from"../CampaignsTab/MutateCampaignsViews/AddCampaignView.esm.js";const g=()=>{const[m]=t(),r=m.get("campaignsPerPage"),a=r?parseInt(r,10):o;return e.createElement(i,null,e.createElement("div",null,e.createElement(p,{campaignsPerPage:a}),e.createElement(n,null)))};export{g as CampaignsPage};
2
+ //# sourceMappingURL=CampaignsPage.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{Typography as c}from"@material-ui/core";import{makeStyles as m}from"@material-ui/core/styles";import e from"react";import{DraggableChip as p}from"../../DraggableChip/DraggableChip.esm.js";const s=m(a=>({sectionLabel:{margin:a.spacing(2,0)},chipContainer:{display:"flex",flexDirection:"column",fontWeight:"bold",fontSize:a.typography.pxToRem(16),color:a.palette.grey[600],"& .Mui-disabled":{opacity:1}}})),g=({campaign:a})=>{var t,r,n;const i=s(),l=(n=(r=(t=a.track)==null?void 0:t.levels)==null?void 0:r[0].checks)!=null?n:[];return e.createElement(e.Fragment,null,e.createElement(c,{color:"textPrimary",variant:"h5",className:i.sectionLabel},"Campaign Checks"),e.createElement("div",{className:i.chipContainer},l.length?l.map(o=>e.createElement(p,{key:o.id,chip:o,disabled:!0})):e.createElement(c,{variant:"body1",color:"textSecondary",style:{alignSelf:"center"}},"There are no checks for this campaign.")))};export{g as CampaignChecks};
2
+ //# sourceMappingURL=CampaignChecks.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{Grid as r,Typography as l}from"@material-ui/core";import{makeStyles as o}from"@material-ui/core/styles";import a from"react";const n=o(e=>({detailRow:{marginBottom:e.spacing(1)},label:{fontWeight:"bold",color:e.palette.text.primary},value:{marginLeft:e.spacing(1)}})),m=({label:e,value:i})=>{const t=n();return a.createElement(r,{item:!0,xs:12,container:!0,className:t.detailRow,alignItems:"center"},a.createElement(l,{variant:"subtitle1",className:t.label},e,":"),a.createElement(l,{variant:"body1",display:"inline",className:t.value},i))};export{m as CampaignDetailRow};
2
+ //# sourceMappingURL=CampaignDetailRow.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{EntityRefLink as g}from"@backstage/plugin-catalog-react";import{Typography as u,Grid as i}from"@material-ui/core";import{makeStyles as E}from"@material-ui/core/styles";import e from"react";import{CampaignDetailRow as a}from"./CampaignDetailRow.esm.js";const d=E(t=>({innerContainer:{padding:t.spacing(0,1)},sectionLabel:{margin:t.spacing(2,0)},ownerLink:{"& span":{"&:hover":{textDecoration:"underline"}}}})),r=t=>new Date(t).toLocaleDateString("en-US",{month:"long",day:"numeric",year:"numeric"}),D=({campaign:t})=>{const n=d(),{name:o,description:m,ownerEntityRef:c,startDate:p,targetCompletionDate:s,supportChannel:l}=t;return e.createElement(e.Fragment,null,e.createElement(u,{color:"textPrimary",variant:"h5",className:n.sectionLabel},"Campaign Details"),e.createElement(i,{container:!0,className:n.innerContainer,spacing:2},e.createElement(i,{item:!0,container:!0,xs:12,spacing:0},e.createElement(a,{label:"Name",value:o}),e.createElement(a,{label:"Description",value:m}),e.createElement(a,{label:"Owner",value:e.createElement(g,{className:n.ownerLink,entityRef:c})}),l&&e.createElement(a,{label:"Support channel",value:l}),e.createElement(a,{label:"Start date",value:r(p)}),e.createElement(a,{label:"Target completion date",value:r(s)}))))};export{D as CampaignDetails,r as convertToReadableDate};
2
+ //# sourceMappingURL=CampaignDetails.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{Grid as a}from"@material-ui/core";import{makeStyles as c}from"@material-ui/core/styles";import e from"react";import{DndProvider as s}from"react-dnd";import{HTML5Backend as g}from"react-dnd-html5-backend";import{useParams as d}from"react-router-dom";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"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as f}from"../../../hooks/useNavigateBack.esm.js";import{useGetCampaign as E}from"../../../hooks/campaigns/useGetCampaign.esm.js";import{campaignsPageRouteRef as u}from"../../../routes.esm.js";import{EmptyCampaignState as C}from"../../EmptyState/CampaignEmptyState.esm.js";import{FullScreenDialog as v}from"../../FullScreenDialog/FullScreenDialog.esm.js";import{Loading as S}from"../../TechHealth/Loading/Loading.esm.js";import{CampaignChecks as x}from"./CampaignChecks.esm.js";import{CampaignDetails as P}from"./CampaignDetails.esm.js";import{CampaignMilestones as k}from"./CampaignMilestones.esm.js";import{CampaignProgress as y}from"./CampaignProgress.esm.js";const D=c(t=>({root:{flexGrow:1,padding:t.spacing(2)},progressSection:{minHeight:350,fontSize:t.typography.body1.fontSize}})),h=()=>{var t,r;const o=D(),{campaignId:i}=d(),{data:n,isLoading:p}=E(i!=null?i:""),m=(r=(t=n==null?void 0:n.edges)==null?void 0:t[0])==null?void 0:r.node,[l]=f(u);return p?e.createElement("div",{"data-testid":"loading-indicator"},e.createElement(S,null)):m?e.createElement(v,{title:"Campaign Details",open:!0,handleClose:l},e.createElement(s,{backend:g},e.createElement(a,{container:!0,className:o.root,spacing:3,direction:"column"},e.createElement(a,{item:!0,xs:12},e.createElement(P,{campaign:m})),e.createElement(a,{item:!0,xs:6},e.createElement(x,{campaign:m})),e.createElement(a,{item:!0,xs:12,className:o.progressSection},e.createElement(y,{campaign:m})),e.createElement(a,{item:!0,xs:12},e.createElement(k,{campaign:m}))))):e.createElement(C,null)};export{h as CampaignDetailsPage};
2
+ //# sourceMappingURL=CampaignDetailsPage.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{Typography as s,Grid as i,Divider as o}from"@material-ui/core";import{makeStyles as c}from"@material-ui/core/styles";import e from"react";import{CampaignDetailRow as l}from"./CampaignDetailRow.esm.js";const p=c(a=>({milestones:{flexGrow:1,padding:a.spacing(0,1)},sectionLabel:{margin:a.spacing(2,0)},divider:{margin:`${a.spacing(2)}px 0`}})),g=({campaign:a})=>{const t=p(),n=a.milestones;return e.createElement(e.Fragment,null,e.createElement(s,{variant:"h5",className:t.sectionLabel,color:"textPrimary"},"Campaign Milestones"),e.createElement(i,{container:!0,className:t.milestones,spacing:2},n.length?n.map((r,m)=>e.createElement(i,{item:!0,container:!0,xs:12,key:m,spacing:2},e.createElement(i,{item:!0,xs:12},e.createElement(l,{label:"Name",value:r.name}),e.createElement(l,{label:"Description",value:r.description}),e.createElement(l,{label:"Goal pass rate",value:`${r.targetPercent}%`}),m<n.length-1&&e.createElement(o,{className:t.divider})))):e.createElement(s,{variant:"body1",color:"textSecondary"},"There are no milestones for this campaign.")))};export{g as CampaignMilestones};
2
+ //# sourceMappingURL=CampaignMilestones.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{Typography as n}from"@material-ui/core";import{makeStyles as C}from"@material-ui/core/styles";import e from"react";import{useGetCampaignProgress as P}from"../../../hooks/campaigns/useGetCampaignProgress.esm.js";import"../../Pagination/Pagination.esm.js";import{useCursorPagination as f,CursorPagination as b}from"../../Pagination/CursorPagination.esm.js";import{ResultsTableSkeleton as v}from"../../ResultsTable/skeletons/ResultsTableSkeleton.esm.js";import{CampaignResultsTable as S}from"./CampaignResultsTable.esm.js";const i=C(r=>({sectionLabel:{margin:r.spacing(2,0)},paginationContainer:{margin:r.spacing(0,0,0,-4)}})),o=25,t=()=>{const r=i();return e.createElement(n,{variant:"h5",className:r.sectionLabel,color:"textPrimary"},"Campaign Progress")},k=({campaign:r})=>{const m=i(),{cursor:s,pageSize:l,...c}=f({defaultPageSize:o,label:"entitiesPerPage"}),{data:a,isLoading:g,isError:p}=P(r.id,l,s);if(g)return e.createElement(e.Fragment,null,e.createElement(t,null),e.createElement("div",{"data-testid":"progress-indicator"},e.createElement(v,{checkCount:1,levelCount:1})));if(p)return e.createElement(e.Fragment,null,e.createElement(t,null),e.createElement(n,{color:"error"},"Failed to load campaign progress."));if(!a)return e.createElement(e.Fragment,null,e.createElement(t,null),e.createElement(n,null,"No campaign progress available."));const{totalCount:u,endCursor:E,prevCursor:d}=a;return e.createElement(e.Fragment,null,e.createElement(t,null),e.createElement(S,{results:a,campaignTrackId:r.track.id}),e.createElement("div",{className:m.paginationContainer},e.createElement(b,{...c,totalCount:u,defaultPageSize:o,endCursor:E,prevCursor:d,pageSize:l,rowsPerPageOptions:[o],labelRowsPerPage:"Entities per page:"})))};export{k as CampaignProgress};
2
+ //# sourceMappingURL=CampaignProgress.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{useRouteRef as k}from"@backstage/core-plugin-api";import{entityRouteRef as C}from"@backstage/plugin-catalog-react";import{makeStyles as y,Grid as T}from"@material-ui/core";import{countBy as w}from"lodash";import m from"react";import{VariableSizeGrid as v}from"react-window";import{ResultState as p}from"../../../graphql/generated/index.esm.js";import{checkTitleCell as H,checkResultCell as A,entityHeaderCell as f,getCellRenderer as S}from"../../ResultsTable/virtualized/Cell.esm.js";import{CellWidths as g,calculateTableHeight as W,calculateTableWidth as x,RowHeights as N,findLongestRefTitle as E,calculateHeightForRefTitle as F}from"../../ResultsTable/virtualized/virtualizedTableUtils.esm.js";const d=25,G=(r,o,c,s)=>{var n;const l=[];for(const{check:e,results:a}of r)l.push({height:N.check,cells:[H(e.name,w(a.filter(({result:t})=>t!==p.NotApplicable),"result")),...o.flatMap(t=>{var h,u;if(t===void 0)return[];const R=(u=(h=a.find(({entityRef:b})=>b===t))==null?void 0:h.result)!=null?u:p.NotApplicable;return[A(s,e,t,R,c)]})]});const i=E(o!=null?o:[]);return l.push({height:Math.min(F((n=i.length)!=null?n:1),220),cells:[f(""),...o.map(e=>f(e||""))]}),l},M=y(r=>({table:{backgroundColor:r.palette.background.paper,borderCollapse:"collapse",whiteSpace:"nowrap",textAlign:"left"}})),z=({results:r,campaignTrackId:o})=>{const c=M(),s=k(C),{checks:n,entityRefs:l}=r,i=l.length>=d?l:[...l,...Array.from({length:d-l.length},()=>{})],e=G(n,i,s,o),a=S(e);return m.createElement(T,{item:!0,xs:12},m.createElement(v,{style:{overflow:"auto hidden"},className:c.table,columnCount:i.length+1,columnWidth:t=>t===0?g.programTitle:g.checkResult,rowCount:e.length,rowHeight:t=>e[t].height,height:W(e),width:x(i.length+1)},a))};export{z as CampaignResultsTable};
2
+ //# sourceMappingURL=CampaignResultsTable.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{useApi as M,featureFlagsApiRef as Y}from"@backstage/core-plugin-api";import{usePermission as q}from"@backstage/plugin-permission-react";import{makeStyles as z,Grid as i,Button as J}from"@material-ui/core";import{soundcheckCampaignCreatePermission as K}from"@spotify/backstage-plugin-soundcheck-common";import a,{useState as n,useEffect as Q}from"react";import U from"react-use/lib/useDebounce";import"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import{useCampaignFormContext as V}from"../../../contexts/CampaignFormContext.esm.js";import"../../../contexts/UserProvider.esm.js";import{useGetCampaignOwners as X}from"../../../hooks/campaigns/useGetCampaignOwners.esm.js";import{useGetCampaigns as Z}from"../../../hooks/campaigns/useGetCampaigns.esm.js";import{FilterDefault as d}from"../../../utils/filters.esm.js";import{EmptyState as _}from"../../EmptyState/EmptyState.esm.js";import{EmptyCampaignState as $}from"../../EmptyState/CampaignEmptyState.esm.js";import{Pagination as ee}from"../../Pagination/Pagination.esm.js";import{SearchFilters as ae}from"../../SearchFilters/SearchFilters.esm.js";import{CampaignNoResults as E}from"../MutateCampaignsViews/types/CampaignFormTypes.esm.js";import{CampaignsOverviewSkeleton as te}from"../skeletons/CampaignsOverviewSkeleton.esm.js";import{CampaignSummaryCard as re}from"./CampaignSummaryCard.esm.js";import ne from"./useArchiveConfirmationModal.esm.js";const ie=z(r=>({headerButtons:{display:"flex",gap:r.spacing(1),flexWrap:"nowrap",justifyContent:"end",alignItems:"end"},header:{padding:r.spacing(0,0,1)},container:{padding:r.spacing(3),gap:r.spacing(3)},createButton:{lineHeight:"1.25rem",paddingTop:r.spacing(1.5),paddingBottom:r.spacing(1.5)}})),oe=({campaignsPerPage:r,currentCursor:S})=>{const s=ie(),[u,w]=n(S),[p,x]=n(""),[y,b]=n(""),[f,A]=n(d.Alpha),[h,B]=n(d.Owner),[C,N]=n(d.Status),{data:F,isLoading:k}=X();U(()=>{b(p)},500,[p]);const{setShowAddModal:I}=V(),{loading:O,allowed:L}=q({permission:K}),{data:t,isLoading:g}=Z({ids:void 0,first:r,after:u,orderAlphabetical:f,searchByOwner:h,searchByName:y,searchByStatus:C}),[o,G]=n(t),l=o==null?void 0:o.edges.map(e=>e.node),[c,R]=n([]),P=M(Y),T=!P.getRegisteredFlags().find(e=>e.name==="soundcheck-enable-campaigns")||P.isActive("soundcheck-enable-campaigns"),D=!L||!T,W=e=>{A(e.target.value)},j=e=>{B(e.target.value)},H=e=>{N(e.target.value)};if(Q(()=>{t&&G(()=>{var e,v;return{totalCount:t.totalCount,edges:t.edges,pageInfo:{startCursor:t.pageInfo.startCursor,endCursor:t.pageInfo.endCursor,hasNextPage:(e=t==null?void 0:t.pageInfo.hasNextPage)!=null?e:!1,hasPreviousPage:(v=t==null?void 0:t.pageInfo.hasPreviousPage)!=null?v:!1}}})},[t]),!g&&!l)return a.createElement($,null);let m;return g?m=a.createElement(te,null):l!=null&&l.length?m=l.map(e=>a.createElement(i,{key:e.id,xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem","aria-label":"result"},a.createElement(ne,null,a.createElement(re,{campaign:e})))):m=a.createElement(i,{xs:12,item:!0,role:"listitem","aria-label":"result"},a.createElement(_,{title:E.title,description:E.description})),a.createElement(i,{container:!0,direction:"row",className:s.container},a.createElement(i,{container:!0,className:s.header},a.createElement(ae,{searchPlaceholder:"Search Available Campaigns",isLoading:g||k,searchTerm:p,setSearchTerm:x,filterAlpha:f,handleAlphabeticalFilterChange:W,filterOwner:h,handleOwnerFilterChange:j,filterStatus:C,handleStatusFilterChange:H,owners:F}),a.createElement(i,{item:!0,xs:2,className:s.headerButtons},!O&&a.createElement(J,{disabled:D,variant:"contained",color:"primary",onClick:()=>I(!0),className:s.createButton},"Create Campaign"))),a.createElement(i,{container:!0,spacing:4,role:"list","aria-label":"campaigns"},m),((o==null?void 0:o.pageInfo.hasNextPage)||(c==null?void 0:c.length)>0)&&a.createElement(i,{item:!0,xs:12},a.createElement(ee,{response:o,listingsPerPage:r,cursor:u,setCursor:w,prevCursors:c,setPrevCursors:R,labelPerPageDropdown:"Campaigns Per Page:",urlRoute:"campaigns?campaignsPerPage="})))};export{oe as CampaignListPage};
2
+ //# sourceMappingURL=CampaignListPage.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{EntityRefLink as n}from"@backstage/plugin-catalog-react";import{makeStyles as r,List as o,Typography as s,ListItem as i,Tooltip as c,ListItemIcon as m,ListItemText as l,Badge as d}from"@material-ui/core";import p from"@material-ui/icons/Group";import e from"react";const g=r(t=>({root:{position:"relative",height:"100%"},cardSection:{marginBottom:t.spacing(2)},listItem:{padding:0},listItemText:{margin:0},campaignDetails:{display:"flex",flexDirection:"column",gap:t.spacing(1)},archivedBadge:{"& span":{position:"relative",transform:"none",transformOrigin:"unset",backgroundColor:t.palette.action.disabledBackground}},iconContainer:{minWidth:"auto",paddingRight:t.spacing(1)},ownerLink:{"& span":{"&:hover":{textDecoration:"underline"}}}})),E=({campaign:t})=>{const a=g();return e.createElement(o,{dense:!0,disablePadding:!0,className:a.cardSection},e.createElement(s,{variant:"overline",color:"textSecondary"},"Campaign Details"),e.createElement("div",{className:a.campaignDetails},t.ownerEntityRef&&e.createElement(i,{disableGutters:!0,className:a.listItem},e.createElement(c,{title:"Owner"},e.createElement(m,{className:a.iconContainer},e.createElement(p,{color:"inherit",fontSize:"small"}))),e.createElement(l,{className:a.listItemText,primary:e.createElement(n,{entityRef:t.ownerEntityRef,className:a.ownerLink,hideIcon:!0})})),t.archived&&e.createElement(i,{disableGutters:!0,className:a.listItem},e.createElement(d,{badgeContent:"Archived",className:a.archivedBadge}))))};export{E as CampaignMetadata};
2
+ //# sourceMappingURL=CampaignMetadata.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{useRouteRef as c}from"@backstage/core-plugin-api";import{usePermission as l}from"@backstage/plugin-permission-react";import{soundcheckCampaignUpdatePermission as S,soundcheckCampaignDeletePermission as T}from"@spotify/backstage-plugin-soundcheck-common";import u,{useCallback as U}from"react";import{useNavigate as I}from"react-router-dom";import{v4 as b}from"uuid";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import{useArchiveCampaign as x}from"../../../hooks/campaigns/useArchiveCampaign.esm.js";import{useDeleteCampaign as N}from"../../../hooks/campaigns/useDeleteCampaign.esm.js";import{useCreateTrack as V}from"../../../hooks/tracks/useCreateTrack.esm.js";import{useConfirmationModal as j}from"../../../hooks/useConfirmationModal.esm.js";import{campaignDetailsRouteRef as q,campaignEditRouteRef as z}from"../../../routes.esm.js";import{SummaryCard as B}from"../../SummaryCard/SummaryCard.esm.js";import{CampaignMetadata as F}from"./CampaignMetadata.esm.js";import{useArchiveConfirmationModal as G}from"./useArchiveConfirmationModal.esm.js";const H=({campaign:e})=>{const{id:f,name:t,description:g,ownerEntityRef:h,archived:v}=e,C=c(q),R=c(z),r=I(),m=e.archived,{showModal:n}=j(),{showArchiveModal:w}=G(),{mutate:y}=V(),{mutate:s}=N(),{mutate:A}=x(),{loading:E,allowed:k}=l({permission:S,resourceRef:e.id}),{loading:d,allowed:p}=l({permission:T,resourceRef:e.id}),D=U(async()=>{await n({title:"Delete Campaign",message:`Are you sure you want to delete campaign ${e.name}?`})&&s(e.id)},[n,s,e.id,e.name]),M=()=>{var a,o;const{track:i}=e,L={id:b(),ownerEntityRef:i.ownerEntityRef,description:(a=i.description)!=null?a:"",name:i.name,documentationURL:i.documentationURL,type:"standard",levels:(o=i.levels)!=null?o:[],filter:i.filter};y(L)},P=async()=>{const{saveTrack:a,confirmed:o}=await w({title:"Archive Campaign",message:`Are you sure you want to archive campaign ${e.name}?`});o&&(a&&M(),A(e.id))};return u.createElement(B,{title:t!=null?t:f,description:g,children:(h||v)&&u.createElement(F,{campaign:e}),handleView:()=>r(C({campaignId:e.id})),handleEdit:!E&&k&&!m?()=>r(R({campaignId:e.id})):void 0,handleDelete:!d&&p?D:void 0,handleArchive:!d&&p&&!m?P:void 0})};export{H as CampaignSummaryCard};
2
+ //# sourceMappingURL=CampaignSummaryCard.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as T,Modal as B,Box as u,Typography as c,FormControlLabel as N,Checkbox as w,Button as f}from"@material-ui/core";import e,{createContext as M,useState as m,useRef as A,useCallback as s,useContext as P}from"react";const S=T(a=>({modalContent:{position:"absolute",display:"flex",flexDirection:"column",gap:a.spacing(1),top:"50%",left:"50%",transform:"translate(-50%, -50%)",backgroundColor:a.palette.background.paper},modalButtons:{display:"flex",justifyContent:"flex-end","& button":{width:"40%",maxWidth:"185px"},padding:a.spacing(2,3),borderTop:`1px solid ${a.palette.divider}`},checkbox:{marginBottom:a.spacing(2)},cancelButton:{color:a.palette.text.primary},modalText:{padding:a.spacing(2,3,0,3)},modalTop:{marginBottom:a.spacing(1)}})),v=M({showArchiveModal:()=>Promise.resolve({confirmed:!1,saveTrack:!1})}),L=a=>{const o=S(),[b,i]=m(!1),[r,h]=m(null),[l,d]=m(!1),n=A(),x=s(({title:t,message:C,error:E})=>(h({title:t,message:C,error:E}),d(!1),i(!0),new Promise(y=>{n.current=y})),[]),g=s(()=>{var t;(t=n.current)==null||t.call(n,{confirmed:!0,saveTrack:l}),i(!1)},[l]),p=s(()=>{var t;(t=n.current)==null||t.call(n,{confirmed:!1,saveTrack:l}),i(!1)},[l]),k=t=>{d(t.target.checked)};return e.createElement(v.Provider,{value:{showArchiveModal:x}},a.children,r&&e.createElement(B,{open:b,onClose:p,"aria-labelledby":"confirmation-modal-title","aria-describedby":"confirmation-modal-description"},e.createElement(u,{className:o.modalContent},e.createElement("div",{className:o.modalText},e.createElement("div",{className:o.modalTop},e.createElement(c,{id:"confirmation-modal-title",variant:"h6"},r.title),e.createElement(c,{id:"confirmation-modal-description",variant:"body1"},r.message)),e.createElement(u,{className:o.checkbox},e.createElement(N,{control:e.createElement(w,{"data-testid":"save-track-checkbox",checked:l,onChange:k,size:"small"}),label:"Create Track"}),e.createElement(c,{id:"confirmation-modal-check-box-description",variant:"subtitle2",color:"textSecondary"},"Create a track from this campaign if you wish to promote it to a long term health initiative."))),e.createElement("div",{className:o.modalButtons},!r.error&&e.createElement(f,{onClick:p,variant:"text","aria-label":"cancel",className:o.cancelButton},"Cancel"),e.createElement(f,{color:"primary",onClick:g,variant:"contained","aria-label":"confirm"},r.error?"Ok":"Confirm")))))},W=()=>P(v);export{L as default,W as useArchiveConfirmationModal};
2
+ //# sourceMappingURL=useArchiveConfirmationModal.esm.js.map
@@ -0,0 +1,2 @@
1
+ var i=(a=>(a.all="All",a.active="Active",a.archived="Archived",a))(i||{});export{i as CampaignStatus};
2
+ //# sourceMappingURL=CampaignTypes.esm.js.map
@@ -0,0 +1,2 @@
1
+ import m,{useEffect as p}from"react";import"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import{useCampaignFormContext as n}from"../../../contexts/CampaignFormContext.esm.js";import"../../../contexts/UserProvider.esm.js";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{useCreateCampaign as s}from"../../../hooks/campaigns/useCreateCampaign.esm.js";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{FullScreenDialog as c}from"../../FullScreenDialog/FullScreenDialog.esm.js";import{CampaignForm as l}from"./CampaignForm.esm.js";const d=()=>{const{hideModal:o,showAddModal:r,setIsLoading:t}=n(),{mutateAsync:i,isLoading:e}=s();return p(()=>{t(e)},[t,e]),m.createElement(c,{title:"Create a Campaign",open:r,handleClose:o},m.createElement(l,{onSave:async a=>{await i(a,{onSuccess:()=>o()})},onCancel:o}))};export{d as AddCampaignView};
2
+ //# sourceMappingURL=AddCampaignView.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{Typography as E}from"@material-ui/core";import e from"react";import{Controller as h}from"react-hook-form";import"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import{useCampaignFormContext as v}from"../../../contexts/CampaignFormContext.esm.js";import"../../../contexts/UserProvider.esm.js";import{formStyles as y}from"../../../utils/formStyles.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import{emptyFilters as F}from"../../Filter/types.esm.js";import{FilterComponent as L}from"../../Filter/FilterComponent.esm.js";import{FormStepper as k}from"../../FormStepper/FormStepper.esm.js";import{CampaignFormDescription as D}from"./CampaignFormDescription.esm.js";import{useCampaignForm as A}from"./hooks/useCampaignForm.esm.js";import{CampaignDetailsStep as M}from"./Steps/CampaignDetailsStep/CampaignDetailsStep.esm.js";import{CampaignTrackStep as N}from"./Steps/CampaignTrackStep.esm.js";import{CampaignMilestonesStep as O}from"./Steps/CampaignMilestonesStep.esm.js";import{StepNameMapping as x}from"./types/CampaignFormTypes.esm.js";import{CAMPAIGN_FIELDS as T}from"./utils/campaignFormUtils.esm.js";var c=(t=>(t.Details="Enter campaign details",t.Checks="Add checks",t.Entities="Choose the affected entities (Optional)",t.Milestones="Set campaign milestones",t))(c||{});const I=({onSave:t,onCancel:d,selectedCampaign:i})=>{const g=y(),{isLoading:r,isReadOnly:f}=v(),{control:o,handleSubmit:n,errors:a,trigger:C,getValues:S,onSubmit:m}=A(t,i),u=S().detailsStep.startDate,l=[{label:"Enter campaign details",content:()=>e.createElement(M,{control:o,isLoading:r,disabled:!1,errors:a.detailsStep,startDate:u})},{label:"Add checks",content:()=>e.createElement(N,{control:o,isLoading:r,disabled:!1,errors:a.tracksStep})},{label:"Choose the affected entities (Optional)",content:()=>e.createElement("div",{className:g.filters},e.createElement(E,{variant:"body2"},T.filter.description),e.createElement(h,{name:"filtersStep",control:o,render:({field:s})=>{var p;return e.createElement(L,{value:(p=s.value)!=null?p:F(),onChange:s.onChange})}}))},{label:"Set campaign milestones",content:()=>e.createElement(O,{control:o,isLoading:r,disabled:!1,errors:a.milestonesStep})}],b=i?[...Array(l.length).keys()]:[0];return e.createElement("form",{onSubmit:n(m)},e.createElement(k,{onClose:d,handleSubmit:n,trigger:C,onSubmit:m,initialVisited:b,stepNameMap:x,steps:l,isLoading:r,isReadOnly:f,saveButtonText:"Save Campaign",detailsComponent:e.createElement(D,null)}))};export{I as CampaignForm,c as CampaignStepLabel};
2
+ //# sourceMappingURL=CampaignForm.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{useRouteRef as i}from"@backstage/core-plugin-api";import{makeStyles as r,Typography as a,Button as m}from"@material-ui/core";import e from"react";import{useNavigate as s}from"react-router-dom";import{techHealthRouteRef as l}from"../../../routes.esm.js";const c=r(t=>({container:{display:"flex",gap:t.spacing(1),flexDirection:"column"},link:{fontWeight:"bold",padding:0,color:t.palette.text.primary,"&:hover":{textDecoration:"underline",transform:"none"}},list:{marginTop:0},listItem:{marginBottom:t.spacing(1)}})),p=()=>{const t=c(),n=i(l),o=s();return e.createElement("div",{className:t.container},e.createElement(a,{variant:"h6"},"Creating campaigns"),e.createElement(a,{variant:"body1"},"A Campaign is a focused short term initiative."),e.createElement(a,{variant:"body1"},"You can create campaigns, assign them to teams that own software components, and track them towards a completion milestone via the"," ",e.createElement(m,{variant:"text",color:"primary",onClick:()=>o(n()),className:t.link},"Tech Health")," ","page."),e.createElement(a,{variant:"body1"},"Some use cases for campaigns include:"),e.createElement("div",null,e.createElement("ul",{className:t.list},e.createElement("li",{className:t.listItem},e.createElement(a,{variant:"body1"},"When your organization wants to upgrade Spring libraries to use a specific version of Spring Boot.")),e.createElement("li",null,e.createElement(a,{variant:"body1"},"When your organization wants to remove unneeded data endpoints to save costs.")))))};export{p as CampaignFormDescription};
2
+ //# sourceMappingURL=CampaignFormDescription.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{useRouteRef as d}from"@backstage/core-plugin-api";import e,{useEffect as C}from"react";import{useNavigate as E,useParams as v}from"react-router-dom";import"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import{useCampaignFormContext as L}from"../../../contexts/CampaignFormContext.esm.js";import"../../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import{useUpdateCampaign as R}from"../../../hooks/campaigns/useUpdateCampaign.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import{useGetCampaign as S}from"../../../hooks/campaigns/useGetCampaign.esm.js";import{campaignsPageRouteRef as y}from"../../../routes.esm.js";import{EmptyCampaignState as F}from"../../EmptyState/CampaignEmptyState.esm.js";import{FullScreenDialog as w}from"../../FullScreenDialog/FullScreenDialog.esm.js";import{Loading as x}from"../../TechHealth/Loading/Loading.esm.js";import{CampaignForm as I}from"./CampaignForm.esm.js";const P=()=>{var t,o;const m=E(),a=d(y),{campaignId:i}=v(),{setIsLoading:r}=L(),{mutateAsync:g,isLoading:n}=R(),{data:p,isLoading:l}=S(i!=null?i:""),s=(o=(t=p==null?void 0:p.edges)==null?void 0:t[0])==null?void 0:o.node;if(C(()=>r(n),[r,n]),!l&&!s)return e.createElement(F,null);const c=async f=>{await g(f,{onSuccess:()=>m(a())})},u=()=>m(a());return e.createElement(w,{title:"Update Campaign",open:!0,handleClose:u},l?e.createElement(x,null):e.createElement(I,{onSave:c,onCancel:u,selectedCampaign:s}))};export{P as EditCampaignView};
2
+ //# sourceMappingURL=EditCampaignView.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as p,Typography as o,TextField as d}from"@material-ui/core";import e from"react";import{Controller as c}from"react-hook-form";import{CAMPAIGN_FIELDS as u}from"../../utils/campaignFormUtils.esm.js";const f=p(r=>({helperText:{marginLeft:0},container:{marginBottom:r.spacing(2)}})),g=({control:r,errors:t,isLoading:a,disabled:m})=>{const n=f(),{description:i}=u.details;return e.createElement("div",{className:n.container},e.createElement(o,{variant:"subtitle2"},i.name),e.createElement(o,{variant:"caption"},i.description),e.createElement(c,{name:"detailsStep.description",control:r,defaultValue:"",render:({field:s})=>{var l;return e.createElement(d,{...s,FormHelperTextProps:{className:n.helperText},variant:"outlined",multiline:!0,minRows:4,fullWidth:!0,placeholder:i.placeholder,disabled:a||m,type:"text",margin:"dense",error:!!(t!=null&&t.description),helperText:(l=t==null?void 0:t.description)==null?void 0:l.message})}}))};export{g as CampaignDescriptionField};
2
+ //# sourceMappingURL=CampaignDescriptionField.esm.js.map
@@ -0,0 +1,2 @@
1
+ import e from"react";import{CampaignDescriptionField as n}from"./CampaignDescriptionField.esm.js";import{CampaignNameField as l}from"./CampaignNameField.esm.js";import{CampaignOwnerField as m}from"./CampaignOwnerField.esm.js";import{CampaignScheduleField as d}from"./CampaignScheduleField/CampaignScheduleField.esm.js";import{CampaignSupportChannelField as s}from"./CampaignSupportChannelField.esm.js";const p=({control:r,errors:o,isLoading:i,disabled:a,startDate:t})=>e.createElement(e.Fragment,null,e.createElement(l,{control:r,errors:o,isLoading:i,disabled:a}),e.createElement(n,{control:r,errors:o,isLoading:i,disabled:a}),e.createElement(m,{control:r,errors:o,isLoading:i,disabled:a}),e.createElement(s,{control:r,errors:o,isLoading:i,disabled:a}),e.createElement(d,{control:r,errors:o,isLoading:i,disabled:a,startDate:t}));export{p as CampaignDetailsStep};
2
+ //# sourceMappingURL=CampaignDetailsStep.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as s,Typography as i,TextField as c}from"@material-ui/core";import e from"react";import{Controller as u}from"react-hook-form";import{CAMPAIGN_FIELDS as f}from"../../utils/campaignFormUtils.esm.js";const g=s(a=>({helperText:{marginLeft:0},container:{marginBottom:a.spacing(2)}})),h=({control:a,errors:t,isLoading:m,disabled:p})=>{const l=g(),{name:r}=f.details;return e.createElement("div",{className:l.container},e.createElement(i,{variant:"subtitle2"},r.name),e.createElement(i,{variant:"caption"},r.description),e.createElement(u,{name:"detailsStep.name",control:a,defaultValue:"",render:({field:d})=>{var n,o;return e.createElement(c,{...d,FormHelperTextProps:{className:l.helperText},variant:"outlined",fullWidth:!0,placeholder:r.placeholder,disabled:m||p,type:"text",margin:"dense",error:!!(t!=null&&t.name),helperText:(o=(n=t==null?void 0:t.name)==null?void 0:n.message)!=null?o:r.helperText})}}))};export{h as CampaignNameField};
2
+ //# sourceMappingURL=CampaignNameField.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as v,Typography as c}from"@material-ui/core";import{uniqBy as g}from"lodash";import e from"react";import"../../../../../contexts/TrackFormContext.esm.js";import"../../../../../contexts/CheckFormContext.esm.js";import"../../../../../contexts/CampaignFormContext.esm.js";import{useLoggedInUser as E}from"../../../../../contexts/UserProvider.esm.js";import{FormControlledSelect as y}from"../../../../FormControlledSelect/FormControlledSelect.esm.js";import{useOptions as h}from"../../../../GroupSelector/useOptions.esm.js";import{CAMPAIGN_FIELDS as w}from"../../utils/campaignFormUtils.esm.js";const x=v(t=>({helperText:{marginLeft:0},selectField:{display:"flex",flexDirection:"column",gap:t.spacing(1),marginBottom:t.spacing(2)},fieldContainer:{width:"250px"}})),C=({control:t,errors:l,isLoading:u,disabled:f})=>{var o,n;const i=x(),{owner:a}=w.details,{options:m}=h(),{user:s,userEntityRef:p}=E();let r=g(m==null?void 0:m.map(d=>({value:d.ref,label:d.name})),"value");return p&&(r=[{value:p,label:s==null?void 0:s.metadata.name},...r]),e.createElement("div",{className:i.selectField},e.createElement("header",null,e.createElement(c,{variant:"subtitle2"},a.name),e.createElement(c,{variant:"caption"},a.description)),e.createElement("div",{className:i.fieldContainer},e.createElement(y,{name:"detailsStep.ownerEntityRef",control:t,options:r,placeholder:"Owner",disabled:f||u,style:{width:"100%"},helperText:(n=(o=l==null?void 0:l.ownerEntityRef)==null?void 0:o.message)!=null?n:void 0})))};export{C as CampaignOwnerField};
2
+ //# sourceMappingURL=CampaignOwnerField.esm.js.map
@@ -0,0 +1,2 @@
1
+ import C from"@date-io/luxon";import{makeStyles as F,Typography as g}from"@material-ui/core";import{KeyboardDatePicker as D}from"@material-ui/pickers/DatePicker";import{MuiPickersUtilsProvider as b}from"@material-ui/pickers/MuiPickersUtilsProvider";import e,{useState as s}from"react";import{Controller as y}from"react-hook-form";import{CAMPAIGN_FIELDS as S}from"../../../utils/campaignFormUtils.esm.js";import{EndDateChips as O}from"./EndDateChips.esm.js";const I=F(t=>({helperText:{margin:t.spacing(.5,0)},selectFieldGroup:{display:"flex",flexDirection:"column",gap:t.spacing(2),marginBottom:t.spacing(2)},selectField:{display:"flex",flexDirection:"column",gap:t.spacing(1),padding:0},scheduleTitle:{fontWeight:"bold"},fieldContainer:{width:"250px"},select:{width:"100%",height:"100%",paddingRight:t.spacing(.5),"& button":{paddingTop:0,paddingBottom:0,"&:hover":{backgroundColor:"transparent"}}},dialog:{padding:0,"& [class*=MuiToolbar-root]":{backgroundColor:t.palette.background.paper,borderBottom:`1px solid ${t.palette.divider}`,"& [class*=MuiPickersToolbarText]":{color:t.palette.text.primary}},"& [class*=MuiDialogActions-root]":{borderTop:`1px solid ${t.palette.divider}`,padding:t.spacing(1),"& [class*=MuiButton-label]":{color:t.palette.text.primary}}}})),B=({control:t,errors:l,isLoading:d,disabled:p,startDate:x})=>{const a=I(),[E,c]=s(!1),[N,m]=s(!1),[P,T]=s(x),[M,f]=s(void 0),{startingDate:h,endingDate:v}=S.details;return e.createElement("div",{className:a.selectFieldGroup},e.createElement(g,{variant:"subtitle2",className:a.scheduleTitle},"Campaign schedule"),e.createElement("div",{className:a.selectField},e.createElement(g,{variant:"subtitle2"},h.name),e.createElement("div",{className:a.fieldContainer},e.createElement(y,{control:t,name:"detailsStep.startDate",render:({field:r})=>{var n,i;const{ref:k,...u}=r;return e.createElement(b,{utils:C},e.createElement(D,{inputRef:r.ref,...u,format:"MMMM dd, yyyy",autoOk:!0,FormHelperTextProps:{className:a.helperText},inputVariant:"outlined",className:a.select,error:!!(l!=null&&l.startDate),helperText:(i=(n=l==null?void 0:l.startDate)==null?void 0:n.message)!=null?i:void 0,onChange:o=>{T(o),r.onChange(o)},open:E,disabled:d||p,DialogProps:{PaperProps:{className:a.dialog}},margin:"dense",size:"small",InputProps:{readOnly:!0,placeholder:h.placeholder,onClick:()=>c(!0),className:a.select},onOpen:()=>c(!0),onClose:()=>c(!1)}))}}))),e.createElement("div",{className:a.selectField},e.createElement(g,{variant:"subtitle2"},v.name),e.createElement("div",{className:a.fieldContainer},e.createElement(y,{name:"detailsStep.targetCompletionDate",control:t,render:({field:r})=>{var n,i;const{ref:k,...u}=r;return e.createElement(b,{utils:C},e.createElement(D,{inputRef:r.ref,...u,disablePast:!0,format:"MMMM dd, yyyy",autoOk:!0,FormHelperTextProps:{className:a.helperText},inputVariant:"outlined",className:a.select,error:!!(l!=null&&l.targetCompletionDate),helperText:(i=(n=l==null?void 0:l.targetCompletionDate)==null?void 0:n.message)!=null?i:void 0,onChange:o=>{r.onChange(o)},open:N,disabled:d||p,DialogProps:{PaperProps:{className:a.dialog}},InputProps:{readOnly:!0,placeholder:v.placeholder,onClick:()=>m(!0),className:a.select,margin:"dense"},margin:"dense",onOpen:()=>{f(void 0),m(!0)},onClose:()=>m(!1),ToolbarComponent:o=>e.createElement(O,{props:o,isLoading:d,disabled:!!p,startDate:P,selectedDuration:M,setSelectedDuration:f})}))}}))))};export{B as CampaignScheduleField};
2
+ //# sourceMappingURL=CampaignScheduleField.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as d,Grid as n,Chip as h}from"@material-ui/core";import{DatePickerToolbar as g}from"@material-ui/pickers/DatePicker/DatePickerToolbar";import{DateTime as b}from"luxon";import a from"react";const u=d(e=>({chip:{backgroundColor:e.palette.primary.main,color:e.palette.primary.contrastText},chips:{width:"310px",marginLeft:e.spacing(1)},chipContainer:{paddingBottom:"0 !important",paddingTop:"0 !important",marginBottom:e.spacing(.75)},noPadding:{padding:e.spacing(0)}})),v=[{value:{days:7},label:"1 week"},{value:{days:14},label:"2 weeks"},{value:{month:1},label:"1 month"},{value:{months:3},label:"3 months"},{value:{months:6},label:"6 months"},{value:{year:1},label:"1 year"}],y=({props:e,startDate:l,selectedDuration:i,setSelectedDuration:m,isLoading:s,disabled:c})=>{const t=u();return a.createElement(n,{container:!0,direction:"column"},a.createElement(n,{item:!0,className:t.noPadding},a.createElement(g,{...e})),a.createElement(n,{container:!0,item:!0,className:t.chips},v.map(({value:o,label:r})=>a.createElement(n,{item:!0,className:t.chipContainer},a.createElement(h,{key:r,label:r,className:i===o?t.chip:void 0,color:i===o?"primary":void 0,size:"small",onClick:()=>{if(l){m(o);const p=b.fromISO(l.toString()).plus(o);e.onChange(p,!1)}},disabled:s||c})))))};export{y as EndDateChips};
2
+ //# sourceMappingURL=EndDateChips.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as s,Typography as l}from"@material-ui/core";import e from"react";import{FormTextInput as d}from"../../../../FormTextInput/FormTextInput.esm.js";import{CAMPAIGN_FIELDS as c}from"../../utils/campaignFormUtils.esm.js";const u=s(r=>({fieldContainer:{width:"250px"},container:{marginBottom:r.spacing(2)}})),v=({control:r,errors:n,isLoading:p,disabled:m})=>{var a,o;const i=u(),{support:t}=c.details;return e.createElement("div",{className:i.container},e.createElement(l,{variant:"subtitle2"},t.name),e.createElement(l,{variant:"caption"},t.description),e.createElement("div",{className:i.fieldContainer},e.createElement(d,{name:"detailsStep.supportChannel",control:r,placeholder:t.placeholder,disabled:m||p,variant:"outlined",margin:"dense",error:n==null?void 0:n.supportChannel,helperText:(o=(a=n==null?void 0:n.supportChannel)==null?void 0:a.message)!=null?o:void 0})))};export{v as CampaignSupportChannelField};
2
+ //# sourceMappingURL=CampaignSupportChannelField.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as R,Divider as A,Grid as h,Typography as c,TextField as f}from"@material-ui/core";import H from"@material-ui/icons/Remove";import e from"react";import{useFieldArray as I,Controller as T}from"react-hook-form";import{NoBorderButton as b}from"../../../NoBorderButton/NoBorderButton.esm.js";import{CAMPAIGN_FIELDS as M}from"../utils/campaignFormUtils.esm.js";const k=R(m=>({milestoneHeader:{display:"flex",alignItems:"center",marginBottom:m.spacing(1)},divider:{margin:"20px 0"},helperText:{marginLeft:0},selectContainer:{width:"250px"},section:{marginBottom:m.spacing(2)}})),B=({control:m,errors:l,isLoading:E,disabled:d})=>{const n=k(),{name:v,description:x,passrate:g}=M.milestones,{fields:y,append:N,remove:C}=I({control:m,name:"milestonesStep.milestones"}),F=()=>N({name:"",description:"",passRate:"0"});return e.createElement(e.Fragment,null,y.map((S,t)=>e.createElement("div",{key:S.id},t!==0&&e.createElement(A,{className:n.divider}),e.createElement(h,{container:!0,spacing:1,className:n.milestoneHeader},e.createElement(h,{item:!0,xs:!0},e.createElement(c,{variant:"subtitle2"},v.name),e.createElement(c,{variant:"caption"},v.description),e.createElement(T,{name:`milestonesStep.milestones.${t}.name`,control:m,defaultValue:"",render:({field:p})=>{var r,a,i,s,o,u;return e.createElement(f,{...p,FormHelperTextProps:{className:n.helperText},variant:"outlined",fullWidth:!0,placeholder:v.placeholder,disabled:E||d,type:"text",margin:"dense",error:!!((a=(r=l==null?void 0:l.milestones)==null?void 0:r[t])!=null&&a.name),helperText:(u=(o=(s=(i=l==null?void 0:l.milestones)==null?void 0:i[t])==null?void 0:s.name)==null?void 0:o.message)!=null?u:v.helperText})}})),t!==0&&!d&&e.createElement(h,{item:!0},e.createElement(b,{label:"Remove Milestone",startIcon:e.createElement(H,null),onClick:()=>C(t),disabled:d}))),e.createElement("div",{className:n.section},e.createElement(c,{variant:"subtitle2"},x.name),e.createElement(c,{variant:"caption"},x.description),e.createElement(T,{name:`milestonesStep.milestones.${t}.description`,control:m,defaultValue:"",render:({field:p})=>{var r,a,i,s,o;return e.createElement(f,{...p,FormHelperTextProps:{className:n.helperText},variant:"outlined",multiline:!0,minRows:4,fullWidth:!0,placeholder:x.placeholder,disabled:E||d,type:"text",margin:"dense",error:!!((a=(r=l==null?void 0:l.milestones)==null?void 0:r[t])!=null&&a.description),helperText:(o=(s=(i=l==null?void 0:l.milestones)==null?void 0:i[t])==null?void 0:s.description)==null?void 0:o.message})}})),e.createElement("div",{className:n.section},e.createElement(c,{variant:"subtitle2"},g.name),e.createElement(c,{variant:"caption"},g.description),e.createElement("div",{className:n.selectContainer},e.createElement(T,{name:`milestonesStep.milestones.${t}.passRate`,control:m,defaultValue:"",render:({field:p})=>{var r,a,i,s,o,u;return e.createElement(f,{...p,FormHelperTextProps:{className:n.helperText},variant:"outlined",fullWidth:!0,placeholder:g.placeholder,disabled:E||d,type:"number",margin:"dense",error:!!((a=(r=l==null?void 0:l.milestones)==null?void 0:r[t])!=null&&a.passRate),helperText:(u=(o=(s=(i=l==null?void 0:l.milestones)==null?void 0:i[t])==null?void 0:s.passRate)==null?void 0:o.message)!=null?u:void 0})}}))))),e.createElement(b,{label:"Add Milestone",onClick:()=>F(),disabled:d}))};export{B as CampaignMilestonesStep};
2
+ //# sourceMappingURL=CampaignMilestonesStep.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as x,FormControl as b,Typography as p,Grid as n}from"@material-ui/core";import{findIndex as v}from"lodash";import e,{useCallback as d}from"react";import{DndProvider as y}from"react-dnd";import{HTML5Backend as S}from"react-dnd-html5-backend";import{useFieldArray as T,Controller as D}from"react-hook-form";import{useGetChecksMap as N}from"../../../../hooks/tracks/useGetChecksMap.esm.js";import{ChecksErrors as L}from"../../../ChecksErrors/ChecksErrors.esm.js";import{DroppableInput as w}from"../../../DroppableInput/DroppableInput.esm.js";import{ChecksSection as I}from"../../../TrackForm/Steps/LevelsStep/ChecksSection/ChecksSection.esm.js";const M=x(t=>({columnHeader:{display:"flex",justifyContent:"space-between",alignItems:"center"},subtitle:{color:t.palette.text.primary,marginLeft:"-16px"},helperText:{fontSize:t.typography.subtitle2.fontSize,color:t.palette.textSubtle,marginBottom:t.spacing(1)},levelsContainer:{marginTop:"0",flexDirection:"column"},errorText:{marginTop:t.spacing(3),marginLeft:t.spacing(-4)},formContainer:{width:"100%"}})),H=({control:t,disabled:l,isLoading:m,errors:a})=>{const o=M(),{checkChips:h}=N(),{fields:c,remove:s,append:i}=T({control:t,name:"tracksStep.checks"}),f=new Set(c.flatMap(({name:r})=>r)),k=h.filter(r=>!f.has(r.name)),g=d(r=>{i(r)},[i]),u=d(r=>{const C=v(c,E=>E.id===r.id);s(C)},[s,c]);return e.createElement(D,{control:t,name:"tracksStep.checks",render:()=>e.createElement(b,{error:!!(a!=null&&a.checks),disabled:l||m,variant:"outlined",className:o.formContainer},e.createElement(p,{className:o.helperText},"Drag or right-click on a check to add it to the Campaign."),e.createElement(n,{item:!0,xs:12},e.createElement(n,{container:!0,spacing:4},e.createElement(y,{backend:S},e.createElement(n,{item:!0,xs:5},e.createElement(I,{chips:k,isLoading:m,disabled:l,label:"Campaign Checks",onContextMenuAdd:r=>i(r)})),e.createElement(n,{item:!0,xs:7},e.createElement(n,{container:!0},e.createElement(n,{item:!0,xs:12,className:o.columnHeader},e.createElement(p,{variant:"subtitle1",className:o.subtitle},"Included Checks")),e.createElement(n,{container:!0,item:!0,spacing:5,className:o.levelsContainer},e.createElement(w,{chips:c,onDelete:u,onDrop:g,error:!!(a!=null&&a.checks),placeholder:"Drag and drop checks here to include them in this level",disabled:l}))),(a==null?void 0:a.checks)&&e.createElement("div",{className:o.errorText},e.createElement(L,{checksErrors:a.checks})))))))})};export{H as CampaignTrackStep};
2
+ //# sourceMappingURL=CampaignTrackStep.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{zodResolver as c}from"@hookform/resolvers/zod";import{useMemo as f}from"react";import{useForm as S}from"react-hook-form";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"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as d}from"../../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{useGetChecksMap as C}from"../../../../hooks/tracks/useGetChecksMap.esm.js";import{DEFAULT_FORM_VALUES as h}from"../utils/campaignFormUtils.esm.js";import{campaignFormSchema as F}from"../utils/validation.esm.js";import{mapCampaignToFormValues as V,mapCampaignFormDataToCampaignInput as M}from"./utils.esm.js";const v=(e,o)=>{const m=f(()=>o?V(o):h,[o]),{control:t,handleSubmit:a,getValues:i,setValue:p,trigger:s,formState:{errors:n}}=S({defaultValues:m,mode:"onChange",resolver:c(F)}),{showModal:u}=d(),{checksMap:l}=C();return{control:t,handleSubmit:a,getValues:i,setValue:p,trigger:s,errors:n,onSubmit:async r=>{if(!await u({title:"Save Campaign",message:`Are you sure you want to save campaign: ${r.detailsStep.name}?`,error:!1}))return;const g=M(r,o,l);e(g)}}};export{v as useCampaignForm};
2
+ //# sourceMappingURL=useCampaignForm.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{v4 as C}from"uuid";import{mapInputFilterToFormFilters as S}from"../../../Filter/utils.esm.js";import"../../../Filter/FilterComponent.esm.js";import{mapTrackFormToInput as h}from"../../../TrackForm/utils/useTrackForm.esm.js";const D=({name:s,ownerEntityRef:t,description:r,targetCompletionDate:o,supportChannel:l,milestones:a,startDate:m,track:n})=>{var p;return{detailsStep:{name:s,description:r,ownerEntityRef:t,supportChannel:l,startDate:m,targetCompletionDate:o},tracksStep:{checks:(p=n==null?void 0:n.levels)==null?void 0:p[0].checks.map(e=>{var i;return{id:e.id,name:(i=e.name)!=null?i:e.id,description:e.description}})},filtersStep:S(n.filter),milestonesStep:{milestones:a.map(e=>({id:Number(e.id),name:e.name,description:e.description,passRate:e.targetPercent.toString()}))}}},R=(s,t,r)=>{var o;const{tracksStep:{checks:l},detailsStep:{name:a,description:m,ownerEntityRef:n,supportChannel:p,startDate:e,targetCompletionDate:i},filtersStep:d,milestonesStep:{milestones:u}}=s,c=h({detailsStep:{name:`${a}`,description:`The checks for the ${a} campaign.`,ownerEntityRef:n},levelsStep:{levels:[{name:"Level 1",checks:l,description:""}]},filtersStep:{filter:d}},r!=null?r:{},t==null?void 0:t.track);return{id:(o=t==null?void 0:t.id)!=null?o:C(),track:{...c,type:"campaign"},name:a,description:m,ownerEntityRef:n,supportChannel:p,startDate:e,targetCompletionDate:i,milestones:u.map(({id:f,name:g,description:k,passRate:v})=>({id:f,trackId:c.id,name:g,description:k,targetPercent:parseInt(v,10),targetCompletionDate:i}))}};export{R as mapCampaignFormDataToCampaignInput,D as mapCampaignToFormValues};
2
+ //# sourceMappingURL=utils.esm.js.map
@@ -0,0 +1,2 @@
1
+ const i={0:"detailsStep",1:"tracksStep",2:"filtersStep",3:"milestonesStep"};var t=(a=>(a.title="Create a campaign",a.description="A soundcheck campaign allows you to define a tech health goal, assign it to a team and monitor progress.",a.callToAction="Get started",a))(t||{}),e=(a=>(a.title="No campaigns found",a.description="No campaigns matched your search. Consider changing search term and filters.",a))(e||{});export{t as CampaignEmptyState,e as CampaignNoResults,i as StepNameMapping};
2
+ //# sourceMappingURL=CampaignFormTypes.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{CAMPAIGN_NAME_MAX_LENGTH as e,MILESTONE_NAME_MAX_LENGTH as t}from"./validation.esm.js";const a={detailsStep:{name:"",description:"",ownerEntityRef:"",supportChannel:"",startDate:null,targetCompletionDate:null},tracksStep:{checks:[]},filtersStep:{selectedKinds:[],selectedTypes:[],selectedLifecycles:[],selectedOwners:[],selectedSystems:[],selectedTags:[]},milestonesStep:{milestones:[{name:"",description:"",passRate:"0"}]}},n={details:{name:{name:"Campaign name",description:"Give your campaign a meaningful name so it's easy to remember it",helperText:`Max ${e} characters`,placeholder:"Example: Check for latest version of javascript and Readme files"},description:{name:"Campaign description",description:"Give your campaign a meaningful description so others can understand how to use it",placeholder:"Example: Ask my teams to check for the latest version of javascript and Readme files so that we can meet our quality standards this quarter"},owner:{name:"Campaign owner",description:"Add yourself or a team as the owner of this campaign"},support:{name:"Support channel (Optional)",description:"Add a Slack channel to receive updates about the campaign",placeholder:"Channel name"},startingDate:{name:"Starting date",placeholder:"Starting date"},endingDate:{name:"Ending date",placeholder:"Ending date"}},milestones:{name:{name:"Milestone name",description:"Give your milestone a meaningful name so it's easy to remember it",helperText:`Max ${t} characters`,placeholder:"Example: 80% passrate"},description:{name:"Milestone description",description:"Give your milestone a meaningful description so others can understand how to use it",placeholder:"Example: The track in my my campaign has a passrate of 80% or above"},passrate:{name:"Milestone passrate",description:"Enter the pass rate that your tracks have to meet",placeholder:"Example: 80%"}},filter:{description:'Setting the filters below will limit the scope of the Campaign so that only those Entities that match the filter will be monitored by the Campaign. As an example, choosing a "Kind" of "Component" will make this Campaign only apply to Entities whose Kind is indeed set to "Component". This would exclude Entities like Groups, Users, APIs, etc. from being impacted by the Campaign.'}};export{n as CAMPAIGN_FIELDS,a as DEFAULT_FORM_VALUES};
2
+ //# sourceMappingURL=campaignFormUtils.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{TrackCheckSchema as o,CampaignDetailsSchema as S}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod";import{CHECK_IS_REQUIRED_MSG as l,FIELD_IS_REQUIRED_MSG as a}from"../../../../utils/validation.esm.js";const r=0,s=100,p=100,i=100,m="Ending date must come after the Starting Date",E=e.strictObject({selectedKinds:e.string().array(),selectedTypes:e.string().array(),selectedLifecycles:e.string().array(),selectedOwners:e.string().array(),selectedSystems:e.string().array(),selectedTags:e.string().array()}),g=e.strictObject({checks:e.array(o).min(1,l)}),_=e.strictObject({id:e.number().optional(),name:e.string().min(1,a).max(i,`Input must be less than ${i} characters`),description:e.string().min(1,a),passRate:e.coerce.number().min(r,`Minimum pass rate is ${r}%`).max(s,`Maximum pass rate is ${s}%`)}),D=e.strictObject({milestones:e.array(_).min(1,a)}),n=e.coerce.string().nullable().refine(t=>t!==null,{message:a}),M=e.strictObject({startDate:n,targetCompletionDate:n}),T=({startDate:t,targetCompletionDate:c})=>t&&c?new Date(t)<new Date(c):!0,A=S.merge(M),d=t=>t.refine(T,{message:m,path:["targetCompletionDate"]}),y=e.strictObject({detailsStep:d(A),tracksStep:g,filtersStep:E,milestonesStep:D});export{p as CAMPAIGN_NAME_MAX_LENGTH,m as END_AFTER_START_DATE_MSG,s as MILESTONE_MAX_PASS_RATE,r as MILESTONE_MIN_PASS_RATE,i as MILESTONE_NAME_MAX_LENGTH,n as campaignDateTimeSchema,y as campaignFormSchema};
2
+ //# sourceMappingURL=validation.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{Grid as t}from"@material-ui/core";import{Skeleton as m}from"@material-ui/lab";import e from"react";const i=()=>e.createElement(t,{item:!0,container:!0,"data-testid":"campaigns-skeleton"},Array.from({length:6},(o,r)=>e.createElement(t,{key:`loading-${r}`,xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem"},e.createElement(m,{variant:"rect",height:385}))));export{i as CampaignsOverviewSkeleton};
2
+ //# sourceMappingURL=CampaignsOverviewSkeleton.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{useEntity as f}from"@backstage/plugin-catalog-react";import{styled as o,Accordion as E,AccordionSummary as b,AccordionDetails as y,makeStyles as h,Box as v}from"@material-ui/core";import R from"@material-ui/icons/ExpandMore";import e,{useRef as x}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{useCertificationDetailsForTrack as k}from"../../hooks/certifications/useCertificationDetailsForTrack.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{AlertPanel as I}from"../AlertPanel/AlertPanel.esm.js";import"../CertificationSidebar/CertificationSidebar.esm.js";import{CertificationSummary as L}from"../CertificationSidebar/CertificationSummary.esm.js";import{CertificationSidebarSkeleton as C}from"../CertificationSidebar/skeletons/CertificationSidebarSkeleton.esm.js";import"@material-ui/lab";import{CertificationLevel as S}from"../CertificationSidebar/CertificationLevel.esm.js";const T=o(E)(({theme:t})=>({margin:"0",border:`1px solid ${t.palette.divider}`,borderRadius:0,"&.Mui-expanded":{borderRadius:0},"&:first-child":{borderTopLeftRadius:0,borderTopRightRadius:0},"&:last-child":{borderBottomLeftRadius:0,borderBottomRightRadius:0},"&:not(:first-child)":{borderTop:`1px solid ${t.palette.divider}`},"&:not(:last-child)":{marginBottom:t.spacing(1)}})),A=o(({...t})=>e.createElement(b,{classes:{content:"content",expanded:"expanded"},...t}))(({theme:t})=>({borderRadius:0,paddingTop:0,paddingLeft:0,paddingRight:t.spacing(1),"& > .content":{margin:"0 !important",padding:"0 !important"},"& > .content.expanded":{margin:"0 !important",padding:"0 !important"}})),B=o(y)(()=>({margin:"0 !important",borderRadius:0,padding:0})),d=h(()=>({sidebar:{width:"100%"}})),D=({playlistId:t,trackId:i,checkId:m})=>{var a;const l=d(),{entity:c}=f(),p=x(null),{data:r,isLoading:s,isError:u}=k(c,i);if(u)return e.createElement("div",null,e.createElement(v,{padding:2},e.createElement(I,{severity:"error",title:"Error loading certification"})));if(s||!i)return e.createElement(C,null);if(!r)return null;const g=r.program.type==="campaign";return e.createElement(T,{ref:p,defaultExpanded:!0,elevation:0},e.createElement(A,{expandIcon:e.createElement(R,null),"aria-controls":"certification-content",id:"certification-summary"},e.createElement(L,{name:r.program.name,badge:(a=r.highestLevel)==null?void 0:a.badge,description:r.program.description,documentationUrl:r.program.documentationURL,trackType:r.program.type})),e.createElement(B,null,e.createElement("div",{className:l.sidebar},r==null?void 0:r.levels.map(n=>e.createElement(S,{key:n.ordinal,level:n,checkId:m,trackId:i,playlistId:t,isCampaign:g})))))};export{D as CertificationAccordion,d as useStyles};
2
+ //# sourceMappingURL=CertificationAccordion.esm.js.map
@@ -0,0 +1,2 @@
1
+ import t from"react";import{CheckResultSummaryList as m}from"./CheckResultSummaryList.esm.js";import{LevelSummary as n}from"./LevelSummary.esm.js";const o=({level:e,checkId:c,trackId:a,playlistId:l,isCampaign:i})=>{var r;return t.createElement(t.Fragment,null,!i&&t.createElement(n,{badge:e.badge,title:e.name,description:e.description}),t.createElement(m,{checks:(r=e.checks)!=null?r:[],playlistId:l,trackId:a,checkId:c}))};export{o as CertificationLevel};
2
+ //# sourceMappingURL=CertificationLevel.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{useEntity as d}from"@backstage/plugin-catalog-react";import{makeStyles as s,Box as f}from"@material-ui/core";import r 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{useCertificationDetailsForTrack as u}from"../../hooks/certifications/useCertificationDetailsForTrack.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{AlertPanel as g}from"../AlertPanel/AlertPanel.esm.js";import{CertificationLevel as y}from"./CertificationLevel.esm.js";import{CertificationSummary as k}from"./CertificationSummary.esm.js";import{CertificationSidebarSkeleton as v}from"./skeletons/CertificationSidebarSkeleton.esm.js";import"@material-ui/lab";const E=s(()=>({checks:{padding:0,margin:0,flex:1,listStyle:"none"}})),S=({playlistId:a,trackId:t,checkId:m})=>{var i;const{entity:n}=d(),{data:e,isLoading:l,isError:p}=u(n,t);if(p)return r.createElement("div",null,r.createElement(f,{padding:2},r.createElement(g,{severity:"error",title:"Error loading certification"})));if(l||!t)return r.createElement(v,null);if(!e)return null;const c=e.program.type==="campaign";return r.createElement("div",null,r.createElement(k,{name:e.program.name,badge:(i=e.highestLevel)==null?void 0:i.badge,description:e.program.description,documentationUrl:e.program.documentationURL,trackType:e.program.type}),e==null?void 0:e.levels.map(o=>r.createElement(y,{key:o.ordinal,level:o,checkId:m,trackId:t,playlistId:a,isCampaign:c})))};export{S as CertificationSidebar,E as useStyles};
2
+ //# sourceMappingURL=CertificationSidebar.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{MarkdownContent as i,Link as l}from"@backstage/core-components";import{makeStyles as p,Typography as s}from"@material-ui/core";import e from"react";import{CertificationBadge as d}from"../Badges/CertificationBadge.esm.js";const o=p(t=>({description:{padding:0,margin:0,display:"block","& p":{margin:0}},root:{padding:t.spacing(2),margin:0,display:"grid",gridTemplateColumns:"min-content auto",gridGap:t.spacing(2)},title:{fontSize:t.typography.pxToRem(18),fontWeight:700,lineHeight:1.235,marginBottom:"6px"},level:{textTransform:"uppercase",color:t.palette.text.secondary,fontWeight:700,letterSpacing:"1px"}}));function g({description:t,documentationUrl:a}){const n=o();return a?e.createElement("div",{className:n.description},e.createElement(i,{content:t}),e.createElement(l,{to:a},"Learn more")):e.createElement("div",{className:n.description},e.createElement(i,{content:t}))}const u=({name:t,badge:a,description:n,documentationUrl:c,trackType:m="standard"})=>{const r=o();return e.createElement("div",{className:r.root},e.createElement(d,{badge:a,trackType:m,size:"large"}),e.createElement("div",null,e.createElement(s,{className:r.title},t),n&&e.createElement(g,{description:n,documentationUrl:c})))};export{u as CertificationSummary,o as useStyles};
2
+ //# sourceMappingURL=CertificationSummary.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as s,Typography as i}from"@material-ui/core";import p from"classnames";import t from"react";import{Link as d}from"react-router-dom";import{CheckIcon as u}from"../CheckIcon/CheckIcon.esm.js";import{RelativeTime as f}from"../RelativeTime/RelativeTime.esm.js";const a=s(e=>({root:{display:"grid",width:"100%",gridTemplateColumns:"auto 1fr auto",gridColumnGap:e.spacing(1),padding:e.spacing(1),alignItems:"center","&.selected":{backgroundColor:e.palette.action.hover},"&:hover, &:active, &:focus":{backgroundColor:e.palette.action.hover}}})),h=({className:e,href:r,children:o})=>r?t.createElement(d,{to:r,className:e},o):t.createElement("div",{className:e},o),g=({result:e,name:r,timestamp:o,selected:m=!1,href:l})=>{const c=a(),n=p(c.root,{selected:m});return t.createElement(h,{href:l,className:n},t.createElement(u,{result:e}),t.createElement(i,{variant:"body2"},r),o?t.createElement(f,{timestamp:o}):null)};export{g as Check,a as useStyles};
2
+ //# sourceMappingURL=Check.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{useRouteRef as l}from"@backstage/core-plugin-api";import{makeStyles as p,Typography as n}from"@material-ui/core";import c from"react";import{certificationRouteRef as k,certificationPlaylistTrackCheckRouteRef as h}from"../../routes.esm.js";import{Check as y}from"./Check.esm.js";const i=p(e=>({noChecks:{padding:e.spacing(1)},checks:{padding:0,margin:0,flex:1,listStyle:"none"},checkItem:{borderBottom:`1px solid ${e.palette.divider}`,"&:last-of-type":{borderBottom:"0"},color:e.palette.text.primary,"& a":{color:e.palette.text.primary,textDecoration:"none"}}})),f=({checks:e,playlistId:o,trackId:r,checkId:m})=>{const a=i(),s=l(k),d=l(h);return e.length?c.createElement("ul",{className:a.checks},e.map(t=>c.createElement("li",{key:t.id,className:a.checkItem},c.createElement(y,{...t,selected:t.id===m,href:o?d({playlistId:o,trackId:r,checkId:t.id}):s({trackId:r,checkId:t.id})})))):c.createElement(n,{variant:"body2",className:a.noChecks},"No applicable checks at this level.")};export{f as CheckResultSummaryList,i as useStyles};
2
+ //# sourceMappingURL=CheckResultSummaryList.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{MarkdownContent as a}from"@backstage/core-components";import{makeStyles as o,Typography as p}from"@material-ui/core";import r from"react";import{LevelBadge as d}from"../Badges/LevelBadge.esm.js";import"../Badges/NoLevelBadge.esm.js";import"../Badges/CampaignBadge.esm.js";const i=o(e=>({wrapper:{backgroundColor:e.palette.background.default,color:e.palette.text.primary,fontSize:e.typography.caption.fontSize,minHeight:"auto",borderTop:`1px solid ${e.palette.divider}`,borderBottom:`1px solid ${e.palette.divider}`,padding:e.spacing(1),display:"grid",gridTemplateAreas:({badge:t})=>[`"${t?"badge":"title"} title"`,`"${t?".":"description"} description"`].join(" "),gridTemplateColumns:"auto 1fr"},title:{gridArea:"title",textTransform:"uppercase",fontWeight:"bold",color:e.palette.text.primary,fontSize:e.typography.body2.fontSize,paddingTop:e.spacing(.5),paddingBottom:e.spacing(.5),lineHeight:1},badge:{gridArea:"badge",marginRight:e.spacing(1)},description:{gridArea:"description",color:e.palette.text.primary,fontSize:e.typography.subtitle2.fontSize,"& p":{marginBlockStart:0,marginBlockEnd:0}}})),n=e=>{const t=i({badge:e.badge});return r.createElement("div",{className:t.wrapper},e.badge?r.createElement(d,{className:t.badge,badge:e.badge}):null,r.createElement(p,{className:t.title},e.title),e.description?r.createElement(a,{className:t.description,content:e.description}):null)};export{n as LevelSummary,i as useStyles};
2
+ //# sourceMappingURL=LevelSummary.esm.js.map
@@ -0,0 +1,2 @@
1
+ import e from"react";import{useStyles as n}from"../CertificationSidebar.esm.js";import{CertificationSummarySkeleton as m}from"./CertificationSummarySkeleton.esm.js";import{CheckSkeleton as t}from"./CheckSkeleton.esm.js";import{LevelSummarySkeleton as o}from"./LevelSummarySkeleton.esm.js";const a=()=>{const l=n();return e.createElement("div",null,e.createElement(m,null),new Array(3).fill(null).map((c,r)=>e.createElement(e.Fragment,{key:`skeleton-level-${r}`},e.createElement(o,null),e.createElement("ul",{className:l.checks},e.createElement(t,null),e.createElement(t,null),e.createElement(t,null)))))};export{a as CertificationSidebarSkeleton};
2
+ //# sourceMappingURL=CertificationSidebarSkeleton.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{Typography as a}from"@material-ui/core";import{Skeleton as t}from"@material-ui/lab";import e from"react";import{FadeIn as m}from"../../FadeIn/FadeIn.esm.js";import{useStyles as n}from"../CertificationSummary.esm.js";const i=({hideDescription:l=!1})=>{const r=n();return e.createElement(m,null,e.createElement("div",{className:r.root},e.createElement(t,{width:44,height:44}),e.createElement("div",null,e.createElement(a,{variant:"caption",className:r.level},e.createElement(t,{width:100})),e.createElement(a,{variant:"h4",className:r.title},e.createElement(t,{width:300})),!l&&e.createElement(a,{variant:"body2"},e.createElement(t,null)))))};export{i as CertificationSummarySkeleton};
2
+ //# sourceMappingURL=CertificationSummarySkeleton.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{Typography as o}from"@material-ui/core";import{Skeleton as t}from"@material-ui/lab";import e from"react";import{FadeIn as m}from"../../FadeIn/FadeIn.esm.js";import{useStyles as n}from"../Check.esm.js";const l=()=>{const r=n();return e.createElement(m,null,e.createElement("div",{className:r.root},e.createElement(t,{width:24,height:24}),e.createElement(o,{variant:"body2"},e.createElement(t,null)),e.createElement(t,{width:100,height:24})))};export{l as CheckSkeleton};
2
+ //# sourceMappingURL=CheckSkeleton.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{Typography as m}from"@material-ui/core";import{Skeleton as r}from"@material-ui/lab";import e from"react";import{FadeIn as o}from"../../FadeIn/FadeIn.esm.js";import{useStyles as l}from"../LevelSummary.esm.js";const a=()=>{const t=l({});return e.createElement(o,null,e.createElement("div",{className:t.wrapper},e.createElement(r,{className:t.title}),e.createElement(m,{className:t.description},e.createElement(r,null))))};export{a as LevelSummarySkeleton};
2
+ //# sourceMappingURL=LevelSummarySkeleton.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{useEntity as s}from"@backstage/plugin-catalog-react";import{makeStyles as c,Tab as d}from"@material-ui/core";import t from"react";import{Link as g}from"react-router-dom";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useCertificationDetailsForTrack as f}from"../../hooks/certifications/useCertificationDetailsForTrack.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{CertificationBadge as b}from"../Badges/CertificationBadge.esm.js";const o=c(e=>({root:{maxWidth:"80ch",textTransform:"uppercase",paddingTop:e.spacing(2),paddingBottom:e.spacing(2)},wrapper:{display:"inline-block",textOverflow:"ellipsis",whiteSpace:"nowrap",overflow:"hidden"},badge:{marginRight:e.spacing(1)}})),u=({id:e,name:i,badge:p,href:m,selected:n=!1})=>{const r=o(),{entity:l}=s(),{data:a}=f(l,e);return t.createElement(d,{className:r.root,classes:{wrapper:r.wrapper},value:e,label:t.createElement(t.Fragment,null,t.createElement(b,{badge:p,trackType:a==null?void 0:a.program.type,className:r.badge}),i),component:g,to:m,selected:n})};export{u as CertificationTab,o as useStyles};
2
+ //# sourceMappingURL=CertificationTab.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{useRouteRef as s}from"@backstage/core-plugin-api";import{useEntity as y}from"@backstage/plugin-catalog-react";import{Tabs as g}from"@material-ui/core";import m from"react";import{useAllCertifications as b}from"../../hooks/certifications/useAllCertifications.esm.js";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/catalog-model";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{usePlaylists as k}from"../../hooks/playlists/usePlaylists.esm.js";import{certificationPlaylistRouteRef as C,certificationTrackRouteRef as h}from"../../routes.esm.js";import{CertificationTab as I}from"./CertificationTab.esm.js";import{PlaylistCertificationTab as R}from"./PlaylistCertificationTab.esm.js";import{CertificationTabsSkeleton as T}from"./skeletons/CertificationTabsSkeleton.esm.js";function v(n=[],t=[],a,l){if(a){const r=n.findIndex(o=>o.id===a);return r<0?!1:r}const e=t.findIndex(r=>r.program.id===l);return e<0?!1:e+n.length}const E=({playlistId:n,trackId:t})=>{const{entity:a}=y(),{isLoading:l,data:e}=b(a),{isLoading:r,data:o}=k(a),c=s(C),d=s(h);if(r||l||!t)return m.createElement(T,null);const u=v(o,e,n,t);return m.createElement(g,{value:u,indicatorColor:"primary","aria-label":"Certifications",variant:"scrollable"},(o==null?void 0:o.length)&&o.map(({id:i,name:f})=>m.createElement(R,{key:i,id:i,name:f,selected:i===t,href:c({playlistId:i})})),e&&e.filter(({program:{type:i}})=>i!=="playlist").map(({program:{id:i,name:f},highestLevel:p})=>m.createElement(I,{key:i,id:i,name:f,badge:p==null?void 0:p.badge,selected:i===t,href:d({trackId:i})})))};export{E as CertificationTabs};
2
+ //# sourceMappingURL=CertificationTabs.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{stringifyEntityRef as u}from"@backstage/catalog-model";import{useEntity as v}from"@backstage/plugin-catalog-react";import{makeStyles as I,Paper as h,Divider as g}from"@material-ui/core";import e from"react";import{useParams as k}from"react-router-dom";import{useAllCertifications as C}from"../../hooks/certifications/useAllCertifications.esm.js";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{usePlaylists as P}from"../../hooks/playlists/usePlaylists.esm.js";import{AlertPanel as s}from"../AlertPanel/AlertPanel.esm.js";import{CertificationSidebar as b}from"../CertificationSidebar/CertificationSidebar.esm.js";import"../CertificationSidebar/CertificationSummary.esm.js";import"@material-ui/lab";import"../CertificationSidebar/Check.esm.js";import"../CertificationSidebar/LevelSummary.esm.js";import{isDarkTheme as w}from"../Charts/chartUtils.esm.js";import{CheckDetails as N}from"../CheckDetails/CheckDetails.esm.js";import{NoCertifications as R}from"../EmptyState/EmptyState.esm.js";import{LevelUpParty as $}from"../LevelUpParty/LevelUpParty.esm.js";import{RefetchingIndicator as x}from"../RefetchingIndicator/RefetchingIndicator.esm.js";import{CertificationTabs as D}from"./CertificationTabs.esm.js";import{PlaylistComponent as S}from"./Playlist/PlaylistComponent.esm.js";const p=I(t=>({paper:{overflow:"hidden",position:"relative",border:w(t)?`1px solid ${t.palette.divider}`:void 0},view:{display:"grid",gridTemplateColumns:"1fr 2fr"},sidebar:{borderRight:`1px solid ${t.palette.divider}`}})),T=()=>{const{playlistId:t,trackId:r,checkId:m}=k(),a=p(),{entity:i}=v(),{isError:c,isFetched:d,data:l}=C(i),{isError:f,data:n}=P(i);if(c||f)return e.createElement(s,{severity:"error",title:"Error loading certifications"});const o=t&&(n==null?void 0:n.find(E=>E.id===t));if(t&&!o)return e.createElement(s,{severity:"error",title:"Playlist ${playlistId} not found."});if(d&&!(l!=null&&l.length))return e.createElement(R,null);const y=i?u(i):void 0;return e.createElement(h,{className:a.paper},e.createElement(x,null),e.createElement(D,{playlistId:t,trackId:r}),e.createElement(g,null),o&&e.createElement(S,{playlist:o,entityRef:y}),!o&&r&&e.createElement("div",{"data-testid":"soundcheck-certification-view",className:a.view},e.createElement("div",{className:a.sidebar},e.createElement(b,{trackId:r,checkId:m})),e.createElement(N,{programId:r,checkId:m}),e.createElement($,{programId:r})))};export{T as CertificationsPage,p as useStyles};
2
+ //# sourceMappingURL=CertificationsPage.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as l}from"@material-ui/core";import t from"react";import{useParams as d}from"react-router-dom";import{CertificationAccordion as n}from"../../CertificationAccordion/CertificationAccordion.esm.js";import{CheckDetails as c}from"../../CheckDetails/CheckDetails.esm.js";import{PlaylistCertificationProvider as s}from"./PlaylistContext.esm.js";import{PlaylistSummary as p}from"./PlaylistSummary.esm.js";const g=l(e=>({root:{margin:0,display:"grid",gridTemplateColumns:"1fr",backgroundColor:e.palette.background.default},header:{backgroundColor:e.palette.background.paper,borderBottom:`1px solid ${e.palette.divider}`},section:{backgroundColor:e.palette.background.paper,border:`1px solid ${e.palette.divider}`,padding:0,marginTop:e.spacing(1),marginBottom:e.spacing(1),marginLeft:0,marginRight:e.spacing(1)},twoColumns:{display:"grid",gridTemplateColumns:"1fr 2fr"},sidebar:{display:"grid",gridTemplateColumns:"1fr",margin:e.spacing(1)}})),f=({playlist:e,entityRef:r})=>{const a=g(),{trackId:m,checkId:i}=d();return t.createElement("div",{className:a.root},t.createElement(s,{entityRef:r},t.createElement("div",{className:a.header},t.createElement(p,{playlist:e,entityRef:r})),t.createElement("div",{className:a.twoColumns},t.createElement("div",{className:a.sidebar},e.trackIds.map(o=>t.createElement(n,{key:o,playlistId:e.id,trackId:o,checkId:i}))),t.createElement("div",{className:a.section},t.createElement(c,{programId:m,checkId:i})))))};export{f as PlaylistComponent};
2
+ //# sourceMappingURL=PlaylistComponent.esm.js.map
@@ -0,0 +1,2 @@
1
+ import n,{createContext as m,useContext as s}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{useCertificationDetails as a}from"../../../hooks/certifications/useCertificationDetails.esm.js";import"@backstage/plugin-catalog-react";import"../../../hooks/useSoundcheckAlert.esm.js";import"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";const i=m(void 0),c=()=>{const t=s(i);if(!t)throw new Error("useAPlaylistCertificationContext must be used within an PlaylistCertificationProvider");return t},l=t=>{const{children:r,entityRef:e}=t,o=a(e);return n.createElement(i.Provider,{value:o},r)};export{l as PlaylistCertificationProvider,c as usePlaylistCertificationContext};
2
+ //# sourceMappingURL=PlaylistContext.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{LinearGauge as u}from"@backstage/core-components";import{makeStyles as f,useTheme as v,Typography as y}from"@material-ui/core";import s from"lodash";import t,{useMemo as h}from"react";import{ResultState as d}from"../../../graphql/generated/index.esm.js";import{LevelBadge as k}from"../../Badges/LevelBadge.esm.js";import{NoLevelBadge as x}from"../../Badges/NoLevelBadge.esm.js";import"../../Badges/CampaignBadge.esm.js";import{usePlaylistCertificationContext as N}from"./PlaylistContext.esm.js";const E=(o,r)=>{if(r)return r.filter(e=>o.trackIds.includes(e.program.id)).map(e=>{const i=s.sumBy(e.levels,l=>s.filter(l.checks,{result:d.Passed}).length),m=s.sumBy(e.levels,l=>s.reject(l.checks,{result:d.NotApplicable}).length),a=m===0?0:i/m;return{id:e.program.id,name:e.program.name,checkPassRate:a}})},p=f(()=>({root:{margin:0,width:"250px"},trackItem:{display:"flex",flexDirection:"column",alignItems:"flex-start"},badgeAndName:{display:"flex",flexDirection:"row",alignItems:"center"},trackName:{marginLeft:"8px"}})),P=({playlist:o})=>{const r=p(),{data:e}=N(),i=v(),m=h(()=>E(o,e),[e,o]);return t.createElement("div",{className:r.root},m&&m.map(a=>{var l,n;const c=(n=(l=e==null?void 0:e.find(g=>g.program.id===a.id))==null?void 0:l.highestLevel)==null?void 0:n.badge;return t.createElement("div",{className:r.trackItem,key:a.id},t.createElement("div",{className:r.badgeAndName},c?t.createElement(k,{badge:c}):t.createElement(x,null),t.createElement(y,{variant:"caption",color:"textSecondary",className:r.trackName},a.name)),t.createElement("div",{style:{width:"100%",marginBottom:"8px"}},t.createElement(u,{value:a.checkPassRate,getColor:()=>i.palette.status.ok})))}))};export{P as PlaylistProgress,p as useStyles};
2
+ //# sourceMappingURL=PlaylistProgress.esm.js.map