@pie-lib/graphing-solution-set 2.34.3-next.2 → 2.34.3-next.203

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/CHANGELOG.md +15 -67
  2. package/lib/axis/arrow.js +19 -55
  3. package/lib/axis/arrow.js.map +1 -1
  4. package/lib/axis/axes.js +103 -193
  5. package/lib/axis/axes.js.map +1 -1
  6. package/lib/axis/index.js +1 -6
  7. package/lib/axis/index.js.map +1 -1
  8. package/lib/bg.js +21 -49
  9. package/lib/bg.js.map +1 -1
  10. package/lib/container/actions.js +2 -8
  11. package/lib/container/actions.js.map +1 -1
  12. package/lib/container/index.js +14 -60
  13. package/lib/container/index.js.map +1 -1
  14. package/lib/container/marks.js +1 -6
  15. package/lib/container/marks.js.map +1 -1
  16. package/lib/container/middleware.js +2 -8
  17. package/lib/container/middleware.js.map +1 -1
  18. package/lib/container/reducer.js +1 -8
  19. package/lib/container/reducer.js.map +1 -1
  20. package/lib/coordinates-label.js +23 -55
  21. package/lib/coordinates-label.js.map +1 -1
  22. package/lib/graph-with-controls.js +129 -203
  23. package/lib/graph-with-controls.js.map +1 -1
  24. package/lib/graph.js +61 -126
  25. package/lib/graph.js.map +1 -1
  26. package/lib/grid-setup.js +169 -225
  27. package/lib/grid-setup.js.map +1 -1
  28. package/lib/grid.js +29 -74
  29. package/lib/grid.js.map +1 -1
  30. package/lib/index.js +1 -12
  31. package/lib/index.js.map +1 -1
  32. package/lib/labels.js +85 -185
  33. package/lib/labels.js.map +1 -1
  34. package/lib/mark-label.js +39 -88
  35. package/lib/mark-label.js.map +1 -1
  36. package/lib/toggle-bar.js +155 -243
  37. package/lib/toggle-bar.js.map +1 -1
  38. package/lib/tool-menu.js +93 -200
  39. package/lib/tool-menu.js.map +1 -1
  40. package/lib/tools/index.js +2 -7
  41. package/lib/tools/index.js.map +1 -1
  42. package/lib/tools/line/component.js +48 -62
  43. package/lib/tools/line/component.js.map +1 -1
  44. package/lib/tools/line/index.js +1 -6
  45. package/lib/tools/line/index.js.map +1 -1
  46. package/lib/tools/polygon/component.js +76 -173
  47. package/lib/tools/polygon/component.js.map +1 -1
  48. package/lib/tools/polygon/index.js +6 -23
  49. package/lib/tools/polygon/index.js.map +1 -1
  50. package/lib/tools/polygon/line.js +48 -85
  51. package/lib/tools/polygon/line.js.map +1 -1
  52. package/lib/tools/polygon/polygon.js +62 -102
  53. package/lib/tools/polygon/polygon.js.map +1 -1
  54. package/lib/tools/shared/arrow-head.js +7 -20
  55. package/lib/tools/shared/arrow-head.js.map +1 -1
  56. package/lib/tools/shared/line/index.js +89 -185
  57. package/lib/tools/shared/line/index.js.map +1 -1
  58. package/lib/tools/shared/line/line-path.js +71 -95
  59. package/lib/tools/shared/line/line-path.js.map +1 -1
  60. package/lib/tools/shared/line/with-root-edge.js +22 -56
  61. package/lib/tools/shared/line/with-root-edge.js.map +1 -1
  62. package/lib/tools/shared/point/arrow-point.js +18 -45
  63. package/lib/tools/shared/point/arrow-point.js.map +1 -1
  64. package/lib/tools/shared/point/arrow.js +16 -42
  65. package/lib/tools/shared/point/arrow.js.map +1 -1
  66. package/lib/tools/shared/point/base-point.js +44 -58
  67. package/lib/tools/shared/point/base-point.js.map +1 -1
  68. package/lib/tools/shared/point/index.js +38 -52
  69. package/lib/tools/shared/point/index.js.map +1 -1
  70. package/lib/tools/shared/styles.js +8 -31
  71. package/lib/tools/shared/styles.js.map +1 -1
  72. package/lib/tools/shared/types.js +1 -5
  73. package/lib/tools/shared/types.js.map +1 -1
  74. package/lib/undo-redo.js +27 -67
  75. package/lib/undo-redo.js.map +1 -1
  76. package/lib/use-debounce.js +4 -11
  77. package/lib/use-debounce.js.map +1 -1
  78. package/lib/utils.js +56 -131
  79. package/lib/utils.js.map +1 -1
  80. package/package.json +26 -31
  81. package/src/__tests__/graph-with-controls.test.jsx +23 -10
  82. package/src/__tests__/graph.test.jsx +36 -171
  83. package/src/__tests__/grid.test.jsx +9 -6
  84. package/src/__tests__/labels.test.jsx +11 -8
  85. package/src/__tests__/mark-label.test.jsx +15 -17
  86. package/src/__tests__/toggle-bar.test.jsx +46 -17
  87. package/src/__tests__/tool-menu.test.jsx +12 -8
  88. package/src/__tests__/undo-redo.test.jsx +9 -8
  89. package/src/__tests__/utils.js +3 -0
  90. package/src/axis/__tests__/arrow.test.jsx +21 -17
  91. package/src/axis/__tests__/axes.test.jsx +117 -155
  92. package/src/axis/arrow.jsx +7 -12
  93. package/src/axis/axes.jsx +41 -51
  94. package/src/coordinates-label.jsx +13 -18
  95. package/src/graph-with-controls.jsx +90 -93
  96. package/src/grid-setup.jsx +203 -205
  97. package/src/grid.jsx +2 -4
  98. package/src/labels.jsx +84 -125
  99. package/src/mark-label.jsx +14 -25
  100. package/src/toggle-bar.jsx +135 -163
  101. package/src/tool-menu.jsx +136 -195
  102. package/src/tools/line/__tests__/component.test.jsx +7 -7
  103. package/src/tools/line/component.jsx +29 -29
  104. package/src/tools/polygon/__tests__/component.test.jsx +13 -152
  105. package/src/tools/polygon/__tests__/line.test.jsx +7 -9
  106. package/src/tools/polygon/__tests__/polygon.test.jsx +8 -8
  107. package/src/tools/polygon/component.jsx +2 -4
  108. package/src/tools/polygon/line.jsx +26 -24
  109. package/src/tools/polygon/polygon.jsx +35 -40
  110. package/src/tools/shared/__tests__/arrow-head.test.jsx +16 -17
  111. package/src/tools/shared/line/__tests__/index.test.jsx +26 -163
  112. package/src/tools/shared/line/__tests__/line-path.test.jsx +9 -9
  113. package/src/tools/shared/line/__tests__/with-root-edge.test.jsx +14 -24
  114. package/src/tools/shared/line/index.jsx +3 -3
  115. package/src/tools/shared/line/line-path.jsx +51 -48
  116. package/src/tools/shared/line/with-root-edge.jsx +1 -1
  117. package/src/tools/shared/point/__tests__/arrow-point.test.jsx +15 -11
  118. package/src/tools/shared/point/__tests__/base-point.test.jsx +14 -11
  119. package/src/tools/shared/point/base-point.jsx +33 -6
  120. package/src/tools/shared/point/index.jsx +30 -32
  121. package/src/undo-redo.jsx +16 -24
  122. package/esm/index.css +0 -847
  123. package/esm/index.js +0 -233259
  124. package/esm/index.js.map +0 -1
  125. package/esm/package.json +0 -3
  126. package/src/__tests__/__snapshots__/graph-with-controls.test.jsx.snap +0 -114
  127. package/src/__tests__/__snapshots__/graph.test.jsx.snap +0 -213
  128. package/src/__tests__/__snapshots__/grid.test.jsx.snap +0 -54
  129. package/src/__tests__/__snapshots__/labels.test.jsx.snap +0 -30
  130. package/src/__tests__/__snapshots__/mark-label.test.jsx.snap +0 -37
  131. package/src/__tests__/__snapshots__/toggle-bar.test.jsx.snap +0 -7
  132. package/src/__tests__/__snapshots__/tool-menu.test.jsx.snap +0 -35
  133. package/src/__tests__/__snapshots__/undo-redo.test.jsx.snap +0 -15
  134. package/src/axis/__tests__/__snapshots__/arrow.test.jsx.snap +0 -33
  135. package/src/axis/__tests__/__snapshots__/axes.test.jsx.snap +0 -122
  136. package/src/tools/line/__tests__/__snapshots__/component.test.jsx.snap +0 -20
  137. package/src/tools/polygon/__tests__/__snapshots__/component.test.jsx.snap +0 -94
  138. package/src/tools/polygon/__tests__/__snapshots__/line.test.jsx.snap +0 -44
  139. package/src/tools/polygon/__tests__/__snapshots__/polygon.test.jsx.snap +0 -53
  140. package/src/tools/shared/__tests__/__snapshots__/arrow-head.test.jsx.snap +0 -32
  141. package/src/tools/shared/line/__tests__/__snapshots__/index.test.jsx.snap +0 -360
  142. package/src/tools/shared/line/__tests__/__snapshots__/line-path.test.jsx.snap +0 -57
  143. package/src/tools/shared/line/__tests__/__snapshots__/with-root-edge.test.jsx.snap +0 -63
  144. package/src/tools/shared/point/__tests__/__snapshots__/arrow-point.test.jsx.snap +0 -55
  145. package/src/tools/shared/point/__tests__/__snapshots__/base-point.test.jsx.snap +0 -43
