@hitachivantara/uikit-react-lab 5.5.4 → 5.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/Flow/DroppableFlow.cjs +73 -1
- package/dist/cjs/components/Flow/DroppableFlow.cjs.map +1 -1
- package/dist/cjs/components/Flow/Flow.styles.cjs +40 -1
- package/dist/cjs/components/Flow/Flow.styles.cjs.map +1 -1
- package/dist/cjs/components/Flow/Node/Node.cjs +106 -0
- package/dist/cjs/components/Flow/Node/Node.cjs.map +1 -0
- package/dist/cjs/components/Flow/Node/Node.styles.cjs +89 -0
- package/dist/cjs/components/Flow/Node/Node.styles.cjs.map +1 -0
- package/dist/cjs/components/Flow/Node/Parameters/ParamRenderer.cjs +28 -0
- package/dist/cjs/components/Flow/Node/Parameters/ParamRenderer.cjs.map +1 -0
- package/dist/cjs/components/Flow/Node/Parameters/Select.cjs +39 -0
- package/dist/cjs/components/Flow/Node/Parameters/Select.cjs.map +1 -0
- package/dist/cjs/components/Flow/Node/Parameters/Text.cjs +32 -0
- package/dist/cjs/components/Flow/Node/Parameters/Text.cjs.map +1 -0
- package/dist/cjs/index.cjs +4 -0
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/esm/components/Flow/DroppableFlow.js +75 -3
- package/dist/esm/components/Flow/DroppableFlow.js.map +1 -1
- package/dist/esm/components/Flow/Flow.styles.js +41 -2
- package/dist/esm/components/Flow/Flow.styles.js.map +1 -1
- package/dist/esm/components/Flow/Node/Node.js +107 -0
- package/dist/esm/components/Flow/Node/Node.js.map +1 -0
- package/dist/esm/components/Flow/Node/Node.styles.js +89 -0
- package/dist/esm/components/Flow/Node/Node.styles.js.map +1 -0
- package/dist/esm/components/Flow/Node/Parameters/ParamRenderer.js +28 -0
- package/dist/esm/components/Flow/Node/Parameters/ParamRenderer.js.map +1 -0
- package/dist/esm/components/Flow/Node/Parameters/Select.js +39 -0
- package/dist/esm/components/Flow/Node/Parameters/Select.js.map +1 -0
- package/dist/esm/components/Flow/Node/Parameters/Text.js +32 -0
- package/dist/esm/components/Flow/Node/Parameters/Text.js.map +1 -0
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/types/index.d.ts +94 -19
- package/package.json +3 -3
|
@@ -11,6 +11,44 @@ const Flow_styles = require("./Flow.styles.cjs");
|
|
|
11
11
|
const FlowContext = require("./FlowContext/FlowContext.cjs");
|
|
12
12
|
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
13
13
|
const ReactFlow__default = /* @__PURE__ */ _interopDefault(ReactFlow);
|
|
14
|
+
const getNode = (nodes, nodeId) => {
|
|
15
|
+
return nodes.find((n) => n.id === nodeId);
|
|
16
|
+
};
|
|
17
|
+
const validateEdges = (edges, nodes, nodeTypes) => {
|
|
18
|
+
if (edges) {
|
|
19
|
+
const validEdges = [];
|
|
20
|
+
edges.forEach((edge) => {
|
|
21
|
+
var _a, _b, _c, _d, _e, _f;
|
|
22
|
+
if (!edge.sourceHandle || !edge.targetHandle)
|
|
23
|
+
return [];
|
|
24
|
+
const sourceNode = getNode(nodes, edge.source);
|
|
25
|
+
const targetNode = getNode(nodes, edge.target);
|
|
26
|
+
if (!sourceNode || !targetNode)
|
|
27
|
+
return [];
|
|
28
|
+
const sourceType = sourceNode.type;
|
|
29
|
+
const targetType = targetNode.type;
|
|
30
|
+
if (!sourceType || !targetType)
|
|
31
|
+
return [];
|
|
32
|
+
const output = (_c = (_b = (_a = nodeTypes == null ? void 0 : nodeTypes[sourceType]) == null ? void 0 : _a.meta) == null ? void 0 : _b.outputs) == null ? void 0 : _c[edge.sourceHandle];
|
|
33
|
+
const input = (_f = (_e = (_d = nodeTypes == null ? void 0 : nodeTypes[targetType]) == null ? void 0 : _d.meta) == null ? void 0 : _e.inputs) == null ? void 0 : _f[edge.targetHandle];
|
|
34
|
+
const sourceProvides = (output == null ? void 0 : output.provides) || [];
|
|
35
|
+
const targetAccepts = (input == null ? void 0 : input.accepts) || [];
|
|
36
|
+
let isValid = false;
|
|
37
|
+
sourceProvides.forEach((s) => {
|
|
38
|
+
targetAccepts.forEach((t) => {
|
|
39
|
+
if (s === t) {
|
|
40
|
+
isValid = true;
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
if (isValid) {
|
|
45
|
+
validEdges.push(edge);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
return validEdges;
|
|
49
|
+
}
|
|
50
|
+
return [];
|
|
51
|
+
};
|
|
14
52
|
const HvDroppableFlow = ({
|
|
15
53
|
id,
|
|
16
54
|
className,
|
|
@@ -84,8 +122,42 @@ const HvDroppableFlow = ({
|
|
|
84
122
|
handleFlowChange(nodes, eds);
|
|
85
123
|
onEdgesChangeProp == null ? void 0 : onEdgesChangeProp(changes);
|
|
86
124
|
}, [edges, handleFlowChange, nodes, onEdgesChangeProp]);
|
|
87
|
-
|
|
125
|
+
const isValidConnection = (connection) => {
|
|
126
|
+
var _a, _b, _c, _d, _e, _f;
|
|
127
|
+
const sourceNode = getNode(nodes, connection.source);
|
|
128
|
+
const targetNode = getNode(nodes, connection.target);
|
|
129
|
+
if (!sourceNode || !targetNode) {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
const sourceType = sourceNode.type;
|
|
133
|
+
const targetType = targetNode.type;
|
|
134
|
+
if (!sourceType || !targetType) {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
const inputs = ((_b = (_a = nodeTypes == null ? void 0 : nodeTypes[targetType]) == null ? void 0 : _a.meta) == null ? void 0 : _b.inputs) || [];
|
|
138
|
+
const outputs = ((_d = (_c = nodeTypes == null ? void 0 : nodeTypes[sourceType]) == null ? void 0 : _c.meta) == null ? void 0 : _d.outputs) || [];
|
|
139
|
+
const sourceProvides = ((_e = outputs[connection.sourceHandle]) == null ? void 0 : _e.provides) || [];
|
|
140
|
+
const targetAccepts = ((_f = inputs[connection.targetHandle]) == null ? void 0 : _f.accepts) || [];
|
|
141
|
+
let isValid = false;
|
|
142
|
+
sourceProvides.forEach((s) => {
|
|
143
|
+
targetAccepts.forEach((t) => {
|
|
144
|
+
if (s === t) {
|
|
145
|
+
isValid = true;
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
return isValid;
|
|
150
|
+
};
|
|
151
|
+
const validEdges = validateEdges(edges, nodes, nodeTypes);
|
|
152
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { id: elementId, ref: setNodeRef, className: cx(classes.root, className), children: /* @__PURE__ */ jsxRuntime.jsx(ReactFlow__default.default, { nodes, edges: validEdges, nodeTypes, onNodesChange: handleNodesChange, onEdgesChange: handleEdgesChange, onConnect: handleConnect, isValidConnection, defaultEdgeOptions: {
|
|
153
|
+
markerEnd: {
|
|
154
|
+
type: ReactFlow.MarkerType.ArrowClosed,
|
|
155
|
+
height: 20,
|
|
156
|
+
width: 20
|
|
157
|
+
}
|
|
158
|
+
}, ...others, children }) });
|
|
88
159
|
};
|
|
89
160
|
exports.flowClasses = Flow_styles.staticClasses;
|
|
90
161
|
exports.HvDroppableFlow = HvDroppableFlow;
|
|
162
|
+
exports.getNode = getNode;
|
|
91
163
|
//# sourceMappingURL=DroppableFlow.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DroppableFlow.cjs","sources":["../../../../src/components/Flow/DroppableFlow.tsx"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\nimport ReactFlow, {\n Connection,\n EdgeChange,\n NodeChange,\n ReactFlowProps,\n addEdge,\n applyEdgeChanges,\n applyNodeChanges,\n useReactFlow,\n} from \"reactflow\";\nimport \"reactflow/dist/style.css\";\n\nimport { DragEndEvent, useDndMonitor, useDroppable } from \"@dnd-kit/core\";\n\nimport { uid } from \"uid\";\n\nimport { ExtractNames, useUniqueId } from \"@hitachivantara/uikit-react-core\";\n\nimport { HvFlowEdge, HvFlowNode } from \"./types\";\nimport { staticClasses, useClasses } from \"./Flow.styles\";\nimport { useFlowContext } from \"./FlowContext\";\n\nexport { staticClasses as flowClasses };\n\nexport type HvFlowClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvDroppableFlowProps<\n NodeData = any,\n NodeType extends string | undefined = string | undefined\n> extends Omit<ReactFlowProps, \"nodes\" | \"edges\" | \"nodeTypes\"> {\n /** Flow content: background, controls, and minimap. */\n children?: React.ReactNode;\n /** Flow nodes. */\n nodes?: HvFlowNode<NodeData, NodeType>[];\n /** Flow edges. */\n edges?: HvFlowEdge[];\n /** A Jss Object used to override or extend the styles applied to the component. */\n classes?: HvFlowClasses;\n /** Function called when the flow changes. Returns the updated nodes and edges. */\n onFlowChange?: (\n nodes: HvFlowNode<NodeData, NodeType>[],\n edges: HvFlowEdge[]\n ) => void;\n}\n\nexport const HvDroppableFlow = ({\n id,\n className,\n children,\n onFlowChange,\n classes: classesProp,\n nodes: initialNodes = [],\n edges: initialEdges = [],\n onConnect: onConnectProp,\n onNodesChange: onNodesChangeProp,\n onEdgesChange: onEdgesChangeProp,\n ...others\n}: HvDroppableFlowProps) => {\n const { classes, cx } = useClasses(classesProp);\n\n const elementId = useUniqueId(id, \"hvFlow\");\n\n const reactFlowInstance = useReactFlow();\n\n const { nodeTypes } = useFlowContext();\n\n const [nodes, setNodes] = useState(initialNodes);\n const [edges, setEdges] = useState(initialEdges);\n\n const { setNodeRef } = useDroppable({\n id: elementId,\n });\n\n const handleDragEnd = useCallback(\n (event: DragEndEvent) => {\n if (event.over && event.over.id === elementId) {\n const type = event.active.id.toString();\n\n // Converts the coordinates to the react flow coordinate system\n const position = reactFlowInstance.project({\n x: (event.active.data.current?.hvFlow?.x || 0) - event.over.rect.left,\n y: (event.active.data.current?.hvFlow?.y || 0) - event.over.rect.top,\n });\n\n const newNode: HvFlowNode = {\n id: uid(),\n position,\n data: {},\n type,\n };\n\n setNodes((nds) => nds.concat(newNode));\n }\n },\n [elementId, reactFlowInstance, setNodes]\n );\n\n useDndMonitor({\n onDragEnd: handleDragEnd,\n });\n\n const handleFlowChange = useCallback(\n (\n nds: NonNullable<HvDroppableFlowProps[\"nodes\"]>,\n eds: NonNullable<HvDroppableFlowProps[\"edges\"]>\n ) => {\n // The new flow is returned if the user is not dragging nodes\n // This avoids triggering this handler too many times\n const isDragging = nds.find((node) => node.dragging);\n if (!isDragging) {\n onFlowChange?.(nds, eds);\n }\n },\n [onFlowChange]\n );\n\n const handleConnect = useCallback(\n (connection: Connection) => {\n const eds = addEdge(connection, edges);\n setEdges(eds);\n\n handleFlowChange(nodes, eds);\n onConnectProp?.(connection);\n },\n [edges, handleFlowChange, nodes, onConnectProp]\n );\n\n const handleNodesChange = useCallback(\n (changes: NodeChange[]) => {\n const nds = applyNodeChanges(changes, nodes);\n setNodes(nds);\n\n handleFlowChange(nds, edges);\n onNodesChangeProp?.(changes);\n },\n [edges, handleFlowChange, nodes, onNodesChangeProp]\n );\n\n const handleEdgesChange = useCallback(\n (changes: EdgeChange[]) => {\n const eds = applyEdgeChanges(changes, edges);\n setEdges(eds);\n\n handleFlowChange(nodes, eds);\n onEdgesChangeProp?.(changes);\n },\n [edges, handleFlowChange, nodes, onEdgesChangeProp]\n );\n\n return (\n <div\n id={elementId}\n ref={setNodeRef}\n className={cx(classes.root, className)}\n >\n <ReactFlow\n nodes={nodes}\n edges={edges}\n nodeTypes={nodeTypes}\n onNodesChange={handleNodesChange}\n onEdgesChange={handleEdgesChange}\n onConnect={handleConnect}\n {...others}\n >\n {children}\n </ReactFlow>\n </div>\n );\n};\n"],"names":["HvDroppableFlow","id","className","children","onFlowChange","classes","classesProp","nodes","initialNodes","edges","initialEdges","onConnect","onConnectProp","onNodesChange","onNodesChangeProp","onEdgesChange","onEdgesChangeProp","others","cx","useClasses","elementId","useUniqueId","reactFlowInstance","useReactFlow","nodeTypes","useFlowContext","setNodes","useState","setEdges","setNodeRef","useDroppable","handleDragEnd","useCallback","event","over","type","active","toString","position","project","x","data","current","hvFlow","rect","left","y","top","newNode","uid","nds","concat","useDndMonitor","onDragEnd","handleFlowChange","eds","isDragging","find","node","dragging","handleConnect","connection","addEdge","handleNodesChange","changes","applyNodeChanges","handleEdgesChange","applyEdgeChanges","jsx","root","ReactFlow"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DroppableFlow.cjs","sources":["../../../../src/components/Flow/DroppableFlow.tsx"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\nimport ReactFlow, {\n Connection,\n EdgeChange,\n NodeChange,\n ReactFlowProps,\n addEdge,\n applyEdgeChanges,\n applyNodeChanges,\n useReactFlow,\n MarkerType,\n Edge,\n Node,\n} from \"reactflow\";\nimport \"reactflow/dist/style.css\";\n\nimport { DragEndEvent, useDndMonitor, useDroppable } from \"@dnd-kit/core\";\n\nimport { uid } from \"uid\";\n\nimport { ExtractNames, useUniqueId } from \"@hitachivantara/uikit-react-core\";\n\nimport { HvFlowNodeTypes } from \"./types\";\nimport { staticClasses, useClasses } from \"./Flow.styles\";\nimport { useFlowContext } from \"./FlowContext\";\n\nexport { staticClasses as flowClasses };\n\nexport type HvFlowClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvDroppableFlowProps<\n NodeData = any,\n NodeType extends string | undefined = string | undefined\n> extends Omit<ReactFlowProps, \"nodes\" | \"edges\" | \"nodeTypes\"> {\n /** Flow content: background, controls, and minimap. */\n children?: React.ReactNode;\n /** Flow nodes. */\n nodes?: Node<NodeData, NodeType>[];\n /** Flow edges. */\n edges?: Edge[];\n /** A Jss Object used to override or extend the styles applied to the component. */\n classes?: HvFlowClasses;\n /** Function called when the flow changes. Returns the updated nodes and edges. */\n onFlowChange?: (nodes: Node<NodeData, NodeType>[], edges: Edge[]) => void;\n}\n\nexport const getNode = (nodes: Node[], nodeId: string) => {\n return nodes.find((n) => n.id === nodeId);\n};\n\nconst validateEdges = (\n edges: Edge[],\n nodes: Node[],\n nodeTypes: HvFlowNodeTypes<string> | undefined\n) => {\n if (edges) {\n const validEdges: Edge[] = [];\n\n edges.forEach((edge) => {\n if (!edge.sourceHandle || !edge.targetHandle) return [];\n\n const sourceNode = getNode(nodes, edge.source);\n const targetNode = getNode(nodes, edge.target);\n\n if (!sourceNode || !targetNode) return [];\n\n const sourceType = sourceNode.type;\n const targetType = targetNode.type;\n\n if (!sourceType || !targetType) return [];\n\n const output =\n nodeTypes?.[sourceType]?.meta?.outputs?.[edge.sourceHandle];\n const input = nodeTypes?.[targetType]?.meta?.inputs?.[edge.targetHandle];\n\n const sourceProvides = output?.provides || [];\n const targetAccepts = input?.accepts || [];\n\n let isValid = false;\n sourceProvides.forEach((s) => {\n targetAccepts.forEach((t) => {\n if (s === t) {\n isValid = true;\n }\n });\n });\n\n if (isValid) {\n validEdges.push(edge);\n }\n });\n\n return validEdges;\n }\n return [];\n};\n\nexport const HvDroppableFlow = ({\n id,\n className,\n children,\n onFlowChange,\n classes: classesProp,\n nodes: initialNodes = [],\n edges: initialEdges = [],\n onConnect: onConnectProp,\n onNodesChange: onNodesChangeProp,\n onEdgesChange: onEdgesChangeProp,\n ...others\n}: HvDroppableFlowProps) => {\n const { classes, cx } = useClasses(classesProp);\n\n const elementId = useUniqueId(id, \"hvFlow\");\n\n const reactFlowInstance = useReactFlow();\n\n const { nodeTypes } = useFlowContext();\n\n const [nodes, setNodes] = useState(initialNodes);\n const [edges, setEdges] = useState(initialEdges);\n\n const { setNodeRef } = useDroppable({\n id: elementId,\n });\n\n const handleDragEnd = useCallback(\n (event: DragEndEvent) => {\n if (event.over && event.over.id === elementId) {\n const type = event.active.id.toString();\n\n // Converts the coordinates to the react flow coordinate system\n const position = reactFlowInstance.project({\n x: (event.active.data.current?.hvFlow?.x || 0) - event.over.rect.left,\n y: (event.active.data.current?.hvFlow?.y || 0) - event.over.rect.top,\n });\n\n const newNode: Node = {\n id: uid(),\n position,\n data: {},\n type,\n };\n\n setNodes((nds) => nds.concat(newNode));\n }\n },\n [elementId, reactFlowInstance, setNodes]\n );\n\n useDndMonitor({\n onDragEnd: handleDragEnd,\n });\n\n const handleFlowChange = useCallback(\n (\n nds: NonNullable<HvDroppableFlowProps[\"nodes\"]>,\n eds: NonNullable<HvDroppableFlowProps[\"edges\"]>\n ) => {\n // The new flow is returned if the user is not dragging nodes\n // This avoids triggering this handler too many times\n const isDragging = nds.find((node) => node.dragging);\n if (!isDragging) {\n onFlowChange?.(nds, eds);\n }\n },\n [onFlowChange]\n );\n\n const handleConnect = useCallback(\n (connection: Connection) => {\n const eds = addEdge(connection, edges);\n setEdges(eds);\n\n handleFlowChange(nodes, eds);\n onConnectProp?.(connection);\n },\n [edges, handleFlowChange, nodes, onConnectProp]\n );\n\n const handleNodesChange = useCallback(\n (changes: NodeChange[]) => {\n const nds = applyNodeChanges(changes, nodes);\n setNodes(nds);\n\n handleFlowChange(nds, edges);\n onNodesChangeProp?.(changes);\n },\n [edges, handleFlowChange, nodes, onNodesChangeProp]\n );\n\n const handleEdgesChange = useCallback(\n (changes: EdgeChange[]) => {\n const eds = applyEdgeChanges(changes, edges);\n setEdges(eds);\n\n handleFlowChange(nodes, eds);\n onEdgesChangeProp?.(changes);\n },\n [edges, handleFlowChange, nodes, onEdgesChangeProp]\n );\n\n const isValidConnection = (connection) => {\n const sourceNode = getNode(nodes, connection.source);\n const targetNode = getNode(nodes, connection.target);\n\n if (!sourceNode || !targetNode) {\n return false;\n }\n\n const sourceType = sourceNode.type;\n const targetType = targetNode.type;\n\n if (!sourceType || !targetType) {\n return false;\n }\n\n const inputs = nodeTypes?.[targetType]?.meta?.inputs || [];\n const outputs = nodeTypes?.[sourceType]?.meta?.outputs || [];\n\n const sourceProvides = outputs[connection.sourceHandle]?.provides || [];\n const targetAccepts = inputs[connection.targetHandle]?.accepts || [];\n\n let isValid = false;\n sourceProvides.forEach((s) => {\n targetAccepts.forEach((t) => {\n if (s === t) {\n isValid = true;\n }\n });\n });\n\n return isValid;\n };\n\n const validEdges = validateEdges(edges, nodes, nodeTypes);\n\n return (\n <div\n id={elementId}\n ref={setNodeRef}\n className={cx(classes.root, className)}\n >\n <ReactFlow\n nodes={nodes}\n edges={validEdges}\n nodeTypes={nodeTypes}\n onNodesChange={handleNodesChange}\n onEdgesChange={handleEdgesChange}\n onConnect={handleConnect}\n isValidConnection={isValidConnection}\n defaultEdgeOptions={{\n markerEnd: {\n type: MarkerType.ArrowClosed,\n height: 20,\n width: 20,\n },\n }}\n {...others}\n >\n {children}\n </ReactFlow>\n </div>\n );\n};\n"],"names":["getNode","nodes","nodeId","find","n","id","validateEdges","edges","nodeTypes","validEdges","forEach","edge","sourceHandle","targetHandle","sourceNode","source","targetNode","target","sourceType","type","targetType","output","meta","outputs","input","inputs","sourceProvides","provides","targetAccepts","accepts","isValid","s","t","push","HvDroppableFlow","className","children","onFlowChange","classes","classesProp","initialNodes","initialEdges","onConnect","onConnectProp","onNodesChange","onNodesChangeProp","onEdgesChange","onEdgesChangeProp","others","cx","useClasses","elementId","useUniqueId","reactFlowInstance","useReactFlow","useFlowContext","setNodes","useState","setEdges","setNodeRef","useDroppable","handleDragEnd","useCallback","event","over","active","toString","position","project","x","data","current","hvFlow","rect","left","y","top","newNode","uid","nds","concat","useDndMonitor","onDragEnd","handleFlowChange","eds","isDragging","node","dragging","handleConnect","connection","addEdge","handleNodesChange","changes","applyNodeChanges","handleEdgesChange","applyEdgeChanges","isValidConnection","jsx","root","ReactFlow","markerEnd","MarkerType","ArrowClosed","height","width"],"mappings":"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"}
|
|
@@ -1,12 +1,51 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const uikitReactCore = require("@hitachivantara/uikit-react-core");
|
|
4
|
+
const Node_styles = require("./Node/Node.styles.cjs");
|
|
5
|
+
require("@emotion/react/jsx-runtime");
|
|
6
|
+
require("@hitachivantara/uikit-react-icons");
|
|
7
|
+
require("@hitachivantara/uikit-styles");
|
|
8
|
+
require("react");
|
|
9
|
+
require("reactflow");
|
|
4
10
|
const {
|
|
5
11
|
staticClasses,
|
|
6
12
|
useClasses
|
|
7
13
|
} = uikitReactCore.createClasses("HvFlow", {
|
|
8
14
|
root: {
|
|
9
|
-
height: "100%"
|
|
15
|
+
height: "100%",
|
|
16
|
+
"& .react-flow__handle": {
|
|
17
|
+
backgroundColor: uikitReactCore.theme.colors.secondary_60,
|
|
18
|
+
width: 8,
|
|
19
|
+
height: 8,
|
|
20
|
+
zIndex: uikitReactCore.theme.zIndices.overlay
|
|
21
|
+
},
|
|
22
|
+
"& .react-flow__handle-connecting": {
|
|
23
|
+
backgroundColor: uikitReactCore.theme.colors.negative_20,
|
|
24
|
+
width: 12,
|
|
25
|
+
height: 12,
|
|
26
|
+
"&.react-flow__handle-top": {
|
|
27
|
+
top: -6
|
|
28
|
+
},
|
|
29
|
+
"&.react-flow__handle-bottom": {
|
|
30
|
+
bottom: -6
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"& .react-flow__handle-valid": {
|
|
34
|
+
backgroundColor: uikitReactCore.theme.colors.positive_20,
|
|
35
|
+
width: 12,
|
|
36
|
+
height: 12,
|
|
37
|
+
"&.react-flow__handle-top": {
|
|
38
|
+
top: -6
|
|
39
|
+
},
|
|
40
|
+
"&.react-flow__handle-bottom": {
|
|
41
|
+
bottom: -6
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
[`& .selected > .${Node_styles.staticClasses.root}`]: {
|
|
45
|
+
border: `1px solid ${uikitReactCore.theme.colors.secondary_60}`,
|
|
46
|
+
borderRadius: uikitReactCore.theme.radii.round,
|
|
47
|
+
boxSizing: "border-box"
|
|
48
|
+
}
|
|
10
49
|
}
|
|
11
50
|
});
|
|
12
51
|
exports.staticClasses = staticClasses;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Flow.styles.cjs","sources":["../../../../src/components/Flow/Flow.styles.tsx"],"sourcesContent":["import { createClasses } from \"@hitachivantara/uikit-react-core\";\n\nexport const { staticClasses, useClasses } = createClasses(\"HvFlow\", {\n root: {
|
|
1
|
+
{"version":3,"file":"Flow.styles.cjs","sources":["../../../../src/components/Flow/Flow.styles.tsx"],"sourcesContent":["import { createClasses, theme } from \"@hitachivantara/uikit-react-core\";\nimport { flowNodeClasses } from \"./Node\";\n\nexport const { staticClasses, useClasses } = createClasses(\"HvFlow\", {\n root: {\n height: \"100%\",\n \"& .react-flow__handle\": {\n backgroundColor: theme.colors.secondary_60,\n width: 8,\n height: 8,\n zIndex: theme.zIndices.overlay,\n },\n \"& .react-flow__handle-connecting\": {\n backgroundColor: theme.colors.negative_20,\n width: 12,\n height: 12,\n \"&.react-flow__handle-top\": {\n top: -6,\n },\n \"&.react-flow__handle-bottom\": {\n bottom: -6,\n },\n },\n \"& .react-flow__handle-valid\": {\n backgroundColor: theme.colors.positive_20,\n width: 12,\n height: 12,\n \"&.react-flow__handle-top\": {\n top: -6,\n },\n \"&.react-flow__handle-bottom\": {\n bottom: -6,\n },\n },\n [`& .selected > .${flowNodeClasses.root}`]: {\n border: `1px solid ${theme.colors.secondary_60}`,\n borderRadius: theme.radii.round,\n boxSizing: \"border-box\",\n },\n },\n});\n"],"names":["staticClasses","useClasses","createClasses","root","height","backgroundColor","theme","colors","secondary_60","width","zIndex","zIndices","overlay","negative_20","top","bottom","positive_20","flowNodeClasses","border","borderRadius","radii","round","boxSizing"],"mappings":";;;;;;;;;AAGa,MAAA;AAAA,EAAEA;AAAAA,EAAeC;AAAW,IAAIC,eAAAA,cAAc,UAAU;AAAA,EACnEC,MAAM;AAAA,IACJC,QAAQ;AAAA,IACR,yBAAyB;AAAA,MACvBC,iBAAiBC,eAAAA,MAAMC,OAAOC;AAAAA,MAC9BC,OAAO;AAAA,MACPL,QAAQ;AAAA,MACRM,QAAQJ,eAAAA,MAAMK,SAASC;AAAAA,IACzB;AAAA,IACA,oCAAoC;AAAA,MAClCP,iBAAiBC,eAAAA,MAAMC,OAAOM;AAAAA,MAC9BJ,OAAO;AAAA,MACPL,QAAQ;AAAA,MACR,4BAA4B;AAAA,QAC1BU,KAAK;AAAA,MACP;AAAA,MACA,+BAA+B;AAAA,QAC7BC,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,IACA,+BAA+B;AAAA,MAC7BV,iBAAiBC,eAAAA,MAAMC,OAAOS;AAAAA,MAC9BP,OAAO;AAAA,MACPL,QAAQ;AAAA,MACR,4BAA4B;AAAA,QAC1BU,KAAK;AAAA,MACP;AAAA,MACA,+BAA+B;AAAA,QAC7BC,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,IACA,CAAE,kBAAiBE,0BAAgBd,IAAK,EAAC,GAAG;AAAA,MAC1Ce,QAAS,aAAYZ,eAAMC,MAAAA,OAAOC,YAAa;AAAA,MAC/CW,cAAcb,eAAAA,MAAMc,MAAMC;AAAAA,MAC1BC,WAAW;AAAA,IACb;AAAA,EACF;AACF,CAAC;;;"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("@emotion/react/jsx-runtime");
|
|
4
|
+
const uikitReactCore = require("@hitachivantara/uikit-react-core");
|
|
5
|
+
const uikitReactIcons = require("@hitachivantara/uikit-react-icons");
|
|
6
|
+
const uikitStyles = require("@hitachivantara/uikit-styles");
|
|
7
|
+
const React = require("react");
|
|
8
|
+
const ReactFlow = require("reactflow");
|
|
9
|
+
const FlowContext = require("../FlowContext/FlowContext.cjs");
|
|
10
|
+
const Node_styles = require("./Node.styles.cjs");
|
|
11
|
+
const ParamRenderer = require("./Parameters/ParamRenderer.cjs");
|
|
12
|
+
const isInputConnected = (id, type, idx, edges) => {
|
|
13
|
+
if (type === "target") {
|
|
14
|
+
return edges.some((e) => e.target === id && e.targetHandle === idx.toString());
|
|
15
|
+
}
|
|
16
|
+
if (type === "source") {
|
|
17
|
+
return edges.some((e) => e.source === id && e.sourceHandle === idx.toString());
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
const HvFlowNode = ({
|
|
21
|
+
id,
|
|
22
|
+
type,
|
|
23
|
+
title,
|
|
24
|
+
description,
|
|
25
|
+
expanded = false,
|
|
26
|
+
params,
|
|
27
|
+
classes: classesProp,
|
|
28
|
+
className
|
|
29
|
+
}) => {
|
|
30
|
+
var _a, _b, _c, _d, _e;
|
|
31
|
+
const [showParams, setShowParams] = React.useState(expanded);
|
|
32
|
+
const reactFlowInstance = ReactFlow.useReactFlow();
|
|
33
|
+
const {
|
|
34
|
+
classes,
|
|
35
|
+
cx,
|
|
36
|
+
css
|
|
37
|
+
} = Node_styles.useClasses(classesProp);
|
|
38
|
+
const {
|
|
39
|
+
nodeGroups,
|
|
40
|
+
nodeTypes
|
|
41
|
+
} = FlowContext.useFlowContext();
|
|
42
|
+
const edges = ReactFlow.useStore((s) => s.edges);
|
|
43
|
+
const nodes = ReactFlow.useStore((s) => s.getNodes());
|
|
44
|
+
const node = nodes.find((n) => n.id === id);
|
|
45
|
+
const groupId = (_a = nodeTypes == null ? void 0 : nodeTypes[type].meta) == null ? void 0 : _a.groupId;
|
|
46
|
+
const groupLabel = groupId && nodeGroups && nodeGroups[groupId].label;
|
|
47
|
+
const inputs = (_c = (_b = nodeTypes == null ? void 0 : nodeTypes[type]) == null ? void 0 : _b.meta) == null ? void 0 : _c.inputs;
|
|
48
|
+
const outputs = (_e = (_d = nodeTypes == null ? void 0 : nodeTypes[type]) == null ? void 0 : _d.meta) == null ? void 0 : _e.outputs;
|
|
49
|
+
const icon = groupId && nodeGroups && nodeGroups[groupId].icon;
|
|
50
|
+
const colorProp = groupId && nodeGroups && nodeGroups[groupId].color;
|
|
51
|
+
const color = uikitStyles.getColor(colorProp);
|
|
52
|
+
React.useEffect(() => {
|
|
53
|
+
const newNodes = nodes.map((n) => {
|
|
54
|
+
if (n.id === id) {
|
|
55
|
+
if (Object.keys(n.data).length === 0) {
|
|
56
|
+
params == null ? void 0 : params.forEach((param) => {
|
|
57
|
+
n.data[param.label] = param.value;
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return n;
|
|
62
|
+
});
|
|
63
|
+
reactFlowInstance.setNodes(newNodes);
|
|
64
|
+
}, []);
|
|
65
|
+
const hasParams = !!(params && params.length > 0);
|
|
66
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cx(css({
|
|
67
|
+
border: `1px solid ${color}`
|
|
68
|
+
}), classes.root, className), children: [
|
|
69
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: cx(css({
|
|
70
|
+
backgroundColor: color
|
|
71
|
+
}), classes.headerContainer), children: [
|
|
72
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: classes.groupContainer, children: [
|
|
73
|
+
icon,
|
|
74
|
+
/* @__PURE__ */ jsxRuntime.jsx(uikitReactCore.HvTypography, { variant: "title4", className: classes.group, children: groupLabel })
|
|
75
|
+
] }),
|
|
76
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { style: {
|
|
77
|
+
display: "flex"
|
|
78
|
+
}, children: [
|
|
79
|
+
/* @__PURE__ */ jsxRuntime.jsx(uikitReactCore.HvTooltip, { title: /* @__PURE__ */ jsxRuntime.jsx(uikitReactCore.HvTypography, { children: description }), children: /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx(uikitReactIcons.Info, {}) }) }),
|
|
80
|
+
/* @__PURE__ */ jsxRuntime.jsx(uikitReactCore.HvButton, { icon: true, disabled: !hasParams, onClick: () => setShowParams((p) => !p), children: showParams ? /* @__PURE__ */ jsxRuntime.jsx(uikitReactIcons.Up, {}) : /* @__PURE__ */ jsxRuntime.jsx(uikitReactIcons.Down, {}) })
|
|
81
|
+
] })
|
|
82
|
+
] }),
|
|
83
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: classes.titleContainer, children: /* @__PURE__ */ jsxRuntime.jsx(uikitReactCore.HvTypography, { children: title }) }),
|
|
84
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: classes.inputsTitleContainer, children: /* @__PURE__ */ jsxRuntime.jsx(uikitReactCore.HvTypography, { children: "Inputs" }) }),
|
|
85
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: classes.inputsContainer, children: inputs == null ? void 0 : inputs.map((input, idx) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: classes.inputContainer, children: [
|
|
86
|
+
/* @__PURE__ */ jsxRuntime.jsx(ReactFlow.Handle, { type: "target", isConnectableStart: false, id: `${idx}`, position: ReactFlow.Position.Left, style: {
|
|
87
|
+
top: 160 + 29 * idx
|
|
88
|
+
} }),
|
|
89
|
+
/* @__PURE__ */ jsxRuntime.jsx(uikitReactCore.HvTypography, { children: input.label }),
|
|
90
|
+
input.isMandatory && !isInputConnected(id, "target", idx, edges) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes.mandatory })
|
|
91
|
+
] }, idx)) }),
|
|
92
|
+
showParams && params && /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes.paramsContainer, children: /* @__PURE__ */ jsxRuntime.jsx(ParamRenderer.default, { nodeId: id, params, data: node == null ? void 0 : node.data }) }),
|
|
93
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: classes.outputsTitleContainer, children: /* @__PURE__ */ jsxRuntime.jsx(uikitReactCore.HvTypography, { children: "Outputs" }) }),
|
|
94
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: classes.outputsContainer, children: outputs == null ? void 0 : outputs.map((output, idx) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: classes.outputContainer, children: [
|
|
95
|
+
/* @__PURE__ */ jsxRuntime.jsx(ReactFlow.Handle, { type: "source", isConnectableEnd: false, id: `${idx}`, position: ReactFlow.Position.Right, style: {
|
|
96
|
+
bottom: -8 + 29 * (outputs.length - idx),
|
|
97
|
+
top: "auto"
|
|
98
|
+
} }),
|
|
99
|
+
output.isMandatory && !isInputConnected(id, "source", idx, edges) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes.mandatory }),
|
|
100
|
+
/* @__PURE__ */ jsxRuntime.jsx(uikitReactCore.HvTypography, { children: output.label })
|
|
101
|
+
] }, idx)) })
|
|
102
|
+
] });
|
|
103
|
+
};
|
|
104
|
+
exports.flowNodeClasses = Node_styles.staticClasses;
|
|
105
|
+
exports.HvFlowNode = HvFlowNode;
|
|
106
|
+
//# sourceMappingURL=Node.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Node.cjs","sources":["../../../../../src/components/Flow/Node/Node.tsx"],"sourcesContent":["import {\n ExtractNames,\n HvBaseProps,\n HvButton,\n HvTooltip,\n HvTypography,\n} from \"@hitachivantara/uikit-react-core\";\nimport { Down, Info, Up } from \"@hitachivantara/uikit-react-icons\";\nimport { getColor } from \"@hitachivantara/uikit-styles\";\nimport { useEffect, useState } from \"react\";\nimport { Handle, NodeProps, Position, useReactFlow, useStore } from \"reactflow\";\nimport { useFlowContext } from \"../FlowContext/FlowContext\";\n\nimport { HvFlowNodeInput, HvFlowNodeOutput, HvFlowNodeParam } from \"../types\";\nimport { staticClasses, useClasses } from \"./Node.styles\";\nimport ParamRenderer from \"./Parameters/ParamRenderer\";\n\nexport { staticClasses as flowNodeClasses };\n\nexport type HvFlowNodeClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvFlowNodeProps extends Omit<HvBaseProps, \"id\">, NodeProps {\n /** Node title */\n title: string;\n /** Node description */\n description: string;\n /** Node expanded */\n expanded?: boolean;\n /** Node inputs */\n inputs?: HvFlowNodeInput[];\n /** Node outputs */\n outputs?: HvFlowNodeOutput[];\n /** Node parameters */\n params?: HvFlowNodeParam[];\n /** A Jss Object used to override or extend the styles applied to the component. */\n classes?: HvFlowNodeClasses;\n}\n\nconst isInputConnected = (id, type, idx, edges) => {\n if (type === \"target\") {\n return edges.some(\n (e) => e.target === id && e.targetHandle === idx.toString()\n );\n }\n if (type === \"source\") {\n return edges.some(\n (e) => e.source === id && e.sourceHandle === idx.toString()\n );\n }\n};\n\nexport const HvFlowNode = ({\n id,\n type,\n title,\n description,\n expanded = false,\n params,\n classes: classesProp,\n className,\n}: HvFlowNodeProps) => {\n const [showParams, setShowParams] = useState(expanded);\n const reactFlowInstance = useReactFlow();\n\n const { classes, cx, css } = useClasses(classesProp);\n\n const { nodeGroups, nodeTypes } = useFlowContext();\n const edges = useStore((s) => s.edges);\n const nodes = useStore((s) => s.getNodes());\n\n const node = nodes.find((n) => n.id === id);\n\n const groupId = nodeTypes?.[type].meta?.groupId;\n const groupLabel = groupId && nodeGroups && nodeGroups[groupId].label;\n const inputs = nodeTypes?.[type]?.meta?.inputs;\n const outputs = nodeTypes?.[type]?.meta?.outputs;\n const icon = groupId && nodeGroups && nodeGroups[groupId].icon;\n const colorProp = groupId && nodeGroups && nodeGroups[groupId].color;\n const color = getColor(colorProp);\n\n useEffect(() => {\n const newNodes = nodes.map((n) => {\n if (n.id === id) {\n if (Object.keys(n.data).length === 0) {\n params?.forEach((param) => {\n n.data[param.label] = param.value;\n });\n }\n }\n return n;\n });\n reactFlowInstance.setNodes(newNodes);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const hasParams = !!(params && params.length > 0);\n\n return (\n <div\n className={cx(\n css({ border: `1px solid ${color}` }),\n classes.root,\n className\n )}\n >\n <div\n className={cx(css({ backgroundColor: color }), classes.headerContainer)}\n >\n <div className={classes.groupContainer}>\n {icon}\n <HvTypography variant=\"title4\" className={classes.group}>\n {groupLabel}\n </HvTypography>\n </div>\n <div style={{ display: \"flex\" }}>\n <HvTooltip title={<HvTypography>{description}</HvTypography>}>\n <div>\n <Info />\n </div>\n </HvTooltip>\n <HvButton\n icon\n disabled={!hasParams}\n onClick={() => setShowParams((p) => !p)}\n >\n {showParams ? <Up /> : <Down />}\n </HvButton>\n </div>\n </div>\n <div className={classes.titleContainer}>\n <HvTypography>{title}</HvTypography>\n </div>\n <div className={classes.inputsTitleContainer}>\n <HvTypography>Inputs</HvTypography>\n </div>\n <div className={classes.inputsContainer}>\n {inputs?.map((input, idx) => (\n <div className={classes.inputContainer} key={idx}>\n <Handle\n type=\"target\"\n isConnectableStart={false}\n id={`${idx}`}\n position={Position.Left}\n style={{\n top: 160 + 29 * idx,\n }}\n />\n <HvTypography>{input.label}</HvTypography>\n {input.isMandatory &&\n !isInputConnected(id, \"target\", idx, edges) && (\n <div className={classes.mandatory} />\n )}\n </div>\n ))}\n </div>\n {showParams && params && (\n <div className={classes.paramsContainer}>\n <ParamRenderer nodeId={id} params={params} data={node?.data} />\n </div>\n )}\n <div className={classes.outputsTitleContainer}>\n <HvTypography>Outputs</HvTypography>\n </div>\n <div className={classes.outputsContainer}>\n {outputs?.map((output, idx) => (\n <div className={classes.outputContainer} key={idx}>\n <Handle\n type=\"source\"\n isConnectableEnd={false}\n id={`${idx}`}\n position={Position.Right}\n style={{\n bottom: -8 + 29 * (outputs.length - idx),\n top: \"auto\",\n }}\n />\n {output.isMandatory &&\n !isInputConnected(id, \"source\", idx, edges) && (\n <div className={classes.mandatory} />\n )}\n <HvTypography>{output.label}</HvTypography>\n </div>\n ))}\n </div>\n </div>\n );\n};\n"],"names":["isInputConnected","id","type","idx","edges","some","e","target","targetHandle","toString","source","sourceHandle","HvFlowNode","title","description","expanded","params","classes","classesProp","className","showParams","setShowParams","useState","reactFlowInstance","useReactFlow","cx","css","useClasses","nodeGroups","nodeTypes","useFlowContext","useStore","s","nodes","getNodes","node","find","n","groupId","meta","groupLabel","label","inputs","outputs","icon","colorProp","color","getColor","useEffect","newNodes","map","Object","keys","data","length","forEach","param","value","setNodes","hasParams","jsxs","border","root","backgroundColor","headerContainer","groupContainer","HvTypography","group","display","jsx","HvTooltip","Info","HvButton","p","Up","Down","titleContainer","inputsTitleContainer","inputsContainer","input","inputContainer","Handle","Position","Left","top","isMandatory","mandatory","paramsContainer","ParamRenderer","outputsTitleContainer","outputsContainer","output","outputContainer","Right","bottom"],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const uikitReactCore = require("@hitachivantara/uikit-react-core");
|
|
4
|
+
const {
|
|
5
|
+
staticClasses,
|
|
6
|
+
useClasses
|
|
7
|
+
} = uikitReactCore.createClasses("HvFlowNode", {
|
|
8
|
+
root: {
|
|
9
|
+
borderRadius: uikitReactCore.theme.radii.round,
|
|
10
|
+
backgroundColor: uikitReactCore.theme.colors.atmo1,
|
|
11
|
+
boxShadow: uikitReactCore.theme.colors.shadow,
|
|
12
|
+
minWidth: "250px"
|
|
13
|
+
},
|
|
14
|
+
headerContainer: {
|
|
15
|
+
padding: uikitReactCore.theme.spacing(0.5, 1),
|
|
16
|
+
display: "flex",
|
|
17
|
+
flexDirection: "row",
|
|
18
|
+
justifyContent: "space-between",
|
|
19
|
+
alignItems: "center"
|
|
20
|
+
},
|
|
21
|
+
groupContainer: {
|
|
22
|
+
display: "flex",
|
|
23
|
+
flexDirection: "row",
|
|
24
|
+
alignItems: "center"
|
|
25
|
+
},
|
|
26
|
+
group: {
|
|
27
|
+
color: uikitReactCore.theme.colors.base_dark
|
|
28
|
+
},
|
|
29
|
+
titleContainer: {
|
|
30
|
+
padding: uikitReactCore.theme.space.sm
|
|
31
|
+
},
|
|
32
|
+
inputsTitleContainer: {
|
|
33
|
+
display: "flex",
|
|
34
|
+
justifyContent: "center",
|
|
35
|
+
padding: uikitReactCore.theme.space.xs,
|
|
36
|
+
backgroundColor: uikitReactCore.theme.colors.atmo2,
|
|
37
|
+
borderTop: `1px solid ${uikitReactCore.theme.colors.atmo4}`,
|
|
38
|
+
borderBottom: `1px solid ${uikitReactCore.theme.colors.atmo4}`
|
|
39
|
+
},
|
|
40
|
+
outputsTitleContainer: {
|
|
41
|
+
display: "flex",
|
|
42
|
+
justifyContent: "center",
|
|
43
|
+
padding: uikitReactCore.theme.space.xs,
|
|
44
|
+
backgroundColor: uikitReactCore.theme.colors.atmo2,
|
|
45
|
+
borderTop: `1px solid ${uikitReactCore.theme.colors.atmo4}`,
|
|
46
|
+
borderBottom: `1px solid ${uikitReactCore.theme.colors.atmo4}`
|
|
47
|
+
},
|
|
48
|
+
inputsContainer: {
|
|
49
|
+
display: "flex",
|
|
50
|
+
flexDirection: "column",
|
|
51
|
+
padding: uikitReactCore.theme.space.sm,
|
|
52
|
+
gap: uikitReactCore.theme.space.xs,
|
|
53
|
+
alignItems: "flex-start"
|
|
54
|
+
},
|
|
55
|
+
outputsContainer: {
|
|
56
|
+
display: "flex",
|
|
57
|
+
flexDirection: "column",
|
|
58
|
+
padding: uikitReactCore.theme.space.sm,
|
|
59
|
+
gap: uikitReactCore.theme.space.xs,
|
|
60
|
+
alignItems: "flex-end"
|
|
61
|
+
},
|
|
62
|
+
paramsContainer: {
|
|
63
|
+
borderTop: `1px solid ${uikitReactCore.theme.colors.atmo4}`,
|
|
64
|
+
display: "flex",
|
|
65
|
+
flexDirection: "column",
|
|
66
|
+
gap: uikitReactCore.theme.space.xs,
|
|
67
|
+
padding: uikitReactCore.theme.space.sm
|
|
68
|
+
},
|
|
69
|
+
inputContainer: {
|
|
70
|
+
display: "flex",
|
|
71
|
+
flexDirection: "row",
|
|
72
|
+
alignItems: "center"
|
|
73
|
+
},
|
|
74
|
+
outputContainer: {
|
|
75
|
+
display: "flex",
|
|
76
|
+
flexDirection: "row",
|
|
77
|
+
alignItems: "center"
|
|
78
|
+
},
|
|
79
|
+
mandatory: {
|
|
80
|
+
width: 10,
|
|
81
|
+
height: 10,
|
|
82
|
+
margin: uikitReactCore.theme.spacing(0, uikitReactCore.theme.space.xs),
|
|
83
|
+
borderRadius: uikitReactCore.theme.radii.circle,
|
|
84
|
+
backgroundColor: uikitReactCore.theme.colors.negative_20
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
exports.staticClasses = staticClasses;
|
|
88
|
+
exports.useClasses = useClasses;
|
|
89
|
+
//# sourceMappingURL=Node.styles.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Node.styles.cjs","sources":["../../../../../src/components/Flow/Node/Node.styles.tsx"],"sourcesContent":["import { createClasses, theme } from \"@hitachivantara/uikit-react-core\";\n\nexport const { staticClasses, useClasses } = createClasses(\"HvFlowNode\", {\n root: {\n borderRadius: theme.radii.round,\n backgroundColor: theme.colors.atmo1,\n boxShadow: theme.colors.shadow,\n minWidth: \"250px\",\n },\n headerContainer: {\n padding: theme.spacing(0.5, 1),\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n },\n groupContainer: {\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n },\n group: {\n color: theme.colors.base_dark,\n },\n titleContainer: { padding: theme.space.sm },\n inputsTitleContainer: {\n display: \"flex\",\n justifyContent: \"center\",\n padding: theme.space.xs,\n backgroundColor: theme.colors.atmo2,\n borderTop: `1px solid ${theme.colors.atmo4}`,\n borderBottom: `1px solid ${theme.colors.atmo4}`,\n },\n outputsTitleContainer: {\n display: \"flex\",\n justifyContent: \"center\",\n padding: theme.space.xs,\n backgroundColor: theme.colors.atmo2,\n borderTop: `1px solid ${theme.colors.atmo4}`,\n borderBottom: `1px solid ${theme.colors.atmo4}`,\n },\n inputsContainer: {\n display: \"flex\",\n flexDirection: \"column\",\n padding: theme.space.sm,\n gap: theme.space.xs,\n alignItems: \"flex-start\",\n },\n outputsContainer: {\n display: \"flex\",\n flexDirection: \"column\",\n padding: theme.space.sm,\n gap: theme.space.xs,\n alignItems: \"flex-end\",\n },\n paramsContainer: {\n borderTop: `1px solid ${theme.colors.atmo4}`,\n display: \"flex\",\n flexDirection: \"column\",\n gap: theme.space.xs,\n padding: theme.space.sm,\n },\n inputContainer: {\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n },\n outputContainer: {\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n },\n mandatory: {\n width: 10,\n height: 10,\n margin: theme.spacing(0, theme.space.xs),\n borderRadius: theme.radii.circle,\n backgroundColor: theme.colors.negative_20,\n },\n});\n"],"names":["staticClasses","useClasses","createClasses","root","borderRadius","theme","radii","round","backgroundColor","colors","atmo1","boxShadow","shadow","minWidth","headerContainer","padding","spacing","display","flexDirection","justifyContent","alignItems","groupContainer","group","color","base_dark","titleContainer","space","sm","inputsTitleContainer","xs","atmo2","borderTop","atmo4","borderBottom","outputsTitleContainer","inputsContainer","gap","outputsContainer","paramsContainer","inputContainer","outputContainer","mandatory","width","height","margin","circle","negative_20"],"mappings":";;;AAEa,MAAA;AAAA,EAAEA;AAAAA,EAAeC;AAAW,IAAIC,eAAAA,cAAc,cAAc;AAAA,EACvEC,MAAM;AAAA,IACJC,cAAcC,eAAAA,MAAMC,MAAMC;AAAAA,IAC1BC,iBAAiBH,eAAAA,MAAMI,OAAOC;AAAAA,IAC9BC,WAAWN,eAAAA,MAAMI,OAAOG;AAAAA,IACxBC,UAAU;AAAA,EACZ;AAAA,EACAC,iBAAiB;AAAA,IACfC,SAASV,eAAAA,MAAMW,QAAQ,KAAK,CAAC;AAAA,IAC7BC,SAAS;AAAA,IACTC,eAAe;AAAA,IACfC,gBAAgB;AAAA,IAChBC,YAAY;AAAA,EACd;AAAA,EACAC,gBAAgB;AAAA,IACdJ,SAAS;AAAA,IACTC,eAAe;AAAA,IACfE,YAAY;AAAA,EACd;AAAA,EACAE,OAAO;AAAA,IACLC,OAAOlB,eAAAA,MAAMI,OAAOe;AAAAA,EACtB;AAAA,EACAC,gBAAgB;AAAA,IAAEV,SAASV,eAAAA,MAAMqB,MAAMC;AAAAA,EAAG;AAAA,EAC1CC,sBAAsB;AAAA,IACpBX,SAAS;AAAA,IACTE,gBAAgB;AAAA,IAChBJ,SAASV,eAAAA,MAAMqB,MAAMG;AAAAA,IACrBrB,iBAAiBH,eAAAA,MAAMI,OAAOqB;AAAAA,IAC9BC,WAAY,aAAY1B,eAAMI,MAAAA,OAAOuB,KAAM;AAAA,IAC3CC,cAAe,aAAY5B,eAAMI,MAAAA,OAAOuB,KAAM;AAAA,EAChD;AAAA,EACAE,uBAAuB;AAAA,IACrBjB,SAAS;AAAA,IACTE,gBAAgB;AAAA,IAChBJ,SAASV,eAAAA,MAAMqB,MAAMG;AAAAA,IACrBrB,iBAAiBH,eAAAA,MAAMI,OAAOqB;AAAAA,IAC9BC,WAAY,aAAY1B,eAAMI,MAAAA,OAAOuB,KAAM;AAAA,IAC3CC,cAAe,aAAY5B,eAAMI,MAAAA,OAAOuB,KAAM;AAAA,EAChD;AAAA,EACAG,iBAAiB;AAAA,IACflB,SAAS;AAAA,IACTC,eAAe;AAAA,IACfH,SAASV,eAAAA,MAAMqB,MAAMC;AAAAA,IACrBS,KAAK/B,eAAAA,MAAMqB,MAAMG;AAAAA,IACjBT,YAAY;AAAA,EACd;AAAA,EACAiB,kBAAkB;AAAA,IAChBpB,SAAS;AAAA,IACTC,eAAe;AAAA,IACfH,SAASV,eAAAA,MAAMqB,MAAMC;AAAAA,IACrBS,KAAK/B,eAAAA,MAAMqB,MAAMG;AAAAA,IACjBT,YAAY;AAAA,EACd;AAAA,EACAkB,iBAAiB;AAAA,IACfP,WAAY,aAAY1B,eAAMI,MAAAA,OAAOuB,KAAM;AAAA,IAC3Cf,SAAS;AAAA,IACTC,eAAe;AAAA,IACfkB,KAAK/B,eAAAA,MAAMqB,MAAMG;AAAAA,IACjBd,SAASV,eAAAA,MAAMqB,MAAMC;AAAAA,EACvB;AAAA,EACAY,gBAAgB;AAAA,IACdtB,SAAS;AAAA,IACTC,eAAe;AAAA,IACfE,YAAY;AAAA,EACd;AAAA,EACAoB,iBAAiB;AAAA,IACfvB,SAAS;AAAA,IACTC,eAAe;AAAA,IACfE,YAAY;AAAA,EACd;AAAA,EACAqB,WAAW;AAAA,IACTC,OAAO;AAAA,IACPC,QAAQ;AAAA,IACRC,QAAQvC,eAAMW,MAAAA,QAAQ,GAAGX,eAAAA,MAAMqB,MAAMG,EAAE;AAAA,IACvCzB,cAAcC,eAAAA,MAAMC,MAAMuC;AAAAA,IAC1BrC,iBAAiBH,eAAAA,MAAMI,OAAOqC;AAAAA,EAChC;AACF,CAAC;;;"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const jsxRuntime = require("@emotion/react/jsx-runtime");
|
|
4
|
+
const Text = require("./Text.cjs");
|
|
5
|
+
const Select = require("./Select.cjs");
|
|
6
|
+
const renderers = {
|
|
7
|
+
text: Text.default,
|
|
8
|
+
select: Select.default
|
|
9
|
+
};
|
|
10
|
+
const ParamRenderer = ({
|
|
11
|
+
nodeId,
|
|
12
|
+
params,
|
|
13
|
+
data
|
|
14
|
+
}) => {
|
|
15
|
+
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: params.map((param, idx) => {
|
|
16
|
+
const Renderer = renderers[param.type];
|
|
17
|
+
if (Renderer) {
|
|
18
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
19
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { children: param.label }),
|
|
20
|
+
/* @__PURE__ */ jsxRuntime.jsx(Renderer, { nodeId, param, data })
|
|
21
|
+
] }, idx);
|
|
22
|
+
}
|
|
23
|
+
return null;
|
|
24
|
+
}) });
|
|
25
|
+
};
|
|
26
|
+
const ParamRenderer$1 = ParamRenderer;
|
|
27
|
+
exports.default = ParamRenderer$1;
|
|
28
|
+
//# sourceMappingURL=ParamRenderer.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ParamRenderer.cjs","sources":["../../../../../../src/components/Flow/Node/Parameters/ParamRenderer.tsx"],"sourcesContent":["import { HvFlowNodeParam } from \"../../types\";\nimport Text from \"./Text\";\nimport Select from \"./Select\";\n\nexport type ParamRendererProps = {\n nodeId: string;\n params: HvFlowNodeParam[];\n data: any;\n};\n\nconst renderers = {\n text: Text,\n select: Select,\n};\n\nconst ParamRenderer = ({ nodeId, params, data }: ParamRendererProps) => {\n return (\n <>\n {params.map((param, idx) => {\n const Renderer = renderers[param.type];\n if (Renderer) {\n return (\n <div key={idx}>\n <span>{param.label}</span>\n <Renderer nodeId={nodeId} param={param} data={data} />\n </div>\n );\n }\n return null;\n })}\n </>\n );\n};\n\nexport default ParamRenderer;\n"],"names":["renderers","text","Text","select","Select","ParamRenderer","nodeId","params","data","map","param","idx","Renderer","type","jsx","label"],"mappings":";;;;;AAUA,MAAMA,YAAY;AAAA,EAChBC,MAAMC,KAAAA;AAAAA,EACNC,QAAQC,OAAAA;AACV;AAEA,MAAMC,gBAAgBA,CAAC;AAAA,EAAEC;AAAAA,EAAQC;AAAAA,EAAQC;AAAyB,MAAM;AACtE,SAEKD,2BAAAA,IAAAA,WAAAA,UAAAA,EAAAA,UAAAA,OAAOE,IAAI,CAACC,OAAOC,QAAQ;AACpBC,UAAAA,WAAWZ,UAAUU,MAAMG,IAAI;AACrC,QAAID,UAAU;AACZ,6CACG,OACC,EAAA,UAAA;AAAA,QAACE,2BAAAA,IAAA,QAAA,EAAMJ,gBAAMK,MAAM,CAAA;AAAA,QAClBD,2BAAAA,IAAA,UAAA,EAAS,QAAgB,OAAc,KAAW,CAAA;AAAA,MAAA,EAAA,GAF3CH,GAGV;AAAA,IAEJ;AACO,WAAA;AAAA,EACR,CAAA,EACH,CAAA;AAEJ;AAEA,MAAA,kBAAeN;;"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const jsxRuntime = require("@emotion/react/jsx-runtime");
|
|
4
|
+
const uikitReactCore = require("@hitachivantara/uikit-react-core");
|
|
5
|
+
const React = require("react");
|
|
6
|
+
const ReactFlow = require("reactflow");
|
|
7
|
+
const Select = ({
|
|
8
|
+
nodeId,
|
|
9
|
+
param,
|
|
10
|
+
data
|
|
11
|
+
}) => {
|
|
12
|
+
var _a;
|
|
13
|
+
const reactFlowInstance = ReactFlow.useReactFlow();
|
|
14
|
+
const [option, setOption] = React.useState(data[param.id]);
|
|
15
|
+
const onSelectChange = (item) => {
|
|
16
|
+
const nodes = reactFlowInstance.getNodes();
|
|
17
|
+
const newNodes = nodes.map((node) => {
|
|
18
|
+
if (node.id === nodeId) {
|
|
19
|
+
node.data = {
|
|
20
|
+
...node.data,
|
|
21
|
+
[param.id]: item.label
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
return node;
|
|
25
|
+
});
|
|
26
|
+
reactFlowInstance.setNodes(newNodes);
|
|
27
|
+
setOption(item.label);
|
|
28
|
+
};
|
|
29
|
+
return /* @__PURE__ */ jsxRuntime.jsx(uikitReactCore.HvDropdown, { values: (_a = param.options) == null ? void 0 : _a.map((o) => {
|
|
30
|
+
return {
|
|
31
|
+
id: o,
|
|
32
|
+
label: o,
|
|
33
|
+
selected: o === option
|
|
34
|
+
};
|
|
35
|
+
}), onChange: (item) => onSelectChange(item) });
|
|
36
|
+
};
|
|
37
|
+
const Select$1 = Select;
|
|
38
|
+
exports.default = Select$1;
|
|
39
|
+
//# sourceMappingURL=Select.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Select.cjs","sources":["../../../../../../src/components/Flow/Node/Parameters/Select.tsx"],"sourcesContent":["import { HvDropdown } from \"@hitachivantara/uikit-react-core\";\nimport { useState } from \"react\";\nimport { useReactFlow } from \"reactflow\";\n\nconst Select = ({ nodeId, param, data }) => {\n const reactFlowInstance = useReactFlow();\n const [option, setOption] = useState(data[param.id]);\n\n const onSelectChange = (item) => {\n const nodes = reactFlowInstance.getNodes();\n const newNodes = nodes.map((node) => {\n if (node.id === nodeId) {\n node.data = { ...node.data, [param.id]: item.label };\n }\n return node;\n });\n reactFlowInstance.setNodes(newNodes);\n setOption(item.label);\n };\n\n return (\n <HvDropdown\n values={param.options?.map((o) => {\n return { id: o, label: o, selected: o === option };\n })}\n onChange={(item) => onSelectChange(item)}\n />\n );\n};\n\nexport default Select;\n"],"names":["Select","nodeId","param","data","reactFlowInstance","useReactFlow","option","setOption","useState","id","onSelectChange","item","nodes","getNodes","newNodes","map","node","label","setNodes","HvDropdown","options","o","selected"],"mappings":";;;;;;AAIA,MAAMA,SAASA,CAAC;AAAA,EAAEC;AAAAA,EAAQC;AAAAA,EAAOC;AAAK,MAAM;;AAC1C,QAAMC,oBAAoBC,UAAAA;AACpB,QAAA,CAACC,QAAQC,SAAS,IAAIC,MAAAA,SAASL,KAAKD,MAAMO,EAAE,CAAC;AAEnD,QAAMC,iBAAkBC,CAAS,SAAA;AACzBC,UAAAA,QAAQR,kBAAkBS;AAC1BC,UAAAA,WAAWF,MAAMG,IAAKC,CAAS,SAAA;AAC/BA,UAAAA,KAAKP,OAAOR,QAAQ;AACtBe,aAAKb,OAAO;AAAA,UAAE,GAAGa,KAAKb;AAAAA,UAAM,CAACD,MAAMO,EAAE,GAAGE,KAAKM;AAAAA,QAAAA;AAAAA,MAC/C;AACOD,aAAAA;AAAAA,IAAAA,CACR;AACDZ,sBAAkBc,SAASJ,QAAQ;AACnCP,cAAUI,KAAKM,KAAK;AAAA,EAAA;AAGtB,wCACGE,eACC,YAAA,EAAA,SAAQjB,WAAMkB,YAANlB,mBAAea,IAAKM,CAAM,MAAA;AACzB,WAAA;AAAA,MAAEZ,IAAIY;AAAAA,MAAGJ,OAAOI;AAAAA,MAAGC,UAAUD,MAAMf;AAAAA,IAAAA;AAAAA,EAAO,IAEnD,UAAWK,CAASD,SAAAA,eAAeC,IAAI,EACvC,CAAA;AAEN;AAEA,MAAA,WAAeX;;"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const jsxRuntime = require("@emotion/react/jsx-runtime");
|
|
4
|
+
const uikitReactCore = require("@hitachivantara/uikit-react-core");
|
|
5
|
+
const React = require("react");
|
|
6
|
+
const ReactFlow = require("reactflow");
|
|
7
|
+
const Text = ({
|
|
8
|
+
nodeId,
|
|
9
|
+
param,
|
|
10
|
+
data
|
|
11
|
+
}) => {
|
|
12
|
+
const reactFlowInstance = ReactFlow.useReactFlow();
|
|
13
|
+
const [text, setText] = React.useState(data[param.id]);
|
|
14
|
+
const onTextChange = (val) => {
|
|
15
|
+
const nodes = reactFlowInstance.getNodes();
|
|
16
|
+
const newNodes = nodes.map((node) => {
|
|
17
|
+
if (node.id === nodeId) {
|
|
18
|
+
node.data = {
|
|
19
|
+
...node.data,
|
|
20
|
+
[param.id]: val
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
return node;
|
|
24
|
+
});
|
|
25
|
+
reactFlowInstance.setNodes(newNodes);
|
|
26
|
+
setText(val);
|
|
27
|
+
};
|
|
28
|
+
return /* @__PURE__ */ jsxRuntime.jsx(uikitReactCore.HvInput, { value: text, onChange: (evt, val) => onTextChange(val) });
|
|
29
|
+
};
|
|
30
|
+
const Text$1 = Text;
|
|
31
|
+
exports.default = Text$1;
|
|
32
|
+
//# sourceMappingURL=Text.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Text.cjs","sources":["../../../../../../src/components/Flow/Node/Parameters/Text.tsx"],"sourcesContent":["import { HvInput } from \"@hitachivantara/uikit-react-core\";\nimport { useState } from \"react\";\nimport { useReactFlow } from \"reactflow\";\n\nconst Text = ({ nodeId, param, data }) => {\n const reactFlowInstance = useReactFlow();\n const [text, setText] = useState(data[param.id]);\n\n const onTextChange = (val) => {\n const nodes = reactFlowInstance.getNodes();\n const newNodes = nodes.map((node) => {\n if (node.id === nodeId) {\n node.data = { ...node.data, [param.id]: val };\n }\n return node;\n });\n reactFlowInstance.setNodes(newNodes);\n setText(val);\n };\n\n return <HvInput value={text} onChange={(evt, val) => onTextChange(val)} />;\n};\n\nexport default Text;\n"],"names":["Text","nodeId","param","data","reactFlowInstance","useReactFlow","text","setText","useState","id","onTextChange","val","nodes","getNodes","newNodes","map","node","setNodes","jsx","HvInput","evt"],"mappings":";;;;;;AAIA,MAAMA,OAAOA,CAAC;AAAA,EAAEC;AAAAA,EAAQC;AAAAA,EAAOC;AAAK,MAAM;AACxC,QAAMC,oBAAoBC,UAAAA;AACpB,QAAA,CAACC,MAAMC,OAAO,IAAIC,MAAAA,SAASL,KAAKD,MAAMO,EAAE,CAAC;AAE/C,QAAMC,eAAgBC,CAAQ,QAAA;AACtBC,UAAAA,QAAQR,kBAAkBS;AAC1BC,UAAAA,WAAWF,MAAMG,IAAKC,CAAS,SAAA;AAC/BA,UAAAA,KAAKP,OAAOR,QAAQ;AACtBe,aAAKb,OAAO;AAAA,UAAE,GAAGa,KAAKb;AAAAA,UAAM,CAACD,MAAMO,EAAE,GAAGE;AAAAA,QAAAA;AAAAA,MAC1C;AACOK,aAAAA;AAAAA,IAAAA,CACR;AACDZ,sBAAkBa,SAASH,QAAQ;AACnCP,YAAQI,GAAG;AAAA,EAAA;AAGN,SAAAO,+BAACC,eAAAA,SAAQ,EAAA,OAAOb,MAAM,UAAU,CAACc,KAAKT,QAAQD,aAAaC,GAAG,EAAK,CAAA;AAC5E;AAEA,MAAA,SAAeX;;"}
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -21,6 +21,8 @@ const Minimap = require("./components/Flow/Minimap/Minimap.cjs");
|
|
|
21
21
|
const Sidebar_styles = require("./components/Flow/Sidebar/Sidebar.styles.cjs");
|
|
22
22
|
const Sidebar = require("./components/Flow/Sidebar/Sidebar.cjs");
|
|
23
23
|
const Flow = require("./components/Flow/Flow.cjs");
|
|
24
|
+
const Node_styles = require("./components/Flow/Node/Node.styles.cjs");
|
|
25
|
+
const Node = require("./components/Flow/Node/Node.cjs");
|
|
24
26
|
exports.stepNavigationClasses = StepNavigation_styles.staticClasses;
|
|
25
27
|
exports.HvStepNavigation = StepNavigation.HvStepNavigation;
|
|
26
28
|
exports.wizardClasses = Wizard_styles.staticClasses;
|
|
@@ -42,4 +44,6 @@ exports.HvFlowMinimap = Minimap.HvFlowMinimap;
|
|
|
42
44
|
exports.flowSidebarClasses = Sidebar_styles.staticClasses;
|
|
43
45
|
exports.HvFlowSidebar = Sidebar.HvFlowSidebar;
|
|
44
46
|
exports.HvFlow = Flow.HvFlow;
|
|
47
|
+
exports.flowNodeClasses = Node_styles.staticClasses;
|
|
48
|
+
exports.HvFlowNode = Node.HvFlowNode;
|
|
45
49
|
//# sourceMappingURL=index.cjs.map
|
package/dist/cjs/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|