@eccenca/gui-elements 24.0.0-rc.3 → 24.0.0-rc.5

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 (74) hide show
  1. package/CHANGELOG.md +45 -26
  2. package/dist/cjs/cmem/markdown/Markdown.js +7 -5
  3. package/dist/cjs/cmem/markdown/Markdown.js.map +1 -1
  4. package/dist/cjs/components/AutoSuggestion/AutoSuggestion.js +14 -10
  5. package/dist/cjs/components/AutoSuggestion/AutoSuggestion.js.map +1 -1
  6. package/dist/cjs/components/Icon/canonicalIconNames.js +2 -1
  7. package/dist/cjs/components/Icon/canonicalIconNames.js.map +1 -1
  8. package/dist/cjs/components/MultiSelect/MultiSelect.js +27 -1
  9. package/dist/cjs/components/MultiSelect/MultiSelect.js.map +1 -1
  10. package/dist/cjs/components/Typography/HtmlContentBlock.js.map +1 -1
  11. package/dist/cjs/extensions/codemirror/CodeMirror.js +4 -3
  12. package/dist/cjs/extensions/codemirror/CodeMirror.js.map +1 -1
  13. package/dist/cjs/extensions/react-flow/handles/HandleContent.js +1 -1
  14. package/dist/cjs/extensions/react-flow/handles/HandleContent.js.map +1 -1
  15. package/dist/cjs/extensions/react-flow/handles/HandleDefault.js +18 -20
  16. package/dist/cjs/extensions/react-flow/handles/HandleDefault.js.map +1 -1
  17. package/dist/cjs/extensions/react-flow/handles/HandleTools.js +4 -3
  18. package/dist/cjs/extensions/react-flow/handles/HandleTools.js.map +1 -1
  19. package/dist/esm/cmem/markdown/Markdown.js +7 -5
  20. package/dist/esm/cmem/markdown/Markdown.js.map +1 -1
  21. package/dist/esm/components/AutoSuggestion/AutoSuggestion.js +14 -10
  22. package/dist/esm/components/AutoSuggestion/AutoSuggestion.js.map +1 -1
  23. package/dist/esm/components/Icon/canonicalIconNames.js +2 -1
  24. package/dist/esm/components/Icon/canonicalIconNames.js.map +1 -1
  25. package/dist/esm/components/MultiSelect/MultiSelect.js +29 -3
  26. package/dist/esm/components/MultiSelect/MultiSelect.js.map +1 -1
  27. package/dist/esm/components/Typography/HtmlContentBlock.js.map +1 -1
  28. package/dist/esm/extensions/codemirror/CodeMirror.js +4 -3
  29. package/dist/esm/extensions/codemirror/CodeMirror.js.map +1 -1
  30. package/dist/esm/extensions/react-flow/handles/HandleContent.js +1 -1
  31. package/dist/esm/extensions/react-flow/handles/HandleContent.js.map +1 -1
  32. package/dist/esm/extensions/react-flow/handles/HandleDefault.js +18 -20
  33. package/dist/esm/extensions/react-flow/handles/HandleDefault.js.map +1 -1
  34. package/dist/esm/extensions/react-flow/handles/HandleTools.js +4 -3
  35. package/dist/esm/extensions/react-flow/handles/HandleTools.js.map +1 -1
  36. package/dist/types/cmem/markdown/Markdown.d.ts +8 -3
  37. package/dist/types/components/Icon/canonicalIconNames.d.ts +2 -1
  38. package/dist/types/components/MultiSelect/MultiSelect.d.ts +7 -1
  39. package/dist/types/components/Tooltip/Tooltip.d.ts +1 -1
  40. package/dist/types/components/Typography/HtmlContentBlock.d.ts +16 -4
  41. package/dist/types/extensions/codemirror/CodeMirror.d.ts +2 -2
  42. package/package.json +28 -26
  43. package/src/cmem/markdown/Markdown.stories.tsx +6 -0
  44. package/src/cmem/markdown/Markdown.tsx +21 -7
  45. package/src/components/Application/_config.scss +1 -1
  46. package/src/components/Application/stories/Application.stories.tsx +11 -1
  47. package/src/components/AutoSuggestion/AutoSuggestion.scss +21 -8
  48. package/src/components/AutoSuggestion/AutoSuggestion.tsx +34 -24
  49. package/src/components/Breadcrumb/breadcrumb.scss +8 -1
  50. package/src/components/Depiction/stories/Depiction.stories.tsx +18 -1
  51. package/src/components/Icon/canonicalIconNames.tsx +2 -1
  52. package/src/components/MultiSelect/MultiSelect.tsx +37 -0
  53. package/src/components/MultiSuggestField/MultiSuggestField.stories.tsx +22 -19
  54. package/src/components/MultiSuggestField/_multisuggestfield.scss +8 -0
  55. package/src/components/MultiSuggestField/tests/MultiSuggestField.test.tsx +103 -9
  56. package/src/components/OverviewItem/overviewitem.scss +18 -7
  57. package/src/components/OverviewItem/stories/OverviewItem.stories.tsx +1 -1
  58. package/src/components/OverviewItem/stories/OverviewItemDepiction.stories.tsx +25 -7
  59. package/src/components/TextField/textfield.scss +1 -2
  60. package/src/components/Tooltip/Tooltip.tsx +1 -1
  61. package/src/components/Typography/HtmlContentBlock.tsx +16 -4
  62. package/src/components/Typography/stories/HtmlContentBlock.stories.tsx +50 -0
  63. package/src/components/Typography/stories/WhiteSpaceContainer.stories.tsx +15 -30
  64. package/src/components/Typography/typography.scss +10 -0
  65. package/src/components/index.scss +1 -1
  66. package/src/extensions/_index.scss +1 -6
  67. package/src/extensions/codemirror/CodeMirror.tsx +10 -7
  68. package/src/extensions/codemirror/_codemirror.scss +1 -1
  69. package/src/extensions/react-flow/handles/HandleContent.tsx +1 -1
  70. package/src/extensions/react-flow/handles/HandleDefault.tsx +21 -33
  71. package/src/extensions/react-flow/handles/HandleTools.tsx +4 -3
  72. package/src/extensions/react-flow/handles/_handles.scss +2 -1
  73. package/src/extensions/react-flow/handles/stories/HandleDefault.stories.tsx +12 -9
  74. package/src/index.scss +0 -1
