@eccenca/gui-elements 23.2.0 → 23.3.0-rc.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 (114) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/dist/cjs/cmem/react-flow/ReactFlow/ReactFlow.js +5 -1
  3. package/dist/cjs/cmem/react-flow/ReactFlow/ReactFlow.js.map +1 -1
  4. package/dist/cjs/cmem/react-flow/StickyNoteModal/StickyNoteModal.js +9 -11
  5. package/dist/cjs/cmem/react-flow/StickyNoteModal/StickyNoteModal.js.map +1 -1
  6. package/dist/cjs/cmem/react-flow/extensions/ReactFlowHotkeyContext.js +12 -0
  7. package/dist/cjs/cmem/react-flow/extensions/ReactFlowHotkeyContext.js.map +1 -0
  8. package/dist/cjs/components/Application/ApplicationHeader.js +2 -3
  9. package/dist/cjs/components/Application/ApplicationHeader.js.map +1 -1
  10. package/dist/cjs/components/Dialog/Modal.js +17 -8
  11. package/dist/cjs/components/Dialog/Modal.js.map +1 -1
  12. package/dist/cjs/components/Dialog/SimpleDialog.js +15 -2
  13. package/dist/cjs/components/Dialog/SimpleDialog.js.map +1 -1
  14. package/dist/cjs/components/Icon/IconButton.js +1 -1
  15. package/dist/cjs/components/Icon/IconButton.js.map +1 -1
  16. package/dist/cjs/components/Icon/canonicalIconNames.js +1 -0
  17. package/dist/cjs/components/Icon/canonicalIconNames.js.map +1 -1
  18. package/dist/cjs/components/OverviewItem/OverviewItemDepiction.js +3 -6
  19. package/dist/cjs/components/OverviewItem/OverviewItemDepiction.js.map +1 -1
  20. package/dist/cjs/components/PropertyValuePair/PropertyName.js +3 -3
  21. package/dist/cjs/components/PropertyValuePair/PropertyName.js.map +1 -1
  22. package/dist/cjs/components/Separation/Spacing.js +18 -4
  23. package/dist/cjs/components/Separation/Spacing.js.map +1 -1
  24. package/dist/cjs/components/TextField/TextField.js +23 -3
  25. package/dist/cjs/components/TextField/TextField.js.map +1 -1
  26. package/dist/cjs/extensions/codemirror/CodeMirror.js +39 -7
  27. package/dist/cjs/extensions/codemirror/CodeMirror.js.map +1 -1
  28. package/dist/cjs/extensions/react-flow/handles/HandleDefault.js +26 -5
  29. package/dist/cjs/extensions/react-flow/handles/HandleDefault.js.map +1 -1
  30. package/dist/cjs/extensions/react-flow/handles/HandleTools.js +27 -0
  31. package/dist/cjs/extensions/react-flow/handles/HandleTools.js.map +1 -0
  32. package/dist/cjs/extensions/react-flow/index.js +2 -0
  33. package/dist/cjs/extensions/react-flow/index.js.map +1 -1
  34. package/dist/cjs/extensions/react-flow/nodes/NodeContent.js +25 -5
  35. package/dist/cjs/extensions/react-flow/nodes/NodeContent.js.map +1 -1
  36. package/dist/esm/cmem/markdown/Markdown.js +1 -1
  37. package/dist/esm/cmem/react-flow/ReactFlow/ReactFlow.js +5 -1
  38. package/dist/esm/cmem/react-flow/ReactFlow/ReactFlow.js.map +1 -1
  39. package/dist/esm/cmem/react-flow/StickyNoteModal/StickyNoteModal.js +9 -11
  40. package/dist/esm/cmem/react-flow/StickyNoteModal/StickyNoteModal.js.map +1 -1
  41. package/dist/esm/cmem/react-flow/extensions/ReactFlowHotkeyContext.js +6 -0
  42. package/dist/esm/cmem/react-flow/extensions/ReactFlowHotkeyContext.js.map +1 -0
  43. package/dist/esm/components/Application/ApplicationHeader.js +2 -3
  44. package/dist/esm/components/Application/ApplicationHeader.js.map +1 -1
  45. package/dist/esm/components/Dialog/Modal.js +18 -9
  46. package/dist/esm/components/Dialog/Modal.js.map +1 -1
  47. package/dist/esm/components/Dialog/SimpleDialog.js +14 -1
  48. package/dist/esm/components/Dialog/SimpleDialog.js.map +1 -1
  49. package/dist/esm/components/Icon/IconButton.js +1 -1
  50. package/dist/esm/components/Icon/IconButton.js.map +1 -1
  51. package/dist/esm/components/Icon/canonicalIconNames.js +1 -0
  52. package/dist/esm/components/Icon/canonicalIconNames.js.map +1 -1
  53. package/dist/esm/components/OverviewItem/OverviewItemDepiction.js +3 -6
  54. package/dist/esm/components/OverviewItem/OverviewItemDepiction.js.map +1 -1
  55. package/dist/esm/components/PropertyValuePair/PropertyName.js +3 -3
  56. package/dist/esm/components/PropertyValuePair/PropertyName.js.map +1 -1
  57. package/dist/esm/components/Separation/Spacing.js +28 -4
  58. package/dist/esm/components/Separation/Spacing.js.map +1 -1
  59. package/dist/esm/components/TextField/TextField.js +25 -5
  60. package/dist/esm/components/TextField/TextField.js.map +1 -1
  61. package/dist/esm/extensions/codemirror/CodeMirror.js +49 -6
  62. package/dist/esm/extensions/codemirror/CodeMirror.js.map +1 -1
  63. package/dist/esm/extensions/react-flow/handles/HandleDefault.js +45 -8
  64. package/dist/esm/extensions/react-flow/handles/HandleDefault.js.map +1 -1
  65. package/dist/esm/extensions/react-flow/handles/HandleTools.js +31 -0
  66. package/dist/esm/extensions/react-flow/handles/HandleTools.js.map +1 -0
  67. package/dist/esm/extensions/react-flow/index.js +2 -0
  68. package/dist/esm/extensions/react-flow/index.js.map +1 -1
  69. package/dist/esm/extensions/react-flow/nodes/NodeContent.js +32 -12
  70. package/dist/esm/extensions/react-flow/nodes/NodeContent.js.map +1 -1
  71. package/dist/types/cmem/react-flow/extensions/ReactFlowHotkeyContext.d.ts +8 -0
  72. package/dist/types/components/Application/ApplicationHeader.d.ts +1 -2
  73. package/dist/types/components/Dialog/Modal.d.ts +13 -6
  74. package/dist/types/components/Dialog/SimpleDialog.d.ts +12 -1
  75. package/dist/types/components/Icon/canonicalIconNames.d.ts +1 -1
  76. package/dist/types/components/PropertyValuePair/PropertyName.d.ts +7 -1
  77. package/dist/types/components/Separation/Spacing.d.ts +2 -2
  78. package/dist/types/components/TextField/TextField.d.ts +4 -2
  79. package/dist/types/extensions/codemirror/CodeMirror.d.ts +17 -3
  80. package/dist/types/extensions/react-flow/handles/HandleDefault.d.ts +2 -2
  81. package/dist/types/extensions/react-flow/handles/HandleTools.d.ts +6 -0
  82. package/dist/types/extensions/react-flow/index.d.ts +2 -0
  83. package/dist/types/extensions/react-flow/nodes/NodeContent.d.ts +21 -1
  84. package/package.json +14 -12
  85. package/scripts/compile-sass.ts +1 -1
  86. package/src/cmem/react-flow/ReactFlow/ReactFlow.tsx +10 -0
  87. package/src/cmem/react-flow/StickyNoteModal/StickyNoteModal.tsx +10 -12
  88. package/src/cmem/react-flow/extensions/ReactFlowHotkeyContext.ts +14 -0
  89. package/src/components/Application/ApplicationHeader.tsx +8 -13
  90. package/src/components/Application/_header.scss +17 -17
  91. package/src/components/Application/_toolbar.scss +22 -33
  92. package/src/components/AutoSuggestion/tests/AutoSuggestion.test.tsx +34 -21
  93. package/src/components/AutoSuggestion/tests/SingleLineCodeEditor.test.tsx +20 -9
  94. package/src/components/Dialog/Modal.tsx +62 -37
  95. package/src/components/Dialog/SimpleDialog.tsx +19 -1
  96. package/src/components/Dialog/dialog.scss +29 -17
  97. package/src/components/Icon/IconButton.tsx +1 -1
  98. package/src/components/Icon/canonicalIconNames.tsx +2 -0
  99. package/src/components/OverviewItem/OverviewItemDepiction.tsx +8 -16
  100. package/src/components/PropertyValuePair/PropertyName.tsx +15 -4
  101. package/src/components/Separation/Spacing.tsx +12 -8
  102. package/src/components/TextField/TextField.tsx +32 -6
  103. package/src/components/Tooltip/tooltip.scss +15 -1
  104. package/src/extensions/codemirror/CodeMirror.tsx +62 -8
  105. package/src/extensions/codemirror/_codemirror.scss +53 -8
  106. package/src/extensions/react-flow/edges/stories/EdgeDefault.stories.tsx +43 -44
  107. package/src/extensions/react-flow/handles/HandleDefault.tsx +40 -33
  108. package/src/extensions/react-flow/handles/HandleTools.tsx +22 -0
  109. package/src/extensions/react-flow/handles/_handles.scss +64 -44
  110. package/src/extensions/react-flow/handles/stories/HandleDefault.stories.tsx +33 -27
  111. package/src/extensions/react-flow/index.ts +2 -0
  112. package/src/extensions/react-flow/nodes/NodeContent.tsx +62 -2
  113. package/src/extensions/react-flow/nodes/_nodes.scss +170 -110
  114. package/src/extensions/react-flow/nodes/stories/NodeDefault.stories.tsx +32 -34
