@tduniec/plugin-template-designer 0.1.7

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 (69) hide show
  1. package/README.md +120 -0
  2. package/dist/api/scaffolderActions.esm.js +42 -0
  3. package/dist/api/scaffolderActions.esm.js.map +1 -0
  4. package/dist/components/DesignerFlow/DesignerFlow.esm.js +370 -0
  5. package/dist/components/DesignerFlow/DesignerFlow.esm.js.map +1 -0
  6. package/dist/components/DesignerFlow/flowConfig.esm.js +21 -0
  7. package/dist/components/DesignerFlow/flowConfig.esm.js.map +1 -0
  8. package/dist/components/DesignerFlow/handlers.esm.js +288 -0
  9. package/dist/components/DesignerFlow/handlers.esm.js.map +1 -0
  10. package/dist/components/DesignerFlow/model.esm.js +181 -0
  11. package/dist/components/DesignerFlow/model.esm.js.map +1 -0
  12. package/dist/components/DesignerFlow/nodeLayout.esm.js +138 -0
  13. package/dist/components/DesignerFlow/nodeLayout.esm.js.map +1 -0
  14. package/dist/components/DesignerFlow/parameterTransforms.esm.js +184 -0
  15. package/dist/components/DesignerFlow/parameterTransforms.esm.js.map +1 -0
  16. package/dist/components/Nodes/ActionNode.esm.js +437 -0
  17. package/dist/components/Nodes/ActionNode.esm.js.map +1 -0
  18. package/dist/components/Nodes/OutputNode.esm.js +368 -0
  19. package/dist/components/Nodes/OutputNode.esm.js.map +1 -0
  20. package/dist/components/Nodes/ParameterInputNode.esm.js +310 -0
  21. package/dist/components/Nodes/ParameterInputNode.esm.js.map +1 -0
  22. package/dist/components/Nodes/ParameterTitlesNode.esm.js +251 -0
  23. package/dist/components/Nodes/ParameterTitlesNode.esm.js.map +1 -0
  24. package/dist/components/Nodes/ParametersNode.esm.js +142 -0
  25. package/dist/components/Nodes/ParametersNode.esm.js.map +1 -0
  26. package/dist/components/Nodes/action/schema.esm.js +117 -0
  27. package/dist/components/Nodes/action/schema.esm.js.map +1 -0
  28. package/dist/components/Nodes/action/useActionInputs.esm.js +66 -0
  29. package/dist/components/Nodes/action/useActionInputs.esm.js.map +1 -0
  30. package/dist/components/Nodes/common/AutoWidthPopper.esm.js +22 -0
  31. package/dist/components/Nodes/common/AutoWidthPopper.esm.js.map +1 -0
  32. package/dist/components/Nodes/common/nodeInteraction.esm.js +9 -0
  33. package/dist/components/Nodes/common/nodeInteraction.esm.js.map +1 -0
  34. package/dist/components/Nodes/output/useOutputController.esm.js +191 -0
  35. package/dist/components/Nodes/output/useOutputController.esm.js.map +1 -0
  36. package/dist/components/Nodes/parameters/useParameterSections.esm.js +162 -0
  37. package/dist/components/Nodes/parameters/useParameterSections.esm.js.map +1 -0
  38. package/dist/components/Nodes/types.esm.js +8 -0
  39. package/dist/components/Nodes/types.esm.js.map +1 -0
  40. package/dist/components/TemplateDesigner/TemplateDesigner.esm.js +115 -0
  41. package/dist/components/TemplateDesigner/TemplateDesigner.esm.js.map +1 -0
  42. package/dist/components/TemplateDesigner/components/FieldEditorDialog.esm.js +32 -0
  43. package/dist/components/TemplateDesigner/components/FieldEditorDialog.esm.js.map +1 -0
  44. package/dist/components/TemplateDesigner/components/TemplateLanding.esm.js +102 -0
  45. package/dist/components/TemplateDesigner/components/TemplateLanding.esm.js.map +1 -0
  46. package/dist/components/TemplateDesigner/components/TemplateWorkspace.esm.js +200 -0
  47. package/dist/components/TemplateDesigner/components/TemplateWorkspace.esm.js.map +1 -0
  48. package/dist/components/TemplateDesigner/index.esm.js +2 -0
  49. package/dist/components/TemplateDesigner/index.esm.js.map +1 -0
  50. package/dist/components/TemplateDesigner/useFieldEditor.esm.js +96 -0
  51. package/dist/components/TemplateDesigner/useFieldEditor.esm.js.map +1 -0
  52. package/dist/components/TemplateDesigner/useTemplateState.esm.js +391 -0
  53. package/dist/components/TemplateDesigner/useTemplateState.esm.js.map +1 -0
  54. package/dist/components/TemplateDesigner/utils.esm.js +46 -0
  55. package/dist/components/TemplateDesigner/utils.esm.js.map +1 -0
  56. package/dist/index.d.ts +9 -0
  57. package/dist/index.esm.js +2 -0
  58. package/dist/index.esm.js.map +1 -0
  59. package/dist/plugin.esm.js +19 -0
  60. package/dist/plugin.esm.js.map +1 -0
  61. package/dist/routes.esm.js +8 -0
  62. package/dist/routes.esm.js.map +1 -0
  63. package/dist/utils/createSequentialEdges.esm.js +15 -0
  64. package/dist/utils/createSequentialEdges.esm.js.map +1 -0
  65. package/dist/utils/sampleTemplate.esm.js +40 -0
  66. package/dist/utils/sampleTemplate.esm.js.map +1 -0
  67. package/dist/utils/yamlJsonConversion.esm.js +47 -0
  68. package/dist/utils/yamlJsonConversion.esm.js.map +1 -0
  69. package/package.json +116 -0
