Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 7cd3878

Browse files
debsmita1christoph-jerolimov
authored andcommittedFeb 4, 2025·
feat(fab): add new mountpoints support for providers and listeners
Signed-off-by: debsmita1 <debsmita.santra@gmail.com> Signed-off-by: Christoph Jerolimov <jerolimov+git@redhat.com>
1 parent 4d7b83c commit 7cd3878

File tree

16 files changed

+473
-62
lines changed

16 files changed

+473
-62
lines changed
 

‎.rhdh/docker/Dockerfile

+1
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ COPY $EXTERNAL_SOURCE_NESTED/dynamic-plugins/wrappers/roadiehq-backstage-plugin-
7474
COPY $EXTERNAL_SOURCE_NESTED/dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-marketplace/package.json ./dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-marketplace/package.json
7575
COPY $EXTERNAL_SOURCE_NESTED/dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-marketplace-backend-dynamic/package.json ./dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-marketplace-backend-dynamic/package.json
7676
COPY $EXTERNAL_SOURCE_NESTED/dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-global-header/package.json ./dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-global-header/package.json
77+
COPY $EXTERNAL_SOURCE_NESTED/dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-global-floating-action-button/package.json ./dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-global-floating-action-button/package.json
7778
COPY $EXTERNAL_SOURCE_NESTED/dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-dynamic-home-page/package.json ./dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-dynamic-home-page/package.json
7879
COPY $EXTERNAL_SOURCE_NESTED/dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-catalog-backend-module-marketplace-dynamic/package.json ./dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-catalog-backend-module-marketplace-dynamic/package.json
7980
COPY $EXTERNAL_SOURCE_NESTED/dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-bulk-import/package.json ./dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-bulk-import/package.json

‎app-config.dynamic-plugins.yaml

+11
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,17 @@ dynamicPlugins:
258258
config:
259259
layout:
260260
position: above-main-content
261+
red-hat-developer-hub.backstage-plugin-global-floating-action-button:
262+
mountPoints:
263+
- mountPoint: application/listener
264+
importName: DynamicGlobalFloatingActionButton
265+
- mountPoint: global.floatingactionbutton/component
266+
importName: NullComponent
267+
config:
268+
icon: github
269+
label: Git
270+
toolTip: Github
271+
to: https://github.com/redhat-developer/rhdh
261272
red-hat-developer-hub.backstage-plugin-dynamic-home-page:
262273
dynamicRoutes:
263274
- path: /

‎docker/Dockerfile

+1
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ COPY $EXTERNAL_SOURCE_NESTED/dynamic-plugins/wrappers/roadiehq-backstage-plugin-
7575
COPY $EXTERNAL_SOURCE_NESTED/dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-marketplace/package.json ./dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-marketplace/package.json
7676
COPY $EXTERNAL_SOURCE_NESTED/dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-marketplace-backend-dynamic/package.json ./dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-marketplace-backend-dynamic/package.json
7777
COPY $EXTERNAL_SOURCE_NESTED/dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-global-header/package.json ./dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-global-header/package.json
78+
COPY $EXTERNAL_SOURCE_NESTED/dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-global-floating-action-button/package.json ./dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-global-floating-action-button/package.json
7879
COPY $EXTERNAL_SOURCE_NESTED/dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-dynamic-home-page/package.json ./dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-dynamic-home-page/package.json
7980
COPY $EXTERNAL_SOURCE_NESTED/dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-catalog-backend-module-marketplace-dynamic/package.json ./dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-catalog-backend-module-marketplace-dynamic/package.json
8081
COPY $EXTERNAL_SOURCE_NESTED/dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-bulk-import/package.json ./dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-bulk-import/package.json

‎docs/dynamic-plugins/frontend-plugin-wiring.md

+36
Original file line numberDiff line numberDiff line change
@@ -400,6 +400,42 @@ Each global header entry requires the following attributes:
400400

401401
Users can configure multiple global headers at different positions by adding entries to the `mountPoints` field.
402402