@@ -1,6 +1,5 @@
1
1
  import React from "react";
2
2
  import { HeaderProps as CarbonHeaderProps } from "carbon-components-react";
3
- export interface ApplicationHeaderProps extends CarbonHeaderProps {
4
- }
3
+ export declare type ApplicationHeaderProps = CarbonHeaderProps;
5
4
  export declare const ApplicationHeader: ({ children, className, ...otherCarbonHeaderProps }: ApplicationHeaderProps) => React.JSX.Element;
6
5
  export default ApplicationHeader;
@@ -1,5 +1,5 @@
1
- import React from 'react';
2
- import { OverlayProps, IOverlayState } from "@blueprintjs/core";
1
+ import React from "react";
2
+ import { IOverlayState, OverlayProps } from "@blueprintjs/core";
3
3
  export interface ModalProps extends OverlayProps, IOverlayState {
4
4
  children: React.ReactNode | React.ReactNode[];
5
5
  /**
@@ -9,19 +9,26 @@ export interface ModalProps extends OverlayProps, IOverlayState {
9
9
  /**
10
10
  * Size of the modal.
11
11
  */
12
- size?: "tiny" | "small" | "regular" | "large" | "fullscreen";
12
+ size?: "tiny" | "small" | "regular" | "large" | "xlarge" | "fullscreen";
13
13
  /**
14
14
  * Prevents that a backdrop area is displayed behind the modal elements.
15
15
  */
16
16
  preventBackdrop?: boolean;
17
- /** Optional props for the wrapper div element inside the modal overlay. */
17
+ /**
18
+ * Optional props for the wrapper div element inside the modal overlay.
19
+ */
18
20
  wrapperDivProps?: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>;
21
+ /**
22
+ * Make the modal focusable, e.g. when clicking somewhere on it.
23
+ * This is needed, e.g. when capturing key (down, up) events that should bubble to the modal's parent elements.
24
+ */
25
+ modalFocusable?: boolean;
19
26
  }
