@backstage/plugin-scaffolder 1.30.0-next.1 → 1.30.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 (139) hide show
  1. package/CHANGELOG.md +104 -0
  2. package/dist/alpha/components/TemplateEditorPage/CustomFieldExplorer.esm.js +98 -84
  3. package/dist/alpha/components/TemplateEditorPage/CustomFieldExplorer.esm.js.map +1 -1
  4. package/dist/alpha/components/TemplateEditorPage/CustomFieldPlaygroud.esm.js +119 -102
  5. package/dist/alpha/components/TemplateEditorPage/CustomFieldPlaygroud.esm.js.map +1 -1
  6. package/dist/alpha/components/TemplateEditorPage/CustomFieldsPage.esm.js +13 -10
  7. package/dist/alpha/components/TemplateEditorPage/CustomFieldsPage.esm.js.map +1 -1
  8. package/dist/alpha/components/TemplateEditorPage/DirectoryEditorContext.esm.js +4 -3
  9. package/dist/alpha/components/TemplateEditorPage/DirectoryEditorContext.esm.js.map +1 -1
  10. package/dist/alpha/components/TemplateEditorPage/DryRunContext.esm.js +3 -2
  11. package/dist/alpha/components/TemplateEditorPage/DryRunContext.esm.js.map +1 -1
  12. package/dist/alpha/components/TemplateEditorPage/DryRunResults/DryRunResults.esm.js +22 -15
  13. package/dist/alpha/components/TemplateEditorPage/DryRunResults/DryRunResults.esm.js.map +1 -1
  14. package/dist/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsList.esm.js +49 -44
  15. package/dist/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsList.esm.js.map +1 -1
  16. package/dist/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsSplitView.esm.js +7 -2
  17. package/dist/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsSplitView.esm.js.map +1 -1
  18. package/dist/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsView.esm.js +79 -57
  19. package/dist/alpha/components/TemplateEditorPage/DryRunResults/DryRunResultsView.esm.js.map +1 -1
  20. package/dist/alpha/components/TemplateEditorPage/DryRunResults/IconLink.esm.js +5 -2
  21. package/dist/alpha/components/TemplateEditorPage/DryRunResults/IconLink.esm.js.map +1 -1
  22. package/dist/alpha/components/TemplateEditorPage/DryRunResults/TaskPageLinks.esm.js +6 -6
  23. package/dist/alpha/components/TemplateEditorPage/DryRunResults/TaskPageLinks.esm.js.map +1 -1
  24. package/dist/alpha/components/TemplateEditorPage/DryRunResults/TaskStatusStepper.esm.js +40 -36
  25. package/dist/alpha/components/TemplateEditorPage/DryRunResults/TaskStatusStepper.esm.js.map +1 -1
  26. package/dist/alpha/components/TemplateEditorPage/TemplateEditor.esm.js +24 -17
  27. package/dist/alpha/components/TemplateEditorPage/TemplateEditor.esm.js.map +1 -1
  28. package/dist/alpha/components/TemplateEditorPage/TemplateEditorBrowser.esm.js +50 -42
  29. package/dist/alpha/components/TemplateEditorPage/TemplateEditorBrowser.esm.js.map +1 -1
  30. package/dist/alpha/components/TemplateEditorPage/TemplateEditorForm.esm.js +5 -4
  31. package/dist/alpha/components/TemplateEditorPage/TemplateEditorForm.esm.js.map +1 -1
  32. package/dist/alpha/components/TemplateEditorPage/TemplateEditorIntro.esm.js +87 -70
  33. package/dist/alpha/components/TemplateEditorPage/TemplateEditorIntro.esm.js.map +1 -1
  34. package/dist/alpha/components/TemplateEditorPage/TemplateEditorLayout.esm.js +7 -7
  35. package/dist/alpha/components/TemplateEditorPage/TemplateEditorLayout.esm.js.map +1 -1
  36. package/dist/alpha/components/TemplateEditorPage/TemplateEditorPage.esm.js +20 -17
  37. package/dist/alpha/components/TemplateEditorPage/TemplateEditorPage.esm.js.map +1 -1
  38. package/dist/alpha/components/TemplateEditorPage/TemplateEditorTextArea.esm.js +52 -45
  39. package/dist/alpha/components/TemplateEditorPage/TemplateEditorTextArea.esm.js.map +1 -1
  40. package/dist/alpha/components/TemplateEditorPage/TemplateEditorToolbar.esm.js +76 -60
  41. package/dist/alpha/components/TemplateEditorPage/TemplateEditorToolbar.esm.js.map +1 -1
  42. package/dist/alpha/components/TemplateEditorPage/TemplateEditorToolbarFileMenu.esm.js +42 -36
  43. package/dist/alpha/components/TemplateEditorPage/TemplateEditorToolbarFileMenu.esm.js.map +1 -1
  44. package/dist/alpha/components/TemplateEditorPage/TemplateEditorToolbarTemplatesMenu.esm.js +42 -38
  45. package/dist/alpha/components/TemplateEditorPage/TemplateEditorToolbarTemplatesMenu.esm.js.map +1 -1
  46. package/dist/alpha/components/TemplateEditorPage/TemplateFormPage.esm.js +23 -19
  47. package/dist/alpha/components/TemplateEditorPage/TemplateFormPage.esm.js.map +1 -1
  48. package/dist/alpha/components/TemplateEditorPage/TemplateFormPreviewer.esm.js +39 -31
  49. package/dist/alpha/components/TemplateEditorPage/TemplateFormPreviewer.esm.js.map +1 -1
  50. package/dist/alpha/components/TemplateEditorPage/TemplateIntroPage.esm.js +14 -10
  51. package/dist/alpha/components/TemplateEditorPage/TemplateIntroPage.esm.js.map +1 -1
  52. package/dist/alpha/components/TemplateListPage/RegisterExistingButton.esm.js +6 -6
  53. package/dist/alpha/components/TemplateListPage/RegisterExistingButton.esm.js.map +1 -1
  54. package/dist/alpha/components/TemplateListPage/TemplateListPage.esm.js +54 -34
  55. package/dist/alpha/components/TemplateListPage/TemplateListPage.esm.js.map +1 -1
  56. package/dist/alpha/components/TemplateWizardPage/TemplateWizardPage.esm.js +29 -24
  57. package/dist/alpha/components/TemplateWizardPage/TemplateWizardPage.esm.js.map +1 -1
  58. package/dist/alpha/components/TemplateWizardPage/TemplateWizardPageContextMenu.esm.js +40 -33
  59. package/dist/alpha/components/TemplateWizardPage/TemplateWizardPageContextMenu.esm.js.map +1 -1
  60. package/dist/alpha/extensions.esm.js +2 -2
  61. package/dist/alpha/extensions.esm.js.map +1 -1
  62. package/dist/alpha/fields/RepoUrlPicker.esm.js +1 -1
  63. package/dist/alpha.d.ts +13 -13
  64. package/dist/components/ActionsPage/ActionsPage.esm.js +120 -167
  65. package/dist/components/ActionsPage/ActionsPage.esm.js.map +1 -1
  66. package/dist/components/FileBrowser/FileBrowser.esm.js +10 -9
  67. package/dist/components/FileBrowser/FileBrowser.esm.js.map +1 -1
  68. package/dist/components/ListTasksPage/ListTasksPage.esm.js +80 -70
  69. package/dist/components/ListTasksPage/ListTasksPage.esm.js.map +1 -1
  70. package/dist/components/ListTasksPage/OwnerListPicker.esm.js +29 -23
  71. package/dist/components/ListTasksPage/OwnerListPicker.esm.js.map +1 -1
  72. package/dist/components/ListTasksPage/columns/CreatedAtColumn.esm.js +2 -2
  73. package/dist/components/ListTasksPage/columns/CreatedAtColumn.esm.js.map +1 -1
  74. package/dist/components/ListTasksPage/columns/OwnerEntityColumn.esm.js +3 -3
  75. package/dist/components/ListTasksPage/columns/OwnerEntityColumn.esm.js.map +1 -1
  76. package/dist/components/ListTasksPage/columns/TaskStatusColumn.esm.js +4 -4
  77. package/dist/components/ListTasksPage/columns/TaskStatusColumn.esm.js.map +1 -1
  78. package/dist/components/ListTasksPage/columns/TemplateTitleColumn.esm.js +2 -2
  79. package/dist/components/ListTasksPage/columns/TemplateTitleColumn.esm.js.map +1 -1
  80. package/dist/components/OngoingTask/ContextMenu.esm.js +80 -58
  81. package/dist/components/OngoingTask/ContextMenu.esm.js.map +1 -1
  82. package/dist/components/OngoingTask/OngoingTask.esm.js +95 -76
  83. package/dist/components/OngoingTask/OngoingTask.esm.js.map +1 -1
  84. package/dist/components/RenderSchema/RenderSchema.esm.js +379 -0
  85. package/dist/components/RenderSchema/RenderSchema.esm.js.map +1 -0
  86. package/dist/components/Router/Router.esm.js +105 -94
  87. package/dist/components/Router/Router.esm.js.map +1 -1
  88. package/dist/components/ScaffolderUsageExamplesTable/ScaffolderUsageExamplesTable.esm.js +28 -0
  89. package/dist/components/ScaffolderUsageExamplesTable/ScaffolderUsageExamplesTable.esm.js.map +1 -0
  90. package/dist/components/TemplateTypePicker/TemplateTypePicker.esm.js +42 -39
  91. package/dist/components/TemplateTypePicker/TemplateTypePicker.esm.js.map +1 -1
  92. package/dist/components/fields/EntityNamePicker/EntityNamePicker.esm.js +2 -2
  93. package/dist/components/fields/EntityNamePicker/EntityNamePicker.esm.js.map +1 -1
  94. package/dist/components/fields/EntityPicker/EntityPicker.esm.js +41 -40
  95. package/dist/components/fields/EntityPicker/EntityPicker.esm.js.map +1 -1
  96. package/dist/components/fields/EntityTagsPicker/EntityTagsPicker.esm.js +5 -4
  97. package/dist/components/fields/EntityTagsPicker/EntityTagsPicker.esm.js.map +1 -1
  98. package/dist/components/fields/MultiEntityPicker/MultiEntityPicker.esm.js +45 -44
  99. package/dist/components/fields/MultiEntityPicker/MultiEntityPicker.esm.js.map +1 -1
  100. package/dist/components/fields/MyGroupsPicker/MyGroupsPicker.esm.js +36 -35
  101. package/dist/components/fields/MyGroupsPicker/MyGroupsPicker.esm.js.map +1 -1
  102. package/dist/components/fields/OwnedEntityPicker/OwnedEntityPicker.esm.js +4 -4
  103. package/dist/components/fields/OwnedEntityPicker/OwnedEntityPicker.esm.js.map +1 -1
  104. package/dist/components/fields/OwnerPicker/OwnerPicker.esm.js +2 -2
  105. package/dist/components/fields/OwnerPicker/OwnerPicker.esm.js.map +1 -1
  106. package/dist/components/fields/RepoBranchPicker/BitbucketRepoBranchPicker.esm.js +26 -23
  107. package/dist/components/fields/RepoBranchPicker/BitbucketRepoBranchPicker.esm.js.map +1 -1
  108. package/dist/components/fields/RepoBranchPicker/DefaultRepoBranchPicker.esm.js +17 -15
  109. package/dist/components/fields/RepoBranchPicker/DefaultRepoBranchPicker.esm.js.map +1 -1
  110. package/dist/components/fields/RepoBranchPicker/GitHubRepoBranchPicker.esm.js +26 -23
  111. package/dist/components/fields/RepoBranchPicker/GitHubRepoBranchPicker.esm.js.map +1 -1
  112. package/dist/components/fields/RepoBranchPicker/RepoBranchPicker.esm.js +13 -5
  113. package/dist/components/fields/RepoBranchPicker/RepoBranchPicker.esm.js.map +1 -1
  114. package/dist/components/fields/RepoUrlPicker/AzureRepoPicker.esm.js +62 -53
  115. package/dist/components/fields/RepoUrlPicker/AzureRepoPicker.esm.js.map +1 -1
  116. package/dist/components/fields/RepoUrlPicker/BitbucketRepoPicker.esm.js +85 -77
  117. package/dist/components/fields/RepoUrlPicker/BitbucketRepoPicker.esm.js.map +1 -1
  118. package/dist/components/fields/RepoUrlPicker/GerritRepoPicker.esm.js +28 -25
  119. package/dist/components/fields/RepoUrlPicker/GerritRepoPicker.esm.js.map +1 -1
  120. package/dist/components/fields/RepoUrlPicker/GiteaRepoPicker.esm.js +33 -30
  121. package/dist/components/fields/RepoUrlPicker/GiteaRepoPicker.esm.js.map +1 -1
  122. package/dist/components/fields/RepoUrlPicker/GithubRepoPicker.esm.js +37 -34
  123. package/dist/components/fields/RepoUrlPicker/GithubRepoPicker.esm.js.map +1 -1
  124. package/dist/components/fields/RepoUrlPicker/GitlabRepoPicker.esm.js +41 -37
  125. package/dist/components/fields/RepoUrlPicker/GitlabRepoPicker.esm.js.map +1 -1
  126. package/dist/components/fields/RepoUrlPicker/RepoUrlPicker.esm.js +98 -83
  127. package/dist/components/fields/RepoUrlPicker/RepoUrlPicker.esm.js.map +1 -1
  128. package/dist/components/fields/RepoUrlPicker/RepoUrlPickerHost.esm.js +22 -19
  129. package/dist/components/fields/RepoUrlPicker/RepoUrlPickerHost.esm.js.map +1 -1
  130. package/dist/components/fields/RepoUrlPicker/RepoUrlPickerRepoName.esm.js +42 -39
  131. package/dist/components/fields/RepoUrlPicker/RepoUrlPickerRepoName.esm.js.map +1 -1
  132. package/dist/components/fields/SecretInput/SecretInput.esm.js +5 -5
  133. package/dist/components/fields/SecretInput/SecretInput.esm.js.map +1 -1
  134. package/dist/components/fields/VirtualizedListbox.esm.js +29 -26
  135. package/dist/components/fields/VirtualizedListbox.esm.js.map +1 -1
  136. package/dist/index.d.ts +17 -16
  137. package/dist/translation.esm.js +12 -10
  138. package/dist/translation.esm.js.map +1 -1
  139. package/package.json +25 -25
