@pie-lib/graphing-solution-set 2.16.0-beta.0 → 2.16.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.
Files changed (81) hide show
  1. package/CHANGELOG.md +165 -1
  2. package/package.json +14 -9
  3. package/src/axis/axes.jsx +1 -1
  4. package/src/coordinates-label.jsx +1 -1
  5. package/src/graph-with-controls.jsx +1 -1
  6. package/src/grid-setup.jsx +5 -8
  7. package/src/labels.jsx +1 -1
  8. package/src/mark-label.jsx +1 -1
  9. package/src/toggle-bar.jsx +1 -1
  10. package/src/tools/polygon/line.jsx +1 -1
  11. package/src/tools/polygon/polygon.jsx +1 -1
  12. package/src/tools/shared/arrow-head.jsx +1 -1
  13. package/src/tools/shared/line/index.jsx +1 -1
  14. package/src/tools/shared/line/line-path.jsx +1 -1
  15. package/src/tools/shared/point/base-point.jsx +1 -1
  16. package/src/tools/shared/point/index.jsx +1 -1
  17. package/src/tools/shared/styles.js +1 -1
  18. package/src/undo-redo.jsx +1 -1
  19. package/lib/__tests__/graph-with-controls.test.js +0 -191
  20. package/lib/__tests__/graph.test.js +0 -290
  21. package/lib/__tests__/grid.test.js +0 -40
  22. package/lib/__tests__/labels.test.js +0 -59
  23. package/lib/__tests__/mark-label.test.js +0 -154
  24. package/lib/__tests__/toggle-bar.test.js +0 -54
  25. package/lib/__tests__/tool-menu.test.js +0 -43
  26. package/lib/__tests__/undo-redo.test.js +0 -42
  27. package/lib/__tests__/use-debounce.test.js +0 -28
  28. package/lib/__tests__/utils.js +0 -72
  29. package/lib/__tests__/utils.test.js +0 -133
  30. package/lib/axis/__tests__/arrow.test.js +0 -68
  31. package/lib/axis/__tests__/axes.test.js +0 -214
  32. package/lib/axis/arrow.js +0 -115
  33. package/lib/axis/axes.js +0 -415
  34. package/lib/axis/index.js +0 -26
  35. package/lib/bg.js +0 -139
  36. package/lib/container/actions.js +0 -24
  37. package/lib/container/index.js +0 -166
  38. package/lib/container/marks.js +0 -27
  39. package/lib/container/middleware.js +0 -25
  40. package/lib/container/reducer.js +0 -25
  41. package/lib/coordinates-label.js +0 -109
  42. package/lib/graph-with-controls.js +0 -372
  43. package/lib/graph.js +0 -419
  44. package/lib/grid-setup.js +0 -462
  45. package/lib/grid.js +0 -176
  46. package/lib/index.js +0 -51
  47. package/lib/labels.js +0 -299
  48. package/lib/mark-label.js +0 -208
  49. package/lib/toggle-bar.js +0 -336
  50. package/lib/tool-menu.js +0 -325
  51. package/lib/tools/index.js +0 -29
  52. package/lib/tools/line/__tests__/component.test.js +0 -56
  53. package/lib/tools/line/component.js +0 -106
  54. package/lib/tools/line/index.js +0 -16
  55. package/lib/tools/polygon/__tests__/component.test.js +0 -245
  56. package/lib/tools/polygon/__tests__/index.test.js +0 -95
  57. package/lib/tools/polygon/__tests__/line.test.js +0 -43
  58. package/lib/tools/polygon/__tests__/polygon.test.js +0 -73
  59. package/lib/tools/polygon/component.js +0 -457
  60. package/lib/tools/polygon/index.js +0 -106
  61. package/lib/tools/polygon/line.js +0 -151
  62. package/lib/tools/polygon/polygon.js +0 -171
  63. package/lib/tools/shared/__tests__/arrow-head.test.js +0 -62
  64. package/lib/tools/shared/arrow-head.js +0 -75
  65. package/lib/tools/shared/line/__tests__/index.test.js +0 -291
  66. package/lib/tools/shared/line/__tests__/line-path.test.js +0 -78
  67. package/lib/tools/shared/line/__tests__/with-root-edge.test.js +0 -122
  68. package/lib/tools/shared/line/index.js +0 -637
  69. package/lib/tools/shared/line/line-path.js +0 -145
  70. package/lib/tools/shared/line/with-root-edge.js +0 -155
  71. package/lib/tools/shared/point/__tests__/arrow-point.test.js +0 -137
  72. package/lib/tools/shared/point/__tests__/base-point.test.js +0 -134
  73. package/lib/tools/shared/point/arrow-point.js +0 -113
  74. package/lib/tools/shared/point/arrow.js +0 -96
  75. package/lib/tools/shared/point/base-point.js +0 -151
  76. package/lib/tools/shared/point/index.js +0 -94
  77. package/lib/tools/shared/styles.js +0 -49
  78. package/lib/tools/shared/types.js +0 -19
  79. package/lib/undo-redo.js +0 -107
  80. package/lib/use-debounce.js +0 -32
  81. package/lib/utils.js +0 -314
