@pie-lib/graphing 3.1.0-next.0 → 3.1.0-next.2

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 (162) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/package.json +8 -8
  3. package/lib/__tests__/graph-with-controls.test.js +0 -226
  4. package/lib/__tests__/graph.test.js +0 -187
  5. package/lib/__tests__/grid.test.js +0 -29
  6. package/lib/__tests__/labels.test.js +0 -61
  7. package/lib/__tests__/mark-label.test.js +0 -133
  8. package/lib/__tests__/toggle-bar.test.js +0 -150
  9. package/lib/__tests__/tool-menu.test.js +0 -101
  10. package/lib/__tests__/undo-redo.test.js +0 -31
  11. package/lib/__tests__/use-debounce.test.js +0 -24
  12. package/lib/__tests__/utils.js +0 -70
  13. package/lib/__tests__/utils.test.js +0 -123
  14. package/lib/axis/__tests__/arrow.test.js +0 -60
  15. package/lib/axis/__tests__/axes.test.js +0 -195
  16. package/lib/axis/arrow.js +0 -79
  17. package/lib/axis/arrow.js.map +0 -1
  18. package/lib/axis/axes.js +0 -327
  19. package/lib/axis/axes.js.map +0 -1
  20. package/lib/axis/index.js +0 -21
  21. package/lib/axis/index.js.map +0 -1
  22. package/lib/bg.js +0 -111
  23. package/lib/bg.js.map +0 -1
  24. package/lib/container/actions.js +0 -18
  25. package/lib/container/actions.js.map +0 -1
  26. package/lib/container/index.js +0 -118
  27. package/lib/container/index.js.map +0 -1
  28. package/lib/container/marks.js +0 -22
  29. package/lib/container/marks.js.map +0 -1
  30. package/lib/container/middleware.js +0 -19
  31. package/lib/container/middleware.js.map +0 -1
  32. package/lib/container/reducer.js +0 -18
  33. package/lib/container/reducer.js.map +0 -1
  34. package/lib/coordinates-label.js +0 -79
  35. package/lib/coordinates-label.js.map +0 -1
  36. package/lib/graph-with-controls.js +0 -295
  37. package/lib/graph-with-controls.js.map +0 -1
  38. package/lib/graph.js +0 -314
  39. package/lib/graph.js.map +0 -1
  40. package/lib/grid-setup.js +0 -406
  41. package/lib/grid-setup.js.map +0 -1
  42. package/lib/grid.js +0 -131
  43. package/lib/grid.js.map +0 -1
  44. package/lib/index.js +0 -47
  45. package/lib/index.js.map +0 -1
  46. package/lib/key-legend.js +0 -201
  47. package/lib/key-legend.js.map +0 -1
  48. package/lib/label-svg-icon.js +0 -50
  49. package/lib/label-svg-icon.js.map +0 -1
  50. package/lib/labels.js +0 -243
  51. package/lib/labels.js.map +0 -1
  52. package/lib/mark-label.js +0 -278
  53. package/lib/mark-label.js.map +0 -1
  54. package/lib/toggle-bar.js +0 -248
  55. package/lib/toggle-bar.js.map +0 -1
  56. package/lib/tool-menu.js +0 -78
  57. package/lib/tool-menu.js.map +0 -1
  58. package/lib/tools/absolute/__tests__/component.test.js +0 -67
  59. package/lib/tools/absolute/component.js +0 -29
  60. package/lib/tools/absolute/component.js.map +0 -1
  61. package/lib/tools/absolute/index.js +0 -50
  62. package/lib/tools/absolute/index.js.map +0 -1
  63. package/lib/tools/circle/__tests__/bg-circle.test.js +0 -33
  64. package/lib/tools/circle/__tests__/component.test.js +0 -68
  65. package/lib/tools/circle/bg-circle.js +0 -123
  66. package/lib/tools/circle/bg-circle.js.map +0 -1
  67. package/lib/tools/circle/component.js +0 -319
  68. package/lib/tools/circle/component.js.map +0 -1
  69. package/lib/tools/circle/index.js +0 -41
  70. package/lib/tools/circle/index.js.map +0 -1
  71. package/lib/tools/exponential/__tests__/component.test.js +0 -66
  72. package/lib/tools/exponential/component.js +0 -28
  73. package/lib/tools/exponential/component.js.map +0 -1
  74. package/lib/tools/exponential/index.js +0 -56
  75. package/lib/tools/exponential/index.js.map +0 -1
  76. package/lib/tools/index.js +0 -86
  77. package/lib/tools/index.js.map +0 -1
  78. package/lib/tools/line/__tests__/component.test.js +0 -45
  79. package/lib/tools/line/component.js +0 -82
  80. package/lib/tools/line/component.js.map +0 -1
  81. package/lib/tools/line/index.js +0 -11
  82. package/lib/tools/line/index.js.map +0 -1
  83. package/lib/tools/parabola/__tests__/component.test.js +0 -66
  84. package/lib/tools/parabola/component.js +0 -28
  85. package/lib/tools/parabola/component.js.map +0 -1
  86. package/lib/tools/parabola/index.js +0 -50
  87. package/lib/tools/parabola/index.js.map +0 -1
  88. package/lib/tools/point/__tests__/component.test.js +0 -50
  89. package/lib/tools/point/component.js +0 -139
  90. package/lib/tools/point/component.js.map +0 -1
  91. package/lib/tools/point/index.js +0 -24
  92. package/lib/tools/point/index.js.map +0 -1
  93. package/lib/tools/polygon/__tests__/component.test.js +0 -85
  94. package/lib/tools/polygon/__tests__/index.test.js +0 -92
  95. package/lib/tools/polygon/__tests__/line.test.js +0 -29
  96. package/lib/tools/polygon/__tests__/polygon.test.js +0 -59
  97. package/lib/tools/polygon/component.js +0 -417
  98. package/lib/tools/polygon/component.js.map +0 -1
  99. package/lib/tools/polygon/index.js +0 -89
  100. package/lib/tools/polygon/index.js.map +0 -1
  101. package/lib/tools/polygon/line.js +0 -114
  102. package/lib/tools/polygon/line.js.map +0 -1
  103. package/lib/tools/polygon/polygon.js +0 -132
  104. package/lib/tools/polygon/polygon.js.map +0 -1
  105. package/lib/tools/ray/__tests__/component.test.js +0 -35
  106. package/lib/tools/ray/component.js +0 -83
  107. package/lib/tools/ray/component.js.map +0 -1
  108. package/lib/tools/ray/index.js +0 -11
  109. package/lib/tools/ray/index.js.map +0 -1
  110. package/lib/tools/segment/__tests__/component.test.js +0 -35
  111. package/lib/tools/segment/component.js +0 -57
  112. package/lib/tools/segment/component.js.map +0 -1
  113. package/lib/tools/segment/index.js +0 -11
  114. package/lib/tools/segment/index.js.map +0 -1
  115. package/lib/tools/shared/__tests__/arrow-head.test.js +0 -45
  116. package/lib/tools/shared/arrow-head.js +0 -111
  117. package/lib/tools/shared/arrow-head.js.map +0 -1
  118. package/lib/tools/shared/icons/CorrectSVG.js +0 -40
  119. package/lib/tools/shared/icons/CorrectSVG.js.map +0 -1
  120. package/lib/tools/shared/icons/IncorrectSVG.js +0 -40
  121. package/lib/tools/shared/icons/IncorrectSVG.js.map +0 -1
  122. package/lib/tools/shared/icons/MissingSVG.js +0 -39
  123. package/lib/tools/shared/icons/MissingSVG.js.map +0 -1
  124. package/lib/tools/shared/line/__tests__/index.test.js +0 -124
  125. package/lib/tools/shared/line/__tests__/line-path.test.js +0 -62
  126. package/lib/tools/shared/line/__tests__/with-root-edge.test.js +0 -91
  127. package/lib/tools/shared/line/index.js +0 -546
  128. package/lib/tools/shared/line/index.js.map +0 -1
  129. package/lib/tools/shared/line/line-path.js +0 -120
  130. package/lib/tools/shared/line/line-path.js.map +0 -1
  131. package/lib/tools/shared/line/with-root-edge.js +0 -121
  132. package/lib/tools/shared/line/with-root-edge.js.map +0 -1
  133. package/lib/tools/shared/point/__tests__/arrow-point.test.js +0 -127
  134. package/lib/tools/shared/point/__tests__/base-point.test.js +0 -122
  135. package/lib/tools/shared/point/arrow-point.js +0 -72
  136. package/lib/tools/shared/point/arrow-point.js.map +0 -1
  137. package/lib/tools/shared/point/arrow.js +0 -67
  138. package/lib/tools/shared/point/arrow.js.map +0 -1
  139. package/lib/tools/shared/point/base-point.js +0 -157
  140. package/lib/tools/shared/point/base-point.js.map +0 -1
  141. package/lib/tools/shared/point/index.js +0 -62
  142. package/lib/tools/shared/point/index.js.map +0 -1
  143. package/lib/tools/shared/styles.js +0 -30
  144. package/lib/tools/shared/styles.js.map +0 -1
  145. package/lib/tools/shared/types.js +0 -16
  146. package/lib/tools/shared/types.js.map +0 -1
  147. package/lib/tools/sine/__tests__/component.test.js +0 -72
  148. package/lib/tools/sine/component.js +0 -40
  149. package/lib/tools/sine/component.js.map +0 -1
  150. package/lib/tools/sine/index.js +0 -50
  151. package/lib/tools/sine/index.js.map +0 -1
  152. package/lib/tools/vector/__tests__/component.test.js +0 -32
  153. package/lib/tools/vector/component.js +0 -68
  154. package/lib/tools/vector/component.js.map +0 -1
  155. package/lib/tools/vector/index.js +0 -11
  156. package/lib/tools/vector/index.js.map +0 -1
  157. package/lib/undo-redo.js +0 -83
  158. package/lib/undo-redo.js.map +0 -1
  159. package/lib/use-debounce.js +0 -25
  160. package/lib/use-debounce.js.map +0 -1
  161. package/lib/utils.js +0 -230
  162. package/lib/utils.js.map +0 -1
