@spotify/backstage-plugin-soundcheck 0.18.1 → 0.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/config.d.ts +21 -0
  3. package/dist/alpha/apis.esm.js +1 -1
  4. package/dist/alpha/entity-content.esm.js +1 -1
  5. package/dist/alpha/pages.esm.js +1 -1
  6. package/dist/alpha/plugin.esm.js +1 -1
  7. package/dist/alpha.d.ts +83 -77
  8. package/dist/api.esm.js +1 -1
  9. package/dist/components/Badges/CampaignBadge.esm.js +1 -1
  10. package/dist/components/Badges/StatusBadge.esm.js +1 -1
  11. package/dist/components/CacheConfig/CacheConfigComponent.esm.js +1 -1
  12. package/dist/components/CampaignForm/CampaignForm.esm.js +1 -1
  13. package/dist/components/CampaignForm/Steps/CampaignTrackStepNew.esm.js +1 -1
  14. package/dist/components/CampaignForm/hooks/utils.esm.js +1 -1
  15. package/dist/components/CampaignForm/utils/campaignFormUtils.esm.js +2 -2
  16. package/dist/components/CampaignForm/utils/validation.esm.js +1 -1
  17. package/dist/components/CampaignInsightsPage/CampaignInsightsPage.esm.js +1 -1
  18. package/dist/components/CampaignInsightsPage/CampaignStatusHistoryTile.esm.js +1 -1
  19. package/dist/components/CampaignInsightsPage/CampaignStatusTile.esm.js +1 -1
  20. package/dist/components/CampaignInsightsPage/DaysRemainingTile.esm.js +1 -1
  21. package/dist/components/CampaignsPage/CampaignListPage/CampaignListPage.esm.js +1 -1
  22. package/dist/components/CampaignsPage/CampaignsPage.esm.js +1 -1
  23. package/dist/components/CategoryBar/CategoryBar.esm.js +1 -1
  24. package/dist/components/CertificationSidebar/Check.esm.js +1 -1
  25. package/dist/components/CertificationsPage/CertificationTabs.esm.js +1 -1
  26. package/dist/components/CheckDetails/FixMeDialog.esm.js +1 -1
  27. package/dist/components/CheckForm/FormFields/RuleInput/AddMenuButton.esm.js +1 -1
  28. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/RuleConditionInput.esm.js +1 -1
  29. package/dist/components/CheckForm/utils/checkFormUtils.esm.js +2 -2
  30. package/dist/components/CheckIcon/CheckIcon.esm.js +1 -1
  31. package/dist/components/CheckPage/CheckEntitiesTable/CheckEntitiesTable.esm.js +1 -1
  32. package/dist/components/CheckPage/CheckEntitiesTable/columns.esm.js +1 -1
  33. package/dist/components/CheckPage/CheckInsightsPage.esm.js +1 -1
  34. package/dist/components/CheckPage/CheckStatusTable.esm.js +1 -1
  35. package/dist/components/CheckTemplatesPage/CheckTemplatesPage.esm.js +1 -1
  36. package/dist/components/ChecksPage/CheckListPage/CheckListPage.esm.js +1 -1
  37. package/dist/components/ChecksPage/ChecksPage.esm.js +1 -1
  38. package/dist/components/CollapsablePanel/CollapsablePanel.esm.js +1 -1
  39. package/dist/components/CollectorPage/CollectorDetailsPage.esm.js +1 -1
  40. package/dist/components/CollectorPage/CollectorPage.esm.js +1 -1
  41. package/dist/components/CollectorPage/Configurators/AzureDevOps/AzureDevOpsConfigurator.esm.js +1 -1
  42. package/dist/components/CollectorPage/Configurators/AzureDevOps/NumberOfWorkItemsComponent.esm.js +1 -1
  43. package/dist/components/CollectorPage/Configurators/BigQuery/BigQueryConfigurator.esm.js +1 -1
  44. package/dist/components/CollectorPage/Configurators/BigQuery/QueryFactDetailsComponent.esm.js +1 -1
  45. package/dist/components/CollectorPage/Configurators/Catalog/CatalogConfigurator.esm.js +1 -1
  46. package/dist/components/CollectorPage/Configurators/Common/CollectorConfigAlert.esm.js +2 -0
  47. package/dist/components/CollectorPage/Configurators/Common/PortalConfigAlert.esm.js +2 -0
  48. package/dist/components/CollectorPage/Configurators/Common/utils.esm.js +1 -1
  49. package/dist/components/CollectorPage/Configurators/DataDog/DataDogConfigurator.esm.js +1 -1
  50. package/dist/components/CollectorPage/Configurators/DataRegistry/DataRegistryConfigurator.esm.js +1 -1
  51. package/dist/components/CollectorPage/Configurators/Github/GithubConfigurator.esm.js +1 -1
  52. package/dist/components/CollectorPage/Configurators/Gitlab/GitlabConfigurator.esm.js +1 -1
  53. package/dist/components/CollectorPage/Configurators/HTTP/HttpConfigurator.esm.js +1 -1
  54. package/dist/components/CollectorPage/Configurators/HTTP/HttpRequestComponent.esm.js +1 -1
  55. package/dist/components/CollectorPage/Configurators/HTTP/HttpStatusesInput.esm.js +1 -1
  56. package/dist/components/CollectorPage/Configurators/Jira/JiraConfigurator.esm.js +1 -1
  57. package/dist/components/CollectorPage/Configurators/Kubernetes/KubernetesConfigurator.esm.js +1 -1
  58. package/dist/components/CollectorPage/Configurators/NewRelic/NewRelicConfigurator.esm.js +1 -1
  59. package/dist/components/CollectorPage/Configurators/PagerDuty/PagerDutyConfigurator.esm.js +1 -1
  60. package/dist/components/CollectorPage/Configurators/SCM/ScmConfigurator.esm.js +1 -1
  61. package/dist/components/CollectorPage/Configurators/SonarQube/SonarQubeConfigurator.esm.js +1 -1
  62. package/dist/components/CollectorsPage/CollectorsPage.esm.js +1 -1
  63. package/dist/components/ColorChip/ColorChip.esm.js +1 -1
  64. package/dist/components/EmptyState/EmptyState.esm.js +1 -1
  65. package/dist/components/EntitiesAutocompletePicker/EntitiesAutocompletePicker.esm.js +1 -1
  66. package/dist/components/ExpandableSection/ExpandableSection.esm.js +1 -1
  67. package/dist/components/FactExplorer/FactExplorer.esm.js +1 -1
  68. package/dist/components/Filter/EntityAutocompletePicker.esm.js +1 -1
  69. package/dist/components/FilterSidebar/StateFilter.esm.js +1 -1
  70. package/dist/components/FilterSidebar/useTrackFilterSidebar.esm.js +2 -0
  71. package/dist/components/Frequency/FrequencyComponent.esm.js +1 -1
  72. package/dist/components/Frequency/util.esm.js +1 -1
  73. package/dist/components/GroupHierarchySelector/GroupHierarchyChip.esm.js +1 -1
  74. package/dist/components/GroupHierarchySelector/GroupHierarchyGroupInfo.esm.js +1 -1
  75. package/dist/components/GroupHierarchySelector/GroupHierarchySelector.esm.js +1 -1
  76. package/dist/components/GroupHierarchySelector/GroupHierarchySelectorDialog.esm.js +1 -1
  77. package/dist/components/GroupHierarchySelector/getAllOwnedEntityCount.esm.js +2 -0
  78. package/dist/components/{TechInsights → HierarchicalTechInsightsPage}/ColorLegend.esm.js +1 -1
  79. package/dist/components/HierarchicalTechInsightsPage/HierarchicalTechInsightsPage.esm.js +2 -0
  80. package/dist/components/HierarchicalTechInsightsPage/HierarchyTable.esm.js +2 -0
  81. package/dist/components/HierarchicalTechInsightsPage/LowestPerformingTeams.esm.js +2 -0
  82. package/dist/components/HierarchicalTechInsightsPage/SelectedNodeSidebar.esm.js +2 -0
  83. package/dist/components/HierarchicalTechInsightsPage/TeamPerformanceCard.esm.js +2 -0
  84. package/dist/components/HierarchicalTechInsightsPage/TopPerformingTeams.esm.js +2 -0
  85. package/dist/components/HierarchicalTechInsightsPage/getLeafNodes.esm.js +2 -0
  86. package/dist/components/HierarchicalTechInsightsPage/visualizations/LoadingOverlay.esm.js +2 -0
  87. package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoCirclePacking.esm.js +2 -0
  88. package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoHeatmap.esm.js +2 -0
  89. package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoIcicle.esm.js +2 -0
  90. package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoSunburst.esm.js +2 -0
  91. package/dist/components/HierarchicalTechInsightsPage/visualizations/NivoTreemap.esm.js +2 -0
  92. package/dist/components/HierarchicalTechInsightsPage/visualizations/VisualizationBreadcrumb.esm.js +2 -0
  93. package/dist/components/HierarchicalTechInsightsPage/visualizations/findNodePath.esm.js +2 -0
  94. package/dist/components/HierarchicalTechInsightsPage/visualizations/hierarchyToNivo.esm.js +2 -0
  95. package/dist/components/ImportExportPanel/ImportExportPanel.esm.js +1 -1
  96. package/dist/components/LevelsTable/LevelsTable.esm.js +1 -1
  97. package/dist/components/OverviewPage/OverviewPage.esm.js +1 -1
  98. package/dist/components/OverviewPage/OverviewPageContent.esm.js +1 -1
  99. package/dist/components/PassRateGrid/PassRateMetadata.esm.js +1 -1
  100. package/dist/components/QuickstartPage/QuickstartPage.esm.js +2 -2
  101. package/dist/components/QuickstartPage/styles.esm.js +1 -1
  102. package/dist/components/RoutingPage/NewFeatureTab.esm.js +2 -0
  103. package/dist/components/RoutingPage/RoutingPage.esm.js +1 -1
  104. package/dist/components/SearchBar/SearchBar.esm.js +1 -1
  105. package/dist/components/SoundcheckEntityLink/SoundcheckEntityLink.esm.js +2 -0
  106. package/dist/components/SoundcheckHeader/headerUtil.esm.js +1 -1
  107. package/dist/components/TechHealth/Filters/FacetFilter.esm.js +1 -1
  108. package/dist/components/TechHealth/TechHealth.esm.js +1 -1
  109. package/dist/components/TechHealthTabs/PassRateTabHeader.esm.js +1 -1
  110. package/dist/components/TechInsights/FilterControls.esm.js +1 -1
  111. package/dist/components/TechInsights/SummaryTiles.esm.js +1 -1
  112. package/dist/components/TechInsights/TechInsightsCardsView.esm.js +1 -1
  113. package/dist/components/TechInsights/TechInsightsPage.esm.js +2 -0
  114. package/dist/components/TechInsights/TechInsightsTableView.esm.js +1 -1
  115. package/dist/components/TechInsights/TrackStatusCard.esm.js +2 -0
  116. package/dist/components/TechInsights/ViewModeControls.esm.js +1 -1
  117. package/dist/components/TechInsights/convertToCommonTrackStatus.esm.js +2 -0
  118. package/dist/components/TopFailingChecksTable/TopFailingChecksTable.esm.js +1 -1
  119. package/dist/components/TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js +1 -1
  120. package/dist/components/TrackPage/TrackEntitiesTable/columns.esm.js +1 -1
  121. package/dist/components/TrackPage/TrackHistoryChart.esm.js +1 -1
  122. package/dist/components/TrackPage/TrackPage.esm.js +1 -1
  123. package/dist/components/TrackPage/TrackStatusBar.esm.js +1 -1
  124. package/dist/components/TrackPage/TrackStatusTable.esm.js +1 -1
  125. package/dist/components/TrackSelection/TrackSelection.esm.js +1 -1
  126. package/dist/components/TracksPage/TrackListPage/TrackListPage.esm.js +1 -1
  127. package/dist/components/TracksPage/TrackListPage/TrackSummaryCard.esm.js +1 -1
  128. package/dist/components/TracksPage/TracksPage.esm.js +1 -1
  129. package/dist/graphql/generated/index.esm.js +113 -115
  130. package/dist/hooks/campaigns/useCreateCampaign.esm.js +1 -1
  131. package/dist/hooks/campaigns/useGetCampaigns.esm.js +1 -1
  132. package/dist/hooks/catalog/useGetLimitedEntityRefs.esm.js +2 -0
  133. package/dist/hooks/collectors/useDeleteCollectorConfig.esm.js +2 -0
  134. package/dist/hooks/graphqlKeys.esm.js +1 -1
  135. package/dist/hooks/heirarchy/useBatchedHierarchicalTrackStatuses.esm.js +1 -1
  136. package/dist/hooks/heirarchy/useGroupHierarchy.esm.js +1 -1
  137. package/dist/hooks/heirarchy/useGroupTypeHierarchy.esm.js +1 -1
  138. package/dist/hooks/heirarchy/useHierarchicalTrackStatus.esm.js +1 -1
  139. package/dist/hooks/tracks/useCreateTrack.esm.js +1 -1
  140. package/dist/hooks/tracks/useGetAllTracks.esm.js +1 -1
  141. package/dist/hooks/useFeatureFlag.esm.js +1 -1
  142. package/dist/hooks/useLCPReporting.esm.js +2 -0
  143. package/dist/index.d.ts +2 -3
  144. package/dist/index.esm.js +1 -1
  145. package/dist/utils/colors.esm.js +1 -1
  146. package/dist/utils/lcpReporting.esm.js +2 -0
  147. package/package.json +17 -15
  148. package/dist/components/CheckCard/CheckCard.esm.js +0 -2
  149. package/dist/components/CheckCard/CheckHistoryChart.esm.js +0 -2
  150. package/dist/components/CheckCard/utils.esm.js +0 -2
  151. package/dist/components/MultiSelectFilter/MultiSelectFilter.esm.js +0 -2
  152. package/dist/components/QuickstartPage/WelcomeModal.esm.js +0 -2
  153. package/dist/components/TechInsights/ColorSchemeSelector.esm.js +0 -2
  154. package/dist/components/TechInsights/HierarchicalTechInsightsPage.esm.js +0 -2
  155. package/dist/components/TechInsights/HierarchyTable.esm.js +0 -2
  156. package/dist/components/TechInsights/LoadingOverlay.esm.js +0 -2
  157. package/dist/components/TechInsights/LowestPerformingTeams.esm.js +0 -2
  158. package/dist/components/TechInsights/NivoCirclePacking.esm.js +0 -2
  159. package/dist/components/TechInsights/NivoIcicle.esm.js +0 -2
  160. package/dist/components/TechInsights/NivoSunburst.esm.js +0 -2
  161. package/dist/components/TechInsights/NivoTreemap.esm.js +0 -2
  162. package/dist/components/TechInsights/SelectedNodeSidebar.esm.js +0 -2
  163. package/dist/components/TechInsights/TeamComparison/FailingComponentsTable.esm.js +0 -2
  164. package/dist/components/TechInsights/TeamComparison/MultiCheckStatusHistoryChart.esm.js +0 -2
  165. package/dist/components/TechInsights/TeamPerformanceCard.esm.js +0 -2
  166. package/dist/components/TechInsights/TechInsightsChartView.esm.js +0 -2
  167. package/dist/components/TechInsights/TechInsightsPage2.esm.js +0 -2
  168. package/dist/components/TechInsights/TechInsightsViewSelector.esm.js +0 -2
  169. package/dist/components/TechInsights/Tiles/TileUtils.esm.js +0 -2
  170. package/dist/components/TechInsights/Tiles/TrackStatusCard.esm.js +0 -2
  171. package/dist/components/TechInsights/TopPerformingTeams.esm.js +0 -2
  172. package/dist/components/TechInsights/VisualizationBreadcrumb.esm.js +0 -2
  173. package/dist/components/TechInsights/colorContrast.esm.js +0 -2
  174. package/dist/components/TechInsights/findNodePath.esm.js +0 -2
  175. package/dist/components/TechInsights/hierarchy/GroupNode.esm.js +0 -2
  176. package/dist/components/TechInsights/hierarchy/Hierarchy.esm.js +0 -2
  177. package/dist/components/TechInsights/hierarchyToNivo.esm.js +0 -2
  178. package/dist/components/TechInsights/persistence/FavoriteViews.esm.js +0 -2
  179. package/dist/components/TechInsights/styles.esm.js +0 -2
  180. package/dist/components/TrackPage/FilterBar/FilterBar.esm.js +0 -2
  181. package/dist/hooks/aggregations/useCheckStatusHistories.esm.js +0 -2
  182. package/dist/hooks/heirarchy/useGetDescendentsOfGroups.esm.js +0 -2
  183. /package/dist/components/{TrackPage/FilterBar → FilterSidebar}/util.esm.js +0 -0
  184. /package/dist/components/{TechInsights → HierarchicalTechInsightsPage}/TeamPerformanceListCard.esm.js +0 -0
  185. /package/dist/components/{TechInsights → TeamStatusBar}/TeamStatusBar.esm.js +0 -0
  186. /package/dist/components/{TechInsights → TechInsightsGroupSelector}/TechInsightsGroupSelector.esm.js +0 -0
@@ -1,2 +1,2 @@
1
- import{jsxs as m,Fragment as w,jsx as o}from"react/jsx-runtime";import{makeStyles as b,Paper as S,Divider as s}from"@material-ui/core";import{useForm as N,FormProvider as y}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as R}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as v}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as B}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as F}from"../../../../routes.esm.js";import{FooterButtons as x}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as P}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as r}from"../Common/FactCollectionConfig.esm.js";import{collectorHeaderContent as E,confirmationModalContent as M}from"../Common/utils.esm.js";import{mapConfigToNewRelicCollectorConfig as T,defaultNewRelicConfig as j,mapNewRelicCollectorConfigToConfig as k}from"./utils.esm.js";const H=b(e=>({spacer:{height:e.spacing(8),width:"100%"},section:{marginBottom:e.spacing(2)},form:{marginBottom:e.spacing(2)}})),A=({disabled:e,selectedCollector:i})=>{const a=N({defaultValues:i?T(i.config):j(),mode:"onChange"}),{formState:{errors:t},handleSubmit:n}=a,c=H(),p=!!t.entity||!!t.entitySearch||!!t.policiesSearch,{mutateAsync:d}=B(),[f,g]=v(F),{showModal:u}=R(),l=async C=>{if(!await u(M(i)))return;const h=k(C);await d({collectorId:i.id,config:h})&&g()};return P(E(i)),m(w,{children:[o(S,{className:c.form,children:o(y,{...a,children:m("form",{onSubmit:n(l),children:[o(r,{name:"entity",label:"Entity",description:"Collects details about New Relic entity with a specific id.",disabled:e}),o(s,{}),o(r,{name:"entitySearch",label:"Entity Search",description:"Collects details about New Relic entities with a specific tag.",disabled:e}),o(s,{}),o(r,{name:"policiesSearch",label:"Policies Search",description:"Collects details about New Relic policies for a specific account.",disabled:e})]})})}),o("div",{className:c.section,children:o(x,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:n(l),disableSave:p})})]})};export{A as NewRelicConfigurator};
1
+ import{jsxs as m,Fragment as w,jsx as o}from"react/jsx-runtime";import{makeStyles as b,Paper as S,Divider as s}from"@material-ui/core";import{useForm as y,FormProvider as R}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as v}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as B}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as F}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as x}from"../../../../routes.esm.js";import{FooterButtons as P}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as E}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as r}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as I}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as M,confirmationModalContent as T}from"../Common/utils.esm.js";import{mapConfigToNewRelicCollectorConfig as j,defaultNewRelicConfig as k,mapNewRelicCollectorConfigToConfig as A}from"./utils.esm.js";const H=b(e=>({spacer:{height:e.spacing(8),width:"100%"},section:{marginBottom:e.spacing(2)},form:{marginBottom:e.spacing(2)}})),U=({disabled:e,selectedCollector:i})=>{const a=y({defaultValues:i?j(i.config):k(),mode:"onChange"}),{formState:{errors:t},handleSubmit:c}=a,n=H(),p=!!t.entity||!!t.entitySearch||!!t.policiesSearch,{mutateAsync:d}=F(),[f,g]=B(x),{showModal:C}=v(),l=async h=>{if(!await C(T(i)))return;const N=A(h);await d({collectorId:i.id,config:N})&&g()};E(M(i));const u=!i.config?.apiKey;return m(w,{children:[o(I,{collectorName:"NewRelic",collectorId:i.id,invalidConfig:u,hasNonUIOptions:!0}),o(S,{className:n.form,children:o(R,{...a,children:m("form",{onSubmit:c(l),children:[o(r,{name:"entity",label:"Entity",description:"Collects details about New Relic entity with a specific id.",disabled:e}),o(s,{}),o(r,{name:"entitySearch",label:"Entity Search",description:"Collects details about New Relic entities with a specific tag.",disabled:e}),o(s,{}),o(r,{name:"policiesSearch",label:"Policies Search",description:"Collects details about New Relic policies for a specific account.",disabled:e})]})})}),o("div",{className:n.section,children:o(P,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:c(l),disableSave:p})})]})};export{U as NewRelicConfigurator};
2
2
  //# sourceMappingURL=NewRelicConfigurator.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as m,Fragment as y,jsx as o}from"react/jsx-runtime";import{zodResolver as b}from"@hookform/resolvers/zod";import{makeStyles as D,Paper as S,Divider as c}from"@material-ui/core";import{useForm as h,FormProvider as P}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as T}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as L}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as E}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as w}from"../../../../routes.esm.js";import{FooterButtons as F}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as R}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as r}from"../Common/FactCollectionConfig.esm.js";import{collectorHeaderContent as N,confirmationModalContent as I}from"../Common/utils.esm.js";import{IncidentsFactDetailsComponent as O}from"./IncidentsFactDetailsComponent.esm.js";import{mapConfigToPagerDutyCollectorConfig as _,defaultPagerDutyConfig as k,SERVICE_COLLECTOR_TYPE as x,STANDARDS_COLLECTOR_TYPE as B,INCIDENTS_COLLECTOR_TYPE as A,incidentsCollectorConfig as M,mapPagerDutyCollectorConfigToConfig as Y}from"./utils.esm.js";import{pagerDutyCollectorFormSchema as j}from"./validation.esm.js";const H=D(e=>({spacer:{height:e.spacing(8),width:"100%"},section:{marginBottom:e.spacing(2)}})),V=({disabled:e,selectedCollector:t})=>{const a=h({defaultValues:t?_(t.config):k(),mode:"onChange",resolver:b(j)}),{formState:{errors:i},handleSubmit:n}=a,s=H(),d=!!i.service||!!i.standards||!!i.incidents,{mutateAsync:p}=E(),[C,f]=L(w),{showModal:g}=T(),l=async u=>{if(!await g(I(t)))return;const v=Y(u);await p({collectorId:t.id,config:v})&&f()};return R(N(t)),m(y,{children:[o(S,{className:s.section,children:o(P,{...a,children:m("form",{onSubmit:n(l),children:[o(r,{name:x.toLowerCase(),label:"Service",description:"Collects details about PagerDuty service linked to an entity.",disabled:e}),o(c,{}),o(r,{name:B.toLowerCase(),label:"Standards",description:"Collects details about standards applied to a PagerDuty service linked to an entity.",disabled:e}),o(c,{}),o(r,{name:A.toLowerCase(),label:"Incidents",description:"Collects details about incidents associated with a PagerDuty service linked to an entity.",disabled:e,FactDetailsComponent:O,multipleCollectors:{enable:!0,defaultConfig:M(t.config)}})]})})}),o("div",{className:s.section,children:o(F,{onCancel:C,saveButtonText:"Save",isLoading:!1,onSave:n(l),disableSave:d})})]})};export{V as PagerDutyConfigurator};