package/CHANGELOG.md CHANGED
@@ -3,7 +3,15 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
- # 2.16.0-beta.0 (2025-07-15)
6
+ # 2.16.0 (2025-07-31)
7
+
8
+ **Note:** Version bump only for package @pie-lib/graphing-solution-set
9
+
10
+
11
+
12
+
13
+
14
+ # 2.17.0 (2025-07-31)
7
15
 
8
16
  **Note:** Version bump only for package @pie-lib/graphing-solution-set
9
17
 
@@ -11,6 +19,162 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
11
19
 
12
20
 
13
21
 
22
+ # 2.16.0 (2025-07-31)
23
+
24
+ **Note:** Version bump only for package @pie-lib/graphing-solution-set
25
+
26
+
27
+
28
+
29
+
30
+ # 2.15.0-beta.8 (2025-07-25)
31
+
32
+ **Note:** Version bump only for package @pie-lib/graphing-solution-set
33
+
34
+
35
+
36
+
37
+
38
+ # 2.15.0-beta.7 (2025-07-25)
39
+
40
+ **Note:** Version bump only for package @pie-lib/graphing-solution-set
41
+
42
+
43
+
44
+
45
+
46
+ # 2.15.0-beta.7 (2025-07-25)
47
+
48
+ **Note:** Version bump only for package @pie-lib/graphing-solution-set
49
+
50
+
51
+
52
+
53
+
54
+ # 2.15.0-beta.6 (2025-07-25)
55
+
56
+ **Note:** Version bump only for package @pie-lib/graphing-solution-set
57
+
58
+
59
+
60
+
61
+
62
+ # 2.15.0-beta.6 (2025-07-25)
63
+
64
+ **Note:** Version bump only for package @pie-lib/graphing-solution-set
65
+
66
+
67
+
68
+
69
+
70
+ # 2.15.0-beta.5 (2025-07-25)
71
+
72
+ **Note:** Version bump only for package @pie-lib/graphing-solution-set
73
+
74
+
75
+
76
+
77
+
78
+ # 2.15.0-beta.5 (2025-07-25)
79
+
80
+ **Note:** Version bump only for package @pie-lib/graphing-solution-set
81
+
82
+
83
+
84
+
85
+
86
+ # 2.15.0-beta.4 (2025-07-25)
87
+
88
+ **Note:** Version bump only for package @pie-lib/graphing-solution-set
89
+
90
+
91
+
92
+
93
+
94
+ # 2.15.0-beta.3 (2025-07-25)
95
+
96
+ **Note:** Version bump only for package @pie-lib/graphing-solution-set
97
+
98
+
99
+
100
+
101
+
102
+ # 2.15.0-beta.4 (2025-07-23)
103
+
104
+ **Note:** Version bump only for package @pie-lib/graphing-solution-set
105
+
106
+
107
+
108
+
109
+
110
+ # 2.15.0-beta.3 (2025-07-23)
111
+
112
+ **Note:** Version bump only for package @pie-lib/graphing-solution-set
113
+
114
+
115
+
116
+
117
+
118
+ # 2.15.0-beta.3 (2025-07-20)
119
+
120
+ **Note:** Version bump only for package @pie-lib/graphing-solution-set
121
+
122
+
123
+
124
+
125
+
126
+ # 2.15.0-beta.2 (2025-07-20)
127
+
128
+ **Note:** Version bump only for package @pie-lib/graphing-solution-set
129
+
130
+
131
+
132
+
133
+
134
+ # 2.15.0-beta.1 (2025-07-20)
135
+
136
+ **Note:** Version bump only for package @pie-lib/graphing-solution-set
137
+
138
+
139
+
140
+
141
+
142
+ # 2.15.0-beta.2 (2025-07-20)
143
+
144
+ **Note:** Version bump only for package @pie-lib/graphing-solution-set
145
+
146
+
147
+
148
+
149
+
150
+ # 2.15.0-beta.1 (2025-07-20)
151
+
152
+ **Note:** Version bump only for package @pie-lib/graphing-solution-set
153
+
154
+
155
+
156
+
157
+
158
+ # 2.15.0-beta.1 (2025-07-20)
159
+
160
+ **Note:** Version bump only for package @pie-lib/graphing-solution-set
161
+
162
+
163
+
164
+
165
+
166
+ # 2.15.0-beta.0 (2025-07-20)
167
+
168
+ **Note:** Version bump only for package @pie-lib/graphing-solution-set
169
+
170
+
171
+
172
+
173
+
174
+ # 2.16.0-beta.0 (2025-07-15)
175
+
176
+ **Note:** Version bump only for package @pie-lib/graphing-solution-set
177
+
14
178
  # 2.15.0-beta.0 (2025-07-15)
15
179
 
16
180
  **Note:** Version bump only for package @pie-lib/graphing-solution-set
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "2.16.0-beta.0",
6
+ "version": "2.16.0",
7
7
  "description": "Graphing components",
