@pie-lib/graphing-solution-set 2.16.0-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.
Files changed (151) hide show
  1. package/CHANGELOG.json +1 -0
  2. package/CHANGELOG.md +16 -0
  3. package/LICENSE.md +5 -0
  4. package/NEXT.CHANGELOG.json +1 -0
  5. package/lib/__tests__/graph-with-controls.test.js +191 -0
  6. package/lib/__tests__/graph.test.js +290 -0
  7. package/lib/__tests__/grid.test.js +40 -0
  8. package/lib/__tests__/labels.test.js +59 -0
  9. package/lib/__tests__/mark-label.test.js +154 -0
  10. package/lib/__tests__/toggle-bar.test.js +54 -0
  11. package/lib/__tests__/tool-menu.test.js +43 -0
  12. package/lib/__tests__/undo-redo.test.js +42 -0
  13. package/lib/__tests__/use-debounce.test.js +28 -0
  14. package/lib/__tests__/utils.js +72 -0
  15. package/lib/__tests__/utils.test.js +133 -0
  16. package/lib/axis/__tests__/arrow.test.js +68 -0
  17. package/lib/axis/__tests__/axes.test.js +214 -0
  18. package/lib/axis/arrow.js +115 -0
  19. package/lib/axis/axes.js +415 -0
  20. package/lib/axis/index.js +26 -0
  21. package/lib/bg.js +139 -0
  22. package/lib/container/actions.js +24 -0
  23. package/lib/container/index.js +166 -0
  24. package/lib/container/marks.js +27 -0
  25. package/lib/container/middleware.js +25 -0
  26. package/lib/container/reducer.js +25 -0
  27. package/lib/coordinates-label.js +109 -0
  28. package/lib/graph-with-controls.js +372 -0
  29. package/lib/graph.js +419 -0
  30. package/lib/grid-setup.js +462 -0
  31. package/lib/grid.js +176 -0
  32. package/lib/index.js +51 -0
  33. package/lib/labels.js +299 -0
  34. package/lib/mark-label.js +208 -0
  35. package/lib/toggle-bar.js +336 -0
  36. package/lib/tool-menu.js +325 -0
  37. package/lib/tools/index.js +29 -0
  38. package/lib/tools/line/__tests__/component.test.js +56 -0
  39. package/lib/tools/line/component.js +106 -0
  40. package/lib/tools/line/index.js +16 -0
  41. package/lib/tools/polygon/__tests__/component.test.js +245 -0
  42. package/lib/tools/polygon/__tests__/index.test.js +95 -0
  43. package/lib/tools/polygon/__tests__/line.test.js +43 -0
  44. package/lib/tools/polygon/__tests__/polygon.test.js +73 -0
  45. package/lib/tools/polygon/component.js +457 -0
  46. package/lib/tools/polygon/index.js +106 -0
  47. package/lib/tools/polygon/line.js +151 -0
  48. package/lib/tools/polygon/polygon.js +171 -0
  49. package/lib/tools/shared/__tests__/arrow-head.test.js +62 -0
  50. package/lib/tools/shared/arrow-head.js +75 -0
  51. package/lib/tools/shared/line/__tests__/index.test.js +291 -0
  52. package/lib/tools/shared/line/__tests__/line-path.test.js +78 -0
  53. package/lib/tools/shared/line/__tests__/with-root-edge.test.js +122 -0
  54. package/lib/tools/shared/line/index.js +637 -0
  55. package/lib/tools/shared/line/line-path.js +145 -0
  56. package/lib/tools/shared/line/with-root-edge.js +155 -0
  57. package/lib/tools/shared/point/__tests__/arrow-point.test.js +137 -0
  58. package/lib/tools/shared/point/__tests__/base-point.test.js +134 -0
  59. package/lib/tools/shared/point/arrow-point.js +113 -0
  60. package/lib/tools/shared/point/arrow.js +96 -0
  61. package/lib/tools/shared/point/base-point.js +151 -0
  62. package/lib/tools/shared/point/index.js +94 -0
  63. package/lib/tools/shared/styles.js +49 -0
  64. package/lib/tools/shared/types.js +19 -0
  65. package/lib/undo-redo.js +107 -0
  66. package/lib/use-debounce.js +32 -0
  67. package/lib/utils.js +314 -0
  68. package/package.json +50 -0
  69. package/src/__tests__/__snapshots__/graph-with-controls.test.jsx.snap +114 -0
  70. package/src/__tests__/__snapshots__/graph.test.jsx.snap +213 -0
  71. package/src/__tests__/__snapshots__/grid.test.jsx.snap +54 -0
  72. package/src/__tests__/__snapshots__/labels.test.jsx.snap +30 -0
  73. package/src/__tests__/__snapshots__/mark-label.test.jsx.snap +37 -0
  74. package/src/__tests__/__snapshots__/toggle-bar.test.jsx.snap +7 -0
  75. package/src/__tests__/__snapshots__/tool-menu.test.jsx.snap +35 -0
  76. package/src/__tests__/__snapshots__/undo-redo.test.jsx.snap +15 -0
  77. package/src/__tests__/graph-with-controls.test.jsx +131 -0
  78. package/src/__tests__/graph.test.jsx +230 -0
  79. package/src/__tests__/grid.test.jsx +20 -0
  80. package/src/__tests__/labels.test.jsx +38 -0
  81. package/src/__tests__/mark-label.test.jsx +68 -0
  82. package/src/__tests__/toggle-bar.test.jsx +36 -0
  83. package/src/__tests__/tool-menu.test.jsx +29 -0
  84. package/src/__tests__/undo-redo.test.jsx +25 -0
  85. package/src/__tests__/use-debounce.test.js +21 -0
  86. package/src/__tests__/utils.js +38 -0
  87. package/src/__tests__/utils.test.js +151 -0
  88. package/src/axis/__tests__/__snapshots__/arrow.test.jsx.snap +33 -0
  89. package/src/axis/__tests__/__snapshots__/axes.test.jsx.snap +122 -0
  90. package/src/axis/__tests__/arrow.test.jsx +39 -0
  91. package/src/axis/__tests__/axes.test.jsx +220 -0
  92. package/src/axis/arrow.jsx +62 -0
  93. package/src/axis/axes.jsx +307 -0
  94. package/src/axis/index.js +2 -0
  95. package/src/bg.jsx +96 -0
  96. package/src/container/actions.js +8 -0
  97. package/src/container/index.jsx +86 -0
  98. package/src/container/marks.js +14 -0
  99. package/src/container/middleware.js +7 -0
  100. package/src/container/reducer.js +5 -0
  101. package/src/coordinates-label.jsx +73 -0
  102. package/src/graph-with-controls.jsx +263 -0
  103. package/src/graph.jsx +334 -0
  104. package/src/grid-setup.jsx +427 -0
  105. package/src/grid.jsx +135 -0
  106. package/src/index.js +7 -0
  107. package/src/labels.jsx +214 -0
  108. package/src/mark-label.jsx +136 -0
  109. package/src/toggle-bar.jsx +242 -0
  110. package/src/tool-menu.jsx +294 -0
  111. package/src/tools/index.js +8 -0
  112. package/src/tools/line/__tests__/__snapshots__/component.test.jsx.snap +20 -0
  113. package/src/tools/line/__tests__/component.test.jsx +36 -0
  114. package/src/tools/line/component.jsx +77 -0
  115. package/src/tools/line/index.js +4 -0
  116. package/src/tools/polygon/__tests__/__snapshots__/component.test.jsx.snap +94 -0
  117. package/src/tools/polygon/__tests__/__snapshots__/line.test.jsx.snap +44 -0
  118. package/src/tools/polygon/__tests__/__snapshots__/polygon.test.jsx.snap +53 -0
  119. package/src/tools/polygon/__tests__/component.test.jsx +214 -0
  120. package/src/tools/polygon/__tests__/index.test.js +65 -0
  121. package/src/tools/polygon/__tests__/line.test.jsx +25 -0
  122. package/src/tools/polygon/__tests__/polygon.test.jsx +44 -0
  123. package/src/tools/polygon/component.jsx +336 -0
  124. package/src/tools/polygon/index.js +52 -0
  125. package/src/tools/polygon/line.jsx +78 -0
  126. package/src/tools/polygon/polygon.jsx +101 -0
  127. package/src/tools/shared/__tests__/__snapshots__/arrow-head.test.jsx.snap +32 -0
  128. package/src/tools/shared/__tests__/arrow-head.test.jsx +34 -0
  129. package/src/tools/shared/arrow-head.jsx +46 -0
  130. package/src/tools/shared/line/__tests__/__snapshots__/index.test.jsx.snap +360 -0
  131. package/src/tools/shared/line/__tests__/__snapshots__/line-path.test.jsx.snap +57 -0
  132. package/src/tools/shared/line/__tests__/__snapshots__/with-root-edge.test.jsx.snap +63 -0
  133. package/src/tools/shared/line/__tests__/index.test.jsx +247 -0
  134. package/src/tools/shared/line/__tests__/line-path.test.jsx +53 -0
  135. package/src/tools/shared/line/__tests__/with-root-edge.test.jsx +73 -0
  136. package/src/tools/shared/line/index.jsx +473 -0
  137. package/src/tools/shared/line/line-path.jsx +88 -0
  138. package/src/tools/shared/line/with-root-edge.jsx +97 -0
  139. package/src/tools/shared/point/__tests__/__snapshots__/arrow-point.test.jsx.snap +55 -0
  140. package/src/tools/shared/point/__tests__/__snapshots__/base-point.test.jsx.snap +43 -0
  141. package/src/tools/shared/point/__tests__/arrow-point.test.jsx +87 -0
  142. package/src/tools/shared/point/__tests__/base-point.test.jsx +84 -0
  143. package/src/tools/shared/point/arrow-point.jsx +60 -0
  144. package/src/tools/shared/point/arrow.jsx +40 -0
  145. package/src/tools/shared/point/base-point.jsx +86 -0
  146. package/src/tools/shared/point/index.jsx +60 -0
  147. package/src/tools/shared/styles.js +20 -0
  148. package/src/tools/shared/types.js +8 -0
  149. package/src/undo-redo.jsx +47 -0
  150. package/src/use-debounce.js +13 -0
  151. package/src/utils.js +234 -0
