@pie-lib/charting 5.36.3-next.2 → 5.36.4-next.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 (143) hide show
  1. package/CHANGELOG.md +17 -96
  2. package/lib/__tests__/axes.test.js +129 -0
  3. package/lib/__tests__/chart-setup.test.js +57 -0
  4. package/lib/__tests__/chart-type.test.js +25 -0
  5. package/lib/__tests__/chart.test.js +103 -0
  6. package/lib/__tests__/grid.test.js +39 -0
  7. package/lib/__tests__/mark-label.test.js +46 -0
  8. package/lib/__tests__/utils.js +56 -0
  9. package/lib/__tests__/utils.test.js +186 -0
  10. package/lib/actions-button.js +61 -91
  11. package/lib/actions-button.js.map +1 -1
  12. package/lib/axes.js +163 -239
  13. package/lib/axes.js.map +1 -1
  14. package/lib/bars/__tests__/bar.test.js +53 -0
  15. package/lib/bars/__tests__/histogram.test.js +53 -0
  16. package/lib/bars/__tests__/utils.js +50 -0
  17. package/lib/bars/bar.js +14 -42
  18. package/lib/bars/bar.js.map +1 -1
  19. package/lib/bars/common/__tests__/bars.test.js +76 -0
  20. package/lib/bars/common/__tests__/utils.js +50 -0
  21. package/lib/bars/common/bars.js +62 -138
  22. package/lib/bars/common/bars.js.map +1 -1
  23. package/lib/bars/common/correct-check-icon.js +6 -7
  24. package/lib/bars/common/correct-check-icon.js.map +1 -1
  25. package/lib/bars/histogram.js +14 -42
  26. package/lib/bars/histogram.js.map +1 -1
  27. package/lib/chart-setup.js +120 -196
  28. package/lib/chart-setup.js.map +1 -1
  29. package/lib/chart-type.js +53 -44
  30. package/lib/chart-type.js.map +1 -1
  31. package/lib/chart-types.js +2 -11
  32. package/lib/chart-types.js.map +1 -1
  33. package/lib/chart.js +74 -152
  34. package/lib/chart.js.map +1 -1
  35. package/lib/common/__tests__/drag-handle.test.js +74 -0
  36. package/lib/common/__tests__/utils.js +50 -0
  37. package/lib/common/correctness-indicators.js +110 -53
  38. package/lib/common/correctness-indicators.js.map +1 -1
  39. package/lib/common/drag-handle.js +66 -109
  40. package/lib/common/drag-handle.js.map +1 -1
  41. package/lib/common/drag-icon.js +13 -13
  42. package/lib/common/drag-icon.js.map +1 -1
  43. package/lib/common/styles.js +7 -25
  44. package/lib/common/styles.js.map +1 -1
  45. package/lib/grid.js +44 -84
  46. package/lib/grid.js.map +1 -1
  47. package/lib/index.js +1 -7
  48. package/lib/index.js.map +1 -1
  49. package/lib/key-legend.js +64 -88
  50. package/lib/key-legend.js.map +1 -1
  51. package/lib/line/__tests__/line-cross.test.js +47 -0
  52. package/lib/line/__tests__/line-dot.test.js +47 -0
  53. package/lib/line/__tests__/utils.js +56 -0
  54. package/lib/line/common/__tests__/drag-handle.test.js +74 -0
  55. package/lib/line/common/__tests__/line.test.js +92 -0
  56. package/lib/line/common/__tests__/utils.js +50 -0
  57. package/lib/line/common/drag-handle.js +73 -101
  58. package/lib/line/common/drag-handle.js.map +1 -1
  59. package/lib/line/common/line.js +51 -97
  60. package/lib/line/common/line.js.map +1 -1
  61. package/lib/line/line-cross.js +80 -90
  62. package/lib/line/line-cross.js.map +1 -1
  63. package/lib/line/line-dot.js +59 -77
  64. package/lib/line/line-dot.js.map +1 -1
  65. package/lib/mark-label.js +85 -120
  66. package/lib/mark-label.js.map +1 -1
  67. package/lib/plot/__tests__/dot.test.js +53 -0
  68. package/lib/plot/__tests__/line.test.js +53 -0
  69. package/lib/plot/__tests__/utils.js +50 -0
  70. package/lib/plot/common/__tests__/plot.test.js +79 -0
  71. package/lib/plot/common/__tests__/utils.js +50 -0
  72. package/lib/plot/common/plot.js +91 -149
  73. package/lib/plot/common/plot.js.map +1 -1
  74. package/lib/plot/dot.js +33 -59
  75. package/lib/plot/dot.js.map +1 -1
  76. package/lib/plot/line.js +40 -65
  77. package/lib/plot/line.js.map +1 -1
  78. package/lib/tool-menu.js +48 -84
  79. package/lib/tool-menu.js.map +1 -1
  80. package/lib/utils.js +32 -87
  81. package/lib/utils.js.map +1 -1
  82. package/package.json +22 -24
  83. package/src/__tests__/axes.test.jsx +85 -100
  84. package/src/__tests__/chart-type.test.jsx +5 -11
  85. package/src/__tests__/chart.test.jsx +41 -50
  86. package/src/__tests__/grid.test.jsx +23 -11
  87. package/src/__tests__/mark-label.test.jsx +13 -11
  88. package/src/__tests__/utils.js +8 -2
  89. package/src/actions-button.jsx +44 -39
  90. package/src/axes.jsx +67 -81
  91. package/src/bars/__tests__/bar.test.jsx +19 -11
  92. package/src/bars/__tests__/histogram.test.jsx +19 -12
  93. package/src/bars/common/__tests__/bars.test.jsx +23 -24
  94. package/src/bars/common/bars.jsx +42 -69
  95. package/src/bars/common/correct-check-icon.jsx +5 -0
  96. package/src/chart-setup.jsx +75 -88
  97. package/src/chart-type.js +45 -22
  98. package/src/chart.jsx +19 -34
  99. package/src/common/__tests__/drag-handle.test.jsx +16 -45
  100. package/src/common/correctness-indicators.jsx +91 -13
  101. package/src/common/drag-handle.jsx +44 -64
  102. package/src/common/drag-icon.jsx +9 -2
  103. package/src/common/styles.js +1 -1
  104. package/src/grid.jsx +10 -14
  105. package/src/key-legend.jsx +62 -60
  106. package/src/line/__tests__/line-cross.test.jsx +16 -13
  107. package/src/line/__tests__/line-dot.test.jsx +16 -13
  108. package/src/line/__tests__/utils.js +8 -2
  109. package/src/line/common/__tests__/drag-handle.test.jsx +20 -45
  110. package/src/line/common/__tests__/line.test.jsx +27 -30
  111. package/src/line/common/drag-handle.jsx +61 -55
  112. package/src/line/common/line.jsx +21 -11
  113. package/src/line/line-cross.js +39 -14
  114. package/src/line/line-dot.js +27 -32
  115. package/src/mark-label.jsx +51 -47
  116. package/src/plot/__tests__/dot.test.jsx +19 -12
  117. package/src/plot/__tests__/line.test.jsx +19 -12
  118. package/src/plot/common/__tests__/plot.test.jsx +23 -24
  119. package/src/plot/common/plot.jsx +29 -24
  120. package/src/plot/dot.js +11 -4
  121. package/src/plot/line.js +16 -8
  122. package/src/tool-menu.jsx +26 -30
  123. package/src/utils.js +13 -9
  124. package/esm/index.css +0 -847
  125. package/esm/index.js +0 -231130
  126. package/esm/index.js.map +0 -1
  127. package/esm/package.json +0 -3
  128. package/src/__tests__/__snapshots__/axes.test.jsx.snap +0 -569
  129. package/src/__tests__/__snapshots__/chart-type.test.jsx.snap +0 -14
  130. package/src/__tests__/__snapshots__/chart.test.jsx.snap +0 -595
  131. package/src/__tests__/__snapshots__/grid.test.jsx.snap +0 -72
  132. package/src/__tests__/__snapshots__/mark-label.test.jsx.snap +0 -73
  133. package/src/bars/__tests__/__snapshots__/bar.test.jsx.snap +0 -43
  134. package/src/bars/__tests__/__snapshots__/histogram.test.jsx.snap +0 -45
  135. package/src/bars/common/__tests__/__snapshots__/bars.test.jsx.snap +0 -110
  136. package/src/common/__tests__/__snapshots__/drag-handle.test.jsx.snap +0 -48
  137. package/src/line/__tests__/__snapshots__/line-cross.test.jsx.snap +0 -45
  138. package/src/line/__tests__/__snapshots__/line-dot.test.jsx.snap +0 -45
  139. package/src/line/common/__tests__/__snapshots__/drag-handle.test.jsx.snap +0 -49
  140. package/src/line/common/__tests__/__snapshots__/line.test.jsx.snap +0 -143
  141. package/src/plot/__tests__/__snapshots__/dot.test.jsx.snap +0 -45
  142. package/src/plot/__tests__/__snapshots__/line.test.jsx.snap +0 -45
  143. package/src/plot/common/__tests__/__snapshots__/plot.test.jsx.snap +0 -97
