@kuadrant/kuadrant-backstage-plugin-frontend 0.0.2-dev-b696169 → 0.0.2-dev-3d15d6a

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/dist/components/ApiProductInfoCard/ApiProductInfoCard.esm.js +23 -2
  2. package/dist/components/ApiProductInfoCard/ApiProductInfoCard.esm.js.map +1 -1
  3. package/dist/components/ApiProductOpenApiAlert/ApiProductOpenApiAlert.esm.js +42 -0
  4. package/dist/components/ApiProductOpenApiAlert/ApiProductOpenApiAlert.esm.js.map +1 -0
  5. package/dist/components/ApiProductOpenApiAlert/index.esm.js +2 -0
  6. package/dist/components/ApiProductOpenApiAlert/index.esm.js.map +1 -0
  7. package/dist/index.d.ts +2 -1
  8. package/dist/index.esm.js +1 -1
  9. package/dist/plugin.esm.js +9 -1
  10. package/dist/plugin.esm.js.map +1 -1
  11. package/dist-scalprum/{internal.plugin-kuadrant.e37d8046ec4d7ed991e0.js → internal.plugin-kuadrant.f72b5e5792b0a8c4239f.js} +2 -2
  12. package/dist-scalprum/internal.plugin-kuadrant.f72b5e5792b0a8c4239f.js.map +1 -0
  13. package/dist-scalprum/plugin-manifest.json +2 -2
  14. package/dist-scalprum/static/1085.536aa0fa.chunk.js +3 -0
  15. package/dist-scalprum/static/1085.536aa0fa.chunk.js.LICENSE.txt +9 -0
  16. package/dist-scalprum/static/1085.536aa0fa.chunk.js.map +1 -0
  17. package/dist-scalprum/static/2628.6619bf8b.chunk.js +3 -0
  18. package/dist-scalprum/static/{5568.5dbce633.chunk.js.LICENSE.txt → 2628.6619bf8b.chunk.js.LICENSE.txt} +3 -3
  19. package/dist-scalprum/static/2628.6619bf8b.chunk.js.map +1 -0
  20. package/dist-scalprum/static/2946.167c50c2.chunk.js +3 -0
  21. package/dist-scalprum/static/{9288.61b45746.chunk.js.LICENSE.txt → 2946.167c50c2.chunk.js.LICENSE.txt} +1 -10
  22. package/dist-scalprum/static/2946.167c50c2.chunk.js.map +1 -0
  23. package/dist-scalprum/static/3466.43dfe991.chunk.js +3 -0
  24. package/dist-scalprum/static/3466.43dfe991.chunk.js.LICENSE.txt +9 -0
  25. package/dist-scalprum/static/3466.43dfe991.chunk.js.map +1 -0
  26. package/dist-scalprum/static/4491.83052809.chunk.js +2 -0
  27. package/dist-scalprum/static/4491.83052809.chunk.js.map +1 -0
  28. package/dist-scalprum/static/5453.c1f90bdf.chunk.js +2 -0
  29. package/dist-scalprum/static/5453.c1f90bdf.chunk.js.map +1 -0
  30. package/dist-scalprum/static/6272.b5ee5195.chunk.js +3 -0
  31. package/dist-scalprum/static/6272.b5ee5195.chunk.js.LICENSE.txt +9 -0
  32. package/dist-scalprum/static/6272.b5ee5195.chunk.js.map +1 -0
  33. package/dist-scalprum/static/6371.c83dc422.chunk.js +2 -0
  34. package/dist-scalprum/static/6371.c83dc422.chunk.js.map +1 -0
  35. package/dist-scalprum/static/6872.7ef4ed23.chunk.js +2 -0
  36. package/dist-scalprum/static/6872.7ef4ed23.chunk.js.map +1 -0
  37. package/dist-scalprum/static/{5568.5dbce633.chunk.js → 7556.aa8a002f.chunk.js} +3 -3
  38. package/dist-scalprum/static/7556.aa8a002f.chunk.js.LICENSE.txt +8 -0
  39. package/dist-scalprum/static/7556.aa8a002f.chunk.js.map +1 -0
  40. package/dist-scalprum/static/7601.4df83556.chunk.js +3 -0
  41. package/dist-scalprum/static/7601.4df83556.chunk.js.LICENSE.txt +9 -0
  42. package/dist-scalprum/static/7601.4df83556.chunk.js.map +1 -0
  43. package/dist-scalprum/static/9400.df4a7fb5.chunk.js +2 -0
  44. package/dist-scalprum/static/9400.df4a7fb5.chunk.js.map +1 -0
  45. package/dist-scalprum/static/exposed-PluginRoot.bba1f323.chunk.js +2 -0
  46. package/dist-scalprum/static/exposed-PluginRoot.bba1f323.chunk.js.map +1 -0
  47. package/package.json +1 -1
  48. package/dist-scalprum/internal.plugin-kuadrant.e37d8046ec4d7ed991e0.js.map +0 -1
  49. package/dist-scalprum/static/4491.a2e0258f.chunk.js +0 -2
  50. package/dist-scalprum/static/4491.a2e0258f.chunk.js.map +0 -1
  51. package/dist-scalprum/static/5453.ae292ab1.chunk.js +0 -2
  52. package/dist-scalprum/static/5453.ae292ab1.chunk.js.map +0 -1
  53. package/dist-scalprum/static/5568.5dbce633.chunk.js.map +0 -1
  54. package/dist-scalprum/static/6272.e49551fa.chunk.js +0 -2
  55. package/dist-scalprum/static/6272.e49551fa.chunk.js.map +0 -1
  56. package/dist-scalprum/static/6352.d48bba8c.chunk.js +0 -2
  57. package/dist-scalprum/static/6352.d48bba8c.chunk.js.map +0 -1
  58. package/dist-scalprum/static/6872.feed76d2.chunk.js +0 -2
  59. package/dist-scalprum/static/6872.feed76d2.chunk.js.map +0 -1
  60. package/dist-scalprum/static/7601.08d8ff3f.chunk.js +0 -2
  61. package/dist-scalprum/static/7601.08d8ff3f.chunk.js.map +0 -1
  62. package/dist-scalprum/static/9288.61b45746.chunk.js +0 -3
  63. package/dist-scalprum/static/9288.61b45746.chunk.js.map +0 -1
  64. package/dist-scalprum/static/exposed-PluginRoot.0717f1ce.chunk.js +0 -2
  65. package/dist-scalprum/static/exposed-PluginRoot.0717f1ce.chunk.js.map +0 -1
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { useEntity } from '@backstage/plugin-catalog-react';
3
3
  import { useApi, configApiRef, fetchApiRef, identityApiRef } from '@backstage/core-plugin-api';
4
- import { InfoCard, Progress, ResponseErrorPanel, Link } from '@backstage/core-components';
4
+ import { InfoCard, Progress, ResponseErrorPanel, Link, CodeSnippet } from '@backstage/core-components';
5
5
  import { Typography, Box, Grid, Chip, Table, TableHead, TableRow, TableCell, TableBody } from '@material-ui/core';
6
6
  import useAsync from 'react-use/lib/useAsync';
7
7
  import { useKuadrantPermission } from '../../utils/permissions.esm.js';
@@ -57,6 +57,14 @@ const ApiProductInfoCard = () => {
57
57
  return /* @__PURE__ */ React.createElement(InfoCard, { title: "API Product Information" }, /* @__PURE__ */ React.createElement(Typography, null, "APIProduct not found"));
58
58
  }
59
59
  const { spec, status } = apiProduct;
60
+ const authSchemes = status?.discoveredAuthScheme?.authentication || {};
61
+ const schemeObjects = Object.values(authSchemes);
62
+ const hasJwt = schemeObjects.some(
63
+ (scheme) => scheme.hasOwnProperty("jwt")
64
+ );
65
+ const jwtScheme = schemeObjects.find((scheme) => scheme.hasOwnProperty("jwt"));
66
+ const jwtIssuer = jwtScheme?.jwt?.issuerUrl || "unknown";
67
+ const jwtTokenEndpoint = status?.oidcDiscovery?.tokenEndpoint || "unknown";
60
68
  const plans = status?.discoveredPlans || [];
61
69
  return /* @__PURE__ */ React.createElement(Grid, { container: true, spacing: 3 }, /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React.createElement(InfoCard, { title: "API Product Details" }, /* @__PURE__ */ React.createElement(Box, { p: 2 }, /* @__PURE__ */ React.createElement(Typography, { variant: "h6", gutterBottom: true }, spec.displayName || apiProductName), /* @__PURE__ */ React.createElement(Typography, { variant: "body2", color: "textSecondary", paragraph: true }, spec.description), /* @__PURE__ */ React.createElement(Box, { display: "flex", alignItems: "center", flexWrap: "wrap", style: { gap: 8 } }, /* @__PURE__ */ React.createElement(Typography, { variant: "body2" }, /* @__PURE__ */ React.createElement("strong", null, "Version:"), " ", spec.version || "v1"), spec.tags && spec.tags.length > 0 && /* @__PURE__ */ React.createElement(Box, { display: "flex", ml: 2, style: { gap: 4 } }, spec.tags.map((tag) => /* @__PURE__ */ React.createElement(Chip, { key: tag, label: tag, size: "small" })))), /* @__PURE__ */ React.createElement(Box, { mt: 2 }, /* @__PURE__ */ React.createElement(Typography, { variant: "body2", component: "div" }, /* @__PURE__ */ React.createElement("strong", null, "Approval Mode:"), " ", /* @__PURE__ */ React.createElement(
62
70
  Chip,
@@ -72,7 +80,20 @@ const ApiProductInfoCard = () => {
72
80
  label: plan.tier,
73
81
  size: "small"
74
82
  }
75
- )), /* @__PURE__ */ React.createElement(TableCell, null, plan.limits && Object.entries(plan.limits).map(([key, value]) => /* @__PURE__ */ React.createElement(Typography, { key, variant: "body2" }, String(value), " per ", key))))))), spec.targetRef && /* @__PURE__ */ React.createElement(Box, { mt: 2 }, /* @__PURE__ */ React.createElement(Typography, { variant: "caption", color: "textSecondary" }, "HTTPRoute: ", /* @__PURE__ */ React.createElement("strong", null, spec.targetRef.name))))), /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12, md: 6 }, /* @__PURE__ */ React.createElement(InfoCard, { title: "Contact Information" }, spec.contact ? /* @__PURE__ */ React.createElement(Box, { p: 2 }, /* @__PURE__ */ React.createElement(Grid, { container: true, spacing: 2 }, spec.contact.team && /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React.createElement(Typography, { variant: "body2" }, /* @__PURE__ */ React.createElement("strong", null, "Team:"), " ", spec.contact.team)), spec.contact.email && /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React.createElement(Typography, { variant: "body2" }, /* @__PURE__ */ React.createElement("strong", null, "Email:"), " ", /* @__PURE__ */ React.createElement(Link, { to: `mailto:${spec.contact.email}` }, spec.contact.email))), spec.contact.slack && /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React.createElement(Typography, { variant: "body2" }, /* @__PURE__ */ React.createElement("strong", null, "Slack:"), " ", spec.contact.slack)))) : /* @__PURE__ */ React.createElement(Box, { p: 2 }, /* @__PURE__ */ React.createElement(Typography, { variant: "body2", color: "textSecondary" }, "No contact information available")))), /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12, md: 6 }, /* @__PURE__ */ React.createElement(InfoCard, { title: "Documentation" }, spec.documentation ? /* @__PURE__ */ React.createElement(Box, { p: 2 }, /* @__PURE__ */ React.createElement(Grid, { container: true, spacing: 2 }, spec.documentation.docsURL && /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React.createElement(Typography, { variant: "body2" }, /* @__PURE__ */ React.createElement("strong", null, "Documentation:"), " ", /* @__PURE__ */ React.createElement(Link, { to: spec.documentation.docsURL, target: "_blank" }, "View Docs"))), spec.documentation.openAPISpec && /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React.createElement(Typography, { variant: "body2" }, /* @__PURE__ */ React.createElement("strong", null, "OpenAPI Spec:"), " ", /* @__PURE__ */ React.createElement(Link, { to: spec.documentation.openAPISpec, target: "_blank" }, "View Spec"))))) : /* @__PURE__ */ React.createElement(Box, { p: 2 }, /* @__PURE__ */ React.createElement(Typography, { variant: "body2", color: "textSecondary" }, "No documentation links available")))));
83
+ )), /* @__PURE__ */ React.createElement(TableCell, null, plan.limits && Object.entries(plan.limits).map(([key, value]) => /* @__PURE__ */ React.createElement(Typography, { key, variant: "body2" }, String(value), " per ", key))))))), spec.targetRef && /* @__PURE__ */ React.createElement(Box, { mt: 2 }, /* @__PURE__ */ React.createElement(Typography, { variant: "caption", color: "textSecondary" }, "HTTPRoute: ", /* @__PURE__ */ React.createElement("strong", null, spec.targetRef.name))))), /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12, md: 6 }, /* @__PURE__ */ React.createElement(InfoCard, { title: "Contact Information" }, spec.contact ? /* @__PURE__ */ React.createElement(Box, { p: 2 }, /* @__PURE__ */ React.createElement(Grid, { container: true, spacing: 2 }, spec.contact.team && /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React.createElement(Typography, { variant: "body2" }, /* @__PURE__ */ React.createElement("strong", null, "Team:"), " ", spec.contact.team)), spec.contact.email && /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React.createElement(Typography, { variant: "body2" }, /* @__PURE__ */ React.createElement("strong", null, "Email:"), " ", /* @__PURE__ */ React.createElement(Link, { to: `mailto:${spec.contact.email}` }, spec.contact.email))), spec.contact.slack && /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React.createElement(Typography, { variant: "body2" }, /* @__PURE__ */ React.createElement("strong", null, "Slack:"), " ", spec.contact.slack)))) : /* @__PURE__ */ React.createElement(Box, { p: 2 }, /* @__PURE__ */ React.createElement(Typography, { variant: "body2", color: "textSecondary" }, "No contact information available")))), /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12, md: 6 }, /* @__PURE__ */ React.createElement(InfoCard, { title: "Documentation" }, spec.documentation ? /* @__PURE__ */ React.createElement(Box, { p: 2 }, /* @__PURE__ */ React.createElement(Grid, { container: true, spacing: 2 }, spec.documentation.docsURL && /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React.createElement(Typography, { variant: "body2" }, /* @__PURE__ */ React.createElement("strong", null, "Documentation:"), " ", /* @__PURE__ */ React.createElement(Link, { to: spec.documentation.docsURL, target: "_blank" }, "View Docs"))), spec.documentation.openAPISpec && /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React.createElement(Typography, { variant: "body2" }, /* @__PURE__ */ React.createElement("strong", null, "OpenAPI Spec:"), " ", /* @__PURE__ */ React.createElement(Link, { to: spec.documentation.openAPISpec, target: "_blank" }, "View Spec"))))) : /* @__PURE__ */ React.createElement(Box, { p: 2 }, /* @__PURE__ */ React.createElement(Typography, { variant: "body2", color: "textSecondary" }, "No documentation links available")))), hasJwt && /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12, md: 6 }, /* @__PURE__ */ React.createElement(InfoCard, { title: "OIDC Provider Discovery" }, /* @__PURE__ */ React.createElement(Box, { p: 2 }, /* @__PURE__ */ React.createElement(Grid, { container: true, spacing: 2 }, /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React.createElement(Typography, { variant: "body2" }, "This API uses OIDC authentication. Obtain a token from the identity provider below.")), /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React.createElement(Typography, { variant: "body2" }, /* @__PURE__ */ React.createElement("strong", null, "Identity Provider: "), /* @__PURE__ */ React.createElement(Link, { to: jwtIssuer, target: "_blank" }, jwtIssuer))), /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React.createElement(Typography, { variant: "body2" }, /* @__PURE__ */ React.createElement("strong", null, "Token Endpoint: "), /* @__PURE__ */ React.createElement(Link, { to: jwtTokenEndpoint, target: "_blank" }, jwtTokenEndpoint))), /* @__PURE__ */ React.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React.createElement(
84
+ CodeSnippet,
85
+ {
86
+ text: `# Example (Client Credentials):
87
+ curl -X POST \\
88
+ -d "grant_type=client_credentials" \\
89
+ -d "client_id=YOUR_CLIENT_ID" \\
90
+ -d "client_secret=YOUR_CLIENT_SECRET" \\
91
+ ${jwtTokenEndpoint}
92
+ `,
93
+ language: "bash",
94
+ showCopyCodeButton: true
95
+ }
96
+ )))))));
76
97
  };
