From 621642e891d955b3f2bfea7b9d45eafd0dc5c2bc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 15 Mar 2024 12:12:35 +0000 Subject: [PATCH 01/24] Update dependency jose to v5.2.3 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Signed-off-by: Lin Sun --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7f610b8f48..63e46381d6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -32490,16 +32490,16 @@ __metadata: linkType: hard "jose@npm:^4.15.4": - version: 4.15.4 - resolution: "jose@npm:4.15.4" - checksum: dccad91cb3357f36423774a0b89ad830dd84b31090de65cd139b85488439f16a00f8c59c0773825e8a1adb0dd9d13ad725ad66e6ea33880ecb3959bb99e1ea5b + version: 4.15.5 + resolution: "jose@npm:4.15.5" + checksum: 7dde76447c7707bd4b448f914b216f3858e701aa83f00447434252461af5b9e159dcbffb88badea3f9616739526763581267c9560622f0a058df8d68c86d7f79 languageName: node linkType: hard "jose@npm:^5.0.0": - version: 5.2.2 - resolution: "jose@npm:5.2.2" - checksum: d23def3c1df8aae1ae59d1c027a073804034fe8b971dafe51f0452ca8f6eb7e5cd3e3c90b6e544776443e01e58c8f8eefbd1984dbcde378e693e0ebbd176584d + version: 5.2.3 + resolution: "jose@npm:5.2.3" + checksum: 7c41025d3e449f654a4cbf0e18e3a4a3bcb74b242d716e2e665a20be5c93b3f68421032a4531fd984d4bad6aa225c7c517da18da6e0cf778b104cd7e30bde5de languageName: node linkType: hard From eb57804341f40b1b683babb807acae5c7bf2bc8d Mon Sep 17 00:00:00 2001 From: Lin Sun Date: Fri, 15 Mar 2024 10:57:54 -0400 Subject: [PATCH 02/24] add back/white logo Signed-off-by: Lin Sun --- microsite/static/img/partner-logo-solo.png | Bin 46993 -> 46674 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/microsite/static/img/partner-logo-solo.png b/microsite/static/img/partner-logo-solo.png index 7d26b976f414c95c101cd871a180828804e5ad84..f4d36ec61a702c83d020451c60ab5dc2cc65a30b 100644 GIT binary patch literal 46674 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 N(%f$MEi;$M{{i}nxL^PP literal 46993 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

hMdPW(RuJ3NhN+ z*Y?r-K5Sx$dI@IsDS}sksVp5^JYRKxf2?sr$s# z^QakQ*$^bWLlGwp=?qYm)WZa&3`1#Ox(0Lfxp2XEXzpYzIKjjAzn#?72fsSv1Q3xC zQhH3pcFpUQP?G(zv**p@FxNClAm-55o^J zG1hyioB$TkMN!J65(Mu9{H5v(*_Yi))y6WY9nBJPB7(3{df2JGhzL79tn27||64u#`#f&2U3d@uK;XM^c@dNGrr59%AjXNSy@ zvM5cN6Z&#@0eu9U2r#qlhP0RJw^_51k8PM#v5a^9-a6qr6Ce>)3P_aJt4s{V<@P;w z+?HxpG0giW|FR{Q;Gqa~P@Qmt32@_L= zsAGV);MH*iJL%pFDk#Z>D#5I%zG&RuUzmM;%^12U^+EZB`Z#^{g9n$>zP9__pgdmF NXkRx_FITgE^glA78+HHy From a4d3e037d07791b99bb31a077ad8ff2c0917f64e Mon Sep 17 00:00:00 2001 From: Eric Irwin Date: Fri, 15 Mar 2024 10:41:20 -0600 Subject: [PATCH 03/24] feat(plugins): add analytics-module-qm plugin Signed-off-by: Eric Irwin --- docs/plugins/analytics.md | 2 ++ microsite/data/plugins/analytics-module-qm.yaml | 10 ++++++++++ microsite/static/img/qm-icon.png | Bin 0 -> 5621 bytes 3 files changed, 12 insertions(+) create mode 100644 microsite/data/plugins/analytics-module-qm.yaml create mode 100644 microsite/static/img/qm-icon.png diff --git a/docs/plugins/analytics.md b/docs/plugins/analytics.md index 0673566217..a4dfafbf87 100644 --- a/docs/plugins/analytics.md +++ b/docs/plugins/analytics.md @@ -40,6 +40,7 @@ choice below. | [Google Analytics 4][ga4] | Yes ✅ | | [New Relic Browser][newrelic-browser] | Community ✅ | | [Matomo][matomo] | Community ✅ | +| [Quantum Metric][qm] | Community ✅ | To suggest an integration, please [open an issue][add-tool] for the analytics tool your organization uses. Or jump to [Writing Integrations][int-howto] to @@ -48,6 +49,7 @@ learn how to contribute the integration yourself! [ga]: https://github.com/backstage/backstage/blob/master/plugins/analytics-module-ga/README.md [ga4]: https://github.com/backstage/backstage/blob/master/plugins/analytics-module-ga4/README.md [newrelic-browser]: https://github.com/backstage/backstage/blob/master/plugins/analytics-module-newrelic-browser/README.md +[qm]: https://github.com/quantummetric/analytics-module-qm/blob/main/README.md [matomo]: https://github.com/janus-idp/backstage-plugins/blob/main/plugins/analytics-module-matomo/README.md [add-tool]: https://github.com/backstage/backstage/issues/new?assignees=&labels=plugin&template=plugin_template.md&title=%5BAnalytics+Module%5D+THE+ANALYTICS+TOOL+TO+INTEGRATE [int-howto]: #writing-integrations diff --git a/microsite/data/plugins/analytics-module-qm.yaml b/microsite/data/plugins/analytics-module-qm.yaml new file mode 100644 index 0000000000..84d95c3725 --- /dev/null +++ b/microsite/data/plugins/analytics-module-qm.yaml @@ -0,0 +1,10 @@ +--- +title: 'Analytics Module: Quantum Metric' +author: Quantum Metric +authorUrl: https://github.com/quantummetric +category: Monitoring +description: Track usage of your Backstage instance using Quantum Metric. +documentation: https://github.com/quantummetric/analytics-module-qm/blob/main/README.md +iconUrl: /img/qm-icon.png +npmPackageName: '@quantum-metric/plugin-analytics-module-qm' +addedDate: '2024-03-15' \ No newline at end of file diff --git a/microsite/static/img/qm-icon.png b/microsite/static/img/qm-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..021d24388bb0efa520c74f3b8dffea3c2df30a05 GIT binary patch literal 5621 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 P00000NkvXXu0mjfo@&HP literal 0 HcmV?d00001 From 6ece854c61f3f7de78b7d338ee8d1aaaec7f46e1 Mon Sep 17 00:00:00 2001 From: Eric Irwin Date: Fri, 15 Mar 2024 10:41:20 -0600 Subject: [PATCH 04/24] feat(plugins): add analytics-module-qm plugin Signed-off-by: Eric Irwin --- docs/plugins/analytics.md | 2 ++ microsite/data/plugins/analytics-module-qm.yaml | 10 ++++++++++ microsite/static/img/qm-icon.png | Bin 0 -> 5621 bytes 3 files changed, 12 insertions(+) create mode 100644 microsite/data/plugins/analytics-module-qm.yaml create mode 100644 microsite/static/img/qm-icon.png diff --git a/docs/plugins/analytics.md b/docs/plugins/analytics.md index 0673566217..a4dfafbf87 100644 --- a/docs/plugins/analytics.md +++ b/docs/plugins/analytics.md @@ -40,6 +40,7 @@ choice below. | [Google Analytics 4][ga4] | Yes ✅ | | [New Relic Browser][newrelic-browser] | Community ✅ | | [Matomo][matomo] | Community ✅ | +| [Quantum Metric][qm] | Community ✅ | To suggest an integration, please [open an issue][add-tool] for the analytics tool your organization uses. Or jump to [Writing Integrations][int-howto] to @@ -48,6 +49,7 @@ learn how to contribute the integration yourself! [ga]: https://github.com/backstage/backstage/blob/master/plugins/analytics-module-ga/README.md [ga4]: https://github.com/backstage/backstage/blob/master/plugins/analytics-module-ga4/README.md [newrelic-browser]: https://github.com/backstage/backstage/blob/master/plugins/analytics-module-newrelic-browser/README.md +[qm]: https://github.com/quantummetric/analytics-module-qm/blob/main/README.md [matomo]: https://github.com/janus-idp/backstage-plugins/blob/main/plugins/analytics-module-matomo/README.md [add-tool]: https://github.com/backstage/backstage/issues/new?assignees=&labels=plugin&template=plugin_template.md&title=%5BAnalytics+Module%5D+THE+ANALYTICS+TOOL+TO+INTEGRATE [int-howto]: #writing-integrations diff --git a/microsite/data/plugins/analytics-module-qm.yaml b/microsite/data/plugins/analytics-module-qm.yaml new file mode 100644 index 0000000000..84d95c3725 --- /dev/null +++ b/microsite/data/plugins/analytics-module-qm.yaml @@ -0,0 +1,10 @@ +--- +title: 'Analytics Module: Quantum Metric' +author: Quantum Metric +authorUrl: https://github.com/quantummetric +category: Monitoring +description: Track usage of your Backstage instance using Quantum Metric. +documentation: https://github.com/quantummetric/analytics-module-qm/blob/main/README.md +iconUrl: /img/qm-icon.png +npmPackageName: '@quantum-metric/plugin-analytics-module-qm' +addedDate: '2024-03-15' \ No newline at end of file diff --git a/microsite/static/img/qm-icon.png b/microsite/static/img/qm-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..021d24388bb0efa520c74f3b8dffea3c2df30a05 GIT binary patch literal 5621 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 P00000NkvXXu0mjfo@&HP literal 0 HcmV?d00001 From 2256e9fa371b82bd6aed61902cbcdb87dbf66f3d Mon Sep 17 00:00:00 2001 From: Eric Irwin Date: Fri, 15 Mar 2024 11:20:15 -0600 Subject: [PATCH 05/24] fix(analytics-module-qm): fix lint Signed-off-by: Eric Irwin --- microsite/data/plugins/analytics-module-qm.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/microsite/data/plugins/analytics-module-qm.yaml b/microsite/data/plugins/analytics-module-qm.yaml index 84d95c3725..df2ae3e935 100644 --- a/microsite/data/plugins/analytics-module-qm.yaml +++ b/microsite/data/plugins/analytics-module-qm.yaml @@ -7,4 +7,4 @@ description: Track usage of your Backstage instance using Quantum Metric. documentation: https://github.com/quantummetric/analytics-module-qm/blob/main/README.md iconUrl: /img/qm-icon.png npmPackageName: '@quantum-metric/plugin-analytics-module-qm' -addedDate: '2024-03-15' \ No newline at end of file +addedDate: '2024-03-15' From 8293df3563f031b76d1faecd7d196a3b529e9a4c Mon Sep 17 00:00:00 2001 From: Eric Irwin Date: Fri, 15 Mar 2024 12:51:13 -0600 Subject: [PATCH 06/24] fix(analytics-module-qm): fix lint Signed-off-by: Eric Irwin --- microsite/data/plugins/analytics-module-qm.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/microsite/data/plugins/analytics-module-qm.yaml b/microsite/data/plugins/analytics-module-qm.yaml index d7876bde27..df2ae3e935 100644 --- a/microsite/data/plugins/analytics-module-qm.yaml +++ b/microsite/data/plugins/analytics-module-qm.yaml @@ -8,4 +8,3 @@ documentation: https://github.com/quantummetric/analytics-module-qm/blob/main/RE iconUrl: /img/qm-icon.png npmPackageName: '@quantum-metric/plugin-analytics-module-qm' addedDate: '2024-03-15' - From 2302031125c9104033e4c914fe6288b3f0bdb253 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Sat, 16 Mar 2024 12:57:01 +0100 Subject: [PATCH 07/24] add vite to the dev deps of the cli to make it build standalone MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- packages/cli/package.json | 6 +++++- yarn.lock | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/cli/package.json b/packages/cli/package.json index 1af0ef03b7..1b86bd9a75 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -168,10 +168,14 @@ "@types/tar": "^6.1.1", "@types/terser-webpack-plugin": "^5.0.4", "@types/yarnpkg__lockfile": "^1.1.4", + "@vitejs/plugin-react": "^4.0.4", "del": "^7.0.0", "msw": "^1.0.0", "nodemon": "^3.0.1", - "ts-node": "^10.0.0" + "ts-node": "^10.0.0", + "vite": "^4.4.9", + "vite-plugin-html": "^3.2.0", + "vite-plugin-node-polyfills": "^0.21.0" }, "peerDependencies": { "@vitejs/plugin-react": "^4.0.4", diff --git a/yarn.lock b/yarn.lock index 5c42feef7e..33bbe2965a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3642,6 +3642,7 @@ __metadata: "@types/yarnpkg__lockfile": ^1.1.4 "@typescript-eslint/eslint-plugin": ^6.12.0 "@typescript-eslint/parser": ^6.7.2 + "@vitejs/plugin-react": ^4.0.4 "@yarnpkg/lockfile": ^1.1.0 "@yarnpkg/parsers": ^3.0.0-rc.4 bfj: ^8.0.0 @@ -3713,6 +3714,9 @@ __metadata: ts-node: ^10.0.0 tsx: ^4.0.0 util: ^0.12.3 + vite: ^4.4.9 + vite-plugin-html: ^3.2.0 + vite-plugin-node-polyfills: ^0.21.0 webpack: ^5.70.0 webpack-dev-server: ^4.7.3 webpack-node-externals: ^3.0.0 From 8f0a4d8683921d614f78e27629a58ca09d558e3b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 17 Mar 2024 14:49:49 +0000 Subject: [PATCH 08/24] chore(deps): update dependency msw to v2.2.6 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 669e37bbdc..536b7a1efc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -35887,8 +35887,8 @@ __metadata: linkType: hard "msw@npm:^2.0.0, msw@npm:^2.0.8": - version: 2.2.4 - resolution: "msw@npm:2.2.4" + version: 2.2.6 + resolution: "msw@npm:2.2.6" dependencies: "@bundled-es-modules/cookie": ^2.0.0 "@bundled-es-modules/statuses": ^1.0.1 @@ -35914,7 +35914,7 @@ __metadata: optional: true bin: msw: cli/index.js - checksum: ce446caec9a95feb08a8ff6082e344c993a22aabdf378a91c5ba3b3a7848aa0bb67a9a65ffd2b3fe2cccd4217ce10690866ae6cf37222e4a8566f6f89b8b143d + checksum: b33867107f2603195b9825bcd79027895a9d72e72d0863e60d31a5d28ddd0398604bd7360d5102cfbe5438242c636820797274ce8d0bb992774e05547918d0cd languageName: node linkType: hard From 90d08b071d1a0525f2f149cd3c2224d5b70401cf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 17 Mar 2024 15:29:52 +0000 Subject: [PATCH 09/24] fix(deps): update dependency react-idle-timer to v5.7.2 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .changeset/renovate-45377c1.md | 5 +++++ packages/core-components/package.json | 2 +- yarn.lock | 12 +++++++++++- 3 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 .changeset/renovate-45377c1.md diff --git a/.changeset/renovate-45377c1.md b/.changeset/renovate-45377c1.md new file mode 100644 index 0000000000..5b0c6e1fc8 --- /dev/null +++ b/.changeset/renovate-45377c1.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +Updated dependency `react-idle-timer` to `5.7.2`. diff --git a/packages/core-components/package.json b/packages/core-components/package.json index 04de809938..525b41dba7 100644 --- a/packages/core-components/package.json +++ b/packages/core-components/package.json @@ -78,7 +78,7 @@ "rc-progress": "3.5.1", "react-helmet": "6.1.0", "react-hook-form": "^7.12.2", - "react-idle-timer": "5.6.2", + "react-idle-timer": "5.7.2", "react-markdown": "^8.0.0", "react-sparklines": "^1.7.0", "react-syntax-highlighter": "^15.4.5", diff --git a/yarn.lock b/yarn.lock index 669e37bbdc..b2ca02b07e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4024,7 +4024,7 @@ __metadata: rc-progress: 3.5.1 react-helmet: 6.1.0 react-hook-form: ^7.12.2 - react-idle-timer: 5.6.2 + react-idle-timer: 5.7.2 react-markdown: ^8.0.0 react-sparklines: ^1.7.0 react-syntax-highlighter: ^15.4.5 @@ -39845,6 +39845,16 @@ __metadata: languageName: node linkType: hard +"react-idle-timer@npm:5.7.2": + version: 5.7.2 + resolution: "react-idle-timer@npm:5.7.2" + peerDependencies: + react: ">=16" + react-dom: ">=16" + checksum: 6faf3cfa87c9d65ae7a87078a2d82db5b821936a45565a98d69e7341e4b4acd5610b1f26cf1a6809b5551e4c30357f2ab5ce729c4c33751f66cb9ce6072dfb02 + languageName: node + linkType: hard + "react-immutable-proptypes@npm:2.2.0": version: 2.2.0 resolution: "react-immutable-proptypes@npm:2.2.0" From 40e44fe3778b3f788580ba5784cc23d95adb0af2 Mon Sep 17 00:00:00 2001 From: drodil Date: Sun, 17 Mar 2024 18:08:19 +0200 Subject: [PATCH 10/24] Add missing migrations Signed-off-by: drodil --- plugins/notifications-backend/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/notifications-backend/package.json b/plugins/notifications-backend/package.json index 68c7b9b22b..1e86c6bcda 100644 --- a/plugins/notifications-backend/package.json +++ b/plugins/notifications-backend/package.json @@ -18,7 +18,8 @@ "main": "src/index.ts", "types": "src/index.ts", "files": [ - "dist" + "dist", + "migrations/**/*.{js,d.ts}" ], "scripts": { "build": "backstage-cli package build", From 0008f296b178f8551212ce6562640d56be5fc0aa Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Sun, 17 Mar 2024 17:27:27 +0100 Subject: [PATCH 11/24] fix: ajv warning for stricttypes Signed-off-by: aramissennyeydd --- plugins/tech-insights-backend-module-jsonfc/config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/tech-insights-backend-module-jsonfc/config.json b/plugins/tech-insights-backend-module-jsonfc/config.json index b95b5e52bb..347d4aa54f 100644 --- a/plugins/tech-insights-backend-module-jsonfc/config.json +++ b/plugins/tech-insights-backend-module-jsonfc/config.json @@ -109,7 +109,7 @@ ] }, "rule": { - "type": "string", + "type": "object", "required": ["conditions"], "properties": { "conditions": { From 6ce8c0be292c7cf8d632d95aa865ed59c0fbc6bd Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Sun, 17 Mar 2024 17:29:09 +0100 Subject: [PATCH 12/24] add changeset Signed-off-by: aramissennyeydd --- .changeset/popular-guests-tickle.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/popular-guests-tickle.md diff --git a/.changeset/popular-guests-tickle.md b/.changeset/popular-guests-tickle.md new file mode 100644 index 0000000000..e442dae2d5 --- /dev/null +++ b/.changeset/popular-guests-tickle.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-tech-insights-backend-module-jsonfc': patch +--- + +Fixes an invalid line in the schema that was causing AJV to complain. From 0bc478c1c5fb66bd74b181556b1cc9264d9c76e3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 17 Mar 2024 20:34:08 +0000 Subject: [PATCH 13/24] chore(deps): update dependency knip to v5.1.2 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 64a90090b0..d981fee7e1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -33470,8 +33470,8 @@ __metadata: linkType: hard "knip@npm:^5.0.0": - version: 5.1.1 - resolution: "knip@npm:5.1.1" + version: 5.1.2 + resolution: "knip@npm:5.1.2" dependencies: "@ericcornelissen/bash-parser": 0.5.2 "@nodelib/fs.walk": 2.0.0 @@ -33500,7 +33500,7 @@ __metadata: typescript: ">=5.0.4" bin: knip: bin/knip.js - checksum: 33fd81860f9dc5b3ad58ca13c4874443c68d4dc4f07061bfd3d0fb2336b68271362d92e4a739a8d422d7de78fdd0beed470e4fa94c2a2e84c54ab1deac4f5f8f + checksum: ff27c3ffa20b188ac2bc7a84b6aff49016236fa41c57b4c6650e5dae0d292747159e08045aabf858d24195214a3421bef73651235530828c1d238a598f68b95f languageName: node linkType: hard From 97b5da8410f9c404b4d05aaaada39fddd5ef717c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 17 Mar 2024 21:20:39 +0000 Subject: [PATCH 14/24] fix(deps): update dependency postcss to v8.4.36 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index d981fee7e1..9a3c0616e5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -38792,13 +38792,13 @@ __metadata: linkType: hard "postcss@npm:^8.1.0, postcss@npm:^8.4.27, postcss@npm:^8.4.33": - version: 8.4.35 - resolution: "postcss@npm:8.4.35" + version: 8.4.36 + resolution: "postcss@npm:8.4.36" dependencies: nanoid: ^3.3.7 picocolors: ^1.0.0 - source-map-js: ^1.0.2 - checksum: cf3c3124d3912a507603f6d9a49b3783f741075e9aa73eb592a6dd9194f9edab9d20a8875d16d137d4f779fe7b6fbd1f5727e39bfd1c3003724980ee4995e1da + source-map-js: ^1.1.0 + checksum: 1bb0f2bdfccd5a3ea0ed39700c09098f15501d38110208bfba2df5e3925e4ff7e9a4eaf8abb87bc692ae4d122d9aa0ec13bf4f4d8fd1ad8d8ceaa1f345e50ed1 languageName: node linkType: hard @@ -42366,10 +42366,10 @@ __metadata: languageName: node linkType: hard -"source-map-js@npm:^1.0.2": - version: 1.0.2 - resolution: "source-map-js@npm:1.0.2" - checksum: c049a7fc4deb9a7e9b481ae3d424cc793cb4845daa690bc5a05d428bf41bf231ced49b4cf0c9e77f9d42fdb3d20d6187619fc586605f5eabe995a316da8d377c +"source-map-js@npm:^1.1.0": + version: 1.1.0 + resolution: "source-map-js@npm:1.1.0" + checksum: 6ef39381cdf5451c3db406e4b0fa95657be3c35db76fe6df3be430174b2e6af3c0b57d9728328dc62a211ae6209a0295d6a26442a55d5fccbf7cf1211fffa80e languageName: node linkType: hard From 64ec0a5cbb0736d96a0d4183d37160b8a20fb99e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 17 Mar 2024 22:04:23 +0000 Subject: [PATCH 15/24] chore(deps): update dependency aws-sdk-client-mock to v3.1.0 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 9a3c0616e5..23217bda15 100644 --- a/yarn.lock +++ b/yarn.lock @@ -21869,13 +21869,13 @@ __metadata: linkType: hard "aws-sdk-client-mock@npm:^3.0.0": - version: 3.0.1 - resolution: "aws-sdk-client-mock@npm:3.0.1" + version: 3.1.0 + resolution: "aws-sdk-client-mock@npm:3.1.0" dependencies: "@types/sinon": ^10.0.10 sinon: ^16.1.3 tslib: ^2.1.0 - checksum: e875af24a765d7883059c101a629a58bbb2ec3a055443562f9410ebd96823691dfae25d69b962dc3c22ad5867971c37b378d05f3c8344bbb992b1a624a0fb836 + checksum: fbb11b5783fe6ba9b5c10a4395193d5b4b1583040cce61bcd341dce25327ee86e3b00166c2fb3d47aedaa890c129e1c3fabe944086419d50ba12a417ebe2ede9 languageName: node linkType: hard From de6d1478ff43735dea78135fb21ce235ac8f091c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 17 Mar 2024 22:21:02 +0000 Subject: [PATCH 16/24] chore(deps): update dependency aws-sdk-client-mock-jest to v3.1.0 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 155 +++--------------------------------------------------- 1 file changed, 6 insertions(+), 149 deletions(-) diff --git a/yarn.lock b/yarn.lock index 968b55533d..c202ec005c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12402,15 +12402,6 @@ __metadata: languageName: node linkType: hard -"@jest/expect-utils@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/expect-utils@npm:28.1.3" - dependencies: - jest-get-type: ^28.0.2 - checksum: 808ea3a68292a7e0b95490fdd55605c430b4cf209ea76b5b61bfb2a1badcb41bc046810fe4e364bd5fe04663978aa2bd73d8f8465a761dd7c655aeb44cf22987 - languageName: node - linkType: hard - "@jest/expect-utils@npm:^29.7.0": version: 29.7.0 resolution: "@jest/expect-utils@npm:29.7.0" @@ -12493,15 +12484,6 @@ __metadata: languageName: node linkType: hard -"@jest/schemas@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/schemas@npm:28.1.3" - dependencies: - "@sinclair/typebox": ^0.24.1 - checksum: 3cf1d4b66c9c4ffda58b246de1ddcba8e6ad085af63dccdf07922511f13b68c0cc480a7bc620cb4f3099a6f134801c747e1df7bfc7a4ef4dceefbdea3e31e1de - languageName: node - linkType: hard - "@jest/schemas@npm:^29.6.3": version: 29.6.3 resolution: "@jest/schemas@npm:29.6.3" @@ -12569,20 +12551,6 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/types@npm:28.1.3" - dependencies: - "@jest/schemas": ^28.1.3 - "@types/istanbul-lib-coverage": ^2.0.0 - "@types/istanbul-reports": ^3.0.0 - "@types/node": "*" - "@types/yargs": ^17.0.8 - chalk: ^4.0.0 - checksum: 1e258d9c063fcf59ebc91e46d5ea5984674ac7ae6cae3e50aa780d22b4405bf2c925f40350bf30013839eb5d4b5e521d956ddf8f3b7c78debef0e75a07f57350 - languageName: node - linkType: hard - "@jest/types@npm:^29.6.3": version: 29.6.3 resolution: "@jest/types@npm:29.6.3" @@ -16179,13 +16147,6 @@ __metadata: languageName: node linkType: hard -"@sinclair/typebox@npm:^0.24.1": - version: 0.24.42 - resolution: "@sinclair/typebox@npm:0.24.42" - checksum: 83a3083b71063ad270669308634f7c5b473272da71cbc405343b2ff774d641ec2be0993e0a61386f8ef3f8b786c173dc01921a5bc6627d95657eb98f19f1a4c4 - languageName: node - linkType: hard - "@sinclair/typebox@npm:^0.27.8": version: 0.27.8 resolution: "@sinclair/typebox@npm:0.27.8" @@ -19041,16 +19002,6 @@ __metadata: languageName: node linkType: hard -"@types/jest@npm:^28.1.3": - version: 28.1.8 - resolution: "@types/jest@npm:28.1.8" - dependencies: - expect: ^28.0.0 - pretty-format: ^28.0.0 - checksum: d4cd36158a3ae1d4b42cc48a77c95de74bc56b84cf81e09af3ee0399c34f4a7da8ab9e787570f10004bd642f9e781b0033c37327fbbf4a8e4b6e37e8ee3693a7 - languageName: node - linkType: hard - "@types/jquery@npm:^3.3.34": version: 3.5.29 resolution: "@types/jquery@npm:3.5.29" @@ -21857,14 +21808,14 @@ __metadata: linkType: hard "aws-sdk-client-mock-jest@npm:^3.0.0": - version: 3.0.1 - resolution: "aws-sdk-client-mock-jest@npm:3.0.1" + version: 3.1.0 + resolution: "aws-sdk-client-mock-jest@npm:3.1.0" dependencies: - "@types/jest": ^28.1.3 + expect: ">28.1.3" tslib: ^2.1.0 peerDependencies: - aws-sdk-client-mock: 3.0.1 - checksum: c5c72ae63c9d3862636b833c66ebc708a1c170ba1159508f9a1e56c8e71ba82f7f85a00e68148b72cc699ab3e7ce6945d29bfd23151ae62c3f78133d56585ddd + aws-sdk-client-mock: 3.1.0 + checksum: d619e3dbc58009ffa9db766a7781ec1159809825a8e8246f41adeeffa81aa4ec0319cf0ba5a113e4937101b56401396eb117cab4da3fac4974b094ac8fdbeaa3 languageName: node linkType: hard @@ -25772,13 +25723,6 @@ __metadata: languageName: node linkType: hard -"diff-sequences@npm:^28.1.1": - version: 28.1.1 - resolution: "diff-sequences@npm:28.1.1" - checksum: e2529036505567c7ca5a2dea86b6bcd1ca0e3ae63bf8ebf529b8a99cfa915bbf194b7021dc1c57361a4017a6d95578d4ceb29fabc3232a4f4cb866a2726c7690 - languageName: node - linkType: hard - "diff-sequences@npm:^29.6.3": version: 29.6.3 resolution: "diff-sequences@npm:29.6.3" @@ -28001,20 +27945,7 @@ __metadata: languageName: node linkType: hard -"expect@npm:^28.0.0": - version: 28.1.3 - resolution: "expect@npm:28.1.3" - dependencies: - "@jest/expect-utils": ^28.1.3 - jest-get-type: ^28.0.2 - jest-matcher-utils: ^28.1.3 - jest-message-util: ^28.1.3 - jest-util: ^28.1.3 - checksum: 101e0090de300bcafedb7dbfd19223368a2251ce5fe0105bbb6de5720100b89fb6b64290ebfb42febc048324c76d6a4979cdc4b61eb77747857daf7a5de9b03d - languageName: node - linkType: hard - -"expect@npm:^29.0.0, expect@npm:^29.7.0": +"expect@npm:>28.1.3, expect@npm:^29.0.0, expect@npm:^29.7.0": version: 29.7.0 resolution: "expect@npm:29.7.0" dependencies: @@ -32060,18 +31991,6 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-diff@npm:28.1.3" - dependencies: - chalk: ^4.0.0 - diff-sequences: ^28.1.1 - jest-get-type: ^28.0.2 - pretty-format: ^28.1.3 - checksum: fa8583e0ccbe775714ce850b009be1b0f6b17a4b6759f33ff47adef27942ebc610dbbcc8a5f7cfb7f12b3b3b05afc9fb41d5f766674616025032ff1e4f9866e0 - languageName: node - linkType: hard - "jest-diff@npm:^29.2.0, jest-diff@npm:^29.7.0": version: 29.7.0 resolution: "jest-diff@npm:29.7.0" @@ -32141,13 +32060,6 @@ __metadata: languageName: node linkType: hard -"jest-get-type@npm:^28.0.2": - version: 28.0.2 - resolution: "jest-get-type@npm:28.0.2" - checksum: 5281d7c89bc8156605f6d15784f45074f4548501195c26e9b188742768f72d40948252d13230ea905b5349038865a1a8eeff0e614cc530ff289dfc41fe843abd - languageName: node - linkType: hard - "jest-get-type@npm:^29.6.3": version: 29.6.3 resolution: "jest-get-type@npm:29.6.3" @@ -32211,18 +32123,6 @@ __metadata: languageName: node linkType: hard -"jest-matcher-utils@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-matcher-utils@npm:28.1.3" - dependencies: - chalk: ^4.0.0 - jest-diff: ^28.1.3 - jest-get-type: ^28.0.2 - pretty-format: ^28.1.3 - checksum: 6b34f0cf66f6781e92e3bec97bf27796bd2ba31121e5c5997218d9adba6deea38a30df5203937d6785b68023ed95cbad73663cc9aad6fb0cb59aeb5813a58daf - languageName: node - linkType: hard - "jest-matcher-utils@npm:^29.7.0": version: 29.7.0 resolution: "jest-matcher-utils@npm:29.7.0" @@ -32235,23 +32135,6 @@ __metadata: languageName: node linkType: hard -"jest-message-util@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-message-util@npm:28.1.3" - dependencies: - "@babel/code-frame": ^7.12.13 - "@jest/types": ^28.1.3 - "@types/stack-utils": ^2.0.0 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - micromatch: ^4.0.4 - pretty-format: ^28.1.3 - slash: ^3.0.0 - stack-utils: ^2.0.3 - checksum: 1f266854166dcc6900d75a88b54a25225a2f3710d463063ff1c99021569045c35c7d58557b25447a17eb3a65ce763b2f9b25550248b468a9d4657db365f39e96 - languageName: node - linkType: hard - "jest-message-util@npm:^29.7.0": version: 29.7.0 resolution: "jest-message-util@npm:29.7.0" @@ -32413,20 +32296,6 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-util@npm:28.1.3" - dependencies: - "@jest/types": ^28.1.3 - "@types/node": "*" - chalk: ^4.0.0 - ci-info: ^3.2.0 - graceful-fs: ^4.2.9 - picomatch: ^2.2.3 - checksum: fd6459742c941f070223f25e38a2ac0719aad92561591e9fb2a50d602a5d19d754750b79b4074327a42b00055662b95da3b006542ceb8b54309da44d4a62e721 - languageName: node - linkType: hard - "jest-util@npm:^29.7.0": version: 29.7.0 resolution: "jest-util@npm:29.7.0" @@ -38996,18 +38865,6 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^28.0.0, pretty-format@npm:^28.1.3": - version: 28.1.3 - resolution: "pretty-format@npm:28.1.3" - dependencies: - "@jest/schemas": ^28.1.3 - ansi-regex: ^5.0.1 - ansi-styles: ^5.0.0 - react-is: ^18.0.0 - checksum: e69f857358a3e03d271252d7524bec758c35e44680287f36c1cb905187fbc82da9981a6eb07edfd8a03bc3cbeebfa6f5234c13a3d5b59f2bbdf9b4c4053e0a7f - languageName: node - linkType: hard - "pretty-format@npm:^29.0.0, pretty-format@npm:^29.7.0": version: 29.7.0 resolution: "pretty-format@npm:29.7.0" From e780d3a5fd8c960e59e89ed0c6284f0d2470d3c4 Mon Sep 17 00:00:00 2001 From: Aditya Kumar Date: Mon, 18 Mar 2024 08:34:47 +0530 Subject: [PATCH 17/24] Add ESLint Rule to Vault Plugin Signed-off-by: Aditya Kumar --- .changeset/seven-monkeys-happen.md | 5 +++++ plugins/vault/.eslintrc.js | 6 +++++- plugins/vault/dev/index.tsx | 3 ++- .../src/components/EntityVaultTable/EntityVaultTable.tsx | 3 ++- 4 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 .changeset/seven-monkeys-happen.md diff --git a/.changeset/seven-monkeys-happen.md b/.changeset/seven-monkeys-happen.md new file mode 100644 index 0000000000..e81d20aece --- /dev/null +++ b/.changeset/seven-monkeys-happen.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-vault': patch +--- + +Added ESLint rule `no-top-level-material-ui-4-imports` in the `vault` plugin to migrate the Material UI imports. diff --git a/plugins/vault/.eslintrc.js b/plugins/vault/.eslintrc.js index e2a53a6ad2..a2d8179106 100644 --- a/plugins/vault/.eslintrc.js +++ b/plugins/vault/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/vault/dev/index.tsx b/plugins/vault/dev/index.tsx index 8d902e14c5..97dde1f3bf 100644 --- a/plugins/vault/dev/index.tsx +++ b/plugins/vault/dev/index.tsx @@ -19,7 +19,8 @@ import { Content, Header, HeaderLabel, Page } from '@backstage/core-components'; import { createDevApp } from '@backstage/dev-utils'; import { EntityProvider } from '@backstage/plugin-catalog-react'; import { TestApiProvider } from '@backstage/test-utils'; -import { Box, Typography } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Typography from '@material-ui/core/Typography'; import SomeIcon from '@material-ui/icons/Storage'; import React from 'react'; import { VaultApi, vaultApiRef } from '../src/api'; diff --git a/plugins/vault/src/components/EntityVaultTable/EntityVaultTable.tsx b/plugins/vault/src/components/EntityVaultTable/EntityVaultTable.tsx index 4d169611ca..412a3404d1 100644 --- a/plugins/vault/src/components/EntityVaultTable/EntityVaultTable.tsx +++ b/plugins/vault/src/components/EntityVaultTable/EntityVaultTable.tsx @@ -17,7 +17,8 @@ import React from 'react'; import { Entity } from '@backstage/catalog-model'; import { Link, Table, TableColumn } from '@backstage/core-components'; import { useApi } from '@backstage/core-plugin-api'; -import { Box, Typography } from '@material-ui/core'; +import Box from '@material-ui/core/Box'; +import Typography from '@material-ui/core/Typography'; import Edit from '@material-ui/icons/Edit'; import Visibility from '@material-ui/icons/Visibility'; import Alert from '@material-ui/lab/Alert'; From ee584af4b4a312dd0cd5c24b91211513c772f3e4 Mon Sep 17 00:00:00 2001 From: Aditya Kumar Date: Mon, 18 Mar 2024 09:55:47 +0530 Subject: [PATCH 18/24] Add ESLint Rule to UserSettings Plugin Signed-off-by: Aditya Kumar --- .changeset/khaki-penguins-whisper.md | 5 +++++ plugins/user-settings/.eslintrc.js | 6 +++++- .../AuthProviders/EmptyProviders.tsx | 3 ++- .../AuthProviders/ProviderSettingsAvatar.tsx | 3 ++- .../AuthProviders/ProviderSettingsItem.tsx | 18 ++++++++---------- .../UserSettingsAuthProviders.tsx | 2 +- .../src/components/FeatureFlags/EmptyFlags.tsx | 3 ++- .../FeatureFlags/FeatureFlagsItem.tsx | 12 +++++------- .../FeatureFlags/UserSettingsFeatureFlags.tsx | 12 +++++------- .../General/UserSettingsAppearanceCard.tsx | 2 +- .../components/General/UserSettingsGeneral.tsx | 2 +- .../General/UserSettingsLanguageToggle.tsx | 10 ++++------ .../components/General/UserSettingsMenu.tsx | 5 ++++- .../General/UserSettingsPinToggle.tsx | 12 +++++------- .../General/UserSettingsProfileCard.tsx | 3 ++- .../General/UserSettingsSignInAvatar.tsx | 3 ++- .../General/UserSettingsThemeToggle.tsx | 12 +++++------- .../SettingsLayout/SettingsLayout.tsx | 2 +- 18 files changed, 60 insertions(+), 55 deletions(-) create mode 100644 .changeset/khaki-penguins-whisper.md diff --git a/.changeset/khaki-penguins-whisper.md b/.changeset/khaki-penguins-whisper.md new file mode 100644 index 0000000000..f3412a5f79 --- /dev/null +++ b/.changeset/khaki-penguins-whisper.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-user-settings': patch +--- + +Added ESLint rule `no-top-level-material-ui-4-imports` in the `user-settings` plugin to migrate the Material UI imports. diff --git a/plugins/user-settings/.eslintrc.js b/plugins/user-settings/.eslintrc.js index e2a53a6ad2..a2d8179106 100644 --- a/plugins/user-settings/.eslintrc.js +++ b/plugins/user-settings/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/user-settings/src/components/AuthProviders/EmptyProviders.tsx b/plugins/user-settings/src/components/AuthProviders/EmptyProviders.tsx index 082cb5e8ac..952ba3af30 100644 --- a/plugins/user-settings/src/components/AuthProviders/EmptyProviders.tsx +++ b/plugins/user-settings/src/components/AuthProviders/EmptyProviders.tsx @@ -15,7 +15,8 @@ */ import React from 'react'; -import { Button, Typography } from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import Typography from '@material-ui/core/Typography'; import { CodeSnippet, EmptyState } from '@backstage/core-components'; const EXAMPLE = `auth: diff --git a/plugins/user-settings/src/components/AuthProviders/ProviderSettingsAvatar.tsx b/plugins/user-settings/src/components/AuthProviders/ProviderSettingsAvatar.tsx index 07e9b4aa55..c09dac5985 100644 --- a/plugins/user-settings/src/components/AuthProviders/ProviderSettingsAvatar.tsx +++ b/plugins/user-settings/src/components/AuthProviders/ProviderSettingsAvatar.tsx @@ -15,7 +15,8 @@ */ import React from 'react'; -import { makeStyles, Avatar, Theme } from '@material-ui/core'; +import Avatar from '@material-ui/core/Avatar'; +import { makeStyles, Theme } from '@material-ui/core/styles'; import { sidebarConfig } from '@backstage/core-components'; const useStyles = makeStyles(theme => ({ diff --git a/plugins/user-settings/src/components/AuthProviders/ProviderSettingsItem.tsx b/plugins/user-settings/src/components/AuthProviders/ProviderSettingsItem.tsx index e9a710036f..07afd8083e 100644 --- a/plugins/user-settings/src/components/AuthProviders/ProviderSettingsItem.tsx +++ b/plugins/user-settings/src/components/AuthProviders/ProviderSettingsItem.tsx @@ -15,16 +15,14 @@ */ import React, { useEffect, useState } from 'react'; -import { - Button, - Grid, - ListItem, - ListItemIcon, - ListItemSecondaryAction, - ListItemText, - Tooltip, - Typography, -} from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import Grid from '@material-ui/core/Grid'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction'; +import ListItemText from '@material-ui/core/ListItemText'; +import Tooltip from '@material-ui/core/Tooltip'; +import Typography from '@material-ui/core/Typography'; import { ApiRef, SessionApi, diff --git a/plugins/user-settings/src/components/AuthProviders/UserSettingsAuthProviders.tsx b/plugins/user-settings/src/components/AuthProviders/UserSettingsAuthProviders.tsx index d23716c2bf..e83440e0c5 100644 --- a/plugins/user-settings/src/components/AuthProviders/UserSettingsAuthProviders.tsx +++ b/plugins/user-settings/src/components/AuthProviders/UserSettingsAuthProviders.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; -import { List } from '@material-ui/core'; +import List from '@material-ui/core/List'; import { EmptyProviders } from './EmptyProviders'; import { DefaultProviderSettings } from './DefaultProviderSettings'; import { configApiRef, useApi } from '@backstage/core-plugin-api'; diff --git a/plugins/user-settings/src/components/FeatureFlags/EmptyFlags.tsx b/plugins/user-settings/src/components/FeatureFlags/EmptyFlags.tsx index 0e2b911978..55c70ba7a2 100644 --- a/plugins/user-settings/src/components/FeatureFlags/EmptyFlags.tsx +++ b/plugins/user-settings/src/components/FeatureFlags/EmptyFlags.tsx @@ -15,7 +15,8 @@ */ import React from 'react'; -import { Button, Typography } from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import Typography from '@material-ui/core/Typography'; import { CodeSnippet, EmptyState } from '@backstage/core-components'; const EXAMPLE = `import { createPlugin } from '@backstage/core-plugin-api'; diff --git a/plugins/user-settings/src/components/FeatureFlags/FeatureFlagsItem.tsx b/plugins/user-settings/src/components/FeatureFlags/FeatureFlagsItem.tsx index a5f0d480cb..96f8166c4a 100644 --- a/plugins/user-settings/src/components/FeatureFlags/FeatureFlagsItem.tsx +++ b/plugins/user-settings/src/components/FeatureFlags/FeatureFlagsItem.tsx @@ -15,13 +15,11 @@ */ import React from 'react'; -import { - ListItem, - ListItemText, - ListItemIcon, - Switch, - Tooltip, -} from '@material-ui/core'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemText from '@material-ui/core/ListItemText'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import Switch from '@material-ui/core/Switch'; +import Tooltip from '@material-ui/core/Tooltip'; import { FeatureFlag } from '@backstage/core-plugin-api'; type Props = { diff --git a/plugins/user-settings/src/components/FeatureFlags/UserSettingsFeatureFlags.tsx b/plugins/user-settings/src/components/FeatureFlags/UserSettingsFeatureFlags.tsx index 60b951ab60..1522001ac5 100644 --- a/plugins/user-settings/src/components/FeatureFlags/UserSettingsFeatureFlags.tsx +++ b/plugins/user-settings/src/components/FeatureFlags/UserSettingsFeatureFlags.tsx @@ -15,13 +15,11 @@ */ import React, { useCallback, useState } from 'react'; -import { - List, - TextField, - IconButton, - Grid, - Typography, -} from '@material-ui/core'; +import List from '@material-ui/core/List'; +import TextField from '@material-ui/core/TextField'; +import IconButton from '@material-ui/core/IconButton'; +import Grid from '@material-ui/core/Grid'; +import Typography from '@material-ui/core/Typography'; import { EmptyFlags } from './EmptyFlags'; import { FlagItem } from './FeatureFlagsItem'; import { diff --git a/plugins/user-settings/src/components/General/UserSettingsAppearanceCard.tsx b/plugins/user-settings/src/components/General/UserSettingsAppearanceCard.tsx index 8a32c0bd9b..b8e3c44672 100644 --- a/plugins/user-settings/src/components/General/UserSettingsAppearanceCard.tsx +++ b/plugins/user-settings/src/components/General/UserSettingsAppearanceCard.tsx @@ -15,7 +15,7 @@ */ import { InfoCard, useSidebarPinState } from '@backstage/core-components'; -import { List } from '@material-ui/core'; +import List from '@material-ui/core/List'; import React from 'react'; import { UserSettingsPinToggle } from './UserSettingsPinToggle'; import { UserSettingsThemeToggle } from './UserSettingsThemeToggle'; diff --git a/plugins/user-settings/src/components/General/UserSettingsGeneral.tsx b/plugins/user-settings/src/components/General/UserSettingsGeneral.tsx index 8dde87ba5c..6c663ed1bc 100644 --- a/plugins/user-settings/src/components/General/UserSettingsGeneral.tsx +++ b/plugins/user-settings/src/components/General/UserSettingsGeneral.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ -import { Grid } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; import React from 'react'; import { UserSettingsProfileCard } from './UserSettingsProfileCard'; import { UserSettingsAppearanceCard } from './UserSettingsAppearanceCard'; diff --git a/plugins/user-settings/src/components/General/UserSettingsLanguageToggle.tsx b/plugins/user-settings/src/components/General/UserSettingsLanguageToggle.tsx index 15c6e9ea9c..337960932e 100644 --- a/plugins/user-settings/src/components/General/UserSettingsLanguageToggle.tsx +++ b/plugins/user-settings/src/components/General/UserSettingsLanguageToggle.tsx @@ -19,12 +19,10 @@ import { useTranslationRef, appLanguageApiRef, } from '@backstage/core-plugin-api/alpha'; -import { - ListItem, - ListItemText, - ListItemSecondaryAction, - makeStyles, -} from '@material-ui/core'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemText from '@material-ui/core/ListItemText'; +import ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction'; +import { makeStyles } from '@material-ui/core/styles'; import { userSettingsTranslationRef } from '../../translation'; import { useApi } from '@backstage/core-plugin-api'; import useObservable from 'react-use/lib/useObservable'; diff --git a/plugins/user-settings/src/components/General/UserSettingsMenu.tsx b/plugins/user-settings/src/components/General/UserSettingsMenu.tsx index c83bdd5b74..8ef2f380f3 100644 --- a/plugins/user-settings/src/components/General/UserSettingsMenu.tsx +++ b/plugins/user-settings/src/components/General/UserSettingsMenu.tsx @@ -15,7 +15,10 @@ */ import React from 'react'; -import { IconButton, ListItemIcon, Menu, MenuItem } from '@material-ui/core'; +import IconButton from '@material-ui/core/IconButton'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import Menu from '@material-ui/core/Menu'; +import MenuItem from '@material-ui/core/MenuItem'; import SignOutIcon from '@material-ui/icons/MeetingRoom'; import MoreVertIcon from '@material-ui/icons/MoreVert'; import { diff --git a/plugins/user-settings/src/components/General/UserSettingsPinToggle.tsx b/plugins/user-settings/src/components/General/UserSettingsPinToggle.tsx index a06b079e8e..95317147cf 100644 --- a/plugins/user-settings/src/components/General/UserSettingsPinToggle.tsx +++ b/plugins/user-settings/src/components/General/UserSettingsPinToggle.tsx @@ -15,13 +15,11 @@ */ import React from 'react'; -import { - ListItem, - ListItemSecondaryAction, - ListItemText, - Switch, - Tooltip, -} from '@material-ui/core'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction'; +import ListItemText from '@material-ui/core/ListItemText'; +import Switch from '@material-ui/core/Switch'; +import Tooltip from '@material-ui/core/Tooltip'; import { useSidebarPinState } from '@backstage/core-components'; /** @public */ diff --git a/plugins/user-settings/src/components/General/UserSettingsProfileCard.tsx b/plugins/user-settings/src/components/General/UserSettingsProfileCard.tsx index c96d2bb21e..c04710650c 100644 --- a/plugins/user-settings/src/components/General/UserSettingsProfileCard.tsx +++ b/plugins/user-settings/src/components/General/UserSettingsProfileCard.tsx @@ -14,7 +14,8 @@ * limitations under the License. */ -import { Grid, Typography } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; +import Typography from '@material-ui/core/Typography'; import React from 'react'; import { UserSettingsSignInAvatar } from './UserSettingsSignInAvatar'; import { UserSettingsMenu } from './UserSettingsMenu'; diff --git a/plugins/user-settings/src/components/General/UserSettingsSignInAvatar.tsx b/plugins/user-settings/src/components/General/UserSettingsSignInAvatar.tsx index 85c616ec72..80621d1a53 100644 --- a/plugins/user-settings/src/components/General/UserSettingsSignInAvatar.tsx +++ b/plugins/user-settings/src/components/General/UserSettingsSignInAvatar.tsx @@ -15,7 +15,8 @@ */ import React from 'react'; -import { makeStyles, Avatar, Theme } from '@material-ui/core'; +import Avatar from '@material-ui/core/Avatar'; +import { makeStyles, Theme } from '@material-ui/core/styles'; import { useUserProfile } from '../useUserProfileInfo'; import { sidebarConfig } from '@backstage/core-components'; diff --git a/plugins/user-settings/src/components/General/UserSettingsThemeToggle.tsx b/plugins/user-settings/src/components/General/UserSettingsThemeToggle.tsx index 37d91ecae0..3c19b0ab88 100644 --- a/plugins/user-settings/src/components/General/UserSettingsThemeToggle.tsx +++ b/plugins/user-settings/src/components/General/UserSettingsThemeToggle.tsx @@ -19,13 +19,11 @@ import useObservable from 'react-use/lib/useObservable'; import AutoIcon from '@material-ui/icons/BrightnessAuto'; import ToggleButton from '@material-ui/lab/ToggleButton'; import ToggleButtonGroup from '@material-ui/lab/ToggleButtonGroup'; -import { - ListItem, - ListItemText, - ListItemSecondaryAction, - Tooltip, - makeStyles, -} from '@material-ui/core'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemText from '@material-ui/core/ListItemText'; +import ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction'; +import Tooltip from '@material-ui/core/Tooltip'; +import { makeStyles } from '@material-ui/core/styles'; import { appThemeApiRef, useApi } from '@backstage/core-plugin-api'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; import { userSettingsTranslationRef } from '../../translation'; diff --git a/plugins/user-settings/src/components/SettingsLayout/SettingsLayout.tsx b/plugins/user-settings/src/components/SettingsLayout/SettingsLayout.tsx index 9855fdd048..c17333571d 100644 --- a/plugins/user-settings/src/components/SettingsLayout/SettingsLayout.tsx +++ b/plugins/user-settings/src/components/SettingsLayout/SettingsLayout.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; -import { TabProps } from '@material-ui/core'; +import { TabProps } from '@material-ui/core/Tab'; import { Header, Page, From a35590ac898eacaa179fe1720300dfbb35affe0e Mon Sep 17 00:00:00 2001 From: Aditya Kumar Date: Mon, 18 Mar 2024 10:24:09 +0530 Subject: [PATCH 19/24] Add ESLint Rule to UserSettings Plugin Signed-off-by: Aditya Kumar --- plugins/user-settings/api-report.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/user-settings/api-report.md b/plugins/user-settings/api-report.md index b92677f8ce..d485320fe8 100644 --- a/plugins/user-settings/api-report.md +++ b/plugins/user-settings/api-report.md @@ -24,7 +24,7 @@ import { RouteRef } from '@backstage/core-plugin-api'; import { SessionApi } from '@backstage/core-plugin-api'; import { StorageApi } from '@backstage/core-plugin-api'; import { StorageValueSnapshot } from '@backstage/core-plugin-api'; -import { TabProps } from '@material-ui/core'; +import { TabProps } from '@material-ui/core/Tab'; // @public (undocumented) export const DefaultProviderSettings: (props: { From 6aec7259724643e330ea86b9ef25c53a6ebe00f5 Mon Sep 17 00:00:00 2001 From: Aditya Kumar Date: Mon, 18 Mar 2024 12:49:51 +0530 Subject: [PATCH 20/24] Add ESLint Rule to TechInsights Plugin Signed-off-by: Aditya Kumar --- .changeset/spotty-ducks-deny.md | 5 +++++ plugins/tech-insights/.eslintrc.js | 6 +++++- .../src/components/ScorecardsContent/ScorecardContent.tsx | 2 +- .../src/components/ScorecardsInfo/ScorecardInfo.tsx | 6 ++++-- .../src/components/ScorecardsList/ScorecardsList.tsx | 7 +++++-- 5 files changed, 20 insertions(+), 6 deletions(-) create mode 100644 .changeset/spotty-ducks-deny.md diff --git a/.changeset/spotty-ducks-deny.md b/.changeset/spotty-ducks-deny.md new file mode 100644 index 0000000000..964ec9428c --- /dev/null +++ b/.changeset/spotty-ducks-deny.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-tech-insights': patch +--- + +Added ESLint rule `no-top-level-material-ui-4-imports` in the `tech-insights` plugin to migrate the Material UI imports. diff --git a/plugins/tech-insights/.eslintrc.js b/plugins/tech-insights/.eslintrc.js index e2a53a6ad2..a2d8179106 100644 --- a/plugins/tech-insights/.eslintrc.js +++ b/plugins/tech-insights/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/tech-insights/src/components/ScorecardsContent/ScorecardContent.tsx b/plugins/tech-insights/src/components/ScorecardsContent/ScorecardContent.tsx index f8871b87c1..c144833ea7 100644 --- a/plugins/tech-insights/src/components/ScorecardsContent/ScorecardContent.tsx +++ b/plugins/tech-insights/src/components/ScorecardsContent/ScorecardContent.tsx @@ -21,7 +21,7 @@ import { useApi } from '@backstage/core-plugin-api'; import { ScorecardInfo } from '../ScorecardsInfo'; import Alert from '@material-ui/lab/Alert'; import { techInsightsApiRef } from '../../api/TechInsightsApi'; -import { makeStyles } from '@material-ui/core'; +import { makeStyles } from '@material-ui/core/styles'; import { useEntity } from '@backstage/plugin-catalog-react'; import { getCompoundEntityRef } from '@backstage/catalog-model'; diff --git a/plugins/tech-insights/src/components/ScorecardsInfo/ScorecardInfo.tsx b/plugins/tech-insights/src/components/ScorecardsInfo/ScorecardInfo.tsx index cfff074368..2a2ca982d1 100644 --- a/plugins/tech-insights/src/components/ScorecardsInfo/ScorecardInfo.tsx +++ b/plugins/tech-insights/src/components/ScorecardsInfo/ScorecardInfo.tsx @@ -15,10 +15,12 @@ */ import React from 'react'; -import { makeStyles, Grid, Typography } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles } from '@material-ui/core/styles'; import { InfoCard } from '@backstage/core-components'; import { CheckResult } from '@backstage/plugin-tech-insights-common'; -import { Alert } from '@material-ui/lab'; +import Alert from '@material-ui/lab/Alert'; import { ScorecardsList } from '../ScorecardsList'; const useStyles = makeStyles(theme => ({ diff --git a/plugins/tech-insights/src/components/ScorecardsList/ScorecardsList.tsx b/plugins/tech-insights/src/components/ScorecardsList/ScorecardsList.tsx index 1a9d04a9de..dcd94eb0d7 100644 --- a/plugins/tech-insights/src/components/ScorecardsList/ScorecardsList.tsx +++ b/plugins/tech-insights/src/components/ScorecardsList/ScorecardsList.tsx @@ -16,10 +16,13 @@ import React from 'react'; import { useApi } from '@backstage/core-plugin-api'; -import { makeStyles, List, ListItem, ListItemText } from '@material-ui/core'; +import List from '@material-ui/core/List'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemText from '@material-ui/core/ListItemText'; +import { makeStyles } from '@material-ui/core/styles'; import { techInsightsApiRef } from '../../api'; import { CheckResult } from '@backstage/plugin-tech-insights-common'; -import { Alert } from '@material-ui/lab'; +import Alert from '@material-ui/lab/Alert'; import { MarkdownContent } from '@backstage/core-components'; const useStyles = makeStyles(theme => ({ From b8234ce637d90249e3e96087ced5dad715dfc4a8 Mon Sep 17 00:00:00 2001 From: Aditya Kumar Date: Mon, 18 Mar 2024 14:17:04 +0530 Subject: [PATCH 21/24] Add ESLint Rule to Stackstorm Plugin Signed-off-by: Aditya Kumar --- .changeset/plenty-singers-call.md | 5 ++++ plugins/stackstorm/.eslintrc.js | 6 ++++- .../components/ActionsList/ActionsList.tsx | 14 +++++------ .../ExecutionsTable/ExecutionPanel.tsx | 23 ++++++++----------- .../StackstormHome/StackstormHome.tsx | 2 +- 5 files changed, 27 insertions(+), 23 deletions(-) create mode 100644 .changeset/plenty-singers-call.md diff --git a/.changeset/plenty-singers-call.md b/.changeset/plenty-singers-call.md new file mode 100644 index 0000000000..cd51c18aa1 --- /dev/null +++ b/.changeset/plenty-singers-call.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-stackstorm': patch +--- + +Added ESLint rule `no-top-level-material-ui-4-imports` in the `stackstorm` plugin to migrate the Material UI imports. diff --git a/plugins/stackstorm/.eslintrc.js b/plugins/stackstorm/.eslintrc.js index e2a53a6ad2..a2d8179106 100644 --- a/plugins/stackstorm/.eslintrc.js +++ b/plugins/stackstorm/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/stackstorm/src/components/ActionsList/ActionsList.tsx b/plugins/stackstorm/src/components/ActionsList/ActionsList.tsx index 1080f67373..bd5fc56c2f 100644 --- a/plugins/stackstorm/src/components/ActionsList/ActionsList.tsx +++ b/plugins/stackstorm/src/components/ActionsList/ActionsList.tsx @@ -17,14 +17,12 @@ import React, { useState } from 'react'; import useAsync from 'react-use/lib/useAsync'; import { Link, Progress, ResponseErrorPanel } from '@backstage/core-components'; import { useApi } from '@backstage/core-plugin-api'; -import { - List, - ListItemText, - Collapse, - ListItem, - ListItemSecondaryAction, - ListItemIcon, -} from '@material-ui/core'; +import List from '@material-ui/core/List'; +import ListItemText from '@material-ui/core/ListItemText'; +import Collapse from '@material-ui/core/Collapse'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; import { makeStyles } from '@material-ui/core/styles'; import ExpandMore from '@material-ui/icons/ExpandMore'; import ExpandLess from '@material-ui/icons/ExpandLess'; diff --git a/plugins/stackstorm/src/components/ExecutionsTable/ExecutionPanel.tsx b/plugins/stackstorm/src/components/ExecutionsTable/ExecutionPanel.tsx index 8a55c31246..cd22120898 100644 --- a/plugins/stackstorm/src/components/ExecutionsTable/ExecutionPanel.tsx +++ b/plugins/stackstorm/src/components/ExecutionsTable/ExecutionPanel.tsx @@ -22,19 +22,16 @@ import { import { useApi } from '@backstage/core-plugin-api'; import { Execution, stackstormApiRef } from '../../api'; import useAsync from 'react-use/lib/useAsync'; -import { - Button, - Card, - CardActions, - CardContent, - makeStyles, - Table, - TableBody, - TableCell, - TableRow, - Typography, - withStyles, -} from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import Card from '@material-ui/core/Card'; +import CardActions from '@material-ui/core/CardActions'; +import CardContent from '@material-ui/core/CardContent'; +import Table from '@material-ui/core/Table'; +import TableBody from '@material-ui/core/TableBody'; +import TableCell from '@material-ui/core/TableCell'; +import TableRow from '@material-ui/core/TableRow'; +import Typography from '@material-ui/core/Typography'; +import { makeStyles, withStyles } from '@material-ui/core/styles'; import { Status } from './Status'; const useStyles = makeStyles(theme => ({ diff --git a/plugins/stackstorm/src/components/StackstormHome/StackstormHome.tsx b/plugins/stackstorm/src/components/StackstormHome/StackstormHome.tsx index 1bb9031815..13b1e181b5 100644 --- a/plugins/stackstorm/src/components/StackstormHome/StackstormHome.tsx +++ b/plugins/stackstorm/src/components/StackstormHome/StackstormHome.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ import React, { Fragment } from 'react'; -import { IconButton } from '@material-ui/core'; +import IconButton from '@material-ui/core/IconButton'; import { Header, Page, From 6429213a599326daf4fab5546ed8bf8a4daa5f5f Mon Sep 17 00:00:00 2001 From: Aditya Kumar Date: Mon, 18 Mar 2024 14:45:20 +0530 Subject: [PATCH 22/24] Add ESLint Rule to StackOverflow Plugin Signed-off-by: Aditya Kumar --- .changeset/sweet-jokes-exercise.md | 5 +++++ plugins/stack-overflow/.eslintrc.js | 6 +++++- .../src/home/StackOverflowQuestions/Content.tsx | 14 ++++++-------- .../StackOverflowQuestions.stories.tsx | 2 +- .../StackOverflowSearchResultListItem.tsx | 14 ++++++-------- 5 files changed, 23 insertions(+), 18 deletions(-) create mode 100644 .changeset/sweet-jokes-exercise.md diff --git a/.changeset/sweet-jokes-exercise.md b/.changeset/sweet-jokes-exercise.md new file mode 100644 index 0000000000..72a4f13889 --- /dev/null +++ b/.changeset/sweet-jokes-exercise.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-stack-overflow': patch +--- + +Added ESLint rule `no-top-level-material-ui-4-imports` in the `stack-overflow` plugin to migrate the Material UI imports. diff --git a/plugins/stack-overflow/.eslintrc.js b/plugins/stack-overflow/.eslintrc.js index e2a53a6ad2..a2d8179106 100644 --- a/plugins/stack-overflow/.eslintrc.js +++ b/plugins/stack-overflow/.eslintrc.js @@ -1 +1,5 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { + rules: { + '@backstage/no-top-level-material-ui-4-imports': 'error', + }, +}); diff --git a/plugins/stack-overflow/src/home/StackOverflowQuestions/Content.tsx b/plugins/stack-overflow/src/home/StackOverflowQuestions/Content.tsx index 8d8aeccb3b..d74f296614 100644 --- a/plugins/stack-overflow/src/home/StackOverflowQuestions/Content.tsx +++ b/plugins/stack-overflow/src/home/StackOverflowQuestions/Content.tsx @@ -16,14 +16,12 @@ import { useApi } from '@backstage/core-plugin-api'; import { Link } from '@backstage/core-components'; -import { - IconButton, - List, - ListItem, - ListItemText, - ListItemSecondaryAction, - ListItemIcon, -} from '@material-ui/core'; +import IconButton from '@material-ui/core/IconButton'; +import List from '@material-ui/core/List'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemText from '@material-ui/core/ListItemText'; +import ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; import Typography from '@material-ui/core/Typography'; import OpenInNewIcon from '@material-ui/icons/OpenInNew'; import useAsync from 'react-use/lib/useAsync'; diff --git a/plugins/stack-overflow/src/home/StackOverflowQuestions/StackOverflowQuestions.stories.tsx b/plugins/stack-overflow/src/home/StackOverflowQuestions/StackOverflowQuestions.stories.tsx index 9f0fd75341..b9ac36f588 100644 --- a/plugins/stack-overflow/src/home/StackOverflowQuestions/StackOverflowQuestions.stories.tsx +++ b/plugins/stack-overflow/src/home/StackOverflowQuestions/StackOverflowQuestions.stories.tsx @@ -18,7 +18,7 @@ import { HomePageStackOverflowQuestions } from '../../plugin'; import { wrapInTestApp, TestApiProvider } from '@backstage/test-utils'; import { configApiRef } from '@backstage/core-plugin-api'; import { ConfigReader } from '@backstage/config'; -import { Grid } from '@material-ui/core'; +import Grid from '@material-ui/core/Grid'; import React, { ComponentType, PropsWithChildren } from 'react'; import { StackOverflowIcon } from '../../icons'; import { stackOverflowApiRef } from '../../api'; diff --git a/plugins/stack-overflow/src/search/StackOverflowSearchResultListItem/StackOverflowSearchResultListItem.tsx b/plugins/stack-overflow/src/search/StackOverflowSearchResultListItem/StackOverflowSearchResultListItem.tsx index 70e182b86d..90c129b901 100644 --- a/plugins/stack-overflow/src/search/StackOverflowSearchResultListItem/StackOverflowSearchResultListItem.tsx +++ b/plugins/stack-overflow/src/search/StackOverflowSearchResultListItem/StackOverflowSearchResultListItem.tsx @@ -16,14 +16,12 @@ import React from 'react'; import { Link } from '@backstage/core-components'; -import { - Divider, - ListItem, - ListItemText, - ListItemIcon, - Box, - Chip, -} from '@material-ui/core'; +import Divider from '@material-ui/core/Divider'; +import ListItem from '@material-ui/core/ListItem'; +import ListItemText from '@material-ui/core/ListItemText'; +import ListItemIcon from '@material-ui/core/ListItemIcon'; +import Box from '@material-ui/core/Box'; +import Chip from '@material-ui/core/Chip'; import { useAnalytics } from '@backstage/core-plugin-api'; import type { ResultHighlight } from '@backstage/plugin-search-common'; import { HighlightedSearchResultText } from '@backstage/plugin-search-react'; From d6fac59d13a15ffe09767c5dcbc2b0b46e2fd407 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 18 Mar 2024 09:35:48 +0000 Subject: [PATCH 23/24] chore(deps): update dependency msw to v2.2.7 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 46e5db8616..d54cbe8d35 100644 --- a/yarn.lock +++ b/yarn.lock @@ -35755,8 +35755,8 @@ __metadata: linkType: hard "msw@npm:^2.0.0, msw@npm:^2.0.8": - version: 2.2.6 - resolution: "msw@npm:2.2.6" + version: 2.2.7 + resolution: "msw@npm:2.2.7" dependencies: "@bundled-es-modules/cookie": ^2.0.0 "@bundled-es-modules/statuses": ^1.0.1 @@ -35782,7 +35782,7 @@ __metadata: optional: true bin: msw: cli/index.js - checksum: b33867107f2603195b9825bcd79027895a9d72e72d0863e60d31a5d28ddd0398604bd7360d5102cfbe5438242c636820797274ce8d0bb992774e05547918d0cd + checksum: 9a9c12a59fabe56634558a9831bae46a83c306cd828a903f0df4f6ca38724466e1f5b3b217737a787c20a30c713b83676a14bef69e22820da5805ab7381a5163 languageName: node linkType: hard From 112ec7b48617f96b52e4f171719d1125b4cec042 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 18 Mar 2024 11:17:03 +0000 Subject: [PATCH 24/24] fix(deps): update dependency date-fns to v3.6.0 Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 1f19f41e3c..e6e91d5ecd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -25252,9 +25252,9 @@ __metadata: linkType: hard "date-fns@npm:^3.0.0": - version: 3.5.0 - resolution: "date-fns@npm:3.5.0" - checksum: 0f326b72aff0a10b5a7a253d7790462263ee3c79b4283fdbb423c3159017f7ddb7cfd8e509ce94c652825232e9aa84278143f333ddb357bc6b03bd39eebd6f5d + version: 3.6.0 + resolution: "date-fns@npm:3.6.0" + checksum: 0daa1e9a436cf99f9f2ae9232b55e11f3dd46132bee10987164f3eebd29f245b2e066d7d7db40782627411ecf18551d8f4c9fcdf2226e48bb66545407d448ab7 languageName: node linkType: hard