@eccenca/gui-elements 25.0.0 → 25.1.0-rc.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.
- package/CHANGELOG.md +65 -0
- package/dist/cjs/cmem/ActivityControl/ActivityControlWidget.js +17 -13
- package/dist/cjs/cmem/ActivityControl/ActivityControlWidget.js.map +1 -1
- package/dist/cjs/cmem/ActivityControl/SilkActivityControl.js +1 -3
- package/dist/cjs/cmem/ActivityControl/SilkActivityControl.js.map +1 -1
- package/dist/cjs/cmem/ContentBlobToggler/ContentBlobToggler.js +1 -0
- package/dist/cjs/cmem/ContentBlobToggler/ContentBlobToggler.js.map +1 -1
- package/dist/cjs/cmem/ContentBlobToggler/StringPreviewContentBlobToggler.js +34 -11
- package/dist/cjs/cmem/ContentBlobToggler/StringPreviewContentBlobToggler.js.map +1 -1
- package/dist/cjs/cmem/react-flow/ReactFlow/ReactFlowV12.js.map +1 -1
- package/dist/cjs/common/Intent/index.js +1 -1
- package/dist/cjs/common/Intent/index.js.map +1 -1
- package/dist/cjs/components/Application/ApplicationViewability.js +33 -0
- package/dist/cjs/components/Application/ApplicationViewability.js.map +1 -0
- package/dist/cjs/components/Application/index.js +1 -0
- package/dist/cjs/components/Application/index.js.map +1 -1
- package/dist/cjs/components/ContextOverlay/ContextOverlay.js +6 -6
- package/dist/cjs/components/ContextOverlay/ContextOverlay.js.map +1 -1
- package/dist/cjs/components/DecoupledOverlay/DecoupledOverlay.js +47 -0
- package/dist/cjs/components/DecoupledOverlay/DecoupledOverlay.js.map +1 -0
- package/dist/cjs/components/Icon/IconButton.js.map +1 -1
- package/dist/cjs/components/Icon/canonicalIconNames.js +3 -0
- package/dist/cjs/components/Icon/canonicalIconNames.js.map +1 -1
- package/dist/cjs/components/Icon/transformIcon.js +14 -0
- package/dist/cjs/components/Icon/transformIcon.js.map +1 -0
- package/dist/cjs/components/MultiSelect/MultiSelect.js +2 -1
- package/dist/cjs/components/MultiSelect/MultiSelect.js.map +1 -1
- package/dist/cjs/components/Typography/InlineText.js +29 -0
- package/dist/cjs/components/Typography/InlineText.js.map +1 -0
- package/dist/cjs/components/Typography/index.js +1 -0
- package/dist/cjs/components/Typography/index.js.map +1 -1
- package/dist/cjs/components/VisualTour/VisualTour.js +24 -32
- package/dist/cjs/components/VisualTour/VisualTour.js.map +1 -1
- package/dist/cjs/components/index.js +1 -0
- package/dist/cjs/components/index.js.map +1 -1
- package/dist/cjs/extensions/codemirror/CodeMirror.js +18 -6
- package/dist/cjs/extensions/codemirror/CodeMirror.js.map +1 -1
- package/dist/cjs/extensions/codemirror/hooks/useCodemirrorModeExtension.hooks.js +1 -1
- package/dist/cjs/extensions/codemirror/hooks/useCodemirrorModeExtension.hooks.js.map +1 -1
- package/dist/cjs/extensions/codemirror/tests/codemirrorTestHelper.js +2 -2
- package/dist/cjs/extensions/codemirror/tests/codemirrorTestHelper.js.map +1 -1
- package/dist/cjs/extensions/react-flow/edges/EdgeLabel.js +1 -1
- package/dist/cjs/extensions/react-flow/edges/EdgeLabel.js.map +1 -1
- package/dist/cjs/extensions/react-flow/edges/EdgeNew.js +1 -1
- package/dist/cjs/extensions/react-flow/edges/EdgeNew.js.map +1 -1
- package/dist/cjs/extensions/react-flow/handles/HandleDefault.js +1 -1
- package/dist/cjs/extensions/react-flow/handles/HandleDefault.js.map +1 -1
- package/dist/cjs/extensions/react-flow/minimap/MiniMap.js +1 -1
- package/dist/cjs/extensions/react-flow/minimap/MiniMap.js.map +1 -1
- package/dist/cjs/extensions/react-flow/minimap/MiniMapV12.js.map +1 -1
- package/dist/cjs/extensions/react-flow/nodes/nodeUtils.js.map +1 -1
- package/dist/esm/cmem/ActivityControl/ActivityControlWidget.js +19 -14
- package/dist/esm/cmem/ActivityControl/ActivityControlWidget.js.map +1 -1
- package/dist/esm/cmem/ActivityControl/SilkActivityControl.js +1 -3
- package/dist/esm/cmem/ActivityControl/SilkActivityControl.js.map +1 -1
- package/dist/esm/cmem/ContentBlobToggler/ContentBlobToggler.js +1 -0
- package/dist/esm/cmem/ContentBlobToggler/ContentBlobToggler.js.map +1 -1
- package/dist/esm/cmem/ContentBlobToggler/StringPreviewContentBlobToggler.js +32 -9
- package/dist/esm/cmem/ContentBlobToggler/StringPreviewContentBlobToggler.js.map +1 -1
- package/dist/esm/cmem/react-flow/ReactFlow/ReactFlowV12.js.map +1 -1
- package/dist/esm/common/Intent/index.js +1 -1
- package/dist/esm/common/Intent/index.js.map +1 -1
- package/dist/esm/components/Application/ApplicationViewability.js +28 -0
- package/dist/esm/components/Application/ApplicationViewability.js.map +1 -0
- package/dist/esm/components/Application/index.js +1 -0
- package/dist/esm/components/Application/index.js.map +1 -1
- package/dist/esm/components/ContextOverlay/ContextOverlay.js +3 -3
- package/dist/esm/components/ContextOverlay/ContextOverlay.js.map +1 -1
- package/dist/esm/components/DecoupledOverlay/DecoupledOverlay.js +41 -0
- package/dist/esm/components/DecoupledOverlay/DecoupledOverlay.js.map +1 -0
- package/dist/esm/components/Icon/IconButton.js.map +1 -1
- package/dist/esm/components/Icon/canonicalIconNames.js +3 -0
- package/dist/esm/components/Icon/canonicalIconNames.js.map +1 -1
- package/dist/esm/components/Icon/transformIcon.js +21 -0
- package/dist/esm/components/Icon/transformIcon.js.map +1 -0
- package/dist/esm/components/MultiSelect/MultiSelect.js +3 -2
- package/dist/esm/components/MultiSelect/MultiSelect.js.map +1 -1
- package/dist/esm/components/Typography/InlineText.js +33 -0
- package/dist/esm/components/Typography/InlineText.js.map +1 -0
- package/dist/esm/components/Typography/index.js +1 -0
- package/dist/esm/components/Typography/index.js.map +1 -1
- package/dist/esm/components/VisualTour/VisualTour.js +25 -33
- package/dist/esm/components/VisualTour/VisualTour.js.map +1 -1
- package/dist/esm/components/index.js +1 -0
- package/dist/esm/components/index.js.map +1 -1
- package/dist/esm/extensions/codemirror/CodeMirror.js +19 -7
- package/dist/esm/extensions/codemirror/CodeMirror.js.map +1 -1
- package/dist/esm/extensions/codemirror/hooks/useCodemirrorModeExtension.hooks.js +1 -1
- package/dist/esm/extensions/codemirror/hooks/useCodemirrorModeExtension.hooks.js.map +1 -1
- package/dist/esm/extensions/codemirror/tests/codemirrorTestHelper.js +3 -3
- package/dist/esm/extensions/codemirror/tests/codemirrorTestHelper.js.map +1 -1
- package/dist/esm/extensions/react-flow/edges/EdgeLabel.js +1 -1
- package/dist/esm/extensions/react-flow/edges/EdgeLabel.js.map +1 -1
- package/dist/esm/extensions/react-flow/edges/EdgeNew.js +1 -1
- package/dist/esm/extensions/react-flow/edges/EdgeNew.js.map +1 -1
- package/dist/esm/extensions/react-flow/handles/HandleDefault.js +1 -1
- package/dist/esm/extensions/react-flow/handles/HandleDefault.js.map +1 -1
- package/dist/esm/extensions/react-flow/minimap/MiniMap.js +1 -1
- package/dist/esm/extensions/react-flow/minimap/MiniMap.js.map +1 -1
- package/dist/esm/extensions/react-flow/minimap/MiniMapV12.js.map +1 -1
- package/dist/esm/extensions/react-flow/nodes/nodeUtils.js.map +1 -1
- package/dist/types/cmem/ActivityControl/ActivityControlWidget.d.ts +9 -0
- package/dist/types/cmem/ContentBlobToggler/StringPreviewContentBlobToggler.d.ts +26 -10
- package/dist/types/components/Application/ApplicationViewability.d.ts +36 -0
- package/dist/types/components/Application/index.d.ts +1 -0
- package/dist/types/components/ContextOverlay/ContextOverlay.d.ts +7 -1
- package/dist/types/components/DecoupledOverlay/DecoupledOverlay.d.ts +20 -0
- package/dist/types/components/Icon/IconButton.d.ts +1 -1
- package/dist/types/components/Icon/canonicalIconNames.d.ts +2 -0
- package/dist/types/components/Icon/transformIcon.d.ts +2 -0
- package/dist/types/components/MultiSelect/MultiSelect.d.ts +1 -1
- package/dist/types/components/Structure/TitleSubsection.d.ts +1 -1
- package/dist/types/components/Tabs/Tab.d.ts +2 -2
- package/dist/types/components/Typography/InlineText.d.ts +13 -0
- package/dist/types/components/Typography/index.d.ts +1 -0
- package/dist/types/components/index.d.ts +1 -0
- package/dist/types/extensions/codemirror/hooks/useCodemirrorModeExtension.hooks.d.ts +1 -1
- package/dist/types/extensions/codemirror/tests/codemirrorTestHelper.d.ts +1 -1
- package/package.json +50 -51
- package/src/cmem/ActivityControl/ActivityControlWidget.tsx +68 -35
- package/src/cmem/ActivityControl/SilkActivityControl.tsx +1 -1
- package/src/cmem/ContentBlobToggler/ContentBlobToggler.tsx +1 -1
- package/src/cmem/ContentBlobToggler/StringPreviewContentBlobToggler.tsx +66 -18
- package/src/cmem/ContentBlobToggler/stories/StringPreviewContentBlobToggler.stories.tsx +27 -0
- package/src/cmem/ContentBlobToggler/tests/StringPreviewContentBlobToggler.test.tsx +98 -0
- package/src/cmem/react-flow/ReactFlow/ReactFlowV12.tsx +1 -0
- package/src/common/Intent/index.ts +2 -1
- package/src/components/Application/ApplicationViewability.tsx +61 -0
- package/src/components/Application/_colors.scss +15 -0
- package/src/components/Application/_content.scss +7 -0
- package/src/components/Application/_header.scss +12 -3
- package/src/components/Application/_viewability.scss +13 -0
- package/src/components/Application/application.scss +1 -0
- package/src/components/Application/index.ts +1 -0
- package/src/components/Application/stories/ApplicationViewability.stories.tsx +37 -0
- package/src/components/Application/tests/ApplicationViewability.test.tsx +43 -0
- package/src/components/AutoSuggestion/tests/ExtendedCodeEditor.test.tsx +1 -1
- package/src/components/Card/card.scss +6 -0
- package/src/components/Checkbox/checkbox.scss +14 -2
- package/src/components/ContentGroup/_contentgroup.scss +9 -0
- package/src/components/ContextOverlay/ContextOverlay.tsx +20 -1
- package/src/components/DecoupledOverlay/DecoupledOverlay.stories.tsx +30 -0
- package/src/components/DecoupledOverlay/DecoupledOverlay.tsx +97 -0
- package/src/components/DecoupledOverlay/_decoupledoverlay.scss +46 -0
- package/src/components/Depiction/depiction.scss +6 -0
- package/src/components/FlexibleLayout/flexiblelayout.scss +16 -0
- package/src/components/Grid/grid.scss +17 -0
- package/src/components/Grid/stories/Grid.stories.tsx +10 -7
- package/src/components/Grid/stories/GridRow.stories.tsx +13 -7
- package/src/components/Icon/IconButton.tsx +1 -1
- package/src/components/Icon/canonicalIconNames.tsx +3 -0
- package/src/components/Icon/transformIcon.tsx +17 -0
- package/src/components/Link/Link.stories.tsx +30 -0
- package/src/components/Link/link.scss +28 -2
- package/src/components/MultiSelect/MultiSelect.tsx +12 -3
- package/src/components/Notification/notification.scss +6 -0
- package/src/components/OverviewItem/overviewitem.scss +9 -0
- package/src/components/OverviewItem/stories/OverviewItem.stories.tsx +28 -0
- package/src/components/OverviewItem/stories/OverviewItemActions.stories.tsx +2 -2
- package/src/components/OverviewItem/stories/OverviewItemDescription.stories.tsx +1 -1
- package/src/components/OverviewItem/stories/OverviewItemLine.stories.tsx +1 -1
- package/src/components/PropertyValuePair/propertyvalue.scss +23 -1
- package/src/components/Separation/separation.scss +6 -0
- package/src/components/Table/table.scss +22 -0
- package/src/components/Tabs/stories/TabTitle.stories.tsx +7 -2
- package/src/components/Tag/stories/TagList.stories.tsx +2 -2
- package/src/components/Tag/tag.scss +19 -9
- package/src/components/TextReducer/TextReducer.test.tsx +3 -3
- package/src/components/Typography/InlineText.tsx +24 -0
- package/src/components/Typography/_reset.scss +1 -0
- package/src/components/Typography/index.ts +1 -0
- package/src/components/Typography/stories/InlineText.stories.tsx +27 -0
- package/src/components/Typography/typography.scss +28 -2
- package/src/components/VisualTour/VisualTour.tsx +30 -50
- package/src/components/VisualTour/visualTour.scss +0 -34
- package/src/components/index.scss +1 -0
- package/src/components/index.ts +1 -0
- package/src/configuration/_customproperties.scss +32 -0
- package/src/configuration/stories/customproperties.stories.tsx +118 -0
- package/src/extensions/codemirror/CodeMirror.tsx +20 -9
- package/src/extensions/codemirror/hooks/useCodemirrorModeExtension.hooks.ts +1 -2
- package/src/extensions/codemirror/tests/codemirrorTestHelper.ts +3 -3
- package/src/extensions/react-flow/_config.scss +3 -3
- package/src/extensions/react-flow/edges/EdgeLabel.tsx +5 -3
- package/src/extensions/react-flow/edges/EdgeNew.tsx +2 -1
- package/src/extensions/react-flow/edges/_edges.scss +3 -2
- package/src/extensions/react-flow/handles/HandleDefault.tsx +2 -2
- package/src/extensions/react-flow/minimap/MiniMap.tsx +2 -1
- package/src/extensions/react-flow/minimap/MiniMapV12.tsx +1 -1
- package/src/extensions/react-flow/nodes/_nodes.scss +4 -3
- package/src/extensions/react-flow/nodes/nodeUtils.tsx +1 -0
- package/src/extensions/react-flow/nodes/stories/NodeContent.stories.tsx +2 -2
- package/src/index.scss +1 -0
|
@@ -8,7 +8,7 @@ export default {
|
|
|
8
8
|
component: TagList,
|
|
9
9
|
argTypes: {
|
|
10
10
|
children: {
|
|
11
|
-
control:
|
|
11
|
+
control: false,
|
|
12
12
|
},
|
|
13
13
|
},
|
|
14
14
|
} as Meta<typeof TagList>;
|
|
@@ -18,5 +18,5 @@ const Template: StoryFn<typeof TagList> = (args) => <TagList {...args} />;
|
|
|
18
18
|
export const List = Template.bind({});
|
|
19
19
|
List.args = {
|
|
20
20
|
label: "Tag list",
|
|
21
|
-
children: [<Tag>Short</Tag>, <Tag>List</Tag>, <Tag>Of</Tag>, <Tag>Tags</Tag>],
|
|
21
|
+
children: [<Tag small>Short</Tag>, <Tag>List</Tag>, <Tag>Of</Tag>, <Tag large>Tags</Tag>],
|
|
22
22
|
};
|
|
@@ -30,12 +30,15 @@ $tag-round-adjustment: 0 !default;
|
|
|
30
30
|
@import "~@blueprintjs/core/src/components/tag/tag";
|
|
31
31
|
|
|
32
32
|
.#{$eccgui}-tag__item {
|
|
33
|
+
--eccgui-tag-border-width: 1px;
|
|
34
|
+
|
|
33
35
|
flex-grow: 0;
|
|
34
36
|
flex-shrink: 0;
|
|
35
37
|
min-width: calc(#{$tag-height} - 2px);
|
|
36
38
|
min-height: calc(#{$tag-height} - 2px);
|
|
37
39
|
max-height: calc(#{$tag-height} - 2px);
|
|
38
40
|
padding: 0 $tag-padding-top;
|
|
41
|
+
line-height: calc(#{$tag-height} - 2px);
|
|
39
42
|
|
|
40
43
|
&.#{$ns}-round {
|
|
41
44
|
border-radius: $tag-height * 0.5;
|
|
@@ -55,11 +58,12 @@ $tag-round-adjustment: 0 !default;
|
|
|
55
58
|
}
|
|
56
59
|
|
|
57
60
|
&.#{$eccgui}-tag--small {
|
|
58
|
-
min-width: calc(#{$tag-height-small} + #{$tag-padding-small}
|
|
59
|
-
min-height: calc(#{$tag-height-small} + #{$tag-padding-small}
|
|
60
|
-
max-height: calc(#{$tag-height-small} + #{$tag-padding-small}
|
|
61
|
+
min-width: calc(#{$tag-height-small} + #{$tag-padding-small});
|
|
62
|
+
min-height: calc(#{$tag-height-small} + #{$tag-padding-small});
|
|
63
|
+
max-height: calc(#{$tag-height-small} + #{$tag-padding-small});
|
|
61
64
|
padding: 0 $tag-padding-small;
|
|
62
|
-
|
|
65
|
+
font-size: calc(#{$eccgui-size-typo-tag} - 1px);
|
|
66
|
+
line-height: calc(#{$tag-height-small} + #{$tag-padding-small});
|
|
63
67
|
|
|
64
68
|
&.#{$ns}-round {
|
|
65
69
|
border-radius: $tag-height-small * 0.5;
|
|
@@ -75,7 +79,7 @@ $tag-round-adjustment: 0 !default;
|
|
|
75
79
|
min-height: calc(#{$tag-height-large} + #{$tag-padding-large} - 2px);
|
|
76
80
|
max-height: calc(#{$tag-height-large} + #{$tag-padding-large} - 2px);
|
|
77
81
|
font-size: $eccgui-size-typo-tag-large;
|
|
78
|
-
line-height: calc(#{$tag-height-large} - 2px);
|
|
82
|
+
line-height: calc(#{$tag-height-large} + #{$tag-padding-large} - 2px);
|
|
79
83
|
|
|
80
84
|
&.#{$ns}-round {
|
|
81
85
|
border-radius: $tag-height-large * 0.5;
|
|
@@ -138,7 +142,7 @@ $tag-round-adjustment: 0 !default;
|
|
|
138
142
|
|
|
139
143
|
.#{$ns}-tag {
|
|
140
144
|
border-style: solid;
|
|
141
|
-
border-width:
|
|
145
|
+
border-width: var(--eccgui-tag-border-width);
|
|
142
146
|
|
|
143
147
|
&:not([class*="#{$ns}-intent-"]) {
|
|
144
148
|
--eccgui-tag-bg: #{$tag-default-color};
|
|
@@ -151,7 +155,7 @@ $tag-round-adjustment: 0 !default;
|
|
|
151
155
|
var(--eccgui-tag-bg) var(--eccgui-tag-emfactor),
|
|
152
156
|
eccgui-color-var("identity", "background", "100")
|
|
153
157
|
);
|
|
154
|
-
border-color: var(--eccgui-tag-border);
|
|
158
|
+
border-color: eccgui-color-rgba(var(--eccgui-tag-border), calc(0.25 * var(--eccgui-tag-emfactor)));
|
|
155
159
|
|
|
156
160
|
&.#{$eccgui}-tag--strongeremphasis {
|
|
157
161
|
--eccgui-tag-emfactor: 95%;
|
|
@@ -211,7 +215,7 @@ $tag-round-adjustment: 0 !default;
|
|
|
211
215
|
var(--eccgui-tag-bg) var(--eccgui-tag-emfactor),
|
|
212
216
|
eccgui-color-var("identity", "background", "100")
|
|
213
217
|
);
|
|
214
|
-
border-color: var(--eccgui-tag-border);
|
|
218
|
+
border-color: eccgui-color-rgba(var(--eccgui-tag-border), calc(0.25 * var(--eccgui-tag-emfactor)));
|
|
215
219
|
|
|
216
220
|
&.#{$eccgui}-tag--strongeremphasis {
|
|
217
221
|
--eccgui-tag-emfactor: 100%;
|
|
@@ -231,7 +235,7 @@ $tag-round-adjustment: 0 !default;
|
|
|
231
235
|
|
|
232
236
|
&[class*="#{$eccgui}-intent--"] {
|
|
233
237
|
color: eccgui-color-rgba(var(--eccgui-tag-text), var(--eccgui-tag-emfactor));
|
|
234
|
-
border-color: eccgui-color-rgba(var(--eccgui-tag-border), var(--eccgui-tag-emfactor));
|
|
238
|
+
border-color: eccgui-color-rgba(var(--eccgui-tag-border), calc(0.25 * var(--eccgui-tag-emfactor)));
|
|
235
239
|
}
|
|
236
240
|
|
|
237
241
|
&.#{$eccgui}-intent--primary {
|
|
@@ -267,3 +271,9 @@ $tag-round-adjustment: 0 !default;
|
|
|
267
271
|
}
|
|
268
272
|
}
|
|
269
273
|
}
|
|
274
|
+
|
|
275
|
+
@media print {
|
|
276
|
+
.#{$eccgui}-tag__item {
|
|
277
|
+
print-color-adjust: exact;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import {render, RenderResult} from "@testing-library/react";
|
|
2
|
+
import { render, RenderResult } from "@testing-library/react";
|
|
3
3
|
|
|
4
4
|
import "@testing-library/jest-dom";
|
|
5
5
|
|
|
@@ -9,10 +9,10 @@ import { Default as TextReducerStory } from "./TextReducer.stories";
|
|
|
9
9
|
describe("TextReducer", () => {
|
|
10
10
|
const textMustExist = (queryByText: RenderResult["queryByText"], text: string) => {
|
|
11
11
|
expect(queryByText(text, { exact: false })).not.toBeNull();
|
|
12
|
-
}
|
|
12
|
+
};
|
|
13
13
|
const textMustNotExist = (queryByText: RenderResult["queryByText"], text: string) => {
|
|
14
14
|
expect(queryByText(text, { exact: false })).toBeNull();
|
|
15
|
-
}
|
|
15
|
+
};
|
|
16
16
|
it("should display encoded HTML entities by default if they are used in the transformed markup", () => {
|
|
17
17
|
const { queryByText } = render(<TextReducer {...TextReducerStory.args} />);
|
|
18
18
|
textMustExist(queryByText, "'entities' & "quotes"");
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
|
|
3
|
+
import { CLASSPREFIX as eccgui } from "../../configuration/constants";
|
|
4
|
+
import { TestableComponent } from "../interfaces";
|
|
5
|
+
|
|
6
|
+
export interface InlineTextProps extends React.HTMLAttributes<HTMLElement>, TestableComponent {
|
|
7
|
+
/**
|
|
8
|
+
* Additional CSS class name.
|
|
9
|
+
*/
|
|
10
|
+
className?: string;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Forces all children to be displayed as inline content.
|
|
15
|
+
*/
|
|
16
|
+
export const InlineText = ({ className = "", children, ...otherProps }: InlineTextProps) => {
|
|
17
|
+
return (
|
|
18
|
+
<div {...otherProps} className={`${eccgui}-typography__inlinetext` + (className ? " " + className : "")}>
|
|
19
|
+
{children}
|
|
20
|
+
</div>
|
|
21
|
+
);
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export default InlineText;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Meta, StoryFn } from "@storybook/react";
|
|
3
|
+
|
|
4
|
+
import { InlineText } from "../InlineText";
|
|
5
|
+
|
|
6
|
+
import overflowTextConfig from "./OverflowText.stories";
|
|
7
|
+
|
|
8
|
+
const config = {
|
|
9
|
+
title: "Components/Typography/InlineText",
|
|
10
|
+
component: InlineText,
|
|
11
|
+
argTypes: {
|
|
12
|
+
children: overflowTextConfig.argTypes?.children,
|
|
13
|
+
},
|
|
14
|
+
} as Meta<typeof InlineText>;
|
|
15
|
+
export default config;
|
|
16
|
+
|
|
17
|
+
const Template: StoryFn<typeof InlineText> = (args) => <InlineText {...args} />;
|
|
18
|
+
|
|
19
|
+
export const Default = Template.bind({});
|
|
20
|
+
Default.args = {
|
|
21
|
+
children: (
|
|
22
|
+
<div>
|
|
23
|
+
<div>Block line 1.</div>
|
|
24
|
+
<div>Block line 2.</div>
|
|
25
|
+
</div>
|
|
26
|
+
),
|
|
27
|
+
};
|
|
@@ -17,6 +17,11 @@ body {
|
|
|
17
17
|
text-rendering: optimizelegibility;
|
|
18
18
|
-webkit-font-smoothing: antialiased;
|
|
19
19
|
-moz-osx-font-smoothing: grayscale;
|
|
20
|
+
// User-facing text may contain Unicode symbols (e.g. "★") that fall outside the primary font stack.
|
|
21
|
+
// Browsers pick different system fallback fonts for such characters, causing glyphs to render at
|
|
22
|
+
// different optical sizes (smaller in Firefox). font-size-adjust normalises the fallback font size
|
|
23
|
+
// by matching the primary font's x-height, reducing the visual size discrepancy across browsers.
|
|
24
|
+
font-size-adjust: from-font;
|
|
20
25
|
}
|
|
21
26
|
|
|
22
27
|
code {
|
|
@@ -68,6 +73,11 @@ mark {
|
|
|
68
73
|
line-height: $eccgui-size-typo-caption-lineheight;
|
|
69
74
|
}
|
|
70
75
|
|
|
76
|
+
.#{$eccgui}-typography__contentblock.#{$eccgui}-typography--large {
|
|
77
|
+
font-size: $eccgui-size-typo-subtitle;
|
|
78
|
+
line-height: $eccgui-size-typo-subtitle-lineheight;
|
|
79
|
+
}
|
|
80
|
+
|
|
71
81
|
h1 {
|
|
72
82
|
.#{$eccgui}-typography__contentblock &,
|
|
73
83
|
&.#{$eccgui}-typography__text {
|
|
@@ -223,9 +233,9 @@ table {
|
|
|
223
233
|
max-width: 100%;
|
|
224
234
|
overflow: hidden;
|
|
225
235
|
text-overflow: ellipsis;
|
|
236
|
+
vertical-align: middle;
|
|
226
237
|
overflow-wrap: normal;
|
|
227
238
|
white-space: nowrap;
|
|
228
|
-
vertical-align: middle;
|
|
229
239
|
}
|
|
230
240
|
|
|
231
241
|
.#{$eccgui}-typography__overflowtext--inline {
|
|
@@ -241,8 +251,8 @@ table {
|
|
|
241
251
|
}
|
|
242
252
|
|
|
243
253
|
.#{$eccgui}-typography__overflowtext--ellipsis-reverse {
|
|
244
|
-
text-align: left;
|
|
245
254
|
text-overflow: ellipsis;
|
|
255
|
+
text-align: left;
|
|
246
256
|
direction: rtl;
|
|
247
257
|
unicode-bidi: embed;
|
|
248
258
|
|
|
@@ -263,6 +273,22 @@ table {
|
|
|
263
273
|
}
|
|
264
274
|
}
|
|
265
275
|
|
|
276
|
+
// InlineText
|
|
277
|
+
|
|
278
|
+
.#{$eccgui}-typography__inlinetext {
|
|
279
|
+
display: inline;
|
|
280
|
+
|
|
281
|
+
* {
|
|
282
|
+
display: inline;
|
|
283
|
+
|
|
284
|
+
& + * {
|
|
285
|
+
&::before {
|
|
286
|
+
content: " ";
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
|
|
266
292
|
// helpers
|
|
267
293
|
|
|
268
294
|
.#{$eccgui}-typography--nooverflow {
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { createPortal } from "react-dom";
|
|
3
|
-
import { Classes as BlueprintClasses } from "@blueprintjs/core";
|
|
4
|
-
import { createPopper } from "@popperjs/core";
|
|
5
3
|
|
|
6
4
|
import { CLASSPREFIX as eccgui } from "../../configuration/constants";
|
|
7
5
|
import {
|
|
@@ -14,6 +12,7 @@ import {
|
|
|
14
12
|
CardHeader,
|
|
15
13
|
CardOptions,
|
|
16
14
|
CardTitle,
|
|
15
|
+
DecoupledOverlay,
|
|
17
16
|
IconButton,
|
|
18
17
|
Markdown,
|
|
19
18
|
ModalSize,
|
|
@@ -130,7 +129,7 @@ export const VisualTour = ({
|
|
|
130
129
|
<Button
|
|
131
130
|
key={"next"}
|
|
132
131
|
variant="outlined"
|
|
133
|
-
|
|
132
|
+
elevated
|
|
134
133
|
onClick={() => {
|
|
135
134
|
setCurrentStepIndex(currentStepIndex + 1);
|
|
136
135
|
}}
|
|
@@ -144,7 +143,7 @@ export const VisualTour = ({
|
|
|
144
143
|
text={closeLabel}
|
|
145
144
|
onClick={closeTour}
|
|
146
145
|
variant="outlined"
|
|
147
|
-
|
|
146
|
+
elevated
|
|
148
147
|
rightIcon={"navigation-close"}
|
|
149
148
|
/>
|
|
150
149
|
),
|
|
@@ -292,25 +291,6 @@ interface StepPopoverProps {
|
|
|
292
291
|
|
|
293
292
|
/** Popover that is displayed and points at the highlighted element. */
|
|
294
293
|
const StepPopover = ({ highlightedElement, step, titleOption, actionButtons }: StepPopoverProps) => {
|
|
295
|
-
const tooltipRef = React.useCallback(
|
|
296
|
-
(tooltip: HTMLDivElement | null) => {
|
|
297
|
-
if (tooltip) {
|
|
298
|
-
createPopper(highlightedElement, tooltip, {
|
|
299
|
-
placement: "auto",
|
|
300
|
-
modifiers: [
|
|
301
|
-
{
|
|
302
|
-
name: "offset",
|
|
303
|
-
options: {
|
|
304
|
-
offset: [0, 15],
|
|
305
|
-
},
|
|
306
|
-
},
|
|
307
|
-
],
|
|
308
|
-
});
|
|
309
|
-
}
|
|
310
|
-
},
|
|
311
|
-
[highlightedElement]
|
|
312
|
-
);
|
|
313
|
-
|
|
314
294
|
const backdropRef = React.useCallback(
|
|
315
295
|
(backdrop: HTMLDivElement | null) => {
|
|
316
296
|
const highlightStencil = () => {
|
|
@@ -340,39 +320,39 @@ const StepPopover = ({ highlightedElement, step, titleOption, actionButtons }: S
|
|
|
340
320
|
[highlightedElement]
|
|
341
321
|
);
|
|
342
322
|
|
|
323
|
+
// map to only tooltip size because the `DecoupledOverlay` only supports them
|
|
324
|
+
let overlaySize: TooltipSize = "large";
|
|
325
|
+
switch (step.size) {
|
|
326
|
+
case "tiny":
|
|
327
|
+
overlaySize = "small";
|
|
328
|
+
break;
|
|
329
|
+
case "regular":
|
|
330
|
+
overlaySize = "medium";
|
|
331
|
+
break;
|
|
332
|
+
case "xlarge":
|
|
333
|
+
case "fullscreen":
|
|
334
|
+
overlaySize = "large";
|
|
335
|
+
break;
|
|
336
|
+
}
|
|
337
|
+
|
|
343
338
|
return createPortal(
|
|
344
339
|
<div className={`${eccgui}-visual-tour`}>
|
|
345
340
|
<div className={`${eccgui}-visual-tour__focushelper`} ref={backdropRef} />
|
|
346
341
|
<div>
|
|
347
342
|
<div className={`${eccgui}-visual-tour__backdrop`} />
|
|
348
343
|
</div>
|
|
349
|
-
<
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
aria-hidden
|
|
362
|
-
/>
|
|
363
|
-
<div className={`${BlueprintClasses.POPOVER_CONTENT} ${eccgui}-visual-tour__overlay__content`}>
|
|
364
|
-
<Card isOnlyLayout elevation={-1} whitespaceAmount="small">
|
|
365
|
-
<CardHeader>
|
|
366
|
-
<CardTitle>{step.title}</CardTitle>
|
|
367
|
-
<CardOptions>{titleOption}</CardOptions>
|
|
368
|
-
</CardHeader>
|
|
369
|
-
<CardContent>
|
|
370
|
-
<StepContent step={step} />
|
|
371
|
-
</CardContent>
|
|
372
|
-
<CardActions inverseDirection>{actionButtons}</CardActions>
|
|
373
|
-
</Card>
|
|
374
|
-
</div>
|
|
375
|
-
</div>
|
|
344
|
+
<DecoupledOverlay targetSelectorOrElement={highlightedElement} size={overlaySize} usePortal={false}>
|
|
345
|
+
<Card isOnlyLayout elevation={-1} whitespaceAmount="small">
|
|
346
|
+
<CardHeader>
|
|
347
|
+
<CardTitle>{step.title}</CardTitle>
|
|
348
|
+
<CardOptions>{titleOption}</CardOptions>
|
|
349
|
+
</CardHeader>
|
|
350
|
+
<CardContent>
|
|
351
|
+
<StepContent step={step} />
|
|
352
|
+
</CardContent>
|
|
353
|
+
<CardActions inverseDirection>{actionButtons}</CardActions>
|
|
354
|
+
</Card>
|
|
355
|
+
</DecoupledOverlay>
|
|
376
356
|
</div>,
|
|
377
357
|
document.body
|
|
378
358
|
);
|
|
@@ -31,40 +31,6 @@
|
|
|
31
31
|
opacity: 0;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
.#{$eccgui}-visual-tour__arrow {
|
|
35
|
-
&::before {
|
|
36
|
-
background: $card-background-color;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
.#{$eccgui}-visual-tour__overlay[data-popper-placement="top"] & {
|
|
40
|
-
bottom: -0.5 * $eccgui-size-block-whitespace;
|
|
41
|
-
}
|
|
42
|
-
.#{$eccgui}-visual-tour__overlay[data-popper-placement="right"] & {
|
|
43
|
-
left: -0.5 * $eccgui-size-block-whitespace;
|
|
44
|
-
}
|
|
45
|
-
.#{$eccgui}-visual-tour__overlay[data-popper-placement="bottom"] & {
|
|
46
|
-
top: -0.5 * $eccgui-size-block-whitespace;
|
|
47
|
-
}
|
|
48
|
-
.#{$eccgui}-visual-tour__overlay[data-popper-placement="left"] & {
|
|
49
|
-
right: -0.5 * $eccgui-size-block-whitespace;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
.#{$eccgui}-visual-tour__overlay {
|
|
54
|
-
z-index: 8002; // 2 over application header
|
|
55
|
-
&--small {
|
|
56
|
-
@extend .#{$eccgui}-tooltip--small;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
&--medium {
|
|
60
|
-
@extend .#{$eccgui}-tooltip--medium;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
&--large {
|
|
64
|
-
@extend .#{$eccgui}-tooltip--large;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
34
|
.#{$eccgui}-card__content {
|
|
69
35
|
.#{$eccgui}-visual-tour__overlay__content & {
|
|
70
36
|
max-height: 45vh;
|
package/src/components/index.ts
CHANGED
|
@@ -9,6 +9,7 @@ export * from "./Checkbox/Checkbox";
|
|
|
9
9
|
export * from "./CodeAutocompleteField";
|
|
10
10
|
export * from "./ContentGroup/ContentGroup";
|
|
11
11
|
export * from "./ContextOverlay";
|
|
12
|
+
export * from "./DecoupledOverlay/DecoupledOverlay";
|
|
12
13
|
export * from "./Depiction/Depiction";
|
|
13
14
|
export * from "./Dialog";
|
|
14
15
|
export * from "./FlexibleLayout";
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* We mirror our SCSS variables here to improve availability in inline styles
|
|
3
|
+
* and module styles without included SCSS config stack.
|
|
4
|
+
* Colors are set in `src/components/Application/_colors.scss`.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
:root {
|
|
8
|
+
--#{$eccgui}-size-typo-caption: #{$eccgui-size-typo-caption};
|
|
9
|
+
--#{$eccgui}-size-typo-caption-lineheight: #{$eccgui-size-typo-caption-lineheight};
|
|
10
|
+
--#{$eccgui}-size-typo-text: #{$eccgui-size-typo-text};
|
|
11
|
+
--#{$eccgui}-size-typo-text-lineheight: #{$eccgui-size-typo-text-lineheight};
|
|
12
|
+
--#{$eccgui}-size-typo-subtitle: #{$eccgui-size-typo-subtitle};
|
|
13
|
+
--#{$eccgui}-size-typo-subtitle-lineheight: #{$eccgui-size-typo-subtitle-lineheight};
|
|
14
|
+
--#{$eccgui}-size-typo-title: #{$eccgui-size-typo-title};
|
|
15
|
+
--#{$eccgui}-size-typo-title-lineheight: #{$eccgui-size-typo-title-lineheight};
|
|
16
|
+
--#{$eccgui}-size-typo-headline: #{$eccgui-size-typo-headline};
|
|
17
|
+
--#{$eccgui}-size-typo-headline-lineheight: #{$eccgui-size-typo-headline-lineheight};
|
|
18
|
+
--#{$eccgui}-font-weight-light: #{$eccgui-font-weight-light};
|
|
19
|
+
--#{$eccgui}-font-weight-regular: #{$eccgui-font-weight-regular};
|
|
20
|
+
--#{$eccgui}-font-weight-bold: #{$eccgui-font-weight-bold};
|
|
21
|
+
--#{$eccgui}-font-spacing-condensed: #{$eccgui-font-spacing-condensed};
|
|
22
|
+
--#{$eccgui}-font-spacing-regular: #{$eccgui-font-spacing-regular};
|
|
23
|
+
--#{$eccgui}-font-spacing-wide: #{$eccgui-font-spacing-wide};
|
|
24
|
+
--#{$eccgui}-size-block-whitespace: #{$eccgui-size-block-whitespace};
|
|
25
|
+
--#{$eccgui}-size-inline-whitespace: #{$eccgui-size-inline-whitespace};
|
|
26
|
+
--#{$eccgui}-opacity-regular: #{$eccgui-opacity-regular};
|
|
27
|
+
--#{$eccgui}-opacity-narrow: #{$eccgui-opacity-narrow};
|
|
28
|
+
--#{$eccgui}-opacity-muted: #{$eccgui-opacity-muted};
|
|
29
|
+
--#{$eccgui}-opacity-disabled: #{$eccgui-opacity-disabled};
|
|
30
|
+
--#{$eccgui}-opacity-ghostly: #{$eccgui-opacity-ghostly};
|
|
31
|
+
--#{$eccgui}-opacity-invisible: #{$eccgui-opacity-invisible};
|
|
32
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Meta, StoryFn } from "@storybook/react";
|
|
3
|
+
|
|
4
|
+
import CssCustomProperties from "../../common/utils/CssCustomProperties";
|
|
5
|
+
import {
|
|
6
|
+
Section,
|
|
7
|
+
SectionHeader,
|
|
8
|
+
Spacing,
|
|
9
|
+
Table,
|
|
10
|
+
TableBody,
|
|
11
|
+
TableCell,
|
|
12
|
+
TableContainer,
|
|
13
|
+
TableHead,
|
|
14
|
+
TableHeader,
|
|
15
|
+
TableRow,
|
|
16
|
+
TitleSubsection,
|
|
17
|
+
} from "../../components";
|
|
18
|
+
import { CLASSPREFIX as eccgui } from "../../index";
|
|
19
|
+
|
|
20
|
+
const groups: { title: string; filterName: (name: string) => boolean }[] = [
|
|
21
|
+
{
|
|
22
|
+
title: "Typography",
|
|
23
|
+
filterName: (name) => name.startsWith(`--${eccgui}-size-typo`),
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
title: "Font weights and spacing",
|
|
27
|
+
filterName: (name) => name.startsWith(`--${eccgui}-font`),
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
title: "Whitespace",
|
|
31
|
+
filterName: (name) => name.startsWith(`--${eccgui}-size-block`) || name.startsWith(`--${eccgui}-size-inline`),
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
title: "Color aliases",
|
|
35
|
+
filterName: (name) => name.startsWith(`--${eccgui}-color`) && !name.startsWith(`--${eccgui}-color-palette`),
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
title: "Opacity",
|
|
39
|
+
filterName: (name) => name.startsWith(`--${eccgui}-opacity`),
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
title: "Palette colors",
|
|
43
|
+
filterName: (name) => name.startsWith(`--${eccgui}-color-palette`),
|
|
44
|
+
},
|
|
45
|
+
];
|
|
46
|
+
|
|
47
|
+
const CssCustomPropertiesOverview = () => {
|
|
48
|
+
return (
|
|
49
|
+
<>
|
|
50
|
+
{groups.map(({ title, filterName }) => {
|
|
51
|
+
const properties = new CssCustomProperties({
|
|
52
|
+
selectorText: ":root",
|
|
53
|
+
filterName,
|
|
54
|
+
removeDashPrefix: false,
|
|
55
|
+
returnObject: false,
|
|
56
|
+
}).customProperties() as string[][];
|
|
57
|
+
|
|
58
|
+
return (
|
|
59
|
+
<React.Fragment key={title}>
|
|
60
|
+
<Section>
|
|
61
|
+
<SectionHeader>
|
|
62
|
+
<TitleSubsection>{title}</TitleSubsection>
|
|
63
|
+
</SectionHeader>
|
|
64
|
+
<Spacing size="tiny" />
|
|
65
|
+
<TableContainer>
|
|
66
|
+
<Table columnWidths={["60%", "40%"]}>
|
|
67
|
+
<TableHead>
|
|
68
|
+
<TableRow>
|
|
69
|
+
<TableHeader>CSS custom property</TableHeader>
|
|
70
|
+
<TableHeader>Current value</TableHeader>
|
|
71
|
+
</TableRow>
|
|
72
|
+
</TableHead>
|
|
73
|
+
<TableBody>
|
|
74
|
+
{properties.map(([name, value]) => (
|
|
75
|
+
<TableRow key={name}>
|
|
76
|
+
<TableCell>
|
|
77
|
+
<code>{name}</code>
|
|
78
|
+
</TableCell>
|
|
79
|
+
<TableCell>
|
|
80
|
+
{name.startsWith(`--${eccgui}-color`) && (
|
|
81
|
+
<span
|
|
82
|
+
style={{
|
|
83
|
+
display: "inline-block",
|
|
84
|
+
width: `var(--${eccgui}-size-block-whitespace)`,
|
|
85
|
+
height: `var(--${eccgui}-size-block-whitespace)`,
|
|
86
|
+
backgroundColor: value,
|
|
87
|
+
verticalAlign: "middle",
|
|
88
|
+
marginRight: `var(--${eccgui}-size-inline-whitespace)`,
|
|
89
|
+
border: "1px solid currentColor",
|
|
90
|
+
}}
|
|
91
|
+
/>
|
|
92
|
+
)}
|
|
93
|
+
<code>{value}</code>
|
|
94
|
+
</TableCell>
|
|
95
|
+
</TableRow>
|
|
96
|
+
))}
|
|
97
|
+
</TableBody>
|
|
98
|
+
</Table>
|
|
99
|
+
</TableContainer>
|
|
100
|
+
</Section>
|
|
101
|
+
<Spacing size="large" />
|
|
102
|
+
</React.Fragment>
|
|
103
|
+
);
|
|
104
|
+
})}
|
|
105
|
+
</>
|
|
106
|
+
);
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* We mirror our SCSS configuration variables as CSS custom vars.
|
|
111
|
+
* This way they can be easily used for inline styles or in CSS modules without SCSS includes.
|
|
112
|
+
*/
|
|
113
|
+
export default {
|
|
114
|
+
title: "Configuration/CSS Custom Properties",
|
|
115
|
+
component: CssCustomPropertiesOverview,
|
|
116
|
+
} as Meta<typeof CssCustomPropertiesOverview>;
|
|
117
|
+
|
|
118
|
+
export const Default: StoryFn = () => <CssCustomPropertiesOverview />;
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import React, { useMemo, useRef } from "react";
|
|
2
2
|
import { defaultKeymap, indentWithTab } from "@codemirror/commands";
|
|
3
3
|
import { defaultHighlightStyle, foldKeymap } from "@codemirror/language";
|
|
4
|
-
import { EditorState, Extension
|
|
4
|
+
import { Compartment,EditorState, Extension } from "@codemirror/state";
|
|
5
5
|
import { DOMEventHandlers, EditorView, KeyBinding, keymap, Rect, ViewUpdate } from "@codemirror/view";
|
|
6
6
|
import { minimalSetup } from "codemirror";
|
|
7
7
|
|
|
8
|
+
import { Markdown } from "../../cmem/markdown/Markdown";
|
|
8
9
|
import { IntentTypes } from "../../common/Intent";
|
|
9
10
|
import { markField } from "../../components/AutoSuggestion/extensions/markText";
|
|
10
11
|
import { TestableComponent } from "../../components/interfaces";
|
|
11
|
-
import { MarkdownToolbar } from "./toolbars/markdown.toolbar";
|
|
12
|
-
import { Markdown } from "../../cmem/markdown/Markdown";
|
|
13
12
|
import { CLASSPREFIX as eccgui } from "../../configuration/constants";
|
|
14
13
|
|
|
15
14
|
//hooks
|
|
@@ -31,9 +30,10 @@ import {
|
|
|
31
30
|
adaptedLineNumbers,
|
|
32
31
|
adaptedLintGutter,
|
|
33
32
|
adaptedPlaceholder,
|
|
34
|
-
compartment,
|
|
35
33
|
adaptedSyntaxHighlighting,
|
|
34
|
+
compartment,
|
|
36
35
|
} from "./tests/codemirrorTestHelper";
|
|
36
|
+
import { MarkdownToolbar } from "./toolbars/markdown.toolbar";
|
|
37
37
|
import { ExtensionCreator } from "./types";
|
|
38
38
|
|
|
39
39
|
export interface CodeEditorProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "translate" | "onChange" | "onKeyDown" | "onMouseDown" | "onScroll">, TestableComponent {
|
|
@@ -231,6 +231,10 @@ export const CodeEditor = ({
|
|
|
231
231
|
currentView.current = view
|
|
232
232
|
const currentReadOnly = React.useRef(readOnly)
|
|
233
233
|
currentReadOnly.current = readOnly
|
|
234
|
+
const currentOnChange = React.useRef(onChange)
|
|
235
|
+
currentOnChange.current = onChange
|
|
236
|
+
const currentDisabled = React.useRef(disabled)
|
|
237
|
+
currentDisabled.current = disabled
|
|
234
238
|
const [showPreview, setShowPreview] = React.useState<boolean>(false);
|
|
235
239
|
// CodeMirror Compartments in order to allow for re-configuration after initialization
|
|
236
240
|
const readOnlyCompartment = React.useRef<Compartment>(compartment())
|
|
@@ -319,11 +323,11 @@ export const CodeEditor = ({
|
|
|
319
323
|
disabledCompartment.current.of(EditorView?.editable.of(!disabled)),
|
|
320
324
|
AdaptedEditorViewDomEventHandlers(domEventHandlers) as Extension,
|
|
321
325
|
EditorView?.updateListener.of((v: ViewUpdate) => {
|
|
322
|
-
if (
|
|
326
|
+
if (currentDisabled.current) return;
|
|
323
327
|
|
|
324
|
-
if (
|
|
328
|
+
if (currentOnChange.current && v.docChanged) {
|
|
325
329
|
// Only fire if the text has actually been changed
|
|
326
|
-
|
|
330
|
+
currentOnChange.current(v.state.doc.toString());
|
|
327
331
|
}
|
|
328
332
|
|
|
329
333
|
if (onSelection)
|
|
@@ -377,7 +381,7 @@ export const CodeEditor = ({
|
|
|
377
381
|
}
|
|
378
382
|
|
|
379
383
|
if (disabled) {
|
|
380
|
-
view.dom.
|
|
384
|
+
view.dom.classList.add(`${eccgui}-disabled`);
|
|
381
385
|
}
|
|
382
386
|
|
|
383
387
|
if (intent) {
|
|
@@ -432,7 +436,14 @@ export const CodeEditor = ({
|
|
|
432
436
|
}, [tabIntentSize])
|
|
433
437
|
|
|
434
438
|
React.useEffect(() => {
|
|
435
|
-
updateExtension(EditorView?.editable.of(!disabled), disabledCompartment.current)
|
|
439
|
+
updateExtension(EditorView?.editable.of(!disabled), disabledCompartment.current);
|
|
440
|
+
if (view?.dom) {
|
|
441
|
+
if (disabled) {
|
|
442
|
+
view.dom.classList.add(`${eccgui}-disabled`);
|
|
443
|
+
} else {
|
|
444
|
+
view.dom.classList.remove(`${eccgui}-disabled`);
|
|
445
|
+
}
|
|
446
|
+
}
|
|
436
447
|
}, [disabled])
|
|
437
448
|
|
|
438
449
|
React.useEffect(() => {
|