@backstage-community/plugin-tech-insights-maturity 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/ScoreRouter.esm.js +2 -2
  3. package/dist/ScoreRouter.esm.js.map +1 -1
  4. package/dist/SummaryRouter.esm.js +2 -2
  5. package/dist/SummaryRouter.esm.js.map +1 -1
  6. package/dist/components/MaturityChartCard/MaturityChartCard.esm.js +44 -41
  7. package/dist/components/MaturityChartCard/MaturityChartCard.esm.js.map +1 -1
  8. package/dist/components/MaturityPage/MaturityPage.esm.js +5 -2
  9. package/dist/components/MaturityPage/MaturityPage.esm.js.map +1 -1
  10. package/dist/components/MaturityRankAvatar/MaturityRankAvatar.esm.js +23 -21
  11. package/dist/components/MaturityRankAvatar/MaturityRankAvatar.esm.js.map +1 -1
  12. package/dist/components/MaturityRankInfoCard/MaturityRankInfoCard.esm.js +32 -17
  13. package/dist/components/MaturityRankInfoCard/MaturityRankInfoCard.esm.js.map +1 -1
  14. package/dist/components/MaturityRankWidget/MaturityRankWidget.esm.js +3 -3
  15. package/dist/components/MaturityRankWidget/MaturityRankWidget.esm.js.map +1 -1
  16. package/dist/components/MaturityScorePage/MaturityScorePage.esm.js +52 -45
  17. package/dist/components/MaturityScorePage/MaturityScorePage.esm.js.map +1 -1
  18. package/dist/components/MaturityScorePage/maturityTableRows.esm.js +75 -42
  19. package/dist/components/MaturityScorePage/maturityTableRows.esm.js.map +1 -1
  20. package/dist/components/MaturitySummaryInfoCard/MaturitySummaryCardContent.esm.js +4 -4
  21. package/dist/components/MaturitySummaryInfoCard/MaturitySummaryCardContent.esm.js.map +1 -1
  22. package/dist/components/MaturitySummaryInfoCard/MaturitySummaryInfoCard.esm.js +12 -6
  23. package/dist/components/MaturitySummaryInfoCard/MaturitySummaryInfoCard.esm.js.map +1 -1
  24. package/dist/components/MaturitySummaryPage/MaturitySummaryPage.esm.js +8 -5
  25. package/dist/components/MaturitySummaryPage/MaturitySummaryPage.esm.js.map +1 -1
  26. package/dist/components/MaturitySummaryTable/MaturitySummaryTable.esm.js +43 -38
  27. package/dist/components/MaturitySummaryTable/MaturitySummaryTable.esm.js.map +1 -1
  28. package/dist/helpers/AreaProgress.esm.js +26 -15
  29. package/dist/helpers/AreaProgress.esm.js.map +1 -1
  30. package/dist/helpers/MaturityHelp.esm.js +2 -2
  31. package/dist/helpers/MaturityHelp.esm.js.map +1 -1
  32. package/dist/helpers/MaturityLink.esm.js +2 -2
  33. package/dist/helpers/MaturityLink.esm.js.map +1 -1
  34. package/dist/index.d.ts +9 -10
  35. package/package.json +18 -18
package/CHANGELOG.md CHANGED
@@ -1,5 +1,29 @@
1
1
  # @backstage-community/plugin-tech-insights-maturity
2
2
 
3
+ ## 0.3.0
4
+
5
+ ### Minor Changes
6
+
7
+ - a01ae4e: Backstage version bump to v1.39.0
8
+
9
+ ### Patch Changes
10
+
11
+ - 01640b2: Minor update to the API report.
12
+ - Updated dependencies [d6411fe]
13
+ - Updated dependencies [a01ae4e]
14
+ - @backstage-community/plugin-tech-insights-common@0.7.0
15
+ - @backstage-community/plugin-tech-insights-maturity-common@0.3.0
16
+ - @backstage-community/plugin-tech-insights-react@1.2.0
17
+
18
+ ## 0.2.2
19
+
20
+ ### Patch Changes
21
+
22
+ - Updated dependencies [ac739ca]
23
+ - @backstage-community/plugin-tech-insights-common@0.6.0
24
+ - @backstage-community/plugin-tech-insights-maturity-common@0.2.1
25
+ - @backstage-community/plugin-tech-insights-react@1.1.1
26
+
3
27
  ## 0.2.1
4
28
 
5
29
  ### Patch Changes
@@ -1,8 +1,8 @@
1
- import React from 'react';
1
+ import { jsx } from 'react/jsx-runtime';
2
2
  import { Routes, Route } from 'react-router-dom';
3
3
  import { MaturityScorePage } from './components/MaturityScorePage/MaturityScorePage.esm.js';
4
4
 
5
- const ScoreRouter = () => /* @__PURE__ */ React.createElement(Routes, null, /* @__PURE__ */ React.createElement(Route, { path: "/", element: /* @__PURE__ */ React.createElement(MaturityScorePage, null) }));
5
+ const ScoreRouter = () => /* @__PURE__ */ jsx(Routes, { children: /* @__PURE__ */ jsx(Route, { path: "/", element: /* @__PURE__ */ jsx(MaturityScorePage, {}) }) });
6
6
 
7
7
  export { ScoreRouter };
8
8
  //# sourceMappingURL=ScoreRouter.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScoreRouter.esm.js","sources":["../src/ScoreRouter.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\nimport { Route, Routes } from 'react-router-dom';\nimport { MaturityScorePage } from './components/MaturityScorePage';\n\nexport const ScoreRouter = () => (\n <Routes>\n <Route path=\"/\" element={<MaturityScorePage />} />\n </Routes>\n);\n"],"names":[],"mappings":";;;;AAmBO,MAAM,WAAc,GAAA,sBACxB,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,kBACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAM,IAAK,EAAA,GAAA,EAAI,OAAS,kBAAA,KAAA,CAAA,aAAA,CAAC,iBAAkB,EAAA,IAAA,CAAA,EAAI,CAClD;;;;"}
1
+ {"version":3,"file":"ScoreRouter.esm.js","sources":["../src/ScoreRouter.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Route, Routes } from 'react-router-dom';\nimport { MaturityScorePage } from './components/MaturityScorePage';\n\nexport const ScoreRouter = () => (\n <Routes>\n <Route path=\"/\" element={<MaturityScorePage />} />\n </Routes>\n);\n"],"names":[],"mappings":";;;;AAkBO,MAAM,WAAc,GAAA,sBACxB,GAAA,CAAA,MAAA,EAAA,EACC,QAAC,kBAAA,GAAA,CAAA,KAAA,EAAA,EAAM,IAAK,EAAA,GAAA,EAAI,OAAS,kBAAA,GAAA,CAAC,iBAAkB,EAAA,EAAA,CAAA,EAAI,CAClD,EAAA;;;;"}
@@ -1,8 +1,8 @@
1
- import React from 'react';
1
+ import { jsx } from 'react/jsx-runtime';
2
2
  import { Routes, Route } from 'react-router-dom';
3
3
  import { MaturitySummaryPage } from './components/MaturitySummaryPage/MaturitySummaryPage.esm.js';
4
4
 