@@ -1,129 +1,88 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
5
  Object.defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
8
  exports["default"] = exports.RawPlot = exports.Plot = void 0;
11
-
12
9
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
-
14
10
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
-
16
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
17
-
18
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
19
-
20
11
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
21
-
22
12
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
23
-
13
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
24
14
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
25
-
26
15
  var _react = _interopRequireDefault(require("react"));
27
-
28
16
  var _propTypes = _interopRequireDefault(require("prop-types"));
29
-
30
- var _classnames = _interopRequireDefault(require("classnames"));
31
-
32
- var _Check = _interopRequireDefault(require("@material-ui/icons/Check"));
33
-
34
- var _index = require("@material-ui/core/styles/index");
35
-
36
- var _group = require("@vx/group");
37
-
17
+ var _Check = _interopRequireDefault(require("@mui/icons-material/Check"));
18
+ var _styles = require("@mui/material/styles");
19
+ var _group = require("@visx/group");
38
20
  var _debug = _interopRequireDefault(require("debug"));
39
-
40
21
  var _plot = require("@pie-lib/plot");
41
-
42
22
  var _dragHandle = _interopRequireWildcard(require("../../common/drag-handle"));
43
-
44
23
  var _renderUi = require("@pie-lib/render-ui");
45
-
46
24
  var _utils = require("../../utils");
47
-
48
- var _styles = require("../../common/styles");
49
-
50
- 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); }
51
-
52
- 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; }
53
-
54
- 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); }; }
55
-
56
- 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; } }
57
-
25
+ var _styles2 = require("../../common/styles");
26
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
27
+ function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
28
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
58
29
  var log = (0, _debug["default"])('pie-lib:chart:bars');
59
30
  var ICON_SIZE = 16; // 10px icon + 2px padding on all sides + 1px border
