@hitachivantara/uikit-react-lab 5.35.11 → 5.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/cjs/Canvas/CanvasPanel/CanvasPanel.cjs +92 -0
  2. package/dist/cjs/Canvas/CanvasPanel/CanvasPanel.styles.cjs +61 -0
  3. package/dist/cjs/Canvas/CanvasTabs/CanvasTabs.cjs +51 -0
  4. package/dist/cjs/Canvas/CanvasTabs/CanvasTabs.styles.cjs +41 -0
  5. package/dist/cjs/Canvas/CanvasToolbar/CanvasToolbar.cjs +30 -0
  6. package/dist/cjs/Canvas/CanvasToolbar/CanvasToolbar.styles.cjs +43 -0
  7. package/dist/cjs/Flow/Flow.styles.cjs +0 -4
  8. package/dist/cjs/Flow/Node/BaseNode.cjs +32 -73
  9. package/dist/cjs/Flow/hooks/useNode.cjs +150 -0
  10. package/dist/cjs/index.cjs +14 -0
  11. package/dist/esm/Blades/Blades.js.map +1 -1
  12. package/dist/esm/Canvas/CanvasPanel/CanvasPanel.js +93 -0
  13. package/dist/esm/Canvas/CanvasPanel/CanvasPanel.js.map +1 -0
  14. package/dist/esm/Canvas/CanvasPanel/CanvasPanel.styles.js +61 -0
  15. package/dist/esm/Canvas/CanvasPanel/CanvasPanel.styles.js.map +1 -0
  16. package/dist/esm/Canvas/CanvasTabs/CanvasTabs.js +52 -0
  17. package/dist/esm/Canvas/CanvasTabs/CanvasTabs.js.map +1 -0
  18. package/dist/esm/Canvas/CanvasTabs/CanvasTabs.styles.js +41 -0
  19. package/dist/esm/Canvas/CanvasTabs/CanvasTabs.styles.js.map +1 -0
  20. package/dist/esm/Canvas/CanvasToolbar/CanvasToolbar.js +31 -0
  21. package/dist/esm/Canvas/CanvasToolbar/CanvasToolbar.js.map +1 -0
  22. package/dist/esm/Canvas/CanvasToolbar/CanvasToolbar.styles.js +43 -0
  23. package/dist/esm/Canvas/CanvasToolbar/CanvasToolbar.styles.js.map +1 -0
  24. package/dist/esm/Flow/Flow.styles.js +0 -4
  25. package/dist/esm/Flow/Flow.styles.js.map +1 -1
  26. package/dist/esm/Flow/Node/BaseNode.js +34 -75
  27. package/dist/esm/Flow/Node/BaseNode.js.map +1 -1
  28. package/dist/esm/Flow/hooks/useNode.js +150 -0
  29. package/dist/esm/Flow/hooks/useNode.js.map +1 -0
  30. package/dist/esm/index.js +40 -26
  31. package/dist/esm/index.js.map +1 -1
  32. package/dist/types/index.d.ts +607 -121
  33. package/package.json +6 -5
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("@emotion/react/jsx-runtime");
4
+ const React = require("react");
5
+ const uikitReactCore = require("@hitachivantara/uikit-react-core");
6
+ const uikitReactIcons = require("@hitachivantara/uikit-react-icons");
7
+ const CanvasPanel_styles = require("./CanvasPanel.styles.cjs");
8
+ const CanvasTabs = require("../CanvasTabs/CanvasTabs.cjs");
9
+ const DEFAULT_LABELS = {
10
+ open: "Open",
11
+ close: "Close"
12
+ };
13
+ const HvCanvasPanel = (props) => {
14
+ const {
15
+ open: openProp,
16
+ defaultOpened = false,
17
+ tabs,
18
+ onToggle,
19
+ onTabChange,
20
+ labels: labelsProp,
21
+ className,
22
+ children,
23
+ classes: classesProp,
24
+ ...others
25
+ } = uikitReactCore.useDefaultProps("HvCanvasPanel", props);
26
+ const { classes, cx } = CanvasPanel_styles.useClasses(classesProp);
27
+ const labels = uikitReactCore.useLabels(DEFAULT_LABELS, labelsProp);
28
+ const { rootId, activeTheme } = uikitReactCore.useTheme();
29
+ const [open, setOpen] = uikitReactCore.useControlled(openProp, Boolean(defaultOpened));
30
+ const setPanelWidth = React.useCallback(() => {
31
+ if (rootId) {
32
+ document.getElementById(rootId)?.style.setProperty(
33
+ "--canvas-panel-width",
34
+ !open ? "0px" : `${320 + (activeTheme ? parseInt(activeTheme.space.md, 10) : 24)}px`
35
+ );
36
+ }
37
+ }, [activeTheme, open, rootId]);
38
+ React.useEffect(() => {
39
+ setPanelWidth();
40
+ }, [open, setPanelWidth]);
41
+ const handleTogglePanel = (event) => {
42
+ setOpen((prev) => !prev);
43
+ onToggle?.(event, !open);
44
+ };
45
+ const handleTabChange = (event, tabId) => {
46
+ onTabChange?.(event, tabId);
47
+ };
48
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
49
+ /* @__PURE__ */ jsxRuntime.jsxs(
50
+ "div",
51
+ {
52
+ className: cx(classes.root, className, {
53
+ [classes.open]: open,
54
+ [classes.close]: !open
55
+ }),
56
+ ...others,
57
+ children: [
58
+ tabs && /* @__PURE__ */ jsxRuntime.jsx(
59
+ CanvasTabs.HvCanvasTabs,
60
+ {
61
+ className: classes.tabs,
62
+ tabs,
63
+ onChange: handleTabChange
64
+ }
65
+ ),
66
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes.content, children })
67
+ ]
68
+ }
69
+ ),
70
+ /* @__PURE__ */ jsxRuntime.jsx(
71
+ "div",
72
+ {
73
+ className: cx(classes.handle, {
74
+ [classes.handleOpen]: open,
75
+ [classes.handleClose]: !open
76
+ }),
77
+ onClick: handleTogglePanel,
78
+ role: "button",
79
+ tabIndex: 0,
80
+ onKeyDown: (e) => {
81
+ if (e.key === "Enter" || e.key === " ") {
82
+ handleTogglePanel(e);
83
+ }
84
+ },
85
+ "aria-label": open ? labels.close : labels.open,
86
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes.handleButton, children: open ? /* @__PURE__ */ jsxRuntime.jsx(uikitReactIcons.Start, { color: ["primary"] }) : /* @__PURE__ */ jsxRuntime.jsx(uikitReactIcons.End, { color: ["primary"] }) })
87
+ }
88
+ )
89
+ ] });
90
+ };
91
+ exports.canvasPanelClasses = CanvasPanel_styles.staticClasses;
92
+ exports.HvCanvasPanel = HvCanvasPanel;
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const uikitReactCore = require("@hitachivantara/uikit-react-core");
4
+ const uikitStyles = require("@hitachivantara/uikit-styles");
5
+ const { staticClasses, useClasses } = uikitReactCore.createClasses("HvCanvasPanel", {
6
+ root: {
7
+ height: "100%",
8
+ position: "absolute",
9
+ top: 0,
10
+ left: 0,
11
+ boxShadow: `4px 0px 8px -4px color-mix(in srgb, #414141 12%, transparent)`,
12
+ zIndex: uikitStyles.theme.zIndices.overlay,
13
+ backgroundColor: "transparent",
14
+ transition: "width 0.3s ease",
15
+ overflow: "hidden",
16
+ "&$open": {
17
+ width: 320
18
+ },
19
+ "&$close": {
20
+ width: 0
21
+ }
22
+ },
23
+ tabs: {},
24
+ content: {
25
+ backgroundColor: uikitStyles.theme.colors.atmo1,
26
+ height: "100%",
27
+ padding: uikitStyles.theme.space.md
28
+ },
29
+ handle: {
30
+ height: 172,
31
+ width: 35,
32
+ display: "flex",
33
+ justifyContent: "center",
34
+ zIndex: uikitStyles.theme.zIndices.overlay,
35
+ boxShadow: `4px 0px 8px -4px color-mix(in srgb, #414141 12%, transparent)`,
36
+ backgroundColor: uikitStyles.theme.colors.atmo1,
37
+ borderRadius: `0 ${uikitStyles.theme.radii.round} ${uikitStyles.theme.radii.round} 0 `,
38
+ position: "absolute",
39
+ transition: "left 0.3s ease",
40
+ top: `calc(50% - 86px)`,
41
+ "&$handleOpen": {
42
+ left: 320
43
+ },
44
+ "&$handleClose": {
45
+ left: 0
46
+ },
47
+ "&:hover": {
48
+ cursor: "pointer"
49
+ }
50
+ },
51
+ handleButton: {
52
+ top: `calc(50% - 16px)`,
53
+ position: "absolute"
54
+ },
55
+ open: {},
56
+ close: {},
57
+ handleOpen: {},
58
+ handleClose: {}
59
+ });
60
+ exports.staticClasses = staticClasses;
61
+ exports.useClasses = useClasses;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("@emotion/react/jsx-runtime");
4
+ const React = require("react");
5
+ const Tab = require("@mui/base/Tab");
6
+ const Tabs = require("@mui/base/Tabs");
7
+ const TabsList = require("@mui/base/TabsList");
8
+ const uikitReactCore = require("@hitachivantara/uikit-react-core");
9
+ const CanvasTabs_styles = require("./CanvasTabs.styles.cjs");
10
+ const HvCanvasTabs = (props) => {
11
+ const {
12
+ tabs,
13
+ onChange,
14
+ className,
15
+ classes: classesProp,
16
+ ...others
17
+ } = uikitReactCore.useDefaultProps("HvCanvasTabs", props);
18
+ const { classes, cx } = CanvasTabs_styles.useClasses(classesProp);
19
+ const [selectedTab, setSelectedTab] = React.useState(
20
+ tabs?.[0]?.id || "none"
21
+ );
22
+ const handleTabChange = (event, value) => {
23
+ onChange?.(event, value);
24
+ setSelectedTab(value);
25
+ };
26
+ return /* @__PURE__ */ jsxRuntime.jsx(
27
+ Tabs.Tabs,
28
+ {
29
+ value: selectedTab,
30
+ onChange: handleTabChange,
31
+ className: cx(classes.root, className),
32
+ selectionFollowsFocus: true,
33
+ ...others,
34
+ children: /* @__PURE__ */ jsxRuntime.jsx(TabsList.TabsList, { className: classes.list, children: tabs?.map((tab) => /* @__PURE__ */ jsxRuntime.jsx(
35
+ Tab.Tab,
36
+ {
37
+ value: tab.id,
38
+ className: cx(classes.tab, {
39
+ [classes.selected]: tab.id === selectedTab
40
+ }),
41
+ onChange: handleTabChange,
42
+ tabIndex: 0,
43
+ children: tab.content
44
+ },
45
+ tab.id
46
+ )) })
47
+ }
48
+ );
49
+ };
50
+ exports.canvasTabsClasses = CanvasTabs_styles.staticClasses;
51
+ exports.HvCanvasTabs = HvCanvasTabs;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const uikitReactCore = require("@hitachivantara/uikit-react-core");
4
+ const { staticClasses, useClasses } = uikitReactCore.createClasses("HvCanvasTabs", {
5
+ root: {
6
+ height: 48,
7
+ display: "flex"
8
+ },
9
+ list: {
10
+ display: "flex",
11
+ width: "100%"
12
+ },
13
+ tab: {
14
+ height: "100%",
15
+ display: "flex",
16
+ alignItems: "center",
17
+ justifyContent: "center",
18
+ flex: 1,
19
+ borderRadius: `16px 16px 0 0 `,
20
+ backgroundColor: uikitReactCore.theme.colors.atmo2,
21
+ color: uikitReactCore.theme.colors.secondary_60,
22
+ overflow: "hidden",
23
+ width: "100%",
24
+ "& svg .color0": {
25
+ fill: "currentcolor"
26
+ },
27
+ "&:hover": {
28
+ cursor: "pointer"
29
+ },
30
+ "&:focus": {
31
+ backgroundColor: uikitReactCore.theme.colors.atmo1
32
+ },
33
+ "&$selected": {
34
+ backgroundColor: uikitReactCore.theme.colors.atmo1,
35
+ ...uikitReactCore.theme.typography.label
36
+ }
37
+ },
38
+ selected: {}
39
+ });
40
+ exports.staticClasses = staticClasses;
41
+ exports.useClasses = useClasses;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("@emotion/react/jsx-runtime");
4
+ const uikitReactCore = require("@hitachivantara/uikit-react-core");
5
+ const uikitReactIcons = require("@hitachivantara/uikit-react-icons");
6
+ const CanvasToolbar_styles = require("./CanvasToolbar.styles.cjs");
7
+ const DEFAULT_LABELS = {
8
+ back: "Back"
9
+ };
10
+ const HvCanvasToolbar = (props) => {
11
+ const {
12
+ title: titleProp,
13
+ backButton,
14
+ labels: labelsProp,
15
+ className,
16
+ children,
17
+ classes: classesProp,
18
+ ...others
19
+ } = uikitReactCore.useDefaultProps("HvCanvasToolbar", props);
20
+ const { classes, cx } = CanvasToolbar_styles.useClasses(classesProp);
21
+ const labels = uikitReactCore.useLabels(DEFAULT_LABELS, labelsProp);
22
+ const title = typeof titleProp === "string" ? /* @__PURE__ */ jsxRuntime.jsx(uikitReactCore.HvTypography, { variant: "title4", children: titleProp }) : titleProp;
23
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cx(classes.root, className), ...others, children: [
24
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes.back, children: backButton ?? /* @__PURE__ */ jsxRuntime.jsx(uikitReactCore.HvIconButton, { title: labels.back, variant: "primaryGhost", children: /* @__PURE__ */ jsxRuntime.jsx(uikitReactIcons.Previous, {}) }) }),
25
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes.title, children: title }),
26
+ children && /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes.actions, children })
27
+ ] });
28
+ };
29
+ exports.canvasToolbarClasses = CanvasToolbar_styles.staticClasses;
30
+ exports.HvCanvasToolbar = HvCanvasToolbar;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const uikitReactCore = require("@hitachivantara/uikit-react-core");
4
+ const uikitStyles = require("@hitachivantara/uikit-styles");
5
+ const { staticClasses, useClasses } = uikitReactCore.createClasses("HvCanvasToolbar", {
6
+ root: {
7
+ width: `calc(100% - var(--canvas-panel-width))`,
8
+ height: 54,
9
+ display: "flex",
10
+ alignItems: "center",
11
+ borderRadius: uikitStyles.theme.radii.full,
12
+ backgroundColor: uikitStyles.theme.colors.atmo1,
13
+ padding: uikitStyles.theme.spacing(0, "md", 0, 0),
14
+ position: "absolute",
15
+ right: 0,
16
+ top: 0,
17
+ margin: `0 0 0 ${uikitStyles.theme.space.md}`,
18
+ transition: "width 0.3s ease"
19
+ },
20
+ back: {
21
+ borderRadius: `${uikitStyles.theme.radii.full} 0 0 ${uikitStyles.theme.radii.full}`,
22
+ minWidth: 68,
23
+ backgroundColor: uikitStyles.theme.colors.containerBackgroundHover,
24
+ height: "100%",
25
+ display: "flex",
26
+ alignItems: "center",
27
+ justifyContent: "center"
28
+ },
29
+ title: {
30
+ display: "flex",
31
+ alignItems: "center",
32
+ padding: uikitStyles.theme.spacing(0, "md"),
33
+ height: "100%",
34
+ flexGrow: 1
35
+ },
36
+ actions: {
37
+ display: "flex",
38
+ flexWrap: "nowrap",
39
+ overflow: "scroll"
40
+ }
41
+ });
42
+ exports.staticClasses = staticClasses;
43
+ exports.useClasses = useClasses;
@@ -3,11 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const uikitReactCore = require("@hitachivantara/uikit-react-core");
4
4
  const BaseNode_styles = require("./Node/BaseNode.styles.cjs");
