@pie-lib/charting 5.17.0-beta.0 → 5.17.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 (74) hide show
  1. package/CHANGELOG.json +1 -581
  2. package/CHANGELOG.md +149 -43
  3. package/package.json +5 -5
  4. package/src/__tests__/__snapshots__/axes.test.jsx.snap +1 -0
  5. package/src/__tests__/__snapshots__/chart.test.jsx.snap +0 -18
  6. package/src/__tests__/__snapshots__/grid.test.jsx.snap +61 -17
  7. package/src/__tests__/axes.test.jsx +0 -5
  8. package/src/__tests__/chart.test.jsx +8 -0
  9. package/src/actions-button.jsx +109 -0
  10. package/src/axes.jsx +5 -31
  11. package/src/bars/common/bars.jsx +8 -10
  12. package/src/chart-setup.jsx +1 -1
  13. package/src/chart.jsx +31 -26
  14. package/src/common/drag-handle.jsx +3 -3
  15. package/src/common/styles.js +1 -1
  16. package/src/grid.jsx +38 -13
  17. package/src/index.js +2 -1
  18. package/src/key-legend.jsx +75 -0
  19. package/src/line/common/drag-handle.jsx +3 -9
  20. package/src/line/common/line.jsx +2 -6
  21. package/src/line/line-cross.js +29 -2
  22. package/src/line/line-dot.js +36 -19
  23. package/src/mark-label.jsx +7 -2
  24. package/src/plot/common/plot.jsx +8 -5
  25. package/src/tool-menu.jsx +1 -1
  26. package/lib/__tests__/axes.test.js +0 -181
  27. package/lib/__tests__/chart-setup.test.js +0 -58
  28. package/lib/__tests__/chart-type.test.js +0 -42
  29. package/lib/__tests__/chart.test.js +0 -108
  30. package/lib/__tests__/grid.test.js +0 -48
  31. package/lib/__tests__/mark-label.test.js +0 -57
  32. package/lib/__tests__/utils.js +0 -56
  33. package/lib/__tests__/utils.test.js +0 -197
  34. package/lib/axes.js +0 -643
  35. package/lib/bars/__tests__/bar.test.js +0 -62
  36. package/lib/bars/__tests__/histogram.test.js +0 -64
  37. package/lib/bars/__tests__/utils.js +0 -56
  38. package/lib/bars/bar.js +0 -86
  39. package/lib/bars/common/__tests__/bars.test.js +0 -100
  40. package/lib/bars/common/__tests__/utils.js +0 -56
  41. package/lib/bars/common/bars.js +0 -301
  42. package/lib/bars/histogram.js +0 -87
  43. package/lib/chart-setup.js +0 -458
  44. package/lib/chart-type.js +0 -71
  45. package/lib/chart-types.js +0 -31
  46. package/lib/chart.js +0 -438
  47. package/lib/common/__tests__/drag-handle.test.js +0 -134
  48. package/lib/common/__tests__/utils.js +0 -56
  49. package/lib/common/drag-handle.js +0 -175
  50. package/lib/common/drag-icon.js +0 -52
  51. package/lib/common/styles.js +0 -40
  52. package/lib/grid.js +0 -104
  53. package/lib/index.js +0 -40
  54. package/lib/line/__tests__/line-cross.test.js +0 -64
  55. package/lib/line/__tests__/line-dot.test.js +0 -64
  56. package/lib/line/__tests__/utils.js +0 -56
  57. package/lib/line/common/__tests__/drag-handle.test.js +0 -134
  58. package/lib/line/common/__tests__/line.test.js +0 -128
  59. package/lib/line/common/__tests__/utils.js +0 -56
  60. package/lib/line/common/drag-handle.js +0 -157
  61. package/lib/line/common/line.js +0 -261
  62. package/lib/line/line-cross.js +0 -168
  63. package/lib/line/line-dot.js +0 -131
  64. package/lib/mark-label.js +0 -255
  65. package/lib/plot/__tests__/dot.test.js +0 -64
  66. package/lib/plot/__tests__/line.test.js +0 -64
  67. package/lib/plot/__tests__/utils.js +0 -56
  68. package/lib/plot/common/__tests__/plot.test.js +0 -103
  69. package/lib/plot/common/__tests__/utils.js +0 -56
  70. package/lib/plot/common/plot.js +0 -280
  71. package/lib/plot/dot.js +0 -123
  72. package/lib/plot/line.js +0 -152
  73. package/lib/tool-menu.js +0 -142
  74. package/lib/utils.js +0 -244
