@eccenca/gui-elements 23.0.0 → 23.1.0-easynav.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 (289) hide show
  1. package/CHANGELOG.md +35 -1
  2. package/README.md +7 -0
  3. package/dist/cjs/cmem/ActivityControl/ActivityControlWidget.js.map +1 -1
  4. package/dist/cjs/cmem/react-flow/ReactFlow/ReactFlow.js +7 -2
  5. package/dist/cjs/cmem/react-flow/ReactFlow/ReactFlow.js.map +1 -1
  6. package/dist/cjs/cmem/react-flow/StickyNoteModal/StickyNoteModal.js +3 -7
  7. package/dist/cjs/cmem/react-flow/StickyNoteModal/StickyNoteModal.js.map +1 -1
  8. package/dist/cjs/cmem/react-flow/extensions/scrollOnDragHook.js +200 -0
  9. package/dist/cjs/cmem/react-flow/extensions/scrollOnDragHook.js.map +1 -0
  10. package/dist/cjs/common/Intent/index.js +7 -3
  11. package/dist/cjs/common/Intent/index.js.map +1 -1
  12. package/dist/cjs/common/utils/characters.js +82 -0
  13. package/dist/cjs/common/utils/characters.js.map +1 -0
  14. package/dist/cjs/components/Application/ApplicationTitle.js +2 -2
  15. package/dist/cjs/components/Application/ApplicationTitle.js.map +1 -1
  16. package/dist/cjs/components/Badge/Badge.js +44 -0
  17. package/dist/cjs/components/Badge/Badge.js.map +1 -0
  18. package/dist/cjs/components/Depiction/Depiction.js +111 -0
  19. package/dist/cjs/components/Depiction/Depiction.js.map +1 -0
  20. package/dist/cjs/components/Grid/Grid.js +7 -2
  21. package/dist/cjs/components/Grid/Grid.js.map +1 -1
  22. package/dist/cjs/components/Grid/GridColumn.js +6 -2
  23. package/dist/cjs/components/Grid/GridColumn.js.map +1 -1
  24. package/dist/cjs/components/Grid/GridRow.js +3 -0
  25. package/dist/cjs/components/Grid/GridRow.js.map +1 -1
  26. package/dist/cjs/components/Icon/BaseIcon.js +38 -0
  27. package/dist/cjs/components/Icon/BaseIcon.js.map +1 -0
  28. package/dist/cjs/components/Icon/Icon.js +9 -24
  29. package/dist/cjs/components/Icon/Icon.js.map +1 -1
  30. package/dist/cjs/components/Icon/IconButton.js +8 -1
  31. package/dist/cjs/components/Icon/IconButton.js.map +1 -1
  32. package/dist/cjs/components/Icon/TestIcon.js +35 -0
  33. package/dist/cjs/components/Icon/TestIcon.js.map +1 -0
  34. package/dist/cjs/components/Icon/canonicalIconNames.js +123 -621
  35. package/dist/cjs/components/Icon/canonicalIconNames.js.map +1 -1
  36. package/dist/cjs/components/Icon/index.js +11 -0
  37. package/dist/cjs/components/Icon/index.js.map +1 -0
  38. package/dist/cjs/components/Menu/MenuItem.js +1 -1
  39. package/dist/cjs/components/Menu/MenuItem.js.map +1 -1
  40. package/dist/cjs/components/MultiSelect/MultiSelect.js +56 -23
  41. package/dist/cjs/components/MultiSelect/MultiSelect.js.map +1 -1
  42. package/dist/cjs/components/Notification/Notification.js +10 -2
  43. package/dist/cjs/components/Notification/Notification.js.map +1 -1
  44. package/dist/cjs/components/OverviewItem/OverviewItemDepiction.js +24 -0
  45. package/dist/cjs/components/OverviewItem/OverviewItemDepiction.js.map +1 -1
  46. package/dist/cjs/components/Tag/Tag.js +6 -2
  47. package/dist/cjs/components/Tag/Tag.js.map +1 -1
  48. package/dist/cjs/components/TextField/TextArea.js +4 -2
  49. package/dist/cjs/components/TextField/TextArea.js.map +1 -1
  50. package/dist/cjs/components/TextField/TextField.js +4 -2
  51. package/dist/cjs/components/TextField/TextField.js.map +1 -1
  52. package/dist/cjs/components/TextField/useTextValidation.js +84 -0
  53. package/dist/cjs/components/TextField/useTextValidation.js.map +1 -0
  54. package/dist/cjs/components/Tree/Tree.js.map +1 -1
  55. package/dist/cjs/components/Typography/Highlighter.js.map +1 -1
  56. package/dist/cjs/components/Typography/OverflowText.js.map +1 -1
  57. package/dist/cjs/components/Typography/WhiteSpaceContainer.js +35 -12
  58. package/dist/cjs/components/Typography/WhiteSpaceContainer.js.map +1 -1
  59. package/dist/cjs/components/Typography/index.js +21 -0
  60. package/dist/cjs/components/Typography/index.js.map +1 -0
  61. package/dist/cjs/components/Workspace/WorkspaceContent.js +1 -1
  62. package/dist/cjs/components/Workspace/WorkspaceContent.js.map +1 -1
  63. package/dist/cjs/components/index.js +18 -0
  64. package/dist/cjs/components/index.js.map +1 -0
  65. package/dist/cjs/extensions/react-flow/edges/EdgeLabel.js +58 -0
  66. package/dist/cjs/extensions/react-flow/edges/EdgeLabel.js.map +1 -0
  67. package/dist/cjs/extensions/react-flow/handles/HandleDefault.js +12 -3
  68. package/dist/cjs/extensions/react-flow/handles/HandleDefault.js.map +1 -1
  69. package/dist/cjs/extensions/react-flow/index.js +11 -0
  70. package/dist/cjs/extensions/react-flow/index.js.map +1 -1
  71. package/dist/cjs/extensions/react-flow/nodes/NodeContent.js +57 -30
  72. package/dist/cjs/extensions/react-flow/nodes/NodeContent.js.map +1 -1
  73. package/dist/cjs/extensions/react-flow/nodes/NodeDefault.js +3 -2
  74. package/dist/cjs/extensions/react-flow/nodes/NodeDefault.js.map +1 -1
  75. package/dist/cjs/extensions/react-flow/versionsupport.js +20 -0
  76. package/dist/cjs/extensions/react-flow/versionsupport.js.map +1 -0
  77. package/dist/cjs/index.js +7 -17
  78. package/dist/cjs/index.js.map +1 -1
  79. package/dist/esm/cmem/ActivityControl/ActivityControlWidget.js.map +1 -1
  80. package/dist/esm/cmem/react-flow/ReactFlow/ReactFlow.js +7 -2
  81. package/dist/esm/cmem/react-flow/ReactFlow/ReactFlow.js.map +1 -1
  82. package/dist/esm/cmem/react-flow/StickyNoteModal/StickyNoteModal.js +3 -6
  83. package/dist/esm/cmem/react-flow/StickyNoteModal/StickyNoteModal.js.map +1 -1
  84. package/dist/esm/cmem/react-flow/extensions/scrollOnDragHook.js +194 -0
  85. package/dist/esm/cmem/react-flow/extensions/scrollOnDragHook.js.map +1 -0
  86. package/dist/esm/common/Intent/index.js +5 -13
  87. package/dist/esm/common/Intent/index.js.map +1 -1
  88. package/dist/esm/common/utils/characters.js +96 -0
  89. package/dist/esm/common/utils/characters.js.map +1 -0
  90. package/dist/esm/components/Application/ApplicationTitle.js +2 -2
  91. package/dist/esm/components/Application/ApplicationTitle.js.map +1 -1
  92. package/dist/esm/components/Badge/Badge.js +48 -0
  93. package/dist/esm/components/Badge/Badge.js.map +1 -0
  94. package/dist/esm/components/Depiction/Depiction.js +96 -0
  95. package/dist/esm/components/Depiction/Depiction.js.map +1 -0
  96. package/dist/esm/components/Grid/Grid.js +7 -2
  97. package/dist/esm/components/Grid/Grid.js.map +1 -1
  98. package/dist/esm/components/Grid/GridColumn.js +6 -2
  99. package/dist/esm/components/Grid/GridColumn.js.map +1 -1
  100. package/dist/esm/components/Grid/GridRow.js +3 -0
  101. package/dist/esm/components/Grid/GridRow.js.map +1 -1
  102. package/dist/esm/components/Icon/BaseIcon.js +44 -0
  103. package/dist/esm/components/Icon/BaseIcon.js.map +1 -0
  104. package/dist/esm/components/Icon/Icon.js +9 -24
  105. package/dist/esm/components/Icon/Icon.js.map +1 -1
  106. package/dist/esm/components/Icon/IconButton.js +8 -1
  107. package/dist/esm/components/Icon/IconButton.js.map +1 -1
  108. package/dist/esm/components/Icon/TestIcon.js +41 -0
  109. package/dist/esm/components/Icon/TestIcon.js.map +1 -0
  110. package/dist/esm/components/Icon/canonicalIconNames.js +123 -621
  111. package/dist/esm/components/Icon/canonicalIconNames.js.map +1 -1
  112. package/dist/esm/components/Icon/index.js +4 -0
  113. package/dist/esm/components/Icon/index.js.map +1 -0
  114. package/dist/esm/components/Menu/MenuItem.js +1 -1
  115. package/dist/esm/components/Menu/MenuItem.js.map +1 -1
  116. package/dist/esm/components/MultiSelect/MultiSelect.js +61 -44
  117. package/dist/esm/components/MultiSelect/MultiSelect.js.map +1 -1
  118. package/dist/esm/components/Notification/Notification.js +12 -4
  119. package/dist/esm/components/Notification/Notification.js.map +1 -1
  120. package/dist/esm/components/OverviewItem/OverviewItemDepiction.js +24 -0
  121. package/dist/esm/components/OverviewItem/OverviewItemDepiction.js.map +1 -1
  122. package/dist/esm/components/Tag/Tag.js +6 -2
  123. package/dist/esm/components/Tag/Tag.js.map +1 -1
  124. package/dist/esm/components/TextField/TextArea.js +4 -2
  125. package/dist/esm/components/TextField/TextArea.js.map +1 -1
  126. package/dist/esm/components/TextField/TextField.js +4 -2
  127. package/dist/esm/components/TextField/TextField.js.map +1 -1
  128. package/dist/esm/components/TextField/useTextValidation.js +78 -0
  129. package/dist/esm/components/TextField/useTextValidation.js.map +1 -0
  130. package/dist/esm/components/Tree/Tree.js.map +1 -1
  131. package/dist/esm/components/Typography/Highlighter.js.map +1 -1
  132. package/dist/esm/components/Typography/OverflowText.js.map +1 -1
  133. package/dist/esm/components/Typography/WhiteSpaceContainer.js +16 -14
  134. package/dist/esm/components/Typography/WhiteSpaceContainer.js.map +1 -1
  135. package/dist/esm/components/Typography/index.js +12 -0
  136. package/dist/esm/components/Typography/index.js.map +1 -0
  137. package/dist/esm/components/Workspace/WorkspaceContent.js +1 -1
  138. package/dist/esm/components/Workspace/WorkspaceContent.js.map +1 -1
  139. package/dist/esm/components/index.js +6 -0
  140. package/dist/esm/components/index.js.map +1 -0
  141. package/dist/esm/extensions/react-flow/edges/EdgeLabel.js +47 -0
  142. package/dist/esm/extensions/react-flow/edges/EdgeLabel.js.map +1 -0
  143. package/dist/esm/extensions/react-flow/handles/HandleDefault.js +13 -4
  144. package/dist/esm/extensions/react-flow/handles/HandleDefault.js.map +1 -1
  145. package/dist/esm/extensions/react-flow/index.js +1 -0
  146. package/dist/esm/extensions/react-flow/index.js.map +1 -1
  147. package/dist/esm/extensions/react-flow/nodes/NodeContent.js +67 -38
  148. package/dist/esm/extensions/react-flow/nodes/NodeContent.js.map +1 -1
  149. package/dist/esm/extensions/react-flow/nodes/NodeDefault.js +3 -2
  150. package/dist/esm/extensions/react-flow/nodes/NodeDefault.js.map +1 -1
  151. package/dist/esm/extensions/react-flow/versionsupport.js +32 -0
  152. package/dist/esm/extensions/react-flow/versionsupport.js.map +1 -0
  153. package/dist/esm/index.js +5 -10
  154. package/dist/esm/index.js.map +1 -1
  155. package/dist/types/cmem/ActivityControl/ActivityControlWidget.d.ts +2 -1
  156. package/dist/types/cmem/react-flow/ReactFlow/ReactFlow.d.ts +14 -0
  157. package/dist/types/cmem/react-flow/extensions/scrollOnDragHook.d.ts +22 -0
  158. package/dist/types/common/Intent/index.d.ts +4 -3
  159. package/dist/types/common/utils/characters.d.ts +19 -0
  160. package/dist/types/components/Badge/Badge.d.ts +42 -0
  161. package/dist/types/components/Depiction/Depiction.d.ts +71 -0
  162. package/dist/types/components/Grid/Grid.d.ts +21 -2
  163. package/dist/types/components/Grid/GridColumn.d.ts +21 -3
  164. package/dist/types/components/Grid/GridRow.d.ts +18 -2
  165. package/dist/types/components/Icon/BaseIcon.d.ts +45 -0
  166. package/dist/types/components/Icon/Icon.d.ts +7 -34
  167. package/dist/types/components/Icon/IconButton.d.ts +3 -2
  168. package/dist/types/components/Icon/TestIcon.d.ts +20 -0
  169. package/dist/types/components/Icon/canonicalIconNames.d.ts +9 -7
  170. package/dist/types/components/Icon/index.d.ts +4 -0
  171. package/dist/types/components/Menu/MenuItem.d.ts +2 -1
  172. package/dist/types/components/MultiSelect/MultiSelect.d.ts +3 -1
  173. package/dist/types/components/Notification/Notification.d.ts +13 -4
  174. package/dist/types/components/Tabs/Tab.d.ts +2 -0
  175. package/dist/types/components/Tag/Tag.d.ts +16 -3
  176. package/dist/types/components/TextField/TextArea.d.ts +7 -2
  177. package/dist/types/components/TextField/TextField.d.ts +6 -1
  178. package/dist/types/components/TextField/useTextValidation.d.ts +28 -0
  179. package/dist/types/components/Tree/Tree.d.ts +2 -1
  180. package/dist/types/components/Typography/Highlighter.d.ts +2 -2
  181. package/dist/types/components/Typography/OverflowText.d.ts +2 -2
  182. package/dist/types/components/Typography/WhiteSpaceContainer.d.ts +45 -4
  183. package/dist/types/components/Typography/index.d.ts +12 -0
  184. package/dist/types/components/index.d.ts +5 -0
  185. package/dist/types/extensions/react-flow/edges/EdgeLabel.d.ts +32 -0
  186. package/dist/types/extensions/react-flow/handles/HandleDefault.d.ts +11 -3
  187. package/dist/types/extensions/react-flow/index.d.ts +1 -0
  188. package/dist/types/extensions/react-flow/nodes/NodeContent.d.ts +31 -7
  189. package/dist/types/extensions/react-flow/nodes/NodeDefault.d.ts +2 -1
  190. package/dist/types/extensions/react-flow/versionsupport.d.ts +7 -0
  191. package/dist/types/index.d.ts +6 -11
  192. package/package.json +14 -16
  193. package/scripts/compile-sass.ts +9 -1
  194. package/src/_shame.scss +1 -1
  195. package/src/cmem/ActivityControl/ActivityControlWidget.stories.tsx +6 -4
  196. package/src/cmem/ActivityControl/ActivityControlWidget.tsx +3 -2
  197. package/src/cmem/react-flow/ReactFlow/ReactFlow.tsx +26 -1
  198. package/src/cmem/react-flow/StickyNoteModal/StickyNoteModal.tsx +10 -6
  199. package/src/cmem/react-flow/extensions/scrollOnDragHook.ts +247 -0
  200. package/src/common/Intent/index.ts +16 -12
  201. package/src/common/utils/characters.ts +111 -0
  202. package/src/components/Accordion/accordion.scss +4 -3
  203. package/src/components/Application/ApplicationTitle.tsx +2 -2
  204. package/src/components/Application/_config.scss +1 -1
  205. package/src/components/Application/_content.scss +1 -1
  206. package/src/components/Application/_header.scss +2 -2
  207. package/src/components/Application/_sidebar.scss +2 -9
  208. package/src/components/Application/_toolbar.scss +1 -1
  209. package/src/components/Application/application.scss +4 -4
  210. package/src/components/AutocompleteField/autoCompleteFieldUtils.tsx +13 -8
  211. package/src/components/Badge/Badge.stories.tsx +47 -0
  212. package/src/components/Badge/Badge.tsx +93 -0
  213. package/src/components/Badge/badge.scss +44 -0
  214. package/src/components/Depiction/Depiction.tsx +198 -0
  215. package/src/components/Depiction/depiction.scss +176 -0
  216. package/src/components/Depiction/stories/Depiction.stories.tsx +69 -0
  217. package/src/components/Depiction/stories/test-16to9.png +0 -0
  218. package/src/components/Depiction/stories/test-16to9.svg +41 -0
  219. package/src/components/Depiction/stories/test-16to9.tobase64.svg +41 -0
  220. package/src/components/Depiction/stories/test-16to9.tsx +44 -0
  221. package/src/components/Depiction/stories/test-9to16.png +0 -0
  222. package/src/components/Depiction/stories/test-9to16.svg +44 -0
  223. package/src/components/Depiction/stories/test-9to16.tobase64.svg +44 -0
  224. package/src/components/Depiction/stories/test-9to16.tsx +48 -0
  225. package/src/components/Grid/Grid.tsx +22 -4
  226. package/src/components/Grid/GridColumn.tsx +24 -7
  227. package/src/components/Grid/GridRow.tsx +18 -3
  228. package/src/components/Grid/grid.scss +14 -13
  229. package/src/components/Grid/stories/Grid.stories.tsx +27 -0
  230. package/src/components/Grid/stories/GridColumn.stories.tsx +66 -0
  231. package/src/components/Grid/stories/GridRow.stories.tsx +47 -0
  232. package/src/components/Icon/BaseIcon.tsx +84 -0
  233. package/src/components/Icon/Icon.tsx +23 -82
  234. package/src/components/Icon/IconButton.tsx +18 -14
  235. package/src/components/Icon/TestIcon.tsx +39 -0
  236. package/src/components/Icon/canonicalIconNames.tsx +132 -633
  237. package/src/components/Icon/index.ts +5 -0
  238. package/src/components/Icon/stories/Icon.stories.tsx +13 -0
  239. package/src/components/Icon/stories/IconButton.stories.tsx +14 -7
  240. package/src/components/Icon/stories/TestIcon.stories.tsx +28 -0
  241. package/src/components/Link/link.scss +2 -1
  242. package/src/components/Menu/MenuItem.tsx +14 -4
  243. package/src/components/Menu/Stories/MenuItem.stories.tsx +16 -2
  244. package/src/components/MultiSelect/MultiSelect.tsx +58 -27
  245. package/src/components/Notification/Notification.stories.tsx +4 -0
  246. package/src/components/Notification/Notification.tsx +26 -6
  247. package/src/components/OverviewItem/OverviewItemDepiction.tsx +31 -0
  248. package/src/components/OverviewItem/overviewitem.scss +2 -1
  249. package/src/components/OverviewItem/stories/OverviewItem.stories.tsx +22 -1
  250. package/src/components/OverviewItem/stories/OverviewItemDepiction.stories.tsx +8 -3
  251. package/src/components/Pagination/pagination.scss +3 -2
  252. package/src/components/SimpleTable/simpletable.scss +11 -12
  253. package/src/components/Tag/Tag.stories.tsx +7 -2
  254. package/src/components/Tag/Tag.tsx +24 -4
  255. package/src/components/Tag/tag.scss +84 -3
  256. package/src/components/TagInput/taginput.scss +6 -0
  257. package/src/components/TextField/TextArea.tsx +10 -1
  258. package/src/components/TextField/TextField.tsx +9 -0
  259. package/src/components/TextField/stories/SearchField.stories.tsx +1 -1
  260. package/src/components/TextField/textfield.scss +12 -0
  261. package/src/components/TextField/useTextValidation.ts +103 -0
  262. package/src/components/Tooltip/tooltip.scss +1 -1
  263. package/src/components/Tree/Tree.stories.tsx +7 -1
  264. package/src/components/Tree/Tree.tsx +2 -1
  265. package/src/components/Typography/Highlighter.tsx +2 -2
  266. package/src/components/Typography/OverflowText.tsx +2 -2
  267. package/src/components/Typography/WhiteSpaceContainer.tsx +69 -21
  268. package/src/components/Typography/index.ts +25 -0
  269. package/src/components/Typography/stories/WhiteSpaceContainer.stories.tsx +55 -0
  270. package/src/components/Typography/typography.scss +3 -2
  271. package/src/components/Workspace/WorkspaceContent.tsx +1 -1
  272. package/src/components/index.scss +5 -0
  273. package/src/components/index.ts +5 -0
  274. package/src/extensions/react-flow/_config.scss +1 -0
  275. package/src/extensions/react-flow/edges/EdgeLabel.tsx +83 -0
  276. package/src/extensions/react-flow/edges/_edges.scss +77 -0
  277. package/src/extensions/react-flow/edges/stories/EdgeLabel.stories.tsx +39 -0
  278. package/src/extensions/react-flow/handles/HandleDefault.tsx +38 -10
  279. package/src/extensions/react-flow/index.ts +1 -0
  280. package/src/extensions/react-flow/nodes/NodeContent.tsx +134 -55
  281. package/src/extensions/react-flow/nodes/NodeDefault.tsx +4 -2
  282. package/src/extensions/react-flow/nodes/_nodes.scss +56 -17
  283. package/src/extensions/react-flow/nodes/stories/NodeContent.stories.tsx +37 -1
  284. package/src/extensions/react-flow/versionsupport.ts +22 -0
  285. package/src/includes/carbon-components/_components.scss +11 -0
  286. package/src/includes/carbon-components/_requisits.scss +18 -0
  287. package/src/includes/carbon-components/_variables.scss +50 -53
  288. package/src/index.scss +4 -105
  289. package/src/index.ts +6 -16
