@pie-lib/graphing 2.14.22 → 2.15.1-beta.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 +13 -80
- package/NEXT.CHANGELOG.json +1 -0
- package/package.json +14 -7
- package/src/__tests__/__snapshots__/graph-with-controls.test.jsx.snap +237 -0
- package/src/__tests__/__snapshots__/graph.test.jsx.snap +211 -0
- package/src/__tests__/__snapshots__/grid.test.jsx.snap +54 -0
- package/src/__tests__/__snapshots__/labels.test.jsx.snap +30 -0
- package/src/__tests__/__snapshots__/mark-label.test.jsx.snap +45 -0
- package/src/__tests__/__snapshots__/toggle-bar.test.jsx.snap +7 -0
- package/src/__tests__/__snapshots__/tool-menu.test.jsx.snap +13 -0
- package/src/__tests__/__snapshots__/undo-redo.test.jsx.snap +14 -0
- package/src/__tests__/graph-with-controls.test.jsx +147 -0
- package/src/__tests__/graph.test.jsx +230 -0
- package/src/__tests__/grid.test.jsx +20 -0
- package/src/__tests__/labels.test.jsx +38 -0
- package/src/__tests__/mark-label.test.jsx +68 -0
- package/src/__tests__/toggle-bar.test.jsx +36 -0
- package/src/__tests__/tool-menu.test.jsx +29 -0
- package/src/__tests__/undo-redo.test.jsx +25 -0
- package/src/__tests__/use-debounce.test.js +21 -0
- package/src/__tests__/utils.js +38 -0
- package/src/__tests__/utils.test.js +151 -0
- package/src/axis/__tests__/__snapshots__/arrow.test.jsx.snap +33 -0
- package/src/axis/__tests__/__snapshots__/axes.test.jsx.snap +122 -0
- package/src/axis/__tests__/arrow.test.jsx +39 -0
- package/src/axis/__tests__/axes.test.jsx +220 -0
- package/src/axis/axes.jsx +5 -5
- package/src/container/index.jsx +2 -4
- package/src/coordinates-label.jsx +4 -3
- package/src/graph-with-controls.jsx +8 -10
- package/src/graph.jsx +22 -10
- package/src/grid.jsx +8 -10
- package/src/index.js +2 -2
- package/src/key-legend.jsx +145 -0
- package/src/label-svg-icon.jsx +39 -0
- package/src/labels.jsx +2 -1
- package/src/mark-label.jsx +149 -52
- package/src/toggle-bar.jsx +1 -2
- package/src/tool-menu.jsx +3 -26
- package/src/tools/absolute/__tests__/component.test.jsx +54 -0
- package/src/tools/absolute/component.jsx +23 -0
- package/src/tools/absolute/index.js +31 -0
- package/src/tools/circle/__tests__/__snapshots__/bg-circle.test.jsx.snap +46 -0
- package/src/tools/circle/__tests__/__snapshots__/component.test.jsx.snap +293 -0
- package/src/tools/circle/__tests__/bg-circle.test.jsx +28 -0
- package/src/tools/circle/__tests__/component.test.jsx +228 -0
- package/src/tools/circle/bg-circle.jsx +5 -4
- package/src/tools/circle/component.jsx +22 -8
- package/src/tools/exponential/__tests__/component.test.jsx +54 -0
- package/src/tools/exponential/component.jsx +23 -0
- package/src/tools/exponential/index.js +39 -0
- package/src/tools/index.js +38 -5
- package/src/tools/line/__tests__/__snapshots__/component.test.jsx.snap +20 -0
- package/src/tools/line/__tests__/component.test.jsx +36 -0
- package/src/tools/line/component.jsx +2 -1
- package/src/tools/parabola/__tests__/component.test.jsx +49 -0
- package/src/tools/parabola/component.jsx +7 -6
- package/src/tools/point/__tests__/__snapshots__/component.test.jsx.snap +40 -0
- package/src/tools/point/__tests__/component.test.jsx +66 -0
- package/src/tools/point/component.jsx +12 -6
- package/src/tools/polygon/__tests__/__snapshots__/component.test.jsx.snap +415 -0
- package/src/tools/polygon/__tests__/__snapshots__/line.test.jsx.snap +45 -0
- package/src/tools/polygon/__tests__/__snapshots__/polygon.test.jsx.snap +52 -0
- package/src/tools/polygon/__tests__/component.test.jsx +226 -0
- package/src/tools/polygon/__tests__/index.test.js +65 -0
- package/src/tools/polygon/__tests__/line.test.jsx +25 -0
- package/src/tools/polygon/__tests__/polygon.test.jsx +44 -0
- package/src/tools/polygon/component.jsx +39 -11
- package/src/tools/polygon/line.jsx +15 -7
- package/src/tools/polygon/polygon.jsx +7 -3
- package/src/tools/ray/__tests__/__snapshots__/component.test.jsx.snap +23 -0
- package/src/tools/ray/__tests__/component.test.jsx +29 -0
- package/src/tools/ray/component.jsx +2 -1
- package/src/tools/segment/__tests__/__snapshots__/component.test.jsx.snap +14 -0
- package/src/tools/segment/__tests__/component.test.jsx +28 -0
- package/src/tools/segment/component.jsx +2 -1
- package/src/tools/shared/__tests__/__snapshots__/arrow-head.test.jsx.snap +27 -0
- package/src/tools/shared/__tests__/arrow-head.test.jsx +34 -0
- package/src/tools/shared/icons/CorrectSVG.jsx +22 -0
- package/src/tools/shared/icons/IncorrectSVG.jsx +20 -0
- package/src/tools/shared/icons/MissingSVG.jsx +21 -0
- package/src/tools/shared/line/__tests__/__snapshots__/index.test.jsx.snap +360 -0
- package/src/tools/shared/line/__tests__/__snapshots__/line-path.test.jsx.snap +58 -0
- package/src/tools/shared/line/__tests__/__snapshots__/with-root-edge.test.jsx.snap +63 -0
- package/src/tools/shared/line/__tests__/index.test.jsx +255 -0
- package/src/tools/shared/line/__tests__/line-path.test.jsx +53 -0
- package/src/tools/shared/line/__tests__/with-root-edge.test.jsx +73 -0
- package/src/tools/shared/line/index.jsx +39 -13
- package/src/tools/shared/line/line-path.jsx +18 -7
- package/src/tools/shared/line/with-root-edge.jsx +10 -3
- package/src/tools/shared/point/__tests__/__snapshots__/arrow-point.test.jsx.snap +56 -0
- package/src/tools/shared/point/__tests__/__snapshots__/base-point.test.jsx.snap +44 -0
- package/src/tools/shared/point/__tests__/arrow-point.test.jsx +87 -0
- package/src/tools/shared/point/__tests__/base-point.test.jsx +84 -0
- package/src/tools/shared/point/arrow-point.jsx +4 -1
- package/src/tools/shared/point/arrow.jsx +4 -1
- package/src/tools/shared/point/base-point.jsx +28 -3
- package/src/tools/shared/point/index.jsx +7 -2
- package/src/tools/shared/styles.js +8 -3
- package/src/tools/sine/__tests__/component.test.jsx +51 -0
- package/src/tools/sine/component.jsx +7 -7
- package/src/tools/vector/__tests__/__snapshots__/component.test.jsx.snap +12 -0
- package/src/tools/vector/__tests__/component.test.jsx +26 -0
- package/src/tools/vector/component.jsx +2 -1
- package/src/undo-redo.jsx +0 -1
- package/src/utils.js +1 -1
- package/legacy.png +0 -0
- package/lib/axis/arrow.js +0 -115
- package/lib/axis/arrow.js.map +0 -1
- package/lib/axis/axes.js +0 -415
- package/lib/axis/axes.js.map +0 -1
- package/lib/axis/index.js +0 -26
- package/lib/axis/index.js.map +0 -1
- package/lib/bg.js +0 -139
- package/lib/bg.js.map +0 -1
- package/lib/container/actions.js +0 -24
- package/lib/container/actions.js.map +0 -1
- package/lib/container/index.js +0 -166
- package/lib/container/index.js.map +0 -1
- package/lib/container/marks.js +0 -27
- package/lib/container/marks.js.map +0 -1
- package/lib/container/middleware.js +0 -25
- package/lib/container/middleware.js.map +0 -1
- package/lib/container/reducer.js +0 -25
- package/lib/container/reducer.js.map +0 -1
- package/lib/coordinates-label.js +0 -107
- package/lib/coordinates-label.js.map +0 -1
- package/lib/graph-with-controls.js +0 -366
- package/lib/graph-with-controls.js.map +0 -1
- package/lib/graph.js +0 -354
- package/lib/graph.js.map +0 -1
- package/lib/grid-setup.js +0 -462
- package/lib/grid-setup.js.map +0 -1
- package/lib/grid.js +0 -184
- package/lib/grid.js.map +0 -1
- package/lib/index.js +0 -51
- package/lib/index.js.map +0 -1
- package/lib/labels.js +0 -298
- package/lib/labels.js.map +0 -1
- package/lib/mark-label.js +0 -210
- package/lib/mark-label.js.map +0 -1
- package/lib/toggle-bar.js +0 -337
- package/lib/toggle-bar.js.map +0 -1
- package/lib/tool-menu.js +0 -132
- package/lib/tool-menu.js.map +0 -1
- package/lib/tools/circle/bg-circle.js +0 -172
- package/lib/tools/circle/bg-circle.js.map +0 -1
- package/lib/tools/circle/component.js +0 -387
- package/lib/tools/circle/component.js.map +0 -1
- package/lib/tools/circle/index.js +0 -51
- package/lib/tools/circle/index.js.map +0 -1
- package/lib/tools/index.js +0 -79
- package/lib/tools/index.js.map +0 -1
- package/lib/tools/line/component.js +0 -102
- package/lib/tools/line/component.js.map +0 -1
- package/lib/tools/line/index.js +0 -16
- package/lib/tools/line/index.js.map +0 -1
- package/lib/tools/parabola/component.js +0 -33
- package/lib/tools/parabola/component.js.map +0 -1
- package/lib/tools/parabola/index.js +0 -63
- package/lib/tools/parabola/index.js.map +0 -1
- package/lib/tools/point/component.js +0 -181
- package/lib/tools/point/component.js.map +0 -1
- package/lib/tools/point/index.js +0 -32
- package/lib/tools/point/index.js.map +0 -1
- package/lib/tools/polygon/component.js +0 -505
- package/lib/tools/polygon/component.js.map +0 -1
- package/lib/tools/polygon/index.js +0 -106
- package/lib/tools/polygon/index.js.map +0 -1
- package/lib/tools/polygon/line.js +0 -151
- package/lib/tools/polygon/line.js.map +0 -1
- package/lib/tools/polygon/polygon.js +0 -162
- package/lib/tools/polygon/polygon.js.map +0 -1
- package/lib/tools/ray/component.js +0 -101
- package/lib/tools/ray/component.js.map +0 -1
- package/lib/tools/ray/index.js +0 -16
- package/lib/tools/ray/index.js.map +0 -1
- package/lib/tools/segment/component.js +0 -74
- package/lib/tools/segment/component.js.map +0 -1
- package/lib/tools/segment/index.js +0 -16
- package/lib/tools/segment/index.js.map +0 -1
- package/lib/tools/shared/arrow-head.js +0 -70
- package/lib/tools/shared/arrow-head.js.map +0 -1
- package/lib/tools/shared/line/index.js +0 -567
- package/lib/tools/shared/line/index.js.map +0 -1
- package/lib/tools/shared/line/line-path.js +0 -145
- package/lib/tools/shared/line/line-path.js.map +0 -1
- package/lib/tools/shared/line/with-root-edge.js +0 -144
- package/lib/tools/shared/line/with-root-edge.js.map +0 -1
- package/lib/tools/shared/point/arrow-point.js +0 -113
- package/lib/tools/shared/point/arrow-point.js.map +0 -1
- package/lib/tools/shared/point/arrow.js +0 -96
- package/lib/tools/shared/point/arrow.js.map +0 -1
- package/lib/tools/shared/point/base-point.js +0 -139
- package/lib/tools/shared/point/base-point.js.map +0 -1
- package/lib/tools/shared/point/index.js +0 -94
- package/lib/tools/shared/point/index.js.map +0 -1
- package/lib/tools/shared/styles.js +0 -49
- package/lib/tools/shared/styles.js.map +0 -1
- package/lib/tools/shared/types.js +0 -23
- package/lib/tools/shared/types.js.map +0 -1
- package/lib/tools/sine/component.js +0 -42
- package/lib/tools/sine/component.js.map +0 -1
- package/lib/tools/sine/index.js +0 -63
- package/lib/tools/sine/index.js.map +0 -1
- package/lib/tools/vector/component.js +0 -87
- package/lib/tools/vector/component.js.map +0 -1
- package/lib/tools/vector/index.js +0 -16
- package/lib/tools/vector/index.js.map +0 -1
- package/lib/undo-redo.js +0 -124
- package/lib/undo-redo.js.map +0 -1
- package/lib/use-debounce.js +0 -32
- package/lib/use-debounce.js.map +0 -1
- package/lib/utils.js +0 -307
- package/lib/utils.js.map +0 -1
package/lib/undo-redo.js
DELETED
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports["default"] = exports.UndoRedo = void 0;
|
|
9
|
-
|
|
10
|
-
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
-
|
|
12
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
-
|
|
14
|
-
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
15
|
-
|
|
16
|
-
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
17
|
-
|
|
18
|
-
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
19
|
-
|
|
20
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
21
|
-
|
|
22
|
-
var _react = _interopRequireDefault(require("react"));
|
|
23
|
-
|
|
24
|
-
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
25
|
-
|
|
26
|
-
var _classnames = _interopRequireDefault(require("classnames"));
|
|
27
|
-
|
|
28
|
-
var _Button = _interopRequireDefault(require("@material-ui/core/Button"));
|
|
29
|
-
|
|
30
|
-
var _core = require("@material-ui/core");
|
|
31
|
-
|
|
32
|
-
var _renderUi = require("@pie-lib/render-ui");
|
|
33
|
-
|
|
34
|
-
var _translator = _interopRequireDefault(require("@pie-lib/translator"));
|
|
35
|
-
|
|
36
|
-
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
|
|
37
|
-
|
|
38
|
-
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
39
|
-
|
|
40
|
-
var translator = _translator["default"].translator;
|
|
41
|
-
|
|
42
|
-
var UndoRedo = /*#__PURE__*/function (_React$Component) {
|
|
43
|
-
(0, _inherits2["default"])(UndoRedo, _React$Component);
|
|
44
|
-
|
|
45
|
-
var _super = _createSuper(UndoRedo);
|
|
46
|
-
|
|
47
|
-
function UndoRedo() {
|
|
48
|
-
(0, _classCallCheck2["default"])(this, UndoRedo);
|
|
49
|
-
return _super.apply(this, arguments);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
(0, _createClass2["default"])(UndoRedo, [{
|
|
53
|
-
key: "render",
|
|
54
|
-
value: function render() {
|
|
55
|
-
var _this$props = this.props,
|
|
56
|
-
classes = _this$props.classes,
|
|
57
|
-
className = _this$props.className,
|
|
58
|
-
onUndo = _this$props.onUndo,
|
|
59
|
-
onRedo = _this$props.onRedo,
|
|
60
|
-
onReset = _this$props.onReset,
|
|
61
|
-
language = _this$props.language;
|
|
62
|
-
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
63
|
-
className: (0, _classnames["default"])(className)
|
|
64
|
-
}, /*#__PURE__*/_react["default"].createElement(_Button["default"], {
|
|
65
|
-
classes: {
|
|
66
|
-
root: classes.button
|
|
67
|
-
},
|
|
68
|
-
onClick: function onClick() {
|
|
69
|
-
return onUndo(true);
|
|
70
|
-
}
|
|
71
|
-
}, translator.t('common:undo', {
|
|
72
|
-
lng: language
|
|
73
|
-
})), /*#__PURE__*/_react["default"].createElement(_Button["default"], {
|
|
74
|
-
classes: {
|
|
75
|
-
root: classes.button
|
|
76
|
-
},
|
|
77
|
-
onClick: function onClick() {
|
|
78
|
-
return onRedo(true);
|
|
79
|
-
}
|
|
80
|
-
}, translator.t('graphing.redo', {
|
|
81
|
-
lng: language
|
|
82
|
-
})), /*#__PURE__*/_react["default"].createElement(_Button["default"], {
|
|
83
|
-
classes: {
|
|
84
|
-
root: classes.button
|
|
85
|
-
},
|
|
86
|
-
onClick: function onClick() {
|
|
87
|
-
return onReset();
|
|
88
|
-
}
|
|
89
|
-
}, translator.t('graphing.reset', {
|
|
90
|
-
lng: language
|
|
91
|
-
})));
|
|
92
|
-
}
|
|
93
|
-
}]);
|
|
94
|
-
return UndoRedo;
|
|
95
|
-
}(_react["default"].Component);
|
|
96
|
-
|
|
97
|
-
exports.UndoRedo = UndoRedo;
|
|
98
|
-
(0, _defineProperty2["default"])(UndoRedo, "propTypes", {
|
|
99
|
-
classes: _propTypes["default"].object,
|
|
100
|
-
className: _propTypes["default"].string,
|
|
101
|
-
onUndo: _propTypes["default"].func.isRequired,
|
|
102
|
-
onRedo: _propTypes["default"].func.isRequired,
|
|
103
|
-
onReset: _propTypes["default"].func.isRequired,
|
|
104
|
-
language: _propTypes["default"].string
|
|
105
|
-
});
|
|
106
|
-
(0, _defineProperty2["default"])(UndoRedo, "defaultProps", {});
|
|
107
|
-
|
|
108
|
-
var styles = function styles(theme) {
|
|
109
|
-
return {
|
|
110
|
-
button: {
|
|
111
|
-
color: _renderUi.color.text(),
|
|
112
|
-
backgroundColor: _renderUi.color.background(),
|
|
113
|
-
marginBottom: theme.spacing.unit / 2,
|
|
114
|
-
'&:not(:last-of-type)': {
|
|
115
|
-
marginRight: theme.spacing.unit / 2
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
};
|
|
119
|
-
};
|
|
120
|
-
|
|
121
|
-
var _default = (0, _core.withStyles)(styles)(UndoRedo);
|
|
122
|
-
|
|
123
|
-
exports["default"] = _default;
|
|
124
|
-
//# sourceMappingURL=undo-redo.js.map
|
package/lib/undo-redo.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/undo-redo.jsx"],"names":["translator","Translator","UndoRedo","props","classes","className","onUndo","onRedo","onReset","language","root","button","t","lng","React","Component","PropTypes","object","string","func","isRequired","styles","theme","color","text","backgroundColor","background","marginBottom","spacing","unit","marginRight"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;AAEA,IAAQA,UAAR,GAAuBC,sBAAvB,CAAQD,UAAR;;IAEaE,Q;;;;;;;;;;;;WAWX,kBAAS;AACP,wBAAkE,KAAKC,KAAvE;AAAA,UAAQC,OAAR,eAAQA,OAAR;AAAA,UAAiBC,SAAjB,eAAiBA,SAAjB;AAAA,UAA4BC,MAA5B,eAA4BA,MAA5B;AAAA,UAAoCC,MAApC,eAAoCA,MAApC;AAAA,UAA4CC,OAA5C,eAA4CA,OAA5C;AAAA,UAAqDC,QAArD,eAAqDA,QAArD;AACA,0BACE;AAAK,QAAA,SAAS,EAAE,4BAAWJ,SAAX;AAAhB,sBACE,gCAAC,kBAAD;AAAQ,QAAA,OAAO,EAAE;AAAEK,UAAAA,IAAI,EAAEN,OAAO,CAACO;AAAhB,SAAjB;AAA2C,QAAA,OAAO,EAAE;AAAA,iBAAML,MAAM,CAAC,IAAD,CAAZ;AAAA;AAApD,SACGN,UAAU,CAACY,CAAX,CAAa,aAAb,EAA4B;AAAEC,QAAAA,GAAG,EAAEJ;AAAP,OAA5B,CADH,CADF,eAIE,gCAAC,kBAAD;AAAQ,QAAA,OAAO,EAAE;AAAEC,UAAAA,IAAI,EAAEN,OAAO,CAACO;AAAhB,SAAjB;AAA2C,QAAA,OAAO,EAAE;AAAA,iBAAMJ,MAAM,CAAC,IAAD,CAAZ;AAAA;AAApD,SACGP,UAAU,CAACY,CAAX,CAAa,eAAb,EAA8B;AAAEC,QAAAA,GAAG,EAAEJ;AAAP,OAA9B,CADH,CAJF,eAOE,gCAAC,kBAAD;AAAQ,QAAA,OAAO,EAAE;AAAEC,UAAAA,IAAI,EAAEN,OAAO,CAACO;AAAhB,SAAjB;AAA2C,QAAA,OAAO,EAAE;AAAA,iBAAMH,OAAO,EAAb;AAAA;AAApD,SACGR,UAAU,CAACY,CAAX,CAAa,gBAAb,EAA+B;AAAEC,QAAAA,GAAG,EAAEJ;AAAP,OAA/B,CADH,CAPF,CADF;AAaD;;;EA1B2BK,kBAAMC,S;;;iCAAvBb,Q,eACQ;AACjBE,EAAAA,OAAO,EAAEY,sBAAUC,MADF;AAEjBZ,EAAAA,SAAS,EAAEW,sBAAUE,MAFJ;AAGjBZ,EAAAA,MAAM,EAAEU,sBAAUG,IAAV,CAAeC,UAHN;AAIjBb,EAAAA,MAAM,EAAES,sBAAUG,IAAV,CAAeC,UAJN;AAKjBZ,EAAAA,OAAO,EAAEQ,sBAAUG,IAAV,CAAeC,UALP;AAMjBX,EAAAA,QAAQ,EAAEO,sBAAUE;AANH,C;iCADRhB,Q,kBASW,E;;AAoBxB,IAAMmB,MAAM,GAAG,SAATA,MAAS,CAACC,KAAD;AAAA,SAAY;AACzBX,IAAAA,MAAM,EAAE;AACNY,MAAAA,KAAK,EAAEA,gBAAMC,IAAN,EADD;AAENC,MAAAA,eAAe,EAAEF,gBAAMG,UAAN,EAFX;AAGNC,MAAAA,YAAY,EAAEL,KAAK,CAACM,OAAN,CAAcC,IAAd,GAAqB,CAH7B;AAIN,8BAAwB;AACtBC,QAAAA,WAAW,EAAER,KAAK,CAACM,OAAN,CAAcC,IAAd,GAAqB;AADZ;AAJlB;AADiB,GAAZ;AAAA,CAAf;;eAWe,sBAAWR,MAAX,EAAmBnB,QAAnB,C","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport Button from '@material-ui/core/Button';\nimport { withStyles } from '@material-ui/core';\nimport { color } from '@pie-lib/render-ui';\nimport Translator from '@pie-lib/translator';\n\nconst { translator } = Translator;\n\nexport class UndoRedo extends React.Component {\n static propTypes = {\n classes: PropTypes.object,\n className: PropTypes.string,\n onUndo: PropTypes.func.isRequired,\n onRedo: PropTypes.func.isRequired,\n onReset: PropTypes.func.isRequired,\n language: PropTypes.string,\n };\n static defaultProps = {};\n\n render() {\n const { classes, className, onUndo, onRedo, onReset, language } = this.props;\n return (\n <div className={classNames(className)}>\n <Button classes={{ root: classes.button }} onClick={() => onUndo(true)}>\n {translator.t('common:undo', { lng: language })}\n </Button>\n <Button classes={{ root: classes.button }} onClick={() => onRedo(true)}>\n {translator.t('graphing.redo', { lng: language })}\n </Button>\n <Button classes={{ root: classes.button }} onClick={() => onReset()}>\n {translator.t('graphing.reset', { lng: language })}\n </Button>\n </div>\n );\n }\n}\n\nconst styles = (theme) => ({\n button: {\n color: color.text(),\n backgroundColor: color.background(),\n marginBottom: theme.spacing.unit / 2,\n '&:not(:last-of-type)': {\n marginRight: theme.spacing.unit / 2,\n },\n },\n});\n\nexport default withStyles(styles)(UndoRedo);\n"],"file":"undo-redo.js"}
|
package/lib/use-debounce.js
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports.useDebounce = void 0;
|
|
9
|
-
|
|
10
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
|
-
|
|
12
|
-
var _react = require("react");
|
|
13
|
-
|
|
14
|
-
var useDebounce = function useDebounce(value, delay) {
|
|
15
|
-
var _useState = (0, _react.useState)(value),
|
|
16
|
-
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
17
|
-
debouncedValue = _useState2[0],
|
|
18
|
-
setDebouncedValue = _useState2[1];
|
|
19
|
-
|
|
20
|
-
(0, _react.useEffect)(function () {
|
|
21
|
-
var handler = setTimeout(function () {
|
|
22
|
-
setDebouncedValue(value);
|
|
23
|
-
}, delay);
|
|
24
|
-
return function () {
|
|
25
|
-
return clearTimeout(handler);
|
|
26
|
-
};
|
|
27
|
-
}, [value]);
|
|
28
|
-
return debouncedValue;
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
exports.useDebounce = useDebounce;
|
|
32
|
-
//# sourceMappingURL=use-debounce.js.map
|
package/lib/use-debounce.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/use-debounce.js"],"names":["useDebounce","value","delay","debouncedValue","setDebouncedValue","handler","setTimeout","clearTimeout"],"mappings":";;;;;;;;;;;AAAA;;AAEO,IAAMA,WAAW,GAAG,SAAdA,WAAc,CAACC,KAAD,EAAQC,KAAR,EAAkB;AAC3C,kBAA4C,qBAASD,KAAT,CAA5C;AAAA;AAAA,MAAOE,cAAP;AAAA,MAAuBC,iBAAvB;;AAEA,wBAAU,YAAM;AACd,QAAMC,OAAO,GAAGC,UAAU,CAAC,YAAM;AAC/BF,MAAAA,iBAAiB,CAACH,KAAD,CAAjB;AACD,KAFyB,EAEvBC,KAFuB,CAA1B;AAGA,WAAO;AAAA,aAAMK,YAAY,CAACF,OAAD,CAAlB;AAAA,KAAP;AACD,GALD,EAKG,CAACJ,KAAD,CALH;AAMA,SAAOE,cAAP;AACD,CAVM","sourcesContent":["import { useState, useEffect } from 'react';\n\nexport const useDebounce = (value, delay) => {\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n return () => clearTimeout(handler);\n }, [value]);\n return debouncedValue;\n};\n"],"file":"use-debounce.js"}
|
package/lib/utils.js
DELETED
|
@@ -1,307 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports.tickCount = exports.thinnerShapesNeeded = exports.sameAxes = exports.roundNumber = exports.polygonToArea = exports.pointsToArea = exports.point = exports.lineToArea = exports.isDuplicatedMark = exports.isDomainRangeEqual = exports.getTickValues = exports.getRightestPoints = exports.getMiddleOfTwoPoints = exports.getDistanceBetweenTwoPoints = exports.getAngleDeg = exports.getAdjustedGraphLimits = exports.findLongestWord = exports.equalPoints = exports.countWords = exports.bounds = exports.arrowDimensions = exports.amountToIncreaseWidth = void 0;
|
|
9
|
-
|
|
10
|
-
var _head = _interopRequireDefault(require("lodash/head"));
|
|
11
|
-
|
|
12
|
-
var _tail = _interopRequireDefault(require("lodash/tail"));
|
|
13
|
-
|
|
14
|
-
var _plot = require("@pie-lib/plot");
|
|
15
|
-
|
|
16
|
-
var _invariant = _interopRequireDefault(require("invariant"));
|
|
17
|
-
|
|
18
|
-
var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
|
|
19
|
-
|
|
20
|
-
var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
|
|
21
|
-
|
|
22
|
-
var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
|
|
23
|
-
|
|
24
|
-
var tickCount = _plot.utils.tickCount;
|
|
25
|
-
exports.tickCount = tickCount;
|
|
26
|
-
var bounds = _plot.utils.bounds;
|
|
27
|
-
exports.bounds = bounds;
|
|
28
|
-
var point = _plot.utils.point; //TODO: This can be removed?
|
|
29
|
-
|
|
30
|
-
exports.point = point;
|
|
31
|
-
|
|
32
|
-
var getAngleDeg = function getAngleDeg() {
|
|
33
|
-
return 0;
|
|
34
|
-
}; //TODO: This can be removed?
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
exports.getAngleDeg = getAngleDeg;
|
|
38
|
-
|
|
39
|
-
var arrowDimensions = function arrowDimensions() {
|
|
40
|
-
return 0;
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
exports.arrowDimensions = arrowDimensions;
|
|
44
|
-
|
|
45
|
-
var getTickValues = function getTickValues(prop) {
|
|
46
|
-
var tickValues = [];
|
|
47
|
-
var tickVal = 0;
|
|
48
|
-
|
|
49
|
-
while (tickVal >= prop.min && tickValues.indexOf(tickVal) < 0) {
|
|
50
|
-
tickValues.push(tickVal);
|
|
51
|
-
tickVal = Math.round((tickVal - prop.step) * 10000) / 10000;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
tickVal = Math.round(prop.step * 10000) / 10000;
|
|
55
|
-
|
|
56
|
-
while (tickVal <= prop.max && tickValues.indexOf(tickVal) < 0) {
|
|
57
|
-
tickValues.push(tickVal);
|
|
58
|
-
tickVal = Math.round((tickVal + prop.step) * 10000) / 10000;
|
|
59
|
-
} // return only ticks that are inside the min-max interval
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
if (tickValues) {
|
|
63
|
-
return tickValues.filter(function (tV) {
|
|
64
|
-
return tV >= prop.min && tV <= prop.max;
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
return [];
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
exports.getTickValues = getTickValues;
|
|
72
|
-
|
|
73
|
-
var countWords = function countWords(label) {
|
|
74
|
-
if (label == null || (0, _isEmpty["default"])(label)) {
|
|
75
|
-
return 1;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
var words = label.split(' ');
|
|
79
|
-
return words.length;
|
|
80
|
-
}; // findLongestWord is also used in plot
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
exports.countWords = countWords;
|
|
84
|
-
|
|
85
|
-
var findLongestWord = function findLongestWord(label) {
|
|
86
|
-
var longestWord = (label || '').replace(/<[^>]+>/g, '').split(' ').sort(function (a, b) {
|
|
87
|
-
return b.length - a.length;
|
|
88
|
-
});
|
|
89
|
-
return longestWord[0].length;
|
|
90
|
-
}; // amountToIncreaseWidth is also used in plot
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
exports.findLongestWord = findLongestWord;
|
|
94
|
-
|
|
95
|
-
var amountToIncreaseWidth = function amountToIncreaseWidth(longestWord) {
|
|
96
|
-
if (!longestWord) {
|
|
97
|
-
return 0;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
return longestWord * 10;
|
|
101
|
-
};
|
|
102
|
-
|
|
103
|
-
exports.amountToIncreaseWidth = amountToIncreaseWidth;
|
|
104
|
-
|
|
105
|
-
var polygonToArea = function polygonToArea(points) {
|
|
106
|
-
var h = (0, _head["default"])(points);
|
|
107
|
-
var area = {
|
|
108
|
-
left: h.x,
|
|
109
|
-
top: h.y,
|
|
110
|
-
bottom: h.y,
|
|
111
|
-
right: h.x
|
|
112
|
-
};
|
|
113
|
-
return (0, _tail["default"])(points).reduce(function (a, p) {
|
|
114
|
-
a.left = Math.min(a.left, p.x);
|
|
115
|
-
a.top = Math.max(a.top, p.y);
|
|
116
|
-
a.bottom = Math.min(a.bottom, p.y);
|
|
117
|
-
a.right = Math.max(a.right, p.x);
|
|
118
|
-
return a;
|
|
119
|
-
}, area);
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
exports.polygonToArea = polygonToArea;
|
|
123
|
-
|
|
124
|
-
var lineToArea = function lineToArea(from, to) {
|
|
125
|
-
return pointsToArea(from, to);
|
|
126
|
-
};
|
|
127
|
-
|
|
128
|
-
exports.lineToArea = lineToArea;
|
|
129
|
-
|
|
130
|
-
var pointsToArea = function pointsToArea(a, b) {
|
|
131
|
-
(0, _invariant["default"])(!!a && !!b, 'a or b is undefined');
|
|
132
|
-
var left = Math.min(a.x, b.x);
|
|
133
|
-
var top = Math.max(a.y, b.y);
|
|
134
|
-
var bottom = Math.min(a.y, b.y);
|
|
135
|
-
var right = Math.max(a.x, b.x);
|
|
136
|
-
return {
|
|
137
|
-
left: left,
|
|
138
|
-
top: top,
|
|
139
|
-
bottom: bottom,
|
|
140
|
-
right: right
|
|
141
|
-
};
|
|
142
|
-
};
|
|
143
|
-
|
|
144
|
-
exports.pointsToArea = pointsToArea;
|
|
145
|
-
|
|
146
|
-
var isDomainRangeEqual = function isDomainRangeEqual(graphProps, nextGraphProps) {
|
|
147
|
-
return (0, _isEqual["default"])(graphProps.domain, nextGraphProps.domain) && (0, _isEqual["default"])(graphProps.range, nextGraphProps.range);
|
|
148
|
-
};
|
|
149
|
-
|
|
150
|
-
exports.isDomainRangeEqual = isDomainRangeEqual;
|
|
151
|
-
|
|
152
|
-
var getRightestPoints = function getRightestPoints(points) {
|
|
153
|
-
var sortedPoints = (0, _cloneDeep["default"])(points);
|
|
154
|
-
sortedPoints.sort(function (a, b) {
|
|
155
|
-
return b.x - a.x;
|
|
156
|
-
});
|
|
157
|
-
return {
|
|
158
|
-
a: sortedPoints[0],
|
|
159
|
-
b: sortedPoints[1]
|
|
160
|
-
};
|
|
161
|
-
};
|
|
162
|
-
|
|
163
|
-
exports.getRightestPoints = getRightestPoints;
|
|
164
|
-
|
|
165
|
-
var getMiddleOfTwoPoints = function getMiddleOfTwoPoints(a, b) {
|
|
166
|
-
return {
|
|
167
|
-
x: (a.x + b.x) / 2,
|
|
168
|
-
y: (a.y + b.y) / 2
|
|
169
|
-
};
|
|
170
|
-
};
|
|
171
|
-
|
|
172
|
-
exports.getMiddleOfTwoPoints = getMiddleOfTwoPoints;
|
|
173
|
-
|
|
174
|
-
var roundNumber = function roundNumber(number) {
|
|
175
|
-
return parseFloat(number.toFixed(4));
|
|
176
|
-
};
|
|
177
|
-
|
|
178
|
-
exports.roundNumber = roundNumber;
|
|
179
|
-
|
|
180
|
-
var sameAxes = function sameAxes(p1, p2) {
|
|
181
|
-
return p1 && p2 && (roundNumber(p1.x) === roundNumber(p2.x) || roundNumber(p1.y) === roundNumber(p2.y));
|
|
182
|
-
};
|
|
183
|
-
|
|
184
|
-
exports.sameAxes = sameAxes;
|
|
185
|
-
|
|
186
|
-
var equalPoints = function equalPoints(p1, p2) {
|
|
187
|
-
return p1 && p2 && (0, _isEqual["default"])({
|
|
188
|
-
x: roundNumber(p1.x),
|
|
189
|
-
y: roundNumber(p1.y)
|
|
190
|
-
}, {
|
|
191
|
-
x: roundNumber(p2.x),
|
|
192
|
-
y: roundNumber(p2.y)
|
|
193
|
-
});
|
|
194
|
-
};
|
|
195
|
-
|
|
196
|
-
exports.equalPoints = equalPoints;
|
|
197
|
-
|
|
198
|
-
var getDistanceBetweenTicks = function getDistanceBetweenTicks(axis, size) {
|
|
199
|
-
var min = axis.min,
|
|
200
|
-
max = axis.max,
|
|
201
|
-
step = axis.step;
|
|
202
|
-
var nbOfTicks = (max - min) / step;
|
|
203
|
-
return size / nbOfTicks;
|
|
204
|
-
};
|
|
205
|
-
|
|
206
|
-
var thinnerShapesNeeded = function thinnerShapesNeeded(graphProps) {
|
|
207
|
-
var domain = graphProps.domain,
|
|
208
|
-
range = graphProps.range,
|
|
209
|
-
_graphProps$size = graphProps.size,
|
|
210
|
-
width = _graphProps$size.width,
|
|
211
|
-
height = _graphProps$size.height; // 14 is the default width of a point
|
|
212
|
-
|
|
213
|
-
return getDistanceBetweenTicks(domain, width) < 14 || getDistanceBetweenTicks(range, height) < 14;
|
|
214
|
-
};
|
|
215
|
-
|
|
216
|
-
exports.thinnerShapesNeeded = thinnerShapesNeeded;
|
|
217
|
-
|
|
218
|
-
var getAdjustedGraphLimits = function getAdjustedGraphLimits(graphProps) {
|
|
219
|
-
var domain = graphProps.domain,
|
|
220
|
-
range = graphProps.range,
|
|
221
|
-
_graphProps$size2 = graphProps.size,
|
|
222
|
-
width = _graphProps$size2.width,
|
|
223
|
-
height = _graphProps$size2.height;
|
|
224
|
-
var domainTicksDistance = getDistanceBetweenTicks(domain, width);
|
|
225
|
-
var rangeTicksDistance = getDistanceBetweenTicks(range, height); // 15 is the distance required for the arrow to extend the graph
|
|
226
|
-
|
|
227
|
-
var domainPadding = domain.step / (domainTicksDistance / 15);
|
|
228
|
-
var rangePadding = range.step / (rangeTicksDistance / 15);
|
|
229
|
-
return {
|
|
230
|
-
domain: {
|
|
231
|
-
min: domain.min - domainPadding,
|
|
232
|
-
max: domain.max + domainPadding
|
|
233
|
-
},
|
|
234
|
-
range: {
|
|
235
|
-
min: range.min - rangePadding,
|
|
236
|
-
max: range.max + rangePadding
|
|
237
|
-
}
|
|
238
|
-
};
|
|
239
|
-
};
|
|
240
|
-
|
|
241
|
-
exports.getAdjustedGraphLimits = getAdjustedGraphLimits;
|
|
242
|
-
|
|
243
|
-
var getDistanceBetweenTwoPoints = function getDistanceBetweenTwoPoints(a, b) {
|
|
244
|
-
return Math.sqrt((b.x - a.x) * (b.x - a.x) + (b.y - a.y) * (b.y - a.y));
|
|
245
|
-
};
|
|
246
|
-
|
|
247
|
-
exports.getDistanceBetweenTwoPoints = getDistanceBetweenTwoPoints;
|
|
248
|
-
|
|
249
|
-
var sortPoints = function sortPoints(array) {
|
|
250
|
-
return (array || []).sort(function (a, b) {
|
|
251
|
-
return a.x - b.x || a.y - b.y;
|
|
252
|
-
});
|
|
253
|
-
}; // check colliniarity of 3 points (source: https://www.geeksforgeeks.org/program-check-three-points-collinear/)
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
var checkCollinearity = function checkCollinearity(a, b, c) {
|
|
257
|
-
return (a.x - b.x) * (c.y - b.y) === (c.x - b.x) * (a.y - b.y);
|
|
258
|
-
}; // 2 lines are overlapping if all 4 points are collinear
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
var isSameLine = function isSameLine(markA, markB) {
|
|
262
|
-
return checkCollinearity(markA.from, markB.from, markB.to) && checkCollinearity(markA.to, markB.from, markB.to);
|
|
263
|
-
};
|
|
264
|
-
|
|
265
|
-
var isSameCircle = function isSameCircle(markA, markB) {
|
|
266
|
-
return equalPoints(markA.root, markB.root) && getDistanceBetweenTwoPoints(markB.root, markB.edge) === getDistanceBetweenTwoPoints(markA.root, markA.edge);
|
|
267
|
-
};
|
|
268
|
-
|
|
269
|
-
var isDuplicatedMark = function isDuplicatedMark(mark, marks, oldMark) {
|
|
270
|
-
var type = mark.type,
|
|
271
|
-
building = mark.building;
|
|
272
|
-
|
|
273
|
-
if (building) {
|
|
274
|
-
return false;
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
var filteredMarks = (marks || []).filter(function (m) {
|
|
278
|
-
return m.type === type && !m.building;
|
|
279
|
-
});
|
|
280
|
-
var index = filteredMarks.findIndex(function (m) {
|
|
281
|
-
return (0, _isEqual["default"])(m, oldMark);
|
|
282
|
-
});
|
|
283
|
-
|
|
284
|
-
if (index !== -1) {
|
|
285
|
-
filteredMarks.splice(index, 1);
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
var duplicated = filteredMarks.find(function (m) {
|
|
289
|
-
if (type === 'circle' || type === 'parabola' || type === 'sine') {
|
|
290
|
-
var root = mark.root,
|
|
291
|
-
edge = mark.edge;
|
|
292
|
-
return equalPoints(root, m.root) && equalPoints(edge, m.edge) || type === 'circle' && isSameCircle(m, mark);
|
|
293
|
-
} else if (type === 'line' || type === 'ray' || type === 'segment' || type === 'vector') {
|
|
294
|
-
var from = mark.from,
|
|
295
|
-
to = mark.to;
|
|
296
|
-
return equalPoints(from, m.from) && equalPoints(to, m.to) || equalPoints(from, m.to) && equalPoints(to, m.from) || type === 'line' && isSameLine(m, mark);
|
|
297
|
-
} else if (type === 'polygon') {
|
|
298
|
-
return (0, _isEqual["default"])(sortPoints((0, _cloneDeep["default"])(mark.points)), sortPoints((0, _cloneDeep["default"])(m.points)));
|
|
299
|
-
} else if (type === 'point') {
|
|
300
|
-
return equalPoints(m, mark);
|
|
301
|
-
}
|
|
302
|
-
});
|
|
303
|
-
return !!duplicated;
|
|
304
|
-
};
|
|
305
|
-
|
|
306
|
-
exports.isDuplicatedMark = isDuplicatedMark;
|
|
307
|
-
//# sourceMappingURL=utils.js.map
|
package/lib/utils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils.js"],"names":["tickCount","utils","bounds","point","getAngleDeg","arrowDimensions","getTickValues","prop","tickValues","tickVal","min","indexOf","push","Math","round","step","max","filter","tV","countWords","label","words","split","length","findLongestWord","longestWord","replace","sort","a","b","amountToIncreaseWidth","polygonToArea","points","h","area","left","x","top","y","bottom","right","reduce","p","lineToArea","from","to","pointsToArea","isDomainRangeEqual","graphProps","nextGraphProps","domain","range","getRightestPoints","sortedPoints","getMiddleOfTwoPoints","roundNumber","number","parseFloat","toFixed","sameAxes","p1","p2","equalPoints","getDistanceBetweenTicks","axis","size","nbOfTicks","thinnerShapesNeeded","width","height","getAdjustedGraphLimits","domainTicksDistance","rangeTicksDistance","domainPadding","rangePadding","getDistanceBetweenTwoPoints","sqrt","sortPoints","array","checkCollinearity","c","isSameLine","markA","markB","isSameCircle","root","edge","isDuplicatedMark","mark","marks","oldMark","type","building","filteredMarks","m","index","findIndex","splice","duplicated","find"],"mappings":"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","sourcesContent":["import head from 'lodash/head';\nimport tail from 'lodash/tail';\nimport { utils } from '@pie-lib/plot';\nimport invariant from 'invariant';\nimport isEqual from 'lodash/isEqual';\nimport isEmpty from 'lodash/isEmpty';\nimport cloneDeep from 'lodash/cloneDeep';\n\nexport const tickCount = utils.tickCount;\nexport const bounds = utils.bounds;\nexport const point = utils.point;\n\n//TODO: This can be removed?\nexport const getAngleDeg = () => 0;\n//TODO: This can be removed?\nexport const arrowDimensions = () => 0;\n\nexport const getTickValues = (prop) => {\n const tickValues = [];\n let tickVal = 0;\n\n while (tickVal >= prop.min && tickValues.indexOf(tickVal) < 0) {\n tickValues.push(tickVal);\n tickVal = Math.round((tickVal - prop.step) * 10000) / 10000;\n }\n\n tickVal = Math.round(prop.step * 10000) / 10000;\n\n while (tickVal <= prop.max && tickValues.indexOf(tickVal) < 0) {\n tickValues.push(tickVal);\n tickVal = Math.round((tickVal + prop.step) * 10000) / 10000;\n }\n\n // return only ticks that are inside the min-max interval\n if (tickValues) {\n return tickValues.filter((tV) => tV >= prop.min && tV <= prop.max);\n }\n\n return [];\n};\n\nexport const countWords = (label) => {\n if (label == null || isEmpty(label)) {\n return 1;\n }\n\n const words = label.split(' ');\n return words.length;\n};\n\n// findLongestWord is also used in plot\nexport const findLongestWord = (label) => {\n let longestWord = (label || '')\n .replace(/<[^>]+>/g, '')\n .split(' ')\n .sort((a, b) => b.length - a.length);\n\n return longestWord[0].length;\n};\n\n// amountToIncreaseWidth is also used in plot\nexport const amountToIncreaseWidth = (longestWord) => {\n if (!longestWord) {\n return 0;\n }\n\n return longestWord * 10;\n};\n\nexport const polygonToArea = (points) => {\n const h = head(points);\n const area = {\n left: h.x,\n top: h.y,\n bottom: h.y,\n right: h.x,\n };\n return tail(points).reduce((a, p) => {\n a.left = Math.min(a.left, p.x);\n a.top = Math.max(a.top, p.y);\n a.bottom = Math.min(a.bottom, p.y);\n a.right = Math.max(a.right, p.x);\n return a;\n }, area);\n};\n\nexport const lineToArea = (from, to) => pointsToArea(from, to);\n\nexport const pointsToArea = (a, b) => {\n invariant(!!a && !!b, 'a or b is undefined');\n const left = Math.min(a.x, b.x);\n const top = Math.max(a.y, b.y);\n const bottom = Math.min(a.y, b.y);\n const right = Math.max(a.x, b.x);\n return { left, top, bottom, right };\n};\n\nexport const isDomainRangeEqual = (graphProps, nextGraphProps) => {\n return isEqual(graphProps.domain, nextGraphProps.domain) && isEqual(graphProps.range, nextGraphProps.range);\n};\n\nexport const getRightestPoints = (points) => {\n const sortedPoints = cloneDeep(points);\n sortedPoints.sort((a, b) => b.x - a.x);\n\n return { a: sortedPoints[0], b: sortedPoints[1] };\n};\n\nexport const getMiddleOfTwoPoints = (a, b) => ({\n x: (a.x + b.x) / 2,\n y: (a.y + b.y) / 2,\n});\n\nexport const roundNumber = (number) => parseFloat(number.toFixed(4));\n\nexport const sameAxes = (p1, p2) =>\n p1 && p2 && (roundNumber(p1.x) === roundNumber(p2.x) || roundNumber(p1.y) === roundNumber(p2.y));\n\nexport const equalPoints = (p1, p2) =>\n p1 &&\n p2 &&\n isEqual(\n {\n x: roundNumber(p1.x),\n y: roundNumber(p1.y),\n },\n {\n x: roundNumber(p2.x),\n y: roundNumber(p2.y),\n },\n );\n\nconst getDistanceBetweenTicks = (axis, size) => {\n const { min, max, step } = axis;\n const nbOfTicks = (max - min) / step;\n\n return size / nbOfTicks;\n};\n\nexport const thinnerShapesNeeded = (graphProps) => {\n const {\n domain,\n range,\n size: { width, height },\n } = graphProps;\n\n // 14 is the default width of a point\n return getDistanceBetweenTicks(domain, width) < 14 || getDistanceBetweenTicks(range, height) < 14;\n};\n\nexport const getAdjustedGraphLimits = (graphProps) => {\n const {\n domain,\n range,\n size: { width, height },\n } = graphProps;\n const domainTicksDistance = getDistanceBetweenTicks(domain, width);\n const rangeTicksDistance = getDistanceBetweenTicks(range, height);\n\n // 15 is the distance required for the arrow to extend the graph\n const domainPadding = domain.step / (domainTicksDistance / 15);\n const rangePadding = range.step / (rangeTicksDistance / 15);\n\n return {\n domain: {\n min: domain.min - domainPadding,\n max: domain.max + domainPadding,\n },\n range: {\n min: range.min - rangePadding,\n max: range.max + rangePadding,\n },\n };\n};\n\nexport const getDistanceBetweenTwoPoints = (a, b) => Math.sqrt((b.x - a.x) * (b.x - a.x) + (b.y - a.y) * (b.y - a.y));\n\nconst sortPoints = (array) => (array || []).sort((a, b) => a.x - b.x || a.y - b.y);\n\n// check colliniarity of 3 points (source: https://www.geeksforgeeks.org/program-check-three-points-collinear/)\nconst checkCollinearity = (a, b, c) => (a.x - b.x) * (c.y - b.y) === (c.x - b.x) * (a.y - b.y);\n\n// 2 lines are overlapping if all 4 points are collinear\nconst isSameLine = (markA, markB) =>\n checkCollinearity(markA.from, markB.from, markB.to) && checkCollinearity(markA.to, markB.from, markB.to);\n\nconst isSameCircle = (markA, markB) =>\n equalPoints(markA.root, markB.root) &&\n getDistanceBetweenTwoPoints(markB.root, markB.edge) === getDistanceBetweenTwoPoints(markA.root, markA.edge);\n\nexport const isDuplicatedMark = (mark, marks, oldMark) => {\n const { type, building } = mark;\n\n if (building) {\n return false;\n }\n\n const filteredMarks = (marks || []).filter((m) => m.type === type && !m.building);\n const index = filteredMarks.findIndex((m) => isEqual(m, oldMark));\n\n if (index !== -1) {\n filteredMarks.splice(index, 1);\n }\n\n const duplicated = filteredMarks.find((m) => {\n if (type === 'circle' || type === 'parabola' || type === 'sine') {\n const { root, edge } = mark;\n\n return (equalPoints(root, m.root) && equalPoints(edge, m.edge)) || (type === 'circle' && isSameCircle(m, mark));\n } else if (type === 'line' || type === 'ray' || type === 'segment' || type === 'vector') {\n const { from, to } = mark;\n\n return (\n (equalPoints(from, m.from) && equalPoints(to, m.to)) ||\n (equalPoints(from, m.to) && equalPoints(to, m.from)) ||\n (type === 'line' && isSameLine(m, mark))\n );\n } else if (type === 'polygon') {\n return isEqual(sortPoints(cloneDeep(mark.points)), sortPoints(cloneDeep(m.points)));\n } else if (type === 'point') {\n return equalPoints(m, mark);\n }\n });\n\n return !!duplicated;\n};\n"],"file":"utils.js"}
|