@backstage/plugin-techdocs 1.18.2 → 1.19.0-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/CHANGELOG.md +40 -2
  2. package/dist/EntityPageDocs.esm.js +3 -1
  3. package/dist/EntityPageDocs.esm.js.map +1 -1
  4. package/dist/Router.esm.js +11 -4
  5. package/dist/Router.esm.js.map +1 -1
  6. package/dist/alpha/addonsApi.esm.js.map +1 -1
  7. package/dist/alpha/components/TechDocsIndexPageContent.esm.js.map +1 -1
  8. package/dist/alpha/components/TechDocsReaderContent.esm.js +2 -1
  9. package/dist/alpha/components/TechDocsReaderContent.esm.js.map +1 -1
  10. package/dist/alpha/components/TechDocsReaderEntityCard.esm.js.map +1 -1
  11. package/dist/alpha/components/TechDocsReaderEntityCard.module.css.esm.js.map +1 -1
  12. package/dist/alpha/components/TechDocsReaderHeader.esm.js.map +1 -1
  13. package/dist/alpha/components/TechDocsReaderLayout.esm.js +2 -2
  14. package/dist/alpha/components/TechDocsReaderLayout.esm.js.map +1 -1
  15. package/dist/alpha/components/TechDocsReaderPage.esm.js +10 -2
  16. package/dist/alpha/components/TechDocsReaderPage.esm.js.map +1 -1
  17. package/dist/alpha/components/TechDocsReaderSearch.esm.js.map +1 -1
  18. package/dist/alpha/hooks/useTechdocsReaderIconLinkProps.esm.js.map +1 -1
  19. package/dist/alpha.d.ts +4 -2
  20. package/dist/alpha.esm.js +9 -3
  21. package/dist/alpha.esm.js.map +1 -1
  22. package/dist/api.esm.js.map +1 -1
  23. package/dist/client.esm.js.map +1 -1
  24. package/dist/helpers.esm.js.map +1 -1
  25. package/dist/home/components/DefaultTechDocsHome.esm.js.map +1 -1
  26. package/dist/home/components/Grids/DocsCardGrid.esm.js.map +1 -1
  27. package/dist/home/components/Grids/EntityListDocsGrid.esm.js.map +1 -1
  28. package/dist/home/components/Grids/InfoCardGrid.esm.js.map +1 -1
  29. package/dist/home/components/Tables/CursorPaginatedDocsTable.esm.js.map +1 -1
  30. package/dist/home/components/Tables/DocsTable.esm.js.map +1 -1
  31. package/dist/home/components/Tables/EntityListDocsTable.esm.js.map +1 -1
  32. package/dist/home/components/Tables/OffsetPaginatedDocsTable.esm.js.map +1 -1
  33. package/dist/home/components/Tables/actions.esm.js.map +1 -1
  34. package/dist/home/components/Tables/columns.esm.js.map +1 -1
  35. package/dist/home/components/Tables/helpers.esm.js.map +1 -1
  36. package/dist/home/components/TechDocsCustomHome.esm.js.map +1 -1
  37. package/dist/home/components/TechDocsIndexPage.esm.js.map +1 -1
  38. package/dist/home/components/TechDocsPageWrapper.esm.js.map +1 -1
  39. package/dist/home/components/TechDocsPicker.esm.js.map +1 -1
  40. package/dist/hooks/useTechDocsReaderContentData.esm.js +5 -2
  41. package/dist/hooks/useTechDocsReaderContentData.esm.js.map +1 -1
  42. package/dist/hooks/useTechDocsReaderHeaderData.esm.js.map +1 -1
  43. package/dist/hooks/useTechDocsSearch.esm.js.map +1 -1
  44. package/dist/index.d.ts +4 -0
  45. package/dist/node_modules_dist/style-inject/dist/style-inject.es.esm.js.map +1 -1
  46. package/dist/plugin.esm.js +2 -2
  47. package/dist/plugin.esm.js.map +1 -1
  48. package/dist/plugins/techdocs/package.json.esm.js +1 -1
  49. package/dist/plugins/techdocs/package.json.esm.js.map +1 -1
  50. package/dist/reader/components/TechDocsBuildLogs.esm.js.map +1 -1
  51. package/dist/reader/components/TechDocsNotFound.esm.js +5 -19
  52. package/dist/reader/components/TechDocsNotFound.esm.js.map +1 -1
  53. package/dist/reader/components/TechDocsReaderPage/TechDocsReaderPage.esm.js +2 -2
  54. package/dist/reader/components/TechDocsReaderPage/TechDocsReaderPage.esm.js.map +1 -1
  55. package/dist/reader/components/TechDocsReaderPage/useExternalRedirect.esm.js.map +1 -1
  56. package/dist/reader/components/TechDocsReaderPageContent/TechDocsReaderPageContent.esm.js +2 -1
  57. package/dist/reader/components/TechDocsReaderPageContent/TechDocsReaderPageContent.esm.js.map +1 -1
  58. package/dist/reader/components/TechDocsReaderPageContent/TechDocsReaderPageContentAddons.esm.js.map +1 -1
  59. package/dist/reader/components/TechDocsReaderPageContent/dom.esm.js +5 -3
  60. package/dist/reader/components/TechDocsReaderPageContent/dom.esm.js.map +1 -1
  61. package/dist/reader/components/TechDocsReaderPageContent/useNavigateUrl.esm.js.map +1 -1
  62. package/dist/reader/components/TechDocsReaderPageHeader/TechDocsReaderPageHeader.esm.js.map +1 -1
  63. package/dist/reader/components/TechDocsReaderPageSubheader/TechDocsReaderPageSubheader.esm.js.map +1 -1
  64. package/dist/reader/components/TechDocsReaderProvider.esm.js.map +1 -1
  65. package/dist/reader/components/TechDocsRedirectNotification/TechDocsRedirectNotification.esm.js.map +1 -1
  66. package/dist/reader/components/TechDocsStateIndicator.esm.js +2 -8
  67. package/dist/reader/components/TechDocsStateIndicator.esm.js.map +1 -1
  68. package/dist/reader/components/useReaderState.esm.js.map +1 -1
  69. package/dist/reader/transformers/addBaseUrl.esm.js.map +1 -1
  70. package/dist/reader/transformers/addGitFeedbackLink.esm.js.map +1 -1
  71. package/dist/reader/transformers/addLinkClickListener.esm.js.map +1 -1
  72. package/dist/reader/transformers/addNavLinkKeyboardToggle.esm.js.map +1 -1
  73. package/dist/reader/transformers/addSidebarToggle.esm.js.map +1 -1
  74. package/dist/reader/transformers/copyToClipboard.esm.js.map +1 -1
  75. package/dist/reader/transformers/handleMetaRedirects.esm.js.map +1 -1
  76. package/dist/reader/transformers/html/hooks/attributes.esm.js.map +1 -1
  77. package/dist/reader/transformers/html/hooks/iframes.esm.js.map +1 -1
  78. package/dist/reader/transformers/html/hooks/links.esm.js.map +1 -1
  79. package/dist/reader/transformers/html/hooks/metatags.esm.js.map +1 -1
  80. package/dist/reader/transformers/html/transformer.esm.js.map +1 -1
  81. package/dist/reader/transformers/html/utils.esm.js.map +1 -1
  82. package/dist/reader/transformers/onCssReady.esm.js.map +1 -1
  83. package/dist/reader/transformers/removeMkdocsHeader.esm.js.map +1 -1
  84. package/dist/reader/transformers/renderReactElement.esm.js.map +1 -1
  85. package/dist/reader/transformers/rewriteDocLinks.esm.js.map +1 -1
  86. package/dist/reader/transformers/scrollIntoNavigation.esm.js.map +1 -1
  87. package/dist/reader/transformers/simplifyMkdocsFooter.esm.js.map +1 -1
  88. package/dist/reader/transformers/styles/rules/animations.esm.js.map +1 -1
  89. package/dist/reader/transformers/styles/rules/extensions.esm.js.map +1 -1
  90. package/dist/reader/transformers/styles/rules/layout.esm.js.map +1 -1
  91. package/dist/reader/transformers/styles/rules/palette.esm.js.map +1 -1
  92. package/dist/reader/transformers/styles/rules/reset.esm.js.map +1 -1
  93. package/dist/reader/transformers/styles/rules/rules.esm.js.map +1 -1
  94. package/dist/reader/transformers/styles/rules/typeset.esm.js.map +1 -1
  95. package/dist/reader/transformers/styles/rules/variables.esm.js.map +1 -1
  96. package/dist/reader/transformers/styles/transformer.esm.js.map +1 -1
  97. package/dist/reader/transformers/transformer.esm.js.map +1 -1
  98. package/dist/routes.esm.js.map +1 -1
  99. package/dist/search/components/TechDocsSearch.esm.js.map +1 -1
  100. package/dist/search/components/TechDocsSearchResultListItem.esm.js.map +1 -1
  101. package/dist/search/hooks/useTechDocsLocation.esm.js.map +1 -1
  102. package/dist/translation.esm.js +0 -4
  103. package/dist/translation.esm.js.map +1 -1
  104. package/package.json +24 -24
package/CHANGELOG.md CHANGED
@@ -1,10 +1,48 @@
1
1
  # @backstage/plugin-techdocs
2
2
 
3
- ## 1.18.2
3
+ ## 1.19.0-next.1
4
+
5
+ ### Minor Changes
6
+
7
+ - 4a5b52d: TechDocs now uses the default `NotFoundErrorPage` when documentation is missing, instead of its own TechDocs-specific page.
8
+
9
+ This means if you have provided an override to the `NotFoundErrorPage` component it will now be used within TechDocs when documentation is missing as well.
10
+
11
+ One thing to note is that the default not found page shows "PAGE NOT FOUND" rather than "Documentation not found".
12
+
13
+ ### Patch Changes
14
+
15
+ - Updated dependencies
16
+ - @backstage/plugin-catalog-react@3.2.4-next.1
17
+ - @backstage/plugin-techdocs-react@1.3.16-next.2
18
+ - @backstage/core-components@0.18.15-next.2
19
+ - @backstage/integration@2.1.3-next.1
20
+ - @backstage/plugin-techdocs-common@0.1.2-next.0
21
+
22
+ ## 1.19.0-next.0
23
+
24
+ ### Minor Changes
25
+
26
+ - 80a0da9: Added `withoutFeedbackLink` prop to `page:techdocs/reader` and `entity-content:techdocs` extensions, which can be set to `true` to disable the feedback button in the rendered documentation.
4
27
 
5
28
  ### Patch Changes
6
29
 
7
- - f712f71: Fixed TechDocs addons silently not rendering in apps using the new frontend system, on both the standalone documentation reader page and the entity documentation tab.
30
+ - 24fd0e8: Fixed TechDocs addons silently not rendering in apps using the new frontend system, on both the standalone documentation reader page and the entity documentation tab.
31
+ - Updated dependencies
32
+ - @backstage/integration@2.1.3-next.0
33
+ - @backstage/config@1.3.10-next.0
34
+ - @backstage/errors@1.3.2-next.0
35
+ - @backstage/integration-react@1.2.23-next.0
36
+ - @backstage/core-components@0.18.15-next.0
37
+ - @backstage/core-plugin-api@1.12.11-next.0
38
+ - @backstage/frontend-plugin-api@0.18.2-next.0
39
+ - @backstage/plugin-techdocs-react@1.3.16-next.0
40
+ - @backstage/catalog-client@1.16.3-next.0
41
+ - @backstage/catalog-model@1.10.2-next.0
42
+ - @backstage/plugin-auth-react@0.1.32-next.0
43
+ - @backstage/plugin-catalog-react@3.2.4-next.0
44
+ - @backstage/plugin-search-common@1.2.26-next.0
45
+ - @backstage/plugin-search-react@1.11.9-next.0
8
46
 
9
47
  ## 1.18.1
10
48
 
@@ -9,7 +9,8 @@ import { useEntityPageTechDocsRedirect } from './search/hooks/useTechDocsLocatio
9
9
 