@@ -0,0 +1,142 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { NodeToolbar, Position, Handle } from '@xyflow/react';
3
+ import { useTheme, styled, alpha } from '@material-ui/core/styles';
4
+ import { Box, Typography, Chip, Button } from '@material-ui/core';
5
+ import SettingsIcon from '@material-ui/icons/Settings';
6
+ import AddIcon from '@material-ui/icons/Add';
7
+ import { ParameterTitlesNode } from './ParameterTitlesNode.esm.js';
8
+ import { createStopNodeInteraction } from './common/nodeInteraction.esm.js';
9
+ import { useParameterSectionsController } from './parameters/useParameterSections.esm.js';
10
+
11
+ const resolvePaletteMode = (theme) => theme.palette.mode ?? theme.palette.type ?? "light";
12
+ const Card = styled(Box)(({ theme }) => {
13
+ const paletteMode = resolvePaletteMode(theme);
14
+ return {
15
+ position: "relative",
16
+ background: alpha(
17
+ theme.palette.warning.main,
18
+ paletteMode === "dark" ? 0.18 : 0.12
19
+ ),
20
+ border: `1px solid ${alpha(theme.palette.warning.main, 0.35)}`,
21
+ borderRadius: 12,
22
+ width: 760,
23
+ padding: theme.spacing(1.5),
24
+ boxShadow: theme.shadows[2],
25
+ color: theme.palette.text.primary,
26
+ overflow: "hidden",
27
+ "&::before": {
28
+ content: '""',
29
+ position: "absolute",
30
+ inset: 0,
31
+ background: `linear-gradient(135deg, ${alpha(
32
+ theme.palette.warning.light,
33
+ paletteMode === "dark" ? 0.28 : 0.18
34
+ )}, transparent 65%)`,
35
+ pointerEvents: "none",
36
+ zIndex: 0
37
+ },
38
+ "& > *": {
39
+ position: "relative",
40
+ zIndex: 1
41
+ }
42
+ };
43
+ });
44
+ const Header = styled(Box)(({ theme }) => {
45
+ const paletteMode = resolvePaletteMode(theme);
46
+ return {
47
+ display: "flex",
48
+ alignItems: "center",
49
+ justifyContent: "space-between",
50
+ padding: theme.spacing(1),
51
+ marginBottom: theme.spacing(1),
52
+ borderRadius: 8,
53
+ backgroundColor: alpha(
54
+ theme.palette.warning.main,
55
+ paletteMode === "dark" ? 0.24 : 0.14
56
+ ),
57
+ border: `1px solid ${alpha(theme.palette.warning.main, 0.4)}`
58
+ };
59
+ });
60
+ const ParametersNode = ({
61
+ data
62
+ }) => {
63
+ const theme = useTheme();
64
+ const paletteMode = resolvePaletteMode(theme);
65
+ const {
66
+ sections,
67
+ handleSectionUpdate,
68
+ handleFieldUpdate,
69
+ handleAddSection,
70
+ handleMoveSection,
71
+ handleAddField,
72
+ handleMoveField
73
+ } = useParameterSectionsController(data);
74
+ const stopAll = createStopNodeInteraction();
75
+ return /* @__PURE__ */ jsxs(Card, { children: [
76
+ /* @__PURE__ */ jsxs(Header, { children: [
77
+ /* @__PURE__ */ jsxs(
78
+ Box,
79
+ {
80
+ display: "flex",
81
+ alignItems: "center",
82
+ style: { gap: theme.spacing(1) },
83
+ children: [
84
+ /* @__PURE__ */ jsx(
85
+ SettingsIcon,
86
+ {
87
+ fontSize: "small",
88
+ htmlColor: theme.palette.warning.dark
89
+ }
90
+ ),
91
+ /* @__PURE__ */ jsx(Typography, { variant: "subtitle2", noWrap: true, children: "Parameters" })
92
+ ]
93
+ }
94
+ ),
95
+ /* @__PURE__ */ jsx(
96
+ Chip,
97
+ {
98
+ size: "small",
99
+ variant: "outlined",
100
+ label: "parameters",
101
+ style: {
102
+ borderColor: theme.palette.warning.dark,
103
+ color: paletteMode === "dark" ? theme.palette.warning.light : theme.palette.warning.dark,
104
+ textTransform: "uppercase"
105
+ }
106
+ }
107
+ )
108
+ ] }),
109
+ /* @__PURE__ */ jsx(Box, { mt: 2, children: /* @__PURE__ */ jsx(
110
+ ParameterTitlesNode,
111
+ {
112
+ sections,
113
+ onSectionUpdate: handleSectionUpdate,
114
+ onFieldUpdate: handleFieldUpdate,
115
+ onAddSection: handleAddSection,
116
+ onMoveSection: handleMoveSection,
117
+ onAddField: handleAddField,
118
+ onMoveField: handleMoveField
119
+ }
120
+ ) }),
121
+ /* @__PURE__ */ jsx(NodeToolbar, { position: Position.Bottom, children: /* @__PURE__ */ jsx(
122
+ Button,
123
+ {
124
+ variant: "outlined",
125
+ size: "small",
126
+ startIcon: /* @__PURE__ */ jsx(AddIcon, { fontSize: "small" }),
127
+ onClick: () => data.onAddNode?.({
128
+ afterRfId: data.rfId,
129
+ type: "actionNode"
130
+ }),
131
+ className: "nodrag nowheel",
132
+ onPointerDown: stopAll.onPointerDown,
133
+ onKeyDown: stopAll.onKeyDown,
134
+ children: "Add First Action"
135
+ }
136
+ ) }),
137
+ /* @__PURE__ */ jsx(Handle, { type: "source", position: Position.Bottom })
138
+ ] });
139
+ };
140
+
141
+ export { ParametersNode };
142
+ //# sourceMappingURL=ParametersNode.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ParametersNode.esm.js","sources":["../../../src/components/Nodes/ParametersNode.tsx"],"sourcesContent":["import { Handle, NodeToolbar, Position } from \"@xyflow/react\";\nimport { alpha, styled, useTheme } from \"@material-ui/core/styles\";\nimport { Box, Button, Chip, Typography } from \"@material-ui/core\";\nimport SettingsIcon from \"@material-ui/icons/Settings\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport type { ParametersNodeData } from \"./types\";\nimport { ParameterTitlesNode } from \"./ParameterTitlesNode\";\nimport { createStopNodeInteraction } from \"./common/nodeInteraction\";\nimport { useParameterSectionsController } from \"./parameters/useParameterSections\";\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.warning.main,\n paletteMode === \"dark\" ? 0.18 : 0.12\n ),\n border: `1px solid ${alpha(theme.palette.warning.main, 0.35)}`,\n borderRadius: 12,\n width: 760,\n padding: theme.spacing(1.5),\n boxShadow: theme.shadows[2],\n color: theme.palette.text.primary,\n overflow: \"hidden\",\n \"&::before\": {\n content: '\"\"',\n position: \"absolute\",\n inset: 0,\n background: `linear-gradient(135deg, ${alpha(\n theme.palette.warning.light,\n paletteMode === \"dark\" ? 0.28 : 0.18\n )}, transparent 65%)`,\n pointerEvents: \"none\",\n zIndex: 0,\n },\n \"& > *\": {\n position: \"relative\",\n zIndex: 1,\n },\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.warning.main,\n paletteMode === \"dark\" ? 0.24 : 0.14\n ),\n border: `1px solid ${alpha(theme.palette.warning.main, 0.4)}`,\n };\n});\n\nexport const ParametersNode: React.FC<{ data: ParametersNodeData }> = ({\n data,\n}) => {\n const theme = useTheme();\n const paletteMode = resolvePaletteMode(theme);\n const {\n sections,\n handleSectionUpdate,\n handleFieldUpdate,\n handleAddSection,\n handleMoveSection,\n handleAddField,\n handleMoveField,\n } = useParameterSectionsController(data);\n\n const stopAll = createStopNodeInteraction();\n\n return (\n <Card>\n <Header>\n <Box\n display=\"flex\"\n alignItems=\"center\"\n style={{ gap: theme.spacing(1) }}\n >\n <SettingsIcon\n fontSize=\"small\"\n htmlColor={theme.palette.warning.dark}\n />\n <Typography variant=\"subtitle2\" noWrap>\n Parameters\n </Typography>\n </Box>\n <Chip\n size=\"small\"\n variant=\"outlined\"\n label=\"parameters\"\n style={{\n borderColor: theme.palette.warning.dark,\n color:\n paletteMode === \"dark\"\n ? theme.palette.warning.light\n : theme.palette.warning.dark,\n textTransform: \"uppercase\",\n }}\n />\n </Header>\n\n <Box mt={2}>\n <ParameterTitlesNode\n sections={sections}\n onSectionUpdate={handleSectionUpdate}\n onFieldUpdate={handleFieldUpdate}\n onAddSection={handleAddSection}\n onMoveSection={handleMoveSection}\n onAddField={handleAddField}\n onMoveField={handleMoveField}\n />\n </Box>\n\n <NodeToolbar position={Position.Bottom}>\n <Button\n variant=\"outlined\"\n size=\"small\"\n startIcon={<AddIcon fontSize=\"small\" />}\n onClick={() =>\n data.onAddNode?.({\n afterRfId: data.rfId,\n type: \"actionNode\",\n })\n }\n className=\"nodrag nowheel\"\n onPointerDown={stopAll.onPointerDown}\n onKeyDown={stopAll.onKeyDown}\n >\n Add First Action\n </Button>\n </NodeToolbar>\n\n <Handle type=\"source\" position={Position.Bottom} />\n </Card>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AAUA,MAAM,kBAAA,GAAqB,CAAC,KAAA,KACzB,KAAA,CAAM,QAAwC,IAAA,IAC/C,KAAA,CAAM,QAAQ,IAAA,IACd,OAAA;AAEF,MAAM,OAAO,MAAA,CAAO,GAAG,EAAE,CAAC,EAAE,OAAM,KAAM;AACtC,EAAA,MAAM,WAAA,GAAc,mBAAmB,KAAK,CAAA;AAC5C,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,UAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,MACV,KAAA,CAAM,QAAQ,OAAA,CAAQ,IAAA;AAAA,MACtB,WAAA,KAAgB,SAAS,IAAA,GAAO;AAAA,KAClC;AAAA,IACA,MAAA,EAAQ,aAAa,KAAA,CAAM,KAAA,CAAM,QAAQ,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAC,CAAA,CAAA;AAAA,IAC5D,YAAA,EAAc,EAAA;AAAA,IACd,KAAA,EAAO,GAAA;AAAA,IACP,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA;AAAA,IAC1B,SAAA,EAAW,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,IAC1B,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,OAAA;AAAA,IAC1B,QAAA,EAAU,QAAA;AAAA,IACV,WAAA,EAAa;AAAA,MACX,OAAA,EAAS,IAAA;AAAA,MACT,QAAA,EAAU,UAAA;AAAA,MACV,KAAA,EAAO,CAAA;AAAA,MACP,YAAY,CAAA,wBAAA,EAA2B,KAAA;AAAA,QACrC,KAAA,CAAM,QAAQ,OAAA,CAAQ,KAAA;AAAA,QACtB,WAAA,KAAgB,SAAS,IAAA,GAAO;AAAA,OACjC,CAAA,kBAAA,CAAA;AAAA,MACD,aAAA,EAAe,MAAA;AAAA,MACf,MAAA,EAAQ;AAAA,KACV;AAAA,IACA,OAAA,EAAS;AAAA,MACP,QAAA,EAAU,UAAA;AAAA,MACV,MAAA,EAAQ;AAAA;AACV,GACF;AACF,CAAC,CAAA;AAED,MAAM,SAAS,MAAA,CAAO,GAAG,EAAE,CAAC,EAAE,OAAM,KAAM;AACxC,EAAA,MAAM,WAAA,GAAc,mBAAmB,KAAK,CAAA;AAC5C,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB,eAAA;AAAA,IAChB,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,IACxB,YAAA,EAAc,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,IAC7B,YAAA,EAAc,CAAA;AAAA,IACd,eAAA,EAAiB,KAAA;AAAA,MACf,KAAA,CAAM,QAAQ,OAAA,CAAQ,IAAA;AAAA,MACtB,WAAA,KAAgB,SAAS,IAAA,GAAO;AAAA,KAClC;AAAA,IACA,MAAA,EAAQ,aAAa,KAAA,CAAM,KAAA,CAAM,QAAQ,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAC,CAAA;AAAA,GAC7D;AACF,CAAC,CAAA;AAEM,MAAM,iBAAyD,CAAC;AAAA,EACrE;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,QAAQ,QAAA,EAAS;AACvB,EAAA,MAAM,WAAA,GAAc,mBAAmB,KAAK,CAAA;AAC5C,EAAA,MAAM;AAAA,IACJ,QAAA;AAAA,IACA,mBAAA;AAAA,IACA,iBAAA;AAAA,IACA,gBAAA;AAAA,IACA,iBAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF,GAAI,+BAA+B,IAAI,CAAA;AAEvC,EAAA,MAAM,UAAU,yBAAA,EAA0B;AAE1C,EAAA,4BACG,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,MAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,IAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,MAAA;AAAA,UACR,UAAA,EAAW,QAAA;AAAA,UACX,OAAO,EAAE,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAE;AAAA,UAE/B,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAAC,YAAA;AAAA,cAAA;AAAA,gBACC,QAAA,EAAS,OAAA;AAAA,gBACT,SAAA,EAAW,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ;AAAA;AAAA,aACnC;AAAA,gCACC,UAAA,EAAA,EAAW,OAAA,EAAQ,WAAA,EAAY,MAAA,EAAM,MAAC,QAAA,EAAA,YAAA,EAEvC;AAAA;AAAA;AAAA,OACF;AAAA,sBACA,GAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,OAAA;AAAA,UACL,OAAA,EAAQ,UAAA;AAAA,UACR,KAAA,EAAM,YAAA;AAAA,UACN,KAAA,EAAO;AAAA,YACL,WAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,IAAA;AAAA,YACnC,KAAA,EACE,gBAAgB,MAAA,GACZ,KAAA,CAAM,QAAQ,OAAA,CAAQ,KAAA,GACtB,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,IAAA;AAAA,YAC5B,aAAA,EAAe;AAAA;AACjB;AAAA;AACF,KAAA,EACF,CAAA;AAAA,oBAEA,GAAA,CAAC,GAAA,EAAA,EAAI,EAAA,EAAI,CAAA,EACP,QAAA,kBAAA,GAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,QAAA;AAAA,QACA,eAAA,EAAiB,mBAAA;AAAA,QACjB,aAAA,EAAe,iBAAA;AAAA,QACf,YAAA,EAAc,gBAAA;AAAA,QACd,aAAA,EAAe,iBAAA;AAAA,QACf,UAAA,EAAY,cAAA;AAAA,QACZ,WAAA,EAAa;AAAA;AAAA,KACf,EACF,CAAA;AAAA,oBAEA,GAAA,CAAC,WAAA,EAAA,EAAY,QAAA,EAAU,QAAA,CAAS,MAAA,EAC9B,QAAA,kBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAK,OAAA;AAAA,QACL,SAAA,kBAAW,GAAA,CAAC,OAAA,EAAA,EAAQ,QAAA,EAAS,OAAA,EAAQ,CAAA;AAAA,QACrC,OAAA,EAAS,MACP,IAAA,CAAK,SAAA,GAAY;AAAA,UACf,WAAW,IAAA,CAAK,IAAA;AAAA,UAChB,IAAA,EAAM;AAAA,SACP,CAAA;AAAA,QAEH,SAAA,EAAU,gBAAA;AAAA,QACV,eAAe,OAAA,CAAQ,aAAA;AAAA,QACvB,WAAW,OAAA,CAAQ,SAAA;AAAA,QACpB,QAAA,EAAA;AAAA;AAAA,KAED,EACF,CAAA;AAAA,wBAEC,MAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,QAAA,EAAU,SAAS,MAAA,EAAQ;AAAA,GAAA,EACnD,CAAA;AAEJ;;;;"}
@@ -0,0 +1,117 @@
1
+ const capitalize = (value) => value.length > 0 ? value[0].toUpperCase() + value.slice(1) : value;
2
+ const getFirstType = (type) => {
3
+ if (!type) {
4
+ return "string";
5
+ }
6
+ const value = Array.isArray(type) ? type[0] : type;
7
+ if (value === "string" || value === "number" || value === "integer" || value === "boolean" || value === "array" || value === "object") {
8
+ return value;
9
+ }
10
+ return "string";
11
+ };
12
+ const normalizeSchemaType = (schema) => {
13
+ if (!schema || typeof schema !== "object") {
14
+ return "string";
15
+ }
16
+ return getFirstType(schema.type);
17
+ };
18
+ const getArrayItemTypeLabel = (schema) => {
19
+ if (!schema) {
20
+ return "";
21
+ }
22
+ const items = schema.items;
23
+ if (!items) {
24
+ return "";
25
+ }
26
+ if (Array.isArray(items)) {
27
+ const [first] = items;
28
+ if (!first) {
29
+ return "";
30
+ }
31
+ return capitalize(normalizeSchemaType(first));
32
+ }
33
+ return capitalize(normalizeSchemaType(items));
34
+ };
35
+ const buildTypeLabel = (schema) => {
36
+ const normalized = normalizeSchemaType(schema);
37
+ if (normalized === "array") {
38
+ const itemsLabel = getArrayItemTypeLabel(schema);
39
+ return itemsLabel ? `Array<${itemsLabel}>` : "Array";
40
+ }
41
+ if (normalized === "integer") {
42
+ return "Integer";
43
+ }
44
+ if (normalized === "unknown") {
45
+ return "Unknown";
46
+ }
47
+ return capitalize(normalized);
48
+ };
49
+ const stringifyValueForDisplay = (value, type) => {
50
+ if (value === void 0 || value === null) {
51
+ return "";
52
+ }
53
+ if (type === "array" || type === "object") {
54
+ if (typeof value === "string") {
55
+ return value;
56
+ }
57
+ try {
58
+ return JSON.stringify(value, null, 2);
59
+ } catch {
60
+ return String(value);
61
+ }
62
+ }
63
+ if (typeof value === "boolean") {
64
+ return value ? "true" : "false";
65
+ }
66
+ return String(value);
67
+ };
68
+ const coerceValueForType = (raw, type) => {
69
+ if (raw === "") {
70
+ return "";
71
+ }
72
+ if (type === "boolean") {
73
+ if (raw === "true") {
74
+ return true;
75
+ }
76
+ if (raw === "false") {
77
+ return false;
78
+ }
79
+ return raw;
80
+ }
81
+ if (type === "number" || type === "integer") {
82
+ const num = Number(raw);
83
+ if (!Number.isNaN(num)) {
84
+ return num;
85
+ }
86
+ return raw;
87
+ }
88
+ if (type === "array" || type === "object") {
89
+ try {
90
+ return JSON.parse(raw);
91
+ } catch {
92
+ return raw;
93
+ }
94
+ }
95
+ return raw;
96
+ };
97
+ const extractEnumOptions = (schema) => {
98
+ if (!schema || !Array.isArray(schema.enum)) {
99
+ return [];
100
+ }
101
+ return schema.enum.map((option) => {
102
+ if (option === void 0 || option === null) {
103
+ return "";
104
+ }
105
+ if (typeof option === "object") {
106
+ try {
107
+ return JSON.stringify(option);
108
+ } catch {
109
+ return String(option);
110
+ }
111
+ }
112
+ return String(option);
113
+ }).filter((option) => option !== "");
114
+ };
115
+
116
+ export { buildTypeLabel, coerceValueForType, extractEnumOptions, normalizeSchemaType, stringifyValueForDisplay };
117
+ //# sourceMappingURL=schema.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.esm.js","sources":["../../../../src/components/Nodes/action/schema.ts"],"sourcesContent":["export type JsonSchemaProperty = {\n type?: string | string[];\n enum?: unknown[];\n items?: JsonSchemaProperty | JsonSchemaProperty[];\n} & Record<string, unknown>;\n\nexport type NormalizedSchemaType =\n | \"string\"\n | \"number\"\n | \"integer\"\n | \"boolean\"\n | \"array\"\n | \"object\"\n | \"unknown\";\n\nconst capitalize = (value: string) =>\n value.length > 0 ? value[0].toUpperCase() + value.slice(1) : value;\n\nconst getFirstType = (\n type: string | string[] | undefined\n): NormalizedSchemaType => {\n if (!type) {\n return \"string\";\n }\n const value = Array.isArray(type) ? type[0] : type;\n if (\n value === \"string\" ||\n value === \"number\" ||\n value === \"integer\" ||\n value === \"boolean\" ||\n value === \"array\" ||\n value === \"object\"\n ) {\n return value;\n }\n return \"string\";\n};\n\nexport const normalizeSchemaType = (\n schema: JsonSchemaProperty | undefined\n): NormalizedSchemaType => {\n if (!schema || typeof schema !== \"object\") {\n return \"string\";\n }\n return getFirstType(schema.type);\n};\n\nconst getArrayItemTypeLabel = (schema: JsonSchemaProperty | undefined) => {\n if (!schema) {\n return \"\";\n }\n const items = schema.items;\n if (!items) {\n return \"\";\n }\n if (Array.isArray(items)) {\n const [first] = items;\n if (!first) {\n return \"\";\n }\n return capitalize(normalizeSchemaType(first));\n }\n return capitalize(normalizeSchemaType(items));\n};\n\nexport const buildTypeLabel = (schema: JsonSchemaProperty | undefined) => {\n const normalized = normalizeSchemaType(schema);\n if (normalized === \"array\") {\n const itemsLabel = getArrayItemTypeLabel(schema);\n return itemsLabel ? `Array<${itemsLabel}>` : \"Array\";\n }\n if (normalized === \"integer\") {\n return \"Integer\";\n }\n if (normalized === \"unknown\") {\n return \"Unknown\";\n }\n return capitalize(normalized);\n};\n\nexport const stringifyValueForDisplay = (\n value: unknown,\n type: NormalizedSchemaType\n) => {\n if (value === undefined || value === null) {\n return \"\";\n }\n\n if (type === \"array\" || type === \"object\") {\n if (typeof value === \"string\") {\n return value;\n }\n try {\n return JSON.stringify(value, null, 2);\n } catch {\n return String(value);\n }\n }\n\n if (typeof value === \"boolean\") {\n return value ? \"true\" : \"false\";\n }\n\n return String(value);\n};\n\nexport const coerceValueForType = (\n raw: string,\n type: NormalizedSchemaType\n): unknown => {\n if (raw === \"\") {\n return \"\";\n }\n\n if (type === \"boolean\") {\n if (raw === \"true\") {\n return true;\n }\n if (raw === \"false\") {\n return false;\n }\n return raw;\n }\n\n if (type === \"number\" || type === \"integer\") {\n const num = Number(raw);\n if (!Number.isNaN(num)) {\n return num;\n }\n return raw;\n }\n\n if (type === \"array\" || type === \"object\") {\n try {\n return JSON.parse(raw);\n } catch {\n return raw;\n }\n }\n\n return raw;\n};\n\nexport const extractEnumOptions = (schema: JsonSchemaProperty | undefined) => {\n if (!schema || !Array.isArray(schema.enum)) {\n return [] as string[];\n }\n return schema.enum\n .map((option): string => {\n if (option === undefined || option === null) {\n return \"\";\n }\n if (typeof option === \"object\") {\n try {\n return JSON.stringify(option);\n } catch {\n return String(option);\n }\n }\n return String(option);\n })\n .filter((option) => option !== \"\");\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import { useMemo } from 'react';
2
+ import { normalizeSchemaType, buildTypeLabel, extractEnumOptions } from './schema.esm.js';
3
+
4
+ const useActionInputs = ({
5
+ data,
6
+ step,
7
+ actionId,
8
+ newKey
9
+ }) => {
10
+ const actionInputSchema = useMemo(() => {
11
+ if (!actionId) {
12
+ return {};
13
+ }
14
+ const inputs = data.scaffolderActionInputsById?.[actionId] ?? {};
15
+ return inputs;
16
+ }, [actionId, data.scaffolderActionInputsById]);
17
+ const actionInputOptions = useMemo(() => {
18
+ return Object.entries(actionInputSchema).map(([key, schema]) => {
19
+ const normalized = normalizeSchemaType(schema);
20
+ const label = buildTypeLabel(schema);
21
+ return {
22
+ key,
23
+ label: label ? `${key} (${label})` : key,
24
+ schema,
25
+ type: normalized
26
+ };
27
+ });
28
+ }, [actionInputSchema]);
29
+ const inputEntries = useMemo(
30
+ () => Object.entries(step.input ?? {}),
31
+ [step.input]
32
+ );
33
+ const usedInputKeys = useMemo(
34
+ () => new Set(inputEntries.map(([key]) => key)),
35
+ [inputEntries]
36
+ );
37
+ const availableInputOptions = useMemo(
38
+ () => actionInputOptions.filter((option) => !usedInputKeys.has(option.key)),
39
+ [actionInputOptions, usedInputKeys]
40
+ );
41
+ const trimmedNewKey = newKey.trim();
42
+ const selectedNewKeyOption = useMemo(
43
+ () => availableInputOptions.find((option) => option.key === trimmedNewKey) ?? null,
44
+ [availableInputOptions, trimmedNewKey]
45
+ );
46
+ const newKeySchema = selectedNewKeyOption?.schema ?? (trimmedNewKey ? actionInputSchema?.[trimmedNewKey] : void 0);
47
+ const newKeyNormalizedType = normalizeSchemaType(newKeySchema);
48
+ const newKeyTypeLabel = buildTypeLabel(newKeySchema) || "String";
49
+ const newKeyEnumOptions = extractEnumOptions(newKeySchema);
50
+ return {
51
+ actionInputSchema,
52
+ actionInputOptions,
53
+ inputEntries,
54
+ usedInputKeys,
55
+ availableInputOptions,
56
+ trimmedNewKey,
57
+ selectedNewKeyOption,
58
+ newKeySchema,
59
+ newKeyNormalizedType,
60
+ newKeyTypeLabel,
61
+ newKeyEnumOptions
62
+ };
63
+ };
64
+
65
+ export { useActionInputs };
66
+ //# sourceMappingURL=useActionInputs.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useActionInputs.esm.js","sources":["../../../../src/components/Nodes/action/useActionInputs.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport type { TaskStep } from \"@backstage/plugin-scaffolder-common\";\nimport type { ActionNodeData } from \"../types\";\nimport type { JsonSchemaProperty, NormalizedSchemaType } from \"./schema\";\nimport {\n buildTypeLabel,\n extractEnumOptions,\n normalizeSchemaType,\n} from \"./schema\";\n\ntype ActionInputOption = {\n key: string;\n label: string;\n schema?: JsonSchemaProperty;\n type: NormalizedSchemaType;\n};\n\ntype UseActionInputsArgs = {\n data: ActionNodeData;\n step: TaskStep;\n actionId: string;\n newKey: string;\n};\n\nexport const useActionInputs = ({\n data,\n step,\n actionId,\n newKey,\n}: UseActionInputsArgs) => {\n const actionInputSchema = useMemo(() => {\n if (!actionId) {\n return {} as Record<string, JsonSchemaProperty>;\n }\n const inputs = (data.scaffolderActionInputsById?.[actionId] ??\n {}) as Record<string, JsonSchemaProperty>;\n return inputs;\n }, [actionId, data.scaffolderActionInputsById]);\n\n const actionInputOptions = useMemo<ActionInputOption[]>(() => {\n return Object.entries(actionInputSchema).map(([key, schema]) => {\n const normalized = normalizeSchemaType(schema);\n const label = buildTypeLabel(schema);\n return {\n key,\n label: label ? `${key} (${label})` : key,\n schema,\n type: normalized,\n };\n });\n }, [actionInputSchema]);\n\n const inputEntries = useMemo(\n () => Object.entries(step.input ?? {}),\n [step.input]\n );\n const usedInputKeys = useMemo(\n () => new Set(inputEntries.map(([key]) => key)),\n [inputEntries]\n );\n const availableInputOptions = useMemo(\n () => actionInputOptions.filter((option) => !usedInputKeys.has(option.key)),\n [actionInputOptions, usedInputKeys]\n );\n const trimmedNewKey = newKey.trim();\n const selectedNewKeyOption = useMemo(\n () =>\n availableInputOptions.find((option) => option.key === trimmedNewKey) ??\n null,\n [availableInputOptions, trimmedNewKey]\n );\n\n const newKeySchema =\n selectedNewKeyOption?.schema ??\n (trimmedNewKey ? actionInputSchema?.[trimmedNewKey] : undefined);\n const newKeyNormalizedType = normalizeSchemaType(newKeySchema);\n const newKeyTypeLabel = buildTypeLabel(newKeySchema) || \"String\";\n const newKeyEnumOptions = extractEnumOptions(newKeySchema);\n\n return {\n actionInputSchema,\n actionInputOptions,\n inputEntries,\n usedInputKeys,\n availableInputOptions,\n trimmedNewKey,\n selectedNewKeyOption,\n newKeySchema,\n newKeyNormalizedType,\n newKeyTypeLabel,\n newKeyEnumOptions,\n };\n};\n"],"names":[],"mappings":";;;AAwBO,MAAM,kBAAkB,CAAC;AAAA,EAC9B,IAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,KAA2B;AACzB,EAAA,MAAM,iBAAA,GAAoB,QAAQ,MAAM;AACtC,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,OAAO,EAAC;AAAA,IACV;AACA,IAAA,MAAM,MAAA,GAAU,IAAA,CAAK,0BAAA,GAA6B,QAAQ,KACxD,EAAC;AACH,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,EAAG,CAAC,QAAA,EAAU,IAAA,CAAK,0BAA0B,CAAC,CAAA;AAE9C,EAAA,MAAM,kBAAA,GAAqB,QAA6B,MAAM;AAC5D,IAAA,OAAO,MAAA,CAAO,QAAQ,iBAAiB,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,MAAM,CAAA,KAAM;AAC9D,MAAA,MAAM,UAAA,GAAa,oBAAoB,MAAM,CAAA;AAC7C,MAAA,MAAM,KAAA,GAAQ,eAAe,MAAM,CAAA;AACnC,MAAA,OAAO;AAAA,QACL,GAAA;AAAA,QACA,OAAO,KAAA,GAAQ,CAAA,EAAG,GAAG,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,CAAA,GAAM,GAAA;AAAA,QACrC,MAAA;AAAA,QACA,IAAA,EAAM;AAAA,OACR;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,iBAAiB,CAAC,CAAA;AAEtB,EAAA,MAAM,YAAA,GAAe,OAAA;AAAA,IACnB,MAAM,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,KAAA,IAAS,EAAE,CAAA;AAAA,IACrC,CAAC,KAAK,KAAK;AAAA,GACb;AACA,EAAA,MAAM,aAAA,GAAgB,OAAA;AAAA,IACpB,MAAM,IAAI,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,CAAC,CAAC,GAAG,CAAA,KAAM,GAAG,CAAC,CAAA;AAAA,IAC9C,CAAC,YAAY;AAAA,GACf;AACA,EAAA,MAAM,qBAAA,GAAwB,OAAA;AAAA,IAC5B,MAAM,kBAAA,CAAmB,MAAA,CAAO,CAAC,MAAA,KAAW,CAAC,aAAA,CAAc,GAAA,CAAI,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,IAC1E,CAAC,oBAAoB,aAAa;AAAA,GACpC;AACA,EAAA,MAAM,aAAA,GAAgB,OAAO,IAAA,EAAK;AAClC,EAAA,MAAM,oBAAA,GAAuB,OAAA;AAAA,IAC3B,MACE,sBAAsB,IAAA,CAAK,CAAC,WAAW,MAAA,CAAO,GAAA,KAAQ,aAAa,CAAA,IACnE,IAAA;AAAA,IACF,CAAC,uBAAuB,aAAa;AAAA,GACvC;AAEA,EAAA,MAAM,eACJ,oBAAA,EAAsB,MAAA,KACrB,aAAA,GAAgB,iBAAA,GAAoB,aAAa,CAAA,GAAI,MAAA,CAAA;AACxD,EAAA,MAAM,oBAAA,GAAuB,oBAAoB,YAAY,CAAA;AAC7D,EAAA,MAAM,eAAA,GAAkB,cAAA,CAAe,YAAY,CAAA,IAAK,QAAA;AACxD,EAAA,MAAM,iBAAA,GAAoB,mBAAmB,YAAY,CAAA;AAEzD,EAAA,OAAO;AAAA,IACL,iBAAA;AAAA,IACA,kBAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,qBAAA;AAAA,IACA,aAAA;AAAA,IACA,oBAAA;AAAA,IACA,YAAA;AAAA,IACA,oBAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}
@@ -0,0 +1,22 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import Popper from '@material-ui/core/Popper';
3
+
4
+ const AutoWidthPopper = (props) => {
5
+ const { style, anchorEl, ...restProps } = props;
6
+ const anchorWidth = anchorEl && "clientWidth" in anchorEl ? anchorEl.clientWidth : void 0;
7
+ return /* @__PURE__ */ jsx(
8
+ Popper,
9
+ {
10
+ ...restProps,
11
+ anchorEl,
12
+ style: {
13
+ ...style,
14
+ width: "auto",
15
+ minWidth: anchorWidth ?? style?.minWidth
16
+ }
17
+ }
18
+ );
19
+ };
20
+
21
+ export { AutoWidthPopper };
22
+ //# sourceMappingURL=AutoWidthPopper.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutoWidthPopper.esm.js","sources":["../../../../src/components/Nodes/common/AutoWidthPopper.tsx"],"sourcesContent":["import Popper from \"@material-ui/core/Popper\";\nimport type { PopperProps } from \"@material-ui/core/Popper\";\n\n// Popper that allows Autocomplete dropdowns to expand beyond the input width while\n// keeping a minimum width equal to the anchor element.\nexport const AutoWidthPopper = (props: PopperProps) => {\n const { style, anchorEl, ...restProps } = props;\n\n const anchorWidth =\n anchorEl && \"clientWidth\" in anchorEl\n ? (anchorEl as HTMLElement).clientWidth\n : undefined;\n\n return (\n <Popper\n {...restProps}\n anchorEl={anchorEl}\n style={{\n ...style,\n width: \"auto\",\n minWidth: anchorWidth ?? style?.minWidth,\n }}\n />\n );\n};\n"],"names":[],"mappings":";;;AAKO,MAAM,eAAA,GAAkB,CAAC,KAAA,KAAuB;AACrD,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAU,GAAG,WAAU,GAAI,KAAA;AAE1C,EAAA,MAAM,WAAA,GACJ,QAAA,IAAY,aAAA,IAAiB,QAAA,GACxB,SAAyB,WAAA,GAC1B,MAAA;AAEN,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACE,GAAG,SAAA;AAAA,MACJ,QAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACL,GAAG,KAAA;AAAA,QACH,KAAA,EAAO,MAAA;AAAA,QACP,QAAA,EAAU,eAAe,KAAA,EAAO;AAAA;AAClC;AAAA,GACF;AAEJ;;;;"}
@@ -0,0 +1,9 @@
1
+ const createStopNodeInteraction = () => ({
2
+ onPointerDown: (event) => event.stopPropagation(),
3
+ onKeyDown: (event) => event.stopPropagation(),
4
+ className: "nodrag nowheel",
5
+ inputProps: { "data-nodrag": true }
6
+ });
7
+
8
+ export { createStopNodeInteraction };
9
+ //# sourceMappingURL=nodeInteraction.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodeInteraction.esm.js","sources":["../../../../src/components/Nodes/common/nodeInteraction.ts"],"sourcesContent":["import type { KeyboardEvent, SyntheticEvent } from \"react\";\n\nexport type StopNodeInteraction = {\n onPointerDown: (event: SyntheticEvent) => void;\n onKeyDown: (event: KeyboardEvent) => void;\n className: string;\n inputProps: { [key: string]: unknown };\n};\n\nexport const createStopNodeInteraction = (): StopNodeInteraction => ({\n onPointerDown: (event: SyntheticEvent) => event.stopPropagation(),\n onKeyDown: (event: KeyboardEvent) => event.stopPropagation(),\n className: \"nodrag nowheel\",\n inputProps: { \"data-nodrag\": true },\n});\n"],"names":[],"mappings":"AASO,MAAM,4BAA4B,OAA4B;AAAA,EACnE,aAAA,EAAe,CAAC,KAAA,KAA0B,KAAA,CAAM,eAAA,EAAgB;AAAA,EAChE,SAAA,EAAW,CAAC,KAAA,KAAyB,KAAA,CAAM,eAAA,EAAgB;AAAA,EAC3D,SAAA,EAAW,gBAAA;AAAA,EACX,UAAA,EAAY,EAAE,aAAA,EAAe,IAAA;AAC/B,CAAA;;;;"}
@@ -0,0 +1,191 @@
1
+ import { useState, useMemo, useCallback } from 'react';
2
+
3
+ const BUILTIN_KEYS = /* @__PURE__ */ new Set(["links", "text"]);
4
+ const useOutputController = (data) => {
5
+ const { rfId, output } = data;
6
+ const [newCustomKey, setNewCustomKey] = useState("");
7
+ const [newCustomValue, setNewCustomValue] = useState("");
8
+ const stepOutputReferences = useMemo(
9
+ () => data.stepOutputReferences ?? [],
10
+ [data.stepOutputReferences]
11
+ );
12
+ const referenceOptions = useMemo(
13
+ () => Array.from(new Set(stepOutputReferences.filter(Boolean))),
14
+ [stepOutputReferences]
15
+ );
16
+ const links = useMemo(
17
+ () => Array.isArray(output?.links) ? [...output.links] : [],
18
+ [output?.links]
19
+ );
20
+ const textEntries = useMemo(
21
+ () => Array.isArray(output?.text) ? [...output.text] : [],
22
+ [output?.text]
23
+ );
24
+ const customEntries = useMemo(() => {
25
+ if (!output || typeof output !== "object") {
26
+ return [];
27
+ }
28
+ return Object.entries(output).filter(([key]) => !BUILTIN_KEYS.has(key));
29
+ }, [output]);
30
+ const updateOutput = useCallback(
31
+ (updater) => {
32
+ data.onUpdateOutput?.(rfId, updater);
33
+ },
34
+ [data, rfId]
35
+ );
36
+ const handleCustomValueChange = useCallback(
37
+ (key) => (event) => {
38
+ const raw = event.target.value;
39
+ updateOutput((prev) => ({
40
+ ...prev ?? {},
41
+ [key]: raw
42
+ }));
43
+ },
44
+ [updateOutput]
45
+ );
46
+ const handleRemoveCustom = useCallback(
47
+ (key) => {
48
+ updateOutput((prev) => {
49
+ const next = { ...prev ?? {} };
50
+ delete next[key];
51
+ return next;
52
+ });
53
+ },
54
+ [updateOutput]
55
+ );
56
+ const handleAddCustom = useCallback(() => {
57
+ const trimmedKey = newCustomKey.trim();
58
+ if (!trimmedKey || BUILTIN_KEYS.has(trimmedKey)) {
59
+ return;
60
+ }
61
+ updateOutput((prev) => {
62
+ if (prev && Object.prototype.hasOwnProperty.call(prev, trimmedKey)) {
63
+ return prev;
64
+ }
65
+ return {
66
+ ...prev ?? {},
67
+ [trimmedKey]: newCustomValue
68
+ };
69
+ });
70
+ setNewCustomKey("");
71
+ setNewCustomValue("");
72
+ }, [newCustomKey, newCustomValue, updateOutput]);
73
+ const setLinkFieldValue = useCallback(
74
+ (index, field, value) => {
75
+ const normalized = value ?? "";
76
+ updateOutput((prev) => {
77
+ const currentLinks = Array.isArray(prev?.links) ? [...prev.links] : [];
78
+ const target = { ...currentLinks[index] ?? {} };
79
+ target[field] = normalized;
80
+ currentLinks[index] = target;
81
+ return { ...prev ?? {}, links: currentLinks };
82
+ });
83
+ },
84
+ [updateOutput]
85
+ );
86
+ const handleLinkChange = useCallback(
87
+ (index, field) => (event) => {
88
+ setLinkFieldValue(index, field, event.target.value);
89
+ },
90
+ [setLinkFieldValue]
91
+ );
92
+ const handleRemoveLink = useCallback(
93
+ (index) => {
94
+ updateOutput((prev) => {
95
+ const currentLinks = Array.isArray(prev?.links) ? [...prev.links] : [];
96
+ currentLinks.splice(index, 1);
97
+ if (!currentLinks.length) {
98
+ const { links: _omit, ...rest } = prev ?? {};
99
+ return rest;
100
+ }
101
+ return { ...prev ?? {}, links: currentLinks };
102
+ });
103
+ },
104
+ [updateOutput]
105
+ );
106
+ const handleAddLink = useCallback(() => {
107
+ updateOutput((prev) => {
108
+ const currentLinks = Array.isArray(prev?.links) ? [...prev.links] : [];
109
+ currentLinks.push({ title: "", url: "" });
110
+ return { ...prev ?? {}, links: currentLinks };
111
+ });
112
+ }, [updateOutput]);
113
+ const setTextFieldValue = useCallback(
114
+ (index, field, value) => {
115
+ const normalized = value ?? "";
116
+ updateOutput((prev) => {
117
+ const currentText = Array.isArray(prev?.text) ? [...prev.text] : [];
118
+ const target = { ...currentText[index] ?? {} };
119
+ target[field] = normalized;
120
+ currentText[index] = target;
121
+ return { ...prev ?? {}, text: currentText };
122
+ });
123
+ },
124
+ [updateOutput]
125
+ );
126
+ const handleTextChange = useCallback(
127
+ (index, field) => (event) => {
128
+ setTextFieldValue(index, field, event.target.value);
129
+ },
130
+ [setTextFieldValue]
131
+ );
132
+ const handleTextDefaultToggle = useCallback(
133
+ (index) => {
134
+ updateOutput((prev) => {
135
+ const currentText = Array.isArray(prev?.text) ? [...prev.text] : [];
136
+ const target = { ...currentText[index] ?? {} };
137
+ target.default = !target.default;
138
+ currentText[index] = target;
139
+ return { ...prev ?? {}, text: currentText };
140
+ });
141
+ },
142
+ [updateOutput]
143
+ );
144
+ const handleRemoveText = useCallback(
145
+ (index) => {
146
+ updateOutput((prev) => {
147
+ const currentText = Array.isArray(prev?.text) ? [...prev.text] : [];
148
+ currentText.splice(index, 1);
149
+ if (!currentText.length) {
150
+ const { text: _omit, ...rest } = prev ?? {};
151
+ return rest;
152
+ }
153
+ return { ...prev ?? {}, text: currentText };
154
+ });
155
+ },
156
+ [updateOutput]
157
+ );
158
+ const handleAddText = useCallback(() => {
159
+ updateOutput((prev) => {
160
+ const currentText = Array.isArray(prev?.text) ? [...prev.text] : [];
161
+ currentText.push({ title: "", content: "" });
162
+ return { ...prev ?? {}, text: currentText };
163
+ });
164
+ }, [updateOutput]);
165
+ return {
166
+ stepOutputReferences,
167
+ referenceOptions,
168
+ links,
169
+ textEntries,
170
+ customEntries,
171
+ newCustomKey,
172
+ setNewCustomKey,
173
+ newCustomValue,
174
+ setNewCustomValue,
175
+ handleAddCustom,
176
+ handleCustomValueChange,
177
+ handleRemoveCustom,
178
+ setLinkFieldValue,
179
+ handleLinkChange,
180
+ handleAddLink,
181
+ handleRemoveLink,
182
+ setTextFieldValue,
183
+ handleTextChange,
184
+ handleTextDefaultToggle,
185
+ handleAddText,
186
+ handleRemoveText
187
+ };
188
+ };
189
+
190
+ export { useOutputController };
191
+ //# sourceMappingURL=useOutputController.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOutputController.esm.js","sources":["../../../../src/components/Nodes/output/useOutputController.ts"],"sourcesContent":["import { useCallback, useMemo, useState } from \"react\";\nimport type { ChangeEvent } from \"react\";\nimport type { OutputNodeData } from \"../types\";\n\nconst BUILTIN_KEYS = new Set([\"links\", \"text\"]);\n\ntype LinkField = \"title\" | \"icon\" | \"url\" | \"entityRef\";\ntype TextField = \"title\" | \"icon\" | \"content\";\n\ntype UpdateFn<T> = (index: number, field: T, value: string) => void;\n\nexport const useOutputController = (data: OutputNodeData) => {\n const { rfId, output } = data;\n const [newCustomKey, setNewCustomKey] = useState(\"\");\n const [newCustomValue, setNewCustomValue] = useState(\"\");\n\n const stepOutputReferences = useMemo(\n () => data.stepOutputReferences ?? [],\n [data.stepOutputReferences]\n );\n const referenceOptions = useMemo(\n () => Array.from(new Set(stepOutputReferences.filter(Boolean))),\n [stepOutputReferences]\n );\n\n const links = useMemo(\n () => (Array.isArray(output?.links) ? [...output.links] : []),\n [output?.links]\n );\n const textEntries = useMemo(\n () => (Array.isArray(output?.text) ? [...output.text] : []),\n [output?.text]\n );\n const customEntries = useMemo(() => {\n if (!output || typeof output !== \"object\") {\n return [] as Array<[string, unknown]>;\n }\n return Object.entries(output).filter(([key]) => !BUILTIN_KEYS.has(key));\n }, [output]);\n\n const updateOutput = useCallback(\n (\n updater: (prev: OutputNodeData[\"output\"]) => OutputNodeData[\"output\"]\n ): void => {\n data.onUpdateOutput?.(rfId, updater);\n },\n [data, rfId]\n );\n\n const handleCustomValueChange = useCallback(\n (key: string) => (event: ChangeEvent<HTMLInputElement>) => {\n const raw = event.target.value;\n updateOutput((prev) => ({\n ...(prev ?? {}),\n [key]: raw,\n }));\n },\n [updateOutput]\n );\n\n const handleRemoveCustom = useCallback(\n (key: string) => {\n updateOutput((prev) => {\n const next = { ...(prev ?? {}) };\n delete next[key];\n return next;\n });\n },\n [updateOutput]\n );\n\n const handleAddCustom = useCallback(() => {\n const trimmedKey = newCustomKey.trim();\n if (!trimmedKey || BUILTIN_KEYS.has(trimmedKey)) {\n return;\n }\n updateOutput((prev) => {\n if (prev && Object.prototype.hasOwnProperty.call(prev, trimmedKey)) {\n return prev;\n }\n return {\n ...(prev ?? {}),\n [trimmedKey]: newCustomValue,\n };\n });\n setNewCustomKey(\"\");\n setNewCustomValue(\"\");\n }, [newCustomKey, newCustomValue, updateOutput]);\n\n const setLinkFieldValue = useCallback<UpdateFn<LinkField>>(\n (index, field, value) => {\n const normalized = value ?? \"\";\n updateOutput((prev) => {\n const currentLinks = Array.isArray(prev?.links) ? [...prev.links] : [];\n const target = { ...(currentLinks[index] ?? {}) };\n target[field] = normalized;\n currentLinks[index] = target;\n return { ...(prev ?? {}), links: currentLinks };\n });\n },\n [updateOutput]\n );\n\n const handleLinkChange = useCallback(\n (index: number, field: LinkField) =>\n (event: ChangeEvent<HTMLInputElement>) => {\n setLinkFieldValue(index, field, event.target.value);\n },\n [setLinkFieldValue]\n );\n\n const handleRemoveLink = useCallback(\n (index: number) => {\n updateOutput((prev) => {\n const currentLinks = Array.isArray(prev?.links) ? [...prev.links] : [];\n currentLinks.splice(index, 1);\n if (!currentLinks.length) {\n const { links: _omit, ...rest } = prev ?? {};\n return rest;\n }\n return { ...(prev ?? {}), links: currentLinks };\n });\n },\n [updateOutput]\n );\n\n const handleAddLink = useCallback(() => {\n updateOutput((prev) => {\n const currentLinks = Array.isArray(prev?.links) ? [...prev.links] : [];\n currentLinks.push({ title: \"\", url: \"\" });\n return { ...(prev ?? {}), links: currentLinks };\n });\n }, [updateOutput]);\n\n const setTextFieldValue = useCallback<UpdateFn<TextField>>(\n (index, field, value) => {\n const normalized = value ?? \"\";\n updateOutput((prev) => {\n const currentText = Array.isArray(prev?.text) ? [...prev.text] : [];\n const target = { ...(currentText[index] ?? {}) };\n target[field] = normalized;\n currentText[index] = target;\n return { ...(prev ?? {}), text: currentText };\n });\n },\n [updateOutput]\n );\n\n const handleTextChange = useCallback(\n (index: number, field: TextField) =>\n (event: ChangeEvent<HTMLInputElement>) => {\n setTextFieldValue(index, field, event.target.value);\n },\n [setTextFieldValue]\n );\n\n const handleTextDefaultToggle = useCallback(\n (index: number) => {\n updateOutput((prev) => {\n const currentText = Array.isArray(prev?.text) ? [...prev.text] : [];\n const target = { ...(currentText[index] ?? {}) };\n target.default = !target.default;\n currentText[index] = target;\n return { ...(prev ?? {}), text: currentText };\n });\n },\n [updateOutput]\n );\n\n const handleRemoveText = useCallback(\n (index: number) => {\n updateOutput((prev) => {\n const currentText = Array.isArray(prev?.text) ? [...prev.text] : [];\n currentText.splice(index, 1);\n if (!currentText.length) {\n const { text: _omit, ...rest } = prev ?? {};\n return rest;\n }\n return { ...(prev ?? {}), text: currentText };\n });\n },\n [updateOutput]\n );\n\n const handleAddText = useCallback(() => {\n updateOutput((prev) => {\n const currentText = Array.isArray(prev?.text) ? [...prev.text] : [];\n currentText.push({ title: \"\", content: \"\" });\n return { ...(prev ?? {}), text: currentText };\n });\n }, [updateOutput]);\n\n return {\n stepOutputReferences,\n referenceOptions,\n links,\n textEntries,\n customEntries,\n newCustomKey,\n setNewCustomKey,\n newCustomValue,\n setNewCustomValue,\n handleAddCustom,\n handleCustomValueChange,\n handleRemoveCustom,\n setLinkFieldValue,\n handleLinkChange,\n handleAddLink,\n handleRemoveLink,\n setTextFieldValue,\n handleTextChange,\n handleTextDefaultToggle,\n handleAddText,\n handleRemoveText,\n };\n};\n"],"names":[],"mappings":"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"}