@@ -1,70 +1,85 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
- import { withStyles } from '@material-ui/core/styles';
4
- import cn from 'classnames';
5
- import Button from '@material-ui/core/Button';
3
+ import { styled } from '@mui/material/styles';
4
+ import Button from '@mui/material/Button';
6
5
  import { color } from '@pie-lib/render-ui';
7
6
  import { allTools } from './tools';
8
- import { withDragContext, DragSource, DropTarget } from '@pie-lib/drag';
7
+ import { DragProvider } from '@pie-lib/drag';
8
+ import { useDraggable, useDroppable } from '@dnd-kit/core';
9
+ import { CSS } from '@dnd-kit/utilities';
10
+ import { arrayMove } from '@dnd-kit/sortable';
9
11
  import Translator from '@pie-lib/translator';
10
12
 
11
13
  const { translator } = Translator;
12
14
 
13
- const buttonStyles = () => ({
14
- root: {
15
- color: color.text(),
16
- },
17
- selected: {
18
- backgroundColor: color.background(),
15
+ const StyledMiniButton = styled(Button, {
16
+ shouldForwardProp: (prop) => !['selected'].includes(prop),
17
+ })(({ selected, disabled }) => ({
18
+ color: color.text(),
19
+ backgroundColor: color.background(),
20
+ ...(selected && {
19
21
  border: `1px solid ${color.secondary()}`,
20
- },
21
- notSelected: {
22
+ }),
23
+ ...(!selected && {
22
24
  '& span': {
23
25
  color: color.primary(),
24
26
  },
25
- backgroundColor: color.background(),
26
- },
27
- disabled: {
27
+ }),
28
+ ...(disabled && {
28
29
  '& span': {
29
30
  color: color.primary(),
30
31
  },
31
32
  backgroundColor: color.disabled(),
32
- },
33
- });
33
+ }),
34
+ }));
34
35
 
