@backstage/plugin-techdocs 1.1.1-next.0 → 1.1.1-next.3
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 +41 -0
- package/dist/esm/{TechDocsCustomHome-7836f59f.esm.js → TechDocsCustomHome-b77adc6d.esm.js} +3 -3
- package/dist/esm/{TechDocsCustomHome-7836f59f.esm.js.map → TechDocsCustomHome-b77adc6d.esm.js.map} +1 -1
- package/dist/esm/{index-28e41621.esm.js → index-52f21300.esm.js} +3 -3
- package/dist/esm/index-52f21300.esm.js.map +1 -0
- package/dist/esm/{index-3d3f8718.esm.js → index-c537b1f3.esm.js} +71 -26
- package/dist/esm/index-c537b1f3.esm.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.esm.js +2 -2
- package/package.json +16 -16
- package/dist/esm/index-28e41621.esm.js.map +0 -1
- package/dist/esm/index-3d3f8718.esm.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,46 @@
|
|
|
1
1
|
# @backstage/plugin-techdocs
|
|
2
2
|
|
|
3
|
+
## 1.1.1-next.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- cc8ddd0979: revert dependency `event-source-polyfill` to `1.0.25`
|
|
8
|
+
- Updated dependencies
|
|
9
|
+
- @backstage/core-components@0.9.4-next.2
|
|
10
|
+
|
|
11
|
+
## 1.1.1-next.2
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- 52419be116: Create a menu in the sub header of documentation pages, it is responsible for rendering TechDocs addons that allow users to customize their reading experience.
|
|
16
|
+
- 1af133f779: Updated dependency `event-source-polyfill` to `1.0.26`.
|
|
17
|
+
- 2dcb2c9678: Loading SVGs correctly with `bota` with extended characters
|
|
18
|
+
- 3a74e203a8: Updated search result components to support rendering content with highlighted matched terms
|
|
19
|
+
- Updated dependencies
|
|
20
|
+
- @backstage/core-components@0.9.4-next.1
|
|
21
|
+
- @backstage/plugin-techdocs-react@0.1.1-next.2
|
|
22
|
+
- @backstage/config@1.0.1-next.0
|
|
23
|
+
- @backstage/plugin-search-react@0.2.0-next.2
|
|
24
|
+
- @backstage/plugin-search-common@0.3.4-next.0
|
|
25
|
+
- @backstage/plugin-catalog-react@1.1.0-next.2
|
|
26
|
+
- @backstage/catalog-model@1.0.2-next.0
|
|
27
|
+
- @backstage/core-plugin-api@1.0.2-next.1
|
|
28
|
+
- @backstage/integration@1.2.0-next.1
|
|
29
|
+
- @backstage/integration-react@1.1.0-next.2
|
|
30
|
+
|
|
31
|
+
## 1.1.1-next.1
|
|
32
|
+
|
|
33
|
+
### Patch Changes
|
|
34
|
+
|
|
35
|
+
- 52fddad92d: The `TechDocsStorageApi` and its associated ref are now exported by `@backstage/plugin-techdocs-react`. The API interface, ref, and types are now deprecated in `@backstage/plugin-techdocs` and will be removed in a future release.
|
|
36
|
+
- Updated dependencies
|
|
37
|
+
- @backstage/core-components@0.9.4-next.0
|
|
38
|
+
- @backstage/core-plugin-api@1.0.2-next.0
|
|
39
|
+
- @backstage/plugin-catalog-react@1.1.0-next.1
|
|
40
|
+
- @backstage/plugin-search-react@0.2.0-next.1
|
|
41
|
+
- @backstage/plugin-techdocs-react@0.1.1-next.1
|
|
42
|
+
- @backstage/integration-react@1.1.0-next.1
|
|
43
|
+
|
|
3
44
|
## 1.1.1-next.0
|
|
4
45
|
|
|
5
46
|
### Patch Changes
|
|
@@ -2,7 +2,7 @@ import React, { useState } from 'react';
|
|
|
2
2
|
import useAsync from 'react-use/lib/useAsync';
|
|
3
3
|
import { makeStyles } from '@material-ui/core';
|
|
4
4
|
import { catalogApiRef, CATALOG_FILTER_EXISTS, useEntityOwnership } from '@backstage/plugin-catalog-react';
|
|
5
|
-
import { T as TechDocsPageWrapper, D as DocsTable, a as DocsCardGrid } from './index-
|
|
5
|
+
import { T as TechDocsPageWrapper, D as DocsTable, a as DocsCardGrid } from './index-c537b1f3.esm.js';
|
|
6
6
|
import { Content, Progress, WarningPanel, CodeSnippet, HeaderTabs, ContentHeader, SupportButton } from '@backstage/core-components';
|
|
7
7
|
import { useApi } from '@backstage/core-plugin-api';
|
|
8
8
|
import '@backstage/errors';
|
|
@@ -11,7 +11,6 @@ import 'react-router-dom';
|
|
|
11
11
|
import '@backstage/plugin-techdocs-react';
|
|
12
12
|
import 'jss';
|
|
13
13
|
import '@material-ui/styles';
|
|
14
|
-
import 'react-text-truncate';
|
|
15
14
|
import '@backstage/plugin-search-react';
|
|
16
15
|
import '@material-ui/icons/Search';
|
|
17
16
|
import '@material-ui/lab/Autocomplete';
|
|
@@ -31,6 +30,7 @@ import 'dompurify';
|
|
|
31
30
|
import 'react-helmet';
|
|
32
31
|
import '@material-ui/icons/Code';
|
|
33
32
|
import '@backstage/catalog-model';
|
|
33
|
+
import '@material-ui/icons/Settings';
|
|
34
34
|
import 'react-use/lib/useCopyToClipboard';
|
|
35
35
|
import 'lodash';
|
|
36
36
|
import '@material-ui/icons/Share';
|
|
@@ -132,4 +132,4 @@ const TechDocsCustomHome = (props) => {
|
|
|
132
132
|
};
|
|
133
133
|
|
|
134
134
|
export { TechDocsCustomHome };
|
|
135
|
-
//# sourceMappingURL=TechDocsCustomHome-
|
|
135
|
+
//# sourceMappingURL=TechDocsCustomHome-b77adc6d.esm.js.map
|
package/dist/esm/{TechDocsCustomHome-7836f59f.esm.js.map → TechDocsCustomHome-b77adc6d.esm.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TechDocsCustomHome-
|
|
1
|
+
{"version":3,"file":"TechDocsCustomHome-b77adc6d.esm.js","sources":["../../src/home/components/TechDocsCustomHome.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 React, { useState } from 'react';\nimport useAsync from 'react-use/lib/useAsync';\nimport { makeStyles } from '@material-ui/core';\nimport { CSSProperties } from '@material-ui/styles';\nimport {\n CATALOG_FILTER_EXISTS,\n catalogApiRef,\n CatalogApi,\n useEntityOwnership,\n} from '@backstage/plugin-catalog-react';\nimport { Entity } from '@backstage/catalog-model';\nimport { DocsTable } from './Tables';\nimport { DocsCardGrid } from './Grids';\nimport { TechDocsPageWrapper } from './TechDocsPageWrapper';\n\nimport {\n CodeSnippet,\n Content,\n HeaderTabs,\n Progress,\n WarningPanel,\n SupportButton,\n ContentHeader,\n} from '@backstage/core-components';\nimport { useApi } from '@backstage/core-plugin-api';\n\nconst panels = {\n DocsTable: DocsTable,\n DocsCardGrid: DocsCardGrid,\n};\n\n/**\n * Available panel types\n *\n * @public\n */\nexport type PanelType = 'DocsCardGrid' | 'DocsTable';\n\n/**\n * Type representing a TechDocsCustomHome panel.\n *\n * @public\n */\nexport interface PanelConfig {\n title: string;\n description: string;\n panelType: PanelType;\n panelCSS?: CSSProperties;\n filterPredicate: ((entity: Entity) => boolean) | string;\n}\n\n/**\n * Type representing a TechDocsCustomHome tab.\n *\n * @public\n */\nexport interface TabConfig {\n label: string;\n panels: PanelConfig[];\n}\n\n/**\n * Type representing a list of TechDocsCustomHome tabs.\n *\n * @public\n */\nexport type TabsConfig = TabConfig[];\n\nconst CustomPanel = ({\n config,\n entities,\n index,\n}: {\n config: PanelConfig;\n entities: Entity[];\n index: number;\n}) => {\n const useStyles = makeStyles({\n panelContainer: {\n marginBottom: '2rem',\n ...(config.panelCSS ? config.panelCSS : {}),\n },\n });\n const classes = useStyles();\n const { loading: loadingOwnership, isOwnedEntity } = useEntityOwnership();\n\n const Panel = panels[config.panelType];\n\n const shownEntities = entities.filter(entity => {\n if (config.filterPredicate === 'ownedByUser') {\n if (loadingOwnership) {\n return false;\n }\n return isOwnedEntity(entity);\n }\n\n return (\n typeof config.filterPredicate === 'function' &&\n config.filterPredicate(entity)\n );\n });\n\n return (\n <>\n <ContentHeader title={config.title} description={config.description}>\n {index === 0 ? (\n <SupportButton>\n Discover documentation in your ecosystem.\n </SupportButton>\n ) : null}\n </ContentHeader>\n <div className={classes.panelContainer}>\n <Panel data-testid=\"techdocs-custom-panel\" entities={shownEntities} />\n </div>\n </>\n );\n};\n\n/**\n * Props for {@link TechDocsCustomHome}\n *\n * @public\n */\nexport type TechDocsCustomHomeProps = {\n tabsConfig: TabsConfig;\n};\n\nexport const TechDocsCustomHome = (props: TechDocsCustomHomeProps) => {\n const { tabsConfig } = props;\n const [selectedTab, setSelectedTab] = useState<number>(0);\n const catalogApi: CatalogApi = useApi(catalogApiRef);\n\n const {\n value: entities,\n loading,\n error,\n } = useAsync(async () => {\n const response = await catalogApi.getEntities({\n filter: {\n 'metadata.annotations.backstage.io/techdocs-ref': CATALOG_FILTER_EXISTS,\n },\n fields: [\n 'apiVersion',\n 'kind',\n 'metadata',\n 'relations',\n 'spec.owner',\n 'spec.type',\n ],\n });\n return response.items.filter((entity: Entity) => {\n return !!entity.metadata.annotations?.['backstage.io/techdocs-ref'];\n });\n });\n\n const currentTabConfig = tabsConfig[selectedTab];\n\n if (loading) {\n return (\n <TechDocsPageWrapper>\n <Content>\n <Progress />\n </Content>\n </TechDocsPageWrapper>\n );\n }\n\n if (error) {\n return (\n <TechDocsPageWrapper>\n <Content>\n <WarningPanel\n severity=\"error\"\n title=\"Could not load available documentation.\"\n >\n <CodeSnippet language=\"text\" text={error.toString()} />\n </WarningPanel>\n </Content>\n </TechDocsPageWrapper>\n );\n }\n\n return (\n <TechDocsPageWrapper>\n <HeaderTabs\n selectedIndex={selectedTab}\n onChange={index => setSelectedTab(index)}\n tabs={tabsConfig.map(({ label }, index) => ({\n id: index.toString(),\n label,\n }))}\n />\n <Content data-testid=\"techdocs-content\">\n {currentTabConfig.panels.map((config, index) => (\n <CustomPanel\n key={index}\n config={config}\n entities={!!entities ? entities : []}\n index={index}\n />\n ))}\n </Content>\n </TechDocsPageWrapper>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { c as TechDocsReaderLayout, b as TechDocsReaderPage } from './index-
|
|
1
|
+
export { c as TechDocsReaderLayout, b as TechDocsReaderPage } from './index-c537b1f3.esm.js';
|
|
2
2
|
import '@backstage/core-plugin-api';
|
|
3
3
|
import '@backstage/errors';
|
|
4
4
|
import 'event-source-polyfill';
|
|
@@ -9,7 +9,6 @@ import '@backstage/plugin-techdocs-react';
|
|
|
9
9
|
import 'jss';
|
|
10
10
|
import '@material-ui/core';
|
|
11
11
|
import '@material-ui/styles';
|
|
12
|
-
import 'react-text-truncate';
|
|
13
12
|
import '@backstage/plugin-search-react';
|
|
14
13
|
import '@material-ui/icons/Search';
|
|
15
14
|
import '@material-ui/lab/Autocomplete';
|
|
@@ -31,9 +30,10 @@ import 'react-helmet';
|
|
|
31
30
|
import '@material-ui/icons/Code';
|
|
32
31
|
import '@backstage/plugin-catalog-react';
|
|
33
32
|
import '@backstage/catalog-model';
|
|
33
|
+
import '@material-ui/icons/Settings';
|
|
34
34
|
import 'react-use/lib/useCopyToClipboard';
|
|
35
35
|
import 'lodash';
|
|
36
36
|
import '@material-ui/icons/Share';
|
|
37
37
|
import '@material-ui/icons/Star';
|
|
38
38
|
import '@material-ui/icons/StarBorder';
|
|
39
|
-
//# sourceMappingURL=index-
|
|
39
|
+
//# sourceMappingURL=index-52f21300.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-52f21300.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -4,12 +4,11 @@ import { EventSourcePolyfill } from 'event-source-polyfill';
|
|
|
4
4
|
import React, { useState, useEffect, useReducer, useRef, useMemo, createContext, useContext, useCallback, Children } from 'react';
|
|
5
5
|
import { useParams, useNavigate as useNavigate$1, useOutlet, Routes, Route } from 'react-router-dom';
|
|
6
6
|
import { Link, LogViewer, ErrorPage, Progress, SidebarPinStateContext, Content, HeaderLabel, Header, Page, ItemCardGrid, ItemCardHeader, Button as Button$1, WarningPanel, CodeSnippet, SubvalueCell, Table, EmptyState, PageWithHeader, ContentHeader, SupportButton, MissingAnnotationEmptyState } from '@backstage/core-components';
|
|
7
|
-
import { useTechDocsReaderPage, useTechDocsAddons, TechDocsAddonLocations, TECHDOCS_ADDONS_WRAPPER_KEY, TechDocsReaderPageProvider } from '@backstage/plugin-techdocs-react';
|
|
7
|
+
import { techdocsStorageApiRef as techdocsStorageApiRef$1, useTechDocsReaderPage, useTechDocsAddons, TechDocsAddonLocations, TECHDOCS_ADDONS_WRAPPER_KEY, TechDocsReaderPageProvider, techdocsApiRef as techdocsApiRef$1 } from '@backstage/plugin-techdocs-react';
|
|
8
8
|
import { create } from 'jss';
|
|
9
|
-
import { makeStyles, ListItemText, ListItem, Divider, TextField, InputAdornment, IconButton, CircularProgress, createStyles, Button, Drawer, Grid, Typography, withStyles, Tooltip, ThemeProvider, SvgIcon, useTheme, Portal, Toolbar, Box, Card, CardMedia, CardContent, CardActions } from '@material-ui/core';
|
|
9
|
+
import { makeStyles, ListItemText, ListItem, Divider, TextField, InputAdornment, IconButton, CircularProgress, createStyles, Button, Drawer, Grid, Typography, withStyles, Tooltip, ThemeProvider, SvgIcon, useTheme, Portal, Toolbar, Box, Menu, Card, CardMedia, CardContent, CardActions } from '@material-ui/core';
|
|
10
10
|
import { jssPreset, StylesProvider, withStyles as withStyles$1 } from '@material-ui/styles';
|
|
11
|
-
import
|
|
12
|
-
import { SearchContextProvider, useSearch } from '@backstage/plugin-search-react';
|
|
11
|
+
import { HighlightedSearchResultText, SearchContextProvider, useSearch } from '@backstage/plugin-search-react';
|
|
13
12
|
import SearchIcon from '@material-ui/icons/Search';
|
|
14
13
|
import Autocomplete from '@material-ui/lab/Autocomplete';
|
|
15
14
|
import { useNavigate, useOutlet as useOutlet$1 } from 'react-router';
|
|
@@ -30,6 +29,7 @@ import Helmet from 'react-helmet';
|
|
|
30
29
|
import CodeIcon from '@material-ui/icons/Code';
|
|
31
30
|
import { getEntityRelations, EntityRefLink, EntityRefLinks, useEntityList, humanizeEntityRef, useStarredEntities, CATALOG_FILTER_EXISTS, EntityListProvider, CatalogFilterLayout, UserListPicker, EntityOwnerPicker, EntityTagPicker, useEntity } from '@backstage/plugin-catalog-react';
|
|
32
31
|
import { RELATION_OWNED_BY, getCompoundEntityRef } from '@backstage/catalog-model';
|
|
32
|
+
import SettingsIcon from '@material-ui/icons/Settings';
|
|
33
33
|
import useCopyToClipboard from 'react-use/lib/useCopyToClipboard';
|
|
34
34
|
import { capitalize } from 'lodash';
|
|
35
35
|
import ShareIcon from '@material-ui/icons/Share';
|
|
@@ -165,6 +165,7 @@ const useStyles$4 = makeStyles({
|
|
|
165
165
|
const TechDocsSearchResultListItem = (props) => {
|
|
166
166
|
const {
|
|
167
167
|
result,
|
|
168
|
+
highlight,
|
|
168
169
|
lineClamp = 5,
|
|
169
170
|
asListItem = true,
|
|
170
171
|
asLink = true,
|
|
@@ -172,17 +173,37 @@ const TechDocsSearchResultListItem = (props) => {
|
|
|
172
173
|
} = props;
|
|
173
174
|
const classes = useStyles$4();
|
|
174
175
|
const TextItem = () => {
|
|
175
|
-
|
|
176
|
+
const resultTitle = (highlight == null ? void 0 : highlight.fields.title) ? /* @__PURE__ */ React.createElement(HighlightedSearchResultText, {
|
|
177
|
+
text: highlight.fields.title,
|
|
178
|
+
preTag: highlight.preTag,
|
|
179
|
+
postTag: highlight.postTag
|
|
180
|
+
}) : result.title;
|
|
181
|
+
const entityTitle = (highlight == null ? void 0 : highlight.fields.entityTitle) ? /* @__PURE__ */ React.createElement(HighlightedSearchResultText, {
|
|
182
|
+
text: highlight.fields.entityTitle,
|
|
183
|
+
preTag: highlight.preTag,
|
|
184
|
+
postTag: highlight.postTag
|
|
185
|
+
}) : result.entityTitle;
|
|
186
|
+
const resultName = (highlight == null ? void 0 : highlight.fields.name) ? /* @__PURE__ */ React.createElement(HighlightedSearchResultText, {
|
|
187
|
+
text: highlight.fields.name,
|
|
188
|
+
preTag: highlight.preTag,
|
|
189
|
+
postTag: highlight.postTag
|
|
190
|
+
}) : result.name;
|
|
176
191
|
return /* @__PURE__ */ React.createElement(ListItemText, {
|
|
177
192
|
className: classes.itemText,
|
|
178
193
|
primaryTypographyProps: { variant: "h6" },
|
|
179
|
-
primary: title ? title :
|
|
180
|
-
secondary: /* @__PURE__ */ React.createElement(
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
194
|
+
primary: title ? title : /* @__PURE__ */ React.createElement(React.Fragment, null, resultTitle, " | ", entityTitle != null ? entityTitle : resultName, " docs"),
|
|
195
|
+
secondary: /* @__PURE__ */ React.createElement("span", {
|
|
196
|
+
style: {
|
|
197
|
+
display: "-webkit-box",
|
|
198
|
+
WebkitBoxOrient: "vertical",
|
|
199
|
+
WebkitLineClamp: lineClamp,
|
|
200
|
+
overflow: "hidden"
|
|
201
|
+
}
|
|
202
|
+
}, (highlight == null ? void 0 : highlight.fields.text) ? /* @__PURE__ */ React.createElement(HighlightedSearchResultText, {
|
|
203
|
+
text: highlight.fields.text,
|
|
204
|
+
preTag: highlight.preTag,
|
|
205
|
+
postTag: highlight.postTag
|
|
206
|
+
}) : result.text)
|
|
186
207
|
});
|
|
187
208
|
};
|
|
188
209
|
const LinkWrapper = ({ children }) => asLink ? /* @__PURE__ */ React.createElement(Link, {
|
|
@@ -269,12 +290,13 @@ const TechDocsSearchBar = (props) => {
|
|
|
269
290
|
noOptionsText: "No results found",
|
|
270
291
|
value: null,
|
|
271
292
|
options,
|
|
272
|
-
renderOption: ({ document }) => /* @__PURE__ */ React.createElement(TechDocsSearchResultListItem, {
|
|
293
|
+
renderOption: ({ document, highlight }) => /* @__PURE__ */ React.createElement(TechDocsSearchResultListItem, {
|
|
273
294
|
result: document,
|
|
274
295
|
lineClamp: 3,
|
|
275
296
|
asListItem: false,
|
|
276
297
|
asLink: false,
|
|
277
|
-
title: document.title
|
|
298
|
+
title: document.title,
|
|
299
|
+
highlight
|
|
278
300
|
}),
|
|
279
301
|
loading,
|
|
280
302
|
renderInput: (params) => /* @__PURE__ */ React.createElement(TextField, {
|
|
@@ -550,7 +572,7 @@ function useReaderState(kind, namespace, name, path) {
|
|
|
550
572
|
contentLoading: true,
|
|
551
573
|
buildLog: []
|
|
552
574
|
});
|
|
553
|
-
const techdocsStorageApi = useApi(techdocsStorageApiRef);
|
|
575
|
+
const techdocsStorageApi = useApi(techdocsStorageApiRef$1);
|
|
554
576
|
const { retry: contentReload } = useAsyncRetry(async () => {
|
|
555
577
|
dispatch({ type: "contentLoading" });
|
|
556
578
|
try {
|
|
@@ -664,7 +686,7 @@ const addBaseUrl = ({
|
|
|
664
686
|
try {
|
|
665
687
|
const svg = await fetch(newValue, { credentials: "include" });
|
|
666
688
|
const svgContent = await svg.text();
|
|
667
|
-
elem.setAttribute(attributeName, `data:image/svg+xml;base64,${btoa(svgContent)}`);
|
|
689
|
+
elem.setAttribute(attributeName, `data:image/svg+xml;base64,${btoa(unescape(encodeURIComponent(svgContent)))}`);
|
|
668
690
|
} catch (e) {
|
|
669
691
|
elem.setAttribute("alt", `Error: ${elemAttribute}`);
|
|
670
692
|
}
|
|
@@ -687,6 +709,7 @@ const addBaseUrl = ({
|
|
|
687
709
|
|
|
688
710
|
const addGitFeedbackLink = (scmIntegrationsApi) => {
|
|
689
711
|
return (dom) => {
|
|
712
|
+
var _a;
|
|
690
713
|
const sourceAnchor = dom.querySelector('[title="Edit this page"]');
|
|
691
714
|
if (!sourceAnchor || !sourceAnchor.href) {
|
|
692
715
|
return dom;
|
|
@@ -696,7 +719,7 @@ const addGitFeedbackLink = (scmIntegrationsApi) => {
|
|
|
696
719
|
if ((integration == null ? void 0 : integration.type) !== "github" && (integration == null ? void 0 : integration.type) !== "gitlab") {
|
|
697
720
|
return dom;
|
|
698
721
|
}
|
|
699
|
-
const title = dom.querySelector("article>h1").childNodes[0].textContent;
|
|
722
|
+
const title = ((_a = dom.querySelector("article>h1")) == null ? void 0 : _a.childNodes[0].textContent) || "";
|
|
700
723
|
const issueTitle = encodeURIComponent(`Documentation Feedback: ${title}`);
|
|
701
724
|
const issueDesc = encodeURIComponent(`Page source:
|
|
702
725
|
${sourceAnchor.href}
|
|
@@ -982,7 +1005,7 @@ const headings = ["h1", "h2", "h3", "h4", "h5", "h6"];
|
|
|
982
1005
|
const useTechDocsReaderDom = (entityRef) => {
|
|
983
1006
|
const navigate = useNavigate$1();
|
|
984
1007
|
const theme = useTheme();
|
|
985
|
-
const techdocsStorageApi = useApi(techdocsStorageApiRef);
|
|
1008
|
+
const techdocsStorageApi = useApi(techdocsStorageApiRef$1);
|
|
986
1009
|
const scmIntegrationsApi = useApi(scmIntegrationsApiRef);
|
|
987
1010
|
const techdocsSanitizer = useApi(configApiRef);
|
|
988
1011
|
const { namespace, kind, name } = entityRef;
|
|
@@ -1783,24 +1806,46 @@ const TechDocsReaderPageSubheader = ({
|
|
|
1783
1806
|
toolbarProps
|
|
1784
1807
|
}) => {
|
|
1785
1808
|
const classes = useStyles();
|
|
1809
|
+
const [anchorEl, setAnchorEl] = useState(null);
|
|
1810
|
+
const handleClick = useCallback((event) => {
|
|
1811
|
+
setAnchorEl(event.currentTarget);
|
|
1812
|
+
}, []);
|
|
1813
|
+
const handleClose = useCallback(() => {
|
|
1814
|
+
setAnchorEl(null);
|
|
1815
|
+
}, []);
|
|
1786
1816
|
const {
|
|
1787
1817
|
entityMetadata: { value: entityMetadata, loading: entityMetadataLoading }
|
|
1788
1818
|
} = useTechDocsReaderPage();
|
|
1789
1819
|
const addons = useTechDocsAddons();
|
|
1790
1820
|
const subheaderAddons = addons.renderComponentsByLocation(TechDocsAddonLocations.Subheader);
|
|
1791
|
-
|
|
1821
|
+
const settingsAddons = addons.renderComponentsByLocation(TechDocsAddonLocations.Settings);
|
|
1822
|
+
if (!subheaderAddons && !settingsAddons)
|
|
1792
1823
|
return null;
|
|
1793
1824
|
if (entityMetadataLoading === false && !entityMetadata)
|
|
1794
1825
|
return null;
|
|
1795
1826
|
return /* @__PURE__ */ React.createElement(Toolbar, {
|
|
1796
1827
|
classes,
|
|
1797
1828
|
...toolbarProps
|
|
1798
|
-
},
|
|
1829
|
+
}, /* @__PURE__ */ React.createElement(Box, {
|
|
1799
1830
|
display: "flex",
|
|
1800
1831
|
justifyContent: "flex-end",
|
|
1801
1832
|
width: "100%",
|
|
1802
1833
|
flexWrap: "wrap"
|
|
1803
|
-
}, subheaderAddons
|
|
1834
|
+
}, subheaderAddons, settingsAddons ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Tooltip, {
|
|
1835
|
+
title: "Settings"
|
|
1836
|
+
}, /* @__PURE__ */ React.createElement(IconButton, {
|
|
1837
|
+
"aria-controls": "tech-docs-reader-page-settings",
|
|
1838
|
+
"aria-haspopup": "true",
|
|
1839
|
+
onClick: handleClick
|
|
1840
|
+
}, /* @__PURE__ */ React.createElement(SettingsIcon, null))), /* @__PURE__ */ React.createElement(Menu, {
|
|
1841
|
+
id: "tech-docs-reader-page-settings",
|
|
1842
|
+
getContentAnchorEl: null,
|
|
1843
|
+
anchorEl,
|
|
1844
|
+
anchorOrigin: { vertical: "bottom", horizontal: "right" },
|
|
1845
|
+
open: Boolean(anchorEl),
|
|
1846
|
+
onClose: handleClose,
|
|
1847
|
+
keepMounted: true
|
|
1848
|
+
}, settingsAddons)) : null));
|
|
1804
1849
|
};
|
|
1805
1850
|
|
|
1806
1851
|
const TechDocsReaderLayout = ({
|
|
@@ -2091,7 +2136,7 @@ const techdocsPlugin = createPlugin({
|
|
|
2091
2136
|
id: "techdocs",
|
|
2092
2137
|
apis: [
|
|
2093
2138
|
createApiFactory({
|
|
2094
|
-
api: techdocsStorageApiRef,
|
|
2139
|
+
api: techdocsStorageApiRef$1,
|
|
2095
2140
|
deps: {
|
|
2096
2141
|
configApi: configApiRef,
|
|
2097
2142
|
discoveryApi: discoveryApiRef,
|
|
@@ -2106,7 +2151,7 @@ const techdocsPlugin = createPlugin({
|
|
|
2106
2151
|
})
|
|
2107
2152
|
}),
|
|
2108
2153
|
createApiFactory({
|
|
2109
|
-
api: techdocsApiRef,
|
|
2154
|
+
api: techdocsApiRef$1,
|
|
2110
2155
|
deps: {
|
|
2111
2156
|
configApi: configApiRef,
|
|
2112
2157
|
discoveryApi: discoveryApiRef,
|
|
@@ -2137,7 +2182,7 @@ const EntityTechdocsContent = techdocsPlugin.provide(createRoutableExtension({
|
|
|
2137
2182
|
}));
|
|
2138
2183
|
const TechDocsCustomHome = techdocsPlugin.provide(createRoutableExtension({
|
|
2139
2184
|
name: "TechDocsCustomHome",
|
|
2140
|
-
component: () => import('./TechDocsCustomHome-
|
|
2185
|
+
component: () => import('./TechDocsCustomHome-b77adc6d.esm.js').then((m) => m.TechDocsCustomHome),
|
|
2141
2186
|
mountPoint: rootRouteRef
|
|
2142
2187
|
}));
|
|
2143
2188
|
const TechDocsIndexPage$2 = techdocsPlugin.provide(createRoutableExtension({
|
|
@@ -2147,7 +2192,7 @@ const TechDocsIndexPage$2 = techdocsPlugin.provide(createRoutableExtension({
|
|
|
2147
2192
|
}));
|
|
2148
2193
|
const TechDocsReaderPage = techdocsPlugin.provide(createRoutableExtension({
|
|
2149
2194
|
name: "TechDocsReaderPage",
|
|
2150
|
-
component: () => import('./index-
|
|
2195
|
+
component: () => import('./index-52f21300.esm.js').then((m) => m.TechDocsReaderPage),
|
|
2151
2196
|
mountPoint: rootDocsRouteRef
|
|
2152
2197
|
}));
|
|
2153
2198
|
|
|
@@ -2209,4 +2254,4 @@ var Router$1 = /*#__PURE__*/Object.freeze({
|
|
|
2209
2254
|
});
|
|
2210
2255
|
|
|
2211
2256
|
export { isTechDocsAvailable as A, Router as B, EmbeddedDocsRouter as C, DocsTable as D, EntityTechdocsContent as E, Reader as R, TechDocsPageWrapper as T, DocsCardGrid as a, TechDocsReaderPage$1 as b, TechDocsReaderLayout as c, TechDocsCustomHome as d, TechDocsIndexPage$2 as e, TechdocsPage as f, TechDocsReaderPage as g, techdocsStorageApiRef as h, techdocsApiRef as i, TechDocsClient as j, TechDocsStorageClient as k, TechDocsReaderPageHeader as l, TechDocsReaderPageContent as m, TechDocsReaderProvider as n, useTechDocsReaderDom as o, TechDocsReaderPageSubheader as p, TechDocsStateIndicator as q, TechDocsSearchResultListItem as r, TechDocsSearch as s, techdocsPlugin as t, useTechDocsReader as u, EntityListDocsGrid as v, withTechDocsReaderProvider as w, EntityListDocsTable as x, DefaultTechDocsHome as y, TechDocsPicker as z };
|
|
2212
|
-
//# sourceMappingURL=index-
|
|
2257
|
+
//# sourceMappingURL=index-c537b1f3.esm.js.map
|