package/lib/mark-label.js DELETED
@@ -1,278 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof = require("@babel/runtime/helpers/typeof");
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.position = exports["default"] = exports.coordinates = exports.MarkLabel = void 0;
9
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
- var _react = _interopRequireWildcard(require("react"));
12
- var _propTypes = _interopRequireDefault(require("prop-types"));
13
- var _styles = require("@mui/material/styles");
14
- var _reactInputAutosize = _interopRequireDefault(require("react-input-autosize"));
15
- var _useDebounce = require("./use-debounce");
16
- var _plot = require("@pie-lib/plot");
17
- var _renderUi = require("@pie-lib/render-ui");
18
- var _labelSvgIcon = _interopRequireDefault(require("./label-svg-icon"));
19
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
20
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
21
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
22
- var StyledInputCorrect = (0, _styles.styled)('div')(function (_ref2) {
23
- var theme = _ref2.theme;
24
- return {
25
- "float": 'right',
26
- padding: theme.spacing(0.5),
27
- borderRadius: '4px',
28
- fontSize: '10px',
29
- backgroundColor: _renderUi.color.defaults.WHITE,
30
- color: _renderUi.color.defaults.CORRECT_WITH_ICON,
31
- border: "solid 1px ".concat(_renderUi.color.defaults.CORRECT_WITH_ICON)
32
- };
33
- });
34
- var StyledInputIncorrect = (0, _styles.styled)('div')(function (_ref3) {
35
- var theme = _ref3.theme;
36
- return {
37
- "float": 'right',
38
- padding: theme.spacing(0.5),
39
- borderRadius: '4px',
40
- fontSize: '10px',
41
- backgroundColor: _renderUi.color.defaults.WHITE,
42
- color: _renderUi.color.defaults.INCORRECT_WITH_ICON,
43
- border: "solid 1px ".concat(_renderUi.color.defaults.INCORRECT_WITH_ICON)
44
- };
45
- });
46
- var StyledInputMissing = (0, _styles.styled)('div')(function (_ref4) {
47
- var theme = _ref4.theme;
48
- return {
49
- "float": 'right',
50
- padding: theme.spacing(0.5),
51
- borderRadius: '4px',
52
- fontSize: '10px',
53
- backgroundColor: _renderUi.color.defaults.WHITE,
54
- color: _renderUi.color.defaults.MISSING_WITH_ICON,
55
- border: "solid 1px ".concat(_renderUi.color.defaults.MISSING_WITH_ICON),
56
- fontWeight: 'bold'
57
- };
58
- });
59
- var StyledIncorrect = (0, _styles.styled)('div')(function () {
60
- return {
61
- "float": 'right',
62
- padding: 0,
63
- borderRadius: '4px',
64
- fontSize: '10px',
65
- backgroundColor: _renderUi.color.defaults.WHITE,
66
- color: _renderUi.color.defaults.INCORRECT_WITH_ICON,
67
- fontWeight: 'bold'
68
- };
69
- });
70
- var getInputStyles = function getInputStyles(theme, disabled, markDisabled) {
71
- return {
72
- "float": 'right',
73
- padding: theme.spacing(0.5),
74
- fontFamily: theme.typography.fontFamily,
75
- fontSize: '10px',
76
- border: disabled ? "solid 1px ".concat(_renderUi.color.defaults.PRIMARY_DARK) : markDisabled ? "solid 1px ".concat(_renderUi.color.disabled()) : "solid 1px ".concat(_renderUi.color.defaults.SECONDARY),
77
- borderRadius: '3px',
78
- color: markDisabled ? _renderUi.color.disabled() : _renderUi.color.defaults.PRIMARY_DARK,
79
- backgroundColor: _renderUi.color.defaults.WHITE,
80
- WebkitOpacity: disabled ? '1' : undefined,
81
- WebkitTextFillColor: markDisabled ? _renderUi.color.disabled() : undefined
82
- };
83
- };
84
- var getStudentInputStyles = function getStudentInputStyles() {
85
- return {
86
- padding: '0',
87
- border: 'none',
88
- color: 'inherit',
89
- fontWeight: 'bold'
90
- };
91
- };
92
- var position = exports.position = function position(graphProps, mark) {
93
- var rect = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
94
- width: 0,
95
- height: 0
96
- };
97
- var scale = graphProps.scale,
98
- domain = graphProps.domain,
99
- range = graphProps.range;
100
- var shift = 5;
101
- var rightEdge = scale.x(mark.x) + rect.width + shift;
102
- var bottomEdge = scale.y(mark.y) + rect.height + shift;
103
- var h = rightEdge >= scale.x(domain.max) ? 'left' : 'right';
104
- var v = bottomEdge >= scale.y(range.min) ? 'top' : 'bottom';
105
- return "".concat(v, "-").concat(h);
106
- };
107
- var coordinates = exports.coordinates = function coordinates(graphProps, mark) {
108
- var rect = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
109
- width: 0,
110
- height: 0
111
- };
112
- var position = arguments.length > 3 ? arguments[3] : undefined;
113
- var scale = graphProps.scale;
114
- var shift = 5;
115
- switch (position) {
116
- case 'bottom-right':
117
- return {
118
- left: scale.x(mark.x) + shift,
119
- top: scale.y(mark.y) + shift
120
- };
121
- case 'bottom-left':
122
- return {
123
- left: scale.x(mark.x) - shift - rect.width,
124
- top: scale.y(mark.y) + shift
125
- };
126
- case 'top-left':
127
- return {
128
- left: scale.x(mark.x) - shift - rect.width,
129
- top: scale.y(mark.y) - shift - rect.height
130
- };
131
- case 'top-right':
132
- return {
133
- left: scale.x(mark.x) + shift,
134
- top: scale.y(mark.y) - shift - rect.height
135
- };
136
- default:
137
- return {};
138
- }
139
- };
140
- var LabelInput = function LabelInput(_ref5) {
141
- var _ref = _ref5._ref,
142
- externalInputRef = _ref5.externalInputRef,
143
- label = _ref5.label,
144
- disabled = _ref5.disabled,
145
- inputStyle = _ref5.inputStyle,
146
- onChange = _ref5.onChange;
147
- return /*#__PURE__*/_react["default"].createElement(_reactInputAutosize["default"], {
148
- inputRef: function inputRef(r) {
149
- _ref(r);
150
- externalInputRef(r);
151
- },
152
- disabled: disabled,
153
- inputStyle: inputStyle,
154
- value: label,
155
- onChange: onChange
156
- });
157
- };
158
- LabelInput.propTypes = {
159
- _ref: _propTypes["default"].func,
160
- externalInputRef: _propTypes["default"].func,
161
- label: _propTypes["default"].string,
162
- disabled: _propTypes["default"].bool,
163
- inputStyle: _propTypes["default"].object,
164
- onChange: _propTypes["default"].func
165
- };
166
- var MarkLabel = exports.MarkLabel = function MarkLabel(props) {
167
- var _useState = (0, _react.useState)(null),
168
- _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
169
- input = _useState2[0],
170
- setInput = _useState2[1];
171
- var _ref = (0, _react.useCallback)(function (node) {
172
- return setInput(node);
173
- });
174
- var theme = (0, _styles.useTheme)();
175
- var mark = props.mark,
176
- graphProps = props.graphProps,
177
- disabled = props.disabled,
178
- externalInputRef = props.inputRef;
179
- var _useState3 = (0, _react.useState)(mark.label),
180
- _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
181
- label = _useState4[0],
182
- setLabel = _useState4[1];
183
- var correctness = mark.correctness,
184
- correctnesslabel = mark.correctnesslabel,
185
- correctlabel = mark.correctlabel;
186
- var onChange = function onChange(e) {
187
- return setLabel(e.target.value);
188
- };
189
- var debouncedLabel = (0, _useDebounce.useDebounce)(label, 200);
190
-
191
- // useState only sets the value once, to synch props to state need useEffect
192
- (0, _react.useEffect)(function () {
193
- setLabel(mark.label);
194
- }, [mark.label]);
195
-
196
- // pick up the change to debouncedLabel and save it
197
- (0, _react.useEffect)(function () {
198
- if (typeof debouncedLabel === 'string' && debouncedLabel !== mark.label) {
199
- props.onChange(debouncedLabel);
200
- }
201
- }, [debouncedLabel]);
202
- var rect = input ? input.getBoundingClientRect() : {
203
- width: 0,
204
- height: 0
205
- };
206
- var pos = position(graphProps, mark, rect);
207
- var leftTop = coordinates(graphProps, mark, rect, pos);
208
- var style = _objectSpread({
209
- position: 'fixed',
210
- pointerEvents: 'auto',
211
- display: 'flex',
212
- alignItems: 'center',
213
- gap: '3px'
214
- }, leftTop);
215
- var secondLabelStyle = _objectSpread(_objectSpread({}, style), {}, {
216
- top: leftTop.top + 25
217
- });
218
- var disabledInput = disabled || mark.disabled;
219
- var renderInput = function renderInput(inputStyle, labelValue) {
220
- return /*#__PURE__*/_react["default"].createElement(LabelInput, {
221
- _ref: _ref,
222
- externalInputRef: externalInputRef,
223
- label: labelValue,
224
- disabled: disabledInput,
225
- inputStyle: inputStyle,
226
- onChange: onChange
227
- });
228
- };
229
- var studentInputStyle = getStudentInputStyles();
230
- if (correctness === 'correct' && correctnesslabel === 'correct' && correctlabel) {
231
- return /*#__PURE__*/_react["default"].createElement(StyledInputCorrect, {
232
- style: style
233
- }, /*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
234
- type: "correct"
235
- }), renderInput(studentInputStyle, correctlabel));
236
- }
237
-
238
- // avoid rendering empty label when a correct point without label was provided
239
- if (correctness === 'correct' && correctnesslabel === 'correct' && !correctlabel) {
240
- return null;
241
- }
242
- if (correctness === 'correct' && correctnesslabel === 'incorrect') {
243
- return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(StyledInputIncorrect, {
244
- style: style
245
- }, /*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
246
- type: "incorrect"
247
- }), label === '' ? /*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
248
- type: "empty",
249
- style: {
250
- marginLeft: '3px'
251
- }
252
- }) : renderInput(studentInputStyle, label)), /*#__PURE__*/_react["default"].createElement(StyledInputMissing, {
253
- style: secondLabelStyle
254
- }, renderInput(studentInputStyle, correctlabel)));
255
- }
256
- if (correctness === 'missing') {
257
- return /*#__PURE__*/_react["default"].createElement(StyledInputMissing, {
258
- style: style
259
- }, renderInput(studentInputStyle, label));
260
- }
261
- if (correctness === 'incorrect') {
262
- return /*#__PURE__*/_react["default"].createElement(StyledIncorrect, {
263
- style: style
264
- }, renderInput(studentInputStyle, label));
265
- }
266
- return /*#__PURE__*/_react["default"].createElement("div", {
267
- style: style
268
- }, renderInput(getInputStyles(theme, disabled, mark.disabled), label));
269
- };
270
- MarkLabel.propTypes = {
271
- disabled: _propTypes["default"].bool,
272
- onChange: _propTypes["default"].func,
273
- graphProps: _plot.types.GraphPropsType,
274
- inputRef: _propTypes["default"].func,
275
- mark: _propTypes["default"].object
276
- };
277
- var _default = exports["default"] = MarkLabel;
278
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcHJvcFR5cGVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9zdHlsZXMiLCJfcmVhY3RJbnB1dEF1dG9zaXplIiwiX3VzZURlYm91bmNlIiwiX3Bsb3QiLCJfcmVuZGVyVWkiLCJfbGFiZWxTdmdJY29uIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiX3R5cGVvZiIsImhhcyIsImdldCIsInNldCIsIl90IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIlN0eWxlZElucHV0Q29ycmVjdCIsInN0eWxlZCIsIl9yZWYyIiwidGhlbWUiLCJwYWRkaW5nIiwic3BhY2luZyIsImJvcmRlclJhZGl1cyIsImZvbnRTaXplIiwiYmFja2dyb3VuZENvbG9yIiwiY29sb3IiLCJkZWZhdWx0cyIsIldISVRFIiwiQ09SUkVDVF9XSVRIX0lDT04iLCJib3JkZXIiLCJjb25jYXQiLCJTdHlsZWRJbnB1dEluY29ycmVjdCIsIl9yZWYzIiwiSU5DT1JSRUNUX1dJVEhfSUNPTiIsIlN0eWxlZElucHV0TWlzc2luZyIsIl9yZWY0IiwiTUlTU0lOR19XSVRIX0lDT04iLCJmb250V2VpZ2h0IiwiU3R5bGVkSW5jb3JyZWN0IiwiZ2V0SW5wdXRTdHlsZXMiLCJkaXNhYmxlZCIsIm1hcmtEaXNhYmxlZCIsImZvbnRGYW1pbHkiLCJ0eXBvZ3JhcGh5IiwiUFJJTUFSWV9EQVJLIiwiU0VDT05EQVJZIiwiV2Via2l0T3BhY2l0eSIsInVuZGVmaW5lZCIsIldlYmtpdFRleHRGaWxsQ29sb3IiLCJnZXRTdHVkZW50SW5wdXRTdHlsZXMiLCJwb3NpdGlvbiIsImV4cG9ydHMiLCJncmFwaFByb3BzIiwibWFyayIsInJlY3QiLCJ3aWR0aCIsImhlaWdodCIsInNjYWxlIiwiZG9tYWluIiwicmFuZ2UiLCJzaGlmdCIsInJpZ2h0RWRnZSIsIngiLCJib3R0b21FZGdlIiwieSIsImgiLCJtYXgiLCJ2IiwibWluIiwiY29vcmRpbmF0ZXMiLCJsZWZ0IiwidG9wIiwiTGFiZWxJbnB1dCIsIl9yZWY1IiwiX3JlZiIsImV4dGVybmFsSW5wdXRSZWYiLCJsYWJlbCIsImlucHV0U3R5bGUiLCJvbkNoYW5nZSIsImNyZWF0ZUVsZW1lbnQiLCJpbnB1dFJlZiIsInZhbHVlIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiZnVuYyIsInN0cmluZyIsImJvb2wiLCJvYmplY3QiLCJNYXJrTGFiZWwiLCJwcm9wcyIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5MiIsImlucHV0Iiwic2V0SW5wdXQiLCJ1c2VDYWxsYmFjayIsIm5vZGUiLCJ1c2VUaGVtZSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0Iiwic2V0TGFiZWwiLCJjb3JyZWN0bmVzcyIsImNvcnJlY3RuZXNzbGFiZWwiLCJjb3JyZWN0bGFiZWwiLCJ0YXJnZXQiLCJkZWJvdW5jZWRMYWJlbCIsInVzZURlYm91bmNlIiwidXNlRWZmZWN0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwicG9zIiwibGVmdFRvcCIsInN0eWxlIiwicG9pbnRlckV2ZW50cyIsImRpc3BsYXkiLCJhbGlnbkl0ZW1zIiwiZ2FwIiwic2Vjb25kTGFiZWxTdHlsZSIsImRpc2FibGVkSW5wdXQiLCJyZW5kZXJJbnB1dCIsImxhYmVsVmFsdWUiLCJzdHVkZW50SW5wdXRTdHlsZSIsInR5cGUiLCJGcmFnbWVudCIsIm1hcmdpbkxlZnQiLCJ0eXBlcyIsIkdyYXBoUHJvcHNUeXBlIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi9zcmMvbWFyay1sYWJlbC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IHN0eWxlZCwgdXNlVGhlbWUgfSBmcm9tICdAbXVpL21hdGVyaWFsL3N0eWxlcyc7XG5pbXBvcnQgQXV0b3NpemVJbnB1dCBmcm9tICdyZWFjdC1pbnB1dC1hdXRvc2l6ZSc7XG5pbXBvcnQgeyB1c2VEZWJvdW5jZSB9IGZyb20gJy4vdXNlLWRlYm91bmNlJztcbmltcG9ydCB7IHR5cGVzIH0gZnJvbSAnQHBpZS1saWIvcGxvdCc7XG5pbXBvcnQgeyBjb2xvciB9IGZyb20gJ0BwaWUtbGliL3JlbmRlci11aSc7XG5pbXBvcnQgU3ZnSWNvbiBmcm9tICcuL2xhYmVsLXN2Zy1pY29uJztcblxuY29uc3QgU3R5bGVkSW5wdXRDb3JyZWN0ID0gc3R5bGVkKCdkaXYnKSgoeyB0aGVtZSB9KSA9PiAoe1xuICBmbG9hdDogJ3JpZ2h0JyxcbiAgcGFkZGluZzogdGhlbWUuc3BhY2luZygwLjUpLFxuICBib3JkZXJSYWRpdXM6ICc0cHgnLFxuICBmb250U2l6ZTogJzEwcHgnLFxuICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLmRlZmF1bHRzLldISVRFLFxuICBjb2xvcjogY29sb3IuZGVmYXVsdHMuQ09SUkVDVF9XSVRIX0lDT04sXG4gIGJvcmRlcjogYHNvbGlkIDFweCAke2NvbG9yLmRlZmF1bHRzLkNPUlJFQ1RfV0lUSF9JQ09OfWAsXG59KSk7XG5cbmNvbnN0IFN0eWxlZElucHV0SW5jb3JyZWN0ID0gc3R5bGVkKCdkaXYnKSgoeyB0aGVtZSB9KSA9PiAoe1xuICBmbG9hdDogJ3JpZ2h0JyxcbiAgcGFkZGluZzogdGhlbWUuc3BhY2luZygwLjUpLFxuICBib3JkZXJSYWRpdXM6ICc0cHgnLFxuICBmb250U2l6ZTogJzEwcHgnLFxuICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLmRlZmF1bHRzLldISVRFLFxuICBjb2xvcjogY29sb3IuZGVmYXVsdHMuSU5DT1JSRUNUX1dJVEhfSUNPTixcbiAgYm9yZGVyOiBgc29saWQgMXB4ICR7Y29sb3IuZGVmYXVsdHMuSU5DT1JSRUNUX1dJVEhfSUNPTn1gLFxufSkpO1xuXG5jb25zdCBTdHlsZWRJbnB1dE1pc3NpbmcgPSBzdHlsZWQoJ2RpdicpKCh7IHRoZW1lIH0pID0+ICh7XG4gIGZsb2F0OiAncmlnaHQnLFxuICBwYWRkaW5nOiB0aGVtZS5zcGFjaW5nKDAuNSksXG4gIGJvcmRlclJhZGl1czogJzRweCcsXG4gIGZvbnRTaXplOiAnMTBweCcsXG4gIGJhY2tncm91bmRDb2xvcjogY29sb3IuZGVmYXVsdHMuV0hJVEUsXG4gIGNvbG9yOiBjb2xvci5kZWZhdWx0cy5NSVNTSU5HX1dJVEhfSUNPTixcbiAgYm9yZGVyOiBgc29saWQgMXB4ICR7Y29sb3IuZGVmYXVsdHMuTUlTU0lOR19XSVRIX0lDT059YCxcbiAgZm9udFdlaWdodDogJ2JvbGQnLFxufSkpO1xuXG5jb25zdCBTdHlsZWRJbmNvcnJlY3QgPSBzdHlsZWQoJ2RpdicpKCgpID0+ICh7XG4gIGZsb2F0OiAncmlnaHQnLFxuICBwYWRkaW5nOiAwLFxuICBib3JkZXJSYWRpdXM6ICc0cHgnLFxuICBmb250U2l6ZTogJzEwcHgnLFxuICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLmRlZmF1bHRzLldISVRFLFxuICBjb2xvcjogY29sb3IuZGVmYXVsdHMuSU5DT1JSRUNUX1dJVEhfSUNPTixcbiAgZm9udFdlaWdodDogJ2JvbGQnLFxufSkpO1xuXG5jb25zdCBnZXRJbnB1dFN0eWxlcyA9ICh0aGVtZSwgZGlzYWJsZWQsIG1hcmtEaXNhYmxlZCkgPT4gKHtcbiAgZmxvYXQ6ICdyaWdodCcsXG4gIHBhZGRpbmc6IHRoZW1lLnNwYWNpbmcoMC41KSxcbiAgZm9udEZhbWlseTogdGhlbWUudHlwb2dyYXBoeS5mb250RmFtaWx5LFxuICBmb250U2l6ZTogJzEwcHgnLFxuICBib3JkZXI6IGRpc2FibGVkIFxuICAgID8gYHNvbGlkIDFweCAke2NvbG9yLmRlZmF1bHRzLlBSSU1BUllfREFSS31gXG4gICAgOiBtYXJrRGlzYWJsZWQgXG4gICAgICA/IGBzb2xpZCAxcHggJHtjb2xvci5kaXNhYmxlZCgpfWBcbiAgICAgIDogYHNvbGlkIDFweCAke2NvbG9yLmRlZmF1bHRzLlNFQ09OREFSWX1gLFxuICBib3JkZXJSYWRpdXM6ICczcHgnLFxuICBjb2xvcjogbWFya0Rpc2FibGVkID8gY29sb3IuZGlzYWJsZWQoKSA6IGNvbG9yLmRlZmF1bHRzLlBSSU1BUllfREFSSyxcbiAgYmFja2dyb3VuZENvbG9yOiBjb2xvci5kZWZhdWx0cy5XSElURSxcbiAgV2Via2l0T3BhY2l0eTogZGlzYWJsZWQgPyAnMScgOiB1bmRlZmluZWQsXG4gIFdlYmtpdFRleHRGaWxsQ29sb3I6IG1hcmtEaXNhYmxlZCA/IGNvbG9yLmRpc2FibGVkKCkgOiB1bmRlZmluZWQsXG59KTtcblxuY29uc3QgZ2V0U3R1ZGVudElucHV0U3R5bGVzID0gKCkgPT4gKHtcbiAgcGFkZGluZzogJzAnLFxuICBib3JkZXI6ICdub25lJyxcbiAgY29sb3I6ICdpbmhlcml0JyxcbiAgZm9udFdlaWdodDogJ2JvbGQnLFxufSk7XG5cbmV4cG9ydCBjb25zdCBwb3NpdGlvbiA9IChncmFwaFByb3BzLCBtYXJrLCByZWN0ID0geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0pID0+IHtcbiAgY29uc3QgeyBzY2FsZSwgZG9tYWluLCByYW5nZSB9ID0gZ3JhcGhQcm9wcztcbiAgY29uc3Qgc2hpZnQgPSA1O1xuXG4gIGNvbnN0IHJpZ2h0RWRnZSA9IHNjYWxlLngobWFyay54KSArIHJlY3Qud2lkdGggKyBzaGlmdDtcbiAgY29uc3QgYm90dG9tRWRnZSA9IHNjYWxlLnkobWFyay55KSArIHJlY3QuaGVpZ2h0ICsgc2hpZnQ7XG5cbiAgY29uc3QgaCA9IHJpZ2h0RWRnZSA+PSBzY2FsZS54KGRvbWFpbi5tYXgpID8gJ2xlZnQnIDogJ3JpZ2h0JztcbiAgY29uc3QgdiA9IGJvdHRvbUVkZ2UgPj0gc2NhbGUueShyYW5nZS5taW4pID8gJ3RvcCcgOiAnYm90dG9tJztcblxuICByZXR1cm4gYCR7dn0tJHtofWA7XG59O1xuXG5leHBvcnQgY29uc3QgY29vcmRpbmF0ZXMgPSAoZ3JhcGhQcm9wcywgbWFyaywgcmVjdCA9IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9LCBwb3NpdGlvbikgPT4ge1xuICBjb25zdCB7IHNjYWxlIH0gPSBncmFwaFByb3BzO1xuICBjb25zdCBzaGlmdCA9IDU7XG5cbiAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgIGNhc2UgJ2JvdHRvbS1yaWdodCc6XG4gICAgICByZXR1cm4geyBsZWZ0OiBzY2FsZS54KG1hcmsueCkgKyBzaGlmdCwgdG9wOiBzY2FsZS55KG1hcmsueSkgKyBzaGlmdCB9O1xuICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzpcbiAgICAgIHJldHVybiB7IGxlZnQ6IHNjYWxlLngobWFyay54KSAtIHNoaWZ0IC0gcmVjdC53aWR0aCwgdG9wOiBzY2FsZS55KG1hcmsueSkgKyBzaGlmdCB9O1xuICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICAgIHJldHVybiB7IGxlZnQ6IHNjYWxlLngobWFyay54KSAtIHNoaWZ0IC0gcmVjdC53aWR0aCwgdG9wOiBzY2FsZS55KG1hcmsueSkgLSBzaGlmdCAtIHJlY3QuaGVpZ2h0IH07XG4gICAgY2FzZSAndG9wLXJpZ2h0JzpcbiAgICAgIHJldHVybiB7IGxlZnQ6IHNjYWxlLngobWFyay54KSArIHNoaWZ0LCB0b3A6IHNjYWxlLnkobWFyay55KSAtIHNoaWZ0IC0gcmVjdC5oZWlnaHQgfTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHt9O1xuICB9XG59O1xuXG5jb25zdCBMYWJlbElucHV0ID0gKHsgX3JlZiwgZXh0ZXJuYWxJbnB1dFJlZiwgbGFiZWwsIGRpc2FibGVkLCBpbnB1dFN0eWxlLCBvbkNoYW5nZSB9KSA9PiAoXG4gIDxBdXRvc2l6ZUlucHV0XG4gICAgaW5wdXRSZWY9eyhyKSA9PiB7XG4gICAgICBfcmVmKHIpO1xuICAgICAgZXh0ZXJuYWxJbnB1dFJlZihyKTtcbiAgICB9fVxuICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICBpbnB1dFN0eWxlPXtpbnB1dFN0eWxlfVxuICAgIHZhbHVlPXtsYWJlbH1cbiAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gIC8+XG4pO1xuXG5MYWJlbElucHV0LnByb3BUeXBlcyA9IHtcbiAgX3JlZjogUHJvcFR5cGVzLmZ1bmMsXG4gIGV4dGVybmFsSW5wdXRSZWY6IFByb3BUeXBlcy5mdW5jLFxuICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBpbnB1dFN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG59O1xuXG5leHBvcnQgY29uc3QgTWFya0xhYmVsID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IFtpbnB1dCwgc2V0SW5wdXRdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IF9yZWYgPSB1c2VDYWxsYmFjaygobm9kZSkgPT4gc2V0SW5wdXQobm9kZSkpO1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG5cbiAgY29uc3QgeyBtYXJrLCBncmFwaFByb3BzLCBkaXNhYmxlZCwgaW5wdXRSZWY6IGV4dGVybmFsSW5wdXRSZWYgfSA9IHByb3BzO1xuXG4gIGNvbnN0IFtsYWJlbCwgc2V0TGFiZWxdID0gdXNlU3RhdGUobWFyay5sYWJlbCk7XG4gIGNvbnN0IHsgY29ycmVjdG5lc3MsIGNvcnJlY3RuZXNzbGFiZWwsIGNvcnJlY3RsYWJlbCB9ID0gbWFyaztcbiAgY29uc3Qgb25DaGFuZ2UgPSAoZSkgPT4gc2V0TGFiZWwoZS50YXJnZXQudmFsdWUpO1xuXG4gIGNvbnN0IGRlYm91bmNlZExhYmVsID0gdXNlRGVib3VuY2UobGFiZWwsIDIwMCk7XG5cbiAgLy8gdXNlU3RhdGUgb25seSBzZXRzIHRoZSB2YWx1ZSBvbmNlLCB0byBzeW5jaCBwcm9wcyB0byBzdGF0ZSBuZWVkIHVzZUVmZmVjdFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldExhYmVsKG1hcmsubGFiZWwpO1xuICB9LCBbbWFyay5sYWJlbF0pO1xuXG4gIC8vIHBpY2sgdXAgdGhlIGNoYW5nZSB0byBkZWJvdW5jZWRMYWJlbCBhbmQgc2F2ZSBpdFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0eXBlb2YgZGVib3VuY2VkTGFiZWwgPT09ICdzdHJpbmcnICYmIGRlYm91bmNlZExhYmVsICE9PSBtYXJrLmxhYmVsKSB7XG4gICAgICBwcm9wcy5vbkNoYW5nZShkZWJvdW5jZWRMYWJlbCk7XG4gICAgfVxuICB9LCBbZGVib3VuY2VkTGFiZWxdKTtcblxuICBjb25zdCByZWN0ID0gaW5wdXQgPyBpbnB1dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSA6IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xuICBjb25zdCBwb3MgPSBwb3NpdGlvbihncmFwaFByb3BzLCBtYXJrLCByZWN0KTtcbiAgY29uc3QgbGVmdFRvcCA9IGNvb3JkaW5hdGVzKGdyYXBoUHJvcHMsIG1hcmssIHJlY3QsIHBvcyk7XG5cbiAgY29uc3Qgc3R5bGUgPSB7XG4gICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgcG9pbnRlckV2ZW50czogJ2F1dG8nLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBnYXA6ICczcHgnLFxuICAgIC4uLmxlZnRUb3AsXG4gIH07XG5cbiAgY29uc3Qgc2Vjb25kTGFiZWxTdHlsZSA9IHtcbiAgICAuLi5zdHlsZSxcbiAgICB0b3A6IGxlZnRUb3AudG9wICsgMjUsXG4gIH07XG5cbiAgY29uc3QgZGlzYWJsZWRJbnB1dCA9IGRpc2FibGVkIHx8IG1hcmsuZGlzYWJsZWQ7XG5cbiAgY29uc3QgcmVuZGVySW5wdXQgPSAoaW5wdXRTdHlsZSwgbGFiZWxWYWx1ZSkgPT4gKFxuICAgIDxMYWJlbElucHV0XG4gICAgICBfcmVmPXtfcmVmfVxuICAgICAgZXh0ZXJuYWxJbnB1dFJlZj17ZXh0ZXJuYWxJbnB1dFJlZn1cbiAgICAgIGxhYmVsPXtsYWJlbFZhbHVlfVxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkSW5wdXR9XG4gICAgICBpbnB1dFN0eWxlPXtpbnB1dFN0eWxlfVxuICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgIC8+XG4gICk7XG5cbiAgY29uc3Qgc3R1ZGVudElucHV0U3R5bGUgPSBnZXRTdHVkZW50SW5wdXRTdHlsZXMoKTtcblxuICBpZiAoY29ycmVjdG5lc3MgPT09ICdjb3JyZWN0JyAmJiBjb3JyZWN0bmVzc2xhYmVsID09PSAnY29ycmVjdCcgJiYgY29ycmVjdGxhYmVsKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdHlsZWRJbnB1dENvcnJlY3Qgc3R5bGU9e3N0eWxlfT5cbiAgICAgICAgPFN2Z0ljb24gdHlwZT1cImNvcnJlY3RcIiAvPlxuICAgICAgICB7cmVuZGVySW5wdXQoc3R1ZGVudElucHV0U3R5bGUsIGNvcnJlY3RsYWJlbCl9XG4gICAgICA8L1N0eWxlZElucHV0Q29ycmVjdD5cbiAgICApO1xuICB9XG5cbiAgLy8gYXZvaWQgcmVuZGVyaW5nIGVtcHR5IGxhYmVsIHdoZW4gYSBjb3JyZWN0IHBvaW50IHdpdGhvdXQgbGFiZWwgIHdhcyBwcm92aWRlZFxuICBpZiAoY29ycmVjdG5lc3MgPT09ICdjb3JyZWN0JyAmJiBjb3JyZWN0bmVzc2xhYmVsID09PSAnY29ycmVjdCcgJiYgIWNvcnJlY3RsYWJlbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGNvcnJlY3RuZXNzID09PSAnY29ycmVjdCcgJiYgY29ycmVjdG5lc3NsYWJlbCA9PT0gJ2luY29ycmVjdCcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPFN0eWxlZElucHV0SW5jb3JyZWN0IHN0eWxlPXtzdHlsZX0+XG4gICAgICAgICAgPFN2Z0ljb24gdHlwZT1cImluY29ycmVjdFwiIC8+XG4gICAgICAgICAge2xhYmVsID09PSAnJyA/IChcbiAgICAgICAgICAgIDxTdmdJY29uIHR5cGU9XCJlbXB0eVwiIHN0eWxlPXt7IG1hcmdpbkxlZnQ6ICczcHgnIH19IC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIHJlbmRlcklucHV0KHN0dWRlbnRJbnB1dFN0eWxlLCBsYWJlbClcbiAgICAgICAgICApfVxuICAgICAgICA8L1N0eWxlZElucHV0SW5jb3JyZWN0PlxuICAgICAgICA8U3R5bGVkSW5wdXRNaXNzaW5nIHN0eWxlPXtzZWNvbmRMYWJlbFN0eWxlfT5cbiAgICAgICAgICB7cmVuZGVySW5wdXQoc3R1ZGVudElucHV0U3R5bGUsIGNvcnJlY3RsYWJlbCl9XG4gICAgICAgIDwvU3R5bGVkSW5wdXRNaXNzaW5nPlxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIGlmIChjb3JyZWN0bmVzcyA9PT0gJ21pc3NpbmcnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdHlsZWRJbnB1dE1pc3Npbmcgc3R5bGU9e3N0eWxlfT5cbiAgICAgICAge3JlbmRlcklucHV0KHN0dWRlbnRJbnB1dFN0eWxlLCBsYWJlbCl9XG4gICAgICA8L1N0eWxlZElucHV0TWlzc2luZz5cbiAgICApO1xuICB9XG5cbiAgaWYgKGNvcnJlY3RuZXNzID09PSAnaW5jb3JyZWN0Jykge1xuICAgIHJldHVybiAoXG4gICAgICA8U3R5bGVkSW5jb3JyZWN0IHN0eWxlPXtzdHlsZX0+XG4gICAgICAgIHtyZW5kZXJJbnB1dChzdHVkZW50SW5wdXRTdHlsZSwgbGFiZWwpfVxuICAgICAgPC9TdHlsZWRJbmNvcnJlY3Q+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBzdHlsZT17c3R5bGV9PlxuICAgICAge3JlbmRlcklucHV0KFxuICAgICAgICBnZXRJbnB1dFN0eWxlcyh0aGVtZSwgZGlzYWJsZWQsIG1hcmsuZGlzYWJsZWQpLFxuICAgICAgICBsYWJlbCxcbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5NYXJrTGFiZWwucHJvcFR5cGVzID0ge1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgZ3JhcGhQcm9wczogdHlwZXMuR3JhcGhQcm9wc1R5cGUsXG4gIGlucHV0UmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgbWFyazogUHJvcFR5cGVzLm9iamVjdCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE1hcmtMYWJlbDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFVBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLE9BQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLG1CQUFBLEdBQUFGLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSyxZQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxLQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxTQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxhQUFBLEdBQUFOLHNCQUFBLENBQUFGLE9BQUE7QUFBdUMsU0FBQUQsd0JBQUFVLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFaLHVCQUFBLFlBQUFBLHdCQUFBVSxDQUFBLEVBQUFDLENBQUEsU0FBQUEsQ0FBQSxJQUFBRCxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxTQUFBTCxDQUFBLE1BQUFNLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLEtBQUFDLFNBQUEsbUJBQUFULENBQUEsaUJBQUFBLENBQUEsZ0JB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
@@ -1 +0,0 @@
1
- {"version":3,"file":"mark-label.js","names":["_react","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_styles","_reactInputAutosize","_useDebounce","_plot","_renderUi","_labelSvgIcon","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","StyledInputCorrect","styled","_ref2","theme","padding","spacing","borderRadius","fontSize","backgroundColor","color","defaults","WHITE","CORRECT_WITH_ICON","border","concat","StyledInputIncorrect","_ref3","INCORRECT_WITH_ICON","StyledInputMissing","_ref4","MISSING_WITH_ICON","fontWeight","StyledIncorrect","getInputStyles","disabled","markDisabled","fontFamily","typography","PRIMARY_DARK","SECONDARY","WebkitOpacity","undefined","WebkitTextFillColor","getStudentInputStyles","position","exports","graphProps","mark","rect","width","height","scale","domain","range","shift","rightEdge","x","bottomEdge","y","h","max","v","min","coordinates","left","top","LabelInput","_ref5","_ref","externalInputRef","label","inputStyle","onChange","createElement","inputRef","value","propTypes","PropTypes","func","string","bool","object","MarkLabel","props","_useState","useState","_useState2","_slicedToArray2","input","setInput","useCallback","node","useTheme","_useState3","_useState4","setLabel","correctness","correctnesslabel","correctlabel","target","debouncedLabel","useDebounce","useEffect","getBoundingClientRect","pos","leftTop","style","pointerEvents","display","alignItems","gap","secondLabelStyle","disabledInput","renderInput","labelValue","studentInputStyle","type","Fragment","marginLeft","types","GraphPropsType","_default"],"sources":["../src/mark-label.jsx"],"sourcesContent":["import React, { useState, useCallback, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { styled, useTheme } from '@mui/material/styles';\nimport AutosizeInput from 'react-input-autosize';\nimport { useDebounce } from './use-debounce';\nimport { types } from '@pie-lib/plot';\nimport { color } from '@pie-lib/render-ui';\nimport SvgIcon from './label-svg-icon';\n\nconst StyledInputCorrect = styled('div')(({ theme }) => ({\n float: 'right',\n padding: theme.spacing(0.5),\n borderRadius: '4px',\n fontSize: '10px',\n backgroundColor: color.defaults.WHITE,\n color: color.defaults.CORRECT_WITH_ICON,\n border: `solid 1px ${color.defaults.CORRECT_WITH_ICON}`,\n}));\n\nconst StyledInputIncorrect = styled('div')(({ theme }) => ({\n float: 'right',\n padding: theme.spacing(0.5),\n borderRadius: '4px',\n fontSize: '10px',\n backgroundColor: color.defaults.WHITE,\n color: color.defaults.INCORRECT_WITH_ICON,\n border: `solid 1px ${color.defaults.INCORRECT_WITH_ICON}`,\n}));\n\nconst StyledInputMissing = styled('div')(({ theme }) => ({\n float: 'right',\n padding: theme.spacing(0.5),\n borderRadius: '4px',\n fontSize: '10px',\n backgroundColor: color.defaults.WHITE,\n color: color.defaults.MISSING_WITH_ICON,\n border: `solid 1px ${color.defaults.MISSING_WITH_ICON}`,\n fontWeight: 'bold',\n}));\n\nconst StyledIncorrect = styled('div')(() => ({\n float: 'right',\n padding: 0,\n borderRadius: '4px',\n fontSize: '10px',\n backgroundColor: color.defaults.WHITE,\n color: color.defaults.INCORRECT_WITH_ICON,\n fontWeight: 'bold',\n}));\n\nconst getInputStyles = (theme, disabled, markDisabled) => ({\n float: 'right',\n padding: theme.spacing(0.5),\n fontFamily: theme.typography.fontFamily,\n fontSize: '10px',\n border: disabled \n ? `solid 1px ${color.defaults.PRIMARY_DARK}`\n : markDisabled \n ? `solid 1px ${color.disabled()}`\n : `solid 1px ${color.defaults.SECONDARY}`,\n borderRadius: '3px',\n color: markDisabled ? color.disabled() : color.defaults.PRIMARY_DARK,\n backgroundColor: color.defaults.WHITE,\n WebkitOpacity: disabled ? '1' : undefined,\n WebkitTextFillColor: markDisabled ? color.disabled() : undefined,\n});\n\nconst getStudentInputStyles = () => ({\n padding: '0',\n border: 'none',\n color: 'inherit',\n fontWeight: 'bold',\n});\n\nexport const position = (graphProps, mark, rect = { width: 0, height: 0 }) => {\n const { scale, domain, range } = graphProps;\n const shift = 5;\n\n const rightEdge = scale.x(mark.x) + rect.width + shift;\n const bottomEdge = scale.y(mark.y) + rect.height + shift;\n\n const h = rightEdge >= scale.x(domain.max) ? 'left' : 'right';\n const v = bottomEdge >= scale.y(range.min) ? 'top' : 'bottom';\n\n return `${v}-${h}`;\n};\n\nexport const coordinates = (graphProps, mark, rect = { width: 0, height: 0 }, position) => {\n const { scale } = graphProps;\n const shift = 5;\n\n switch (position) {\n case 'bottom-right':\n return { left: scale.x(mark.x) + shift, top: scale.y(mark.y) + shift };\n case 'bottom-left':\n return { left: scale.x(mark.x) - shift - rect.width, top: scale.y(mark.y) + shift };\n case 'top-left':\n return { left: scale.x(mark.x) - shift - rect.width, top: scale.y(mark.y) - shift - rect.height };\n case 'top-right':\n return { left: scale.x(mark.x) + shift, top: scale.y(mark.y) - shift - rect.height };\n default:\n return {};\n }\n};\n\nconst LabelInput = ({ _ref, externalInputRef, label, disabled, inputStyle, onChange }) => (\n <AutosizeInput\n inputRef={(r) => {\n _ref(r);\n externalInputRef(r);\n }}\n disabled={disabled}\n inputStyle={inputStyle}\n value={label}\n onChange={onChange}\n />\n);\n\nLabelInput.propTypes = {\n _ref: PropTypes.func,\n externalInputRef: PropTypes.func,\n label: PropTypes.string,\n disabled: PropTypes.bool,\n inputStyle: PropTypes.object,\n onChange: PropTypes.func,\n};\n\nexport const MarkLabel = (props) => {\n const [input, setInput] = useState(null);\n const _ref = useCallback((node) => setInput(node));\n const theme = useTheme();\n\n const { mark, graphProps, disabled, inputRef: externalInputRef } = props;\n\n const [label, setLabel] = useState(mark.label);\n const { correctness, correctnesslabel, correctlabel } = mark;\n const onChange = (e) => setLabel(e.target.value);\n\n const debouncedLabel = useDebounce(label, 200);\n\n // useState only sets the value once, to synch props to state need useEffect\n useEffect(() => {\n setLabel(mark.label);\n }, [mark.label]);\n\n // pick up the change to debouncedLabel and save it\n useEffect(() => {\n if (typeof debouncedLabel === 'string' && debouncedLabel !== mark.label) {\n props.onChange(debouncedLabel);\n }\n }, [debouncedLabel]);\n\n const rect = input ? input.getBoundingClientRect() : { width: 0, height: 0 };\n const pos = position(graphProps, mark, rect);\n const leftTop = coordinates(graphProps, mark, rect, pos);\n\n const style = {\n position: 'fixed',\n pointerEvents: 'auto',\n display: 'flex',\n alignItems: 'center',\n gap: '3px',\n ...leftTop,\n };\n\n const secondLabelStyle = {\n ...style,\n top: leftTop.top + 25,\n };\n\n const disabledInput = disabled || mark.disabled;\n\n const renderInput = (inputStyle, labelValue) => (\n <LabelInput\n _ref={_ref}\n externalInputRef={externalInputRef}\n label={labelValue}\n disabled={disabledInput}\n inputStyle={inputStyle}\n onChange={onChange}\n />\n );\n\n const studentInputStyle = getStudentInputStyles();\n\n if (correctness === 'correct' && correctnesslabel === 'correct' && correctlabel) {\n return (\n <StyledInputCorrect style={style}>\n <SvgIcon type=\"correct\" />\n {renderInput(studentInputStyle, correctlabel)}\n </StyledInputCorrect>\n );\n }\n\n // avoid rendering empty label when a correct point without label was provided\n if (correctness === 'correct' && correctnesslabel === 'correct' && !correctlabel) {\n return null;\n }\n\n if (correctness === 'correct' && correctnesslabel === 'incorrect') {\n return (\n <>\n <StyledInputIncorrect style={style}>\n <SvgIcon type=\"incorrect\" />\n {label === '' ? (\n <SvgIcon type=\"empty\" style={{ marginLeft: '3px' }} />\n ) : (\n renderInput(studentInputStyle, label)\n )}\n </StyledInputIncorrect>\n <StyledInputMissing style={secondLabelStyle}>\n {renderInput(studentInputStyle, correctlabel)}\n </StyledInputMissing>\n </>\n );\n }\n\n if (correctness === 'missing') {\n return (\n <StyledInputMissing style={style}>\n {renderInput(studentInputStyle, label)}\n </StyledInputMissing>\n );\n }\n\n if (correctness === 'incorrect') {\n return (\n <StyledIncorrect style={style}>\n {renderInput(studentInputStyle, label)}\n </StyledIncorrect>\n );\n }\n\n return (\n <div style={style}>\n {renderInput(\n getInputStyles(theme, disabled, mark.disabled),\n label,\n )}\n </div>\n );\n};\n\nMarkLabel.propTypes = {\n disabled: PropTypes.bool,\n onChange: PropTypes.func,\n graphProps: types.GraphPropsType,\n inputRef: PropTypes.func,\n mark: PropTypes.object,\n};\n\nexport default MarkLabel;\n"],"mappings":"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","ignoreList":[]}