package/CHANGELOG.md CHANGED
@@ -1,5 +1,109 @@
1
1
  # @backstage/plugin-scaffolder
2
2
 
3
+ ## 1.30.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 76681a5: **BREAKING ALPHA**: Extract out schema rendering components into their own Component. This means that the translation keys have changed for `actionsPage.content.tableCell.*`. They have moved to their own root key `renderSchema.*` instead.
8
+
9
+ ```diff
10
+ ...
11
+ - tableCell: {
12
+ - name: 'Name',
13
+ - title: 'Title',
14
+ - description: 'Description',
15
+ - type: 'Type',
16
+ - },
17
+ - noRowsDescription: 'No schema defined',
18
+ ...
19
+ + renderSchema: {
20
+ + tableCell: {
21
+ + name: 'Name',
22
+ + title: 'Title',
23
+ + description: 'Description',
24
+ + type: 'Type',
25
+ + },
26
+ + undefined: 'No schema defined',
27
+ + },
28
+ ```
29
+
30
+ - 5890016: add api to retrieve template extensions info from scaffolder-backend
31
+
32
+ ### Patch Changes
33
+
34
+ - a47fd39: Removes instances of default React imports, a necessary update for the upcoming React 19 migration.
35
+
36
+ <https://legacy.reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html>
37
+
38
+ - 407eba1: Tweaked template editor tooltip to mention HTTPS requirement.
39
+ - Updated dependencies
40
+ - @backstage/plugin-catalog-react@1.17.0
41
+ - @backstage/frontend-plugin-api@0.10.1
42
+ - @backstage/integration-react@1.2.6
43
+ - @backstage/core-compat-api@0.4.1
44
+ - @backstage/core-components@0.17.1
45
+ - @backstage/core-plugin-api@1.10.6
46
+ - @backstage/plugin-permission-react@0.4.33
47
+ - @backstage/plugin-scaffolder-react@1.15.0
48
+ - @backstage/integration@1.16.3
49
+ - @backstage/catalog-client@1.9.1
50
+ - @backstage/catalog-model@1.7.3
51
+ - @backstage/errors@1.2.7
52
+ - @backstage/types@1.2.1
53
+ - @backstage/plugin-catalog-common@1.1.3
54
+ - @backstage/plugin-scaffolder-common@1.5.10
55
+
56
+ ## 1.30.0-next.2
57
+
58
+ ### Minor Changes
59
+
60
+ - 76681a5: **BREAKING ALPHA**: Extract out schema rendering components into their own Component. This means that the translation keys have changed for `actionsPage.content.tableCell.*`. They have moved to their own root key `renderSchema.*` instead.
61
+
62
+ ```diff
63
+ ...
64
+ - tableCell: {
65
+ - name: 'Name',
66
+ - title: 'Title',
67
+ - description: 'Description',
68
+ - type: 'Type',
69
+ - },
70
+ - noRowsDescription: 'No schema defined',
71
+ ...
72
+ + renderSchema: {
73
+ + tableCell: {
74
+ + name: 'Name',
75
+ + title: 'Title',
76
+ + description: 'Description',
77
+ + type: 'Type',
78
+ + },
79
+ + undefined: 'No schema defined',
80
+ + },
81
+ ```
82
+
83
+ ### Patch Changes
84
+
85
+ - a47fd39: Removes instances of default React imports, a necessary update for the upcoming React 19 migration.
86
+
87
+ <https://legacy.reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html>
88
+
89
+ - 407eba1: Tweaked template editor tooltip to mention HTTPS requirement.
90
+ - Updated dependencies
91
+ - @backstage/frontend-plugin-api@0.10.1-next.1
92
+ - @backstage/integration-react@1.2.6-next.1
93
+ - @backstage/core-compat-api@0.4.1-next.2
94
+ - @backstage/core-components@0.17.1-next.1
95
+ - @backstage/core-plugin-api@1.10.6-next.0
96
+ - @backstage/plugin-permission-react@0.4.33-next.0
97
+ - @backstage/plugin-scaffolder-react@1.15.0-next.2
98
+ - @backstage/plugin-catalog-react@1.17.0-next.2
99
+ - @backstage/catalog-client@1.9.1
100
+ - @backstage/catalog-model@1.7.3
101
+ - @backstage/errors@1.2.7
102
+ - @backstage/integration@1.16.3-next.0
103
+ - @backstage/types@1.2.1
104
+ - @backstage/plugin-catalog-common@1.1.3
105
+ - @backstage/plugin-scaffolder-common@1.5.10
106
+
3
107
  ## 1.30.0-next.1
