@tduniec/plugin-template-designer 0.2.3 → 0.2.4

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.
@@ -0,0 +1,52 @@
1
+ import * as react from 'react';
2
+ import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api';
3
+ import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
4
+
5
+ /**
6
+ * Backstage frontend plugin.
7
+ *
8
+ * @alpha
9
+ */
10
+ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin<{
11
+ root: _backstage_core_plugin_api.RouteRef<undefined>;
12
+ }, {}, {
13
+ "nav-item:template-designer": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
14
+ kind: "nav-item";
15
+ name: undefined;
16
+ config: {};
17
+ configInput: {};
18
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<{
19
+ title: string;
20
+ icon: _backstage_core_plugin_api.IconComponent;
21
+ routeRef: _backstage_frontend_plugin_api.RouteRef<undefined>;
22
+ }, "core.nav-item.target", {}>;
23
+ inputs: {};
24
+ params: {
25
+ title: string;
26
+ icon: _backstage_core_plugin_api.IconComponent;
27
+ routeRef: _backstage_frontend_plugin_api.RouteRef<undefined>;
28
+ };
29
+ }>;
30
+ "page:template-designer": _backstage_frontend_plugin_api.OverridableExtensionDefinition<{
31
+ kind: "page";
32
+ name: undefined;
33
+ config: {
34
+ path: string | undefined;
35
+ };
36
+ configInput: {
37
+ path?: string | undefined;
38
+ };
39
+ output: _backstage_frontend_plugin_api.ExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
40
+ optional: true;
41
+ }>;
42
+ inputs: {};
43
+ params: {
44
+ defaultPath?: [Error: `Use the 'path' param instead`];
45
+ path: string;
46
+ loader: () => Promise<JSX.Element>;
47
+ routeRef?: _backstage_frontend_plugin_api.RouteRef;
48
+ };
49
+ }>;
50
+ }>;
51
+
52
+ export { _default as default };
@@ -0,0 +1,30 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { NavItemBlueprint, PageBlueprint, createFrontendPlugin } from '@backstage/frontend-plugin-api';
3
+ import { rootRouteRef } from './routes.esm.js';
4
+ import BorderColorIcon from '@material-ui/icons/BorderColor';
5
+
6
+ const templateDesignerNavItem = NavItemBlueprint.make({
7
+ params: {
8
+ title: "Template designer",
9
+ routeRef: rootRouteRef,
10
+ icon: BorderColorIcon
11
+ }
12
+ });
13
+ const templateDesignerPage = PageBlueprint.make({
14
+ params: {
15
+ path: "/template-designer",
16
+ routeRef: rootRouteRef,
17
+ loader: () => import('./components/TemplateDesigner/index.esm.js').then((m) => /* @__PURE__ */ jsx(m.TemplateDesigner, {}))
18
+ }
19
+ });
20
+ var alpha = createFrontendPlugin({
21
+ pluginId: "template-designer",
22
+ info: { packageJson: () => import('./package.json.esm.js') },
23
+ routes: {
24
+ root: rootRouteRef
25
+ },
26
+ extensions: [templateDesignerPage, templateDesignerNavItem]
27
+ });
28
+
29
+ export { alpha as default };
30
+ //# sourceMappingURL=alpha.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alpha.esm.js","sources":["../src/alpha.tsx"],"sourcesContent":["import {\n createFrontendPlugin,\n NavItemBlueprint,\n PageBlueprint,\n} from \"@backstage/frontend-plugin-api\";\nimport { rootRouteRef } from \"./routes\";\nimport BorderColorIcon from \"@material-ui/icons/BorderColor\";\n\nconst templateDesignerNavItem = NavItemBlueprint.make({\n params: {\n title: \"Template designer\",\n routeRef: rootRouteRef,\n icon: BorderColorIcon,\n },\n});\n\nconst templateDesignerPage = PageBlueprint.make({\n params: {\n path: \"/template-designer\",\n routeRef: rootRouteRef,\n loader: () =>\n import(\"./components/TemplateDesigner\").then((m) => (\n <m.TemplateDesigner />\n )),\n },\n});\n\n/**\n * Backstage frontend plugin.\n *\n * @alpha\n */\nexport default createFrontendPlugin({\n pluginId: \"template-designer\",\n info: { packageJson: () => import(\"../package.json\") },\n routes: {\n root: rootRouteRef,\n },\n extensions: [templateDesignerPage, templateDesignerNavItem],\n});\n"],"names":[],"mappings":";;;;;AAQA,MAAM,uBAAA,GAA0B,iBAAiB,IAAA,CAAK;AAAA,EACpD,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,mBAAA;AAAA,IACP,QAAA,EAAU,YAAA;AAAA,IACV,IAAA,EAAM;AAAA;AAEV,CAAC,CAAA;AAED,MAAM,oBAAA,GAAuB,cAAc,IAAA,CAAK;AAAA,EAC9C,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,oBAAA;AAAA,IACN,QAAA,EAAU,YAAA;AAAA,IACV,MAAA,EAAQ,MACN,OAAO,4CAA+B,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,qBAC5C,GAAA,CAAC,CAAA,CAAE,gBAAA,EAAF,EAAmB,CACrB;AAAA;AAEP,CAAC,CAAA;AAOD,YAAe,oBAAA,CAAqB;AAAA,EAClC,QAAA,EAAU,mBAAA;AAAA,EACV,MAAM,EAAE,WAAA,EAAa,MAAM,OAAO,uBAAiB,CAAA,EAAE;AAAA,EACrD,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM;AAAA,GACR;AAAA,EACA,UAAA,EAAY,CAAC,oBAAA,EAAsB,uBAAuB;AAC5D,CAAC,CAAA;;;;"}
@@ -77,166 +77,175 @@ const TemplateWorkspace = ({
77
77
  },
78
78
  []
79
79
  );
