@pie-lib/graphing 2.31.6-esmbeta.2 → 2.32.0-mui-update.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +42 -0
- package/lib/axis/arrow.js +19 -55
- package/lib/axis/arrow.js.map +1 -1
- package/lib/axis/axes.js +104 -186
- package/lib/axis/axes.js.map +1 -1
- package/lib/axis/index.js +1 -6
- package/lib/axis/index.js.map +1 -1
- package/lib/bg.js +21 -49
- package/lib/bg.js.map +1 -1
- package/lib/container/actions.js +2 -8
- package/lib/container/actions.js.map +1 -1
- package/lib/container/index.js +14 -59
- package/lib/container/index.js.map +1 -1
- package/lib/container/marks.js +1 -6
- package/lib/container/marks.js.map +1 -1
- package/lib/container/middleware.js +2 -8
- package/lib/container/middleware.js.map +1 -1
- package/lib/container/reducer.js +1 -8
- package/lib/container/reducer.js.map +1 -1
- package/lib/coordinates-label.js +23 -55
- package/lib/coordinates-label.js.map +1 -1
- package/lib/graph-with-controls.js +113 -183
- package/lib/graph-with-controls.js.map +1 -1
- package/lib/graph.js +59 -116
- package/lib/graph.js.map +1 -1
- package/lib/grid-setup.js +161 -223
- package/lib/grid-setup.js.map +1 -1
- package/lib/grid.js +28 -73
- package/lib/grid.js.map +1 -1
- package/lib/index.js +1 -13
- package/lib/index.js.map +1 -1
- package/lib/key-legend.js +41 -85
- package/lib/key-legend.js.map +1 -1
- package/lib/label-svg-icon.js +1 -7
- package/lib/label-svg-icon.js.map +1 -1
- package/lib/labels.js +61 -119
- package/lib/labels.js.map +1 -1
- package/lib/mark-label.js +113 -163
- package/lib/mark-label.js.map +1 -1
- package/lib/toggle-bar.js +158 -242
- package/lib/toggle-bar.js.map +1 -1
- package/lib/tool-menu.js +16 -48
- package/lib/tool-menu.js.map +1 -1
- package/lib/tools/absolute/component.js +4 -10
- package/lib/tools/absolute/component.js.map +1 -1
- package/lib/tools/absolute/index.js +3 -16
- package/lib/tools/absolute/index.js.map +1 -1
- package/lib/tools/circle/bg-circle.js +42 -92
- package/lib/tools/circle/bg-circle.js.map +1 -1
- package/lib/tools/circle/component.js +79 -165
- package/lib/tools/circle/component.js.map +1 -1
- package/lib/tools/circle/index.js +3 -13
- package/lib/tools/circle/index.js.map +1 -1
- package/lib/tools/exponential/component.js +4 -10
- package/lib/tools/exponential/component.js.map +1 -1
- package/lib/tools/exponential/index.js +3 -18
- package/lib/tools/exponential/index.js.map +1 -1
- package/lib/tools/index.js +3 -16
- package/lib/tools/index.js.map +1 -1
- package/lib/tools/line/component.js +27 -48
- package/lib/tools/line/component.js.map +1 -1
- package/lib/tools/line/index.js +1 -6
- package/lib/tools/line/index.js.map +1 -1
- package/lib/tools/parabola/component.js +4 -10
- package/lib/tools/parabola/component.js.map +1 -1
- package/lib/tools/parabola/index.js +3 -16
- package/lib/tools/parabola/index.js.map +1 -1
- package/lib/tools/point/component.js +24 -71
- package/lib/tools/point/component.js.map +1 -1
- package/lib/tools/point/index.js +3 -11
- package/lib/tools/point/index.js.map +1 -1
- package/lib/tools/polygon/component.js +82 -183
- package/lib/tools/polygon/component.js.map +1 -1
- package/lib/tools/polygon/index.js +6 -23
- package/lib/tools/polygon/index.js.map +1 -1
- package/lib/tools/polygon/line.js +48 -91
- package/lib/tools/polygon/line.js.map +1 -1
- package/lib/tools/polygon/polygon.js +65 -98
- package/lib/tools/polygon/polygon.js.map +1 -1
- package/lib/tools/ray/component.js +41 -60
- package/lib/tools/ray/component.js.map +1 -1
- package/lib/tools/ray/index.js +1 -6
- package/lib/tools/ray/index.js.map +1 -1
- package/lib/tools/segment/component.js +25 -43
- package/lib/tools/segment/component.js.map +1 -1
- package/lib/tools/segment/index.js +1 -6
- package/lib/tools/segment/index.js.map +1 -1
- package/lib/tools/shared/arrow-head.js +69 -28
- package/lib/tools/shared/arrow-head.js.map +1 -1
- package/lib/tools/shared/icons/CorrectSVG.js +3 -8
- package/lib/tools/shared/icons/CorrectSVG.js.map +1 -1
- package/lib/tools/shared/icons/IncorrectSVG.js +3 -8
- package/lib/tools/shared/icons/IncorrectSVG.js.map +1 -1
- package/lib/tools/shared/icons/MissingSVG.js +3 -8
- package/lib/tools/shared/icons/MissingSVG.js.map +1 -1
- package/lib/tools/shared/line/index.js +126 -187
- package/lib/tools/shared/line/index.js.map +1 -1
- package/lib/tools/shared/line/line-path.js +70 -100
- package/lib/tools/shared/line/line-path.js.map +1 -1
- package/lib/tools/shared/line/with-root-edge.js +21 -55
- package/lib/tools/shared/line/with-root-edge.js.map +1 -1
- package/lib/tools/shared/point/arrow-point.js +23 -62
- package/lib/tools/shared/point/arrow-point.js.map +1 -1
- package/lib/tools/shared/point/arrow.js +24 -52
- package/lib/tools/shared/point/arrow.js.map +1 -1
- package/lib/tools/shared/point/base-point.js +54 -72
- package/lib/tools/shared/point/base-point.js.map +1 -1
- package/lib/tools/shared/point/index.js +22 -57
- package/lib/tools/shared/point/index.js.map +1 -1
- package/lib/tools/shared/styles.js +10 -38
- package/lib/tools/shared/styles.js.map +1 -1
- package/lib/tools/shared/types.js +2 -9
- package/lib/tools/shared/types.js.map +1 -1
- package/lib/tools/sine/component.js +8 -19
- package/lib/tools/sine/component.js.map +1 -1
- package/lib/tools/sine/index.js +3 -16
- package/lib/tools/sine/index.js.map +1 -1
- package/lib/tools/vector/component.js +24 -44
- package/lib/tools/vector/component.js.map +1 -1
- package/lib/tools/vector/index.js +1 -6
- package/lib/tools/vector/index.js.map +1 -1
- package/lib/undo-redo.js +29 -69
- package/lib/undo-redo.js.map +1 -1
- package/lib/use-debounce.js +4 -11
- package/lib/use-debounce.js.map +1 -1
- package/lib/utils.js +51 -128
- package/lib/utils.js.map +1 -1
- package/package.json +16 -21
- package/src/axis/arrow.jsx +7 -12
- package/src/axis/axes.jsx +40 -45
- package/src/coordinates-label.jsx +13 -18
- package/src/graph-with-controls.jsx +52 -59
- package/src/grid-setup.jsx +204 -206
- package/src/grid.jsx +1 -3
- package/src/key-legend.jsx +52 -56
- package/src/labels.jsx +21 -30
- package/src/mark-label.jsx +83 -81
- package/src/toggle-bar.jsx +155 -166
- package/src/tools/circle/bg-circle.jsx +20 -28
- package/src/tools/circle/component.jsx +28 -63
- package/src/tools/line/component.jsx +22 -15
- package/src/tools/polygon/component.jsx +1 -2
- package/src/tools/polygon/line.jsx +28 -32
- package/src/tools/polygon/polygon.jsx +52 -45
- package/src/tools/ray/component.jsx +38 -25
- package/src/tools/segment/component.jsx +19 -18
- package/src/tools/shared/arrow-head.jsx +60 -7
- package/src/tools/shared/line/index.jsx +39 -2
- package/src/tools/shared/line/line-path.jsx +54 -58
- package/src/tools/shared/point/arrow-point.jsx +10 -24
- package/src/tools/shared/point/arrow.jsx +5 -11
- package/src/tools/shared/point/base-point.jsx +42 -19
- package/src/tools/shared/point/index.jsx +27 -44
- package/src/tools/vector/component.jsx +11 -16
- package/src/undo-redo.jsx +19 -21
- package/esm/index.js +0 -62821
- package/esm/index.js.map +0 -1
- package/esm/package.json +0 -1
|
@@ -1,32 +1,35 @@
|
|
|
1
1
|
import { lineToolComponent, lineBase, styles } from '../shared/line';
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
|
-
|
|
5
4
|
import { types } from '@pie-lib/plot';
|
|
6
|
-
import {
|
|
7
|
-
|
|
5
|
+
import { styled } from '@mui/material/styles';
|
|
6
|
+
|
|
7
|
+
const StyledLineRoot = styled('line')(({ theme, disabled, correctness }) => ({
|
|
8
|
+
...styles.line(theme),
|
|
9
|
+
...(disabled && {
|
|
10
|
+
...styles.disabled(theme),
|
|
11
|
+
...styles.disabledSecondary(theme),
|
|
12
|
+
}),
|
|
13
|
+
...(correctness === 'correct' && styles.correct(theme, 'stroke')),
|
|
14
|
+
...(correctness === 'incorrect' && styles.incorrect(theme, 'stroke')),
|
|
15
|
+
...(correctness === 'missing' && styles.missing(theme, 'stroke')),
|
|
16
|
+
}));
|
|
8
17
|
|
|
9
|
-
const lineStyles = (theme) => ({
|
|
10
|
-
line: styles.line(theme),
|
|
11
|
-
disabled: styles.disabled(theme),
|
|
12
|
-
disabledSecondary: styles.disabledSecondary(theme),
|
|
13
|
-
correct: styles.correct(theme, 'stroke'),
|
|
14
|
-
incorrect: styles.incorrect(theme, 'stroke'),
|
|
15
|
-
missing: styles.missing(theme, 'stroke'),
|
|
16
|
-
});
|
|
17
18
|
export const Line = (props) => {
|
|
18
|
-
const { className,
|
|
19
|
+
const { className, correctness, disabled, graphProps, from, to, ...rest } = props;
|
|
19
20
|
const { scale } = graphProps;
|
|
20
21
|
|
|
21
22
|
return (
|
|
22
|
-
<
|
|
23
|
+
<StyledLineRoot
|
|
23
24
|
stroke="green"
|
|
24
|
-
strokeWidth=
|
|
25
|
+
strokeWidth={6}
|
|
25
26
|
x1={scale.x(from.x)}
|
|
26
27
|
y1={scale.y(from.y)}
|
|
27
28
|
x2={scale.x(to.x)}
|
|
28
29
|
y2={scale.y(to.y)}
|
|
29
|
-
className={
|
|
30
|
+
className={className}
|
|
31
|
+
disabled={disabled}
|
|
32
|
+
correctness={correctness}
|
|
30
33
|
{...rest}
|
|
31
34
|
/>
|
|
32
35
|
);
|
|
@@ -34,7 +37,6 @@ export const Line = (props) => {
|
|
|
34
37
|
|
|
35
38
|
Line.propTypes = {
|
|
36
39
|
className: PropTypes.string,
|
|
37
|
-
classes: PropTypes.object,
|
|
38
40
|
correctness: PropTypes.string,
|
|
39
41
|
disabled: PropTypes.bool,
|
|
40
42
|
graphProps: PropTypes.any,
|
|
@@ -42,8 +44,7 @@ Line.propTypes = {
|
|
|
42
44
|
to: types.PointType,
|
|
43
45
|
};
|
|
44
46
|
|
|
45
|
-
const
|
|
46
|
-
const Segment = lineBase(StyledLine);
|
|
47
|
+
const Segment = lineBase(Line);
|
|
47
48
|
const Component = lineToolComponent(Segment);
|
|
48
49
|
|
|
49
50
|
export default Component;
|
|
@@ -1,13 +1,56 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
|
+
import { styled } from '@mui/material/styles';
|
|
4
|
+
import { color } from '@pie-lib/render-ui';
|
|
3
5
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
+
const StyledArrowHead = styled('polygon')(({ disabled, correctness }) => ({
|
|
7
|
+
fill: color.defaults.BLACK,
|
|
8
|
+
...(disabled && {
|
|
9
|
+
fill: color.disabled(),
|
|
10
|
+
}),
|
|
11
|
+
...(correctness === 'correct' && {
|
|
12
|
+
fill: color.correctWithIcon(),
|
|
13
|
+
}),
|
|
14
|
+
...(correctness === 'incorrect' && {
|
|
15
|
+
fill: color.incorrectWithIcon(),
|
|
16
|
+
}),
|
|
17
|
+
...(correctness === 'missing' && {
|
|
18
|
+
fill: color.missingWithIcon(),
|
|
19
|
+
}),
|
|
20
|
+
}));
|
|
21
|
+
|
|
22
|
+
const StyledMarker = styled('marker')(({ disabled, correctness }) => ({
|
|
23
|
+
'& polygon': {
|
|
24
|
+
fill: color.defaults.BLACK,
|
|
25
|
+
...(disabled && {
|
|
26
|
+
fill: color.disabled(),
|
|
27
|
+
}),
|
|
28
|
+
...(correctness === 'correct' && {
|
|
29
|
+
fill: color.correctWithIcon(),
|
|
30
|
+
}),
|
|
31
|
+
...(correctness === 'incorrect' && {
|
|
32
|
+
fill: color.incorrectWithIcon(),
|
|
33
|
+
}),
|
|
34
|
+
...(correctness === 'missing' && {
|
|
35
|
+
fill: color.missingWithIcon(),
|
|
36
|
+
}),
|
|
37
|
+
},
|
|
38
|
+
}));
|
|
39
|
+
|
|
40
|
+
export const ArrowHead = ({ size, transform, points, disabled, correctness }) => (
|
|
41
|
+
<StyledArrowHead
|
|
42
|
+
points={points || `0,0 ${size},${size / 2} 0,${size}`}
|
|
43
|
+
transform={transform}
|
|
44
|
+
disabled={disabled}
|
|
45
|
+
correctness={correctness}
|
|
46
|
+
/>
|
|
6
47
|
);
|
|
7
48
|
ArrowHead.propTypes = {
|
|
8
49
|
points: PropTypes.string,
|
|
9
50
|
size: PropTypes.number,
|
|
10
51
|
transform: PropTypes.string,
|
|
52
|
+
disabled: PropTypes.bool,
|
|
53
|
+
correctness: PropTypes.string,
|
|
11
54
|
};
|
|
12
55
|
ArrowHead.defaultProps = {
|
|
13
56
|
points: '',
|
|
@@ -18,9 +61,16 @@ export const genUid = () => {
|
|
|
18
61
|
const v = (Math.random() * 1000).toFixed(0);
|
|
19
62
|
return `arrow-${v}`;
|
|
20
63
|
};
|
|
21
|
-
export const ArrowMarker = ({ id, size, className }) => {
|
|
64
|
+
export const ArrowMarker = ({ id, size, className, disabled, correctness }) => {
|
|
65
|
+
// Parse styling info from className if provided (for backward compatibility)
|
|
66
|
+
const isDisabled = disabled || className?.includes('disabled');
|
|
67
|
+
const parsedCorrectness = correctness ||
|
|
68
|
+
(className?.includes('incorrect') ? 'incorrect' :
|
|
69
|
+
className?.includes('correct') ? 'correct' :
|
|
70
|
+
className?.includes('missing') ? 'missing' : null);
|
|
71
|
+
|
|
22
72
|
return (
|
|
23
|
-
<
|
|
73
|
+
<StyledMarker
|
|
24
74
|
id={id}
|
|
25
75
|
viewBox={`0 0 ${size} ${size}`}
|
|
26
76
|
refX={size / 2}
|
|
@@ -28,16 +78,19 @@ export const ArrowMarker = ({ id, size, className }) => {
|
|
|
28
78
|
markerWidth={size}
|
|
29
79
|
markerHeight={size}
|
|
30
80
|
orient="auto-start-reverse"
|
|
31
|
-
|
|
81
|
+
disabled={isDisabled}
|
|
82
|
+
correctness={parsedCorrectness}
|
|
32
83
|
>
|
|
33
|
-
<ArrowHead size={size} />
|
|
34
|
-
</
|
|
84
|
+
<ArrowHead size={size} disabled={isDisabled} correctness={parsedCorrectness} />
|
|
85
|
+
</StyledMarker>
|
|
35
86
|
);
|
|
36
87
|
};
|
|
37
88
|
ArrowMarker.propTypes = {
|
|
38
89
|
id: PropTypes.string,
|
|
39
90
|
size: PropTypes.number,
|
|
40
91
|
className: PropTypes.string,
|
|
92
|
+
disabled: PropTypes.bool,
|
|
93
|
+
correctness: PropTypes.string,
|
|
41
94
|
};
|
|
42
95
|
ArrowMarker.defaultProps = {
|
|
43
96
|
size: 5,
|
|
@@ -10,6 +10,43 @@ import MarkLabel from '../../../mark-label';
|
|
|
10
10
|
import isEmpty from 'lodash/isEmpty';
|
|
11
11
|
import { color } from '@pie-lib/render-ui';
|
|
12
12
|
import { getMiddleOfTwoPoints, equalPoints, sameAxes } from '../../../utils';
|
|
13
|
+
import { styled } from '@mui/material/styles';
|
|
14
|
+
|
|
15
|
+
const StyledLineGroup = styled('g')(({ disabled, correctness }) => ({
|
|
16
|
+
'& line': {
|
|
17
|
+
fill: 'transparent',
|
|
18
|
+
stroke: color.defaults.BLACK,
|
|
19
|
+
strokeWidth: 3,
|
|
20
|
+
transition: 'stroke 200ms ease-in, stroke-width 200ms ease-in',
|
|
21
|
+
'&:hover': {
|
|
22
|
+
strokeWidth: 6,
|
|
23
|
+
stroke: color.defaults.PRIMARY_DARK,
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
...(disabled && {
|
|
27
|
+
'& line': {
|
|
28
|
+
...disabledSecondary('stroke'),
|
|
29
|
+
strokeWidth: 2,
|
|
30
|
+
},
|
|
31
|
+
}),
|
|
32
|
+
...(correctness === 'correct' && {
|
|
33
|
+
'& line': {
|
|
34
|
+
...correct('stroke'),
|
|
35
|
+
},
|
|
36
|
+
}),
|
|
37
|
+
...(correctness === 'incorrect' && {
|
|
38
|
+
'& line': {
|
|
39
|
+
...incorrect('stroke'),
|
|
40
|
+
},
|
|
41
|
+
}),
|
|
42
|
+
...(correctness === 'missing' && {
|
|
43
|
+
'& line': {
|
|
44
|
+
...missing('stroke'),
|
|
45
|
+
strokeWidth: 1,
|
|
46
|
+
strokeDasharray: '4 3',
|
|
47
|
+
},
|
|
48
|
+
}),
|
|
49
|
+
}));
|
|
13
50
|
|
|
14
51
|
export const lineTool = (type, Component) => () => ({
|
|
15
52
|
type,
|
|
@@ -350,7 +387,7 @@ export const lineBase = (Comp, opts) => {
|
|
|
350
387
|
}
|
|
351
388
|
|
|
352
389
|
return (
|
|
353
|
-
<
|
|
390
|
+
<StyledLineGroup disabled={disabled} correctness={correctness}>
|
|
354
391
|
{to && (
|
|
355
392
|
<DraggableComp
|
|
356
393
|
from={from}
|
|
@@ -387,7 +424,7 @@ export const lineBase = (Comp, opts) => {
|
|
|
387
424
|
/>
|
|
388
425
|
)}
|
|
389
426
|
{toLabelNode}
|
|
390
|
-
</
|
|
427
|
+
</StyledLineGroup>
|
|
391
428
|
);
|
|
392
429
|
}
|
|
393
430
|
}
|
|
@@ -1,16 +1,56 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
|
-
import {
|
|
3
|
+
import { styled } from '@mui/material/styles';
|
|
4
4
|
import { types } from '@pie-lib/plot';
|
|
5
|
-
import classNames from 'classnames';
|
|
6
5
|
import { disabled, correct, incorrect, missing, disabledSecondary } from '../styles';
|
|
7
6
|
import * as vx from '@vx/shape';
|
|
8
7
|
import { color } from '@pie-lib/render-ui';
|
|
9
8
|
|
|
9
|
+
const dragging = () => ({
|
|
10
|
+
strokeWidth: 4,
|
|
11
|
+
stroke: color.defaults.BLACK,
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
const StyledDrawLine = styled(vx.LinePath)(({ theme, disabled: isDisabled, correctness }) => ({
|
|
15
|
+
fill: 'none',
|
|
16
|
+
strokeWidth: 2,
|
|
17
|
+
stroke: color.black(),
|
|
18
|
+
...(isDisabled && {
|
|
19
|
+
...disabledSecondary('stroke'),
|
|
20
|
+
strokeWidth: 2,
|
|
21
|
+
}),
|
|
22
|
+
...(correctness === 'correct' && correct('stroke')),
|
|
23
|
+
...(correctness === 'incorrect' && incorrect('stroke')),
|
|
24
|
+
...(correctness === 'missing' && {
|
|
25
|
+
...missing('stroke'),
|
|
26
|
+
strokeWidth: 1,
|
|
27
|
+
strokeDasharray: '4 3',
|
|
28
|
+
}),
|
|
29
|
+
}));
|
|
30
|
+
|
|
31
|
+
const StyledLine = styled(vx.LinePath)(({ theme, disabled: isDisabled, correctness, isDragging }) => ({
|
|
32
|
+
strokeWidth: 3,
|
|
33
|
+
fill: 'none',
|
|
34
|
+
transition: 'stroke-width 200ms ease-in, stroke 200ms ease-in',
|
|
35
|
+
stroke: 'transparent',
|
|
36
|
+
'&:hover': dragging(theme),
|
|
37
|
+
...(isDragging && dragging(theme)),
|
|
38
|
+
...(isDisabled && {
|
|
39
|
+
...disabled('stroke'),
|
|
40
|
+
strokeWidth: 2,
|
|
41
|
+
}),
|
|
42
|
+
...(correctness === 'correct' && correct('stroke')),
|
|
43
|
+
...(correctness === 'incorrect' && incorrect('stroke')),
|
|
44
|
+
...(correctness === 'missing' && {
|
|
45
|
+
...missing('stroke'),
|
|
46
|
+
strokeWidth: 1,
|
|
47
|
+
strokeDasharray: '4 3',
|
|
48
|
+
}),
|
|
49
|
+
}));
|
|
50
|
+
|
|
10
51
|
export class RawLinePath extends React.Component {
|
|
11
52
|
static propTypes = {
|
|
12
53
|
className: PropTypes.string,
|
|
13
|
-
classes: PropTypes.object,
|
|
14
54
|
data: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.number)),
|
|
15
55
|
graphProps: types.GraphPropsType.isRequired,
|
|
16
56
|
disabled: PropTypes.bool,
|
|
@@ -27,30 +67,24 @@ export class RawLinePath extends React.Component {
|
|
|
27
67
|
|
|
28
68
|
render() {
|
|
29
69
|
/* eslint-disable no-unused-vars */
|
|
30
|
-
const { data,
|
|
70
|
+
const { data, className, disabled, correctness, from, to, graphProps, isDragging, ...rest } = this.props;
|
|
31
71
|
/* eslint-enable */
|
|
32
72
|
|
|
33
73
|
return (
|
|
34
74
|
<React.Fragment>
|
|
35
|
-
<
|
|
75
|
+
<StyledDrawLine
|
|
36
76
|
data={data}
|
|
37
|
-
className={
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
classes[correctness],
|
|
41
|
-
className,
|
|
42
|
-
)}
|
|
77
|
+
className={className}
|
|
78
|
+
disabled={disabled}
|
|
79
|
+
correctness={correctness}
|
|
43
80
|
{...rest}
|
|
44
81
|
/>
|
|
45
|
-
<
|
|
82
|
+
<StyledLine
|
|
46
83
|
data={data}
|
|
47
|
-
className={
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
classes[correctness],
|
|
52
|
-
className,
|
|
53
|
-
)}
|
|
84
|
+
className={className}
|
|
85
|
+
isDragging={isDragging}
|
|
86
|
+
disabled={disabled}
|
|
87
|
+
correctness={correctness}
|
|
54
88
|
{...rest}
|
|
55
89
|
/>
|
|
56
90
|
</React.Fragment>
|
|
@@ -58,42 +92,4 @@ export class RawLinePath extends React.Component {
|
|
|
58
92
|
}
|
|
59
93
|
}
|
|
60
94
|
|
|
61
|
-
const
|
|
62
|
-
strokeWidth: 4,
|
|
63
|
-
stroke: color.defaults.BLACK,
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
export const LinePath = withStyles((theme) => ({
|
|
67
|
-
drawLine: {
|
|
68
|
-
fill: 'none',
|
|
69
|
-
strokeWidth: 2,
|
|
70
|
-
stroke: color.black(),
|
|
71
|
-
},
|
|
72
|
-
line: {
|
|
73
|
-
strokeWidth: 3,
|
|
74
|
-
fill: 'none',
|
|
75
|
-
transition: 'stroke-width 200ms ease-in, stroke 200ms ease-in',
|
|
76
|
-
stroke: 'transparent',
|
|
77
|
-
'&:hover': dragging(theme),
|
|
78
|
-
},
|
|
79
|
-
dragging: dragging(theme),
|
|
80
|
-
disabled: {
|
|
81
|
-
...disabled('stroke'),
|
|
82
|
-
strokeWidth: 2,
|
|
83
|
-
},
|
|
84
|
-
disabledSecondary: {
|
|
85
|
-
...disabledSecondary('stroke'),
|
|
86
|
-
strokeWidth: 2,
|
|
87
|
-
},
|
|
88
|
-
correct: {
|
|
89
|
-
...correct('stroke'),
|
|
90
|
-
},
|
|
91
|
-
incorrect: {
|
|
92
|
-
...incorrect('stroke'),
|
|
93
|
-
},
|
|
94
|
-
missing: {
|
|
95
|
-
...missing('stroke'),
|
|
96
|
-
strokeWidth: 1,
|
|
97
|
-
strokeDasharray: '4 3',
|
|
98
|
-
},
|
|
99
|
-
}))(RawLinePath);
|
|
95
|
+
export const LinePath = RawLinePath;
|
|
@@ -1,18 +1,15 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
|
-
import classNames from 'classnames';
|
|
4
3
|
import { types } from '@pie-lib/plot';
|
|
5
|
-
import isEqual from 'lodash/isEqual';
|
|
6
4
|
import { getAngleDeg, arrowDimensions } from '../../../utils';
|
|
7
5
|
|
|
8
6
|
export class RawArrow extends React.Component {
|
|
9
7
|
static propTypes = {
|
|
10
|
-
classes: PropTypes.object,
|
|
11
8
|
className: PropTypes.string,
|
|
12
9
|
correctness: PropTypes.string,
|
|
13
10
|
disabled: PropTypes.bool,
|
|
14
|
-
x: PropTypes.number,
|
|
15
|
-
y: PropTypes.number,
|
|
11
|
+
x: PropTypes.number.isRequired,
|
|
12
|
+
y: PropTypes.number.isRequired,
|
|
16
13
|
from: PropTypes.shape({
|
|
17
14
|
x: PropTypes.number,
|
|
18
15
|
y: PropTypes.number,
|
|
@@ -30,32 +27,21 @@ export class RawArrow extends React.Component {
|
|
|
30
27
|
};
|
|
31
28
|
|
|
32
29
|
render() {
|
|
33
|
-
const {
|
|
34
|
-
// x & y are the initial coordinates for the arrow
|
|
35
|
-
// from & to are used only to calculate the angle that the arrow should be rotated with
|
|
36
|
-
|
|
30
|
+
const { className, x, y, disabled, correctness, graphProps, from, to, ...rest } = this.props;
|
|
37
31
|
const { scale } = graphProps;
|
|
38
|
-
const angle = getAngleDeg(from.x, from.y, to.x, to.y);
|
|
39
32
|
|
|
40
|
-
|
|
33
|
+
const angle = from && to ? getAngleDeg(from.x, from.y, to.x, to.y) : 0;
|
|
41
34
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
-${arrowDimensions.vector},${arrowDimensions.vector * 2}`;
|
|
47
|
-
}
|
|
35
|
+
const points =
|
|
36
|
+
from && to && (from.x !== to.x || from.y !== to.y)
|
|
37
|
+
? `0,0 ${arrowDimensions.vector},${arrowDimensions.vector * 2} -${arrowDimensions.vector},${arrowDimensions.vector * 2}`
|
|
38
|
+
: '0,0 0,0 0,0';
|
|
48
39
|
|
|
49
40
|
return (
|
|
50
|
-
<g
|
|
51
|
-
className={classNames(classes.point, disabled && classes.disabledSecondary, classes[correctness], className)}
|
|
52
|
-
{...rest}
|
|
53
|
-
>
|
|
41
|
+
<g className={className} {...rest}>
|
|
54
42
|
<polygon
|
|
55
43
|
points={points}
|
|
56
|
-
transform={`
|
|
57
|
-
translate(${scale.x(x)}, ${scale.y(y)})
|
|
58
|
-
rotate(${angle} 0 0)`}
|
|
44
|
+
transform={`translate(${scale.x(x)}, ${scale.y(y)}) rotate(${angle} 0 0)`}
|
|
59
45
|
/>
|
|
60
46
|
</g>
|
|
61
47
|
);
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
|
-
import classNames from 'classnames';
|
|
4
3
|
import { types } from '@pie-lib/plot';
|
|
5
4
|
import { ArrowHead } from '../arrow-head';
|
|
6
5
|
import { thinnerShapesNeeded } from '../../../utils';
|
|
7
6
|
|
|
8
|
-
export
|
|
7
|
+
export class BaseArrow extends React.Component {
|
|
9
8
|
static propTypes = {
|
|
10
|
-
classes: PropTypes.object,
|
|
11
9
|
className: PropTypes.string,
|
|
12
10
|
correctness: PropTypes.string,
|
|
13
11
|
disabled: PropTypes.bool,
|
|
@@ -18,8 +16,7 @@ export default class Arrow extends React.Component {
|
|
|
18
16
|
};
|
|
19
17
|
|
|
20
18
|
render() {
|
|
21
|
-
const {
|
|
22
|
-
|
|
19
|
+
const { className, angle, x, y, disabled, correctness, graphProps, ...rest } = this.props;
|
|
23
20
|
const size = thinnerShapesNeeded(graphProps) ? 12 : 14;
|
|
24
21
|
const { scale } = graphProps;
|
|
25
22
|
|
|
@@ -29,14 +26,11 @@ export default class Arrow extends React.Component {
|
|
|
29
26
|
const transform = `rotate(${-angle}, ${scaledX},${scaledY})`;
|
|
30
27
|
const points = `${scaledX},${scaledY}
|
|
31
28
|
${scaledX - size},${scaledY - size / 2}
|
|
32
|
-
${scaledX - size}
|
|
29
|
+
${scaledX - size},${scaledY + size / 2}`;
|
|
33
30
|
|
|
34
31
|
return (
|
|
35
|
-
<g
|
|
36
|
-
|
|
37
|
-
{...rest}
|
|
38
|
-
>
|
|
39
|
-
<ArrowHead size={size} transform={transform} points={points} />
|
|
32
|
+
<g className={className} {...rest}>
|
|
33
|
+
<ArrowHead size={size} transform={transform} points={points} correctness={correctness} />
|
|
40
34
|
</g>
|
|
41
35
|
);
|
|
42
36
|
}
|
|
@@ -1,35 +1,58 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
|
-
import classNames from 'classnames';
|
|
4
3
|
import { types } from '@pie-lib/plot';
|
|
5
|
-
import CoordinatesLabel from '../../../coordinates-label';
|
|
6
4
|
import ReactDOM from 'react-dom';
|
|
5
|
+
import { styled } from '@mui/material/styles';
|
|
6
|
+
|
|
7
|
+
import CoordinatesLabel from '../../../coordinates-label';
|
|
7
8
|
import { thinnerShapesNeeded } from '../../../utils';
|
|
8
9
|
import MissingSVG from '../icons/MissingSVG';
|
|
9
10
|
import CorrectSVG from '../icons/CorrectSVG';
|
|
10
11
|
import IncorrectSVG from '../icons/IncorrectSVG';
|
|
12
|
+
import * as styles from '../styles';
|
|
13
|
+
|
|
14
|
+
const StyledPointGroup = styled('g')(({ disabled, correctness }) => ({
|
|
15
|
+
cursor: 'pointer',
|
|
16
|
+
'& circle': {
|
|
17
|
+
fill: 'currentColor',
|
|
18
|
+
},
|
|
19
|
+
...(disabled && {
|
|
20
|
+
...styles.disabled('fill'),
|
|
21
|
+
...styles.disabled('color'),
|
|
22
|
+
}),
|
|
23
|
+
...(correctness === 'correct' && {
|
|
24
|
+
...styles.correct('fill'),
|
|
25
|
+
...styles.correct('color'),
|
|
26
|
+
}),
|
|
27
|
+
...(correctness === 'incorrect' && {
|
|
28
|
+
...styles.incorrect('fill'),
|
|
29
|
+
...styles.incorrect('color'),
|
|
30
|
+
}),
|
|
31
|
+
...(correctness === 'missing' && {
|
|
32
|
+
...styles.missing('fill'),
|
|
33
|
+
...styles.missing('color'),
|
|
34
|
+
}),
|
|
35
|
+
}));
|
|
11
36
|
|
|
12
37
|
export class RawBp extends React.Component {
|
|
13
38
|
static propTypes = {
|
|
14
|
-
classes: PropTypes.object,
|
|
15
39
|
className: PropTypes.string,
|
|
16
40
|
coordinatesOnHover: PropTypes.bool,
|
|
17
41
|
correctness: PropTypes.string,
|
|
18
42
|
disabled: PropTypes.bool,
|
|
19
43
|
labelNode: PropTypes.object,
|
|
20
|
-
x: PropTypes.number,
|
|
21
|
-
y: PropTypes.number,
|
|
44
|
+
x: PropTypes.number.isRequired,
|
|
45
|
+
y: PropTypes.number.isRequired,
|
|
22
46
|
graphProps: types.GraphPropsType.isRequired,
|
|
47
|
+
onClick: PropTypes.func,
|
|
48
|
+
onTouchStart: PropTypes.func,
|
|
49
|
+
onTouchEnd: PropTypes.func,
|
|
23
50
|
};
|
|
24
51
|
|
|
25
|
-
|
|
26
|
-
super(props);
|
|
27
|
-
this.state = { showCoordinates: false };
|
|
28
|
-
}
|
|
52
|
+
state = { showCoordinates: false };
|
|
29
53
|
|
|
30
54
|
render() {
|
|
31
55
|
const {
|
|
32
|
-
classes,
|
|
33
56
|
className,
|
|
34
57
|
coordinatesOnHover,
|
|
35
58
|
x,
|
|
@@ -38,19 +61,16 @@ export class RawBp extends React.Component {
|
|
|
38
61
|
correctness,
|
|
39
62
|
graphProps,
|
|
40
63
|
labelNode,
|
|
41
|
-
// we need to remove style from props
|
|
42
|
-
// eslint-disable-next-line no-unused-vars,react/prop-types
|
|
43
|
-
style,
|
|
44
64
|
onClick,
|
|
45
|
-
// Refactored RawBp component by isolating onTouchStart and onTouchEnd handlers to the outer circle, resolving erratic touch event behavior.
|
|
46
|
-
// Remaining props are now applied only to the inner circle for improved event handling consistency.
|
|
47
65
|
onTouchStart,
|
|
48
66
|
onTouchEnd,
|
|
49
67
|
...rest
|
|
50
68
|
} = this.props;
|
|
69
|
+
|
|
51
70
|
const { showCoordinates } = this.state;
|
|
52
71
|
const { scale } = graphProps;
|
|
53
72
|
const r = thinnerShapesNeeded(graphProps) ? 5 : 7;
|
|
73
|
+
|
|
54
74
|
let SvgComponent;
|
|
55
75
|
switch (correctness) {
|
|
56
76
|
case 'missing':
|
|
@@ -64,11 +84,11 @@ export class RawBp extends React.Component {
|
|
|
64
84
|
break;
|
|
65
85
|
default:
|
|
66
86
|
SvgComponent = null;
|
|
67
|
-
break;
|
|
68
87
|
}
|
|
69
88
|
|
|
70
89
|
return (
|
|
71
90
|
<>
|
|
91
|
+
{/* Outer invisible circle for easier touch/click */}
|
|
72
92
|
<circle
|
|
73
93
|
style={{ fill: 'transparent', cursor: 'pointer', pointerEvents: 'all' }}
|
|
74
94
|
r={r * 3}
|
|
@@ -80,8 +100,11 @@ export class RawBp extends React.Component {
|
|
|
80
100
|
onTouchEnd={onTouchEnd}
|
|
81
101
|
onClick={onClick}
|
|
82
102
|
/>
|
|
83
|
-
|
|
84
|
-
|
|
103
|
+
{/* Actual point */}
|
|
104
|
+
<StyledPointGroup
|
|
105
|
+
className={className}
|
|
106
|
+
disabled={disabled}
|
|
107
|
+
correctness={correctness}
|
|
85
108
|
onMouseEnter={() => this.setState({ showCoordinates: true })}
|
|
86
109
|
onMouseLeave={() => this.setState({ showCoordinates: false })}
|
|
87
110
|
>
|
|
@@ -91,7 +114,7 @@ export class RawBp extends React.Component {
|
|
|
91
114
|
coordinatesOnHover &&
|
|
92
115
|
showCoordinates &&
|
|
93
116
|
ReactDOM.createPortal(<CoordinatesLabel graphProps={graphProps} x={x} y={y} />, labelNode)}
|
|
94
|
-
</
|
|
117
|
+
</StyledPointGroup>
|
|
95
118
|
</>
|
|
96
119
|
);
|
|
97
120
|
}
|