@backstage/plugin-scaffolder-react 1.15.0 → 1.16.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # @backstage/plugin-scaffolder-react
2
2
 
3
+ ## 1.16.0-next.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 4235e87: add templating extensions page
8
+
9
+ ### Patch Changes
10
+
11
+ - 36ae651: Fixing a bug where the name for `templatingExtensions` was incorrectly set to `templateExtensions`
12
+ - Updated dependencies
13
+ - @backstage/plugin-catalog-react@1.18.0-next.0
14
+ - @backstage/catalog-client@1.10.0-next.0
15
+ - @backstage/catalog-model@1.7.3
16
+ - @backstage/core-components@0.17.1
17
+ - @backstage/core-plugin-api@1.10.6
18
+ - @backstage/frontend-plugin-api@0.10.1
19
+ - @backstage/theme@0.6.5
20
+ - @backstage/types@1.2.1
21
+ - @backstage/version-bridge@1.0.11
22
+ - @backstage/plugin-permission-react@0.4.33
23
+ - @backstage/plugin-scaffolder-common@1.5.10
24
+
3
25
  ## 1.15.0
4
26
 
5
27
  ### Minor Changes
package/dist/alpha.d.ts CHANGED
@@ -385,6 +385,7 @@ type ScaffolderPageContextMenuProps = {
385
385
  onActionsClicked?: () => void;
386
386
  onTasksClicked?: () => void;
387
387
  onCreateClicked?: () => void;
388
+ onTemplatingExtensionsClicked?: () => void;
388
389
  };
389
390
  /**
390
391
  * @alpha
@@ -476,6 +477,7 @@ declare const scaffolderReactTranslationRef: _backstage_core_plugin_api_alpha.Tr
476
477
  readonly "scaffolderPageContextMenu.editorLabel": "Manage Templates";
477
478
  readonly "scaffolderPageContextMenu.actionsLabel": "Installed Actions";
478
479
  readonly "scaffolderPageContextMenu.tasksLabel": "Task List";
480
+ readonly "scaffolderPageContextMenu.templatingExtensionsLabel": "Templating Extensions";
479
481
  readonly "stepper.backButtonText": "Back";
480
482
  readonly "stepper.createButtonText": "Create";
481
483
  readonly "stepper.reviewButtonText": "Review";
package/dist/index.d.ts CHANGED
@@ -432,7 +432,7 @@ type Action = {
432
432
  */
433
433
  type ListActionsResponse = Array<Action>;
434
434
  /**
435
- * The response shape for a single filter in the `listTemplateExtensions` call to the `scaffolder-backend`
435
+ * The response shape for a single filter in the `listTemplatingExtensions` call to the `scaffolder-backend`
436
436
  *
437
437
  * @public
438
438
  */
@@ -446,7 +446,7 @@ type TemplateFilter = {
446
446
  examples?: ScaffolderUsageExample[];
447
447
  };
448
448
  /**
449
- * The response shape for a single global function in the `listTemplateExtensions` call to the `scaffolder-backend`
449
+ * The response shape for a single global function in the `listTemplatingExtensions` call to the `scaffolder-backend`
450
450
  *
451
451
  * @public
452
452
  */
@@ -459,7 +459,7 @@ type TemplateGlobalFunction = {
459
459
  examples?: ScaffolderUsageExample[];
460
460
  };
461
461
  /**
462
- * The response shape for a single global value in the `listTemplateExtensions` call to the `scaffolder-backend`
462
+ * The response shape for a single global value in the `listTemplatingExtensions` call to the `scaffolder-backend`
463
463
  *
464
464
  * @public
465
465
  */
@@ -468,11 +468,11 @@ type TemplateGlobalValue = {
468
468
  value: JsonValue;
469
469
  };
470
470
  /**
471
- * The response shape for the `listTemplateExtensions` call to the `scaffolder-backend`
471
+ * The response shape for the `listTemplatingExtensions` call to the `scaffolder-backend`
472
472
  *
473
473
  * @public
474
474
  */