5
- const SummaryRouter = () => /* @__PURE__ */ React.createElement(Routes, null, /* @__PURE__ */ React.createElement(Route, { path: "/", element: /* @__PURE__ */ React.createElement(MaturitySummaryPage, null) }));
5
+ const SummaryRouter = () => /* @__PURE__ */ jsx(Routes, { children: /* @__PURE__ */ jsx(Route, { path: "/", element: /* @__PURE__ */ jsx(MaturitySummaryPage, {}) }) });
6
6
 
7
7
  export { SummaryRouter };
8
8
  //# sourceMappingURL=SummaryRouter.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SummaryRouter.esm.js","sources":["../src/SummaryRouter.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\nimport { Route, Routes } from 'react-router-dom';\nimport { MaturitySummaryPage } from './components/MaturitySummaryPage';\n\nexport const SummaryRouter = () => (\n <Routes>\n <Route path=\"/\" element={<MaturitySummaryPage />} />\n </Routes>\n);\n"],"names":[],"mappings":";;;;AAmBO,MAAM,aAAgB,GAAA,sBAC1B,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,kBACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAM,IAAK,EAAA,GAAA,EAAI,OAAS,kBAAA,KAAA,CAAA,aAAA,CAAC,mBAAoB,EAAA,IAAA,CAAA,EAAI,CACpD;;;;"}
1
+ {"version":3,"file":"SummaryRouter.esm.js","sources":["../src/SummaryRouter.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Route, Routes } from 'react-router-dom';\nimport { MaturitySummaryPage } from './components/MaturitySummaryPage';\n\nexport const SummaryRouter = () => (\n <Routes>\n <Route path=\"/\" element={<MaturitySummaryPage />} />\n </Routes>\n);\n"],"names":[],"mappings":";;;;AAkBO,MAAM,aAAgB,GAAA,sBAC1B,GAAA,CAAA,MAAA,EAAA,EACC,QAAC,kBAAA,GAAA,CAAA,KAAA,EAAA,EAAM,IAAK,EAAA,GAAA,EAAI,OAAS,kBAAA,GAAA,CAAC,mBAAoB,EAAA,EAAA,CAAA,EAAI,CACpD,EAAA;;;;"}
@@ -1,3 +1,4 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
1
2
  import { useApi } from '@backstage/core-plugin-api';
2
3
  import { Rank } from '@backstage-community/plugin-tech-insights-maturity-common';
3
4
  import Card from '@mui/material/Card';
@@ -6,7 +7,6 @@ import CircularProgress from '@mui/material/CircularProgress';
6
7
  import { styled } from '@mui/material/styles';
7
8
  import { useDrawingArea } from '@mui/x-charts/hooks';
8
9
  import { PieChart } from '@mui/x-charts/PieChart';
9
- import React from 'react';
10
10
  import useAsyncRetry from 'react-use/lib/useAsync';
11
11
  import { maturityApiRef } from '../../api/MaturityApi.esm.js';
12
12
  import '@backstage/catalog-model';
@@ -26,7 +26,7 @@ const StyledText = styled("text")(({ theme }) => ({
26
26
  }));
27
27
  function PieCenterLabel({ children }) {
28
28
  const { width, height, left, top } = useDrawingArea();
29
- return /* @__PURE__ */ React.createElement(StyledText, { x: left + width / 2, y: top + height / 2 }, children);
29
+ return /* @__PURE__ */ jsx(StyledText, { x: left + width / 2, y: top + height / 2, children });
30
30
  }
31
31
  const MaturityChartCard = ({ entities }) => {
32
32
  const api = useApi(maturityApiRef);
@@ -34,45 +34,48 @@ const MaturityChartCard = ({ entities }) => {
34
34
  async () => api.getBulkMaturityCheckResults(entities),
35
35
  [api]
36
36
  );
37
- return /* @__PURE__ */ React.createElement(Card, null, /* @__PURE__ */ React.createElement(CardContent, null, loading && /* @__PURE__ */ React.createElement(CircularProgress, { size: 100 }), value && value.length > 0 && /* @__PURE__ */ React.createElement(
38
- PieChart,
39
- {
40
- colors: [
41
- getRankColor(Rank.Stone),
42
- getRankColor(Rank.Bronze),
43
- getRankColor(Rank.Silver),
44
- getRankColor(Rank.Gold)
45
- ],
46
- series: [
47
- {
48
- arcLabel: (item) => item.value > 0 ? `${(item.value / value.length * 100).toFixed()}%` : "",
49
- data: [
50
- {
51
- value: value.filter((x) => x.rank === Rank.Stone).length,
52
- label: Rank[Rank.Stone]
53
- },
54
- {
55
- value: value.filter((x) => x.rank === Rank.Bronze).length,
56
- label: Rank[Rank.Bronze]
57
- },
58
- {
59
- value: value.filter((x) => x.rank === Rank.Silver).length,
60
- label: Rank[Rank.Silver]
61
- },
62
- {
63
- value: value.filter((x) => x.rank === Rank.Gold).length,
64
- label: Rank[Rank.Gold]
65
- }
66
- ],
67
- highlightScope: { faded: "global", highlighted: "item" },
68
- faded: { color: "gray" },
69
- innerRadius: 90
70
- }
71
- ],
72
- ...size
73
- },
74
- /* @__PURE__ */ React.createElement(PieCenterLabel, null, `${value.length} services`)
75
- )));
37
+ return /* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsxs(CardContent, { children: [
38
+ loading && /* @__PURE__ */ jsx(CircularProgress, { size: 100 }),
39
+ value && value.length > 0 && /* @__PURE__ */ jsx(
40
+ PieChart,
41
+ {
42
+ colors: [
43
+ getRankColor(Rank.Stone),
44
+ getRankColor(Rank.Bronze),
45
+ getRankColor(Rank.Silver),
46
+ getRankColor(Rank.Gold)
47
+ ],
48
+ series: [
49
+ {
50
+ arcLabel: (item) => item.value > 0 ? `${(item.value / value.length * 100).toFixed()}%` : "",
51
+ data: [
52
+ {
53
+ value: value.filter((x) => x.rank === Rank.Stone).length,
54
+ label: Rank[Rank.Stone]
55
+ },
56
+ {
57
+ value: value.filter((x) => x.rank === Rank.Bronze).length,
58
+ label: Rank[Rank.Bronze]
59
+ },
60
+ {
61
+ value: value.filter((x) => x.rank === Rank.Silver).length,
62
+ label: Rank[Rank.Silver]
63
+ },
64
+ {
65
+ value: value.filter((x) => x.rank === Rank.Gold).length,
66
+ label: Rank[Rank.Gold]
67
+ }
68
+ ],
69
+ highlightScope: { faded: "global", highlighted: "item" },
70
+ faded: { color: "gray" },
71
+ innerRadius: 90
72
+ }
73
+ ],
74
+ ...size,
75
+ children: /* @__PURE__ */ jsx(PieCenterLabel, { children: `${value.length} services` })
76
+ }
77
+ )
78
+ ] }) });
76
79
  };
77
80
 
78
81
  export { MaturityChartCard };
