@eccenca/gui-elements 25.0.0-bugfixcenterednodecontentmenuitemscmem7184.0 → 25.0.0-featurecolorwheelinputcmem7327.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 +34 -4
- package/dist/cjs/cmem/ActivityControl/ActivityControlWidget.js +17 -13
- package/dist/cjs/cmem/ActivityControl/ActivityControlWidget.js.map +1 -1
- package/dist/cjs/common/index.js +1 -0
- package/dist/cjs/common/index.js.map +1 -1
- package/dist/cjs/common/utils/colorHash.js +25 -11
- package/dist/cjs/common/utils/colorHash.js.map +1 -1
- package/dist/cjs/components/ColorField/ColorField.js +114 -0
- package/dist/cjs/components/ColorField/ColorField.js.map +1 -0
- 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/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/RadioButton/RadioButton.js +5 -2
- package/dist/cjs/components/RadioButton/RadioButton.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 +2 -0
- package/dist/cjs/components/index.js.map +1 -1
- package/dist/cjs/extensions/codemirror/CodeMirror.js +10 -1
- package/dist/cjs/extensions/codemirror/CodeMirror.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/esm/cmem/ActivityControl/ActivityControlWidget.js +19 -14
- package/dist/esm/cmem/ActivityControl/ActivityControlWidget.js.map +1 -1
- package/dist/esm/common/index.js +2 -1
- package/dist/esm/common/index.js.map +1 -1
- package/dist/esm/common/utils/colorHash.js +25 -12
- package/dist/esm/common/utils/colorHash.js.map +1 -1
- package/dist/esm/components/ColorField/ColorField.js +139 -0
- package/dist/esm/components/ColorField/ColorField.js.map +1 -0
- 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/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/RadioButton/RadioButton.js +6 -2
- package/dist/esm/components/RadioButton/RadioButton.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 +2 -0
- package/dist/esm/components/index.js.map +1 -1
- package/dist/esm/extensions/codemirror/CodeMirror.js +10 -1
- package/dist/esm/extensions/codemirror/CodeMirror.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/types/cmem/ActivityControl/ActivityControlWidget.d.ts +9 -0
- package/dist/types/common/index.d.ts +2 -1
- package/dist/types/common/utils/colorHash.d.ts +4 -3
- package/dist/types/components/ColorField/ColorField.d.ts +31 -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/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/RadioButton/RadioButton.d.ts +8 -2
- package/dist/types/components/index.d.ts +2 -0
- package/package.json +1 -1
- package/src/cmem/ActivityControl/ActivityControlWidget.tsx +68 -35
- package/src/common/index.ts +2 -1
- package/src/common/utils/colorHash.ts +36 -18
- package/src/components/Application/_colors.scss +15 -0
- package/src/components/ColorField/ColorField.stories.tsx +69 -0
- package/src/components/ColorField/ColorField.tsx +200 -0
- package/src/components/ColorField/_colorfield.scss +56 -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/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/RadioButton/RadioButton.tsx +15 -3
- package/src/components/RadioButton/radiobutton.scss +13 -0
- package/src/components/Tabs/stories/TabTitle.stories.tsx +7 -2
- package/src/components/Typography/_reset.scss +1 -0
- package/src/components/Typography/typography.scss +5 -0
- package/src/components/VisualTour/VisualTour.tsx +30 -50
- package/src/components/VisualTour/visualTour.scss +0 -34
- package/src/components/index.scss +2 -0
- package/src/components/index.ts +2 -0
- package/src/configuration/_customproperties.scss +32 -0
- package/src/configuration/stories/customproperties.stories.tsx +118 -0
- package/src/extensions/codemirror/CodeMirror.tsx +14 -6
- 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/_edges.scss +3 -2
- package/src/index.scss +1 -0
|
@@ -1,13 +1,25 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { Radio as BlueprintRadioButton, RadioProps as BlueprintRadioProps } from "@blueprintjs/core";
|
|
3
|
+
import classNames from "classnames";
|
|
3
4
|
|
|
4
5
|
import { CLASSPREFIX as eccgui } from "../../configuration/constants";
|
|
5
6
|
|
|
6
|
-
export
|
|
7
|
+
export interface RadioButtonProps extends BlueprintRadioProps {
|
|
8
|
+
/**
|
|
9
|
+
* Hide the indicator.
|
|
10
|
+
* The element cannot be identified as radio input then but a click on the children can be easily processed via `onChange` event.
|
|
11
|
+
*/
|
|
12
|
+
hideIndicator?: boolean;
|
|
13
|
+
}
|
|
7
14
|
|
|
8
|
-
export const RadioButton = ({ children, className = "", ...restProps }: RadioButtonProps) => {
|
|
15
|
+
export const RadioButton = ({ children, className = "", hideIndicator = false, ...restProps }: RadioButtonProps) => {
|
|
9
16
|
return (
|
|
10
|
-
<BlueprintRadioButton
|
|
17
|
+
<BlueprintRadioButton
|
|
18
|
+
{...restProps}
|
|
19
|
+
className={classNames(`${eccgui}-radiobutton`, className, {
|
|
20
|
+
[`${eccgui}-radiobutton--hidden-indicator`]: hideIndicator,
|
|
21
|
+
})}
|
|
22
|
+
>
|
|
11
23
|
{children}
|
|
12
24
|
</BlueprintRadioButton>
|
|
13
25
|
);
|
|
@@ -29,3 +29,16 @@
|
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
+
|
|
33
|
+
.#{$eccgui}-radiobutton--hidden-indicator {
|
|
34
|
+
&:not(.#{$ns}-align-right) {
|
|
35
|
+
padding-inline-start: 0;
|
|
36
|
+
}
|
|
37
|
+
&:not(.#{$ns}-align-left) {
|
|
38
|
+
padding-inline-end: 0;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
input ~ .#{$ns}-control-indicator {
|
|
42
|
+
visibility: hidden;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { Meta, StoryFn } from "@storybook/react";
|
|
3
3
|
|
|
4
|
-
import { Tabs, TabTitle as TabTitleOrg } from "./../../../";
|
|
4
|
+
import { Tabs, TabTitle as TabTitleOrg, TabTitleProps } from "./../../../";
|
|
5
5
|
|
|
6
6
|
export default {
|
|
7
7
|
title: "Components/Tabs/TabTitle",
|
|
@@ -9,7 +9,7 @@ export default {
|
|
|
9
9
|
argTypes: {},
|
|
10
10
|
} as Meta<typeof TabTitleOrg>;
|
|
11
11
|
|
|
12
|
-
const TabTitle = (args) => {
|
|
12
|
+
const TabTitle = (args: React.JSX.IntrinsicAttributes & TabTitleProps) => {
|
|
13
13
|
return (
|
|
14
14
|
<Tabs
|
|
15
15
|
id="titledemo"
|
|
@@ -31,3 +31,8 @@ TabTitleElement.args = {
|
|
|
31
31
|
titlePrefix: "[",
|
|
32
32
|
titleSuffix: <span>]</span>,
|
|
33
33
|
};
|
|
34
|
+
|
|
35
|
+
export const TabTitleSymbolElement = TemplateFull.bind({});
|
|
36
|
+
TabTitleSymbolElement.args = {
|
|
37
|
+
text: "★",
|
|
38
|
+
};
|
|
@@ -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 {
|
|
@@ -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;
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
@import "./Card/card";
|
|
6
6
|
@import "./Chat/chat";
|
|
7
7
|
@import "./Checkbox/checkbox";
|
|
8
|
+
@import "./DecoupledOverlay/decoupledoverlay";
|
|
8
9
|
@import "./Depiction/depiction";
|
|
9
10
|
@import "./Dialog/dialog";
|
|
10
11
|
@import "./FlexibleLayout/flexiblelayout";
|
|
@@ -32,6 +33,7 @@
|
|
|
32
33
|
@import "./Tabs/tabs";
|
|
33
34
|
@import "./Tag/tag";
|
|
34
35
|
@import "./TextField/textfield";
|
|
36
|
+
@import "./ColorField/colorfield";
|
|
35
37
|
@import "./TagInput/taginput";
|
|
36
38
|
@import "./Toolbar/toolbar";
|
|
37
39
|
@import "./Tooltip/tooltip";
|
package/src/components/index.ts
CHANGED
|
@@ -7,8 +7,10 @@ export * from "./Card";
|
|
|
7
7
|
export * from "./Chat";
|
|
8
8
|
export * from "./Checkbox/Checkbox";
|
|
9
9
|
export * from "./CodeAutocompleteField";
|
|
10
|
+
export * from "./ColorField/ColorField";
|
|
10
11
|
export * from "./ContentGroup/ContentGroup";
|
|
11
12
|
export * from "./ContextOverlay";
|
|
13
|
+
export * from "./DecoupledOverlay/DecoupledOverlay";
|
|
12
14
|
export * from "./Depiction/Depiction";
|
|
13
15
|
export * from "./Dialog";
|
|
14
16
|
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 />;
|
|
@@ -227,10 +227,11 @@ export const CodeEditor = ({
|
|
|
227
227
|
}: CodeEditorProps) => {
|
|
228
228
|
const parent = useRef<any>(undefined);
|
|
229
229
|
const [view, setView] = React.useState<EditorView | undefined>();
|
|
230
|
-
const currentView = React.useRef<EditorView>()
|
|
231
|
-
currentView.current = view
|
|
232
|
-
const currentReadOnly = React.useRef(readOnly)
|
|
233
|
-
currentReadOnly.current = readOnly
|
|
230
|
+
const currentView = React.useRef<EditorView>();
|
|
231
|
+
currentView.current = view;
|
|
232
|
+
const currentReadOnly = React.useRef(readOnly);
|
|
233
|
+
currentReadOnly.current = readOnly;
|
|
234
|
+
//const currentDisabled = React.useRef(disabled);
|
|
234
235
|
const [showPreview, setShowPreview] = React.useState<boolean>(false);
|
|
235
236
|
// CodeMirror Compartments in order to allow for re-configuration after initialization
|
|
236
237
|
const readOnlyCompartment = React.useRef<Compartment>(compartment())
|
|
@@ -377,7 +378,7 @@ export const CodeEditor = ({
|
|
|
377
378
|
}
|
|
378
379
|
|
|
379
380
|
if (disabled) {
|
|
380
|
-
view.dom.
|
|
381
|
+
view.dom.classList.add(`${eccgui}-disabled`);
|
|
381
382
|
}
|
|
382
383
|
|
|
383
384
|
if (intent) {
|
|
@@ -432,7 +433,14 @@ export const CodeEditor = ({
|
|
|
432
433
|
}, [tabIntentSize])
|
|
433
434
|
|
|
434
435
|
React.useEffect(() => {
|
|
435
|
-
updateExtension(EditorView?.editable.of(!disabled), disabledCompartment.current)
|
|
436
|
+
updateExtension(EditorView?.editable.of(!disabled), disabledCompartment.current);
|
|
437
|
+
if (view?.dom) {
|
|
438
|
+
if (disabled) {
|
|
439
|
+
view.dom.classList.add(`${eccgui}-disabled`);
|
|
440
|
+
} else {
|
|
441
|
+
view.dom.classList.remove(`${eccgui}-disabled`);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
436
444
|
}, [disabled])
|
|
437
445
|
|
|
438
446
|
React.useEffect(() => {
|
|
@@ -8,9 +8,9 @@ $reactflow-node-font-size: $eccgui-size-typo-caption !default;
|
|
|
8
8
|
$reactflow-node-border-width: 2 * $button-border-width !default;
|
|
9
9
|
$reactflow-node-border-radius: $button-border-radius !default;
|
|
10
10
|
$reactflow-edge-rendering: geometricprecision !default;
|
|
11
|
-
$reactflow-edge-stroke-width-default:
|
|
12
|
-
$reactflow-edge-stroke-width-hover:
|
|
13
|
-
$reactflow-edge-stroke-width-selected:
|
|
11
|
+
$reactflow-edge-stroke-width-default: 1px !default;
|
|
12
|
+
$reactflow-edge-stroke-width-hover: 1px !default;
|
|
13
|
+
$reactflow-edge-stroke-width-selected: 1px !default;
|
|
14
14
|
$reactflow-edge-stroke-opacity-default: $eccgui-opacity-muted !default;
|
|
15
15
|
$reactflow-edge-stroke-opacity-hover: $eccgui-opacity-narrow !default;
|
|
16
16
|
$reactflow-edge-stroke-opacity-selected: $eccgui-opacity-regular !default;
|
|
@@ -81,9 +81,11 @@ export const EdgeLabel = memo(
|
|
|
81
81
|
})}
|
|
82
82
|
</div>
|
|
83
83
|
)}
|
|
84
|
-
|
|
85
|
-
{
|
|
86
|
-
|
|
84
|
+
{(title || text) && (
|
|
85
|
+
<div className={`${eccgui}-graphviz__edge-label__text`} title={title??undefined}>
|
|
86
|
+
{text && (typeof text === "string" ? <OverflowText>{text}</OverflowText> : text)}
|
|
87
|
+
</div>
|
|
88
|
+
)}
|
|
87
89
|
{!!actions && <div className={`${eccgui}-graphviz__edge-label__aux`}>{actions}</div>}
|
|
88
90
|
</div>
|
|
89
91
|
);
|
|
@@ -258,6 +258,7 @@ path.react-flow__edge-path-highlight {
|
|
|
258
258
|
min-height: $reactflow-node-basesize;
|
|
259
259
|
max-height: $reactflow-node-basesize * 13;
|
|
260
260
|
padding: $eccgui-size-block-whitespace * 0.5;
|
|
261
|
+
overflow-y: auto;
|
|
261
262
|
}
|
|
262
263
|
|
|
263
264
|
// Arrows
|
|
@@ -288,6 +289,7 @@ path.react-flow__edge-path-highlight {
|
|
|
288
289
|
width: auto;
|
|
289
290
|
max-width: 20rem;
|
|
290
291
|
height: 0.5 * $reactflow-node-largesize;
|
|
292
|
+
padding: 0 $eccgui-size-block-whitespace * 0.25;
|
|
291
293
|
font-size: $reactflow-node-font-size;
|
|
292
294
|
color: var(--#{$eccgui}-reactflow-edge-label-color, currentColor);
|
|
293
295
|
background-color: var(--#{$eccgui}-reactflow-edge-label-color-background, #{$card-background-color});
|
|
@@ -330,7 +332,6 @@ path.react-flow__edge-path-highlight {
|
|
|
330
332
|
display: inline-flex;
|
|
331
333
|
flex-grow: 0;
|
|
332
334
|
flex-shrink: 0;
|
|
333
|
-
margin-left: 2px;
|
|
334
335
|
.#{$eccgui}-depiction__image {
|
|
335
336
|
height: calc(#{0.5 * $reactflow-node-largesize} - 4px);
|
|
336
337
|
|
|
@@ -342,7 +343,7 @@ path.react-flow__edge-path-highlight {
|
|
|
342
343
|
.#{$eccgui}-graphviz__edge-label__text {
|
|
343
344
|
flex-grow: 1;
|
|
344
345
|
flex-shrink: 1;
|
|
345
|
-
margin: 0 $eccgui-size-block-whitespace * 0.25;
|
|
346
|
+
margin: 0 0 0 $eccgui-size-block-whitespace * 0.25;
|
|
346
347
|
overflow: hidden;
|
|
347
348
|
text-overflow: ellipsis;
|
|
348
349
|
text-align: center;
|
package/src/index.scss
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
// == load default configuration ===============================================
|
|
10
10
|
|
|
11
11
|
@import "./configuration/variables";
|
|
12
|
+
@import "./configuration/customproperties"; // mirror config as custom properties
|
|
12
13
|
|
|
13
14
|
// == Necessary imports from libraries =========================================
|
|
14
15
|
|