@backstage/plugin-scaffolder 1.39.1-next.1 → 1.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/dist/alpha/components/HomePageFeaturedTemplates/HomePageFeaturedTemplates.esm.js +113 -0
  3. package/dist/alpha/components/HomePageFeaturedTemplates/HomePageFeaturedTemplates.esm.js.map +1 -0
  4. package/dist/alpha/components/HomePageFeaturedTemplates/HomePageFeaturedTemplates.module.css.esm.js +8 -0
  5. package/dist/alpha/components/HomePageFeaturedTemplates/HomePageFeaturedTemplates.module.css.esm.js.map +1 -0
  6. package/dist/alpha/components/HomePageFeaturedTemplates/ScrollControls.esm.js +50 -0
  7. package/dist/alpha/components/HomePageFeaturedTemplates/ScrollControls.esm.js.map +1 -0
  8. package/dist/alpha/components/HomePageFeaturedTemplates/ScrollControls.module.css.esm.js +8 -0
  9. package/dist/alpha/components/HomePageFeaturedTemplates/ScrollControls.module.css.esm.js.map +1 -0
  10. package/dist/alpha/components/HomePageFeaturedTemplates/StateMessage.esm.js +28 -0
  11. package/dist/alpha/components/HomePageFeaturedTemplates/StateMessage.esm.js.map +1 -0
  12. package/dist/alpha/components/HomePageFeaturedTemplates/StateMessage.module.css.esm.js +8 -0
  13. package/dist/alpha/components/HomePageFeaturedTemplates/StateMessage.module.css.esm.js.map +1 -0
  14. package/dist/alpha/components/HomePageFeaturedTemplates/index.esm.js +6 -0
  15. package/dist/alpha/components/HomePageFeaturedTemplates/index.esm.js.map +1 -0
  16. package/dist/alpha/extensions.esm.js +23 -1
  17. package/dist/alpha/extensions.esm.js.map +1 -1
  18. package/dist/alpha/plugin.esm.js +2 -1
  19. package/dist/alpha/plugin.esm.js.map +1 -1
  20. package/dist/alpha.d.ts +22 -0
  21. package/dist/index.d.ts +6 -0
  22. package/dist/node_modules_dist/style-inject/dist/style-inject.es.esm.js +1 -1
  23. package/dist/node_modules_dist/style-inject/dist/style-inject.es.esm.js.map +1 -1
  24. package/dist/plugins/scaffolder/package.json.esm.js +3 -1
  25. package/dist/plugins/scaffolder/package.json.esm.js.map +1 -1
  26. package/dist/translation.esm.js +8 -0
  27. package/dist/translation.esm.js.map +1 -1
  28. package/package.json +29 -27
package/CHANGELOG.md CHANGED
@@ -1,5 +1,49 @@
1
1
  # @backstage/plugin-scaffolder
2
2
 
3
+ ## 1.40.0
4
+
5
+ ### Minor Changes
6
+
7
+ - d0cc453: Added a `Featured Templates` homepage widget that displays templates tagged with a configurable catalog tag, defaulting to `featured`.
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies
12
+ - @backstage/frontend-plugin-api@0.18.2
13
+ - @backstage/integration@2.1.3
14
+ - @backstage/ui@0.19.0
15
+ - @backstage/plugin-techdocs-react@1.4.0
16
+ - @backstage/catalog-client@1.16.3
17
+ - @backstage/plugin-catalog-react@3.3.0
18
+ - @backstage/errors@1.3.2
19
+ - @backstage/filter-predicates@0.2.0
20
+ - @backstage/core-components@0.18.15
21
+ - @backstage/plugin-techdocs-common@0.1.2
22
+ - @backstage/catalog-model@1.10.2
23
+ - @backstage/core-plugin-api@1.12.11
24
+ - @backstage/integration-react@1.2.23
25
+ - @backstage/plugin-catalog-common@1.2.1
26
+ - @backstage/plugin-home-react@0.1.43
27
+ - @backstage/plugin-permission-react@0.5.6
28
+ - @backstage/plugin-scaffolder-common@2.3.1
29
+ - @backstage/plugin-scaffolder-react@2.1.1
30
+
31
+ ## 1.40.0-next.2
32
+
33
+ ### Minor Changes
34
+
35
+ - d0cc453: Added a `Featured Templates` homepage widget that displays templates tagged with a configurable catalog tag, defaulting to `featured`.
36
+
37
+ ### Patch Changes
38
+
39
+ - Updated dependencies
40
+ - @backstage/frontend-plugin-api@0.18.2-next.1
41
+ - @backstage/catalog-client@1.16.3-next.1
42
+ - @backstage/plugin-catalog-react@3.3.0-next.2
43
+ - @backstage/core-components@0.18.15-next.3
44
+ - @backstage/ui@0.19.0-next.0
45
+ - @backstage/plugin-scaffolder-react@2.1.1-next.1
46
+
3
47
  ## 1.39.1-next.1
4
48
 
5
49
  ### Patch Changes