@@ -1,9 +1,12 @@
1
1
  import React from "react";
2
- import { Position, useStoreState } from "react-flow-renderer";
3
- import { Icon, Tooltip } from "../../../index";
2
+ import { Position, useStoreState as useStoreStateFlowLegacy } from "react-flow-renderer";
3
+ import { useStore as useStoreStateFlowNext } from "react-flow-renderer-lts";
4
+ import { Icon, Depiction, OverflowText } from "../../../index";
4
5
  import { CLASSPREFIX as eccgui } from "../../../configuration/constants";
5
6
  import { ValidIconName } from "../../../components/Icon/canonicalIconNames";
6
- import { HandleDefault, HandleProps } from "./../handles/HandleDefault";
7
+ import { DepictionProps } from "../../../components/Depiction/Depiction";
8
+ import { ReacFlowVersionSupportProps, useReactFlowVersion } from "../versionsupport";
9
+ import { HandleDefault, HandleProps, HandleNextProps } from "./../handles/HandleDefault";
7
10
  import { NodeProps } from "./NodeDefault";
8
11
  import { NodeContentExtensionProps } from "./NodeContentExtension";
9
12
  import { Resizable } from "re-resizable";
@@ -14,6 +17,10 @@ export interface IHandleProps extends HandleProps {
14
17
  category?: "configuration";
15
18
  }