10
10
  const EntityPageDocs = ({
11
11
  entity,
12
- withSearch = true
12
+ withSearch = true,
13
+ withFeedbackLink
13
14
  }) => {
14
15
  let entityRef = getCompoundEntityRef(entity);
15
16
  const searchResultUrlMapper = useEntityPageTechDocsRedirect(entityRef);
@@ -28,6 +29,7 @@ const EntityPageDocs = ({
28
29
  TechDocsReaderPageContent,
29
30
  {
30
31
  withSearch,
32
+ withFeedbackLink,
31
33
  searchResultUrlMapper,
32
34
  defaultPath
33
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"EntityPageDocs.esm.js","sources":["../src/EntityPageDocs.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 Entity,\n getCompoundEntityRef,\n parseEntityRef,\n} from '@backstage/catalog-model';\nimport { TECHDOCS_EXTERNAL_ANNOTATION } from '@backstage/plugin-techdocs-common';\nimport { getEntityRootTechDocsPath } from '@backstage/plugin-techdocs-react';\n\nimport { TechDocsReaderPage } from './plugin';\nimport { TechDocsReaderPageContent } from './reader/components/TechDocsReaderPageContent';\nimport { TechDocsReaderPageSubheader } from './reader/components/TechDocsReaderPageSubheader';\nimport { useEntityPageTechDocsRedirect } from './search/hooks/useTechDocsLocation';\n\ntype EntityPageDocsProps = {\n entity: Entity;\n /**\n * Show or hide the content search bar, defaults to true.\n */\n withSearch?: boolean;\n};\n\nexport const EntityPageDocs = ({\n entity,\n withSearch = true,\n}: EntityPageDocsProps) => {\n let entityRef = getCompoundEntityRef(entity);\n\n const searchResultUrlMapper = useEntityPageTechDocsRedirect(entityRef);\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 const defaultPath = getEntityRootTechDocsPath(entity);\n\n return (\n <TechDocsReaderPage entityRef={entityRef}>\n <TechDocsReaderPageSubheader />\n <TechDocsReaderPageContent\n withSearch={withSearch}\n searchResultUrlMapper={searchResultUrlMapper}\n defaultPath={defaultPath}\n />\n </TechDocsReaderPage>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAqCO,MAAM,iBAAiB,CAAC;AAAA,EAC7B,MAAA;AAAA,EACA,UAAA,GAAa;AACf,CAAA,KAA2B;AACzB,EAAA,IAAI,SAAA,GAAY,qBAAqB,MAAM,CAAA;AAE3C,EAAA,MAAM,qBAAA,GAAwB,8BAA8B,SAAS,CAAA;AAErE,EAAA,IAAI,MAAA,CAAO,QAAA,CAAS,WAAA,GAAc,4BAA4B,CAAA,EAAG;AAC/D,IAAA,IAAI;AACF,MAAA,SAAA,GAAY,cAAA;AAAA,QACV,MAAA,CAAO,QAAA,CAAS,WAAA,GAAc,4BAA4B;AAAA,OAC5D;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAEA,EAAA,MAAM,WAAA,GAAc,0BAA0B,MAAM,CAAA;AAEpD,EAAA,uBACE,IAAA,CAAC,sBAAmB,SAAA,EAClB,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,2BAAA,EAAA,EAA4B,CAAA;AAAA,oBAC7B,GAAA;AAAA,MAAC,yBAAA;AAAA,MAAA;AAAA,QACC,UAAA;AAAA,QACA,qBAAA;AAAA,QACA;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"EntityPageDocs.esm.js","sources":["../src/EntityPageDocs.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 Entity,\n getCompoundEntityRef,\n parseEntityRef,\n} from '@backstage/catalog-model';\nimport { TECHDOCS_EXTERNAL_ANNOTATION } from '@backstage/plugin-techdocs-common';\nimport { getEntityRootTechDocsPath } from '@backstage/plugin-techdocs-react';\n\nimport { TechDocsReaderPage } from './plugin';\nimport { TechDocsReaderPageContent } from './reader/components/TechDocsReaderPageContent';\nimport { TechDocsReaderPageSubheader } from './reader/components/TechDocsReaderPageSubheader';\nimport { useEntityPageTechDocsRedirect } from './search/hooks/useTechDocsLocation';\n\ntype EntityPageDocsProps = {\n entity: Entity;\n /**\n * Show or hide the content search bar, defaults to true.\n */\n withSearch?: boolean;\n /**\n * Show or hide the feedback button, defaults to true.\n */\n withFeedbackLink?: boolean;\n};\n\nexport const EntityPageDocs = ({\n entity,\n withSearch = true,\n withFeedbackLink,\n}: EntityPageDocsProps) => {\n let entityRef = getCompoundEntityRef(entity);\n\n const searchResultUrlMapper = useEntityPageTechDocsRedirect(entityRef);\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 const defaultPath = getEntityRootTechDocsPath(entity);\n\n return (\n <TechDocsReaderPage entityRef={entityRef}>\n <TechDocsReaderPageSubheader />\n <TechDocsReaderPageContent\n withSearch={withSearch}\n withFeedbackLink={withFeedbackLink}\n searchResultUrlMapper={searchResultUrlMapper}\n defaultPath={defaultPath}\n />\n </TechDocsReaderPage>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAyCO,MAAM,iBAAiB,CAAC;AAAA,EAC7B,MAAA;AAAA,EACA,UAAA,GAAa,IAAA;AAAA,EACb;AACF,CAAA,KAA2B;AACzB,EAAA,IAAI,SAAA,GAAY,qBAAqB,MAAM,CAAA;AAE3C,EAAA,MAAM,qBAAA,GAAwB,8BAA8B,SAAS,CAAA;AAErE,EAAA,IAAI,MAAA,CAAO,QAAA,CAAS,WAAA,GAAc,4BAA4B,CAAA,EAAG;AAC/D,IAAA,IAAI;AACF,MAAA,SAAA,GAAY,cAAA;AAAA,QACV,MAAA,CAAO,QAAA,CAAS,WAAA,GAAc,4BAA4B;AAAA,OAC5D;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAEA,EAAA,MAAM,WAAA,GAAc,0BAA0B,MAAM,CAAA;AAEpD,EAAA,uBACE,IAAA,CAAC,sBAAmB,SAAA,EAClB,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,2BAAA,EAAA,EAA4B,CAAA;AAAA,oBAC7B,GAAA;AAAA,MAAC,yBAAA;AAAA,MAAA;AAAA,QACC,UAAA;AAAA,QACA,gBAAA;AAAA,QACA,qBAAA;AAAA,QACA;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;;"}
@@ -1,5 +1,5 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { Routes, Route, useRoutes } from 'react-router-dom';
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { useRoutes, Routes, Route } from 'react-router-dom';
3
3
  import { EntityPageDocs } from './EntityPageDocs.esm.js';
4
4
  import { TechDocsIndexPage } from './home/components/TechDocsIndexPage.esm.js';
5
5
  import { TechDocsReaderPage } from './reader/components/TechDocsReaderPage/TechDocsReaderPage.esm.js';
@@ -36,12 +36,19 @@ const TechDocsReaderRouter = (props) => {
36
36
  return element;
37
37
  };
38
38
  const EmbeddedDocsRouter = (props) => {
39
- const { children, emptyState, withSearch = true } = props;
39
+ const { children, emptyState, withSearch = true, withFeedbackLink } = props;
40
40
  const { entity } = useEntity();
41
41
  const element = useRoutes([
42
42
  {
43
43
  path: "/*",
44
- element: /* @__PURE__ */ jsx(EntityPageDocs, { entity, withSearch }),
44
+ element: /* @__PURE__ */ jsx(
45
+ EntityPageDocs,
46
+ {
47
+ entity,
48
+ withSearch,
49
+ withFeedbackLink
50
+ }
51
+ ),
45
52
  children: [
46
53
  {
47
54
  path: "*",
@@ -1 +1 @@
1
- {"version":3,"file":"Router.esm.js","sources":["../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 { ReactElement, 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';\nimport {\n TECHDOCS_ANNOTATION,\n TECHDOCS_EXTERNAL_ANNOTATION,\n} from '@backstage/plugin-techdocs-common';\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\nexport const TechDocsReaderRouter = (props: PropsWithChildren) => {\n const { children } = props;\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: <TechDocsReaderPage />,\n children: [\n {\n path: '*',\n element: children,\n },\n ],\n },\n ]);\n\n return element;\n};\n\nexport const EmbeddedDocsRouter = (\n props: PropsWithChildren<{\n emptyState?: ReactElement;\n withSearch?: boolean;\n }>,\n) => {\n const { children, emptyState, withSearch = true } = 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} withSearch={withSearch} />,\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 (\n emptyState ?? (\n <MissingAnnotationEmptyState annotation={[TECHDOCS_ANNOTATION]} />\n )\n );\n }\n return element;\n};\n\n/**\n * Responsible for registering route to view docs on Entity page\n *\n * @public\n */\nexport const LegacyEmbeddedDocsRouter = ({\n children,\n withSearch = true,\n}: PropsWithChildren<{ withSearch?: boolean }>) => {\n // Wrap the Router to avoid exposing the emptyState prop in the non-alpha\n // public API and make it easier for us to change later.\n return <EmbeddedDocsRouter children={children} withSearch={withSearch} />;\n};\n"],"names":[],"mappings":";;;;;;;;AAqCO,MAAM,mBAAA,GAAsB,CAAC,MAAA,KAClC,OAAA,CAAQ,QAAQ,QAAA,EAAU,WAAA,GAAc,mBAAmB,CAAC,KAC5D,OAAA,CAAQ,MAAA,EAAQ,QAAA,EAAU,WAAA,GAAc,4BAA4B,CAAC;AAOhE,MAAM,SAAS,MAAM;AAC1B,EAAA,4BACG,MAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,SAAM,IAAA,EAAK,GAAA,EAAI,OAAA,kBAAS,GAAA,CAAC,qBAAkB,CAAA,EAAI,CAAA;AAAA,oBAChD,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,2BAAA;AAAA,QACL,OAAA,sBAAU,kBAAA,EAAA,EAAmB;AAAA;AAAA;AAC/B,GAAA,EACF,CAAA;AAEJ;AAEO,MAAM,oBAAA,GAAuB,CAAC,KAAA,KAA6B;AAChE,EAAA,MAAM,EAAE,UAAS,GAAI,KAAA;AAGrB,EAAA,MAAM,UAAU,SAAA,CAAU;AAAA,IACxB;AAAA,MACE,IAAA,EAAM,GAAA;AAAA,MACN,OAAA,sBAAU,kBAAA,EAAA,EAAmB,CAAA;AAAA,MAC7B,QAAA,EAAU;AAAA,QACR;AAAA,UACE,IAAA,EAAM,GAAA;AAAA,UACN,OAAA,EAAS;AAAA;AACX;AACF;AACF,GACD,CAAA;AAED,EAAA,OAAO,OAAA;AACT;AAEO,MAAM,kBAAA,GAAqB,CAChC,KAAA,KAIG;AACH,EAAA,MAAM,EAAE,QAAA,EAAU,UAAA,EAAY,UAAA,GAAa,MAAK,GAAI,KAAA;AACpD,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,SAAA,EAAU;AAG7B,EAAA,MAAM,UAAU,SAAA,CAAU;AAAA,IACxB;AAAA,MACE,IAAA,EAAM,IAAA;AAAA,MACN,OAAA,kBAAS,GAAA,CAAC,cAAA,EAAA,EAAe,MAAA,EAAgB,UAAA,EAAwB,CAAA;AAAA,MACjE,QAAA,EAAU;AAAA,QACR;AAAA,UACE,IAAA,EAAM,GAAA;AAAA,UACN,OAAA,EAAS;AAAA;AACX;AACF;AACF,GACD,CAAA;AAED,EAAA,MAAM,SAAA,GACJ,OAAO,QAAA,CAAS,WAAA,GAAc,mBAAmB,CAAA,IACjD,MAAA,CAAO,QAAA,CAAS,WAAA,GAAc,4BAA4B,CAAA;AAE5D,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OACE,8BACE,GAAA,CAAC,2BAAA,EAAA,EAA4B,UAAA,EAAY,CAAC,mBAAmB,CAAA,EAAG,CAAA;AAAA,EAGtE;AACA,EAAA,OAAO,OAAA;AACT;AAOO,MAAM,2BAA2B,CAAC;AAAA,EACvC,QAAA;AAAA,EACA,UAAA,GAAa;AACf,CAAA,KAAmD;AAGjD,EAAA,uBAAO,GAAA,CAAC,kBAAA,EAAA,EAAmB,QAAA,EAAoB,UAAA,EAAwB,CAAA;AACzE;;;;"}
1
+ {"version":3,"file":"Router.esm.js","sources":["../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 { ReactElement, 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';\nimport {\n TECHDOCS_ANNOTATION,\n TECHDOCS_EXTERNAL_ANNOTATION,\n} from '@backstage/plugin-techdocs-common';\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\nexport const TechDocsReaderRouter = (props: PropsWithChildren) => {\n const { children } = props;\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: <TechDocsReaderPage />,\n children: [\n {\n path: '*',\n element: children,\n },\n ],\n },\n ]);\n\n return element;\n};\n\nexport const EmbeddedDocsRouter = (\n props: PropsWithChildren<{\n emptyState?: ReactElement;\n withSearch?: boolean;\n withFeedbackLink?: boolean;\n }>,\n) => {\n const { children, emptyState, withSearch = true, withFeedbackLink } = 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: (\n <EntityPageDocs\n entity={entity}\n withSearch={withSearch}\n withFeedbackLink={withFeedbackLink}\n />\n ),\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 (\n emptyState ?? (\n <MissingAnnotationEmptyState annotation={[TECHDOCS_ANNOTATION]} />\n )\n );\n }\n return element;\n};\n\n/**\n * Responsible for registering route to view docs on Entity page\n *\n * @public\n */\nexport const LegacyEmbeddedDocsRouter = ({\n children,\n withSearch = true,\n}: PropsWithChildren<{ withSearch?: boolean }>) => {\n // Wrap the Router to avoid exposing the emptyState prop in the non-alpha\n // public API and make it easier for us to change later.\n return <EmbeddedDocsRouter children={children} withSearch={withSearch} />;\n};\n"],"names":[],"mappings":";;;;;;;;AAqCO,MAAM,mBAAA,GAAsB,CAAC,MAAA,KAClC,OAAA,CAAQ,QAAQ,QAAA,EAAU,WAAA,GAAc,mBAAmB,CAAC,KAC5D,OAAA,CAAQ,MAAA,EAAQ,QAAA,EAAU,WAAA,GAAc,4BAA4B,CAAC;AAOhE,MAAM,SAAS,MAAM;AAC1B,EAAA,4BACG,MAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,SAAM,IAAA,EAAK,GAAA,EAAI,OAAA,kBAAS,GAAA,CAAC,qBAAkB,CAAA,EAAI,CAAA;AAAA,oBAChD,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,2BAAA;AAAA,QACL,OAAA,sBAAU,kBAAA,EAAA,EAAmB;AAAA;AAAA;AAC/B,GAAA,EACF,CAAA;AAEJ;AAEO,MAAM,oBAAA,GAAuB,CAAC,KAAA,KAA6B;AAChE,EAAA,MAAM,EAAE,UAAS,GAAI,KAAA;AAGrB,EAAA,MAAM,UAAU,SAAA,CAAU;AAAA,IACxB;AAAA,MACE,IAAA,EAAM,GAAA;AAAA,MACN,OAAA,sBAAU,kBAAA,EAAA,EAAmB,CAAA;AAAA,MAC7B,QAAA,EAAU;AAAA,QACR;AAAA,UACE,IAAA,EAAM,GAAA;AAAA,UACN,OAAA,EAAS;AAAA;AACX;AACF;AACF,GACD,CAAA;AAED,EAAA,OAAO,OAAA;AACT;AAEO,MAAM,kBAAA,GAAqB,CAChC,KAAA,KAKG;AACH,EAAA,MAAM,EAAE,QAAA,EAAU,UAAA,EAAY,UAAA,GAAa,IAAA,EAAM,kBAAiB,GAAI,KAAA;AACtE,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,SAAA,EAAU;AAG7B,EAAA,MAAM,UAAU,SAAA,CAAU;AAAA,IACxB;AAAA,MACE,IAAA,EAAM,IAAA;AAAA,MACN,OAAA,kBACE,GAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,MAAA;AAAA,UACA,UAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA,MAEF,QAAA,EAAU;AAAA,QACR;AAAA,UACE,IAAA,EAAM,GAAA;AAAA,UACN,OAAA,EAAS;AAAA;AACX;AACF;AACF,GACD,CAAA;AAED,EAAA,MAAM,SAAA,GACJ,OAAO,QAAA,CAAS,WAAA,GAAc,mBAAmB,CAAA,IACjD,MAAA,CAAO,QAAA,CAAS,WAAA,GAAc,4BAA4B,CAAA;AAE5D,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OACE,8BACE,GAAA,CAAC,2BAAA,EAAA,EAA4B,UAAA,EAAY,CAAC,mBAAmB,CAAA,EAAG,CAAA;AAAA,EAGtE;AACA,EAAA,OAAO,OAAA;AACT;AAOO,MAAM,2BAA2B,CAAC;AAAA,EACvC,QAAA;AAAA,EACA,UAAA,GAAa;AACf,CAAA,KAAmD;AAGjD,EAAA,uBAAO,GAAA,CAAC,kBAAA,EAAA,EAAmB,QAAA,EAAoB,UAAA,EAAwB,CAAA;AACzE;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"addonsApi.esm.js","sources":["../../src/alpha/addonsApi.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n ApiBlueprint,\n createApiRef,\n createExtensionInput,\n} from '@backstage/frontend-plugin-api';\nimport { AddonBlueprint } from '@backstage/plugin-techdocs-react/alpha';\nimport { TechDocsAddonOptions } from '@backstage/plugin-techdocs-react';\n\ninterface TechDocsAddonsApi {\n getAddons(): TechDocsAddonOptions[];\n}\n\nexport const techdocsAddonsApiRef = createApiRef<TechDocsAddonsApi>({\n id: 'plugin.techdocs.addons',\n});\n\nexport const TechDocsAddonsApiExtension = ApiBlueprint.makeWithOverrides({\n name: 'addons',\n inputs: {\n addons: createExtensionInput([AddonBlueprint.dataRefs.addon]),\n },\n factory(originalFactory, { inputs }) {\n const addons = inputs.addons.map(output =>\n output.get(AddonBlueprint.dataRefs.addon),\n );\n return originalFactory(defineParams =>\n defineParams({\n api: techdocsAddonsApiRef,\n deps: {},\n factory: () => ({\n getAddons: () => addons,\n }),\n }),\n );\n },\n});\n"],"names":[],"mappings":";;;AA4BO,MAAM,uBAAuB,YAAA,CAAgC;AAAA,EAClE,EAAA,EAAI;AACN,CAAC;AAEM,MAAM,0BAAA,GAA6B,aAAa,iBAAA,CAAkB;AAAA,EACvE,IAAA,EAAM,QAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACN,QAAQ,oBAAA,CAAqB,CAAC,cAAA,CAAe,QAAA,CAAS,KAAK,CAAC;AAAA,GAC9D;AAAA,EACA,OAAA,CAAQ,eAAA,EAAiB,EAAE,MAAA,EAAO,EAAG;AACnC,IAAA,MAAM,MAAA,GAAS,OAAO,MAAA,CAAO,GAAA;AAAA,MAAI,CAAA,MAAA,KAC/B,MAAA,CAAO,GAAA,CAAI,cAAA,CAAe,SAAS,KAAK;AAAA,KAC1C;AACA,IAAA,OAAO,eAAA;AAAA,MAAgB,kBACrB,YAAA,CAAa;AAAA,QACX,GAAA,EAAK,oBAAA;AAAA,QACL,MAAM,EAAC;AAAA,QACP,SAAS,OAAO;AAAA,UACd,WAAW,MAAM;AAAA,SACnB;AAAA,OACD;AAAA,KACH;AAAA,EACF;AACF,CAAC;;;;"}
1
+ {"version":3,"file":"addonsApi.esm.js","sources":["../../src/alpha/addonsApi.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n ApiBlueprint,\n createApiRef,\n createExtensionInput,\n} from '@backstage/frontend-plugin-api';\nimport { AddonBlueprint } from '@backstage/plugin-techdocs-react/alpha';\nimport { TechDocsAddonOptions } from '@backstage/plugin-techdocs-react';\n\ninterface TechDocsAddonsApi {\n getAddons(): TechDocsAddonOptions[];\n}\n\nexport const techdocsAddonsApiRef = createApiRef<TechDocsAddonsApi>({\n id: 'plugin.techdocs.addons',\n});\n\nexport const TechDocsAddonsApiExtension = ApiBlueprint.makeWithOverrides({\n name: 'addons',\n inputs: {\n addons: createExtensionInput([AddonBlueprint.dataRefs.addon]),\n },\n factory(originalFactory, { inputs }) {\n const addons = inputs.addons.map(output =>\n output.get(AddonBlueprint.dataRefs.addon),\n );\n return originalFactory(defineParams =>\n defineParams({\n api: techdocsAddonsApiRef,\n deps: {},\n factory: () => ({\n getAddons: () => addons,\n }),\n }),\n );\n },\n});\n"],"names":[],"mappings":";;;AA4BO,MAAM,uBAAuB,YAAA,CAAgC;AAAA,EAClE,EAAA,EAAI;AACN,CAAC;AAEM,MAAM,0BAAA,GAA6B,aAAa,iBAAA,CAAkB;AAAA,EACvE,IAAA,EAAM,QAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACN,QAAQ,oBAAA,CAAqB,CAAC,cAAA,CAAe,QAAA,CAAS,KAAK,CAAC;AAAA,GAC9D;AAAA,EACA,OAAA,CAAQ,eAAA,EAAiB,EAAE,MAAA,EAAO,EAAG;AACnC,IAAA,MAAM,MAAA,GAAS,OAAO,MAAA,CAAO,GAAA;AAAA,MAAI,CAAA,MAAA,KAC/B,MAAA,CAAO,GAAA,CAAI,cAAA,CAAe,SAAS,KAAK;AAAA,KAC1C;AACA,IAAA,OAAO,eAAA;AAAA,MAAgB,kBACrB,YAAA,CAAa;AAAA,QACX,GAAA,EAAK,oBAAA;AAAA,QACL,MAAM,EAAC;AAAA,QACP,SAAS,OAAO;AAAA,UACd,WAAW,MAAM;AAAA,SACnB;AAAA,OACD;AAAA,KACH;AAAA,EACF;AACF,CAAC;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"TechDocsIndexPageContent.esm.js","sources":["../../../src/alpha/components/TechDocsIndexPageContent.tsx"],"sourcesContent":["/*\n * Copyright 2026 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Container } from '@backstage/ui';\nimport {\n CatalogFilterLayout,\n EntityListProvider,\n EntityOwnerPicker,\n EntityTagPicker,\n UserListPicker,\n} from '@backstage/plugin-catalog-react';\nimport { TechDocsPicker } from '../../home/components/TechDocsPicker';\nimport { EntityListDocsTable } from '../../home/components/Tables';\nimport type { TechDocsIndexPageProps } from '../../home/components/TechDocsIndexPage';\n\nexport const TechDocsIndexPageContent = (props: TechDocsIndexPageProps) => {\n const {\n initialFilter = 'owned',\n columns,\n actions,\n ownerPickerMode,\n pagination,\n options,\n } = props;\n\n return (\n <Container mt=\"6\">\n <EntityListProvider pagination={pagination}>\n <CatalogFilterLayout>\n <CatalogFilterLayout.Filters>\n <TechDocsPicker />\n <UserListPicker initialFilter={initialFilter} />\n <EntityOwnerPicker mode={ownerPickerMode} />\n <EntityTagPicker />\n </CatalogFilterLayout.Filters>\n <CatalogFilterLayout.Content>\n <EntityListDocsTable\n actions={actions}\n columns={columns}\n options={options}\n />\n </CatalogFilterLayout.Content>\n </CatalogFilterLayout>\n </EntityListProvider>\n </Container>\n );\n};\n"],"names":[],"mappings":";;;;;;;AA4BO,MAAM,wBAAA,GAA2B,CAAC,KAAA,KAAkC;AACzE,EAAA,MAAM;AAAA,IACJ,aAAA,GAAgB,OAAA;AAAA,IAChB,OAAA;AAAA,IACA,OAAA;AAAA,IACA,eAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF,GAAI,KAAA;AAEJ,EAAA,uBACE,GAAA,CAAC,aAAU,EAAA,EAAG,GAAA,EACZ,8BAAC,kBAAA,EAAA,EAAmB,UAAA,EAClB,+BAAC,mBAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,mBAAA,CAAoB,SAApB,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,cAAA,EAAA,EAAe,CAAA;AAAA,sBAChB,GAAA,CAAC,kBAAe,aAAA,EAA8B,CAAA;AAAA,sBAC9C,GAAA,CAAC,iBAAA,EAAA,EAAkB,IAAA,EAAM,eAAA,EAAiB,CAAA;AAAA,0BACzC,eAAA,EAAA,EAAgB;AAAA,KAAA,EACnB,CAAA;AAAA,oBACA,GAAA,CAAC,mBAAA,CAAoB,OAAA,EAApB,EACC,QAAA,kBAAA,GAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,OAAA;AAAA,QACA,OAAA;AAAA,QACA;AAAA;AAAA,KACF,EACF;AAAA,GAAA,EACF,GACF,CAAA,EACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"TechDocsIndexPageContent.esm.js","sources":["../../../src/alpha/components/TechDocsIndexPageContent.tsx"],"sourcesContent":["/*\n * Copyright 2026 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Container } from '@backstage/ui';\nimport {\n CatalogFilterLayout,\n EntityListProvider,\n EntityOwnerPicker,\n EntityTagPicker,\n UserListPicker,\n} from '@backstage/plugin-catalog-react';\nimport { TechDocsPicker } from '../../home/components/TechDocsPicker';\nimport { EntityListDocsTable } from '../../home/components/Tables';\nimport type { TechDocsIndexPageProps } from '../../home/components/TechDocsIndexPage';\n\nexport const TechDocsIndexPageContent = (props: TechDocsIndexPageProps) => {\n const {\n initialFilter = 'owned',\n columns,\n actions,\n ownerPickerMode,\n pagination,\n options,\n } = props;\n\n return (\n <Container mt=\"6\">\n <EntityListProvider pagination={pagination}>\n <CatalogFilterLayout>\n <CatalogFilterLayout.Filters>\n <TechDocsPicker />\n <UserListPicker initialFilter={initialFilter} />\n <EntityOwnerPicker mode={ownerPickerMode} />\n <EntityTagPicker />\n </CatalogFilterLayout.Filters>\n <CatalogFilterLayout.Content>\n <EntityListDocsTable\n actions={actions}\n columns={columns}\n options={options}\n />\n </CatalogFilterLayout.Content>\n </CatalogFilterLayout>\n </EntityListProvider>\n </Container>\n );\n};\n"],"names":[],"mappings":";;;;;;;AA4BO,MAAM,wBAAA,GAA2B,CAAC,KAAA,KAAkC;AACzE,EAAA,MAAM;AAAA,IACJ,aAAA,GAAgB,OAAA;AAAA,IAChB,OAAA;AAAA,IACA,OAAA;AAAA,IACA,eAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF,GAAI,KAAA;AAEJ,EAAA,uBACE,GAAA,CAAC,aAAU,EAAA,EAAG,GAAA,EACZ,8BAAC,kBAAA,EAAA,EAAmB,UAAA,EAClB,+BAAC,mBAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,mBAAA,CAAoB,SAApB,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,cAAA,EAAA,EAAe,CAAA;AAAA,sBAChB,GAAA,CAAC,kBAAe,aAAA,EAA8B,CAAA;AAAA,sBAC9C,GAAA,CAAC,iBAAA,EAAA,EAAkB,IAAA,EAAM,eAAA,EAAiB,CAAA;AAAA,0BACzC,eAAA,EAAA,EAAgB;AAAA,KAAA,EACnB,CAAA;AAAA,oBACA,GAAA,CAAC,mBAAA,CAAoB,OAAA,EAApB,EACC,QAAA,kBAAA,GAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,OAAA;AAAA,QACA,OAAA;AAAA,QACA;AAAA;AAAA,KACF,EACF;AAAA,GAAA,EACF,GACF,CAAA,EACF,CAAA;AAEJ;;"}
@@ -17,7 +17,8 @@ const TechDocsReaderContent = withTechDocsReaderProvider(
17
17
  NotFoundErrorPage
18
18
  } = useTechDocsReaderContentData({
19
19
  defaultPath: props.defaultPath,
20
- onReady: props.onReady
20
+ onReady: props.onReady,
21
+ withFeedbackLink: props.withFeedbackLink
21
22
  });
22
23
  if (isNotFound) return /* @__PURE__ */ jsx(NotFoundErrorPage, {});
23
24
  if (!isDomReady) {
@@ -1 +1 @@
1
- {"version":3,"file":"TechDocsReaderContent.esm.js","sources":["../../../src/alpha/components/TechDocsReaderContent.tsx"],"sourcesContent":["/*\n * Copyright 2026 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { TechDocsShadowDom } from '@backstage/plugin-techdocs-react';\nimport { Progress } from '@backstage/core-components';\n\nimport { TechDocsStateIndicator } from '../../reader/components/TechDocsStateIndicator';\nimport { withTechDocsReaderProvider } from '../../reader/components/TechDocsReaderProvider';\nimport { TechDocsReaderPageContentAddons } from '../../reader/components/TechDocsReaderPageContent/TechDocsReaderPageContentAddons';\nimport type { TechDocsReaderPageContentProps } from '../../reader/components/TechDocsReaderPageContent/TechDocsReaderPageContent';\nimport { useTechDocsReaderContentData } from '../../hooks/useTechDocsReaderContentData';\n\nexport const TechDocsReaderContent = withTechDocsReaderProvider(\n (props: TechDocsReaderPageContentProps) => {\n const {\n dom,\n handleAppend,\n isNotFound,\n isDomReady,\n showProgress,\n NotFoundErrorPage,\n } = useTechDocsReaderContentData({\n defaultPath: props.defaultPath,\n onReady: props.onReady,\n });\n\n if (isNotFound) return <NotFoundErrorPage />;\n\n if (!isDomReady) {\n return <TechDocsStateIndicator />;\n }\n\n return (\n <>\n <TechDocsStateIndicator />\n {showProgress && <Progress />}\n <TechDocsShadowDom element={dom!} onAppend={handleAppend}>\n <TechDocsReaderPageContentAddons />\n </TechDocsShadowDom>\n </>\n );\n },\n);\n"],"names":[],"mappings":";;;;;;;;AAyBO,MAAM,qBAAA,GAAwB,0BAAA;AAAA,EACnC,CAAC,KAAA,KAA0C;AACzC,IAAA,MAAM;AAAA,MACJ,GAAA;AAAA,MACA,YAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,QACE,4BAAA,CAA6B;AAAA,MAC/B,aAAa,KAAA,CAAM,WAAA;AAAA,MACnB,SAAS,KAAA,CAAM;AAAA,KAChB,CAAA;AAED,IAAA,IAAI,UAAA,EAAY,uBAAO,GAAA,CAAC,iBAAA,EAAA,EAAkB,CAAA;AAE1C,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,2BAAQ,sBAAA,EAAA,EAAuB,CAAA;AAAA,IACjC;AAEA,IAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,sBAAA,EAAA,EAAuB,CAAA;AAAA,MACvB,YAAA,wBAAiB,QAAA,EAAA,EAAS,CAAA;AAAA,sBAC3B,GAAA,CAAC,qBAAkB,OAAA,EAAS,GAAA,EAAM,UAAU,YAAA,EAC1C,QAAA,kBAAA,GAAA,CAAC,mCAAgC,CAAA,EACnC;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AACF;;;;"}
1
+ {"version":3,"file":"TechDocsReaderContent.esm.js","sources":["../../../src/alpha/components/TechDocsReaderContent.tsx"],"sourcesContent":["/*\n * Copyright 2026 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { TechDocsShadowDom } from '@backstage/plugin-techdocs-react';\nimport { Progress } from '@backstage/core-components';\n\nimport { TechDocsStateIndicator } from '../../reader/components/TechDocsStateIndicator';\nimport { withTechDocsReaderProvider } from '../../reader/components/TechDocsReaderProvider';\nimport { TechDocsReaderPageContentAddons } from '../../reader/components/TechDocsReaderPageContent/TechDocsReaderPageContentAddons';\nimport type { TechDocsReaderPageContentProps } from '../../reader/components/TechDocsReaderPageContent/TechDocsReaderPageContent';\nimport { useTechDocsReaderContentData } from '../../hooks/useTechDocsReaderContentData';\n\nexport const TechDocsReaderContent = withTechDocsReaderProvider(\n (props: TechDocsReaderPageContentProps) => {\n const {\n dom,\n handleAppend,\n isNotFound,\n isDomReady,\n showProgress,\n NotFoundErrorPage,\n } = useTechDocsReaderContentData({\n defaultPath: props.defaultPath,\n onReady: props.onReady,\n withFeedbackLink: props.withFeedbackLink,\n });\n\n if (isNotFound) return <NotFoundErrorPage />;\n\n if (!isDomReady) {\n return <TechDocsStateIndicator />;\n }\n\n return (\n <>\n <TechDocsStateIndicator />\n {showProgress && <Progress />}\n <TechDocsShadowDom element={dom!} onAppend={handleAppend}>\n <TechDocsReaderPageContentAddons />\n </TechDocsShadowDom>\n </>\n );\n },\n);\n"],"names":[],"mappings":";;;;;;;;AAyBO,MAAM,qBAAA,GAAwB,0BAAA;AAAA,EACnC,CAAC,KAAA,KAA0C;AACzC,IAAA,MAAM;AAAA,MACJ,GAAA;AAAA,MACA,YAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,QACE,4BAAA,CAA6B;AAAA,MAC/B,aAAa,KAAA,CAAM,WAAA;AAAA,MACnB,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,kBAAkB,KAAA,CAAM;AAAA,KACzB,CAAA;AAED,IAAA,IAAI,UAAA,EAAY,uBAAO,GAAA,CAAC,iBAAA,EAAA,EAAkB,CAAA;AAE1C,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,2BAAQ,sBAAA,EAAA,EAAuB,CAAA;AAAA,IACjC;AAEA,IAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,sBAAA,EAAA,EAAuB,CAAA;AAAA,MACvB,YAAA,wBAAiB,QAAA,EAAA,EAAS,CAAA;AAAA,sBAC3B,GAAA,CAAC,qBAAkB,OAAA,EAAS,GAAA,EAAM,UAAU,YAAA,EAC1C,QAAA,kBAAA,GAAA,CAAC,mCAAgC,CAAA,EACnC;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AACF;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"TechDocsReaderEntityCard.esm.js","sources":["../../../src/alpha/components/TechDocsReaderEntityCard.tsx"],"sourcesContent":["/*\n * Copyright 2026 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useTechDocsReaderPage } from '@backstage/plugin-techdocs-react';\nimport {\n EntityRefLink,\n EntityRefLinks,\n getEntityRelations,\n} from '@backstage/plugin-catalog-react';\nimport { RELATION_OWNED_BY } from '@backstage/catalog-model';\nimport { Card, CardBody, Text } from '@backstage/ui';\nimport capitalize from 'lodash/capitalize';\nimport styles from './TechDocsReaderEntityCard.module.css';\nimport { TechDocsReaderSearch } from './TechDocsReaderSearch';\n\nexport type TechDocsReaderEntityCardProps = {\n withSearch?: boolean;\n};\n\nexport const TechDocsReaderEntityCard = (\n props: TechDocsReaderEntityCardProps,\n) => {\n const { withSearch } = props;\n const {\n entityRef,\n entityMetadata: { value: entityMetadata, loading: entityMetadataLoading },\n } = useTechDocsReaderPage();\n\n if (entityMetadataLoading || !entityMetadata) return null;\n\n const { spec } = entityMetadata;\n const lifecycle = spec?.lifecycle;\n const ownedByRelations = getEntityRelations(\n entityMetadata,\n RELATION_OWNED_BY,\n );\n\n return (\n <Card className={styles.entityCard}>\n <CardBody className={styles.cardBody}>\n <dl className={styles.definitionList}>\n <div className={styles.definitionGroup}>\n <dt>\n <Text variant=\"body-small\" weight=\"bold\">\n {capitalize(entityMetadata.kind)}:\n </Text>\n </dt>\n <dd className={styles.definitionValue}>\n <EntityRefLink entityRef={entityRef} defaultKind=\"Component\" />\n </dd>\n </div>\n {ownedByRelations.length > 0 && (\n <div className={styles.definitionGroup}>\n <dt>\n <Text variant=\"body-small\" weight=\"bold\">\n Owner:\n </Text>\n </dt>\n <dd className={styles.definitionValue}>\n <EntityRefLinks\n entityRefs={ownedByRelations}\n defaultKind=\"group\"\n />\n </dd>\n </div>\n )}\n {lifecycle && (\n <div className={styles.definitionGroup}>\n <dt>\n <Text variant=\"body-small\" weight=\"bold\">\n Lifecycle:\n </Text>\n </dt>\n <dd className={styles.definitionValue}>\n <Text variant=\"body-small\">{String(lifecycle)}</Text>\n </dd>\n </div>\n )}\n </dl>\n {withSearch && (\n <div className={styles.searchWrapper}>\n <TechDocsReaderSearch entityId={entityRef} />\n </div>\n )}\n </CardBody>\n </Card>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAgCO,MAAM,wBAAA,GAA2B,CACtC,KAAA,KACG;AACH,EAAA,MAAM,EAAE,YAAW,GAAI,KAAA;AACvB,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA,cAAA,EAAgB,EAAE,KAAA,EAAO,cAAA,EAAgB,SAAS,qBAAA;AAAsB,MACtE,qBAAA,EAAsB;AAE1B,EAAA,IAAI,qBAAA,IAAyB,CAAC,cAAA,EAAgB,OAAO,IAAA;AAErD,EAAA,MAAM,EAAE,MAAK,GAAI,cAAA;AACjB,EAAA,MAAM,YAAY,IAAA,EAAM,SAAA;AACxB,EAAA,MAAM,gBAAA,GAAmB,kBAAA;AAAA,IACvB,cAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,uBACE,GAAA,CAAC,QAAK,SAAA,EAAW,MAAA,CAAO,YACtB,QAAA,kBAAA,IAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAW,MAAA,CAAO,QAAA,EAC1B,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,MAAA,CAAO,cAAA,EACpB,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,eAAA,EACrB,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,QACC,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,YAAA,EAAa,QAAO,MAAA,EAC/B,QAAA,EAAA;AAAA,UAAA,UAAA,CAAW,eAAe,IAAI,CAAA;AAAA,UAAE;AAAA,SAAA,EACnC,CAAA,EACF,CAAA;AAAA,wBACA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,MAAA,CAAO,eAAA,EACpB,8BAAC,aAAA,EAAA,EAAc,SAAA,EAAsB,WAAA,EAAY,WAAA,EAAY,CAAA,EAC/D;AAAA,OAAA,EACF,CAAA;AAAA,MACC,iBAAiB,MAAA,GAAS,CAAA,yBACxB,KAAA,EAAA,EAAI,SAAA,EAAW,OAAO,eAAA,EACrB,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAA,EAAA,EACC,8BAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,cAAa,MAAA,EAAO,MAAA,EAAO,oBAEzC,CAAA,EACF,CAAA;AAAA,wBACA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,MAAA,CAAO,eAAA,EACpB,QAAA,kBAAA,GAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YACC,UAAA,EAAY,gBAAA;AAAA,YACZ,WAAA,EAAY;AAAA;AAAA,SACd,EACF;AAAA,OAAA,EACF,CAAA;AAAA,MAED,SAAA,oBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAO,eAAA,EACrB,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAA,EAAA,EACC,8BAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,cAAa,MAAA,EAAO,MAAA,EAAO,wBAEzC,CAAA,EACF,CAAA;AAAA,wBACA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,MAAA,CAAO,eAAA,EACpB,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,YAAA,EAAc,QAAA,EAAA,MAAA,CAAO,SAAS,CAAA,EAAE,CAAA,EAChD;AAAA,OAAA,EACF;AAAA,KAAA,EAEJ,CAAA;AAAA,IACC,UAAA,oBACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,eACrB,QAAA,kBAAA,GAAA,CAAC,oBAAA,EAAA,EAAqB,QAAA,EAAU,SAAA,EAAW,CAAA,EAC7C;AAAA,GAAA,EAEJ,CAAA,EACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"TechDocsReaderEntityCard.esm.js","sources":["../../../src/alpha/components/TechDocsReaderEntityCard.tsx"],"sourcesContent":["/*\n * Copyright 2026 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useTechDocsReaderPage } from '@backstage/plugin-techdocs-react';\nimport {\n EntityRefLink,\n EntityRefLinks,\n getEntityRelations,\n} from '@backstage/plugin-catalog-react';\nimport { RELATION_OWNED_BY } from '@backstage/catalog-model';\nimport { Card, CardBody, Text } from '@backstage/ui';\nimport capitalize from 'lodash/capitalize';\nimport styles from './TechDocsReaderEntityCard.module.css';\nimport { TechDocsReaderSearch } from './TechDocsReaderSearch';\n\nexport type TechDocsReaderEntityCardProps = {\n withSearch?: boolean;\n};\n\nexport const TechDocsReaderEntityCard = (\n props: TechDocsReaderEntityCardProps,\n) => {\n const { withSearch } = props;\n const {\n entityRef,\n entityMetadata: { value: entityMetadata, loading: entityMetadataLoading },\n } = useTechDocsReaderPage();\n\n if (entityMetadataLoading || !entityMetadata) return null;\n\n const { spec } = entityMetadata;\n const lifecycle = spec?.lifecycle;\n const ownedByRelations = getEntityRelations(\n entityMetadata,\n RELATION_OWNED_BY,\n );\n\n return (\n <Card className={styles.entityCard}>\n <CardBody className={styles.cardBody}>\n <dl className={styles.definitionList}>\n <div className={styles.definitionGroup}>\n <dt>\n <Text variant=\"body-small\" weight=\"bold\">\n {capitalize(entityMetadata.kind)}:\n </Text>\n </dt>\n <dd className={styles.definitionValue}>\n <EntityRefLink entityRef={entityRef} defaultKind=\"Component\" />\n </dd>\n </div>\n {ownedByRelations.length > 0 && (\n <div className={styles.definitionGroup}>\n <dt>\n <Text variant=\"body-small\" weight=\"bold\">\n Owner:\n </Text>\n </dt>\n <dd className={styles.definitionValue}>\n <EntityRefLinks\n entityRefs={ownedByRelations}\n defaultKind=\"group\"\n />\n </dd>\n </div>\n )}\n {lifecycle && (\n <div className={styles.definitionGroup}>\n <dt>\n <Text variant=\"body-small\" weight=\"bold\">\n Lifecycle:\n </Text>\n </dt>\n <dd className={styles.definitionValue}>\n <Text variant=\"body-small\">{String(lifecycle)}</Text>\n </dd>\n </div>\n )}\n </dl>\n {withSearch && (\n <div className={styles.searchWrapper}>\n <TechDocsReaderSearch entityId={entityRef} />\n </div>\n )}\n </CardBody>\n </Card>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAgCO,MAAM,wBAAA,GAA2B,CACtC,KAAA,KACG;AACH,EAAA,MAAM,EAAE,YAAW,GAAI,KAAA;AACvB,EAAA,MAAM;AAAA,IACJ,SAAA;AAAA,IACA,cAAA,EAAgB,EAAE,KAAA,EAAO,cAAA,EAAgB,SAAS,qBAAA;AAAsB,MACtE,qBAAA,EAAsB;AAE1B,EAAA,IAAI,qBAAA,IAAyB,CAAC,cAAA,EAAgB,OAAO,IAAA;AAErD,EAAA,MAAM,EAAE,MAAK,GAAI,cAAA;AACjB,EAAA,MAAM,YAAY,IAAA,EAAM,SAAA;AACxB,EAAA,MAAM,gBAAA,GAAmB,kBAAA;AAAA,IACvB,cAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,uBACE,GAAA,CAAC,QAAK,SAAA,EAAW,MAAA,CAAO,YACtB,QAAA,kBAAA,IAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAW,MAAA,CAAO,QAAA,EAC1B,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,MAAA,CAAO,cAAA,EACpB,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,eAAA,EACrB,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,QACC,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,YAAA,EAAa,QAAO,MAAA,EAC/B,QAAA,EAAA;AAAA,UAAA,UAAA,CAAW,eAAe,IAAI,CAAA;AAAA,UAAE;AAAA,SAAA,EACnC,CAAA,EACF,CAAA;AAAA,wBACA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,MAAA,CAAO,eAAA,EACpB,8BAAC,aAAA,EAAA,EAAc,SAAA,EAAsB,WAAA,EAAY,WAAA,EAAY,CAAA,EAC/D;AAAA,OAAA,EACF,CAAA;AAAA,MACC,iBAAiB,MAAA,GAAS,CAAA,yBACxB,KAAA,EAAA,EAAI,SAAA,EAAW,OAAO,eAAA,EACrB,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAA,EAAA,EACC,8BAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,cAAa,MAAA,EAAO,MAAA,EAAO,oBAEzC,CAAA,EACF,CAAA;AAAA,wBACA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,MAAA,CAAO,eAAA,EACpB,QAAA,kBAAA,GAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YACC,UAAA,EAAY,gBAAA;AAAA,YACZ,WAAA,EAAY;AAAA;AAAA,SACd,EACF;AAAA,OAAA,EACF,CAAA;AAAA,MAED,SAAA,oBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAO,eAAA,EACrB,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAA,EAAA,EACC,8BAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,cAAa,MAAA,EAAO,MAAA,EAAO,wBAEzC,CAAA,EACF,CAAA;AAAA,wBACA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,MAAA,CAAO,eAAA,EACpB,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,OAAA,EAAQ,YAAA,EAAc,QAAA,EAAA,MAAA,CAAO,SAAS,CAAA,EAAE,CAAA,EAChD;AAAA,OAAA,EACF;AAAA,KAAA,EAEJ,CAAA;AAAA,IACC,UAAA,oBACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,eACrB,QAAA,kBAAA,GAAA,CAAC,oBAAA,EAAA,EAAqB,QAAA,EAAU,SAAA,EAAW,CAAA,EAC7C;AAAA,GAAA,EAEJ,CAAA,EACF,CAAA;AAEJ;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"TechDocsReaderEntityCard.module.css.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
1
+ {"version":3,"file":"TechDocsReaderEntityCard.module.css.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"TechDocsReaderHeader.esm.js","sources":["../../../src/alpha/components/TechDocsReaderHeader.tsx"],"sourcesContent":["/*\n * Copyright 2026 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Helmet from 'react-helmet';\nimport { Header, ButtonLink } from '@backstage/ui';\nimport { RiCodeLine } from '@remixicon/react';\nimport { TechDocsAddonLocations as locations } from '@backstage/plugin-techdocs-react';\nimport { TechDocsReaderSearch } from './TechDocsReaderSearch';\nimport { useTechDocsReaderHeaderData } from '../../hooks/useTechDocsReaderHeaderData';\n\nexport type TechDocsReaderHeaderProps = {\n withSearch?: boolean;\n};\n\nexport const TechDocsReaderHeader = (props: TechDocsReaderHeaderProps) => {\n const { withSearch = true } = props;\n const {\n title,\n entityRef,\n tabTitle,\n hidden,\n showSourceLink,\n sourceLink,\n addons,\n } = useTechDocsReaderHeaderData();\n\n if (hidden) return null;\n\n return (\n <>\n <Helmet titleTemplate=\"%s\">\n <title>{tabTitle}</title>\n </Helmet>\n <Header\n title={title || ''}\n customActions={\n <>\n {withSearch && <TechDocsReaderSearch entityId={entityRef} />}\n {showSourceLink && (\n <ButtonLink\n href={sourceLink!}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n variant=\"secondary\"\n size=\"small\"\n iconStart={<RiCodeLine />}\n aria-label=\"View source\"\n />\n )}\n {addons.renderComponentsByLocation(locations.Header)}\n </>\n }\n />\n </>\n );\n};\n"],"names":["locations"],"mappings":";;;;;;;;AA2BO,MAAM,oBAAA,GAAuB,CAAC,KAAA,KAAqC;AACxE,EAAA,MAAM,EAAE,UAAA,GAAa,IAAA,EAAK,GAAI,KAAA;AAC9B,EAAA,MAAM;AAAA,IACJ,KAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,cAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,MACE,2BAAA,EAA4B;AAEhC,EAAA,IAAI,QAAQ,OAAO,IAAA;AAEnB,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAO,aAAA,EAAc,IAAA,EACpB,QAAA,kBAAA,GAAA,CAAC,OAAA,EAAA,EAAO,oBAAS,CAAA,EACnB,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAO,KAAA,IAAS,EAAA;AAAA,QAChB,+BACE,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,UAAA,UAAA,oBAAc,GAAA,CAAC,oBAAA,EAAA,EAAqB,QAAA,EAAU,SAAA,EAAW,CAAA;AAAA,UACzD,cAAA,oBACC,GAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAM,UAAA;AAAA,cACN,MAAA,EAAO,QAAA;AAAA,cACP,GAAA,EAAI,qBAAA;AAAA,cACJ,OAAA,EAAQ,WAAA;AAAA,cACR,IAAA,EAAK,OAAA;AAAA,cACL,SAAA,sBAAY,UAAA,EAAA,EAAW,CAAA;AAAA,cACvB,YAAA,EAAW;AAAA;AAAA,WACb;AAAA,UAED,MAAA,CAAO,0BAAA,CAA2BA,sBAAA,CAAU,MAAM;AAAA,SAAA,EACrD;AAAA;AAAA;AAEJ,GAAA,EACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"TechDocsReaderHeader.esm.js","sources":["../../../src/alpha/components/TechDocsReaderHeader.tsx"],"sourcesContent":["/*\n * Copyright 2026 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Helmet from 'react-helmet';\nimport { Header, ButtonLink } from '@backstage/ui';\nimport { RiCodeLine } from '@remixicon/react';\nimport { TechDocsAddonLocations as locations } from '@backstage/plugin-techdocs-react';\nimport { TechDocsReaderSearch } from './TechDocsReaderSearch';\nimport { useTechDocsReaderHeaderData } from '../../hooks/useTechDocsReaderHeaderData';\n\nexport type TechDocsReaderHeaderProps = {\n withSearch?: boolean;\n};\n\nexport const TechDocsReaderHeader = (props: TechDocsReaderHeaderProps) => {\n const { withSearch = true } = props;\n const {\n title,\n entityRef,\n tabTitle,\n hidden,\n showSourceLink,\n sourceLink,\n addons,\n } = useTechDocsReaderHeaderData();\n\n if (hidden) return null;\n\n return (\n <>\n <Helmet titleTemplate=\"%s\">\n <title>{tabTitle}</title>\n </Helmet>\n <Header\n title={title || ''}\n customActions={\n <>\n {withSearch && <TechDocsReaderSearch entityId={entityRef} />}\n {showSourceLink && (\n <ButtonLink\n href={sourceLink!}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n variant=\"secondary\"\n size=\"small\"\n iconStart={<RiCodeLine />}\n aria-label=\"View source\"\n />\n )}\n {addons.renderComponentsByLocation(locations.Header)}\n </>\n }\n />\n </>\n );\n};\n"],"names":["locations"],"mappings":";;;;;;;;AA2BO,MAAM,oBAAA,GAAuB,CAAC,KAAA,KAAqC;AACxE,EAAA,MAAM,EAAE,UAAA,GAAa,IAAA,EAAK,GAAI,KAAA;AAC9B,EAAA,MAAM;AAAA,IACJ,KAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,cAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,MACE,2BAAA,EAA4B;AAEhC,EAAA,IAAI,QAAQ,OAAO,IAAA;AAEnB,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAO,aAAA,EAAc,IAAA,EACpB,QAAA,kBAAA,GAAA,CAAC,OAAA,EAAA,EAAO,oBAAS,CAAA,EACnB,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAO,KAAA,IAAS,EAAA;AAAA,QAChB,+BACE,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,UAAA,UAAA,oBAAc,GAAA,CAAC,oBAAA,EAAA,EAAqB,QAAA,EAAU,SAAA,EAAW,CAAA;AAAA,UACzD,cAAA,oBACC,GAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAM,UAAA;AAAA,cACN,MAAA,EAAO,QAAA;AAAA,cACP,GAAA,EAAI,qBAAA;AAAA,cACJ,OAAA,EAAQ,WAAA;AAAA,cACR,IAAA,EAAK,OAAA;AAAA,cACL,SAAA,sBAAY,UAAA,EAAA,EAAW,CAAA;AAAA,cACvB,YAAA,EAAW;AAAA;AAAA,WACb;AAAA,UAED,MAAA,CAAO,0BAAA,CAA2BA,sBAAA,CAAU,MAAM;AAAA,SAAA,EACrD;AAAA;AAAA;AAEJ,GAAA,EACF,CAAA;AAEJ;;"}
@@ -6,13 +6,13 @@ import { TechDocsReaderPageSubheader } from '../../reader/components/TechDocsRea
6
6
  import { TechDocsReaderContent } from './TechDocsReaderContent.esm.js';
7
7
 
8
8
  const TechDocsReaderLayout = (props) => {
9
- const { withSearch, withHeader = true } = props;
9
+ const { withSearch, withHeader = true, withFeedbackLink } = props;
10
10
  return /* @__PURE__ */ jsxs(Fragment, { children: [
11
11
  withHeader && /* @__PURE__ */ jsx(TechDocsReaderHeader, { withSearch }),
12
12
  /* @__PURE__ */ jsxs(Container, { mt: "6", children: [
13
13
  /* @__PURE__ */ jsx(TechDocsReaderEntityCard, { withSearch: !withHeader && withSearch }),
14
14
  /* @__PURE__ */ jsx(TechDocsReaderPageSubheader, {}),
15
- /* @__PURE__ */ jsx(TechDocsReaderContent, {})
15
+ /* @__PURE__ */ jsx(TechDocsReaderContent, { withFeedbackLink })
16
16
  ] })
17
17
  ] });
18
18
  };
@@ -1 +1 @@
1
- {"version":3,"file":"TechDocsReaderLayout.esm.js","sources":["../../../src/alpha/components/TechDocsReaderLayout.tsx"],"sourcesContent":["/*\n * Copyright 2026 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Container } from '@backstage/ui';\nimport { TechDocsReaderHeader } from './TechDocsReaderHeader';\nimport { TechDocsReaderEntityCard } from './TechDocsReaderEntityCard';\nimport { TechDocsReaderPageSubheader } from '../../reader/components/TechDocsReaderPageSubheader';\nimport { TechDocsReaderContent } from './TechDocsReaderContent';\n\nexport type TechDocsReaderLayoutProps = {\n withHeader?: boolean;\n withSearch?: boolean;\n};\n\nexport const TechDocsReaderLayout = (props: TechDocsReaderLayoutProps) => {\n const { withSearch, withHeader = true } = props;\n return (\n <>\n {withHeader && <TechDocsReaderHeader withSearch={withSearch} />}\n <Container mt=\"6\">\n <TechDocsReaderEntityCard withSearch={!withHeader && withSearch} />\n <TechDocsReaderPageSubheader />\n <TechDocsReaderContent />\n </Container>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;AA2BO,MAAM,oBAAA,GAAuB,CAAC,KAAA,KAAqC;AACxE,EAAA,MAAM,EAAE,UAAA,EAAY,UAAA,GAAa,IAAA,EAAK,GAAI,KAAA;AAC1C,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,UAAA,oBAAc,GAAA,CAAC,wBAAqB,UAAA,EAAwB,CAAA;AAAA,oBAC7D,IAAA,CAAC,SAAA,EAAA,EAAU,EAAA,EAAG,GAAA,EACZ,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,wBAAA,EAAA,EAAyB,UAAA,EAAY,CAAC,UAAA,IAAc,UAAA,EAAY,CAAA;AAAA,0BAChE,2BAAA,EAAA,EAA4B,CAAA;AAAA,0BAC5B,qBAAA,EAAA,EAAsB;AAAA,KAAA,EACzB;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"TechDocsReaderLayout.esm.js","sources":["../../../src/alpha/components/TechDocsReaderLayout.tsx"],"sourcesContent":["/*\n * Copyright 2026 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Container } from '@backstage/ui';\nimport { TechDocsReaderHeader } from './TechDocsReaderHeader';\nimport { TechDocsReaderEntityCard } from './TechDocsReaderEntityCard';\nimport { TechDocsReaderPageSubheader } from '../../reader/components/TechDocsReaderPageSubheader';\nimport { TechDocsReaderContent } from './TechDocsReaderContent';\n\nexport type TechDocsReaderLayoutProps = {\n withHeader?: boolean;\n withSearch?: boolean;\n withFeedbackLink?: boolean;\n};\n\nexport const TechDocsReaderLayout = (props: TechDocsReaderLayoutProps) => {\n const { withSearch, withHeader = true, withFeedbackLink } = props;\n return (\n <>\n {withHeader && <TechDocsReaderHeader withSearch={withSearch} />}\n <Container mt=\"6\">\n <TechDocsReaderEntityCard withSearch={!withHeader && withSearch} />\n <TechDocsReaderPageSubheader />\n <TechDocsReaderContent withFeedbackLink={withFeedbackLink} />\n </Container>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;AA4BO,MAAM,oBAAA,GAAuB,CAAC,KAAA,KAAqC;AACxE,EAAA,MAAM,EAAE,UAAA,EAAY,UAAA,GAAa,IAAA,EAAM,kBAAiB,GAAI,KAAA;AAC5D,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,UAAA,oBAAc,GAAA,CAAC,wBAAqB,UAAA,EAAwB,CAAA;AAAA,oBAC7D,IAAA,CAAC,SAAA,EAAA,EAAU,EAAA,EAAG,GAAA,EACZ,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,wBAAA,EAAA,EAAyB,UAAA,EAAY,CAAC,UAAA,IAAc,UAAA,EAAY,CAAA;AAAA,0BAChE,2BAAA,EAAA,EAA4B,CAAA;AAAA,sBAC7B,GAAA,CAAC,yBAAsB,gBAAA,EAAoC;AAAA,KAAA,EAC7D;AAAA,GAAA,EACF,CAAA;AAEJ;;"}
@@ -18,14 +18,22 @@ function TechDocsReaderPage(props) {
18
18
  TechDocsReaderLayout,
19
19
  {
20
20
  withSearch: props.withSearch,
21
- withHeader: props.withHeader
21
+ withHeader: props.withHeader,
22
+ withFeedbackLink: props.withFeedbackLink
22
23
  }
23
24
  ),
24
25
  renderAddons(props.addonOptions)
25
26
  ] });
26
27
  }
27
28
  function TechDocsEntityContent(props) {
28
- return /* @__PURE__ */ jsx(EmbeddedDocsRouter, { emptyState: props.emptyState, children: renderAddons(props.addonOptions) });
29
+ return /* @__PURE__ */ jsx(
30
+ EmbeddedDocsRouter,
31
+ {
32
+ emptyState: props.emptyState,
33
+ withFeedbackLink: props.withFeedbackLink,
34
+ children: renderAddons(props.addonOptions)
35
+ }
36
+ );
29
37
  }
30
38
 
31
39
  export { TechDocsEntityContent, TechDocsReaderPage };
@@ -1 +1 @@
1
- {"version":3,"file":"TechDocsReaderPage.esm.js","sources":["../../../src/alpha/components/TechDocsReaderPage.tsx"],"sourcesContent":["/*\n * Copyright 2026 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ReactElement, Suspense } from 'react';\nimport {\n TechDocsAddons,\n type TechDocsAddonOptions,\n} from '@backstage/plugin-techdocs-react';\nimport { attachTechDocsAddonComponentData } from '@backstage/plugin-techdocs-react/alpha';\nimport { EmbeddedDocsRouter, TechDocsReaderRouter } from '../../Router';\nimport { TechDocsReaderLayout } from './TechDocsReaderLayout';\n\n// Deliberately a function call rather than a component. Addons are discovered\n// by walking the router outlet as an element tree: the walk only follows\n// `props.children` and never invokes a component, and this is also the only\n// place the addon component data is attached. A component wrapper breaks both,\n// because its children are built by a render that the walk never performs.\nfunction renderAddons(addonOptions: TechDocsAddonOptions[]) {\n return (\n <TechDocsAddons>\n {addonOptions.map(options => {\n const Addon = options.component;\n attachTechDocsAddonComponentData(Addon, options);\n return (\n <Suspense key={options.name} fallback={null}>\n <Addon />\n </Suspense>\n );\n })}\n </TechDocsAddons>\n );\n}\n\nexport function TechDocsReaderPage(props: {\n addonOptions: TechDocsAddonOptions[];\n withSearch: boolean;\n withHeader: boolean;\n}) {\n return (\n <TechDocsReaderRouter>\n <TechDocsReaderLayout\n withSearch={props.withSearch}\n withHeader={props.withHeader}\n />\n {renderAddons(props.addonOptions)}\n </TechDocsReaderRouter>\n );\n}\n\nexport function TechDocsEntityContent(props: {\n addonOptions: TechDocsAddonOptions[];\n emptyState?: ReactElement;\n}) {\n return (\n <EmbeddedDocsRouter emptyState={props.emptyState}>\n {renderAddons(props.addonOptions)}\n </EmbeddedDocsRouter>\n );\n}\n"],"names":[],"mappings":";;;;;;;AA8BA,SAAS,aAAa,YAAA,EAAsC;AAC1D,EAAA,uBACE,GAAA,CAAC,cAAA,EAAA,EACE,QAAA,EAAA,YAAA,CAAa,GAAA,CAAI,CAAA,OAAA,KAAW;AAC3B,IAAA,MAAM,QAAQ,OAAA,CAAQ,SAAA;AACtB,IAAA,gCAAA,CAAiC,OAAO,OAAO,CAAA;AAC/C,IAAA,uBACE,GAAA,CAAC,YAA4B,QAAA,EAAU,IAAA,EACrC,8BAAC,KAAA,EAAA,EAAM,CAAA,EAAA,EADM,QAAQ,IAEvB,CAAA;AAAA,EAEJ,CAAC,CAAA,EACH,CAAA;AAEJ;AAEO,SAAS,mBAAmB,KAAA,EAIhC;AACD,EAAA,4BACG,oBAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,oBAAA;AAAA,MAAA;AAAA,QACC,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,YAAY,KAAA,CAAM;AAAA;AAAA,KACpB;AAAA,IACC,YAAA,CAAa,MAAM,YAAY;AAAA,GAAA,EAClC,CAAA;AAEJ;AAEO,SAAS,sBAAsB,KAAA,EAGnC;AACD,EAAA,uBACE,GAAA,CAAC,sBAAmB,UAAA,EAAY,KAAA,CAAM,YACnC,QAAA,EAAA,YAAA,CAAa,KAAA,CAAM,YAAY,CAAA,EAClC,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"TechDocsReaderPage.esm.js","sources":["../../../src/alpha/components/TechDocsReaderPage.tsx"],"sourcesContent":["/*\n * Copyright 2026 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ReactElement, Suspense } from 'react';\nimport {\n TechDocsAddons,\n type TechDocsAddonOptions,\n} from '@backstage/plugin-techdocs-react';\nimport { attachTechDocsAddonComponentData } from '@backstage/plugin-techdocs-react/alpha';\nimport { EmbeddedDocsRouter, TechDocsReaderRouter } from '../../Router';\nimport { TechDocsReaderLayout } from './TechDocsReaderLayout';\n\n// Deliberately a function call rather than a component. Addons are discovered\n// by walking the router outlet as an element tree: the walk only follows\n// `props.children` and never invokes a component, and this is also the only\n// place the addon component data is attached. A component wrapper breaks both,\n// because its children are built by a render that the walk never performs.\nfunction renderAddons(addonOptions: TechDocsAddonOptions[]) {\n return (\n <TechDocsAddons>\n {addonOptions.map(options => {\n const Addon = options.component;\n attachTechDocsAddonComponentData(Addon, options);\n return (\n <Suspense key={options.name} fallback={null}>\n <Addon />\n </Suspense>\n );\n })}\n </TechDocsAddons>\n );\n}\n\nexport function TechDocsReaderPage(props: {\n addonOptions: TechDocsAddonOptions[];\n withSearch: boolean;\n withHeader: boolean;\n withFeedbackLink: boolean;\n}) {\n return (\n <TechDocsReaderRouter>\n <TechDocsReaderLayout\n withSearch={props.withSearch}\n withHeader={props.withHeader}\n withFeedbackLink={props.withFeedbackLink}\n />\n {renderAddons(props.addonOptions)}\n </TechDocsReaderRouter>\n );\n}\n\nexport function TechDocsEntityContent(props: {\n addonOptions: TechDocsAddonOptions[];\n emptyState?: ReactElement;\n withFeedbackLink: boolean;\n}) {\n return (\n <EmbeddedDocsRouter\n emptyState={props.emptyState}\n withFeedbackLink={props.withFeedbackLink}\n >\n {renderAddons(props.addonOptions)}\n </EmbeddedDocsRouter>\n );\n}\n"],"names":[],"mappings":";;;;;;;AA8BA,SAAS,aAAa,YAAA,EAAsC;AAC1D,EAAA,uBACE,GAAA,CAAC,cAAA,EAAA,EACE,QAAA,EAAA,YAAA,CAAa,GAAA,CAAI,CAAA,OAAA,KAAW;AAC3B,IAAA,MAAM,QAAQ,OAAA,CAAQ,SAAA;AACtB,IAAA,gCAAA,CAAiC,OAAO,OAAO,CAAA;AAC/C,IAAA,uBACE,GAAA,CAAC,YAA4B,QAAA,EAAU,IAAA,EACrC,8BAAC,KAAA,EAAA,EAAM,CAAA,EAAA,EADM,QAAQ,IAEvB,CAAA;AAAA,EAEJ,CAAC,CAAA,EACH,CAAA;AAEJ;AAEO,SAAS,mBAAmB,KAAA,EAKhC;AACD,EAAA,4BACG,oBAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,oBAAA;AAAA,MAAA;AAAA,QACC,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,kBAAkB,KAAA,CAAM;AAAA;AAAA,KAC1B;AAAA,IACC,YAAA,CAAa,MAAM,YAAY;AAAA,GAAA,EAClC,CAAA;AAEJ;AAEO,SAAS,sBAAsB,KAAA,EAInC;AACD,EAAA,uBACE,GAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,YAAY,KAAA,CAAM,UAAA;AAAA,MAClB,kBAAkB,KAAA,CAAM,gBAAA;AAAA,MAEvB,QAAA,EAAA,YAAA,CAAa,MAAM,YAAY;AAAA;AAAA,GAClC;AAEJ;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"TechDocsReaderSearch.esm.js","sources":["../../../src/alpha/components/TechDocsReaderSearch.tsx"],"sourcesContent":["/*\n * Copyright 2026 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useNavigate } from 'react-router-dom';\nimport {\n Text,\n Flex,\n SearchAutocomplete,\n SearchAutocompleteItem,\n} from '@backstage/ui';\nimport { SearchContextProvider } from '@backstage/plugin-search-react';\nimport { CompoundEntityRef } from '@backstage/catalog-model';\nimport { HighlightedSearchResultText } from '@backstage/plugin-search-react';\nimport { useTechDocsSearch } from '../../hooks/useTechDocsSearch';\n\ntype TechDocsReaderSearchBarProps = {\n entityId: CompoundEntityRef;\n};\n\nconst TechDocsReaderSearchBar = (props: TechDocsReaderSearchBarProps) => {\n const { entityId } = props;\n const navigate = useNavigate();\n const { results, term, setTerm, deferredLoading } =\n useTechDocsSearch(entityId);\n\n return (\n <SearchAutocomplete\n aria-label=\"Search docs\"\n placeholder=\"Search docs\"\n size=\"small\"\n inputValue={term}\n onInputChange={setTerm}\n isLoading={deferredLoading}\n popoverWidth=\"min(720px, calc(100vw - 32px))\"\n popoverPlacement=\"bottom end\"\n >\n {results.map((result, index) => (\n <SearchAutocompleteItem\n key={index}\n id={String(index)}\n textValue={result.document.title}\n onAction={() => {\n setTerm('');\n navigate(result.document.location);\n requestAnimationFrame(() => {\n (document.activeElement as HTMLElement)?.blur();\n });\n }}\n >\n <Flex direction=\"column\" gap=\"1\">\n <Text weight=\"bold\">\n {result.highlight?.fields.title ? (\n <HighlightedSearchResultText\n text={result.highlight.fields.title}\n preTag={result.highlight.preTag}\n postTag={result.highlight.postTag}\n />\n ) : (\n result.document.title\n )}\n </Text>\n {(result.highlight?.fields.text || result.document.text) && (\n <Text\n variant=\"body-small\"\n color=\"secondary\"\n style={{\n display: '-webkit-box',\n WebkitLineClamp: 3,\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n }}\n >\n {result.highlight?.fields.text ? (\n <HighlightedSearchResultText\n text={result.highlight.fields.text}\n preTag={result.highlight.preTag}\n postTag={result.highlight.postTag}\n />\n ) : (\n result.document.text\n )}\n </Text>\n )}\n </Flex>\n </SearchAutocompleteItem>\n ))}\n </SearchAutocomplete>\n );\n};\n\nexport type TechDocsReaderSearchProps = {\n entityId: CompoundEntityRef;\n};\n\nexport const TechDocsReaderSearch = (props: TechDocsReaderSearchProps) => {\n const initialState = {\n term: '',\n types: ['techdocs'],\n pageCursor: '',\n filters: props.entityId,\n };\n return (\n <SearchContextProvider initialState={initialState}>\n <TechDocsReaderSearchBar {...props} />\n </SearchContextProvider>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TechDocsReaderSearch.esm.js","sources":["../../../src/alpha/components/TechDocsReaderSearch.tsx"],"sourcesContent":["/*\n * Copyright 2026 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useNavigate } from 'react-router-dom';\nimport {\n Text,\n Flex,\n SearchAutocomplete,\n SearchAutocompleteItem,\n} from '@backstage/ui';\nimport { SearchContextProvider } from '@backstage/plugin-search-react';\nimport { CompoundEntityRef } from '@backstage/catalog-model';\nimport { HighlightedSearchResultText } from '@backstage/plugin-search-react';\nimport { useTechDocsSearch } from '../../hooks/useTechDocsSearch';\n\ntype TechDocsReaderSearchBarProps = {\n entityId: CompoundEntityRef;\n};\n\nconst TechDocsReaderSearchBar = (props: TechDocsReaderSearchBarProps) => {\n const { entityId } = props;\n const navigate = useNavigate();\n const { results, term, setTerm, deferredLoading } =\n useTechDocsSearch(entityId);\n\n return (\n <SearchAutocomplete\n aria-label=\"Search docs\"\n placeholder=\"Search docs\"\n size=\"small\"\n inputValue={term}\n onInputChange={setTerm}\n isLoading={deferredLoading}\n popoverWidth=\"min(720px, calc(100vw - 32px))\"\n popoverPlacement=\"bottom end\"\n >\n {results.map((result, index) => (\n <SearchAutocompleteItem\n key={index}\n id={String(index)}\n textValue={result.document.title}\n onAction={() => {\n setTerm('');\n navigate(result.document.location);\n requestAnimationFrame(() => {\n (document.activeElement as HTMLElement)?.blur();\n });\n }}\n >\n <Flex direction=\"column\" gap=\"1\">\n <Text weight=\"bold\">\n {result.highlight?.fields.title ? (\n <HighlightedSearchResultText\n text={result.highlight.fields.title}\n preTag={result.highlight.preTag}\n postTag={result.highlight.postTag}\n />\n ) : (\n result.document.title\n )}\n </Text>\n {(result.highlight?.fields.text || result.document.text) && (\n <Text\n variant=\"body-small\"\n color=\"secondary\"\n style={{\n display: '-webkit-box',\n WebkitLineClamp: 3,\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n }}\n >\n {result.highlight?.fields.text ? (\n <HighlightedSearchResultText\n text={result.highlight.fields.text}\n preTag={result.highlight.preTag}\n postTag={result.highlight.postTag}\n />\n ) : (\n result.document.text\n )}\n </Text>\n )}\n </Flex>\n </SearchAutocompleteItem>\n ))}\n </SearchAutocomplete>\n );\n};\n\nexport type TechDocsReaderSearchProps = {\n entityId: CompoundEntityRef;\n};\n\nexport const TechDocsReaderSearch = (props: TechDocsReaderSearchProps) => {\n const initialState = {\n term: '',\n types: ['techdocs'],\n pageCursor: '',\n filters: props.entityId,\n };\n return (\n <SearchContextProvider initialState={initialState}>\n <TechDocsReaderSearchBar {...props} />\n </SearchContextProvider>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useTechdocsReaderIconLinkProps.esm.js","sources":["../../../src/alpha/hooks/useTechdocsReaderIconLinkProps.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport DocsIcon from '@material-ui/icons/Description';\n\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nimport {\n TECHDOCS_ANNOTATION,\n TECHDOCS_EXTERNAL_ANNOTATION,\n} from '@backstage/plugin-techdocs-common';\nimport { buildTechDocsURL } from '@backstage/plugin-techdocs-react';\n\nimport { useEntity } from '@backstage/plugin-catalog-react';\n\nimport { techdocsTranslationRef } from '../../translation';\nimport { rootDocsRouteRef } from '../../routes';\n\n// Note: If you update this hook, please also update the \"useTechdocsReaderIconLinkProps\" hook\n// in the \"plugins/catalog/src/components/AboutCard/AboutCard.tsx\" file\n/** @alpha */\nexport function useTechdocsReaderIconLinkProps() {\n const { entity } = useEntity();\n const viewTechdocLink = useRouteRef(rootDocsRouteRef);\n const { t } = useTranslationRef(techdocsTranslationRef);\n\n return {\n label: t('aboutCard.viewTechdocs'),\n disabled:\n !(\n entity.metadata.annotations?.[TECHDOCS_ANNOTATION] ||\n entity.metadata.annotations?.[TECHDOCS_EXTERNAL_ANNOTATION]\n ) || !viewTechdocLink,\n icon: <DocsIcon />,\n href: buildTechDocsURL(entity, viewTechdocLink),\n };\n}\n"],"names":[],"mappings":";;;;;;;;;;AAmCO,SAAS,8BAAA,GAAiC;AAC/C,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,SAAA,EAAU;AAC7B,EAAA,MAAM,eAAA,GAAkB,YAAY,gBAAgB,CAAA;AACpD,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,sBAAsB,CAAA;AAEtD,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,EAAE,wBAAwB,CAAA;AAAA,IACjC,QAAA,EACE,EACE,MAAA,CAAO,QAAA,CAAS,WAAA,GAAc,mBAAmB,CAAA,IACjD,MAAA,CAAO,QAAA,CAAS,WAAA,GAAc,4BAA4B,CAAA,CAAA,IACvD,CAAC,eAAA;AAAA,IACR,IAAA,sBAAO,QAAA,EAAA,EAAS,CAAA;AAAA,IAChB,IAAA,EAAM,gBAAA,CAAiB,MAAA,EAAQ,eAAe;AAAA,GAChD;AACF;;;;"}
1
+ {"version":3,"file":"useTechdocsReaderIconLinkProps.esm.js","sources":["../../../src/alpha/hooks/useTechdocsReaderIconLinkProps.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport DocsIcon from '@material-ui/icons/Description';\n\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nimport {\n TECHDOCS_ANNOTATION,\n TECHDOCS_EXTERNAL_ANNOTATION,\n} from '@backstage/plugin-techdocs-common';\nimport { buildTechDocsURL } from '@backstage/plugin-techdocs-react';\n\nimport { useEntity } from '@backstage/plugin-catalog-react';\n\nimport { techdocsTranslationRef } from '../../translation';\nimport { rootDocsRouteRef } from '../../routes';\n\n// Note: If you update this hook, please also update the \"useTechdocsReaderIconLinkProps\" hook\n// in the \"plugins/catalog/src/components/AboutCard/AboutCard.tsx\" file\n/** @alpha */\nexport function useTechdocsReaderIconLinkProps() {\n const { entity } = useEntity();\n const viewTechdocLink = useRouteRef(rootDocsRouteRef);\n const { t } = useTranslationRef(techdocsTranslationRef);\n\n return {\n label: t('aboutCard.viewTechdocs'),\n disabled:\n !(\n entity.metadata.annotations?.[TECHDOCS_ANNOTATION] ||\n entity.metadata.annotations?.[TECHDOCS_EXTERNAL_ANNOTATION]\n ) || !viewTechdocLink,\n icon: <DocsIcon />,\n href: buildTechDocsURL(entity, viewTechdocLink),\n };\n}\n"],"names":[],"mappings":";;;;;;;;;;AAmCO,SAAS,8BAAA,GAAiC;AAC/C,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,SAAA,EAAU;AAC7B,EAAA,MAAM,eAAA,GAAkB,YAAY,gBAAgB,CAAA;AACpD,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,sBAAsB,CAAA;AAEtD,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,EAAE,wBAAwB,CAAA;AAAA,IACjC,QAAA,EACE,EACE,MAAA,CAAO,QAAA,CAAS,WAAA,GAAc,mBAAmB,CAAA,IACjD,MAAA,CAAO,QAAA,CAAS,WAAA,GAAc,4BAA4B,CAAA,CAAA,IACvD,CAAC,eAAA;AAAA,IACR,IAAA,sBAAO,QAAA,EAAA,EAAS,CAAA;AAAA,IAChB,IAAA,EAAM,gBAAA,CAAiB,MAAA,EAAQ,eAAe;AAAA,GAChD;AACF;;"}
package/dist/alpha.d.ts CHANGED
@@ -31,8 +31,6 @@ declare const techdocsTranslationRef: _backstage_frontend_plugin_api.Translation
31
31
  readonly "table.emptyState.docsButton": "DOCS";
32
32
  readonly "home.supportButton": "Discover documentation in your ecosystem.";
33
33
  readonly "aboutCard.viewTechdocs": "View TechDocs";
34
- readonly "notFound.title": "Documentation not found";
35
- readonly "notFound.builderNote": "Note that techdocs.builder is not set to 'local' in your config, which means this Backstage app will not generate docs if they are not found. Make sure the project's docs are generated and published by some external process (e.g. CI/CD pipeline). Or change techdocs.builder to 'local' to generate docs from this Backstage instance.";
36
34
  readonly "buildLogs.title": "Build Details";
37
35
  readonly "buildLogs.closeDrawer": "Close the drawer";
38
36
  readonly "buildLogs.showBuildLogs": "Show Build Logs";
@@ -140,6 +138,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
140
138
  }>;
141
139
  "entity-content:techdocs": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
142
140
  config: {
141
+ withoutFeedbackLink: boolean;
143
142
  path: string | undefined;
144
143
  title: string | undefined;
145
144
  filter: _backstage_filter_predicates.FilterPredicate | undefined;
@@ -147,6 +146,7 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
147
146
  icon: string | undefined;
148
147
  };
149
148
  configInput: {
149
+ withoutFeedbackLink?: boolean | undefined;
150
150
  path?: string | undefined;
151
151
  title?: string | undefined;
152
152
  filter?: _backstage_filter_predicates.FilterPredicate | undefined;
@@ -263,12 +263,14 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
263
263
  config: {
264
264
  withoutSearch: boolean;
265
265
  withoutHeader: boolean;
266
+ withoutFeedbackLink: boolean;
266
267
  path: string | undefined;
267
268
  title: string | undefined;
268
269
  };
269
270
  configInput: {
270
271
  withoutSearch?: boolean | undefined;
271
272
  withoutHeader?: boolean | undefined;
273
+ withoutFeedbackLink?: boolean | undefined;
272
274
  path?: string | undefined;
273
275
  title?: string | undefined;
274
276
  };
package/dist/alpha.esm.js CHANGED
@@ -97,7 +97,8 @@ const techDocsReaderPage = PageBlueprint.makeWithOverrides({
97
97
  },
98
98
  configSchema: {
99
99
  withoutSearch: z.boolean().default(false),
100
- withoutHeader: z.boolean().default(false)
100
+ withoutHeader: z.boolean().default(false),
101
+ withoutFeedbackLink: z.boolean().default(false)
101
102
  },
102
103
  factory(originalFactory, { apis, inputs, config }) {
103
104
  const addonsApi = apis.get(techdocsAddonsApiRef);
@@ -116,7 +117,8 @@ const techDocsReaderPage = PageBlueprint.makeWithOverrides({
116
117
  {
117
118
  addonOptions,
118
119
  withSearch: !config.withoutSearch,
119
- withHeader: !config.withoutHeader
120
+ withHeader: !config.withoutHeader,
121
+ withFeedbackLink: !config.withoutFeedbackLink
120
122
  }
121
123
  );
122
124
  }
@@ -124,6 +126,9 @@ const techDocsReaderPage = PageBlueprint.makeWithOverrides({
124
126
  }
125
127
  });
126
128
  const techDocsEntityContent = EntityContentBlueprint.makeWithOverrides({
129
+ configSchema: {
130
+ withoutFeedbackLink: z.boolean().default(false)
131
+ },
127
132
  inputs: {
128
133
  addons: createExtensionInput([AddonBlueprint.dataRefs.addon]),
129
134
  emptyState: createExtensionInput(
@@ -154,7 +159,8 @@ const techDocsEntityContent = EntityContentBlueprint.makeWithOverrides({
154
159
  addonOptions,
155
160
  emptyState: context.inputs.emptyState?.get(
156
161
  coreExtensionData.reactElement
157
- )
162
+ ),
163
+ withFeedbackLink: !context.config.withoutFeedbackLink
158
164
  }
159
165
  ));
160
166
  }
@@ -1 +1 @@
1
- {"version":3,"file":"alpha.esm.js","sources":["../src/alpha/index.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { z } from 'zod/v4';\nimport { RiArticleLine } from '@remixicon/react';\nimport {\n createFrontendPlugin,\n ApiBlueprint,\n PageBlueprint,\n PluginHeaderActionBlueprint,\n createExtensionInput,\n coreExtensionData,\n createExtension,\n} from '@backstage/frontend-plugin-api';\nimport {\n configApiRef,\n discoveryApiRef,\n fetchApiRef,\n} from '@backstage/core-plugin-api';\nimport {\n EntityContentBlueprint,\n EntityIconLinkBlueprint,\n} from '@backstage/plugin-catalog-react/alpha';\nimport {\n SearchFilterResultTypeBlueprint,\n SearchResultListItemBlueprint,\n} from '@backstage/plugin-search-react/alpha';\nimport { AddonBlueprint } from '@backstage/plugin-techdocs-react/alpha';\nimport { TechDocsAddonsApiExtension, techdocsAddonsApiRef } from './addonsApi';\nimport { TechDocsClient, TechDocsStorageClient } from '../client';\nimport {\n rootCatalogDocsRouteRef,\n rootDocsRouteRef,\n rootRouteRef,\n} from '../routes';\nimport {\n techdocsApiRef,\n techdocsStorageApiRef,\n} from '@backstage/plugin-techdocs-react';\n\nimport { useTechdocsReaderIconLinkProps } from './hooks/useTechdocsReaderIconLinkProps';\nimport { DocsIcon } from '@backstage/core-components';\n\n/** @alpha */\nconst techdocsEntityIconLink = EntityIconLinkBlueprint.make({\n name: 'read-docs',\n params: {\n useProps: useTechdocsReaderIconLinkProps,\n },\n});\n\n/** @alpha */\nconst techDocsStorageApi = ApiBlueprint.make({\n name: 'storage',\n params: defineParams =>\n defineParams({\n api: techdocsStorageApiRef,\n deps: {\n configApi: configApiRef,\n discoveryApi: discoveryApiRef,\n fetchApi: fetchApiRef,\n },\n factory: ({ configApi, discoveryApi, fetchApi }) =>\n new TechDocsStorageClient({\n configApi,\n discoveryApi,\n fetchApi,\n }),\n }),\n});\n\n/** @alpha */\nconst techDocsClientApi = ApiBlueprint.make({\n params: defineParams =>\n defineParams({\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\n/** @alpha */\nexport const techDocsSearchResultListItemExtension =\n SearchResultListItemBlueprint.makeWithOverrides({\n configSchema: {\n title: z.string().optional(),\n lineClamp: z.number().default(5),\n asLink: z.boolean().default(true),\n asListItem: z.boolean().default(true),\n },\n factory(originalFactory, { config }) {\n return originalFactory({\n icon: <DocsIcon />,\n predicate: result => result.type === 'techdocs',\n component: async () => {\n const { TechDocsSearchResultListItem } = await import(\n '../search/components/TechDocsSearchResultListItem'\n );\n return props => (\n <TechDocsSearchResultListItem {...props} {...config} />\n );\n },\n });\n },\n });\n\nconst techDocsSearchFilterResultTypeExtension =\n SearchFilterResultTypeBlueprint.make({\n params: {\n value: 'techdocs',\n name: 'Documentation',\n icon: <DocsIcon />,\n },\n });\n\n/**\n * Responsible for rendering the provided router element\n *\n * @alpha\n */\nconst techDocsPage = PageBlueprint.makeWithOverrides({\n configSchema: {\n initialFilter: z.enum(['all', 'owned', 'starred']).default('owned'),\n },\n factory(originalFactory, { config }) {\n return originalFactory({\n path: '/docs',\n routeRef: rootRouteRef,\n title: 'Docs',\n icon: <RiArticleLine />,\n loader: () =>\n import('./components/TechDocsIndexPageContent').then(m => (\n <m.TechDocsIndexPageContent initialFilter={config.initialFilter} />\n )),\n });\n },\n});\n\n/**\n * Component responsible for composing a TechDocs reader page experience\n *\n * @alpha\n */\nconst techDocsReaderPage = PageBlueprint.makeWithOverrides({\n name: 'reader',\n inputs: {\n addons: createExtensionInput([AddonBlueprint.dataRefs.addon]),\n },\n configSchema: {\n withoutSearch: z.boolean().default(false),\n withoutHeader: z.boolean().default(false),\n },\n factory(originalFactory, { apis, inputs, config }) {\n const addonsApi = apis.get(techdocsAddonsApiRef);\n\n return originalFactory({\n path: '/docs/:namespace/:kind/:name',\n routeRef: rootDocsRouteRef,\n loader: async () => {\n // Merge addons from the API with old-style direct attachments\n const apiAddons = addonsApi?.getAddons() ?? [];\n const directAddons = inputs.addons.map(output =>\n output.get(AddonBlueprint.dataRefs.addon),\n );\n const addonOptions = [...apiAddons, ...directAddons];\n const { TechDocsReaderPage } = await import(\n './components/TechDocsReaderPage'\n );\n return (\n <TechDocsReaderPage\n addonOptions={addonOptions}\n withSearch={!config.withoutSearch}\n withHeader={!config.withoutHeader}\n />\n );\n },\n });\n },\n});\n\n/**\n * Component responsible for rendering techdocs on entity pages\n *\n * @alpha\n */\nconst techDocsEntityContent = EntityContentBlueprint.makeWithOverrides({\n inputs: {\n addons: createExtensionInput([AddonBlueprint.dataRefs.addon]),\n emptyState: createExtensionInput(\n [coreExtensionData.reactElement.optional()],\n {\n singleton: true,\n optional: true,\n },\n ),\n },\n factory(originalFactory, context) {\n const addonsApi = context.apis.get(techdocsAddonsApiRef);\n\n return originalFactory(\n {\n path: 'docs',\n title: 'TechDocs',\n group: 'documentation',\n routeRef: rootCatalogDocsRouteRef,\n loader: () => {\n // Merge addons from the API with old-style direct attachments\n const apiAddons = addonsApi?.getAddons() ?? [];\n const directAddons = context.inputs.addons.map(output =>\n output.get(AddonBlueprint.dataRefs.addon),\n );\n const addonOptions = [...apiAddons, ...directAddons];\n return import('./components/TechDocsReaderPage').then(m => (\n <m.TechDocsEntityContent\n addonOptions={addonOptions}\n emptyState={context.inputs.emptyState?.get(\n coreExtensionData.reactElement,\n )}\n />\n ));\n },\n },\n context,\n );\n },\n});\n\nconst techDocsEntityContentEmptyState = createExtension({\n kind: 'empty-state',\n name: 'entity-content',\n attachTo: { id: 'entity-content:techdocs', input: 'emptyState' },\n output: [coreExtensionData.reactElement.optional()],\n factory: () => [],\n});\n\nconst techDocsSupportAction = PluginHeaderActionBlueprint.make({\n params: defineParams =>\n defineParams({\n loader: () =>\n import('@backstage/core-components').then(({ SupportButton }) => (\n <SupportButton>\n Discover documentation in your ecosystem.\n </SupportButton>\n )),\n }),\n});\n\n/** @alpha */\nexport default createFrontendPlugin({\n pluginId: 'techdocs',\n title: 'Documentation',\n icon: <RiArticleLine />,\n info: { packageJson: () => import('../../package.json') },\n extensions: [\n techDocsClientApi,\n techDocsStorageApi,\n TechDocsAddonsApiExtension,\n techDocsSupportAction,\n techDocsPage,\n techDocsReaderPage,\n techdocsEntityIconLink,\n techDocsEntityContent,\n techDocsEntityContentEmptyState,\n techDocsSearchFilterResultTypeExtension,\n techDocsSearchResultListItemExtension,\n ],\n routes: {\n root: rootRouteRef,\n docRoot: rootDocsRouteRef,\n entityContent: rootCatalogDocsRouteRef,\n },\n});\n\n/** @alpha */\nexport { techdocsTranslationRef } from '../translation';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"alpha.esm.js","sources":["../src/alpha/index.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { z } from 'zod/v4';\nimport { RiArticleLine } from '@remixicon/react';\nimport {\n createFrontendPlugin,\n ApiBlueprint,\n PageBlueprint,\n PluginHeaderActionBlueprint,\n createExtensionInput,\n coreExtensionData,\n createExtension,\n} from '@backstage/frontend-plugin-api';\nimport {\n configApiRef,\n discoveryApiRef,\n fetchApiRef,\n} from '@backstage/core-plugin-api';\nimport {\n EntityContentBlueprint,\n EntityIconLinkBlueprint,\n} from '@backstage/plugin-catalog-react/alpha';\nimport {\n SearchFilterResultTypeBlueprint,\n SearchResultListItemBlueprint,\n} from '@backstage/plugin-search-react/alpha';\nimport { AddonBlueprint } from '@backstage/plugin-techdocs-react/alpha';\nimport { TechDocsAddonsApiExtension, techdocsAddonsApiRef } from './addonsApi';\nimport { TechDocsClient, TechDocsStorageClient } from '../client';\nimport {\n rootCatalogDocsRouteRef,\n rootDocsRouteRef,\n rootRouteRef,\n} from '../routes';\nimport {\n techdocsApiRef,\n techdocsStorageApiRef,\n} from '@backstage/plugin-techdocs-react';\n\nimport { useTechdocsReaderIconLinkProps } from './hooks/useTechdocsReaderIconLinkProps';\nimport { DocsIcon } from '@backstage/core-components';\n\n/** @alpha */\nconst techdocsEntityIconLink = EntityIconLinkBlueprint.make({\n name: 'read-docs',\n params: {\n useProps: useTechdocsReaderIconLinkProps,\n },\n});\n\n/** @alpha */\nconst techDocsStorageApi = ApiBlueprint.make({\n name: 'storage',\n params: defineParams =>\n defineParams({\n api: techdocsStorageApiRef,\n deps: {\n configApi: configApiRef,\n discoveryApi: discoveryApiRef,\n fetchApi: fetchApiRef,\n },\n factory: ({ configApi, discoveryApi, fetchApi }) =>\n new TechDocsStorageClient({\n configApi,\n discoveryApi,\n fetchApi,\n }),\n }),\n});\n\n/** @alpha */\nconst techDocsClientApi = ApiBlueprint.make({\n params: defineParams =>\n defineParams({\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\n/** @alpha */\nexport const techDocsSearchResultListItemExtension =\n SearchResultListItemBlueprint.makeWithOverrides({\n configSchema: {\n title: z.string().optional(),\n lineClamp: z.number().default(5),\n asLink: z.boolean().default(true),\n asListItem: z.boolean().default(true),\n },\n factory(originalFactory, { config }) {\n return originalFactory({\n icon: <DocsIcon />,\n predicate: result => result.type === 'techdocs',\n component: async () => {\n const { TechDocsSearchResultListItem } = await import(\n '../search/components/TechDocsSearchResultListItem'\n );\n return props => (\n <TechDocsSearchResultListItem {...props} {...config} />\n );\n },\n });\n },\n });\n\nconst techDocsSearchFilterResultTypeExtension =\n SearchFilterResultTypeBlueprint.make({\n params: {\n value: 'techdocs',\n name: 'Documentation',\n icon: <DocsIcon />,\n },\n });\n\n/**\n * Responsible for rendering the provided router element\n *\n * @alpha\n */\nconst techDocsPage = PageBlueprint.makeWithOverrides({\n configSchema: {\n initialFilter: z.enum(['all', 'owned', 'starred']).default('owned'),\n },\n factory(originalFactory, { config }) {\n return originalFactory({\n path: '/docs',\n routeRef: rootRouteRef,\n title: 'Docs',\n icon: <RiArticleLine />,\n loader: () =>\n import('./components/TechDocsIndexPageContent').then(m => (\n <m.TechDocsIndexPageContent initialFilter={config.initialFilter} />\n )),\n });\n },\n});\n\n/**\n * Component responsible for composing a TechDocs reader page experience\n *\n * @alpha\n */\nconst techDocsReaderPage = PageBlueprint.makeWithOverrides({\n name: 'reader',\n inputs: {\n addons: createExtensionInput([AddonBlueprint.dataRefs.addon]),\n },\n configSchema: {\n withoutSearch: z.boolean().default(false),\n withoutHeader: z.boolean().default(false),\n withoutFeedbackLink: z.boolean().default(false),\n },\n factory(originalFactory, { apis, inputs, config }) {\n const addonsApi = apis.get(techdocsAddonsApiRef);\n\n return originalFactory({\n path: '/docs/:namespace/:kind/:name',\n routeRef: rootDocsRouteRef,\n loader: async () => {\n // Merge addons from the API with old-style direct attachments\n const apiAddons = addonsApi?.getAddons() ?? [];\n const directAddons = inputs.addons.map(output =>\n output.get(AddonBlueprint.dataRefs.addon),\n );\n const addonOptions = [...apiAddons, ...directAddons];\n const { TechDocsReaderPage } = await import(\n './components/TechDocsReaderPage'\n );\n return (\n <TechDocsReaderPage\n addonOptions={addonOptions}\n withSearch={!config.withoutSearch}\n withHeader={!config.withoutHeader}\n withFeedbackLink={!config.withoutFeedbackLink}\n />\n );\n },\n });\n },\n});\n\n/**\n * Component responsible for rendering techdocs on entity pages\n *\n * @alpha\n */\nconst techDocsEntityContent = EntityContentBlueprint.makeWithOverrides({\n configSchema: {\n withoutFeedbackLink: z.boolean().default(false),\n },\n inputs: {\n addons: createExtensionInput([AddonBlueprint.dataRefs.addon]),\n emptyState: createExtensionInput(\n [coreExtensionData.reactElement.optional()],\n {\n singleton: true,\n optional: true,\n },\n ),\n },\n factory(originalFactory, context) {\n const addonsApi = context.apis.get(techdocsAddonsApiRef);\n\n return originalFactory(\n {\n path: 'docs',\n title: 'TechDocs',\n group: 'documentation',\n routeRef: rootCatalogDocsRouteRef,\n loader: () => {\n // Merge addons from the API with old-style direct attachments\n const apiAddons = addonsApi?.getAddons() ?? [];\n const directAddons = context.inputs.addons.map(output =>\n output.get(AddonBlueprint.dataRefs.addon),\n );\n const addonOptions = [...apiAddons, ...directAddons];\n return import('./components/TechDocsReaderPage').then(m => (\n <m.TechDocsEntityContent\n addonOptions={addonOptions}\n emptyState={context.inputs.emptyState?.get(\n coreExtensionData.reactElement,\n )}\n withFeedbackLink={!context.config.withoutFeedbackLink}\n />\n ));\n },\n },\n context,\n );\n },\n});\n\nconst techDocsEntityContentEmptyState = createExtension({\n kind: 'empty-state',\n name: 'entity-content',\n attachTo: { id: 'entity-content:techdocs', input: 'emptyState' },\n output: [coreExtensionData.reactElement.optional()],\n factory: () => [],\n});\n\nconst techDocsSupportAction = PluginHeaderActionBlueprint.make({\n params: defineParams =>\n defineParams({\n loader: () =>\n import('@backstage/core-components').then(({ SupportButton }) => (\n <SupportButton>\n Discover documentation in your ecosystem.\n </SupportButton>\n )),\n }),\n});\n\n/** @alpha */\nexport default createFrontendPlugin({\n pluginId: 'techdocs',\n title: 'Documentation',\n icon: <RiArticleLine />,\n info: { packageJson: () => import('../../package.json') },\n extensions: [\n techDocsClientApi,\n techDocsStorageApi,\n TechDocsAddonsApiExtension,\n techDocsSupportAction,\n techDocsPage,\n techDocsReaderPage,\n techdocsEntityIconLink,\n techDocsEntityContent,\n techDocsEntityContentEmptyState,\n techDocsSearchFilterResultTypeExtension,\n techDocsSearchResultListItemExtension,\n ],\n routes: {\n root: rootRouteRef,\n docRoot: rootDocsRouteRef,\n entityContent: rootCatalogDocsRouteRef,\n },\n});\n\n/** @alpha */\nexport { techdocsTranslationRef } from '../translation';\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"api.esm.js","sources":["../src/api.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 { CompoundEntityRef } from '@backstage/catalog-model';\nimport {\n TechDocsEntityMetadata,\n TechDocsMetadata,\n} from '@backstage/plugin-techdocs-react';\nimport { createApiRef } from '@backstage/core-plugin-api';\n\n/**\n * Utility API reference for the {@link TechDocsStorageApi}.\n *\n * @public\n * @deprecated Import from `@backstage/plugin-techdocs-react` instead\n */\nexport const techdocsStorageApiRef = createApiRef<TechDocsStorageApi>({\n id: 'plugin.techdocs.storageservice',\n});\n\n/**\n * Utility API reference for the {@link TechDocsApi}.\n *\n * @public\n * @deprecated Import from `@backstage/plugin-techdocs-react` instead\n */\nexport const techdocsApiRef = createApiRef<TechDocsApi>({\n id: 'plugin.techdocs.service',\n});\n\n/**\n * The outcome of a docs sync operation.\n *\n * @public\n * @deprecated Import from `@backstage/plugin-techdocs-react` instead\n */\nexport type SyncResult = 'cached' | 'updated';\n\n/**\n * API which talks to TechDocs storage to fetch files to render.\n *\n * @public\n * @deprecated Import from `@backstage/plugin-techdocs-react` instead\n */\nexport interface TechDocsStorageApi {\n getApiOrigin(): Promise<string>;\n getStorageUrl(): Promise<string>;\n getBuilder(): Promise<string>;\n getEntityDocs(entityId: CompoundEntityRef, path: string): Promise<string>;\n syncEntityDocs(\n entityId: CompoundEntityRef,\n logHandler?: (line: string) => void,\n ): Promise<SyncResult>;\n getBaseUrl(\n oldBaseUrl: string,\n entityId: CompoundEntityRef,\n path: string,\n ): Promise<string>;\n}\n\n/**\n * API to talk to techdocs-backend.\n *\n * @public\n * @deprecated Import from `@backstage/plugin-techdocs-react` instead\n */\nexport interface TechDocsApi {\n getApiOrigin(): Promise<string>;\n getTechDocsMetadata(entityId: CompoundEntityRef): Promise<TechDocsMetadata>;\n getEntityMetadata(\n entityId: CompoundEntityRef,\n ): Promise<TechDocsEntityMetadata>;\n}\n"],"names":[],"mappings":";;AA6BO,MAAM,wBAAwB,YAAA,CAAiC;AAAA,EACpE,EAAA,EAAI;AACN,CAAC;AAQM,MAAM,iBAAiB,YAAA,CAA0B;AAAA,EACtD,EAAA,EAAI;AACN,CAAC;;;;"}
1
+ {"version":3,"file":"api.esm.js","sources":["../src/api.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 { CompoundEntityRef } from '@backstage/catalog-model';\nimport {\n TechDocsEntityMetadata,\n TechDocsMetadata,\n} from '@backstage/plugin-techdocs-react';\nimport { createApiRef } from '@backstage/core-plugin-api';\n\n/**\n * Utility API reference for the {@link TechDocsStorageApi}.\n *\n * @public\n * @deprecated Import from `@backstage/plugin-techdocs-react` instead\n */\nexport const techdocsStorageApiRef = createApiRef<TechDocsStorageApi>({\n id: 'plugin.techdocs.storageservice',\n});\n\n/**\n * Utility API reference for the {@link TechDocsApi}.\n *\n * @public\n * @deprecated Import from `@backstage/plugin-techdocs-react` instead\n */\nexport const techdocsApiRef = createApiRef<TechDocsApi>({\n id: 'plugin.techdocs.service',\n});\n\n/**\n * The outcome of a docs sync operation.\n *\n * @public\n * @deprecated Import from `@backstage/plugin-techdocs-react` instead\n */\nexport type SyncResult = 'cached' | 'updated';\n\n/**\n * API which talks to TechDocs storage to fetch files to render.\n *\n * @public\n * @deprecated Import from `@backstage/plugin-techdocs-react` instead\n */\nexport interface TechDocsStorageApi {\n getApiOrigin(): Promise<string>;\n getStorageUrl(): Promise<string>;\n getBuilder(): Promise<string>;\n getEntityDocs(entityId: CompoundEntityRef, path: string): Promise<string>;\n syncEntityDocs(\n entityId: CompoundEntityRef,\n logHandler?: (line: string) => void,\n ): Promise<SyncResult>;\n getBaseUrl(\n oldBaseUrl: string,\n entityId: CompoundEntityRef,\n path: string,\n ): Promise<string>;\n}\n\n/**\n * API to talk to techdocs-backend.\n *\n * @public\n * @deprecated Import from `@backstage/plugin-techdocs-react` instead\n */\nexport interface TechDocsApi {\n getApiOrigin(): Promise<string>;\n getTechDocsMetadata(entityId: CompoundEntityRef): Promise<TechDocsMetadata>;\n getEntityMetadata(\n entityId: CompoundEntityRef,\n ): Promise<TechDocsEntityMetadata>;\n}\n"],"names":[],"mappings":";;AA6BO,MAAM,wBAAwB,YAAA,CAAiC;AAAA,EACpE,EAAA,EAAI;AACN,CAAC;AAQM,MAAM,iBAAiB,YAAA,CAA0B;AAAA,EACtD,EAAA,EAAI;AACN,CAAC;;"}