@@ -0,0 +1,415 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.sharedValues = exports.firstNegativeValue = exports["default"] = exports.RawYAxis = exports.RawXAxis = exports.AxisPropTypes = void 0;
9
+
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+
12
+ var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
13
+
14
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
15
+
16
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
17
+
18
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
19
+
20
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
21
+
22
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
23
+
24
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
25
+
26
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
27
+
28
+ var _react = _interopRequireDefault(require("react"));
29
+
30
+ var _axis = require("@vx/axis");
31
+
32
+ var _plot = require("@pie-lib/plot");
33
+
34
+ var _propTypes = _interopRequireDefault(require("prop-types"));
35
+
36
+ var _arrow = _interopRequireDefault(require("./arrow"));
37
+
38
+ var _core = require("@material-ui/core");
39
+
40
+ var _utils = require("../utils");
41
+
42
+ var _renderUi = require("@pie-lib/render-ui");
43
+
44
+ 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; }
45
+
46
+ 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; }
47
+
48
+ 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); }; }
49
+
50
+ 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; } }
51
+
52
+ var AxisPropTypes = {
53
+ includeArrows: _propTypes["default"].object,
54
+ graphProps: _propTypes["default"].object
55
+ };
56
+ exports.AxisPropTypes = AxisPropTypes;
57
+ var AxisDefaultProps = {
58
+ includeArrows: {
59
+ left: true,
60
+ right: true,
61
+ up: true,
62
+ down: true
63
+ }
64
+ };
65
+
66
+ var axisStyles = function axisStyles(theme) {
67
+ return {
68
+ line: {
69
+ stroke: '#8a92c0',
70
+ strokeWidth: 4
71
+ },
72
+ arrow: {
73
+ fill: '#8a92c0'
74
+ },
75
+ tick: {
76
+ fill: _renderUi.color.defaults.BLACK,
77
+ '& > line': {
78
+ stroke: '#8a92c0'
79
+ }
80
+ },
81
+ labelFontSize: {
82
+ fontSize: theme.typography.fontSize
83
+ },
84
+ axisLabelHolder: {
85
+ padding: 0,
86
+ margin: 0,
87
+ textAlign: 'center',
88
+ '* > *': {
89
+ margin: 0,
90
+ padding: 0
91
+ },
92
+ fontSize: theme.typography.fontSize
93
+ }
94
+ };
95
+ };
96
+
97
+ var tickLabelStyles = {
98
+ fontFamily: 'Roboto',
99
+ fontSize: '14px',
100
+ cursor: 'inherit'
101
+ };
102
+
103
+ var sharedValues = function sharedValues(firstNegativeX, firstNegativeY, distanceFromOriginToFirstNegativeX, distanceFromOriginToFirstNegativeY, deltaAllowance, dy) {
104
+ var result = [];
105
+
106
+ if (firstNegativeX === firstNegativeY && distanceFromOriginToFirstNegativeX - deltaAllowance < distanceFromOriginToFirstNegativeY && distanceFromOriginToFirstNegativeY < distanceFromOriginToFirstNegativeX + deltaAllowance && distanceFromOriginToFirstNegativeX - deltaAllowance < dy && dy < distanceFromOriginToFirstNegativeX + deltaAllowance) {
107
+ result.push(firstNegativeX);
108
+ }
109
+
110
+ return result;
111
+ };
112
+
113
+ exports.sharedValues = sharedValues;
114
+
115
+ var firstNegativeValue = function firstNegativeValue(interval) {
116
+ return (interval || []).find(function (element) {
117
+ return element < 0;
118
+ });
119
+ };
120
+
121
+ exports.firstNegativeValue = firstNegativeValue;
122
+
123
+ var RawXAxis = /*#__PURE__*/function (_React$Component) {
124
+ (0, _inherits2["default"])(RawXAxis, _React$Component);
125
+
126
+ var _super = _createSuper(RawXAxis);
127
+
128
+ function RawXAxis() {
129
+ (0, _classCallCheck2["default"])(this, RawXAxis);
130
+ return _super.apply(this, arguments);
131
+ }
132
+
133
+ (0, _createClass2["default"])(RawXAxis, [{
134
+ key: "render",
135
+ value: function render() {
136
+ var _this$props = this.props,
137
+ includeArrows = _this$props.includeArrows,
138
+ classes = _this$props.classes,
139
+ graphProps = _this$props.graphProps,
140
+ columnTicksValues = _this$props.columnTicksValues,
141
+ skipValues = _this$props.skipValues,
142
+ distanceFromOriginToFirstNegativeY = _this$props.distanceFromOriginToFirstNegativeY,
143
+ dy = _this$props.dy;
144
+
145
+ var _ref = graphProps || {},
146
+ scale = _ref.scale,
147
+ domain = _ref.domain,
148
+ size = _ref.size,
149
+ range = _ref.range; // Having 0 as a number in columnTicksValues does not make 0 to show up
150
+ // so we use this trick, by defining it as a string:
151
+
152
+
153
+ var tickValues = (domain.labelStep || range.labelStep) && domain.min <= 0 ? ['0'].concat((0, _toConsumableArray2["default"])(columnTicksValues)) : columnTicksValues; // However, the '0' has to be displayed only if other tick labels (y-axis or x-axis) are displayed
154
+
155
+ var labelProps = function labelProps(label) {
156
+ var y = skipValues && skipValues[0] === label ? distanceFromOriginToFirstNegativeY + 4 : dy;
157
+ return _objectSpread(_objectSpread({}, tickLabelStyles), {}, {
158
+ textAnchor: 'middle',
159
+ y: y,
160
+ dx: label === '0' ? -10 : 0,
161
+ dy: label === '0' ? -7 : 0
162
+ });
163
+ };
164
+
165
+ var necessaryRows = (0, _utils.countWords)(domain.axisLabel);
166
+ var longestWord = (0, _utils.findLongestWord)(domain.axisLabel);
167
+ var necessaryWidth = (0, _utils.amountToIncreaseWidth)(longestWord) + 2;
168
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_axis.Axis, {
169
+ axisLineClassName: classes.line,
170
+ scale: scale.x,
171
+ top: scale.y(0),
172
+ left: 0,
173
+ label: domain.label,
174
+ rangePadding: 8,
175
+ tickClassName: classes.tick,
176
+ tickFormat: function tickFormat(value) {
177
+ return value;
178
+ },
179
+ tickLabelProps: labelProps,
180
+ tickValues: tickValues
181
+ }), includeArrows && includeArrows.left && /*#__PURE__*/_react["default"].createElement(_arrow["default"], {
182
+ direction: "left",
183
+ x: domain.min,
184
+ y: 0,
185
+ className: classes.arrow,
186
+ scale: scale
187
+ }), includeArrows && includeArrows.right && /*#__PURE__*/_react["default"].createElement(_arrow["default"], {
188
+ direction: "right",
189
+ x: domain.max,
190
+ y: 0,
191
+ className: classes.arrow,
192
+ scale: scale
193
+ }), domain.axisLabel && /*#__PURE__*/_react["default"].createElement("foreignObject", {
194
+ x: size.width + 17,
195
+ y: scale.y(0) - 9,
196
+ width: necessaryWidth,
197
+ height: 20 * necessaryRows
198
+ }, /*#__PURE__*/_react["default"].createElement("div", {
199
+ dangerouslySetInnerHTML: {
200
+ __html: domain.axisLabel
201
+ },
202
+ className: classes.labelFontSize
203
+ })));
204
+ }
205
+ }]);
206
+ return RawXAxis;
207
+ }(_react["default"].Component);
208
+
209
+ exports.RawXAxis = RawXAxis;
210
+ (0, _defineProperty2["default"])(RawXAxis, "propTypes", _objectSpread(_objectSpread({}, AxisPropTypes), {}, {
211
+ classes: _propTypes["default"].object,
212
+ graphProps: _plot.types.GraphPropsType.isRequired
213
+ }));
214
+ (0, _defineProperty2["default"])(RawXAxis, "defaultProps", AxisDefaultProps);
215
+ var XAxis = (0, _core.withStyles)(axisStyles)(RawXAxis);
216
+
217
+ var RawYAxis = /*#__PURE__*/function (_React$Component2) {
218
+ (0, _inherits2["default"])(RawYAxis, _React$Component2);
219
+
220
+ var _super2 = _createSuper(RawYAxis);
221
+
222
+ function RawYAxis() {
223
+ (0, _classCallCheck2["default"])(this, RawYAxis);
224
+ return _super2.apply(this, arguments);
225
+ }
226
+
227
+ (0, _createClass2["default"])(RawYAxis, [{
228
+ key: "render",
229
+ value: function render() {
230
+ var _this$props2 = this.props,
231
+ classes = _this$props2.classes,
232
+ includeArrows = _this$props2.includeArrows,
233
+ graphProps = _this$props2.graphProps,
234
+ skipValues = _this$props2.skipValues,
235
+ rowTickValues = _this$props2.rowTickValues;
236
+
237
+ var _ref2 = graphProps || {},
238
+ scale = _ref2.scale,
239
+ range = _ref2.range,
240
+ size = _ref2.size;
241
+
242
+ var necessaryWidth = range.axisLabel ? (0, _utils.amountToIncreaseWidth)(range.axisLabel.length) : 0;
243
+
244
+ var customTickFormat = function customTickFormat(value) {
245
+ return skipValues && skipValues.indexOf(value) >= 0 ? '' : value;
246
+ };
247
+
248
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_axis.Axis, {
249
+ axisLineClassName: classes.line,
250
+ orientation: 'left',
251
+ scale: scale.y,
252
+ top: 0,
253
+ height: size.height,
254
+ left: scale.x(0),
255
+ label: range.label,
256
+ labelProps: {
257
+ 'data-pie-readable': false
258
+ },
259
+ rangePadding: 8,
260
+ tickLength: 10,
261
+ tickClassName: classes.tick,
262
+ tickFormat: customTickFormat,
263
+ tickLabelProps: function tickLabelProps(value) {
264
+ var digits = value.toLocaleString().replace(/[.-]/g, '').length || 1;
265
+ return _objectSpread(_objectSpread({}, tickLabelStyles), {}, {
266
+ dy: 4,
267
+ dx: -10 - digits * 9,
268
+ 'data-pie-readable': false
269
+ });
270
+ },
271
+ hideZero: true,
272
+ tickTextAnchor: 'bottom',
273
+ tickValues: rowTickValues
274
+ }), includeArrows && includeArrows.down && /*#__PURE__*/_react["default"].createElement(_arrow["default"], {
275
+ direction: "down",
276
+ x: 0,
277
+ y: range.min,
278
+ className: classes.arrow,
279
+ scale: scale
280
+ }), includeArrows && includeArrows.up && /*#__PURE__*/_react["default"].createElement(_arrow["default"], {
281
+ direction: "up",
282
+ x: 0,
283
+ y: range.max,
284
+ className: classes.arrow,
285
+ scale: scale
286
+ }), range.axisLabel && /*#__PURE__*/_react["default"].createElement("foreignObject", {
287
+ x: scale.x(0) - necessaryWidth / 2,
288
+ y: -33,
289
+ width: necessaryWidth,
290
+ height: "20"
291
+ }, /*#__PURE__*/_react["default"].createElement(_renderUi.Readable, {
292
+ "false": true
293
+ }, /*#__PURE__*/_react["default"].createElement("div", {
294
+ dangerouslySetInnerHTML: {
295
+ __html: range.axisLabel
296
+ },
297
+ className: classes.axisLabelHolder
298
+ }))));
299
+ }
300
+ }]);
301
+ return RawYAxis;
302
+ }(_react["default"].Component);
303
+
304
+ exports.RawYAxis = RawYAxis;
305
+ (0, _defineProperty2["default"])(RawYAxis, "propTypes", _objectSpread(_objectSpread({}, AxisPropTypes), {}, {
306
+ graphProps: _plot.types.GraphPropsType.isRequired
307
+ }));
308
+ (0, _defineProperty2["default"])(RawYAxis, "defaultProps", AxisDefaultProps);
309
+ var YAxis = (0, _core.withStyles)(axisStyles)(RawYAxis);
310
+
311
+ var Axes = /*#__PURE__*/function (_React$Component3) {
312
+ (0, _inherits2["default"])(Axes, _React$Component3);
313
+
314
+ var _super3 = _createSuper(Axes);
315
+
316
+ function Axes() {
317
+ var _this;
318
+
319
+ (0, _classCallCheck2["default"])(this, Axes);
320
+
321
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
322
+ args[_key] = arguments[_key];
323
+ }
324
+
325
+ _this = _super3.call.apply(_super3, [this].concat(args));
326
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "xValues", function () {
327
+ var graphProps = _this.props.graphProps;
328
+
329
+ var _ref3 = graphProps || {},
330
+ scale = _ref3.scale,
331
+ domain = _ref3.domain;
332
+
333
+ if (!domain || !scale) {
334
+ return;
335
+ }
336
+
337
+ var ticks = (0, _utils.getTickValues)(_objectSpread(_objectSpread({}, domain), {}, {
338
+ step: domain.labelStep
339
+ }));
340
+ var negative = firstNegativeValue(ticks);
341
+ return {
342
+ columnTicksValues: ticks,
343
+ firstNegativeX: negative,
344
+ distanceFromOriginToFirstNegativeX: Math.abs(scale.y(0) - scale.y(negative))
345
+ };
346
+ });
347
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "yValues", function () {
348
+ var graphProps = _this.props.graphProps;
349
+
350
+ var _ref4 = graphProps || {},
351
+ scale = _ref4.scale,
352
+ range = _ref4.range;
353
+
354
+ if (!range || !scale) {
355
+ return;
356
+ }
357
+
358
+ var ticks = (0, _utils.getTickValues)(_objectSpread(_objectSpread({}, range), {}, {
359
+ step: range.labelStep
360
+ }));
361
+ var negative = firstNegativeValue(ticks);
362
+ return {
363
+ rowTickValues: ticks,
364
+ firstNegativeY: negative,
365
+ distanceFromOriginToFirstNegativeY: Math.abs(scale.x(0) - scale.x(negative))
366
+ };
367
+ });
368
+ return _this;
369
+ }
370
+
371
+ (0, _createClass2["default"])(Axes, [{
372
+ key: "render",
373
+ value: function render() {
374
+ var graphProps = this.props.graphProps;
375
+
376
+ var _ref5 = graphProps || {},
377
+ domain = _ref5.domain,
378
+ range = _ref5.range;
379
+
380
+ var _this$xValues = this.xValues(),
381
+ columnTicksValues = _this$xValues.columnTicksValues,
382
+ firstNegativeX = _this$xValues.firstNegativeX,
383
+ distanceFromOriginToFirstNegativeX = _this$xValues.distanceFromOriginToFirstNegativeX;
384
+
385
+ var _this$yValues = this.yValues(),
386
+ rowTickValues = _this$yValues.rowTickValues,
387
+ firstNegativeY = _this$yValues.firstNegativeY,
388
+ distanceFromOriginToFirstNegativeY = _this$yValues.distanceFromOriginToFirstNegativeY;
389
+
390
+ var deltaAllowance = 6;
391
+ var dy = 25;
392
+ var skipValues = sharedValues(firstNegativeX, firstNegativeY, distanceFromOriginToFirstNegativeX, distanceFromOriginToFirstNegativeY, deltaAllowance, dy); // each axis has to be displayed only if the domain & range include it
393
+
394
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, range.min <= 0 ? /*#__PURE__*/_react["default"].createElement(XAxis, (0, _extends2["default"])({}, this.props, {
395
+ skipValues: skipValues,
396
+ columnTicksValues: columnTicksValues,
397
+ distanceFromOriginToFirstNegativeY: distanceFromOriginToFirstNegativeY,
398
+ dy: dy
399
+ })) : null, domain.min <= 0 ? /*#__PURE__*/_react["default"].createElement(YAxis, (0, _extends2["default"])({}, this.props, {
400
+ skipValues: skipValues,
401
+ rowTickValues: rowTickValues,
402
+ distanceFromOriginToFirstNegativeX: distanceFromOriginToFirstNegativeX
403
+ })) : null);
404
+ }
405
+ }]);
406
+ return Axes;
407
+ }(_react["default"].Component);
408
+
409
+ exports["default"] = Axes;
410
+ (0, _defineProperty2["default"])(Axes, "propTypes", _objectSpread(_objectSpread({}, AxisPropTypes), {}, {
411
+ classes: _propTypes["default"].object,
412
+ graphProps: _plot.types.GraphPropsType.isRequired
413
+ }));
414
+ (0, _defineProperty2["default"])(Axes, "defaultProps", AxisDefaultProps);
415
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9heGlzL2F4ZXMuanN4Il0sIm5hbWVzIjpbIkF4aXNQcm9wVHlwZXMiLCJpbmNsdWRlQXJyb3dzIiwiUHJvcFR5cGVzIiwib2JqZWN0IiwiZ3JhcGhQcm9wcyIsIkF4aXNEZWZhdWx0UHJvcHMiLCJsZWZ0IiwicmlnaHQiLCJ1cCIsImRvd24iLCJheGlzU3R5bGVzIiwidGhlbWUiLCJsaW5lIiwic3Ryb2tlIiwic3Ryb2tlV2lkdGgiLCJhcnJvdyIsImZpbGwiLCJ0aWNrIiwiY29sb3IiLCJkZWZhdWx0cyIsIkJMQUNLIiwibGFiZWxGb250U2l6ZSIsImZvbnRTaXplIiwidHlwb2dyYXBoeSIsImF4aXNMYWJlbEhvbGRlciIsInBhZGRpbmciLCJtYXJnaW4iLCJ0ZXh0QWxpZ24iLCJ0aWNrTGFiZWxTdHlsZXMiLCJmb250RmFtaWx5IiwiY3Vyc29yIiwic2hhcmVkVmFsdWVzIiwiZmlyc3ROZWdhdGl2ZVgiLCJmaXJzdE5lZ2F0aXZlWSIsImRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVgiLCJkaXN0YW5jZUZyb21PcmlnaW5Ub0ZpcnN0TmVnYXRpdmVZIiwiZGVsdGFBbGxvd2FuY2UiLCJkeSIsInJlc3VsdCIsInB1c2giLCJmaXJzdE5lZ2F0aXZlVmFsdWUiLCJpbnRlcnZhbCIsImZpbmQiLCJlbGVtZW50IiwiUmF3WEF4aXMiLCJwcm9wcyIsImNsYXNzZXMiLCJjb2x1bW5UaWNrc1ZhbHVlcyIsInNraXBWYWx1ZXMiLCJzY2FsZSIsImRvbWFpbiIsInNpemUiLCJyYW5nZSIsInRpY2tWYWx1ZXMiLCJsYWJlbFN0ZXAiLCJtaW4iLCJsYWJlbFByb3BzIiwibGFiZWwiLCJ5IiwidGV4dEFuY2hvciIsImR4IiwibmVjZXNzYXJ5Um93cyIsImF4aXNMYWJlbCIsImxvbmdlc3RXb3JkIiwibmVjZXNzYXJ5V2lkdGgiLCJ4IiwidmFsdWUiLCJtYXgiLCJ3aWR0aCIsIl9faHRtbCIsIlJlYWN0IiwiQ29tcG9uZW50IiwidHlwZXMiLCJHcmFwaFByb3BzVHlwZSIsImlzUmVxdWlyZWQiLCJYQXhpcyIsIlJhd1lBeGlzIiwicm93VGlja1ZhbHVlcyIsImxlbmd0aCIsImN1c3RvbVRpY2tGb3JtYXQiLCJpbmRleE9mIiwiaGVpZ2h0IiwiZGlnaXRzIiwidG9Mb2NhbGVTdHJpbmciLCJyZXBsYWNlIiwiWUF4aXMiLCJBeGVzIiwidGlja3MiLCJzdGVwIiwibmVnYXRpdmUiLCJNYXRoIiwiYWJzIiwieFZhbHVlcyIsInlWYWx1ZXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7O0FBRU8sSUFBTUEsYUFBYSxHQUFHO0FBQzNCQyxFQUFBQSxhQUFhLEVBQUVDLHNCQUFVQyxNQURFO0FBRTNCQyxFQUFBQSxVQUFVLEVBQUVGLHNCQUFVQztBQUZLLENBQXRCOztBQUtQLElBQU1FLGdCQUFnQixHQUFHO0FBQ3ZCSixFQUFBQSxhQUFhLEVBQUU7QUFDYkssSUFBQUEsSUFBSSxFQUFFLElBRE87QUFFYkMsSUFBQUEsS0FBSyxFQUFFLElBRk07QUFHYkMsSUFBQUEsRUFBRSxFQUFFLElBSFM7QUFJYkMsSUFBQUEsSUFBSSxFQUFFO0FBSk87QUFEUSxDQUF6Qjs7QUFTQSxJQUFNQyxVQUFVLEdBQUcsU0FBYkEsVUFBYSxDQUFDQyxLQUFEO0FBQUEsU0FBWTtBQUM3QkMsSUFBQUEsSUFBSSxFQUFFO0FBQ0pDLE1BQUFBLE1BQU0sRUFBRSxTQURKO0FBRUpDLE1BQUFBLFdBQVcsRUFBRTtBQUZULEtBRHVCO0FBSzdCQyxJQUFBQSxLQUFLLEVBQUU7QUFDTEMsTUFBQUEsSUFBSSxFQUFFO0FBREQsS0FMc0I7QUFRN0JDLElBQUFBLElBQUksRUFBRTtBQUNKRCxNQUFBQSxJQUFJLEVBQUVFLGdCQUFNQyxRQUFOLENBQWVDLEtBRGpCO0FBRUosa0JBQVk7QUFDVlAsUUFBQUEsTUFBTSxFQUFFO0FBREU7QUFGUixLQVJ1QjtBQWM3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OztpQ0FKaEJZLEksa0JBTUdqRixnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBBeGlzIH0gZnJvbSAnQHZ4L2F4aXMnO1xuaW1wb3J0IHsgdHlwZXMgfSBmcm9tICdAcGllLWxpYi9wbG90JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgQXJyb3cgZnJvbSAnLi9hcnJvdyc7XG5pbXBvcnQgeyB3aXRoU3R5bGVzIH0gZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUnO1xuaW1wb3J0IHsgY291bnRXb3JkcywgZmluZExvbmdlc3RXb3JkLCBhbW91bnRUb0luY3JlYXNlV2lkdGgsIGdldFRpY2tWYWx1ZXMgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBjb2xvciwgUmVhZGFibGUgfSBmcm9tICdAcGllLWxpYi9yZW5kZXItdWknO1xuXG5leHBvcnQgY29uc3QgQXhpc1Byb3BUeXBlcyA9IHtcbiAgaW5jbHVkZUFycm93czogUHJvcFR5cGVzLm9iamVjdCxcbiAgZ3JhcGhQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbn07XG5cbmNvbnN0IEF4aXNEZWZhdWx0UHJvcHMgPSB7XG4gIGluY2x1ZGVBcnJvd3M6IHtcbiAgICBsZWZ0OiB0cnVlLFxuICAgIHJpZ2h0OiB0cnVlLFxuICAgIHVwOiB0cnVlLFxuICAgIGRvd246IHRydWUsXG4gIH0sXG59O1xuXG5jb25zdCBheGlzU3R5bGVzID0gKHRoZW1lKSA9PiAoe1xuICBsaW5lOiB7XG4gICAgc3Ryb2tlOiAnIzhhOTJjMCcsXG4gICAgc3Ryb2tlV2lkdGg6IDQsXG4gIH0sXG4gIGFycm93OiB7XG4gICAgZmlsbDogJyM4YTkyYzAnLFxuICB9LFxuICB0aWNrOiB7XG4gICAgZmlsbDogY29sb3IuZGVmYXVsdHMuQkxBQ0ssXG4gICAgJyYgPiBsaW5lJzoge1xuICAgICAgc3Ryb2tlOiAnIzhhOTJjMCcsXG4gICAgfSxcbiAgfSxcbiAgbGFiZWxGb250U2l6ZToge1xuICAgIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LmZvbnRTaXplLFxuICB9LFxuICBheGlzTGFiZWxIb2xkZXI6IHtcbiAgICBwYWRkaW5nOiAwLFxuICAgIG1hcmdpbjogMCxcbiAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICcqID4gKic6IHtcbiAgICAgIG1hcmdpbjogMCxcbiAgICAgIHBhZGRpbmc6IDAsXG4gICAgfSxcbiAgICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5mb250U2l6ZSxcbiAgfSxcbn0pO1xuXG5jb25zdCB0aWNrTGFiZWxTdHlsZXMgPSB7XG4gIGZvbnRGYW1pbHk6ICdSb2JvdG8nLFxuICBmb250U2l6ZTogJzE0cHgnLFxuICBjdXJzb3I6ICdpbmhlcml0Jyxcbn07XG5cbmV4cG9ydCBjb25zdCBzaGFyZWRWYWx1ZXMgPSAoXG4gIGZpcnN0TmVnYXRpdmVYLFxuICBmaXJzdE5lZ2F0aXZlWSxcbiAgZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWCxcbiAgZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWSxcbiAgZGVsdGFBbGxvd2FuY2UsXG4gIGR5LFxuKSA9PiB7XG4gIGxldCByZXN1bHQgPSBbXTtcblxuICBpZiAoXG4gICAgZmlyc3ROZWdhdGl2ZVggPT09IGZpcnN0TmVnYXRpdmVZICYmXG4gICAgZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWCAtIGRlbHRhQWxsb3dhbmNlIDwgZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWSAmJlxuICAgIGRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVkgPCBkaXN0YW5jZUZyb21PcmlnaW5Ub0ZpcnN0TmVnYXRpdmVYICsgZGVsdGFBbGxvd2FuY2UgJiZcbiAgICBkaXN0YW5jZUZyb21PcmlnaW5Ub0ZpcnN0TmVnYXRpdmVYIC0gZGVsdGFBbGxvd2FuY2UgPCBkeSAmJlxuICAgIGR5IDwgZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWCArIGRlbHRhQWxsb3dhbmNlXG4gICkge1xuICAgIHJlc3VsdC5wdXNoKGZpcnN0TmVnYXRpdmVYKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3QgZmlyc3ROZWdhdGl2ZVZhbHVlID0gKGludGVydmFsKSA9PiAoaW50ZXJ2YWwgfHwgW10pLmZpbmQoKGVsZW1lbnQpID0+IGVsZW1lbnQgPCAwKTtcblxuZXhwb3J0IGNsYXNzIFJhd1hBeGlzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAuLi5BeGlzUHJvcFR5cGVzLFxuICAgIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgZ3JhcGhQcm9wczogdHlwZXMuR3JhcGhQcm9wc1R5cGUuaXNSZXF1aXJlZCxcbiAgfTtcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IEF4aXNEZWZhdWx0UHJvcHM7XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGluY2x1ZGVBcnJvd3MsXG4gICAgICBjbGFzc2VzLFxuICAgICAgZ3JhcGhQcm9wcyxcbiAgICAgIGNvbHVtblRpY2tzVmFsdWVzLFxuICAgICAgc2tpcFZhbHVlcyxcbiAgICAgIGRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVksXG4gICAgICBkeSxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHNjYWxlLCBkb21haW4sIHNpemUsIHJhbmdlIH0gPSBncmFwaFByb3BzIHx8IHt9O1xuXG4gICAgLy8gSGF2aW5nIDAgYXMgYSBudW1iZXIgaW4gY29sdW1uVGlja3NWYWx1ZXMgZG9lcyBub3QgbWFrZSAwIHRvIHNob3cgdXBcbiAgICAvLyBzbyB3ZSB1c2UgdGhpcyB0cmljaywgYnkgZGVmaW5pbmcgaXQgYXMgYSBzdHJpbmc6XG4gICAgY29uc3QgdGlja1ZhbHVlcyA9XG4gICAgICAoZG9tYWluLmxhYmVsU3RlcCB8fCByYW5nZS5sYWJlbFN0ZXApICYmIGRvbWFpbi5taW4gPD0gMCA/IFsnMCcsIC4uLmNvbHVtblRpY2tzVmFsdWVzXSA6IGNvbHVtblRpY2tzVmFsdWVzO1xuICAgIC8vIEhvd2V2ZXIsIHRoZSAnMCcgaGFzIHRvIGJlIGRpc3BsYXllZCBvbmx5IGlmIG90aGVyIHRpY2sgbGFiZWxzICh5LWF4aXMgb3IgeC1heGlzKSBhcmUgZGlzcGxheWVkXG5cbiAgICBjb25zdCBsYWJlbFByb3BzID0gKGxhYmVsKSA9PiB7XG4gICAgICBjb25zdCB5ID0gc2tpcFZhbHVlcyAmJiBza2lwVmFsdWVzWzBdID09PSBsYWJlbCA/IGRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVkgKyA0IDogZHk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRpY2tMYWJlbFN0eWxlcyxcbiAgICAgICAgdGV4dEFuY2hvcjogJ21pZGRsZScsXG4gICAgICAgIHk6IHksXG4gICAgICAgIGR4OiBsYWJlbCA9PT0gJzAnID8gLTEwIDogMCxcbiAgICAgICAgZHk6IGxhYmVsID09PSAnMCcgPyAtNyA6IDAsXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBuZWNlc3NhcnlSb3dzID0gY291bnRXb3Jkcyhkb21haW4uYXhpc0xhYmVsKTtcbiAgICBjb25zdCBsb25nZXN0V29yZCA9IGZpbmRMb25nZXN0V29yZChkb21haW4uYXhpc0xhYmVsKTtcbiAgICBjb25zdCBuZWNlc3NhcnlXaWR0aCA9IGFtb3VudFRvSW5jcmVhc2VXaWR0aChsb25nZXN0V29yZCkgKyAyO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPEF4aXNcbiAgICAgICAgICBheGlzTGluZUNsYXNzTmFtZT17Y2xhc3Nlcy5saW5lfVxuICAgICAgICAgIHNjYWxlPXtzY2FsZS54fVxuICAgICAgICAgIHRvcD17c2NhbGUueSgwKX1cbiAgICAgICAgICBsZWZ0PXswfVxuICAgICAgICAgIGxhYmVsPXtkb21haW4ubGFiZWx9XG4gICAgICAgICAgcmFuZ2VQYWRkaW5nPXs4fVxuICAgICAgICAgIHRpY2tDbGFzc05hbWU9e2NsYXNzZXMudGlja31cbiAgICAgICAgICB0aWNrRm9ybWF0PXsodmFsdWUpID0+IHZhbHVlfVxuICAgICAgICAgIHRpY2tMYWJlbFByb3BzPXtsYWJlbFByb3BzfVxuICAgICAgICAgIHRpY2tWYWx1ZXM9e3RpY2tWYWx1ZXN9XG4gICAgICAgIC8+XG4gICAgICAgIHtpbmNsdWRlQXJyb3dzICYmIGluY2x1ZGVBcnJvd3MubGVmdCAmJiAoXG4gICAgICAgICAgPEFycm93IGRpcmVjdGlvbj1cImxlZnRcIiB4PXtkb21haW4ubWlufSB5PXswfSBjbGFzc05hbWU9e2NsYXNzZXMuYXJyb3d9IHNjYWxlPXtzY2FsZX0gLz5cbiAgICAgICAgKX1cbiAgICAgICAge2luY2x1ZGVBcnJvd3MgJiYgaW5jbHVkZUFycm93cy5yaWdodCAmJiAoXG4gICAgICAgICAgPEFycm93IGRpcmVjdGlvbj1cInJpZ2h0XCIgeD17ZG9tYWluLm1heH0geT17MH0gY2xhc3NOYW1lPXtjbGFzc2VzLmFycm93fSBzY2FsZT17c2NhbGV9IC8+XG4gICAgICAgICl9XG4gICAgICAgIHtkb21haW4uYXhpc0xhYmVsICYmIChcbiAgICAgICAgICA8Zm9yZWlnbk9iamVjdCB4PXtzaXplLndpZHRoICsgMTd9IHk9e3NjYWxlLnkoMCkgLSA5fSB3aWR0aD17bmVjZXNzYXJ5V2lkdGh9IGhlaWdodD17MjAgKiBuZWNlc3NhcnlSb3dzfT5cbiAgICAgICAgICAgIDxkaXYgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3sgX19odG1sOiBkb21haW4uYXhpc0xhYmVsIH19IGNsYXNzTmFtZT17Y2xhc3Nlcy5sYWJlbEZvbnRTaXplfSAvPlxuICAgICAgICAgIDwvZm9yZWlnbk9iamVjdD5cbiAgICAgICAgKX1cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBYQXhpcyA9IHdpdGhTdHlsZXMoYXhpc1N0eWxlcykoUmF3WEF4aXMpO1xuXG5leHBvcnQgY2xhc3MgUmF3WUF4aXMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIC4uLkF4aXNQcm9wVHlwZXMsXG4gICAgZ3JhcGhQcm9wczogdHlwZXMuR3JhcGhQcm9wc1R5cGUuaXNSZXF1aXJlZCxcbiAgfTtcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IEF4aXNEZWZhdWx0UHJvcHM7XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgY2xhc3NlcywgaW5jbHVkZUFycm93cywgZ3JhcGhQcm9wcywgc2tpcFZhbHVlcywgcm93VGlja1ZhbHVlcyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHNjYWxlLCByYW5nZSwgc2l6ZSB9ID0gZ3JhcGhQcm9wcyB8fCB7fTtcblxuICAgIGNvbnN0IG5lY2Vzc2FyeVdpZHRoID0gcmFuZ2UuYXhpc0xhYmVsID8gYW1vdW50VG9JbmNyZWFzZVdpZHRoKHJhbmdlLmF4aXNMYWJlbC5sZW5ndGgpIDogMDtcblxuICAgIGNvbnN0IGN1c3RvbVRpY2tGb3JtYXQgPSAodmFsdWUpID0+IChza2lwVmFsdWVzICYmIHNraXBWYWx1ZXMuaW5kZXhPZih2YWx1ZSkgPj0gMCA/ICcnIDogdmFsdWUpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPEF4aXNcbiAgICAgICAgICBheGlzTGluZUNsYXNzTmFtZT17Y2xhc3Nlcy5saW5lfVxuICAgICAgICAgIG9yaWVudGF0aW9uPXsnbGVmdCd9XG4gICAgICAgICAgc2NhbGU9e3NjYWxlLnl9XG4gICAgICAgICAgdG9wPXswfVxuICAgICAgICAgIGhlaWdodD17c2l6ZS5oZWlnaHR9XG4gICAgICAgICAgbGVmdD17c2NhbGUueCgwKX1cbiAgICAgICAgICBsYWJlbD17cmFuZ2UubGFiZWx9XG4gICAgICAgICAgbGFiZWxQcm9wcz17eyAnZGF0YS1waWUtcmVhZGFibGUnOiBmYWxzZSB9fVxuICAgICAgICAgIHJhbmdlUGFkZGluZz17OH1cbiAgICAgICAgICB0aWNrTGVuZ3RoPXsxMH1cbiAgICAgICAgICB0aWNrQ2xhc3NOYW1lPXtjbGFzc2VzLnRpY2t9XG4gICAgICAgICAgdGlja0Zvcm1hdD17Y3VzdG9tVGlja0Zvcm1hdH1cbiAgICAgICAgICB0aWNrTGFiZWxQcm9wcz17KHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBsZXQgZGlnaXRzID0gdmFsdWUudG9Mb2NhbGVTdHJpbmcoKS5yZXBsYWNlKC9bLi1dL2csICcnKS5sZW5ndGggfHwgMTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4udGlja0xhYmVsU3R5bGVzLFxuICAgICAgICAgICAgICBkeTogNCxcbiAgICAgICAgICAgICAgZHg6IC0xMCAtIGRpZ2l0cyAqIDksXG4gICAgICAgICAgICAgICdkYXRhLXBpZS1yZWFkYWJsZSc6IGZhbHNlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9fVxuICAgICAgICAgIGhpZGVaZXJvPXt0cnVlfVxuICAgICAgICAgIHRpY2tUZXh0QW5jaG9yPXsnYm90dG9tJ31cbiAgICAgICAgICB0aWNrVmFsdWVzPXtyb3dUaWNrVmFsdWVzfVxuICAgICAgICAvPlxuXG4gICAgICAgIHtpbmNsdWRlQXJyb3dzICYmIGluY2x1ZGVBcnJvd3MuZG93biAmJiAoXG4gICAgICAgICAgPEFycm93IGRpcmVjdGlvbj1cImRvd25cIiB4PXswfSB5PXtyYW5nZS5taW59IGNsYXNzTmFtZT17Y2xhc3Nlcy5hcnJvd30gc2NhbGU9e3NjYWxlfSAvPlxuICAgICAgICApfVxuICAgICAgICB7aW5jbHVkZUFycm93cyAmJiBpbmNsdWRlQXJyb3dzLnVwICYmIChcbiAgICAgICAgICA8QXJyb3cgZGlyZWN0aW9uPVwidXBcIiB4PXswfSB5PXtyYW5nZS5tYXh9IGNsYXNzTmFtZT17Y2xhc3Nlcy5hcnJvd30gc2NhbGU9e3NjYWxlfSAvPlxuICAgICAgICApfVxuICAgICAgICB7cmFuZ2UuYXhpc0xhYmVsICYmIChcbiAgICAgICAgICA8Zm9yZWlnbk9iamVjdCB4PXtzY2FsZS54KDApIC0gbmVjZXNzYXJ5V2lkdGggLyAyfSB5PXstMzN9IHdpZHRoPXtuZWNlc3NhcnlXaWR0aH0gaGVpZ2h0PVwiMjBcIj5cbiAgICAgICAgICAgIDxSZWFkYWJsZSBmYWxzZT5cbiAgICAgICAgICAgICAgPGRpdiBkYW5nZXJvdXNseVNldElubmVySFRNTD17eyBfX2h0bWw6IHJhbmdlLmF4aXNMYWJlbCB9fSBjbGFzc05hbWU9e2NsYXNzZXMuYXhpc0xhYmVsSG9sZGVyfSAvPlxuICAgICAgICAgICAgPC9SZWFkYWJsZT5cbiAgICAgICAgICA8L2ZvcmVpZ25PYmplY3Q+XG4gICAgICAgICl9XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3QgWUF4aXMgPSB3aXRoU3R5bGVzKGF4aXNTdHlsZXMpKFJhd1lBeGlzKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXhlcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgLi4uQXhpc1Byb3BUeXBlcyxcbiAgICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGdyYXBoUHJvcHM6IHR5cGVzLkdyYXBoUHJvcHNUeXBlLmlzUmVxdWlyZWQsXG4gIH07XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSBBeGlzRGVmYXVsdFByb3BzO1xuXG4gIHhWYWx1ZXMgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBncmFwaFByb3BzIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgc2NhbGUsIGRvbWFpbiB9ID0gZ3JhcGhQcm9wcyB8fCB7fTtcblxuICAgIGlmICghZG9tYWluIHx8ICFzY2FsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRpY2tzID0gZ2V0VGlja1ZhbHVlcyh7IC4uLmRvbWFpbiwgc3RlcDogZG9tYWluLmxhYmVsU3RlcCB9KTtcbiAgICBjb25zdCBuZWdhdGl2ZSA9IGZpcnN0TmVnYXRpdmVWYWx1ZSh0aWNrcyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29sdW1uVGlja3NWYWx1ZXM6IHRpY2tzLFxuICAgICAgZmlyc3ROZWdhdGl2ZVg6IG5lZ2F0aXZlLFxuICAgICAgZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWDogTWF0aC5hYnMoc2NhbGUueSgwKSAtIHNjYWxlLnkobmVnYXRpdmUpKSxcbiAgICB9O1xuICB9O1xuXG4gIHlWYWx1ZXMgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBncmFwaFByb3BzIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgc2NhbGUsIHJhbmdlIH0gPSBncmFwaFByb3BzIHx8IHt9O1xuXG4gICAgaWYgKCFyYW5nZSB8fCAhc2NhbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0aWNrcyA9IGdldFRpY2tWYWx1ZXMoeyAuLi5yYW5nZSwgc3RlcDogcmFuZ2UubGFiZWxTdGVwIH0pO1xuICAgIGNvbnN0IG5lZ2F0aXZlID0gZmlyc3ROZWdhdGl2ZVZhbHVlKHRpY2tzKTtcblxuICAgIHJldHVybiB7XG4gICAgICByb3dUaWNrVmFsdWVzOiB0aWNrcyxcbiAgICAgIGZpcnN0TmVnYXRpdmVZOiBuZWdhdGl2ZSxcbiAgICAgIGRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVk6IE1hdGguYWJzKHNjYWxlLngoMCkgLSBzY2FsZS54KG5lZ2F0aXZlKSksXG4gICAgfTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBncmFwaFByb3BzIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgZG9tYWluLCByYW5nZSB9ID0gZ3JhcGhQcm9wcyB8fCB7fTtcbiAgICBjb25zdCB7IGNvbHVtblRpY2tzVmFsdWVzLCBmaXJzdE5lZ2F0aXZlWCwgZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWCB9ID0gdGhpcy54VmFsdWVzKCk7XG4gICAgY29uc3QgeyByb3dUaWNrVmFsdWVzLCBmaXJzdE5lZ2F0aXZlWSwgZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWSB9ID0gdGhpcy55VmFsdWVzKCk7XG4gICAgY29uc3QgZGVsdGFBbGxvd2FuY2UgPSA2O1xuICAgIGNvbnN0IGR5ID0gMjU7XG5cbiAgICBjb25zdCBza2lwVmFsdWVzID0gc2hhcmVkVmFsdWVzKFxuICAgICAgZmlyc3ROZWdhdGl2ZVgsXG4gICAgICBmaXJzdE5lZ2F0aXZlWSxcbiAgICAgIGRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVgsXG4gICAgICBkaXN0YW5jZUZyb21PcmlnaW5Ub0ZpcnN0TmVnYXRpdmVZLFxuICAgICAgZGVsdGFBbGxvd2FuY2UsXG4gICAgICBkeSxcbiAgICApO1xuXG4gICAgLy8gZWFjaCBheGlzIGhhcyB0byBiZSBkaXNwbGF5ZWQgb25seSBpZiB0aGUgZG9tYWluICYgcmFuZ2UgaW5jbHVkZSBpdFxuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIHtyYW5nZS5taW4gPD0gMCA/IChcbiAgICAgICAgICA8WEF4aXNcbiAgICAgICAgICAgIHsuLi50aGlzLnByb3BzfVxuICAgICAgICAgICAgc2tpcFZhbHVlcz17c2tpcFZhbHVlc31cbiAgICAgICAgICAgIGNvbHVtblRpY2tzVmFsdWVzPXtjb2x1bW5UaWNrc1ZhbHVlc31cbiAgICAgICAgICAgIGRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVk9e2Rpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVl9XG4gICAgICAgICAgICBkeT17ZHl9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIHtkb21haW4ubWluIDw9IDAgPyAoXG4gICAgICAgICAgPFlBeGlzXG4gICAgICAgICAgICB7Li4udGhpcy5wcm9wc31cbiAgICAgICAgICAgIHNraXBWYWx1ZXM9e3NraXBWYWx1ZXN9XG4gICAgICAgICAgICByb3dUaWNrVmFsdWVzPXtyb3dUaWNrVmFsdWVzfVxuICAgICAgICAgICAgZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWD17ZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWH1cbiAgICAgICAgICAvPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ Object.defineProperty(exports, "Axes", {
9
+ enumerable: true,
10
+ get: function get() {
11
+ return _axes["default"];
12
+ }
13
+ });
14
+ Object.defineProperty(exports, "AxisPropTypes", {
15
+ enumerable: true,
16
+ get: function get() {
17
+ return _axes.AxisPropTypes;
18
+ }
19
+ });
20
+
21
+ var _axes = _interopRequireWildcard(require("./axes"));
22
+
23
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
24
+
25
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
26
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9heGlzL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQXhlcywgeyBBeGlzUHJvcFR5cGVzIH0gZnJvbSAnLi9heGVzJztcbmV4cG9ydCB7IEF4ZXMsIEF4aXNQcm9wVHlwZXMgfTtcbiJdfQ==
package/lib/bg.js ADDED
@@ -0,0 +1,139 @@
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"] = 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 _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
15
+
16
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
17
+
18
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
19
+
20
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
21
+
22
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
23
+
24
+ var _react = _interopRequireDefault(require("react"));
25
+
26
+ var _propTypes = _interopRequireDefault(require("prop-types"));
27
+
28
+ var _d3Selection = require("d3-selection");
29
+
30
+ var _plot = require("@pie-lib/plot");
31
+
32
+ var _utils = require("./utils");
33
+
34
+ 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); }; }
35
+
36
+ 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; } }
37
+
38
+ var Bg = /*#__PURE__*/function (_React$Component) {
39
+ (0, _inherits2["default"])(Bg, _React$Component);
40
+
41
+ var _super = _createSuper(Bg);
42
+
43
+ function Bg() {
44
+ var _this;
45
+
46
+ (0, _classCallCheck2["default"])(this, Bg);
47
+
48
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
49
+ args[_key] = arguments[_key];
50
+ }
51
+
52
+ _this = _super.call.apply(_super, [this].concat(args));
53
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getRectPadding", function () {
54
+ var graphProps = _this.props.graphProps;
55
+ return (0, _utils.thinnerShapesNeeded)(graphProps) ? 6 : 10;
56
+ });
57
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onRectClick", function (rect) {
58
+ var _this$props = _this.props,
59
+ onClick = _this$props.onClick,
60
+ graphProps = _this$props.graphProps;
61
+ var scale = graphProps.scale;
62
+
63
+ var padding = _this.getRectPadding();
64
+
65
+ var coords = (0, _d3Selection.mouse)(rect._groups[0][0]); // decrease the padding from coordinates to indicate the correct point clicked
66
+
67
+ var x = scale.x.invert(coords[0] - padding);
68
+ var y = scale.y.invert(coords[1] - padding);
69
+ var rowTicks = (0, _utils.getTickValues)(graphProps.range);
70
+ var columnTicks = (0, _utils.getTickValues)(graphProps.domain);
71
+
72
+ var closest = function closest(ticks, value) {
73
+ return ticks.length && ticks.reduce(function (prev, curr) {
74
+ var currentDistance = Math.abs(curr - value);
75
+ var previousDistance = Math.abs(prev - value);
76
+ return currentDistance <= previousDistance ? curr : prev;
77
+ });
78
+ };
79
+
80
+ var snapped = {};
81
+
82
+ if (columnTicks.indexOf(x) >= 0 && rowTicks.indexOf(y) >= 0) {
83
+ snapped.x = x;
84
+ snapped.y = y;
85
+ } else {
86
+ snapped.x = closest(columnTicks, x);
87
+ snapped.y = closest(rowTicks, y);
88
+ }
89
+
90
+ onClick(snapped);
91
+ });
92
+ return _this;
93
+ }
94
+
95
+ (0, _createClass2["default"])(Bg, [{
96
+ key: "componentDidMount",
97
+ value: function componentDidMount() {
98
+ var rect = (0, _d3Selection.select)(this.rect);
99
+ rect.on('click', this.onRectClick.bind(this, rect));
100
+ }
101
+ }, {
102
+ key: "shouldComponentUpdate",
103
+ value: function shouldComponentUpdate(nextProps) {
104
+ return !_plot.utils.isDomainRangeEqual(this.props.graphProps, nextProps.graphProps) || this.props.width !== nextProps.width || this.props.height !== nextProps.height;
105
+ }
106
+ }, {
107
+ key: "render",
108
+ value: function render() {
109
+ var _this2 = this;
110
+
111
+ var _this$props2 = this.props,
112
+ width = _this$props2.width,
113
+ height = _this$props2.height;
114
+ var padding = this.getRectPadding(); // expand the size of clickable area so a small area outside the edges of the grid lines to be clickable
115
+
116
+ return /*#__PURE__*/_react["default"].createElement("rect", {
117
+ ref: function ref(rect) {
118
+ return _this2.rect = rect;
119
+ },
120
+ transform: "translate(-".concat(padding, ", -").concat(padding, ")"),
121
+ fill: "red",
122
+ fillOpacity: "0.0",
123
+ width: width + padding * 2,
124
+ height: height + padding * 2
125
+ });
126
+ }
127
+ }]);
128
+ return Bg;
129
+ }(_react["default"].Component);
130
+
131
+ exports["default"] = Bg;
132
+ (0, _defineProperty2["default"])(Bg, "propTypes", {
133
+ width: _propTypes["default"].number.isRequired,
134
+ height: _propTypes["default"].number.isRequired,
135
+ onClick: _propTypes["default"].func.isRequired,
136
+ graphProps: _plot.types.GraphPropsType.isRequired
137
+ });
138
+ (0, _defineProperty2["default"])(Bg, "defaultProps", {});
139
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9iZy5qc3giXSwibmFtZXMiOlsiQmciLCJncmFwaFByb3BzIiwicHJvcHMiLCJyZWN0Iiwib25DbGljayIsInNjYWxlIiwicGFkZGluZyIsImdldFJlY3RQYWRkaW5nIiwiY29vcmRzIiwiX2dyb3VwcyIsIngiLCJpbnZlcnQiLCJ5Iiwicm93VGlja3MiLCJyYW5nZSIsImNvbHVtblRpY2tzIiwiZG9tYWluIiwiY2xvc2VzdCIsInRpY2tzIiwidmFsdWUiLCJsZW5ndGgiLCJyZWR1Y2UiLCJwcmV2IiwiY3VyciIsImN1cnJlbnREaXN0YW5jZSIsIk1hdGgiLCJhYnMiLCJwcmV2aW91c0Rpc3RhbmNlIiwic25hcHBlZCIsImluZGV4T2YiLCJvbiIsIm9uUmVjdENsaWNrIiwiYmluZCIsIm5leHRQcm9wcyIsInV0aWxzIiwiaXNEb21haW5SYW5nZUVxdWFsIiwid2lkdGgiLCJoZWlnaHQiLCJSZWFjdCIsIkNvbXBvbmVudCIsIlByb3BUeXBlcyIsIm51bWJlciIsImlzUmVxdWlyZWQiLCJmdW5jIiwidHlwZXMiLCJHcmFwaFByb3BzVHlwZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0lBRXFCQSxFOzs7Ozs7Ozs7Ozs7Ozs7dUdBd0JGLFlBQU07QUFDckIsVUFBUUMsVUFBUixHQUF1QixNQUFLQyxLQUE1QixDQUFRRCxVQUFSO0FBRUEsYUFBTyxnQ0FBb0JBLFVBQXBCLElBQWtDLENBQWxDLEdBQXNDLEVBQTdDO0FBQ0QsSztvR0FNYSxVQUFDRSxJQUFELEVBQVU7QUFDdEIsd0JBQWdDLE1BQUtELEtBQXJDO0FBQUEsVUFBUUUsT0FBUixlQUFRQSxPQUFSO0FBQUEsVUFBaUJILFVBQWpCLGVBQWlCQSxVQUFqQjtBQUNBLFVBQVFJLEtBQVIsR0FBa0JKLFVBQWxCLENBQVFJLEtBQVI7O0FBRUEsVUFBTUMsT0FBTyxHQUFHLE1BQUtDLGNBQUwsRUFBaEI7O0FBQ0Es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QSxTQUFTLHVCQUFnQkcsT0FBaEIsZ0JBQTZCQSxPQUE3QixNQUZYO0FBR0UsUUFBQSxJQUFJLEVBQUMsS0FIUDtBQUlFLFFBQUEsV0FBVyxFQUFDLEtBSmQ7QUFLRSxRQUFBLEtBQUssRUFBRThCLEtBQUssR0FBRzlCLE9BQU8sR0FBRyxDQUwzQjtBQU1FLFFBQUEsTUFBTSxFQUFFK0IsTUFBTSxHQUFHL0IsT0FBTyxHQUFHO0FBTjdCLFFBREY7QUFVRDs7O0VBeEY2QmdDLGtCQUFNQyxTOzs7aUNBQWpCdkMsRSxlQUNBO0FBQ2pCb0MsRUFBQUEsS0FBSyxFQUFFSSxzQkFBVUMsTUFBVixDQUFpQkMsVUFEUDtBQUVqQkwsRUFBQUEsTUFBTSxFQUFFRyxzQkFBVUMsTUFBVixDQUFpQkMsVUFGUjtBQUdqQnRDLEVBQUFBLE9BQU8sRUFBRW9DLHNCQUFVRyxJQUFWLENBQWVELFVBSFA7QUFJakJ6QyxFQUFBQSxVQUFVLEVBQUUyQyxZQUFNQyxjQUFOLENBQXFCSDtBQUpoQixDO2lDQURBMUMsRSxrQkFRRyxFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBzZWxlY3QsIG1vdXNlIH0gZnJvbSAnZDMtc2VsZWN0aW9uJztcbmltcG9ydCB7IHR5cGVzLCB1dGlscyB9IGZyb20gJ0BwaWUtbGliL3Bsb3QnO1xuaW1wb3J0IHsgZ2V0VGlja1ZhbHVlcywgdGhpbm5lclNoYXBlc05lZWRlZCB9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCZyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgd2lkdGg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICBoZWlnaHQ6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGdyYXBoUHJvcHM6IHR5cGVzLkdyYXBoUHJvcHNUeXBlLmlzUmVxdWlyZWQsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHt9O1xuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHJlY3QgPSBzZWxlY3QodGhpcy5yZWN0KTtcblxuICAgIHJlY3Qub24oJ2NsaWNrJywgdGhpcy5vblJlY3RDbGljay5iaW5kKHRoaXMsIHJlY3QpKTtcbiAgfVxuXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgIXV0aWxzLmlzRG9tYWluUmFuZ2VFcXVhbCh0aGlzLnByb3BzLmdyYXBoUHJvcHMsIG5leHRQcm9wcy5ncmFwaFByb3BzKSB8fFxuICAgICAgdGhpcy5wcm9wcy53aWR0aCAhPT0gbmV4dFByb3BzLndpZHRoIHx8XG4gICAgICB0aGlzLnByb3BzLmhlaWdodCAhPT0gbmV4dFByb3BzLmhlaWdodFxuICAgICk7XG4gIH1cblxuICBnZXRSZWN0UGFkZGluZyA9ICgpID0+IHtcbiAgICBjb25zdCB7IGdyYXBoUHJvcHMgfSA9IHRoaXMucHJvcHM7XG5cbiAgICByZXR1cm4gdGhpbm5lclNoYXBlc05lZWRlZChncmFwaFByb3BzKSA/IDYgOiAxMDtcbiAgfTtcblxuICAvKipcbiAgICogTm90ZTogd2UgdXNlIGQzIGNsaWNrICsgbW91c2UgdG8gZ2l2ZSB1cyBkb21haW4gdmFsdWVzIGRpcmVjdGx5LlxuICAgKiBTYXZlcyB1cyBoYXZpbmcgdG8gY2FsY3VsYXRlIHRoZW0gb3Vyc2VsdmVzIGZyb20gYSBNb3VzZUV2ZW50LlxuICAgKi9cbiAgb25SZWN0Q2xpY2sgPSAocmVjdCkgPT4ge1xuICAgIGNvbnN0IHsgb25DbGljaywgZ3JhcGhQcm9wcyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHNjYWxlIH0gPSBncmFwaFByb3BzO1xuXG4gICAgY29uc3QgcGFkZGluZyA9IHRoaXMuZ2V0UmVjdFBhZGRpbmcoKTtcbiAgICBjb25zdCBjb29yZHMgPSBtb3VzZShyZWN0Ll9ncm91cHNbMF1bMF0pO1xuXG4gICAgLy8gZGVjcmVhc2UgdGhlIHBhZGRpbmcgZnJvbSBjb29yZGluYXRlcyB0byBpbmRpY2F0ZSB0aGUgY29ycmVjdCBwb2ludCBjbGlja2VkXG4gICAgY29uc3QgeCA9IHNjYWxlLnguaW52ZXJ0KGNvb3Jkc1swXSAtIHBhZGRpbmcpO1xuICAgIGNvbnN0IHkgPSBzY2FsZS55LmludmVydChjb29yZHNbMV0gLSBwYWRkaW5nKTtcblxuICAgIGNvbnN0IHJvd1RpY2tzID0gZ2V0VGlja1ZhbHVlcyhncmFwaFByb3BzLnJhbmdlKTtcbiAgICBjb25zdCBjb2x1bW5UaWNrcyA9IGdldFRpY2tWYWx1ZXMoZ3JhcGhQcm9wcy5kb21haW4pO1xuXG4gICAgY29uc3QgY2xvc2VzdCA9ICh0aWNrcywgdmFsdWUpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRpY2tzLmxlbmd0aCAmJlxuICAgICAgICB0aWNrcy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50RGlzdGFuY2UgPSBNYXRoLmFicyhjdXJyIC0gdmFsdWUpO1xuICAgICAgICAgIGNvbnN0IHByZXZpb3VzRGlzdGFuY2UgPSBNYXRoLmFicyhwcmV2IC0gdmFsdWUpO1xuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnREaXN0YW5jZSA8PSBwcmV2aW91c0Rpc3RhbmNlID8gY3VyciA6IHByZXY7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH07XG5cbiAgICBsZXQgc25hcHBlZCA9IHt9O1xuXG4gICAgaWYgKGNvbHVtblRpY2tzLmluZGV4T2YoeCkgPj0gMCAmJiByb3dUaWNrcy5pbmRleE9mKHkpID49IDApIHtcbiAgICAgIHNuYXBwZWQueCA9IHg7XG4gICAgICBzbmFwcGVkLnkgPSB5O1xuICAgIH0gZWxzZSB7XG4gICAgICBzbmFwcGVkLnggPSBjbG9zZXN0KGNvbHVtblRpY2tzLCB4KTtcbiAgICAgIHNuYXBwZWQueSA9IGNsb3Nlc3Qocm93VGlja3MsIHkpO1xuICAgIH1cblxuICAgIG9uQ2xpY2soc25hcHBlZCk7XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBwYWRkaW5nID0gdGhpcy5nZXRSZWN0UGFkZGluZygpO1xuXG4gICAgLy8gZXhwYW5kIHRoZSBzaXplIG9mIGNsaWNrYWJsZSBhcmVhIHNvIGEgc21hbGwgYXJlYSBvdXRzaWRlIHRoZSBlZGdlcyBvZiB0aGUgZ3JpZCBsaW5lcyB0byBiZSBjbGlja2FibGVcbiAgICByZXR1cm4gKFxuICAgICAgPHJlY3RcbiAgICAgICAgcmVmPXsocmVjdCkgPT4gKHRoaXMucmVjdCA9IHJlY3QpfVxuICAgICAgICB0cmFuc2Zvcm09e2B0cmFuc2xhdGUoLSR7cGFkZGluZ30sIC0ke3BhZGRpbmd9KWB9XG4gICAgICAgIGZpbGw9XCJyZWRcIlxuICAgICAgICBmaWxsT3BhY2l0eT1cIjAuMFwiXG4gICAgICAgIHdpZHRoPXt3aWR0aCArIHBhZGRpbmcgKiAyfVxuICAgICAgICBoZWlnaHQ9e2hlaWdodCArIHBhZGRpbmcgKiAyfVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG4iXX0=