4
108
 
5
109
  ### Patch Changes
@@ -1,3 +1,4 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
1
2
  import { StreamLanguage } from '@codemirror/language';
2
3
  import { yaml as yaml$1 } from '@codemirror/legacy-modes/mode/yaml';
3
4
  import Button from '@material-ui/core/Button';
@@ -6,7 +7,7 @@ import CardContent from '@material-ui/core/CardContent';
6
7
  import CardHeader from '@material-ui/core/CardHeader';
7
8
  import { makeStyles } from '@material-ui/core/styles';
8
9
  import CodeMirror from '@uiw/react-codemirror';
9
- import React, { useState, useMemo, useCallback } from 'react';
10
+ import { useState, useMemo, useCallback } from 'react';
10
11
  import yaml from 'yaml';
11
12
  import { Form } from '@backstage/plugin-scaffolder-react/alpha';
12
13
  import { TemplateEditorForm } from './TemplateEditorForm.esm.js';
@@ -103,94 +104,107 @@ const CustomFieldExplorer = ({
103
104
  },
104
105
  [setFieldFormState, setRefreshKey]
105
106
  );
106
- return /* @__PURE__ */ React.createElement("main", { className: classes.root }, /* @__PURE__ */ React.createElement("div", { className: classes.controls }, /* @__PURE__ */ React.createElement(
107
- Autocomplete,
108
- {
109
- id: "custom-fields-autocomplete",
110
- value: selectedField,
111
- options: fieldOptions,
112
- getOptionLabel: (option) => option.name,
113
- renderInput: (params) => /* @__PURE__ */ React.createElement(
114
- TextField,
115
- {
116
- ...params,
117
- "aria-label": t(
118
- "templateEditorPage.customFieldExplorer.selectFieldLabel"
119
- ),
120
- placeholder: t(
121
- "templateEditorPage.customFieldExplorer.selectFieldLabel"
122
- ),
123
- variant: "outlined",
124
- InputProps: {
125
- ...params.InputProps,
126
- startAdornment: /* @__PURE__ */ React.createElement(InputAdornment, { position: "start" }, /* @__PURE__ */ React.createElement(SearchIcon, null))
107
+ return /* @__PURE__ */ jsxs("main", { className: classes.root, children: [
108
+ /* @__PURE__ */ jsx("div", { className: classes.controls, children: /* @__PURE__ */ jsx(
109
+ Autocomplete,
110
+ {
111
+ id: "custom-fields-autocomplete",
112
+ value: selectedField,
113
+ options: fieldOptions,
114
+ getOptionLabel: (option) => option.name,
115
+ renderInput: (params) => /* @__PURE__ */ jsx(
116
+ TextField,
117
+ {
118
+ ...params,
119
+ "aria-label": t(
120
+ "templateEditorPage.customFieldExplorer.selectFieldLabel"
121
+ ),
122
+ placeholder: t(
123
+ "templateEditorPage.customFieldExplorer.selectFieldLabel"
124
+ ),
125
+ variant: "outlined",
126
+ InputProps: {
127
+ ...params.InputProps,
128
+ startAdornment: /* @__PURE__ */ jsx(InputAdornment, { position: "start", children: /* @__PURE__ */ jsx(SearchIcon, {}) })
129
+ }
127
130
  }
131
+ ),
132
+ onChange: (_event, option) => {
133
+ if (option) {
134
+ handleSelectionChange(option);
135
+ }
136
+ },
137
+ disableClearable: true,
138
+ fullWidth: true
139
+ }
140
+ ) }),
141
+ /* @__PURE__ */ jsx("div", { className: classes.fieldForm, children: /* @__PURE__ */ jsxs(Card, { children: [
142
+ /* @__PURE__ */ jsx(
143
+ CardHeader,
144
+ {
145
+ title: t("templateEditorPage.customFieldExplorer.fieldForm.title")
128
146
  }
129
147
  ),
130
- onChange: (_event, option) => {
131
- if (option) {
132
- handleSelectionChange(option);
148
+ /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(
149
+ Form,
150
+ {
151
+ showErrorList: false,
152
+ fields: { ...fieldComponents },
153
+ noHtml5Validate: true,
154
+ formData: fieldFormState,
155
+ formContext: { fieldFormState },
156
+ onSubmit: (e) => handleFieldConfigChange(e.formData),
157
+ validator,
158
+ schema: selectedField?.schema?.uiOptions || {},
159
+ experimental_defaultFormStateBehavior: {
160
+ allOf: "populateDefaults"
161
+ },
162
+ children: /* @__PURE__ */ jsx(
163
+ Button,
164
+ {
165
+ variant: "contained",
166
+ color: "primary",
167
+ type: "submit",
168
+ disabled: !selectedField?.schema?.uiOptions,
169
+ children: t(
170
+ "templateEditorPage.customFieldExplorer.fieldForm.applyButtonTitle"
171
+ )
172
+ }
173
+ )
133
174
  }
134
- },
135
- disableClearable: true,
136
- fullWidth: true
137
- }
138
- )), /* @__PURE__ */ React.createElement("div", { className: classes.fieldForm }, /* @__PURE__ */ React.createElement(Card, null, /* @__PURE__ */ React.createElement(
139
- CardHeader,
140
- {
141
- title: t("templateEditorPage.customFieldExplorer.fieldForm.title")
142
- }
143
- ), /* @__PURE__ */ React.createElement(CardContent, null, /* @__PURE__ */ React.createElement(
144
- Form,
145
- {
146
- showErrorList: false,
147
- fields: { ...fieldComponents },
148
- noHtml5Validate: true,
149
- formData: fieldFormState,
150
- formContext: { fieldFormState },
151
- onSubmit: (e) => handleFieldConfigChange(e.formData),
152
- validator,
153
- schema: selectedField?.schema?.uiOptions || {},
154
- experimental_defaultFormStateBehavior: {
155
- allOf: "populateDefaults"
156
- }
157
- },
158
- /* @__PURE__ */ React.createElement(
159
- Button,
160
- {
161
- variant: "contained",
162
- color: "primary",
163
- type: "submit",
164
- disabled: !selectedField?.schema?.uiOptions
165
- },
166
- t(
167
- "templateEditorPage.customFieldExplorer.fieldForm.applyButtonTitle"
175
+ ) })
176
+ ] }) }),
177
+ /* @__PURE__ */ jsxs("div", { className: classes.preview, children: [
178
+ /* @__PURE__ */ jsxs(Card, { children: [
179
+ /* @__PURE__ */ jsx(
180
+ CardHeader,
181
+ {
182
+ title: t("templateEditorPage.customFieldExplorer.preview.title")
183
+ }
184
+ ),
185
+ /* @__PURE__ */ jsx(CardContent, { children: /* @__PURE__ */ jsx(
186
+ CodeMirror,
187
+ {
188
+ readOnly: true,
189
+ theme: "dark",
190
+ height: "100%",
191
+ extensions: [StreamLanguage.define(yaml$1)],
192
+ value: sampleFieldTemplate
193
+ }
194
+ ) })
195
+ ] }),
196
+ /* @__PURE__ */ jsx(
197
+ TemplateEditorForm,
198
+ {
199
+ content: sampleFieldTemplate,
200
+ contentIsSpec: true,
201
+ fieldExtensions: customFieldExtensions,
202
+ setErrorText: () => null
203
+ },
204
+ refreshKey
168
205
  )
169
- )
170
- )))), /* @__PURE__ */ React.createElement("div", { className: classes.preview }, /* @__PURE__ */ React.createElement(Card, null, /* @__PURE__ */ React.createElement(
171
- CardHeader,
172
- {
173
- title: t("templateEditorPage.customFieldExplorer.preview.title")
174
- }
175
- ), /* @__PURE__ */ React.createElement(CardContent, null, /* @__PURE__ */ React.createElement(
176
- CodeMirror,
177
- {
178
- readOnly: true,
179
- theme: "dark",
180
- height: "100%",
181
- extensions: [StreamLanguage.define(yaml$1)],
182
- value: sampleFieldTemplate
183
- }
184
- ))), /* @__PURE__ */ React.createElement(
185
- TemplateEditorForm,
186
- {
187
- key: refreshKey,
188
- content: sampleFieldTemplate,
189
- contentIsSpec: true,
190
- fieldExtensions: customFieldExtensions,
191
- setErrorText: () => null
192
- }
193
- )));
206
+ ] })
207
+ ] });
194
208
  };
195
209
 
196
210
  export { CustomFieldExplorer };
@@ -1 +1 @@
1
- {"version":3,"file":"CustomFieldExplorer.esm.js","sources":["../../../../src/alpha/components/TemplateEditorPage/CustomFieldExplorer.tsx"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { StreamLanguage } from '@codemirror/language';\nimport { yaml as yamlSupport } from '@codemirror/legacy-modes/mode/yaml';\nimport Button from '@material-ui/core/Button';\nimport Card from '@material-ui/core/Card';\nimport CardContent from '@material-ui/core/CardContent';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport { makeStyles } from '@material-ui/core/styles';\nimport CodeMirror from '@uiw/react-codemirror';\nimport React, { useCallback, useMemo, useState } from 'react';\nimport yaml from 'yaml';\nimport { Form } from '@backstage/plugin-scaffolder-react/alpha';\nimport { TemplateEditorForm } from './TemplateEditorForm';\nimport validator from '@rjsf/validator-ajv8';\nimport { FieldExtensionOptions } from '@backstage/plugin-scaffolder-react';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { scaffolderTranslationRef } from '../../../translation';\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport TextField from '@material-ui/core/TextField';\nimport SearchIcon from '@material-ui/icons/Search';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\n\n/** @public */\nexport type ScaffolderCustomFieldExplorerClassKey =\n | 'root'\n | 'controls'\n | 'fieldForm'\n | 'preview';\n\nconst useStyles = makeStyles(\n theme => ({\n root: {\n gridArea: 'pageContent',\n display: 'grid',\n gridGap: theme.spacing(2),\n gridTemplateAreas: `\n \"controls\"\n \"fieldForm\"\n \"preview\"\n `,\n [theme.breakpoints.up('md')]: {\n gridTemplateAreas: `\n \"controls controls\"\n \"fieldForm preview\"\n `,\n gridTemplateRows: 'auto 1fr',\n gridTemplateColumns: '1fr 1fr',\n },\n },\n controls: {\n gridArea: 'controls',\n display: 'flex',\n flexFlow: 'row nowrap',\n alignItems: 'center',\n },\n fieldForm: {\n gridArea: 'fieldForm',\n },\n preview: {\n gridArea: 'preview',\n display: 'grid',\n gridGap: theme.spacing(2),\n alignContent: 'start',\n },\n }),\n { name: 'ScaffolderCustomFieldExplorer' },\n);\n\nexport const CustomFieldExplorer = ({\n customFieldExtensions = [],\n}: {\n customFieldExtensions?: FieldExtensionOptions<any, any>[];\n}) => {\n const classes = useStyles();\n const { t } = useTranslationRef(scaffolderTranslationRef);\n const fieldOptions = customFieldExtensions.filter(field => !!field.schema);\n const [selectedField, setSelectedField] = useState(fieldOptions?.[0]);\n const [fieldFormState, setFieldFormState] = useState({});\n const [refreshKey, setRefreshKey] = useState(Date.now());\n const sampleFieldTemplate = useMemo(() => {\n if (!selectedField) {\n return '';\n }\n return yaml.stringify({\n parameters: [\n {\n title: `${selectedField.name} Example`,\n properties: {\n [selectedField.name]: {\n type: selectedField.schema?.returnValue?.type,\n 'ui:field': selectedField.name,\n 'ui:options': fieldFormState,\n },\n },\n },\n ],\n });\n }, [fieldFormState, selectedField]);\n\n const fieldComponents = useMemo(() => {\n return Object.fromEntries(\n customFieldExtensions.map(({ name, component }) => [name, component]),\n );\n }, [customFieldExtensions]);\n\n const handleSelectionChange = useCallback(\n (selection: FieldExtensionOptions) => {\n setSelectedField(selection);\n setFieldFormState({});\n },\n [setFieldFormState, setSelectedField],\n );\n\n const handleFieldConfigChange = useCallback(\n (state: {}) => {\n setFieldFormState(state);\n // Force TemplateEditorForm to re-render since some fields\n // may not be responsive to ui:option changes\n setRefreshKey(Date.now());\n },\n [setFieldFormState, setRefreshKey],\n );\n\n return (\n <main className={classes.root}>\n <div className={classes.controls}>\n <Autocomplete\n id=\"custom-fields-autocomplete\"\n value={selectedField}\n options={fieldOptions}\n getOptionLabel={option => option.name}\n renderInput={params => (\n <TextField\n {...params}\n aria-label={t(\n 'templateEditorPage.customFieldExplorer.selectFieldLabel',\n )}\n placeholder={t(\n 'templateEditorPage.customFieldExplorer.selectFieldLabel',\n )}\n variant=\"outlined\"\n InputProps={{\n ...params.InputProps,\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon />\n </InputAdornment>\n ),\n }}\n />\n )}\n onChange={(_event, option) => {\n if (option) {\n handleSelectionChange(option);\n }\n }}\n disableClearable\n fullWidth\n />\n </div>\n <div className={classes.fieldForm}>\n <Card>\n <CardHeader\n title={t('templateEditorPage.customFieldExplorer.fieldForm.title')}\n />\n <CardContent>\n <Form\n showErrorList={false}\n fields={{ ...fieldComponents }}\n noHtml5Validate\n formData={fieldFormState}\n formContext={{ fieldFormState }}\n onSubmit={e => handleFieldConfigChange(e.formData)}\n validator={validator}\n schema={selectedField?.schema?.uiOptions || {}}\n experimental_defaultFormStateBehavior={{\n allOf: 'populateDefaults',\n }}\n >\n <Button\n variant=\"contained\"\n color=\"primary\"\n type=\"submit\"\n disabled={!selectedField?.schema?.uiOptions}\n >\n {t(\n 'templateEditorPage.customFieldExplorer.fieldForm.applyButtonTitle',\n )}\n </Button>\n </Form>\n </CardContent>\n </Card>\n </div>\n <div className={classes.preview}>\n <Card>\n <CardHeader\n title={t('templateEditorPage.customFieldExplorer.preview.title')}\n />\n <CardContent>\n <CodeMirror\n readOnly\n theme=\"dark\"\n height=\"100%\"\n extensions={[StreamLanguage.define(yamlSupport)]}\n value={sampleFieldTemplate}\n />\n </CardContent>\n </Card>\n <TemplateEditorForm\n key={refreshKey}\n content={sampleFieldTemplate}\n contentIsSpec\n fieldExtensions={customFieldExtensions}\n setErrorText={() => null}\n />\n </div>\n </main>\n );\n};\n"],"names":["yamlSupport"],"mappings":"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"}
1
+ {"version":3,"file":"CustomFieldExplorer.esm.js","sources":["../../../../src/alpha/components/TemplateEditorPage/CustomFieldExplorer.tsx"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { StreamLanguage } from '@codemirror/language';\nimport { yaml as yamlSupport } from '@codemirror/legacy-modes/mode/yaml';\nimport Button from '@material-ui/core/Button';\nimport Card from '@material-ui/core/Card';\nimport CardContent from '@material-ui/core/CardContent';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport { makeStyles } from '@material-ui/core/styles';\nimport CodeMirror from '@uiw/react-codemirror';\nimport { useCallback, useMemo, useState } from 'react';\nimport yaml from 'yaml';\nimport { Form } from '@backstage/plugin-scaffolder-react/alpha';\nimport { TemplateEditorForm } from './TemplateEditorForm';\nimport validator from '@rjsf/validator-ajv8';\nimport { FieldExtensionOptions } from '@backstage/plugin-scaffolder-react';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { scaffolderTranslationRef } from '../../../translation';\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport TextField from '@material-ui/core/TextField';\nimport SearchIcon from '@material-ui/icons/Search';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\n\n/** @public */\nexport type ScaffolderCustomFieldExplorerClassKey =\n | 'root'\n | 'controls'\n | 'fieldForm'\n | 'preview';\n\nconst useStyles = makeStyles(\n theme => ({\n root: {\n gridArea: 'pageContent',\n display: 'grid',\n gridGap: theme.spacing(2),\n gridTemplateAreas: `\n \"controls\"\n \"fieldForm\"\n \"preview\"\n `,\n [theme.breakpoints.up('md')]: {\n gridTemplateAreas: `\n \"controls controls\"\n \"fieldForm preview\"\n `,\n gridTemplateRows: 'auto 1fr',\n gridTemplateColumns: '1fr 1fr',\n },\n },\n controls: {\n gridArea: 'controls',\n display: 'flex',\n flexFlow: 'row nowrap',\n alignItems: 'center',\n },\n fieldForm: {\n gridArea: 'fieldForm',\n },\n preview: {\n gridArea: 'preview',\n display: 'grid',\n gridGap: theme.spacing(2),\n alignContent: 'start',\n },\n }),\n { name: 'ScaffolderCustomFieldExplorer' },\n);\n\nexport const CustomFieldExplorer = ({\n customFieldExtensions = [],\n}: {\n customFieldExtensions?: FieldExtensionOptions<any, any>[];\n}) => {\n const classes = useStyles();\n const { t } = useTranslationRef(scaffolderTranslationRef);\n const fieldOptions = customFieldExtensions.filter(field => !!field.schema);\n const [selectedField, setSelectedField] = useState(fieldOptions?.[0]);\n const [fieldFormState, setFieldFormState] = useState({});\n const [refreshKey, setRefreshKey] = useState(Date.now());\n const sampleFieldTemplate = useMemo(() => {\n if (!selectedField) {\n return '';\n }\n return yaml.stringify({\n parameters: [\n {\n title: `${selectedField.name} Example`,\n properties: {\n [selectedField.name]: {\n type: selectedField.schema?.returnValue?.type,\n 'ui:field': selectedField.name,\n 'ui:options': fieldFormState,\n },\n },\n },\n ],\n });\n }, [fieldFormState, selectedField]);\n\n const fieldComponents = useMemo(() => {\n return Object.fromEntries(\n customFieldExtensions.map(({ name, component }) => [name, component]),\n );\n }, [customFieldExtensions]);\n\n const handleSelectionChange = useCallback(\n (selection: FieldExtensionOptions) => {\n setSelectedField(selection);\n setFieldFormState({});\n },\n [setFieldFormState, setSelectedField],\n );\n\n const handleFieldConfigChange = useCallback(\n (state: {}) => {\n setFieldFormState(state);\n // Force TemplateEditorForm to re-render since some fields\n // may not be responsive to ui:option changes\n setRefreshKey(Date.now());\n },\n [setFieldFormState, setRefreshKey],\n );\n\n return (\n <main className={classes.root}>\n <div className={classes.controls}>\n <Autocomplete\n id=\"custom-fields-autocomplete\"\n value={selectedField}\n options={fieldOptions}\n getOptionLabel={option => option.name}\n renderInput={params => (\n <TextField\n {...params}\n aria-label={t(\n 'templateEditorPage.customFieldExplorer.selectFieldLabel',\n )}\n placeholder={t(\n 'templateEditorPage.customFieldExplorer.selectFieldLabel',\n )}\n variant=\"outlined\"\n InputProps={{\n ...params.InputProps,\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon />\n </InputAdornment>\n ),\n }}\n />\n )}\n onChange={(_event, option) => {\n if (option) {\n handleSelectionChange(option);\n }\n }}\n disableClearable\n fullWidth\n />\n </div>\n <div className={classes.fieldForm}>\n <Card>\n <CardHeader\n title={t('templateEditorPage.customFieldExplorer.fieldForm.title')}\n />\n <CardContent>\n <Form\n showErrorList={false}\n fields={{ ...fieldComponents }}\n noHtml5Validate\n formData={fieldFormState}\n formContext={{ fieldFormState }}\n onSubmit={e => handleFieldConfigChange(e.formData)}\n validator={validator}\n schema={selectedField?.schema?.uiOptions || {}}\n experimental_defaultFormStateBehavior={{\n allOf: 'populateDefaults',\n }}\n >\n <Button\n variant=\"contained\"\n color=\"primary\"\n type=\"submit\"\n disabled={!selectedField?.schema?.uiOptions}\n >\n {t(\n 'templateEditorPage.customFieldExplorer.fieldForm.applyButtonTitle',\n )}\n </Button>\n </Form>\n </CardContent>\n </Card>\n </div>\n <div className={classes.preview}>\n <Card>\n <CardHeader\n title={t('templateEditorPage.customFieldExplorer.preview.title')}\n />\n <CardContent>\n <CodeMirror\n readOnly\n theme=\"dark\"\n height=\"100%\"\n extensions={[StreamLanguage.define(yamlSupport)]}\n value={sampleFieldTemplate}\n />\n </CardContent>\n </Card>\n <TemplateEditorForm\n key={refreshKey}\n content={sampleFieldTemplate}\n contentIsSpec\n fieldExtensions={customFieldExtensions}\n setErrorText={() => null}\n />\n </div>\n </main>\n );\n};\n"],"names":["yamlSupport"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import React, { useState, useMemo, useCallback } from 'react';
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useState, useMemo, useCallback } from 'react';
2
3
  import yaml from 'yaml';
3
4
  import validator from '@rjsf/validator-ajv8';
4
5
  import CodeMirror from '@uiw/react-codemirror';
@@ -81,109 +82,125 @@ const CustomFieldPlaygroud = ({
81
82
  },
82
83
  [setFieldFormState, setRefreshKey]
83
84
  );
84
- return /* @__PURE__ */ React.createElement("main", { className: classes.root }, /* @__PURE__ */ React.createElement("div", { className: classes.controls }, /* @__PURE__ */ React.createElement(
85
- Autocomplete,
86
- {
87
- id: "custom-fields-autocomplete",
88
- value: selectedField,
89
- options: fieldOptions,
90
- getOptionLabel: (option) => option.name,
91
- renderInput: (params) => /* @__PURE__ */ React.createElement(
92
- TextField,
93
- {
94
- ...params,
95
- "aria-label": t(
96
- "templateEditorPage.customFieldExplorer.selectFieldLabel"
97
- ),
98
- placeholder: t(
99
- "templateEditorPage.customFieldExplorer.selectFieldLabel"
100
- ),
101
- variant: "outlined",
102
- InputProps: {
103
- ...params.InputProps,
104
- startAdornment: /* @__PURE__ */ React.createElement(InputAdornment, { position: "start" }, /* @__PURE__ */ React.createElement(SearchIcon, null))
85
+ return /* @__PURE__ */ jsxs("main", { className: classes.root, children: [
86
+ /* @__PURE__ */ jsx("div", { className: classes.controls, children: /* @__PURE__ */ jsx(
87
+ Autocomplete,
88
+ {
89
+ id: "custom-fields-autocomplete",
90
+ value: selectedField,
91
+ options: fieldOptions,
92
+ getOptionLabel: (option) => option.name,
93
+ renderInput: (params) => /* @__PURE__ */ jsx(
94
+ TextField,
95
+ {
96
+ ...params,
97
+ "aria-label": t(
98
+ "templateEditorPage.customFieldExplorer.selectFieldLabel"
99
+ ),
100
+ placeholder: t(
101
+ "templateEditorPage.customFieldExplorer.selectFieldLabel"
102
+ ),
103
+ variant: "outlined",
104
+ InputProps: {
105
+ ...params.InputProps,
106
+ startAdornment: /* @__PURE__ */ jsx(InputAdornment, { position: "start", children: /* @__PURE__ */ jsx(SearchIcon, {}) })
107
+ }
105
108
  }
106
- }
107
- ),
108
- onChange: (_event, option) => {
109
- if (option) {
110
- handleSelectionChange(option);
111
- }
112
- },
113
- disableClearable: true,
114
- fullWidth: true
115
- }
116
- )), /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement(Accordion, { defaultExpanded: true }, /* @__PURE__ */ React.createElement(
117
- AccordionSummary,
118
- {
119
- expandIcon: /* @__PURE__ */ React.createElement(ExpandMoreIcon, null),
120
- "aria-controls": "panel-code-content",
121
- id: "panel-code-header"
122
- },
123
- /* @__PURE__ */ React.createElement(Typography, { variant: "h6" }, t("templateEditorPage.customFieldExplorer.preview.title"))
124
- ), /* @__PURE__ */ React.createElement(AccordionDetails, null, /* @__PURE__ */ React.createElement("div", { className: classes.code }, /* @__PURE__ */ React.createElement(
125
- CodeMirror,
126
- {
127
- readOnly: true,
128
- theme: "dark",
129
- height: "100%",
130
- width: "100%",
131
- extensions: [StreamLanguage.define(yaml$1)],
132
- value: sampleFieldTemplate
133
- }
134
- )))), /* @__PURE__ */ React.createElement(Accordion, { defaultExpanded: true }, /* @__PURE__ */ React.createElement(
135
- AccordionSummary,
136
- {
137
- expandIcon: /* @__PURE__ */ React.createElement(ExpandMoreIcon, null),
138
- "aria-controls": "panel-preview-content",
139
- id: "panel-preview-header"
140
- },
141
- /* @__PURE__ */ React.createElement(Typography, { variant: "h6" }, t("templateEditorPage.customFieldExplorer.fieldPreview.title"))
142
- ), /* @__PURE__ */ React.createElement(AccordionDetails, null, /* @__PURE__ */ React.createElement(
143
- TemplateEditorForm,
144
- {
145
- key: refreshKey,
146
- content: sampleFieldTemplate,
147
- contentIsSpec: true,
148
- fieldExtensions,
149
- setErrorText: () => null
150
- }
151
- ))), /* @__PURE__ */ React.createElement(Accordion, { defaultExpanded: true }, /* @__PURE__ */ React.createElement(
152
- AccordionSummary,
153
- {
154
- expandIcon: /* @__PURE__ */ React.createElement(ExpandMoreIcon, null),
155
- "aria-controls": "panel-options-content",
156
- id: "panel-options-header"
157
- },
158
- /* @__PURE__ */ React.createElement(Typography, { variant: "h6" }, t("templateEditorPage.customFieldExplorer.fieldForm.title"))
159
- ), /* @__PURE__ */ React.createElement(AccordionDetails, null, /* @__PURE__ */ React.createElement(
160
- Form,
161
- {
162
- showErrorList: false,
163
- fields: { ...fieldComponents },
164
- noHtml5Validate: true,
165
- formData: fieldFormState,
166
- formContext: { fieldFormState },
167
- onSubmit: (e) => handleFieldConfigChange(e.formData),
168
- validator,
169
- schema: selectedField.schema?.uiOptions || {},
170
- experimental_defaultFormStateBehavior: {
171
- allOf: "populateDefaults"
109
+ ),
110
+ onChange: (_event, option) => {
111
+ if (option) {
112
+ handleSelectionChange(option);
113
+ }
114
+ },
115
+ disableClearable: true,
116
+ fullWidth: true
172
117
  }
173
- },
174
- /* @__PURE__ */ React.createElement(
175
- Button,
176
- {
177
- variant: "contained",
178
- color: "primary",
179
- type: "submit",
180
- disabled: !selectedField.schema?.uiOptions
181
- },
182
- t(
183
- "templateEditorPage.customFieldExplorer.fieldForm.applyButtonTitle"
184
- )
185
- )
186
- )))));
118
+ ) }),
119
+ /* @__PURE__ */ jsxs("div", { children: [
120
+ /* @__PURE__ */ jsxs(Accordion, { defaultExpanded: true, children: [
121
+ /* @__PURE__ */ jsx(
122
+ AccordionSummary,
123
+ {
124
+ expandIcon: /* @__PURE__ */ jsx(ExpandMoreIcon, {}),
125
+ "aria-controls": "panel-code-content",
126
+ id: "panel-code-header",
127
+ children: /* @__PURE__ */ jsx(Typography, { variant: "h6", children: t("templateEditorPage.customFieldExplorer.preview.title") })
128
+ }
129
+ ),
130
+ /* @__PURE__ */ jsx(AccordionDetails, { children: /* @__PURE__ */ jsx("div", { className: classes.code, children: /* @__PURE__ */ jsx(
131
+ CodeMirror,
132
+ {
133
+ readOnly: true,
134
+ theme: "dark",
135
+ height: "100%",
136
+ width: "100%",
137
+ extensions: [StreamLanguage.define(yaml$1)],
138
+ value: sampleFieldTemplate
139
+ }
140
+ ) }) })
141
+ ] }),
142
+ /* @__PURE__ */ jsxs(Accordion, { defaultExpanded: true, children: [
143
+ /* @__PURE__ */ jsx(
144
+ AccordionSummary,
145
+ {
146
+ expandIcon: /* @__PURE__ */ jsx(ExpandMoreIcon, {}),
147
+ "aria-controls": "panel-preview-content",
148
+ id: "panel-preview-header",
149
+ children: /* @__PURE__ */ jsx(Typography, { variant: "h6", children: t("templateEditorPage.customFieldExplorer.fieldPreview.title") })
150
+ }
151
+ ),
152
+ /* @__PURE__ */ jsx(AccordionDetails, { children: /* @__PURE__ */ jsx(
153
+ TemplateEditorForm,
154
+ {
155
+ content: sampleFieldTemplate,
156
+ contentIsSpec: true,
157
+ fieldExtensions,
158
+ setErrorText: () => null
159
+ },
160
+ refreshKey
161
+ ) })
162
+ ] }),
163
+ /* @__PURE__ */ jsxs(Accordion, { defaultExpanded: true, children: [
164
+ /* @__PURE__ */ jsx(
165
+ AccordionSummary,
166
+ {
167
+ expandIcon: /* @__PURE__ */ jsx(ExpandMoreIcon, {}),
168
+ "aria-controls": "panel-options-content",
169
+ id: "panel-options-header",
170
+ children: /* @__PURE__ */ jsx(Typography, { variant: "h6", children: t("templateEditorPage.customFieldExplorer.fieldForm.title") })
171
+ }
172
+ ),
173
+ /* @__PURE__ */ jsx(AccordionDetails, { children: /* @__PURE__ */ jsx(
174
+ Form,
175
+ {
176
+ showErrorList: false,
177
+ fields: { ...fieldComponents },
178
+ noHtml5Validate: true,
179
+ formData: fieldFormState,
180
+ formContext: { fieldFormState },
181
+ onSubmit: (e) => handleFieldConfigChange(e.formData),
182
+ validator,
183
+ schema: selectedField.schema?.uiOptions || {},
184
+ experimental_defaultFormStateBehavior: {
185
+ allOf: "populateDefaults"
186
+ },
187
+ children: /* @__PURE__ */ jsx(
188
+ Button,
189
+ {
190
+ variant: "contained",
191
+ color: "primary",
192
+ type: "submit",
193
+ disabled: !selectedField.schema?.uiOptions,
194
+ children: t(
195
+ "templateEditorPage.customFieldExplorer.fieldForm.applyButtonTitle"
196
+ )
197
+ }
198
+ )
199
+ }
200
+ ) })
201
+ ] })
202
+ ] })
203
+ ] });
187
204
  };
188
205
 
189
206
  export { CustomFieldPlaygroud };