77
98
 
78
99
  export { ApiProductInfoCard };
@@ -1 +1 @@
1
- {"version":3,"file":"ApiProductInfoCard.esm.js","sources":["../../../src/components/ApiProductInfoCard/ApiProductInfoCard.tsx"],"sourcesContent":["import React from 'react';\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport { useApi, configApiRef, fetchApiRef, identityApiRef } from '@backstage/core-plugin-api';\nimport { InfoCard, Link, Progress, ResponseErrorPanel } from '@backstage/core-components';\nimport { Grid, Chip, Typography, Box, Table, TableBody, TableCell, TableHead, TableRow } from '@material-ui/core';\nimport useAsync from 'react-use/lib/useAsync';\nimport { useKuadrantPermission } from '../../utils/permissions';\nimport { kuadrantApiProductReadAllPermission } from '../../permissions';\n\nexport const ApiProductInfoCard = () => {\n const { entity } = useEntity();\n const config = useApi(configApiRef);\n const fetchApi = useApi(fetchApiRef);\n const identityApi = useApi(identityApiRef);\n const backendUrl = config.getString('backend.baseUrl');\n\n const { allowed: canReadAll, loading: permLoading } = useKuadrantPermission(\n kuadrantApiProductReadAllPermission\n );\n\n const namespace = entity.metadata.annotations?.['kuadrant.io/namespace'];\n const apiProductName = entity.metadata.annotations?.['kuadrant.io/apiproduct'];\n\n const { value: currentUserId } = useAsync(async () => {\n const identity = await identityApi.getBackstageIdentity();\n return identity.userEntityRef.split('/')[1] || 'guest';\n }, [identityApi]);\n\n const { value: apiProduct, loading, error } = useAsync(async () => {\n if (!namespace || !apiProductName) {\n return null;\n }\n\n const response = await fetchApi.fetch(\n `${backendUrl}/api/kuadrant/apiproducts/${namespace}/${apiProductName}`\n );\n\n if (!response.ok) {\n const errorData = await response.json();\n throw new Error(errorData.error || `Failed to fetch API product: ${response.status}`);\n }\n\n return await response.json();\n }, [backendUrl, fetchApi, namespace, apiProductName]);\n\n // check if user has permission to view this api product\n const owner = apiProduct?.metadata?.annotations?.['backstage.io/owner'];\n const ownerUserId = owner?.split('/')[1]; // extract \"owner1\" from \"user:default/owner1\"\n const canView = canReadAll || (currentUserId && ownerUserId === currentUserId);\n\n if (!namespace || !apiProductName) {\n return (\n <InfoCard title=\"API Product Information\">\n <Typography>No APIProduct linked to this API entity</Typography>\n </InfoCard>\n );\n }\n\n if (loading || permLoading) {\n return (\n <InfoCard title=\"API Product Information\">\n <Progress />\n </InfoCard>\n );\n }\n\n // show permission message if user doesn't have permission\n if (apiProduct && !canView) {\n return (\n <InfoCard title=\"API Product Information\">\n <Box p={2}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n You don't have permission to view this API product's details. Only the API owner or users with admin permissions can view this information.\n </Typography>\n </Box>\n </InfoCard>\n );\n }\n\n // also show permission message if we got a permission error from the backend\n if (error && error.message.includes('you can only read your own')) {\n return (\n <InfoCard title=\"API Product Information\">\n <Box p={2}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n You don't have permission to view this API product's details. Only the API owner or users with admin permissions can view this information.\n </Typography>\n </Box>\n </InfoCard>\n );\n }\n\n if (error) {\n return (\n <InfoCard title=\"API Product Information\">\n <ResponseErrorPanel error={error} />\n </InfoCard>\n );\n }\n\n if (!apiProduct) {\n return (\n <InfoCard title=\"API Product Information\">\n <Typography>APIProduct not found</Typography>\n </InfoCard>\n );\n }\n\n const { spec, status } = apiProduct;\n const plans = status?.discoveredPlans || [];\n\n return (\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <InfoCard title=\"API Product Details\">\n <Box p={2}>\n <Typography variant=\"h6\" gutterBottom>\n {spec.displayName || apiProductName}\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\" paragraph>\n {spec.description}\n </Typography>\n <Box display=\"flex\" alignItems=\"center\" flexWrap=\"wrap\" style={{ gap: 8 }}>\n <Typography variant=\"body2\">\n <strong>Version:</strong> {spec.version || 'v1'}\n </Typography>\n {spec.tags && spec.tags.length > 0 && (\n <Box display=\"flex\" ml={2} style={{ gap: 4 }}>\n {spec.tags.map((tag: string) => (\n <Chip key={tag} label={tag} size=\"small\" />\n ))}\n </Box>\n )}\n </Box>\n <Box mt={2}>\n <Typography variant=\"body2\" component=\"div\">\n <strong>Approval Mode:</strong>{' '}\n <Chip\n label={(spec.approvalMode || 'manual') === 'automatic' ? 'Automatic' : 'Manual'}\n size=\"small\"\n color={(spec.approvalMode || 'manual') === 'automatic' ? 'primary' : 'default'}\n style={{ marginLeft: 8 }}\n />\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\" style={{ marginTop: 4, display: 'block' }}>\n {(spec.approvalMode || 'manual') === 'automatic'\n ? 'API keys are created immediately when requested'\n : 'API keys require manual approval before creation'}\n </Typography>\n </Box>\n </Box>\n </InfoCard>\n </Grid>\n\n {plans.length > 0 && (\n <Grid item xs={12}>\n <InfoCard title=\"Available Plans\">\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>Tier</TableCell>\n <TableCell>Rate Limits</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {plans.map((plan: any) => (\n <TableRow key={plan.tier}>\n <TableCell>\n <Chip\n label={plan.tier}\n size=\"small\"\n />\n </TableCell>\n <TableCell>\n {plan.limits && Object.entries(plan.limits).map(([key, value]) => (\n <Typography key={key} variant=\"body2\">\n {String(value)} per {key}\n </Typography>\n ))}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n {spec.targetRef && (\n <Box mt={2}>\n <Typography variant=\"caption\" color=\"textSecondary\">\n HTTPRoute: <strong>{spec.targetRef.name}</strong>\n </Typography>\n </Box>\n )}\n </InfoCard>\n </Grid>\n )}\n\n <Grid item xs={12} md={6}>\n <InfoCard title=\"Contact Information\">\n {spec.contact ? (\n <Box p={2}>\n <Grid container spacing={2}>\n {spec.contact.team && (\n <Grid item xs={12}>\n <Typography variant=\"body2\">\n <strong>Team:</strong> {spec.contact.team}\n </Typography>\n </Grid>\n )}\n {spec.contact.email && (\n <Grid item xs={12}>\n <Typography variant=\"body2\">\n <strong>Email:</strong> <Link to={`mailto:${spec.contact.email}`}>{spec.contact.email}</Link>\n </Typography>\n </Grid>\n )}\n {spec.contact.slack && (\n <Grid item xs={12}>\n <Typography variant=\"body2\">\n <strong>Slack:</strong> {spec.contact.slack}\n </Typography>\n </Grid>\n )}\n </Grid>\n </Box>\n ) : (\n <Box p={2}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n No contact information available\n </Typography>\n </Box>\n )}\n </InfoCard>\n </Grid>\n\n <Grid item xs={12} md={6}>\n <InfoCard title=\"Documentation\">\n {spec.documentation ? (\n <Box p={2}>\n <Grid container spacing={2}>\n {spec.documentation.docsURL && (\n <Grid item xs={12}>\n <Typography variant=\"body2\">\n <strong>Documentation:</strong>{' '}\n <Link to={spec.documentation.docsURL} target=\"_blank\">\n View Docs\n </Link>\n </Typography>\n </Grid>\n )}\n {spec.documentation.openAPISpec && (\n <Grid item xs={12}>\n <Typography variant=\"body2\">\n <strong>OpenAPI Spec:</strong>{' '}\n <Link to={spec.documentation.openAPISpec} target=\"_blank\">\n View Spec\n </Link>\n </Typography>\n </Grid>\n )}\n </Grid>\n </Box>\n ) : (\n <Box p={2}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n No documentation links available\n </Typography>\n </Box>\n )}\n </InfoCard>\n </Grid>\n </Grid>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ApiProductInfoCard.esm.js","sources":["../../../src/components/ApiProductInfoCard/ApiProductInfoCard.tsx"],"sourcesContent":["import React from 'react';\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport { useApi, configApiRef, fetchApiRef, identityApiRef } from '@backstage/core-plugin-api';\nimport { InfoCard, Link, Progress, ResponseErrorPanel, CodeSnippet } from '@backstage/core-components';\nimport { Grid, Chip, Typography, Box, Table, TableBody, TableCell, TableHead, TableRow } from '@material-ui/core';\nimport useAsync from 'react-use/lib/useAsync';\nimport { useKuadrantPermission } from '../../utils/permissions';\nimport { kuadrantApiProductReadAllPermission } from '../../permissions';\n\nexport const ApiProductInfoCard = () => {\n const { entity } = useEntity();\n const config = useApi(configApiRef);\n const fetchApi = useApi(fetchApiRef);\n const identityApi = useApi(identityApiRef);\n const backendUrl = config.getString('backend.baseUrl');\n\n const { allowed: canReadAll, loading: permLoading } = useKuadrantPermission(\n kuadrantApiProductReadAllPermission\n );\n\n const namespace = entity.metadata.annotations?.['kuadrant.io/namespace'];\n const apiProductName = entity.metadata.annotations?.['kuadrant.io/apiproduct'];\n\n const { value: currentUserId } = useAsync(async () => {\n const identity = await identityApi.getBackstageIdentity();\n return identity.userEntityRef.split('/')[1] || 'guest';\n }, [identityApi]);\n\n const { value: apiProduct, loading, error } = useAsync(async () => {\n if (!namespace || !apiProductName) {\n return null;\n }\n\n const response = await fetchApi.fetch(\n `${backendUrl}/api/kuadrant/apiproducts/${namespace}/${apiProductName}`\n );\n\n if (!response.ok) {\n const errorData = await response.json();\n throw new Error(errorData.error || `Failed to fetch API product: ${response.status}`);\n }\n\n return await response.json();\n }, [backendUrl, fetchApi, namespace, apiProductName]);\n\n // check if user has permission to view this api product\n const owner = apiProduct?.metadata?.annotations?.['backstage.io/owner'];\n const ownerUserId = owner?.split('/')[1]; // extract \"owner1\" from \"user:default/owner1\"\n const canView = canReadAll || (currentUserId && ownerUserId === currentUserId);\n\n if (!namespace || !apiProductName) {\n return (\n <InfoCard title=\"API Product Information\">\n <Typography>No APIProduct linked to this API entity</Typography>\n </InfoCard>\n );\n }\n\n if (loading || permLoading) {\n return (\n <InfoCard title=\"API Product Information\">\n <Progress />\n </InfoCard>\n );\n }\n\n // show permission message if user doesn't have permission\n if (apiProduct && !canView) {\n return (\n <InfoCard title=\"API Product Information\">\n <Box p={2}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n You don't have permission to view this API product's details. Only the API owner or users with admin permissions can view this information.\n </Typography>\n </Box>\n </InfoCard>\n );\n }\n\n // also show permission message if we got a permission error from the backend\n if (error && error.message.includes('you can only read your own')) {\n return (\n <InfoCard title=\"API Product Information\">\n <Box p={2}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n You don't have permission to view this API product's details. Only the API owner or users with admin permissions can view this information.\n </Typography>\n </Box>\n </InfoCard>\n );\n }\n\n if (error) {\n return (\n <InfoCard title=\"API Product Information\">\n <ResponseErrorPanel error={error} />\n </InfoCard>\n );\n }\n\n if (!apiProduct) {\n return (\n <InfoCard title=\"API Product Information\">\n <Typography>APIProduct not found</Typography>\n </InfoCard>\n );\n }\n\n const { spec, status } = apiProduct;\n const authSchemes = status?.discoveredAuthScheme?.authentication || {};\n const schemeObjects = Object.values(authSchemes);\n const hasJwt = schemeObjects.some((scheme: any) =>\n scheme.hasOwnProperty(\"jwt\"),\n );\n\n // Extract JWT issuer from the first JWT scheme\n const jwtScheme = schemeObjects.find((scheme: any) => scheme.hasOwnProperty(\"jwt\"));\n const jwtIssuer = (jwtScheme as any)?.jwt?.issuerUrl || \"unknown\";\n const jwtTokenEndpoint = status?.oidcDiscovery?.tokenEndpoint || \"unknown\";\n\n const plans = status?.discoveredPlans || [];\n\n return (\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <InfoCard title=\"API Product Details\">\n <Box p={2}>\n <Typography variant=\"h6\" gutterBottom>\n {spec.displayName || apiProductName}\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\" paragraph>\n {spec.description}\n </Typography>\n <Box display=\"flex\" alignItems=\"center\" flexWrap=\"wrap\" style={{ gap: 8 }}>\n <Typography variant=\"body2\">\n <strong>Version:</strong> {spec.version || 'v1'}\n </Typography>\n {spec.tags && spec.tags.length > 0 && (\n <Box display=\"flex\" ml={2} style={{ gap: 4 }}>\n {spec.tags.map((tag: string) => (\n <Chip key={tag} label={tag} size=\"small\" />\n ))}\n </Box>\n )}\n </Box>\n <Box mt={2}>\n <Typography variant=\"body2\" component=\"div\">\n <strong>Approval Mode:</strong>{' '}\n <Chip\n label={(spec.approvalMode || 'manual') === 'automatic' ? 'Automatic' : 'Manual'}\n size=\"small\"\n color={(spec.approvalMode || 'manual') === 'automatic' ? 'primary' : 'default'}\n style={{ marginLeft: 8 }}\n />\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\" style={{ marginTop: 4, display: 'block' }}>\n {(spec.approvalMode || 'manual') === 'automatic'\n ? 'API keys are created immediately when requested'\n : 'API keys require manual approval before creation'}\n </Typography>\n </Box>\n </Box>\n </InfoCard>\n </Grid>\n\n {plans.length > 0 && (\n <Grid item xs={12}>\n <InfoCard title=\"Available Plans\">\n <Table size=\"small\">\n <TableHead>\n <TableRow>\n <TableCell>Tier</TableCell>\n <TableCell>Rate Limits</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {plans.map((plan: any) => (\n <TableRow key={plan.tier}>\n <TableCell>\n <Chip\n label={plan.tier}\n size=\"small\"\n />\n </TableCell>\n <TableCell>\n {plan.limits && Object.entries(plan.limits).map(([key, value]) => (\n <Typography key={key} variant=\"body2\">\n {String(value)} per {key}\n </Typography>\n ))}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n {spec.targetRef && (\n <Box mt={2}>\n <Typography variant=\"caption\" color=\"textSecondary\">\n HTTPRoute: <strong>{spec.targetRef.name}</strong>\n </Typography>\n </Box>\n )}\n </InfoCard>\n </Grid>\n )}\n\n <Grid item xs={12} md={6}>\n <InfoCard title=\"Contact Information\">\n {spec.contact ? (\n <Box p={2}>\n <Grid container spacing={2}>\n {spec.contact.team && (\n <Grid item xs={12}>\n <Typography variant=\"body2\">\n <strong>Team:</strong> {spec.contact.team}\n </Typography>\n </Grid>\n )}\n {spec.contact.email && (\n <Grid item xs={12}>\n <Typography variant=\"body2\">\n <strong>Email:</strong> <Link to={`mailto:${spec.contact.email}`}>{spec.contact.email}</Link>\n </Typography>\n </Grid>\n )}\n {spec.contact.slack && (\n <Grid item xs={12}>\n <Typography variant=\"body2\">\n <strong>Slack:</strong> {spec.contact.slack}\n </Typography>\n </Grid>\n )}\n </Grid>\n </Box>\n ) : (\n <Box p={2}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n No contact information available\n </Typography>\n </Box>\n )}\n </InfoCard>\n </Grid>\n\n <Grid item xs={12} md={6}>\n <InfoCard title=\"Documentation\">\n {spec.documentation ? (\n <Box p={2}>\n <Grid container spacing={2}>\n {spec.documentation.docsURL && (\n <Grid item xs={12}>\n <Typography variant=\"body2\">\n <strong>Documentation:</strong>{' '}\n <Link to={spec.documentation.docsURL} target=\"_blank\">\n View Docs\n </Link>\n </Typography>\n </Grid>\n )}\n {spec.documentation.openAPISpec && (\n <Grid item xs={12}>\n <Typography variant=\"body2\">\n <strong>OpenAPI Spec:</strong>{' '}\n <Link to={spec.documentation.openAPISpec} target=\"_blank\">\n View Spec\n </Link>\n </Typography>\n </Grid>\n )}\n </Grid>\n </Box>\n ) : (\n <Box p={2}>\n <Typography variant=\"body2\" color=\"textSecondary\">\n No documentation links available\n </Typography>\n </Box>\n )}\n </InfoCard>\n </Grid>\n {hasJwt && (\n <Grid item xs={12} md={6}>\n <InfoCard title=\"OIDC Provider Discovery\">\n <Box p={2}>\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <Typography variant=\"body2\">\n This API uses OIDC authentication. Obtain a token from the identity provider below.\n </Typography>\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"body2\">\n <strong>Identity Provider: </strong>\n <Link to={jwtIssuer} target=\"_blank\">\n {jwtIssuer}\n </Link>\n </Typography>\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"body2\">\n <strong>Token Endpoint: </strong>\n <Link to={jwtTokenEndpoint} target=\"_blank\">\n {jwtTokenEndpoint}\n </Link>\n </Typography>\n </Grid>\n <Grid item xs={12}>\n <CodeSnippet\n text={`# Example (Client Credentials):\ncurl -X POST \\\\\n -d \"grant_type=client_credentials\" \\\\\n -d \"client_id=YOUR_CLIENT_ID\" \\\\\n -d \"client_secret=YOUR_CLIENT_SECRET\" \\\\\n ${jwtTokenEndpoint}\n`} // notsecret - template for user's own api key\n language=\"bash\"\n showCopyCodeButton\n />\n </Grid>\n </Grid>\n </Box>\n </InfoCard>\n </Grid>\n )}\n </Grid>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import React from 'react';
2
+ import { useEntity } from '@backstage/plugin-catalog-react';
3
+ import { useApi, configApiRef, fetchApiRef } from '@backstage/core-plugin-api';
4
+ import { Link } from '@backstage/core-components';
5
+ import { Box, Typography } from '@material-ui/core';
6
+ import { Alert } from '@material-ui/lab';
7
+ import useAsync from 'react-use/lib/useAsync';
8
+
9
+ const ApiProductOpenApiAlert = () => {
10
+ const { entity } = useEntity();
11
+ const config = useApi(configApiRef);
12
+ const fetchApi = useApi(fetchApiRef);
13
+ const backendUrl = config.getString("backend.baseUrl");
14
+ const namespace = entity.metadata.annotations?.["kuadrant.io/namespace"];
15
+ const apiProductName = entity.metadata.annotations?.["kuadrant.io/apiproduct"];
16
+ const { value: apiProduct, loading, error } = useAsync(async () => {
17
+ if (!namespace || !apiProductName) {
18
+ return null;
19
+ }
20
+ const response = await fetchApi.fetch(
21
+ `${backendUrl}/api/kuadrant/apiproducts/${namespace}/${apiProductName}`
22
+ );
23
+ if (!response.ok) {
24
+ return null;
25
+ }
26
+ return await response.json();
27
+ }, [backendUrl, fetchApi, namespace, apiProductName]);
28
+ if (!namespace || !apiProductName || loading || error || !apiProduct) {
29
+ return null;
30
+ }
31
+ const { spec, status } = apiProduct;
32
+ const openAPICondition = status?.conditions?.find(
33
+ (c) => c.type === "OpenAPISpecReady" && c.status === "False"
34
+ );
35
+ if (!openAPICondition) {
36
+ return null;
37
+ }
38
+ return /* @__PURE__ */ React.createElement(Box, { mb: 2 }, /* @__PURE__ */ React.createElement(Alert, { severity: "warning" }, /* @__PURE__ */ React.createElement(Typography, { variant: "body2", gutterBottom: true }, /* @__PURE__ */ React.createElement("strong", null, "OpenAPI Spec Issue")), /* @__PURE__ */ React.createElement(Typography, { variant: "body2", gutterBottom: true }, openAPICondition.message), spec.documentation?.openAPISpecURL && /* @__PURE__ */ React.createElement(Typography, { variant: "body2" }, "Spec URL:", " ", /* @__PURE__ */ React.createElement(Link, { to: spec.documentation.openAPISpecURL, target: "_blank" }, spec.documentation.openAPISpecURL))));
39
+ };
40
+
41
+ export { ApiProductOpenApiAlert };
42
+ //# sourceMappingURL=ApiProductOpenApiAlert.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApiProductOpenApiAlert.esm.js","sources":["../../../src/components/ApiProductOpenApiAlert/ApiProductOpenApiAlert.tsx"],"sourcesContent":["import React from \"react\";\nimport { useEntity } from \"@backstage/plugin-catalog-react\";\nimport { useApi, configApiRef, fetchApiRef } from \"@backstage/core-plugin-api\";\nimport { Link } from \"@backstage/core-components\";\nimport { Box, Typography } from \"@material-ui/core\";\nimport { Alert } from \"@material-ui/lab\";\nimport useAsync from \"react-use/lib/useAsync\";\n\n// Displays alerts for OpenAPI spec issues.\nexport const ApiProductOpenApiAlert = () => {\n const { entity } = useEntity();\n const config = useApi(configApiRef);\n const fetchApi = useApi(fetchApiRef);\n const backendUrl = config.getString(\"backend.baseUrl\");\n\n // Get APIProduct reference from entity annotations\n const namespace = entity.metadata.annotations?.[\"kuadrant.io/namespace\"];\n const apiProductName =\n entity.metadata.annotations?.[\"kuadrant.io/apiproduct\"];\n\n // Fetch the full APIProduct resource to check status conditions\n const {value: apiProduct,loading,error,} = useAsync(async () => {\n if (!namespace || !apiProductName) {\n return null;\n }\n\n const response = await fetchApi.fetch(\n `${backendUrl}/api/kuadrant/apiproducts/${namespace}/${apiProductName}`,\n );\n\n if (!response.ok) {\n return null;\n }\n\n return await response.json();\n }, [backendUrl, fetchApi, namespace, apiProductName]);\n\n // Don't render anything if data is missing or still loading\n if (!namespace || !apiProductName || loading || error || !apiProduct) {\n return null;\n }\n\n const { spec, status } = apiProduct;\n\n const openAPICondition = status?.conditions?.find(\n (c: any) => c.type === \"OpenAPISpecReady\" && c.status === \"False\",\n );\n\n if (!openAPICondition) {\n return null;\n }\n\n return (\n <Box mb={2}>\n <Alert severity=\"warning\">\n <Typography variant=\"body2\" gutterBottom>\n <strong>OpenAPI Spec Issue</strong>\n </Typography>\n <Typography variant=\"body2\" gutterBottom>\n {openAPICondition.message}\n </Typography>\n {spec.documentation?.openAPISpecURL && (\n <Typography variant=\"body2\">\n Spec URL:{\" \"}\n <Link to={spec.documentation.openAPISpecURL} target=\"_blank\">\n {spec.documentation.openAPISpecURL}\n </Link>\n </Typography>\n )}\n </Alert>\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AASO,MAAM,yBAAyB,MAAM;AAC1C,EAAM,MAAA,EAAE,MAAO,EAAA,GAAI,SAAU,EAAA;AAC7B,EAAM,MAAA,MAAA,GAAS,OAAO,YAAY,CAAA;AAClC,EAAM,MAAA,QAAA,GAAW,OAAO,WAAW,CAAA;AACnC,EAAM,MAAA,UAAA,GAAa,MAAO,CAAA,SAAA,CAAU,iBAAiB,CAAA;AAGrD,EAAA,MAAM,SAAY,GAAA,MAAA,CAAO,QAAS,CAAA,WAAA,GAAc,uBAAuB,CAAA;AACvE,EAAA,MAAM,cACJ,GAAA,MAAA,CAAO,QAAS,CAAA,WAAA,GAAc,wBAAwB,CAAA;AAGtD,EAAA,MAAM,EAAC,KAAO,EAAA,UAAA,EAAW,SAAQ,KAAM,EAAA,GAAI,SAAS,YAAY;AAChE,IAAI,IAAA,CAAC,SAAa,IAAA,CAAC,cAAgB,EAAA;AACjC,MAAO,OAAA,IAAA;AAAA;AAGT,IAAM,MAAA,QAAA,GAAW,MAAM,QAAS,CAAA,KAAA;AAAA,MAC9B,CAAG,EAAA,UAAU,CAA6B,0BAAA,EAAA,SAAS,IAAI,cAAc,CAAA;AAAA,KACvE;AAEA,IAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,MAAO,OAAA,IAAA;AAAA;AAGT,IAAO,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA,KAC1B,CAAC,UAAA,EAAY,QAAU,EAAA,SAAA,EAAW,cAAc,CAAC,CAAA;AAGpD,EAAA,IAAI,CAAC,SAAa,IAAA,CAAC,kBAAkB,OAAW,IAAA,KAAA,IAAS,CAAC,UAAY,EAAA;AACpE,IAAO,OAAA,IAAA;AAAA;AAGT,EAAM,MAAA,EAAE,IAAM,EAAA,MAAA,EAAW,GAAA,UAAA;AAEzB,EAAM,MAAA,gBAAA,GAAmB,QAAQ,UAAY,EAAA,IAAA;AAAA,IAC3C,CAAC,CAAW,KAAA,CAAA,CAAE,IAAS,KAAA,kBAAA,IAAsB,EAAE,MAAW,KAAA;AAAA,GAC5D;AAEA,EAAA,IAAI,CAAC,gBAAkB,EAAA;AACrB,IAAO,OAAA,IAAA;AAAA;AAGT,EACE,uBAAA,KAAA,CAAA,aAAA,CAAC,OAAI,EAAI,EAAA,CAAA,EAAA,sCACN,KAAM,EAAA,EAAA,QAAA,EAAS,SACd,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,SAAQ,YAAY,EAAA,IAAA,EAAA,kBACrC,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,IAAA,EAAO,oBAAkB,CAC5B,mBACC,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAW,OAAQ,EAAA,OAAA,EAAQ,YAAY,EAAA,IAAA,EAAA,EACrC,iBAAiB,OACpB,CAAA,EACC,KAAK,aAAe,EAAA,cAAA,wCAClB,UAAW,EAAA,EAAA,OAAA,EAAQ,OAAQ,EAAA,EAAA,WAAA,EAChB,GACV,kBAAA,KAAA,CAAA,aAAA,CAAC,QAAK,EAAI,EAAA,IAAA,CAAK,aAAc,CAAA,cAAA,EAAgB,MAAO,EAAA,QAAA,EAAA,EACjD,KAAK,aAAc,CAAA,cACtB,CACF,CAEJ,CACF,CAAA;AAEJ;;;;"}
@@ -0,0 +1,2 @@
1
+ export { ApiProductOpenApiAlert } from './ApiProductOpenApiAlert.esm.js';
2
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
package/dist/index.d.ts CHANGED
@@ -28,6 +28,7 @@ declare const EntityKuadrantApiProductInfoContent: () => react.JSX.Element;
28
28
  declare const PlanPolicyDetailPage: () => react.JSX.Element;
29
29
  declare const ApiKeyDetailPage: () => react.JSX.Element;
30
30
  declare const EntityKuadrantApiApprovalTab: () => react.JSX.Element;
31
+ declare const EntityKuadrantApiProductOpenApiAlert: () => react.JSX.Element | null;
31
32
 
32
33
  declare const ApiProductInfoCard: () => react__default.JSX.Element;
33
34
 
@@ -147,4 +148,4 @@ declare const kuadrantApiKeyDeleteAllPermission: _backstage_plugin_permission_co
147
148
  declare const kuadrantApiKeyApprovePermission: _backstage_plugin_permission_common.BasicPermission;
148
149
  declare const kuadrantPermissions: (_backstage_plugin_permission_common.BasicPermission | _backstage_plugin_permission_common.ResourcePermission<"apiproduct">)[];
149
150
 
150
- export { ApiAccessCard, ApiKeyDetailPage, ApiKeyManagementTab, ApiKeysPage, ApiProductInfoCard, ApiProductsPage, ApprovalQueueCard, EntityKuadrantApiAccessCard, EntityKuadrantApiApprovalTab, EntityKuadrantApiKeyManagementTab, EntityKuadrantApiKeysContent, EntityKuadrantApiProductInfoContent, KuadrantApprovalQueueCard, KuadrantPage, PlanPolicyDetailPage, kuadrantApiKeyApprovePermission, kuadrantApiKeyCreatePermission, kuadrantApiKeyDeleteAllPermission, kuadrantApiKeyDeleteOwnPermission, kuadrantApiKeyReadAllPermission, kuadrantApiKeyReadOwnPermission, kuadrantApiKeyUpdateAllPermission, kuadrantApiKeyUpdateOwnPermission, kuadrantApiProductCreatePermission, kuadrantApiProductDeleteAllPermission, kuadrantApiProductDeleteOwnPermission, kuadrantApiProductListPermission, kuadrantApiProductReadAllPermission, kuadrantApiProductReadOwnPermission, kuadrantApiProductUpdateAllPermission, kuadrantApiProductUpdateOwnPermission, kuadrantPermissions, kuadrantPlanPolicyCreatePermission, kuadrantPlanPolicyDeletePermission, kuadrantPlanPolicyListPermission, kuadrantPlanPolicyReadPermission, kuadrantPlanPolicyUpdatePermission, kuadrantPlugin };
151
+ export { ApiAccessCard, ApiKeyDetailPage, ApiKeyManagementTab, ApiKeysPage, ApiProductInfoCard, ApiProductsPage, ApprovalQueueCard, EntityKuadrantApiAccessCard, EntityKuadrantApiApprovalTab, EntityKuadrantApiKeyManagementTab, EntityKuadrantApiKeysContent, EntityKuadrantApiProductInfoContent, EntityKuadrantApiProductOpenApiAlert, KuadrantApprovalQueueCard, KuadrantPage, PlanPolicyDetailPage, kuadrantApiKeyApprovePermission, kuadrantApiKeyCreatePermission, kuadrantApiKeyDeleteAllPermission, kuadrantApiKeyDeleteOwnPermission, kuadrantApiKeyReadAllPermission, kuadrantApiKeyReadOwnPermission, kuadrantApiKeyUpdateAllPermission, kuadrantApiKeyUpdateOwnPermission, kuadrantApiProductCreatePermission, kuadrantApiProductDeleteAllPermission, kuadrantApiProductDeleteOwnPermission, kuadrantApiProductListPermission, kuadrantApiProductReadAllPermission, kuadrantApiProductReadOwnPermission, kuadrantApiProductUpdateAllPermission, kuadrantApiProductUpdateOwnPermission, kuadrantPermissions, kuadrantPlanPolicyCreatePermission, kuadrantPlanPolicyDeletePermission, kuadrantPlanPolicyListPermission, kuadrantPlanPolicyReadPermission, kuadrantPlanPolicyUpdatePermission, kuadrantPlugin };
package/dist/index.esm.js CHANGED
@@ -1,4 +1,4 @@
1
- export { ApiKeyDetailPage, ApiKeysPage, ApiProductsPage, EntityKuadrantApiAccessCard, EntityKuadrantApiApprovalTab, EntityKuadrantApiKeyManagementTab, EntityKuadrantApiKeysContent, EntityKuadrantApiProductInfoContent, KuadrantApprovalQueueCard, KuadrantPage, PlanPolicyDetailPage, kuadrantPlugin } from './plugin.esm.js';
1
+ export { ApiKeyDetailPage, ApiKeysPage, ApiProductsPage, EntityKuadrantApiAccessCard, EntityKuadrantApiApprovalTab, EntityKuadrantApiKeyManagementTab, EntityKuadrantApiKeysContent, EntityKuadrantApiProductInfoContent, EntityKuadrantApiProductOpenApiAlert, KuadrantApprovalQueueCard, KuadrantPage, PlanPolicyDetailPage, kuadrantPlugin } from './plugin.esm.js';
2
2
  export { ApiAccessCard } from './components/ApiAccessCard/ApiAccessCard.esm.js';
3
3
  export { ApiKeyManagementTab } from './components/ApiKeyManagementTab/ApiKeyManagementTab.esm.js';
4
4
  export { ApiProductInfoCard } from './components/ApiProductInfoCard/ApiProductInfoCard.esm.js';
@@ -92,6 +92,14 @@ const EntityKuadrantApiApprovalTab = kuadrantPlugin.provide(
92
92
  }
93
93
  })
94
94
  );