16
19
 
20
+ interface NodeContentHandleNextProps extends HandleNextProps {
21
+ category?: "configuration";
22
+ }
23
+
17
24
  export type NodeDimensions = {
18
25
  width: number;
19
26
  height: number;
@@ -26,13 +33,22 @@ interface NodeContentData<CONTENT_PROPS = any> {
26
33
  */
27
34
  iconName?: ValidIconName;
28
35
  /**
29
- * Valid and accessible URL or `data-uri` for an image that should be displayed before the node label.
36
+ * Depiction element that should be displayed before the node label.
37
+ * As alternative a valid and accessible URL or `data-uri` for an image can be set, then the Depiction element is created automatically.
30
38
  */
31
- depiction?: string;
39
+ depiction?: string | React.ReactElement<DepictionProps>;
40
+ /**
41
+ * Any element that should be displayed as depiction before the node label.
42
+ */
43
+ leftElement?: JSX.Element;
32
44
  /**
33
45
  * Label that is displayed in the node header.
34
46
  */
35
- label: string;
47
+ label: string | JSX.Element;
48
+ /**
49
+ * Element that is displayed as subline under the label in the header.
50
+ */
51
+ labelSubline?: JSX.Element;
36
52
  /**
37
53
  * Content element, displayed in the node body.
38
54
  */
@@ -48,7 +64,7 @@ interface NodeContentData<CONTENT_PROPS = any> {
48
64
  }
49
65
 
50
66
  export interface NodeContentProps<NODE_DATA, NODE_CONTENT_PROPS = any>
51
- extends NodeContentData,
67
+ extends NodeContentData, ReacFlowVersionSupportProps,
52
68
  React.HTMLAttributes<HTMLDivElement> {
53
69
  /**
54
70
  * Size of the node.
@@ -60,6 +76,16 @@ export interface NodeContentProps<NODE_DATA, NODE_CONTENT_PROPS = any>
60
76
  * If not set to `none` then the node is only displayed in normal size when it is selected.
61
77
  */
62
78
  minimalShape?: "none" | "circular" | "rectangular";
79
+ /**
80
+ * Stretches the node to the full available width.
81
+ */
82
+ fullWidth?: boolean;
83
+ /**
84
+ * Increase the hight of the node header.
85
+ * Use this for example if you need more space for a label subline.
86
+ * Also the depiction is displayed larger.
87
+ */
88
+ increadeHeader?: boolean;
63
89
  /**
64
90
  * Set the type of used highlights to mark the node.
65
91
  */
@@ -90,7 +116,7 @@ export interface NodeContentProps<NODE_DATA, NODE_CONTENT_PROPS = any>
90
116
  * Array of property definition objects for `Handle` components that need to be created for the node.
91
117
  * @see https://reactflow.dev/docs/api/handle/
92
118
  */
93
- handles?: IHandleProps[];
119
+ handles?: IHandleProps[] | NodeContentHandleNextProps[];
94
120
  /**
95
121
  * Set the minimal number of handles on left or right side of the node to activate the recalculation of the minimal height of the node.
96
122
  */
@@ -153,14 +179,33 @@ export interface NodeContentProps<NODE_DATA, NODE_CONTENT_PROPS = any>
153
179
  nodeDimensions?: NodeDimensions;
154
180
  }
155
181
 
156
- interface MemoHandlerProps extends HandleProps {
182
+ interface MemoHandlerLegacyProps extends HandleProps {
183
+ posdirection: string;
184
+ style: {
185
+ [key: string]: string | undefined;
186
+ };
187
+ }
188
+
189
+ interface MemoHandlerNextProps extends HandleNextProps {
157
190
  posdirection: string;
158
191
  style: {
159
192
  [key: string]: string | undefined;
160
193
  };
161
194
  }
162
195
 
163
- const defaultHandles = [{ type: "target" }, { type: "source" }] as IHandleProps[];
196
+ type MemoHandlerProps = MemoHandlerLegacyProps | MemoHandlerNextProps;
197
+
198
+ const defaultHandles = () => {
199
+ const flowVersion = useReactFlowVersion();
200
+ switch (flowVersion) {
201
+ case "legacy":
202
+ return [{ type: "target" }, { type: "source" }] as IHandleProps[];
203
+ case "next":
204
+ return [{ type: "target" }, { type: "source" }] as NodeContentHandleNextProps[];
205
+ default:
206
+ return [];
207
+ }
208
+ }
164
209
 
165
210
  const getDefaultMinimalTooltipData = (node: any) => {
166
211
  return {
@@ -171,7 +216,7 @@ const getDefaultMinimalTooltipData = (node: any) => {
171
216
  };
172
217
  };
173
218
 
174
- const addHandles = (handles: any, position: any, posDirection: any, isConnectable: any, nodeStyle: any) => {
219
+ const addHandles = (handles: any, position: any, posDirection: any, isConnectable: any, nodeStyle: any, flowVersion: any = "legacy") => {
175
220
  return handles[position].map((handle: any, idx: any) => {
176
221
  const { className, style = {}, category } = handle;
177
222
  const styleAdditions: { [key: string]: string } = {
@@ -191,22 +236,10 @@ const addHandles = (handles: any, position: any, posDirection: any, isConnectabl
191
236
  : className,
192
237
  },
193
238
  };
194
- return <MemoHandler {...handleProperties} key={"handle" + idx} />;
239
+ return <MemoHandler flowVersion={flowVersion} {...handleProperties} key={"handle" + idx} />;
195
240
  });
196
241
  };
197
242
 
198
- const imgWithTooltip = (imgEl: any, tooltipText: any) => {
199
- if (!!tooltipText) {
200
- return (
201
- <Tooltip content={tooltipText}>
202
- <span>{imgEl}</span>
203
- </Tooltip>
204
- );
205
- }
206
-
207
- return imgEl;
208
- };
209
-
210
243
  export const gethighlightedStateClasses = (state: any, baseClassName: any) => {
211
244
  let hightlights = typeof state === "string" ? [state] : state;
212
245
  //@ts-ignore
@@ -226,20 +259,25 @@ const MemoHandler = React.memo(
226
259
  * This element cannot be used directly, all properties must be routed through the `data` property of an `elements` property item inside the `ReactFlow` container.
227
260
  */
228
261
  export function NodeContent<CONTENT_PROPS = any>({
262
+ flowVersion = useReactFlowVersion(),
229
263
  iconName,
230
264
  depiction,
265
+ leftElement,
231
266
  typeLabel,
232
267
  label,
268
+ labelSubline,
269
+ increadeHeader,
270
+ fullWidth,
233
271
  showExecutionButtons = true,
234
272
  executionButtons,
235
273
  menuButtons,
236
274
  content,
237
275
  contentExtension,
238
- footerContent,
276
+ footerContent,
239
277
  size = "small",
240
278
  minimalShape = "circular",
241
279
  highlightedState,
242
- handles = defaultHandles,
280
+ handles = defaultHandles(),
243
281
  adaptHeightForHandleMinCount,
244
282
  adaptSizeIncrement = 15,
245
283
  getMinimalTooltipData = getDefaultMinimalTooltipData,
@@ -259,16 +297,22 @@ export function NodeContent<CONTENT_PROPS = any>({
259
297
  // other props for DOM element
260
298
  ...otherProps
261
299
  }: NodeContentProps<any>) {
300
+ const isResizeable = (!!onNodeResize && minimalShape === "none");
262
301
  const [width, setWidth] = React.useState<number>(nodeDimensions?.width ?? 0);
263
302
  const [height, setHeight] = React.useState<number>(nodeDimensions?.height ?? 0);
264
- const [, , zoom] = useStoreState((state) => state.transform);
303
+ let zoom = 1;
304
+ if (isResizeable) try {
305
+ [, , zoom] = flowVersion === "legacy"
306
+ ? useStoreStateFlowLegacy((state) => state.transform)
307
+ : useStoreStateFlowNext((state) => state.transform);
308
+ } catch {}
265
309
  const [adjustedContentProps, setAdjustedContentProps] = React.useState<Partial<CONTENT_PROPS>>({});
266
310
  const nodeContentRef = React.useRef<any>();
267
- const handleStack: { [key: string]: IHandleProps[] } = {};
268
- handleStack[Position.Top] = [] as IHandleProps[];
269
- handleStack[Position.Right] = [] as IHandleProps[];
270
- handleStack[Position.Bottom] = [] as IHandleProps[];
271
- handleStack[Position.Left] = [] as IHandleProps[];
311
+ const handleStack = flowVersion==="legacy" ? {} as { [key: string]: IHandleProps[] } : {} as { [key: string]: NodeContentHandleNextProps[] };
312
+ handleStack[Position.Top] = flowVersion==="legacy" ? [] as IHandleProps[] : [] as NodeContentHandleNextProps[];
313
+ handleStack[Position.Right] = flowVersion==="legacy" ? [] as IHandleProps[] : [] as NodeContentHandleNextProps[];
314
+ handleStack[Position.Bottom] = flowVersion==="legacy" ? [] as IHandleProps[] : [] as NodeContentHandleNextProps[];
315
+ handleStack[Position.Left] = flowVersion==="legacy" ? [] as IHandleProps[] : [] as NodeContentHandleNextProps[];
272
316
 
273
317
  // initial dimension before resize
274
318
  React.useEffect(() => {
@@ -333,6 +377,7 @@ export function NodeContent<CONTENT_PROPS = any>({
333
377
  `${eccgui}-graphviz__node` +
334
378
  ` ${eccgui}-graphviz__node--${size}` +
335
379
  ` ${eccgui}-graphviz__node--minimal-${minimalShape}` +
380
+ (fullWidth ? ` ${eccgui}-graphviz__node--fullwidth` : "") +
336
381
  (!!highlightedState
337
382
  ? " " + gethighlightedStateClasses(highlightedState, `${eccgui}-graphviz__node`)
338
383
  : "") +
@@ -341,32 +386,66 @@ export function NodeContent<CONTENT_PROPS = any>({
341
386
  (letPassWheelEvents === false ? ` nowheel` : "")
342
387
  }
343
388
  >
344
- <header className={`${eccgui}-graphviz__node__header`}>
345
- {(!!iconName || !!depiction) && (
346
- <span className={`${eccgui}-graphviz__node__header-depiction`}>
347
- {!!depiction &&
348
- imgWithTooltip(
349
- <img src={depiction} alt="" />,
350
- minimalShape === "none" || selected ? typeLabel : undefined
351
- )}
352
- {!!iconName && !depiction && (
353
- <Icon
354
- name={iconName}
355
- tooltipText={minimalShape === "none" || selected ? typeLabel : undefined}
389
+ <header className={
390
+ `${eccgui}-graphviz__node__header` +
391
+ ((increadeHeader && minimalShape==="none") ? ` ${eccgui}-graphviz__node__header--large` : "")
392
+ }>
393
+ {(!!iconName || !!depiction || !!leftElement) && (
394
+ <div className={`${eccgui}-graphviz__node__header-depiction`}>
395
+ { leftElement }
396
+ {!!depiction && !leftElement && typeof depiction === "string" && (
397
+ <Depiction
398
+ image={<img src={depiction} alt="" />}
399
+ caption={minimalShape === "none" || selected ? typeLabel : undefined}
400
+ captionPosition="tooltip"
401
+ padding="tiny"
402
+ ratio="1:1"
403
+ resizing="contain"
404
+ forceInlineSvg
356
405
  />
357
406
  )}
358
- </span>
407
+ {!!depiction && !leftElement && typeof depiction !== "string" && (
408
+ React.cloneElement(depiction, {
409
+ caption: minimalShape === "none" || selected ? typeLabel : undefined,
410
+ captionPosition: "tooltip",
411
+ padding: "tiny",
412
+ ratio: "1:1",
413
+ resizing: "contain",
414
+ forceInlineSvg: true,
415
+ })
416
+ )}
417
+ {!!iconName && !leftElement && !depiction && (
418
+ <Depiction
419
+ image={<Icon name={iconName} />}
420
+ caption={minimalShape === "none" || selected ? typeLabel : undefined}
421
+ captionPosition="tooltip"
422
+ padding="tiny"
423
+ ratio="1:1"
424
+ resizing="contain"
425
+ forceInlineSvg
426
+ />
427
+ )}
428
+ </div>
359
429
  )}
360
- <span className={`${eccgui}-graphviz__node__header-label`} title={label}>
361
- {label}
362
- </span>
430
+ <div className={`${eccgui}-graphviz__node__header-label`} title={typeof label==="string" ? label : undefined}>
431
+ {
432
+ typeof label === "string"
433
+ ? <OverflowText className={`${eccgui}-graphviz__node__header-label__mainline`}>{label}</OverflowText>
434
+ : <div className={`${eccgui}-graphviz__node__header-label__mainline`}>{label}</div>
435
+ }
436
+ {!!labelSubline && (
437
+ <div className={`${eccgui}-graphviz__node__header-label__subline`}>
438
+ { labelSubline }
439
+ </div>
440
+ )}
441
+ </div>
363
442
  {(menuButtons || (showExecutionButtons && executionButtons)) && (
364
- <span className={`${eccgui}-graphviz__node__header-menu`}>
443
+ <div className={`${eccgui}-graphviz__node__header-menu`}>
365
444
  {showExecutionButtons && typeof executionButtons === "function"
366
445
  ? executionButtons(adjustedContentProps, setAdjustedContentProps)
367
446
  : null}
368
447
  {menuButtons ?? null}
369
- </span>
448
+ </div>
370
449
  )}
371
450
  </header>
372
451
  {content && (
@@ -383,10 +462,10 @@ export function NodeContent<CONTENT_PROPS = any>({
383
462
  </section>
384
463
  {!!handles && (
385
464
  <>
386
- {addHandles(handleStack, Position.Top, "left", isConnectable, style)}
387
- {addHandles(handleStack, Position.Right, "top", isConnectable, style)}
388
- {addHandles(handleStack, Position.Bottom, "left", isConnectable, style)}
389
- {addHandles(handleStack, Position.Left, "top", isConnectable, style)}
465
+ {addHandles(handleStack, Position.Top, "left", isConnectable, style, flowVersion)}
466
+ {addHandles(handleStack, Position.Right, "top", isConnectable, style, flowVersion)}
467
+ {addHandles(handleStack, Position.Bottom, "left", isConnectable, style, flowVersion)}
468
+ {addHandles(handleStack, Position.Left, "top", isConnectable, style, flowVersion)}
390
469
  </>
391
470
  )}
392
471
  </>
@@ -419,5 +498,5 @@ export function NodeContent<CONTENT_PROPS = any>({
419
498
  </Resizable>
420
499
  );
421
500
 
422
- return (!!onNodeResize && minimalShape === "none") ? resizableNode() : nodeContent;
501
+ return (isResizeable) ? resizableNode() : nodeContent;
423
502
  }
@@ -5,8 +5,9 @@ import {
5
5
  } from "react-flow-renderer";
6
6
  import { Tooltip } from "../../../index";
7
7
  import { NodeContent, NodeContentProps } from "./NodeContent";
8
+ import { ReacFlowVersionSupportProps, useReactFlowVersion } from "../versionsupport";
8
9
 
9
- export interface NodeProps<NODE_DATA, NODE_CONTENT_PROPS = any> extends ReactFlowNodeProps {
10
+ export interface NodeProps<NODE_DATA, NODE_CONTENT_PROPS = any> extends ReacFlowVersionSupportProps, ReactFlowNodeProps {
10
11
  /**
11
12
  * Contains all properties for our implementation of the React-Flow node.
12
13
  * For details pls see the `NodeContent` element documentation.
@@ -22,6 +23,7 @@ export interface NodeProps<NODE_DATA, NODE_CONTENT_PROPS = any> extends ReactFlo
22
23
  export const NodeDefault = memo(
23
24
  (node: NodeProps<any>) => {
24
25
  const {
26
+ flowVersion = useReactFlowVersion(),
25
27
  data,
26
28
  targetPosition = Position.Left,
27
29
  sourcePosition = Position.Right,
@@ -29,7 +31,7 @@ export const NodeDefault = memo(
29
31
  selected
30
32
  } = node;
31
33
 
32
- const nodeEl = <NodeContent {...{...data, targetPosition, sourcePosition, isConnectable, selected}} />
34
+ const nodeEl = <NodeContent {...{flowVersion, ...data, targetPosition, sourcePosition, isConnectable, selected}} />
33
35
 
34
36
  if (!selected && data?.minimalShape !== "none" && !!data?.getMinimalTooltipData) {
35
37
  const tooltipData = data?.getMinimalTooltipData(node);
@@ -120,22 +120,20 @@
120
120
  }
121
121
  }
122
122
 
123
+ .#{$eccgui}-graphviz__node__header--large {
124
+ min-height: $reactflow-node-largesize;
125
+ }
126
+
123
127
  .#{$eccgui}-graphviz__node__header-depiction,
124
128
  .#{$eccgui}-graphviz__node__header-menu {
125
129
  flex-grow: 0;
126
130
  flex-shrink: 0;
127
131
  max-height: calc(#{$reactflow-node-basesize} - #{2 * $reactflow-node-border-width});
128
- }
129
-
130
- .#{$eccgui}-graphviz__node__header-label {
131
132
  margin: 0 $eccgui-size-block-whitespace * 0.25;
132
- white-space: nowrap;
133
- overflow: hidden;
134
- text-overflow: ellipsis;
135
- flex-grow: 1;
136
- flex-shrink: 1;
137
- display: inline-block;
138
- text-align: left;
133
+
134
+ .#{$eccgui}-graphviz__node__header--large & {
135
+ max-height: calc(#{$reactflow-node-largesize} - #{2 * $reactflow-node-border-width});
136
+ }
139
137
  }
140
138
 
141
139
  .#{$eccgui}-graphviz__node__header-depiction {
@@ -151,16 +149,53 @@
151
149
  justify-content: center;
152
150
  align-items: center;
153
151
 
154
- img {
155
- max-width: calc(2 * (#{$reactflow-node-basesize} - #{2 * $reactflow-node-border-width}));
156
- max-height: calc(#{$reactflow-node-basesize} - #{2 * $reactflow-node-border-width});
157
- height: auto;
158
- width: auto;
159
- display: inline-block;
160
- pointer-events: none;
152
+ & .#{$eccgui}-depiction {
153
+ flex-grow: 0;
154
+ flex-shrink: 0;
155
+ align-self: stretch;
156
+
157
+ /*
158
+ Fix for Firefox,
159
+ the width of .#{$eccgui}-depiction container is not reduced to its content
160
+ when .#{$eccgui}-depiction__image updated to the available height.
161
+ */
162
+ .#{$eccgui}-depiction__image {
163
+ height: calc(#{$reactflow-node-basesize} - #{2 * $reactflow-node-border-width});
164
+ }
165
+ }
166
+
167
+ .#{$eccgui}-graphviz__node__header--large & {
168
+ min-width: calc(#{$reactflow-node-largesize} - #{2 * $reactflow-node-border-width});
169
+ min-height: calc(#{$reactflow-node-largesize} - #{2 * $reactflow-node-border-width});
170
+ max-width: calc(2 * (#{$reactflow-node-largesize} - #{2 * $reactflow-node-border-width}));
171
+
172
+ .#{$eccgui}-depiction__image {
173
+ height: calc(#{$reactflow-node-largesize} - #{2 * $reactflow-node-border-width});
174
+ }
161
175
  }
162
176
  }
163
177
 
178
+ .#{$eccgui}-graphviz__node__header-label {
179
+ margin: 0 $eccgui-size-block-whitespace * 0.25;
180
+ white-space: nowrap;
181
+ overflow: hidden;
182
+ text-overflow: ellipsis;
183
+ flex-grow: 1;
184
+ flex-shrink: 1;
185
+ display: inline-flex;
186
+ flex-direction: column;
187
+ text-align: left;
188
+ }
189
+
190
+ .#{$eccgui}-graphviz__node__header-label__mainline,
191
+ .#{$eccgui}-graphviz__node__header-label__subline {
192
+ overflow: hidden;
193
+ text-overflow: ellipsis;
194
+ white-space: nowrap;
195
+ flex-grow: 0;
196
+ flex-shrink: 0;
197
+ }
198
+
164
199
  .#{$eccgui}-graphviz__node__content {
165
200
  padding: $eccgui-size-block-whitespace * 0.5 $eccgui-size-block-whitespace * 0.25;
166
201
  overflow: hidden;
@@ -225,6 +260,10 @@
225
260
  max-height: $reactflow-node-basesize * 13;
226
261
  }
227
262
 
263
+ .#{$eccgui}-graphviz__node--fullwidth:not(.is-resizeable) {
264
+ width: 100%;
265
+ }
266
+
228
267
  // Node highlights
229
268
 
230
269
  .#{$eccgui}-graphviz__node--highlight-success,
@@ -1,11 +1,18 @@
1
1
  import React, { useState, useEffect, useCallback } from "react";
2
2
  import { ComponentStory, ComponentMeta } from "@storybook/react";
3
- import { LoremIpsum } from 'react-lorem-ipsum';
3
+ import { LoremIpsum, loremIpsum } from 'react-lorem-ipsum';
4
4
  import ReactFlow, { Elements, ReactFlowProvider } from 'react-flow-renderer';
5
5
  import {
6
+ Badge,
7
+ ContextMenu,
8
+ MenuItem,
6
9
  OverflowText,
7
10
  HtmlContentBlock,
11
+ IconButton,
12
+ Tag,
13
+ TagList,
8
14
  } from "./../../../../index";
15
+ import canonicalIcons from "./../../../../components/Icon/canonicalIconNames";
9
16
 
10
17
  import { NodeContent } from "./../NodeContent";
11
18
  import { nodeTypes } from "./../nodeTypes";
@@ -29,6 +36,35 @@ export default {
29
36
  "Slide out example": <NodeContentExtension {...ContentExtensionExampleSlideOut.args} />,
30
37
  },
31
38
  },
39
+ labelSubline: {
40
+ control: "select",
41
+ options: ["Not set", "Text string", "OverflowText element", "Tag list"],
42
+ mapping: {
43
+ "Not set": undefined,
44
+ "Text string": loremIpsum({ p: 1, avgSentencesPerParagraph: 1, avgWordsPerSentence: 8, random: false }).toString(),
45
+ "OverflowText element": <OverflowText>{loremIpsum({ p: 1, avgSentencesPerParagraph: 2, avgWordsPerSentence: 4, random: false }).toString()}</OverflowText>,
46
+ "Tag list": <TagList>{
47
+ loremIpsum({ p: 1, avgSentencesPerParagraph: 1, avgWordsPerSentence: 5, random: false })
48
+ .toString()
49
+ .split(" ")
50
+ .map((term) => <Tag small>{term}</Tag>)
51
+ }</TagList>
52
+ },
53
+ },
54
+ menuButtons: {
55
+ control: "select",
56
+ options: ["Not set", "Icon button", "Context Menu", "Info badge"],
57
+ mapping: {
58
+ "Not set": undefined,
59
+ "Icon button": <IconButton name="item-info" text="Icon button" onClick={()=>alert("Click info")} />,
60
+ "Context Menu": <ContextMenu><MenuItem text="Context menu" /></ContextMenu>,
61
+ "Info badge": <Badge intent="info">Info</Badge>,
62
+ },
63
+ },
64
+ iconName: {
65
+ control: "select",
66
+ options: [...(Object.keys(canonicalIcons))],
67
+ },
32
68
  content: { control: "none" },
33
69
  footerContent: { control: "none" },
34
70
  isConnectable: { table: { disable: true } },
@@ -0,0 +1,22 @@
1
+ import { useStoreState as useStoreStateFlowLegacy } from "react-flow-renderer";
2
+ import { useStore as useStoreStateFlowNext } from "react-flow-renderer-lts";
3
+
4
+ export interface ReacFlowVersionSupportProps {
5
+ /**
6
+ * Spevifies the context of the react flow renderer version that is used for the component.
7
+ */
8
+ flowVersion?: "legacy" | "next" | "none";
9
+ }
10
+
11
+ export const useReactFlowVersion = () => {
12
+ try {
13
+ const [, , zoom] = useStoreStateFlowLegacy((state) => state.transform);
14
+ return !!zoom ? "legacy" : "none";
15
+ } catch {}
16
+ try {
17
+ const [, , zoom] = useStoreStateFlowNext((state) => state.transform);
18
+ return !!zoom ? "next" : "none";
19
+ } catch {}
20
+
21
+ return "none";
22
+ }
@@ -0,0 +1,11 @@
1
+ /*
2
+ FIXME:
3
+ it's probably not necessary to include those elements because they should be included by
4
+ the Carbon components itself when they are necessary as sub components. We may remove this
5
+ file later when we haven't experiences any problems.
6
+ */
7
+ // @use "~@carbon/styles/scss/components/select/index" as select;
8
+ // @use "~@carbon/styles/scss/components/list-box/index" as list-box;
9
+ // @use "~@carbon/styles/scss/components/dropdown/index" as dropdown;
10
+
11
+ @use "~@carbon/styles/scss/components/popover/index" as popover; // necessary for pagination
@@ -0,0 +1,18 @@
1
+ @use "~@carbon/styles/scss/config" with (
2
+ $css--body: $css--body,
3
+ $css--font-face: $css--font-face,
4
+ $css--reset: $css--reset,
5
+ $css--default-type: $css--default-type,
6
+ $prefix: $prefix,
7
+ $flex-grid-columns: $flex-grid-columns,
8
+ $use-flexbox-grid: $use-flexbox-grid
9
+ );
10
+ @use "~@carbon/styles/scss/utilities/_visually-hidden";
11
+ @import "~@carbon/styles/scss/feature-flags";
12
+ @import "~@carbon/styles/scss/colors";
13
+ @import "~@carbon/styles/scss/theme";
14
+ :root {
15
+ @include theme;
16
+ }
17
+ @import "~@carbon/styles/scss/spacing";
18
+ @import "~@carbon/styles/scss/utilities/z-index";