35
- export const MiniButton = withStyles(buttonStyles)((props) => {
36
- const { disabled, classes, className, selected, value, onClick, language } = props;
36
+ export const MiniButton = (props) => {
37
+ const { disabled, className, selected, value, onClick, language } = props;
37
38
  const translatorKey = value.toLowerCase();
38
39
 
39
40
  return (
40
- <Button
41
+ <StyledMiniButton
41
42
  size="small"
42
43
  disabled={disabled}
43
- className={cn(classes.root, selected && classes.selected, className)}
44
- classes={{ disabled: cn(disabled && classes.disabled) }}
44
+ className={className}
45
+ selected={selected}
45
46
  value={value}
46
47
  key={value}
47
48
  variant="outlined"
48
49
  onClick={(e) => onClick({ ...e, buttonValue: value })}
49
50
  >
50
51
  {translator.t(`graphing.${translatorKey}`, { lng: language })}
51
- </Button>
52
+ </StyledMiniButton>
52
53
  );
53
- });
54
+ };
54
55
 
55
56
  MiniButton.propTypes = {
56
57
  disabled: PropTypes.bool,
57
- classes: PropTypes.object,
58
58
  className: PropTypes.string,
59
59
  disabledClassName: PropTypes.string,
60
60
  selected: PropTypes.bool,
61
61
  value: PropTypes.string,
62
62
  onClick: PropTypes.func,
63
+ language: PropTypes.string,
63
64
  };
64
65
 