5
5
  require("@emotion/react/jsx-runtime");
6
- require("react");
7
6
  require("reactflow");
8
- require("uid");
9
- require("@hitachivantara/uikit-react-icons");
10
- require("@hitachivantara/uikit-styles");
11
7
  const { staticClasses, useClasses } = uikitReactCore.createClasses("HvFlow", {
12
8
  root: {
13
9
  height: "100%",
@@ -1,17 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("@emotion/react/jsx-runtime");
4
- const React = require("react");
5
4
  const ReactFlow = require("reactflow");
6
- const uid = require("uid");
7
5
  const uikitReactCore = require("@hitachivantara/uikit-react-core");
8
- const uikitReactIcons = require("@hitachivantara/uikit-react-icons");
9
- const uikitStyles = require("@hitachivantara/uikit-styles");
10
- const NodeMetaContext = require("../FlowContext/NodeMetaContext.cjs");
11
- const useFlowNode = require("../hooks/useFlowNode.cjs");
12
6
  const BaseNode_styles = require("./BaseNode.styles.cjs");
13
7
  const utils = require("./utils.cjs");
14
- const useFlowInstance = require("../hooks/useFlowInstance.cjs");
8
+ const useNode = require("../hooks/useNode.cjs");
15
9
  const DEFAULT_LABELS = {
16
10
  outputsTitle: "Outputs",
17
11
  inputsTitle: "Inputs",
@@ -20,78 +14,45 @@ const DEFAULT_LABELS = {
20
14
  };
21
15
  const HvFlowBaseNode = ({
22
16
  id,
23
- title,
17
+ title: titleProp,
24
18
  headerItems,
25
- icon,
19
+ icon: iconProp,
26
20
  color: colorProp,
27
21
  inputs: inputsProp,
28
22
  outputs: outputsProp,
29
23
  nodeActions: nodeActionsProp,
30
24
  footer,
31
25
  classes: classesProp,
32
- labels: labelsProps,
26
+ labels: labelsProp,
33
27
  className,
34
28
  children
35
29
  }) => {
36
- const { registerNode, unregisterNode } = NodeMetaContext.useNodeMetaRegistry();
37
- const labels = uikitReactCore.useLabels(DEFAULT_LABELS, labelsProps);
38
- const inputs = React.useMemo(() => utils.identifyHandles(inputsProp), [inputsProp]);
39
- const outputs = React.useMemo(() => utils.identifyHandles(outputsProp), [outputsProp]);
40
- const nodeActions = React.useMemo(
41
- () => nodeActionsProp || [
42
- { id: "delete", label: labels?.deleteActionLabel, icon: /* @__PURE__ */ jsxRuntime.jsx(uikitReactIcons.Delete, {}) },
43
- {
44
- id: "duplicate",
45
- label: labels?.duplicateActionLabel,
46
- icon: /* @__PURE__ */ jsxRuntime.jsx(uikitReactIcons.Duplicate, {})
47
- }
48
- ],
49
- [labels?.deleteActionLabel, labels?.duplicateActionLabel, nodeActionsProp]
50
- );
51
- React.useEffect(() => {
52
- registerNode(id, {
53
- label: title || "",
54
- inputs,
55
- outputs
56
- });
57
- return () => unregisterNode(id);
58
- }, [id, title, inputs, outputs, registerNode, unregisterNode]);
59
- const [showActions, setShowActions] = React.useState(false);
60
- const reactFlowInstance = useFlowInstance.useFlowInstance();
30
+ const {
31
+ toggleShowActions,
32
+ getNodeToolbarProps,
33
+ handleDefaultAction,
34
+ nodeActions,
35
+ title,
36
+ icon,
37
+ color,
38
+ iconColor,
39
+ inputEdges,
40
+ inputs,
41
+ outputEdges,
42
+ outputs,
43
+ node
44
+ } = useNode.useHvNode({
45
+ id,
46
+ title: titleProp,
47
+ inputs: inputsProp,
48
+ outputs: outputsProp,
49
+ icon: iconProp,
50
+ color: colorProp,
51
+ labels: labelsProp,
52
+ nodeActions: nodeActionsProp
53
+ });
54
+ const labels = uikitReactCore.useLabels(DEFAULT_LABELS, labelsProp);
61
55
  const { classes, cx, css } = BaseNode_styles.useClasses(classesProp);
62
- const node = useFlowNode.useFlowNode();
63
- const inputEdges = useFlowNode.useFlowNodeInputEdges();
64
- const outputEdges = useFlowNode.useFlowNodeOutputEdges();
65
- const handleDefaultAction = React.useCallback(
66
- (action) => {
67
- if (!node)
68
- return;
69
- if (action.callback) {
70
- action.callback(node);
71
- return;
72
- }
73
- switch (action.id) {
74
- case "delete":
75
- reactFlowInstance.deleteElements({ nodes: [node] });
76
- break;
77
- case "duplicate":
78
- reactFlowInstance.addNodes([
79
- {
80
- ...node,
81
- id: uid.uid(),
82
- position: {
83
- x: node.position.x,
84
- y: node.position.y + (node.height || 0) + 20
85
- },
86
- selected: false,
87
- zIndex: Number(uikitStyles.theme.zIndices.overlay)
88
- }
89
- ]);
90
- break;
91
- }
92
- },
93
- [node, reactFlowInstance]
94
- );
95
56
  const renderOutput = (output) => {
96
57
  const edgeConnected = utils.isConnected(id, "source", output.id, outputEdges);
97
58
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: classes.outputContainer, children: [
@@ -132,8 +93,6 @@ const HvFlowBaseNode = ({
132
93
  };
133
94
  if (!node)
134
95
  return null;
135
- const color = uikitStyles.getColor(colorProp);
136
- const iconColor = React.isValidElement(icon) ? uikitStyles.getColor(icon.props.color || "base_dark") : uikitStyles.getColor("base_dark");
137
96
  return /* @__PURE__ */ jsxRuntime.jsxs(
138
97
  "div",
139
98
  {
@@ -144,10 +103,10 @@ const HvFlowBaseNode = ({
144
103
  classes.root,
145
104
  className
146
105
  ),
147
- onMouseEnter: () => setShowActions(true),
148
- onMouseLeave: () => setShowActions(false),
106
+ onMouseEnter: toggleShowActions,
107
+ onMouseLeave: toggleShowActions,
149
108
  children: [
150
- /* @__PURE__ */ jsxRuntime.jsx(ReactFlow.NodeToolbar, { isVisible: showActions, offset: 0, children: nodeActions?.map((action) => /* @__PURE__ */ jsxRuntime.jsx(
109
+ /* @__PURE__ */ jsxRuntime.jsx(ReactFlow.NodeToolbar, { ...getNodeToolbarProps(), children: nodeActions?.map((action) => /* @__PURE__ */ jsxRuntime.jsx(
151
110
  uikitReactCore.HvIconButton,
152
111
  {
153
112
  title: action.label,
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("@emotion/react/jsx-runtime");
4
+ const React = require("react");
5
+ const uid = require("uid");
6
+ const uikitReactCore = require("@hitachivantara/uikit-react-core");
7
+ const uikitReactIcons = require("@hitachivantara/uikit-react-icons");
8
+ const uikitStyles = require("@hitachivantara/uikit-styles");
9
+ const NodeMetaContext = require("../FlowContext/NodeMetaContext.cjs");
10
+ const utils = require("../Node/utils.cjs");
11
+ const useFlowContext = require("./useFlowContext.cjs");
12
+ const useFlowInstance = require("./useFlowInstance.cjs");
13
+ const useFlowNode = require("./useFlowNode.cjs");
14
+ const DEFAULT_LABELS = {
15
+ deleteActionLabel: "Delete",
16
+ duplicateActionLabel: "Duplicate"
17
+ };
18
+ function useHvNode(props) {
19
+ const {
20
+ id,
21
+ title: titleProp,
22
+ icon: iconProp,
23
+ color: colorProp,
24
+ subtitle: subtitleProp,
25
+ nodeActions: nodeActionsProp,
26
+ inputs: inputsProp,
27
+ outputs: outputsProp,
28
+ groupId,
29
+ labels: labelsProps,
30
+ nodeToolbarProps
31
+ } = props;
32
+ const { registerNode, unregisterNode } = NodeMetaContext.useNodeMetaRegistry();
33
+ const labels = uikitReactCore.useLabels(DEFAULT_LABELS, labelsProps);
34
+ const inputs = React.useMemo(() => utils.identifyHandles(inputsProp), [inputsProp]);
35
+ const inputEdges = useFlowNode.useFlowNodeInputEdges();
36
+ const outputs = React.useMemo(() => utils.identifyHandles(outputsProp), [outputsProp]);
37
+ const outputEdges = useFlowNode.useFlowNodeOutputEdges();
38
+ const { nodeGroups } = useFlowContext.useFlowContext();
39
+ const node = useFlowNode.useFlowNode();
40
+ const reactFlowInstance = useFlowInstance.useFlowInstance();
41
+ const nodeGroup = groupId && nodeGroups && nodeGroups[groupId] || void 0;
42
+ const title = titleProp || nodeGroup?.label;
43
+ const icon = iconProp || nodeGroup?.icon;
44
+ const color = uikitStyles.getColor(colorProp || nodeGroup?.color);
45
+ const iconColor = React.isValidElement(icon) ? uikitStyles.getColor(icon.props.color || "base_dark") : uikitStyles.getColor("base_dark");
46
+ const subtitle = subtitleProp || node?.data.nodeLabel;
47
+ const [showActions, setShowActions] = React.useState(false);
48
+ const toggleShowActions = React.useCallback(() => {
49
+ setShowActions(!showActions);
50
+ }, [showActions]);
51
+ const getNodeToolbarProps = React.useCallback(
52
+ () => ({
53
+ offset: 0,
54
+ isVisible: showActions,
55
+ ...nodeToolbarProps
56
+ }),
57
+ [nodeToolbarProps, showActions]
58
+ );
59
+ const nodeActions = React.useMemo(
60
+ () => nodeActionsProp || [
61
+ { id: "delete", label: labels?.deleteActionLabel, icon: /* @__PURE__ */ jsxRuntime.jsx(uikitReactIcons.Delete, {}) },
62
+ {
63
+ id: "duplicate",
64
+ label: labels?.duplicateActionLabel,
65
+ icon: /* @__PURE__ */ jsxRuntime.jsx(uikitReactIcons.Duplicate, {})
66
+ }
67
+ ],
68
+ [labels?.deleteActionLabel, labels?.duplicateActionLabel, nodeActionsProp]
69
+ );
70
+ React.useEffect(() => {
71
+ registerNode(id, {
72
+ label: title || "",
73
+ inputs,
74
+ outputs
75
+ });
76
+ return () => unregisterNode(id);
77
+ }, [id, title, inputs, outputs, registerNode, unregisterNode]);
78
+ const handleDefaultAction = React.useCallback(
79
+ (action) => {
80
+ if (!node)
81
+ return;
82
+ if (action.callback) {
83
+ action.callback(node);
84
+ return;
85
+ }
86
+ switch (action.id) {
87
+ case "delete":
88
+ reactFlowInstance.deleteElements({ nodes: [node] });
89
+ break;
90
+ case "duplicate":
91
+ reactFlowInstance.addNodes([
92
+ {
93
+ ...node,
94
+ id: uid.uid(),
95
+ position: {
96
+ x: node.position.x,
97
+ y: node.position.y + (node.height || 0) + 20
98
+ },
99
+ selected: false,
100
+ zIndex: Number(uikitStyles.theme.zIndices.overlay)
101
+ }
102
+ ]);
103
+ break;
104
+ }
105
+ },
106
+ [node, reactFlowInstance]
107
+ );
108
+ return React.useMemo(
109
+ () => ({
110
+ // state
111
+ id,
112
+ title,
113
+ icon,
114
+ color,
115
+ iconColor,
116
+ subtitle,
117
+ inputs,
118
+ inputEdges,
119
+ outputs,
120
+ outputEdges,
121
+ node,
122
+ nodeActions,
123
+ showActions,
124
+ // prop getters
125
+ getNodeToolbarProps,
126
+ // actions
127
+ toggleShowActions,
128
+ handleDefaultAction
129
+ }),
130
+ [
131
+ id,
132
+ title,
133
+ icon,
134
+ color,
135
+ iconColor,
136
+ subtitle,
137
+ inputs,
138
+ inputEdges,
139
+ outputs,
140
+ outputEdges,
141
+ node,
142
+ nodeActions,
143
+ showActions,
144
+ getNodeToolbarProps,
145
+ toggleShowActions,
146
+ handleDefaultAction
147
+ ]
148
+ );
149
+ }
150
+ exports.useHvNode = useHvNode;
@@ -4,6 +4,12 @@ const Blade_styles = require("./Blade/Blade.styles.cjs");
4
4
  const Blade = require("./Blade/Blade.cjs");
5
5
  const Blades_styles = require("./Blades/Blades.styles.cjs");
6
6
  const Blades = require("./Blades/Blades.cjs");
7
+ const CanvasToolbar_styles = require("./Canvas/CanvasToolbar/CanvasToolbar.styles.cjs");
8
+ const CanvasToolbar = require("./Canvas/CanvasToolbar/CanvasToolbar.cjs");
9
+ const CanvasPanel_styles = require("./Canvas/CanvasPanel/CanvasPanel.styles.cjs");
10
+ const CanvasPanel = require("./Canvas/CanvasPanel/CanvasPanel.cjs");
11
+ const CanvasTabs_styles = require("./Canvas/CanvasTabs/CanvasTabs.styles.cjs");
12
+ const CanvasTabs = require("./Canvas/CanvasTabs/CanvasTabs.cjs");
7
13
  const Dashboard_styles = require("./Dashboard/Dashboard.styles.cjs");
8
14
  const Dashboard = require("./Dashboard/Dashboard.cjs");
9
15
  const Flow_styles = require("./Flow/Flow.styles.cjs");
@@ -26,6 +32,7 @@ const useFlowNode = require("./Flow/hooks/useFlowNode.cjs");
26
32
  const useFlowContext = require("./Flow/hooks/useFlowContext.cjs");
27
33
  const useFlowNodeMeta = require("./Flow/hooks/useFlowNodeMeta.cjs");
28
34
  const useFlowInstance = require("./Flow/hooks/useFlowInstance.cjs");
35
+ const useNode = require("./Flow/hooks/useNode.cjs");
29
36
  const StepNavigation_styles = require("./StepNavigation/StepNavigation.styles.cjs");
30
37
  const StepNavigation = require("./StepNavigation/StepNavigation.cjs");
31
38
  const Wizard_styles = require("./Wizard/Wizard.styles.cjs");
@@ -43,6 +50,12 @@ exports.bladeClasses = Blade_styles.staticClasses;
43
50
  exports.HvBlade = Blade.HvBlade;
44
51
  exports.bladesClasses = Blades_styles.staticClasses;
45
52
  exports.HvBlades = Blades.HvBlades;
53
+ exports.canvasToolbarClasses = CanvasToolbar_styles.staticClasses;
54
+ exports.HvCanvasToolbar = CanvasToolbar.HvCanvasToolbar;
55
+ exports.canvasPanelClasses = CanvasPanel_styles.staticClasses;
56
+ exports.HvCanvasPanel = CanvasPanel.HvCanvasPanel;
57
+ exports.canvasTabsClasses = CanvasTabs_styles.staticClasses;
58
+ exports.HvCanvasTabs = CanvasTabs.HvCanvasTabs;
46
59
  exports.dashboardClasses = Dashboard_styles.staticClasses;
47
60
  exports.HvDashboard = Dashboard.HvDashboard;
48
61
  exports.flowClasses = Flow_styles.staticClasses;
@@ -73,6 +86,7 @@ exports.useFlowOutputNodes = useFlowNode.useFlowOutputNodes;
73
86
  exports.useFlowContext = useFlowContext.useFlowContext;
74
87
  exports.useFlowNodeMeta = useFlowNodeMeta.useFlowNodeMeta;
75
88
  exports.useFlowInstance = useFlowInstance.useFlowInstance;
89
+ exports.useHvNode = useNode.useHvNode;
76
90
  exports.stepNavigationClasses = StepNavigation_styles.staticClasses;
77
91
  exports.HvStepNavigation = StepNavigation.HvStepNavigation;
78
92
  exports.wizardClasses = Wizard_styles.staticClasses;