@pie-lib/graphing 2.16.0-beta.0 → 2.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/CHANGELOG.json +1 -1017
  2. package/CHANGELOG.md +104 -27
  3. package/package.json +13 -9
  4. package/src/axis/axes.jsx +1 -1
  5. package/src/coordinates-label.jsx +1 -1
  6. package/src/graph-with-controls.jsx +1 -1
  7. package/src/grid-setup.jsx +7 -10
  8. package/src/key-legend.jsx +131 -101
  9. package/src/labels.jsx +1 -1
  10. package/src/mark-label.jsx +1 -1
  11. package/src/toggle-bar.jsx +1 -1
  12. package/src/tools/circle/bg-circle.jsx +1 -1
  13. package/src/tools/circle/component.jsx +1 -1
  14. package/src/tools/polygon/line.jsx +1 -1
  15. package/src/tools/polygon/polygon.jsx +3 -3
  16. package/src/tools/shared/line/index.jsx +1 -1
  17. package/src/tools/shared/line/line-path.jsx +1 -1
  18. package/src/tools/shared/point/index.jsx +1 -1
  19. package/src/tools/shared/styles.js +1 -1
  20. package/src/undo-redo.jsx +1 -1
  21. package/lib/__tests__/graph-with-controls.test.js +0 -215
  22. package/lib/__tests__/graph.test.js +0 -290
  23. package/lib/__tests__/grid.test.js +0 -40
  24. package/lib/__tests__/labels.test.js +0 -59
  25. package/lib/__tests__/mark-label.test.js +0 -154
  26. package/lib/__tests__/toggle-bar.test.js +0 -54
  27. package/lib/__tests__/tool-menu.test.js +0 -43
  28. package/lib/__tests__/undo-redo.test.js +0 -42
  29. package/lib/__tests__/use-debounce.test.js +0 -28
  30. package/lib/__tests__/utils.js +0 -72
  31. package/lib/__tests__/utils.test.js +0 -133
  32. package/lib/axis/__tests__/arrow.test.js +0 -68
  33. package/lib/axis/__tests__/axes.test.js +0 -214
  34. package/lib/axis/arrow.js +0 -115
  35. package/lib/axis/axes.js +0 -415
  36. package/lib/axis/index.js +0 -26
  37. package/lib/bg.js +0 -139
  38. package/lib/container/actions.js +0 -24
  39. package/lib/container/index.js +0 -163
  40. package/lib/container/marks.js +0 -27
  41. package/lib/container/middleware.js +0 -25
  42. package/lib/container/reducer.js +0 -25
  43. package/lib/coordinates-label.js +0 -109
  44. package/lib/graph-with-controls.js +0 -359
  45. package/lib/graph.js +0 -371
  46. package/lib/grid-setup.js +0 -462
  47. package/lib/grid.js +0 -176
  48. package/lib/index.js +0 -59
  49. package/lib/key-legend.js +0 -246
  50. package/lib/label-svg-icon.js +0 -56
  51. package/lib/labels.js +0 -299
  52. package/lib/mark-label.js +0 -321
  53. package/lib/toggle-bar.js +0 -336
  54. package/lib/tool-menu.js +0 -112
  55. package/lib/tools/absolute/__tests__/component.test.js +0 -74
  56. package/lib/tools/absolute/component.js +0 -35
  57. package/lib/tools/absolute/index.js +0 -63
  58. package/lib/tools/circle/__tests__/bg-circle.test.js +0 -46
  59. package/lib/tools/circle/__tests__/component.test.js +0 -259
  60. package/lib/tools/circle/bg-circle.js +0 -173
  61. package/lib/tools/circle/component.js +0 -406
  62. package/lib/tools/circle/index.js +0 -51
  63. package/lib/tools/exponential/__tests__/component.test.js +0 -73
  64. package/lib/tools/exponential/component.js +0 -34
  65. package/lib/tools/exponential/index.js +0 -71
  66. package/lib/tools/index.js +0 -99
  67. package/lib/tools/line/__tests__/component.test.js +0 -56
  68. package/lib/tools/line/component.js +0 -103
  69. package/lib/tools/line/index.js +0 -16
  70. package/lib/tools/parabola/__tests__/component.test.js +0 -73
  71. package/lib/tools/parabola/component.js +0 -34
  72. package/lib/tools/parabola/index.js +0 -63
  73. package/lib/tools/point/__tests__/component.test.js +0 -97
  74. package/lib/tools/point/component.js +0 -186
  75. package/lib/tools/point/index.js +0 -32
  76. package/lib/tools/polygon/__tests__/component.test.js +0 -255
  77. package/lib/tools/polygon/__tests__/index.test.js +0 -95
  78. package/lib/tools/polygon/__tests__/line.test.js +0 -43
  79. package/lib/tools/polygon/__tests__/polygon.test.js +0 -73
  80. package/lib/tools/polygon/component.js +0 -518
  81. package/lib/tools/polygon/index.js +0 -106
  82. package/lib/tools/polygon/line.js +0 -157
  83. package/lib/tools/polygon/polygon.js +0 -165
  84. package/lib/tools/ray/__tests__/component.test.js +0 -48
  85. package/lib/tools/ray/component.js +0 -102
  86. package/lib/tools/ray/index.js +0 -16
  87. package/lib/tools/segment/__tests__/component.test.js +0 -48
  88. package/lib/tools/segment/component.js +0 -75
  89. package/lib/tools/segment/index.js +0 -16
  90. package/lib/tools/shared/__tests__/arrow-head.test.js +0 -62
  91. package/lib/tools/shared/arrow-head.js +0 -70
  92. package/lib/tools/shared/icons/CorrectSVG.js +0 -36
  93. package/lib/tools/shared/icons/IncorrectSVG.js +0 -36
  94. package/lib/tools/shared/icons/MissingSVG.js +0 -35
  95. package/lib/tools/shared/line/__tests__/index.test.js +0 -301
  96. package/lib/tools/shared/line/__tests__/line-path.test.js +0 -78
  97. package/lib/tools/shared/line/__tests__/with-root-edge.test.js +0 -122
  98. package/lib/tools/shared/line/index.js +0 -599
  99. package/lib/tools/shared/line/line-path.js +0 -151
  100. package/lib/tools/shared/line/with-root-edge.js +0 -155
  101. package/lib/tools/shared/point/__tests__/arrow-point.test.js +0 -137
  102. package/lib/tools/shared/point/__tests__/base-point.test.js +0 -134
  103. package/lib/tools/shared/point/arrow-point.js +0 -113
  104. package/lib/tools/shared/point/arrow.js +0 -96
  105. package/lib/tools/shared/point/base-point.js +0 -175
  106. package/lib/tools/shared/point/index.js +0 -97
  107. package/lib/tools/shared/styles.js +0 -58
  108. package/lib/tools/shared/types.js +0 -23
  109. package/lib/tools/sine/__tests__/component.test.js +0 -81
  110. package/lib/tools/sine/component.js +0 -51
  111. package/lib/tools/sine/index.js +0 -63
  112. package/lib/tools/vector/__tests__/component.test.js +0 -45
  113. package/lib/tools/vector/component.js +0 -88
  114. package/lib/tools/vector/index.js +0 -16
  115. package/lib/undo-redo.js +0 -123
  116. package/lib/use-debounce.js +0 -32
  117. package/lib/utils.js +0 -307