60
-
61
- var RawPlot = /*#__PURE__*/function (_React$Component) {
62
- (0, _inherits2["default"])(RawPlot, _React$Component);
63
-
64
- var _super = _createSuper(RawPlot);
65
-
31
+ var RawPlot = exports.RawPlot = /*#__PURE__*/function (_React$Component) {
66
32
  function RawPlot(props) {
67
33
  var _this;
68
-
69
34
  (0, _classCallCheck2["default"])(this, RawPlot);
70
- _this = _super.call(this, props);
71
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleMouseEnter", function () {
35
+ _this = _callSuper(this, RawPlot, [props]);
36
+ (0, _defineProperty2["default"])(_this, "handleMouseEnter", function () {
72
37
  _this.setState({
73
38
  isHovered: true
74
39
  });
75
40
  });
76
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleMouseLeave", function () {
41
+ (0, _defineProperty2["default"])(_this, "handleMouseLeave", function () {
77
42
  _this.setState({
78
43
  isHovered: false
79
44
  });
80
45
  });
81
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "setDragValue", function (dragValue) {
46
+ (0, _defineProperty2["default"])(_this, "setDragValue", function (dragValue) {
82
47
  return _this.setState({
83
48
  dragValue: dragValue
84
49
  });
85
50
  });
86
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "dragStop", function () {
51
+ (0, _defineProperty2["default"])(_this, "dragStop", function () {
87
52
  var _this$props = _this.props,
88
- label = _this$props.label,
89
- onChangeCategory = _this$props.onChangeCategory;
53
+ label = _this$props.label,
54
+ onChangeCategory = _this$props.onChangeCategory;
90
55
  var dragValue = _this.state.dragValue;
91
56
  log('[dragStop]', dragValue);
92
-
93
57
  if (dragValue !== undefined) {
94
58
  onChangeCategory({
95
59
  label: label,
96
60
  value: dragValue
97
61
  });
98
62
  }
99
-
100
63
  _this.setDragValue(undefined);
101
64
  });
102
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "dragValue", function (existing, next) {
65
+ (0, _defineProperty2["default"])(_this, "dragValue", function (existing, next) {
103
66
  log('[dragValue] next:', next);
104
-
105
67
  _this.setDragValue(next);
106
68
  });
107
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "renderCorrectnessIcon", function (barX, barWidth, correctVal, correctness, classes, scale, pointHeight, pointDiameter) {
69
+ (0, _defineProperty2["default"])(_this, "renderCorrectnessIcon", function (barX, barWidth, correctVal, correctness, scale, pointHeight, pointDiameter) {
108
70
  var iconY;
109
-
110
71
  if (correctVal === 0) {
111
72
  // if correct value is 0, position icon on the horizontal axis
112
73
  iconY = scale.y(0) - ICON_SIZE / 2;
113
74
  } else {
114
75
  var shapeIndex = correctVal - 1; // the index of the shape representing the correct value
115
-
116
76
  var shapeCenterY = scale.y(shapeIndex) - (pointHeight - pointDiameter) / 2 - pointDiameter / 2;
117
77
  iconY = shapeCenterY - ICON_SIZE / 2; // center the icon
118
78
  }
119
-
120
79
  return /*#__PURE__*/_react["default"].createElement("foreignObject", {
121
80
  x: barX + barWidth / 2 - ICON_SIZE / 2,
122
81
  y: iconY,
123
82
  width: ICON_SIZE,
124
83
  height: ICON_SIZE
125
84
  }, /*#__PURE__*/_react["default"].createElement(_Check["default"], {
126
- className: (0, _classnames["default"])(classes.correctnessIcon, classes.correctIcon, classes.smallIcon),
85
+ className: "correctnessIcon correctIcon smallIcon",
127
86
  title: correctness.label
128
87
  }));
129
88
  });
@@ -133,34 +92,31 @@ var RawPlot = /*#__PURE__*/function (_React$Component) {
133
92
  };
134
93
  return _this;
135
94
  }
136
-
137
- (0, _createClass2["default"])(RawPlot, [{
95
+ (0, _inherits2["default"])(RawPlot, _React$Component);
96
+ return (0, _createClass2["default"])(RawPlot, [{
138
97
  key: "render",
139
98
  value: function render() {
140
99
  var _this2 = this;
141
-
142
100
  var _this$props2 = this.props,
143
- graphProps = _this$props2.graphProps,
144
- value = _this$props2.value,
145
- label = _this$props2.label,
146
- classes = _this$props2.classes,
147
- xBand = _this$props2.xBand,
148
- index = _this$props2.index,
149
- CustomBarElement = _this$props2.CustomBarElement,
150
- interactive = _this$props2.interactive,
151
- correctness = _this$props2.correctness,
152
- defineChart = _this$props2.defineChart,
153
- correctData = _this$props2.correctData;
101
+ graphProps = _this$props2.graphProps,
102
+ value = _this$props2.value,
103
+ label = _this$props2.label,
104
+ xBand = _this$props2.xBand,
105
+ index = _this$props2.index,
106
+ CustomBarElement = _this$props2.CustomBarElement,
107
+ interactive = _this$props2.interactive,
108
+ correctness = _this$props2.correctness,
109
+ defineChart = _this$props2.defineChart,
110
+ correctData = _this$props2.correctData,
111
+ className = _this$props2.className;
154
112
  var scale = graphProps.scale,
155
- range = graphProps.range,
156
- size = graphProps.size;
157
-
113
+ range = graphProps.range,
114
+ size = graphProps.size;
158
115
  var _ref = range || {},
159
- max = _ref.max;
160
-
116
+ max = _ref.max;
161
117
  var _this$state = this.state,
162
- dragValue = _this$state.dragValue,
163
- isHovered = _this$state.isHovered;
118
+ dragValue = _this$state.dragValue,
119
+ isHovered = _this$state.isHovered;
164
120
  var v = Number.isFinite(dragValue) ? dragValue : value;
165
121
  var barWidth = xBand.bandwidth();
166
122
  var barHeight = scale.y(range.max - v);
@@ -169,16 +125,15 @@ var RawPlot = /*#__PURE__*/function (_React$Component) {
169
125
  }, index));
170
126
  log('label:', label, 'barX:', barX, 'v: ', v, 'barHeight:', barHeight, 'barWidth: ', barWidth);
171
127
  var values = [];
172
-
173
128
  for (var i = 0; i < v; i++) {
174
129
  values.push(i);
175
130
  }
176
-
177
131
  var pointHeight = size.height / max;
178
132
  var pointDiameter = (pointHeight > barWidth ? barWidth : pointHeight) * 0.8;
179
133
  var Component = interactive ? _dragHandle["default"] : _dragHandle.DragHandle;
180
134
  var allowRolloverEvent = interactive && !correctness;
181
135
  return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("g", {
136
+ className: className,
182
137
  onMouseEnter: this.handleMouseEnter,
183
138
  onMouseLeave: this.handleMouseLeave,
184
139
  onTouchStart: this.handleMouseEnter,
@@ -200,39 +155,31 @@ var RawPlot = /*#__PURE__*/function (_React$Component) {
200
155
  pointHeight: pointHeight,
201
156
  label: label,
202
157
  value: value,
203
- classes: classes,
204
158
  scale: scale
205
159
  });
206
160
  }), correctness && correctness.value === 'incorrect' && function () {
207
161
  var correctVal = parseFloat(correctData[index] && correctData[index].value);
208
162
  if (isNaN(correctVal)) return null;
209
- var selectedVal = v; // special case: if correct value is 0, only show the icon on the axis
163
+ var selectedVal = v;
210
164
 
165
+ // special case: if correct value is 0, only show the icon on the axis
211
166
  if (correctVal === 0) {
212
- return _this2.renderCorrectnessIcon(barX, barWidth, correctVal, correctness, classes, scale, pointHeight, pointDiameter);
167
+ return _this2.renderCorrectnessIcon(barX, barWidth, correctVal, correctness, scale, pointHeight, pointDiameter);
213
168
  }
214
-
215
169
  if (selectedVal > correctVal) {
216
170
  // selected is higher than correct: overlay the correct last segment
217
171
  var overlayValues = [];
218
-
219
172
  for (var _i = 0; _i < correctVal; _i++) {
220
173
  overlayValues.push(_i);
221
174
  }
222
-
223
175
  var lastIndexOfOverlay = overlayValues.length - 1;
224
176
  var lastOverlayValue = overlayValues[lastIndexOfOverlay];
225
-
226
177
  var _barX = xBand((0, _utils.bandKey)({
227
178
  label: label
228
179
  }, index));
229
-
230
180
  var _barWidth = xBand.bandwidth();
231
-
232
181
  var _pointHeight = size.height / max;
233
-
234
182
  var _pointDiameter = (_pointHeight > _barWidth ? _barWidth : _pointHeight) * 0.8;
235
-
236
183
  return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(CustomBarElement, {
237
184
  index: lastOverlayValue,
238
185
  pointDiameter: _pointDiameter + 10 // increase point diameter for dotted line
@@ -242,19 +189,15 @@ var RawPlot = /*#__PURE__*/function (_React$Component) {
242
189
  pointHeight: _pointHeight,
243
190
  label: label,
244
191
  value: value,
245
- classes: classes,
246
192
  scale: scale,
247
193
  dottedOverline: true
248
- }), _this2.renderCorrectnessIcon(_barX, _barWidth, correctVal, correctness, classes, scale, _pointHeight, _pointDiameter));
249
- } // selected is lower than correct, render missing segment below the correct bar
250
-
251
-
194
+ }), _this2.renderCorrectnessIcon(_barX, _barWidth, correctVal, correctness, scale, _pointHeight, _pointDiameter));
195
+ }
196
+ // selected is lower than correct, render missing segment below the correct bar
252
197
  var valuesToRender = [];
253
-
254
198
  for (var _i2 = selectedVal; _i2 < correctVal; _i2++) {
255
199
  valuesToRender.push(_i2);
256
200
  }
257
-
258
201
  return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, valuesToRender.map(function (idx) {
259
202
  return CustomBarElement({
260
203
  index: idx,
@@ -264,11 +207,10 @@ var RawPlot = /*#__PURE__*/function (_React$Component) {
264
207
  pointHeight: pointHeight,
265
208
  label: label,
266
209
  value: value,
267
- classes: classes,
268
210
  scale: scale,
269
211
  dottedOverline: true
270
212
  });
271
- }), _this2.renderCorrectnessIcon(barX, barWidth, correctVal, correctness, classes, scale, pointHeight, pointDiameter));
213
+ }), _this2.renderCorrectnessIcon(barX, barWidth, correctVal, correctness, scale, pointHeight, pointDiameter));
272
214
  }(), /*#__PURE__*/_react["default"].createElement(Component, {
273
215
  x: barX,
274
216
  y: v,
@@ -287,14 +229,10 @@ var RawPlot = /*#__PURE__*/function (_React$Component) {
287
229
  })));
288
230
  }
289
231
  }]);
