diff --git a/.changeset/ready-taxis-prove.md b/.changeset/ready-taxis-prove.md new file mode 100644 index 000000000..5d4c30e44 --- /dev/null +++ b/.changeset/ready-taxis-prove.md @@ -0,0 +1,5 @@ +--- +'@openchoreo/backstage-portal-app': patch +--- + +Add composable home page widget grid (Recently Visited, My Projects, Quick Actions, Recent Deployments) with Edit/Add Widget/Save controls; default view matches the existing home page layout diff --git a/packages/portal-app/package.json b/packages/portal-app/package.json index 84263f8f5..389d2aeae 100644 --- a/packages/portal-app/package.json +++ b/packages/portal-app/package.json @@ -52,6 +52,7 @@ "@backstage/plugin-catalog-import": "^0.13.13", "@backstage/plugin-catalog-react": "^3.0.0", "@backstage/plugin-home": "^0.9.6", + "@backstage/plugin-home-react": "^0.1.38", "@backstage/plugin-kubernetes": "^0.12.19", "@backstage/plugin-org": "^0.7.4", "@backstage/plugin-permission-common": "^0.9.9", diff --git a/packages/portal-app/src/components/Home/HomePage.tsx b/packages/portal-app/src/components/Home/HomePage.tsx index cb30c3dd9..9c5c620c1 100644 --- a/packages/portal-app/src/components/Home/HomePage.tsx +++ b/packages/portal-app/src/components/Home/HomePage.tsx @@ -1,6 +1,9 @@ import { Content, Page, Header } from '@backstage/core-components'; -import { HomePageStarredEntities } from '@backstage/plugin-home'; -import { RecentlyVisitedCard } from './RecentlyVisitedCard'; +import { + HomePageStarredEntities, + CustomHomepageGrid, + type LayoutConfiguration, +} from '@backstage/plugin-home'; import { HomePageSearchBar } from '@backstage/plugin-search'; import { SearchContextProvider } from '@backstage/plugin-search-react'; import { Grid, Typography, Box } from '@material-ui/core'; @@ -8,10 +11,21 @@ import { useStyles } from './styles'; import { useUserInfo } from '../../hooks'; import { useNamespacePermission } from '@openchoreo/backstage-plugin-react'; import { HomePagePlatformDetailsCard } from '@openchoreo/backstage-plugin-platform-engineer-core'; +import { + RecentlyVisitedHomeWidget, + MyProjectsHomeWidget, + QuickActionsHomeWidget, + RecentDeploymentsHomeWidget, +} from './homeWidgets'; /** * Custom HomePage that shows content based on user permissions */ +const defaultLayout: LayoutConfiguration[] = [ + { component: 'HomePageStarredEntities', x: 0, y: 0, width: 6, height: 4 }, + { component: 'RecentlyVisited', x: 6, y: 0, width: 6, height: 4 }, +]; + export const HomePage = () => { const classes = useStyles(); const { userName, loading } = useUserInfo(); @@ -33,45 +47,38 @@ export const HomePage = () => {
- - {/* Search Bar */} - - - + {/* Search Bar */} + + + - {/* Starred Entities and Recently Visited */} - - - - - - - - - - - - - - + {/* Customizable widget grid. */} + + + + + + + - {/* Platform Details - visible only with namespace read permission */} - {canViewPlatformDetails && ( + {/* Platform Details stays outside the grid on purpose. */} + {canViewPlatformDetails && ( + - )} - + + )} diff --git a/packages/portal-app/src/components/Home/homeWidgets.tsx b/packages/portal-app/src/components/Home/homeWidgets.tsx new file mode 100644 index 000000000..8539cb38e --- /dev/null +++ b/packages/portal-app/src/components/Home/homeWidgets.tsx @@ -0,0 +1,53 @@ +import { homePlugin } from '@backstage/plugin-home'; +import { createCardExtension } from '@backstage/plugin-home-react'; +import { RecentlyVisitedCard } from './RecentlyVisitedCard'; +import { RecentDeploymentsCard } from './RecentDeploymentsCard'; +import { + MyProjectsWidget, + QuickActionsSection, +} from '@openchoreo/backstage-plugin'; + +export const RecentlyVisitedHomeWidget = homePlugin.provide( + createCardExtension({ + name: 'RecentlyVisited', + components: async () => ({ Content: RecentlyVisitedCard }), + layout: { + height: { minRows: 4 }, + width: { minColumns: 4 }, + }, + }), +); + +export const MyProjectsHomeWidget = homePlugin.provide( + createCardExtension({ + name: 'MyProjects', + components: async () => ({ Content: MyProjectsWidget }), + layout: { + height: { minRows: 4 }, + width: { minColumns: 4 }, + }, + }), +); + +export const QuickActionsHomeWidget = homePlugin.provide( + createCardExtension({ + name: 'QuickActions', + title: 'Quick Actions', + components: async () => ({ Content: QuickActionsSection }), + layout: { + height: { minRows: 4 }, + width: { minColumns: 4 }, + }, + }), +); + +export const RecentDeploymentsHomeWidget = homePlugin.provide( + createCardExtension({ + name: 'RecentDeployments', + components: async () => ({ Content: RecentDeploymentsCard }), + layout: { + height: { minRows: 4 }, + width: { minColumns: 4 }, + }, + }), +); diff --git a/plugins/openchoreo/src/components/HomePage/QuickActionsSection/QuickActions.tsx b/plugins/openchoreo/src/components/HomePage/QuickActionsSection/QuickActions.tsx index 9211cb26c..656695e34 100644 --- a/plugins/openchoreo/src/components/HomePage/QuickActionsSection/QuickActions.tsx +++ b/plugins/openchoreo/src/components/HomePage/QuickActionsSection/QuickActions.tsx @@ -12,7 +12,7 @@ import { Link } from 'react-router-dom'; import { useComponentCreatePermission } from '@openchoreo/backstage-plugin-react'; import { useStyles } from './styles'; -export const QuickActionsSection: React.FC = () => { +export const QuickActionsSection = () => { const classes = useStyles(); const { canCreate, loading: createPermLoading } = useComponentCreatePermission(); diff --git a/yarn.lock b/yarn.lock index 6cb15d7bb..92ecbf524 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2297,6 +2297,35 @@ __metadata: languageName: node linkType: hard +"@backstage/catalog-client@npm:^1.16.1": + version: 1.16.1 + resolution: "@backstage/catalog-client@npm:1.16.1" + dependencies: + "@backstage/catalog-model": "npm:^1.9.0" + "@backstage/errors": "npm:^1.3.1" + "@backstage/filter-predicates": "npm:^0.1.4" + "@backstage/plugin-catalog-common": "npm:^1.1.10" + cross-fetch: "npm:^4.0.0" + lodash: "npm:^4.17.21" + uri-template: "npm:^2.0.0" + checksum: 10c0/4b00fbada78234dd7a17863cef6134193b6d0396888cbcbfcda397d7321c594826f4f092d6bd6ac725e32a91ac3baf44a53a3bab5645ac7ef7c7ee803388f64f + languageName: node + linkType: hard + +"@backstage/catalog-model@npm:^1.10.0": + version: 1.10.0 + resolution: "@backstage/catalog-model@npm:1.10.0" + dependencies: + "@backstage/errors": "npm:^1.3.1" + "@backstage/types": "npm:^1.2.2" + ajv: "npm:^8.10.0" + ajv-errors: "npm:^3.0.0" + lodash: "npm:^4.17.21" + zod: "npm:^3.25.76" + checksum: 10c0/7dec54821da2efa9e400891b0a4ad06a6952388f10e1654f6b92663afe6760fa0a72e21f445d9928ad10ccd7d52fbf5198ac3b7c166749df6eb313893a22d827 + languageName: node + linkType: hard + "@backstage/catalog-model@npm:^1.7.5, @backstage/catalog-model@npm:^1.7.6, @backstage/catalog-model@npm:^1.9.0": version: 1.9.0 resolution: "@backstage/catalog-model@npm:1.9.0" @@ -2989,6 +3018,18 @@ __metadata: languageName: node linkType: hard +"@backstage/connections@npm:^0.3.0": + version: 0.3.0 + resolution: "@backstage/connections@npm:0.3.0" + dependencies: + "@backstage/config": "npm:^1.3.8" + "@backstage/errors": "npm:^1.3.1" + "@backstage/types": "npm:^1.2.2" + zod: "npm:^4.0.0" + checksum: 10c0/97b7cdf9675bbc458965da85d15b769a314d0e8febb2fb27e1b679cbd5e5c3f661547ad928a9c750ea8889f03879113d31438a06241454dbb39dab631709b4e5 + languageName: node + linkType: hard + "@backstage/core-app-api@npm:^1.19.4, @backstage/core-app-api@npm:^1.20.1": version: 1.20.1 resolution: "@backstage/core-app-api@npm:1.20.1" @@ -3018,6 +3059,35 @@ __metadata: languageName: node linkType: hard +"@backstage/core-app-api@npm:^1.20.4": + version: 1.20.4 + resolution: "@backstage/core-app-api@npm:1.20.4" + dependencies: + "@backstage/config": "npm:^1.3.8" + "@backstage/core-plugin-api": "npm:^1.12.9" + "@backstage/types": "npm:^1.2.2" + "@backstage/ui": "npm:^0.17.1" + "@backstage/version-bridge": "npm:^1.0.12" + "@types/prop-types": "npm:^15.7.3" + history: "npm:^5.0.0" + i18next: "npm:^22.4.15" + lodash: "npm:^4.17.21" + prop-types: "npm:^15.7.2" + react-use: "npm:^17.2.4" + zen-observable: "npm:^0.10.0" + zod: "npm:^3.25.76 || ^4.0.0" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + react-router-dom: ^6.30.2 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/a8f3ed20ef3743ab895a2235a2720d55cca983ccbf41e40695e27b3f9812571ef2b0af3f1f0786c2777c7185dd3a3e46d63ef9e54ce58bbe90fa36d7fc860e46 + languageName: node + linkType: hard + "@backstage/core-compat-api@npm:^0.5.11, @backstage/core-compat-api@npm:^0.5.7": version: 0.5.11 resolution: "@backstage/core-compat-api@npm:0.5.11" @@ -3043,6 +3113,31 @@ __metadata: languageName: node linkType: hard +"@backstage/core-compat-api@npm:^0.5.14": + version: 0.5.14 + resolution: "@backstage/core-compat-api@npm:0.5.14" + dependencies: + "@backstage/core-plugin-api": "npm:^1.12.9" + "@backstage/errors": "npm:^1.3.1" + "@backstage/filter-predicates": "npm:^0.1.4" + "@backstage/frontend-plugin-api": "npm:^0.18.0" + "@backstage/plugin-app-react": "npm:^0.2.6" + "@backstage/plugin-catalog-react": "npm:^3.2.1" + "@backstage/types": "npm:^1.2.2" + "@backstage/version-bridge": "npm:^1.0.12" + lodash: "npm:^4.17.21" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + react-router-dom: ^6.30.2 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/6874c14216dce47fb5ad847f94c62e495e386e617358b6f67de081513b3c907592deb9f109daf07dfeec2bcb9488b357d48aa46451e0b7e4fcc7ee49fceb6863 + languageName: node + linkType: hard + "@backstage/core-components@npm:^0.17.5": version: 0.17.5 resolution: "@backstage/core-components@npm:0.17.5" @@ -3155,6 +3250,65 @@ __metadata: languageName: node linkType: hard +"@backstage/core-components@npm:^0.18.13": + version: 0.18.13 + resolution: "@backstage/core-components@npm:0.18.13" + dependencies: + "@backstage/config": "npm:^1.3.8" + "@backstage/core-plugin-api": "npm:^1.12.9" + "@backstage/errors": "npm:^1.3.1" + "@backstage/theme": "npm:^0.7.3" + "@backstage/ui": "npm:^0.17.1" + "@backstage/version-bridge": "npm:^1.0.12" + "@dagrejs/dagre": "npm:^1.1.4" + "@date-io/core": "npm:^1.3.13" + "@material-table/core": "npm:^3.1.0" + "@material-ui/core": "npm:^4.12.2" + "@material-ui/icons": "npm:^4.9.1" + "@material-ui/lab": "npm:4.0.0-alpha.61" + "@react-hookz/web": "npm:^24.0.0" + "@testing-library/react": "npm:^16.0.0" + "@types/react-sparklines": "npm:^1.7.0" + ansi-regex: "npm:^6.0.1" + classnames: "npm:^2.2.6" + csstype: "npm:^3.0.2" + d3-selection: "npm:^3.0.0" + d3-shape: "npm:^3.0.0" + d3-zoom: "npm:^3.0.0" + js-yaml: "npm:^4.3.0" + linkify-react: "npm:4.3.2" + linkifyjs: "npm:4.3.2" + lodash: "npm:^4.17.21" + parse5: "npm:^6.0.0" + qs: "npm:^6.15.2" + rc-progress: "npm:3.5.1" + react-full-screen: "npm:^1.1.1" + react-helmet: "npm:6.1.0" + react-hook-form: "npm:^7.12.2" + react-idle-timer: "npm:5.7.2" + react-markdown: "npm:^8.0.0" + react-sparklines: "npm:^1.7.0" + react-syntax-highlighter: "npm:^15.4.5" + react-use: "npm:^17.3.2" + react-virtualized-auto-sizer: "npm:^1.0.11" + react-window: "npm:^1.8.6" + rehype-raw: "npm:^6.0.0" + rehype-sanitize: "npm:^5.0.0" + remark-gfm: "npm:^3.0.1" + zen-observable: "npm:^0.10.0" + zod: "npm:^3.25.76 || ^4.0.0" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + react-router-dom: ^6.30.2 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/18694687a9be08799e62749a9ccd9dea006edd029f41ac152af1de1c618afbcdac792ac7914620fee722b48b40711e0830a32d4f36e4519b33d34bc5683c2a75 + languageName: node + linkType: hard + "@backstage/core-plugin-api@npm:^1.10.9, @backstage/core-plugin-api@npm:^1.12.1, @backstage/core-plugin-api@npm:^1.12.2, @backstage/core-plugin-api@npm:^1.12.6": version: 1.12.6 resolution: "@backstage/core-plugin-api@npm:1.12.6" @@ -3178,6 +3332,29 @@ __metadata: languageName: node linkType: hard +"@backstage/core-plugin-api@npm:^1.12.9": + version: 1.12.9 + resolution: "@backstage/core-plugin-api@npm:1.12.9" + dependencies: + "@backstage/config": "npm:^1.3.8" + "@backstage/errors": "npm:^1.3.1" + "@backstage/frontend-plugin-api": "npm:^0.18.0" + "@backstage/types": "npm:^1.2.2" + "@backstage/version-bridge": "npm:^1.0.12" + history: "npm:^5.0.0" + zod: "npm:^3.25.76 || ^4.0.0" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + react-router-dom: ^6.30.2 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/209c918060adeb48ff81d32d19e139910bb9947d28e47f9b1a4942e15d3ebf2c091d11eda7e6562f3f39d4bd283b08e4b133a45b392a88cceba3a1728f12b5e3 + languageName: node + linkType: hard + "@backstage/dev-utils@npm:^1.1.23": version: 1.1.23 resolution: "@backstage/dev-utils@npm:1.1.23" @@ -3264,6 +3441,19 @@ __metadata: languageName: node linkType: hard +"@backstage/filter-predicates@npm:^0.1.4": + version: 0.1.4 + resolution: "@backstage/filter-predicates@npm:0.1.4" + dependencies: + "@backstage/config": "npm:^1.3.8" + "@backstage/errors": "npm:^1.3.1" + "@backstage/types": "npm:^1.2.2" + zod: "npm:^3.25.76 || ^4.0.0" + zod-validation-error: "npm:^5.0.0" + checksum: 10c0/0e54760800797c45df47f58f0c1138cd2667939f0d1a4b83c63466fed82b293ffc144751bf98684b2e61edcc111c1cb34ebf607f19befd361e9b8f061f04d1cc + languageName: node + linkType: hard + "@backstage/frontend-app-api@npm:^0.14.1": version: 0.14.1 resolution: "@backstage/frontend-app-api@npm:0.14.1" @@ -3407,6 +3597,28 @@ __metadata: languageName: node linkType: hard +"@backstage/frontend-plugin-api@npm:^0.18.0": + version: 0.18.0 + resolution: "@backstage/frontend-plugin-api@npm:0.18.0" + dependencies: + "@backstage/config": "npm:^1.3.8" + "@backstage/errors": "npm:^1.3.1" + "@backstage/filter-predicates": "npm:^0.1.4" + "@backstage/types": "npm:^1.2.2" + "@backstage/version-bridge": "npm:^1.0.12" + "@standard-schema/spec": "npm:^1.1.0" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + react-router-dom: ^6.30.2 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/30d677b7002706c32ea5426e6b25b49ac905f07f6d5777ae372bfdc90f3be24bde8e09087a6241861f8eaa4abb385153dbb08363fe80321202397ec01d488bf0 + languageName: node + linkType: hard + "@backstage/frontend-test-utils@npm:^0.4.5": version: 0.4.5 resolution: "@backstage/frontend-test-utils@npm:0.4.5" @@ -3520,6 +3732,27 @@ __metadata: languageName: node linkType: hard +"@backstage/integration-react@npm:^1.2.21": + version: 1.2.21 + resolution: "@backstage/integration-react@npm:1.2.21" + dependencies: + "@backstage/config": "npm:^1.3.8" + "@backstage/core-plugin-api": "npm:^1.12.9" + "@backstage/integration": "npm:^2.1.0" + "@material-ui/core": "npm:^4.12.2" + "@material-ui/icons": "npm:^4.9.1" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + react-router-dom: ^6.30.2 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/f68dda358ce8829eca9008d8549192d492b9a8877f9080311120541307f3187b6ca65f25c8d3fd708092f96db404bea5fd3975a7887489a9504a39d606c3afab + languageName: node + linkType: hard + "@backstage/integration@npm:^1.17.1, @backstage/integration@npm:^1.19.2": version: 1.19.2 resolution: "@backstage/integration@npm:1.19.2" @@ -3575,6 +3808,26 @@ __metadata: languageName: node linkType: hard +"@backstage/integration@npm:^2.1.0": + version: 2.1.1 + resolution: "@backstage/integration@npm:2.1.1" + dependencies: + "@azure/identity": "npm:^4.0.0" + "@azure/storage-blob": "npm:^12.5.0" + "@backstage/config": "npm:^1.3.8" + "@backstage/connections": "npm:^0.3.0" + "@backstage/errors": "npm:^1.3.1" + "@octokit/auth-app": "npm:^4.0.0" + "@octokit/rest": "npm:^19.0.3" + cross-fetch: "npm:^4.0.0" + git-url-parse: "npm:^15.0.0" + lodash: "npm:^4.17.21" + luxon: "npm:^3.0.0" + p-throttle: "npm:^4.1.1" + checksum: 10c0/6f7ab64f743f43323cee0764de089e67ffa4497821620fe7cd1fa16eee5fc10564b56e7f71955fca63120b1f96948ae9b849f014c12d791ab1672084d7394b21 + languageName: node + linkType: hard + "@backstage/module-federation-common@npm:^0.1.4": version: 0.1.4 resolution: "@backstage/module-federation-common@npm:0.1.4" @@ -3709,6 +3962,25 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-app-react@npm:^0.2.6": + version: 0.2.6 + resolution: "@backstage/plugin-app-react@npm:0.2.6" + dependencies: + "@backstage/core-plugin-api": "npm:^1.12.9" + "@backstage/frontend-plugin-api": "npm:^0.18.0" + "@material-ui/core": "npm:^4.9.13" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + react-router-dom: ^6.30.2 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/6af5cdd9fdef3a4ae059f77bfc2f0ba86ef27d064516aafca2867ccedc284c6d4b025e6af39b965c26b1c3e6ca1330ce27bd71aaeaa88b54ae50ce62befa57a9 + languageName: node + linkType: hard + "@backstage/plugin-app@npm:^0.3.5": version: 0.3.5 resolution: "@backstage/plugin-app@npm:0.3.5" @@ -4196,6 +4468,53 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-catalog-react@npm:^3.2.1": + version: 3.2.2 + resolution: "@backstage/plugin-catalog-react@npm:3.2.2" + dependencies: + "@backstage/catalog-client": "npm:^1.16.1" + "@backstage/catalog-model": "npm:^1.10.0" + "@backstage/core-compat-api": "npm:^0.5.14" + "@backstage/core-components": "npm:^0.18.13" + "@backstage/core-plugin-api": "npm:^1.12.9" + "@backstage/errors": "npm:^1.3.1" + "@backstage/filter-predicates": "npm:^0.1.4" + "@backstage/frontend-plugin-api": "npm:^0.18.0" + "@backstage/integration-react": "npm:^1.2.21" + "@backstage/plugin-permission-common": "npm:^0.9.10" + "@backstage/plugin-permission-react": "npm:^0.5.4" + "@backstage/types": "npm:^1.2.2" + "@backstage/ui": "npm:^0.17.1" + "@backstage/version-bridge": "npm:^1.0.12" + "@material-ui/core": "npm:^4.12.2" + "@material-ui/icons": "npm:^4.9.1" + "@material-ui/lab": "npm:4.0.0-alpha.61" + "@react-hookz/web": "npm:^24.0.0" + "@remixicon/react": "npm:>=4.6.0 <4.9.0" + classnames: "npm:^2.2.6" + lodash: "npm:^4.17.21" + material-ui-popup-state: "npm:^5.3.6" + qs: "npm:^6.15.2" + react-use: "npm:^17.2.4" + react-window: "npm:^1.8.10" + yaml: "npm:^2.0.0" + zen-observable: "npm:^0.10.0" + zod: "npm:^4.0.0" + peerDependencies: + "@backstage/frontend-test-utils": ^0.6.3 + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + react-router-dom: ^6.30.2 + peerDependenciesMeta: + "@backstage/frontend-test-utils": + optional: true + "@types/react": + optional: true + checksum: 10c0/b9ccc684d417dd103742f468ba0fdeec8af540f0c3116e7b046fca7bdf0db2113a94c7f23918810732ae071acd9cbbe80189c88898645fc188f1c213d4dd9565 + languageName: node + linkType: hard + "@backstage/plugin-catalog@npm:^2.0.5": version: 2.0.5 resolution: "@backstage/plugin-catalog@npm:2.0.5" @@ -4302,20 +4621,43 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-home-react@npm:^0.1.41": + version: 0.1.41 + resolution: "@backstage/plugin-home-react@npm:0.1.41" + dependencies: + "@backstage/core-compat-api": "npm:^0.5.14" + "@backstage/core-components": "npm:^0.18.13" + "@backstage/core-plugin-api": "npm:^1.12.9" + "@backstage/frontend-plugin-api": "npm:^0.18.0" + "@material-ui/core": "npm:^4.12.2" + "@material-ui/icons": "npm:^4.9.1" + "@rjsf/utils": "npm:5.24.13" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + react-router-dom: ^6.30.2 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/612b09945d746ec02a34f33b2c933a0b9764ead6b5abd503954e08e1b014d52b93f2d2505aa403baf18f27ad303b10cafabcd72eab51b299b9d0bf798a87a218 + languageName: node + linkType: hard + "@backstage/plugin-home@npm:^0.9.6": - version: 0.9.6 - resolution: "@backstage/plugin-home@npm:0.9.6" + version: 0.9.9 + resolution: "@backstage/plugin-home@npm:0.9.9" dependencies: - "@backstage/catalog-client": "npm:^1.15.1" - "@backstage/catalog-model": "npm:^1.9.0" + "@backstage/catalog-client": "npm:^1.16.1" + "@backstage/catalog-model": "npm:^1.10.0" "@backstage/config": "npm:^1.3.8" - "@backstage/core-app-api": "npm:^1.20.1" - "@backstage/core-compat-api": "npm:^0.5.11" - "@backstage/core-components": "npm:^0.18.10" - "@backstage/core-plugin-api": "npm:^1.12.6" - "@backstage/frontend-plugin-api": "npm:^0.17.0" - "@backstage/plugin-catalog-react": "npm:^3.0.0" - "@backstage/plugin-home-react": "npm:^0.1.38" + "@backstage/core-app-api": "npm:^1.20.4" + "@backstage/core-compat-api": "npm:^0.5.14" + "@backstage/core-components": "npm:^0.18.13" + "@backstage/core-plugin-api": "npm:^1.12.9" + "@backstage/frontend-plugin-api": "npm:^0.18.0" + "@backstage/plugin-catalog-react": "npm:^3.2.1" + "@backstage/plugin-home-react": "npm:^0.1.41" "@backstage/theme": "npm:^0.7.3" "@material-ui/core": "npm:^4.12.2" "@material-ui/icons": "npm:^4.9.1" @@ -4338,7 +4680,7 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/ed63d4c1a865b4a7260bdacb3046afc5391dd169522767b2a53bc22851cb34f5c9adbf71118949ad1e71f00b550c71466468ed6164482094759bd31b618de71e + checksum: 10c0/521490949dec0948a583a984476212527bf7c972aa43cea778f9482ed35b5ab8707fa669305d481e870f23189471dc4974f46f010097b1ada5b791d644bb93ef languageName: node linkType: hard @@ -4521,6 +4863,20 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-permission-common@npm:^0.9.10": + version: 0.9.10 + resolution: "@backstage/plugin-permission-common@npm:0.9.10" + dependencies: + "@backstage/config": "npm:^1.3.8" + "@backstage/errors": "npm:^1.3.1" + "@backstage/types": "npm:^1.2.2" + cross-fetch: "npm:^4.0.0" + zod: "npm:^3.25.76 || ^4.0.0" + zod-to-json-schema: "npm:^3.25.1" + checksum: 10c0/7fabd3906d6d7c741b83bfa351287bec44ccb100d5ad6753a25f6ff4055c2ba284bbd7d2ea0853435b66fcc8def19dff229c7d4857e4b21eff06158069860971 + languageName: node + linkType: hard + "@backstage/plugin-permission-common@npm:^0.9.3, @backstage/plugin-permission-common@npm:^0.9.5, @backstage/plugin-permission-common@npm:^0.9.9": version: 0.9.9 resolution: "@backstage/plugin-permission-common@npm:0.9.9" @@ -4610,6 +4966,26 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-permission-react@npm:^0.5.4": + version: 0.5.4 + resolution: "@backstage/plugin-permission-react@npm:0.5.4" + dependencies: + "@backstage/config": "npm:^1.3.8" + "@backstage/core-plugin-api": "npm:^1.12.9" + "@backstage/plugin-permission-common": "npm:^0.9.10" + dataloader: "npm:^2.0.0" + swr: "npm:^2.0.0" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/672f90c31b786000873755736cc07261a7ad11fe8ab45127fcb293cea320b3ab4677329b922c8d62324925419ba455e1887bff543433252fb5505cd6eaf1dfce + languageName: node + linkType: hard + "@backstage/plugin-proxy-backend@npm:^0.6.13": version: 0.6.13 resolution: "@backstage/plugin-proxy-backend@npm:0.6.13" @@ -5432,6 +5808,33 @@ __metadata: languageName: node linkType: hard +"@backstage/ui@npm:^0.17.1": + version: 0.17.1 + resolution: "@backstage/ui@npm:0.17.1" + dependencies: + "@backstage/version-bridge": "npm:^1.0.12" + "@braintree/sanitize-url": "npm:^7.1.2" + "@internationalized/date": "npm:^3.12.0" + "@remixicon/react": "npm:>=4.6.0 <4.9.0" + "@tanstack/react-table": "npm:^8.21.3" + clsx: "npm:^2.1.1" + marked: "npm:^15.0.12" + react-aria: "npm:~3.48.0" + react-aria-components: "npm:~1.17.0" + react-stately: "npm:~3.46.0" + use-sync-external-store: "npm:^1.4.0" + peerDependencies: + "@types/react": ^18.0.0 + react: ^18.0.0 + react-dom: ^18.0.0 + react-router-dom: ^6.30.2 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/88388f9d314665e72c655cb0ad745e812584254805715c80371f0e00731649efd7ea23b0c595b16ea2d132bd4d894ff1bf3b7b8a36277dba650f90f0f2e11c41 + languageName: node + linkType: hard + "@backstage/version-bridge@npm:^1.0.11, @backstage/version-bridge@npm:^1.0.12": version: 1.0.12 resolution: "@backstage/version-bridge@npm:1.0.12" @@ -10348,6 +10751,7 @@ __metadata: "@backstage/plugin-catalog-import": "npm:^0.13.13" "@backstage/plugin-catalog-react": "npm:^3.0.0" "@backstage/plugin-home": "npm:^0.9.6" + "@backstage/plugin-home-react": "npm:^0.1.38" "@backstage/plugin-kubernetes": "npm:^0.12.19" "@backstage/plugin-org": "npm:^0.7.4" "@backstage/plugin-permission-common": "npm:^0.9.9" @@ -26402,6 +26806,17 @@ __metadata: languageName: node linkType: hard +"js-yaml@npm:^4.3.0": + version: 4.3.2 + resolution: "js-yaml@npm:4.3.2" + dependencies: + argparse: "npm:^2.0.1" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/dedd34c2e8fef1d504687f1bc94ed0ee1311a1f78770fa2800352c6d59c635ccf555009d74e9afe529ae62199da2b1ccef30e53dc84dcd8d2d8187c22574bc97 + languageName: node + linkType: hard + "jsbn@npm:^1.1.0": version: 1.1.0 resolution: "jsbn@npm:1.1.0" @@ -32257,6 +32672,16 @@ __metadata: languageName: node linkType: hard +"qs@npm:^6.15.2": + version: 6.16.0 + resolution: "qs@npm:6.16.0" + dependencies: + es-define-property: "npm:^1.0.1" + side-channel: "npm:^1.1.1" + checksum: 10c0/eb3e31992fbd70e31a1791e571ed817d70975de7d3bfcbbbec93d77d1dd305877e9e8fdbcc62303c228ee5c3606685622cd6231c042dbc4790bb4e7c65fcbe18 + languageName: node + linkType: hard + "quansync@npm:^0.2.7": version: 0.2.11 resolution: "quansync@npm:0.2.11"