@@ -0,0 +1,113 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { stringifyEntityRef, DEFAULT_NAMESPACE } from '@backstage/catalog-model';
3
+ import { useTranslationRef, useApi } from '@backstage/frontend-plugin-api';
4
+ import { useRouteRef } from '@backstage/core-plugin-api';
5
+ import { catalogApiRef } from '@backstage/plugin-catalog-react';
6
+ import { isTemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';
7
+ import { TemplateCard } from '@backstage/plugin-scaffolder-react/alpha';
8
+ import { Skeleton, Button, ButtonLink } from '@backstage/ui';
9
+ import { RiErrorWarningLine, RiShapesLine } from '@remixicon/react';
10
+ import { useState } from 'react';
11
+ import { useInView } from 'react-intersection-observer';
12
+ import useAsyncRetry from 'react-use/esm/useAsyncRetry';
13
+ import { useNavigate } from 'react-router-dom';
14
+ import { selectedTemplateRouteRef, rootRouteRef } from '../../../routes.esm.js';
15
+ import { scaffolderTranslationRef } from '../../../translation.esm.js';
16
+ import styles from './HomePageFeaturedTemplates.module.css.esm.js';
17
+ import { ScrollControls } from './ScrollControls.esm.js';
18
+ import { StateMessage } from './StateMessage.esm.js';
19
+
20
+ function HomePageFeaturedTemplates({
21
+ tag
22
+ }) {
23
+ const { t } = useTranslationRef(scaffolderTranslationRef);
24
+ const catalogApi = useApi(catalogApiRef);
25
+ const selectedTemplateRoute = useRouteRef(selectedTemplateRouteRef);
26
+ const templatesRoute = useRouteRef(rootRouteRef);
27
+ const navigate = useNavigate();
28
+ const [track, setTrack] = useState(null);
29
+ const { ref: firstCardRef, inView: firstCardInView } = useInView({
30
+ root: track,
31
+ skip: !track,
32
+ threshold: 0.99,
33
+ initialInView: true
34
+ });
35
+ const { ref: lastCardRef, inView: lastCardInView } = useInView({
36
+ root: track,
37
+ skip: !track,
38
+ threshold: 0.99,
39
+ initialInView: true
40
+ });
41
+ const { loading, error, value, retry } = useAsyncRetry(
42
+ () => catalogApi.getEntities({
43
+ filter: { kind: "Template", "metadata.tags": tag }
44
+ }),
45
+ [catalogApi, tag]
46
+ );
47
+ const templates = (value?.items ?? []).filter(isTemplateEntityV1beta3);
48
+ const openTemplate = (template) => {
49
+ navigate(
50
+ selectedTemplateRoute({
51
+ namespace: template.metadata.namespace ?? DEFAULT_NAMESPACE,
52
+ templateName: template.metadata.name
53
+ })
54
+ );
55
+ };
56
+ const cardRef = (index) => {
57
+ if (index === 0) return firstCardRef;
58
+ if (index === templates.length - 1) return lastCardRef;
59
+ return void 0;
60
+ };
61
+ if (loading) {
62
+ return /* @__PURE__ */ jsx("div", { className: styles.root, children: /* @__PURE__ */ jsx("div", { className: styles.track, role: "list", "aria-busy": "true", children: Array.from({ length: 3 }, (_, index) => /* @__PURE__ */ jsx("div", { className: styles.card, role: "listitem", children: /* @__PURE__ */ jsx(Skeleton, { width: "100%", height: "100%" }) }, index)) }) });
63
+ }
64
+ if (error) {
65
+ return /* @__PURE__ */ jsx(
66
+ StateMessage,
67
+ {
68
+ icon: RiErrorWarningLine,
69
+ message: t("featuredTemplatesWidget.errorMessage"),
70
+ children: /* @__PURE__ */ jsx(Button, { size: "small", variant: "secondary", onPress: retry, children: t("featuredTemplatesWidget.errorRetryButtonTitle") })
71
+ }
72
+ );
73
+ }
74
+ if (!templates.length) {
75
+ return /* @__PURE__ */ jsx(
76
+ StateMessage,
77
+ {
78
+ icon: RiShapesLine,
79
+ message: t("featuredTemplatesWidget.emptyMessage"),
80
+ children: /* @__PURE__ */ jsx(ButtonLink, { size: "small", variant: "secondary", href: templatesRoute(), children: t("featuredTemplatesWidget.emptyBrowseAllButtonTitle") })
81
+ }
82
+ );
83
+ }
84
+ return /* @__PURE__ */ jsxs("div", { className: styles.root, children: [
85
+ /* @__PURE__ */ jsx("div", { ref: setTrack, className: styles.track, role: "list", children: templates.map((template, index) => /* @__PURE__ */ jsx(
86
+ "div",
87
+ {
88
+ className: styles.card,
89
+ role: "listitem",
90
+ ref: cardRef(index),
91
+ children: /* @__PURE__ */ jsx(
92
+ TemplateCard,
93
+ {
94
+ template,
95
+ onSelected: () => openTemplate(template)
96
+ }
97
+ )
98
+ },
99
+ stringifyEntityRef(template)
100
+ )) }),
101
+ track && /* @__PURE__ */ jsx(
102
+ ScrollControls,
103
+ {
104
+ track,
105
+ canScrollPrevious: !firstCardInView,
106
+ canScrollNext: !lastCardInView
107
+ }
108
+ )
109
+ ] });
110
+ }
111
+
112
+ export { HomePageFeaturedTemplates };
113
+ //# sourceMappingURL=HomePageFeaturedTemplates.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HomePageFeaturedTemplates.esm.js","sources":["../../../../src/alpha/components/HomePageFeaturedTemplates/HomePageFeaturedTemplates.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 {\n DEFAULT_NAMESPACE,\n stringifyEntityRef,\n} from '@backstage/catalog-model';\nimport { useApi, useTranslationRef } from '@backstage/frontend-plugin-api';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { catalogApiRef } from '@backstage/plugin-catalog-react';\nimport {\n isTemplateEntityV1beta3,\n type TemplateEntityV1beta3,\n} from '@backstage/plugin-scaffolder-common';\nimport { TemplateCard } from '@backstage/plugin-scaffolder-react/alpha';\nimport { Button, ButtonLink, Skeleton } from '@backstage/ui';\nimport { RiErrorWarningLine, RiShapesLine } from '@remixicon/react';\nimport { useState } from 'react';\nimport { useInView } from 'react-intersection-observer';\nimport useAsyncRetry from 'react-use/esm/useAsyncRetry';\nimport { useNavigate } from 'react-router-dom';\nimport { rootRouteRef, selectedTemplateRouteRef } from '../../../routes';\nimport { scaffolderTranslationRef } from '../../../translation';\nimport styles from './HomePageFeaturedTemplates.module.css';\nimport { ScrollControls } from './ScrollControls';\nimport { StateMessage } from './StateMessage';\n\nexport interface HomePageFeaturedTemplatesProps {\n tag: string;\n}\n\nexport function HomePageFeaturedTemplates({\n tag,\n}: HomePageFeaturedTemplatesProps) {\n const { t } = useTranslationRef(scaffolderTranslationRef);\n const catalogApi = useApi(catalogApiRef);\n const selectedTemplateRoute = useRouteRef(selectedTemplateRouteRef);\n const templatesRoute = useRouteRef(rootRouteRef);\n const navigate = useNavigate();\n const [track, setTrack] = useState<HTMLDivElement | null>(null);\n const { ref: firstCardRef, inView: firstCardInView } = useInView({\n root: track,\n skip: !track,\n threshold: 0.99,\n initialInView: true,\n });\n const { ref: lastCardRef, inView: lastCardInView } = useInView({\n root: track,\n skip: !track,\n threshold: 0.99,\n initialInView: true,\n });\n const { loading, error, value, retry } = useAsyncRetry(\n () =>\n catalogApi.getEntities({\n filter: { kind: 'Template', 'metadata.tags': tag },\n }),\n [catalogApi, tag],\n );\n\n const templates = (value?.items ?? []).filter(isTemplateEntityV1beta3);\n\n const openTemplate = (template: TemplateEntityV1beta3) => {\n navigate(\n selectedTemplateRoute({\n namespace: template.metadata.namespace ?? DEFAULT_NAMESPACE,\n templateName: template.metadata.name,\n }),\n );\n };\n\n const cardRef = (index: number) => {\n if (index === 0) return firstCardRef;\n if (index === templates.length - 1) return lastCardRef;\n return undefined;\n };\n\n if (loading) {\n return (\n <div className={styles.root}>\n <div className={styles.track} role=\"list\" aria-busy=\"true\">\n {Array.from({ length: 3 }, (_, index) => (\n <div className={styles.card} role=\"listitem\" key={index}>\n <Skeleton width=\"100%\" height=\"100%\" />\n </div>\n ))}\n </div>\n </div>\n );\n }\n\n if (error) {\n return (\n <StateMessage\n icon={RiErrorWarningLine}\n message={t('featuredTemplatesWidget.errorMessage')}\n >\n <Button size=\"small\" variant=\"secondary\" onPress={retry}>\n {t('featuredTemplatesWidget.errorRetryButtonTitle')}\n </Button>\n </StateMessage>\n );\n }\n\n if (!templates.length) {\n return (\n <StateMessage\n icon={RiShapesLine}\n message={t('featuredTemplatesWidget.emptyMessage')}\n >\n <ButtonLink size=\"small\" variant=\"secondary\" href={templatesRoute()}>\n {t('featuredTemplatesWidget.emptyBrowseAllButtonTitle')}\n </ButtonLink>\n </StateMessage>\n );\n }\n\n return (\n <div className={styles.root}>\n <div ref={setTrack} className={styles.track} role=\"list\">\n {templates.map((template, index) => (\n <div\n className={styles.card}\n role=\"listitem\"\n key={stringifyEntityRef(template)}\n ref={cardRef(index)}\n >\n <TemplateCard\n template={template}\n onSelected={() => openTemplate(template)}\n />\n </div>\n ))}\n </div>\n {track && (\n <ScrollControls\n track={track}\n canScrollPrevious={!firstCardInView}\n canScrollNext={!lastCardInView}\n />\n )}\n </div>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import styleInject from '../../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
+
3
+ var css_248z = ".HomePageFeaturedTemplates_root__aafc641ad5 {\n --bleed: var(--bui-space-2);\n position: relative;\n height: 100%;\n margin-inline: calc(-1 * var(--bleed));\n}\n\n.HomePageFeaturedTemplates_track__aafc641ad5 {\n display: grid;\n grid-auto-flow: column;\n grid-auto-columns: min(15rem, 100%);\n gap: var(--bui-space-4);\n height: 100%;\n padding: var(--bleed);\n overflow-x: auto;\n overflow-y: hidden;\n overscroll-behavior-inline: contain;\n scroll-padding-inline: var(--bleed);\n scroll-snap-type: inline proximity;\n scrollbar-width: none;\n}\n\n.HomePageFeaturedTemplates_card__aafc641ad5 {\n display: flex;\n min-height: 0;\n scroll-snap-align: start;\n}\n\n.HomePageFeaturedTemplates_card__aafc641ad5 > * {\n flex: 1;\n}\n\n.HomePageFeaturedTemplates_card__aafc641ad5 h4 {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n";
4
+ var styles = {"root":"HomePageFeaturedTemplates_root__aafc641ad5","track":"HomePageFeaturedTemplates_track__aafc641ad5","card":"HomePageFeaturedTemplates_card__aafc641ad5"};
5
+ styleInject(css_248z);
6
+
7
+ export { styles as default };
8
+ //# sourceMappingURL=HomePageFeaturedTemplates.module.css.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HomePageFeaturedTemplates.module.css.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,50 @@
1
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
+ import { useTranslationRef } from '@backstage/frontend-plugin-api';
3
+ import { ButtonIcon } from '@backstage/ui';
4
+ import { RiArrowLeftSLine, RiArrowRightSLine } from '@remixicon/react';
5
+ import { scaffolderTranslationRef } from '../../../translation.esm.js';
6
+ import styles from './ScrollControls.module.css.esm.js';
7
+
8
+ function cardStep(track) {
9
+ const firstCard = track.children[0];
10
+ const secondCard = track.children[1];
11
+ return secondCard ? secondCard.offsetLeft - firstCard.offsetLeft : firstCard.offsetWidth;
12
+ }
13
+ function ScrollControls({
14
+ track,
15
+ canScrollPrevious,
16
+ canScrollNext
17
+ }) {
18
+ const { t } = useTranslationRef(scaffolderTranslationRef);
19
+ const scroll = (direction) => {
20
+ track.scrollBy({
21
+ left: direction * cardStep(track),
22
+ behavior: "smooth"
23
+ });
24
+ };
25
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
26
+ canScrollPrevious && /* @__PURE__ */ jsx(
27
+ ButtonIcon,
28
+ {
29
+ className: `${styles.control} ${styles.previous}`,
30
+ "aria-label": t("featuredTemplatesWidget.scrollPreviousButtonTitle"),
31
+ variant: "primary",
32
+ icon: /* @__PURE__ */ jsx(RiArrowLeftSLine, {}),
33
+ onPress: () => scroll(-1)
34
+ }
35
+ ),
36
+ canScrollNext && /* @__PURE__ */ jsx(
37
+ ButtonIcon,
38
+ {
39
+ className: `${styles.control} ${styles.next}`,
40
+ "aria-label": t("featuredTemplatesWidget.scrollNextButtonTitle"),
41
+ variant: "primary",
42
+ icon: /* @__PURE__ */ jsx(RiArrowRightSLine, {}),
43
+ onPress: () => scroll(1)
44
+ }
45
+ )
46
+ ] });
47
+ }
48
+
49
+ export { ScrollControls };
50
+ //# sourceMappingURL=ScrollControls.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScrollControls.esm.js","sources":["../../../../src/alpha/components/HomePageFeaturedTemplates/ScrollControls.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 { useTranslationRef } from '@backstage/frontend-plugin-api';\nimport { ButtonIcon } from '@backstage/ui';\nimport { RiArrowLeftSLine, RiArrowRightSLine } from '@remixicon/react';\nimport { scaffolderTranslationRef } from '../../../translation';\nimport styles from './ScrollControls.module.css';\n\nfunction cardStep(track: HTMLElement) {\n const firstCard = track.children[0] as HTMLElement;\n const secondCard = track.children[1] as HTMLElement | undefined;\n return secondCard\n ? secondCard.offsetLeft - firstCard.offsetLeft\n : firstCard.offsetWidth;\n}\n\nexport function ScrollControls({\n track,\n canScrollPrevious,\n canScrollNext,\n}: {\n track: HTMLElement;\n canScrollPrevious: boolean;\n canScrollNext: boolean;\n}) {\n const { t } = useTranslationRef(scaffolderTranslationRef);\n\n const scroll = (direction: -1 | 1) => {\n track.scrollBy({\n left: direction * cardStep(track),\n behavior: 'smooth',\n });\n };\n\n return (\n <>\n {canScrollPrevious && (\n <ButtonIcon\n className={`${styles.control} ${styles.previous}`}\n aria-label={t('featuredTemplatesWidget.scrollPreviousButtonTitle')}\n variant=\"primary\"\n icon={<RiArrowLeftSLine />}\n onPress={() => scroll(-1)}\n />\n )}\n {canScrollNext && (\n <ButtonIcon\n className={`${styles.control} ${styles.next}`}\n aria-label={t('featuredTemplatesWidget.scrollNextButtonTitle')}\n variant=\"primary\"\n icon={<RiArrowRightSLine />}\n onPress={() => scroll(1)}\n />\n )}\n </>\n );\n}\n"],"names":[],"mappings":";;;;;;;AAsBA,SAAS,SAAS,KAAA,EAAoB;AACpC,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,QAAA,CAAS,CAAC,CAAA;AAClC,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,QAAA,CAAS,CAAC,CAAA;AACnC,EAAA,OAAO,UAAA,GACH,UAAA,CAAW,UAAA,GAAa,SAAA,CAAU,aAClC,SAAA,CAAU,WAAA;AAChB;AAEO,SAAS,cAAA,CAAe;AAAA,EAC7B,KAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AAExD,EAAA,MAAM,MAAA,GAAS,CAAC,SAAA,KAAsB;AACpC,IAAA,KAAA,CAAM,QAAA,CAAS;AAAA,MACb,IAAA,EAAM,SAAA,GAAY,QAAA,CAAS,KAAK,CAAA;AAAA,MAChC,QAAA,EAAU;AAAA,KACX,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,iBAAA,oBACC,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,WAAW,CAAA,EAAG,MAAA,CAAO,OAAO,CAAA,CAAA,EAAI,OAAO,QAAQ,CAAA,CAAA;AAAA,QAC/C,YAAA,EAAY,EAAE,mDAAmD,CAAA;AAAA,QACjE,OAAA,EAAQ,SAAA;AAAA,QACR,IAAA,sBAAO,gBAAA,EAAA,EAAiB,CAAA;AAAA,QACxB,OAAA,EAAS,MAAM,MAAA,CAAO,EAAE;AAAA;AAAA,KAC1B;AAAA,IAED,aAAA,oBACC,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,WAAW,CAAA,EAAG,MAAA,CAAO,OAAO,CAAA,CAAA,EAAI,OAAO,IAAI,CAAA,CAAA;AAAA,QAC3C,YAAA,EAAY,EAAE,+CAA+C,CAAA;AAAA,QAC7D,OAAA,EAAQ,SAAA;AAAA,QACR,IAAA,sBAAO,iBAAA,EAAA,EAAkB,CAAA;AAAA,QACzB,OAAA,EAAS,MAAM,MAAA,CAAO,CAAC;AAAA;AAAA;AACzB,GAAA,EAEJ,CAAA;AAEJ;;"}
@@ -0,0 +1,8 @@
1
+ import styleInject from '../../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
+
3
+ var css_248z = ".ScrollControls_control__b851fb7388 {\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n box-shadow: var(--bui-shadow);\n}\n\n.ScrollControls_previous__b851fb7388 {\n left: 0;\n}\n\n.ScrollControls_next__b851fb7388 {\n right: 0;\n}\n";
4
+ var styles = {"control":"ScrollControls_control__b851fb7388","previous":"ScrollControls_previous__b851fb7388","next":"ScrollControls_next__b851fb7388"};
5
+ styleInject(css_248z);
6
+
7
+ export { styles as default };
8
+ //# sourceMappingURL=ScrollControls.module.css.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScrollControls.module.css.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,28 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { Flex, Text } from '@backstage/ui';
3
+ import styles from './StateMessage.module.css.esm.js';
4
+
5
+ function StateMessage({
6
+ icon: Icon,
7
+ message,
8
+ children
9
+ }) {
10
+ return /* @__PURE__ */ jsxs(
11
+ Flex,
12
+ {
13
+ direction: "column",
14
+ gap: "3",
15
+ align: "center",
16
+ justify: "center",
17
+ className: styles.state,
18
+ children: [
19
+ /* @__PURE__ */ jsx(Icon, { className: styles.stateIcon, "aria-hidden": true }),
20
+ /* @__PURE__ */ jsx(Text, { color: "secondary", children: message }),
21
+ children
22
+ ]
23
+ }
24
+ );
25
+ }
26
+
27
+ export { StateMessage };
28
+ //# sourceMappingURL=StateMessage.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StateMessage.esm.js","sources":["../../../../src/alpha/components/HomePageFeaturedTemplates/StateMessage.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 { Flex, Text } from '@backstage/ui';\nimport type { RemixiconComponentType } from '@remixicon/react';\nimport type { ReactNode } from 'react';\nimport styles from './StateMessage.module.css';\n\nexport function StateMessage({\n icon: Icon,\n message,\n children,\n}: {\n icon: RemixiconComponentType;\n message: string;\n children?: ReactNode;\n}) {\n return (\n <Flex\n direction=\"column\"\n gap=\"3\"\n align=\"center\"\n justify=\"center\"\n className={styles.state}\n >\n <Icon className={styles.stateIcon} aria-hidden />\n <Text color=\"secondary\">{message}</Text>\n {children}\n </Flex>\n );\n}\n"],"names":[],"mappings":";;;;AAqBO,SAAS,YAAA,CAAa;AAAA,EAC3B,IAAA,EAAM,IAAA;AAAA,EACN,OAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,uBACE,IAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,QAAA;AAAA,MACV,GAAA,EAAI,GAAA;AAAA,MACJ,KAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAQ,QAAA;AAAA,MACR,WAAW,MAAA,CAAO,KAAA;AAAA,MAElB,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAW,MAAA,CAAO,SAAA,EAAW,eAAW,IAAA,EAAC,CAAA;AAAA,wBAC/C,GAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAM,WAAA,EAAa,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,QAChC;AAAA;AAAA;AAAA,GACH;AAEJ;;"}
@@ -0,0 +1,8 @@
1
+ import styleInject from '../../../node_modules_dist/style-inject/dist/style-inject.es.esm.js';
2
+
3
+ var css_248z = ".StateMessage_state__8d6a03e1e6 {\n height: 100%;\n}\n\n.StateMessage_stateIcon__8d6a03e1e6 {\n width: 2rem;\n height: 2rem;\n color: var(--bui-fg-secondary);\n}\n";
4
+ var styles = {"state":"StateMessage_state__8d6a03e1e6","stateIcon":"StateMessage_stateIcon__8d6a03e1e6"};
5
+ styleInject(css_248z);
6
+
7
+ export { styles as default };
8
+ //# sourceMappingURL=StateMessage.module.css.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StateMessage.module.css.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,6 @@
1
+ import { HomePageFeaturedTemplates } from './HomePageFeaturedTemplates.esm.js';
2
+
3
+
4
+
5
+ export { HomePageFeaturedTemplates };
6
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -6,6 +6,7 @@ import { rootRouteRef } from '../routes.esm.js';
6
6
  import CreateComponentIcon from '@material-ui/icons/AddCircleOutline';
7
7
  import { FormFieldBlueprint, formFieldsApiRef, scaffolderTemplateOutputTemplateRefsRef, scaffolderTemplateOutputsComponentRef } from '@backstage/plugin-scaffolder-react/alpha';
8
8
  import { scmIntegrationsApiRef } from '@backstage/integration-react';
9
+ import { HomePageWidgetBlueprint } from '@backstage/plugin-home-react/alpha';
9
10
  import { scaffolderApiRef } from '@backstage/plugin-scaffolder-react';
10
11
  import { ScaffolderClient } from '../api.esm.js';
11
12
 
@@ -204,6 +205,27 @@ const scaffolderApi = ApiBlueprint.make({
204
205
  })
205
206
  })
206
207
  });
208
+ const scaffolderFeaturedTemplatesWidget = HomePageWidgetBlueprint.makeWithOverrides({
209
+ name: "featured-templates",
210
+ configSchema: {
211
+ title: z.string().default("Featured Templates"),
212
+ tag: z.string().default("featured")
213
+ },
214
+ factory(originalFactory, { config }) {
215
+ return originalFactory({
216
+ name: "HomePageFeaturedTemplates",
217
+ title: config.title,
218
+ components: () => import('./components/HomePageFeaturedTemplates/index.esm.js').then((m) => ({
219
+ Content: m.HomePageFeaturedTemplates
220
+ })),
221
+ componentProps: { tag: config.tag },
222
+ layout: {
223
+ width: { defaultColumns: 6, minColumns: 2 },
224
+ height: { defaultRows: 6, minRows: 5 }
225
+ }
226
+ });
227
+ }
228
+ });
207
229
 
