@backstage/plugin-techdocs 1.10.4-next.1 → 1.10.5-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +45 -0
- package/README.md +1 -1
- package/alpha/package.json +1 -1
- package/dist/EntityPageDocs.esm.js +23 -0
- package/dist/EntityPageDocs.esm.js.map +1 -0
- package/dist/Router.esm.js +47 -0
- package/dist/Router.esm.js.map +1 -0
- package/dist/alpha.esm.js +6 -7
- package/dist/alpha.esm.js.map +1 -1
- package/dist/api.esm.js +11 -0
- package/dist/api.esm.js.map +1 -0
- package/dist/{esm/routes-VopnMGN0.esm.js → client.esm.js} +2 -14
- package/dist/client.esm.js.map +1 -0
- package/dist/helpers.esm.js +8 -0
- package/dist/helpers.esm.js.map +1 -0
- package/dist/home/components/DefaultTechDocsHome.esm.js +15 -0
- package/dist/home/components/DefaultTechDocsHome.esm.js.map +1 -0
- package/dist/{esm/DocsCardGrid-AWTYz1vR.esm.js → home/components/Grids/DocsCardGrid.esm.js} +4 -4
- package/dist/home/components/Grids/DocsCardGrid.esm.js.map +1 -0
- package/dist/home/components/Grids/EntityListDocsGrid.esm.js +68 -0
- package/dist/home/components/Grids/EntityListDocsGrid.esm.js.map +1 -0
- package/dist/home/components/Tables/DocsTable.esm.js +87 -0
- package/dist/home/components/Tables/DocsTable.esm.js.map +1 -0
- package/dist/home/components/Tables/EntityListDocsTable.esm.js +50 -0
- package/dist/home/components/Tables/EntityListDocsTable.esm.js.map +1 -0
- package/dist/home/components/Tables/actions.esm.js +37 -0
- package/dist/home/components/Tables/actions.esm.js.map +1 -0
- package/dist/home/components/Tables/columns.esm.js +51 -0
- package/dist/home/components/Tables/columns.esm.js.map +1 -0
- package/dist/{esm/TechDocsCustomHome-CTmEWYTg.esm.js → home/components/TechDocsCustomHome.esm.js} +5 -17
- package/dist/home/components/TechDocsCustomHome.esm.js.map +1 -0
- package/dist/home/components/TechDocsIndexPage.esm.js +11 -0
- package/dist/home/components/TechDocsIndexPage.esm.js.map +1 -0
- package/dist/home/components/TechDocsPageWrapper.esm.js +22 -0
- package/dist/home/components/TechDocsPageWrapper.esm.js.map +1 -0
- package/dist/home/components/TechDocsPicker.esm.js +22 -0
- package/dist/home/components/TechDocsPicker.esm.js.map +1 -0
- package/dist/index.esm.js +17 -125
- package/dist/index.esm.js.map +1 -1
- package/dist/plugin.esm.js +97 -0
- package/dist/plugin.esm.js.map +1 -0
- package/dist/reader/components/TechDocsBuildLogs.esm.js +94 -0
- package/dist/reader/components/TechDocsBuildLogs.esm.js.map +1 -0
- package/dist/reader/components/TechDocsNotFound.esm.js +33 -0
- package/dist/reader/components/TechDocsNotFound.esm.js.map +1 -0
- package/dist/reader/components/TechDocsReaderPage/TechDocsReaderPage.esm.js +42 -0
- package/dist/reader/components/TechDocsReaderPage/TechDocsReaderPage.esm.js.map +1 -0
- package/dist/reader/components/TechDocsReaderPage/index.esm.js +2 -0
- package/dist/reader/components/TechDocsReaderPage/index.esm.js.map +1 -0
- package/dist/reader/components/TechDocsReaderPageContent/TechDocsReaderPageContent.esm.js +77 -0
- package/dist/reader/components/TechDocsReaderPageContent/TechDocsReaderPageContent.esm.js.map +1 -0
- package/dist/reader/components/TechDocsReaderPageContent/TechDocsReaderPageContentAddons.esm.js +43 -0
- package/dist/reader/components/TechDocsReaderPageContent/TechDocsReaderPageContentAddons.esm.js.map +1 -0
- package/dist/reader/components/TechDocsReaderPageContent/dom.esm.js +203 -0
- package/dist/reader/components/TechDocsReaderPageContent/dom.esm.js.map +1 -0
- package/dist/reader/components/TechDocsReaderPageContent/useNavigateUrl.esm.js +36 -0
- package/dist/reader/components/TechDocsReaderPageContent/useNavigateUrl.esm.js.map +1 -0
- package/dist/reader/components/TechDocsReaderPageHeader/TechDocsReaderPageHeader.esm.js +101 -0
- package/dist/reader/components/TechDocsReaderPageHeader/TechDocsReaderPageHeader.esm.js.map +1 -0
- package/dist/reader/components/TechDocsReaderPageSubheader/TechDocsReaderPageSubheader.esm.js +77 -0
- package/dist/reader/components/TechDocsReaderPageSubheader/TechDocsReaderPageSubheader.esm.js.map +1 -0
- package/dist/reader/components/TechDocsReaderProvider.esm.js +19 -0
- package/dist/reader/components/TechDocsReaderProvider.esm.js.map +1 -0
- package/dist/reader/components/TechDocsStateIndicator.esm.js +101 -0
- package/dist/reader/components/TechDocsStateIndicator.esm.js.map +1 -0
- package/dist/reader/components/useReaderState.esm.js +163 -0
- package/dist/reader/components/useReaderState.esm.js.map +1 -0
- package/dist/reader/transformers/addBaseUrl.esm.js +56 -0
- package/dist/reader/transformers/addBaseUrl.esm.js.map +1 -0
- package/dist/reader/transformers/addGitFeedbackLink.esm.js +53 -0
- package/dist/reader/transformers/addGitFeedbackLink.esm.js.map +1 -0
- package/dist/reader/transformers/addLinkClickListener.esm.js +23 -0
- package/dist/reader/transformers/addLinkClickListener.esm.js.map +1 -0
- package/dist/reader/transformers/addSidebarToggle.esm.js +27 -0
- package/dist/reader/transformers/addSidebarToggle.esm.js.map +1 -0
- package/dist/reader/transformers/copyToClipboard.esm.js +68 -0
- package/dist/reader/transformers/copyToClipboard.esm.js.map +1 -0
- package/dist/reader/transformers/html/hooks/iframes.esm.js +19 -0
- package/dist/reader/transformers/html/hooks/iframes.esm.js.map +1 -0
- package/dist/reader/transformers/html/hooks/links.esm.js +20 -0
- package/dist/reader/transformers/html/hooks/links.esm.js.map +1 -0
- package/dist/reader/transformers/html/transformer.esm.js +36 -0
- package/dist/reader/transformers/html/transformer.esm.js.map +1 -0
- package/dist/reader/transformers/onCssReady.esm.js +24 -0
- package/dist/reader/transformers/onCssReady.esm.js.map +1 -0
- package/dist/reader/transformers/removeMkdocsHeader.esm.js +10 -0
- package/dist/reader/transformers/removeMkdocsHeader.esm.js.map +1 -0
- package/dist/reader/transformers/renderReactElement.esm.js +18 -0
- package/dist/reader/transformers/renderReactElement.esm.js.map +1 -0
- package/dist/reader/transformers/rewriteDocLinks.esm.js +37 -0
- package/dist/reader/transformers/rewriteDocLinks.esm.js.map +1 -0
- package/dist/reader/transformers/scrollIntoNavigation.esm.js +21 -0
- package/dist/reader/transformers/scrollIntoNavigation.esm.js.map +1 -0
- package/dist/reader/transformers/simplifyMkdocsFooter.esm.js +11 -0
- package/dist/reader/transformers/simplifyMkdocsFooter.esm.js.map +1 -0
- package/dist/reader/transformers/styles/rules/animations.esm.js +13 -0
- package/dist/reader/transformers/styles/rules/animations.esm.js.map +1 -0
- package/dist/reader/transformers/styles/rules/extensions.esm.js +72 -0
- package/dist/reader/transformers/styles/rules/extensions.esm.js.map +1 -0
- package/dist/reader/transformers/styles/rules/layout.esm.js +224 -0
- package/dist/reader/transformers/styles/rules/layout.esm.js.map +1 -0
- package/dist/reader/transformers/styles/rules/reset.esm.js +14 -0
- package/dist/reader/transformers/styles/rules/reset.esm.js.map +1 -0
- package/dist/reader/transformers/styles/rules/rules.esm.js +18 -0
- package/dist/reader/transformers/styles/rules/rules.esm.js.map +1 -0
- package/dist/reader/transformers/styles/rules/typeset.esm.js +91 -0
- package/dist/reader/transformers/styles/rules/typeset.esm.js.map +1 -0
- package/dist/reader/transformers/styles/rules/variables.esm.js +126 -0
- package/dist/reader/transformers/styles/rules/variables.esm.js.map +1 -0
- package/dist/reader/transformers/styles/transformer.esm.js +27 -0
- package/dist/reader/transformers/styles/transformer.esm.js.map +1 -0
- package/dist/reader/transformers/transformer.esm.js +17 -0
- package/dist/reader/transformers/transformer.esm.js.map +1 -0
- package/dist/routes.esm.js +15 -0
- package/dist/routes.esm.js.map +1 -0
- package/dist/search/components/TechDocsSearch.esm.js +95 -0
- package/dist/search/components/TechDocsSearch.esm.js.map +1 -0
- package/dist/{esm/TechDocsSearchResultListItem-4Qzh5-3s.esm.js → search/components/TechDocsSearchResultListItem.esm.js} +1 -1
- package/dist/search/components/TechDocsSearchResultListItem.esm.js.map +1 -0
- package/package.json +20 -20
- package/dist/esm/DocsCardGrid-AWTYz1vR.esm.js.map +0 -1
- package/dist/esm/Router-jrzAl2lO.esm.js +0 -162
- package/dist/esm/Router-jrzAl2lO.esm.js.map +0 -1
- package/dist/esm/TechDocsCustomHome-CTmEWYTg.esm.js.map +0 -1
- package/dist/esm/TechDocsIndexPage-BCP1ggek.esm.js +0 -257
- package/dist/esm/TechDocsIndexPage-BCP1ggek.esm.js.map +0 -1
- package/dist/esm/TechDocsReaderPage-jsKVX28r.esm.js +0 -1925
- package/dist/esm/TechDocsReaderPage-jsKVX28r.esm.js.map +0 -1
- package/dist/esm/TechDocsSearchResultListItem-4Qzh5-3s.esm.js.map +0 -1
- package/dist/esm/index-up5BptkF.esm.js +0 -47
- package/dist/esm/index-up5BptkF.esm.js.map +0 -1
- package/dist/esm/routes-VopnMGN0.esm.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variables.esm.js","sources":["../../../../../src/reader/transformers/styles/rules/variables.ts"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { alpha, lighten } from '@material-ui/core/styles';\nimport { RuleOptions } from './types';\n\nexport default ({ theme }: RuleOptions) => `\n/*================== Variables ==================*/\n/*\n As the MkDocs output is rendered in shadow DOM, the CSS variable definitions on the root selector are not applied. Instead, they have to be applied on :host.\n As there is no way to transform the served main*.css yet (for example in the backend), we have to copy from main*.css and modify them.\n*/\n\n:host {\n /* FONT */\n --md-default-fg-color: ${theme.palette.text.primary};\n --md-default-fg-color--light: ${theme.palette.text.secondary};\n --md-default-fg-color--lighter: ${lighten(theme.palette.text.secondary, 0.7)};\n --md-default-fg-color--lightest: ${lighten(\n theme.palette.text.secondary,\n 0.3,\n )};\n\n /* BACKGROUND */\n --md-default-bg-color:${theme.palette.background.default};\n --md-default-bg-color--light: ${theme.palette.background.paper};\n --md-default-bg-color--lighter: ${lighten(\n theme.palette.background.paper,\n 0.7,\n )};\n --md-default-bg-color--lightest: ${lighten(\n theme.palette.background.paper,\n 0.3,\n )};\n\n /* PRIMARY */\n --md-primary-fg-color: ${theme.palette.primary.main};\n --md-primary-fg-color--light: ${theme.palette.primary.light};\n --md-primary-fg-color--dark: ${theme.palette.primary.dark};\n --md-primary-bg-color: ${theme.palette.primary.contrastText};\n --md-primary-bg-color--light: ${lighten(\n theme.palette.primary.contrastText,\n 0.7,\n )};\n\n /* ACCENT */\n --md-accent-fg-color: var(--md-primary-fg-color);\n\n /* SHADOW */\n --md-shadow-z1: ${theme.shadows[1]};\n --md-shadow-z2: ${theme.shadows[2]};\n --md-shadow-z3: ${theme.shadows[3]};\n\n /* EXTENSIONS */\n --md-admonition-fg-color: var(--md-default-fg-color);\n --md-admonition-bg-color: var(--md-default-bg-color);\n /* Admonitions and others are using SVG masks to define icons. These masks are defined as CSS variables. */\n --md-admonition-icon--note: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z\"/></svg>');\n --md-admonition-icon--abstract: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M4 5h16v2H4V5m0 4h16v2H4V9m0 4h16v2H4v-2m0 4h10v2H4v-2z\"/></svg>');\n --md-admonition-icon--info: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M13 9h-2V7h2m0 10h-2v-6h2m-1-9A10 10 0 002 12a10 10 0 0010 10 10 10 0 0010-10A10 10 0 0012 2z\"/></svg>');\n --md-admonition-icon--tip: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M17.55 11.2c-.23-.3-.5-.56-.76-.82-.65-.6-1.4-1.03-2.03-1.66C13.3 7.26 13 4.85 13.91 3c-.91.23-1.75.75-2.45 1.32-2.54 2.08-3.54 5.75-2.34 8.9.04.1.08.2.08.33 0 .22-.15.42-.35.5-.22.1-.46.04-.64-.12a.83.83 0 01-.15-.17c-1.1-1.43-1.28-3.48-.53-5.12C5.89 10 5 12.3 5.14 14.47c.04.5.1 1 .27 1.5.14.6.4 1.2.72 1.73 1.04 1.73 2.87 2.97 4.84 3.22 2.1.27 4.35-.12 5.96-1.6 1.8-1.66 2.45-4.32 1.5-6.6l-.13-.26c-.2-.46-.47-.87-.8-1.25l.05-.01m-3.1 6.3c-.28.24-.73.5-1.08.6-1.1.4-2.2-.16-2.87-.82 1.19-.28 1.89-1.16 2.09-2.05.17-.8-.14-1.46-.27-2.23-.12-.74-.1-1.37.18-2.06.17.38.37.76.6 1.06.76 1 1.95 1.44 2.2 2.8.04.14.06.28.06.43.03.82-.32 1.72-.92 2.27h.01z\"/></svg>');\n --md-admonition-icon--success: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2m-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"/></svg>');\n --md-admonition-icon--question: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M15.07 11.25l-.9.92C13.45 12.89 13 13.5 13 15h-2v-.5c0-1.11.45-2.11 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41a2 2 0 00-2-2 2 2 0 00-2 2H8a4 4 0 014-4 4 4 0 014 4 3.2 3.2 0 01-.93 2.25M13 19h-2v-2h2M12 2A10 10 0 002 12a10 10 0 0010 10 10 10 0 0010-10c0-5.53-4.5-10-10-10z\"/></svg>');\n --md-admonition-icon--warning: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M13 14h-2v-4h2m0 8h-2v-2h2M1 21h22L12 2 1 21z\"/></svg>');\n --md-admonition-icon--failure: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M12 2c5.53 0 10 4.47 10 10s-4.47 10-10 10S2 17.53 2 12 6.47 2 12 2m3.59 5L12 10.59 8.41 7 7 8.41 10.59 12 7 15.59 8.41 17 12 13.41 15.59 17 17 15.59 13.41 12 17 8.41 15.59 7z\"/></svg>');\n --md-admonition-icon--danger: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M11.5 20l4.86-9.73H13V4l-5 9.73h3.5V20M12 2c2.75 0 5.1 1 7.05 2.95C21 6.9 22 9.25 22 12s-1 5.1-2.95 7.05C17.1 21 14.75 22 12 22s-5.1-1-7.05-2.95C3 17.1 2 14.75 2 12s1-5.1 2.95-7.05C6.9 3 9.25 2 12 2z\"/></svg>');\n --md-admonition-icon--bug: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M14 12h-4v-2h4m0 6h-4v-2h4m6-6h-2.81a5.985 5.985 0 00-1.82-1.96L17 4.41 15.59 3l-2.17 2.17a6.002 6.002 0 00-2.83 0L8.41 3 7 4.41l1.62 1.63C7.88 6.55 7.26 7.22 6.81 8H4v2h2.09c-.05.33-.09.66-.09 1v1H4v2h2v1c0 .34.04.67.09 1H4v2h2.81c1.04 1.79 2.97 3 5.19 3s4.15-1.21 5.19-3H20v-2h-2.09c.05-.33.09-.66.09-1v-1h2v-2h-2v-1c0-.34-.04-.67-.09-1H20V8z\"/></svg>');\n --md-admonition-icon--example: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M7 13v-2h14v2H7m0 6v-2h14v2H7M7 7V5h14v2H7M3 8V5H2V4h2v4H3m-1 9v-1h3v4H2v-1h2v-.5H3v-1h1V17H2m2.25-7a.75.75 0 01.75.75c0 .2-.08.39-.21.52L3.12 13H5v1H2v-.92L4 11H2v-1h2.25z\"/></svg>');\n --md-admonition-icon--quote: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M14 17h3l2-4V7h-6v6h3M6 17h3l2-4V7H5v6h3l-2 4z\"/></svg>');\n --md-footnotes-icon: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M19 7v4H5.83l3.58-3.59L8 6l-6 6 6 6 1.41-1.42L5.83 13H21V7h-2z\"/></svg>');\n --md-details-icon: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M8.59 16.58 13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.42z\"/></svg>');\n --md-tasklist-icon: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z\"/></svg>');\n --md-tasklist-icon--checked: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"/></svg>');\n --md-nav-icon--prev: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12z\"/></svg>');\n --md-nav-icon--next: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M8.59 16.58 13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.42z\"/></svg>');\n --md-toc-icon: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M3 9h14V7H3v2m0 4h14v-2H3v2m0 4h14v-2H3v2m16 0h2v-2h-2v2m0-10v2h2V7h-2m0 6h2v-2h-2v2z\"/></svg>');\n --md-clipboard-icon: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M19 21H8V7h11m0-2H8a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h11a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2m-3-4H4a2 2 0 0 0-2 2v14h2V3h12V1z\"/></svg>');\n --md-search-result-icon: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h7c-.41-.25-.8-.56-1.14-.9-.33-.33-.61-.7-.86-1.1H6V4h7v5h5v1.18c.71.16 1.39.43 2 .82V8l-6-6m6.31 16.9c1.33-2.11.69-4.9-1.4-6.22-2.11-1.33-4.91-.68-6.22 1.4-1.34 2.11-.69 4.89 1.4 6.22 1.46.93 3.32.93 4.79.02L22 23.39 23.39 22l-3.08-3.1m-3.81.1a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5z\"/></svg>');\n --md-source-forks-icon: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path fill-rule=\"evenodd\" d=\"M5 3.25a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0zm0 2.122a2.25 2.25 0 1 0-1.5 0v.878A2.25 2.25 0 0 0 5.75 8.5h1.5v2.128a2.251 2.251 0 1 0 1.5 0V8.5h1.5a2.25 2.25 0 0 0 2.25-2.25v-.878a2.25 2.25 0 1 0-1.5 0v.878a.75.75 0 0 1-.75.75h-4.5A.75.75 0 0 1 5 6.25v-.878zm3.75 7.378a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0zm3-8.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5z\"/></svg>');\n --md-source-repositories-icon: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path fill-rule=\"evenodd\" d=\"M2 2.5A2.5 2.5 0 0 1 4.5 0h8.75a.75.75 0 0 1 .75.75v12.5a.75.75 0 0 1-.75.75h-2.5a.75.75 0 1 1 0-1.5h1.75v-2h-8a1 1 0 0 0-.714 1.7.75.75 0 0 1-1.072 1.05A2.495 2.495 0 0 1 2 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 0 1 1-1h8zM5 12.25v3.25a.25.25 0 0 0 .4.2l1.45-1.087a.25.25 0 0 1 .3 0L8.6 15.7a.25.25 0 0 0 .4-.2v-3.25a.25.25 0 0 0-.25-.25h-3.5a.25.25 0 0 0-.25.25z\"/></svg>');\n --md-source-stars-icon: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path fill-rule=\"evenodd\" d=\"M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.75.75 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694v.001z\"/></svg>');\n --md-source-version-icon: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path fill-rule=\"evenodd\" d=\"M2.5 7.775V2.75a.25.25 0 0 1 .25-.25h5.025a.25.25 0 0 1 .177.073l6.25 6.25a.25.25 0 0 1 0 .354l-5.025 5.025a.25.25 0 0 1-.354 0l-6.25-6.25a.25.25 0 0 1-.073-.177zm-1.5 0V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.75 1.75 0 0 1 1 7.775zM6 5a1 1 0 1 0 0 2 1 1 0 0 0 0-2z\"/></svg>');\n --md-version-icon: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"><!--! Font Awesome Free 6.0.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d=\"m310.6 246.6-127.1 128c-7.1 6.3-15.3 9.4-23.5 9.4s-16.38-3.125-22.63-9.375l-127.1-128C.224 237.5-2.516 223.7 2.438 211.8S19.07 192 32 192h255.1c12.94 0 24.62 7.781 29.58 19.75s3.12 25.75-6.08 34.85z\"/></svg>');\n}\n\n:host > * {\n /* CODE */\n --md-code-fg-color: ${theme.palette.text.primary};\n --md-code-bg-color: ${theme.palette.background.paper};\n --md-code-hl-color: ${alpha(theme.palette.warning.main, 0.5)};\n --md-code-hl-keyword-color: ${\n theme.palette.type === 'dark'\n ? theme.palette.primary.light\n : theme.palette.primary.dark\n };\n --md-code-hl-function-color: ${\n theme.palette.type === 'dark'\n ? theme.palette.secondary.light\n : theme.palette.secondary.dark\n };\n --md-code-hl-string-color: ${\n theme.palette.type === 'dark'\n ? theme.palette.success.light\n : theme.palette.success.dark\n };\n --md-code-hl-number-color: ${\n theme.palette.type === 'dark'\n ? theme.palette.error.light\n : theme.palette.error.dark\n };\n --md-code-hl-constant-color: var(--md-code-hl-function-color);\n --md-code-hl-special-color: var(--md-code-hl-function-color);\n --md-code-hl-name-color: var(--md-code-fg-color);\n --md-code-hl-comment-color: var(--md-default-fg-color--light);\n --md-code-hl-generic-color: var(--md-default-fg-color--light);\n --md-code-hl-variable-color: var(--md-default-fg-color--light);\n --md-code-hl-operator-color: var(--md-default-fg-color--light);\n --md-code-hl-punctuation-color: var(--md-default-fg-color--light);\n\n /* TYPESET */\n --md-typeset-font-size: 1rem;\n --md-typeset-color: var(--md-default-fg-color);\n --md-typeset-a-color: ${theme.palette.link};\n --md-typeset-table-color: ${theme.palette.text.primary};\n --md-typeset-del-color: ${\n theme.palette.type === 'dark'\n ? alpha(theme.palette.error.dark, 0.5)\n : alpha(theme.palette.error.light, 0.5)\n };\n --md-typeset-ins-color: ${\n theme.palette.type === 'dark'\n ? alpha(theme.palette.success.dark, 0.5)\n : alpha(theme.palette.success.light, 0.5)\n };\n --md-typeset-mark-color: ${\n theme.palette.type === 'dark'\n ? alpha(theme.palette.warning.dark, 0.5)\n : alpha(theme.palette.warning.light, 0.5)\n };\n}\n\n@media screen and (max-width: 76.1875em) {\n :host > * {\n /* TYPESET */\n --md-typeset-font-size: .9rem;\n }\n}\n\n@media screen and (max-width: 600px) {\n :host > * {\n /* TYPESET */\n --md-typeset-font-size: .7rem;\n }\n}\n`;\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { useCallback, useMemo } from 'react';
|
|
2
|
+
import { useTheme } from '@material-ui/core/styles';
|
|
3
|
+
import { useSidebarPinState } from '@backstage/core-components';
|
|
4
|
+
import { rules } from './rules/rules.esm.js';
|
|
5
|
+
|
|
6
|
+
const useSidebar = () => useSidebarPinState();
|
|
7
|
+
const useRuleStyles = () => {
|
|
8
|
+
const sidebar = useSidebar();
|
|
9
|
+
const theme = useTheme();
|
|
10
|
+
return useMemo(() => {
|
|
11
|
+
const options = { theme, sidebar };
|
|
12
|
+
return rules.reduce((styles, rule) => styles + rule(options), "");
|
|
13
|
+
}, [theme, sidebar]);
|
|
14
|
+
};
|
|
15
|
+
const useStylesTransformer = () => {
|
|
16
|
+
const styles = useRuleStyles();
|
|
17
|
+
return useCallback(
|
|
18
|
+
(dom) => {
|
|
19
|
+
dom.getElementsByTagName("head")[0].insertAdjacentHTML("beforeend", `<style>${styles}</style>`);
|
|
20
|
+
return dom;
|
|
21
|
+
},
|
|
22
|
+
[styles]
|
|
23
|
+
);
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export { useStylesTransformer };
|
|
27
|
+
//# sourceMappingURL=transformer.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transformer.esm.js","sources":["../../../../src/reader/transformers/styles/transformer.ts"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useCallback, useMemo } from 'react';\nimport { useTheme } from '@material-ui/core/styles';\nimport { useSidebarPinState } from '@backstage/core-components';\nimport { Transformer } from '../transformer';\nimport { rules } from './rules';\n\n/**\n * Sidebar pinned state to be used in computing style injections.\n */\nconst useSidebar = () => useSidebarPinState();\n\n/**\n * Process all rules and concatenate their definitions into a single style.\n * @returns a string containing all processed style definitions.\n */\nconst useRuleStyles = () => {\n const sidebar = useSidebar();\n const theme = useTheme();\n\n return useMemo(() => {\n const options = { theme, sidebar };\n return rules.reduce<string>((styles, rule) => styles + rule(options), '');\n }, [theme, sidebar]);\n};\n\n/**\n * Returns a transformer that inserts all style rules into the given element's head tag.\n */\nexport const useStylesTransformer = (): Transformer => {\n const styles = useRuleStyles();\n\n return useCallback(\n (dom: Element) => {\n dom\n .getElementsByTagName('head')[0]\n .insertAdjacentHTML('beforeend', `<style>${styles}</style>`);\n return dom;\n },\n [styles],\n );\n};\n"],"names":[],"mappings":";;;;;AAyBA,MAAM,UAAA,GAAa,MAAM,kBAAmB,EAAA,CAAA;AAM5C,MAAM,gBAAgB,MAAM;AAC1B,EAAA,MAAM,UAAU,UAAW,EAAA,CAAA;AAC3B,EAAA,MAAM,QAAQ,QAAS,EAAA,CAAA;AAEvB,EAAA,OAAO,QAAQ,MAAM;AACnB,IAAM,MAAA,OAAA,GAAU,EAAE,KAAA,EAAO,OAAQ,EAAA,CAAA;AACjC,IAAO,OAAA,KAAA,CAAM,OAAe,CAAC,MAAA,EAAQ,SAAS,MAAS,GAAA,IAAA,CAAK,OAAO,CAAA,EAAG,EAAE,CAAA,CAAA;AAAA,GACvE,EAAA,CAAC,KAAO,EAAA,OAAO,CAAC,CAAA,CAAA;AACrB,CAAA,CAAA;AAKO,MAAM,uBAAuB,MAAmB;AACrD,EAAA,MAAM,SAAS,aAAc,EAAA,CAAA;AAE7B,EAAO,OAAA,WAAA;AAAA,IACL,CAAC,GAAiB,KAAA;AAChB,MACG,GAAA,CAAA,oBAAA,CAAqB,MAAM,CAAE,CAAA,CAAC,EAC9B,kBAAmB,CAAA,WAAA,EAAa,CAAU,OAAA,EAAA,MAAM,CAAU,QAAA,CAAA,CAAA,CAAA;AAC7D,MAAO,OAAA,GAAA,CAAA;AAAA,KACT;AAAA,IACA,CAAC,MAAM,CAAA;AAAA,GACT,CAAA;AACF;;;;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
const transform = async (html, transformers) => {
|
|
2
|
+
let dom;
|
|
3
|
+
if (typeof html === "string") {
|
|
4
|
+
dom = new DOMParser().parseFromString(html, "text/html").documentElement;
|
|
5
|
+
} else if (html instanceof Element) {
|
|
6
|
+
dom = html;
|
|
7
|
+
} else {
|
|
8
|
+
throw new Error("dom is not a recognized type");
|
|
9
|
+
}
|
|
10
|
+
for (const transformer of transformers) {
|
|
11
|
+
dom = await transformer(dom);
|
|
12
|
+
}
|
|
13
|
+
return dom;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export { transform };
|
|
17
|
+
//# sourceMappingURL=transformer.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transformer.esm.js","sources":["../../../src/reader/transformers/transformer.ts"],"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\nexport type Transformer = (dom: Element) => Element | Promise<Element>;\n\nexport const transform = async (\n html: string | Element,\n transformers: Transformer[],\n): Promise<Element> => {\n let dom: Element;\n\n if (typeof html === 'string') {\n dom = new DOMParser().parseFromString(html, 'text/html').documentElement;\n } else if (html instanceof Element) {\n dom = html;\n } else {\n throw new Error('dom is not a recognized type');\n }\n\n for (const transformer of transformers) {\n dom = await transformer(dom);\n }\n\n return dom;\n};\n"],"names":[],"mappings":"AAkBa,MAAA,SAAA,GAAY,OACvB,IAAA,EACA,YACqB,KAAA;AACrB,EAAI,IAAA,GAAA,CAAA;AAEJ,EAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC5B,IAAA,GAAA,GAAM,IAAI,SAAU,EAAA,CAAE,eAAgB,CAAA,IAAA,EAAM,WAAW,CAAE,CAAA,eAAA,CAAA;AAAA,GAC3D,MAAA,IAAW,gBAAgB,OAAS,EAAA;AAClC,IAAM,GAAA,GAAA,IAAA,CAAA;AAAA,GACD,MAAA;AACL,IAAM,MAAA,IAAI,MAAM,8BAA8B,CAAA,CAAA;AAAA,GAChD;AAEA,EAAA,KAAA,MAAW,eAAe,YAAc,EAAA;AACtC,IAAM,GAAA,GAAA,MAAM,YAAY,GAAG,CAAA,CAAA;AAAA,GAC7B;AAEA,EAAO,OAAA,GAAA,CAAA;AACT;;;;"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { createRouteRef } from '@backstage/core-plugin-api';
|
|
2
|
+
|
|
3
|
+
const rootRouteRef = createRouteRef({
|
|
4
|
+
id: "techdocs:index-page"
|
|
5
|
+
});
|
|
6
|
+
const rootDocsRouteRef = createRouteRef({
|
|
7
|
+
id: "techdocs:reader-page",
|
|
8
|
+
params: ["namespace", "kind", "name"]
|
|
9
|
+
});
|
|
10
|
+
const rootCatalogDocsRouteRef = createRouteRef({
|
|
11
|
+
id: "techdocs:catalog-reader-view"
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
export { rootCatalogDocsRouteRef, rootDocsRouteRef, rootRouteRef };
|
|
15
|
+
//# sourceMappingURL=routes.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.esm.js","sources":["../src/routes.ts"],"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 { createRouteRef } from '@backstage/core-plugin-api';\n\nexport const rootRouteRef = createRouteRef({\n id: 'techdocs:index-page',\n});\n\nexport const rootDocsRouteRef = createRouteRef({\n id: 'techdocs:reader-page',\n params: ['namespace', 'kind', 'name'],\n});\n\nexport const rootCatalogDocsRouteRef = createRouteRef({\n id: 'techdocs:catalog-reader-view',\n});\n"],"names":[],"mappings":";;AAkBO,MAAM,eAAe,cAAe,CAAA;AAAA,EACzC,EAAI,EAAA,qBAAA;AACN,CAAC,EAAA;AAEM,MAAM,mBAAmB,cAAe,CAAA;AAAA,EAC7C,EAAI,EAAA,sBAAA;AAAA,EACJ,MAAQ,EAAA,CAAC,WAAa,EAAA,MAAA,EAAQ,MAAM,CAAA;AACtC,CAAC,EAAA;AAEM,MAAM,0BAA0B,cAAe,CAAA;AAAA,EACpD,EAAI,EAAA,8BAAA;AACN,CAAC;;;;"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { SearchContextProvider, useSearch, SearchAutocomplete } from '@backstage/plugin-search-react';
|
|
2
|
+
import React, { useState, useEffect } from 'react';
|
|
3
|
+
import { useNavigate } from 'react-router-dom';
|
|
4
|
+
import { TechDocsSearchResultListItem } from './TechDocsSearchResultListItem.esm.js';
|
|
5
|
+
|
|
6
|
+
const isTechDocsSearchResult = (option) => {
|
|
7
|
+
return option == null ? void 0 : option.document;
|
|
8
|
+
};
|
|
9
|
+
const TechDocsSearchBar = (props) => {
|
|
10
|
+
const { entityId, entityTitle, debounceTime = 150 } = props;
|
|
11
|
+
const [open, setOpen] = useState(false);
|
|
12
|
+
const navigate = useNavigate();
|
|
13
|
+
const {
|
|
14
|
+
setFilters,
|
|
15
|
+
result: { loading, value: searchVal }
|
|
16
|
+
} = useSearch();
|
|
17
|
+
const [options, setOptions] = useState([]);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
let mounted = true;
|
|
20
|
+
if (mounted && searchVal) {
|
|
21
|
+
const searchResults = searchVal.results.slice(0, 10);
|
|
22
|
+
setOptions(searchResults);
|
|
23
|
+
}
|
|
24
|
+
return () => {
|
|
25
|
+
mounted = false;
|
|
26
|
+
};
|
|
27
|
+
}, [loading, searchVal]);
|
|
28
|
+
const { kind, name, namespace } = entityId;
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
setFilters((prevFilters) => {
|
|
31
|
+
return {
|
|
32
|
+
...prevFilters,
|
|
33
|
+
kind,
|
|
34
|
+
namespace,
|
|
35
|
+
name
|
|
36
|
+
};
|
|
37
|
+
});
|
|
38
|
+
}, [kind, namespace, name, setFilters]);
|
|
39
|
+
const handleSelection = (_, selection) => {
|
|
40
|
+
if (isTechDocsSearchResult(selection)) {
|
|
41
|
+
const { location } = selection.document;
|
|
42
|
+
navigate(location);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
return /* @__PURE__ */ React.createElement(
|
|
46
|
+
SearchAutocomplete,
|
|
47
|
+
{
|
|
48
|
+
"data-testid": "techdocs-search-bar",
|
|
49
|
+
size: "small",
|
|
50
|
+
open,
|
|
51
|
+
getOptionLabel: () => "",
|
|
52
|
+
filterOptions: (x) => {
|
|
53
|
+
return x;
|
|
54
|
+
},
|
|
55
|
+
onClose: () => {
|
|
56
|
+
setOpen(false);
|
|
57
|
+
},
|
|
58
|
+
onFocus: () => {
|
|
59
|
+
setOpen(true);
|
|
60
|
+
},
|
|
61
|
+
onChange: handleSelection,
|
|
62
|
+
blurOnSelect: true,
|
|
63
|
+
noOptionsText: "No results found",
|
|
64
|
+
value: null,
|
|
65
|
+
options,
|
|
66
|
+
renderOption: ({ document, highlight }) => /* @__PURE__ */ React.createElement(
|
|
67
|
+
TechDocsSearchResultListItem,
|
|
68
|
+
{
|
|
69
|
+
result: document,
|
|
70
|
+
lineClamp: 3,
|
|
71
|
+
asListItem: false,
|
|
72
|
+
asLink: false,
|
|
73
|
+
title: document.title,
|
|
74
|
+
highlight
|
|
75
|
+
}
|
|
76
|
+
),
|
|
77
|
+
loading,
|
|
78
|
+
inputDebounceTime: debounceTime,
|
|
79
|
+
inputPlaceholder: `Search ${entityTitle || entityId.name} docs`,
|
|
80
|
+
freeSolo: false
|
|
81
|
+
}
|
|
82
|
+
);
|
|
83
|
+
};
|
|
84
|
+
const TechDocsSearch = (props) => {
|
|
85
|
+
const initialState = {
|
|
86
|
+
term: "",
|
|
87
|
+
types: ["techdocs"],
|
|
88
|
+
pageCursor: "",
|
|
89
|
+
filters: props.entityId
|
|
90
|
+
};
|
|
91
|
+
return /* @__PURE__ */ React.createElement(SearchContextProvider, { initialState }, /* @__PURE__ */ React.createElement(TechDocsSearchBar, { ...props }));
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
export { TechDocsSearch };
|
|
95
|
+
//# sourceMappingURL=TechDocsSearch.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TechDocsSearch.esm.js","sources":["../../../src/search/components/TechDocsSearch.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 { CompoundEntityRef } from '@backstage/catalog-model';\nimport { ResultHighlight } from '@backstage/plugin-search-common';\nimport {\n SearchAutocomplete,\n SearchContextProvider,\n useSearch,\n} from '@backstage/plugin-search-react';\nimport React, { useEffect, useState } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { TechDocsSearchResultListItem } from './TechDocsSearchResultListItem';\n\n/**\n * Props for {@link TechDocsSearch}\n *\n * @public\n */\nexport type TechDocsSearchProps = {\n entityId: CompoundEntityRef;\n entityTitle?: string;\n debounceTime?: number;\n};\n\ntype TechDocsDoc = {\n namespace: string;\n kind: string;\n name: string;\n path: string;\n location: string;\n title: string;\n};\n\ntype TechDocsSearchResult = {\n type: string;\n document: TechDocsDoc;\n highlight?: ResultHighlight;\n};\n\nconst isTechDocsSearchResult = (\n option: any,\n): option is TechDocsSearchResult => {\n return option?.document;\n};\n\nconst TechDocsSearchBar = (props: TechDocsSearchProps) => {\n const { entityId, entityTitle, debounceTime = 150 } = props;\n const [open, setOpen] = useState(false);\n const navigate = useNavigate();\n const {\n setFilters,\n result: { loading, value: searchVal },\n } = useSearch();\n const [options, setOptions] = useState<any[]>([]);\n useEffect(() => {\n let mounted = true;\n\n if (mounted && searchVal) {\n // TODO: Change this into getting only subset of search results from the BE in the first place\n // once pagination is implemented for search engines\n // See: https://github.com/backstage/backstage/issues/6062\n const searchResults = searchVal.results.slice(0, 10);\n setOptions(searchResults);\n }\n return () => {\n mounted = false;\n };\n }, [loading, searchVal]);\n\n // Update the filter context when the entityId changes, e.g. when the search\n // bar continues to be rendered, navigating between different TechDocs sites.\n const { kind, name, namespace } = entityId;\n useEffect(() => {\n setFilters(prevFilters => {\n return {\n ...prevFilters,\n kind,\n namespace,\n name,\n };\n });\n }, [kind, namespace, name, setFilters]);\n\n const handleSelection = (\n _: any,\n selection: TechDocsSearchResult | string | null,\n ) => {\n if (isTechDocsSearchResult(selection)) {\n const { location } = selection.document;\n navigate(location);\n }\n };\n\n return (\n <SearchAutocomplete\n data-testid=\"techdocs-search-bar\"\n size=\"small\"\n open={open}\n getOptionLabel={() => ''}\n filterOptions={x => {\n return x; // This is needed to get renderOption to be called after options change. Bug in material-ui?\n }}\n onClose={() => {\n setOpen(false);\n }}\n onFocus={() => {\n setOpen(true);\n }}\n onChange={handleSelection}\n blurOnSelect\n noOptionsText=\"No results found\"\n value={null}\n options={options}\n renderOption={({ document, highlight }) => (\n <TechDocsSearchResultListItem\n result={document}\n lineClamp={3}\n asListItem={false}\n asLink={false}\n title={document.title}\n highlight={highlight}\n />\n )}\n loading={loading}\n inputDebounceTime={debounceTime}\n inputPlaceholder={`Search ${entityTitle || entityId.name} docs`}\n freeSolo={false}\n />\n );\n};\n\n/**\n * Component used to render search bar on TechDocs page, scoped to\n *\n * @public\n */\nexport const TechDocsSearch = (props: TechDocsSearchProps) => {\n const initialState = {\n term: '',\n types: ['techdocs'],\n pageCursor: '',\n filters: props.entityId,\n };\n return (\n <SearchContextProvider initialState={initialState}>\n <TechDocsSearchBar {...props} />\n </SearchContextProvider>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TechDocsSearchResultListItem.esm.js","sources":["../../../src/search/components/TechDocsSearchResultListItem.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, { PropsWithChildren, ReactNode } from 'react';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport { Link } from '@backstage/core-components';\nimport { ResultHighlight } from '@backstage/plugin-search-common';\nimport { HighlightedSearchResultText } from '@backstage/plugin-search-react';\n\nconst useStyles = makeStyles({\n flexContainer: {\n flexWrap: 'wrap',\n },\n itemText: {\n width: '100%',\n marginBottom: '1rem',\n },\n});\n\n/**\n * Props for {@link TechDocsSearchResultListItem}.\n *\n * @public\n */\nexport type TechDocsSearchResultListItemProps = {\n icon?: ReactNode | ((result: any) => ReactNode);\n result?: any;\n highlight?: ResultHighlight;\n rank?: number;\n lineClamp?: number;\n asListItem?: boolean;\n asLink?: boolean;\n title?: string;\n};\n\n/**\n * Component which renders documentation and related metadata.\n *\n * @public\n */\nexport const TechDocsSearchResultListItem = (\n props: TechDocsSearchResultListItemProps,\n) => {\n const {\n result,\n highlight,\n lineClamp = 5,\n asListItem = true,\n asLink = true,\n title,\n icon,\n } = props;\n const classes = useStyles();\n\n const LinkWrapper = ({ children }: PropsWithChildren<{}>) =>\n asLink ? (\n <Link noTrack to={result.location}>\n {children}\n </Link>\n ) : (\n <>{children}</>\n );\n\n const TextItem = () => {\n const resultTitle = highlight?.fields.title ? (\n <HighlightedSearchResultText\n text={highlight.fields.title}\n preTag={highlight.preTag}\n postTag={highlight.postTag}\n />\n ) : (\n result.title\n );\n\n const entityTitle = highlight?.fields.entityTitle ? (\n <HighlightedSearchResultText\n text={highlight.fields.entityTitle}\n preTag={highlight.preTag}\n postTag={highlight.postTag}\n />\n ) : (\n result.entityTitle\n );\n\n const resultName = highlight?.fields.name ? (\n <HighlightedSearchResultText\n text={highlight.fields.name}\n preTag={highlight.preTag}\n postTag={highlight.postTag}\n />\n ) : (\n result.name\n );\n\n if (!result) return null;\n\n return (\n <ListItemText\n className={classes.itemText}\n primaryTypographyProps={{ variant: 'h6' }}\n primary={\n <LinkWrapper>\n {title ? (\n title\n ) : (\n <>\n {resultTitle} | {entityTitle ?? resultName} docs\n </>\n )}\n </LinkWrapper>\n }\n secondary={\n <Typography\n component=\"span\"\n style={{\n display: '-webkit-box',\n WebkitBoxOrient: 'vertical',\n WebkitLineClamp: lineClamp,\n overflow: 'hidden',\n }}\n color=\"textSecondary\"\n variant=\"body2\"\n >\n {highlight?.fields.text ? (\n <HighlightedSearchResultText\n text={highlight.fields.text}\n preTag={highlight.preTag}\n postTag={highlight.postTag}\n />\n ) : (\n result.text\n )}\n </Typography>\n }\n />\n );\n };\n\n const ListItemWrapper = ({ children }: PropsWithChildren<{}>) =>\n asListItem ? (\n <>\n {icon && (\n <ListItemIcon>\n {typeof icon === 'function' ? icon(result) : icon}\n </ListItemIcon>\n )}\n <div className={classes.flexContainer}>{children}</div>\n </>\n ) : (\n <>{children}</>\n );\n\n return (\n <ListItemWrapper>\n <TextItem />\n </ListItemWrapper>\n );\n};\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backstage/plugin-techdocs",
|
|
3
|
-
"version": "1.10.
|
|
3
|
+
"version": "1.10.5-next.0",
|
|
4
4
|
"description": "The Backstage plugin that renders technical documentation for your components",
|
|
5
5
|
"backstage": {
|
|
6
6
|
"role": "frontend-plugin"
|
|
@@ -50,21 +50,21 @@
|
|
|
50
50
|
"test": "backstage-cli package test"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@backstage/catalog-model": "^1.
|
|
53
|
+
"@backstage/catalog-model": "^1.5.0-next.0",
|
|
54
54
|
"@backstage/config": "^1.2.0",
|
|
55
|
-
"@backstage/core-compat-api": "^0.2.
|
|
56
|
-
"@backstage/core-components": "^0.14.
|
|
57
|
-
"@backstage/core-plugin-api": "^1.9.
|
|
55
|
+
"@backstage/core-compat-api": "^0.2.5-next.0",
|
|
56
|
+
"@backstage/core-components": "^0.14.5-next.0",
|
|
57
|
+
"@backstage/core-plugin-api": "^1.9.2",
|
|
58
58
|
"@backstage/errors": "^1.2.4",
|
|
59
|
-
"@backstage/frontend-plugin-api": "^0.6.
|
|
60
|
-
"@backstage/integration": "^1.10.0
|
|
61
|
-
"@backstage/integration-react": "^1.1.26
|
|
62
|
-
"@backstage/plugin-auth-react": "^0.1.
|
|
63
|
-
"@backstage/plugin-catalog-react": "^1.11.
|
|
59
|
+
"@backstage/frontend-plugin-api": "^0.6.5-next.0",
|
|
60
|
+
"@backstage/integration": "^1.10.0",
|
|
61
|
+
"@backstage/integration-react": "^1.1.26",
|
|
62
|
+
"@backstage/plugin-auth-react": "^0.1.1-next.0",
|
|
63
|
+
"@backstage/plugin-catalog-react": "^1.11.4-next.0",
|
|
64
64
|
"@backstage/plugin-search-common": "^1.2.11",
|
|
65
|
-
"@backstage/plugin-search-react": "^1.7.
|
|
66
|
-
"@backstage/plugin-techdocs-react": "^1.2.
|
|
67
|
-
"@backstage/theme": "^0.5.
|
|
65
|
+
"@backstage/plugin-search-react": "^1.7.11-next.0",
|
|
66
|
+
"@backstage/plugin-techdocs-react": "^1.2.4-next.0",
|
|
67
|
+
"@backstage/theme": "^0.5.4-next.0",
|
|
68
68
|
"@material-ui/core": "^4.12.2",
|
|
69
69
|
"@material-ui/icons": "^4.9.1",
|
|
70
70
|
"@material-ui/lab": "4.0.0-alpha.61",
|
|
@@ -79,14 +79,14 @@
|
|
|
79
79
|
"react-use": "^17.2.4"
|
|
80
80
|
},
|
|
81
81
|
"devDependencies": {
|
|
82
|
-
"@backstage/cli": "^0.26.
|
|
83
|
-
"@backstage/core-app-api": "^1.12.4
|
|
84
|
-
"@backstage/dev-utils": "^1.0.
|
|
85
|
-
"@backstage/plugin-techdocs-module-addons-contrib": "^1.1.
|
|
86
|
-
"@backstage/test-utils": "^1.5.
|
|
87
|
-
"@testing-library/dom": "^
|
|
82
|
+
"@backstage/cli": "^0.26.5-next.0",
|
|
83
|
+
"@backstage/core-app-api": "^1.12.4",
|
|
84
|
+
"@backstage/dev-utils": "^1.0.32-next.0",
|
|
85
|
+
"@backstage/plugin-techdocs-module-addons-contrib": "^1.1.10-next.0",
|
|
86
|
+
"@backstage/test-utils": "^1.5.5-next.0",
|
|
87
|
+
"@testing-library/dom": "^10.0.0",
|
|
88
88
|
"@testing-library/jest-dom": "^6.0.0",
|
|
89
|
-
"@testing-library/react": "^
|
|
89
|
+
"@testing-library/react": "^15.0.0",
|
|
90
90
|
"@testing-library/user-event": "^14.0.0",
|
|
91
91
|
"@types/dompurify": "^3.0.0",
|
|
92
92
|
"@types/event-source-polyfill": "^1.0.0",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DocsCardGrid-AWTYz1vR.esm.js","sources":["../../src/home/components/Grids/DocsCardGrid.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 { rootDocsRouteRef } from '../../../routes';\nimport { toLowerMaybe } from '../../../helpers';\nimport { Entity } from '@backstage/catalog-model';\nimport { useApi, useRouteRef, configApiRef } from '@backstage/core-plugin-api';\nimport {\n LinkButton,\n ItemCardGrid,\n ItemCardHeader,\n} from '@backstage/core-components';\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport CardContent from '@material-ui/core/CardContent';\nimport CardMedia from '@material-ui/core/CardMedia';\nimport React from 'react';\n\n/**\n * Props for {@link DocsCardGrid}\n *\n * @public\n */\nexport type DocsCardGridProps = {\n entities: Entity[] | undefined;\n};\n\n/**\n * Component which accepts a list of entities and renders a item card for each entity\n *\n * @public\n */\nexport const DocsCardGrid = (props: DocsCardGridProps) => {\n const { entities } = props;\n const getRouteToReaderPageFor = useRouteRef(rootDocsRouteRef);\n const config = useApi(configApiRef);\n if (!entities) return null;\n return (\n <ItemCardGrid data-testid=\"docs-explore\">\n {!entities?.length\n ? null\n : entities.map((entity, index: number) => (\n <Card key={index}>\n <CardMedia>\n <ItemCardHeader\n title={entity.metadata.title ?? entity.metadata.name}\n />\n </CardMedia>\n <CardContent>{entity.metadata.description}</CardContent>\n <CardActions>\n <LinkButton\n to={getRouteToReaderPageFor({\n namespace: toLowerMaybe(\n entity.metadata.namespace ?? 'default',\n config,\n ),\n kind: toLowerMaybe(entity.kind, config),\n name: toLowerMaybe(entity.metadata.name, config),\n })}\n color=\"primary\"\n data-testid=\"read_docs\"\n >\n Read Docs\n </LinkButton>\n </CardActions>\n </Card>\n ))}\n </ItemCardGrid>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AA6Ca,MAAA,YAAA,GAAe,CAAC,KAA6B,KAAA;AACxD,EAAM,MAAA,EAAE,UAAa,GAAA,KAAA,CAAA;AACrB,EAAM,MAAA,uBAAA,GAA0B,YAAY,gBAAgB,CAAA,CAAA;AAC5D,EAAM,MAAA,MAAA,GAAS,OAAO,YAAY,CAAA,CAAA;AAClC,EAAA,IAAI,CAAC,QAAA;AAAU,IAAO,OAAA,IAAA,CAAA;AACtB,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,YAAA,EAAA,EAAa,aAAY,EAAA,cAAA,EAAA,EACvB,EAAC,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,QAAA,CAAU,MACR,CAAA,GAAA,IAAA,GACA,QAAS,CAAA,GAAA,CAAI,CAAC,MAAA,EAAQ,KAAe,KAAA;AAtD/C,IAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAuDY,IAAA,uBAAA,KAAA,CAAA,aAAA,CAAC,IAAK,EAAA,EAAA,GAAA,EAAK,KACT,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,SACC,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,QAAO,EAAO,GAAA,MAAA,CAAA,QAAA,CAAS,KAAhB,KAAA,IAAA,GAAA,EAAA,GAAyB,OAAO,QAAS,CAAA,IAAA;AAAA,OAAA;AAAA,KAEpD,mBACC,KAAA,CAAA,aAAA,CAAA,WAAA,EAAA,IAAA,EAAa,OAAO,QAAS,CAAA,WAAY,CAC1C,kBAAA,KAAA,CAAA,aAAA,CAAC,WACC,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,IAAI,uBAAwB,CAAA;AAAA,UAC1B,SAAW,EAAA,YAAA;AAAA,YACT,CAAA,EAAA,GAAA,MAAA,CAAO,QAAS,CAAA,SAAA,KAAhB,IAA6B,GAAA,EAAA,GAAA,SAAA;AAAA,YAC7B,MAAA;AAAA,WACF;AAAA,UACA,IAAM,EAAA,YAAA,CAAa,MAAO,CAAA,IAAA,EAAM,MAAM,CAAA;AAAA,UACtC,IAAM,EAAA,YAAA,CAAa,MAAO,CAAA,QAAA,CAAS,MAAM,MAAM,CAAA;AAAA,SAChD,CAAA;AAAA,QACD,KAAM,EAAA,SAAA;AAAA,QACN,aAAY,EAAA,WAAA;AAAA,OAAA;AAAA,MACb,WAAA;AAAA,KAGH,CACF,CAAA,CAAA;AAAA,GACD,CACP,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { Routes, Route, useRoutes } from 'react-router-dom';
|
|
3
|
-
import { getCompoundEntityRef, parseEntityRef } from '@backstage/catalog-model';
|
|
4
|
-
import { techdocsStorageApiRef, techdocsApiRef } from '@backstage/plugin-techdocs-react';
|
|
5
|
-
import { T as TechDocsStorageClient, a as TechDocsClient, r as rootRouteRef, b as rootDocsRouteRef, c as rootCatalogDocsRouteRef } from './routes-VopnMGN0.esm.js';
|
|
6
|
-
import { createPlugin, createApiFactory, configApiRef, discoveryApiRef, identityApiRef, fetchApiRef, createRoutableExtension } from '@backstage/core-plugin-api';
|
|
7
|
-
import { createSearchResultListItemExtension } from '@backstage/plugin-search-react';
|
|
8
|
-
import { e as TechDocsReaderPageSubheader, d as TechDocsReaderPageContent, T as TechDocsReaderPage$1 } from './TechDocsReaderPage-jsKVX28r.esm.js';
|
|
9
|
-
import { c as TechDocsIndexPage$1 } from './TechDocsIndexPage-BCP1ggek.esm.js';
|
|
10
|
-
import { useEntity, MissingAnnotationEmptyState } from '@backstage/plugin-catalog-react';
|
|
11
|
-
|
|
12
|
-
const techdocsPlugin = createPlugin({
|
|
13
|
-
id: "techdocs",
|
|
14
|
-
apis: [
|
|
15
|
-
createApiFactory({
|
|
16
|
-
api: techdocsStorageApiRef,
|
|
17
|
-
deps: {
|
|
18
|
-
configApi: configApiRef,
|
|
19
|
-
discoveryApi: discoveryApiRef,
|
|
20
|
-
identityApi: identityApiRef,
|
|
21
|
-
fetchApi: fetchApiRef
|
|
22
|
-
},
|
|
23
|
-
factory: ({ configApi, discoveryApi, identityApi, fetchApi }) => new TechDocsStorageClient({
|
|
24
|
-
configApi,
|
|
25
|
-
discoveryApi,
|
|
26
|
-
identityApi,
|
|
27
|
-
fetchApi
|
|
28
|
-
})
|
|
29
|
-
}),
|
|
30
|
-
createApiFactory({
|
|
31
|
-
api: techdocsApiRef,
|
|
32
|
-
deps: {
|
|
33
|
-
configApi: configApiRef,
|
|
34
|
-
discoveryApi: discoveryApiRef,
|
|
35
|
-
fetchApi: fetchApiRef
|
|
36
|
-
},
|
|
37
|
-
factory: ({ configApi, discoveryApi, fetchApi }) => new TechDocsClient({
|
|
38
|
-
configApi,
|
|
39
|
-
discoveryApi,
|
|
40
|
-
fetchApi
|
|
41
|
-
})
|
|
42
|
-
})
|
|
43
|
-
],
|
|
44
|
-
routes: {
|
|
45
|
-
root: rootRouteRef,
|
|
46
|
-
docRoot: rootDocsRouteRef,
|
|
47
|
-
entityContent: rootCatalogDocsRouteRef
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
const TechdocsPage = techdocsPlugin.provide(
|
|
51
|
-
createRoutableExtension({
|
|
52
|
-
name: "TechdocsPage",
|
|
53
|
-
component: () => Promise.resolve().then(function () { return Router$1; }).then((m) => m.Router),
|
|
54
|
-
mountPoint: rootRouteRef
|
|
55
|
-
})
|
|
56
|
-
);
|
|
57
|
-
const EntityTechdocsContent = techdocsPlugin.provide(
|
|
58
|
-
createRoutableExtension({
|
|
59
|
-
name: "EntityTechdocsContent",
|
|
60
|
-
component: () => Promise.resolve().then(function () { return Router$1; }).then((m) => m.EmbeddedDocsRouter),
|
|
61
|
-
mountPoint: rootCatalogDocsRouteRef
|
|
62
|
-
})
|
|
63
|
-
);
|
|
64
|
-
const TechDocsCustomHome = techdocsPlugin.provide(
|
|
65
|
-
createRoutableExtension({
|
|
66
|
-
name: "TechDocsCustomHome",
|
|
67
|
-
component: () => import('./TechDocsCustomHome-CTmEWYTg.esm.js').then(
|
|
68
|
-
(m) => m.TechDocsCustomHome
|
|
69
|
-
),
|
|
70
|
-
mountPoint: rootRouteRef
|
|
71
|
-
})
|
|
72
|
-
);
|
|
73
|
-
const TechDocsIndexPage = techdocsPlugin.provide(
|
|
74
|
-
createRoutableExtension({
|
|
75
|
-
name: "TechDocsIndexPage",
|
|
76
|
-
component: () => import('./TechDocsIndexPage-BCP1ggek.esm.js').then(function (n) { return n.d; }).then(
|
|
77
|
-
(m) => m.TechDocsIndexPage
|
|
78
|
-
),
|
|
79
|
-
mountPoint: rootRouteRef
|
|
80
|
-
})
|
|
81
|
-
);
|
|
82
|
-
const TechDocsReaderPage = techdocsPlugin.provide(
|
|
83
|
-
createRoutableExtension({
|
|
84
|
-
name: "TechDocsReaderPage",
|
|
85
|
-
component: () => import('./index-up5BptkF.esm.js').then(
|
|
86
|
-
(m) => m.TechDocsReaderPage
|
|
87
|
-
),
|
|
88
|
-
mountPoint: rootDocsRouteRef
|
|
89
|
-
})
|
|
90
|
-
);
|
|
91
|
-
const TechDocsSearchResultListItem = techdocsPlugin.provide(
|
|
92
|
-
createSearchResultListItemExtension({
|
|
93
|
-
name: "TechDocsSearchResultListItem",
|
|
94
|
-
component: () => import('./TechDocsSearchResultListItem-4Qzh5-3s.esm.js').then(
|
|
95
|
-
(m) => m.TechDocsSearchResultListItem
|
|
96
|
-
),
|
|
97
|
-
predicate: (result) => result.type === "techdocs"
|
|
98
|
-
})
|
|
99
|
-
);
|
|
100
|
-
|
|
101
|
-
const TECHDOCS_EXTERNAL_ANNOTATION$1 = "backstage.io/techdocs-entity";
|
|
102
|
-
const EntityPageDocs = ({ entity }) => {
|
|
103
|
-
var _a, _b;
|
|
104
|
-
let entityRef = getCompoundEntityRef(entity);
|
|
105
|
-
if ((_a = entity.metadata.annotations) == null ? void 0 : _a[TECHDOCS_EXTERNAL_ANNOTATION$1]) {
|
|
106
|
-
try {
|
|
107
|
-
entityRef = parseEntityRef(
|
|
108
|
-
(_b = entity.metadata.annotations) == null ? void 0 : _b[TECHDOCS_EXTERNAL_ANNOTATION$1]
|
|
109
|
-
);
|
|
110
|
-
} catch {
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
return /* @__PURE__ */ React.createElement(TechDocsReaderPage, { entityRef }, /* @__PURE__ */ React.createElement(TechDocsReaderPageSubheader, null), /* @__PURE__ */ React.createElement(TechDocsReaderPageContent, { withSearch: false }));
|
|
114
|
-
};
|
|
115
|
-
|
|
116
|
-
const TECHDOCS_ANNOTATION = "backstage.io/techdocs-ref";
|
|
117
|
-
const TECHDOCS_EXTERNAL_ANNOTATION = "backstage.io/techdocs-entity";
|
|
118
|
-
const isTechDocsAvailable = (entity) => {
|
|
119
|
-
var _a, _b, _c, _d;
|
|
120
|
-
return Boolean((_b = (_a = entity == null ? void 0 : entity.metadata) == null ? void 0 : _a.annotations) == null ? void 0 : _b[TECHDOCS_ANNOTATION]) || Boolean((_d = (_c = entity == null ? void 0 : entity.metadata) == null ? void 0 : _c.annotations) == null ? void 0 : _d[TECHDOCS_EXTERNAL_ANNOTATION]);
|
|
121
|
-
};
|
|
122
|
-
const Router = () => {
|
|
123
|
-
return /* @__PURE__ */ React.createElement(Routes, null, /* @__PURE__ */ React.createElement(Route, { path: "/", element: /* @__PURE__ */ React.createElement(TechDocsIndexPage$1, null) }), /* @__PURE__ */ React.createElement(
|
|
124
|
-
Route,
|
|
125
|
-
{
|
|
126
|
-
path: "/:namespace/:kind/:name/*",
|
|
127
|
-
element: /* @__PURE__ */ React.createElement(TechDocsReaderPage$1, null)
|
|
128
|
-
}
|
|
129
|
-
));
|
|
130
|
-
};
|
|
131
|
-
const EmbeddedDocsRouter = (props) => {
|
|
132
|
-
var _a, _b;
|
|
133
|
-
const { children } = props;
|
|
134
|
-
const { entity } = useEntity();
|
|
135
|
-
const element = useRoutes([
|
|
136
|
-
{
|
|
137
|
-
path: "/*",
|
|
138
|
-
element: /* @__PURE__ */ React.createElement(EntityPageDocs, { entity }),
|
|
139
|
-
children: [
|
|
140
|
-
{
|
|
141
|
-
path: "*",
|
|
142
|
-
element: children
|
|
143
|
-
}
|
|
144
|
-
]
|
|
145
|
-
}
|
|
146
|
-
]);
|
|
147
|
-
const projectId = ((_a = entity.metadata.annotations) == null ? void 0 : _a[TECHDOCS_ANNOTATION]) || ((_b = entity.metadata.annotations) == null ? void 0 : _b[TECHDOCS_EXTERNAL_ANNOTATION]);
|
|
148
|
-
if (!projectId) {
|
|
149
|
-
return /* @__PURE__ */ React.createElement(MissingAnnotationEmptyState, { annotation: [TECHDOCS_ANNOTATION] });
|
|
150
|
-
}
|
|
151
|
-
return element;
|
|
152
|
-
};
|
|
153
|
-
|
|
154
|
-
var Router$1 = /*#__PURE__*/Object.freeze({
|
|
155
|
-
__proto__: null,
|
|
156
|
-
EmbeddedDocsRouter: EmbeddedDocsRouter,
|
|
157
|
-
Router: Router,
|
|
158
|
-
isTechDocsAvailable: isTechDocsAvailable
|
|
159
|
-
});
|
|
160
|
-
|
|
161
|
-
export { EntityTechdocsContent as E, Router as R, TechDocsCustomHome as T, TechDocsIndexPage as a, TechdocsPage as b, TechDocsReaderPage as c, TechDocsSearchResultListItem as d, EmbeddedDocsRouter as e, Router$1 as f, isTechDocsAvailable as i, techdocsPlugin as t };
|
|
162
|
-
//# sourceMappingURL=Router-jrzAl2lO.esm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Router-jrzAl2lO.esm.js","sources":["../../src/plugin.ts","../../src/EntityPageDocs.tsx","../../src/Router.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 techdocsApiRef,\n techdocsStorageApiRef,\n} from '@backstage/plugin-techdocs-react';\nimport { TechDocsClient, TechDocsStorageClient } from './client';\nimport {\n rootDocsRouteRef,\n rootRouteRef,\n rootCatalogDocsRouteRef,\n} from './routes';\nimport {\n configApiRef,\n createApiFactory,\n createPlugin,\n createRoutableExtension,\n discoveryApiRef,\n fetchApiRef,\n identityApiRef,\n} from '@backstage/core-plugin-api';\nimport {\n createSearchResultListItemExtension,\n SearchResultListItemExtensionProps,\n} from '@backstage/plugin-search-react';\nimport { TechDocsSearchResultListItemProps } from './search/components/TechDocsSearchResultListItem';\n\n/**\n * The Backstage plugin that renders technical documentation for your components\n *\n * @public\n */\nexport const techdocsPlugin = createPlugin({\n id: 'techdocs',\n apis: [\n createApiFactory({\n api: techdocsStorageApiRef,\n deps: {\n configApi: configApiRef,\n discoveryApi: discoveryApiRef,\n identityApi: identityApiRef,\n fetchApi: fetchApiRef,\n },\n factory: ({ configApi, discoveryApi, identityApi, fetchApi }) =>\n new TechDocsStorageClient({\n configApi,\n discoveryApi,\n identityApi,\n fetchApi,\n }),\n }),\n createApiFactory({\n api: techdocsApiRef,\n deps: {\n configApi: configApiRef,\n discoveryApi: discoveryApiRef,\n fetchApi: fetchApiRef,\n },\n factory: ({ configApi, discoveryApi, fetchApi }) =>\n new TechDocsClient({\n configApi,\n discoveryApi,\n fetchApi,\n }),\n }),\n ],\n routes: {\n root: rootRouteRef,\n docRoot: rootDocsRouteRef,\n entityContent: rootCatalogDocsRouteRef,\n },\n});\n\n/**\n * Routable extension used to render docs\n *\n * @public\n */\nexport const TechdocsPage = techdocsPlugin.provide(\n createRoutableExtension({\n name: 'TechdocsPage',\n component: () => import('./Router').then(m => m.Router),\n mountPoint: rootRouteRef,\n }),\n);\n\n/**\n * Routable extension used to render docs on Entity page\n *\n * @public\n */\nexport const EntityTechdocsContent = techdocsPlugin.provide(\n createRoutableExtension({\n name: 'EntityTechdocsContent',\n component: () => import('./Router').then(m => m.EmbeddedDocsRouter),\n mountPoint: rootCatalogDocsRouteRef,\n }),\n);\n\n/**\n * Component which takes a custom tabs config object and renders a documentation landing page.\n *\n * @public\n */\nexport const TechDocsCustomHome = techdocsPlugin.provide(\n createRoutableExtension({\n name: 'TechDocsCustomHome',\n component: () =>\n import('./home/components/TechDocsCustomHome').then(\n m => m.TechDocsCustomHome,\n ),\n mountPoint: rootRouteRef,\n }),\n);\n\n/**\n * Responsible for rendering the provided router element\n *\n * @public\n */\nexport const TechDocsIndexPage = techdocsPlugin.provide(\n createRoutableExtension({\n name: 'TechDocsIndexPage',\n component: () =>\n import('./home/components/TechDocsIndexPage').then(\n m => m.TechDocsIndexPage,\n ),\n mountPoint: rootRouteRef,\n }),\n);\n\n/**\n * Component responsible for composing a TechDocs reader page experience\n *\n * @public\n */\nexport const TechDocsReaderPage = techdocsPlugin.provide(\n createRoutableExtension({\n name: 'TechDocsReaderPage',\n component: () =>\n import('./reader/components/TechDocsReaderPage').then(\n m => m.TechDocsReaderPage,\n ),\n mountPoint: rootDocsRouteRef,\n }),\n);\n\n/**\n * React extension used to render results on Search page or modal\n *\n * @public\n */\nexport const TechDocsSearchResultListItem: (\n props: SearchResultListItemExtensionProps<TechDocsSearchResultListItemProps>,\n) => JSX.Element | null = techdocsPlugin.provide(\n createSearchResultListItemExtension({\n name: 'TechDocsSearchResultListItem',\n component: () =>\n import('./search/components/TechDocsSearchResultListItem').then(\n m => m.TechDocsSearchResultListItem,\n ),\n predicate: result => result.type === 'techdocs',\n }),\n);\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n Entity,\n getCompoundEntityRef,\n parseEntityRef,\n} from '@backstage/catalog-model';\n\nimport React from 'react';\nimport { TechDocsReaderPage } from './plugin';\nimport { TechDocsReaderPageContent } from './reader/components/TechDocsReaderPageContent';\nimport { TechDocsReaderPageSubheader } from './reader/components/TechDocsReaderPageSubheader';\n\nconst TECHDOCS_EXTERNAL_ANNOTATION = 'backstage.io/techdocs-entity';\n\ntype EntityPageDocsProps = { entity: Entity };\n\nexport const EntityPageDocs = ({ entity }: EntityPageDocsProps) => {\n let entityRef = getCompoundEntityRef(entity);\n\n if (entity.metadata.annotations?.[TECHDOCS_EXTERNAL_ANNOTATION]) {\n try {\n entityRef = parseEntityRef(\n entity.metadata.annotations?.[TECHDOCS_EXTERNAL_ANNOTATION],\n );\n } catch {\n // not a fan of this but we don't care if the parseEntityRef fails\n }\n }\n\n return (\n <TechDocsReaderPage entityRef={entityRef}>\n <TechDocsReaderPageSubheader />\n <TechDocsReaderPageContent withSearch={false} />\n </TechDocsReaderPage>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { PropsWithChildren } from 'react';\nimport { Route, Routes, useRoutes } from 'react-router-dom';\n\nimport { Entity } from '@backstage/catalog-model';\nimport { EntityPageDocs } from './EntityPageDocs';\nimport { TechDocsIndexPage } from './home/components/TechDocsIndexPage';\nimport { TechDocsReaderPage } from './reader/components/TechDocsReaderPage';\nimport {\n useEntity,\n MissingAnnotationEmptyState,\n} from '@backstage/plugin-catalog-react';\n\nconst TECHDOCS_ANNOTATION = 'backstage.io/techdocs-ref';\n\nconst TECHDOCS_EXTERNAL_ANNOTATION = 'backstage.io/techdocs-entity';\n\n/**\n * Helper that takes in entity and returns true/false if TechDocs is available for the entity\n *\n * @public\n */\nexport const isTechDocsAvailable = (entity: Entity) =>\n Boolean(entity?.metadata?.annotations?.[TECHDOCS_ANNOTATION]) ||\n Boolean(entity?.metadata?.annotations?.[TECHDOCS_EXTERNAL_ANNOTATION]);\n\n/**\n * Responsible for registering routes for TechDocs, TechDocs Homepage and separate TechDocs page\n *\n * @public\n */\nexport const Router = () => {\n return (\n <Routes>\n <Route path=\"/\" element={<TechDocsIndexPage />} />\n <Route\n path=\"/:namespace/:kind/:name/*\"\n element={<TechDocsReaderPage />}\n />\n </Routes>\n );\n};\n\n/**\n * Responsible for registering route to view docs on Entity page\n *\n * @public\n */\nexport const EmbeddedDocsRouter = (props: PropsWithChildren<{}>) => {\n const { children } = props;\n const { entity } = useEntity();\n\n // Using objects instead of <Route> elements, otherwise \"outlet\" will be null on sub-pages and add-ons won't render\n const element = useRoutes([\n {\n path: '/*',\n element: <EntityPageDocs entity={entity} />,\n children: [\n {\n path: '*',\n element: children,\n },\n ],\n },\n ]);\n\n const projectId =\n entity.metadata.annotations?.[TECHDOCS_ANNOTATION] ||\n entity.metadata.annotations?.[TECHDOCS_EXTERNAL_ANNOTATION];\n\n if (!projectId) {\n return <MissingAnnotationEmptyState annotation={[TECHDOCS_ANNOTATION]} />;\n }\n\n return element;\n};\n"],"names":["TECHDOCS_EXTERNAL_ANNOTATION","TechDocsIndexPage","TechDocsReaderPage"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TechDocsCustomHome-CTmEWYTg.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/esm/useAsync';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { CSSProperties } from '@material-ui/styles/withStyles';\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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"}
|