@kyverno/backstage-plugin-policy-reporter 2.5.0 → 2.6.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # @kyverno/backstage-plugin-policy-reporter
2
2
 
3
+ ## 2.6.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 93bf028: Added namespace filtering to the `PolicyReportsPage`. Users can now filter the list of policy reports by selecting one or more namespaces from the selected cluster.
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [93bf028]
12
+ - @kyverno/backstage-plugin-policy-reporter-common@2.2.0
13
+
3
14
  ## 2.5.0
4
15
 
5
16
  ### Minor Changes
@@ -7,6 +7,8 @@ import { PolicyReportsTable } from '../PolicyReportsTable/PolicyReportsTable.esm
7
7
  import { useState } from 'react';
8
8
  import { SelectStatus } from '../SelectStatus/SelectStatus.esm.js';
9
9
  import { SelectSeverity } from '../SelectSeverity/SelectSeverity.esm.js';
10
+ import { SelectNamespace } from '../SelectNamespace/SelectNamespace.esm.js';
11
+ import { useNamespaces } from '../../hooks/useNamespaces.esm.js';
10
12
 
11
13
  const PolicyReportsPage = ({
12
14
  title = "Policy Reports",
@@ -21,6 +23,8 @@ const PolicyReportsPage = ({
21
23
  } = useEnvironments();
22
24
  const [status, setStatus] = useState(["fail"]);
23
25
  const [severity, setSeverity] = useState([]);
26
+ const [selectedNamespaces, setSelectedNamespaces] = useState([]);
27
+ const { namespaces: availableNamespaces } = useNamespaces(currentEnvironment);
24
28
  if (environmentsLoading) return /* @__PURE__ */ jsx(Progress, {});
25
29
  if (environments === void 0 || !currentEnvironment)
26
30
  return /* @__PURE__ */ jsxs(Page, { themeId: "tool", children: [
@@ -59,6 +63,14 @@ const PolicyReportsPage = ({
59
63
  setSeverity
60
64
  }
61
65
  ),
66
+ /* @__PURE__ */ jsx(
67
+ SelectNamespace,
68
+ {
69
+ currentNamespaces: selectedNamespaces,
70
+ setNamespaces: setSelectedNamespaces,
71
+ availableNamespaces
72
+ }
73
+ ),
62
74
  /* @__PURE__ */ jsx(
63
75
  SelectEnvironment,
64
76
  {
@@ -74,7 +86,8 @@ const PolicyReportsPage = ({
74
86
  currentEnvironment,
75
87
  filter: {
76
88
  status,
77
- severities: severity
89
+ severities: severity,
90
+ namespaces: selectedNamespaces
78
91
  },
79
92
  title: "Policy Results",
80
93
  emptyContentText: "No policies found",
@@ -1 +1 @@
1
- {"version":3,"file":"PolicyReportsPage.esm.js","sources":["../../../src/components/PolicyReportsPage/PolicyReportsPage.tsx"],"sourcesContent":["import {\n Content,\n ContentHeader,\n EmptyState,\n Header,\n Link,\n Page,\n Progress,\n} from '@backstage/core-components';\nimport { useEnvironments } from '../../hooks/useEnvironments';\nimport { SelectEnvironment } from '../SelectEnvironment';\nimport { Button, Grid } from '@material-ui/core';\nimport { PolicyReportsTable } from '../PolicyReportsTable';\nimport { useState } from 'react';\nimport {\n Severity,\n Status,\n} from '@kyverno/backstage-plugin-policy-reporter-common';\nimport { SelectStatus } from '../SelectStatus';\nimport { SelectSeverity } from '../SelectSeverity';\n\nexport interface PolicyReportsPageProps {\n title?: string;\n policyDocumentationUrl?: string;\n subtitle?: string;\n}\n\nexport const PolicyReportsPage = ({\n title = 'Policy Reports',\n subtitle = 'View all policy reports from a Kubernetes cluster',\n policyDocumentationUrl,\n}: PolicyReportsPageProps) => {\n const {\n environments,\n environmentsLoading,\n setCurrentEnvironment,\n currentEnvironment,\n } = useEnvironments();\n\n const [status, setStatus] = useState<Status[]>(['fail']);\n const [severity, setSeverity] = useState<Severity[]>([]);\n\n // Fetching environments\n if (environmentsLoading) return <Progress />;\n\n // Environments missing\n if (environments === undefined || !currentEnvironment)\n return (\n <Page themeId=\"tool\">\n <Header title={title} subtitle={subtitle} />\n <Content>\n <EmptyState\n missing=\"content\"\n title=\"No kubernetes-cluster Resources found\"\n description={\n <>\n You need to define a Resource with the kubernetes-cluster type\n and a<code> kyverno.io/endpoint </code> annotation for this\n plugin to work.\n </>\n }\n action={\n <>\n <Button\n color=\"primary\"\n component={Link}\n to=\"https://github.com/kyverno/backstage-policy-reporter-plugin\"\n >\n Read More\n </Button>\n </>\n }\n />\n </Content>\n </Page>\n );\n\n return (\n <Page themeId=\"tool\">\n <Header title={title} subtitle={subtitle} />\n <Content>\n <ContentHeader>\n <SelectStatus currentStatus={status} setStatus={setStatus} />\n <SelectSeverity\n currentSeverity={severity}\n setSeverity={setSeverity}\n />\n <SelectEnvironment\n environments={environments}\n currentEnvironment={currentEnvironment}\n setCurrentEnvironment={setCurrentEnvironment}\n />\n </ContentHeader>\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <PolicyReportsTable\n currentEnvironment={currentEnvironment}\n filter={{\n status: status,\n severities: severity,\n }}\n title=\"Policy Results\"\n emptyContentText=\"No policies found\"\n policyDocumentationUrl={policyDocumentationUrl}\n pagination={{ offset: 25 }}\n />\n </Grid>\n </Grid>\n </Content>\n </Page>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AA2BO,MAAM,oBAAoB,CAAC;AAAA,EAChC,KAAQ,GAAA,gBAAA;AAAA,EACR,QAAW,GAAA,mDAAA;AAAA,EACX;AACF,CAA8B,KAAA;AAC5B,EAAM,MAAA;AAAA,IACJ,YAAA;AAAA,IACA,mBAAA;AAAA,IACA,qBAAA;AAAA,IACA;AAAA,MACE,eAAgB,EAAA;AAEpB,EAAA,MAAM,CAAC,MAAQ,EAAA,SAAS,IAAI,QAAmB,CAAA,CAAC,MAAM,CAAC,CAAA;AACvD,EAAA,MAAM,CAAC,QAAU,EAAA,WAAW,CAAI,GAAA,QAAA,CAAqB,EAAE,CAAA;AAGvD,EAAI,IAAA,mBAAA,EAA4B,uBAAA,GAAA,CAAC,QAAS,EAAA,EAAA,CAAA;AAG1C,EAAI,IAAA,YAAA,KAAiB,UAAa,CAAC,kBAAA;AACjC,IACE,uBAAA,IAAA,CAAC,IAAK,EAAA,EAAA,OAAA,EAAQ,MACZ,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,MAAA,EAAA,EAAO,OAAc,QAAoB,EAAA,CAAA;AAAA,0BACzC,OACC,EAAA,EAAA,QAAA,kBAAA,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,OAAQ,EAAA,SAAA;AAAA,UACR,KAAM,EAAA,uCAAA;AAAA,UACN,6BACI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,YAAA,sEAAA;AAAA,4BAEK,GAAA,CAAC,UAAK,QAAqB,EAAA,uBAAA,EAAA,CAAA;AAAA,YAAO;AAAA,WAEzC,EAAA,CAAA;AAAA,UAEF,wBAEI,GAAA,CAAA,QAAA,EAAA,EAAA,QAAA,kBAAA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,KAAM,EAAA,SAAA;AAAA,cACN,SAAW,EAAA,IAAA;AAAA,cACX,EAAG,EAAA,6DAAA;AAAA,cACJ,QAAA,EAAA;AAAA;AAAA,WAGH,EAAA;AAAA;AAAA,OAGN,EAAA;AAAA,KACF,EAAA,CAAA;AAGJ,EACE,uBAAA,IAAA,CAAC,IAAK,EAAA,EAAA,OAAA,EAAQ,MACZ,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,MAAA,EAAA,EAAO,OAAc,QAAoB,EAAA,CAAA;AAAA,yBACzC,OACC,EAAA,EAAA,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,aACC,EAAA,EAAA,QAAA,EAAA;AAAA,wBAAC,GAAA,CAAA,YAAA,EAAA,EAAa,aAAe,EAAA,MAAA,EAAQ,SAAsB,EAAA,CAAA;AAAA,wBAC3D,GAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YACC,eAAiB,EAAA,QAAA;AAAA,YACjB;AAAA;AAAA,SACF;AAAA,wBACA,GAAA;AAAA,UAAC,iBAAA;AAAA,UAAA;AAAA,YACC,YAAA;AAAA,YACA,kBAAA;AAAA,YACA;AAAA;AAAA;AACF,OACF,EAAA,CAAA;AAAA,sBACA,GAAA,CAAC,IAAK,EAAA,EAAA,SAAA,EAAS,IAAC,EAAA,OAAA,EAAS,CACvB,EAAA,QAAA,kBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,IAAA,EAAI,IAAC,EAAA,EAAA,EAAI,EACb,EAAA,QAAA,kBAAA,GAAA;AAAA,QAAC,kBAAA;AAAA,QAAA;AAAA,UACC,kBAAA;AAAA,UACA,MAAQ,EAAA;AAAA,YACN,MAAA;AAAA,YACA,UAAY,EAAA;AAAA,WACd;AAAA,UACA,KAAM,EAAA,gBAAA;AAAA,UACN,gBAAiB,EAAA,mBAAA;AAAA,UACjB,sBAAA;AAAA,UACA,UAAA,EAAY,EAAE,MAAA,EAAQ,EAAG;AAAA;AAAA,SAE7B,CACF,EAAA;AAAA,KACF,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"PolicyReportsPage.esm.js","sources":["../../../src/components/PolicyReportsPage/PolicyReportsPage.tsx"],"sourcesContent":["import {\n Content,\n ContentHeader,\n EmptyState,\n Header,\n Link,\n Page,\n Progress,\n} from '@backstage/core-components';\nimport { useEnvironments } from '../../hooks/useEnvironments';\nimport { SelectEnvironment } from '../SelectEnvironment';\nimport { Button, Grid } from '@material-ui/core';\nimport { PolicyReportsTable } from '../PolicyReportsTable';\nimport { useState } from 'react';\nimport {\n Severity,\n Status,\n} from '@kyverno/backstage-plugin-policy-reporter-common';\nimport { SelectStatus } from '../SelectStatus';\nimport { SelectSeverity } from '../SelectSeverity';\nimport { SelectNamespace } from '../SelectNamespace';\nimport { useNamespaces } from '../../hooks/useNamespaces';\n\nexport interface PolicyReportsPageProps {\n title?: string;\n policyDocumentationUrl?: string;\n subtitle?: string;\n}\n\nexport const PolicyReportsPage = ({\n title = 'Policy Reports',\n subtitle = 'View all policy reports from a Kubernetes cluster',\n policyDocumentationUrl,\n}: PolicyReportsPageProps) => {\n const {\n environments,\n environmentsLoading,\n setCurrentEnvironment,\n currentEnvironment,\n } = useEnvironments();\n\n const [status, setStatus] = useState<Status[]>(['fail']);\n const [severity, setSeverity] = useState<Severity[]>([]);\n const [selectedNamespaces, setSelectedNamespaces] = useState<string[]>([]);\n const { namespaces: availableNamespaces } = useNamespaces(currentEnvironment);\n\n // Fetching environments\n if (environmentsLoading) return <Progress />;\n\n // Environments missing\n if (environments === undefined || !currentEnvironment)\n return (\n <Page themeId=\"tool\">\n <Header title={title} subtitle={subtitle} />\n <Content>\n <EmptyState\n missing=\"content\"\n title=\"No kubernetes-cluster Resources found\"\n description={\n <>\n You need to define a Resource with the kubernetes-cluster type\n and a<code> kyverno.io/endpoint </code> annotation for this\n plugin to work.\n </>\n }\n action={\n <>\n <Button\n color=\"primary\"\n component={Link}\n to=\"https://github.com/kyverno/backstage-policy-reporter-plugin\"\n >\n Read More\n </Button>\n </>\n }\n />\n </Content>\n </Page>\n );\n\n return (\n <Page themeId=\"tool\">\n <Header title={title} subtitle={subtitle} />\n <Content>\n <ContentHeader>\n <SelectStatus currentStatus={status} setStatus={setStatus} />\n <SelectSeverity\n currentSeverity={severity}\n setSeverity={setSeverity}\n />\n <SelectNamespace\n currentNamespaces={selectedNamespaces}\n setNamespaces={setSelectedNamespaces}\n availableNamespaces={availableNamespaces}\n />\n <SelectEnvironment\n environments={environments}\n currentEnvironment={currentEnvironment}\n setCurrentEnvironment={setCurrentEnvironment}\n />\n </ContentHeader>\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <PolicyReportsTable\n currentEnvironment={currentEnvironment}\n filter={{\n status: status,\n severities: severity,\n namespaces: selectedNamespaces,\n }}\n title=\"Policy Results\"\n emptyContentText=\"No policies found\"\n policyDocumentationUrl={policyDocumentationUrl}\n pagination={{ offset: 25 }}\n />\n </Grid>\n </Grid>\n </Content>\n </Page>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import MenuItem from '@material-ui/core/MenuItem';
3
+ import InputLabel from '@material-ui/core/InputLabel';
4
+ import FormControl from '@material-ui/core/FormControl';
5
+ import Select from '@material-ui/core/Select';
6
+ import { makeStyles } from '@material-ui/core/styles';
7
+ import { Checkbox, ListItemText } from '@material-ui/core';
8
+
9
+ const useStyles = makeStyles({
10
+ formControl: {
11
+ margin: 8,
12
+ minWidth: 150
13
+ }
14
+ });
15
+ const SelectNamespace = ({
16
+ currentNamespaces,
17
+ setNamespaces,
18
+ availableNamespaces
19
+ }) => {
20
+ const classes = useStyles();
21
+ const handleChange = (event) => {
22
+ setNamespaces(event.target.value);
23
+ };
24
+ return /* @__PURE__ */ jsxs(FormControl, { className: classes.formControl, children: [
25
+ /* @__PURE__ */ jsx(InputLabel, { id: "select-namespace-label", shrink: true, children: "Namespaces" }),
26
+ /* @__PURE__ */ jsx(
27
+ Select,
28
+ {
29
+ labelId: "select-namespace-label",
30
+ id: "select-namespace",
31
+ multiple: true,
32
+ displayEmpty: true,
33
+ value: currentNamespaces,
34
+ renderValue: (selected) => {
35
+ if (selected.length === 0) {
36
+ return "All";
37
+ }
38
+ return selected.join(", ");
39
+ },
40
+ onChange: handleChange,
41
+ children: availableNamespaces.map((namespace) => /* @__PURE__ */ jsxs(MenuItem, { value: namespace, children: [
42
+ /* @__PURE__ */ jsx(Checkbox, { checked: currentNamespaces.includes(namespace) }),
43
+ /* @__PURE__ */ jsx(ListItemText, { primary: namespace })
44
+ ] }, namespace))
45
+ }
46
+ )
47
+ ] });
48
+ };
49
+
50
+ export { SelectNamespace };
51
+ //# sourceMappingURL=SelectNamespace.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectNamespace.esm.js","sources":["../../../src/components/SelectNamespace/SelectNamespace.tsx"],"sourcesContent":["import MenuItem from '@material-ui/core/MenuItem';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport FormControl from '@material-ui/core/FormControl';\nimport Select from '@material-ui/core/Select';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { Checkbox, ListItemText } from '@material-ui/core';\n\nconst useStyles = makeStyles({\n formControl: {\n margin: 8,\n minWidth: 150,\n },\n});\n\nexport type SelectNamespaceProps = {\n currentNamespaces: string[];\n setNamespaces: (namespaces: string[]) => void;\n availableNamespaces: string[];\n};\n\nexport const SelectNamespace = ({\n currentNamespaces,\n setNamespaces,\n availableNamespaces,\n}: SelectNamespaceProps) => {\n const classes = useStyles();\n\n const handleChange = (event: any) => {\n setNamespaces(event.target.value);\n };\n\n return (\n <FormControl className={classes.formControl}>\n <InputLabel id=\"select-namespace-label\" shrink>\n Namespaces\n </InputLabel>\n <Select\n labelId=\"select-namespace-label\"\n id=\"select-namespace\"\n multiple\n displayEmpty\n value={currentNamespaces}\n renderValue={selected => {\n if ((selected as string[]).length === 0) {\n return 'All';\n }\n\n return (selected as string[]).join(', ');\n }}\n onChange={handleChange}\n >\n {availableNamespaces.map(namespace => (\n <MenuItem key={namespace} value={namespace}>\n <Checkbox checked={currentNamespaces.includes(namespace)} />\n <ListItemText primary={namespace} />\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAOA,MAAM,YAAY,UAAW,CAAA;AAAA,EAC3B,WAAa,EAAA;AAAA,IACX,MAAQ,EAAA,CAAA;AAAA,IACR,QAAU,EAAA;AAAA;AAEd,CAAC,CAAA;AAQM,MAAM,kBAAkB,CAAC;AAAA,EAC9B,iBAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAA4B,KAAA;AAC1B,EAAA,MAAM,UAAU,SAAU,EAAA;AAE1B,EAAM,MAAA,YAAA,GAAe,CAAC,KAAe,KAAA;AACnC,IAAc,aAAA,CAAA,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,GAClC;AAEA,EAAA,uBACG,IAAA,CAAA,WAAA,EAAA,EAAY,SAAW,EAAA,OAAA,CAAQ,WAC9B,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAW,EAAA,EAAA,EAAA,EAAG,wBAAyB,EAAA,MAAA,EAAM,MAAC,QAE/C,EAAA,YAAA,EAAA,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAQ,EAAA,wBAAA;AAAA,QACR,EAAG,EAAA,kBAAA;AAAA,QACH,QAAQ,EAAA,IAAA;AAAA,QACR,YAAY,EAAA,IAAA;AAAA,QACZ,KAAO,EAAA,iBAAA;AAAA,QACP,aAAa,CAAY,QAAA,KAAA;AACvB,UAAK,IAAA,QAAA,CAAsB,WAAW,CAAG,EAAA;AACvC,YAAO,OAAA,KAAA;AAAA;AAGT,UAAQ,OAAA,QAAA,CAAsB,KAAK,IAAI,CAAA;AAAA,SACzC;AAAA,QACA,QAAU,EAAA,YAAA;AAAA,QAET,8BAAoB,GAAI,CAAA,CAAA,SAAA,qBACtB,IAAA,CAAA,QAAA,EAAA,EAAyB,OAAO,SAC/B,EAAA,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,QAAS,EAAA,EAAA,OAAA,EAAS,iBAAkB,CAAA,QAAA,CAAS,SAAS,CAAG,EAAA,CAAA;AAAA,0BAC1D,GAAA,CAAC,YAAa,EAAA,EAAA,OAAA,EAAS,SAAW,EAAA;AAAA,SAAA,EAAA,EAFrB,SAGf,CACD;AAAA;AAAA;AACH,GACF,EAAA,CAAA;AAEJ;;;;"}
@@ -0,0 +1,28 @@
1
+ import { useAsync } from 'react-use';
2
+ import { useApi } from '@backstage/core-plugin-api';
3
+ import { policyReporterApiRef } from '../api/PolicyReporterClient.esm.js';
4
+
5
+ const useNamespaces = (currentEnvironment) => {
6
+ const api = useApi(policyReporterApiRef);
7
+ const {
8
+ value: namespaces,
9
+ loading,
10
+ error
11
+ } = useAsync(async () => {
12
+ if (!currentEnvironment) {
13
+ return [];
14
+ }
15
+ const response = await api.getNamespaces({
16
+ query: { environment: currentEnvironment.entityRef }
17
+ });
18
+ return response.json();
19
+ }, [api, currentEnvironment]);
20
+ return {
21
+ namespaces: namespaces ?? [],
22
+ loading,
23
+ error
24
+ };
25
+ };
26
+
27
+ export { useNamespaces };
28
+ //# sourceMappingURL=useNamespaces.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useNamespaces.esm.js","sources":["../../src/hooks/useNamespaces.ts"],"sourcesContent":["import { useAsync } from 'react-use';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { policyReporterApiRef } from '../api';\nimport { Environment } from '@kyverno/backstage-plugin-policy-reporter-common';\n\nexport const useNamespaces = (currentEnvironment?: Environment) => {\n const api = useApi(policyReporterApiRef);\n\n const {\n value: namespaces,\n loading,\n error,\n } = useAsync(async () => {\n if (!currentEnvironment) {\n return [];\n }\n\n const response = await api.getNamespaces({\n query: { environment: currentEnvironment.entityRef },\n });\n return response.json();\n }, [api, currentEnvironment]);\n\n return {\n namespaces: namespaces ?? [],\n loading,\n error,\n };\n};\n"],"names":[],"mappings":";;;;AAKa,MAAA,aAAA,GAAgB,CAAC,kBAAqC,KAAA;AACjE,EAAM,MAAA,GAAA,GAAM,OAAO,oBAAoB,CAAA;AAEvC,EAAM,MAAA;AAAA,IACJ,KAAO,EAAA,UAAA;AAAA,IACP,OAAA;AAAA,IACA;AAAA,GACF,GAAI,SAAS,YAAY;AACvB,IAAA,IAAI,CAAC,kBAAoB,EAAA;AACvB,MAAA,OAAO,EAAC;AAAA;AAGV,IAAM,MAAA,QAAA,GAAW,MAAM,GAAA,CAAI,aAAc,CAAA;AAAA,MACvC,KAAO,EAAA,EAAE,WAAa,EAAA,kBAAA,CAAmB,SAAU;AAAA,KACpD,CAAA;AACD,IAAA,OAAO,SAAS,IAAK,EAAA;AAAA,GACpB,EAAA,CAAC,GAAK,EAAA,kBAAkB,CAAC,CAAA;AAE5B,EAAO,OAAA;AAAA,IACL,UAAA,EAAY,cAAc,EAAC;AAAA,IAC3B,OAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kyverno/backstage-plugin-policy-reporter",
3
- "version": "2.5.0",
3
+ "version": "2.6.0",
4
4
  "main": "dist/index.esm.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "license": "Apache-2.0",
@@ -45,7 +45,7 @@
45
45
  "@backstage/core-plugin-api": "^1.11.0",
46
46
  "@backstage/plugin-catalog-react": "^1.21.1",
47
47
  "@backstage/theme": "^0.6.8",
48
- "@kyverno/backstage-plugin-policy-reporter-common": "^2.1.0",
48
+ "@kyverno/backstage-plugin-policy-reporter-common": "^2.2.0",
49
49
  "@material-ui/core": "^4.12.4",
50
50
  "@material-ui/icons": "^4.11.3",
51
51
  "@material-ui/lab": "4.0.0-alpha.61",