208
- export { entityNamePickerFormField, entityPickerFormField, entityTagsPickerFormField, multiEntityPickerFormField, myGroupsPickerFormField, ownedEntityPickerFormField, ownerPickerFormField, repoBranchPickerFormField, repoOwnerPickerFormField, repoUrlPickerFormField, scaffolderActionsSubPage, scaffolderApi, scaffolderEditorSubPage, scaffolderPage, scaffolderTasksSubPage, scaffolderTemplatesSubPage, scaffolderTemplatingExtensionsSubPage };
230
+ export { entityNamePickerFormField, entityPickerFormField, entityTagsPickerFormField, multiEntityPickerFormField, myGroupsPickerFormField, ownedEntityPickerFormField, ownerPickerFormField, repoBranchPickerFormField, repoOwnerPickerFormField, repoUrlPickerFormField, scaffolderActionsSubPage, scaffolderApi, scaffolderEditorSubPage, scaffolderFeaturedTemplatesWidget, scaffolderPage, scaffolderTasksSubPage, scaffolderTemplatesSubPage, scaffolderTemplatingExtensionsSubPage };
209
231
  //# sourceMappingURL=extensions.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"extensions.esm.js","sources":["../../src/alpha/extensions.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 {\n ApiBlueprint,\n createExtensionInput,\n discoveryApiRef,\n fetchApiRef,\n identityApiRef,\n PageBlueprint,\n SubPageBlueprint,\n} from '@backstage/frontend-plugin-api';\nimport { z } from 'zod/v4';\nimport {\n createZodV4FilterPredicateSchema,\n filterPredicateToFilterFunction,\n} from '@backstage/filter-predicates';\nimport { rootRouteRef } from '../routes';\nimport CreateComponentIcon from '@material-ui/icons/AddCircleOutline';\nimport {\n FormFieldBlueprint,\n formFieldsApiRef,\n scaffolderTemplateOutputsComponentRef,\n scaffolderTemplateOutputTemplateRefsRef,\n} from '@backstage/plugin-scaffolder-react/alpha';\nimport { scmIntegrationsApiRef } from '@backstage/integration-react';\nimport {\n scaffolderApiRef,\n TemplateGroupFilter,\n} from '@backstage/plugin-scaffolder-react';\nimport { ScaffolderClient } from '../api';\n\nexport const scaffolderPage = PageBlueprint.makeWithOverrides({\n inputs: {\n formFields: createExtensionInput([\n FormFieldBlueprint.dataRefs.formFieldLoader,\n ]),\n },\n factory(originalFactory) {\n return originalFactory({\n routeRef: rootRouteRef,\n path: '/create',\n title: 'Create',\n icon: <CreateComponentIcon fontSize=\"inherit\" />,\n });\n },\n});\n\nexport const scaffolderTemplatesSubPage = SubPageBlueprint.makeWithOverrides({\n name: 'templates',\n configSchema: {\n enableBackstageUi: z.boolean().optional().default(false),\n groups: z\n .array(\n z.object({\n title: z.string(),\n filter: createZodV4FilterPredicateSchema(),\n }),\n )\n .optional(),\n templateFilter: createZodV4FilterPredicateSchema().optional(),\n },\n factory(originalFactory, { apis, config }) {\n const formFieldsApi = apis.get(formFieldsApiRef);\n\n const groups: TemplateGroupFilter[] | undefined = config.groups?.map(\n group => ({\n title: group.title,\n filter: filterPredicateToFilterFunction(group.filter),\n }),\n );\n const templateFilter =\n config.templateFilter === undefined\n ? undefined\n : filterPredicateToFilterFunction(config.templateFilter);\n\n return originalFactory({\n path: 'templates',\n title: 'Templates',\n loader: async () => {\n const formFields = (await formFieldsApi?.loadFormFields()) ?? [];\n\n return import('./components/TemplatesSubPage').then(m => (\n <m.TemplatesSubPage\n formFields={formFields}\n groups={groups}\n templateFilter={templateFilter}\n formProps={{\n EXPERIMENTAL_theme: config.enableBackstageUi ? 'bui' : 'mui',\n }}\n />\n ));\n },\n });\n },\n});\n\nexport const scaffolderTasksSubPage = SubPageBlueprint.makeWithOverrides({\n name: 'tasks',\n inputs: {\n templateOutputsComponents: createExtensionInput(\n [\n scaffolderTemplateOutputsComponentRef,\n scaffolderTemplateOutputTemplateRefsRef,\n ],\n { optional: true },\n ),\n },\n factory(originalFactory, { inputs }) {\n return originalFactory({\n path: 'tasks',\n title: 'Tasks',\n loader: async () => {\n const templateOutputsComponents = inputs.templateOutputsComponents?.map(\n input => ({\n component: input.get(scaffolderTemplateOutputsComponentRef),\n templateRefs: input.get(scaffolderTemplateOutputTemplateRefsRef),\n }),\n );\n return import('./components/TasksSubPage').then(m => (\n <m.TasksSubPage\n templateOutputsComponents={templateOutputsComponents}\n />\n ));\n },\n });\n },\n});\n\nexport const scaffolderActionsSubPage = SubPageBlueprint.make({\n name: 'actions',\n params: {\n path: 'actions',\n title: 'Actions',\n loader: () =>\n Promise.all([\n import('../components/ActionsPage'),\n import('@backstage/core-components'),\n ]).then(([m, { Content }]) => (\n <Content>\n <m.ActionPageContent />\n </Content>\n )),\n },\n});\n\nexport const scaffolderEditorSubPage = SubPageBlueprint.make({\n name: 'editor',\n params: {\n path: 'edit',\n title: 'Template Editor',\n loader: () =>\n import('./components/EditorSubPage').then(m => <m.EditorSubPage />),\n },\n});\n\nexport const scaffolderTemplatingExtensionsSubPage = SubPageBlueprint.make({\n name: 'templating-extensions',\n params: {\n path: 'templating-extensions',\n title: 'Templating Extensions',\n loader: () =>\n Promise.all([\n import('../components/TemplatingExtensionsPage'),\n import('@backstage/core-components'),\n ]).then(([m, { Content }]) => (\n <Content>\n <m.TemplatingExtensionsPageContent linkLocal />\n </Content>\n )),\n },\n});\n\nexport const repoUrlPickerFormField = FormFieldBlueprint.make({\n name: 'repo-url-picker',\n params: {\n field: () => import('./fields/RepoUrlPicker').then(m => m.RepoUrlPicker),\n },\n});\n\nexport const entityNamePickerFormField = FormFieldBlueprint.make({\n name: 'entity-name-picker',\n params: {\n field: () =>\n import('./fields/EntityNamePicker').then(m => m.EntityNamePicker),\n },\n});\n\nexport const entityPickerFormField = FormFieldBlueprint.make({\n name: 'entity-picker',\n params: {\n field: () => import('./fields/EntityPicker').then(m => m.EntityPicker),\n },\n});\n\nexport const ownerPickerFormField = FormFieldBlueprint.make({\n name: 'owner-picker',\n params: {\n field: () => import('./fields/OwnerPicker').then(m => m.OwnerPicker),\n },\n});\n\nexport const entityTagsPickerFormField = FormFieldBlueprint.make({\n name: 'entity-tags-picker',\n params: {\n field: () =>\n import('./fields/EntityTagsPicker').then(m => m.EntityTagsPicker),\n },\n});\n\nexport const multiEntityPickerFormField = FormFieldBlueprint.make({\n name: 'multi-entity-picker',\n params: {\n field: () =>\n import('./fields/MultiEntityPicker').then(m => m.MultiEntityPicker),\n },\n});\n\nexport const myGroupsPickerFormField = FormFieldBlueprint.make({\n name: 'my-groups-picker',\n params: {\n field: () => import('./fields/MyGroupsPicker').then(m => m.MyGroupsPicker),\n },\n});\n\nexport const ownedEntityPickerFormField = FormFieldBlueprint.make({\n name: 'owned-entity-picker',\n params: {\n field: () =>\n import('./fields/OwnedEntityPicker').then(m => m.OwnedEntityPicker),\n },\n});\n\nexport const repoBranchPickerFormField = FormFieldBlueprint.make({\n name: 'repo-branch-picker',\n params: {\n field: () =>\n import('./fields/RepoBranchPicker').then(m => m.RepoBranchPicker),\n },\n});\n\nexport const repoOwnerPickerFormField = FormFieldBlueprint.make({\n name: 'repo-owner-picker',\n params: {\n field: () =>\n import('./fields/RepoOwnerPicker').then(m => m.RepoOwnerPicker),\n },\n});\n\nexport const scaffolderApi = ApiBlueprint.make({\n params: defineParams =>\n defineParams({\n api: scaffolderApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n scmIntegrationsApi: scmIntegrationsApiRef,\n fetchApi: fetchApiRef,\n identityApi: identityApiRef,\n },\n factory: ({ discoveryApi, scmIntegrationsApi, fetchApi, identityApi }) =>\n new ScaffolderClient({\n discoveryApi,\n scmIntegrationsApi,\n fetchApi,\n identityApi,\n }),\n }),\n});\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extensions.esm.js","sources":["../../src/alpha/extensions.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 {\n ApiBlueprint,\n createExtensionInput,\n discoveryApiRef,\n fetchApiRef,\n identityApiRef,\n PageBlueprint,\n SubPageBlueprint,\n} from '@backstage/frontend-plugin-api';\nimport { z } from 'zod/v4';\nimport {\n createZodV4FilterPredicateSchema,\n filterPredicateToFilterFunction,\n} from '@backstage/filter-predicates';\nimport { rootRouteRef } from '../routes';\nimport CreateComponentIcon from '@material-ui/icons/AddCircleOutline';\nimport {\n FormFieldBlueprint,\n formFieldsApiRef,\n scaffolderTemplateOutputsComponentRef,\n scaffolderTemplateOutputTemplateRefsRef,\n} from '@backstage/plugin-scaffolder-react/alpha';\nimport { scmIntegrationsApiRef } from '@backstage/integration-react';\nimport { HomePageWidgetBlueprint } from '@backstage/plugin-home-react/alpha';\nimport {\n scaffolderApiRef,\n TemplateGroupFilter,\n} from '@backstage/plugin-scaffolder-react';\nimport { ScaffolderClient } from '../api';\n\nexport const scaffolderPage = PageBlueprint.makeWithOverrides({\n inputs: {\n formFields: createExtensionInput([\n FormFieldBlueprint.dataRefs.formFieldLoader,\n ]),\n },\n factory(originalFactory) {\n return originalFactory({\n routeRef: rootRouteRef,\n path: '/create',\n title: 'Create',\n icon: <CreateComponentIcon fontSize=\"inherit\" />,\n });\n },\n});\n\nexport const scaffolderTemplatesSubPage = SubPageBlueprint.makeWithOverrides({\n name: 'templates',\n configSchema: {\n enableBackstageUi: z.boolean().optional().default(false),\n groups: z\n .array(\n z.object({\n title: z.string(),\n filter: createZodV4FilterPredicateSchema(),\n }),\n )\n .optional(),\n templateFilter: createZodV4FilterPredicateSchema().optional(),\n },\n factory(originalFactory, { apis, config }) {\n const formFieldsApi = apis.get(formFieldsApiRef);\n\n const groups: TemplateGroupFilter[] | undefined = config.groups?.map(\n group => ({\n title: group.title,\n filter: filterPredicateToFilterFunction(group.filter),\n }),\n );\n const templateFilter =\n config.templateFilter === undefined\n ? undefined\n : filterPredicateToFilterFunction(config.templateFilter);\n\n return originalFactory({\n path: 'templates',\n title: 'Templates',\n loader: async () => {\n const formFields = (await formFieldsApi?.loadFormFields()) ?? [];\n\n return import('./components/TemplatesSubPage').then(m => (\n <m.TemplatesSubPage\n formFields={formFields}\n groups={groups}\n templateFilter={templateFilter}\n formProps={{\n EXPERIMENTAL_theme: config.enableBackstageUi ? 'bui' : 'mui',\n }}\n />\n ));\n },\n });\n },\n});\n\nexport const scaffolderTasksSubPage = SubPageBlueprint.makeWithOverrides({\n name: 'tasks',\n inputs: {\n templateOutputsComponents: createExtensionInput(\n [\n scaffolderTemplateOutputsComponentRef,\n scaffolderTemplateOutputTemplateRefsRef,\n ],\n { optional: true },\n ),\n },\n factory(originalFactory, { inputs }) {\n return originalFactory({\n path: 'tasks',\n title: 'Tasks',\n loader: async () => {\n const templateOutputsComponents = inputs.templateOutputsComponents?.map(\n input => ({\n component: input.get(scaffolderTemplateOutputsComponentRef),\n templateRefs: input.get(scaffolderTemplateOutputTemplateRefsRef),\n }),\n );\n return import('./components/TasksSubPage').then(m => (\n <m.TasksSubPage\n templateOutputsComponents={templateOutputsComponents}\n />\n ));\n },\n });\n },\n});\n\nexport const scaffolderActionsSubPage = SubPageBlueprint.make({\n name: 'actions',\n params: {\n path: 'actions',\n title: 'Actions',\n loader: () =>\n Promise.all([\n import('../components/ActionsPage'),\n import('@backstage/core-components'),\n ]).then(([m, { Content }]) => (\n <Content>\n <m.ActionPageContent />\n </Content>\n )),\n },\n});\n\nexport const scaffolderEditorSubPage = SubPageBlueprint.make({\n name: 'editor',\n params: {\n path: 'edit',\n title: 'Template Editor',\n loader: () =>\n import('./components/EditorSubPage').then(m => <m.EditorSubPage />),\n },\n});\n\nexport const scaffolderTemplatingExtensionsSubPage = SubPageBlueprint.make({\n name: 'templating-extensions',\n params: {\n path: 'templating-extensions',\n title: 'Templating Extensions',\n loader: () =>\n Promise.all([\n import('../components/TemplatingExtensionsPage'),\n import('@backstage/core-components'),\n ]).then(([m, { Content }]) => (\n <Content>\n <m.TemplatingExtensionsPageContent linkLocal />\n </Content>\n )),\n },\n});\n\nexport const repoUrlPickerFormField = FormFieldBlueprint.make({\n name: 'repo-url-picker',\n params: {\n field: () => import('./fields/RepoUrlPicker').then(m => m.RepoUrlPicker),\n },\n});\n\nexport const entityNamePickerFormField = FormFieldBlueprint.make({\n name: 'entity-name-picker',\n params: {\n field: () =>\n import('./fields/EntityNamePicker').then(m => m.EntityNamePicker),\n },\n});\n\nexport const entityPickerFormField = FormFieldBlueprint.make({\n name: 'entity-picker',\n params: {\n field: () => import('./fields/EntityPicker').then(m => m.EntityPicker),\n },\n});\n\nexport const ownerPickerFormField = FormFieldBlueprint.make({\n name: 'owner-picker',\n params: {\n field: () => import('./fields/OwnerPicker').then(m => m.OwnerPicker),\n },\n});\n\nexport const entityTagsPickerFormField = FormFieldBlueprint.make({\n name: 'entity-tags-picker',\n params: {\n field: () =>\n import('./fields/EntityTagsPicker').then(m => m.EntityTagsPicker),\n },\n});\n\nexport const multiEntityPickerFormField = FormFieldBlueprint.make({\n name: 'multi-entity-picker',\n params: {\n field: () =>\n import('./fields/MultiEntityPicker').then(m => m.MultiEntityPicker),\n },\n});\n\nexport const myGroupsPickerFormField = FormFieldBlueprint.make({\n name: 'my-groups-picker',\n params: {\n field: () => import('./fields/MyGroupsPicker').then(m => m.MyGroupsPicker),\n },\n});\n\nexport const ownedEntityPickerFormField = FormFieldBlueprint.make({\n name: 'owned-entity-picker',\n params: {\n field: () =>\n import('./fields/OwnedEntityPicker').then(m => m.OwnedEntityPicker),\n },\n});\n\nexport const repoBranchPickerFormField = FormFieldBlueprint.make({\n name: 'repo-branch-picker',\n params: {\n field: () =>\n import('./fields/RepoBranchPicker').then(m => m.RepoBranchPicker),\n },\n});\n\nexport const repoOwnerPickerFormField = FormFieldBlueprint.make({\n name: 'repo-owner-picker',\n params: {\n field: () =>\n import('./fields/RepoOwnerPicker').then(m => m.RepoOwnerPicker),\n },\n});\n\nexport const scaffolderApi = ApiBlueprint.make({\n params: defineParams =>\n defineParams({\n api: scaffolderApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n scmIntegrationsApi: scmIntegrationsApiRef,\n fetchApi: fetchApiRef,\n identityApi: identityApiRef,\n },\n factory: ({ discoveryApi, scmIntegrationsApi, fetchApi, identityApi }) =>\n new ScaffolderClient({\n discoveryApi,\n scmIntegrationsApi,\n fetchApi,\n identityApi,\n }),\n }),\n});\n\nexport const scaffolderFeaturedTemplatesWidget =\n HomePageWidgetBlueprint.makeWithOverrides({\n name: 'featured-templates',\n configSchema: {\n title: z.string().default('Featured Templates'),\n tag: z.string().default('featured'),\n },\n factory(originalFactory, { config }) {\n return originalFactory({\n name: 'HomePageFeaturedTemplates',\n title: config.title,\n components: () =>\n import('./components/HomePageFeaturedTemplates').then(m => ({\n Content: m.HomePageFeaturedTemplates,\n })),\n componentProps: { tag: config.tag },\n layout: {\n width: { defaultColumns: 6, minColumns: 2 },\n height: { defaultRows: 6, minRows: 5 },\n },\n });\n },\n });\n"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import { jsx } from 'react/jsx-runtime';