403+
### Adding application listeners
404+
405+
The users can add application listeners using the `application/listener` mount point. Below is an example that uses the aforesaid mount point:
406+
407+
```yaml
408+
# app-config.yaml
409+
dynamicPlugins:
410+
frontend:
411+
<package_name>: # plugin_package_name same as `scalprum.name` key in plugin's `package.json`
412+
mountPoints:
413+
- mountPoint: application/listener
414+
importName: <exported listener component>
415+
```
416+
417+
Users can configure multiple application listeners by adding entries to the `mountPoints` field.
418+
419+
### Adding application providers
420+
421+
The users can add application providers using the `application/provider` mount point. Below is an example that uses the aforesaid mount point to configure a context provider:
422+
423+
```yaml
424+
# app-config.yaml
425+
dynamicPlugins:
426+
frontend:
427+
<package_name>: # plugin_package_name same as `scalprum.name` key in plugin's `package.json`
428+
dynamicRoutes:
429+
- path: /<route>
430+
importName: Component # Component you want to load on the route
431+
mountPoints:
432+
- mountPoint: application/provider
433+
importName: <exported provider component>
434+
```
435+
436+
Users can configure multiple application providers by adding entries to the `mountPoints` field.
437+
438+
403439
## Customizing and Adding Entity tabs
404440

405441
Out of the box the frontend system provides an opinionated set of tabs for catalog entity views. This set of tabs can be further customized and extended as needed via the `entityTabs` configuration:

‎dynamic-plugins.default.yaml

+18
Original file line numberDiff line numberDiff line change
@@ -536,6 +536,24 @@ plugins:
536536
layout:
537537
position: above-main-content
538538

539+
# Group: Global floating action button
540+
- package: ./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-global-floating-action-button
541+
disabled: true
542+
pluginConfig:
543+
dynamicPlugins:
544+
frontend:
545+
red-hat-developer-hub.backstage-plugin-global-floating-action-button:
546+
mountPoints:
547+
- mountPoint: application/listener
548+
importName: DynamicGlobalFloatingActionButton
549+
- mountPoint: global.floatingactionbutton/component
550+
importName: NullComponent
551+
config:
552+
icon: github
553+
label: 'Git'
554+
toolTip: 'Github'
555+
to: https://github.com/redhat-developer/rhdh
556+
539557
# Homepage
540558
- package: ./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-dynamic-home-page
541559
disabled: false
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
dist-dynamic
2+
dist-scalprum
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = require("@backstage/cli/config/eslint-factory")(__dirname);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
{
2+
"name": "red-hat-developer-hub-backstage-plugin-global-floating-action-button",
3+
"version": "0.0.6",
4+
"main": "src/index.ts",
5+
"types": "src/index.ts",
6+
"license": "Apache-2.0",
7+
"publishConfig": {
8+
"access": "public",
9+
"main": "dist/index.cjs.js",
10+
"types": "dist/index.d.ts"
11+
},
12+
"backstage": {
13+
"role": "frontend-plugin",
14+
"supported-versions": "1.35.0",
15+
"pluginId": "red-hat-developer-hub-backstage-plugin-global-floating-action-button",
16+
"pluginPackages": [
17+
"red-hat-developer-hub-backstage-plugin-global-floating-action-button"
18+
]
19+
},
20+
"sideEffects": false,
21+
"scripts": {
22+
"tsc": "tsc",
23+
"build": "backstage-cli package build",
24+
"lint:check": "backstage-cli package lint",
25+
"test": "backstage-cli package test --passWithNoTests --coverage",
26+
"clean": "backstage-cli package clean",
27+
"export-dynamic": "janus-cli package export-dynamic-plugin --in-place",
28+
"export-dynamic:clean": "run export-dynamic --clean"
29+
},
30+
"dependencies": {
31+
"@mui/material": "5.16.14",
32+
"@red-hat-developer-hub/backstage-plugin-global-floating-action-button": "0.0.6"
33+
},
34+
"devDependencies": {
35+
"@backstage/cli": "0.29.5",
36+
"@janus-idp/cli": "3.0.0",
37+
"typescript": "5.7.3"
38+
},
39+
"scalprum": {
40+
"name": "red-hat-developer-hub.backstage-plugin-global-floating-action-button",
41+
"exposedModules": {
42+
"PluginRoot": "./src/index.ts"
43+
}
44+
},
45+
"files": [
46+
"dist",
47+
"dist-scalprum"
48+
],
49+
"keywords": [
50+
"backstage",
51+
"plugin"
52+
],
53+
"repository": {
54+
"type": "git",
55+
"url": "https://github.com/redhat-developer/rhdh",
56+
"directory": "dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-global-floating-action-button"
57+
},
58+
"author": "Red Hat",
59+
"homepage": "https://red.ht/rhdh",
60+
"bugs": "https://issues.redhat.com/browse/RHIDP"
61+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { unstable_ClassNameGenerator as ClassNameGenerator } from "@mui/material/className";
2+
3+
ClassNameGenerator.configure((componentName) => {
4+
return componentName.startsWith("v5-")
5+
? componentName
6+
: `v5-${componentName}`;
7+
});
8+
9+
export * from "@red-hat-developer-hub/backstage-plugin-global-floating-action-button";
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"extends": "@backstage/cli/config/tsconfig.json",
3+
"include": ["src", "dev", "migrations"],
4+
"exclude": ["node_modules"],
5+
"compilerOptions": {
6+
"outDir": "../../../dist-types/dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-global-floating-action-button",
7+
"rootDir": "."
8+
}
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"extends": ["//"],
3+
"tasks": {
4+
"tsc": {
5+
"outputs": [
6+
"../../../dist-types/dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-global-floating-action-button/**"
7+
]
8+
}
9+
}
10+
}

