@backstage/plugin-api-docs 0.12.6-next.2 → 0.12.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # @backstage/plugin-api-docs
2
2
 
3
+ ## 0.12.6
4
+
5
+ ### Patch Changes
6
+
7
+ - 317bc3d: api-docs plugin support i18n
8
+ - a47fd39: Removes instances of default React imports, a necessary update for the upcoming React 19 migration.
9
+
10
+ <https://legacy.reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html>
11
+
12
+ - Updated dependencies
13
+ - @backstage/plugin-catalog@1.29.0
14
+ - @backstage/plugin-catalog-react@1.17.0
15
+ - @backstage/frontend-plugin-api@0.10.1
16
+ - @backstage/core-compat-api@0.4.1
17
+ - @backstage/core-components@0.17.1
18
+ - @backstage/core-plugin-api@1.10.6
19
+ - @backstage/plugin-permission-react@0.4.33
20
+ - @backstage/catalog-model@1.7.3
21
+ - @backstage/plugin-catalog-common@1.1.3
22
+
3
23
  ## 0.12.6-next.2
4
24
 
5
25
  ### Patch Changes
package/dist/alpha.d.ts CHANGED
@@ -4,6 +4,38 @@ import * as react from 'react';
4
4
  import * as _backstage_plugin_catalog_react_alpha from '@backstage/plugin-catalog-react/alpha';
5
5
  import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api';
6
6
 
7
+ /**
8
+ * @alpha
9
+ */
10
+ declare const apiDocsTranslationRef: _backstage_frontend_plugin_api.TranslationRef<"api-docs", {
11
+ readonly "apiDefinitionDialog.closeButtonTitle": "Close";
12
+ readonly "apiDefinitionDialog.tabsAriaLabel": "API definition options";
13
+ readonly "apiDefinitionDialog.toggleButtonAriaLabel": "Toggle API Definition Dialog";
14
+ readonly "defaultApiExplorerPage.title": "APIs";
15
+ readonly "defaultApiExplorerPage.subtitle": "{{orgName}} API Explorer";
16
+ readonly "defaultApiExplorerPage.pageTitleOverride": "APIs";
17
+ readonly "defaultApiExplorerPage.createButtonTitle": "Register Existing API";
18
+ readonly "defaultApiExplorerPage.supportButtonTitle": "All your APIs";
19
+ readonly "consumedApisCard.error.title": "Could not load APIs";
20
+ readonly "consumedApisCard.title": "Consumed APIs";
21
+ readonly "consumedApisCard.emptyContent.title": "This {{entity}} does not consume any APIs.";
22
+ readonly "hasApisCard.error.title": "Could not load APIs";
23
+ readonly "hasApisCard.title": "APIs";
24
+ readonly "hasApisCard.emptyContent.title": "This {{entity}} does not contain any APIs.";
25
+ readonly "providedApisCard.error.title": "Could not load APIs";
26
+ readonly "providedApisCard.title": "Provided APIs";
27
+ readonly "providedApisCard.emptyContent.title": "This {{entity}} does not provide any APIs.";
28
+ readonly "apiEntityColumns.typeTitle": "Type";
29
+ readonly "apiEntityColumns.apiDefinitionTitle": "API Definition";
30
+ readonly "consumingComponentsCard.error.title": "Could not load components";
31
+ readonly "consumingComponentsCard.title": "Consumers";
32
+ readonly "consumingComponentsCard.emptyContent.title": "No component consumes this API.";
33
+ readonly "providingComponentsCard.error.title": "Could not load components";
34
+ readonly "providingComponentsCard.title": "Providers";
35
+ readonly "providingComponentsCard.emptyContent.title": "No component provides this API.";
36
+ readonly apisCardHelpLinkTitle: "Learn how to change this";
37
+ }>;
38
+
7
39
  declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
8
40
  root: _backstage_frontend_plugin_api.RouteRef<undefined>;
9
41
  }, {
@@ -285,4 +317,4 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
285
317
  }>;
286
318
  }>;
287
319
 
288
- export { _default as default };
320
+ export { apiDocsTranslationRef, _default as default };
package/dist/alpha.esm.js CHANGED
@@ -12,6 +12,7 @@ import { defaultDefinitionWidgets } from './components/ApiDefinitionCard/ApiDefi
12
12
  import '@material-ui/core/Typography';
13
13
  import { rootRoute, registerComponentRouteRef } from './routes.esm.js';
14
14
  import { EntityCardBlueprint, EntityContentBlueprint } from '@backstage/plugin-catalog-react/alpha';
15
+ export { apiDocsTranslationRef } from './translation.esm.js';
15
16
 