2
2
  import { createFrontendPlugin } from '@backstage/frontend-plugin-api';
3
3
  import CreateComponentIcon from '@material-ui/icons/AddCircleOutline';
4
4
  import { viewTechDocRouteRef, registerComponentRouteRef, templatingExtensionsRouteRef, editRouteRef, scaffolderListTaskRouteRef, actionsRouteRef, scaffolderTaskRouteRef, selectedTemplateRouteRef, rootRouteRef } from '../routes.esm.js';
5
- import { scaffolderApi, scaffolderPage, scaffolderTemplatesSubPage, scaffolderTasksSubPage, scaffolderActionsSubPage, scaffolderEditorSubPage, scaffolderTemplatingExtensionsSubPage, repoUrlPickerFormField, entityNamePickerFormField, entityPickerFormField, ownerPickerFormField, entityTagsPickerFormField, multiEntityPickerFormField, myGroupsPickerFormField, ownedEntityPickerFormField, repoBranchPickerFormField, repoOwnerPickerFormField } from './extensions.esm.js';
5
+ import { scaffolderApi, scaffolderPage, scaffolderTemplatesSubPage, scaffolderTasksSubPage, scaffolderActionsSubPage, scaffolderEditorSubPage, scaffolderTemplatingExtensionsSubPage, scaffolderFeaturedTemplatesWidget, repoUrlPickerFormField, entityNamePickerFormField, entityPickerFormField, ownerPickerFormField, entityTagsPickerFormField, multiEntityPickerFormField, myGroupsPickerFormField, ownedEntityPickerFormField, repoBranchPickerFormField, repoOwnerPickerFormField } from './extensions.esm.js';
6
6
  import { isTemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';
7
7
  import { formFieldsApi } from './formFieldsApi.esm.js';
8
8
  import './api/ref.esm.js';
@@ -43,6 +43,7 @@ var plugin = createFrontendPlugin({
43
43
  scaffolderActionsSubPage,
44
44
  scaffolderEditorSubPage,
45
45
  scaffolderTemplatingExtensionsSubPage,
46
+ scaffolderFeaturedTemplatesWidget,
46
47
  scaffolderEntityIconLink,
47
48
  formDecoratorsApi,
48
49
  formFieldsApi,
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.esm.js","sources":["../../src/alpha/plugin.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createFrontendPlugin } from '@backstage/frontend-plugin-api';\nimport CreateComponentIcon from '@material-ui/icons/AddCircleOutline';\nimport {\n actionsRouteRef,\n editRouteRef,\n registerComponentRouteRef,\n rootRouteRef,\n scaffolderListTaskRouteRef,\n scaffolderTaskRouteRef,\n selectedTemplateRouteRef,\n templatingExtensionsRouteRef,\n viewTechDocRouteRef,\n} from '../routes';\nimport {\n entityNamePickerFormField,\n entityPickerFormField,\n entityTagsPickerFormField,\n multiEntityPickerFormField,\n myGroupsPickerFormField,\n ownedEntityPickerFormField,\n ownerPickerFormField,\n repoBranchPickerFormField,\n repoOwnerPickerFormField,\n repoUrlPickerFormField,\n scaffolderApi,\n scaffolderPage,\n scaffolderTemplatesSubPage,\n scaffolderTasksSubPage,\n scaffolderActionsSubPage,\n scaffolderEditorSubPage,\n scaffolderTemplatingExtensionsSubPage,\n} from './extensions';\nimport { isTemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';\nimport { formFieldsApi } from './formFieldsApi';\nimport { formDecoratorsApi } from './api';\nimport { EntityIconLinkBlueprint } from '@backstage/plugin-catalog-react/alpha';\nimport { useScaffolderTemplateIconLinkProps } from './hooks/useScaffolderTemplateIconLinkProps';\n\n/** @alpha */\nconst scaffolderEntityIconLink = EntityIconLinkBlueprint.make({\n name: 'launch-template',\n params: {\n filter: isTemplateEntityV1beta3,\n useProps: useScaffolderTemplateIconLinkProps,\n },\n});\n\n/** @alpha */\nexport default createFrontendPlugin({\n pluginId: 'scaffolder',\n title: 'Create',\n icon: <CreateComponentIcon fontSize=\"inherit\" />,\n info: { packageJson: () => import('../../package.json') },\n routes: {\n root: rootRouteRef,\n selectedTemplate: selectedTemplateRouteRef,\n ongoingTask: scaffolderTaskRouteRef,\n actions: actionsRouteRef,\n listTasks: scaffolderListTaskRouteRef,\n edit: editRouteRef,\n templatingExtensions: templatingExtensionsRouteRef,\n },\n externalRoutes: {\n registerComponent: registerComponentRouteRef,\n viewTechDoc: viewTechDocRouteRef,\n },\n extensions: [\n scaffolderApi,\n scaffolderPage,\n scaffolderTemplatesSubPage,\n scaffolderTasksSubPage,\n scaffolderActionsSubPage,\n scaffolderEditorSubPage,\n scaffolderTemplatingExtensionsSubPage,\n scaffolderEntityIconLink,\n formDecoratorsApi,\n formFieldsApi,\n repoUrlPickerFormField,\n entityNamePickerFormField,\n entityPickerFormField,\n ownerPickerFormField,\n entityTagsPickerFormField,\n multiEntityPickerFormField,\n myGroupsPickerFormField,\n ownedEntityPickerFormField,\n repoBranchPickerFormField,\n repoOwnerPickerFormField,\n ],\n});\n"],"names":[],"mappings":";;;;;;;;;;;;AAuDA,MAAM,wBAAA,GAA2B,wBAAwB,IAAA,CAAK;AAAA,EAC5D,IAAA,EAAM,iBAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,uBAAA;AAAA,IACR,QAAA,EAAU;AAAA;AAEd,CAAC,CAAA;AAGD,aAAe,oBAAA,CAAqB;AAAA,EAClC,QAAA,EAAU,YAAA;AAAA,EACV,KAAA,EAAO,QAAA;AAAA,EACP,IAAA,kBAAM,GAAA,CAAC,mBAAA,EAAA,EAAoB,QAAA,EAAS,SAAA,EAAU,CAAA;AAAA,EAC9C,MAAM,EAAE,WAAA,EAAa,MAAM,OAAO,2CAAoB,CAAA,EAAE;AAAA,EACxD,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,YAAA;AAAA,IACN,gBAAA,EAAkB,wBAAA;AAAA,IAClB,WAAA,EAAa,sBAAA;AAAA,IACb,OAAA,EAAS,eAAA;AAAA,IACT,SAAA,EAAW,0BAAA;AAAA,IACX,IAAA,EAAM,YAAA;AAAA,IACN,oBAAA,EAAsB;AAAA,GACxB;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,iBAAA,EAAmB,yBAAA;AAAA,IACnB,WAAA,EAAa;AAAA,GACf;AAAA,EACA,UAAA,EAAY;AAAA,IACV,aAAA;AAAA,IACA,cAAA;AAAA,IACA,0BAAA;AAAA,IACA,sBAAA;AAAA,IACA,wBAAA;AAAA,IACA,uBAAA;AAAA,IACA,qCAAA;AAAA,IACA,wBAAA;AAAA,IACA,iBAAA;AAAA,IACA,aAAA;AAAA,IACA,sBAAA;AAAA,IACA,yBAAA;AAAA,IACA,qBAAA;AAAA,IACA,oBAAA;AAAA,IACA,yBAAA;AAAA,IACA,0BAAA;AAAA,IACA,uBAAA;AAAA,IACA,0BAAA;AAAA,IACA,yBAAA;AAAA,IACA;AAAA;AAEJ,CAAC,CAAA;;"}
1
+ {"version":3,"file":"plugin.esm.js","sources":["../../src/alpha/plugin.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createFrontendPlugin } from '@backstage/frontend-plugin-api';\nimport CreateComponentIcon from '@material-ui/icons/AddCircleOutline';\nimport {\n actionsRouteRef,\n editRouteRef,\n registerComponentRouteRef,\n rootRouteRef,\n scaffolderListTaskRouteRef,\n scaffolderTaskRouteRef,\n selectedTemplateRouteRef,\n templatingExtensionsRouteRef,\n viewTechDocRouteRef,\n} from '../routes';\nimport {\n entityNamePickerFormField,\n entityPickerFormField,\n entityTagsPickerFormField,\n multiEntityPickerFormField,\n myGroupsPickerFormField,\n ownedEntityPickerFormField,\n ownerPickerFormField,\n repoBranchPickerFormField,\n repoOwnerPickerFormField,\n repoUrlPickerFormField,\n scaffolderApi,\n scaffolderPage,\n scaffolderTemplatesSubPage,\n scaffolderTasksSubPage,\n scaffolderActionsSubPage,\n scaffolderEditorSubPage,\n scaffolderTemplatingExtensionsSubPage,\n scaffolderFeaturedTemplatesWidget,\n} from './extensions';\nimport { isTemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common';\nimport { formFieldsApi } from './formFieldsApi';\nimport { formDecoratorsApi } from './api';\nimport { EntityIconLinkBlueprint } from '@backstage/plugin-catalog-react/alpha';\nimport { useScaffolderTemplateIconLinkProps } from './hooks/useScaffolderTemplateIconLinkProps';\n\n/** @alpha */\nconst scaffolderEntityIconLink = EntityIconLinkBlueprint.make({\n name: 'launch-template',\n params: {\n filter: isTemplateEntityV1beta3,\n useProps: useScaffolderTemplateIconLinkProps,\n },\n});\n\n/** @alpha */\nexport default createFrontendPlugin({\n pluginId: 'scaffolder',\n title: 'Create',\n icon: <CreateComponentIcon fontSize=\"inherit\" />,\n info: { packageJson: () => import('../../package.json') },\n routes: {\n root: rootRouteRef,\n selectedTemplate: selectedTemplateRouteRef,\n ongoingTask: scaffolderTaskRouteRef,\n actions: actionsRouteRef,\n listTasks: scaffolderListTaskRouteRef,\n edit: editRouteRef,\n templatingExtensions: templatingExtensionsRouteRef,\n },\n externalRoutes: {\n registerComponent: registerComponentRouteRef,\n viewTechDoc: viewTechDocRouteRef,\n },\n extensions: [\n scaffolderApi,\n scaffolderPage,\n scaffolderTemplatesSubPage,\n scaffolderTasksSubPage,\n scaffolderActionsSubPage,\n scaffolderEditorSubPage,\n scaffolderTemplatingExtensionsSubPage,\n scaffolderFeaturedTemplatesWidget,\n scaffolderEntityIconLink,\n formDecoratorsApi,\n formFieldsApi,\n repoUrlPickerFormField,\n entityNamePickerFormField,\n entityPickerFormField,\n ownerPickerFormField,\n entityTagsPickerFormField,\n multiEntityPickerFormField,\n myGroupsPickerFormField,\n ownedEntityPickerFormField,\n repoBranchPickerFormField,\n repoOwnerPickerFormField,\n ],\n});\n"],"names":[],"mappings":";;;;;;;;;;;;AAwDA,MAAM,wBAAA,GAA2B,wBAAwB,IAAA,CAAK;AAAA,EAC5D,IAAA,EAAM,iBAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACN,MAAA,EAAQ,uBAAA;AAAA,IACR,QAAA,EAAU;AAAA;AAEd,CAAC,CAAA;AAGD,aAAe,oBAAA,CAAqB;AAAA,EAClC,QAAA,EAAU,YAAA;AAAA,EACV,KAAA,EAAO,QAAA;AAAA,EACP,IAAA,kBAAM,GAAA,CAAC,mBAAA,EAAA,EAAoB,QAAA,EAAS,SAAA,EAAU,CAAA;AAAA,EAC9C,MAAM,EAAE,WAAA,EAAa,MAAM,OAAO,2CAAoB,CAAA,EAAE;AAAA,EACxD,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,YAAA;AAAA,IACN,gBAAA,EAAkB,wBAAA;AAAA,IAClB,WAAA,EAAa,sBAAA;AAAA,IACb,OAAA,EAAS,eAAA;AAAA,IACT,SAAA,EAAW,0BAAA;AAAA,IACX,IAAA,EAAM,YAAA;AAAA,IACN,oBAAA,EAAsB;AAAA,GACxB;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,iBAAA,EAAmB,yBAAA;AAAA,IACnB,WAAA,EAAa;AAAA,GACf;AAAA,EACA,UAAA,EAAY;AAAA,IACV,aAAA;AAAA,IACA,cAAA;AAAA,IACA,0BAAA;AAAA,IACA,sBAAA;AAAA,IACA,wBAAA;AAAA,IACA,uBAAA;AAAA,IACA,qCAAA;AAAA,IACA,iCAAA;AAAA,IACA,wBAAA;AAAA,IACA,iBAAA;AAAA,IACA,aAAA;AAAA,IACA,sBAAA;AAAA,IACA,yBAAA;AAAA,IACA,qBAAA;AAAA,IACA,oBAAA;AAAA,IACA,yBAAA;AAAA,IACA,0BAAA;AAAA,IACA,uBAAA;AAAA,IACA,0BAAA;AAAA,IACA,yBAAA;AAAA,IACA;AAAA;AAEJ,CAAC,CAAA;;"}
package/dist/alpha.d.ts CHANGED
@@ -7,6 +7,7 @@ import { FormProps as FormProps$2 } from '@rjsf/core';
7
7
  import * as _backstage_plugin_scaffolder_react_alpha from '@backstage/plugin-scaffolder-react/alpha';
8
8
  import { ScaffolderFormDecorator } from '@backstage/plugin-scaffolder-react/alpha';
9
9
  export { ScaffolderFormFieldsApi, formFieldsApiRef } from '@backstage/plugin-scaffolder-react/alpha';
10
+ import * as _backstage_plugin_home_react_alpha from '@backstage/plugin-home-react/alpha';
10
11
  import * as _backstage_core_components from '@backstage/core-components';
11
12
  import * as _backstage_catalog_model from '@backstage/catalog-model';
12
13
  import * as _backstage_filter_predicates from '@backstage/filter-predicates';
@@ -190,6 +191,21 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
190
191
  filter?: _backstage_filter_predicates.FilterPredicate | ((entity: _backstage_catalog_model.Entity) => boolean);
191
192
  };
192
193
  }>;
194
+ "home-page-widget:scaffolder/featured-templates": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
195
+ config: {
196
+ title: string;
197
+ tag: string;
198
+ };
199
+ configInput: {
200
+ title?: string | undefined;
201
+ tag?: string | undefined;
202
+ };
203
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_plugin_home_react_alpha.HomePageWidgetData, "home.widget.data", {}>;
204
+ inputs: {};
205
+ kind: "home-page-widget";
206
+ name: "featured-templates";
207
+ params: _backstage_plugin_home_react_alpha.HomePageWidgetBlueprintParams;
208
+ }>;
193
209
  "page:scaffolder": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
