@tduniec/plugin-template-designer-foundation 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +13 -0
  3. package/dist/api/useScaffolderActions.esm.js +59 -0
  4. package/dist/api/useScaffolderActions.esm.js.map +1 -0
  5. package/dist/components/FieldEditorDialog.esm.js +55 -0
  6. package/dist/components/FieldEditorDialog.esm.js.map +1 -0
  7. package/dist/components/Nodes/ActionNode.esm.js +613 -0
  8. package/dist/components/Nodes/ActionNode.esm.js.map +1 -0
  9. package/dist/components/Nodes/OutputNode.esm.js +373 -0
  10. package/dist/components/Nodes/OutputNode.esm.js.map +1 -0
  11. package/dist/components/Nodes/ParameterInputNode.esm.js +320 -0
  12. package/dist/components/Nodes/ParameterInputNode.esm.js.map +1 -0
  13. package/dist/components/Nodes/ParameterTitlesNode.esm.js +251 -0
  14. package/dist/components/Nodes/ParameterTitlesNode.esm.js.map +1 -0
  15. package/dist/components/Nodes/ParametersNode.esm.js +147 -0
  16. package/dist/components/Nodes/ParametersNode.esm.js.map +1 -0
  17. package/dist/components/Nodes/action/schema.esm.js +68 -0
  18. package/dist/components/Nodes/action/schema.esm.js.map +1 -0
  19. package/dist/components/Nodes/action/useActionInputs.esm.js +71 -0
  20. package/dist/components/Nodes/action/useActionInputs.esm.js.map +1 -0
  21. package/dist/components/Nodes/common/AutoWidthPopper.esm.js +11 -0
  22. package/dist/components/Nodes/common/AutoWidthPopper.esm.js.map +1 -0
  23. package/dist/components/Nodes/common/nodeInteraction.esm.js +20 -0
  24. package/dist/components/Nodes/common/nodeInteraction.esm.js.map +1 -0
  25. package/dist/components/Nodes/output/useOutputController.esm.js +125 -0
  26. package/dist/components/Nodes/output/useOutputController.esm.js.map +1 -0
  27. package/dist/components/TemplateDesigner/TemplateLanding.esm.js +157 -0
  28. package/dist/components/TemplateDesigner/TemplateLanding.esm.js.map +1 -0
  29. package/dist/components/TemplateDesigner/TemplateWorkspace.esm.js +416 -0
  30. package/dist/components/TemplateDesigner/TemplateWorkspace.esm.js.map +1 -0
  31. package/dist/components/TemplateDesigner/codemirrorTheme.esm.js +30 -0
  32. package/dist/components/TemplateDesigner/codemirrorTheme.esm.js.map +1 -0
  33. package/dist/components/TemplateDesigner/useFieldEditor.esm.js +95 -0
  34. package/dist/components/TemplateDesigner/useFieldEditor.esm.js.map +1 -0
  35. package/dist/components/TemplateDesignerIcon.esm.js +33 -0
  36. package/dist/components/TemplateDesignerIcon.esm.js.map +1 -0
  37. package/dist/components/designerFlowConfig.esm.js +13 -0
  38. package/dist/components/designerFlowConfig.esm.js.map +1 -0
  39. package/dist/designerFlow/DesignerFlow.esm.js +828 -0
  40. package/dist/designerFlow/DesignerFlow.esm.js.map +1 -0
  41. package/dist/designerFlow/handlers.esm.js +317 -0
  42. package/dist/designerFlow/handlers.esm.js.map +1 -0
  43. package/dist/designerFlow/model.esm.js +166 -0
  44. package/dist/designerFlow/model.esm.js.map +1 -0
  45. package/dist/designerFlow/nodeLayout.esm.js +108 -0
  46. package/dist/designerFlow/nodeLayout.esm.js.map +1 -0
  47. package/dist/designerFlow/parameterTransforms.esm.js +124 -0
  48. package/dist/designerFlow/parameterTransforms.esm.js.map +1 -0
  49. package/dist/designerFlow/utils/stableComparators.esm.js +69 -0
  50. package/dist/designerFlow/utils/stableComparators.esm.js.map +1 -0
  51. package/dist/foundation/actionNodeCustomization.esm.js +20 -0
  52. package/dist/foundation/actionNodeCustomization.esm.js.map +1 -0
  53. package/dist/foundation/actionNodeRegistry.esm.js +30 -0
  54. package/dist/foundation/actionNodeRegistry.esm.js.map +1 -0
  55. package/dist/foundation/featureFlags.esm.js +6 -0
  56. package/dist/foundation/featureFlags.esm.js.map +1 -0
  57. package/dist/foundation/templateSources.esm.js +16 -0
  58. package/dist/foundation/templateSources.esm.js.map +1 -0
  59. package/dist/index.d.ts +382 -0
  60. package/dist/index.esm.js +25 -0
  61. package/dist/index.esm.js.map +1 -0
  62. package/dist/state/templateUtils.esm.js +46 -0
  63. package/dist/state/templateUtils.esm.js.map +1 -0
  64. package/dist/state/useParameterSections.esm.js +162 -0
  65. package/dist/state/useParameterSections.esm.js.map +1 -0
  66. package/dist/state/useTemplateState.esm.js +627 -0
  67. package/dist/state/useTemplateState.esm.js.map +1 -0
  68. package/dist/types/flowNodes.esm.js +8 -0
  69. package/dist/types/flowNodes.esm.js.map +1 -0
  70. package/dist/utils/createSequentialEdges.esm.js +15 -0
  71. package/dist/utils/createSequentialEdges.esm.js.map +1 -0
  72. package/dist/utils/mocks/mocks.esm.js +120 -0
  73. package/dist/utils/mocks/mocks.esm.js.map +1 -0
  74. package/dist/utils/sampleTemplate.esm.js +40 -0
  75. package/dist/utils/sampleTemplate.esm.js.map +1 -0
  76. package/dist/utils/yamlJsonConversion.esm.js +47 -0
  77. package/dist/utils/yamlJsonConversion.esm.js.map +1 -0
  78. package/package.json +103 -0