1
+ import{jsxs as m,Fragment as D,jsx as o}from"react/jsx-runtime";import{zodResolver as P}from"@hookform/resolvers/zod";import{makeStyles as b,Paper as h,Divider as c}from"@material-ui/core";import{useForm as S,FormProvider as T}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as L}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as E}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as N}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as w}from"../../../../routes.esm.js";import{FooterButtons as F}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as I}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as r}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as R}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as O,confirmationModalContent as k}from"../Common/utils.esm.js";import{IncidentsFactDetailsComponent as _}from"./IncidentsFactDetailsComponent.esm.js";import{mapConfigToPagerDutyCollectorConfig as x,defaultPagerDutyConfig as A,SERVICE_COLLECTOR_TYPE as B,STANDARDS_COLLECTOR_TYPE as M,INCIDENTS_COLLECTOR_TYPE as Y,incidentsCollectorConfig as j,mapPagerDutyCollectorConfigToConfig as H}from"./utils.esm.js";import{pagerDutyCollectorFormSchema as U}from"./validation.esm.js";const V=b(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),z=({disabled:t,selectedCollector:e})=>{const a=S({defaultValues:e?x(e.config):A(),mode:"onChange",resolver:P(U)}),{formState:{errors:i},handleSubmit:n}=a,l=V(),d=!!i.service||!!i.standards||!!i.incidents,{mutateAsync:p}=N(),[f,C]=E(w),{showModal:g}=L(),s=async v=>{if(!await g(k(e)))return;const y=H(v);await p({collectorId:e.id,config:y})&&C()};I(O(e));const u=!e.config?.token||!e.config?.server;return m(D,{children:[o(R,{collectorName:"PagerDuty",collectorId:e.id,invalidConfig:u,hasNonUIOptions:!0}),o(h,{className:l.section,children:o(T,{...a,children:m("form",{onSubmit:n(s),children:[o(r,{name:B.toLowerCase(),label:"Service",description:"Collects details about PagerDuty service linked to an entity.",disabled:t}),o(c,{}),o(r,{name:M.toLowerCase(),label:"Standards",description:"Collects details about standards applied to a PagerDuty service linked to an entity.",disabled:t}),o(c,{}),o(r,{name:Y.toLowerCase(),label:"Incidents",description:"Collects details about incidents associated with a PagerDuty service linked to an entity.",disabled:t,FactDetailsComponent:_,multipleCollectors:{enable:!0,defaultConfig:j(e.config)}})]})})}),o("div",{className:l.section,children:o(F,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:n(s),disableSave:d})})]})};export{z as PagerDutyConfigurator};
2
2
  //# sourceMappingURL=PagerDutyConfigurator.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as f,Fragment as v,jsx as o}from"react/jsx-runtime";import{zodResolver as y}from"@hookform/resolvers/zod";import{makeStyles as O,Paper as T,Divider as d}from"@material-ui/core";import{useCallback as L,useMemo as R}from"react";import{useForm as N,FormProvider as D}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as M}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as j}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as P}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as _}from"../../../../routes.esm.js";import{FooterButtons as w}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as J}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as s}from"../Common/FactCollectionConfig.esm.js";import{collectorHeaderContent as Y,confirmationModalContent as B}from"../Common/utils.esm.js";import{ExistsFactDetailsComponent as k}from"./ExistsFactDetailsComponent.esm.js";import{JsonFactDetailsComponent as A}from"./JsonFactDetailsComponent.esm.js";import{RegexFactDetailsComponent as z}from"./RegexFactDetailsComponent.esm.js";import{mapConfigToScmCollectorConfig as H,defaultScmCollectorConfig as C,EXISTS_COLLECTOR_TYPE as I,REGEX_COLLECTOR_TYPE as V,JSON_COLLECTOR_TYPE as X,mapScmCollectorConfigToConfig as G}from"./utils.esm.js";import{scmCollectorFormSchema as U}from"./validation.esm.js";const q=O(i=>({spacer:{height:i.spacing(8),width:"100%"},section:{marginBottom:i.spacing(2)}})),K=({disabled:i,selectedCollector:t})=>{const g=L(async(e,...n)=>{const a={enabled:!1,collectors:[]},F={exists:e.exists.enabled?e.exists:a,json:e.json.enabled?e.json:a,regex:e.regex.enabled?e.regex:a};return y(U)(F,...n)},[]),l=N({defaultValues:t?H(t.config):C(),mode:"onChange",resolver:g}),r=R(()=>C(t.config),[t]),{formState:{isValid:u},handleSubmit:m}=l,c=q(),x=!u,{mutateAsync:b}=P(),[S,h]=j(_),{showModal:E}=M(),p=async e=>{if(!await E(B(t)))return;const n=G(e);await b({collectorId:t.id,config:n})&&h()};return J(Y(t)),f(v,{children:[o(T,{className:c.section,children:o(D,{...l,children:f("form",{onSubmit:m(p),children:[o(s,{name:I,label:"Exists",description:"Collects information on the existence of files within an entity's repository.",disabled:i,multipleCollectors:{enable:!0,defaultConfig:r.exists.collectors[0]},FactDetailsComponent:k}),o(d,{}),o(s,{name:V,label:"Regex",description:"Executes regular expressions against a specified file in an entity's repository and collects its capture groups.",disabled:i,multipleCollectors:{enable:!0,defaultConfig:r.regex.collectors[0]},FactDetailsComponent:z}),o(d,{}),o(s,{name:X,label:"JSON / YAML",description:"Collects data from a JSON/YAML file at specified JSON paths in an entity's repository.",disabled:i,multipleCollectors:{enable:!0,defaultConfig:r.json.collectors[0]},FactDetailsComponent:A})]})})}),o("div",{className:c.section,children:o(w,{onCancel:S,saveButtonText:"Save",isLoading:!1,onSave:m(p),disableSave:x,noMargin:!0})})]})};export{K as ScmConfigurator};
1
+ import{jsxs as f,Fragment as v,jsx as o}from"react/jsx-runtime";import{zodResolver as y}from"@hookform/resolvers/zod";import{makeStyles as O,Paper as T,Divider as d}from"@material-ui/core";import{useCallback as L,useMemo as R}from"react";import{useForm as N,FormProvider as D}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as M}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as j}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as P}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as _}from"../../../../routes.esm.js";import{FooterButtons as w}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as J}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as s}from"../Common/FactCollectionConfig.esm.js";import"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as Y,confirmationModalContent as B}from"../Common/utils.esm.js";import{ExistsFactDetailsComponent as k}from"./ExistsFactDetailsComponent.esm.js";import{JsonFactDetailsComponent as A}from"./JsonFactDetailsComponent.esm.js";import{RegexFactDetailsComponent as z}from"./RegexFactDetailsComponent.esm.js";import{mapConfigToScmCollectorConfig as H,defaultScmCollectorConfig as C,EXISTS_COLLECTOR_TYPE as I,REGEX_COLLECTOR_TYPE as V,JSON_COLLECTOR_TYPE as X,mapScmCollectorConfigToConfig as G}from"./utils.esm.js";import{scmCollectorFormSchema as U}from"./validation.esm.js";const q=O(i=>({spacer:{height:i.spacing(8),width:"100%"},section:{marginBottom:i.spacing(2)}})),K=({disabled:i,selectedCollector:t})=>{const g=L(async(e,...n)=>{const a={enabled:!1,collectors:[]},F={exists:e.exists.enabled?e.exists:a,json:e.json.enabled?e.json:a,regex:e.regex.enabled?e.regex:a};return y(U)(F,...n)},[]),l=N({defaultValues:t?H(t.config):C(),mode:"onChange",resolver:g}),r=R(()=>C(t.config),[t]),{formState:{isValid:u},handleSubmit:m}=l,c=q(),x=!u,{mutateAsync:b}=P(),[S,h]=j(_),{showModal:E}=M(),p=async e=>{if(!await E(B(t)))return;const n=G(e);await b({collectorId:t.id,config:n})&&h()};return J(Y(t)),f(v,{children:[o(T,{className:c.section,children:o(D,{...l,children:f("form",{onSubmit:m(p),children:[o(s,{name:I,label:"Exists",description:"Collects information on the existence of files within an entity's repository.",disabled:i,multipleCollectors:{enable:!0,defaultConfig:r.exists.collectors[0]},FactDetailsComponent:k}),o(d,{}),o(s,{name:V,label:"Regex",description:"Executes regular expressions against a specified file in an entity's repository and collects its capture groups.",disabled:i,multipleCollectors:{enable:!0,defaultConfig:r.regex.collectors[0]},FactDetailsComponent:z}),o(d,{}),o(s,{name:X,label:"JSON / YAML",description:"Collects data from a JSON/YAML file at specified JSON paths in an entity's repository.",disabled:i,multipleCollectors:{enable:!0,defaultConfig:r.json.collectors[0]},FactDetailsComponent:A})]})})}),o("div",{className:c.section,children:o(w,{onCancel:S,saveButtonText:"Save",isLoading:!1,onSave:m(p),disableSave:x,noMargin:!0})})]})};export{K as ScmConfigurator};
2
2
  //# sourceMappingURL=ScmConfigurator.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as c,Fragment as S,jsx as o}from"react/jsx-runtime";import{zodResolver as h}from"@hookform/resolvers/zod";import{makeStyles as j,Paper as v,Divider as a}from"@material-ui/core";import{useForm as F,FormProvider as Q}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as y}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as k}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as w}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as T}from"../../../../routes.esm.js";import{FooterButtons as D}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as I}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as i}from"../Common/FactCollectionConfig.esm.js";import{collectorHeaderContent as M,confirmationModalContent as P}from"../Common/utils.esm.js";import{IssuesFactDetailsInput as x}from"./IssuesFactDetailsInput.esm.js";import{MeasuresFactDetailsInput as B}from"./MeasuresFactDetailsInput.esm.js";import{mapConfigToSonarQubeCollectorConfig as N,defaultSonarQubeConfig as R,issuesCollectorConfig as A,measuresCollectorConfig as H,mapSonarQubeCollectorConfigToConfig as z}from"./utils.esm.js";import{sonarQubeCollectorFormSchema as L}from"./validation.esm.js";const U=j(e=>({spacer:{height:e.spacing(8),width:"100%"},section:{marginBottom:e.spacing(2)}})),V=({disabled:e,selectedCollector:t})=>{const s=F({defaultValues:t?N(t.config):R(),mode:"onChange",resolver:h(L)}),{formState:{errors:r},handleSubmit:n}=s,l=U(),p=!!r.projects||!!r.projectTags||!!r.issues||!!r.measures,{mutateAsync:d}=w(),[u,f]=k(T),{showModal:C}=y(),m=async g=>{if(!await C(P(t)))return;const b=z(g);await d({collectorId:t.id,config:b})&&f()};return I(M(t)),c(S,{children:[o(v,{className:l.section,children:o(Q,{...s,children:c("form",{onSubmit:n(m),children:[o(i,{name:"projects",label:"Projects",description:"Collects details about SonarQube project linked to an entity.",disabled:e}),o(a,{}),o(i,{name:"projectTags",label:"Project Tags",description:"Collects details about tags set on a SonarQube project linked to an entity.",disabled:e}),o(a,{}),o(i,{name:"issues",label:"Issues",description:"Collects details about issues associated with a SonarQube project linked to an entity.",disabled:e,FactDetailsComponent:x,multipleCollectors:{enable:!0,defaultConfig:A(t.config)}}),o(a,{}),o(i,{name:"measures",label:"Measures",description:"Collects details about measures associated with a SonarQube project linked to an entity.",disabled:e,FactDetailsComponent:B,multipleCollectors:{enable:!0,defaultConfig:H(t.config)}})]})})}),o("div",{className:l.section,children:o(D,{onCancel:u,saveButtonText:"Save",isLoading:!1,onSave:n(m),disableSave:p})})]})};export{V as SonarQubeConfigurator};
1
+ import{jsxs as p,Fragment as Q,jsx as o}from"react/jsx-runtime";import{zodResolver as F}from"@hookform/resolvers/zod";import{makeStyles as y,Paper as k,Divider as s}from"@material-ui/core";import{asArray as w}from"@spotify/backstage-plugin-soundcheck-common";import{useForm as I,FormProvider as N}from"react-hook-form";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../../api.esm.js";import"../../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"react";import"../../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as T}from"../../../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as D}from"../../../../hooks/useNavigateBack.esm.js";import{useUpdateCollectorConfig as M}from"../../../../hooks/collectors/useUpdateCollectorConfig.esm.js";import{integrationsPageRouteRef as P}from"../../../../routes.esm.js";import{FooterButtons as x}from"../../../FooterButtons/FooterButtons.esm.js";import"../../../SoundcheckHeader/SoundcheckHeader.esm.js";import"../../../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as B}from"../../../SoundcheckHeader/useHeader.esm.js";import{FactCollectionConfig as i}from"../Common/FactCollectionConfig.esm.js";import{CollectorConfigAlert as A}from"../Common/CollectorConfigAlert.esm.js";import{collectorHeaderContent as R,confirmationModalContent as H}from"../Common/utils.esm.js";import{IssuesFactDetailsInput as U}from"./IssuesFactDetailsInput.esm.js";import{MeasuresFactDetailsInput as z}from"./MeasuresFactDetailsInput.esm.js";import{mapConfigToSonarQubeCollectorConfig as E,defaultSonarQubeConfig as L,issuesCollectorConfig as O,measuresCollectorConfig as V,mapSonarQubeCollectorConfigToConfig as q}from"./utils.esm.js";import{sonarQubeCollectorFormSchema as G}from"./validation.esm.js";const J=y(t=>({spacer:{height:t.spacing(8),width:"100%"},section:{marginBottom:t.spacing(2)}})),K=({disabled:t,selectedCollector:e})=>{const n=I({defaultValues:e?E(e.config):L(),mode:"onChange",resolver:F(G)}),{formState:{errors:r},handleSubmit:l}=n,m=J(),d=!!r.projects||!!r.projectTags||!!r.issues||!!r.measures,{mutateAsync:u}=M(),[f,C]=D(P),{showModal:g}=T(),c=async j=>{if(!await g(H(e)))return;const v=q(j);await u({collectorId:e.id,config:v})&&C()};B(R(e));const a=w(e.config),b=a[0]?.token,S=a[0]?.username&&a[0]?.password,h=!b&&!S;return p(Q,{children:[o(A,{collectorName:"SonarQube",collectorId:e.id,invalidConfig:h,hasNonUIOptions:!0}),o(k,{className:m.section,children:o(N,{...n,children:p("form",{onSubmit:l(c),children:[o(i,{name:"projects",label:"Projects",description:"Collects details about SonarQube project linked to an entity.",disabled:t}),o(s,{}),o(i,{name:"projectTags",label:"Project Tags",description:"Collects details about tags set on a SonarQube project linked to an entity.",disabled:t}),o(s,{}),o(i,{name:"issues",label:"Issues",description:"Collects details about issues associated with a SonarQube project linked to an entity.",disabled:t,FactDetailsComponent:U,multipleCollectors:{enable:!0,defaultConfig:O(e.config)}}),o(s,{}),o(i,{name:"measures",label:"Measures",description:"Collects details about measures associated with a SonarQube project linked to an entity.",disabled:t,FactDetailsComponent:z,multipleCollectors:{enable:!0,defaultConfig:V(e.config)}})]})})}),o("div",{className:m.section,children:o(x,{onCancel:f,saveButtonText:"Save",isLoading:!1,onSave:l(c),disableSave:d})})]})};export{K as SonarQubeConfigurator};
2
2
  //# sourceMappingURL=SonarQubeConfigurator.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as t}from"react/jsx-runtime";import{makeStyles as e}from"@material-ui/core";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useSetHeaderDefault as i}from"../SoundcheckHeader/useHeader.esm.js";import{CollectorListPage as n}from"./CollectorListPage/CollectorListPage.esm.js";const a=e(o=>({container:{padding:o.spacing(3)}})),s=({integrations:o})=>{const r=a();return i(),t("div",{className:r.container,children:t(n,{integrations:o})})};export{s as CollectorsPage};
1
+ import{jsx as o}from"react/jsx-runtime";import{makeStyles as r}from"@material-ui/core";import{useLCPReporting as i}from"../../hooks/useLCPReporting.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useSetHeaderDefault as n}from"../SoundcheckHeader/useHeader.esm.js";import{CollectorListPage as a}from"./CollectorListPage/CollectorListPage.esm.js";const s=r(t=>({container:{padding:t.spacing(3)}})),m=({integrations:t})=>{const e=s();return n(),i({routeName:"soundcheck-integrations-page"}),o("div",{className:e.container,children:o(a,{integrations:t})})};export{m as CollectorsPage};
2
2
  //# sourceMappingURL=CollectorsPage.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as n}from"react/jsx-runtime";import{Typography as m}from"@material-ui/core";import{getContrastTextColor as p}from"../TechInsights/colorContrast.esm.js";const s=({value:r,getColor:l,numericValue:o,size:t="medium"})=>{const e=l(o||0),i=p(e);return n(m,{style:{backgroundColor:e,color:i,borderRadius:"4px",textAlign:"center",fontWeight:"bold",fontSize:t==="small"?"0.7rem":"0.9rem",minWidth:t==="small"?"32px":"48px",width:t==="small"?"32px":"48px",height:t==="small"?"15px":"28px",display:"flex",alignItems:"center",justifyContent:"center",padding:t==="small"?"0 4px":"0 8px"},children:r})};export{s as ColorChip};
1
+ import{jsx as n}from"react/jsx-runtime";import{Typography as m}from"@material-ui/core";import{getContrastTextColor as p}from"../../utils/colors.esm.js";const s=({value:r,getColor:l,numericValue:o,size:t="medium"})=>{const e=l(o||0),i=p(e);return n(m,{style:{backgroundColor:e,color:i,borderRadius:"4px",textAlign:"center",fontWeight:"bold",fontSize:t==="small"?"0.7rem":"0.9rem",minWidth:t==="small"?"32px":"56px",width:t==="small"?"32px":"56px",height:t==="small"?"15px":"28px",display:"flex",alignItems:"center",justifyContent:"center",padding:t==="small"?"0 4px":"0 8px"},children:r})};export{s as ColorChip};
2
2
  //# sourceMappingURL=ColorChip.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as i,jsxs as a}from"react/jsx-runtime";import{parseEntityRef as s}from"@backstage/catalog-model";import{humanizeEntityRef as l}from"@backstage/plugin-catalog-react";import{makeStyles as f,Card as g,Typography as d}from"@material-ui/core";import h from"../../images/empty-state.svg";const u=f(e=>({card:{backgroundColor:e.palette.background.paper,border:`1px solid ${e.palette.divider}`,borderRadius:e.shape.borderRadius,display:"flex",padding:e.spacing(5)},container:{margin:"0 auto",display:"flex",flexDirection:"row",alignItems:"center",gap:e.spacing(5)},content:{width:"20rem",display:"flex",flexDirection:"column",gap:e.spacing(2)},header:{display:"flex",flexDirection:"column",gap:e.spacing(2)},action:{display:"inline-block"},img:{maxHeight:400}})),o=({title:e,description:r,imgSrc:t,action:c})=>{const n=u();return i(g,{className:n.card,children:a("div",{className:n.container,children:[a("div",{className:n.content,children:[a("header",{className:n.header,children:[i(d,{variant:"h5",children:e}),i(d,{color:"textSecondary",variant:"body1",children:r})]}),c&&i("div",{className:n.action,children:c})]}),i("div",{children:i("img",{src:t??h,className:n.img,alt:e})})]})})},p="No certifications available",y=({ownerEntityRef:e,selectGroupHint:r})=>{let t="There are no tracks configured that apply to this entity.";return e&&(t=`Looks like the group '${l(s(e),{defaultKind:"Group"})}' doesn't own any entities that have any applicable tracks configured. ${r}`),i(o,{title:p,description:t})},m="Missing entities",x=({ownerEntityRef:e,selectGroupHint:r})=>{if(!e)return null;const t=l(s(e),{defaultKind:"Group"});return i(o,{title:m,description:`The group '${t}' doesn't own any entities. ${r??""}`})};export{o as EmptyState,y as NoCertifications,x as NoEntities,p as noCertificationsTitle,m as noEntitiesTitle};