95
+ const EntityKuadrantApiProductOpenApiAlert = kuadrantPlugin.provide(
96
+ createComponentExtension({
97
+ name: "EntityKuadrantApiProductOpenApiAlert",
98
+ component: {
99
+ lazy: () => import('./components/ApiProductOpenApiAlert/index.esm.js').then((m) => m.ApiProductOpenApiAlert)
100
+ }
101
+ })
102
+ );
95
103
 
96
- export { ApiKeyDetailPage, ApiKeysPage, ApiProductsPage, EntityKuadrantApiAccessCard, EntityKuadrantApiApprovalTab, EntityKuadrantApiKeyManagementTab, EntityKuadrantApiKeysContent, EntityKuadrantApiProductInfoContent, KuadrantApprovalQueueCard, KuadrantPage, PlanPolicyDetailPage, kuadrantPlugin };
104
+ export { ApiKeyDetailPage, ApiKeysPage, ApiProductsPage, EntityKuadrantApiAccessCard, EntityKuadrantApiApprovalTab, EntityKuadrantApiKeyManagementTab, EntityKuadrantApiKeysContent, EntityKuadrantApiProductInfoContent, EntityKuadrantApiProductOpenApiAlert, KuadrantApprovalQueueCard, KuadrantPage, PlanPolicyDetailPage, kuadrantPlugin };
97
105
  //# sourceMappingURL=plugin.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.esm.js","sources":["../src/plugin.ts"],"sourcesContent":["import {\n createPlugin,\n createRoutableExtension,\n createComponentExtension,\n} from '@backstage/core-plugin-api';\n\nimport { rootRouteRef, resourceRouteRef } from './routes';\n\nexport const kuadrantPlugin = createPlugin({\n id: 'kuadrant',\n routes: {\n root: rootRouteRef,\n resource: resourceRouteRef,\n },\n});\n\nexport const KuadrantPage = kuadrantPlugin.provide(\n createRoutableExtension({\n name: 'KuadrantPage',\n component: () =>\n import('./components/KuadrantPage').then(m => m.KuadrantPage),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const ApiProductsPage = kuadrantPlugin.provide(\n createRoutableExtension({\n name: 'ApiProductsPage',\n component: () =>\n import('./components/KuadrantPage').then(m => m.ApiProductsPage),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const ApiKeysPage = kuadrantPlugin.provide(\n createRoutableExtension({\n name: 'ApiKeysPage',\n component: () =>\n import('./components/ApiKeysPage').then(m => m.ApiKeysPage),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const EntityKuadrantApiAccessCard = kuadrantPlugin.provide(\n createComponentExtension({\n name: 'EntityKuadrantApiAccessCard',\n component: {\n lazy: () =>\n import('./components/ApiAccessCard').then(m => m.ApiAccessCard),\n },\n }),\n);\n\nexport const EntityKuadrantApiKeyManagementTab = kuadrantPlugin.provide(\n createComponentExtension({\n name: 'EntityKuadrantApiKeyManagementTab',\n component: {\n lazy: () =>\n import('./components/ApiKeyManagementTab').then(m => m.ApiKeyManagementTab),\n },\n }),\n);\n\n// entity content extension for api keys tab\nexport const EntityKuadrantApiKeysContent = kuadrantPlugin.provide(\n createComponentExtension({\n name: 'EntityKuadrantApiKeysContent',\n component: {\n lazy: () =>\n import('./components/ApiKeyManagementTab').then(m => m.ApiKeyManagementTab),\n },\n }),\n);\n\nexport const KuadrantApprovalQueueCard = kuadrantPlugin.provide(\n createComponentExtension({\n name: 'KuadrantApprovalQueueCard',\n component: {\n lazy: () =>\n import('./components/ApprovalQueueCard').then(m => m.ApprovalQueueCard),\n },\n }),\n);\n\nexport const EntityKuadrantApiProductInfoContent = kuadrantPlugin.provide(\n createComponentExtension({\n name: 'EntityKuadrantApiProductInfoContent',\n component: {\n lazy: () =>\n import('./components/ApiProductInfoCard').then(m => m.ApiProductInfoCard),\n },\n }),\n);\n\nexport const PlanPolicyDetailPage = kuadrantPlugin.provide(\n createComponentExtension({\n name: 'PlanPolicyDetailPage',\n component: {\n lazy: () =>\n import('./components/PlanPolicyDetailPage').then(m => m.PlanPolicyDetailPage),\n },\n }),\n);\n\nexport const ApiKeyDetailPage = kuadrantPlugin.provide(\n createRoutableExtension({\n name: 'ApiKeyDetailPage',\n component: () =>\n import('./components/ApiKeyDetailPage').then(m => m.ApiKeyDetailPage),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const EntityKuadrantApiApprovalTab = kuadrantPlugin.provide(\n createComponentExtension({\n name: 'EntityKuadrantApiApprovalTab',\n component: {\n lazy: () =>\n import('./components/EntityApiApprovalTab').then(m => m.EntityApiApprovalTab),\n },\n }),\n);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.esm.js","sources":["../src/plugin.ts"],"sourcesContent":["import {\n createPlugin,\n createRoutableExtension,\n createComponentExtension,\n} from '@backstage/core-plugin-api';\n\nimport { rootRouteRef, resourceRouteRef } from './routes';\n\nexport const kuadrantPlugin = createPlugin({\n id: 'kuadrant',\n routes: {\n root: rootRouteRef,\n resource: resourceRouteRef,\n },\n});\n\nexport const KuadrantPage = kuadrantPlugin.provide(\n createRoutableExtension({\n name: 'KuadrantPage',\n component: () =>\n import('./components/KuadrantPage').then(m => m.KuadrantPage),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const ApiProductsPage = kuadrantPlugin.provide(\n createRoutableExtension({\n name: 'ApiProductsPage',\n component: () =>\n import('./components/KuadrantPage').then(m => m.ApiProductsPage),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const ApiKeysPage = kuadrantPlugin.provide(\n createRoutableExtension({\n name: 'ApiKeysPage',\n component: () =>\n import('./components/ApiKeysPage').then(m => m.ApiKeysPage),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const EntityKuadrantApiAccessCard = kuadrantPlugin.provide(\n createComponentExtension({\n name: 'EntityKuadrantApiAccessCard',\n component: {\n lazy: () =>\n import('./components/ApiAccessCard').then(m => m.ApiAccessCard),\n },\n }),\n);\n\nexport const EntityKuadrantApiKeyManagementTab = kuadrantPlugin.provide(\n createComponentExtension({\n name: 'EntityKuadrantApiKeyManagementTab',\n component: {\n lazy: () =>\n import('./components/ApiKeyManagementTab').then(m => m.ApiKeyManagementTab),\n },\n }),\n);\n\n// entity content extension for api keys tab\nexport const EntityKuadrantApiKeysContent = kuadrantPlugin.provide(\n createComponentExtension({\n name: 'EntityKuadrantApiKeysContent',\n component: {\n lazy: () =>\n import('./components/ApiKeyManagementTab').then(m => m.ApiKeyManagementTab),\n },\n }),\n);\n\nexport const KuadrantApprovalQueueCard = kuadrantPlugin.provide(\n createComponentExtension({\n name: 'KuadrantApprovalQueueCard',\n component: {\n lazy: () =>\n import('./components/ApprovalQueueCard').then(m => m.ApprovalQueueCard),\n },\n }),\n);\n\nexport const EntityKuadrantApiProductInfoContent = kuadrantPlugin.provide(\n createComponentExtension({\n name: 'EntityKuadrantApiProductInfoContent',\n component: {\n lazy: () =>\n import('./components/ApiProductInfoCard').then(m => m.ApiProductInfoCard),\n },\n }),\n);\n\nexport const PlanPolicyDetailPage = kuadrantPlugin.provide(\n createComponentExtension({\n name: 'PlanPolicyDetailPage',\n component: {\n lazy: () =>\n import('./components/PlanPolicyDetailPage').then(m => m.PlanPolicyDetailPage),\n },\n }),\n);\n\nexport const ApiKeyDetailPage = kuadrantPlugin.provide(\n createRoutableExtension({\n name: 'ApiKeyDetailPage',\n component: () =>\n import('./components/ApiKeyDetailPage').then(m => m.ApiKeyDetailPage),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const EntityKuadrantApiApprovalTab = kuadrantPlugin.provide(\n createComponentExtension({\n name: 'EntityKuadrantApiApprovalTab',\n component: {\n lazy: () =>\n import('./components/EntityApiApprovalTab').then(m => m.EntityApiApprovalTab),\n },\n }),\n);\n\nexport const EntityKuadrantApiProductOpenApiAlert = kuadrantPlugin.provide(\n createComponentExtension({\n name: 'EntityKuadrantApiProductOpenApiAlert',\n component: {\n lazy: () =>\n import('./components/ApiProductOpenApiAlert').then(m => m.ApiProductOpenApiAlert),\n },\n }),\n);\n"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- __load_plugin_entry__("internal.plugin-kuadrant",(()=>{"use strict";var h,e,g,a,t,i,l,r,n,s,_,c,u,o,f,y,d,x,b,p,m,v={76741:(h,e,g)=>{var a={PluginRoot:()=>g.e(879).then(()=>()=>g(72627)),KuadrantPage:()=>g.e(879).then(()=>()=>g(72627)),EntityKuadrantApiAccessCard:()=>g.e(879).then(()=>()=>g(72627)),EntityKuadrantApiKeyManagementTab:()=>g.e(879).then(()=>()=>g(72627)),EntityKuadrantApiKeysContent:()=>g.e(879).then(()=>()=>g(72627)),EntityKuadrantApiProductInfoContent:()=>g.e(879).then(()=>()=>g(72627)),KuadrantApprovalQueueCard:()=>g.e(879).then(()=>()=>g(72627))},t=(h,e)=>(g.R=e,e=g.o(a,h)?a[h]():Promise.resolve().then(()=>{throw new Error('Module "'+h+'" does not exist in container.')}),g.R=void 0,e),i=(h,e)=>{if(g.S){var a="default",t=g.S[a];if(t&&t!==h)throw new Error("Container initialization failed as it has already been initialized with a different share scope");return g.S[a]=h,g.I(a,e)}};g.d(e,{get:()=>t,init:()=>i})}},k={};function w(h){var e=k[h];if(void 0!==e)return e.exports;var g=k[h]={id:h,loaded:!1,exports:{}};return v[h].call(g.exports,g,g.exports,w),g.loaded=!0,g.exports}return w.m=v,w.c=k,w.n=h=>{var e=h&&h.__esModule?()=>h.default:()=>h;return w.d(e,{a:e}),e},e=Object.getPrototypeOf?h=>Object.getPrototypeOf(h):h=>h.__proto__,w.t=function(g,a){if(1&a&&(g=this(g)),8&a)return g;if("object"==typeof g&&g){if(4&a&&g.__esModule)return g;if(16&a&&"function"==typeof g.then)return g}var t=Object.create(null);w.r(t);var i={};h=h||[null,e({}),e([]),e(e)];for(var l=2&a&&g;("object"==typeof l||"function"==typeof l)&&!~h.indexOf(l);l=e(l))Object.getOwnPropertyNames(l).forEach(h=>i[h]=()=>g[h]);return i.default=()=>g,w.d(t,i),t},w.d=(h,e)=>{for(var g in e)w.o(e,g)&&!w.o(h,g)&&Object.defineProperty(h,g,{enumerable:!0,get:e[g]})},w.f={},w.e=h=>Promise.all(Object.keys(w.f).reduce((e,g)=>(w.f[g](h,e),e),[])),w.u=h=>"static/"+({51:"react-syntax-highlighter_languages_highlight_prolog",200:"react-syntax-highlighter_languages_highlight_mel",206:"react-syntax-highlighter_languages_highlight_gml",371:"react-syntax-highlighter_languages_highlight_excel",456:"react-syntax-highlighter_languages_highlight_roboconf",460:"react-syntax-highlighter_languages_highlight_avrasm",464:"react-syntax-highlighter_languages_highlight_shell",557:"react-syntax-highlighter_languages_highlight_oneC",579:"react-syntax-highlighter_languages_highlight_vbnet",634:"react-syntax-highlighter_languages_highlight_scilab",879:"exposed-PluginRoot",927:"react-syntax-highlighter_languages_highlight_javascript",946:"react-syntax-highlighter_languages_highlight_clojure",985:"react-syntax-highlighter_languages_highlight_monkey",1062:"react-syntax-highlighter_languages_highlight_nim",1084:"react-syntax-highlighter_languages_highlight_aspectj",1099:"react-syntax-highlighter_languages_highlight_ebnf",1173:"react-syntax-highlighter_languages_highlight_autohotkey",1177:"react-syntax-highlighter_languages_highlight_profile",1214:"react-syntax-highlighter_languages_highlight_properties",1276:"react-syntax-highlighter_languages_highlight_phpTemplate",1325:"react-syntax-highlighter_languages_highlight_actionscript",1352:"react-syntax-highlighter_languages_highlight_fortran",1362:"react-syntax-highlighter_languages_highlight_mathematica",1418:"react-syntax-highlighter_languages_highlight_pony",1441:"react-syntax-highlighter_languages_highlight_coq",1461:"react-syntax-highlighter_languages_highlight_livescript",1489:"react-syntax-highlighter_languages_highlight_reasonml",1496:"react-syntax-highlighter_languages_highlight_lua",1522:"react-syntax-highlighter_languages_highlight_dust",1679:"react-syntax-highlighter_languages_highlight_scheme",1694:"react-syntax-highlighter_languages_highlight_accesslog",1727:"react-syntax-highlighter_languages_highlight_oxygene",1750:"react-syntax-highlighter_languages_highlight_makefile",1828:"react-syntax-highlighter_languages_highlight_dockerfile",1895:"react-syntax-highlighter_languages_highlight_pythonRepl",1956:"react-syntax-highlighter_languages_highlight_puppet",1961:"react-syntax-highlighter_languages_highlight_stan",1972:"react-syntax-highlighter_languages_highlight_fsharp",2007:"react-syntax-highlighter_languages_highlight_css",2064:"react-syntax-highlighter_languages_highlight_vhdl",2108:"react-syntax-highlighter_languages_highlight_cLike",2180:"react-syntax-highlighter_languages_highlight_sqf",2234:"react-syntax-highlighter_languages_highlight_lisp",2267:"react-syntax-highlighter_languages_highlight_maxima",2346:"react-syntax-highlighter_languages_highlight_d",2362:"react-syntax-highlighter_languages_highlight_xquery",2378:"react-syntax-highlighter_languages_highlight_parser3",2383:"react-syntax-highlighter_languages_highlight_crmsh",2438:"react-syntax-highlighter_languages_highlight_haxe",2488:"react-syntax-highlighter_languages_highlight_verilog",2496:"react-syntax-highlighter_languages_highlight_erlangRepl",2512:"react-syntax-highlighter_languages_highlight_stylus",2516:"react-syntax-highlighter_languages_highlight_apache",2665:"react-syntax-highlighter_languages_highlight_powershell",2693:"react-syntax-highlighter_languages_highlight_tap",2727:"react-syntax-highlighter_languages_highlight_q",2743:"react-syntax-highlighter_languages_highlight_asciidoc",2762:"react-syntax-highlighter_languages_highlight_haskell",2795:"react-syntax-highlighter_languages_highlight_dns",2871:"react-syntax-highlighter_languages_highlight_typescript",2882:"react-syntax-highlighter_languages_highlight_sml",2979:"react-syntax-highlighter_languages_highlight_plaintext",2981:"react-syntax-highlighter_languages_highlight_ruleslanguage",2983:"react-syntax-highlighter_languages_highlight_golo",3146:"react-syntax-highlighter_languages_highlight_purebasic",3193:"react-syntax-highlighter_languages_highlight_xml",3299:"react-syntax-highlighter_languages_highlight_fix",3357:"react-syntax-highlighter_languages_highlight_x86asm",3384:"react-syntax-highlighter_languages_highlight_ini",3418:"react-syntax-highlighter_languages_highlight_ruby",3419:"react-syntax-highlighter_languages_highlight_nix",3487:"react-syntax-highlighter_languages_highlight_mipsasm",3500:"react-syntax-highlighter_languages_highlight_autoit",3540:"react-syntax-highlighter_languages_highlight_moonscript",3562:"react-syntax-highlighter_languages_highlight_gams",3580:"react-syntax-highlighter_languages_highlight_csp",3607:"react-syntax-highlighter_languages_highlight_abnf",3623:"react-syntax-highlighter_languages_highlight_yaml",3722:"react-syntax-highlighter_languages_highlight_latex",3736:"react-syntax-highlighter_languages_highlight_json",3811:"react-syntax-highlighter_languages_highlight_erb",3885:"react-syntax-highlighter_languages_highlight_stata",3923:"react-syntax-highlighter_languages_highlight_applescript",3988:"react-syntax-highlighter_languages_highlight_vala",4014:"react-syntax-highlighter_languages_highlight_scss",4075:"react-syntax-highlighter_languages_highlight_hsp",4110:"react-syntax-highlighter_languages_highlight_tp",4135:"react-syntax-highlighter_languages_highlight_mizar",4282:"react-syntax-highlighter_languages_highlight_livecodeserver",4300:"react-syntax-highlighter_languages_highlight_r",4342:"react-syntax-highlighter_languages_highlight_php",4383:"react-syntax-highlighter_languages_highlight_dsconfig",4436:"react-syntax-highlighter_languages_highlight_zephir",4446:"react-syntax-highlighter_languages_highlight_leaf",4493:"react-syntax-highlighter_languages_highlight_gauss",4575:"react-syntax-highlighter_languages_highlight_processing",4635:"react-syntax-highlighter_languages_highlight_jbossCli",4733:"react-syntax-highlighter_languages_highlight_llvm",4835:"react-syntax-highlighter_languages_highlight_cos",4931:"react-syntax-highlighter_languages_highlight_step21",4956:"react-syntax-highlighter_languages_highlight_angelscript",4971:"react-syntax-highlighter_languages_highlight_lsl",5034:"react-syntax-highlighter_languages_highlight_ada",5051:"react-syntax-highlighter_languages_highlight_coffeescript",5099:"react-syntax-highlighter_languages_highlight_nsis",5123:"react-syntax-highlighter_languages_highlight_erlang",5189:"react-syntax-highlighter_languages_highlight_dts",5251:"react-syntax-highlighter_languages_highlight_pgsql",5253:"react-syntax-highlighter_languages_highlight_clojureRepl",5286:"react-syntax-highlighter_languages_highlight_nginx",5446:"react-syntax-highlighter_languages_highlight_ocaml",5565:"react-syntax-highlighter_languages_highlight_kotlin",5613:"react-syntax-highlighter_languages_highlight_rib",5664:"react-syntax-highlighter_languages_highlight_dos",5773:"react-syntax-highlighter_languages_highlight_mojolicious",5813:"react-syntax-highlighter_languages_highlight_less",5819:"react-syntax-highlighter_languages_highlight_gradle",5868:"react-syntax-highlighter_languages_highlight_inform7",5900:"react-syntax-highlighter_languages_highlight_lasso",6057:"react-syntax-highlighter_languages_highlight_sqlMore",6152:"react-syntax-highlighter_languages_highlight_vbscriptHtml",6161:"react-syntax-highlighter_languages_highlight_clean",6177:"react-syntax-highlighter_languages_highlight_taggerscript",6195:"react-syntax-highlighter_languages_highlight_ldif",6228:"react-syntax-highlighter_languages_highlight_rust",6267:"react-syntax-highlighter_languages_highlight_swift",6354:"react-syntax-highlighter_languages_highlight_java",6501:"react-syntax-highlighter_languages_highlight_armasm",6512:"react-syntax-highlighter_languages_highlight_scala",6542:"react-syntax-highlighter_languages_highlight_vim",6555:"react-syntax-highlighter_languages_highlight_openscad",6573:"react-syntax-highlighter_languages_highlight_cpp",6780:"react-syntax-highlighter_languages_highlight_qml",6835:"react-syntax-highlighter_languages_highlight_brainfuck",6848:"react-syntax-highlighter_languages_highlight_crystal",6924:"react-syntax-highlighter_languages_highlight_isbl",6977:"react-syntax-highlighter_languages_highlight_rsl",6986:"react-syntax-highlighter_languages_highlight_capnproto",7048:"react-syntax-highlighter_languages_highlight_gherkin",7079:"react-syntax-highlighter_languages_highlight_diff",7131:"react-syntax-highlighter_languages_highlight_protobuf",7209:"react-syntax-highlighter_languages_highlight_perl",7247:"react-syntax-highlighter_languages_highlight_cmake",7254:"react-syntax-highlighter_languages_highlight_subunit",7351:"react-syntax-highlighter_languages_highlight_elixir",7401:"react-syntax-highlighter_languages_highlight_sas",7406:"react-syntax-highlighter_languages_highlight_sql",7439:"react-syntax-highlighter_languages_highlight_flix",7533:"react-syntax-highlighter_languages_highlight_awk",7572:"react-syntax-highlighter_languages_highlight_basic",7764:"react-syntax-highlighter_languages_highlight_go",7776:"react-syntax-highlighter_languages_highlight_haml",7794:"react-syntax-highlighter_languages_highlight_http",7818:"react-syntax-highlighter_languages_highlight_arduino",7879:"react-syntax-highlighter_languages_highlight_csharp",7934:"react-syntax-highlighter_languages_highlight_glsl",7959:"react-syntax-highlighter_languages_highlight_htmlbars",8001:"react-syntax-highlighter_languages_highlight_matlab",8030:"react-syntax-highlighter_languages_highlight_handlebars",8058:"react-syntax-highlighter_languages_highlight_n1ql",8078:"react-syntax-highlighter_languages_highlight_delphi",8138:"react-syntax-highlighter_languages_highlight_elm",8140:"react-syntax-highlighter_languages_highlight_pf",8216:"react-syntax-highlighter_languages_highlight_bnf",8217:"react-syntax-highlighter_languages_highlight_twig",8331:"react-syntax-highlighter_languages_highlight_thrift",8338:"react-syntax-highlighter_languages_highlight_objectivec",8549:"react-syntax-highlighter_languages_highlight_c",8595:"react-syntax-highlighter_languages_highlight_hy",8705:"react-syntax-highlighter_languages_highlight_nodeRepl",8725:"react-syntax-highlighter_languages_highlight_smalltalk",8727:"react-syntax-highlighter/lowlight-import",8753:"react-syntax-highlighter_languages_highlight_mercury",8755:"react-syntax-highlighter_languages_highlight_tcl",8763:"react-syntax-highlighter_languages_highlight_routeros",8833:"react-syntax-highlighter_languages_highlight_markdown",8874:"react-syntax-highlighter_languages_highlight_smali",8903:"react-syntax-highlighter_languages_highlight_axapta",8904:"react-syntax-highlighter_languages_highlight_python",8948:"react-syntax-highlighter_languages_highlight_groovy",9078:"react-syntax-highlighter_languages_highlight_irpf90",9118:"react-syntax-highlighter_languages_highlight_juliaRepl",9139:"react-syntax-highlighter_languages_highlight_django",9162:"react-syntax-highlighter_languages_highlight_ceylon",9175:"react-syntax-highlighter_languages_highlight_vbscript",9229:"react-syntax-highlighter_languages_highlight_julia",9265:"react-syntax-highlighter_languages_highlight_dart",9406:"react-syntax-highlighter_languages_highlight_cal",9612:"react-syntax-highlighter_languages_highlight_bash",9702:"react-syntax-highlighter_languages_highlight_gcode",9726:"react-syntax-highlighter_languages_highlight_xl",9882:"react-syntax-highlighter_languages_highlight_arcade"}[h]||h)+"."+{51:"be0fdf0c",200:"5251fe1a",206:"2347c999",371:"2f5c76b9",428:"0a290bc6",441:"9f02e61b",456:"47518214",460:"6381890e",464:"9bbc16eb",557:"362a3b0a",579:"21c190ed",634:"bb9cc730",879:"0717f1ce",927:"b0ad82d3",946:"e3fcc98c",985:"5f60f06d",1062:"17afaed1",1084:"35f221e8",1099:"a34b6944",1173:"614c5248",1177:"615fa721",1214:"60f97895",1276:"2bd36dc7",1325:"78db0238",1352:"38ec3d00",1362:"d8631b37",1418:"1961f69f",1441:"6b156852",1461:"3ece3068",1489:"a5a73a29",1496:"52f73c98",1522:"b30d0c38",1613:"71f0fccd",1679:"508b5846",1694:"bd112f1a",1727:"ea742315",1750:"cad796c9",1828:"2c5fdf55",1836:"b74b4c40",1895:"feb72aed",1956:"ee3f80da",1961:"17155e77",1972:"2ba37c00",2007:"2cc312ae",2064:"dea9db6c",2108:"f884fdc0",2120:"44884438",2180:"43421810",2198:"5905970e",2234:"1cb2f675",2267:"f1f17544",2346:"bf4f2b44",2362:"353780d4",2378:"706a4bd6",2383:"58c4cb07",2438:"e2543cc2",2488:"e32adbeb",2496:"0d7f4890",2512:"cde06cf5",2516:"aa86d495",2665:"7bd31b3a",2693:"402e473f",2727:"989943de",2743:"4b40a3f9",2762:"bbd3c104",2795:"6d79126a",2871:"cf576f17",2882:"0e45c1cf",2967:"c684efaf",2979:"25f8d292",2981:"038504d0",2983:"eaa5e2bf",3007:"bffc9924",3097:"4bd6b35f",3144:"6f99ccee",3146:"08443005",3193:"ee14d6a4",3299:"5ee62733",3357:"217c56f0",3384:"d9d4ed7e",3418:"d84064e5",3419:"245f31b6",3487:"f5bc5b04",3500:"a06c1c62",3540:"443301b3",3562:"a45eb030",3580:"7fc6f9a3",3607:"bb6a8626",3623:"2aae489e",3647:"b96f9b3e",3657:"59d45756",3722:"b4bb9102",3736:"d934b52b",3811:"4ac917b8",3885:"fe81a7fc",3923:"ddf703d6",3988:"843d9bc4",4014:"bec19089",4041:"29923ad9",4075:"5d714528",4110:"0f4ff415",4135:"9b39cf3b",4282:"f624f22d",4300:"8540ccea",4306:"3a218ff1",4342:"ade4c6c4",4383:"c3457b50",4436:"fc94a148",4446:"92519810",4491:"a2e0258f",4493:"cceeafb0",4570:"8b9f98d7",4575:"8d1f48c5",4635:"1ff533ef",4733:"f32d41e6",4835:"78d69dee",4931:"a431b2db",4956:"f9816c44",4971:"b6519e02",5010:"acf9a415",5034:"b0d90871",5051:"3bc87b5b",5099:"4934a8e8",5123:"501777c7",5189:"8fd3703c",5251:"5b0d21b9",5253:"e6dbc3b4",5286:"630147e0",5446:"0e42541e",5453:"ae292ab1",5565:"c5eaa6f5",5568:"5dbce633",5603:"05d9ca7f",5613:"dc8afdf1",5664:"1ede6e37",5773:"0cf721ff",5813:"cc574d49",5819:"72fdf84d",5868:"78be038f",5900:"8d4054e7",6057:"d69b1825",6152:"42eb54af",6161:"97b48014",6177:"695a2547",6195:"74045e43",6228:"7e26e901",6267:"7d33a4a9",6272:"e49551fa",6352:"d48bba8c",6354:"e04d1c07",6501:"4bfb8996",6512:"a4629d0a",6542:"e82f126f",6555:"4a460eaf",6573:"ff6a8f78",6780:"8f3a0af6",6800:"736d5da3",6813:"036a322f",6835:"31bde7c5",6840:"4728fab9",6848:"3a36e63f",6872:"feed76d2",6924:"abe269c1",6977:"909f2a27",6979:"9699b350",6986:"79dfc31f",7048:"e740620a",7079:"a8373241",7131:"0cd375bc",7209:"ae8475a2",7247:"cb9028b5",7254:"c5ac3a0a",7351:"1e79c9b9",7401:"94075d6a",7406:"651dcc8d",7439:"972cc801",7533:"dfc9b0b0",7572:"ec232b8a",7601:"08d8ff3f",7684:"3d1fc1a1",7764:"abc0a144",7776:"d698757b",7794:"5859273c",7818:"9b9ce313",7879:"ea98c6fb",7934:"bb5b0086",7959:"e57e3c89",7984:"c8511b89",8001:"114e44eb",8030:"75c0a89b",8058:"c54b2c4a",8078:"588e191d",8138:"8a488b19",8140:"5052a768",8216:"84e0a497",8217:"5cb0fdfc",8331:"ecb04f2a",8338:"2d204375",8365:"d3360f18",8416:"3604a311",8549:"b43ce116",8563:"7e068fb0",8595:"c60db034",8705:"5b05cdf2",8725:"53da57ca",8727:"2bd53873",8753:"fa8fdac0",8755:"79af288c",8763:"c0bcd6ce",8833:"1489792c",8874:"4fa5afdd",8903:"80d14346",8904:"9e4100ae",8948:"ecd68b19",9078:"25afcc29",9118:"e3bfcde8",9139:"8fb85401",9162:"ab3b1c28",9175:"4703f4c5",9229:"f43a39d0",9265:"0a0b12af",9288:"61b45746",9406:"781cc6c6",9612:"53f7c730",9702:"378d3296",9726:"7cff3cbb",9882:"70910623"}[h]+".chunk.js",w.miniCssF=h=>{},w.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(h){if("object"==typeof window)return window}}(),w.o=(h,e)=>Object.prototype.hasOwnProperty.call(h,e),g={},a="internal.plugin-kuadrant:",w.l=(h,e,t,i)=>{if(g[h])g[h].push(e);else{var l,r;if(void 0!==t)for(var n=document.getElementsByTagName("script"),s=0;s<n.length;s++){var _=n[s];if(_.getAttribute("src")==h||_.getAttribute("data-webpack")==a+t){l=_;break}}l||(r=!0,(l=document.createElement("script")).charset="utf-8",l.timeout=120,w.nc&&l.setAttribute("nonce",w.nc),l.setAttribute("data-webpack",a+t),l.src=h),g[h]=[e];var c=(e,a)=>{l.onerror=l.onload=null,clearTimeout(u);var t=g[h];if(delete g[h],l.parentNode&&l.parentNode.removeChild(l),t&&t.forEach(h=>h(a)),e)return e(a)},u=setTimeout(c.bind(null,void 0,{type:"timeout",target:l}),12e4);l.onerror=c.bind(null,l.onerror),l.onload=c.bind(null,l.onload),r&&document.head.appendChild(l)}},w.r=h=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(h,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(h,"__esModule",{value:!0})},w.nmd=h=>(h.paths=[],h.children||(h.children=[]),h),(()=>{w.S={};var h={},e={};w.I=(g,a)=>{a||(a=[]);var t=e[g];if(t||(t=e[g]={}),!(a.indexOf(t)>=0)){if(a.push(t),h[g])return h[g];w.o(w.S,g)||(w.S[g]={});var i=w.S[g],l="internal.plugin-kuadrant",r=(h,e,g,a)=>{var t=i[h]=i[h]||{},r=t[e];(!r||!r.loaded&&(!a!=!r.eager?a:l>r.from))&&(t[e]={get:g,from:l,eager:!!a})},n=[];return"default"===g&&(r("@backstage/core-plugin-api","1.11.0",()=>Promise.all([w.e(5568),w.e(7601),w.e(5478),w.e(2469),w.e(4218)]).then(()=>()=>w(47601))),r("@backstage/core-plugin-api","1.11.0",()=>Promise.all([w.e(5568),w.e(428),w.e(5478),w.e(2469),w.e(4218)]).then(()=>()=>w(20428))),r("@backstage/core-plugin-api","1.11.0",()=>Promise.all([w.e(5568),w.e(6272),w.e(5478),w.e(2469),w.e(4218)]).then(()=>()=>w(26272))),r("@backstage/core-plugin-api","1.11.1",()=>Promise.all([w.e(5568),w.e(3647),w.e(5478),w.e(2469),w.e(4218)]).then(()=>()=>w(83647))),r("@backstage/version-bridge","1.0.11",()=>Promise.all([w.e(5478),w.e(5603)]).then(()=>()=>w(65603))),r("@material-ui/core/styles","4.12.4",()=>Promise.all([w.e(6352),w.e(5478),w.e(1942),w.e(4491)]).then(()=>()=>w(64491))),r("@material-ui/styles","4.11.5",()=>Promise.all([w.e(4570),w.e(5478),w.e(3007)]).then(()=>()=>w(94570))),r("react-dom","18.3.1",()=>Promise.all([w.e(3144),w.e(5478)]).then(()=>()=>w(43144))),r("react-router-dom","6.30.1",()=>Promise.all([w.e(1613),w.e(3657),w.e(5478),w.e(484),w.e(2731)]).then(()=>()=>w(73657))),r("react-router","6.30.1",()=>Promise.all([w.e(1613),w.e(1836),w.e(5478)]).then(()=>()=>w(51836))),r("react","18.3.1",()=>w.e(4041).then(()=>()=>w(14041)))),h[g]=n.length?Promise.all(n).then(()=>h[g]=1):1}}})(),(()=>{var h;w.g.importScripts&&(h=w.g.location+"");var e=w.g.document;if(!h&&e&&(e.currentScript&&"SCRIPT"===e.currentScript.tagName.toUpperCase()&&(h=e.currentScript.src),!h)){var g=e.getElementsByTagName("script");if(g.length)for(var a=g.length-1;a>-1&&(!h||!/^http(s?):/.test(h));)h=g[a--].src}if(!h)throw new Error("Automatic publicPath is not supported in this browser");h=h.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),w.p=h})(),t=h=>{var e=h=>h.split(".").map(h=>+h==h?+h:h),g=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(h),a=g[1]?e(g[1]):[];return g[2]&&(a.length++,a.push.apply(a,e(g[2]))),g[3]&&(a.push([]),a.push.apply(a,e(g[3]))),a},i=(h,e)=>{h=t(h),e=t(e);for(var g=0;;){if(g>=h.length)return g<e.length&&"u"!=(typeof e[g])[0];var a=h[g],i=(typeof a)[0];if(g>=e.length)return"u"==i;var l=e[g],r=(typeof l)[0];if(i!=r)return"o"==i&&"n"==r||"s"==r||"u"==i;if("o"!=i&&"u"!=i&&a!=l)return a<l;g++}},l=h=>{var e=h[0],g="";if(1===h.length)return"*";if(e+.5){g+=0==e?">=":-1==e?"<":1==e?"^":2==e?"~":e>0?"=":"!=";for(var a=1,t=1;t<h.length;t++)a--,g+="u"==(typeof(r=h[t]))[0]?"-":(a>0?".":"")+(a=2,r);return g}var i=[];for(t=1;t<h.length;t++){var r=h[t];i.push(0===r?"not("+n()+")":1===r?"("+n()+" || "+n()+")":2===r?i.pop()+" "+i.pop():l(r))}return n();function n(){return i.pop().replace(/^\((.+)\)$/,"$1")}},r=(h,e)=>{if(0 in h){e=t(e);var g=h[0],a=g<0;a&&(g=-g-1);for(var i=0,l=1,n=!0;;l++,i++){var s,_,c=l<h.length?(typeof h[l])[0]:"";if(i>=e.length||"o"==(_=(typeof(s=e[i]))[0]))return!n||("u"==c?l>g&&!a:""==c!=a);if("u"==_){if(!n||"u"!=c)return!1}else if(n)if(c==_)if(l<=g){if(s!=h[l])return!1}else{if(a?s>h[l]:s<h[l])return!1;s!=h[l]&&(n=!1)}else if("s"!=c&&"n"!=c){if(a||l<=g)return!1;n=!1,l--}else{if(l<=g||_<c!=a)return!1;n=!1}else"s"!=c&&"n"!=c&&(n=!1,l--)}}var u=[],o=u.pop.bind(u);for(i=1;i<h.length;i++){var f=h[i];u.push(1==f?o()|o():2==f?o()&o():f?r(f,e):!o())}return!!o()},n=(h,e)=>h&&w.o(h,e),s=h=>(h.loaded=1,h.get()),_=h=>Object.keys(h).reduce((e,g)=>(h[g].eager&&(e[g]=h[g]),e),{}),c=(h,e,g)=>{var a=g?_(h[e]):h[e];return Object.keys(a).reduce((h,e)=>!h||!a[h].loaded&&i(h,e)?e:h,0)},u=(h,e,g,a)=>"Unsatisfied version "+g+" from "+(g&&h[e][g].from)+" of shared singleton module "+e+" (required "+l(a)+")",o=h=>{throw new Error(h)},f=h=>{"undefined"!=typeof console&&console.warn&&console.warn(h)},y=(h,e,g)=>g?g():((h,e)=>o("Shared module "+e+" doesn't exist in shared scope "+h))(h,e),d=(h=>function(e,g,a,t,i){var l=w.I(e);return l&&l.then&&!a?l.then(h.bind(h,e,w.S[e],g,!1,t,i)):h(e,w.S[e],g,a,t,i)})((h,e,g,a,t,i)=>{if(!n(e,g))return y(h,g,i);var l=c(e,g,a);return r(t,l)||f(u(e,g,l,t)),s(e[g][l])}),x={},b={22097:()=>d("default","@backstage/core-plugin-api",!1,[0],()=>Promise.all([w.e(5568),w.e(6272),w.e(5478),w.e(2469),w.e(4218)]).then(()=>()=>w(26272))),95478:()=>d("default","react",!1,[0],()=>w.e(4041).then(()=>()=>w(14041))),42469:()=>d("default","react-router-dom",!1,[0],()=>Promise.all([w.e(1613),w.e(3657),w.e(484),w.e(2731)]).then(()=>()=>w(73657))),64218:()=>d("default","@backstage/version-bridge",!1,[0],()=>w.e(7984).then(()=>()=>w(65603))),11942:()=>d("default","@material-ui/styles",!1,[0],()=>w.e(4570).then(()=>()=>w(94570))),40484:()=>d("default","react-dom",!1,[0],()=>w.e(3144).then(()=>()=>w(43144))),92731:()=>d("default","react-router",!1,[0],()=>w.e(1836).then(()=>()=>w(51836))),37976:()=>d("default","@material-ui/core/styles",!1,[0],()=>w.e(6872).then(()=>()=>w(64491))),97094:()=>d("default","@backstage/core-plugin-api",!1,[0],()=>Promise.all([w.e(3647),w.e(2469)]).then(()=>()=>w(83647))),26659:()=>d("default","@backstage/core-plugin-api",!1,[0],()=>Promise.all([w.e(428),w.e(2469)]).then(()=>()=>w(20428)))},p={484:[40484],879:[22097],1942:[11942],2469:[42469],2731:[92731],4218:[64218],5478:[95478],6659:[26659],7094:[97094],7976:[37976]},m={},w.f.consumes=(h,e)=>{w.o(p,h)&&p[h].forEach(h=>{if(w.o(x,h))return e.push(x[h]);if(!m[h]){var g=e=>{x[h]=0,w.m[h]=g=>{delete w.c[h],g.exports=e()}};m[h]=!0;var a=e=>{delete x[h],w.m[h]=g=>{throw delete w.c[h],e}};try{var t=b[h]();t.then?e.push(x[h]=t.then(g).catch(a)):g(t)}catch(h){a(h)}}})},(()=>{var h={2310:0};w.f.j=(e,g)=>{var a=w.o(h,e)?h[e]:void 0;if(0!==a)if(a)g.push(a[2]);else if(/^(1942|2469|2731|4218|484|5478|6659|7094|7976)$/.test(e))h[e]=0;else{var t=new Promise((g,t)=>a=h[e]=[g,t]);g.push(a[2]=t);var i=w.p+w.u(e),l=new Error;w.l(i,g=>{if(w.o(h,e)&&(0!==(a=h[e])&&(h[e]=void 0),a)){var t=g&&("load"===g.type?"missing":g.type),i=g&&g.target&&g.target.src;l.message="Loading chunk "+e+" failed.\n("+t+": "+i+")",l.name="ChunkLoadError",l.type=t,l.request=i,a[1](l)}},"chunk-"+e,e)}};var e=(e,g)=>{var a,t,[i,l,r]=g,n=0;if(i.some(e=>0!==h[e])){for(a in l)w.o(l,a)&&(w.m[a]=l[a]);r&&r(w)}for(e&&e(g);n<i.length;n++)t=i[n],w.o(h,t)&&h[t]&&h[t][0](),h[t]=0},g=self.webpackChunkinternal_plugin_kuadrant=self.webpackChunkinternal_plugin_kuadrant||[];g.forEach(e.bind(null,0)),g.push=e.bind(null,g.push.bind(g))})(),w(76741)})());
