@tduniec/plugin-template-designer 0.3.0 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +2 -2
- package/dist/alpha.esm.js +2 -2
- package/dist/alpha.esm.js.map +1 -1
- package/dist/components/DesignerFlow/DesignerFlow.esm.js +97 -54
- package/dist/components/DesignerFlow/DesignerFlow.esm.js.map +1 -1
- package/dist/components/DesignerFlow/handlers.esm.js +14 -3
- package/dist/components/DesignerFlow/handlers.esm.js.map +1 -1
- package/dist/components/Nodes/ActionNode.esm.js +6 -4
- package/dist/components/Nodes/ActionNode.esm.js.map +1 -1
- package/dist/components/Nodes/OutputNode.esm.js +3 -1
- package/dist/components/Nodes/OutputNode.esm.js.map +1 -1
- package/dist/components/Nodes/ParametersNode.esm.js +3 -1
- package/dist/components/Nodes/ParametersNode.esm.js.map +1 -1
- package/dist/components/Nodes/action/schema.esm.js +36 -9
- package/dist/components/Nodes/action/schema.esm.js.map +1 -1
- package/dist/components/TemplateDesigner/TemplateDesigner.esm.js +70 -46
- package/dist/components/TemplateDesigner/TemplateDesigner.esm.js.map +1 -1
- package/dist/components/TemplateDesigner/components/FieldEditorDialog.esm.js +42 -19
- package/dist/components/TemplateDesigner/components/FieldEditorDialog.esm.js.map +1 -1
- package/dist/components/TemplateDesigner/components/TemplateLanding.esm.js +1 -0
- package/dist/components/TemplateDesigner/components/TemplateLanding.esm.js.map +1 -1
- package/dist/components/TemplateDesigner/components/TemplateWorkspace.esm.js +224 -174
- package/dist/components/TemplateDesigner/components/TemplateWorkspace.esm.js.map +1 -1
- package/dist/components/TemplateDesigner/components/codemirrorTheme.esm.js +30 -0
- package/dist/components/TemplateDesigner/components/codemirrorTheme.esm.js.map +1 -0
- package/dist/components/TemplateDesigner/useFieldEditor.esm.js +31 -32
- package/dist/components/TemplateDesigner/useFieldEditor.esm.js.map +1 -1
- package/dist/components/TemplateDesigner/useTemplateState.esm.js +253 -53
- package/dist/components/TemplateDesigner/useTemplateState.esm.js.map +1 -1
- package/dist/components/TemplateDesignerIcon.esm.js +33 -0
- package/dist/components/TemplateDesignerIcon.esm.js.map +1 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.esm.js +1 -0
- package/dist/index.esm.js.map +1 -1
- package/dist/package.json.esm.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.esm.js","sources":["../../../src/components/DesignerFlow/handlers.ts"],"sourcesContent":["import type { Dispatch, SetStateAction } from \"react\";\nimport type { Edge, Node } from \"@xyflow/react\";\nimport type { TaskStep } from \"@backstage/plugin-scaffolder-common\";\n\n// Stateful handlers that mutate nodes/edges in response to user interactions.\nimport type {\n ActionNodeData,\n AddNodeConfig,\n DesignerNodeType,\n OutputNodeData,\n ParametersNodeData,\n ParameterSectionDisplay,\n TemplateParametersValue,\n} from \"../Nodes/types\";\nimport { createSequentialEdges } from \"../../utils/createSequentialEdges\";\nimport {\n normalizeParametersToSections,\n sanitizeSections,\n sectionsToParametersValue,\n} from \"./parameterTransforms\";\nimport { alignNodes } from \"./nodeLayout\";\n\ntype SetNodes = Dispatch<SetStateAction<Node[]>>;\ntype SetEdges = Dispatch<SetStateAction<Edge[]>>;\n\ninterface CreateHandleAddNodeOptions {\n fixedXPosition: number;\n verticalSpacing: number;\n nodeDefaults: Partial<Node>;\n scaffolderActionIds: string[];\n scaffolderActionInputsById: Record<string, Record<string, unknown>>;\n scaffolderActionInputRequiredById: Record<string, string[]>;\n scaffolderActionOutputsById: Record<string, Record<string, unknown>>;\n}\n\ninterface CreateHandleRemoveNodeOptions {\n fixedXPosition: number;\n verticalSpacing: number;\n}\n\nconst orderNodes = (\n parameterNodes: Node[],\n actionNodes: Node[],\n outputNodes: Node[]\n) => [...parameterNodes, ...actionNodes, ...outputNodes];\n\nexport const createHandleAddNode = (\n setNodes: SetNodes,\n setEdges: SetEdges,\n options: CreateHandleAddNodeOptions\n) => {\n const {\n fixedXPosition,\n verticalSpacing,\n nodeDefaults,\n scaffolderActionIds,\n scaffolderActionInputsById,\n scaffolderActionInputRequiredById,\n scaffolderActionOutputsById,\n } = options;\n\n return (config: AddNodeConfig) => {\n const {\n afterRfId,\n type = \"actionNode\",\n stepTemplate,\n outputTemplate,\n parametersTemplate,\n } = config;\n const nodeType: DesignerNodeType = type;\n\n setNodes((nodes) => {\n const parameterNodes = nodes.filter((n) => n.type === \"parametersNode\");\n const actionNodes = nodes.filter((n) => n.type === \"actionNode\");\n const outputNodes = nodes.filter((n) => n.type === \"outputNode\");\n\n const composeAndAlign = (\n nextParameters: Node[],\n nextActions: Node[],\n nextOutputs: Node[]\n ) => {\n const ordered = orderNodes(nextParameters, nextActions, nextOutputs);\n const aligned = alignNodes(ordered, fixedXPosition, verticalSpacing);\n setEdges(createSequentialEdges(aligned));\n return aligned;\n };\n\n if (nodeType === \"parametersNode\") {\n if (parameterNodes.length > 0) {\n return composeAndAlign(parameterNodes, actionNodes, outputNodes);\n }\n\n const rfParametersId = \"rf-parameters\";\n const initialParameters =\n parametersTemplate !== undefined\n ? (JSON.parse(\n JSON.stringify(parametersTemplate)\n ) as TemplateParametersValue)\n : undefined;\n\n const parameterNode: Node = {\n id: rfParametersId,\n type: \"parametersNode\",\n position: { x: fixedXPosition, y: 0 },\n data: {\n rfId: rfParametersId,\n parameters: initialParameters,\n sections: [],\n scaffolderActionIds,\n scaffolderActionInputsById,\n scaffolderActionInputRequiredById,\n scaffolderActionOutputsById,\n } satisfies ParametersNodeData,\n ...nodeDefaults,\n };\n\n return composeAndAlign([parameterNode], actionNodes, outputNodes);\n }\n\n if (nodeType === \"outputNode\") {\n if (outputNodes.length > 0) {\n return composeAndAlign(parameterNodes, actionNodes, outputNodes);\n }\n\n const rfOutputId = \"rf-output\";\n const initialOutput =\n outputTemplate !== undefined && outputTemplate !== null\n ? (JSON.parse(JSON.stringify(outputTemplate)) as Record<\n string,\n unknown\n >)\n : {};\n\n const outputNode: Node = {\n id: rfOutputId,\n type: \"outputNode\",\n position: { x: fixedXPosition, y: 0 },\n data: {\n rfId: rfOutputId,\n output: initialOutput,\n scaffolderActionIds,\n scaffolderActionInputsById,\n scaffolderActionInputRequiredById,\n scaffolderActionOutputsById,\n },\n ...nodeDefaults,\n };\n\n return composeAndAlign(parameterNodes, actionNodes, [\n ...outputNodes,\n outputNode,\n ]);\n }\n\n const parametersPlaceholder = nodes.find(\n (n) => n.type === \"parametersNode\"\n );\n const parametersNodeId = parametersPlaceholder?.id ?? null;\n const parentIndex = actionNodes.findIndex((n) => n.id === afterRfId);\n let insertIndex: number;\n if (parentIndex >= 0) {\n insertIndex = parentIndex + 1;\n } else if (afterRfId === parametersNodeId) {\n insertIndex = 0;\n } else {\n insertIndex = actionNodes.length;\n }\n\n const rfId = `rf-${Date.now()}`;\n const stepDefaults: TaskStep = {\n id: `step-${rfId}`,\n name: \"New Step\",\n action: \"\",\n input: {},\n };\n\n const newStep: TaskStep = {\n ...stepDefaults,\n ...(stepTemplate ?? {}),\n };\n\n const newNode: Node = {\n id: rfId,\n type: \"actionNode\",\n position: { x: fixedXPosition, y: 0 },\n data: {\n rfId,\n step: newStep,\n scaffolderActionIds,\n scaffolderActionInputsById,\n scaffolderActionInputRequiredById,\n scaffolderActionOutputsById,\n },\n ...nodeDefaults,\n };\n\n const nextActionNodes = [\n ...actionNodes.slice(0, insertIndex),\n newNode,\n ...actionNodes.slice(insertIndex),\n ];\n\n return composeAndAlign(parameterNodes, nextActionNodes, outputNodes);\n });\n };\n};\n\nexport const createHandleRemoveNode = (\n setNodes: SetNodes,\n setEdges: SetEdges,\n options: CreateHandleRemoveNodeOptions\n) => {\n const { fixedXPosition, verticalSpacing } = options;\n\n return (rfId: string) => {\n setNodes((nodes) => {\n const targetNode = nodes.find((node) => node.id === rfId);\n if (!targetNode || targetNode.type !== \"actionNode\") {\n return nodes;\n }\n\n const remainingNodes = nodes.filter((node) => node.id !== rfId);\n const alignedNodes = alignNodes(\n remainingNodes,\n fixedXPosition,\n verticalSpacing\n );\n setEdges(createSequentialEdges(alignedNodes));\n return alignedNodes;\n });\n };\n};\n\nexport const createHandleRemoveInputKey = (setNodes: SetNodes) => {\n return (rfId: string, key: string) => {\n setNodes((nds) =>\n nds.map((n) => {\n if (n.id !== rfId) {\n return n;\n }\n\n const data = n.data as Partial<ActionNodeData>;\n if (!data.step) {\n return n;\n }\n const nextInput = { ...(data.step.input ?? {}) };\n delete nextInput[key];\n const step = { ...data.step, input: nextInput };\n\n return { ...n, data: { ...data, step } };\n })\n );\n };\n};\n\nexport const createHandleReorderAndAlignNodes = (\n setNodes: SetNodes,\n setEdges: SetEdges,\n options: { fixedXPosition: number; verticalSpacing: number }\n) => {\n const { fixedXPosition, verticalSpacing } = options;\n\n return (updatedNode: Node) => {\n setNodes((prevNodes) => {\n const updatedNodes = prevNodes.map((node) =>\n node.id === updatedNode.id ? updatedNode : node\n );\n\n const parameterNodes = updatedNodes\n .filter((node) => node.type === \"parametersNode\")\n .sort((a, b) => a.position.y - b.position.y);\n const actionNodes = updatedNodes\n .filter((node) => node.type === \"actionNode\")\n .sort((a, b) => a.position.y - b.position.y);\n const outputNodes = updatedNodes\n .filter((node) => node.type === \"outputNode\")\n .sort((a, b) => a.position.y - b.position.y);\n\n const ordered = orderNodes(parameterNodes, actionNodes, outputNodes);\n const aligned = alignNodes(ordered, fixedXPosition, verticalSpacing);\n\n setEdges(createSequentialEdges(aligned));\n return aligned;\n });\n };\n};\n\nexport const createHandleUpdateField = (setNodes: SetNodes) => {\n return (rfId: string, field: keyof TaskStep, value: string) => {\n setNodes((nds) =>\n nds.map((n) => {\n if (n.id !== rfId) {\n return n;\n }\n\n const data = n.data as Partial<ActionNodeData>;\n if (!data.step) {\n return n;\n }\n const step = { ...data.step, [field]: value };\n\n return { ...n, data: { ...data, step } };\n })\n );\n };\n};\n\nexport const createHandleUpdateInput = (setNodes: SetNodes) => {\n return (rfId: string, key: string, value: unknown) => {\n setNodes((nds) =>\n nds.map((n) => {\n if (n.id !== rfId) {\n return n;\n }\n\n const data = n.data as Partial<ActionNodeData>;\n if (!data.step) {\n return n;\n }\n const nextInput = { ...(data.step.input ?? {}), [key]: value };\n const step = { ...data.step, input: nextInput };\n\n return { ...n, data: { ...data, step } };\n })\n );\n };\n};\n\nexport const collectStepOutputReferences = (\n nodes: Node[],\n parameterReferences: string[]\n): Record<string, string[]> => {\n const referencesByNode: Record<string, string[]> = {};\n const sortedNodes = [...nodes].sort((a, b) => a.position.y - b.position.y);\n const accumulatedReferences: string[] = [...parameterReferences];\n const accumulatedSet = new Set<string>(parameterReferences);\n\n sortedNodes.forEach((node) => {\n referencesByNode[node.id] = [...accumulatedReferences];\n\n const data = node.data as Partial<ActionNodeData> | undefined;\n if (!data || !data.step) {\n return;\n }\n\n const { step, scaffolderActionOutputsById } = data;\n const stepId =\n step && typeof step.id === \"string\" && step.id.trim().length > 0\n ? step.id\n : null;\n const actionId =\n step && typeof step.action === \"string\" && step.action.trim().length > 0\n ? step.action\n : null;\n\n if (!stepId || !actionId) {\n return;\n }\n\n const outputKeys = new Set<string>();\n const schemaOutputs = scaffolderActionOutputsById?.[actionId];\n if (schemaOutputs && typeof schemaOutputs === \"object\") {\n Object.keys(schemaOutputs).forEach((key) => {\n if (key) {\n outputKeys.add(key);\n }\n });\n }\n\n const stepOutput = (step as { output?: Record<string, unknown> }).output;\n if (stepOutput && typeof stepOutput === \"object\") {\n Object.keys(stepOutput).forEach((key) => {\n if (key) {\n outputKeys.add(key);\n }\n });\n }\n\n outputKeys.forEach((outputKey) => {\n const reference = `\\${{ steps['${stepId}'].output.${outputKey} }}`;\n if (!accumulatedSet.has(reference)) {\n accumulatedSet.add(reference);\n accumulatedReferences.push(reference);\n }\n });\n });\n\n return referencesByNode;\n};\n\nexport const createHandleUpdateOutput = (setNodes: SetNodes) => {\n return (\n rfId: string,\n updater: (prev: OutputNodeData[\"output\"]) => OutputNodeData[\"output\"]\n ) => {\n setNodes((nodes) =>\n nodes.map((node) => {\n if (node.id !== rfId || node.type !== \"outputNode\") {\n return node;\n }\n const data = node.data as OutputNodeData;\n const nextOutput = updater(data.output ?? {});\n return {\n ...node,\n data: {\n ...data,\n output: nextOutput,\n },\n };\n })\n );\n };\n};\n\nexport const createHandleUpdateSections = (setNodes: SetNodes) => {\n return (\n rfId: string,\n updater: (prev: ParameterSectionDisplay[]) => ParameterSectionDisplay[]\n ) => {\n setNodes((nodes) =>\n nodes.map((node) => {\n if (node.id !== rfId || node.type !== \"parametersNode\") {\n return node;\n }\n const data = node.data as ParametersNodeData;\n const previousSections =\n data.sections ?? normalizeParametersToSections(data.parameters);\n const nextSections = sanitizeSections(updater(previousSections));\n const nextParameters = sectionsToParametersValue(nextSections);\n return {\n ...node,\n data: {\n ...data,\n sections: nextSections,\n parameters: nextParameters,\n },\n };\n })\n );\n };\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"handlers.esm.js","sources":["../../../src/components/DesignerFlow/handlers.ts"],"sourcesContent":["import type { Dispatch, SetStateAction } from \"react\";\nimport type { Edge, Node } from \"@xyflow/react\";\nimport type { TaskStep } from \"@backstage/plugin-scaffolder-common\";\n\n// Stateful handlers that mutate nodes/edges in response to user interactions.\nimport type {\n ActionNodeData,\n AddNodeConfig,\n DesignerNodeType,\n OutputNodeData,\n ParametersNodeData,\n ParameterSectionDisplay,\n TemplateParametersValue,\n} from \"../Nodes/types\";\nimport { createSequentialEdges } from \"../../utils/createSequentialEdges\";\nimport {\n normalizeParametersToSections,\n sanitizeSections,\n sectionsToParametersValue,\n} from \"./parameterTransforms\";\nimport { alignNodes } from \"./nodeLayout\";\n\ntype SetNodes = Dispatch<SetStateAction<Node[]>>;\ntype SetEdges = Dispatch<SetStateAction<Edge[]>>;\n\ninterface CreateHandleAddNodeOptions {\n fixedXPosition: number;\n verticalSpacing: number;\n nodeDefaults: Partial<Node>;\n scaffolderActionIds: string[];\n scaffolderActionInputsById: Record<string, Record<string, unknown>>;\n scaffolderActionInputRequiredById: Record<string, string[]>;\n scaffolderActionOutputsById: Record<string, Record<string, unknown>>;\n}\n\ninterface CreateHandleRemoveNodeOptions {\n fixedXPosition: number;\n verticalSpacing: number;\n}\n\nconst orderNodes = (\n parameterNodes: Node[],\n actionNodes: Node[],\n outputNodes: Node[]\n) => [...parameterNodes, ...actionNodes, ...outputNodes];\n\nconst setSequentialEdgesIfChanged = (\n setEdges: SetEdges,\n alignedNodes: Node[]\n) => {\n setEdges((prevEdges) => {\n const nextEdges = createSequentialEdges(alignedNodes);\n if (\n prevEdges.length === nextEdges.length &&\n prevEdges.every(\n (edge, index) =>\n edge.source === nextEdges[index]?.source &&\n edge.target === nextEdges[index]?.target\n )\n ) {\n return prevEdges;\n }\n return nextEdges;\n });\n};\n\nexport const createHandleAddNode = (\n setNodes: SetNodes,\n setEdges: SetEdges,\n options: CreateHandleAddNodeOptions\n) => {\n const {\n fixedXPosition,\n verticalSpacing,\n nodeDefaults,\n scaffolderActionIds,\n scaffolderActionInputsById,\n scaffolderActionInputRequiredById,\n scaffolderActionOutputsById,\n } = options;\n\n return (config: AddNodeConfig) => {\n const {\n afterRfId,\n type = \"actionNode\",\n stepTemplate,\n outputTemplate,\n parametersTemplate,\n } = config;\n const nodeType: DesignerNodeType = type;\n\n setNodes((nodes) => {\n const parameterNodes = nodes.filter((n) => n.type === \"parametersNode\");\n const actionNodes = nodes.filter((n) => n.type === \"actionNode\");\n const outputNodes = nodes.filter((n) => n.type === \"outputNode\");\n\n const composeAndAlign = (\n nextParameters: Node[],\n nextActions: Node[],\n nextOutputs: Node[]\n ) => {\n const ordered = orderNodes(nextParameters, nextActions, nextOutputs);\n const aligned = alignNodes(ordered, fixedXPosition, verticalSpacing);\n setSequentialEdgesIfChanged(setEdges, aligned);\n return aligned;\n };\n\n if (nodeType === \"parametersNode\") {\n if (parameterNodes.length > 0) {\n return composeAndAlign(parameterNodes, actionNodes, outputNodes);\n }\n\n const rfParametersId = \"rf-parameters\";\n const initialParameters =\n parametersTemplate !== undefined\n ? (JSON.parse(\n JSON.stringify(parametersTemplate)\n ) as TemplateParametersValue)\n : undefined;\n\n const parameterNode: Node = {\n id: rfParametersId,\n type: \"parametersNode\",\n position: { x: fixedXPosition, y: 0 },\n data: {\n rfId: rfParametersId,\n parameters: initialParameters,\n sections: [],\n scaffolderActionIds,\n scaffolderActionInputsById,\n scaffolderActionInputRequiredById,\n scaffolderActionOutputsById,\n } satisfies ParametersNodeData,\n ...nodeDefaults,\n };\n\n return composeAndAlign([parameterNode], actionNodes, outputNodes);\n }\n\n if (nodeType === \"outputNode\") {\n if (outputNodes.length > 0) {\n return composeAndAlign(parameterNodes, actionNodes, outputNodes);\n }\n\n const rfOutputId = \"rf-output\";\n const initialOutput =\n outputTemplate !== undefined && outputTemplate !== null\n ? (JSON.parse(JSON.stringify(outputTemplate)) as Record<\n string,\n unknown\n >)\n : {};\n\n const outputNode: Node = {\n id: rfOutputId,\n type: \"outputNode\",\n position: { x: fixedXPosition, y: 0 },\n data: {\n rfId: rfOutputId,\n output: initialOutput,\n scaffolderActionIds,\n scaffolderActionInputsById,\n scaffolderActionInputRequiredById,\n scaffolderActionOutputsById,\n },\n ...nodeDefaults,\n };\n\n return composeAndAlign(parameterNodes, actionNodes, [\n ...outputNodes,\n outputNode,\n ]);\n }\n\n const parametersPlaceholder = nodes.find(\n (n) => n.type === \"parametersNode\"\n );\n const parametersNodeId = parametersPlaceholder?.id ?? null;\n const parentIndex = actionNodes.findIndex((n) => n.id === afterRfId);\n let insertIndex: number;\n if (parentIndex >= 0) {\n insertIndex = parentIndex + 1;\n } else if (afterRfId === parametersNodeId) {\n insertIndex = 0;\n } else {\n insertIndex = actionNodes.length;\n }\n\n const rfId = `rf-${Date.now()}`;\n const stepDefaults: TaskStep = {\n id: `step-${rfId}`,\n name: \"New Step\",\n action: \"\",\n input: {},\n };\n\n const newStep: TaskStep = {\n ...stepDefaults,\n ...(stepTemplate ?? {}),\n };\n\n const newNode: Node = {\n id: rfId,\n type: \"actionNode\",\n position: { x: fixedXPosition, y: 0 },\n data: {\n rfId,\n step: newStep,\n scaffolderActionIds,\n scaffolderActionInputsById,\n scaffolderActionInputRequiredById,\n scaffolderActionOutputsById,\n },\n ...nodeDefaults,\n };\n\n const nextActionNodes = [\n ...actionNodes.slice(0, insertIndex),\n newNode,\n ...actionNodes.slice(insertIndex),\n ];\n\n return composeAndAlign(parameterNodes, nextActionNodes, outputNodes);\n });\n };\n};\n\nexport const createHandleRemoveNode = (\n setNodes: SetNodes,\n setEdges: SetEdges,\n options: CreateHandleRemoveNodeOptions\n) => {\n const { fixedXPosition, verticalSpacing } = options;\n\n return (rfId: string) => {\n setNodes((nodes) => {\n const targetNode = nodes.find((node) => node.id === rfId);\n if (!targetNode || targetNode.type !== \"actionNode\") {\n return nodes;\n }\n\n const remainingNodes = nodes.filter((node) => node.id !== rfId);\n const alignedNodes = alignNodes(\n remainingNodes,\n fixedXPosition,\n verticalSpacing\n );\n setSequentialEdgesIfChanged(setEdges, alignedNodes);\n return alignedNodes;\n });\n };\n};\n\nexport const createHandleRemoveInputKey = (setNodes: SetNodes) => {\n return (rfId: string, key: string) => {\n setNodes((nds) =>\n nds.map((n) => {\n if (n.id !== rfId) {\n return n;\n }\n\n const data = n.data as Partial<ActionNodeData>;\n if (!data.step) {\n return n;\n }\n const nextInput = { ...(data.step.input ?? {}) };\n delete nextInput[key];\n const step = { ...data.step, input: nextInput };\n\n return { ...n, data: { ...data, step } };\n })\n );\n };\n};\n\nexport const createHandleReorderAndAlignNodes = (\n setNodes: SetNodes,\n setEdges: SetEdges,\n options: { fixedXPosition: number; verticalSpacing: number }\n) => {\n const { fixedXPosition, verticalSpacing } = options;\n\n return (updatedNode: Node) => {\n setNodes((prevNodes) => {\n const updatedNodes = prevNodes.map((node) =>\n node.id === updatedNode.id ? updatedNode : node\n );\n\n const parameterNodes = updatedNodes\n .filter((node) => node.type === \"parametersNode\")\n .sort((a, b) => a.position.y - b.position.y);\n const actionNodes = updatedNodes\n .filter((node) => node.type === \"actionNode\")\n .sort((a, b) => a.position.y - b.position.y);\n const outputNodes = updatedNodes\n .filter((node) => node.type === \"outputNode\")\n .sort((a, b) => a.position.y - b.position.y);\n\n const ordered = orderNodes(parameterNodes, actionNodes, outputNodes);\n const aligned = alignNodes(ordered, fixedXPosition, verticalSpacing);\n\n setSequentialEdgesIfChanged(setEdges, aligned);\n return aligned;\n });\n };\n};\n\nexport const createHandleUpdateField = (setNodes: SetNodes) => {\n return (rfId: string, field: keyof TaskStep, value: string) => {\n setNodes((nds) =>\n nds.map((n) => {\n if (n.id !== rfId) {\n return n;\n }\n\n const data = n.data as Partial<ActionNodeData>;\n if (!data.step) {\n return n;\n }\n const step = { ...data.step, [field]: value };\n\n return { ...n, data: { ...data, step } };\n })\n );\n };\n};\n\nexport const createHandleUpdateInput = (setNodes: SetNodes) => {\n return (rfId: string, key: string, value: unknown) => {\n setNodes((nds) =>\n nds.map((n) => {\n if (n.id !== rfId) {\n return n;\n }\n\n const data = n.data as Partial<ActionNodeData>;\n if (!data.step) {\n return n;\n }\n const nextInput = { ...(data.step.input ?? {}), [key]: value };\n const step = { ...data.step, input: nextInput };\n\n return { ...n, data: { ...data, step } };\n })\n );\n };\n};\n\nexport const collectStepOutputReferences = (\n nodes: Node[],\n parameterReferences: string[]\n): Record<string, string[]> => {\n const referencesByNode: Record<string, string[]> = {};\n const sortedNodes = [...nodes].sort((a, b) => a.position.y - b.position.y);\n const accumulatedReferences: string[] = [...parameterReferences];\n const accumulatedSet = new Set<string>(parameterReferences);\n\n sortedNodes.forEach((node) => {\n referencesByNode[node.id] = [...accumulatedReferences];\n\n const data = node.data as Partial<ActionNodeData> | undefined;\n if (!data || !data.step) {\n return;\n }\n\n const { step, scaffolderActionOutputsById } = data;\n const stepId =\n step && typeof step.id === \"string\" && step.id.trim().length > 0\n ? step.id\n : null;\n const actionId =\n step && typeof step.action === \"string\" && step.action.trim().length > 0\n ? step.action\n : null;\n\n if (!stepId || !actionId) {\n return;\n }\n\n const outputKeys = new Set<string>();\n const schemaOutputs = scaffolderActionOutputsById?.[actionId];\n if (schemaOutputs && typeof schemaOutputs === \"object\") {\n Object.keys(schemaOutputs).forEach((key) => {\n if (key) {\n outputKeys.add(key);\n }\n });\n }\n\n const stepOutput = (step as { output?: Record<string, unknown> }).output;\n if (stepOutput && typeof stepOutput === \"object\") {\n Object.keys(stepOutput).forEach((key) => {\n if (key) {\n outputKeys.add(key);\n }\n });\n }\n\n outputKeys.forEach((outputKey) => {\n const reference = `\\${{ steps['${stepId}'].output.${outputKey} }}`;\n if (!accumulatedSet.has(reference)) {\n accumulatedSet.add(reference);\n accumulatedReferences.push(reference);\n }\n });\n });\n\n return referencesByNode;\n};\n\nexport const createHandleUpdateOutput = (setNodes: SetNodes) => {\n return (\n rfId: string,\n updater: (prev: OutputNodeData[\"output\"]) => OutputNodeData[\"output\"]\n ) => {\n setNodes((nodes) =>\n nodes.map((node) => {\n if (node.id !== rfId || node.type !== \"outputNode\") {\n return node;\n }\n const data = node.data as OutputNodeData;\n const nextOutput = updater(data.output ?? {});\n return {\n ...node,\n data: {\n ...data,\n output: nextOutput,\n },\n };\n })\n );\n };\n};\n\nexport const createHandleUpdateSections = (setNodes: SetNodes) => {\n return (\n rfId: string,\n updater: (prev: ParameterSectionDisplay[]) => ParameterSectionDisplay[]\n ) => {\n setNodes((nodes) =>\n nodes.map((node) => {\n if (node.id !== rfId || node.type !== \"parametersNode\") {\n return node;\n }\n const data = node.data as ParametersNodeData;\n const previousSections =\n data.sections ?? normalizeParametersToSections(data.parameters);\n const nextSections = sanitizeSections(updater(previousSections));\n const nextParameters = sectionsToParametersValue(nextSections);\n return {\n ...node,\n data: {\n ...data,\n sections: nextSections,\n parameters: nextParameters,\n },\n };\n })\n );\n };\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { useState, useRef, useEffect } from 'react';
|
|
2
|
+
import { memo, useState, useRef, useEffect } from 'react';
|
|
3
3
|
import { NodeToolbar, Position, Handle } from '@xyflow/react';
|
|
4
4
|
import { useTheme, styled } from '@material-ui/core/styles';
|
|
5
5
|
import { Box, Typography, IconButton, TextField, Button, Divider, Chip } from '@material-ui/core';
|
|
@@ -43,7 +43,7 @@ const DEFAULT_ACTION_OPTIONS = [
|
|
|
43
43
|
"fetch:template"
|
|
44
44
|
// TODO to be fixed later to not uses default actions
|
|
45
45
|
];
|
|
46
|
-
const
|
|
46
|
+
const ActionNodeComponent = ({ data }) => {
|
|
47
47
|
const { rfId, step } = data;
|
|
48
48
|
const [newKey, setNewKey] = useState("");
|
|
49
49
|
const [newVal, setNewVal] = useState("");
|
|
@@ -290,8 +290,9 @@ const ActionNode = ({ data }) => {
|
|
|
290
290
|
),
|
|
291
291
|
inputEntries.map(([k, v]) => {
|
|
292
292
|
const schema = actionInputSchema?.[k];
|
|
293
|
-
const normalizedType = normalizeSchemaType(schema);
|
|
294
|
-
const
|
|
293
|
+
const normalizedType = normalizeSchemaType(schema, v);
|
|
294
|
+
const fallbackTypeLabel = normalizedType === "unknown" ? "Unknown" : normalizedType[0].toUpperCase() + normalizedType.slice(1);
|
|
295
|
+
const typeLabel = buildTypeLabel(schema) || fallbackTypeLabel;
|
|
295
296
|
const enumOptions = extractEnumOptions(schema);
|
|
296
297
|
const baseOptions = normalizedType === "boolean" ? ["true", "false"] : [];
|
|
297
298
|
const options = Array.from(
|
|
@@ -595,6 +596,7 @@ const ActionNode = ({ data }) => {
|
|
|
595
596
|
/* @__PURE__ */ jsx(Handle, { type: "source", position: Position.Bottom })
|
|
596
597
|
] });
|
|
597
598
|
};
|
|
599
|
+
const ActionNode = memo(ActionNodeComponent);
|
|
598
600
|
|
|
599
601
|
export { ActionNode };
|
|
600
602
|
//# sourceMappingURL=ActionNode.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionNode.esm.js","sources":["../../../src/components/Nodes/ActionNode.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport type { ChangeEvent } from \"react\";\nimport { Handle, Position, NodeToolbar } from \"@xyflow/react\";\nimport { styled, useTheme } from \"@material-ui/core/styles\";\nimport {\n Box,\n Typography,\n TextField,\n IconButton,\n Button,\n Divider,\n Chip,\n} from \"@material-ui/core\";\nimport DeleteOutlineIcon from \"@material-ui/icons/DeleteOutline\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport type { TaskStep } from \"@backstage/plugin-scaffolder-common\";\nimport Autocomplete from \"@material-ui/lab/Autocomplete\";\nimport type { ActionNodeData } from \"./types\";\nimport type { JsonSchemaProperty } from \"./action/schema\";\nimport {\n coerceValueForType,\n extractEnumOptions,\n buildTypeLabel,\n normalizeSchemaType,\n stringifyValueForDisplay,\n} from \"./action/schema\";\nimport { useActionInputs } from \"./action/useActionInputs\";\nimport { createStopNodeInteraction } from \"./common/nodeInteraction\";\nimport { AutoWidthPopper } from \"./common/AutoWidthPopper\";\n\nconst Card = styled(Box)(({ theme }) => ({\n background: theme.palette.background.paper,\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: 12,\n width: 760, // card width\n padding: theme.spacing(1.5),\n boxShadow: theme.shadows[2],\n color: theme.palette.text.primary,\n}));\n\nconst Header = styled(Box)(({ theme }) => ({\n display: \"grid\",\n gridTemplateColumns: \"1fr\",\n gap: theme.spacing(1),\n marginBottom: theme.spacing(1),\n}));\n\nconst Grid = styled(Box)(({ theme }) => ({\n display: \"grid\",\n gridTemplateColumns: \"88px 1fr\",\n gap: theme.spacing(1),\n alignItems: \"center\",\n}));\n\nconst KvRow = styled(Box)(({ theme }) => ({\n display: \"grid\",\n gridTemplateColumns: \"200px 140px 1fr auto\",\n gap: theme.spacing(1),\n alignItems: \"center\",\n}));\n\nconst DEFAULT_ACTION_OPTIONS = [\n \"fetch:template\", // TODO to be fixed later to not uses default actions\n];\n\nexport const ActionNode: React.FC<{ data: ActionNodeData }> = ({ data }) => {\n const { rfId, step } = data;\n const [newKey, setNewKey] = useState(\"\");\n const [newVal, setNewVal] = useState(\"\");\n const stepOutputReferences = data.stepOutputReferences ?? [];\n const [isConfirmingDelete, setIsConfirmingDelete] = useState(false);\n const deleteConfirmationTimeoutRef = useRef<ReturnType<\n typeof setTimeout\n > | null>(null);\n\n const theme = useTheme();\n const actionOptions =\n (data.scaffolderActionIds?.length ?? 0) > 0\n ? data.scaffolderActionIds ?? []\n : DEFAULT_ACTION_OPTIONS;\n\n // Always update by rfId (never by step.id)\n const handleTop =\n (field: keyof TaskStep) => (e: ChangeEvent<HTMLInputElement>) =>\n data.onUpdateField?.(rfId, field, e.target.value);\n\n const actionId = typeof step?.action === \"string\" ? step.action : \"\";\n const [actionInputValue, setActionInputValue] = useState(actionId);\n\n useEffect(() => {\n setActionInputValue(actionId);\n }, [actionId]);\n\n const {\n actionInputSchema,\n inputEntries,\n usedInputKeys,\n missingRequiredInputKeys,\n availableInputOptions,\n trimmedNewKey,\n selectedNewKeyOption,\n newKeyNormalizedType,\n newKeyTypeLabel,\n newKeyEnumOptions,\n } = useActionInputs({ data, step, actionId, newKey });\n const hasMissingRequiredInputs = missingRequiredInputKeys.length > 0;\n const isAddDisabled = !trimmedNewKey || usedInputKeys.has(trimmedNewKey);\n const newValueOptions = Array.from(\n new Set([\n ...(newKeyNormalizedType === \"boolean\" ? [\"true\", \"false\"] : []),\n ...newKeyEnumOptions,\n ...stepOutputReferences,\n ])\n );\n const paletteMode =\n (theme.palette as { mode?: \"light\" | \"dark\" }).mode ??\n theme.palette.type ??\n \"light\";\n const requiredInputsBackground =\n paletteMode === \"dark\"\n ? \"rgba(244, 67, 54, 0.2)\"\n : \"rgba(244, 67, 54, 0.08)\";\n\n const addPair = () => {\n const k = trimmedNewKey;\n if (!k || usedInputKeys.has(k)) return;\n\n const schema =\n selectedNewKeyOption?.schema ??\n (actionInputSchema?.[k] as JsonSchemaProperty | undefined);\n const normalizedType = normalizeSchemaType(schema);\n const parsedValue = coerceValueForType(newVal, normalizedType);\n\n data.onUpdateInput?.(rfId, k, parsedValue);\n setNewKey(\"\");\n setNewVal(\"\");\n };\n\n // Make inputs editable inside ReactFlow\n const stopAll = createStopNodeInteraction();\n\n useEffect(() => {\n if (!isConfirmingDelete) {\n if (deleteConfirmationTimeoutRef.current) {\n clearTimeout(deleteConfirmationTimeoutRef.current);\n deleteConfirmationTimeoutRef.current = null;\n }\n return undefined;\n }\n deleteConfirmationTimeoutRef.current = setTimeout(() => {\n setIsConfirmingDelete(false);\n deleteConfirmationTimeoutRef.current = null;\n }, 3500);\n return () => {\n if (deleteConfirmationTimeoutRef.current) {\n clearTimeout(deleteConfirmationTimeoutRef.current);\n deleteConfirmationTimeoutRef.current = null;\n }\n };\n }, [isConfirmingDelete]);\n\n const handleDeleteNode = () => {\n if (!data.onRemoveNode) {\n return;\n }\n if (!isConfirmingDelete) {\n setIsConfirmingDelete(true);\n return;\n }\n data.onRemoveNode(rfId);\n setIsConfirmingDelete(false);\n };\n\n return (\n <Card>\n <Header title={step?.name || \"Unnamed Step\"}>\n <Box\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: theme.spacing(1),\n }}\n >\n <Typography variant=\"subtitle2\" noWrap>\n {step?.name || \"Unnamed Step\"}\n </Typography>\n {data.onRemoveNode && (\n <Box\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: theme.spacing(0.5),\n color: theme.palette.text.secondary,\n }}\n >\n {isConfirmingDelete && (\n <Typography variant=\"caption\" color=\"error\">\n Click again to delete\n </Typography>\n )}\n <IconButton\n size=\"small\"\n onClick={handleDeleteNode}\n onPointerDown={(e) => e.stopPropagation()}\n aria-label=\"Remove action\"\n color={isConfirmingDelete ? \"secondary\" : \"default\"}\n className=\"nodrag nowheel\"\n >\n <DeleteOutlineIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n )}\n </Box>\n\n <Typography variant=\"caption\" color=\"textSecondary\">\n Action\n </Typography>\n <Autocomplete\n size=\"small\"\n options={actionOptions}\n PopperComponent={AutoWidthPopper}\n freeSolo\n autoHighlight\n value={actionId}\n inputValue={actionInputValue}\n filterOptions={(options) => {\n const needle = actionInputValue.trim().toLowerCase();\n if (!needle) {\n return options;\n }\n return options.filter((opt) => opt.toLowerCase().includes(needle));\n }}\n onChange={(_, newValue) => {\n const nextValue = newValue ?? \"\";\n setActionInputValue(nextValue);\n data.onUpdateField?.(rfId, \"action\", nextValue);\n }}\n onInputChange={(_, newInputValue, reason) => {\n if (reason === \"reset\") {\n return;\n }\n const nextValue = newInputValue ?? \"\";\n setActionInputValue(nextValue);\n data.onUpdateField?.(rfId, \"action\", nextValue);\n }}\n onPointerDown={stopAll.onPointerDown}\n onKeyDown={stopAll.onKeyDown}\n className={stopAll.className}\n fullWidth\n renderInput={(params) => (\n <TextField\n {...params}\n size=\"small\"\n placeholder=\"e.g. fetch:template\"\n fullWidth\n inputProps={{\n ...params.inputProps,\n ...stopAll.inputProps,\n }}\n />\n )}\n />\n </Header>\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: rfId,\n type: \"actionNode\",\n })\n }\n onPointerDown={(e) => e.stopPropagation()}\n className=\"nodrag nowheel\"\n >\n Add Action\n </Button>\n </NodeToolbar>\n\n <Divider />\n\n {/* ID / Name (task template id is editable by user) */}\n <Box sx={{ mb: 1 }}>\n <Grid>\n <Typography variant=\"caption\" color=\"textSecondary\">\n ID\n </Typography>\n <TextField\n size=\"small\"\n placeholder=\"string id\"\n value={String(step?.id ?? \"\")}\n onChange={handleTop(\"id\")}\n fullWidth\n {...stopAll}\n />\n\n <Typography variant=\"caption\" color=\"textSecondary\">\n Name\n </Typography>\n <TextField\n size=\"small\"\n placeholder=\"Step name\"\n value={String(step?.name ?? \"\")}\n onChange={handleTop(\"name\")}\n fullWidth\n {...stopAll}\n />\n </Grid>\n </Box>\n\n {/* Inputs */}\n <Typography variant=\"caption\" color=\"textSecondary\">\n Inputs\n </Typography>\n\n <Box sx={{ display: \"grid\", mt: 0.5 }}>\n {inputEntries.length === 0 && (\n <Box\n sx={{\n fontSize: 12,\n color: theme.palette.text.secondary,\n border: `1px dashed ${theme.palette.divider}`,\n borderRadius: 1,\n p: 1,\n textAlign: \"center\",\n }}\n >\n No inputs yet\n </Box>\n )}\n\n <KvRow\n sx={{\n mt: inputEntries.length === 0 ? 1.5 : 0.5,\n color: theme.palette.text.secondary,\n }}\n >\n <Typography variant=\"caption\" color=\"textSecondary\">\n Key\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n Type\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n Value\n </Typography>\n <Box />\n </KvRow>\n\n {inputEntries.map(([k, v]) => {\n const schema = actionInputSchema?.[k];\n const normalizedType = normalizeSchemaType(schema);\n const typeLabel = buildTypeLabel(schema) || \"String\";\n const enumOptions = extractEnumOptions(schema);\n const baseOptions =\n normalizedType === \"boolean\" ? [\"true\", \"false\"] : [];\n const options = Array.from(\n new Set([...baseOptions, ...enumOptions, ...stepOutputReferences])\n );\n const displayValue = stringifyValueForDisplay(v, normalizedType);\n const handleStringChange = (nextValue: string) => {\n const parsed = coerceValueForType(nextValue, normalizedType);\n data.onUpdateInput?.(rfId, k, parsed);\n };\n\n return (\n <KvRow key={k}>\n <Typography\n variant=\"caption\"\n noWrap\n title={k}\n color=\"textSecondary\"\n >\n {k}\n </Typography>\n <Box display=\"flex\">\n <Chip size=\"small\" variant=\"outlined\" label={typeLabel} />\n </Box>\n {(normalizedType === \"array\" || normalizedType === \"object\") && (\n <TextField\n size=\"small\"\n value={displayValue}\n onChange={(event) => handleStringChange(event.target.value)}\n placeholder=\"JSON value\"\n fullWidth\n multiline\n minRows={2}\n inputProps={{\n ...stopAll.inputProps,\n }}\n onPointerDown={stopAll.onPointerDown}\n onKeyDown={stopAll.onKeyDown}\n className={stopAll.className}\n />\n )}\n {(normalizedType === \"number\" ||\n normalizedType === \"integer\") && (\n <TextField\n size=\"small\"\n value={displayValue}\n onChange={(event) => handleStringChange(event.target.value)}\n placeholder=\"Number\"\n fullWidth\n inputProps={{\n ...stopAll.inputProps,\n inputMode: \"decimal\",\n }}\n onPointerDown={stopAll.onPointerDown}\n onKeyDown={stopAll.onKeyDown}\n className={stopAll.className}\n />\n )}\n {normalizedType !== \"array\" &&\n normalizedType !== \"object\" &&\n normalizedType !== \"number\" &&\n normalizedType !== \"integer\" && (\n <Autocomplete\n size=\"small\"\n freeSolo\n options={options}\n PopperComponent={AutoWidthPopper}\n value={displayValue}\n inputValue={displayValue}\n fullWidth\n onChange={(_, value) => handleStringChange(value ?? \"\")}\n onInputChange={(_, value, reason) => {\n if (reason === \"reset\") {\n return;\n }\n handleStringChange(value ?? \"\");\n }}\n onPointerDown={stopAll.onPointerDown}\n onKeyDown={stopAll.onKeyDown}\n className={stopAll.className}\n renderInput={(params) => (\n <TextField\n {...params}\n size=\"small\"\n placeholder=\"value\"\n inputProps={{\n ...params.inputProps,\n ...stopAll.inputProps,\n }}\n />\n )}\n />\n )}\n <IconButton\n size=\"small\"\n onClick={() => data.onRemoveInputKey?.(rfId, k)}\n onPointerDown={(e) => e.stopPropagation()}\n aria-label={`Remove ${k}`}\n className=\"nodrag nowheel\"\n >\n <DeleteOutlineIcon fontSize=\"small\" />\n </IconButton>\n </KvRow>\n );\n })}\n\n {/* Add new key/value */}\n <KvRow>\n <Autocomplete\n size=\"small\"\n freeSolo\n options={availableInputOptions}\n PopperComponent={AutoWidthPopper}\n value={selectedNewKeyOption}\n inputValue={newKey}\n filterOptions={(options) => {\n const needle = newKey.trim().toLowerCase();\n if (!needle) {\n return options;\n }\n return options.filter((option) =>\n (typeof option === \"string\" ? option : option.label)\n .toLowerCase()\n .includes(needle)\n );\n }}\n onChange={(_, value) => {\n if (!value) {\n setNewKey(\"\");\n return;\n }\n if (typeof value === \"string\") {\n setNewKey(value);\n return;\n }\n setNewKey(value.key);\n }}\n onInputChange={(_, value, reason) => {\n if (reason === \"reset\") {\n return;\n }\n setNewKey(value ?? \"\");\n }}\n onPointerDown={stopAll.onPointerDown}\n onKeyDown={stopAll.onKeyDown}\n className={stopAll.className}\n getOptionSelected={(\n option: { key: string },\n value: { key?: string } | null\n ) => option.key === value?.key}\n getOptionLabel={(option) =>\n typeof option === \"string\" ? option : option.label\n }\n renderInput={(params) => (\n <TextField\n {...params}\n size=\"small\"\n placeholder=\"new key\"\n inputProps={{\n ...params.inputProps,\n ...stopAll.inputProps,\n }}\n />\n )}\n />\n <Box display=\"flex\">\n <Chip size=\"small\" variant=\"outlined\" label={newKeyTypeLabel} />\n </Box>\n {(newKeyNormalizedType === \"array\" ||\n newKeyNormalizedType === \"object\") && (\n <TextField\n size=\"small\"\n value={newVal}\n onChange={(event) => setNewVal(event.target.value)}\n placeholder=\"JSON value\"\n fullWidth\n multiline\n minRows={2}\n inputProps={{\n ...stopAll.inputProps,\n }}\n onPointerDown={stopAll.onPointerDown}\n onKeyDown={stopAll.onKeyDown}\n className={stopAll.className}\n />\n )}\n {(newKeyNormalizedType === \"number\" ||\n newKeyNormalizedType === \"integer\") && (\n <TextField\n size=\"small\"\n value={newVal}\n onChange={(event) => setNewVal(event.target.value)}\n placeholder=\"Number\"\n fullWidth\n inputProps={{\n ...stopAll.inputProps,\n inputMode: \"decimal\",\n }}\n onPointerDown={stopAll.onPointerDown}\n onKeyDown={stopAll.onKeyDown}\n className={stopAll.className}\n />\n )}\n {newKeyNormalizedType !== \"array\" &&\n newKeyNormalizedType !== \"object\" &&\n newKeyNormalizedType !== \"number\" &&\n newKeyNormalizedType !== \"integer\" && (\n <Autocomplete\n size=\"small\"\n freeSolo\n options={newValueOptions}\n PopperComponent={AutoWidthPopper}\n value={newVal}\n inputValue={newVal}\n fullWidth\n filterOptions={(options) => {\n const needle = newVal.trim().toLowerCase();\n if (!needle) {\n return options;\n }\n return options.filter((option) => {\n const raw = String(option);\n const normalized = raw\n .replace(/^\\s*\\$\\{\\{\\s*/, \"\")\n .replace(/\\s*\\}\\}\\s*$/, \"\");\n const haystacks = [\n raw.toLowerCase(),\n normalized.toLowerCase(),\n ];\n return haystacks.some((haystack) =>\n haystack.includes(needle)\n );\n });\n }}\n onChange={(_, value) => setNewVal(value ?? \"\")}\n onInputChange={(_, value, reason) => {\n if (reason === \"reset\") {\n return;\n }\n setNewVal(value ?? \"\");\n }}\n onPointerDown={stopAll.onPointerDown}\n onKeyDown={stopAll.onKeyDown}\n className={stopAll.className}\n renderInput={(params) => (\n <TextField\n {...params}\n size=\"small\"\n placeholder=\"new value\"\n inputProps={{\n ...params.inputProps,\n ...stopAll.inputProps,\n }}\n />\n )}\n />\n )}\n <Button\n size=\"small\"\n variant=\"contained\"\n onClick={addPair}\n onPointerDown={(e) => e.stopPropagation()}\n disabled={isAddDisabled}\n className=\"nodrag nowheel\"\n >\n Add\n </Button>\n </KvRow>\n </Box>\n\n {hasMissingRequiredInputs && (\n <Box\n sx={{\n mt: 1.5,\n p: 1,\n borderRadius: 1,\n border: `1px solid ${theme.palette.error.main}`,\n }}\n style={{ backgroundColor: requiredInputsBackground }}\n >\n <Typography variant=\"caption\" color=\"error\">\n Missing required inputs\n </Typography>\n <Box\n sx={{\n display: \"flex\",\n flexWrap: \"wrap\",\n mt: 0.75,\n }}\n style={{ gap: theme.spacing(0.5) }}\n >\n {missingRequiredInputKeys.map((key) => (\n <Chip\n key={key}\n size=\"small\"\n variant=\"outlined\"\n label={key}\n style={{\n borderColor: theme.palette.error.main,\n color: theme.palette.error.main,\n }}\n />\n ))}\n </Box>\n </Box>\n )}\n\n {/* ReactFlow handles */}\n <Handle type=\"target\" position={Position.Top} />\n <Handle type=\"source\" position={Position.Bottom} />\n </Card>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ActionNode.esm.js","sources":["../../../src/components/Nodes/ActionNode.tsx"],"sourcesContent":["import { memo, useEffect, useRef, useState } from \"react\";\nimport type { ChangeEvent } from \"react\";\nimport { Handle, Position, NodeToolbar } from \"@xyflow/react\";\nimport { styled, useTheme } from \"@material-ui/core/styles\";\nimport {\n Box,\n Typography,\n TextField,\n IconButton,\n Button,\n Divider,\n Chip,\n} from \"@material-ui/core\";\nimport DeleteOutlineIcon from \"@material-ui/icons/DeleteOutline\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport type { TaskStep } from \"@backstage/plugin-scaffolder-common\";\nimport Autocomplete from \"@material-ui/lab/Autocomplete\";\nimport type { ActionNodeData } from \"./types\";\nimport type { JsonSchemaProperty } from \"./action/schema\";\nimport {\n coerceValueForType,\n extractEnumOptions,\n buildTypeLabel,\n normalizeSchemaType,\n stringifyValueForDisplay,\n} from \"./action/schema\";\nimport { useActionInputs } from \"./action/useActionInputs\";\nimport { createStopNodeInteraction } from \"./common/nodeInteraction\";\nimport { AutoWidthPopper } from \"./common/AutoWidthPopper\";\n\nconst Card = styled(Box)(({ theme }) => ({\n background: theme.palette.background.paper,\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: 12,\n width: 760, // card width\n padding: theme.spacing(1.5),\n boxShadow: theme.shadows[2],\n color: theme.palette.text.primary,\n}));\n\nconst Header = styled(Box)(({ theme }) => ({\n display: \"grid\",\n gridTemplateColumns: \"1fr\",\n gap: theme.spacing(1),\n marginBottom: theme.spacing(1),\n}));\n\nconst Grid = styled(Box)(({ theme }) => ({\n display: \"grid\",\n gridTemplateColumns: \"88px 1fr\",\n gap: theme.spacing(1),\n alignItems: \"center\",\n}));\n\nconst KvRow = styled(Box)(({ theme }) => ({\n display: \"grid\",\n gridTemplateColumns: \"200px 140px 1fr auto\",\n gap: theme.spacing(1),\n alignItems: \"center\",\n}));\n\nconst DEFAULT_ACTION_OPTIONS = [\n \"fetch:template\", // TODO to be fixed later to not uses default actions\n];\n\nconst ActionNodeComponent: React.FC<{ data: ActionNodeData }> = ({ data }) => {\n const { rfId, step } = data;\n const [newKey, setNewKey] = useState(\"\");\n const [newVal, setNewVal] = useState(\"\");\n const stepOutputReferences = data.stepOutputReferences ?? [];\n const [isConfirmingDelete, setIsConfirmingDelete] = useState(false);\n const deleteConfirmationTimeoutRef = useRef<ReturnType<\n typeof setTimeout\n > | null>(null);\n\n const theme = useTheme();\n const actionOptions =\n (data.scaffolderActionIds?.length ?? 0) > 0\n ? data.scaffolderActionIds ?? []\n : DEFAULT_ACTION_OPTIONS;\n\n // Always update by rfId (never by step.id)\n const handleTop =\n (field: keyof TaskStep) => (e: ChangeEvent<HTMLInputElement>) =>\n data.onUpdateField?.(rfId, field, e.target.value);\n\n const actionId = typeof step?.action === \"string\" ? step.action : \"\";\n const [actionInputValue, setActionInputValue] = useState(actionId);\n\n useEffect(() => {\n setActionInputValue(actionId);\n }, [actionId]);\n\n const {\n actionInputSchema,\n inputEntries,\n usedInputKeys,\n missingRequiredInputKeys,\n availableInputOptions,\n trimmedNewKey,\n selectedNewKeyOption,\n newKeyNormalizedType,\n newKeyTypeLabel,\n newKeyEnumOptions,\n } = useActionInputs({ data, step, actionId, newKey });\n const hasMissingRequiredInputs = missingRequiredInputKeys.length > 0;\n const isAddDisabled = !trimmedNewKey || usedInputKeys.has(trimmedNewKey);\n const newValueOptions = Array.from(\n new Set([\n ...(newKeyNormalizedType === \"boolean\" ? [\"true\", \"false\"] : []),\n ...newKeyEnumOptions,\n ...stepOutputReferences,\n ])\n );\n const paletteMode =\n (theme.palette as { mode?: \"light\" | \"dark\" }).mode ??\n theme.palette.type ??\n \"light\";\n const requiredInputsBackground =\n paletteMode === \"dark\"\n ? \"rgba(244, 67, 54, 0.2)\"\n : \"rgba(244, 67, 54, 0.08)\";\n\n const addPair = () => {\n const k = trimmedNewKey;\n if (!k || usedInputKeys.has(k)) return;\n\n const schema =\n selectedNewKeyOption?.schema ??\n (actionInputSchema?.[k] as JsonSchemaProperty | undefined);\n const normalizedType = normalizeSchemaType(schema);\n const parsedValue = coerceValueForType(newVal, normalizedType);\n\n data.onUpdateInput?.(rfId, k, parsedValue);\n setNewKey(\"\");\n setNewVal(\"\");\n };\n\n // Make inputs editable inside ReactFlow\n const stopAll = createStopNodeInteraction();\n\n useEffect(() => {\n if (!isConfirmingDelete) {\n if (deleteConfirmationTimeoutRef.current) {\n clearTimeout(deleteConfirmationTimeoutRef.current);\n deleteConfirmationTimeoutRef.current = null;\n }\n return undefined;\n }\n deleteConfirmationTimeoutRef.current = setTimeout(() => {\n setIsConfirmingDelete(false);\n deleteConfirmationTimeoutRef.current = null;\n }, 3500);\n return () => {\n if (deleteConfirmationTimeoutRef.current) {\n clearTimeout(deleteConfirmationTimeoutRef.current);\n deleteConfirmationTimeoutRef.current = null;\n }\n };\n }, [isConfirmingDelete]);\n\n const handleDeleteNode = () => {\n if (!data.onRemoveNode) {\n return;\n }\n if (!isConfirmingDelete) {\n setIsConfirmingDelete(true);\n return;\n }\n data.onRemoveNode(rfId);\n setIsConfirmingDelete(false);\n };\n\n return (\n <Card>\n <Header title={step?.name || \"Unnamed Step\"}>\n <Box\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: theme.spacing(1),\n }}\n >\n <Typography variant=\"subtitle2\" noWrap>\n {step?.name || \"Unnamed Step\"}\n </Typography>\n {data.onRemoveNode && (\n <Box\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: theme.spacing(0.5),\n color: theme.palette.text.secondary,\n }}\n >\n {isConfirmingDelete && (\n <Typography variant=\"caption\" color=\"error\">\n Click again to delete\n </Typography>\n )}\n <IconButton\n size=\"small\"\n onClick={handleDeleteNode}\n onPointerDown={(e) => e.stopPropagation()}\n aria-label=\"Remove action\"\n color={isConfirmingDelete ? \"secondary\" : \"default\"}\n className=\"nodrag nowheel\"\n >\n <DeleteOutlineIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n )}\n </Box>\n\n <Typography variant=\"caption\" color=\"textSecondary\">\n Action\n </Typography>\n <Autocomplete\n size=\"small\"\n options={actionOptions}\n PopperComponent={AutoWidthPopper}\n freeSolo\n autoHighlight\n value={actionId}\n inputValue={actionInputValue}\n filterOptions={(options) => {\n const needle = actionInputValue.trim().toLowerCase();\n if (!needle) {\n return options;\n }\n return options.filter((opt) => opt.toLowerCase().includes(needle));\n }}\n onChange={(_, newValue) => {\n const nextValue = newValue ?? \"\";\n setActionInputValue(nextValue);\n data.onUpdateField?.(rfId, \"action\", nextValue);\n }}\n onInputChange={(_, newInputValue, reason) => {\n if (reason === \"reset\") {\n return;\n }\n const nextValue = newInputValue ?? \"\";\n setActionInputValue(nextValue);\n data.onUpdateField?.(rfId, \"action\", nextValue);\n }}\n onPointerDown={stopAll.onPointerDown}\n onKeyDown={stopAll.onKeyDown}\n className={stopAll.className}\n fullWidth\n renderInput={(params) => (\n <TextField\n {...params}\n size=\"small\"\n placeholder=\"e.g. fetch:template\"\n fullWidth\n inputProps={{\n ...params.inputProps,\n ...stopAll.inputProps,\n }}\n />\n )}\n />\n </Header>\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: rfId,\n type: \"actionNode\",\n })\n }\n onPointerDown={(e) => e.stopPropagation()}\n className=\"nodrag nowheel\"\n >\n Add Action\n </Button>\n </NodeToolbar>\n\n <Divider />\n\n {/* ID / Name (task template id is editable by user) */}\n <Box sx={{ mb: 1 }}>\n <Grid>\n <Typography variant=\"caption\" color=\"textSecondary\">\n ID\n </Typography>\n <TextField\n size=\"small\"\n placeholder=\"string id\"\n value={String(step?.id ?? \"\")}\n onChange={handleTop(\"id\")}\n fullWidth\n {...stopAll}\n />\n\n <Typography variant=\"caption\" color=\"textSecondary\">\n Name\n </Typography>\n <TextField\n size=\"small\"\n placeholder=\"Step name\"\n value={String(step?.name ?? \"\")}\n onChange={handleTop(\"name\")}\n fullWidth\n {...stopAll}\n />\n </Grid>\n </Box>\n\n {/* Inputs */}\n <Typography variant=\"caption\" color=\"textSecondary\">\n Inputs\n </Typography>\n\n <Box sx={{ display: \"grid\", mt: 0.5 }}>\n {inputEntries.length === 0 && (\n <Box\n sx={{\n fontSize: 12,\n color: theme.palette.text.secondary,\n border: `1px dashed ${theme.palette.divider}`,\n borderRadius: 1,\n p: 1,\n textAlign: \"center\",\n }}\n >\n No inputs yet\n </Box>\n )}\n\n <KvRow\n sx={{\n mt: inputEntries.length === 0 ? 1.5 : 0.5,\n color: theme.palette.text.secondary,\n }}\n >\n <Typography variant=\"caption\" color=\"textSecondary\">\n Key\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n Type\n </Typography>\n <Typography variant=\"caption\" color=\"textSecondary\">\n Value\n </Typography>\n <Box />\n </KvRow>\n\n {inputEntries.map(([k, v]) => {\n const schema = actionInputSchema?.[k];\n const normalizedType = normalizeSchemaType(schema, v);\n const fallbackTypeLabel =\n normalizedType === \"unknown\"\n ? \"Unknown\"\n : normalizedType[0].toUpperCase() + normalizedType.slice(1);\n const typeLabel = buildTypeLabel(schema) || fallbackTypeLabel;\n const enumOptions = extractEnumOptions(schema);\n const baseOptions =\n normalizedType === \"boolean\" ? [\"true\", \"false\"] : [];\n const options = Array.from(\n new Set([...baseOptions, ...enumOptions, ...stepOutputReferences])\n );\n const displayValue = stringifyValueForDisplay(v, normalizedType);\n const handleStringChange = (nextValue: string) => {\n const parsed = coerceValueForType(nextValue, normalizedType);\n data.onUpdateInput?.(rfId, k, parsed);\n };\n\n return (\n <KvRow key={k}>\n <Typography\n variant=\"caption\"\n noWrap\n title={k}\n color=\"textSecondary\"\n >\n {k}\n </Typography>\n <Box display=\"flex\">\n <Chip size=\"small\" variant=\"outlined\" label={typeLabel} />\n </Box>\n {(normalizedType === \"array\" || normalizedType === \"object\") && (\n <TextField\n size=\"small\"\n value={displayValue}\n onChange={(event) => handleStringChange(event.target.value)}\n placeholder=\"JSON value\"\n fullWidth\n multiline\n minRows={2}\n inputProps={{\n ...stopAll.inputProps,\n }}\n onPointerDown={stopAll.onPointerDown}\n onKeyDown={stopAll.onKeyDown}\n className={stopAll.className}\n />\n )}\n {(normalizedType === \"number\" ||\n normalizedType === \"integer\") && (\n <TextField\n size=\"small\"\n value={displayValue}\n onChange={(event) => handleStringChange(event.target.value)}\n placeholder=\"Number\"\n fullWidth\n inputProps={{\n ...stopAll.inputProps,\n inputMode: \"decimal\",\n }}\n onPointerDown={stopAll.onPointerDown}\n onKeyDown={stopAll.onKeyDown}\n className={stopAll.className}\n />\n )}\n {normalizedType !== \"array\" &&\n normalizedType !== \"object\" &&\n normalizedType !== \"number\" &&\n normalizedType !== \"integer\" && (\n <Autocomplete\n size=\"small\"\n freeSolo\n options={options}\n PopperComponent={AutoWidthPopper}\n value={displayValue}\n inputValue={displayValue}\n fullWidth\n onChange={(_, value) => handleStringChange(value ?? \"\")}\n onInputChange={(_, value, reason) => {\n if (reason === \"reset\") {\n return;\n }\n handleStringChange(value ?? \"\");\n }}\n onPointerDown={stopAll.onPointerDown}\n onKeyDown={stopAll.onKeyDown}\n className={stopAll.className}\n renderInput={(params) => (\n <TextField\n {...params}\n size=\"small\"\n placeholder=\"value\"\n inputProps={{\n ...params.inputProps,\n ...stopAll.inputProps,\n }}\n />\n )}\n />\n )}\n <IconButton\n size=\"small\"\n onClick={() => data.onRemoveInputKey?.(rfId, k)}\n onPointerDown={(e) => e.stopPropagation()}\n aria-label={`Remove ${k}`}\n className=\"nodrag nowheel\"\n >\n <DeleteOutlineIcon fontSize=\"small\" />\n </IconButton>\n </KvRow>\n );\n })}\n\n {/* Add new key/value */}\n <KvRow>\n <Autocomplete\n size=\"small\"\n freeSolo\n options={availableInputOptions}\n PopperComponent={AutoWidthPopper}\n value={selectedNewKeyOption}\n inputValue={newKey}\n filterOptions={(options) => {\n const needle = newKey.trim().toLowerCase();\n if (!needle) {\n return options;\n }\n return options.filter((option) =>\n (typeof option === \"string\" ? option : option.label)\n .toLowerCase()\n .includes(needle)\n );\n }}\n onChange={(_, value) => {\n if (!value) {\n setNewKey(\"\");\n return;\n }\n if (typeof value === \"string\") {\n setNewKey(value);\n return;\n }\n setNewKey(value.key);\n }}\n onInputChange={(_, value, reason) => {\n if (reason === \"reset\") {\n return;\n }\n setNewKey(value ?? \"\");\n }}\n onPointerDown={stopAll.onPointerDown}\n onKeyDown={stopAll.onKeyDown}\n className={stopAll.className}\n getOptionSelected={(\n option: { key: string },\n value: { key?: string } | null\n ) => option.key === value?.key}\n getOptionLabel={(option) =>\n typeof option === \"string\" ? option : option.label\n }\n renderInput={(params) => (\n <TextField\n {...params}\n size=\"small\"\n placeholder=\"new key\"\n inputProps={{\n ...params.inputProps,\n ...stopAll.inputProps,\n }}\n />\n )}\n />\n <Box display=\"flex\">\n <Chip size=\"small\" variant=\"outlined\" label={newKeyTypeLabel} />\n </Box>\n {(newKeyNormalizedType === \"array\" ||\n newKeyNormalizedType === \"object\") && (\n <TextField\n size=\"small\"\n value={newVal}\n onChange={(event) => setNewVal(event.target.value)}\n placeholder=\"JSON value\"\n fullWidth\n multiline\n minRows={2}\n inputProps={{\n ...stopAll.inputProps,\n }}\n onPointerDown={stopAll.onPointerDown}\n onKeyDown={stopAll.onKeyDown}\n className={stopAll.className}\n />\n )}\n {(newKeyNormalizedType === \"number\" ||\n newKeyNormalizedType === \"integer\") && (\n <TextField\n size=\"small\"\n value={newVal}\n onChange={(event) => setNewVal(event.target.value)}\n placeholder=\"Number\"\n fullWidth\n inputProps={{\n ...stopAll.inputProps,\n inputMode: \"decimal\",\n }}\n onPointerDown={stopAll.onPointerDown}\n onKeyDown={stopAll.onKeyDown}\n className={stopAll.className}\n />\n )}\n {newKeyNormalizedType !== \"array\" &&\n newKeyNormalizedType !== \"object\" &&\n newKeyNormalizedType !== \"number\" &&\n newKeyNormalizedType !== \"integer\" && (\n <Autocomplete\n size=\"small\"\n freeSolo\n options={newValueOptions}\n PopperComponent={AutoWidthPopper}\n value={newVal}\n inputValue={newVal}\n fullWidth\n filterOptions={(options) => {\n const needle = newVal.trim().toLowerCase();\n if (!needle) {\n return options;\n }\n return options.filter((option) => {\n const raw = String(option);\n const normalized = raw\n .replace(/^\\s*\\$\\{\\{\\s*/, \"\")\n .replace(/\\s*\\}\\}\\s*$/, \"\");\n const haystacks = [\n raw.toLowerCase(),\n normalized.toLowerCase(),\n ];\n return haystacks.some((haystack) =>\n haystack.includes(needle)\n );\n });\n }}\n onChange={(_, value) => setNewVal(value ?? \"\")}\n onInputChange={(_, value, reason) => {\n if (reason === \"reset\") {\n return;\n }\n setNewVal(value ?? \"\");\n }}\n onPointerDown={stopAll.onPointerDown}\n onKeyDown={stopAll.onKeyDown}\n className={stopAll.className}\n renderInput={(params) => (\n <TextField\n {...params}\n size=\"small\"\n placeholder=\"new value\"\n inputProps={{\n ...params.inputProps,\n ...stopAll.inputProps,\n }}\n />\n )}\n />\n )}\n <Button\n size=\"small\"\n variant=\"contained\"\n onClick={addPair}\n onPointerDown={(e) => e.stopPropagation()}\n disabled={isAddDisabled}\n className=\"nodrag nowheel\"\n >\n Add\n </Button>\n </KvRow>\n </Box>\n\n {hasMissingRequiredInputs && (\n <Box\n sx={{\n mt: 1.5,\n p: 1,\n borderRadius: 1,\n border: `1px solid ${theme.palette.error.main}`,\n }}\n style={{ backgroundColor: requiredInputsBackground }}\n >\n <Typography variant=\"caption\" color=\"error\">\n Missing required inputs\n </Typography>\n <Box\n sx={{\n display: \"flex\",\n flexWrap: \"wrap\",\n mt: 0.75,\n }}\n style={{ gap: theme.spacing(0.5) }}\n >\n {missingRequiredInputKeys.map((key) => (\n <Chip\n key={key}\n size=\"small\"\n variant=\"outlined\"\n label={key}\n style={{\n borderColor: theme.palette.error.main,\n color: theme.palette.error.main,\n }}\n />\n ))}\n </Box>\n </Box>\n )}\n\n {/* ReactFlow handles */}\n <Handle type=\"target\" position={Position.Top} />\n <Handle type=\"source\" position={Position.Bottom} />\n </Card>\n );\n};\n\nexport const ActionNode = memo(ActionNodeComponent);\n"],"names":[],"mappings":";;;;;;;;;;;;;AA8BA,MAAM,OAAO,MAAA,CAAO,GAAG,EAAE,CAAC,EAAE,OAAM,MAAO;AAAA,EACvC,UAAA,EAAY,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,KAAA;AAAA,EACrC,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,CAAA;AAAA,EAC1C,YAAA,EAAc,EAAA;AAAA,EACd,KAAA,EAAO,GAAA;AAAA;AAAA,EACP,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC1B,SAAA,EAAW,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,EAC1B,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK;AAC5B,CAAA,CAAE,CAAA;AAEF,MAAM,SAAS,MAAA,CAAO,GAAG,EAAE,CAAC,EAAE,OAAM,MAAO;AAAA,EACzC,OAAA,EAAS,MAAA;AAAA,EACT,mBAAA,EAAqB,KAAA;AAAA,EACrB,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,EACpB,YAAA,EAAc,KAAA,CAAM,OAAA,CAAQ,CAAC;AAC/B,CAAA,CAAE,CAAA;AAEF,MAAM,OAAO,MAAA,CAAO,GAAG,EAAE,CAAC,EAAE,OAAM,MAAO;AAAA,EACvC,OAAA,EAAS,MAAA;AAAA,EACT,mBAAA,EAAqB,UAAA;AAAA,EACrB,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,EACpB,UAAA,EAAY;AACd,CAAA,CAAE,CAAA;AAEF,MAAM,QAAQ,MAAA,CAAO,GAAG,EAAE,CAAC,EAAE,OAAM,MAAO;AAAA,EACxC,OAAA,EAAS,MAAA;AAAA,EACT,mBAAA,EAAqB,sBAAA;AAAA,EACrB,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,EACpB,UAAA,EAAY;AACd,CAAA,CAAE,CAAA;AAEF,MAAM,sBAAA,GAAyB;AAAA,EAC7B;AAAA;AACF,CAAA;AAEA,MAAM,mBAAA,GAA0D,CAAC,EAAE,IAAA,EAAK,KAAM;AAC5E,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAK,GAAI,IAAA;AACvB,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAS,EAAE,CAAA;AACvC,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAS,EAAE,CAAA;AACvC,EAAA,MAAM,oBAAA,GAAuB,IAAA,CAAK,oBAAA,IAAwB,EAAC;AAC3D,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAI,SAAS,KAAK,CAAA;AAClE,EAAA,MAAM,4BAAA,GAA+B,OAE3B,IAAI,CAAA;AAEd,EAAA,MAAM,QAAQ,QAAA,EAAS;AACvB,EAAA,MAAM,aAAA,GAAA,CACH,KAAK,mBAAA,EAAqB,MAAA,IAAU,KAAK,CAAA,GACtC,IAAA,CAAK,mBAAA,IAAuB,EAAC,GAC7B,sBAAA;AAGN,EAAA,MAAM,SAAA,GACJ,CAAC,KAAA,KAA0B,CAAC,CAAA,KAC1B,IAAA,CAAK,aAAA,GAAgB,IAAA,EAAM,KAAA,EAAO,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA;AAEpD,EAAA,MAAM,WAAW,OAAO,IAAA,EAAM,MAAA,KAAW,QAAA,GAAW,KAAK,MAAA,GAAS,EAAA;AAClE,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAI,SAAS,QAAQ,CAAA;AAEjE,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,mBAAA,CAAoB,QAAQ,CAAA;AAAA,EAC9B,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM;AAAA,IACJ,iBAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,wBAAA;AAAA,IACA,qBAAA;AAAA,IACA,aAAA;AAAA,IACA,oBAAA;AAAA,IACA,oBAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,MACE,eAAA,CAAgB,EAAE,MAAM,IAAA,EAAM,QAAA,EAAU,QAAQ,CAAA;AACpD,EAAA,MAAM,wBAAA,GAA2B,yBAAyB,MAAA,GAAS,CAAA;AACnE,EAAA,MAAM,aAAA,GAAgB,CAAC,aAAA,IAAiB,aAAA,CAAc,IAAI,aAAa,CAAA;AACvE,EAAA,MAAM,kBAAkB,KAAA,CAAM,IAAA;AAAA,wBACxB,GAAA,CAAI;AAAA,MACN,GAAI,oBAAA,KAAyB,SAAA,GAAY,CAAC,MAAA,EAAQ,OAAO,IAAI,EAAC;AAAA,MAC9D,GAAG,iBAAA;AAAA,MACH,GAAG;AAAA,KACJ;AAAA,GACH;AACA,EAAA,MAAM,cACH,KAAA,CAAM,OAAA,CAAwC,IAAA,IAC/C,KAAA,CAAM,QAAQ,IAAA,IACd,OAAA;AACF,EAAA,MAAM,wBAAA,GACJ,WAAA,KAAgB,MAAA,GACZ,wBAAA,GACA,yBAAA;AAEN,EAAA,MAAM,UAAU,MAAM;AACpB,IAAA,MAAM,CAAA,GAAI,aAAA;AACV,IAAA,IAAI,CAAC,CAAA,IAAK,aAAA,CAAc,GAAA,CAAI,CAAC,CAAA,EAAG;AAEhC,IAAA,MAAM,MAAA,GACJ,oBAAA,EAAsB,MAAA,IACrB,iBAAA,GAAoB,CAAC,CAAA;AACxB,IAAA,MAAM,cAAA,GAAiB,oBAAoB,MAAM,CAAA;AACjD,IAAA,MAAM,WAAA,GAAc,kBAAA,CAAmB,MAAA,EAAQ,cAAc,CAAA;AAE7D,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA,EAAM,CAAA,EAAG,WAAW,CAAA;AACzC,IAAA,SAAA,CAAU,EAAE,CAAA;AACZ,IAAA,SAAA,CAAU,EAAE,CAAA;AAAA,EACd,CAAA;AAGA,EAAA,MAAM,UAAU,yBAAA,EAA0B;AAE1C,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,MAAA,IAAI,6BAA6B,OAAA,EAAS;AACxC,QAAA,YAAA,CAAa,6BAA6B,OAAO,CAAA;AACjD,QAAA,4BAAA,CAA6B,OAAA,GAAU,IAAA;AAAA,MACzC;AACA,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,4BAAA,CAA6B,OAAA,GAAU,WAAW,MAAM;AACtD,MAAA,qBAAA,CAAsB,KAAK,CAAA;AAC3B,MAAA,4BAAA,CAA6B,OAAA,GAAU,IAAA;AAAA,IACzC,GAAG,IAAI,CAAA;AACP,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,6BAA6B,OAAA,EAAS;AACxC,QAAA,YAAA,CAAa,6BAA6B,OAAO,CAAA;AACjD,QAAA,4BAAA,CAA6B,OAAA,GAAU,IAAA;AAAA,MACzC;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,kBAAkB,CAAC,CAAA;AAEvB,EAAA,MAAM,mBAAmB,MAAM;AAC7B,IAAA,IAAI,CAAC,KAAK,YAAA,EAAc;AACtB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,MAAA,qBAAA,CAAsB,IAAI,CAAA;AAC1B,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,aAAa,IAAI,CAAA;AACtB,IAAA,qBAAA,CAAsB,KAAK,CAAA;AAAA,EAC7B,CAAA;AAEA,EAAA,4BACG,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,MAAA,EAAA,EAAO,KAAA,EAAO,IAAA,EAAM,IAAA,IAAQ,cAAA,EAC3B,QAAA,EAAA;AAAA,sBAAA,IAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO;AAAA,YACL,OAAA,EAAS,MAAA;AAAA,YACT,UAAA,EAAY,QAAA;AAAA,YACZ,cAAA,EAAgB,eAAA;AAAA,YAChB,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,CAAC;AAAA,WACtB;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,cAAW,OAAA,EAAQ,WAAA,EAAY,QAAM,IAAA,EACnC,QAAA,EAAA,IAAA,EAAM,QAAQ,cAAA,EACjB,CAAA;AAAA,YACC,KAAK,YAAA,oBACJ,IAAA;AAAA,cAAC,GAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAO;AAAA,kBACL,OAAA,EAAS,MAAA;AAAA,kBACT,UAAA,EAAY,QAAA;AAAA,kBACZ,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA;AAAA,kBACtB,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK;AAAA,iBAC5B;AAAA,gBAEC,QAAA,EAAA;AAAA,kBAAA,kBAAA,wBACE,UAAA,EAAA,EAAW,OAAA,EAAQ,SAAA,EAAU,KAAA,EAAM,SAAQ,QAAA,EAAA,uBAAA,EAE5C,CAAA;AAAA,kCAEF,GAAA;AAAA,oBAAC,UAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,OAAA;AAAA,sBACL,OAAA,EAAS,gBAAA;AAAA,sBACT,aAAA,EAAe,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,sBACxC,YAAA,EAAW,eAAA;AAAA,sBACX,KAAA,EAAO,qBAAqB,WAAA,GAAc,SAAA;AAAA,sBAC1C,SAAA,EAAU,gBAAA;AAAA,sBAEV,QAAA,kBAAA,GAAA,CAAC,iBAAA,EAAA,EAAkB,QAAA,EAAS,OAAA,EAAQ;AAAA;AAAA;AACtC;AAAA;AAAA;AACF;AAAA;AAAA,OAEJ;AAAA,0BAEC,UAAA,EAAA,EAAW,OAAA,EAAQ,SAAA,EAAU,KAAA,EAAM,iBAAgB,QAAA,EAAA,QAAA,EAEpD,CAAA;AAAA,sBACA,GAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,OAAA;AAAA,UACL,OAAA,EAAS,aAAA;AAAA,UACT,eAAA,EAAiB,eAAA;AAAA,UACjB,QAAA,EAAQ,IAAA;AAAA,UACR,aAAA,EAAa,IAAA;AAAA,UACb,KAAA,EAAO,QAAA;AAAA,UACP,UAAA,EAAY,gBAAA;AAAA,UACZ,aAAA,EAAe,CAAC,OAAA,KAAY;AAC1B,YAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,IAAA,EAAK,CAAE,WAAA,EAAY;AACnD,YAAA,IAAI,CAAC,MAAA,EAAQ;AACX,cAAA,OAAO,OAAA;AAAA,YACT;AACA,YAAA,OAAO,OAAA,CAAQ,OAAO,CAAC,GAAA,KAAQ,IAAI,WAAA,EAAY,CAAE,QAAA,CAAS,MAAM,CAAC,CAAA;AAAA,UACnE,CAAA;AAAA,UACA,QAAA,EAAU,CAAC,CAAA,EAAG,QAAA,KAAa;AACzB,YAAA,MAAM,YAAY,QAAA,IAAY,EAAA;AAC9B,YAAA,mBAAA,CAAoB,SAAS,CAAA;AAC7B,YAAA,IAAA,CAAK,aAAA,GAAgB,IAAA,EAAM,QAAA,EAAU,SAAS,CAAA;AAAA,UAChD,CAAA;AAAA,UACA,aAAA,EAAe,CAAC,CAAA,EAAG,aAAA,EAAe,MAAA,KAAW;AAC3C,YAAA,IAAI,WAAW,OAAA,EAAS;AACtB,cAAA;AAAA,YACF;AACA,YAAA,MAAM,YAAY,aAAA,IAAiB,EAAA;AACnC,YAAA,mBAAA,CAAoB,SAAS,CAAA;AAC7B,YAAA,IAAA,CAAK,aAAA,GAAgB,IAAA,EAAM,QAAA,EAAU,SAAS,CAAA;AAAA,UAChD,CAAA;AAAA,UACA,eAAe,OAAA,CAAQ,aAAA;AAAA,UACvB,WAAW,OAAA,CAAQ,SAAA;AAAA,UACnB,WAAW,OAAA,CAAQ,SAAA;AAAA,UACnB,SAAA,EAAS,IAAA;AAAA,UACT,WAAA,EAAa,CAAC,MAAA,qBACZ,GAAA;AAAA,YAAC,SAAA;AAAA,YAAA;AAAA,cACE,GAAG,MAAA;AAAA,cACJ,IAAA,EAAK,OAAA;AAAA,cACL,WAAA,EAAY,qBAAA;AAAA,cACZ,SAAA,EAAS,IAAA;AAAA,cACT,UAAA,EAAY;AAAA,gBACV,GAAG,MAAA,CAAO,UAAA;AAAA,gBACV,GAAG,OAAA,CAAQ;AAAA;AACb;AAAA;AACF;AAAA;AAEJ,KAAA,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,SAAA,EAAW,IAAA;AAAA,UACX,IAAA,EAAM;AAAA,SACP,CAAA;AAAA,QAEH,aAAA,EAAe,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,QACxC,SAAA,EAAU,gBAAA;AAAA,QACX,QAAA,EAAA;AAAA;AAAA,KAED,EACF,CAAA;AAAA,wBAEC,OAAA,EAAA,EAAQ,CAAA;AAAA,oBAGT,GAAA,CAAC,OAAI,EAAA,EAAI,EAAE,IAAI,CAAA,EAAE,EACf,+BAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,SAAA,EAAU,KAAA,EAAM,iBAAgB,QAAA,EAAA,IAAA,EAEpD,CAAA;AAAA,sBACA,GAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,OAAA;AAAA,UACL,WAAA,EAAY,WAAA;AAAA,UACZ,KAAA,EAAO,MAAA,CAAO,IAAA,EAAM,EAAA,IAAM,EAAE,CAAA;AAAA,UAC5B,QAAA,EAAU,UAAU,IAAI,CAAA;AAAA,UACxB,SAAA,EAAS,IAAA;AAAA,UACR,GAAG;AAAA;AAAA,OACN;AAAA,0BAEC,UAAA,EAAA,EAAW,OAAA,EAAQ,SAAA,EAAU,KAAA,EAAM,iBAAgB,QAAA,EAAA,MAAA,EAEpD,CAAA;AAAA,sBACA,GAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,OAAA;AAAA,UACL,WAAA,EAAY,WAAA;AAAA,UACZ,KAAA,EAAO,MAAA,CAAO,IAAA,EAAM,IAAA,IAAQ,EAAE,CAAA;AAAA,UAC9B,QAAA,EAAU,UAAU,MAAM,CAAA;AAAA,UAC1B,SAAA,EAAS,IAAA;AAAA,UACR,GAAG;AAAA;AAAA;AACN,KAAA,EACF,CAAA,EACF,CAAA;AAAA,wBAGC,UAAA,EAAA,EAAW,OAAA,EAAQ,SAAA,EAAU,KAAA,EAAM,iBAAgB,QAAA,EAAA,QAAA,EAEpD,CAAA;AAAA,oBAEA,IAAA,CAAC,OAAI,EAAA,EAAI,EAAE,SAAS,MAAA,EAAQ,EAAA,EAAI,KAAI,EACjC,QAAA,EAAA;AAAA,MAAA,YAAA,CAAa,WAAW,CAAA,oBACvB,GAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAI;AAAA,YACF,QAAA,EAAU,EAAA;AAAA,YACV,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,SAAA;AAAA,YAC1B,MAAA,EAAQ,CAAA,WAAA,EAAc,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,CAAA;AAAA,YAC3C,YAAA,EAAc,CAAA;AAAA,YACd,CAAA,EAAG,CAAA;AAAA,YACH,SAAA,EAAW;AAAA,WACb;AAAA,UACD,QAAA,EAAA;AAAA;AAAA,OAED;AAAA,sBAGF,IAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAI;AAAA,YACF,EAAA,EAAI,YAAA,CAAa,MAAA,KAAW,CAAA,GAAI,GAAA,GAAM,GAAA;AAAA,YACtC,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK;AAAA,WAC5B;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,SAAA,EAAU,KAAA,EAAM,iBAAgB,QAAA,EAAA,KAAA,EAEpD,CAAA;AAAA,gCACC,UAAA,EAAA,EAAW,OAAA,EAAQ,SAAA,EAAU,KAAA,EAAM,iBAAgB,QAAA,EAAA,MAAA,EAEpD,CAAA;AAAA,gCACC,UAAA,EAAA,EAAW,OAAA,EAAQ,SAAA,EAAU,KAAA,EAAM,iBAAgB,QAAA,EAAA,OAAA,EAEpD,CAAA;AAAA,gCACC,GAAA,EAAA,EAAI;AAAA;AAAA;AAAA,OACP;AAAA,MAEC,aAAa,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM;AAC5B,QAAA,MAAM,MAAA,GAAS,oBAAoB,CAAC,CAAA;AACpC,QAAA,MAAM,cAAA,GAAiB,mBAAA,CAAoB,MAAA,EAAQ,CAAC,CAAA;AACpD,QAAA,MAAM,iBAAA,GACJ,cAAA,KAAmB,SAAA,GACf,SAAA,GACA,cAAA,CAAe,CAAC,CAAA,CAAE,WAAA,EAAY,GAAI,cAAA,CAAe,KAAA,CAAM,CAAC,CAAA;AAC9D,QAAA,MAAM,SAAA,GAAY,cAAA,CAAe,MAAM,CAAA,IAAK,iBAAA;AAC5C,QAAA,MAAM,WAAA,GAAc,mBAAmB,MAAM,CAAA;AAC7C,QAAA,MAAM,cACJ,cAAA,KAAmB,SAAA,GAAY,CAAC,MAAA,EAAQ,OAAO,IAAI,EAAC;AACtD,QAAA,MAAM,UAAU,KAAA,CAAM,IAAA;AAAA,0BACpB,IAAI,IAAI,CAAC,GAAG,aAAa,GAAG,WAAA,EAAa,GAAG,oBAAoB,CAAC;AAAA,SACnE;AACA,QAAA,MAAM,YAAA,GAAe,wBAAA,CAAyB,CAAA,EAAG,cAAc,CAAA;AAC/D,QAAA,MAAM,kBAAA,GAAqB,CAAC,SAAA,KAAsB;AAChD,UAAA,MAAM,MAAA,GAAS,kBAAA,CAAmB,SAAA,EAAW,cAAc,CAAA;AAC3D,UAAA,IAAA,CAAK,aAAA,GAAgB,IAAA,EAAM,CAAA,EAAG,MAAM,CAAA;AAAA,QACtC,CAAA;AAEA,QAAA,4BACG,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,SAAA;AAAA,cACR,MAAA,EAAM,IAAA;AAAA,cACN,KAAA,EAAO,CAAA;AAAA,cACP,KAAA,EAAM,eAAA;AAAA,cAEL,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,0BACA,GAAA,CAAC,GAAA,EAAA,EAAI,OAAA,EAAQ,MAAA,EACX,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,OAAA,EAAQ,OAAA,EAAQ,UAAA,EAAW,KAAA,EAAO,SAAA,EAAW,CAAA,EAC1D,CAAA;AAAA,UAAA,CACE,cAAA,KAAmB,OAAA,IAAW,cAAA,KAAmB,QAAA,qBACjD,GAAA;AAAA,YAAC,SAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,OAAA;AAAA,cACL,KAAA,EAAO,YAAA;AAAA,cACP,UAAU,CAAC,KAAA,KAAU,kBAAA,CAAmB,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,cAC1D,WAAA,EAAY,YAAA;AAAA,cACZ,SAAA,EAAS,IAAA;AAAA,cACT,SAAA,EAAS,IAAA;AAAA,cACT,OAAA,EAAS,CAAA;AAAA,cACT,UAAA,EAAY;AAAA,gBACV,GAAG,OAAA,CAAQ;AAAA,eACb;AAAA,cACA,eAAe,OAAA,CAAQ,aAAA;AAAA,cACvB,WAAW,OAAA,CAAQ,SAAA;AAAA,cACnB,WAAW,OAAA,CAAQ;AAAA;AAAA,WACrB;AAAA,UAAA,CAEA,cAAA,KAAmB,QAAA,IACnB,cAAA,KAAmB,SAAA,qBACnB,GAAA;AAAA,YAAC,SAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,OAAA;AAAA,cACL,KAAA,EAAO,YAAA;AAAA,cACP,UAAU,CAAC,KAAA,KAAU,kBAAA,CAAmB,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,cAC1D,WAAA,EAAY,QAAA;AAAA,cACZ,SAAA,EAAS,IAAA;AAAA,cACT,UAAA,EAAY;AAAA,gBACV,GAAG,OAAA,CAAQ,UAAA;AAAA,gBACX,SAAA,EAAW;AAAA,eACb;AAAA,cACA,eAAe,OAAA,CAAQ,aAAA;AAAA,cACvB,WAAW,OAAA,CAAQ,SAAA;AAAA,cACnB,WAAW,OAAA,CAAQ;AAAA;AAAA,WACrB;AAAA,UAED,mBAAmB,OAAA,IAClB,cAAA,KAAmB,YACnB,cAAA,KAAmB,QAAA,IACnB,mBAAmB,SAAA,oBACjB,GAAA;AAAA,YAAC,YAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,OAAA;AAAA,cACL,QAAA,EAAQ,IAAA;AAAA,cACR,OAAA;AAAA,cACA,eAAA,EAAiB,eAAA;AAAA,cACjB,KAAA,EAAO,YAAA;AAAA,cACP,UAAA,EAAY,YAAA;AAAA,cACZ,SAAA,EAAS,IAAA;AAAA,cACT,UAAU,CAAC,CAAA,EAAG,KAAA,KAAU,kBAAA,CAAmB,SAAS,EAAE,CAAA;AAAA,cACtD,aAAA,EAAe,CAAC,CAAA,EAAG,KAAA,EAAO,MAAA,KAAW;AACnC,gBAAA,IAAI,WAAW,OAAA,EAAS;AACtB,kBAAA;AAAA,gBACF;AACA,gBAAA,kBAAA,CAAmB,SAAS,EAAE,CAAA;AAAA,cAChC,CAAA;AAAA,cACA,eAAe,OAAA,CAAQ,aAAA;AAAA,cACvB,WAAW,OAAA,CAAQ,SAAA;AAAA,cACnB,WAAW,OAAA,CAAQ,SAAA;AAAA,cACnB,WAAA,EAAa,CAAC,MAAA,qBACZ,GAAA;AAAA,gBAAC,SAAA;AAAA,gBAAA;AAAA,kBACE,GAAG,MAAA;AAAA,kBACJ,IAAA,EAAK,OAAA;AAAA,kBACL,WAAA,EAAY,OAAA;AAAA,kBACZ,UAAA,EAAY;AAAA,oBACV,GAAG,MAAA,CAAO,UAAA;AAAA,oBACV,GAAG,OAAA,CAAQ;AAAA;AACb;AAAA;AACF;AAAA,WAEJ;AAAA,0BAEJ,GAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,OAAA;AAAA,cACL,OAAA,EAAS,MAAM,IAAA,CAAK,gBAAA,GAAmB,MAAM,CAAC,CAAA;AAAA,cAC9C,aAAA,EAAe,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,cACxC,YAAA,EAAY,UAAU,CAAC,CAAA,CAAA;AAAA,cACvB,SAAA,EAAU,gBAAA;AAAA,cAEV,QAAA,kBAAA,GAAA,CAAC,iBAAA,EAAA,EAAkB,QAAA,EAAS,OAAA,EAAQ;AAAA;AAAA;AACtC,SAAA,EAAA,EAzFU,CA0FZ,CAAA;AAAA,MAEJ,CAAC,CAAA;AAAA,2BAGA,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,OAAA;AAAA,YACL,QAAA,EAAQ,IAAA;AAAA,YACR,OAAA,EAAS,qBAAA;AAAA,YACT,eAAA,EAAiB,eAAA;AAAA,YACjB,KAAA,EAAO,oBAAA;AAAA,YACP,UAAA,EAAY,MAAA;AAAA,YACZ,aAAA,EAAe,CAAC,OAAA,KAAY;AAC1B,cAAA,MAAM,MAAA,GAAS,MAAA,CAAO,IAAA,EAAK,CAAE,WAAA,EAAY;AACzC,cAAA,IAAI,CAAC,MAAA,EAAQ;AACX,gBAAA,OAAO,OAAA;AAAA,cACT;AACA,cAAA,OAAO,OAAA,CAAQ,MAAA;AAAA,gBAAO,CAAC,MAAA,KAAA,CACpB,OAAO,MAAA,KAAW,QAAA,GAAW,MAAA,GAAS,MAAA,CAAO,KAAA,EAC3C,WAAA,EAAY,CACZ,QAAA,CAAS,MAAM;AAAA,eACpB;AAAA,YACF,CAAA;AAAA,YACA,QAAA,EAAU,CAAC,CAAA,EAAG,KAAA,KAAU;AACtB,cAAA,IAAI,CAAC,KAAA,EAAO;AACV,gBAAA,SAAA,CAAU,EAAE,CAAA;AACZ,gBAAA;AAAA,cACF;AACA,cAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,gBAAA,SAAA,CAAU,KAAK,CAAA;AACf,gBAAA;AAAA,cACF;AACA,cAAA,SAAA,CAAU,MAAM,GAAG,CAAA;AAAA,YACrB,CAAA;AAAA,YACA,aAAA,EAAe,CAAC,CAAA,EAAG,KAAA,EAAO,MAAA,KAAW;AACnC,cAAA,IAAI,WAAW,OAAA,EAAS;AACtB,gBAAA;AAAA,cACF;AACA,cAAA,SAAA,CAAU,SAAS,EAAE,CAAA;AAAA,YACvB,CAAA;AAAA,YACA,eAAe,OAAA,CAAQ,aAAA;AAAA,YACvB,WAAW,OAAA,CAAQ,SAAA;AAAA,YACnB,WAAW,OAAA,CAAQ,SAAA;AAAA,YACnB,mBAAmB,CACjB,MAAA,EACA,KAAA,KACG,MAAA,CAAO,QAAQ,KAAA,EAAO,GAAA;AAAA,YAC3B,gBAAgB,CAAC,MAAA,KACf,OAAO,MAAA,KAAW,QAAA,GAAW,SAAS,MAAA,CAAO,KAAA;AAAA,YAE/C,WAAA,EAAa,CAAC,MAAA,qBACZ,GAAA;AAAA,cAAC,SAAA;AAAA,cAAA;AAAA,gBACE,GAAG,MAAA;AAAA,gBACJ,IAAA,EAAK,OAAA;AAAA,gBACL,WAAA,EAAY,SAAA;AAAA,gBACZ,UAAA,EAAY;AAAA,kBACV,GAAG,MAAA,CAAO,UAAA;AAAA,kBACV,GAAG,OAAA,CAAQ;AAAA;AACb;AAAA;AACF;AAAA,SAEJ;AAAA,wBACA,GAAA,CAAC,GAAA,EAAA,EAAI,OAAA,EAAQ,MAAA,EACX,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,OAAA,EAAQ,OAAA,EAAQ,UAAA,EAAW,KAAA,EAAO,eAAA,EAAiB,CAAA,EAChE,CAAA;AAAA,QAAA,CACE,oBAAA,KAAyB,OAAA,IACzB,oBAAA,KAAyB,QAAA,qBACzB,GAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,OAAA;AAAA,YACL,KAAA,EAAO,MAAA;AAAA,YACP,UAAU,CAAC,KAAA,KAAU,SAAA,CAAU,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,YACjD,WAAA,EAAY,YAAA;AAAA,YACZ,SAAA,EAAS,IAAA;AAAA,YACT,SAAA,EAAS,IAAA;AAAA,YACT,OAAA,EAAS,CAAA;AAAA,YACT,UAAA,EAAY;AAAA,cACV,GAAG,OAAA,CAAQ;AAAA,aACb;AAAA,YACA,eAAe,OAAA,CAAQ,aAAA;AAAA,YACvB,WAAW,OAAA,CAAQ,SAAA;AAAA,YACnB,WAAW,OAAA,CAAQ;AAAA;AAAA,SACrB;AAAA,QAAA,CAEA,oBAAA,KAAyB,QAAA,IACzB,oBAAA,KAAyB,SAAA,qBACzB,GAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,OAAA;AAAA,YACL,KAAA,EAAO,MAAA;AAAA,YACP,UAAU,CAAC,KAAA,KAAU,SAAA,CAAU,KAAA,CAAM,OAAO,KAAK,CAAA;AAAA,YACjD,WAAA,EAAY,QAAA;AAAA,YACZ,SAAA,EAAS,IAAA;AAAA,YACT,UAAA,EAAY;AAAA,cACV,GAAG,OAAA,CAAQ,UAAA;AAAA,cACX,SAAA,EAAW;AAAA,aACb;AAAA,YACA,eAAe,OAAA,CAAQ,aAAA;AAAA,YACvB,WAAW,OAAA,CAAQ,SAAA;AAAA,YACnB,WAAW,OAAA,CAAQ;AAAA;AAAA,SACrB;AAAA,QAED,yBAAyB,OAAA,IACxB,oBAAA,KAAyB,YACzB,oBAAA,KAAyB,QAAA,IACzB,yBAAyB,SAAA,oBACvB,GAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,OAAA;AAAA,YACL,QAAA,EAAQ,IAAA;AAAA,YACR,OAAA,EAAS,eAAA;AAAA,YACT,eAAA,EAAiB,eAAA;AAAA,YACjB,KAAA,EAAO,MAAA;AAAA,YACP,UAAA,EAAY,MAAA;AAAA,YACZ,SAAA,EAAS,IAAA;AAAA,YACT,aAAA,EAAe,CAAC,OAAA,KAAY;AAC1B,cAAA,MAAM,MAAA,GAAS,MAAA,CAAO,IAAA,EAAK,CAAE,WAAA,EAAY;AACzC,cAAA,IAAI,CAAC,MAAA,EAAQ;AACX,gBAAA,OAAO,OAAA;AAAA,cACT;AACA,cAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,CAAC,MAAA,KAAW;AAChC,gBAAA,MAAM,GAAA,GAAM,OAAO,MAAM,CAAA;AACzB,gBAAA,MAAM,UAAA,GAAa,IAChB,OAAA,CAAQ,eAAA,EAAiB,EAAE,CAAA,CAC3B,OAAA,CAAQ,eAAe,EAAE,CAAA;AAC5B,gBAAA,MAAM,SAAA,GAAY;AAAA,kBAChB,IAAI,WAAA,EAAY;AAAA,kBAChB,WAAW,WAAA;AAAY,iBACzB;AACA,gBAAA,OAAO,SAAA,CAAU,IAAA;AAAA,kBAAK,CAAC,QAAA,KACrB,QAAA,CAAS,QAAA,CAAS,MAAM;AAAA,iBAC1B;AAAA,cACF,CAAC,CAAA;AAAA,YACH,CAAA;AAAA,YACA,UAAU,CAAC,CAAA,EAAG,KAAA,KAAU,SAAA,CAAU,SAAS,EAAE,CAAA;AAAA,YAC7C,aAAA,EAAe,CAAC,CAAA,EAAG,KAAA,EAAO,MAAA,KAAW;AACnC,cAAA,IAAI,WAAW,OAAA,EAAS;AACtB,gBAAA;AAAA,cACF;AACA,cAAA,SAAA,CAAU,SAAS,EAAE,CAAA;AAAA,YACvB,CAAA;AAAA,YACA,eAAe,OAAA,CAAQ,aAAA;AAAA,YACvB,WAAW,OAAA,CAAQ,SAAA;AAAA,YACnB,WAAW,OAAA,CAAQ,SAAA;AAAA,YACnB,WAAA,EAAa,CAAC,MAAA,qBACZ,GAAA;AAAA,cAAC,SAAA;AAAA,cAAA;AAAA,gBACE,GAAG,MAAA;AAAA,gBACJ,IAAA,EAAK,OAAA;AAAA,gBACL,WAAA,EAAY,WAAA;AAAA,gBACZ,UAAA,EAAY;AAAA,kBACV,GAAG,MAAA,CAAO,UAAA;AAAA,kBACV,GAAG,OAAA,CAAQ;AAAA;AACb;AAAA;AACF;AAAA,SAEJ;AAAA,wBAEJ,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,OAAA;AAAA,YACL,OAAA,EAAQ,WAAA;AAAA,YACR,OAAA,EAAS,OAAA;AAAA,YACT,aAAA,EAAe,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,YACxC,QAAA,EAAU,aAAA;AAAA,YACV,SAAA,EAAU,gBAAA;AAAA,YACX,QAAA,EAAA;AAAA;AAAA;AAED,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,IAEC,wBAAA,oBACC,IAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAI;AAAA,UACF,EAAA,EAAI,GAAA;AAAA,UACJ,CAAA,EAAG,CAAA;AAAA,UACH,YAAA,EAAc,CAAA;AAAA,UACd,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,MAAM,IAAI,CAAA;AAAA,SAC/C;AAAA,QACA,KAAA,EAAO,EAAE,eAAA,EAAiB,wBAAA,EAAyB;AAAA,QAEnD,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,SAAA,EAAU,KAAA,EAAM,SAAQ,QAAA,EAAA,yBAAA,EAE5C,CAAA;AAAA,0BACA,GAAA;AAAA,YAAC,GAAA;AAAA,YAAA;AAAA,cACC,EAAA,EAAI;AAAA,gBACF,OAAA,EAAS,MAAA;AAAA,gBACT,QAAA,EAAU,MAAA;AAAA,gBACV,EAAA,EAAI;AAAA,eACN;AAAA,cACA,OAAO,EAAE,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAE;AAAA,cAEhC,QAAA,EAAA,wBAAA,CAAyB,GAAA,CAAI,CAAC,GAAA,qBAC7B,GAAA;AAAA,gBAAC,IAAA;AAAA,gBAAA;AAAA,kBAEC,IAAA,EAAK,OAAA;AAAA,kBACL,OAAA,EAAQ,UAAA;AAAA,kBACR,KAAA,EAAO,GAAA;AAAA,kBACP,KAAA,EAAO;AAAA,oBACL,WAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,IAAA;AAAA,oBACjC,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM;AAAA;AAC7B,iBAAA;AAAA,gBAPK;AAAA,eASR;AAAA;AAAA;AACH;AAAA;AAAA,KACF;AAAA,wBAID,MAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,QAAA,EAAU,SAAS,GAAA,EAAK,CAAA;AAAA,wBAC7C,MAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,QAAA,EAAU,SAAS,MAAA,EAAQ;AAAA,GAAA,EACnD,CAAA;AAEJ,CAAA;AAEO,MAAM,UAAA,GAAa,KAAK,mBAAmB;;;;"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { Handle, Position, NodeToolbar } from '@xyflow/react';
|
|
3
|
+
import { memo } from 'react';
|
|
3
4
|
import { useTheme, styled, alpha } from '@material-ui/core/styles';
|
|
4
5
|
import Autocomplete from '@material-ui/lab/Autocomplete';
|
|
5
6
|
import { Box, Typography, Chip, Divider, Button, TextField, IconButton, FormControlLabel, Checkbox } from '@material-ui/core';
|
|
@@ -89,7 +90,7 @@ const TextRow = styled(Box)(({ theme }) => ({
|
|
|
89
90
|
marginBottom: theme.spacing(1),
|
|
90
91
|
alignItems: "flex-start"
|
|
91
92
|
}));
|
|
92
|
-
const
|
|
93
|
+
const OutputNodeComponent = ({ data }) => {
|
|
93
94
|
const theme = useTheme();
|
|
94
95
|
const paletteMode = resolvePaletteMode(theme);
|
|
95
96
|
const stopAll = createStopNodeInteraction();
|
|
@@ -363,6 +364,7 @@ const OutputNode = ({ data }) => {
|
|
|
363
364
|
) })
|
|
364
365
|
] });
|
|
365
366
|
};
|
|
367
|
+
const OutputNode = memo(OutputNodeComponent);
|
|
366
368
|
|
|
367
369
|
export { OutputNode };
|
|
368
370
|
//# sourceMappingURL=OutputNode.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OutputNode.esm.js","sources":["../../../src/components/Nodes/OutputNode.tsx"],"sourcesContent":["import { Handle, NodeToolbar, Position } from \"@xyflow/react\";\nimport { alpha, styled, useTheme } from \"@material-ui/core/styles\";\nimport Autocomplete from \"@material-ui/lab/Autocomplete\";\nimport {\n Box,\n Button,\n Checkbox,\n Divider,\n FormControlLabel,\n IconButton,\n TextField,\n Typography,\n Chip,\n} from \"@material-ui/core\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport DeleteOutlineIcon from \"@material-ui/icons/DeleteOutline\";\nimport MoveToInboxIcon from \"@material-ui/icons/MoveToInbox\";\nimport type { OutputNodeData } from \"./types\";\nimport { createStopNodeInteraction } from \"./common/nodeInteraction\";\nimport { useOutputController } from \"./output/useOutputController\";\nimport { AutoWidthPopper } from \"./common/AutoWidthPopper\";\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.16 : 0.09\n ),\n border: `1px solid ${alpha(theme.palette.info.main, 0.3)}`,\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.info.light,\n paletteMode === \"dark\" ? 0.28 : 0.16\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.info.main,\n paletteMode === \"dark\" ? 0.24 : 0.14\n ),\n border: `1px solid ${alpha(theme.palette.info.main, 0.4)}`,\n };\n});\n\nconst SectionHeader = styled(Box)(({ theme }) => {\n const paletteMode = resolvePaletteMode(theme);\n return {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n marginTop: theme.spacing(1.5),\n marginBottom: theme.spacing(0.5),\n padding: theme.spacing(0.75, 1),\n borderRadius: 8,\n backgroundColor: alpha(\n theme.palette.info.main,\n paletteMode === \"dark\" ? 0.18 : 0.1\n ),\n };\n});\n\nconst Row = styled(Box)(({ theme }) => ({\n display: \"grid\",\n gridTemplateColumns: \"repeat(4, 1fr) auto\",\n gap: theme.spacing(1),\n alignItems: \"center\",\n marginBottom: theme.spacing(1),\n}));\n\nconst TextRow = styled(Box)(({ theme }) => ({\n display: \"grid\",\n gridTemplateColumns: \"repeat(3, 1fr)\",\n gap: theme.spacing(1),\n marginBottom: theme.spacing(1),\n alignItems: \"flex-start\",\n}));\n\nexport const OutputNode: React.FC<{ data: OutputNodeData }> = ({ data }) => {\n const theme = useTheme();\n const paletteMode = resolvePaletteMode(theme);\n const stopAll = createStopNodeInteraction();\n const {\n stepOutputReferences,\n referenceOptions,\n links,\n textEntries,\n setLinkFieldValue,\n handleLinkChange,\n handleAddLink,\n handleRemoveLink,\n setTextFieldValue,\n handleTextChange,\n handleTextDefaultToggle,\n handleAddText,\n handleRemoveText,\n } = useOutputController(data);\n\n return (\n <Card>\n <Handle type=\"target\" position={Position.Top} />\n <Header>\n <Box display=\"flex\" alignItems=\"center\">\n <MoveToInboxIcon\n fontSize=\"small\"\n htmlColor={theme.palette.info.main}\n />\n <Typography variant=\"subtitle2\" noWrap>\n Template Output\n </Typography>\n </Box>\n <Chip\n size=\"small\"\n variant=\"outlined\"\n label=\"Result\"\n style={{\n borderColor: theme.palette.info.main,\n color:\n paletteMode === \"dark\"\n ? theme.palette.info.light\n : theme.palette.info.dark,\n }}\n />\n </Header>\n\n <Divider style={{ margin: \"8px 0\", opacity: 0.5 }} />\n\n <SectionHeader>\n <Typography variant=\"caption\" color=\"textSecondary\">\n Links\n </Typography>\n <Button\n size=\"small\"\n startIcon={<AddIcon fontSize=\"small\" />}\n onClick={handleAddLink}\n onPointerDown={stopAll.onPointerDown}\n onKeyDown={stopAll.onKeyDown}\n className={stopAll.className}\n >\n Add Link\n </Button>\n </SectionHeader>\n\n {links.length === 0 && (\n <Typography variant=\"body2\" color=\"textSecondary\">\n No links yet\n </Typography>\n )}\n\n {links.map((link, index) => (\n <Row key={`link-${index}`}>\n <TextField\n {...stopAll}\n size=\"small\"\n label=\"Title\"\n placeholder=\"Link title\"\n value={link.title ?? \"\"}\n onChange={handleLinkChange(index, \"title\")}\n />\n <TextField\n {...stopAll}\n size=\"small\"\n label=\"Icon\"\n placeholder=\"catalog\"\n value={link.icon ?? \"\"}\n onChange={handleLinkChange(index, \"icon\")}\n />\n <Autocomplete\n size=\"small\"\n freeSolo\n options={referenceOptions}\n PopperComponent={AutoWidthPopper}\n value={\n link.url === undefined || link.url === null\n ? \"\"\n : String(link.url)\n }\n inputValue={\n link.url === undefined || link.url === null\n ? \"\"\n : String(link.url)\n }\n fullWidth\n onChange={(_, value) =>\n setLinkFieldValue(index, \"url\", value ?? \"\")\n }\n onInputChange={(_, value, reason) => {\n if (reason === \"reset\") {\n return;\n }\n setLinkFieldValue(index, \"url\", value ?? \"\");\n }}\n onPointerDown={stopAll.onPointerDown}\n onKeyDown={stopAll.onKeyDown}\n className={stopAll.className}\n renderInput={(params) => (\n <TextField\n {...params}\n size=\"small\"\n label=\"URL\"\n placeholder=\"https://example.com\"\n inputProps={{\n ...params.inputProps,\n ...stopAll.inputProps,\n }}\n />\n )}\n />\n <TextField\n {...stopAll}\n size=\"small\"\n label=\"Entity Ref\"\n placeholder=\"component:default/example\"\n value={link.entityRef ?? \"\"}\n onChange={handleLinkChange(index, \"entityRef\")}\n />\n <IconButton\n size=\"small\"\n onPointerDown={stopAll.onPointerDown}\n onClick={() => handleRemoveLink(index)}\n >\n <DeleteOutlineIcon fontSize=\"small\" />\n </IconButton>\n </Row>\n ))}\n\n <SectionHeader>\n <Typography variant=\"caption\" color=\"textSecondary\">\n Text\n </Typography>\n <Button\n size=\"small\"\n startIcon={<AddIcon fontSize=\"small\" />}\n onClick={handleAddText}\n onPointerDown={stopAll.onPointerDown}\n onKeyDown={stopAll.onKeyDown}\n className={stopAll.className}\n >\n Add Text\n </Button>\n </SectionHeader>\n\n {textEntries.length === 0 && (\n <Typography variant=\"body2\" color=\"textSecondary\">\n No text snippets yet\n </Typography>\n )}\n\n {textEntries.map((entry, index) => (\n <Box key={`text-${index}`} sx={{ mb: 1 }}>\n <TextRow>\n <TextField\n {...stopAll}\n size=\"small\"\n label=\"Title\"\n value={entry.title ?? \"\"}\n onChange={handleTextChange(index, \"title\")}\n />\n <TextField\n {...stopAll}\n size=\"small\"\n label=\"Icon\"\n value={entry.icon ?? \"\"}\n onChange={handleTextChange(index, \"icon\")}\n />\n <Autocomplete\n size=\"small\"\n freeSolo\n options={referenceOptions}\n PopperComponent={AutoWidthPopper}\n value={\n entry.content === undefined || entry.content === null\n ? \"\"\n : String(entry.content)\n }\n inputValue={\n entry.content === undefined || entry.content === null\n ? \"\"\n : String(entry.content)\n }\n fullWidth\n onChange={(_, value) =>\n setTextFieldValue(index, \"content\", value ?? \"\")\n }\n onInputChange={(_, value, reason) => {\n if (reason === \"reset\") {\n return;\n }\n setTextFieldValue(index, \"content\", value ?? \"\");\n }}\n onPointerDown={stopAll.onPointerDown}\n onKeyDown={stopAll.onKeyDown}\n className={stopAll.className}\n renderInput={(params) => (\n <TextField\n {...params}\n size=\"small\"\n label=\"Content\"\n placeholder=\"Content\"\n multiline\n minRows={2}\n inputProps={{\n ...params.inputProps,\n ...stopAll.inputProps,\n }}\n />\n )}\n />\n </TextRow>\n <Box display=\"flex\" alignItems=\"center\">\n <FormControlLabel\n control={\n <Checkbox\n size=\"small\"\n checked={Boolean(entry.default)}\n onChange={() => handleTextDefaultToggle(index)}\n {...stopAll}\n />\n }\n label=\"Default\"\n />\n <IconButton\n size=\"small\"\n onPointerDown={stopAll.onPointerDown}\n onClick={() => handleRemoveText(index)}\n >\n <DeleteOutlineIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n </Box>\n ))}\n\n {stepOutputReferences.length > 0 && (\n <Box sx={{ mt: 2 }}>\n <Typography variant=\"caption\" color=\"textSecondary\">\n Available step output references\n </Typography>\n <Box sx={{ display: \"flex\", flexWrap: \"wrap\", mt: 0.5 }}>\n {stepOutputReferences.map((reference) => (\n <Chip\n key={reference}\n label={reference}\n size=\"small\"\n variant=\"outlined\"\n />\n ))}\n </Box>\n </Box>\n )}\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 onPointerDown={stopAll.onPointerDown}\n onKeyDown={stopAll.onKeyDown}\n className=\"nodrag nowheel\"\n >\n Add Action Above\n </Button>\n </NodeToolbar>\n </Card>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OutputNode.esm.js","sources":["../../../src/components/Nodes/OutputNode.tsx"],"sourcesContent":["import { Handle, NodeToolbar, Position } from \"@xyflow/react\";\nimport { memo } from \"react\";\nimport { alpha, styled, useTheme } from \"@material-ui/core/styles\";\nimport Autocomplete from \"@material-ui/lab/Autocomplete\";\nimport {\n Box,\n Button,\n Checkbox,\n Divider,\n FormControlLabel,\n IconButton,\n TextField,\n Typography,\n Chip,\n} from \"@material-ui/core\";\nimport AddIcon from \"@material-ui/icons/Add\";\nimport DeleteOutlineIcon from \"@material-ui/icons/DeleteOutline\";\nimport MoveToInboxIcon from \"@material-ui/icons/MoveToInbox\";\nimport type { OutputNodeData } from \"./types\";\nimport { createStopNodeInteraction } from \"./common/nodeInteraction\";\nimport { useOutputController } from \"./output/useOutputController\";\nimport { AutoWidthPopper } from \"./common/AutoWidthPopper\";\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.16 : 0.09\n ),\n border: `1px solid ${alpha(theme.palette.info.main, 0.3)}`,\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.info.light,\n paletteMode === \"dark\" ? 0.28 : 0.16\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.info.main,\n paletteMode === \"dark\" ? 0.24 : 0.14\n ),\n border: `1px solid ${alpha(theme.palette.info.main, 0.4)}`,\n };\n});\n\nconst SectionHeader = styled(Box)(({ theme }) => {\n const paletteMode = resolvePaletteMode(theme);\n return {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n marginTop: theme.spacing(1.5),\n marginBottom: theme.spacing(0.5),\n padding: theme.spacing(0.75, 1),\n borderRadius: 8,\n backgroundColor: alpha(\n theme.palette.info.main,\n paletteMode === \"dark\" ? 0.18 : 0.1\n ),\n };\n});\n\nconst Row = styled(Box)(({ theme }) => ({\n display: \"grid\",\n gridTemplateColumns: \"repeat(4, 1fr) auto\",\n gap: theme.spacing(1),\n alignItems: \"center\",\n marginBottom: theme.spacing(1),\n}));\n\nconst TextRow = styled(Box)(({ theme }) => ({\n display: \"grid\",\n gridTemplateColumns: \"repeat(3, 1fr)\",\n gap: theme.spacing(1),\n marginBottom: theme.spacing(1),\n alignItems: \"flex-start\",\n}));\n\nconst OutputNodeComponent: React.FC<{ data: OutputNodeData }> = ({ data }) => {\n const theme = useTheme();\n const paletteMode = resolvePaletteMode(theme);\n const stopAll = createStopNodeInteraction();\n const {\n stepOutputReferences,\n referenceOptions,\n links,\n textEntries,\n setLinkFieldValue,\n handleLinkChange,\n handleAddLink,\n handleRemoveLink,\n setTextFieldValue,\n handleTextChange,\n handleTextDefaultToggle,\n handleAddText,\n handleRemoveText,\n } = useOutputController(data);\n\n return (\n <Card>\n <Handle type=\"target\" position={Position.Top} />\n <Header>\n <Box display=\"flex\" alignItems=\"center\">\n <MoveToInboxIcon\n fontSize=\"small\"\n htmlColor={theme.palette.info.main}\n />\n <Typography variant=\"subtitle2\" noWrap>\n Template Output\n </Typography>\n </Box>\n <Chip\n size=\"small\"\n variant=\"outlined\"\n label=\"Result\"\n style={{\n borderColor: theme.palette.info.main,\n color:\n paletteMode === \"dark\"\n ? theme.palette.info.light\n : theme.palette.info.dark,\n }}\n />\n </Header>\n\n <Divider style={{ margin: \"8px 0\", opacity: 0.5 }} />\n\n <SectionHeader>\n <Typography variant=\"caption\" color=\"textSecondary\">\n Links\n </Typography>\n <Button\n size=\"small\"\n startIcon={<AddIcon fontSize=\"small\" />}\n onClick={handleAddLink}\n onPointerDown={stopAll.onPointerDown}\n onKeyDown={stopAll.onKeyDown}\n className={stopAll.className}\n >\n Add Link\n </Button>\n </SectionHeader>\n\n {links.length === 0 && (\n <Typography variant=\"body2\" color=\"textSecondary\">\n No links yet\n </Typography>\n )}\n\n {links.map((link, index) => (\n <Row key={`link-${index}`}>\n <TextField\n {...stopAll}\n size=\"small\"\n label=\"Title\"\n placeholder=\"Link title\"\n value={link.title ?? \"\"}\n onChange={handleLinkChange(index, \"title\")}\n />\n <TextField\n {...stopAll}\n size=\"small\"\n label=\"Icon\"\n placeholder=\"catalog\"\n value={link.icon ?? \"\"}\n onChange={handleLinkChange(index, \"icon\")}\n />\n <Autocomplete\n size=\"small\"\n freeSolo\n options={referenceOptions}\n PopperComponent={AutoWidthPopper}\n value={\n link.url === undefined || link.url === null\n ? \"\"\n : String(link.url)\n }\n inputValue={\n link.url === undefined || link.url === null\n ? \"\"\n : String(link.url)\n }\n fullWidth\n onChange={(_, value) =>\n setLinkFieldValue(index, \"url\", value ?? \"\")\n }\n onInputChange={(_, value, reason) => {\n if (reason === \"reset\") {\n return;\n }\n setLinkFieldValue(index, \"url\", value ?? \"\");\n }}\n onPointerDown={stopAll.onPointerDown}\n onKeyDown={stopAll.onKeyDown}\n className={stopAll.className}\n renderInput={(params) => (\n <TextField\n {...params}\n size=\"small\"\n label=\"URL\"\n placeholder=\"https://example.com\"\n inputProps={{\n ...params.inputProps,\n ...stopAll.inputProps,\n }}\n />\n )}\n />\n <TextField\n {...stopAll}\n size=\"small\"\n label=\"Entity Ref\"\n placeholder=\"component:default/example\"\n value={link.entityRef ?? \"\"}\n onChange={handleLinkChange(index, \"entityRef\")}\n />\n <IconButton\n size=\"small\"\n onPointerDown={stopAll.onPointerDown}\n onClick={() => handleRemoveLink(index)}\n >\n <DeleteOutlineIcon fontSize=\"small\" />\n </IconButton>\n </Row>\n ))}\n\n <SectionHeader>\n <Typography variant=\"caption\" color=\"textSecondary\">\n Text\n </Typography>\n <Button\n size=\"small\"\n startIcon={<AddIcon fontSize=\"small\" />}\n onClick={handleAddText}\n onPointerDown={stopAll.onPointerDown}\n onKeyDown={stopAll.onKeyDown}\n className={stopAll.className}\n >\n Add Text\n </Button>\n </SectionHeader>\n\n {textEntries.length === 0 && (\n <Typography variant=\"body2\" color=\"textSecondary\">\n No text snippets yet\n </Typography>\n )}\n\n {textEntries.map((entry, index) => (\n <Box key={`text-${index}`} sx={{ mb: 1 }}>\n <TextRow>\n <TextField\n {...stopAll}\n size=\"small\"\n label=\"Title\"\n value={entry.title ?? \"\"}\n onChange={handleTextChange(index, \"title\")}\n />\n <TextField\n {...stopAll}\n size=\"small\"\n label=\"Icon\"\n value={entry.icon ?? \"\"}\n onChange={handleTextChange(index, \"icon\")}\n />\n <Autocomplete\n size=\"small\"\n freeSolo\n options={referenceOptions}\n PopperComponent={AutoWidthPopper}\n value={\n entry.content === undefined || entry.content === null\n ? \"\"\n : String(entry.content)\n }\n inputValue={\n entry.content === undefined || entry.content === null\n ? \"\"\n : String(entry.content)\n }\n fullWidth\n onChange={(_, value) =>\n setTextFieldValue(index, \"content\", value ?? \"\")\n }\n onInputChange={(_, value, reason) => {\n if (reason === \"reset\") {\n return;\n }\n setTextFieldValue(index, \"content\", value ?? \"\");\n }}\n onPointerDown={stopAll.onPointerDown}\n onKeyDown={stopAll.onKeyDown}\n className={stopAll.className}\n renderInput={(params) => (\n <TextField\n {...params}\n size=\"small\"\n label=\"Content\"\n placeholder=\"Content\"\n multiline\n minRows={2}\n inputProps={{\n ...params.inputProps,\n ...stopAll.inputProps,\n }}\n />\n )}\n />\n </TextRow>\n <Box display=\"flex\" alignItems=\"center\">\n <FormControlLabel\n control={\n <Checkbox\n size=\"small\"\n checked={Boolean(entry.default)}\n onChange={() => handleTextDefaultToggle(index)}\n {...stopAll}\n />\n }\n label=\"Default\"\n />\n <IconButton\n size=\"small\"\n onPointerDown={stopAll.onPointerDown}\n onClick={() => handleRemoveText(index)}\n >\n <DeleteOutlineIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n </Box>\n ))}\n\n {stepOutputReferences.length > 0 && (\n <Box sx={{ mt: 2 }}>\n <Typography variant=\"caption\" color=\"textSecondary\">\n Available step output references\n </Typography>\n <Box sx={{ display: \"flex\", flexWrap: \"wrap\", mt: 0.5 }}>\n {stepOutputReferences.map((reference) => (\n <Chip\n key={reference}\n label={reference}\n size=\"small\"\n variant=\"outlined\"\n />\n ))}\n </Box>\n </Box>\n )}\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 onPointerDown={stopAll.onPointerDown}\n onKeyDown={stopAll.onKeyDown}\n className=\"nodrag nowheel\"\n >\n Add Action Above\n </Button>\n </NodeToolbar>\n </Card>\n );\n};\n\nexport const OutputNode = memo(OutputNodeComponent);\n"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { NodeToolbar, Position, Handle } from '@xyflow/react';
|
|
3
|
+
import { memo } from 'react';
|
|
3
4
|
import { useTheme, styled, alpha } from '@material-ui/core/styles';
|
|
4
5
|
import { Box, Typography, Chip, Button } from '@material-ui/core';
|
|
5
6
|
import SettingsIcon from '@material-ui/icons/Settings';
|
|
@@ -57,7 +58,7 @@ const Header = styled(Box)(({ theme }) => {
|
|
|
57
58
|
border: `1px solid ${alpha(theme.palette.warning.main, 0.4)}`
|
|
58
59
|
};
|
|
59
60
|
});
|
|
60
|
-
const
|
|
61
|
+
const ParametersNodeComponent = ({
|
|
61
62
|
data
|
|
62
63
|
}) => {
|
|
63
64
|
const theme = useTheme();
|
|
@@ -137,6 +138,7 @@ const ParametersNode = ({
|
|
|
137
138
|
/* @__PURE__ */ jsx(Handle, { type: "source", position: Position.Bottom })
|
|
138
139
|
] });
|
|
139
140
|
};
|
|
141
|
+
const ParametersNode = memo(ParametersNodeComponent);
|
|
140
142
|
|
|
141
143
|
export { ParametersNode };
|
|
142
144
|
//# sourceMappingURL=ParametersNode.esm.js.map
|
|
@@ -1 +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\
|
|
1
|
+
{"version":3,"file":"ParametersNode.esm.js","sources":["../../../src/components/Nodes/ParametersNode.tsx"],"sourcesContent":["import { Handle, NodeToolbar, Position } from \"@xyflow/react\";\nimport { memo } from \"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\nconst ParametersNodeComponent: 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\nexport const ParametersNode = memo(ParametersNodeComponent);\n"],"names":[],"mappings":"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"}
|