1
+ import{jsx as i,jsxs as a}from"react/jsx-runtime";import{parseEntityRef as s}from"@backstage/catalog-model";import{humanizeEntityRef as l}from"@backstage/plugin-catalog-react";import{makeStyles as f,Card as g,Typography as d}from"@material-ui/core";import h from"../../images/empty-state.svg";const u=f(e=>({card:{backgroundColor:e.palette.background.paper,border:`1px solid ${e.palette.divider}`,borderRadius:e.shape.borderRadius,display:"flex",padding:e.spacing(5)},container:{margin:"0 auto",display:"flex",flexDirection:"row",alignItems:"center",gap:e.spacing(5)},content:{width:"20rem",display:"flex",flexDirection:"column",gap:e.spacing(2)},header:{display:"flex",flexDirection:"column",gap:e.spacing(2)},action:{display:"inline-block"},img:{maxHeight:400}})),o=({title:e,description:t,imgSrc:n,action:c})=>{const r=u();return i(g,{className:r.card,children:a("div",{className:r.container,children:[a("div",{className:r.content,children:[a("header",{className:r.header,children:[i(d,{variant:"h5",children:e}),t&&i(d,{color:"textSecondary",variant:"body1",children:t})]}),c&&i("div",{className:r.action,children:c})]}),i("div",{children:i("img",{src:n??h,className:r.img,alt:e})})]})})},p="No certifications available",y=({ownerEntityRef:e,selectGroupHint:t})=>{let n="There are no tracks configured that apply to this entity.";return e&&(n=`Looks like the group '${l(s(e),{defaultKind:"Group"})}' doesn't own any entities that have any applicable tracks configured. ${t}`),i(o,{title:p,description:n})},m="Missing entities",x=({ownerEntityRef:e,selectGroupHint:t})=>{if(!e)return null;const n=l(s(e),{defaultKind:"Group"});return i(o,{title:m,description:`The group '${n}' doesn't own any entities. ${t??""}`})};export{o as EmptyState,y as NoCertifications,x as NoEntities,p as noCertificationsTitle,m as noEntitiesTitle};
2
2
  //# sourceMappingURL=EmptyState.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as T}from"react/jsx-runtime";import{makeStyles as F,FormControlLabel as O,Checkbox as z,Typography as A,Box as w,TextField as I}from"@material-ui/core";import j from"@material-ui/icons/CheckBox";import B from"@material-ui/icons/CheckBoxOutlineBlank";import E from"@material-ui/icons/ExpandMore";import{Autocomplete as G}from"@material-ui/lab";import{useState as N,useMemo as m,useCallback as p}from"react";import{useGetEntityRefs as D}from"../../hooks/catalog/useGetEntityRefs.esm.js";import{FormFieldLabel as H}from"../FormFieldLabel/FormFieldLabel.esm.js";import{ListboxVirtualized as M}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const P=F({container:{padding:0},formControl:{flexGrow:1},label:{lineHeight:"1em"}}),Q=({label:d,values:o,onChange:n,disabled:f,filter:g,renderOption:b,renderTags:h})=>{const i=P(),[C,a]=N(!1),{data:t,isLoading:u,error:k}=D(g),s=m(()=>o?.map(l=>l.toLocaleLowerCase("en-US"))??[],[o]),x=p((l,r)=>{n(r),t&&t.every(c=>r.includes(c))&&a(!1)},[t,n]),y=p(()=>{n(o?.length?o:void 0)},[o,n]),L=p((l,r)=>b?.(l,r)??e(O,{onClick:c=>c.preventDefault(),control:e(z,{icon:e(B,{fontSize:"small"}),checkedIcon:e(j,{fontSize:"small"}),checked:r.selected}),label:l,classes:{label:i.label}}),[b,i.label]),S=m(()=>f||u||!o?.length&&!t?.length,[f,u,o?.length,t?.length]),v=m(()=>Array.from(new Set([...t??[],...s])),[t,s]);return k?e(A,{color:"error",children:"Failed to load entities"}):T(w,{pb:1,pt:1,className:i.container,children:[e(H,{title:d,docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),e(G,{open:C,onOpen:()=>a(!0),onClose:()=>a(!1),className:i.formControl,multiple:!0,limitTags:4,disableCloseOnSelect:!0,"aria-label":d,options:v,value:s,onChange:x,onBlur:y,disabled:S,ListboxComponent:M,renderOption:L,renderTags:h,size:"small",popupIcon:e(E,{"data-testid":"selected-facets-expand"}),renderInput:l=>e(I,{...l,variant:"outlined"})})]})};export{Q as EntitiesAutocompletePicker};
