@spotify/backstage-plugin-soundcheck 0.6.2 → 0.7.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.
@@ -0,0 +1,2 @@
1
+ import t,{useState as f,useEffect as P,useCallback as H,createContext as Pe,useContext as Te,useMemo as _,useReducer as De}from"react";import{useSearchParams as Xe,useLocation as la,Routes as oa,Route as sa}from"react-router-dom";import{MarkdownContent as ia,Link as ca,DismissableBanner as Ze,Page as ma,Header as da,TabbedLayout as te}from"@backstage/core-components";import{DATA_VIZ_LIGHT_THEME as xe,SpotifyLicenseBanner as ua}from"@spotify/backstage-plugin-core";import{Box as C,Paper as Ee,Grid as d,Button as O,Slide as pa,Dialog as ha,AppBar as ga,Toolbar as Ea,Typography as v,IconButton as ve,TextField as $,Collapse as va,makeStyles as b,ButtonGroup as et,Menu as tt,MenuItem as ae,FormControl as Ie,InputLabel as $e,Select as Ae,RadioGroup as fa,Radio as at,FormControlLabel as fe,Checkbox as ye,Card as Re,ListItemIcon as ne,ListItemText as re,withStyles as ya,CardHeader as ba,CardContent as Ca,Divider as Fe,CardActions as ka,List as Oe,ListItem as Q,Tooltip as le,InputAdornment as nt,NativeSelect as rt,TablePagination as xa,Chip as Me,CircularProgress as wa,Accordion as Sa,AccordionSummary as La,AccordionDetails as Na,Tabs as Pa,Tab as oe,FormGroup as Ta}from"@material-ui/core";import{makeStyles as z,createStyles as Da}from"@material-ui/core/styles";import{a as Ia,b as lt,u as $a,U as Aa,G as Ra,O as Fa}from"./OverviewPageContent-dbbba0be.esm.js";import Ve from"@material-ui/icons/Close";import{Controller as X,useWatch as Be,useForm as Oa}from"react-hook-form";import Ma from"@material-ui/icons/AddCircleOutline";import Va from"@material-ui/icons/ArrowDropDown";import ot from"@material-ui/icons/Delete";import{useApi as I,alertApiRef as Ba,configApiRef as Ga}from"@backstage/core-plugin-api";import{useQuery as W,useQueryClient as se,useMutation as ie}from"@tanstack/react-query";import{s as G,Q as T,k as Z,M as ce,l as we,m as Ha,S as za,w as Wa}from"./index-37aedac7.esm.js";import{asArray as qa,FrequencySchema as Ka,parseFactRef as Ge,stringifyFactRef as Ua,soundcheckCheckUpdatePermission as ja,soundcheckCheckDeletePermission as _a,soundcheckCheckCreatePermission as Qa,soundcheckTrackUpdatePermission as Ya,soundcheckTrackDeletePermission as Ja,soundcheckTrackCreatePermission as Xa}from"@spotify/backstage-plugin-soundcheck-common";import Za from"cron-validate";import en from"cronstrue";import tn from"lodash/isObject";import{Autocomplete as st,Skeleton as He}from"@material-ui/lab";import an from"@material-ui/icons/CheckBox";import nn from"@material-ui/icons/CheckBoxOutlineBlank";import rn from"@material-ui/icons/ExpandMore";import{catalogApiRef as it,EntityRefLink as ct}from"@backstage/plugin-catalog-react";import"@backstage/catalog-model";import{v4 as mt}from"uuid";import ln from"@material-ui/icons/MoreVert";import dt from"@material-ui/icons/Group";import{usePermission as me}from"@backstage/plugin-permission-react";import on from"@material-ui/icons/Search";import{useDrag as sn,useDrop as cn,DndProvider as mn}from"react-dnd";import{HTML5Backend as dn}from"react-dnd-html5-backend";import un from"@material-ui/icons/OpenInNew";import pn from"@material-ui/icons/DoneAllRounded";import hn from"@material-ui/icons/Menu";import ut from"@material-ui/icons/DragIndicator";import gn from"@material-ui/icons/Visibility";import pt from"@material-ui/icons/Add";import ht from"@material-ui/icons/Remove";import{ResponsiveContainer as En,LineChart as vn,CartesianGrid as gt,XAxis as Et,YAxis as vt,Tooltip as ft,Legend as yt,Line as fn,BarChart as yn,Bar as bn}from"recharts";import Cn from"@material-ui/lab/Autocomplete";import kn from"../images/catalog.svg";import xn from"../images/git.svg";import wn from"../images/octocat.svg";import Sn from"../images/settings.svg";import Ln from"../images/soundcheck.png";import Nn from"../images/tech_insights.png";import"react-use/lib/useAsync";import"./RefetchingIndicator-7160bb11.esm.js";import"react-use/lib/useDebounce";import"lodash";import"react-window";import"graphql-request";import"graphql-tag";import"@material-ui/core/styles/makeStyles";import"classnames";import"@material-ui/icons/Schedule";import"luxon";import"@material-ui/icons/Check";import"@material-ui/icons/RemoveCircleOutline";import"@material-ui/icons/HelpOutline";function Pn(e,n,a){const r=I(G);return W([T.GetAllPrograms,e,n,a],async()=>r.getAllPrograms(e,n,a))}const Tn="Error Creating Track";function Dn(){const e=I(G),n=se(),{showAlert:a}=Z(),r=async l=>{const o=await e.createProgram(l);if(!o)throw new Error("Failed to create track.");return o};return ie([ce.CreateProgram],r,{onSuccess:async()=>{await n.invalidateQueries({queryKey:[T.GetAllPrograms]})},onError:l=>{let o="Failed to create track.";l instanceof Error&&(o=l.message),a({severity:"error",title:Tn,message:o})}})}function bt(e,n,a){const r=I(G);return W([T.GetChecks,e,n,a],async()=>r.getChecks(e,n,a))}const In=e=>{const[n,a]=f(void 0),[r,l]=f([[]]),[o,s]=f([!1]);P(()=>{n===void 0&&e!=null&&e.length&&a(e)},[e,n]);const c=H((p,g)=>{l(E=>{const y=[...E];return y[g]=[...y[g],p],y}),a(E=>E==null?void 0:E.filter(y=>y.id!==p.id)),s(E=>{if(E[g]){const y=[...E];return y[g]=!1,y}return E})},[]),i=H((p,g)=>{l(E=>{const y=[...E];return y[g]=y[g].filter(k=>k.id!==p.id),y}),a(E=>[...E!=null?E:[],p])},[]),u=H(()=>{l(p=>[...p,[]]),s(p=>[...p,!1])},[]),m=H(p=>{r.length>1&&l(g=>{const E=[...g],y=E.splice(p,1)[0];return a(k=>[...k!=null?k:[],...y]),E})},[r]),h=H(()=>{const p=r.map(g=>g.length===0);return s(p),!p.some(g=>g)},[r]);return{chips:n,inputChipsList:r,handleDrop:c,handleDelete:i,addInput:u,removeInput:m,inputErrors:o,setInputErrors:s,areInputsValid:h,setInputChipsList:l}},$n=z(e=>({box:{zIndex:9,position:"fixed",bottom:"0",width:"100%"},footer:{padding:e.spacing(2)}})),Ct=({onCancel:e,saveButtonText:n,isLoading:a,onSave:r,disableSave:l})=>{const o=$n();return t.createElement(C,{className:o.box},t.createElement(Ee,{elevation:3,className:o.footer},t.createElement(d,{container:!0,item:!0,spacing:2,justifyContent:"space-between"},t.createElement(d,{item:!0},t.createElement(O,{variant:"contained",color:"primary",onClick:e},"Cancel")),t.createElement(d,{item:!0},r&&t.createElement(O,{variant:"contained",color:"primary",disabled:a||l,onClick:r?()=>r():void 0},n)))))},kt=Pe({selectedProgram:null,setSelectedProgram:()=>{},isLoading:!1,setIsLoading:()=>{},showAddModal:!1,setShowAddModal:()=>{}}),An=({children:e})=>{const[n,a]=f(null),[r,l]=f(!1),[o,s]=f(!1);return t.createElement(kt.Provider,{value:{selectedProgram:n,setSelectedProgram:a,isLoading:r,setIsLoading:l,showAddModal:o,setShowAddModal:s}},e)},de=()=>Te(kt),xt=Pe({selectedCheck:null,setSelectedCheck:()=>{},isLoading:!1,setIsLoading:()=>{},showAddModal:!1,setShowAddModal:()=>{},isReadOnly:!1,showReadOnlyModal:()=>{},hideModal:()=>{}}),Rn=({children:e})=>{const[n,a]=f(null),[r,l]=f(!1),[o,s]=f(!1),[c,i]=f(!1),u=h=>{l(!0),a(h)},m=()=>{a(null),l(!1),i(!1)};return t.createElement(xt.Provider,{value:{selectedCheck:n,setSelectedCheck:a,isLoading:o,setIsLoading:s,showAddModal:c,setShowAddModal:i,isReadOnly:r,showReadOnlyModal:u,hideModal:m}},e)},q=()=>Te(xt),Fn=z(e=>({appBar:{position:"relative"},title:{flex:1,fontSize:e.typography.h6.fontSize},closeIcon:{marginRight:e.spacing(2)},content:{flex:"1 0 auto",padding:e.spacing(2),overflowX:"hidden",backgroundColor:e.palette.type==="dark"?"#333":e.palette.common.white}})),On=t.forwardRef(function(e,n){return t.createElement(pa,{direction:"up",ref:n,...e})}),ze=({open:e,handleClose:n,title:a,children:r})=>{const l=Fn();return t.createElement(ha,{fullScreen:!0,open:e,onClose:n,TransitionComponent:On},t.createElement(ga,{className:l.appBar},t.createElement(Ea,null,t.createElement(v,{className:l.title},a),t.createElement(ve,{edge:"end",color:"inherit",onClick:n,"aria-label":"close",className:l.closeIcon},t.createElement(Ve,null)))),t.createElement(C,{className:l.content},r))},be=({name:e,control:n,error:a,label:r,placeholder:l,disabled:o,rules:s,messages:c,helperText:i,multiline:u,minRows:m})=>t.createElement(X,{name:e,control:n,defaultValue:"",rules:s,render:({field:h})=>t.createElement($,{...h,fullWidth:!0,multiline:u,minRows:m,placeholder:l,label:r,disabled:o,variant:"outlined",margin:"normal",error:!!a,helperText:a&&c?c[a.type]:i})}),Mn=z(()=>({section:{gap:0}})),Vn=({control:e,error:n,isLoading:a,disabled:r})=>{const l=Mn();return t.createElement("div",{className:l.section},t.createElement(be,{name:"checkName",control:e,error:n,label:"Check Name",placeholder:"Choose a name",disabled:a||r,rules:{required:!0,maxLength:100},messages:{required:"This field is required",maxLength:"Input must be less than 100 characters"}}))},Bn=z(e=>({root:{display:"flex",flexDirection:"column",gap:0},button:{marginLeft:-e.spacing(1)},title:{fontWeight:700,color:e.palette.primary.main}})),Ce=({title:e,children:n})=>{const[a,r]=f(!1),l=Bn(),o=()=>{r(!a)};return t.createElement("div",{className:l.root},t.createElement(d,{container:!0,alignItems:"center",spacing:0},t.createElement(d,{item:!0},t.createElement(ve,{onClick:o,className:l.button},t.createElement(Ma,null))),t.createElement(d,{item:!0},t.createElement(v,{className:l.title},e))),t.createElement(va,{in:a},n))},Gn=({control:e,passError:n,failError:a,isLoading:r,disabled:l})=>t.createElement(Ce,{title:l?"Pass and fail messages":"Pass and fail messages (optional)"},t.createElement(be,{name:"passMessage",control:e,error:n,label:"Pass Message",placeholder:"Enter pass message...",disabled:r||l}),t.createElement(be,{name:"failMessage",control:e,error:a,label:"Fail Message",placeholder:"Enter fail message...",disabled:r||l})),Hn=({control:e,error:n,isLoading:a,disabled:r})=>t.createElement(be,{name:"description",control:e,error:n,label:"Check Description",disabled:a||r,multiline:!0,minRows:4,placeholder:r?void 0:"Enter a brief description about the check",helperText:r?void 0:"Enter a brief description about the check",rules:{required:!0,maxLength:500},messages:{required:"This field is required",maxLength:"Description must be less than 500 characters"}}),zn=b(e=>({button:{backgroundColor:e.palette.background.default,color:e.palette.primary.main},label:{paddingRight:e.spacing(2)},icon:{borderLeft:`1px solid ${e.palette.primary.main}`,padding:e.spacing(1,0,0,1)},menu:{marginTop:"52px"}})),Wn=({onAddCondition:e,onAddExpression:n})=>{const a=zn(),[r,l]=f(null),o=!!r,s=i=>{l(i.currentTarget)},c=()=>{l(null)};return t.createElement(C,null,t.createElement(et,{color:"primary"},t.createElement(O,{id:"add-button",className:a.button,"aria-controls":o?"add-menu":void 0,"aria-haspopup":"true","aria-expanded":o?"true":void 0,onClick:s},t.createElement(C,{className:a.label},"Add"),t.createElement(C,{className:a.icon},t.createElement(Va,null)))),t.createElement(tt,{id:"add-menu",anchorEl:r,open:o,onClose:c,classes:{paper:a.menu},MenuListProps:{"aria-labelledby":"add-button"}},t.createElement(ae,{onClick:()=>{e(),c()}},"Add Condition"),t.createElement(ae,{onClick:()=>{n(),c()}},"Add Expression")))},wt=({name:e,control:n,selectLabel:a,options:r,disabled:l,rules:o})=>t.createElement(X,{name:e,control:n,rules:o,render:({field:s,fieldState:c})=>t.createElement(Ie,{variant:"outlined",style:{minWidth:200}},t.createElement($e,{id:`${e}-select-label`},a),t.createElement(Ae,{...s,disabled:l,error:c.invalid,"data-testid":`${e}-select`,labelId:`${e}-select-label`,label:a},r.map(({value:i,label:u})=>t.createElement(ae,{key:i,value:i},u))))});var Y=(e=>(e.AllOf="all",e.AnyOf="any",e))(Y||{});const qn={all:"ALL OF",any:"ANY OF"};var St=(e=>(e.Equal="equal",e.NotEqual="notEqual",e.Matches="matches",e.LessThan="lessThan",e.LessThanInclusive="lessThanInclusive",e.GreaterThan="greaterThan",e.GreaterThanInclusive="greaterThanInclusive",e.In="in",e.NotIn="notIn",e.Contains="contains",e.DoesNotContain="doesNotContain",e.SemverGt="semverGt",e.SemverGte="semverGte",e.SemverLt="semverLt",e.SemverLte="semverLte",e.SemverEq="semverEq",e.SemverNeq="semverNeq",e.SemverSatisfies="semverSatisfies",e.SemverGtr="semverGtr",e.SemverLtr="semverLtr",e))(St||{});const Kn={equal:"Equals",notEqual:"Does Not Equal",matches:"Matches",semverGt:"Version Greater Than",semverGte:"Version Greater Than or Equals",semverLt:"Version Less Than",semverLte:"Version Less Than or Equals",semverEq:"Version Equals",semverNeq:"Version Not Equals",semverSatisfies:"Version Satisfies Range",semverGtr:"Version Greater Than Range",semverLtr:"Version Less Than Range",lessThan:"Less Than",lessThanInclusive:"Less Than or Equals",greaterThan:"Greater Than",greaterThanInclusive:"Greater Than or Equals",in:"In Array",notIn:"Not in Array",contains:"Contains",doesNotContain:"Does Not Contain"},Un=b(e=>({container:{borderLeft:`1px solid ${e.palette.grey[500]}`,marginLeft:e.spacing(2),padding:e.spacing(2,0,2,0),display:"flex",flexDirection:"row",alignItems:"center",gap:e.spacing(0)},connector:{borderBottom:`1px solid ${e.palette.grey[500]}`,padding:e.spacing(0),width:"15px",height:"45px"},innerContainer:{backgroundColor:e.palette.background.default,border:`1px solid ${e.palette.grey[500]}`,display:"flex",flexDirection:"column"},inputsContainer:{padding:e.spacing(2),display:"flex",flexDirection:"row",justifyContent:"space-between",alignItems:"center",gap:e.spacing(1)},header:{background:"linear-gradient(90deg, #007DFF 0%, #0057B2 100%)",width:"100%",height:"8px"},deleteButton:{marginLeft:e.spacing(1),width:"45px",height:"45px"},deleteIcon:{color:e.palette.type==="dark"?e.palette.background.default:e.palette.common.black}}));function Lt(e){const n=I(G);return W([T.GetCollectors,e],async()=>n.getCollectors(e))}function jn(e,n){const a=I(G);return W([T.GetFactSchema,e,n],()=>a.getFactSchema(e,n),{enabled:!!e&&!!n})}var N=(e=>(e.Months="months",e.Weeks="weeks",e.Days="days",e.Hours="hours",e.Minutes="minutes",e.Seconds="seconds",e))(N||{});const Nt=[N.Months,N.Weeks,N.Days,N.Hours,N.Minutes,N.Seconds];function _n(e){return Nt.includes(e)}function Qn(e){switch(e){case"months":return N.Months;case"weeks":return N.Weeks;case"days":return N.Days;case"hours":return N.Hours;case"minutes":return N.Minutes;case"seconds":return N.Seconds;default:return null}}function Yn(e){const[n,a]=f(""),[r,l]=f(!1);return P(()=>{if(e&&e!=="")try{const o=en.toString(e);Za(e).isValid()?(a(o),l(!0)):(a("Invalid cron expression"),l(!1))}catch(o){if(typeof o=="string"){const s=o.replace(/^Error:\s*/,"");a(s)}else a("Invalid cron expression");l(!1)}else a(""),l(!1)},[e]),{description:n,valid:r}}const Jn=({value:e,onChange:n,setValid:a,disabled:r})=>{const[l,o]=f(e),{description:s,valid:c}=Yn(l.cron);P(()=>{a(e.type!=="cron"||c)},[e,a,c]),P(()=>{n&&n(l)},[l,n]);const i=p=>{o({...e,type:p.target.value})},u=p=>{o({...e,value:parseInt(p.target.value,10)})},m=p=>{var g;o({...l,unit:(g=Qn(p.target.value))!=null?g:N.Hours})},h=p=>{const g=p.target.value;o({...l,cron:g})};return t.createElement(d,{container:!0,direction:"row"},t.createElement(d,{item:!0},t.createElement(fa,{name:"frequencyType",value:l.type,onChange:i},t.createElement(d,{container:!0,alignItems:"flex-start"},t.createElement(d,{item:!0},t.createElement(at,{disabled:r,value:"HumanDuration"})),t.createElement(d,{item:!0},t.createElement(v,{variant:"body1"},"Run on a regular interval"),t.createElement(v,{variant:"caption"},"Run on a regular interval that you define"),l.type==="HumanDuration"&&t.createElement(d,{container:!0,alignItems:"center"},t.createElement(d,{item:!0},t.createElement($,{id:"every",type:"number",label:"Every",name:"every",disabled:r,value:l.value,onChange:u,inputProps:{min:1}})),t.createElement(d,{item:!0},t.createElement(Ie,null,t.createElement($e,{id:"frequency-unit"},"Unit"),t.createElement(Ae,{labelId:"frequency-unit",disabled:r,value:l.unit,onChange:m},Nt.map(p=>t.createElement(ae,{key:p,value:p},p)))))))),t.createElement(d,{container:!0,alignItems:"flex-start",spacing:2},t.createElement(d,{item:!0},t.createElement(at,{disabled:r,value:"cron"})),t.createElement(d,{item:!0},t.createElement(v,{variant:"body1"},"Run on a schedule"),t.createElement(v,{variant:"caption"},"Run on a schedule defined via cron expression"),l.type==="cron"&&t.createElement(d,{item:!0},t.createElement($,{"data-testid":"cron-expression",style:{minWidth:250},label:s,disabled:r,placeholder:"* * * * *",error:!c,value:l.cron,onChange:h})))))))},Xn=(e,n,a,r)=>{const l={};return r&&r.forEach(o=>{var s,c;o&&(l[o.id]={id:o.id,name:(s=o.name)!=null?s:o.id,description:(c=o.description)!=null?c:""})}),e.map((o,s)=>{const c=o.map(i=>l[i.id]);return{name:n[s],description:a[s],ordinal:s+1,checks:c}})},Zn=e=>e.map(n=>n.checks.map(a=>{var r;return{id:a.id,label:(r=a.name)!=null?r:a.id}})),er=e=>{var n;return{id:e.id,name:e.name,description:e.description||"",ownerEntityRef:e.ownerEntityRef,documentationURL:e.documentationURL||"",levels:((n=e.levels)==null?void 0:n.map(a=>({ordinal:a.ordinal,name:a.name||"",description:a.description||"",checks:a.checks.map(r=>({id:r.id,name:r.name,description:r.description}))})))||[],filter:e.filter}},Se={selectedKinds:"kind",selectedTypes:"spec.type",selectedLifecycles:"spec.lifecycle",selectedOwners:"spec.owner",selectedSystems:"spec.system",selectedTags:"metadata.tags"},Pt=e=>!e||Object.values(e).every(n=>n.length===0)?void 0:{catalog:Object.entries(e).reduce((n,[a,r])=>{const l=Se[a];return r.length>0&&(n[l]=r),n},{})},Tt=e=>Object.keys(Se).reduce((n,a)=>{var r,l;return n[a]=qa((l=(r=e==null?void 0:e.catalog)==null?void 0:r[Se[a]])!=null?l:[]),n},{}),tr=e=>{if(!e||Object.values(e).every(a=>a.length===0))return;const n={};for(const[a,r]of Object.entries(e))r.length>0&&(n[Se[a]]=r);return[n]},ar=e=>{var n;if(tn(e)&&"frequency"in e){const a=Ka.safeParse(e.frequency);if(a.success){const r=a.data;if("cron"in r)return{enabled:!0,frequency:{type:"cron",unit:N.Hours,value:1,cron:r.cron}};const l=Object.keys(r);if(l.length){const o=l[0];if(_n(o))return{enabled:!0,frequency:{type:"HumanDuration",unit:o,value:(n=r[o])!=null?n:1,cron:""}}}}}return{enabled:!1,frequency:{type:"HumanDuration",unit:N.Hours,value:1,cron:""}}},nr=(e,n)=>{const{enabled:a,frequency:r}=e;if(a){const{cron:l,type:o,unit:s,value:c}=r;return o==="HumanDuration"?{frequency:{[s]:c},filter:tr(n)}:{frequency:{cron:l}}}},rr=(e,n)=>{const a=e?Zn(e.levels):[[]],r=a.flat().map(o=>o.id),l=n.filter(o=>!r.includes(o.id));return{inputChips:a,used:l}},lr={enabled:!1,frequency:{type:"HumanDuration",unit:N.Hours,value:1,cron:""}},We=e=>{var n;if(!e)return{};if(e.expressionType){const a={[e.expressionType]:(n=e.conditions)==null?void 0:n.map(r=>({factRef:r.factRef,path:r.path,operator:r.operator,value:r.value}))};return e.expressions&&e.expressions.forEach(r=>{var l;(l=a[e.expressionType])==null||l.push(We(r))}),a}if(e.expressions)return e.expressions.map(We);if(e.conditions&&e.conditions.length===1){const a=e.conditions[0];return{factRef:a.factRef,path:a.path,operator:a.operator,value:a.value}}return{}},Dt=(e,n=!0)=>{if(!e)return{conditions:[]};const a=Object.keys(e),r=a.includes("all")||n&&!a.includes("any")?Y.AllOf:Y.AnyOf;if(a.includes(r)||n){const l=e[r]||[e],o=[],s=[];return l.forEach(c=>{const i=Object.keys(c);i.includes("all")||i.includes("any")?s.push(Dt(c,!1)):o.push({factRef:c.factRef,path:c.path,operator:c.operator,value:c.value})}),{expressions:s.length>0?s:void 0,conditions:o,expressionType:r}}return{expressionType:Y.AllOf,conditions:[{factRef:e.factRef,path:e.path,operator:e.operator,value:e.value}]}},or=e=>({checkName:e.name||"",description:e.description||"",teamOwner:e.ownerEntityRef||"",supportChannel:e.supportChannel||"",expressions:Dt(e.rule),passMessage:e.passedMessage||void 0,failMessage:e.failedMessage||void 0,filters:Tt(e.filter),schedule:ar(e.schedule)}),qe=(e,n="$")=>{const a=[];if(e.type==="object"&&e.properties){const r=e.properties;for(const l in r)if(r.hasOwnProperty(l)){const o=`${n}.${l}`;a.push(o);const s=r[l];a.push(...qe(s,o))}}if(e.type==="array"&&e.items){const r=`${n}[*]`;a.push(r);const l=Array.isArray(e.items)?e.items:[e.items];for(const o of l)a.push(...qe(o,r))}return a},sr={checkName:"",description:"",teamOwner:"",supportChannel:"",expressions:{expressionType:Y.AllOf,expressions:void 0,conditions:[{factRef:"",path:"",operator:"",value:"",conditions:[]}]},filters:{selectedKinds:[],selectedTypes:[],selectedLifecycles:[],selectedOwners:[],selectedSystems:[],selectedTags:[]},schedule:lr},ir=(e,n)=>{const{data:a,isLoading:r}=Lt(),l=Be({control:n,name:`${e}.factRef`}),[o,s]=f(()=>It(l));P(()=>{s(It(l))},[l]);const{data:c}=jn(o==null?void 0:o.source,o==null?void 0:o.name),i=_(()=>c?qe(c.schema):[],[c]),u=_(()=>a==null?void 0:a.flatMap(m=>m.factNames.map(h=>{const p=Ge(h,{defaultSource:m.id,defaultScope:"default"});return{label:p.name,value:Ua(p)}})),[a]);return{isLoading:r,pathOptions:i,factRefOptions:u}};function It(e){if(e)try{return Ge(e,{defaultSource:"unknown",defaultScope:"default"})}catch{return null}return null}const $t=({name:e,rules:n,label:a,control:r,options:l,getOptionLabel:o,getOptionValue:s,disabled:c})=>t.createElement(X,{name:e,control:r,rules:n,render:({field:i,fieldState:u})=>t.createElement(st,{...i,freeSolo:!0,"data-testid":`${e}-autocomplete`,style:{minWidth:250},disabled:c,options:l,getOptionLabel:o,renderInput:m=>t.createElement($,{...m,variant:"outlined",label:a,error:u.invalid,helperText:u.error?u.error.message:null}),onChange:(m,h)=>i.onChange(s?s(h):h),onInputChange:(m,h)=>i.onChange(s?s(h):h)})}),cr=e=>{try{return Ge(e),!0}catch{return"Invalid fact reference. [source]:[scope]/[name]."}},mr=({control:e,name:n,handleDelete:a,disabled:r,disableDelete:l})=>{const o=Un(),s=_(()=>Object.values(St).map(p=>({value:p,label:Kn[p]})),[]),{pathOptions:c,factRefOptions:i,isLoading:u}=ir(n,e),m={required:!0},h=_(()=>{var p;return(p=i==null?void 0:i.map(g=>g.value))!=null?p:[]},[i]);return t.createElement(C,{className:o.container},t.createElement(C,{className:o.connector}),t.createElement(C,{className:o.innerContainer},t.createElement(C,{className:o.header}),t.createElement(C,{className:o.inputsContainer},t.createElement($t,{name:`${n}.factRef`,control:e,rules:{...m,maxLength:500,validate:cr},label:"Fact",options:h,getOptionLabel:p=>{var g,E;return(E=(g=i==null?void 0:i.find(y=>p===y.value))==null?void 0:g.label)!=null?E:p},getOptionValue:p=>{var g,E,y;return(y=(E=(g=i==null?void 0:i.find(k=>p===k.label))==null?void 0:g.value)!=null?E:p)!=null?y:""},disabled:r||u}),t.createElement($t,{name:`${n}.path`,label:"Path",rules:m,control:e,disabled:r||u,options:c}),t.createElement(wt,{name:`${n}.operator`,rules:m,control:e,selectLabel:"Operator",options:s,disabled:r}),t.createElement(X,{name:`${n}.value`,control:e,defaultValue:"",rules:m,render:({field:p,fieldState:g})=>t.createElement($,{...p,label:"Value",variant:"outlined",placeholder:"Enter a value",error:g.invalid,helperText:g.error?g.error.message:null,disabled:r})}))),!r&&!l&&t.createElement(ve,{onClick:a,className:o.deleteButton,"data-test-id":`${n}-delete-button`},t.createElement(ot,{className:o.deleteIcon})))},dr=({conditions:e,control:n,name:a,handleDelete:r,disabled:l,disableDelete:o,setValue:s})=>t.createElement(t.Fragment,null,e.map((c,i)=>t.createElement(d,{item:!0,key:i},t.createElement(mr,{control:n,name:`${a}.conditions[${i}]`,"data-testid":`${a}-condition-input`,handleDelete:()=>r(i),disabled:l,disableDelete:o,setValue:s})))),ur=({expression:e,control:n,name:a,depth:r,getValues:l,setValue:o,trigger:s,disabled:c})=>e?t.createElement(d,{item:!0},t.createElement(At,{control:n,name:`${a}`,depth:r+1,getValues:l,setValue:o,trigger:s,disabled:c})):null,pr=b(e=>({button:{fontWeight:700,backgroundColor:e.palette.background.default,color:e.palette.primary.main,"&:hover":{backgroundColor:"rgba(46, 119, 208, 0.2)"}},selectedButton:{backgroundColor:"rgba(46, 119, 208, 0.15)"}})),hr=({control:e,name:n,getValues:a,disabled:r})=>{const l=pr(),o=`${n}`,s=a(o),[c,i]=f(s||Y.AllOf),u=m=>{i(m)};return t.createElement(X,{control:e,name:n,render:({field:{onChange:m}})=>t.createElement(et,{color:"primary"},Object.values(Y).map(h=>t.createElement(O,{key:h,className:c===h?`${l.selectedButton} ${l.button}`:`${l.button}`,onClick:()=>{u(h),m(h)},disabled:r},qn[h])))})},gr=(e,n,a,r)=>({handleAddCondition:async()=>{const l=`${e}`,o=n(l),s=[...(o==null?void 0:o.conditions)||[],{factRef:"",path:"",operator:"",value:""}],c=`${e}.conditions`;a(c,s),await r(c)},handleAddExpression:async()=>{const l=`${e}.expressions`,o=n(l)||[];o.push({expressionType:Y.AllOf,expressions:void 0,conditions:[{factRef:"",path:"",operator:"",value:""}]}),a(l,o),await r(l)},handleDeleteCondition:async(l,o)=>{const s=o.split("[")[0],c=`${o}.conditions`,i=n(c);if(i.splice(l,1),i.length===0){a(c,void 0);const u=parseInt(o.slice(o.lastIndexOf("[")+1,o.lastIndexOf("]")),10),m=n(s);m.splice(u,1),a(s,m.length>0?m:void 0),await r(s)}else a(c,i),await r(c)}}),Er=z(e=>({root:{backgroundColor:e.palette.type==="dark"?e.palette.grey[700]:e.palette.grey[100],border:`1px solid ${e.palette.grey[500]}`,padding:e.spacing(2)},inner:{marginLeft:e.spacing(2),paddingBottom:e.spacing(2),borderLeft:`1px solid ${e.palette.grey[500]}`,display:"flex",flexDirection:"row",gap:0},connector:{borderBottom:`1px solid ${e.palette.grey[500]}`,padding:e.spacing(0),width:"15px",height:"20px"}})),At=({control:e,name:n,depth:a,getValues:r,setValue:l,trigger:o,disabled:s})=>{const c=Er(),{handleAddCondition:i,handleAddExpression:u,handleDeleteCondition:m}=gr(n,r,l,o),h=`${n}`,p=r(h),g=(p==null?void 0:p.conditions)||[],E=p==null?void 0:p.expressions;return t.createElement(C,{className:a>0?c.inner:c.root},a>0&&t.createElement(C,{className:c.connector}),t.createElement(d,{container:!0,spacing:0,direction:"column"},t.createElement(d,{item:!0},t.createElement(hr,{control:e,disabled:s,name:`${n}.expressionType`,getValues:r})),t.createElement(d,{item:!0,container:!0,spacing:0,direction:"column"},t.createElement(dr,{disableDelete:g.length===1&&a===0,handleDelete:y=>m(y,n),disabled:s,conditions:g,control:e,name:n,setValue:l}),E==null?void 0:E.map((y,k)=>t.createElement(ur,{key:k,expression:y,control:e,name:`${n}.expressions[${k}]`,depth:a,getValues:r,setValue:l,trigger:o,disabled:s}))),!s&&t.createElement(d,{item:!0},t.createElement(Wn,{onAddCondition:i,onAddExpression:u}))))},vr=({control:e,supportContactError:n,disabled:a,isLoading:r,options:l})=>{var o;return t.createElement(Ce,{title:a?"Owner Details":"Owner Details (optional)"},t.createElement(wt,{name:"teamOwner",control:e,selectLabel:"Owner",options:(o=l==null?void 0:l.map(s=>({value:s.ref,label:s.name})))!=null?o:[],disabled:a||r}),t.createElement(be,{name:"supportChannel",control:e,error:n,label:"Support channel",placeholder:"Enter a channel or email to get check support",disabled:a||r,rules:{},messages:{}}))},Rt=[{facet:"kind",label:"Kind",stateKey:"selectedKinds"},{facet:"spec.type",label:"Type",stateKey:"selectedTypes"},{facet:"spec.lifecycle",label:"Lifecycle",stateKey:"selectedLifecycles"},{facet:"spec.owner",label:"Owner",stateKey:"selectedOwners"},{facet:"spec.system",label:"System",stateKey:"selectedSystems"},{facet:"metadata.tags",label:"Tags",stateKey:"selectedTags"}],fr=e=>{const n=I(Ba),a=I(it);return W([T.GetEntityFacets,e],async()=>{var r;return((r=(await a.getEntityFacets({facets:[e]})).facets[e])==null?void 0:r.map(l=>l.value).sort())||[]},{onError:()=>{n.post({message:`Failed to load facet: ${e}`,severity:"error"})}})},yr=b({formControl:{flexGrow:1}}),Ft=({facet:e,label:n,values:a,onChange:r,disabled:l})=>{const o=yr(),{data:s,error:c}=fr(e),i=_(()=>s==null?void 0:s.map(p=>p.toLocaleLowerCase("en-US")),[s]),u=H((p,g)=>{r(i&&i.every(E=>g.includes(E))?void 0:g)},[i,r]),m=H(()=>{r(a!=null&&a.length?a:void 0)},[a,r]);if(!s||!i||c)return t.createElement(v,{color:"error"},"Failed to load facet: ",e);const h=l||!(a!=null&&a.length)&&(!(s!=null&&s.length)||!(i!=null&&i.length));return t.createElement(C,{pb:1,pt:1},t.createElement(v,{variant:"subtitle2"},n),t.createElement(st,{className:o.formControl,multiple:!0,limitTags:4,disableCloseOnSelect:!0,"aria-label":n,options:i,value:a!=null?a:[],getOptionLabel:p=>{var g;return(g=s[i.indexOf(p)])!=null?g:p},onChange:u,onBlur:m,disabled:h,renderOption:(p,{selected:g})=>{var E;return t.createElement(fe,{control:t.createElement(ye,{icon:t.createElement(nn,{fontSize:"small"}),checkedIcon:t.createElement(an,{fontSize:"small"}),checked:g}),label:(E=s[i.indexOf(p)])!=null?E:p})},size:"small",popupIcon:t.createElement(rn,{"data-testid":"selected-facets-expand"}),renderInput:p=>t.createElement($,{...p,variant:"outlined"})}))},br=b(e=>({title:{fontWeight:700},container:{padding:e.spacing(0,1.5)},filterContainer:{display:"flex",flexWrap:"wrap",padding:e.spacing(2)}})),Cr=({control:e,setFilters:n,disabled:a})=>{const r=br(),l=Be({control:e,name:"filters",defaultValue:{selectedKinds:[],selectedTypes:[],selectedLifecycles:[],selectedOwners:[],selectedSystems:[],selectedTags:[]}}),o=s=>c=>{n(s,c)};return t.createElement(Ce,{title:a?"Filters":"Filters (optional)"},t.createElement(d,{className:r.container,item:!0,xs:12},t.createElement(v,{variant:"body2"},"Apply filters so it's only applicable to relevant entities."),t.createElement(d,{item:!0,xs:12},t.createElement(Ee,null,t.createElement(d,{container:!0,className:r.filterContainer,spacing:2},Rt.map(s=>t.createElement(d,{item:!0,xs:12,sm:6,md:4,key:s.stateKey},t.createElement(Ft,{facet:s.facet,label:s.label,values:l==null?void 0:l[s.stateKey],onChange:o(s.stateKey),disabled:a}))))))))},kr=({control:e,setValue:n,trigger:a,disabled:r})=>t.createElement(Cr,{control:e,setFilters:async(l,o)=>{n(`filters.${l}`,o!=null?o:[]),await a(`filters.${l}`)},disabled:r}),xr=b(e=>({container:{padding:e.spacing(0,1.5)}})),wr=({control:e,disabled:n})=>{const a=xr(),r=Be({control:e,name:"schedule"}),[l,o]=f(!0);return t.createElement(d,{className:a.container,item:!0,xs:12},t.createElement(d,{item:!0},t.createElement(X,{name:"schedule.enabled",control:e,render:({field:s})=>t.createElement(fe,{disabled:n,control:t.createElement(ye,{checked:s.value,onChange:s.onChange}),label:"Schedule check"})})),t.createElement(d,{item:!0},t.createElement(X,{name:"schedule.frequency",control:e,rules:{validate:(s,c)=>l},render:({field:s})=>t.createElement(Jn,{disabled:n||!r.enabled,value:s.value,onChange:s.onChange,valid:l,setValid:o})})))},Sr=b(e=>({container:{padding:e.spacing(0,1.5)},scheduleContainer:{padding:e.spacing(2)}})),Lr=({control:e,disabled:n})=>{const a=Sr();return t.createElement(Ce,{title:n?"Schedule":"Schedule (optional)"},t.createElement(d,{className:a.container,item:!0,xs:12},t.createElement(d,{item:!0},t.createElement(v,{variant:"body2"},"By default checks are execute when any fact they depend on is updated. However, you may also schedule a check to run on a schedule.")),t.createElement(d,{item:!0,xs:12},t.createElement(Ee,{className:a.scheduleContainer},t.createElement(wr,{disabled:n,control:e})))))},Nr=e=>{const{selectedCheck:n}=q();let a=sr;n&&(a=or(n));const{control:r,handleSubmit:l,getValues:o,setValue:s,trigger:c,formState:{errors:i}}=Oa({defaultValues:a}),{showModal:u}=we();return{control:r,handleSubmit:l,getValues:o,setValue:s,trigger:c,errors:i,onSubmit:async m=>{var h,p,g,E;if(!await u({title:"Save Check",message:`Are you sure you want to save check: ${m.checkName}?`,error:!1}))return;const y={id:n?n.id:mt(),ownerEntityRef:(h=m.teamOwner)!=null?h:void 0,name:m.checkName,description:m.description,passedMessage:(p=m.passMessage)!=null?p:void 0,failedMessage:(g=m.failMessage)!=null?g:void 0,rule:We(m.expressions),filter:m.filters?Pt(m.filters):void 0,supportChannel:(E=m.supportChannel)!=null?E:void 0,schedule:nr(m.schedule,m.filters)};e(y)}}},Pr=()=>t.createElement("div",{style:{display:"flex",gap:"10px",flexDirection:"column"}},t.createElement(v,{variant:"h6"},"Creating and managing checks"),t.createElement(v,{variant:"body1"},"Checks are entities created from four components: facts, paths, operators and values. These components are then organized via a boolean calculator in the UI."),t.createElement(v,{variant:"body1"},"To create a check, select the components that you want to use, organize them into rules and give your check a meaningful name and a description."),t.createElement(v,{variant:"body1"},"Once created, you will be able to manage and edit your track on its detail page.")),Ot=z(e=>({root:{overflow:"hidden",display:"flex",marginBottom:"53px"},card:{padding:e.spacing(3),display:"flex",gap:e.spacing(2.5)},sectionLabel:{fontWeight:700,margin:e.spacing(2,0),color:e.palette.primary.main}})),Ke=({title:e,open:n,onSave:a})=>{const r=Ot(),{hideModal:l,isLoading:o,isReadOnly:s}=q(),{control:c,handleSubmit:i,getValues:u,setValue:m,trigger:h,errors:p,onSubmit:g}=Nr(a),{options:E}=Ia();return t.createElement(ze,{handleClose:l,title:e,open:n},t.createElement("form",{onSubmit:i(g)},t.createElement(d,{container:!0,spacing:2,className:r.root},t.createElement(d,{item:!0,xs:9},t.createElement(Re,{className:r.card},t.createElement(v,{className:r.sectionLabel,style:{margin:0}},"Check Details"),t.createElement(Vn,{control:c,error:p.checkName,isLoading:o,disabled:s}),t.createElement(Hn,{control:c,error:p.description,isLoading:o,disabled:s}),t.createElement(vr,{control:c,disabled:s,isLoading:o,options:E}),t.createElement(v,{className:r.sectionLabel},"Rules"),t.createElement(At,{control:c,getValues:u,setValue:m,trigger:h,disabled:s,name:"expressions",depth:0}),t.createElement(kr,{control:c,setValue:m,trigger:h,disabled:s}),t.createElement(Gn,{control:c,passError:p.passMessage,failError:p.failMessage,isLoading:o,disabled:s}),t.createElement(Lr,{control:c,disabled:s}))),t.createElement(d,{item:!0,xs:3},t.createElement(Pr,null))),t.createElement(d,{container:!0,spacing:4,className:r.root},t.createElement(Ct,{onCancel:l,saveButtonText:"Save Check",isLoading:o,onSave:s?void 0:i(g)}))))},Tr="Error Creating Check";function Dr(){const e=I(G),n=se(),{showAlert:a}=Z(),r=async l=>{const o=await e.updateCheck(l);if(!o)throw new Error("Failed to update check.");return o};return ie([ce.UpdateCheck],r,{onSuccess:()=>{n.invalidateQueries({queryKey:[T.GetChecks]})},onError:l=>{let o="Failed to update check.";l instanceof Error&&(o=l.message),a({severity:"error",title:Tr,message:o})}})}const Ir=()=>{const{selectedCheck:e,hideModal:n}=q(),{setIsLoading:a}=q(),{mutateAsync:r,isLoading:l}=Dr();return P(()=>{a(l)},[a,l]),t.createElement(Ke,{title:"Edit a Check",open:!!e,onSave:async o=>{await r(o)&&n()}})},$r="Error Creating Check";function Ar(){const e=I(G),n=se(),{showAlert:a}=Z(),r=async l=>{const o=await e.createCheck(l);if(!o)throw new Error("Failed to create check.");return o};return ie([ce.CreateCheck],r,{onSuccess:()=>{n.invalidateQueries({queryKey:[T.GetChecks]})},onError:l=>{let o="Failed to create check.";l instanceof Error&&(o=l.message),a({severity:"error",title:$r,message:o})}})}const Rr=()=>{const{hideModal:e,showAddModal:n,setIsLoading:a}=q(),{mutateAsync:r,isLoading:l}=Ar();return P(()=>{a(l)},[a,l]),t.createElement(Ke,{title:"Create a Check",open:n,onSave:async o=>{await r(o)&&e()}})},Fr=({handleDelete:e})=>{const[n,a]=f(null),r=!!n,l=s=>{s.stopPropagation(),a(s.currentTarget)},o=s=>{s.stopPropagation(),a(null)};return t.createElement(t.Fragment,null,t.createElement(ve,{"aria-label":"summary-card-actions",id:"summary-card-action-menu-button","aria-controls":r?"summary-card-action-menu":void 0,"aria-expanded":r?"true":void 0,"aria-haspopup":"true",onClick:l},t.createElement(ln,null)),t.createElement(tt,{id:"summary-card-action-menu",anchorEl:n,open:r,onClose:o,getContentAnchorEl:null,anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},MenuListProps:{"aria-labelledby":"summary-card-action-menu-button"}},e&&t.createElement(ae,{"data-testid":"summary-card-action-delete",onClick:s=>{e(s),o(s)}},t.createElement(ne,null,t.createElement(ot,{fontSize:"small"})),t.createElement(re,null,"Delete"))))},Or=ya(e=>Da({root:{width:"100%",height:"100%",minHeight:"385px",display:"flex",flexDirection:"column",padding:e.spacing(2),position:"relative"}}))(Re),Mr=b(e=>({root:{position:"relative",height:"100%"},summaryName:{fontSize:e.typography.pxToRem(24),color:e.palette.primary.main,maxHeight:"250px",overflow:"hidden",textOverflow:"ellipsis",display:"-webkit-box",WebkitLineClamp:6,WebkitBoxOrient:"vertical","-webkit-line-clamp":4,"-webkit-box-orient":"vertical",wordBreak:"break-word"},summaryDescription:{padding:0,maxHeight:"175px",overflow:"hidden",textOverflow:"ellipsis",display:"-webkit-box",WebkitLineClamp:6,WebkitBoxOrient:"vertical",wordBreak:"break-word"},card:{paddingTop:e.spacing(1),paddingBottom:0,paddingLeft:e.spacing(1),paddingRight:e.spacing(1)}})),Ue=({title:e,description:n,viewLabel:a="View",editLabel:r="Edit",children:l,handleDelete:o,handleEdit:s,handleView:c})=>{const i=Mr();return t.createElement(Or,{className:i.card},t.createElement(ba,{title:e,titleTypographyProps:{className:i.summaryName},subheader:t.createElement(ia,{className:i.summaryDescription,content:n!=null?n:""}),action:o&&t.createElement(Fr,{handleDelete:o})}),t.createElement(Ca,null,l),t.createElement(Fe,null),t.createElement(ka,null,t.createElement(O,{size:"medium",color:"primary",role:"link",onClick:s||c,disabled:!c&&!s},s?r:a)))},Vr="Error Deleting Check";function Br(){const e=I(G),n=se(),{showAlert:a}=Z(),r=async l=>{const o=await e.deleteCheck(l);if(!o)throw new Error(`Failed to delete check ${l}`);return o};return ie([ce.DeleteCheck],r,{onSuccess:()=>{n.invalidateQueries({queryKey:[T.GetChecks]})},onError:(l,o)=>{let s=`Failed to delete check ${o}`;l instanceof Error&&(s=l.message),a({severity:"error",title:Vr,message:s})}})}const Gr=b(e=>({root:{position:"relative",height:"100%"},cardSection:{marginBottom:e.spacing(2)},listItem:{padding:0},listItemText:{margin:0}})),Hr=({check:e})=>{var n;const a=Gr();return t.createElement(Oe,{dense:!0,disablePadding:!0,className:a.cardSection},t.createElement(v,{variant:"overline",color:"textSecondary"},"Check Details"),t.createElement(Q,{disableGutters:!0,className:a.listItem},t.createElement(le,{title:"Owner"},t.createElement(ne,null,t.createElement(dt,{color:"action",fontSize:"small"}))),t.createElement(re,{className:a.listItemText,primary:t.createElement(ct,{entityRef:(n=e.ownerEntityRef)!=null?n:"No Owner"})})))},zr=({check:e})=>{const{id:n,name:a,description:r,isEditable:l,ownerEntityRef:o}=e,{loading:s,allowed:c}=me({permission:ja,resourceRef:n}),{loading:i,allowed:u}=me({permission:_a,resourceRef:n}),{showModal:m}=we(),{mutate:h}=Br(),{showReadOnlyModal:p,setSelectedCheck:g}=q(),E=H(async()=>{await m({title:"Delete Check",message:`Are you sure you want to delete the check '${a!=null?a:n}'?`})&&h(n)},[m,a,h,n]);return t.createElement(Ue,{title:a!=null?a:n,description:r,children:o&&t.createElement(Hr,{check:e}),handleView:()=>p(e),handleEdit:l&&!s&&c?()=>g(e):void 0,handleDelete:l&&!i&&u?E:void 0})},Wr=()=>t.createElement(t.Fragment,null,Array.from({length:10},(e,n)=>t.createElement(d,{key:`loading-${n}`,xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem"},t.createElement(He,{variant:"rect",height:385})))),qr=b(()=>({searchIcon:{opacity:".5"},clearButton:{height:"36px",width:"36px"}})),Mt=({searchTerm:e,setSearchTerm:n,showClear:a=!0,placeholder:r="Search...",...l})=>{const o=qr(),s=i=>{n(i.target.value)},c=()=>{n("")};return t.createElement($,{...l,fullWidth:!0,placeholder:r,value:e,onChange:s,InputProps:{startAdornment:t.createElement(nt,{position:"start"},t.createElement(on,{className:o.searchIcon,"data-testid":"search-icon"})),endAdornment:a&&e?t.createElement(nt,{position:"end"},t.createElement(ve,{edge:"end",onClick:c,className:o.clearButton},t.createElement(Ve,null))):null}})},Kr=b(()=>({searchbar:{maxWidth:"350px"},filters:{display:"flex",alignItems:"center"},dropdownFilters:{margin:"0 15px",display:"flex",alignItems:"center"},selectHolder:{marginLeft:"10px"}})),Vt=({searchPlaceholder:e,isLoading:n,searchTerm:a,setSearchTerm:r,filterAlpha:l,handleAlphabeticalFilterChange:o,filterOwner:s,handleOwnerFilterChange:c,owners:i})=>{const u=Kr();return t.createElement(d,{item:!0,xs:9,className:u.filters},t.createElement(Mt,{searchTerm:a,disabled:n,setSearchTerm:r,placeholder:e||"Search",variant:"outlined",size:"small",className:u.searchbar}),t.createElement("div",{className:u.dropdownFilters},t.createElement(v,null,"Sort by: "),t.createElement(rt,{className:u.selectHolder,value:l,onChange:o},t.createElement("option",{value:"default"},"Default"),t.createElement("option",{value:"ascending"},"Name A-Z"),t.createElement("option",{value:"descending"},"Name Z-A"))),t.createElement("div",{className:u.dropdownFilters},t.createElement(v,null,"Filter by owner: "),t.createElement(rt,{className:u.selectHolder,value:s,onChange:c},t.createElement("option",{key:"all",value:"all"},"All"),i==null?void 0:i.map((m,h)=>t.createElement("option",{key:m+h,value:m},m)))))},Ur=(e,n)=>e==null?void 0:e.sort((a,r)=>{var l,o,s,c;const i=(o=(l=a==null?void 0:a.name)==null?void 0:l.toLocaleLowerCase())!=null?o:a==null?void 0:a.id.toLocaleLowerCase(),u=(c=(s=r==null?void 0:r.name)==null?void 0:s.toLocaleLowerCase())!=null?c:r==null?void 0:r.id.toLocaleLowerCase();return!i||!u?0:i<u?n==="ascending"?-1:1:i>u?n==="ascending"?1:-1:0}),Bt=e=>{const n=e==null?void 0:e.map(a=>a==null?void 0:a.ownerEntityRef).filter(a=>a!=="");return[...new Set(n)]},ue=({searchTermProp:e,filterAlphaProp:n,filterOwnerProp:a,checks:r,tracks:l})=>{var o,s;const c=r||l||[],i=(o=c==null?void 0:c.filter)==null?void 0:o.call(c,m=>{var h;return((h=m==null?void 0:m.name)!=null?h:m==null?void 0:m.id).toLocaleLowerCase().includes(e.toLocaleLowerCase())}),u=a&&a!=="all"?(s=i==null?void 0:i.filter)==null?void 0:s.call(i,m=>{var h;return((h=m==null?void 0:m.ownerEntityRef)==null?void 0:h.toLowerCase())===a.toLowerCase()}):i;return n==="default"?u:Ur(u!=null?u:[],n)},jr=b(e=>({pagination:{width:"-webkit-fill-available",display:"flex",justifyContent:"center",position:"fixed",bottom:"0",backgroundColor:e.palette.type==="dark"?"#333333":"#F8F8F8",marginRight:"40px"}})),Gt=({response:e,listingsPerPage:n,cursor:a,setCursor:r,prevCursors:l,setPrevCursors:o,labelPerPageDropdown:s,urlRoute:c})=>{var i;const u=jr(),m=e!=null&&e.edges?e==null?void 0:e.edges[(e==null?void 0:e.edges.length)-1]:{cursor:""},[h,p]=f(0),g=()=>{o(L=>[...L,a]),r(m==null?void 0:m.cursor)},E=()=>{r(l[l.length-1]),o(L=>L.slice(0,-1))},y=(L,A)=>{p(x=>(A>x?g():E(),A))},k=L=>{window.open(`/soundcheck/${c!=null?c:"tracks?tracksPerPage="}${L.target.value}`,"_self")};return t.createElement(xa,{className:u.pagination,component:"div",count:(i=e==null?void 0:e.totalCount)!=null?i:-1,rowsPerPage:n!=null?n:10,onPageChange:y,page:h,onRowsPerPageChange:k,labelRowsPerPage:s!=null?s:"Listings per page:",rowsPerPageOptions:[]})},_r=b(e=>({headerButtons:{display:"flex",gap:e.spacing(1),flexWrap:"nowrap",justifyContent:"end",alignItems:"center"},header:{padding:e.spacing(0,0,1)}})),Qr=({checksPerPage:e,currentCursor:n})=>{const a=_r(),[r,l]=f(n),[o,s]=f([]),{data:c,isLoading:i}=bt(void 0,e,r),{loading:u,allowed:m}=me({permission:Qa}),[h,p]=f(c);P(()=>{c&&p(()=>{var w;return{endCursor:c.endCursor,totalCount:c.totalCount,hasNextPage:(w=c==null?void 0:c.hasNextPage)!=null?w:!1,edges:c.edges}})},[c]);const g=h==null?void 0:h.edges.map(w=>w.checker),{setShowAddModal:E}=q(),[y,k]=f(),[L,A]=f(""),[x,D]=f("default"),[R,M]=f("all"),[pe,K]=f([]),ee=w=>{const F=ue({searchTermProp:L,filterAlphaProp:w.target.value,filterOwnerProp:R,checks:g!=null?g:[]});D(w.target.value),k(F)},he=w=>{const F=ue({searchTermProp:L,filterAlphaProp:x,filterOwnerProp:w.target.value,checks:g!=null?g:[]});M(w.target.value),k(F)};return P(()=>{const w=h==null?void 0:h.edges.map(J=>J.checker),F=Bt(w!=null?w:[]);k(w),K(F!=null?F:[])},[i,h]),P(()=>{const w=h==null?void 0:h.edges.map(J=>J.checker),F=ue({searchTermProp:L,filterAlphaProp:x,filterOwnerProp:R,checks:w!=null?w:[]});k(F)},[L,x,R,h]),t.createElement(d,{container:!0,direction:"row"},t.createElement(d,{container:!0,spacing:4,className:a.header},t.createElement(Vt,{searchPlaceholder:"Search available checks",isLoading:i,searchTerm:L,setSearchTerm:A,filterAlpha:x,handleAlphabeticalFilterChange:ee,filterOwner:R,handleOwnerFilterChange:he,owners:pe}),t.createElement(d,{item:!0,xs:3},t.createElement("div",{className:a.headerButtons},!u&&t.createElement(O,{disabled:!m,variant:"contained",color:"primary",onClick:()=>E(!0)},"Create Check")))),t.createElement(d,{container:!0,spacing:4,role:"list","aria-label":"checks"},i?t.createElement(Wr,null):y==null?void 0:y.map(w=>t.createElement(d,{key:w.id,xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem","aria-label":"result"},t.createElement(zr,{check:w})))),((h==null?void 0:h.hasNextPage)||(o==null?void 0:o.length)>0)&&t.createElement(Gt,{response:h,listingsPerPage:e,cursor:r,setCursor:l,prevCursors:o,setPrevCursors:s,labelPerPageDropdown:"Checks Per Page:",urlRoute:"checks?checksPerPage="}))},Yr=()=>{const{selectedCheck:e}=q();return t.createElement(Ke,{title:"Check Details",open:!!e,onSave:()=>{}})},Jr=b(e=>({checksPageContainer:{padding:e.spacing(3)}})),Xr=()=>{const e=Jr(),[n]=Xe(),a=n.get("checksPerPage"),r=a?parseInt(a,10):9,{selectedCheck:l,showAddModal:o,isReadOnly:s}=q();return t.createElement("div",{className:e.checksPageContainer},t.createElement(Qr,{checksPerPage:r}),o&&t.createElement(Rr,null),l&&!s&&t.createElement(Ir,null),l&&s&&t.createElement(Yr,null))},Zr=()=>t.createElement(Rn,null,t.createElement(Xr,null)),el=b(e=>({root:{position:"relative",height:"100%"},cardSection:{marginBottom:e.spacing(2)},listItem:{padding:0},listItemText:{margin:0}})),tl=({program:e})=>{var n,a,r;const l=el(),o=(a=(n=e.levels)==null?void 0:n.length)!=null?a:0,s=(r=e.levels)==null?void 0:r.reduce((c,i)=>c+i.checks.length,0);return t.createElement(Oe,{dense:!0,disablePadding:!0,className:l.cardSection},t.createElement(v,{variant:"overline",color:"textSecondary"},"Track Details"),t.createElement(Q,{disableGutters:!0,className:l.listItem},t.createElement(le,{title:"Levels"},t.createElement(ne,null,t.createElement(hn,{color:"action",fontSize:"small"}))),t.createElement(re,{className:l.listItemText,primary:t.createElement(v,{variant:"body2",color:"textSecondary"},`${o} ${o===1?"Level":"Levels"}`)})),t.createElement(Q,{disableGutters:!0,className:l.listItem},t.createElement(le,{title:"Checks"},t.createElement(ne,null,t.createElement(pn,{color:"action",fontSize:"small"}))),t.createElement(re,{className:l.listItemText,primary:t.createElement(v,{variant:"body2",color:"textSecondary"},`${s} ${s===1?"Check":"Checks"}`)})),e.documentationURL&&t.createElement(Q,{disableGutters:!0,className:l.listItem},t.createElement(le,{title:"Documentation"},t.createElement(ne,null,t.createElement(un,{color:"action",fontSize:"small"}))),t.createElement(re,{className:l.listItemText,primary:t.createElement(ca,{to:e.documentationURL,target:"_blank",rel:"noopener noreferrer"},"Learn more")})),t.createElement(Q,{disableGutters:!0,className:l.listItem},t.createElement(le,{title:"Owner"},t.createElement(ne,null,t.createElement(dt,{color:"action",fontSize:"small"}))),t.createElement(re,{className:l.listItemText,primary:t.createElement(ct,{entityRef:e.ownerEntityRef})})))},al="Error Deleting Track";function nl(){const e=I(G),n=se(),{showAlert:a}=Z(),r=async l=>{const o=await e.deleteProgram(l);if(!o)throw new Error(`Failed to delete track ${l}`);return o};return ie([ce.DeleteProgram],r,{onSuccess:()=>{n.invalidateQueries({queryKey:[T.GetAllPrograms]})},onError:(l,o)=>{let s=`Failed to delete track ${o}`;l instanceof Error&&(s=l.message),a({severity:"error",title:al,message:s})}})}const rl=({summary:e})=>{const{loading:n,allowed:a}=me({permission:Ya,resourceRef:e.id}),{loading:r,allowed:l}=me({permission:Ja,resourceRef:e.id}),{showModal:o}=we(),{mutate:s}=nl(),{setSelectedProgram:c}=de(),i=H(async()=>{await o({title:"Delete Track",message:`Are you sure you want to delete track ${e.name}?`})&&s(e.id)},[o,e.id,e.name,s]);return t.createElement(Ue,{title:e.name,description:e.description,children:t.createElement(tl,{program:e}),handleView:()=>{c(e)},handleEdit:e.isEditable&&!n&&a?()=>{c(e)}:void 0,handleDelete:e.isEditable&&!r&&l?i:void 0})},ll=()=>t.createElement(t.Fragment,null,Array.from({length:6},(e,n)=>t.createElement(d,{key:`loading-${n}`,xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem"},t.createElement(He,{variant:"rect",height:385})))),ol=b(e=>({headerButtons:{display:"flex",gap:e.spacing(1),flexWrap:"nowrap",justifyContent:"end"},header:{padding:e.spacing(0,0,1)}})),sl=({programsPerPage:e,currentCursor:n})=>{var a;const r=ol(),{loading:l,allowed:o}=me({permission:Xa}),{setShowAddModal:s}=de(),[c,i]=f(n),[u,m]=f([]),{data:h,isLoading:p}=Pn(void 0,e,c),[g,E]=f(h);P(()=>{h&&E(()=>{var S;return{endCursor:h.endCursor,totalCount:h.totalCount,hasNextPage:(S=h==null?void 0:h.hasNextPage)!=null?S:!1,edges:h.edges}})},[h]);const y=(a=g==null?void 0:g.edges)==null?void 0:a.map(S=>S==null?void 0:S.program),{userEntityRef:k}=lt(),{showAlert:L}=Z(),[A,x]=f(),[D,R]=f(""),[M,pe]=f("default"),[K,ee]=f("all"),[he,w]=f([]),F=S=>{const V=ue({searchTermProp:D,filterAlphaProp:S.target.value,filterOwnerProp:K,tracks:y!=null?y:[]});pe(S.target.value),x(V)},J=S=>{const V=ue({searchTermProp:D,filterAlphaProp:M,filterOwnerProp:S.target.value,tracks:y!=null?y:[]});ee(S.target.value),x(V)};P(()=>{const S=g==null?void 0:g.edges.map(ge=>ge.program),V=Bt(S!=null?S:[]);x(S),w(V!=null?V:[])},[p,g]),P(()=>{const S=g==null?void 0:g.edges.map(ge=>ge.program),V=ue({searchTermProp:D,filterAlphaProp:M,filterOwnerProp:K,tracks:S!=null?S:[]});x(V)},[D,M,K,g]);const ke=()=>{k?s(!0):L({severity:"error",title:"User Error",message:"Logged in user has not been found in Catalog. Unable to create a Track at this time"})};return t.createElement(d,{container:!0,direction:"row"},t.createElement(d,{container:!0,spacing:4,className:r.header},t.createElement(Vt,{searchPlaceholder:"Search available tracks",isLoading:p,searchTerm:D,setSearchTerm:R,filterAlpha:M,handleAlphabeticalFilterChange:F,filterOwner:K,handleOwnerFilterChange:J,owners:he}),t.createElement(d,{item:!0,xs:3},t.createElement("div",{className:r.headerButtons},!l&&t.createElement(O,{disabled:!o,variant:"contained",color:"primary",onClick:()=>ke()},"Create Track")))),t.createElement(d,{container:!0,spacing:4,role:"list","aria-label":"tracks"},p?t.createElement(ll,null):A==null?void 0:A.map(S=>t.createElement(d,{key:S.id,xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem","aria-label":"result"},t.createElement(rl,{summary:S})))),((g==null?void 0:g.hasNextPage)||(u==null?void 0:u.length)>0)&&t.createElement(Gt,{response:g,listingsPerPage:e,cursor:c,setCursor:i,prevCursors:u,setPrevCursors:m,labelPerPageDropdown:"Track Per Page:",urlRoute:"tracks?tracksPerPage="}))},il=b(e=>({titleInput:{marginBottom:e.spacing(1)},title:{fontWeight:700}})),cl=({programName:e,programNameError:n,handleProgramNameChange:a,disabled:r})=>{const l=il();return t.createElement(d,{item:!0,xs:12},t.createElement($,{fullWidth:!0,placeholder:"Untitled track",value:e,onChange:a,disabled:r,className:l.titleInput,variant:"outlined",size:"small",margin:"normal",error:n,helperText:n?"Track name must be at least 1 character and less than 100 characters":""}))},Ht=b(e=>{const n=e.palette.type==="dark",a=n?e.palette.common.white:e.palette.common.black,r=n?e.palette.grey[700]:e.palette.common.white,l=n?e.palette.grey[500]:e.palette.grey[300],o=n?e.palette.common.white:e.palette.common.black;return{chip:{width:"100%",height:"36px",color:a,justifyContent:"space-between",background:r,border:`1px solid ${l}`,borderRadius:4,boxShadow:"0px 2px 5px rgba(0, 0, 0, 0.1)",cursor:"move","& *":{fontWeight:700},"&:focus":{background:r,borderColor:o,"& $icon":{color:e.palette.primary.main}}},icon:{},deleteButton:{marginRight:"auto"}}}),ml=({chip:e,disabled:n})=>{var a;const[r,l]=sn(()=>({type:"chip",item:{id:e.id,label:e.label},collect:s=>({isDragging:s.isDragging()})})),o=Ht();return t.createElement(Me,{ref:l,label:e.label,className:o.chip,icon:t.createElement(ut,{"data-testid":"drag-indicator-icon"}),disabled:n,onDelete:()=>{},deleteIcon:t.createElement(le,{title:(a=e.description)!=null?a:""},t.createElement(gn,{className:o.icon,"data-testid":"visibility-icon"}))})},zt=b(e=>({columnHeader:{display:"flex",justifyContent:"space-between",alignItems:"center"},subtitle:{color:e.palette.primary.main,fontWeight:"bold"},chipContainer:{display:"flex",flexDirection:"column",alignItems:"flex-start",padding:e.spacing(1),gap:e.spacing(1)},loadingContainer:{marginTop:e.spacing(1),display:"flex",justifyContent:"center",alignItems:"center",height:"100%"}})),dl=()=>{const e=zt();return t.createElement(d,{container:!0,className:e.loadingContainer},t.createElement(wa,null))},ul=({chips:e,disabled:n})=>t.createElement(t.Fragment,null,e.map(a=>t.createElement(ml,{disabled:n,key:a.id,chip:a}))),pl=()=>t.createElement(v,{variant:"body1",color:"textSecondary"},"There are no matches."),hl=({isLoading:e,chips:n=[],disabled:a})=>{const r=zt(),[l,o]=f(""),s=_(()=>n.filter(u=>u.label.toLowerCase().includes(l.toLowerCase())),[n,l]),c=n.length>0||l,i=()=>{if(e)return t.createElement(dl,null);if(s.length>0)return t.createElement(ul,{disabled:a!=null?a:!1,chips:s});if(c)return t.createElement(pl,null)};return t.createElement(d,{container:!0},t.createElement(d,{item:!0,xs:12,className:r.columnHeader},t.createElement(v,{className:r.subtitle},"Checks")),t.createElement(d,{item:!0,xs:12},t.createElement(Mt,{searchTerm:l,disabled:e||a,setSearchTerm:o,placeholder:"Search available checks",variant:"outlined",size:"small"})),t.createElement(d,{item:!0,className:r.chipContainer,xs:12},i()))},gl=b(e=>({button:{border:"none",fontWeight:700,fontSize:e.typography.subtitle2.fontSize,lineHeight:"19px",color:e.palette.primary.main,textTransform:"none"}})),Wt=({label:e,...n})=>{const a=gl();return t.createElement(O,{className:a.button,...n},e)},El=b(e=>({input:{border:`1px solid ${e.palette.grey[600]}`,borderRadius:4,padding:e.spacing(1),minHeight:80},hoverBackground:{background:e.palette.type==="dark"?e.palette.grey[600]:e.palette.grey[200]},normalBackground:{background:e.palette.type==="dark"?e.palette.grey[700]:e.palette.common.white},error:{border:"1px solid red"},chipContainer:{display:"flex",flexDirection:"column",fontWeight:"bold",fontSize:e.typography.pxToRem(16),color:e.palette.grey[600]}})),vl=({chips:e,onDelete:n,onDrop:a,error:r=!1,placeholder:l="",disabled:o})=>{const s=El(),c=Ht(),[{isOver:i},u]=cn(()=>({accept:"chip",drop:m=>{a(m)},collect:m=>({isOver:m.isOver()})}));return t.createElement("div",{ref:u,className:`${s.input} ${r?s.error:""} ${i?s.hoverBackground:s.normalBackground}`,"data-testid":"droppable-input"},t.createElement("div",{className:s.chipContainer},e!=null&&e.length?e.map(m=>t.createElement(Me,{key:m.id,label:m.label,className:c.chip,icon:t.createElement(ut,null),style:{cursor:"pointer"},onDelete:()=>n(m),disabled:o})):l))},fl=b(e=>({inputBase:{fontSize:e.typography.subtitle1.fontSize,fontWeight:700}})),yl=({levelName:e,handleLevelNameChange:n,disabled:a})=>{const r=fl();return t.createElement($,{fullWidth:!0,placeholder:"Untitled level",value:e,size:"small",variant:"outlined",onChange:n,label:"Level Name",disabled:a,InputProps:{classes:{input:r.inputBase}}})},bl=b(e=>({inputBase:{fontSize:e.typography.fontSize,fontWeight:"normal"}})),Cl=({levelDescription:e,levelNameLabel:n,handleLevelDescriptionChange:a,disabled:r})=>{const l=bl();return t.createElement($,{fullWidth:!0,placeholder:"Enter description here",multiline:!0,value:e,size:"small",variant:"outlined",label:`${n} Description`,onChange:a,disabled:r,InputProps:{classes:{input:l.inputBase}}})},kl=b(e=>({columnHeader:{display:"flex",justifyContent:"space-between",alignItems:"center"},subtitle:{fontWeight:"bold",color:e.palette.primary.main},levelHeader:{display:"flex",alignItems:"center"},removeButton:{minWidth:150}})),xl=({inputChipsList:e,handleDelete:n,handleDrop:a,addInput:r,removeInput:l,levelsErrors:o,levelNames:s,levelDescriptions:c,handleLevelNameChange:i,handleLevelDescriptionChange:u,disabled:m})=>{const h=kl();return t.createElement(d,{container:!0},t.createElement(d,{item:!0,xs:12,className:h.columnHeader},t.createElement(v,{className:h.subtitle},"Levels"),!m&&t.createElement(Wt,{label:"Add Level",startIcon:t.createElement(pt,null),onClick:r,disabled:m})),t.createElement(d,{container:!0,item:!0,spacing:5},e.map((p,g)=>t.createElement(d,{container:!0,item:!0,xs:12,key:g,spacing:2},t.createElement(d,{item:!0,xs:12,className:h.levelHeader},t.createElement(d,{container:!0,spacing:1},t.createElement(d,{item:!0,xs:!0},t.createElement(yl,{levelName:s[g],handleLevelNameChange:E=>i(E.target.value,g),disabled:m!=null?m:!1})),e.length>1&&!m&&t.createElement(d,{item:!0,className:h.removeButton},t.createElement(Wt,{label:"Remove Level",startIcon:t.createElement(ht,null),onClick:()=>l(g),disabled:m})))),t.createElement(d,{item:!0,xs:12},t.createElement(vl,{chips:p,onDelete:E=>n(E,g),onDrop:E=>a(E,g),error:o[g],placeholder:"Drag and drop checks here to include them in this level",disabled:m})),t.createElement(d,{item:!0,xs:12},t.createElement(Cl,{levelDescription:c[g],levelNameLabel:s[g],handleLevelDescriptionChange:E=>u(E.target.value,g),disabled:m!=null?m:!1}))))))},wl=b(e=>({titleInput:{marginBottom:e.spacing(1)},regularFontSize:{fontSize:e.typography.fontSize},title:{fontWeight:700,fontSize:e.typography.fontSize}})),Sl=({programDescription:e,programDescriptionError:n,handleProgramDescriptionChange:a,disabled:r})=>{const l=wl();return t.createElement(d,{item:!0,xs:12},t.createElement($,{fullWidth:!0,placeholder:"Example: Make sure the project has a ReadMe file and is using the latest version of JavaScript",value:e,onChange:a,disabled:r,className:l.titleInput,minRows:4,variant:"outlined",size:"small",margin:"normal",multiline:!0,InputProps:{classes:{input:l.regularFontSize}},error:n,helperText:n?"Track description must be at least 1 character and less than 250 characters":""}))};var Ll=(e=>(e.SetProgramNameError="VALIDATE_NAME",e.SetName="SET_NAME",e))(Ll||{});const Nl={programName:"",programNameError:!1},Pl=(e,n)=>{switch(n.type){case"SET_NAME":return{...e,programName:n.value};case"VALIDATE_NAME":return{...e,programNameError:n.value};default:return e}},Tl=(e="")=>{const[n,a]=De(Pl,{...Nl,programName:e}),r=()=>{const s=n.programName.trim().length,c=s>0&&s<=100;return a({type:"VALIDATE_NAME",value:!c}),c},l=s=>{a({type:"SET_NAME",value:s})},o=s=>{l(s.target.value),n.programNameError&&r()};return{programName:n.programName,programNameError:n.programNameError,handleProgramNameChange:o,setProgramName:l,isProgramNameValid:r}};var Dl=(e=>(e.SetProgramDescriptionError="VALIDATE_DESCRIPTION",e.SetDescription="SET_DESCRIPTION",e))(Dl||{});const Il={programDescription:"",programDescriptionError:!1},$l=(e,n)=>{switch(n.type){case"SET_DESCRIPTION":return{...e,programDescription:n.value};case"VALIDATE_DESCRIPTION":return{...e,programDescriptionError:n.value};default:return e}},Al=(e="")=>{const[n,a]=De($l,{...Il,programDescription:e}),r=()=>{const s=n.programDescription.trim().length,c=s>0&&s<=250;return a({type:"VALIDATE_DESCRIPTION",value:!c}),c},l=s=>{a({type:"SET_DESCRIPTION",value:s})},o=s=>{l(s.target.value),n.programDescriptionError&&r()};return{programDescription:n.programDescription,programDescriptionError:n.programDescriptionError,handleProgramDescriptionChange:o,setProgramDescription:l,isProgramDescriptionValid:r}},Rl=({programName:e,programDescription:n,areInputsValid:a,isProgramNameValid:r,isProgramDescriptionValid:l,inputChipsList:o,checkers:s,onSave:c,programId:i,levelNames:u,levelDescriptions:m,filters:h})=>{const{showModal:p}=we(),{userEntityRef:g}=lt();return async()=>{if(!(r()&&l()&&a())||!await p({title:"Save Track",message:`Are you sure you want to save track: ${e}?`})||!g)return;const E=i!=null?i:mt(),y=Xn(o,u,m,s),k={description:n,id:E,levels:y,name:e,ownerEntityRef:g,filter:Pt(h)};c(k)}},Fl=e=>{const n=_(()=>e?er(e):null,[e]),[a,r]=f([]),[l,o]=f(!1),{data:s,isLoading:c}=bt(),i=s==null?void 0:s.edges.map(x=>x.checker),u=_(()=>(i!=null?i:[]).filter(x=>!!x).map(x=>{var D,R,M;return{id:(D=x.id)!=null?D:"",label:(R=x.name)!=null?R:x.id,description:(M=x.description)!=null?M:""}}),[i]),{chips:m,inputChipsList:h,handleDrop:p,handleDelete:g,addInput:E,removeInput:y,inputErrors:k,areInputsValid:L,setInputChipsList:A}=In(a);return P(()=>{if(!a.length&&u.length&&!l){const{inputChips:x,used:D}=rr(n,u);A(x),r(D),o(!0)}},[u,A,a.length,n,l]),{checkers:i,checkersLoading:c,chips:m,inputChipsList:h,handleDrop:p,handleDelete:g,addInput:E,removeInput:y,inputErrors:k,areInputsValid:L}},Ol=e=>{const[n,a]=f(e);return{levelNames:n,handleLevelNameChange:(r,l)=>{a(n.map((o,s)=>s===l?r:o))},addLevelName:r=>{a([...n,r])},removeLevelName:r=>{a(n.filter((l,o)=>o!==r))}}},Ml=e=>{const[n,a]=f(e);return{levelDescriptions:n,handleLevelDescriptionChange:(r,l)=>{a(n.map((o,s)=>s===l?r:o))},addLevelDescription:r=>{a([...n,r])},removeLevelDescription:r=>{a(n.filter((l,o)=>o!==r))}}},Vl=b(e=>({title:{fontWeight:700},filterContainer:{display:"flex",flexWrap:"wrap",padding:e.spacing(2)},description:{fontSize:e.typography.fontSize}})),Bl=({filters:e,setFilters:n,disabled:a})=>{const r=Vl(),l=o=>s=>{n(o,s!=null?s:[])};return t.createElement(Ce,{title:a?"Filters":"Filters (optional)"},t.createElement(d,{container:!0,item:!0,xs:12,spacing:2},!a&&t.createElement(d,{item:!0},t.createElement(v,{className:r.description},"Apply filters so it's only applicable to relevant entities.")),t.createElement(d,{item:!0,xs:12},t.createElement(Ee,null,t.createElement(d,{container:!0,className:r.filterContainer,spacing:2},Rt.map(o=>t.createElement(d,{item:!0,xs:12,sm:6,md:4,key:o.stateKey},t.createElement(Ft,{facet:o.facet,label:o.label,values:e[o.stateKey],onChange:l(o.stateKey),disabled:a}))))))))};var Gl=(e=>(e.SetFilter="SET_FILTER",e))(Gl||{});const Hl={selectedKinds:[],selectedTypes:[],selectedLifecycles:[],selectedOwners:[],selectedSystems:[],selectedTags:[]},zl=(e,n)=>{switch(n.type){case"SET_FILTER":return{...e,[n.key]:n.values};default:return e}},Wl=e=>{let n=Hl;e&&(n=Tt(e));const[a,r]=De(zl,n);return{filters:a,setFilters:(l,o)=>{r({type:"SET_FILTER",key:l,values:o})}}},ql=b(e=>({regularFontSize:{fontSize:e.typography.fontSize,fontWeight:"bold"},description:{fontWeight:"normal",fontSize:e.typography.fontSize},root:{overflow:"hidden",display:"flex",padding:e.spacing(1),marginBottom:"53px"}})),qt=({onSave:e,title:n,open:a,handleClose:r})=>{var l,o,s,c;const{selectedProgram:i,isLoading:u,setSelectedProgram:m}=de(),{checkers:h,checkersLoading:p,chips:g,inputChipsList:E,handleDrop:y,handleDelete:k,addInput:L,removeInput:A,inputErrors:x,areInputsValid:D}=Fl(i),{programName:R,programNameError:M,handleProgramNameChange:pe,isProgramNameValid:K}=Tl(i==null?void 0:i.name),{programDescription:ee,programDescriptionError:he,handleProgramDescriptionChange:w,isProgramDescriptionValid:F}=Al(i==null?void 0:i.description),J=(o=i?(l=i.levels)==null?void 0:l.map(B=>{var j;return(j=B.name)!=null?j:`Level ${B.ordinal}`}):E.map((B,j)=>`Level ${j+1}`))!=null?o:[],{levelNames:ke,handleLevelNameChange:S,addLevelName:V,removeLevelName:ge}=Ol(J),Jt=(c=i?(s=i.levels)==null?void 0:s.map(B=>{var j;return(j=B.description)!=null?j:""}):E.map((B,j)=>""))!=null?c:[],{levelDescriptions:Qe,handleLevelDescriptionChange:Xt,addLevelDescription:Zt,removeLevelDescription:ea}=Ml(Jt),ta=()=>{L(),V(`Level ${E.length+1}`),Zt("")},aa=B=>{A(B),ge(B),ea(B)},{filters:Ye,setFilters:na}=Wl(i==null?void 0:i.filter),ra=Rl({programName:R,programDescription:ee,areInputsValid:D,isProgramNameValid:K,isProgramDescriptionValid:F,inputChipsList:E,checkers:h,onSave:e,programId:i==null?void 0:i.id,levelNames:ke,levelDescriptions:Qe,filters:Ye}),Ne=ql(),Je=Ot(),U=i?!(i!=null&&i.isEditable):!1;return t.createElement(ze,{handleClose:r,title:n,open:a},t.createElement(d,{container:!0,spacing:4,className:Ne.root},t.createElement(d,{item:!0,xs:12},t.createElement(d,{item:!0,xs:12},t.createElement(v,{className:Je.sectionLabel,style:{margin:0}},"Track Details"),t.createElement(cl,{disabled:u||U,programName:R,programNameError:M,handleProgramNameChange:pe})),t.createElement(d,{item:!0,xs:12},t.createElement(Sl,{disabled:u||U,programDescription:ee,programDescriptionError:he,handleProgramDescriptionChange:w}))),t.createElement(d,{item:!0,xs:12},t.createElement(Bl,{disabled:U,filters:Ye,setFilters:na})),t.createElement(d,{item:!0,xs:12},t.createElement(d,{container:!0,spacing:4},t.createElement(d,{item:!0,xs:12},t.createElement(v,{className:Je.sectionLabel,style:{margin:0}},"Track Levels"),!U&&t.createElement(v,{className:Ne.description},"Add the checks that apply to each level. You can preview the checks to see the rules that apply to each check.")),!U&&t.createElement(d,{item:!0,xs:5},t.createElement(hl,{chips:g,isLoading:p||u,disabled:U})),t.createElement(d,{item:!0,xs:7},t.createElement(xl,{inputChipsList:E,handleDelete:k,handleDrop:y,addInput:ta,removeInput:aa,levelsErrors:x,levelNames:ke,handleLevelNameChange:S,levelDescriptions:Qe,handleLevelDescriptionChange:Xt,disabled:U}))))),t.createElement(d,{container:!0,spacing:4,className:Ne.root},t.createElement(Ct,{onCancel:()=>{m(null),r()},saveButtonText:"Save Track",isLoading:u||p,onSave:ra,disableSave:U})))},Kl=()=>{const{setIsLoading:e,setShowAddModal:n,showAddModal:a}=de(),{mutateAsync:r,isLoading:l}=Dn();return P(()=>{e(l)},[e,l]),t.createElement(qt,{handleClose:()=>n(!1),title:"Create Track",open:a,onSave:async o=>{await r(o)&&n(!1)}})},Ul="Error Updating Track";function jl(){const e=I(G),n=se(),{showAlert:a}=Z(),r=async l=>{const o=await e.updateProgram(l);if(!o)throw new Error("Failed to update track.");return o};return ie([ce.UpdateProgram],r,{onSuccess:async()=>{await n.invalidateQueries({queryKey:[T.GetAllPrograms]})},onError:l=>{let o="Failed to update track.";l instanceof Error&&(o=l.message),a({severity:"error",title:Ul,message:o})}})}const _l=()=>{const{setSelectedProgram:e,setIsLoading:n,selectedProgram:a}=de(),{mutateAsync:r,isLoading:l}=jl();P(()=>n(l),[n,l]);const o=async s=>{await r(s)&&e(null)};return t.createElement(qt,{handleClose:()=>e(null),title:a!=null&&a.isEditable?"Edit Track":"View Track",open:!!a,onSave:o})},Ql=b(e=>({programsPageContainer:{padding:e.spacing(3)},headerButtons:{display:"flex",gap:e.spacing(1),flexWrap:"nowrap"}})),Yl=()=>{const{selectedProgram:e,showAddModal:n}=de(),[a]=Xe(),r=a.get("tracksPerPage"),l=r?parseInt(r,10):9,o=Ql(),s="Programs will now be referred to as Tracks throughout the Soundcheck UI.";return t.createElement("div",{className:o.programsPageContainer},t.createElement(Ze,{variant:"info",message:s,id:"programTrackBanner"}),t.createElement(mn,{backend:dn},t.createElement(sl,{programsPerPage:l}),n&&t.createElement(Kl,null),e&&t.createElement(_l,null)))},Jl=()=>t.createElement(An,null,t.createElement(Yl,null)),Xl=z(e=>({root:{display:"flex",flexDirection:"row",padding:"0",margin:"-24px"},header:{display:"flex",justifyContent:"space-between",padding:e.spacing(2)},tabs:{borderBottom:`1px solid ${e.palette.border}`,marginBottom:e.spacing(2)},button:{marginRight:e.spacing(1)},filters:{flex:1},content:{flex:3}})),Kt=({children:e})=>t.createElement(C,{style:{height:"100%",minHeight:"150px"}},t.createElement(En,{width:"100%",height:150,debounce:1},e)),Ut=({data:e,lines:n})=>t.createElement(Kt,null,t.createElement(vn,{data:e},t.createElement(gt,{strokeDasharray:"3 3"}),t.createElement(Et,{dataKey:"name"}),t.createElement(vt,{width:25}),t.createElement(ft,null),t.createElement(yt,null),n.map((a,r)=>t.createElement(fn,{key:a.dataKey,type:"monotone",dataKey:a.dataKey,stroke:xe[r%xe.length],name:a.name})))),Zl=({chartData:e})=>t.createElement(Ut,{data:e,lines:[{dataKey:"passRate",name:"Check pass rate"}]}),eo=(e,n)=>{const a=new Date(e);return a.setDate(a.getDate()-n),a},je=e=>{let n=(e.getMonth()+1).toString(),a=e.getDate().toString();return n.length<2&&(n=`0${n}`),a.length<2&&(a=`0${a}`),[n,a].join("/")},to=e=>W([T.CheckPassRateOverview,e],async()=>{const n=new Date,a=Array.from({length:30},(r,l)=>{const o=eo(n,l);return{date:je(o),passRate:parseFloat((Math.random()*100).toFixed(2))}});return{checkPassRateOverview:{snapshotPassRate:parseFloat((a.reduce((r,l)=>r+l.passRate,0)/30).toFixed(2)),passRateTrend:a.reverse()}}}),jt=(e,n)=>Array.from({length:e},(a,r)=>{const l=new Date;return l.setDate(l.getDate()-r),{name:je(l),[n]:Math.floor(Math.random()*100)}}).filter(Boolean).reverse(),ao=e=>W([T.TrackHistory,e],async()=>{const n=["Level1","Level2","Level3"];let a=jt(30,n[0]);return n.slice(1).forEach(r=>{const l=jt(30,r);a=a.map((o,s)=>({...o,...l[s]}))}),{levels:a}}),no=b(e=>({header:{display:"flex",justifyContent:"space-between",marginBottom:e.spacing(2)}})),ro=()=>{var e,n;const a=no(),{data:r}=ao(),l=(e=["Level1","Level2","Level3"].map(o=>({dataKey:o,name:o})))!=null?e:[];return t.createElement(C,null,t.createElement(C,{className:a.header},t.createElement(v,{variant:"h6"},"Trend")),t.createElement(Ut,{data:(n=r==null?void 0:r.levels)!=null?n:[],lines:l}))},lo=t.memo(({data:e,bars:n})=>t.createElement(Kt,{"aria-label":"Bar chart representing data points."},t.createElement(yn,{data:e},t.createElement(gt,{strokeDasharray:"3 3"}),t.createElement(Et,{dataKey:"name"}),t.createElement(vt,{width:25}),t.createElement(ft,null),t.createElement(yt,null),n.map((a,r)=>t.createElement(bn,{key:a.dataKey,dataKey:a.dataKey,fill:xe[r%xe.length],name:a.name}))))),oo=["Level 1","Level 2","Level 3"],so=(e,n)=>{const a=Array.from({length:e},()=>Math.floor(Math.random()*100)).reduce((l,o)=>l+o,0),r=Math.floor(a/e);return{name:n,[n.replace(/\s/g,"")]:r}},io=e=>W([T.TrackSummary,e],async()=>({data:oo.map(n=>so(30,n))})),co=()=>{var e;const{data:n}=io(),a=["Level 1","Level 2","Level 3"].map(r=>({dataKey:r.replace(/\s/g,""),name:r}));return t.createElement(lo,{data:(e=n==null?void 0:n.data)!=null?e:[],bars:a})},_t=z(e=>({card:{display:"flex",flexDirection:"column",padding:e.spacing(1,2),gap:e.spacing(1),border:`1px solid ${e.palette.divider}`},title:{fontWeight:"bold"},contentRow:{display:"flex",gap:e.spacing(2)},leftSection:{flex:1},summaryCard:{flex:1,height:"100%",border:`1px solid ${e.palette.divider}`,padding:e.spacing(1,2),display:"flex",flexDirection:"column",justifyContent:"space-between"},chartSection:{flex:3,padding:e.spacing(1,2),border:`1px solid ${e.palette.divider}`},percentage:{fontSize:"5.5em",fontWeight:"bold",textAlign:"center"}})),Le=({title:e,summaryCardContent:n,chartSectionContent:a})=>{const r=_t();return t.createElement(Re,{className:r.card},t.createElement(C,{className:r.contentRow},t.createElement(C,{className:r.leftSection},t.createElement(v,{variant:"h6",className:r.title},e))),t.createElement(C,{className:r.contentRow},t.createElement(C,{className:r.leftSection},t.createElement(C,{className:r.summaryCard},n)),t.createElement(C,{className:r.chartSection},a)))},mo=b(e=>({chartHeader:{marginBottom:e.spacing(2)}})),uo=()=>{var e,n;const a=mo(),r=_t(),{data:l}=to(),o=(n=(e=l==null?void 0:l.checkPassRateOverview)==null?void 0:e.passRateTrend)==null?void 0:n.map(u=>({name:je(new Date(u.date)),passRate:Math.round(u.passRate)})).filter(Boolean),s=l!=null&&l.checkPassRateOverview.snapshotPassRate?`${Math.round(l==null?void 0:l.checkPassRateOverview.snapshotPassRate)}%`:"Loading...",c=t.createElement(C,null,t.createElement(v,null,"Overall pass rate for the past 30 days."),t.createElement(v,{className:r.percentage},s)),i=t.createElement(C,null,t.createElement(v,{variant:"h6",className:a.chartHeader},"Trend"),t.createElement(Zl,{chartData:o}));return t.createElement(Le,{title:"Check pass rate",summaryCardContent:c,chartSectionContent:i})},po=()=>t.createElement(Le,{title:"Track pass rate",summaryCardContent:t.createElement(C,null,t.createElement(v,null,"Pass rate per level"),t.createElement(co,null)),chartSectionContent:t.createElement(ro,null)}),ho=()=>t.createElement(Le,{title:"Entity pass rate",summaryCardContent:t.createElement(C,null,t.createElement(v,null,"Pass rate per entity")),chartSectionContent:t.createElement(t.Fragment,null)}),go=()=>t.createElement(Le,{title:"Group pass rate",summaryCardContent:t.createElement(C,null,t.createElement(v,null,"Pass rate per group")),chartSectionContent:t.createElement(t.Fragment,null)}),Eo=z(e=>({root:{display:"flex",flexDirection:"column",gap:e.spacing(2),padding:e.spacing(2)}})),vo=()=>{const e=Eo();return t.createElement(C,{className:e.root},t.createElement(uo,null),t.createElement(po,null),t.createElement(ho,null),t.createElement(go,null))},fo=b(()=>({chipsContainer:{display:"flex",flexWrap:"wrap"},addedFilters:{width:"100%",marginBottom:"15px",position:"relative"},filterLabel:{position:"absolute",top:"-12px",left:"9px",fontSize:"0.8rem"}})),Qt=({filterChips:e,setFilterChips:n})=>{const a=fo(),r=l=>()=>{n(o=>o.filter(s=>s.key!==l.key))};return t.createElement(Ee,{variant:"outlined",className:a.addedFilters,style:{padding:"15px"}},t.createElement(v,{className:a.filterLabel},"Filters"),t.createElement("div",{className:a.chipsContainer},e==null?void 0:e.map(l=>{var o;return t.createElement(Me,{label:(o=l.label)!=null?o:"Default Label",key:l.key,onDelete:r(l),deleteIcon:t.createElement(Ve,null),size:"small"})})))};function yo(){const e=I(it);return W([T.GetAllEntityNames],async()=>{const{items:n}=await e.getEntities({filter:{kind:["Component","Service","System","Website"]},fields:["metadata.name"]});return n.map(({metadata:{name:a}})=>a)})}const bo=b(e=>({filterChips:{marginBottom:e.spacing(1)},summary:{marginBottom:e.spacing(3)},grid:{width:"100%"}})),Co=()=>{const e=bo(),{data:n}=yo(),[a,r]=f([]),[l,o]=f(""),s=(c,i)=>{o(c.timeStamp.toString()),!(!i||a.some(({label:u})=>u===i))&&r(u=>[...u,{key:u.length>0?u[u.length-1].key+1:0,label:i}])};return t.createElement(d,{className:e.grid},t.createElement(v,{className:e.summary},"Filter your view by software"),t.createElement("div",{className:e.filterChips},t.createElement(Qt,{filterChips:a,setFilterChips:r})),t.createElement(Cn,{key:l,disablePortal:!0,id:"entity-search-box",options:n!=null?n:[],onChange:s,renderInput:c=>t.createElement($,{...c,variant:"outlined",placeholder:"Select an entity"})}))},ko=b(()=>({formControl:{padding:"25px",margin:"5px",width:"33%",minWidth:"75px",minHeight:"50px"},selectContainer:{padding:"25px",margin:"5px",width:"100%",minWidth:"100px",minHeight:"50px","& > div":{textAlign:"center",paddingTop:"16px",paddingBottom:"16px"}},textField:{width:"100%",minWidth:"75px",margin:"0",marginLeft:"5px","& input":{padding:"16px"},"& > label":{transform:"translate(14px, 15px) scale(1)"},'& > label[data-shrink="true"]':{transform:"translate(14px, -11px) scale(0.75)"}}})),_e=({setFilterValue:e,inputLabel:n,filterValue:a,mappedValues:r})=>{const l=ko(),o=t.createElement(t.Fragment,null,t.createElement($e,{id:`${n}-select-label`},n),t.createElement(Ae,{"data-testid":`${n}-select`,labelId:`${n}-select-label`,label:n,className:l.selectContainer,defaultValue:"",value:a,onChange:i=>e(typeof i.target.value=="string"?i.target.value:"")},r==null?void 0:r.map(({value:i,label:u})=>t.createElement(ae,{key:i,value:i},u)))),s=t.createElement($,{label:n,variant:"outlined",margin:"normal",onChange:i=>e(i.target.value),className:l.textField,value:a}),c=r?o:s;return t.createElement(Ie,{variant:"outlined",className:l.formControl},c)},xo=b(()=>({container:{display:"flex",flexWrap:"wrap"},filterContainer:{display:"flex",justifyContent:"space-between",alignItems:"center",marginLeft:"-10px"},saveBtn:{display:"flex",width:"33%",margin:"10px 0"}})),wo=[{value:"name",label:"Name"},{value:"owner",label:"Owner"}],So=[{value:"is",label:"Is"},{value:"is-not",label:"Is Not"}],Lo=()=>{const e=xo(),[n,a]=f(""),[r,l]=f(""),[o,s]=f(""),[c,i]=f([]),u=n.length>0&&r.length>0&&o.length>0,m=()=>{u&&(i(h=>{const p={key:h.length>0?h[h.length-1].key+1:0,label:`${n}-${r}-${o}`};return[...h,p]}),a(""),l(""),s(""))};return t.createElement("div",{className:e.container},c.length>0&&t.createElement(Qt,{filterChips:c,setFilterChips:i}),t.createElement("div",{className:e.filterContainer},t.createElement(_e,{setFilterValue:a,mappedValues:wo,inputLabel:"Type",filterValue:n}),t.createElement(_e,{setFilterValue:l,mappedValues:So,inputLabel:"Relation",filterValue:r}),t.createElement(_e,{setFilterValue:s,inputLabel:"Value",filterValue:o})),t.createElement(O,{variant:"contained",color:"primary",onClick:m,className:e.saveBtn,disabled:!u},"Add"))},No=b(e=>({filterContainer:{display:"flex",width:"100%",minWidth:"275px",borderRight:e.palette.type==="dark"?"1px solid rgba(255,255,255,0.12)":"1px solid rgba(0,0,0,0.12)",height:"100%",flexFlow:"column"},filterSub:{display:"flex",justifyContent:"space-between",alignItems:"baseline","& p":{width:"65%"}},headerContainer:{display:"flex",flexFlow:"wrap"},accordion:{width:"100%",backgroundColor:"transparent",boxShadow:"none","& div":{padding:"0"}}})),Po=[{name:"Groups",children:t.createElement(v,null,"Filters go here")},{name:"Entities",children:t.createElement(Co,null)},{name:"Tracks",children:t.createElement(v,null,"Filters go here")},{name:"Check properties",children:t.createElement(Lo,null)}],To=()=>{const e=No(),[n,a]=f(!1),r=()=>!1,l=o=>(s,c)=>{a(c?o:!1)};return t.createElement(Oe,{className:e.filterContainer},t.createElement(Q,{divider:!0,className:e.headerContainer},t.createElement(v,{variant:"h3"},"Soundcheck"),t.createElement(v,null,"Owner: ",t.createElement("b",null,"Toast-infra"))),t.createElement(Q,{divider:!0,className:e.filterSub},t.createElement(v,null,t.createElement("i",null,"Select filters to refine your selection")),t.createElement(O,{size:"small",onClick:r},"Clear All")),Po.map((o,s)=>t.createElement(Q,{divider:!0},t.createElement(Sa,{className:e.accordion,expanded:n===`panel${s}`,onChange:l(`panel${s}`)},t.createElement(La,{expandIcon:n===`panel${s}`?t.createElement(ht,null):t.createElement(pt,null),"aria-controls":`panel${s}bh-content`,id:`panel${s}bh-header`},t.createElement(v,null,o.name)),t.createElement(Na,null,o.children)))))},Do=()=>{const e=Xl(),[n,a]=t.useState(0),r=(l,o)=>{a(o)};return t.createElement(C,{className:e.root},t.createElement(C,{className:e.filters},t.createElement(To,null)),t.createElement(C,{className:e.content},t.createElement(C,{className:e.header},t.createElement(C,null,t.createElement(v,{variant:"h4"},"Tech Health"),t.createElement(v,null,"View health by tracks, checks, entities, and more")),t.createElement(C,null,t.createElement(O,{variant:"contained",color:"primary",className:e.button},"Save"),t.createElement(O,{variant:"outlined"},"Share"))),t.createElement(Pa,{value:n,onChange:r,indicatorColor:"primary",textColor:"primary",className:e.tabs},t.createElement(oe,{label:"Summary"}),t.createElement(oe,{label:"Check Results"}),t.createElement(oe,{label:"Track progress"}),t.createElement(oe,{label:"Entities"}),t.createElement(oe,{label:"Checks by entity"}),t.createElement(oe,{label:"Teams"})),n===0&&t.createElement(vo,null)))},Io=({collector:e,children:n})=>{const{description:a,id:r,name:l}=e;return t.createElement(Ue,{title:l!=null?l:r,description:a,viewLabel:"Configure",editLabel:"Configure",children:n,handleView:void 0,handleEdit:void 0})},$o=()=>t.createElement(t.Fragment,null,Array.from({length:10},(e,n)=>t.createElement(d,{key:`loading-${n}`,xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem"},t.createElement(He,{variant:"rect",height:385}))));function Ao(e){switch(e){case"catalog":return kn;case"github":return wn;case"scm":return xn;case"soundcheck":return Ln;case"techinsights":return Nn;default:return Sn}}const Ro=b(e=>({container:{display:"flex",justifyContent:"center",alignItems:"center"},imageContainer:{width:"150px",height:"150px"},image:{width:"100%",height:"100%",objectFit:"contain"}})),Fo=({collector:e})=>{const{id:n}=e,a=Ro();return t.createElement(t.Fragment,null,t.createElement("div",{className:a.container},t.createElement("div",{className:a.imageContainer},t.createElement("img",{src:Ao(n),alt:n,className:a.image}))))},Oo=()=>{const{data:e,isLoading:n}=Lt();return t.createElement(d,{container:!0,direction:"row"},t.createElement(d,{item:!0,xs:12},t.createElement(Ze,{variant:"info",message:"You'll soon be able to edit fact collector configurations through the UI!",id:"collectorConfigComingSoon"})),t.createElement(d,{container:!0,spacing:4,role:"list","aria-label":"checks"},n?t.createElement($o,null):e==null?void 0:e.sort((a,r)=>{var l,o;return((l=a.name)!=null?l:a.id).localeCompare((o=r.name)!=null?o:r.id)}).map(a=>t.createElement(d,{key:a.id,xs:12,sm:12,md:6,lg:4,xl:3,item:!0,role:"listitem","aria-label":"result"},t.createElement(Io,{collector:a},t.createElement(Fo,{collector:a}))))))},Mo=()=>t.createElement(Ta,null,t.createElement(fe,{control:t.createElement(ye,null),label:t.createElement(C,{display:"flex",flexDirection:"column"},t.createElement(v,{variant:"body1",component:"span"},t.createElement("b",null,"Repository Details")),t.createElement(v,{variant:"caption",color:"textSecondary",component:"p"},"Collects Github repository details as a fact."))}),t.createElement(Fe,null),t.createElement(fe,{control:t.createElement(ye,null),label:t.createElement("div",null,t.createElement(v,{variant:"body1",component:"span"},t.createElement("b",null,"Repository Languages")),t.createElement(v,{variant:"caption",color:"textSecondary",component:"p"},"Collects Github repository language usage as a fact."))}),t.createElement(Fe,null),t.createElement(fe,{control:t.createElement(ye,null),label:t.createElement("div",null,t.createElement(v,{variant:"body1",component:"span"},t.createElement("b",null,"Branch Protections")),t.createElement(v,{variant:"caption",color:"textSecondary",component:"p"},"Collects Github repository branch protection settings as a fact."))})),Vo=({title:e,open:n,handleClose:a})=>t.createElement(ze,{handleClose:a,title:e,open:n},t.createElement(Mo,null)),Yt=Pe({selectedCollector:null,setSelectedCollector:()=>{},showModal:!1,setShowModal:()=>{},hideModal:()=>{}}),Bo=({children:e})=>{const[n,a]=f(null),[r,l]=f(!1),o=()=>{a(null),l(!1)};return t.createElement(Yt.Provider,{value:{selectedCollector:n,setSelectedCollector:a,showModal:r,setShowModal:l,hideModal:o}},e)},Go=()=>Te(Yt),Ho=b(e=>({checksPageContainer:{padding:e.spacing(3)}})),zo=()=>{const e=Ho(),{selectedCollector:n,hideModal:a}=Go();return t.createElement("div",{className:e.checksPageContainer},t.createElement(Oo,null),n&&t.createElement(Vo,{title:n,open:!!n,handleClose:a}))},Wo=()=>t.createElement(Bo,null,t.createElement(zo,null)),qo=b(()=>({tabContent:{margin:0,padding:0}})),Ko=({title:e="Soundcheck"})=>{var n;const a=qo(),[r,l]=$a(),{group:o}=r,[s,c]=f(void 0),i=(n=I(Ga).getOptionalBoolean("soundcheck.reporting"))!=null?n:!1,u=h=>{h&&l({...r,group:h})},m=la();return t.createElement(Ha,null,t.createElement(Aa,null,t.createElement(za,null,t.createElement(Wa,null,t.createElement(ma,{themeId:"website"},t.createElement(ua,{backend:"soundcheck",invalidLicenseMessage:"Submitted facts and check results will still be stored, but it will not be possible to view certifications or individual results until a valid license is present."}),t.createElement(da,{title:e},m.pathname.split("/").length-1===1&&t.createElement(Ra,{onChange:u,initialValue:o,setError:c})),t.createElement(oa,null,t.createElement(sa,{path:"/*",element:t.createElement(te,null,t.createElement(te.Route,{title:"Overview",path:"/"},t.createElement("div",{className:a.tabContent},t.createElement(Fa,{groupSelectorError:s,searchParams:r,setSearchParams:l}))),i&&t.createElement(te.Route,{title:"Tech Health",path:"/tech-health"},t.createElement(Do,null)),t.createElement(te.Route,{title:"Checks",path:"/checks"},t.createElement(Zr,null)),t.createElement(te.Route,{title:"Tracks",path:"/tracks"},t.createElement(Jl,null)),t.createElement(te.Route,{title:"Collectors",path:"/collectors"},t.createElement(Wo,null)))})))))))};export{Ko as RoutingPage};
2
+ //# sourceMappingURL=index-c29fd0e9.esm.js.map
@@ -0,0 +1 @@
1
+ <svg id="Icons" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 147.9 178.86"><defs><style>.cls-1{fill:none;}.cls-1,.cls-2{stroke:#7df3e1;stroke-linejoin:round;stroke-width:1.25px;}.cls-2{fill:#121212;}</style></defs><ellipse class="cls-1" cx="75.6" cy="89.43" rx="17.54" ry="74.88" transform="translate(-36.5 123.29) rotate(-66.6)"/><ellipse class="cls-1" cx="75.6" cy="89.43" rx="17.54" ry="74.88" transform="translate(-36.5 123.29) rotate(-66.6)"/><ellipse class="cls-1" cx="75.6" cy="89.43" rx="18.62" ry="83.95" transform="translate(-41.29 82.43) rotate(-46.36)"/><ellipse class="cls-1" cx="75.6" cy="89.43" rx="17.54" ry="74.88" transform="translate(-31.65 42.42) rotate(-26.12)"/><circle class="cls-2" cx="65.01" cy="38.62" r="15.28"/><circle class="cls-2" cx="75.76" cy="88.98" r="45.75"/><path class="cls-1" d="M54.88,27.3c-5.11-4.56-9.39-6.5-12.25-5.1-8.69,4.26-1,37.82,17.23,75s40,63.78,48.71,59.52c5.32-2.61,4.51-16.14-1.07-34.73"/><path class="cls-1" d="M121.27,93.66c16.13,10.44,25.39,20.12,23.06,25.52-3.85,8.88-37.74,2.77-75.69-13.65S3,68.58,6.88,59.69c2.32-5.35,15.51-5.27,33.93-.77"/><path class="cls-1" d="M117.65,107.4c15.58,19.34,23.41,35,18.71,40-7.1,7.44-40.05-12.47-73.6-44.47s-55-64-47.91-71.4c4.34-4.56,18.39,1.14,36.32,13.59"/><circle class="cls-2" cx="13.49" cy="73.87" r="10.28"/><circle class="cls-2" cx="79.62" cy="118.13" r="22.49"/></svg>
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="97" height="97">
3
+ <path fill="#F05133" d="M92.71 44.408 52.591 4.291c-2.31-2.311-6.057-2.311-8.369 0l-8.33 8.332L46.459 23.19c2.456-.83 5.272-.273 7.229 1.685 1.969 1.97 2.521 4.81 1.67 7.275l10.186 10.185c2.465-.85 5.307-.3 7.275 1.671 2.75 2.75 2.75 7.206 0 9.958-2.752 2.751-7.208 2.751-9.961 0-2.068-2.07-2.58-5.11-1.531-7.658l-9.5-9.499v24.997c.67.332 1.303.774 1.861 1.332 2.75 2.75 2.75 7.206 0 9.959-2.75 2.749-7.209 2.749-9.957 0-2.75-2.754-2.75-7.21 0-9.959.68-.679 1.467-1.193 2.307-1.537v-25.23c-.84-.344-1.625-.853-2.307-1.537-2.083-2.082-2.584-5.14-1.516-7.698L31.798 16.715 4.288 44.222c-2.311 2.313-2.311 6.06 0 8.371l40.121 40.118c2.31 2.311 6.056 2.311 8.369 0L92.71 52.779c2.311-2.311 2.311-6.06 0-8.371z"/>
4
+ </svg>
@@ -0,0 +1,17 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="-0.2 -1 379 334">
2
+ <path id="puddle" fill="#9CDAF1" d="m296.94 295.43c0 20.533-47.56 37.176-106.22 37.176-58.67 0-106.23-16.643-106.23-37.176s47.558-37.18 106.23-37.18c58.66 0 106.22 16.65 106.22 37.18z"/>
3
+ <g id="shadow-legs" fill="#7DBBE6">
4
+ <path d="m161.85 331.22v-26.5c0-3.422-.619-6.284-1.653-8.701 6.853 5.322 7.316 18.695 7.316 18.695v17.004c6.166.481 12.534.773 19.053.861l-.172-16.92c-.944-23.13-20.769-25.961-20.769-25.961-7.245-1.645-7.137 1.991-6.409 4.34-7.108-12.122-26.158-10.556-26.158-10.556-6.611 2.357-.475 6.607-.475 6.607 10.387 3.775 11.33 15.105 11.33 15.105v23.622c5.72.98 11.71 1.79 17.94 2.4z"/>
5
+ <path d="m245.4 283.48s-19.053-1.566-26.16 10.559c.728-2.35.839-5.989-6.408-4.343 0 0-19.824 2.832-20.768 25.961l-.174 16.946c6.509-.025 12.876-.254 19.054-.671v-17.219s.465-13.373 7.316-18.695c-1.034 2.417-1.653 5.278-1.653 8.701v26.775c6.214-.544 12.211-1.279 17.937-2.188v-24.113s.944-11.33 11.33-15.105c0-.01 6.13-4.26-.48-6.62z"/>
6
+ </g>
7
+ <path id="cat" d="m378.18 141.32l.28-1.389c-31.162-6.231-63.141-6.294-82.487-5.49 3.178-11.451 4.134-24.627 4.134-39.32 0-21.073-7.917-37.931-20.77-50.759 2.246-7.25 5.246-23.351-2.996-43.963 0 0-14.541-4.617-47.431 17.396-12.884-3.22-26.596-4.81-40.328-4.81-15.109 0-30.376 1.924-44.615 5.83-33.94-23.154-48.923-18.411-48.923-18.411-9.78 24.457-3.733 42.566-1.896 47.063-11.495 12.406-18.513 28.243-18.513 47.659 0 14.658 1.669 27.808 5.745 39.237-19.511-.71-50.323-.437-80.373 5.572l.276 1.389c30.231-6.046 61.237-6.256 80.629-5.522.898 2.366 1.899 4.661 3.021 6.879-19.177.618-51.922 3.062-83.303 11.915l.387 1.36c31.629-8.918 64.658-11.301 83.649-11.882 11.458 21.358 34.048 35.152 74.236 39.484-5.704 3.833-11.523 10.349-13.881 21.374-7.773 3.718-32.379 12.793-47.142-12.599 0 0-8.264-15.109-24.082-16.292 0 0-15.344-.235-1.059 9.562 0 0 10.267 4.838 17.351 23.019 0 0 9.241 31.01 53.835 21.061v32.032s-.943 11.33-11.33 15.105c0 0-6.137 4.249.475 6.606 0 0 28.792 2.361 28.792-21.238v-34.929s-1.142-13.852 5.663-18.667v57.371s-.47 13.688-7.551 18.881c0 0-4.723 8.494 5.663 6.137 0 0 19.824-2.832 20.769-25.961l.449-58.06h4.765l.453 58.06c.943 23.129 20.768 25.961 20.768 25.961 10.383 2.357 5.663-6.137 5.663-6.137-7.08-5.193-7.551-18.881-7.551-18.881v-56.876c6.801 5.296 5.663 18.171 5.663 18.171v34.929c0 23.6 28.793 21.238 28.793 21.238 6.606-2.357.474-6.606.474-6.606-10.386-3.775-11.33-15.105-11.33-15.105v-45.786c0-17.854-7.518-27.309-14.87-32.3 42.859-4.25 63.426-18.089 72.903-39.591 18.773.516 52.557 2.803 84.873 11.919l.384-1.36c-32.131-9.063-65.692-11.408-84.655-11.96.898-2.172 1.682-4.431 2.378-6.755 19.25-.80 51.38-.79 82.66 5.46z"/>
8
+ <path id="face" fill="#F4CBB2" d="m258.19 94.132c9.231 8.363 14.631 18.462 14.631 29.343 0 50.804-37.872 52.181-84.585 52.181-46.721 0-84.589-7.035-84.589-52.181 0-10.809 5.324-20.845 14.441-29.174 15.208-13.881 40.946-6.531 70.147-6.531 29.07-.004 54.72-7.429 69.95 6.357z"/>
9
+ <path id="eyes" fill="#FFF" d="m160.1 126.06 c0 13.994-7.88 25.336-17.6 25.336-9.72 0-17.6-11.342-17.6-25.336 0-13.992 7.88-25.33 17.6-25.33 9.72.01 17.6 11.34 17.6 25.33z m94.43 0 c0 13.994-7.88 25.336-17.6 25.336-9.72 0-17.6-11.342-17.6-25.336 0-13.992 7.88-25.33 17.6-25.33 9.72.01 17.6 11.34 17.6 25.33z"/>
10
+ <g fill="#AD5C51">
11
+ <path id="pupils" d="m154.46 126.38 c0 9.328-5.26 16.887-11.734 16.887s-11.733-7.559-11.733-16.887c0-9.331 5.255-16.894 11.733-16.894 6.47 0 11.73 7.56 11.73 16.89z m94.42 0 c0 9.328-5.26 16.887-11.734 16.887s-11.733-7.559-11.733-16.887c0-9.331 5.255-16.894 11.733-16.894 6.47 0 11.73 7.56 11.73 16.89z"/>
12
+ <circle id="nose" cx="188.5" cy="148.56" r="4.401"/>
13
+ <path id="mouth" d="m178.23 159.69c-.26-.738.128-1.545.861-1.805.737-.26 1.546.128 1.805.861 1.134 3.198 4.167 5.346 7.551 5.346s6.417-2.147 7.551-5.346c.26-.738 1.067-1.121 1.805-.861s1.121 1.067.862 1.805c-1.529 4.324-5.639 7.229-10.218 7.229s-8.68-2.89-10.21-7.22z"/>
14
+ </g>
15
+ <path id="octo" fill="#C3E4D8" d="m80.641 179.82 c0 1.174-1.376 2.122-3.07 2.122-1.693 0-3.07-.948-3.07-2.122 0-1.175 1.377-2.127 3.07-2.127 1.694 0 3.07.95 3.07 2.13z m8.5 4.72 c0 1.174-1.376 2.122-3.07 2.122-1.693 0-3.07-.948-3.07-2.122 0-1.175 1.377-2.127 3.07-2.127 1.694 0 3.07.95 3.07 2.13z m5.193 6.14 c0 1.174-1.376 2.122-3.07 2.122-1.693 0-3.07-.948-3.07-2.122 0-1.175 1.377-2.127 3.07-2.127 1.694 0 3.07.95 3.07 2.13z m4.72 7.08 c0 1.174-1.376 2.122-3.07 2.122-1.693 0-3.07-.948-3.07-2.122 0-1.175 1.377-2.127 3.07-2.127 1.694 0 3.07.95 3.07 2.13z m5.188 6.61 c0 1.174-1.376 2.122-3.07 2.122-1.693 0-3.07-.948-3.07-2.122 0-1.175 1.377-2.127 3.07-2.127 1.694 0 3.07.95 3.07 2.13z m7.09 5.66 c0 1.174-1.376 2.122-3.07 2.122-1.693 0-3.07-.948-3.07-2.122 0-1.175 1.377-2.127 3.07-2.127 1.694 0 3.07.95 3.07 2.13z m9.91 3.78 c0 1.174-1.376 2.122-3.07 2.122-1.693 0-3.07-.948-3.07-2.122 0-1.175 1.377-2.127 3.07-2.127 1.694 0 3.07.95 3.07 2.13z m9.87 0 c0 1.174-1.376 2.122-3.07 2.122-1.693 0-3.07-.948-3.07-2.122 0-1.175 1.377-2.127 3.07-2.127 1.694 0 3.07.95 3.07 2.13z m10.01 -1.64 c0 1.174-1.376 2.122-3.07 2.122-1.693 0-3.07-.948-3.07-2.122 0-1.175 1.377-2.127 3.07-2.127 1.694 0 3.07.95 3.07 2.13z"/>
16
+ <path id="drop" fill="#9CDAF1" d="m69.369 186.12l-3.066 10.683s-.8 3.861 2.84 4.546c3.8-.074 3.486-3.627 3.223-4.781z"/>
17
+ </svg>
@@ -0,0 +1,90 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <svg
3
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
4
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
5
+ xmlns="http://www.w3.org/2000/svg"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
8
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
9
+ id="svg2"
10
+ sodipodi:docname="_svgclean2.svg"
11
+ viewBox="0 0 160 156"
12
+ version="1.1"
13
+ inkscape:version="0.48.3.1 r9886"
14
+ >
15
+ <sodipodi:namedview
16
+ id="namedview8"
17
+ bordercolor="#666666"
18
+ inkscape:pageshadow="2"
19
+ guidetolerance="10"
20
+ pagecolor="#ffffff"
21
+ gridtolerance="10"
22
+ inkscape:window-maximized="0"
23
+ inkscape:zoom="0.22425739"
24
+ objecttolerance="10"
25
+ borderopacity="1"
26
+ inkscape:current-layer="svg2"
27
+ inkscape:cx="372.04724"
28
+ inkscape:cy="-370.18109"
29
+ inkscape:window-y="0"
30
+ inkscape:window-x="0"
31
+ inkscape:window-width="640"
32
+ showgrid="false"
33
+ inkscape:pageopacity="0"
34
+ inkscape:window-height="480"
35
+ />
36
+ <path
37
+ id="path4"
38
+ inkscape:connector-curvature="0"
39
+ d="m20 0-2 4 21 12c0 10-4 18-13 23l-21-12-1 2c5 15 15 25 35 25 5 0 20 15 28 23l16-16c-8-8-26-26-26-31 0-18-5-30-37-30zm125 5-20 14-2 8-58 58-8-5-4 4c0 12-14 18-20 18l-33 33c0 10 11 21 21 21l33-33c0-6 6-20 18-20l4-4-5-8 58-58 8-2 14-20-6-6zm-50 68-16 16c12 12 28 28 28 33 0 18 5 30 37 30l2-4-21-12c0-10 4-18 13-23l21 12 1-2c-5-15-15-25-35-25-5 0-18-13-30-25z"
40
+ />
41
+ <metadata
42
+ id="metadata6"
43
+ >
44
+ <rdf:RDF
45
+ >
46
+ <cc:Work
47
+ >
48
+ <dc:format
49
+ >image/svg+xml</dc:format
50
+ >
51
+ <dc:type
52
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage"
53
+ />
54
+ <cc:license
55
+ rdf:resource="http://creativecommons.org/licenses/publicdomain/"
56
+ />
57
+ <dc:publisher
58
+ >
59
+ <cc:Agent
60
+ rdf:about="http://openclipart.org/"
61
+ >
62
+ <dc:title
63
+ >Openclipart</dc:title
64
+ >
65
+ </cc:Agent
66
+ >
67
+ </dc:publisher
68
+ >
69
+ </cc:Work
70
+ >
71
+ <cc:License
72
+ rdf:about="http://creativecommons.org/licenses/publicdomain/"
73
+ >
74
+ <cc:permits
75
+ rdf:resource="http://creativecommons.org/ns#Reproduction"
76
+ />
77
+ <cc:permits
78
+ rdf:resource="http://creativecommons.org/ns#Distribution"
79
+ />
80
+ <cc:permits
81
+ rdf:resource="http://creativecommons.org/ns#DerivativeWorks"
82
+ />
83
+ </cc:License
84
+ >
85
+ </rdf:RDF
86
+ >
87
+ </metadata
88
+ >
89
+ </svg
90
+ >
Binary file
Binary file
package/dist/index.esm.js CHANGED
@@ -1,2 +1,2 @@
1
- import{o as f,E as l,G as q,p as w,q as x,n as O}from"./esm/index-094c5781.esm.js";import"react";import"@backstage/core-plugin-api";import"graphql-request";import"graphql-tag";import"@tanstack/react-query";import"lodash";import"@material-ui/core/styles/makeStyles";import"@material-ui/core";import"@backstage/core-components";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-core";import"@backstage/catalog-model";import"@material-ui/lab";import"react-router-dom";import"classnames";import"@material-ui/icons/Schedule";import"luxon";import"@material-ui/icons/Check";import"@material-ui/icons/Close";import"@material-ui/icons/RemoveCircleOutline";import"@material-ui/icons/HelpOutline";export{f as EntitySoundcheckCard,l as EntitySoundcheckContent,q as GroupSoundcheckContent,w as SoundcheckOverviewPage,x as SoundcheckRoutingPage,O as soundcheckPlugin};
1
+ import{o as f,E as l,G as q,p as w,q as x,n as O}from"./esm/index-37aedac7.esm.js";import"react";import"@backstage/core-plugin-api";import"graphql-request";import"graphql-tag";import"@tanstack/react-query";import"lodash";import"@material-ui/core/styles/makeStyles";import"@material-ui/core";import"@backstage/core-components";import"@backstage/plugin-catalog-react";import"@spotify/backstage-plugin-core";import"@backstage/catalog-model";import"@material-ui/lab";import"react-router-dom";import"classnames";import"@material-ui/icons/Schedule";import"luxon";import"@material-ui/icons/Check";import"@material-ui/icons/Close";import"@material-ui/icons/RemoveCircleOutline";import"@material-ui/icons/HelpOutline";export{f as EntitySoundcheckCard,l as EntitySoundcheckContent,q as GroupSoundcheckContent,w as SoundcheckOverviewPage,x as SoundcheckRoutingPage,O as soundcheckPlugin};
2
2
  //# sourceMappingURL=index.esm.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@spotify/backstage-plugin-soundcheck",
3
3
  "description": "Ensure quality, reliability and alignment of software development with codified checks and guidance.",
4
- "version": "0.6.2",
4
+ "version": "0.7.0",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "homepage": "https://backstage.spotify.com",
7
7
  "main": "dist/index.esm.js",
@@ -27,19 +27,21 @@
27
27
  },
28
28
  "dependencies": {
29
29
  "@backstage/catalog-model": "^1.4.1",
30
- "@backstage/core-components": "^0.13.3",
30
+ "@backstage/core-components": "^0.13.4",
31
31
  "@backstage/core-plugin-api": "^1.5.3",
32
- "@backstage/plugin-catalog-react": "^1.8.0",
32
+ "@backstage/plugin-catalog-react": "^1.8.1",
33
33
  "@backstage/plugin-permission-react": "^0.4.14",
34
34
  "@backstage/theme": "^0.4.1",
35
35
  "@backstage/types": "^1.1.0",
36
36
  "@material-ui/core": "^4.12.2",
37
37
  "@material-ui/icons": "^4.9.1",
38
38
  "@material-ui/lab": "4.0.0-alpha.61",
39
- "@spotify/backstage-plugin-core": "^0.5.4",
40
- "@spotify/backstage-plugin-soundcheck-common": "^0.7.0",
39
+ "@spotify/backstage-plugin-core": "^0.5.5",
40
+ "@spotify/backstage-plugin-soundcheck-common": "^0.7.1",
41
41
  "@tanstack/react-query": "^4.6.1",
42
42
  "classnames": "^2.3.2",
43
+ "cron-validate": "^1.4.5",
44
+ "cronstrue": "^2.28.0",
43
45
  "graphql-request": "6.1.0",
44
46
  "lodash": "^4.17.21",
45
47
  "luxon": "^3.1.1",
@@ -49,6 +51,7 @@
49
51
  "react-hook-form": "^7.19.5",
50
52
  "react-use": "^17.2.4",
51
53
  "react-window": "^1.8.8",
54
+ "recharts": "2.7.3",
52
55
  "uuid": "^9.0.0"
53
56
  },
54
57
  "peerDependencies": {
@@ -56,15 +59,15 @@
56
59
  "react-router-dom": "6.0.0-beta.0 || ^6.3.0"
57
60
  },
58
61
  "devDependencies": {
59
- "@backstage/cli": "^0.22.9",
60
- "@backstage/core-app-api": "^1.9.0",
61
- "@backstage/dev-utils": "^1.0.17",
62
- "@backstage/test-utils": "^1.4.1",
63
- "@graphql-codegen/cli": "^4.0.0",
62
+ "@backstage/cli": "^0.22.10",
63
+ "@backstage/core-app-api": "^1.9.1",
64
+ "@backstage/dev-utils": "^1.0.18",
65
+ "@backstage/test-utils": "^1.4.2",
66
+ "@graphql-codegen/cli": "^5.0.0",
64
67
  "@graphql-codegen/typescript": "^4.0.0",
65
68
  "@graphql-codegen/typescript-graphql-request": "^5.0.0",
66
69
  "@graphql-codegen/typescript-operations": "^4.0.0",
67
- "@spotify/backstage-plugin-core-common": "^0.5.4",
70
+ "@spotify/backstage-plugin-core-common": "^0.5.5",
68
71
  "@testing-library/jest-dom": "^5.10.1",
69
72
  "@testing-library/react": "^12.1.5",
70
73
  "@testing-library/react-hooks": "^8.0.1",