@spotify/backstage-plugin-soundcheck 0.14.1 → 0.14.3

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 (105) hide show
  1. package/CHANGELOG.md +35 -12
  2. package/dist/alpha.d.ts +43 -14
  3. package/dist/api.esm.js +1 -1
  4. package/dist/components/AreaChart/AreaChart.esm.js +2 -0
  5. package/dist/components/AreaChart/ChartTooltip.esm.js +2 -0
  6. package/dist/components/AreaChart/Legend.esm.js +2 -0
  7. package/dist/components/AreaChart/LegendItem.esm.js +2 -0
  8. package/dist/components/AreaChart/utils.esm.js +2 -0
  9. package/dist/components/CacheConfig/utils.esm.js +1 -1
  10. package/dist/components/CampaignDetailsPage/CampaignDetailRow.esm.js +1 -1
  11. package/dist/components/CampaignDetailsPage/CampaignDetails.esm.js +1 -1
  12. package/dist/components/CampaignForm/Steps/CampaignDetailsStep/CampaignOwnerField.esm.js +1 -1
  13. package/dist/components/CampaignInsightsPage/CampaignInsightsPage.esm.js +2 -0
  14. package/dist/components/CampaignInsightsPage/CampaignStatusHistoryTile.esm.js +2 -0
  15. package/dist/components/CampaignInsightsPage/CampaignStatusTile.esm.js +2 -0
  16. package/dist/components/CampaignInsightsPage/DaysRemainingTile.esm.js +2 -0
  17. package/dist/components/CampaignsPage/CampaignListPage/CampaignMetadata.esm.js +1 -1
  18. package/dist/components/CampaignsPage/CampaignListPage/CampaignSummaryCard.esm.js +1 -1
  19. package/dist/components/CategoryBar/CategoryBar.esm.js +2 -0
  20. package/dist/components/CertificationSidebar/Check.esm.js +1 -1
  21. package/dist/components/CertificationSidebar/CheckResultSummaryList.esm.js +1 -1
  22. package/dist/components/CheckCard/CheckCard.esm.js +1 -1
  23. package/dist/components/CheckDetails/CheckDetails.esm.js +1 -1
  24. package/dist/components/CheckDetails/CollapseRow.esm.js +2 -0
  25. package/dist/components/CheckDetails/FixMeDialog.esm.js +2 -0
  26. package/dist/components/CheckDetails/OngoingTaskComponent.esm.js +2 -0
  27. package/dist/components/CheckDetails/ResultStateBox.esm.js +1 -1
  28. package/dist/components/CheckDetails/ReviewStateComponent.esm.js +2 -0
  29. package/dist/components/CheckDryRun/CheckDryRunDetails.esm.js +1 -1
  30. package/dist/components/CheckForm/FormFields/RuleInput/Expressions/ExpressionTypeToggle.esm.js +1 -1
  31. package/dist/components/CheckForm/FormFields/TeamDetailsInput/TeamDetailsInput.esm.js +1 -1
  32. package/dist/components/CheckPage/FilterBar/FilterBar.esm.js +1 -1
  33. package/dist/components/ChecksPage/CheckListPage/CheckMetadata.esm.js +1 -1
  34. package/dist/components/ChecksPage/CheckListPage/CheckSummaryCard.esm.js +1 -1
  35. package/dist/components/CollectorPage/Configurators/Common/FactCollectionConfig.esm.js +1 -1
  36. package/dist/components/CollectorPage/Configurators/Configurator.esm.js +1 -1
  37. package/dist/components/CollectorPage/Configurators/DataDog/DataDogConfigurator.esm.js +1 -1
  38. package/dist/components/CollectorPage/Configurators/Github/GithubConfigurator.esm.js +1 -1
  39. package/dist/components/CollectorPage/Configurators/Gitlab/GitlabConfigurator.esm.js +2 -0
  40. package/dist/components/CollectorPage/Configurators/Gitlab/utils.esm.js +2 -0
  41. package/dist/components/CollectorPage/Configurators/Jira/IssuesSearchFactDetailsComponent.esm.js +1 -1
  42. package/dist/components/CollectorPage/Configurators/Jira/JiraConfigurator.esm.js +1 -1
  43. package/dist/components/CollectorPage/Configurators/Kubernetes/KubernetesConfigurator.esm.js +1 -1
  44. package/dist/components/CollectorPage/Configurators/Kubernetes/KubernetesFactDetails.esm.js +2 -0
  45. package/dist/components/CollectorPage/Configurators/Kubernetes/types.esm.js +2 -0
  46. package/dist/components/CollectorPage/Configurators/Kubernetes/utils.esm.js +1 -1
  47. package/dist/components/CollectorPage/Configurators/Kubernetes/validation.esm.js +2 -0
  48. package/dist/components/CollectorPage/Configurators/NewRelic/NewRelicConfigurator.esm.js +2 -0
  49. package/dist/components/CollectorPage/Configurators/NewRelic/utils.esm.js +2 -0
  50. package/dist/components/CollectorPage/Configurators/PagerDuty/IncidentsFactDetailsComponent.esm.js +1 -1
  51. package/dist/components/CollectorPage/Configurators/PagerDuty/PagerDutyConfigurator.esm.js +1 -1
  52. package/dist/components/CollectorPage/Configurators/SCM/ScmConfigurator.esm.js +1 -1
  53. package/dist/components/CollectorPage/Configurators/SCM/utils.esm.js +1 -1
  54. package/dist/components/CollectorPage/Configurators/SonarQube/MeasuresFactDetailsInput.esm.js +1 -1
  55. package/dist/components/CollectorPage/Configurators/SonarQube/MetricsInput.esm.js +1 -1
  56. package/dist/components/CollectorPage/Configurators/SonarQube/SonarQubeConfigurator.esm.js +1 -1
  57. package/dist/components/CollectorsPage/CollectorListPage/CollectorLogo.esm.js +1 -1
  58. package/dist/components/CollectorsPage/CollectorListPage/CollectorSummaryCard.esm.js +1 -1
  59. package/dist/components/DroppableInput/DroppableInput.esm.js +1 -1
  60. package/dist/components/EntityContent/EntityContent.esm.js +1 -1
  61. package/dist/components/Filter/FilterPreviewTable/EntityTableColumns.esm.js +2 -0
  62. package/dist/components/Filter/FilterPreviewTable/FilterPreviewTable.esm.js +1 -1
  63. package/dist/components/FormControlledTextField/FormControlledTextField.esm.js +2 -0
  64. package/dist/components/FormFieldLabel/FormFieldLabel.esm.js +1 -1
  65. package/dist/components/GroupSelector/GroupSelector.esm.js +1 -1
  66. package/dist/components/OverviewTable/resultsTableUtils.esm.js +1 -1
  67. package/dist/components/PassRateGrid/PassRateMetadata.esm.js +1 -1
  68. package/dist/components/Router.esm.js +1 -1
  69. package/dist/components/RoutingPage/RoutingPage.esm.js +1 -1
  70. package/dist/components/SoundcheckHeader/SoundcheckHeaderContext.esm.js +1 -1
  71. package/dist/components/SoundcheckHeader/useHeader.esm.js +1 -1
  72. package/dist/components/TechHealth/Filters/useFacetOptions.esm.js +1 -1
  73. package/dist/components/TrackForm/Steps/TrackDetailsStep/TrackOwnerSelect/TrackOwnerSelect.esm.js +1 -1
  74. package/dist/components/TrackPage/FilterBar/FilterBar.esm.js +1 -1
  75. package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js +1 -1
  76. package/dist/components/TrackPage/TrackPage.esm.js +1 -1
  77. package/dist/components/TrackPage/TrackProgressCard.esm.js +1 -1
  78. package/dist/contexts/UserProvider.esm.js +1 -1
  79. package/dist/graphql/generated/index.esm.js +35 -27
  80. package/dist/hooks/aggregations/useAggregatedTrackPassRateTrend.esm.js +1 -1
  81. package/dist/hooks/campaigns/useArchiveCampaign.esm.js +1 -1
  82. package/dist/hooks/campaigns/useCreateCampaign.esm.js +1 -1
  83. package/dist/hooks/campaigns/useDeleteCampaign.esm.js +1 -1
  84. package/dist/hooks/campaigns/useGetCampaign.esm.js +1 -1
  85. package/dist/hooks/checks/useCreateCheck.esm.js +1 -1
  86. package/dist/hooks/checks/useDeleteCheck.esm.js +1 -1
  87. package/dist/hooks/checks/useExecutableChecks.esm.js +2 -0
  88. package/dist/hooks/checks/useExecuteCheck.esm.js +1 -1
  89. package/dist/hooks/checks/useUpdateCheck.esm.js +1 -1
  90. package/dist/hooks/collectors/useUpdateCollectorConfig.esm.js +1 -1
  91. package/dist/hooks/graphqlKeys.esm.js +1 -1
  92. package/dist/hooks/groups/useGroupOptions.esm.js +2 -0
  93. package/dist/hooks/tracks/useCreateTrack.esm.js +1 -1
  94. package/dist/hooks/tracks/useDeleteTrack.esm.js +1 -1
  95. package/dist/images/new-relic-rgb.svg +1 -0
  96. package/dist/images/new-relic-white.svg +1 -0
  97. package/package.json +40 -24
  98. package/alpha/package.json +0 -7
  99. package/dist/components/CampaignDetailsPage/CampaignChecks.esm.js +0 -2
  100. package/dist/components/CampaignDetailsPage/CampaignDetailsPage.esm.js +0 -2
  101. package/dist/components/CampaignDetailsPage/CampaignMilestones.esm.js +0 -2
  102. package/dist/components/CampaignDetailsPage/CampaignProgress.esm.js +0 -2
  103. package/dist/components/CampaignDetailsPage/CampaignResultsTable.esm.js +0 -2
  104. package/dist/components/GroupSelector/useOptions.esm.js +0 -2
  105. package/dist/hooks/campaigns/useGetCampaignProgress.esm.js +0 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,40 @@
1
1
  # @spotify/backstage-plugin-soundcheck
2
2
 
3
+ ## 0.14.3
4
+
5
+ ### Patch Changes
6
+
7
+ - Update to Backstage `v1.33.3`
8
+ - Updated dependency `uuid` to `^11.0.0`.
9
+ - Updated dependency `@types/node` to `^22.0.0`.
10
+ - Updated dependency `git-url-parse` to `^16.0.0`.
11
+ - Fix front end caching issue where updates sometimes did not reflect in the UI.
12
+ - Links on Entity Table in the Forms now open in a new tab so users don't lose progress if clcking on them accidentally.
13
+ - Fixes an error that could prevent the Sonarqube page from loading with incomplete configurations supplied from yaml files.
14
+ - Fixes a potential error on the SCM configuration page.
15
+ - Add Custom Resource Definition to K8S Integration UI.
16
+ - Updated dependencies
17
+ - Updated dependencies
18
+ - Updated dependencies
19
+ - Updated dependencies
20
+ - @spotify/backstage-plugin-core@0.8.3
21
+ - @spotify/backstage-plugin-soundcheck-common@0.14.3
22
+
23
+ ## 0.14.2
24
+
25
+ ### Patch Changes
26
+
27
+ - Added No Code UI configuration option for GitLab Fact Collector.
28
+ - Add all groups to track and check insights filter selection.
29
+ - View is now the primary action for checks rather than edit.
30
+ - Custom default title for the header bar can now be set via the title property of the RoutingPage.
31
+ - Added No Code UI configuration option for New Relic Fact Collector.
32
+ - Soundcheck will now only enable the execute check buttons for checks that it can actually execute.
33
+ - Update to Backstage v1.32.0
34
+ - Updated dependencies
35
+ - @spotify/backstage-plugin-soundcheck-common@0.14.2
36
+ - @spotify/backstage-plugin-core@0.8.2
37
+
3
38
  ## 0.14.1
4
39
 
5
40
  ### Patch Changes
@@ -15,10 +50,6 @@
15
50
  - Resolved an issue with searching for campaigns, checks, and tracks by name.
16
51
  - Fix issue with sorting entities on the check insights page.
17
52
  - Add pivot function to overview table to flip x and y axis.
18
- - Updated dependencies
19
- - Updated dependencies
20
- - Updated dependencies
21
- - Updated dependencies
22
53
  - Updated dependencies
23
54
  - @spotify/backstage-plugin-core@0.8.1
24
55
  - @spotify/backstage-plugin-soundcheck-common@0.14.1
@@ -365,10 +396,6 @@
365
396
  - Fixed an issue with the loading state of the library pages in Soundcheck.
366
397
  - Add loading indicator to overview page.
367
398
  - Editable Collectors are now linkable via the following url structure `/collectors/:collectorId`.
368
- - Updated dependencies
369
- - Updated dependencies
370
- - Updated dependencies
371
- - Updated dependencies
372
399
  - Updated dependencies
373
400
  - @spotify/backstage-plugin-soundcheck-common@0.11.0
374
401
  - @spotify/backstage-plugin-core@0.5.9
@@ -389,10 +416,6 @@
389
416
  - Bug fix for switching to the card view on the Tech Health Checks tab.
390
417
  - Checks created through the UI now properly support boolean values.
391
418
  - Resolved an issue that could prevent filters from being applied to Github fact collections configured through the UI.
392
- - Updated dependencies
393
- - Updated dependencies
394
- - Updated dependencies
395
- - Updated dependencies
396
419
  - Updated dependencies
397
420
  - @spotify/backstage-plugin-soundcheck-common@0.10.0
398
421
 
package/dist/alpha.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  /// <reference types="react" />
2
- import * as _backstage_catalog_model from '@backstage/catalog-model';
2
+ import * as _backstage_catalog_model_index from '@backstage/catalog-model/index';
3
3
  import * as react from 'react';
4
4
  import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api';
5
- import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
5
+ import * as _backstage_core_plugin_api_index from '@backstage/core-plugin-api/index';
6
6
 
