@pie-element/drawing-response 10.0.1 → 10.2.0-mui-update.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 (95) hide show
  1. package/CHANGELOG.md +74 -0
  2. package/configure/CHANGELOG.md +74 -0
  3. package/configure/lib/__tests__/image-container.test.js +176 -0
  4. package/configure/lib/__tests__/index.test.js +53 -0
  5. package/configure/lib/__tests__/root.test.js +84 -0
  6. package/configure/lib/button.js +24 -48
  7. package/configure/lib/button.js.map +1 -1
  8. package/configure/lib/defaults.js +3 -4
  9. package/configure/lib/defaults.js.map +1 -1
  10. package/configure/lib/image-container.js +239 -328
  11. package/configure/lib/image-container.js.map +1 -1
  12. package/configure/lib/index.js +116 -183
  13. package/configure/lib/index.js.map +1 -1
  14. package/configure/lib/root.js +195 -261
  15. package/configure/lib/root.js.map +1 -1
  16. package/configure/package.json +9 -7
  17. package/configure/src/__tests__/index.test.js +10 -4
  18. package/configure/src/button.jsx +14 -24
  19. package/configure/src/image-container.jsx +73 -77
  20. package/configure/src/index.js +12 -2
  21. package/configure/src/root.jsx +24 -25
  22. package/controller/CHANGELOG.md +32 -0
  23. package/controller/lib/__tests__/index.test.js +177 -0
  24. package/controller/lib/defaults.js +3 -4
  25. package/controller/lib/defaults.js.map +1 -1
  26. package/controller/lib/index.js +40 -66
  27. package/controller/lib/index.js.map +1 -1
  28. package/controller/package.json +1 -1
  29. package/docs/demo/pie.manifest.json +11 -0
  30. package/lib/__tests__/drawing-index-test.js +36 -0
  31. package/lib/drawing-response/__tests__/container.test.js +66 -0
  32. package/lib/drawing-response/__tests__/drawable-helper.test.js +23 -0
  33. package/lib/drawing-response/__tests__/drawing-main.test.js +684 -0
  34. package/lib/drawing-response/__tests__/factory.test.js +15 -0
  35. package/lib/drawing-response/button.js +36 -61
  36. package/lib/drawing-response/button.js.map +1 -1
  37. package/lib/drawing-response/constants.js +3 -4
  38. package/lib/drawing-response/constants.js.map +1 -1
  39. package/lib/drawing-response/container.js +271 -352
  40. package/lib/drawing-response/container.js.map +1 -1
  41. package/lib/drawing-response/drawable-circle.js +66 -105
  42. package/lib/drawing-response/drawable-circle.js.map +1 -1
  43. package/lib/drawing-response/drawable-eraser.js +51 -87
  44. package/lib/drawing-response/drawable-eraser.js.map +1 -1
  45. package/lib/drawing-response/drawable-free-path.js +57 -98
  46. package/lib/drawing-response/drawable-free-path.js.map +1 -1
  47. package/lib/drawing-response/drawable-helper.js +17 -29
  48. package/lib/drawing-response/drawable-helper.js.map +1 -1
  49. package/lib/drawing-response/drawable-image.js +31 -50
  50. package/lib/drawing-response/drawable-image.js.map +1 -1
  51. package/lib/drawing-response/drawable-line.js +61 -100
  52. package/lib/drawing-response/drawable-line.js.map +1 -1
  53. package/lib/drawing-response/drawable-main.js +274 -346
  54. package/lib/drawing-response/drawable-main.js.map +1 -1
  55. package/lib/drawing-response/drawable-palette.js +124 -167
  56. package/lib/drawing-response/drawable-palette.js.map +1 -1
  57. package/lib/drawing-response/drawable-rectangle.js +66 -105
  58. package/lib/drawing-response/drawable-rectangle.js.map +1 -1
  59. package/lib/drawing-response/drawable-text.js +202 -314
  60. package/lib/drawing-response/drawable-text.js.map +1 -1
  61. package/lib/drawing-response/drawable-transformer.js +37 -80
  62. package/lib/drawing-response/drawable-transformer.js.map +1 -1
  63. package/lib/drawing-response/factory.js +7 -20
  64. package/lib/drawing-response/factory.js.map +1 -1
  65. package/lib/drawing-response/icon.js +9 -25
  66. package/lib/drawing-response/icon.js.map +1 -1
  67. package/lib/drawing-response/index.js +75 -117
  68. package/lib/drawing-response/index.js.map +1 -1
  69. package/lib/index.js +52 -103
  70. package/lib/index.js.map +1 -1
  71. package/package.json +14 -29
  72. package/src/drawing-response/button.jsx +23 -34
  73. package/src/drawing-response/container.jsx +39 -40
  74. package/src/drawing-response/drawable-image.jsx +17 -20
  75. package/src/drawing-response/drawable-main.jsx +67 -60
  76. package/src/drawing-response/drawable-palette.jsx +48 -54
  77. package/src/drawing-response/drawable-text.jsx +26 -38
  78. package/src/drawing-response/index.jsx +21 -20
  79. package/src/index.js +17 -2
  80. package/LICENSE.md +0 -5
  81. package/configure/node_modules/debug/CHANGELOG.md +0 -395
  82. package/configure/node_modules/debug/LICENSE +0 -19
  83. package/configure/node_modules/debug/README.md +0 -437
  84. package/configure/node_modules/debug/node.js +0 -1
  85. package/configure/node_modules/debug/package.json +0 -51
  86. package/configure/node_modules/debug/src/browser.js +0 -180
  87. package/configure/node_modules/debug/src/common.js +0 -249
  88. package/configure/node_modules/debug/src/index.js +0 -12
  89. package/configure/node_modules/debug/src/node.js +0 -177
  90. package/esm/configure.js +0 -11856
  91. package/esm/configure.js.map +0 -1
  92. package/esm/controller.js +0 -108
  93. package/esm/controller.js.map +0 -1
  94. package/esm/element.js +0 -49111
  95. package/esm/element.js.map +0 -1
@@ -1,89 +1,79 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
4
  Object.defineProperty(exports, "__esModule", {
8
5
  value: true
9
6
  });
10
- exports["default"] = exports.Container = void 0;
11
-
12
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
13
-
14
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
15
-
16
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
17
-
18
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
19
-
20
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
21
-
22
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
23
-
24
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
25
-
7
+ exports.default = exports.Container = void 0;
26
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
27
-
28
9
  var _react = _interopRequireWildcard(require("react"));
29
-
30
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
31
-
32
- var _styles = require("@material-ui/core/styles");
33
-
11
+ var _styles = require("@mui/material/styles");
34
12
  var _translator = _interopRequireDefault(require("@pie-lib/translator"));
35
-
36
13
  var _constants = _interopRequireDefault(require("./constants"));
37
-
38
14
  var _button = _interopRequireDefault(require("./button"));
39
-
40
15
  var _drawablePalette = _interopRequireDefault(require("./drawable-palette"));
41
-
42
16
  var _drawableMain = _interopRequireDefault(require("./drawable-main"));