8
8
  "keywords": [
9
9
  "react",
@@ -18,15 +18,19 @@
18
18
  "dependencies": {
19
19
  "@mapbox/point-geometry": "^0.1.0",
20
20
  "@material-ui/core": "^3.8.3",
21
- "@pie-lib/drag": "^2.4.0-beta.0",
22
- "@pie-lib/graphing-utils": "^1.3.0-beta.0",
23
- "@pie-lib/plot": "^2.9.0-beta.0",
24
- "@pie-lib/render-ui": "^4.17.0-beta.0",
25
- "@pie-lib/translator": "^2.5.0-beta.0",
21
+ "@material-ui/icons": "^3.0.2",
22
+ "@pie-lib/drag": "^2.5.0",
23
+ "@pie-lib/editable-html": "^11.4.0",
24
+ "@pie-lib/graphing-utils": "^1.4.0",
25
+ "@pie-lib/plot": "^2.10.0",
26
+ "@pie-lib/tools": "^0.12.0",
27
+ "@pie-lib/translator": "^2.6.0",
26
28
  "@vx/axis": "^0.0.189",
27
29
  "@vx/clip-path": "^0.0.189",
30
+ "@vx/curve": "^0.0.189",
28
31
  "@vx/event": "^0.0.189",
29
32
  "@vx/grid": "^0.0.189",
33
+ "@vx/group": "^0.0.183",
30
34
  "@vx/point": "^0.0.189",
31
35
  "@vx/shape": "^0.0.189",
32
36
  "classnames": "^2.2.6",
@@ -35,16 +39,17 @@
35
39
  "debug": "^4.1.1",
36
40
  "invariant": "^2.2.4",
37
41
  "lodash": "^4.17.11",
42
+ "prop-types": "^15.7.2",
38
43
  "react": "^16.8.1",
44
+ "react-dom": "^16.9.0",
39
45
  "react-draggable": "^3.3.0",
40
46
  "react-input-autosize": "^2.2.1",
41
47
  "react-redux": "^6.0.0",
42
- "redux": "^4.0.1",
43
- "redux-undo": "beta"
48
+ "redux": "^4.0.1"
44
49
  },
45
50
  "peerDependencies": {
46
51
  "react": "^16.8.1"
47
52
  },
48
- "gitHead": "3818c24530f62b5bb9be7a2c6aa5428f13a17e0a",
53
+ "gitHead": "889a13bfea2c768b8a3a6eabfc6fe7b7725aa832",
49
54
  "scripts": {}
50
55
  }
package/src/axis/axes.jsx CHANGED
@@ -5,7 +5,7 @@ import PropTypes from 'prop-types';
5
5
  import Arrow from './arrow';
6
6
  import { withStyles } from '@material-ui/core';
7
7
  import { countWords, findLongestWord, amountToIncreaseWidth, getTickValues } from '../utils';
8
- import { color, Readable } from '@pie-lib/render-ui';
8
+ import { color, Readable } from '../../../render-ui/src/index';
9
9
 