2
- //# sourceMappingURL=internal.plugin-kuadrant.e37d8046ec4d7ed991e0.js.map
1
+ __load_plugin_entry__("internal.plugin-kuadrant",(()=>{"use strict";var h,e,g,a,t,i,l,r,n,s,_,c,u,o,f,y,d,x,b,p,m,v={76741:(h,e,g)=>{var a={PluginRoot:()=>g.e(879).then(()=>()=>g(72627)),KuadrantPage:()=>g.e(879).then(()=>()=>g(72627)),EntityKuadrantApiAccessCard:()=>g.e(879).then(()=>()=>g(72627)),EntityKuadrantApiKeyManagementTab:()=>g.e(879).then(()=>()=>g(72627)),EntityKuadrantApiKeysContent:()=>g.e(879).then(()=>()=>g(72627)),EntityKuadrantApiProductInfoContent:()=>g.e(879).then(()=>()=>g(72627)),KuadrantApprovalQueueCard:()=>g.e(879).then(()=>()=>g(72627))},t=(h,e)=>(g.R=e,e=g.o(a,h)?a[h]():Promise.resolve().then(()=>{throw new Error('Module "'+h+'" does not exist in container.')}),g.R=void 0,e),i=(h,e)=>{if(g.S){var a="default",t=g.S[a];if(t&&t!==h)throw new Error("Container initialization failed as it has already been initialized with a different share scope");return g.S[a]=h,g.I(a,e)}};g.d(e,{get:()=>t,init:()=>i})}},k={};function w(h){var e=k[h];if(void 0!==e)return e.exports;var g=k[h]={id:h,loaded:!1,exports:{}};return v[h].call(g.exports,g,g.exports,w),g.loaded=!0,g.exports}return w.m=v,w.c=k,w.n=h=>{var e=h&&h.__esModule?()=>h.default:()=>h;return w.d(e,{a:e}),e},e=Object.getPrototypeOf?h=>Object.getPrototypeOf(h):h=>h.__proto__,w.t=function(g,a){if(1&a&&(g=this(g)),8&a)return g;if("object"==typeof g&&g){if(4&a&&g.__esModule)return g;if(16&a&&"function"==typeof g.then)return g}var t=Object.create(null);w.r(t);var i={};h=h||[null,e({}),e([]),e(e)];for(var l=2&a&&g;("object"==typeof l||"function"==typeof l)&&!~h.indexOf(l);l=e(l))Object.getOwnPropertyNames(l).forEach(h=>i[h]=()=>g[h]);return i.default=()=>g,w.d(t,i),t},w.d=(h,e)=>{for(var g in e)w.o(e,g)&&!w.o(h,g)&&Object.defineProperty(h,g,{enumerable:!0,get:e[g]})},w.f={},w.e=h=>Promise.all(Object.keys(w.f).reduce((e,g)=>(w.f[g](h,e),e),[])),w.u=h=>"static/"+({51:"react-syntax-highlighter_languages_highlight_prolog",200:"react-syntax-highlighter_languages_highlight_mel",206:"react-syntax-highlighter_languages_highlight_gml",371:"react-syntax-highlighter_languages_highlight_excel",456:"react-syntax-highlighter_languages_highlight_roboconf",460:"react-syntax-highlighter_languages_highlight_avrasm",464:"react-syntax-highlighter_languages_highlight_shell",557:"react-syntax-highlighter_languages_highlight_oneC",579:"react-syntax-highlighter_languages_highlight_vbnet",634:"react-syntax-highlighter_languages_highlight_scilab",879:"exposed-PluginRoot",927:"react-syntax-highlighter_languages_highlight_javascript",946:"react-syntax-highlighter_languages_highlight_clojure",985:"react-syntax-highlighter_languages_highlight_monkey",1062:"react-syntax-highlighter_languages_highlight_nim",1084:"react-syntax-highlighter_languages_highlight_aspectj",1099:"react-syntax-highlighter_languages_highlight_ebnf",1173:"react-syntax-highlighter_languages_highlight_autohotkey",1177:"react-syntax-highlighter_languages_highlight_profile",1214:"react-syntax-highlighter_languages_highlight_properties",1276:"react-syntax-highlighter_languages_highlight_phpTemplate",1325:"react-syntax-highlighter_languages_highlight_actionscript",1352:"react-syntax-highlighter_languages_highlight_fortran",1362:"react-syntax-highlighter_languages_highlight_mathematica",1418:"react-syntax-highlighter_languages_highlight_pony",1441:"react-syntax-highlighter_languages_highlight_coq",1461:"react-syntax-highlighter_languages_highlight_livescript",1489:"react-syntax-highlighter_languages_highlight_reasonml",1496:"react-syntax-highlighter_languages_highlight_lua",1522:"react-syntax-highlighter_languages_highlight_dust",1679:"react-syntax-highlighter_languages_highlight_scheme",1694:"react-syntax-highlighter_languages_highlight_accesslog",1727:"react-syntax-highlighter_languages_highlight_oxygene",1750:"react-syntax-highlighter_languages_highlight_makefile",1828:"react-syntax-highlighter_languages_highlight_dockerfile",1895:"react-syntax-highlighter_languages_highlight_pythonRepl",1956:"react-syntax-highlighter_languages_highlight_puppet",1961:"react-syntax-highlighter_languages_highlight_stan",1972:"react-syntax-highlighter_languages_highlight_fsharp",2007:"react-syntax-highlighter_languages_highlight_css",2064:"react-syntax-highlighter_languages_highlight_vhdl",2108:"react-syntax-highlighter_languages_highlight_cLike",2180:"react-syntax-highlighter_languages_highlight_sqf",2234:"react-syntax-highlighter_languages_highlight_lisp",2267:"react-syntax-highlighter_languages_highlight_maxima",2346:"react-syntax-highlighter_languages_highlight_d",2362:"react-syntax-highlighter_languages_highlight_xquery",2378:"react-syntax-highlighter_languages_highlight_parser3",2383:"react-syntax-highlighter_languages_highlight_crmsh",2438:"react-syntax-highlighter_languages_highlight_haxe",2488:"react-syntax-highlighter_languages_highlight_verilog",2496:"react-syntax-highlighter_languages_highlight_erlangRepl",2512:"react-syntax-highlighter_languages_highlight_stylus",2516:"react-syntax-highlighter_languages_highlight_apache",2665:"react-syntax-highlighter_languages_highlight_powershell",2693:"react-syntax-highlighter_languages_highlight_tap",2727:"react-syntax-highlighter_languages_highlight_q",2743:"react-syntax-highlighter_languages_highlight_asciidoc",2762:"react-syntax-highlighter_languages_highlight_haskell",2795:"react-syntax-highlighter_languages_highlight_dns",2871:"react-syntax-highlighter_languages_highlight_typescript",2882:"react-syntax-highlighter_languages_highlight_sml",2979:"react-syntax-highlighter_languages_highlight_plaintext",2981:"react-syntax-highlighter_languages_highlight_ruleslanguage",2983:"react-syntax-highlighter_languages_highlight_golo",3146:"react-syntax-highlighter_languages_highlight_purebasic",3193:"react-syntax-highlighter_languages_highlight_xml",3299:"react-syntax-highlighter_languages_highlight_fix",3357:"react-syntax-highlighter_languages_highlight_x86asm",3384:"react-syntax-highlighter_languages_highlight_ini",3418:"react-syntax-highlighter_languages_highlight_ruby",3419:"react-syntax-highlighter_languages_highlight_nix",3487:"react-syntax-highlighter_languages_highlight_mipsasm",3500:"react-syntax-highlighter_languages_highlight_autoit",3540:"react-syntax-highlighter_languages_highlight_moonscript",3562:"react-syntax-highlighter_languages_highlight_gams",3580:"react-syntax-highlighter_languages_highlight_csp",3607:"react-syntax-highlighter_languages_highlight_abnf",3623:"react-syntax-highlighter_languages_highlight_yaml",3722:"react-syntax-highlighter_languages_highlight_latex",3736:"react-syntax-highlighter_languages_highlight_json",3811:"react-syntax-highlighter_languages_highlight_erb",3885:"react-syntax-highlighter_languages_highlight_stata",3923:"react-syntax-highlighter_languages_highlight_applescript",3988:"react-syntax-highlighter_languages_highlight_vala",4014:"react-syntax-highlighter_languages_highlight_scss",4075:"react-syntax-highlighter_languages_highlight_hsp",4110:"react-syntax-highlighter_languages_highlight_tp",4135:"react-syntax-highlighter_languages_highlight_mizar",4282:"react-syntax-highlighter_languages_highlight_livecodeserver",4300:"react-syntax-highlighter_languages_highlight_r",4342:"react-syntax-highlighter_languages_highlight_php",4383:"react-syntax-highlighter_languages_highlight_dsconfig",4436:"react-syntax-highlighter_languages_highlight_zephir",4446:"react-syntax-highlighter_languages_highlight_leaf",4493:"react-syntax-highlighter_languages_highlight_gauss",4575:"react-syntax-highlighter_languages_highlight_processing",4635:"react-syntax-highlighter_languages_highlight_jbossCli",4733:"react-syntax-highlighter_languages_highlight_llvm",4835:"react-syntax-highlighter_languages_highlight_cos",4931:"react-syntax-highlighter_languages_highlight_step21",4956:"react-syntax-highlighter_languages_highlight_angelscript",4971:"react-syntax-highlighter_languages_highlight_lsl",5034:"react-syntax-highlighter_languages_highlight_ada",5051:"react-syntax-highlighter_languages_highlight_coffeescript",5099:"react-syntax-highlighter_languages_highlight_nsis",5123:"react-syntax-highlighter_languages_highlight_erlang",5189:"react-syntax-highlighter_languages_highlight_dts",5251:"react-syntax-highlighter_languages_highlight_pgsql",5253:"react-syntax-highlighter_languages_highlight_clojureRepl",5286:"react-syntax-highlighter_languages_highlight_nginx",5446:"react-syntax-highlighter_languages_highlight_ocaml",5565:"react-syntax-highlighter_languages_highlight_kotlin",5613:"react-syntax-highlighter_languages_highlight_rib",5664:"react-syntax-highlighter_languages_highlight_dos",5773:"react-syntax-highlighter_languages_highlight_mojolicious",5813:"react-syntax-highlighter_languages_highlight_less",5819:"react-syntax-highlighter_languages_highlight_gradle",5868:"react-syntax-highlighter_languages_highlight_inform7",5900:"react-syntax-highlighter_languages_highlight_lasso",6057:"react-syntax-highlighter_languages_highlight_sqlMore",6152:"react-syntax-highlighter_languages_highlight_vbscriptHtml",6161:"react-syntax-highlighter_languages_highlight_clean",6177:"react-syntax-highlighter_languages_highlight_taggerscript",6195:"react-syntax-highlighter_languages_highlight_ldif",6228:"react-syntax-highlighter_languages_highlight_rust",6267:"react-syntax-highlighter_languages_highlight_swift",6354:"react-syntax-highlighter_languages_highlight_java",6501:"react-syntax-highlighter_languages_highlight_armasm",6512:"react-syntax-highlighter_languages_highlight_scala",6542:"react-syntax-highlighter_languages_highlight_vim",6555:"react-syntax-highlighter_languages_highlight_openscad",6573:"react-syntax-highlighter_languages_highlight_cpp",6780:"react-syntax-highlighter_languages_highlight_qml",6835:"react-syntax-highlighter_languages_highlight_brainfuck",6848:"react-syntax-highlighter_languages_highlight_crystal",6924:"react-syntax-highlighter_languages_highlight_isbl",6977:"react-syntax-highlighter_languages_highlight_rsl",6986:"react-syntax-highlighter_languages_highlight_capnproto",7048:"react-syntax-highlighter_languages_highlight_gherkin",7079:"react-syntax-highlighter_languages_highlight_diff",7131:"react-syntax-highlighter_languages_highlight_protobuf",7209:"react-syntax-highlighter_languages_highlight_perl",7247:"react-syntax-highlighter_languages_highlight_cmake",7254:"react-syntax-highlighter_languages_highlight_subunit",7351:"react-syntax-highlighter_languages_highlight_elixir",7401:"react-syntax-highlighter_languages_highlight_sas",7406:"react-syntax-highlighter_languages_highlight_sql",7439:"react-syntax-highlighter_languages_highlight_flix",7533:"react-syntax-highlighter_languages_highlight_awk",7572:"react-syntax-highlighter_languages_highlight_basic",7764:"react-syntax-highlighter_languages_highlight_go",7776:"react-syntax-highlighter_languages_highlight_haml",7794:"react-syntax-highlighter_languages_highlight_http",7818:"react-syntax-highlighter_languages_highlight_arduino",7879:"react-syntax-highlighter_languages_highlight_csharp",7934:"react-syntax-highlighter_languages_highlight_glsl",7959:"react-syntax-highlighter_languages_highlight_htmlbars",8001:"react-syntax-highlighter_languages_highlight_matlab",8030:"react-syntax-highlighter_languages_highlight_handlebars",8058:"react-syntax-highlighter_languages_highlight_n1ql",8078:"react-syntax-highlighter_languages_highlight_delphi",8138:"react-syntax-highlighter_languages_highlight_elm",8140:"react-syntax-highlighter_languages_highlight_pf",8216:"react-syntax-highlighter_languages_highlight_bnf",8217:"react-syntax-highlighter_languages_highlight_twig",8331:"react-syntax-highlighter_languages_highlight_thrift",8338:"react-syntax-highlighter_languages_highlight_objectivec",8549:"react-syntax-highlighter_languages_highlight_c",8595:"react-syntax-highlighter_languages_highlight_hy",8705:"react-syntax-highlighter_languages_highlight_nodeRepl",8725:"react-syntax-highlighter_languages_highlight_smalltalk",8727:"react-syntax-highlighter/lowlight-import",8753:"react-syntax-highlighter_languages_highlight_mercury",8755:"react-syntax-highlighter_languages_highlight_tcl",8763:"react-syntax-highlighter_languages_highlight_routeros",8833:"react-syntax-highlighter_languages_highlight_markdown",8874:"react-syntax-highlighter_languages_highlight_smali",8903:"react-syntax-highlighter_languages_highlight_axapta",8904:"react-syntax-highlighter_languages_highlight_python",8948:"react-syntax-highlighter_languages_highlight_groovy",9078:"react-syntax-highlighter_languages_highlight_irpf90",9118:"react-syntax-highlighter_languages_highlight_juliaRepl",9139:"react-syntax-highlighter_languages_highlight_django",9162:"react-syntax-highlighter_languages_highlight_ceylon",9175:"react-syntax-highlighter_languages_highlight_vbscript",9229:"react-syntax-highlighter_languages_highlight_julia",9265:"react-syntax-highlighter_languages_highlight_dart",9406:"react-syntax-highlighter_languages_highlight_cal",9612:"react-syntax-highlighter_languages_highlight_bash",9702:"react-syntax-highlighter_languages_highlight_gcode",9726:"react-syntax-highlighter_languages_highlight_xl",9882:"react-syntax-highlighter_languages_highlight_arcade"}[h]||h)+"."+{51:"be0fdf0c",200:"5251fe1a",206:"2347c999",371:"2f5c76b9",428:"0a290bc6",441:"9f02e61b",456:"47518214",460:"6381890e",464:"9bbc16eb",557:"362a3b0a",579:"21c190ed",634:"bb9cc730",879:"bba1f323",927:"b0ad82d3",946:"e3fcc98c",985:"5f60f06d",1062:"17afaed1",1084:"35f221e8",1085:"536aa0fa",1099:"a34b6944",1173:"614c5248",1177:"615fa721",1214:"60f97895",1276:"2bd36dc7",1325:"78db0238",1352:"38ec3d00",1362:"d8631b37",1418:"1961f69f",1441:"6b156852",1461:"3ece3068",1489:"a5a73a29",1496:"52f73c98",1522:"b30d0c38",1613:"71f0fccd",1679:"508b5846",1694:"bd112f1a",1727:"ea742315",1750:"cad796c9",1828:"2c5fdf55",1836:"b74b4c40",1895:"feb72aed",1956:"ee3f80da",1961:"17155e77",1972:"2ba37c00",2007:"2cc312ae",2064:"dea9db6c",2108:"f884fdc0",2120:"44884438",2180:"43421810",2198:"5905970e",2234:"1cb2f675",2267:"f1f17544",2346:"bf4f2b44",2362:"353780d4",2378:"706a4bd6",2383:"58c4cb07",2438:"e2543cc2",2488:"e32adbeb",2496:"0d7f4890",2512:"cde06cf5",2516:"aa86d495",2628:"6619bf8b",2665:"7bd31b3a",2693:"402e473f",2727:"989943de",2743:"4b40a3f9",2762:"bbd3c104",2795:"6d79126a",2871:"cf576f17",2882:"0e45c1cf",2946:"167c50c2",2967:"c684efaf",2979:"25f8d292",2981:"038504d0",2983:"eaa5e2bf",3007:"bffc9924",3097:"4bd6b35f",3144:"6f99ccee",3146:"08443005",3193:"ee14d6a4",3299:"5ee62733",3357:"217c56f0",3384:"d9d4ed7e",3418:"d84064e5",3419:"245f31b6",3466:"43dfe991",3487:"f5bc5b04",3500:"a06c1c62",3540:"443301b3",3562:"a45eb030",3580:"7fc6f9a3",3607:"bb6a8626",3623:"2aae489e",3647:"b96f9b3e",3657:"59d45756",3722:"b4bb9102",3736:"d934b52b",3811:"4ac917b8",3885:"fe81a7fc",3923:"ddf703d6",3988:"843d9bc4",4014:"bec19089",4041:"29923ad9",4075:"5d714528",4110:"0f4ff415",4135:"9b39cf3b",4282:"f624f22d",4300:"8540ccea",4306:"3a218ff1",4342:"ade4c6c4",4383:"c3457b50",4436:"fc94a148",4446:"92519810",4491:"83052809",4493:"cceeafb0",4570:"8b9f98d7",4575:"8d1f48c5",4635:"1ff533ef",4733:"f32d41e6",4835:"78d69dee",4931:"a431b2db",4956:"f9816c44",4971:"b6519e02",5010:"acf9a415",5034:"b0d90871",5051:"3bc87b5b",5099:"4934a8e8",5123:"501777c7",5189:"8fd3703c",5251:"5b0d21b9",5253:"e6dbc3b4",5286:"630147e0",5446:"0e42541e",5453:"c1f90bdf",5565:"c5eaa6f5",5603:"05d9ca7f",5613:"dc8afdf1",5664:"1ede6e37",5773:"0cf721ff",5813:"cc574d49",5819:"72fdf84d",5868:"78be038f",5900:"8d4054e7",6057:"d69b1825",6152:"42eb54af",6161:"97b48014",6177:"695a2547",6195:"74045e43",6228:"7e26e901",6267:"7d33a4a9",6272:"b5ee5195",6354:"e04d1c07",6371:"c83dc422",6501:"4bfb8996",6512:"a4629d0a",6542:"e82f126f",6555:"4a460eaf",6573:"ff6a8f78",6780:"8f3a0af6",6800:"736d5da3",6813:"036a322f",6835:"31bde7c5",6840:"4728fab9",6848:"3a36e63f",6872:"7ef4ed23",6924:"abe269c1",6977:"909f2a27",6979:"9699b350",6986:"79dfc31f",7048:"e740620a",7079:"a8373241",7131:"0cd375bc",7209:"ae8475a2",7247:"cb9028b5",7254:"c5ac3a0a",7351:"1e79c9b9",7401:"94075d6a",7406:"651dcc8d",7439:"972cc801",7533:"dfc9b0b0",7556:"aa8a002f",7572:"ec232b8a",7601:"4df83556",7684:"3d1fc1a1",7764:"abc0a144",7776:"d698757b",7794:"5859273c",7818:"9b9ce313",7879:"ea98c6fb",7934:"bb5b0086",7959:"e57e3c89",7984:"c8511b89",8001:"114e44eb",8030:"75c0a89b",8058:"c54b2c4a",8078:"588e191d",8138:"8a488b19",8140:"5052a768",8216:"84e0a497",8217:"5cb0fdfc",8331:"ecb04f2a",8338:"2d204375",8365:"d3360f18",8416:"3604a311",8549:"b43ce116",8563:"7e068fb0",8595:"c60db034",8705:"5b05cdf2",8725:"53da57ca",8727:"2bd53873",8753:"fa8fdac0",8755:"79af288c",8763:"c0bcd6ce",8833:"1489792c",8874:"4fa5afdd",8903:"80d14346",8904:"9e4100ae",8948:"ecd68b19",9078:"25afcc29",9118:"e3bfcde8",9139:"8fb85401",9162:"ab3b1c28",9175:"4703f4c5",9229:"f43a39d0",9265:"0a0b12af",9400:"df4a7fb5",9406:"781cc6c6",9612:"53f7c730",9702:"378d3296",9726:"7cff3cbb",9882:"70910623"}[h]+".chunk.js",w.miniCssF=h=>{},w.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(h){if("object"==typeof window)return window}}(),w.o=(h,e)=>Object.prototype.hasOwnProperty.call(h,e),g={},a="internal.plugin-kuadrant:",w.l=(h,e,t,i)=>{if(g[h])g[h].push(e);else{var l,r;if(void 0!==t)for(var n=document.getElementsByTagName("script"),s=0;s<n.length;s++){var _=n[s];if(_.getAttribute("src")==h||_.getAttribute("data-webpack")==a+t){l=_;break}}l||(r=!0,(l=document.createElement("script")).charset="utf-8",l.timeout=120,w.nc&&l.setAttribute("nonce",w.nc),l.setAttribute("data-webpack",a+t),l.src=h),g[h]=[e];var c=(e,a)=>{l.onerror=l.onload=null,clearTimeout(u);var t=g[h];if(delete g[h],l.parentNode&&l.parentNode.removeChild(l),t&&t.forEach(h=>h(a)),e)return e(a)},u=setTimeout(c.bind(null,void 0,{type:"timeout",target:l}),12e4);l.onerror=c.bind(null,l.onerror),l.onload=c.bind(null,l.onload),r&&document.head.appendChild(l)}},w.r=h=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(h,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(h,"__esModule",{value:!0})},w.nmd=h=>(h.paths=[],h.children||(h.children=[]),h),(()=>{w.S={};var h={},e={};w.I=(g,a)=>{a||(a=[]);var t=e[g];if(t||(t=e[g]={}),!(a.indexOf(t)>=0)){if(a.push(t),h[g])return h[g];w.o(w.S,g)||(w.S[g]={});var i=w.S[g],l="internal.plugin-kuadrant",r=(h,e,g,a)=>{var t=i[h]=i[h]||{},r=t[e];(!r||!r.loaded&&(!a!=!r.eager?a:l>r.from))&&(t[e]={get:g,from:l,eager:!!a})},n=[];return"default"===g&&(r("@backstage/core-plugin-api","1.11.0",()=>Promise.all([w.e(7556),w.e(7601),w.e(5478),w.e(2469),w.e(4218)]).then(()=>()=>w(47601))),r("@backstage/core-plugin-api","1.11.0",()=>Promise.all([w.e(7556),w.e(428),w.e(5478),w.e(2469),w.e(4218),w.e(1085)]).then(()=>()=>w(20428))),r("@backstage/core-plugin-api","1.11.0",()=>Promise.all([w.e(7556),w.e(6272),w.e(5478),w.e(2469),w.e(4218)]).then(()=>()=>w(26272))),r("@backstage/core-plugin-api","1.11.1",()=>Promise.all([w.e(7556),w.e(3647),w.e(5478),w.e(2469),w.e(4218),w.e(3466)]).then(()=>()=>w(83647))),r("@backstage/version-bridge","1.0.11",()=>Promise.all([w.e(5478),w.e(5603)]).then(()=>()=>w(65603))),r("@material-ui/core/styles","4.12.4",()=>Promise.all([w.e(9400),w.e(5478),w.e(1942),w.e(4491)]).then(()=>()=>w(64491))),r("@material-ui/styles","4.11.5",()=>Promise.all([w.e(4570),w.e(5478),w.e(3007)]).then(()=>()=>w(94570))),r("react-dom","18.3.1",()=>Promise.all([w.e(3144),w.e(5478)]).then(()=>()=>w(43144))),r("react-router-dom","6.30.1",()=>Promise.all([w.e(1613),w.e(3657),w.e(5478),w.e(484),w.e(2731)]).then(()=>()=>w(73657))),r("react-router","6.30.1",()=>Promise.all([w.e(1613),w.e(1836),w.e(5478)]).then(()=>()=>w(51836))),r("react","18.3.1",()=>w.e(4041).then(()=>()=>w(14041)))),h[g]=n.length?Promise.all(n).then(()=>h[g]=1):1}}})(),(()=>{var h;w.g.importScripts&&(h=w.g.location+"");var e=w.g.document;if(!h&&e&&(e.currentScript&&"SCRIPT"===e.currentScript.tagName.toUpperCase()&&(h=e.currentScript.src),!h)){var g=e.getElementsByTagName("script");if(g.length)for(var a=g.length-1;a>-1&&(!h||!/^http(s?):/.test(h));)h=g[a--].src}if(!h)throw new Error("Automatic publicPath is not supported in this browser");h=h.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),w.p=h})(),t=h=>{var e=h=>h.split(".").map(h=>+h==h?+h:h),g=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(h),a=g[1]?e(g[1]):[];return g[2]&&(a.length++,a.push.apply(a,e(g[2]))),g[3]&&(a.push([]),a.push.apply(a,e(g[3]))),a},i=(h,e)=>{h=t(h),e=t(e);for(var g=0;;){if(g>=h.length)return g<e.length&&"u"!=(typeof e[g])[0];var a=h[g],i=(typeof a)[0];if(g>=e.length)return"u"==i;var l=e[g],r=(typeof l)[0];if(i!=r)return"o"==i&&"n"==r||"s"==r||"u"==i;if("o"!=i&&"u"!=i&&a!=l)return a<l;g++}},l=h=>{var e=h[0],g="";if(1===h.length)return"*";if(e+.5){g+=0==e?">=":-1==e?"<":1==e?"^":2==e?"~":e>0?"=":"!=";for(var a=1,t=1;t<h.length;t++)a--,g+="u"==(typeof(r=h[t]))[0]?"-":(a>0?".":"")+(a=2,r);return g}var i=[];for(t=1;t<h.length;t++){var r=h[t];i.push(0===r?"not("+n()+")":1===r?"("+n()+" || "+n()+")":2===r?i.pop()+" "+i.pop():l(r))}return n();function n(){return i.pop().replace(/^\((.+)\)$/,"$1")}},r=(h,e)=>{if(0 in h){e=t(e);var g=h[0],a=g<0;a&&(g=-g-1);for(var i=0,l=1,n=!0;;l++,i++){var s,_,c=l<h.length?(typeof h[l])[0]:"";if(i>=e.length||"o"==(_=(typeof(s=e[i]))[0]))return!n||("u"==c?l>g&&!a:""==c!=a);if("u"==_){if(!n||"u"!=c)return!1}else if(n)if(c==_)if(l<=g){if(s!=h[l])return!1}else{if(a?s>h[l]:s<h[l])return!1;s!=h[l]&&(n=!1)}else if("s"!=c&&"n"!=c){if(a||l<=g)return!1;n=!1,l--}else{if(l<=g||_<c!=a)return!1;n=!1}else"s"!=c&&"n"!=c&&(n=!1,l--)}}var u=[],o=u.pop.bind(u);for(i=1;i<h.length;i++){var f=h[i];u.push(1==f?o()|o():2==f?o()&o():f?r(f,e):!o())}return!!o()},n=(h,e)=>h&&w.o(h,e),s=h=>(h.loaded=1,h.get()),_=h=>Object.keys(h).reduce((e,g)=>(h[g].eager&&(e[g]=h[g]),e),{}),c=(h,e,g)=>{var a=g?_(h[e]):h[e];return Object.keys(a).reduce((h,e)=>!h||!a[h].loaded&&i(h,e)?e:h,0)},u=(h,e,g,a)=>"Unsatisfied version "+g+" from "+(g&&h[e][g].from)+" of shared singleton module "+e+" (required "+l(a)+")",o=h=>{throw new Error(h)},f=h=>{"undefined"!=typeof console&&console.warn&&console.warn(h)},y=(h,e,g)=>g?g():((h,e)=>o("Shared module "+e+" doesn't exist in shared scope "+h))(h,e),d=(h=>function(e,g,a,t,i){var l=w.I(e);return l&&l.then&&!a?l.then(h.bind(h,e,w.S[e],g,!1,t,i)):h(e,w.S[e],g,a,t,i)})((h,e,g,a,t,i)=>{if(!n(e,g))return y(h,g,i);var l=c(e,g,a);return r(t,l)||f(u(e,g,l,t)),s(e[g][l])}),x={},b={22097:()=>d("default","@backstage/core-plugin-api",!1,[0],()=>Promise.all([w.e(7556),w.e(6272),w.e(5478),w.e(2469),w.e(4218)]).then(()=>()=>w(26272))),95478:()=>d("default","react",!1,[0],()=>w.e(4041).then(()=>()=>w(14041))),42469:()=>d("default","react-router-dom",!1,[0],()=>Promise.all([w.e(1613),w.e(3657),w.e(484),w.e(2731)]).then(()=>()=>w(73657))),64218:()=>d("default","@backstage/version-bridge",!1,[0],()=>w.e(7984).then(()=>()=>w(65603))),11942:()=>d("default","@material-ui/styles",!1,[0],()=>w.e(4570).then(()=>()=>w(94570))),40484:()=>d("default","react-dom",!1,[0],()=>w.e(3144).then(()=>()=>w(43144))),92731:()=>d("default","react-router",!1,[0],()=>w.e(1836).then(()=>()=>w(51836))),37976:()=>d("default","@material-ui/core/styles",!1,[0],()=>w.e(6872).then(()=>()=>w(64491))),97094:()=>d("default","@backstage/core-plugin-api",!1,[0],()=>Promise.all([w.e(3647),w.e(2469)]).then(()=>()=>w(83647))),26659:()=>d("default","@backstage/core-plugin-api",!1,[0],()=>Promise.all([w.e(7556),w.e(428),w.e(2469)]).then(()=>()=>w(20428)))},p={484:[40484],879:[22097],1942:[11942],2469:[42469],2731:[92731],4218:[64218],5478:[95478],6659:[26659],7094:[97094],7976:[37976]},m={},w.f.consumes=(h,e)=>{w.o(p,h)&&p[h].forEach(h=>{if(w.o(x,h))return e.push(x[h]);if(!m[h]){var g=e=>{x[h]=0,w.m[h]=g=>{delete w.c[h],g.exports=e()}};m[h]=!0;var a=e=>{delete x[h],w.m[h]=g=>{throw delete w.c[h],e}};try{var t=b[h]();t.then?e.push(x[h]=t.then(g).catch(a)):g(t)}catch(h){a(h)}}})},(()=>{var h={2310:0};w.f.j=(e,g)=>{var a=w.o(h,e)?h[e]:void 0;if(0!==a)if(a)g.push(a[2]);else if(/^(1942|2469|2731|4218|484|5478|6659|7094|7976)$/.test(e))h[e]=0;else{var t=new Promise((g,t)=>a=h[e]=[g,t]);g.push(a[2]=t);var i=w.p+w.u(e),l=new Error;w.l(i,g=>{if(w.o(h,e)&&(0!==(a=h[e])&&(h[e]=void 0),a)){var t=g&&("load"===g.type?"missing":g.type),i=g&&g.target&&g.target.src;l.message="Loading chunk "+e+" failed.\n("+t+": "+i+")",l.name="ChunkLoadError",l.type=t,l.request=i,a[1](l)}},"chunk-"+e,e)}};var e=(e,g)=>{var a,t,[i,l,r]=g,n=0;if(i.some(e=>0!==h[e])){for(a in l)w.o(l,a)&&(w.m[a]=l[a]);r&&r(w)}for(e&&e(g);n<i.length;n++)t=i[n],w.o(h,t)&&h[t]&&h[t][0](),h[t]=0},g=self.webpackChunkinternal_plugin_kuadrant=self.webpackChunkinternal_plugin_kuadrant||[];g.forEach(e.bind(null,0)),g.push=e.bind(null,g.push.bind(g))})(),w(76741)})());
2
+ //# sourceMappingURL=internal.plugin-kuadrant.f72b5e5792b0a8c4239f.js.map