194
210
  config: {
195
211
  path: string | undefined;
@@ -676,6 +692,12 @@ declare const scaffolderTranslationRef: _backstage_frontend_plugin_api.Translati
676
692
  readonly "templateEditorToolbarFileMenu.options.createDirectory": "Create template directory";
677
693
  readonly "templateEditorToolbarFileMenu.options.closeEditor": "Close template editor";
678
694
  readonly "templateEditorToolbarTemplatesMenu.button": "Templates";
695
+ readonly "featuredTemplatesWidget.errorMessage": "Could not load templates.";
696
+ readonly "featuredTemplatesWidget.emptyMessage": "There are currently no templates to show.";
697
+ readonly "featuredTemplatesWidget.scrollPreviousButtonTitle": "Previous templates";
698
+ readonly "featuredTemplatesWidget.scrollNextButtonTitle": "Next templates";
699
+ readonly "featuredTemplatesWidget.errorRetryButtonTitle": "Retry";
700
+ readonly "featuredTemplatesWidget.emptyBrowseAllButtonTitle": "Browse all templates";
679
701
  }>;
680
702
 
681
703
  export { DefaultScaffolderFormDecoratorsApi, _default as default, formDecoratorsApi, formDecoratorsApiRef, scaffolderTranslationRef };
package/dist/index.d.ts CHANGED
@@ -763,6 +763,12 @@ declare const scaffolderTranslationRef: _backstage_frontend_plugin_api.Translati
763
763
  readonly "templateEditorToolbarFileMenu.options.createDirectory": "Create template directory";
764
764
  readonly "templateEditorToolbarFileMenu.options.closeEditor": "Close template editor";
765
765
  readonly "templateEditorToolbarTemplatesMenu.button": "Templates";
766
+ readonly "featuredTemplatesWidget.errorMessage": "Could not load templates.";
767
+ readonly "featuredTemplatesWidget.emptyMessage": "There are currently no templates to show.";
768
+ readonly "featuredTemplatesWidget.scrollPreviousButtonTitle": "Previous templates";
769
+ readonly "featuredTemplatesWidget.scrollNextButtonTitle": "Next templates";
770
+ readonly "featuredTemplatesWidget.errorRetryButtonTitle": "Retry";
771
+ readonly "featuredTemplatesWidget.emptyBrowseAllButtonTitle": "Browse all templates";
766
772
  }>;
767
773
 
768
774
  export { EntityNamePickerFieldExtension, EntityPickerFieldExtension, EntityPickerFieldSchema, EntityTagsPickerFieldExtension, EntityTagsPickerFieldSchema, MultiEntityPickerFieldExtension, MyGroupsPickerFieldExtension, MyGroupsPickerFieldSchema, MyGroupsPickerSchema, OwnedEntityPickerFieldExtension, OwnedEntityPickerFieldSchema, OwnerPickerFieldExtension, OwnerPickerFieldSchema, RepoBranchPickerFieldExtension, RepoOwnerPickerFieldExtension, RepoUrlPickerFieldExtension, RepoUrlPickerFieldSchema, ScaffolderClient, ScaffolderFieldExtensions, ScaffolderLayouts, ScaffolderPage, OngoingTask as TaskPage, TemplateTypePicker, createScaffolderFieldExtension, createScaffolderLayout, makeFieldSchemaFromZod, repoPickerValidation, rootRouteRef, scaffolderApiRef, scaffolderPlugin, scaffolderTranslationRef, useTemplateSecrets };