66
+ const StyledToolsContainer = styled('div')(() => ({
67
+ display: 'flex',
68
+ flexWrap: 'wrap',
69
+ }));
70
+
71
+ const StyledButton = styled(MiniButton)(({ theme }) => ({
72
+ marginRight: theme.spacing(0.5),
73
+ marginBottom: theme.spacing(0.5),
74
+ color: color.text(),
75
+ }));
76
+
77
+ const StyledWrapper = styled('div')({
78
+ position: 'relative',
79
+ });
80
+
65
81
  export class ToggleBar extends React.Component {
66
82
  static propTypes = {
67
- classes: PropTypes.object.isRequired,
68
83
  className: PropTypes.string,
69
84
  options: PropTypes.arrayOf(PropTypes.string),
70
85
  selectedToolType: PropTypes.string,
@@ -81,162 +96,119 @@ export class ToggleBar extends React.Component {
81
96
 
82
97
  moveTool = (dragIndex, hoverIndex) => {
83
98
  const { options, onChangeToolsOrder } = this.props;
84
- const dragged = options[dragIndex];
85
-
86
- options.splice(dragIndex, 1);
87
- options.splice(hoverIndex, 0, dragged);
99
+ const newOptions = arrayMove(options, dragIndex, hoverIndex);
88
100
 
89
- onChangeToolsOrder(options);
101
+ onChangeToolsOrder(newOptions);
90
102
  };
91
103
 
92
- render() {
93
- const { classes, className, disabled, options, selectedToolType, draggableTools, language } = this.props;
104
+ handleDragEnd = (event) => {
105
+ const { active, over } = event;
94
106
 
95
- return (
96
- <div className={cn(className, classes.toolsContainer)}>
97
- {(options || []).map((option, index) => {
98
- if ((allTools || []).includes(option)) {
99
- const isSelected = option === selectedToolType;
100
- const toolRef = React.createRef();
101
-
102
- return (
103
- <DragTool
104
- key={option}
105
- index={index}
106
- draggable={draggableTools}
107
- moveTool={this.moveTool}
108
- classes={classes}
109
- toolRef={toolRef}
110
- >
111
- <MiniButton
112
- className={cn(classes.button, isSelected && classes.selected)}
113
- disabled={disabled}
114
- disableRipple={true}
115
- onClick={this.select}
116
- value={option}
117
- selected={isSelected}
118
- language={language}
119
- />
120
- </DragTool>
121
- );
122
- }
123
- })}
124
- </div>
125
- );
126
- }
127
- }
128
-
129
- const styles = (theme) => ({
130
- toolsContainer: {
131
- display: 'flex',
132
- flexWrap: 'wrap',
133
- },
134
- button: {
135
- marginRight: theme.spacing.unit / 2,
136
- marginBottom: theme.spacing.unit / 2,
137
- color: color.text(),
138
- },
139
- under: {
140
- position: 'absolute',
141
- top: 0,
142
- left: 0,
143
- zIndex: -1,
144
- pointerEvents: 'none',
145
- },
146
- wrapper: {
147
- position: 'relative',
148
- },
149
- hidden: {
150
- opacity: 0,
151
- },
152
- });
107
+ if (!over || !active) return;
153
108
 
154
- export default withDragContext(withStyles(styles)(ToggleBar));
109
+ const activeData = active.data.current;
110
+ const overData = over.data.current;
155
111
 
156
- const DRAG_TYPE = 'tool';
112
+ if (activeData?.type === 'tool' && overData?.type === 'tool') {
113
+ const dragIndex = activeData.index;
114
+ const hoverIndex = overData.index;
157
115
 
158
- export class Item extends React.Component {
159
- static propTypes = {
160
- classes: PropTypes.object.isRequired,
161
- className: PropTypes.string,
162
- children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),
163
- connectDragSource: PropTypes.func.isRequired,
164
- connectDragPreview: PropTypes.func.isRequired,
165
- connectDropTarget: PropTypes.func.isRequired,
166
- isDragging: PropTypes.bool,
167
- toolRef: PropTypes.any,
116
+ if (dragIndex !== hoverIndex) {
117
+ this.moveTool(dragIndex, hoverIndex);
118
+ }
119
+ }
168
120
  };
169
121
 
170
- static defaultProps = {};
171
-
172
122
  render() {
173
- const {
174
- classes,
175
- children,
176
- connectDragSource,
177
- connectDropTarget,
178
- connectDragPreview,
179
- isDragging,
180
- toolRef,
181
- } = this.props;
123
+ const { className, disabled, options, selectedToolType, draggableTools, language } = this.props;
182
124
 
183
125
  return (
184
- <div className={classes.wrapper} ref={toolRef}>
185
- {connectDragSource(connectDropTarget(<div className={isDragging && classes.hidden}>{children}</div>))}
186
- {connectDragPreview(<div className={classes.under}>{children}</div>)}
187
- </div>
126
+ <DragProvider onDragEnd={this.handleDragEnd}>
127
+ <StyledToolsContainer className={className}>
128
+ {(options || []).map((option, index) => {
129
+ if ((allTools || []).includes(option)) {
130
+ const isSelected = option === selectedToolType;
131
+ const toolRef = React.createRef();
132
+
133
+ return (
134
+ <DragTool
135
+ key={option}
136
+ index={index}
137
+ value={option}
138
+ draggable={draggableTools}
139
+ moveTool={this.moveTool}
140
+ toolRef={toolRef}
141
+ >
142
+ <StyledButton
143
+ disabled={disabled}
144
+ disableRipple={true}
145
+ onClick={this.select}
146
+ value={option}
147
+ selected={isSelected}
148
+ language={language}
149
+ />
150
+ </DragTool>
151
+ );
152
+ }
153
+ })}
154
+ </StyledToolsContainer>
155
+ </DragProvider>
188
156
  );
189
157
  }
190
158
  }
191
159
 
192
- const itemSource = {
193
- canDrag(props) {
194
- return props.draggable;
195
- },
196
- beginDrag(props) {
197
- return {
198
- index: props.index,
199
- };
200
- },
201
- };
202
-
203
- const itemTarget = {
204
- hover(props, monitor) {
205
- const dragIndex = monitor.getItem().index;
206
- const { toolRef, index: hoverIndex } = props;
207
-
208
- if (dragIndex === hoverIndex || !toolRef.current) {
209
- return;
160
+ // DragTool functional component using @dnd-kit hooks
161
+ function DragTool({ children, index, draggable, toolRef, value }) {
162
+ const { attributes, listeners, setNodeRef: setDragNodeRef, transform, transition, isDragging } = useDraggable({
163
+ id: `tool-${value}-${index}`,
164
+ disabled: !draggable,
165
+ data: {
166
+ type: 'tool',
167
+ index,
168
+ value,
169
+ },
170
+ });
171
+
172
+ const { setNodeRef: setDropNodeRef } = useDroppable({
173
+ id: `drop-tool-${value}-${index}`,
174
+ data: {
175
+ type: 'tool',
176
+ index,
177
+ accepts: ['tool'],
178
+ },
179
+ });
180
+
181
+ // Combine refs
182
+ const setNodeRef = (node) => {
183
+ setDragNodeRef(node);
184
+ setDropNodeRef(node);
185
+ if (toolRef?.current) {
186
+ toolRef.current = node;
210
187
  }
188
+ };
211
189
 
212
- const hoverBoundingRect = toolRef.current?.getBoundingClientRect();
213
- const hoverMiddleX = (hoverBoundingRect.right - hoverBoundingRect.left) / 2;
214
- const clientOffset = monitor.getClientOffset();
215
- const hoverClientX = clientOffset.x - hoverBoundingRect.left;
216
-
217
- if (dragIndex < hoverIndex && hoverClientX < hoverMiddleX) {
218
- return;
219
- }
190
+ const style = {
191
+ transform: CSS.Transform.toString(transform),
192
+ transition,
193
+ opacity: isDragging ? 0.5 : 1,
194
+ };
220
195
 
221
- if (dragIndex > hoverIndex && hoverClientX > hoverMiddleX) {
222
- return;
223
- }
196
+ return (
197
+ <StyledWrapper ref={setNodeRef} style={style}>
198
+ <div {...attributes} {...listeners}>
199
+ {children}
200
+ </div>
201
+ </StyledWrapper>
202
+ );
203
+ }
224
204
 
225
- props.moveTool(dragIndex, hoverIndex);
226
- monitor.getItem().index = hoverIndex;
227
- },
205
+ DragTool.propTypes = {
206
+ children: PropTypes.node,
207
+ index: PropTypes.number,
208
+ draggable: PropTypes.bool,
209
+ moveTool: PropTypes.func,
210
+ toolRef: PropTypes.object,
211
+ value: PropTypes.string,
228
212
  };
229
213
 
230
- const collectTarget = (connect) => ({ connectDropTarget: connect.dropTarget() });
231
-
232
- const collectSource = (connect, monitor) => ({
233
- connectDragSource: connect.dragSource(),
234
- connectDragPreview: connect.dragPreview(),
235
- isDragging: monitor.isDragging(),
236
- });
237
-
238
- const DragTool = DropTarget(
239
- DRAG_TYPE,
240
- itemTarget,
241
- collectTarget,
242
- )(DragSource(DRAG_TYPE, itemSource, collectSource)(Item));
214
+ export default ToggleBar;