@eccenca/gui-elements 24.2.0 → 24.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +47 -0
- package/dist/cjs/cmem/ActivityControl/ActivityControlWidget.js +12 -9
- package/dist/cjs/cmem/ActivityControl/ActivityControlWidget.js.map +1 -1
- package/dist/cjs/components/AutoSuggestion/AutoSuggestion.js +10 -9
- package/dist/cjs/components/AutoSuggestion/AutoSuggestion.js.map +1 -1
- package/dist/cjs/components/AutoSuggestion/ExtendedCodeEditor.js +2 -2
- package/dist/cjs/components/AutoSuggestion/ExtendedCodeEditor.js.map +1 -1
- package/dist/cjs/components/Icon/IconButton.js +1 -0
- package/dist/cjs/components/Icon/IconButton.js.map +1 -1
- package/dist/cjs/components/Tooltip/Tooltip.js +12 -7
- package/dist/cjs/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/cjs/extensions/codemirror/CodeMirror.js +83 -21
- package/dist/cjs/extensions/codemirror/CodeMirror.js.map +1 -1
- package/dist/cjs/extensions/codemirror/tests/codemirrorTestHelper.js +22 -1
- package/dist/cjs/extensions/codemirror/tests/codemirrorTestHelper.js.map +1 -1
- package/dist/cjs/extensions/react-flow/edges/EdgeDefaultV12.js +56 -0
- package/dist/cjs/extensions/react-flow/edges/EdgeDefaultV12.js.map +1 -0
- package/dist/cjs/extensions/react-flow/edges/EdgeDefs.js +14 -0
- package/dist/cjs/extensions/react-flow/edges/EdgeDefs.js.map +1 -0
- package/dist/cjs/extensions/react-flow/handles/HandleDefault.js +3 -0
- package/dist/cjs/extensions/react-flow/handles/HandleDefault.js.map +1 -1
- package/dist/cjs/extensions/react-flow/index.js +3 -0
- package/dist/cjs/extensions/react-flow/index.js.map +1 -1
- package/dist/cjs/extensions/react-flow/nodes/NodeContent.js +49 -28
- package/dist/cjs/extensions/react-flow/nodes/NodeContent.js.map +1 -1
- package/dist/cjs/extensions/react-flow/versionsupport.js +6 -0
- package/dist/cjs/extensions/react-flow/versionsupport.js.map +1 -1
- package/dist/esm/cmem/ActivityControl/ActivityControlWidget.js +12 -9
- package/dist/esm/cmem/ActivityControl/ActivityControlWidget.js.map +1 -1
- package/dist/esm/components/AutoSuggestion/AutoSuggestion.js +10 -9
- package/dist/esm/components/AutoSuggestion/AutoSuggestion.js.map +1 -1
- package/dist/esm/components/AutoSuggestion/ExtendedCodeEditor.js +2 -2
- package/dist/esm/components/AutoSuggestion/ExtendedCodeEditor.js.map +1 -1
- package/dist/esm/components/Icon/IconButton.js +1 -0
- package/dist/esm/components/Icon/IconButton.js.map +1 -1
- package/dist/esm/components/Tooltip/Tooltip.js +14 -9
- package/dist/esm/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/esm/extensions/codemirror/CodeMirror.js +84 -22
- package/dist/esm/extensions/codemirror/CodeMirror.js.map +1 -1
- package/dist/esm/extensions/codemirror/tests/codemirrorTestHelper.js +20 -0
- package/dist/esm/extensions/codemirror/tests/codemirrorTestHelper.js.map +1 -1
- package/dist/esm/extensions/react-flow/edges/EdgeDefaultV12.js +77 -0
- package/dist/esm/extensions/react-flow/edges/EdgeDefaultV12.js.map +1 -0
- package/dist/esm/extensions/react-flow/edges/EdgeDefs.js +8 -0
- package/dist/esm/extensions/react-flow/edges/EdgeDefs.js.map +1 -0
- package/dist/esm/extensions/react-flow/handles/HandleDefault.js +3 -0
- package/dist/esm/extensions/react-flow/handles/HandleDefault.js.map +1 -1
- package/dist/esm/extensions/react-flow/index.js +3 -0
- package/dist/esm/extensions/react-flow/index.js.map +1 -1
- package/dist/esm/extensions/react-flow/nodes/NodeContent.js +66 -44
- package/dist/esm/extensions/react-flow/nodes/NodeContent.js.map +1 -1
- package/dist/esm/extensions/react-flow/versionsupport.js +6 -0
- package/dist/esm/extensions/react-flow/versionsupport.js.map +1 -1
- package/dist/types/cmem/ActivityControl/ActivityControlWidget.d.ts +4 -0
- package/dist/types/components/AutoSuggestion/AutoSuggestion.d.ts +7 -1
- package/dist/types/components/AutoSuggestion/ExtendedCodeEditor.d.ts +5 -1
- package/dist/types/components/Tooltip/Tooltip.d.ts +7 -1
- package/dist/types/extensions/codemirror/CodeMirror.d.ts +3 -2
- package/dist/types/extensions/codemirror/tests/codemirrorTestHelper.d.ts +3 -1
- package/dist/types/extensions/react-flow/edges/EdgeDefaultV12.d.ts +38 -0
- package/dist/types/extensions/react-flow/edges/EdgeDefs.d.ts +2 -0
- package/dist/types/extensions/react-flow/handles/HandleDefault.d.ts +4 -1
- package/dist/types/extensions/react-flow/index.d.ts +3 -0
- package/dist/types/extensions/react-flow/nodes/NodeContent.d.ts +5 -4
- package/dist/types/extensions/react-flow/versionsupport.d.ts +3 -2
- package/package.json +6 -3
- package/src/cmem/ActivityControl/ActivityControlWidget.stories.tsx +45 -5
- package/src/cmem/ActivityControl/ActivityControlWidget.tsx +47 -9
- package/src/cmem/ActivityControl/tests/ActivityControlWidget.test.tsx +99 -0
- package/src/components/AutoSuggestion/AutoSuggestion.tsx +30 -16
- package/src/components/AutoSuggestion/ExtendedCodeEditor.tsx +8 -0
- package/src/components/Icon/IconButton.tsx +1 -0
- package/src/components/Tooltip/Tooltip.tsx +24 -13
- package/src/extensions/codemirror/CodeMirror.tsx +102 -26
- package/src/extensions/codemirror/tests/codemirrorTestHelper.ts +20 -1
- package/src/extensions/react-flow/_react-flow.scss +1 -0
- package/src/extensions/react-flow/_react-flow_v12.scss +5 -0
- package/src/extensions/react-flow/edges/EdgeDefaultV12.tsx +154 -0
- package/src/extensions/react-flow/edges/EdgeDefs.tsx +30 -0
- package/src/extensions/react-flow/edges/_edges.scss +18 -0
- package/src/extensions/react-flow/edges/stories/EdgeDefaultV12.stories.tsx +183 -0
- package/src/extensions/react-flow/handles/HandleDefault.tsx +12 -4
- package/src/extensions/react-flow/index.ts +3 -0
- package/src/extensions/react-flow/nodes/NodeContent.tsx +85 -48
- package/src/extensions/react-flow/nodes/NodeDefaultV12.tsx +53 -0
- package/src/extensions/react-flow/nodes/stories/NodeContentV12.stories.tsx +270 -0
- package/src/extensions/react-flow/versionsupport.ts +7 -2
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
import React, { useCallback, useEffect, useState } from "react";
|
|
2
|
+
import { LoremIpsum, loremIpsum } from "react-lorem-ipsum";
|
|
3
|
+
import { Meta, StoryFn } from "@storybook/react";
|
|
4
|
+
import { Node, ReactFlow, ReactFlowProvider, useNodesState } from "@xyflow/react";
|
|
5
|
+
|
|
6
|
+
import { Definitions } from "../../../../common/Intent";
|
|
7
|
+
import { NodeDefaultV12 } from "../NodeDefaultV12";
|
|
8
|
+
|
|
9
|
+
import canonicalIcons from "./../../../../components/Icon/canonicalIconNames";
|
|
10
|
+
import {
|
|
11
|
+
Badge,
|
|
12
|
+
ContextMenu,
|
|
13
|
+
HtmlContentBlock,
|
|
14
|
+
IconButton,
|
|
15
|
+
MenuItem,
|
|
16
|
+
NodeContent,
|
|
17
|
+
NodeContentExtension,
|
|
18
|
+
OverflowText,
|
|
19
|
+
Tag,
|
|
20
|
+
TagList,
|
|
21
|
+
} from "./../../../../index";
|
|
22
|
+
import {
|
|
23
|
+
Default as ContentExtensionExample,
|
|
24
|
+
SlideOutOfNode as ContentExtensionExampleSlideOut,
|
|
25
|
+
} from "./NodeContentExtension.stories";
|
|
26
|
+
|
|
27
|
+
export default {
|
|
28
|
+
title: "Extensions/React Flow V12/Node Content",
|
|
29
|
+
component: NodeContent,
|
|
30
|
+
subcomponents: { NodeContentExtension },
|
|
31
|
+
argTypes: {
|
|
32
|
+
contentExtension: {
|
|
33
|
+
control: "select",
|
|
34
|
+
options: ["Not set", "Default example", "Slide out example"],
|
|
35
|
+
mapping: {
|
|
36
|
+
"Not set": undefined,
|
|
37
|
+
"Default example": <NodeContentExtension {...ContentExtensionExample.args} />,
|
|
38
|
+
"Slide out example": <NodeContentExtension {...ContentExtensionExampleSlideOut.args} />,
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
labelSubline: {
|
|
42
|
+
control: "select",
|
|
43
|
+
options: ["Not set", "Text string", "OverflowText element", "Tag list"],
|
|
44
|
+
mapping: {
|
|
45
|
+
"Not set": undefined,
|
|
46
|
+
"Text string": loremIpsum({
|
|
47
|
+
p: 1,
|
|
48
|
+
avgSentencesPerParagraph: 1,
|
|
49
|
+
avgWordsPerSentence: 8,
|
|
50
|
+
random: false,
|
|
51
|
+
}).toString(),
|
|
52
|
+
"OverflowText element": (
|
|
53
|
+
<OverflowText>
|
|
54
|
+
{loremIpsum({
|
|
55
|
+
p: 1,
|
|
56
|
+
avgSentencesPerParagraph: 2,
|
|
57
|
+
avgWordsPerSentence: 4,
|
|
58
|
+
random: false,
|
|
59
|
+
}).toString()}
|
|
60
|
+
</OverflowText>
|
|
61
|
+
),
|
|
62
|
+
"Tag list": (
|
|
63
|
+
<TagList>
|
|
64
|
+
{loremIpsum({ p: 1, avgSentencesPerParagraph: 1, avgWordsPerSentence: 5, random: false })
|
|
65
|
+
.toString()
|
|
66
|
+
.split(" ")
|
|
67
|
+
.map((term) => (
|
|
68
|
+
<Tag small>{term}</Tag>
|
|
69
|
+
))}
|
|
70
|
+
</TagList>
|
|
71
|
+
),
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
menuButtons: {
|
|
75
|
+
control: "select",
|
|
76
|
+
options: ["Not set", "Icon button", "Context Menu", "Info badge"],
|
|
77
|
+
mapping: {
|
|
78
|
+
"Not set": undefined,
|
|
79
|
+
"Icon button": <IconButton name="item-info" text="Icon button" onClick={() => alert("Click info")} />,
|
|
80
|
+
"Context Menu": (
|
|
81
|
+
<ContextMenu>
|
|
82
|
+
<MenuItem text="Context menu" />
|
|
83
|
+
</ContextMenu>
|
|
84
|
+
),
|
|
85
|
+
"Info badge": <Badge intent="info">Info</Badge>,
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
iconName: {
|
|
89
|
+
control: "select",
|
|
90
|
+
options: [...Object.keys(canonicalIcons)],
|
|
91
|
+
},
|
|
92
|
+
highlightedState: {
|
|
93
|
+
control: "select",
|
|
94
|
+
options: ["Not set", "success", "warning", "danger", "match", "altmatch", "danger + match"],
|
|
95
|
+
mapping: {
|
|
96
|
+
"Not set": undefined,
|
|
97
|
+
"danger + match": ["danger", "match"],
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
border: {
|
|
101
|
+
control: "select",
|
|
102
|
+
options: [undefined, "solid", "double", "dashed", "dotted"],
|
|
103
|
+
},
|
|
104
|
+
intent: {
|
|
105
|
+
control: "select",
|
|
106
|
+
options: [undefined, ...Object.values(Definitions)],
|
|
107
|
+
},
|
|
108
|
+
highlightColor: {
|
|
109
|
+
control: "select",
|
|
110
|
+
options: [
|
|
111
|
+
"Not set",
|
|
112
|
+
"Default",
|
|
113
|
+
"Alternate",
|
|
114
|
+
"Default + alternate",
|
|
115
|
+
"Custom (red)",
|
|
116
|
+
"Default + Custom (red)",
|
|
117
|
+
"Custom (green) + alternate",
|
|
118
|
+
"Custom (purple) + custom (yellow)",
|
|
119
|
+
],
|
|
120
|
+
mapping: {
|
|
121
|
+
"Not set": undefined,
|
|
122
|
+
Default: "default",
|
|
123
|
+
Alternate: "alternate",
|
|
124
|
+
"Default + alternate": ["default", "alternate"],
|
|
125
|
+
"Custom (red)": "red",
|
|
126
|
+
"Default + Custom (red)": ["default", "red"],
|
|
127
|
+
"Custom (green) + alternate": ["green", "alternate"],
|
|
128
|
+
"Custom (purple) + custom (yellow)": ["purple", "yellow"],
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
content: { control: false },
|
|
132
|
+
footerContent: { control: false },
|
|
133
|
+
isConnectable: { table: { disable: true } },
|
|
134
|
+
targetPosition: { table: { disable: true } },
|
|
135
|
+
sourcePosition: { table: { disable: true } },
|
|
136
|
+
selected: { table: { disable: true } },
|
|
137
|
+
businessData: { table: { disable: true } },
|
|
138
|
+
},
|
|
139
|
+
} as Meta<typeof NodeContent>;
|
|
140
|
+
|
|
141
|
+
let forcedUpdateKey = 0; // @see https://github.com/storybookjs/storybook/issues/13375#issuecomment-1291011856
|
|
142
|
+
|
|
143
|
+
const nodeTypes = { default: NodeDefaultV12 };
|
|
144
|
+
|
|
145
|
+
const NodeContentExample = (args: any) => {
|
|
146
|
+
const [reactflowInstance, setReactflowInstance] = useState(null);
|
|
147
|
+
const [nodes, setNodes, onNodesChange] = useNodesState<Node>([]);
|
|
148
|
+
|
|
149
|
+
const defaultElement = {
|
|
150
|
+
id: "example-1",
|
|
151
|
+
type: "default",
|
|
152
|
+
data: args as object & { label: string },
|
|
153
|
+
position: { x: 50, y: 50 },
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
useEffect(() => {
|
|
157
|
+
const sizeReset = {};
|
|
158
|
+
if (args.resizeMaxDimensions && args.resizeDirections) {
|
|
159
|
+
sizeReset["onNodeResize"] = (dimensions) => {
|
|
160
|
+
// eslint-disable-next-line no-console
|
|
161
|
+
console.log("call onNodeResize method");
|
|
162
|
+
if (args.onNodeResize) {
|
|
163
|
+
args.onNodeResize(dimensions);
|
|
164
|
+
}
|
|
165
|
+
if (dimensions?.width || dimensions?.height) {
|
|
166
|
+
sizeReset["menuButtons"] = (
|
|
167
|
+
<IconButton
|
|
168
|
+
name="item-reset"
|
|
169
|
+
onClick={() => {
|
|
170
|
+
// eslint-disable-next-line no-console
|
|
171
|
+
console.log("reset size");
|
|
172
|
+
setNodes([
|
|
173
|
+
{
|
|
174
|
+
...defaultElement,
|
|
175
|
+
data: { ...defaultElement.data, ...sizeReset, ...{ nodeDimensions: {} } },
|
|
176
|
+
},
|
|
177
|
+
]);
|
|
178
|
+
}}
|
|
179
|
+
/>
|
|
180
|
+
);
|
|
181
|
+
}
|
|
182
|
+
setNodes([
|
|
183
|
+
{
|
|
184
|
+
...defaultElement,
|
|
185
|
+
data: { ...defaultElement.data, ...sizeReset, ...{ nodeDimensions: dimensions } },
|
|
186
|
+
},
|
|
187
|
+
]);
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
setNodes([
|
|
191
|
+
{
|
|
192
|
+
...defaultElement,
|
|
193
|
+
data: { ...defaultElement.data, ...sizeReset },
|
|
194
|
+
},
|
|
195
|
+
]);
|
|
196
|
+
}, [args]);
|
|
197
|
+
|
|
198
|
+
const onLoad = useCallback(
|
|
199
|
+
(rfi) => {
|
|
200
|
+
if (!reactflowInstance) {
|
|
201
|
+
setReactflowInstance(rfi);
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
[reactflowInstance]
|
|
205
|
+
);
|
|
206
|
+
|
|
207
|
+
return (
|
|
208
|
+
<div style={{ width: "100%", height: "400px" }}>
|
|
209
|
+
<ReactFlowProvider>
|
|
210
|
+
<ReactFlow
|
|
211
|
+
nodes={nodes}
|
|
212
|
+
edges={[]}
|
|
213
|
+
style={{ height: "400px" }}
|
|
214
|
+
onLoad={onLoad}
|
|
215
|
+
nodeTypes={nodeTypes}
|
|
216
|
+
onNodesChange={onNodesChange}
|
|
217
|
+
/>
|
|
218
|
+
</ReactFlowProvider>
|
|
219
|
+
</div>
|
|
220
|
+
);
|
|
221
|
+
};
|
|
222
|
+
|
|
223
|
+
const Template: StoryFn<typeof NodeContent> = (args) => (
|
|
224
|
+
<NodeContentExample {...args} /*some comment*/ key={++forcedUpdateKey} />
|
|
225
|
+
);
|
|
226
|
+
|
|
227
|
+
export const Default = Template.bind({});
|
|
228
|
+
Default.args = {
|
|
229
|
+
label: "Node title",
|
|
230
|
+
content: (
|
|
231
|
+
<HtmlContentBlock>
|
|
232
|
+
<h4>Node body</h4>
|
|
233
|
+
<LoremIpsum p={4} avgSentencesPerParagraph={3} random={false} />
|
|
234
|
+
</HtmlContentBlock>
|
|
235
|
+
),
|
|
236
|
+
footerContent: <OverflowText passDown>Node footer with some text information.</OverflowText>,
|
|
237
|
+
contentExtension: undefined,
|
|
238
|
+
minimalShape: "none",
|
|
239
|
+
getMinimalTooltipData: (node: any) => {
|
|
240
|
+
return {
|
|
241
|
+
label: node.data?.label,
|
|
242
|
+
content: node.data?.content,
|
|
243
|
+
iconName: node.data?.iconName,
|
|
244
|
+
depiction: node.data?.depiction,
|
|
245
|
+
};
|
|
246
|
+
},
|
|
247
|
+
handles: [
|
|
248
|
+
{
|
|
249
|
+
type: "target",
|
|
250
|
+
tooltip: "this is a target handle",
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
type: "source",
|
|
254
|
+
data: { extendedTooltip: "this is a source handle" },
|
|
255
|
+
},
|
|
256
|
+
],
|
|
257
|
+
onNodeResize: undefined,
|
|
258
|
+
};
|
|
259
|
+
|
|
260
|
+
export const Resizeable = Template.bind({});
|
|
261
|
+
Resizeable.args = {
|
|
262
|
+
...Default.args,
|
|
263
|
+
resizeMaxDimensions: { width: 1000, height: 500 },
|
|
264
|
+
nodeDimensions: {},
|
|
265
|
+
resizeDirections: { bottom: true, right: true },
|
|
266
|
+
onNodeResize: (dimensions) => {
|
|
267
|
+
// eslint-disable-next-line no-console
|
|
268
|
+
console.log("onNodeResize", `new dimensions: ${dimensions.width}x${dimensions.height}`);
|
|
269
|
+
},
|
|
270
|
+
};
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { useStoreState as getStoreStateFlowLegacy } from "react-flow-renderer";
|
|
2
2
|
import { useStore as getStoreStateFlowNext } from "react-flow-renderer-lts";
|
|
3
|
+
import { useStore as useStoreFlowV12 } from "@xyflow/react";
|
|
3
4
|
|
|
4
5
|
export interface ReacFlowVersionSupportProps {
|
|
5
6
|
/**
|
|
6
7
|
* Spevifies the context of the react flow renderer version that is used for the component.
|
|
8
|
+
* @deprecated (v25) `legacy` and `next` will be removed/replaced by `v##` values in future versions
|
|
7
9
|
*/
|
|
8
|
-
flowVersion?: "legacy" | "next" | "none";
|
|
10
|
+
flowVersion?: "v12" | "legacy" | "next" | "none";
|
|
9
11
|
}
|
|
10
12
|
|
|
11
13
|
export const useReactFlowVersion = () => {
|
|
@@ -17,6 +19,9 @@ export const useReactFlowVersion = () => {
|
|
|
17
19
|
const [, , zoom] = getStoreStateFlowNext((state) => state.transform);
|
|
18
20
|
return zoom ? "next" : "none";
|
|
19
21
|
} catch {}
|
|
20
|
-
|
|
22
|
+
try {
|
|
23
|
+
const [, , zoom] = useStoreFlowV12((state) => state.transform);
|
|
24
|
+
return zoom ? "v12" : "none";
|
|
25
|
+
} catch {}
|
|
21
26
|
return "none";
|
|
22
27
|
};
|