@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.
Files changed (66) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/embedded-app/.config-schema.json +1967 -1200
  3. package/dist/embedded-app/index.html +1 -1
  4. package/dist/embedded-app/index.html.tmpl +1 -1
  5. package/dist/embedded-app/static/123.bcb96abf.chunk.js +2 -0
  6. package/dist/embedded-app/static/123.bcb96abf.chunk.js.map +1 -0
  7. package/dist/embedded-app/static/1659.fe3e020b.chunk.js +2 -0
  8. package/dist/embedded-app/static/1659.fe3e020b.chunk.js.map +1 -0
  9. package/dist/embedded-app/static/3641.2f6dbbcb.chunk.js +2 -0
  10. package/dist/embedded-app/static/3641.2f6dbbcb.chunk.js.map +1 -0
  11. package/dist/embedded-app/static/3641.3641.9c1b1a2e.css +2 -0
  12. package/dist/embedded-app/static/3641.3641.9c1b1a2e.css.map +1 -0
  13. package/dist/embedded-app/static/4587.9946f651.chunk.js +2 -0
  14. package/dist/embedded-app/static/4587.9946f651.chunk.js.map +1 -0
  15. package/dist/embedded-app/static/{5443.fa47af87.chunk.js → 5443.835e027f.chunk.js} +2 -2
  16. package/dist/embedded-app/static/{5443.fa47af87.chunk.js.map → 5443.835e027f.chunk.js.map} +1 -1
  17. package/dist/embedded-app/static/{3939.3939.44355183.css → 5954.5954.8056ed76.css} +1 -1
  18. package/dist/embedded-app/static/{3939.3939.44355183.css.map → 5954.5954.8056ed76.css.map} +1 -1
  19. package/dist/embedded-app/static/5954.f0710c0b.chunk.js +2 -0
  20. package/dist/embedded-app/static/5954.f0710c0b.chunk.js.map +1 -0
  21. package/dist/embedded-app/static/{4815.b2bde1a3.chunk.js → 7213.e2116c72.chunk.js} +2 -2
  22. package/dist/embedded-app/static/7213.e2116c72.chunk.js.map +1 -0
  23. package/dist/embedded-app/static/{7226.8c68c3d3.chunk.js → 7226.07a43ca6.chunk.js} +2 -2
  24. package/dist/embedded-app/static/7226.07a43ca6.chunk.js.map +1 -0
  25. package/dist/embedded-app/static/{7477.a970d20a.chunk.js → 7227.69beafef.chunk.js} +5 -5
  26. package/dist/embedded-app/static/7227.69beafef.chunk.js.map +1 -0
  27. package/dist/embedded-app/static/{main.728cdf6e.css → main.2a45aed3.css} +2 -2
  28. package/dist/embedded-app/static/main.2a45aed3.css.map +1 -0
  29. package/dist/embedded-app/static/main.3aa6c085.js +523 -0
  30. package/dist/embedded-app/static/main.3aa6c085.js.map +1 -0
  31. package/dist/embedded-app/static/{module-material-ui.972bd852.js → module-material-ui.0bea4977.js} +2 -2
  32. package/dist/embedded-app/static/module-material-ui.0bea4977.js.map +1 -0
  33. package/dist/embedded-app/static/module-react-aria-components.edebf589.js +2 -0
  34. package/dist/embedded-app/static/module-react-aria-components.edebf589.js.map +1 -0
  35. package/dist/embedded-app/static/module-react-aria.84a78dd1.js +13 -0
  36. package/dist/embedded-app/static/module-react-aria.84a78dd1.js.map +1 -0
  37. package/dist/embedded-app/static/{module-react-stately.97fc37eb.js → module-react-stately.3db88231.js} +2 -2
  38. package/dist/embedded-app/static/module-react-stately.3db88231.js.map +1 -0
  39. package/dist/embedded-app/static/module-remixicon.4e40b5b6.js +2 -0
  40. package/dist/embedded-app/static/{module-remixicon.0feb7353.js.map → module-remixicon.4e40b5b6.js.map} +1 -1
  41. package/dist/embedded-app/static/{runtime.8fda57a9.js → runtime.9fcbc8ae.js} +2 -2
  42. package/dist/embedded-app/static/runtime.9fcbc8ae.js.map +1 -0
  43. package/dist/package.json.cjs.js +1 -1
  44. package/package.json +7 -7
  45. package/dist/embedded-app/static/123.59719fa4.chunk.js +0 -2
  46. package/dist/embedded-app/static/123.59719fa4.chunk.js.map +0 -1
  47. package/dist/embedded-app/static/1659.6b3694d1.chunk.js +0 -2
  48. package/dist/embedded-app/static/1659.6b3694d1.chunk.js.map +0 -1
  49. package/dist/embedded-app/static/3939.265160c5.chunk.js +0 -2
  50. package/dist/embedded-app/static/3939.265160c5.chunk.js.map +0 -1
  51. package/dist/embedded-app/static/4587.baab3514.chunk.js +0 -2
  52. package/dist/embedded-app/static/4587.baab3514.chunk.js.map +0 -1
  53. package/dist/embedded-app/static/4815.b2bde1a3.chunk.js.map +0 -1
  54. package/dist/embedded-app/static/7226.8c68c3d3.chunk.js.map +0 -1
  55. package/dist/embedded-app/static/7477.a970d20a.chunk.js.map +0 -1
  56. package/dist/embedded-app/static/main.728cdf6e.css.map +0 -1
  57. package/dist/embedded-app/static/main.fbc1b502.js +0 -523
  58. package/dist/embedded-app/static/main.fbc1b502.js.map +0 -1
  59. package/dist/embedded-app/static/module-material-ui.972bd852.js.map +0 -1
  60. package/dist/embedded-app/static/module-react-aria-components.ab7cc6df.js +0 -2
  61. package/dist/embedded-app/static/module-react-aria-components.ab7cc6df.js.map +0 -1
  62. package/dist/embedded-app/static/module-react-aria.e3e38de1.js +0 -13
  63. package/dist/embedded-app/static/module-react-aria.e3e38de1.js.map +0 -1
  64. package/dist/embedded-app/static/module-react-stately.97fc37eb.js.map +0 -1
  65. package/dist/embedded-app/static/module-remixicon.0feb7353.js +0 -2
  66. package/dist/embedded-app/static/runtime.8fda57a9.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static/3641.2f6dbbcb.chunk.js","sources":["webpack://techdocs-cli-embedded-app/../core-components/src/components/DependencyGraph/types.ts","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/../ui/src/components/Avatar/definition.ts","webpack://techdocs-cli-embedded-app/../ui/src/components/Avatar/Avatar.module.css?1f28","webpack://techdocs-cli-embedded-app/../ui/src/components/Avatar/Avatar.tsx","webpack://techdocs-cli-embedded-app/../../node_modules/react-aria/dist/private/interactions/Pressable.mjs","webpack://techdocs-cli-embedded-app/../ui/src/components/Header/HeaderMetadataUsers.module.css?4740","webpack://techdocs-cli-embedded-app/../ui/src/components/Header/HeaderMetadataUsers.tsx","webpack://techdocs-cli-embedded-app/../../plugins/catalog/src/alpha/components/EntityHeader/EntityHeaderBui.tsx","webpack://techdocs-cli-embedded-app/../../plugins/catalog/src/alpha/components/EntityLayout/EntityLayoutBui.tsx","webpack://techdocs-cli-embedded-app/../../plugins/catalog/src/alpha/components/EntityTabs/useEntityTabs.tsx","webpack://techdocs-cli-embedded-app/../../plugins/catalog/src/alpha/components/EntityLayout/entityLayoutRoutes.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 */\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 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 { AvatarOwnProps } from './types';\nimport styles from './Avatar.module.css';\n\n/**\n * Component definition for Avatar\n * @public\n */\nexport const AvatarDefinition = defineComponent<AvatarOwnProps>()({\n styles,\n classNames: {\n root: 'bui-AvatarRoot',\n image: 'bui-AvatarImage',\n fallback: 'bui-AvatarFallback',\n },\n propDefs: {\n size: { dataAttribute: true, default: 'medium' },\n purpose: { default: 'informative' },\n src: {},\n name: {},\n className: {},\n },\n});\n","// extracted by css-extract-rspack-plugin\nexport default {\"bui-AvatarRoot\":\"gNh1vAfzsq8THFv8\",\"bui-AvatarImage\":\"UTo1RZ1yTUTQjyTy\",\"bui-AvatarFallback\":\"ZmCUJdIze6ktXtdz\"};","/*\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 { forwardRef, useState, useEffect } from 'react';\nimport { AvatarProps } from './types';\nimport { useDefinition } from '../../hooks/useDefinition';\nimport { AvatarDefinition } from './definition';\n\n/**\n * Displays a user's profile image with an automatic fallback to their initials when the image fails to load.\n *\n * @public\n */\nexport const Avatar = forwardRef<HTMLDivElement, AvatarProps>((props, ref) => {\n const { ownProps, restProps, dataAttributes } = useDefinition(\n AvatarDefinition,\n props,\n );\n\n const { classes, size, src, name, purpose } = ownProps;\n\n const [imageStatus, setImageStatus] = useState<\n 'loading' | 'loaded' | 'error'\n >('loading');\n\n useEffect(() => {\n setImageStatus('loading');\n const img = new Image();\n img.onload = () => setImageStatus('loaded');\n img.onerror = () => setImageStatus('error');\n img.src = src;\n\n return () => {\n img.onload = null;\n img.onerror = null;\n };\n }, [src]);\n\n const initialsCount = ['x-small', 'small'].includes(size) ? 1 : 2;\n\n const initials = name\n .split(' ')\n .map(word => word[0])\n .join('')\n .toLocaleUpperCase('en-US')\n .slice(0, initialsCount);\n\n return (\n <div\n ref={ref}\n role=\"img\"\n aria-label={purpose === 'informative' ? name : undefined}\n aria-hidden={purpose === 'decoration' ? true : undefined}\n className={classes.root}\n {...dataAttributes}\n {...restProps}\n >\n {imageStatus === 'loaded' ? (\n <img src={src} alt=\"\" className={classes.image} />\n ) : (\n <div aria-hidden=\"true\" className={classes.fallback}>\n {initials}\n </div>\n )}\n </div>\n );\n});\n\nAvatar.displayName = 'Avatar';\n","import {getOwnerWindow as $d447af545b77c9f1$export$f21a1ffae260145a} from \"../utils/domHelpers.mjs\";\nimport {isFocusable as $3b8b240c1bf84ab9$export$4c063cf1350e6fed} from \"../utils/isFocusable.mjs\";\nimport {mergeProps as $bbaa08b3cd72f041$export$9d1611c77c2fe928} from \"../utils/mergeProps.mjs\";\nimport {mergeRefs as $4064df0d6f9620e1$export$c9058316764c140e} from \"../utils/mergeRefs.mjs\";\nimport {usePress as $d27d541f9569d26d$export$45712eceda6fad21} from \"./usePress.mjs\";\nimport {useFocusable as $d1116acdf220c2da$export$4c014de7c8940b4c} from \"./useFocusable.mjs\";\nimport {useObjectRef as $03e8ab2d84d7657a$export$4338b53315abf666} from \"../utils/useObjectRef.mjs\";\nimport $bliEe$react, {useEffect as $bliEe$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\n\n\n\n\n\nconst $15e7830bf6471d45$export$27c701ed9e449e99 = /*#__PURE__*/ (0, $bliEe$react).forwardRef(({ children: children, ...props }, ref)=>{\n ref = (0, $03e8ab2d84d7657a$export$4338b53315abf666)(ref);\n let { pressProps: pressProps } = (0, $d27d541f9569d26d$export$45712eceda6fad21)({\n ...props,\n ref: ref\n });\n let { focusableProps: focusableProps } = (0, $d1116acdf220c2da$export$4c014de7c8940b4c)(props, ref);\n let child = (0, $bliEe$react).Children.only(children);\n (0, $bliEe$useEffect)(()=>{\n if (process.env.NODE_ENV === 'production') return;\n let el = ref.current;\n if (!el || !(el instanceof (0, $d447af545b77c9f1$export$f21a1ffae260145a)(el).Element)) {\n console.error('<Pressable> child must forward its ref to a DOM element.');\n return;\n }\n if (!props.isDisabled && !(0, $3b8b240c1bf84ab9$export$4c063cf1350e6fed)(el)) {\n console.warn('<Pressable> child must be focusable. Please ensure the tabIndex prop is passed through.');\n return;\n }\n if (el.localName !== 'button' && el.localName !== 'input' && el.localName !== 'select' && el.localName !== 'textarea' && el.localName !== 'a' && el.localName !== 'area' && el.localName !== 'summary') {\n let role = el.getAttribute('role');\n if (!role) console.warn('<Pressable> child must have an interactive ARIA role.');\n else if (// https://w3c.github.io/aria/#widget_roles\n role !== 'application' && role !== 'button' && role !== 'checkbox' && role !== 'combobox' && role !== 'gridcell' && role !== 'link' && role !== 'menuitem' && role !== 'menuitemcheckbox' && role !== 'menuitemradio' && role !== 'option' && role !== 'radio' && role !== 'searchbox' && role !== 'separator' && role !== 'slider' && role !== 'spinbutton' && role !== 'switch' && role !== 'tab' && role !== 'textbox' && role !== 'treeitem') console.warn(`<Pressable> child must have an interactive ARIA role. Got \"${role}\".`);\n }\n }, [\n ref,\n props.isDisabled\n ]);\n // @ts-ignore\n let childRef = parseInt((0, $bliEe$react).version, 10) < 19 ? child.ref : child.props.ref;\n return /*#__PURE__*/ (0, $bliEe$react).cloneElement(child, {\n ...(0, $bbaa08b3cd72f041$export$9d1611c77c2fe928)(pressProps, focusableProps, child.props),\n // @ts-ignore\n ref: (0, $4064df0d6f9620e1$export$c9058316764c140e)(childRef, ref)\n });\n});\n\n\nexport {$15e7830bf6471d45$export$27c701ed9e449e99 as Pressable};\n//# sourceMappingURL=Pressable.mjs.map\n","// extracted by css-extract-rspack-plugin\nexport default {\"single\":\"OVBrDVLk9cMf8eGe\",\"stack\":\"dGAkWeg0vjQStoX_\",\"avatarLink\":\"HoW5Wjzr74sm26Zo\"};","/*\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 type { HeaderMetadataUser } from './types';\nimport { Avatar } from '../Avatar';\nimport { Tooltip, TooltipTrigger } from '../Tooltip';\nimport { Text } from '../Text';\nimport { Link } from '../Link';\nimport { Pressable } from 'react-aria';\nimport styles from './HeaderMetadataUsers.module.css';\n\n/**\n * Displays a list of users as avatars inside a Header metadata value.\n * A single user shows the avatar with their name beside it.\n * Multiple users show avatars in a row with the name revealed on hover via tooltip.\n * When a user has an `href`, the avatar and name become links.\n *\n * @public\n */\nexport const HeaderMetadataUsers = ({\n users,\n}: {\n users: HeaderMetadataUser[];\n}) => {\n if (users.length === 0) return null;\n\n if (users.length === 1) {\n const user = users[0];\n if (user.href) {\n return (\n <Link\n href={user.href}\n variant=\"body-medium\"\n standalone\n className={styles.single}\n >\n <Avatar\n src={user.src ?? 'data:,'}\n name={user.name}\n size=\"small\"\n purpose=\"decoration\"\n />\n {user.name}\n </Link>\n );\n }\n\n return (\n <div className={styles.single}>\n <Avatar\n src={user.src ?? 'data:,'}\n name={user.name}\n size=\"small\"\n purpose=\"decoration\"\n />\n <Text variant=\"body-medium\">{user.name}</Text>\n </div>\n );\n }\n\n return (\n <ul className={styles.stack}>\n {users.map((user, i) => (\n <li key={user.href ?? `${i}:${user.name}`}>\n <TooltipTrigger>\n {user.href ? (\n <Link\n href={user.href}\n aria-label={user.name}\n className={styles.avatarLink}\n >\n <Avatar\n src={user.src ?? 'data:,'}\n name={user.name}\n size=\"small\"\n purpose=\"decoration\"\n />\n </Link>\n ) : (\n <Pressable>\n <Avatar\n src={user.src ?? 'data:,'}\n name={user.name}\n size=\"small\"\n purpose=\"informative\"\n />\n </Pressable>\n )}\n <Tooltip>{user.name}</Tooltip>\n </TooltipTrigger>\n </li>\n ))}\n </ul>\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 { useMemo } from 'react';\nimport {\n Box,\n ButtonIcon,\n Header,\n HeaderMetadataUsers,\n Link,\n type HeaderMetadataItem,\n type HeaderMetadataUser,\n type HeaderNavTabItem,\n} from '@backstage/ui';\nimport {\n Entity,\n RELATION_OWNED_BY,\n RELATION_PART_OF,\n stringifyEntityRef,\n type CompoundEntityRef,\n} from '@backstage/catalog-model';\nimport { useApi, useRouteRefParams } from '@backstage/core-plugin-api';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport {\n catalogApiRef,\n catalogReactTranslationRef,\n entityRouteRef,\n getEntityRelations,\n useAsyncEntity,\n useEntityPresentation,\n useEntityRefLink,\n useStarredEntity,\n} from '@backstage/plugin-catalog-react';\nimport { RiStarFill, RiStarLine } from '@remixicon/react';\nimport useAsync from 'react-use/esm/useAsync';\nimport { catalogTranslationRef } from '../../translation';\nimport {\n EntityContextMenu,\n type EntityContextMenuItemDataWithNode,\n} from '../EntityContextMenu';\n\nfunction useOwnerUsers(entity: Entity | undefined): HeaderMetadataUser[] {\n const catalogApi = useApi(catalogApiRef);\n const entityLink = useEntityRefLink();\n const ownerRefs = useMemo(\n () => getEntityRelations(entity, RELATION_OWNED_BY),\n [entity],\n );\n const ownerRefStrings = useMemo(\n () => ownerRefs.map(ref => stringifyEntityRef(ref)),\n [ownerRefs],\n );\n const { value: ownerEntities } = useAsync(async () => {\n if (ownerRefStrings.length === 0) return [];\n return (\n await catalogApi.getEntitiesByRefs({\n entityRefs: ownerRefStrings,\n fields: [\n 'kind',\n 'metadata.name',\n 'metadata.namespace',\n 'metadata.title',\n 'spec.profile',\n ],\n })\n ).items;\n }, [catalogApi, ownerRefStrings]);\n\n return ownerRefs.map((ref, index) => {\n const owner = ownerEntities?.[index];\n const profile = (owner?.spec as { profile?: { picture?: string } })\n ?.profile;\n return {\n name: owner?.metadata.title ?? owner?.metadata.name ?? ref.name,\n src: profile?.picture,\n href: entityLink(ref),\n };\n });\n}\n\nfunction HierarchyLinks(props: { refs: CompoundEntityRef[] }) {\n const entityLink = useEntityRefLink();\n return (\n <Box as=\"ul\" display=\"inline\" m=\"0\" p=\"0\" style={{ listStyle: 'none' }}>\n {props.refs.map((ref, index) => (\n <Box as=\"li\" display=\"inline\" key={stringifyEntityRef(ref)}>\n {index > 0 ? ', ' : null}\n <Link href={entityLink(ref)} standalone>\n {ref.name}\n </Link>\n </Box>\n ))}\n </Box>\n );\n}\n\nfunction hierarchyLabel(\n ref: CompoundEntityRef,\n): 'systemLabel' | 'domainLabel' | 'partOfLabel' {\n switch (ref.kind.toLocaleLowerCase('en-US')) {\n case 'system':\n return 'systemLabel';\n case 'domain':\n return 'domainLabel';\n default:\n return 'partOfLabel';\n }\n}\n\nfunction useMetadata(entity: Entity | undefined): HeaderMetadataItem[] {\n const owners = useOwnerUsers(entity);\n const { t } = useTranslationRef(catalogTranslationRef);\n return useMemo(() => {\n if (!entity) return [];\n const metadata: HeaderMetadataItem[] = [];\n const lifecycle = entity.spec?.lifecycle?.toString();\n if (lifecycle) {\n metadata.push({\n label: t('entityLabels.lifecycleLabel'),\n value: lifecycle,\n });\n }\n if (owners.length > 0) {\n metadata.push({\n label: t('entityLabels.ownerLabel'),\n value: <HeaderMetadataUsers users={owners} />,\n });\n }\n\n const hierarchy = getEntityRelations(entity, RELATION_PART_OF).reduce(\n (groups, ref) => {\n const label = hierarchyLabel(ref);\n groups[label] = [...(groups[label] ?? []), ref];\n return groups;\n },\n {} as Record<string, CompoundEntityRef[]>,\n );\n for (const [label, refs] of Object.entries(hierarchy)) {\n metadata.push({\n label: t(\n `entityLabels.${label}` as\n | 'entityLabels.systemLabel'\n | 'entityLabels.domainLabel'\n | 'entityLabels.partOfLabel',\n ),\n value: <HierarchyLinks refs={refs} />,\n });\n }\n return metadata;\n }, [entity, owners, t]);\n}\n\nfunction FavoriteEntityButton(props: { entity: Entity }) {\n const { t } = useTranslationRef(catalogReactTranslationRef);\n const { isStarredEntity, toggleStarredEntity } = useStarredEntity(\n props.entity,\n );\n return (\n <ButtonIcon\n variant=\"secondary\"\n aria-label={\n isStarredEntity\n ? t('favoriteEntity.removeFromFavorites')\n : t('favoriteEntity.addToFavorites')\n }\n icon={isStarredEntity ? <RiStarFill /> : <RiStarLine />}\n onPress={() => toggleStarredEntity()}\n />\n );\n}\n\nexport function EntityHeaderBui(props: {\n tabs: HeaderNavTabItem[];\n activeTabId?: string;\n contextMenuItems?: EntityContextMenuItemDataWithNode[];\n}) {\n const { entity } = useAsyncEntity();\n const routeParams = useRouteRefParams(entityRouteRef);\n const presentation = useEntityPresentation(entity ?? routeParams);\n const metadata = useMetadata(entity);\n const type = entity?.spec?.type?.toString();\n\n return (\n <Header\n title={presentation.primaryTitle}\n tags={[\n { label: entity?.kind ?? routeParams.kind },\n ...(type ? [{ label: type }] : []),\n ]}\n metadata={metadata}\n tabs={entity ? props.tabs : undefined}\n activeTabId={props.activeTabId}\n customActions={\n entity ? (\n <>\n <FavoriteEntityButton entity={entity} />\n <EntityContextMenu contextMenuItems={props.contextMenuItems} />\n </>\n ) : undefined\n }\n />\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 { ComponentProps, ComponentType, ReactNode, useCallback } from 'react';\nimport { Helmet } from 'react-helmet';\nimport { useSearchParams } from 'react-router-dom';\nimport { Alert, Container } from '@backstage/ui';\nimport {\n configApiRef,\n useApi,\n useRouteRefParams,\n} from '@backstage/core-plugin-api';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { Link, Progress } from '@backstage/core-components';\nimport { NotFoundErrorPage } from '@backstage/frontend-plugin-api';\nimport {\n entityRouteRef,\n InspectEntityDialog,\n useAsyncEntity,\n useEntityPresentation,\n} from '@backstage/plugin-catalog-react';\nimport {\n type EntityContentGroupDefinitions,\n type EntityHeaderLayoutProps,\n} from '@backstage/plugin-catalog-react/alpha';\nimport { catalogTranslationRef } from '../../translation';\nimport { EntityHeaderBui } from '../EntityHeader/EntityHeaderBui';\nimport { useEntityTabs } from '../EntityTabs/useEntityTabs';\nimport { useEntityLayoutRoutes } from './entityLayoutRoutes';\n\nfunction EntityDocumentTitle(props: { activeContentTitle?: string }) {\n const configApi = useApi(configApiRef);\n const routeParams = useRouteRefParams(entityRouteRef);\n const { entity } = useAsyncEntity();\n const presentation = useEntityPresentation(entity ?? routeParams);\n const appTitle = configApi.getOptionalString('app.title') || 'Backstage';\n return (\n <>\n <Helmet\n titleTemplate={`${presentation.primaryTitle} | %s | ${appTitle}`}\n defaultTitle={`${presentation.primaryTitle} | ${appTitle}`}\n />\n {props.activeContentTitle && <Helmet title={props.activeContentTitle} />}\n </>\n );\n}\n\nfunction InspectEntityDialogHost() {\n const { entity } = useAsyncEntity();\n const [searchParams, setSearchParams] = useSearchParams();\n const selectedTab = searchParams.get('inspect');\n const setSelectedTab = useCallback(\n (tab: string) =>\n setSearchParams(params => {\n const next = new URLSearchParams(params);\n next.set('inspect', tab);\n return next;\n }),\n [setSearchParams],\n );\n const close = useCallback(\n () =>\n setSearchParams(params => {\n const next = new URLSearchParams(params);\n next.delete('inspect');\n return next;\n }),\n [setSearchParams],\n );\n if (!entity) return null;\n return (\n <InspectEntityDialog\n entity={entity}\n initialTab={\n (selectedTab as ComponentProps<\n typeof InspectEntityDialog\n >['initialTab']) || undefined\n }\n open={typeof selectedTab === 'string'}\n onClose={close}\n onSelect={setSelectedTab}\n />\n );\n}\n\nfunction EntityLayoutContent(props: {\n content?: React.JSX.Element;\n NotFoundComponent?: ReactNode;\n}) {\n const { kind } = useRouteRefParams(entityRouteRef);\n const { entity, loading, error } = useAsyncEntity();\n const { t } = useTranslationRef(catalogTranslationRef);\n\n let content: ReactNode;\n if (error) {\n content = (\n <Container>\n <Alert status=\"danger\" title={error.toString()} />\n </Container>\n );\n } else if (entity) {\n content = <Container>{props.content ?? <NotFoundErrorPage />}</Container>;\n } else if (!loading) {\n content = (\n <Container>\n {props.NotFoundComponent ?? (\n <Alert\n status=\"warning\"\n title={t('entityLabels.warningPanelTitle')}\n description={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 />\n )}\n </Container>\n );\n }\n\n return (\n <>\n {loading && <Progress />}\n {content}\n </>\n );\n}\n\nexport function EntityLayoutBui(props: {\n children?: ReactNode;\n NotFoundComponent?: ReactNode;\n groupDefinitions: EntityContentGroupDefinitions;\n defaultContentOrder: 'title' | 'natural';\n contextMenuItems?: ComponentProps<typeof EntityHeaderBui>['contextMenuItems'];\n HeaderComponent?: ComponentType<EntityHeaderLayoutProps>;\n}) {\n const {\n children,\n NotFoundComponent,\n groupDefinitions,\n defaultContentOrder,\n contextMenuItems,\n HeaderComponent,\n } = props;\n const { entity } = useAsyncEntity();\n const routes = useEntityLayoutRoutes(children, entity);\n const tabs = useEntityTabs({ routes, groupDefinitions, defaultContentOrder });\n\n return (\n <main>\n <EntityDocumentTitle activeContentTitle={tabs.title} />\n {HeaderComponent ? (\n <HeaderComponent tabs={tabs.tabs} activeTabId={tabs.activeTabId} />\n ) : (\n <EntityHeaderBui\n tabs={tabs.tabs}\n activeTabId={tabs.activeTabId}\n contextMenuItems={contextMenuItems}\n />\n )}\n <EntityLayoutContent\n content={tabs.content}\n NotFoundComponent={NotFoundComponent}\n />\n <InspectEntityDialogHost />\n </main>\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 { useMemo } from 'react';\nimport { type HeaderNavTab, type HeaderNavTabItem } from '@backstage/ui';\nimport { type EntityContentGroupDefinitions } from '@backstage/plugin-catalog-react/alpha';\nimport { type SubRoute, useSelectedSubRoute } from './EntityTabs';\n\nfunction tabHrefFromPath(path: string): string {\n return path.replace(/\\/\\*$/, '').replace(/^\\//, '');\n}\n\nexport function buildHeaderTabs(\n routes: SubRoute[],\n groupDefinitions: EntityContentGroupDefinitions,\n defaultContentOrder: 'title' | 'natural',\n): HeaderNavTabItem[] {\n const aliases = Object.entries(groupDefinitions).reduce(\n (map, [id, group]) => {\n for (const alias of group.aliases ?? []) map[alias] = id;\n return map;\n },\n {} as Record<string, string>,\n );\n const groups = routes.reduce((result, route) => {\n const groupId =\n route.group &&\n (groupDefinitions[route.group] ? route.group : aliases[route.group]);\n const group = groupId ? groupDefinitions[groupId] : undefined;\n const key = groupId && group ? groupId : route.path;\n result[key] ??= { group, items: [] };\n result[key].items.push({\n id: route.path,\n label: route.title,\n href: tabHrefFromPath(route.path),\n });\n return result;\n }, {} as Record<string, { group?: EntityContentGroupDefinitions[string]; items: HeaderNavTab[] }>);\n const order = Object.keys(groupDefinitions);\n const entries = Object.entries(groups).sort(([a], [b]) => {\n const ai = order.indexOf(a);\n const bi = order.indexOf(b);\n if (ai !== -1 && bi !== -1) return ai - bi;\n if (ai !== -1) return -1;\n if (bi !== -1) return 1;\n return 0;\n });\n for (const [, group] of entries) {\n if (\n group.group &&\n (group.group.contentOrder ?? defaultContentOrder) === 'title'\n ) {\n group.items.sort((a, b) =>\n a.label.localeCompare(b.label, undefined, { sensitivity: 'base' }),\n );\n }\n }\n return entries.map(([id, group]) =>\n group.group && group.items.length > 1\n ? { id, label: group.group.title, items: group.items }\n : group.items[0],\n );\n}\n\nexport function useEntityTabs(props: {\n routes: SubRoute[];\n groupDefinitions: EntityContentGroupDefinitions;\n defaultContentOrder: 'title' | 'natural';\n}) {\n const { routes, groupDefinitions, defaultContentOrder } = props;\n const { route, element } = useSelectedSubRoute(routes);\n const tabs = useMemo(\n () => buildHeaderTabs(routes, groupDefinitions, defaultContentOrder),\n [routes, groupDefinitions, defaultContentOrder],\n );\n return {\n tabs,\n activeTabId: route?.path,\n content: element,\n title: route?.title,\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 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","ButtonIconDefinition","defineComponent","styles","ButtonIcon","forwardRef","props","ref","ownProps","restProps","dataAttributes","useDefinition","classes","icon","isPending","RAButton","ProgressBar","RiLoader4Line","LazyDependencyGraphContent","lazy","m","DependencyGraph","Suspense","DEFAULT_ICON","SvgIcon","EntityKindIcon","app","actualKind","kind","entityRef","otherProps","Icon","useApp","getKind","parseEntityRef","useStyles","makeStyles","theme","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","value","useAsync","response","Array","current","currentRef","isRootNode","parentRef","t","useTranslationRef","catalogReactTranslationRef","Progress","ResponseErrorPanel","Box","Text","Link","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","label","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","title","disabled","onClick","menuItemProps","onAction","result","MenuItem","EntityContextMenuItem","ExtensionBoundary","EntityContextMenu","UNSTABLE_extraContextMenuItems","contextMenuItems","catalogTranslationRef","MenuTrigger","RiMore2Line","Menu","MenuSeparator","AvatarDefinition","Avatar","size","src","name","purpose","imageStatus","setImageStatus","img","Image","initialsCount","initials","word","parseInt","HeaderMetadataUsers","users","user","i","TooltipTrigger","Pressable","Tooltip","HierarchyLinks","entityLink","useEntityRefLink","FavoriteEntityButton","RiStarFill","RiStarLine","EntityHeaderBui","useAsyncEntity","routeParams","useRouteRefParams","presentation","useMetadata","owners","useOwnerUsers","ownerRefs","getEntityRelations","RELATION_OWNED_BY","ownerRefStrings","ownerEntities","owner","profile","lifecycle","refs","RELATION_PART_OF","groups","hierarchyLabel","Header","EntityDocumentTitle","configApi","configApiRef","appTitle","Helmet","InspectEntityDialogHost","searchParams","setSearchParams","useSearchParams","selectedTab","setSelectedTab","params","next","URLSearchParams","close","EntityLayoutContent","content","NotFoundErrorPage","EntityLayoutBui","NotFoundComponent","groupDefinitions","defaultContentOrder","HeaderComponent","tabs","useEntityTabs","routes","route","element","useSelectedSubRoute","buildHeaderTabs","aliases","map","id","alias","groupId","path","order","ai","bi","useEntityLayoutRoutes","dataKey","EntityLayoutRoute","useElementFilter","elements","attachComponentData","EntityTabsPanel","className","stretch","noPadding","resolveIcon","iconsApi","showIcons","anchorEl","setAnchorEl","iconsApiRef","Boolean","disableFocusRipple","fullWidth","indicator","onSelectTab","selected","textColor","wrapped","highlightedButton","groupIcon","testId","handleMenuClose","classArray","capitalize","Button","classnames","Typography","hasIcons","event","ExpandMoreIcon","Popover","List","itemIcon","ListItem","ListItemIcon","ListItemText","EntityTabsGroup","withStyles","createStyles","resolveGroupId","tabGroup","aliasToGroup","EntityTabsList","selectedIndex","def","byKey","resolvedGroupId","groupOrId","groupOrder","sorted","groupDef","selectedItem","selectedGroup","subRoutes","useParams","normalizeRoutePath","withoutLeading","trimmed","useRoutes","currentRoute","matchedRoute","matchRoutes","foundIndex","EntityTabs","to"],"mappings":"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"}