@@ -39,6 +39,7 @@ var __read = (this && this.__read) || function (o, n) {
39
39
  import React, { memo } from "react";
40
40
  import { Handle as HandleLegacy } from "react-flow-renderer";
41
41
  import { Handle as HandleNext } from "react-flow-renderer-lts";
42
+ import { Classes as BlueprintClasses } from "@blueprintjs/core";
42
43
  import { intentClassName } from "../../../common/Intent/index.js";
43
44
  import { CLASSPREFIX as eccgui } from "../../../configuration/constants.js";
44
45
  import { useReactFlowVersion } from "../versionsupport.js";
@@ -49,22 +50,9 @@ export var HandleDefault = memo(function (_a) {
49
50
  var flowVersionCheck = flowVersion || evaluateFlowVersion;
50
51
  var handleDefaultRef = React.useRef();
51
52
  var _b = __read(React.useState(false), 2), extendedTooltipDisplayed = _b[0], setExtendedTooltipDisplayed = _b[1];
52
- var _c = __read(React.useState(false), 2), handleToolsDisplayed = _c[0], setHandleToolsDisplayed = _c[1];
53
- var routeClickToTools = React.useCallback(function (e) {
54
- var toolsTarget = handleDefaultRef.current.getElementsByClassName("".concat(eccgui, "-graphviz__handletools-target"));
55
- if (toolsTarget.length > 0 && e.target === handleDefaultRef.current) {
56
- setHandleToolsDisplayed(true);
57
- setExtendedTooltipDisplayed(false);
58
- }
59
- }, [handleDefaultRef]);
60
- React.useEffect(function () {
61
- var toolsTarget = handleDefaultRef.current.getElementsByClassName("".concat(eccgui, "-graphviz__handletools-target"));
62
- if (toolsTarget && toolsTarget[0] && handleToolsDisplayed) {
63
- toolsTarget[0].click();
64
- }
65
- }, [handleToolsDisplayed]);
53
+ var toolsTarget;
66
54
  React.useEffect(function () {
67
- var toolsTarget = handleDefaultRef.current.getElementsByClassName("".concat(eccgui, "-graphviz__handletools-target"));
55
+ toolsTarget = handleDefaultRef.current.getElementsByClassName("".concat(eccgui, "-graphviz__handletools-target"));
68
56
  if (toolsTarget && toolsTarget[0]) {
69
57
  // Polyfill for FF that does not support the `:has()` pseudo selector until at least version 119 or 120
70
58
  // need to be re-evaluated then
@@ -87,23 +75,33 @@ export var HandleDefault = memo(function (_a) {
87
75
  },
88
76
  intent: intent,
89
77
  className: "".concat(eccgui, "-graphviz__handle__tooltip-target"),
90
- isOpen: extendedTooltipDisplayed && !handleToolsDisplayed,
78
+ isOpen: extendedTooltipDisplayed,
91
79
  };
92
80
  var handleContentProps = __assign(__assign({}, data), { tooltipProps: __assign(__assign({}, handleContentTooltipProps), data === null || data === void 0 ? void 0 : data.tooltipProps) });
93
81
  var handleContent = React.createElement(HandleContent, __assign({}, handleContentProps), children);
94
82
  var switchTooltipTimerOn;
83
+ var switchToolsTimerOff;
95
84
  var handleConfig = __assign(__assign(__assign({}, handleProps), tooltipTitle), { className: intent ? "".concat(intentClassName(intent), " ") : "", onClick: function (e) {
96
85
  if (handleProps.onClick) {
97
86
  handleProps.onClick(e);
98
87
  }
99
- routeClickToTools(e);
100
- }, "data-category": category, onMouseEnter: function () {
88
+ if (toolsTarget.length > 0 && e.target === handleDefaultRef.current) {
89
+ setExtendedTooltipDisplayed(false);
90
+ toolsTarget[0].click();
91
+ }
92
+ }, "data-category": category, onMouseEnter: function (e) {
101
93
  var _a, _b;
102
- switchTooltipTimerOn = setTimeout(function () { return setExtendedTooltipDisplayed(true); }, (_b = (_a = data === null || data === void 0 ? void 0 : data.tooltipProps) === null || _a === void 0 ? void 0 : _a.hoverOpenDelay) !== null && _b !== void 0 ? _b : 500);
103
- setHandleToolsDisplayed(false);
94
+ if (switchToolsTimerOff)
95
+ clearTimeout(switchToolsTimerOff);
96
+ if (e.target === handleDefaultRef.current) {
97
+ switchTooltipTimerOn = setTimeout(function () { return setExtendedTooltipDisplayed(true); }, (_b = (_a = data === null || data === void 0 ? void 0 : data.tooltipProps) === null || _a === void 0 ? void 0 : _a.hoverOpenDelay) !== null && _b !== void 0 ? _b : 500);
98
+ }
104
99
  }, onMouseLeave: function () {
105
100
  if (switchTooltipTimerOn)
106
101
  clearTimeout(switchTooltipTimerOn);
102
+ if (toolsTarget.length > 0 && toolsTarget[0].classList.contains(BlueprintClasses.POPOVER_OPEN)) {
103
+ switchToolsTimerOff = setTimeout(function () { return toolsTarget[0].click(); }, 500);
104
+ }
107
105
  setExtendedTooltipDisplayed(false);
108
106
  } });
109
107
  switch (flowVersionCheck) {
@@ -1 +1 @@
1
- {"version":3,"file":"HandleDefault.js","sourceRoot":"","sources":["../../../../../src/extensions/react-flow/handles/HandleDefault.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HandleDefault.js","sourceRoot":"","sources":["../../../../../src/extensions/react-flow/handles/HandleDefault.tsx"],"names":[],"mappings":"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"}
@@ -46,8 +46,9 @@ export var HandleTools = function (_a) {
46
46
  var configToolsDisplayed = toolsDisplayed
47
47
  ? {
48
48
  defaultIsOpen: true,
49
- autoFocus: true,
50
- interactionKind: BlueprintPopoverInteractionKind.HOVER,
49
+ autoFocus: false,
50
+ interactionKind: BlueprintPopoverInteractionKind.CLICK,
51
+ openOnTargetFocus: true,
51
52
  onClosing: function () { return setToolsDisplayed(false); },
52
53
  }
53
54
  : {
@@ -56,6 +57,6 @@ export var HandleTools = function (_a) {
56
57
  },
57
58
  };
58
59
  return (React.createElement(ContextOverlay, __assign({ hoverCloseDelay: 500 }, configToolsDisplayed, otherContextOverlayProps, { content: React.createElement("div", { className: "".concat(eccgui, "-graphviz__handletools-content") }, children), className: "".concat(eccgui, "-graphviz__handletools-target"), popoverClassName: "".concat(eccgui, "-graphviz__handletools-overlay") }),
59
- React.createElement("div", { className: "".concat(eccgui, "-graphviz__handletools-target"), "data-test-id": otherContextOverlayProps["data-test-id"], "data-testid": otherContextOverlayProps["data-testid"] })));
60
+ React.createElement("div", { className: "".concat(eccgui, "-graphviz__handletools-placeholder"), "data-test-id": otherContextOverlayProps["data-test-id"], "data-testid": otherContextOverlayProps["data-testid"] })));
60
61
  };
61
62
  //# sourceMappingURL=HandleTools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"HandleTools.js","sourceRoot":"","sources":["../../../../../src/extensions/react-flow/handles/HandleTools.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,sBAAsB,IAAI,+BAA+B,EAAE,MAAM,mBAAmB,CAAC;AAE9F,OAAO,EAAE,WAAW,IAAI,MAAM,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAqB,MAAM,gBAAgB,CAAC;AAUnE,MAAM,CAAC,IAAM,WAAW,GAAG,UAAC,EAA2D;IAAzD,IAAA,QAAQ,cAAA,EAAK,wBAAwB,cAAvC,YAAyC,CAAF;IACzD,IAAA,KAAA,OAAsC,KAAK,CAAC,QAAQ,CAAU,KAAK,CAAC,IAAA,EAAnE,cAAc,QAAA,EAAE,iBAAiB,QAAkC,CAAC;IAE3E,IAAM,oBAAoB,GAAG,cAAc;QACvC,CAAC,CAAC;YACI,aAAa,EAAE,IAAI;YACnB,SAAS,EAAE,IAAI;YACf,eAAe,EAAE,+BAA+B,CAAC,KAAK;YACtD,SAAS,EAAE,cAAM,OAAA,iBAAiB,CAAC,KAAK,CAAC,EAAxB,CAAwB;SAC5C;QACH,CAAC,CAAC;YACI,SAAS,EAAE;gBACP,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;SACJ,CAAC;IAER,OAAO,CACH,oBAAC,cAAc,aACX,eAAe,EAAE,GAAG,IAChB,oBAAoB,EACpB,wBAAwB,IAC5B,OAAO,EAAE,6BAAK,SAAS,EAAE,UAAG,MAAM,mCAAgC,IAAG,QAAQ,CAAO,EACpF,SAAS,EAAE,UAAG,MAAM,kCAA+B,EACnD,gBAAgB,EAAE,UAAG,MAAM,mCAAgC;QAE3D,6BACI,SAAS,EAAE,UAAG,MAAM,kCAA+B,kBACrC,wBAAwB,CAAC,cAAc,CAAC,iBACzC,wBAAwB,CAAC,aAAa,CAAC,GACtD,CACW,CACpB,CAAC;AACN,CAAC,CAAC"}
1
+ {"version":3,"file":"HandleTools.js","sourceRoot":"","sources":["../../../../../src/extensions/react-flow/handles/HandleTools.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,sBAAsB,IAAI,+BAA+B,EAAE,MAAM,mBAAmB,CAAC;AAE9F,OAAO,EAAE,WAAW,IAAI,MAAM,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAqB,MAAM,gBAAgB,CAAC;AAUnE,MAAM,CAAC,IAAM,WAAW,GAAG,UAAC,EAA2D;IAAzD,IAAA,QAAQ,cAAA,EAAK,wBAAwB,cAAvC,YAAyC,CAAF;IACzD,IAAA,KAAA,OAAsC,KAAK,CAAC,QAAQ,CAAU,KAAK,CAAC,IAAA,EAAnE,cAAc,QAAA,EAAE,iBAAiB,QAAkC,CAAC;IAE3E,IAAM,oBAAoB,GAAG,cAAc;QACvC,CAAC,CAAC;YACI,aAAa,EAAE,IAAI;YACnB,SAAS,EAAE,KAAK;YAChB,eAAe,EAAE,+BAA+B,CAAC,KAAK;YACtD,iBAAiB,EAAE,IAAI;YACvB,SAAS,EAAE,cAAM,OAAA,iBAAiB,CAAC,KAAK,CAAC,EAAxB,CAAwB;SAC5C;QACH,CAAC,CAAC;YACI,SAAS,EAAE;gBACP,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;SACJ,CAAC;IAER,OAAO,CACH,oBAAC,cAAc,aACX,eAAe,EAAE,GAAG,IAChB,oBAAoB,EACpB,wBAAwB,IAC5B,OAAO,EAAE,6BAAK,SAAS,EAAE,UAAG,MAAM,mCAAgC,IAAG,QAAQ,CAAO,EACpF,SAAS,EAAE,UAAG,MAAM,kCAA+B,EACnD,gBAAgB,EAAE,UAAG,MAAM,mCAAgC;QAE3D,6BACI,SAAS,EAAE,UAAG,MAAM,uCAAoC,kBAC1C,wBAAwB,CAAC,cAAc,CAAC,iBACzC,wBAAwB,CAAC,aAAa,CAAC,GACtD,CACW,CACpB,CAAC;AACN,CAAC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
2
  import { PluggableList } from "react-markdown/lib/react-markdown";
3
- import { TestableComponent } from "../../index";
3
+ import { HtmlContentBlockProps, TestableComponent } from "../../index";
4
4
  export interface MarkdownProps extends TestableComponent {
5
5
  children: string;
6
6
  /**
@@ -18,7 +18,8 @@ export interface MarkdownProps extends TestableComponent {
18
18
  */
19
19
  allowedElements?: string[];
20
20
  /**
21
- * Do not wrap it in a content block element.
21
+ * Do not wrap content in a `HtmlContentBlock` component.
22
+ * This option is ignored if `htmlContentBlockProps` or `data-test-id` is given.
22
23
  */
23
24
  inheritBlock?: boolean;
24
25
  /**
@@ -31,6 +32,10 @@ export interface MarkdownProps extends TestableComponent {
31
32
  * Set to `false` to disable this feature.
32
33
  */
33
34
  linkTargetName?: false | string;
35
+ /**
36
+ * Configure the `HtmlContentBlock` component that is automatically used as wrapper for the parsed Markdown content.
37
+ */
38
+ htmlContentBlockProps?: Omit<HtmlContentBlockProps, "children" | "className" | "data-test-id">;
34
39
  }
35
40
  /** Renders a markdown string. */
36
- export declare const Markdown: ({ children, allowHtml, removeMarkup, inheritBlock, allowedElements, reHypePlugins, linkTargetName, ...otherProps }: MarkdownProps) => React.JSX.Element;
41
+ export declare const Markdown: ({ children, allowHtml, removeMarkup, inheritBlock, allowedElements, reHypePlugins, linkTargetName, htmlContentBlockProps, ...otherProps }: MarkdownProps) => React.JSX.Element;
@@ -15,7 +15,8 @@ declare const canonicalIcons: {
15
15
  "application-notification": icons.CarbonIconType;
16
16
  "artefact-chatlog": icons.CarbonIconType;
17
17
  "artefact-commit": icons.CarbonIconType;
18
- "artefact-customtask": icons.CarbonIconType;
18
+ "artefact-task-deleteprojectfiles": icons.CarbonIconType;
19
+ "artefact-task-downloadfile": icons.CarbonIconType;
19
20
  "artefact-dataset-csv": icons.CarbonIconType;
20
21
  "artefact-dataset-eccencadataplatform": icons.CarbonIconType;
21
22
  "artefact-dataset-excel": icons.CarbonIconType;
@@ -103,6 +103,12 @@ interface MultiSelectCommonProps<T> extends TestableComponent, Pick<BlueprintMul
103
103
  * If not provided, values are filtered by their labels
104
104
  */
105
105
  searchPredicate?: (item: T, query: string) => boolean;
106
+ /**
107
+ * Limits the height of the input target plus its dropdown menu when it is opened.
108
+ * Need to be a `number not greater than 100` (as `vh`, a unit describing a length relative to the viewport height) or `true` (equals 100).
109
+ * If not set than the dropdown menu cannot be larger that appr. the half of the available viewport hight.
110
+ */
111
+ limitHeightOpened?: boolean | number;
106
112
  }
107
113
  /** @deprecated (v25) use MultiSuggestFieldProps */
108
114
  export type MultiSelectProps<T> = MultiSelectCommonProps<T> & ({
@@ -122,7 +128,7 @@ export type MultiSelectProps<T> = MultiSelectCommonProps<T> & ({
122
128
  * This component will be re-implemented as `Select` like element allowing multiple selections (or a `Select` option).
123
129
  * New name for this component is `MultiSuggestField`.
124
130
  */
125
- declare function MultiSelect<T>({ items, selectedItems: externalSelectedItems, prePopulateWithItems, itemId, itemLabel, onSelection, contextOverlayProps, tagInputProps, inputProps, runOnQueryChange, fullWidth, noResultText, newItemCreationText, newItemPostfix, hasStatePrimary, hasStateDanger, hasStateSuccess, hasStateWarning, disabled, createNewItemFromQuery, requestDelay, clearQueryOnSelection, className, "data-test-id": dataTestId, "data-testid": dataTestid, wrapperProps, searchPredicate, ...otherMultiSelectProps }: MultiSelectProps<T>): React.JSX.Element;
131
+ declare function MultiSelect<T>({ items, selectedItems: externalSelectedItems, prePopulateWithItems, itemId, itemLabel, onSelection, contextOverlayProps, tagInputProps, inputProps, runOnQueryChange, fullWidth, noResultText, newItemCreationText, newItemPostfix, hasStatePrimary, hasStateDanger, hasStateSuccess, hasStateWarning, disabled, createNewItemFromQuery, requestDelay, clearQueryOnSelection, className, "data-test-id": dataTestId, "data-testid": dataTestid, wrapperProps, searchPredicate, limitHeightOpened, ...otherMultiSelectProps }: MultiSelectProps<T>): React.JSX.Element;
126
132
  declare namespace MultiSelect {
127
133
  var ofType: typeof BlueprintMultiSelect.ofType;
128
134
  }
@@ -12,7 +12,7 @@ export interface TooltipProps extends Omit<BlueprintTooltipProps, "position"> {
12
12
  */
13
13
  size?: "small" | "medium" | "large";
14
14
  /**
15
- * The tolltip will be attached to this element when it is hovered.
15
+ * The tooltip will be attached to this element when it is hovered.
16
16
  */
17
17
  children: React.ReactNode | React.ReactNode[];
18
18
  /**
@@ -1,16 +1,28 @@
1
1
  import React from "react";
2
2
  export interface HtmlContentBlockProps extends React.HTMLAttributes<HTMLDivElement> {
3
- className?: string;
3
+ /**
4
+ * Content block uses smaller font size.
5
+ */
4
6
  small?: boolean;
7
+ /**
8
+ * To prevent overflow, an otherwise unbreakable string of characters — like a long word or URL — may be broken at any point if there are no otherwise-acceptable break points in the line.
9
+ */
10
+ linebreakForced?: boolean;
11
+ /**
12
+ * No automatic line breaks are inserted.
13
+ */
14
+ linebreakPrevented?: boolean;
15
+ /**
16
+ * Sub elements like code blocks are displayed without own scrollbars.
17
+ * This option may infer with `linebreakForced` and `linebreakPrevented`.
18
+ */
19
+ noScrollbarsOnChildren?: boolean;
5
20
  /** currently not supported */
6
21
  large?: boolean;
7
22
  /** currently not supported */
8
23
  muted?: boolean;
9
24
  /** currently not supported */
10
25
  disabled?: boolean;
11
- linebreakForced?: boolean;
12
- linebreakPrevented?: boolean;
13
- noScrollbarsOnChildren?: boolean;
14
26
  }
15
27
  export declare const HtmlContentBlock: ({ className, children, small, large, muted, disabled, linebreakForced, linebreakPrevented, noScrollbarsOnChildren, ...otherProps }: HtmlContentBlockProps) => React.JSX.Element;
16
28
  export default HtmlContentBlock;
@@ -1,4 +1,4 @@
1
- import React, { AllHTMLAttributes } from "react";
1
+ import React from "react";
2
2
  import { Extension } from "@codemirror/state";
3
3
  import { EditorView, Rect } from "@codemirror/view";
4
4
  import { SupportedCodeEditorModes } from "./hooks/useCodemirrorModeExtension.hooks";
@@ -63,7 +63,7 @@ export interface CodeEditorProps {
63
63
  height?: number | string;
64
64
  /** Long lines are wrapped and displayed on multiple lines */
65
65
  wrapLines?: boolean;
66
- outerDivAttributes?: Partial<AllHTMLAttributes<HTMLDivElement>>;
66
+ outerDivAttributes?: Omit<React.HTMLAttributes<HTMLDivElement>, "id" | "data-test-id">;
67
67
  /**
68
68
  * Size in spaces that is used for a tabulator key.
69
69
  */
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": "24.0.0-rc.3",
4
+ "version": "24.0.0-rc.5",
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",
@@ -70,52 +70,52 @@
70
70
  "@blueprintjs/select": "^5.2.2",
71
71
  "@carbon/icons": "^11.47.1",
72
72
  "@carbon/react": "^1.64.1",
73
- "@mavrin/remark-typograf": "^2.2.0",
74
- "codemirror": "^6.0.1",
75
- "@codemirror/legacy-modes": "^6.4.1",
76
- "@codemirror/lang-markdown": "^6.2.5",
77
73
  "@codemirror/lang-json": "^6.0.1",
74
+ "@codemirror/lang-markdown": "^6.3.1",
78
75
  "@codemirror/lang-xml": "^6.1.0",
79
- "xml-formatter": "^3.6.3",
76
+ "@codemirror/legacy-modes": "^6.4.2",
77
+ "@mavrin/remark-typograf": "^2.2.0",
78
+ "codemirror": "^6.0.1",
80
79
  "color": "^4.2.3",
81
80
  "compute-scroll-into-view": "^3.1.0",
82
81
  "lodash": "^4.17.21",
83
- "re-resizable": "6.9.9",
82
+ "re-resizable": "^6.10.1",
84
83
  "react": "^16.13.1",
85
84
  "react-dom": "^16.13.1",
86
85
  "react-flow-renderer": "9.7.4",
87
86
  "react-flow-renderer-lts": "npm:react-flow-renderer@^10.3.17",
88
87
  "react-inlinesvg": "^3.0.3",
89
88
  "react-markdown": "^8.0.7",
90
- "react-syntax-highlighter": "^15.5.0",
89
+ "react-syntax-highlighter": "^15.6.1",
91
90
  "rehype-raw": "^6.1.1",
92
91
  "remark-definition-list": "^1.2.0",
93
92
  "remark-gfm": "^3.0.1",
94
93
  "remark-parse": "^10.0.2",
95
94
  "reset-css": "^5.0.2",
96
95
  "unified": "^11.0.5",
97
- "wicg-inert": "^3.1.3"
96
+ "wicg-inert": "^3.1.3",
97
+ "xml-formatter": "^3.6.3"
98
98
  },
99
99
  "devDependencies": {
100
- "@babel/core": "^7.25.2",
100
+ "@babel/core": "^7.26.0",
101
101
  "@babel/plugin-proposal-class-properties": "^7.16.7",
102
102
  "@babel/plugin-proposal-private-methods": "^7.16.11",
103
103
  "@babel/plugin-proposal-private-property-in-object": "^7.21.11",
104
- "@babel/preset-env": "^7.25.4",
105
- "@babel/preset-flow": "^7.24.7",
106
- "@babel/preset-react": "^7.24.7",
107
- "@babel/preset-typescript": "^7.24.7",
108
- "@storybook/addon-actions": "^8.2.9",
109
- "@storybook/addon-essentials": "^8.2.9",
110
- "@storybook/addon-jest": "^8.2.9",
111
- "@storybook/addon-links": "^8.2.9",
104
+ "@babel/preset-env": "^7.26.0",
105
+ "@babel/preset-flow": "^7.25.9",
106
+ "@babel/preset-react": "^7.25.9",
107
+ "@babel/preset-typescript": "^7.26.0",
108
+ "@storybook/addon-actions": "^8.4.3",
109
+ "@storybook/addon-essentials": "^8.4.3",
110
+ "@storybook/addon-jest": "^8.4.3",
111
+ "@storybook/addon-links": "^8.4.3",
112
112
  "@storybook/addon-webpack5-compiler-babel": "^3.0.3",
113
- "@storybook/cli": "^8.2.9",
113
+ "@storybook/cli": "^8.4.3",
114
114
  "@storybook/preset-scss": "^1.0.3",
115
- "@storybook/react": "^8.2.9",
116
- "@storybook/react-webpack5": "^8.2.9",
117
- "@storybook/test": "^8.2.9",
118
- "@testing-library/jest-dom": "^6.5.0",
115
+ "@storybook/react": "^8.4.3",
116
+ "@storybook/react-webpack5": "^8.4.3",
117
+ "@storybook/test": "^8.4.3",
118
+ "@testing-library/jest-dom": "^6.6.3",
119
119
  "@testing-library/react": "^12.1.2",
120
120
  "@types/codemirror": "^5.60.15",
121
121
  "@types/color": "^3.0.6",
@@ -125,7 +125,7 @@
125
125
  "@typescript-eslint/eslint-plugin": "^5.62.0",
126
126
  "@typescript-eslint/parser": "^5.62.0",
127
127
  "babel-jest": "^29.7.0",
128
- "chromatic": "^11.7.1",
128
+ "chromatic": "^11.18.1",
129
129
  "eslint": "^8.57.0",
130
130
  "eslint-plugin-react": "^7.35.0",
131
131
  "eslint-plugin-react-hooks": "^4.6.2",
@@ -144,7 +144,7 @@
144
144
  "rimraf": "^5.0.10",
145
145
  "sass": "1.62.1",
146
146
  "sass-loader": "10.3.1",
147
- "storybook": "^8.2.9",
147
+ "storybook": "^8.4.3",
148
148
  "stylelint": "^15.11.0",
149
149
  "stylelint-config-recess-order": "^4.6.0",
150
150
  "stylelint-config-standard-scss": "^9.0.0",
@@ -161,7 +161,9 @@
161
161
  },
162
162
  "resolutions": {
163
163
  "**/@types/react": "^17.0.80",
164
- "node-sass-package-importer/**/postcss": "^8.4.41"
164
+ "node-sass-package-importer/**/postcss": "^8.4.41",
165
+ "**/cross-spawn": "^7.0.5 ",
166
+ "**/micromatch": "^4.0.8"
165
167
  },
166
168
  "husky": {
167
169
  "hooks": {
@@ -52,6 +52,12 @@ another code block
52
52
  {{templateVar}}
53
53
  \`\`\`
54
54
 
55
+ \`\`\`json
56
+ {
57
+ "json": "varname"
58
+ }
59
+ \`\`\`
60
+
55
61
  > This is a block quote.
56
62
  >
57
63
  > With 2 paragraphs.
@@ -2,14 +2,14 @@ import React from "react";
2
2
  import ReactMarkdown from "react-markdown";
3
3
  import { PluggableList } from "react-markdown/lib/react-markdown";
4
4
  import { Prism as SyntaxHighlighter } from "react-syntax-highlighter";
5
- import { materialLight } from "react-syntax-highlighter/dist/esm/styles/prism";
6
5
  // @ts-ignore: No declaration file for module (TODO: should be @ts-expect-error but GUI elements is used inside project with `noImplicitAny=false`)
7
6
  import remarkTypograf from "@mavrin/remark-typograf";
8
7
  import rehypeRaw from "rehype-raw";
9
8
  import { remarkDefinitionList } from "remark-definition-list";
10
9
  import remarkGfm from "remark-gfm";
11
10
 
12
- import { HtmlContentBlock, TestableComponent } from "../../index";
11
+ import { CLASSPREFIX as eccgui } from "../../configuration/constants";
12
+ import { HtmlContentBlock, HtmlContentBlockProps, TestableComponent } from "../../index";
13
13
 
14
14
  export interface MarkdownProps extends TestableComponent {
15
15
  children: string;
@@ -28,7 +28,8 @@ export interface MarkdownProps extends TestableComponent {
28
28
  */
29
29
  allowedElements?: string[];
30
30
  /**
31
- * Do not wrap it in a content block element.
31
+ * Do not wrap content in a `HtmlContentBlock` component.
32
+ * This option is ignored if `htmlContentBlockProps` or `data-test-id` is given.
32
33
  */
33
34
  inheritBlock?: boolean;
34
35
  /**
@@ -41,6 +42,10 @@ export interface MarkdownProps extends TestableComponent {
41
42
  * Set to `false` to disable this feature.
42
43
  */
43
44
  linkTargetName?: false | string;
45
+ /**
46
+ * Configure the `HtmlContentBlock` component that is automatically used as wrapper for the parsed Markdown content.
47
+ */
48
+ htmlContentBlockProps?: Omit<HtmlContentBlockProps, "children" | "className" | "data-test-id">;
44
49
  }
45
50
 
46
51
  const configDefault = {
@@ -102,6 +107,7 @@ export const Markdown = ({
102
107
  allowedElements,
103
108
  reHypePlugins,
104
109
  linkTargetName = "_mdref",
110
+ htmlContentBlockProps,
105
111
  ...otherProps
106
112
  }: MarkdownProps) => {
107
113
  const configHtml = allowHtml
@@ -134,15 +140,17 @@ export const Markdown = ({
134
140
  : undefined,
135
141
  components: {
136
142
  code(props: any) {
137
- const { children, className, node, ...rest } = props;
143
+ const { children, className, node, inline, ...rest } = props;
138
144
  const match = /language-(\w+)/.exec(className || "");
139
145
  return match ? (
140
146
  <SyntaxHighlighter
141
147
  {...rest}
142
148
  PreTag="div"
149
+ codeTagProps={{
150
+ className: `${eccgui}-markdown__syntaxhighlighter`,
151
+ }}
143
152
  children={String(children).replace(/\n$/, "")}
144
153
  language={match[1]}
145
- style={materialLight}
146
154
  />
147
155
  ) : (
148
156
  <code {...rest} className={className}>
@@ -160,9 +168,15 @@ export const Markdown = ({
160
168
 
161
169
  // @ts-ignore because against the lib spec it does not allow a function for linkTarget.
162
170
  const markdownDisplay = <ReactMarkdown {...reactMarkdownProperties} />;
163
- return inheritBlock ? (
171
+ return inheritBlock && !(otherProps["data-test-id"] || htmlContentBlockProps) ? (
164
172
  markdownDisplay
165
173
  ) : (
166
- <HtmlContentBlock data-test-id={otherProps["data-test-id"]}>{markdownDisplay}</HtmlContentBlock>
174
+ <HtmlContentBlock
175
+ {...htmlContentBlockProps}
176
+ className={`${eccgui}-markdown__container`}
177
+ data-test-id={otherProps["data-test-id"]}
178
+ >
179
+ {markdownDisplay}
180
+ </HtmlContentBlock>
167
181
  );
168
182
  };
@@ -5,7 +5,7 @@
5
5
  */
6
6
 
7
7
  /// should be already imported
8
- //@import '~@carbon/react/scss/colors';
8
+ // @import '~@carbon/react/scss/colors';
9
9
 
10
10
  /*
11
11
  //----------------------------------------------------------------------------
@@ -17,6 +17,7 @@ import {
17
17
  Button,
18
18
  Depiction,
19
19
  Icon,
20
+ OverviewItem,
20
21
  WorkspaceHeader,
21
22
  } from "../../../index";
22
23
 
@@ -76,7 +77,16 @@ const TemplateBasicExample: StoryFn<typeof ApplicationBasicExample> = (args) =>
76
77
  <code>Menu</code> with <code>MenuItem</code>s.
77
78
  </ApplicationSidebarNavigation>
78
79
 
79
- <WorkspaceHeader id={"ApplicationBasicExample"} />
80
+ <WorkspaceHeader id={"ApplicationBasicExample"}>
81
+ <OverviewItem>
82
+ <Depiction
83
+ image={<Icon name={"application-homepage"} />}
84
+ backgroundColor={"dark"}
85
+ padding="medium"
86
+ ratio="1:1"
87
+ />
88
+ </OverviewItem>
89
+ </WorkspaceHeader>
80
90
 
81
91
  <ApplicationToolbar>
82
92
  <ApplicationToolbarSection>
@@ -27,37 +27,50 @@
27
27
  }
28
28
  }
29
29
 
30
+ .#{$eccgui}-autosuggestion__inputfield {
31
+ background-color: $eccgui-color-textfield-background;
32
+ }
33
+
30
34
  .#{$eccgui}-singlelinecodeeditor {
31
- position: relative;
32
- padding: 0 1px;
35
+ padding: 0;
33
36
 
34
37
  [class^="cm-theme"] {
35
38
  width: 100%;
36
39
  }
37
40
 
41
+ &:has(.cm-editor.cm-focused) {
42
+ box-shadow: input-transition-shadow($input-shadow-color-focus, true), $input-box-shadow-focus;
43
+ }
44
+
38
45
  .cm-editor {
39
- top: 2px;
46
+ top: 1px;
40
47
  height: calc(#{$eccgui-size-textfield-height-regular} - 2px);
41
48
  padding: 0;
42
49
  margin: 0;
43
50
  overflow: hidden;
51
+ background-color: transparent;
52
+ border-radius: 0;
53
+ box-shadow: none;
44
54
 
45
55
  &.cm-focused {
46
56
  outline: none;
57
+ box-shadow: none;
47
58
  }
48
59
 
49
60
  .cm-scroller {
61
+ height: 100%;
50
62
  padding: 0;
51
63
  margin: 0;
52
64
  overflow: auto hidden !important;
53
65
  }
54
66
 
55
- .CodeMirror-vscrollbar {
56
- display: none !important;
57
- }
58
-
59
67
  .cm-content {
60
- vertical-align: middle;
68
+ display: flex;
69
+ flex-direction: column;
70
+ justify-content: center;
71
+ height: 100%;
72
+ min-height: 100%;
73
+ padding: 0;
61
74
  border: none;
62
75
  }
63
76
 
@@ -240,15 +240,9 @@ const AutoSuggestion = ({
240
240
  }, [cm, editorState]);
241
241
 
242
242
  const dispatch = // eslint-disable-next-line @typescript-eslint/no-empty-function
243
- (typeof editorState?.cm?.dispatch === "function" ? editorState?.cm?.dispatch : () => {}) as EditorView["dispatch"];
244
-
245
- React.useEffect(() => {
246
- if (initialValue != null && cm) {
247
- dispatch({
248
- changes: { from: 0, to: cm?.state?.doc.length, insert: initialValue },
249
- });
250
- }
251
- }, [initialValue, cm]);
243
+ (
244
+ typeof editorState?.cm?.dispatch === "function" ? editorState?.cm?.dispatch : () => {}
245
+ ) as EditorView["dispatch"];
252
246
 
253
247
  React.useEffect(() => {
254
248
  editorState.dropdownShown = shouldShowDropdown;
@@ -609,6 +603,36 @@ const AutoSuggestion = ({
609
603
  []
610
604
  );
611
605
 
606
+ const codeEditor = React.useMemo(() => {
607
+ return (
608
+ <ExtendedCodeEditor
609
+ mode={mode}
610
+ setCM={setCM}
611
+ onChange={handleChange}
612
+ onCursorChange={handleCursorChange}
613
+ initialValue={initialValue}
614
+ onFocusChange={handleInputFocus}
615
+ onKeyDown={handleInputEditorKeyPress}
616
+ enableTab={useTabForCompletions}
617
+ placeholder={placeholder}
618
+ onSelection={onSelection}
619
+ showScrollBar={showScrollBar}
620
+ multiline={multiline}
621
+ onMouseDown={handleInputMouseDown}
622
+ />
623
+ );
624
+ }, [
625
+ mode,
626
+ setCM,
627
+ handleChange,
628
+ initialValue,
629
+ useTabForCompletions,
630
+ placeholder,
631
+ showScrollBar,
632
+ multiline,
633
+ handleInputMouseDown,
634
+ ]);
635
+
612
636
  const hasError = !!value.current && !pathIsValid && !pathValidationPending;
613
637
  const autoSuggestionInput = (
614
638
  <div
@@ -642,21 +666,7 @@ const AutoSuggestion = ({
642
666
  />
643
667
  }
644
668
  >
645
- <ExtendedCodeEditor
646
- mode={mode}
647
- setCM={setCM}
648
- onChange={handleChange}
649
- onCursorChange={handleCursorChange}
650
- initialValue={initialValue}
651
- onFocusChange={handleInputFocus}
652
- onKeyDown={handleInputEditorKeyPress}
653
- enableTab={useTabForCompletions}
654
- placeholder={placeholder}
655
- onSelection={onSelection}
656
- showScrollBar={showScrollBar}
657
- multiline={multiline}
658
- onMouseDown={handleInputMouseDown}
659
- />
669
+ {codeEditor}
660
670
  </ContextOverlay>
661
671
  {!!value.current && (
662
672
  <span className={BlueprintClassNames.INPUT_ACTION} ref={inputactionsDisplayed}>