290
- return RawPlot;
291
232
  }(_react["default"].Component);
292
-
293
- exports.RawPlot = RawPlot;
294
233
  (0, _defineProperty2["default"])(RawPlot, "propTypes", {
295
234
  onChangeCategory: _propTypes["default"].func,
296
235
  value: _propTypes["default"].number,
297
- classes: _propTypes["default"].object,
298
236
  label: _propTypes["default"].string,
299
237
  xBand: _propTypes["default"].func,
300
238
  index: _propTypes["default"].number.isRequired,
@@ -304,33 +242,40 @@ exports.RawPlot = RawPlot;
304
242
  correctness: _propTypes["default"].shape({
305
243
  value: _propTypes["default"].string,
306
244
  label: _propTypes["default"].string
307
- })
245
+ }),
246
+ defineChart: _propTypes["default"].bool,
247
+ correctData: _propTypes["default"].arrayOf(_propTypes["default"].shape({
248
+ value: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
249
+ label: _propTypes["default"].string
250
+ })),
251
+ className: _propTypes["default"].string
308
252
  });
309
- var Bar = (0, _index.withStyles)(function (theme) {
253
+ var Bar = (0, _styles.styled)(RawPlot)(function (_ref2) {
254
+ var theme = _ref2.theme;
310
255
  return {
311
- dot: {
256
+ '& .dot': {
312
257
  fill: _renderUi.color.visualElementsColors.PLOT_FILL_COLOR,
313
- '&.correct': (0, _styles.correct)('stroke'),
314
- '&.incorrect': (0, _styles.incorrect)('stroke')
258
+ '&.correct': (0, _styles2.correct)('stroke'),
259
+ '&.incorrect': (0, _styles2.incorrect)('stroke')
315
260
  },
316
- dotColor: {
261
+ '& .dotColor': {
317
262
  fill: _renderUi.color.visualElementsColors.PLOT_FILL_COLOR,
318
- '&.correct': (0, _styles.correct)('fill'),
319
- '&.incorrect': (0, _styles.incorrect)('fill')
263
+ '&.correct': (0, _styles2.correct)('fill'),
264
+ '&.incorrect': (0, _styles2.incorrect)('fill')
320
265
  },
321
- line: {
266
+ '& .line': {
322
267
  stroke: _renderUi.color.visualElementsColors.PLOT_FILL_COLOR,
323
- '&.correct': (0, _styles.correct)('stroke'),
324
- '&.incorrect': (0, _styles.incorrect)('stroke')
268
+ '&.correct': (0, _styles2.correct)('stroke'),
269
+ '&.incorrect': (0, _styles2.incorrect)('stroke')
325
270
  },
326
- correctIcon: {
271
+ '& .correctIcon': {
327
272
  backgroundColor: _renderUi.color.correct()
328
273
  },
329
- incorrectIcon: {
274
+ '& .incorrectIcon': {
330
275
  backgroundColor: _renderUi.color.incorrectWithIcon()
331
276
  },
332
- correctnessIcon: {
333
- borderRadius: theme.spacing.unit * 2,
277
+ '& .correctnessIcon': {
278
+ borderRadius: theme.spacing(2),
334
279
  color: _renderUi.color.defaults.WHITE,
335
280
  fontSize: '16px',
336
281
  width: '16px',
@@ -338,38 +283,34 @@ var Bar = (0, _index.withStyles)(function (theme) {
338
283
  padding: '2px',
339
284
  border: "1px solid ".concat(_renderUi.color.defaults.WHITE),
340
285
  stroke: 'initial',
341
- boxSizing: 'unset' // to override the default border-box in IBX
342
-
286
+ boxSizing: 'unset',
287
+ // to override the default border-box in IBX
288
+ display: 'block'
343
289
  },
344
- smallIcon: {
290
+ '& .smallIcon': {
345
291
  fontSize: '10px',
346
292
  width: '10px',
347
293
  height: '10px'
348
294
  }
349
295
  };
350
- })(RawPlot);
351
-
352
- var Plot = /*#__PURE__*/function (_React$Component2) {
353
- (0, _inherits2["default"])(Plot, _React$Component2);
354
-
355
- var _super2 = _createSuper(Plot);
356
-
296
+ });
297
+ var Plot = exports.Plot = /*#__PURE__*/function (_React$Component2) {
357
298
  function Plot() {
358
299
  (0, _classCallCheck2["default"])(this, Plot);
359
- return _super2.apply(this, arguments);
300
+ return _callSuper(this, Plot, arguments);
360
301
  }
361
-
362
- (0, _createClass2["default"])(Plot, [{
302
+ (0, _inherits2["default"])(Plot, _React$Component2);
303
+ return (0, _createClass2["default"])(Plot, [{
363
304
  key: "render",
364
305
  value: function render() {
365
306
  var _this$props3 = this.props,
366
- data = _this$props3.data,
367
- graphProps = _this$props3.graphProps,
368
- xBand = _this$props3.xBand,
369
- CustomBarElement = _this$props3.CustomBarElement,
370
- _onChangeCategory = _this$props3.onChangeCategory,
371
- defineChart = _this$props3.defineChart,
372
- correctData = _this$props3.correctData;
307
+ data = _this$props3.data,
308
+ graphProps = _this$props3.graphProps,
309
+ xBand = _this$props3.xBand,
310
+ CustomBarElement = _this$props3.CustomBarElement,
311
+ _onChangeCategory = _this$props3.onChangeCategory,
312
+ defineChart = _this$props3.defineChart,
313
+ correctData = _this$props3.correctData;
373
314
  return /*#__PURE__*/_react["default"].createElement(_group.Group, null, (data || []).map(function (d, index) {
374
315
  return /*#__PURE__*/_react["default"].createElement(Bar, {
375
316
  value: d.value,
@@ -390,18 +331,19 @@ var Plot = /*#__PURE__*/function (_React$Component2) {
390
331
  }));
391
332
  }
392
333
  }]);
393
- return Plot;
394
334
  }(_react["default"].Component);
395
-
396
- exports.Plot = Plot;
397
335
  (0, _defineProperty2["default"])(Plot, "propTypes", {
398
336
  data: _propTypes["default"].array,
399
337
  onChangeCategory: _propTypes["default"].func,
400
338
  xBand: _propTypes["default"].func,
401
339
  graphProps: _plot.types.GraphPropsType.isRequired,
402
340
  defineChart: _propTypes["default"].bool,
403
- CustomBarElement: _propTypes["default"].func
341
+ CustomBarElement: _propTypes["default"].func,
342
+ correctData: _propTypes["default"].arrayOf(_propTypes["default"].shape({
343
+ value: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
344
+ label: _propTypes["default"].string
345
+ })),
346
+ className: _propTypes["default"].string
404
347
  });
405
- var _default = Plot;
406
- exports["default"] = _default;
407
- //# sourceMappingURL=plot.js.map
348
+ var _default = exports["default"] = Plot;
349
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wcm9wVHlwZXMiLCJfQ2hlY2siLCJfc3R5bGVzIiwiX2dyb3VwIiwiX2RlYnVnIiwiX3Bsb3QiLCJfZHJhZ0hhbmRsZSIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX3JlbmRlclVpIiwiX3V0aWxzIiwiX3N0eWxlczIiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJfdHlwZW9mIiwiaGFzIiwiZ2V0Iiwic2V0IiwiX3QiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsImFwcGx5IiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJsb2ciLCJkZWJ1ZyIsIklDT05fU0laRSIsIlJhd1Bsb3QiLCJleHBvcnRzIiwiX1JlYWN0JENvbXBvbmVudCIsInByb3BzIiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2RlZmluZVByb3BlcnR5MiIsInNldFN0YXRlIiwiaXNIb3ZlcmVkIiwiZHJhZ1ZhbHVlIiwiX3RoaXMkcHJvcHMiLCJsYWJlbCIsIm9uQ2hhbmdlQ2F0ZWdvcnkiLCJzdGF0ZSIsInVuZGVmaW5lZCIsInZhbHVlIiwic2V0RHJhZ1ZhbHVlIiwiZXhpc3RpbmciLCJuZXh0IiwiYmFyWCIsImJhcldpZHRoIiwiY29ycmVjdFZhbCIsImNvcnJlY3RuZXNzIiwic2NhbGUiLCJwb2ludEhlaWdodCIsInBvaW50RGlhbWV0ZXIiLCJpY29uWSIsInkiLCJzaGFwZUluZGV4Iiwic2hhcGVDZW50ZXJZIiwiY3JlYXRlRWxlbWVudCIsIngiLCJ3aWR0aCIsImhlaWdodCIsImNsYXNzTmFtZSIsInRpdGxlIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJyZW5kZXIiLCJfdGhpczIiLCJfdGhpcyRwcm9wczIiLCJncmFwaFByb3BzIiwieEJhbmQiLCJpbmRleCIsIkN1c3RvbUJhckVsZW1lbnQiLCJpbnRlcmFjdGl2ZSIsImRlZmluZUNoYXJ0IiwiY29ycmVjdERhdGEiLCJyYW5nZSIsInNpemUiLCJfcmVmIiwibWF4IiwiX3RoaXMkc3RhdGUiLCJ2IiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJiYW5kd2lkdGgiLCJiYXJIZWlnaHQiLCJiYW5kS2V5IiwidmFsdWVzIiwicHVzaCIsIkNvbXBvbmVudCIsIkRyYWdnYWJsZUhhbmRsZSIsIkRyYWdIYW5kbGUiLCJhbGxvd1JvbGxvdmVyRXZlbnQiLCJGcmFnbWVudCIsIm9uTW91c2VFbnRlciIsImhhbmRsZU1vdXNlRW50ZXIiLCJvbk1vdXNlTGVhdmUiLCJoYW5kbGVNb3VzZUxlYXZlIiwib25Ub3VjaFN0YXJ0Iiwib25Ub3VjaEVuZCIsImxlbmd0aCIsInN0cm9rZSIsImNvbG9yIiwiZGVmYXVsdHMiLCJCT1JERVJfR1JBWSIsInN0cm9rZVdpZHRoIiwiZmlsbCIsIm1hcCIsInBhcnNlRmxvYXQiLCJpc05hTiIsInNlbGVjdGVkVmFsIiwicmVuZGVyQ29ycmVjdG5lc3NJY29uIiwib3ZlcmxheVZhbHVlcyIsImxhc3RJbmRleE9mT3ZlcmxheSIsImxhc3RPdmVybGF5VmFsdWUiLCJkb3R0ZWRPdmVybGluZSIsInZhbHVlc1RvUmVuZGVyIiwiaWR4Iiwib25EcmFnIiwib25EcmFnU3RvcCIsImRyYWdTdG9wIiwicHJpbWFyeURhcmsiLCJpc1Bsb3QiLCJSZWFjdCIsIlByb3BUeXBlcyIsImZ1bmMiLCJudW1iZXIiLCJzdHJpbmciLCJpc1JlcXVpcmVkIiwidHlwZXMiLCJHcmFwaFByb3BzVHlwZSIsImJvb2wiLCJzaGFwZSIsImFycmF5T2YiLCJvbmVPZlR5cGUiLCJCYXIiLCJzdHlsZWQiLCJfcmVmMiIsInRoZW1lIiwidmlzdWFsRWxlbWVudHNDb2xvcnMiLCJQTE9UX0ZJTExfQ09MT1IiLCJjb3JyZWN0IiwiaW5jb3JyZWN0IiwiYmFja2dyb3VuZENvbG9yIiwiaW5jb3JyZWN0V2l0aEljb24iLCJib3JkZXJSYWRpdXMiLCJzcGFjaW5nIiwiV0hJVEUiLCJmb250U2l6ZSIsInBhZGRpbmciLCJib3JkZXIiLCJjb25jYXQiLCJib3hTaXppbmciLCJkaXNwbGF5IiwiUGxvdCIsIl9SZWFjdCRDb21wb25lbnQyIiwiYXJndW1lbnRzIiwiX3RoaXMkcHJvcHMzIiwiZGF0YSIsIkdyb3VwIiwiZCIsImNhdGVnb3J5IiwiYXJyYXkiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wbG90L2NvbW1vbi9wbG90LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBDaGVjayBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL0NoZWNrJztcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvc3R5bGVzJztcbmltcG9ydCB7IEdyb3VwIH0gZnJvbSAnQHZpc3gvZ3JvdXAnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcblxuaW1wb3J0IHsgdHlwZXMgfSBmcm9tICdAcGllLWxpYi9wbG90JztcbmltcG9ydCBEcmFnZ2FibGVIYW5kbGUsIHsgRHJhZ0hhbmRsZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9kcmFnLWhhbmRsZSc7XG5pbXBvcnQgeyBjb2xvciB9IGZyb20gJ0BwaWUtbGliL3JlbmRlci11aSc7XG5pbXBvcnQgeyBiYW5kS2V5IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgY29ycmVjdCwgaW5jb3JyZWN0IH0gZnJvbSAnLi4vLi4vY29tbW9uL3N0eWxlcyc7XG5cbmNvbnN0IGxvZyA9IGRlYnVnKCdwaWUtbGliOmNoYXJ0OmJhcnMnKTtcbmNvbnN0IElDT05fU0laRSA9IDE2OyAvLyAxMHB4IGljb24gKyAycHggcGFkZGluZyBvbiBhbGwgc2lkZXMgKyAxcHggYm9yZGVyXG5cbmV4cG9ydCBjbGFzcyBSYXdQbG90IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBvbkNoYW5nZUNhdGVnb3J5OiBQcm9wVHlwZXMuZnVuYyxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLm51bWJlcixcbiAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB4QmFuZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICBncmFwaFByb3BzOiB0eXBlcy5HcmFwaFByb3BzVHlwZS5pc1JlcXVpcmVkLFxuICAgIEN1c3RvbUJhckVsZW1lbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGludGVyYWN0aXZlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBjb3JyZWN0bmVzczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgfSksXG4gICAgZGVmaW5lQ2hhcnQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGNvcnJlY3REYXRhOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgdmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKSxcbiAgICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIH0pKSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGRyYWdWYWx1ZTogdW5kZWZpbmVkLFxuICAgICAgaXNIb3ZlcmVkOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgaGFuZGxlTW91c2VFbnRlciA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgaXNIb3ZlcmVkOiB0cnVlIH0pO1xuICB9O1xuXG4gIGhhbmRsZU1vdXNlTGVhdmUgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGlzSG92ZXJlZDogZmFsc2UgfSk7XG4gIH07XG5cbiAgc2V0RHJhZ1ZhbHVlID0gKGRyYWdWYWx1ZSkgPT4gdGhpcy5zZXRTdGF0ZSh7IGRyYWdWYWx1ZSB9KTtcblxuICBkcmFnU3RvcCA9ICgpID0+IHtcbiAgICBjb25zdCB7IGxhYmVsLCBvbkNoYW5nZUNhdGVnb3J5IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgZHJhZ1ZhbHVlIH0gPSB0aGlzLnN0YXRlO1xuICAgIGxvZygnW2RyYWdTdG9wXScsIGRyYWdWYWx1ZSk7XG5cbiAgICBpZiAoZHJhZ1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9uQ2hhbmdlQ2F0ZWdvcnkoeyBsYWJlbCwgdmFsdWU6IGRyYWdWYWx1ZSB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnNldERyYWdWYWx1ZSh1bmRlZmluZWQpO1xuICB9O1xuXG4gIGRyYWdWYWx1ZSA9IChleGlzdGluZywgbmV4dCkgPT4ge1xuICAgIGxvZygnW2RyYWdWYWx1ZV0gbmV4dDonLCBuZXh0KTtcblxuICAgIHRoaXMuc2V0RHJhZ1ZhbHVlKG5leHQpO1xuICB9O1xuXG4gIHJlbmRlckNvcnJlY3RuZXNzSWNvbiA9IChiYXJYLCBiYXJXaWR0aCwgY29ycmVjdFZhbCwgY29ycmVjdG5lc3MsIHNjYWxlLCBwb2ludEhlaWdodCwgcG9pbnREaWFtZXRlcikgPT4ge1xuICAgIGxldCBpY29uWTtcblxuICAgIGlmIChjb3JyZWN0VmFsID09PSAwKSB7XG4gICAgICAvLyBpZiBjb3JyZWN0IHZhbHVlIGlzIDAsIHBvc2l0aW9uIGljb24gb24gdGhlIGhvcml6b250YWwgYXhpc1xuICAgICAgaWNvblkgPSBzY2FsZS55KDApIC0gSUNPTl9TSVpFIC8gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2hhcGVJbmRleCA9IGNvcnJlY3RWYWwgLSAxOyAvLyB0aGUgaW5kZXggb2YgdGhlIHNoYXBlIHJlcHJlc2VudGluZyB0aGUgY29ycmVjdCB2YWx1ZVxuICAgICAgY29uc3Qgc2hhcGVDZW50ZXJZID0gc2NhbGUueShzaGFwZUluZGV4KSAtIChwb2ludEhlaWdodCAtIHBvaW50RGlhbWV0ZXIpIC8gMiAtIHBvaW50RGlhbWV0ZXIgLyAyO1xuICAgICAgaWNvblkgPSBzaGFwZUNlbnRlclkgLSBJQ09OX1NJWkUgLyAyOyAvLyBjZW50ZXIgdGhlIGljb25cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGZvcmVpZ25PYmplY3QgeD17YmFyWCArIGJhcldpZHRoIC8gMiAtIElDT05fU0laRSAvIDJ9IHk9e2ljb25ZfSB3aWR0aD17SUNPTl9TSVpFfSBoZWlnaHQ9e0lDT05fU0laRX0+XG4gICAgICAgIDxDaGVja1xuICAgICAgICAgIGNsYXNzTmFtZT1cImNvcnJlY3RuZXNzSWNvbiBjb3JyZWN0SWNvbiBzbWFsbEljb25cIlxuICAgICAgICAgIHRpdGxlPXtjb3JyZWN0bmVzcy5sYWJlbH1cbiAgICAgICAgLz5cbiAgICAgIDwvZm9yZWlnbk9iamVjdD5cbiAgICApO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBncmFwaFByb3BzLFxuICAgICAgdmFsdWUsXG4gICAgICBsYWJlbCxcbiAgICAgIHhCYW5kLFxuICAgICAgaW5kZXgsXG4gICAgICBDdXN0b21CYXJFbGVtZW50LFxuICAgICAgaW50ZXJhY3RpdmUsXG4gICAgICBjb3JyZWN0bmVzcyxcbiAgICAgIGRlZmluZUNoYXJ0LFxuICAgICAgY29ycmVjdERhdGEsXG4gICAgICBjbGFzc05hbWVcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHsgc2NhbGUsIHJhbmdlLCBzaXplIH0gPSBncmFwaFByb3BzO1xuICAgIGNvbnN0IHsgbWF4IH0gPSByYW5nZSB8fCB7fTtcbiAgICBjb25zdCB7IGRyYWdWYWx1ZSwgaXNIb3ZlcmVkIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgY29uc3QgdiA9IE51bWJlci5pc0Zpbml0ZShkcmFnVmFsdWUpID8gZHJhZ1ZhbHVlIDogdmFsdWU7XG4gICAgY29uc3QgYmFyV2lkdGggPSB4QmFuZC5iYW5kd2lkdGgoKTtcbiAgICBjb25zdCBiYXJIZWlnaHQgPSBzY2FsZS55KHJhbmdlLm1heCAtIHYpO1xuICAgIGNvbnN0IGJhclggPSB4QmFuZChiYW5kS2V5KHsgbGFiZWwgfSwgaW5kZXgpKTtcblxuICAgIGxvZygnbGFiZWw6JywgbGFiZWwsICdiYXJYOicsIGJhclgsICd2OiAnLCB2LCAnYmFySGVpZ2h0OicsIGJhckhlaWdodCwgJ2JhcldpZHRoOiAnLCBiYXJXaWR0aCk7XG5cbiAgICBjb25zdCB2YWx1ZXMgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdjsgaSsrKSB7XG4gICAgICB2YWx1ZXMucHVzaChpKTtcbiAgICB9XG5cbiAgICBjb25zdCBwb2ludEhlaWdodCA9IHNpemUuaGVpZ2h0IC8gbWF4O1xuICAgIGNvbnN0IHBvaW50RGlhbWV0ZXIgPSAocG9pbnRIZWlnaHQgPiBiYXJXaWR0aCA/IGJhcldpZHRoIDogcG9pbnRIZWlnaHQpICogMC44O1xuICAgIGNvbnN0IENvbXBvbmVudCA9IGludGVyYWN0aXZlID8gRHJhZ2dhYmxlSGFuZGxlIDogRHJhZ0hhbmRsZTtcbiAgICBjb25zdCBhbGxvd1JvbGxvdmVyRXZlbnQgPSBpbnRlcmFjdGl2ZSAmJiAhY29ycmVjdG5lc3M7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICA8Z1xuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgIG9uTW91c2VFbnRlcj17dGhpcy5oYW5kbGVNb3VzZUVudGVyfVxuICAgICAgICAgIG9uTW91c2VMZWF2ZT17dGhpcy5oYW5kbGVNb3VzZUxlYXZlfVxuICAgICAgICAgIG9uVG91Y2hTdGFydD17dGhpcy5oYW5kbGVNb3VzZUVudGVyfVxuICAgICAgICAgIG9uVG91Y2hFbmQ9e3RoaXMuaGFuZGxlTW91c2VMZWF2ZX1cbiAgICAgICAgPlxuICAgICAgICAgIHtpc0hvdmVyZWQgJiYgYWxsb3dSb2xsb3ZlckV2ZW50ICYmIChcbiAgICAgICAgICAgIDxyZWN0XG4gICAgICAgICAgICAgIHg9e2Jhclh9XG4gICAgICAgICAgICAgIHk9e3NjYWxlLnkodil9XG4gICAgICAgICAgICAgIHdpZHRoPXtiYXJXaWR0aH1cbiAgICAgICAgICAgICAgaGVpZ2h0PXt2YWx1ZXM/Lmxlbmd0aCA/IHBvaW50SGVpZ2h0ICogdmFsdWVzLmxlbmd0aCA6IDB9XG4gICAgICAgICAgICAgIHN0cm9rZT17Y29sb3IuZGVmYXVsdHMuQk9SREVSX0dSQVl9XG4gICAgICAgICAgICAgIHN0cm9rZVdpZHRoPXsnNHB4J31cbiAgICAgICAgICAgICAgZmlsbD17J3RyYW5zcGFyZW50J31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7dmFsdWVzLm1hcCgoaW5kZXgpID0+XG4gICAgICAgICAgICBDdXN0b21CYXJFbGVtZW50KHtcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgIHBvaW50RGlhbWV0ZXIsXG4gICAgICAgICAgICAgIGJhclgsXG4gICAgICAgICAgICAgIGJhcldpZHRoLFxuICAgICAgICAgICAgICBwb2ludEhlaWdodCxcbiAgICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICBzY2FsZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICl9XG4gICAgICAgICAge2NvcnJlY3RuZXNzICYmXG4gICAgICAgICAgICBjb3JyZWN0bmVzcy52YWx1ZSA9PT0gJ2luY29ycmVjdCcgJiZcbiAgICAgICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvcnJlY3RWYWwgPSBwYXJzZUZsb2F0KGNvcnJlY3REYXRhW2luZGV4XSAmJiBjb3JyZWN0RGF0YVtpbmRleF0udmFsdWUpO1xuICAgICAgICAgICAgICBpZiAoaXNOYU4oY29ycmVjdFZhbCkpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZFZhbCA9IHY7XG5cbiAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlOiBpZiBjb3JyZWN0IHZhbHVlIGlzIDAsIG9ubHkgc2hvdyB0aGUgaWNvbiBvbiB0aGUgYXhpc1xuICAgICAgICAgICAgICBpZiAoY29ycmVjdFZhbCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNvcnJlY3RuZXNzSWNvbihcbiAgICAgICAgICAgICAgICAgIGJhclgsXG4gICAgICAgICAgICAgICAgICBiYXJXaWR0aCxcbiAgICAgICAgICAgICAgICAgIGNvcnJlY3RWYWwsXG4gICAgICAgICAgICAgICAgICBjb3JyZWN0bmVzcyxcbiAgICAgICAgICAgICAgICAgIHNjYWxlLFxuICAgICAgICAgICAgICAgICAgcG9pbnRIZWlnaHQsXG4gICAgICAgICAgICAgICAgICBwb2ludERpYW1ldGVyLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRWYWwgPiBjb3JyZWN0VmFsKSB7XG4gICAgICAgICAgICAgICAgLy8gc2VsZWN0ZWQgaXMgaGlnaGVyIHRoYW4gY29ycmVjdDogb3ZlcmxheSB0aGUgY29ycmVjdCBsYXN0IHNlZ21lbnRcbiAgICAgICAgICAgICAgICBjb25zdCBvdmVybGF5VmFsdWVzID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3JyZWN0VmFsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgIG92ZXJsYXlWYWx1ZXMucHVzaChpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdEluZGV4T2ZPdmVybGF5ID0gb3ZlcmxheVZhbHVlcy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RPdmVybGF5VmFsdWUgPSBvdmVybGF5VmFsdWVzW2xhc3RJbmRleE9mT3ZlcmxheV07XG4gICAgICAgICAgICAgICAgY29uc3QgYmFyWCA9IHhCYW5kKGJhbmRLZXkoeyBsYWJlbCB9LCBpbmRleCkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhcldpZHRoID0geEJhbmQuYmFuZHdpZHRoKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9pbnRIZWlnaHQgPSBzaXplLmhlaWdodCAvIG1heDtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2ludERpYW1ldGVyID0gKHBvaW50SGVpZ2h0ID4gYmFyV2lkdGggPyBiYXJXaWR0aCA6IHBvaW50SGVpZ2h0KSAqIDAuODtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPEN1c3RvbUJhckVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICBpbmRleD17bGFzdE92ZXJsYXlWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICBwb2ludERpYW1ldGVyPXtwb2ludERpYW1ldGVyICsgMTB9IC8vIGluY3JlYXNlIHBvaW50IGRpYW1ldGVyIGZvciBkb3R0ZWQgbGluZVxuICAgICAgICAgICAgICAgICAgICAgIGJhclg9e2Jhclh9XG4gICAgICAgICAgICAgICAgICAgICAgYmFyV2lkdGg9e2JhcldpZHRofVxuICAgICAgICAgICAgICAgICAgICAgIHBvaW50SGVpZ2h0PXtwb2ludEhlaWdodH1cbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbD17bGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgIHNjYWxlPXtzY2FsZX1cbiAgICAgICAgICAgICAgICAgICAgICBkb3R0ZWRPdmVybGluZT17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAge3RoaXMucmVuZGVyQ29ycmVjdG5lc3NJY29uKFxuICAgICAgICAgICAgICAgICAgICAgIGJhclgsXG4gICAgICAgICAgICAgICAgICAgICAgYmFyV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgY29ycmVjdFZhbCxcbiAgICAgICAgICAgICAgICAgICAgICBjb3JyZWN0bmVzcyxcbiAgICAgICAgICAgICAgICAgICAgICBzY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICBwb2ludEhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICBwb2ludERpYW1ldGVyLFxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBzZWxlY3RlZCBpcyBsb3dlciB0aGFuIGNvcnJlY3QsIHJlbmRlciBtaXNzaW5nIHNlZ21lbnQgYmVsb3cgdGhlIGNvcnJlY3QgYmFyXG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlc1RvUmVuZGVyID0gW107XG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSBzZWxlY3RlZFZhbDsgaSA8IGNvcnJlY3RWYWw7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhbHVlc1RvUmVuZGVyLnB1c2goaSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAge3ZhbHVlc1RvUmVuZGVyLm1hcCgoaWR4KSA9PlxuICAgICAgICAgICAgICAgICAgICBDdXN0b21CYXJFbGVtZW50KHtcbiAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaWR4LFxuICAgICAgICAgICAgICAgICAgICAgIHBvaW50RGlhbWV0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgYmFyWCxcbiAgICAgICAgICAgICAgICAgICAgICBiYXJXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICBwb2ludEhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBzY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICBkb3R0ZWRPdmVybGluZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAge3RoaXMucmVuZGVyQ29ycmVjdG5lc3NJY29uKFxuICAgICAgICAgICAgICAgICAgICBiYXJYLFxuICAgICAgICAgICAgICAgICAgICBiYXJXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgY29ycmVjdFZhbCxcbiAgICAgICAgICAgICAgICAgICAgY29ycmVjdG5lc3MsXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlLFxuICAgICAgICAgICAgICAgICAgICBwb2ludEhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgcG9pbnREaWFtZXRlcixcbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KSgpfVxuICAgICAgICAgIDxDb21wb25lbnRcbiAgICAgICAgICAgIHg9e2Jhclh9XG4gICAgICAgICAgICB5PXt2fVxuICAgICAgICAgICAgaW50ZXJhY3RpdmU9e2ludGVyYWN0aXZlfVxuICAgICAgICAgICAgd2lkdGg9e2JhcldpZHRofVxuICAgICAgICAgICAgb25EcmFnPXsodikgPT4gdGhpcy5kcmFnVmFsdWUodmFsdWUsIHYpfVxuICAgICAgICAgICAgb25EcmFnU3RvcD17dGhpcy5kcmFnU3RvcH1cbiAgICAgICAgICAgIGdyYXBoUHJvcHM9e2dyYXBoUHJvcHN9XG4gICAgICAgICAgICBjb3JyZWN0bmVzcz17Y29ycmVjdG5lc3N9XG4gICAgICAgICAgICBpc0hvdmVyZWQ9e2lzSG92ZXJlZH1cbiAgICAgICAgICAgIGRlZmluZUNoYXJ0PXtkZWZpbmVDaGFydH1cbiAgICAgICAgICAgIGNvbG9yPXtjb2xvci5wcmltYXJ5RGFyaygpfVxuICAgICAgICAgICAgaXNQbG90XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9nPlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IEJhciA9IHN0eWxlZChSYXdQbG90KSgoeyB0aGVtZSB9KSA9PiAoe1xuICAnJiAuZG90Jzoge1xuICAgIGZpbGw6IGNvbG9yLnZpc3VhbEVsZW1lbnRzQ29sb3JzLlBMT1RfRklMTF9DT0xPUixcbiAgICAnJi5jb3JyZWN0JzogY29ycmVjdCgnc3Ryb2tlJyksXG4gICAgJyYuaW5jb3JyZWN0JzogaW5jb3JyZWN0KCdzdHJva2UnKSxcbiAgfSxcbiAgJyYgLmRvdENvbG9yJzoge1xuICAgIGZpbGw6IGNvbG9yLnZpc3VhbEVsZW1lbnRzQ29sb3JzLlBMT1RfRklMTF9DT0xPUixcbiAgICAnJi5jb3JyZWN0JzogY29ycmVjdCgnZmlsbCcpLFxuICAgICcmLmluY29ycmVjdCc6IGluY29ycmVjdCgnZmlsbCcpLFxuICB9LFxuICAnJiAubGluZSc6IHtcbiAgICBzdHJva2U6IGNvbG9yLnZpc3VhbEVsZW1lbnRzQ29sb3JzLlBMT1RfRklMTF9DT0xPUixcbiAgICAnJi5jb3JyZWN0JzogY29ycmVjdCgnc3Ryb2tlJyksXG4gICAgJyYuaW5jb3JyZWN0JzogaW5jb3JyZWN0KCdzdHJva2UnKSxcbiAgfSxcbiAgJyYgLmNvcnJlY3RJY29uJzoge1xuICAgIGJhY2tncm91bmRDb2xvcjogY29sb3IuY29ycmVjdCgpLFxuICB9LFxuICAnJiAuaW5jb3JyZWN0SWNvbic6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLmluY29ycmVjdFdpdGhJY29uKCksXG4gIH0sXG4gICcmIC5jb3JyZWN0bmVzc0ljb24nOiB7XG4gICAgYm9yZGVyUmFkaXVzOiB0aGVtZS5zcGFjaW5nKDIpLFxuICAgIGNvbG9yOiBjb2xvci5kZWZhdWx0cy5XSElURSxcbiAgICBmb250U2l6ZTogJzE2cHgnLFxuICAgIHdpZHRoOiAnMTZweCcsXG4gICAgaGVpZ2h0OiAnMTZweCcsXG4gICAgcGFkZGluZzogJzJweCcsXG4gICAgYm9yZGVyOiBgMXB4IHNvbGlkICR7Y29sb3IuZGVmYXVsdHMuV0hJVEV9YCxcbiAgICBzdHJva2U6ICdpbml0aWFsJyxcbiAgICBib3hTaXppbmc6ICd1bnNldCcsIC8vIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJvcmRlci1ib3ggaW4gSUJYXG4gICAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgfSxcbiAgJyYgLnNtYWxsSWNvbic6IHtcbiAgICBmb250U2l6ZTogJzEwcHgnLFxuICAgIHdpZHRoOiAnMTBweCcsXG4gICAgaGVpZ2h0OiAnMTBweCcsXG4gIH0sXG59KSk7XG5cbmV4cG9ydCBjbGFzcyBQbG90IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBkYXRhOiBQcm9wVHlwZXMuYXJyYXksXG4gICAgb25DaGFuZ2VDYXRlZ29yeTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgeEJhbmQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGdyYXBoUHJvcHM6IHR5cGVzLkdyYXBoUHJvcHNUeXBlLmlzUmVxdWlyZWQsXG4gICAgZGVmaW5lQ2hhcnQ6IFByb3BUeXBlcy5ib29sLFxuICAgIEN1c3RvbUJhckVsZW1lbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGNvcnJlY3REYXRhOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgdmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKSxcbiAgICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIH0pKSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgZGF0YSwgZ3JhcGhQcm9wcywgeEJhbmQsIEN1c3RvbUJhckVsZW1lbnQsIG9uQ2hhbmdlQ2F0ZWdvcnksIGRlZmluZUNoYXJ0LCBjb3JyZWN0RGF0YSB9ID0gdGhpcy5wcm9wcztcblxuICAgIHJldHVybiAoXG4gICAgICA8R3JvdXA+XG4gICAgICAgIHsoZGF0YSB8fCBbXSkubWFwKChkLCBpbmRleCkgPT4gKFxuICAgICAgICAgIDxCYXJcbiAgICAgICAgICAgIHZhbHVlPXtkLnZhbHVlfVxuICAgICAgICAgICAgbGFiZWw9e2QubGFiZWx9XG4gICAgICAgICAgICBpbnRlcmFjdGl2ZT17ZGVmaW5lQ2hhcnQgfHwgZC5pbnRlcmFjdGl2ZX1cbiAgICAgICAgICAgIGRlZmluZUNoYXJ0PXtkZWZpbmVDaGFydH1cbiAgICAgICAgICAgIHhCYW5kPXt4QmFuZH1cbiAgICAgICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAgICAgIGtleT17YGJhci0ke2QubGFiZWx9LSR7ZC52YWx1ZX0tJHtpbmRleH1gfVxuICAgICAgICAgICAgb25DaGFuZ2VDYXRlZ29yeT17KGNhdGVnb3J5KSA9PiBvbkNoYW5nZUNhdGVnb3J5KGluZGV4LCBjYXRlZ29yeSl9XG4gICAgICAgICAgICBncmFwaFByb3BzPXtncmFwaFByb3BzfVxuICAgICAgICAgICAgQ3VzdG9tQmFyRWxlbWVudD17Q3VzdG9tQmFyRWxlbWVudH1cbiAgICAgICAgICAgIGNvcnJlY3RuZXNzPXtkLmNvcnJlY3RuZXNzfVxuICAgICAgICAgICAgY29ycmVjdERhdGE9e2NvcnJlY3REYXRhfVxuICAgICAgICAgIC8+XG4gICAgICAgICkpfVxuICAgICAgPC9Hcm91cD5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBk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