@hitachivantara/uikit-react-lab 5.35.12 → 5.36.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.
Files changed (32) hide show
  1. package/dist/cjs/Canvas/Panel/Panel.cjs +79 -0
  2. package/dist/cjs/Canvas/Panel/Panel.styles.cjs +66 -0
  3. package/dist/cjs/Canvas/Tabs/Tabs.cjs +48 -0
  4. package/dist/cjs/Canvas/Tabs/Tabs.styles.cjs +44 -0
  5. package/dist/cjs/Canvas/Toolbar/Toolbar.cjs +39 -0
  6. package/dist/cjs/Canvas/Toolbar/Toolbar.styles.cjs +42 -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/Canvas/Panel/Panel.js +80 -0
  12. package/dist/esm/Canvas/Panel/Panel.js.map +1 -0
  13. package/dist/esm/Canvas/Panel/Panel.styles.js +66 -0
  14. package/dist/esm/Canvas/Panel/Panel.styles.js.map +1 -0
  15. package/dist/esm/Canvas/Tabs/Tabs.js +49 -0
  16. package/dist/esm/Canvas/Tabs/Tabs.js.map +1 -0
  17. package/dist/esm/Canvas/Tabs/Tabs.styles.js +44 -0
  18. package/dist/esm/Canvas/Tabs/Tabs.styles.js.map +1 -0
  19. package/dist/esm/Canvas/Toolbar/Toolbar.js +40 -0
  20. package/dist/esm/Canvas/Toolbar/Toolbar.js.map +1 -0
  21. package/dist/esm/Canvas/Toolbar/Toolbar.styles.js +42 -0
  22. package/dist/esm/Canvas/Toolbar/Toolbar.styles.js.map +1 -0
  23. package/dist/esm/Flow/Flow.styles.js +0 -4
  24. package/dist/esm/Flow/Flow.styles.js.map +1 -1
  25. package/dist/esm/Flow/Node/BaseNode.js +34 -75
  26. package/dist/esm/Flow/Node/BaseNode.js.map +1 -1
  27. package/dist/esm/Flow/hooks/useNode.js +150 -0
  28. package/dist/esm/Flow/hooks/useNode.js.map +1 -0
  29. package/dist/esm/index.js +40 -26
  30. package/dist/esm/index.js.map +1 -1
  31. package/dist/types/index.d.ts +609 -121
  32. package/package.json +8 -6