7
7
  /**
8
8
  * @public
@@ -12,16 +12,17 @@ import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
12
12
  declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{}, {}, {
13
13
  "api:soundcheck": _backstage_frontend_plugin_api.ExtensionDefinition<{
14
14
  kind: "api";
15
- namespace: undefined;
16
15
  name: undefined;
17
16
  config: {};
18
17
  configInput: {};
19
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_core_plugin_api.AnyApiFactory, "core.api.factory", {}>;
18
+ output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_core_plugin_api_index.AnyApiFactory, "core.api.factory", {}>;
20
19
  inputs: {};
20
+ params: {
21
+ factory: _backstage_core_plugin_api_index.AnyApiFactory;
22
+ };
21
23
  }>;
22
24
  "entity-content:soundcheck/entity": _backstage_frontend_plugin_api.ExtensionDefinition<{
23
25
  kind: "entity-content";
24
- namespace: undefined;
25
26
  name: "entity";
26
27
  config: {
27
28
  path: string | undefined;
@@ -35,29 +36,39 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{}, {}, {
35
36
  };
36
37
  output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
37
38
  optional: true;
38
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-content-title", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
39
+ }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-content-title", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<(entity: _backstage_catalog_model_index.Entity) => boolean, "catalog.entity-filter-function", {
39
40
  optional: true;
40
41
  }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-filter-expression", {
41
42
  optional: true;
42
43
  }>;
43
44
  inputs: {};
45
+ params: {
46
+ loader: () => Promise<JSX.Element>;
47
+ defaultPath: string;
48
+ defaultTitle: string;
49
+ routeRef?: _backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams> | undefined;
50
+ filter?: string | ((entity: _backstage_catalog_model_index.Entity) => boolean) | undefined;
51
+ };
44
52
  }>;
45
53
  "nav-item:soundcheck": _backstage_frontend_plugin_api.ExtensionDefinition<{
46
54
  kind: "nav-item";
47
- namespace: undefined;
48
55
  name: undefined;
49
56
  config: {};
50
57
  configInput: {};
51
58
  output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<{
52
59
  title: string;
53
- icon: _backstage_core_plugin_api.IconComponent;
60
+ icon: _backstage_core_plugin_api_index.IconComponent;
54
61
  routeRef: _backstage_frontend_plugin_api.RouteRef<undefined>;
55
62
  }, "core.nav-item.target", {}>;
56
63
  inputs: {};
64
+ params: {
65
+ title: string;
66
+ icon: _backstage_core_plugin_api_index.IconComponent;
67
+ routeRef: _backstage_frontend_plugin_api.RouteRef<undefined>;
68
+ };
57
69
  }>;
58
70
  "entity-card:soundcheck/card": _backstage_frontend_plugin_api.ExtensionDefinition<{
59
71
  kind: "entity-card";
60
- namespace: undefined;
61
72
  name: "card";
62
73
  config: {
63
74
  filter: string | undefined;
@@ -65,16 +76,19 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{}, {}, {
65
76
  configInput: {
66
77
  filter?: string | undefined;
67
78
  };
68
- output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
79
+ output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<(entity: _backstage_catalog_model_index.Entity) => boolean, "catalog.entity-filter-function", {
69
80
  optional: true;
70
81
  }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-filter-expression", {
71
82
  optional: true;
72
83
  }>;
73
84
  inputs: {};
85
+ params: {
86
+ loader: () => Promise<JSX.Element>;
87
+ filter?: string | ((entity: _backstage_catalog_model_index.Entity) => boolean) | undefined;
88
+ };
74
89
  }>;
75
90
  "entity-content:soundcheck/group": _backstage_frontend_plugin_api.ExtensionDefinition<{
76
91
  kind: "entity-content";
77
- namespace: undefined;
78
92
  name: "group";
79
93
  config: {
80
94
  path: string | undefined;
@@ -88,16 +102,22 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{}, {}, {
88
102
  };
89
103
  output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
90
104
  optional: true;
91
- }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-content-title", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<(entity: _backstage_catalog_model.Entity) => boolean, "catalog.entity-filter-function", {
105
+ }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-content-title", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<(entity: _backstage_catalog_model_index.Entity) => boolean, "catalog.entity-filter-function", {
92
106
  optional: true;
93
107
  }> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "catalog.entity-filter-expression", {
94
108
  optional: true;
95
109
  }>;
96
110
  inputs: {};
111
+ params: {
112
+ loader: () => Promise<JSX.Element>;
113
+ defaultPath: string;
114
+ defaultTitle: string;
115
+ routeRef?: _backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams> | undefined;
116
+ filter?: string | ((entity: _backstage_catalog_model_index.Entity) => boolean) | undefined;
117
+ };
97
118
  }>;
98
119
  "page:soundcheck/SoundcheckRoutingPage": _backstage_frontend_plugin_api.ExtensionDefinition<{
99
120
  kind: "page";
100
- namespace: undefined;
101
121
  name: "SoundcheckRoutingPage";
102
122
  config: {
103
123
  path: string | undefined;
@@ -109,10 +129,14 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{}, {}, {
109
129
  optional: true;
110
130
  }>;
111
131
  inputs: {};
132
+ params: {
133
+ defaultPath: string;
134
+ loader: () => Promise<JSX.Element>;
135
+ routeRef?: _backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams> | undefined;
136
+ };
112
137
  }>;
113
138
  "page:soundcheck/overview": _backstage_frontend_plugin_api.ExtensionDefinition<{
114
139
  kind: "page";
115
- namespace: undefined;
116
140
  name: "overview";
117
141
  config: {
118
142
  path: string | undefined;
@@ -124,6 +148,11 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{}, {}, {
124
148
  optional: true;
125
149
  }>;
126
150
  inputs: {};
151
+ params: {
152
+ defaultPath: string;
153
+ loader: () => Promise<JSX.Element>;
154
+ routeRef?: _backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams> | undefined;
155
+ };
127
156
  }>;
128
157
  }>;
129
158
 
package/dist/api.esm.js CHANGED
@@ -1,2 +1,2 @@
1
- import{createApiRef as c}from"@backstage/core-plugin-api";import{GraphQLClient as h}from"graphql-request";import{getSdk as o}from"./graphql/generated/index.esm.js";const u=c({id:"plugin.soundcheck"}),g=r=>"response"in r&&"errors"in r.response,y=r=>"response"in r&&"message"in r.response;class l{#a;#s;#t;constructor(t){this.#a=t.fetchApi,this.#s=t.discoveryApi;const e=new h("/graphql",{fetch:async(a,s)=>{const n=`${await this.#s.getBaseUrl("soundcheck")}${a}`;return this.#a.fetch(n,s)}});this.#t=o(e)}#r=t=>g(t)?t.response?.errors?.[0].message??`${t}`:y(t)?t.response.message:`${t}`;#e=async t=>{try{return await t()}catch(e){throw new Error(`Error from Soundcheck backend: ${this.#r(e)}`)}};async getAllCertifications(t){return this.#e(async()=>{const{certifications:e}=await this.#t.getAllCertifications({entityRef:t});return e})}async getCertificationDetails(t){return this.#e(async()=>{const{certifications:e}=await this.#t.getCertificationDetails({entityRef:t});return e})}async getCertificationDetailsForTrack(t,e){return this.#e(async()=>{const{programCertification:a}=await this.#t.getCertificationDetailsForTrack({entityRef:t,programId:e});return a})}async getCheckResultDetails(t,e,a){return this.#e(async()=>{const{checkResult:s}=await this.#t.getCheckResultDetails({entityRef:t,programId:e,checkId:a});return s})}async getFacetsForOwner(t){return this.#e(async()=>{const{facetsForOwner:e}=await this.#t.getFacetsForOwner({ownerEntityRef:t});return e})}async getProgramOverviewForOwner(t,e,a,s,n){return this.#e(async()=>{const{programOverviewForOwner:i}=await this.#t.getProgramOverviewForOwner({ownerEntityRef:t,facet:e,first:a,after:s,entitySearch:n});return i})}async getTracks(t){return this.#e(async()=>{const{programs:e}=await this.#t.getTracks({filter:t});return e})}async createProgram(t){return this.#e(async()=>{const{program:e}=await this.#t.createProgram({input:t});return e})}async updateProgram(t){return this.#e(async()=>{const{program:e}=await this.#t.updateProgram({input:t});return e})}async deleteProgram(t){return this.#e(async()=>{const{programDeleted:e}=await this.#t.deleteProgram({programId:t});return e})}async getPlaylists(t){return this.#e(async()=>{const{playlists:e}=await this.#t.getPlaylists({entityRef:t});return e})}async getOperators(){return this.#e(async()=>{const{operators:t}=await this.#t.getOperators();return t})}async getChecks(t){return this.#e(async()=>{const{checkers:e}=await this.#t.getCheckers({filter:t});return e})}async createCheck(t){return this.#e(async()=>{const{check:e}=await this.#t.createCheck({input:t});return e})}async updateCheck(t){return this.#e(async()=>{const{check:e}=await this.#t.updateCheck({input:t});return e})}async deleteCheck(t){return this.#e(async()=>await this.#t.deleteChecker({checkerId:t}))}async executeCheck(t){return this.#e(async()=>{const{result:e}=await this.#t.executeCheck({input:t});return e})}async getCollectors(t){return this.#e(async()=>{const{collectors:e}=await this.#t.getCollectors({ids:t});return e})}async getFactSchema(t,e){if(!(!t||!e))return this.#e(async()=>{const{factSchema:a}=await this.#t.getFactSchemas({collectorId:t,factName:e});return a})}async updateCollectorConfig(t){return this.#e(async()=>{const{collector:e}=await this.#t.updateCollectorConfig({input:t});return e})}async getOverallCheckPassRates(t){return this.#e(async()=>await this.#t.getOverallCheckPassRates({filter:t}))}async getIndividualCheckPassRates(t){return this.#e(async()=>await this.#t.getIndividualCheckPassRates({filter:t}))}async getOverallTrackPassRate(t){return this.#e(async()=>await this.#t.getOverallTrackPassRate({filter:t}))}async getIndividualTrackPassRate(t){return this.#e(async()=>await this.#t.getIndividualTrackPassRate({filter:t}))}async getOverallEntityPassRates(t){return this.#e(async()=>await this.#t.getOverallEntityPassRates({filter:t}))}async getIndividualEntityPassRates(t){return this.#e(async()=>await this.#t.getIndividualEntityPassRates({input:t}))}async getOverallGroupPassRates(t){return this.#e(async()=>await this.#t.getOverallGroupPassRates({input:t}))}async getIndividualGroupPassRates(t){return this.#e(async()=>await this.#t.getIndividualGroupPassRates({input:t}))}async getEntityRefsForTechHealthFilter(t){return this.#e(async()=>await this.#t.getEntityRefsForTechHealthFilter({ownerEntityRef:t}))}async getTrackEntities(t){return this.#e(async()=>await this.#t.getTrackEntities({input:t}))}async getCampaigns(t){return this.#e(async()=>{const{campaigns:e}=await this.#t.getCampaigns({filter:t});return e})}async createCampaign(t){return this.#e(async()=>{const{campaign:e}=await this.#t.createCampaign({input:t});return e})}async updateCampaign(t){return this.#e(async()=>{const{campaign:e}=await this.#t.updateCampaign({input:t});return e})}async deleteCampaign(t){return this.#e(async()=>{const{campaignDeleted:e}=await this.#t.deleteCampaign({campaignId:t});return e})}async archiveCampaign(t){return this.#e(async()=>{const{campaignArchived:e}=await this.#t.archiveCampaign({campaignId:t});return e})}async getCampaignProgress(t,e,a){return this.#e(async()=>{const{campaignProgress:s}=await this.#t.getCampaignProgress({id:t,first:e,after:a});return s})}async getCampaignOwners(){return this.#e(async()=>{const{campaignOwners:t}=await this.#t.getCampaignOwners();return t})}async getCheckOwners(){return this.#e(async()=>{const{checkOwners:t}=await this.#t.getCheckOwners();return t})}async getTrackOwners(){return this.#e(async()=>{const{trackOwners:t}=await this.#t.getTrackOwners();return t})}async getCertificationStatus(t){return this.#e(async()=>this.#t.getCertificationStatus({input:t}))}async getCertificationStatusHistory(t){return this.#e(async()=>this.#t.getCertificationStatusHistory({input:t}))}async getCheckStatus(t){return this.#e(async()=>(await this.#t.getCheckStatus({input:t})).checkStatus)}async getCheckStatusHistory(t){return this.#e(async()=>(await this.#t.getCheckStatusHistory({input:t})).checkStatusHistory)}async getCheckEntities(t){return this.#e(async()=>await this.#t.getCheckEntities({input:t}))}async getPathResolvers(){return this.#e(async()=>{const{pathResolvers:t}=await this.#t.getPathResolvers();return t})}async getCheckTemplates(){return this.#e(async()=>{const{checkerTemplates:t}=await this.#t.getCheckTemplates();return t})}async getFact(t){return this.#e(async()=>{const{fact:e}=await this.#t.getFact(t);return e})}}export{l as SoundcheckApi,u as soundcheckApiRef};
1
+ import{createApiRef as c}from"@backstage/core-plugin-api";import{GraphQLClient as h}from"graphql-request";import{getSdk as u}from"./graphql/generated/index.esm.js";const o=c({id:"plugin.soundcheck"}),g=r=>"response"in r&&"errors"in r.response,y=r=>"response"in r&&"message"in r.response;class l{#a;#s;#t;constructor(t){this.#a=t.fetchApi,this.#s=t.discoveryApi;const e=new h("/graphql",{fetch:async(a,s)=>{const n=`${await this.#s.getBaseUrl("soundcheck")}${a}`;return this.#a.fetch(n,s)}});this.#t=u(e)}#r=t=>g(t)?t.response?.errors?.[0].message??`${t}`:y(t)?t.response.message:`${t}`;#e=async t=>{try{return await t()}catch(e){throw new Error(`Error from Soundcheck backend: ${this.#r(e)}`)}};async getAllCertifications(t){return this.#e(async()=>{const{certifications:e}=await this.#t.getAllCertifications({entityRef:t});return e})}async getCertificationDetails(t){return this.#e(async()=>{const{certifications:e}=await this.#t.getCertificationDetails({entityRef:t});return e})}async getCertificationDetailsForTrack(t,e){return this.#e(async()=>{const{programCertification:a}=await this.#t.getCertificationDetailsForTrack({entityRef:t,programId:e});return a})}async getCheckResultDetails(t,e,a){return this.#e(async()=>{const{checkResult:s}=await this.#t.getCheckResultDetails({entityRef:t,programId:e,checkId:a});return s})}async getFacetsForOwner(t){return this.#e(async()=>{const{facetsForOwner:e}=await this.#t.getFacetsForOwner({ownerEntityRef:t});return e})}async getProgramOverviewForOwner(t,e,a,s,n){return this.#e(async()=>{const{programOverviewForOwner:i}=await this.#t.getProgramOverviewForOwner({ownerEntityRef:t,facet:e,first:a,after:s,entitySearch:n});return i})}async getTracks(t){return this.#e(async()=>{const{programs:e}=await this.#t.getTracks({filter:t});return e})}async createProgram(t){return this.#e(async()=>{const{program:e}=await this.#t.createProgram({input:t});return e})}async updateProgram(t){return this.#e(async()=>{const{program:e}=await this.#t.updateProgram({input:t});return e})}async deleteProgram(t){return this.#e(async()=>{const{programDeleted:e}=await this.#t.deleteProgram({programId:t});return e})}async getPlaylists(t){return this.#e(async()=>{const{playlists:e}=await this.#t.getPlaylists({entityRef:t});return e})}async getOperators(){return this.#e(async()=>{const{operators:t}=await this.#t.getOperators();return t})}async getChecks(t){return this.#e(async()=>{const{checkers:e}=await this.#t.getCheckers({filter:t});return e})}async getExecutableChecks(){return this.#e(async()=>{const{executableChecks:t}=await this.#t.getExecutableChecks();return t})}async createCheck(t){return this.#e(async()=>{const{check:e}=await this.#t.createCheck({input:t});return e})}async updateCheck(t){return this.#e(async()=>{const{check:e}=await this.#t.updateCheck({input:t});return e})}async deleteCheck(t){return this.#e(async()=>await this.#t.deleteChecker({checkerId:t}))}async executeCheck(t){return this.#e(async()=>{const{result:e}=await this.#t.executeCheck({input:t});return e})}async getCollectors(t){return this.#e(async()=>{const{collectors:e}=await this.#t.getCollectors({ids:t});return e})}async getFactSchema(t,e){if(!(!t||!e))return this.#e(async()=>{const{factSchema:a}=await this.#t.getFactSchemas({collectorId:t,factName:e});return a})}async updateCollectorConfig(t){return this.#e(async()=>{const{collector:e}=await this.#t.updateCollectorConfig({input:t});return e})}async getOverallCheckPassRates(t){return this.#e(async()=>await this.#t.getOverallCheckPassRates({filter:t}))}async getIndividualCheckPassRates(t){return this.#e(async()=>await this.#t.getIndividualCheckPassRates({filter:t}))}async getOverallTrackPassRate(t){return this.#e(async()=>await this.#t.getOverallTrackPassRate({filter:t}))}async getIndividualTrackPassRate(t){return this.#e(async()=>await this.#t.getIndividualTrackPassRate({filter:t}))}async getOverallEntityPassRates(t){return this.#e(async()=>await this.#t.getOverallEntityPassRates({filter:t}))}async getIndividualEntityPassRates(t){return this.#e(async()=>await this.#t.getIndividualEntityPassRates({input:t}))}async getOverallGroupPassRates(t){return this.#e(async()=>await this.#t.getOverallGroupPassRates({input:t}))}async getIndividualGroupPassRates(t){return this.#e(async()=>await this.#t.getIndividualGroupPassRates({input:t}))}async getEntityRefsForTechHealthFilter(t){return this.#e(async()=>await this.#t.getEntityRefsForTechHealthFilter({ownerEntityRef:t}))}async getTrackEntities(t){return this.#e(async()=>await this.#t.getTrackEntities({input:t}))}async getCampaigns(t){return this.#e(async()=>{const{campaigns:e}=await this.#t.getCampaigns({filter:t});return e})}async createCampaign(t){return this.#e(async()=>{const{campaign:e}=await this.#t.createCampaign({input:t});return e})}async updateCampaign(t){return this.#e(async()=>{const{campaign:e}=await this.#t.updateCampaign({input:t});return e})}async deleteCampaign(t){return this.#e(async()=>{const{campaignDeleted:e}=await this.#t.deleteCampaign({campaignId:t});return e})}async archiveCampaign(t){return this.#e(async()=>{const{campaignArchived:e}=await this.#t.archiveCampaign({campaignId:t});return e})}async getCampaignProgress(t,e,a){return this.#e(async()=>{const{campaignProgress:s}=await this.#t.getCampaignProgress({id:t,first:e,after:a});return s})}async getCampaignOwners(){return this.#e(async()=>{const{campaignOwners:t}=await this.#t.getCampaignOwners();return t})}async getCheckOwners(){return this.#e(async()=>{const{checkOwners:t}=await this.#t.getCheckOwners();return t})}async getTrackOwners(){return this.#e(async()=>{const{trackOwners:t}=await this.#t.getTrackOwners();return t})}async getCertificationStatus(t){return this.#e(async()=>this.#t.getCertificationStatus({input:t}))}async getCertificationStatusHistory(t){return this.#e(async()=>this.#t.getCertificationStatusHistory({input:t}))}async getCheckStatus(t){return this.#e(async()=>(await this.#t.getCheckStatus({input:t})).checkStatus)}async getCheckStatusHistory(t){return this.#e(async()=>(await this.#t.getCheckStatusHistory({input:t})).checkStatusHistory)}async getCheckEntities(t){return this.#e(async()=>await this.#t.getCheckEntities({input:t}))}async getPathResolvers(){return this.#e(async()=>{const{pathResolvers:t}=await this.#t.getPathResolvers();return t})}async getCheckTemplates(){return this.#e(async()=>{const{checkerTemplates:t}=await this.#t.getCheckTemplates();return t})}async getFact(t){return this.#e(async()=>{const{fact:e}=await this.#t.getFact(t);return e})}}export{l as SoundcheckApi,o as soundcheckApiRef};
2
2
  //# sourceMappingURL=api.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as se,useTheme as ce}from"@material-ui/core/styles";import{schemeCategory10 as de}from"d3-scale-chromatic";import t,{useState as L,useRef as V}from"react";import{ResponsiveContainer as pe,AreaChart as me,CartesianGrid as ye,XAxis as ue,Label as D,YAxis as xe,Tooltip as ge,Legend as fe,Area as ve,Dot as G,Line as ke}from"recharts";import{ChartTooltip as he}from"./ChartTooltip.esm.js";import Ee from"./Legend.esm.js";import{yDomain as Ae,hasUniqueValueForKey as z}from"./utils.esm.js";const Le=se(o=>({root:{height:"100%",width:"100%"},gridLine:{stroke:o.palette.divider},xAxis:{fontSize:"0.75rem",fill:o.palette.text.secondary},yAxis:{fontSize:"0.75rem",fill:o.palette.text.secondary},tooltip:{borderRadius:o.shape.borderRadius,border:`1px solid ${o.palette.divider}`,backgroundColor:o.palette.background.paper,color:o.palette.text.primary,boxShadow:o.shadows[1]}})),be=({data:o=[],categories:E=[],index:x,colors:b=de,categoryColors:R={},valueFormatter:C=s=>s.toString(),startEndOnly:K=!1,showXAxis:W=!0,showYAxis:P=!0,showGridLines:q=!0,yAxisWidth:I=56,intervalType:M="equidistantPreserveStart",showTooltip:X=!0,showLegend:Y=!0,autoMinValue:j=!1,minValue:B,maxValue:H,allowDecimals:U=!0,connectNulls:w=!1,className:Z,onValueChange:p,enableLegendSlider:J=!0,tickGap:Q=5,xAxisLabel:A,yAxisLabel:g,type:f="default",legendPosition:Ce="right",fill:_="gradient",tooltipCallback:T,customTooltip:N,...$})=>{const s=Le(),m=ce(),[ee,te]=L(60),[l,v]=L(void 0),[c,u]=L(void 0),y=E.reduce((e,a,i)=>(e[a]=R[a]||b[i%b.length],e),{}),ae=Ae({autoMinValue:j,minValue:B,maxValue:H}),k=!!p,ie=f==="stacked"||f==="percent",S=V(void 0),F=V(void 0),oe=({fillType:e,dot:a,legend:i,category:r})=>{const n=a||i&&i!==r?.1:.3,d=y[r]||m.palette.primary.main;switch(e){case"none":return t.createElement("stop",{stopColor:d,stopOpacity:0});case"gradient":return t.createElement(t.Fragment,null,t.createElement("stop",{offset:"5%",stopColor:d,stopOpacity:n}),t.createElement("stop",{offset:"95%",stopColor:d,stopOpacity:0}));case"solid":default:return t.createElement("stop",{stopColor:d,stopOpacity:n})}};function ne(e){return`${(e*100).toFixed(0)}%`}function re(e,a){a.stopPropagation(),k&&(e.index===l?.index&&e.dataKey===l?.dataKey||z(o,e.dataKey)&&c&&c===e.dataKey?(u(void 0),v(void 0),p?.(null)):(u(e.dataKey),v({index:e.index,dataKey:e.dataKey}),p?.({eventType:"dot",categoryClicked:e.dataKey,...e.payload})))}function O(e){k&&(e===c&&!l||z(o,e)&&l&&l.dataKey===e?(u(void 0),p?.(null)):(u(e),p?.({eventType:"category",categoryClicked:e})),v(void 0))}return t.createElement("div",{className:`${s.root} ${Z}`,...$},t.createElement(pe,null,t.createElement(me,{data:o,onClick:k&&(c||l)?()=>{v(void 0),u(void 0),p?.(null)}:void 0,margin:{bottom:A?30:void 0,left:g?20:void 0,right:g?5:void 0,top:5},stackOffset:f==="percent"?"expand":void 0},q?t.createElement(ye,{className:s.gridLine,horizontal:!0,vertical:!1}):null,t.createElement(ue,{padding:{left:20,right:20},hide:!W,dataKey:x,interval:K?"preserveStartEnd":M,tick:{transform:"translate(0, 6)"},ticks:K?[o[0][x],o[o.length-1][x]]:void 0,className:s.xAxis,tickLine:!1,axisLine:!1,minTickGap:Q},A&&t.createElement(D,{position:"insideBottom",offset:-20,className:s.xAxis},A)),t.createElement(xe,{width:I,hide:!P,axisLine:!1,tickLine:!1,type:"number",domain:ae,tick:{transform:"translate(-3, 0)"},className:s.yAxis,tickFormatter:f==="percent"?ne:C,allowDecimals:U},g&&t.createElement(D,{position:"insideLeft",style:{textAnchor:"middle"},angle:-90,offset:-15,className:s.yAxis},g)),t.createElement(ge,{wrapperStyle:{outline:"none"},isAnimationActive:!0,animationDuration:100,cursor:{stroke:m.palette.divider,strokeWidth:1},offset:20,position:{y:0},content:({active:e,payload:a,label:i})=>{const r=a?a.map(n=>({category:n.dataKey,value:n.value,index:n.payload[x],color:y[n.dataKey]??"#000",type:n.type,payload:n.payload})):[];return T&&(e!==S.current||i!==F.current)&&(T({active:e,payload:r,label:i}),S.current=e,F.current=i),X&&e?N?t.createElement(N,{active:e,payload:r,label:i}):t.createElement(he,{active:e,payload:r,label:i,valueFormatter:C}):null}}),Y?t.createElement(fe,{verticalAlign:"top",height:ee,content:({payload:e})=>t.createElement(Ee,{categories:e?.map(a=>a.value)??[],colors:e?.map(a=>y[a.value]||m.palette.primary.main)??[],onClickLegendItem:k?O:void 0,activeLegend:c,enableLegendSlider:J,setLegendHeight:te})}):null,E.map(e=>{const a=`${e.replace(/[^a-zA-Z0-9]/g,"")}`;return t.createElement(t.Fragment,{key:e},t.createElement("defs",{key:e},t.createElement("linearGradient",{id:a,x1:"0",y1:"0",x2:"0",y2:"1"},oe({fillType:_,dot:l,legend:c,category:e}))),t.createElement(ve,{stroke:y[e]||m.palette.primary.main,strokeOpacity:l||c&&c!==e?.3:1,activeDot:i=>{const{cx:r,cy:n,dataKey:d}=i;return t.createElement(G,{cx:r,cy:n,r:5,fill:y[d]||m.palette.primary.main,onClick:(h,le)=>re(i,le)})},dot:i=>{const{cx:r,cy:n,dataKey:d,index:h}=i;return l?.index===h&&l?.dataKey===e?t.createElement(G,{key:h,cx:r,cy:n,r:5,fill:y[d]||m.palette.primary.main}):t.createElement(t.Fragment,{key:h})},key:e,name:e,type:"linear",dataKey:e,strokeWidth:2,strokeLinejoin:"round",strokeLinecap:"round",isAnimationActive:!1,connectNulls:w,stackId:ie?"stack":void 0,fill:`url(#${a})`}))}),p?E.map(e=>t.createElement(ke,{strokeOpacity:0,key:e,name:e,type:"linear",dataKey:e,stroke:"transparent",fill:"transparent",legendType:"none",tooltipType:"none",strokeWidth:12,connectNulls:w,onClick:(a,i)=>{i.stopPropagation();const{name:r}=a;O(r)}})):null)))};export{be as AreaChart};
2
+ //# sourceMappingURL=AreaChart.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as p,createStyles as m}from"@material-ui/core/styles";import a from"react";const g=p(e=>m({tooltipContainer:{borderRadius:e.shape.borderRadius,border:`1px solid ${e.palette.divider}`,backgroundColor:e.palette.background.paper,color:e.palette.text.primary,boxShadow:e.shadows[1]},header:{borderBottom:`1px solid ${e.palette.divider}`,paddingLeft:e.spacing(1),paddingRight:e.spacing(1)},title:{fontWeight:e.typography.fontWeightMedium,color:e.palette.text.primary},content:{padding:e.spacing(1)},item:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:e.spacing(.5)},legendDash:{width:e.spacing(2),height:e.spacing(.375),borderRadius:e.spacing(.375),marginRight:e.spacing(1)},category:{display:"flex",alignItems:"center",flex:1,fontSize:"0.875rem",color:e.palette.text.secondary,marginRight:e.spacing(2)},value:{fontWeight:e.typography.fontWeightMedium,fontSize:"0.875rem",color:e.palette.text.primary}}));function o({active:e,payload:i,label:r,valueFormatter:l}){const t=g({color:"#000"});return!e||!i||i.length===0?null:a.createElement("div",{className:t.tooltipContainer},a.createElement("div",{className:t.header},a.createElement("p",{className:t.title},r)),a.createElement("div",{className:t.content},i.map(({value:n,category:c,color:s},d)=>a.createElement("div",{key:`id-${d}`,className:t.item},a.createElement("div",{className:t.category},a.createElement("span",{className:t.legendDash,style:{backgroundColor:s}}),c),a.createElement("div",{className:t.value},l(n))))))}export{o as ChartTooltip,o as default};
2
+ //# sourceMappingURL=ChartTooltip.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as v,IconButton as m}from"@material-ui/core";import b from"@material-ui/icons/ArrowBackIos";import x from"@material-ui/icons/ArrowForwardIos";import l,{useRef as d,useState as E,useCallback as S}from"react";import z from"./LegendItem.esm.js";const I=v(()=>({legendContainer:{display:"flex",alignItems:"center",overflow:"hidden",position:"relative"},legendList:{display:"flex",listStyle:"none",padding:0,margin:0,overflowX:"auto","&::-webkit-scrollbar":{display:"none"}},scrollButton:{position:"absolute",top:"50%",transform:"translateY(-50%)",zIndex:1},scrollButtonLeft:{left:0},scrollButtonRight:{right:0}})),N=({categories:u,colors:g,activeLegend:h,onClickLegendItem:p,enableLegendSlider:a=!1,legendPosition:i="right",yAxisWidth:y=0})=>{const n=I(),s=d(null),L=d(null),[c,B]=E({left:!1,right:!1}),C=S(()=>{const e=s.current;if(!e)return;const t=e.scrollLeft>0,r=e.scrollWidth-e.clientWidth>e.scrollLeft;B({left:t,right:r})},[]),f=e=>{const t=s.current;if(!t)return;const r=t.clientWidth,k=e==="left"?-r:r;t.scrollBy({left:k,behavior:"smooth"}),setTimeout(C,400)};let o;return i==="left"?o="flex-start":i==="center"?o="center":o="flex-end",l.createElement("div",{className:n.legendContainer,ref:L,style:{justifyContent:o,paddingLeft:i==="left"?y:0}},a&&c.left&&l.createElement(m,{className:`${n.scrollButton} ${n.scrollButtonLeft}`,onClick:()=>f("left"),size:"small"},l.createElement(b,{fontSize:"small"})),l.createElement("ul",{className:n.legendList,ref:s},u.map((e,t)=>l.createElement(z,{key:t,name:e,color:g[t],onClick:p,activeLegend:h}))),a&&c.right&&l.createElement(m,{className:`${n.scrollButton} ${n.scrollButtonRight}`,onClick:()=>f("right"),size:"small"},l.createElement(x,{fontSize:"small"})))};export{N as default};
2
+ //# sourceMappingURL=Legend.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as c}from"@material-ui/core/styles";import o from"react";const i=c(e=>({legendItem:{display:"flex",alignItems:"center",marginRight:e.spacing(2),opacity:1,"&:hover":{opacity:.8}},legendButton:{display:"flex",alignItems:"center",background:"none",border:"none",cursor:"pointer",padding:0,opacity:1,"&:hover":{opacity:.8}},legendDash:{width:e.spacing(2),height:e.spacing(.375),borderRadius:e.spacing(.375),backgroundColor:t=>t.color,marginRight:e.spacing(1)},legendText:{fontSize:"0.875rem",color:e.palette.text.primary}}));function s({name:e,color:t,onClick:l,activeLegend:a}){const n=i({color:t}),r=()=>{l&&l(e,t)};return o.createElement("li",{className:n.legendItem},o.createElement("button",{className:n.legendButton,onClick:r,"aria-label":`Legend item for ${e}`},o.createElement("span",{className:n.legendDash,style:{opacity:a&&a!==e?.4:1}}),o.createElement("span",{className:n.legendText,style:{opacity:a&&a!==e?.4:1}},e)))}export{s as default};
2
+ //# sourceMappingURL=LegendItem.esm.js.map
@@ -0,0 +1,2 @@
1
+ import n from"lodash";const a=o=>{const{autoMinValue:t,minValue:e,maxValue:u}=o;return[t?"auto":e??0,u??"auto"]};function r(o,t){const e=n.countBy(o,t);return n.values(e).every(u=>u===1)}export{r as hasUniqueValueForKey,a as yDomain};
2
+ //# sourceMappingURL=utils.esm.js.map
@@ -1,2 +1,2 @@
1
- import i from"lodash";import{TimeUnit as a}from"../Frequency/types.esm.js";import{toTimeUnit as c}from"../Frequency/util.esm.js";import"../Frequency/FrequencyComponent.esm.js";const u=()=>({enabled:!1,hasDuration:!1,unit:a.Days,value:1});function s(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 l(t){const e=u();if(!t)return e;if(typeof t=="boolean")return{...e,enabled:t};if(!i.isObject(t)||!("duration"in t))return e;const n=t.duration;if(!i.isObject(n))return e;const o=Object.entries(n);if(o.length===0)return e;const[r,f]=o[0];return{...e,enabled:!0,hasDuration:!0,unit:c(r)??a.Days,value:f}}export{u as defaultCacheConfig,s as mapCacheConfigToHumanDurationOrBoolean,l as mapToCacheConfig};
1
+ import i from"lodash";import{TimeUnit as a}from"../Frequency/types.esm.js";import{toTimeUnit as c}from"../Frequency/util.esm.js";import"../Frequency/FrequencyComponent.esm.js";const u=()=>({enabled:!1,hasDuration:!1,unit:a.Days,value:1});function s(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){const e=u();if(!t)return e;if(typeof t=="boolean")return{...e,enabled:t};if(!i.isObject(t)||!("duration"in t))return e;const n=t.duration;if(!i.isObject(n))return e;const o=Object.entries(n);if(o.length===0)return e;const[r,f]=o[0];return{...e,enabled:!0,hasDuration:!0,unit:c(r)??a.Days,value:f}}export{u as defaultCacheConfig,s as mapCacheConfigToHumanDurationOrBoolean,m as mapToCacheConfig};
2
2
  //# sourceMappingURL=utils.esm.js.map
@@ -1,2 +1,2 @@
1
- import{Grid as o,Typography as l}from"@material-ui/core";import{makeStyles as r}from"@material-ui/core/styles";import a from"react";const m=r(e=>({detailRow:{marginBottom:e.spacing(1),"&:last-child":{marginBottom:0}},label:{fontWeight:"bold",color:e.palette.text.primary},value:{marginLeft:e.spacing(1)}})),n=({label:e,value:i})=>{const t=m();return a.createElement(o,{item:!0,xs:12,container:!0,className:t.detailRow,alignItems:"center"},a.createElement(l,{variant:"subtitle2",className:t.label},e,":"),a.createElement(l,{variant:"body2",display:"inline",className:t.value},i))};export{n as CampaignDetailRow};
1
+ import"@material-ui/core";import{makeStyles as o}from"@material-ui/core/styles";import"react";o(t=>({detailRow:{marginBottom:t.spacing(1),"&:last-child":{marginBottom:0}},label:{fontWeight:"bold",color:t.palette.text.primary},value:{marginLeft:t.spacing(1)}}));
2
2
  //# sourceMappingURL=CampaignDetailRow.esm.js.map
@@ -1,2 +1,2 @@
1
- import{EntityRefLink as g}from"@backstage/plugin-catalog-react";import{Grid as l}from"@material-ui/core";import{makeStyles as u}from"@material-ui/core/styles";import e from"react";import{CampaignDetailRow as n}from"./CampaignDetailRow.esm.js";const E=u(t=>({innerContainer:{padding:t.spacing(0,1),fontSize:t.typography.body2.fontSize},sectionLabel:{marginBottom:t.spacing(1)},ownerLink:{"& span":{"&:hover":{textDecoration:"underline"}}}})),a=t=>new Date(t).toLocaleDateString("en-US",{month:"long",day:"numeric",year:"numeric"}),d=({campaign:t})=>{const r=E(),{name:i,description:m,ownerEntityRef:c,startDate:p,targetCompletionDate:s,supportChannel:o}=t;return e.createElement(e.Fragment,null,e.createElement(l,{container:!0,className:r.innerContainer,spacing:2},e.createElement(l,{item:!0,container:!0,xs:12,spacing:0},e.createElement(n,{label:"Name",value:i}),e.createElement(n,{label:"Description",value:m}),e.createElement(n,{label:"Owner",value:e.createElement(g,{className:r.ownerLink,entityRef:c})}),o&&e.createElement(n,{label:"Support channel",value:o}),e.createElement(n,{label:"Start date",value:a(p)}),e.createElement(n,{label:"Target completion date",value:a(s)}))))};export{d as CampaignDetails,a as convertToReadableDate};
1
+ import"@backstage/plugin-catalog-react";import"@material-ui/core";import{makeStyles as o}from"@material-ui/core/styles";import"react";import"./CampaignDetailRow.esm.js";o(n=>({innerContainer:{padding:n.spacing(0,1),fontSize:n.typography.body2.fontSize},sectionLabel:{marginBottom:n.spacing(1)},ownerLink:{"& span":{"&:hover":{textDecoration:"underline"}}}}));const e=n=>new Date(n).toLocaleDateString("en-US",{month:"long",day:"numeric",year:"numeric"});export{e as convertToReadableDate};
2
2
  //# sourceMappingURL=CampaignDetails.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as u,Typography as l}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{FormControlledAutocomplete as v}from"../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import{useLabelOptions as y}from"../../../FormControlledAutocomplete/useLabelOptions.esm.js";import"@material-ui/lab";import"../../../ListboxVirtualized/ListboxVirtualized.esm.js";import{useOptions as b}from"../../../GroupSelector/useOptions.esm.js";import{CAMPAIGN_FIELDS as h}from"../../utils/campaignFormUtils.esm.js";const w=u(t=>({helperText:{marginLeft:0},selectField:{display:"flex",flexDirection:"column",gap:t.spacing(1),marginBottom:t.spacing(2)},fieldContainer:{width:"250px"}})),x=({control:t,errors:m,isLoading:p,disabled:s})=>{const o=w(),{owner:i}=h.details,{options:c}=b(),{user:d,userEntityRef:a}=E();let r=g(c?.map(n=>({value:n.ref,label:n.name})),"value");const f=y(r);return a&&(r=[{value:a,label:d?.metadata.name},...r]),e.createElement("div",{className:o.selectField},e.createElement("header",null,e.createElement(l,{variant:"subtitle2"},i.name),e.createElement(l,{variant:"caption"},i.description)),e.createElement("div",{className:o.fieldContainer},e.createElement(v,{name:"detailsStep.ownerEntityRef",control:t,placeholder:"Owner",freeSolo:!1,disabled:s||p,helperText:m?.ownerEntityRef?.message??void 0,...f})))};export{x as CampaignOwnerField};
1
+ import{makeStyles as u,Typography as l}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{useGroupOptions as v}from"../../../../hooks/groups/useGroupOptions.esm.js";import{FormControlledAutocomplete as y}from"../../../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import{useLabelOptions as b}from"../../../FormControlledAutocomplete/useLabelOptions.esm.js";import"@material-ui/lab";import"../../../ListboxVirtualized/ListboxVirtualized.esm.js";import{CAMPAIGN_FIELDS as h}from"../../utils/campaignFormUtils.esm.js";const w=u(t=>({helperText:{marginLeft:0},selectField:{display:"flex",flexDirection:"column",gap:t.spacing(1),marginBottom:t.spacing(2)},fieldContainer:{width:"250px"}})),x=({control:t,errors:m,isLoading:p,disabled:s})=>{const o=w(),{owner:i}=h.details,{options:c}=v(),{user:d,userEntityRef:a}=E();let r=g(c?.map(n=>({value:n.ref,label:n.name})),"value");const f=b(r);return a&&(r=[{value:a,label:d?.metadata.name},...r]),e.createElement("div",{className:o.selectField},e.createElement("header",null,e.createElement(l,{variant:"subtitle2"},i.name),e.createElement(l,{variant:"caption"},i.description)),e.createElement("div",{className:o.fieldContainer},e.createElement(y,{name:"detailsStep.ownerEntityRef",control:t,placeholder:"Owner",freeSolo:!1,disabled:s||p,helperText:m?.ownerEntityRef?.message??void 0,...f})))};export{x as CampaignOwnerField};
2
2
  //# sourceMappingURL=CampaignOwnerField.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{MarkdownContent as M,Content as z}from"@backstage/core-components";import{useRouteRef as G}from"@backstage/core-plugin-api";import{EntityRefLink as O}from"@backstage/plugin-catalog-react";import{usePermission as C}from"@backstage/plugin-permission-react";import{makeStyles as F,Button as H,Paper as U,Grid as i,Typography as w,Box as V}from"@material-ui/core";import{soundcheckCampaignReadPermission as W,soundcheckCampaignUpdatePermission as $}from"@spotify/backstage-plugin-soundcheck-common";import{DateTime as N}from"luxon";import t,{useMemo as p}from"react";import{useParams as j,useNavigate as q}from"react-router-dom";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetCampaigns as A}from"../../hooks/campaigns/useGetCampaigns.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useSearchParam as o}from"../../hooks/useSearchParam.esm.js";import{campaignEditRouteRef as J}from"../../routes.esm.js";import{CheckCard as K}from"../CheckCard/CheckCard.esm.js";import{LoadingIndicator as Q}from"../LoadingIndicator/LoadingIndicator.esm.js";import{PageWarningMessage as X}from"../PageWarningMessage/PageWarningMessage.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as Y}from"../SoundcheckHeader/useHeader.esm.js";import{FilterBar as Z}from"../TrackPage/FilterBar/FilterBar.esm.js";import{TrackEntitiesTable as _}from"../TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js";import{CampaignStatusHistoryTile as ee}from"./CampaignStatusHistoryTile.esm.js";import{CampaignStatusTile as te}from"./CampaignStatusTile.esm.js";import{DaysRemainingTile as ae}from"./DaysRemainingTile.esm.js";const ne=F(e=>({root:{height:"100%",background:e.palette.background.default},header:{backgroundColor:e.palette.background.paper,borderRadius:0,marginBottom:e.spacing(2),paddingLeft:e.spacing(1),borderLeft:"none",borderRight:"none"},progressContainer:{display:"flex",marginBottom:e.spacing(3)},trackContainerContent:{paddingTop:e.spacing(1),paddingBottom:e.spacing(1),backgroundColor:e.palette.background.paper},editButton:{marginLeft:"auto"},checksContainer:{},entitiesContainer:{marginTop:e.spacing(3)},headerDescription:{fontSize:e.typography.body2.fontSize,margin:e.spacing(.5,0,0),"& p":{margin:0},"& a":{color:"inherit",textDecoration:"underline"}},content:{paddingTop:0},ownerLink:{"& span":{color:"inherit","&:hover":{textDecoration:"underline"}}},sectionTitle:{paddingBottom:e.spacing(1)}})),re=()=>{const e=ne(),[s,R]=o("owners"),[m,b]=o("lifecycles"),[c,v]=o("types"),[l,T]=o("systems"),{campaignId:r}=j(),{data:x,isLoading:d}=A({ids:[r],first:1}),n=x?.edges?.[0]?.node,a=n?.track,g=a?.levels?.[0],{loading:B,allowed:L}=C({permission:W,resourceRef:r}),{loading:f,allowed:u}=C({permission:$,resourceRef:r}),y=n?N.fromISO(n.startDate):void 0,S=y?Math.max(Math.ceil(N.now().diff(y,"days").days),1):void 0,E=q(),h=G(J),D=p(()=>a?.ownerEntityRef?t.createElement(O,{color:"inherit",entityRef:a.ownerEntityRef,className:e.ownerLink}):null,[a?.ownerEntityRef,e.ownerLink]),P=p(()=>!f&&u&&a?.isEditable?t.createElement(H,{className:e.editButton,variant:"contained",color:"primary",onClick:()=>{E(h({campaignId:r}))}},"Edit Campaign"):null,[u,e.editButton,h,f,E,a,r]),I=p(()=>a?.description?t.createElement(M,{className:e.headerDescription,content:a.description}):null,[e.headerDescription,a?.description]);return Y({title:a?.name,description:I,customSubtitle:D,sectionRight:P}),t.createElement("div",null,t.createElement(X,{entityName:"track",entityId:r,showNotFound:!d&&!n,showCannotView:!B&&!L}),d&&t.createElement(Q,null),a&&t.createElement("div",{className:e.root},t.createElement(U,{elevation:1,className:e.header},t.createElement(Z,{track:a,owners:s,setOwners:R,lifecycles:m,setLifecycles:b,types:c,setTypes:v,systems:l,setSystems:T})),t.createElement(z,{className:e.content},t.createElement("div",{className:e.progressContainer},t.createElement(i,{container:!0,spacing:2},t.createElement(i,{item:!0,xs:2},t.createElement(ae,{campaign:n})),t.createElement(i,{item:!0,xs:4},t.createElement(te,{campaign:n})),t.createElement(i,{item:!0,xs:6},t.createElement(ee,{campaign:n})))),t.createElement("div",{className:e.checksContainer},t.createElement(w,{variant:"h3",className:e.sectionTitle},"Checks"),g&&t.createElement(V,{className:e.content},t.createElement(i,{container:!0,spacing:1},g.checks.map(k=>t.createElement(i,{item:!0,xs:12,sm:6,md:4,key:k.id},t.createElement(K,{track:a,check:k,lifecycles:m,owners:s,types:c,systems:l,numberOfDays:S}))))),a&&t.createElement("div",{className:e.entitiesContainer},t.createElement(w,{variant:"h3",className:e.sectionTitle},"Entities"),t.createElement(_,{track:a,initialPageSize:10,lifecycles:m,owners:s,types:c,systems:l}))))))};export{re as CampaignInsightsPage};
2
+ //# sourceMappingURL=CampaignInsightsPage.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{useTheme as p,Paper as l,Box as f}from"@material-ui/core";import{makeStyles as u}from"@material-ui/core/styles";import{DateTime as m}from"luxon";import i,{useMemo as h}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatusHistory as y}from"../../hooks/aggregations/useCertificationStatusHistory.esm.js";import"react-router-dom";import{AreaChart as g}from"../AreaChart/AreaChart.esm.js";const x=u(t=>({card:{display:"flex",flexDirection:"column",border:`1px solid ${t.palette.divider}`,height:"100%",width:"100%"},title:{fontWeight:"bold",fontSize:"1.1rem",lineHeight:`${t.typography.h5.fontSize}px`,cursor:"default"},content:{padding:t.spacing(1,2,1,0),width:"100%",height:"100%"}}));function S({campaign:t}){const n=p(),a=x(),c=m.fromISO(t.startDate),d=Math.max(Math.ceil(m.now().diff(c,"days").days),1),{data:e}=y({trackId:t.track.id,numberOfDays:d},!!t),r=e?.certificationStatusHistory.numberOfEntities,o=h(()=>e?.certificationStatusHistory.history.map(s=>({date:s.date,Passed:s.statusByLevel[0].passed/r*100})),[r,e]);return i.createElement(l,{className:a.card},i.createElement(f,{className:a.content},o&&i.createElement(g,{data:o,categories:["Passed"],categoryColors:{Passed:n.palette.success.main},index:"date",minValue:0,maxValue:100,showLegend:!1})))}export{S as CampaignStatusHistoryTile};
2
+ //# sourceMappingURL=CampaignStatusHistoryTile.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{useTheme as b,Paper as F,Box as c,Grid as x,Typography as f}from"@material-ui/core";import{makeStyles as S}from"@material-ui/core/styles";import C from"@material-ui/icons/TrendingDown";import k from"@material-ui/icons/TrendingFlat";import B from"@material-ui/icons/TrendingUp";import{DateTime as E}from"luxon";import t,{useMemo as D}from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useCertificationStatus as I}from"../../hooks/aggregations/useCertificationStatus.esm.js";import{useCertificationStatusHistory as N}from"../../hooks/aggregations/useCertificationStatusHistory.esm.js";import"react-router-dom";import{CategoryBar as R}from"../CategoryBar/CategoryBar.esm.js";const v=S(e=>({card:{display:"flex",flexDirection:"column",border:`1px solid ${e.palette.divider}`},content:{padding:e.spacing(1),display:"flex",margin:e.spacing(1),gap:e.spacing(1)},item:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:e.spacing(.5)},legendDash:{width:e.spacing(2),height:e.spacing(1),borderRadius:e.spacing(.375),marginRight:e.spacing(1)},category:{display:"flex",alignItems:"center",flex:1,marginRight:e.spacing(2)}}));function y({label:e,value:r,total:l,color:p,valueFormatter:a}){const s=v();return t.createElement(x,{item:!0,xs:12,className:s.item},t.createElement(c,{className:s.category},t.createElement("span",{className:s.legendDash,style:{backgroundColor:p}}),t.createElement(f,null,e)),l&&t.createElement(f,null,a(r)," of ",a(l)," (",Math.round(r/l*100),"%)"))}function T({campaign:e}){const r=b(),l=v(),{data:p}=I({trackId:e.track.id},!0),a=p?.certificationStatus.statusByLevel[0],s=Math.max(Math.ceil(E.now().diff(E.fromISO(e.startDate),"days").days),1),{data:g}=N({trackId:e.track.id,numberOfDays:s},!!e),o=p?.certificationStatus.numberOfEntities??0,m=D(()=>{if(o===void 0||g===void 0||a===void 0)return;const i=g.certificationStatusHistory.history[0].statusByLevel[0].passed/o*100;return a.passed/o*100-i},[g,a,o]),d=i=>i>=1e6?`${(i/1e6).toFixed(1)}M`:i>=1e3?`${(i/1e3).toFixed(1)}K`:i.toString();let u=k,n;return m!==void 0&&(n=`${m.toFixed(0)}% since campaign start`,m<=-1?(u=C,n=`-${n}`):m>=1&&(u=B,n=`+${n}`)),t.createElement(F,{className:l.card},t.createElement(c,{className:l.content},a&&t.createElement(c,{width:"100%"},t.createElement(R,{data:a,valueFormatter:d,categories:["passed","failed","notReported"],categoryFormatter:i=>i.replace(/\b\w/g,h=>h.toUpperCase()),colors:[r.palette.success.main,r.palette.error.main,r.palette.text.disabled]}),t.createElement(c,{paddingTop:"12px"},t.createElement(x,{spacing:2},t.createElement(y,{label:"Passing",value:a.passed,total:o,color:r.palette.success.main,valueFormatter:d}),t.createElement(y,{label:"Failing",value:a.failed,total:o,color:r.palette.error.main,valueFormatter:d}),t.createElement(y,{label:"Not Reported",value:a.notReported,total:o,color:r.palette.text.disabled,valueFormatter:d}),m!==void 0&&t.createElement(c,{display:"flex",alignItems:"center",paddingTop:"12px"},t.createElement(u,null),t.createElement(f,{style:{marginLeft:r.spacing(1)}},n)))))))}export{T as CampaignStatusTile};
2
+ //# sourceMappingURL=CampaignStatusTile.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{Paper as c,Typography as i,Divider as s}from"@material-ui/core";import{makeStyles as d}from"@material-ui/core/styles";import{DateTime as n}from"luxon";import t from"react";const p=d(a=>({root:{display:"flex",flexDirection:"column",alignItems:"center",overflow:"hidden",width:"100%",height:"100%",padding:a.spacing(.75)},textWrapper:{display:"flex",flexDirection:"column",flexGrow:1,alignItems:"center",justifyContent:"center"},daysRemaining:{textAlign:"center",fontSize:"4em",fontWeight:"bold"},daysRemainingText:{textAlign:"center",fontSize:"0.9em",fontWeight:"bold"},divider:{width:"100%"},dateContainer:{display:"flex",flexDirection:"row",justifyContent:"flex-start",width:"100%",paddingTop:"4px",flexGrow:0},dateSection:{width:"100%",paddingLeft:"4px"},dateLabel:{fontSize:"0.7em",color:a.palette.text.secondary},dateValue:{fontSize:"0.95em",color:a.palette.info.contrastText},verticalDivider:{height:"100%"}}));function f({campaign:a}){const e=p(),l=n.fromISO(a.startDate),r=n.fromISO(a.targetCompletionDate),m=n.now(),o=Math.max(Math.ceil(r.diff(m,"days").days),0);return t.createElement(c,{className:e.root},t.createElement("div",{className:e.textWrapper},t.createElement(i,{className:e.daysRemaining},o),t.createElement(i,{className:e.daysRemainingText},o===1?"DAY REMAINING":"DAYS REMAINING")),t.createElement(s,{className:e.divider}),t.createElement("div",{className:e.dateContainer},t.createElement("div",{className:e.dateSection},t.createElement(i,{className:e.dateLabel},"START"),t.createElement(i,{className:e.dateValue},l.toLocaleString({month:"short",day:"numeric"}).toLocaleUpperCase())),t.createElement("div",{className:`${e.dateSection}`},t.createElement(i,{className:e.dateLabel},"END"),t.createElement(i,{className:e.dateValue},r.toLocaleString({month:"short",day:"numeric"}).toLocaleUpperCase()))))}export{f as DaysRemainingTile};
2
+ //# sourceMappingURL=DaysRemainingTile.esm.js.map
@@ -1,2 +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};
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 m,ListItemIcon as c,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(m,{title:"Owner"},e.createElement(c,{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
2
  //# sourceMappingURL=CampaignMetadata.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useRouteRef as d}from"@backstage/core-plugin-api";import{usePermission as p}from"@backstage/plugin-permission-react";import{soundcheckCampaignUpdatePermission as M,soundcheckCampaignDeletePermission as P}from"@spotify/backstage-plugin-soundcheck-common";import c,{useCallback as L}from"react";import{useNavigate as S}from"react-router-dom";import{v4 as U}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 I}from"../../../hooks/campaigns/useArchiveCampaign.esm.js";import{useDeleteCampaign as T}from"../../../hooks/campaigns/useDeleteCampaign.esm.js";import{useCreateTrack as b}from"../../../hooks/tracks/useCreateTrack.esm.js";import{useConfirmationModal as x}from"../../../hooks/useConfirmationModal.esm.js";import{campaignDetailsRouteRef as N,campaignEditRouteRef as V}from"../../../routes.esm.js";import{SummaryCard as j}from"../../SummaryCard/SummaryCard.esm.js";import{CampaignMetadata as q}from"./CampaignMetadata.esm.js";import{useArchiveConfirmationModal as z}from"./useArchiveConfirmationModal.esm.js";const B=({campaign:e})=>{const{id:l,name:u,description:f,ownerEntityRef:g,archived:h}=e,v=d(N),C=d(V),o=S(),t=e.archived,{showModal:r}=x(),{showArchiveModal:R}=z(),{mutate:w}=b(),{mutate:m}=T(),{mutate:y}=I(),{loading:A,allowed:k}=p({permission:M,resourceRef:e.id}),{loading:n,allowed:s}=p({permission:P,resourceRef:e.id}),E=L(async()=>{await r({title:"Delete Campaign",message:`Are you sure you want to delete campaign ${e.name}?`})&&m(e.id)},[r,m,e.id,e.name]),D=()=>{const{track:i}=e,a={id:U(),ownerEntityRef:i.ownerEntityRef,description:i.description??"",name:i.name,documentationURL:i.documentationURL,type:"standard",levels:i.levels??[],filter:i.filter};w(a)};return c.createElement(j,{title:u??l,description:f,children:(g||h)&&c.createElement(q,{campaign:e}),handleView:()=>o(v({campaignId:e.id})),handleEdit:!A&&k&&!t?()=>o(C({campaignId:e.id})):void 0,handleDelete:!n&&s?E:void 0,handleArchive:!n&&s&&!t?async()=>{const{saveTrack:i,confirmed:a}=await R({title:"Archive Campaign",message:`Are you sure you want to archive campaign ${e.name}?`});a&&(i&&D(),y(e.id))}:void 0})};export{B as CampaignSummaryCard};
1
+ import{useRouteRef as d}from"@backstage/core-plugin-api";import{usePermission as p}from"@backstage/plugin-permission-react";import{soundcheckCampaignUpdatePermission as M,soundcheckCampaignDeletePermission as P}from"@spotify/backstage-plugin-soundcheck-common";import c,{useCallback as I}from"react";import{useNavigate as L}from"react-router-dom";import{v4 as S}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 U}from"../../../hooks/campaigns/useArchiveCampaign.esm.js";import{useDeleteCampaign as T}from"../../../hooks/campaigns/useDeleteCampaign.esm.js";import{useCreateTrack as b}from"../../../hooks/tracks/useCreateTrack.esm.js";import{useConfirmationModal as x}from"../../../hooks/useConfirmationModal.esm.js";import{campaignDetailsRouteRef as N,campaignEditRouteRef as V}from"../../../routes.esm.js";import{SummaryCard as j}from"../../SummaryCard/SummaryCard.esm.js";import{CampaignMetadata as q}from"./CampaignMetadata.esm.js";import{useArchiveConfirmationModal as z}from"./useArchiveConfirmationModal.esm.js";const B=({campaign:e})=>{const{id:l,name:u,description:f,ownerEntityRef:g,archived:h}=e,v=d(N),C=d(V),o=L(),t=e.archived,{showModal:r}=x(),{showArchiveModal:w}=z(),{mutate:y}=b(),{mutate:m}=T(),{mutate:R}=U(),{loading:A,allowed:k}=p({permission:M,resourceRef:e.id}),{loading:n,allowed:s}=p({permission:P,resourceRef:e.id}),E=I(async()=>{await r({title:"Delete Campaign",message:`Are you sure you want to delete campaign ${e.name}?`})&&m(e.id)},[r,m,e.id,e.name]),D=()=>{const{track:i}=e,a={id:S(),ownerEntityRef:i.ownerEntityRef,description:i.description??"",name:i.name,documentationURL:i.documentationURL,type:"standard",levels:i.levels??[],filter:i.filter};y(a)};return c.createElement(j,{title:u??l,description:f,viewIsPrimaryAction:!0,children:(g||h)&&c.createElement(q,{campaign:e}),handleView:()=>o(v({campaignId:e.id})),handleEdit:!A&&k&&!t?()=>o(C({campaignId:e.id})):void 0,handleDelete:!n&&s?E:void 0,handleArchive:!n&&s&&!t?async()=>{const{saveTrack:i,confirmed:a}=await w({title:"Archive Campaign",message:`Are you sure you want to archive campaign ${e.name}?`});a&&(i&&D(),R(e.id))}:void 0})};export{B as CampaignSummaryCard};
2
2
  //# sourceMappingURL=CampaignSummaryCard.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{Typography as w,useTheme as I,Tooltip as R}from"@material-ui/core";import{makeStyles as U,createStyles as j}from"@material-ui/core/styles";import{schemeCategory10 as q}from"d3-scale-chromatic";import N from"lodash";import a,{useRef as A,useState as H,useEffect as X,useMemo as k}from"react";const F=e=>{let l=e;for(;l;){const t=window.getComputedStyle(l).backgroundColor;if(t&&t!=="rgba(0, 0, 0, 0)"&&t!=="transparent")return t;l=l.parentElement}return"transparent"},_=(e,l,t,i,s)=>{if(N.isUndefined(e))return"";if(e===0){for(let r=0;r<l.length;r++)if(l[r]>0)return s?.[t[r]]??i[r]}let m=0;for(let r=0;r<l.length;r++)if(m+=l[r],m>=e)return s?.[t[r]]??i[r];return s?.[t[l.length-1]]??i[l.length-1]},T=(e,l)=>e?e/l*100:0,W=U(e=>j({container:{display:"flex",flexDirection:"column",width:"100%"},barWrapper:{position:"relative",width:"100%"},barContainer:{display:"flex",height:e.spacing(1),overflow:"hidden",borderRadius:4,width:"100%"},barSegment:{height:"100%"},barLabel:{position:"absolute",fontSize:"0.875rem",whiteSpace:"nowrap",transform:"translateX(-50%)"},marker:{position:"absolute",width:6,height:16,top:0,bottom:0,borderRadius:4,transform:"translate(-50%, -25%)"},tooltip:{backgroundColor:e.palette.background.paper,color:e.palette.text.primary,boxShadow:e.shadows[1],fontSize:12,border:`1px solid ${e.palette.divider}`,borderRadius:e.shape.borderRadius,padding:e.spacing(1)},arrow:{color:e.palette.background.paper},item:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:e.spacing(.5)},legendDash:{width:e.spacing(2),height:e.spacing(.375),borderRadius:e.spacing(.375),marginRight:e.spacing(1)},category:{display:"flex",alignItems:"center",flex:1,fontSize:"0.875rem",color:e.palette.text.secondary,marginRight:e.spacing(2)},value:{fontWeight:e.typography.fontWeightMedium,fontSize:"0.875rem",color:e.palette.text.primary}})),P=a.memo(({data:e,categories:l,valueFormatter:t,type:i,labelPosition:s})=>{const m=W(),r=l.map(p=>e[p]),o=N.sum(r);let c=0,f=0;return a.createElement("div",{className:m.barWrapper},r.map((p,C)=>{c+=p;const y=(p>=.1*o||f>=.09*o)&&o-c>=.1*o&&c>=.1*o&&c<.9*o;f=y?0:f+=p;const g=T(c,o),$=i==="percent"?`${Math.round(c/o*100)}%`:t(c);return a.createElement("div",{key:`item-${C}`,className:m.barLabel,style:{left:`${g}%`,top:s==="top"?"-1.5rem":"1.5rem"}},y&&a.createElement(w,{variant:"caption"},$))}),a.createElement(w,{variant:"caption",style:{position:"absolute",bottom:0,left:0}},i==="percent"?"0%":t(0)),a.createElement(w,{variant:"caption",style:{position:"absolute",bottom:0,right:0}},i==="percent"?"100%":t(o)))}),G=a.memo(e=>{const l=I(),t=W(),{data:i={},categories:s=[],colors:m=q,categoryColors:r,marker:o,showLabels:c=!1,showTooltip:f=!0,valueFormatter:p=n=>n.toString(),categoryFormatter:C=n=>n,type:y="value",labelPosition:g="top",className:$,...z}=e,v=s.map(n=>i[n]).filter(n=>typeof n=="number"),E=A(null),[B,D]=H("transparent");X(()=>{if(E.current){const n=F(E.current);D(n)}},[E]);const L=k(()=>_(o?.value,v,s,m,r),[o,v,s,m,r]),d=k(()=>N.sum(v),[v]),S=k(()=>{if(!N.isUndefined(o))return o.value<0?0:o.value>d?d:o.value},[o,d]),M=k(()=>T(S,d),[S,d]);return a.createElement("div",{ref:E,className:`${$} ${t.container}`,...z},a.createElement("div",{className:t.barWrapper},c&&g==="top"&&a.createElement(P,{data:i,categories:s,valueFormatter:p,type:y,labelPosition:g}),a.createElement("div",{className:t.barContainer},f?a.createElement(R,{title:a.createElement("div",{className:t.tooltip},s.map((n,u)=>{const b=i[n],h=r?.[n]??m[u]??"gray";return a.createElement("div",{key:`tooltip-item-${u}`,className:t.item},a.createElement("div",{className:t.category},a.createElement("span",{className:t.legendDash,style:{backgroundColor:h}}),a.createElement(w,null,C(n))),a.createElement("div",{className:t.value},p(b)," of ",p(d)," (",Math.round(b/d*100),"%)"))})),placement:"top",arrow:!0,classes:{tooltip:t.tooltip,arrow:t.arrow}},a.createElement("div",{className:t.barContainer},s.map((n,u)=>{const b=i[n],h=r?.[n]??m[u]??"gray",x=b/d*100;return a.createElement("div",{key:`item-${u}`,className:t.barSegment,style:{backgroundColor:h,width:`${x}%`}})}))):a.createElement("div",{className:t.barContainer},s.map((n,u)=>{const b=i[n],h=r?.[n]??m[u]??l.palette.text.disabled,x=b/d*100;return a.createElement("div",{key:`item-${u}`,className:t.barSegment,style:{backgroundColor:h,width:`${x}%`}})}))),o!==void 0&&a.createElement(R,{title:o.tooltip||"",arrow:!0},a.createElement("div",{className:t.marker,style:{left:`${M}%`,backgroundColor:L,border:`1px solid ${B}`,transition:o.showAnimation?"all 0.3s ease-in-out":"none"}})),c&&g==="bottom"&&a.createElement(P,{data:i,categories:s,valueFormatter:p,type:y,labelPosition:g})))});export{G as CategoryBar,F as getEffectiveBackgroundColor};
2
+ //# sourceMappingURL=CategoryBar.esm.js.map
@@ -1,2 +1,2 @@
1
- import{stringifyEntityRef as p}from"@backstage/catalog-model";import{useEntity as b}from"@backstage/plugin-catalog-react";import{makeStyles as v,Typography as z,Tooltip as I,IconButton as T,CircularProgress as x}from"@material-ui/core";import N from"@material-ui/icons/Refresh";import S from"classnames";import e,{useState as F,useMemo as L}from"react";import{Link as w}from"react-router-dom";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useGetChecks as A}from"../../hooks/checks/useGetChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useExecuteCheck as B}from"../../hooks/checks/useExecuteCheck.esm.js";import"../CheckDryRun/CheckDryRun.esm.js";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import{CheckDryRunDialogButton as D}from"../CheckDryRun/CheckDryRunDialogButton.esm.js";import"../CheckDryRun/CheckDryRunDetails.esm.js";import"../CheckDryRun/CheckDryRunContext.esm.js";import{mapCheckToCheckInput as G}from"../CheckDryRun/checkDryRunUtils.esm.js";import{CheckIcon as $}from"../CheckIcon/CheckIcon.esm.js";import{RelativeTime as H}from"../RelativeTime/RelativeTime.esm.js";const d=v(t=>({root:{display:"grid",width:"100%",gridTemplateColumns:"auto 1fr auto auto auto",gridColumnGap:t.spacing(.5),padding:t.spacing(1),alignItems:"center","&.selected":{backgroundColor:t.palette.action.hover},"&:hover, &:active, &:focus":{backgroundColor:t.palette.action.hover}}})),M=({className:t,href:a,name:r,children:m})=>a?e.createElement(w,{"aria-label":`select check ${r}`,to:a,className:t},m):e.createElement("div",{className:t},m),P=({result:t,name:a,id:r,timestamp:m,hasChecker:h=!1,selected:f=!1,href:k})=>{const g=d(),E=S(g.root,{selected:f}),{entity:i}=b(),{mutateAsync:C,isLoading:l}=B(),[o,y]=F(),{data:n}=A({ids:r?[r]:[]},!!o),s=L(()=>{const c=n?.edges?.[0]?.node;return c?G(c):null},[n?.edges]),R=async()=>{if(!i||!r)return;const c=await C({checkerId:r,entityRef:p(i),shouldRefreshFacts:!0}).catch(j=>{});c&&y(c)},u=!i||!r||!h;return e.createElement(M,{href:k,className:E,name:a},e.createElement($,{result:t}),e.createElement(z,{variant:"body2"},a),m&&!l?e.createElement(H,{timestamp:m}):null,!l&&e.createElement(e.Fragment,null,e.createElement(I,{title:"Execute Check",disableHoverListener:u},e.createElement("span",null,e.createElement(T,{size:"small",color:"inherit",onClick:R,disabled:u,"aria-label":"Execute Check"},e.createElement(N,{fontSize:"small"})))),!!o&&!!s&&e.createElement(D,{entityRef:p(i),check:s,checkResult:{checkResult:o.result,notes:o.details?.notes?.data??""},facts:o.facts,ruleResults:o.ruleResults,size:"small"})),l&&e.createElement(x,{color:"inherit",size:"1em"}))};export{P as Check,d as useStyles};
1
+ import{stringifyEntityRef as p}from"@backstage/catalog-model";import{useEntity as b}from"@backstage/plugin-catalog-react";import{makeStyles as v,Typography as x,Tooltip as z,IconButton as I,CircularProgress as T}from"@material-ui/core";import N from"@material-ui/icons/Refresh";import S from"classnames";import e,{useState as F,useMemo as L}from"react";import{Link as w}from"react-router-dom";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useGetChecks as A}from"../../hooks/checks/useGetChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useExecuteCheck as B}from"../../hooks/checks/useExecuteCheck.esm.js";import"../CheckDryRun/CheckDryRun.esm.js";import"../SoundcheckDialog/SoundcheckDialog.esm.js";import{CheckDryRunDialogButton as D}from"../CheckDryRun/CheckDryRunDialogButton.esm.js";import"../CheckDryRun/CheckDryRunDetails.esm.js";import"../CheckDryRun/CheckDryRunContext.esm.js";import{mapCheckToCheckInput as G}from"../CheckDryRun/checkDryRunUtils.esm.js";import{CheckIcon as $}from"../CheckIcon/CheckIcon.esm.js";import{RelativeTime as H}from"../RelativeTime/RelativeTime.esm.js";const d=v(t=>({root:{display:"grid",width:"100%",gridTemplateColumns:"auto 1fr auto auto auto",gridColumnGap:t.spacing(.5),padding:t.spacing(1),alignItems:"center","&.selected":{backgroundColor:t.palette.action.hover},"&:hover, &:active, &:focus":{backgroundColor:t.palette.action.hover}}})),M=({className:t,href:a,name:r,children:m})=>a?e.createElement(w,{"aria-label":`select check ${r}`,to:a,className:t},m):e.createElement("div",{className:t},m),P=({result:t,name:a,id:r,timestamp:m,isExecutable:h=!1,selected:f=!1,href:g})=>{const k=d(),E=S(k.root,{selected:f}),{entity:i}=b(),{mutateAsync:y,isLoading:l}=B(),[o,C]=F(),{data:n}=A({ids:r?[r]:[]},!!o),s=L(()=>{const c=n?.edges?.[0]?.node;return c?G(c):null},[n?.edges]),R=async()=>{if(!i||!r)return;const c=await y({checkerId:r,entityRef:p(i),shouldRefreshFacts:!0}).catch(j=>{});c&&C(c)},u=!i||!r||!h;return e.createElement(M,{href:g,className:E,name:a},e.createElement($,{result:t}),e.createElement(x,{variant:"body2"},a),m&&!l?e.createElement(H,{timestamp:m}):null,!l&&e.createElement(e.Fragment,null,e.createElement(z,{title:"Execute Check",disableHoverListener:u},e.createElement("span",null,e.createElement(I,{size:"small",color:"inherit",onClick:R,disabled:u,"aria-label":"Execute Check"},e.createElement(N,{fontSize:"small"})))),!!o&&!!s&&e.createElement(D,{entityRef:p(i),check:s,checkResult:{checkResult:o.result,notes:o.details?.notes?.data??""},facts:o.facts,ruleResults:o.ruleResults,size:"small"})),l&&e.createElement(T,{color:"inherit",size:"1em"}))};export{P as Check,d as useStyles};
2
2
  //# sourceMappingURL=Check.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useRouteRef as a}from"@backstage/core-plugin-api";import{makeStyles as h,Typography as f}from"@material-ui/core";import o from"react";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import{useGetChecks as y}from"../../hooks/checks/useGetChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{certificationRouteRef as u,certificationPlaylistTrackCheckRouteRef as I}from"../../routes.esm.js";import{Check as g}from"./Check.esm.js";const m=h(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"}}})),C=({checks:e,playlistId:c,trackId:i,checkId:l})=>{const r=m(),p=a(u),s=a(I),{data:d,isLoading:n}=y({ids:e.map(t=>t.id)});return e.length?o.createElement("ul",{className:r.checks},e.map(t=>o.createElement("li",{key:t.id,className:r.checkItem},o.createElement(g,{...t,hasChecker:!n&&(d?.edges??[]).map(k=>k.node.id).includes(t.id),selected:t.id===l,href:c?s({playlistId:c,trackId:i,checkId:t.id}):p({trackId:i,checkId:t.id})})))):o.createElement(f,{variant:"body2",className:r.noChecks},"No applicable checks at this level.")};export{C as CheckResultSummaryList,m as useStyles};
1
+ import{useRouteRef as i}from"@backstage/core-plugin-api";import{makeStyles as k,Typography as h}from"@material-ui/core";import c from"react";import{useExecutableChecks as f}from"../../hooks/checks/useExecutableChecks.esm.js";import{certificationRouteRef as y,certificationPlaylistTrackCheckRouteRef as u}from"../../routes.esm.js";import{Check as I}from"./Check.esm.js";const l=k(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"}}})),x=({checks:e,playlistId:o,trackId:r,checkId:s})=>{const a=l(),m=i(y),d=i(u),{data:n,isLoading:p}=f();return e.length?c.createElement("ul",{className:a.checks},e.map(t=>c.createElement("li",{key:t.id,className:a.checkItem},c.createElement(I,{...t,isExecutable:!p&&n?.includes(t.id),selected:t.id===s,href:o?d({playlistId:o,trackId:r,checkId:t.id}):m({trackId:r,checkId:t.id})})))):c.createElement(h,{variant:"body2",className:a.noChecks},"No applicable checks at this level.")};export{x as CheckResultSummaryList,l as useStyles};
2
2
  //# sourceMappingURL=CheckResultSummaryList.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as B,useTheme as $,Box as a,Paper as P,Typography as I,Tooltip as O}from"@material-ui/core";import S from"@material-ui/lab/Skeleton";import{DateTime as T}from"luxon";import t from"react";import{CircularProgressbar as W,buildStyles as j}from"react-circular-progressbar";import{useCheckStatus as z}from"../../hooks/aggregations/useCheckStatus.esm.js";import{useCheckStatusHistory as A}from"../../hooks/aggregations/useCheckStatusHistory.esm.js";import{getChartFontColor as w,formatDate as G}from"../Charts/chartUtils.esm.js";import{getApplicableCheckCount as u}from"../TrackPage/TrackEntitiesTable/utils.esm.js";import{getProgressColor as E}from"../TrackPage/utils.esm.js";import{CheckHistoryChart as H}from"./CheckHistoryChart.esm.js";import{getCheckName as K}from"./utils.esm.js";const N=B(e=>({card:{display:"flex",flexDirection:"column",border:`1px solid ${e.palette.divider}`,width:"99%"},title:{fontWeight:"bold",fontSize:"0.9rem",cursor:"default",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},headerRow:{display:"flex",padding:e.spacing(1,1),borderBottom:`1px solid ${e.palette.divider}`,width:"100%"},headerSection:{display:"flex",flexDirection:"column",gap:e.spacing(.5),flexGrow:1,width:"100%"},contentRow:{padding:e.spacing(1,1,0),display:"flex"},leftSection:{width:"75px",minWidth:"75px"},summaryCard:{height:"100%",display:"flex",flexDirection:"column",justifyContent:"space-between"},chartSection:{flex:1,width:"100%",minWidth:"150px"},chartSkeletonSection:{flex:1,width:"100%",minWidth:"150px",padding:e.spacing(0,0,1,1)},overallSummaryBox:{display:"flex",flexDirection:"column",height:"100%",color:w(e),textAlign:"center",gap:e.spacing(2)}})),L=()=>{const e=N();return t.createElement(a,{className:e.contentRow},t.createElement(a,{className:e.leftSection},t.createElement(a,{className:e.summaryCard},t.createElement(S,{variant:"circle",height:75}))),t.createElement(a,{className:e.chartSkeletonSection},t.createElement(S,{variant:"rect",height:92})))};function M(e){if(!e)return[];const{history:r}=e,o=T.utc();return r.map((l,s)=>{const c=u(l);return{name:G(o,r.length-s-1),passRate:c?Math.round(l.passed/c*100):100}})}function q(e){if(!e)return 0;const{passed:r}=e,o=u(e);return o?Math.round(r/o*100):100}function F(e){if(!e)return{numerator:0,denominator:0};const{passed:r}=e,o=u(e);return{numerator:r,denominator:o}}const Q=({check:e,track:r,lifecycles:o,owners:l,types:s,systems:c})=>{const n=N(),m=$();let i={};o?.length&&(i["spec.lifecycle"]=o),l?.length&&(i["relations.ownedBy"]=l),s?.length&&(i["spec.type"]=s),c?.length&&(i["relations.partOf"]=c),Object.keys(i).length===0&&(i=void 0);const{data:d,isLoading:k}=z({checkId:e.id,trackId:r.id,filter:i}),{data:g,isLoading:v}=A({checkId:e.id,trackId:r.id,numberOfDays:30,filter:i}),b={dataKey:"passRate",name:"Pass rate"},D=g?.history?.length??0,R=M(g),p=q(d);let f;d?f=`${p}%`:f="No Data";let h;if(!d)h="No Data";else{const{numerator:x,denominator:C}=F(d);C>0?h=`${x} of ${C} entities passing`:h=`${x} entities passing`}const y=t.createElement(a,{className:n.overallSummaryBox},t.createElement(W,{value:p,text:f,styles:j({textColor:w(m),pathColor:E(m,p),trailColor:m.palette.divider,textSize:D?void 0:10})}));return t.createElement(P,{className:n.card,elevation:0},t.createElement(a,{className:n.headerRow},t.createElement(a,{className:n.headerSection},t.createElement(I,{className:n.title},K(r,e)))),v||k?t.createElement(L,null):t.createElement(O,{title:h},t.createElement(a,{className:n.contentRow},y&&t.createElement(a,{className:n.leftSection},t.createElement(a,{className:n.summaryCard},y)),t.createElement(a,{className:n.chartSection},t.createElement(H,{data:R,lineConfig:b,color:E(m,p)})))))};export{Q as CheckCard};
1
+ import{makeStyles as $,useTheme as O,Box as a,Paper as P,Typography as T,Tooltip as I}from"@material-ui/core";import S from"@material-ui/lab/Skeleton";import{DateTime as W}from"luxon";import t from"react";import{CircularProgressbar as j,buildStyles as z}from"react-circular-progressbar";import{useCheckStatus as A}from"../../hooks/aggregations/useCheckStatus.esm.js";import{useCheckStatusHistory as G}from"../../hooks/aggregations/useCheckStatusHistory.esm.js";import{getChartFontColor as w,formatDate as H}from"../Charts/chartUtils.esm.js";import{getApplicableCheckCount as u}from"../TrackPage/TrackEntitiesTable/utils.esm.js";import{getProgressColor as E}from"../TrackPage/utils.esm.js";import{CheckHistoryChart as K}from"./CheckHistoryChart.esm.js";import{getCheckName as L}from"./utils.esm.js";const N=$(e=>({card:{display:"flex",flexDirection:"column",border:`1px solid ${e.palette.divider}`,width:"99%"},title:{fontWeight:"bold",fontSize:"0.9rem",cursor:"default",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},headerRow:{display:"flex",padding:e.spacing(1,1),borderBottom:`1px solid ${e.palette.divider}`,width:"100%"},headerSection:{display:"flex",flexDirection:"column",gap:e.spacing(.5),flexGrow:1,width:"100%"},contentRow:{padding:e.spacing(1,1,0),display:"flex"},leftSection:{width:"75px",minWidth:"75px"},summaryCard:{height:"100%",display:"flex",flexDirection:"column",justifyContent:"space-between"},chartSection:{flex:1,width:"100%",minWidth:"150px"},chartSkeletonSection:{flex:1,width:"100%",minWidth:"150px",padding:e.spacing(0,0,1,1)},overallSummaryBox:{display:"flex",flexDirection:"column",height:"100%",color:w(e),textAlign:"center",gap:e.spacing(2)}})),M=()=>{const e=N();return t.createElement(a,{className:e.contentRow},t.createElement(a,{className:e.leftSection},t.createElement(a,{className:e.summaryCard},t.createElement(S,{variant:"circle",height:75}))),t.createElement(a,{className:e.chartSkeletonSection},t.createElement(S,{variant:"rect",height:92})))};function q(e){if(!e)return[];const{history:r}=e,o=W.utc();return r.map((l,s)=>{const c=u(l);return{name:H(o,r.length-s-1),passRate:c?Math.round(l.passed/c*100):100}})}function F(e){if(!e)return 0;const{passed:r}=e,o=u(e);return o?Math.round(r/o*100):100}function J(e){if(!e)return{numerator:0,denominator:0};const{passed:r}=e,o=u(e);return{numerator:r,denominator:o}}const Q=({check:e,track:r,lifecycles:o,owners:l,types:s,systems:c,numberOfDays:k=30})=>{const n=N(),m=O();let i={};o?.length&&(i["spec.lifecycle"]=o),l?.length&&(i["relations.ownedBy"]=l),s?.length&&(i["spec.type"]=s),c?.length&&(i["relations.partOf"]=c),Object.keys(i).length===0&&(i=void 0);const{data:d,isLoading:v}=A({checkId:e.id,trackId:r.id,filter:i}),{data:g,isLoading:D}=G({checkId:e.id,trackId:r.id,numberOfDays:k,filter:i}),b={dataKey:"passRate",name:"Pass rate"},R=g?.history?.length??0,B=q(g),p=F(d);let f;d?f=`${p}%`:f="No Data";let h;if(!d)h="No Data";else{const{numerator:x,denominator:C}=J(d);C>0?h=`${x} of ${C} entities passing`:h=`${x} entities passing`}const y=t.createElement(a,{className:n.overallSummaryBox},t.createElement(j,{value:p,text:f,styles:z({textColor:w(m),pathColor:E(m,p),trailColor:m.palette.divider,textSize:R?void 0:10})}));return t.createElement(P,{className:n.card,elevation:0},t.createElement(a,{className:n.headerRow},t.createElement(a,{className:n.headerSection},t.createElement(T,{className:n.title},L(r,e)))),D||v?t.createElement(M,null):t.createElement(I,{title:h},t.createElement(a,{className:n.contentRow},y&&t.createElement(a,{className:n.leftSection},t.createElement(a,{className:n.summaryCard},y)),t.createElement(a,{className:n.chartSection},t.createElement(K,{data:B,lineConfig:b,color:E(m,p)})))))};export{Q as CheckCard};
2
2
  //# sourceMappingURL=CheckCard.esm.js.map
@@ -1,2 +1,2 @@
1
- import{MarkdownContent as u}from"@backstage/core-components";import{useEntity as g}from"@backstage/plugin-catalog-react";import{makeStyles as E,Box as y,Typography as n}from"@material-ui/core";import t from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useCheckDetails as k}from"../../hooks/checks/useCheckDetails.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{AlertPanel as v}from"../AlertPanel/AlertPanel.esm.js";import{RelativeTime as S}from"../RelativeTime/RelativeTime.esm.js";import{ResultStateBox as x}from"./ResultStateBox.esm.js";import{CheckDetailsSkeleton as B}from"./skeletons/CheckDetailsSkeleton.esm.js";const m=E(e=>({root:{padding:`${e.spacing(3)}px ${e.spacing(5)}px`},title:{fontWeight:"normal",fontSize:e.typography.h5.fontSize},description:{padding:`${e.spacing(3)}px 0`},subtitle:{fontWeight:"normal",fontSize:e.typography.h6.fontSize},topBar:{display:"flex",justifyContent:"space-between",marginBottom:e.spacing(2)}})),C=({programId:e,checkId:i})=>{const r=m(),{entity:s}=g(),{data:o,isLoading:p,isError:l}=k(s,e,i);if(l)return t.createElement(y,{padding:2},t.createElement(v,{severity:"error",title:"Error loading check details"}));if(p||!e||!i)return t.createElement(B,null);if(!o)return null;const{name:c,description:d,result:f,timestamp:a,notes:h}=o;return t.createElement("div",{className:r.root,"data-testid":"check-details-view"},t.createElement("div",{className:r.topBar},t.createElement(n,{variant:"h2",className:r.title},c),a?t.createElement(S,{timestamp:a,description:"Last updated"}):null),t.createElement(x,{state:f,notes:h}),t.createElement("div",{className:r.description,"data-testid":"soundcheck-check-details-description"},t.createElement(n,{variant:"h3",className:r.subtitle},"Description"),t.createElement(u,{content:d})))};export{C as CheckDetails,m as useStyles};
1
+ import{MarkdownContent as E}from"@backstage/core-components";import{useEntity as y}from"@backstage/plugin-catalog-react";import{makeStyles as k,Box as v,Typography as m}from"@material-ui/core";import t from"react";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useCheckDetails as S}from"../../hooks/checks/useCheckDetails.esm.js";import{useGetChecks as x}from"../../hooks/checks/useGetChecks.esm.js";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{AlertPanel as C}from"../AlertPanel/AlertPanel.esm.js";import{RelativeTime as B}from"../RelativeTime/RelativeTime.esm.js";import{ResultStateBox as N}from"./ResultStateBox.esm.js";import{CheckDetailsSkeleton as z}from"./skeletons/CheckDetailsSkeleton.esm.js";const s=k(e=>({root:{padding:`${e.spacing(3)}px ${e.spacing(5)}px`},title:{fontWeight:"normal",fontSize:e.typography.h5.fontSize},description:{padding:`${e.spacing(3)}px 0`},subtitle:{fontWeight:"normal",fontSize:e.typography.h6.fontSize},topBar:{display:"flex",justifyContent:"space-between",marginBottom:e.spacing(2)}})),D=({programId:e,checkId:r})=>{const i=s(),{entity:p}=y(),{data:a,isLoading:l,isError:c}=S(p,e,r),{data:d}=x({ids:[r??""],first:1}),f=d?.edges?.[0]?.node;if(c)return t.createElement(v,{padding:2},t.createElement(C,{severity:"error",title:"Error loading check details"}));if(l||!e||!r)return t.createElement(z,null);if(!a)return null;const{name:o,description:u,result:g,timestamp:n,notes:h}=a;return t.createElement("div",{className:i.root,"data-testid":"check-details-view"},t.createElement("div",{className:i.topBar},t.createElement(m,{variant:"h2",className:i.title},o),n?t.createElement(B,{timestamp:n,description:"Last updated"}):null),t.createElement(N,{name:o,state:g,notes:h,templateRef:f?.templateRef??void 0}),t.createElement("div",{className:i.description,"data-testid":"soundcheck-check-details-description"},t.createElement(m,{variant:"h3",className:i.subtitle},"Description"),t.createElement(E,{content:u})))};export{D as CheckDetails,s as useStyles};
2
2
  //# sourceMappingURL=CheckDetails.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{TableRow as t,TableCell as n,IconButton as i,Collapse as c}from"@material-ui/core";import p from"@material-ui/icons/KeyboardArrowDown";import u from"@material-ui/icons/KeyboardArrowUp";import e,{useState as s}from"react";const d=({title:a,children:o,defaultOpen:m=!0})=>{const[l,r]=s(m);return e.createElement(e.Fragment,null,e.createElement(t,null,e.createElement(n,{colSpan:2,padding:"normal",align:"left",size:"small"},e.createElement(i,{"aria-label":"expand row",size:"small",onClick:()=>r(!l)},l?e.createElement(u,null):e.createElement(p,null)),e.createElement("strong",null,a))),e.createElement(t,null,e.createElement(n,{style:{paddingBottom:0,paddingTop:0},colSpan:2,padding:"normal",align:"left",size:"small"},e.createElement(c,{in:l,timeout:"auto",unmountOnExit:!0},o))))};export{d as CollapseRow};
2
+ //# sourceMappingURL=CollapseRow.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{Progress as L}from"@backstage/core-components";import{useApi as u,errorApiRef as R}from"@backstage/core-plugin-api";import{useEntity as T}from"@backstage/plugin-catalog-react";import{scaffolderApiRef as b,useTemplateSecrets as I,useCustomFieldExtensions as B}from"@backstage/plugin-scaffolder-react";import{useTemplateParameterSchema as D,useFilteredSchemaProperties as F,Stepper as O}from"@backstage/plugin-scaffolder-react/alpha";import{makeStyles as P,Dialog as U,DialogTitle as A,Typography as N,IconButton as W,DialogContent as j}from"@material-ui/core";import G from"@material-ui/icons/Close";import J from"git-url-parse";import t,{useState as K,useEffect as M}from"react";import{useOutlet as Q}from"react-router-dom";import{OngoingTaskComponent as q}from"./OngoingTaskComponent.esm.js";import{ReviewStateComponent as z}from"./ReviewStateComponent.esm.js";class d{type;name;owner;lifecycle;title;description;sourceLocation;managedByLocation;slackChannel;entity;constructor(e){this.lifecycle=e.spec?.lifecycle||"unknown",this.name=e.metadata.name,this.owner=e.spec?.owner||"unknown",this.type=e.spec?.type||"unknown",this.title=e.metadata.title,this.description=e.metadata.description||"",this.sourceLocation=e.metadata.annotations?.["backstage.io/source-location"]?.replace("url:",""),this.managedByLocation=e.metadata.annotations?.["backstage.io/managed-by-location"],this.slackChannel=e.metadata.annotations?.["spotify.net/slack-channel"],this.entity=e}}const H=o=>{const e={};if(e.componentId=o.name,o.sourceLocation){const{name:n,owner:a,protocol:r,source:i}=J(o.sourceLocation);e.repoUrl=`${r}://${i}/${a}/${n}`,e.repo={host:i,org:a,repo:n,url:e.repoUrl,gitUrl:`git@${i}:${a}/${n}.git`,paramUrl:`${r}://${i}?owner=${a}&repo=${n}`}}e.facts=JSON.parse(o.entity.metadata.annotations?.["sysmodel.spotify.net/raw-component-facts"]||"{}");const s=o;return delete s.entity,{...e,...s}},V=P({titleContent:{display:"flex",justifyContent:"space-between",alignItems:"center"}}),X=o=>{const{title:e,open:s,setOpen:n,onClose:a,templateRef:r}=o,i=V(),c=u(R),y=u(b),{loading:g,manifest:h,error:l}=D(r),{secrets:w}=I(),E=Q(),k=B(E),m=F(h),{entity:C}=T(),[p,f]=K(void 0),$=async x=>{const{taskId:v}=await y.scaffold({templateRef:r,values:x,secrets:w});f(v)},S=()=>{n(!1),f(void 0)};return M(()=>{l&&c.post(new Error(`Failed to load template, ${l}`))},[l,c]),t.createElement(U,{open:s,onClose:a,fullWidth:!0,maxWidth:"md"},t.createElement(A,null,t.createElement("div",{className:i.titleContent},t.createElement(N,{variant:"h5"},e),t.createElement(W,{onClick:S},t.createElement(G,null)))),t.createElement(j,null,g&&t.createElement(L,null),p?t.createElement(q,{taskId:p}):m&&t.createElement(O,{manifest:m,onCreate:$,extensions:k,components:{createButtonText:"Execute",ReviewStateComponent:z},initialState:{backstage:H(new d(C))},...o})))};export{X as FixMeDialog,d as SimplifiedEntity};
2
+ //# sourceMappingURL=FixMeDialog.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{Content as l,ErrorPanel as i}from"@backstage/core-components";import{useTaskEventStream as c}from"@backstage/plugin-scaffolder-react";import{TaskSteps as u,DefaultTemplateOutputs as f}from"@backstage/plugin-scaffolder-react/alpha";import{makeStyles as E,Box as n}from"@material-ui/core";import r,{useMemo as m}from"react";const d=E({contentWrapper:{display:"flex",flexDirection:"column"}}),k=s=>{const e=c(s.taskId),o=m(()=>e.task?.spec.steps.map(t=>({...t,...e?.steps?.[t.id]}))??[],[e]),p=m(()=>{for(let t=o.length-1;t>=0;t--)if(o[t].status!=="open")return t;return 0},[o]),a=d();return r.createElement(l,{className:a.contentWrapper},e.error?r.createElement(n,{paddingBottom:2},r.createElement(i,{error:e.error,title:e.error.message})):null,r.createElement(n,{paddingBottom:2},r.createElement(u,{steps:o,activeStep:p,isComplete:e.completed,isError:!!e.error})),r.createElement(f,{output:e.output}))};export{k as OngoingTaskComponent};
2
+ //# sourceMappingURL=OngoingTaskComponent.esm.js.map
@@ -1,2 +1,2 @@
1
- import{MarkdownContent as l}from"@backstage/core-components";import{makeStyles as m,useTheme as s,Paper as c,Typography as d}from"@material-ui/core";import g from"@material-ui/icons/CheckCircleOutlined";import u from"@material-ui/icons/ErrorOutline";import n from"@material-ui/icons/InfoOutlined";import k from"@material-ui/icons/RemoveCircleOutline";import f from"@material-ui/icons/WarningOutlined";import a from"react";import{ResultState as e}from"../../graphql/generated/index.esm.js";const C=m(t=>({markdownContent:{"& :last-child":{marginBottom:0},"& pre":{background:`${t.palette.background.paper} !important`}},root:{padding:t.spacing(2),display:"flex",gap:t.spacing(1.5)},iconContainer:{marginTop:1},passed:{},failed:{},warning:{},notReported:{},notApplicable:{},error:{},icon:{}}),{name:"CheckResultStateBox"}),N={[e.Passed]:g,[e.Failed]:u,[e.Warning]:f,[e.NotReported]:n,[e.NotApplicable]:n,[e.Error]:k},b={[e.Passed]:"Check passed",[e.Failed]:"Check did not pass",[e.Warning]:"Check produced warning(s)",[e.NotReported]:"Check not reported",[e.NotApplicable]:"Check not applicable",[e.Error]:"Check encountered an error."},h={[e.Passed]:"passed",[e.Failed]:"failed",[e.Warning]:"warning",[e.NotReported]:"notReported",[e.NotApplicable]:"notApplicable",[e.Error]:"error"},E=(t,r)=>({[e.Passed]:r.palette.success.main,[e.Failed]:r.palette.error.main,[e.Warning]:r.palette.warning.main,[e.NotReported]:r.palette.text.primary,[e.NotApplicable]:r.palette.text.primary,[e.Error]:r.palette.error.main})[t],R=({state:t,notes:r})=>{const o=C(),i=s(),p=N[t]??n;return a.createElement(c,{variant:"outlined",className:`${o.root} ${o[h[t]]}`},a.createElement("div",{className:o.iconContainer},a.createElement(p,{className:o.icon,htmlColor:E(t,i)})),a.createElement("div",null,a.createElement(d,{variant:"subtitle1"},b[t]),r?a.createElement(l,{className:o.markdownContent,content:r}):null))};export{R as ResultStateBox};
1
+ import{MarkdownContent as u}from"@backstage/core-components";import{useApi as k,configApiRef as C}from"@backstage/core-plugin-api";import{makeStyles as h,useTheme as x,Paper as E,Typography as R,Box as N,Button as b}from"@material-ui/core";import y from"@material-ui/icons/CheckCircleOutlined";import w from"@material-ui/icons/ErrorOutline";import i from"@material-ui/icons/InfoOutlined";import A from"@material-ui/icons/RemoveCircleOutline";import F from"@material-ui/icons/WarningOutlined";import r,{useState as S}from"react";import{ResultState as e}from"../../graphql/generated/index.esm.js";import{FixMeDialog as v}from"./FixMeDialog.esm.js";const B=h(a=>({markdownContent:{"& :last-child":{marginBottom:0},"& pre":{background:`${a.palette.background.paper} !important`}},root:{padding:a.spacing(2),display:"flex",gap:a.spacing(1.5)},iconContainer:{marginTop:1},passed:{},failed:{},warning:{},notReported:{},notApplicable:{},error:{},icon:{}}),{name:"CheckResultStateBox"}),P={[e.Passed]:y,[e.Failed]:w,[e.Warning]:F,[e.NotReported]:i,[e.NotApplicable]:i,[e.Error]:A},W={[e.Passed]:"Check passed",[e.Failed]:"Check did not pass",[e.Warning]:"Check produced warning(s)",[e.NotReported]:"Check not reported",[e.NotApplicable]:"Check not applicable",[e.Error]:"Check encountered an error."},$={[e.Passed]:"passed",[e.Failed]:"failed",[e.Warning]:"warning",[e.NotReported]:"notReported",[e.NotApplicable]:"notApplicable",[e.Error]:"error"},O=(a,t)=>({[e.Passed]:t.palette.success.main,[e.Failed]:t.palette.error.main,[e.Warning]:t.palette.warning.main,[e.NotReported]:t.palette.text.primary,[e.NotApplicable]:t.palette.text.primary,[e.Error]:t.palette.error.main})[a],T=({name:a,state:t,notes:l,templateRef:p})=>{const n=B(),m=x(),c=P[t]??i,[s,o]=S(!1),d=k(C).getOptionalStringArray("soundcheck.flags")?.includes("enable-fix-me"),g=()=>{o(!0)},f=()=>{o(!1)};return r.createElement(E,{variant:"outlined",className:`${n.root} ${n[$[t]]}`},r.createElement("div",{className:n.iconContainer},r.createElement(c,{className:n.icon,htmlColor:O(t,m)})),r.createElement("div",{style:{width:"100%"}},r.createElement(R,{variant:"subtitle1"},W[t]),l?r.createElement(u,{className:n.markdownContent,content:l}):null,d&&t===e.Failed&&p&&r.createElement(N,{display:"flex",flexDirection:"column",alignItems:"flex-end",mt:2,width:"100%"},r.createElement(b,{color:"primary",variant:"contained",onClick:g},"Fix"),r.createElement(v,{title:`Fix ${a}`,open:s,setOpen:o,onClose:f,templateRef:p}))))};export{T as ResultStateBox};
2
2
  //# sourceMappingURL=ResultStateBox.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{useTheme as u,Typography as r,TableContainer as E,Table as o,TableBody as m,TableRow as d,TableCell as i}from"@material-ui/core";import{styled as f}from"@mui/styles";import e from"react";import{CollapseRow as c}from"./CollapseRow.esm.js";const s=f("pre")({fontSize:".9em",lineHeight:"1.6",maxHeight:"250px",width:"100%",overflow:"scroll"}),b=n=>{const p=u(),t={...n.formState};delete t.backstage;const g={...n.formState.backstage};return e.createElement(e.Fragment,null,e.createElement(r,{variant:"h6",style:{marginBottom:31}},"The codemod will run with the following input:"),e.createElement(E,null,e.createElement(o,{"aria-label":"collapsible table"},e.createElement(m,null,e.createElement(c,{title:"Context",defaultOpen:!1},e.createElement(s,null,JSON.stringify(g,null,2))),Object.keys(t).length>0&&e.createElement(c,{title:"Input"},e.createElement("div",{style:{width:"auto",paddingTop:p.spacing(1),alignContent:"center"}},e.createElement(o,{style:{width:"100%"}},e.createElement(m,null,Object.entries(t).map(([a,l])=>e.createElement(d,{key:a},e.createElement(i,{padding:"normal",align:"left",size:"small"},e.createElement("strong",null,a)),e.createElement(i,{padding:"normal",align:"left",size:"small"},typeof l=="object"?e.createElement(s,null,JSON.stringify(l,null,2)):e.createElement(r,null,l?.toString()))))))))))))};export{b as ReviewStateComponent};
2
+ //# sourceMappingURL=ReviewStateComponent.esm.js.map