@spotify/backstage-plugin-soundcheck 0.15.0 → 0.16.0

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 (109) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/dist/alpha.d.ts +3 -3
  3. package/dist/api.esm.js +1 -1
  4. package/dist/components/CampaignForm/CampaignForm.esm.js +1 -1
  5. package/dist/components/CampaignForm/hooks/useCampaignForm.esm.js +1 -1
  6. package/dist/components/CampaignForm/hooks/utils.esm.js +1 -1
  7. package/dist/components/CampaignForm/utils/campaignFormUtils.esm.js +2 -1
  8. package/dist/components/CampaignForm/utils/validation.esm.js +1 -1
  9. package/dist/components/CertificationAccordion/CertificationAccordion.esm.js +1 -1
  10. package/dist/components/CertificationSidebar/CertificationSidebar.esm.js +1 -1
  11. package/dist/components/CertificationSidebar/Check.esm.js +1 -1
  12. package/dist/components/CertificationsPage/CertificationTab.esm.js +1 -1
  13. package/dist/components/CertificationsPage/CertificationTabs.esm.js +1 -1
  14. package/dist/components/CertificationsPage/Playlist/PlaylistProgress.esm.js +1 -1
  15. package/dist/components/CheckCard/CheckCard.esm.js +1 -1
  16. package/dist/components/CheckDetails/CheckDetails.esm.js +1 -1
  17. package/dist/components/CheckDetails/CheckResultDetails.esm.js +2 -0
  18. package/dist/components/CheckDetails/CollapseRow.esm.js +1 -1
  19. package/dist/components/CheckDetails/ExemptionDetails.esm.js +2 -0
  20. package/dist/components/CheckDetails/FactTable.esm.js +2 -0
  21. package/dist/components/CheckDetails/ResolvedValueTable.esm.js +2 -0
  22. package/dist/components/CheckDetails/ResultStateBox.esm.js +1 -1
  23. package/dist/components/CheckDetails/SelectedValueContext.esm.js +2 -0
  24. package/dist/components/CheckDetails/findUniqueFacts.esm.js +2 -0
  25. package/dist/components/CheckDryRun/CheckDryRun.esm.js +1 -1
  26. package/dist/components/CheckDryRun/CheckDryRunContext.esm.js +1 -1
  27. package/dist/components/CheckDryRun/CheckDryRunDetails.esm.js +1 -1
  28. package/dist/components/CheckDryRun/CheckDryRunDialog.esm.js +1 -1
  29. package/dist/components/CheckForm/CheckForm.esm.js +1 -1
  30. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/FactValueDisplay.esm.js +1 -1
  31. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/RuleConditionInput.esm.js +1 -1
  32. package/dist/components/CheckForm/FormFields/RuleInput/Conditions/ValueListInput.esm.js +1 -1
  33. package/dist/components/CheckForm/Steps/CheckReviewStep.esm.js +1 -1
  34. package/dist/components/CheckForm/utils/checkFormUtils.esm.js +2 -1
  35. package/dist/components/CheckForm/utils/validation.esm.js +1 -1
  36. package/dist/components/CheckIcon/CheckIcon.esm.js +1 -1
  37. package/dist/components/CheckPage/CheckStatusHistoryChart.esm.js +1 -1
  38. package/dist/components/CheckPage/FilterBar/FilterBar.esm.js +1 -1
  39. package/dist/components/CheckPage/utils.esm.js +1 -1
  40. package/dist/components/CollectorPage/Configurators/AzureDevOps/AzureDevOpsConfigurator.esm.js +2 -0
  41. package/dist/components/CollectorPage/Configurators/AzureDevOps/NumberOfDaysComponent.esm.js +2 -0
  42. package/dist/components/CollectorPage/Configurators/AzureDevOps/NumberOfWorkItemsComponent.esm.js +2 -0
  43. package/dist/components/CollectorPage/Configurators/AzureDevOps/utils.esm.js +2 -0
  44. package/dist/components/CollectorPage/Configurators/AzureDevOps/validation.esm.js +2 -0
  45. package/dist/components/CollectorPage/Configurators/BigQuery/QueryFactDetailsComponent.esm.js +1 -1
  46. package/dist/components/CollectorPage/Configurators/Catalog/CatalogConfigurator.esm.js +2 -0
  47. package/dist/components/CollectorPage/Configurators/Catalog/utils.esm.js +2 -0
  48. package/dist/components/CollectorPage/Configurators/Common/CollectorOption.esm.js +1 -1
  49. package/dist/components/CollectorPage/Configurators/Common/FactCollectionConfig.esm.js +1 -1
  50. package/dist/components/CollectorPage/Configurators/Common/utils.esm.js +1 -1
  51. package/dist/components/CollectorPage/Configurators/Configurator.esm.js +1 -1
  52. package/dist/components/CollectorPage/Configurators/HTTP/HttpConfigurator.esm.js +2 -0
  53. package/dist/components/CollectorPage/Configurators/HTTP/HttpRequestComponent.esm.js +2 -0
  54. package/dist/components/CollectorPage/Configurators/HTTP/HttpResponseComponent.esm.js +2 -0
  55. package/dist/components/CollectorPage/Configurators/HTTP/HttpRetriesComponent.esm.js +2 -0
  56. package/dist/components/CollectorPage/Configurators/HTTP/HttpStatusesInput.esm.js +2 -0
  57. package/dist/components/CollectorPage/Configurators/HTTP/RequestFactDetailsComponent.esm.js +2 -0
  58. package/dist/components/CollectorPage/Configurators/HTTP/utils.esm.js +2 -0
  59. package/dist/components/CollectorPage/Configurators/HTTP/validation.esm.js +2 -0
  60. package/dist/components/CollectorPage/Configurators/SCM/JsonFactDetailsComponent.esm.js +1 -1
  61. package/dist/components/CollectorPage/Configurators/SCM/RegexFactDetailsComponent.esm.js +1 -1
  62. package/dist/components/CollectorsPage/CollectorListPage/CollectorLogo.esm.js +1 -1
  63. package/dist/components/CollectorsPage/CollectorListPage/CollectorSummaryCard.esm.js +1 -1
  64. package/dist/components/EntityChip/EntityChip.esm.js +2 -0
  65. package/dist/components/EntitySoundcheckCard/Card.esm.js +1 -1
  66. package/dist/components/Filter/EntityAutocompletePicker.esm.js +1 -1
  67. package/dist/components/Filter/FilterComponent.esm.js +1 -1
  68. package/dist/components/Filter/FilterKeyValueInput.esm.js +2 -0
  69. package/dist/components/Filter/FilterPreviewTable/FilterPreviewTable.esm.js +1 -1
  70. package/dist/components/Filter/KeyValueInputDialog.esm.js +2 -0
  71. package/dist/components/Filter/types.esm.js +1 -1
  72. package/dist/components/Filter/utils.esm.js +1 -1
  73. package/dist/components/FormFilterSection/FormFilterSection.esm.js +1 -1
  74. package/dist/components/Frequency/FrequencyComponent.esm.js +1 -1
  75. package/dist/components/OverviewTable/ResultsTable.esm.js +1 -1
  76. package/dist/components/OverviewTable/ResultsTableRow.esm.js +1 -1
  77. package/dist/components/Router.esm.js +1 -1
  78. package/dist/components/RuleResult/BranchResultComponent.esm.js +2 -0
  79. package/dist/components/RuleResult/ConditionResultComponent.esm.js +2 -0
  80. package/dist/components/RuleResult/RuleResultComponent.esm.js +2 -0
  81. package/dist/components/SearchBar/SearchBar.esm.js +1 -1
  82. package/dist/components/SoundcheckHeader/Breadcrumbs.esm.js +1 -1
  83. package/dist/components/SoundcheckHeader/SoundcheckHeader.esm.js +1 -1
  84. package/dist/components/SummaryCard/SummaryCardActionsMenu.esm.js +1 -1
  85. package/dist/components/TechHealth/Filters/FacetFilter.esm.js +1 -1
  86. package/dist/components/TrackEditPage/TrackEditView.esm.js +1 -1
  87. package/dist/components/TrackForm/TrackForm.esm.js +1 -1
  88. package/dist/components/TrackForm/utils/trackFormUtils.esm.js +2 -1
  89. package/dist/components/TrackForm/utils/useTrackForm.esm.js +1 -1
  90. package/dist/components/TrackForm/utils/validation.esm.js +1 -1
  91. package/dist/components/TrackPage/TrackEntitiesTable/utils.esm.js +1 -1
  92. package/dist/graphql/generated/index.esm.js +127 -126
  93. package/dist/hooks/certifications/useTrackOverviewForOwner.esm.js +2 -0
  94. package/dist/hooks/checks/useDeleteCheck.esm.js +1 -1
  95. package/dist/hooks/graphqlKeys.esm.js +1 -1
  96. package/dist/hooks/tracks/useCreateTrack.esm.js +1 -1
  97. package/dist/hooks/tracks/useDeleteTrack.esm.js +1 -1
  98. package/dist/hooks/tracks/useGetAllTracks.esm.js +1 -1
  99. package/dist/hooks/tracks/useGetChecksMap.esm.js +1 -1
  100. package/dist/hooks/tracks/useUpdateTrack.esm.js +1 -1
  101. package/dist/images/azure-devops-rgb.svg +13 -0
  102. package/dist/images/azure-devops-white.svg +13 -0
  103. package/dist/images/http-rgb.svg +11 -0
  104. package/dist/images/http-white.svg +11 -0
  105. package/dist/text.esm.js +1 -1
  106. package/dist/utils/validation.esm.js +1 -1
  107. package/package.json +27 -21
  108. package/dist/hooks/certifications/useProgramOverviewForOwner.esm.js +0 -2
  109. /package/dist/components/CollectorPage/Configurators/{BigQuery → Common}/css/prism-dark-sql.css.esm.js +0 -0