@@ -0,0 +1,2 @@
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}.gNh1vAfzsq8THFv8{vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:var(--bui-fg-primary);background-color:var(--bui-bg-neutral-2);border-radius:100%;flex-shrink:0;justify-content:center;align-items:center;width:2rem;height:2rem;font-size:1rem;font-weight:500;line-height:1;display:inline-flex;overflow:hidden}.gNh1vAfzsq8THFv8[data-size=x-small]{width:1.25rem;height:1.25rem}.gNh1vAfzsq8THFv8[data-size=small]{width:1.5rem;height:1.5rem}.gNh1vAfzsq8THFv8[data-size=medium]{width:2rem;height:2rem}.gNh1vAfzsq8THFv8[data-size=large]{width:2.5rem;height:2.5rem}.gNh1vAfzsq8THFv8[data-size=x-large]{width:3rem;height:3rem}.UTo1RZ1yTUTQjyTy{object-fit:cover;width:100%;height:100%;display:block}.ZmCUJdIze6ktXtdz{width:100%;height:100%;font-size:var(--bui-font-size-3);font-weight:var(--bui-font-weight-regular);box-shadow:inset 0 0 0 1px var(--bui-border-2);border-radius:var(--bui-radius-full);justify-content:center;align-items:center;display:flex}.OVBrDVLk9cMf8eGe{align-items:center;gap:var(--bui-space-2);flex-direction:row;display:flex}.dGAkWeg0vjQStoX_{align-items:center;gap:var(--bui-space-1);flex-direction:row;margin:0;padding:0;list-style:none;display:flex}.HoW5Wjzr74sm26Zo{text-decoration:none;display:flex}}@layer utilities;
2
+ /*# sourceMappingURL=3641.3641.9c1b1a2e.css.map*/
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static/3641.3641.9c1b1a2e.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","webpack://techdocs-cli-embedded-app/../ui/src/components/Avatar/Avatar.module.css","webpack://techdocs-cli-embedded-app/../ui/src/components/Header/HeaderMetadataUsers.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","/*\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-AvatarRoot {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n vertical-align: middle;\n border-radius: 100%;\n user-select: none;\n font-weight: 500;\n color: var(--bui-fg-primary);\n background-color: var(--bui-bg-neutral-2);\n font-size: 1rem;\n line-height: 1;\n overflow: hidden;\n flex-shrink: 0;\n height: 2rem;\n width: 2rem;\n }\n\n .bui-AvatarRoot[data-size='x-small'] {\n height: 1.25rem;\n width: 1.25rem;\n }\n\n .bui-AvatarRoot[data-size='small'] {\n height: 1.5rem;\n width: 1.5rem;\n }\n\n .bui-AvatarRoot[data-size='medium'] {\n height: 2rem;\n width: 2rem;\n }\n\n .bui-AvatarRoot[data-size='large'] {\n height: 2.5rem;\n width: 2.5rem;\n }\n\n .bui-AvatarRoot[data-size='x-large'] {\n height: 3rem;\n width: 3rem;\n }\n\n .bui-AvatarImage {\n object-fit: cover;\n height: 100%;\n width: 100%;\n display: block;\n }\n\n .bui-AvatarFallback {\n align-items: center;\n display: flex;\n justify-content: center;\n height: 100%;\n width: 100%;\n font-size: var(--bui-font-size-3);\n font-weight: var(--bui-font-weight-regular);\n box-shadow: inset 0 0 0 1px var(--bui-border-2);\n border-radius: var(--bui-radius-full);\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\n@layer tokens, base, components, utilities;\n\n@layer components {\n .single {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: var(--bui-space-2);\n }\n\n .stack {\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: var(--bui-space-1);\n list-style: none;\n margin: 0;\n padding: 0;\n }\n\n .avatarLink {\n display: flex;\n text-decoration: none;\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,6CCrEF,qXAkBA,kEAKA,8DAKA,2DAKA,8DAKA,4DAKA,wEAOA,gQClDA,4FAOA,+HAUA,qDHpBF"}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunktechdocs_cli_embedded_app=self.webpackChunktechdocs_cli_embedded_app||[]).push([["4587"],{20534(e){e.exports=JSON.parse('{"name":"@backstage/plugin-app","version":"0.5.1-next.0","backstage":{"role":"frontend-plugin","pluginId":"app","pluginPackages":["@backstage/plugin-app","@backstage/plugin-app-backend","@backstage/plugin-app-node","@backstage/plugin-app-react"]},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"https://github.com/backstage/backstage","directory":"plugins/app"},"license":"Apache-2.0","sideEffects":false,"exports":{".":"./src/index.ts","./alpha":"./src/alpha/index.ts","./package.json":"./package.json"},"main":"src/index.ts","types":"src/index.ts","typesVersions":{"*":{"alpha":["src/alpha/index.ts"],"package.json":["package.json"]}},"files":["dist"],"scripts":{"build":"backstage-cli package build","clean":"backstage-cli package clean","lint":"backstage-cli package lint","prepack":"backstage-cli package prepack","postpack":"backstage-cli package postpack","start":"backstage-cli package start","test":"backstage-cli package test"},"dependencies":{"@backstage/core-components":"workspace:^","@backstage/core-plugin-api":"workspace:^","@backstage/filter-predicates":"workspace:^","@backstage/frontend-plugin-api":"workspace:^","@backstage/integration-react":"workspace:^","@backstage/plugin-app-react":"workspace:^","@backstage/plugin-permission-react":"workspace:^","@backstage/theme":"workspace:^","@backstage/types":"workspace:^","@backstage/ui":"workspace:^","@backstage/version-bridge":"workspace:^","@material-ui/core":"^4.9.13","@material-ui/icons":"^4.9.1","@material-ui/lab":"^4.0.0-alpha.61","@react-hookz/web":"^24.0.0","@remixicon/react":">=4.6.0 <4.9.0","motion":"^12.0.0","react-aria":"~3.48.0","react-stately":"~3.46.0","react-use":"^17.2.4","zen-observable":"^0.10.0","zod":"^4.0.0"},"devDependencies":{"@backstage/cli":"workspace:^","@backstage/dev-utils":"workspace:^","@backstage/frontend-defaults":"workspace:^","@backstage/frontend-test-utils":"workspace:^","@backstage/test-utils":"workspace:^","@testing-library/jest-dom":"^6.0.0","@testing-library/react":"^16.0.0","@testing-library/user-event":"^14.0.0","@types/react":"^18.0.0","msw":"^1.0.0","react":"^18.0.2","react-dom":"^18.0.2","react-router-dom":"^6.30.2"},"peerDependencies":{"@types/react":"^17.0.0 || ^18.0.0","react":"^17.0.0 || ^18.0.0","react-dom":"^17.0.0 || ^18.0.0","react-router-dom":"^6.30.2"},"peerDependenciesMeta":{"@types/react":{"optional":true}}}')}}]);
2
+ //# sourceMappingURL=4587.9946f651.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static/4587.9946f651.chunk.js","sources":["webpack://techdocs-cli-embedded-app/json|/home/runner/work/publishing/publishing/plugins/app/package.json"],"sourcesContent":["module.exports = JSON.parse('{\"name\":\"@backstage/plugin-app\",\"version\":\"0.5.1-next.0\",\"backstage\":{\"role\":\"frontend-plugin\",\"pluginId\":\"app\",\"pluginPackages\":[\"@backstage/plugin-app\",\"@backstage/plugin-app-backend\",\"@backstage/plugin-app-node\",\"@backstage/plugin-app-react\"]},\"publishConfig\":{\"access\":\"public\"},\"repository\":{\"type\":\"git\",\"url\":\"https://github.com/backstage/backstage\",\"directory\":\"plugins/app\"},\"license\":\"Apache-2.0\",\"sideEffects\":false,\"exports\":{\".\":\"./src/index.ts\",\"./alpha\":\"./src/alpha/index.ts\",\"./package.json\":\"./package.json\"},\"main\":\"src/index.ts\",\"types\":\"src/index.ts\",\"typesVersions\":{\"*\":{\"alpha\":[\"src/alpha/index.ts\"],\"package.json\":[\"package.json\"]}},\"files\":[\"dist\"],\"scripts\":{\"build\":\"backstage-cli package build\",\"clean\":\"backstage-cli package clean\",\"lint\":\"backstage-cli package lint\",\"prepack\":\"backstage-cli package prepack\",\"postpack\":\"backstage-cli package postpack\",\"start\":\"backstage-cli package start\",\"test\":\"backstage-cli package test\"},\"dependencies\":{\"@backstage/core-components\":\"workspace:^\",\"@backstage/core-plugin-api\":\"workspace:^\",\"@backstage/filter-predicates\":\"workspace:^\",\"@backstage/frontend-plugin-api\":\"workspace:^\",\"@backstage/integration-react\":\"workspace:^\",\"@backstage/plugin-app-react\":\"workspace:^\",\"@backstage/plugin-permission-react\":\"workspace:^\",\"@backstage/theme\":\"workspace:^\",\"@backstage/types\":\"workspace:^\",\"@backstage/ui\":\"workspace:^\",\"@backstage/version-bridge\":\"workspace:^\",\"@material-ui/core\":\"^4.9.13\",\"@material-ui/icons\":\"^4.9.1\",\"@material-ui/lab\":\"^4.0.0-alpha.61\",\"@react-hookz/web\":\"^24.0.0\",\"@remixicon/react\":\">=4.6.0 <4.9.0\",\"motion\":\"^12.0.0\",\"react-aria\":\"~3.48.0\",\"react-stately\":\"~3.46.0\",\"react-use\":\"^17.2.4\",\"zen-observable\":\"^0.10.0\",\"zod\":\"^4.0.0\"},\"devDependencies\":{\"@backstage/cli\":\"workspace:^\",\"@backstage/dev-utils\":\"workspace:^\",\"@backstage/frontend-defaults\":\"workspace:^\",\"@backstage/frontend-test-utils\":\"workspace:^\",\"@backstage/test-utils\":\"workspace:^\",\"@testing-library/jest-dom\":\"^6.0.0\",\"@testing-library/react\":\"^16.0.0\",\"@testing-library/user-event\":\"^14.0.0\",\"@types/react\":\"^18.0.0\",\"msw\":\"^1.0.0\",\"react\":\"^18.0.2\",\"react-dom\":\"^18.0.2\",\"react-router-dom\":\"^6.30.2\"},\"peerDependencies\":{\"@types/react\":\"^17.0.0 || ^18.0.0\",\"react\":\"^17.0.0 || ^18.0.0\",\"react-dom\":\"^17.0.0 || ^18.0.0\",\"react-router-dom\":\"^6.30.2\"},\"peerDependenciesMeta\":{\"@types/react\":{\"optional\":true}}}')"],"names":["JSON"],"mappings":"kIAAA,EAAO,OAAO,CAAGA,KAAK,KAAK,CAAC,u0E"}