43
-
44
17
  var _drawableText = _interopRequireDefault(require("./drawable-text"));
45
-
46
18
  var _icon = _interopRequireDefault(require("./icon"));
47
-
48
- 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); }
49
-
50
- 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; }
51
-
52
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
53
-
54
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
55
-
56
- var TOOLS = _constants["default"].tools;
57
- var translator = _translator["default"].translator;
58
- var ROGVAIV = ['red', 'orange', 'yellow', 'violet', 'blue', 'green', 'white', 'black'].map(function (c) {
59
- return {
60
- value: c,
61
- label: c
62
- };
19
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (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 (const 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
+ const {
21
+ tools: TOOLS
22
+ } = _constants.default;
23
+ const {
24
+ translator
25
+ } = _translator.default;
26
+ const BaseContainer = (0, _styles.styled)('div')(({
27
+ theme
28
+ }) => ({
29
+ marginTop: theme.spacing(2)
30
+ }));
31
+ const Box = (0, _styles.styled)('div')(({
32
+ theme
33
+ }) => ({
34
+ border: '1px solid #E0E1E6',
35
+ borderRadius: '5px',
36
+ marginTop: theme.spacing(2),
37
+ backgroundColor: '#ECEDF1'
38
+ }));
39
+ const DrawableHeight = (0, _styles.styled)('div')({
40
+ minHeight: 350,
41
+ backgroundColor: '#fff'
63
42
  });
64
-
65
- var Container = /*#__PURE__*/function (_Component) {
66
- (0, _inherits2["default"])(Container, _Component);
67
-
68
- var _super = _createSuper(Container);
69
-
70
- function Container(props) {
71
- var _this;
72
-
73
- (0, _classCallCheck2["default"])(this, Container);
74
- _this = _super.call(this, props);
75
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "checkIfToolIsDisabled", function (type) {
76
- if (_this.props.disabled) return true;
77
- var toolActive = _this.state.toolActive; // Text will never be disabled since on each "Text Entry" click a new text is added
78
-
43
+ const Toolbar = (0, _styles.styled)('div')(({
44
+ theme
45
+ }) => ({
46
+ borderBottom: '1px solid #E0E1E6',
47
+ borderTopLeftRadius: '5px',
48
+ borderTopRightRadius: '5px',
49
+ padding: '12px 8px 4px',
50
+ boxSizing: 'border-box',
51
+ maxWidth: 'calc(100% - 163px)',
52
+ // 163px is the width set on undoControls
53
+ '& button': {
54
+ marginBottom: theme.spacing(1)
55
+ }
56
+ }));
57
+ const ROGVAIV = ['red', 'orange', 'yellow', 'violet', 'blue', 'green', 'white', 'black'].map(c => ({
58
+ value: c,
59
+ label: c
60
+ }));
61
+ class Container extends _react.Component {
62
+ constructor(props) {
63
+ super(props);
64
+ (0, _defineProperty2.default)(this, "checkIfToolIsDisabled", type => {
65
+ if (this.props.disabled) return true;
66
+ const {
67
+ toolActive
68
+ } = this.state;
69
+ // Text will never be disabled since on each "Text Entry" click a new text is added
79
70
  if (type === 'Text') {
80
71
  return false;
81
72
  }
82
-
83
73
  return type === toolActive.type;
84
74
  });
85
- var TextEntry = new _drawableText["default"]();
86
- _this.state = {
75
+ const TextEntry = new _drawableText.default();
76
+ this.state = {
87
77
  scale: 1,
88
78
  drawableDimensions: {
89
79
  height: 0,
@@ -100,309 +90,238 @@ var Container = /*#__PURE__*/function (_Component) {
100
90
  }, {
101
91
  value: 'lightyellow',
102
92
  label: 'light yellow'
103
- }].concat((0, _toConsumableArray2["default"])(ROGVAIV)),
93
+ }, ...ROGVAIV],
104
94
  outlineColor: 'black',
105
95
  outlineColorList: ROGVAIV,
106
96
  paintColor: 'red',
107
97
  paintColorList: ROGVAIV,
108
- TextEntry: TextEntry
98
+ TextEntry
109
99
  };
110
- return _this;
111
100
  }
112
-
113
- (0, _createClass2["default"])(Container, [{
114
- key: "setTranslatedState",
115
- value: function setTranslatedState(language) {
116
- var translatedROGVAIV = ROGVAIV.map(function (c) {
117
- return {
118
- value: c.value,
119
- label: translator.t("drawingResponse.".concat(c.label), {
120
- lng: language
121
- })
122
- };
123
- });
124
- this.setState({
125
- fillColorList: [{
126
- value: 'transparent',
127
- label: translator.t('drawingResponse.noFill', {
128
- lng: language
129
- })
130
- }, {
131
- value: 'lightblue',
132
- label: translator.t('drawingResponse.lightblue', {
133
- lng: language
134
- })
135
- }, {
136
- value: 'lightyellow',
137
- label: translator.t('drawingResponse.lightyellow', {
138
- lng: language
139
- })
140
- }].concat((0, _toConsumableArray2["default"])(translatedROGVAIV)),
141
- paintColor: translator.t('drawingResponse.red', {
101
+ setTranslatedState(language) {
102
+ const translatedROGVAIV = ROGVAIV.map(c => ({
103
+ value: c.value,
104
+ label: translator.t(`drawingResponse.${c.label}`, {
105
+ lng: language
106
+ })
107
+ }));
108
+ this.setState({
109
+ fillColorList: [{
110
+ value: 'transparent',
111
+ label: translator.t('drawingResponse.noFill', {
142
112
  lng: language
143
- }),
144
- outlineColorList: translatedROGVAIV,
145
- paintColorList: translatedROGVAIV
146
- });
147
- }
148
- }, {
149
- key: "UNSAFE_componentWillReceiveProps",
150
- value: function UNSAFE_componentWillReceiveProps(props) {
151
- var language = props.language;
152
- this.setTranslatedState(language);
153
- }
154
- }, {
155
- key: "setDimensions",
156
- value: function setDimensions() {
157
- var _this2 = this;
158
-
159
- var checkExist = setInterval(function () {
160
- try {
161
- var _this2$drawable$getBo = _this2.drawable.getBoundingClientRect(),
162
- height = _this2$drawable$getBo.height,
163
- width = _this2$drawable$getBo.width;
164
-
165
- var effectiveWidth = _this2.props.session.width || width;
166
-
167
- if (height !== 0 && width !== 0) {
168
- _this2.setState({
169
- drawableDimensions: {
170
- height: height,
171
- width: effectiveWidth
172
- }
113
+ })
114
+ }, {
115
+ value: 'lightblue',
116
+ label: translator.t('drawingResponse.lightblue', {
117
+ lng: language
118
+ })
119
+ }, {
120
+ value: 'lightyellow',
121
+ label: translator.t('drawingResponse.lightyellow', {
122
+ lng: language
123
+ })
124
+ }, ...translatedROGVAIV],
125
+ paintColor: translator.t('drawingResponse.red', {
126
+ lng: language
127
+ }),
128
+ outlineColorList: translatedROGVAIV,
129
+ paintColorList: translatedROGVAIV
130
+ });
131
+ }
132
+ UNSAFE_componentWillReceiveProps(props) {
133
+ const {
134
+ language
135
+ } = props;
136
+ this.setTranslatedState(language);
137
+ }
138
+ setDimensions() {
139
+ const checkExist = setInterval(() => {
140
+ try {
141
+ const {
142
+ height,
143
+ width
144
+ } = this.drawable.getBoundingClientRect();
145
+ const effectiveWidth = this.props.session.width || width;
146
+ if (height !== 0 && width !== 0) {
147
+ this.setState({
148
+ drawableDimensions: {
149
+ height,
150
+ width: effectiveWidth
151
+ }
152
+ });
153
+ }
154
+ } catch (e) {
155
+ // eslint-disable-next-line no-console
156
+ console.warn('setDimensions Error: ', e);
157
+ } finally {
158
+ clearInterval(checkExist);
159
+ }
160
+ }, 100);
161
+ }
162
+ componentDidMount() {
163
+ const {
164
+ language
165
+ } = this.props;
166
+ this.setTranslatedState(language);
167
+ this.setDimensions();
168
+ this.observer = new MutationObserver(mutations => {
169
+ mutations.forEach(() => {
170
+ const target = document.getElementById('question-container')?.style?.cssText;
171
+ const zoom = target?.substring(target.indexOf('--pie-zoom') + 11, target.lastIndexOf('%'));
172
+ const zoomParsed = zoom?.replace(/\s/g, '');
173
+ if (zoomParsed) {
174
+ const newScale = parseFloat(zoomParsed) / 100;
175
+ if (newScale !== this.state.scale) {
176
+ this.setState({
177
+ scale: parseFloat(zoomParsed) / 100
173
178
  });
174
179
  }
175
- } catch (e) {
176
- // eslint-disable-next-line no-console
177
- console.warn('setDimensions Error: ', e);
178
- } finally {
179
- clearInterval(checkExist);
180
+ } else if (!zoomParsed && this.state.scale !== 1) {
181
+ this.setState({
182
+ scale: 1
183
+ });
180
184
  }
181
- }, 100);
182
- }
183
- }, {
184
- key: "componentDidMount",
185
- value: function componentDidMount() {
186
- var _this3 = this;
185
+ });
186
+ });
187
187
 
188
- var language = this.props.language;
189
- this.setTranslatedState(language);
188
+ // Use ResizeObserver to detect when the drawable container becomes visible
189
+ // (e.g., after switching from build to item preview in New Item Bank) and trigger dimension calculation.
190
+ // This helps ensure the canvas is properly sized even when componentDidMount is not re-triggered.
191
+ this.resizeObserver = new ResizeObserver(() => {
190
192
  this.setDimensions();
191
- this.observer = new MutationObserver(function (mutations) {
192
- mutations.forEach(function () {
193
- var _document$getElementB, _document$getElementB2;
194
-
195
- var target = (_document$getElementB = document.getElementById('question-container')) === null || _document$getElementB === void 0 ? void 0 : (_document$getElementB2 = _document$getElementB.style) === null || _document$getElementB2 === void 0 ? void 0 : _document$getElementB2.cssText;
196
- var zoom = target === null || target === void 0 ? void 0 : target.substring(target.indexOf('--pie-zoom') + 11, target.lastIndexOf('%'));
197
- var zoomParsed = zoom === null || zoom === void 0 ? void 0 : zoom.replace(/\s/g, '');
198
-
199
- if (zoomParsed) {
200
- var newScale = parseFloat(zoomParsed) / 100;
201
-
202
- if (newScale !== _this3.state.scale) {
203
- _this3.setState({
204
- scale: parseFloat(zoomParsed) / 100
205
- });
206
- }
207
- } else if (!zoomParsed && _this3.state.scale !== 1) {
208
- _this3.setState({
209
- scale: 1
210
- });
211
- }
212
- });
213
- }); // Use ResizeObserver to detect when the drawable container becomes visible
214
- // (e.g., after switching from build to item preview in New Item Bank) and trigger dimension calculation.
215
- // This helps ensure the canvas is properly sized even when componentDidMount is not re-triggered.
216
-
217
- this.resizeObserver = new ResizeObserver(function () {
218
- _this3.setDimensions();
193
+ });
194
+ if (this.drawable) {
195
+ this.resizeObserver.observe(this.drawable);
196
+ }
197
+ const target = document.getElementById('question-container');
198
+ if (target) {
199
+ this.observer.observe(target, {
200
+ attributes: true,
201
+ attributeFilter: ['style']
219
202
  });
220
-
221
- if (this.drawable) {
222
- this.resizeObserver.observe(this.drawable);
223
- }
224
-
225
- var target = document.getElementById('question-container');
226
-
227
- if (target) {
228
- this.observer.observe(target, {
229
- attributes: true,
230
- attributeFilter: ['style']
231
- });
232
- }
233
203
  }
234
- }, {
235
- key: "componentWillUnmount",
236
- value: function componentWillUnmount() {
237
- var _this$observer, _this$resizeObserver;
238
-
239
- var TextEntry = this.state.TextEntry;
240
- TextEntry.removeEventListeners();
241
- (_this$observer = this.observer) === null || _this$observer === void 0 ? void 0 : _this$observer.disconnect();
242
- (_this$resizeObserver = this.resizeObserver) === null || _this$resizeObserver === void 0 ? void 0 : _this$resizeObserver.disconnect();
204
+ }
205
+ componentWillUnmount() {
206
+ const {
207
+ TextEntry
208
+ } = this.state;
209
+ TextEntry.removeEventListeners();
210
+ this.observer?.disconnect();
211
+ this.resizeObserver?.disconnect();
212
+ }
213
+ handleMakeToolActive(tool) {
214
+ const {
215
+ TextEntry
216
+ } = this.state;
217
+ const {
218
+ type
219
+ } = tool;
220
+ const {
221
+ language
222
+ } = this.props;
223
+ if (type !== 'Text') {
224
+ this.setState({
225
+ toolActive: tool
226
+ });
227
+ } else {
228
+ TextEntry.addNewTextEntry(language);
229
+ // Force update
230
+ this.setState({
231
+ updatedAt: new Date()
232
+ });
243
233
  }
244
- }, {
245
- key: "handleMakeToolActive",
246
- value: function handleMakeToolActive(tool) {
247
- var TextEntry = this.state.TextEntry;
248
- var type = tool.type;
249
- var language = this.props.language;
250
-
251
- if (type !== 'Text') {
252
- this.setState({
253
- toolActive: tool
254
- });
255
- } else {
256
- TextEntry.addNewTextEntry(language); // Force update
257
-
258
- this.setState({
259
- updatedAt: new Date()
260
- });
234
+ }
235
+ handleColorChange(type, color) {
236
+ const cType = `${type}Color`;
237
+ this.setState({
238
+ [cType]: color
239
+ });
240
+ }
241
+ render() {
242
+ const {
243
+ disabled,
244
+ imageUrl,
245
+ imageDimensions,
246
+ onSessionChange,
247
+ session,
248
+ backgroundImageEnabled,
249
+ language
250
+ } = this.props;
251
+ const {
252
+ drawableDimensions,
253
+ toolActive,
254
+ fillColor,
255
+ fillColorList,
256
+ outlineColor,
257
+ outlineColorList,
258
+ paintColor,
259
+ paintColorList,
260
+ TextEntry
261
+ } = this.state;
262
+ const heightToUse = drawableDimensions.height * this.state.scale;
263
+ return /*#__PURE__*/_react.default.createElement(BaseContainer, null, !disabled && /*#__PURE__*/_react.default.createElement(_drawablePalette.default, {
264
+ fillColor: fillColor,
265
+ fillList: fillColorList,
266
+ outlineColor: outlineColor,
267
+ outlineList: outlineColorList,
268
+ paintColor: paintColor,
269
+ paintList: paintColorList,
270
+ onFillColorChange: color => this.handleColorChange('fill', color),
271
+ onOutlineColorChange: color => this.handleColorChange('outline', color),
272
+ onPaintColorChange: color => this.handleColorChange('paint', color),
273
+ language: language
274
+ }), /*#__PURE__*/_react.default.createElement(Box, null, /*#__PURE__*/_react.default.createElement(Toolbar, null, TOOLS.map(tool => {
275
+ const {
276
+ type,
277
+ label,
278
+ icon
279
+ } = tool;
280
+ return /*#__PURE__*/_react.default.createElement(_button.default, {
281
+ title: label,
282
+ key: type,
283
+ disabled: this.checkIfToolIsDisabled(type),
284
+ onClick: () => this.handleMakeToolActive(tool),
285
+ label: /*#__PURE__*/_react.default.createElement(_icon.default, {
286
+ path: icon
287
+ })
288
+ });
289
+ })), /*#__PURE__*/_react.default.createElement(DrawableHeight, {
290
+ ref: drawable => {
291
+ this.drawable = drawable;
292
+ },
293
+ style: {
294
+ height: heightToUse,
295
+ maxHeight: heightToUse,
296
+ overflow: 'scroll'
261
297
  }
262
- }
263
- }, {
264
- key: "handleColorChange",
265
- value: function handleColorChange(type, color) {
266
- var cType = "".concat(type, "Color");
267
- this.setState((0, _defineProperty2["default"])({}, cType, color));
268
- }
269
- }, {
270
- key: "render",
271
- value: function render() {
272
- var _this4 = this;
273
-
274
- var _this$props = this.props,
275
- classes = _this$props.classes,
276
- disabled = _this$props.disabled,
277
- imageUrl = _this$props.imageUrl,
278
- imageDimensions = _this$props.imageDimensions,
279
- onSessionChange = _this$props.onSessionChange,
280
- session = _this$props.session,
281
- backgroundImageEnabled = _this$props.backgroundImageEnabled,
282
- language = _this$props.language;
283
- var _this$state = this.state,
284
- drawableDimensions = _this$state.drawableDimensions,
285
- toolActive = _this$state.toolActive,
286
- fillColor = _this$state.fillColor,
287
- fillColorList = _this$state.fillColorList,
288
- outlineColor = _this$state.outlineColor,
289
- outlineColorList = _this$state.outlineColorList,
290
- paintColor = _this$state.paintColor,
291
- paintColorList = _this$state.paintColorList,
292
- TextEntry = _this$state.TextEntry;
293
- var heightToUse = drawableDimensions.height * this.state.scale;
294
- return /*#__PURE__*/_react["default"].createElement("div", {
295
- className: classes.base
296
- }, !disabled && /*#__PURE__*/_react["default"].createElement(_drawablePalette["default"], {
297
- fillColor: fillColor,
298
- fillList: fillColorList,
299
- outlineColor: outlineColor,
300
- outlineList: outlineColorList,
301
- paintColor: paintColor,
302
- paintList: paintColorList,
303
- onFillColorChange: function onFillColorChange(color) {
304
- return _this4.handleColorChange('fill', color);
305
- },
306
- onOutlineColorChange: function onOutlineColorChange(color) {
307
- return _this4.handleColorChange('outline', color);
308
- },
309
- onPaintColorChange: function onPaintColorChange(color) {
310
- return _this4.handleColorChange('paint', color);
311
- },
312
- language: language
313
- }), /*#__PURE__*/_react["default"].createElement("div", {
314
- className: classes.box
315
- }, /*#__PURE__*/_react["default"].createElement("div", {
316
- className: classes.toolbar
317
- }, TOOLS.map(function (tool) {
318
- var type = tool.type,
319
- label = tool.label,
320
- icon = tool.icon;
321
- return /*#__PURE__*/_react["default"].createElement(_button["default"], {
322
- title: label,
323
- key: type,
324
- disabled: _this4.checkIfToolIsDisabled(type),
325
- onClick: function onClick() {
326
- return _this4.handleMakeToolActive(tool);
327
- },
328
- label: /*#__PURE__*/_react["default"].createElement(_icon["default"], {
329
- path: icon
330
- })
331
- });
332
- })), /*#__PURE__*/_react["default"].createElement("div", {
333
- ref: function ref(drawable) {
334
- _this4.drawable = drawable;
335
- },
336
- className: classes.drawableHeight,
337
- style: {
338
- height: heightToUse,
339
- maxHeight: heightToUse,
340
- overflow: 'scroll'
341
- }
342
- }, /*#__PURE__*/_react["default"].createElement(_drawableMain["default"], {
343
- scale: this.state.scale,
344
- session: session,
345
- disabled: disabled,
346
- onSessionChange: onSessionChange,
347
- fillColor: fillColor,
348
- outlineColor: outlineColor,
349
- paintColor: paintColor,
350
- imageUrl: imageUrl,
351
- drawableDimensions: drawableDimensions,
352
- imageDimensions: imageDimensions,
353
- toolActive: toolActive,
354
- TextEntry: TextEntry,
355
- backgroundImageEnabled: backgroundImageEnabled,
356
- language: language
357
- }))));
358
- }
359
- }]);
360
- return Container;
361
- }(_react.Component);
362
-
298
+ }, /*#__PURE__*/_react.default.createElement(_drawableMain.default, {
299
+ scale: this.state.scale,
300
+ session: session,
301
+ disabled: disabled,
302
+ onSessionChange: onSessionChange,
303
+ fillColor: fillColor,
304
+ outlineColor: outlineColor,
305
+ paintColor: paintColor,
306
+ imageUrl: imageUrl,
307
+ drawableDimensions: drawableDimensions,
308
+ imageDimensions: imageDimensions,
309
+ toolActive: toolActive,
310
+ TextEntry: TextEntry,
311
+ backgroundImageEnabled: backgroundImageEnabled,
312
+ language: language
313
+ }))));
314
+ }
315
+ }
363
316
  exports.Container = Container;
364
- (0, _defineProperty2["default"])(Container, "propTypes", {
365
- classes: _propTypes["default"].object.isRequired,
366
- disabled: _propTypes["default"].bool,
367
- session: _propTypes["default"].object.isRequired,
368
- onSessionChange: _propTypes["default"].func.isRequired,
369
- imageDimensions: _propTypes["default"].object.isRequired,
370
- imageUrl: _propTypes["default"].string.isRequired,
371
- backgroundImageEnabled: _propTypes["default"].bool.isRequired,
372
- language: _propTypes["default"].string
317
+ (0, _defineProperty2.default)(Container, "propTypes", {
318
+ disabled: _propTypes.default.bool,
319
+ session: _propTypes.default.object.isRequired,
320
+ onSessionChange: _propTypes.default.func.isRequired,
321
+ imageDimensions: _propTypes.default.object.isRequired,
322
+ imageUrl: _propTypes.default.string.isRequired,
323
+ backgroundImageEnabled: _propTypes.default.bool.isRequired,
324
+ language: _propTypes.default.string
373
325
  });
374
-
375
- var styles = function styles(theme) {
376
- return {
377
- base: {
378
- marginTop: theme.spacing.unit * 2
379
- },
380
- box: {
381
- border: '1px solid #E0E1E6',
382
- borderRadius: '5px',
383
- marginTop: theme.spacing.unit * 2,
384
- backgroundColor: '#ECEDF1'
385
- },
386
- drawableHeight: {
387
- minHeight: 350,
388
- backgroundColor: '#fff'
389
- },
390
- toolbar: {
391
- borderBottom: '1px solid #E0E1E6',
392
- borderTopLeftRadius: '5px',
393
- borderTopRightRadius: '5px',
394
- padding: '12px 8px 4px',
395
- boxSizing: 'border-box',
396
- maxWidth: 'calc(100% - 163px)',
397
- // 163px is the width set on undoControls
398
- '& button': {
399
- marginBottom: theme.spacing.unit
400
- }
401
- }
402
- };
403
- };
404
-
405
- var _default = (0, _styles.withStyles)(styles)(Container);
406
-
407
- exports["default"] = _default;
408
- //# sourceMappingURL=container.js.map
326
+ var _default = exports.default = Container;
327
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcHJvcFR5cGVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9zdHlsZXMiLCJfdHJhbnNsYXRvciIsIl9jb25zdGFudHMiLCJfYnV0dG9uIiwiX2RyYXdhYmxlUGFsZXR0ZSIsIl9kcmF3YWJsZU1haW4iLCJfZHJhd2FibGVUZXh0IiwiX2ljb24iLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJkZWZhdWx0IiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ0b29scyIsIlRPT0xTIiwiY29uc3RhbnRzIiwidHJhbnNsYXRvciIsIlRyYW5zbGF0b3IiLCJCYXNlQ29udGFpbmVyIiwic3R5bGVkIiwidGhlbWUiLCJtYXJnaW5Ub3AiLCJzcGFjaW5nIiwiQm94IiwiYm9yZGVyIiwiYm9yZGVyUmFkaXVzIiwiYmFja2dyb3VuZENvbG9yIiwiRHJhd2FibGVIZWlnaHQiLCJtaW5IZWlnaHQiLCJUb29sYmFyIiwiYm9yZGVyQm90dG9tIiwiYm9yZGVyVG9wTGVmdFJhZGl1cyIsImJvcmRlclRvcFJpZ2h0UmFkaXVzIiwicGFkZGluZyIsImJveFNpemluZyIsIm1heFdpZHRoIiwibWFyZ2luQm90dG9tIiwiUk9HVkFJViIsIm1hcCIsImMiLCJ2YWx1ZSIsImxhYmVsIiwiQ29udGFpbmVyIiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJ0eXBlIiwiZGlzYWJsZWQiLCJ0b29sQWN0aXZlIiwic3RhdGUiLCJUZXh0RW50cnkiLCJEcmF3YWJsZVRleHQiLCJzY2FsZSIsImRyYXdhYmxlRGltZW5zaW9ucyIsImhlaWdodCIsIndpZHRoIiwiZmlsbENvbG9yIiwiZmlsbENvbG9yTGlzdCIsIm91dGxpbmVDb2xvciIsIm91dGxpbmVDb2xvckxpc3QiLCJwYWludENvbG9yIiwicGFpbnRDb2xvckxpc3QiLCJzZXRUcmFuc2xhdGVkU3RhdGUiLCJsYW5ndWFnZSIsInRyYW5zbGF0ZWRST0dWQUlWIiwibG5nIiwic2V0U3RhdGUiLCJVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsInNldERpbWVuc2lvbnMiLCJjaGVja0V4aXN0Iiwic2V0SW50ZXJ2YWwiLCJkcmF3YWJsZSIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImVmZmVjdGl2ZVdpZHRoIiwic2Vzc2lvbiIsImNvbnNvbGUiLCJ3YXJuIiwiY2xlYXJJbnRlcnZhbCIsImNvbXBvbmVudERpZE1vdW50Iiwib2JzZXJ2ZXIiLCJNdXRhdGlvbk9ic2VydmVyIiwibXV0YXRpb25zIiwiZm9yRWFjaCIsInRhcmdldCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJzdHlsZSIsImNzc1RleHQiLCJ6b29tIiwic3Vic3RyaW5nIiwiaW5kZXhPZiIsImxhc3RJbmRleE9mIiwiem9vbVBhcnNlZCIsInJlcGxhY2UiLCJuZXdTY2FsZSIsInBhcnNlRmxvYXQiLCJyZXNpemVPYnNlcnZlciIsIlJlc2l6ZU9ic2VydmVyIiwib2JzZXJ2ZSIsImF0dHJpYnV0ZXMiLCJhdHRyaWJ1dGVGaWx0ZXIiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsInJlbW92ZUV2ZW50TGlzdGVuZXJzIiwiZGlzY29ubmVjdCIsImhhbmRsZU1ha2VUb29sQWN0aXZlIiwidG9vbCIsImFkZE5ld1RleHRFbnRyeSIsInVwZGF0ZWRBdCIsIkRhdGUiLCJoYW5kbGVDb2xvckNoYW5nZSIsImNvbG9yIiwiY1R5cGUiLCJyZW5kZXIiLCJpbWFnZVVybCIsImltYWdlRGltZW5zaW9ucyIsIm9uU2Vzc2lvbkNoYW5nZSIsImJhY2tncm91bmRJbWFnZUVuYWJsZWQiLCJoZWlnaHRUb1VzZSIsImNyZWF0ZUVsZW1lbnQiLCJmaWxsTGlzdCIsIm91dGxpbmVMaXN0IiwicGFpbnRMaXN0Iiwib25GaWxsQ29sb3JDaGFuZ2UiLCJvbk91dGxpbmVDb2xvckNoYW5nZSIsIm9uUGFpbnRDb2xvckNoYW5nZSIsImljb24iLCJ0aXRsZSIsImtleSIsImNoZWNrSWZUb29sSXNEaXNhYmxlZCIsIm9uQ2xpY2siLCJwYXRoIiwicmVmIiwibWF4SGVpZ2h0Iiwib3ZlcmZsb3ciLCJleHBvcnRzIiwiUHJvcFR5cGVzIiwiYm9vbCIsIm9iamVjdCIsImlzUmVxdWlyZWQiLCJmdW5jIiwic3RyaW5nIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZHJhd2luZy1yZXNwb25zZS9jb250YWluZXIuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSAnQG11aS9tYXRlcmlhbC9zdHlsZXMnO1xuaW1wb3J0IFRyYW5zbGF0b3IgZnJvbSAnQHBpZS1saWIvdHJhbnNsYXRvcic7XG5cbmltcG9ydCBjb25zdGFudHMgZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICcuL2J1dHRvbic7XG5pbXBvcnQgRHJhd2FibGVQYWxldHRlIGZyb20gJy4vZHJhd2FibGUtcGFsZXR0ZSc7XG5pbXBvcnQgRHJhd2FibGVNYWluIGZyb20gJy4vZHJhd2FibGUtbWFpbic7XG5pbXBvcnQgRHJhd2FibGVUZXh0IGZyb20gJy4vZHJhd2FibGUtdGV4dCc7XG5pbXBvcnQgSWNvbiBmcm9tICcuL2ljb24nO1xuXG5jb25zdCB7IHRvb2xzOiBUT09MUyB9ID0gY29uc3RhbnRzO1xuY29uc3QgeyB0cmFuc2xhdG9yIH0gPSBUcmFuc2xhdG9yO1xuXG5jb25zdCBCYXNlQ29udGFpbmVyID0gc3R5bGVkKCdkaXYnKSgoeyB0aGVtZSB9KSA9PiAoe1xuICBtYXJnaW5Ub3A6IHRoZW1lLnNwYWNpbmcoMiksXG59KSk7XG5cbmNvbnN0IEJveCA9IHN0eWxlZCgnZGl2JykoKHsgdGhlbWUgfSkgPT4gKHtcbiAgYm9yZGVyOiAnMXB4IHNvbGlkICNFMEUxRTYnLFxuICBib3JkZXJSYWRpdXM6ICc1cHgnLFxuICBtYXJnaW5Ub3A6IHRoZW1lLnNwYWNpbmcoMiksXG4gIGJhY2tncm91bmRDb2xvcjogJyNFQ0VERjEnLFxufSkpO1xuXG5jb25zdCBEcmF3YWJsZUhlaWdodCA9IHN0eWxlZCgnZGl2Jykoe1xuICBtaW5IZWlnaHQ6IDM1MCxcbiAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZicsXG59KTtcblxuY29uc3QgVG9vbGJhciA9IHN0eWxlZCgnZGl2JykoKHsgdGhlbWUgfSkgPT4gKHtcbiAgYm9yZGVyQm90dG9tOiAnMXB4IHNvbGlkICNFMEUxRTYnLFxuICBib3JkZXJUb3BMZWZ0UmFkaXVzOiAnNXB4JyxcbiAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6ICc1cHgnLFxuICBwYWRkaW5nOiAnMTJweCA4cHggNHB4JyxcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIG1heFdpZHRoOiAnY2FsYygxMDAlIC0gMTYzcHgpJywgLy8gMTYzcHggaXMgdGhlIHdpZHRoIHNldCBvbiB1bmRvQ29udHJvbHNcbiAgJyYgYnV0dG9uJzoge1xuICAgIG1hcmdpbkJvdHRvbTogdGhlbWUuc3BhY2luZygxKSxcbiAgfSxcbn0pKTtcblxuY29uc3QgUk9HVkFJViA9IFsncmVkJywgJ29yYW5nZScsICd5ZWxsb3cnLCAndmlvbGV0JywgJ2JsdWUnLCAnZ3JlZW4nLCAnd2hpdGUnLCAnYmxhY2snXS5tYXAoKGMpID0+ICh7XG4gIHZhbHVlOiBjLFxuICBsYWJlbDogYyxcbn0pKTtcblxuZXhwb3J0IGNsYXNzIENvbnRhaW5lciBleHRlbmRzIENvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIHNlc3Npb246IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICBvblNlc3Npb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgaW1hZ2VEaW1lbnNpb25zOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgaW1hZ2VVcmw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBiYWNrZ3JvdW5kSW1hZ2VFbmFibGVkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGxhbmd1YWdlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIGNvbnN0IFRleHRFbnRyeSA9IG5ldyBEcmF3YWJsZVRleHQoKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBzY2FsZTogMSxcbiAgICAgIGRyYXdhYmxlRGltZW5zaW9uczoge1xuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgIHdpZHRoOiAwLFxuICAgICAgfSxcbiAgICAgIHRvb2xBY3RpdmU6IFRPT0xTWzBdLFxuICAgICAgZmlsbENvbG9yOiAnd2hpdGUnLFxuICAgICAgZmlsbENvbG9yTGlzdDogW1xuICAgICAgICB7IHZhbHVlOiAndHJhbnNwYXJlbnQnLCBsYWJlbDogJ25vIGZpbGwnIH0sXG4gICAgICAgIHsgdmFsdWU6ICdsaWdodGJsdWUnLCBsYWJlbDogJ2xpZ2h0IGJsdWUnIH0sXG4gICAgICAgIHsgdmFsdWU6ICdsaWdodHllbGxvdycsIGxhYmVsOiAnbGlnaHQgeWVsbG93JyB9LFxuICAgICAgICAuLi5ST0dWQUlWLFxuICAgICAgXSxcbiAgICAgIG91dGxpbmVDb2xvcjogJ2JsYWNrJyxcbiAgICAgIG91dGxpbmVDb2xvckxpc3Q6IFJPR1ZBSVYsXG4gICAgICBwYWludENvbG9yOiAncmVkJyxcbiAgICAgIHBhaW50Q29sb3JMaXN0OiBST0dWQUlWLFxuICAgICAgVGV4dEVudHJ5LFxuICAgIH07XG4gIH1cblxuICBzZXRUcmFuc2xhdGVkU3RhdGUobGFuZ3VhZ2UpIHtcbiAgICBjb25zdCB0cmFuc2xhdGVkUk9HVkFJViA9IFJPR1ZBSVYubWFwKChjKSA9PiAoe1xuICAgICAgdmFsdWU6IGMudmFsdWUsXG4gICAgICBsYWJlbDogdHJhbnNsYXRvci50KGBkcmF3aW5nUmVzcG9uc2UuJHtjLmxhYmVsfWAsIHsgbG5nOiBsYW5ndWFnZSB9KSxcbiAgICB9KSk7XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGZpbGxDb2xvckxpc3Q6IFtcbiAgICAgICAgeyB2YWx1ZTogJ3RyYW5zcGFyZW50JywgbGFiZWw6IHRyYW5zbGF0b3IudCgnZHJhd2luZ1Jlc3BvbnNlLm5vRmlsbCcsIHsgbG5nOiBsYW5ndWFnZSB9KSB9LFxuICAgICAgICB7IHZhbHVlOiAnbGlnaHRibHVlJywgbGFiZWw6IHRyYW5zbGF0b3IudCgnZHJhd2luZ1Jlc3BvbnNlLmxpZ2h0Ymx1ZScsIHsgbG5nOiBsYW5ndWFnZSB9KSB9LFxuICAgICAgICB7IHZhbHVlOiAnbGlnaHR5ZWxsb3cnLCBsYWJlbDogdHJhbnNsYXRvci50KCdkcmF3aW5nUmVzcG9uc2UubGlnaHR5ZWxsb3cnLCB7IGxuZzogbGFuZ3VhZ2UgfSkgfSxcbiAgICAgICAgLi4udHJhbnNsYXRlZFJPR1ZBSVYsXG4gICAgICBdLFxuICAgICAgcGFpbnRDb2xvcjogdHJhbnNsYXRvci50KCdkcmF3aW5nUmVzcG9uc2UucmVkJywgeyBsbmc6IGxhbmd1YWdlIH0pLFxuICAgICAgb3V0bGluZUNvbG9yTGlzdDogdHJhbnNsYXRlZFJPR1ZBSVYsXG4gICAgICBwYWludENvbG9yTGlzdDogdHJhbnNsYXRlZFJPR1ZBSVYsXG4gICAgfSk7XG4gIH1cblxuICBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhwcm9wcykge1xuICAgIGNvbnN0IHsgbGFuZ3VhZ2UgfSA9IHByb3BzO1xuICAgIHRoaXMuc2V0VHJhbnNsYXRlZFN0YXRlKGxhbmd1YWdlKTtcbiAgfVxuXG4gIHNldERpbWVuc2lvbnMoKSB7XG4gICAgY29uc3QgY2hlY2tFeGlzdCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgaGVpZ2h0LCB3aWR0aCB9ID0gdGhpcy5kcmF3YWJsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgZWZmZWN0aXZlV2lkdGggPSB0aGlzLnByb3BzLnNlc3Npb24ud2lkdGggfHwgd2lkdGg7XG5cbiAgICAgICAgaWYgKGhlaWdodCAhPT0gMCAmJiB3aWR0aCAhPT0gMCkge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgZHJhd2FibGVEaW1lbnNpb25zOiB7XG4gICAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgICAgd2lkdGg6IGVmZmVjdGl2ZVdpZHRoLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oJ3NldERpbWVuc2lvbnMgRXJyb3I6ICcsIGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChjaGVja0V4aXN0KTtcbiAgICAgIH1cbiAgICB9LCAxMDApO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgeyBsYW5ndWFnZSB9ID0gdGhpcy5wcm9wcztcbiAgICB0aGlzLnNldFRyYW5zbGF0ZWRTdGF0ZShsYW5ndWFnZSk7XG5cbiAgICB0aGlzLnNldERpbWVuc2lvbnMoKTtcblxuICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XG4gICAgICBtdXRhdGlvbnMuZm9yRWFjaCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdxdWVzdGlvbi1jb250YWluZXInKT8uc3R5bGU/LmNzc1RleHQ7XG4gICAgICAgIGNvbnN0IHpvb20gPSB0YXJnZXQ/LnN1YnN0cmluZyh0YXJnZXQuaW5kZXhPZignLS1waWUtem9vbScpICsgMTEsIHRhcmdldC5sYXN0SW5kZXhPZignJScpKTtcbiAgICAgICAgY29uc3Qgem9vbVBhcnNlZCA9IHpvb20/LnJlcGxhY2UoL1xccy9nLCAnJyk7XG5cbiAgICAgICAgaWYgKHpvb21QYXJzZWQpIHtcbiAgICAgICAgICBjb25zdCBuZXdTY2FsZSA9IHBhcnNlRmxvYXQoem9vbVBhcnNlZCkgLyAxMDA7XG4gICAgICAgICAgaWYgKG5ld1NjYWxlICE9PSB0aGlzLnN0YXRlLnNjYWxlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgc2NhbGU6IHBhcnNlRmxvYXQoem9vbVBhcnNlZCkgLyAxMDAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIXpvb21QYXJzZWQgJiYgdGhpcy5zdGF0ZS5zY2FsZSAhPT0gMSkge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgc2NhbGU6IDEsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gVXNlIFJlc2l6ZU9ic2VydmVyIHRvIGRldGVjdCB3aGVuIHRoZSBkcmF3YWJsZSBjb250YWluZXIgYmVjb21lcyB2aXNpYmxlXG4gICAgLy8gKGUuZy4sIGFmdGVyIHN3aXRjaGluZyBmcm9tIGJ1aWxkIHRvIGl0ZW0gcHJldmlldyBpbiBOZXcgSXRlbSBCYW5rKSBhbmQgdHJpZ2dlciBkaW1lbnNpb24gY2FsY3VsYXRpb24uXG4gICAgLy8gVGhpcyBoZWxwcyBlbnN1cmUgdGhlIGNhbnZhcyBpcyBwcm9wZXJseSBzaXplZCBldmVuIHdoZW4gY29tcG9uZW50RGlkTW91bnQgaXMgbm90IHJlLXRyaWdnZXJlZC5cbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgIHRoaXMuc2V0RGltZW5zaW9ucygpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuZHJhd2FibGUpIHtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmRyYXdhYmxlKTtcbiAgICB9XG5cbiAgICBjb25zdCB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncXVlc3Rpb24tY29udGFpbmVyJyk7XG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKHRhcmdldCwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFsnc3R5bGUnXSB9KTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBjb25zdCB7IFRleHRFbnRyeSB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIFRleHRFbnRyeS5yZW1vdmVFdmVudExpc3RlbmVycygpO1xuICAgIHRoaXMub2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gIH1cblxuICBoYW5kbGVNYWtlVG9vbEFjdGl2ZSh0b29sKSB7XG4gICAgY29uc3QgeyBUZXh0RW50cnkgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgeyB0eXBlIH0gPSB0b29sO1xuICAgIGNvbnN0IHsgbGFuZ3VhZ2UgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAodHlwZSAhPT0gJ1RleHQnKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdG9vbEFjdGl2ZTogdG9vbCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBUZXh0RW50cnkuYWRkTmV3VGV4dEVudHJ5KGxhbmd1YWdlKTtcbiAgICAgIC8vIEZvcmNlIHVwZGF0ZVxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrSWZUb29sSXNEaXNhYmxlZCA9ICh0eXBlKSA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMuZGlzYWJsZWQpIHJldHVybiB0cnVlO1xuXG4gICAgY29uc3QgeyB0b29sQWN0aXZlIH0gPSB0aGlzLnN0YXRlO1xuICAgIC8vIFRleHQgd2lsbCBuZXZlciBiZSBkaXNhYmxlZCBzaW5jZSBvbiBlYWNoIFwiVGV4dCBFbnRyeVwiIGNsaWNrIGEgbmV3IHRleHQgaXMgYWRkZWRcbiAgICBpZiAodHlwZSA9PT0gJ1RleHQnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0eXBlID09PSB0b29sQWN0aXZlLnR5cGU7XG4gIH07XG5cbiAgaGFuZGxlQ29sb3JDaGFuZ2UodHlwZSwgY29sb3IpIHtcbiAgICBjb25zdCBjVHlwZSA9IGAke3R5cGV9Q29sb3JgO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgW2NUeXBlXTogY29sb3IsXG4gICAgfSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBkaXNhYmxlZCwgaW1hZ2VVcmwsIGltYWdlRGltZW5zaW9ucywgb25TZXNzaW9uQ2hhbmdlLCBzZXNzaW9uLCBiYWNrZ3JvdW5kSW1hZ2VFbmFibGVkLCBsYW5ndWFnZSB9ID1cbiAgICAgIHRoaXMucHJvcHM7XG4gICAgY29uc3Qge1xuICAgICAgZHJhd2FibGVEaW1lbnNpb25zLFxuICAgICAgdG9vbEFjdGl2ZSxcbiAgICAgIGZpbGxDb2xvcixcbiAgICAgIGZpbGxDb2xvckxpc3QsXG4gICAgICBvdXRsaW5lQ29sb3IsXG4gICAgICBvdXRsaW5lQ29sb3JMaXN0LFxuICAgICAgcGFpbnRDb2xvcixcbiAgICAgIHBhaW50Q29sb3JMaXN0LFxuICAgICAgVGV4dEVudHJ5LFxuICAgIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgY29uc3QgaGVpZ2h0VG9Vc2UgPSBkcmF3YWJsZURpbWVuc2lvbnMuaGVpZ2h0ICogdGhpcy5zdGF0ZS5zY2FsZTtcblxuICAgIHJldHVybiAoXG4gICAgICA8QmFzZUNvbnRhaW5lcj5cbiAgICAgICAgeyFkaXNhYmxlZCAmJiAoXG4gICAgICAgICAgPERyYXdhYmxlUGFsZXR0ZVxuICAgICAgICAgICAgZmlsbENvbG9yPXtmaWxsQ29sb3J9XG4gICAgICAgICAgICBmaWxsTGlzdD17ZmlsbENvbG9yTGlzdH1cbiAgICAgICAgICAgIG91dGxpbmVDb2xvcj17b3V0bGluZUNvbG9yfVxuICAgICAgICAgICAgb3V0bGluZUxpc3Q9e291dGxpbmVDb2xvckxpc3R9XG4gICAgICAgICAgICBwYWludENvbG9yPXtwYWludENvbG9yfVxuICAgICAgICAgICAgcGFpbnRMaXN0PXtwYWludENvbG9yTGlzdH1cbiAgICAgICAgICAgIG9uRmlsbENvbG9yQ2hhbmdlPXsoY29sb3IpID0+IHRoaXMuaGFuZGxlQ29sb3JDaGFuZ2UoJ2ZpbGwnLCBjb2xvcil9XG4gICAgICAgICAgICBvbk91dGxpbmVDb2xvckNoYW5nZT17KGNvbG9yKSA9PiB0aGlzLmhhbmRsZUNvbG9yQ2hhbmdlKCdvdXRsaW5lJywgY29sb3IpfVxuICAgICAgICAgICAgb25QYWludENvbG9yQ2hhbmdlPXsoY29sb3IpID0+IHRoaXMuaGFuZGxlQ29sb3JDaGFuZ2UoJ3BhaW50JywgY29sb3IpfVxuICAgICAgICAgICAgbGFuZ3VhZ2U9e2xhbmd1YWdlfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG5cbiAgICAgICAgPEJveD5cbiAgICAgICAgICA8VG9vbGJhcj5cbiAgICAgICAgICAgIHtUT09MUy5tYXAoKHRvb2wpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgeyB0eXBlLCBsYWJlbCwgaWNvbiB9ID0gdG9vbDtcblxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIHRpdGxlPXtsYWJlbH1cbiAgICAgICAgICAgICAgICAgIGtleT17dHlwZX1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLmNoZWNrSWZUb29sSXNEaXNhYmxlZCh0eXBlKX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuaGFuZGxlTWFrZVRvb2xBY3RpdmUodG9vbCl9XG4gICAgICAgICAgICAgICAgICBsYWJlbD17PEljb24gcGF0aD17aWNvbn0gLz59XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvVG9vbGJhcj5cblxuICAgICAgICAgIDxEcmF3YWJsZUhlaWdodFxuICAgICAgICAgICAgcmVmPXsoZHJhd2FibGUpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5kcmF3YWJsZSA9IGRyYXdhYmxlO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogaGVpZ2h0VG9Vc2UsIG1heEhlaWdodDogaGVpZ2h0VG9Vc2UsIG92ZXJmbG93OiAnc2Nyb2xsJyB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxEcmF3YWJsZU1haW5cbiAgICAgICAgICAgICAgc2NhbGU9e3RoaXMuc3RhdGUuc2NhbGV9XG4gICAgICAgICAgICAgIHNlc3Npb249e3Nlc3Npb259XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgICAgb25TZXNzaW9uQ2hhbmdlPXtvblNlc3Npb25DaGFuZ2V9XG4gICAgICAgICAgICAgIGZpbGxDb2xvcj17ZmlsbENvbG9yfVxuICAgICAgICAgICAgICBvdXRsaW5lQ29sb3I9e291dGxpbmVDb2xvcn1cbiAgICAgICAgICAgICAgcGFpbnRDb2xvcj17cGFpbnRDb2xvcn1cbiAgICAgICAgICAgICAgaW1hZ2VVcmw9e2ltYWdlVXJsfVxuICAgICAgICAgICAgICBkcmF3YWJsZURpbWVuc2lvbnM9e2RyYXdhYmxlRGltZW5zaW9uc31cbiAgICAgICAgICAgICAgaW1hZ2VEaW1lbnNpb25zPXtpbWFnZURpbWVuc2lvbnN9XG4gICAgICAgICAgICAgIHRvb2xBY3RpdmU9e3Rvb2xBY3RpdmV9XG4gICAgICAgICAgICAgIFRleHRFbnRyeT17VGV4dEVudHJ5fVxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kSW1hZ2VFbmFibGVkPXtiYWNrZ3JvdW5kSW1hZ2VFbmFibGVkfVxuICAgICAgICAgICAgICBsYW5ndWFnZT17bGFuZ3VhZ2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvRHJhd2FibGVIZWlnaHQ+XG4gICAgICAgIDwvQm94PlxuICAgICAgPC9CYXNlQ29udGFpbmVyPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29udGFpbmVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFVBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLE9BQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLFdBQUEsR0FBQUYsc0JBQUEsQ0FBQUYsT0FBQTtBQUVBLElBQUFLLFVBQUEsR0FBQUgsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFNLE9BQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFPLGdCQUFBLEdBQUFMLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBUSxhQUFBLEdBQUFOLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBUyxhQUFBLEdBQUFQLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBVSxLQUFBLEdBQUFSLHNCQUFBLENBQUFGLE9BQUE7QUFBMEIsU0FBQUQsd0JBQUFZLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFkLHVCQUFBLFlBQUFBLENBQUFZLENBQUEsRUFBQUMsQ0FBQSxTQUFBQSxDQUFBLElBQUFELENBQUEsSUFB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