475
- type ListTemplateExtensionsResponse = {
475
+ type ListTemplatingExtensionsResponse = {
476
476
  filters: Record<string, TemplateFilter>;
477
477
  globals: {
478
478
  functions: Record<string, TemplateGlobalFunction>;
@@ -628,7 +628,7 @@ interface ScaffolderApi {
628
628
  /**
629
629
  * Returns a structure describing the available templating extensions.
630
630
  */
631
- listTemplateExtensions?(): Promise<ListTemplateExtensionsResponse>;
631
+ listTemplatingExtensions?(): Promise<ListTemplatingExtensionsResponse>;
632
632
  streamLogs(options: ScaffolderStreamLogsOptions): Observable<LogEvent>;
633
633
  dryRun?(options: ScaffolderDryRunOptions): Promise<ScaffolderDryRunResponse>;
634
634
  autocomplete?(options: {
@@ -749,4 +749,4 @@ interface FieldSchema<TReturn, TUiOptions> {
749
749
  readonly TOutput: TReturn;
750
750
  }
751
751
 
752
- export { type Action, type ActionExample, type CustomFieldExtensionSchema, type CustomFieldValidator, type FieldExtensionComponent, type FieldExtensionComponentProps, type FieldExtensionOptions, type FieldExtensionUiSchema, type FieldSchema, type FormProps, type LayoutComponent, type LayoutOptions, type LayoutTemplate, type ListActionsResponse, type ListTemplateExtensionsResponse, type LogEvent, type ReviewStepProps, type ScaffolderApi, type ScaffolderDryRunOptions, type ScaffolderDryRunResponse, ScaffolderFieldExtensions, type ScaffolderGetIntegrationsListOptions, type ScaffolderGetIntegrationsListResponse, ScaffolderLayouts, type ScaffolderOutputLink, type ScaffolderOutputText, type ScaffolderRJSFField, type ScaffolderRJSFFieldProps, type ScaffolderRJSFFormProps, type ScaffolderRJSFRegistryFieldsType, type ScaffolderScaffoldOptions, type ScaffolderScaffoldResponse, type ScaffolderStep, type ScaffolderStreamLogsOptions, type ScaffolderTask, type ScaffolderTaskOutput, type ScaffolderTaskStatus, type ScaffolderUsageExample, type ScaffolderUseTemplateSecrets, SecretsContextProvider, type TaskStream, type TemplateFilter, type TemplateGlobalFunction, type TemplateGlobalValue, type TemplateGroupFilter, type TemplateParameterSchema, createScaffolderFieldExtension, createScaffolderLayout, makeFieldSchema, scaffolderApiRef, useCustomFieldExtensions, useCustomLayouts, useTaskEventStream, useTemplateSecrets };
752
+ export { type Action, type ActionExample, type CustomFieldExtensionSchema, type CustomFieldValidator, type FieldExtensionComponent, type FieldExtensionComponentProps, type FieldExtensionOptions, type FieldExtensionUiSchema, type FieldSchema, type FormProps, type LayoutComponent, type LayoutOptions, type LayoutTemplate, type ListActionsResponse, type ListTemplatingExtensionsResponse, type LogEvent, type ReviewStepProps, type ScaffolderApi, type ScaffolderDryRunOptions, type ScaffolderDryRunResponse, ScaffolderFieldExtensions, type ScaffolderGetIntegrationsListOptions, type ScaffolderGetIntegrationsListResponse, ScaffolderLayouts, type ScaffolderOutputLink, type ScaffolderOutputText, type ScaffolderRJSFField, type ScaffolderRJSFFieldProps, type ScaffolderRJSFFormProps, type ScaffolderRJSFRegistryFieldsType, type ScaffolderScaffoldOptions, type ScaffolderScaffoldResponse, type ScaffolderStep, type ScaffolderStreamLogsOptions, type ScaffolderTask, type ScaffolderTaskOutput, type ScaffolderTaskStatus, type ScaffolderUsageExample, type ScaffolderUseTemplateSecrets, SecretsContextProvider, type TaskStream, type TemplateFilter, type TemplateGlobalFunction, type TemplateGlobalValue, type TemplateGroupFilter, type TemplateParameterSchema, createScaffolderFieldExtension, createScaffolderLayout, makeFieldSchema, scaffolderApiRef, useCustomFieldExtensions, useCustomLayouts, useTaskEventStream, useTemplateSecrets };
@@ -11,6 +11,7 @@ import CreateComponentIcon from '@material-ui/icons/AddCircleOutline';
11
11
  import DescriptionIcon from '@material-ui/icons/Description';
12
12
  import Edit from '@material-ui/icons/Edit';
13
13
  import List from '@material-ui/icons/List';
14
+ import Functions from '@material-ui/icons/Functions';
14
15
  import MoreVert from '@material-ui/icons/MoreVert';
15
16
  import { useState } from 'react';
16
17
  import { usePermission } from '@backstage/plugin-permission-react';
@@ -24,7 +25,13 @@ const useStyles = makeStyles((theme) => ({
24
25
  }));
25
26
  function ScaffolderPageContextMenu(props) {
26
27
  const { t } = useTranslationRef(scaffolderReactTranslationRef);
27
- const { onEditorClicked, onActionsClicked, onTasksClicked, onCreateClicked } = props;
28
+ const {
29
+ onEditorClicked,
30
+ onActionsClicked,
31
+ onTasksClicked,
32
+ onCreateClicked,
33
+ onTemplatingExtensionsClicked
34
+ } = props;
28
35
  const classes = useStyles();
29
36
  const [anchorEl, setAnchorEl] = useState();
30
37
  const { allowed: canReadTasks } = usePermission({
@@ -33,7 +40,7 @@ function ScaffolderPageContextMenu(props) {
33
40
  const { allowed: canManageTemplates } = usePermission({
34
41
  permission: templateManagementPermission
35
42
  });
36
- if (!onEditorClicked && !onActionsClicked && !onTasksClicked && !onCreateClicked) {
43
+ if (!(onEditorClicked || onActionsClicked || onTasksClicked || onCreateClicked || onTemplatingExtensionsClicked)) {
37
44
  return null;
38
45
  }
39
46
  const onOpen = (event) => {
@@ -87,6 +94,17 @@ function ScaffolderPageContextMenu(props) {
87
94
  }
88
95
  )
89
96
  ] }),
97
+ onTemplatingExtensionsClicked && /* @__PURE__ */ jsxs(MenuItem, { onClick: onTemplatingExtensionsClicked, children: [
98
+ /* @__PURE__ */ jsx(ListItemIcon, { children: /* @__PURE__ */ jsx(Functions, { fontSize: "small" }) }),
99
+ /* @__PURE__ */ jsx(
100
+ ListItemText,
101
+ {
102
+ primary: t(
103
+ "scaffolderPageContextMenu.templatingExtensionsLabel"
104
+ )
105
+ }
106
+ )
107
+ ] }),
90
108
  onActionsClicked && /* @__PURE__ */ jsxs(MenuItem, { onClick: onActionsClicked, children: [
91
109
  /* @__PURE__ */ jsx(ListItemIcon, { children: /* @__PURE__ */ jsx(DescriptionIcon, { fontSize: "small" }) }),
92
110
  /* @__PURE__ */ jsx(
@@ -1 +1 @@
1
- {"version":3,"file":"ScaffolderPageContextMenu.esm.js","sources":["../../../../src/next/components/ScaffolderPageContextMenu/ScaffolderPageContextMenu.tsx"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useTranslationRef } from '@backstage/frontend-plugin-api';\nimport IconButton from '@material-ui/core/IconButton';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport MenuList from '@material-ui/core/MenuList';\nimport Popover from '@material-ui/core/Popover';\nimport { makeStyles } from '@material-ui/core/styles';\nimport CreateComponentIcon from '@material-ui/icons/AddCircleOutline';\nimport Description from '@material-ui/icons/Description';\nimport Edit from '@material-ui/icons/Edit';\nimport List from '@material-ui/icons/List';\nimport MoreVert from '@material-ui/icons/MoreVert';\nimport { SyntheticEvent, useState } from 'react';\nimport { usePermission } from '@backstage/plugin-permission-react';\nimport { taskReadPermission } from '@backstage/plugin-scaffolder-common/alpha';\nimport { templateManagementPermission } from '@backstage/plugin-scaffolder-common/alpha';\n\nimport { scaffolderReactTranslationRef } from '../../../translation';\n\nconst useStyles = makeStyles(theme => ({\n button: {\n color: theme.page.fontColor,\n },\n}));\n\n/**\n * @alpha\n */\nexport type ScaffolderPageContextMenuProps = {\n onEditorClicked?: () => void;\n onActionsClicked?: () => void;\n onTasksClicked?: () => void;\n onCreateClicked?: () => void;\n};\n\n/**\n * @alpha\n */\nexport function ScaffolderPageContextMenu(\n props: ScaffolderPageContextMenuProps,\n) {\n const { t } = useTranslationRef(scaffolderReactTranslationRef);\n const { onEditorClicked, onActionsClicked, onTasksClicked, onCreateClicked } =\n props;\n const classes = useStyles();\n const [anchorEl, setAnchorEl] = useState<HTMLButtonElement>();\n\n const { allowed: canReadTasks } = usePermission({\n permission: taskReadPermission,\n });\n\n const { allowed: canManageTemplates } = usePermission({\n permission: templateManagementPermission,\n });\n\n if (\n !onEditorClicked &&\n !onActionsClicked &&\n !onTasksClicked &&\n !onCreateClicked\n ) {\n return null;\n }\n\n const onOpen = (event: SyntheticEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const onClose = () => {\n setAnchorEl(undefined);\n };\n\n return (\n <>\n <IconButton\n id=\"long-menu\"\n aria-label={t('scaffolderPageContextMenu.moreLabel')}\n aria-controls=\"long-menu\"\n aria-expanded={!!anchorEl}\n aria-haspopup=\"true\"\n role=\"button\"\n onClick={onOpen}\n data-testid=\"menu-button\"\n color=\"inherit\"\n className={classes.button}\n >\n <MoreVert />\n </IconButton>\n <Popover\n aria-labelledby=\"long-menu\"\n open={Boolean(anchorEl)}\n onClose={onClose}\n anchorEl={anchorEl}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n >\n <MenuList>\n {onCreateClicked && (\n <MenuItem onClick={onCreateClicked}>\n <ListItemIcon>\n <CreateComponentIcon fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText\n primary={t('scaffolderPageContextMenu.createLabel')}\n />\n </MenuItem>\n )}\n {onEditorClicked && canManageTemplates && (\n <MenuItem onClick={onEditorClicked}>\n <ListItemIcon>\n <Edit fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText\n primary={t('scaffolderPageContextMenu.editorLabel')}\n />\n </MenuItem>\n )}\n {onActionsClicked && (\n <MenuItem onClick={onActionsClicked}>\n <ListItemIcon>\n <Description fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText\n primary={t('scaffolderPageContextMenu.actionsLabel')}\n />\n </MenuItem>\n )}\n {onTasksClicked && canReadTasks && (\n <MenuItem onClick={onTasksClicked}>\n <ListItemIcon>\n <List fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText\n primary={t('scaffolderPageContextMenu.tasksLabel')}\n />\n </MenuItem>\n )}\n </MenuList>\n </Popover>\n </>\n );\n}\n"],"names":["Description"],"mappings":"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"}
1
+ {"version":3,"file":"ScaffolderPageContextMenu.esm.js","sources":["../../../../src/next/components/ScaffolderPageContextMenu/ScaffolderPageContextMenu.tsx"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useTranslationRef } from '@backstage/frontend-plugin-api';\nimport IconButton from '@material-ui/core/IconButton';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport MenuList from '@material-ui/core/MenuList';\nimport Popover from '@material-ui/core/Popover';\nimport { makeStyles } from '@material-ui/core/styles';\nimport CreateComponentIcon from '@material-ui/icons/AddCircleOutline';\nimport Description from '@material-ui/icons/Description';\nimport Edit from '@material-ui/icons/Edit';\nimport List from '@material-ui/icons/List';\nimport Functions from '@material-ui/icons/Functions';\nimport MoreVert from '@material-ui/icons/MoreVert';\nimport { SyntheticEvent, useState } from 'react';\nimport { usePermission } from '@backstage/plugin-permission-react';\nimport { taskReadPermission } from '@backstage/plugin-scaffolder-common/alpha';\nimport { templateManagementPermission } from '@backstage/plugin-scaffolder-common/alpha';\n\nimport { scaffolderReactTranslationRef } from '../../../translation';\n\nconst useStyles = makeStyles(theme => ({\n button: {\n color: theme.page.fontColor,\n },\n}));\n\n/**\n * @alpha\n */\nexport type ScaffolderPageContextMenuProps = {\n onEditorClicked?: () => void;\n onActionsClicked?: () => void;\n onTasksClicked?: () => void;\n onCreateClicked?: () => void;\n onTemplatingExtensionsClicked?: () => void;\n};\n\n/**\n * @alpha\n */\nexport function ScaffolderPageContextMenu(\n props: ScaffolderPageContextMenuProps,\n) {\n const { t } = useTranslationRef(scaffolderReactTranslationRef);\n const {\n onEditorClicked,\n onActionsClicked,\n onTasksClicked,\n onCreateClicked,\n onTemplatingExtensionsClicked,\n } = props;\n const classes = useStyles();\n const [anchorEl, setAnchorEl] = useState<HTMLButtonElement>();\n\n const { allowed: canReadTasks } = usePermission({\n permission: taskReadPermission,\n });\n\n const { allowed: canManageTemplates } = usePermission({\n permission: templateManagementPermission,\n });\n\n if (\n !(\n onEditorClicked ||\n onActionsClicked ||\n onTasksClicked ||\n onCreateClicked ||\n onTemplatingExtensionsClicked\n )\n ) {\n return null;\n }\n\n const onOpen = (event: SyntheticEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const onClose = () => {\n setAnchorEl(undefined);\n };\n\n return (\n <>\n <IconButton\n id=\"long-menu\"\n aria-label={t('scaffolderPageContextMenu.moreLabel')}\n aria-controls=\"long-menu\"\n aria-expanded={!!anchorEl}\n aria-haspopup=\"true\"\n role=\"button\"\n onClick={onOpen}\n data-testid=\"menu-button\"\n color=\"inherit\"\n className={classes.button}\n >\n <MoreVert />\n </IconButton>\n <Popover\n aria-labelledby=\"long-menu\"\n open={Boolean(anchorEl)}\n onClose={onClose}\n anchorEl={anchorEl}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n >\n <MenuList>\n {onCreateClicked && (\n <MenuItem onClick={onCreateClicked}>\n <ListItemIcon>\n <CreateComponentIcon fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText\n primary={t('scaffolderPageContextMenu.createLabel')}\n />\n </MenuItem>\n )}\n {onEditorClicked && canManageTemplates && (\n <MenuItem onClick={onEditorClicked}>\n <ListItemIcon>\n <Edit fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText\n primary={t('scaffolderPageContextMenu.editorLabel')}\n />\n </MenuItem>\n )}\n {onTemplatingExtensionsClicked && (\n <MenuItem onClick={onTemplatingExtensionsClicked}>\n <ListItemIcon>\n <Functions fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText\n primary={t(\n 'scaffolderPageContextMenu.templatingExtensionsLabel',\n )}\n />\n </MenuItem>\n )}\n {onActionsClicked && (\n <MenuItem onClick={onActionsClicked}>\n <ListItemIcon>\n <Description fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText\n primary={t('scaffolderPageContextMenu.actionsLabel')}\n />\n </MenuItem>\n )}\n {onTasksClicked && canReadTasks && (\n <MenuItem onClick={onTasksClicked}>\n <ListItemIcon>\n <List fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText\n primary={t('scaffolderPageContextMenu.tasksLabel')}\n />\n </MenuItem>\n )}\n </MenuList>\n </Popover>\n </>\n );\n}\n"],"names":["Description"],"mappings":"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"}
@@ -11,7 +11,8 @@ const scaffolderReactTranslationRef = createTranslationRef({
11
11
  createLabel: "Create",
12
12
  editorLabel: "Manage Templates",
13
13
  actionsLabel: "Installed Actions",
14
- tasksLabel: "Task List"
14
+ tasksLabel: "Task List",
15
+ templatingExtensionsLabel: "Templating Extensions"
15
16
  },
16
17
  stepper: {
17
18
  backButtonText: "Back",
@@ -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/** @alpha */\nexport const scaffolderReactTranslationRef = createTranslationRef({\n id: 'scaffolder-react',\n messages: {\n passwordWidget: {\n content:\n 'This widget is insecure. Please use [`ui:field: Secret`](https://backstage.io/docs/features/software-templates/writing-templates/#using-secrets) instead of `ui:widget: password`',\n },\n scaffolderPageContextMenu: {\n moreLabel: 'more',\n createLabel: 'Create',\n editorLabel: 'Manage Templates',\n actionsLabel: 'Installed Actions',\n tasksLabel: 'Task List',\n },\n stepper: {\n backButtonText: 'Back',\n createButtonText: 'Create',\n reviewButtonText: 'Review',\n stepIndexLabel: 'Step {{index, number}}',\n nextButtonText: 'Next',\n },\n templateCategoryPicker: {\n title: 'Categories',\n },\n templateCard: {\n noDescription: 'No description',\n chooseButtonText: 'Choose',\n },\n cardHeader: {\n detailBtnTitle: 'Show template entity details',\n },\n templateOutputs: {\n title: 'Text Output',\n },\n workflow: {\n noDescription: 'No description',\n },\n },\n});\n"],"names":[],"mappings":";;AAkBO,MAAM,gCAAgC,oBAAqB,CAAA;AAAA,EAChE,EAAI,EAAA,kBAAA;AAAA,EACJ,QAAU,EAAA;AAAA,IACR,cAAgB,EAAA;AAAA,MACd,OACE,EAAA;AAAA,KACJ;AAAA,IACA,yBAA2B,EAAA;AAAA,MACzB,SAAW,EAAA,MAAA;AAAA,MACX,WAAa,EAAA,QAAA;AAAA,MACb,WAAa,EAAA,kBAAA;AAAA,MACb,YAAc,EAAA,mBAAA;AAAA,MACd,UAAY,EAAA;AAAA,KACd;AAAA,IACA,OAAS,EAAA;AAAA,MACP,cAAgB,EAAA,MAAA;AAAA,MAChB,gBAAkB,EAAA,QAAA;AAAA,MAClB,gBAAkB,EAAA,QAAA;AAAA,MAClB,cAAgB,EAAA,wBAAA;AAAA,MAChB,cAAgB,EAAA;AAAA,KAClB;AAAA,IACA,sBAAwB,EAAA;AAAA,MACtB,KAAO,EAAA;AAAA,KACT;AAAA,IACA,YAAc,EAAA;AAAA,MACZ,aAAe,EAAA,gBAAA;AAAA,MACf,gBAAkB,EAAA;AAAA,KACpB;AAAA,IACA,UAAY,EAAA;AAAA,MACV,cAAgB,EAAA;AAAA,KAClB;AAAA,IACA,eAAiB,EAAA;AAAA,MACf,KAAO,EAAA;AAAA,KACT;AAAA,IACA,QAAU,EAAA;AAAA,MACR,aAAe,EAAA;AAAA;AACjB;AAEJ,CAAC;;;;"}
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/** @alpha */\nexport const scaffolderReactTranslationRef = createTranslationRef({\n id: 'scaffolder-react',\n messages: {\n passwordWidget: {\n content:\n 'This widget is insecure. Please use [`ui:field: Secret`](https://backstage.io/docs/features/software-templates/writing-templates/#using-secrets) instead of `ui:widget: password`',\n },\n scaffolderPageContextMenu: {\n moreLabel: 'more',\n createLabel: 'Create',\n editorLabel: 'Manage Templates',\n actionsLabel: 'Installed Actions',\n tasksLabel: 'Task List',\n templatingExtensionsLabel: 'Templating Extensions',\n },\n stepper: {\n backButtonText: 'Back',\n createButtonText: 'Create',\n reviewButtonText: 'Review',\n stepIndexLabel: 'Step {{index, number}}',\n nextButtonText: 'Next',\n },\n templateCategoryPicker: {\n title: 'Categories',\n },\n templateCard: {\n noDescription: 'No description',\n chooseButtonText: 'Choose',\n },\n cardHeader: {\n detailBtnTitle: 'Show template entity details',\n },\n templateOutputs: {\n title: 'Text Output',\n },\n workflow: {\n noDescription: 'No description',\n },\n },\n});\n"],"names":[],"mappings":";;AAkBO,MAAM,gCAAgC,oBAAqB,CAAA;AAAA,EAChE,EAAI,EAAA,kBAAA;AAAA,EACJ,QAAU,EAAA;AAAA,IACR,cAAgB,EAAA;AAAA,MACd,OACE,EAAA;AAAA,KACJ;AAAA,IACA,yBAA2B,EAAA;AAAA,MACzB,SAAW,EAAA,MAAA;AAAA,MACX,WAAa,EAAA,QAAA;AAAA,MACb,WAAa,EAAA,kBAAA;AAAA,MACb,YAAc,EAAA,mBAAA;AAAA,MACd,UAAY,EAAA,WAAA;AAAA,MACZ,yBAA2B,EAAA;AAAA,KAC7B;AAAA,IACA,OAAS,EAAA;AAAA,MACP,cAAgB,EAAA,MAAA;AAAA,MAChB,gBAAkB,EAAA,QAAA;AAAA,MAClB,gBAAkB,EAAA,QAAA;AAAA,MAClB,cAAgB,EAAA,wBAAA;AAAA,MAChB,cAAgB,EAAA;AAAA,KAClB;AAAA,IACA,sBAAwB,EAAA;AAAA,MACtB,KAAO,EAAA;AAAA,KACT;AAAA,IACA,YAAc,EAAA;AAAA,MACZ,aAAe,EAAA,gBAAA;AAAA,MACf,gBAAkB,EAAA;AAAA,KACpB;AAAA,IACA,UAAY,EAAA;AAAA,MACV,cAAgB,EAAA;AAAA,KAClB;AAAA,IACA,eAAiB,EAAA;AAAA,MACf,KAAO,EAAA;AAAA,KACT;AAAA,IACA,QAAU,EAAA;AAAA,MACR,aAAe,EAAA;AAAA;AACjB;AAEJ,CAAC;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage/plugin-scaffolder-react",
3
- "version": "1.15.0",
3
+ "version": "1.16.0-next.0",
4
4
  "description": "A frontend library that helps other Backstage plugins interact with the Scaffolder",
5
5
  "backstage": {
6
6
  "role": "web-library",
@@ -66,17 +66,17 @@
66
66
  "test": "backstage-cli package test"
67
67
  },
68
68
  "dependencies": {
69
- "@backstage/catalog-client": "^1.9.1",
70
- "@backstage/catalog-model": "^1.7.3",
71
- "@backstage/core-components": "^0.17.1",
72
- "@backstage/core-plugin-api": "^1.10.6",
73
- "@backstage/frontend-plugin-api": "^0.10.1",
74
- "@backstage/plugin-catalog-react": "^1.17.0",
75
- "@backstage/plugin-permission-react": "^0.4.33",
76
- "@backstage/plugin-scaffolder-common": "^1.5.10",
77
- "@backstage/theme": "^0.6.5",
78
- "@backstage/types": "^1.2.1",
79
- "@backstage/version-bridge": "^1.0.11",
69
+ "@backstage/catalog-client": "1.10.0-next.0",
70
+ "@backstage/catalog-model": "1.7.3",
71
+ "@backstage/core-components": "0.17.1",
72
+ "@backstage/core-plugin-api": "1.10.6",
73
+ "@backstage/frontend-plugin-api": "0.10.1",
74
+ "@backstage/plugin-catalog-react": "1.18.0-next.0",
75
+ "@backstage/plugin-permission-react": "0.4.33",
76
+ "@backstage/plugin-scaffolder-common": "1.5.10",
77
+ "@backstage/theme": "0.6.5",
78
+ "@backstage/types": "1.2.1",
79
+ "@backstage/version-bridge": "1.0.11",
80
80
  "@material-ui/core": "^4.12.2",
81
81
  "@material-ui/icons": "^4.9.1",
82
82
  "@material-ui/lab": "4.0.0-alpha.61",
@@ -104,12 +104,12 @@
104
104
  "zod-to-json-schema": "^3.20.4"
105
105
  },
106
106
  "devDependencies": {
107
- "@backstage/cli": "^0.32.0",
108
- "@backstage/core-app-api": "^1.16.1",
109
- "@backstage/plugin-catalog": "^1.29.0",
110
- "@backstage/plugin-catalog-common": "^1.1.3",
111
- "@backstage/plugin-permission-common": "^0.8.4",
112
- "@backstage/test-utils": "^1.7.7",
107
+ "@backstage/cli": "0.32.1-next.0",
108
+ "@backstage/core-app-api": "1.16.1",
109
+ "@backstage/plugin-catalog": "1.29.1-next.0",
110
+ "@backstage/plugin-catalog-common": "1.1.3",
111
+ "@backstage/plugin-permission-common": "0.8.4",
112
+ "@backstage/test-utils": "1.7.7",
113
113
  "@testing-library/dom": "^10.0.0",
114
114
  "@testing-library/jest-dom": "^6.0.0",
115
115
  "@testing-library/react": "^16.0.0",