@techdocs/cli 1.11.1 → 1.11.2-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/dist/embedded-app/.config-schema.json +1967 -1200
- package/dist/embedded-app/index.html +1 -1
- package/dist/embedded-app/index.html.tmpl +1 -1
- package/dist/embedded-app/static/123.bcb96abf.chunk.js +2 -0
- package/dist/embedded-app/static/123.bcb96abf.chunk.js.map +1 -0
- package/dist/embedded-app/static/1659.fe3e020b.chunk.js +2 -0
- package/dist/embedded-app/static/1659.fe3e020b.chunk.js.map +1 -0
- package/dist/embedded-app/static/3641.2f6dbbcb.chunk.js +2 -0
- package/dist/embedded-app/static/3641.2f6dbbcb.chunk.js.map +1 -0
- package/dist/embedded-app/static/3641.3641.9c1b1a2e.css +2 -0
- package/dist/embedded-app/static/3641.3641.9c1b1a2e.css.map +1 -0
- package/dist/embedded-app/static/4587.9946f651.chunk.js +2 -0
- package/dist/embedded-app/static/4587.9946f651.chunk.js.map +1 -0
- package/dist/embedded-app/static/{5443.fa47af87.chunk.js → 5443.835e027f.chunk.js} +2 -2
- package/dist/embedded-app/static/{5443.fa47af87.chunk.js.map → 5443.835e027f.chunk.js.map} +1 -1
- package/dist/embedded-app/static/{3939.3939.44355183.css → 5954.5954.8056ed76.css} +1 -1
- package/dist/embedded-app/static/{3939.3939.44355183.css.map → 5954.5954.8056ed76.css.map} +1 -1
- package/dist/embedded-app/static/5954.f0710c0b.chunk.js +2 -0
- package/dist/embedded-app/static/5954.f0710c0b.chunk.js.map +1 -0
- package/dist/embedded-app/static/{4815.b2bde1a3.chunk.js → 7213.e2116c72.chunk.js} +2 -2
- package/dist/embedded-app/static/7213.e2116c72.chunk.js.map +1 -0
- package/dist/embedded-app/static/{7226.8c68c3d3.chunk.js → 7226.07a43ca6.chunk.js} +2 -2
- package/dist/embedded-app/static/7226.07a43ca6.chunk.js.map +1 -0
- package/dist/embedded-app/static/{7477.a970d20a.chunk.js → 7227.69beafef.chunk.js} +5 -5
- package/dist/embedded-app/static/7227.69beafef.chunk.js.map +1 -0
- package/dist/embedded-app/static/{main.728cdf6e.css → main.2a45aed3.css} +2 -2
- package/dist/embedded-app/static/main.2a45aed3.css.map +1 -0
- package/dist/embedded-app/static/main.3aa6c085.js +523 -0
- package/dist/embedded-app/static/main.3aa6c085.js.map +1 -0
- package/dist/embedded-app/static/{module-material-ui.972bd852.js → module-material-ui.0bea4977.js} +2 -2
- package/dist/embedded-app/static/module-material-ui.0bea4977.js.map +1 -0
- package/dist/embedded-app/static/module-react-aria-components.edebf589.js +2 -0
- package/dist/embedded-app/static/module-react-aria-components.edebf589.js.map +1 -0
- package/dist/embedded-app/static/module-react-aria.84a78dd1.js +13 -0
- package/dist/embedded-app/static/module-react-aria.84a78dd1.js.map +1 -0
- package/dist/embedded-app/static/{module-react-stately.97fc37eb.js → module-react-stately.3db88231.js} +2 -2
- package/dist/embedded-app/static/module-react-stately.3db88231.js.map +1 -0
- package/dist/embedded-app/static/module-remixicon.4e40b5b6.js +2 -0
- package/dist/embedded-app/static/{module-remixicon.0feb7353.js.map → module-remixicon.4e40b5b6.js.map} +1 -1
- package/dist/embedded-app/static/{runtime.8fda57a9.js → runtime.9fcbc8ae.js} +2 -2
- package/dist/embedded-app/static/runtime.9fcbc8ae.js.map +1 -0
- package/dist/package.json.cjs.js +1 -1
- package/package.json +7 -7
- package/dist/embedded-app/static/123.59719fa4.chunk.js +0 -2
- package/dist/embedded-app/static/123.59719fa4.chunk.js.map +0 -1
- package/dist/embedded-app/static/1659.6b3694d1.chunk.js +0 -2
- package/dist/embedded-app/static/1659.6b3694d1.chunk.js.map +0 -1
- package/dist/embedded-app/static/3939.265160c5.chunk.js +0 -2
- package/dist/embedded-app/static/3939.265160c5.chunk.js.map +0 -1
- package/dist/embedded-app/static/4587.baab3514.chunk.js +0 -2
- package/dist/embedded-app/static/4587.baab3514.chunk.js.map +0 -1
- package/dist/embedded-app/static/4815.b2bde1a3.chunk.js.map +0 -1
- package/dist/embedded-app/static/7226.8c68c3d3.chunk.js.map +0 -1
- package/dist/embedded-app/static/7477.a970d20a.chunk.js.map +0 -1
- package/dist/embedded-app/static/main.728cdf6e.css.map +0 -1
- package/dist/embedded-app/static/main.fbc1b502.js +0 -523
- package/dist/embedded-app/static/main.fbc1b502.js.map +0 -1
- package/dist/embedded-app/static/module-material-ui.972bd852.js.map +0 -1
- package/dist/embedded-app/static/module-react-aria-components.ab7cc6df.js +0 -2
- package/dist/embedded-app/static/module-react-aria-components.ab7cc6df.js.map +0 -1
- package/dist/embedded-app/static/module-react-aria.e3e38de1.js +0 -13
- package/dist/embedded-app/static/module-react-aria.e3e38de1.js.map +0 -1
- package/dist/embedded-app/static/module-react-stately.97fc37eb.js.map +0 -1
- package/dist/embedded-app/static/module-remixicon.0feb7353.js +0 -2
- package/dist/embedded-app/static/runtime.8fda57a9.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
@layer tokens,base;@layer components{.oswl8eimGwGMv65g{--loading-duration:.2s;--bg:transparent;--bg-hover:transparent;--bg-active:transparent;--fg:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;border-radius:var(--bui-radius-2);transition:background-color var(--loading-duration)ease-out,box-shadow var(--loading-duration)ease-out;color:var(--fg);background-color:var(--bg);border:none;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:inline-flex;position:relative}.oswl8eimGwGMv65g:hover{background-color:var(--bg-hover);transition:background-color .15s}.oswl8eimGwGMv65g:active{background-color:var(--bg-active)}.oswl8eimGwGMv65g[data-disabled=true]{cursor:not-allowed}.oswl8eimGwGMv65g[data-ispending=true]{cursor:wait}.oswl8eimGwGMv65g[data-variant=primary]{--bg:var(--bui-bg-solid);--bg-hover:var(--bui-bg-solid-hover);--bg-active:var(--bui-bg-solid-pressed);--fg:var(--bui-fg-solid)}.oswl8eimGwGMv65g[data-variant=primary][data-disabled=true]{--bg:var(--bui-bg-solid-disabled);--bg-hover:var(--bui-bg-solid-disabled);--bg-active:var(--bui-bg-solid-disabled);--fg:var(--bui-fg-solid-disabled)}.oswl8eimGwGMv65g[data-variant=primary][data-ispending=true]{--bg:var(--bui-bg-solid-disabled);--bg-hover:var(--bui-bg-solid-disabled);--bg-active:var(--bui-bg-solid-disabled);--fg:var(--bui-fg-solid-disabled)}.oswl8eimGwGMv65g[data-variant=primary][data-focus-visible]{outline:2px solid var(--bui-ring);outline-offset:2px}.oswl8eimGwGMv65g[data-variant=secondary]{--bg:var(--bui-bg-neutral-1);--bg-hover:var(--bui-bg-neutral-1-hover);--bg-active:var(--bui-bg-neutral-1-pressed);--fg:var(--bui-fg-primary)}.oswl8eimGwGMv65g[data-variant=secondary][data-on-bg=neutral-1]{--bg:var(--bui-bg-neutral-2);--bg-hover:var(--bui-bg-neutral-2-hover);--bg-active:var(--bui-bg-neutral-2-pressed)}.oswl8eimGwGMv65g[data-variant=secondary][data-on-bg=neutral-2]{--bg:var(--bui-bg-neutral-3);--bg-hover:var(--bui-bg-neutral-3-hover);--bg-active:var(--bui-bg-neutral-3-pressed)}.oswl8eimGwGMv65g[data-variant=secondary][data-on-bg=neutral-3]{--bg:var(--bui-bg-neutral-4);--bg-hover:var(--bui-bg-neutral-4-hover);--bg-active:var(--bui-bg-neutral-4-pressed)}.oswl8eimGwGMv65g[data-variant=secondary][data-disabled=true]{--bg-hover:var(--bg);--bg-active:var(--bg);--fg:var(--bui-fg-disabled)}.oswl8eimGwGMv65g[data-variant=secondary][data-ispending=true]{--bg-hover:var(--bg);--bg-active:var(--bg);--fg:var(--bui-fg-disabled)}.oswl8eimGwGMv65g[data-variant=secondary][data-focus-visible]{box-shadow:inset 0 0 0 2px var(--bui-ring);outline:none;transition:none}.oswl8eimGwGMv65g[data-variant=tertiary]{--bg-hover:var(--bui-bg-neutral-1-hover);--bg-active:var(--bui-bg-neutral-1-pressed);--fg:var(--bui-fg-primary)}.oswl8eimGwGMv65g[data-variant=tertiary][data-on-bg=neutral-1]{--bg-hover:var(--bui-bg-neutral-2-hover);--bg-active:var(--bui-bg-neutral-2-pressed)}.oswl8eimGwGMv65g[data-variant=tertiary][data-on-bg=neutral-2]{--bg-hover:var(--bui-bg-neutral-3-hover);--bg-active:var(--bui-bg-neutral-3-pressed)}.oswl8eimGwGMv65g[data-variant=tertiary][data-on-bg=neutral-3]{--bg-hover:var(--bui-bg-neutral-4-hover);--bg-active:var(--bui-bg-neutral-4-pressed)}.oswl8eimGwGMv65g[data-variant=tertiary][data-disabled=true]{--bg-hover:var(--bg);--bg-active:var(--bg);--fg:var(--bui-fg-disabled)}.oswl8eimGwGMv65g[data-variant=tertiary][data-ispending=true]{--bg-hover:var(--bg);--bg-active:var(--bg);--fg:var(--bui-fg-disabled)}.oswl8eimGwGMv65g[data-variant=tertiary][data-focus-visible]{box-shadow:inset 0 0 0 2px var(--bui-ring);outline:none;transition:none}.oswl8eimGwGMv65g[data-size=small]{width:2rem;height:2rem}.oswl8eimGwGMv65g[data-size=small] svg{width:1rem;height:1rem}.oswl8eimGwGMv65g[data-size=medium]{width:2.5rem;height:2.5rem}.oswl8eimGwGMv65g[data-size=medium] svg{width:1.25rem;height:1.25rem}.nupI988ZoWQXN2ow{width:100%;height:100%;transition:opacity var(--loading-duration)ease-out;justify-content:center;align-items:center;display:inline-flex}.oswl8eimGwGMv65g[data-ispending=true] .nupI988ZoWQXN2ow{opacity:0}.S0ip8O7B0EhQCtAt{opacity:0;transition:opacity var(--loading-duration)ease-in;display:flex;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.oswl8eimGwGMv65g[data-ispending=true] .S0ip8O7B0EhQCtAt{opacity:1}.S0ip8O7B0EhQCtAt svg{animation:1s linear infinite wvp018_1ftcIUJUQ}@media (prefers-reduced-motion:reduce){.oswl8eimGwGMv65g,.nupI988ZoWQXN2ow,.S0ip8O7B0EhQCtAt{transition-duration:50ms}.S0ip8O7B0EhQCtAt svg{animation:none}}@keyframes wvp018_1ftcIUJUQ{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.RH6vZOMUe3ozH13w{gap:var(--bui-space-2);flex-wrap:wrap;display:flex}.RbVv4ECvOgnU1Dwb{color:var(--bui-fg-primary);background-color:var(--bui-bg-neutral-2);border-radius:var(--bui-radius-2);font-weight:var(--bui-font-weight-regular);justify-content:center;align-items:center;gap:var(--bui-space-1);box-sizing:border-box;transition-property:background-color,box-shadow,color;transition-duration:.2s;transition-timing-function:ease-in-out;display:flex}.RbVv4ECvOgnU1Dwb[data-size=small]{height:26px;padding:0 var(--bui-space-2);font-size:var(--bui-font-size-1)}.RbVv4ECvOgnU1Dwb[data-size=medium]{height:32px;padding:0 var(--bui-space-2);font-size:var(--bui-font-size-2)}.RbVv4ECvOgnU1Dwb[data-hovered]{background-color:var(--bui-bg-neutral-3);cursor:pointer}.RbVv4ECvOgnU1Dwb[data-focus-visible]{outline:2px solid var(--bui-ring);outline-offset:1px}.RbVv4ECvOgnU1Dwb[data-selected]{box-shadow:inset 0 0 0 1px var(--bui-fg-secondary)}.RbVv4ECvOgnU1Dwb[data-disabled]{color:var(--bui-fg-disabled);cursor:not-allowed}.l9zJlYdsd_AvoCWG{cursor:pointer;color:var(--bui-fg-primary);background-color:transparent;border:none;width:1rem;height:1rem;margin:0;padding:0}.APxTgEybjsYQrIC6{justify-content:center;align-items:center;transition:color .2s ease-in-out;display:flex}.APxTgEybjsYQrIC6 svg{width:1rem;height:1rem}}@layer utilities;
|
|
2
|
-
/*# sourceMappingURL=
|
|
2
|
+
/*# sourceMappingURL=5954.5954.8056ed76.css.map*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static/
|
|
1
|
+
{"version":3,"file":"static/5954.5954.8056ed76.css","sources":["webpack://techdocs-cli-embedded-app/../ui/src/components/ButtonIcon/ButtonIcon.module.css","webpack://techdocs-cli-embedded-app/../ui/src/components/TagGroup/TagGroup.module.css"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@layer tokens, base, components, utilities;\n\n@layer components {\n .bui-ButtonIcon {\n --loading-duration: 200ms;\n --bg: transparent;\n --bg-hover: transparent;\n --bg-active: transparent;\n --fg: inherit;\n\n position: relative;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: none;\n user-select: none;\n padding: 0;\n cursor: pointer;\n border-radius: var(--bui-radius-2);\n flex-shrink: 0;\n transition: background-color var(--loading-duration) ease-out,\n box-shadow var(--loading-duration) ease-out;\n\n /* Apply variables */\n color: var(--fg);\n background-color: var(--bg);\n\n &:hover {\n background-color: var(--bg-hover);\n transition: background-color 150ms ease;\n }\n\n &:active {\n background-color: var(--bg-active);\n }\n\n &[data-disabled='true'] {\n cursor: not-allowed;\n }\n\n &[data-ispending='true'] {\n cursor: wait;\n }\n }\n\n .bui-ButtonIcon[data-variant='primary'] {\n --bg: var(--bui-bg-solid);\n --bg-hover: var(--bui-bg-solid-hover);\n --bg-active: var(--bui-bg-solid-pressed);\n --fg: var(--bui-fg-solid);\n\n &[data-disabled='true'],\n &[data-ispending='true'] {\n --bg: var(--bui-bg-solid-disabled);\n --bg-hover: var(--bui-bg-solid-disabled);\n --bg-active: var(--bui-bg-solid-disabled);\n --fg: var(--bui-fg-solid-disabled);\n }\n\n &[data-focus-visible] {\n outline: 2px solid var(--bui-ring);\n outline-offset: 2px;\n }\n }\n\n .bui-ButtonIcon[data-variant='secondary'] {\n --bg: var(--bui-bg-neutral-1);\n --bg-hover: var(--bui-bg-neutral-1-hover);\n --bg-active: var(--bui-bg-neutral-1-pressed);\n --fg: var(--bui-fg-primary);\n\n &[data-on-bg='neutral-1'] {\n --bg: var(--bui-bg-neutral-2);\n --bg-hover: var(--bui-bg-neutral-2-hover);\n --bg-active: var(--bui-bg-neutral-2-pressed);\n }\n\n &[data-on-bg='neutral-2'] {\n --bg: var(--bui-bg-neutral-3);\n --bg-hover: var(--bui-bg-neutral-3-hover);\n --bg-active: var(--bui-bg-neutral-3-pressed);\n }\n\n &[data-on-bg='neutral-3'] {\n --bg: var(--bui-bg-neutral-4);\n --bg-hover: var(--bui-bg-neutral-4-hover);\n --bg-active: var(--bui-bg-neutral-4-pressed);\n }\n\n &[data-disabled='true'],\n &[data-ispending='true'] {\n --bg-hover: var(--bg);\n --bg-active: var(--bg);\n --fg: var(--bui-fg-disabled);\n }\n\n &[data-focus-visible] {\n outline: none;\n transition: none;\n box-shadow: inset 0 0 0 2px var(--bui-ring);\n }\n }\n\n .bui-ButtonIcon[data-variant='tertiary'] {\n --bg-hover: var(--bui-bg-neutral-1-hover);\n --bg-active: var(--bui-bg-neutral-1-pressed);\n --fg: var(--bui-fg-primary);\n\n &[data-on-bg='neutral-1'] {\n --bg-hover: var(--bui-bg-neutral-2-hover);\n --bg-active: var(--bui-bg-neutral-2-pressed);\n }\n\n &[data-on-bg='neutral-2'] {\n --bg-hover: var(--bui-bg-neutral-3-hover);\n --bg-active: var(--bui-bg-neutral-3-pressed);\n }\n\n &[data-on-bg='neutral-3'] {\n --bg-hover: var(--bui-bg-neutral-4-hover);\n --bg-active: var(--bui-bg-neutral-4-pressed);\n }\n\n &[data-disabled='true'],\n &[data-ispending='true'] {\n --bg-hover: var(--bg);\n --bg-active: var(--bg);\n --fg: var(--bui-fg-disabled);\n }\n\n &[data-focus-visible] {\n outline: none;\n transition: none;\n box-shadow: inset 0 0 0 2px var(--bui-ring);\n }\n }\n\n .bui-ButtonIcon[data-size='small'] {\n width: 2rem;\n height: 2rem;\n\n svg {\n width: 1rem;\n height: 1rem;\n }\n }\n\n .bui-ButtonIcon[data-size='medium'] {\n width: 2.5rem;\n height: 2.5rem;\n\n svg {\n width: 1.25rem;\n height: 1.25rem;\n }\n }\n\n .bui-ButtonIconContent {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n transition: opacity var(--loading-duration) ease-out;\n\n .bui-ButtonIcon[data-ispending='true'] & {\n opacity: 0;\n }\n }\n\n .bui-ButtonIconSpinner {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n display: flex;\n opacity: 0;\n transition: opacity var(--loading-duration) ease-in;\n\n .bui-ButtonIcon[data-ispending='true'] & {\n opacity: 1;\n }\n\n & svg {\n animation: bui-spin 1s linear infinite;\n }\n }\n\n @media (prefers-reduced-motion: reduce) {\n .bui-ButtonIcon {\n transition-duration: 50ms;\n }\n\n .bui-ButtonIconContent {\n transition-duration: 50ms;\n }\n\n .bui-ButtonIconSpinner {\n transition-duration: 50ms;\n }\n\n .bui-ButtonIconSpinner svg {\n animation: none;\n }\n }\n\n @keyframes bui-spin {\n from {\n transform: rotate(0deg);\n }\n\n to {\n transform: rotate(360deg);\n }\n }\n}\n","/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@layer tokens, base, components, utilities;\n\n@layer components {\n .bui-TagList {\n display: flex;\n flex-wrap: wrap;\n gap: var(--bui-space-2);\n }\n\n .bui-Tag {\n color: var(--bui-fg-primary);\n background-color: var(--bui-bg-neutral-2);\n border-radius: var(--bui-radius-2);\n display: flex;\n align-items: center;\n justify-content: center;\n font-weight: var(--bui-font-weight-regular);\n gap: var(--bui-space-1);\n transition-property: background-color, box-shadow, color;\n transition-duration: 0.2s;\n transition-timing-function: ease-in-out;\n box-sizing: border-box;\n }\n\n .bui-Tag[data-size='small'] {\n height: 26px;\n padding: 0 var(--bui-space-2);\n font-size: var(--bui-font-size-1);\n }\n\n .bui-Tag[data-size='medium'] {\n height: 32px;\n padding: 0 var(--bui-space-2);\n font-size: var(--bui-font-size-2);\n }\n\n .bui-Tag[data-hovered] {\n background-color: var(--bui-bg-neutral-3);\n cursor: pointer;\n }\n\n .bui-Tag[data-focus-visible] {\n outline: 2px solid var(--bui-ring);\n outline-offset: 1px;\n }\n\n .bui-Tag[data-selected] {\n box-shadow: inset 0 0 0 1px var(--bui-fg-secondary);\n }\n\n .bui-Tag[data-disabled] {\n color: var(--bui-fg-disabled);\n cursor: not-allowed;\n }\n\n .bui-TagRemoveButton {\n background-color: transparent;\n border: none;\n cursor: pointer;\n color: var(--bui-fg-primary);\n padding: 0;\n margin: 0;\n width: 1rem;\n height: 1rem;\n }\n\n .bui-TagIcon {\n display: flex;\n align-items: center;\n justify-content: center;\n transition: color 0.2s ease-in-out;\n\n svg {\n width: 1rem;\n height: 1rem;\n }\n }\n}\n"],"names":[],"mappings":"AAgBA,qCAGE,kgBAwBE,0FAKA,2DAIA,yDAIA,mDAKF,uKAME,maAQA,iHAMF,uLAME,kLAMA,kLAMA,kLAMA,2QAOA,sIAOF,yJAKE,oJAKA,oJAKA,oJAKA,yQAOA,qIAOF,0DAIE,8DAMF,+DAIE,qEAMF,0JAQE,mEAKF,6JASE,mEAIA,oEAKF,uCACE,+EAYA,sCAKF,gFC3MA,qEAMA,6XAeA,6GAMA,8GAMA,wFAKA,2FAKA,oFAIA,iFAKA,gJAWA,0GAME,8CDxEJ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunktechdocs_cli_embedded_app=self.webpackChunktechdocs_cli_embedded_app||[]).push([["5954"],{6033(e,t,i){var n,a;i.d(t,{D:()=>n}),(a=n||(n={})).Direction={TOP_BOTTOM:"TB",BOTTOM_TOP:"BT",LEFT_RIGHT:"LR",RIGHT_LEFT:"RL"},a.Alignment={UP_LEFT:"UL",UP_RIGHT:"UR",DOWN_LEFT:"DL",DOWN_RIGHT:"DR"},a.Ranker={NETWORK_SIMPLEX:"network-simplex",TIGHT_TREE:"tight-tree",LONGEST_PATH:"longest-path"},a.LabelPosition={LEFT:"l",RIGHT:"r",CENTER:"c"}},280(e,t,i){i.d(t,{m:()=>d,v:()=>p});var n=i(31085),a=i(29365),r=i(71677),s=i(72501),o=i(58837),l=i(55940);let c=(0,o.A)(()=>({icon:{color:"#f3ba37",cursor:"pointer",display:"inline-flex"},iconBorder:{color:"inherit",cursor:"pointer",display:"inline-flex"}}),{name:"BackstageFavoriteToggleIcon"});function d(e){let{isFavorite:t}=e,i=c();return(0,n.jsx)(s.A,{component:"span",className:t?i.icon:i.iconBorder,children:t?(0,n.jsx)(l.Gg,{}):(0,n.jsx)(l.KG,{})})}function p(e){let{id:t,title:i,isFavorite:s,onToggle:o,...l}=e;return(0,n.jsx)(r.Ay,{id:t,title:i,children:(0,n.jsx)(a.A,{"aria-label":i,id:t,onClick:()=>o(!s),color:"inherit",...l,children:(0,n.jsx)(d,{isFavorite:s})})})}},27231(e,t,i){i.d(t,{S:()=>p});var n=i(31085),a=i(42899),r=i(58837),s=i(268),o=i(72501),l=i(60603);let c=(0,r.A)(e=>({root:{textAlign:"left"},label:{color:e.page.fontColor,fontWeight:e.typography.fontWeightBold,letterSpacing:0,fontSize:e.typography.fontSize,marginBottom:e.spacing(1)/2,lineHeight:1},value:{color:(0,s.X4)(e.page.fontColor,.8),fontSize:e.typography.fontSize,lineHeight:1}}),{name:"BackstageHeaderLabel"}),d=({value:e,className:t,typographyRootComponent:i})=>(0,n.jsx)(o.A,{component:i??("string"==typeof e?"p":"span"),className:t,children:e});function p(e){let{label:t,value:i,url:r,contentTypograpyRootComponent:s}=e,p=c(),u=(0,n.jsx)(d,{className:p.value,value:i||"<Unknown>",typographyRootComponent:s});return(0,n.jsx)(a.A,{item:!0,children:(0,n.jsxs)(o.A,{component:"span",className:p.root,children:[(0,n.jsx)(o.A,{className:p.label,children:t}),r?(0,n.jsx)(l.N_,{to:r,children:u}):u]})})}},32725(e,t,i){i.d(t,{a:()=>d});var n=i(31085),a=i(14041),r=i(57873),s=i(64623),o=i(63690),l=i(68133);let c=(0,i(48119).p)()({styles:{"bui-ButtonIcon":"oswl8eimGwGMv65g","bui-ButtonIconContent":"nupI988ZoWQXN2ow","bui-ButtonIconSpinner":"S0ip8O7B0EhQCtAt","bui-spin":"wvp018_1ftcIUJUQ"},classNames:{root:"bui-ButtonIcon",content:"bui-ButtonIconContent",spinner:"bui-ButtonIconSpinner"},bg:"consumer",propDefs:{size:{dataAttribute:!0,default:"small"},variant:{dataAttribute:!0,default:"primary"},isPending:{dataAttribute:!0},loading:{dataAttribute:!0},icon:{},className:{}}}),d=(0,a.forwardRef)((e,t)=>{let{ownProps:i,restProps:a,dataAttributes:d}=(0,l.Z)(c,{...e,isPending:!!e.isPending||!!e.loading||(e.isPending??e.loading)}),{classes:p,icon:u,isPending:g}=i;return(0,n.jsx)(r.$,{className:p.root,ref:t,isPending:g,...d,...a,children:({isPending:e})=>(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("span",{className:p.content,children:u}),e&&(0,n.jsx)(s.z,{"aria-label":"Loading",isIndeterminate:!0,className:p.spinner,children:(0,n.jsx)(o.xNY,{"aria-hidden":"true"})})]})})});d.displayName="ButtonIcon"},43151(e,t,i){i.d(t,{q:()=>eN});var n=i(31085),a=i(98197),r=i(76028),s=i(14041),o=i(58077),l=i(11773),c=i(55489),d=i(97673),p=i(60603);let u=(0,s.lazy)(()=>Promise.all([i.e("1435"),i.e("7632")]).then(i.bind(i,6659)).then(e=>({default:e.DependencyGraph})));function g(e){return(0,n.jsx)(s.Suspense,{fallback:(0,n.jsx)("div",{}),children:(0,n.jsx)(u,{...e})})}var h=i(6033),m=i(50509),f=i(81219),x=i(91189),y=i(13408),j=i(69749),b=i(58837),v=i(53373),w=i.n(v),T=i(18690),k=i(73466),E=i(76272),N=i(15448),L=i(76355);let S=i(10437).A;function A(e){let t,i,{kind:a,entityRef:r,...s}=e,l=(t=(0,x.n)(),(i=function(e,t){if(e)return e.toLocaleLowerCase("en-US");if(t)try{return(0,o.KU)(t).kind.toLocaleLowerCase("en-US")}catch{}}(a,r))&&t.getSystemIcon(`kind:${i}`)||S);return(0,n.jsx)(l,{...s})}var C=i(79811),R=i(89595);let D=(0,b.A)(e=>({node:{fill:e.palette.grey[300],stroke:e.palette.grey[300],"&.primary":{fill:e.palette.primary.light,stroke:e.palette.primary.light},"&.secondary":{fill:e.palette.secondary.light,stroke:e.palette.secondary.light}},text:{fill:e.palette.getContrastText(e.palette.grey[300]),"&.primary":{fill:e.palette.primary.contrastText},"&.secondary":{fill:e.palette.secondary.contrastText},"&.focused":{fontWeight:"bold"}},clickable:{cursor:"pointer"}}));function I({node:e}){let t=D(),i=(0,T.useNavigate)(),a=(0,f.S)(N.s),[r,o]=(0,s.useState)(0),[c,d]=(0,s.useState)(0),p=(0,x.n)(),u=(0,s.useRef)(null);(0,s.useLayoutEffect)(()=>{if(u.current){let{height:e,width:t}=u.current.getBBox();e=Math.round(e),t=Math.round(t),(e!==c||t!==r)&&(o(t),d(e))}},[r,c]);let g=p.getSystemIcon(`kind:${e.kind.toLocaleLowerCase("en-US")}`),h=g?c+10:0,m=c+20,{primaryTitle:y}=(0,L.f)(e);return(0,n.jsxs)("g",{onClick:()=>{i(a({kind:e.kind,namespace:e.metadata.namespace||l.oQ,name:e.metadata.name}))},className:t.clickable,children:[(0,n.jsx)("rect",{className:w()(t.node,e.root?"secondary":"primary"),width:h+r+20,height:m,rx:10}),g&&(0,n.jsx)(A,{kind:e.kind,y:10,x:10,width:c,height:c,className:w()(t.text,e.root?"secondary":"primary")}),(0,n.jsx)("text",{ref:u,className:w()(t.text,e.root?"secondary":"primary"),y:m/2,x:h+(r+20)/2,textAnchor:"middle",alignmentBaseline:"middle",children:y})]})}function P(e){let{loading:t,error:i,nodes:a,edges:r}=function(e){let t=(0,m.gf)(E.v),i=(0,o.U2)(e),{loading:n,error:a,value:r}=(0,k.A)(async()=>{let e=await t.getEntityAncestors({entityRef:i}),n=[],a=[];for(let t of e.items){let i=(0,o.U2)(t.entity),r=i===e.rootEntityRef;for(let e of(n.push({id:i,root:r,...t.entity}),t.parentEntityRefs))a.push({from:i,to:e})}return{nodes:n,edges:a}},[i]);return{loading:n,error:a,nodes:r?.nodes||[],edges:r?.edges||[]}}(e.entity),{t:s}=(0,R.i)(C.j);return t?(0,n.jsx)(c.k,{}):i?(0,n.jsx)(d._,{error:i}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(y.a,{mb:"2",children:(0,n.jsx)(j.E,{as:"p",children:s("inspectEntityDialog.ancestryPage.description",{processorsLink:(0,n.jsx)(p.N_,{to:"https://backstage.io/docs/features/software-catalog/life-of-an-entity",children:s("inspectEntityDialog.ancestryPage.processorsLink")})})})}),(0,n.jsx)(y.a,{mt:"8",children:(0,n.jsx)(g,{nodes:a,edges:r,renderNode:I,direction:h.D.Direction.BOTTOM_TOP,zoom:"enable-on-click"})})]})}var B=i(16263),O=i(40743),F=i(3438);let z=(0,b.A)({list:{listStyle:"none",margin:0,padding:0},indented:{paddingLeft:"var(--bui-space-4)"},listItem:{display:"flex",alignItems:"flex-start",marginTop:"var(--bui-space-1)",paddingLeft:"var(--bui-space-4)",fontFamily:"monospace",fontSize:"var(--bui-font-size-3)","&:first-child":{marginTop:0}}});function W(e){let t=z();return(0,n.jsx)("ul",{className:w()(t.list,e.indent&&t.indented,e.className),"aria-label":e["aria-label"],children:e.children})}function _(e){let t=z();return(0,n.jsx)("li",{className:t.listItem,children:e.children})}let $=(0,b.A)({header:{paddingLeft:"var(--bui-space-4)",marginTop:"var(--bui-space-4)",marginBottom:"var(--bui-space-4)"},headerLabel:{margin:0,fontFamily:"monospace",fontSize:"var(--bui-font-size-3)",fontWeight:"var(--bui-font-weight-regular)"},entityList:{marginTop:"var(--bui-space-4)"},headerValue:{margin:0,marginTop:"var(--bui-space-1)",fontFamily:"monospace",fontSize:"var(--bui-font-size-3)",overflow:"hidden",whiteSpace:"nowrap",textOverflow:"ellipsis"}});function U(e){let t=$(),{t:i}=(0,R.i)(C.j);return(0,n.jsxs)(n.Fragment,{children:[e.header&&(0,n.jsxs)("header",{className:t.header,children:[(0,n.jsx)("h4",{className:t.headerLabel,children:e.header[0]}),(0,n.jsx)("p",{className:t.headerValue,children:e.header[1]})]}),(0,n.jsx)(W,{"aria-label":i("inspectEntityDialog.colocatedPage.entityListAriaLabel"),className:t.entityList,children:e.entities.map(e=>(0,n.jsx)(_,{children:(0,n.jsx)(F.z,{entityRef:e})},(0,o.U2)(e)))})]})}function G(e){let{entity:t}=e,{t:i}=(0,R.i)(C.j),{loading:a,error:r,location:s,originLocation:l,colocatedEntities:p}=function(e){let t=(0,m.gf)(E.v),i=(0,o.U2)(e),n=e.metadata.annotations?.[B.Eo],a=e.metadata.annotations?.[B.r2],{loading:r,error:s,value:l}=(0,k.A)(async()=>n||a?(await t.getEntities({filter:[...n?[{[`metadata.annotations.${B.Eo}`]:n}]:[],...a?[{[`metadata.annotations.${B.r2}`]:a}]:[]]})).items:[],[n,a]);return{loading:r,error:s,location:n,originLocation:a,colocatedEntities:l?.filter(e=>(0,o.U2)(e)!==i)}}(t);if(a)return(0,n.jsx)(c.k,{});if(r)return(0,n.jsx)(d._,{error:r});if(!s&&!l)return(0,n.jsx)(O.F,{status:"warning",description:i("inspectEntityDialog.colocatedPage.alertNoLocation"),mt:"4"});if(!p?.length)return(0,n.jsx)(O.F,{status:"info",description:i("inspectEntityDialog.colocatedPage.alertNoEntity"),mt:"4"});if(s===l)return(0,n.jsx)(U,{entities:p});let u=p.filter(e=>e.metadata.annotations?.[B.Eo]===s),g=p.filter(e=>e.metadata.annotations?.[B.r2]===l);return(0,n.jsxs)(n.Fragment,{children:[u.length>0&&(0,n.jsx)(U,{entities:u,header:[i("inspectEntityDialog.colocatedPage.locationHeader"),s]}),g.length>0&&(0,n.jsx)(U,{entities:g,header:[i("inspectEntityDialog.colocatedPage.originHeader"),l]})]})}function M(e){let{t}=(0,R.i)(C.j);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(j.E,{as:"p",children:t("inspectEntityDialog.colocatedPage.description")}),(0,n.jsx)(G,{entity:e.entity})]})}var H=i(4809);function K(e){return Object.fromEntries([...Object.entries(e)].sort((e,t)=>e[0]<t[0]?-1:1))}function Y(e){let{t}=(0,R.i)(C.j);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(j.E,{as:"p",children:t("inspectEntityDialog.jsonPage.description")}),(0,n.jsx)("div",{"data-testid":"code-snippet",children:(0,n.jsx)(H.z,{text:JSON.stringify(K(e.entity),void 0,2),language:"json",showCopyCodeButton:!0})})]})}var Q=i(32725),V=i(82604),Z=i(33998),X=i(26438),q=i(73880),J=i(15784),ee=i(57873),et=i(63690),ei=i(68133),en=i(48119);let ea={"bui-TagList":"RH6vZOMUe3ozH13w","bui-Tag":"RbVv4ECvOgnU1Dwb","bui-TagRemoveButton":"l9zJlYdsd_AvoCWG","bui-TagIcon":"APxTgEybjsYQrIC6"},er=(0,en.p)()({styles:ea,classNames:{root:"bui-TagGroup",list:"bui-TagList"},propDefs:{items:{},children:{},renderEmptyState:{},className:{}}}),es=(0,en.p)()({styles:ea,classNames:{root:"bui-Tag",icon:"bui-TagIcon",removeButton:"bui-TagRemoveButton"},analytics:!0,propDefs:{noTrack:{},icon:{},size:{dataAttribute:!0,default:"small"},href:{},children:{},className:{}}});var eo=i(76435);let el=e=>{let{ownProps:t,restProps:i}=(0,ei.Z)(er,e),{classes:a,items:r,children:s,renderEmptyState:o}=t;return(0,n.jsx)(J.CR,{className:a.root,...i,children:(0,n.jsx)(J.LY,{className:a.list,items:r,renderEmptyState:o,children:s})})},ec=(0,s.forwardRef)((e,t)=>{let{ownProps:i,restProps:a,dataAttributes:r,analytics:s}=(0,ei.Z)(es,e),{classes:o,children:l,icon:c,href:d}=i,p="string"==typeof l?l:void 0;return(0,n.jsx)(J.vw,{ref:t,textValue:p,className:o.root,href:d,...r,...a,onPress:t=>{if(a.onPress?.(t),d){let t=e["aria-label"]??p??(0,eo.O)(l)??String(d);s.captureEvent("click",t,{attributes:{to:String(d)}})}},children:({allowsRemoving:e})=>(0,n.jsxs)(n.Fragment,{children:[c&&(0,n.jsx)("span",{className:o.icon,children:c}),l,e&&(0,n.jsx)(ee.$,{className:o.removeButton,slot:"remove",children:(0,n.jsx)(et.qFd,{size:16})})]})})});var ed=i(87809),ep=i.n(ed),eu=i(40074),eg=i.n(eu);let eh=(0,b.A)({headingWithIcon:{display:"flex",alignItems:"center"},definitionList:{margin:0,padding:0},definitionItem:{display:"flex",alignItems:"flex-start",marginTop:"var(--bui-space-4)",paddingLeft:"var(--bui-space-4)",fontFamily:"monospace",fontSize:"var(--bui-font-size-3)","&:first-child":{marginTop:0}},definitionContent:{flex:1,minWidth:0},definitionKey:{fontWeight:"bold"},definitionValue:{margin:0,marginTop:"var(--bui-space-1)",overflow:"hidden",whiteSpace:"nowrap",textOverflow:"ellipsis"},copyAction:{marginLeft:"var(--bui-space-2)",flexShrink:0},relationGroup:{"& + &":{marginTop:"var(--bui-space-4)"}},monospace:{fontFamily:"monospace"},sectionHeading:{marginTop:"var(--bui-space-3)"},metadataList:{marginTop:"var(--bui-space-2)"},relationList:{marginTop:"var(--bui-space-2)"},tagGroup:{marginTop:"var(--bui-space-3)",paddingLeft:"var(--bui-space-4)"}});function em(e){return e.map(([e,t])=>{let i=t.match(/^url:https?:\/\//)?t.slice(4):t.match(/^https?:\/\//)?t:void 0;return{key:e,value:i?(0,n.jsx)(p.N_,{to:i,children:t}):t}})}function ef({text:e,label:t}){let{t:i}=(0,R.i)(C.j),[a,r]=(0,s.useState)(!1),o=(0,s.useRef)();(0,s.useEffect)(()=>()=>clearTimeout(o.current),[]);let l=async()=>{try{await window.navigator.clipboard.writeText(e),r(!0),o.current=setTimeout(()=>r(!1),2e3)}catch{}};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(Q.a,{icon:a?(0,n.jsx)(et.s0,{}):(0,n.jsx)(et.NGz,{}),"aria-label":i("inspectEntityDialog.overviewPage.copyAriaLabel",{label:t}),variant:"tertiary",size:"small",onPress:l}),(0,n.jsx)(V.s,{role:"status",children:a?i("inspectEntityDialog.overviewPage.copiedStatus"):""})]})}function ex(e){let{t}=(0,R.i)(C.j);return(0,n.jsx)(Z.v,{href:e.to,target:"_blank",rel:"noopener noreferrer",variant:"tertiary",size:"small",iconStart:(0,n.jsx)(et.Kt4,{}),"aria-label":t("inspectEntityDialog.overviewPage.helpLinkAriaLabel")})}function ey(e){let t=eh();return(0,n.jsxs)(X.Zp,{children:[(0,n.jsx)(X.aR,{children:(0,n.jsxs)(j.E,{variant:"title-x-small",as:"h3",className:e.helpLink?t.headingWithIcon:void 0,children:[e.title,e.helpLink&&(0,n.jsx)(ex,{to:e.helpLink})]})}),(0,n.jsx)(X.bw,{children:e.children})]})}function ej(e){let t=eh();return(0,n.jsx)(j.E,{variant:"body-large",as:"h4",className:w()(t.headingWithIcon,e.className),children:e.children})}function eb(e){let t=eh();return(0,n.jsx)("dl",{className:w()(t.definitionList,e.className),"aria-label":e["aria-label"],children:e.items.map(e=>(0,n.jsxs)("div",{className:t.definitionItem,children:[(0,n.jsxs)("div",{className:t.definitionContent,children:[(0,n.jsx)("dt",{className:t.definitionKey,children:e.key}),(0,n.jsx)("dd",{className:t.definitionValue,children:e.value})]}),e.copyable&&"string"==typeof e.value&&(0,n.jsx)("div",{className:t.copyAction,children:(0,n.jsx)(ef,{text:e.value,label:e.key})})]},e.key))})}function ev(e){let t=eh(),{apiVersion:i,kind:a,metadata:r,spec:s,relations:l=[],status:c={}}=e.entity,d=ep()(eg()(l,e=>e.targetRef),"type"),{t:p}=(0,R.i)(C.j),u=(0,o.U2)(e.entity);return(0,n.jsxs)(q.s,{direction:"column",gap:"4",children:[(0,n.jsx)(ey,{title:p("inspectEntityDialog.overviewPage.identity.title"),children:(0,n.jsx)(eb,{"aria-label":p("inspectEntityDialog.overviewPage.identity.title"),items:[{key:"apiVersion",value:i},{key:"kind",value:a},...s?.type?[{key:"spec.type",value:s.type.toString()}]:[],...r.uid?[{key:"uid",value:r.uid,copyable:!0}]:[],...r.etag?[{key:"etag",value:r.etag,copyable:!0}]:[],{key:"entityRef",value:u,copyable:!0}]})}),(0,n.jsxs)(ey,{title:p("inspectEntityDialog.overviewPage.metadata.title"),children:[!!Object.keys(r.annotations||{}).length&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(ej,{children:[p("inspectEntityDialog.overviewPage.annotations"),(0,n.jsx)(ex,{to:"https://backstage.io/docs/features/software-catalog/well-known-annotations"})]}),(0,n.jsx)(eb,{items:em(Object.entries(r.annotations)),"aria-label":p("inspectEntityDialog.overviewPage.annotations"),className:t.metadataList})]}),!!Object.keys(r.labels||{}).length&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(ej,{className:t.sectionHeading,children:p("inspectEntityDialog.overviewPage.labels")}),(0,n.jsx)(eb,{items:em(Object.entries(r.labels)),"aria-label":p("inspectEntityDialog.overviewPage.labels"),className:t.metadataList})]}),!!r.tags?.length&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(ej,{className:t.sectionHeading,children:p("inspectEntityDialog.overviewPage.tags")}),(0,n.jsx)(el,{"aria-label":p("inspectEntityDialog.overviewPage.tags"),className:t.tagGroup,children:r.tags.map(e=>(0,n.jsx)(ec,{id:e,children:e},e))})]})]}),!!l.length&&(0,n.jsx)(ey,{title:p("inspectEntityDialog.overviewPage.relation.title"),helpLink:"https://backstage.io/docs/features/software-catalog/well-known-relations",children:Object.entries(d).map(([e,i])=>(0,n.jsxs)("div",{className:t.relationGroup,children:[(0,n.jsx)(ej,{className:t.monospace,children:e}),(0,n.jsx)(W,{"aria-label":e,className:t.relationList,children:i.map(e=>(0,n.jsx)(_,{children:(0,n.jsx)(F.z,{entityRef:e.targetRef})},e.targetRef))})]},e))}),!!c.items?.length&&(0,n.jsx)(ey,{title:p("inspectEntityDialog.overviewPage.status.title"),helpLink:"https://backstage.io/docs/features/software-catalog/well-known-statuses",children:c.items.map((e,t)=>(0,n.jsxs)("div",{children:[(0,n.jsxs)(j.E,{children:[e.level,": ",e.type]}),(0,n.jsx)(y.a,{ml:"4",children:e.message})]},t))})]})}var ew=i(64402);function eT(e){let{t}=(0,R.i)(C.j);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(j.E,{as:"p",children:t("inspectEntityDialog.yamlPage.description")}),(0,n.jsx)("div",{"data-testid":"code-snippet",children:(0,n.jsx)(H.z,{text:ew.Ay.stringify(K(e.entity)),language:"yaml",showCopyCodeButton:!0})})]})}let ek=["overview","ancestry","colocated","json","yaml"];function eE(e){let{entity:t,initialTab:i,onSelect:o}=e,{t:l}=(0,R.i)(C.j),c=(0,s.useMemo)(()=>({overview:l("inspectEntityDialog.tabNames.overview"),ancestry:l("inspectEntityDialog.tabNames.ancestry"),colocated:l("inspectEntityDialog.tabNames.colocated"),json:l("inspectEntityDialog.tabNames.json"),yaml:l("inspectEntityDialog.tabNames.yaml")}),[l]),d={overview:(0,n.jsx)(ev,{entity:t}),ancestry:(0,n.jsx)(P,{entity:t}),colocated:(0,n.jsx)(M,{entity:t}),json:(0,n.jsx)(Y,{entity:t}),yaml:(0,n.jsx)(eT,{entity:t})};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.c7,{children:l("inspectEntityDialog.title")}),(0,n.jsx)(a.R4,{children:(0,n.jsxs)(r.tU,{defaultSelectedKey:i||"overview",onSelectionChange:e=>o?.(e),children:[(0,n.jsx)(r.wb,{"aria-label":l("inspectEntityDialog.tabsAriaLabel"),children:ek.map(e=>(0,n.jsx)(r.oz,{id:e,children:c[e]},e))}),ek.map(e=>(0,n.jsx)(r.Kp,{id:e,children:d[e]},e))]})})]})}function eN(e){let{open:t,entity:i,initialTab:r,onClose:s,onSelect:o}=e;return i?(0,n.jsx)(a.lG,{isOpen:t,onOpenChange:e=>!e&&s(),width:"940px",height:"100vh",children:t&&(0,n.jsx)(eE,{entity:i,initialTab:r,onSelect:o})}):null}},15542(e,t,i){i.d(t,{w:()=>l});var n=i(58077),a=i(50509),r=i(14041),s=i(769);function o(e){return"string"==typeof e?e:(0,n.U2)(e)}function l(e){let t=(0,a.gf)(s.a),[i,n]=(0,r.useState)(!1);return(0,r.useEffect)(()=>{let i=t.starredEntitie$().subscribe({next(t){n(t.has(o(e)))}});return()=>{i.unsubscribe()}},[e,t]),{toggleStarredEntity:(0,r.useCallback)(()=>t.toggleStarred(o(e)).then(),[e,t]),isStarredEntity:i}}},12307(e,t,i){i.d(t,{Q:()=>u});var n=i(31085),a=i(70205),r=i(89595),s=i(19654),o=i(32725),l=i(63690),c=i(50010);function d(e){let{icon:t,useProps:i}=e.data,{title:a,disabled:r,onClick:o,...l}=i(),c=o?()=>{let e=o();e&&e.catch(()=>{})}:void 0;return"href"in l?(0,n.jsx)(s.Dr,{iconStart:t,href:l.href,onAction:c,isDisabled:r,children:a}):(0,n.jsx)(s.Dr,{iconStart:t,onAction:c,isDisabled:r,children:a})}function p(e){return(0,n.jsx)(a.u,{node:e.item.node,children:(0,n.jsx)(d,{data:e.item.data})})}function u(e){let{UNSTABLE_extraContextMenuItems:t,contextMenuItems:i}=e,{t:a}=(0,r.i)(c.W);return(0,n.jsxs)(s.cQ,{children:[(0,n.jsx)(o.a,{variant:"secondary",icon:(0,n.jsx)(l.BlR,{}),"aria-label":a("entityContextMenu.moreButtonAriaLabel")}),(0,n.jsxs)(s.W1,{placement:"bottom end",children:[t?.map((e,t)=>(0,n.jsx)(s.Dr,{iconStart:(0,n.jsx)(e.Icon,{}),onAction:()=>e.onClick(),children:e.title},`${e.title}-${t}`)),t?.length&&i?.length?(0,n.jsx)(s.bX,{}):null,i?.map(e=>(0,n.jsx)(p,{item:e},e.node.spec.id))]})]})}},7221(e,t,i){i.d(t,{d:()=>s,n:()=>o});var n=i(65605),a=i(62335);let r="plugin.catalog.entityLayoutRoute",s=()=>null;function o(e,t){return(0,a.O)(e,e=>e.selectByComponentData({key:r,withStrictError:"Child of EntityLayout must be an EntityLayout.Route"}).getElements().flatMap(({props:e})=>t&&(!e.if||e.if(t))?[{path:e.path,title:e.title,group:e.group,icon:e.icon,children:e.children}]:[]),[t])}(0,n.h)(s,r,!0),(0,n.h)(s,"core.gatherMountPoints",!0)},86793(e,t,i){i.r(t),i.d(t,{EntityLayout:()=>Y});var n=i(31085),a=i(48209),r=i(90615),s=i(89595),o=i(12439),l=i(55489),c=i(84391),d=i(87187),p=i(60603),u=i(15448),g=i(22845),h=i(50010),m=i(14041),f=i(73657),x=i(73466),y=i(58837),j=i(77125),b=i(4103),v=i(70111),w=i(50509),T=i(11773),k=i(26958),E=i(58077),N=i(15542),L=i(79811),S=i(280);let A=e=>{let{toggleStarredEntity:t,isStarredEntity:i}=(0,N.w)(e.entity),{t:a}=(0,s.i)(L.j),r=a(i?"favoriteEntity.removeFromFavorites":"favoriteEntity.addToFavorites"),o=`favorite-${(0,E.U2)(e.entity).replace(/[^a-zA-Z0-9-_]/g,"-")}`;return(0,n.jsx)(S.v,{title:r,id:o,isFavorite:i,onToggle:t,...e})};var C=i(76272),R=i(3438),D=i(43151),I=i(27231),P=i(49185),B=i(53320),O=i(53987);function F(e){let{entity:t}=e,i=(0,B.t)(t,P.vv),{t:a}=(0,s.i)(h.W);return(0,n.jsxs)(n.Fragment,{children:[i.length>0&&(0,n.jsx)(I.S,{label:a("entityLabels.ownerLabel"),contentTypograpyRootComponent:"p",value:(0,n.jsx)(O.i,{entityRefs:i,defaultKind:"Group",color:"inherit"})}),t.spec?.lifecycle&&(0,n.jsx)(I.S,{label:a("entityLabels.lifecycleLabel"),value:t.spec.lifecycle?.toString()})]})}var z=i(12307);function W(e,t,i,n){let a,r=e??n?.kind??"",s=t??n?.metadata.namespace??"",o=n?.metadata.title??i??n?.metadata.name??"";return{headerTitle:`${o}${s&&s!==T.oQ?` in ${s}`:""}`,headerType:(a=r.toLocaleLowerCase("en-US"),n&&n.spec&&"type"in n.spec&&(a+=" — ",a+=n.spec.type.toLocaleLowerCase("en-US")),a)}}function _(e=[],t=[]){for(let i of t){let t=e.find(e=>e.type===i);if(t)return t}return null}let $=(0,y.A)(e=>({breadcrumbs:{color:e.page.fontColor,fontSize:e.typography.caption.fontSize,textTransform:"uppercase",marginTop:e.spacing(1),opacity:.8,"& span ":{color:e.page.fontColor,textDecoration:"underline",textUnderlineOffset:"3px"}}}));function U(){let{entity:e}=(0,g.TY)(),{kind:t,namespace:i,name:a}=(0,r.K)(u.s),{headerTitle:s}=W(t,i,a,e);return(0,n.jsxs)(j.A,{display:"inline-flex",alignItems:"center",height:"1em",maxWidth:"100%",children:[(0,n.jsx)(j.A,{component:"span",textOverflow:"ellipsis",whiteSpace:"nowrap",overflow:"hidden",children:e?(0,n.jsx)(k.d,{entityRef:e,hideIcon:!0}):s}),e&&(0,n.jsx)(A,{entity:e})]})}function G(e){let{parentEntityRelations:t}=e,i=$(),{entity:a}=(0,g.TY)(),{name:s}=(0,r.K)(u.s),o=_(a?.relations??[],t??[]),l=(0,w.gf)(C.v),{value:c}=(0,x.A)(async()=>o?_((await l.getEntityByRef(o?.targetRef))?.relations,t):null,[o,l]);return o?(0,n.jsxs)(b.B,{separator:">",className:i.breadcrumbs,children:[c&&(0,n.jsx)(R.z,{entityRef:c.targetRef,disableTooltip:!0}),(0,n.jsx)(R.z,{entityRef:o.targetRef,disableTooltip:!0}),s]}):null}function M(e){let{UNSTABLE_extraContextMenuItems:t,contextMenuItems:i,parentEntityRelations:a,title:s,subtitle:o}=e,{entity:l}=(0,g.TY)(),{kind:c,namespace:d,name:p}=(0,r.K)(u.s),{headerTitle:h,headerType:x}=W(c,d,p,l),[y,j]=(0,f.useSearchParams)(),b=y.get("inspect"),w=(0,m.useCallback)(e=>j(`inspect=${e}`),[j]),T=(0,m.useCallback)(()=>j(),[j]);return(0,n.jsx)(v.Y,{pageTitleOverride:h,type:x,title:s??(0,n.jsx)(U,{}),subtitle:o??(0,n.jsx)(G,{parentEntityRelations:a}),children:l&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(F,{entity:l}),(0,n.jsx)(z.Q,{UNSTABLE_extraContextMenuItems:t,contextMenuItems:i}),(0,n.jsx)(D.q,{entity:l,initialTab:b||void 0,open:"string"==typeof b,onClose:T,onSelect:w})]})})}var H=i(63156),K=i(7221);let Y=e=>{let{UNSTABLE_extraContextMenuItems:t,contextMenuItems:i,children:m,header:f,NotFoundComponent:x,parentEntityRelations:y,groupDefinitions:j,defaultContentOrder:b,showNavItemIcons:v}=e,{kind:w}=(0,r.K)(u.s),{entity:T,loading:k,error:E}=(0,g.TY)(),N=(0,K.n)(m,T),{t:L}=(0,s.i)(h.W);return(0,n.jsxs)(o.Y,{themeId:T?.spec?.type?.toString()??"home",children:[f??(0,n.jsx)(M,{parentEntityRelations:y,UNSTABLE_extraContextMenuItems:t,contextMenuItems:i}),k&&(0,n.jsx)(l.k,{}),T&&(0,n.jsx)(H.s,{routes:N,groupDefinitions:j,defaultContentOrder:b,showIcons:v}),E&&(0,n.jsx)(c.U,{children:(0,n.jsx)(a.A,{severity:"error",children:E.toString()})}),!k&&!E&&!T&&(0,n.jsx)(c.U,{children:x||(0,n.jsx)(d.B,{title:L("entityLabels.warningPanelTitle"),children:L("entityPage.notFoundMessage",{kind:w,link:(0,n.jsx)(p.N_,{to:"https://backstage.io/docs/features/software-catalog/references",children:L("entityPage.notFoundLinkText")})})})})]})};Y.Route=K.d},63156(e,t,i){i.d(t,{s:()=>W,S:()=>z});var n=i(31085),a=i(14041),r=i(93285),s=i(18690),o=i(21613),l=i(51021),c=i(53373),d=i.n(c),p=i(58837);let u=(0,p.A)(e=>({root:{gridArea:"pageContent",minWidth:0,paddingTop:e.spacing(3),paddingBottom:e.spacing(3),paddingLeft:e.spacing(2),paddingRight:e.spacing(2),[e.breakpoints.up("sm")]:{paddingLeft:e.spacing(3),paddingRight:e.spacing(3)}},stretch:{display:"flex",flexDirection:"column",flexGrow:1},noPadding:{padding:0}}),{name:"EntityTabsPanel"});function g(e){let{className:t,stretch:i,noPadding:a,children:r,...s}=e,o=u();return(0,n.jsx)("article",{...s,className:d()(o.root,t,{[o.stretch]:i,[o.noPadding]:a}),children:r})}var h=i(77125),m=i(74953),f=i(89595),x=i(73657),y=i(72501),j=i(55197),b=i(11192),v=i(99703),w=i(7031),T=i(6924),k=i(64947),E=i(8109),N=i(46423),L=i(5951),S=i(58007),A=i(50509),C=i(80615);function R(e,t,i){if(i){if("string"==typeof e){let i=t.getIcon(e);return i?(0,n.jsx)(i,{}):void 0}return e}}let D=(0,a.forwardRef)(function(e,t){let[i,r]=(0,a.useState)(null),s=(0,A.gf)(C.s),o=!!i,{classes:l,className:c,disabled:p=!1,disableFocusRipple:u=!1,items:g,fullWidth:h,indicator:m,label:f,onSelectTab:v,selected:w,textColor:D="inherit",wrapped:I=!1,highlightedButton:P,showIcons:B=!1}=e,O=R(e.icon,s,B),F="data-testid"in e&&e["data-testid"],z=()=>{r(null)},W=[l?.root,l?.[`textColor${(0,b.A)(D)}`],l&&{[l.disabled]:p,[l.selected]:w,[l.labelIcon]:f&&O,[l.fullWidth]:h,[l.wrapped]:I},c];if(1===g.length)return(0,n.jsxs)(k.A,{focusRipple:!u,"data-testid":F,className:d()(W,l&&{[l.labelIcon]:f&&(g[0].icon??O)}),ref:t,role:"tab","aria-selected":w,disabled:p,component:x.Link,onClick:v,to:g[0]?.path,startIcon:R(g[0].icon,s,B),children:[(0,n.jsx)(y.A,{className:l?.wrapper,variant:"button",children:g[0].label}),m]});let _=B&&g.some(e=>e.icon);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(k.A,{"data-testid":F,focusRipple:!u,className:d()(W),ref:t,role:"tab","aria-selected":w,disabled:p,onClick:e=>{r(e.currentTarget)},startIcon:O,children:[(0,n.jsx)(y.A,{className:l?.wrapper,variant:"button",children:f}),(0,n.jsx)(T.default,{})]}),(0,n.jsx)(j.Ay,{id:o?"tabbed-submenu":void 0,open:o,anchorEl:i,onClose:z,anchorOrigin:{vertical:"bottom",horizontal:"center"},transformOrigin:{vertical:"top",horizontal:"center"},children:(0,n.jsx)(S.A,{component:"nav",children:g.map(e=>{let i=R(e.icon,s,B);return(0,n.jsxs)(E.A,{button:!0,focusRipple:!u,classes:{selected:d()(l?.selectedButton),default:d()(l?.unselectedButton),disabled:d()(l?.disabled)},ref:t,"aria-selected":w,disabled:p,selected:P===e.id,component:x.Link,onClick:e=>{z(),v?.(e)},to:e.path,children:[i&&(0,n.jsx)(N.A,{children:i}),(0,n.jsx)(L.A,{inset:!i&&_,primary:(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(y.A,{variant:"button",children:e.label}),m]})})]},`popover_item_${e.id}`)})})})]})}),I=(0,w.A)(e=>(0,v.A)({root:{...e.typography.button,maxWidth:264,minWidth:72,position:"relative",boxSizing:"border-box",minHeight:48,flexShrink:0,padding:"6px 12px",[e.breakpoints.up("sm")]:{padding:"6px 24px"},overflow:"hidden",whiteSpace:"normal",textAlign:"center",[e.breakpoints.up("sm")]:{minWidth:160}},defaultTab:{...e.typography.caption,padding:e.spacing(3,3),textTransform:"uppercase",fontWeight:e.typography.fontWeightBold,color:e.palette.text.secondary},labelIcon:{minHeight:72,paddingTop:9,"& $wrapper > *:first-child":{marginBottom:6}},textColorInherit:{color:"inherit",opacity:.7,"&$selected":{opacity:1},"&$disabled":{opacity:.5}},selectedButton:{color:`${e.palette.text.primary}`,opacity:"1"},unselectedButton:{color:`${e.palette.text.secondary}`,opacity:"0.7"},textColorPrimary:{color:e.palette.text.secondary,"&$selected":{color:e.palette.primary.main},"&$disabled":{color:e.palette.text.disabled}},textColorSecondary:{color:e.palette.text.secondary,"&$selected":{color:e.palette.secondary.main},"&$disabled":{color:e.palette.text.disabled}},selected:{},disabled:{},fullWidth:{flexShrink:1,flexGrow:1,flexBasis:0,maxWidth:"none"},wrapped:{fontSize:e.typography.pxToRem(12),lineHeight:1.5},wrapper:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:"100%",flexDirection:"row"}}),{name:"MuiTab"})(D);var P=i(50010);let B=(0,p.A)(e=>({tabsWrapper:{gridArea:"pageSubheader",backgroundColor:e.palette.background.paper,paddingLeft:e.spacing(3),minWidth:0},defaultTab:{...e.typography.caption,padding:e.spacing(3,3),textTransform:"uppercase",fontWeight:e.typography.fontWeightBold,color:e.palette.text.secondary},selected:{color:e.palette.text.primary},tabRoot:{"&:hover":{backgroundColor:e.palette.background.default,color:e.palette.text.primary}}}),{name:"BackstageHeaderTabs"});function O(e,t,i){if(e)return t[e]?e:i[e]}function F(e){let t=B(),{t:i}=(0,f.i)(P.W),{tabs:r,selectedIndex:s=0,showIcons:o,groupDefinitions:l,defaultContentOrder:c="title"}=e,d=(0,a.useMemo)(()=>Object.entries(l).reduce((e,[t,i])=>{for(let n of i.aliases??[])e[n]=t;return e},{}),[l]),p=(0,a.useMemo)(()=>{let e=r.reduce((e,t)=>{let i=O(t.group,l,d),n=i?l[i]:void 0,a=n&&i?i:t.id;return e[a]=e[a]??{group:n,items:[]},e[a].items.push(t),e},{}),t=Object.keys(l),i=Object.entries(e).sort(([e],[i])=>{let n=t.indexOf(e),a=t.indexOf(i);return -1!==n&&-1!==a?n-a:-1!==n?-1:+(-1!==a)});for(let[e,t]of i){let i=l[e];i&&"title"===(i.contentOrder??c)&&t.items.sort((e,t)=>e.label.localeCompare(t.label,void 0,{sensitivity:"base"}))}return i},[r,l,d,c]),u=s>=0?r[s]:void 0,g=O(u?.group,l,d);return(0,n.jsx)(h.A,{className:t.tabsWrapper,children:(0,n.jsx)(m.A,{selectionFollowsFocus:!0,indicatorColor:"primary",textColor:"inherit",variant:"scrollable",scrollButtons:"auto","aria-label":i("entityTabs.tabsAriaLabel"),value:g??u?.id??!1,children:p.map(([e,i])=>(0,n.jsx)(I,{"data-testid":`header-tab-${e}`,className:t.defaultTab,classes:{selected:t.selected,root:t.tabRoot},label:i.group?.title,icon:i.group?.icon,value:e,items:i.items,highlightedButton:u?.id,showIcons:o},e))})})}function z(e){let t=(0,s.useParams)(),i=(0,a.useMemo)(()=>e.map(({path:e,children:t})=>({caseSensitive:!1,path:function(e){let t=e.replace(/^\/+/,"");if(t.endsWith("*"))return t;let i=t.replace(/\/+$/,"");return i?`${i}/*`:""}(e),element:t})),[e]),n=(0,s.useRoutes)(i)??void 0,r=t["*"]??"";r.startsWith("/")||(r=`/${r}`);let[l]=(0,o.ue)(i,r)??[],c=l?i.findIndex(e=>e.path===l.route.path):-1;return{index:c,element:n,route:e[c]}}function W(e){let{routes:t,groupDefinitions:i,defaultContentOrder:s,showIcons:o}=e,{index:c,route:d,element:p}=z(t),u=(0,a.useMemo)(()=>t.map(e=>{let{path:t,title:i,group:n,icon:a}=e,r=t;return{group:n,id:t,path:r=(r=r.replace(/\/\*$/,"")).replace(/^\//,""),label:i,icon:a}}),[t]);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(F,{tabs:u,selectedIndex:c,showIcons:o,groupDefinitions:i,defaultContentOrder:s}),(0,n.jsxs)(g,{children:[(0,n.jsx)(r.m,{title:d?.title}),p??(0,n.jsx)(l.zK,{})]})]})}}}]);
|
|
2
|
+
//# sourceMappingURL=5954.f0710c0b.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static/5954.f0710c0b.chunk.js","sources":["webpack://techdocs-cli-embedded-app/../core-components/src/components/DependencyGraph/types.ts","webpack://techdocs-cli-embedded-app/../core-components/src/components/FavoriteToggle/FavoriteToggle.tsx","webpack://techdocs-cli-embedded-app/../core-components/src/layout/HeaderLabel/HeaderLabel.tsx","webpack://techdocs-cli-embedded-app/../ui/src/components/ButtonIcon/definition.ts","webpack://techdocs-cli-embedded-app/../ui/src/components/ButtonIcon/ButtonIcon.module.css?cd9c","webpack://techdocs-cli-embedded-app/../ui/src/components/ButtonIcon/ButtonIcon.tsx","webpack://techdocs-cli-embedded-app/../core-components/src/components/DependencyGraph/DependencyGraph.tsx","webpack://techdocs-cli-embedded-app/../../plugins/catalog-react/src/components/InspectEntityDialog/components/EntityKindIcon.tsx","webpack://techdocs-cli-embedded-app/../../plugins/catalog-react/src/components/InspectEntityDialog/components/AncestryPage.tsx","webpack://techdocs-cli-embedded-app/../../plugins/catalog-react/src/components/InspectEntityDialog/components/common.tsx","webpack://techdocs-cli-embedded-app/../../plugins/catalog-react/src/components/InspectEntityDialog/components/ColocatedPage.tsx","webpack://techdocs-cli-embedded-app/../../plugins/catalog-react/src/components/InspectEntityDialog/components/util.ts","webpack://techdocs-cli-embedded-app/../../plugins/catalog-react/src/components/InspectEntityDialog/components/JsonPage.tsx","webpack://techdocs-cli-embedded-app/../ui/src/components/TagGroup/TagGroup.module.css?dc18","webpack://techdocs-cli-embedded-app/../ui/src/components/TagGroup/definition.ts","webpack://techdocs-cli-embedded-app/../ui/src/components/TagGroup/TagGroup.tsx","webpack://techdocs-cli-embedded-app/../../plugins/catalog-react/src/components/InspectEntityDialog/components/OverviewPage.tsx","webpack://techdocs-cli-embedded-app/../../plugins/catalog-react/src/components/InspectEntityDialog/components/YamlPage.tsx","webpack://techdocs-cli-embedded-app/../../plugins/catalog-react/src/components/InspectEntityDialog/InspectEntityDialog.tsx","webpack://techdocs-cli-embedded-app/../../plugins/catalog-react/src/hooks/useStarredEntity.ts","webpack://techdocs-cli-embedded-app/../../plugins/catalog/src/alpha/components/EntityContextMenu/EntityContextMenu.tsx","webpack://techdocs-cli-embedded-app/../../plugins/catalog/src/alpha/components/EntityLayout/entityLayoutRoutes.tsx","webpack://techdocs-cli-embedded-app/../../plugins/catalog-react/src/components/FavoriteEntity/FavoriteEntity.tsx","webpack://techdocs-cli-embedded-app/../../plugins/catalog/src/alpha/components/EntityLabels/EntityLabels.tsx","webpack://techdocs-cli-embedded-app/../../plugins/catalog/src/alpha/components/EntityHeader/EntityHeader.tsx","webpack://techdocs-cli-embedded-app/../../plugins/catalog/src/alpha/components/EntityLayout/EntityLayout.tsx","webpack://techdocs-cli-embedded-app/../../plugins/catalog/src/alpha/components/EntityTabs/EntityTabsPanel.tsx","webpack://techdocs-cli-embedded-app/../../plugins/catalog/src/alpha/components/EntityTabs/EntityTabsGroup.tsx","webpack://techdocs-cli-embedded-app/../../plugins/catalog/src/alpha/components/EntityTabs/EntityTabsList.tsx","webpack://techdocs-cli-embedded-app/../../plugins/catalog/src/alpha/components/EntityTabs/EntityTabs.tsx"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* We want to maintain the same information as an enum, so we disable the redeclaration warning */\n/* eslint-disable @typescript-eslint/no-redeclare */\n\n/**\n * Types used to customize and provide data to {@link DependencyGraph}\n *\n * @packageDocumentation\n */\n\nimport { ReactNode } from 'react';\n\n/**\n * Types for the {@link DependencyGraph} component.\n *\n * @public\n */\nexport namespace DependencyGraphTypes {\n /**\n * Edge of {@link DependencyGraph}\n *\n * @public\n */\n export type DependencyEdge<T = {}> = T & {\n /**\n * ID of {@link DependencyNode} from where the Edge start\n */\n from: string;\n /**\n * ID of {@link DependencyNode} to where the Edge goes to\n */\n to: string;\n /**\n * Label assigned and rendered with the Edge\n */\n label?: string;\n /**\n * Distance to a root entity\n */\n distance?: number;\n };\n\n /**\n * Properties of {@link DependencyGraphTypes.RenderLabelFunction} for {@link DependencyGraphTypes.DependencyEdge}\n *\n * @public\n */\n export type RenderLabelProps<T = unknown> = { edge: DependencyEdge<T> };\n\n /**\n * Custom React component for edge labels\n *\n * @public\n */\n export type RenderLabelFunction<T = {}> = (\n props: RenderLabelProps<T>,\n ) => ReactNode;\n\n /**\n * Node of {@link DependencyGraph}\n *\n * @public\n */\n export type DependencyNode<T = {}> = T & {\n id: string;\n };\n\n /**\n * Properties of {@link DependencyGraphTypes.RenderNodeFunction} for {@link DependencyGraphTypes.DependencyNode}\n *\n * @public\n */\n export type RenderNodeProps<T = unknown> = { node: DependencyNode<T> };\n\n /**\n * Custom React component for graph {@link DependencyGraphTypes.DependencyNode}\n *\n * @public\n */\n export type RenderNodeFunction<T = {}> = (\n props: RenderNodeProps<T>,\n ) => ReactNode;\n\n /**\n * Properties of {@link DependencyGraphTypes.RenderEdgeFunction} for {@link DependencyGraphTypes.DependencyEdge}\n *\n * @public\n */\n export type RenderEdgeProps<T = {}> = {\n edge: T & {\n points: { x: number; y: number }[];\n label?: string;\n labeloffset?: number;\n labelpos?: string;\n width?: number;\n height?: number;\n weight?: number;\n minlen?: number;\n showArrowHeads?: boolean;\n from?: string;\n to?: string;\n relations?: string[];\n };\n id: {\n v: string;\n w: string;\n name?: string | undefined;\n };\n };\n\n /**\n * Custom React component for graph {@link DependencyGraphTypes.DependencyEdge}\n *\n * @public\n */\n export type RenderEdgeFunction<T = {}> = (\n props: RenderEdgeProps<T>,\n ) => ReactNode;\n\n /**\n * Graph direction\n *\n * @public\n */\n export const Direction = {\n /**\n * Top to Bottom\n */\n TOP_BOTTOM: 'TB',\n /**\n * Bottom to Top\n */\n BOTTOM_TOP: 'BT',\n /**\n * Left to Right\n */\n LEFT_RIGHT: 'LR',\n /**\n * Right to Left\n */\n RIGHT_LEFT: 'RL',\n } as const;\n\n /**\n * @public\n */\n export type Direction = (typeof Direction)[keyof typeof Direction];\n\n /**\n * @public\n */\n export namespace Direction {\n export type TOP_BOTTOM = typeof Direction.TOP_BOTTOM;\n export type BOTTOM_TOP = typeof Direction.BOTTOM_TOP;\n export type LEFT_RIGHT = typeof Direction.LEFT_RIGHT;\n export type RIGHT_LEFT = typeof Direction.RIGHT_LEFT;\n }\n\n /**\n * Node alignment\n *\n * @public\n */\n export const Alignment = {\n /**\n * Up Left\n */\n UP_LEFT: 'UL',\n /**\n * Up Right\n */\n UP_RIGHT: 'UR',\n /**\n * Down Left\n */\n DOWN_LEFT: 'DL',\n /**\n * Down Right\n */\n DOWN_RIGHT: 'DR',\n } as const;\n\n /**\n * @public\n */\n export type Alignment = (typeof Alignment)[keyof typeof Alignment];\n\n /**\n * @public\n */\n export namespace Alignment {\n export type UP_LEFT = typeof Alignment.UP_LEFT;\n export type UP_RIGHT = typeof Alignment.UP_RIGHT;\n export type DOWN_LEFT = typeof Alignment.DOWN_LEFT;\n export type DOWN_RIGHT = typeof Alignment.DOWN_RIGHT;\n }\n\n /**\n * Algorithm used to rand nodes in graph\n *\n * @public\n */\n export const Ranker = {\n /**\n * {@link https://en.wikipedia.org/wiki/Network_simplex_algorithm | Network Simplex} algorithm\n */\n NETWORK_SIMPLEX: 'network-simplex',\n /**\n * Tight Tree algorithm\n */\n TIGHT_TREE: 'tight-tree',\n /**\n * Longest path algorithm\n *\n * @remarks\n *\n * Simplest and fastest\n */\n LONGEST_PATH: 'longest-path',\n } as const;\n\n /**\n * @public\n */\n export type Ranker = (typeof Ranker)[keyof typeof Ranker];\n\n /**\n * @public\n */\n export namespace Ranker {\n export type NETWORK_SIMPLEX = typeof Ranker.NETWORK_SIMPLEX;\n export type TIGHT_TREE = typeof Ranker.TIGHT_TREE;\n export type LONGEST_PATH = typeof Ranker.LONGEST_PATH;\n }\n\n /**\n * Position of label in relation to the edge\n *\n * @public\n */\n export const LabelPosition = {\n LEFT: 'l',\n RIGHT: 'r',\n CENTER: 'c',\n } as const;\n\n /**\n * @public\n */\n export type LabelPosition =\n (typeof LabelPosition)[keyof typeof LabelPosition];\n\n /**\n * @public\n */\n export namespace LabelPosition {\n export type LEFT = typeof LabelPosition.LEFT;\n export type RIGHT = typeof LabelPosition.RIGHT;\n export type CENTER = typeof LabelPosition.CENTER;\n }\n}\n","/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ComponentProps } from 'react';\nimport IconButton from '@material-ui/core/IconButton';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Typography from '@material-ui/core/Typography';\nimport { Theme, makeStyles } from '@material-ui/core/styles';\nimport { StarIcon, UnstarredIcon } from '../../icons';\n\nconst useStyles = makeStyles<Theme>(\n () => ({\n icon: {\n color: '#f3ba37',\n cursor: 'pointer',\n display: 'inline-flex',\n },\n iconBorder: {\n color: 'inherit',\n cursor: 'pointer',\n display: 'inline-flex',\n },\n }),\n { name: 'BackstageFavoriteToggleIcon' },\n);\n\n/**\n * @public\n */\nexport type FavoriteToggleIconClassKey = 'icon' | 'iconBorder';\n\n/**\n * Icon used in FavoriteToggle component.\n *\n * Can be used independently, useful when used as {@link @material-table/core#MaterialTableProps.actions} in {@link @material-table/core#MaterialTable}\n *\n * @public\n */\nexport function FavoriteToggleIcon(props: { isFavorite: boolean }) {\n const { isFavorite } = props;\n const classes = useStyles();\n\n return (\n <Typography\n component=\"span\"\n className={isFavorite ? classes.icon : classes.iconBorder}\n >\n {isFavorite ? <StarIcon /> : <UnstarredIcon />}\n </Typography>\n );\n}\n\n/**\n * Props for the {@link FavoriteToggle} component.\n *\n * @public\n */\nexport type FavoriteToggleProps = ComponentProps<typeof IconButton> & {\n id: string;\n title: string;\n isFavorite: boolean;\n onToggle: (value: boolean) => void;\n};\n\n/**\n * Toggle encapsulating logic for marking something as favorite,\n * primarily used in various instances of entity lists and cards but can be used elsewhere.\n *\n * This component can only be used in as a controlled toggle and does not keep internal state.\n *\n * @public\n */\nexport function FavoriteToggle(props: FavoriteToggleProps) {\n const {\n id,\n title,\n isFavorite: value,\n onToggle: onChange,\n ...iconButtonProps\n } = props;\n return (\n <Tooltip id={id} title={title}>\n <IconButton\n aria-label={title}\n id={id}\n onClick={() => onChange(!value)}\n color=\"inherit\"\n {...iconButtonProps}\n >\n <FavoriteToggleIcon isFavorite={value} />\n </IconButton>\n </Tooltip>\n );\n}\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Grid from '@material-ui/core/Grid';\nimport { alpha, makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport { ReactNode, PropsWithChildren } from 'react';\nimport { Link } from '../../components/Link';\n\n/** @public */\nexport type HeaderLabelClassKey = 'root' | 'label' | 'value';\n\nconst useStyles = makeStyles(\n theme => ({\n root: {\n textAlign: 'left',\n },\n label: {\n color: theme.page.fontColor,\n fontWeight: theme.typography.fontWeightBold,\n letterSpacing: 0,\n fontSize: theme.typography.fontSize,\n marginBottom: theme.spacing(1) / 2,\n lineHeight: 1,\n },\n value: {\n color: alpha(theme.page.fontColor, 0.8),\n fontSize: theme.typography.fontSize,\n lineHeight: 1,\n },\n }),\n { name: 'BackstageHeaderLabel' },\n);\n\ntype HeaderLabelContentProps = PropsWithChildren<{\n value: ReactNode;\n className: string;\n typographyRootComponent?: keyof JSX.IntrinsicElements;\n}>;\n\nconst HeaderLabelContent = ({\n value,\n className,\n typographyRootComponent,\n}: HeaderLabelContentProps) => {\n return (\n <Typography\n component={\n typographyRootComponent ?? (typeof value === 'string' ? 'p' : 'span')\n }\n className={className}\n >\n {value}\n </Typography>\n );\n};\n\ntype HeaderLabelProps = {\n label: string;\n value?: HeaderLabelContentProps['value'];\n contentTypograpyRootComponent?: HeaderLabelContentProps['typographyRootComponent'];\n url?: string;\n};\n\n/**\n * Additional label to main {@link Header}\n *\n * @public\n *\n */\nexport function HeaderLabel(props: HeaderLabelProps) {\n const { label, value, url, contentTypograpyRootComponent } = props;\n const classes = useStyles();\n const content = (\n <HeaderLabelContent\n className={classes.value}\n value={value || '<Unknown>'}\n typographyRootComponent={contentTypograpyRootComponent}\n />\n );\n return (\n <Grid item>\n <Typography component=\"span\" className={classes.root}>\n <Typography className={classes.label}>{label}</Typography>\n {url ? <Link to={url}>{content}</Link> : content}\n </Typography>\n </Grid>\n );\n}\n","/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { defineComponent } from '../../hooks/useDefinition';\nimport type { ButtonIconOwnProps } from './types';\nimport styles from './ButtonIcon.module.css';\n\n/**\n * Component definition for ButtonIcon\n * @public\n */\nexport const ButtonIconDefinition = defineComponent<ButtonIconOwnProps>()({\n styles,\n classNames: {\n root: 'bui-ButtonIcon',\n content: 'bui-ButtonIconContent',\n spinner: 'bui-ButtonIconSpinner',\n },\n bg: 'consumer',\n propDefs: {\n size: { dataAttribute: true, default: 'small' },\n variant: { dataAttribute: true, default: 'primary' },\n isPending: { dataAttribute: true },\n loading: { dataAttribute: true },\n icon: {},\n className: {},\n },\n});\n","// extracted by css-extract-rspack-plugin\nexport default {\"bui-ButtonIcon\":\"oswl8eimGwGMv65g\",\"bui-ButtonIconContent\":\"nupI988ZoWQXN2ow\",\"bui-ButtonIconSpinner\":\"S0ip8O7B0EhQCtAt\",\"bui-spin\":\"wvp018_1ftcIUJUQ\"};","/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { forwardRef, Ref } from 'react';\nimport { Button as RAButton, ProgressBar } from 'react-aria-components';\nimport { RiLoader4Line } from '@remixicon/react';\nimport type { ButtonIconProps } from './types';\nimport { useDefinition } from '../../hooks/useDefinition';\nimport { ButtonIconDefinition } from './definition';\n\n/**\n * An icon-only button that supports a loading state and requires an accessible label.\n *\n * @public\n */\nexport const ButtonIcon = forwardRef(\n (props: ButtonIconProps, ref: Ref<HTMLButtonElement>) => {\n const { ownProps, restProps, dataAttributes } = useDefinition(\n ButtonIconDefinition,\n // Merge deprecated `loading` into `isPending` so data attributes and\n // internal logic only need to check a single prop.\n {\n ...props,\n isPending:\n props.isPending || props.loading\n ? true\n : props.isPending ?? props.loading,\n },\n );\n const { classes, icon, isPending } = ownProps;\n\n return (\n <RAButton\n className={classes.root}\n ref={ref}\n isPending={isPending}\n {...dataAttributes}\n {...restProps}\n >\n {({ isPending }) => (\n <>\n <span className={classes.content}>{icon}</span>\n\n {isPending && (\n <ProgressBar\n aria-label=\"Loading\"\n isIndeterminate\n className={classes.spinner}\n >\n <RiLoader4Line aria-hidden=\"true\" />\n </ProgressBar>\n )}\n </>\n )}\n </RAButton>\n );\n },\n);\n\nButtonIcon.displayName = 'ButtonIcon';\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { type ComponentType, Suspense, lazy } from 'react';\nimport type { DependencyGraphProps } from './DependencyGraphContent';\n\nexport type { DependencyGraphProps } from './DependencyGraphContent';\n\nconst LazyDependencyGraphContent = lazy(() =>\n import('./DependencyGraphContent').then(m => ({\n default: m.DependencyGraph as ComponentType<any>,\n })),\n);\n\n/**\n * Graph component used to visualize relations between entities\n *\n * @public\n */\nexport function DependencyGraph<NodeData, EdgeData>(\n props: DependencyGraphProps<NodeData, EdgeData>,\n) {\n return (\n <Suspense fallback={<div />}>\n <LazyDependencyGraphContent {...props} />\n </Suspense>\n );\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { parseEntityRef } from '@backstage/catalog-model';\nimport { useApp } from '@backstage/core-plugin-api';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nconst DEFAULT_ICON = SvgIcon;\n\nfunction getKind(\n kind: string | undefined,\n entityRef: string | undefined,\n): string | undefined {\n if (kind) {\n return kind.toLocaleLowerCase('en-US');\n }\n\n if (entityRef) {\n try {\n return parseEntityRef(entityRef).kind.toLocaleLowerCase('en-US');\n } catch {\n return undefined;\n }\n }\n\n return undefined;\n}\n\nfunction useIcon(kind: string | undefined, entityRef: string | undefined) {\n const app = useApp();\n\n const actualKind = getKind(kind, entityRef);\n if (!actualKind) {\n return DEFAULT_ICON;\n }\n\n const icon = app.getSystemIcon(`kind:${actualKind}`);\n return icon || DEFAULT_ICON;\n}\n\nexport function EntityKindIcon(props: {\n kind?: string;\n entityRef?: string;\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n className?: string;\n}) {\n const { kind, entityRef, ...otherProps } = props;\n const Icon = useIcon(kind, entityRef);\n return <Icon {...otherProps} />;\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n Entity,\n DEFAULT_NAMESPACE,\n stringifyEntityRef,\n} from '@backstage/catalog-model';\nimport {\n DependencyGraph,\n DependencyGraphTypes,\n Link,\n Progress,\n ResponseErrorPanel,\n} from '@backstage/core-components';\nimport { useApi, useApp, useRouteRef } from '@backstage/core-plugin-api';\nimport { Text, Box } from '@backstage/ui';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport { useLayoutEffect, useRef, useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport useAsync from 'react-use/esm/useAsync';\nimport { catalogApiRef } from '../../../api';\nimport { entityRouteRef } from '../../../routes';\nimport { useEntityPresentation } from '../../../apis';\nimport { EntityKindIcon } from './EntityKindIcon';\nimport { catalogReactTranslationRef } from '../../../translation';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nconst useStyles = makeStyles(theme => ({\n node: {\n fill: theme.palette.grey[300],\n stroke: theme.palette.grey[300],\n '&.primary': {\n fill: theme.palette.primary.light,\n stroke: theme.palette.primary.light,\n },\n '&.secondary': {\n fill: theme.palette.secondary.light,\n stroke: theme.palette.secondary.light,\n },\n },\n text: {\n fill: theme.palette.getContrastText(theme.palette.grey[300]),\n '&.primary': {\n fill: theme.palette.primary.contrastText,\n },\n '&.secondary': {\n fill: theme.palette.secondary.contrastText,\n },\n '&.focused': {\n fontWeight: 'bold',\n },\n },\n clickable: {\n cursor: 'pointer',\n },\n}));\n\ntype NodeType = Entity & { root: boolean };\n\nfunction useAncestry(root: Entity): {\n loading: boolean;\n error?: Error;\n nodes: DependencyGraphTypes.DependencyNode<NodeType>[];\n edges: DependencyGraphTypes.DependencyEdge[];\n} {\n const catalogClient = useApi(catalogApiRef);\n const entityRef = stringifyEntityRef(root);\n\n const { loading, error, value } = useAsync(async () => {\n const response = await catalogClient.getEntityAncestors({ entityRef });\n const nodes = new Array<DependencyGraphTypes.DependencyNode<NodeType>>();\n const edges = new Array<DependencyGraphTypes.DependencyEdge>();\n for (const current of response.items) {\n const currentRef = stringifyEntityRef(current.entity);\n const isRootNode = currentRef === response.rootEntityRef;\n nodes.push({ id: currentRef, root: isRootNode, ...current.entity });\n for (const parentRef of current.parentEntityRefs) {\n edges.push({ from: currentRef, to: parentRef });\n }\n }\n return { nodes, edges };\n }, [entityRef]);\n\n return {\n loading,\n error,\n nodes: value?.nodes || [],\n edges: value?.edges || [],\n };\n}\n\nfunction CustomNode({ node }: DependencyGraphTypes.RenderNodeProps<NodeType>) {\n const classes = useStyles();\n const navigate = useNavigate();\n const entityRoute = useRouteRef(entityRouteRef);\n const [width, setWidth] = useState(0);\n const [height, setHeight] = useState(0);\n const app = useApp();\n const idRef = useRef<SVGTextElement | null>(null);\n\n useLayoutEffect(() => {\n // set the width to the length of the ID\n if (idRef.current) {\n let { height: renderedHeight, width: renderedWidth } =\n idRef.current.getBBox();\n renderedHeight = Math.round(renderedHeight);\n renderedWidth = Math.round(renderedWidth);\n if (renderedHeight !== height || renderedWidth !== width) {\n setWidth(renderedWidth);\n setHeight(renderedHeight);\n }\n }\n }, [width, height]);\n\n const hasKindIcon = app.getSystemIcon(\n `kind:${node.kind.toLocaleLowerCase('en-US')}`,\n );\n const padding = 10;\n const iconSize = height;\n const paddedIconWidth = hasKindIcon ? iconSize + padding : 0;\n const paddedWidth = paddedIconWidth + width + padding * 2;\n const paddedHeight = height + padding * 2;\n\n const { primaryTitle: displayTitle } = useEntityPresentation(node);\n\n const onClick = () => {\n navigate(\n entityRoute({\n kind: node.kind,\n namespace: node.metadata.namespace || DEFAULT_NAMESPACE,\n name: node.metadata.name,\n }),\n );\n };\n\n return (\n <g onClick={onClick} className={classes.clickable}>\n <rect\n className={classNames(\n classes.node,\n node.root ? 'secondary' : 'primary',\n )}\n width={paddedWidth}\n height={paddedHeight}\n rx={10}\n />\n {hasKindIcon && (\n <EntityKindIcon\n kind={node.kind}\n y={padding}\n x={padding}\n width={iconSize}\n height={iconSize}\n className={classNames(\n classes.text,\n node.root ? 'secondary' : 'primary',\n )}\n />\n )}\n <text\n ref={idRef}\n className={classNames(\n classes.text,\n node.root ? 'secondary' : 'primary',\n )}\n y={paddedHeight / 2}\n x={paddedIconWidth + (width + padding * 2) / 2}\n textAnchor=\"middle\"\n alignmentBaseline=\"middle\"\n >\n {displayTitle}\n </text>\n </g>\n );\n}\n\nexport function AncestryPage(props: { entity: Entity }) {\n const { loading, error, nodes, edges } = useAncestry(props.entity);\n const { t } = useTranslationRef(catalogReactTranslationRef);\n if (loading) {\n return <Progress />;\n } else if (error) {\n return <ResponseErrorPanel error={error} />;\n }\n\n return (\n <>\n <Box mb=\"2\">\n <Text as=\"p\">\n {t('inspectEntityDialog.ancestryPage.description', {\n processorsLink: (\n <Link to=\"https://backstage.io/docs/features/software-catalog/life-of-an-entity\">\n {t('inspectEntityDialog.ancestryPage.processorsLink')}\n </Link>\n ),\n })}\n </Text>\n </Box>\n <Box mt=\"8\">\n <DependencyGraph\n nodes={nodes}\n edges={edges}\n renderNode={CustomNode}\n direction={DependencyGraphTypes.Direction.BOTTOM_TOP}\n zoom=\"enable-on-click\"\n />\n </Box>\n </>\n );\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { makeStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport { ReactNode } from 'react';\n\nconst useStyles = makeStyles({\n list: {\n listStyle: 'none',\n margin: 0,\n padding: 0,\n },\n indented: {\n paddingLeft: 'var(--bui-space-4)',\n },\n listItem: {\n display: 'flex',\n alignItems: 'flex-start',\n marginTop: 'var(--bui-space-1)',\n paddingLeft: 'var(--bui-space-4)',\n fontFamily: 'monospace',\n fontSize: 'var(--bui-font-size-3)',\n '&:first-child': {\n marginTop: 0,\n },\n },\n});\n\nexport function ListSection(props: {\n children: ReactNode;\n indent?: boolean;\n className?: string;\n 'aria-label'?: string;\n}) {\n const classes = useStyles();\n return (\n <ul\n className={classNames(\n classes.list,\n props.indent && classes.indented,\n props.className,\n )}\n aria-label={props['aria-label']}\n >\n {props.children}\n </ul>\n );\n}\n\n/**\n * A dense monospace list item.\n */\nexport function ListItemRow(props: { children: ReactNode }) {\n const classes = useStyles();\n return <li className={classes.listItem}>{props.children}</li>;\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Native HTML elements like <p> and <header> are used intentionally for\n// semantic markup. The react/forbid-elements rule predates the BUI migration.\n/* eslint-disable react/forbid-elements */\n\nimport {\n Entity,\n ANNOTATION_LOCATION,\n ANNOTATION_ORIGIN_LOCATION,\n stringifyEntityRef,\n} from '@backstage/catalog-model';\nimport { Progress, ResponseErrorPanel } from '@backstage/core-components';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { Text, Alert } from '@backstage/ui';\nimport useAsync from 'react-use/esm/useAsync';\nimport { catalogApiRef } from '../../../api';\nimport { EntityRefLink } from '../../EntityRefLink';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { ListSection, ListItemRow } from './common';\n\nimport { catalogReactTranslationRef } from '../../../translation';\n\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nconst useStyles = makeStyles({\n header: {\n paddingLeft: 'var(--bui-space-4)',\n marginTop: 'var(--bui-space-4)',\n marginBottom: 'var(--bui-space-4)',\n },\n headerLabel: {\n margin: 0,\n fontFamily: 'monospace',\n fontSize: 'var(--bui-font-size-3)',\n fontWeight: 'var(--bui-font-weight-regular)' as any,\n },\n entityList: {\n marginTop: 'var(--bui-space-4)',\n },\n headerValue: {\n margin: 0,\n marginTop: 'var(--bui-space-1)',\n fontFamily: 'monospace',\n fontSize: 'var(--bui-font-size-3)',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n },\n});\n\nfunction useColocated(entity: Entity): {\n loading: boolean;\n error?: Error;\n location?: string;\n originLocation?: string;\n colocatedEntities?: Entity[];\n} {\n const catalogApi = useApi(catalogApiRef);\n const currentEntityRef = stringifyEntityRef(entity);\n const location = entity.metadata.annotations?.[ANNOTATION_LOCATION];\n const origin = entity.metadata.annotations?.[ANNOTATION_ORIGIN_LOCATION];\n\n const { loading, error, value } = useAsync(async () => {\n if (!location && !origin) {\n return [];\n }\n const response = await catalogApi.getEntities({\n filter: [\n ...(location\n ? [{ [`metadata.annotations.${ANNOTATION_LOCATION}`]: location }]\n : []),\n ...(origin\n ? [\n {\n [`metadata.annotations.${ANNOTATION_ORIGIN_LOCATION}`]: origin,\n },\n ]\n : []),\n ],\n });\n return response.items;\n }, [location, origin]);\n\n return {\n loading,\n error,\n location,\n originLocation: origin,\n colocatedEntities: value?.filter(\n colocated => stringifyEntityRef(colocated) !== currentEntityRef,\n ),\n };\n}\n\nfunction EntityList(props: { entities: Entity[]; header?: [string, string] }) {\n const classes = useStyles();\n const { t } = useTranslationRef(catalogReactTranslationRef);\n return (\n <>\n {props.header && (\n <header className={classes.header}>\n <h4 className={classes.headerLabel}>{props.header[0]}</h4>\n <p className={classes.headerValue}>{props.header[1]}</p>\n </header>\n )}\n <ListSection\n aria-label={t('inspectEntityDialog.colocatedPage.entityListAriaLabel')}\n className={classes.entityList}\n >\n {props.entities.map(entity => (\n <ListItemRow key={stringifyEntityRef(entity)}>\n <EntityRefLink entityRef={entity} />\n </ListItemRow>\n ))}\n </ListSection>\n </>\n );\n}\n\nfunction Contents(props: { entity: Entity }) {\n const { entity } = props;\n const { t } = useTranslationRef(catalogReactTranslationRef);\n\n const { loading, error, location, originLocation, colocatedEntities } =\n useColocated(entity);\n if (loading) {\n return <Progress />;\n } else if (error) {\n return <ResponseErrorPanel error={error} />;\n }\n\n if (!location && !originLocation) {\n return (\n <Alert\n status=\"warning\"\n description={t('inspectEntityDialog.colocatedPage.alertNoLocation')}\n mt=\"4\"\n />\n );\n } else if (!colocatedEntities?.length) {\n return (\n <Alert\n status=\"info\"\n description={t('inspectEntityDialog.colocatedPage.alertNoEntity')}\n mt=\"4\"\n />\n );\n }\n\n if (location === originLocation) {\n return <EntityList entities={colocatedEntities} />;\n }\n\n const atLocation = colocatedEntities.filter(\n e => e.metadata.annotations?.[ANNOTATION_LOCATION] === location,\n );\n const atOrigin = colocatedEntities.filter(\n e =>\n e.metadata.annotations?.[ANNOTATION_ORIGIN_LOCATION] === originLocation,\n );\n\n return (\n <>\n {atLocation.length > 0 && (\n <EntityList\n entities={atLocation}\n header={[\n t('inspectEntityDialog.colocatedPage.locationHeader'),\n location!,\n ]}\n />\n )}\n {atOrigin.length > 0 && (\n <EntityList\n entities={atOrigin}\n header={[\n t('inspectEntityDialog.colocatedPage.originHeader'),\n originLocation!,\n ]}\n />\n )}\n </>\n );\n}\n\nexport function ColocatedPage(props: { entity: Entity }) {\n const { t } = useTranslationRef(catalogReactTranslationRef);\n return (\n <>\n <Text as=\"p\">{t('inspectEntityDialog.colocatedPage.description')}</Text>\n <Contents entity={props.entity} />\n </>\n );\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { JsonObject } from '@backstage/types';\n\nexport function sortKeys(data: JsonObject): JsonObject {\n // we could do something custom, but lexicographical sorting is actually a\n // good choice at least for the default set of keys\n return Object.fromEntries(\n [...Object.entries(data)].sort((a, b) => (a[0] < b[0] ? -1 : 1)),\n );\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Entity } from '@backstage/catalog-model';\nimport { CodeSnippet } from '@backstage/core-components';\nimport { Text } from '@backstage/ui';\nimport { sortKeys } from './util';\nimport { catalogReactTranslationRef } from '../../../translation';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport function JsonPage(props: { entity: Entity }) {\n const { t } = useTranslationRef(catalogReactTranslationRef);\n return (\n <>\n <Text as=\"p\">{t('inspectEntityDialog.jsonPage.description')}</Text>\n <div data-testid=\"code-snippet\">\n <CodeSnippet\n text={JSON.stringify(sortKeys(props.entity), undefined, 2)}\n language=\"json\"\n showCopyCodeButton\n />\n </div>\n </>\n );\n}\n","// extracted by css-extract-rspack-plugin\nexport default {\"bui-TagList\":\"RH6vZOMUe3ozH13w\",\"bui-Tag\":\"RbVv4ECvOgnU1Dwb\",\"bui-TagRemoveButton\":\"l9zJlYdsd_AvoCWG\",\"bui-TagIcon\":\"APxTgEybjsYQrIC6\"};","/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { defineComponent } from '../../hooks/useDefinition';\nimport type { TagGroupOwnProps, TagOwnProps } from './types';\nimport styles from './TagGroup.module.css';\n\n/**\n * Component definition for TagGroup\n * @public\n */\nexport const TagGroupDefinition = defineComponent<TagGroupOwnProps>()({\n styles,\n classNames: {\n root: 'bui-TagGroup',\n list: 'bui-TagList',\n },\n propDefs: {\n items: {},\n children: {},\n renderEmptyState: {},\n className: {},\n },\n});\n\n/** @internal */\nexport const TagDefinition = defineComponent<TagOwnProps>()({\n styles,\n classNames: {\n root: 'bui-Tag',\n icon: 'bui-TagIcon',\n removeButton: 'bui-TagRemoveButton',\n },\n analytics: true,\n propDefs: {\n noTrack: {},\n icon: {},\n size: { dataAttribute: true, default: 'small' },\n href: {},\n children: {},\n className: {},\n },\n});\n","/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { TagProps, TagGroupProps } from './types';\nimport {\n TagGroup as ReactAriaTagGroup,\n TagList as ReactAriaTagList,\n Tag as ReactAriaTag,\n Button as ReactAriaButton,\n} from 'react-aria-components';\nimport { forwardRef, type ReactNode } from 'react';\nimport { RiCloseCircleLine } from '@remixicon/react';\nimport { useDefinition } from '../../hooks/useDefinition';\nimport { TagGroupDefinition, TagDefinition } from './definition';\nimport { getNodeText } from '../../analytics/getNodeText';\n\n/**\n * A component that renders a list of tags.\n *\n * @public\n */\nexport const TagGroup = <T extends object>(props: TagGroupProps<T>) => {\n const { ownProps, restProps } = useDefinition(TagGroupDefinition, props);\n const { classes, items, children, renderEmptyState } = ownProps;\n\n return (\n <ReactAriaTagGroup className={classes.root} {...restProps}>\n <ReactAriaTagList\n className={classes.list}\n items={items}\n renderEmptyState={renderEmptyState}\n >\n {children}\n </ReactAriaTagList>\n </ReactAriaTagGroup>\n );\n};\n\n/**\n * A component that renders a tag.\n *\n * @public\n */\nexport const Tag = forwardRef<HTMLDivElement, TagProps>((props, ref) => {\n const { ownProps, restProps, dataAttributes, analytics } = useDefinition(\n TagDefinition,\n props,\n );\n const { classes, children, icon, href } = ownProps;\n const textValue = typeof children === 'string' ? children : undefined;\n\n const handlePress = () => {\n if (href) {\n const text =\n (props as React.AriaAttributes)['aria-label'] ??\n textValue ??\n getNodeText(children) ??\n String(href);\n analytics.captureEvent('click', text, {\n attributes: { to: String(href) },\n });\n }\n };\n\n return (\n <ReactAriaTag\n ref={ref}\n textValue={textValue}\n className={classes.root}\n href={href}\n {...dataAttributes}\n {...restProps}\n onPress={e => {\n restProps.onPress?.(e);\n handlePress();\n }}\n >\n {({ allowsRemoving }) => (\n <>\n {icon && <span className={classes.icon}>{icon}</span>}\n {children as ReactNode}\n {allowsRemoving && (\n <ReactAriaButton className={classes.removeButton} slot=\"remove\">\n <RiCloseCircleLine size={16} />\n </ReactAriaButton>\n )}\n </>\n )}\n </ReactAriaTag>\n );\n});\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AlphaEntity } from '@backstage/catalog-model/alpha';\nimport { Link } from '@backstage/core-components';\nimport {\n Text,\n Box,\n Flex,\n Card,\n CardHeader,\n CardBody,\n TagGroup,\n Tag,\n ButtonIcon,\n ButtonLink,\n VisuallyHidden,\n} from '@backstage/ui';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport { RiFileCopyLine, RiCheckLine, RiQuestionLine } from '@remixicon/react';\nimport groupBy from 'lodash/groupBy';\nimport sortBy from 'lodash/sortBy';\nimport { ReactNode, useEffect, useRef, useState } from 'react';\nimport { EntityRefLink } from '../../EntityRefLink';\nimport { ListSection, ListItemRow } from './common';\nimport { stringifyEntityRef } from '@backstage/catalog-model';\nimport { catalogReactTranslationRef } from '../../../translation';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nconst useStyles = makeStyles({\n headingWithIcon: {\n display: 'flex',\n alignItems: 'center',\n },\n definitionList: {\n margin: 0,\n padding: 0,\n },\n definitionItem: {\n display: 'flex',\n alignItems: 'flex-start',\n marginTop: 'var(--bui-space-4)',\n paddingLeft: 'var(--bui-space-4)',\n fontFamily: 'monospace',\n fontSize: 'var(--bui-font-size-3)',\n '&:first-child': {\n marginTop: 0,\n },\n },\n definitionContent: {\n flex: 1,\n minWidth: 0,\n },\n definitionKey: {\n fontWeight: 'bold',\n },\n definitionValue: {\n margin: 0,\n marginTop: 'var(--bui-space-1)',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n },\n copyAction: {\n marginLeft: 'var(--bui-space-2)',\n flexShrink: 0,\n },\n relationGroup: {\n '& + &': {\n marginTop: 'var(--bui-space-4)',\n },\n },\n monospace: {\n fontFamily: 'monospace',\n },\n sectionHeading: {\n marginTop: 'var(--bui-space-3)',\n },\n metadataList: {\n marginTop: 'var(--bui-space-2)',\n },\n relationList: {\n marginTop: 'var(--bui-space-2)',\n },\n tagGroup: {\n marginTop: 'var(--bui-space-3)',\n paddingLeft: 'var(--bui-space-4)',\n },\n});\n\n// Extracts a link from a value, if possible\nfunction findLink(value: string): string | undefined {\n if (value.match(/^url:https?:\\/\\//)) {\n return value.slice('url:'.length);\n }\n if (value.match(/^https?:\\/\\//)) {\n return value;\n }\n return undefined;\n}\n\nfunction entriesToItems(entries: [string, string][]) {\n return entries.map(([key, value]) => {\n const link = findLink(value);\n return {\n key,\n value: link ? <Link to={link}>{value}</Link> : value,\n };\n });\n}\n\nfunction CopyButton({ text, label }: { text: string; label: string }) {\n const { t } = useTranslationRef(catalogReactTranslationRef);\n const [copied, setCopied] = useState(false);\n const timerRef = useRef<ReturnType<typeof setTimeout>>();\n\n useEffect(() => () => clearTimeout(timerRef.current), []);\n\n const handlePress = async () => {\n try {\n await window.navigator.clipboard.writeText(text);\n setCopied(true);\n timerRef.current = setTimeout(() => setCopied(false), 2000);\n } catch {\n // Clipboard access denied or unavailable\n }\n };\n\n return (\n <>\n <ButtonIcon\n icon={copied ? <RiCheckLine /> : <RiFileCopyLine />}\n aria-label={t('inspectEntityDialog.overviewPage.copyAriaLabel', {\n label,\n })}\n variant=\"tertiary\"\n size=\"small\"\n onPress={handlePress}\n />\n <VisuallyHidden role=\"status\">\n {copied ? t('inspectEntityDialog.overviewPage.copiedStatus') : ''}\n </VisuallyHidden>\n </>\n );\n}\n\nfunction HelpIcon(props: { to: string }) {\n const { t } = useTranslationRef(catalogReactTranslationRef);\n return (\n <ButtonLink\n href={props.to}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n variant=\"tertiary\"\n size=\"small\"\n iconStart={<RiQuestionLine />}\n aria-label={t('inspectEntityDialog.overviewPage.helpLinkAriaLabel')}\n />\n );\n}\n\nfunction Container(props: {\n title: ReactNode;\n helpLink?: string;\n children: ReactNode;\n}) {\n const classes = useStyles();\n return (\n <Card>\n <CardHeader>\n <Text\n variant=\"title-x-small\"\n as=\"h3\"\n className={props.helpLink ? classes.headingWithIcon : undefined}\n >\n {props.title}\n {props.helpLink && <HelpIcon to={props.helpLink} />}\n </Text>\n </CardHeader>\n <CardBody>{props.children}</CardBody>\n </Card>\n );\n}\n\nfunction ListSubheader(props: { children: ReactNode; className?: string }) {\n const classes = useStyles();\n return (\n <Text\n variant=\"body-large\"\n as=\"h4\"\n className={classNames(classes.headingWithIcon, props.className)}\n >\n {props.children}\n </Text>\n );\n}\n\nfunction KeyValueList(props: {\n items: { key: string; value: ReactNode; copyable?: boolean }[];\n className?: string;\n 'aria-label'?: string;\n}) {\n const classes = useStyles();\n return (\n <dl\n className={classNames(classes.definitionList, props.className)}\n aria-label={props['aria-label']}\n >\n {props.items.map(item => (\n <div key={item.key} className={classes.definitionItem}>\n <div className={classes.definitionContent}>\n <dt className={classes.definitionKey}>{item.key}</dt>\n <dd className={classes.definitionValue}>{item.value}</dd>\n </div>\n {item.copyable && typeof item.value === 'string' && (\n <div className={classes.copyAction}>\n <CopyButton text={item.value} label={item.key} />\n </div>\n )}\n </div>\n ))}\n </dl>\n );\n}\n\nexport function OverviewPage(props: { entity: AlphaEntity }) {\n const classes = useStyles();\n const {\n apiVersion,\n kind,\n metadata,\n spec,\n relations = [],\n status = {},\n } = props.entity;\n\n const groupedRelations = groupBy(\n sortBy(relations, r => r.targetRef),\n 'type',\n );\n const { t } = useTranslationRef(catalogReactTranslationRef);\n\n const entityRef = stringifyEntityRef(props.entity);\n return (\n <Flex direction=\"column\" gap=\"4\">\n <Container title={t('inspectEntityDialog.overviewPage.identity.title')}>\n <KeyValueList\n aria-label={t('inspectEntityDialog.overviewPage.identity.title')}\n items={[\n { key: 'apiVersion', value: apiVersion },\n { key: 'kind', value: kind },\n ...(spec?.type\n ? [{ key: 'spec.type', value: spec.type.toString() }]\n : []),\n ...(metadata.uid\n ? [{ key: 'uid', value: metadata.uid, copyable: true }]\n : []),\n ...(metadata.etag\n ? [{ key: 'etag', value: metadata.etag, copyable: true }]\n : []),\n { key: 'entityRef', value: entityRef, copyable: true },\n ]}\n />\n </Container>\n\n <Container title={t('inspectEntityDialog.overviewPage.metadata.title')}>\n {!!Object.keys(metadata.annotations || {}).length && (\n <>\n <ListSubheader>\n {t('inspectEntityDialog.overviewPage.annotations')}\n <HelpIcon to=\"https://backstage.io/docs/features/software-catalog/well-known-annotations\" />\n </ListSubheader>\n <KeyValueList\n items={entriesToItems(Object.entries(metadata.annotations!))}\n aria-label={t('inspectEntityDialog.overviewPage.annotations')}\n className={classes.metadataList}\n />\n </>\n )}\n {!!Object.keys(metadata.labels || {}).length && (\n <>\n <ListSubheader className={classes.sectionHeading}>\n {t('inspectEntityDialog.overviewPage.labels')}\n </ListSubheader>\n <KeyValueList\n items={entriesToItems(Object.entries(metadata.labels!))}\n aria-label={t('inspectEntityDialog.overviewPage.labels')}\n className={classes.metadataList}\n />\n </>\n )}\n {!!metadata.tags?.length && (\n <>\n <ListSubheader className={classes.sectionHeading}>\n {t('inspectEntityDialog.overviewPage.tags')}\n </ListSubheader>\n <TagGroup\n aria-label={t('inspectEntityDialog.overviewPage.tags')}\n className={classes.tagGroup}\n >\n {metadata.tags.map(tag => (\n <Tag key={tag} id={tag}>\n {tag}\n </Tag>\n ))}\n </TagGroup>\n </>\n )}\n </Container>\n\n {!!relations.length && (\n <Container\n title={t('inspectEntityDialog.overviewPage.relation.title')}\n helpLink=\"https://backstage.io/docs/features/software-catalog/well-known-relations\"\n >\n {Object.entries(groupedRelations).map(([type, groupRelations]) => (\n <div key={type} className={classes.relationGroup}>\n <ListSubheader className={classes.monospace}>\n {type}\n </ListSubheader>\n <ListSection aria-label={type} className={classes.relationList}>\n {groupRelations.map(group => (\n <ListItemRow key={group.targetRef}>\n <EntityRefLink entityRef={group.targetRef} />\n </ListItemRow>\n ))}\n </ListSection>\n </div>\n ))}\n </Container>\n )}\n\n {!!status.items?.length && (\n <Container\n title={t('inspectEntityDialog.overviewPage.status.title')}\n helpLink=\"https://backstage.io/docs/features/software-catalog/well-known-statuses\"\n >\n {status.items.map((item, index) => (\n <div key={index}>\n <Text>\n {item.level}: {item.type}\n </Text>\n <Box ml=\"4\">{item.message}</Box>\n </div>\n ))}\n </Container>\n )}\n </Flex>\n );\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Entity } from '@backstage/catalog-model';\nimport { CodeSnippet } from '@backstage/core-components';\nimport { Text } from '@backstage/ui';\nimport YAML from 'yaml';\nimport { sortKeys } from './util';\nimport { catalogReactTranslationRef } from '../../../translation';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nexport function YamlPage(props: { entity: Entity }) {\n const { t } = useTranslationRef(catalogReactTranslationRef);\n return (\n <>\n <Text as=\"p\">{t('inspectEntityDialog.yamlPage.description')}</Text>\n <div data-testid=\"code-snippet\">\n <CodeSnippet\n text={YAML.stringify(sortKeys(props.entity))}\n language=\"yaml\"\n showCopyCodeButton\n />\n </div>\n </>\n );\n}\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Entity } from '@backstage/catalog-model';\nimport {\n Dialog,\n DialogHeader,\n DialogBody,\n Tabs,\n TabList,\n Tab,\n TabPanel,\n} from '@backstage/ui';\nimport { useMemo } from 'react';\nimport { AncestryPage } from './components/AncestryPage';\nimport { ColocatedPage } from './components/ColocatedPage';\nimport { JsonPage } from './components/JsonPage';\nimport { OverviewPage } from './components/OverviewPage';\nimport { YamlPage } from './components/YamlPage';\nimport { catalogReactTranslationRef } from '../../translation';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\ntype TabKey = 'overview' | 'ancestry' | 'colocated' | 'json' | 'yaml';\n\nconst TAB_KEYS: TabKey[] = [\n 'overview',\n 'ancestry',\n 'colocated',\n 'json',\n 'yaml',\n];\n\nfunction DialogContents(props: {\n entity: Entity;\n initialTab?: TabKey;\n onSelect?: (tab: string) => void;\n}) {\n const { entity, initialTab, onSelect } = props;\n const { t } = useTranslationRef(catalogReactTranslationRef);\n\n const tabNames = useMemo(\n () => ({\n overview: t('inspectEntityDialog.tabNames.overview'),\n ancestry: t('inspectEntityDialog.tabNames.ancestry'),\n colocated: t('inspectEntityDialog.tabNames.colocated'),\n json: t('inspectEntityDialog.tabNames.json'),\n yaml: t('inspectEntityDialog.tabNames.yaml'),\n }),\n [t],\n );\n\n const tabContent: Record<TabKey, JSX.Element> = {\n overview: <OverviewPage entity={entity} />,\n ancestry: <AncestryPage entity={entity} />,\n colocated: <ColocatedPage entity={entity} />,\n json: <JsonPage entity={entity} />,\n yaml: <YamlPage entity={entity} />,\n };\n\n return (\n <>\n <DialogHeader>{t('inspectEntityDialog.title')}</DialogHeader>\n <DialogBody>\n <Tabs\n defaultSelectedKey={initialTab || 'overview'}\n onSelectionChange={key => onSelect?.(key as string)}\n >\n <TabList aria-label={t('inspectEntityDialog.tabsAriaLabel')}>\n {TAB_KEYS.map(tab => (\n <Tab key={tab} id={tab}>\n {tabNames[tab]}\n </Tab>\n ))}\n </TabList>\n {TAB_KEYS.map(tab => (\n <TabPanel key={tab} id={tab}>\n {tabContent[tab]}\n </TabPanel>\n ))}\n </Tabs>\n </DialogBody>\n </>\n );\n}\n\n/**\n * A dialog that lets users inspect the low level details of their entities.\n *\n * @public\n */\nexport function InspectEntityDialog(props: {\n open: boolean;\n entity: Entity;\n initialTab?: 'overview' | 'ancestry' | 'colocated' | 'json' | 'yaml';\n onClose: () => void;\n onSelect?: (tab: string) => void;\n}) {\n const { open, entity, initialTab, onClose, onSelect } = props;\n\n if (!entity) {\n return null;\n }\n\n return (\n <Dialog\n isOpen={open}\n onOpenChange={isOpen => !isOpen && onClose()}\n width=\"940px\"\n height=\"100vh\"\n >\n {open && (\n <DialogContents\n entity={entity}\n initialTab={initialTab}\n onSelect={onSelect}\n />\n )}\n </Dialog>\n );\n}\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n Entity,\n CompoundEntityRef,\n stringifyEntityRef,\n} from '@backstage/catalog-model';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { useCallback, useEffect, useState } from 'react';\nimport { starredEntitiesApiRef } from '../apis';\n\nfunction getEntityRef(\n entityOrRef: Entity | CompoundEntityRef | string,\n): string {\n return typeof entityOrRef === 'string'\n ? entityOrRef\n : stringifyEntityRef(entityOrRef);\n}\n\n/** @public */\nexport function useStarredEntity(\n entityOrRef: Entity | CompoundEntityRef | string,\n): {\n toggleStarredEntity: () => void;\n isStarredEntity: boolean;\n} {\n const starredEntitiesApi = useApi(starredEntitiesApiRef);\n\n const [isStarredEntity, setIsStarredEntity] = useState(false);\n\n useEffect(() => {\n const subscription = starredEntitiesApi.starredEntitie$().subscribe({\n next(starredEntities: Set<string>) {\n setIsStarredEntity(starredEntities.has(getEntityRef(entityOrRef)));\n },\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [entityOrRef, starredEntitiesApi]);\n\n const toggleStarredEntity = useCallback(\n () => starredEntitiesApi.toggleStarred(getEntityRef(entityOrRef)).then(),\n [entityOrRef, starredEntitiesApi],\n );\n\n return {\n toggleStarredEntity,\n isStarredEntity,\n };\n}\n","/*\n * Copyright 2026 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n type AppNode,\n ExtensionBoundary,\n IconComponent,\n useTranslationRef,\n} from '@backstage/frontend-plugin-api';\nimport type { EntityContextMenuItemData } from '@backstage/plugin-catalog-react/alpha';\nimport {\n ButtonIcon,\n Menu,\n MenuItem,\n MenuSeparator,\n MenuTrigger,\n} from '@backstage/ui';\nimport { RiMore2Line } from '@remixicon/react';\nimport { catalogTranslationRef } from '../../translation';\n\nexport type EntityContextMenuItemDataWithNode = {\n data: EntityContextMenuItemData;\n node: AppNode;\n};\n\nfunction EntityContextMenuItemContent(props: {\n data: EntityContextMenuItemData;\n}) {\n const { icon, useProps } = props.data;\n const { title, disabled, onClick, ...menuItemProps } = useProps();\n const onAction = onClick\n ? () => {\n const result = onClick();\n if (result) {\n // Prevent rejected async actions from becoming unhandled rejections.\n void result.catch(() => {});\n }\n }\n : undefined;\n\n if ('href' in menuItemProps) {\n return (\n <MenuItem\n iconStart={icon}\n href={menuItemProps.href}\n onAction={onAction}\n isDisabled={disabled}\n >\n {title}\n </MenuItem>\n );\n }\n\n return (\n <MenuItem iconStart={icon} onAction={onAction} isDisabled={disabled}>\n {title}\n </MenuItem>\n );\n}\n\nfunction EntityContextMenuItem(props: {\n item: EntityContextMenuItemDataWithNode;\n}) {\n return (\n <ExtensionBoundary node={props.item.node}>\n <EntityContextMenuItemContent data={props.item.data} />\n </ExtensionBoundary>\n );\n}\n\n/** @alpha */\nexport function EntityContextMenu(props: {\n UNSTABLE_extraContextMenuItems?: {\n title: string;\n Icon: IconComponent;\n onClick: () => void;\n }[];\n contextMenuItems?: EntityContextMenuItemDataWithNode[];\n}) {\n const { UNSTABLE_extraContextMenuItems, contextMenuItems } = props;\n const { t } = useTranslationRef(catalogTranslationRef);\n\n return (\n <MenuTrigger>\n <ButtonIcon\n variant=\"secondary\"\n icon={<RiMore2Line />}\n aria-label={t('entityContextMenu.moreButtonAriaLabel')}\n />\n <Menu placement=\"bottom end\">\n {UNSTABLE_extraContextMenuItems?.map((item, index) => (\n <MenuItem\n key={`${item.title}-${index}`}\n iconStart={<item.Icon />}\n onAction={() => item.onClick()}\n >\n {item.title}\n </MenuItem>\n ))}\n {UNSTABLE_extraContextMenuItems?.length && contextMenuItems?.length ? (\n <MenuSeparator />\n ) : null}\n {contextMenuItems?.map(item => (\n <EntityContextMenuItem key={item.node.spec.id} item={item} />\n ))}\n </Menu>\n </MenuTrigger>\n );\n}\n","/*\n * Copyright 2026 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Entity } from '@backstage/catalog-model';\nimport {\n attachComponentData,\n useElementFilter,\n} from '@backstage/core-plugin-api';\nimport { ReactElement, ReactNode } from 'react';\n\nexport type EntityLayoutRouteProps = {\n path: string;\n title: string;\n group?: string;\n icon?: string | ReactElement;\n children: JSX.Element;\n if?: (entity: Entity) => boolean;\n};\n\nconst dataKey = 'plugin.catalog.entityLayoutRoute';\n\nexport const EntityLayoutRoute: (props: EntityLayoutRouteProps) => null = () =>\n null;\nattachComponentData(EntityLayoutRoute, dataKey, true);\n// Ensures mount points discovered within a route use the route's own path.\nattachComponentData(EntityLayoutRoute, 'core.gatherMountPoints', true);\n\nexport function useEntityLayoutRoutes(\n children: ReactNode,\n entity: Entity | undefined,\n) {\n return useElementFilter(\n children,\n elements =>\n elements\n .selectByComponentData({\n key: dataKey,\n withStrictError:\n 'Child of EntityLayout must be an EntityLayout.Route',\n })\n .getElements<EntityLayoutRouteProps>()\n .flatMap(({ props }) => {\n if (!entity || (props.if && !props.if(entity))) return [];\n return [\n {\n path: props.path,\n title: props.title,\n group: props.group,\n icon: props.icon,\n children: props.children,\n },\n ];\n }),\n [entity],\n );\n}\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Entity, stringifyEntityRef } from '@backstage/catalog-model';\nimport IconButton from '@material-ui/core/IconButton';\nimport { ComponentProps } from 'react';\nimport { useStarredEntity } from '../../hooks/useStarredEntity';\nimport { catalogReactTranslationRef } from '../../translation';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { FavoriteToggle } from '@backstage/core-components';\n\n/** @public */\nexport type FavoriteEntityProps = ComponentProps<typeof IconButton> & {\n entity: Entity;\n};\n\n/**\n * IconButton for showing if a current entity is starred and adding/removing it from the favorite entities\n * @param props - MaterialUI IconButton props extended by required `entity` prop\n * @public\n */\nexport const FavoriteEntity = (props: FavoriteEntityProps) => {\n const { toggleStarredEntity, isStarredEntity } = useStarredEntity(\n props.entity,\n );\n const { t } = useTranslationRef(catalogReactTranslationRef);\n const title = isStarredEntity\n ? t('favoriteEntity.removeFromFavorites')\n : t('favoriteEntity.addToFavorites');\n\n const id = `favorite-${stringifyEntityRef(props.entity).replace(\n /[^a-zA-Z0-9-_]/g,\n '-',\n )}`;\n\n return (\n <FavoriteToggle\n title={title}\n id={id}\n isFavorite={isStarredEntity}\n onToggle={toggleStarredEntity}\n {...props}\n />\n );\n};\n","/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { HeaderLabel } from '@backstage/core-components';\nimport { Entity, RELATION_OWNED_BY } from '@backstage/catalog-model';\nimport {\n EntityRefLinks,\n getEntityRelations,\n} from '@backstage/plugin-catalog-react';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { catalogTranslationRef } from '../../translation';\n\ntype EntityLabelsProps = {\n entity: Entity;\n};\n\nexport function EntityLabels(props: EntityLabelsProps) {\n const { entity } = props;\n const ownedByRelations = getEntityRelations(entity, RELATION_OWNED_BY);\n const { t } = useTranslationRef(catalogTranslationRef);\n return (\n <>\n {ownedByRelations.length > 0 && (\n <HeaderLabel\n label={t('entityLabels.ownerLabel')}\n contentTypograpyRootComponent=\"p\"\n value={\n <EntityRefLinks\n entityRefs={ownedByRelations}\n defaultKind=\"Group\"\n color=\"inherit\"\n />\n }\n />\n )}\n {entity.spec?.lifecycle && (\n <HeaderLabel\n label={t('entityLabels.lifecycleLabel')}\n value={entity.spec.lifecycle?.toString()}\n />\n )}\n </>\n );\n}\n","/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useCallback, ComponentProps, ReactNode } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport useAsync from 'react-use/esm/useAsync';\n\nimport { makeStyles } from '@material-ui/core/styles';\nimport Box from '@material-ui/core/Box';\n\nimport { Header, Breadcrumbs } from '@backstage/core-components';\nimport { useApi, useRouteRefParams } from '@backstage/core-plugin-api';\nimport { IconComponent } from '@backstage/frontend-plugin-api';\n\nimport {\n Entity,\n EntityRelation,\n DEFAULT_NAMESPACE,\n} from '@backstage/catalog-model';\n\nimport {\n useAsyncEntity,\n entityRouteRef,\n catalogApiRef,\n EntityRefLink,\n InspectEntityDialog,\n EntityDisplayName,\n FavoriteEntity,\n} from '@backstage/plugin-catalog-react';\n\nimport { EntityLabels } from '../EntityLabels';\nimport {\n EntityContextMenu,\n type EntityContextMenuItemDataWithNode,\n} from '../EntityContextMenu';\n\nfunction headerProps(\n paramKind: string | undefined,\n paramNamespace: string | undefined,\n paramName: string | undefined,\n entity: Entity | undefined,\n): { headerTitle: string; headerType: string } {\n const kind = paramKind ?? entity?.kind ?? '';\n const namespace = paramNamespace ?? entity?.metadata.namespace ?? '';\n const name =\n entity?.metadata.title ?? paramName ?? entity?.metadata.name ?? '';\n\n return {\n headerTitle: `${name}${\n namespace && namespace !== DEFAULT_NAMESPACE ? ` in ${namespace}` : ''\n }`,\n headerType: (() => {\n let t = kind.toLocaleLowerCase('en-US');\n if (entity && entity.spec && 'type' in entity.spec) {\n t += ' — ';\n t += (entity.spec as { type: string }).type.toLocaleLowerCase('en-US');\n }\n return t;\n })(),\n };\n}\n\nfunction findParentRelation(\n entityRelations: EntityRelation[] = [],\n relationTypes: string[] = [],\n) {\n for (const type of relationTypes) {\n const foundRelation = entityRelations.find(\n relation => relation.type === type,\n );\n if (foundRelation) {\n return foundRelation; // Return the first found relation and stop\n }\n }\n return null;\n}\n\nconst useStyles = makeStyles(theme => ({\n breadcrumbs: {\n color: theme.page.fontColor,\n fontSize: theme.typography.caption.fontSize,\n textTransform: 'uppercase',\n marginTop: theme.spacing(1),\n opacity: 0.8,\n '& span ': {\n color: theme.page.fontColor,\n textDecoration: 'underline',\n textUnderlineOffset: '3px',\n },\n },\n}));\n\nfunction EntityHeaderTitle() {\n const { entity } = useAsyncEntity();\n const { kind, namespace, name } = useRouteRefParams(entityRouteRef);\n const { headerTitle: title } = headerProps(kind, namespace, name, entity);\n return (\n <Box display=\"inline-flex\" alignItems=\"center\" height=\"1em\" maxWidth=\"100%\">\n <Box\n component=\"span\"\n textOverflow=\"ellipsis\"\n whiteSpace=\"nowrap\"\n overflow=\"hidden\"\n >\n {entity ? <EntityDisplayName entityRef={entity} hideIcon /> : title}\n </Box>\n {entity && <FavoriteEntity entity={entity} />}\n </Box>\n );\n}\n\nfunction EntityHeaderSubtitle(props: { parentEntityRelations?: string[] }) {\n const { parentEntityRelations } = props;\n const classes = useStyles();\n const { entity } = useAsyncEntity();\n const { name } = useRouteRefParams(entityRouteRef);\n const parentEntity = findParentRelation(\n entity?.relations ?? [],\n parentEntityRelations ?? [],\n );\n\n const catalogApi = useApi(catalogApiRef);\n\n const { value: ancestorEntity } = useAsync(async () => {\n if (parentEntity) {\n return findParentRelation(\n (await catalogApi.getEntityByRef(parentEntity?.targetRef))?.relations,\n parentEntityRelations,\n );\n }\n return null;\n }, [parentEntity, catalogApi]);\n\n return parentEntity ? (\n <Breadcrumbs separator=\">\" className={classes.breadcrumbs}>\n {ancestorEntity && (\n <EntityRefLink entityRef={ancestorEntity.targetRef} disableTooltip />\n )}\n <EntityRefLink entityRef={parentEntity.targetRef} disableTooltip />\n {name}\n </Breadcrumbs>\n ) : null;\n}\n\n/** @alpha */\nexport function EntityHeader(props: {\n // NOTE(freben): Intentionally not exported at this point, since it's part of\n // the unstable extra context menu items concept below\n UNSTABLE_extraContextMenuItems?: {\n title: string;\n Icon: IconComponent;\n onClick: () => void;\n }[];\n contextMenuItems?: EntityContextMenuItemDataWithNode[];\n /**\n * An array of relation types used to determine the parent entities in the hierarchy.\n * These relations are prioritized in the order provided, allowing for flexible\n * navigation through entity relationships.\n *\n * For example, use relation types like `[\"partOf\", \"memberOf\", \"ownedBy\"]` to define how the entity is related to\n * its parents in the Entity Catalog.\n *\n * It adds breadcrumbs in the Entity page to enhance user navigation and context awareness.\n */\n parentEntityRelations?: string[];\n title?: ReactNode;\n subtitle?: ReactNode;\n}) {\n const {\n UNSTABLE_extraContextMenuItems,\n contextMenuItems,\n parentEntityRelations,\n title,\n subtitle,\n } = props;\n const { entity } = useAsyncEntity();\n const { kind, namespace, name } = useRouteRefParams(entityRouteRef);\n const { headerTitle: entityFallbackText, headerType: type } = headerProps(\n kind,\n namespace,\n name,\n entity,\n );\n\n const [searchParams, setSearchParams] = useSearchParams();\n const selectedInspectEntityDialogTab = searchParams.get('inspect');\n\n const setInspectEntityDialogTab = useCallback(\n (newTab: string) => setSearchParams(`inspect=${newTab}`),\n [setSearchParams],\n );\n\n const closeInspectEntityDialog = useCallback(\n () => setSearchParams(),\n [setSearchParams],\n );\n\n const inspectDialogOpen = typeof selectedInspectEntityDialogTab === 'string';\n\n return (\n <Header\n pageTitleOverride={entityFallbackText}\n type={type}\n title={title ?? <EntityHeaderTitle />}\n subtitle={\n subtitle ?? (\n <EntityHeaderSubtitle parentEntityRelations={parentEntityRelations} />\n )\n }\n >\n {entity && (\n <>\n <EntityLabels entity={entity} />\n <EntityContextMenu\n UNSTABLE_extraContextMenuItems={UNSTABLE_extraContextMenuItems}\n contextMenuItems={contextMenuItems}\n />\n <InspectEntityDialog\n entity={entity!}\n initialTab={\n (selectedInspectEntityDialogTab as ComponentProps<\n typeof InspectEntityDialog\n >['initialTab']) || undefined\n }\n open={inspectDialogOpen}\n onClose={closeInspectEntityDialog}\n onSelect={setInspectEntityDialogTab}\n />\n </>\n )}\n </Header>\n );\n}\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ComponentProps, ReactNode } from 'react';\n\nimport Alert from '@material-ui/lab/Alert';\n\nimport { useRouteRefParams } from '@backstage/core-plugin-api';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport {\n Content,\n Link,\n Page,\n Progress,\n WarningPanel,\n} from '@backstage/core-components';\nimport {\n entityRouteRef,\n useAsyncEntity,\n} from '@backstage/plugin-catalog-react';\n\nimport { catalogTranslationRef } from '../../translation';\nimport { EntityHeader } from '../EntityHeader';\nimport { EntityTabs } from '../EntityTabs';\nimport { EntityContentGroupDefinitions } from '@backstage/plugin-catalog-react/alpha';\nimport { EntityLayoutRoute, useEntityLayoutRoutes } from './entityLayoutRoutes';\n\nexport type { EntityLayoutRouteProps } from './entityLayoutRoutes';\n\n/** @public */\nexport interface EntityLayoutProps {\n UNSTABLE_extraContextMenuItems?: ComponentProps<\n typeof EntityHeader\n >['UNSTABLE_extraContextMenuItems'];\n contextMenuItems?: ComponentProps<typeof EntityHeader>['contextMenuItems'];\n children?: ReactNode;\n header?: JSX.Element;\n NotFoundComponent?: ReactNode;\n /**\n * An array of relation types used to determine the parent entities in the hierarchy.\n * These relations are prioritized in the order provided, allowing for flexible\n * navigation through entity relationships.\n *\n * For example, use relation types like `[\"partOf\", \"memberOf\", \"ownedBy\"]` to define how the entity is related to\n * its parents in the Entity Catalog.\n *\n * It adds breadcrumbs in the Entity page to enhance user navigation and context awareness.\n */\n parentEntityRelations?: string[];\n groupDefinitions: EntityContentGroupDefinitions;\n defaultContentOrder?: 'title' | 'natural';\n showNavItemIcons?: boolean;\n}\n\n/**\n * EntityLayout is a compound component, which allows you to define a layout for\n * entities using a sub-navigation mechanism.\n *\n * Consists of two parts: EntityLayout and EntityLayout.Route\n *\n * @example\n * ```jsx\n * <EntityLayout>\n * <EntityLayout.Route path=\"/example\" title=\"Example tab\">\n * <div>This is rendered under /example/anything-here route</div>\n * </EntityLayout.Route>\n * </EntityLayout>\n * ```\n *\n * @public\n */\nexport const EntityLayout = (props: EntityLayoutProps) => {\n const {\n UNSTABLE_extraContextMenuItems,\n contextMenuItems,\n children,\n header,\n NotFoundComponent,\n parentEntityRelations,\n groupDefinitions,\n defaultContentOrder,\n showNavItemIcons,\n } = props;\n const { kind } = useRouteRefParams(entityRouteRef);\n const { entity, loading, error } = useAsyncEntity();\n\n const routes = useEntityLayoutRoutes(children, entity);\n\n const { t } = useTranslationRef(catalogTranslationRef);\n\n return (\n <Page themeId={entity?.spec?.type?.toString() ?? 'home'}>\n {header ?? (\n <EntityHeader\n parentEntityRelations={parentEntityRelations}\n UNSTABLE_extraContextMenuItems={UNSTABLE_extraContextMenuItems}\n contextMenuItems={contextMenuItems}\n />\n )}\n\n {loading && <Progress />}\n\n {entity && (\n <EntityTabs\n routes={routes}\n groupDefinitions={groupDefinitions}\n defaultContentOrder={defaultContentOrder}\n showIcons={showNavItemIcons}\n />\n )}\n\n {error && (\n <Content>\n <Alert severity=\"error\">{error.toString()}</Alert>\n </Content>\n )}\n\n {!loading && !error && !entity && (\n <Content>\n {NotFoundComponent ? (\n NotFoundComponent\n ) : (\n <WarningPanel title={t('entityLabels.warningPanelTitle')}>\n {t('entityPage.notFoundMessage', {\n kind,\n link: (\n <Link to=\"https://backstage.io/docs/features/software-catalog/references\">\n {t('entityPage.notFoundLinkText')}\n </Link>\n ),\n })}\n </WarningPanel>\n )}\n </Content>\n )}\n </Page>\n );\n};\n\nEntityLayout.Route = EntityLayoutRoute;\n","/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport classNames from 'classnames';\nimport { PropsWithChildren } from 'react';\nimport { makeStyles, Theme } from '@material-ui/core/styles';\n\n/** @public */\nexport type EntityTabsPanelClassKey = 'root' | 'stretch' | 'noPadding';\n\nconst useStyles = makeStyles(\n (theme: Theme) => ({\n root: {\n gridArea: 'pageContent',\n minWidth: 0,\n paddingTop: theme.spacing(3),\n paddingBottom: theme.spacing(3),\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(2),\n [theme.breakpoints.up('sm')]: {\n paddingLeft: theme.spacing(3),\n paddingRight: theme.spacing(3),\n },\n },\n stretch: {\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n },\n noPadding: {\n padding: 0,\n },\n }),\n { name: 'EntityTabsPanel' },\n);\n\ntype EntityTabsPanelProps = PropsWithChildren<{\n stretch?: boolean;\n noPadding?: boolean;\n className?: string;\n}>;\n\nexport function EntityTabsPanel(props: EntityTabsPanelProps) {\n const { className, stretch, noPadding, children, ...restProps } = props;\n\n const classes = useStyles();\n return (\n <article\n {...restProps}\n className={classNames(classes.root, className, {\n [classes.stretch]: stretch,\n [classes.noPadding]: noPadding,\n })}\n >\n {children}\n </article>\n );\n}\n","/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n ReactNode,\n forwardRef,\n useState,\n MouseEvent,\n MouseEventHandler,\n ReactElement,\n} from 'react';\nimport { Link } from 'react-router-dom';\nimport classnames from 'classnames';\n\nimport Typography from '@material-ui/core/Typography';\nimport Popover from '@material-ui/core/Popover';\nimport { TabProps, TabClassKey } from '@material-ui/core/Tab';\nimport { capitalize } from '@material-ui/core/utils';\nimport { createStyles, Theme, withStyles } from '@material-ui/core/styles';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport Button from '@material-ui/core/Button';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport List from '@material-ui/core/List';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { IconsApi, iconsApiRef } from '@backstage/frontend-plugin-api';\n\nconst styles = (theme: Theme) =>\n createStyles({\n /* Styles applied to the root element. */\n root: {\n ...theme.typography.button,\n maxWidth: 264,\n minWidth: 72,\n position: 'relative',\n boxSizing: 'border-box',\n minHeight: 48,\n flexShrink: 0,\n padding: '6px 12px',\n [theme.breakpoints.up('sm')]: {\n padding: '6px 24px',\n },\n overflow: 'hidden',\n whiteSpace: 'normal',\n textAlign: 'center',\n [theme.breakpoints.up('sm')]: {\n minWidth: 160,\n },\n },\n defaultTab: {\n ...theme.typography.caption,\n padding: theme.spacing(3, 3),\n textTransform: 'uppercase',\n fontWeight: theme.typography.fontWeightBold,\n color: theme.palette.text.secondary,\n },\n /* Styles applied to the root element if both `icon` and `label` are provided. */\n labelIcon: {\n minHeight: 72,\n paddingTop: 9,\n '& $wrapper > *:first-child': {\n marginBottom: 6,\n },\n },\n /* Styles applied to the root element if the parent [`Tabs`](/api/tabs/) has `textColor=\"inherit\"`. */\n textColorInherit: {\n color: 'inherit',\n opacity: 0.7,\n '&$selected': {\n opacity: 1,\n },\n '&$disabled': {\n opacity: 0.5,\n },\n },\n selectedButton: {\n color: `${theme.palette.text.primary}`,\n opacity: `${1}`,\n },\n unselectedButton: {\n color: `${theme.palette.text.secondary}`,\n opacity: `${0.7}`,\n },\n /* Styles applied to the root element if the parent [`Tabs`](/api/tabs/) has `textColor=\"primary\"`. */\n textColorPrimary: {\n color: theme.palette.text.secondary,\n '&$selected': {\n color: theme.palette.primary.main,\n },\n '&$disabled': {\n color: theme.palette.text.disabled,\n },\n },\n /* Styles applied to the root element if the parent [`Tabs`](/api/tabs/) has `textColor=\"secondary\"`. */\n textColorSecondary: {\n color: theme.palette.text.secondary,\n '&$selected': {\n color: theme.palette.secondary.main,\n },\n '&$disabled': {\n color: theme.palette.text.disabled,\n },\n },\n /* Pseudo-class applied to the root element if `selected={true}` (controlled by the Tabs component). */\n selected: {},\n /* Pseudo-class applied to the root element if `disabled={true}` (controlled by the Tabs component). */\n disabled: {},\n /* Styles applied to the root element if `fullWidth={true}` (controlled by the Tabs component). */\n fullWidth: {\n flexShrink: 1,\n flexGrow: 1,\n flexBasis: 0,\n maxWidth: 'none',\n },\n /* Styles applied to the root element if `wrapped={true}`. */\n wrapped: {\n fontSize: theme.typography.pxToRem(12),\n lineHeight: 1.5,\n },\n /* Styles applied to the `icon` and `label`'s wrapper element. */\n wrapper: {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '100%',\n flexDirection: 'row',\n },\n });\n\ntype EntityTabsGroupItem = {\n id: string;\n label: string;\n path: string;\n icon?: string | ReactElement;\n};\n\ntype EntityTabsGroupProps = TabProps & {\n classes?: Partial<ReturnType<typeof styles>>;\n indicator?: ReactNode;\n highlightedButton?: string;\n items: EntityTabsGroupItem[];\n onSelectTab?: MouseEventHandler<HTMLAnchorElement>;\n showIcons?: boolean;\n};\n\nfunction resolveIcon(\n icon: string | ReactElement | undefined,\n iconsApi: IconsApi,\n showIcons: boolean,\n) {\n if (!showIcons) {\n return undefined;\n }\n if (typeof icon === 'string') {\n const Icon = iconsApi.getIcon(icon);\n if (Icon) {\n return <Icon />;\n }\n return undefined;\n }\n return icon;\n}\n\nconst Tab = forwardRef(function Tab(props: EntityTabsGroupProps, ref: any) {\n const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null);\n const iconsApi = useApi(iconsApiRef);\n\n const open = Boolean(anchorEl);\n const submenuId = open ? 'tabbed-submenu' : undefined;\n\n const {\n classes,\n className,\n disabled = false,\n disableFocusRipple = false,\n items,\n fullWidth,\n indicator,\n label,\n onSelectTab,\n selected,\n textColor = 'inherit',\n wrapped = false,\n highlightedButton,\n showIcons = false,\n } = props;\n\n const groupIcon = resolveIcon(props.icon, iconsApi, showIcons);\n const testId = 'data-testid' in props && props['data-testid'];\n\n const handleMenuClose = () => {\n setAnchorEl(null);\n };\n\n const handleMenuClick = (event: MouseEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const classArray = [\n classes?.root,\n classes?.[`textColor${capitalize(textColor)}` as TabClassKey],\n classes && {\n [classes.disabled!]: disabled,\n [classes.selected!]: selected,\n [classes.labelIcon!]: label && groupIcon,\n [classes.fullWidth!]: fullWidth,\n [classes.wrapped!]: wrapped,\n },\n className,\n ];\n\n if (items.length === 1) {\n return (\n <Button\n focusRipple={!disableFocusRipple}\n data-testid={testId}\n className={classnames(\n classArray,\n classes && {\n [classes.labelIcon!]: label && (items[0].icon ?? groupIcon),\n },\n )}\n ref={ref}\n role=\"tab\"\n aria-selected={selected}\n disabled={disabled}\n component={Link}\n onClick={onSelectTab}\n to={items[0]?.path}\n startIcon={resolveIcon(items[0].icon, iconsApi, showIcons)}\n >\n <Typography className={classes?.wrapper} variant=\"button\">\n {items[0].label}\n </Typography>\n {indicator}\n </Button>\n );\n }\n const hasIcons = showIcons && items.some(i => i.icon);\n return (\n <>\n <Button\n data-testid={testId}\n focusRipple={!disableFocusRipple}\n className={classnames(classArray)}\n ref={ref}\n role=\"tab\"\n aria-selected={selected}\n disabled={disabled}\n onClick={handleMenuClick}\n startIcon={groupIcon}\n >\n <Typography className={classes?.wrapper} variant=\"button\">\n {label}\n </Typography>\n <ExpandMoreIcon />\n </Button>\n <Popover\n id={submenuId}\n open={open}\n anchorEl={anchorEl}\n onClose={handleMenuClose}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'center',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'center',\n }}\n >\n <List component=\"nav\">\n {items.map(i => {\n const itemIcon = resolveIcon(i.icon, iconsApi, showIcons);\n return (\n <ListItem\n key={`popover_item_${i.id}`}\n button\n focusRipple={!disableFocusRipple}\n classes={{\n selected: classnames(classes?.selectedButton),\n default: classnames(classes?.unselectedButton),\n disabled: classnames(classes?.disabled),\n }}\n ref={ref}\n aria-selected={selected}\n disabled={disabled}\n selected={highlightedButton === i.id}\n component={Link}\n onClick={e => {\n handleMenuClose();\n onSelectTab?.(e);\n }}\n to={i.path}\n >\n {itemIcon && <ListItemIcon>{itemIcon}</ListItemIcon>}\n <ListItemText\n inset={!itemIcon && hasIcons}\n primary={\n <>\n <Typography variant=\"button\">{i.label}</Typography>\n {indicator}\n </>\n }\n />\n </ListItem>\n );\n })}\n </List>\n </Popover>\n </>\n );\n});\n\n// @ts-ignore\nexport const EntityTabsGroup = withStyles(styles, { name: 'MuiTab' })(Tab);\n","/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ReactElement, useMemo } from 'react';\nimport Box from '@material-ui/core/Box';\nimport Tabs from '@material-ui/core/Tabs';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { EntityContentGroupDefinitions } from '@backstage/plugin-catalog-react/alpha';\n\nimport { EntityTabsGroup } from './EntityTabsGroup';\nimport { catalogTranslationRef } from '../../translation';\n\n/** @public */\nexport type HeaderTabsClassKey =\n | 'tabsWrapper'\n | 'defaultTab'\n | 'selected'\n | 'tabRoot';\n\nconst useStyles = makeStyles(\n theme => ({\n tabsWrapper: {\n gridArea: 'pageSubheader',\n backgroundColor: theme.palette.background.paper,\n paddingLeft: theme.spacing(3),\n minWidth: 0,\n },\n defaultTab: {\n ...theme.typography.caption,\n padding: theme.spacing(3, 3),\n textTransform: 'uppercase',\n fontWeight: theme.typography.fontWeightBold,\n color: theme.palette.text.secondary,\n },\n selected: {\n color: theme.palette.text.primary,\n },\n tabRoot: {\n '&:hover': {\n backgroundColor: theme.palette.background.default,\n color: theme.palette.text.primary,\n },\n },\n }),\n { name: 'BackstageHeaderTabs' },\n);\n\ntype Tab = {\n id: string;\n label: string;\n path: string;\n group?: string;\n icon?: string | ReactElement;\n};\n\ntype TabGroup = {\n group?: {\n title: string;\n icon?: string | ReactElement;\n };\n items: Array<Omit<Tab, 'group'>>;\n};\n\ntype EntityTabsListProps = {\n tabs: Tab[];\n groupDefinitions: EntityContentGroupDefinitions;\n defaultContentOrder?: 'title' | 'natural';\n showIcons?: boolean;\n selectedIndex?: number;\n};\n\nfunction resolveGroupId(\n tabGroup: string | undefined,\n groupDefinitions: EntityContentGroupDefinitions,\n aliasToGroup: Record<string, string>,\n): string | undefined {\n if (!tabGroup) {\n return undefined;\n }\n if (groupDefinitions[tabGroup]) {\n return tabGroup;\n }\n return aliasToGroup[tabGroup];\n}\n\nexport function EntityTabsList(props: EntityTabsListProps) {\n const styles = useStyles();\n const { t } = useTranslationRef(catalogTranslationRef);\n\n const {\n tabs: items,\n selectedIndex = 0,\n showIcons,\n groupDefinitions,\n defaultContentOrder = 'title',\n } = props;\n\n const aliasToGroup = useMemo(\n () =>\n Object.entries(groupDefinitions).reduce((map, [groupId, def]) => {\n for (const alias of def.aliases ?? []) {\n map[alias] = groupId;\n }\n return map;\n }, {} as Record<string, string>),\n [groupDefinitions],\n );\n\n const groups = useMemo(() => {\n const byKey = items.reduce((result, tab) => {\n const resolvedGroupId = resolveGroupId(\n tab.group,\n groupDefinitions,\n aliasToGroup,\n );\n const group = resolvedGroupId\n ? groupDefinitions[resolvedGroupId]\n : undefined;\n const groupOrId = group && resolvedGroupId ? resolvedGroupId : tab.id;\n result[groupOrId] = result[groupOrId] ?? {\n group,\n items: [],\n };\n result[groupOrId].items.push(tab);\n return result;\n }, {} as Record<string, TabGroup>);\n\n const groupOrder = Object.keys(groupDefinitions);\n const sorted = Object.entries(byKey).sort(([a], [b]) => {\n const ai = groupOrder.indexOf(a);\n const bi = groupOrder.indexOf(b);\n if (ai !== -1 && bi !== -1) {\n return ai - bi;\n }\n if (ai !== -1) {\n return -1;\n }\n if (bi !== -1) {\n return 1;\n }\n return 0;\n });\n\n for (const [id, tabGroup] of sorted) {\n const groupDef = groupDefinitions[id];\n if (groupDef) {\n const order = groupDef.contentOrder ?? defaultContentOrder;\n if (order === 'title') {\n tabGroup.items.sort((a, b) =>\n a.label.localeCompare(b.label, undefined, { sensitivity: 'base' }),\n );\n }\n }\n }\n\n return sorted;\n }, [items, groupDefinitions, aliasToGroup, defaultContentOrder]);\n\n const selectedItem = selectedIndex >= 0 ? items[selectedIndex] : undefined;\n const selectedGroup = resolveGroupId(\n selectedItem?.group,\n groupDefinitions,\n aliasToGroup,\n );\n return (\n <Box className={styles.tabsWrapper}>\n <Tabs\n selectionFollowsFocus\n indicatorColor=\"primary\"\n textColor=\"inherit\"\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n aria-label={t('entityTabs.tabsAriaLabel')}\n value={selectedGroup ?? selectedItem?.id ?? false}\n >\n {groups.map(([id, tabGroup]) => (\n <EntityTabsGroup\n data-testid={`header-tab-${id}`}\n className={styles.defaultTab}\n classes={{ selected: styles.selected, root: styles.tabRoot }}\n key={id}\n label={tabGroup.group?.title}\n icon={tabGroup.group?.icon}\n value={id}\n items={tabGroup.items}\n highlightedButton={selectedItem?.id}\n showIcons={showIcons}\n />\n ))}\n </Tabs>\n </Box>\n );\n}\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ReactElement, useMemo } from 'react';\nimport { Helmet } from 'react-helmet';\nimport { matchRoutes, useParams, useRoutes } from 'react-router-dom';\nimport { NotFoundErrorPage } from '@backstage/frontend-plugin-api';\nimport { EntityTabsPanel } from './EntityTabsPanel';\nimport { EntityTabsList } from './EntityTabsList';\nimport { EntityContentGroupDefinitions } from '@backstage/plugin-catalog-react/alpha';\n\nexport type SubRoute = {\n group?: string;\n path: string;\n title: string;\n icon?: string | ReactElement;\n children: JSX.Element;\n};\n\n// Normalize a route path so it can be matched correctly:\n// - strip leading slashes\n// - if the path already ends with a `*`, keep it as-is so explicit wildcards\n// like `/*` or `/foo/*` aren't double-suffixed into `*/*` / `foo/*/*`\n// - otherwise strip trailing slashes and append `/*` for nested matching;\n// a bare `/` collapses to the empty string so it acts as an index route\n// rather than a wildcard that would swallow every sub-path\nfunction normalizeRoutePath(path: string): string {\n const withoutLeading = path.replace(/^\\/+/, '');\n if (withoutLeading.endsWith('*')) {\n return withoutLeading;\n }\n const trimmed = withoutLeading.replace(/\\/+$/, '');\n return trimmed ? `${trimmed}/*` : '';\n}\n\nexport function useSelectedSubRoute(subRoutes: SubRoute[]): {\n index: number;\n route?: SubRoute;\n element?: JSX.Element;\n} {\n const params = useParams();\n\n const routes = useMemo(\n () =>\n subRoutes.map(({ path, children }) => ({\n caseSensitive: false,\n path: normalizeRoutePath(path),\n element: children,\n })),\n [subRoutes],\n );\n\n const element = useRoutes(routes) ?? undefined;\n\n let currentRoute = params['*'] ?? '';\n if (!currentRoute.startsWith('/')) {\n currentRoute = `/${currentRoute}`;\n }\n\n const [matchedRoute] = matchRoutes(routes, currentRoute) ?? [];\n const foundIndex = matchedRoute\n ? routes.findIndex(r => r.path === matchedRoute.route.path)\n : -1;\n\n return {\n index: foundIndex,\n element,\n route: subRoutes[foundIndex],\n };\n}\n\ntype EntityTabsProps = {\n routes: SubRoute[];\n groupDefinitions: EntityContentGroupDefinitions;\n defaultContentOrder?: 'title' | 'natural';\n showIcons?: boolean;\n};\n\nexport function EntityTabs(props: EntityTabsProps) {\n const { routes, groupDefinitions, defaultContentOrder, showIcons } = props;\n\n const { index, route, element } = useSelectedSubRoute(routes);\n\n const tabs = useMemo(\n () =>\n routes.map(r => {\n const { path, title, group, icon } = r;\n let to = path;\n // Remove trailing /*\n to = to.replace(/\\/\\*$/, '');\n // And remove leading / for relative navigation\n to = to.replace(/^\\//, '');\n return {\n group,\n id: path,\n path: to,\n label: title,\n icon,\n };\n }),\n [routes],\n );\n\n return (\n <>\n <EntityTabsList\n tabs={tabs}\n selectedIndex={index}\n showIcons={showIcons}\n groupDefinitions={groupDefinitions}\n defaultContentOrder={defaultContentOrder}\n />\n <EntityTabsPanel>\n <Helmet title={route?.title} />\n {element ?? <NotFoundErrorPage />}\n </EntityTabsPanel>\n </>\n );\n}\n"],"names":["DependencyGraphTypes","useStyles","makeStyles","FavoriteToggleIcon","props","isFavorite","classes","Typography","StarIcon","UnstarredIcon","FavoriteToggle","id","title","value","onChange","iconButtonProps","Tooltip","IconButton","theme","alpha","HeaderLabelContent","className","typographyRootComponent","HeaderLabel","label","url","contentTypograpyRootComponent","content","Grid","Link","ButtonIconDefinition","defineComponent","styles","ButtonIcon","forwardRef","ref","ownProps","restProps","dataAttributes","useDefinition","icon","isPending","RAButton","ProgressBar","RiLoader4Line","LazyDependencyGraphContent","lazy","i","m","DependencyGraph","Suspense","DEFAULT_ICON","SvgIcon","EntityKindIcon","app","actualKind","kind","entityRef","otherProps","Icon","useApp","getKind","parseEntityRef","CustomNode","node","navigate","useNavigate","entityRoute","useRouteRef","entityRouteRef","width","setWidth","useState","height","setHeight","idRef","useRef","useLayoutEffect","renderedHeight","renderedWidth","Math","hasKindIcon","paddedIconWidth","iconSize","paddedHeight","padding","displayTitle","useEntityPresentation","DEFAULT_NAMESPACE","classNames","AncestryPage","loading","error","nodes","edges","useAncestry","root","catalogClient","useApi","catalogApiRef","stringifyEntityRef","useAsync","response","Array","current","currentRef","isRootNode","parentRef","t","useTranslationRef","catalogReactTranslationRef","Progress","ResponseErrorPanel","Box","Text","ListSection","ListItemRow","EntityList","entity","EntityRefLink","Contents","location","originLocation","colocatedEntities","useColocated","catalogApi","currentEntityRef","ANNOTATION_LOCATION","origin","ANNOTATION_ORIGIN_LOCATION","colocated","Alert","atLocation","e","atOrigin","ColocatedPage","sortKeys","data","Object","a","b","JsonPage","CodeSnippet","JSON","undefined","TagGroupDefinition","TagDefinition","TagGroup","items","children","renderEmptyState","ReactAriaTagGroup","ReactAriaTagList","Tag","analytics","href","textValue","ReactAriaTag","text","getNodeText","String","allowsRemoving","ReactAriaButton","RiCloseCircleLine","entriesToItems","entries","key","link","CopyButton","copied","setCopied","timerRef","useEffect","clearTimeout","handlePress","window","setTimeout","RiCheckLine","RiFileCopyLine","VisuallyHidden","HelpIcon","ButtonLink","RiQuestionLine","Container","Card","CardHeader","CardBody","ListSubheader","KeyValueList","item","OverviewPage","apiVersion","metadata","spec","relations","status","groupedRelations","groupBy","sortBy","r","Flex","tag","type","groupRelations","group","index","YamlPage","YAML","TAB_KEYS","DialogContents","initialTab","onSelect","tabNames","useMemo","tabContent","DialogHeader","DialogBody","Tabs","TabList","tab","Tab","TabPanel","InspectEntityDialog","open","onClose","Dialog","isOpen","getEntityRef","entityOrRef","useStarredEntity","starredEntitiesApi","starredEntitiesApiRef","isStarredEntity","setIsStarredEntity","subscription","starredEntities","toggleStarredEntity","useCallback","EntityContextMenuItemContent","useProps","disabled","onClick","menuItemProps","onAction","result","MenuItem","EntityContextMenuItem","ExtensionBoundary","EntityContextMenu","UNSTABLE_extraContextMenuItems","contextMenuItems","catalogTranslationRef","MenuTrigger","RiMore2Line","Menu","MenuSeparator","dataKey","EntityLayoutRoute","useEntityLayoutRoutes","useElementFilter","elements","attachComponentData","FavoriteEntity","EntityLabels","ownedByRelations","getEntityRelations","RELATION_OWNED_BY","EntityRefLinks","headerProps","paramKind","paramNamespace","paramName","namespace","name","findParentRelation","entityRelations","relationTypes","foundRelation","relation","EntityHeaderTitle","useAsyncEntity","useRouteRefParams","EntityDisplayName","EntityHeaderSubtitle","parentEntityRelations","parentEntity","ancestorEntity","Breadcrumbs","EntityHeader","subtitle","entityFallbackText","searchParams","setSearchParams","useSearchParams","selectedInspectEntityDialogTab","setInspectEntityDialogTab","newTab","closeInspectEntityDialog","Header","EntityLayout","header","NotFoundComponent","groupDefinitions","defaultContentOrder","showNavItemIcons","routes","Page","EntityTabs","Content","WarningPanel","EntityTabsPanel","stretch","noPadding","resolveIcon","iconsApi","showIcons","anchorEl","setAnchorEl","iconsApiRef","Boolean","disableFocusRipple","fullWidth","indicator","onSelectTab","selected","textColor","wrapped","highlightedButton","groupIcon","testId","handleMenuClose","classArray","capitalize","Button","classnames","hasIcons","event","ExpandMoreIcon","Popover","List","itemIcon","ListItem","ListItemIcon","ListItemText","EntityTabsGroup","withStyles","createStyles","resolveGroupId","tabGroup","aliasToGroup","EntityTabsList","selectedIndex","map","groupId","def","alias","groups","byKey","resolvedGroupId","groupOrId","groupOrder","sorted","ai","bi","groupDef","order","selectedItem","selectedGroup","useSelectedSubRoute","subRoutes","params","useParams","path","normalizeRoutePath","withoutLeading","trimmed","element","useRoutes","currentRoute","matchedRoute","matchRoutes","foundIndex","route","tabs","to","Helmet","NotFoundErrorPage"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunktechdocs_cli_embedded_app=self.webpackChunktechdocs_cli_embedded_app||[]).push([["
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
"use strict";(self.webpackChunktechdocs_cli_embedded_app=self.webpackChunktechdocs_cli_embedded_app||[]).push([["7213"],{98552(e,t,o){o.d(t,{A:()=>y});var a=o(89575),n=o(39850),r=o(14041),c=o(36274),i=o(137),l=o(38483);let d=(0,l.A)(r.createElement("path",{d:"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z"}),"CheckBoxOutlineBlank"),s=(0,l.A)(r.createElement("path",{d:"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"}),"CheckBox");var u=o(268);let p=(0,l.A)(r.createElement("path",{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z"}),"IndeterminateCheckBox");var m=o(11192),f=o(7031),h=r.createElement(s,null),b=r.createElement(d,null),v=r.createElement(p,null),g=r.forwardRef(function(e,t){var o=e.checkedIcon,l=e.classes,d=e.color,s=void 0===d?"secondary":d,u=e.icon,p=e.indeterminate,f=void 0!==p&&p,g=e.indeterminateIcon,y=void 0===g?v:g,k=e.inputProps,A=e.size,x=void 0===A?"medium":A,C=(0,n.A)(e,["checkedIcon","classes","color","icon","indeterminate","indeterminateIcon","inputProps","size"]),S=f?y:void 0===u?b:u,z=f?y:void 0===o?h:o;return r.createElement(i.A,(0,a.A)({type:"checkbox",classes:{root:(0,c.A)(l.root,l["color".concat((0,m.A)(s))],f&&l.indeterminate),checked:l.checked,disabled:l.disabled},color:s,inputProps:(0,a.A)({"data-indeterminate":f},k),icon:r.cloneElement(S,{fontSize:void 0===S.props.fontSize&&"small"===x?x:S.props.fontSize}),checkedIcon:r.cloneElement(z,{fontSize:void 0===z.props.fontSize&&"small"===x?x:z.props.fontSize}),ref:t},C))});let y=(0,f.A)(function(e){return{root:{color:e.palette.text.secondary},checked:{},disabled:{},indeterminate:{},colorPrimary:{"&$checked":{color:e.palette.primary.main,"&:hover":{backgroundColor:(0,u.X4)(e.palette.primary.main,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}}},"&$disabled":{color:e.palette.action.disabled}},colorSecondary:{"&$checked":{color:e.palette.secondary.main,"&:hover":{backgroundColor:(0,u.X4)(e.palette.secondary.main,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}}},"&$disabled":{color:e.palette.action.disabled}}}},{name:"MuiCheckbox"})(g)},86901(e,t,o){o.d(t,{A:()=>p});var a=o(89575),n=o(39850),r=o(14041),c=o(36274),i=o(41682),l=o(7031),d=o(72501),s=o(11192),u=r.forwardRef(function(e,t){e.checked;var o=e.classes,l=e.className,u=e.control,p=e.disabled,m=(e.inputRef,e.label),f=e.labelPlacement,h=void 0===f?"end":f,b=(e.name,e.onChange,e.value,(0,n.A)(e,["checked","classes","className","control","disabled","inputRef","label","labelPlacement","name","onChange","value"])),v=(0,i.A)(),g=p;void 0===g&&void 0!==u.props.disabled&&(g=u.props.disabled),void 0===g&&v&&(g=v.disabled);var y={disabled:g};return["checked","name","onChange","value","inputRef"].forEach(function(t){void 0===u.props[t]&&void 0!==e[t]&&(y[t]=e[t])}),r.createElement("label",(0,a.A)({className:(0,c.A)(o.root,l,"end"!==h&&o["labelPlacement".concat((0,s.A)(h))],g&&o.disabled),ref:t},b),r.cloneElement(u,y),r.createElement(d.A,{component:"span",className:(0,c.A)(o.label,g&&o.disabled)},m))});let p=(0,l.A)(function(e){return{root:{display:"inline-flex",alignItems:"center",cursor:"pointer",verticalAlign:"middle",WebkitTapHighlightColor:"transparent",marginLeft:-11,marginRight:16,"&$disabled":{cursor:"default"}},labelPlacementStart:{flexDirection:"row-reverse",marginLeft:16,marginRight:-11},labelPlacementTop:{flexDirection:"column-reverse",marginLeft:16},labelPlacementBottom:{flexDirection:"column",marginLeft:16},disabled:{},label:{"&$disabled":{color:e.palette.text.disabled}}}},{name:"MuiFormControlLabel"})(u)},65569(e,t,o){o.d(t,{A:()=>d});var a=o(89575),n=o(39850),r=o(14041),c=o(36274),i=o(7031),l=r.forwardRef(function(e,t){var o=e.classes,i=e.className,l=(0,n.A)(e,["classes","className"]);return r.createElement("div",(0,a.A)({className:(0,c.A)(o.root,i),ref:t},l))});l.muiName="ListItemSecondaryAction";let d=(0,i.A)({root:{position:"absolute",right:16,top:"50%",transform:"translateY(-50%)"}},{name:"MuiListItemSecondaryAction"})(l)},62261(e,t,o){o.d(t,{A:()=>s});var a=o(89575),n=o(39850),r=o(14041),c=o(36274),i=o(7031),l=o(11192),d=r.forwardRef(function(e,t){var o=e.classes,i=e.className,d=e.color,s=void 0===d?"default":d,u=e.component,p=e.disableGutters,m=e.disableSticky,f=e.inset,h=(0,n.A)(e,["classes","className","color","component","disableGutters","disableSticky","inset"]);return r.createElement(void 0===u?"li":u,(0,a.A)({className:(0,c.A)(o.root,i,"default"!==s&&o["color".concat((0,l.A)(s))],void 0!==f&&f&&o.inset,!(void 0!==m&&m)&&o.sticky,!(void 0!==p&&p)&&o.gutters),ref:t},h))});let s=(0,i.A)(function(e){return{root:{boxSizing:"border-box",lineHeight:"48px",listStyle:"none",color:e.palette.text.secondary,fontFamily:e.typography.fontFamily,fontWeight:e.typography.fontWeightMedium,fontSize:e.typography.pxToRem(14)},colorPrimary:{color:e.palette.primary.main},colorInherit:{color:"inherit"},gutters:{paddingLeft:16,paddingRight:16},inset:{paddingLeft:72},sticky:{position:"sticky",top:0,zIndex:1,backgroundColor:"inherit"}}},{name:"MuiListSubheader"})(d)},137(e,t,o){o.d(t,{A:()=>m});var a=o(89575),n=o(1400),r=o(39850),c=o(14041),i=o(36274),l=o(45065),d=o(41682),s=o(7031),u=o(29365),p=c.forwardRef(function(e,t){var o=e.autoFocus,s=e.checked,p=e.checkedIcon,m=e.classes,f=e.className,h=e.defaultChecked,b=e.disabled,v=e.icon,g=e.id,y=e.inputProps,k=e.inputRef,A=e.name,x=e.onBlur,C=e.onChange,S=e.onFocus,z=e.readOnly,E=e.required,I=e.tabIndex,O=e.type,N=e.value,P=(0,r.A)(e,["autoFocus","checked","checkedIcon","classes","className","defaultChecked","disabled","icon","id","inputProps","inputRef","name","onBlur","onChange","onFocus","readOnly","required","tabIndex","type","value"]),R=(0,l.A)({controlled:s,default:!!h,name:"SwitchBase",state:"checked"}),w=(0,n.A)(R,2),L=w[0],B=w[1],F=(0,d.A)(),M=b;return F&&void 0===M&&(M=F.disabled),c.createElement(u.A,(0,a.A)({component:"span",className:(0,i.A)(m.root,f,L&&m.checked,M&&m.disabled),disabled:M,tabIndex:null,role:void 0,onFocus:function(e){S&&S(e),F&&F.onFocus&&F.onFocus(e)},onBlur:function(e){x&&x(e),F&&F.onBlur&&F.onBlur(e)},ref:t},P),c.createElement("input",(0,a.A)({autoFocus:o,checked:s,defaultChecked:h,className:m.input,disabled:M,id:("checkbox"===O||"radio"===O)&&g,name:A,onChange:function(e){var t=e.target.checked;B(t),C&&C(e,t)},readOnly:z,ref:k,required:E,tabIndex:I,type:O,value:N},y)),L?p:v)});let m=(0,s.A)({root:{padding:9},checked:{},disabled:{},input:{cursor:"inherit",position:"absolute",opacity:0,width:"100%",height:"100%",top:0,left:0,margin:0,padding:0,zIndex:1}},{name:"PrivateSwitchBase"})(p)},92399(e,t,o){var a=o(4293),n=o(78920);t.default=void 0;var r=n(o(14041));t.default=(0,a(o(74044)).default)(r.createElement("path",{d:"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z"}),"Cancel")},56307(e){e.exports=function e(t,o){if(t===o)return!0;if(t&&o&&"object"==typeof t&&"object"==typeof o){if(t.constructor!==o.constructor)return!1;if(Array.isArray(t)){if((a=t.length)!=o.length)return!1;for(n=a;0!=n--;)if(!e(t[n],o[n]))return!1;return!0}if(t.constructor===RegExp)return t.source===o.source&&t.flags===o.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===o.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===o.toString();if((a=(r=Object.keys(t)).length)!==Object.keys(o).length)return!1;for(n=a;0!=n--;)if(!Object.prototype.hasOwnProperty.call(o,r[n]))return!1;for(n=a;0!=n--;){var a,n,r,c=r[n];if(("_owner"!==c||!t.$$typeof)&&!e(t[c],o[c]))return!1}return!0}return t!=t&&o!=o}}}]);
|
|
2
|
+
//# sourceMappingURL=7213.e2116c72.chunk.js.map
|