‎packages/app/src/components/AppBase/AppBase.tsx

+64-59
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ import { entityPage } from '../catalog/EntityPage';
2424
import DynamicRootContext from '../DynamicRoot/DynamicRootContext';
2525
import { LearningPaths } from '../learningPaths/LearningPathsPage';
2626
import { Root } from '../Root';
27+
import { ApplicationListener } from '../Root/ApplicationListener';
28+
import { ApplicationProvider } from '../Root/ApplicationProvider';
2729
import ConfigUpdater from '../Root/ConfigUpdater';
2830
import { SearchPage } from '../search/SearchPage';
2931
import { settingsPage } from '../UserSettings/SettingsPages';
@@ -74,66 +76,69 @@ const AppBase = () => {
7476
<OAuthRequestDialog />
7577
<AppRouter>
7678
<ConfigUpdater />
79+
<ApplicationListener />
7780
<Root>
78-
<FlatRoutes>
79-
<Route
80-
path="/catalog"
81-
element={
82-
<CatalogIndexPage pagination columns={myCustomColumnsFunc} />
83-
}
84-
/>
85-
<Route
86-
path="/catalog/:namespace/:kind/:name"
87-
element={<CatalogEntityPage />}
88-
>
89-
{entityPage(entityTabOverrides)}
90-
</Route>
91-
<Route
92-
path="/create"
93-
element={
94-
<ScaffolderPage
95-
headerOptions={{ title: 'Software Templates' }}
96-
/>
97-
}
98-
>
99-
<ScaffolderFieldExtensions>
100-
{scaffolderFieldExtensions.map(
101-
({ scope, module, importName, Component }) => (
102-
<Component key={`${scope}-${module}-${importName}`} />
103-
),
104-
)}
105-
</ScaffolderFieldExtensions>
106-
scaffolderFieldExtensions
107-
</Route>
108-
<Route path="/api-docs" element={<ApiExplorerPage />} />
109-
<Route
110-
path="/catalog-import"
111-
element={
112-
<RequirePermission permission={catalogEntityCreatePermission}>
113-
<CatalogImportPage />
114-
</RequirePermission>
115-
}
116-
/>
117-
<Route path="/search" element={<BackstageSearchPage />}>
118-
<SearchPage />
119-
</Route>
120-
<Route path="/settings" element={<UserSettingsPage />}>
121-
{settingsPage}
122-
</Route>
123-
<Route path="/catalog-graph" element={<CatalogGraphPage />} />
124-
<Route path="/learning-paths" element={<LearningPaths />} />
125-
{dynamicRoutes.map(
126-
({ Component, staticJSXContent, path, config: { props } }) => (
127-
<Route
128-
key={path}
129-
path={path}
130-
element={<Component {...props} />}
131-
>
132-
{staticJSXContent}
133-
</Route>
134-
),
135-
)}
136-
</FlatRoutes>
81+
<ApplicationProvider>
82+
<FlatRoutes>
83+
<Route
84+
path="/catalog"
85+
element={
86+
<CatalogIndexPage pagination columns={myCustomColumnsFunc} />
87+
}
88+
/>
89+
<Route
90+
path="/catalog/:namespace/:kind/:name"
91+
element={<CatalogEntityPage />}
92+
>
93+
{entityPage(entityTabOverrides)}
94+
</Route>
95+
<Route
96+
path="/create"
97+
element={
98+
<ScaffolderPage
99+
headerOptions={{ title: 'Software Templates' }}
100+
/>
101+
}
102+
>
103+
<ScaffolderFieldExtensions>
104+
{scaffolderFieldExtensions.map(
105+
({ scope, module, importName, Component }) => (
106+
<Component key={`${scope}-${module}-${importName}`} />
107+
),
108+
)}
109+
</ScaffolderFieldExtensions>
110+
scaffolderFieldExtensions
111+
</Route>
112+
<Route path="/api-docs" element={<ApiExplorerPage />} />
113+
<Route
114+
path="/catalog-import"
115+
element={
116+
<RequirePermission permission={catalogEntityCreatePermission}>
117+
<CatalogImportPage />
118+
</RequirePermission>
119+
}
120+
/>
121+
<Route path="/search" element={<BackstageSearchPage />}>
122+
<SearchPage />
123+
</Route>
124+
<Route path="/settings" element={<UserSettingsPage />}>
125+
{settingsPage}
126+
</Route>
127+
<Route path="/catalog-graph" element={<CatalogGraphPage />} />
128+
<Route path="/learning-paths" element={<LearningPaths />} />
129+
{dynamicRoutes.map(
130+
({ Component, staticJSXContent, path, config: { props } }) => (
131+
<Route
132+
key={path}
133+
path={path}
134+
element={<Component {...props} />}
135+
>
136+
{staticJSXContent}
137+
</Route>
138+
),
139+
)}
140+
</FlatRoutes>
141+
</ApplicationProvider>
137142
</Root>
138143
</AppRouter>
139144
</AppProvider>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { useContext } from 'react';
2+
3+
import { ErrorBoundary } from '@backstage/core-components';
4+
5+
import DynamicRootContext from '../DynamicRoot/DynamicRootContext';
6+
7+
export const ApplicationListener = () => {
8+
const { mountPoints } = useContext(DynamicRootContext);
9+
const listeners = mountPoints['application/listener'] ?? [];
10+
return listeners.map(({ Component }, index) => {
11+
return (
12+
<ErrorBoundary
13+
// eslint-disable-next-line react/no-array-index-key
14+
key={index}
15+
>
16+
<Component />
17+
</ErrorBoundary>
18+
);
19+
});
20+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { useContext, useMemo } from 'react';
2+
3+
import { ErrorBoundary } from '@backstage/core-components';
4+
5+
import DynamicRootContext from '../DynamicRoot/DynamicRootContext';
6+
7+
export const ApplicationProvider = ({
8+
children,
9+
}: React.PropsWithChildren<{}>) => {
10+
const { mountPoints } = useContext(DynamicRootContext);
11+
const providers = useMemo(
12+
() => mountPoints['application/provider'] ?? [],
13+
[mountPoints],
14+
);
15+
if (providers.length === 0) {
16+
return children;
17+
}
18+
return providers.reduceRight((acc, { Component }, index) => {
19+
return (
20+
<ErrorBoundary
21+
// eslint-disable-next-line react/no-array-index-key
22+
key={index}
23+
>
24+
<Component>{acc}</Component>
25+
</ErrorBoundary>
26+
);
27+
}, children);
28+
};

‎plugins/dynamic-plugins-info/src/components/InternalPluginsMap.ts

+2
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ export const InternalPluginsMap: Record<string, string> = {
6565
'./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-bulk-import',
6666
'red-hat-developer-hub-backstage-plugin-global-header':
6767
'./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-global-header',
68+
'red-hat-developer-hub-backstage-plugin-global-floating-action-button':
69+
'./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-global-floating-action-button',
6870
'red-hat-developer-hub-backstage-plugin-dynamic-home-page':
6971
'./dynamic-plugins/dist/red-hat-developer-hub-backstage-plugin-dynamic-home-page',
7072
'red-hat-developer-hub-backstage-plugin-marketplace':

‎yarn.lock

+200-3
Original file line numberDiff line numberDiff line change
@@ -5124,6 +5124,140 @@ __metadata:
51245124
languageName: node
51255125
linkType: hard
51265126

5127+
"@backstage/cli@npm:0.29.5":
5128+
version: 0.29.5
5129+
resolution: "@backstage/cli@npm:0.29.5"
5130+
dependencies:
5131+
"@backstage/catalog-model": ^1.7.3
5132+
"@backstage/cli-common": ^0.1.15
5133+
"@backstage/cli-node": ^0.2.12
5134+
"@backstage/config": ^1.3.2
5135+
"@backstage/config-loader": ^1.9.5
5136+
"@backstage/errors": ^1.2.7
5137+
"@backstage/eslint-plugin": ^0.1.10
5138+
"@backstage/integration": ^1.16.1
5139+
"@backstage/release-manifests": ^0.0.12
5140+
"@backstage/types": ^1.2.1
5141+
"@manypkg/get-packages": ^1.1.3
5142+
"@module-federation/enhanced": ^0.8.0
5143+
"@octokit/graphql": ^5.0.0
5144+
"@octokit/graphql-schema": ^13.7.0
5145+
"@octokit/oauth-app": ^4.2.0
5146+
"@octokit/request": ^6.0.0
5147+
"@pmmmwh/react-refresh-webpack-plugin": ^0.5.7
5148+
"@rollup/plugin-commonjs": ^26.0.0
5149+
"@rollup/plugin-json": ^6.0.0
5150+
"@rollup/plugin-node-resolve": ^15.0.0
5151+
"@rollup/plugin-yaml": ^4.0.0
5152+
"@spotify/eslint-config-base": ^15.0.0
5153+
"@spotify/eslint-config-react": ^15.0.0
5154+
"@spotify/eslint-config-typescript": ^15.0.0
5155+
"@sucrase/webpack-loader": ^2.0.0
5156+
"@svgr/core": 6.5.x
5157+
"@svgr/plugin-jsx": 6.5.x
5158+
"@svgr/plugin-svgo": 6.5.x
5159+
"@svgr/rollup": 6.5.x
5160+
"@svgr/webpack": 6.5.x
5161+
"@swc/core": ^1.3.46
5162+
"@swc/helpers": ^0.5.0
5163+
"@swc/jest": ^0.2.22
5164+
"@types/jest": ^29.5.11
5165+
"@types/webpack-env": ^1.15.2
5166+
"@typescript-eslint/eslint-plugin": ^8.17.0
5167+
"@typescript-eslint/parser": ^8.16.0
5168+
"@yarnpkg/lockfile": ^1.1.0
5169+
"@yarnpkg/parsers": ^3.0.0
5170+
bfj: ^8.0.0
5171+
buffer: ^6.0.3
5172+
chalk: ^4.0.0
5173+
chokidar: ^3.3.1
5174+
commander: ^12.0.0
5175+
cross-fetch: ^4.0.0
5176+
cross-spawn: ^7.0.3
5177+
css-loader: ^6.5.1
5178+
ctrlc-windows: ^2.1.0
5179+
esbuild: ^0.24.0
5180+
esbuild-loader: ^4.0.0
5181+
eslint: ^8.6.0
5182+
eslint-config-prettier: ^9.0.0
5183+
eslint-formatter-friendly: ^7.0.0
5184+
eslint-plugin-deprecation: ^3.0.0
5185+
eslint-plugin-import: ^2.31.0
5186+
eslint-plugin-jest: ^28.9.0
5187+
eslint-plugin-jsx-a11y: ^6.10.2
5188+
eslint-plugin-react: ^7.37.2
5189+
eslint-plugin-react-hooks: ^5.0.0
5190+
eslint-plugin-unused-imports: ^4.1.4
5191+
eslint-webpack-plugin: ^4.2.0
5192+
express: ^4.17.1
5193+
fork-ts-checker-webpack-plugin: ^9.0.0
5194+
fs-extra: ^11.2.0
5195+
git-url-parse: ^15.0.0
5196+
glob: ^7.1.7
5197+
global-agent: ^3.0.0
5198+
globby: ^11.1.0
5199+
handlebars: ^4.7.3
5200+
html-webpack-plugin: ^5.6.3
5201+
inquirer: ^8.2.0
5202+
jest: ^29.7.0
5203+
jest-cli: ^29.7.0
5204+
jest-css-modules: ^2.1.0
5205+
jest-environment-jsdom: ^29.0.2
5206+
jest-runtime: ^29.0.2
5207+
json-schema: ^0.4.0
5208+
lodash: ^4.17.21
5209+
mini-css-extract-plugin: ^2.4.2
5210+
minimatch: ^9.0.0
5211+
node-libs-browser: ^2.2.1
5212+
npm-packlist: ^5.0.0
5213+
ora: ^5.3.0
5214+
p-limit: ^3.1.0
5215+
p-queue: ^6.6.2
5216+
pirates: ^4.0.6
5217+
postcss: ^8.1.0
5218+
process: ^0.11.10
5219+
raw-loader: ^4.0.2
5220+
react-dev-utils: ^12.0.0-next.60
5221+
react-refresh: ^0.14.0
5222+
recursive-readdir: ^2.2.2
5223+
replace-in-file: ^7.1.0
5224+
rollup: ^4.27.3
5225+
rollup-plugin-dts: ^6.1.0
5226+
rollup-plugin-esbuild: ^6.1.1
5227+
rollup-plugin-postcss: ^4.0.0
5228+
rollup-pluginutils: ^2.8.2
5229+
semver: ^7.5.3
5230+
style-loader: ^3.3.1
5231+
sucrase: ^3.20.2
5232+
swc-loader: ^0.2.3
5233+
tar: ^6.1.12
5234+
terser-webpack-plugin: ^5.1.3
5235+
ts-morph: ^24.0.0
5236+
util: ^0.12.3
5237+
webpack: ^5.94.0
5238+
webpack-dev-server: ^5.0.0
5239+
yaml: ^2.0.0
5240+
yargs: ^16.2.0
5241+
yml-loader: ^2.1.0
5242+
yn: ^4.0.0
5243+
zod: ^3.22.4
5244+
peerDependencies:
5245+
"@rspack/core": ^1.0.10
5246+
"@rspack/dev-server": ^1.0.9
5247+
"@rspack/plugin-react-refresh": ^1.0.0
5248+
peerDependenciesMeta:
5249+
"@rspack/core":
5250+
optional: true
5251+
"@rspack/dev-server":
5252+
optional: true
5253+
"@rspack/plugin-react-refresh":
5254+
optional: true
5255+
bin:
5256+
backstage-cli: bin/backstage-cli
5257+
checksum: 629d4d225253292a723993e6f864a838aaba3306109320dd48b9022e15ba8bcf67a86cdb260d5dceb8dffaa916e54ae4aaad12aaea21f8e125ef9b5ba8cb314e
5258+
languageName: node
5259+
linkType: hard
5260+
51275261
"@backstage/cli@npm:0.29.6":
51285262
version: 0.29.6
51295263
resolution: "@backstage/cli@npm:0.29.6"
@@ -12421,7 +12555,7 @@ __metadata:
1242112555
languageName: node
1242212556
linkType: hard
1242312557

12424-
"@mui/icons-material@npm:5.16.14, @mui/icons-material@npm:^5.15.19, @mui/icons-material@npm:^5.16.4, @mui/icons-material@npm:^5.16.7":
12558+
"@mui/icons-material@npm:5.16.14, @mui/icons-material@npm:^5.15.17, @mui/icons-material@npm:^5.15.19, @mui/icons-material@npm:^5.16.4, @mui/icons-material@npm:^5.16.7":
1242512559
version: 5.16.14
1242612560
resolution: "@mui/icons-material@npm:5.16.14"
1242712561
dependencies:
@@ -12597,7 +12731,7 @@ __metadata:
1259712731
languageName: node
1259812732
linkType: hard
1259912733

12600-
"@mui/private-theming@npm:^5.16.14, @mui/private-theming@npm:^5.16.6":
12734+
"@mui/private-theming@npm:^5.16.13, @mui/private-theming@npm:^5.16.14, @mui/private-theming@npm:^5.16.6":
1260112735
version: 5.16.14
1260212736
resolution: "@mui/private-theming@npm:5.16.14"
1260312737
dependencies:
@@ -12673,7 +12807,38 @@ __metadata:
1267312807
languageName: node
1267412808
linkType: hard
1267512809

12676-
"@mui/styles@npm:5.16.7, @mui/styles@npm:^5.16.7":
12810+
"@mui/styles@npm:5.16.13, @mui/styles@npm:^5.16.7":
12811+
version: 5.16.13
12812+
resolution: "@mui/styles@npm:5.16.13"
12813+
dependencies:
12814+
"@babel/runtime": ^7.23.9
12815+
"@emotion/hash": ^0.9.1
12816+
"@mui/private-theming": ^5.16.13
12817+
"@mui/types": ^7.2.15
12818+
"@mui/utils": ^5.16.13
12819+
clsx: ^2.1.0
12820+
csstype: ^3.1.3
12821+
hoist-non-react-statics: ^3.3.2
12822+
jss: ^10.10.0
12823+
jss-plugin-camel-case: ^10.10.0
12824+
jss-plugin-default-unit: ^10.10.0
12825+
jss-plugin-global: ^10.10.0
12826+
jss-plugin-nested: ^10.10.0
12827+
jss-plugin-props-sort: ^10.10.0
12828+
jss-plugin-rule-value-function: ^10.10.0
12829+
jss-plugin-vendor-prefixer: ^10.10.0
12830+
prop-types: ^15.8.1
12831+
peerDependencies:
12832+
"@types/react": ^17.0.0 || ^18.0.0 || ^19.0.0
12833+
react: ^17.0.0 || ^18.0.0 || ^19.0.0
12834+
peerDependenciesMeta:
12835+
"@types/react":
12836+
optional: true
12837+
checksum: 2464d3567264c152a7e8f030554a423c6ab509c85d33d193c298935b439cc62c7fa82b80cd99a477fbcdd463aa8de6e57b99b67445081d56137b5d5c094df192
12838+
languageName: node
12839+
linkType: hard
12840+
12841+
"@mui/styles@npm:5.16.7":
1267712842
version: 5.16.7
1267812843
resolution: "@mui/styles@npm:5.16.7"
1267912844
dependencies:
@@ -16254,6 +16419,26 @@ __metadata:
1625416419
languageName: node
1625516420
linkType: hard
1625616421

16422+
"@red-hat-developer-hub/backstage-plugin-global-floating-action-button@npm:0.0.6":
16423+
version: 0.0.6
16424+
resolution: "@red-hat-developer-hub/backstage-plugin-global-floating-action-button@npm:0.0.6"
16425+
dependencies:
16426+
"@backstage/core-components": ^0.16.3
16427+
"@backstage/core-plugin-api": ^1.10.3
16428+
"@backstage/theme": ^0.6.3
16429+
"@mui/icons-material": ^5.15.17
16430+
"@mui/material": ^5.15.17
16431+
"@mui/styles": 5.16.13
16432+
"@scalprum/react-core": 0.9.3
16433+
classnames: ^2.5.1
16434+
react-use: ^17.2.4
16435+
peerDependencies:
16436+
react: 16.13.1 || ^17.0.0 || ^18.0.0
16437+
react-router-dom: ^6.0.0
16438+
checksum: 2c9f0046497b5f2f67f557078408bea951a897d0914aeb9a55b199c9a55dee094c0796438d23c4d092feb6b00ddf92dbd6494e5ff1b8a5285e7c31b928e40944
16439+
languageName: node
16440+
linkType: hard
16441+
1625716442
"@red-hat-developer-hub/backstage-plugin-global-header@npm:0.0.2":
1625816443
version: 0.0.2
1625916444
resolution: "@red-hat-developer-hub/backstage-plugin-global-header@npm:0.0.2"
@@ -40296,6 +40481,18 @@ __metadata:
4029640481
languageName: unknown
4029740482
linkType: soft
4029840483

40484+
"red-hat-developer-hub-backstage-plugin-global-floating-action-button@workspace:dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-global-floating-action-button":
40485+
version: 0.0.0-use.local
40486+
resolution: "red-hat-developer-hub-backstage-plugin-global-floating-action-button@workspace:dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-global-floating-action-button"
40487+
dependencies:
40488+
"@backstage/cli": 0.29.5
40489+
"@janus-idp/cli": 3.0.0
40490+
"@mui/material": 5.16.14
40491+
"@red-hat-developer-hub/backstage-plugin-global-floating-action-button": 0.0.6
40492+
typescript: 5.7.3
40493+
languageName: unknown
40494+
linkType: soft
40495+
4029940496
"red-hat-developer-hub-backstage-plugin-global-header@workspace:dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-global-header":
4030040497
version: 0.0.0-use.local
4030140498
resolution: "red-hat-developer-hub-backstage-plugin-global-header@workspace:dynamic-plugins/wrappers/red-hat-developer-hub-backstage-plugin-global-header"

0 commit comments

Comments
 (0)
Please sign in to comment.