@hitachivantara/uikit-react-lab 5.15.0 → 5.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/Flow/Empty/Empty.cjs +1 -1
- package/dist/cjs/components/Flow/Empty/Empty.cjs.map +1 -1
- package/dist/cjs/components/Flow/Flow.styles.cjs +1 -0
- package/dist/cjs/components/Flow/Flow.styles.cjs.map +1 -1
- package/dist/cjs/components/Flow/Node/BaseNode.cjs +10 -4
- package/dist/cjs/components/Flow/Node/BaseNode.cjs.map +1 -1
- package/dist/cjs/components/Flow/Node/Node.cjs +4 -4
- package/dist/cjs/components/Flow/Node/Node.cjs.map +1 -1
- package/dist/cjs/components/Flow/Sidebar/utils.cjs +34 -35
- package/dist/cjs/components/Flow/Sidebar/utils.cjs.map +1 -1
- package/dist/cjs/components/Flow/hooks/useFlowNode.cjs +4 -4
- package/dist/cjs/components/Flow/hooks/useFlowNode.cjs.map +1 -1
- package/dist/esm/components/Flow/Empty/Empty.js +2 -2
- package/dist/esm/components/Flow/Empty/Empty.js.map +1 -1
- package/dist/esm/components/Flow/Flow.styles.js +1 -0
- package/dist/esm/components/Flow/Flow.styles.js.map +1 -1
- package/dist/esm/components/Flow/Node/BaseNode.js +11 -5
- package/dist/esm/components/Flow/Node/BaseNode.js.map +1 -1
- package/dist/esm/components/Flow/Node/Node.js +4 -4
- package/dist/esm/components/Flow/Node/Node.js.map +1 -1
- package/dist/esm/components/Flow/Sidebar/utils.js +34 -35
- package/dist/esm/components/Flow/Sidebar/utils.js.map +1 -1
- package/dist/esm/components/Flow/hooks/useFlowNode.js +5 -5
- package/dist/esm/components/Flow/hooks/useFlowNode.js.map +1 -1
- package/dist/types/index.d.ts +42 -43
- package/package.json +5 -5
|
@@ -12,7 +12,7 @@ const HvFlowEmpty = ({
|
|
|
12
12
|
classes,
|
|
13
13
|
cx
|
|
14
14
|
} = Empty_styles.useClasses();
|
|
15
|
-
const nodes = ReactFlow.
|
|
15
|
+
const nodes = ReactFlow.useNodes();
|
|
16
16
|
return !nodes || (nodes.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(uikitReactCore.HvEmptyState, { className: cx(classes.root, className), ...others }) : null);
|
|
17
17
|
};
|
|
18
18
|
exports.HvFlowEmpty = HvFlowEmpty;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Empty.cjs","sources":["../../../../../src/components/Flow/Empty/Empty.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"Empty.cjs","sources":["../../../../../src/components/Flow/Empty/Empty.tsx"],"sourcesContent":["import { useNodes } from \"reactflow\";\nimport {\n HvEmptyState,\n HvEmptyStateProps,\n} from \"@hitachivantara/uikit-react-core\";\n\nimport { useClasses } from \"./Empty.styles\";\n\nexport interface HvFlowEmptyProps extends HvEmptyStateProps {}\n\nexport const HvFlowEmpty = ({ className, ...others }: HvFlowEmptyProps) => {\n const { classes, cx } = useClasses();\n const nodes = useNodes();\n return (\n !nodes ||\n (nodes.length === 0 ? (\n <HvEmptyState className={cx(classes.root, className)} {...others} />\n ) : null)\n );\n};\n"],"names":["HvFlowEmpty","className","others","classes","cx","useClasses","nodes","useNodes","length","jsx","HvEmptyState","root"],"mappings":";;;;;;AAUO,MAAMA,cAAcA,CAAC;AAAA,EAAEC;AAAAA,EAAW,GAAGC;AAAyB,MAAM;AACnE,QAAA;AAAA,IAAEC;AAAAA,IAASC;AAAAA,MAAOC,aAAW,WAAA;AACnC,QAAMC,QAAQC,UAAAA;AACd,SACE,CAACD,UACAA,MAAME,WAAW,IACfC,2BAAAA,IAAAC,eAAAA,cAAA,EAAa,WAAWN,GAAGD,QAAQQ,MAAMV,SAAS,GAAG,GAAIC,OAAU,CAAA,IAClE;AAER;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Flow.styles.cjs","sources":["../../../../src/components/Flow/Flow.styles.tsx"],"sourcesContent":["import { createClasses, theme } from \"@hitachivantara/uikit-react-core\";\n\nimport { flowBaseNodeClasses } 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-left\": {\n translate: \"0 4px\",\n },\n },\n \"& .react-flow__handle-valid\": {\n backgroundColor: theme.colors.positive_20,\n width: 12,\n height: 12,\n \"&.react-flow__handle-left\": {\n translate: \"0 4px\",\n },\n },\n [`& .selected > .${flowBaseNodeClasses.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","translate","positive_20","flowBaseNodeClasses","border","borderRadius","radii","round","boxSizing"],"mappings":"
|
|
1
|
+
{"version":3,"file":"Flow.styles.cjs","sources":["../../../../src/components/Flow/Flow.styles.tsx"],"sourcesContent":["import { createClasses, theme } from \"@hitachivantara/uikit-react-core\";\n\nimport { flowBaseNodeClasses } 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-left\": {\n translate: \"0 4px\",\n },\n },\n \"& .react-flow__handle-valid\": {\n backgroundColor: theme.colors.positive_20,\n width: 12,\n height: 12,\n \"&.react-flow__handle-left\": {\n translate: \"0 4px\",\n },\n },\n [`& .selected > .${flowBaseNodeClasses.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","translate","positive_20","flowBaseNodeClasses","border","borderRadius","radii","round","boxSizing"],"mappings":";;;;;;;;;;AAIa,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,6BAA6B;AAAA,QAC3BU,WAAW;AAAA,MACb;AAAA,IACF;AAAA,IACA,+BAA+B;AAAA,MAC7BT,iBAAiBC,eAAAA,MAAMC,OAAOQ;AAAAA,MAC9BN,OAAO;AAAA,MACPL,QAAQ;AAAA,MACR,6BAA6B;AAAA,QAC3BU,WAAW;AAAA,MACb;AAAA,IACF;AAAA,IACA,CAAE,kBAAiBE,8BAAoBb,IAAK,EAAC,GAAG;AAAA,MAC9Cc,QAAS,aAAYX,eAAMC,MAAAA,OAAOC,YAAa;AAAA,MAC/CU,cAAcZ,eAAAA,MAAMa,MAAMC;AAAAA,MAC1BC,WAAW;AAAA,IACb;AAAA,EACF;AACF,CAAC;;;"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
3
3
|
const jsxRuntime = require("@emotion/react/jsx-runtime");
|
|
4
4
|
const React = require("react");
|
|
5
5
|
const ReactFlow = require("reactflow");
|
|
6
|
+
const uid = require("uid");
|
|
6
7
|
const uikitReactCore = require("@hitachivantara/uikit-react-core");
|
|
7
8
|
const uikitReactIcons = require("@hitachivantara/uikit-react-icons");
|
|
8
9
|
const uikitStyles = require("@hitachivantara/uikit-styles");
|
|
@@ -59,8 +60,8 @@ const HvFlowBaseNode = ({
|
|
|
59
60
|
cx,
|
|
60
61
|
css
|
|
61
62
|
} = BaseNode_styles.useClasses(classesProp);
|
|
62
|
-
const edges = ReactFlow.
|
|
63
|
-
const nodes = ReactFlow.
|
|
63
|
+
const edges = ReactFlow.useEdges();
|
|
64
|
+
const nodes = ReactFlow.useNodes();
|
|
64
65
|
const node = nodes.find((n) => n.id === id);
|
|
65
66
|
const handleDefaultAction = React.useCallback((action) => {
|
|
66
67
|
if (!node)
|
|
@@ -78,7 +79,7 @@ const HvFlowBaseNode = ({
|
|
|
78
79
|
case "duplicate":
|
|
79
80
|
reactFlowInstance.addNodes([{
|
|
80
81
|
...node,
|
|
81
|
-
id:
|
|
82
|
+
id: uid.uid(),
|
|
82
83
|
position: {
|
|
83
84
|
x: node.position.x,
|
|
84
85
|
y: node.position.y + (node.height || 0) + 20
|
|
@@ -92,6 +93,7 @@ const HvFlowBaseNode = ({
|
|
|
92
93
|
if (!node)
|
|
93
94
|
return null;
|
|
94
95
|
const color = uikitStyles.getColor(colorProp);
|
|
96
|
+
const iconColor = React.isValidElement(icon) ? uikitStyles.getColor(icon.props.color || "base_dark") : uikitStyles.getColor("base_dark");
|
|
95
97
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cx(
|
|
96
98
|
"nowheel",
|
|
97
99
|
// Disables the default canvas pan behaviour when scrolling inside the node
|
|
@@ -105,7 +107,11 @@ const HvFlowBaseNode = ({
|
|
|
105
107
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: cx(css({
|
|
106
108
|
backgroundColor: color
|
|
107
109
|
}), classes.headerContainer), children: [
|
|
108
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: classes.titleContainer,
|
|
110
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: cx(classes.titleContainer, css({
|
|
111
|
+
"& svg *.color0": {
|
|
112
|
+
fill: iconColor
|
|
113
|
+
}
|
|
114
|
+
})), children: [
|
|
109
115
|
icon,
|
|
110
116
|
/* @__PURE__ */ jsxRuntime.jsx(uikitReactCore.HvTypography, { variant: "title4", className: classes.title, children: title })
|
|
111
117
|
] }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseNode.cjs","sources":["../../../../../src/components/Flow/Node/BaseNode.tsx"],"sourcesContent":["import { isValidElement, useCallback, useEffect, useState } from \"react\";\n\nimport {\n Edge,\n Handle,\n NodeProps,\n NodeToolbar,\n Position,\n useReactFlow,\n useStore,\n} from \"reactflow\";\n\nimport {\n ExtractNames,\n HvActionGeneric,\n HvBaseProps,\n HvButton,\n HvTypography,\n} from \"@hitachivantara/uikit-react-core\";\nimport { Delete, Duplicate } from \"@hitachivantara/uikit-react-icons\";\nimport { HvColorAny, getColor, theme } from \"@hitachivantara/uikit-styles\";\n\nimport {\n HvFlowNodeAction,\n HvFlowBuiltInActions,\n HvFlowNodeInput,\n HvFlowNodeOutput,\n} from \"../types/index\";\nimport { useNodeMetaRegistry } from \"../FlowContext/NodeMetaContext\";\nimport { staticClasses, useClasses } from \"./BaseNode.styles\";\n\nexport { staticClasses as flowBaseNodeClasses };\n\nexport type HvFlowBaseNodeClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvFlowBaseNodeProps<T = any>\n extends Omit<HvBaseProps, \"id\">,\n NodeProps<T> {\n /** Header title */\n title?: string;\n /** Header icon */\n icon?: React.ReactNode;\n /** Header color */\n color?: HvColorAny;\n /** Header items */\n headerItems?: React.ReactNode;\n /** Node inputs */\n inputs?: HvFlowNodeInput[];\n /** Node outputs */\n outputs?: HvFlowNodeOutput[];\n /** Node actions */\n nodeActions?: HvFlowNodeAction[];\n /** A Jss Object used to override or extend the styles applied to the component. */\n classes?: HvFlowBaseNodeClasses;\n}\n\nconst isInputConnected = (\n id: string,\n type: \"target\" | \"source\",\n idx: number,\n edges: Edge[]\n) => {\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 return false;\n};\n\nconst defaultActions: HvFlowBuiltInActions[] = [\n { id: \"delete\", label: \"Delete\", icon: <Delete /> },\n { id: \"duplicate\", label: \"Duplicate\", icon: <Duplicate /> },\n];\n\nconst renderedIcon = (actionIcon: HvActionGeneric[\"icon\"]) =>\n isValidElement(actionIcon) ? actionIcon : (actionIcon as Function)?.();\n\nexport const HvFlowBaseNode = ({\n id,\n title,\n headerItems,\n icon,\n color: colorProp,\n inputs,\n outputs,\n nodeActions = defaultActions,\n classes: classesProp,\n className,\n children,\n}: HvFlowBaseNodeProps<unknown>) => {\n const { registerNode, unregisterNode } = useNodeMetaRegistry();\n useEffect(() => {\n registerNode(id, { label: title || \"\", inputs, outputs });\n return () => unregisterNode(id);\n }, [id, title, inputs, outputs, registerNode, unregisterNode]);\n\n const [showActions, setShowActions] = useState(false);\n const reactFlowInstance = useReactFlow();\n\n const { classes, cx, css } = useClasses(classesProp);\n\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 handleDefaultAction = useCallback(\n (action: HvFlowNodeAction) => {\n if (!node) return;\n\n if (action.callback) {\n action.callback(node);\n return;\n }\n\n // built-in actions\n switch (action.id) {\n case \"delete\":\n reactFlowInstance.deleteElements({ nodes: [node] });\n break;\n case \"duplicate\":\n reactFlowInstance.addNodes([\n {\n ...node,\n id: `${reactFlowInstance.getNodes().length + 1}`,\n position: {\n x: node.position.x,\n y: node.position.y + (node.height || 0) + 20,\n },\n selected: false,\n zIndex: Number(theme.zIndices.overlay),\n },\n ]);\n break;\n default:\n break;\n }\n },\n [node, reactFlowInstance]\n );\n\n if (!node) return null;\n\n const color = getColor(colorProp);\n\n return (\n <div\n className={cx(\n \"nowheel\", // Disables the default canvas pan behaviour when scrolling inside the node\n css({ border: `1px solid ${color}` }),\n classes.root,\n className\n )}\n onMouseEnter={() => setShowActions(true)}\n onMouseLeave={() => setShowActions(false)}\n >\n <NodeToolbar isVisible={showActions} offset={0}>\n {nodeActions?.map((action) => (\n <HvButton\n key={action.id}\n icon\n onClick={() => handleDefaultAction(action)}\n >\n {renderedIcon(action.icon)}\n </HvButton>\n ))}\n </NodeToolbar>\n <div\n className={cx(css({ backgroundColor: color }), classes.headerContainer)}\n >\n <div className={classes.titleContainer}>\n {icon}\n <HvTypography variant=\"title4\" className={classes.title}>\n {title}\n </HvTypography>\n </div>\n {headerItems && <div style={{ display: \"flex\" }}>{headerItems}</div>}\n </div>\n {children && <div className={classes.contentContainer}>{children}</div>}\n {inputs && inputs.length > 0 && (\n <>\n <div className={classes.inputsTitleContainer}>\n <HvTypography>Inputs</HvTypography>\n </div>\n\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: \"auto\",\n bottom:\n (outputs?.length ? 80 : 18) +\n (outputs?.length || 0) * 29 +\n 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 </>\n )}\n {outputs && outputs.length > 0 && (\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: -10 + 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 </>\n )}\n </div>\n );\n};\n"],"names":["isInputConnected","id","type","idx","edges","some","e","target","targetHandle","toString","source","sourceHandle","defaultActions","label","icon","Delete","Duplicate","renderedIcon","actionIcon","isValidElement","HvFlowBaseNode","title","headerItems","color","colorProp","inputs","outputs","nodeActions","classes","classesProp","className","children","registerNode","unregisterNode","useNodeMetaRegistry","useEffect","showActions","setShowActions","useState","reactFlowInstance","useReactFlow","cx","css","useClasses","useStore","s","nodes","getNodes","node","find","n","handleDefaultAction","useCallback","action","callback","deleteElements","addNodes","length","position","x","y","height","selected","zIndex","Number","theme","zIndices","overlay","getColor","jsxs","border","root","jsx","NodeToolbar","map","HvButton","backgroundColor","headerContainer","titleContainer","HvTypography","display","contentContainer","Fragment","inputsTitleContainer","inputsContainer","input","inputContainer","Handle","Position","Left","top","bottom","isMandatory","mandatory","outputsTitleContainer","outputsContainer","output","outputContainer","Right"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BaseNode.cjs","sources":["../../../../../src/components/Flow/Node/BaseNode.tsx"],"sourcesContent":["import { isValidElement, useCallback, useEffect, useState } from \"react\";\nimport {\n Edge,\n Handle,\n NodeProps,\n NodeToolbar,\n Position,\n useEdges,\n useNodes,\n useReactFlow,\n} from \"reactflow\";\nimport { uid } from \"uid\";\nimport {\n ExtractNames,\n HvActionGeneric,\n HvBaseProps,\n HvButton,\n HvTypography,\n} from \"@hitachivantara/uikit-react-core\";\nimport { Delete, Duplicate } from \"@hitachivantara/uikit-react-icons\";\nimport { HvColorAny, getColor, theme } from \"@hitachivantara/uikit-styles\";\n\nimport {\n HvFlowNodeAction,\n HvFlowBuiltInActions,\n HvFlowNodeInput,\n HvFlowNodeOutput,\n} from \"../types\";\nimport { useNodeMetaRegistry } from \"../FlowContext/NodeMetaContext\";\nimport { staticClasses, useClasses } from \"./BaseNode.styles\";\n\nexport { staticClasses as flowBaseNodeClasses };\n\nexport type HvFlowBaseNodeClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvFlowBaseNodeProps<T = any>\n extends Omit<HvBaseProps, \"id\">,\n NodeProps<T> {\n /** Header title */\n title?: string;\n /** Header icon */\n icon?: React.ReactNode;\n /** Header color */\n color?: HvColorAny;\n /** Header items */\n headerItems?: React.ReactNode;\n /** Node inputs */\n inputs?: HvFlowNodeInput[];\n /** Node outputs */\n outputs?: HvFlowNodeOutput[];\n /** Node actions */\n nodeActions?: HvFlowNodeAction[];\n /** A Jss Object used to override or extend the styles applied to the component. */\n classes?: HvFlowBaseNodeClasses;\n}\n\nconst isInputConnected = (\n id: string,\n type: \"target\" | \"source\",\n idx: number,\n edges: Edge[]\n) => {\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 return false;\n};\n\nconst defaultActions: HvFlowBuiltInActions[] = [\n { id: \"delete\", label: \"Delete\", icon: <Delete /> },\n { id: \"duplicate\", label: \"Duplicate\", icon: <Duplicate /> },\n];\n\nconst renderedIcon = (actionIcon: HvActionGeneric[\"icon\"]) =>\n isValidElement(actionIcon) ? actionIcon : (actionIcon as Function)?.();\n\nexport const HvFlowBaseNode = ({\n id,\n title,\n headerItems,\n icon,\n color: colorProp,\n inputs,\n outputs,\n nodeActions = defaultActions,\n classes: classesProp,\n className,\n children,\n}: HvFlowBaseNodeProps<unknown>) => {\n const { registerNode, unregisterNode } = useNodeMetaRegistry();\n useEffect(() => {\n registerNode(id, { label: title || \"\", inputs, outputs });\n return () => unregisterNode(id);\n }, [id, title, inputs, outputs, registerNode, unregisterNode]);\n\n const [showActions, setShowActions] = useState(false);\n const reactFlowInstance = useReactFlow();\n\n const { classes, cx, css } = useClasses(classesProp);\n\n const edges = useEdges();\n const nodes = useNodes();\n\n const node = nodes.find((n) => n.id === id);\n\n const handleDefaultAction = useCallback(\n (action: HvFlowNodeAction) => {\n if (!node) return;\n\n if (action.callback) {\n action.callback(node);\n return;\n }\n\n // built-in actions\n switch (action.id) {\n case \"delete\":\n reactFlowInstance.deleteElements({ nodes: [node] });\n break;\n case \"duplicate\":\n reactFlowInstance.addNodes([\n {\n ...node,\n id: uid(),\n position: {\n x: node.position.x,\n y: node.position.y + (node.height || 0) + 20,\n },\n selected: false,\n zIndex: Number(theme.zIndices.overlay),\n },\n ]);\n break;\n default:\n break;\n }\n },\n [node, reactFlowInstance]\n );\n\n if (!node) return null;\n\n const color = getColor(colorProp);\n const iconColor = isValidElement(icon)\n ? getColor(icon.props.color || \"base_dark\")\n : getColor(\"base_dark\");\n\n return (\n <div\n className={cx(\n \"nowheel\", // Disables the default canvas pan behaviour when scrolling inside the node\n css({ border: `1px solid ${color}` }),\n classes.root,\n className\n )}\n onMouseEnter={() => setShowActions(true)}\n onMouseLeave={() => setShowActions(false)}\n >\n <NodeToolbar isVisible={showActions} offset={0}>\n {nodeActions?.map((action) => (\n <HvButton\n key={action.id}\n icon\n onClick={() => handleDefaultAction(action)}\n >\n {renderedIcon(action.icon)}\n </HvButton>\n ))}\n </NodeToolbar>\n <div\n className={cx(css({ backgroundColor: color }), classes.headerContainer)}\n >\n <div\n className={cx(\n classes.titleContainer,\n css({ \"& svg *.color0\": { fill: iconColor } })\n )}\n >\n {icon}\n <HvTypography variant=\"title4\" className={classes.title}>\n {title}\n </HvTypography>\n </div>\n {headerItems && <div style={{ display: \"flex\" }}>{headerItems}</div>}\n </div>\n {children && <div className={classes.contentContainer}>{children}</div>}\n {inputs && inputs.length > 0 && (\n <>\n <div className={classes.inputsTitleContainer}>\n <HvTypography>Inputs</HvTypography>\n </div>\n\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: \"auto\",\n bottom:\n (outputs?.length ? 80 : 18) +\n (outputs?.length || 0) * 29 +\n 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 </>\n )}\n {outputs && outputs.length > 0 && (\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: -10 + 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 </>\n )}\n </div>\n );\n};\n"],"names":["isInputConnected","id","type","idx","edges","some","e","target","targetHandle","toString","source","sourceHandle","defaultActions","label","icon","Delete","Duplicate","renderedIcon","actionIcon","isValidElement","HvFlowBaseNode","title","headerItems","color","colorProp","inputs","outputs","nodeActions","classes","classesProp","className","children","registerNode","unregisterNode","useNodeMetaRegistry","useEffect","showActions","setShowActions","useState","reactFlowInstance","useReactFlow","cx","css","useClasses","useEdges","nodes","useNodes","node","find","n","handleDefaultAction","useCallback","action","callback","deleteElements","addNodes","uid","position","x","y","height","selected","zIndex","Number","theme","zIndices","overlay","getColor","iconColor","props","jsxs","border","root","jsx","NodeToolbar","map","HvButton","backgroundColor","headerContainer","titleContainer","fill","HvTypography","display","contentContainer","length","Fragment","inputsTitleContainer","inputsContainer","input","inputContainer","Handle","Position","Left","top","bottom","isMandatory","mandatory","outputsTitleContainer","outputsContainer","output","outputContainer","Right"],"mappings":"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"}
|
|
@@ -51,15 +51,15 @@ const HvFlowNode = ({
|
|
|
51
51
|
const hasParams = !!(params && params.length > 0);
|
|
52
52
|
return /* @__PURE__ */ jsxRuntime.jsxs(BaseNode.HvFlowBaseNode, { id, type, title: groupLabel, icon, color, inputs, outputs, nodeActions: defaultActions, classes: classesProp, headerItems: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
53
53
|
headerItems,
|
|
54
|
-
description && /* @__PURE__ */ jsxRuntime.jsx(uikitReactCore.HvTooltip, { title: /* @__PURE__ */ jsxRuntime.jsx(uikitReactCore.HvTypography, { children: description }), children: /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx(uikitReactIcons.Info, {}) }) }),
|
|
55
|
-
hasParams && /* @__PURE__ */ jsxRuntime.jsx(uikitReactCore.HvButton, { icon: true, onClick: () => setShowParams((p) => !p), children: showParams ? /* @__PURE__ */ jsxRuntime.jsx(uikitReactIcons.Up, {}) : /* @__PURE__ */ jsxRuntime.jsx(uikitReactIcons.Down, {}) })
|
|
54
|
+
description && /* @__PURE__ */ jsxRuntime.jsx(uikitReactCore.HvTooltip, { title: /* @__PURE__ */ jsxRuntime.jsx(uikitReactCore.HvTypography, { children: description }), children: /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx(uikitReactIcons.Info, { color: "base_dark" }) }) }),
|
|
55
|
+
hasParams && /* @__PURE__ */ jsxRuntime.jsx(uikitReactCore.HvButton, { icon: true, overrideIconColors: false, onClick: () => setShowParams((p) => !p), children: showParams ? /* @__PURE__ */ jsxRuntime.jsx(uikitReactIcons.Up, { color: "base_dark" }) : /* @__PURE__ */ jsxRuntime.jsx(uikitReactIcons.Down, { color: "base_dark" }) })
|
|
56
56
|
] }), ...props, children: [
|
|
57
57
|
(subtitle || actsVisible?.length || actsDropdown?.length) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: classes.subtitleContainer, children: [
|
|
58
58
|
subtitle && /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx(uikitReactCore.HvTypography, { children: subtitle }) }),
|
|
59
59
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: classes.actions, children: actions?.length && actions?.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
60
|
-
actsVisible?.map((action) => /* @__PURE__ */ jsxRuntime.jsx(uikitReactCore.HvTooltip, { title:
|
|
60
|
+
actsVisible?.map((action) => /* @__PURE__ */ jsxRuntime.jsx(uikitReactCore.HvTooltip, { title: action.label, children: /* @__PURE__ */ jsxRuntime.jsx(uikitReactCore.HvButton, { icon: true, onClick: (event) => {
|
|
61
61
|
actionCallback?.(event, id, action);
|
|
62
|
-
}, "aria-label": action.label, children: renderedIcon(action.icon) }) }
|
|
62
|
+
}, "aria-label": action.label, children: renderedIcon(action.icon) }) }, action.id)),
|
|
63
63
|
actsDropdown && actsDropdown.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(uikitReactCore.HvDropDownMenu, { keepOpened: false, dataList: actsDropdown?.map((action) => ({
|
|
64
64
|
id: action.id,
|
|
65
65
|
label: action.label
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Node.cjs","sources":["../../../../../src/components/Flow/Node/Node.tsx"],"sourcesContent":["import React, {
|
|
1
|
+
{"version":3,"file":"Node.cjs","sources":["../../../../../src/components/Flow/Node/Node.tsx"],"sourcesContent":["import React, { isValidElement, useState } from \"react\";\n\nimport {\n ExtractNames,\n HvActionGeneric,\n HvActionsGenericProps,\n HvButton,\n HvDropDownMenu,\n HvTooltip,\n HvTypography,\n} from \"@hitachivantara/uikit-react-core\";\nimport { getColor } from \"@hitachivantara/uikit-styles\";\nimport { Down, Info, Up } from \"@hitachivantara/uikit-react-icons\";\n\nimport { useFlowContext, useFlowNode } from \"../hooks/index\";\nimport { HvFlowNodeParam } from \"../types/index\";\nimport { staticClasses, useClasses } from \"./Node.styles\";\nimport ParamRenderer from \"./Parameters/ParamRenderer\";\nimport { HvFlowBaseNode, HvFlowBaseNodeProps } from \"./BaseNode\";\n\nexport { staticClasses as flowNodeClasses };\n// TODO How to include here the types from the parent component?\nexport type HvFlowNodeClasses = ExtractNames<typeof useClasses>;\n\nexport type HvFlowNodeDefaults = {\n title?: string;\n subTitle?: string;\n color?: string;\n icon?: React.ReactNode;\n};\n\nexport interface HvFlowNodeProps<T = any>\n extends Omit<HvFlowBaseNodeProps<T>, \"classes\"> {\n /** Node description */\n description?: string;\n /** Node actions */\n actions?: HvActionGeneric[]; // HvFlowNodeActions[];\n /** Node action callback */\n actionCallback?: HvActionsGenericProps[\"actionsCallback\"];\n /** Node maximum number of actions visible */\n maxVisibleActions?: number;\n /** Node expanded */\n expanded?: boolean;\n /** Node parameters */\n params?: HvFlowNodeParam[];\n /** A set of node default values for when there are no groups to fetch this data from. */\n nodeDefaults?: HvFlowNodeDefaults;\n /** A Jss Object used to override or extend the styles applied to the component. */\n classes?: HvFlowNodeClasses | HvFlowBaseNodeProps<T>[\"classes\"];\n}\n\nconst renderedIcon = (actionIcon: HvActionGeneric[\"icon\"]) =>\n isValidElement(actionIcon) ? actionIcon : (actionIcon as Function)?.();\n\nexport const HvFlowNode = ({\n id,\n type,\n headerItems,\n description,\n actions,\n actionCallback,\n maxVisibleActions = 1,\n expanded = false,\n params,\n nodeDefaults,\n classes: classesProp,\n children,\n ...props\n}: HvFlowNodeProps<unknown>) => {\n const { classes } = useClasses(classesProp as HvFlowNodeClasses);\n const [showParams, setShowParams] = useState(expanded);\n const { node } = useFlowNode(id);\n\n const { nodeGroups, nodeTypes, defaultActions } = useFlowContext();\n const groupId = nodeTypes?.[type].meta?.groupId;\n const subtitle = nodeTypes?.[type].meta?.label || nodeDefaults?.subTitle;\n const groupLabel =\n (groupId && nodeGroups && nodeGroups[groupId].label) || nodeDefaults?.title;\n\n const inputs = nodeTypes?.[type]?.meta?.inputs;\n const outputs = nodeTypes?.[type]?.meta?.outputs;\n const icon =\n (groupId && nodeGroups && nodeGroups[groupId].icon) || nodeDefaults?.icon;\n const colorProp =\n (groupId && nodeGroups && nodeGroups[groupId].color) || nodeDefaults?.color;\n const color = getColor(colorProp);\n\n const actsVisible = actions?.slice(0, maxVisibleActions);\n const actsDropdown = actions?.slice(maxVisibleActions);\n\n const hasParams = !!(params && params.length > 0);\n\n return (\n <HvFlowBaseNode\n id={id}\n type={type}\n title={groupLabel}\n icon={icon}\n color={color}\n inputs={inputs}\n outputs={outputs}\n nodeActions={defaultActions}\n classes={classesProp as HvFlowBaseNodeProps<unknown>[\"classes\"]}\n headerItems={\n <>\n {headerItems}\n {description && (\n <HvTooltip title={<HvTypography>{description}</HvTypography>}>\n <div>\n <Info color=\"base_dark\" />\n </div>\n </HvTooltip>\n )}\n {hasParams && (\n <HvButton\n icon\n overrideIconColors={false}\n onClick={() => setShowParams((p) => !p)}\n >\n {showParams ? (\n <Up color=\"base_dark\" />\n ) : (\n <Down color=\"base_dark\" />\n )}\n </HvButton>\n )}\n </>\n }\n {...props}\n >\n {(subtitle || actsVisible?.length || actsDropdown?.length) && (\n <div className={classes.subtitleContainer}>\n {subtitle && (\n <div>\n <HvTypography>{subtitle}</HvTypography>\n </div>\n )}\n <div className={classes.actions}>\n {actions?.length && actions?.length > 0 && (\n <>\n {actsVisible?.map((action) => (\n <HvTooltip key={action.id} title={action.label}>\n <HvButton\n icon\n onClick={(event) => {\n actionCallback?.(event, id, action);\n }}\n aria-label={action.label}\n >\n {renderedIcon(action.icon)}\n </HvButton>\n </HvTooltip>\n ))}\n\n {actsDropdown && actsDropdown.length > 0 && (\n <HvDropDownMenu\n keepOpened={false}\n dataList={actsDropdown?.map((action) => ({\n id: action.id,\n label: action.label,\n }))}\n onClick={(event, action) => {\n actionCallback?.(event, id, action as HvActionGeneric);\n }}\n />\n )}\n </>\n )}\n </div>\n </div>\n )}\n {children}\n {showParams && params && (\n <div className={classes.paramsContainer}>\n <ParamRenderer nodeId={id} params={params} data={node?.data} />\n </div>\n )}\n </HvFlowBaseNode>\n );\n};\n"],"names":["renderedIcon","actionIcon","isValidElement","HvFlowNode","id","type","headerItems","description","actions","actionCallback","maxVisibleActions","expanded","params","nodeDefaults","classes","classesProp","children","props","useClasses","showParams","setShowParams","useState","node","useFlowNode","nodeGroups","nodeTypes","defaultActions","useFlowContext","groupId","meta","subtitle","label","subTitle","groupLabel","title","inputs","outputs","icon","colorProp","color","getColor","actsVisible","slice","actsDropdown","hasParams","length","jsxs","HvFlowBaseNode","jsx","HvTooltip","HvTypography","Info","HvButton","p","Up","Down","subtitleContainer","map","action","event","HvDropDownMenu","paramsContainer","ParamRenderer","data"],"mappings":"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"}
|
|
@@ -1,44 +1,43 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const buildGroups = (nodeGroups, nodeTypes, defaultGroupProps) => {
|
|
4
|
-
if (nodeGroups)
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
4
|
+
if (!nodeGroups)
|
|
5
|
+
return {};
|
|
6
|
+
return Object.entries(nodeGroups).reduce((acc, curr) => {
|
|
7
|
+
const nodesWithGroupId = [];
|
|
8
|
+
const nodesWithoutGroupId = [];
|
|
9
|
+
if (nodeTypes) {
|
|
10
|
+
for (const [nodeType, node] of Object.entries(nodeTypes)) {
|
|
11
|
+
if (node.meta?.groupId === curr[0]) {
|
|
12
|
+
nodesWithGroupId.push({
|
|
13
|
+
type: nodeType,
|
|
14
|
+
label: node.meta?.label,
|
|
15
|
+
data: node.meta?.data
|
|
16
|
+
});
|
|
17
|
+
} else if (!node.meta?.groupId) {
|
|
18
|
+
nodesWithoutGroupId.push({
|
|
19
|
+
type: nodeType,
|
|
20
|
+
label: node.meta?.label || "",
|
|
21
|
+
data: node.meta?.data
|
|
22
|
+
});
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
}
|
|
26
|
+
acc[curr[0]] = {
|
|
27
|
+
...curr[1],
|
|
28
|
+
nodes: nodesWithGroupId
|
|
29
|
+
};
|
|
30
|
+
if (nodesWithoutGroupId.length > 0) {
|
|
31
|
+
acc.Default = {
|
|
32
|
+
// @ts-ignore
|
|
33
|
+
name: "Default",
|
|
34
|
+
label: "Default",
|
|
35
|
+
nodes: nodesWithoutGroupId,
|
|
36
|
+
...defaultGroupProps
|
|
28
37
|
};
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
label: "Default",
|
|
33
|
-
nodes: nodesWithoutGroupId,
|
|
34
|
-
...defaultGroupProps
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
return acc;
|
|
38
|
-
}, {});
|
|
39
|
-
return groups;
|
|
40
|
-
}
|
|
41
|
-
return {};
|
|
38
|
+
}
|
|
39
|
+
return acc;
|
|
40
|
+
}, {});
|
|
42
41
|
};
|
|
43
42
|
exports.buildGroups = buildGroups;
|
|
44
43
|
//# sourceMappingURL=utils.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.cjs","sources":["../../../../../src/components/Flow/Sidebar/utils.ts"],"sourcesContent":["import { HvFlowContextValue } from \"../FlowContext\";\nimport { HvFlowNodeGroup } from \"../types\";\nimport {\n HvFlowSidebarGroupNodes,\n HvFlowSidebarGroupNode,\n} from \"./SidebarGroup\";\n\nexport const buildGroups = (\n nodeGroups: HvFlowContextValue[\"nodeGroups\"],\n nodeTypes: HvFlowContextValue[\"nodeTypes\"],\n defaultGroupProps?: HvFlowNodeGroup\n)
|
|
1
|
+
{"version":3,"file":"utils.cjs","sources":["../../../../../src/components/Flow/Sidebar/utils.ts"],"sourcesContent":["import { HvFlowContextValue } from \"../FlowContext\";\nimport { HvFlowNodeGroup } from \"../types\";\nimport {\n HvFlowSidebarGroupNodes,\n HvFlowSidebarGroupNode,\n} from \"./SidebarGroup\";\n\ntype NodeGroup = HvFlowNodeGroup & { nodes: HvFlowSidebarGroupNodes };\n\nexport const buildGroups = (\n nodeGroups: HvFlowContextValue[\"nodeGroups\"],\n nodeTypes: HvFlowContextValue[\"nodeTypes\"],\n defaultGroupProps?: HvFlowNodeGroup\n) => {\n if (!nodeGroups) return {};\n\n return Object.entries(nodeGroups).reduce((acc, curr) => {\n const nodesWithGroupId: HvFlowSidebarGroupNode[] = [];\n const nodesWithoutGroupId: HvFlowSidebarGroupNode[] = [];\n\n if (nodeTypes) {\n for (const [nodeType, node] of Object.entries(nodeTypes)) {\n if (node.meta?.groupId === curr[0]) {\n nodesWithGroupId.push({\n type: nodeType,\n label: node.meta?.label,\n data: node.meta?.data,\n });\n } else if (!node.meta?.groupId) {\n nodesWithoutGroupId.push({\n type: nodeType,\n label: node.meta?.label || \"\",\n data: node.meta?.data,\n });\n }\n }\n }\n\n acc[curr[0]] = {\n ...curr[1],\n nodes: nodesWithGroupId,\n };\n\n // Create a \"Default\" group for nodes without a groupId\n if (nodesWithoutGroupId.length > 0) {\n acc.Default = {\n // @ts-ignore\n name: \"Default\",\n label: \"Default\",\n nodes: nodesWithoutGroupId,\n ...defaultGroupProps,\n };\n }\n\n return acc;\n }, {} as Record<string, NodeGroup>);\n};\n"],"names":["buildGroups","nodeGroups","nodeTypes","defaultGroupProps","Object","entries","reduce","acc","curr","nodesWithGroupId","nodesWithoutGroupId","nodeType","node","meta","groupId","push","type","label","data","nodes","length","Default","name"],"mappings":";;AASO,MAAMA,cAAcA,CACzBC,YACAC,WACAC,sBACG;AACH,MAAI,CAACF;AAAY,WAAO;AAExB,SAAOG,OAAOC,QAAQJ,UAAU,EAAEK,OAAO,CAACC,KAAKC,SAAS;AACtD,UAAMC,mBAA6C,CAAA;AACnD,UAAMC,sBAAgD,CAAA;AAEtD,QAAIR,WAAW;AACb,iBAAW,CAACS,UAAUC,IAAI,KAAKR,OAAOC,QAAQH,SAAS,GAAG;AACxD,YAAIU,KAAKC,MAAMC,YAAYN,KAAK,CAAC,GAAG;AAClCC,2BAAiBM,KAAK;AAAA,YACpBC,MAAML;AAAAA,YACNM,OAAOL,KAAKC,MAAMI;AAAAA,YAClBC,MAAMN,KAAKC,MAAMK;AAAAA,UAAAA,CAClB;AAAA,QACQ,WAAA,CAACN,KAAKC,MAAMC,SAAS;AAC9BJ,8BAAoBK,KAAK;AAAA,YACvBC,MAAML;AAAAA,YACNM,OAAOL,KAAKC,MAAMI,SAAS;AAAA,YAC3BC,MAAMN,KAAKC,MAAMK;AAAAA,UAAAA,CAClB;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEIV,QAAAA,KAAK,CAAC,CAAC,IAAI;AAAA,MACb,GAAGA,KAAK,CAAC;AAAA,MACTW,OAAOV;AAAAA,IAAAA;AAILC,QAAAA,oBAAoBU,SAAS,GAAG;AAClCb,UAAIc,UAAU;AAAA;AAAA,QAEZC,MAAM;AAAA,QACNL,OAAO;AAAA,QACPE,OAAOT;AAAAA,QACP,GAAGP;AAAAA,MAAAA;AAAAA,IAEP;AAEOI,WAAAA;AAAAA,EACT,GAAG,CAAgC,CAAA;AACrC;;"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const ReactFlow = require("reactflow");
|
|
4
|
-
|
|
5
|
-
const nodes = ReactFlow.
|
|
6
|
-
const edges = ReactFlow.
|
|
4
|
+
function useFlowNode(id) {
|
|
5
|
+
const nodes = ReactFlow.useNodes();
|
|
6
|
+
const edges = ReactFlow.useEdges();
|
|
7
7
|
return {
|
|
8
8
|
// self node
|
|
9
9
|
get node() {
|
|
@@ -20,6 +20,6 @@ const useFlowNode = (id) => {
|
|
|
20
20
|
return parentNodeArray;
|
|
21
21
|
}
|
|
22
22
|
};
|
|
23
|
-
}
|
|
23
|
+
}
|
|
24
24
|
exports.useFlowNode = useFlowNode;
|
|
25
25
|
//# sourceMappingURL=useFlowNode.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFlowNode.cjs","sources":["../../../../../src/components/Flow/hooks/useFlowNode.ts"],"sourcesContent":["import { Edge, Node,
|
|
1
|
+
{"version":3,"file":"useFlowNode.cjs","sources":["../../../../../src/components/Flow/hooks/useFlowNode.ts"],"sourcesContent":["import { Edge, Node, useEdges, useNodes } from \"reactflow\";\n\nexport function useFlowNode<T = any>(id: string) {\n const nodes = useNodes<T>();\n const edges = useEdges();\n\n return {\n // self node\n get node() {\n const self = nodes.find((n: Node) => n.id === id);\n return self;\n },\n\n // parent nodes\n get parentNodes() {\n const connectedEdges = edges.filter((e: Edge) => e.target === id);\n const parentNodeArray = connectedEdges.map((e) => {\n const parentNode = nodes.find((n: Node) => n.id === e.source) as Node;\n return parentNode;\n });\n return parentNodeArray;\n },\n };\n}\n"],"names":["useFlowNode","id","nodes","useNodes","edges","useEdges","node","self","find","n","parentNodes","connectedEdges","filter","e","target","parentNodeArray","map","parentNode","source"],"mappings":";;;AAEO,SAASA,YAAqBC,IAAY;AAC/C,QAAMC,QAAQC,UAAAA;AACd,QAAMC,QAAQC,UAAAA;AAEP,SAAA;AAAA;AAAA,IAEL,IAAIC,OAAO;AACT,YAAMC,OAAOL,MAAMM,KAAK,CAACC,MAAYA,EAAER,OAAOA,EAAE;AACzCM,aAAAA;AAAAA,IACT;AAAA;AAAA,IAGA,IAAIG,cAAc;AAChB,YAAMC,iBAAiBP,MAAMQ,OAAO,CAACC,MAAYA,EAAEC,WAAWb,EAAE;AAC1Dc,YAAAA,kBAAkBJ,eAAeK,IAAKH,CAAM,MAAA;AAC1CI,cAAAA,aAAaf,MAAMM,KAAK,CAACC,MAAYA,EAAER,OAAOY,EAAEK,MAAM;AACrDD,eAAAA;AAAAA,MAAAA,CACR;AACMF,aAAAA;AAAAA,IACT;AAAA,EAAA;AAEJ;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx } from "@emotion/react/jsx-runtime";
|
|
2
|
-
import {
|
|
2
|
+
import { useNodes } from "reactflow";
|
|
3
3
|
import { HvEmptyState } from "@hitachivantara/uikit-react-core";
|
|
4
4
|
import { useClasses } from "./Empty.styles.js";
|
|
5
5
|
const HvFlowEmpty = ({
|
|
@@ -10,7 +10,7 @@ const HvFlowEmpty = ({
|
|
|
10
10
|
classes,
|
|
11
11
|
cx
|
|
12
12
|
} = useClasses();
|
|
13
|
-
const nodes =
|
|
13
|
+
const nodes = useNodes();
|
|
14
14
|
return !nodes || (nodes.length === 0 ? /* @__PURE__ */ jsx(HvEmptyState, { className: cx(classes.root, className), ...others }) : null);
|
|
15
15
|
};
|
|
16
16
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Empty.js","sources":["../../../../../src/components/Flow/Empty/Empty.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"Empty.js","sources":["../../../../../src/components/Flow/Empty/Empty.tsx"],"sourcesContent":["import { useNodes } from \"reactflow\";\nimport {\n HvEmptyState,\n HvEmptyStateProps,\n} from \"@hitachivantara/uikit-react-core\";\n\nimport { useClasses } from \"./Empty.styles\";\n\nexport interface HvFlowEmptyProps extends HvEmptyStateProps {}\n\nexport const HvFlowEmpty = ({ className, ...others }: HvFlowEmptyProps) => {\n const { classes, cx } = useClasses();\n const nodes = useNodes();\n return (\n !nodes ||\n (nodes.length === 0 ? (\n <HvEmptyState className={cx(classes.root, className)} {...others} />\n ) : null)\n );\n};\n"],"names":["HvFlowEmpty","className","others","classes","cx","useClasses","nodes","useNodes","length","root"],"mappings":";;;;AAUO,MAAMA,cAAcA,CAAC;AAAA,EAAEC;AAAAA,EAAW,GAAGC;AAAyB,MAAM;AACnE,QAAA;AAAA,IAAEC;AAAAA,IAASC;AAAAA,MAAOC,WAAW;AACnC,QAAMC,QAAQC;AACd,SACE,CAACD,UACAA,MAAME,WAAW,IACf,oBAAA,cAAA,EAAa,WAAWJ,GAAGD,QAAQM,MAAMR,SAAS,GAAG,GAAIC,OAAU,CAAA,IAClE;AAER;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Flow.styles.js","sources":["../../../../src/components/Flow/Flow.styles.tsx"],"sourcesContent":["import { createClasses, theme } from \"@hitachivantara/uikit-react-core\";\n\nimport { flowBaseNodeClasses } 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-left\": {\n translate: \"0 4px\",\n },\n },\n \"& .react-flow__handle-valid\": {\n backgroundColor: theme.colors.positive_20,\n width: 12,\n height: 12,\n \"&.react-flow__handle-left\": {\n translate: \"0 4px\",\n },\n },\n [`& .selected > .${flowBaseNodeClasses.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","translate","positive_20","flowBaseNodeClasses","border","borderRadius","radii","round","boxSizing"],"mappings":"
|
|
1
|
+
{"version":3,"file":"Flow.styles.js","sources":["../../../../src/components/Flow/Flow.styles.tsx"],"sourcesContent":["import { createClasses, theme } from \"@hitachivantara/uikit-react-core\";\n\nimport { flowBaseNodeClasses } 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-left\": {\n translate: \"0 4px\",\n },\n },\n \"& .react-flow__handle-valid\": {\n backgroundColor: theme.colors.positive_20,\n width: 12,\n height: 12,\n \"&.react-flow__handle-left\": {\n translate: \"0 4px\",\n },\n },\n [`& .selected > .${flowBaseNodeClasses.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","translate","positive_20","flowBaseNodeClasses","border","borderRadius","radii","round","boxSizing"],"mappings":";;;;;;;;AAIa,MAAA;AAAA,EAAEA;AAAAA,EAAeC;AAAW,IAAIC,cAAc,UAAU;AAAA,EACnEC,MAAM;AAAA,IACJC,QAAQ;AAAA,IACR,yBAAyB;AAAA,MACvBC,iBAAiBC,MAAMC,OAAOC;AAAAA,MAC9BC,OAAO;AAAA,MACPL,QAAQ;AAAA,MACRM,QAAQJ,MAAMK,SAASC;AAAAA,IACzB;AAAA,IACA,oCAAoC;AAAA,MAClCP,iBAAiBC,MAAMC,OAAOM;AAAAA,MAC9BJ,OAAO;AAAA,MACPL,QAAQ;AAAA,MACR,6BAA6B;AAAA,QAC3BU,WAAW;AAAA,MACb;AAAA,IACF;AAAA,IACA,+BAA+B;AAAA,MAC7BT,iBAAiBC,MAAMC,OAAOQ;AAAAA,MAC9BN,OAAO;AAAA,MACPL,QAAQ;AAAA,MACR,6BAA6B;AAAA,QAC3BU,WAAW;AAAA,MACb;AAAA,IACF;AAAA,IACA,CAAE,kBAAiBE,gBAAoBb,IAAK,EAAC,GAAG;AAAA,MAC9Cc,QAAS,aAAYX,MAAMC,OAAOC,YAAa;AAAA,MAC/CU,cAAcZ,MAAMa,MAAMC;AAAAA,MAC1BC,WAAW;AAAA,IACb;AAAA,EACF;AACF,CAAC;"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsxs, jsx, Fragment } from "@emotion/react/jsx-runtime";
|
|
2
2
|
import { useEffect, useState, useCallback, isValidElement } from "react";
|
|
3
|
-
import { useReactFlow,
|
|
3
|
+
import { useReactFlow, useEdges, useNodes, NodeToolbar, Handle, Position } from "reactflow";
|
|
4
|
+
import { uid } from "uid";
|
|
4
5
|
import { HvButton, HvTypography } from "@hitachivantara/uikit-react-core";
|
|
5
6
|
import { Delete, Duplicate } from "@hitachivantara/uikit-react-icons";
|
|
6
7
|
import { theme, getColor } from "@hitachivantara/uikit-styles";
|
|
@@ -58,8 +59,8 @@ const HvFlowBaseNode = ({
|
|
|
58
59
|
cx,
|
|
59
60
|
css
|
|
60
61
|
} = useClasses(classesProp);
|
|
61
|
-
const edges =
|
|
62
|
-
const nodes =
|
|
62
|
+
const edges = useEdges();
|
|
63
|
+
const nodes = useNodes();
|
|
63
64
|
const node = nodes.find((n) => n.id === id);
|
|
64
65
|
const handleDefaultAction = useCallback((action) => {
|
|
65
66
|
if (!node)
|
|
@@ -77,7 +78,7 @@ const HvFlowBaseNode = ({
|
|
|
77
78
|
case "duplicate":
|
|
78
79
|
reactFlowInstance.addNodes([{
|
|
79
80
|
...node,
|
|
80
|
-
id:
|
|
81
|
+
id: uid(),
|
|
81
82
|
position: {
|
|
82
83
|
x: node.position.x,
|
|
83
84
|
y: node.position.y + (node.height || 0) + 20
|
|
@@ -91,6 +92,7 @@ const HvFlowBaseNode = ({
|
|
|
91
92
|
if (!node)
|
|
92
93
|
return null;
|
|
93
94
|
const color = getColor(colorProp);
|
|
95
|
+
const iconColor = isValidElement(icon) ? getColor(icon.props.color || "base_dark") : getColor("base_dark");
|
|
94
96
|
return /* @__PURE__ */ jsxs("div", { className: cx(
|
|
95
97
|
"nowheel",
|
|
96
98
|
// Disables the default canvas pan behaviour when scrolling inside the node
|
|
@@ -104,7 +106,11 @@ const HvFlowBaseNode = ({
|
|
|
104
106
|
/* @__PURE__ */ jsxs("div", { className: cx(css({
|
|
105
107
|
backgroundColor: color
|
|
106
108
|
}), classes.headerContainer), children: [
|
|
107
|
-
/* @__PURE__ */ jsxs("div", { className: classes.titleContainer,
|
|
109
|
+
/* @__PURE__ */ jsxs("div", { className: cx(classes.titleContainer, css({
|
|
110
|
+
"& svg *.color0": {
|
|
111
|
+
fill: iconColor
|
|
112
|
+
}
|
|
113
|
+
})), children: [
|
|
108
114
|
icon,
|
|
109
115
|
/* @__PURE__ */ jsx(HvTypography, { variant: "title4", className: classes.title, children: title })
|
|
110
116
|
] }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseNode.js","sources":["../../../../../src/components/Flow/Node/BaseNode.tsx"],"sourcesContent":["import { isValidElement, useCallback, useEffect, useState } from \"react\";\n\nimport {\n Edge,\n Handle,\n NodeProps,\n NodeToolbar,\n Position,\n useReactFlow,\n useStore,\n} from \"reactflow\";\n\nimport {\n ExtractNames,\n HvActionGeneric,\n HvBaseProps,\n HvButton,\n HvTypography,\n} from \"@hitachivantara/uikit-react-core\";\nimport { Delete, Duplicate } from \"@hitachivantara/uikit-react-icons\";\nimport { HvColorAny, getColor, theme } from \"@hitachivantara/uikit-styles\";\n\nimport {\n HvFlowNodeAction,\n HvFlowBuiltInActions,\n HvFlowNodeInput,\n HvFlowNodeOutput,\n} from \"../types/index\";\nimport { useNodeMetaRegistry } from \"../FlowContext/NodeMetaContext\";\nimport { staticClasses, useClasses } from \"./BaseNode.styles\";\n\nexport { staticClasses as flowBaseNodeClasses };\n\nexport type HvFlowBaseNodeClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvFlowBaseNodeProps<T = any>\n extends Omit<HvBaseProps, \"id\">,\n NodeProps<T> {\n /** Header title */\n title?: string;\n /** Header icon */\n icon?: React.ReactNode;\n /** Header color */\n color?: HvColorAny;\n /** Header items */\n headerItems?: React.ReactNode;\n /** Node inputs */\n inputs?: HvFlowNodeInput[];\n /** Node outputs */\n outputs?: HvFlowNodeOutput[];\n /** Node actions */\n nodeActions?: HvFlowNodeAction[];\n /** A Jss Object used to override or extend the styles applied to the component. */\n classes?: HvFlowBaseNodeClasses;\n}\n\nconst isInputConnected = (\n id: string,\n type: \"target\" | \"source\",\n idx: number,\n edges: Edge[]\n) => {\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 return false;\n};\n\nconst defaultActions: HvFlowBuiltInActions[] = [\n { id: \"delete\", label: \"Delete\", icon: <Delete /> },\n { id: \"duplicate\", label: \"Duplicate\", icon: <Duplicate /> },\n];\n\nconst renderedIcon = (actionIcon: HvActionGeneric[\"icon\"]) =>\n isValidElement(actionIcon) ? actionIcon : (actionIcon as Function)?.();\n\nexport const HvFlowBaseNode = ({\n id,\n title,\n headerItems,\n icon,\n color: colorProp,\n inputs,\n outputs,\n nodeActions = defaultActions,\n classes: classesProp,\n className,\n children,\n}: HvFlowBaseNodeProps<unknown>) => {\n const { registerNode, unregisterNode } = useNodeMetaRegistry();\n useEffect(() => {\n registerNode(id, { label: title || \"\", inputs, outputs });\n return () => unregisterNode(id);\n }, [id, title, inputs, outputs, registerNode, unregisterNode]);\n\n const [showActions, setShowActions] = useState(false);\n const reactFlowInstance = useReactFlow();\n\n const { classes, cx, css } = useClasses(classesProp);\n\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 handleDefaultAction = useCallback(\n (action: HvFlowNodeAction) => {\n if (!node) return;\n\n if (action.callback) {\n action.callback(node);\n return;\n }\n\n // built-in actions\n switch (action.id) {\n case \"delete\":\n reactFlowInstance.deleteElements({ nodes: [node] });\n break;\n case \"duplicate\":\n reactFlowInstance.addNodes([\n {\n ...node,\n id: `${reactFlowInstance.getNodes().length + 1}`,\n position: {\n x: node.position.x,\n y: node.position.y + (node.height || 0) + 20,\n },\n selected: false,\n zIndex: Number(theme.zIndices.overlay),\n },\n ]);\n break;\n default:\n break;\n }\n },\n [node, reactFlowInstance]\n );\n\n if (!node) return null;\n\n const color = getColor(colorProp);\n\n return (\n <div\n className={cx(\n \"nowheel\", // Disables the default canvas pan behaviour when scrolling inside the node\n css({ border: `1px solid ${color}` }),\n classes.root,\n className\n )}\n onMouseEnter={() => setShowActions(true)}\n onMouseLeave={() => setShowActions(false)}\n >\n <NodeToolbar isVisible={showActions} offset={0}>\n {nodeActions?.map((action) => (\n <HvButton\n key={action.id}\n icon\n onClick={() => handleDefaultAction(action)}\n >\n {renderedIcon(action.icon)}\n </HvButton>\n ))}\n </NodeToolbar>\n <div\n className={cx(css({ backgroundColor: color }), classes.headerContainer)}\n >\n <div className={classes.titleContainer}>\n {icon}\n <HvTypography variant=\"title4\" className={classes.title}>\n {title}\n </HvTypography>\n </div>\n {headerItems && <div style={{ display: \"flex\" }}>{headerItems}</div>}\n </div>\n {children && <div className={classes.contentContainer}>{children}</div>}\n {inputs && inputs.length > 0 && (\n <>\n <div className={classes.inputsTitleContainer}>\n <HvTypography>Inputs</HvTypography>\n </div>\n\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: \"auto\",\n bottom:\n (outputs?.length ? 80 : 18) +\n (outputs?.length || 0) * 29 +\n 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 </>\n )}\n {outputs && outputs.length > 0 && (\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: -10 + 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 </>\n )}\n </div>\n );\n};\n"],"names":["isInputConnected","id","type","idx","edges","some","e","target","targetHandle","toString","source","sourceHandle","defaultActions","label","icon","renderedIcon","actionIcon","isValidElement","HvFlowBaseNode","title","headerItems","color","colorProp","inputs","outputs","nodeActions","classes","classesProp","className","children","registerNode","unregisterNode","useNodeMetaRegistry","useEffect","showActions","setShowActions","useState","reactFlowInstance","useReactFlow","cx","css","useClasses","useStore","s","nodes","getNodes","node","find","n","handleDefaultAction","useCallback","action","callback","deleteElements","addNodes","length","position","x","y","height","selected","zIndex","Number","theme","zIndices","overlay","getColor","border","root","map","backgroundColor","headerContainer","titleContainer","display","contentContainer","inputsTitleContainer","inputsContainer","input","inputContainer","Position","Left","top","bottom","isMandatory","mandatory","outputsTitleContainer","outputsContainer","output","outputContainer","Right"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BaseNode.js","sources":["../../../../../src/components/Flow/Node/BaseNode.tsx"],"sourcesContent":["import { isValidElement, useCallback, useEffect, useState } from \"react\";\nimport {\n Edge,\n Handle,\n NodeProps,\n NodeToolbar,\n Position,\n useEdges,\n useNodes,\n useReactFlow,\n} from \"reactflow\";\nimport { uid } from \"uid\";\nimport {\n ExtractNames,\n HvActionGeneric,\n HvBaseProps,\n HvButton,\n HvTypography,\n} from \"@hitachivantara/uikit-react-core\";\nimport { Delete, Duplicate } from \"@hitachivantara/uikit-react-icons\";\nimport { HvColorAny, getColor, theme } from \"@hitachivantara/uikit-styles\";\n\nimport {\n HvFlowNodeAction,\n HvFlowBuiltInActions,\n HvFlowNodeInput,\n HvFlowNodeOutput,\n} from \"../types\";\nimport { useNodeMetaRegistry } from \"../FlowContext/NodeMetaContext\";\nimport { staticClasses, useClasses } from \"./BaseNode.styles\";\n\nexport { staticClasses as flowBaseNodeClasses };\n\nexport type HvFlowBaseNodeClasses = ExtractNames<typeof useClasses>;\n\nexport interface HvFlowBaseNodeProps<T = any>\n extends Omit<HvBaseProps, \"id\">,\n NodeProps<T> {\n /** Header title */\n title?: string;\n /** Header icon */\n icon?: React.ReactNode;\n /** Header color */\n color?: HvColorAny;\n /** Header items */\n headerItems?: React.ReactNode;\n /** Node inputs */\n inputs?: HvFlowNodeInput[];\n /** Node outputs */\n outputs?: HvFlowNodeOutput[];\n /** Node actions */\n nodeActions?: HvFlowNodeAction[];\n /** A Jss Object used to override or extend the styles applied to the component. */\n classes?: HvFlowBaseNodeClasses;\n}\n\nconst isInputConnected = (\n id: string,\n type: \"target\" | \"source\",\n idx: number,\n edges: Edge[]\n) => {\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 return false;\n};\n\nconst defaultActions: HvFlowBuiltInActions[] = [\n { id: \"delete\", label: \"Delete\", icon: <Delete /> },\n { id: \"duplicate\", label: \"Duplicate\", icon: <Duplicate /> },\n];\n\nconst renderedIcon = (actionIcon: HvActionGeneric[\"icon\"]) =>\n isValidElement(actionIcon) ? actionIcon : (actionIcon as Function)?.();\n\nexport const HvFlowBaseNode = ({\n id,\n title,\n headerItems,\n icon,\n color: colorProp,\n inputs,\n outputs,\n nodeActions = defaultActions,\n classes: classesProp,\n className,\n children,\n}: HvFlowBaseNodeProps<unknown>) => {\n const { registerNode, unregisterNode } = useNodeMetaRegistry();\n useEffect(() => {\n registerNode(id, { label: title || \"\", inputs, outputs });\n return () => unregisterNode(id);\n }, [id, title, inputs, outputs, registerNode, unregisterNode]);\n\n const [showActions, setShowActions] = useState(false);\n const reactFlowInstance = useReactFlow();\n\n const { classes, cx, css } = useClasses(classesProp);\n\n const edges = useEdges();\n const nodes = useNodes();\n\n const node = nodes.find((n) => n.id === id);\n\n const handleDefaultAction = useCallback(\n (action: HvFlowNodeAction) => {\n if (!node) return;\n\n if (action.callback) {\n action.callback(node);\n return;\n }\n\n // built-in actions\n switch (action.id) {\n case \"delete\":\n reactFlowInstance.deleteElements({ nodes: [node] });\n break;\n case \"duplicate\":\n reactFlowInstance.addNodes([\n {\n ...node,\n id: uid(),\n position: {\n x: node.position.x,\n y: node.position.y + (node.height || 0) + 20,\n },\n selected: false,\n zIndex: Number(theme.zIndices.overlay),\n },\n ]);\n break;\n default:\n break;\n }\n },\n [node, reactFlowInstance]\n );\n\n if (!node) return null;\n\n const color = getColor(colorProp);\n const iconColor = isValidElement(icon)\n ? getColor(icon.props.color || \"base_dark\")\n : getColor(\"base_dark\");\n\n return (\n <div\n className={cx(\n \"nowheel\", // Disables the default canvas pan behaviour when scrolling inside the node\n css({ border: `1px solid ${color}` }),\n classes.root,\n className\n )}\n onMouseEnter={() => setShowActions(true)}\n onMouseLeave={() => setShowActions(false)}\n >\n <NodeToolbar isVisible={showActions} offset={0}>\n {nodeActions?.map((action) => (\n <HvButton\n key={action.id}\n icon\n onClick={() => handleDefaultAction(action)}\n >\n {renderedIcon(action.icon)}\n </HvButton>\n ))}\n </NodeToolbar>\n <div\n className={cx(css({ backgroundColor: color }), classes.headerContainer)}\n >\n <div\n className={cx(\n classes.titleContainer,\n css({ \"& svg *.color0\": { fill: iconColor } })\n )}\n >\n {icon}\n <HvTypography variant=\"title4\" className={classes.title}>\n {title}\n </HvTypography>\n </div>\n {headerItems && <div style={{ display: \"flex\" }}>{headerItems}</div>}\n </div>\n {children && <div className={classes.contentContainer}>{children}</div>}\n {inputs && inputs.length > 0 && (\n <>\n <div className={classes.inputsTitleContainer}>\n <HvTypography>Inputs</HvTypography>\n </div>\n\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: \"auto\",\n bottom:\n (outputs?.length ? 80 : 18) +\n (outputs?.length || 0) * 29 +\n 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 </>\n )}\n {outputs && outputs.length > 0 && (\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: -10 + 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 </>\n )}\n </div>\n );\n};\n"],"names":["isInputConnected","id","type","idx","edges","some","e","target","targetHandle","toString","source","sourceHandle","defaultActions","label","icon","renderedIcon","actionIcon","isValidElement","HvFlowBaseNode","title","headerItems","color","colorProp","inputs","outputs","nodeActions","classes","classesProp","className","children","registerNode","unregisterNode","useNodeMetaRegistry","useEffect","showActions","setShowActions","useState","reactFlowInstance","useReactFlow","cx","css","useClasses","useEdges","nodes","useNodes","node","find","n","handleDefaultAction","useCallback","action","callback","deleteElements","addNodes","uid","position","x","y","height","selected","zIndex","Number","theme","zIndices","overlay","getColor","iconColor","props","border","root","map","backgroundColor","headerContainer","titleContainer","fill","display","contentContainer","length","inputsTitleContainer","inputsContainer","input","inputContainer","Position","Left","top","bottom","isMandatory","mandatory","outputsTitleContainer","outputsContainer","output","outputContainer","Right"],"mappings":"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"}
|
|
@@ -50,15 +50,15 @@ const HvFlowNode = ({
|
|
|
50
50
|
const hasParams = !!(params && params.length > 0);
|
|
51
51
|
return /* @__PURE__ */ jsxs(HvFlowBaseNode, { id, type, title: groupLabel, icon, color, inputs, outputs, nodeActions: defaultActions, classes: classesProp, headerItems: /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
52
52
|
headerItems,
|
|
53
|
-
description && /* @__PURE__ */ jsx(HvTooltip, { title: /* @__PURE__ */ jsx(HvTypography, { children: description }), children: /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(Info, {}) }) }),
|
|
54
|
-
hasParams && /* @__PURE__ */ jsx(HvButton, { icon: true, onClick: () => setShowParams((p) => !p), children: showParams ? /* @__PURE__ */ jsx(Up, {}) : /* @__PURE__ */ jsx(Down, {}) })
|
|
53
|
+
description && /* @__PURE__ */ jsx(HvTooltip, { title: /* @__PURE__ */ jsx(HvTypography, { children: description }), children: /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(Info, { color: "base_dark" }) }) }),
|
|
54
|
+
hasParams && /* @__PURE__ */ jsx(HvButton, { icon: true, overrideIconColors: false, onClick: () => setShowParams((p) => !p), children: showParams ? /* @__PURE__ */ jsx(Up, { color: "base_dark" }) : /* @__PURE__ */ jsx(Down, { color: "base_dark" }) })
|
|
55
55
|
] }), ...props, children: [
|
|
56
56
|
(subtitle || actsVisible?.length || actsDropdown?.length) && /* @__PURE__ */ jsxs("div", { className: classes.subtitleContainer, children: [
|
|
57
57
|
subtitle && /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(HvTypography, { children: subtitle }) }),
|
|
58
58
|
/* @__PURE__ */ jsx("div", { className: classes.actions, children: actions?.length && actions?.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
59
|
-
actsVisible?.map((action) => /* @__PURE__ */ jsx(HvTooltip, { title:
|
|
59
|
+
actsVisible?.map((action) => /* @__PURE__ */ jsx(HvTooltip, { title: action.label, children: /* @__PURE__ */ jsx(HvButton, { icon: true, onClick: (event) => {
|
|
60
60
|
actionCallback?.(event, id, action);
|
|
61
|
-
}, "aria-label": action.label, children: renderedIcon(action.icon) }) }
|
|
61
|
+
}, "aria-label": action.label, children: renderedIcon(action.icon) }) }, action.id)),
|
|
62
62
|
actsDropdown && actsDropdown.length > 0 && /* @__PURE__ */ jsx(HvDropDownMenu, { keepOpened: false, dataList: actsDropdown?.map((action) => ({
|
|
63
63
|
id: action.id,
|
|
64
64
|
label: action.label
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Node.js","sources":["../../../../../src/components/Flow/Node/Node.tsx"],"sourcesContent":["import React, {
|
|
1
|
+
{"version":3,"file":"Node.js","sources":["../../../../../src/components/Flow/Node/Node.tsx"],"sourcesContent":["import React, { isValidElement, useState } from \"react\";\n\nimport {\n ExtractNames,\n HvActionGeneric,\n HvActionsGenericProps,\n HvButton,\n HvDropDownMenu,\n HvTooltip,\n HvTypography,\n} from \"@hitachivantara/uikit-react-core\";\nimport { getColor } from \"@hitachivantara/uikit-styles\";\nimport { Down, Info, Up } from \"@hitachivantara/uikit-react-icons\";\n\nimport { useFlowContext, useFlowNode } from \"../hooks/index\";\nimport { HvFlowNodeParam } from \"../types/index\";\nimport { staticClasses, useClasses } from \"./Node.styles\";\nimport ParamRenderer from \"./Parameters/ParamRenderer\";\nimport { HvFlowBaseNode, HvFlowBaseNodeProps } from \"./BaseNode\";\n\nexport { staticClasses as flowNodeClasses };\n// TODO How to include here the types from the parent component?\nexport type HvFlowNodeClasses = ExtractNames<typeof useClasses>;\n\nexport type HvFlowNodeDefaults = {\n title?: string;\n subTitle?: string;\n color?: string;\n icon?: React.ReactNode;\n};\n\nexport interface HvFlowNodeProps<T = any>\n extends Omit<HvFlowBaseNodeProps<T>, \"classes\"> {\n /** Node description */\n description?: string;\n /** Node actions */\n actions?: HvActionGeneric[]; // HvFlowNodeActions[];\n /** Node action callback */\n actionCallback?: HvActionsGenericProps[\"actionsCallback\"];\n /** Node maximum number of actions visible */\n maxVisibleActions?: number;\n /** Node expanded */\n expanded?: boolean;\n /** Node parameters */\n params?: HvFlowNodeParam[];\n /** A set of node default values for when there are no groups to fetch this data from. */\n nodeDefaults?: HvFlowNodeDefaults;\n /** A Jss Object used to override or extend the styles applied to the component. */\n classes?: HvFlowNodeClasses | HvFlowBaseNodeProps<T>[\"classes\"];\n}\n\nconst renderedIcon = (actionIcon: HvActionGeneric[\"icon\"]) =>\n isValidElement(actionIcon) ? actionIcon : (actionIcon as Function)?.();\n\nexport const HvFlowNode = ({\n id,\n type,\n headerItems,\n description,\n actions,\n actionCallback,\n maxVisibleActions = 1,\n expanded = false,\n params,\n nodeDefaults,\n classes: classesProp,\n children,\n ...props\n}: HvFlowNodeProps<unknown>) => {\n const { classes } = useClasses(classesProp as HvFlowNodeClasses);\n const [showParams, setShowParams] = useState(expanded);\n const { node } = useFlowNode(id);\n\n const { nodeGroups, nodeTypes, defaultActions } = useFlowContext();\n const groupId = nodeTypes?.[type].meta?.groupId;\n const subtitle = nodeTypes?.[type].meta?.label || nodeDefaults?.subTitle;\n const groupLabel =\n (groupId && nodeGroups && nodeGroups[groupId].label) || nodeDefaults?.title;\n\n const inputs = nodeTypes?.[type]?.meta?.inputs;\n const outputs = nodeTypes?.[type]?.meta?.outputs;\n const icon =\n (groupId && nodeGroups && nodeGroups[groupId].icon) || nodeDefaults?.icon;\n const colorProp =\n (groupId && nodeGroups && nodeGroups[groupId].color) || nodeDefaults?.color;\n const color = getColor(colorProp);\n\n const actsVisible = actions?.slice(0, maxVisibleActions);\n const actsDropdown = actions?.slice(maxVisibleActions);\n\n const hasParams = !!(params && params.length > 0);\n\n return (\n <HvFlowBaseNode\n id={id}\n type={type}\n title={groupLabel}\n icon={icon}\n color={color}\n inputs={inputs}\n outputs={outputs}\n nodeActions={defaultActions}\n classes={classesProp as HvFlowBaseNodeProps<unknown>[\"classes\"]}\n headerItems={\n <>\n {headerItems}\n {description && (\n <HvTooltip title={<HvTypography>{description}</HvTypography>}>\n <div>\n <Info color=\"base_dark\" />\n </div>\n </HvTooltip>\n )}\n {hasParams && (\n <HvButton\n icon\n overrideIconColors={false}\n onClick={() => setShowParams((p) => !p)}\n >\n {showParams ? (\n <Up color=\"base_dark\" />\n ) : (\n <Down color=\"base_dark\" />\n )}\n </HvButton>\n )}\n </>\n }\n {...props}\n >\n {(subtitle || actsVisible?.length || actsDropdown?.length) && (\n <div className={classes.subtitleContainer}>\n {subtitle && (\n <div>\n <HvTypography>{subtitle}</HvTypography>\n </div>\n )}\n <div className={classes.actions}>\n {actions?.length && actions?.length > 0 && (\n <>\n {actsVisible?.map((action) => (\n <HvTooltip key={action.id} title={action.label}>\n <HvButton\n icon\n onClick={(event) => {\n actionCallback?.(event, id, action);\n }}\n aria-label={action.label}\n >\n {renderedIcon(action.icon)}\n </HvButton>\n </HvTooltip>\n ))}\n\n {actsDropdown && actsDropdown.length > 0 && (\n <HvDropDownMenu\n keepOpened={false}\n dataList={actsDropdown?.map((action) => ({\n id: action.id,\n label: action.label,\n }))}\n onClick={(event, action) => {\n actionCallback?.(event, id, action as HvActionGeneric);\n }}\n />\n )}\n </>\n )}\n </div>\n </div>\n )}\n {children}\n {showParams && params && (\n <div className={classes.paramsContainer}>\n <ParamRenderer nodeId={id} params={params} data={node?.data} />\n </div>\n )}\n </HvFlowBaseNode>\n );\n};\n"],"names":["renderedIcon","actionIcon","isValidElement","HvFlowNode","id","type","headerItems","description","actions","actionCallback","maxVisibleActions","expanded","params","nodeDefaults","classes","classesProp","children","props","useClasses","showParams","setShowParams","useState","node","useFlowNode","nodeGroups","nodeTypes","defaultActions","useFlowContext","groupId","meta","subtitle","label","subTitle","groupLabel","title","inputs","outputs","icon","colorProp","color","getColor","actsVisible","slice","actsDropdown","hasParams","length","p","subtitleContainer","map","action","event","paramsContainer","data"],"mappings":";;;;;;;;;;;AAmDA,MAAMA,eAAeA,CAACC,eACpBC,eAAeD,UAAU,IAAIA,aAAcA;AAEtC,MAAME,aAAaA,CAAC;AAAA,EACzBC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC,oBAAoB;AAAA,EACpBC,WAAW;AAAA,EACXC;AAAAA,EACAC;AAAAA,EACAC,SAASC;AAAAA,EACTC;AAAAA,EACA,GAAGC;AACqB,MAAM;AACxB,QAAA;AAAA,IAAEH;AAAAA,EAAAA,IAAYI,WAAWH,WAAiC;AAChE,QAAM,CAACI,YAAYC,aAAa,IAAIC,SAASV,QAAQ;AAC/C,QAAA;AAAA,IAAEW;AAAAA,EAAAA,IAASC,YAAYnB,EAAE;AAEzB,QAAA;AAAA,IAAEoB;AAAAA,IAAYC;AAAAA,IAAWC;AAAAA,MAAmBC,eAAe;AACjE,QAAMC,UAAUH,YAAYpB,IAAI,EAAEwB,MAAMD;AACxC,QAAME,WAAWL,YAAYpB,IAAI,EAAEwB,MAAME,SAASlB,cAAcmB;AAChE,QAAMC,aACHL,WAAWJ,cAAcA,WAAWI,OAAO,EAAEG,SAAUlB,cAAcqB;AAExE,QAAMC,SAASV,YAAYpB,IAAI,GAAGwB,MAAMM;AACxC,QAAMC,UAAUX,YAAYpB,IAAI,GAAGwB,MAAMO;AACzC,QAAMC,OACHT,WAAWJ,cAAcA,WAAWI,OAAO,EAAES,QAASxB,cAAcwB;AACvE,QAAMC,YACHV,WAAWJ,cAAcA,WAAWI,OAAO,EAAEW,SAAU1B,cAAc0B;AAClEA,QAAAA,QAAQC,SAASF,SAAS;AAEhC,QAAMG,cAAcjC,SAASkC,MAAM,GAAGhC,iBAAiB;AACjDiC,QAAAA,eAAenC,SAASkC,MAAMhC,iBAAiB;AAErD,QAAMkC,YAAY,CAAC,EAAEhC,UAAUA,OAAOiC,SAAS;AAE/C,SACG,qBAAA,gBAAA,EACC,IACA,MACA,OAAOZ,YACP,MACA,OACA,QACA,SACA,aAAaP,gBACb,SAASX,aACT,aAEKT,qBAAAA,UAAAA,EAAAA,UAAAA;AAAAA,IAAAA;AAAAA,IACAC,eACC,oBAAC,WAAU,EAAA,2BAAQ,cAAcA,EAAAA,UAAAA,YAAAA,CAAY,GAC3C,UAAA,oBAAC,SACC,UAAC,oBAAA,MAAA,EAAK,OAAM,YAAA,CAAW,EACzB,CAAA,GACF;AAAA,IAEDqC,aACE,oBAAA,UAAA,EACC,MAAI,MACJ,oBAAoB,OACpB,SAAS,MAAMxB,cAAe0B,CAAM,MAAA,CAACA,CAAC,GAErC3B,UAAAA,aACE,oBAAA,IAAA,EAAG,OAAM,YAAA,CAAW,IAEpB,oBAAA,MAAA,EAAK,OAAM,YAAA,CACb,EACH,CAAA;AAAA,EAAA,GAEJ,GAEF,GAAIF,OAEFa,UAAAA;AAAAA,KAAYW,YAAAA,aAAaI,UAAUF,cAAcE,gCAChD,OAAI,EAAA,WAAW/B,QAAQiC,mBACrBjB,UAAAA;AAAAA,MAAAA,YACE,oBAAA,OAAA,EACC,UAAC,oBAAA,cAAA,EAAcA,mBAAS,CAAA,GAC1B;AAAA,MAEF,oBAAC,OAAI,EAAA,WAAWhB,QAAQN,SACrBA,mBAASqC,UAAUrC,SAASqC,SAAS,KAEjCJ,qBAAAA,UAAAA,EAAAA,UAAAA;AAAAA,QAAAA,aAAaO,IAAKC,CAAAA,WAChB,oBAAA,WAAA,EAA0B,OAAOA,OAAOlB,OACvC,UAAA,oBAAC,UACC,EAAA,MAAI,MACJ,SAAUmB,CAAU,UAAA;AACDA,2BAAAA,OAAO9C,IAAI6C,MAAM;AAAA,QACpC,GACA,cAAYA,OAAOlB,OAElB/B,UAAAA,aAAaiD,OAAOZ,IAAI,EAC3B,CAAA,EAAA,GATcY,OAAO7C,EAUvB,CACD;AAAA,QAEAuC,gBAAgBA,aAAaE,SAAS,KACrC,oBAAC,gBACC,EAAA,YAAY,OACZ,UAAUF,cAAcK,IAAKC,CAAY,YAAA;AAAA,UACvC7C,IAAI6C,OAAO7C;AAAAA,UACX2B,OAAOkB,OAAOlB;AAAAA,QACd,EAAA,GACF,SAAS,CAACmB,OAAOD,WAAW;AACTC,2BAAAA,OAAO9C,IAAI6C,MAA0B;AAAA,QAAA,GAG3D;AAAA,MAAA,EAAA,CACH,EAEJ,CAAA;AAAA,IAAA,GACF;AAAA,IAEDjC;AAAAA,IACAG,cAAcP,UACZ,oBAAA,OAAA,EAAI,WAAWE,QAAQqC,iBACtB,UAAC,oBAAA,eAAA,EAAc,QAAQ/C,IAAI,QAAgB,MAAMkB,MAAM8B,KAAK,CAAA,GAC9D;AAAA,EAEJ,EAAA,CAAA;AAEJ;"}
|
|
@@ -1,42 +1,41 @@
|
|
|
1
1
|
const buildGroups = (nodeGroups, nodeTypes, defaultGroupProps) => {
|
|
2
|
-
if (nodeGroups)
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
2
|
+
if (!nodeGroups)
|
|
3
|
+
return {};
|
|
4
|
+
return Object.entries(nodeGroups).reduce((acc, curr) => {
|
|
5
|
+
const nodesWithGroupId = [];
|
|
6
|
+
const nodesWithoutGroupId = [];
|
|
7
|
+
if (nodeTypes) {
|
|
8
|
+
for (const [nodeType, node] of Object.entries(nodeTypes)) {
|
|
9
|
+
if (node.meta?.groupId === curr[0]) {
|
|
10
|
+
nodesWithGroupId.push({
|
|
11
|
+
type: nodeType,
|
|
12
|
+
label: node.meta?.label,
|
|
13
|
+
data: node.meta?.data
|
|
14
|
+
});
|
|
15
|
+
} else if (!node.meta?.groupId) {
|
|
16
|
+
nodesWithoutGroupId.push({
|
|
17
|
+
type: nodeType,
|
|
18
|
+
label: node.meta?.label || "",
|
|
19
|
+
data: node.meta?.data
|
|
20
|
+
});
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
}
|
|
24
|
+
acc[curr[0]] = {
|
|
25
|
+
...curr[1],
|
|
26
|
+
nodes: nodesWithGroupId
|
|
27
|
+
};
|
|
28
|
+
if (nodesWithoutGroupId.length > 0) {
|
|
29
|
+
acc.Default = {
|
|
30
|
+
// @ts-ignore
|
|
31
|
+
name: "Default",
|
|
32
|
+
label: "Default",
|
|
33
|
+
nodes: nodesWithoutGroupId,
|
|
34
|
+
...defaultGroupProps
|
|
26
35
|
};
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
label: "Default",
|
|
31
|
-
nodes: nodesWithoutGroupId,
|
|
32
|
-
...defaultGroupProps
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
return acc;
|
|
36
|
-
}, {});
|
|
37
|
-
return groups;
|
|
38
|
-
}
|
|
39
|
-
return {};
|
|
36
|
+
}
|
|
37
|
+
return acc;
|
|
38
|
+
}, {});
|
|
40
39
|
};
|
|
41
40
|
export {
|
|
42
41
|
buildGroups
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sources":["../../../../../src/components/Flow/Sidebar/utils.ts"],"sourcesContent":["import { HvFlowContextValue } from \"../FlowContext\";\nimport { HvFlowNodeGroup } from \"../types\";\nimport {\n HvFlowSidebarGroupNodes,\n HvFlowSidebarGroupNode,\n} from \"./SidebarGroup\";\n\nexport const buildGroups = (\n nodeGroups: HvFlowContextValue[\"nodeGroups\"],\n nodeTypes: HvFlowContextValue[\"nodeTypes\"],\n defaultGroupProps?: HvFlowNodeGroup\n)
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../../../src/components/Flow/Sidebar/utils.ts"],"sourcesContent":["import { HvFlowContextValue } from \"../FlowContext\";\nimport { HvFlowNodeGroup } from \"../types\";\nimport {\n HvFlowSidebarGroupNodes,\n HvFlowSidebarGroupNode,\n} from \"./SidebarGroup\";\n\ntype NodeGroup = HvFlowNodeGroup & { nodes: HvFlowSidebarGroupNodes };\n\nexport const buildGroups = (\n nodeGroups: HvFlowContextValue[\"nodeGroups\"],\n nodeTypes: HvFlowContextValue[\"nodeTypes\"],\n defaultGroupProps?: HvFlowNodeGroup\n) => {\n if (!nodeGroups) return {};\n\n return Object.entries(nodeGroups).reduce((acc, curr) => {\n const nodesWithGroupId: HvFlowSidebarGroupNode[] = [];\n const nodesWithoutGroupId: HvFlowSidebarGroupNode[] = [];\n\n if (nodeTypes) {\n for (const [nodeType, node] of Object.entries(nodeTypes)) {\n if (node.meta?.groupId === curr[0]) {\n nodesWithGroupId.push({\n type: nodeType,\n label: node.meta?.label,\n data: node.meta?.data,\n });\n } else if (!node.meta?.groupId) {\n nodesWithoutGroupId.push({\n type: nodeType,\n label: node.meta?.label || \"\",\n data: node.meta?.data,\n });\n }\n }\n }\n\n acc[curr[0]] = {\n ...curr[1],\n nodes: nodesWithGroupId,\n };\n\n // Create a \"Default\" group for nodes without a groupId\n if (nodesWithoutGroupId.length > 0) {\n acc.Default = {\n // @ts-ignore\n name: \"Default\",\n label: \"Default\",\n nodes: nodesWithoutGroupId,\n ...defaultGroupProps,\n };\n }\n\n return acc;\n }, {} as Record<string, NodeGroup>);\n};\n"],"names":["buildGroups","nodeGroups","nodeTypes","defaultGroupProps","Object","entries","reduce","acc","curr","nodesWithGroupId","nodesWithoutGroupId","nodeType","node","meta","groupId","push","type","label","data","nodes","length","Default","name"],"mappings":"AASO,MAAMA,cAAcA,CACzBC,YACAC,WACAC,sBACG;AACH,MAAI,CAACF;AAAY,WAAO;AAExB,SAAOG,OAAOC,QAAQJ,UAAU,EAAEK,OAAO,CAACC,KAAKC,SAAS;AACtD,UAAMC,mBAA6C,CAAA;AACnD,UAAMC,sBAAgD,CAAA;AAEtD,QAAIR,WAAW;AACb,iBAAW,CAACS,UAAUC,IAAI,KAAKR,OAAOC,QAAQH,SAAS,GAAG;AACxD,YAAIU,KAAKC,MAAMC,YAAYN,KAAK,CAAC,GAAG;AAClCC,2BAAiBM,KAAK;AAAA,YACpBC,MAAML;AAAAA,YACNM,OAAOL,KAAKC,MAAMI;AAAAA,YAClBC,MAAMN,KAAKC,MAAMK;AAAAA,UAAAA,CAClB;AAAA,QACQ,WAAA,CAACN,KAAKC,MAAMC,SAAS;AAC9BJ,8BAAoBK,KAAK;AAAA,YACvBC,MAAML;AAAAA,YACNM,OAAOL,KAAKC,MAAMI,SAAS;AAAA,YAC3BC,MAAMN,KAAKC,MAAMK;AAAAA,UAAAA,CAClB;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEIV,QAAAA,KAAK,CAAC,CAAC,IAAI;AAAA,MACb,GAAGA,KAAK,CAAC;AAAA,MACTW,OAAOV;AAAAA,IAAAA;AAILC,QAAAA,oBAAoBU,SAAS,GAAG;AAClCb,UAAIc,UAAU;AAAA;AAAA,QAEZC,MAAM;AAAA,QACNL,OAAO;AAAA,QACPE,OAAOT;AAAAA,QACP,GAAGP;AAAAA,MAAAA;AAAAA,IAEP;AAEOI,WAAAA;AAAAA,EACT,GAAG,CAAgC,CAAA;AACrC;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
const nodes =
|
|
4
|
-
const edges =
|
|
1
|
+
import { useNodes, useEdges } from "reactflow";
|
|
2
|
+
function useFlowNode(id) {
|
|
3
|
+
const nodes = useNodes();
|
|
4
|
+
const edges = useEdges();
|
|
5
5
|
return {
|
|
6
6
|
// self node
|
|
7
7
|
get node() {
|
|
@@ -18,7 +18,7 @@ const useFlowNode = (id) => {
|
|
|
18
18
|
return parentNodeArray;
|
|
19
19
|
}
|
|
20
20
|
};
|
|
21
|
-
}
|
|
21
|
+
}
|
|
22
22
|
export {
|
|
23
23
|
useFlowNode
|
|
24
24
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFlowNode.js","sources":["../../../../../src/components/Flow/hooks/useFlowNode.ts"],"sourcesContent":["import { Edge, Node,
|
|
1
|
+
{"version":3,"file":"useFlowNode.js","sources":["../../../../../src/components/Flow/hooks/useFlowNode.ts"],"sourcesContent":["import { Edge, Node, useEdges, useNodes } from \"reactflow\";\n\nexport function useFlowNode<T = any>(id: string) {\n const nodes = useNodes<T>();\n const edges = useEdges();\n\n return {\n // self node\n get node() {\n const self = nodes.find((n: Node) => n.id === id);\n return self;\n },\n\n // parent nodes\n get parentNodes() {\n const connectedEdges = edges.filter((e: Edge) => e.target === id);\n const parentNodeArray = connectedEdges.map((e) => {\n const parentNode = nodes.find((n: Node) => n.id === e.source) as Node;\n return parentNode;\n });\n return parentNodeArray;\n },\n };\n}\n"],"names":["useFlowNode","id","nodes","useNodes","edges","useEdges","node","self","find","n","parentNodes","connectedEdges","filter","e","target","parentNodeArray","map","parentNode","source"],"mappings":";AAEO,SAASA,YAAqBC,IAAY;AAC/C,QAAMC,QAAQC;AACd,QAAMC,QAAQC;AAEP,SAAA;AAAA;AAAA,IAEL,IAAIC,OAAO;AACT,YAAMC,OAAOL,MAAMM,KAAK,CAACC,MAAYA,EAAER,OAAOA,EAAE;AACzCM,aAAAA;AAAAA,IACT;AAAA;AAAA,IAGA,IAAIG,cAAc;AAChB,YAAMC,iBAAiBP,MAAMQ,OAAO,CAACC,MAAYA,EAAEC,WAAWb,EAAE;AAC1Dc,YAAAA,kBAAkBJ,eAAeK,IAAKH,CAAM,MAAA;AAC1CI,cAAAA,aAAaf,MAAMM,KAAK,CAACC,MAAYA,EAAER,OAAOY,EAAEK,MAAM;AACrDD,eAAAA;AAAAA,MAAAA,CACR;AACMF,aAAAA;AAAAA,IACT;AAAA,EAAA;AAEJ;"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { BackgroundProps } from 'reactflow';
|
|
2
2
|
import { ComponentClass } from 'react';
|
|
3
3
|
import { ControlProps } from 'reactflow';
|
|
4
|
-
import
|
|
4
|
+
import { CSSInterpolation } from '@emotion/serialize';
|
|
5
5
|
import { Dispatch } from 'react';
|
|
6
6
|
import { DndContextProps } from '@dnd-kit/core';
|
|
7
7
|
import { DragEndEvent } from '@dnd-kit/core';
|
|
8
8
|
import { DragOverlayProps } from '@dnd-kit/core';
|
|
9
9
|
import { Edge } from 'reactflow';
|
|
10
10
|
import { ExtractNames } from '@hitachivantara/uikit-react-core';
|
|
11
|
-
import {
|
|
11
|
+
import { FC } from 'react';
|
|
12
12
|
import { GetMiniMapNodeAttribute } from 'reactflow';
|
|
13
13
|
import { HvActionGeneric } from '@hitachivantara/uikit-react-core';
|
|
14
14
|
import { HvActionsGenericProps } from '@hitachivantara/uikit-react-core';
|
|
@@ -20,7 +20,7 @@ import { HvColorAny } from '@hitachivantara/uikit-styles';
|
|
|
20
20
|
import { HvDialogProps } from '@hitachivantara/uikit-react-core';
|
|
21
21
|
import { HvDrawerProps } from '@hitachivantara/uikit-react-core';
|
|
22
22
|
import { HvEmptyStateProps } from '@hitachivantara/uikit-react-core';
|
|
23
|
-
import
|
|
23
|
+
import { JSX as JSX_2 } from '@emotion/react/jsx-runtime';
|
|
24
24
|
import { MiniMapProps } from 'reactflow';
|
|
25
25
|
import { ModalProps } from '@mui/material';
|
|
26
26
|
import { Node as Node_2 } from 'reactflow';
|
|
@@ -31,17 +31,17 @@ import { ReactFlowProps } from 'reactflow';
|
|
|
31
31
|
import { SetStateAction } from 'react';
|
|
32
32
|
|
|
33
33
|
export declare const flowBaseNodeClasses: {
|
|
34
|
-
title: "HvFlowBaseNode-title";
|
|
35
34
|
root: "HvFlowBaseNode-root";
|
|
36
|
-
|
|
35
|
+
title: "HvFlowBaseNode-title";
|
|
37
36
|
titleContainer: "HvFlowBaseNode-titleContainer";
|
|
37
|
+
mandatory: "HvFlowBaseNode-mandatory";
|
|
38
|
+
inputContainer: "HvFlowBaseNode-inputContainer";
|
|
39
|
+
contentContainer: "HvFlowBaseNode-contentContainer";
|
|
38
40
|
headerContainer: "HvFlowBaseNode-headerContainer";
|
|
39
41
|
inputsTitleContainer: "HvFlowBaseNode-inputsTitleContainer";
|
|
40
42
|
outputsTitleContainer: "HvFlowBaseNode-outputsTitleContainer";
|
|
41
|
-
contentContainer: "HvFlowBaseNode-contentContainer";
|
|
42
43
|
inputsContainer: "HvFlowBaseNode-inputsContainer";
|
|
43
44
|
outputsContainer: "HvFlowBaseNode-outputsContainer";
|
|
44
|
-
inputContainer: "HvFlowBaseNode-inputContainer";
|
|
45
45
|
outputContainer: "HvFlowBaseNode-outputContainer";
|
|
46
46
|
};
|
|
47
47
|
|
|
@@ -209,12 +209,10 @@ export declare interface HvFlowNodeAction extends HvActionGeneric {
|
|
|
209
209
|
|
|
210
210
|
export declare type HvFlowNodeClasses = ExtractNames<typeof useClasses_12>;
|
|
211
211
|
|
|
212
|
-
export declare interface HvFlowNodeComponentClass<GroupId extends keyof any = string, NodeData = any> extends ComponentClass<NodeProps> {
|
|
213
|
-
/** Metadata used on the HvFlowSidebar component to group the node */
|
|
214
|
-
meta?: HvFlowNodeTypeMeta<GroupId, NodeData>;
|
|
212
|
+
export declare interface HvFlowNodeComponentClass<GroupId extends keyof any = string, NodeData = any> extends ComponentClass<NodeProps>, NodeExtras<GroupId, NodeData> {
|
|
215
213
|
}
|
|
216
214
|
|
|
217
|
-
export declare type HvFlowNodeComponentType<GroupId extends keyof any = string, NodeData = any> = HvFlowNodeComponentClass<GroupId, NodeData> |
|
|
215
|
+
export declare type HvFlowNodeComponentType<GroupId extends keyof any = string, NodeData = any> = HvFlowNodeComponentClass<GroupId, NodeData> | HvFlowNodeFC<GroupId, NodeData>;
|
|
218
216
|
|
|
219
217
|
export declare type HvFlowNodeDefaults = {
|
|
220
218
|
title?: string;
|
|
@@ -223,10 +221,8 @@ export declare type HvFlowNodeDefaults = {
|
|
|
223
221
|
icon?: React_2.ReactNode;
|
|
224
222
|
};
|
|
225
223
|
|
|
226
|
-
/**
|
|
227
|
-
export declare interface
|
|
228
|
-
/** Metadata used on the HvFlowSidebar component to group the node */
|
|
229
|
-
meta?: HvFlowNodeTypeMeta<GroupId, NodeData>;
|
|
224
|
+
/** HvFlowNode component type. @extends React.FC */
|
|
225
|
+
export declare interface HvFlowNodeFC<GroupId extends keyof any = string, NodeData = any> extends FC<NodeProps>, NodeExtras<GroupId, NodeData> {
|
|
230
226
|
}
|
|
231
227
|
|
|
232
228
|
/** Node groups */
|
|
@@ -297,6 +293,7 @@ export declare interface HvFlowNodeTextParam extends HvFlowNodeSharedParam {
|
|
|
297
293
|
type: "text";
|
|
298
294
|
}
|
|
299
295
|
|
|
296
|
+
/** Metadata used on the `HvFlowSidebar` component to group the node */
|
|
300
297
|
export declare type HvFlowNodeTypeMeta<GroupId extends keyof any = string, NodeData = any> = {
|
|
301
298
|
label: string;
|
|
302
299
|
groupId?: GroupId;
|
|
@@ -305,9 +302,7 @@ export declare type HvFlowNodeTypeMeta<GroupId extends keyof any = string, NodeD
|
|
|
305
302
|
data?: NodeData;
|
|
306
303
|
};
|
|
307
304
|
|
|
308
|
-
export declare type HvFlowNodeTypes<GroupId extends keyof any = string, NodeData = any> =
|
|
309
|
-
[key: string]: HvFlowNodeComponentType<GroupId, NodeData>;
|
|
310
|
-
};
|
|
305
|
+
export declare type HvFlowNodeTypes<GroupId extends keyof any = string, NodeData = any> = Record<string, HvFlowNodeComponentType<GroupId, NodeData>>;
|
|
311
306
|
|
|
312
307
|
export declare interface HvFlowProps<NodeGroups extends keyof any = string, NodeType extends string | undefined = string | undefined, NodeData = any> extends HvDroppableFlowProps<NodeType, NodeData> {
|
|
313
308
|
/** Flow nodes groups. */
|
|
@@ -555,20 +550,24 @@ export declare interface HvWizardTitleProps extends HvBaseProps {
|
|
|
555
550
|
classes?: HvWizardTitleClasses;
|
|
556
551
|
}
|
|
557
552
|
|
|
553
|
+
declare type NodeExtras<GroupId extends keyof any = string, NodeData = any> = {
|
|
554
|
+
meta?: HvFlowNodeTypeMeta<GroupId, NodeData>;
|
|
555
|
+
};
|
|
556
|
+
|
|
558
557
|
export declare const stepNavigationClasses: {
|
|
559
|
-
li: "HvStepNavigation-li";
|
|
560
|
-
ol: "HvStepNavigation-ol";
|
|
561
558
|
root: "HvStepNavigation-root";
|
|
562
559
|
separator: "HvStepNavigation-separator";
|
|
560
|
+
li: "HvStepNavigation-li";
|
|
561
|
+
ol: "HvStepNavigation-ol";
|
|
563
562
|
titles: "HvStepNavigation-titles";
|
|
564
563
|
};
|
|
565
564
|
|
|
566
|
-
declare const useClasses: (classesProp?: Partial<Record<"
|
|
565
|
+
declare const useClasses: (classesProp?: Partial<Record<"root" | "separator" | "li" | "ol" | "titles", string>>, addStatic?: boolean) => {
|
|
567
566
|
classes: {
|
|
568
|
-
li: string;
|
|
569
|
-
ol: string;
|
|
570
567
|
root: string;
|
|
571
568
|
separator: string;
|
|
569
|
+
li: string;
|
|
570
|
+
ol: string;
|
|
572
571
|
titles: string;
|
|
573
572
|
};
|
|
574
573
|
css: {
|
|
@@ -595,19 +594,19 @@ declare const useClasses_10: (classesProp?: Partial<Record<"description" | "titl
|
|
|
595
594
|
cx: (...args: any) => string;
|
|
596
595
|
};
|
|
597
596
|
|
|
598
|
-
declare const useClasses_11: (classesProp?: Partial<Record<"
|
|
597
|
+
declare const useClasses_11: (classesProp?: Partial<Record<"root" | "title" | "titleContainer" | "mandatory" | "inputContainer" | "contentContainer" | "headerContainer" | "inputsTitleContainer" | "outputsTitleContainer" | "inputsContainer" | "outputsContainer" | "outputContainer", string>>, addStatic?: boolean) => {
|
|
599
598
|
classes: {
|
|
600
|
-
title: string;
|
|
601
599
|
root: string;
|
|
602
|
-
|
|
600
|
+
title: string;
|
|
603
601
|
titleContainer: string;
|
|
602
|
+
mandatory: string;
|
|
603
|
+
inputContainer: string;
|
|
604
|
+
contentContainer: string;
|
|
604
605
|
headerContainer: string;
|
|
605
606
|
inputsTitleContainer: string;
|
|
606
607
|
outputsTitleContainer: string;
|
|
607
|
-
contentContainer: string;
|
|
608
608
|
inputsContainer: string;
|
|
609
609
|
outputsContainer: string;
|
|
610
|
-
inputContainer: string;
|
|
611
610
|
outputContainer: string;
|
|
612
611
|
};
|
|
613
612
|
css: {
|
|
@@ -630,16 +629,16 @@ declare const useClasses_12: (classesProp?: Partial<Record<"actions" | "subtitle
|
|
|
630
629
|
cx: (...args: any) => string;
|
|
631
630
|
};
|
|
632
631
|
|
|
633
|
-
declare const useClasses_2: (classesProp?: Partial<Record<"
|
|
632
|
+
declare const useClasses_2: (classesProp?: Partial<Record<"xs" | "sm" | "md" | "lg" | "xl" | "root" | "avatar" | "ghost" | "ghostDisabled" | "notCurrent", string>>, addStatic?: boolean) => {
|
|
634
633
|
classes: {
|
|
635
|
-
xl: string;
|
|
636
|
-
lg: string;
|
|
637
|
-
md: string;
|
|
638
|
-
sm: string;
|
|
639
634
|
xs: string;
|
|
635
|
+
sm: string;
|
|
636
|
+
md: string;
|
|
637
|
+
lg: string;
|
|
638
|
+
xl: string;
|
|
640
639
|
root: string;
|
|
641
|
-
ghost: string;
|
|
642
640
|
avatar: string;
|
|
641
|
+
ghost: string;
|
|
643
642
|
ghostDisabled: string;
|
|
644
643
|
notCurrent: string;
|
|
645
644
|
};
|
|
@@ -661,10 +660,10 @@ declare const useClasses_3: (classesProp?: Partial<Record<"root", string>>, addS
|
|
|
661
660
|
cx: (...args: any) => string;
|
|
662
661
|
};
|
|
663
662
|
|
|
664
|
-
declare const useClasses_4: (classesProp?: Partial<Record<"
|
|
663
|
+
declare const useClasses_4: (classesProp?: Partial<Record<"actionsContainer" | "buttonWidth" | "buttonsContainer" | "buttonSpacing", string>>, addStatic?: boolean) => {
|
|
665
664
|
classes: {
|
|
666
|
-
buttonWidth: string;
|
|
667
665
|
actionsContainer: string;
|
|
666
|
+
buttonWidth: string;
|
|
668
667
|
buttonsContainer: string;
|
|
669
668
|
buttonSpacing: string;
|
|
670
669
|
};
|
|
@@ -675,13 +674,13 @@ declare const useClasses_4: (classesProp?: Partial<Record<"buttonWidth" | "actio
|
|
|
675
674
|
cx: (...args: any) => string;
|
|
676
675
|
};
|
|
677
676
|
|
|
678
|
-
declare const useClasses_5: (classesProp?: Partial<Record<"titleContainer" | "messageContainer" | "
|
|
677
|
+
declare const useClasses_5: (classesProp?: Partial<Record<"titleContainer" | "messageContainer" | "buttonWidth" | "rootSummaryButton" | "headerContainer" | "stepContainer", string>>, addStatic?: boolean) => {
|
|
679
678
|
classes: {
|
|
680
679
|
titleContainer: string;
|
|
681
680
|
messageContainer: string;
|
|
682
|
-
headerContainer: string;
|
|
683
681
|
buttonWidth: string;
|
|
684
682
|
rootSummaryButton: string;
|
|
683
|
+
headerContainer: string;
|
|
685
684
|
stepContainer: string;
|
|
686
685
|
};
|
|
687
686
|
css: {
|
|
@@ -743,14 +742,14 @@ declare const useClasses_9: (classesProp?: Partial<Record<"root", string>>, addS
|
|
|
743
742
|
|
|
744
743
|
export declare const useFlowContext: () => HvFlowContextValue<string>;
|
|
745
744
|
|
|
746
|
-
export declare
|
|
747
|
-
readonly node: Node_2 | undefined;
|
|
748
|
-
readonly parentNodes: Node_2[];
|
|
745
|
+
export declare function useFlowNode<T = any>(id: string): {
|
|
746
|
+
readonly node: Node_2<T, string | undefined> | undefined;
|
|
747
|
+
readonly parentNodes: Node_2<any, string | undefined>[];
|
|
749
748
|
};
|
|
750
749
|
|
|
751
750
|
export declare const wizardActionsClasses: {
|
|
752
|
-
buttonWidth: "HvWizardActions-buttonWidth";
|
|
753
751
|
actionsContainer: "HvWizardActions-actionsContainer";
|
|
752
|
+
buttonWidth: "HvWizardActions-buttonWidth";
|
|
754
753
|
buttonsContainer: "HvWizardActions-buttonsContainer";
|
|
755
754
|
buttonSpacing: "HvWizardActions-buttonSpacing";
|
|
756
755
|
};
|
|
@@ -776,9 +775,9 @@ export declare const wizardContentClasses: {
|
|
|
776
775
|
export declare const wizardTitleClasses: {
|
|
777
776
|
titleContainer: "HvWizardTitle-titleContainer";
|
|
778
777
|
messageContainer: "HvWizardTitle-messageContainer";
|
|
779
|
-
headerContainer: "HvWizardTitle-headerContainer";
|
|
780
778
|
buttonWidth: "HvWizardTitle-buttonWidth";
|
|
781
779
|
rootSummaryButton: "HvWizardTitle-rootSummaryButton";
|
|
780
|
+
headerContainer: "HvWizardTitle-headerContainer";
|
|
782
781
|
stepContainer: "HvWizardTitle-stepContainer";
|
|
783
782
|
};
|
|
784
783
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hitachivantara/uikit-react-lab",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.16.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"author": "Hitachi Vantara UI Kit Team",
|
|
6
6
|
"description": "Contributed React components for the NEXT UI Kit.",
|
|
@@ -32,9 +32,9 @@
|
|
|
32
32
|
"@dnd-kit/core": "^6.0.8",
|
|
33
33
|
"@dnd-kit/modifiers": "^6.0.1",
|
|
34
34
|
"@emotion/css": "^11.11.0",
|
|
35
|
-
"@hitachivantara/uikit-react-core": "^5.36.
|
|
36
|
-
"@hitachivantara/uikit-react-icons": "^5.7.
|
|
37
|
-
"@hitachivantara/uikit-styles": "^5.16.
|
|
35
|
+
"@hitachivantara/uikit-react-core": "^5.36.5",
|
|
36
|
+
"@hitachivantara/uikit-react-icons": "^5.7.3",
|
|
37
|
+
"@hitachivantara/uikit-styles": "^5.16.2",
|
|
38
38
|
"lodash": "^4.17.21",
|
|
39
39
|
"reactflow": "^11.9.4",
|
|
40
40
|
"uid": "^2.0.2",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"access": "public",
|
|
49
49
|
"directory": "package"
|
|
50
50
|
},
|
|
51
|
-
"gitHead": "
|
|
51
|
+
"gitHead": "d0236ef87c697adb1d66b6b99a09404ee33e930e",
|
|
52
52
|
"main": "dist/cjs/index.cjs",
|
|
53
53
|
"exports": {
|
|
54
54
|
".": {
|