16
17
  const apiDocsNavItem = NavItemBlueprint.make({
17
18
  params: {
@@ -1 +1 @@
1
- {"version":3,"file":"alpha.esm.js","sources":["../src/alpha.tsx"],"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\nimport Grid from '@material-ui/core/Grid';\n\nimport {\n ApiBlueprint,\n NavItemBlueprint,\n PageBlueprint,\n createApiFactory,\n createFrontendPlugin,\n} from '@backstage/frontend-plugin-api';\n\nimport {\n compatWrapper,\n convertLegacyRouteRef,\n} from '@backstage/core-compat-api';\n\nimport {\n ApiEntity,\n parseEntityRef,\n RELATION_HAS_PART,\n} from '@backstage/catalog-model';\n\nimport { defaultDefinitionWidgets } from './components/ApiDefinitionCard';\nimport { rootRoute, registerComponentRouteRef } from './routes';\nimport { apiDocsConfigRef } from './config';\nimport { AppIcon } from '@backstage/core-components';\n\nimport {\n EntityCardBlueprint,\n EntityContentBlueprint,\n} from '@backstage/plugin-catalog-react/alpha';\n\nconst apiDocsNavItem = NavItemBlueprint.make({\n params: {\n title: 'APIs',\n routeRef: convertLegacyRouteRef(rootRoute),\n icon: () => compatWrapper(<AppIcon id=\"kind:api\" />),\n },\n});\n\nconst apiDocsConfigApi = ApiBlueprint.make({\n name: 'config',\n params: {\n factory: createApiFactory({\n api: apiDocsConfigRef,\n deps: {},\n factory: () => {\n const definitionWidgets = defaultDefinitionWidgets();\n return {\n getApiDefinitionWidget: (apiEntity: ApiEntity) => {\n return definitionWidgets.find(d => d.type === apiEntity.spec.type);\n },\n };\n },\n }),\n },\n});\n\nconst apiDocsExplorerPage = PageBlueprint.makeWithOverrides({\n config: {\n schema: {\n // Ommiting columns and actions for now as their types are too complex to map to zod\n initiallySelectedFilter: z =>\n z.enum(['owned', 'starred', 'all']).optional(),\n },\n },\n factory(originalFactory, { config }) {\n return originalFactory({\n defaultPath: '/api-docs',\n routeRef: convertLegacyRouteRef(rootRoute),\n loader: () =>\n import('./components/ApiExplorerPage').then(m =>\n compatWrapper(\n <m.ApiExplorerIndexPage\n initiallySelectedFilter={config.initiallySelectedFilter}\n />,\n ),\n ),\n });\n },\n});\n\nconst apiDocsHasApisEntityCard = EntityCardBlueprint.make({\n name: 'has-apis',\n params: {\n // Ommiting configSchema for now\n // We are skipping variants and columns are too complex to map to zod\n // See: https://github.com/backstage/backstage/pull/22619#discussion_r1477333252\n filter: entity => {\n return (\n entity.kind === 'Component' &&\n entity.relations?.some(\n ({ type, targetRef }) =>\n type.toLocaleLowerCase('en-US') === RELATION_HAS_PART &&\n parseEntityRef(targetRef).kind === 'API',\n )!!\n );\n },\n loader: () =>\n import('./components/ApisCards').then(m =>\n compatWrapper(<m.HasApisCard />),\n ),\n },\n});\n\nconst apiDocsDefinitionEntityCard = EntityCardBlueprint.make({\n name: 'definition',\n params: {\n filter: 'kind:api',\n loader: () =>\n import('./components/ApiDefinitionCard').then(m =>\n compatWrapper(<m.ApiDefinitionCard />),\n ),\n },\n});\n\nconst apiDocsConsumedApisEntityCard = EntityCardBlueprint.make({\n name: 'consumed-apis',\n params: {\n // Ommiting configSchema for now\n // We are skipping variants and columns are too complex to map to zod\n // See: https://github.com/backstage/backstage/pull/22619#discussion_r1477333252\n filter: 'kind:component',\n loader: () =>\n import('./components/ApisCards').then(m =>\n compatWrapper(<m.ConsumedApisCard />),\n ),\n },\n});\n\nconst apiDocsProvidedApisEntityCard = EntityCardBlueprint.make({\n name: 'provided-apis',\n params: {\n // Ommiting configSchema for now\n // We are skipping variants and columns are too complex to map to zod\n // See: https://github.com/backstage/backstage/pull/22619#discussion_r1477333252\n filter: 'kind:component',\n loader: () =>\n import('./components/ApisCards').then(m =>\n compatWrapper(<m.ProvidedApisCard />),\n ),\n },\n});\n\nconst apiDocsConsumingComponentsEntityCard = EntityCardBlueprint.make({\n name: 'consuming-components',\n params: {\n // Ommiting configSchema for now\n // We are skipping variants\n // See: https://github.com/backstage/backstage/pull/22619#discussion_r1477333252\n filter: 'kind:api',\n loader: () =>\n import('./components/ComponentsCards').then(m =>\n compatWrapper(<m.ConsumingComponentsCard />),\n ),\n },\n});\n\nconst apiDocsProvidingComponentsEntityCard = EntityCardBlueprint.make({\n name: 'providing-components',\n params: {\n // Ommiting configSchema for now\n // We are skipping variants\n // See: https://github.com/backstage/backstage/pull/22619#discussion_r1477333252\n filter: 'kind:api',\n loader: () =>\n import('./components/ComponentsCards').then(m =>\n compatWrapper(<m.ProvidingComponentsCard />),\n ),\n },\n});\n\nconst apiDocsDefinitionEntityContent = EntityContentBlueprint.make({\n name: 'definition',\n params: {\n defaultPath: '/definition',\n defaultTitle: 'Definition',\n filter: 'kind:api',\n loader: async () =>\n import('./components/ApiDefinitionCard').then(m =>\n compatWrapper(\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <m.ApiDefinitionCard />\n </Grid>\n </Grid>,\n ),\n ),\n },\n});\n\nconst apiDocsApisEntityContent = EntityContentBlueprint.make({\n name: 'apis',\n params: {\n defaultPath: '/apis',\n defaultTitle: 'APIs',\n filter: 'kind:component',\n loader: async () =>\n import('./components/ApisCards').then(m =>\n compatWrapper(\n <Grid container spacing={3} alignItems=\"stretch\">\n <Grid item xs={12}>\n <m.ProvidedApisCard />\n </Grid>\n <Grid item xs={12}>\n <m.ConsumedApisCard />\n </Grid>\n </Grid>,\n ),\n ),\n },\n});\n\nexport default createFrontendPlugin({\n id: 'api-docs',\n routes: {\n root: convertLegacyRouteRef(rootRoute),\n },\n externalRoutes: {\n registerApi: convertLegacyRouteRef(registerComponentRouteRef),\n },\n extensions: [\n apiDocsNavItem,\n apiDocsConfigApi,\n apiDocsExplorerPage,\n apiDocsHasApisEntityCard,\n apiDocsDefinitionEntityCard,\n apiDocsProvidedApisEntityCard,\n apiDocsConsumedApisEntityCard,\n apiDocsConsumingComponentsEntityCard,\n apiDocsProvidingComponentsEntityCard,\n apiDocsDefinitionEntityContent,\n apiDocsApisEntityContent,\n ],\n});\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"alpha.esm.js","sources":["../src/alpha.tsx"],"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\nimport Grid from '@material-ui/core/Grid';\n\nimport {\n ApiBlueprint,\n NavItemBlueprint,\n PageBlueprint,\n createApiFactory,\n createFrontendPlugin,\n} from '@backstage/frontend-plugin-api';\n\nimport {\n compatWrapper,\n convertLegacyRouteRef,\n} from '@backstage/core-compat-api';\n\nimport {\n ApiEntity,\n parseEntityRef,\n RELATION_HAS_PART,\n} from '@backstage/catalog-model';\n\nimport { defaultDefinitionWidgets } from './components/ApiDefinitionCard';\nimport { rootRoute, registerComponentRouteRef } from './routes';\nimport { apiDocsConfigRef } from './config';\nimport { AppIcon } from '@backstage/core-components';\n\nimport {\n EntityCardBlueprint,\n EntityContentBlueprint,\n} from '@backstage/plugin-catalog-react/alpha';\n\nconst apiDocsNavItem = NavItemBlueprint.make({\n params: {\n title: 'APIs',\n routeRef: convertLegacyRouteRef(rootRoute),\n icon: () => compatWrapper(<AppIcon id=\"kind:api\" />),\n },\n});\n\nconst apiDocsConfigApi = ApiBlueprint.make({\n name: 'config',\n params: {\n factory: createApiFactory({\n api: apiDocsConfigRef,\n deps: {},\n factory: () => {\n const definitionWidgets = defaultDefinitionWidgets();\n return {\n getApiDefinitionWidget: (apiEntity: ApiEntity) => {\n return definitionWidgets.find(d => d.type === apiEntity.spec.type);\n },\n };\n },\n }),\n },\n});\n\nconst apiDocsExplorerPage = PageBlueprint.makeWithOverrides({\n config: {\n schema: {\n // Ommiting columns and actions for now as their types are too complex to map to zod\n initiallySelectedFilter: z =>\n z.enum(['owned', 'starred', 'all']).optional(),\n },\n },\n factory(originalFactory, { config }) {\n return originalFactory({\n defaultPath: '/api-docs',\n routeRef: convertLegacyRouteRef(rootRoute),\n loader: () =>\n import('./components/ApiExplorerPage').then(m =>\n compatWrapper(\n <m.ApiExplorerIndexPage\n initiallySelectedFilter={config.initiallySelectedFilter}\n />,\n ),\n ),\n });\n },\n});\n\nconst apiDocsHasApisEntityCard = EntityCardBlueprint.make({\n name: 'has-apis',\n params: {\n // Ommiting configSchema for now\n // We are skipping variants and columns are too complex to map to zod\n // See: https://github.com/backstage/backstage/pull/22619#discussion_r1477333252\n filter: entity => {\n return (\n entity.kind === 'Component' &&\n entity.relations?.some(\n ({ type, targetRef }) =>\n type.toLocaleLowerCase('en-US') === RELATION_HAS_PART &&\n parseEntityRef(targetRef).kind === 'API',\n )!!\n );\n },\n loader: () =>\n import('./components/ApisCards').then(m =>\n compatWrapper(<m.HasApisCard />),\n ),\n },\n});\n\nconst apiDocsDefinitionEntityCard = EntityCardBlueprint.make({\n name: 'definition',\n params: {\n filter: 'kind:api',\n loader: () =>\n import('./components/ApiDefinitionCard').then(m =>\n compatWrapper(<m.ApiDefinitionCard />),\n ),\n },\n});\n\nconst apiDocsConsumedApisEntityCard = EntityCardBlueprint.make({\n name: 'consumed-apis',\n params: {\n // Ommiting configSchema for now\n // We are skipping variants and columns are too complex to map to zod\n // See: https://github.com/backstage/backstage/pull/22619#discussion_r1477333252\n filter: 'kind:component',\n loader: () =>\n import('./components/ApisCards').then(m =>\n compatWrapper(<m.ConsumedApisCard />),\n ),\n },\n});\n\nconst apiDocsProvidedApisEntityCard = EntityCardBlueprint.make({\n name: 'provided-apis',\n params: {\n // Ommiting configSchema for now\n // We are skipping variants and columns are too complex to map to zod\n // See: https://github.com/backstage/backstage/pull/22619#discussion_r1477333252\n filter: 'kind:component',\n loader: () =>\n import('./components/ApisCards').then(m =>\n compatWrapper(<m.ProvidedApisCard />),\n ),\n },\n});\n\nconst apiDocsConsumingComponentsEntityCard = EntityCardBlueprint.make({\n name: 'consuming-components',\n params: {\n // Ommiting configSchema for now\n // We are skipping variants\n // See: https://github.com/backstage/backstage/pull/22619#discussion_r1477333252\n filter: 'kind:api',\n loader: () =>\n import('./components/ComponentsCards').then(m =>\n compatWrapper(<m.ConsumingComponentsCard />),\n ),\n },\n});\n\nconst apiDocsProvidingComponentsEntityCard = EntityCardBlueprint.make({\n name: 'providing-components',\n params: {\n // Ommiting configSchema for now\n // We are skipping variants\n // See: https://github.com/backstage/backstage/pull/22619#discussion_r1477333252\n filter: 'kind:api',\n loader: () =>\n import('./components/ComponentsCards').then(m =>\n compatWrapper(<m.ProvidingComponentsCard />),\n ),\n },\n});\n\nconst apiDocsDefinitionEntityContent = EntityContentBlueprint.make({\n name: 'definition',\n params: {\n defaultPath: '/definition',\n defaultTitle: 'Definition',\n filter: 'kind:api',\n loader: async () =>\n import('./components/ApiDefinitionCard').then(m =>\n compatWrapper(\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <m.ApiDefinitionCard />\n </Grid>\n </Grid>,\n ),\n ),\n },\n});\n\nconst apiDocsApisEntityContent = EntityContentBlueprint.make({\n name: 'apis',\n params: {\n defaultPath: '/apis',\n defaultTitle: 'APIs',\n filter: 'kind:component',\n loader: async () =>\n import('./components/ApisCards').then(m =>\n compatWrapper(\n <Grid container spacing={3} alignItems=\"stretch\">\n <Grid item xs={12}>\n <m.ProvidedApisCard />\n </Grid>\n <Grid item xs={12}>\n <m.ConsumedApisCard />\n </Grid>\n </Grid>,\n ),\n ),\n },\n});\n\nexport default createFrontendPlugin({\n id: 'api-docs',\n routes: {\n root: convertLegacyRouteRef(rootRoute),\n },\n externalRoutes: {\n registerApi: convertLegacyRouteRef(registerComponentRouteRef),\n },\n extensions: [\n apiDocsNavItem,\n apiDocsConfigApi,\n apiDocsExplorerPage,\n apiDocsHasApisEntityCard,\n apiDocsDefinitionEntityCard,\n apiDocsProvidedApisEntityCard,\n apiDocsConsumedApisEntityCard,\n apiDocsConsumingComponentsEntityCard,\n apiDocsProvidingComponentsEntityCard,\n apiDocsDefinitionEntityContent,\n apiDocsApisEntityContent,\n ],\n});\n\nexport { apiDocsTranslationRef } from './translation';\n"],"names":[],"mappings":"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"}
@@ -13,6 +13,8 @@ import { makeStyles } from '@material-ui/core/styles';
13
13
  import { useState, useEffect } from 'react';
14
14
  import { apiDocsConfigRef } from '../../config.esm.js';
15
15
  import { PlainApiDefinitionWidget } from '../PlainApiDefinitionWidget/PlainApiDefinitionWidget.esm.js';
16
+ import { useTranslationRef } from '@backstage/frontend-plugin-api';
17
+ import { apiDocsTranslationRef } from '../../translation.esm.js';
16
18
 
17
19
  const useStyles = makeStyles((theme) => ({
18
20
  fullHeightDialog: {
@@ -72,6 +74,7 @@ function ApiDefinitionDialog(props) {
72
74
  const { open, entity, onClose } = props;
73
75
  const [activeTab, setActiveTab] = useState(0);
74
76
  const classes = useStyles();
77
+ const { t } = useTranslationRef(apiDocsTranslationRef);
75
78
  useEffect(() => {
76
79
  setActiveTab(0);
77
80
  }, [open]);
@@ -104,7 +107,7 @@ function ApiDefinitionDialog(props) {
104
107
  variant: "scrollable",
105
108
  value: activeTab,
106
109
  onChange: (_, newValue) => setActiveTab(newValue),
107
- "aria-label": "API definition options",
110
+ "aria-label": t("apiDefinitionDialog.tabsAriaLabel"),
108
111
  className: classes.tabs,
109
112
  children: [
110
113
  definitionWidget ? /* @__PURE__ */ jsx(Tab, { label: definitionWidget.title, ...a11yProps(tabIndex++) }) : null,
@@ -121,7 +124,7 @@ function ApiDefinitionDialog(props) {
121
124
  }
122
125
  ) })
123
126
  ] }),
124
- /* @__PURE__ */ jsx(DialogActions, { children: /* @__PURE__ */ jsx(Button, { onClick: onClose, color: "primary", children: "Close" }) })
127
+ /* @__PURE__ */ jsx(DialogActions, { children: /* @__PURE__ */ jsx(Button, { onClick: onClose, color: "primary", children: t("apiDefinitionDialog.closeButtonTitle") }) })
125
128
  ]
126
129
  }
127
130
  );
@@ -1 +1 @@
1
- {"version":3,"file":"ApiDefinitionDialog.esm.js","sources":["../../../src/components/ApiDefinitionDialog/ApiDefinitionDialog.tsx"],"sourcesContent":["/*\n * Copyright 2023 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 { ApiEntity } from '@backstage/catalog-model';\nimport { useApi } from '@backstage/core-plugin-api';\nimport Box from '@material-ui/core/Box';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport Tab from '@material-ui/core/Tab';\nimport Tabs from '@material-ui/core/Tabs';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { ReactNode, useState, useEffect } from 'react';\nimport { apiDocsConfigRef } from '../../config';\nimport { PlainApiDefinitionWidget } from '../PlainApiDefinitionWidget';\n\nconst useStyles = makeStyles(theme => ({\n fullHeightDialog: {\n height: 'calc(100% - 64px)',\n },\n root: {\n display: 'flex',\n flexGrow: 1,\n width: '100%',\n height: '100%',\n },\n tabs: {\n borderRight: `1px solid ${theme.palette.divider}`,\n flexShrink: 0,\n },\n tabContents: {\n flexGrow: 1,\n overflowX: 'auto',\n },\n title: {\n color: theme.palette.text.primary,\n wordBreak: 'break-word',\n fontSize: theme.typography.h3.fontSize,\n marginBottom: 0,\n },\n type: {\n textTransform: 'uppercase',\n fontSize: 11,\n opacity: 0.8,\n marginBottom: theme.spacing(1),\n color: theme.palette.text.primary,\n },\n}));\n\nfunction TabPanel(props: {\n children?: ReactNode;\n index: number;\n value: number;\n}) {\n const { children, value, index, ...other } = props;\n const classes = useStyles();\n return (\n <div\n role=\"tabpanel\"\n hidden={value !== index}\n id={`vertical-tabpanel-${index}`}\n aria-labelledby={`vertical-tab-${index}`}\n className={classes.tabContents}\n {...other}\n >\n {value === index && (\n <Box pl={3} pr={3}>\n {children}\n </Box>\n )}\n </div>\n );\n}\n\nfunction a11yProps(index: number) {\n return {\n id: `vertical-tab-${index}`,\n 'aria-controls': `vertical-tabpanel-${index}`,\n };\n}\n\n/**\n * A dialog that lets users inspect the API definition.\n *\n * @public\n */\nexport function ApiDefinitionDialog(props: {\n open: boolean;\n entity: ApiEntity;\n onClose: () => void;\n}) {\n const { open, entity, onClose } = props;\n const [activeTab, setActiveTab] = useState(0);\n const classes = useStyles();\n\n useEffect(() => {\n setActiveTab(0);\n }, [open]);\n\n const config = useApi(apiDocsConfigRef);\n const definitionWidget = config.getApiDefinitionWidget(entity);\n\n let tabIndex = 0;\n let tabPanelIndex = 0;\n\n return (\n <Dialog\n fullWidth\n maxWidth=\"xl\"\n open={open}\n onClose={onClose}\n aria-labelledby=\"api-definition-dialog-title\"\n PaperProps={{ className: classes.fullHeightDialog }}\n >\n <DialogTitle id=\"api-definition-dialog-title\" disableTypography>\n <Typography className={classes.type}>\n API - {definitionWidget?.title ?? 'Raw'}\n </Typography>\n <Typography className={classes.title} variant=\"h1\">\n {entity.metadata.title ?? entity.metadata.name}\n </Typography>\n </DialogTitle>\n <DialogContent dividers className={classes.root}>\n <Tabs\n orientation=\"vertical\"\n variant=\"scrollable\"\n value={activeTab}\n onChange={(_, newValue) => setActiveTab(newValue)}\n aria-label=\"API definition options\"\n className={classes.tabs}\n >\n {definitionWidget ? (\n <Tab label={definitionWidget.title} {...a11yProps(tabIndex++)} />\n ) : null}\n <Tab label=\"Raw\" {...a11yProps(tabIndex++)} />\n </Tabs>\n\n {definitionWidget ? (\n <TabPanel value={activeTab} index={tabPanelIndex++}>\n {definitionWidget.component(entity.spec.definition)}\n </TabPanel>\n ) : null}\n <TabPanel value={activeTab} index={tabPanelIndex++}>\n <PlainApiDefinitionWidget\n definition={entity.spec.definition}\n language={definitionWidget?.rawLanguage ?? entity.spec.type}\n />\n </TabPanel>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} color=\"primary\">\n Close\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ApiDefinitionDialog.esm.js","sources":["../../../src/components/ApiDefinitionDialog/ApiDefinitionDialog.tsx"],"sourcesContent":["/*\n * Copyright 2023 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 { ApiEntity } from '@backstage/catalog-model';\nimport { useApi } from '@backstage/core-plugin-api';\nimport Box from '@material-ui/core/Box';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport Tab from '@material-ui/core/Tab';\nimport Tabs from '@material-ui/core/Tabs';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { ReactNode, useState, useEffect } from 'react';\nimport { apiDocsConfigRef } from '../../config';\nimport { PlainApiDefinitionWidget } from '../PlainApiDefinitionWidget';\nimport { useTranslationRef } from '@backstage/frontend-plugin-api';\nimport { apiDocsTranslationRef } from '../../translation';\n\nconst useStyles = makeStyles(theme => ({\n fullHeightDialog: {\n height: 'calc(100% - 64px)',\n },\n root: {\n display: 'flex',\n flexGrow: 1,\n width: '100%',\n height: '100%',\n },\n tabs: {\n borderRight: `1px solid ${theme.palette.divider}`,\n flexShrink: 0,\n },\n tabContents: {\n flexGrow: 1,\n overflowX: 'auto',\n },\n title: {\n color: theme.palette.text.primary,\n wordBreak: 'break-word',\n fontSize: theme.typography.h3.fontSize,\n marginBottom: 0,\n },\n type: {\n textTransform: 'uppercase',\n fontSize: 11,\n opacity: 0.8,\n marginBottom: theme.spacing(1),\n color: theme.palette.text.primary,\n },\n}));\n\nfunction TabPanel(props: {\n children?: ReactNode;\n index: number;\n value: number;\n}) {\n const { children, value, index, ...other } = props;\n const classes = useStyles();\n return (\n <div\n role=\"tabpanel\"\n hidden={value !== index}\n id={`vertical-tabpanel-${index}`}\n aria-labelledby={`vertical-tab-${index}`}\n className={classes.tabContents}\n {...other}\n >\n {value === index && (\n <Box pl={3} pr={3}>\n {children}\n </Box>\n )}\n </div>\n );\n}\n\nfunction a11yProps(index: number) {\n return {\n id: `vertical-tab-${index}`,\n 'aria-controls': `vertical-tabpanel-${index}`,\n };\n}\n\n/**\n * A dialog that lets users inspect the API definition.\n *\n * @public\n */\nexport function ApiDefinitionDialog(props: {\n open: boolean;\n entity: ApiEntity;\n onClose: () => void;\n}) {\n const { open, entity, onClose } = props;\n const [activeTab, setActiveTab] = useState(0);\n const classes = useStyles();\n const { t } = useTranslationRef(apiDocsTranslationRef);\n\n useEffect(() => {\n setActiveTab(0);\n }, [open]);\n\n const config = useApi(apiDocsConfigRef);\n const definitionWidget = config.getApiDefinitionWidget(entity);\n\n let tabIndex = 0;\n let tabPanelIndex = 0;\n\n return (\n <Dialog\n fullWidth\n maxWidth=\"xl\"\n open={open}\n onClose={onClose}\n aria-labelledby=\"api-definition-dialog-title\"\n PaperProps={{ className: classes.fullHeightDialog }}\n >\n <DialogTitle id=\"api-definition-dialog-title\" disableTypography>\n <Typography className={classes.type}>\n API - {definitionWidget?.title ?? 'Raw'}\n </Typography>\n <Typography className={classes.title} variant=\"h1\">\n {entity.metadata.title ?? entity.metadata.name}\n </Typography>\n </DialogTitle>\n <DialogContent dividers className={classes.root}>\n <Tabs\n orientation=\"vertical\"\n variant=\"scrollable\"\n value={activeTab}\n onChange={(_, newValue) => setActiveTab(newValue)}\n aria-label={t('apiDefinitionDialog.tabsAriaLabel')}\n className={classes.tabs}\n >\n {definitionWidget ? (\n <Tab label={definitionWidget.title} {...a11yProps(tabIndex++)} />\n ) : null}\n <Tab label=\"Raw\" {...a11yProps(tabIndex++)} />\n </Tabs>\n\n {definitionWidget ? (\n <TabPanel value={activeTab} index={tabPanelIndex++}>\n {definitionWidget.component(entity.spec.definition)}\n </TabPanel>\n ) : null}\n <TabPanel value={activeTab} index={tabPanelIndex++}>\n <PlainApiDefinitionWidget\n definition={entity.spec.definition}\n language={definitionWidget?.rawLanguage ?? entity.spec.type}\n />\n </TabPanel>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} color=\"primary\">\n {t('apiDefinitionDialog.closeButtonTitle')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -6,6 +6,8 @@ import { EntityListProvider, CatalogFilterLayout, EntityKindPicker, EntityTypePi
6
6
  import { registerComponentRouteRef } from '../../routes.esm.js';
7
7
  import { usePermission } from '@backstage/plugin-permission-react';
8
8
  import { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common/alpha';
9
+ import { useTranslationRef } from '@backstage/frontend-plugin-api';
10
+ import { apiDocsTranslationRef } from '../../translation.esm.js';
9
11
 
10
12
  const defaultColumns = [
11
13
  CatalogTable.columns.createTitleColumn({ hidden: true }),
@@ -26,7 +28,10 @@ const DefaultApiExplorerPage = (props) => {
26
28
  pagination
27
29
  } = props;
28
30
  const configApi = useApi(configApiRef);
29
- const generatedSubtitle = `${configApi.getOptionalString("organization.name") ?? "Backstage"} API Explorer`;
31
+ const { t } = useTranslationRef(apiDocsTranslationRef);
32
+ const generatedSubtitle = t("defaultApiExplorerPage.subtitle", {
33
+ orgName: configApi.getOptionalString("organization.name") ?? "Backstage"
34
+ });
30
35
  const registerComponentLink = useRouteRef(registerComponentRouteRef);
31
36
  const { allowed } = usePermission({
32
37
  permission: catalogEntityCreatePermission
@@ -35,19 +40,19 @@ const DefaultApiExplorerPage = (props) => {
35
40
  PageWithHeader,
36
41
  {
37
42
  themeId: "apis",
38
- title: "APIs",
43
+ title: t("defaultApiExplorerPage.title"),
39
44
  subtitle: generatedSubtitle,
40
- pageTitleOverride: "APIs",
45
+ pageTitleOverride: t("defaultApiExplorerPage.pageTitleOverride"),
41
46
  children: /* @__PURE__ */ jsxs(Content, { children: [
42
47
  /* @__PURE__ */ jsxs(ContentHeader, { title: "", children: [
43
48
  allowed && /* @__PURE__ */ jsx(
44
49
  CreateButton,
45
50
  {
46
- title: "Register Existing API",
51
+ title: t("defaultApiExplorerPage.createButtonTitle"),
47
52
  to: registerComponentLink?.()
48
53
  }
49
54
  ),
50
- /* @__PURE__ */ jsx(SupportButton, { children: "All your APIs" })
55
+ /* @__PURE__ */ jsx(SupportButton, { children: t("defaultApiExplorerPage.supportButtonTitle") })
51
56
  ] }),
52
57
  /* @__PURE__ */ jsx(EntityListProvider, { pagination, children: /* @__PURE__ */ jsxs(CatalogFilterLayout, { children: [
53
58
  /* @__PURE__ */ jsxs(CatalogFilterLayout.Filters, { children: [
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultApiExplorerPage.esm.js","sources":["../../../src/components/ApiExplorerPage/DefaultApiExplorerPage.tsx"],"sourcesContent":["/*\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 Content,\n ContentHeader,\n CreateButton,\n PageWithHeader,\n SupportButton,\n TableColumn,\n TableProps,\n} from '@backstage/core-components';\nimport { configApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api';\nimport { CatalogTable, CatalogTableRow } from '@backstage/plugin-catalog';\nimport {\n EntityKindPicker,\n EntityLifecyclePicker,\n EntityListProvider,\n EntityListPagination,\n EntityOwnerPicker,\n EntityTagPicker,\n EntityTypePicker,\n UserListFilterKind,\n UserListPicker,\n CatalogFilterLayout,\n EntityOwnerPickerProps,\n} from '@backstage/plugin-catalog-react';\nimport { registerComponentRouteRef } from '../../routes';\nimport { usePermission } from '@backstage/plugin-permission-react';\nimport { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common/alpha';\n\nconst defaultColumns: TableColumn<CatalogTableRow>[] = [\n CatalogTable.columns.createTitleColumn({ hidden: true }),\n CatalogTable.columns.createNameColumn({ defaultKind: 'API' }),\n CatalogTable.columns.createSystemColumn(),\n CatalogTable.columns.createOwnerColumn(),\n CatalogTable.columns.createSpecTypeColumn(),\n CatalogTable.columns.createSpecLifecycleColumn(),\n CatalogTable.columns.createMetadataDescriptionColumn(),\n CatalogTable.columns.createTagsColumn(),\n];\n\n/**\n * DefaultApiExplorerPageProps\n * @public\n */\nexport type DefaultApiExplorerPageProps = {\n initiallySelectedFilter?: UserListFilterKind;\n columns?: TableColumn<CatalogTableRow>[];\n actions?: TableProps<CatalogTableRow>['actions'];\n ownerPickerMode?: EntityOwnerPickerProps['mode'];\n pagination?: EntityListPagination;\n};\n\n/**\n * DefaultApiExplorerPage\n * @public\n */\nexport const DefaultApiExplorerPage = (props: DefaultApiExplorerPageProps) => {\n const {\n initiallySelectedFilter = 'all',\n columns,\n actions,\n ownerPickerMode,\n pagination,\n } = props;\n\n const configApi = useApi(configApiRef);\n const generatedSubtitle = `${\n configApi.getOptionalString('organization.name') ?? 'Backstage'\n } API Explorer`;\n const registerComponentLink = useRouteRef(registerComponentRouteRef);\n const { allowed } = usePermission({\n permission: catalogEntityCreatePermission,\n });\n\n return (\n <PageWithHeader\n themeId=\"apis\"\n title=\"APIs\"\n subtitle={generatedSubtitle}\n pageTitleOverride=\"APIs\"\n >\n <Content>\n <ContentHeader title=\"\">\n {allowed && (\n <CreateButton\n title=\"Register Existing API\"\n to={registerComponentLink?.()}\n />\n )}\n <SupportButton>All your APIs</SupportButton>\n </ContentHeader>\n <EntityListProvider pagination={pagination}>\n <CatalogFilterLayout>\n <CatalogFilterLayout.Filters>\n <EntityKindPicker initialFilter=\"api\" hidden />\n <EntityTypePicker />\n <UserListPicker initialFilter={initiallySelectedFilter} />\n <EntityOwnerPicker mode={ownerPickerMode} />\n <EntityLifecyclePicker />\n <EntityTagPicker />\n </CatalogFilterLayout.Filters>\n <CatalogFilterLayout.Content>\n <CatalogTable\n columns={columns || defaultColumns}\n actions={actions}\n />\n </CatalogFilterLayout.Content>\n </CatalogFilterLayout>\n </EntityListProvider>\n </Content>\n </PageWithHeader>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AA4CA,MAAM,cAAiD,GAAA;AAAA,EACrD,aAAa,OAAQ,CAAA,iBAAA,CAAkB,EAAE,MAAA,EAAQ,MAAM,CAAA;AAAA,EACvD,aAAa,OAAQ,CAAA,gBAAA,CAAiB,EAAE,WAAA,EAAa,OAAO,CAAA;AAAA,EAC5D,YAAA,CAAa,QAAQ,kBAAmB,EAAA;AAAA,EACxC,YAAA,CAAa,QAAQ,iBAAkB,EAAA;AAAA,EACvC,YAAA,CAAa,QAAQ,oBAAqB,EAAA;AAAA,EAC1C,YAAA,CAAa,QAAQ,yBAA0B,EAAA;AAAA,EAC/C,YAAA,CAAa,QAAQ,+BAAgC,EAAA;AAAA,EACrD,YAAA,CAAa,QAAQ,gBAAiB;AACxC,CAAA;AAkBa,MAAA,sBAAA,GAAyB,CAAC,KAAuC,KAAA;AAC5E,EAAM,MAAA;AAAA,IACJ,uBAA0B,GAAA,KAAA;AAAA,IAC1B,OAAA;AAAA,IACA,OAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACE,GAAA,KAAA;AAEJ,EAAM,MAAA,SAAA,GAAY,OAAO,YAAY,CAAA;AACrC,EAAA,MAAM,oBAAoB,CACxB,EAAA,SAAA,CAAU,iBAAkB,CAAA,mBAAmB,KAAK,WACtD,CAAA,aAAA,CAAA;AACA,EAAM,MAAA,qBAAA,GAAwB,YAAY,yBAAyB,CAAA;AACnE,EAAM,MAAA,EAAE,OAAQ,EAAA,GAAI,aAAc,CAAA;AAAA,IAChC,UAAY,EAAA;AAAA,GACb,CAAA;AAED,EACE,uBAAA,GAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACC,OAAQ,EAAA,MAAA;AAAA,MACR,KAAM,EAAA,MAAA;AAAA,MACN,QAAU,EAAA,iBAAA;AAAA,MACV,iBAAkB,EAAA,MAAA;AAAA,MAElB,+BAAC,OACC,EAAA,EAAA,QAAA,EAAA;AAAA,wBAAC,IAAA,CAAA,aAAA,EAAA,EAAc,OAAM,EAClB,EAAA,QAAA,EAAA;AAAA,UACC,OAAA,oBAAA,GAAA;AAAA,YAAC,YAAA;AAAA,YAAA;AAAA,cACC,KAAM,EAAA,uBAAA;AAAA,cACN,IAAI,qBAAwB;AAAA;AAAA,WAC9B;AAAA,0BAEF,GAAA,CAAC,iBAAc,QAAa,EAAA,eAAA,EAAA;AAAA,SAC9B,EAAA,CAAA;AAAA,wBACC,GAAA,CAAA,kBAAA,EAAA,EAAmB,UAClB,EAAA,QAAA,kBAAA,IAAA,CAAC,mBACC,EAAA,EAAA,QAAA,EAAA;AAAA,0BAAC,IAAA,CAAA,mBAAA,CAAoB,SAApB,EACC,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,gBAAiB,EAAA,EAAA,aAAA,EAAc,KAAM,EAAA,MAAA,EAAM,IAAC,EAAA,CAAA;AAAA,gCAC5C,gBAAiB,EAAA,EAAA,CAAA;AAAA,4BAClB,GAAA,CAAC,cAAe,EAAA,EAAA,aAAA,EAAe,uBAAyB,EAAA,CAAA;AAAA,4BACxD,GAAA,CAAC,iBAAkB,EAAA,EAAA,IAAA,EAAM,eAAiB,EAAA,CAAA;AAAA,gCACzC,qBAAsB,EAAA,EAAA,CAAA;AAAA,gCACtB,eAAgB,EAAA,EAAA;AAAA,WACnB,EAAA,CAAA;AAAA,0BACA,GAAA,CAAC,mBAAoB,CAAA,OAAA,EAApB,EACC,QAAA,kBAAA,GAAA;AAAA,YAAC,YAAA;AAAA,YAAA;AAAA,cACC,SAAS,OAAW,IAAA,cAAA;AAAA,cACpB;AAAA;AAAA,WAEJ,EAAA;AAAA,SAAA,EACF,CACF,EAAA;AAAA,OACF,EAAA;AAAA;AAAA,GACF;AAEJ;;;;"}
1
+ {"version":3,"file":"DefaultApiExplorerPage.esm.js","sources":["../../../src/components/ApiExplorerPage/DefaultApiExplorerPage.tsx"],"sourcesContent":["/*\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 Content,\n ContentHeader,\n CreateButton,\n PageWithHeader,\n SupportButton,\n TableColumn,\n TableProps,\n} from '@backstage/core-components';\nimport { configApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api';\nimport { CatalogTable, CatalogTableRow } from '@backstage/plugin-catalog';\nimport {\n EntityKindPicker,\n EntityLifecyclePicker,\n EntityListProvider,\n EntityListPagination,\n EntityOwnerPicker,\n EntityTagPicker,\n EntityTypePicker,\n UserListFilterKind,\n UserListPicker,\n CatalogFilterLayout,\n EntityOwnerPickerProps,\n} from '@backstage/plugin-catalog-react';\nimport { registerComponentRouteRef } from '../../routes';\nimport { usePermission } from '@backstage/plugin-permission-react';\nimport { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common/alpha';\nimport { useTranslationRef } from '@backstage/frontend-plugin-api';\nimport { apiDocsTranslationRef } from '../../translation';\n\nconst defaultColumns: TableColumn<CatalogTableRow>[] = [\n CatalogTable.columns.createTitleColumn({ hidden: true }),\n CatalogTable.columns.createNameColumn({ defaultKind: 'API' }),\n CatalogTable.columns.createSystemColumn(),\n CatalogTable.columns.createOwnerColumn(),\n CatalogTable.columns.createSpecTypeColumn(),\n CatalogTable.columns.createSpecLifecycleColumn(),\n CatalogTable.columns.createMetadataDescriptionColumn(),\n CatalogTable.columns.createTagsColumn(),\n];\n\n/**\n * DefaultApiExplorerPageProps\n * @public\n */\nexport type DefaultApiExplorerPageProps = {\n initiallySelectedFilter?: UserListFilterKind;\n columns?: TableColumn<CatalogTableRow>[];\n actions?: TableProps<CatalogTableRow>['actions'];\n ownerPickerMode?: EntityOwnerPickerProps['mode'];\n pagination?: EntityListPagination;\n};\n\n/**\n * DefaultApiExplorerPage\n * @public\n */\nexport const DefaultApiExplorerPage = (props: DefaultApiExplorerPageProps) => {\n const {\n initiallySelectedFilter = 'all',\n columns,\n actions,\n ownerPickerMode,\n pagination,\n } = props;\n\n const configApi = useApi(configApiRef);\n const { t } = useTranslationRef(apiDocsTranslationRef);\n const generatedSubtitle = t('defaultApiExplorerPage.subtitle', {\n orgName: configApi.getOptionalString('organization.name') ?? 'Backstage',\n });\n const registerComponentLink = useRouteRef(registerComponentRouteRef);\n const { allowed } = usePermission({\n permission: catalogEntityCreatePermission,\n });\n\n return (\n <PageWithHeader\n themeId=\"apis\"\n title={t('defaultApiExplorerPage.title')}\n subtitle={generatedSubtitle}\n pageTitleOverride={t('defaultApiExplorerPage.pageTitleOverride')}\n >\n <Content>\n <ContentHeader title=\"\">\n {allowed && (\n <CreateButton\n title={t('defaultApiExplorerPage.createButtonTitle')}\n to={registerComponentLink?.()}\n />\n )}\n <SupportButton>\n {t('defaultApiExplorerPage.supportButtonTitle')}\n </SupportButton>\n </ContentHeader>\n <EntityListProvider pagination={pagination}>\n <CatalogFilterLayout>\n <CatalogFilterLayout.Filters>\n <EntityKindPicker initialFilter=\"api\" hidden />\n <EntityTypePicker />\n <UserListPicker initialFilter={initiallySelectedFilter} />\n <EntityOwnerPicker mode={ownerPickerMode} />\n <EntityLifecyclePicker />\n <EntityTagPicker />\n </CatalogFilterLayout.Filters>\n <CatalogFilterLayout.Content>\n <CatalogTable\n columns={columns || defaultColumns}\n actions={actions}\n />\n </CatalogFilterLayout.Content>\n </CatalogFilterLayout>\n </EntityListProvider>\n </Content>\n </PageWithHeader>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -2,14 +2,17 @@ import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { RELATION_CONSUMES_API } from '@backstage/catalog-model';
3
3
  import Typography from '@material-ui/core/Typography';
4
4
  import { useEntity, useRelatedEntities, EntityTable } from '@backstage/plugin-catalog-react';
5
- import { apiEntityColumns } from './presets.esm.js';
5
+ import { getApiEntityColumns } from './presets.esm.js';
6
6
  import { InfoCard, Progress, WarningPanel, CodeSnippet, Link } from '@backstage/core-components';
7
+ import { useTranslationRef } from '@backstage/frontend-plugin-api';
8
+ import { apiDocsTranslationRef } from '../../translation.esm.js';
7
9
 
8
10
  const ConsumedApisCard = (props) => {
11
+ const { t } = useTranslationRef(apiDocsTranslationRef);
9
12
  const {
10
13
  variant = "gridItem",
11
- title = "Consumed APIs",
12
- columns = apiEntityColumns,
14
+ title = t("consumedApisCard.title"),
15
+ columns = getApiEntityColumns(t),
13
16
  tableOptions = {}
14
17
  } = props;
15
18
  const { entity } = useEntity();
@@ -24,7 +27,7 @@ const ConsumedApisCard = (props) => {
24
27
  WarningPanel,
25
28
  {
26
29
  severity: "error",
27
- title: "Could not load APIs",
30
+ title: t("consumedApisCard.error.title"),
28
31
  message: /* @__PURE__ */ jsx(CodeSnippet, { text: `${error}`, language: "text" })
29
32
  }
30
33
  ) });
@@ -35,17 +38,15 @@ const ConsumedApisCard = (props) => {
35
38
  title,
36
39
  variant,
37
40
  emptyContent: /* @__PURE__ */ jsxs("div", { style: { textAlign: "center" }, children: [
38
- /* @__PURE__ */ jsxs(Typography, { variant: "body1", children: [
39
- "This ",
40
- entity.kind.toLocaleLowerCase("en-US"),
41
- " does not consume any APIs."
42
- ] }),
41
+ /* @__PURE__ */ jsx(Typography, { variant: "body1", children: t("consumedApisCard.emptyContent.title", {
42
+ entity: entity.kind.toLocaleLowerCase("en-US")
43
+ }) }),
43
44
  /* @__PURE__ */ jsx(Typography, { variant: "body2", children: /* @__PURE__ */ jsx(
44
45
  Link,
45
46
  {
46
47
  to: "https://backstage.io/docs/features/software-catalog/descriptor-format#specconsumesapis-optional",
47
48
  externalLinkIcon: true,
48
- children: "Learn how to change this"
49
+ children: t("apisCardHelpLinkTitle")
49
50
  }
50
51
  ) })
51
52
  ] }),
@@ -1 +1 @@
1
- {"version":3,"file":"ConsumedApisCard.esm.js","sources":["../../../src/components/ApisCards/ConsumedApisCard.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\nimport { ApiEntity, RELATION_CONSUMES_API } from '@backstage/catalog-model';\nimport Typography from '@material-ui/core/Typography';\nimport {\n EntityTable,\n useEntity,\n useRelatedEntities,\n} from '@backstage/plugin-catalog-react';\nimport { apiEntityColumns } from './presets';\nimport {\n CodeSnippet,\n InfoCard,\n InfoCardVariants,\n Link,\n Progress,\n TableColumn,\n TableOptions,\n WarningPanel,\n} from '@backstage/core-components';\n\n/**\n * @public\n */\nexport const ConsumedApisCard = (props: {\n variant?: InfoCardVariants;\n title?: string;\n columns?: TableColumn<ApiEntity>[];\n tableOptions?: TableOptions;\n}) => {\n const {\n variant = 'gridItem',\n title = 'Consumed APIs',\n columns = apiEntityColumns,\n tableOptions = {},\n } = props;\n const { entity } = useEntity();\n const { entities, loading, error } = useRelatedEntities(entity, {\n type: RELATION_CONSUMES_API,\n });\n\n if (loading) {\n return (\n <InfoCard variant={variant} title={title}>\n <Progress />\n </InfoCard>\n );\n }\n\n if (error || !entities) {\n return (\n <InfoCard variant={variant} title={title}>\n <WarningPanel\n severity=\"error\"\n title=\"Could not load APIs\"\n message={<CodeSnippet text={`${error}`} language=\"text\" />}\n />\n </InfoCard>\n );\n }\n\n return (\n <EntityTable\n title={title}\n variant={variant}\n emptyContent={\n <div style={{ textAlign: 'center' }}>\n <Typography variant=\"body1\">\n This {entity.kind.toLocaleLowerCase('en-US')} does not consume any\n APIs.\n </Typography>\n <Typography variant=\"body2\">\n <Link\n to=\"https://backstage.io/docs/features/software-catalog/descriptor-format#specconsumesapis-optional\"\n externalLinkIcon\n >\n Learn how to change this\n </Link>\n </Typography>\n </div>\n }\n columns={columns}\n tableOptions={tableOptions}\n entities={entities as ApiEntity[]}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;;AAsCa,MAAA,gBAAA,GAAmB,CAAC,KAK3B,KAAA;AACJ,EAAM,MAAA;AAAA,IACJ,OAAU,GAAA,UAAA;AAAA,IACV,KAAQ,GAAA,eAAA;AAAA,IACR,OAAU,GAAA,gBAAA;AAAA,IACV,eAAe;AAAC,GACd,GAAA,KAAA;AACJ,EAAM,MAAA,EAAE,MAAO,EAAA,GAAI,SAAU,EAAA;AAC7B,EAAA,MAAM,EAAE,QAAU,EAAA,OAAA,EAAS,KAAM,EAAA,GAAI,mBAAmB,MAAQ,EAAA;AAAA,IAC9D,IAAM,EAAA;AAAA,GACP,CAAA;AAED,EAAA,IAAI,OAAS,EAAA;AACX,IAAA,2BACG,QAAS,EAAA,EAAA,OAAA,EAAkB,KAC1B,EAAA,QAAA,kBAAA,GAAA,CAAC,YAAS,CACZ,EAAA,CAAA;AAAA;AAIJ,EAAI,IAAA,KAAA,IAAS,CAAC,QAAU,EAAA;AACtB,IACE,uBAAA,GAAA,CAAC,QAAS,EAAA,EAAA,OAAA,EAAkB,KAC1B,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,QAAS,EAAA,OAAA;AAAA,QACT,KAAM,EAAA,qBAAA;AAAA,QACN,OAAA,sBAAU,WAAY,EAAA,EAAA,IAAA,EAAM,GAAG,KAAK,CAAA,CAAA,EAAI,UAAS,MAAO,EAAA;AAAA;AAAA,KAE5D,EAAA,CAAA;AAAA;AAIJ,EACE,uBAAA,GAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,OAAA;AAAA,MACA,8BACG,IAAA,CAAA,KAAA,EAAA,EAAI,OAAO,EAAE,SAAA,EAAW,UACvB,EAAA,QAAA,EAAA;AAAA,wBAAC,IAAA,CAAA,UAAA,EAAA,EAAW,SAAQ,OAAQ,EAAA,QAAA,EAAA;AAAA,UAAA,OAAA;AAAA,UACpB,MAAA,CAAO,IAAK,CAAA,iBAAA,CAAkB,OAAO,CAAA;AAAA,UAAE;AAAA,SAE/C,EAAA,CAAA;AAAA,wBACA,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OAClB,EAAA,QAAA,kBAAA,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,EAAG,EAAA,iGAAA;AAAA,YACH,gBAAgB,EAAA,IAAA;AAAA,YACjB,QAAA,EAAA;AAAA;AAAA,SAGH,EAAA;AAAA,OACF,EAAA,CAAA;AAAA,MAEF,OAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;;;;"}
1
+ {"version":3,"file":"ConsumedApisCard.esm.js","sources":["../../../src/components/ApisCards/ConsumedApisCard.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\nimport { ApiEntity, RELATION_CONSUMES_API } from '@backstage/catalog-model';\nimport Typography from '@material-ui/core/Typography';\nimport {\n EntityTable,\n useEntity,\n useRelatedEntities,\n} from '@backstage/plugin-catalog-react';\nimport { getApiEntityColumns } from './presets';\nimport {\n CodeSnippet,\n InfoCard,\n InfoCardVariants,\n Link,\n Progress,\n TableColumn,\n TableOptions,\n WarningPanel,\n} from '@backstage/core-components';\nimport { useTranslationRef } from '@backstage/frontend-plugin-api';\nimport { apiDocsTranslationRef } from '../../translation';\n\n/**\n * @public\n */\nexport const ConsumedApisCard = (props: {\n variant?: InfoCardVariants;\n title?: string;\n columns?: TableColumn<ApiEntity>[];\n tableOptions?: TableOptions;\n}) => {\n const { t } = useTranslationRef(apiDocsTranslationRef);\n const {\n variant = 'gridItem',\n title = t('consumedApisCard.title'),\n columns = getApiEntityColumns(t),\n tableOptions = {},\n } = props;\n const { entity } = useEntity();\n const { entities, loading, error } = useRelatedEntities(entity, {\n type: RELATION_CONSUMES_API,\n });\n\n if (loading) {\n return (\n <InfoCard variant={variant} title={title}>\n <Progress />\n </InfoCard>\n );\n }\n\n if (error || !entities) {\n return (\n <InfoCard variant={variant} title={title}>\n <WarningPanel\n severity=\"error\"\n title={t('consumedApisCard.error.title')}\n message={<CodeSnippet text={`${error}`} language=\"text\" />}\n />\n </InfoCard>\n );\n }\n\n return (\n <EntityTable\n title={title}\n variant={variant}\n emptyContent={\n <div style={{ textAlign: 'center' }}>\n <Typography variant=\"body1\">\n {t('consumedApisCard.emptyContent.title', {\n entity: entity.kind.toLocaleLowerCase('en-US'),\n })}\n </Typography>\n <Typography variant=\"body2\">\n <Link\n to=\"https://backstage.io/docs/features/software-catalog/descriptor-format#specconsumesapis-optional\"\n externalLinkIcon\n >\n {t('apisCardHelpLinkTitle')}\n </Link>\n </Typography>\n </div>\n }\n columns={columns}\n tableOptions={tableOptions}\n entities={entities as ApiEntity[]}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAwCa,MAAA,gBAAA,GAAmB,CAAC,KAK3B,KAAA;AACJ,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,qBAAqB,CAAA;AACrD,EAAM,MAAA;AAAA,IACJ,OAAU,GAAA,UAAA;AAAA,IACV,KAAA,GAAQ,EAAE,wBAAwB,CAAA;AAAA,IAClC,OAAA,GAAU,oBAAoB,CAAC,CAAA;AAAA,IAC/B,eAAe;AAAC,GACd,GAAA,KAAA;AACJ,EAAM,MAAA,EAAE,MAAO,EAAA,GAAI,SAAU,EAAA;AAC7B,EAAA,MAAM,EAAE,QAAU,EAAA,OAAA,EAAS,KAAM,EAAA,GAAI,mBAAmB,MAAQ,EAAA;AAAA,IAC9D,IAAM,EAAA;AAAA,GACP,CAAA;AAED,EAAA,IAAI,OAAS,EAAA;AACX,IAAA,2BACG,QAAS,EAAA,EAAA,OAAA,EAAkB,KAC1B,EAAA,QAAA,kBAAA,GAAA,CAAC,YAAS,CACZ,EAAA,CAAA;AAAA;AAIJ,EAAI,IAAA,KAAA,IAAS,CAAC,QAAU,EAAA;AACtB,IACE,uBAAA,GAAA,CAAC,QAAS,EAAA,EAAA,OAAA,EAAkB,KAC1B,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,QAAS,EAAA,OAAA;AAAA,QACT,KAAA,EAAO,EAAE,8BAA8B,CAAA;AAAA,QACvC,OAAA,sBAAU,WAAY,EAAA,EAAA,IAAA,EAAM,GAAG,KAAK,CAAA,CAAA,EAAI,UAAS,MAAO,EAAA;AAAA;AAAA,KAE5D,EAAA,CAAA;AAAA;AAIJ,EACE,uBAAA,GAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,OAAA;AAAA,MACA,8BACG,IAAA,CAAA,KAAA,EAAA,EAAI,OAAO,EAAE,SAAA,EAAW,UACvB,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OACjB,EAAA,QAAA,EAAA,CAAA,CAAE,qCAAuC,EAAA;AAAA,UACxC,MAAQ,EAAA,MAAA,CAAO,IAAK,CAAA,iBAAA,CAAkB,OAAO;AAAA,SAC9C,CACH,EAAA,CAAA;AAAA,wBACA,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OAClB,EAAA,QAAA,kBAAA,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,EAAG,EAAA,iGAAA;AAAA,YACH,gBAAgB,EAAA,IAAA;AAAA,YAEf,YAAE,uBAAuB;AAAA;AAAA,SAE9B,EAAA;AAAA,OACF,EAAA,CAAA;AAAA,MAEF,OAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;;;;"}
@@ -2,20 +2,26 @@ import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { RELATION_HAS_PART } from '@backstage/catalog-model';
3
3
  import Typography from '@material-ui/core/Typography';
4
4
  import { EntityTable, useEntity, useRelatedEntities } from '@backstage/plugin-catalog-react';
5
+ import { useMemo } from 'react';
5
6
  import { createSpecApiTypeColumn } from './presets.esm.js';
6
7
  import { InfoCard, Progress, WarningPanel, CodeSnippet, Link } from '@backstage/core-components';
8
+ import { useTranslationRef } from '@backstage/frontend-plugin-api';
9
+ import { apiDocsTranslationRef } from '../../translation.esm.js';
7
10
 
8
- const presetColumns = [
9
- EntityTable.columns.createEntityRefColumn({ defaultKind: "API" }),
10
- EntityTable.columns.createOwnerColumn(),
11
- createSpecApiTypeColumn(),
12
- EntityTable.columns.createSpecLifecycleColumn(),
13
- EntityTable.columns.createMetadataDescriptionColumn()
14
- ];
15
11
  const HasApisCard = (props) => {
12
+ const { t } = useTranslationRef(apiDocsTranslationRef);
13
+ const presetColumns = useMemo(() => {
14
+ return [
15
+ EntityTable.columns.createEntityRefColumn({ defaultKind: "API" }),
16
+ EntityTable.columns.createOwnerColumn(),
17
+ createSpecApiTypeColumn(t),
18
+ EntityTable.columns.createSpecLifecycleColumn(),
19
+ EntityTable.columns.createMetadataDescriptionColumn()
20
+ ];
21
+ }, [t]);
16
22
  const {
17
23
  variant = "gridItem",
18
- title = "APIs",
24
+ title = t("hasApisCard.title"),
19
25
  columns = presetColumns,
20
26
  tableOptions = {}
21
27
  } = props;
@@ -32,7 +38,7 @@ const HasApisCard = (props) => {
32
38
  WarningPanel,
33
39
  {
34
40
  severity: "error",
35
- title: "Could not load APIs",
41
+ title: t("hasApisCard.error.title"),
36
42
  message: /* @__PURE__ */ jsx(CodeSnippet, { text: `${error}`, language: "text" })
37
43
  }
38
44
  ) });
@@ -43,12 +49,10 @@ const HasApisCard = (props) => {
43
49
  title,
44
50
  variant,
45
51
  emptyContent: /* @__PURE__ */ jsxs("div", { style: { textAlign: "center" }, children: [
46
- /* @__PURE__ */ jsxs(Typography, { variant: "body1", children: [
47
- "This ",
48
- entity.kind.toLocaleLowerCase("en-US"),
49
- " does not contain any APIs."
50
- ] }),
51
- /* @__PURE__ */ jsx(Typography, { variant: "body2", children: /* @__PURE__ */ jsx(Link, { to: "https://backstage.io/docs/features/software-catalog/descriptor-format#kind-api", children: "Learn how to change this." }) })
52
+ /* @__PURE__ */ jsx(Typography, { variant: "body1", children: t("hasApisCard.emptyContent.title", {
53
+ entity: entity.kind.toLocaleLowerCase("en-US")
54
+ }) }),
55
+ /* @__PURE__ */ jsx(Typography, { variant: "body2", children: /* @__PURE__ */ jsx(Link, { to: "https://backstage.io/docs/features/software-catalog/descriptor-format#kind-api", children: t("apisCardHelpLinkTitle") }) })
52
56
  ] }),
53
57
  columns,
54
58
  tableOptions,
@@ -1 +1 @@
1
- {"version":3,"file":"HasApisCard.esm.js","sources":["../../../src/components/ApisCards/HasApisCard.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\nimport { ApiEntity, RELATION_HAS_PART } from '@backstage/catalog-model';\nimport Typography from '@material-ui/core/Typography';\nimport {\n EntityTable,\n useEntity,\n useRelatedEntities,\n} from '@backstage/plugin-catalog-react';\nimport { createSpecApiTypeColumn } from './presets';\nimport {\n CodeSnippet,\n InfoCard,\n InfoCardVariants,\n Link,\n Progress,\n TableColumn,\n TableOptions,\n WarningPanel,\n} from '@backstage/core-components';\n\nconst presetColumns: TableColumn<ApiEntity>[] = [\n EntityTable.columns.createEntityRefColumn({ defaultKind: 'API' }),\n EntityTable.columns.createOwnerColumn(),\n createSpecApiTypeColumn(),\n EntityTable.columns.createSpecLifecycleColumn(),\n EntityTable.columns.createMetadataDescriptionColumn(),\n];\n\n/**\n * @public\n */\nexport const HasApisCard = (props: {\n variant?: InfoCardVariants;\n title?: string;\n columns?: TableColumn<ApiEntity>[];\n tableOptions?: TableOptions;\n}) => {\n const {\n variant = 'gridItem',\n title = 'APIs',\n columns = presetColumns,\n tableOptions = {},\n } = props;\n const { entity } = useEntity();\n const { entities, loading, error } = useRelatedEntities(entity, {\n type: RELATION_HAS_PART,\n kind: 'API',\n });\n\n if (loading) {\n return (\n <InfoCard variant={variant} title={title}>\n <Progress />\n </InfoCard>\n );\n }\n\n if (error || !entities) {\n return (\n <InfoCard variant={variant} title={title}>\n <WarningPanel\n severity=\"error\"\n title=\"Could not load APIs\"\n message={<CodeSnippet text={`${error}`} language=\"text\" />}\n />\n </InfoCard>\n );\n }\n\n return (\n <EntityTable\n title={title}\n variant={variant}\n emptyContent={\n <div style={{ textAlign: 'center' }}>\n <Typography variant=\"body1\">\n This {entity.kind.toLocaleLowerCase('en-US')} does not contain any\n APIs.\n </Typography>\n <Typography variant=\"body2\">\n <Link to=\"https://backstage.io/docs/features/software-catalog/descriptor-format#kind-api\">\n Learn how to change this.\n </Link>\n </Typography>\n </div>\n }\n columns={columns}\n tableOptions={tableOptions}\n entities={entities as ApiEntity[]}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;;AAmCA,MAAM,aAA0C,GAAA;AAAA,EAC9C,YAAY,OAAQ,CAAA,qBAAA,CAAsB,EAAE,WAAA,EAAa,OAAO,CAAA;AAAA,EAChE,WAAA,CAAY,QAAQ,iBAAkB,EAAA;AAAA,EACtC,uBAAwB,EAAA;AAAA,EACxB,WAAA,CAAY,QAAQ,yBAA0B,EAAA;AAAA,EAC9C,WAAA,CAAY,QAAQ,+BAAgC;AACtD,CAAA;AAKa,MAAA,WAAA,GAAc,CAAC,KAKtB,KAAA;AACJ,EAAM,MAAA;AAAA,IACJ,OAAU,GAAA,UAAA;AAAA,IACV,KAAQ,GAAA,MAAA;AAAA,IACR,OAAU,GAAA,aAAA;AAAA,IACV,eAAe;AAAC,GACd,GAAA,KAAA;AACJ,EAAM,MAAA,EAAE,MAAO,EAAA,GAAI,SAAU,EAAA;AAC7B,EAAA,MAAM,EAAE,QAAU,EAAA,OAAA,EAAS,KAAM,EAAA,GAAI,mBAAmB,MAAQ,EAAA;AAAA,IAC9D,IAAM,EAAA,iBAAA;AAAA,IACN,IAAM,EAAA;AAAA,GACP,CAAA;AAED,EAAA,IAAI,OAAS,EAAA;AACX,IAAA,2BACG,QAAS,EAAA,EAAA,OAAA,EAAkB,KAC1B,EAAA,QAAA,kBAAA,GAAA,CAAC,YAAS,CACZ,EAAA,CAAA;AAAA;AAIJ,EAAI,IAAA,KAAA,IAAS,CAAC,QAAU,EAAA;AACtB,IACE,uBAAA,GAAA,CAAC,QAAS,EAAA,EAAA,OAAA,EAAkB,KAC1B,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,QAAS,EAAA,OAAA;AAAA,QACT,KAAM,EAAA,qBAAA;AAAA,QACN,OAAA,sBAAU,WAAY,EAAA,EAAA,IAAA,EAAM,GAAG,KAAK,CAAA,CAAA,EAAI,UAAS,MAAO,EAAA;AAAA;AAAA,KAE5D,EAAA,CAAA;AAAA;AAIJ,EACE,uBAAA,GAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,OAAA;AAAA,MACA,8BACG,IAAA,CAAA,KAAA,EAAA,EAAI,OAAO,EAAE,SAAA,EAAW,UACvB,EAAA,QAAA,EAAA;AAAA,wBAAC,IAAA,CAAA,UAAA,EAAA,EAAW,SAAQ,OAAQ,EAAA,QAAA,EAAA;AAAA,UAAA,OAAA;AAAA,UACpB,MAAA,CAAO,IAAK,CAAA,iBAAA,CAAkB,OAAO,CAAA;AAAA,UAAE;AAAA,SAE/C,EAAA,CAAA;AAAA,wBACA,GAAA,CAAC,cAAW,OAAQ,EAAA,OAAA,EAClB,8BAAC,IAAK,EAAA,EAAA,EAAA,EAAG,gFAAiF,EAAA,QAAA,EAAA,2BAAA,EAE1F,CACF,EAAA;AAAA,OACF,EAAA,CAAA;AAAA,MAEF,OAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;;;;"}
1
+ {"version":3,"file":"HasApisCard.esm.js","sources":["../../../src/components/ApisCards/HasApisCard.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\nimport { ApiEntity, RELATION_HAS_PART } from '@backstage/catalog-model';\nimport Typography from '@material-ui/core/Typography';\nimport {\n EntityTable,\n useEntity,\n useRelatedEntities,\n} from '@backstage/plugin-catalog-react';\nimport { useMemo } from 'react';\nimport { createSpecApiTypeColumn } from './presets';\nimport {\n CodeSnippet,\n InfoCard,\n InfoCardVariants,\n Link,\n Progress,\n TableColumn,\n TableOptions,\n WarningPanel,\n} from '@backstage/core-components';\nimport { useTranslationRef } from '@backstage/frontend-plugin-api';\nimport { apiDocsTranslationRef } from '../../translation';\n\n/**\n * @public\n */\nexport const HasApisCard = (props: {\n variant?: InfoCardVariants;\n title?: string;\n columns?: TableColumn<ApiEntity>[];\n tableOptions?: TableOptions;\n}) => {\n const { t } = useTranslationRef(apiDocsTranslationRef);\n const presetColumns: TableColumn<ApiEntity>[] = useMemo(() => {\n return [\n EntityTable.columns.createEntityRefColumn({ defaultKind: 'API' }),\n EntityTable.columns.createOwnerColumn(),\n createSpecApiTypeColumn(t),\n EntityTable.columns.createSpecLifecycleColumn(),\n EntityTable.columns.createMetadataDescriptionColumn(),\n ];\n }, [t]);\n const {\n variant = 'gridItem',\n title = t('hasApisCard.title'),\n columns = presetColumns,\n tableOptions = {},\n } = props;\n const { entity } = useEntity();\n const { entities, loading, error } = useRelatedEntities(entity, {\n type: RELATION_HAS_PART,\n kind: 'API',\n });\n\n if (loading) {\n return (\n <InfoCard variant={variant} title={title}>\n <Progress />\n </InfoCard>\n );\n }\n\n if (error || !entities) {\n return (\n <InfoCard variant={variant} title={title}>\n <WarningPanel\n severity=\"error\"\n title={t('hasApisCard.error.title')}\n message={<CodeSnippet text={`${error}`} language=\"text\" />}\n />\n </InfoCard>\n );\n }\n\n return (\n <EntityTable\n title={title}\n variant={variant}\n emptyContent={\n <div style={{ textAlign: 'center' }}>\n <Typography variant=\"body1\">\n {t('hasApisCard.emptyContent.title', {\n entity: entity.kind.toLocaleLowerCase('en-US'),\n })}\n </Typography>\n <Typography variant=\"body2\">\n <Link to=\"https://backstage.io/docs/features/software-catalog/descriptor-format#kind-api\">\n {t('apisCardHelpLinkTitle')}\n </Link>\n </Typography>\n </div>\n }\n columns={columns}\n tableOptions={tableOptions}\n entities={entities as ApiEntity[]}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AAyCa,MAAA,WAAA,GAAc,CAAC,KAKtB,KAAA;AACJ,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,qBAAqB,CAAA;AACrD,EAAM,MAAA,aAAA,GAA0C,QAAQ,MAAM;AAC5D,IAAO,OAAA;AAAA,MACL,YAAY,OAAQ,CAAA,qBAAA,CAAsB,EAAE,WAAA,EAAa,OAAO,CAAA;AAAA,MAChE,WAAA,CAAY,QAAQ,iBAAkB,EAAA;AAAA,MACtC,wBAAwB,CAAC,CAAA;AAAA,MACzB,WAAA,CAAY,QAAQ,yBAA0B,EAAA;AAAA,MAC9C,WAAA,CAAY,QAAQ,+BAAgC;AAAA,KACtD;AAAA,GACF,EAAG,CAAC,CAAC,CAAC,CAAA;AACN,EAAM,MAAA;AAAA,IACJ,OAAU,GAAA,UAAA;AAAA,IACV,KAAA,GAAQ,EAAE,mBAAmB,CAAA;AAAA,IAC7B,OAAU,GAAA,aAAA;AAAA,IACV,eAAe;AAAC,GACd,GAAA,KAAA;AACJ,EAAM,MAAA,EAAE,MAAO,EAAA,GAAI,SAAU,EAAA;AAC7B,EAAA,MAAM,EAAE,QAAU,EAAA,OAAA,EAAS,KAAM,EAAA,GAAI,mBAAmB,MAAQ,EAAA;AAAA,IAC9D,IAAM,EAAA,iBAAA;AAAA,IACN,IAAM,EAAA;AAAA,GACP,CAAA;AAED,EAAA,IAAI,OAAS,EAAA;AACX,IAAA,2BACG,QAAS,EAAA,EAAA,OAAA,EAAkB,KAC1B,EAAA,QAAA,kBAAA,GAAA,CAAC,YAAS,CACZ,EAAA,CAAA;AAAA;AAIJ,EAAI,IAAA,KAAA,IAAS,CAAC,QAAU,EAAA;AACtB,IACE,uBAAA,GAAA,CAAC,QAAS,EAAA,EAAA,OAAA,EAAkB,KAC1B,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,QAAS,EAAA,OAAA;AAAA,QACT,KAAA,EAAO,EAAE,yBAAyB,CAAA;AAAA,QAClC,OAAA,sBAAU,WAAY,EAAA,EAAA,IAAA,EAAM,GAAG,KAAK,CAAA,CAAA,EAAI,UAAS,MAAO,EAAA;AAAA;AAAA,KAE5D,EAAA,CAAA;AAAA;AAIJ,EACE,uBAAA,GAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,OAAA;AAAA,MACA,8BACG,IAAA,CAAA,KAAA,EAAA,EAAI,OAAO,EAAE,SAAA,EAAW,UACvB,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OACjB,EAAA,QAAA,EAAA,CAAA,CAAE,gCAAkC,EAAA;AAAA,UACnC,MAAQ,EAAA,MAAA,CAAO,IAAK,CAAA,iBAAA,CAAkB,OAAO;AAAA,SAC9C,CACH,EAAA,CAAA;AAAA,wBACA,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OAClB,EAAA,QAAA,kBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,EAAA,EAAG,gFACN,EAAA,QAAA,EAAA,CAAA,CAAE,uBAAuB,CAAA,EAC5B,CACF,EAAA;AAAA,OACF,EAAA,CAAA;AAAA,MAEF,OAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;;;;"}
@@ -2,14 +2,17 @@ import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { RELATION_PROVIDES_API } from '@backstage/catalog-model';
3
3
  import Typography from '@material-ui/core/Typography';
4
4
  import { useEntity, useRelatedEntities, EntityTable } from '@backstage/plugin-catalog-react';
5
- import { apiEntityColumns } from './presets.esm.js';
5
+ import { getApiEntityColumns } from './presets.esm.js';
6
6
  import { InfoCard, Progress, WarningPanel, CodeSnippet, Link } from '@backstage/core-components';
7
+ import { useTranslationRef } from '@backstage/frontend-plugin-api';
8
+ import { apiDocsTranslationRef } from '../../translation.esm.js';
7
9
 
8
10
  const ProvidedApisCard = (props) => {
11
+ const { t } = useTranslationRef(apiDocsTranslationRef);
9
12
  const {
10
13
  variant = "gridItem",
11
- title = "Provided APIs",
12
- columns = apiEntityColumns,
14
+ title = t("providedApisCard.title"),
15
+ columns = getApiEntityColumns(t),
13
16
  tableOptions = {}
14
17
  } = props;
15
18
  const { entity } = useEntity();
@@ -24,7 +27,7 @@ const ProvidedApisCard = (props) => {
24
27
  WarningPanel,
25
28
  {
26
29
  severity: "error",
27
- title: "Could not load APIs",
30
+ title: t("providedApisCard.error.title"),
28
31
  message: /* @__PURE__ */ jsx(CodeSnippet, { text: `${error}`, language: "text" })
29
32
  }
30
33
  ) });
@@ -35,17 +38,15 @@ const ProvidedApisCard = (props) => {
35
38
  title,
36
39
  variant,
37
40
  emptyContent: /* @__PURE__ */ jsxs("div", { style: { textAlign: "center" }, children: [
38
- /* @__PURE__ */ jsxs(Typography, { variant: "body1", children: [
39
- "This ",
40
- entity.kind.toLocaleLowerCase("en-US"),
41
- " does not provide any APIs."
42
- ] }),
41
+ /* @__PURE__ */ jsx(Typography, { variant: "body1", children: t("providedApisCard.emptyContent.title", {
42
+ entity: entity.kind.toLocaleLowerCase("en-US")
43
+ }) }),
43
44
  /* @__PURE__ */ jsx(Typography, { variant: "body2", children: /* @__PURE__ */ jsx(
44
45
  Link,
45
46
  {
46
47
  to: "https://backstage.io/docs/features/software-catalog/descriptor-format#specprovidesapis-optional",
47
48
  externalLinkIcon: true,
48
- children: "Learn how to change this"
49
+ children: t("apisCardHelpLinkTitle")
49
50
  }
50
51
  ) })
51
52
  ] }),
@@ -1 +1 @@
1
- {"version":3,"file":"ProvidedApisCard.esm.js","sources":["../../../src/components/ApisCards/ProvidedApisCard.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\nimport { ApiEntity, RELATION_PROVIDES_API } from '@backstage/catalog-model';\nimport Typography from '@material-ui/core/Typography';\nimport {\n EntityTable,\n useEntity,\n useRelatedEntities,\n} from '@backstage/plugin-catalog-react';\nimport { apiEntityColumns } from './presets';\nimport {\n CodeSnippet,\n InfoCard,\n InfoCardVariants,\n Link,\n Progress,\n TableColumn,\n TableOptions,\n WarningPanel,\n} from '@backstage/core-components';\n\n/**\n * @public\n */\nexport const ProvidedApisCard = (props: {\n variant?: InfoCardVariants;\n title?: string;\n columns?: TableColumn<ApiEntity>[];\n tableOptions?: TableOptions;\n}) => {\n const {\n variant = 'gridItem',\n title = 'Provided APIs',\n columns = apiEntityColumns,\n tableOptions = {},\n } = props;\n const { entity } = useEntity();\n const { entities, loading, error } = useRelatedEntities(entity, {\n type: RELATION_PROVIDES_API,\n });\n\n if (loading) {\n return (\n <InfoCard variant={variant} title={title}>\n <Progress />\n </InfoCard>\n );\n }\n\n if (error || !entities) {\n return (\n <InfoCard variant={variant} title={title}>\n <WarningPanel\n severity=\"error\"\n title=\"Could not load APIs\"\n message={<CodeSnippet text={`${error}`} language=\"text\" />}\n />\n </InfoCard>\n );\n }\n\n return (\n <EntityTable\n title={title}\n variant={variant}\n emptyContent={\n <div style={{ textAlign: 'center' }}>\n <Typography variant=\"body1\">\n This {entity.kind.toLocaleLowerCase('en-US')} does not provide any\n APIs.\n </Typography>\n <Typography variant=\"body2\">\n <Link\n to=\"https://backstage.io/docs/features/software-catalog/descriptor-format#specprovidesapis-optional\"\n externalLinkIcon\n >\n Learn how to change this\n </Link>\n </Typography>\n </div>\n }\n columns={columns}\n tableOptions={tableOptions}\n entities={entities as ApiEntity[]}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;;AAsCa,MAAA,gBAAA,GAAmB,CAAC,KAK3B,KAAA;AACJ,EAAM,MAAA;AAAA,IACJ,OAAU,GAAA,UAAA;AAAA,IACV,KAAQ,GAAA,eAAA;AAAA,IACR,OAAU,GAAA,gBAAA;AAAA,IACV,eAAe;AAAC,GACd,GAAA,KAAA;AACJ,EAAM,MAAA,EAAE,MAAO,EAAA,GAAI,SAAU,EAAA;AAC7B,EAAA,MAAM,EAAE,QAAU,EAAA,OAAA,EAAS,KAAM,EAAA,GAAI,mBAAmB,MAAQ,EAAA;AAAA,IAC9D,IAAM,EAAA;AAAA,GACP,CAAA;AAED,EAAA,IAAI,OAAS,EAAA;AACX,IAAA,2BACG,QAAS,EAAA,EAAA,OAAA,EAAkB,KAC1B,EAAA,QAAA,kBAAA,GAAA,CAAC,YAAS,CACZ,EAAA,CAAA;AAAA;AAIJ,EAAI,IAAA,KAAA,IAAS,CAAC,QAAU,EAAA;AACtB,IACE,uBAAA,GAAA,CAAC,QAAS,EAAA,EAAA,OAAA,EAAkB,KAC1B,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,QAAS,EAAA,OAAA;AAAA,QACT,KAAM,EAAA,qBAAA;AAAA,QACN,OAAA,sBAAU,WAAY,EAAA,EAAA,IAAA,EAAM,GAAG,KAAK,CAAA,CAAA,EAAI,UAAS,MAAO,EAAA;AAAA;AAAA,KAE5D,EAAA,CAAA;AAAA;AAIJ,EACE,uBAAA,GAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,OAAA;AAAA,MACA,8BACG,IAAA,CAAA,KAAA,EAAA,EAAI,OAAO,EAAE,SAAA,EAAW,UACvB,EAAA,QAAA,EAAA;AAAA,wBAAC,IAAA,CAAA,UAAA,EAAA,EAAW,SAAQ,OAAQ,EAAA,QAAA,EAAA;AAAA,UAAA,OAAA;AAAA,UACpB,MAAA,CAAO,IAAK,CAAA,iBAAA,CAAkB,OAAO,CAAA;AAAA,UAAE;AAAA,SAE/C,EAAA,CAAA;AAAA,wBACA,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OAClB,EAAA,QAAA,kBAAA,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,EAAG,EAAA,iGAAA;AAAA,YACH,gBAAgB,EAAA,IAAA;AAAA,YACjB,QAAA,EAAA;AAAA;AAAA,SAGH,EAAA;AAAA,OACF,EAAA,CAAA;AAAA,MAEF,OAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;;;;"}
1
+ {"version":3,"file":"ProvidedApisCard.esm.js","sources":["../../../src/components/ApisCards/ProvidedApisCard.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\nimport { ApiEntity, RELATION_PROVIDES_API } from '@backstage/catalog-model';\nimport Typography from '@material-ui/core/Typography';\nimport {\n EntityTable,\n useEntity,\n useRelatedEntities,\n} from '@backstage/plugin-catalog-react';\nimport { getApiEntityColumns } from './presets';\nimport {\n CodeSnippet,\n InfoCard,\n InfoCardVariants,\n Link,\n Progress,\n TableColumn,\n TableOptions,\n WarningPanel,\n} from '@backstage/core-components';\nimport { useTranslationRef } from '@backstage/frontend-plugin-api';\nimport { apiDocsTranslationRef } from '../../translation';\n\n/**\n * @public\n */\nexport const ProvidedApisCard = (props: {\n variant?: InfoCardVariants;\n title?: string;\n columns?: TableColumn<ApiEntity>[];\n tableOptions?: TableOptions;\n}) => {\n const { t } = useTranslationRef(apiDocsTranslationRef);\n const {\n variant = 'gridItem',\n title = t('providedApisCard.title'),\n columns = getApiEntityColumns(t),\n tableOptions = {},\n } = props;\n const { entity } = useEntity();\n const { entities, loading, error } = useRelatedEntities(entity, {\n type: RELATION_PROVIDES_API,\n });\n\n if (loading) {\n return (\n <InfoCard variant={variant} title={title}>\n <Progress />\n </InfoCard>\n );\n }\n\n if (error || !entities) {\n return (\n <InfoCard variant={variant} title={title}>\n <WarningPanel\n severity=\"error\"\n title={t('providedApisCard.error.title')}\n message={<CodeSnippet text={`${error}`} language=\"text\" />}\n />\n </InfoCard>\n );\n }\n\n return (\n <EntityTable\n title={title}\n variant={variant}\n emptyContent={\n <div style={{ textAlign: 'center' }}>\n <Typography variant=\"body1\">\n {t('providedApisCard.emptyContent.title', {\n entity: entity.kind.toLocaleLowerCase('en-US'),\n })}\n </Typography>\n <Typography variant=\"body2\">\n <Link\n to=\"https://backstage.io/docs/features/software-catalog/descriptor-format#specprovidesapis-optional\"\n externalLinkIcon\n >\n {t('apisCardHelpLinkTitle')}\n </Link>\n </Typography>\n </div>\n }\n columns={columns}\n tableOptions={tableOptions}\n entities={entities as ApiEntity[]}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAwCa,MAAA,gBAAA,GAAmB,CAAC,KAK3B,KAAA;AACJ,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,qBAAqB,CAAA;AACrD,EAAM,MAAA;AAAA,IACJ,OAAU,GAAA,UAAA;AAAA,IACV,KAAA,GAAQ,EAAE,wBAAwB,CAAA;AAAA,IAClC,OAAA,GAAU,oBAAoB,CAAC,CAAA;AAAA,IAC/B,eAAe;AAAC,GACd,GAAA,KAAA;AACJ,EAAM,MAAA,EAAE,MAAO,EAAA,GAAI,SAAU,EAAA;AAC7B,EAAA,MAAM,EAAE,QAAU,EAAA,OAAA,EAAS,KAAM,EAAA,GAAI,mBAAmB,MAAQ,EAAA;AAAA,IAC9D,IAAM,EAAA;AAAA,GACP,CAAA;AAED,EAAA,IAAI,OAAS,EAAA;AACX,IAAA,2BACG,QAAS,EAAA,EAAA,OAAA,EAAkB,KAC1B,EAAA,QAAA,kBAAA,GAAA,CAAC,YAAS,CACZ,EAAA,CAAA;AAAA;AAIJ,EAAI,IAAA,KAAA,IAAS,CAAC,QAAU,EAAA;AACtB,IACE,uBAAA,GAAA,CAAC,QAAS,EAAA,EAAA,OAAA,EAAkB,KAC1B,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,QAAS,EAAA,OAAA;AAAA,QACT,KAAA,EAAO,EAAE,8BAA8B,CAAA;AAAA,QACvC,OAAA,sBAAU,WAAY,EAAA,EAAA,IAAA,EAAM,GAAG,KAAK,CAAA,CAAA,EAAI,UAAS,MAAO,EAAA;AAAA;AAAA,KAE5D,EAAA,CAAA;AAAA;AAIJ,EACE,uBAAA,GAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,OAAA;AAAA,MACA,8BACG,IAAA,CAAA,KAAA,EAAA,EAAI,OAAO,EAAE,SAAA,EAAW,UACvB,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OACjB,EAAA,QAAA,EAAA,CAAA,CAAE,qCAAuC,EAAA;AAAA,UACxC,MAAQ,EAAA,MAAA,CAAO,IAAK,CAAA,iBAAA,CAAkB,OAAO;AAAA,SAC9C,CACH,EAAA,CAAA;AAAA,wBACA,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OAClB,EAAA,QAAA,kBAAA,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,EAAG,EAAA,iGAAA;AAAA,YACH,gBAAgB,EAAA,IAAA;AAAA,YAEf,YAAE,uBAAuB;AAAA;AAAA,SAE9B,EAAA;AAAA,OACF,EAAA,CAAA;AAAA,MAEF,OAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;;;;"}
@@ -13,21 +13,24 @@ import '../OpenApiDefinitionWidget/OpenApiDefinitionWidget.esm.js';
13
13
  import '@material-ui/core/styles';
14
14
  import { ApiTypeTitle } from '../ApiDefinitionCard/ApiTypeTitle.esm.js';
15
15
  import { ApiDefinitionDialog } from '../ApiDefinitionDialog/ApiDefinitionDialog.esm.js';
16
+ import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
17
+ import { apiDocsTranslationRef } from '../../translation.esm.js';
16
18
 
17
- function createSpecApiTypeColumn() {
19
+ function createSpecApiTypeColumn(t) {
18
20
  return {
19
- title: "Type",
21
+ title: t("apiEntityColumns.typeTitle"),
20
22
  field: "spec.type",
21
23
  render: (entity) => /* @__PURE__ */ jsx(ApiTypeTitle, { apiEntity: entity })
22
24
  };
23
25
  }
24
26
  const ApiDefinitionButton = ({ apiEntity }) => {
25
27
  const [dialogOpen, setDialogOpen] = useState(false);
28
+ const { t } = useTranslationRef(apiDocsTranslationRef);
26
29
  return /* @__PURE__ */ jsxs(Fragment, { children: [
27
30
  /* @__PURE__ */ jsx(
28
31
  ToggleButton,
29
32
  {
30
- "aria-label": "Toggle API Definition Dialog",
33
+ "aria-label": t("apiDefinitionDialog.toggleButtonAriaLabel"),
31
34
  onClick: () => setDialogOpen(!dialogOpen),
32
35
  value: dialogOpen,
33
36
  children: /* @__PURE__ */ jsx(ExtensionIcon, {})
@@ -43,21 +46,23 @@ const ApiDefinitionButton = ({ apiEntity }) => {
43
46
  )
44
47
  ] });
45
48
  };
46
- function createApiDefinitionColumn() {
49
+ function createApiDefinitionColumn(t) {
47
50
  return {
48
- title: "API Definition",
51
+ title: t("apiEntityColumns.apiDefinitionTitle"),
49
52
  render: (entity) => /* @__PURE__ */ jsx(ApiDefinitionButton, { apiEntity: entity })
50
53
  };
51
54
  }
52
- const apiEntityColumns = [
53
- EntityTable.columns.createEntityRefColumn({ defaultKind: "API" }),
54
- EntityTable.columns.createSystemColumn(),
55
- EntityTable.columns.createOwnerColumn(),
56
- createSpecApiTypeColumn(),
57
- EntityTable.columns.createSpecLifecycleColumn(),
58
- EntityTable.columns.createMetadataDescriptionColumn(),
59
- createApiDefinitionColumn()
60
- ];
55
+ const getApiEntityColumns = (t) => {
56
+ return [
57
+ EntityTable.columns.createEntityRefColumn({ defaultKind: "API" }),
58
+ EntityTable.columns.createSystemColumn(),
59
+ EntityTable.columns.createOwnerColumn(),
60
+ createSpecApiTypeColumn(t),
61
+ EntityTable.columns.createSpecLifecycleColumn(),
62
+ EntityTable.columns.createMetadataDescriptionColumn(),
63
+ createApiDefinitionColumn(t)
64
+ ];
65
+ };
61
66
 
62
- export { apiEntityColumns, createSpecApiTypeColumn };
67
+ export { createSpecApiTypeColumn, getApiEntityColumns };
63
68
  //# sourceMappingURL=presets.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"presets.esm.js","sources":["../../../src/components/ApisCards/presets.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\nimport { ApiEntity } from '@backstage/catalog-model';\nimport { TableColumn } from '@backstage/core-components';\nimport { EntityTable } from '@backstage/plugin-catalog-react';\nimport ExtensionIcon from '@material-ui/icons/Extension';\nimport ToggleButton from '@material-ui/lab/ToggleButton';\nimport { useState } from 'react';\nimport { ApiTypeTitle } from '../ApiDefinitionCard';\nimport { ApiDefinitionDialog } from '../ApiDefinitionDialog';\n\nexport function createSpecApiTypeColumn(): TableColumn<ApiEntity> {\n return {\n title: 'Type',\n field: 'spec.type',\n render: entity => <ApiTypeTitle apiEntity={entity} />,\n };\n}\n\nconst ApiDefinitionButton = ({ apiEntity }: { apiEntity: ApiEntity }) => {\n const [dialogOpen, setDialogOpen] = useState(false);\n return (\n <>\n <ToggleButton\n aria-label=\"Toggle API Definition Dialog\"\n onClick={() => setDialogOpen(!dialogOpen)}\n value={dialogOpen}\n >\n <ExtensionIcon />\n </ToggleButton>\n <ApiDefinitionDialog\n entity={apiEntity}\n open={dialogOpen}\n onClose={() => setDialogOpen(false)}\n />\n </>\n );\n};\n\nfunction createApiDefinitionColumn(): TableColumn<ApiEntity> {\n return {\n title: 'API Definition',\n render: entity => <ApiDefinitionButton apiEntity={entity} />,\n };\n}\n\nexport const apiEntityColumns: TableColumn<ApiEntity>[] = [\n EntityTable.columns.createEntityRefColumn({ defaultKind: 'API' }),\n EntityTable.columns.createSystemColumn(),\n EntityTable.columns.createOwnerColumn(),\n createSpecApiTypeColumn(),\n EntityTable.columns.createSpecLifecycleColumn(),\n EntityTable.columns.createMetadataDescriptionColumn(),\n createApiDefinitionColumn(),\n];\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAyBO,SAAS,uBAAkD,GAAA;AAChE,EAAO,OAAA;AAAA,IACL,KAAO,EAAA,MAAA;AAAA,IACP,KAAO,EAAA,WAAA;AAAA,IACP,MAAQ,EAAA,CAAA,MAAA,qBAAW,GAAA,CAAA,YAAA,EAAA,EAAa,WAAW,MAAQ,EAAA;AAAA,GACrD;AACF;AAEA,MAAM,mBAAsB,GAAA,CAAC,EAAE,SAAA,EAA0C,KAAA;AACvE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAClD,EAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,YAAW,EAAA,8BAAA;AAAA,QACX,OAAS,EAAA,MAAM,aAAc,CAAA,CAAC,UAAU,CAAA;AAAA,QACxC,KAAO,EAAA,UAAA;AAAA,QAEP,8BAAC,aAAc,EAAA,EAAA;AAAA;AAAA,KACjB;AAAA,oBACA,GAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,MAAQ,EAAA,SAAA;AAAA,QACR,IAAM,EAAA,UAAA;AAAA,QACN,OAAA,EAAS,MAAM,aAAA,CAAc,KAAK;AAAA;AAAA;AACpC,GACF,EAAA,CAAA;AAEJ,CAAA;AAEA,SAAS,yBAAoD,GAAA;AAC3D,EAAO,OAAA;AAAA,IACL,KAAO,EAAA,gBAAA;AAAA,IACP,MAAQ,EAAA,CAAA,MAAA,qBAAW,GAAA,CAAA,mBAAA,EAAA,EAAoB,WAAW,MAAQ,EAAA;AAAA,GAC5D;AACF;AAEO,MAAM,gBAA6C,GAAA;AAAA,EACxD,YAAY,OAAQ,CAAA,qBAAA,CAAsB,EAAE,WAAA,EAAa,OAAO,CAAA;AAAA,EAChE,WAAA,CAAY,QAAQ,kBAAmB,EAAA;AAAA,EACvC,WAAA,CAAY,QAAQ,iBAAkB,EAAA;AAAA,EACtC,uBAAwB,EAAA;AAAA,EACxB,WAAA,CAAY,QAAQ,yBAA0B,EAAA;AAAA,EAC9C,WAAA,CAAY,QAAQ,+BAAgC,EAAA;AAAA,EACpD,yBAA0B;AAC5B;;;;"}
1
+ {"version":3,"file":"presets.esm.js","sources":["../../../src/components/ApisCards/presets.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\nimport { ApiEntity } from '@backstage/catalog-model';\nimport { TableColumn } from '@backstage/core-components';\nimport { EntityTable } from '@backstage/plugin-catalog-react';\nimport ExtensionIcon from '@material-ui/icons/Extension';\nimport ToggleButton from '@material-ui/lab/ToggleButton';\nimport { useState } from 'react';\nimport { ApiTypeTitle } from '../ApiDefinitionCard';\nimport { ApiDefinitionDialog } from '../ApiDefinitionDialog';\nimport {\n TranslationFunction,\n useTranslationRef,\n} from '@backstage/core-plugin-api/alpha';\nimport { apiDocsTranslationRef } from '../../translation';\n\nexport function createSpecApiTypeColumn(\n t: TranslationFunction<typeof apiDocsTranslationRef.T>,\n): TableColumn<ApiEntity> {\n return {\n title: t('apiEntityColumns.typeTitle'),\n field: 'spec.type',\n render: entity => <ApiTypeTitle apiEntity={entity} />,\n };\n}\n\nconst ApiDefinitionButton = ({ apiEntity }: { apiEntity: ApiEntity }) => {\n const [dialogOpen, setDialogOpen] = useState(false);\n const { t } = useTranslationRef(apiDocsTranslationRef);\n return (\n <>\n <ToggleButton\n aria-label={t('apiDefinitionDialog.toggleButtonAriaLabel')}\n onClick={() => setDialogOpen(!dialogOpen)}\n value={dialogOpen}\n >\n <ExtensionIcon />\n </ToggleButton>\n <ApiDefinitionDialog\n entity={apiEntity}\n open={dialogOpen}\n onClose={() => setDialogOpen(false)}\n />\n </>\n );\n};\n\nfunction createApiDefinitionColumn(\n t: TranslationFunction<typeof apiDocsTranslationRef.T>,\n): TableColumn<ApiEntity> {\n return {\n title: t('apiEntityColumns.apiDefinitionTitle'),\n render: entity => <ApiDefinitionButton apiEntity={entity} />,\n };\n}\n\nexport const getApiEntityColumns = (\n t: TranslationFunction<typeof apiDocsTranslationRef.T>,\n): TableColumn<ApiEntity>[] => {\n return [\n EntityTable.columns.createEntityRefColumn({ defaultKind: 'API' }),\n EntityTable.columns.createSystemColumn(),\n EntityTable.columns.createOwnerColumn(),\n createSpecApiTypeColumn(t),\n EntityTable.columns.createSpecLifecycleColumn(),\n EntityTable.columns.createMetadataDescriptionColumn(),\n createApiDefinitionColumn(t),\n ];\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AA8BO,SAAS,wBACd,CACwB,EAAA;AACxB,EAAO,OAAA;AAAA,IACL,KAAA,EAAO,EAAE,4BAA4B,CAAA;AAAA,IACrC,KAAO,EAAA,WAAA;AAAA,IACP,MAAQ,EAAA,CAAA,MAAA,qBAAW,GAAA,CAAA,YAAA,EAAA,EAAa,WAAW,MAAQ,EAAA;AAAA,GACrD;AACF;AAEA,MAAM,mBAAsB,GAAA,CAAC,EAAE,SAAA,EAA0C,KAAA;AACvE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,qBAAqB,CAAA;AACrD,EAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,YAAA,EAAY,EAAE,2CAA2C,CAAA;AAAA,QACzD,OAAS,EAAA,MAAM,aAAc,CAAA,CAAC,UAAU,CAAA;AAAA,QACxC,KAAO,EAAA,UAAA;AAAA,QAEP,8BAAC,aAAc,EAAA,EAAA;AAAA;AAAA,KACjB;AAAA,oBACA,GAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,MAAQ,EAAA,SAAA;AAAA,QACR,IAAM,EAAA,UAAA;AAAA,QACN,OAAA,EAAS,MAAM,aAAA,CAAc,KAAK;AAAA;AAAA;AACpC,GACF,EAAA,CAAA;AAEJ,CAAA;AAEA,SAAS,0BACP,CACwB,EAAA;AACxB,EAAO,OAAA;AAAA,IACL,KAAA,EAAO,EAAE,qCAAqC,CAAA;AAAA,IAC9C,MAAQ,EAAA,CAAA,MAAA,qBAAW,GAAA,CAAA,mBAAA,EAAA,EAAoB,WAAW,MAAQ,EAAA;AAAA,GAC5D;AACF;AAEa,MAAA,mBAAA,GAAsB,CACjC,CAC6B,KAAA;AAC7B,EAAO,OAAA;AAAA,IACL,YAAY,OAAQ,CAAA,qBAAA,CAAsB,EAAE,WAAA,EAAa,OAAO,CAAA;AAAA,IAChE,WAAA,CAAY,QAAQ,kBAAmB,EAAA;AAAA,IACvC,WAAA,CAAY,QAAQ,iBAAkB,EAAA;AAAA,IACtC,wBAAwB,CAAC,CAAA;AAAA,IACzB,WAAA,CAAY,QAAQ,yBAA0B,EAAA;AAAA,IAC9C,WAAA,CAAY,QAAQ,+BAAgC,EAAA;AAAA,IACpD,0BAA0B,CAAC;AAAA,GAC7B;AACF;;;;"}
@@ -3,6 +3,8 @@ import { RELATION_API_CONSUMED_BY } from '@backstage/catalog-model';
3
3
  import Typography from '@material-ui/core/Typography';
4
4
  import { EntityTable, useEntity, useRelatedEntities } from '@backstage/plugin-catalog-react';
5
5
  import { InfoCard, Progress, WarningPanel, CodeSnippet, Link } from '@backstage/core-components';
6
+ import { useTranslationRef } from '@backstage/frontend-plugin-api';
7
+ import { apiDocsTranslationRef } from '../../translation.esm.js';
6
8
 
7
9
  const ConsumingComponentsCard = (props) => {
8
10
  const { variant = "gridItem", columns = EntityTable.componentEntityColumns } = props;
@@ -10,15 +12,16 @@ const ConsumingComponentsCard = (props) => {
10
12
  const { entities, loading, error } = useRelatedEntities(entity, {
11
13
  type: RELATION_API_CONSUMED_BY
12
14
  });
15
+ const { t } = useTranslationRef(apiDocsTranslationRef);
13
16
  if (loading) {
14
- return /* @__PURE__ */ jsx(InfoCard, { variant, title: "Consumers", children: /* @__PURE__ */ jsx(Progress, {}) });
17
+ return /* @__PURE__ */ jsx(InfoCard, { variant, title: t("consumingComponentsCard.title"), children: /* @__PURE__ */ jsx(Progress, {}) });
15
18
  }
16
19
  if (error || !entities) {
17
- return /* @__PURE__ */ jsx(InfoCard, { variant, title: "Consumers", children: /* @__PURE__ */ jsx(
20
+ return /* @__PURE__ */ jsx(InfoCard, { variant, title: t("consumingComponentsCard.title"), children: /* @__PURE__ */ jsx(
18
21
  WarningPanel,
19
22
  {
20
23
  severity: "error",
21
- title: "Could not load components",
24
+ title: t("consumingComponentsCard.error.title"),
22
25
  message: /* @__PURE__ */ jsx(CodeSnippet, { text: `${error}`, language: "text" })
23
26
  }
24
27
  ) });
@@ -26,11 +29,11 @@ const ConsumingComponentsCard = (props) => {
26
29
  return /* @__PURE__ */ jsx(
27
30
  EntityTable,
28
31
  {
29
- title: "Consumers",
32
+ title: t("consumingComponentsCard.title"),
30
33
  variant,
31
34
  emptyContent: /* @__PURE__ */ jsxs("div", { style: { textAlign: "center" }, children: [
32
- /* @__PURE__ */ jsx(Typography, { variant: "body1", children: "No component consumes this API." }),
33
- /* @__PURE__ */ jsx(Typography, { variant: "body2", children: /* @__PURE__ */ jsx(Link, { to: "https://backstage.io/docs/features/software-catalog/descriptor-format#specconsumesapis-optional", children: "Learn how to change this." }) })
35
+ /* @__PURE__ */ jsx(Typography, { variant: "body1", children: t("consumingComponentsCard.emptyContent.title") }),
36
+ /* @__PURE__ */ jsx(Typography, { variant: "body2", children: /* @__PURE__ */ jsx(Link, { to: "https://backstage.io/docs/features/software-catalog/descriptor-format#specconsumesapis-optional", children: t("apisCardHelpLinkTitle") }) })
34
37
  ] }),
35
38
  columns,
36
39
  entities
@@ -1 +1 @@
1
- {"version":3,"file":"ConsumingComponentsCard.esm.js","sources":["../../../src/components/ComponentsCards/ConsumingComponentsCard.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\nimport {\n ComponentEntity,\n RELATION_API_CONSUMED_BY,\n} from '@backstage/catalog-model';\nimport Typography from '@material-ui/core/Typography';\nimport {\n EntityTable,\n useEntity,\n useRelatedEntities,\n} from '@backstage/plugin-catalog-react';\nimport {\n CodeSnippet,\n InfoCard,\n InfoCardVariants,\n Link,\n Progress,\n TableColumn,\n WarningPanel,\n} from '@backstage/core-components';\n\n/**\n * @public\n */\nexport const ConsumingComponentsCard = (props: {\n variant?: InfoCardVariants;\n columns?: TableColumn<ComponentEntity>[];\n}) => {\n const { variant = 'gridItem', columns = EntityTable.componentEntityColumns } =\n props;\n const { entity } = useEntity();\n const { entities, loading, error } = useRelatedEntities(entity, {\n type: RELATION_API_CONSUMED_BY,\n });\n\n if (loading) {\n return (\n <InfoCard variant={variant} title=\"Consumers\">\n <Progress />\n </InfoCard>\n );\n }\n\n if (error || !entities) {\n return (\n <InfoCard variant={variant} title=\"Consumers\">\n <WarningPanel\n severity=\"error\"\n title=\"Could not load components\"\n message={<CodeSnippet text={`${error}`} language=\"text\" />}\n />\n </InfoCard>\n );\n }\n\n return (\n <EntityTable\n title=\"Consumers\"\n variant={variant}\n emptyContent={\n <div style={{ textAlign: 'center' }}>\n <Typography variant=\"body1\">\n No component consumes this API.\n </Typography>\n <Typography variant=\"body2\">\n <Link to=\"https://backstage.io/docs/features/software-catalog/descriptor-format#specconsumesapis-optional\">\n Learn how to change this.\n </Link>\n </Typography>\n </div>\n }\n columns={columns}\n entities={entities as ComponentEntity[]}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;AAuCa,MAAA,uBAAA,GAA0B,CAAC,KAGlC,KAAA;AACJ,EAAA,MAAM,EAAE,OAAU,GAAA,UAAA,EAAY,OAAU,GAAA,WAAA,CAAY,wBAClD,GAAA,KAAA;AACF,EAAM,MAAA,EAAE,MAAO,EAAA,GAAI,SAAU,EAAA;AAC7B,EAAA,MAAM,EAAE,QAAU,EAAA,OAAA,EAAS,KAAM,EAAA,GAAI,mBAAmB,MAAQ,EAAA;AAAA,IAC9D,IAAM,EAAA;AAAA,GACP,CAAA;AAED,EAAA,IAAI,OAAS,EAAA;AACX,IAAA,2BACG,QAAS,EAAA,EAAA,OAAA,EAAkB,OAAM,WAChC,EAAA,QAAA,kBAAA,GAAA,CAAC,YAAS,CACZ,EAAA,CAAA;AAAA;AAIJ,EAAI,IAAA,KAAA,IAAS,CAAC,QAAU,EAAA;AACtB,IAAA,uBACG,GAAA,CAAA,QAAA,EAAA,EAAS,OAAkB,EAAA,KAAA,EAAM,WAChC,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,QAAS,EAAA,OAAA;AAAA,QACT,KAAM,EAAA,2BAAA;AAAA,QACN,OAAA,sBAAU,WAAY,EAAA,EAAA,IAAA,EAAM,GAAG,KAAK,CAAA,CAAA,EAAI,UAAS,MAAO,EAAA;AAAA;AAAA,KAE5D,EAAA,CAAA;AAAA;AAIJ,EACE,uBAAA,GAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,KAAM,EAAA,WAAA;AAAA,MACN,OAAA;AAAA,MACA,8BACG,IAAA,CAAA,KAAA,EAAA,EAAI,OAAO,EAAE,SAAA,EAAW,UACvB,EAAA,QAAA,EAAA;AAAA,wBAAC,GAAA,CAAA,UAAA,EAAA,EAAW,OAAQ,EAAA,OAAA,EAAQ,QAE5B,EAAA,iCAAA,EAAA,CAAA;AAAA,wBACA,GAAA,CAAC,cAAW,OAAQ,EAAA,OAAA,EAClB,8BAAC,IAAK,EAAA,EAAA,EAAA,EAAG,iGAAkG,EAAA,QAAA,EAAA,2BAAA,EAE3G,CACF,EAAA;AAAA,OACF,EAAA,CAAA;AAAA,MAEF,OAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;;;;"}
1
+ {"version":3,"file":"ConsumingComponentsCard.esm.js","sources":["../../../src/components/ComponentsCards/ConsumingComponentsCard.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\nimport {\n ComponentEntity,\n RELATION_API_CONSUMED_BY,\n} from '@backstage/catalog-model';\nimport Typography from '@material-ui/core/Typography';\nimport {\n EntityTable,\n useEntity,\n useRelatedEntities,\n} from '@backstage/plugin-catalog-react';\nimport {\n CodeSnippet,\n InfoCard,\n InfoCardVariants,\n Link,\n Progress,\n TableColumn,\n WarningPanel,\n} from '@backstage/core-components';\nimport { useTranslationRef } from '@backstage/frontend-plugin-api';\nimport { apiDocsTranslationRef } from '../../translation';\n\n/**\n * @public\n */\nexport const ConsumingComponentsCard = (props: {\n variant?: InfoCardVariants;\n columns?: TableColumn<ComponentEntity>[];\n}) => {\n const { variant = 'gridItem', columns = EntityTable.componentEntityColumns } =\n props;\n const { entity } = useEntity();\n const { entities, loading, error } = useRelatedEntities(entity, {\n type: RELATION_API_CONSUMED_BY,\n });\n const { t } = useTranslationRef(apiDocsTranslationRef);\n\n if (loading) {\n return (\n <InfoCard variant={variant} title={t('consumingComponentsCard.title')}>\n <Progress />\n </InfoCard>\n );\n }\n\n if (error || !entities) {\n return (\n <InfoCard variant={variant} title={t('consumingComponentsCard.title')}>\n <WarningPanel\n severity=\"error\"\n title={t('consumingComponentsCard.error.title')}\n message={<CodeSnippet text={`${error}`} language=\"text\" />}\n />\n </InfoCard>\n );\n }\n\n return (\n <EntityTable\n title={t('consumingComponentsCard.title')}\n variant={variant}\n emptyContent={\n <div style={{ textAlign: 'center' }}>\n <Typography variant=\"body1\">\n {t('consumingComponentsCard.emptyContent.title')}\n </Typography>\n <Typography variant=\"body2\">\n <Link to=\"https://backstage.io/docs/features/software-catalog/descriptor-format#specconsumesapis-optional\">\n {t('apisCardHelpLinkTitle')}\n </Link>\n </Typography>\n </div>\n }\n columns={columns}\n entities={entities as ComponentEntity[]}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAyCa,MAAA,uBAAA,GAA0B,CAAC,KAGlC,KAAA;AACJ,EAAA,MAAM,EAAE,OAAU,GAAA,UAAA,EAAY,OAAU,GAAA,WAAA,CAAY,wBAClD,GAAA,KAAA;AACF,EAAM,MAAA,EAAE,MAAO,EAAA,GAAI,SAAU,EAAA;AAC7B,EAAA,MAAM,EAAE,QAAU,EAAA,OAAA,EAAS,KAAM,EAAA,GAAI,mBAAmB,MAAQ,EAAA;AAAA,IAC9D,IAAM,EAAA;AAAA,GACP,CAAA;AACD,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,qBAAqB,CAAA;AAErD,EAAA,IAAI,OAAS,EAAA;AACX,IACE,uBAAA,GAAA,CAAC,YAAS,OAAkB,EAAA,KAAA,EAAO,EAAE,+BAA+B,CAAA,EAClE,QAAC,kBAAA,GAAA,CAAA,QAAA,EAAA,EAAS,CACZ,EAAA,CAAA;AAAA;AAIJ,EAAI,IAAA,KAAA,IAAS,CAAC,QAAU,EAAA;AACtB,IAAA,2BACG,QAAS,EAAA,EAAA,OAAA,EAAkB,KAAO,EAAA,CAAA,CAAE,+BAA+B,CAClE,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,QAAS,EAAA,OAAA;AAAA,QACT,KAAA,EAAO,EAAE,qCAAqC,CAAA;AAAA,QAC9C,OAAA,sBAAU,WAAY,EAAA,EAAA,IAAA,EAAM,GAAG,KAAK,CAAA,CAAA,EAAI,UAAS,MAAO,EAAA;AAAA;AAAA,KAE5D,EAAA,CAAA;AAAA;AAIJ,EACE,uBAAA,GAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,EAAE,+BAA+B,CAAA;AAAA,MACxC,OAAA;AAAA,MACA,8BACG,IAAA,CAAA,KAAA,EAAA,EAAI,OAAO,EAAE,SAAA,EAAW,UACvB,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OACjB,EAAA,QAAA,EAAA,CAAA,CAAE,4CAA4C,CACjD,EAAA,CAAA;AAAA,wBACA,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OAClB,EAAA,QAAA,kBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,EAAA,EAAG,iGACN,EAAA,QAAA,EAAA,CAAA,CAAE,uBAAuB,CAAA,EAC5B,CACF,EAAA;AAAA,OACF,EAAA,CAAA;AAAA,MAEF,OAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;;;;"}
@@ -3,6 +3,8 @@ import { RELATION_API_PROVIDED_BY } from '@backstage/catalog-model';
3
3
  import Typography from '@material-ui/core/Typography';
4
4
  import { EntityTable, useEntity, useRelatedEntities } from '@backstage/plugin-catalog-react';
5
5
  import { InfoCard, Progress, WarningPanel, CodeSnippet, Link } from '@backstage/core-components';
6
+ import { useTranslationRef } from '@backstage/frontend-plugin-api';
7
+ import { apiDocsTranslationRef } from '../../translation.esm.js';
6
8
 
7
9
  const ProvidingComponentsCard = (props) => {
8
10
  const { variant = "gridItem", columns = EntityTable.componentEntityColumns } = props;
@@ -10,15 +12,16 @@ const ProvidingComponentsCard = (props) => {
10
12
  const { entities, loading, error } = useRelatedEntities(entity, {
11
13
  type: RELATION_API_PROVIDED_BY
12
14
  });
15
+ const { t } = useTranslationRef(apiDocsTranslationRef);
13
16
  if (loading) {
14
- return /* @__PURE__ */ jsx(InfoCard, { variant, title: "Providers", children: /* @__PURE__ */ jsx(Progress, {}) });
17
+ return /* @__PURE__ */ jsx(InfoCard, { variant, title: t("providingComponentsCard.title"), children: /* @__PURE__ */ jsx(Progress, {}) });
15
18
  }
16
19
  if (error || !entities) {
17
- return /* @__PURE__ */ jsx(InfoCard, { variant, title: "Providers", children: /* @__PURE__ */ jsx(
20
+ return /* @__PURE__ */ jsx(InfoCard, { variant, title: t("providingComponentsCard.title"), children: /* @__PURE__ */ jsx(
18
21
  WarningPanel,
19
22
  {
20
23
  severity: "error",
21
- title: "Could not load components",
24
+ title: t("providingComponentsCard.error.title"),
22
25
  message: /* @__PURE__ */ jsx(CodeSnippet, { text: `${error}`, language: "text" })
23
26
  }
24
27
  ) });
@@ -26,11 +29,11 @@ const ProvidingComponentsCard = (props) => {
26
29
  return /* @__PURE__ */ jsx(
27
30
  EntityTable,
28
31
  {
29
- title: "Providers",
32
+ title: t("providingComponentsCard.title"),
30
33
  variant,
31
34
  emptyContent: /* @__PURE__ */ jsxs("div", { style: { textAlign: "center" }, children: [
32
- /* @__PURE__ */ jsx(Typography, { variant: "body1", children: "No component provides this API." }),
33
- /* @__PURE__ */ jsx(Typography, { variant: "body2", children: /* @__PURE__ */ jsx(Link, { to: "https://backstage.io/docs/features/software-catalog/descriptor-format#specprovidesapis-optional", children: "Learn how to change this." }) })
35
+ /* @__PURE__ */ jsx(Typography, { variant: "body1", children: t("providingComponentsCard.emptyContent.title") }),
36
+ /* @__PURE__ */ jsx(Typography, { variant: "body2", children: /* @__PURE__ */ jsx(Link, { to: "https://backstage.io/docs/features/software-catalog/descriptor-format#specprovidesapis-optional", children: t("apisCardHelpLinkTitle") }) })
34
37
  ] }),
35
38
  columns,
36
39
  entities
@@ -1 +1 @@
1
- {"version":3,"file":"ProvidingComponentsCard.esm.js","sources":["../../../src/components/ComponentsCards/ProvidingComponentsCard.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\nimport {\n ComponentEntity,\n RELATION_API_PROVIDED_BY,\n} from '@backstage/catalog-model';\nimport Typography from '@material-ui/core/Typography';\nimport {\n EntityTable,\n useEntity,\n useRelatedEntities,\n} from '@backstage/plugin-catalog-react';\nimport {\n CodeSnippet,\n InfoCard,\n InfoCardVariants,\n Link,\n Progress,\n TableColumn,\n WarningPanel,\n} from '@backstage/core-components';\n\n/** @public */\nexport const ProvidingComponentsCard = (props: {\n variant?: InfoCardVariants;\n columns?: TableColumn<ComponentEntity>[];\n}) => {\n const { variant = 'gridItem', columns = EntityTable.componentEntityColumns } =\n props;\n const { entity } = useEntity();\n const { entities, loading, error } = useRelatedEntities(entity, {\n type: RELATION_API_PROVIDED_BY,\n });\n\n if (loading) {\n return (\n <InfoCard variant={variant} title=\"Providers\">\n <Progress />\n </InfoCard>\n );\n }\n\n if (error || !entities) {\n return (\n <InfoCard variant={variant} title=\"Providers\">\n <WarningPanel\n severity=\"error\"\n title=\"Could not load components\"\n message={<CodeSnippet text={`${error}`} language=\"text\" />}\n />\n </InfoCard>\n );\n }\n\n return (\n <EntityTable\n title=\"Providers\"\n variant={variant}\n emptyContent={\n <div style={{ textAlign: 'center' }}>\n <Typography variant=\"body1\">\n No component provides this API.\n </Typography>\n <Typography variant=\"body2\">\n <Link to=\"https://backstage.io/docs/features/software-catalog/descriptor-format#specprovidesapis-optional\">\n Learn how to change this.\n </Link>\n </Typography>\n </div>\n }\n columns={columns}\n entities={entities as ComponentEntity[]}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;AAqCa,MAAA,uBAAA,GAA0B,CAAC,KAGlC,KAAA;AACJ,EAAA,MAAM,EAAE,OAAU,GAAA,UAAA,EAAY,OAAU,GAAA,WAAA,CAAY,wBAClD,GAAA,KAAA;AACF,EAAM,MAAA,EAAE,MAAO,EAAA,GAAI,SAAU,EAAA;AAC7B,EAAA,MAAM,EAAE,QAAU,EAAA,OAAA,EAAS,KAAM,EAAA,GAAI,mBAAmB,MAAQ,EAAA;AAAA,IAC9D,IAAM,EAAA;AAAA,GACP,CAAA;AAED,EAAA,IAAI,OAAS,EAAA;AACX,IAAA,2BACG,QAAS,EAAA,EAAA,OAAA,EAAkB,OAAM,WAChC,EAAA,QAAA,kBAAA,GAAA,CAAC,YAAS,CACZ,EAAA,CAAA;AAAA;AAIJ,EAAI,IAAA,KAAA,IAAS,CAAC,QAAU,EAAA;AACtB,IAAA,uBACG,GAAA,CAAA,QAAA,EAAA,EAAS,OAAkB,EAAA,KAAA,EAAM,WAChC,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,QAAS,EAAA,OAAA;AAAA,QACT,KAAM,EAAA,2BAAA;AAAA,QACN,OAAA,sBAAU,WAAY,EAAA,EAAA,IAAA,EAAM,GAAG,KAAK,CAAA,CAAA,EAAI,UAAS,MAAO,EAAA;AAAA;AAAA,KAE5D,EAAA,CAAA;AAAA;AAIJ,EACE,uBAAA,GAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,KAAM,EAAA,WAAA;AAAA,MACN,OAAA;AAAA,MACA,8BACG,IAAA,CAAA,KAAA,EAAA,EAAI,OAAO,EAAE,SAAA,EAAW,UACvB,EAAA,QAAA,EAAA;AAAA,wBAAC,GAAA,CAAA,UAAA,EAAA,EAAW,OAAQ,EAAA,OAAA,EAAQ,QAE5B,EAAA,iCAAA,EAAA,CAAA;AAAA,wBACA,GAAA,CAAC,cAAW,OAAQ,EAAA,OAAA,EAClB,8BAAC,IAAK,EAAA,EAAA,EAAA,EAAG,iGAAkG,EAAA,QAAA,EAAA,2BAAA,EAE3G,CACF,EAAA;AAAA,OACF,EAAA,CAAA;AAAA,MAEF,OAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;;;;"}
1
+ {"version":3,"file":"ProvidingComponentsCard.esm.js","sources":["../../../src/components/ComponentsCards/ProvidingComponentsCard.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\nimport {\n ComponentEntity,\n RELATION_API_PROVIDED_BY,\n} from '@backstage/catalog-model';\nimport Typography from '@material-ui/core/Typography';\nimport {\n EntityTable,\n useEntity,\n useRelatedEntities,\n} from '@backstage/plugin-catalog-react';\nimport {\n CodeSnippet,\n InfoCard,\n InfoCardVariants,\n Link,\n Progress,\n TableColumn,\n WarningPanel,\n} from '@backstage/core-components';\nimport { useTranslationRef } from '@backstage/frontend-plugin-api';\nimport { apiDocsTranslationRef } from '../../translation';\n\n/** @public */\nexport const ProvidingComponentsCard = (props: {\n variant?: InfoCardVariants;\n columns?: TableColumn<ComponentEntity>[];\n}) => {\n const { variant = 'gridItem', columns = EntityTable.componentEntityColumns } =\n props;\n const { entity } = useEntity();\n const { entities, loading, error } = useRelatedEntities(entity, {\n type: RELATION_API_PROVIDED_BY,\n });\n const { t } = useTranslationRef(apiDocsTranslationRef);\n\n if (loading) {\n return (\n <InfoCard variant={variant} title={t('providingComponentsCard.title')}>\n <Progress />\n </InfoCard>\n );\n }\n\n if (error || !entities) {\n return (\n <InfoCard variant={variant} title={t('providingComponentsCard.title')}>\n <WarningPanel\n severity=\"error\"\n title={t('providingComponentsCard.error.title')}\n message={<CodeSnippet text={`${error}`} language=\"text\" />}\n />\n </InfoCard>\n );\n }\n\n return (\n <EntityTable\n title={t('providingComponentsCard.title')}\n variant={variant}\n emptyContent={\n <div style={{ textAlign: 'center' }}>\n <Typography variant=\"body1\">\n {t('providingComponentsCard.emptyContent.title')}\n </Typography>\n <Typography variant=\"body2\">\n <Link to=\"https://backstage.io/docs/features/software-catalog/descriptor-format#specprovidesapis-optional\">\n {t('apisCardHelpLinkTitle')}\n </Link>\n </Typography>\n </div>\n }\n columns={columns}\n entities={entities as ComponentEntity[]}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAuCa,MAAA,uBAAA,GAA0B,CAAC,KAGlC,KAAA;AACJ,EAAA,MAAM,EAAE,OAAU,GAAA,UAAA,EAAY,OAAU,GAAA,WAAA,CAAY,wBAClD,GAAA,KAAA;AACF,EAAM,MAAA,EAAE,MAAO,EAAA,GAAI,SAAU,EAAA;AAC7B,EAAA,MAAM,EAAE,QAAU,EAAA,OAAA,EAAS,KAAM,EAAA,GAAI,mBAAmB,MAAQ,EAAA;AAAA,IAC9D,IAAM,EAAA;AAAA,GACP,CAAA;AACD,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,qBAAqB,CAAA;AAErD,EAAA,IAAI,OAAS,EAAA;AACX,IACE,uBAAA,GAAA,CAAC,YAAS,OAAkB,EAAA,KAAA,EAAO,EAAE,+BAA+B,CAAA,EAClE,QAAC,kBAAA,GAAA,CAAA,QAAA,EAAA,EAAS,CACZ,EAAA,CAAA;AAAA;AAIJ,EAAI,IAAA,KAAA,IAAS,CAAC,QAAU,EAAA;AACtB,IAAA,2BACG,QAAS,EAAA,EAAA,OAAA,EAAkB,KAAO,EAAA,CAAA,CAAE,+BAA+B,CAClE,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,QAAS,EAAA,OAAA;AAAA,QACT,KAAA,EAAO,EAAE,qCAAqC,CAAA;AAAA,QAC9C,OAAA,sBAAU,WAAY,EAAA,EAAA,IAAA,EAAM,GAAG,KAAK,CAAA,CAAA,EAAI,UAAS,MAAO,EAAA;AAAA;AAAA,KAE5D,EAAA,CAAA;AAAA;AAIJ,EACE,uBAAA,GAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,EAAE,+BAA+B,CAAA;AAAA,MACxC,OAAA;AAAA,MACA,8BACG,IAAA,CAAA,KAAA,EAAA,EAAI,OAAO,EAAE,SAAA,EAAW,UACvB,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OACjB,EAAA,QAAA,EAAA,CAAA,CAAE,4CAA4C,CACjD,EAAA,CAAA;AAAA,wBACA,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OAClB,EAAA,QAAA,kBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,EAAA,EAAG,iGACN,EAAA,QAAA,EAAA,CAAA,CAAE,uBAAuB,CAAA,EAC5B,CACF,EAAA;AAAA,OACF,EAAA,CAAA;AAAA,MAEF,OAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;;;;"}
@@ -0,0 +1,72 @@
1
+ import { createTranslationRef } from '@backstage/frontend-plugin-api';
2
+
3
+ const apiDocsTranslationRef = createTranslationRef({
4
+ id: "api-docs",
5
+ messages: {
6
+ apiDefinitionDialog: {
7
+ closeButtonTitle: "Close",
8
+ tabsAriaLabel: "API definition options",
9
+ toggleButtonAriaLabel: "Toggle API Definition Dialog"
10
+ },
11
+ defaultApiExplorerPage: {
12
+ title: "APIs",
13
+ subtitle: "{{orgName}} API Explorer",
14
+ pageTitleOverride: "APIs",
15
+ createButtonTitle: "Register Existing API",
16
+ supportButtonTitle: "All your APIs"
17
+ },
18
+ consumedApisCard: {
19
+ title: "Consumed APIs",
20
+ error: {
21
+ title: "Could not load APIs"
22
+ },
23
+ emptyContent: {
24
+ title: "This {{entity}} does not consume any APIs."
25
+ }
26
+ },
27
+ hasApisCard: {
28
+ title: "APIs",
29
+ error: {
30
+ title: "Could not load APIs"
31
+ },
32
+ emptyContent: {
33
+ title: "This {{entity}} does not contain any APIs."
34
+ }
35
+ },
36
+ providedApisCard: {
37
+ title: "Provided APIs",
38
+ error: {
39
+ title: "Could not load APIs"
40
+ },
41
+ emptyContent: {
42
+ title: "This {{entity}} does not provide any APIs."
43
+ }
44
+ },
45
+ apiEntityColumns: {
46
+ typeTitle: "Type",
47
+ apiDefinitionTitle: "API Definition"
48
+ },
49
+ consumingComponentsCard: {
50
+ title: "Consumers",
51
+ error: {
52
+ title: "Could not load components"
53
+ },
54
+ emptyContent: {
55
+ title: "No component consumes this API."
56
+ }
57
+ },
58
+ providingComponentsCard: {
59
+ title: "Providers",
60
+ error: {
61
+ title: "Could not load components"
62
+ },
63
+ emptyContent: {
64
+ title: "No component provides this API."
65
+ }
66
+ },
67
+ apisCardHelpLinkTitle: "Learn how to change this"
68
+ }
69
+ });
70
+
71
+ export { apiDocsTranslationRef };
72
+ //# sourceMappingURL=translation.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translation.esm.js","sources":["../src/translation.ts"],"sourcesContent":["/*\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 { createTranslationRef } from '@backstage/frontend-plugin-api';\n\n/**\n * @alpha\n */\nexport const apiDocsTranslationRef = createTranslationRef({\n id: 'api-docs',\n messages: {\n apiDefinitionDialog: {\n closeButtonTitle: 'Close',\n tabsAriaLabel: 'API definition options',\n toggleButtonAriaLabel: 'Toggle API Definition Dialog',\n },\n defaultApiExplorerPage: {\n title: 'APIs',\n subtitle: '{{orgName}} API Explorer',\n pageTitleOverride: 'APIs',\n createButtonTitle: 'Register Existing API',\n supportButtonTitle: 'All your APIs',\n },\n consumedApisCard: {\n title: 'Consumed APIs',\n error: {\n title: 'Could not load APIs',\n },\n emptyContent: {\n title: 'This {{entity}} does not consume any APIs.',\n },\n },\n hasApisCard: {\n title: 'APIs',\n error: {\n title: 'Could not load APIs',\n },\n emptyContent: {\n title: 'This {{entity}} does not contain any APIs.',\n },\n },\n providedApisCard: {\n title: 'Provided APIs',\n error: {\n title: 'Could not load APIs',\n },\n emptyContent: {\n title: 'This {{entity}} does not provide any APIs.',\n },\n },\n apiEntityColumns: {\n typeTitle: 'Type',\n apiDefinitionTitle: 'API Definition',\n },\n consumingComponentsCard: {\n title: 'Consumers',\n error: {\n title: 'Could not load components',\n },\n emptyContent: {\n title: 'No component consumes this API.',\n },\n },\n providingComponentsCard: {\n title: 'Providers',\n error: {\n title: 'Could not load components',\n },\n emptyContent: {\n title: 'No component provides this API.',\n },\n },\n apisCardHelpLinkTitle: 'Learn how to change this',\n },\n});\n"],"names":[],"mappings":";;AAqBO,MAAM,wBAAwB,oBAAqB,CAAA;AAAA,EACxD,EAAI,EAAA,UAAA;AAAA,EACJ,QAAU,EAAA;AAAA,IACR,mBAAqB,EAAA;AAAA,MACnB,gBAAkB,EAAA,OAAA;AAAA,MAClB,aAAe,EAAA,wBAAA;AAAA,MACf,qBAAuB,EAAA;AAAA,KACzB;AAAA,IACA,sBAAwB,EAAA;AAAA,MACtB,KAAO,EAAA,MAAA;AAAA,MACP,QAAU,EAAA,0BAAA;AAAA,MACV,iBAAmB,EAAA,MAAA;AAAA,MACnB,iBAAmB,EAAA,uBAAA;AAAA,MACnB,kBAAoB,EAAA;AAAA,KACtB;AAAA,IACA,gBAAkB,EAAA;AAAA,MAChB,KAAO,EAAA,eAAA;AAAA,MACP,KAAO,EAAA;AAAA,QACL,KAAO,EAAA;AAAA,OACT;AAAA,MACA,YAAc,EAAA;AAAA,QACZ,KAAO,EAAA;AAAA;AACT,KACF;AAAA,IACA,WAAa,EAAA;AAAA,MACX,KAAO,EAAA,MAAA;AAAA,MACP,KAAO,EAAA;AAAA,QACL,KAAO,EAAA;AAAA,OACT;AAAA,MACA,YAAc,EAAA;AAAA,QACZ,KAAO,EAAA;AAAA;AACT,KACF;AAAA,IACA,gBAAkB,EAAA;AAAA,MAChB,KAAO,EAAA,eAAA;AAAA,MACP,KAAO,EAAA;AAAA,QACL,KAAO,EAAA;AAAA,OACT;AAAA,MACA,YAAc,EAAA;AAAA,QACZ,KAAO,EAAA;AAAA;AACT,KACF;AAAA,IACA,gBAAkB,EAAA;AAAA,MAChB,SAAW,EAAA,MAAA;AAAA,MACX,kBAAoB,EAAA;AAAA,KACtB;AAAA,IACA,uBAAyB,EAAA;AAAA,MACvB,KAAO,EAAA,WAAA;AAAA,MACP,KAAO,EAAA;AAAA,QACL,KAAO,EAAA;AAAA,OACT;AAAA,MACA,YAAc,EAAA;AAAA,QACZ,KAAO,EAAA;AAAA;AACT,KACF;AAAA,IACA,uBAAyB,EAAA;AAAA,MACvB,KAAO,EAAA,WAAA;AAAA,MACP,KAAO,EAAA;AAAA,QACL,KAAO,EAAA;AAAA,OACT;AAAA,MACA,YAAc,EAAA;AAAA,QACZ,KAAO,EAAA;AAAA;AACT,KACF;AAAA,IACA,qBAAuB,EAAA;AAAA;AAE3B,CAAC;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-api-docs",
3
- "version": "0.12.6-next.2",
3
+ "version": "0.12.6",
4
4
  "description": "A Backstage plugin that helps represent API entities in the frontend",
5
5
  "backstage": {
6
6
  "role": "frontend-plugin",
@@ -66,15 +66,15 @@
66
66
  },
67
67
  "dependencies": {
68
68
  "@asyncapi/react-component": "^2.3.3",
69
- "@backstage/catalog-model": "1.7.3",
70
- "@backstage/core-compat-api": "0.4.1-next.2",
71
- "@backstage/core-components": "0.17.1-next.1",
72
- "@backstage/core-plugin-api": "1.10.6-next.0",
73
- "@backstage/frontend-plugin-api": "0.10.1-next.1",
74
- "@backstage/plugin-catalog": "1.29.0-next.2",
75
- "@backstage/plugin-catalog-common": "1.1.3",
76
- "@backstage/plugin-catalog-react": "1.17.0-next.2",
77
- "@backstage/plugin-permission-react": "0.4.33-next.0",
69
+ "@backstage/catalog-model": "^1.7.3",
70
+ "@backstage/core-compat-api": "^0.4.1",
71
+ "@backstage/core-components": "^0.17.1",
72
+ "@backstage/core-plugin-api": "^1.10.6",
73
+ "@backstage/frontend-plugin-api": "^0.10.1",
74
+ "@backstage/plugin-catalog": "^1.29.0",
75
+ "@backstage/plugin-catalog-common": "^1.1.3",
76
+ "@backstage/plugin-catalog-react": "^1.17.0",
77
+ "@backstage/plugin-permission-react": "^0.4.33",
78
78
  "@graphiql/react": "^0.23.0",
79
79
  "@material-ui/core": "^4.12.2",
80
80
  "@material-ui/icons": "^4.9.1",
@@ -87,10 +87,10 @@
87
87
  "swagger-ui-react": "^5.0.0"
88
88
  },
89
89
  "devDependencies": {
90
- "@backstage/cli": "0.32.0-next.2",
91
- "@backstage/core-app-api": "1.16.1-next.0",
92
- "@backstage/dev-utils": "1.1.9-next.2",
93
- "@backstage/test-utils": "1.7.7-next.0",
90
+ "@backstage/cli": "^0.32.0",
91
+ "@backstage/core-app-api": "^1.16.1",
92
+ "@backstage/dev-utils": "^1.1.9",
93
+ "@backstage/test-utils": "^1.7.7",
94
94
  "@testing-library/dom": "^10.0.0",
95
95
  "@testing-library/jest-dom": "^6.0.0",
96
96
  "@testing-library/react": "^16.0.0",