20
27
  /**
21
28
  * Displays contents on top of other elements, used to create dialogs.
22
- * For most situations the usage of `SimpleDialog` and `AlertDialog` should be sufficent.
29
+ * For most situations the usage of `SimpleDialog` and `AlertDialog` should be sufficient.
23
30
  * Otherwise this element can be used to create own modal elements and edge cases for modal dialogs.
24
31
  * Then it is recommended to use the `Card` element inside.
25
32
  */
26
- export declare const Modal: ({ children, className, overlayClassName, size, canOutsideClickClose, canEscapeKeyClose, preventBackdrop, wrapperDivProps, ...otherProps }: ModalProps) => React.JSX.Element;
33
+ export declare const Modal: ({ children, className, overlayClassName, size, canOutsideClickClose, canEscapeKeyClose, preventBackdrop, wrapperDivProps, modalFocusable, ...otherProps }: ModalProps) => React.JSX.Element;
27
34
  export default Modal;
@@ -1,4 +1,4 @@
1
- import React from "react";
1
+ import React, { BaseSyntheticEvent } from "react";
2
2
  import { IntentTypes } from "../../common/Intent";
3
3
  import { TestableComponent } from "../interfaces";
4
4
  import { ModalProps } from "./Modal";
@@ -44,4 +44,15 @@ export interface SimpleDialogProps extends ModalProps, TestableComponent {
44
44
  * Inherits all properties from `Modal`.
45
45
  */
46
46
  export declare const SimpleDialog: ({ children, canOutsideClickClose, canEscapeKeyClose, title, actions, notifications, hasBorder, preventSimpleClosing, enforceFocus, intent, headerOptions, showFullScreenToggler, startInFullScreenMode, size, ...otherProps }: SimpleDialogProps) => React.JSX.Element;
47
+ /** Events that should be prevented to bubble up from a modal that goes beyond the most simple version of a modal, e.g.
48
+ * allows to drag or supports hot keys etc. */
49
+ export declare const modalPreventEvents: {
50
+ onContextMenu: (event: BaseSyntheticEvent) => void;
51
+ onDrag: (event: BaseSyntheticEvent) => void;
52
+ onDragStart: (event: BaseSyntheticEvent) => void;
53
+ onDragEnd: (event: BaseSyntheticEvent) => void;
54
+ onMouseDown: (event: BaseSyntheticEvent) => void;
55
+ onMouseUp: (event: BaseSyntheticEvent) => void;
56
+ onClick: (event: BaseSyntheticEvent) => void;
57
+ };
47
58
  export default SimpleDialog;
@@ -1,7 +1,7 @@
1
1
  /// <reference types="react" />
2
2
  import { IconProps as CarbonIconProps } from "carbon-components-react";
3
3
  /** Valid icon names. */
4
- export declare type ValidIconName = "application-activities" | "application-dataintegration" | "application-explore" | "application-homepage" | "application-legacygui" | "application-mapping" | "application-queries" | "application-useraccount" | "application-vocabularies" | "application-warning" | "artefact-commit" | "artefact-customtask" | "artefact-dataset" | "artefact-dataset-csv" | "artefact-dataset-eccencadataplatform" | "artefact-dataset-excel" | "artefact-dataset-file" | "artefact-dataset-jdbc" | "artefact-dataset-json" | "artefact-dataset-multicsv" | "artefact-dataset-neo4j" | "artefact-dataset-sparkview" | "artefact-dataset-sparqlendpoint" | "artefact-dataset-sqlendpoint" | "artefact-dataset-xml" | "artefact-deprecated" | "artefact-embedded" | "artefact-errorlog" | "artefact-file" | "artefact-linking" | "artefact-project" | "artefact-rawdata" | "artefact-remote" | "artefact-report" | "artefact-task" | "artefact-transform" | "artefact-uncategorized" | "artefact-workflow" | "data-sourcepath" | "data-targetpath" | "item-add-artefact" | "item-clone" | "item-comment" | "item-copy" | "item-download" | "item-draggable" | "item-edit" | "item-evaluation" | "item-execution" | "item-info" | "item-launch" | "item-moremenu" | "item-question" | "item-reload" | "item-remove" | "item-reset" | "item-save" | "item-settings" | "item-shuffle" | "item-skip-forward" | "item-start" | "item-stop" | "item-upload" | "item-vertmenu" | "item-viewdetails" | "item-hidedetails" | "list-sort" | "list-sortasc" | "list-sortdesc" | "module-accesscontrol" | "module-annotation" | "module-dashboard" | "module-gdprsearch" | "module-integrations" | "module-linkedrules" | "module-reports" | "module-search" | "module-thesauri" | "module-timetracker" | "module-visualization" | "navigation-back" | "navigation-close" | "navigation-down" | "navigation-first" | "navigation-forth" | "navigation-jump" | "navigation-last" | "navigation-left" | "navigation-next" | "navigation-previous" | "navigation-right" | "navigation-up" | "operation-aggregation" | "operation-autolayout" | "operation-clear" | "operation-commit" | "operation-comparison" | "operation-erase" | "operation-filter" | "operation-filteredit" | "operation-filterremove" | "operation-fix" | "operation-link" | "operation-logout" | "operation-merge" | "operation-redo" | "operation-search" | "operation-sharelink" | "operation-transform" | "operation-translate" | "operation-undo" | "operation-unlink" | "state-checked" | "state-checkedsimple" | "state-confirmed" | "state-danger" | "state-declined" | "state-info" | "state-partlychecked" | "state-protected" | "state-success" | "state-unchecked" | "state-warning" | "toggler-caret" | "toggler-caretright" | "toggler-caretdown" | "toggler-maximize" | "toggler-minimize" | "toggler-moveleft" | "toggler-moveright" | "toggler-rowexpand" | "toggler-rowcollapse" | "toggler-showless" | "toggler-showmore" | "toggler-star-empty" | "toggler-star-filled" | "toggler-tree" | "form-template" | "undefined";
4
+ export declare type ValidIconName = "application-activities" | "application-dataintegration" | "application-explore" | "application-homepage" | "application-legacygui" | "application-mapping" | "application-queries" | "application-useraccount" | "application-vocabularies" | "application-warning" | "application-hotkeys" | "artefact-commit" | "artefact-customtask" | "artefact-dataset" | "artefact-dataset-csv" | "artefact-dataset-eccencadataplatform" | "artefact-dataset-excel" | "artefact-dataset-file" | "artefact-dataset-jdbc" | "artefact-dataset-json" | "artefact-dataset-multicsv" | "artefact-dataset-neo4j" | "artefact-dataset-sparkview" | "artefact-dataset-sparqlendpoint" | "artefact-dataset-sqlendpoint" | "artefact-dataset-xml" | "artefact-deprecated" | "artefact-embedded" | "artefact-errorlog" | "artefact-file" | "artefact-linking" | "artefact-project" | "artefact-rawdata" | "artefact-remote" | "artefact-report" | "artefact-task" | "artefact-transform" | "artefact-uncategorized" | "artefact-workflow" | "data-sourcepath" | "data-targetpath" | "item-add-artefact" | "item-clone" | "item-comment" | "item-copy" | "item-download" | "item-draggable" | "item-edit" | "item-evaluation" | "item-execution" | "item-info" | "item-launch" | "item-moremenu" | "item-question" | "item-reload" | "item-remove" | "item-reset" | "item-save" | "item-settings" | "item-shuffle" | "item-skip-forward" | "item-start" | "item-stop" | "item-upload" | "item-vertmenu" | "item-viewdetails" | "item-hidedetails" | "list-sort" | "list-sortasc" | "list-sortdesc" | "module-accesscontrol" | "module-annotation" | "module-dashboard" | "module-gdprsearch" | "module-integrations" | "module-linkedrules" | "module-reports" | "module-search" | "module-thesauri" | "module-timetracker" | "module-visualization" | "navigation-back" | "navigation-close" | "navigation-down" | "navigation-first" | "navigation-forth" | "navigation-jump" | "navigation-last" | "navigation-left" | "navigation-next" | "navigation-previous" | "navigation-right" | "navigation-up" | "operation-aggregation" | "operation-autolayout" | "operation-clear" | "operation-commit" | "operation-comparison" | "operation-erase" | "operation-filter" | "operation-filteredit" | "operation-filterremove" | "operation-fix" | "operation-link" | "operation-logout" | "operation-merge" | "operation-redo" | "operation-search" | "operation-sharelink" | "operation-transform" | "operation-translate" | "operation-undo" | "operation-unlink" | "state-checked" | "state-checkedsimple" | "state-confirmed" | "state-danger" | "state-declined" | "state-info" | "state-partlychecked" | "state-protected" | "state-success" | "state-unchecked" | "state-warning" | "toggler-caret" | "toggler-caretright" | "toggler-caretdown" | "toggler-maximize" | "toggler-minimize" | "toggler-moveleft" | "toggler-moveright" | "toggler-rowexpand" | "toggler-rowcollapse" | "toggler-showless" | "toggler-showmore" | "toggler-star-empty" | "toggler-star-filled" | "toggler-tree" | "form-template" | "undefined";
5
5
  export declare type CarbonIconType = React.ComponentType<CarbonIconProps>;
6
6
  /**
7
7
  * @deprecated
@@ -1,9 +1,15 @@
1
1
  import React from "react";
2
+ import { LabelProps } from "../Label/Label";
2
3
  export interface PropertyNameProps extends React.HTMLAttributes<HTMLElement> {
3
4
  /**
4
5
  * Increase or decrease the width used for the property name.
5
6
  */
6
7
  size?: "small" | "medium" | "large";
8
+ /**
9
+ * Additional label properties, e.g. `tooltip`.
10
+ * It is only used if the `PropertyName` has simple text input.
11
+ */
12
+ labelProps?: LabelProps;
7
13
  }