@@ -1 +1 @@
1
- {"version":3,"file":"MaturityChartCard.esm.js","sources":["../../../src/components/MaturityChartCard/MaturityChartCard.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Entity } from '@backstage/catalog-model';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { Rank } from '@backstage-community/plugin-tech-insights-maturity-common';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport { styled } from '@mui/material/styles';\nimport { useDrawingArea } from '@mui/x-charts/hooks';\nimport { PieChart } from '@mui/x-charts/PieChart';\nimport React from 'react';\nimport useAsyncRetry from 'react-use/lib/useAsync';\nimport { maturityApiRef } from '../../api';\nimport { getRankColor } from '../../helpers/utils';\n\ntype Props = {\n entities: Entity[];\n};\n\nconst size = {\n width: 380,\n height: 300,\n};\n\nconst StyledText = styled('text')(({ theme }) => ({\n fill: theme.palette.text.primary,\n textAnchor: 'middle',\n dominantBaseline: 'central',\n fontSize: 20,\n}));\n\nfunction PieCenterLabel({ children }: { children: React.ReactNode }) {\n const { width, height, left, top } = useDrawingArea();\n return (\n <StyledText x={left + width / 2} y={top + height / 2}>\n {children}\n </StyledText>\n );\n}\n\nexport const MaturityChartCard = ({ entities }: Props) => {\n const api = useApi(maturityApiRef);\n const { loading, value } = useAsyncRetry(\n async () => api.getBulkMaturityCheckResults(entities),\n [api],\n );\n\n return (\n <Card>\n <CardContent>\n {loading && <CircularProgress size={100} />}\n {value && value.length > 0 && (\n <PieChart\n colors={[\n getRankColor(Rank.Stone),\n getRankColor(Rank.Bronze),\n getRankColor(Rank.Silver),\n getRankColor(Rank.Gold),\n ]}\n series={[\n {\n arcLabel: item =>\n item.value > 0\n ? `${((item.value / value.length) * 100).toFixed()}%`\n : '',\n data: [\n {\n value: value.filter(x => x.rank === Rank.Stone).length,\n label: Rank[Rank.Stone],\n },\n {\n value: value.filter(x => x.rank === Rank.Bronze).length,\n label: Rank[Rank.Bronze],\n },\n {\n value: value.filter(x => x.rank === Rank.Silver).length,\n label: Rank[Rank.Silver],\n },\n {\n value: value.filter(x => x.rank === Rank.Gold).length,\n label: Rank[Rank.Gold],\n },\n ],\n highlightScope: { faded: 'global', highlighted: 'item' },\n faded: { color: 'gray' },\n innerRadius: 90,\n },\n ]}\n {...size}\n >\n <PieCenterLabel>{`${value.length} services`}</PieCenterLabel>\n </PieChart>\n )}\n </CardContent>\n </Card>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAiCA,MAAM,IAAO,GAAA;AAAA,EACX,KAAO,EAAA,GAAA;AAAA,EACP,MAAQ,EAAA;AACV,CAAA;AAEA,MAAM,aAAa,MAAO,CAAA,MAAM,EAAE,CAAC,EAAE,OAAa,MAAA;AAAA,EAChD,IAAA,EAAM,KAAM,CAAA,OAAA,CAAQ,IAAK,CAAA,OAAA;AAAA,EACzB,UAAY,EAAA,QAAA;AAAA,EACZ,gBAAkB,EAAA,SAAA;AAAA,EAClB,QAAU,EAAA;AACZ,CAAE,CAAA,CAAA;AAEF,SAAS,cAAA,CAAe,EAAE,QAAA,EAA2C,EAAA;AACnE,EAAA,MAAM,EAAE,KAAO,EAAA,MAAA,EAAQ,IAAM,EAAA,GAAA,KAAQ,cAAe,EAAA;AACpD,EACE,uBAAA,KAAA,CAAA,aAAA,CAAC,UAAW,EAAA,EAAA,CAAA,EAAG,IAAO,GAAA,KAAA,GAAQ,GAAG,CAAG,EAAA,GAAA,GAAM,MAAS,GAAA,CAAA,EAAA,EAChD,QACH,CAAA;AAEJ;AAEO,MAAM,iBAAoB,GAAA,CAAC,EAAE,QAAA,EAAsB,KAAA;AACxD,EAAM,MAAA,GAAA,GAAM,OAAO,cAAc,CAAA;AACjC,EAAM,MAAA,EAAE,OAAS,EAAA,KAAA,EAAU,GAAA,aAAA;AAAA,IACzB,YAAY,GAAI,CAAA,2BAAA,CAA4B,QAAQ,CAAA;AAAA,IACpD,CAAC,GAAG;AAAA,GACN;AAEA,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,IAAA,kBACE,KAAA,CAAA,aAAA,CAAA,WAAA,EAAA,IAAA,EACE,OAAW,oBAAA,KAAA,CAAA,aAAA,CAAC,gBAAiB,EAAA,EAAA,IAAA,EAAM,GAAK,EAAA,CAAA,EACxC,KAAS,IAAA,KAAA,CAAM,SAAS,CACvB,oBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,MAAQ,EAAA;AAAA,QACN,YAAA,CAAa,KAAK,KAAK,CAAA;AAAA,QACvB,YAAA,CAAa,KAAK,MAAM,CAAA;AAAA,QACxB,YAAA,CAAa,KAAK,MAAM,CAAA;AAAA,QACxB,YAAA,CAAa,KAAK,IAAI;AAAA,OACxB;AAAA,MACA,MAAQ,EAAA;AAAA,QACN;AAAA,UACE,QAAU,EAAA,CAAA,IAAA,KACR,IAAK,CAAA,KAAA,GAAQ,CACT,GAAA,CAAA,EAAA,CAAK,IAAK,CAAA,KAAA,GAAQ,KAAM,CAAA,MAAA,GAAU,GAAK,EAAA,OAAA,EAAS,CAChD,CAAA,CAAA,GAAA,EAAA;AAAA,UACN,IAAM,EAAA;AAAA,YACJ;AAAA,cACE,KAAA,EAAO,MAAM,MAAO,CAAA,CAAA,CAAA,KAAK,EAAE,IAAS,KAAA,IAAA,CAAK,KAAK,CAAE,CAAA,MAAA;AAAA,cAChD,KAAA,EAAO,IAAK,CAAA,IAAA,CAAK,KAAK;AAAA,aACxB;AAAA,YACA;AAAA,cACE,KAAA,EAAO,MAAM,MAAO,CAAA,CAAA,CAAA,KAAK,EAAE,IAAS,KAAA,IAAA,CAAK,MAAM,CAAE,CAAA,MAAA;AAAA,cACjD,KAAA,EAAO,IAAK,CAAA,IAAA,CAAK,MAAM;AAAA,aACzB;AAAA,YACA;AAAA,cACE,KAAA,EAAO,MAAM,MAAO,CAAA,CAAA,CAAA,KAAK,EAAE,IAAS,KAAA,IAAA,CAAK,MAAM,CAAE,CAAA,MAAA;AAAA,cACjD,KAAA,EAAO,IAAK,CAAA,IAAA,CAAK,MAAM;AAAA,aACzB;AAAA,YACA;AAAA,cACE,KAAA,EAAO,MAAM,MAAO,CAAA,CAAA,CAAA,KAAK,EAAE,IAAS,KAAA,IAAA,CAAK,IAAI,CAAE,CAAA,MAAA;AAAA,cAC/C,KAAA,EAAO,IAAK,CAAA,IAAA,CAAK,IAAI;AAAA;AACvB,WACF;AAAA,UACA,cAAgB,EAAA,EAAE,KAAO,EAAA,QAAA,EAAU,aAAa,MAAO,EAAA;AAAA,UACvD,KAAA,EAAO,EAAE,KAAA,EAAO,MAAO,EAAA;AAAA,UACvB,WAAa,EAAA;AAAA;AACf,OACF;AAAA,MACC,GAAG;AAAA,KAAA;AAAA,oBAEH,KAAA,CAAA,aAAA,CAAA,cAAA,EAAA,IAAA,EAAgB,CAAG,EAAA,KAAA,CAAM,MAAM,CAAY,SAAA,CAAA;AAAA,GAGlD,CACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"MaturityChartCard.esm.js","sources":["../../../src/components/MaturityChartCard/MaturityChartCard.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Entity } from '@backstage/catalog-model';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { Rank } from '@backstage-community/plugin-tech-insights-maturity-common';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport { styled } from '@mui/material/styles';\nimport { useDrawingArea } from '@mui/x-charts/hooks';\nimport { PieChart } from '@mui/x-charts/PieChart';\nimport type { ReactNode } from 'react';\nimport useAsyncRetry from 'react-use/lib/useAsync';\nimport { maturityApiRef } from '../../api';\nimport { getRankColor } from '../../helpers/utils';\n\ntype Props = {\n entities: Entity[];\n};\n\nconst size = {\n width: 380,\n height: 300,\n};\n\nconst StyledText = styled('text')(({ theme }) => ({\n fill: theme.palette.text.primary,\n textAnchor: 'middle',\n dominantBaseline: 'central',\n fontSize: 20,\n}));\n\nfunction PieCenterLabel({ children }: { children: ReactNode }) {\n const { width, height, left, top } = useDrawingArea();\n return (\n <StyledText x={left + width / 2} y={top + height / 2}>\n {children}\n </StyledText>\n );\n}\n\nexport const MaturityChartCard = ({ entities }: Props) => {\n const api = useApi(maturityApiRef);\n const { loading, value } = useAsyncRetry(\n async () => api.getBulkMaturityCheckResults(entities),\n [api],\n );\n\n return (\n <Card>\n <CardContent>\n {loading && <CircularProgress size={100} />}\n {value && value.length > 0 && (\n <PieChart\n colors={[\n getRankColor(Rank.Stone),\n getRankColor(Rank.Bronze),\n getRankColor(Rank.Silver),\n getRankColor(Rank.Gold),\n ]}\n series={[\n {\n arcLabel: item =>\n item.value > 0\n ? `${((item.value / value.length) * 100).toFixed()}%`\n : '',\n data: [\n {\n value: value.filter(x => x.rank === Rank.Stone).length,\n label: Rank[Rank.Stone],\n },\n {\n value: value.filter(x => x.rank === Rank.Bronze).length,\n label: Rank[Rank.Bronze],\n },\n {\n value: value.filter(x => x.rank === Rank.Silver).length,\n label: Rank[Rank.Silver],\n },\n {\n value: value.filter(x => x.rank === Rank.Gold).length,\n label: Rank[Rank.Gold],\n },\n ],\n highlightScope: { faded: 'global', highlighted: 'item' },\n faded: { color: 'gray' },\n innerRadius: 90,\n },\n ]}\n {...size}\n >\n <PieCenterLabel>{`${value.length} services`}</PieCenterLabel>\n </PieChart>\n )}\n </CardContent>\n </Card>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
1
2
  import { Page, Header, Content } from '@backstage/core-components';
2
3
  import { useApi } from '@backstage/core-plugin-api';
3
4
  import { catalogApiRef } from '@backstage/plugin-catalog-react';
4
5
  import Grid from '@mui/material/Grid';
5
- import React from 'react';
6
6
  import useAsyncRetry from 'react-use/lib/useAsync';
7
7
  import { MaturityChartCard } from '../MaturityChartCard/MaturityChartCard.esm.js';
8
8
 
@@ -14,7 +14,10 @@ const MaturityPage = () => {
14
14
  });
15
15
  return entitiesList.items;
16
16
  }, [catalogApi]);