1
+ import{jsx as e,jsxs as T}from"react/jsx-runtime";import{makeStyles as z,FormControlLabel as F,Checkbox as O,Typography as A,Box as w,TextField as I}from"@material-ui/core";import j from"@material-ui/icons/CheckBox";import B from"@material-ui/icons/CheckBoxOutlineBlank";import E from"@material-ui/icons/ExpandMore";import{Autocomplete as G}from"@material-ui/lab";import{useState as N,useMemo as m,useCallback as p}from"react";import{useGetEntityRefs as P}from"../../hooks/catalog/useGetEntityRefs.esm.js";import{FormFieldLabel as D}from"../FormFieldLabel/FormFieldLabel.esm.js";import{ListboxVirtualized as H}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const M=z({container:{padding:0},formControl:{flexGrow:1},label:{lineHeight:"1em"}}),Q=({label:d,values:o,onChange:n,disabled:f,filter:g,renderOption:b,renderTags:h})=>{const i=M(),[C,a]=N(!1),{data:t,isLoading:u,error:k}=P(g),s=m(()=>o?.map(l=>l.toLocaleLowerCase("en-US"))??[],[o]),x=p((l,r)=>{n(r),t&&t.every(c=>r.includes(c))&&a(!1)},[t,n]),y=p(()=>{n(o?.length?o:void 0)},[o,n]),L=p((l,r)=>b?.(l,r)??e(F,{onClick:c=>c.preventDefault(),control:e(O,{icon:e(B,{fontSize:"small"}),checkedIcon:e(j,{fontSize:"small"}),checked:r.selected}),label:l,classes:{label:i.label}}),[b,i.label]),S=m(()=>f||u||!o?.length&&!t?.length,[f,u,o?.length,t?.length]),v=m(()=>Array.from(new Set([...t??[],...s])),[t,s]);return k?e(A,{color:"error",children:"Failed to load entities"}):T(w,{pb:1,pt:1,className:i.container,children:[e(D,{title:d,docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),e(G,{open:C,onOpen:()=>a(!0),onClose:()=>a(!1),className:i.formControl,multiple:!0,limitTags:4,disableCloseOnSelect:!0,"aria-label":d,options:v,value:s,onChange:x,onBlur:y,disabled:S,ListboxComponent:H,renderOption:L,renderTags:h,size:"small",popupIcon:e(E,{"data-testid":"selected-facets-expand"}),renderInput:l=>e(I,{...l,variant:"outlined"})})]})};export{Q as EntitiesAutocompletePicker};
2
2
  //# sourceMappingURL=EntitiesAutocompletePicker.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as a,jsx as e}from"react/jsx-runtime";import{Paper as d,Grid as n,IconButton as f,Typography as h,Collapse as g}from"@material-ui/core";import{makeStyles as x}from"@material-ui/core/styles";import u from"@material-ui/icons/ArrowDropDown";import y from"@material-ui/icons/ArrowRight";import{useState as S}from"react";const N=x(t=>({root:{display:"flex",flexDirection:"column",gap:0},button:{marginLeft:-t.spacing(1)},title:{fontWeight:700,color:t.palette.text.primary,cursor:"pointer"}})),b=({title:t,alwaysExpanded:o=!1,children:c,className:m,elevation:s=1})=>{const[r,p]=S(o),i=N(),l=()=>{o||p(!r)};return a(d,{elevation:s,className:`${i.root} ${m??""}`,children:[a(n,{container:!0,alignItems:"center",spacing:0,children:[e(n,{item:!0,children:!o&&e(f,{onClick:l,className:i.button,children:r?e(u,{fontSize:"large"}):e(y,{fontSize:"large"})})}),e(n,{item:!0,children:e(h,{onClick:l,className:i.title,children:t})})]}),e(g,{in:r,children:c})]})};export{b as ExpandableSection};
1
+ import{jsxs as a,jsx as e}from"react/jsx-runtime";import{Paper as d,Grid as n,IconButton as f,Typography as h,Collapse as g}from"@material-ui/core";import{makeStyles as x}from"@material-ui/core/styles";import u from"@material-ui/icons/ArrowDropDown";import y from"@material-ui/icons/ArrowRight";import{useState as S}from"react";const C=x(t=>({root:{display:"flex",flexDirection:"column",gap:0},button:{marginLeft:-t.spacing(1)},title:{fontWeight:700,color:t.palette.text.primary,cursor:"pointer"}})),N=({title:t,alwaysExpanded:o=!1,children:c,className:m,elevation:s=1})=>{const[r,p]=S(o),i=C(),l=()=>{o||p(!r)};return a(d,{elevation:s,className:`${i.root} ${m??""}`,children:[a(n,{container:!0,alignItems:"center",spacing:0,children:[e(n,{item:!0,children:!o&&e(f,{onClick:l,className:i.button,children:r?e(u,{fontSize:"large"}):e(y,{fontSize:"large"})})}),e(n,{item:!0,children:e(h,{onClick:l,className:i.title,children:t})})]}),e(g,{in:r,children:c})]})};export{N as ExpandableSection};
2
2
  //# sourceMappingURL=ExpandableSection.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as a,Fragment as v}from"react/jsx-runtime";import{makeStyles as q,Box as o,Typography as r,TextField as X,Button as j}from"@material-ui/core";import{Alert as Y}from"@material-ui/lab";import{parseFactRef as Z}from"@spotify/backstage-plugin-soundcheck-common";import ee from"lodash";import{useMemo as g,useState as S,useEffect as te,useCallback as ae}from"react";import{useGetEntityRefs as ie}from"../../hooks/catalog/useGetEntityRefs.esm.js";import{useGetCollectors as oe}from"../../hooks/collectors/useGetCollectors.esm.js";import{useGetFactSchema as re}from"../../hooks/collectors/useGetFactSchema.esm.js";import{useGetFact as ne}from"../../hooks/useGetFact.esm.js";import{useGetPathResolvers as le}from"../../hooks/useGetPathResolvers.esm.js";import{generateJsonPaths as ce}from"../CheckForm/utils/checkFormUtils.esm.js";import{hasLogo as se,CollectorLogo as de}from"../CollectorsPage/CollectorListPage/CollectorLogo.esm.js";import{ExpandableSection as B}from"../ExpandableSection/ExpandableSection.esm.js";import{mapFiltersToCatalogFilter as he}from"../Filter/utils.esm.js";import"../Filter/FilterComponent.esm.js";import{emptyFilters as pe}from"../Filter/types.esm.js";import{FormattedPreview as E}from"../FormattedPreview/FormattedPreview.esm.js";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"react-hook-form";import"../ListboxVirtualized/ListboxVirtualized.esm.js";import{useLabelOptions as me}from"../FormControlledAutocomplete/useLabelOptions.esm.js";import{ControlledAutocomplete as y}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{LoadingIndicator as fe}from"../LoadingIndicator/LoadingIndicator.esm.js";import{useFactOptions as ue}from"./useFactOptions.esm.js";const ve=800,ge=q(t=>({content:{padding:t.spacing(2,3),width:ve},section:{margin:t.spacing(2,0)},expandedSection:{borderTop:`1px solid ${t.palette.divider}`,padding:t.spacing(0,2)},loading:{margin:t.spacing(2)},preview:{maxHeight:500,overflow:"auto",border:`1px solid ${t.palette.divider}`},pathSection:{display:"flex",alignItems:"center",margin:t.spacing(1,0)},testPathButton:{margin:t.spacing(1,1,.5,0)},collectorName:{fontSize:24}})),I=t=>{const p=!t||Object.values(t).every(h=>!h?.length)?{...pe(),selectedKinds:["Component","System"]}:t;return he(p)},ye=({factRef:t,updateFactRef:p,path:h,updatePath:W,entityRef:m,updateEntityRef:k,pathResolver:s,filters:G,onSave:C,hidePath:w})=>{const i=ge(),d=g(()=>{if(t)try{return Z(t)}catch{return}},[t]),[F,L]=S(d?.source??null);te(()=>{d?.source&&L(d.source)},[d?.source]);const[b,V]=S("jsonpath"),[x,P]=S(),[N,M]=S(),{data:O}=le(),$=g(()=>O?.map(c=>c.id)??[],[O]),{data:f}=re(d?.source,d?.name,!0),A=g(()=>f?ce(f.schema):[],[f]),{data:R,isLoading:D}=oe(),J=R?.map(c=>c.id)?.sort()??[],{data:z,isLoading:H}=ie(I(G),500),n=g(()=>R?.find(c=>c.id===F),[R,F]),{factOptions:K}=ue({selectedCollector:n}),{options:Q,getOptionLabel:T}=me(K),{data:l,isLoading:u}=ne({factRef:t||"",entityRef:N||"",path:x,pathResolver:s??b??void 0},!!t&&!!N),U=ae(()=>{P(h),M(m)},[m,h]),_=g(()=>!!n?.config?.cache,[n]);return e(o,{className:i.content,"data-testid":"fact-explorer",children:a(o,{children:[a(o,{children:[e(r,{variant:"subtitle1",children:"Select an Integration"}),e(y,{options:J,onChange:c=>{L(c),p("")},value:F,placeholder:"Integration",disabled:D,fullWidth:!0,freeSolo:!0})]}),!n&&e(v,{children:a(o,{children:[e(r,{variant:"subtitle1",children:"Enter a Fact Ref Directly"}),e(X,{value:t,onChange:c=>p(c.currentTarget.value),variant:"outlined",margin:"dense",placeholder:"Enter the full fact ref, i.e. custom:default/custom-fact",fullWidth:!0})]})}),!!n&&e(v,{children:a(o,{className:i.section,children:[se(n.id)?e(de,{noMargin:!0,collectorId:n.id}):a(r,{variant:"h5",className:i.collectorName,component:"div",children:[n.name??n.id," "]}),!!n.description&&e(r,{variant:"body2",children:n.description}),e(y,{options:Q,onChange:p,value:t??null,placeholder:"Select Fact",getOptionLabel:T,noOptionsText:"No Facts",fullWidth:!0})]})}),!!t&&!!d&&a(v,{children:[!!f?.schema&&e(o,{className:i.section,children:e(B,{elevation:1,title:"JSON Schema",children:e("div",{className:i.preview,children:e(E,{data:f.schema})})})}),!w&&a(v,{children:[a(o,{className:i.section,children:[e(r,{variant:"subtitle1",children:"Path Resolver"}),!s&&e(r,{variant:"caption",children:"Defaults to jsonpath"}),s?e(r,{variant:"body1",children:s}):e(y,{options:$,onChange:V,value:s??b,placeholder:"Path Resolver (Optional)",getOptionLabel:T,fullWidth:!0,disabled:!!s,freeSolo:!0})]}),a(o,{className:i.section,children:[e(r,{variant:"subtitle1",children:"Path"}),e(y,{options:(s??b)==="jsonpath"?A:[],onChange:c=>{x&&P(void 0),W(c)},value:h??null,placeholder:"Path",fullWidth:!0,freeSolo:!0}),e("div",{className:i.pathSection,children:!!C&&e(j,{className:i.testPathButton,variant:"contained",onClick:()=>C({factRef:t,path:h??"",pathResolver:b??s??""}),disabled:!h,color:"primary",children:"Save"})})]})]})]}),!!t&&!!d&&e(B,{alwaysExpanded:w,elevation:0,title:"Sample Fact and Test Path",children:a(o,{className:i.expandedSection,children:[a(o,{marginBottom:1,children:[e(r,{variant:"subtitle1",children:"Select an Entity"}),a(r,{variant:"caption",children:["Fact will be sampled from this entity.",e("br",{}),"If you don't see the entity in the drop-down list, you can type its reference in the format ","<kind>:<namespace>/<name>","."]}),e(y,{options:z??[],onChange:k,value:m??null,placeholder:"Entity Selection",isLoading:H,freeSolo:!0,fullWidth:!0})]}),e(o,{children:e(j,{className:i.testPathButton,variant:"contained",onClick:U,disabled:!m,color:"primary",children:"Sample Fact"})}),a(v,{children:[!!x&&!u&&a(o,{className:i.section,children:[e(r,{variant:"subtitle1",children:"Resolved Value"}),l?.resolvedValue!==null&&l?.resolvedValue!==void 0?e(o,{className:i.preview,children:e(E,{data:l?.resolvedValue})}):e(r,{color:"textSecondary",variant:"body2",children:"Could not resolve path"})]}),!!N&&a(o,{className:i.section,children:[e(r,{variant:"subtitle1",children:"Fact Data"}),_&&e(r,{variant:"caption",children:"Uses cache when available."}),!!u&&e("div",{className:i.loading,children:e(fe,{})}),!u&&!!l?.fact&&e(o,{className:i.preview,children:l?.fact?.sensitive&&ee.isEmpty(l?.fact?.data)?e(o,{children:e(Y,{severity:"info",children:"The associated fact contains potentially sensitive information and has been redacted."})}):e(E,{data:l?.fact?.data})}),!u&&!!l?.collectionError&&a(r,{color:"textSecondary",variant:"body2",children:["Failed to collect:"," ",l?.collectionError?.errorMessage]}),!u&&!l?.fact&&!l?.collectionError&&a(r,{color:"textSecondary",variant:"body2",children:["Fact ",t," unavailable for entity ",m]})]})]})]})})]})})};export{ye as FactExplorer,I as toEntityFilterQuery};
1
+ import{jsx as e,jsxs as a,Fragment as v}from"react/jsx-runtime";import{makeStyles as Y,Box as o,Typography as n,TextField as Z,Button as W}from"@material-ui/core";import{Alert as ee}from"@material-ui/lab";import{parseFactRef as te}from"@spotify/backstage-plugin-soundcheck-common";import ae from"lodash";import{useMemo as g,useState as x,useEffect as ie,useCallback as oe}from"react";import{useGetEntityRefs as ne}from"../../hooks/catalog/useGetEntityRefs.esm.js";import{useGetLimitedEntityRefs as re}from"../../hooks/catalog/useGetLimitedEntityRefs.esm.js";import{useGetCollectors as le}from"../../hooks/collectors/useGetCollectors.esm.js";import{useGetFactSchema as ce}from"../../hooks/collectors/useGetFactSchema.esm.js";import{useGetFact as se}from"../../hooks/useGetFact.esm.js";import{useGetPathResolvers as de}from"../../hooks/useGetPathResolvers.esm.js";import{generateJsonPaths as he}from"../CheckForm/utils/checkFormUtils.esm.js";import{hasLogo as pe,CollectorLogo as me}from"../CollectorsPage/CollectorListPage/CollectorLogo.esm.js";import{ExpandableSection as G}from"../ExpandableSection/ExpandableSection.esm.js";import{mapFiltersToCatalogFilter as fe}from"../Filter/utils.esm.js";import"../Filter/FilterComponent.esm.js";import{emptyFilters as ue}from"../Filter/types.esm.js";import{FormattedPreview as L}from"../FormattedPreview/FormattedPreview.esm.js";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"react-hook-form";import"../ListboxVirtualized/ListboxVirtualized.esm.js";import{useLabelOptions as ve}from"../FormControlledAutocomplete/useLabelOptions.esm.js";import{ControlledAutocomplete as y}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{LoadingIndicator as ge}from"../LoadingIndicator/LoadingIndicator.esm.js";import{useFactOptions as ye}from"./useFactOptions.esm.js";const be=800,Se=Y(t=>({content:{padding:t.spacing(2,3),width:be},section:{margin:t.spacing(2,0)},expandedSection:{borderTop:`1px solid ${t.palette.divider}`,padding:t.spacing(0,2)},loading:{margin:t.spacing(2)},preview:{maxHeight:500,overflow:"auto",border:`1px solid ${t.palette.divider}`},pathSection:{display:"flex",alignItems:"center",margin:t.spacing(1,0)},testPathButton:{margin:t.spacing(1,1,.5,0)},collectorName:{fontSize:24}})),xe=t=>{const p=!t||Object.values(t).every(h=>!h?.length)?{...ue(),selectedKinds:["Component","System"]}:t;return fe(p)},Fe=({factRef:t,updateFactRef:p,path:h,updatePath:T,entityRef:m,updateEntityRef:k,pathResolver:s,filters:F,onSave:w,hidePath:P})=>{const i=Se(),d=g(()=>{if(t)try{return te(t)}catch{return}},[t]),[N,O]=x(d?.source??null);ie(()=>{d?.source&&O(d.source)},[d?.source]);const[b,V]=x("jsonpath"),[R,j]=x(),[C,M]=x(),{data:B}=de(),A=g(()=>B?.map(r=>r.id)??[],[B]),{data:f}=ce(d?.source,d?.name,!0),D=g(()=>f?he(f.schema):[],[f]),{data:E,isLoading:J}=le(),$=E?.map(r=>r.id)?.sort()??[],S=!F||Object.values(F).every(r=>!r?.length),{data:z,isLoading:H}=ne(xe(F),1e3,!S),{entityRefs:K,allLoading:U}=re(500,S),l=g(()=>E?.find(r=>r.id===N),[E,N]),{factOptions:q}=ye({selectedCollector:l}),{options:Q,getOptionLabel:I}=ve(q),{data:c,isLoading:u}=se({factRef:t||"",entityRef:C||"",path:R,pathResolver:s??b??void 0},!!t&&!!C),X=oe(()=>{j(h),M(m)},[m,h]),_=g(()=>!!l?.config?.cache,[l]);return e(o,{className:i.content,"data-testid":"fact-explorer",children:a(o,{children:[a(o,{children:[e(n,{variant:"subtitle1",children:"Select an Integration"}),e(y,{options:$,onChange:r=>{O(r),p("")},value:N,placeholder:"Integration",disabled:J,fullWidth:!0,freeSolo:!0})]}),!l&&e(v,{children:a(o,{children:[e(n,{variant:"subtitle1",children:"Enter a Fact Ref Directly"}),e(Z,{value:t,onChange:r=>p(r.currentTarget.value),variant:"outlined",margin:"dense",placeholder:"Enter the full fact ref, i.e. custom:default/custom-fact",fullWidth:!0})]})}),!!l&&e(v,{children:a(o,{className:i.section,children:[pe(l.id)?e(me,{noMargin:!0,collectorId:l.id}):a(n,{variant:"h5",className:i.collectorName,component:"div",children:[l.name??l.id," "]}),!!l.description&&e(n,{variant:"body2",children:l.description}),e(y,{options:Q,onChange:p,value:t??null,placeholder:"Select Fact",getOptionLabel:I,noOptionsText:"No Facts",fullWidth:!0})]})}),!!t&&!!d&&a(v,{children:[!!f?.schema&&e(o,{className:i.section,children:e(G,{elevation:1,title:"JSON Schema",children:e("div",{className:i.preview,children:e(L,{data:f.schema})})})}),!P&&a(v,{children:[a(o,{className:i.section,children:[e(n,{variant:"subtitle1",children:"Path Resolver"}),!s&&e(n,{variant:"caption",children:"Defaults to jsonpath"}),s?e(n,{variant:"body1",children:s}):e(y,{options:A,onChange:V,value:s??b,placeholder:"Path Resolver (Optional)",getOptionLabel:I,fullWidth:!0,disabled:!!s,freeSolo:!0})]}),a(o,{className:i.section,children:[e(n,{variant:"subtitle1",children:"Path"}),e(y,{options:(s??b)==="jsonpath"?D:[],onChange:r=>{R&&j(void 0),T(r)},value:h??null,placeholder:"Path",fullWidth:!0,freeSolo:!0}),e("div",{className:i.pathSection,children:!!w&&e(W,{className:i.testPathButton,variant:"contained",onClick:()=>w({factRef:t,path:h??"",pathResolver:b??s??""}),disabled:!h,color:"primary",children:"Save"})})]})]})]}),!!t&&!!d&&e(G,{alwaysExpanded:P,elevation:0,title:"Sample Fact and Test Path",children:a(o,{className:i.expandedSection,children:[a(o,{marginBottom:1,children:[e(n,{variant:"subtitle1",children:"Select an Entity"}),a(n,{variant:"caption",children:["Fact will be sampled from this entity.",e("br",{}),"If you don't see the entity in the drop-down list, you can type its reference in the format ","<kind>:<namespace>/<name>","."]}),e(y,{options:S?K??[]:z??[],onChange:k,value:m??null,placeholder:"Entity Selection",isLoading:S?U:H,freeSolo:!0,fullWidth:!0})]}),e(o,{children:e(W,{className:i.testPathButton,variant:"contained",onClick:X,disabled:!m,color:"primary",children:"Sample Fact"})}),a(v,{children:[!!R&&!u&&a(o,{className:i.section,children:[e(n,{variant:"subtitle1",children:"Resolved Value"}),c?.resolvedValue!==null&&c?.resolvedValue!==void 0?e(o,{className:i.preview,children:e(L,{data:c?.resolvedValue})}):e(n,{color:"textSecondary",variant:"body2",children:"Could not resolve path"})]}),!!C&&a(o,{className:i.section,children:[e(n,{variant:"subtitle1",children:"Fact Data"}),_&&e(n,{variant:"caption",children:"Uses cache when available."}),!!u&&e("div",{className:i.loading,children:e(ge,{})}),!u&&!!c?.fact&&e(o,{className:i.preview,children:c?.fact?.sensitive&&ae.isEmpty(c?.fact?.data)?e(o,{children:e(ee,{severity:"info",children:"The associated fact contains potentially sensitive information and has been redacted."})}):e(L,{data:c?.fact?.data})}),!u&&!!c?.collectionError&&a(n,{color:"textSecondary",variant:"body2",children:["Failed to collect:"," ",c?.collectionError?.errorMessage]}),!u&&!c?.fact&&!c?.collectionError&&a(n,{color:"textSecondary",variant:"body2",children:["Fact ",t," unavailable for entity ",m]})]})]})]})})]})})};export{Fe as FactExplorer};
2
2
  //# sourceMappingURL=FactExplorer.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as t,jsxs as L}from"react/jsx-runtime";import{makeStyles as z,FormControlLabel as A,Checkbox as I,Typography as j,Box as B,TextField as E}from"@material-ui/core";import G from"@material-ui/icons/CheckBox";import N from"@material-ui/icons/CheckBoxOutlineBlank";import U from"@material-ui/icons/ExpandMore";import{Autocomplete as V}from"@material-ui/lab";import{useState as $,useMemo as s,useCallback as d}from"react";import{useGetEntityFacets as D}from"../../hooks/catalog/useGetEntityFacets.esm.js";import{FormFieldLabel as H}from"../FormFieldLabel/FormFieldLabel.esm.js";import{ListboxVirtualized as M}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const P=z({container:{padding:0},formControl:{flexGrow:1},label:{lineHeight:"1em"}}),q=({facet:f,label:b,values:l,onChange:n,disabled:g,filter:x,renderOption:u,renderTags:k,facetFilter:h})=>{const i=P(),[y,c]=$(!1),{data:r,isLoading:C,error:S}=D(f,x),o=s(()=>r?.filter(h??(()=>!0)).map(e=>e.toLocaleLowerCase("en-US")),[r,h]),m=s(()=>l?.map(e=>e.toLocaleLowerCase("en-US"))??[],[l]),F=d((e,a)=>{n(a),o&&o.every(p=>a.includes(p))&&c(!1)},[o,n]),T=d(()=>{n(l?.length?l:void 0)},[l,n]),v=d((e,a)=>u?.(e,a)??t(A,{onClick:p=>p.preventDefault(),control:t(I,{icon:t(N,{fontSize:"small"}),checkedIcon:t(G,{fontSize:"small"}),checked:a.selected}),label:e,classes:{label:i.label}}),[u,i.label]),O=s(()=>g||C||!l?.length&&(!r?.length||!o?.length),[g,C,l?.length,r?.length,o?.length]),w=s(()=>Array.from(new Set([...o??[],...m])),[o,m]);return S?L(j,{color:"error",children:["Failed to load facet: ",f]}):L(B,{pb:1,pt:1,className:i.container,children:[t(H,{title:b,docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),t(V,{open:y,onOpen:()=>c(!0),onClose:()=>c(!1),className:i.formControl,multiple:!0,limitTags:4,disableCloseOnSelect:!0,"aria-label":b,options:w,value:m,getOptionLabel:e=>r&&o?r[o.indexOf(e)]??e:e,onChange:F,onBlur:T,disabled:O,ListboxComponent:M,renderOption:v,renderTags:k,size:"small",popupIcon:t(U,{"data-testid":"selected-facets-expand"}),renderInput:e=>t(E,{...e,variant:"outlined"})})]})};export{q as EntityAutocompletePicker};
1
+ import{jsx as t,jsxs as L}from"react/jsx-runtime";import{makeStyles as w,FormControlLabel as A,Checkbox as I,Typography as j,Box as B,TextField as E}from"@material-ui/core";import G from"@material-ui/icons/CheckBox";import N from"@material-ui/icons/CheckBoxOutlineBlank";import P from"@material-ui/icons/ExpandMore";import{Autocomplete as U}from"@material-ui/lab";import{useState as V,useMemo as s,useCallback as d}from"react";import{useGetEntityFacets as D}from"../../hooks/catalog/useGetEntityFacets.esm.js";import{FormFieldLabel as H}from"../FormFieldLabel/FormFieldLabel.esm.js";import{ListboxVirtualized as M}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const $=w({container:{padding:0},formControl:{flexGrow:1},label:{lineHeight:"1em"}}),q=({facet:f,label:b,values:l,onChange:n,disabled:g,filter:x,renderOption:u,renderTags:k,facetFilter:h})=>{const i=$(),[y,c]=V(!1),{data:r,isLoading:C,error:S}=D(f,x),o=s(()=>r?.filter(h??(()=>!0)).map(e=>e.toLocaleLowerCase("en-US")),[r,h]),m=s(()=>l?.map(e=>e.toLocaleLowerCase("en-US"))??[],[l]),F=d((e,a)=>{n(a),o&&o.every(p=>a.includes(p))&&c(!1)},[o,n]),O=d(()=>{n(l?.length?l:void 0)},[l,n]),T=d((e,a)=>u?.(e,a)??t(A,{onClick:p=>p.preventDefault(),control:t(I,{icon:t(N,{fontSize:"small"}),checkedIcon:t(G,{fontSize:"small"}),checked:a.selected}),label:e,classes:{label:i.label}}),[u,i.label]),v=s(()=>g||C||!l?.length&&(!r?.length||!o?.length),[g,C,l?.length,r?.length,o?.length]),z=s(()=>Array.from(new Set([...o??[],...m])),[o,m]);return S?L(j,{color:"error",children:["Failed to load facet: ",f]}):L(B,{pb:1,pt:1,className:i.container,children:[t(H,{title:b,docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),t(U,{open:y,onOpen:()=>c(!0),onClose:()=>c(!1),className:i.formControl,multiple:!0,limitTags:4,disableCloseOnSelect:!0,"aria-label":b,options:z,value:m,getOptionLabel:e=>r&&o?r[o.indexOf(e)]??e:e,onChange:F,onBlur:O,disabled:v,ListboxComponent:M,renderOption:T,renderTags:k,size:"small",popupIcon:t(P,{"data-testid":"selected-facets-expand"}),renderInput:e=>t(E,{...e,variant:"outlined"})})]})};export{q as EntityAutocompletePicker};
2
2
  //# sourceMappingURL=EntityAutocompletePicker.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as s,jsx as e}from"react/jsx-runtime";import{makeStyles as h,Box as r,TextField as C,FormControlLabel as S,Checkbox as b,Typography as g}from"@material-ui/core";import x from"@material-ui/icons/CheckBox";import k from"@material-ui/icons/CheckBoxOutlineBlank";import L from"@material-ui/icons/ExpandMore";import{Autocomplete as I}from"@material-ui/lab";import{useState as A,useEffect as F,useCallback as c}from"react";import{CheckIcon as T}from"../CheckIcon/CheckIcon.esm.js";import{FormFieldLabel as E}from"../FormFieldLabel/FormFieldLabel.esm.js";import{ListboxVirtualized as y}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const N=["PASSED","FAILED","WARNING","EXEMPT","NOT_APPLICABLE"],O=h({container:{padding:0},formControl:{flexGrow:1},label:{lineHeight:"1em"}}),m=l=>l.toLowerCase().split("_").map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join(" "),P=(l,{selected:t})=>e(S,{onClick:o=>o.preventDefault(),control:e(b,{icon:e(k,{fontSize:"small"}),checkedIcon:e(x,{fontSize:"small"}),checked:t}),label:s(r,{display:"flex",alignItems:"center",children:[e(T,{result:l}),e(r,{mr:1}),e(g,{children:m(l)})]})}),v=({states:l,stagedStates:t,onStagedStatesChange:o})=>{const a=O(),[p,n]=A(!1);F(()=>{o(l)},[l,o]);const d=c((i,u)=>{o(u)},[o]),f=c(()=>{o(t?.length?t:[])},[t,o]);return s(r,{pb:1,pt:1,className:a.container,children:[e(E,{title:"State",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),e(I,{open:p,onOpen:()=>n(!0),onClose:()=>n(!1),className:a.formControl,multiple:!0,limitTags:4,disableCloseOnSelect:!0,"aria-label":"State",options:N,value:t,getOptionLabel:m,onChange:d,onBlur:f,ListboxComponent:y,renderOption:P,size:"small",popupIcon:e(L,{"data-testid":"selected-facets-expand"}),renderInput:i=>e(C,{...i,variant:"outlined"})})]})};export{v as StateFilter};
1
+ import{jsxs as s,jsx as e}from"react/jsx-runtime";import{makeStyles as h,Box as r,TextField as C,FormControlLabel as S,Checkbox as b,Typography as g}from"@material-ui/core";import x from"@material-ui/icons/CheckBox";import k from"@material-ui/icons/CheckBoxOutlineBlank";import L from"@material-ui/icons/ExpandMore";import{Autocomplete as I}from"@material-ui/lab";import{useState as A,useEffect as E,useCallback as c}from"react";import{CheckIcon as F}from"../CheckIcon/CheckIcon.esm.js";import{FormFieldLabel as O}from"../FormFieldLabel/FormFieldLabel.esm.js";import{ListboxVirtualized as P}from"../ListboxVirtualized/ListboxVirtualized.esm.js";const T=["PASSED","FAILED","WARNING","EXEMPT","NOT_APPLICABLE","ERROR"],y=h({container:{padding:0},formControl:{flexGrow:1},label:{lineHeight:"1em"}}),m=l=>l.toLowerCase().split("_").map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join(" "),z=(l,{selected:t})=>e(S,{onClick:o=>o.preventDefault(),control:e(b,{icon:e(k,{fontSize:"small"}),checkedIcon:e(x,{fontSize:"small"}),checked:t}),label:s(r,{display:"flex",alignItems:"center",children:[e(F,{result:l}),e(r,{mr:1}),e(g,{children:m(l)})]})}),N=({states:l,stagedStates:t,onStagedStatesChange:o})=>{const a=y(),[p,n]=A(!1);E(()=>{o(l)},[l,o]);const d=c((i,u)=>{o(u)},[o]),f=c(()=>{o(t?.length?t:[])},[t,o]);return s(r,{pb:1,pt:1,className:a.container,children:[e(O,{title:"State",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),e(I,{open:p,onOpen:()=>n(!0),onClose:()=>n(!1),className:a.formControl,multiple:!0,limitTags:4,disableCloseOnSelect:!0,"aria-label":"State",options:T,value:t,getOptionLabel:m,onChange:d,onBlur:f,ListboxComponent:P,renderOption:z,size:"small",popupIcon:e(L,{"data-testid":"selected-facets-expand"}),renderInput:i=>e(C,{...i,variant:"outlined"})})]})};export{N as StateFilter};
2
2
  //# sourceMappingURL=StateFilter.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{isEqual as f}from"lodash";import{useMemo as p,useState as i,useEffect as F,useCallback as u}from"react";import{useSearchParams as L}from"react-router-dom";const P=()=>{const[s,m]=L(),l=p(()=>s.getAll("owners"),[s]),a=p(()=>s.getAll("lifecycles"),[s]),r=p(()=>s.getAll("types"),[s]),c=p(()=>s.getAll("systems"),[s]),[n,g]=i(a),[o,h]=i(l),[y,S]=i(r),[d,w]=i(c);F(()=>{h(l??[]),g(a??[]),S(r??[]),w(c??[])},[l,a,r,c]);const E=p(()=>{const e={owners:!f(o,l??[]),lifecycles:!f(n,a??[]),types:!f(y,r??[]),systems:!f(d,c??[])};return Object.values(e).some(Boolean)},[o,l,n,a,y,r,d,c]),A=u(()=>{const e=new URLSearchParams(s);e.delete("lifecycles"),e.delete("owners"),e.delete("types"),e.delete("systems"),n.length>0&&n.forEach(t=>e.append("lifecycles",t)),o.length>0&&o.forEach(t=>e.append("owners",t)),y.length>0&&y.forEach(t=>e.append("types",t)),d.length>0&&d.forEach(t=>e.append("systems",t)),m(e)},[s,n,o,y,d,m]);return{handleClearFilters:u(()=>{g([]),h([]),S([]),w([]);const e=new URLSearchParams(s);e.delete("lifecycles"),e.delete("owners"),e.delete("types"),e.delete("systems"),m(e)},[s,m]),handleApplyFilters:A,hasFilterChanges:E,stagedTypes:y,stagedLifecycles:n,stagedSystems:d,stagedOwners:o,setStagedTypes:S,setStagedLifecycles:g,setStagedOwners:h,setStagedSystems:w,owners:l,lifecycles:a,types:r,systems:c}};export{P as useTrackFilterSidebar};
2
+ //# sourceMappingURL=useTrackFilterSidebar.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as n,jsxs as o}from"react/jsx-runtime";import{makeStyles as q,Grid as t,RadioGroup as F,Radio as h,Typography as p,TextField as v,FormControl as R,InputLabel as S,Select as w,MenuItem as A,Divider as H}from"@material-ui/core";import{useState as f,useRef as B,useEffect as G}from"react";import{getCronDescription as O}from"../../utils/cron.esm.js";import{MIN_TIME_UNIT_VALUE as V,MAX_TIME_UNIT_VALUE as W}from"../../utils/time.esm.js";import{TimeUnit as j}from"./types.esm.js";import{VALID_TIME_UNITS as X,toTimeUnit as z}from"./util.esm.js";const J=q(a=>({divider:{marginTop:a.spacing(3),marginBottom:a.spacing(3)},title:{cursor:"pointer"},humanDurationContainer:{alignItems:"flex-start",marginTop:3},cronInput:{width:250,marginTop:3},noPaddingLeft:{paddingLeft:0},noPadding:{padding:0},fullWidth:{width:"100%"},radioOptions:{width:"80%",paddingLeft:a.spacing(1)},selectField:{paddingRight:a.spacing(2)},inputLabel:{color:`${a.palette.text.primary} !important`},menuBackground:{backgroundColor:a.palette.background.paper}})),N=32,y=12,b=a=>a?(Math.ceil(a.length/N)-1)*y:0,K=({value:a,onChange:m,disabled:s,errors:d,intervalTitle:I,intervalDescription:L,intervalLabel:P,cronTitle:T,cronDescription:x})=>{const e=J(),[i,l]=f(a),[C,D]=f(`${a.value}`),u=B();G(()=>{m&&i!==u.current&&(u.current=i,m(i))},[i,m]);const E=r=>{l({...a,type:r.target.value})},$=r=>{D(r.target.value);const c=parseInt(r.target.value,10);l({...a,value:isNaN(c)?0:c})},M=r=>{l({...i,unit:z(r.target.value)??j.Hours})},U=r=>{const c=r.target.value;l({...i,cron:c})},_=()=>{l({...i,type:"cron"})},k=()=>{l({...i,type:"HumanDuration"})},g=d?.message??O(i.cron);return n(t,{container:!0,direction:"row",children:n(t,{item:!0,className:`${e.noPadding} ${e.fullWidth}`,children:o(F,{name:"frequencyType",value:i.type,onChange:E,children:[o(t,{container:!0,alignItems:"flex-start",className:e.fullWidth,children:[n(t,{item:!0,className:e.noPaddingLeft,children:n(h,{disabled:s,value:"HumanDuration"})}),o(t,{item:!0,className:`${e.noPadding} ${e.radioOptions}`,children:[n(p,{variant:"body1",className:e.title,onClick:k,children:I??"Run on a regular interval"}),n(p,{variant:"caption",children:L??"Set consistent time intervals."}),i.type==="HumanDuration"&&o(t,{container:!0,className:e.humanDurationContainer,spacing:2,children:[n(t,{item:!0,className:e.noPadding,children:n(v,{id:"every",type:"number",inputProps:{min:V,max:W},label:P??"Every",name:"every",disabled:s,value:C,error:!!d?.message,helperText:d?.message,onChange:$,InputLabelProps:{className:e.inputLabel}})}),n(t,{item:!0,className:e.noPadding,children:o(R,{children:[n(S,{className:e.inputLabel,id:"frequency-unit",children:"Unit"}),n(w,{labelId:"frequency-unit",disabled:s,value:i.unit,onChange:M,"data-testid":"frequency-unit",className:e.selectField,MenuProps:{classes:{paper:e.menuBackground}},children:X.map(r=>n(A,{value:r,children:r},r))})]})})]})]})]}),n(H,{className:e.divider}),o(t,{container:!0,alignItems:"flex-start",children:[n(t,{item:!0,className:e.noPaddingLeft,children:n(h,{disabled:s,value:"cron"})}),o(t,{item:!0,className:`${e.noPadding} ${e.radioOptions}`,children:[n(p,{variant:"body1",className:e.title,onClick:_,children:T??"Run on a schedule"}),n(p,{variant:"caption",children:x??"Set a specific schedule using a cron expression."}),i.type==="cron"&&n(t,{item:!0,className:e.noPadding,children:n(v,{id:"cron-expression","data-testid":"cron-expression",className:e.cronInput,label:g,disabled:s,placeholder:"* * * * *",error:!!d?.message,value:i.cron,onChange:U,InputProps:{style:{paddingTop:`${b(g)}px`}}})})]})]})]})})})};export{K as FrequencyComponent,b as calculateCronLabelPadding,N as characterLimitPerLine,y as paddingPerExtraLine};
1
+ import{jsx as n,jsxs as o}from"react/jsx-runtime";import{makeStyles as q,Grid as r,RadioGroup as F,Radio as h,Typography as p,TextField as v,FormControl as R,InputLabel as S,Select as w,MenuItem as A,Divider as B}from"@material-ui/core";import{useState as f,useRef as G,useEffect as H}from"react";import{getCronDescription as O}from"../../utils/cron.esm.js";import{MIN_TIME_UNIT_VALUE as V,MAX_TIME_UNIT_VALUE as W}from"../../utils/time.esm.js";import{TimeUnit as j}from"./types.esm.js";import{VALID_TIME_UNITS as X,toTimeUnit as z}from"./util.esm.js";const J=q(a=>({divider:{marginTop:a.spacing(3),marginBottom:a.spacing(3)},title:{cursor:"pointer"},humanDurationContainer:{alignItems:"flex-start",marginTop:3},cronInput:{width:250,marginTop:3},noPaddingLeft:{paddingLeft:0},noPadding:{padding:0},fullWidth:{width:"100%"},radioOptions:{width:"80%",paddingLeft:a.spacing(1)},selectField:{paddingRight:a.spacing(2)},inputLabel:{color:`${a.palette.text.primary} !important`},menuBackground:{backgroundColor:a.palette.background.paper}})),y=32,N=12,b=a=>a?(Math.ceil(a.length/y)-1)*N:0,K=({value:a,onChange:m,disabled:s,errors:d,intervalTitle:I,intervalDescription:L,intervalLabel:P,cronTitle:T,cronDescription:x})=>{const e=J(),[i,l]=f(a),[C,D]=f(`${a.value}`),u=G();H(()=>{m&&i!==u.current&&(u.current=i,m(i))},[i,m]);const E=t=>{l({...a,type:t.target.value})},$=t=>{D(t.target.value);const c=parseInt(t.target.value,10);l({...a,value:isNaN(c)?0:c})},M=t=>{l({...i,unit:z(t.target.value)??j.Days})},U=t=>{const c=t.target.value;l({...i,cron:c})},_=()=>{l({...i,type:"cron"})},k=()=>{l({...i,type:"HumanDuration"})},g=d?.message??O(i.cron);return n(r,{container:!0,direction:"row",children:n(r,{item:!0,className:`${e.noPadding} ${e.fullWidth}`,children:o(F,{name:"frequencyType",value:i.type,onChange:E,children:[o(r,{container:!0,alignItems:"flex-start",className:e.fullWidth,children:[n(r,{item:!0,className:e.noPaddingLeft,children:n(h,{disabled:s,value:"HumanDuration"})}),o(r,{item:!0,className:`${e.noPadding} ${e.radioOptions}`,children:[n(p,{variant:"body1",className:e.title,onClick:k,children:I??"Run on a regular interval"}),n(p,{variant:"caption",children:L??"Set consistent time intervals."}),i.type==="HumanDuration"&&o(r,{container:!0,className:e.humanDurationContainer,spacing:2,children:[n(r,{item:!0,className:e.noPadding,children:n(v,{id:"every",type:"number",inputProps:{min:V,max:W},label:P??"Every",name:"every",disabled:s,value:C,error:!!d?.message,helperText:d?.message,onChange:$,InputLabelProps:{className:e.inputLabel}})}),n(r,{item:!0,className:e.noPadding,children:o(R,{children:[n(S,{className:e.inputLabel,id:"frequency-unit",children:"Unit"}),n(w,{labelId:"frequency-unit",disabled:s,value:i.unit,onChange:M,"data-testid":"frequency-unit",className:e.selectField,MenuProps:{classes:{paper:e.menuBackground}},children:X.map(t=>n(A,{value:t,children:t},t))})]})})]})]})]}),n(B,{className:e.divider}),o(r,{container:!0,alignItems:"flex-start",children:[n(r,{item:!0,className:e.noPaddingLeft,children:n(h,{disabled:s,value:"cron"})}),o(r,{item:!0,className:`${e.noPadding} ${e.radioOptions}`,children:[n(p,{variant:"body1",className:e.title,onClick:_,children:T??"Run on a schedule"}),n(p,{variant:"caption",children:x??"Set a specific schedule using a cron expression."}),i.type==="cron"&&n(r,{item:!0,className:e.noPadding,children:n(v,{id:"cron-expression","data-testid":"cron-expression",className:e.cronInput,label:g,disabled:s,placeholder:"* * * * *",error:!!d?.message,value:i.cron,onChange:U,InputProps:{style:{paddingTop:`${b(g)}px`}}})})]})]})]})})})};export{K as FrequencyComponent,b as calculateCronLabelPadding,y as characterLimitPerLine,N as paddingPerExtraLine};
2
2
  //# sourceMappingURL=FrequencyComponent.esm.js.map
@@ -1,2 +1,2 @@
1
- import a from"lodash";import{TimeUnit as n}from"./types.esm.js";const i=()=>({type:"HumanDuration",unit:n.Hours,value:1,cron:""}),m=()=>({type:"HumanDuration",unit:n.Minutes,value:15,cron:""}),s=[n.Months,n.Weeks,n.Days,n.Hours,n.Minutes,n.Seconds];function f(t){return s.includes(t)}function c(t){switch(t){case"months":return n.Months;case"weeks":return n.Weeks;case"days":return n.Days;case"hours":return n.Hours;case"minutes":return n.Minutes;case"seconds":return n.Seconds;default:return null}}function l(t){if(t){const{cron:r,type:e,unit:u,value:o}=t;return e==="HumanDuration"?{[u]:o}:{cron:r}}}function y(t){const r=i();if(t&&a.isObject(t)){if("cron"in t)return{...r,type:"cron",cron:t.cron};const e=Object.entries(t);if(e.length){const[u,o]=e[0];return{...r,unit:c(u)??n.Hours,value:o}}}return r}export{s as VALID_TIME_UNITS,i as defaultFrequency,m as defaultInitialDelay,f as isTimeUnit,l as mapFrequencyToHumanDurationOrCron,y as mapHumanDurationOrCronToFrequency,c as toTimeUnit};
1
+ import a from"lodash";import{TimeUnit as n}from"./types.esm.js";const i=()=>({type:"HumanDuration",unit:n.Days,value:1,cron:""}),m=()=>({type:"HumanDuration",unit:n.Minutes,value:15,cron:""}),s=[n.Months,n.Weeks,n.Days,n.Hours,n.Minutes,n.Seconds];function f(t){return s.includes(t)}function c(t){switch(t){case"months":return n.Months;case"weeks":return n.Weeks;case"days":return n.Days;case"hours":return n.Hours;case"minutes":return n.Minutes;case"seconds":return n.Seconds;default:return null}}function l(t){if(t){const{cron:r,type:e,unit:u,value:o}=t;return e==="HumanDuration"?{[u]:o}:{cron:r}}}function y(t){const r=i();if(t&&a.isObject(t)){if("cron"in t)return{...r,type:"cron",cron:t.cron};const e=Object.entries(t);if(e.length){const[u,o]=e[0];return{...r,unit:c(u)??n.Days,value:o}}}return r}export{s as VALID_TIME_UNITS,i as defaultFrequency,m as defaultInitialDelay,f as isTimeUnit,l as mapFrequencyToHumanDurationOrCron,y as mapHumanDurationOrCronToFrequency,c as toTimeUnit};
2
2
  //# sourceMappingURL=util.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as r}from"react/jsx-runtime";import{EntityDisplayName as l}from"@backstage/plugin-catalog-react";import{Chip as p}from"@material-ui/core";const s=({groupEntityRef:o,selectedGroupRef:e,setSelectedGroup:i})=>{const t=o===e;return r(p,{onClick:t?void 0:()=>i(o),size:"small",color:t?"secondary":"default",label:r(l,{entityRef:o,disableTooltip:!0}),style:{marginBottom:6}},o)};export{s as GroupHierarchyChip};
1
+ import{jsx as r}from"react/jsx-runtime";import{EntityDisplayName as l}from"@backstage/plugin-catalog-react";import{Chip as p}from"@material-ui/core";const n=({groupEntityRef:o,selectedGroupRef:e,setSelectedGroup:i})=>{if(!o)return null;const t=o===e;return r(p,{onClick:t?void 0:()=>i(o),size:"small",color:t?"secondary":"default",label:r(l,{entityRef:o,disableTooltip:!0}),style:{marginBottom:6}},o)};export{n as GroupHierarchyChip};
2
2
  //# sourceMappingURL=GroupHierarchyChip.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as r,jsx as e,Fragment as b}from"react/jsx-runtime";import{useEntityPresentation as B,EntityDisplayName as O}from"@backstage/plugin-catalog-react";import{Box as l,Typography as p}from"@material-ui/core";import{isEmpty as d}from"lodash";import{useMemo as s}from"react";import{useGroupHierarchy as x}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"react-hook-form";import"../ListboxVirtualized/ListboxVirtualized.esm.js";import{ControlledAutocomplete as j}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{LoadingIndicator as C}from"../LoadingIndicator/LoadingIndicator.esm.js";import{GroupHierarchyChip as H}from"./GroupHierarchyChip.esm.js";const S=({filteredGroupOptions:t,setSelectedGroup:m,selectedGroupRef:u})=>{const c=s(()=>t.map(n=>n.ref),[t]),h=s(()=>t.find(n=>n.ref===u)?.ref||null,[t,u]);return r(b,{children:[!d(t)&&t.length>=20&&e(l,{marginBottom:2,children:e(j,{options:c,onChange:m,value:h,autoSelect:!1,getOptionLabel:n=>t.find(f=>f.ref===n)?.name??n,placeholder:"Search groups"})}),!d(t)&&t.length<20&&t.map(({ref:n})=>e(H,{setSelectedGroup:m,groupEntityRef:n},n))]})},L=({groupEntityRef:t,selectedGroup:m,setSelectedGroup:u,groupOptions:c})=>{const{primaryTitle:h,secondaryTitle:n}=B(t),{isLoading:f,data:R}=x(t,{includeParent:!0}),i=R?.[t],y=s(()=>{if(!i)return 0;let a=0;const o=(E={})=>{a+=E.ownedEntityRefs?.length??0;for(const w of Object.values(E.children))o(w)};return o(i),a},[i]),g=s(()=>{const a=i?.children??{};return Object.values(a).map(o=>({ref:o.entityRef,type:o.type}))},[i?.children]),G=s(()=>{if(d(g))return[];const a=new Set(g.map(o=>o.ref));return c.filter(o=>a.has(o.ref))},[g,c]),v=s(()=>{if(d(i?.parents))return[];const a=new Set(i?.parents??[]);return c.filter(o=>a.has(o.ref))},[i?.parents,c]);return r(l,{children:[r(l,{marginBottom:1,children:[e(p,{variant:"h6",children:e(O,{entityRef:t})}),e(p,{variant:"caption",children:n})]}),f&&r(l,{textAlign:"center",marginTop:2,marginBottom:2,children:[e(C,{}),e(l,{marginTop:2,children:e(p,{variant:"caption",children:"Loading Group Hierarchy"})})]}),i?.ownedEntityRefs&&r(l,{marginBottom:2,children:[e(p,{variant:"subtitle2",children:"Entity Ownership"}),r(p,{variant:"body2",children:[r("strong",{children:[h," directly owns:"]})," ",i.ownedEntityRefs.length," ",i.ownedEntityRefs.length===0?"Entity":"Entities"]}),r(p,{variant:"body2",children:[r("strong",{children:[h," and it's subgroups own:"]})," ",y," ",y===0?"Entity":"Entities"]})]}),!f&&r(b,{children:[r(l,{marginBottom:2,children:[e(p,{variant:"subtitle2",children:"Select Child Group"}),d(G)&&e(p,{variant:"body2",children:"No child groups"}),e(S,{filteredGroupOptions:G,setSelectedGroup:u,selectedGroupRef:m})]}),r(l,{marginBottom:2,children:[e(p,{variant:"subtitle2",children:"Select Parent Group"}),d(v)&&e(p,{variant:"body2",children:"No parent groups"}),e(S,{filteredGroupOptions:v,setSelectedGroup:u,selectedGroupRef:m})]})]})]})};export{L as GroupHierarchyGroupInfo};
1
+ import{jsxs as r,jsx as e,Fragment as v}from"react/jsx-runtime";import{useEntityPresentation as R,EntityDisplayName as w}from"@backstage/plugin-catalog-react";import{Box as l,Typography as o}from"@material-ui/core";import{isEmpty as d}from"lodash";import{useMemo as c}from"react";import{useGroupHierarchy as B}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"react-hook-form";import"../ListboxVirtualized/ListboxVirtualized.esm.js";import{ControlledAutocomplete as O}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{LoadingIndicator as T}from"../LoadingIndicator/LoadingIndicator.esm.js";import{getAllOwnedEntityCount as x}from"./getAllOwnedEntityCount.esm.js";import{GroupHierarchyChip as C}from"./GroupHierarchyChip.esm.js";const S=({filteredGroupOptions:t,setSelectedGroup:s,selectedGroupRef:m})=>{const a=c(()=>t.map(n=>n.ref),[t]),h=c(()=>t.find(n=>n.ref===m)?.ref||null,[t,m]);return r(v,{children:[!d(t)&&t.length>=20&&e(l,{marginBottom:2,children:e(O,{options:a,onChange:s,value:h,autoSelect:!1,getOptionLabel:n=>t.find(f=>f.ref===n)?.name??n,placeholder:"Search groups"})}),!d(t)&&t.length<20&&t.map(({ref:n})=>e(C,{setSelectedGroup:s,groupEntityRef:n},n))]})},H=({groupEntityRef:t,selectedGroup:s,setSelectedGroup:m,groupOptions:a})=>{const{primaryTitle:h,secondaryTitle:n}=R(t),{isLoading:f,data:b}=B(t,{includeParent:!0}),i=b?.[t],y=c(()=>x(i),[i]),g=c(()=>{const u=i?.children??{};return Object.values(u).map(p=>({ref:p.entityRef,type:p.type}))},[i?.children]),G=c(()=>{if(d(g))return[];const u=new Set(g.map(p=>p.ref));return a.filter(p=>u.has(p.ref))},[g,a]),E=c(()=>{if(d(i?.parents))return[];const u=new Set(i?.parents??[]);return a.filter(p=>u.has(p.ref))},[i?.parents,a]);return r(l,{children:[r(l,{marginBottom:1,children:[e(o,{variant:"h6",children:e(w,{entityRef:t})}),e(o,{variant:"caption",children:n})]}),f&&r(l,{textAlign:"center",marginTop:2,marginBottom:2,children:[e(T,{}),e(l,{marginTop:2,children:e(o,{variant:"caption",children:"Loading Group Hierarchy"})})]}),i?.ownedEntityRefs&&r(l,{marginBottom:2,children:[e(o,{variant:"subtitle2",children:"Entity Ownership"}),r(o,{variant:"body2",children:[r("strong",{children:[h," directly owns:"]})," ",i.ownedEntityRefs.length," ",i.ownedEntityRefs.length===0?"Entity":"Entities"]}),r(o,{variant:"body2",children:[r("strong",{children:[h," and it's subgroups own:"]})," ",y," ",y===0?"Entity":"Entities"]})]}),!f&&r(v,{children:[r(l,{marginBottom:2,children:[e(o,{variant:"subtitle2",children:"Select Child Group"}),d(G)&&e(o,{variant:"body2",children:"No child groups"}),e(S,{filteredGroupOptions:G,setSelectedGroup:m,selectedGroupRef:s})]}),r(l,{marginBottom:2,children:[e(o,{variant:"subtitle2",children:"Select Parent Group"}),d(E)&&e(o,{variant:"body2",children:"No parent groups"}),e(S,{filteredGroupOptions:E,setSelectedGroup:m,selectedGroupRef:s})]})]})]})};export{H as GroupHierarchyGroupInfo};
2
2
  //# sourceMappingURL=GroupHierarchyGroupInfo.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as d,Fragment as f,jsx as t}from"react/jsx-runtime";import{Button as G}from"@material-ui/core";import y from"@material-ui/icons/Menu";import{useState as l,useCallback as s}from"react";import{GroupHierarchySelectorDialog as h}from"./GroupHierarchySelectorDialog.esm.js";import{usePreviousSelectedGroups as S}from"./usePreviousSelectedGroups.esm.js";const g=({buttonProps:u,currentSelectedGroup:r,applyGroup:p})=>{const[c,e]=l(!1),[o,i]=l(""),{groupEntityRefs:n}=S(),a=s(()=>{r&&i(r),e(!0)},[r]),m=s(()=>{p(o),e(!1)},[p,o]);return d(f,{children:[t(G,{onClick:a,color:"primary",variant:"outlined",...u,size:"small",startIcon:t(y,{}),children:"Group"}),t(h,{open:c,handleClose:()=>e(!1),handleApply:m,previousGroupEntityRefs:n,selectedGroup:o,setSelectedGroup:i})]})};export{g as GroupHierarchySelector};
1
+ import{jsxs as h,Fragment as y,jsx as r}from"react/jsx-runtime";import{useApi as G,configApiRef as S}from"@backstage/core-plugin-api";import{makeStyles as g,Button as R}from"@material-ui/core";import k from"@material-ui/icons/Menu";import{RiFilter3Line as A}from"@remixicon/react";import{useState as p,useCallback as n}from"react";import{GroupHierarchySelectorDialog as v}from"./GroupHierarchySelectorDialog.esm.js";import{usePreviousSelectedGroups as x}from"./usePreviousSelectedGroups.esm.js";const B=g({filterButton:{width:18}}),C=({buttonProps:s,currentSelectedGroup:o,applyGroup:i})=>{const u=B(),[c,t]=p(!1),[e,l]=p(""),{groupEntityRefs:a}=x(),m=G(S).getOptionalStringArray("soundcheck.flags")?.includes("portal")??!1,f=n(()=>{o&&l(o),t(!0)},[o]),d=n(()=>{i(e),t(!1)},[i,e]);return h(y,{children:[r(R,{onClick:f,color:"primary",variant:"outlined",...s,size:"small",startIcon:m?r(A,{className:u.filterButton}):r(k,{}),children:"Group"}),r(v,{open:c,handleClose:()=>t(!1),handleApply:d,previousGroupEntityRefs:a,selectedGroup:e,setSelectedGroup:l})]})};export{C as GroupHierarchySelector};
2
2
  //# sourceMappingURL=GroupHierarchySelector.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsx as e,jsxs as i,Fragment as R}from"react/jsx-runtime";import{makeStyles as L,Slide as D,Dialog as E,DialogTitle as j,Box as r,IconButton as A,DialogContent as H,Typography as a,Divider as O,DialogActions as k,Button as S}from"@material-ui/core";import I from"@material-ui/icons/Close";import{uniq as N,isEmpty as g}from"lodash";import{forwardRef as z,useMemo as f}from"react";import{useGroupOptions as w}from"../../hooks/groups/useGroupOptions.esm.js";import{useGroupTypeHierarchy as M}from"../../hooks/heirarchy/useGroupTypeHierarchy.esm.js";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"react-hook-form";import"../ListboxVirtualized/ListboxVirtualized.esm.js";import{ControlledAutocomplete as W}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{LoadingIndicator as K}from"../LoadingIndicator/LoadingIndicator.esm.js";import{GroupHierarchyCategorySelection as P}from"./GroupHierarchyCategorySelection.esm.js";import{GroupHierarchyChip as y}from"./GroupHierarchyChip.esm.js";import{GroupHierarchyGroupInfo as q}from"./GroupHierarchyGroupInfo.esm.js";const F=L(n=>({dialogToolbar:{justifyContent:"flex-start"},dialogToolbarButton:{margin:n.spacing(.5,1,.5,0)},divider:{marginTop:n.spacing(2),marginBottom:n.spacing(2)}})),_=z((n,d)=>e(D,{direction:"up",ref:d,...n})),J=({open:n,handleClose:d,handleApply:b,previousGroupEntityRefs:s,selectedGroup:t,setSelectedGroup:p})=>{const m=F(),{isLoading:G,options:l}=w(),{isLoading:T,data:h}=M(),B=f(()=>{if(!h)return[];const o=[],c=u=>{o.push(u.type);for(const x of Object.values(u.children))c(x)};for(const u of Object.values(h))c(u);return N(o)},[h]),v=f(()=>l.filter(o=>o.key==="My Groups").map(o=>o.ref),[l]),C=f(()=>l.map(o=>o.ref),[l]);return i(E,{fullWidth:!0,maxWidth:"md",open:n,onClose:(o,c)=>c==="escapeKeyDown"&&d(),TransitionComponent:_,children:[e(j,{children:i(r,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[e(r,{children:"Group Selection"}),e(r,{children:e(A,{onClick:d,size:"small",children:e(I,{fontSize:"small"})})})]})}),e(H,{dividers:!0,children:i(r,{display:"flex",children:[i(r,{maxWidth:480,flex:1,children:[i(r,{marginBottom:2,children:[e(a,{variant:"h6",children:"Search All Groups"}),e(a,{variant:"subtitle2",children:"Selected Group"}),e(W,{options:C,isLoading:G,value:t,autoSelect:!1,getOptionLabel:o=>l.find(c=>c.ref===o)?.name??o,onChange:p,placeholder:"No group selected"})]}),e(O,{className:m.divider}),!t&&!g(s)&&i(r,{marginBottom:2,children:[e(a,{variant:"subtitle2",children:"Previously Selected Groups"}),e(r,{marginTop:1,children:s.map(o=>e(y,{groupEntityRef:o,selectedGroupRef:t,setSelectedGroup:p},o))})]}),!t&&!g(v)&&i(r,{marginBottom:2,children:[e(a,{variant:"subtitle2",children:"My Groups"}),e(r,{marginTop:1,children:v.map(o=>e(y,{groupEntityRef:o,selectedGroupRef:t,setSelectedGroup:p},o))})]}),t&&e(r,{marginTop:2,children:e(q,{groupEntityRef:t,selectedGroup:t,setSelectedGroup:p,groupOptions:l})})]}),i(r,{marginLeft:3,flex:1,children:[t&&!g(s)&&e(R,{children:i(r,{marginBottom:2,children:[e(a,{variant:"subtitle2",children:"Previously Selected Groups"}),e(r,{marginTop:1,children:s.map(o=>e(y,{groupEntityRef:o,selectedGroupRef:t,setSelectedGroup:p},o))})]})}),T&&i(r,{marginTop:4,marginBottom:2,children:[e(K,{}),e(r,{marginTop:2,marginBottom:2,textAlign:"center",children:e(a,{variant:"caption",children:"Loading Hierarchy Data"})})]}),!T&&i(r,{children:[e(a,{variant:"h6",children:"Search By Group Type"}),B.map(o=>e(P,{groupType:o,selectedGroupEntityRef:t,selectGroup:p,allOptions:l,isLoading:G},o))]})]})]})}),e(k,{className:m.dialogToolbar,children:i(r,{marginLeft:2,children:[e(S,{size:"small",onClick:b,variant:"contained",color:"primary",className:m.dialogToolbarButton,children:"Apply"}),e(S,{className:m.dialogToolbarButton,size:"small",onClick:d,color:"primary",children:"Cancel"})]})})]})};export{J as GroupHierarchySelectorDialog};
1
+ import{jsx as e,jsxs as i,Fragment as L}from"react/jsx-runtime";import{makeStyles as k,Slide as A,Dialog as E,DialogTitle as j,Box as o,IconButton as H,DialogContent as I,Typography as n,Switch as O,Divider as z,DialogActions as N,Button as b}from"@material-ui/core";import w from"@material-ui/icons/Close";import{uniq as M,isEmpty as f}from"lodash";import{forwardRef as W,useMemo as y}from"react";import P from"react-use/lib/useLocalStorage";import{useGroupOptions as q}from"../../hooks/groups/useGroupOptions.esm.js";import{useGroupTypeHierarchy as F}from"../../hooks/heirarchy/useGroupTypeHierarchy.esm.js";import"../FormControlledAutocomplete/FormControlledAutocomplete.esm.js";import"@material-ui/icons/CheckBox";import"@material-ui/icons/CheckBoxOutlineBlank";import"@material-ui/lab";import"react-hook-form";import"../ListboxVirtualized/ListboxVirtualized.esm.js";import{ControlledAutocomplete as K}from"../FormControlledAutocomplete/ControlledAutocomplete.esm.js";import{LoadingIndicator as Q}from"../LoadingIndicator/LoadingIndicator.esm.js";import{GroupHierarchyCategorySelection as U}from"./GroupHierarchyCategorySelection.esm.js";import{GroupHierarchyChip as G}from"./GroupHierarchyChip.esm.js";import{GroupHierarchyGroupInfo as $}from"./GroupHierarchyGroupInfo.esm.js";const J=k(l=>({dialogToolbar:{justifyContent:"flex-start"},dialogToolbarButton:{margin:l.spacing(.5,1,.5,0)},divider:{marginTop:l.spacing(2),marginBottom:l.spacing(2)}})),V=W((l,s)=>e(A,{direction:"up",ref:s,...l})),X=({open:l,handleClose:s,handleApply:C,previousGroupEntityRefs:m,selectedGroup:t,setSelectedGroup:c})=>{const u=J(),[p,x]=P("advanced-group-selector",!1),{isLoading:v,options:a}=q(),{isLoading:T,data:g}=F(),B=y(()=>{if(!g)return[];const r=[],d=h=>{r.push(h.type);for(const D of Object.values(h.children))d(D)};for(const h of Object.values(g))d(h);return M(r)},[g]),S=y(()=>a.filter(r=>r.key==="My Groups").map(r=>r.ref),[a]),R=y(()=>a.map(r=>r.ref),[a]);return i(E,{maxWidth:"md",open:l,onClose:(r,d)=>d==="escapeKeyDown"&&s(),TransitionComponent:V,children:[e(j,{children:i(o,{display:"flex",alignItems:"center",justifyContent:"space-between",children:[e(o,{display:"flex",alignItems:"center",children:e(o,{children:"Group Selection"})}),e(o,{children:e(H,{onClick:s,size:"small",children:e(w,{fontSize:"small"})})})]})}),e(I,{dividers:!0,children:i(o,{display:"flex",children:[i(o,{minWidth:320,maxWidth:480,flex:1,children:[i(o,{marginBottom:2,children:[e(n,{variant:"h6",children:"Search All Groups"}),e(n,{variant:"subtitle2",children:"Selected Group"}),e(K,{options:R,isLoading:v,value:t,autoSelect:!1,getOptionLabel:r=>a.find(d=>d.ref===r)?.name??r,onChange:c,placeholder:"No group selected"}),i(o,{marginTop:1,display:"flex",alignItems:"center",children:[e(n,{variant:"caption",component:"div",children:"Advanced Selector"}),e(O,{onClick:()=>x(!p),checked:p,size:"small","aria-label":"toggle advanced"})]})]}),e(z,{className:u.divider}),(!t||!p)&&!f(m)&&i(o,{marginBottom:2,children:[e(n,{variant:"subtitle2",children:"Previously Selected Groups"}),e(o,{marginTop:1,children:m.map(r=>e(G,{groupEntityRef:r,selectedGroupRef:t,setSelectedGroup:c},r))})]}),(!t||!p)&&!f(S)&&i(o,{marginBottom:2,children:[e(n,{variant:"subtitle2",children:"My Groups"}),e(o,{marginTop:1,children:S.map(r=>e(G,{groupEntityRef:r,selectedGroupRef:t,setSelectedGroup:c},r))})]}),p&&t&&e(o,{marginTop:2,children:e($,{groupEntityRef:t,selectedGroup:t,setSelectedGroup:c,groupOptions:a})})]}),p&&i(o,{marginLeft:3,flex:1,children:[t&&!f(m)&&e(L,{children:i(o,{marginBottom:2,children:[e(n,{variant:"subtitle2",children:"Previously Selected Groups"}),e(o,{marginTop:1,children:m.map(r=>e(G,{groupEntityRef:r,selectedGroupRef:t,setSelectedGroup:c},r))})]})}),T&&i(o,{marginTop:4,marginBottom:2,children:[e(Q,{}),e(o,{marginTop:2,marginBottom:2,textAlign:"center",children:e(n,{variant:"caption",children:"Loading Hierarchy Data"})})]}),!T&&i(o,{children:[e(n,{variant:"h6",children:"Search By Group Type"}),B.map(r=>e(U,{groupType:r,selectedGroupEntityRef:t,selectGroup:c,allOptions:a,isLoading:v},r))]})]})]})}),e(N,{className:u.dialogToolbar,children:i(o,{marginLeft:2,children:[e(b,{size:"small",onClick:C,variant:"contained",color:"primary",className:u.dialogToolbarButton,disabled:!t,children:"Apply"}),e(b,{className:u.dialogToolbarButton,size:"small",onClick:s,color:"primary",children:"Cancel"})]})})]})};export{X as GroupHierarchySelectorDialog};
2
2
  //# sourceMappingURL=GroupHierarchySelectorDialog.esm.js.map
@@ -0,0 +1,2 @@
1
+ const l=t=>{if(!t)return 0;let e=0;const n=(o={})=>{e+=o.ownedEntityRefs?.length??0;for(const r of Object.values(o.children))n(r)};return n(t),e};export{l as getAllOwnedEntityCount};
2
+ //# sourceMappingURL=getAllOwnedEntityCount.esm.js.map
@@ -1,2 +1,2 @@
1
- import{jsxs as l,jsx as e}from"react/jsx-runtime";import{makeStyles as u,useTheme as b,Box as n,Typography as s}from"@material-ui/core";const y=u({container:{display:"flex",flexDirection:"column",alignItems:"center",minHeight:0},gradientBox:{borderRadius:4,margin:0,minHeight:0,width:"100%",flex:1},captionTop:{marginBottom:4},captionBottom:{marginTop:4}}),v=({interpolator:h,minLabel:d="0%",maxLabel:c="100%",width:r="100%",height:p="100%",steps:m=40,orientation:t="vertical",markerValue:o})=>{const i=y(),a=b(),g=Array.from({length:m},(k,f)=>{const z=f/(m-1);return h(z)}),x=t==="horizontal"?`linear-gradient(to right, ${g.join(",")})`:`linear-gradient(to top, ${g.join(",")})`;return l(n,{className:i.container,height:t==="horizontal"?p:void 0,width:t==="horizontal"?r:void 0,style:{flexDirection:t==="horizontal"?"row":"column",width:r,alignItems:t==="horizontal"?"flex-end":"center",position:"relative"},children:[e(s,{variant:"caption",className:i.captionTop,style:{marginRight:t==="horizontal"?8:0,marginBottom:t==="horizontal"?0:4,alignSelf:t==="horizontal"?"flex-end":"center"},children:t==="horizontal"?d:c}),l(n,{style:{position:"relative",width:t==="horizontal"?r:void 0,height:t==="horizontal"?p:void 0,zIndex:1},children:[e(n,{className:i.gradientBox,style:{background:x,width:"100%",height:"100%"}}),t==="horizontal"&&typeof o=="number"&&l(n,{style:{position:"absolute",left:`calc(${o}% - 6px)`,top:0,height:"100%",width:"12px",zIndex:3,pointerEvents:"none",display:"block"},children:[e(n,{style:{position:"absolute",left:"5.5px",top:0,width:"1px",height:"100%",background:a.palette.background.default,margin:0,boxSizing:"border-box",zIndex:1}}),e("svg",{width:"12",height:"12",style:{position:"absolute",left:0,top:"50%",transform:"translateY(-50%)",background:"transparent",pointerEvents:"none",zIndex:2},children:e("circle",{cx:"6",cy:"6",r:"5",fill:h(o/100),stroke:a.palette.background.default,strokeWidth:"1"})}),typeof o=="number"&&e(s,{variant:"caption",style:{position:"absolute",left:"50%",top:"-16px",transform:"translateX(-50%)",color:a.palette.text.secondary,pointerEvents:"none",zIndex:3,fontSize:"0.7rem"},children:`${Math.round(o)}%`})]})]}),e(s,{variant:"caption",className:i.captionBottom,style:{marginLeft:t==="horizontal"?8:0,marginBottom:t==="horizontal"?0:4,alignSelf:t==="horizontal"?"flex-end":"center"},children:t==="horizontal"?c:d})]})};export{v as default};
1
+ import{jsxs as l,jsx as e}from"react/jsx-runtime";import{makeStyles as u,useTheme as b,Box as n,Typography as s}from"@material-ui/core";const y=u({container:{display:"flex",flexDirection:"column",alignItems:"center",minHeight:0},gradientBox:{borderRadius:4,margin:0,minHeight:0,width:"100%",flex:1},captionTop:{marginBottom:4},captionBottom:{marginTop:4}}),v=({interpolator:h,minLabel:d="0%",maxLabel:c="100%",width:r="100%",height:p="100%",steps:m=40,orientation:t="vertical",markerValue:o})=>{const i=y(),a=b(),g=Array.from({length:m},(k,f)=>{const z=f/(m-1);return h(z)}),x=t==="horizontal"?`linear-gradient(to right, ${g.join(",")})`:`linear-gradient(to top, ${g.join(",")})`;return l(n,{className:i.container,height:t==="horizontal"?p:void 0,width:t==="horizontal"?r:void 0,style:{flexDirection:t==="horizontal"?"row":"column",width:r,alignItems:t==="horizontal"?"flex-end":"center",position:"relative"},children:[e(s,{variant:"caption",className:i.captionTop,style:{marginRight:t==="horizontal"?8:0,marginBottom:t==="horizontal"?0:4,alignSelf:t==="horizontal"?"flex-end":"center"},children:t==="horizontal"?d:c}),l(n,{style:{position:"relative",width:t==="horizontal"?r:void 0,height:t==="horizontal"?p:void 0,zIndex:1},children:[e(n,{className:i.gradientBox,style:{background:x,width:"100%",height:"100%"}}),t==="horizontal"&&typeof o=="number"&&l(n,{style:{position:"absolute",left:`calc(${o}% - 6px)`,top:0,height:"100%",width:"12px",zIndex:3,pointerEvents:"none",display:"block"},children:[e(n,{style:{position:"absolute",left:"5.5px",top:0,width:"1px",height:"100%",background:a.palette.background.default,margin:0,boxSizing:"border-box",zIndex:1}}),e("svg",{width:"12",height:"12",style:{position:"absolute",left:0,top:"50%",transform:"translateY(-50%)",background:"transparent",pointerEvents:"none",zIndex:2},children:e("circle",{cx:"6",cy:"6",r:"5",fill:h(o/100),stroke:a.palette.background.default,strokeWidth:"1"})}),typeof o=="number"&&e(s,{variant:"caption",style:{position:"absolute",left:"50%",top:"-16px",transform:"translateX(-50%)",color:a.palette.text.secondary,pointerEvents:"none",zIndex:3,fontSize:"0.7rem"},children:`${Math.round(o)}%`})]})]}),e(s,{variant:"caption",className:i.captionBottom,style:{marginLeft:t==="horizontal"?8:0,marginBottom:t==="horizontal"?0:4,alignSelf:t==="horizontal"?"flex-end":"center"},children:t==="horizontal"?c:d})]})};export{v as ColorLegend};
2
2
  //# sourceMappingURL=ColorLegend.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as t,jsxs as d,Fragment as re}from"react/jsx-runtime";import{useApi as O,useRouteRef as ae,featureFlagsApiRef as Re,configApiRef as Te}from"@backstage/core-plugin-api";import{entityPresentationApiRef as we}from"@backstage/plugin-catalog-react";import{useTheme as ze,Button as Ie,Box as a,Select as oe,MenuItem as v,CircularProgress as Le,Typography as le,Tabs as Pe,Tab as ce}from"@material-ui/core";import{makeStyles as Be}from"@material-ui/core/styles";import De from"@material-ui/icons/ViewList";import{useState as w,useMemo as D,useCallback as W,useEffect as z,useRef as se}from"react";import{useSearchParams as We,useNavigate as He}from"react-router-dom";import $e from"react-use/lib/useLocalStorage";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import{useGetAllTracks as Ae}from"../../hooks/tracks/useGetAllTracks.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useGroupOptions as Ee}from"../../hooks/groups/useGroupOptions.esm.js";import{useHierarchicalTrackStatus as Ge}from"../../hooks/heirarchy/useHierarchicalTrackStatus.esm.js";import{useGroupHierarchy as Ue}from"../../hooks/heirarchy/useGroupHierarchy.esm.js";import{useLCPReporting as je}from"../../hooks/useLCPReporting.esm.js";import{trackDetailsRouteRef as Fe,techInsightsPageRouteRef as Ve}from"../../routes.esm.js";import{getColorInterpolators as Me}from"../../utils/colors.esm.js";import{EmptyState as Oe}from"../EmptyState/EmptyState.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as Ze}from"../SoundcheckHeader/useHeader.esm.js";import{TechInsightsGroupSelector as qe}from"../TechInsightsGroupSelector/TechInsightsGroupSelector.esm.js";import{TrackEntitiesTable as Je}from"../TrackPage/TrackEntitiesTable/TrackEntitiesTable.esm.js";import{TrackSelection as Ke}from"../TrackSelection/TrackSelection.esm.js";import{ColorLegend as Qe}from"./ColorLegend.esm.js";import{HierarchyTable as Xe}from"./HierarchyTable.esm.js";import{LowestPerformingTeams as Ye}from"./LowestPerformingTeams.esm.js";import{SelectedNodeSidebar as _e}from"./SelectedNodeSidebar.esm.js";import et from"./TopPerformingTeams.esm.js";import{NivoCirclePacking as de}from"./visualizations/NivoCirclePacking.esm.js";import"./visualizations/NivoHeatmap.esm.js";import{NivoIcicle as tt}from"./visualizations/NivoIcicle.esm.js";import{NivoSunburst as it}from"./visualizations/NivoSunburst.esm.js";import{NivoTreemap as nt}from"./visualizations/NivoTreemap.esm.js";import{VisualizationBreadcrumb as rt}from"./visualizations/VisualizationBreadcrumb.esm.js";import{hierarchyToNivo as me}from"./visualizations/hierarchyToNivo.esm.js";const ue=Be(i=>({root:{display:"flex",flexDirection:"column",height:"100%",padding:i.spacing(2,4)},mainContent:{flex:1,display:"flex",flexDirection:"column",minHeight:0},controlsContainer:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:i.spacing(2)},leftControls:{display:"flex",gap:i.spacing(1.5),alignItems:"center"},rightControls:{display:"flex",gap:i.spacing(2),alignItems:"center"},trackSelect:{minWidth:200},visualizationSelect:{minWidth:120},colorSchemeSelect:{minWidth:80},visualizationContainer:{flex:1,display:"flex",flexDirection:"column",gap:i.spacing(.5),width:"100%"},visualizationHeader:{display:"flex",justifyContent:"flex-end",alignItems:"center",marginBottom:i.spacing(2)},visualizationBox:{flex:1,minHeight:500},visualizationWrapper:{display:"flex",flexDirection:"row",height:"calc(100% - 56px)"},colorLegendContainer:{marginLeft:i.spacing(2),display:"flex",alignItems:"center"},colorLegendWrapper:{width:300},visualizationContent:{flex:1},loadingContainer:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",height:"100%",minHeight:500,backgroundColor:i.palette.background.default,borderRadius:i.shape.borderRadius},loadingSpinner:{marginBottom:i.spacing(2)},loadingText:{color:i.palette.text.secondary,fontSize:"1.1rem",fontWeight:500,textAlign:"center"},loadingSubtext:{color:i.palette.text.secondary,fontSize:"0.875rem",opacity:.8,textAlign:"center",marginTop:i.spacing(1)},summaryContainer:{display:"flex",flexDirection:"row",width:"100%",minHeight:300,padding:24},summaryBox:{flex:1,minWidth:0,display:"flex",flexDirection:"column"},summaryBoxLeft:{marginRight:i.spacing(1)},summaryBoxRight:{marginLeft:i.spacing(1)},entitiesContainer:{padding:24},tabsContainer:{width:"100%",marginTop:8},layoutContainer:{display:"flex",height:"100%"},mainLayout:{flex:3,display:"flex",flexDirection:"column",minWidth:0},mainLayoutTable:{flex:1,display:"flex",flexDirection:"column",minWidth:0},sidebarCollapsed:{width:0},sidebarTransition:{transition:"width 0.25s",height:"100%"},sidebarContainer:{height:"100%",marginLeft:24,borderLeft:`1px solid ${i.palette.divider}`,paddingLeft:24},breadcrumbContainer:{flex:1,marginRight:16},input:{backgroundColor:i.palette.background.paper}}));function he({interpolator:i,width:b=100,height:p=16,steps:o=40,style:l={}}){const g=`linear-gradient(to right, ${Array.from({length:o},(c,I)=>{const r=I/(o-1);return i(r)}).join(",")})`;return t(a,{style:{width:b,height:p,background:g,borderRadius:4,...l}})}function pe(i){const{children:b,value:p,index:o,...l}=i,g=ue();return t("div",{role:"tabpanel",hidden:p!==o,id:`tabpanel-${o}`,"aria-labelledby":`tab-${o}`,className:g.mainContent,...l,children:p===o&&b})}const at=()=>{const i=ue(),b=ze(),p=O(we),[o,l]=We(),g=o.get("track")||"",[c,I]=w(g),r=o.get("group"),H=o.get("node"),[Z,$]=w(null),[A,ge]=w(0),E=He(),fe=ae(Fe),q=ae(Ve),[ye,x]=w(null),[u,k]=w(null),J=O(Re),K=O(Te);je({routeName:"soundcheck-tech-insights-track",additionalAttributes:{trackId:c,group:r||"",visualization:o.get("visualization")||"table"}});const xe=D(()=>t(Ie,{variant:"contained",color:"primary",startIcon:t(De,{}),onClick:()=>{E(q())},children:"All Tracks"}),[q,E]);Ze({title:"Tech Insights",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tech-insights",sectionRight:xe});const{data:Ce}=Ae({}),s=Ce?.edges.find(e=>e.node.id===c)?.node,{data:S,isLoading:Q}=Ue(r||void 0,{enabled:!!r&&!!c&&!!s,ownedEntitiesFilter:s?.filter??void 0}),{data:f}=Ge({trackId:c,groupRef:r||"",skip:!c||!r}),ve=D(()=>s?.levels?s.levels.flatMap(e=>e.checks.map(n=>n.id)):[],[s]),C=o.get("visualization")||"table",X=o.get("colors")||"default",G=W((e,n)=>{if(e.entityRef===n)return e;if(e.children)for(const m of e.children){const ne=G(m,n);if(ne)return ne}return null},[]);z(()=>{if(H&&S&&r&&f&&s){const e=S[r];if(e){const n=me(e,f||null,()=>"#ccc",p,void 0);if(n){const m=G(n,H);m&&(k(m),x(m))}}}},[H,S,r,f,s,G,p]);const U=W(e=>{k(e),x(e);const n=new URLSearchParams(o.toString());e&&e.entityRef!==r?n.set("node",e.entityRef):n.delete("node"),l(n,{replace:!0})},[o,l,r]),{options:h,isLoading:N}=Ee(),[j,L]=$e("soundcheck.overview.groupRef",null),R=r,F=K.getOptionalString("soundcheck.overview.defaultSelectedGroupType"),P=D(()=>{if(!N&&h.length){if(R||j){const e=R??j;return h.find(n=>n.ref===e)??h[0]}else if(F)return h.find(e=>e.type===F)??h[0];return h[0]}return null},[F,N,h,R,j]);z(()=>{if(!N&&h.length&&!R&&P){const e=new URLSearchParams(o.toString());e.set("group",P.ref),l(e,{replace:!0}),L(P.ref)}},[N,h,R,P,o,l,L]);const Y=W(e=>{I(e);const n=new URLSearchParams(o.toString());n.set("track",e),r&&n.delete("group"),n.delete("node"),l(n),k(null),x(null)},[o,r,l]),_=se(null),T=W(()=>{k(null),x(null),$(null);const e=new URLSearchParams(o.toString());e.delete("node"),l(e,{replace:!0})},[o,l]),V=se(null);z(()=>{V.current&&V.current!==C&&T(),V.current=C},[C,T]),z(()=>{r&&r!==_.current&&T(),_.current=r},[r,T]),z(()=>{c!==g&&I(g)},[g]);const be=e=>{const n=e.target.value;if(n!==null){const m=new URLSearchParams(o.toString());m.set("visualization",n),l(m),$(null)}},ke=e=>{const n=new URLSearchParams(o.toString());n.set("colors",e.target.value),l(n)},Se=(e,n)=>{ge(n)},B=e=>{if(!c)return;const n=fe({trackId:c});E(`${n}?owners=${encodeURIComponent(e)}`)},M=Me(b),ee=M.find(e=>e.value===X)?.interpolator??(e=>"#ccc"),y=e=>ee(e/100),Ne=()=>{if(!r||!c||!s)return null;const e={trackId:c,groupRef:r,track:s,hierarchyData:S,trackStatus:f,getColor:y,onZoomChange:$,onNodeHover:n=>x(n),hoveredNode:ye,selectedNode:u,onNodeSelect:U};switch(C){case"treemap":return t(nt,{...e});case"icicle":return t(tt,{...e});case"sunburst":return t(it,{...e});case"circlepack":return t(de,{...e});case"table":{const n=S?.[r];if(!n)return null;const m=me(n,f||null,y,p,void 0);return t(Xe,{hierarchyData:m??null,getColor:y,selectedNode:u,onNodeSelect:U,trackStatus:f,onTeamClick:B})}default:return t(de,{...e})}},te=(!J.getRegisteredFlags().find(e=>e.name==="soundcheck-enable-tech-insights-visualizations")||J.isActive("soundcheck-enable-tech-insights-visualizations"))&&K.getOptionalBoolean("soundcheck.techInsights.showExperimentalVisualizations"),ie=D(()=>d(re,{children:[t(qe,{onChange:e=>{k(null),x(null),L(e)}}),t(a,{minWidth:320,children:t(Ke,{selectedTrackId:c,selectTrack:Y,selectedGroupRef:r??""})})]}),[Y,r,c,L]);return!(N||Q)&&(!s||!r)?t(a,{className:i.root,children:t(Oe,{title:"No Group or Track Selected",description:"Select a group and track in order to view insights.",action:t(a,{display:"flex",flexDirection:"column",gridGap:12,children:ie})})}):t(a,{className:i.root,children:d(a,{className:i.layoutContainer,children:[t(a,{className:i.mainLayout,children:d(a,{className:i.mainContent,children:[d(a,{className:i.controlsContainer,children:[t(a,{className:i.leftControls,children:ie}),te&&d(a,{className:i.rightControls,children:[t(a,{className:i.visualizationSelect,children:d(oe,{className:i.input,value:C,onChange:be,displayEmpty:!0,fullWidth:!0,"aria-label":"visualization select",margin:"dense",placeholder:"Visualization",variant:"outlined",children:[t(v,{value:"circlepack",children:"Circle Pack"}),t(v,{value:"icicle",children:"Icicle"}),t(v,{value:"sunburst",children:"Sunburst"}),t(v,{value:"treemap",children:"Treemap"}),t(v,{value:"table",children:"Table"})]})}),t(a,{className:i.colorSchemeSelect,children:t(oe,{className:i.input,value:X,fullWidth:!0,"aria-label":"color schema",onChange:ke,margin:"dense",placeholder:"Color Scheme",variant:"outlined",renderValue:e=>{const n=M.find(m=>m.value===e)?.interpolator;return t(a,{display:"flex",alignItems:"center",pr:3,children:typeof n=="function"&&t(he,{interpolator:n,width:90,height:20})})},children:M.map(e=>t(v,{value:e.value,children:t(a,{display:"flex",alignItems:"center",children:e.interpolator&&t(he,{interpolator:e.interpolator,width:90,height:20})})},e.value))})})]})]}),c&&r&&d(re,{children:[d(a,{className:i.visualizationContainer,minHeight:C!=="table"?400:void 0,children:[d(a,{mb:.5,display:"flex",alignItems:"center",children:[t(a,{className:i.breadcrumbContainer,children:t(rt,{node:u,onNodeClick:e=>{U(e)}})}),te&&t(a,{className:i.colorLegendWrapper,children:t(Qe,{interpolator:ee,orientation:"horizontal",height:24,width:"100%",markerValue:u?u.passPercentage:void 0})})]}),t(a,{className:i.visualizationContent,children:Q?d(a,{className:i.loadingContainer,children:[t(Le,{className:i.loadingSpinner,size:48}),t(le,{className:i.loadingText,children:"Loading organization hierarchy..."}),t(le,{className:i.loadingSubtext,children:"This may take a few moments while we gather data about your organization."})]}):Ne()})]}),d(a,{className:i.tabsContainer,children:[d(Pe,{value:A,onChange:Se,indicatorColor:"primary",textColor:"primary",children:[t(ce,{label:"Summary"}),t(ce,{label:"Entities"})]}),t(pe,{value:A,index:0,children:d(a,{className:i.summaryContainer,children:[t(a,{className:`${i.summaryBox} ${i.summaryBoxLeft}`,children:t(Ye,{trackStatus:f||null,getColor:y,onTeamClick:B})}),t(a,{className:`${i.summaryBox} ${i.summaryBoxRight}`,children:t(et,{trackStatus:f||null,getColor:y,onTeamClick:B})})]})}),t(pe,{value:A,index:1,children:t(a,{className:i.entitiesContainer,children:s&&t(Je,{track:s,initialPageSize:10,owners:u&&u.entityRef!==r?[u.entityRef]:Z?[Z]:[r],getColor:y})})})]})]})]})}),t(a,{className:i.sidebarTransition,width:u?360:0,children:t(a,{className:i.sidebarContainer,children:u&&t(_e,{node:u,clearSelectedNode:T,checkIds:ve,track:s,getColor:y,onTeamClick:B})})})]})})};export{at as HierarchicalTechInsightsPage};
2
+ //# sourceMappingURL=HierarchicalTechInsightsPage.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as f,jsx as t}from"react/jsx-runtime";import{useApi as q}from"@backstage/core-plugin-api";import{entityPresentationApiRef as G}from"@backstage/plugin-catalog-react";import{makeStyles as J,Typography as R,TableContainer as K,Paper as Q,Table as X,TableHead as Y,TableRow as E,TableCell as m,TableSortLabel as w,TableBody as Z,Box as k,Link as ee,TablePagination as te}from"@material-ui/core";import ne from"@material-ui/icons/ArrowDownward";import ae from"@material-ui/icons/ArrowUpward";import{useState as C,useEffect as re,useMemo as I}from"react";import{useSearchParams as ie}from"react-router-dom";import{ColorChip as oe}from"../ColorChip/ColorChip.esm.js";import{TeamStatusBar as le}from"../TeamStatusBar/TeamStatusBar.esm.js";const se=J(n=>({tableContainer:{display:"flex",flexDirection:"column",height:"100%"},selectedRow:{backgroundColor:n.palette.action.hover},table:{"& tbody tr":{cursor:"pointer","&:hover":{backgroundColor:n.palette.action.hover}},"& tbody tr.selected":{backgroundColor:n.palette.action.selected,"&:hover":{backgroundColor:n.palette.action.selected}}},headerCell:{cursor:"pointer"},headerContent:{display:"flex",alignItems:"center"},sortIconContainer:{width:"24px",display:"flex",justifyContent:"center"},sortIcon:{fontSize:"20px"},tableContainerPaper:{boxShadow:"none"},title:{paddingBottom:"8px"},chevronIcon:{fontSize:"20px"},chevronCell:{verticalAlign:"middle",padding:"8px 4px",lineHeight:1},placeholderDiv:{width:"20px",height:"20px",display:"inline-block"},statusColumnHeader:{width:"300px"},statusColumnCell:{width:"100%"},groupDisplayName:{lineHeight:"24px",fontWeight:"bold"}})),ce=n=>{const p=[],c=o=>{!o.children||o.children.length===0?o.numberOfEntities>0&&p.push(o):o.children.forEach(y=>c(y))};return c(n),p},O=(n,p)=>{if(!n||typeof n!="object")return null;if(n.groupRef===p)return n.status;if(n.children&&Array.isArray(n.children))for(const c of n.children){const o=O(c,p);if(o)return o}return null},de=({hierarchyData:n,getColor:p,selectedNode:c,onNodeSelect:o,onTeamClick:y,trackStatus:z})=>{const i=se(),A=q(G),[u,N]=ie(),[b,S]=C(0),[g,B]=C(10),L=u.get("sortBy"),D=u.get("direction"),[l,H]=C(L||"passPercentage"),[s,j]=C(D||"asc");re(()=>{const e=new URLSearchParams(u.toString());e.set("sortBy",l),e.set("direction",s),N(e,{replace:!0})},[l,s,u,N]);const P=I(()=>n?ce(n):[],[n]),T=I(()=>P.map(e=>({id:e.entityRef,name:e.name,entityRef:e.entityRef,passPercentage:e.passPercentage,numberOfEntities:e.numberOfEntities})).sort((e,d)=>{let a,r;switch(l){case"name":a=e.name.toLowerCase(),r=d.name.toLowerCase();break;case"passPercentage":a=e.passPercentage,r=d.passPercentage;break;case"numberOfEntities":a=e.numberOfEntities,r=d.numberOfEntities;break;default:return 0}return typeof a=="number"&&typeof r=="number"?s==="asc"?a-r:r-a:typeof a=="string"&&typeof r=="string"?s==="asc"?a.localeCompare(r):r.localeCompare(a):s==="asc"?a<r?-1:a>r?1:0:a>r?-1:a<r?1:0}),[P,l,s]);if(!n)return null;const M=e=>{if(o)if(c&&e.entityRef===c.entityRef)o(null);else{const d=P.find(a=>a.entityRef===e.entityRef);o(d||null)}},U=(e,d)=>{S(d)},V=e=>{B(parseInt(e.target.value,10)),S(0)},v=e=>{j(l===e&&s==="asc"?"desc":"asc"),H(e)},x=e=>e.direction==="asc"?t(ae,{...e,fontSize:"small"}):t(ne,{...e,fontSize:"small"}),W=T.slice(b*g,b*g+g);return f("div",{className:i.tableContainer,children:[t(R,{variant:"h6",className:i.title,children:"Teams"}),t(K,{component:Q,className:i.tableContainerPaper,children:f(X,{size:"small",children:[t(Y,{children:f(E,{children:[t(m,{className:i.headerCell,width:"35%",children:t(w,{active:l==="name",direction:l==="name"?s:"desc",onClick:()=>v("name"),IconComponent:x,children:t("div",{className:i.headerContent,children:"Team"})})}),t(m,{className:i.headerCell,width:"15%",children:t(w,{active:l==="numberOfEntities",direction:l==="numberOfEntities"?s:"desc",onClick:()=>v("numberOfEntities"),IconComponent:x,children:t("div",{className:i.headerContent,children:"Entities"})})}),t(m,{className:i.headerCell,width:"25%",children:t(w,{active:l==="passPercentage",direction:l==="passPercentage"?s:"desc",onClick:()=>v("passPercentage"),IconComponent:x,children:t("div",{className:i.headerContent,children:"Compliance"})})}),t(m,{className:i.statusColumnHeader,width:"25%"})]})}),t(Z,{children:W.map(e=>{const d=c&&e.entityRef===c.entityRef,a=A.forEntity(e.entityRef),r=a.snapshot.Icon,F=a.snapshot.primaryTitle||e.entityRef,h=O(z||null,e.entityRef),_=(h?.passed??0)+(h?.failed??0)+(h?.warning??0)+(h?.error??0)+(h?.notReported??0);return f(E,{hover:!0,onClick:()=>M(e),className:d?i.selectedRow:"",style:{cursor:"pointer"},children:[t(m,{style:{verticalAlign:"middle"},children:f(k,{display:"flex",alignItems:"center",height:"100%",children:[r&&t(k,{marginRight:1,display:"flex",alignItems:"center",height:"24px",children:t(r,{fontSize:"small"})}),t(ee,{component:"button",onClick:$=>{$.stopPropagation(),y?.(e.entityRef)},children:t(R,{variant:"body2",className:i.groupDisplayName,children:F})})]})}),t(m,{children:t(R,{variant:"body2",children:e.numberOfEntities.toLocaleString()})}),t(m,{children:t(oe,{value:h&&_>0?`${Math.round(e.passPercentage)}%`:"N/A",getColor:p,numericValue:e.passPercentage,size:"medium"})}),t(m,{children:t(k,{className:i.statusColumnCell,children:t(le,{status:h})})})]},e.id)})})]})}),t(te,{rowsPerPageOptions:[10,25,50],component:"div",count:T.length,rowsPerPage:g,page:b,onPageChange:U,onRowsPerPageChange:V})]})};export{de as HierarchyTable};
2
+ //# sourceMappingURL=HierarchyTable.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as o}from"react/jsx-runtime";import{useApi as f}from"@backstage/core-plugin-api";import{entityPresentationApiRef as u}from"@backstage/plugin-catalog-react";import{useTheme as c}from"@material-ui/core";import{useMemo as P}from"react";import{getLeafNodes as d}from"./getLeafNodes.esm.js";import{TeamPerformanceListCard as m}from"./TeamPerformanceListCard.esm.js";const C=({trackStatus:t,getColor:r,limit:i=3,onTeamClick:a})=>{const s=c(),n=f(u),l=P(()=>t?d(t):[],[t]);if(!t)return o(m,{title:"Teams Needing Attention",titleColor:s.palette.error.main,teams:[],getColor:r,onTeamClick:a,emptyMessage:"Loading team performance data..."});const p=l.filter(e=>e.status.passed+e.status.failed+e.status.warning+e.status.error+e.status.notReported>0&&(e.status.allPassPercentage??0)<50&&!e.children?.length).sort((e,g)=>(e.status.allPassPercentage??0)-(g.status.allPassPercentage??0)).slice(0,i).map(e=>({groupRef:e.groupRef,teamName:n.forEntity(e.groupRef).snapshot.primaryTitle,passPercentage:e.status.allPassPercentage??0}));return o(m,{title:"Teams Needing Attention",titleColor:s.palette.error.main,teams:p,getColor:r,onTeamClick:a,emptyMessage:"Every team is performing above 50%! \u{1F389}"})};export{C as LowestPerformingTeams};
2
+ //# sourceMappingURL=LowestPerformingTeams.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as r,jsx as t}from"react/jsx-runtime";import{Link as U}from"@backstage/core-components";import{useApi as F,useRouteRef as Y}from"@backstage/core-plugin-api";import{entityPresentationApiRef as _}from"@backstage/plugin-catalog-react";import{makeStyles as q,useTheme as G,Box as i,Link as J,Typography as l,Chip as K,IconButton as z,CircularProgress as T,Tooltip as Q}from"@material-ui/core";import X from"@material-ui/icons/Close";import Z from"@material-ui/icons/ExpandLess";import ee from"@material-ui/icons/ExpandMore";import{useState as te,useEffect as oe,useCallback as ae}from"react";import{useSearchParams as ie}from"react-router-dom";import{useCheckStatuses as ne}from"../../hooks/aggregations/useCheckStatuses.esm.js";import{trackCheckDetailsRouteRef as re}from"../../routes.esm.js";import{getContrastTextColor as R,getCheckStatusColor as le}from"../../utils/colors.esm.js";import{ColorChip as B}from"../ColorChip/ColorChip.esm.js";const se=q(e=>({checkLinkText:{color:"inherit",textDecoration:"none"},emptyStateIcon:{fontSize:e.typography.h3.fontSize,color:e.palette.text.secondary,opacity:.4,marginBottom:12},emptyStateText:{color:e.palette.text.secondary,textAlign:"center"},checksContainer:{flex:1,overflowY:"auto",minHeight:0},checksTitle:{fontWeight:"bold",marginBottom:4},levelHeader:{display:"flex",alignItems:"center",cursor:"pointer"},levelLabel:{fontWeight:"bold",letterSpacing:1,color:e.palette.text.secondary,marginBottom:2,flex:1},expandIcon:{fontSize:e.typography.body2.fontSize,color:e.palette.text.secondary},progressContainer:{display:"flex",alignItems:"center",justifyContent:"flex-start",marginBottom:16},progressWrapper:{position:"relative",display:"inline-flex"},progressBackground:{position:"absolute",color:e.palette.divider},progressText:{position:"absolute",top:0,left:0,bottom:0,right:0,display:"flex",alignItems:"center",justifyContent:"center",fontSize:e.typography.body1.fontSize,fontWeight:"bold"},checkName:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis","&:hover":{textDecoration:"underline"}},checkMessage:{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},statusChip:{fontSize:e.typography.caption.fontSize,height:22,borderRadius:12,marginLeft:8,marginBottom:0},secondaryTitle:{display:"-webkit-box",WebkitLineClamp:5,WebkitBoxOrient:"vertical",overflow:"hidden",textOverflow:"ellipsis",maxWidth:"100%",marginBottom:8,marginTop:2,lineHeight:1.4,paddingBottom:4},entityCount:{fontSize:e.typography.caption.fontSize},entityLabel:{fontSize:e.typography.caption.fontSize},entityContainer:{display:"flex",alignItems:"center",marginBottom:16},titleContainer:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:.5},titleContent:{display:"flex",alignItems:"center",minWidth:0},titleStatus:{display:"flex",alignItems:"center"},titleIcon:{display:"flex",alignItems:"center",marginRight:8},titleText:{minWidth:0,fontWeight:"bold"},emptyStateContainer:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",marginTop:2,marginBottom:1},tooltip:{color:e.palette.text.primary,fontSize:e.typography.caption.fontSize,borderRadius:e.shape.borderRadius,padding:e.spacing(1)},tooltipItem:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:e.spacing(.5)},tooltipCategory:{display:"flex",alignItems:"center",flex:1,fontSize:e.typography.body2.fontSize,marginRight:e.spacing(2)},tooltipValue:{fontSize:e.typography.body2.fontSize,color:e.palette.text.primary}})),L=e=>new Intl.NumberFormat("en-US",{notation:"compact",maximumFractionDigits:1}).format(e),ce=({node:e,clearSelectedNode:W,checkIds:h,track:c,getColor:k,onTeamClick:A})=>{const f=G(),o=se(),P=F(_),S=Y(re),[j]=ie(),[O,N]=te(()=>c?.levels?new Set(c.levels.map(a=>a.ordinal)):new Set),g=e?P.forEntity(e.entityRef):void 0;oe(()=>{if(c?.levels){const a=new Set(c.levels.map(m=>m.ordinal));N(a)}},[c?.levels]);const D=a=>{N(m=>{const n=new Set(m);return n.has(a)?n.delete(a):n.add(a),n})},E=a=>a<50?{label:"Needs Attention",color:f.palette.error.main,textColor:R(f.palette.error.main)}:a<80?null:{label:"Healthy",color:f.palette.success.main,textColor:R(f.palette.success.main)},H=ae(a=>{switch(a){case"not-applicable":case"notApplicable":return"Not Applicable";case"not-reported":case"notReported":return"Not Reported";default:return a.charAt(0).toUpperCase()+a.slice(1)}},[]),M=(a,m)=>{const n=a.numberOfEntities-a.notApplicable-a.exempt,y=a.passed,u=a.failed,C=a.warning,d=a.error,s=a.notReported,x=[{name:"passed",value:y},{name:"failed",value:u},{name:"warning",value:C},{name:"error",value:d},{name:"not-reported",value:s}].filter(p=>p.value>0);return r("div",{className:o.tooltip,children:[t(l,{variant:"caption",style:{fontWeight:"bold",marginBottom:8,display:"block"},children:m.name}),x.map((p,v)=>r("div",{className:o.tooltipItem,children:[r("div",{className:o.tooltipCategory,children:[t("span",{style:{width:12,height:4,borderRadius:2,backgroundColor:le(f,p.name),marginRight:8}}),t(l,{variant:"caption",children:H(p.name)})]}),t("div",{className:o.tooltipValue,children:r(l,{variant:"caption",children:[p.value," of ",L(n)," (",Math.round(p.value/n*100),"%)"]})})]},v))]})},I=ne(e&&h&&h.length?{checkIds:h,trackId:c?.id,filter:{"relations.ownedBy":[e.entityRef]}}:{checkIds:[]},!!(e&&h&&h.length)),b=E(e.passPercentage),V=()=>{if(!c?.levels||h.length===0)return t(i,{mt:2,children:t(l,{variant:"body2",color:"textSecondary",children:"No checks found for this entity."})});const a=c.levels,m=(I.data||[]).reduce((n,y)=>(n[y.id]=y,n),{});return r(i,{mt:2,className:o.checksContainer,children:[t(l,{variant:"subtitle2",className:o.checksTitle,children:"Checks"}),a.map(n=>{const y=n.name??`Level ${n.ordinal}`,u=n.ordinal,C=O.has(u);return r(i,{mb:1,children:[r(i,{className:o.levelHeader,onClick:()=>D(u),children:[t(l,{variant:"overline",className:o.levelLabel,children:y}),t(z,{size:"small",className:o.expandIcon,children:C?t(Z,{}):t(ee,{})})]}),C&&n.checks.map(d=>{const s=m[d.id],x=s?s.numberOfEntities-s.notApplicable-s.exempt:0,p=s&&x>0?Math.round(s.passed/x*100):0;let v;if(c&&S&&e){const $=S({trackId:c.id,checkId:d.id}),w=new URLSearchParams(j.toString());w.set("owners",e.entityRef),v=`${$}?${w.toString()}`}return r(i,{display:"flex",alignItems:"center",mb:.5,children:[t(i,{mr:1,display:"flex",children:I.isLoading?t(B,{value:"",getColor:()=>f.palette.divider,numericValue:0,size:"small"}):t(Q,{title:s?M(s,d):"",placement:"top",arrow:!0,classes:{tooltip:o.tooltip},children:t(i,{children:t(B,{value:s&&x>0?`${p}%`:"N/A",getColor:k,numericValue:p,size:"small"})})})}),t(i,{flex:1,minWidth:0,children:v?t(U,{to:v,style:{color:"inherit",textDecoration:"none"},className:o.checkLinkText,children:t(l,{variant:"body2",className:o.checkName,children:d.name})}):t(l,{variant:"body2",className:o.checkName,children:d.name})})]},d.id)})]},u)})]})};return r(i,{children:[r(i,{className:o.titleContainer,children:[r(i,{className:o.titleContent,children:[g?.snapshot.Icon&&t(i,{component:"span",className:o.titleIcon,children:t(g.snapshot.Icon,{fontSize:"small"})}),t(J,{component:"button",onClick:()=>A?.(e.entityRef),noWrap:!0,children:t(l,{variant:"h6",noWrap:!0,className:o.titleText,children:g?.snapshot.primaryTitle||e.name})})]}),r(i,{className:o.titleStatus,children:[b&&t(K,{label:b.label,style:{background:b.color,color:b.textColor},className:o.statusChip,size:"small"}),t(z,{onClick:W,size:"small",children:t(X,{})})]})]}),g?.snapshot.secondaryTitle&&t(l,{variant:"caption",color:"textSecondary",className:o.secondaryTitle,children:g.snapshot.secondaryTitle}),t(i,{className:o.entityContainer,children:r(l,{variant:"body2",color:"textSecondary",className:o.entityLabel,children:["Entities:"," ",t("span",{className:o.entityCount,children:L(e.numberOfEntities)})]})}),t(i,{className:o.progressContainer,children:r(i,{className:o.progressWrapper,children:[t(T,{variant:"determinate",value:100,size:80,thickness:6,className:o.progressBackground}),t(T,{variant:"determinate",value:e.passPercentage,size:80,thickness:6,style:{color:k(e.passPercentage)}}),r(l,{className:o.progressText,children:[Math.round(e.passPercentage),"%"]})]})}),t(V,{})]})};export{ce as SelectedNodeSidebar};
2
+ //# sourceMappingURL=SelectedNodeSidebar.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as s,jsx as o}from"react/jsx-runtime";import{useApi as g}from"@backstage/core-plugin-api";import{entityPresentationApiRef as y}from"@backstage/plugin-catalog-react";import{makeStyles as x,Box as n,Typography as p}from"@material-ui/core";import{useTheme as C}from"@material-ui/core/styles";import{getContrastTextColor as u}from"../../utils/colors.esm.js";import{ColorChip as b}from"../ColorChip/ColorChip.esm.js";const T=x(t=>({card:{display:"flex",alignItems:"center",justifyContent:"space-between",backgroundColor:t.palette.background.paper,borderRadius:8,padding:t.spacing(1,2),marginBottom:0,boxShadow:"none",width:"100%",cursor:"pointer"},cardContent:{flex:1,minWidth:0},titleRow:{display:"flex",alignItems:"center"},icon:{display:"flex",alignItems:"center",marginRight:t.spacing(1)},title:{fontWeight:"bold"},secondaryTitle:{display:"block",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:"100%"},chipContainer:{marginLeft:t.spacing(2),flexShrink:0}})),w=({teamName:t,passPercentage:i,getColor:l,entityRef:c,onClick:a})=>{const d=C(),e=T(),m=g(y),h=l(i),f=u(d.palette.background.paper),r=m.forEntity(c);return s(n,{className:e.card,style:{color:f,border:`1px solid ${h}`,cursor:a?"pointer":void 0},onClick:a?()=>a(c):void 0,tabIndex:a?0:-1,children:[s(n,{className:e.cardContent,children:[s(n,{className:e.titleRow,children:[r?.snapshot.Icon&&o(n,{component:"span",className:e.icon,children:o(r.snapshot.Icon,{})}),o(p,{variant:"subtitle1",className:e.title,children:r?.snapshot.primaryTitle||t})]}),r?.snapshot.secondaryTitle&&o(p,{variant:"caption",color:"textSecondary",className:e.secondaryTitle,children:r.snapshot.secondaryTitle})]}),o(n,{className:e.chipContainer,children:o(b,{value:`${i}%`,getColor:l,numericValue:i})})]})};export{w as TeamPerformanceCard};
2
+ //# sourceMappingURL=TeamPerformanceCard.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as o}from"react/jsx-runtime";import{useApi as u}from"@backstage/core-plugin-api";import{entityPresentationApiRef as f}from"@backstage/plugin-catalog-react";import{useTheme as g}from"@material-ui/core";import{useMemo as P}from"react";import{getLeafNodes as d}from"./getLeafNodes.esm.js";import{TeamPerformanceListCard as m}from"./TeamPerformanceListCard.esm.js";const T=({trackStatus:t,getColor:s,limit:i=3,onTeamClick:a})=>{const r=g(),l=u(f),n=P(()=>t?d(t):[],[t]);if(!t)return o(m,{title:"Top Performing Teams",titleColor:r.palette.success.main,teams:[],getColor:s,onTeamClick:a,emptyMessage:"Loading team performance data..."});const p=n.filter(e=>e.status.passed+e.status.failed+e.status.warning+e.status.error+e.status.notReported>0&&(e.status.allPassPercentage??0)>=80&&!e.children?.length).sort((e,c)=>(c.status.allPassPercentage??0)-(e.status.allPassPercentage??0)).slice(0,i).map(e=>({groupRef:e.groupRef,teamName:l.forEntity(e.groupRef).snapshot.primaryTitle,passPercentage:e.status.allPassPercentage??0}));return o(m,{title:"Top Performing Teams",titleColor:r.palette.success.main,teams:p,getColor:s,onTeamClick:a,emptyMessage:"No teams have reached the 80% mark yet, keep pushing!"})};export{T as default};
2
+ //# sourceMappingURL=TopPerformingTeams.esm.js.map
@@ -0,0 +1,2 @@
1
+ const l=e=>!e.children||e.children.length===0?[e]:e.children.flatMap(n=>l(n));export{l as getLeafNodes};
2
+ //# sourceMappingURL=getLeafNodes.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as g,jsxs as h}from"react/jsx-runtime";import{makeStyles as d,Box as u,Typography as p}from"@material-ui/core";const f=d(e=>({overlay:{position:"absolute",top:0,left:0,right:0,bottom:0,backgroundColor:"rgba(0, 0, 0, 0.7)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:1e3},messageContainer:{textAlign:"center",padding:e.spacing(2)},mainMessage:{color:e.palette.common.white,fontSize:"1.5rem",marginBottom:e.spacing(2)},statsMessage:{color:e.palette.common.white,fontSize:"0.875rem",opacity:.8}})),l=e=>new Intl.NumberFormat("en-US",{notation:"compact",maximumFractionDigits:1}).format(e),m=(e,a,s)=>e===1?a:s,y=(e,a)=>{if(!e)return{teams:0,entities:0,checks:0};let s=0,t=0;const n=i=>{s+=1,t+=i.ownedEntityRefs?.length||0,Object.values(i.children||{}).forEach(c=>{n(c)})},o=Object.values(e)[0];o&&n(o);const r=a?.levels?.reduce((i,c)=>i+(c.checks?.length||0),0)||0;return{teams:s,entities:t,results:r*t}},x=({isLoading:e,hierarchyData:a,track:s})=>{const t=f();if(!e)return null;const{teams:n,entities:o,results:r}=y(a,s);return g(u,{className:t.overlay,children:h(u,{className:t.messageContainer,children:[g(p,{className:t.mainMessage,children:"Calculating..."}),h(p,{className:t.statsMessage,children:["Aggregating the statuses for ",l(n||0)," ",m(n||0,"team","teams")," owning"," ",l(o||0)," ",m(o||0,"entity","entities")," across"," ",l(r||0)," check"," ",m(r||0,"result","results")]})]})})};export{x as LoadingOverlay};
2
+ //# sourceMappingURL=LoadingOverlay.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as I,jsx as n,Fragment as S}from"react/jsx-runtime";import{useApi as w}from"@backstage/core-plugin-api";import{entityPresentationApiRef as P}from"@backstage/plugin-catalog-react";import{useTheme as E}from"@material-ui/core";import{makeStyles as L}from"@material-ui/core/styles";import{ResponsiveCirclePacking as T}from"@nivo/circle-packing";import{useState as j,useEffect as z,useMemo as M}from"react";import{getContrastTextColor as b}from"../../../utils/colors.esm.js";import{findNodePath as C}from"./findNodePath.esm.js";import{hierarchyToNivo as A}from"./hierarchyToNivo.esm.js";import{LoadingOverlay as D}from"./LoadingOverlay.esm.js";const O=L(e=>({root:{position:"relative",width:"100%",height:"100%"},nivoContainer:{width:"100%",height:"100%"},tooltip:{position:"absolute",pointerEvents:"none",zIndex:1e3},tooltipContent:{backgroundColor:e.palette.background.paper,padding:e.spacing(1),borderRadius:e.shape.borderRadius,boxShadow:e.shadows[1]},loadingOverlay:{position:"absolute",top:0,left:0,right:0,bottom:0,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"rgba(0, 0, 0, 0.7)",zIndex:1e3,"& > *":{color:e.palette.common.white}}})),F=({groupRef:e,hierarchyData:r,trackStatus:l,getColor:c,onZoomChange:v,track:k,onNodeHover:m,selectedNode:d,onNodeSelect:y})=>{const[t,p]=j(null),f=O(),x=E(),u=w(P);z(()=>{p(d?d.id:null)},[d]);const a=M(()=>{if(!r||!e)return null;const o=r[e];return o?A(o,l||null,c,u,void 0):null},[r,l,e,c,u]),N=o=>{if(t===o.data.id)return;const i=t===o.data.id?null:o.data.id;p(i),v?.(o.data.entityRef),y?.(o.data)};if(!a)return null;const s=!l,h=x.palette.text.disabled,R=b(h);return I("div",{className:f.root,children:[n("div",{className:f.nivoContainer,children:n(T,{data:a,margin:{top:20,right:20,bottom:20,left:20},borderWidth:1,borderColor:{from:"color",modifiers:[["darker",1.25]]},colors:o=>s?h:o.data.color,childColor:{from:"color"},enableLabels:!0,label:o=>{if(!t)return o.data.name;const i=C(a,o.data.id),g=C(a,t);return!i||!g?"":i.length>=g.length?o.data.name:""},labelsSkipRadius:14,labelTextColor:o=>s?R:b(o.data.color||"#fff"),zoomedId:t,motionConfig:"default",isInteractive:!0,tooltip:()=>n(S,{}),onClick:N,onMouseEnter:o=>m?.(o.data),onMouseLeave:()=>m?.(null)})}),n(D,{isLoading:s,hierarchyData:r,track:k})]})};export{F as NivoCirclePacking};
2
+ //# sourceMappingURL=NivoCirclePacking.esm.js.map
@@ -0,0 +1,2 @@
1
+ import"react/jsx-runtime";import{makeStyles as t}from"@material-ui/core";import"@nivo/heatmap";import"react";import"@nivo/colors";import"d3-color";import"d3-interpolate";import"d3-scale";t(()=>({heatmapContainer:{height:600,width:"100%"},trackLink:{color:"inherit",textDecoration:"none"}}));
2
+ //# sourceMappingURL=NivoHeatmap.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as T,jsx as a,Fragment as L}from"react/jsx-runtime";import{useApi as M}from"@backstage/core-plugin-api";import{entityPresentationApiRef as j}from"@backstage/plugin-catalog-react";import{useTheme as E}from"@material-ui/core";import{makeStyles as O}from"@material-ui/core/styles";import{ResponsiveIcicle as z}from"@nivo/icicle";import{useState as A,useEffect as D,useMemo as H}from"react";import{getContrastTextColor as k}from"../../../utils/colors.esm.js";import{hierarchyToNivo as P}from"./hierarchyToNivo.esm.js";import{LoadingOverlay as W}from"./LoadingOverlay.esm.js";const F=O(e=>({root:{position:"relative",width:"100%",height:"100%"},nivoContainer:{width:"100%",height:"100%"},tooltip:{position:"absolute",pointerEvents:"none",zIndex:1e3},tooltipContent:{backgroundColor:e.palette.background.paper,padding:e.spacing(1),borderRadius:e.shape.borderRadius,boxShadow:e.shadows[1]},loadingOverlay:{position:"absolute",top:0,left:0,right:0,bottom:0,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"rgba(0, 0, 0, 0.7)",zIndex:1e3,"& > *":{color:e.palette.common.white}}})),Z=({groupRef:e,hierarchyData:r,trackStatus:l,getColor:c,onZoomChange:x,track:y,onNodeHover:m,selectedNode:s,onNodeSelect:S})=>{const[i,f]=A(null),p=F(),R=E(),u=M(j);D(()=>{f(s?s.id:null)},[s]);const h=H(()=>{if(!r||!e)return null;const o=r[e];if(!o)return null;const t=P(o,l||null,c,u,void 0);if(i&&t){const b=(n,v)=>{if(n.id===v)return n;if(n.children)for(const N of n.children){const C=b(N,v);if(C)return C}return null};return b(t,i)||t}return t},[r,l,e,c,u,i]),w=o=>{const t=i===o.data.id?null:o.data.id;f(t),x?.(o.data.entityRef),S?.(o.data)};if(!h)return null;const d=!l,g=R.palette.text.disabled,I=k(g);return T("div",{className:p.root,children:[a("div",{className:p.nivoContainer,children:a(z,{data:h,margin:{top:20,right:20,bottom:20,left:20},borderWidth:1,borderColor:{from:"color",modifiers:[["darker",1.25]]},animateOnMount:!1,colors:o=>d?g:o.data.color,enableLabels:!0,label:o=>o.data.name,labelRotation:270,labelSkipWidth:12,labelSkipHeight:32,labelTextColor:o=>d?I:k(o.data.color||"#fff"),motionConfig:"default",isInteractive:!0,tooltip:()=>a(L,{}),onClick:w,onMouseEnter:o=>m?.(o.data),onMouseLeave:()=>m?.(null)})}),a(W,{isLoading:d,hierarchyData:r,track:y})]})};export{Z as NivoIcicle};
2
+ //# sourceMappingURL=NivoIcicle.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as g,jsx as r,Fragment as v}from"react/jsx-runtime";import{useApi as C}from"@backstage/core-plugin-api";import{entityPresentationApiRef as k}from"@backstage/plugin-catalog-react";import{useTheme as x}from"@material-ui/core";import{makeStyles as y}from"@material-ui/core/styles";import{ResponsiveSunburst as L}from"@nivo/sunburst";import{useMemo as S}from"react";import{getContrastTextColor as p}from"../../../utils/colors.esm.js";import{hierarchyToNivo as N}from"./hierarchyToNivo.esm.js";import{LoadingOverlay as w}from"./LoadingOverlay.esm.js";const R=y(t=>({root:{position:"relative",width:"100%",height:"100%"},nivoContainer:{width:"100%",height:"100%"},tooltip:{position:"absolute",pointerEvents:"none",zIndex:1e3},tooltipContent:{backgroundColor:t.palette.background.paper,padding:t.spacing(1),borderRadius:t.shape.borderRadius,boxShadow:t.shadows[1]},loadingOverlay:{position:"absolute",top:0,left:0,right:0,bottom:0,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"rgba(0, 0, 0, 0.7)",zIndex:1e3,"& > *":{color:t.palette.common.white}}})),T=({groupRef:t,hierarchyData:e,trackStatus:a,getColor:n,track:u,onNodeHover:l,onNodeSelect:f})=>{const s=R(),h=x(),d=C(k),m=S(()=>{if(!e||!t)return null;const o=e[t];return o?N(o,a||null,n,d,void 0):null},[e,a,t,n,d]);if(!m)return null;const i=!a,c=h.palette.text.disabled,b=p(c);return g("div",{className:s.root,children:[r("div",{className:s.nivoContainer,children:r(L,{data:m,margin:{top:20,right:20,bottom:20,left:20},borderWidth:1,borderColor:{from:"color",modifiers:[["darker",1.25]]},colors:o=>i?c:o.data.color,childColor:{from:"color"},animate:!1,enableArcLabels:!0,arcLabel:o=>o.data.name,arcLabelsTextColor:o=>i?b:p(o.data.color||"#fff"),motionConfig:"default",isInteractive:!0,tooltip:()=>r(v,{}),arcLabelsSkipAngle:20,onMouseEnter:o=>l?.(o.data),onMouseLeave:()=>l?.(null),onClick:o=>f?.(o.data)})}),r(w,{isLoading:i,hierarchyData:e,track:u})]})};export{T as NivoSunburst};
2
+ //# sourceMappingURL=NivoSunburst.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsxs as k,jsx as a,Fragment as N}from"react/jsx-runtime";import{useApi as S}from"@backstage/core-plugin-api";import{entityPresentationApiRef as T}from"@backstage/plugin-catalog-react";import{useTheme as L}from"@material-ui/core";import{makeStyles as R}from"@material-ui/core/styles";import{ResponsiveTreeMap as w}from"@nivo/treemap";import{useState as I,useMemo as M}from"react";import{getContrastTextColor as i}from"../../../utils/colors.esm.js";import{hierarchyToNivo as j}from"./hierarchyToNivo.esm.js";import{LoadingOverlay as z}from"./LoadingOverlay.esm.js";const O=R(t=>({root:{position:"relative",width:"100%",height:"100%"},nivoContainer:{width:"100%",height:"100%"},tooltip:{position:"absolute",pointerEvents:"none",zIndex:1e3},tooltipContent:{backgroundColor:t.palette.background.paper,padding:t.spacing(1),borderRadius:t.shape.borderRadius,boxShadow:t.shadows[1]},loadingOverlay:{position:"absolute",top:0,left:0,right:0,bottom:0,display:"flex",alignItems:"center",justifyContent:"center",backgroundColor:"rgba(0, 0, 0, 0.7)",zIndex:1e3,"& > *":{color:t.palette.common.white}}})),A=({groupRef:t,hierarchyData:e,trackStatus:n,getColor:l,onZoomChange:f,track:h,onNodeHover:d,onNodeSelect:b})=>{const[g,v]=I(null),s=O(),C=L(),p=S(T),m=M(()=>{if(!e||!t)return null;const o=e[t];return o?j(o,n||null,l,p,void 0):null},[e,n,t,l,p]),y=o=>{const x=g===o.data.id?null:o.data.id;v(x),f?.(o.data.entityRef),b?.(o.data)};if(!m)return null;const r=!n,c=C.palette.text.disabled,u=i(c);return k("div",{className:s.root,children:[a("div",{className:s.nivoContainer,children:a(w,{data:m,label:o=>o.data.name,margin:{top:20,right:20,bottom:20,left:20},labelSkipSize:24,labelTextColor:o=>r?u:i(o.data.color||"#fff"),nodeOpacity:1,parentLabel:o=>o.data.name,parentLabelPosition:"top",parentLabelTextColor:o=>r?u:i(o.data.color||"#fff"),colors:o=>r?c:o.data.color,borderColor:{from:"color",modifiers:[["darker",1.25]]},isInteractive:!0,animate:!1,tooltip:()=>a(N,{}),onClick:y,onMouseEnter:o=>d?.(o.data),onMouseLeave:()=>d?.(null)})}),a(z,{isLoading:r,hierarchyData:e,track:h})]})};export{A as NivoTreemap};
2
+ //# sourceMappingURL=NivoTreemap.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{jsx as t,jsxs as m}from"react/jsx-runtime";import{makeStyles as d,Box as s,Link as l,Typography as b}from"@material-ui/core";import p from"@material-ui/icons/ChevronRight";import{Fragment as h}from"react";const u=d(e=>({breadcrumbContainer:{display:"flex",alignItems:"center",height:24},chevronIcon:{color:e.palette.text.secondary,marginLeft:4,marginRight:4},breadcrumbLink:{color:e.palette.text.secondary,fontWeight:400,cursor:"pointer",background:"none",border:"none",padding:0,font:"inherit",textDecoration:"none","&:hover":{textDecoration:"underline"},"&.active":{color:e.palette.text.primary,fontWeight:600},"&.disabled":{cursor:"default","&:hover":{textDecoration:"none"}}},breadcrumbText:{color:"inherit",fontWeight:"inherit"}})),f=({node:e,onNodeClick:i})=>{const n=u();if(!e)return t("div",{className:n.breadcrumbContainer});const c=(r=>{const o=[r];let a=r.parent;for(;a;)o.unshift(a),a=a.parent;return o})(e);return t(s,{className:n.breadcrumbContainer,children:c.map((r,o)=>m(h,{children:[o>0&&t(p,{fontSize:"small",className:n.chevronIcon}),t(l,{component:"button",variant:"body2",onClick:()=>i?.(r),className:`${n.breadcrumbLink} ${r===e?"active":""} ${i?"":"disabled"}`,children:t(b,{variant:"body2",component:"span",className:n.breadcrumbText,children:r.name})})]},r.id))})};export{f as VisualizationBreadcrumb};
2
+ //# sourceMappingURL=VisualizationBreadcrumb.esm.js.map
@@ -0,0 +1,2 @@
1
+ const r=(n,d,c)=>{const e=c??[];if(e.push(n),n.id===d)return e.map(t=>t.id);if(n.children)for(let t=n.children.length-1;t>=0;t--){const h=n.children[t],o=r(h,d,e);if(o)return o}e.pop()};export{r as findNodePath};
2
+ //# sourceMappingURL=findNodePath.esm.js.map
@@ -0,0 +1,2 @@
1
+ const h=(e,n)=>{if(!e||typeof e!="object")return null;if(e.groupRef===n)return e.status;if(e.children&&Array.isArray(e.children))for(const i of e.children){const s=h(i,n);if(s)return s}return null},d=(e,n,i,s,a)=>{const c=s.forEntity(e.entityRef).snapshot.primaryTitle,f=e.entityRef,o=n?h(n,f):null,p=i(o?.allPassPercentage||0),u=e.ownedEntityRefs?.length||0;if(!e.children||Object.keys(e.children).length===0){if(u===0)return;const r=Math.log(u+1);if(r===0)return;const l={id:c,name:c,entityRef:f,value:r,numberOfEntities:u,color:p,passPercentage:o?.allPassPercentage||0,children:[]};return a&&(l.parent=a),l}const y=Object.values(e.children),t={id:c,name:c,entityRef:f,numberOfEntities:0,color:"",passPercentage:0,children:[]};a&&(t.parent=a);const g=y.map(r=>{const l=d(r,n,i,s,t);return t.numberOfEntities+=l?.numberOfEntities??0,l}).filter(r=>r!==void 0);return t.children=g,t.color=i(o?.allPassPercentage||0),t.passPercentage=o?.allPassPercentage||0,t};export{d as hierarchyToNivo};
2
+ //# sourceMappingURL=hierarchyToNivo.esm.js.map