@@ -0,0 +1,79 @@
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 Panel_styles = require("./Panel.styles.cjs");
7
+ const Tabs = require("../Tabs/Tabs.cjs");
8
+ const DEFAULT_LABELS = {
9
+ open: "Open",
10
+ close: "Close"
11
+ };
12
+ const HvCanvasPanel = (props) => {
13
+ const {
14
+ open: openProp,
15
+ defaultOpened = false,
16
+ tabs,
17
+ onToggle,
18
+ onTabChange,
19
+ labels: labelsProp,
20
+ className,
21
+ children,
22
+ classes: classesProp,
23
+ ...others
24
+ } = uikitReactCore.useDefaultProps("HvCanvasPanel", props);
25
+ const { classes, cx } = Panel_styles.useClasses(classesProp);
26
+ const labels = uikitReactCore.useLabels(DEFAULT_LABELS, labelsProp);
27
+ const [open, setOpen] = uikitReactCore.useControlled(openProp, Boolean(defaultOpened));
28
+ const handleTogglePanel = (event) => {
29
+ setOpen((prev) => !prev);
30
+ onToggle?.(event, !open);
31
+ };
32
+ const handleTabChange = (event, tabId) => {
33
+ onTabChange?.(event, tabId);
34
+ };
35
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
36
+ /* @__PURE__ */ jsxRuntime.jsxs(
37
+ "div",
38
+ {
39
+ className: cx(classes.root, className, {
40
+ [classes.open]: open,
41
+ [classes.close]: !open
42
+ }),
43
+ ...others,
44
+ children: [
45
+ tabs && /* @__PURE__ */ jsxRuntime.jsx(
46
+ Tabs.HvCanvasTabs,
47
+ {
48
+ className: classes.tabs,
49
+ tabs,
50
+ onChange: handleTabChange
51
+ }
52
+ ),
53
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes.content, children })
54
+ ]
55
+ }
56
+ ),
57
+ /* @__PURE__ */ jsxRuntime.jsx(
58
+ "div",
59
+ {
60
+ className: cx(classes.handle, {
61
+ [classes.handleOpen]: open,
62
+ [classes.handleClose]: !open
63
+ }),
64
+ onClick: handleTogglePanel,
65
+ role: "button",
66
+ tabIndex: 0,
67
+ onKeyDown: (e) => {
68
+ if (e.key === "Enter" || e.key === " ") {
69
+ handleTogglePanel(e);
70
+ }
71
+ },
72
+ "aria-label": open ? labels.close : labels.open,
73
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes.handleButton, children: open ? /* @__PURE__ */ jsxRuntime.jsx(uikitReactIcons.Start, { color: ["primary"] }) : /* @__PURE__ */ jsxRuntime.jsx(uikitReactIcons.End, { color: ["primary"] }) })
74
+ }
75
+ )
76
+ ] });
77
+ };
78
+ exports.canvasPanelClasses = Panel_styles.staticClasses;
79
+ exports.HvCanvasPanel = HvCanvasPanel;
@@ -0,0 +1,66 @@
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: "visibility 0.3s ease, width 0.3s ease",
15
+ overflow: "hidden",
16
+ "&$open": {
17
+ width: 320,
18
+ visibility: "visible"
19
+ },
20
+ "&$close": {
21
+ width: 0,
22
+ visibility: "hidden"
23
+ }
24
+ },
25
+ tabs: {},
26
+ content: {
27
+ backgroundColor: uikitStyles.theme.colors.atmo1,
28
+ height: "100%",
29
+ padding: uikitStyles.theme.space.md
30
+ },
31
+ handle: {
32
+ height: 172,
33
+ width: 35,
34
+ display: "flex",
35
+ justifyContent: "center",
36
+ zIndex: uikitStyles.theme.zIndices.overlay,
37
+ boxShadow: "4px 0px 8px -4px color-mix(in srgb, #414141 12%, transparent)",
38
+ backgroundColor: uikitStyles.theme.colors.atmo1,
39
+ borderRadius: `0 ${uikitStyles.theme.radii.round} ${uikitStyles.theme.radii.round} 0`,
40
+ position: "absolute",
41
+ transition: "left 0.3s ease",
42
+ top: "calc(50% - 86px)",
43
+ "&$handleOpen": {
44
+ left: 320
45
+ },
46
+ "&$handleClose": {
47
+ left: 0
48
+ },
49
+ "&:hover": {
50
+ cursor: "pointer"
51
+ },
52
+ "&:focus-visible": {
53
+ ...uikitReactCore.outlineStyles
54
+ }
55
+ },
56
+ handleButton: {
57
+ top: "calc(50% - 16px)",
58
+ position: "absolute"
59
+ },
60
+ open: {},
61
+ close: {},
62
+ handleOpen: {},
63
+ handleClose: {}
64
+ });
65
+ exports.staticClasses = staticClasses;
66
+ exports.useClasses = useClasses;
@@ -0,0 +1,48 @@
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 Tabs_styles = require("./Tabs.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 } = Tabs_styles.useClasses(classesProp);
19
+ const [selectedTab, setSelectedTab] = React.useState(tabs?.[0]?.id || "none");
20
+ const handleTabChange = (event, value) => {
21
+ onChange?.(event, value);
22
+ setSelectedTab(value);
23
+ };
24
+ return /* @__PURE__ */ jsxRuntime.jsx(
25
+ Tabs.Tabs,
26
+ {
27
+ value: selectedTab,
28
+ onChange: handleTabChange,
29
+ className: cx(classes.root, className),
30
+ selectionFollowsFocus: true,
31
+ ...others,
32
+ children: /* @__PURE__ */ jsxRuntime.jsx(TabsList.TabsList, { className: classes.list, children: tabs?.map((tab) => /* @__PURE__ */ jsxRuntime.jsx(
33
+ Tab.Tab,
34
+ {
35
+ value: tab.id,
36
+ className: cx(classes.tab, {
37
+ [classes.selected]: tab.id === selectedTab
38
+ }),
39
+ tabIndex: 0,
40
+ children: tab.content
41
+ },
42
+ tab.id
43
+ )) })
44
+ }
45
+ );
46
+ };
47
+ exports.canvasTabsClasses = Tabs_styles.staticClasses;
48
+ exports.HvCanvasTabs = HvCanvasTabs;
@@ -0,0 +1,44 @@
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
+ "&:focus-visible": {
38
+ ...uikitReactCore.outlineStyles
39
+ }
40
+ },
41
+ selected: {}
42
+ });
43
+ exports.staticClasses = staticClasses;
44
+ exports.useClasses = useClasses;
@@ -0,0 +1,39 @@
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 Toolbar_styles = require("./Toolbar.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
+ backButtonProps,
18
+ classes: classesProp,
19
+ ...others
20
+ } = uikitReactCore.useDefaultProps("HvCanvasToolbar", props);
21
+ const { classes, cx } = Toolbar_styles.useClasses(classesProp);
22
+ const labels = uikitReactCore.useLabels(DEFAULT_LABELS, labelsProp);
23
+ const title = typeof titleProp === "string" ? /* @__PURE__ */ jsxRuntime.jsx(uikitReactCore.HvTypography, { variant: "title4", children: titleProp }) : titleProp;
24
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cx(classes.root, className), ...others, children: [
25
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes.back, children: backButton ?? /* @__PURE__ */ jsxRuntime.jsx(
26
+ uikitReactCore.HvIconButton,
27
+ {
28
+ title: labels.back,
29
+ variant: "primaryGhost",
30
+ ...backButtonProps,
31
+ children: /* @__PURE__ */ jsxRuntime.jsx(uikitReactIcons.Previous, {})
32
+ }
33
+ ) }),
34
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes.title, children: title }),
35
+ children && /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes.actions, children })
36
+ ] });
37
+ };
38
+ exports.canvasToolbarClasses = Toolbar_styles.staticClasses;
39
+ exports.HvCanvasToolbar = HvCanvasToolbar;
@@ -0,0 +1,42 @@
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: "100%",
8
+ height: 54,
9
+ display: "flex",
10
+ alignItems: "center",
11
+ borderRadius: uikitStyles.theme.radii.full,
12
+ backgroundColor: uikitStyles.theme.colors.atmo1,
13
+ position: "absolute",
14
+ right: 0,
15
+ top: 0,
16
+ transition: "width 0.3s ease"
17
+ },
18
+ back: {
19
+ borderRadius: `${uikitStyles.theme.radii.full} 0 0 ${uikitStyles.theme.radii.full}`,
20
+ minWidth: 68,
21
+ backgroundColor: uikitStyles.theme.colors.containerBackgroundHover,
22
+ height: "100%",
23
+ display: "flex",
24
+ alignItems: "center",
25
+ justifyContent: "center"
26
+ },
27
+ title: {
28
+ display: "flex",
29
+ alignItems: "center",
30
+ padding: uikitStyles.theme.spacing(0, "md"),
31
+ height: "100%",
32
+ flexGrow: 1
33
+ },
34
+ actions: {
35
+ display: "flex",
36
+ flexWrap: "nowrap",
37
+ overflow: "scroll",
38
+ paddingRight: uikitStyles.theme.space.md
39
+ }
40
+ });
41
+ exports.staticClasses = staticClasses;
42
+ 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 Toolbar_styles = require("./Canvas/Toolbar/Toolbar.styles.cjs");
8
+ const Toolbar = require("./Canvas/Toolbar/Toolbar.cjs");
9
+ const Panel_styles = require("./Canvas/Panel/Panel.styles.cjs");
10
+ const Panel = require("./Canvas/Panel/Panel.cjs");
11
+ const Tabs_styles = require("./Canvas/Tabs/Tabs.styles.cjs");
12
+ const Tabs = require("./Canvas/Tabs/Tabs.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 = Toolbar_styles.staticClasses;
54
+ exports.HvCanvasToolbar = Toolbar.HvCanvasToolbar;
55
+ exports.canvasPanelClasses = Panel_styles.staticClasses;
56
+ exports.HvCanvasPanel = Panel.HvCanvasPanel;
57
+ exports.canvasTabsClasses = Tabs_styles.staticClasses;
58
+ exports.HvCanvasTabs = Tabs.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;