10
10
  export const AxisPropTypes = {
11
11
  includeArrows: PropTypes.object,
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { types } from '@pie-lib/plot';
4
- import { color } from '@pie-lib/render-ui';
4
+ import { color } from '../../render-ui/src/index';
5
5
  import { withStyles } from '@material-ui/core/styles';
6
6
  import InputBase from '@material-ui/core/InputBase';
7
7
  import { roundNumber } from './utils';
@@ -4,7 +4,7 @@ import { withStyles } from '@material-ui/core/styles';
4
4
  import classNames from 'classnames';
5
5
  import uniq from 'lodash/uniq';
6
6
  import isString from 'lodash/isString';
7
- import { color } from '@pie-lib/render-ui';
7
+ import { color } from '../../render-ui/src/index';
8
8
  import ToolMenu from './tool-menu';
9
9
  import Graph, { graphPropTypes } from './graph';
10
10
  import UndoRedo from './undo-redo';
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
- import { color, InputContainer } from '@pie-lib/render-ui';
3
+ import { color, InputContainer } from '../../render-ui/src/index';
4
4
  import { withStyles } from '@material-ui/core/styles';
5
5
  import ExpansionPanelSummary from '@material-ui/core/ExpansionPanelSummary';
6
6
  import Typography from '@material-ui/core/Typography';
@@ -310,16 +310,13 @@ const GridSetup = (props) => {
310
310
  <ExpansionPanelDetails>
311
311
  <div className={classes.content}>
312
312
  {includeAxesEnabled && (
313
- <Toggle
314
- label="Include axes and labels?"
315
- toggle={onIncludeAxes}
316
- checked={includeAxes} />
313
+ <Toggle label="Include axes and labels?" toggle={onIncludeAxes} checked={includeAxes} />
317
314
  )}
318
315
  {standardGridEnabled && (
319
316
  <Toggle
320
- label="Constrain to standard coordinate grid?"
321
- toggle={onStandardGridChanged}
322
- checked={standardGrid}
317
+ label="Constrain to standard coordinate grid?"
318
+ toggle={onStandardGridChanged}
319
+ checked={standardGrid}
323
320
  />
324
321
  )}
325
322
  {includeAxes ? axesConfig : gridlinesConfig}
package/src/labels.jsx CHANGED
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { withStyles } from '@material-ui/core/styles';
4
4
  import { types } from '@pie-lib/plot';
5
- import { color, Readable } from '@pie-lib/render-ui';
5
+ import { color, Readable } from '../../render-ui/src/index';
6
6
  import EditableHtml from '@pie-lib/editable-html';
7
7
  import cn from 'classnames';
8
8
 
@@ -5,7 +5,7 @@ import { withStyles } from '@material-ui/core/styles';
5
5
  import AutosizeInput from 'react-input-autosize';
6
6
  import { useDebounce } from './use-debounce';
7
7
  import { types } from '@pie-lib/plot';
8
- import { color } from '@pie-lib/render-ui';
8
+ import { color } from '../../render-ui/src/index';
9
9
 
10
10
  const styles = (theme) => ({
11
11
  input: {
@@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
3
3
  import { withStyles } from '@material-ui/core/styles';
4
4
  import cn from 'classnames';
5
5
  import Button from '@material-ui/core/Button';
6
- import { color } from '@pie-lib/render-ui';
6
+ import { color } from '../../render-ui/src/index';
7
7
  import { allTools } from './tools';
8
8
  import { withDragContext, DragSource, DropTarget } from '@pie-lib/drag';
9
9
  import Translator from '@pie-lib/translator';
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { withStyles } from '@material-ui/core/styles';
4
4
  import { types, gridDraggable } from '@pie-lib/plot';
5
- import { color } from '@pie-lib/render-ui';
5
+ import { color } from '../../../../render-ui/src/index';
6
6
  import * as utils from '../../utils';
7
7
  import classNames from 'classnames';
8
8
  import { correct, disabled, incorrect, missing } from '../shared/styles';
@@ -4,7 +4,7 @@ import { withStyles } from '@material-ui/core/styles';
4
4
  import { gridDraggable, types } from '@pie-lib/plot';
5
5
  import * as utils from '../../utils';
6
6
  import classNames from 'classnames';
7
- import { color } from '@pie-lib/render-ui';
7
+ import { color } from '../../../../render-ui/src/index';
8
8
  import { fade } from '@material-ui/core/styles/colorManipulator';
9
9
  import { correct, disabled, incorrect } from '../shared/styles';
10
10
 
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
- import { color } from '@pie-lib/render-ui';
3
+ import { color } from '../../../../render-ui/src/index';
4
4
 
5
5
  export const ArrowHead = ({ size, transform, points }) => (
6
6
  <polygon points={points || `0,0 ${size},${size / 2} 0,${size}`} transform={transform} />
@@ -8,7 +8,7 @@ import { disabled, correct, incorrect, missing } from '../styles';
8
8
  import ReactDOM from 'react-dom';
9
9
  import MarkLabel from '../../../mark-label';
10
10
  import isEmpty from 'lodash/isEmpty';
11
- import { color } from '@pie-lib/render-ui';
11
+ import { color } from '../../../../../render-ui/src/index';
12
12
  import { getMiddleOfTwoPoints, equalPoints, sameAxes } from '../../../utils';
13
13
 
14
14
  export const lineTool = (type, Component) => () => ({
@@ -5,7 +5,7 @@ import { types } from '@pie-lib/plot';
5
5
  import classNames from 'classnames';
6
6
  import { disabled, correct, incorrect, missing } from '../styles';
7
7
  import * as vx from '@vx/shape';
8
- import { color } from '@pie-lib/render-ui';
8
+ import { color } from '../../../../../render-ui/src/index';
9
9
 
10
10
  export class RawLinePath extends React.Component {
11
11
  static propTypes = {
@@ -5,7 +5,7 @@ import { types } from '@pie-lib/plot';
5
5
  import CoordinatesLabel from '../../../coordinates-label';
6
6
  import ReactDOM from 'react-dom';
7
7
  import { thinnerShapesNeeded } from '../../../utils';
8
- import { color } from '@pie-lib/render-ui';
8
+ import { color } from '../../../../../render-ui/src/index';
9
9
 
10
10
  export class RawBp extends React.Component {
11
11
  static propTypes = {
@@ -4,7 +4,7 @@ import * as utils from '../../../utils';
4
4
  import { disabled, correct, incorrect, missing } from '../styles';
5
5
  import { RawBp } from './base-point';
6
6
  import { RawArrow } from './arrow-point';
7
- import { color } from '@pie-lib/render-ui';
7
+ import { color } from '../../../../../render-ui/src/index';
8
8
  import BaseArrow from './arrow';
9
9
 
10
10
  const opts = {
@@ -1,4 +1,4 @@
1
- import { color } from '@pie-lib/render-ui';
1
+ import { color } from '../../../../render-ui/src/index';
2
2
 
3
3
  export const disabled = (key = 'fill') => ({
4
4
  [key]: color.disabled(),
package/src/undo-redo.jsx CHANGED
@@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
3
3
  import classNames from 'classnames';
4
4
  import Button from '@material-ui/core/Button';
5
5
  import { withStyles } from '@material-ui/core';
6
- import { color } from '@pie-lib/render-ui';
6
+ import { color } from '../../render-ui/src/index';
7
7
  import Translator from '@pie-lib/translator';
8
8
 
9
9
  const { translator } = Translator;
@@ -1,191 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
6
-
7
- var _enzyme = require("enzyme");
8
-
9
- var _react = _interopRequireDefault(require("react"));
10
-
11
- var _graphWithControls = require("../graph-with-controls");
12
-
13
- var _tools = require("@pie-lib/tools");
14
-
15
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
16
-
17
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
18
-
19
- var line = {
20
- type: 'line',
21
- from: {
22
- x: 0,
23
- y: 0
24
- },
25
- to: {
26
- x: 1,
27
- y: 1
28
- },
29
- label: 'Line',
30
- building: true
31
- };
32
- var polygon = {
33
- type: 'polygon',
34
- points: [{
35
- x: 0,
36
- y: 0
37
- }, {
38
- x: 1,
39
- y: 1
40
- }, {
41
- x: 2,
42
- y: 2
43
- }]
44
- };
45
- var marks = [line, polygon];
46
- describe('setToolbarAvailability', function () {
47
- it('sets `toolbar: true` if tool should be displayed in toolbar - all tools', function () {
48
- var result = (0, _graphWithControls.setToolbarAvailability)(_tools.allTools);
49
- var allTrue = new Array(_tools.toolsArr.length).fill(true);
50
- expect(result.map(function (r) {
51
- return r.toolbar;
52
- })).toEqual(allTrue);
53
- });
54
- it('sets `toolbar: true` if tool should be displayed in toolbar - few tools', function () {
55
- var result = (0, _graphWithControls.setToolbarAvailability)(['line', 'polygon']);
56
- var allOthersFalse = new Array(_tools.toolsArr.length - 2).fill(false);
57
- expect(result.filter(function (r) {
58
- return r.type === 'line' || r.type === 'polygon';
59
- }).map(function (r) {
60
- return r.toolbar;
61
- })).toEqual([true, true]);
62
- expect(result.filter(function (r) {
63
- return r.type !== 'line' && r.type !== 'polygon';
64
- }).map(function (r) {
65
- return r.toolbar;
66
- })).toEqual(allOthersFalse);
67
- });
68
- });
69
- describe('toolIsAvailable', function () {
70
- var tools = (0, _graphWithControls.setToolbarAvailability)(['line', 'polygon']);
71
- it('returns true if tool is available', function () {
72
- expect((0, _graphWithControls.toolIsAvailable)(tools, (0, _tools.line)())).toEqual(true);
73
- });
74
- });
75
- describe('getAvailableTool', function () {
76
- it('returns the first available tool in list if there is any', function () {
77
- var tools = (0, _graphWithControls.setToolbarAvailability)(['line', 'polygon']);
78
- expect((0, _graphWithControls.getAvailableTool)(tools).toolbar).toEqual(true);
79
- });
80
- it('returns undefined list if there is no available tool', function () {
81
- var tools = (0, _graphWithControls.setToolbarAvailability)([]);
82
- expect((0, _graphWithControls.getAvailableTool)(tools)).toEqual(undefined);
83
- });
84
- });
85
- describe('filterByValidToolTypes', function () {
86
- it('filters marks by valid types', function () {
87
- var marks = [{
88
- type: 'polygon'
89
- }, {
90
- type: 'a'
91
- }, {
92
- type: 'b'
93
- }, {
94
- type: 'line'
95
- }, {
96
- type: 'c'
97
- }];
98
- expect((0, _graphWithControls.filterByValidToolTypes)(marks)).toEqual([{
99
- type: 'polygon'
100
- }, {
101
- type: 'line'
102
- }]);
103
- });
104
- });
105
- describe('filterByVisibleToolTypes', function () {
106
- it('filters marks by the types that should be visible', function () {
107
- expect((0, _graphWithControls.filterByVisibleToolTypes)(['line', 'polygon'], [{
108
- type: 'point'
109
- }, {
110
- type: 'line'
111
- }, {
112
- type: 'polygon'
113
- }])).toEqual([{
114
- type: 'line'
115
- }, {
116
- type: 'polygon'
117
- }]);
118
- expect((0, _graphWithControls.filterByVisibleToolTypes)(['line'], [{
119
- type: 'point'
120
- }, {
121
- type: 'line'
122
- }, {
123
- type: 'circle'
124
- }])).toEqual([{
125
- type: 'line'
126
- }]);
127
- expect((0, _graphWithControls.filterByVisibleToolTypes)(['segment'], [{
128
- type: 'point'
129
- }, {
130
- type: 'line'
131
- }, {
132
- type: 'circle'
133
- }])).toEqual([]);
134
- });
135
- });
136
- describe('GraphWithControls', function () {
137
- var w;
138
- var onChangeMarks = jest.fn();
139
-
140
- var defaultProps = function defaultProps() {
141
- return {
142
- axesSettings: {
143
- includeArrows: true
144
- },
145
- classes: {},
146
- className: '',
147
- coordinatesOnHover: false,
148
- domain: {
149
- min: 0,
150
- max: 10,
151
- step: 1
152
- },
153
- labels: {
154
- top: 'a',
155
- left: 'b',
156
- right: 'c',
157
- bottom: 'd'
158
- },
159
- labelModeEnabled: true,
160
- marks: marks,
161
- onChangeMarks: onChangeMarks,
162
- range: {
163
- min: 0,
164
- max: 10,
165
- step: 1
166
- },
167
- size: {
168
- width: 500,
169
- height: 500
170
- },
171
- title: 'Title',
172
- toolbarTools: _tools.allTools
173
- };
174
- };
175
-
176
- var initialProps = defaultProps();
177
-
178
- var wrapper = function wrapper(extras, opts) {
179
- var props = _objectSpread(_objectSpread({}, initialProps), extras);
180
-
181
- return (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_graphWithControls.GraphWithControls, props), opts);
182
- };
183
-
184
- describe('snapshot', function () {
185
- it('renders', function () {
186
- w = wrapper();
187
- expect(w).toMatchSnapshot();
188
- });
189
- });
190
- });
191
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vZ3JhcGgtd2l0aC1jb250cm9scy50ZXN0LmpzeCJdLCJuYW1lcyI6WyJsaW5lIiwidHlwZSIsImZyb20iLCJ4IiwieSIsInRvIiwibGFiZWwiLCJidWlsZGluZyIsInBvbHlnb24iLCJwb2ludHMiLCJtYXJrcyIsImRlc2NyaWJlIiwiaXQiLCJyZXN1bHQiLCJhbGxUb29scyIsImFsbFRydWUiLCJBcnJheSIsInRvb2xzQXJyIiwibGVuZ3RoIiwiZmlsbCIsImV4cGVjdCIsIm1hcCIsInIiLCJ0b29sYmFyIiwidG9FcXVhbCIsImFsbE90aGVyc0ZhbHNlIiwiZmlsdGVyIiwidG9vbHMiLCJ1bmRlZmluZWQiLCJ3Iiwib25DaGFuZ2VNYXJrcyIsImplc3QiLCJmbiIsImRlZmF1bHRQcm9wcyIsImF4ZXNTZXR0aW5ncyIsImluY2x1ZGVBcnJvd3MiLCJjbGFzc2VzIiwiY2xhc3NOYW1lIiwiY29vcmRpbmF0ZXNPbkhvdmVyIiwiZG9tYWluIiwibWluIiwibWF4Iiwic3RlcCIsImxhYmVscyIsInRvcCIsImxlZnQiLCJyaWdodCIsImJvdHRvbSIsImxhYmVsTW9kZUVuYWJsZWQiLCJyYW5nZSIsInNpemUiLCJ3aWR0aCIsImhlaWdodCIsInRpdGxlIiwidG9vbGJhclRvb2xzIiwiaW5pdGlhbFByb3BzIiwid3JhcHBlciIsImV4dHJhcyIsIm9wdHMiLCJwcm9wcyIsInRvTWF0Y2hTbmFwc2hvdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0FBQ0E7O0FBRUE7O0FBUUE7Ozs7OztBQUVBLElBQU1BLElBQUksR0FBRztBQUNYQyxFQUFBQSxJQUFJLEVBQUUsTUFESztBQUVYQyxFQUFBQSxJQUFJLEVBQUU7QUFBRUMsSUFBQUEsQ0FBQyxFQUFFLENBQUw7QUFBUUMsSUFBQUEsQ0FBQyxFQUFFO0FBQVgsR0FGSztBQUdYQyxFQUFBQSxFQUFFLEVBQUU7QUFBRUYsSUFBQUEsQ0FBQyxFQUFFLENBQUw7QUFBUUMsSUFBQUEsQ0FB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QUFPLG1DQUFRLGdDQUFDLG9DQUFELEVBQXVCRSxLQUF2QixDQUFSLEVBQTBDRCxJQUExQyxDQUFQO0FBQ0QsR0FKRDs7QUFNQS9DLEVBQUFBLFFBQVEsQ0FBQyxVQUFELEVBQWEsWUFBTTtBQUN6QkMsSUFBQUEsRUFBRSxDQUFDLFNBQUQsRUFBWSxZQUFNO0FBQ2xCaUIsTUFBQUEsQ0FBQyxHQUFHMkIsT0FBTyxFQUFYO0FBQ0FwQyxNQUFBQSxNQUFNLENBQUNTLENBQUQsQ0FBTixDQUFVK0IsZUFBVjtBQUNELEtBSEMsQ0FBRjtBQUlELEdBTE8sQ0FBUjtBQU1ELENBakNPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzaGFsbG93IH0gZnJvbSAnZW56eW1lJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7XG4gIEdyYXBoV2l0aENvbnRyb2xzLFxuICBzZXRUb29sYmFyQXZhaWxhYmlsaXR5LFxuICB0b29sSXNBdmFpbGFibGUsXG4gIGdldEF2YWlsYWJsZVRvb2wsXG4gIGZpbHRlckJ5VmFsaWRUb29sVHlwZXMsXG4gIGZpbHRlckJ5VmlzaWJsZVRvb2xUeXBlcyxcbn0gZnJvbSAnLi4vZ3JhcGgtd2l0aC1jb250cm9scyc7XG5pbXBvcnQgeyB0b29sc0FyciwgYWxsVG9vbHMsIGxpbmUgYXMgbGluZVRvb2wgfSBmcm9tICdAcGllLWxpYi90b29scyc7XG5cbmNvbnN0IGxpbmUgPSB7XG4gIHR5cGU6ICdsaW5lJyxcbiAgZnJvbTogeyB4OiAwLCB5OiAwIH0sXG4gIHRvOiB7IHg6IDEsIHk6IDEgfSxcbiAgbGFiZWw6ICdMaW5lJyxcbiAgYnVpbGRpbmc6IHRydWUsXG59O1xuXG5jb25zdCBwb2x5Z29uID0ge1xuICB0eXBlOiAncG9seWdvbicsXG4gIHBvaW50czogW1xuICAgIHsgeDogMCwgeTogMCB9LFxuICAgIHsgeDogMSwgeTogMSB9LFxuICAgIHsgeDogMiwgeTogMiB9LFxuICBdLFxufTtcblxuY29uc3QgbWFya3MgPSBbbGluZSwgcG9seWdvbl07XG5cbmRlc2NyaWJlKCdzZXRUb29sYmFyQXZhaWxhYmlsaXR5JywgKCkgPT4ge1xuICBpdCgnc2V0cyBgdG9vbGJhcjogdHJ1ZWAgaWYgdG9vbCBzaG91bGQgYmUgZGlzcGxheWVkIGluIHRvb2xiYXIgLSBhbGwgdG9vbHMnLCAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gc2V0VG9vbGJhckF2YWlsYWJpbGl0eShhbGxUb29scyk7XG4gICAgY29uc3QgYWxsVHJ1ZSA9IG5ldyBBcnJheSh0b29sc0Fyci5sZW5ndGgpLmZpbGwodHJ1ZSk7XG5cbiAgICBleHBlY3QocmVzdWx0Lm1hcCgocikgPT4gci50b29sYmFyKSkudG9FcXVhbChhbGxUcnVlKTtcbiAgfSk7XG5cbiAgaXQoJ3NldHMgYHRvb2xiYXI6IHRydWVgIGlmIHRvb2wgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiB0b29sYmFyIC0gZmV3IHRvb2xzJywgKCkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHNldFRvb2xiYXJBdmFpbGFiaWxpdHkoWydsaW5lJywgJ3BvbHlnb24nXSk7XG4gICAgY29uc3QgYWxsT3RoZXJzRmFsc2UgPSBuZXcgQXJyYXkodG9vbHNBcnIubGVuZ3RoIC0gMikuZmlsbChmYWxzZSk7XG5cbiAgICBleHBlY3QocmVzdWx0LmZpbHRlcigocikgPT4gci50eXBlID09PSAnbGluZScgfHwgci50eXBlID09PSAncG9seWdvbicpLm1hcCgocikgPT4gci50b29sYmFyKSkudG9FcXVhbChbdHJ1ZSwgdHJ1ZV0pO1xuICAgIGV4cGVjdChyZXN1bHQuZmlsdGVyKChyKSA9PiByLnR5cGUgIT09ICdsaW5lJyAmJiByLnR5cGUgIT09ICdwb2x5Z29uJykubWFwKChyKSA9PiByLnRvb2xiYXIpKS50b0VxdWFsKFxuICAgICAgYWxsT3RoZXJzRmFsc2UsXG4gICAgKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ3Rvb2xJc0F2YWlsYWJsZScsICgpID0+IHtcbiAgY29uc3QgdG9vbHMgPSBzZXRUb29sYmFyQXZhaWxhYmlsaXR5KFsnbGluZScsICdwb2x5Z29uJ10pO1xuXG4gIGl0KCdyZXR1cm5zIHRydWUgaWYgdG9vbCBpcyBhdmFpbGFibGUnLCAoKSA9PiB7XG4gICAgZXhwZWN0KHRvb2xJc0F2YWlsYWJsZSh0b29scywgbGluZVRvb2woKSkpLnRvRXF1YWwodHJ1ZSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdnZXRBdmFpbGFibGVUb29sJywgKCkgPT4ge1xuICBpdCgncmV0dXJucyB0aGUgZmlyc3QgYXZhaWxhYmxlIHRvb2wgaW4gbGlzdCBpZiB0aGVyZSBpcyBhbnknLCAoKSA9PiB7XG4gICAgY29uc3QgdG9vbHMgPSBzZXRUb29sYmFyQXZhaWxhYmlsaXR5KFsnbGluZScsICdwb2x5Z29uJ10pO1xuXG4gICAgZXhwZWN0KGdldEF2YWlsYWJsZVRvb2wodG9vbHMpLnRvb2xiYXIpLnRvRXF1YWwodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdyZXR1cm5zIHVuZGVmaW5lZCBsaXN0IGlmIHRoZXJlIGlzIG5vIGF2YWlsYWJsZSB0b29sJywgKCkgPT4ge1xuICAgIGNvbnN0IHRvb2xzID0gc2V0VG9vbGJhckF2YWlsYWJpbGl0eShbXSk7XG5cbiAgICBleHBlY3QoZ2V0QXZhaWxhYmxlVG9vbCh0b29scykpLnRvRXF1YWwodW5kZWZpbmVkKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2ZpbHRlckJ5VmFsaWRUb29sVHlwZXMnLCAoKSA9PiB7XG4gIGl0KCdmaWx0ZXJzIG1hcmtzIGJ5IHZhbGlkIHR5cGVzJywgKCkgPT4ge1xuICAgIGNvbnN0IG1hcmtzID0gW3sgdHlwZTogJ3BvbHlnb24nIH0sIHsgdHlwZTogJ2EnIH0sIHsgdHlwZTogJ2InIH0sIHsgdHlwZTogJ2xpbmUnIH0sIHsgdHlwZTogJ2MnIH1dO1xuXG4gICAgZXhwZWN0KGZpbHRlckJ5VmFsaWRUb29sVHlwZXMobWFya3MpKS50b0VxdWFsKFt7IHR5cGU6ICdwb2x5Z29uJyB9LCB7IHR5cGU6ICdsaW5lJyB9XSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdmaWx0ZXJCeVZpc2libGVUb29sVHlwZXMnLCAoKSA9PiB7XG4gIGl0KCdmaWx0ZXJzIG1hcmtzIGJ5IHRoZSB0eXBlcyB0aGF0IHNob3VsZCBiZSB2aXNpYmxlJywgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIGZpbHRlckJ5VmlzaWJsZVRvb2xUeXBlcyhbJ2xpbmUnLCAncG9seWdvbiddLCBbeyB0eXBlOiAncG9pbnQnIH0sIHsgdHlwZTogJ2xpbmUnIH0sIHsgdHlwZTogJ3BvbHlnb24nIH1dKSxcbiAgICApLnRvRXF1YWwoW3sgdHlwZTogJ2xpbmUnIH0sIHsgdHlwZTogJ3BvbHlnb24nIH1dKTtcblxuICAgIGV4cGVjdChmaWx0ZXJCeVZpc2libGVUb29sVHlwZXMoWydsaW5lJ10sIFt7IHR5cGU6ICdwb2ludCcgfSwgeyB0eXBlOiAnbGluZScgfSwgeyB0eXBlOiAnY2lyY2xlJyB9XSkpLnRvRXF1YWwoW1xuICAgICAgeyB0eXBlOiAnbGluZScgfSxcbiAgICBdKTtcblxuICAgIGV4cGVjdChmaWx0ZXJCeVZpc2libGVUb29sVHlwZXMoWydzZWdtZW50J10sIFt7IHR5cGU6ICdwb2ludCcgfSwgeyB0eXBlOiAnbGluZScgfSwgeyB0eXBlOiAnY2lyY2xlJyB9XSkpLnRvRXF1YWwoXG4gICAgICBbXSxcbiAgICApO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnR3JhcGhXaXRoQ29udHJvbHMnLCAoKSA9PiB7XG4gIGxldCB3O1xuICBsZXQgb25DaGFuZ2VNYXJrcyA9IGplc3QuZm4oKTtcblxuICBjb25zdCBkZWZhdWx0UHJvcHMgPSAoKSA9PiAoe1xuICAgIGF4ZXNTZXR0aW5nczogeyBpbmNsdWRlQXJyb3dzOiB0cnVlIH0sXG4gICAgY2xhc3Nlczoge30sXG4gICAgY2xhc3NOYW1lOiAnJyxcbiAgICBjb29yZGluYXRlc09uSG92ZXI6IGZhbHNlLFxuICAgIGRvbWFpbjogeyBtaW46IDAsIG1heDogMTAsIHN0ZXA6IDEgfSxcbiAgICBsYWJlbHM6IHsgdG9wOiAnYScsIGxlZnQ6ICdiJywgcmlnaHQ6ICdjJywgYm90dG9tOiAnZCcgfSxcbiAgICBsYWJlbE1vZGVFbmFibGVkOiB0cnVlLFxuICAgIG1hcmtzLFxuICAgIG9uQ2hhbmdlTWFya3MsXG4gICAgcmFuZ2U6IHsgbWluOiAwLCBtYXg6IDEwLCBzdGVwOiAxIH0sXG4gICAgc2l6ZTogeyB3aWR0aDogNTAwLCBoZWlnaHQ6IDUwMCB9LFxuICAgIHRpdGxlOiAnVGl0bGUnLFxuICAgIHRvb2xiYXJUb29sczogYWxsVG9vbHMsXG4gIH0pO1xuICBjb25zdCBpbml0aWFsUHJvcHMgPSBkZWZhdWx0UHJvcHMoKTtcblxuICBjb25zdCB3cmFwcGVyID0gKGV4dHJhcywgb3B0cykgPT4ge1xuICAgIGNvbnN0IHByb3BzID0geyAuLi5pbml0aWFsUHJvcHMsIC4uLmV4dHJhcyB9O1xuXG4gICAgcmV0dXJuIHNoYWxsb3coPEdyYXBoV2l0aENvbnRyb2xzIHsuLi5wcm9wc30gLz4sIG9wdHMpO1xuICB9O1xuXG4gIGRlc2NyaWJlKCdzbmFwc2hvdCcsICgpID0+IHtcbiAgICBpdCgncmVuZGVycycsICgpID0+IHtcbiAgICAgIHcgPSB3cmFwcGVyKCk7XG4gICAgICBleHBlY3QodykudG9NYXRjaFNuYXBzaG90KCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=