17
- return /* @__PURE__ */ React.createElement(Page, { themeId: "home" }, /* @__PURE__ */ React.createElement(Header, { title: "Maturity" }), /* @__PURE__ */ React.createElement(Content, null, /* @__PURE__ */ React.createElement(Grid, { container: true }, /* @__PURE__ */ React.createElement(Grid, { item: true, md: 4 }, /* @__PURE__ */ React.createElement(MaturityChartCard, { entities: entities ?? [] })))));
17
+ return /* @__PURE__ */ jsxs(Page, { themeId: "home", children: [
18
+ /* @__PURE__ */ jsx(Header, { title: "Maturity" }),
19
+ /* @__PURE__ */ jsx(Content, { children: /* @__PURE__ */ jsx(Grid, { container: true, children: /* @__PURE__ */ jsx(Grid, { item: true, md: 4, children: /* @__PURE__ */ jsx(MaturityChartCard, { entities: entities ?? [] }) }) }) })
20
+ ] });
18
21
  };
19
22
 
20
23
  export { MaturityPage };
@@ -1 +1 @@
1
- {"version":3,"file":"MaturityPage.esm.js","sources":["../../../src/components/MaturityPage/MaturityPage.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Content, Header, Page } from '@backstage/core-components';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { catalogApiRef } from '@backstage/plugin-catalog-react';\nimport Grid from '@mui/material/Grid';\nimport React from 'react';\nimport useAsyncRetry from 'react-use/lib/useAsync';\nimport { MaturityChartCard } from '../MaturityChartCard';\n\nexport const MaturityPage = () => {\n const catalogApi = useApi(catalogApiRef);\n\n const { value: entities } = useAsyncRetry(async () => {\n const entitiesList = await catalogApi.getEntities({\n filter: { kind: ['Component'] },\n });\n return entitiesList.items;\n }, [catalogApi]);\n\n return (\n <Page themeId=\"home\">\n <Header title=\"Maturity\" />\n <Content>\n <Grid container>\n <Grid item md={4}>\n <MaturityChartCard entities={entities ?? []} />\n </Grid>\n </Grid>\n </Content>\n </Page>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAuBO,MAAM,eAAe,MAAM;AAChC,EAAM,MAAA,UAAA,GAAa,OAAO,aAAa,CAAA;AAEvC,EAAA,MAAM,EAAE,KAAA,EAAO,QAAS,EAAA,GAAI,cAAc,YAAY;AACpD,IAAM,MAAA,YAAA,GAAe,MAAM,UAAA,CAAW,WAAY,CAAA;AAAA,MAChD,MAAQ,EAAA,EAAE,IAAM,EAAA,CAAC,WAAW,CAAE;AAAA,KAC/B,CAAA;AACD,IAAA,OAAO,YAAa,CAAA,KAAA;AAAA,GACtB,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,OAAQ,EAAA,MAAA,EAAA,kBACX,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAO,KAAM,EAAA,UAAA,EAAW,CACzB,kBAAA,KAAA,CAAA,aAAA,CAAC,OACC,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,QAAK,SAAS,EAAA,IAAA,EAAA,kBACZ,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,EAAI,EAAA,CAAA,EAAA,kBACZ,KAAA,CAAA,aAAA,CAAA,iBAAA,EAAA,EAAkB,QAAU,EAAA,QAAA,IAAY,EAAC,EAAG,CAC/C,CACF,CACF,CACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"MaturityPage.esm.js","sources":["../../../src/components/MaturityPage/MaturityPage.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Content, Header, Page } from '@backstage/core-components';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { catalogApiRef } from '@backstage/plugin-catalog-react';\nimport Grid from '@mui/material/Grid';\nimport useAsyncRetry from 'react-use/lib/useAsync';\nimport { MaturityChartCard } from '../MaturityChartCard';\n\nexport const MaturityPage = () => {\n const catalogApi = useApi(catalogApiRef);\n\n const { value: entities } = useAsyncRetry(async () => {\n const entitiesList = await catalogApi.getEntities({\n filter: { kind: ['Component'] },\n });\n return entitiesList.items;\n }, [catalogApi]);\n\n return (\n <Page themeId=\"home\">\n <Header title=\"Maturity\" />\n <Content>\n <Grid container>\n <Grid item md={4}>\n <MaturityChartCard entities={entities ?? []} />\n </Grid>\n </Grid>\n </Content>\n </Page>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAsBO,MAAM,eAAe,MAAM;AAChC,EAAM,MAAA,UAAA,GAAa,OAAO,aAAa,CAAA;AAEvC,EAAA,MAAM,EAAE,KAAA,EAAO,QAAS,EAAA,GAAI,cAAc,YAAY;AACpD,IAAM,MAAA,YAAA,GAAe,MAAM,UAAA,CAAW,WAAY,CAAA;AAAA,MAChD,MAAQ,EAAA,EAAE,IAAM,EAAA,CAAC,WAAW,CAAE;AAAA,KAC/B,CAAA;AACD,IAAA,OAAO,YAAa,CAAA,KAAA;AAAA,GACtB,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EACE,uBAAA,IAAA,CAAC,IAAK,EAAA,EAAA,OAAA,EAAQ,MACZ,EAAA,QAAA,EAAA;AAAA,oBAAC,GAAA,CAAA,MAAA,EAAA,EAAO,OAAM,UAAW,EAAA,CAAA;AAAA,oBACzB,GAAA,CAAC,WACC,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA,EAAK,WAAS,IACb,EAAA,QAAA,kBAAA,GAAA,CAAC,QAAK,IAAI,EAAA,IAAA,EAAC,IAAI,CACb,EAAA,QAAA,kBAAA,GAAA,CAAC,qBAAkB,QAAU,EAAA,QAAA,IAAY,EAAI,EAAA,CAAA,EAC/C,GACF,CACF,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
@@ -1,9 +1,9 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
1
2
  import { Rank } from '@backstage-community/plugin-tech-insights-maturity-common';
2
3
  import Avatar from '@mui/material/Avatar';
3
4
  import Chip from '@mui/material/Chip';
4
5
  import Tooltip from '@mui/material/Tooltip';
5
6
  import { Circle } from 'rc-progress';
6
- import React from 'react';
7
7
  import getRankImg from '../../helpers/Rank.esm.js';
8
8
  import { getNextRankColor, pluralize } from '../../helpers/utils.esm.js';
9
9
  import { MaturityLink } from '../../helpers/MaturityLink.esm.js';
@@ -18,7 +18,7 @@ const ChipWrapper = ({
18
18
  if (isMaxRank) {
19
19
  backgroundColor = "rgb(35, 180, 70, 1)";
20
20
  }
21
- return /* @__PURE__ */ React.createElement(
21
+ return /* @__PURE__ */ jsx(
22
22
  Chip,
23
23
  {
24
24
  avatar: children,
@@ -44,7 +44,7 @@ const MaturityRankAvatar = ({
44
44
  const rank = value.rank;
45
45
  const maxRank = value.isMaxRank ? value.rank : Rank.Gold;
46
46
  const img = getRankImg(rank);
47
- result = /* @__PURE__ */ React.createElement(
47
+ result = /* @__PURE__ */ jsx(
48
48
  Avatar,
49
49
  {
50
50
  alt: Rank[rank],
@@ -60,7 +60,7 @@ const MaturityRankAvatar = ({
60
60
  remainingTasks
61
61
  )} left)`;
62
62
  tooltip = value.isMaxRank ? `${Rank[rank]} rank acquired` : `${progress.percentage}% to ${Rank[rank + 1]} ${remainingTasksTip}`;
63
- result = /* @__PURE__ */ React.createElement(
63
+ result = /* @__PURE__ */ jsxs(
64
64
  "div",
65
65
  {
66
66
  style: {
@@ -68,32 +68,34 @@ const MaturityRankAvatar = ({
68
68
  position: "relative",
69
69
  alignItems: "center",
70
70
  justifyContent: "center"
71
- }
72
- },
73
- /* @__PURE__ */ React.createElement(
74
- Circle,
75
- {
76
- strokeColor: getNextRankColor(rank, maxRank),
77
- trailColor: "rgba(0, 0, 0, 0.1)",
78
- strokeWidth: 14,
79
- trailWidth: 14,
80
- percent: progress.percentage,
81
- style: { width: size + size / 4, height: size + size / 4 }
82
- }
83
- ),
84
- /* @__PURE__ */ React.createElement("div", { style: { zIndex: 1, position: "absolute" } }, result)
71
+ },
72
+ children: [
73
+ /* @__PURE__ */ jsx(
74
+ Circle,
75
+ {
76
+ strokeColor: getNextRankColor(rank, maxRank),
77
+ trailColor: "rgba(0, 0, 0, 0.1)",
78
+ strokeWidth: 14,
79
+ trailWidth: 14,
80
+ percent: progress.percentage,
81
+ style: { width: size + size / 4, height: size + size / 4 }
82
+ }
83
+ ),
84
+ /* @__PURE__ */ jsx("div", { style: { zIndex: 1, position: "absolute" }, children: result })
85
+ ]
86
+ }
85
87
  );
86
88
  } else {
87
89
  tooltip = Rank[rank];
88
90
  }
89
91
  if (variant === "chip") {
90
92
  tooltip = value.isMaxRank ? "All required tasks have been completed!" : `Increase your rank by completing all ${Rank[rank + 1]} rank tasks!`;
91
- result = /* @__PURE__ */ React.createElement(ChipWrapper, { rank, size, isMaxRank: value.isMaxRank }, result);
93
+ result = /* @__PURE__ */ jsx(ChipWrapper, { rank, size, isMaxRank: value.isMaxRank, children: result });
92
94
  }
93
95
  if (entity !== void 0) {
94
- result = /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement(MaturityLink, { entity }, result));
96
+ result = /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(MaturityLink, { entity, children: result }) });
95
97
  }
96
- return /* @__PURE__ */ React.createElement(Tooltip, { title: tooltip, arrow: true }, result);
98
+ return /* @__PURE__ */ jsx(Tooltip, { title: tooltip, arrow: true, children: result });
97
99
  };
98
100
 
99
101
  export { MaturityRankAvatar };
@@ -1 +1 @@
1
- {"version":3,"file":"MaturityRankAvatar.esm.js","sources":["../../../src/components/MaturityRankAvatar/MaturityRankAvatar.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Entity } from '@backstage/catalog-model';\nimport {\n MaturityProgress,\n Rank,\n} from '@backstage-community/plugin-tech-insights-maturity-common';\nimport Avatar from '@mui/material/Avatar';\nimport Chip from '@mui/material/Chip';\nimport Tooltip from '@mui/material/Tooltip';\nimport { Circle } from 'rc-progress';\nimport React from 'react';\nimport getRankImg from '../../helpers/Rank';\nimport { getNextRankColor, pluralize } from '../../helpers/utils';\nimport { MaturityLink } from '../../helpers/MaturityLink';\n\nconst ChipWrapper = ({\n children,\n rank,\n size,\n isMaxRank,\n}: {\n children: React.JSX.Element;\n rank: Rank;\n size: number;\n isMaxRank?: boolean;\n}) => {\n let backgroundColor;\n if (isMaxRank) {\n backgroundColor = 'rgb(35, 180, 70, 1)';\n }\n\n return (\n <Chip\n avatar={children}\n label={Rank[rank]}\n style={{\n height: size + 7,\n backgroundColor,\n margin: '0',\n }}\n clickable\n />\n );\n};\n\ntype Props = {\n value: { rank: Rank; isMaxRank?: boolean };\n className?: string;\n entity?: Entity;\n size?: number;\n progress?: MaturityProgress;\n variant?: 'chip';\n};\n\nexport const MaturityRankAvatar = ({\n className,\n entity,\n progress,\n size = 27,\n value,\n variant,\n}: Props) => {\n let result;\n const rank = value.rank;\n const maxRank = value.isMaxRank ? value.rank : Rank.Gold;\n\n const img = getRankImg(rank);\n\n // Define base Avatar element\n result = (\n <Avatar\n alt={Rank[rank]}\n src={img}\n className={className}\n style={{ width: size, height: size }}\n />\n );\n\n let tooltip = '';\n\n // Wrap Avatar with a progress indicator if provided\n if (progress !== undefined) {\n const remainingTasks = progress.totalChecks - progress.passedChecks;\n const remainingTasksTip = `(${remainingTasks} task${pluralize(\n remainingTasks,\n )} left)`;\n tooltip = value.isMaxRank\n ? `${Rank[rank]} rank acquired`\n : `${progress.percentage}% to ${Rank[rank + 1]} ${remainingTasksTip}`;\n\n result = (\n <div\n style={{\n display: 'flex',\n position: 'relative',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Circle\n strokeColor={getNextRankColor(rank, maxRank)}\n trailColor=\"rgba(0, 0, 0, 0.1)\"\n strokeWidth={14}\n trailWidth={14}\n percent={progress.percentage}\n style={{ width: size + size / 4, height: size + size / 4 }}\n />\n <div style={{ zIndex: 1, position: 'absolute' }}>{result}</div>\n </div>\n );\n } else {\n tooltip = Rank[rank];\n }\n\n // Wrap Avatar in Chip if specified\n if (variant === 'chip') {\n tooltip = value.isMaxRank\n ? 'All required tasks have been completed!'\n : `Increase your rank by completing all ${Rank[rank + 1]} rank tasks!`;\n\n result = (\n <ChipWrapper rank={rank} size={size} isMaxRank={value.isMaxRank}>\n {result}\n </ChipWrapper>\n );\n }\n\n // Wrap with Entity link if Entity is provided\n if (entity !== undefined) {\n result = (\n <div>\n <MaturityLink entity={entity}>{result}</MaturityLink>\n </div>\n );\n }\n\n // Wrap with tooltip and return\n return (\n <Tooltip title={tooltip} arrow>\n {result}\n </Tooltip>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MaturityRankAvatar.esm.js","sources":["../../../src/components/MaturityRankAvatar/MaturityRankAvatar.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Entity } from '@backstage/catalog-model';\nimport {\n MaturityProgress,\n Rank,\n} from '@backstage-community/plugin-tech-insights-maturity-common';\nimport Avatar from '@mui/material/Avatar';\nimport Chip from '@mui/material/Chip';\nimport Tooltip from '@mui/material/Tooltip';\nimport { Circle } from 'rc-progress';\nimport type { JSX } from 'react';\nimport getRankImg from '../../helpers/Rank';\nimport { getNextRankColor, pluralize } from '../../helpers/utils';\nimport { MaturityLink } from '../../helpers/MaturityLink';\n\nconst ChipWrapper = ({\n children,\n rank,\n size,\n isMaxRank,\n}: {\n children: JSX.Element;\n rank: Rank;\n size: number;\n isMaxRank?: boolean;\n}) => {\n let backgroundColor;\n if (isMaxRank) {\n backgroundColor = 'rgb(35, 180, 70, 1)';\n }\n\n return (\n <Chip\n avatar={children}\n label={Rank[rank]}\n style={{\n height: size + 7,\n backgroundColor,\n margin: '0',\n }}\n clickable\n />\n );\n};\n\ntype Props = {\n value: { rank: Rank; isMaxRank?: boolean };\n className?: string;\n entity?: Entity;\n size?: number;\n progress?: MaturityProgress;\n variant?: 'chip';\n};\n\nexport const MaturityRankAvatar = ({\n className,\n entity,\n progress,\n size = 27,\n value,\n variant,\n}: Props) => {\n let result;\n const rank = value.rank;\n const maxRank = value.isMaxRank ? value.rank : Rank.Gold;\n\n const img = getRankImg(rank);\n\n // Define base Avatar element\n result = (\n <Avatar\n alt={Rank[rank]}\n src={img}\n className={className}\n style={{ width: size, height: size }}\n />\n );\n\n let tooltip = '';\n\n // Wrap Avatar with a progress indicator if provided\n if (progress !== undefined) {\n const remainingTasks = progress.totalChecks - progress.passedChecks;\n const remainingTasksTip = `(${remainingTasks} task${pluralize(\n remainingTasks,\n )} left)`;\n tooltip = value.isMaxRank\n ? `${Rank[rank]} rank acquired`\n : `${progress.percentage}% to ${Rank[rank + 1]} ${remainingTasksTip}`;\n\n result = (\n <div\n style={{\n display: 'flex',\n position: 'relative',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Circle\n strokeColor={getNextRankColor(rank, maxRank)}\n trailColor=\"rgba(0, 0, 0, 0.1)\"\n strokeWidth={14}\n trailWidth={14}\n percent={progress.percentage}\n style={{ width: size + size / 4, height: size + size / 4 }}\n />\n <div style={{ zIndex: 1, position: 'absolute' }}>{result}</div>\n </div>\n );\n } else {\n tooltip = Rank[rank];\n }\n\n // Wrap Avatar in Chip if specified\n if (variant === 'chip') {\n tooltip = value.isMaxRank\n ? 'All required tasks have been completed!'\n : `Increase your rank by completing all ${Rank[rank + 1]} rank tasks!`;\n\n result = (\n <ChipWrapper rank={rank} size={size} isMaxRank={value.isMaxRank}>\n {result}\n </ChipWrapper>\n );\n }\n\n // Wrap with Entity link if Entity is provided\n if (entity !== undefined) {\n result = (\n <div>\n <MaturityLink entity={entity}>{result}</MaturityLink>\n </div>\n );\n }\n\n // Wrap with tooltip and return\n return (\n <Tooltip title={tooltip} arrow>\n {result}\n </Tooltip>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import React from 'react';
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { Fragment } from 'react';
2
3
  import { InfoCard } from '@backstage/core-components';
3
4
  import { Rank } from '@backstage-community/plugin-tech-insights-maturity-common';
4
5
  import { makeStyles } from '@mui/styles';
@@ -45,7 +46,7 @@ function rankProgress(rank, value) {
45
46
  return void 0;
46
47
  }
47
48
  function getRankAvatarProgress(rank, value) {
48
- return /* @__PURE__ */ React.createElement(
49
+ return /* @__PURE__ */ jsx(
49
50
  MaturityRankAvatar,
50
51
  {
51
52
  value: { rank, isMaxRank: true },
@@ -56,23 +57,37 @@ function getRankAvatarProgress(rank, value) {
56
57
  }
57
58
  const MaturityRankInfoCard = ({ summary }) => {
58
59
  const { content } = useStyles();
59
- return /* @__PURE__ */ React.createElement(
60
+ return /* @__PURE__ */ jsxs(
60
61
  InfoCard,
61
62
  {
62
- title: /* @__PURE__ */ React.createElement(React.Fragment, null, "Maturity Rank", /* @__PURE__ */ React.createElement(MaturityHelp, null))
63
- },
64
- /* @__PURE__ */ React.createElement(CardContent, null, /* @__PURE__ */ React.createElement(Stack, { direction: "row", spacing: 5 }, getRankAvatarProgress(Rank.Stone, summary), getRankAvatarProgress(Rank.Bronze, summary), getRankAvatarProgress(Rank.Silver, summary), getRankAvatarProgress(Rank.Gold, summary))),
65
- /* @__PURE__ */ React.createElement(CardContent, null, /* @__PURE__ */ React.createElement(
66
- MaturityRankAvatar,
67
- {
68
- value: summary,
69
- size: 80,
70
- progress: summary.rankProgress,
71
- className: content
72
- }
73
- ), /* @__PURE__ */ React.createElement(Typography, { variant: "h6", align: "center" }, Rank[summary.rank]), /* @__PURE__ */ React.createElement(Typography, { variant: "subtitle2", align: "center" }, RankDescription.get(summary.rank))),
74
- /* @__PURE__ */ React.createElement(Divider, null),
75
- /* @__PURE__ */ React.createElement(CardContent, null, /* @__PURE__ */ React.createElement(MaturitySummaryCardContent, { summary, variant: "infoCard" }))
63
+ title: /* @__PURE__ */ jsxs(Fragment, { children: [
64
+ "Maturity Rank",
65
+ /* @__PURE__ */ jsx(MaturityHelp, {})
66
+ ] }),
67
+ children: [
68
+ /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsxs(Stack, { direction: "row", spacing: 5, children: [
69
+ getRankAvatarProgress(Rank.Stone, summary),
70
+ getRankAvatarProgress(Rank.Bronze, summary),
71
+ getRankAvatarProgress(Rank.Silver, summary),
72
+ getRankAvatarProgress(Rank.Gold, summary)
73
+ ] }) }),
74
+ /* @__PURE__ */ jsxs(CardContent, { children: [
75
+ /* @__PURE__ */ jsx(
76
+ MaturityRankAvatar,
77
+ {
78
+ value: summary,
79
+ size: 80,
80
+ progress: summary.rankProgress,
81
+ className: content
82
+ }
83
+ ),
84
+ /* @__PURE__ */ jsx(Typography, { variant: "h6", align: "center", children: Rank[summary.rank] }),
85
+ /* @__PURE__ */ jsx(Typography, { variant: "subtitle2", align: "center", children: RankDescription.get(summary.rank) })
86
+ ] }),
87
+ /* @__PURE__ */ jsx(Divider, {}),
88
+ /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(MaturitySummaryCardContent, { summary, variant: "infoCard" }) })
89
+ ]
90
+ }
76
91
  );
77
92
  };
78
93
 
@@ -1 +1 @@
1
- {"version":3,"file":"MaturityRankInfoCard.esm.js","sources":["../../../src/components/MaturityRankInfoCard/MaturityRankInfoCard.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\nimport { InfoCard } from '@backstage/core-components';\nimport {\n MaturitySummary,\n Rank,\n} from '@backstage-community/plugin-tech-insights-maturity-common';\nimport { makeStyles } from '@mui/styles';\nimport Typography from '@mui/material/Typography';\nimport CardContent from '@mui/material/CardContent';\nimport Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport { MaturitySummaryCardContent } from '../MaturitySummaryInfoCard/MaturitySummaryCardContent';\nimport { MaturityHelp } from '../../helpers/MaturityHelp';\nimport { MaturityRankAvatar } from '../MaturityRankAvatar';\n\ntype Props = {\n summary: MaturitySummary;\n};\n\nconst useStyles = makeStyles({\n content: {\n justifyContent: 'center',\n margin: 'auto',\n },\n});\n\nconst RankDescription = new Map<number, string>([\n [\n Rank.Stone,\n 'Entity does not utilize standard infrastructure or tools to ensure effective operations',\n ],\n [\n Rank.Bronze,\n 'Has full Ownership, but Maintainability, Security, and Reliability are not ensured',\n ],\n [\n Rank.Silver,\n 'Ownership, Maintainability, and Security are ensured, but Reliability is not guaranteed',\n ],\n [\n Rank.Gold,\n 'Conforms with the Golden Path standards. Ownership, Maintainability, Security, and Reliability are all ensured',\n ],\n]);\n\nfunction rankProgress(rank: Rank, value: MaturitySummary) {\n if (value.rank >= rank || (value.maxRank === rank && value.isMaxRank)) {\n return {\n passedChecks: 0,\n totalChecks: 0,\n percentage: 100,\n };\n }\n return undefined;\n}\n\nfunction getRankAvatarProgress(rank: Rank, value: MaturitySummary) {\n return (\n <MaturityRankAvatar\n value={{ rank, isMaxRank: true }}\n size={25}\n progress={rankProgress(rank, value)}\n />\n );\n}\n\nexport const MaturityRankInfoCard = ({ summary }: Props) => {\n const { content } = useStyles();\n\n return (\n <InfoCard\n title={\n <React.Fragment>\n Maturity Rank\n <MaturityHelp />\n </React.Fragment>\n }\n >\n <CardContent>\n <Stack direction=\"row\" spacing={5}>\n {getRankAvatarProgress(Rank.Stone, summary)}\n {getRankAvatarProgress(Rank.Bronze, summary)}\n {getRankAvatarProgress(Rank.Silver, summary)}\n {getRankAvatarProgress(Rank.Gold, summary)}\n </Stack>\n </CardContent>\n <CardContent>\n <MaturityRankAvatar\n value={summary}\n size={80}\n progress={summary.rankProgress}\n className={content}\n />\n <Typography variant=\"h6\" align=\"center\">\n {Rank[summary.rank]}\n </Typography>\n <Typography variant=\"subtitle2\" align=\"center\">\n {RankDescription.get(summary.rank)}\n </Typography>\n </CardContent>\n <Divider />\n <CardContent>\n <MaturitySummaryCardContent summary={summary} variant=\"infoCard\" />\n </CardContent>\n </InfoCard>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MaturityRankInfoCard.esm.js","sources":["../../../src/components/MaturityRankInfoCard/MaturityRankInfoCard.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Fragment } from 'react';\nimport { InfoCard } from '@backstage/core-components';\nimport {\n MaturitySummary,\n Rank,\n} from '@backstage-community/plugin-tech-insights-maturity-common';\nimport { makeStyles } from '@mui/styles';\nimport Typography from '@mui/material/Typography';\nimport CardContent from '@mui/material/CardContent';\nimport Divider from '@mui/material/Divider';\nimport Stack from '@mui/material/Stack';\nimport { MaturitySummaryCardContent } from '../MaturitySummaryInfoCard/MaturitySummaryCardContent';\nimport { MaturityHelp } from '../../helpers/MaturityHelp';\nimport { MaturityRankAvatar } from '../MaturityRankAvatar';\n\ntype Props = {\n summary: MaturitySummary;\n};\n\nconst useStyles = makeStyles({\n content: {\n justifyContent: 'center',\n margin: 'auto',\n },\n});\n\nconst RankDescription = new Map<number, string>([\n [\n Rank.Stone,\n 'Entity does not utilize standard infrastructure or tools to ensure effective operations',\n ],\n [\n Rank.Bronze,\n 'Has full Ownership, but Maintainability, Security, and Reliability are not ensured',\n ],\n [\n Rank.Silver,\n 'Ownership, Maintainability, and Security are ensured, but Reliability is not guaranteed',\n ],\n [\n Rank.Gold,\n 'Conforms with the Golden Path standards. Ownership, Maintainability, Security, and Reliability are all ensured',\n ],\n]);\n\nfunction rankProgress(rank: Rank, value: MaturitySummary) {\n if (value.rank >= rank || (value.maxRank === rank && value.isMaxRank)) {\n return {\n passedChecks: 0,\n totalChecks: 0,\n percentage: 100,\n };\n }\n return undefined;\n}\n\nfunction getRankAvatarProgress(rank: Rank, value: MaturitySummary) {\n return (\n <MaturityRankAvatar\n value={{ rank, isMaxRank: true }}\n size={25}\n progress={rankProgress(rank, value)}\n />\n );\n}\n\nexport const MaturityRankInfoCard = ({ summary }: Props) => {\n const { content } = useStyles();\n\n return (\n <InfoCard\n title={\n <Fragment>\n Maturity Rank\n <MaturityHelp />\n </Fragment>\n }\n >\n <CardContent>\n <Stack direction=\"row\" spacing={5}>\n {getRankAvatarProgress(Rank.Stone, summary)}\n {getRankAvatarProgress(Rank.Bronze, summary)}\n {getRankAvatarProgress(Rank.Silver, summary)}\n {getRankAvatarProgress(Rank.Gold, summary)}\n </Stack>\n </CardContent>\n <CardContent>\n <MaturityRankAvatar\n value={summary}\n size={80}\n progress={summary.rankProgress}\n className={content}\n />\n <Typography variant=\"h6\" align=\"center\">\n {Rank[summary.rank]}\n </Typography>\n <Typography variant=\"subtitle2\" align=\"center\">\n {RankDescription.get(summary.rank)}\n </Typography>\n </CardContent>\n <Divider />\n <CardContent>\n <MaturitySummaryCardContent summary={summary} variant=\"infoCard\" />\n </CardContent>\n </InfoCard>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import { jsx, Fragment } from 'react/jsx-runtime';
2
2
  import useAsyncRetry from 'react-use/lib/useAsync';
3
3
  import { useApi } from '@backstage/core-plugin-api';
4
4
  import { maturityApiRef } from '../../api/MaturityApi.esm.js';
@@ -14,8 +14,8 @@ const MaturityRankWidget = ({ entity }) => {
14
14
  async () => api.getMaturityRank(entity),
15
15
  [api, entity]
16
16
  );
17
- if (loading || !value) return /* @__PURE__ */ React.createElement(React.Fragment, null);
18
- return /* @__PURE__ */ React.createElement(MaturityRankAvatar, { entity, value, variant: "chip" });
17
+ if (loading || !value) return /* @__PURE__ */ jsx(Fragment, {});
18
+ return /* @__PURE__ */ jsx(MaturityRankAvatar, { entity, value, variant: "chip" });
19
19
  };
20
20
 
21
21
  export { MaturityRankWidget };
@@ -1 +1 @@
1
- {"version":3,"file":"MaturityRankWidget.esm.js","sources":["../../../src/components/MaturityRankWidget/MaturityRankWidget.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\nimport useAsyncRetry from 'react-use/lib/useAsync';\n\nimport { Entity } from '@backstage/catalog-model';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { maturityApiRef } from '../../api';\nimport { MaturityRankAvatar } from '../MaturityRankAvatar';\n\ntype Props = {\n entity: Entity;\n};\n\nexport const MaturityRankWidget = ({ entity }: Props) => {\n const api = useApi(maturityApiRef);\n const { value, loading } = useAsyncRetry(\n async () => api.getMaturityRank(entity),\n [api, entity],\n );\n\n if (loading || !value) return <></>;\n return <MaturityRankAvatar entity={entity} value={value} variant=\"chip\" />;\n};\n"],"names":[],"mappings":";;;;;;;;;;AA2BO,MAAM,kBAAqB,GAAA,CAAC,EAAE,MAAA,EAAoB,KAAA;AACvD,EAAM,MAAA,GAAA,GAAM,OAAO,cAAc,CAAA;AACjC,EAAM,MAAA,EAAE,KAAO,EAAA,OAAA,EAAY,GAAA,aAAA;AAAA,IACzB,YAAY,GAAI,CAAA,eAAA,CAAgB,MAAM,CAAA;AAAA,IACtC,CAAC,KAAK,MAAM;AAAA,GACd;AAEA,EAAA,IAAI,OAAW,IAAA,CAAC,KAAO,EAAA,uBAAS,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,CAAA;AAChC,EAAA,uBAAQ,KAAA,CAAA,aAAA,CAAA,kBAAA,EAAA,EAAmB,MAAgB,EAAA,KAAA,EAAc,SAAQ,MAAO,EAAA,CAAA;AAC1E;;;;"}
1
+ {"version":3,"file":"MaturityRankWidget.esm.js","sources":["../../../src/components/MaturityRankWidget/MaturityRankWidget.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport useAsyncRetry from 'react-use/lib/useAsync';\n\nimport { Entity } from '@backstage/catalog-model';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { maturityApiRef } from '../../api';\nimport { MaturityRankAvatar } from '../MaturityRankAvatar';\n\ntype Props = {\n entity: Entity;\n};\n\nexport const MaturityRankWidget = ({ entity }: Props) => {\n const api = useApi(maturityApiRef);\n const { value, loading } = useAsyncRetry(\n async () => api.getMaturityRank(entity),\n [api, entity],\n );\n\n if (loading || !value) return <></>;\n return <MaturityRankAvatar entity={entity} value={value} variant=\"chip\" />;\n};\n"],"names":[],"mappings":";;;;;;;;;;AA0BO,MAAM,kBAAqB,GAAA,CAAC,EAAE,MAAA,EAAoB,KAAA;AACvD,EAAM,MAAA,GAAA,GAAM,OAAO,cAAc,CAAA;AACjC,EAAM,MAAA,EAAE,KAAO,EAAA,OAAA,EAAY,GAAA,aAAA;AAAA,IACzB,YAAY,GAAI,CAAA,eAAA,CAAgB,MAAM,CAAA;AAAA,IACtC,CAAC,KAAK,MAAM;AAAA,GACd;AAEA,EAAA,IAAI,OAAW,IAAA,CAAC,KAAO,EAAA,uBAAS,GAAA,CAAA,QAAA,EAAA,EAAA,CAAA;AAChC,EAAA,uBAAQ,GAAA,CAAA,kBAAA,EAAA,EAAmB,MAAgB,EAAA,KAAA,EAAc,SAAQ,MAAO,EAAA,CAAA;AAC1E;;;;"}