@@ -2,7 +2,7 @@ function styleInject(css, ref) {
2
2
  if ( ref === void 0 ) ref = {};
3
3
  var insertAt = ref.insertAt;
4
4
 
5
- if (typeof document === 'undefined') { return; }
5
+ if (!css || typeof document === 'undefined') { return; }
6
6
 
7
7
  var head = document.head || document.getElementsByTagName('head')[0];
8
8
  var style = document.createElement('style');
@@ -1 +1 @@
1
- {"version":3,"file":"style-inject.es.esm.js","sources":["../../../../../../node_modules/style-inject/dist/style-inject.es.js"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n"],"names":[],"mappings":"AAAA,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE;AAC/B,EAAE,KAAK,GAAG,KAAK,MAAM,GAAG,GAAG,GAAG,EAAE;AAChC,EAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ;;AAE7B,EAAE,IAAY,OAAO,QAAQ,KAAK,WAAW,EAAE,EAAE,OAAO,CAAC;;AAEzD,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACtE,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,EAAE,KAAK,CAAC,IAAI,GAAG,UAAU;;AAEzB,EAAE,IAAI,QAAQ,KAAK,KAAK,EAAE;AAC1B,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACzB,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;AAC/C,IAAI,CAAC,MAAM;AACX,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC7B,IAAI;AACJ,EAAE,CAAC,MAAM;AACT,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC3B,EAAE;;AAEF,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE;AACxB,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG;AAClC,EAAE,CAAC,MAAM;AACT,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AACnD,EAAE;AACF;;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"style-inject.es.esm.js","sources":["../../../../../../node_modules/style-inject/dist/style-inject.es.js"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n"],"names":[],"mappings":"AAAA,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE;AAC/B,EAAE,KAAK,GAAG,KAAK,MAAM,GAAG,GAAG,GAAG,EAAE;AAChC,EAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ;;AAE7B,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,EAAE,OAAO,CAAC;;AAEzD,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACtE,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,EAAE,KAAK,CAAC,IAAI,GAAG,UAAU;;AAEzB,EAAE,IAAI,QAAQ,KAAK,KAAK,EAAE;AAC1B,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACzB,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;AAC/C,IAAI,CAAC,MAAM;AACX,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC7B,IAAI;AACJ,EAAE,CAAC,MAAM;AACT,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC3B,EAAE;;AAEF,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE;AACxB,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG;AAClC,EAAE,CAAC,MAAM;AACT,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AACnD,EAAE;AACF;;","x_google_ignoreList":[0]}
@@ -1,5 +1,5 @@
1
1
  var name = "@backstage/plugin-scaffolder";
2
- var version = "1.39.1-next.1";
2
+ var version = "1.40.0";
3
3
  var description = "The Backstage plugin that helps you create new things";
4
4
  var backstage = {
5
5
  role: "frontend-plugin",
@@ -68,6 +68,7 @@ var dependencies = {
68
68
  "@backstage/integration-react": "workspace:^",
69
69
  "@backstage/plugin-catalog-common": "workspace:^",
70
70
  "@backstage/plugin-catalog-react": "workspace:^",
71
+ "@backstage/plugin-home-react": "workspace:^",
71
72
  "@backstage/plugin-permission-react": "workspace:^",
72
73
  "@backstage/plugin-scaffolder-common": "workspace:^",
73
74
  "@backstage/plugin-scaffolder-react": "workspace:^",
@@ -98,6 +99,7 @@ var dependencies = {
98
99
  luxon: "^3.0.0",
99
100
  qs: "^6.15.2",
100
101
  "react-aria-components": "^1.14.0",
102
+ "react-intersection-observer": "^9.5.3",
101
103
  "react-resizable": "^3.0.5",
102
104
  "react-resizable-panels": "^3.0.4",
103
105
  "react-use": "^17.2.4",
@@ -1 +1 @@
1
- {"version":3,"file":"package.json.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"package.json.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -357,6 +357,14 @@ const scaffolderTranslationRef = createTranslationRef({
357
357
  },
358
358
  templateEditorToolbarTemplatesMenu: {
359
359
  button: "Templates"
360
+ },
361
+ featuredTemplatesWidget: {
362
+ scrollPreviousButtonTitle: "Previous templates",
363
+ scrollNextButtonTitle: "Next templates",
364
+ errorMessage: "Could not load templates.",
365
+ errorRetryButtonTitle: "Retry",
366
+ emptyMessage: "There are currently no templates to show.",
367
+ emptyBrowseAllButtonTitle: "Browse all templates"
360
368
  }
361
369
  }
362
370
  });
@@ -1 +1 @@
1
- {"version":3,"file":"translation.esm.js","sources":["../src/translation.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { createTranslationRef } from '@backstage/core-plugin-api/alpha';\n\n/** @public */\nexport const scaffolderTranslationRef = createTranslationRef({\n id: 'scaffolder',\n messages: {\n aboutCard: {\n launchTemplate: 'Launch Template',\n },\n actionsPage: {\n title: 'Installed actions',\n pageTitle: 'Create a New Component',\n subtitle: 'This is the collection of all installed actions',\n content: {\n emptyState: {\n title: 'No information to display',\n description:\n 'There are no actions installed or there was an issue communicating with backend.',\n },\n searchFieldPlaceholder: 'Search for an action',\n },\n action: {\n input: 'Input',\n output: 'Output',\n examples: 'Examples',\n },\n },\n fields: {\n entityNamePicker: {\n title: 'Name',\n description: 'Unique name of the component',\n },\n entityPicker: {\n title: 'Entity',\n description: 'An entity from the catalog',\n },\n entityTagsPicker: {\n title: 'Tags',\n description:\n \"Add any relevant tags, hit 'Enter' to add new tags. Valid format: [a-z0-9+#] separated by [-], at most 63 characters\",\n },\n multiEntityPicker: {\n title: 'Entity',\n description: 'An entity from the catalog',\n },\n myGroupsPicker: {\n title: 'Entity',\n description: 'An entity from the catalog',\n },\n ownedEntityPicker: {\n title: 'Entity',\n description: 'An entity from the catalog',\n },\n ownerPicker: {\n title: 'Owner',\n description: 'The owner of the component',\n },\n azureRepoPicker: {\n organization: {\n title: 'Organization',\n description: 'The Organization that this repo will belong to',\n },\n project: {\n title: 'Project',\n description: 'The Project that this repo will belong to',\n },\n },\n bitbucketRepoPicker: {\n workspaces: {\n title: 'Allowed Workspaces',\n inputTitle: 'Workspaces',\n description: 'The Workspace that this repo will belong to',\n },\n project: {\n title: 'Allowed Projects',\n inputTitle: 'Projects',\n description: 'The Project that this repo will belong to',\n },\n },\n gerritRepoPicker: {\n owner: {\n title: 'Owner',\n description: 'The owner of the project (optional)',\n },\n parent: {\n title: 'Parent',\n description: 'The project parent that the repo will belong to',\n },\n },\n giteaRepoPicker: {\n owner: {\n title: 'Owner Available',\n inputTitle: 'Owner',\n description:\n 'Gitea namespace where this repository will belong to. It can be the name of organization, group, subgroup, user, or the project.',\n },\n },\n githubRepoPicker: {\n owner: {\n title: 'Owner Available',\n inputTitle: 'Owner',\n description:\n 'The organization, user or project that this repo will belong to',\n },\n },\n gitlabRepoPicker: {\n owner: {\n title: 'Owner Available',\n inputTitle: 'Owner',\n description:\n 'GitLab namespace where this repository will belong to. It can be the name of organization, group, subgroup, user, or the project.',\n },\n },\n repoUrlPicker: {\n host: {\n title: 'Host',\n description: 'The host where the repository will be created',\n },\n repository: {\n title: 'Repositories Available',\n inputTitle: 'Repository',\n description: 'The name of the repository',\n },\n },\n repoOwnerPicker: {\n title: 'Owner',\n description: 'The owner of the repository',\n },\n },\n listTaskPage: {\n title: 'List template tasks',\n pageTitle: 'Templates Tasks',\n subtitle: 'All tasks that have been started',\n content: {\n emptyState: {\n title: 'No information to display',\n description:\n 'There are no tasks or there was an issue communicating with backend.',\n },\n tableTitle: 'Tasks',\n tableCell: {\n taskID: 'Task ID',\n template: 'Template',\n created: 'Created',\n owner: 'Owner',\n status: 'Status',\n },\n },\n },\n ownerListPicker: {\n title: 'Task Owner',\n options: {\n owned: 'Owned',\n all: 'All',\n },\n },\n ongoingTask: {\n title: 'Run of',\n pageTitle: {\n hasTemplateName: 'Run of {{templateName}}',\n noTemplateName: 'Scaffolder Run',\n },\n subtitle: 'Task {{taskId}}',\n cancelButtonTitle: 'Cancel',\n retryButtonTitle: 'Retry',\n startOverButtonTitle: 'Start Over',\n hideLogsButtonTitle: 'Hide Logs',\n showLogsButtonTitle: 'Show Logs',\n contextMenu: {\n moreOptions: 'More options',\n hideLogs: 'Hide Logs',\n showLogs: 'Show Logs',\n hideButtonBar: 'Hide Button Bar',\n retry: 'Retry',\n showButtonBar: 'Show Button Bar',\n startOver: 'Start Over',\n cancel: 'Cancel',\n },\n },\n templateEditorForm: {\n stepper: {\n emptyText: 'There are no spec parameters in the template to preview.',\n },\n },\n renderSchema: {\n tableCell: {\n name: 'Name',\n title: 'Title',\n description: 'Description',\n type: 'Type',\n value: 'Value',\n },\n undefined: 'No schema defined',\n },\n templatingExtensions: {\n title: 'Templating Extensions',\n pageTitle: 'Templating Extensions',\n subtitle: 'This is the collection of available templating extensions',\n content: {\n emptyState: {\n title: 'No information to display',\n description:\n 'There are no templating extensions available or there was an issue communicating with the backend.',\n },\n searchFieldPlaceholder: 'Search for an extension',\n filters: {\n title: 'Filters',\n notAvailable: 'There are no template filters defined.',\n metadataAbsent: 'Filter metadata unavailable',\n schema: {\n input: 'Input',\n arguments: 'Arguments',\n output: 'Output',\n },\n examples: 'Examples',\n },\n functions: {\n title: 'Functions',\n notAvailable: 'There are no global template functions defined.',\n metadataAbsent: 'Function metadata unavailable',\n schema: {\n arguments: 'Arguments',\n output: 'Output',\n },\n examples: 'Examples',\n },\n values: {\n title: 'Values',\n notAvailable: 'There are no global template values defined.',\n },\n },\n },\n templateTypePicker: {\n title: 'Categories',\n },\n templateIntroPage: {\n title: 'Manage Templates',\n subtitle:\n 'Edit, preview, and try out templates, forms, and custom fields',\n },\n templateFormPage: {\n title: 'Template Editor',\n subtitle: 'Edit, preview, and try out templates forms',\n },\n templateCustomFieldPage: {\n title: 'Custom Field Explorer',\n subtitle: 'Edit, preview, and try out custom fields',\n },\n templateEditorPage: {\n title: 'Template Editor',\n subtitle: 'Edit, preview, and try out templates and template forms',\n dryRunResults: {\n title: 'Dry-run results',\n },\n dryRunResultsList: {\n title: 'Result {{resultId}}',\n downloadButtonTitle: 'Download as .zip',\n deleteButtonTitle: 'Delete result',\n },\n dryRunResultsView: {\n tab: {\n files: 'Files',\n log: 'Log',\n output: 'Output',\n },\n },\n taskStatusStepper: {\n skippedStepTitle: 'Skipped',\n },\n customFieldExplorer: {\n selectFieldLabel: 'Choose Custom Field Extension',\n fieldForm: {\n title: 'Field Options',\n applyButtonTitle: 'Apply',\n },\n fieldPreview: {\n title: 'Field Preview',\n },\n preview: {\n title: 'Template Spec',\n },\n },\n templateEditorBrowser: {\n closeConfirmMessage: 'Are you sure? Unsaved changes will be lost',\n saveIconTooltip: 'Save all files',\n reloadIconTooltip: 'Reload directory',\n closeIconTooltip: 'Close directory',\n },\n templateEditorIntro: {\n title: 'Get started by choosing one of the options below',\n loadLocal: {\n title: 'Load Template Directory',\n description:\n 'Load a local template directory, allowing you to both edit and try executing your own template.',\n unsupportedTooltip:\n 'Only supported in some Chromium-based browsers with the page loaded over HTTPS',\n },\n createLocal: {\n title: 'Create New Template',\n description:\n 'Create a local template directory, allowing you to both edit and try executing your own template.',\n unsupportedTooltip:\n 'Only supported in some Chromium-based browsers with the page loaded over HTTPS',\n },\n formEditor: {\n title: 'Template Form Playground',\n description:\n 'Preview and edit a template form, either using a sample template or by loading a template from the catalog.',\n },\n fieldExplorer: {\n title: 'Custom Field Explorer',\n description:\n 'View and play around with available installed custom field extensions.',\n },\n },\n templateEditorTextArea: {\n saveIconTooltip: 'Save file',\n refreshIconTooltip: 'Reload file',\n emptyStateParagraph: 'Please select an action on the file menu.',\n },\n templateFormPreviewer: {\n title: 'Load Existing Template',\n },\n },\n templateListPage: {\n title: 'Create a new component',\n subtitle:\n 'Create new software components using standard templates in your organization',\n pageTitle: 'Create a new component',\n templateGroups: {\n defaultTitle: 'Templates',\n otherTitle: 'Other Templates',\n },\n contentHeader: {\n registerExistingButtonTitle: 'Register Existing Component',\n supportButtonTitle:\n 'Create new software components using standard templates. Different templates create different kinds of components (services, websites, documentation, ...).',\n },\n additionalLinksForEntity: {\n viewTechDocsTitle: 'View TechDocs',\n },\n },\n templateWizardPage: {\n title: 'Create a new component',\n subtitle:\n 'Create new software components using standard templates in your organization',\n pageTitle: 'Create a new component',\n templateWithTitle: 'Create new {{templateTitle}}',\n pageContextMenu: {\n editConfigurationTitle: 'Edit Configuration',\n },\n },\n templateEditorToolbar: {\n customFieldExplorerTooltip: 'Custom Fields Explorer',\n installedActionsDocumentationTooltip: 'Installed Actions Documentation',\n templatingExtensionsDocumentationTooltip:\n 'Templating Extensions Documentation',\n addToCatalogButton: 'Publish',\n addToCatalogDialogTitle: 'Publish changes',\n addToCatalogDialogContent: {\n stepsIntroduction:\n 'Follow the instructions below to create or update a template:',\n stepsListItems:\n 'Save the template files in a local directory\\nCreate a pull request to a new or existing git repository\\nIf the template already exists, the changes will be reflected in the software catalog once the pull request gets merged\\nBut if you are creating a new template, follow the documentation linked below to register the new template repository in software catalog',\n },\n addToCatalogDialogActions: {\n documentationButton: 'Go to the documentation',\n documentationUrl:\n 'https://backstage.io/docs/features/software-templates/adding-templates/',\n },\n },\n templateEditorToolbarFileMenu: {\n button: 'File',\n options: {\n openDirectory: 'Open template directory',\n createDirectory: 'Create template directory',\n closeEditor: 'Close template editor',\n },\n },\n templateEditorToolbarTemplatesMenu: {\n button: 'Templates',\n },\n },\n});\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"translation.esm.js","sources":["../src/translation.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { createTranslationRef } from '@backstage/core-plugin-api/alpha';\n\n/** @public */\nexport const scaffolderTranslationRef = createTranslationRef({\n id: 'scaffolder',\n messages: {\n aboutCard: {\n launchTemplate: 'Launch Template',\n },\n actionsPage: {\n title: 'Installed actions',\n pageTitle: 'Create a New Component',\n subtitle: 'This is the collection of all installed actions',\n content: {\n emptyState: {\n title: 'No information to display',\n description:\n 'There are no actions installed or there was an issue communicating with backend.',\n },\n searchFieldPlaceholder: 'Search for an action',\n },\n action: {\n input: 'Input',\n output: 'Output',\n examples: 'Examples',\n },\n },\n fields: {\n entityNamePicker: {\n title: 'Name',\n description: 'Unique name of the component',\n },\n entityPicker: {\n title: 'Entity',\n description: 'An entity from the catalog',\n },\n entityTagsPicker: {\n title: 'Tags',\n description:\n \"Add any relevant tags, hit 'Enter' to add new tags. Valid format: [a-z0-9+#] separated by [-], at most 63 characters\",\n },\n multiEntityPicker: {\n title: 'Entity',\n description: 'An entity from the catalog',\n },\n myGroupsPicker: {\n title: 'Entity',\n description: 'An entity from the catalog',\n },\n ownedEntityPicker: {\n title: 'Entity',\n description: 'An entity from the catalog',\n },\n ownerPicker: {\n title: 'Owner',\n description: 'The owner of the component',\n },\n azureRepoPicker: {\n organization: {\n title: 'Organization',\n description: 'The Organization that this repo will belong to',\n },\n project: {\n title: 'Project',\n description: 'The Project that this repo will belong to',\n },\n },\n bitbucketRepoPicker: {\n workspaces: {\n title: 'Allowed Workspaces',\n inputTitle: 'Workspaces',\n description: 'The Workspace that this repo will belong to',\n },\n project: {\n title: 'Allowed Projects',\n inputTitle: 'Projects',\n description: 'The Project that this repo will belong to',\n },\n },\n gerritRepoPicker: {\n owner: {\n title: 'Owner',\n description: 'The owner of the project (optional)',\n },\n parent: {\n title: 'Parent',\n description: 'The project parent that the repo will belong to',\n },\n },\n giteaRepoPicker: {\n owner: {\n title: 'Owner Available',\n inputTitle: 'Owner',\n description:\n 'Gitea namespace where this repository will belong to. It can be the name of organization, group, subgroup, user, or the project.',\n },\n },\n githubRepoPicker: {\n owner: {\n title: 'Owner Available',\n inputTitle: 'Owner',\n description:\n 'The organization, user or project that this repo will belong to',\n },\n },\n gitlabRepoPicker: {\n owner: {\n title: 'Owner Available',\n inputTitle: 'Owner',\n description:\n 'GitLab namespace where this repository will belong to. It can be the name of organization, group, subgroup, user, or the project.',\n },\n },\n repoUrlPicker: {\n host: {\n title: 'Host',\n description: 'The host where the repository will be created',\n },\n repository: {\n title: 'Repositories Available',\n inputTitle: 'Repository',\n description: 'The name of the repository',\n },\n },\n repoOwnerPicker: {\n title: 'Owner',\n description: 'The owner of the repository',\n },\n },\n listTaskPage: {\n title: 'List template tasks',\n pageTitle: 'Templates Tasks',\n subtitle: 'All tasks that have been started',\n content: {\n emptyState: {\n title: 'No information to display',\n description:\n 'There are no tasks or there was an issue communicating with backend.',\n },\n tableTitle: 'Tasks',\n tableCell: {\n taskID: 'Task ID',\n template: 'Template',\n created: 'Created',\n owner: 'Owner',\n status: 'Status',\n },\n },\n },\n ownerListPicker: {\n title: 'Task Owner',\n options: {\n owned: 'Owned',\n all: 'All',\n },\n },\n ongoingTask: {\n title: 'Run of',\n pageTitle: {\n hasTemplateName: 'Run of {{templateName}}',\n noTemplateName: 'Scaffolder Run',\n },\n subtitle: 'Task {{taskId}}',\n cancelButtonTitle: 'Cancel',\n retryButtonTitle: 'Retry',\n startOverButtonTitle: 'Start Over',\n hideLogsButtonTitle: 'Hide Logs',\n showLogsButtonTitle: 'Show Logs',\n contextMenu: {\n moreOptions: 'More options',\n hideLogs: 'Hide Logs',\n showLogs: 'Show Logs',\n hideButtonBar: 'Hide Button Bar',\n retry: 'Retry',\n showButtonBar: 'Show Button Bar',\n startOver: 'Start Over',\n cancel: 'Cancel',\n },\n },\n templateEditorForm: {\n stepper: {\n emptyText: 'There are no spec parameters in the template to preview.',\n },\n },\n renderSchema: {\n tableCell: {\n name: 'Name',\n title: 'Title',\n description: 'Description',\n type: 'Type',\n value: 'Value',\n },\n undefined: 'No schema defined',\n },\n templatingExtensions: {\n title: 'Templating Extensions',\n pageTitle: 'Templating Extensions',\n subtitle: 'This is the collection of available templating extensions',\n content: {\n emptyState: {\n title: 'No information to display',\n description:\n 'There are no templating extensions available or there was an issue communicating with the backend.',\n },\n searchFieldPlaceholder: 'Search for an extension',\n filters: {\n title: 'Filters',\n notAvailable: 'There are no template filters defined.',\n metadataAbsent: 'Filter metadata unavailable',\n schema: {\n input: 'Input',\n arguments: 'Arguments',\n output: 'Output',\n },\n examples: 'Examples',\n },\n functions: {\n title: 'Functions',\n notAvailable: 'There are no global template functions defined.',\n metadataAbsent: 'Function metadata unavailable',\n schema: {\n arguments: 'Arguments',\n output: 'Output',\n },\n examples: 'Examples',\n },\n values: {\n title: 'Values',\n notAvailable: 'There are no global template values defined.',\n },\n },\n },\n templateTypePicker: {\n title: 'Categories',\n },\n templateIntroPage: {\n title: 'Manage Templates',\n subtitle:\n 'Edit, preview, and try out templates, forms, and custom fields',\n },\n templateFormPage: {\n title: 'Template Editor',\n subtitle: 'Edit, preview, and try out templates forms',\n },\n templateCustomFieldPage: {\n title: 'Custom Field Explorer',\n subtitle: 'Edit, preview, and try out custom fields',\n },\n templateEditorPage: {\n title: 'Template Editor',\n subtitle: 'Edit, preview, and try out templates and template forms',\n dryRunResults: {\n title: 'Dry-run results',\n },\n dryRunResultsList: {\n title: 'Result {{resultId}}',\n downloadButtonTitle: 'Download as .zip',\n deleteButtonTitle: 'Delete result',\n },\n dryRunResultsView: {\n tab: {\n files: 'Files',\n log: 'Log',\n output: 'Output',\n },\n },\n taskStatusStepper: {\n skippedStepTitle: 'Skipped',\n },\n customFieldExplorer: {\n selectFieldLabel: 'Choose Custom Field Extension',\n fieldForm: {\n title: 'Field Options',\n applyButtonTitle: 'Apply',\n },\n fieldPreview: {\n title: 'Field Preview',\n },\n preview: {\n title: 'Template Spec',\n },\n },\n templateEditorBrowser: {\n closeConfirmMessage: 'Are you sure? Unsaved changes will be lost',\n saveIconTooltip: 'Save all files',\n reloadIconTooltip: 'Reload directory',\n closeIconTooltip: 'Close directory',\n },\n templateEditorIntro: {\n title: 'Get started by choosing one of the options below',\n loadLocal: {\n title: 'Load Template Directory',\n description:\n 'Load a local template directory, allowing you to both edit and try executing your own template.',\n unsupportedTooltip:\n 'Only supported in some Chromium-based browsers with the page loaded over HTTPS',\n },\n createLocal: {\n title: 'Create New Template',\n description:\n 'Create a local template directory, allowing you to both edit and try executing your own template.',\n unsupportedTooltip:\n 'Only supported in some Chromium-based browsers with the page loaded over HTTPS',\n },\n formEditor: {\n title: 'Template Form Playground',\n description:\n 'Preview and edit a template form, either using a sample template or by loading a template from the catalog.',\n },\n fieldExplorer: {\n title: 'Custom Field Explorer',\n description:\n 'View and play around with available installed custom field extensions.',\n },\n },\n templateEditorTextArea: {\n saveIconTooltip: 'Save file',\n refreshIconTooltip: 'Reload file',\n emptyStateParagraph: 'Please select an action on the file menu.',\n },\n templateFormPreviewer: {\n title: 'Load Existing Template',\n },\n },\n templateListPage: {\n title: 'Create a new component',\n subtitle:\n 'Create new software components using standard templates in your organization',\n pageTitle: 'Create a new component',\n templateGroups: {\n defaultTitle: 'Templates',\n otherTitle: 'Other Templates',\n },\n contentHeader: {\n registerExistingButtonTitle: 'Register Existing Component',\n supportButtonTitle:\n 'Create new software components using standard templates. Different templates create different kinds of components (services, websites, documentation, ...).',\n },\n additionalLinksForEntity: {\n viewTechDocsTitle: 'View TechDocs',\n },\n },\n templateWizardPage: {\n title: 'Create a new component',\n subtitle:\n 'Create new software components using standard templates in your organization',\n pageTitle: 'Create a new component',\n templateWithTitle: 'Create new {{templateTitle}}',\n pageContextMenu: {\n editConfigurationTitle: 'Edit Configuration',\n },\n },\n templateEditorToolbar: {\n customFieldExplorerTooltip: 'Custom Fields Explorer',\n installedActionsDocumentationTooltip: 'Installed Actions Documentation',\n templatingExtensionsDocumentationTooltip:\n 'Templating Extensions Documentation',\n addToCatalogButton: 'Publish',\n addToCatalogDialogTitle: 'Publish changes',\n addToCatalogDialogContent: {\n stepsIntroduction:\n 'Follow the instructions below to create or update a template:',\n stepsListItems:\n 'Save the template files in a local directory\\nCreate a pull request to a new or existing git repository\\nIf the template already exists, the changes will be reflected in the software catalog once the pull request gets merged\\nBut if you are creating a new template, follow the documentation linked below to register the new template repository in software catalog',\n },\n addToCatalogDialogActions: {\n documentationButton: 'Go to the documentation',\n documentationUrl:\n 'https://backstage.io/docs/features/software-templates/adding-templates/',\n },\n },\n templateEditorToolbarFileMenu: {\n button: 'File',\n options: {\n openDirectory: 'Open template directory',\n createDirectory: 'Create template directory',\n closeEditor: 'Close template editor',\n },\n },\n templateEditorToolbarTemplatesMenu: {\n button: 'Templates',\n },\n featuredTemplatesWidget: {\n scrollPreviousButtonTitle: 'Previous templates',\n scrollNextButtonTitle: 'Next templates',\n errorMessage: 'Could not load templates.',\n errorRetryButtonTitle: 'Retry',\n emptyMessage: 'There are currently no templates to show.',\n emptyBrowseAllButtonTitle: 'Browse all templates',\n },\n },\n});\n"],"names":[],"mappings":";;AAkBO,MAAM,2BAA2B,oBAAA,CAAqB;AAAA,EAC3D,EAAA,EAAI,YAAA;AAAA,EACJ,QAAA,EAAU;AAAA,IACR,SAAA,EAAW;AAAA,MACT,cAAA,EAAgB;AAAA,KAClB;AAAA,IACA,WAAA,EAAa;AAAA,MACX,KAAA,EAAO,mBAAA;AAAA,MACP,SAAA,EAAW,wBAAA;AAAA,MACX,QAAA,EAAU,iDAAA;AAAA,MACV,OAAA,EAAS;AAAA,QACP,UAAA,EAAY;AAAA,UACV,KAAA,EAAO,2BAAA;AAAA,UACP,WAAA,EACE;AAAA,SACJ;AAAA,QACA,sBAAA,EAAwB;AAAA,OAC1B;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,KAAA,EAAO,OAAA;AAAA,QACP,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU;AAAA;AACZ,KACF;AAAA,IACA,MAAA,EAAQ;AAAA,MACN,gBAAA,EAAkB;AAAA,QAChB,KAAA,EAAO,MAAA;AAAA,QACP,WAAA,EAAa;AAAA,OACf;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,KAAA,EAAO,QAAA;AAAA,QACP,WAAA,EAAa;AAAA,OACf;AAAA,MACA,gBAAA,EAAkB;AAAA,QAChB,KAAA,EAAO,MAAA;AAAA,QACP,WAAA,EACE;AAAA,OACJ;AAAA,MACA,iBAAA,EAAmB;AAAA,QACjB,KAAA,EAAO,QAAA;AAAA,QACP,WAAA,EAAa;AAAA,OACf;AAAA,MACA,cAAA,EAAgB;AAAA,QACd,KAAA,EAAO,QAAA;AAAA,QACP,WAAA,EAAa;AAAA,OACf;AAAA,MACA,iBAAA,EAAmB;AAAA,QACjB,KAAA,EAAO,QAAA;AAAA,QACP,WAAA,EAAa;AAAA,OACf;AAAA,MACA,WAAA,EAAa;AAAA,QACX,KAAA,EAAO,OAAA;AAAA,QACP,WAAA,EAAa;AAAA,OACf;AAAA,MACA,eAAA,EAAiB;AAAA,QACf,YAAA,EAAc;AAAA,UACZ,KAAA,EAAO,cAAA;AAAA,UACP,WAAA,EAAa;AAAA,SACf;AAAA,QACA,OAAA,EAAS;AAAA,UACP,KAAA,EAAO,SAAA;AAAA,UACP,WAAA,EAAa;AAAA;AACf,OACF;AAAA,MACA,mBAAA,EAAqB;AAAA,QACnB,UAAA,EAAY;AAAA,UACV,KAAA,EAAO,oBAAA;AAAA,UACP,UAAA,EAAY,YAAA;AAAA,UACZ,WAAA,EAAa;AAAA,SACf;AAAA,QACA,OAAA,EAAS;AAAA,UACP,KAAA,EAAO,kBAAA;AAAA,UACP,UAAA,EAAY,UAAA;AAAA,UACZ,WAAA,EAAa;AAAA;AACf,OACF;AAAA,MACA,gBAAA,EAAkB;AAAA,QAChB,KAAA,EAAO;AAAA,UACL,KAAA,EAAO,OAAA;AAAA,UACP,WAAA,EAAa;AAAA,SACf;AAAA,QACA,MAAA,EAAQ;AAAA,UACN,KAAA,EAAO,QAAA;AAAA,UACP,WAAA,EAAa;AAAA;AACf,OACF;AAAA,MACA,eAAA,EAAiB;AAAA,QACf,KAAA,EAAO;AAAA,UACL,KAAA,EAAO,iBAAA;AAAA,UACP,UAAA,EAAY,OAAA;AAAA,UACZ,WAAA,EACE;AAAA;AACJ,OACF;AAAA,MACA,gBAAA,EAAkB;AAAA,QAChB,KAAA,EAAO;AAAA,UACL,KAAA,EAAO,iBAAA;AAAA,UACP,UAAA,EAAY,OAAA;AAAA,UACZ,WAAA,EACE;AAAA;AACJ,OACF;AAAA,MACA,gBAAA,EAAkB;AAAA,QAChB,KAAA,EAAO;AAAA,UACL,KAAA,EAAO,iBAAA;AAAA,UACP,UAAA,EAAY,OAAA;AAAA,UACZ,WAAA,EACE;AAAA;AACJ,OACF;AAAA,MACA,aAAA,EAAe;AAAA,QACb,IAAA,EAAM;AAAA,UACJ,KAAA,EAAO,MAAA;AAAA,UACP,WAAA,EAAa;AAAA,SACf;AAAA,QACA,UAAA,EAAY;AAAA,UACV,KAAA,EAAO,wBAAA;AAAA,UACP,UAAA,EAAY,YAAA;AAAA,UACZ,WAAA,EAAa;AAAA;AACf,OACF;AAAA,MACA,eAAA,EAAiB;AAAA,QACf,KAAA,EAAO,OAAA;AAAA,QACP,WAAA,EAAa;AAAA;AACf,KACF;AAAA,IACA,YAAA,EAAc;AAAA,MACZ,KAAA,EAAO,qBAAA;AAAA,MACP,SAAA,EAAW,iBAAA;AAAA,MACX,QAAA,EAAU,kCAAA;AAAA,MACV,OAAA,EAAS;AAAA,QACP,UAAA,EAAY;AAAA,UACV,KAAA,EAAO,2BAAA;AAAA,UACP,WAAA,EACE;AAAA,SACJ;AAAA,QACA,UAAA,EAAY,OAAA;AAAA,QACZ,SAAA,EAAW;AAAA,UACT,MAAA,EAAQ,SAAA;AAAA,UACR,QAAA,EAAU,UAAA;AAAA,UACV,OAAA,EAAS,SAAA;AAAA,UACT,KAAA,EAAO,OAAA;AAAA,UACP,MAAA,EAAQ;AAAA;AACV;AACF,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,KAAA,EAAO,YAAA;AAAA,MACP,OAAA,EAAS;AAAA,QACP,KAAA,EAAO,OAAA;AAAA,QACP,GAAA,EAAK;AAAA;AACP,KACF;AAAA,IACA,WAAA,EAAa;AAAA,MACX,KAAA,EAAO,QAAA;AAAA,MACP,SAAA,EAAW;AAAA,QACT,eAAA,EAAiB,yBAAA;AAAA,QACjB,cAAA,EAAgB;AAAA,OAClB;AAAA,MACA,QAAA,EAAU,iBAAA;AAAA,MACV,iBAAA,EAAmB,QAAA;AAAA,MACnB,gBAAA,EAAkB,OAAA;AAAA,MAClB,oBAAA,EAAsB,YAAA;AAAA,MACtB,mBAAA,EAAqB,WAAA;AAAA,MACrB,mBAAA,EAAqB,WAAA;AAAA,MACrB,WAAA,EAAa;AAAA,QACX,WAAA,EAAa,cAAA;AAAA,QACb,QAAA,EAAU,WAAA;AAAA,QACV,QAAA,EAAU,WAAA;AAAA,QACV,aAAA,EAAe,iBAAA;AAAA,QACf,KAAA,EAAO,OAAA;AAAA,QACP,aAAA,EAAe,iBAAA;AAAA,QACf,SAAA,EAAW,YAAA;AAAA,QACX,MAAA,EAAQ;AAAA;AACV,KACF;AAAA,IACA,kBAAA,EAAoB;AAAA,MAClB,OAAA,EAAS;AAAA,QACP,SAAA,EAAW;AAAA;AACb,KACF;AAAA,IACA,YAAA,EAAc;AAAA,MACZ,SAAA,EAAW;AAAA,QACT,IAAA,EAAM,MAAA;AAAA,QACN,KAAA,EAAO,OAAA;AAAA,QACP,WAAA,EAAa,aAAA;AAAA,QACb,IAAA,EAAM,MAAA;AAAA,QACN,KAAA,EAAO;AAAA,OACT;AAAA,MACA,SAAA,EAAW;AAAA,KACb;AAAA,IACA,oBAAA,EAAsB;AAAA,MACpB,KAAA,EAAO,uBAAA;AAAA,MACP,SAAA,EAAW,uBAAA;AAAA,MACX,QAAA,EAAU,2DAAA;AAAA,MACV,OAAA,EAAS;AAAA,QACP,UAAA,EAAY;AAAA,UACV,KAAA,EAAO,2BAAA;AAAA,UACP,WAAA,EACE;AAAA,SACJ;AAAA,QACA,sBAAA,EAAwB,yBAAA;AAAA,QACxB,OAAA,EAAS;AAAA,UACP,KAAA,EAAO,SAAA;AAAA,UACP,YAAA,EAAc,wCAAA;AAAA,UACd,cAAA,EAAgB,6BAAA;AAAA,UAChB,MAAA,EAAQ;AAAA,YACN,KAAA,EAAO,OAAA;AAAA,YACP,SAAA,EAAW,WAAA;AAAA,YACX,MAAA,EAAQ;AAAA,WACV;AAAA,UACA,QAAA,EAAU;AAAA,SACZ;AAAA,QACA,SAAA,EAAW;AAAA,UACT,KAAA,EAAO,WAAA;AAAA,UACP,YAAA,EAAc,iDAAA;AAAA,UACd,cAAA,EAAgB,+BAAA;AAAA,UAChB,MAAA,EAAQ;AAAA,YACN,SAAA,EAAW,WAAA;AAAA,YACX,MAAA,EAAQ;AAAA,WACV;AAAA,UACA,QAAA,EAAU;AAAA,SACZ;AAAA,QACA,MAAA,EAAQ;AAAA,UACN,KAAA,EAAO,QAAA;AAAA,UACP,YAAA,EAAc;AAAA;AAChB;AACF,KACF;AAAA,IACA,kBAAA,EAAoB;AAAA,MAClB,KAAA,EAAO;AAAA,KACT;AAAA,IACA,iBAAA,EAAmB;AAAA,MACjB,KAAA,EAAO,kBAAA;AAAA,MACP,QAAA,EACE;AAAA,KACJ;AAAA,IACA,gBAAA,EAAkB;AAAA,MAChB,KAAA,EAAO,iBAAA;AAAA,MACP,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,uBAAA,EAAyB;AAAA,MACvB,KAAA,EAAO,uBAAA;AAAA,MACP,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,kBAAA,EAAoB;AAAA,MAClB,KAAA,EAAO,iBAAA;AAAA,MACP,QAAA,EAAU,yDAAA;AAAA,MACV,aAAA,EAAe;AAAA,QACb,KAAA,EAAO;AAAA,OACT;AAAA,MACA,iBAAA,EAAmB;AAAA,QACjB,KAAA,EAAO,qBAAA;AAAA,QACP,mBAAA,EAAqB,kBAAA;AAAA,QACrB,iBAAA,EAAmB;AAAA,OACrB;AAAA,MACA,iBAAA,EAAmB;AAAA,QACjB,GAAA,EAAK;AAAA,UACH,KAAA,EAAO,OAAA;AAAA,UACP,GAAA,EAAK,KAAA;AAAA,UACL,MAAA,EAAQ;AAAA;AACV,OACF;AAAA,MACA,iBAAA,EAAmB;AAAA,QACjB,gBAAA,EAAkB;AAAA,OACpB;AAAA,MACA,mBAAA,EAAqB;AAAA,QACnB,gBAAA,EAAkB,+BAAA;AAAA,QAClB,SAAA,EAAW;AAAA,UACT,KAAA,EAAO,eAAA;AAAA,UACP,gBAAA,EAAkB;AAAA,SACpB;AAAA,QACA,YAAA,EAAc;AAAA,UACZ,KAAA,EAAO;AAAA,SACT;AAAA,QACA,OAAA,EAAS;AAAA,UACP,KAAA,EAAO;AAAA;AACT,OACF;AAAA,MACA,qBAAA,EAAuB;AAAA,QACrB,mBAAA,EAAqB,4CAAA;AAAA,QACrB,eAAA,EAAiB,gBAAA;AAAA,QACjB,iBAAA,EAAmB,kBAAA;AAAA,QACnB,gBAAA,EAAkB;AAAA,OACpB;AAAA,MACA,mBAAA,EAAqB;AAAA,QACnB,KAAA,EAAO,kDAAA;AAAA,QACP,SAAA,EAAW;AAAA,UACT,KAAA,EAAO,yBAAA;AAAA,UACP,WAAA,EACE,iGAAA;AAAA,UACF,kBAAA,EACE;AAAA,SACJ;AAAA,QACA,WAAA,EAAa;AAAA,UACX,KAAA,EAAO,qBAAA;AAAA,UACP,WAAA,EACE,mGAAA;AAAA,UACF,kBAAA,EACE;AAAA,SACJ;AAAA,QACA,UAAA,EAAY;AAAA,UACV,KAAA,EAAO,0BAAA;AAAA,UACP,WAAA,EACE;AAAA,SACJ;AAAA,QACA,aAAA,EAAe;AAAA,UACb,KAAA,EAAO,uBAAA;AAAA,UACP,WAAA,EACE;AAAA;AACJ,OACF;AAAA,MACA,sBAAA,EAAwB;AAAA,QACtB,eAAA,EAAiB,WAAA;AAAA,QACjB,kBAAA,EAAoB,aAAA;AAAA,QACpB,mBAAA,EAAqB;AAAA,OACvB;AAAA,MACA,qBAAA,EAAuB;AAAA,QACrB,KAAA,EAAO;AAAA;AACT,KACF;AAAA,IACA,gBAAA,EAAkB;AAAA,MAChB,KAAA,EAAO,wBAAA;AAAA,MACP,QAAA,EACE,8EAAA;AAAA,MACF,SAAA,EAAW,wBAAA;AAAA,MACX,cAAA,EAAgB;AAAA,QACd,YAAA,EAAc,WAAA;AAAA,QACd,UAAA,EAAY;AAAA,OACd;AAAA,MACA,aAAA,EAAe;AAAA,QACb,2BAAA,EAA6B,6BAAA;AAAA,QAC7B,kBAAA,EACE;AAAA,OACJ;AAAA,MACA,wBAAA,EAA0B;AAAA,QACxB,iBAAA,EAAmB;AAAA;AACrB,KACF;AAAA,IACA,kBAAA,EAAoB;AAAA,MAClB,KAAA,EAAO,wBAAA;AAAA,MACP,QAAA,EACE,8EAAA;AAAA,MACF,SAAA,EAAW,wBAAA;AAAA,MACX,iBAAA,EAAmB,8BAAA;AAAA,MACnB,eAAA,EAAiB;AAAA,QACf,sBAAA,EAAwB;AAAA;AAC1B,KACF;AAAA,IACA,qBAAA,EAAuB;AAAA,MACrB,0BAAA,EAA4B,wBAAA;AAAA,MAC5B,oCAAA,EAAsC,iCAAA;AAAA,MACtC,wCAAA,EACE,qCAAA;AAAA,MACF,kBAAA,EAAoB,SAAA;AAAA,MACpB,uBAAA,EAAyB,iBAAA;AAAA,MACzB,yBAAA,EAA2B;AAAA,QACzB,iBAAA,EACE,+DAAA;AAAA,QACF,cAAA,EACE;AAAA,OACJ;AAAA,MACA,yBAAA,EAA2B;AAAA,QACzB,mBAAA,EAAqB,yBAAA;AAAA,QACrB,gBAAA,EACE;AAAA;AACJ,KACF;AAAA,IACA,6BAAA,EAA+B;AAAA,MAC7B,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS;AAAA,QACP,aAAA,EAAe,yBAAA;AAAA,QACf,eAAA,EAAiB,2BAAA;AAAA,QACjB,WAAA,EAAa;AAAA;AACf,KACF;AAAA,IACA,kCAAA,EAAoC;AAAA,MAClC,MAAA,EAAQ;AAAA,KACV;AAAA,IACA,uBAAA,EAAyB;AAAA,MACvB,yBAAA,EAA2B,oBAAA;AAAA,MAC3B,qBAAA,EAAuB,gBAAA;AAAA,MACvB,YAAA,EAAc,2BAAA;AAAA,MACd,qBAAA,EAAuB,OAAA;AAAA,MACvB,YAAA,EAAc,2CAAA;AAAA,MACd,yBAAA,EAA2B;AAAA;AAC7B;AAEJ,CAAC;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-scaffolder",
3
- "version": "1.39.1-next.1",
3
+ "version": "1.40.0",
4
4
  "description": "The Backstage plugin that helps you create new things",
5
5
  "backstage": {
6
6
  "role": "frontend-plugin",
@@ -70,24 +70,25 @@
70
70
  "test": "backstage-cli package test"
71
71
  },
72
72
  "dependencies": {
73
- "@backstage/catalog-client": "1.16.3-next.0",
74
- "@backstage/catalog-model": "1.10.2-next.0",
75
- "@backstage/core-components": "0.18.15-next.2",
76
- "@backstage/core-plugin-api": "1.12.11-next.0",
77
- "@backstage/errors": "1.3.2-next.0",
78
- "@backstage/filter-predicates": "0.1.6-next.0",
79
- "@backstage/frontend-plugin-api": "0.18.2-next.0",
80
- "@backstage/integration": "2.1.3-next.1",
81
- "@backstage/integration-react": "1.2.23-next.0",
82
- "@backstage/plugin-catalog-common": "1.2.1-next.0",
83
- "@backstage/plugin-catalog-react": "3.2.4-next.1",
84
- "@backstage/plugin-permission-react": "0.5.6-next.0",
85
- "@backstage/plugin-scaffolder-common": "2.3.1-next.0",
86
- "@backstage/plugin-scaffolder-react": "2.1.1-next.0",
87
- "@backstage/plugin-techdocs-common": "0.1.2-next.0",
88
- "@backstage/plugin-techdocs-react": "1.3.16-next.2",
89
- "@backstage/types": "1.2.2",
90
- "@backstage/ui": "0.18.0",
73
+ "@backstage/catalog-client": "^1.16.3",
74
+ "@backstage/catalog-model": "^1.10.2",
75
+ "@backstage/core-components": "^0.18.15",
76
+ "@backstage/core-plugin-api": "^1.12.11",
77
+ "@backstage/errors": "^1.3.2",
78
+ "@backstage/filter-predicates": "^0.2.0",
79
+ "@backstage/frontend-plugin-api": "^0.18.2",
80
+ "@backstage/integration": "^2.1.3",
81
+ "@backstage/integration-react": "^1.2.23",
82
+ "@backstage/plugin-catalog-common": "^1.2.1",
83
+ "@backstage/plugin-catalog-react": "^3.3.0",
84
+ "@backstage/plugin-home-react": "^0.1.43",
85
+ "@backstage/plugin-permission-react": "^0.5.6",
86
+ "@backstage/plugin-scaffolder-common": "^2.3.1",
87
+ "@backstage/plugin-scaffolder-react": "^2.1.1",
88
+ "@backstage/plugin-techdocs-common": "^0.1.2",
89
+ "@backstage/plugin-techdocs-react": "^1.4.0",
90
+ "@backstage/types": "^1.2.2",
91
+ "@backstage/ui": "^0.19.0",
91
92
  "@codemirror/language": "^6.0.0",
92
93
  "@codemirror/legacy-modes": "^6.1.0",
93
94
  "@codemirror/view": "^6.0.0",
@@ -111,6 +112,7 @@
111
112
  "luxon": "^3.0.0",
112
113
  "qs": "^6.15.2",
113
114
  "react-aria-components": "^1.14.0",
115
+ "react-intersection-observer": "^9.5.3",
114
116
  "react-resizable": "^3.0.5",
115
117
  "react-resizable-panels": "^3.0.4",
116
118
  "react-use": "^17.2.4",
@@ -120,14 +122,14 @@
120
122
  "zod-to-json-schema": "^3.25.1"
121
123
  },
122
124
  "devDependencies": {
123
- "@backstage/cli": "0.36.7-next.0",
124
- "@backstage/core-app-api": "1.20.6-next.0",
125
- "@backstage/dev-utils": "1.1.28-next.0",
126
- "@backstage/frontend-test-utils": "0.6.5-next.0",
127
- "@backstage/plugin-catalog": "2.0.10-next.2",
128
- "@backstage/plugin-permission-common": "0.9.12-next.0",
129
- "@backstage/plugin-techdocs": "1.19.0-next.1",
130
- "@backstage/test-utils": "1.7.23-next.0",
125
+ "@backstage/cli": "^0.36.7",
126
+ "@backstage/core-app-api": "^1.20.6",
127
+ "@backstage/dev-utils": "^1.1.28",
128
+ "@backstage/frontend-test-utils": "^0.6.5",
129
+ "@backstage/plugin-catalog": "^2.0.10",
130
+ "@backstage/plugin-permission-common": "^0.9.12",
131
+ "@backstage/plugin-techdocs": "^1.19.0",
132
+ "@backstage/test-utils": "^1.7.23",
131
133
  "@testing-library/dom": "^10.0.0",
132
134
  "@testing-library/jest-dom": "^6.0.0",
133
135
  "@testing-library/react": "^16.0.0",