@@ -1,2 +1,2 @@
1
- import{EntityListProvider as c}from"@backstage/plugin-catalog-react";import{makeStyles as s,Grid as r}from"@material-ui/core";import t from"react";import{EntityAutocompletePicker as f}from"./EntityAutocompletePicker.esm.js";import{FilterPreviewTable as p}from"./FilterPreviewTable/FilterPreviewTable.esm.js";import{FILTER_OPTIONS as E}from"./types.esm.js";const d=s(()=>({title:{fontWeight:700},filterContainer:{display:"flex",flexWrap:"wrap"}})),y=10,g=({value:i,onChange:n,disabled:a})=>{const l=d(),m=e=>o=>{n({...i,[e]:o??[]})};return t.createElement(r,{container:!0,spacing:6},t.createElement(r,{item:!0,container:!0,className:l.filterContainer,spacing:2},E.map(e=>t.createElement(r,{item:!0,xs:12,sm:6,md:4,key:e.key},t.createElement(f,{facet:e.facet,label:e.label,values:i?.[e.key],onChange:m(e.key),disabled:a,filter:e.filter,isOwnerSelect:e.isOwnerSelect})))),t.createElement(r,{item:!0,xs:12},t.createElement(c,{pagination:{limit:y}},t.createElement(p,{filter:i}))))};export{g as FilterComponent};
1
+ import{makeStyles as R,Divider as W,Box as d,Tabs as z,Tab as N,Grid as c,Paper as H,Typography as k,Chip as T,Switch as X,FormHelperText as Y}from"@material-ui/core";import{isEmpty as P}from"lodash";import e,{useState as j,useMemo as I}from"react";import{useFormContext as G}from"react-hook-form";import M from"react-use/lib/useLocalStorage";import{FormFieldLabel as v}from"../FormFieldLabel/FormFieldLabel.esm.js";import{EntityAutocompletePicker as _}from"./EntityAutocompletePicker.esm.js";import{FilterKeyValueInput as $}from"./FilterKeyValueInput.esm.js";import{FilterPreviewTable as q}from"./FilterPreviewTable/FilterPreviewTable.esm.js";import{FILTER_OPTIONS as O,emptyFilters as J}from"./types.esm.js";import{filterPresent as D,isValidOtherFilterKey as Q}from"./utils.esm.js";const U=R(t=>({title:{fontWeight:700},filterContainer:{display:"flex",flexWrap:"wrap"},selectionTabs:{marginBottom:t.spacing(2)},divider:{marginTop:t.spacing(2)},filterDisplayBox:{padding:t.spacing(2),paddingLeft:t.spacing(4),border:`1px solid ${t.palette.divider}`,marginBottom:t.spacing(0),display:"flex",alignItems:"center",flex:1},error:{borderColor:t.palette.error.main}})),f=t=>P(t)?"":`${t.length>1?`[${t.join(", ")}]`:t[0]}`,Z=({filterValue:t,excludeFilter:y,keyValueFilter:s,excludeKeyValueFilter:n})=>{const m=(r=J())=>O.map(l=>P(r[l.key])?"":`${l.facet}: ${f(r[l.key])}`).filter(l=>!!l),i=r=>[r?.selectedLabels?.map(l=>`metadata.labels.${l.key}: ${f(l.value)}`),r?.selectedAnnotations?.map(l=>`metadata.annotations.${l.key}: ${f(l.value)}`),r?.selectedOtherFilters?.map(l=>`${l.key}: ${f(l.value)}`)].flat(),g=[...m(t),...i(s)],o=[...m(y),...i(n)];return{includeFilterDisplay:g,excludeFilterDisplay:o}},ee=({filterName:t,disabled:y,keyValueFilterName:s,excludeFilterName:n,excludeKeyValueFilterName:m})=>{const i=U(),{setValue:g,watch:o}=G(),[r,l]=j(0),[p,K]=M("soundcheck-show-preview",!0),w=I(()=>r===0?t:n,[n,t,r]),u=I(()=>r===0?s:m,[m,s,r]),V=o(w??t),A=a=>h=>{g(w??t,{...V,[a]:h??[]})},E=o(t),F=n?o(n):void 0,x=s?o(s):void 0,b=m?o(m):void 0,{includeFilterDisplay:S,excludeFilterDisplay:B}=Z({filterValue:E,excludeFilter:F,keyValueFilter:x,excludeKeyValueFilter:b}),C=D(E,x),L=D(F,b);return e.createElement(e.Fragment,null,n&&e.createElement(e.Fragment,null,e.createElement(W,{className:i.divider}),e.createElement(d,{className:i.selectionTabs},e.createElement(z,{value:r,onChange:(a,h)=>l(h)},e.createElement(N,{label:"Include Filters","aria-label":"include filters"}),e.createElement(N,{label:"Exclude Filters","aria-label":"exclude filters"})))),e.createElement(c,{container:!0,spacing:6},e.createElement(c,{item:!0,container:!0,className:i.filterContainer,spacing:2},O.map(a=>e.createElement(c,{item:!0,xs:12,sm:6,md:4,key:a.key},e.createElement(_,{...a,values:V?.[a.key],onChange:A(a.key),disabled:y}))),u&&e.createElement(e.Fragment,null,e.createElement(c,{item:!0,xs:12,sm:6,md:4},e.createElement(v,{title:"Label",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),e.createElement($,{name:`${u}.selectedLabels`,title:"Label Filter"})),e.createElement(c,{item:!0,xs:12,sm:6,md:4},e.createElement(v,{title:"Annotation",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),e.createElement($,{name:`${u}.selectedAnnotations`,title:"Annotation Filter"})),e.createElement(c,{item:!0,xs:12,sm:6,md:4},e.createElement(v,{title:"Other",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/filters"}),e.createElement($,{name:`${u}.selectedOtherFilters`,title:"Other Catalog Filter",validateKey:Q})))),e.createElement(c,{item:!0,xs:12},e.createElement(H,{className:`${i.filterDisplayBox} ${!C&&L?i.error:""}`,elevation:0},e.createElement(d,{flex:1,overflow:"auto"},e.createElement(d,{display:"flex",flexWrap:"wrap",alignItems:"center",style:{overflowX:"auto",overflowY:"hidden"}},e.createElement(k,{style:{marginRight:4,marginBottom:4},variant:"subtitle2",component:"span"},"Filter:"),S.map(a=>e.createElement(T,{size:"small",label:a,key:a,style:{marginBottom:4}}))),B.length>0&&e.createElement(d,{display:"flex",flexWrap:"wrap",alignItems:"center",style:{overflowX:"auto",overflowY:"hidden"}},e.createElement(k,{style:{marginRight:4,marginBottom:4},variant:"subtitle2",component:"span"},"Exclude:"),B.map(a=>e.createElement(T,{size:"small",label:a,key:a,style:{marginBottom:4}})))),e.createElement(k,{style:{marginLeft:10},variant:"subtitle2",component:"div"},p?"Hide":"Show"," Preview"),e.createElement(d,null,e.createElement(X,{checked:p,onChange:()=>{K(!p)},inputProps:{"aria-label":"toggle entity preview"}}))),e.createElement(d,{marginBottom:2},!C&&L&&e.createElement(Y,{error:!0},"Exclude filter cannot be used alone. Please add an include filter.")),p&&e.createElement(q,{filter:E,keyValueFilter:x,excludeFilter:F,excludeKeyValueFilter:b}))))};export{ee as FilterComponent};
2
2
  //# sourceMappingURL=FilterComponent.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{useTheme as h,Box as C,FormControl as E,Select as f,Chip as F,FormHelperText as S}from"@material-ui/core";import t,{useState as k,useMemo as x,useCallback as K}from"react";import{useFormContext as V}from"react-hook-form";import{KeyValueInputDialog as b}from"./KeyValueInputDialog.esm.js";const I=({name:l,title:s,validateKey:u})=>{const{setValue:r,getFieldState:c,trigger:i,watch:d}=V(),n=d(l),{error:m}=c(l),[g,p]=k(!1),o=h(),y=x(()=>n?.map(e=>`${e.key}:${e.value?.join(" | ")}`)??[],[n]),v=K(e=>{r(l,e),i(l)},[l,r,i]);return t.createElement(C,null,t.createElement(b,{title:s,values:n,open:g,handleClose:()=>p(!1),onSave:v,validateKey:u}),t.createElement(E,{size:"small",fullWidth:!0},t.createElement(f,{value:y,onChange:()=>{},multiple:!0,variant:"outlined",open:!1,onOpen:()=>p(!0),onClose:()=>{},error:!!m,displayEmpty:!0,SelectDisplayProps:{style:{paddingLeft:o.spacing(.75)}},renderValue:e=>e.map(a=>t.createElement(F,{size:"small",style:{marginTop:-o.spacing(1),marginBottom:-o.spacing(1)},label:a.length>40?`${a.substring(0,35)}...`:a,key:a}))})),m&&t.createElement(S,{error:!0},"Invalid key value pair detected."))};export{I as FilterKeyValueInput};
2
+ //# sourceMappingURL=FilterKeyValueInput.esm.js.map
@@ -1,2 +1,2 @@
1
- import{parseEntityRef as P}from"@backstage/catalog-model";import{Table as B}from"@backstage/core-components";import{makeStyles as j,useTheme as D,Box as y}from"@material-ui/core";import{combineEntityFilterQueries as O,difference as N}from"@spotify/backstage-plugin-soundcheck-common";import o,{useState as E,useMemo as r}from"react";import{useEntitiesByRefs as $}from"../../../hooks/catalog/useEntitiesByRefs.esm.js";import{useGetEntityRefs as b}from"../../../hooks/catalog/useGetEntityRefs.esm.js";import{SearchBar as A}from"../../SearchBar/SearchBar.esm.js";import{mapFiltersToCatalogFilter as C}from"../utils.esm.js";import{createEntityRefColumn as I,createSystemColumn as M,createOwnerColumn as k,createKindColumn as q,createSpecTypeColumn as G,createSpecLifecycleColumn as H,createTagsColumn as K}from"./EntityTableColumns.esm.js";const Q=j(()=>({entityTable:{'& span[class*="CatalogReactEntityDisplayName-root"]':{"&:hover":{textDecoration:"underline"}}}})),T=[I(),M(),k(),q(),G(),H(),K()],W=({filter:c,excludeFilter:l})=>{const a=r(()=>C(c),[c]),d=!!a?.[0]&&Object.values(a[0]).some(i=>!!i),{data:s,isFetching:e}=b(a,void 0,d),m=r(()=>{const i=l?C(l):[];if(i?.[0]&&Object.values(i[0]).some(f=>!!f))return O(a,i)},[l,a]),{data:n,isFetching:g}=b(m??{},void 0,!!m);return{allEntityRefs:r(()=>N(s??[],n??[]),[n,s]),isLoading:e||g}},J=({filter:c,excludeFilter:l,additionalColumns:a=[],title:d,hideTags:s=!1})=>{const[e,m]=E({page:0,pageSize:10}),[n,g]=E(""),{allEntityRefs:i,isLoading:f}=W({filter:c,excludeFilter:l}),u=r(()=>{const t=new RegExp(n,"i");return i.filter(L=>P(L).name.match(t))},[i,n]),p=u.length,h=D(),w=Q(),z=r(()=>u.slice(e.page*e.pageSize,(e.page+1)*e.pageSize),[u,e.page,e.pageSize]),{data:R,isLoading:S}=$({entityRefs:z}),x=r(()=>s?[...T.slice(0,-1),...a]:[...T,...a],[a,s]),F=p>0?`All (${p||0})`:"No Items",v=d||F;return o.createElement(o.Fragment,null,o.createElement("div",{className:w.entityTable},o.createElement(B,{title:v,columns:x,subtitle:p===0?"Add or adjust filters to see preview":"",data:R?.items?.filter(t=>!!t)??[],isLoading:S||f,options:{padding:"dense",paging:p>e.pageSize,toolbar:!0,draggable:!1,tableLayout:"fixed",search:!1,showTitle:!0,rowStyle:{fontSize:h.typography.body1.fontSize},showFirstLastPageButtons:!1,emptyRowsWhenPaging:!0,pageSizeOptions:[10,25,50],loadingType:"linear",showEmptyDataSourceMessage:!S,pageSize:e.pageSize,sorting:!1},onPageChange:t=>{m({...e,page:t})},onSearchChange:t=>{g(t)},onRowsPerPageChange:t=>{m({...e,pageSize:t})},components:{Toolbar:t=>o.createElement(y,{padding:2,paddingLeft:4,display:"flex",alignItems:"center",justifyContent:"space-between",borderBottom:`1px solid ${h.palette.divider}`},o.createElement(y,null,t.title),o.createElement(y,null,o.createElement(A,{searchTerm:n,setSearchTerm:g})))},page:e.page,totalCount:p,localization:{pagination:{labelDisplayedRows:""}}})))};export{J as FilterPreviewTable};
1
+ import{parseEntityRef as B}from"@backstage/catalog-model";import{Table as j}from"@backstage/core-components";import{makeStyles as k,useTheme as D,Box as h}from"@material-ui/core";import{combineEntityFilterQueries as K,difference as O}from"@spotify/backstage-plugin-soundcheck-common";import i,{useState as b,useMemo as d}from"react";import{useEntitiesByRefs as N}from"../../../hooks/catalog/useEntitiesByRefs.esm.js";import{useGetEntityRefs as C}from"../../../hooks/catalog/useGetEntityRefs.esm.js";import{SearchBar as $}from"../../SearchBar/SearchBar.esm.js";import{mapFiltersToCatalogFilter as T}from"../utils.esm.js";import{createEntityRefColumn as A,createSystemColumn as I,createOwnerColumn as M,createKindColumn as W,createSpecTypeColumn as G,createSpecLifecycleColumn as Q,createTagsColumn as X}from"./EntityTableColumns.esm.js";const Y=k(()=>({entityTable:{'& span[class*="CatalogReactEntityDisplayName-root"]':{"&:hover":{textDecoration:"underline"}}}})),w=[A(),I(),M(),W(),G(),Q(),X()],q=15e3,H=({filter:y,excludeFilter:g,keyValueFilter:f,excludeKeyValueFilter:u})=>{const a=T(y,f),r=!!a?.[0]&&Object.values(a[0]).some(l=>!!l),o=g||u?T(g,u):[],e=!!o?.[0]&&Object.values(o[0]).some(l=>!!l),{data:n,isFetching:s}=C(a,e&&!r?q:void 0,r),m=e?K(a,o):void 0,{data:c,isFetching:S}=C(m??{},void 0,r&&!!m);return{allEntityRefs:d(()=>O(n??[],c??[]),[c,n]),isLoading:s||S}},J=({filter:y,excludeFilter:g,keyValueFilter:f,excludeKeyValueFilter:u,additionalColumns:a=[],title:r,hideTags:o=!1})=>{const[e,n]=b({page:0,pageSize:10}),[s,m]=b(""),{allEntityRefs:c,isLoading:S}=H({filter:y,excludeFilter:g,keyValueFilter:f,excludeKeyValueFilter:u}),l=d(()=>{const t=new RegExp(s,"i");return c.filter(V=>B(V).name.match(t))},[c,s]),p=l.length,F=D(),x=Y(),z=d(()=>l.slice(e.page*e.pageSize,(e.page+1)*e.pageSize),[l,e.page,e.pageSize]),{data:R,isLoading:E}=N({entityRefs:z}),v=d(()=>o?[...w.slice(0,-1),...a]:[...w,...a],[a,o]),L=p>0?`All (${p||0}) `:"No Items",P=r||L;return i.createElement(i.Fragment,null,i.createElement("div",{className:x.entityTable},i.createElement(j,{title:P,columns:v,subtitle:p===0?"Add or adjust filters to see preview.":"",data:R?.items?.filter(t=>!!t)??[],isLoading:E||S,options:{padding:"dense",paging:p>e.pageSize,toolbar:!0,draggable:!1,tableLayout:"fixed",search:!1,showTitle:!0,rowStyle:{fontSize:F.typography.body1.fontSize},showFirstLastPageButtons:!1,emptyRowsWhenPaging:!0,pageSizeOptions:[10,25,50],loadingType:"linear",showEmptyDataSourceMessage:!E,pageSize:e.pageSize,sorting:!1},onPageChange:t=>{n({...e,page:t})},onSearchChange:t=>{m(t)},onRowsPerPageChange:t=>{n({...e,pageSize:t})},components:{Toolbar:t=>i.createElement(h,{padding:2,paddingLeft:4,display:"flex",alignItems:"center",justifyContent:"space-between",borderBottom:`1px solid ${F.palette.divider}`},i.createElement(h,null,t.title),i.createElement(h,null,i.createElement($,{searchTerm:s,setSearchTerm:m})))},page:e.page,totalCount:p,localization:{pagination:{labelDisplayedRows:""}}})))};export{J as FilterPreviewTable};
2
2
  //# sourceMappingURL=FilterPreviewTable.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{Box as n,IconButton as x,Divider as K,Button as C,FormHelperText as S,TextField as z,Chip as A}from"@material-ui/core";import V from"@material-ui/icons/Add";import W from"@material-ui/icons/Delete";import e,{useEffect as F,useCallback as E,useMemo as G,useState as M}from"react";import{useImmer as T}from"use-immer";import{SoundcheckDialog as $}from"../SoundcheckDialog/SoundcheckDialog.esm.js";const B=({value:v,onChange:s,onKeyDown:d,placeholder:o,endAdornment:u,error:a,helperText:i})=>e.createElement(e.Fragment,null,i&&e.createElement(S,{error:a},i),e.createElement(n,{display:"flex",alignItems:"center"},e.createElement(z,{value:v,onChange:s,variant:"outlined",margin:"dense",fullWidth:!0,onKeyDown:d,placeholder:o,InputProps:{endAdornment:u},error:a}))),H=({values:v,addValue:s,deleteValue:d})=>{const[o,u]=M("");return e.createElement(n,{width:"100%"},e.createElement(n,{marginTop:1,marginBottom:1,display:"flex",gridGap:1,flexWrap:"wrap"},v.map(a=>e.createElement(A,{label:a,size:"small",key:a,onDelete:()=>d(a),style:{marginBottom:4}}))),e.createElement(B,{value:o,onChange:a=>u(a.currentTarget.value),onKeyDown:a=>{a.key==="Enter"&&(s(o),u(""))},placeholder:"Type a value and press enter to add to value list.",endAdornment:e.createElement(n,{display:"flex",alignItems:"center"},e.createElement(C,{onClick:()=>s(o),style:{padding:0},size:"small",variant:"text",disabled:!o?.length},"Add"))}))},L=({title:v,open:s,handleClose:d,values:o,onSave:u,validateKey:a})=>{const[i,m]=T([{key:"",value:[]}]);F(()=>{o?.length>0?m(o):m([{key:"",value:[]}])},[o]);const[y,g]=T({}),f=E(({key:t,value:l,idx:r})=>{m(p=>{const c=p[r];c.key=t===void 0?c.key:t,c.value=l===void 0?c.value:l,t&&y[r]&&g(h=>{h[r]=""})})},[y,g,m]),w=E(t=>{m(l=>{l.splice(t,1),l.length===0&&l.push({key:"",value:[]})})},[m]),D=E(t=>{m(l=>{l.splice(t+1,0,{key:"",value:[]})})},[m]),I=E(()=>{let t=!1;if(a){const r=i.map(c=>c.key);let p=0;g(c=>{for(const h of r){const{errorMessage:k}=a(h);k&&(t=!0),c[p]=k??"",p++}})}if(t)return;const l=i.filter(r=>r.key&&r.value);u(l),d()},[a,i,u,d,g]),b=G(()=>i.every(t=>!!t.key&&t.value?.length||!t.key&&!t.value?.length),[i]);return e.createElement($,{title:v,open:s,handleClose:d,fullScreen:!1},e.createElement(n,{marginLeft:1,minWidth:640},i.map((t,l)=>e.createElement(n,{key:l},e.createElement(n,{display:"flex",alignItems:"flex-end",gridGap:12,marginBottom:2},e.createElement(n,{flexGrow:1},e.createElement(B,{value:t.key,onChange:r=>f({key:r.target.value,idx:l}),placeholder:"Key",error:!!y[l],helperText:y[l]})),e.createElement(n,{width:480},e.createElement(H,{values:t.value,addValue:r=>{f({idx:l,value:[...t.value,r]})},deleteValue:r=>{f({idx:l,value:t.value.filter(p=>p!==r)})}})),e.createElement(n,{marginBottom:.75},e.createElement(x,{"aria-label":`remove index ${l} key value pair`,size:"small",onClick:()=>D(l)},e.createElement(V,null))),e.createElement(n,{marginBottom:.75},e.createElement(x,{"aria-label":`remove index ${l} key value pair`,size:"small",onClick:()=>w(l)},e.createElement(W,null)))),e.createElement(K,null))),e.createElement(n,{display:"flex",paddingTop:2,marginTop:1},e.createElement(C,{variant:"contained",size:"medium",color:"primary",onClick:I,disabled:!b},"Save"))))};export{L as KeyValueInputDialog};
2
+ //# sourceMappingURL=KeyValueInputDialog.esm.js.map
@@ -1,2 +1,2 @@
1
- const e=()=>({selectedKinds:[],selectedLifecycles:[],selectedOwners:[],selectedSystems:[],selectedTags:[],selectedTypes:[]}),s=[{facet:"kind",label:"Kind",key:"selectedKinds"},{facet:"spec.type",label:"Type",key:"selectedTypes"},{facet:"spec.lifecycle",label:"Lifecycle",key:"selectedLifecycles"},{facet:"relations.ownedBy",label:"Owner",key:"selectedOwners",isOwnerSelect:!0},{facet:"spec.system",label:"System",key:"selectedSystems"},{facet:"metadata.tags",label:"Tags",key:"selectedTags"}];export{s as FILTER_OPTIONS,e as emptyFilters};
1
+ const e=()=>({selectedLabels:[],selectedAnnotations:[],selectedOtherFilters:[]}),s=()=>({selectedKinds:[],selectedLifecycles:[],selectedOwners:[],selectedSystems:[],selectedTags:[],selectedTypes:[]}),t=[{facet:"kind",label:"Kind",key:"selectedKinds"},{facet:"spec.type",label:"Type",key:"selectedTypes"},{facet:"spec.lifecycle",label:"Lifecycle",key:"selectedLifecycles"},{facet:"relations.ownedBy",label:"Owner",key:"selectedOwners",isOwnerSelect:!0},{facet:"spec.system",label:"System",key:"selectedSystems"},{facet:"metadata.tags",label:"Tags",key:"selectedTags"}];export{t as FILTER_OPTIONS,s as emptyFilters,e as emptyKeyValueFilters};
2
2
  //# sourceMappingURL=types.esm.js.map
@@ -1,2 +1,2 @@
1
- import{stringifyEntityRef as m,parseEntityRef as y,DEFAULT_NAMESPACE as f}from"@backstage/catalog-model";import{asArray as a}from"@spotify/backstage-plugin-soundcheck-common";import{emptyFilters as g}from"./types.esm.js";const o="spec.owner",n={selectedKinds:"kind",selectedTypes:"spec.type",selectedLifecycles:"spec.lifecycle",selectedOwners:"relations.ownedBy",selectedSystems:"spec.system",selectedTags:"metadata.tags"},p=e=>e?e.map(t=>m(y(t,{defaultKind:"group",defaultNamespace:f}))):[],d=e=>{const t=e?a(e):[];if(t.length){const s=t[0],r=Object.keys(n).reduce((l,i)=>i===o?(l[n.selectedOwners]=p(a(s?.[o]??[])),l):(l[i]=a(s?.[n[i]]??[]),l),{}),c=s?.[o];return c?.length&&(r.selectedOwners=[...r.selectedOwners,...p(c)]),r}return g()},u=e=>{if(e&&!e.hasOwnProperty("catalog"))return d(e);const t=Object.keys(n).reduce((r,c)=>(r[c]=a(e?.catalog?.[n[c]]??[]),r),{}),s=e?.catalog?.[o];return s?.length&&(t.selectedOwners=[...t.selectedOwners,...p(s)]),t},O=e=>{if(!e||Object.values(e).every(s=>s.length===0))return;const t={};for(const[s,r]of Object.entries(e))r?.length>0&&(t[n[s]]=r);return[t]};export{d as mapCatalogFilterToFilters,O as mapFiltersToCatalogFilter,u as mapInputFilterToFormFilters};
1
+ import{stringifyEntityRef as g,parseEntityRef as h,DEFAULT_NAMESPACE as O}from"@backstage/catalog-model";import{asArray as n}from"@spotify/backstage-plugin-soundcheck-common";import{isEmpty as d}from"lodash";import{emptyFilters as u,emptyKeyValueFilters as f}from"./types.esm.js";const c="spec.owner",i={selectedKinds:"kind",selectedTypes:"spec.type",selectedLifecycles:"spec.lifecycle",selectedOwners:"relations.ownedBy",selectedSystems:"spec.system",selectedTags:"metadata.tags"},m=e=>{for(const s of Object.values(i)){if(e===s)return{isValid:!1,errorMessage:`Filter key ${e} is part of the standard key selection.`};if(["metadata.annotations","metadata.labels"].some(a=>e.startsWith(a)))return{isValid:!1,errorMessage:`Filter key ${e} is part of the standard key value selection.`}}return{isValid:!0}},p=e=>e?e.map(s=>g(h(s,{defaultKind:"group",defaultNamespace:O}))):[],y=e=>{const s=e?n(e):[];if(s.length){const a=s[0],t=Object.keys(i).reduce((o,l)=>l===c?(o[i.selectedOwners]=p(n(a?.[c]??[])),o):(o[l]=n(a?.[i[l]]??[]),o),{}),r=a?.[c];return r?.length&&(t.selectedOwners=[...t.selectedOwners,...p(r)]),t}return u()},F=e=>{if(!e||e&&e.hasOwnProperty("catalog"))return f();const s=f(),a=n(e);if(a.length>0){const t=a[0];for(const[r,o]of Object.entries(t)){if(r.startsWith("metadata.labels")){let l=r.replace(/^metadata.labels/,"");l=l.replace(/^\.|^\[\'|^\[\"|\'\]/,""),l=l.replace(/\'\]$|\"\]$/,""),s.selectedLabels.push({key:l,value:n(o)})}else if(r.startsWith("metadata.annotations")){let l=r.replace(/^metadata.annotations/,"");l=l.replace(/^\.|^\[\'|^\[\"|\'\]/,""),l=l.replace(/\'\]$|\"\]$/,""),s.selectedAnnotations.push({key:l,value:n(o)})}m(r).isValid&&s.selectedOtherFilters.push({key:r,value:n(o)})}}return s},b=e=>{if(e&&!e.hasOwnProperty("catalog"))return y(e);const s=Object.keys(i).reduce((t,r)=>(t[r]=n(e?.catalog?.[i[r]]??[]),t),{}),a=e?.catalog?.[c];return a?.length&&(s.selectedOwners=[...s.selectedOwners,...p(a)]),s},v=(e,s)=>{const a={};if(e&&Object.values(e).some(t=>t.length>0))for(const[t,r]of Object.entries(e))r?.length>0&&(a[i[t]]=r);if(s){for(const t of s.selectedLabels)t.value?.length>0&&(a[`metadata.labels.${t.key}`]=t.value);for(const t of s.selectedAnnotations)t.value?.length>0&&(a[`metadata.annotations.${t.key}`]=t.value);for(const t of s.selectedOtherFilters)t.value?.length>0&&(a[t.key]=t.value)}if(!d(a))return[a]},k=(e=u(),s=f())=>Object.values(e).some(a=>!d(a))||Object.values(s).some(a=>!d(a));export{k as filterPresent,m as isValidOtherFilterKey,y as mapCatalogFilterToFilters,F as mapCatalogFilterToFormKeyValueFilters,v as mapFiltersToCatalogFilter,b as mapInputFilterToFormFilters};
2
2
  //# sourceMappingURL=utils.esm.js.map
@@ -1,2 +1,2 @@
1
- import{Typography as l}from"@material-ui/core";import e from"react";import{Controller as a}from"react-hook-form";import{formStyles as p}from"../../utils/formStyles.esm.js";import"@backstage/catalog-model";import"@spotify/backstage-plugin-soundcheck-common";import{emptyFilters as c}from"../Filter/types.esm.js";import{FilterComponent as s}from"../Filter/FilterComponent.esm.js";const d=({control:o,description:t,name:m,disabled:n})=>{const i=p();return e.createElement("div",{className:i.filters},e.createElement(l,{variant:"body2"},t),e.createElement(a,{name:m,control:o,render:({field:r})=>e.createElement(s,{value:r.value??c(),onChange:r.onChange,disabled:n})}))};export{d as FormFilterSection};
1
+ import{Typography as c}from"@material-ui/core";import e from"react";import{formStyles as n}from"../../utils/formStyles.esm.js";import"@backstage/catalog-model";import"@spotify/backstage-plugin-soundcheck-common";import"lodash";import{FilterComponent as p}from"../Filter/FilterComponent.esm.js";const d=({description:r,name:t,keyValueFilterName:m,excludeFilterName:l,excludeKeyValueFilterName:i,disabled:a})=>{const o=n();return e.createElement("div",{className:o.filters},e.createElement(c,{variant:"body2"},r),e.createElement(p,{filterName:t,keyValueFilterName:m,disabled:a,excludeFilterName:l,excludeKeyValueFilterName:i}))};export{d as FormFilterSection};
2
2
  //# sourceMappingURL=FormFilterSection.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as U,Grid as r,RadioGroup as _,Radio as p,Typography as m,TextField as g,FormControl as q,InputLabel as F,Select as S,MenuItem as R,Divider as w}from"@material-ui/core";import e,{useState as E,useEffect as A}from"react";import{getCronDescription as B}from"../../utils/cron.esm.js";import{MIN_TIME_UNIT_VALUE as H,MAX_TIME_UNIT_VALUE as O}from"../../utils/time.esm.js";import{TimeUnit as V}from"./types.esm.js";import{VALID_TIME_UNITS as W,toTimeUnit as G}from"./util.esm.js";const X=U(t=>({divider:{marginTop:t.spacing(3),marginBottom:t.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:t.spacing(1)},selectField:{paddingRight:t.spacing(2)},inputLabel:{color:`${t.palette.text.primary} !important`},menuBackground:{backgroundColor:t.palette.background.paper}})),v=32,f=12,y=t=>t?(Math.ceil(t.length/v)-1)*f:0,j=({value:t,onChange:d,disabled:o,errors:c,intervalTitle:N,intervalDescription:b,intervalLabel:h,cronTitle:I,cronDescription:L})=>{const a=X(),[n,l]=E(t),[P,T]=E(`${t.value}`);A(()=>{d&&d(n)},[n,d]);const C=i=>{l({...t,type:i.target.value})},x=i=>{T(i.target.value);const s=parseInt(i.target.value,10);l({...t,value:isNaN(s)?0:s})},D=i=>{l({...n,unit:G(i.target.value)??V.Hours})},$=i=>{const s=i.target.value;l({...n,cron:s})},k=()=>{l({...n,type:"cron"})},M=()=>{l({...n,type:"HumanDuration"})},u=c?.message??B(n.cron);return e.createElement(r,{container:!0,direction:"row"},e.createElement(r,{item:!0,className:`${a.noPadding} ${a.fullWidth}`},e.createElement(_,{name:"frequencyType",value:n.type,onChange:C},e.createElement(r,{container:!0,alignItems:"flex-start",className:a.fullWidth},e.createElement(r,{item:!0,className:a.noPaddingLeft},e.createElement(p,{disabled:o,value:"HumanDuration"})),e.createElement(r,{item:!0,className:`${a.noPadding} ${a.radioOptions}`},e.createElement(m,{variant:"body1",className:a.title,onClick:M},N??"Run on a regular interval"),e.createElement(m,{variant:"caption"},b??"Set consistent time intervals."),n.type==="HumanDuration"&&e.createElement(r,{container:!0,className:a.humanDurationContainer,spacing:2},e.createElement(r,{item:!0,className:a.noPadding},e.createElement(g,{id:"every",type:"number",inputProps:{min:H,max:O},label:h??"Every",name:"every",disabled:o,value:P,error:!!c?.message,helperText:c?.message,onChange:x,InputLabelProps:{className:a.inputLabel}})),e.createElement(r,{item:!0,className:a.noPadding},e.createElement(q,null,e.createElement(F,{className:a.inputLabel,id:"frequency-unit"},"Unit"),e.createElement(S,{labelId:"frequency-unit",disabled:o,value:n.unit,onChange:D,"data-testid":"frequency-unit",className:a.selectField,MenuProps:{classes:{paper:a.menuBackground}}},W.map(i=>e.createElement(R,{key:i,value:i},i)))))))),e.createElement(w,{className:a.divider}),e.createElement(r,{container:!0,alignItems:"flex-start"},e.createElement(r,{item:!0,className:a.noPaddingLeft},e.createElement(p,{disabled:o,value:"cron"})),e.createElement(r,{item:!0,className:`${a.noPadding} ${a.radioOptions}`},e.createElement(m,{variant:"body1",className:a.title,onClick:k},I??"Run on a schedule"),e.createElement(m,{variant:"caption"},L??"Set a specific schedule using a cron expression."),n.type==="cron"&&e.createElement(r,{item:!0,className:a.noPadding},e.createElement(g,{id:"cron-expression","data-testid":"cron-expression",className:a.cronInput,label:u,disabled:o,placeholder:"* * * * *",error:!!c?.message,value:n.cron,onChange:$,InputProps:{style:{paddingTop:`${y(u)}px`}}})))))))};export{j as FrequencyComponent,y as calculateCronLabelPadding,v as characterLimitPerLine,f as paddingPerExtraLine};
1
+ import{makeStyles as _,Grid as i,RadioGroup as q,Radio as g,Typography as m,TextField as E,FormControl as F,InputLabel as R,Select as S,MenuItem as w,Divider as A}from"@material-ui/core";import e,{useState as v,useRef as H,useEffect as B}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 G}from"./types.esm.js";import{VALID_TIME_UNITS as X,toTimeUnit as j}from"./util.esm.js";const z=_(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}})),f=32,y=12,N=a=>a?(Math.ceil(a.length/f)-1)*y:0,J=({value:a,onChange:d,disabled:o,errors:c,intervalTitle:b,intervalDescription:h,intervalLabel:I,cronTitle:L,cronDescription:P})=>{const t=z(),[n,l]=v(a),[T,x]=v(`${a.value}`),p=H();B(()=>{d&&n!==p.current&&(p.current=n,d(n))},[n,d]);const C=r=>{l({...a,type:r.target.value})},D=r=>{x(r.target.value);const s=parseInt(r.target.value,10);l({...a,value:isNaN(s)?0:s})},$=r=>{l({...n,unit:j(r.target.value)??G.Hours})},k=r=>{const s=r.target.value;l({...n,cron:s})},M=()=>{l({...n,type:"cron"})},U=()=>{l({...n,type:"HumanDuration"})},u=c?.message??O(n.cron);return e.createElement(i,{container:!0,direction:"row"},e.createElement(i,{item:!0,className:`${t.noPadding} ${t.fullWidth}`},e.createElement(q,{name:"frequencyType",value:n.type,onChange:C},e.createElement(i,{container:!0,alignItems:"flex-start",className:t.fullWidth},e.createElement(i,{item:!0,className:t.noPaddingLeft},e.createElement(g,{disabled:o,value:"HumanDuration"})),e.createElement(i,{item:!0,className:`${t.noPadding} ${t.radioOptions}`},e.createElement(m,{variant:"body1",className:t.title,onClick:U},b??"Run on a regular interval"),e.createElement(m,{variant:"caption"},h??"Set consistent time intervals."),n.type==="HumanDuration"&&e.createElement(i,{container:!0,className:t.humanDurationContainer,spacing:2},e.createElement(i,{item:!0,className:t.noPadding},e.createElement(E,{id:"every",type:"number",inputProps:{min:V,max:W},label:I??"Every",name:"every",disabled:o,value:T,error:!!c?.message,helperText:c?.message,onChange:D,InputLabelProps:{className:t.inputLabel}})),e.createElement(i,{item:!0,className:t.noPadding},e.createElement(F,null,e.createElement(R,{className:t.inputLabel,id:"frequency-unit"},"Unit"),e.createElement(S,{labelId:"frequency-unit",disabled:o,value:n.unit,onChange:$,"data-testid":"frequency-unit",className:t.selectField,MenuProps:{classes:{paper:t.menuBackground}}},X.map(r=>e.createElement(w,{key:r,value:r},r)))))))),e.createElement(A,{className:t.divider}),e.createElement(i,{container:!0,alignItems:"flex-start"},e.createElement(i,{item:!0,className:t.noPaddingLeft},e.createElement(g,{disabled:o,value:"cron"})),e.createElement(i,{item:!0,className:`${t.noPadding} ${t.radioOptions}`},e.createElement(m,{variant:"body1",className:t.title,onClick:M},L??"Run on a schedule"),e.createElement(m,{variant:"caption"},P??"Set a specific schedule using a cron expression."),n.type==="cron"&&e.createElement(i,{item:!0,className:t.noPadding},e.createElement(E,{id:"cron-expression","data-testid":"cron-expression",className:t.cronInput,label:u,disabled:o,placeholder:"* * * * *",error:!!c?.message,value:n.cron,onChange:k,InputProps:{style:{paddingTop:`${N(u)}px`}}})))))))};export{J as FrequencyComponent,N as calculateCronLabelPadding,f as characterLimitPerLine,y as paddingPerExtraLine};
2
2
  //# sourceMappingURL=FrequencyComponent.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useRouteRef as j}from"@backstage/core-plugin-api";import{entityRouteRef as q}from"@backstage/plugin-catalog-react";import{makeStyles as B,Grid as D}from"@material-ui/core";import e,{useContext as I,useEffect as k,useState as J,useRef as K,useLayoutEffect as Q,useMemo as U}from"react";import{VariableSizeGrid as X}from"react-window";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useProgramOverviewForOwner as Y}from"../../hooks/certifications/useProgramOverviewForOwner.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{EmptyState as Z}from"../EmptyState/EmptyState.esm.js";import"../OverviewPage/OverviewPage.esm.js";import"@spotify/backstage-plugin-core";import"../SoundcheckQueryClientProvider/SoundcheckQueryClientProvider.esm.js";import{OverviewPageContext as _}from"../OverviewPage/OverviewPageContent.esm.js";import"../Pagination/Pagination.esm.js";import{useCursorPagination as $,CursorPagination as ee}from"../Pagination/CursorPagination.esm.js";import{cellRenderer as te}from"./Cell/cellRenderer.esm.js";import{OverviewTableSkeleton as re}from"./OverviewTableSkeleton.esm.js";import{ResultsTableHeader as oe}from"./ResultsTableHeader.esm.js";import{generateRowsPivoted as ie,generateRows as ne,generateHeaderRowPivoted as ae,generateHeaderRow as le}from"./ResultsTableRow.esm.js";import{RowHeights as P,CellWidths as y,calculateTableWidth as me}from"./resultsTableUtils.esm.js";import se from"./useWindowDimensions.esm.js";const S=25,ue=B(i=>({table:{backgroundColor:i.palette.background.paper,borderCollapse:"collapse",whiteSpace:"nowrap",textAlign:"left",overflow:"auto"},tableContainer:{backgroundColor:i.palette.background.paper}})),ce=({setError:i,kind:u,type:c,ownerEntityRef:r})=>{const{cursor:W,pageSize:R,...p}=$({defaultPageSize:S,label:"entitiesPerPage"}),{debouncedSearchValue:l,pivot:m}=I(_),{data:t,isLoading:g,isError:b}=Y(r,{kind:u,type:c},R,W,l);k(()=>{p.setCursor(""),p.setCurrentPage(0)},[l]);const E=ue(),d=j(q);k(()=>{i?.(b?new Error("Error loading track overview"):void 0)},[b,i]);const[H,x]=J(0),{height:z}=se(),n=K(null);Q(()=>{t&&r&&n?.current&&x(n.current.clientWidth?n.current.clientWidth-16:100)},[n,t,r]);const{rows:h,headerRow:f,tableWidth:w,entityRefsWithPadding:T,getRowHeight:N,columnCount:O}=U(()=>{if(g||!t||!r)return{};const{programs:a,entityRefs:o}=t;if(!o)return{};const s=o.length>=25?o:[...o,...Array.from({length:25-o.length},()=>{})],C=m?ie(a,o,d):ne(a,s,d),v=C[0]?.cells?.length??s.length+1,G=m?ae(a):le(s),L=me(v-1)+60;return{rows:C,headerRow:G,tableWidth:L,entityRefsWithPadding:s,getRowHeight:M=>C[M]?.height??P.check,columnCount:v}},[t,d,g,r,m]);if(g)return e.createElement(re,null);if(!t||!r)return null;const{totalCount:V,endCursor:A,prevCursor:F}=t;return!f||!w||!T||!h?.length?l?e.createElement(Z,{title:"No Entities Found",description:`No entities found with name containing: '${l}'`}):null:e.createElement("div",{ref:n},e.createElement(D,{"aria-label":`Check results for ${c??u}`,key:`${u}|${c??""}`,item:!0,xs:12,className:E.tableContainer},H>0&&e.createElement(e.Fragment,null,e.createElement(oe,{headerRow:f,gridWidth:w}),e.createElement(X,{className:E.table,columnCount:O,columnWidth:a=>a===0?y.trackTitle:y.checkResult,rowCount:h.length,rowHeight:N,height:z*.7-P.paginationControl-f.height,width:w,key:m?"entityView":"checkView"},te(h)))),e.createElement(ee,{...p,totalCount:V,defaultPageSize:S,endCursor:A,prevCursor:F,pageSize:R,labelRowsPerPage:"Entities per page:"}))};export{ce as ResultsTable};
1
+ import{useRouteRef as j}from"@backstage/core-plugin-api";import{entityRouteRef as q}from"@backstage/plugin-catalog-react";import{makeStyles as B,Grid as D}from"@material-ui/core";import e,{useContext as I,useEffect as v,useState as J,useRef as K,useLayoutEffect as Q,useMemo as U}from"react";import{VariableSizeGrid as X}from"react-window";import"@backstage/catalog-model";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import{useTrackOverviewForOwner as Y}from"../../hooks/certifications/useTrackOverviewForOwner.esm.js";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{EmptyState as Z}from"../EmptyState/EmptyState.esm.js";import"../OverviewPage/OverviewPage.esm.js";import"@spotify/backstage-plugin-core";import"../SoundcheckQueryClientProvider/SoundcheckQueryClientProvider.esm.js";import{OverviewPageContext as _}from"../OverviewPage/OverviewPageContent.esm.js";import"../Pagination/Pagination.esm.js";import{useCursorPagination as $,CursorPagination as ee}from"../Pagination/CursorPagination.esm.js";import{cellRenderer as te}from"./Cell/cellRenderer.esm.js";import{OverviewTableSkeleton as re}from"./OverviewTableSkeleton.esm.js";import{ResultsTableHeader as oe}from"./ResultsTableHeader.esm.js";import{generateRowsPivoted as ie,generateRows as ne,generateHeaderRowPivoted as ae,generateHeaderRow as le}from"./ResultsTableRow.esm.js";import{RowHeights as y,CellWidths as P,calculateTableWidth as me}from"./resultsTableUtils.esm.js";import se from"./useWindowDimensions.esm.js";const S=25,ue=B(i=>({table:{backgroundColor:i.palette.background.paper,borderCollapse:"collapse",whiteSpace:"nowrap",textAlign:"left",overflow:"auto"},tableContainer:{backgroundColor:i.palette.background.paper}})),ce=({setError:i,kind:u,type:c,ownerEntityRef:r})=>{const{cursor:W,pageSize:R,...p}=$({defaultPageSize:S,label:"entitiesPerPage"}),{debouncedSearchValue:l,pivot:m}=I(_),{data:t,isLoading:g,isError:b}=Y(r,{kind:u,type:c},R,W,l);v(()=>{p.setCursor(""),p.setCurrentPage(0)},[l]);const k=ue(),d=j(q);v(()=>{i?.(b?new Error("Error loading track overview"):void 0)},[b,i]);const[H,x]=J(0),{height:z}=se(),n=K(null);Q(()=>{t&&r&&n?.current&&x(n.current.clientWidth?n.current.clientWidth-16:100)},[n,t,r]);const{rows:h,headerRow:f,tableWidth:w,entityRefsWithPadding:T,getRowHeight:N,columnCount:O}=U(()=>{if(g||!t||!r)return{};const{tracks:a,entityRefs:o}=t;if(!o)return{};const s=o.length>=25?o:[...o,...Array.from({length:25-o.length},()=>{})],C=m?ie(a,o,d):ne(a,s,d),E=C[0]?.cells?.length??s.length+1,G=m?ae(a):le(s),L=me(E-1)+60;return{rows:C,headerRow:G,tableWidth:L,entityRefsWithPadding:s,getRowHeight:M=>C[M]?.height??y.check,columnCount:E}},[t,d,g,r,m]);if(g)return e.createElement(re,null);if(!t||!r)return null;const{totalCount:V,endCursor:A,prevCursor:F}=t;return!f||!w||!T||!h?.length?l?e.createElement(Z,{title:"No Entities Found",description:`No entities found with name containing: '${l}'`}):null:e.createElement("div",{ref:n},e.createElement(D,{"aria-label":`Check results for ${c??u}`,key:`${u}|${c??""}`,item:!0,xs:12,className:k.tableContainer},H>0&&e.createElement(e.Fragment,null,e.createElement(oe,{headerRow:f,gridWidth:w}),e.createElement(X,{className:k.table,columnCount:O,columnWidth:a=>a===0?P.trackTitle:P.checkResult,rowCount:h.length,rowHeight:N,height:z*.7-y.paginationControl-f.height,width:w,key:m?"entityView":"checkView"},te(h)))),e.createElement(ee,{...p,totalCount:V,defaultPageSize:S,endCursor:A,prevCursor:F,pageSize:R,labelRowsPerPage:"Entities per page:"}))};export{ce as ResultsTable};
2
2
  //# sourceMappingURL=ResultsTable.esm.js.map
@@ -1,2 +1,2 @@
1
- import k from"react";import{ResultState as y}from"../../graphql/generated/index.esm.js";import{entityHeaderCell as g,trackHeaderCell as b,trackBadgeCell as C,levelHeaderCell as R,checkTitleCell as w,checkResultCell as H}from"./Cell/cellRenderer.esm.js";import{CheckLabelCellType as v,CheckLabelCell as T}from"./Cell/CheckLabelCell.esm.js";import{TrackLevelHeaderFill as L}from"./Cell/TrackLevelHeaderCell.esm.js";import{findLongestRefTitle as M,calculateHeightForRefTitle as S,RowHeights as m}from"./resultsTableUtils.esm.js";const A=n=>{const l=M(n??[]);return{height:Math.min(S(l.length??1)-10,125),cells:[g(""),...n.map(t=>g(t||""))]}},F=(n,l,t)=>{const e=[];return n.forEach(({program:o,levels:p,trackStatuses:i})=>{e.push({height:m.trackTitle,cells:[b(o.name),...l.map(r=>{const c=r?i.find(a=>a.entityRef===r):void 0;return C(c,o.type??void 0)})]}),p.forEach(r=>{e.push({height:m.levelTitle,cells:[R(r.name),...l.map(c=>R(""))]}),r.checks.forEach(({check:c,results:a,totalCount:d,totalPassing:s})=>{const f={PASSED:s,FAILED:d-s};e.push({height:m.check,cells:[w(c.name,f),...l.map(h=>H(o.id,c,h,a.find(u=>u.entityRef===h)?.result??y.NotApplicable,t))]})})})}),e},P=n=>{const l=n.flatMap(({program:t,levels:e})=>{const o={label:t.name??t.id,description:t.description??"",cellType:v.track},p=e.flatMap(i=>{const r={label:i.name??`level ${i.ordinal}`,cellType:v.level},c=i.checks.map(({check:a})=>({label:a.name??a.id,description:a.description??"",cellType:v.check}));return[r,...c]});return[o,...p]});return{height:125,cells:[{type:"CheckHeader",render:()=>k.createElement(T,null)},...l.map(t=>({render:()=>k.createElement(T,{...t}),type:"CheckHeader"}))]}},D=(n,l,t)=>l.map(e=>{const o=g(e,!0),p=n.flatMap(({program:i,levels:r,trackStatuses:c})=>{const a=e?c.find(s=>s.entityRef===e):void 0,d=r.flatMap(s=>{const f=s.checks.map(({check:h,results:u})=>H(i.id,h,e,u.find(E=>E.entityRef===e)?.result??y.NotApplicable,t));return[{type:"Filler",render:()=>k.createElement(L,{pivot:!0})},...f]});return[C(a,i.type??void 0,!0),...d]});return[o,...p]}).map(e=>({height:m.check,cells:e}));export{A as generateHeaderRow,P as generateHeaderRowPivoted,F as generateRows,D as generateRowsPivoted};
1
+ import u from"react";import{ResultState as y}from"../../graphql/generated/index.esm.js";import{entityHeaderCell as g,trackHeaderCell as b,trackBadgeCell as C,levelHeaderCell as R,checkTitleCell as w,checkResultCell as H}from"./Cell/cellRenderer.esm.js";import{CheckLabelCellType as v,CheckLabelCell as T}from"./Cell/CheckLabelCell.esm.js";import{TrackLevelHeaderFill as L}from"./Cell/TrackLevelHeaderCell.esm.js";import{findLongestRefTitle as M,calculateHeightForRefTitle as S,RowHeights as d}from"./resultsTableUtils.esm.js";const A=n=>{const l=M(n??[]);return{height:Math.min(S(l.length??1)-10,125),cells:[g(""),...n.map(t=>g(t||""))]}},F=(n,l,t)=>{const e=[];return n.forEach(({track:o,levels:p,trackStatuses:i})=>{e.push({height:d.trackTitle,cells:[b(o.name),...l.map(r=>{const a=r?i.find(c=>c.entityRef===r):void 0;return C(a,o.type??void 0)})]}),p.forEach(r=>{e.push({height:d.levelTitle,cells:[R(r.name),...l.map(a=>R(""))]}),r.checks.forEach(({check:a,results:c,totalCount:m,totalPassing:s})=>{const k={PASSED:s,FAILED:m-s};e.push({height:d.check,cells:[w(a.name,k),...l.map(h=>H(o.id,a,h,c.find(f=>f.entityRef===h)?.result??y.NotApplicable,t))]})})})}),e},P=n=>{const l=n.flatMap(({track:t,levels:e})=>{const o={label:t.name??t.id,description:t.description??"",cellType:v.track},p=e.flatMap(i=>{const r={label:i.name??`level ${i.ordinal}`,cellType:v.level},a=i.checks.map(({check:c})=>({label:c.name??c.id,description:c.description??"",cellType:v.check}));return[r,...a]});return[o,...p]});return{height:125,cells:[{type:"CheckHeader",render:()=>u.createElement(T,null)},...l.map(t=>({render:()=>u.createElement(T,{...t}),type:"CheckHeader"}))]}},D=(n,l,t)=>l.map(e=>{const o=g(e,!0),p=n.flatMap(({track:i,levels:r,trackStatuses:a})=>{const c=e?a.find(s=>s.entityRef===e):void 0,m=r.flatMap(s=>{const k=s.checks.map(({check:h,results:f})=>H(i.id,h,e,f.find(E=>E.entityRef===e)?.result??y.NotApplicable,t));return[{type:"Filler",render:()=>u.createElement(L,{pivot:!0})},...k]});return[C(c,i.type??void 0,!0),...m]});return[o,...p]}).map(e=>({height:d.check,cells:e}));export{A as generateHeaderRow,P as generateHeaderRowPivoted,F as generateRows,D as generateRowsPivoted};
2
2
  //# sourceMappingURL=ResultsTableRow.esm.js.map
@@ -1,2 +1,2 @@
1
- import{useRouteRef as m,useRouteRefParams as d}from"@backstage/core-plugin-api";import{useEntity as s}from"@backstage/plugin-catalog-react";import{SecretsContextProvider as v}from"@backstage/plugin-scaffolder-react";import e from"react";import{Routes as $,Route as c,Navigate as u}from"react-router-dom";import{useAllCertifications as L}from"../hooks/certifications/useAllCertifications.esm.js";import"@tanstack/react-query";import"../api.esm.js";import"../hooks/graphqlKeys.esm.js";import{useCertificationDetailsForTrack as R}from"../hooks/certifications/useCertificationDetailsForTrack.esm.js";import"@backstage/catalog-model";import"@spotify/backstage-plugin-soundcheck-common";import"../hooks/useSoundcheckAlert.esm.js";import"../hooks/useConfirmationModal.esm.js";import{usePlaylists as y}from"../hooks/playlists/usePlaylists.esm.js";import{certificationPlaylistTrackCheckRouteRef as I,certificationPlaylistTrackRouteRef as E,certificationPlaylistRouteRef as f,certificationTrackRouteRef as k,certificationRouteRef as g}from"../routes.esm.js";import{EntityContent as o}from"./EntityContent/EntityContent.esm.js";const x=()=>{const{entity:l}=s(),t=m(f),a=m(k),{isLoading:i,data:r}=y(l),{isLoading:n,data:C}=L(l);if(i||n)return null;const p=r?.[0]?.id,h=C?.[0]?.program.id;return!p&&!h?null:e.createElement(u,{to:p?t({playlistId:p}):a({trackId:h}),replace:!0})},T=()=>{const{entity:l}=s(),{playlistId:t}=d(f),a=m(E),{data:i}=y(l),r=i?.find(n=>n.id===t)?.trackIds[0];return r?e.createElement(u,{to:a({playlistId:t,trackId:r}),replace:!0}):null},F=()=>{const{entity:l}=s(),{playlistId:t,trackId:a}=d(E),{data:i}=R(l,a),r=m(I),n=i?.levels[0]?.checks[0]?.id;return n?e.createElement(u,{to:r({playlistId:t,trackId:a,checkId:n}),replace:!0}):null},P=()=>{const{entity:l}=s(),{trackId:t}=d(k),a=m(g),{data:i}=R(l,t),r=i?.levels?.find(n=>n.checks.length>0)?.checks[0].id;return r?e.createElement(u,{to:a({trackId:t,checkId:r}),replace:!0}):null},A=()=>e.createElement(v,null,e.createElement($,null,e.createElement(c,{path:I.path,element:e.createElement(o,null)}),e.createElement(c,{path:E.path,element:e.createElement(e.Fragment,null,e.createElement(o,null),e.createElement(F,null))}),e.createElement(c,{path:f.path,element:e.createElement(e.Fragment,null,e.createElement(o,null),e.createElement(T,null))}),e.createElement(c,{path:k.path,element:e.createElement(e.Fragment,null,e.createElement(o,null),e.createElement(P,null))}),e.createElement(c,{path:g.path,element:e.createElement(o,null)}),e.createElement(c,{path:"/",element:e.createElement(e.Fragment,null,e.createElement(o,null),e.createElement(x,null))})));export{P as RedirectToFirstCheck,T as RedirectToFirstPlaylistTrack,F as RedirectToFirstPlaylistTrackCheck,A as Router};
1
+ import{useRouteRef as m,useRouteRefParams as d}from"@backstage/core-plugin-api";import{useEntity as s}from"@backstage/plugin-catalog-react";import{SecretsContextProvider as v}from"@backstage/plugin-scaffolder-react";import e from"react";import{Routes as $,Route as i,Navigate as u}from"react-router-dom";import{useAllCertifications as L}from"../hooks/certifications/useAllCertifications.esm.js";import"@tanstack/react-query";import"../api.esm.js";import"../hooks/graphqlKeys.esm.js";import{useCertificationDetailsForTrack as R}from"../hooks/certifications/useCertificationDetailsForTrack.esm.js";import"@backstage/catalog-model";import"@spotify/backstage-plugin-soundcheck-common";import"../hooks/useSoundcheckAlert.esm.js";import"../hooks/useConfirmationModal.esm.js";import{usePlaylists as y}from"../hooks/playlists/usePlaylists.esm.js";import{certificationPlaylistTrackCheckRouteRef as I,certificationPlaylistTrackRouteRef as E,certificationPlaylistRouteRef as f,certificationTrackRouteRef as k,certificationRouteRef as g}from"../routes.esm.js";import{EntityContent as o}from"./EntityContent/EntityContent.esm.js";const x=()=>{const{entity:l}=s(),t=m(f),a=m(k),{isLoading:c,data:r}=y(l),{isLoading:n,data:C}=L(l);if(c||n)return null;const p=r?.[0]?.id,h=C?.[0]?.track.id;return!p&&!h?null:e.createElement(u,{to:p?t({playlistId:p}):a({trackId:h}),replace:!0})},T=()=>{const{entity:l}=s(),{playlistId:t}=d(f),a=m(E),{data:c}=y(l),r=c?.find(n=>n.id===t)?.trackIds[0];return r?e.createElement(u,{to:a({playlistId:t,trackId:r}),replace:!0}):null},F=()=>{const{entity:l}=s(),{playlistId:t,trackId:a}=d(E),{data:c}=R(l,a),r=m(I),n=c?.levels[0]?.checks[0]?.id;return n?e.createElement(u,{to:r({playlistId:t,trackId:a,checkId:n}),replace:!0}):null},P=()=>{const{entity:l}=s(),{trackId:t}=d(k),a=m(g),{data:c}=R(l,t),r=c?.levels?.find(n=>n.checks.length>0)?.checks[0].id;return r?e.createElement(u,{to:a({trackId:t,checkId:r}),replace:!0}):null},A=()=>e.createElement(v,null,e.createElement($,null,e.createElement(i,{path:I.path,element:e.createElement(o,null)}),e.createElement(i,{path:E.path,element:e.createElement(e.Fragment,null,e.createElement(o,null),e.createElement(F,null))}),e.createElement(i,{path:f.path,element:e.createElement(e.Fragment,null,e.createElement(o,null),e.createElement(T,null))}),e.createElement(i,{path:k.path,element:e.createElement(e.Fragment,null,e.createElement(o,null),e.createElement(P,null))}),e.createElement(i,{path:g.path,element:e.createElement(o,null)}),e.createElement(i,{path:"/",element:e.createElement(e.Fragment,null,e.createElement(o,null),e.createElement(x,null))})));export{P as RedirectToFirstCheck,T as RedirectToFirstPlaylistTrack,F as RedirectToFirstPlaylistTrackCheck,A as Router};
2
2
  //# sourceMappingURL=Router.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as m,Box as c,Typography as o}from"@material-ui/core";import t from"react";import{ConditionResultComponent as i}from"./ConditionResultComponent.esm.js";const p=m(e=>({container:{display:"flex",flexDirection:"row",overflow:"hidden",backgroundColor:e.palette.background.default},colorStrip:{display:"flex",alignItems:"center",justifyContent:"center",color:e.palette.common.white,fontWeight:"bold",padding:e.spacing(.5),marginRight:e.spacing(1),alignSelf:"stretch"},success:{backgroundColor:e.palette.success.main},error:{backgroundColor:e.palette.error.main},disabled:{backgroundColor:e.palette.action.disabled},subResults:{display:"flex",flexDirection:"column",paddingTop:e.spacing(1),paddingRight:e.spacing(1),paddingBottom:e.spacing(1),gap:2}})),d=(e,l)=>e===!0?l.success:e===!1?l.error:l.disabled,a=({result:e})=>{const l=p(),s=d(e.result,l);return t.createElement(c,{className:l.container},t.createElement("div",{className:`${l.colorStrip} ${s}`},"all"in e&&t.createElement(o,{variant:"body2"},"ALL"),"any"in e&&t.createElement(o,{variant:"body2"},"ANY"),"not"in e&&t.createElement(o,{variant:"body2"},"NOT")),t.createElement(c,{className:l.subResults},"all"in e&&e.all.map((n,r)=>t.createElement(t.Fragment,{key:r},"all"in n||"any"in n||"not"in n?t.createElement(a,{result:n}):t.createElement(i,{result:n}))),"any"in e&&e.any.map((n,r)=>t.createElement(t.Fragment,{key:r},"all"in n||"any"in n||"not"in n?t.createElement(a,{result:n}):t.createElement(i,{result:n}))),"not"in e&&e.not.map((n,r)=>t.createElement(t.Fragment,{key:r},"all"in n||"any"in n||"not"in n?t.createElement(a,{result:n}):t.createElement(i,{result:n})))))};export{a as BranchResultComponent};
2
+ //# sourceMappingURL=BranchResultComponent.esm.js.map
@@ -0,0 +1,2 @@
1
+ import{makeStyles as y,Box as C,Typography as s}from"@material-ui/core";import{stringifyFactRef as d}from"@spotify/backstage-plugin-soundcheck-common";import{truncate as c}from"lodash";import n from"react";import{useOperators as x}from"../../hooks/operators/useOperators.esm.js";import{useSelectedValue as S}from"../CheckDetails/SelectedValueContext.esm.js";const V=y(e=>({container:{display:"flex",alignItems:"center",paddingTop:e.spacing(1),paddingRight:e.spacing(1),paddingBottom:e.spacing(1),overflow:"hidden",backgroundColor:e.palette.background.default},colorStrip:{width:6,alignSelf:"stretch",marginTop:-e.spacing(1),marginBottom:-e.spacing(1)},success:{backgroundColor:e.palette.success.main},error:{backgroundColor:e.palette.error.main},disabled:{backgroundColor:e.palette.action.disabled},text:{marginLeft:e.spacing(1)},factButton:{marginRight:e.spacing(.5),cursor:"pointer",padding:e.spacing(.5),border:`1px solid ${e.palette.divider}`,borderRadius:e.shape.borderRadius,backgroundColor:e.palette.background.default,textDecoration:"none",color:"inherit"},valueButton:{marginLeft:e.spacing(.5),cursor:"pointer",padding:e.spacing(.5),border:`1px solid ${e.palette.divider}`,borderRadius:e.shape.borderRadius,backgroundColor:e.palette.background.default,textDecoration:"none",color:"inherit"},staticValueButton:{marginLeft:e.spacing(.5),padding:e.spacing(.5),border:`1px solid ${e.palette.divider}`,borderRadius:e.shape.borderRadius,backgroundColor:e.palette.background.default,textDecoration:"none",color:"inherit"},buttonSelected:{backgroundColor:e.palette.background.paper,"&:hover":{backgroundColor:e.palette.background.paper},"&:focus":{backgroundColor:e.palette.action.hover}},operator:{cursor:"default"}})),$=(e,t)=>e===!0?t.success:e===!1?t.error:t.disabled,B=({result:e})=>{const t=V(),p=$(e.result,t),{selectedValue:r,setSelectedValue:l}=S(),u=e.factRef===r.factRef&&e.path===r.path,f=typeof e.value=="object"&&"factRef"in e.value&&e.value.factRef===r.factRef&&e.value.path===r.path,g=()=>{const a=d(e.factRef),o=e.path??null;r.factRef===a&&r.path===o?l({factRef:null,path:null}):l({factRef:a,path:o})},b=()=>{const{value:a}=e;if(typeof a=="object"&&"factRef"in a){const o=d(a.factRef),i=a.path??null;r.factRef===o&&r.path===i?l({factRef:null,path:null}):l({factRef:o,path:i})}else l({factRef:null,path:null})},{data:m}=x(),h=m?.find(a=>a.name===e.operator)?.title?.toLowerCase()??e.operator,R=typeof e.resolvedFactValue=="string"?c(e.resolvedFactValue,{length:35}):c(JSON.stringify(e.resolvedFactValue),{length:35}),v=typeof e.resolvedValue=="string"?c(e.resolvedValue,{length:35}):c(JSON.stringify(e.resolvedValue),{length:35}),k=typeof e.value=="object"&&"factRef"in e.value;return n.createElement(C,{className:t.container},n.createElement("div",{className:`${t.colorStrip} ${p}`}),n.createElement(s,{className:t.text,variant:"body2",style:{display:"flex",alignItems:"center"}},n.createElement("button",{className:`${t.factButton} ${u?t.buttonSelected:""}`,onClick:g},R),n.createElement(s,{variant:"body2",className:t.operator,style:{fontWeight:"bold",display:"inline"}},h),n.createElement("button",{className:`${k?t.valueButton:t.staticValueButton} ${f?t.buttonSelected:""}`,onClick:b},v)))};export{B as ConditionResultComponent};
2
+ //# sourceMappingURL=ConditionResultComponent.esm.js.map
@@ -0,0 +1,2 @@
1
+ import t from"react";import{BranchResultComponent as n}from"./BranchResultComponent.esm.js";import{ConditionResultComponent as r}from"./ConditionResultComponent.esm.js";const l=({ruleResult:e})=>"all"in e&&e||"any"in e||"not"in e?t.createElement(n,{result:e}):t.createElement(r,{result:e});export{l as RuleResultComponent};
2
+ //# sourceMappingURL=RuleResultComponent.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as u,TextField as h,InputAdornment as o,IconButton as f}from"@material-ui/core";import g from"@material-ui/icons/Close";import E from"@material-ui/icons/Search";import e,{useRef as x,useEffect as B}from"react";const I=u(t=>({searchIcon:{opacity:".5"},clearButton:{height:"36px",width:"36px"},searchBar:{color:t.palette.text.primary,paddingLeft:t.spacing(1)},iconWrapper:{marginLeft:0}})),N=({searchTerm:t,setSearchTerm:c,showClear:l=!0,placeholder:s="Search...",disabled:a,...i})=>{const r=I(),n=x(null);B(()=>{!a&&n.current&&n.current.focus()},[a]);const m=d=>{c(d.target.value)},p=()=>{c("")};return e.createElement(h,{...i,disabled:a,inputRef:n,fullWidth:!0,placeholder:s,value:t,onChange:m,InputProps:{className:r.searchBar,startAdornment:e.createElement(o,{className:r.iconWrapper,position:"start"},e.createElement(E,{className:r.searchIcon,"data-testid":"search-icon"})),endAdornment:l&&t?e.createElement(o,{position:"end"},e.createElement(f,{edge:"end",onClick:p,className:r.clearButton},e.createElement(g,null))):null}})};export{N as SearchBar};
1
+ import{makeStyles as u,TextField as h,InputAdornment as o,IconButton as f}from"@material-ui/core";import g from"@material-ui/icons/Close";import E from"@material-ui/icons/Search";import e,{useRef as x,useEffect as B}from"react";const I=u(t=>({searchIcon:{opacity:".5"},clearButton:{height:"36px",width:"36px"},searchBar:{color:t.palette.text.primary,paddingLeft:t.spacing(1)},iconWrapper:{marginLeft:0}})),N=({searchTerm:t,setSearchTerm:c,showClear:l=!0,placeholder:s="Search...",disabled:a,...m})=>{const r=I(),n=x(null);B(()=>{!a&&n.current&&n.current.focus()},[a]);const i=d=>{c(d.target.value)},p=()=>{c("")};return e.createElement(h,{...m,disabled:a,inputRef:n,fullWidth:!0,placeholder:s,value:t,onChange:i,InputProps:{className:r.searchBar,startAdornment:e.createElement(o,{className:r.iconWrapper,position:"start"},e.createElement(E,{className:r.searchIcon,"data-testid":"search-icon"})),endAdornment:l&&t?e.createElement(o,{position:"end"},e.createElement(f,{edge:"end",onClick:p,className:r.clearButton},e.createElement(g,null))):null}})};export{N as SearchBar};
2
2
  //# sourceMappingURL=SearchBar.esm.js.map
@@ -1,2 +1,2 @@
1
- import{Link as n}from"@backstage/core-components";import{useRouteRef as p}from"@backstage/core-plugin-api";import{makeStyles as d,Breadcrumbs as b,Typography as s}from"@material-ui/core";import t from"react";import{useLocation as u}from"react-router-dom";import{rootRouteRef as f}from"../../routes.esm.js";const i=d(e=>({breadcrumbs:{marginBottom:e.spacing(1),color:e.page.fontColor,fontSize:e.typography.body2.fontSize},link:{color:"inherit"},endText:{fontWeight:"bold"}})),y=({pages:e})=>{const o=p(f),r=i(),m=u().pathname===o();return t.createElement(b,{className:r.breadcrumbs,"aria-label":"breadcrumb"},!!m&&t.createElement(s,{variant:"body2",className:r.endText},"Soundcheck"),!m&&t.createElement(n,{className:r.link,to:o()},"Soundcheck"),e.map(({title:c,path:a},l)=>a?t.createElement(n,{className:r.link,to:a,key:a,relative:"path"},c):t.createElement(s,{variant:"body2",className:r.endText,key:`${l}`},c)))};export{y as Breadcrumbs,i as useBreadcrumbStyles};
1
+ import{Link as s}from"@backstage/core-components";import{useRouteRef as d}from"@backstage/core-plugin-api";import{makeStyles as b,Breadcrumbs as u,Typography as n}from"@material-ui/core";import r from"react";import{useLocation as f}from"react-router-dom";import{rootRouteRef as y}from"../../routes.esm.js";const l=b(e=>({breadcrumbs:{marginBottom:e.spacing(1),color:e.page.fontColor,fontSize:e.typography.body2.fontSize},link:{color:"inherit"},endText:{fontWeight:"bold"}})),h=({pages:e,className:i=""})=>{const o=d(y),a=l(),m=f().pathname===o();return r.createElement(u,{className:`${a.breadcrumbs} ${i}`,"aria-label":"breadcrumb"},!!m&&r.createElement(n,{variant:"body2",className:a.endText},"Soundcheck"),!m&&r.createElement(s,{className:a.link,to:o()},"Soundcheck"),e.map(({title:c,path:t},p)=>t?r.createElement(s,{className:a.link,to:t,key:t,relative:"path"},c):r.createElement(n,{variant:"body2",className:a.endText,key:`${p}`},c)))};export{h as Breadcrumbs,l as useBreadcrumbStyles};
2
2
  //# sourceMappingURL=Breadcrumbs.esm.js.map
@@ -1,2 +1,2 @@
1
- import{Header as E}from"@backstage/core-components";import{useRouteRef as s}from"@backstage/core-plugin-api";import{makeStyles as k,Link as b,Typography as p,Button as S}from"@material-ui/core";import v from"@material-ui/icons/InfoOutlined";import R from"@material-ui/icons/MenuBook";import e,{useContext as y}from"react";import{useLocation as N,useNavigate as T}from"react-router-dom";import{rootRouteRef as x,quickstartRouteRef as C}from"../../routes.esm.js";import{Breadcrumbs as L}from"./Breadcrumbs.esm.js";import{generateBreadcrumbs as z}from"./headerUtil.esm.js";import{SoundcheckHeaderContext as B}from"./SoundcheckHeaderContext.esm.js";const w=k(t=>({subtitle:{maxWidth:"75%",marginTop:t.spacing(.5),whiteSpace:"pre-line"},docLink:{display:"flex",alignItems:"center",marginTop:t.spacing(.5),marginBottom:t.spacing(0),width:"fit-content",fontSize:t.typography.body2.fontSize,color:"inherit"},descriptionIcon:{marginRight:t.spacing(.25)},header:{color:t.page.fontColor},link:{},button:{textTransform:"none",marginRight:t.spacing(2),color:t.page.fontColor},icon:{paddingRight:t.spacing(1)}})),H=({documentTitle:t})=>{const{title:r,description:o,docLink:i,customSubtitle:a,sectionRight:c}=y(B),n=w(),l=N().pathname?.replace(/\/+$/,"")??"",d=z(l),u=s(x),m=l===u(),g=s(C),f=T(),h=g();return e.createElement(E,{pageTitleOverride:t,title:e.createElement(e.Fragment,null,m?e.createElement("div",null,r):e.createElement("div",null,e.createElement(L,{pages:d}),r)),subtitle:e.createElement("div",{className:n.header},i&&e.createElement(b,{target:"_blank",href:i,className:n.docLink},e.createElement(v,{className:n.descriptionIcon,fontSize:"inherit"}),"Documentation"),!!a&&e.createElement("div",null,a),typeof o=="string"?e.createElement(p,{className:n.subtitle,variant:"body2",color:"inherit"},o):e.createElement("div",null,o))},m&&e.createElement(S,{className:n.button,onClick:()=>f(h),color:"inherit",variant:"outlined"},e.createElement(R,{className:n.icon}),e.createElement(p,null,"Get Started with Soundcheck")),!!c&&e.createElement("div",null,c))};export{H as SoundcheckHeader};
1
+ import{Header as b}from"@backstage/core-components";import{useRouteRef as s}from"@backstage/core-plugin-api";import{makeStyles as E,Link as k,Typography as d,Button as N}from"@material-ui/core";import S from"@material-ui/icons/InfoOutlined";import v from"@material-ui/icons/MenuBook";import e,{useContext as R}from"react";import{useLocation as y,useNavigate as C}from"react-router-dom";import{rootRouteRef as x,quickstartRouteRef as T}from"../../routes.esm.js";import{Breadcrumbs as L}from"./Breadcrumbs.esm.js";import{generateBreadcrumbs as z}from"./headerUtil.esm.js";import{SoundcheckHeaderContext as B}from"./SoundcheckHeaderContext.esm.js";const H=E(t=>({subtitle:{maxWidth:"75%",marginTop:t.spacing(.5),whiteSpace:"pre-line"},docLink:{display:"flex",alignItems:"center",marginTop:t.spacing(.5),marginBottom:t.spacing(0),width:"fit-content",fontSize:t.typography.body2.fontSize,color:"inherit"},descriptionIcon:{marginRight:t.spacing(.25)},headerContent:{color:t.page.fontColor},link:{},button:{textTransform:"none",marginRight:t.spacing(2),color:t.page.fontColor},icon:{paddingRight:t.spacing(1)},title:{},breadcrumbs:{}}),{name:"SoundcheckHeader"}),w=({documentTitle:t})=>{const{title:o,description:r,docLink:i,customSubtitle:a,sectionRight:c}=R(B),n=H(),m=y().pathname?.replace(/\/+$/,"")??"",p=z(m),u=s(x),l=m===u(),g=s(T),f=C(),h=g();return e.createElement(b,{pageTitleOverride:t,title:e.createElement(e.Fragment,null,l?e.createElement("div",{className:n.title},o):e.createElement("div",{className:n.title},e.createElement(L,{className:n.breadcrumbs,pages:p}),o)),subtitle:e.createElement("div",{className:n.headerContent},i&&e.createElement(k,{target:"_blank",href:i,className:n.docLink},e.createElement(S,{className:n.descriptionIcon,fontSize:"inherit"}),"Documentation"),!!a&&e.createElement("div",null,a),typeof r=="string"?e.createElement(d,{className:n.subtitle,variant:"body2",color:"inherit"},r):e.createElement("div",null,r))},l&&e.createElement(N,{className:n.button,onClick:()=>f(h),color:"inherit",variant:"outlined"},e.createElement(v,{className:n.icon}),e.createElement(d,null,"Get Started with Soundcheck")),!!c&&e.createElement("div",null,c))};export{w as SoundcheckHeader};
2
2
  //# sourceMappingURL=SoundcheckHeader.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as I,IconButton as f,Menu as y,MenuItem as m,ListItemIcon as l,ListItemText as o}from"@material-ui/core";import S from"@material-ui/icons/Archive";import z from"@material-ui/icons/Delete";import g from"@material-ui/icons/Edit";import C from"@material-ui/icons/MoreVert";import N from"@material-ui/icons/OpenInBrowser";import k from"@material-ui/icons/SaveAlt";import e,{useState as v}from"react";const x=I(n=>({menuList:{backgroundColor:n.palette.background.paper,color:n.palette.text.primary},menuIcon:{color:n.palette.text.primary},menuIconSize:{minWidth:n.spacing(4)}})),b=({handleDelete:n,handleArchive:i,handleView:s,handleEdit:u,handleExport:d})=>{const a=x(),[p,E]=v(null),c=!!p,h=t=>{t.stopPropagation(),E(t.currentTarget)},r=t=>{t.stopPropagation(),E(null)};return e.createElement(e.Fragment,null,e.createElement(f,{"aria-label":"summary-card-actions",id:"summary-card-action-menu-button","aria-controls":c?"summary-card-action-menu":void 0,"aria-expanded":c?"true":void 0,"aria-haspopup":"true",onClick:h},e.createElement(C,null)),e.createElement(y,{id:"summary-card-action-menu",anchorEl:p,open:c,onClose:r,getContentAnchorEl:null,anchorOrigin:{vertical:"bottom",horizontal:"center"},transformOrigin:{vertical:"top",horizontal:"right"},MenuListProps:{"aria-labelledby":"summary-card-action-menu-button",className:a.menuList}},s&&e.createElement(m,{"data-testid":"summary-card-action-view",onClick:t=>{s(t),r(t)}},e.createElement(l,{className:a.menuIconSize},e.createElement(N,{fontSize:"small",color:"inherit",className:a.menuIcon})),e.createElement(o,null,"View")),u&&e.createElement(m,{"data-testid":"summary-card-action-edit",onClick:t=>{u(t),r(t)}},e.createElement(l,{className:a.menuIconSize},e.createElement(g,{fontSize:"small",color:"inherit",className:a.menuIcon})),e.createElement(o,null,"Edit")),d&&e.createElement(m,{"data-testid":"summary-card-action-export",onClick:t=>{d(t),r(t)}},e.createElement(l,{className:a.menuIconSize},e.createElement(k,{fontSize:"small",color:"inherit",className:a.menuIcon})),e.createElement(o,null,"Export")),i&&e.createElement(m,{"data-testid":"summary-card-action-archive",onClick:t=>{i(t),r(t)}},e.createElement(l,{className:a.menuIconSize},e.createElement(S,{fontSize:"small",color:"inherit",className:a.menuIcon})),e.createElement(o,null,"Archive")),n&&e.createElement(m,{"data-testid":"summary-card-action-delete",onClick:t=>{n(t),r(t)}},e.createElement(l,{className:a.menuIconSize},e.createElement(z,{fontSize:"small",color:"inherit",className:a.menuIcon})),e.createElement(o,null,"Delete"))))};export{b as SummaryCardActionsMenu};
1
+ import{makeStyles as I,IconButton as y,Menu as S,MenuItem as m,ListItemIcon as l,ListItemText as o}from"@material-ui/core";import f from"@material-ui/icons/Archive";import z from"@material-ui/icons/Delete";import g from"@material-ui/icons/Edit";import C from"@material-ui/icons/MoreVert";import N from"@material-ui/icons/OpenInBrowser";import k from"@material-ui/icons/SaveAlt";import e,{useState as v}from"react";const x=I(n=>({menuList:{backgroundColor:n.palette.background.paper,color:n.palette.text.primary},menuIcon:{color:n.palette.text.primary},menuIconSize:{minWidth:n.spacing(4)}})),b=({handleDelete:n,handleArchive:i,handleView:s,handleEdit:u,handleExport:d})=>{const a=x(),[p,E]=v(null),c=!!p,h=t=>{t.stopPropagation(),E(t.currentTarget)},r=t=>{t.stopPropagation(),E(null)};return e.createElement(e.Fragment,null,e.createElement(y,{"aria-label":"summary-card-actions",id:"summary-card-action-menu-button","aria-controls":c?"summary-card-action-menu":void 0,"aria-expanded":c?"true":void 0,"aria-haspopup":"true",onClick:h},e.createElement(C,null)),e.createElement(S,{id:"summary-card-action-menu",anchorEl:p,open:c,onClose:r,getContentAnchorEl:null,anchorOrigin:{vertical:"bottom",horizontal:"center"},transformOrigin:{vertical:"top",horizontal:"right"},MenuListProps:{"aria-labelledby":"summary-card-action-menu-button",className:a.menuList}},s&&e.createElement(m,{"data-testid":"summary-card-action-view",onClick:t=>{s(t),r(t)}},e.createElement(l,{className:a.menuIconSize},e.createElement(N,{fontSize:"small",color:"inherit",className:a.menuIcon})),e.createElement(o,null,"View")),u&&e.createElement(m,{"data-testid":"summary-card-action-edit",onClick:t=>{u(t),r(t)}},e.createElement(l,{className:a.menuIconSize},e.createElement(g,{fontSize:"small",color:"inherit",className:a.menuIcon})),e.createElement(o,null,"Edit")),d&&e.createElement(m,{"data-testid":"summary-card-action-export",onClick:t=>{d(t),r(t)}},e.createElement(l,{className:a.menuIconSize},e.createElement(k,{fontSize:"small",color:"inherit",className:a.menuIcon})),e.createElement(o,null,"Export")),i&&e.createElement(m,{"data-testid":"summary-card-action-archive",onClick:t=>{i(t),r(t)}},e.createElement(l,{className:a.menuIconSize},e.createElement(f,{fontSize:"small",color:"inherit",className:a.menuIcon})),e.createElement(o,null,"Archive")),n&&e.createElement(m,{"data-testid":"summary-card-action-delete",onClick:t=>{n(t),r(t)}},e.createElement(l,{className:a.menuIconSize},e.createElement(z,{fontSize:"small",color:"inherit",className:a.menuIcon})),e.createElement(o,null,"Delete"))))};export{b as SummaryCardActionsMenu};
2
2
  //# sourceMappingURL=SummaryCardActionsMenu.esm.js.map
@@ -1,2 +1,2 @@
1
- import{makeStyles as F,alpha as w,Box as i,Typography as z,Tooltip as L,Icon as T,IconButton as N,Chip as O,TextField as D,FormControlLabel as V,Checkbox as j}from"@material-ui/core";import B from"@material-ui/icons/ArrowDropDown";import $ from"@material-ui/icons/ArrowDropUp";import A from"@material-ui/icons/CheckBox";import H from"@material-ui/icons/CheckBoxOutlineBlank";import K from"@material-ui/icons/HelpOutline";import{Autocomplete as W}from"@material-ui/lab";import{remove as q}from"lodash";import l,{useState as p,useEffect as J,useCallback as y,useMemo as M}from"react";import P from"../../Expand/Expand.esm.js";import{ListboxVirtualized as G}from"../../ListboxVirtualized/ListboxVirtualized.esm.js";import{useFilterContext as Q}from"./FilterProvider.esm.js";import{Facet as x,facetTooltips as C}from"./types.esm.js";const R=F(({palette:t,spacing:n})=>({header:{display:"flex",alignItems:"left",flexDirection:"row",cursor:"pointer",justifyContent:"space-between"},label:{display:"flex",alignItems:"center"},tooltipIcon:{display:"flex",alignItems:"center",justifyContent:"center",color:t.text.primary},chip:{maxWidth:"45%",textOverflow:"ellipsis",margin:n(.5,.5,.5,0),overflow:"hidden","& svg":{color:w(t.common.white,.7),"&:hover":{color:t.common.white}},backgroundColor:t.action.disabledBackground},autoCompleteInput:{"&& input":{margin:n(1,0,0,0),padding:`${n(0,1,1,1)} !important`,width:"100%",display:"flex",alignItems:"center",justifyContent:"center"},"&& button":{"&:hover":{backgroundColor:"transparent"}}},autoComplete:{margin:n(.5,0,1,0)},selectionLabel:{lineHeight:"1em"}})),U=({facet:t})=>{const n=R(),{getFacetOptions:k,getFacetOptionLabel:c,getSelectedFacetValues:a,setSelectedFacetValues:u}=Q(),[f,d]=p(!1),[v,h]=p(!1),[I,b]=p("");J(()=>{d(!!a(t)?.length)},[a,t]);const g=()=>{d(e=>!e)},E=e=>{(e.key==="Enter"||e.key===" ")&&g()},m=y(e=>{if(t===x.Entity&&e[e.length-1]){const o=e[e.length-1];if(!o.includes(":")||!o.includes("/")){h(!0),b("Custom entities require a valid kind and namespace such as: component:default/entity");return}}h(!1),b(""),u(t,e)},[t,u]),r=M(()=>a(t),[t,a]),S=y(e=>{const o=[...r];q(o,s=>s===e),m(o)},[r,m]);return l.createElement(i,null,l.createElement("div",{className:n.header,onClick:g,onKeyDown:E,role:"button",tabIndex:0},l.createElement("div",{className:n.label},l.createElement(i,null,l.createElement(z,{variant:"subtitle2"},t)),C[t]&&l.createElement(L,{title:C[t],className:n.tooltipIcon},l.createElement(T,null,l.createElement(K,{style:{fontSize:16,verticalAlign:"text-top"}})))),l.createElement(i,null,l.createElement(N,{size:"small",onKeyDown:E},f?l.createElement($,{fontSize:"small"}):l.createElement(B,{fontSize:"small"})))),l.createElement(P,{visible:f},l.createElement(i,null,r.map(e=>l.createElement(O,{key:e,label:c(t,e),size:"small",className:n.chip,onDelete:()=>S(e),clickable:!1}))),l.createElement(W,{className:n.autoComplete,disableCloseOnSelect:!0,fullWidth:!0,multiple:!0,freeSolo:t===x.Entity,popupIcon:null,renderTags:()=>null,options:k(t),getOptionLabel:e=>c(t,e),value:r,onChange:(e,o)=>m(o),ListboxComponent:G,ListboxProps:{itemHeight:50},renderInput:e=>l.createElement(D,{...e,className:n.autoCompleteInput,placeholder:`Search for ${t}`,error:v,helperText:I}),renderOption:(e,{selected:o})=>l.createElement(V,{onClick:s=>s.preventDefault(),control:l.createElement(j,{icon:l.createElement(H,{fontSize:"small"}),checkedIcon:l.createElement(A,{fontSize:"small"}),checked:o}),classes:{label:n.selectionLabel},label:c(t,e)})})))};export{U as FacetFilter};
1
+ import{makeStyles as F,alpha as w,Box as i,Typography as z,Tooltip as L,Icon as N,IconButton as T,Chip as O,TextField as D,FormControlLabel as V,Checkbox as j}from"@material-ui/core";import B from"@material-ui/icons/ArrowDropDown";import A from"@material-ui/icons/ArrowDropUp";import H from"@material-ui/icons/CheckBox";import K from"@material-ui/icons/CheckBoxOutlineBlank";import W from"@material-ui/icons/HelpOutline";import{Autocomplete as $}from"@material-ui/lab";import{remove as q}from"lodash";import l,{useState as p,useEffect as J,useCallback as y,useMemo as M}from"react";import P from"../../Expand/Expand.esm.js";import{ListboxVirtualized as G}from"../../ListboxVirtualized/ListboxVirtualized.esm.js";import{useFilterContext as Q}from"./FilterProvider.esm.js";import{Facet as x,facetTooltips as C}from"./types.esm.js";const R=F(({palette:t,spacing:n})=>({header:{display:"flex",alignItems:"left",flexDirection:"row",cursor:"pointer",justifyContent:"space-between"},label:{display:"flex",alignItems:"center"},tooltipIcon:{display:"flex",alignItems:"center",justifyContent:"center",color:t.text.primary},chip:{maxWidth:"45%",textOverflow:"ellipsis",margin:n(.5,.5,.5,0),overflow:"hidden","& svg":{color:w(t.common.white,.7),"&:hover":{color:t.common.white}},backgroundColor:t.action.disabledBackground},autoCompleteInput:{"&& input":{margin:n(1,0,0,0),padding:`${n(0,1,1,1)} !important`,width:"100%",display:"flex",alignItems:"center",justifyContent:"center"},"&& button":{"&:hover":{backgroundColor:"transparent"}}},autoComplete:{margin:n(.5,0,1,0)},selectionLabel:{lineHeight:"1em"}})),U=({facet:t})=>{const n=R(),{getFacetOptions:k,getFacetOptionLabel:c,getSelectedFacetValues:a,setSelectedFacetValues:u}=Q(),[f,d]=p(!1),[v,h]=p(!1),[I,b]=p("");J(()=>{d(!!a(t)?.length)},[a,t]);const g=()=>{d(e=>!e)},E=e=>{(e.key==="Enter"||e.key===" ")&&g()},m=y(e=>{if(t===x.Entity&&e[e.length-1]){const o=e[e.length-1];if(!o.includes(":")||!o.includes("/")){h(!0),b("Custom entities require a valid kind and namespace such as: component:default/entity");return}}h(!1),b(""),u(t,e)},[t,u]),r=M(()=>a(t),[t,a]),S=y(e=>{const o=[...r];q(o,s=>s===e),m(o)},[r,m]);return l.createElement(i,null,l.createElement("div",{className:n.header,onClick:g,onKeyDown:E,role:"button",tabIndex:0},l.createElement("div",{className:n.label},l.createElement(i,null,l.createElement(z,{variant:"subtitle2"},t)),C[t]&&l.createElement(L,{title:C[t],className:n.tooltipIcon},l.createElement(N,null,l.createElement(W,{style:{fontSize:16,verticalAlign:"text-top"}})))),l.createElement(i,null,l.createElement(T,{size:"small",onKeyDown:E},f?l.createElement(A,{fontSize:"small"}):l.createElement(B,{fontSize:"small"})))),l.createElement(P,{visible:f},l.createElement(i,null,r.map(e=>l.createElement(O,{key:e,label:c(t,e),size:"small",className:n.chip,onDelete:()=>S(e),clickable:!1}))),l.createElement($,{className:n.autoComplete,disableCloseOnSelect:!0,fullWidth:!0,multiple:!0,freeSolo:t===x.Entity,popupIcon:null,renderTags:()=>null,options:k(t),getOptionLabel:e=>c(t,e),value:r,onChange:(e,o)=>m(o),ListboxComponent:G,ListboxProps:{itemHeight:50},renderInput:e=>l.createElement(D,{...e,className:n.autoCompleteInput,placeholder:`Search for ${t}`,error:v,helperText:I}),renderOption:(e,{selected:o})=>l.createElement(V,{onClick:s=>s.preventDefault(),control:l.createElement(j,{icon:l.createElement(K,{fontSize:"small"}),checkedIcon:l.createElement(H,{fontSize:"small"}),checked:o}),classes:{label:n.selectionLabel},label:c(t,e)})})))};export{U as FacetFilter};
2
2
  //# sourceMappingURL=FacetFilter.esm.js.map
@@ -1,2 +1,2 @@
1
- import l,{useEffect as e,useCallback as f}from"react";import{useTrackFormContext as E}from"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as g}from"../../hooks/useNavigateBack.esm.js";import{useUpdateTrack as y}from"../../hooks/tracks/useUpdateTrack.esm.js";import{tracksPageRouteRef as h}from"../../routes.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as T}from"../SoundcheckHeader/useHeader.esm.js";import{TrackForm as w}from"../TrackForm/TrackForm.esm.js";const b=({track:t,canEdit:p})=>{const{setSelectedItem:i,setIsLoading:m,selectedItem:n,showReadOnly:r}=E(),{mutateAsync:c,isLoading:s}=y();e(()=>m(s),[m,s]);const o=!p||!t.isEditable;e(()=>{o?r(t):i(t)},[t,i,o,r]);const[d,a]=g(h),k=f(async u=>{await c(u,{onSuccess:a})},[a,c]);return e(()=>{},[t,r,o]),T({title:`${o?"View":"Edit"} Track`,description:"Edit your track's details to match your needs.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tracks"}),n?l.createElement(w,{handleClose:d,onSave:k}):null};export{b as TrackEditView};
1
+ import l,{useEffect as e,useCallback as f}from"react";import{useTrackFormContext as E}from"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../api.esm.js";import"../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../hooks/useSoundcheckAlert.esm.js";import"../../hooks/useConfirmationModal.esm.js";import{useNavigateBack as g}from"../../hooks/useNavigateBack.esm.js";import{useUpdateTrack as y}from"../../hooks/tracks/useUpdateTrack.esm.js";import{tracksPageRouteRef as h}from"../../routes.esm.js";import"../SoundcheckHeader/SoundcheckHeader.esm.js";import"../SoundcheckHeader/SoundcheckHeaderContext.esm.js";import{useHeader as T}from"../SoundcheckHeader/useHeader.esm.js";import{TrackForm as w}from"../TrackForm/TrackForm.esm.js";const b=({track:t,canEdit:p})=>{const{setSelectedItem:i,setIsLoading:m,selectedItem:n,showReadOnly:r}=E(),{mutateAsync:s,isLoading:c}=y();e(()=>m(c),[m,c]);const o=!p||!t.isEditable;e(()=>{o?r(t):i(t)},[t,i,o,r]);const[d,a]=g(h),k=f(async u=>{await s(u,{onSuccess:a})},[a,s]);return e(()=>{},[t,r,o]),T({title:`${o?"View":"Edit"} Track`,description:"Edit your track's details to match your needs.",docLink:"https://backstage.spotify.com/docs/plugins/soundcheck/core-concepts/tracks"}),n?l.createElement(w,{handleClose:d,onSave:k}):null};export{b as TrackEditView};
2
2
  //# sourceMappingURL=TrackEditView.esm.js.map
@@ -1,2 +1,2 @@
1
- import{Content as f}from"@backstage/core-components";import e from"react";import{DndProvider as S}from"react-dnd";import{HTML5Backend as b}from"react-dnd-html5-backend";import{FormProvider as h}from"react-hook-form";import{useTrackFormContext as k}from"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{formStyles as u}from"../../utils/formStyles.esm.js";import{FormFilterSection as g}from"../FormFilterSection/FormFilterSection.esm.js";import{FormStepper as E}from"../FormStepper/FormStepper.esm.js";import{LevelsStep as T}from"./Steps/LevelsStep/LevelsStep.esm.js";import{TrackDetailsStep as C}from"./Steps/TrackDetailsStep/TrackDetailsStep.esm.js";import{TrackStepNameMapping as F}from"./utils/types.esm.js";import"./utils/validation.esm.js";import{TRACK_FIELDS as v}from"./utils/trackFormUtils.esm.js";import{useTrackForm as L}from"./utils/useTrackForm.esm.js";const y=({onSave:i,handleClose:n})=>{const{selectedItem:a,isLoading:l,isReadOnly:r}=k(),p=u(),{formMethods:t,onSubmit:o,selectableChips:s,checksLoading:c}=L(i),m=[{label:"Enter track details",content:()=>e.createElement(C,null)},{label:"Add levels",content:()=>e.createElement(T,{selectableChips:s,checksLoading:c})},{label:"Choose the affected entities (Optional)",content:()=>e.createElement(g,{name:"filtersStep.filter",control:t.control,disabled:r,description:v.filter.description})}],d=a?[...Array(m.length).keys()]:[0];return e.createElement(S,{backend:b},e.createElement(f,{className:p.formWrapper},e.createElement(h,{...t},e.createElement("form",{onSubmit:t.handleSubmit(o)},e.createElement(E,{onClose:n,handleSubmit:t.handleSubmit,trigger:t.trigger,onSubmit:o,initialVisited:d,stepNameMap:F,steps:m,isLoading:l,isReadOnly:r,saveButtonText:"Save Track"})))))};export{y as TrackForm};
1
+ import{Content as f}from"@backstage/core-components";import e from"react";import{DndProvider as u}from"react-dnd";import{HTML5Backend as S}from"react-dnd-html5-backend";import{FormProvider as k}from"react-hook-form";import{useTrackFormContext as F}from"../../contexts/TrackFormContext.esm.js";import"../../contexts/CheckFormContext.esm.js";import"../../contexts/CampaignFormContext.esm.js";import"../../contexts/UserProvider.esm.js";import{formStyles as b}from"../../utils/formStyles.esm.js";import{FormFilterSection as h}from"../FormFilterSection/FormFilterSection.esm.js";import{FormStepper as g}from"../FormStepper/FormStepper.esm.js";import{LevelsStep as E}from"./Steps/LevelsStep/LevelsStep.esm.js";import{TrackDetailsStep as y}from"./Steps/TrackDetailsStep/TrackDetailsStep.esm.js";import{TrackStepNameMapping as T}from"./utils/types.esm.js";import"./utils/validation.esm.js";import{TRACK_FIELDS as C}from"./utils/trackFormUtils.esm.js";import{useTrackForm as v}from"./utils/useTrackForm.esm.js";const x=({onSave:m,handleClose:l})=>{const{selectedItem:a,isLoading:n,isReadOnly:r}=F(),p=b(),{formMethods:t,onSubmit:o,selectableChips:s,checksLoading:c}=v(m),i=[{label:"Enter track details",content:()=>e.createElement(y,null)},{label:"Add levels",content:()=>e.createElement(E,{selectableChips:s,checksLoading:c})},{label:"Choose the affected entities (Optional)",content:()=>e.createElement(h,{name:"filtersStep.filter",keyValueFilterName:"filtersStep.keyValueFilter",disabled:r,description:C.filter.description,excludeFilterName:"filtersStep.excludeFilter",excludeKeyValueFilterName:"filtersStep.excludeKeyValueFilter"})}],d=a?[...Array(i.length).keys()]:[0];return e.createElement(u,{backend:S},e.createElement(f,{className:p.formWrapper},e.createElement(k,{...t},e.createElement("form",{onSubmit:t.handleSubmit(o)},e.createElement(g,{onClose:l,handleSubmit:t.handleSubmit,trigger:t.trigger,onSubmit:o,initialVisited:d,stepNameMap:T,steps:i,isLoading:n,isReadOnly:r,saveButtonText:"Save Track"})))))};export{x as TrackForm};
2
2
  //# sourceMappingURL=TrackForm.esm.js.map
@@ -1,2 +1,3 @@
1
- const e={name:{name:"Track name",helperText:"Max 100 characters",placeholder:"Example: Github Best Practices"},description:{name:"Track description",placeholder:"Example: Improve collaboration, maintain high code quality, and streamline development workflows on GitHub"},documentationURL:{name:"Documentation URL (Optional)",placeholder:"Example: https://docs.example.com"},owner:{name:"Track owner",description:"Assign yourself or your team as the owner of this track. Defaults to current user."},levels:{label:"Track Levels",description:"This is where you will add the checks for each level. You can preview the checks to see the rules that apply to each check."},filter:{description:"Use the filters below to narrow the scope of the Track. Only Entities that match the selected filters will be monitored. For example, selecting 'Kind' as 'Component' will ensure that this Check only applies to Entities categorized as 'Component,' excluding others like Groups, Users, and APIs."}};export{e as TRACK_FIELDS};
1
+ const e={name:{name:"Track name",helperText:"Max 100 characters",placeholder:"Example: Github Best Practices"},description:{name:"Track description",placeholder:"Example: Improve collaboration, maintain high code quality, and streamline development workflows on GitHub"},documentationURL:{name:"Documentation URL (Optional)",placeholder:"Example: https://docs.example.com"},owner:{name:"Track owner",description:"Assign yourself or your team as the owner of this track. Defaults to current user."},levels:{label:"Track Levels",description:"This is where you will add the checks for each level. You can preview the checks to see the rules that apply to each check."},filter:{description:`Use the filters below to narrow the scope of the Track. Only Entities that match the selected include and exclude filters will be monitored. Exclude filters must be used with with an include filter.
2
+ For example, selecting an include filter of 'Kind' as 'Component' and an exclude filter of 'Type' as 'Service' will select all entities with kind Component where type is NOT Service.`}};export{e as TRACK_FIELDS};
2
3
  //# sourceMappingURL=trackFormUtils.esm.js.map
@@ -1,2 +1,2 @@
1
- import{zodResolver as S}from"@hookform/resolvers/zod";import{useMemo as v,useEffect as h}from"react";import{useForm as k}from"react-hook-form";import{v4 as y}from"uuid";import{useTrackFormContext as g}from"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import{useLoggedInUser as R}from"../../../contexts/UserProvider.esm.js";import{BadgeVariant as T}from"../../../graphql/generated/index.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as w}from"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{useGetChecksMap as F}from"../../../hooks/tracks/useGetChecksMap.esm.js";import{mapInputFilterToFormFilters as L,mapFiltersToCatalogFilter as E}from"../../Filter/utils.esm.js";import"../../Filter/FilterComponent.esm.js";import{trackFormSchema as C}from"./validation.esm.js";const d={detailsStep:{name:"",description:"",ownerEntityRef:"",badgeType:"medal"},levelsStep:{levels:[{name:"Level 1",description:"",checks:[]}]},filtersStep:{}},M=({name:e,description:o,ownerEntityRef:r,filter:t,levels:i,documentationURL:p,badge:n})=>({detailsStep:{name:e,ownerEntityRef:r,description:o??"",documentationURL:p??void 0,badgeType:n?.variant===T.Status?"status":"medal"},levelsStep:{levels:i?.map(s=>({name:s.name??`Level ${s.ordinal}`??"Level 1",description:s.description??"",checks:s.checks.map(a=>({id:a.id,name:a.name??a.id,description:a.description??""}))}))||[]},filtersStep:{filter:L(t)}}),c=(e,o,r)=>({id:r?.id??y(),ownerEntityRef:e.detailsStep.ownerEntityRef,description:e.detailsStep.description,name:e.detailsStep.name,documentationURL:e.detailsStep.documentationURL??"",badgeType:e.detailsStep.badgeType,type:r?.type??"standard",levels:e.levelsStep.levels?.map((t,i)=>({ordinal:i+1,name:t.name??"",description:t.description??"",checks:t.checks.map(p=>o[p.id])})),filter:E(e.filtersStep.filter)}),b=e=>{const{selectedItem:o}=g(),r=v(()=>o?M(o):d,[o]),t=k({defaultValues:r,mode:"onChange",resolver:S(C)}),{userEntityRef:i}=R();h(()=>{!o&&i&&!t.getValues("detailsStep.ownerEntityRef")&&t.setValue("detailsStep.ownerEntityRef",i)},[o,i,t]);const{checkChips:p,checksLoading:n,checksMap:s}=F(),a=new Set(t.getValues("levelsStep.levels").flatMap(m=>m.checks.map(l=>l.id))),f=p.filter(m=>!a.has(m.id)),{showModal:u}=w();return{formMethods:t,onSubmit:async m=>{if(!await u({title:"Save Track",message:`Are you sure you want to save track: ${m.detailsStep.name}?`,error:!1}))return;const l=c(m,s??{},o);e(l)},selectableChips:f,checksLoading:n}};export{d as DEFAULT_TRACK_FORM_VALUES,c as mapTrackFormToInput,b as useTrackForm};
1
+ import{zodResolver as T}from"@hookform/resolvers/zod";import{useMemo as g,useEffect as R}from"react";import{useForm as V}from"react-hook-form";import{v4 as L}from"uuid";import{useTrackFormContext as w}from"../../../contexts/TrackFormContext.esm.js";import"../../../contexts/CheckFormContext.esm.js";import"../../../contexts/CampaignFormContext.esm.js";import{useLoggedInUser as E}from"../../../contexts/UserProvider.esm.js";import{BadgeVariant as x}from"../../../graphql/generated/index.esm.js";import"@backstage/catalog-model";import"@backstage/core-plugin-api";import"@tanstack/react-query";import"../../../api.esm.js";import"../../../hooks/graphqlKeys.esm.js";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-soundcheck-common";import"../../../hooks/useSoundcheckAlert.esm.js";import{useConfirmationModal as C}from"../../../hooks/useConfirmationModal.esm.js";import"react-router-dom";import{useGetChecksMap as M}from"../../../hooks/tracks/useGetChecksMap.esm.js";import{mapInputFilterToFormFilters as c,mapCatalogFilterToFormKeyValueFilters as u,mapFiltersToCatalogFilter as f}from"../../Filter/utils.esm.js";import"../../Filter/FilterComponent.esm.js";import{emptyFilters as y,emptyKeyValueFilters as F}from"../../Filter/types.esm.js";import{trackFormSchema as b}from"./validation.esm.js";const S={detailsStep:{name:"",description:"",ownerEntityRef:"",badgeType:"medal"},levelsStep:{levels:[{name:"Level 1",description:"",checks:[]}]},filtersStep:{filter:y(),keyValueFilter:F(),excludeFilter:y(),excludeKeyValueFilter:F()}},k=({name:e,description:i,ownerEntityRef:o,filter:t,levels:r,documentationURL:m,badge:n,exclude:p})=>({detailsStep:{name:e,ownerEntityRef:o,description:i??"",documentationURL:m??void 0,badgeType:n?.variant===x.Status?"status":"medal"},levelsStep:{levels:r?.map(a=>({name:a.name??`Level ${a.ordinal}`??"Level 1",description:a.description??"",checks:a.checks.map(l=>({id:l.id,name:l.name??l.id,description:l.description??""}))}))||[]},filtersStep:{filter:c(t),keyValueFilter:u(t),excludeFilter:c(p),excludeKeyValueFilter:u(p)}}),v=(e,i,o)=>({id:o?.id??L(),ownerEntityRef:e.detailsStep.ownerEntityRef,description:e.detailsStep.description,name:e.detailsStep.name,documentationURL:e.detailsStep.documentationURL??"",badgeType:e.detailsStep.badgeType,type:o?.type??"standard",levels:e.levelsStep.levels?.map((t,r)=>({ordinal:r+1,name:t.name??"",description:t.description??"",checks:t.checks.map(m=>i[m.id])})),filter:f(e.filtersStep.filter,e.filtersStep.keyValueFilter),exclude:f(e.filtersStep.excludeFilter,e.filtersStep.excludeKeyValueFilter)}),U=e=>{const{selectedItem:i}=w(),o=g(()=>i?k(i):S,[i]),t=V({defaultValues:o,mode:"onChange",resolver:T(b)}),{userEntityRef:r}=E();R(()=>{!i&&r&&!t.getValues("detailsStep.ownerEntityRef")&&t.setValue("detailsStep.ownerEntityRef",r)},[i,r,t]);const{checkChips:m,checksLoading:n,checksMap:p}=M(),a=new Set(t.getValues("levelsStep.levels").flatMap(s=>s.checks.map(d=>d.id))),l=m.filter(s=>!a.has(s.id)),{showModal:h}=C();return{formMethods:t,onSubmit:async s=>{if(!await h({title:"Save Track",message:`Are you sure you want to save track: ${s.detailsStep.name}?`,error:!1}))return;const d=v(s,p??{},i);e(d)},selectableChips:l,checksLoading:n}};export{S as DEFAULT_TRACK_FORM_VALUES,v as mapTrackFormToInput,k as mapTrackToFormValues,U as useTrackForm};
2
2
  //# sourceMappingURL=useTrackForm.esm.js.map
@@ -1,2 +1,2 @@
1
- import{LevelDetailsSchema as e,TrackDetailsSchema as r}from"@spotify/backstage-plugin-soundcheck-common";import{z as t}from"zod";import{FiltersSchema as i,CHECK_IS_REQUIRED_MSG as c}from"../../../utils/validation.esm.js";const s=t.strictObject({filter:i.optional()}),a=t.strictObject({levels:t.array(e).min(1,c)}),l=t.strictObject({detailsStep:r,levelsStep:a,filtersStep:s});export{l as trackFormSchema};
1
+ import{LevelDetailsSchema as t,TrackDetailsSchema as r}from"@spotify/backstage-plugin-soundcheck-common";import{z as e}from"zod";import{CHECK_IS_REQUIRED_MSG as m,formFiltersSchema as a}from"../../../utils/validation.esm.js";const c=e.strictObject({levels:e.array(t).min(1,m)}),i=e.strictObject({detailsStep:r,levelsStep:c,filtersStep:a});export{i as trackFormSchema};
2
2
  //# sourceMappingURL=validation.esm.js.map
@@ -1,2 +1,2 @@
1
- import{RELATION_PART_OF as m,RELATION_OWNED_BY as u,stringifyEntityRef as y}from"@backstage/catalog-model";import{getEntityRelations as d,humanizeEntityRef as a}from"@backstage/plugin-catalog-react";import f from"lodash";function p(e){return Object.keys(e).filter(t=>!["notApplicable","numberOfEntities","ordinal"].includes(t)&&typeof f.get(e,t,0)=="number").reduce((t,i)=>t+f.get(e,i,0),0)}function c(e){const{trackDetails:t,track:i,entity:n}=e,r=d(n,m,{kind:"system"}),s=d(n,u),l=y(n);return{id:l,entity:n,badge:t.badge??void 0,track:i,status:t.status,resolved:{name:a(n,{defaultKind:"Component"}),entityRef:l,ownedByRelationsTitle:s.map(o=>a(o,{defaultKind:"group"})).join(", "),ownedByRelations:s,partOfSystemRelationTitle:r.map(o=>a(o,{defaultKind:"system"})).join(", "),partOfSystemRelations:r}}}export{p as getApplicableCheckCount,c as toTrackEntityRow};
1
+ import{RELATION_PART_OF as m,RELATION_OWNED_BY as u,stringifyEntityRef as y}from"@backstage/catalog-model";import{getEntityRelations as d,humanizeEntityRef as a}from"@backstage/plugin-catalog-react";import f from"lodash";function c(e){return Object.keys(e).filter(t=>!["allPassPercentage","notApplicable","numberOfEntities","ordinal"].includes(t)&&typeof f.get(e,t,0)=="number").reduce((t,i)=>t+f.get(e,i,0),0)}function p(e){const{trackDetails:t,track:i,entity:n}=e,r=d(n,m,{kind:"system"}),s=d(n,u),l=y(n);return{id:l,entity:n,badge:t.badge??void 0,track:i,status:t.status,resolved:{name:a(n,{defaultKind:"Component"}),entityRef:l,ownedByRelationsTitle:s.map(o=>a(o,{defaultKind:"group"})).join(", "),ownedByRelations:s,partOfSystemRelationTitle:r.map(o=>a(o,{defaultKind:"system"})).join(", "),partOfSystemRelations:r}}}export{c as getApplicableCheckCount,p as toTrackEntityRow};
2
2
  //# sourceMappingURL=utils.esm.js.map