80
- return /* @__PURE__ */ jsx(Grid, { container: true, spacing: 3, direction: "column", children: /* @__PURE__ */ jsx(Grid, { item: true, style: { height: 800 }, children: /* @__PURE__ */ jsxs(
81
- "div",
80
+ return /* @__PURE__ */ jsx(
81
+ Grid,
82
82
  {
83
- style: {
84
- height: "100%",
85
- display: "flex",
86
- flexDirection: "column",
87
- gap: 16
88
- },
89
- children: [
90
- /* @__PURE__ */ jsxs(
91
- "div",
92
- {
93
- style: {
94
- display: "flex",
95
- justifyContent: "space-between",
96
- alignItems: "center",
97
- flexWrap: "wrap",
98
- gap: 12
99
- },
100
- children: [
101
- /* @__PURE__ */ jsxs(
102
- "div",
103
- {
104
- style: {
105
- display: "flex",
106
- alignItems: "center",
107
- gap: 12,
108
- flexWrap: "wrap"
109
- },
110
- children: [
111
- activeTemplateLabel && /* @__PURE__ */ jsxs(Typography, { variant: "body2", color: "textSecondary", children: [
112
- "Active template: ",
113
- activeTemplateLabel
114
- ] }),
115
- /* @__PURE__ */ jsx(
116
- Button,
117
- {
118
- color: "primary",
119
- variant: "contained",
120
- size: "small",
121
- onClick: onReload,
122
- disabled: isReloading,
123
- children: reloadButtonLabel
124
- }
125
- ),
126
- /* @__PURE__ */ jsx(
127
- Button,
128
- {
129
- color: "primary",
130
- variant: "outlined",
131
- size: "small",
132
- onClick: onSave,
133
- disabled: isSaving,
134
- children: saveButtonLabel
135
- }
136
- ),
137
- /* @__PURE__ */ jsx(
138
- Button,
139
- {
140
- color: "primary",
141
- variant: "outlined",
142
- size: "small",
143
- onClick: onOpenTemplatePicker,
144
- children: "Load different file"
145
- }
146
- )
147
- ]
148
- }
149
- ),
150
- /* @__PURE__ */ jsx(Button, { variant: "outlined", size: "small", onClick: onToggleYaml, children: showYaml ? "Hide YAML" : "Show YAML" })
151
- ]
152
- }
153
- ),
154
- loadError && /* @__PURE__ */ jsx(
155
- Typography,
156
- {
157
- variant: "body2",
158
- style: { color: theme.palette.error.main },
159
- children: loadError
160
- }
161
- ),
162
- /* @__PURE__ */ jsxs(
163
- "div",
164
- {
165
- style: {
166
- flex: 1,
167
- display: "flex",
168
- gap: 16,
169
- minHeight: 0
170
- },
171
- children: [
172
- /* @__PURE__ */ jsx("div", { style: { flex: showYaml ? 1.6 : 1, minWidth: 0 }, children: /* @__PURE__ */ jsx("div", { style: { height: "100%" }, children: /* @__PURE__ */ jsx(
173
- App,
174
- {
175
- steps: templateSteps,
176
- parameters: templateParameters,
177
- output: templateOutput,
178
- onStepsChange,
179
- onParametersChange,
180
- onOutputChange
181
- }
182
- ) }) }),
183
- showYaml && /* @__PURE__ */ jsxs(
184
- Paper,
185
- {
186
- elevation: 2,
187
- style: {
188
- flex: 1,
189
- display: "flex",
190
- flexDirection: "column",
191
- minWidth: 0,
192
- overflow: "hidden"
193
- },
194
- children: [
195
- /* @__PURE__ */ jsx(
196
- "div",
197
- {
198
- style: {
199
- padding: "12px 16px",
200
- borderBottom: "1px solid rgba(0,0,0,0.12)",
201
- fontWeight: 600,
202
- fontSize: "0.875rem"
203
- },
204
- children: "YAML Preview"
205
- }
206
- ),
207
- yamlError && /* @__PURE__ */ jsx(
208
- "div",
209
- {
210
- style: {
211
- padding: "8px 16px",
212
- borderBottom: "1px solid rgba(0,0,0,0.08)",
213
- color: theme.palette.error.main,
214
- fontSize: "0.75rem",
215
- background: paletteMode === "dark" ? "rgba(255, 82, 82, 0.1)" : "rgba(244, 67, 54, 0.08)"
216
- },
217
- children: yamlError
218
- }
219
- ),
220
- /* @__PURE__ */ jsx("div", { style: { flex: 1, minHeight: 0, overflow: "auto" }, children: /* @__PURE__ */ jsx(
221
- CodeMirror,
222
- {
223
- value: templateYaml,
224
- extensions: yamlExtensions,
225
- theme: codeMirrorTheme,
226
- height: "100%",
227
- onChange: handleYamlChange,
228
- onBlur: handleYamlBlur
229
- }
230
- ) })
231
- ]
232
- }
233
- )
234
- ]
235
- }
236
- )
237
- ]
83
+ container: true,
84
+ spacing: 3,
85
+ direction: "column",
86
+ style: { height: "calc(100% - 15px)" },
87
+ children: /* @__PURE__ */ jsx(Grid, { item: true, style: { height: "100%" }, children: /* @__PURE__ */ jsxs(
88
+ "div",
89
+ {
90
+ style: {
91
+ height: "100%",
92
+ display: "flex",
93
+ flexDirection: "column",
94
+ gap: 16
95
+ },
96
+ children: [
97
+ /* @__PURE__ */ jsxs(
98
+ "div",
99
+ {
100
+ style: {
101
+ display: "flex",
102
+ justifyContent: "space-between",
103
+ alignItems: "center",
104
+ flexWrap: "wrap",
105
+ gap: 12
106
+ },
107
+ children: [
108
+ /* @__PURE__ */ jsxs(
109
+ "div",
110
+ {
111
+ style: {
112
+ display: "flex",
113
+ alignItems: "center",
114
+ gap: 12,
115
+ flexWrap: "wrap"
116
+ },
117
+ children: [
118
+ activeTemplateLabel && /* @__PURE__ */ jsxs(Typography, { variant: "body2", color: "textSecondary", children: [
119
+ "Active template: ",
120
+ activeTemplateLabel
121
+ ] }),
122
+ /* @__PURE__ */ jsx(
123
+ Button,
124
+ {
125
+ color: "primary",
126
+ variant: "contained",
127
+ size: "small",
128
+ onClick: onReload,
129
+ disabled: isReloading,
130
+ children: reloadButtonLabel
131
+ }
132
+ ),
133
+ /* @__PURE__ */ jsx(
134
+ Button,
135
+ {
136
+ color: "primary",
137
+ variant: "outlined",
138
+ size: "small",
139
+ onClick: onSave,
140
+ disabled: isSaving,
141
+ children: saveButtonLabel
142
+ }
143
+ ),
144
+ /* @__PURE__ */ jsx(
145
+ Button,
146
+ {
147
+ color: "primary",
148
+ variant: "outlined",
149
+ size: "small",
150
+ onClick: onOpenTemplatePicker,
151
+ children: "Load different file"
152
+ }
153
+ )
154
+ ]
155
+ }
156
+ ),
157
+ /* @__PURE__ */ jsx(Button, { variant: "outlined", size: "small", onClick: onToggleYaml, children: showYaml ? "Hide YAML" : "Show YAML" })
158
+ ]
159
+ }
160
+ ),
161
+ loadError && /* @__PURE__ */ jsx(
162
+ Typography,
163
+ {
164
+ variant: "body2",
165
+ style: { color: theme.palette.error.main },
166
+ children: loadError
167
+ }
168
+ ),
169
+ /* @__PURE__ */ jsxs(
170
+ "div",
171
+ {
172
+ style: {
173
+ flex: 1,
174
+ display: "flex",
175
+ gap: 16,
176
+ minHeight: 0
177
+ },
178
+ children: [
179
+ /* @__PURE__ */ jsx("div", { style: { flex: showYaml ? 1.6 : 1, minWidth: 0 }, children: /* @__PURE__ */ jsx("div", { style: { height: "100%" }, children: /* @__PURE__ */ jsx(
180
+ App,
181
+ {
182
+ steps: templateSteps,
183
+ parameters: templateParameters,
184
+ output: templateOutput,
185
+ onStepsChange,
186
+ onParametersChange,
187
+ onOutputChange
188
+ }
189
+ ) }) }),
190
+ showYaml && /* @__PURE__ */ jsxs(
191
+ Paper,
192
+ {
193
+ elevation: 2,
194
+ style: {
195
+ flex: 1,
196
+ display: "flex",
197
+ flexDirection: "column",
198
+ minWidth: 0,
199
+ overflow: "hidden"
200
+ },
201
+ children: [
202
+ /* @__PURE__ */ jsx(
203
+ "div",
204
+ {
205
+ style: {
206
+ padding: "12px 16px",
207
+ borderBottom: "1px solid rgba(0,0,0,0.12)",
208
+ fontWeight: 600,
209
+ fontSize: "0.875rem"
210
+ },
211
+ children: "YAML Preview"
212
+ }
213
+ ),
214
+ yamlError && /* @__PURE__ */ jsx(
215
+ "div",
216
+ {
217
+ style: {
218
+ padding: "8px 16px",
219
+ borderBottom: "1px solid rgba(0,0,0,0.08)",
220
+ color: theme.palette.error.main,
221
+ fontSize: "0.75rem",
222
+ background: paletteMode === "dark" ? "rgba(255, 82, 82, 0.1)" : "rgba(244, 67, 54, 0.08)"
223
+ },
224
+ children: yamlError
225
+ }
226
+ ),
227
+ /* @__PURE__ */ jsx("div", { style: { flex: 1, minHeight: 0, overflow: "auto" }, children: /* @__PURE__ */ jsx(
228
+ CodeMirror,
229
+ {
230
+ value: templateYaml,
231
+ extensions: yamlExtensions,
232
+ theme: codeMirrorTheme,
233
+ height: "100%",
234
+ onChange: handleYamlChange,
235
+ onBlur: handleYamlBlur
236
+ }
237
+ ) })
238
+ ]
239
+ }
240
+ )
241
+ ]
242
+ }
243
+ )
244
+ ]
245
+ }
246
+ ) })
238
247
  }
239
- ) }) });
248
+ );
240
249
  };