8
- export declare const PropertyName: ({ className, size, children, ...otherProps }: PropertyNameProps) => React.JSX.Element;
14
+ export declare const PropertyName: ({ className, size, children, labelProps, ...otherDtProps }: PropertyNameProps) => React.JSX.Element;
9
15
  export default PropertyName;
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- export interface SpacingProps {
2
+ export interface SpacingProps extends React.HTMLAttributes<HTMLDivElement> {
3
3
  /**
4
4
  * Set the amount of white space that separates two elements.
5
5
  */
@@ -19,5 +19,5 @@ export interface SpacingProps {
19
19
  * Adds horizontal or vertical space between neighbouring elements.
20
20
  * It also can add a visual ruler inside.
21
21
  */
22
- export declare const Spacing: ({ size, hasDivider, vertical }: SpacingProps) => React.JSX.Element;
22
+ export declare const Spacing: ({ size, hasDivider, vertical, ...otherDivProps }: SpacingProps) => React.JSX.Element;
23
23
  export default Spacing;
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import { MaybeElement, HTMLInputProps, InputGroupProps2 } from "@blueprintjs/core";
2
+ import { HTMLInputProps, InputGroupProps2, MaybeElement } from "@blueprintjs/core";
3
3
  import { IntentTypes } from "../../common/Intent";
4
4
  import { ValidIconName } from "../Icon/canonicalIconNames";
5
5
  import { InvisibleCharacterWarningProps } from "./useTextValidation";
@@ -40,9 +40,11 @@ export interface TextFieldProps extends Partial<Omit<InputGroupProps2, "intent"
40
40
  * If set, allows to be informed of invisible, hard to spot characters in the string value.
41
41
  */
42
42
  invisibleCharacterWarning?: InvisibleCharacterWarningProps;
43
+ /** If true pressing the Escape key will blur/de-focus the input field. Default: false */
44
+ escapeToBlur?: boolean;
43
45
  }
44
46
  /**
45
47
  * Text input field.
46
48
  */
47
- export declare const TextField: ({ className, hasStatePrimary, hasStateSuccess, hasStateWarning, hasStateDanger, fullWidth, leftIcon, invisibleCharacterWarning, ...otherProps }: TextFieldProps) => React.JSX.Element;
49
+ export declare const TextField: ({ className, hasStatePrimary, hasStateSuccess, hasStateWarning, hasStateDanger, fullWidth, leftIcon, invisibleCharacterWarning, escapeToBlur, ...otherProps }: TextFieldProps) => React.JSX.Element;
48
50
  export default TextField;
@@ -1,10 +1,16 @@
1
- import React from "react";
1
+ import React, { TextareaHTMLAttributes } from "react";
2
2
  import "codemirror/mode/markdown/markdown.js";
3
3
  import "codemirror/mode/python/python.js";
4
4
  import "codemirror/mode/sparql/sparql.js";
5
5
  import "codemirror/mode/sql/sql.js";
6
6
  import "codemirror/mode/turtle/turtle.js";
7
7
  import "codemirror/mode/xml/xml.js";
8
+ import "codemirror/mode/jinja2/jinja2.js";
9
+ import "codemirror/mode/yaml/yaml.js";
10
+ import "codemirror/mode/javascript/javascript.js";
11
+ export declare const supportedCodeEditorModes: readonly ["markdown", "python", "sparql", "sql", "turtle", "xml", "jinja2", "yaml", "json", "undefined"];
12
+ declare type SupportedModesTuple = typeof supportedCodeEditorModes;
13
+ export declare type SupportedCodeEditorModes = SupportedModesTuple[number];
8
14
  export interface CodeEditorProps {
9
15
  /**
10
16
  * `name` attribute of connected textarea element.
@@ -23,7 +29,7 @@ export interface CodeEditorProps {
23
29
  /**
24
30
  * Syntax mode of the code editor.
25
31
  */
26
- mode?: "markdown" | "python" | "sparql" | "sql" | "turtle" | "xml" | "undefined";
32
+ mode?: SupportedCodeEditorModes;
27
33
  /**
28
34
  * Default value used first when the editor is instanciated.
29
35
  */
@@ -32,8 +38,16 @@ export interface CodeEditorProps {
32
38
  * If enabled the code editor won't show numbers before each line.
33
39
  */
34
40
  preventLineNumbers?: boolean;
41
+ /** Set read-only mode. Default: false */
42
+ readOnly?: boolean;
43
+ /** Optional height of the component */
44
+ height?: number | string;
45
+ /** Long lines are wrapped and displayed on multiple lines */
46
+ wrapLines?: boolean;
47
+ outerDivAttributes?: Partial<TextareaHTMLAttributes<HTMLDivElement>>;
35
48
  }
36
49
  /**
37
50
  * Includes a code editor, currently we use CodeMirror library as base.
38
51
  */
39
- export declare const CodeEditor: ({ onChange, name, id, mode, preventLineNumbers, defaultValue, }: CodeEditorProps) => React.JSX.Element;
52
+ export declare const CodeEditor: ({ onChange, name, id, mode, preventLineNumbers, defaultValue, readOnly, height, wrapLines, outerDivAttributes, }: CodeEditorProps) => React.JSX.Element;
53
+ export {};
@@ -1,8 +1,8 @@
1
- import React from 'react';
1
+ import React from "react";
2
2
  import { HandleProps as ReactFlowHandleLegacyProps } from "react-flow-renderer";
3
3
  import { HandleProps as ReactFlowHandleNextProps } from "react-flow-renderer-lts";
4
- import { HandleContentProps } from "./HandleContent";
5
4
  import { ReacFlowVersionSupportProps } from "../versionsupport";
5
+ import { HandleContentProps } from "./HandleContent";
6
6
  interface HandleExtensionProps extends ReacFlowVersionSupportProps {
7
7
  /**
8
8
  * Extended handle data.
@@ -0,0 +1,6 @@
1
+ import React from "react";
2
+ import { ContextOverlayProps } from "./../../../components/ContextOverlay/ContextOverlay";
3
+ export interface HandleToolsProps extends Omit<ContextOverlayProps, "children" | "content" | "popoverClassName"> {
4
+ children: string | JSX.Element | JSX.Element[];
5
+ }
6
+ export declare const HandleTools: ({ children, ...otherContextOverlayProps }: HandleToolsProps) => React.JSX.Element;
@@ -5,6 +5,8 @@ export * from "./nodes/NodeContentExtension";
5
5
  export * from "./nodes/NodeTools";
6
6
  export * from "./nodes/nodeUtils";
7
7
  export * from "./handles/HandleDefault";
8
+ export * from "./handles/HandleContent";
9
+ export * from "./handles/HandleTools";
8
10
  export * from "./edges/EdgeDefault";
9
11
  export * from "./edges/EdgeStep";
10
12
  export * from "./edges/EdgeTools";
@@ -21,6 +21,22 @@ export declare type NodeDimensions = {
21
21
  width: number;
22
22
  height: number;
23
23
  };
24
+ declare type IntroductionTime = {
25
+ /**
26
+ * The delay time in ms before the introduction animation is displayed.
27
+ * Until the animation starts the node is invisible.
28
+ */
29
+ delay?: number;
30
+ /**
31
+ * The time in ms the introdcution animation runs.
32
+ */
33
+ run: number;
34
+ /**
35
+ * Animation used for the visual introduction.
36
+ * `outline` is used as default animation.
37
+ */
38
+ animation?: "landing" | "outline";
39
+ };
24
40
  interface NodeContentData<CONTENT_PROPS = any> {
25
41
  /**
26
42
  * Name of icon that should be displayed before the node label.
@@ -142,6 +158,10 @@ export interface NodeContentProps<NODE_DATA, NODE_CONTENT_PROPS = any> extends N
142
158
  * The node is displayed with some animated shadow for highlighting purposes.
143
159
  */
144
160
  animated?: boolean;
161
+ /**
162
+ * Time in ms used for a short animation of the node to visualize it was added or updated.
163
+ */
164
+ introductionTime?: number | IntroductionTime;
145
165
  /** Additional data stored in the node. */
146
166
  businessData?: NODE_DATA;
147
167
  /**
@@ -182,7 +202,7 @@ export interface NodeContentProps<NODE_DATA, NODE_CONTENT_PROPS = any> extends N
182
202
  * The `NodeContent` element manages the main view of how a node is displaying which content.
183
203
  * This element cannot be used directly, all properties must be routed through the `data` property of an `elements` property item inside the `ReactFlow` container.
184
204
  */
185
- export declare function NodeContent<CONTENT_PROPS = any>({ flowVersion, iconName, depiction, leftElement, typeLabel, label, labelSubline, enlargeHeader, fullWidth, showExecutionButtons, executionButtons, menuButtons, content, contentExtension, footerContent, size, minimalShape, highlightedState, intent, border, highlightColor, adaptHeightForHandleMinCount, adaptSizeIncrement, getMinimalTooltipData, style, showUnconnectableHandles, animated, onNodeResize, nodeDimensions, targetPosition, sourcePosition, isConnectable, selected, letPassWheelEvents, businessData, ...otherDomProps }: NodeContentProps<any>): React.JSX.Element;
205
+ export declare function NodeContent<CONTENT_PROPS = any>({ flowVersion, iconName, depiction, leftElement, typeLabel, label, labelSubline, enlargeHeader, fullWidth, showExecutionButtons, executionButtons, menuButtons, content, contentExtension, footerContent, size, minimalShape, highlightedState, intent, border, highlightColor, adaptHeightForHandleMinCount, adaptSizeIncrement, getMinimalTooltipData, style, showUnconnectableHandles, animated, introductionTime, onNodeResize, nodeDimensions, targetPosition, sourcePosition, isConnectable, selected, letPassWheelEvents, businessData, ...otherDomProps }: NodeContentProps<any>): React.JSX.Element;
186
206
  export declare const nodeContentUtils: {
187
207
  evaluateHighlightColors: (baseCustomProperty: string, highlightColor?: NodeHighlightColor | NodeHighlightColor[] | undefined) => {
188
208
  highlightClassNameSuffix: string[];
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@eccenca/gui-elements",
3
3
  "description": "GUI elements based on other libraries, usable in React application, written in Typescript.",
4
- "version": "23.2.0",
4
+ "version": "23.3.0-rc.0",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://github.com/eccenca/gui-elements",
7
7
  "bugs": "https://github.com/eccenca/gui-elements/issues",
@@ -67,7 +67,7 @@
67
67
  "@blueprintjs/select": "^4.9.14",
68
68
  "@carbon/icons": "^11.19.0",
69
69
  "@carbon/icons-react": "^11.19.0",
70
- "@carbon/styles": "^1.28.0",
70
+ "@carbon/styles": "1.32.0",
71
71
  "@mavrin/remark-typograf": "^2.2.0",
72
72
  "carbon-components-react": "^8.28.0",
73
73
  "codemirror": "^5.65.13",
@@ -107,32 +107,32 @@
107
107
  "@storybook/preset-scss": "^1.0.3",
108
108
  "@storybook/react": "^7.0.9",
109
109
  "@storybook/react-webpack5": "^7.0.9",
110
- "@testing-library/jest-dom": "^5.16.1",
110
+ "@testing-library/jest-dom": "^6.1.3",
111
111
  "@testing-library/react": "^12.1.2",
112
112
  "@types/carbon-components-react": "^7.55.2",
113
113
  "@types/codemirror": "^5.60.5",
114
114
  "@types/color": "^3.0.2",
115
- "@types/jest": "^24.9.1",
115
+ "@types/jest": "^29.5.4",
116
116
  "@types/lodash": "^4.14.194",
117
117
  "@typescript-eslint/eslint-plugin": "^5.59.11",
118
118
  "@typescript-eslint/parser": "^5.59.11",
119
- "babel-jest": "^27.5.1",
119
+ "babel-jest": "^29.7.0",
120
120
  "chromatic": "^6.17.4",
121
121
  "eslint": "^8.42.0",
122
122
  "eslint-plugin-react": "^7.32.2",
123
123
  "eslint-plugin-simple-import-sort": "^10.0.0",
124
124
  "husky": "4",
125
125
  "identity-obj-proxy": "^3.0.0",
126
- "jest": "^26.6.3",
127
- "jest-environment-jsdom-fourteen": "1.0.1",
128
- "jest-pnp-resolver": "^1.2.1",
126
+ "jest": "^29.7.0",
127
+ "jest-environment-jsdom": "^29.7.0",
128
+ "jest-pnp-resolver": "^1.2.3",
129
129
  "lint-staged": "^13.2.2",
130
130
  "node-sass-package-importer": "^5.3.2",
131
131
  "prettier": "^2.8.8",
132
132
  "react-app-polyfill": "^3.0.0",
133
133
  "react-lorem-ipsum": "^1.4.9",
134
134
  "regenerator-runtime": "^0.13.9",
135
- "rimraf": "^5.0.0",
135
+ "rimraf": "^5.0.1",
136
136
  "sass": "^1.62.1",
137
137
  "sass-loader": "^13.2.2",
138
138
  "storybook": "^7.0.9",
@@ -140,19 +140,21 @@
140
140
  "stylelint-config-recess-order": "^4.2.0",
141
141
  "stylelint-config-standard-scss": "^9.0.0",
142
142
  "ts-node": "^10.9.1",
143
- "tsc-esm-fix": "^2.20.13",
143
+ "tsc-esm-fix": "^2.20.15",
144
144
  "typescript": "4.4.4",
145
145
  "url-loader": "^4.1.1",
146
146
  "yargs": "^17.7.2"
147
147
  },
148
148
  "peerDependencies": {
149
+ "@carbon/styles": "<1.33.0",
149
150
  "@types/carbon-components-react": ">=7",
150
151
  "react": ">=16",
151
152
  "react-dom": ">=16"
152
153
  },
153
154
  "resolutions": {
154
155
  "**/@types/react": "^17.0.59",
155
- "**/postcss": "^8.4.23"
156
+ "**/postcss": "^8.4.23",
157
+ "**/parse5": "^6.0.1"
156
158
  },
157
159
  "husky": {
158
160
  "hooks": {
@@ -193,7 +195,7 @@
193
195
  "testMatch": [
194
196
  "<rootDir>/src/**/*(*.)@(spec|test).{js,jsx,ts,tsx}"
195
197
  ],
196
- "testEnvironment": "jest-environment-jsdom-fourteen",
198
+ "testEnvironment": "jest-environment-jsdom",
197
199
  "transform": {
198
200
  "^.+\\.(js|jsx|ts|tsx)$": "babel-jest"
199
201
  },
@@ -3,7 +3,7 @@ import tildeImporter from "node-sass-package-importer";
3
3
  import yargs from "yargs";
4
4
  import sassRenderSyncConfig from "./sassConfig";
5
5
 
6
- const args = yargs(process.argv.slice(2)).argv;
6
+ const args = yargs(process.argv.slice(2)).argv as any;
7
7
 
8
8
  const styles = sass.renderSync({
9
9
  importer: tildeImporter(),
@@ -6,6 +6,7 @@ import * as graphConfig from "./../configuration/graph";
6
6
  import * as workflowConfig from "./../configuration/workflow";
7
7
  import * as linkingConfig from "./../configuration/linking";
8
8
  import {useReactFlowScrollOnDrag} from "../extensions/scrollOnDragHook";
9
+ import {ReactFlowHotkeyContext} from "../extensions/ReactFlowHotkeyContext";
9
10
 
10
11
  export interface ReactFlowProps extends ReactFlowOriginalProps {
11
12
  /**
@@ -42,11 +43,16 @@ export const ReactFlow = React.forwardRef<HTMLDivElement, ReactFlowProps>((
42
43
  },
43
44
  ref) => {
44
45
 
46
+ /** If the hot keys should be disabled. By default, they are always disabled. */
47
+ const {hotKeysDisabled} = React.useContext(ReactFlowHotkeyContext)
48
+
45
49
  const scrollOnDragFunctions = useReactFlowScrollOnDrag({
46
50
  reactFlowProps: originalProps,
47
51
  scrollOnDrag
48
52
  })
49
53
 
54
+ const {selectionKeyCode, multiSelectionKeyCode, deleteKeyCode, zoomActivationKeyCode} = originalProps
55
+
50
56
  const configReactFlow = {
51
57
  unspecified: unspecifiedConfig,
52
58
  graph: graphConfig,
@@ -61,6 +67,10 @@ export const ReactFlow = React.forwardRef<HTMLDivElement, ReactFlowProps>((
61
67
  edgeTypes={ configReactFlow[configuration].edgeTypes }
62
68
  {...originalProps}
63
69
  {...scrollOnDragFunctions}
70
+ selectionKeyCode={hotKeysDisabled ? null : selectionKeyCode as any}
71
+ deleteKeyCode={hotKeysDisabled ? null : deleteKeyCode as any}
72
+ multiSelectionKeyCode={hotKeysDisabled ? null : multiSelectionKeyCode as any}
73
+ zoomActivationKeyCode={hotKeysDisabled ? null : zoomActivationKeyCode as any}
64
74
  >
65
75
  { children }
66
76
  <ReactFlowMarkers />
@@ -2,6 +2,7 @@ import React from "react";
2
2
  import { Tag, TagList, SimpleDialog, Icon, Button, FieldItem } from "./../../../index";
3
3
  import getColorConfiguration from "../../../common/utils/getColorConfiguration";
4
4
  import { CodeEditor } from "../../../extensions";
5
+ import { ReactFlowHotkeyContext } from "../extensions/ReactFlowHotkeyContext";
5
6
 
6
7
  export type StickyNoteModalTranslationKeys = "modalTitle" | "noteLabel" | "colorLabel" | "saveButton" | "cancelButton";
7
8
 
@@ -38,6 +39,15 @@ export const StickyNoteModal: React.FC<StickyNoteModalProps> = React.memo(({
38
39
  const noteColors: [string, string][] = Object.entries(getColorConfiguration("stickynotes")).map(
39
40
  ([key, value]) => [key, value as string]
40
41
  );
42
+ const {disableHotKeys} = React.useContext(ReactFlowHotkeyContext)
43
+
44
+ React.useEffect(() => {
45
+ disableHotKeys(true)
46
+
47
+ return () => {
48
+ disableHotKeys(false)
49
+ }
50
+ }, [])
41
51
 
42
52
  React.useEffect(() => {
43
53
  if (!color && noteColors[0][1]) {
@@ -45,17 +55,6 @@ export const StickyNoteModal: React.FC<StickyNoteModalProps> = React.memo(({
45
55
  }
46
56
  }, [color, noteColors]);
47
57
 
48
- const wrapperDivProps: { [key: string]: (event: any) => any } = {
49
- // Prevent react-flow from getting these events
50
- onContextMenu: (event) => event.stopPropagation(),
51
- onDrag: (event) => event.stopPropagation(),
52
- onDragStart: (event) => event.stopPropagation(),
53
- onDragEnd: (event) => event.stopPropagation(),
54
- onMouseDown: (event) => event.stopPropagation(),
55
- onMouseUp: (event) => event.stopPropagation(),
56
- onClick: (event) => event.stopPropagation(),
57
- };
58
-
59
58
  const predefinedColorsMenu = (
60
59
  <TagList>
61
60
  {noteColors &&
@@ -88,7 +87,6 @@ export const StickyNoteModal: React.FC<StickyNoteModalProps> = React.memo(({
88
87
  hasBorder
89
88
  isOpen
90
89
  onClose={onClose}
91
- wrapperDivProps={wrapperDivProps}
92
90
  actions={[
93
91
  <Button
94
92
  key="submit"
@@ -0,0 +1,14 @@
1
+ import React from "react";
2
+
3
+ export interface ReactFlowHotkeyContextProps {
4
+ /** Allows to disable hot keys. */
5
+ disableHotKeys: (enable: boolean) => any
6
+
7
+ /** If the hot keys are currently disabled. */
8
+ hotKeysDisabled: boolean
9
+ }
10
+
11
+ export const ReactFlowHotkeyContext = React.createContext<ReactFlowHotkeyContextProps>({
12
+ disableHotKeys: () => {},
13
+ hotKeysDisabled: false
14
+ })
@@ -1,25 +1,20 @@
1
1
  import React from "react";
2
- import {
3
- Header as CarbonHeader,
4
- HeaderProps as CarbonHeaderProps,
5
- } from "carbon-components-react";
2
+ import { Header as CarbonHeader, HeaderProps as CarbonHeaderProps } from "carbon-components-react";
3
+
6
4
  import { CLASSPREFIX as eccgui } from "../../configuration/constants";
7
5
 
8
- export interface ApplicationHeaderProps extends CarbonHeaderProps {};
6
+ export type ApplicationHeaderProps = CarbonHeaderProps;
9
7
 
10
8
  export const ApplicationHeader = ({
11
9
  children = "",
12
- className,
10
+ className = "",
13
11
  ...otherCarbonHeaderProps
14
12
  }: ApplicationHeaderProps) => {
15
13
  return (
16
- <CarbonHeader
17
- className={`${eccgui}-application__header ` + className}
18
- {...otherCarbonHeaderProps}
19
- >
20
- { children }
14
+ <CarbonHeader className={`${eccgui}-application__header ${className}`} {...otherCarbonHeaderProps}>
15
+ {children}
21
16
  </CarbonHeader>
22
- )
23
- }
17
+ );
18
+ };
24
19
 
25
20
  export default ApplicationHeader;
@@ -8,25 +8,25 @@
8
8
  @use "sass:color";
9
9
 
10
10
  /// Header bar background
11
- $shell-header-bg-01: $eccgui-color-applicationheader-background !default;
11
+ $shell-header-bg-01: var(
12
+ --#{$eccgui}-appheader-color-background,
13
+ #{$eccgui-color-applicationheader-background}
14
+ ) !default;
12
15
 
13
16
  /// Header menu trigger hover, Header nav link hover
14
- $shell-header-bg-02: color.adjust($eccgui-color-applicationheader-background, $lightness: -5%) !default;
17
+ $shell-header-bg-02: color-mix(in srgb, $shell-header-bg-01, black 5%) !default;
15
18
 
16
19
  /// Header action active background
17
- $shell-header-bg-03: color.adjust($eccgui-color-applicationheader-background, $lightness: -10%) !default;
20
+ $shell-header-bg-03: color-mix(in srgb, $shell-header-bg-01, black 10%) !default;
18
21
 
19
22
  /// Header submenu link hover
20
- $shell-header-bg-04: color.adjust(
21
- $eccgui-color-applicationheader-background,
22
- $lightness: -5%
23
- ) !default; // TODO needs color var gray-90-hover
23
+ $shell-header-bg-04: $shell-header-bg-02 !default;
24
24
 
25
25
  /// Header nav link active and focus background
26
- $shell-header-bg-05: color.adjust($eccgui-color-applicationheader-background, $lightness: -5%) !default;
26
+ $shell-header-bg-05: $shell-header-bg-02 !default;
27
27
 
28
28
  /// Header nav link submenu
29
- $shell-header-bg-06: color.adjust($eccgui-color-applicationheader-background, $lightness: -10%) !default;
29
+ $shell-header-bg-06: $shell-header-bg-03 !default;
30
30
 
31
31
  /// Header border bottom
32
32
  $shell-header-border-01: transparent !default;
@@ -128,42 +128,42 @@ span.#{$prefix}--header__name {
128
128
  // $shell-header-bg-01
129
129
  .#{$prefix}--header,
130
130
  .#{$prefix}--skip-to-content:focus {
131
- background-color: $eccgui-color-applicationheader-background;
131
+ background-color: $shell-header-bg-01;
132
132
  }
133
133
 
134
134
  // $shell-header-bg-02
135
135
  a.#{$prefix}--header__menu-item:hover {
136
- background-color: color.adjust($eccgui-color-applicationheader-background, $lightness: -5%);
136
+ background-color: $shell-header-bg-02;
137
137
  }
138
138
  .#{$prefix}--header__menu-trigger:hover {
139
- fill: color.adjust($eccgui-color-applicationheader-background, $lightness: -5%);
139
+ fill: $shell-header-bg-02;
140
140
  }
141
141
 
142
142
  // $shell-header-bg-03
143
143
  .#{$prefix}--header__action:active,
144
144
  .#{$prefix}--header__menu-title[aria-expanded="true"] + .#{$prefix}--header__menu .#{$prefix}--header__menu-item:active,
145
145
  a.#{$prefix}--header__menu-item:active {
146
- background-color: color.adjust($eccgui-color-applicationheader-background, $lightness: -10%);
146
+ background-color: $shell-header-bg-03;
147
147
  }
148
148
 
149
149
  // $shell-header-bg-04
150
150
  .#{$prefix}--header__action:hover,
151
151
  .#{$prefix}--header__menu-title[aria-expanded="true"] + .#{$prefix}--header__menu .#{$prefix}--header__menu-item:hover {
152
- background-color: color.adjust($eccgui-color-applicationheader-background, $lightness: -10%);
152
+ background-color: $shell-header-bg-04;
153
153
  }
154
154
 
155
155
  // $shell-header-bg-05
156
156
  .#{$prefix}--header__action--active {
157
- background-color: color.adjust($eccgui-color-applicationheader-background, $lightness: -5%);
157
+ background-color: $shell-header-bg-05;
158
158
  border-right-color: transparent;
159
- border-bottom-color: color.adjust($eccgui-color-applicationheader-background, $lightness: -5%);
159
+ border-bottom-color: $shell-header-bg-05;
160
160
  border-left-color: transparent;
161
161
  }
162
162
 
163
163
  // $shell-header-bg-06
164
164
  .#{$prefix}--header__menu-title[aria-expanded="true"],
165
165
  .#{$prefix}--header__menu .#{$prefix}--header__menu-item:hover {
166
- background-color: color.adjust($eccgui-color-applicationheader-background, $lightness: -10%);
166
+ background-color: $shell-header-bg-06;
167
167
  }
168
168
 
169
169
  // $shell-header-border-01