@@ -1,458 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
- Object.defineProperty(exports, "__esModule", {
8
- value: true
9
- });
10
- exports.resetValues = exports["default"] = void 0;
11
-
12
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
-
14
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
-
16
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
-
18
- var _react = _interopRequireWildcard(require("react"));
19
-
20
- var _propTypes = _interopRequireDefault(require("prop-types"));
21
-
22
- var _renderUi = require("@pie-lib/render-ui");
23
-
24
- var _styles = require("@material-ui/core/styles");
25
-
26
- var _Typography = _interopRequireDefault(require("@material-ui/core/Typography"));
27
-
28
- var _chartType = _interopRequireDefault(require("./chart-type"));
29
-
30
- var _configUi = require("@pie-lib/config-ui");
31
-
32
- 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); }
33
-
34
- 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; }
35
-
36
- 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; }
37
-
38
- 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; }
39
-
40
- var resetValues = function resetValues(data, updateModel, range, onChange, model) {
41
- (data || []).forEach(function (d) {
42
- var d_value_scaled = Math.round(d.value * 10);
43
- var range_step_scaled = Math.round(range.step * 10);
44
- var remainder_scaled = d_value_scaled % range_step_scaled;
45
- var remainder = remainder_scaled / 10;
46
-
47
- if (d.value > range.max || remainder !== 0) {
48
- d.value = 0;
49
- }
50
- });
51
-
52
- if (updateModel) {
53
- onChange(_objectSpread(_objectSpread({}, model), {}, {
54
- data: data
55
- }));
56
- }
57
- };
58
-
59
- exports.resetValues = resetValues;
60
-
61
- var ConfigureChartPanel = function ConfigureChartPanel(props) {
62
- var classes = props.classes,
63
- model = props.model,
64
- onChange = props.onChange,
65
- chartDimensions = props.chartDimensions,
66
- _props$gridValues = props.gridValues,
67
- gridValues = _props$gridValues === void 0 ? {} : _props$gridValues,
68
- _props$labelValues = props.labelValues,
69
- labelValues = _props$labelValues === void 0 ? {} : _props$labelValues,
70
- _props$studentNewCate = props.studentNewCategoryDefaultLabel,
71
- studentNewCategoryDefaultLabel = _props$studentNewCate === void 0 ? {} : _props$studentNewCate,
72
- _props$availableChart = props.availableChartTypes,
73
- availableChartTypes = _props$availableChart === void 0 ? {} : _props$availableChart,
74
- chartTypeLabel = props.chartTypeLabel;
75
-
76
- var _useState = (0, _react.useState)({
77
- open: false,
78
- title: '',
79
- text: '',
80
- onClose: null,
81
- onConfirm: null
82
- }),
83
- _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
84
- alertDialog = _useState2[0],
85
- setAlertDialog = _useState2[1];
86
-
87
- var _useState3 = (0, _react.useState)(false),
88
- _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
89
- open = _useState4[0],
90
- setOpen = _useState4[1];
91
-
92
- var _useState5 = (0, _react.useState)(''),
93
- _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
94
- rangeKey = _useState6[0],
95
- setRangeKey = _useState6[1];
96
-
97
- var _useState7 = (0, _react.useState)(0),
98
- _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
99
- resetValue = _useState8[0],
100
- setResetValue = _useState8[1];
101
-
102
- var _model$range = model.range,
103
- range = _model$range === void 0 ? {} : _model$range,
104
- correctAnswer = model.correctAnswer,
105
- changeInteractiveEnabled = model.changeInteractiveEnabled,
106
- changeEditableEnabled = model.changeEditableEnabled;
107
- var size = model.graph;
108
-
109
- var _ref = chartDimensions || {},
110
- showInConfigPanel = _ref.showInConfigPanel,
111
- width = _ref.width,
112
- height = _ref.height;
113
-
114
- var widthConstraints = {
115
- min: width !== null && width !== void 0 && width.min ? Math.max(50, width.min) : 50,
116
- max: width !== null && width !== void 0 && width.max ? Math.min(700, width.max) : 700,
117
- step: (width === null || width === void 0 ? void 0 : width.step) >= 1 ? Math.min(200, width.step) : 20
118
- };
119
- var heightConstraints = {
120
- min: height !== null && height !== void 0 && height.min ? Math.max(400, height.min) : 400,
121
- max: height !== null && height !== void 0 && height.max ? Math.min(700, height.max) : 700,
122
- step: (height === null || height === void 0 ? void 0 : height.step) >= 1 ? Math.min(200, height.step) : 20
123
- };
124
- var gridOptions = gridValues && gridValues.range ? {
125
- customValues: gridValues.range
126
- } : {
127
- min: 0,
128
- max: 10000
129
- };
130
- var labelOptions = labelValues && labelValues.range ? {
131
- customValues: labelValues.range
132
- } : {
133
- min: 0,
134
- max: 10000
135
- };
136
-
137
- var stepConfig = /*#__PURE__*/_react["default"].createElement("div", {
138
- className: classes.rowView
139
- }, /*#__PURE__*/_react["default"].createElement(_configUi.NumberTextFieldCustom, (0, _extends2["default"])({
140
- className: classes.mediumTextField,
141
- label: "Grid Interval",
142
- value: range.step,
143
- variant: "outlined",
144
- onChange: function onChange(e, v) {
145
- return onRangeChanged('step', v, e);
146
- }
147
- }, gridOptions)), /*#__PURE__*/_react["default"].createElement(_configUi.NumberTextFieldCustom, (0, _extends2["default"])({
148
- className: classes.mediumTextField,
149
- label: 'Label Interval',
150
- value: range.labelStep,
151
- variant: 'outlined',
152
- onChange: function onChange(e, v) {
153
- return onRangeChanged('labelStep', v, e);
154
- }
155
- }, labelOptions)));
156
-
157
- var handleAlertDialog = function handleAlertDialog(openStatus, callback) {
158
- setAlertDialog(function (prevState) {
159
- return _objectSpread(_objectSpread({}, prevState), {}, {
160
- open: openStatus
161
- });
162
- }, function () {
163
- if (callback) {
164
- callback();
165
- }
166
- });
167
- setOpen(openStatus);
168
- };
169
-
170
- var setPropertiesToFalse = function setPropertiesToFalse(data, property) {
171
- return data.map(function (obj) {
172
- if (obj.hasOwnProperty(property)) {
173
- obj[property] = property == 'interactive' ? true : false;
174
- }
175
-
176
- return obj;
177
- });
178
- };
179
-
180
- var removeOutOfRangeValues = function removeOutOfRangeValues(updateModel) {
181
- var correctAnswer = model.correctAnswer,
182
- data = model.data;
183
-
184
- if (changeInteractiveEnabled === false) {
185
- setPropertiesToFalse(data, 'interactive');
186
- }
187
-
188
- if (changeEditableEnabled === false) {
189
- setPropertiesToFalse(data, 'editable');
190
- }
191
-
192
- resetValues(data, updateModel, range, onChange, model);
193
- resetValues(correctAnswer.data, false, range, onChange, model);
194
- };
195
-
196
- var setCategoryDefaultLabel = function setCategoryDefaultLabel() {
197
- var studentCategoryDefaultLabel = studentNewCategoryDefaultLabel === null || studentNewCategoryDefaultLabel === void 0 ? void 0 : studentNewCategoryDefaultLabel.label;
198
- onChange(_objectSpread(_objectSpread({}, model), {}, {
199
- studentCategoryDefaultLabel: studentCategoryDefaultLabel
200
- }));
201
- };
202
-
203
- var rangeProps = function rangeProps(chartType) {
204
- return chartType.includes('Plot') ? {
205
- min: 3,
206
- max: 10
207
- } : {
208
- min: 0.05,
209
- max: 10000
210
- };
211
- };
212
-
213
- var onSizeChanged = function onSizeChanged(key, value) {
214
- var graph = _objectSpread(_objectSpread({}, size), {}, (0, _defineProperty2["default"])({}, key, value));
215
-
216
- onChange(_objectSpread(_objectSpread({}, model), {}, {
217
- graph: graph
218
- }));
219
- };
220
-
221
- var isOutOfRange = function isOutOfRange(data, range) {
222
- return (data || []).find(function (d) {
223
- return d.value > range.max || d.value - range.step * Math.floor(d.value / range.step) !== 0;
224
- });
225
- };
226
-
227
- var onRangeChanged = function onRangeChanged(key, value, e) {
228
- // use reset values to restore range to initial values
229
- setResetValue(range[key]);
230
- setRangeKey(key);
231
- range[key] = value;
232
-
233
- if (key === 'max' || key === 'step') {
234
- // check if current chart values are invalid for given range step/max
235
- var outOfRange = isOutOfRange(model.data, range) || isOutOfRange(model.correctAnswer.data, range);
236
-
237
- if (outOfRange && JSON.stringify(e) !== '{}') {
238
- setOpen(true);
239
- } else {
240
- onChange(_objectSpread(_objectSpread({}, model), {}, {
241
- range: range
242
- }));
243
- }
244
- } else {
245
- onChange(_objectSpread(_objectSpread({}, model), {}, {
246
- range: range
247
- }));
248
- }
249
- };
250
-
251
- (0, _react.useEffect)(function () {
252
- removeOutOfRangeValues(true);
253
- setCategoryDefaultLabel();
254
- }, []);
255
- (0, _react.useEffect)(function () {
256
- if (open) {
257
- setAlertDialog({
258
- open: true,
259
- title: 'Warning',
260
- text: 'This change will remove values defined for one or more categories',
261
- onConfirm: function onConfirm() {
262
- removeOutOfRangeValues();
263
- handleAlertDialog(false, onChange(_objectSpread(_objectSpread({}, model), {}, {
264
- range: range,
265
- correctAnswer: correctAnswer
266
- })));
267
- },
268
- onClose: function onClose() {
269
- range[rangeKey] = resetValue;
270
- handleAlertDialog(false);
271
- }
272
- });
273
- }
274
- }, [open]);
275
- var isValidPlot = range.step === 1 && range.labelStep === 1 && 3 <= range.max && range.max <= 10;
276
-
277
- var getPlotConfiguration = function getPlotConfiguration() {
278
- rangeProps.min = 3;
279
- rangeProps.max = 10;
280
- range.max = 10;
281
- range.step = 1;
282
- range.labelStep = 1;
283
- onChange(_objectSpread(_objectSpread({}, model), {}, {
284
- range: range
285
- }));
286
- };
287
-
288
- var onChartTypeChange = function onChartTypeChange(chartType) {
289
- if (chartType.includes('Plot')) {
290
- // The selected chart type does not support the current chart configuration
291
- if (!isValidPlot) {
292
- setAlertDialog({
293
- open: true,
294
- title: 'Warning',
295
- text: 'The selected chart type does not support the current chart configuration. Reset chart configuration?',
296
- onConfirm: function onConfirm() {
297
- getPlotConfiguration();
298
- removeOutOfRangeValues();
299
- handleAlertDialog(false, onChange(_objectSpread(_objectSpread({}, model), {}, {
300
- range: range,
301
- chartType: chartType
302
- })));
303
- },
304
- onClose: function onClose() {
305
- handleAlertDialog(false);
306
- }
307
- });
308
- return;
309
- }
310
-
311
- rangeProps.min = 3;
312
- rangeProps.max = 10;
313
- onChange(_objectSpread(_objectSpread({}, model), {}, {
314
- chartType: chartType
315
- }));
316
- return;
317
- }
318
-
319
- onChange(_objectSpread(_objectSpread({}, model), {}, {
320
- chartType: chartType
321
- }));
322
- };
323
-
324
- return /*#__PURE__*/_react["default"].createElement("div", {
325
- className: classes.wrapper
326
- }, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
327
- variant: 'subtitle1'
328
- }, "Configure Chart"), /*#__PURE__*/_react["default"].createElement("div", {
329
- className: classes.content
330
- }, /*#__PURE__*/_react["default"].createElement("div", {
331
- className: classes.rowView
332
- }, /*#__PURE__*/_react["default"].createElement(_chartType["default"], {
333
- value: model.chartType,
334
- onChange: function onChange(e) {
335
- return onChartTypeChange(e.target.value);
336
- },
337
- availableChartTypes: availableChartTypes,
338
- chartTypeLabel: chartTypeLabel
339
- }), /*#__PURE__*/_react["default"].createElement(_configUi.NumberTextFieldCustom, {
340
- className: classes.mediumTextField,
341
- label: "Max Value",
342
- value: range.max,
343
- min: rangeProps(model.chartType).min,
344
- max: rangeProps(model.chartType).max,
345
- variant: "outlined",
346
- onChange: function onChange(e, v) {
347
- return onRangeChanged('max', v, e);
348
- }
349
- })), !model.chartType.includes('Plot') && stepConfig, showInConfigPanel && /*#__PURE__*/_react["default"].createElement("div", {
350
- className: classes.dimensions
351
- }, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_Typography["default"], null, "Dimensions(px)")), /*#__PURE__*/_react["default"].createElement("div", {
352
- className: classes.columnView
353
- }, /*#__PURE__*/_react["default"].createElement(_configUi.NumberTextFieldCustom, {
354
- className: classes.textField,
355
- label: 'Width',
356
- value: size.width,
357
- min: widthConstraints.min,
358
- max: widthConstraints.max,
359
- step: widthConstraints.step,
360
- variant: 'outlined',
361
- onChange: function onChange(e, v) {
362
- return onSizeChanged('width', v);
363
- }
364
- }), /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
365
- className: classes.disabled
366
- }, "Min 50, Max 700")), /*#__PURE__*/_react["default"].createElement("div", {
367
- className: classes.columnView
368
- }, /*#__PURE__*/_react["default"].createElement(_configUi.NumberTextFieldCustom, {
369
- className: classes.textField,
370
- label: 'Height',
371
- value: size.height,
372
- min: heightConstraints.min,
373
- max: heightConstraints.max,
374
- step: heightConstraints.step,
375
- variant: 'outlined',
376
- onChange: function onChange(e, v) {
377
- return onSizeChanged('height', v);
378
- }
379
- }), /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
380
- className: classes.disabled
381
- }, "Min 400, Max 700")))), /*#__PURE__*/_react["default"].createElement(_configUi.AlertDialog, {
382
- open: alertDialog.open,
383
- title: alertDialog.title,
384
- text: alertDialog.text,
385
- onClose: alertDialog.onClose,
386
- onConfirm: alertDialog.onConfirm
387
- }));
388
- };
389
-
390
- ConfigureChartPanel.propTypes = {
391
- classes: _propTypes["default"].object,
392
- chartDimensions: _propTypes["default"].object,
393
- domain: _propTypes["default"].object,
394
- gridValues: _propTypes["default"].object,
395
- labelValues: _propTypes["default"].object,
396
- model: _propTypes["default"].object,
397
- onChange: _propTypes["default"].func,
398
- range: _propTypes["default"].object,
399
- chartDimension: _propTypes["default"].object,
400
- size: _propTypes["default"].object,
401
- studentNewCategoryDefaultLabel: _propTypes["default"].object,
402
- availableChartTypes: _propTypes["default"].object,
403
- chartTypeLabel: _propTypes["default"].string
404
- };
405
-
406
- var styles = function styles(theme) {
407
- return {
408
- wrapper: {
409
- width: '450px'
410
- },
411
- content: {
412
- display: 'flex',
413
- flexDirection: 'column',
414
- width: '100%',
415
- marginTop: theme.spacing.unit * 3
416
- },
417
- columnView: {
418
- display: 'flex',
419
- flexDirection: 'column',
420
- alignItems: 'center'
421
- },
422
- rowView: {
423
- display: 'flex',
424
- justifyContent: 'space-around',
425
- alignItems: 'center'
426
- },
427
- textField: {
428
- width: '130px',
429
- margin: "".concat(theme.spacing.unit, "px ").concat(theme.spacing.unit / 2, "px")
430
- },
431
- mediumTextField: {
432
- width: '160px',
433
- margin: "".concat(theme.spacing.unit, "px ").concat(theme.spacing.unit / 2, "px")
434
- },
435
- largeTextField: {
436
- width: '230px',
437
- margin: "".concat(theme.spacing.unit, "px ").concat(theme.spacing.unit / 2, "px")
438
- },
439
- text: {
440
- fontStyle: 'italic',
441
- margin: "".concat(theme.spacing.unit, "px 0")
442
- },
443
- dimensions: {
444
- display: 'flex',
445
- justifyContent: 'space-between',
446
- alignItems: 'center',
447
- margin: "".concat(theme.spacing.unit * 3, "px 0")
448
- },
449
- disabled: {
450
- color: _renderUi.color.disabled()
451
- }
452
- };
453
- };
454
-
455
- var _default = (0, _styles.withStyles)(styles)(ConfigureChartPanel);
456
-
457
- exports["default"] = _default;
458
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jaGFydC1zZXR1cC5qc3giXSwibmFtZXMiOlsicmVzZXRWYWx1ZXMiLCJkYXRhIiwidXBkYXRlTW9kZWwiLCJyYW5nZSIsIm9uQ2hhbmdlIiwibW9kZWwiLCJmb3JFYWNoIiwiZCIsImRfdmFsdWVfc2NhbGVkIiwiTWF0aCIsInJvdW5kIiwidmFsdWUiLCJyYW5nZV9zdGVwX3NjYWxlZCIsInN0ZXAiLCJyZW1haW5kZXJfc2NhbGVkIiwicmVtYWluZGVyIiwibWF4IiwiQ29uZmlndXJlQ2hhcnRQYW5lbCIsInByb3BzIiwiY2xhc3NlcyIsImNoYXJ0RGltZW5zaW9ucyIsImdyaWRWYWx1ZXMiLCJsYWJlbFZhbHVlcyIsInN0dWRlbnROZXdDYXRlZ29yeURlZmF1bHRMYWJlbCIsImF2YWlsYWJsZUNoYXJ0VHlwZXMiLCJjaGFydFR5cGVMYWJlbCIsIm9wZW4iLCJ0aXRsZSIsInRleHQiLCJvbkNsb3NlIiwib25Db25maXJtIiwiYWxlcnREaWFsb2ciLCJzZXRBbGVydERpYWxvZyIsInNldE9wZW4iLCJyYW5nZUtleSIsInNldFJhbmdlS2V5IiwicmVzZXRWYWx1ZSIsInNldFJlc2V0VmFsdWUiLCJjb3JyZWN0QW5zd2VyIiwiY2hhbmdlSW50ZXJhY3RpdmVFbmFibGVkIiwiY2hhbmdlRWRpdGFibGVFbmFibGVkIiwic2l6ZSIsImdyYXBoIiwic2hvd0luQ29uZmlnUGFuZWwiLCJ3aWR0aCIsImhlaWdodCIsIndpZHRoQ29uc3RyYWludHMiLCJtaW4iLCJoZWlnaHRDb25zdHJhaW50cyIsImdyaWRPcHRpb25zIiwiY3VzdG9tVmFsdWVzIiwibGFiZWxPcHRpb25zIiwic3RlcENvbmZpZyIsInJvd1ZpZXciLCJtZWRpdW1UZXh0RmllbGQiLCJlIiwidiIsIm9uUmFuZ2VDaGFuZ2VkIiwibGFiZWxTdGVwIiwiaGFuZGxlQWxlcnREaWFsb2ciLCJvcGVuU3RhdHVzIiwiY2FsbGJhY2siLCJwcmV2U3RhdGUiLCJzZXRQcm9wZXJ0aWVzVG9GYWxzZSIsInByb3BlcnR5IiwibWFwIiwib2JqIiwiaGFzT3duUHJvcGVydHkiLCJyZW1vdmVPdXRPZlJhbmdlVmFsdWVzIiwic2V0Q2F0ZWdvcnlEZWZhdWx0TGFiZWwiLCJzdHVkZW50Q2F0ZWdvcnlEZWZhdWx0TGFiZWwiLCJsYWJlbCIsInJhbmdlUHJvcHMiLCJjaGFydFR5cGUiLCJpbmNsdWRlcyIsIm9uU2l6ZUNoYW5nZWQiLCJrZXkiLCJpc091dE9mUmFuZ2UiLCJmaW5kIiwiZmxvb3IiLCJvdXRPZlJhbmdlIiwiSlNPTiIsInN0cmluZ2lmeSIsImlzVmFsaWRQbG90IiwiZ2V0UGxvdENvbmZpZ3VyYXRpb24iLCJvbkNoYXJ0VHlwZUNoYW5nZSIsIndyYXBwZXIiLCJjb250ZW50IiwidGFyZ2V0IiwiZGltZW5zaW9ucyIsImNvbHVtblZpZXciLCJ0ZXh0RmllbGQiLCJkaXNhYmxlZCIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsIm9iamVjdCIsImRvbWFpbiIsImZ1bmMiLCJjaGFydERpbWVuc2lvbiIsInN0cmluZyIsInN0eWxlcyIsInRoZW1lIiwiZGlzcGxheSIsImZsZXhEaXJlY3Rpb24iLCJtYXJnaW5Ub3AiLCJzcGFjaW5nIiwidW5pdCIsImFsaWduSXRlbXMiLCJqdXN0aWZ5Q29udGVudCIsIm1hcmdpbiIsImxhcmdlVGV4dEZpZWxkIiwiZm9udFN0eWxlIiwiY29sb3IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7QUFHTyxJQUFNQSxXQUFXLEdBQUcsU0FBZEEsV0FBYyxDQUFDQyxJQUFELEVBQU9DLFdBQVAsRUFBb0JDLEtBQXBCLEVBQTJCQyxRQUEzQixFQUFxQ0MsS0FBckMsRUFBK0M7QUFDeEUsR0FBQ0osSUFBSSxJQUFJLEVBQVQsRUFBYUssT0FBYixDQUFxQixVQUFDQyxDQUFELEVBQU87QUFDMUIsUUFBTUMsY0FBYyxHQUFHQyxJQUFJLENBQUNDLEtBQUwsQ0FBV0gsQ0FBQyxDQUFD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LEtBQUssQ0FBQ0ksT0FBTixDQUFjQyxJQUFuQixnQkFBNkJMLEtBQUssQ0FBQ0ksT0FBTixDQUFjQyxJQUFkLEdBQXFCLENBQWxEO0FBRlMsS0F4QlE7QUE0QnpCSSxJQUFBQSxjQUFjLEVBQUU7QUFDZGxFLE1BQUFBLEtBQUssRUFBRSxPQURPO0FBRWRpRSxNQUFBQSxNQUFNLFlBQUtSLEtBQUssQ0FBQ0ksT0FBTixDQUFjQyxJQUFuQixnQkFBNkJMLEtBQUssQ0FBQ0ksT0FBTixDQUFjQyxJQUFkLEdBQXFCLENBQWxEO0FBRlEsS0E1QlM7QUFnQ3pCOUUsSUFBQUEsSUFBSSxFQUFFO0FBQ0ptRixNQUFBQSxTQUFTLEVBQUUsUUFEUDtBQUVKRixNQUFBQSxNQUFNLFlBQUtSLEtBQUssQ0FBQ0ksT0FBTixDQUFjQyxJQUFuQjtBQUZGLEtBaENtQjtBQW9DekJqQixJQUFBQSxVQUFVLEVBQUU7QUFDVmEsTUFBQUEsT0FBTyxFQUFFLE1BREM7QUFFVk0sTUFBQUEsY0FBYyxFQUFFLGVBRk47QUFHVkQsTUFBQUEsVUFBVSxFQUFFLFFBSEY7QUFJVkUsTUFBQUEsTUFBTSxZQUFLUixLQUFLLENBQUNJLE9BQU4sQ0FBY0MsSUFBZCxHQUFxQixDQUExQjtBQUpJLEtBcENhO0FBMEN6QmQsSUFBQUEsUUFBUSxFQUFFO0FBQ1JvQixNQUFBQSxLQUFLLEVBQUVBLGdCQUFNcEIsUUFBTjtBQURDO0FBMUNlLEdBQVo7QUFBQSxDQUFmOztlQStDZSx3QkFBV1EsTUFBWCxFQUFtQm5GLG1CQUFuQixDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgY29sb3IgfSBmcm9tICdAcGllLWxpYi9yZW5kZXItdWknO1xuaW1wb3J0IHsgd2l0aFN0eWxlcyB9IGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL3N0eWxlcyc7XG5pbXBvcnQgVHlwb2dyYXBoeSBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZS9UeXBvZ3JhcGh5JztcbmltcG9ydCBDaGFydFR5cGUgZnJvbSAnLi9jaGFydC10eXBlJztcbmltcG9ydCB7IE51bWJlclRleHRGaWVsZEN1c3RvbSB9IGZyb20gJ0BwaWUtbGliL2NvbmZpZy11aSc7XG5pbXBvcnQgeyBBbGVydERpYWxvZyB9IGZyb20gJ0BwaWUtbGliL2NvbmZpZy11aSc7XG5cbmV4cG9ydCBjb25zdCByZXNldFZhbHVlcyA9IChkYXRhLCB1cGRhdGVNb2RlbCwgcmFuZ2UsIG9uQ2hhbmdlLCBtb2RlbCkgPT4ge1xuICAoZGF0YSB8fCBbXSkuZm9yRWFjaCgoZCkgPT4ge1xuICAgIGNvbnN0IGRfdmFsdWVfc2NhbGVkID0gTWF0aC5yb3VuZChkLnZhbHVlICogMTApO1xuICAgIGNvbnN0IHJhbmdlX3N0ZXBfc2NhbGVkID0gTWF0aC5yb3VuZChyYW5nZS5zdGVwICogMTApO1xuICAgIGNvbnN0IHJlbWFpbmRlcl9zY2FsZWQgPSBkX3ZhbHVlX3NjYWxlZCAlIHJhbmdlX3N0ZXBfc2NhbGVkO1xuICAgIGNvbnN0IHJlbWFpbmRlciA9IHJlbWFpbmRlcl9zY2FsZWQgLyAxMDtcblxuICAgIGlmIChkLnZhbHVlID4gcmFuZ2UubWF4IHx8IHJlbWFpbmRlciAhPT0gMCkge1xuICAgICAgZC52YWx1ZSA9IDA7XG4gICAgfVxuICB9KTtcblxuICBpZiAodXBkYXRlTW9kZWwpIHtcbiAgICBvbkNoYW5nZSh7IC4uLm1vZGVsLCBkYXRhIH0pO1xuICB9XG59O1xuXG5jb25zdCBDb25maWd1cmVDaGFydFBhbmVsID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIG1vZGVsLFxuICAgIG9uQ2hhbmdlLFxuICAgIGNoYXJ0RGltZW5zaW9ucyxcbiAgICBncmlkVmFsdWVzID0ge30sXG4gICAgbGFiZWxWYWx1ZXMgPSB7fSxcbiAgICBzdHVkZW50TmV3Q2F0ZWdvcnlEZWZhdWx0TGFiZWwgPSB7fSxcbiAgICBhdmFpbGFibGVDaGFydFR5cGVzID0ge30sXG4gICAgY2hhcnRUeXBlTGFiZWwsXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgW2FsZXJ0RGlhbG9nLCBzZXRBbGVydERpYWxvZ10gPSB1c2VTdGF0ZSh7XG4gICAgb3BlbjogZmFsc2UsXG4gICAgdGl0bGU6ICcnLFxuICAgIHRleHQ6ICcnLFxuICAgIG9uQ2xvc2U6IG51bGwsXG4gICAgb25Db25maXJtOiBudWxsLFxuICB9KTtcbiAgY29uc3QgW29wZW4sIHNldE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbcmFuZ2VLZXksIHNldFJhbmdlS2V5XSA9IHVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW3Jlc2V0VmFsdWUsIHNldFJlc2V0VmFsdWVdID0gdXNlU3RhdGUoMCk7XG5cbiAgY29uc3QgeyByYW5nZSA9IHt9LCBjb3JyZWN0QW5zd2VyLCBjaGFuZ2VJbnRlcmFjdGl2ZUVuYWJsZWQsIGNoYW5nZUVkaXRhYmxlRW5hYmxlZCB9ID0gbW9kZWw7XG5cbiAgY29uc3Qgc2l6ZSA9IG1vZGVsLmdyYXBoO1xuICBjb25zdCB7IHNob3dJbkNvbmZpZ1BhbmVsLCB3aWR0aCwgaGVpZ2h0IH0gPSBjaGFydERpbWVuc2lvbnMgfHwge307XG5cbiAgY29uc3Qgd2lkdGhDb25zdHJhaW50cyA9IHtcbiAgICBtaW46IHdpZHRoPy5taW4gPyBNYXRoLm1heCg1MCwgd2lkdGgubWluKSA6IDUwLFxuICAgIG1heDogd2lkdGg/Lm1heCA/IE1hdGgubWluKDcwMCwgd2lkdGgubWF4KSA6IDcwMCxcbiAgICBzdGVwOiB3aWR0aD8uc3RlcCA+PSAxID8gTWF0aC5taW4oMjAwLCB3aWR0aC5zdGVwKSA6IDIwLFxuICB9O1xuICBjb25zdCBoZWlnaHRDb25zdHJhaW50cyA9IHtcbiAgICBtaW46IGhlaWdodD8ubWluID8gTWF0aC5tYXgoNDAwLCBoZWlnaHQubWluKSA6IDQwMCxcbiAgICBtYXg6IGhlaWdodD8ubWF4ID8gTWF0aC5taW4oNzAwLCBoZWlnaHQubWF4KSA6IDcwMCxcbiAgICBzdGVwOiBoZWlnaHQ/LnN0ZXAgPj0gMSA/IE1hdGgubWluKDIwMCwgaGVpZ2h0LnN0ZXApIDogMjAsXG4gIH07XG5cbiAgY29uc3QgZ3JpZE9wdGlvbnMgPSBncmlkVmFsdWVzICYmIGdyaWRWYWx1ZXMucmFuZ2UgPyB7IGN1c3RvbVZhbHVlczogZ3JpZFZhbHVlcy5yYW5nZSB9IDogeyBtaW46IDAsIG1heDogMTAwMDAgfTtcbiAgY29uc3QgbGFiZWxPcHRpb25zID0gbGFiZWxWYWx1ZXMgJiYgbGFiZWxWYWx1ZXMucmFuZ2UgPyB7IGN1c3RvbVZhbHVlczogbGFiZWxWYWx1ZXMucmFuZ2UgfSA6IHsgbWluOiAwLCBtYXg6IDEwMDAwIH07XG5cbiAgY29uc3Qgc3RlcENvbmZpZyA9IChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3Nlcy5yb3dWaWV3fT5cbiAgICAgIDxOdW1iZXJUZXh0RmllbGRDdXN0b21cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzLm1lZGl1bVRleHRGaWVsZH1cbiAgICAgICAgbGFiZWw9XCJHcmlkIEludGVydmFsXCJcbiAgICAgICAgdmFsdWU9e3JhbmdlLnN0ZXB9XG4gICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXG4gICAgICAgIG9uQ2hhbmdlPXsoZSwgdikgPT4gb25SYW5nZUNoYW5nZWQoJ3N0ZXAnLCB2LCBlKX1cbiAgICAgICAgey4uLmdyaWRPcHRpb25zfVxuICAgICAgLz5cbiAgICAgIDxOdW1iZXJUZXh0RmllbGRDdXN0b21cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzLm1lZGl1bVRleHRGaWVsZH1cbiAgICAgICAgbGFiZWw9eydMYWJlbCBJbnRlcnZhbCd9XG4gICAgICAgIHZhbHVlPXtyYW5nZS5sYWJlbFN0ZXB9XG4gICAgICAgIHZhcmlhbnQ9eydvdXRsaW5lZCd9XG4gICAgICAgIG9uQ2hhbmdlPXsoZSwgdikgPT4gb25SYW5nZUNoYW5nZWQoJ2xhYmVsU3RlcCcsIHYsIGUpfVxuICAgICAgICB7Li4ubGFiZWxPcHRpb25zfVxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKTtcblxuICBjb25zdCBoYW5kbGVBbGVydERpYWxvZyA9IChvcGVuU3RhdHVzLCBjYWxsYmFjaykgPT4ge1xuICAgIHNldEFsZXJ0RGlhbG9nKFxuICAgICAgKHByZXZTdGF0ZSkgPT4gKHtcbiAgICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgICBvcGVuOiBvcGVuU3RhdHVzLFxuICAgICAgfSksXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHNldE9wZW4ob3BlblN0YXR1cyk7XG4gIH07XG5cbiAgY29uc3Qgc2V0UHJvcGVydGllc1RvRmFsc2UgPSAoZGF0YSwgcHJvcGVydHkpID0+IHtcbiAgICByZXR1cm4gZGF0YS5tYXAoKG9iaikgPT4ge1xuICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcbiAgICAgICAgb2JqW3Byb3BlcnR5XSA9IHByb3BlcnR5ID09ICdpbnRlcmFjdGl2ZScgPyB0cnVlIDogZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IHJlbW92ZU91dE9mUmFuZ2VWYWx1ZXMgPSAodXBkYXRlTW9kZWwpID0+IHtcbiAgICBjb25zdCB7IGNvcnJlY3RBbnN3ZXIsIGRhdGEgfSA9IG1vZGVsO1xuXG4gICAgaWYgKGNoYW5nZUludGVyYWN0aXZlRW5hYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgIHNldFByb3BlcnRpZXNUb0ZhbHNlKGRhdGEsICdpbnRlcmFjdGl2ZScpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VFZGl0YWJsZUVuYWJsZWQgPT09IGZhbHNlKSB7XG4gICAgICBzZXRQcm9wZXJ0aWVzVG9GYWxzZShkYXRhLCAnZWRpdGFibGUnKTtcbiAgICB9XG5cbiAgICByZXNldFZhbHVlcyhkYXRhLCB1cGRhdGVNb2RlbCwgcmFuZ2UsIG9uQ2hhbmdlLCBtb2RlbCk7XG4gICAgcmVzZXRWYWx1ZXMoY29ycmVjdEFuc3dlci5kYXRhLCBmYWxzZSwgcmFuZ2UsIG9uQ2hhbmdlLCBtb2RlbCk7XG4gIH07XG5cbiAgY29uc3Qgc2V0Q2F0ZWdvcnlEZWZhdWx0TGFiZWwgPSAoKSA9PiB7XG4gICAgY29uc3Qgc3R1ZGVudENhdGVnb3J5RGVmYXVsdExhYmVsID0gc3R1ZGVudE5ld0NhdGVnb3J5RGVmYXVsdExhYmVsPy5sYWJlbDtcblxuICAgIG9uQ2hhbmdlKHsgLi4ubW9kZWwsIHN0dWRlbnRDYXRlZ29yeURlZmF1bHRMYWJlbCB9KTtcbiAgfTtcblxuICBjb25zdCByYW5nZVByb3BzID0gKGNoYXJ0VHlwZSkgPT4ge1xuICAgIHJldHVybiBjaGFydFR5cGUuaW5jbHVkZXMoJ1Bsb3QnKSA/IHsgbWluOiAzLCBtYXg6IDEwIH0gOiB7IG1pbjogMC4wNSwgbWF4OiAxMDAwMCB9O1xuICB9O1xuXG4gIGNvbnN0IG9uU2l6ZUNoYW5nZWQgPSAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IGdyYXBoID0geyAuLi5zaXplLCBba2V5XTogdmFsdWUgfTtcblxuICAgIG9uQ2hhbmdlKHsgLi4ubW9kZWwsIGdyYXBoIH0pO1xuICB9O1xuXG4gIGNvbnN0IGlzT3V0T2ZSYW5nZSA9IChkYXRhLCByYW5nZSkgPT5cbiAgICAoZGF0YSB8fCBbXSkuZmluZCgoZCkgPT4gZC52YWx1ZSA+IHJhbmdlLm1heCB8fCBkLnZhbHVlIC0gcmFuZ2Uuc3RlcCAqIE1hdGguZmxvb3IoZC52YWx1ZSAvIHJhbmdlLnN0ZXApICE9PSAwKTtcblxuICBjb25zdCBvblJhbmdlQ2hhbmdlZCA9IChrZXksIHZhbHVlLCBlKSA9PiB7XG4gICAgLy8gdXNlIHJlc2V0IHZhbHVlcyB0byByZXN0b3JlIHJhbmdlIHRvIGluaXRpYWwgdmFsdWVzXG4gICAgc2V0UmVzZXRWYWx1ZShyYW5nZVtrZXldKTtcbiAgICBzZXRSYW5nZUtleShrZXkpO1xuXG4gICAgcmFuZ2Vba2V5XSA9IHZhbHVlO1xuXG4gICAgaWYgKGtleSA9PT0gJ21heCcgfHwga2V5ID09PSAnc3RlcCcpIHtcbiAgICAgIC8vIGNoZWNrIGlmIGN1cnJlbnQgY2hhcnQgdmFsdWVzIGFyZSBpbnZhbGlkIGZvciBnaXZlbiByYW5nZSBzdGVwL21heFxuICAgICAgY29uc3Qgb3V0T2ZSYW5nZSA9IGlzT3V0T2ZSYW5nZShtb2RlbC5kYXRhLCByYW5nZSkgfHwgaXNPdXRPZlJhbmdlKG1vZGVsLmNvcnJlY3RBbnN3ZXIuZGF0YSwgcmFuZ2UpO1xuXG4gICAgICBpZiAob3V0T2ZSYW5nZSAmJiBKU09OLnN0cmluZ2lmeShlKSAhPT0gJ3t9Jykge1xuICAgICAgICBzZXRPcGVuKHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25DaGFuZ2UoeyAuLi5tb2RlbCwgcmFuZ2UgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9uQ2hhbmdlKHsgLi4ubW9kZWwsIHJhbmdlIH0pO1xuICAgIH1cbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJlbW92ZU91dE9mUmFuZ2VWYWx1ZXModHJ1ZSk7XG4gICAgc2V0Q2F0ZWdvcnlEZWZhdWx0TGFiZWwoKTtcbiAgfSwgW10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIHNldEFsZXJ0RGlhbG9nKHtcbiAgICAgICAgb3BlbjogdHJ1ZSxcbiAgICAgICAgdGl0bGU6ICdXYXJuaW5nJyxcbiAgICAgICAgdGV4dDogJ1RoaXMgY2hhbmdlIHdpbGwgcmVtb3ZlIHZhbHVlcyBkZWZpbmVkIGZvciBvbmUgb3IgbW9yZSBjYXRlZ29yaWVzJyxcbiAgICAgICAgb25Db25maXJtOiAoKSA9PiB7XG4gICAgICAgICAgcmVtb3ZlT3V0T2ZSYW5nZVZhbHVlcygpO1xuICAgICAgICAgIGhhbmRsZUFsZXJ0RGlhbG9nKGZhbHNlLCBvbkNoYW5nZSh7IC4uLm1vZGVsLCByYW5nZSwgY29ycmVjdEFuc3dlciB9KSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQ2xvc2U6ICgpID0+IHtcbiAgICAgICAgICByYW5nZVtyYW5nZUtleV0gPSByZXNldFZhbHVlO1xuICAgICAgICAgIGhhbmRsZUFsZXJ0RGlhbG9nKGZhbHNlKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW29wZW5dKTtcblxuICBjb25zdCBpc1ZhbGlkUGxvdCA9IHJhbmdlLnN0ZXAgPT09IDEgJiYgcmFuZ2UubGFiZWxTdGVwID09PSAxICYmIDMgPD0gcmFuZ2UubWF4ICYmIHJhbmdlLm1heCA8PSAxMDtcblxuICBjb25zdCBnZXRQbG90Q29uZmlndXJhdGlvbiA9ICgpID0+IHtcbiAgICByYW5nZVByb3BzLm1pbiA9IDM7XG4gICAgcmFuZ2VQcm9wcy5tYXggPSAxMDtcblxuICAgIHJhbmdlLm1heCA9IDEwO1xuICAgIHJhbmdlLnN0ZXAgPSAxO1xuICAgIHJhbmdlLmxhYmVsU3RlcCA9IDE7XG5cbiAgICBvbkNoYW5nZSh7IC4uLm1vZGVsLCByYW5nZSB9KTtcbiAgfTtcblxuICBjb25zdCBvbkNoYXJ0VHlwZUNoYW5nZSA9IChjaGFydFR5cGUpID0+IHtcbiAgICBpZiAoY2hhcnRUeXBlLmluY2x1ZGVzKCdQbG90JykpIHtcbiAgICAgIC8vIFRoZSBzZWxlY3RlZCBjaGFydCB0eXBlIGRvZXMgbm90IHN1cHBvcnQgdGhlIGN1cnJlbnQgY2hhcnQgY29uZmlndXJhdGlvblxuICAgICAgaWYgKCFpc1ZhbGlkUGxvdCkge1xuICAgICAgICBzZXRBbGVydERpYWxvZyh7XG4gICAgICAgICAgb3BlbjogdHJ1ZSxcbiAgICAgICAgICB0aXRsZTogJ1dhcm5pbmcnLFxuICAgICAgICAgIHRleHQ6ICdUaGUgc2VsZWN0ZWQgY2hhcnQgdHlwZSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjdXJyZW50IGNoYXJ0IGNvbmZpZ3VyYXRpb24uIFJlc2V0IGNoYXJ0IGNvbmZpZ3VyYXRpb24/JyxcbiAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtcbiAgICAgICAgICAgIGdldFBsb3RDb25maWd1cmF0aW9uKCk7XG4gICAgICAgICAgICByZW1vdmVPdXRPZlJhbmdlVmFsdWVzKCk7XG4gICAgICAgICAgICBoYW5kbGVBbGVydERpYWxvZyhmYWxzZSwgb25DaGFuZ2UoeyAuLi5tb2RlbCwgcmFuZ2UsIGNoYXJ0VHlwZSB9KSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkNsb3NlOiAoKSA9PiB7XG4gICAgICAgICAgICBoYW5kbGVBbGVydERpYWxvZyhmYWxzZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByYW5nZVByb3BzLm1pbiA9IDM7XG4gICAgICByYW5nZVByb3BzLm1heCA9IDEwO1xuXG4gICAgICBvbkNoYW5nZSh7IC4uLm1vZGVsLCBjaGFydFR5cGUgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvbkNoYW5nZSh7IC4uLm1vZGVsLCBjaGFydFR5cGUgfSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3Nlcy53cmFwcGVyfT5cbiAgICAgIDxUeXBvZ3JhcGh5IHZhcmlhbnQ9eydzdWJ0aXRsZTEnfT5Db25maWd1cmUgQ2hhcnQ8L1R5cG9ncmFwaHk+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3Nlcy5jb250ZW50fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzZXMucm93Vmlld30+XG4gICAgICAgICAgPENoYXJ0VHlwZVxuICAgICAgICAgICAgdmFsdWU9e21vZGVsLmNoYXJ0VHlwZX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gb25DaGFydFR5cGVDaGFuZ2UoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgYXZhaWxhYmxlQ2hhcnRUeXBlcz17YXZhaWxhYmxlQ2hhcnRUeXBlc31cbiAgICAgICAgICAgIGNoYXJ0VHlwZUxhYmVsPXtjaGFydFR5cGVMYWJlbH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxOdW1iZXJUZXh0RmllbGRDdXN0b21cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlcy5tZWRpdW1UZXh0RmllbGR9XG4gICAgICAgICAgICBsYWJlbD1cIk1heCBWYWx1ZVwiXG4gICAgICAgICAgICB2YWx1ZT17cmFuZ2UubWF4fVxuICAgICAgICAgICAgbWluPXtyYW5nZVByb3BzKG1vZGVsLmNoYXJ0VHlwZSkubWlufVxuICAgICAgICAgICAgbWF4PXtyYW5nZVByb3BzKG1vZGVsLmNoYXJ0VHlwZSkubWF4fVxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgdikgPT4gb25SYW5nZUNoYW5nZWQoJ21heCcsIHYsIGUpfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7IW1vZGVsLmNoYXJ0VHlwZS5pbmNsdWRlcygnUGxvdCcpICYmIHN0ZXBDb25maWd9XG5cbiAgICAgICAge3Nob3dJbkNvbmZpZ1BhbmVsICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3Nlcy5kaW1lbnNpb25zfT5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxUeXBvZ3JhcGh5PkRpbWVuc2lvbnMocHgpPC9UeXBvZ3JhcGh5PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2VzLmNvbHVtblZpZXd9PlxuICAgICAgICAgICAgICA8TnVtYmVyVGV4dEZpZWxkQ3VzdG9tXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzLnRleHRGaWVsZH1cbiAgICAgICAgICAgICAgICBsYWJlbD17J1dpZHRoJ31cbiAgICAgICAgICAgICAgICB2YWx1ZT17c2l6ZS53aWR0aH1cbiAgICAgICAgICAgICAgICBtaW49e3dpZHRoQ29uc3RyYWludHMubWlufVxuICAgICAgICAgICAgICAgIG1heD17d2lkdGhDb25zdHJhaW50cy5tYXh9XG4gICAgICAgICAgICAgICAgc3RlcD17d2lkdGhDb25zdHJhaW50cy5zdGVwfVxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9eydvdXRsaW5lZCd9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlLCB2KSA9PiBvblNpemVDaGFuZ2VkKCd3aWR0aCcsIHYpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8VHlwb2dyYXBoeSBjbGFzc05hbWU9e2NsYXNzZXMuZGlzYWJsZWR9Pk1pbiA1MCwgTWF4IDcwMDwvVHlwb2dyYXBoeT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3Nlcy5jb2x1bW5WaWV3fT5cbiAgICAgICAgICAgICAgPE51bWJlclRleHRGaWVsZEN1c3RvbVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlcy50ZXh0RmllbGR9XG4gICAgICAgICAgICAgICAgbGFiZWw9eydIZWlnaHQnfVxuICAgICAgICAgICAgICAgIHZhbHVlPXtzaXplLmhlaWdodH1cbiAgICAgICAgICAgICAgICBtaW49e2hlaWdodENvbnN0cmFpbnRzLm1pbn1cbiAgICAgICAgICAgICAgICBtYXg9e2hlaWdodENvbnN0cmFpbnRzLm1heH1cbiAgICAgICAgICAgICAgICBzdGVwPXtoZWlnaHRDb25zdHJhaW50cy5zdGVwfVxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9eydvdXRsaW5lZCd9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlLCB2KSA9PiBvblNpemVDaGFuZ2VkKCdoZWlnaHQnLCB2KX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgY2xhc3NOYW1lPXtjbGFzc2VzLmRpc2FibGVkfT5NaW4gNDAwLCBNYXggNzAwPC9UeXBvZ3JhcGh5PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPEFsZXJ0RGlhbG9nXG4gICAgICAgIG9wZW49e2FsZXJ0RGlhbG9nLm9wZW59XG4gICAgICAgIHRpdGxlPXthbGVydERpYWxvZy50aXRsZX1cbiAgICAgICAgdGV4dD17YWxlcnREaWFsb2cudGV4dH1cbiAgICAgICAgb25DbG9zZT17YWxlcnREaWFsb2cub25DbG9zZX1cbiAgICAgICAgb25Db25maXJtPXthbGVydERpYWxvZy5vbkNvbmZpcm19XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuQ29uZmlndXJlQ2hhcnRQYW5lbC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIGNoYXJ0RGltZW5zaW9uczogUHJvcFR5cGVzLm9iamVjdCxcbiAgZG9tYWluOiBQcm9wVHlwZXMub2JqZWN0LFxuICBncmlkVmFsdWVzOiBQcm9wVHlwZXMub2JqZWN0LFxuICBsYWJlbFZhbHVlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgbW9kZWw6IFByb3BUeXBlcy5vYmplY3QsXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgcmFuZ2U6IFByb3BUeXBlcy5vYmplY3QsXG4gIGNoYXJ0RGltZW5zaW9uOiBQcm9wVHlwZXMub2JqZWN0LFxuICBzaXplOiBQcm9wVHlwZXMub2JqZWN0LFxuICBzdHVkZW50TmV3Q2F0ZWdvcnlEZWZhdWx0TGFiZWw6IFByb3BUeXBlcy5vYmplY3QsXG4gIGF2YWlsYWJsZUNoYXJ0VHlwZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIGNoYXJ0VHlwZUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxufTtcblxuY29uc3Qgc3R5bGVzID0gKHRoZW1lKSA9PiAoe1xuICB3cmFwcGVyOiB7XG4gICAgd2lkdGg6ICc0NTBweCcsXG4gIH0sXG4gIGNvbnRlbnQ6IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBtYXJnaW5Ub3A6IHRoZW1lLnNwYWNpbmcudW5pdCAqIDMsXG4gIH0sXG4gIGNvbHVtblZpZXc6IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIH0sXG4gIHJvd1ZpZXc6IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1hcm91bmQnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICB9LFxuICB0ZXh0RmllbGQ6IHtcbiAgICB3aWR0aDogJzEzMHB4JyxcbiAgICBtYXJnaW46IGAke3RoZW1lLnNwYWNpbmcudW5pdH1weCAke3RoZW1lLnNwYWNpbmcudW5pdCAvIDJ9cHhgLFxuICB9LFxuICBtZWRpdW1UZXh0RmllbGQ6IHtcbiAgICB3aWR0aDogJzE2MHB4JyxcbiAgICBtYXJnaW46IGAke3RoZW1lLnNwYWNpbmcudW5pdH1weCAke3RoZW1lLnNwYWNpbmcudW5pdCAvIDJ9cHhgLFxuICB9LFxuICBsYXJnZVRleHRGaWVsZDoge1xuICAgIHdpZHRoOiAnMjMwcHgnLFxuICAgIG1hcmdpbjogYCR7dGhlbWUuc3BhY2luZy51bml0fXB4ICR7dGhlbWUuc3BhY2luZy51bml0IC8gMn1weGAsXG4gIH0sXG4gIHRleHQ6IHtcbiAgICBmb250U3R5bGU6ICdpdGFsaWMnLFxuICAgIG1hcmdpbjogYCR7dGhlbWUuc3BhY2luZy51bml0fXB4IDBgLFxuICB9LFxuICBkaW1lbnNpb25zOiB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgbWFyZ2luOiBgJHt0aGVtZS5zcGFjaW5nLnVuaXQgKiAzfXB4IDBgLFxuICB9LFxuICBkaXNhYmxlZDoge1xuICAgIGNvbG9yOiBjb2xvci5kaXNhYmxlZCgpLFxuICB9LFxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZXMoc3R5bGVzKShDb25maWd1cmVDaGFydFBhbmVsKTtcbiJdfQ==
package/lib/chart-type.js DELETED
@@ -1,71 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports["default"] = void 0;
9
-
10
- var _react = _interopRequireDefault(require("react"));
11
-
12
- var _styles = require("@material-ui/core/styles");
13
-
14
- var _MenuItem = _interopRequireDefault(require("@material-ui/core/MenuItem"));
15
-
16
- var _FormControl = _interopRequireDefault(require("@material-ui/core/FormControl"));
17
-
18
- var _InputLabel = _interopRequireDefault(require("@material-ui/core/InputLabel"));
19
-
20
- var _Select = _interopRequireDefault(require("@material-ui/core/Select"));
21
-
22
- var _OutlinedInput = _interopRequireDefault(require("@material-ui/core/OutlinedInput"));
23
-
24
- var ChartType = (0, _styles.withStyles)(function () {
25
- return {
26
- chartType: {
27
- width: '160px'
28
- },
29
- chartTypeLabel: {
30
- backgroundColor: 'transparent'
31
- }
32
- };
33
- })(function (_ref) {
34
- var onChange = _ref.onChange,
35
- value = _ref.value,
36
- classes = _ref.classes,
37
- availableChartTypes = _ref.availableChartTypes,
38
- chartTypeLabel = _ref.chartTypeLabel;
39
- return /*#__PURE__*/_react["default"].createElement("div", {
40
- className: classes.chartType
41
- }, /*#__PURE__*/_react["default"].createElement(_FormControl["default"], {
42
- variant: 'outlined',
43
- className: classes.chartType
44
- }, /*#__PURE__*/_react["default"].createElement(_InputLabel["default"], {
45
- id: "type-helper-label",
46
- className: classes.chartTypeLabel
47
- }, chartTypeLabel), /*#__PURE__*/_react["default"].createElement(_Select["default"], {
48
- labelId: "type-helper-label",
49
- value: value,
50
- onChange: onChange,
51
- input: /*#__PURE__*/_react["default"].createElement(_OutlinedInput["default"], {
52
- labelWidth: 75,
53
- name: "type"
54
- })
55
- }, (availableChartTypes === null || availableChartTypes === void 0 ? void 0 : availableChartTypes.histogram) && /*#__PURE__*/_react["default"].createElement(_MenuItem["default"], {
56
- value: 'histogram'
57
- }, availableChartTypes.histogram), (availableChartTypes === null || availableChartTypes === void 0 ? void 0 : availableChartTypes.bar) && /*#__PURE__*/_react["default"].createElement(_MenuItem["default"], {
58
- value: 'bar'
59
- }, availableChartTypes.bar), (availableChartTypes === null || availableChartTypes === void 0 ? void 0 : availableChartTypes.lineDot) && /*#__PURE__*/_react["default"].createElement(_MenuItem["default"], {
60
- value: 'lineDot'
61
- }, availableChartTypes.lineDot), (availableChartTypes === null || availableChartTypes === void 0 ? void 0 : availableChartTypes.lineCross) && /*#__PURE__*/_react["default"].createElement(_MenuItem["default"], {
62
- value: 'lineCross'
63
- }, availableChartTypes.lineCross), (availableChartTypes === null || availableChartTypes === void 0 ? void 0 : availableChartTypes.dotPlot) && /*#__PURE__*/_react["default"].createElement(_MenuItem["default"], {
64
- value: 'dotPlot'
65
- }, availableChartTypes.dotPlot), (availableChartTypes === null || availableChartTypes === void 0 ? void 0 : availableChartTypes.linePlot) && /*#__PURE__*/_react["default"].createElement(_MenuItem["default"], {
66
- value: 'linePlot'
67
- }, availableChartTypes.linePlot))));
68
- });
69
- var _default = ChartType;
70
- exports["default"] = _default;
71
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jaGFydC10eXBlLmpzIl0sIm5hbWVzIjpbIkNoYXJ0VHlwZSIsImNoYXJ0VHlwZSIsIndpZHRoIiwiY2hhcnRUeXBlTGFiZWwiLCJiYWNrZ3JvdW5kQ29sb3IiLCJvbkNoYW5nZSIsInZhbHVlIiwiY2xhc3NlcyIsImF2YWlsYWJsZUNoYXJ0VHlwZXMiLCJoaXN0b2dyYW0iLCJiYXIiLCJsaW5lRG90IiwibGluZUNyb3NzIiwiZG90UGxvdCIsImxpbmVQbG90Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxJQUFNQSxTQUFTLEdBQUcsd0JBQVc7QUFBQSxTQUFPO0FBQ2xDQyxJQUFBQSxTQUFTLEVBQUU7QUFDVEMsTUFBQUEsS0FBSyxFQUFFO0FBREUsS0FEdUI7QUFJbENDLElBQUFBLGNBQWMsRUFBRTtBQUNkQyxNQUFBQSxlQUFlLEVBQUU7QUFESDtBQUprQixHQUFQO0FBQUEsQ0FBWCxFQU9kO0FBQUEsTUFBR0MsUUFBSCxRQUFHQSxRQUFIO0FBQUEsTUFBYUMsS0FBYixRQUFhQSxLQUFiO0FBQUEsTUFBb0JDLE9BQXBCLFFBQW9CQSxPQUFwQjtBQUFBLE1BQTZCQyxtQkFBN0IsUUFBNkJBLG1CQUE3QjtBQUFBLE1BQWtETCxjQUFsRCxRQUFrREEsY0FBbEQ7QUFBQSxzQkFDRjtBQUFLLElBQUEsU0FBUyxFQUFFSSxPQUFPLENBQUNOO0FBQXhCLGtCQUNFLGdDQUFDLHVCQUFEO0FBQWEsSUFBQSxPQUFPLEVBQUUsVUFBdEI7QUFBa0MsSUFBQSxTQUFTLEVBQUVNLE9BQU8sQ0FBQ047QUFBckQsa0JBQ0UsZ0NBQUMsc0JBQUQ7QUFBWSxJQUFBLEVBQUUsRUFBQyxtQkFBZjtBQUFtQyxJQUFBLFNBQVMsRUFBRU0sT0FBTyxDQUFDSjtBQUF0RCxLQUNHQSxjQURILENBREYsZUFJRSxnQ0FBQyxrQkFBRDtBQUNFLElBQUEsT0FBTyxFQUFDLG1CQURWO0FBRUUsSUFBQSxLQUFLLEVBQUVHLEtBRlQ7QUFHRSxJQUFBLFFBQVEsRUFBRUQsUUFIWjtBQUlFLElBQUEsS0FBSyxlQUFFLGdDQUFDLHlCQUFEO0FBQWUsTUFBQSxVQUFVLEVBQUUsRUFBM0I7QUFBK0IsTUFBQSxJQUFJLEVBQUM7QUFBcEM7QUFKVCxLQU1HLENBQUFHLG1CQUFtQixTQUFuQixJQUFBQSxtQkFBbUIsV0FBbkIsWUFBQUEsbUJBQW1CLENBQUVDLFNBQXJCLGtCQUFrQyxnQ0FBQyxvQkFBRDtBQUFVLElBQUEsS0FBSyxFQUFFO0FBQWpCLEtBQStCRCxtQkFBbUIsQ0FBQ0MsU0FBbkQsQ0FOckMsRUFPRyxDQUFBRCxtQkFBbUIsU0FBbkIsSUFBQUEsbUJBQW1CLFdBQW5CLFlBQUFBLG1CQUFtQixDQUFFRSxHQUFyQixrQkFBNEIsZ0NBQUMsb0JBQUQ7QUFBVSxJQUFBLEtBQUssRUFBRTtBQUFqQixLQUF5QkYsbUJBQW1CLENBQUNFLEdBQTdDLENBUC9CLEVBUUcsQ0FBQUYsbUJBQW1CLFNBQW5CLElBQUFBLG1CQUFtQixXQUFuQixZQUFBQSxtQkFBbUIsQ0FBRUcsT0FBckIsa0JBQWdDLGdDQUFDLG9CQUFEO0FBQVUsSUFBQSxLQUFLLEVBQUU7QUFBakIsS0FBNkJILG1CQUFtQixDQUFDRyxPQUFqRCxDQVJuQyxFQVNHLENBQUFILG1CQUFtQixTQUFuQixJQUFBQSxtQkFBbUIsV0FBbkIsWUFBQUEsbUJBQW1CLENBQUVJLFNBQXJCLGtCQUFrQyxnQ0FBQyxvQkFBRDtBQUFVLElBQUEsS0FBSyxFQUFFO0FBQWpCLEtBQStCSixtQkFBbUIsQ0FBQ0ksU0FBbkQsQ0FUckMsRUFVRyxDQUFBSixtQkFBbUIsU0FBbkIsSUFBQUEsbUJBQW1CLFdBQW5CLFlBQUFBLG1CQUFtQixDQUFFSyxPQUFyQixrQkFBZ0MsZ0NBQUMsb0JBQUQ7QUFBVSxJQUFBLEtBQUssRUFBRTtBQUFqQixLQUE2QkwsbUJBQW1CLENBQUNLLE9BQWpELENBVm5DLEVBV0csQ0FBQUwsbUJBQW1CLFNBQW5CLElBQUFBLG1CQUFtQixXQUFuQixZQUFBQSxtQkFBbUIsQ0FBRU0sUUFBckIsa0JBQWlDLGdDQUFDLG9CQUFEO0FBQVUsSUFBQSxLQUFLLEVBQUU7QUFBakIsS0FBOEJOLG1CQUFtQixDQUFDTSxRQUFsRCxDQVhwQyxDQUpGLENBREYsQ0FERTtBQUFBLENBUGMsQ0FBbEI7ZUE4QmVkLFMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgd2l0aFN0eWxlcyB9IGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL3N0eWxlcyc7XG5pbXBvcnQgTWVudUl0ZW0gZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUvTWVudUl0ZW0nO1xuaW1wb3J0IEZvcm1Db250cm9sIGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL0Zvcm1Db250cm9sJztcbmltcG9ydCBJbnB1dExhYmVsIGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL0lucHV0TGFiZWwnO1xuaW1wb3J0IFNlbGVjdCBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZS9TZWxlY3QnO1xuaW1wb3J0IE91dGxpbmVkSW5wdXQgZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUvT3V0bGluZWRJbnB1dCc7XG5cbmNvbnN0IENoYXJ0VHlwZSA9IHdpdGhTdHlsZXMoKCkgPT4gKHtcbiAgY2hhcnRUeXBlOiB7XG4gICAgd2lkdGg6ICcxNjBweCcsXG4gIH0sXG4gIGNoYXJ0VHlwZUxhYmVsOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICB9LFxufSkpKCh7IG9uQ2hhbmdlLCB2YWx1ZSwgY2xhc3NlcywgYXZhaWxhYmxlQ2hhcnRUeXBlcywgY2hhcnRUeXBlTGFiZWwgfSkgPT4gKFxuICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3Nlcy5jaGFydFR5cGV9PlxuICAgIDxGb3JtQ29udHJvbCB2YXJpYW50PXsnb3V0bGluZWQnfSBjbGFzc05hbWU9e2NsYXNzZXMuY2hhcnRUeXBlfT5cbiAgICAgIDxJbnB1dExhYmVsIGlkPVwidHlwZS1oZWxwZXItbGFiZWxcIiBjbGFzc05hbWU9e2NsYXNzZXMuY2hhcnRUeXBlTGFiZWx9PlxuICAgICAgICB7Y2hhcnRUeXBlTGFiZWx9XG4gICAgICA8L0lucHV0TGFiZWw+XG4gICAgICA8U2VsZWN0XG4gICAgICAgIGxhYmVsSWQ9XCJ0eXBlLWhlbHBlci1sYWJlbFwiXG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICBpbnB1dD17PE91dGxpbmVkSW5wdXQgbGFiZWxXaWR0aD17NzV9IG5hbWU9XCJ0eXBlXCIgLz59XG4gICAgICA+XG4gICAgICAgIHthdmFpbGFibGVDaGFydFR5cGVzPy5oaXN0b2dyYW0gJiYgPE1lbnVJdGVtIHZhbHVlPXsnaGlzdG9ncmFtJ30+e2F2YWlsYWJsZUNoYXJ0VHlwZXMuaGlzdG9ncmFtfTwvTWVudUl0ZW0+fVxuICAgICAgICB7YXZhaWxhYmxlQ2hhcnRUeXBlcz8uYmFyICYmIDxNZW51SXRlbSB2YWx1ZT17J2Jhcid9PnthdmFpbGFibGVDaGFydFR5cGVzLmJhcn08L01lbnVJdGVtPn1cbiAgICAgICAge2F2YWlsYWJsZUNoYXJ0VHlwZXM/LmxpbmVEb3QgJiYgPE1lbnVJdGVtIHZhbHVlPXsnbGluZURvdCd9PnthdmFpbGFibGVDaGFydFR5cGVzLmxpbmVEb3R9PC9NZW51SXRlbT59XG4gICAgICAgIHthdmFpbGFibGVDaGFydFR5cGVzPy5saW5lQ3Jvc3MgJiYgPE1lbnVJdGVtIHZhbHVlPXsnbGluZUNyb3NzJ30+e2F2YWlsYWJsZUNoYXJ0VHlwZXMubGluZUNyb3NzfTwvTWVudUl0ZW0+fVxuICAgICAgICB7YXZhaWxhYmxlQ2hhcnRUeXBlcz8uZG90UGxvdCAmJiA8TWVudUl0ZW0gdmFsdWU9eydkb3RQbG90J30+e2F2YWlsYWJsZUNoYXJ0VHlwZXMuZG90UGxvdH08L01lbnVJdGVtPn1cbiAgICAgICAge2F2YWlsYWJsZUNoYXJ0VHlwZXM/LmxpbmVQbG90ICYmIDxNZW51SXRlbSB2YWx1ZT17J2xpbmVQbG90J30+e2F2YWlsYWJsZUNoYXJ0VHlwZXMubGluZVBsb3R9PC9NZW51SXRlbT59XG4gICAgICA8L1NlbGVjdD5cbiAgICA8L0Zvcm1Db250cm9sPlxuICA8L2Rpdj5cbikpO1xuXG5leHBvcnQgZGVmYXVsdCBDaGFydFR5cGU7XG4iXX0=
@@ -1,31 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports["default"] = void 0;
9
-
10
- var _bar = _interopRequireDefault(require("./bars/bar"));
11
-
12
- var _histogram = _interopRequireDefault(require("./bars/histogram"));
13
-
14
- var _lineDot = _interopRequireDefault(require("./line/line-dot"));
15
-
16
- var _lineCross = _interopRequireDefault(require("./line/line-cross"));
17
-
18
- var _dot = _interopRequireDefault(require("@pie-lib/plot/dot"));
19
-
20
- var _line = _interopRequireDefault(require("@pie-lib/plot/line"));
21
-
22
- var _default = {
23
- Bar: _bar["default"],
24
- Histogram: _histogram["default"],
25
- LineDot: _lineDot["default"],
26
- DotPlot: _dot["default"],
27
- LinePlot: _line["default"],
28
- LineCross: _lineCross["default"]
29
- };
30
- exports["default"] = _default;
31
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jaGFydC10eXBlcy5qcyJdLCJuYW1lcyI6WyJCYXIiLCJIaXN0b2dyYW0iLCJMaW5lRG90IiwiRG90UGxvdCIsIkxpbmVQbG90IiwiTGluZUNyb3NzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7ZUFFZTtBQUFFQSxFQUFBQSxHQUFHLEVBQUhBLGVBQUY7QUFBT0MsRUFBQUEsU0FBUyxFQUFUQSxxQkFBUDtBQUFrQkMsRUFBQUEsT0FBTyxFQUFQQSxtQkFBbEI7QUFBMkJDLEVBQUFBLE9BQU8sRUFBUEEsZUFBM0I7QUFBb0NDLEVBQUFBLFFBQVEsRUFBUkEsZ0JBQXBDO0FBQThDQyxFQUFBQSxTQUFTLEVBQVRBO0FBQTlDLEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQmFyIGZyb20gJy4vYmFycy9iYXInO1xuaW1wb3J0IEhpc3RvZ3JhbSBmcm9tICcuL2JhcnMvaGlzdG9ncmFtJztcbmltcG9ydCBMaW5lRG90IGZyb20gJy4vbGluZS9saW5lLWRvdCc7XG5pbXBvcnQgTGluZUNyb3NzIGZyb20gJy4vbGluZS9saW5lLWNyb3NzJztcbmltcG9ydCBEb3RQbG90IGZyb20gJ0BwaWUtbGliL3Bsb3QvZG90JztcbmltcG9ydCBMaW5lUGxvdCBmcm9tICdAcGllLWxpYi9wbG90L2xpbmUnO1xuXG5leHBvcnQgZGVmYXVsdCB7IEJhciwgSGlzdG9ncmFtLCBMaW5lRG90LCBEb3RQbG90LCBMaW5lUGxvdCwgTGluZUNyb3NzIH07XG4iXX0=