@@ -0,0 +1,320 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useMemo, useCallback } from 'react';
3
+ import { styled, alpha, useTheme } from '@material-ui/core/styles';
4
+ import { Box, Typography, Tooltip, IconButton, TextField, FormControlLabel, Switch } from '@material-ui/core';
5
+ import TuneIcon from '@material-ui/icons/Tune';
6
+ import AddIcon from '@material-ui/icons/Add';
7
+ import ArrowUpwardIcon from '@material-ui/icons/ArrowUpward';
8
+ import ArrowDownwardIcon from '@material-ui/icons/ArrowDownward';
9
+
10
+ const resolvePaletteMode = (theme) => theme.palette.mode ?? theme.palette.type ?? "light";
11
+ const Card = styled(Box)(({ theme }) => {
12
+ const paletteMode = resolvePaletteMode(theme);
13
+ return {
14
+ position: "relative",
15
+ background: alpha(
16
+ theme.palette.success.main,
17
+ paletteMode === "dark" ? 0.2 : 0.12
18
+ ),
19
+ border: `1px solid ${alpha(theme.palette.success.main, 0.45)}`,
20
+ borderRadius: 12,
21
+ width: 580,
22
+ padding: theme.spacing(1.5),
23
+ boxShadow: theme.shadows[2],
24
+ color: theme.palette.text.primary
25
+ };
26
+ });
27
+ const Header = styled(Box)(({ theme }) => {
28
+ const paletteMode = resolvePaletteMode(theme);
29
+ return {
30
+ display: "flex",
31
+ alignItems: "center",
32
+ justifyContent: "space-between",
33
+ padding: theme.spacing(1),
34
+ marginBottom: theme.spacing(1),
35
+ borderRadius: 8,
36
+ backgroundColor: alpha(
37
+ theme.palette.success.main,
38
+ paletteMode === "dark" ? 0.25 : 0.16
39
+ ),
40
+ border: `1px solid ${alpha(theme.palette.success.main, 0.45)}`
41
+ };
42
+ });
43
+ const shouldParseDefault = (value) => {
44
+ const trimmed = value.trim();
45
+ if (!trimmed.length) {
46
+ return false;
47
+ }
48
+ if (trimmed === "true" || trimmed === "false" || trimmed === "null") {
49
+ return true;
50
+ }
51
+ if (!Number.isNaN(Number(trimmed))) {
52
+ return true;
53
+ }
54
+ return trimmed.startsWith("{") || trimmed.startsWith("[");
55
+ };
56
+ const ParameterInputNode = ({
57
+ field,
58
+ index,
59
+ totalCount,
60
+ onFieldUpdate,
61
+ onAddField,
62
+ onMoveField
63
+ }) => {
64
+ const theme = useTheme();
65
+ const { fieldName, schema, required, sectionTitle } = field;
66
+ const schemaRecord = useMemo(
67
+ () => schema ?? {},
68
+ [schema]
69
+ );
70
+ const defaultValue = schemaRecord.default;
71
+ const schemaTitle = typeof schemaRecord.title === "string" ? schemaRecord.title : "";
72
+ const schemaDescription = typeof schemaRecord.description === "string" ? schemaRecord.description : "";
73
+ const schemaSummary = useMemo(() => {
74
+ if (!schema) {
75
+ return "any";
76
+ }
77
+ const typeValue = schemaRecord.type;
78
+ if (Array.isArray(typeValue)) {
79
+ return typeValue.map(String).join(" | ");
80
+ }
81
+ if (typeof typeValue === "string") {
82
+ return typeValue;
83
+ }
84
+ return "any";
85
+ }, [schema, schemaRecord]);
86
+ const defaultString = useMemo(() => {
87
+ if (defaultValue === void 0 || defaultValue === null) {
88
+ return "";
89
+ }
90
+ if (typeof defaultValue === "string") {
91
+ return defaultValue;
92
+ }
93
+ try {
94
+ return JSON.stringify(defaultValue);
95
+ } catch {
96
+ return String(defaultValue);
97
+ }
98
+ }, [defaultValue]);
99
+ const updateField = useCallback(
100
+ (updater) => {
101
+ onFieldUpdate?.(updater);
102
+ },
103
+ [onFieldUpdate]
104
+ );
105
+ const updateSchema = useCallback(
106
+ (patch) => {
107
+ updateField((current) => ({
108
+ ...current,
109
+ schema: {
110
+ ...current.schema ?? {},
111
+ ...patch
112
+ }
113
+ }));
114
+ },
115
+ [updateField]
116
+ );
117
+ const handleDefaultChange = (value) => {
118
+ const trimmed = value.trim();
119
+ if (!trimmed.length) {
120
+ updateSchema({ default: void 0 });
121
+ return;
122
+ }
123
+ if (shouldParseDefault(trimmed)) {
124
+ try {
125
+ updateSchema({ default: JSON.parse(trimmed) });
126
+ return;
127
+ } catch {
128
+ }
129
+ }
130
+ updateSchema({ default: value });
131
+ };
132
+ const preventDrag = (event) => {
133
+ event.stopPropagation();
134
+ event.preventDefault();
135
+ };
136
+ return /* @__PURE__ */ jsxs(Card, { children: [
137
+ /* @__PURE__ */ jsx(Header, { children: /* @__PURE__ */ jsxs(Box, { display: "flex", flexDirection: "column", width: "100%", children: [
138
+ /* @__PURE__ */ jsxs(
139
+ Box,
140
+ {
141
+ display: "flex",
142
+ alignItems: "center",
143
+ justifyContent: "space-between",
144
+ style: { gap: theme.spacing(1) },
145
+ children: [
146
+ /* @__PURE__ */ jsxs(
147
+ Box,
148
+ {
149
+ display: "flex",
150
+ alignItems: "center",
151
+ style: { gap: theme.spacing(1) },
152
+ children: [
153
+ /* @__PURE__ */ jsx(
154
+ TuneIcon,
155
+ {
156
+ fontSize: "small",
157
+ htmlColor: theme.palette.success.dark
158
+ }
159
+ ),
160
+ /* @__PURE__ */ jsx(Typography, { variant: "subtitle2", children: schemaTitle || fieldName || "Field" })
161
+ ]
162
+ }
163
+ ),
164
+ /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "textSecondary", children: schemaSummary })
165
+ ]
166
+ }
167
+ ),
168
+ /* @__PURE__ */ jsxs(
169
+ Box,
170
+ {
171
+ display: "flex",
172
+ justifyContent: "flex-end",
173
+ style: {
174
+ gap: 4,
175
+ marginTop: theme.spacing(0.5)
176
+ },
177
+ children: [
178
+ /* @__PURE__ */ jsx(Tooltip, { title: "Add parameter input", children: /* @__PURE__ */ jsx(
179
+ IconButton,
180
+ {
181
+ size: "small",
182
+ onPointerDown: preventDrag,
183
+ onClick: (event) => {
184
+ event.stopPropagation();
185
+ onAddField?.();
186
+ },
187
+ children: /* @__PURE__ */ jsx(AddIcon, { fontSize: "small" })
188
+ }
189
+ ) }),
190
+ /* @__PURE__ */ jsx(Tooltip, { title: "Move up", children: /* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsx(
191
+ IconButton,
192
+ {
193
+ size: "small",
194
+ disabled: index === 0,
195
+ onPointerDown: preventDrag,
196
+ onClick: (event) => {
197
+ event.stopPropagation();
198
+ onMoveField?.("up");
199
+ },
200
+ children: /* @__PURE__ */ jsx(ArrowUpwardIcon, { fontSize: "small" })
201
+ }
202
+ ) }) }),
203
+ /* @__PURE__ */ jsx(Tooltip, { title: "Move down", children: /* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsx(
204
+ IconButton,
205
+ {
206
+ size: "small",
207
+ disabled: index === totalCount - 1,
208
+ onPointerDown: preventDrag,
209
+ onClick: (event) => {
210
+ event.stopPropagation();
211
+ onMoveField?.("down");
212
+ },
213
+ children: /* @__PURE__ */ jsx(ArrowDownwardIcon, { fontSize: "small" })
214
+ }
215
+ ) }) })
216
+ ]
217
+ }
218
+ ),
219
+ sectionTitle ? /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "textSecondary", children: sectionTitle }) : null
220
+ ] }) }),
221
+ /* @__PURE__ */ jsxs(
222
+ Box,
223
+ {
224
+ mt: 1,
225
+ display: "flex",
226
+ flexDirection: "column",
227
+ style: { gap: theme.spacing(1) },
228
+ children: [
229
+ /* @__PURE__ */ jsx(
230
+ TextField,
231
+ {
232
+ label: "Field name",
233
+ value: fieldName,
234
+ size: "small",
235
+ variant: "outlined",
236
+ onChange: (event) => updateField((current) => ({
237
+ ...current,
238
+ fieldName: event.target.value
239
+ })),
240
+ fullWidth: true
241
+ }
242
+ ),
243
+ /* @__PURE__ */ jsx(
244
+ TextField,
245
+ {
246
+ label: "Title",
247
+ value: schemaTitle,
248
+ size: "small",
249
+ variant: "outlined",
250
+ onChange: (event) => updateSchema({ title: event.target.value || void 0 }),
251
+ fullWidth: true
252
+ }
253
+ ),
254
+ /* @__PURE__ */ jsx(
255
+ TextField,
256
+ {
257
+ label: "Description",
258
+ value: schemaDescription,
259
+ size: "small",
260
+ variant: "outlined",
261
+ onChange: (event) => updateSchema({
262
+ description: event.target.value || void 0
263
+ }),
264
+ fullWidth: true,
265
+ multiline: true,
266
+ minRows: 2
267
+ }
268
+ ),
269
+ /* @__PURE__ */ jsx(
270
+ TextField,
271
+ {
272
+ label: "Default",
273
+ value: defaultString,
274
+ size: "small",
275
+ variant: "outlined",
276
+ onChange: (event) => handleDefaultChange(event.target.value),
277
+ fullWidth: true,
278
+ multiline: true,
279
+ minRows: 2,
280
+ placeholder: "Supports strings, numbers, booleans, objects, and arrays"
281
+ }
282
+ ),
283
+ /* @__PURE__ */ jsxs(
284
+ Box,
285
+ {
286
+ display: "flex",
287
+ alignItems: "center",
288
+ justifyContent: "space-between",
289
+ flexWrap: "wrap",
290
+ children: [
291
+ /* @__PURE__ */ jsx(
292
+ FormControlLabel,
293
+ {
294
+ control: /* @__PURE__ */ jsx(
295
+ Switch,
296
+ {
297
+ size: "small",
298
+ color: "primary",
299
+ checked: required ?? false,
300
+ onChange: (_, checked) => updateField((current) => ({
301
+ ...current,
302
+ required: checked
303
+ }))
304
+ }
305
+ ),
306
+ label: /* @__PURE__ */ jsx(Typography, { variant: "body2", color: "textSecondary", children: "Required" })
307
+ }
308
+ ),
309
+ /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "textSecondary", children: "Double-click text fields to edit in a modal." })
310
+ ]
311
+ }
312
+ )
313
+ ]
314
+ }
315
+ )
316
+ ] });
317
+ };
318
+
319
+ export { ParameterInputNode };
320
+ //# sourceMappingURL=ParameterInputNode.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ParameterInputNode.esm.js","sources":["../../../src/components/Nodes/ParameterInputNode.tsx"],"sourcesContent":["import type { FC, SyntheticEvent } from \"react\";\nimport { useCallback, useMemo } from \"react\";\nimport { alpha, styled, useTheme } from \"@material-ui/core/styles\";\nimport {\n Box,\n FormControlLabel,\n IconButton,\n Switch,\n TextField,\n Tooltip,\n Typography,\n} from \"@material-ui/core\";\nimport TuneIcon from \"@material-ui/icons/Tune\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport ArrowUpwardIcon from \"@material-ui/icons/ArrowUpward\";\nimport ArrowDownwardIcon from \"@material-ui/icons/ArrowDownward\";\nimport type { ParameterFieldDisplay } from \"../../types/flowNodes\";\n\nconst resolvePaletteMode = (theme: { palette: { type?: string } }) =>\n (theme.palette as { mode?: \"light\" | \"dark\" }).mode ??\n theme.palette.type ??\n \"light\";\n\nconst Card = styled(Box)(({ theme }) => {\n const paletteMode = resolvePaletteMode(theme);\n return {\n position: \"relative\",\n background: alpha(\n theme.palette.success.main,\n paletteMode === \"dark\" ? 0.2 : 0.12\n ),\n border: `1px solid ${alpha(theme.palette.success.main, 0.45)}`,\n borderRadius: 12,\n width: 580,\n padding: theme.spacing(1.5),\n boxShadow: theme.shadows[2],\n color: theme.palette.text.primary,\n };\n});\n\nconst Header = styled(Box)(({ theme }) => {\n const paletteMode = resolvePaletteMode(theme);\n return {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: theme.spacing(1),\n marginBottom: theme.spacing(1),\n borderRadius: 8,\n backgroundColor: alpha(\n theme.palette.success.main,\n paletteMode === \"dark\" ? 0.25 : 0.16\n ),\n border: `1px solid ${alpha(theme.palette.success.main, 0.45)}`,\n };\n});\n\ntype ParameterInputProps = {\n field: ParameterFieldDisplay;\n index: number;\n totalCount: number;\n onFieldUpdate?: (\n updater: (field: ParameterFieldDisplay) => ParameterFieldDisplay\n ) => void;\n onAddField?: () => void;\n onMoveField?: (direction: \"up\" | \"down\") => void;\n};\n\nconst shouldParseDefault = (value: string): boolean => {\n const trimmed = value.trim();\n if (!trimmed.length) {\n return false;\n }\n if (trimmed === \"true\" || trimmed === \"false\" || trimmed === \"null\") {\n return true;\n }\n if (!Number.isNaN(Number(trimmed))) {\n return true;\n }\n return trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\");\n};\n\nexport const ParameterInputNode: FC<ParameterInputProps> = ({\n field,\n index,\n totalCount,\n onFieldUpdate,\n onAddField,\n onMoveField,\n}) => {\n const theme = useTheme();\n const { fieldName, schema, required, sectionTitle } = field;\n const schemaRecord = useMemo(\n () => (schema ?? {}) as Record<string, unknown>,\n [schema]\n );\n const defaultValue = schemaRecord.default;\n const schemaTitle =\n typeof schemaRecord.title === \"string\"\n ? (schemaRecord.title as string)\n : \"\";\n const schemaDescription =\n typeof schemaRecord.description === \"string\"\n ? (schemaRecord.description as string)\n : \"\";\n\n const schemaSummary = useMemo(() => {\n if (!schema) {\n return \"any\";\n }\n const typeValue = schemaRecord.type;\n if (Array.isArray(typeValue)) {\n return typeValue.map(String).join(\" | \");\n }\n if (typeof typeValue === \"string\") {\n return typeValue;\n }\n return \"any\";\n }, [schema, schemaRecord]);\n\n const defaultString = useMemo(() => {\n if (defaultValue === undefined || defaultValue === null) {\n return \"\";\n }\n if (typeof defaultValue === \"string\") {\n return defaultValue;\n }\n try {\n return JSON.stringify(defaultValue);\n } catch {\n return String(defaultValue);\n }\n }, [defaultValue]);\n\n const updateField = useCallback(\n (updater: (current: ParameterFieldDisplay) => ParameterFieldDisplay) => {\n onFieldUpdate?.(updater);\n },\n [onFieldUpdate]\n );\n\n const updateSchema = useCallback(\n (patch: Record<string, unknown>) => {\n updateField((current) => ({\n ...current,\n schema: {\n ...(current.schema ?? {}),\n ...patch,\n },\n }));\n },\n [updateField]\n );\n\n const handleDefaultChange = (value: string) => {\n const trimmed = value.trim();\n if (!trimmed.length) {\n updateSchema({ default: undefined });\n return;\n }\n\n if (shouldParseDefault(trimmed)) {\n try {\n updateSchema({ default: JSON.parse(trimmed) });\n return;\n } catch {\n // swallow parse errors and treat as plain text below\n }\n }\n\n updateSchema({ default: value });\n };\n\n const preventDrag = (event: SyntheticEvent) => {\n event.stopPropagation();\n event.preventDefault();\n };\n\n return (\n <Card>\n <Header>\n <Box display=\"flex\" flexDirection=\"column\" width=\"100%\">\n <Box\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n style={{ gap: theme.spacing(1) }}\n >\n <Box\n display=\"flex\"\n alignItems=\"center\"\n style={{ gap: theme.spacing(1) }}\n >\n <TuneIcon\n fontSize=\"small\"\n htmlColor={theme.palette.success.dark}\n />\n <Typography variant=\"subtitle2\">\n {schemaTitle || fieldName || \"Field\"}\n </Typography>\n </Box>\n <Typography variant=\"caption\" color=\"textSecondary\">\n {schemaSummary}\n </Typography>\n </Box>\n <Box\n display=\"flex\"\n justifyContent=\"flex-end\"\n style={{\n gap: 4,\n marginTop: theme.spacing(0.5),\n }}\n >\n <Tooltip title=\"Add parameter input\">\n <IconButton\n size=\"small\"\n onPointerDown={preventDrag}\n onClick={(event) => {\n event.stopPropagation();\n onAddField?.();\n }}\n >\n <AddIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n <Tooltip title=\"Move up\">\n <span>\n <IconButton\n size=\"small\"\n disabled={index === 0}\n onPointerDown={preventDrag}\n onClick={(event) => {\n event.stopPropagation();\n onMoveField?.(\"up\");\n }}\n >\n <ArrowUpwardIcon fontSize=\"small\" />\n </IconButton>\n </span>\n </Tooltip>\n <Tooltip title=\"Move down\">\n <span>\n <IconButton\n size=\"small\"\n disabled={index === totalCount - 1}\n onPointerDown={preventDrag}\n onClick={(event) => {\n event.stopPropagation();\n onMoveField?.(\"down\");\n }}\n >\n <ArrowDownwardIcon fontSize=\"small\" />\n </IconButton>\n </span>\n </Tooltip>\n </Box>\n {sectionTitle ? (\n <Typography variant=\"caption\" color=\"textSecondary\">\n {sectionTitle}\n </Typography>\n ) : null}\n </Box>\n </Header>\n\n <Box\n mt={1}\n display=\"flex\"\n flexDirection=\"column\"\n style={{ gap: theme.spacing(1) }}\n >\n <TextField\n label=\"Field name\"\n value={fieldName}\n size=\"small\"\n variant=\"outlined\"\n onChange={(event) =>\n updateField((current) => ({\n ...current,\n fieldName: event.target.value,\n }))\n }\n fullWidth\n />\n <TextField\n label=\"Title\"\n value={schemaTitle}\n size=\"small\"\n variant=\"outlined\"\n onChange={(event) =>\n updateSchema({ title: event.target.value || undefined })\n }\n fullWidth\n />\n <TextField\n label=\"Description\"\n value={schemaDescription}\n size=\"small\"\n variant=\"outlined\"\n onChange={(event) =>\n updateSchema({\n description: event.target.value || undefined,\n })\n }\n fullWidth\n multiline\n minRows={2}\n />\n <TextField\n label=\"Default\"\n value={defaultString}\n size=\"small\"\n variant=\"outlined\"\n onChange={(event) => handleDefaultChange(event.target.value)}\n fullWidth\n multiline\n minRows={2}\n placeholder=\"Supports strings, numbers, booleans, objects, and arrays\"\n />\n <Box\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n flexWrap=\"wrap\"\n >\n <FormControlLabel\n control={\n <Switch\n size=\"small\"\n color=\"primary\"\n checked={required ?? false}\n onChange={(_, checked) =>\n updateField((current) => ({\n ...current,\n required: checked,\n }))\n }\n />\n }\n label={\n <Typography variant=\"body2\" color=\"textSecondary\">\n Required\n </Typography>\n }\n />\n <Typography variant=\"caption\" color=\"textSecondary\">\n Double-click text fields to edit in a modal.\n </Typography>\n </Box>\n </Box>\n </Card>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,251 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { styled, alpha, useTheme } from '@material-ui/core/styles';
3
+ import { Box, Typography, Chip, Tooltip, IconButton, TextField, Button, Divider } from '@material-ui/core';
4
+ import ViewListIcon from '@material-ui/icons/ViewList';
5
+ import AddIcon from '@material-ui/icons/Add';
6
+ import ArrowUpwardIcon from '@material-ui/icons/ArrowUpward';
7
+ import ArrowDownwardIcon from '@material-ui/icons/ArrowDownward';
8
+ import { ParameterInputNode } from './ParameterInputNode.esm.js';
9
+
10
+ const resolvePaletteMode = (theme) => theme.palette.mode ?? theme.palette.type ?? "light";
11
+ const Card = styled(Box)(({ theme }) => {
12
+ const paletteMode = resolvePaletteMode(theme);
13
+ return {
14
+ position: "relative",
15
+ background: alpha(
16
+ theme.palette.info.main,
17
+ paletteMode === "dark" ? 0.22 : 0.12
18
+ ),
19
+ border: `1px solid ${alpha(theme.palette.info.main, 0.4)}`,
20
+ borderRadius: 12,
21
+ width: 660,
22
+ padding: theme.spacing(1.5),
23
+ boxShadow: theme.shadows[2],
24
+ color: theme.palette.text.primary
25
+ };
26
+ });
27
+ const Header = styled(Box)(({ theme }) => {
28
+ const paletteMode = resolvePaletteMode(theme);
29
+ return {
30
+ display: "flex",
31
+ alignItems: "center",
32
+ justifyContent: "space-between",
33
+ padding: theme.spacing(1),
34
+ marginBottom: theme.spacing(1),
35
+ borderRadius: 8,
36
+ backgroundColor: alpha(
37
+ theme.palette.info.main,
38
+ paletteMode === "dark" ? 0.25 : 0.16
39
+ ),
40
+ border: `1px solid ${alpha(theme.palette.info.main, 0.45)}`
41
+ };
42
+ });
43
+ const SectionRow = styled(Box)(({ theme }) => ({
44
+ display: "flex",
45
+ flexDirection: "column",
46
+ gap: theme.spacing(0.5),
47
+ padding: theme.spacing(1.25, 1)
48
+ }));
49
+ const SectionMeta = styled(Box)(({ theme }) => ({
50
+ display: "flex",
51
+ gap: theme.spacing(1),
52
+ flexWrap: "wrap"
53
+ }));
54
+ const FieldsGrid = styled(Box)(({ theme }) => ({
55
+ display: "flex",
56
+ flexDirection: "column",
57
+ gap: theme.spacing(1)
58
+ }));
59
+ const EmptyState = styled(Box)(({ theme }) => ({
60
+ border: `2px dashed ${alpha(theme.palette.info.main, 0.4)}`,
61
+ borderRadius: 12,
62
+ padding: theme.spacing(3),
63
+ textAlign: "center",
64
+ color: alpha(theme.palette.text.primary, 0.7)
65
+ }));
66
+ const ParameterTitlesNode = ({
67
+ sections,
68
+ onSectionUpdate,
69
+ onFieldUpdate,
70
+ onAddSection,
71
+ onMoveSection,
72
+ onAddField,
73
+ onMoveField
74
+ }) => {
75
+ const theme = useTheme();
76
+ const paletteMode = resolvePaletteMode(theme);
77
+ const safeSections = sections ?? [];
78
+ const handleSectionTitleChange = (sectionId, value) => {
79
+ onSectionUpdate?.(sectionId, (section) => ({
80
+ ...section,
81
+ title: value,
82
+ fields: section.fields?.map((field) => ({
83
+ ...field,
84
+ sectionTitle: value
85
+ })) ?? []
86
+ }));
87
+ };
88
+ const handleSectionDescriptionChange = (sectionId, value) => {
89
+ onSectionUpdate?.(sectionId, (section) => ({
90
+ ...section,
91
+ description: value
92
+ }));
93
+ };
94
+ const handleFieldUpdate = (sectionId, fieldId, updater) => {
95
+ onFieldUpdate?.(sectionId, fieldId, updater);
96
+ };
97
+ const preventDrag = (event) => {
98
+ event.stopPropagation();
99
+ event.preventDefault();
100
+ };
101
+ return /* @__PURE__ */ jsxs(Card, { children: [
102
+ /* @__PURE__ */ jsxs(Header, { children: [
103
+ /* @__PURE__ */ jsxs(
104
+ Box,
105
+ {
106
+ display: "flex",
107
+ alignItems: "center",
108
+ style: { gap: theme.spacing(1) },
109
+ children: [
110
+ /* @__PURE__ */ jsx(ViewListIcon, { fontSize: "small", htmlColor: theme.palette.info.dark }),
111
+ /* @__PURE__ */ jsx(Typography, { variant: "subtitle2", noWrap: true, children: "Parameter Titles" })
112
+ ]
113
+ }
114
+ ),
115
+ /* @__PURE__ */ jsx(
116
+ Chip,
117
+ {
118
+ size: "small",
119
+ label: `${safeSections.length} section${safeSections.length === 1 ? "" : "s"}`,
120
+ variant: "outlined",
121
+ style: {
122
+ borderColor: theme.palette.info.dark,
123
+ color: paletteMode === "dark" ? theme.palette.info.light : theme.palette.info.dark
124
+ }
125
+ }
126
+ )
127
+ ] }),
128
+ safeSections.length === 0 ? /* @__PURE__ */ jsx(EmptyState, { children: /* @__PURE__ */ jsx(Typography, { variant: "body2", children: "No parameter sections were detected. Define template parameters to see them listed here." }) }) : null,
129
+ safeSections.map((section, index) => {
130
+ const fieldCount = section.fields?.length ?? 0;
131
+ return /* @__PURE__ */ jsxs(Box, { children: [
132
+ /* @__PURE__ */ jsxs(SectionRow, { children: [
133
+ /* @__PURE__ */ jsxs(
134
+ Box,
135
+ {
136
+ display: "flex",
137
+ justifyContent: "flex-end",
138
+ style: { gap: theme.spacing(0.5) },
139
+ children: [
140
+ /* @__PURE__ */ jsx(Tooltip, { title: "Add section", children: /* @__PURE__ */ jsx(
141
+ IconButton,
142
+ {
143
+ size: "small",
144
+ onPointerDown: preventDrag,
145
+ onClick: (event) => {
146
+ event.stopPropagation();
147
+ onAddSection?.(section.id);
148
+ },
149
+ children: /* @__PURE__ */ jsx(AddIcon, { fontSize: "small" })
150
+ }
151
+ ) }),
152
+ /* @__PURE__ */ jsx(Tooltip, { title: "Move section up", children: /* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsx(
153
+ IconButton,
154
+ {
155
+ size: "small",
156
+ disabled: index === 0,
157
+ onPointerDown: preventDrag,
158
+ onClick: (event) => {
159
+ event.stopPropagation();
160
+ onMoveSection?.(section.id, "up");
161
+ },
162
+ children: /* @__PURE__ */ jsx(ArrowUpwardIcon, { fontSize: "small" })
163
+ }
164
+ ) }) }),
165
+ /* @__PURE__ */ jsx(Tooltip, { title: "Move section down", children: /* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsx(
166
+ IconButton,
167
+ {
168
+ size: "small",
169
+ disabled: index === safeSections.length - 1,
170
+ onPointerDown: preventDrag,
171
+ onClick: (event) => {
172
+ event.stopPropagation();
173
+ onMoveSection?.(section.id, "down");
174
+ },
175
+ children: /* @__PURE__ */ jsx(ArrowDownwardIcon, { fontSize: "small" })
176
+ }
177
+ ) }) })
178
+ ]
179
+ }
180
+ ),
181
+ /* @__PURE__ */ jsx(
182
+ TextField,
183
+ {
184
+ label: "Section title",
185
+ size: "small",
186
+ variant: "outlined",
187
+ value: section.title ?? "",
188
+ onChange: (event) => handleSectionTitleChange(section.id, event.target.value),
189
+ fullWidth: true
190
+ }
191
+ ),
192
+ /* @__PURE__ */ jsx(
193
+ TextField,
194
+ {
195
+ label: "Section description",
196
+ size: "small",
197
+ variant: "outlined",
198
+ value: section.description ?? "",
199
+ onChange: (event) => handleSectionDescriptionChange(section.id, event.target.value),
200
+ fullWidth: true,
201
+ multiline: true,
202
+ minRows: 2
203
+ }
204
+ ),
205
+ /* @__PURE__ */ jsxs(SectionMeta, { children: [
206
+ /* @__PURE__ */ jsx(
207
+ Chip,
208
+ {
209
+ size: "small",
210
+ label: `${fieldCount} propert${fieldCount === 1 ? "y" : "ies"}`
211
+ }
212
+ ),
213
+ /* @__PURE__ */ jsx(
214
+ Chip,
215
+ {
216
+ size: "small",
217
+ variant: "outlined",
218
+ color: "primary",
219
+ label: section.required?.length ? `${section.required.length} required` : "No required fields"
220
+ }
221
+ )
222
+ ] })
223
+ ] }),
224
+ section.fields?.length ? /* @__PURE__ */ jsx(FieldsGrid, { children: section.fields.map((field, fieldIndex) => /* @__PURE__ */ jsx(
225
+ ParameterInputNode,
226
+ {
227
+ field,
228
+ index: fieldIndex,
229
+ totalCount: section.fields?.length ?? 0,
230
+ onFieldUpdate: (updater) => handleFieldUpdate(section.id, field.id, updater),
231
+ onAddField: () => onAddField?.(section.id, field.id),
232
+ onMoveField: (direction) => onMoveField?.(section.id, field.id, direction)
233
+ },
234
+ field.id
235
+ )) }) : /* @__PURE__ */ jsx(Box, { mt: 1, children: /* @__PURE__ */ jsx(
236
+ Button,
237
+ {
238
+ variant: "outlined",
239
+ size: "small",
240
+ onClick: () => onAddField?.(section.id),
241
+ children: "Add parameter input"
242
+ }
243
+ ) }),
244
+ index < safeSections.length - 1 ? /* @__PURE__ */ jsx(Divider, {}) : null
245
+ ] }, section.id ?? index);
246
+ })
247
+ ] });
248
+ };
249
+
250
+ export { ParameterTitlesNode };
251
+ //# sourceMappingURL=ParameterTitlesNode.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ParameterTitlesNode.esm.js","sources":["../../../src/components/Nodes/ParameterTitlesNode.tsx"],"sourcesContent":["import type { FC, SyntheticEvent } from \"react\";\nimport { alpha, styled, useTheme } from \"@material-ui/core/styles\";\nimport {\n Box,\n Button,\n Chip,\n Divider,\n IconButton,\n TextField,\n Tooltip,\n Typography,\n} from \"@material-ui/core\";\nimport ViewListIcon from \"@material-ui/icons/ViewList\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport ArrowUpwardIcon from \"@material-ui/icons/ArrowUpward\";\nimport ArrowDownwardIcon from \"@material-ui/icons/ArrowDownward\";\nimport type {\n ParameterFieldDisplay,\n ParameterSectionDisplay,\n} from \"../../types/flowNodes\";\nimport { ParameterInputNode } from \"./ParameterInputNode\";\n\nconst resolvePaletteMode = (theme: { palette: { type?: string } }) =>\n (theme.palette as { mode?: \"light\" | \"dark\" }).mode ??\n theme.palette.type ??\n \"light\";\n\nconst Card = styled(Box)(({ theme }) => {\n const paletteMode = resolvePaletteMode(theme);\n return {\n position: \"relative\",\n background: alpha(\n theme.palette.info.main,\n paletteMode === \"dark\" ? 0.22 : 0.12\n ),\n border: `1px solid ${alpha(theme.palette.info.main, 0.4)}`,\n borderRadius: 12,\n width: 660,\n padding: theme.spacing(1.5),\n boxShadow: theme.shadows[2],\n color: theme.palette.text.primary,\n };\n});\n\nconst Header = styled(Box)(({ theme }) => {\n const paletteMode = resolvePaletteMode(theme);\n return {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n padding: theme.spacing(1),\n marginBottom: theme.spacing(1),\n borderRadius: 8,\n backgroundColor: alpha(\n theme.palette.info.main,\n paletteMode === \"dark\" ? 0.25 : 0.16\n ),\n border: `1px solid ${alpha(theme.palette.info.main, 0.45)}`,\n };\n});\n\nconst SectionRow = styled(Box)(({ theme }) => ({\n display: \"flex\",\n flexDirection: \"column\",\n gap: theme.spacing(0.5),\n padding: theme.spacing(1.25, 1),\n}));\n\nconst SectionMeta = styled(Box)(({ theme }) => ({\n display: \"flex\",\n gap: theme.spacing(1),\n flexWrap: \"wrap\",\n}));\n\nconst FieldsGrid = styled(Box)(({ theme }) => ({\n display: \"flex\",\n flexDirection: \"column\",\n gap: theme.spacing(1),\n}));\n\nconst EmptyState = styled(Box)(({ theme }) => ({\n border: `2px dashed ${alpha(theme.palette.info.main, 0.4)}`,\n borderRadius: 12,\n padding: theme.spacing(3),\n textAlign: \"center\",\n color: alpha(theme.palette.text.primary, 0.7),\n}));\n\ntype ParameterTitlesProps = {\n sections: ParameterSectionDisplay[];\n onSectionUpdate?: (\n sectionId: string,\n updater: (section: ParameterSectionDisplay) => ParameterSectionDisplay\n ) => void;\n onFieldUpdate?: (\n sectionId: string,\n fieldId: string,\n updater: (field: ParameterFieldDisplay) => ParameterFieldDisplay\n ) => void;\n onAddSection?: (afterSectionId?: string) => void;\n onMoveSection?: (sectionId: string, direction: \"up\" | \"down\") => void;\n onAddField?: (sectionId: string, afterFieldId?: string) => void;\n onMoveField?: (\n sectionId: string,\n fieldId: string,\n direction: \"up\" | \"down\"\n ) => void;\n};\n\nexport const ParameterTitlesNode: FC<ParameterTitlesProps> = ({\n sections,\n onSectionUpdate,\n onFieldUpdate,\n onAddSection,\n onMoveSection,\n onAddField,\n onMoveField,\n}) => {\n const theme = useTheme();\n const paletteMode = resolvePaletteMode(theme);\n const safeSections = sections ?? [];\n\n const handleSectionTitleChange = (sectionId: string, value: string) => {\n onSectionUpdate?.(sectionId, (section) => ({\n ...section,\n title: value,\n fields:\n section.fields?.map((field) => ({\n ...field,\n sectionTitle: value,\n })) ?? [],\n }));\n };\n\n const handleSectionDescriptionChange = (sectionId: string, value: string) => {\n onSectionUpdate?.(sectionId, (section) => ({\n ...section,\n description: value,\n }));\n };\n\n const handleFieldUpdate = (\n sectionId: string,\n fieldId: string,\n updater: (field: ParameterFieldDisplay) => ParameterFieldDisplay\n ) => {\n onFieldUpdate?.(sectionId, fieldId, updater);\n };\n\n const preventDrag = (event: SyntheticEvent) => {\n event.stopPropagation();\n event.preventDefault();\n };\n\n return (\n <Card>\n <Header>\n <Box\n display=\"flex\"\n alignItems=\"center\"\n style={{ gap: theme.spacing(1) }}\n >\n <ViewListIcon fontSize=\"small\" htmlColor={theme.palette.info.dark} />\n <Typography variant=\"subtitle2\" noWrap>\n Parameter Titles\n </Typography>\n </Box>\n <Chip\n size=\"small\"\n label={`${safeSections.length} section${\n safeSections.length === 1 ? \"\" : \"s\"\n }`}\n variant=\"outlined\"\n style={{\n borderColor: theme.palette.info.dark,\n color:\n paletteMode === \"dark\"\n ? theme.palette.info.light\n : theme.palette.info.dark,\n }}\n />\n </Header>\n\n {safeSections.length === 0 ? (\n <EmptyState>\n <Typography variant=\"body2\">\n No parameter sections were detected. Define template parameters to\n see them listed here.\n </Typography>\n </EmptyState>\n ) : null}\n\n {safeSections.map((section, index) => {\n const fieldCount = section.fields?.length ?? 0;\n return (\n <Box key={section.id ?? index}>\n <SectionRow>\n <Box\n display=\"flex\"\n justifyContent=\"flex-end\"\n style={{ gap: theme.spacing(0.5) }}\n >\n <Tooltip title=\"Add section\">\n <IconButton\n size=\"small\"\n onPointerDown={preventDrag}\n onClick={(event) => {\n event.stopPropagation();\n onAddSection?.(section.id);\n }}\n >\n <AddIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n <Tooltip title=\"Move section up\">\n <span>\n <IconButton\n size=\"small\"\n disabled={index === 0}\n onPointerDown={preventDrag}\n onClick={(event) => {\n event.stopPropagation();\n onMoveSection?.(section.id, \"up\");\n }}\n >\n <ArrowUpwardIcon fontSize=\"small\" />\n </IconButton>\n </span>\n </Tooltip>\n <Tooltip title=\"Move section down\">\n <span>\n <IconButton\n size=\"small\"\n disabled={index === safeSections.length - 1}\n onPointerDown={preventDrag}\n onClick={(event) => {\n event.stopPropagation();\n onMoveSection?.(section.id, \"down\");\n }}\n >\n <ArrowDownwardIcon fontSize=\"small\" />\n </IconButton>\n </span>\n </Tooltip>\n </Box>\n <TextField\n label=\"Section title\"\n size=\"small\"\n variant=\"outlined\"\n value={section.title ?? \"\"}\n onChange={(event) =>\n handleSectionTitleChange(section.id, event.target.value)\n }\n fullWidth\n />\n <TextField\n label=\"Section description\"\n size=\"small\"\n variant=\"outlined\"\n value={section.description ?? \"\"}\n onChange={(event) =>\n handleSectionDescriptionChange(section.id, event.target.value)\n }\n fullWidth\n multiline\n minRows={2}\n />\n <SectionMeta>\n <Chip\n size=\"small\"\n label={`${fieldCount} propert${\n fieldCount === 1 ? \"y\" : \"ies\"\n }`}\n />\n <Chip\n size=\"small\"\n variant=\"outlined\"\n color=\"primary\"\n label={\n section.required?.length\n ? `${section.required.length} required`\n : \"No required fields\"\n }\n />\n </SectionMeta>\n </SectionRow>\n\n {section.fields?.length ? (\n <FieldsGrid>\n {section.fields.map((field, fieldIndex) => (\n <ParameterInputNode\n key={field.id}\n field={field}\n index={fieldIndex}\n totalCount={section.fields?.length ?? 0}\n onFieldUpdate={(updater) =>\n handleFieldUpdate(section.id, field.id, updater)\n }\n onAddField={() => onAddField?.(section.id, field.id)}\n onMoveField={(direction) =>\n onMoveField?.(section.id, field.id, direction)\n }\n />\n ))}\n </FieldsGrid>\n ) : (\n <Box mt={1}>\n <Button\n variant=\"outlined\"\n size=\"small\"\n onClick={() => onAddField?.(section.id)}\n >\n Add parameter input\n </Button>\n </Box>\n )}\n\n {index < safeSections.length - 1 ? <Divider /> : null}\n </Box>\n );\n })}\n </Card>\n );\n};\n"],"names":[],"mappings":"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"}