241
250
 
242
251
  export { TemplateWorkspace };
@@ -1 +1 @@
1
- {"version":3,"file":"TemplateWorkspace.esm.js","sources":["../../../../src/components/TemplateDesigner/components/TemplateWorkspace.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef } from \"react\";\nimport { Button, Grid, Paper, Typography } from \"@material-ui/core\";\nimport { useTheme } from \"@material-ui/core/styles\";\nimport CodeMirror from \"@uiw/react-codemirror\";\nimport { yaml } from \"@codemirror/lang-yaml\";\nimport type {\n ScaffolderTaskOutput,\n TaskStep,\n} from \"@backstage/plugin-scaffolder-common\";\nimport type { TemplateParametersValue } from \"../../Nodes/types\";\nimport App from \"../../DesignerFlow/DesignerFlow\";\n\ntype TemplateWorkspaceProps = {\n templateSteps: TaskStep[];\n templateParameters: TemplateParametersValue;\n templateOutput?: ScaffolderTaskOutput;\n templateYaml: string;\n yamlError?: string;\n loadError?: string;\n showYaml: boolean;\n onToggleYaml: () => void;\n onYamlChange: (value: string) => void;\n onStepsChange: (steps: TaskStep[]) => void;\n onParametersChange: (parameters: TemplateParametersValue) => void;\n onOutputChange: (output?: ScaffolderTaskOutput) => void;\n onReload: () => void;\n onSave: () => void;\n onOpenTemplatePicker: () => void;\n activeTemplateLabel?: string;\n reloadButtonLabel: string;\n saveButtonLabel: string;\n isReloading: boolean;\n isSaving: boolean;\n};\n\nexport const TemplateWorkspace = ({\n templateSteps,\n templateParameters,\n templateOutput,\n templateYaml,\n yamlError,\n loadError,\n showYaml,\n onToggleYaml,\n onYamlChange,\n onStepsChange,\n onParametersChange,\n onOutputChange,\n onReload,\n onSave,\n onOpenTemplatePicker,\n activeTemplateLabel,\n reloadButtonLabel,\n saveButtonLabel,\n isReloading,\n isSaving,\n}: TemplateWorkspaceProps) => {\n const theme = useTheme();\n const paletteMode =\n (theme.palette as { mode?: \"light\" | \"dark\" }).mode ??\n theme.palette.type ??\n \"light\";\n const yamlDraftRef = useRef(templateYaml);\n const templateYamlRef = useRef(templateYaml);\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const yamlExtensions = useMemo(() => [yaml()], []);\n const codeMirrorTheme = useMemo(\n () => (paletteMode === \"dark\" ? \"dark\" : \"light\"),\n [paletteMode]\n );\n\n // implementation releated to yaml rendering -> onBlue and onDebounce\n const flushYamlDraft = useCallback(() => {\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n debounceRef.current = null;\n }\n if (yamlDraftRef.current !== templateYamlRef.current) {\n onYamlChange(yamlDraftRef.current);\n }\n }, [onYamlChange]);\n const handleYamlChange = useCallback(\n (value: string) => {\n yamlDraftRef.current = value;\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n debounceRef.current = setTimeout(() => {\n if (yamlDraftRef.current !== templateYamlRef.current) {\n onYamlChange(yamlDraftRef.current);\n }\n debounceRef.current = null;\n }, 600);\n },\n [onYamlChange]\n );\n const handleYamlBlur = useCallback(() => {\n flushYamlDraft();\n }, [flushYamlDraft]);\n\n useEffect(() => {\n yamlDraftRef.current = templateYaml;\n templateYamlRef.current = templateYaml;\n }, [templateYaml]);\n useEffect(\n () => () => {\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n },\n []\n );\n\n return (\n <Grid container spacing={3} direction=\"column\">\n <Grid item style={{ height: 800 }}>\n <div\n style={{\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: 16,\n }}\n >\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n flexWrap: \"wrap\",\n gap: 12,\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 12,\n flexWrap: \"wrap\",\n }}\n >\n {activeTemplateLabel && (\n <Typography variant=\"body2\" color=\"textSecondary\">\n Active template: {activeTemplateLabel}\n </Typography>\n )}\n <Button\n color=\"primary\"\n variant=\"contained\"\n size=\"small\"\n onClick={onReload}\n disabled={isReloading}\n >\n {reloadButtonLabel}\n </Button>\n <Button\n color=\"primary\"\n variant=\"outlined\"\n size=\"small\"\n onClick={onSave}\n disabled={isSaving}\n >\n {saveButtonLabel}\n </Button>\n <Button\n color=\"primary\"\n variant=\"outlined\"\n size=\"small\"\n onClick={onOpenTemplatePicker}\n >\n Load different file\n </Button>\n </div>\n <Button variant=\"outlined\" size=\"small\" onClick={onToggleYaml}>\n {showYaml ? \"Hide YAML\" : \"Show YAML\"}\n </Button>\n </div>\n {loadError && (\n <Typography\n variant=\"body2\"\n style={{ color: theme.palette.error.main }}\n >\n {loadError}\n </Typography>\n )}\n <div\n style={{\n flex: 1,\n display: \"flex\",\n gap: 16,\n minHeight: 0,\n }}\n >\n <div style={{ flex: showYaml ? 1.6 : 1, minWidth: 0 }}>\n <div style={{ height: \"100%\" }}>\n <App\n steps={templateSteps}\n parameters={templateParameters}\n output={templateOutput}\n onStepsChange={onStepsChange}\n onParametersChange={onParametersChange}\n onOutputChange={onOutputChange}\n />\n </div>\n </div>\n {showYaml && (\n <Paper\n elevation={2}\n style={{\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n minWidth: 0,\n overflow: \"hidden\",\n }}\n >\n <div\n style={{\n padding: \"12px 16px\",\n borderBottom: \"1px solid rgba(0,0,0,0.12)\",\n fontWeight: 600,\n fontSize: \"0.875rem\",\n }}\n >\n YAML Preview\n </div>\n {yamlError && (\n <div\n style={{\n padding: \"8px 16px\",\n borderBottom: \"1px solid rgba(0,0,0,0.08)\",\n color: theme.palette.error.main,\n fontSize: \"0.75rem\",\n background:\n paletteMode === \"dark\"\n ? \"rgba(255, 82, 82, 0.1)\"\n : \"rgba(244, 67, 54, 0.08)\",\n }}\n >\n {yamlError}\n </div>\n )}\n <div style={{ flex: 1, minHeight: 0, overflow: \"auto\" }}>\n <CodeMirror\n value={templateYaml}\n extensions={yamlExtensions}\n theme={codeMirrorTheme}\n height=\"100%\"\n onChange={handleYamlChange}\n onBlur={handleYamlBlur}\n />\n </div>\n </Paper>\n )}\n </div>\n </div>\n </Grid>\n </Grid>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TemplateWorkspace.esm.js","sources":["../../../../src/components/TemplateDesigner/components/TemplateWorkspace.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef } from \"react\";\nimport { Button, Grid, Paper, Typography } from \"@material-ui/core\";\nimport { useTheme } from \"@material-ui/core/styles\";\nimport CodeMirror from \"@uiw/react-codemirror\";\nimport { yaml } from \"@codemirror/lang-yaml\";\nimport type {\n ScaffolderTaskOutput,\n TaskStep,\n} from \"@backstage/plugin-scaffolder-common\";\nimport type { TemplateParametersValue } from \"../../Nodes/types\";\nimport App from \"../../DesignerFlow/DesignerFlow\";\n\ntype TemplateWorkspaceProps = {\n templateSteps: TaskStep[];\n templateParameters: TemplateParametersValue;\n templateOutput?: ScaffolderTaskOutput;\n templateYaml: string;\n yamlError?: string;\n loadError?: string;\n showYaml: boolean;\n onToggleYaml: () => void;\n onYamlChange: (value: string) => void;\n onStepsChange: (steps: TaskStep[]) => void;\n onParametersChange: (parameters: TemplateParametersValue) => void;\n onOutputChange: (output?: ScaffolderTaskOutput) => void;\n onReload: () => void;\n onSave: () => void;\n onOpenTemplatePicker: () => void;\n activeTemplateLabel?: string;\n reloadButtonLabel: string;\n saveButtonLabel: string;\n isReloading: boolean;\n isSaving: boolean;\n};\n\nexport const TemplateWorkspace = ({\n templateSteps,\n templateParameters,\n templateOutput,\n templateYaml,\n yamlError,\n loadError,\n showYaml,\n onToggleYaml,\n onYamlChange,\n onStepsChange,\n onParametersChange,\n onOutputChange,\n onReload,\n onSave,\n onOpenTemplatePicker,\n activeTemplateLabel,\n reloadButtonLabel,\n saveButtonLabel,\n isReloading,\n isSaving,\n}: TemplateWorkspaceProps) => {\n const theme = useTheme();\n const paletteMode =\n (theme.palette as { mode?: \"light\" | \"dark\" }).mode ??\n theme.palette.type ??\n \"light\";\n const yamlDraftRef = useRef(templateYaml);\n const templateYamlRef = useRef(templateYaml);\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const yamlExtensions = useMemo(() => [yaml()], []);\n const codeMirrorTheme = useMemo(\n () => (paletteMode === \"dark\" ? \"dark\" : \"light\"),\n [paletteMode]\n );\n\n // implementation releated to yaml rendering -> onBlue and onDebounce\n const flushYamlDraft = useCallback(() => {\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n debounceRef.current = null;\n }\n if (yamlDraftRef.current !== templateYamlRef.current) {\n onYamlChange(yamlDraftRef.current);\n }\n }, [onYamlChange]);\n const handleYamlChange = useCallback(\n (value: string) => {\n yamlDraftRef.current = value;\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n debounceRef.current = setTimeout(() => {\n if (yamlDraftRef.current !== templateYamlRef.current) {\n onYamlChange(yamlDraftRef.current);\n }\n debounceRef.current = null;\n }, 600);\n },\n [onYamlChange]\n );\n const handleYamlBlur = useCallback(() => {\n flushYamlDraft();\n }, [flushYamlDraft]);\n\n useEffect(() => {\n yamlDraftRef.current = templateYaml;\n templateYamlRef.current = templateYaml;\n }, [templateYaml]);\n useEffect(\n () => () => {\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n },\n []\n );\n\n return (\n <Grid\n container\n spacing={3}\n direction=\"column\"\n style={{ height: \"calc(100% - 15px)\" }}\n >\n <Grid item style={{ height: \"100%\" }}>\n <div\n style={{\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: 16,\n }}\n >\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n flexWrap: \"wrap\",\n gap: 12,\n }}\n >\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 12,\n flexWrap: \"wrap\",\n }}\n >\n {activeTemplateLabel && (\n <Typography variant=\"body2\" color=\"textSecondary\">\n Active template: {activeTemplateLabel}\n </Typography>\n )}\n <Button\n color=\"primary\"\n variant=\"contained\"\n size=\"small\"\n onClick={onReload}\n disabled={isReloading}\n >\n {reloadButtonLabel}\n </Button>\n <Button\n color=\"primary\"\n variant=\"outlined\"\n size=\"small\"\n onClick={onSave}\n disabled={isSaving}\n >\n {saveButtonLabel}\n </Button>\n <Button\n color=\"primary\"\n variant=\"outlined\"\n size=\"small\"\n onClick={onOpenTemplatePicker}\n >\n Load different file\n </Button>\n </div>\n <Button variant=\"outlined\" size=\"small\" onClick={onToggleYaml}>\n {showYaml ? \"Hide YAML\" : \"Show YAML\"}\n </Button>\n </div>\n {loadError && (\n <Typography\n variant=\"body2\"\n style={{ color: theme.palette.error.main }}\n >\n {loadError}\n </Typography>\n )}\n <div\n style={{\n flex: 1,\n display: \"flex\",\n gap: 16,\n minHeight: 0,\n }}\n >\n <div style={{ flex: showYaml ? 1.6 : 1, minWidth: 0 }}>\n <div style={{ height: \"100%\" }}>\n <App\n steps={templateSteps}\n parameters={templateParameters}\n output={templateOutput}\n onStepsChange={onStepsChange}\n onParametersChange={onParametersChange}\n onOutputChange={onOutputChange}\n />\n </div>\n </div>\n {showYaml && (\n <Paper\n elevation={2}\n style={{\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n minWidth: 0,\n overflow: \"hidden\",\n }}\n >\n <div\n style={{\n padding: \"12px 16px\",\n borderBottom: \"1px solid rgba(0,0,0,0.12)\",\n fontWeight: 600,\n fontSize: \"0.875rem\",\n }}\n >\n YAML Preview\n </div>\n {yamlError && (\n <div\n style={{\n padding: \"8px 16px\",\n borderBottom: \"1px solid rgba(0,0,0,0.08)\",\n color: theme.palette.error.main,\n fontSize: \"0.75rem\",\n background:\n paletteMode === \"dark\"\n ? \"rgba(255, 82, 82, 0.1)\"\n : \"rgba(244, 67, 54, 0.08)\",\n }}\n >\n {yamlError}\n </div>\n )}\n <div style={{ flex: 1, minHeight: 0, overflow: \"auto\" }}>\n <CodeMirror\n value={templateYaml}\n extensions={yamlExtensions}\n theme={codeMirrorTheme}\n height=\"100%\"\n onChange={handleYamlChange}\n onBlur={handleYamlBlur}\n />\n </div>\n </Paper>\n )}\n </div>\n </div>\n </Grid>\n </Grid>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,160 @@
1
+ var name = "@tduniec/plugin-template-designer";
2
+ var description = "Template Designer turns blank Backstage YAML into a storyboard-like canvas, guiding anyone through drag-and-drop scaffolder authoring before ever touching code. Rally non-experts, broadcast best practices, and accelerate template launches directly inside Backstage.";
3
+ var version = "0.2.4";
4
+ var license = "Apache-2.0";
5
+ var keywords = [
6
+ "backstage",
7
+ "scaffolder",
8
+ "template-designer",
9
+ "no-code",
10
+ "yaml",
11
+ "canvas"
12
+ ];
13
+ var repository = {
14
+ type: "git",
15
+ url: "git+https://github.com/tduniec/template-designer-plugin.git",
16
+ directory: "."
17
+ };
18
+ var exports = {
19
+ ".": "./src/index.ts",
20
+ "./alpha": "./src/alpha.tsx",
21
+ "./package.json": "./package.json"
22
+ };
23
+ var main = "dist/index.esm.js";
24
+ var types = "dist/index.d.ts";
25
+ var publishConfig = {
26
+ access: "public",
27
+ main: "dist/index.esm.js",
28
+ types: "dist/index.d.ts"
29
+ };
30
+ var backstage = {
31
+ role: "frontend-plugin",
32
+ pluginId: "template-designer",
33
+ pluginPackages: [
34
+ "@tduniec/plugin-template-designer"
35
+ ],
36
+ features: {
37
+ "./alpha": "@backstage/FrontendPlugin"
38
+ }
39
+ };
40
+ var sideEffects = false;
41
+ var scripts = {
42
+ start: "backstage-cli package start",
43
+ build: "backstage-cli package build",
44
+ lint: "backstage-cli package lint",
45
+ test: "backstage-cli package test",
46
+ clean: "backstage-cli package clean",
47
+ tsc: "tsc",
48
+ "tsc:full": "tsc --skipLibCheck false --incremental false",
49
+ "lint:all": "backstage-cli repo lint",
50
+ "prettier:check": "prettier --check .",
51
+ prepack: "backstage-cli package prepack",
52
+ postpack: "backstage-cli package postpack",
53
+ validate: "tsc && backstage-cli package lint && prettier --check .",
54
+ "validate:fix": "tsc && backstage-cli package lint --fix && prettier -w .",
55
+ "validate:full": "tsc --skipLibCheck false --incremental false && backstage-cli repo lint && prettier --check .",
56
+ prepare: "husky"
57
+ };
58
+ var dependencies = {
59
+ "@backstage/core-compat-api": "backstage:^",
60
+ "@backstage/core-components": "backstage:^",
61
+ "@backstage/core-plugin-api": "backstage:^",
62
+ "@backstage/frontend-plugin-api": "backstage:^",
63
+ "@backstage/plugin-scaffolder-common": "backstage:^",
64
+ "@backstage/plugin-scaffolder-react": "backstage:^",
65
+ "@backstage/theme": "backstage:^",
66
+ "@codemirror/lang-yaml": "^6.1.2",
67
+ "@material-ui/core": "^4.12.4",
68
+ "@material-ui/icons": "^4.11.3",
69
+ "@material-ui/lab": "^4.0.0-alpha.61",
70
+ "@xyflow/react": "^12.8.6",
71
+ yaml: "^2.8.1"
72
+ };
73
+ var peerDependencies = {
74
+ "@codemirror/lang-yaml": "^6.0.0",
75
+ "@codemirror/state": "^6.0.0",
76
+ "@codemirror/view": "^6.0.0",
77
+ "@uiw/react-codemirror": "^4.25.2",
78
+ react: "^18.0.0",
79
+ "react-router-dom": "^6.23.0",
80
+ "react-use": "^17.2.4"
81
+ };
82
+ var devDependencies = {
83
+ "@backstage/cli": "backstage:^",
84
+ "@backstage/core-app-api": "backstage:^",
85
+ "@backstage/dev-utils": "backstage:^",
86
+ "@backstage/test-utils": "backstage:^",
87
+ "@codemirror/lang-yaml": "6.1.2",
88
+ "@codemirror/state": "6.5.2",
89
+ "@codemirror/view": "6.26.3",
90
+ "@commitlint/cli": "^20.1.0",
91
+ "@commitlint/config-conventional": "^20.0.0",
92
+ "@semantic-release/changelog": "^6.0.3",
93
+ "@semantic-release/commit-analyzer": "^13.0.1",
94
+ "@semantic-release/git": "^10.0.1",
95
+ "@semantic-release/github": "^12.0.1",
96
+ "@semantic-release/npm": "^13.1.1",
97
+ "@semantic-release/release-notes-generator": "^14.1.0",
98
+ "@testing-library/dom": "^10.0.0",
99
+ "@testing-library/jest-dom": "^6.0.0",
100
+ "@testing-library/react": "^16.0.0",
101
+ "@testing-library/user-event": "^14.0.0",
102
+ "@types/react": "^18",
103
+ "@types/react-dom": "^18",
104
+ "@uiw/react-codemirror": "4.25.2",
105
+ husky: "^9.1.7",
106
+ "lint-staged": "^16.2.6",
107
+ msw: "^1.0.0",
108
+ prettier: "^2.3.2",
109
+ react: "^18.3.1",
110
+ "react-dom": "^18.3.1",
111
+ "react-router-dom": "^6.23.0",
112
+ "react-use": "^17.2.4",
113
+ "semantic-release": "^25.0.1",
114
+ typescript: "~5.8.0",
115
+ webpack: "~5.96.0"
116
+ };
117
+ var files = [
118
+ "dist"
119
+ ];
120
+ var packageManager = "yarn@4.10.3";
121
+ var typesVersions = {
122
+ "*": {
123
+ alpha: [
124
+ "dist/alpha.d.ts"
125
+ ],
126
+ "package.json": [
127
+ "package.json"
128
+ ]
129
+ }
130
+ };
131
+ var module = "./dist/index.esm.js";
132
+ var _package = {
133
+ name: name,
134
+ description: description,
135
+ version: version,
136
+ license: license,
137
+ keywords: keywords,
138
+ repository: repository,
139
+ exports: exports,
140
+ main: main,
141
+ types: types,
142
+ publishConfig: publishConfig,
143
+ backstage: backstage,
144
+ sideEffects: sideEffects,
145
+ scripts: scripts,
146
+ "lint-staged": {
147
+ "*.{js,ts,jsx,tsx}": "backstage-cli package lint",
148
+ "*.{json,md}": "prettier --write"
149
+ },
150
+ dependencies: dependencies,
151
+ peerDependencies: peerDependencies,
152
+ devDependencies: devDependencies,
153
+ files: files,
154
+ packageManager: packageManager,
155
+ typesVersions: typesVersions,
156
+ module: module
157
+ };
158
+
159
+ export { backstage, _package as default, dependencies, description, devDependencies, exports, files, keywords, license, main, module, name, packageManager, peerDependencies, publishConfig, repository, scripts, sideEffects, types, typesVersions, version };
160
+ //# sourceMappingURL=package.json.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package.json.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tduniec/plugin-template-designer",
3
3
  "description": "Template Designer turns blank Backstage YAML into a storyboard-like canvas, guiding anyone through drag-and-drop scaffolder authoring before ever touching code. Rally non-experts, broadcast best practices, and accelerate template launches directly inside Backstage.",
4
- "version": "0.2.3",
4
+ "version": "0.2.4",
5
5
  "license": "Apache-2.0",
6
6
  "keywords": [
7
7
  "backstage",
@@ -16,6 +16,20 @@
16
16
  "url": "git+https://github.com/tduniec/template-designer-plugin.git",
17
17
  "directory": "."
18
18
  },
19
+ "exports": {
20
+ ".": {
21
+ "import": "./dist/index.esm.js",
22
+ "types": "./dist/index.d.ts",
23
+ "default": "./dist/index.esm.js"
24
+ },
25
+ "./alpha": {
26
+ "backstage": "@backstage/FrontendPlugin",
27
+ "import": "./dist/alpha.esm.js",
28
+ "types": "./dist/alpha.d.ts",
29
+ "default": "./dist/alpha.esm.js"
30
+ },
31
+ "./package.json": "./package.json"
32
+ },
19
33
  "main": "dist/index.esm.js",
20
34
  "types": "dist/index.d.ts",
21
35
  "publishConfig": {
@@ -28,7 +42,10 @@
28
42
  "pluginId": "template-designer",
29
43
  "pluginPackages": [
30
44
  "@tduniec/plugin-template-designer"
31
- ]
45
+ ],
46
+ "features": {
47
+ "./alpha": "@backstage/FrontendPlugin"
48
+ }
32
49
  },
33
50
  "sideEffects": false,
34
51
  "scripts": {
@@ -53,11 +70,13 @@
53
70
  "*.{json,md}": "prettier --write"
54
71
  },
55
72
  "dependencies": {
56
- "@backstage/core-components": "^0.18.2",
57
- "@backstage/core-plugin-api": "^1.11.1",
58
- "@backstage/plugin-scaffolder-common": "^1.7.2",
59
- "@backstage/plugin-scaffolder-react": "^1.19.2",
60
- "@backstage/theme": "^0.7.0",
73
+ "@backstage/core-compat-api": "backstage:^",
74
+ "@backstage/core-components": "backstage:^",
75
+ "@backstage/core-plugin-api": "backstage:^",
76
+ "@backstage/frontend-plugin-api": "backstage:^",
77
+ "@backstage/plugin-scaffolder-common": "backstage:^",
78
+ "@backstage/plugin-scaffolder-react": "backstage:^",
79
+ "@backstage/theme": "backstage:^",
61
80
  "@codemirror/lang-yaml": "^6.1.2",
62
81
  "@material-ui/core": "^4.12.4",
63
82
  "@material-ui/icons": "^4.11.3",
@@ -75,10 +94,10 @@
75
94
  "react-use": "^17.2.4"
76
95
  },
77
96
  "devDependencies": {
78
- "@backstage/cli": "^0.34.4",
79
- "@backstage/core-app-api": "^1.19.1",
80
- "@backstage/dev-utils": "^1.1.15",
81
- "@backstage/test-utils": "^1.7.12",
97
+ "@backstage/cli": "backstage:^",
98
+ "@backstage/core-app-api": "backstage:^",
99
+ "@backstage/dev-utils": "backstage:^",
100
+ "@backstage/test-utils": "backstage:^",
82
101
  "@codemirror/lang-yaml": "6.1.2",
83
102
  "@codemirror/state": "6.5.2",
84
103
  "@codemirror/view": "6.26.3",
@@ -115,6 +134,9 @@
115
134
  "packageManager": "yarn@4.10.3",
116
135
  "typesVersions": {
117
136
  "*": {
137
+ "alpha": [
138
+ "dist/alpha.d.ts"
139
+ ],
118
140
  "package.json": [
119
141
  "package.json"
120
142
  ]