package/lib/grid-setup.js DELETED
@@ -1,462 +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 _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
-
12
- var _react = _interopRequireDefault(require("react"));
13
-
14
- var _propTypes = _interopRequireDefault(require("prop-types"));
15
-
16
- var _renderUi = require("@pie-lib/render-ui");
17
-
18
- var _styles = require("@material-ui/core/styles");
19
-
20
- var _ExpansionPanelSummary = _interopRequireDefault(require("@material-ui/core/ExpansionPanelSummary"));
21
-
22
- var _Typography = _interopRequireDefault(require("@material-ui/core/Typography"));
23
-
24
- var _ExpansionPanelDetails = _interopRequireDefault(require("@material-ui/core/ExpansionPanelDetails"));
25
-
26
- var _ExpansionPanel = _interopRequireDefault(require("@material-ui/core/ExpansionPanel"));
27
-
28
- var _ExpandMore = _interopRequireDefault(require("@material-ui/icons/ExpandMore"));
29
-
30
- var _configUi = require("@pie-lib/config-ui");
31
-
32
- var _editableHtml = _interopRequireDefault(require("@pie-lib/editable-html"));
33
-
34
- 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; }
35
-
36
- 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; }
37
-
38
- var GridConfig = function GridConfig(props) {
39
- var classes = props.classes,
40
- disabled = props.disabled,
41
- displayedFields = props.displayedFields,
42
- labelValue = props.labelValue,
43
- labelValues = props.labelValues,
44
- gridValue = props.gridValue,
45
- gridValues = props.gridValues,
46
- _onChange = props.onChange;
47
- var _displayedFields$labe = displayedFields.labelStep,
48
- labelStep = _displayedFields$labe === void 0 ? {} : _displayedFields$labe,
49
- _displayedFields$step = displayedFields.step,
50
- step = _displayedFields$step === void 0 ? {} : _displayedFields$step;
51
- return /*#__PURE__*/_react["default"].createElement("div", {
52
- className: classes.columnView
53
- }, step && step.enabled && /*#__PURE__*/_react["default"].createElement(_configUi.NumberTextFieldCustom, {
54
- className: classes.mediumTextField,
55
- label: step.label || '',
56
- value: gridValue,
57
- customValues: gridValues,
58
- variant: "outlined",
59
- disabled: disabled,
60
- onChange: function onChange(e, v) {
61
- return _onChange('step', v);
62
- }
63
- }), labelStep && labelStep.enabled && /*#__PURE__*/_react["default"].createElement(_configUi.NumberTextFieldCustom, {
64
- className: classes.mediumTextField,
65
- label: labelStep.label || '',
66
- value: labelValue,
67
- customValues: labelValues,
68
- variant: "outlined",
69
- disabled: disabled,
70
- onChange: function onChange(e, v) {
71
- return _onChange('labelStep', v);
72
- }
73
- }));
74
- };
75
-
76
- GridConfig.propTypes = {
77
- classes: _propTypes["default"].object,
78
- disabled: _propTypes["default"].bool,
79
- displayedFields: _propTypes["default"].object,
80
- labelValue: _propTypes["default"].number,
81
- labelValues: _propTypes["default"].array,
82
- gridValue: _propTypes["default"].number,
83
- gridValues: _propTypes["default"].array,
84
- onChange: _propTypes["default"].func
85
- };
86
-
87
- var AxisConfig = function AxisConfig(props) {
88
- var classes = props.classes,
89
- disabled = props.disabled,
90
- displayedFields = props.displayedFields,
91
- displayHeader = props.displayHeader,
92
- label = props.label,
93
- maxValue = props.maxValue,
94
- minValue = props.minValue,
95
- _onChange2 = props.onChange,
96
- type = props.type;
97
- var _displayedFields$axis = displayedFields.axisLabel,
98
- axisLabel = _displayedFields$axis === void 0 ? {} : _displayedFields$axis,
99
- _displayedFields$min = displayedFields.min,
100
- min = _displayedFields$min === void 0 ? {} : _displayedFields$min,
101
- _displayedFields$max = displayedFields.max,
102
- max = _displayedFields$max === void 0 ? {} : _displayedFields$max;
103
- var activePlugins = ['bold', 'italic', 'underline', 'strikethrough' // 'languageCharacters'
104
- ];
105
- return /*#__PURE__*/_react["default"].createElement("div", {
106
- className: classes.columnView
107
- }, displayHeader && /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
108
- variant: "subtitle2"
109
- }, /*#__PURE__*/_react["default"].createElement("i", null, type === 'domain' ? 'x' : 'y'), "-axis"), min && min.enabled && /*#__PURE__*/_react["default"].createElement(_configUi.NumberTextFieldCustom, {
110
- className: classes.mediumTextField,
111
- label: min.label || '',
112
- value: minValue,
113
- min: -10000,
114
- max: maxValue - 0.05,
115
- variant: "outlined",
116
- disabled: disabled,
117
- onChange: function onChange(e, v) {
118
- return _onChange2('min', v);
119
- }
120
- }), max && max.enabled && /*#__PURE__*/_react["default"].createElement(_configUi.NumberTextFieldCustom, {
121
- className: classes.mediumTextField,
122
- label: max.label || '',
123
- value: maxValue,
124
- min: minValue + 0.05,
125
- max: 10000,
126
- variant: "outlined",
127
- disabled: disabled,
128
- onChange: function onChange(e, v) {
129
- return _onChange2('max', v);
130
- }
131
- }), axisLabel && axisLabel.enabled && /*#__PURE__*/_react["default"].createElement(_renderUi.InputContainer, {
132
- label: axisLabel.label || '',
133
- className: classes.mediumTextField
134
- }, /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
135
- className: classes.axisLabel,
136
- onChange: function onChange(value) {
137
- return _onChange2('axisLabel', value);
138
- },
139
- markup: label || '',
140
- charactersLimit: 5,
141
- activePlugins: activePlugins
142
- })));
143
- };
144
-
145
- AxisConfig.propTypes = {
146
- classes: _propTypes["default"].object,
147
- disabled: _propTypes["default"].bool,
148
- displayedFields: _propTypes["default"].object,
149
- displayHeader: _propTypes["default"].bool,
150
- label: _propTypes["default"].string,
151
- maxValue: _propTypes["default"].number,
152
- minValue: _propTypes["default"].number,
153
- type: _propTypes["default"].string,
154
- onChange: _propTypes["default"].func
155
- };
156
-
157
- var GridSetup = function GridSetup(props) {
158
- var classes = props.classes,
159
- domain = props.domain,
160
- _props$displayedField = props.displayedFields,
161
- displayedFields = _props$displayedField === void 0 ? {} : _props$displayedField,
162
- _props$gridValues = props.gridValues,
163
- gridValues = _props$gridValues === void 0 ? {} : _props$gridValues,
164
- includeAxes = props.includeAxes,
165
- _props$labelValues = props.labelValues,
166
- labelValues = _props$labelValues === void 0 ? {} : _props$labelValues,
167
- onChange = props.onChange,
168
- onChangeView = props.onChangeView,
169
- range = props.range,
170
- size = props.size,
171
- sizeConstraints = props.sizeConstraints,
172
- standardGrid = props.standardGrid;
173
- var gridProps = {
174
- min: 2,
175
- max: 41
176
- };
177
-
178
- var _ref = displayedFields || {},
179
- _ref$axisLabel = _ref.axisLabel,
180
- axisLabel = _ref$axisLabel === void 0 ? {} : _ref$axisLabel,
181
- dimensionsEnabled = _ref.dimensionsEnabled,
182
- includeAxesEnabled = _ref.includeAxesEnabled,
183
- _ref$labelStep = _ref.labelStep,
184
- labelStep = _ref$labelStep === void 0 ? {} : _ref$labelStep,
185
- _ref$min = _ref.min,
186
- min = _ref$min === void 0 ? {} : _ref$min,
187
- _ref$max = _ref.max,
188
- max = _ref$max === void 0 ? {} : _ref$max,
189
- standardGridEnabled = _ref.standardGridEnabled,
190
- _ref$step = _ref.step,
191
- step = _ref$step === void 0 ? {} : _ref$step;
192
-
193
- var displayAxisType = min.enabled || max.enabled || axisLabel.enabled || step.enabled || labelStep.enabled;
194
- var gridConfigFields = {
195
- step: step,
196
- labelStep: labelStep
197
- };
198
- var axisConfigFields = {
199
- min: min,
200
- max: max,
201
- axisLabel: axisLabel
202
- };
203
-
204
- var onIncludeAxes = function onIncludeAxes(includeAxes) {
205
- var noAxesConfig = function noAxesConfig(type) {
206
- var axis = type === 'domain' ? domain : range;
207
- return {
208
- min: 1,
209
- max: axis.max < gridProps.min || axis.max > gridProps.max ? 16 : axis.max,
210
- step: 1,
211
- labelStep: 0
212
- };
213
- };
214
-
215
- var updatedRange = _objectSpread(_objectSpread({}, range), includeAxes ? {
216
- labelStep: 1
217
- } : noAxesConfig('range'));
218
-
219
- var updatedDomain = _objectSpread(_objectSpread({}, domain), includeAxes ? {
220
- labelStep: 1
221
- } : noAxesConfig('domain'));
222
-
223
- onChange({
224
- includeAxes: includeAxes,
225
- range: updatedRange,
226
- domain: updatedDomain
227
- });
228
- };
229
-
230
- var onStandardGridChanged = function onStandardGridChanged(value) {
231
- onChange({
232
- standardGrid: value,
233
- range: _objectSpread(_objectSpread({}, domain), {}, {
234
- axisLabel: range.axisLabel
235
- }),
236
- graph: _objectSpread(_objectSpread({}, size), {}, {
237
- height: size.width
238
- })
239
- });
240
- };
241
-
242
- var onSizeChanged = function onSizeChanged(key, value) {
243
- var graph = _objectSpread(_objectSpread({}, size), {}, (0, _defineProperty2["default"])({}, key, value));
244
-
245
- if (standardGrid) {
246
- graph.height = value;
247
- }
248
-
249
- onChange({
250
- graph: graph
251
- });
252
- };
253
-
254
- var onDomainChanged = function onDomainChanged(key, value) {
255
- domain[key] = value;
256
-
257
- if (standardGrid && key !== 'axisLabel') {
258
- range[key] = value;
259
- }
260
-
261
- onChange({
262
- domain: domain,
263
- range: range
264
- });
265
- };
266
-
267
- var onRangeChanged = function onRangeChanged(key, value) {
268
- range[key] = value;
269
- onChange({
270
- range: range
271
- });
272
- };
273
-
274
- var axesConfig = /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", {
275
- className: classes.rowView
276
- }, /*#__PURE__*/_react["default"].createElement(AxisConfig, {
277
- classes: classes,
278
- displayedFields: axisConfigFields,
279
- displayHeader: displayAxisType,
280
- type: "domain",
281
- minValue: domain.min,
282
- maxValue: domain.max,
283
- label: domain.axisLabel,
284
- includeAxes: includeAxes,
285
- onChange: onDomainChanged
286
- }), /*#__PURE__*/_react["default"].createElement(AxisConfig, {
287
- classes: classes,
288
- displayedFields: axisConfigFields,
289
- displayHeader: displayAxisType,
290
- type: "range",
291
- minValue: range.min,
292
- maxValue: range.max,
293
- label: range.axisLabel,
294
- disabled: standardGrid,
295
- includeAxes: includeAxes,
296
- onChange: onRangeChanged
297
- })), (min.enabled || max.enabled) && /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
298
- className: classes.text
299
- }, "If you want the axis to be visible, use a zero or negative Min Value, and a positive Max Value"), (step.enabled || labelStep.enabled) && /*#__PURE__*/_react["default"].createElement("div", {
300
- className: classes.rowView
301
- }, /*#__PURE__*/_react["default"].createElement(GridConfig, {
302
- classes: classes,
303
- displayedFields: gridConfigFields,
304
- gridValue: domain.step,
305
- labelValue: domain.labelStep,
306
- gridValues: gridValues.domain || [],
307
- labelValues: labelValues.domain || [],
308
- onChange: onDomainChanged
309
- }), /*#__PURE__*/_react["default"].createElement(GridConfig, {
310
- classes: classes,
311
- disabled: standardGrid,
312
- displayedFields: gridConfigFields,
313
- gridValue: range.step,
314
- labelValue: range.labelStep,
315
- gridValues: gridValues.range || [],
316
- labelValues: labelValues.range || [],
317
- onChange: onRangeChanged
318
- })), labelStep.enabled && /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
319
- className: classes.text
320
- }, "For unnumbered gridlines, enter a label interval of 0"));
321
-
322
- var gridlinesConfig = max.enabled ? /*#__PURE__*/_react["default"].createElement("div", {
323
- className: classes.columnView
324
- }, /*#__PURE__*/_react["default"].createElement(_configUi.NumberTextFieldCustom, {
325
- className: classes.largeTextField,
326
- label: "Number of Vertical Gridlines",
327
- value: domain.max,
328
- min: !includeAxes && gridProps.min,
329
- max: !includeAxes && gridProps.max,
330
- variant: "outlined",
331
- onChange: function onChange(e, v) {
332
- return onDomainChanged('max', v);
333
- }
334
- }), /*#__PURE__*/_react["default"].createElement(_configUi.NumberTextFieldCustom, {
335
- className: classes.largeTextField,
336
- label: "Number of Horizontal Gridlines",
337
- value: range.max,
338
- min: !includeAxes && gridProps.min,
339
- max: !includeAxes && gridProps.max,
340
- variant: "outlined",
341
- disabled: standardGrid,
342
- onChange: function onChange(e, v) {
343
- return onRangeChanged('max', v);
344
- }
345
- })) : null;
346
- return /*#__PURE__*/_react["default"].createElement("div", {
347
- className: classes.wrapper
348
- }, /*#__PURE__*/_react["default"].createElement(_ExpansionPanel["default"], {
349
- onChange: onChangeView
350
- }, /*#__PURE__*/_react["default"].createElement(_ExpansionPanelSummary["default"], {
351
- expandIcon: /*#__PURE__*/_react["default"].createElement(_ExpandMore["default"], null)
352
- }, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
353
- variant: "subtitle1"
354
- }, "Customize Grid Setup")), /*#__PURE__*/_react["default"].createElement(_ExpansionPanelDetails["default"], null, /*#__PURE__*/_react["default"].createElement("div", {
355
- className: classes.content
356
- }, includeAxesEnabled && /*#__PURE__*/_react["default"].createElement(_configUi.Toggle, {
357
- label: "Include axes and labels?",
358
- toggle: onIncludeAxes,
359
- checked: includeAxes
360
- }), standardGridEnabled && /*#__PURE__*/_react["default"].createElement(_configUi.Toggle, {
361
- label: "Constrain to standard coordinate grid?",
362
- toggle: onStandardGridChanged,
363
- checked: standardGrid
364
- }), includeAxes ? axesConfig : gridlinesConfig, dimensionsEnabled && /*#__PURE__*/_react["default"].createElement("div", {
365
- className: classes.dimensions
366
- }, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_Typography["default"], null, "Dimensions(px)"), /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
367
- className: classes.disabled
368
- }, "Min ", sizeConstraints.min, ", Max ", sizeConstraints.max)), /*#__PURE__*/_react["default"].createElement(_configUi.NumberTextFieldCustom, {
369
- className: classes.textField,
370
- label: "Width",
371
- value: size.width,
372
- min: sizeConstraints.min,
373
- max: sizeConstraints.max,
374
- step: sizeConstraints.step,
375
- variant: "outlined",
376
- onChange: function onChange(e, v) {
377
- return onSizeChanged('width', v);
378
- }
379
- }), /*#__PURE__*/_react["default"].createElement(_configUi.NumberTextFieldCustom, {
380
- className: classes.textField,
381
- label: "Height",
382
- value: size.height,
383
- min: sizeConstraints.min,
384
- max: sizeConstraints.max,
385
- step: sizeConstraints.step,
386
- variant: "outlined",
387
- disabled: standardGrid,
388
- onChange: function onChange(e, v) {
389
- return onSizeChanged('height', v);
390
- }
391
- }))))));
392
- };
393
-
394
- GridSetup.propTypes = {
395
- classes: _propTypes["default"].object,
396
- domain: _propTypes["default"].object,
397
- displayedFields: _propTypes["default"].object,
398
- gridValues: _propTypes["default"].object,
399
- includeAxes: _propTypes["default"].bool,
400
- labelValues: _propTypes["default"].object,
401
- onChange: _propTypes["default"].func,
402
- onChangeView: _propTypes["default"].func,
403
- range: _propTypes["default"].object,
404
- size: _propTypes["default"].object,
405
- sizeConstraints: _propTypes["default"].object,
406
- standardGrid: _propTypes["default"].bool
407
- };
408
-
409
- var styles = function styles(theme) {
410
- return {
411
- wrapper: {
412
- width: '450px'
413
- },
414
- content: {
415
- display: 'flex',
416
- flexDirection: 'column',
417
- width: '100%'
418
- },
419
- columnView: {
420
- display: 'flex',
421
- flexDirection: 'column',
422
- alignItems: 'center'
423
- },
424
- rowView: {
425
- display: 'flex',
426
- justifyContent: 'space-around',
427
- alignItems: 'center'
428
- },
429
- textField: {
430
- width: '130px',
431
- margin: "".concat(theme.spacing.unit, "px ").concat(theme.spacing.unit / 2, "px")
432
- },
433
- mediumTextField: {
434
- width: '160px',
435
- margin: "".concat(theme.spacing.unit, "px ").concat(theme.spacing.unit / 2, "px")
436
- },
437
- largeTextField: {
438
- width: '230px',
439
- margin: "".concat(theme.spacing.unit, "px ").concat(theme.spacing.unit / 2, "px")
440
- },
441
- text: {
442
- fontStyle: 'italic',
443
- margin: "".concat(theme.spacing.unit, "px 0")
444
- },
445
- dimensions: {
446
- display: 'flex',
447
- justifyContent: 'space-between',
448
- alignItems: 'center'
449
- },
450
- disabled: {
451
- color: _renderUi.color.disabled()
452
- },
453
- axisLabel: {
454
- paddingTop: theme.spacing.unit * 2
455
- }
456
- };
457
- };
458
-
459
- var _default = (0, _styles.withStyles)(styles)(GridSetup);
460
-
461
- exports["default"] = _default;
462
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9ncmlkLXNldHVwLmpzeCJdLCJuYW1lcyI6WyJHcmlkQ29uZmlnIiwicHJvcHMiLCJjbGFzc2VzIiwiZGlzYWJsZWQiLCJkaXNwbGF5ZWRGaWVsZHMiLCJsYWJlbFZhbHVlIiwibGFiZWxWYWx1ZXMiLCJncmlkVmFsdWUiLCJncmlkVmFsdWVzIiwib25DaGFuZ2UiLCJsYWJlbFN0ZXAiLCJzdGVwIiwiY29sdW1uVmlldyIsImVuYWJsZWQiLCJtZWRpdW1UZXh0RmllbGQiLCJsYWJlbCIsImUiLCJ2IiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwib2JqZWN0IiwiYm9vbCIsIm51bWJlciIsImFycmF5IiwiZnVuYyIsIkF4aXNDb25maWciLCJkaXNwbGF5SGVhZGVyIiwibWF4VmFsdWUiLCJtaW5WYWx1ZSIsInR5cGUiLCJheGlzTGFiZWwiLCJtaW4iLCJtYXgiLCJhY3RpdmVQbHVnaW5zIiwidmFsdWUiLCJzdHJpbmciLCJHcmlkU2V0dXAiLCJkb21haW4iLCJpbmNsdWRlQXhlcyIsIm9uQ2hhbmdlVmlldyIsInJhbmdlIiwic2l6ZSIsInNpemVDb25zdHJhaW50cyIsInN0YW5kYXJkR3JpZCIsImdyaWRQcm9wcyIsImRpbWVuc2lvbnNFbmFibGVkIiwiaW5jbHVkZUF4ZXNFbmFibGVkIiwic3RhbmRhcmRHcmlkRW5hYmxlZCIsImRpc3BsYXlBeGlzVHlwZSIsImdyaWRDb25maWdGaWVsZHMiLCJheGlzQ29uZmlnRmllbGRzIiwib25JbmNsdWRlQXhlcyIsIm5vQXhlc0NvbmZpZyIsImF4aXMiLCJ1cGRhdGVkUmFuZ2UiLCJ1cGRhdGVkRG9tYWluIiwib25TdGFuZGFyZEdyaWRDaGFuZ2VkIiwiZ3JhcGgiLCJoZWlnaHQiLCJ3aWR0aCIsIm9uU2l6ZUNoYW5nZWQiLCJrZXkiLCJvbkRvbWFpbkNoYW5nZWQiLCJvblJhbmdlQ2hhbmdlZCIsImF4ZXNDb25maWciLCJyb3dWaWV3IiwidGV4dCIsImdyaWRsaW5lc0NvbmZpZyIsImxhcmdlVGV4dEZpZWxkIiwid3JhcHBlciIsImNvbnRlbnQiLCJkaW1lbnNpb25zIiwidGV4dEZpZWxkIiwic3R5bGVzIiwidGhlbWUiLCJkaXNwbGF5IiwiZmxleERpcmVjdGlvbiIsImFsaWduSXRlbXMiLCJqdXN0aWZ5Q29udGVudCIsIm1hcmdpbiIsInNwYWNpbmciLCJ1bml0IiwiZm9udFN0eWxlIiwiY29sb3IiLCJwYWRkaW5nVG9wIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7QUFFQSxJQUFNQSxVQUFVLEdBQUcsU0FBYkEsVUFBYSxDQUFDQyxLQUFELEVBQVc7QUFDNUIsTUFBUUMsT0FBUixHQUF5R0QsS0FBekcsQ0FBUUMsT0FBUjtBQUFBLE1BQWlCQyxRQUFqQixHQUF5R0YsS0FBekcsQ0FBaUJFLFFBQWpCO0FBQUEsTUFBMkJDLGVBQTNCLEdBQXlHSCxLQUF6RyxDQUEyQkcsZUFBM0I7QUFBQSxNQUE0Q0MsVUFBNUMsR0FBeUdKLEtBQXpHLENBQTRDSSxVQUE1QztBQUFBLE1BQXdEQyxXQUF4RCxHQUF5R0wsS0FBekcsQ0FBd0RLLFdBQXhEO0FBQUEsTUFBcUVDLFNBQXJFLEdBQXlHTixLQUF6RyxDQUFxRU0sU0FBckU7QUFBQSxNQUFnRkMsVUFBaEYsR0FBeUdQLEtBQXpHLENBQWdGTyxVQUFoRjtBQUFBLE1BQTRGQyxTQUE1RixHQUF5R1IsS0FBekcsQ0FBNEZRLFFBQTVGO0FBQ0EsOEJBQXNDTCxlQUF0QyxDQUFRTSxTQUFSO0FBQUEsTUFBUUEsU0FBUixzQ0FBb0IsRUFBcEI7QUFBQSw4QkFBc0NOLGVBQXRDLENBQXdCTyxJQUF4QjtBQUFBLE1BQXdCQSxJQUF4QixzQ0FBK0IsRUFBL0I7QUFFQSxzQkFDRTtBQUFLLElBQUEsU0FBUyxFQUFFVCxPQUFPLENBQUNVO0FBQXhCLEtBQ0dELElBQUksSUFBSUEsSUFBSSxDQUFDRSxPQUFiLGlCQUNDLGdDQUFDLCtCQUFEO0FBQ0Us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RDtBQUZHLEtBbkJjO0FBdUJ6Qm5FLElBQUFBLGVBQWUsRUFBRTtBQUNmNkMsTUFBQUEsS0FBSyxFQUFFLE9BRFE7QUFFZm9CLE1BQUFBLE1BQU0sWUFBS0wsS0FBSyxDQUFDTSxPQUFOLENBQWNDLElBQW5CLGdCQUE2QlAsS0FBSyxDQUFDTSxPQUFOLENBQWNDLElBQWQsR0FBcUIsQ0FBbEQ7QUFGUyxLQXZCUTtBQTJCekJiLElBQUFBLGNBQWMsRUFBRTtBQUNkVCxNQUFBQSxLQUFLLEVBQUUsT0FETztBQUVkb0IsTUFBQUEsTUFBTSxZQUFLTCxLQUFLLENBQUNNLE9BQU4sQ0FBY0MsSUFBbkIsZ0JBQTZCUCxLQUFLLENBQUNNLE9BQU4sQ0FBY0MsSUFBZCxHQUFxQixDQUFsRDtBQUZRLEtBM0JTO0FBK0J6QmYsSUFBQUEsSUFBSSxFQUFFO0FBQ0pnQixNQUFBQSxTQUFTLEVBQUUsUUFEUDtBQUVKSCxNQUFBQSxNQUFNLFlBQUtMLEtBQUssQ0FBQ00sT0FBTixDQUFjQyxJQUFuQjtBQUZGLEtBL0JtQjtBQW1DekJWLElBQUFBLFVBQVUsRUFBRTtBQUNWSSxNQUFBQSxPQUFPLEVBQUUsTUFEQztBQUVWRyxNQUFBQSxjQUFjLEVBQUUsZUFGTjtBQUdWRCxNQUFBQSxVQUFVLEVBQUU7QUFIRixLQW5DYTtBQXdDekIxRSxJQUFBQSxRQUFRLEVBQUU7QUFDUmdGLE1BQUFBLEtBQUssRUFBRUEsZ0JBQU1oRixRQUFOO0FBREMsS0F4Q2U7QUEyQ3pCMkIsSUFBQUEsU0FBUyxFQUFFO0FBQ1RzRCxNQUFBQSxVQUFVLEVBQUVWLEtBQUssQ0FBQ00sT0FBTixDQUFjQyxJQUFkLEdBQXFCO0FBRHhCO0FBM0NjLEdBQVo7QUFBQSxDQUFmOztlQWdEZSx3QkFBV1IsTUFBWCxFQUFtQnJDLFNBQW5CLEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGNvbG9yLCBJbnB1dENvbnRhaW5lciB9IGZyb20gJ0BwaWUtbGliL3JlbmRlci11aSc7XG5pbXBvcnQgeyB3aXRoU3R5bGVzIH0gZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUvc3R5bGVzJztcbmltcG9ydCBFeHBhbnNpb25QYW5lbFN1bW1hcnkgZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUvRXhwYW5zaW9uUGFuZWxTdW1tYXJ5JztcbmltcG9ydCBUeXBvZ3JhcGh5IGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL1R5cG9ncmFwaHknO1xuaW1wb3J0IEV4cGFuc2lvblBhbmVsRGV0YWlscyBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZS9FeHBhbnNpb25QYW5lbERldGFpbHMnO1xuaW1wb3J0IEV4cGFuc2lvblBhbmVsIGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL0V4cGFuc2lvblBhbmVsJztcbmltcG9ydCBFeHBhbmRNb3JlSWNvbiBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvRXhwYW5kTW9yZSc7XG5pbXBvcnQgeyBOdW1iZXJUZXh0RmllbGRDdXN0b20sIFRvZ2dsZSB9IGZyb20gJ0BwaWUtbGliL2NvbmZpZy11aSc7XG5pbXBvcnQgRWRpdGFibGVIVE1MIGZyb20gJ0BwaWUtbGliL2VkaXRhYmxlLWh0bWwnO1xuXG5jb25zdCBHcmlkQ29uZmlnID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgY2xhc3NlcywgZGlzYWJsZWQsIGRpc3BsYXllZEZpZWxkcywgbGFiZWxWYWx1ZSwgbGFiZWxWYWx1ZXMsIGdyaWRWYWx1ZSwgZ3JpZFZhbHVlcywgb25DaGFuZ2UgfSA9IHByb3BzO1xuICBjb25zdCB7IGxhYmVsU3RlcCA9IHt9LCBzdGVwID0ge30gfSA9IGRpc3BsYXllZEZpZWxkcztcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2VzLmNvbHVtblZpZXd9PlxuICAgICAge3N0ZXAgJiYgc3RlcC5lbmFibGVkICYmIChcbiAgICAgICAgPE51bWJlclRleHRGaWVsZEN1c3RvbVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlcy5tZWRpdW1UZXh0RmllbGR9XG4gICAgICAgICAgbGFiZWw9e3N0ZXAubGFiZWwgfHwgJyd9XG4gICAgICAgICAgdmFsdWU9e2dyaWRWYWx1ZX1cbiAgICAgICAgICBjdXN0b21WYWx1ZXM9e2dyaWRWYWx1ZXN9XG4gICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgb25DaGFuZ2U9eyhlLCB2KSA9PiBvbkNoYW5nZSgnc3RlcCcsIHYpfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIHtsYWJlbFN0ZXAgJiYgbGFiZWxTdGVwLmVuYWJsZWQgJiYgKFxuICAgICAgICA8TnVtYmVyVGV4dEZpZWxkQ3VzdG9tXG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzLm1lZGl1bVRleHRGaWVsZH1cbiAgICAgICAgICBsYWJlbD17bGFiZWxTdGVwLmxhYmVsIHx8ICcnfVxuICAgICAgICAgIHZhbHVlPXtsYWJlbFZhbHVlfVxuICAgICAgICAgIGN1c3RvbVZhbHVlcz17bGFiZWxWYWx1ZXN9XG4gICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgb25DaGFuZ2U9eyhlLCB2KSA9PiBvbkNoYW5nZSgnbGFiZWxTdGVwJywgdil9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuR3JpZENvbmZpZy5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgZGlzcGxheWVkRmllbGRzOiBQcm9wVHlwZXMub2JqZWN0LFxuICBsYWJlbFZhbHVlOiBQcm9wVHlwZXMubnVtYmVyLFxuICBsYWJlbFZhbHVlczogUHJvcFR5cGVzLmFycmF5LFxuICBncmlkVmFsdWU6IFByb3BUeXBlcy5udW1iZXIsXG4gIGdyaWRWYWx1ZXM6IFByb3BUeXBlcy5hcnJheSxcbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxufTtcblxuY29uc3QgQXhpc0NvbmZpZyA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGNsYXNzZXMsIGRpc2FibGVkLCBkaXNwbGF5ZWRGaWVsZHMsIGRpc3BsYXlIZWFkZXIsIGxhYmVsLCBtYXhWYWx1ZSwgbWluVmFsdWUsIG9uQ2hhbmdlLCB0eXBlIH0gPSBwcm9wcztcbiAgY29uc3QgeyBheGlzTGFiZWwgPSB7fSwgbWluID0ge30sIG1heCA9IHt9IH0gPSBkaXNwbGF5ZWRGaWVsZHM7XG4gIGNvbnN0IGFjdGl2ZVBsdWdpbnMgPSBbXG4gICAgJ2JvbGQnLFxuICAgICdpdGFsaWMnLFxuICAgICd1bmRlcmxpbmUnLFxuICAgICdzdHJpa2V0aHJvdWdoJyxcbiAgICAvLyAnbGFuZ3VhZ2VDaGFyYWN0ZXJzJ1xuICBdO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzZXMuY29sdW1uVmlld30+XG4gICAgICB7ZGlzcGxheUhlYWRlciAmJiAoXG4gICAgICAgIDxUeXBvZ3JhcGh5IHZhcmlhbnQ9XCJzdWJ0aXRsZTJcIj5cbiAgICAgICAgICA8aT57dHlwZSA9PT0gJ2RvbWFpbicgPyAneCcgOiAneSd9PC9pPlxuICAgICAgICAgIC1heGlzXG4gICAgICAgIDwvVHlwb2dyYXBoeT5cbiAgICAgICl9XG4gICAgICB7bWluICYmIG1pbi5lbmFibGVkICYmIChcbiAgICAgICAgPE51bWJlclRleHRGaWVsZEN1c3RvbVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlcy5tZWRpdW1UZXh0RmllbGR9XG4gICAgICAgICAgbGFiZWw9e21pbi5sYWJlbCB8fCAnJ31cbiAgICAgICAgICB2YWx1ZT17bWluVmFsdWV9XG4gICAgICAgICAgbWluPXstMTAwMDB9XG4gICAgICAgICAgbWF4PXttYXhWYWx1ZSAtIDAuMDV9XG4gICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgb25DaGFuZ2U9eyhlLCB2KSA9PiBvbkNoYW5nZSgnbWluJywgdil9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAge21heCAmJiBtYXguZW5hYmxlZCAmJiAoXG4gICAgICAgIDxOdW1iZXJUZXh0RmllbGRDdXN0b21cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXMubWVkaXVtVGV4dEZpZWxkfVxuICAgICAgICAgIGxhYmVsPXttYXgubGFiZWwgfHwgJyd9XG4gICAgICAgICAgdmFsdWU9e21heFZhbHVlfVxuICAgICAgICAgIG1pbj17bWluVmFsdWUgKyAwLjA1fVxuICAgICAgICAgIG1heD17MTAwMDB9XG4gICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgb25DaGFuZ2U9eyhlLCB2KSA9PiBvbkNoYW5nZSgnbWF4Jywgdil9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAge2F4aXNMYWJlbCAmJiBheGlzTGFiZWwuZW5hYmxlZCAmJiAoXG4gICAgICAgIDxJbnB1dENvbnRhaW5lciBsYWJlbD17YXhpc0xhYmVsLmxhYmVsIHx8ICcnfSBjbGFzc05hbWU9e2NsYXNzZXMubWVkaXVtVGV4dEZpZWxkfT5cbiAgICAgICAgICA8RWRpdGFibGVIVE1MXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXMuYXhpc0xhYmVsfVxuICAgICAgICAgICAgb25DaGFuZ2U9eyh2YWx1ZSkgPT4gb25DaGFuZ2UoJ2F4aXNMYWJlbCcsIHZhbHVlKX1cbiAgICAgICAgICAgIG1hcmt1cD17bGFiZWwgfHwgJyd9XG4gICAgICAgICAgICBjaGFyYWN0ZXJzTGltaXQ9ezV9XG4gICAgICAgICAgICBhY3RpdmVQbHVnaW5zPXthY3RpdmVQbHVnaW5zfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvSW5wdXRDb250YWluZXI+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuQXhpc0NvbmZpZy5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgZGlzcGxheWVkRmllbGRzOiBQcm9wVHlwZXMub2JqZWN0LFxuICBkaXNwbGF5SGVhZGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG1heFZhbHVlOiBQcm9wVHlwZXMubnVtYmVyLFxuICBtaW5WYWx1ZTogUHJvcFR5cGVzLm51bWJlcixcbiAgdHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxufTtcbmNvbnN0IEdyaWRTZXR1cCA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBkb21haW4sXG4gICAgZGlzcGxheWVkRmllbGRzID0ge30sXG4gICAgZ3JpZFZhbHVlcyA9IHt9LFxuICAgIGluY2x1ZGVBeGVzLFxuICAgIGxhYmVsVmFsdWVzID0ge30sXG4gICAgb25DaGFuZ2UsXG4gICAgb25DaGFuZ2VWaWV3LFxuICAgIHJhbmdlLFxuICAgIHNpemUsXG4gICAgc2l6ZUNvbnN0cmFpbnRzLFxuICAgIHN0YW5kYXJkR3JpZCxcbiAgfSA9IHByb3BzO1xuICBjb25zdCBncmlkUHJvcHMgPSB7IG1pbjogMiwgbWF4OiA0MSB9O1xuICBjb25zdCB7XG4gICAgYXhpc0xhYmVsID0ge30sXG4gICAgZGltZW5zaW9uc0VuYWJsZWQsXG4gICAgaW5jbHVkZUF4ZXNFbmFibGVkLFxuICAgIGxhYmVsU3RlcCA9IHt9LFxuICAgIG1pbiA9IHt9LFxuICAgIG1heCA9IHt9LFxuICAgIHN0YW5kYXJkR3JpZEVuYWJsZWQsXG4gICAgc3RlcCA9IHt9LFxuICB9ID0gZGlzcGxheWVkRmllbGRzIHx8IHt9O1xuICBjb25zdCBkaXNwbGF5QXhpc1R5cGUgPSBtaW4uZW5hYmxlZCB8fCBtYXguZW5hYmxlZCB8fCBheGlzTGFiZWwuZW5hYmxlZCB8fCBzdGVwLmVuYWJsZWQgfHwgbGFiZWxTdGVwLmVuYWJsZWQ7XG4gIGNvbnN0IGdyaWRDb25maWdGaWVsZHMgPSB7IHN0ZXAsIGxhYmVsU3RlcCB9O1xuICBjb25zdCBheGlzQ29uZmlnRmllbGRzID0geyBtaW4sIG1heCwgYXhpc0xhYmVsIH07XG5cbiAgY29uc3Qgb25JbmNsdWRlQXhlcyA9IChpbmNsdWRlQXhlcykgPT4ge1xuICAgIGNvbnN0IG5vQXhlc0NvbmZpZyA9ICh0eXBlKSA9PiB7XG4gICAgICBjb25zdCBheGlzID0gdHlwZSA9PT0gJ2RvbWFpbicgPyBkb21haW4gOiByYW5nZTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWluOiAxLFxuICAgICAgICBtYXg6IGF4aXMubWF4IDwgZ3JpZFByb3BzLm1pbiB8fCBheGlzLm1heCA+IGdyaWRQcm9wcy5tYXggPyAxNiA6IGF4aXMubWF4LFxuICAgICAgICBzdGVwOiAxLFxuICAgICAgICBsYWJlbFN0ZXA6IDAsXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCB1cGRhdGVkUmFuZ2UgPSB7XG4gICAgICAuLi5yYW5nZSxcbiAgICAgIC4uLihpbmNsdWRlQXhlcyA/IHsgbGFiZWxTdGVwOiAxIH0gOiBub0F4ZXNDb25maWcoJ3JhbmdlJykpLFxuICAgIH07XG4gICAgY29uc3QgdXBkYXRlZERvbWFpbiA9IHtcbiAgICAgIC4uLmRvbWFpbixcbiAgICAgIC4uLihpbmNsdWRlQXhlcyA/IHsgbGFiZWxTdGVwOiAxIH0gOiBub0F4ZXNDb25maWcoJ2RvbWFpbicpKSxcbiAgICB9O1xuXG4gICAgb25DaGFuZ2UoeyBpbmNsdWRlQXhlcywgcmFuZ2U6IHVwZGF0ZWRSYW5nZSwgZG9tYWluOiB1cGRhdGVkRG9tYWluIH0pO1xuICB9O1xuXG4gIGNvbnN0IG9uU3RhbmRhcmRHcmlkQ2hhbmdlZCA9ICh2YWx1ZSkgPT4ge1xuICAgIG9uQ2hhbmdlKHtcbiAgICAgIHN0YW5kYXJkR3JpZDogdmFsdWUsXG4gICAgICByYW5nZToge1xuICAgICAgICAuLi5kb21haW4sXG4gICAgICAgIGF4aXNMYWJlbDogcmFuZ2UuYXhpc0xhYmVsLFxuICAgICAgfSxcbiAgICAgIGdyYXBoOiB7XG4gICAgICAgIC4uLnNpemUsXG4gICAgICAgIGhlaWdodDogc2l6ZS53aWR0aCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3Qgb25TaXplQ2hhbmdlZCA9IChrZXksIHZhbHVlKSA9PiB7XG4gICAgY29uc3QgZ3JhcGggPSB7IC4uLnNpemUsIFtrZXldOiB2YWx1ZSB9O1xuXG4gICAgaWYgKHN0YW5kYXJkR3JpZCkge1xuICAgICAgZ3JhcGguaGVpZ2h0ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgb25DaGFuZ2UoeyBncmFwaCB9KTtcbiAgfTtcblxuICBjb25zdCBvbkRvbWFpbkNoYW5nZWQgPSAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgIGRvbWFpbltrZXldID0gdmFsdWU7XG5cbiAgICBpZiAoc3RhbmRhcmRHcmlkICYmIGtleSAhPT0gJ2F4aXNMYWJlbCcpIHtcbiAgICAgIHJhbmdlW2tleV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBvbkNoYW5nZSh7IGRvbWFpbiwgcmFuZ2UgfSk7XG4gIH07XG5cbiAgY29uc3Qgb25SYW5nZUNoYW5nZWQgPSAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgIHJhbmdlW2tleV0gPSB2YWx1ZTtcblxuICAgIG9uQ2hhbmdlKHsgcmFuZ2UgfSk7XG4gIH07XG5cbiAgY29uc3QgYXhlc0NvbmZpZyA9IChcbiAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3Nlcy5yb3dWaWV3fT5cbiAgICAgICAgPEF4aXNDb25maWdcbiAgICAgICAgICBjbGFzc2VzPXtjbGFzc2VzfVxuICAgICAgICAgIGRpc3BsYXllZEZpZWxkcz17YXhpc0NvbmZpZ0ZpZWxkc31cbiAgICAgICAgICBkaXNwbGF5SGVhZGVyPXtkaXNwbGF5QXhpc1R5cGV9XG4gICAgICAgICAgdHlwZT1cImRvbWFpblwiXG4gICAgICAgICAgbWluVmFsdWU9e2RvbWFpbi5taW59XG4gICAgICAgICAgbWF4VmFsdWU9e2RvbWFpbi5tYXh9XG4gICAgICAgICAgbGFiZWw9e2RvbWFpbi5heGlzTGFiZWx9XG4gICAgICAgICAgaW5jbHVkZUF4ZXM9e2luY2x1ZGVBeGVzfVxuICAgICAgICAgIG9uQ2hhbmdlPXtvbkRvbWFpbkNoYW5nZWR9XG4gICAgICAgIC8+XG4gICAgICAgIDxBeGlzQ29uZmlnXG4gICAgICAgICAgY2xhc3Nlcz17Y2xhc3Nlc31cbiAgICAgICAgICBkaXNwbGF5ZWRGaWVsZHM9e2F4aXNDb25maWdGaWVsZHN9XG4gICAgICAgICAgZGlzcGxheUhlYWRlcj17ZGlzcGxheUF4aXNUeXBlfVxuICAgICAgICAgIHR5cGU9XCJyYW5nZVwiXG4gICAgICAgICAgbWluVmFsdWU9e3JhbmdlLm1pbn1cbiAgICAgICAgICBtYXhWYWx1ZT17cmFuZ2UubWF4fVxuICAgICAgICAgIGxhYmVsPXtyYW5nZS5heGlzTGFiZWx9XG4gICAgICAgICAgZGlzYWJsZWQ9e3N0YW5kYXJkR3JpZH1cbiAgICAgICAgICBpbmNsdWRlQXhlcz17aW5jbHVkZUF4ZXN9XG4gICAgICAgICAgb25DaGFuZ2U9e29uUmFuZ2VDaGFuZ2VkfVxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgICB7KG1pbi5lbmFibGVkIHx8IG1heC5lbmFibGVkKSAmJiAoXG4gICAgICAgIDxUeXBvZ3JhcGh5IGNsYXNzTmFtZT17Y2xhc3Nlcy50ZXh0fT5cbiAgICAgICAgICBJZiB5b3Ugd2FudCB0aGUgYXhpcyB0byBiZSB2aXNpYmxlLCB1c2UgYSB6ZXJvIG9yIG5lZ2F0aXZlIE1pbiBWYWx1ZSwgYW5kIGEgcG9zaXRpdmUgTWF4IFZhbHVlXG4gICAgICAgIDwvVHlwb2dyYXBoeT5cbiAgICAgICl9XG4gICAgICB7KHN0ZXAuZW5hYmxlZCB8fCBsYWJlbFN0ZXAuZW5hYmxlZCkgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3Nlcy5yb3dWaWV3fT5cbiAgICAgICAgICA8R3JpZENvbmZpZ1xuICAgICAgICAgICAgY2xhc3Nlcz17Y2xhc3Nlc31cbiAgICAgICAgICAgIGRpc3BsYXllZEZpZWxkcz17Z3JpZENvbmZpZ0ZpZWxkc31cbiAgICAgICAgICAgIGdyaWRWYWx1ZT17ZG9tYWluLnN0ZXB9XG4gICAgICAgICAgICBsYWJlbFZhbHVlPXtkb21haW4ubGFiZWxTdGVwfVxuICAgICAgICAgICAgZ3JpZFZhbHVlcz17Z3JpZFZhbHVlcy5kb21haW4gfHwgW119XG4gICAgICAgICAgICBsYWJlbFZhbHVlcz17bGFiZWxWYWx1ZXMuZG9tYWluIHx8IFtdfVxuICAgICAgICAgICAgb25DaGFuZ2U9e29uRG9tYWluQ2hhbmdlZH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxHcmlkQ29uZmlnXG4gICAgICAgICAgICBjbGFzc2VzPXtjbGFzc2VzfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3N0YW5kYXJkR3JpZH1cbiAgICAgICAgICAgIGRpc3BsYXllZEZpZWxkcz17Z3JpZENvbmZpZ0ZpZWxkc31cbiAgICAgICAgICAgIGdyaWRWYWx1ZT17cmFuZ2Uuc3RlcH1cbiAgICAgICAgICAgIGxhYmVsVmFsdWU9e3JhbmdlLmxhYmVsU3RlcH1cbiAgICAgICAgICAgIGdyaWRWYWx1ZXM9e2dyaWRWYWx1ZXMucmFuZ2UgfHwgW119XG4gICAgICAgICAgICBsYWJlbFZhbHVlcz17bGFiZWxWYWx1ZXMucmFuZ2UgfHwgW119XG4gICAgICAgICAgICBvbkNoYW5nZT17b25SYW5nZUNoYW5nZWR9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAge2xhYmVsU3RlcC5lbmFibGVkICYmIChcbiAgICAgICAgPFR5cG9ncmFwaHkgY2xhc3NOYW1lPXtjbGFzc2VzLnRleHR9PkZvciB1bm51bWJlcmVkIGdyaWRsaW5lcywgZW50ZXIgYSBsYWJlbCBpbnRlcnZhbCBvZiAwPC9UeXBvZ3JhcGh5PlxuICAgICAgKX1cbiAgICA8L1JlYWN0LkZyYWdtZW50PlxuICApO1xuXG4gIGNvbnN0IGdyaWRsaW5lc0NvbmZpZyA9IG1heC5lbmFibGVkID8gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2VzLmNvbHVtblZpZXd9PlxuICAgICAgPE51bWJlclRleHRGaWVsZEN1c3RvbVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXMubGFyZ2VUZXh0RmllbGR9XG4gICAgICAgIGxhYmVsPVwiTnVtYmVyIG9mIFZlcnRpY2FsIEdyaWRsaW5lc1wiXG4gICAgICAgIHZhbHVlPXtkb21haW4ubWF4fVxuICAgICAgICBtaW49eyFpbmNsdWRlQXhlcyAmJiBncmlkUHJvcHMubWlufVxuICAgICAgICBtYXg9eyFpbmNsdWRlQXhlcyAmJiBncmlkUHJvcHMubWF4fVxuICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgICBvbkNoYW5nZT17KGUsIHYpID0+IG9uRG9tYWluQ2hhbmdlZCgnbWF4Jywgdil9XG4gICAgICAvPlxuICAgICAgPE51bWJlclRleHRGaWVsZEN1c3RvbVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXMubGFyZ2VUZXh0RmllbGR9XG4gICAgICAgIGxhYmVsPVwiTnVtYmVyIG9mIEhvcml6b250YWwgR3JpZGxpbmVzXCJcbiAgICAgICAgdmFsdWU9e3JhbmdlLm1heH1cbiAgICAgICAgbWluPXshaW5jbHVkZUF4ZXMgJiYgZ3JpZFByb3BzLm1pbn1cbiAgICAgICAgbWF4PXshaW5jbHVkZUF4ZXMgJiYgZ3JpZFByb3BzLm1heH1cbiAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgZGlzYWJsZWQ9e3N0YW5kYXJkR3JpZH1cbiAgICAgICAgb25DaGFuZ2U9eyhlLCB2KSA9PiBvblJhbmdlQ2hhbmdlZCgnbWF4Jywgdil9XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApIDogbnVsbDtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2VzLndyYXBwZXJ9PlxuICAgICAgPEV4cGFuc2lvblBhbmVsIG9uQ2hhbmdlPXtvbkNoYW5nZVZpZXd9PlxuICAgICAgICA8RXhwYW5zaW9uUGFuZWxTdW1tYXJ5IGV4cGFuZEljb249ezxFeHBhbmRNb3JlSWNvbiAvPn0+XG4gICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cInN1YnRpdGxlMVwiPkN1c3RvbWl6ZSBHcmlkIFNldHVwPC9UeXBvZ3JhcGh5PlxuICAgICAgICA8L0V4cGFuc2lvblBhbmVsU3VtbWFyeT5cbiAgICAgICAgPEV4cGFuc2lvblBhbmVsRGV0YWlscz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3Nlcy5jb250ZW50fT5cbiAgICAgICAgICAgIHtpbmNsdWRlQXhlc0VuYWJsZWQgJiYgKFxuICAgICAgICAgICAgICA8VG9nZ2xlXG4gICAgICAgICAgICAgICAgICBsYWJlbD1cIkluY2x1ZGUgYXhlcyBhbmQgbGFiZWxzP1wiXG4gICAgICAgICAgICAgICAgICB0b2dnbGU9e29uSW5jbHVkZUF4ZXN9XG4gICAgICAgICAgICAgICAgICBjaGVja2VkPXtpbmNsdWRlQXhlc30gLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7c3RhbmRhcmRHcmlkRW5hYmxlZCAmJiAoXG4gICAgICAgICAgICAgICAgPFRvZ2dsZVxuICAgICAgICAgICAgICAgICAgbGFiZWw9XCJDb25zdHJhaW4gdG8gc3RhbmRhcmQgY29vcmRpbmF0ZSBncmlkP1wiXG4gICAgICAgICAgICAgICAgICB0b2dnbGU9e29uU3RhbmRhcmRHcmlkQ2hhbmdlZH1cbiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e3N0YW5kYXJkR3JpZH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtpbmNsdWRlQXhlcyA/IGF4ZXNDb25maWcgOiBncmlkbGluZXNDb25maWd9XG4gICAgICAgICAgICB7ZGltZW5zaW9uc0VuYWJsZWQgJiYgKFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3Nlcy5kaW1lbnNpb25zfT5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgPFR5cG9ncmFwaHk+RGltZW5zaW9ucyhweCk8L1R5cG9ncmFwaHk+XG4gICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSBjbGFzc05hbWU9e2NsYXNzZXMuZGlzYWJsZWR9PlxuICAgICAgICAgICAgICAgICAgICBNaW4ge3NpemVDb25zdHJhaW50cy5taW59LCBNYXgge3NpemVDb25zdHJhaW50cy5tYXh9XG4gICAgICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPE51bWJlclRleHRGaWVsZEN1c3RvbVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzLnRleHRGaWVsZH1cbiAgICAgICAgICAgICAgICAgIGxhYmVsPVwiV2lkdGhcIlxuICAgICAgICAgICAgICAgICAgdmFsdWU9e3NpemUud2lkdGh9XG4gICAgICAgICAgICAgICAgICBtaW49e3NpemVDb25zdHJhaW50cy5taW59XG4gICAgICAgICAgICAgICAgICBtYXg9e3NpemVDb25zdHJhaW50cy5tYXh9XG4gICAgICAgICAgICAgICAgICBzdGVwPXtzaXplQ29uc3RyYWludHMuc3RlcH1cbiAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUsIHYpID0+IG9uU2l6ZUNoYW5nZWQoJ3dpZHRoJywgdil9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8TnVtYmVyVGV4dEZpZWxkQ3VzdG9tXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXMudGV4dEZpZWxkfVxuICAgICAgICAgICAgICAgICAgbGFiZWw9XCJIZWlnaHRcIlxuICAgICAgICAgICAgICAgICAgdmFsdWU9e3NpemUuaGVpZ2h0fVxuICAgICAgICAgICAgICAgICAgbWluPXtzaXplQ29uc3RyYWludHMubWlufVxuICAgICAgICAgICAgICAgICAgbWF4PXtzaXplQ29uc3RyYWludHMubWF4fVxuICAgICAgICAgICAgICAgICAgc3RlcD17c2l6ZUNvbnN0cmFpbnRzLnN0ZXB9XG4gICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3N0YW5kYXJkR3JpZH1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgdikgPT4gb25TaXplQ2hhbmdlZCgnaGVpZ2h0Jywgdil9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L0V4cGFuc2lvblBhbmVsRGV0YWlscz5cbiAgICAgIDwvRXhwYW5zaW9uUGFuZWw+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5HcmlkU2V0dXAucHJvcFR5cGVzID0ge1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICBkb21haW46IFByb3BUeXBlcy5vYmplY3QsXG4gIGRpc3BsYXllZEZpZWxkczogUHJvcFR5cGVzLm9iamVjdCxcbiAgZ3JpZFZhbHVlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgaW5jbHVkZUF4ZXM6IFByb3BUeXBlcy5ib29sLFxuICBsYWJlbFZhbHVlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvbkNoYW5nZVZpZXc6IFByb3BUeXBlcy5mdW5jLFxuICByYW5nZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgc2l6ZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgc2l6ZUNvbnN0cmFpbnRzOiBQcm9wVHlwZXMub2JqZWN0LFxuICBzdGFuZGFyZEdyaWQ6IFByb3BUeXBlcy5ib29sLFxufTtcblxuY29uc3Qgc3R5bGVzID0gKHRoZW1lKSA9PiAoe1xuICB3cmFwcGVyOiB7XG4gICAgd2lkdGg6ICc0NTBweCcsXG4gIH0sXG4gIGNvbnRlbnQ6IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgfSxcbiAgY29sdW1uVmlldzoge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfSxcbiAgcm93Vmlldzoge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWFyb3VuZCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIH0sXG4gIHRleHRGaWVsZDoge1xuICAgIHdpZHRoOiAnMTMwcHgnLFxuICAgIG1hcmdpbjogYCR7dGhlbWUuc3BhY2luZy51bml0fXB4ICR7dGhlbWUuc3BhY2luZy51bml0IC8gMn1weGAsXG4gIH0sXG4gIG1lZGl1bVRleHRGaWVsZDoge1xuICAgIHdpZHRoOiAnMTYwcHgnLFxuICAgIG1hcmdpbjogYCR7dGhlbWUuc3BhY2luZy51bml0fXB4ICR7dGhlbWUuc3BhY2luZy51bml0IC8gMn1weGAsXG4gIH0sXG4gIGxhcmdlVGV4dEZpZWxkOiB7XG4gICAgd2lkdGg6ICcyMzBweCcsXG4gICAgbWFyZ2luOiBgJHt0aGVtZS5zcGFjaW5nLnVuaXR9cHggJHt0aGVtZS5zcGFjaW5nLnVuaXQgLyAyfXB4YCxcbiAgfSxcbiAgdGV4dDoge1xuICAgIGZvbnRTdHlsZTogJ2l0YWxpYycsXG4gICAgbWFyZ2luOiBgJHt0aGVtZS5zcGFjaW5nLnVuaXR9cHggMGAsXG4gIH0sXG4gIGRpbWVuc2lvbnM6IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfSxcbiAgZGlzYWJsZWQ6IHtcbiAgICBjb2xvcjogY29sb3IuZGlzYWJsZWQoKSxcbiAgfSxcbiAgYXhpc0xhYmVsOiB7XG4gICAgcGFkZGluZ1RvcDogdGhlbWUuc3BhY2luZy51bml0ICogMixcbiAgfSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGVzKHN0eWxlcykoR3JpZFNldHVwKTtcbiJdfQ==