@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,60 +1,43 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
- exports.generateId = exports["default"] = void 0;
9
-
7
+ exports.generateId = exports.default = void 0;
10
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
-
12
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
-
14
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
-
16
9
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
-
18
10
  var _react = _interopRequireDefault(require("react"));
19
-
20
11
  var _reactKonva = require("react-konva");
21
-
22
12
  var _translator = _interopRequireDefault(require("@pie-lib/translator"));
23
-
24
13
  var _drawableTransformer = _interopRequireDefault(require("./drawable-transformer"));
25
-
26
- 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; }
27
-
28
- 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; }
29
-
30
- var translator = _translator["default"].translator;
31
-
32
- var generateId = function generateId() {
33
- return Math.random().toString(36).substring(2) + new Date().getTime().toString(36);
34
- };
35
-
14
+ const {
15
+ translator
16
+ } = _translator.default;
17
+ const generateId = () => Math.random().toString(36).substring(2) + new Date().getTime().toString(36);
36
18
  exports.generateId = generateId;
37
-
38
- var TextDrawable = /*#__PURE__*/function () {
39
- function TextDrawable(props) {
40
- var _this = this;
41
-
42
- (0, _classCallCheck2["default"])(this, TextDrawable);
43
- (0, _defineProperty2["default"])(this, "removeEventListeners", function () {
44
- return _this.eventListenersDetachArray.forEach(function (fn) {
45
- return fn();
46
- });
47
- });
48
- (0, _defineProperty2["default"])(this, "setAll", function (all) {
49
- _this.all = all;
50
-
51
- _this.props.forceUpdate();
19
+ class TextDrawable {
20
+ static getTextareaNode(id) {
21
+ return `textarea_${id}`;
22
+ }
23
+ static getTextNode(id) {
24
+ return `text_${id}`;
25
+ }
26
+ static getTransformerNode(id) {
27
+ return `transformer_${id}`;
28
+ }
29
+ constructor(props) {
30
+ (0, _defineProperty2.default)(this, "removeEventListeners", () => this.eventListenersDetachArray.forEach(fn => fn()));
31
+ (0, _defineProperty2.default)(this, "setAll", all => {
32
+ this.all = all;
33
+ this.props.forceUpdate();
52
34
  });
53
- (0, _defineProperty2["default"])(this, "addNewTextEntry", function (language) {
54
- var all = _this.all;
55
- var id = generateId();
35
+ (0, _defineProperty2.default)(this, "addNewTextEntry", language => {
36
+ const all = this.all;
37
+ const id = generateId();
56
38
  all.push({
57
39
  id: id,
40
+ text: '',
58
41
  isDefault: true,
59
42
  label: translator.t('drawingResponse.onDoubleClick', {
60
43
  lng: language
@@ -68,36 +51,26 @@ var TextDrawable = /*#__PURE__*/function () {
68
51
  createdAt: new Date(),
69
52
  type: 'text-entry'
70
53
  });
71
-
72
- _this.props.handleSessionChange();
73
- });
74
- (0, _defineProperty2["default"])(this, "handleMouseDown", function () {
75
- return _this.props.toggleTextSelected(true);
76
- });
77
- (0, _defineProperty2["default"])(this, "handleMouseUp", function () {
78
- return _this.props.toggleTextSelected(false);
54
+ this.props.handleSessionChange();
79
55
  });
80
- (0, _defineProperty2["default"])(this, "handleClick", function (e, id) {
81
- var current = _this.all.filter(function (item) {
82
- return item.id === id;
83
- })[0];
84
-
56
+ (0, _defineProperty2.default)(this, "handleMouseDown", () => this.props.toggleTextSelected(true));
57
+ (0, _defineProperty2.default)(this, "handleMouseUp", () => this.props.toggleTextSelected(false));
58
+ (0, _defineProperty2.default)(this, "handleClick", (e, id) => {
59
+ const current = this.all.filter(item => item.id === id)[0];
85
60
  current.transformerVisible = true;
86
-
87
- _this.props.forceUpdate();
61
+ this.props.forceUpdate();
88
62
  });
89
- (0, _defineProperty2["default"])(this, "handleDblClick", function (e, text) {
90
- var id = text.id,
91
- isDefault = text.isDefault;
92
-
93
- _this.toggleTextarea(id, true);
94
-
95
- var textNode = _this[TextDrawable.getTextNode(id)];
96
-
97
- var textareaNode = _this[TextDrawable.getTextareaNode(id)];
98
-
99
- var areaPosition = textNode._lastPos;
100
- textareaNode.value = isDefault ? '' : textNode.text();
63
+ (0, _defineProperty2.default)(this, "handleDblClick", (e, text) => {
64
+ const {
65
+ id,
66
+ isDefault
67
+ } = text;
68
+ this.toggleTextarea(id, true);
69
+ const textNode = this[TextDrawable.getTextNode(id)];
70
+ const textareaNode = this[TextDrawable.getTextareaNode(id)];
71
+ if (!textNode || !textareaNode) return;
72
+ const areaPosition = textNode.getAbsolutePosition();
73
+ textareaNode.value = text.text || '';
101
74
  textareaNode.style.position = 'absolute';
102
75
  textareaNode.style.top = areaPosition.y + 'px';
103
76
  textareaNode.style.left = areaPosition.x + 'px';
@@ -116,269 +89,184 @@ var TextDrawable = /*#__PURE__*/function () {
116
89
  textareaNode.style.transformOrigin = 'left top';
117
90
  textareaNode.style.textAlign = textNode.align();
118
91
  textareaNode.style.color = textNode.fill();
119
- var rotation = textNode.rotation();
120
- var transform = '';
121
-
122
- if (rotation) {
123
- transform += 'rotateZ(' + rotation + 'deg)';
124
- }
125
-
126
- var px = 0;
127
- var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;
128
-
129
- if (isFirefox) {
130
- px += 2 + Math.round(textNode.fontSize() / 20);
131
- }
132
-
133
- transform += 'translateY(-' + px + 'px)';
134
- textareaNode.style.transform = transform;
135
- textareaNode.style.height = 'auto';
136
- textareaNode.style.height = textareaNode.scrollHeight + 3 + 'px';
92
+ textareaNode.style.display = 'block';
93
+ let rotation = textNode.rotation();
94
+ textareaNode.style.transform = rotation ? `rotateZ(${rotation}deg)` : '';
137
95
  textareaNode.focus();
138
-
139
- var keyDownHandler = function keyDownHandler(e) {
140
- // hide on enter but don't hide on shift + enter
141
- if (e.keyCode === 13 && !e.shiftKey) {
142
- _this.toggleTextarea(id, false);
143
-
144
- _this.saveValue(id, textNode, textareaNode);
145
- } // on esc do not set value back to node
146
-
147
-
148
- if (e.keyCode === 27) {
149
- _this.toggleTextarea(id, false);
96
+ const keyDownHandler = e => {
97
+ if (e.key === 'Enter' && !e.shiftKey) {
98
+ this.saveValue(id, textareaNode);
99
+ }
100
+ if (e.key === 'Escape') {
101
+ this.toggleTextarea(id, false);
150
102
  }
151
103
  };
152
-
153
- textareaNode.addEventListener('keydown', keyDownHandler);
154
-
155
- _this.eventListenersDetachArray.push(function () {
156
- return textareaNode.removeEventListener('keydown', keyDownHandler);
157
- });
158
-
159
- var blurHandler = function blurHandler() {
160
- _this.showOnlyTextNodes();
161
-
162
- _this.saveValue(id, textNode, textareaNode);
104
+ const blurHandler = () => {
105
+ this.showOnlyTextNodes();
106
+ this.saveValue(id, textareaNode);
163
107
  };
164
-
108
+ textareaNode.addEventListener('keydown', keyDownHandler);
165
109
  textareaNode.addEventListener('blur', blurHandler);
166
-
167
- _this.eventListenersDetachArray.push(function () {
168
- return textareaNode.removeEventListener('blur', blurHandler);
110
+ this.eventListenersDetachArray.push(() => {
111
+ textareaNode.removeEventListener('keydown', keyDownHandler);
112
+ textareaNode.removeEventListener('blur', blurHandler);
169
113
  });
170
-
171
- _this.initializeDefault(id, isDefault);
172
-
173
- _this.props.forceUpdate();
114
+ this.initializeDefault(id, isDefault);
115
+ this.props.forceUpdate();
174
116
  });
175
- (0, _defineProperty2["default"])(this, "handleTransform", function (e, textNode) {
176
- _this[textNode].setAttrs({
177
- width: _this[textNode].width() * _this[textNode].scaleX(),
178
- scaleX: _this.props.scale
117
+ (0, _defineProperty2.default)(this, "handleTransform", (e, textNode) => {
118
+ this[textNode].setAttrs({
119
+ width: this[textNode].width() * this[textNode].scaleX(),
120
+ scaleX: this.props.scale
179
121
  });
180
122
  });
181
123
  this.all = props && props.all || [];
182
124
  this.eventListenersDetachArray = [];
183
125
  }
184
-
185
- (0, _createClass2["default"])(TextDrawable, [{
186
- key: "showOnlyTextNodes",
187
- value: function showOnlyTextNodes() {
188
- this.all.map(function (item) {
189
- item.textVisible = true;
190
- item.transformerVisible = false;
191
- item.textareaVisible = false;
192
- });
193
- }
194
- }, {
195
- key: "toggleTextarea",
196
- value: function toggleTextarea(id, value) {
197
- this.all = this.all.map(function (item) {
198
- if (item.id === id) {
199
- return _objectSpread(_objectSpread({}, item), {}, {
200
- textVisible: !value,
201
- transformerVisible: !value,
202
- textareaVisible: value
203
- });
204
- }
205
-
206
- return item;
207
- });
208
- this.props.forceUpdate();
209
- }
210
- }, {
211
- key: "initializeDefault",
212
- value: function initializeDefault(id, isDefault) {
213
- if (isDefault) {
214
- var current = this.all.filter(function (item) {
215
- return item.id === id;
216
- })[0];
217
- current.isDefault = false;
126
+ showOnlyTextNodes() {
127
+ this.all.map(item => {
128
+ item.textVisible = true;
129
+ item.transformerVisible = false;
130
+ item.textareaVisible = false;
131
+ });
132
+ }
133
+ toggleTextarea(id, value) {
134
+ this.all = this.all.map(item => {
135
+ if (item.id === id) {
136
+ return {
137
+ ...item,
138
+ textVisible: !value,
139
+ transformerVisible: !value,
140
+ textareaVisible: value
141
+ };
218
142
  }
143
+ return item;
144
+ });
145
+ this.props.forceUpdate();
146
+ }
147
+ initializeDefault(id, isDefault) {
148
+ if (isDefault) {
149
+ const current = this.all.filter(item => item.id === id)[0];
150
+ current.isDefault = false;
219
151
  }
220
- }, {
221
- key: "saveValue",
222
- value: function saveValue(id, textNode, textareaNode) {
223
- if (textareaNode.value) {
224
- textNode.text(textareaNode.value);
225
- } else {
226
- this.all = this.all.filter(function (text) {
227
- return text.id !== id;
228
- });
229
- this.props.forceUpdate();
230
- }
231
-
232
- this.props.handleSessionChange();
152
+ }
153
+ saveValue(id, textareaNode) {
154
+ const value = textareaNode.value;
155
+ this.all = this.all.map(t => t.id === id ? {
156
+ ...t,
157
+ text: value
158
+ } : t);
159
+ if (!value) {
160
+ this.all = this.all.filter(t => t.id !== id);
233
161
  }
234
- }, {
235
- key: "renderTextareas",
236
- value: function renderTextareas() {
237
- var _this2 = this;
238
-
239
- return this.all.map(function (text) {
240
- var id = text.id,
241
- textareaVisible = text.textareaVisible;
242
- var textareaNode = "textarea_".concat(id);
243
- return /*#__PURE__*/_react["default"].createElement("textarea", {
244
- key: textareaNode,
245
- ref: function ref(textarea) {
246
- _this2[textareaNode] = textarea;
247
- },
248
- style: {
249
- display: "".concat(textareaVisible ? 'block' : 'none')
250
- }
251
- });
162
+ this.toggleTextarea(id, false);
163
+ this.props.handleSessionChange();
164
+ this.props.forceUpdate();
165
+ }
166
+ renderTextareas() {
167
+ return this.all.map(text => {
168
+ const {
169
+ id,
170
+ textareaVisible
171
+ } = text;
172
+ const textareaNode = `textarea_${id}`;
173
+ return /*#__PURE__*/_react.default.createElement("textarea", {
174
+ key: textareaNode,
175
+ ref: textarea => {
176
+ this[textareaNode] = textarea;
177
+ },
178
+ style: {
179
+ display: `${textareaVisible ? 'block' : 'none'}`
180
+ }
252
181
  });
182
+ });
183
+ }
184
+ setInitialProps(props) {
185
+ if (!this.props) {
186
+ this.props = props;
253
187
  }
254
- }, {
255
- key: "setInitialProps",
256
- value: function setInitialProps(props) {
257
- if (!this.props) {
258
- this.props = props;
188
+ }
189
+ render(props) {
190
+ this.setInitialProps(props);
191
+ if (props.stage) {
192
+ const newStage = props.stage;
193
+
194
+ // setting the handler only once
195
+ if (newStage !== this.stage) {
196
+ const stageClickHandler = e => {
197
+ if (e.target !== this.stage) {
198
+ return;
199
+ }
200
+ this.showOnlyTextNodes();
201
+ this.props.forceUpdate();
202
+ };
203
+ newStage.on('click', stageClickHandler);
204
+ this.eventListenersDetachArray.push(() => newStage.off('click', stageClickHandler));
259
205
  }
206
+ this.stage = newStage;
260
207
  }
261
- }, {
262
- key: "render",
263
- value: function render(props) {
264
- var _this3 = this;
265
-
266
- this.setInitialProps(props);
267
-
268
- if (props.stage) {
269
- var newStage = props.stage; // setting the handler only once
270
-
271
- if (newStage !== this.stage) {
272
- var stageClickHandler = function stageClickHandler(e) {
273
- if (e.target !== _this3.stage) {
274
- return;
275
- }
276
-
277
- _this3.showOnlyTextNodes();
278
-
279
- _this3.props.forceUpdate();
280
- };
281
-
282
- newStage.on('click', stageClickHandler);
283
- this.eventListenersDetachArray.push(function () {
284
- return newStage.off('click', stageClickHandler);
285
- });
286
- }
287
-
288
- this.stage = newStage;
208
+ return this.all.map(text => {
209
+ const {
210
+ id,
211
+ label,
212
+ x,
213
+ y,
214
+ width,
215
+ textVisible,
216
+ rotation,
217
+ transformerVisible
218
+ } = text;
219
+ const textNode = `text_${id}`;
220
+ const transformerNode = `transformer_${id}`;
221
+ let extraProps = {};
222
+ if (!props.disabled) {
223
+ extraProps = {
224
+ onClick: e => this.handleClick(e, id),
225
+ onTap: e => this.handleClick(e, id),
226
+ onDblClick: e => this.handleDblClick(e, text),
227
+ onDblTap: e => this.handleDblClick(e, text),
228
+ onTransform: e => this.handleTransform(e, textNode),
229
+ onTransformEnd: this.props.handleSessionChange,
230
+ onMouseDown: this.handleMouseDown,
231
+ onTouchStart: this.handleMouseDown,
232
+ onMouseUp: this.handleMouseUp,
233
+ onTouchEnd: this.handleMouseUp,
234
+ onDragEnd: this.props.handleSessionChange,
235
+ onMouseEnter: this.props.onMouseOverElement,
236
+ onMouseLeave: this.props.onMouseOutElement
237
+ };
289
238
  }
290
-
291
- return this.all.map(function (text) {
292
- var id = text.id,
293
- label = text.label,
294
- x = text.x,
295
- y = text.y,
296
- width = text.width,
297
- textVisible = text.textVisible,
298
- rotation = text.rotation,
299
- transformerVisible = text.transformerVisible;
300
- var textNode = "text_".concat(id);
301
- var transformerNode = "transformer_".concat(id);
302
- var extraProps = {};
303
-
304
- if (!props.disabled) {
305
- extraProps = {
306
- onClick: function onClick(e) {
307
- return _this3.handleClick(e, id);
308
- },
309
- onTap: function onTap(e) {
310
- return _this3.handleClick(e, id);
311
- },
312
- onDblClick: function onDblClick(e) {
313
- return _this3.handleDblClick(e, text);
314
- },
315
- onDblTap: function onDblTap(e) {
316
- return _this3.handleDblClick(e, text);
317
- },
318
- onTransform: function onTransform(e) {
319
- return _this3.handleTransform(e, textNode);
320
- },
321
- onTransformEnd: _this3.props.handleSessionChange,
322
- onMouseDown: _this3.handleMouseDown,
323
- onTouchStart: _this3.handleMouseDown,
324
- onMouseUp: _this3.handleMouseUp,
325
- onTouchEnd: _this3.handleMouseUp,
326
- onDragEnd: _this3.props.handleSessionChange,
327
- onMouseEnter: _this3.props.onMouseOverElement,
328
- onMouseLeave: _this3.props.onMouseOutElement
329
- };
330
- }
331
-
332
- if (rotation) {
333
- extraProps.rotation = rotation;
334
- }
335
-
336
- return [/*#__PURE__*/_react["default"].createElement(_reactKonva.Text, (0, _extends2["default"])({
337
- key: id,
338
- bubbles: true,
339
- id: id,
340
- ref: function ref(text) {
341
- _this3[textNode] = text;
342
- },
343
- text: text.text || label,
344
- name: textNode,
345
- x: x,
346
- y: y,
347
- width: width,
348
- draggable: !props.disabled,
349
- visible: textVisible,
350
- fontSize: 16
351
- }, extraProps)), transformerVisible && /*#__PURE__*/_react["default"].createElement(_drawableTransformer["default"], {
352
- key: "transformer_".concat(id),
353
- ref: function ref(text) {
354
- _this3[transformerNode] = text;
355
- },
356
- selectedShapeName: textNode,
357
- onMouseDown: _this3.handleMouseDown,
358
- onTouchStart: _this3.handleMouseDown,
359
- onMouseUp: _this3.handleMouseUp,
360
- onTouchEnd: _this3.handleMouseUp
361
- })];
362
- });
363
- }
364
- }], [{
365
- key: "getTextareaNode",
366
- value: function getTextareaNode(id) {
367
- return "textarea_".concat(id);
368
- }
369
- }, {
370
- key: "getTextNode",
371
- value: function getTextNode(id) {
372
- return "text_".concat(id);
373
- }
374
- }, {
375
- key: "getTransformerNode",
376
- value: function getTransformerNode(id) {
377
- return "transformer_".concat(id);
378
- }
379
- }]);
380
- return TextDrawable;
381
- }();
382
-
383
- exports["default"] = TextDrawable;
384
- //# sourceMappingURL=drawable-text.js.map
239
+ if (rotation) {
240
+ extraProps.rotation = rotation;
241
+ }
242
+ return [/*#__PURE__*/_react.default.createElement(_reactKonva.Text, (0, _extends2.default)({
243
+ key: id,
244
+ bubbles: true,
245
+ id: id,
246
+ ref: text => {
247
+ this[textNode] = text;
248
+ },
249
+ text: text.text || label,
250
+ name: textNode,
251
+ x: x,
252
+ y: y,
253
+ width: width,
254
+ draggable: !props.disabled,
255
+ visible: textVisible,
256
+ fontSize: 16
257
+ }, extraProps)), transformerVisible && /*#__PURE__*/_react.default.createElement(_drawableTransformer.default, {
258
+ key: `transformer_${id}`,
259
+ ref: text => {
260
+ this[transformerNode] = text;
261
+ },
262
+ selectedShapeName: textNode,
263
+ onMouseDown: this.handleMouseDown,
264
+ onTouchStart: this.handleMouseDown,
265
+ onMouseUp: this.handleMouseUp,
266
+ onTouchEnd: this.handleMouseUp
267
+ })];
268
+ });
269
+ }
270
+ }
271
+ exports.default = TextDrawable;
272
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdEtvbnZhIiwiX3RyYW5zbGF0b3IiLCJfZHJhd2FibGVUcmFuc2Zvcm1lciIsInRyYW5zbGF0b3IiLCJUcmFuc2xhdG9yIiwiZ2VuZXJhdGVJZCIsIk1hdGgiLCJyYW5kb20iLCJ0b1N0cmluZyIsInN1YnN0cmluZyIsIkRhdGUiLCJnZXRUaW1lIiwiZXhwb3J0cyIsIlRleHREcmF3YWJsZSIsImdldFRleHRhcmVhTm9kZSIsImlkIiwiZ2V0VGV4dE5vZGUiLCJnZXRUcmFuc2Zvcm1lck5vZGUiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwiX2RlZmluZVByb3BlcnR5MiIsImRlZmF1bHQiLCJldmVudExpc3RlbmVyc0RldGFjaEFycmF5IiwiZm9yRWFjaCIsImZuIiwiYWxsIiwiZm9yY2VVcGRhdGUiLCJsYW5ndWFnZSIsInB1c2giLCJ0ZXh0IiwiaXNEZWZhdWx0IiwibGFiZWwiLCJ0IiwibG5nIiwid2lkdGgiLCJ4IiwibGVuZ3RoIiwieSIsInRleHRWaXNpYmxlIiwidHJhbnNmb3JtZXJWaXNpYmxlIiwidGV4dGFyZWFWaXNpYmxlIiwiY3JlYXRlZEF0IiwidHlwZSIsImhhbmRsZVNlc3Npb25DaGFuZ2UiLCJ0b2dnbGVUZXh0U2VsZWN0ZWQiLCJlIiwiY3VycmVudCIsImZpbHRlciIsIml0ZW0iLCJ0b2dnbGVUZXh0YXJlYSIsInRleHROb2RlIiwidGV4dGFyZWFOb2RlIiwiYXJlYVBvc2l0aW9uIiwiZ2V0QWJzb2x1dGVQb3NpdGlvbiIsInZhbHVlIiwic3R5bGUiLCJwb3NpdGlvbiIsInRvcCIsImxlZnQiLCJwYWRkaW5nIiwiaGVpZ2h0IiwiZm9udFNpemUiLCJib3JkZXIiLCJtYXJnaW4iLCJvdmVyZmxvdyIsImJhY2tncm91bmQiLCJvdXRsaW5lIiwicmVzaXplIiwibGluZUhlaWdodCIsImZvbnRGYW1pbHkiLCJ0cmFuc2Zvcm1PcmlnaW4iLCJ0ZXh0QWxpZ24iLCJhbGlnbiIsImNvbG9yIiwiZmlsbCIsImRpc3BsYXkiLCJyb3RhdGlvbiIsInRyYW5zZm9ybSIsImZvY3VzIiwia2V5RG93bkhhbmRsZXIiLCJrZXkiLCJzaGlmdEtleSIsInNhdmVWYWx1ZSIsImJsdXJIYW5kbGVyIiwic2hvd09ubHlUZXh0Tm9kZXMiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImluaXRpYWxpemVEZWZhdWx0Iiwic2V0QXR0cnMiLCJzY2FsZVgiLCJzY2FsZSIsIm1hcCIsInJlbmRlclRleHRhcmVhcyIsImNyZWF0ZUVsZW1lbnQiLCJyZWYiLCJ0ZXh0YXJlYSIsInNldEluaXRpYWxQcm9wcyIsInJlbmRlciIsInN0YWdlIiwibmV3U3RhZ2UiLCJzdGFnZUNsaWNrSGFuZGxlciIsInRhcmdldCIsIm9uIiwib2ZmIiwidHJhbnNmb3JtZXJOb2RlIiwiZXh0cmFQcm9wcyIsImRpc2FibGVkIiwib25DbGljayIsImhhbmRsZUNsaWNrIiwib25UYXAiLCJvbkRibENsaWNrIiwiaGFuZGxlRGJsQ2xpY2siLCJvbkRibFRhcCIsIm9uVHJhbnNmb3JtIiwiaGFuZGxlVHJhbnNmb3JtIiwib25UcmFuc2Zvcm1FbmQiLCJvbk1vdXNlRG93biIsImhhbmRsZU1vdXNlRG93biIsIm9uVG91Y2hTdGFydCIsIm9uTW91c2VVcCIsImhhbmRsZU1vdXNlVXAiLCJvblRvdWNoRW5kIiwib25EcmFnRW5kIiwib25Nb3VzZUVudGVyIiwib25Nb3VzZU92ZXJFbGVtZW50Iiwib25Nb3VzZUxlYXZlIiwib25Nb3VzZU91dEVsZW1lbnQiLCJUZXh0IiwiX2V4dGVuZHMyIiwiYnViYmxlcyIsIm5hbWUiLCJkcmFnZ2FibGUiLCJ2aXNpYmxlIiwic2VsZWN0ZWRTaGFwZU5hbWUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZHJhd2luZy1yZXNwb25zZS9kcmF3YWJsZS10ZXh0LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVGV4dCB9IGZyb20gJ3JlYWN0LWtvbnZhJztcbmltcG9ydCBUcmFuc2xhdG9yIGZyb20gJ0BwaWUtbGliL3RyYW5zbGF0b3InO1xuXG5jb25zdCB7IHRyYW5zbGF0b3IgfSA9IFRyYW5zbGF0b3I7XG5pbXBvcnQgVHJhbnNmb3JtZXIgZnJvbSAnLi9kcmF3YWJsZS10cmFuc2Zvcm1lcic7XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUlkID0gKCkgPT4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIpICsgbmV3IERhdGUoKS5nZXRUaW1lKCkudG9TdHJpbmcoMzYpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXh0RHJhd2FibGUge1xuICBzdGF0aWMgZ2V0VGV4dGFyZWFOb2RlKGlkKSB7XG4gICAgcmV0dXJuIGB0ZXh0YXJlYV8ke2lkfWA7XG4gIH1cblxuICBzdGF0aWMgZ2V0VGV4dE5vZGUoaWQpIHtcbiAgICByZXR1cm4gYHRleHRfJHtpZH1gO1xuICB9XG5cbiAgc3RhdGljIGdldFRyYW5zZm9ybWVyTm9kZShpZCkge1xuICAgIHJldHVybiBgdHJhbnNmb3JtZXJfJHtpZH1gO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICB0aGlzLmFsbCA9IChwcm9wcyAmJiBwcm9wcy5hbGwpIHx8IFtdO1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnNEZXRhY2hBcnJheSA9IFtdO1xuICB9XG5cbiAgcmVtb3ZlRXZlbnRMaXN0ZW5lcnMgPSAoKSA9PiB0aGlzLmV2ZW50TGlzdGVuZXJzRGV0YWNoQXJyYXkuZm9yRWFjaCgoZm4pID0+IGZuKCkpO1xuXG4gIHNldEFsbCA9IChhbGwpID0+IHtcbiAgICB0aGlzLmFsbCA9IGFsbDtcbiAgICB0aGlzLnByb3BzLmZvcmNlVXBkYXRlKCk7XG4gIH07XG5cbiAgYWRkTmV3VGV4dEVudHJ5ID0gKGxhbmd1YWdlKSA9PiB7XG4gICAgY29uc3QgYWxsID0gdGhpcy5hbGw7XG4gICAgY29uc3QgaWQgPSBnZW5lcmF0ZUlkKCk7XG5cbiAgICBhbGwucHVzaCh7XG4gICAgICBpZDogaWQsXG4gICAgICB0ZXh0OiAnJyxcbiAgICAgIGlzRGVmYXVsdDogdHJ1ZSxcbiAgICAgIGxhYmVsOiB0cmFuc2xhdG9yLnQoJ2RyYXdpbmdSZXNwb25zZS5vbkRvdWJsZUNsaWNrJywgeyBsbmc6IGxhbmd1YWdlIH0pLFxuICAgICAgd2lkdGg6IDIwMCxcbiAgICAgIHg6IChhbGwubGVuZ3RoICsgMSkgKiA1ICsgNTAsXG4gICAgICB5OiAoYWxsLmxlbmd0aCArIDEpICogNSArIDUwLFxuICAgICAgdGV4dFZpc2libGU6IHRydWUsXG4gICAgICB0cmFuc2Zvcm1lclZpc2libGU6IHRydWUsXG4gICAgICB0ZXh0YXJlYVZpc2libGU6IGZhbHNlLFxuICAgICAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgdHlwZTogJ3RleHQtZW50cnknLFxuICAgIH0pO1xuXG4gICAgdGhpcy5wcm9wcy5oYW5kbGVTZXNzaW9uQ2hhbmdlKCk7XG4gIH07XG5cbiAgc2hvd09ubHlUZXh0Tm9kZXMoKSB7XG4gICAgdGhpcy5hbGwubWFwKChpdGVtKSA9PiB7XG4gICAgICBpdGVtLnRleHRWaXNpYmxlID0gdHJ1ZTtcbiAgICAgIGl0ZW0udHJhbnNmb3JtZXJWaXNpYmxlID0gZmFsc2U7XG4gICAgICBpdGVtLnRleHRhcmVhVmlzaWJsZSA9IGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgdG9nZ2xlVGV4dGFyZWEoaWQsIHZhbHVlKSB7XG4gICAgdGhpcy5hbGwgPSB0aGlzLmFsbC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIGlmIChpdGVtLmlkID09PSBpZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgdGV4dFZpc2libGU6ICF2YWx1ZSxcbiAgICAgICAgICB0cmFuc2Zvcm1lclZpc2libGU6ICF2YWx1ZSxcbiAgICAgICAgICB0ZXh0YXJlYVZpc2libGU6IHZhbHVlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfSk7XG4gICAgdGhpcy5wcm9wcy5mb3JjZVVwZGF0ZSgpO1xuICB9XG5cbiAgaW5pdGlhbGl6ZURlZmF1bHQoaWQsIGlzRGVmYXVsdCkge1xuICAgIGlmIChpc0RlZmF1bHQpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmFsbC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGlkKVswXTtcbiAgICAgIGN1cnJlbnQuaXNEZWZhdWx0ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgc2F2ZVZhbHVlKGlkLCB0ZXh0YXJlYU5vZGUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRleHRhcmVhTm9kZS52YWx1ZTtcbiAgICB0aGlzLmFsbCA9IHRoaXMuYWxsLm1hcCgodCkgPT5cbiAgICAgIHQuaWQgPT09IGlkID8geyAuLi50LCB0ZXh0OiB2YWx1ZSB9IDogdFxuICAgICk7XG5cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICB0aGlzLmFsbCA9IHRoaXMuYWxsLmZpbHRlcigodCkgPT4gdC5pZCAhPT0gaWQpO1xuICAgIH1cblxuICAgIHRoaXMudG9nZ2xlVGV4dGFyZWEoaWQsIGZhbHNlKTtcbiAgICB0aGlzLnByb3BzLmhhbmRsZVNlc3Npb25DaGFuZ2UoKTtcbiAgICB0aGlzLnByb3BzLmZvcmNlVXBkYXRlKCk7XG4gIH1cblxuICBoYW5kbGVNb3VzZURvd24gPSAoKSA9PiB0aGlzLnByb3BzLnRvZ2dsZVRleHRTZWxlY3RlZCh0cnVlKTtcbiAgaGFuZGxlTW91c2VVcCA9ICgpID0+IHRoaXMucHJvcHMudG9nZ2xlVGV4dFNlbGVjdGVkKGZhbHNlKTtcblxuICBoYW5kbGVDbGljayA9IChlLCBpZCkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmFsbC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGlkKVswXTtcbiAgICBjdXJyZW50LnRyYW5zZm9ybWVyVmlzaWJsZSA9IHRydWU7XG4gICAgdGhpcy5wcm9wcy5mb3JjZVVwZGF0ZSgpO1xuICB9O1xuXG4gIGhhbmRsZURibENsaWNrID0gKGUsIHRleHQpID0+IHtcbiAgICBjb25zdCB7IGlkLCBpc0RlZmF1bHQgfSA9IHRleHQ7XG4gICAgdGhpcy50b2dnbGVUZXh0YXJlYShpZCwgdHJ1ZSk7XG5cbiAgICBjb25zdCB0ZXh0Tm9kZSA9IHRoaXNbVGV4dERyYXdhYmxlLmdldFRleHROb2RlKGlkKV07XG4gICAgY29uc3QgdGV4dGFyZWFOb2RlID0gdGhpc1tUZXh0RHJhd2FibGUuZ2V0VGV4dGFyZWFOb2RlKGlkKV07XG5cbiAgICBpZiAoIXRleHROb2RlIHx8ICF0ZXh0YXJlYU5vZGUpIHJldHVybjtcblxuICAgIGNvbnN0IGFyZWFQb3NpdGlvbiA9IHRleHROb2RlLmdldEFic29sdXRlUG9zaXRpb24oKTtcblxuICAgIHRleHRhcmVhTm9kZS52YWx1ZSA9IHRleHQudGV4dCB8fCAnJztcbiAgICB0ZXh0YXJlYU5vZGUuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIHRleHRhcmVhTm9kZS5zdHlsZS50b3AgPSBhcmVhUG9zaXRpb24ueSArICdweCc7XG4gICAgdGV4dGFyZWFOb2RlLnN0eWxlLmxlZnQgPSBhcmVhUG9zaXRpb24ueCArICdweCc7XG4gICAgdGV4dGFyZWFOb2RlLnN0eWxlLndpZHRoID0gdGV4dE5vZGUud2lkdGgoKSAtIHRleHROb2RlLnBhZGRpbmcoKSAqIDIgKyAncHgnO1xuICAgIHRleHRhcmVhTm9kZS5zdHlsZS5oZWlnaHQgPSB0ZXh0Tm9kZS5oZWlnaHQoKSAtIHRleHROb2RlLnBhZGRpbmcoKSAqIDIgKyA1ICsgJ3B4JztcbiAgICB0ZXh0YXJlYU5vZGUuc3R5bGUuZm9udFNpemUgPSB0ZXh0Tm9kZS5mb250U2l6ZSgpICsgJ3B4JztcbiAgICB0ZXh0YXJlYU5vZGUuc3R5bGUuYm9yZGVyID0gJ25vbmUnO1xuICAgIHRleHRhcmVhTm9kZS5zdHlsZS5wYWRkaW5nID0gJzBweCc7XG4gICAgdGV4dGFyZWFOb2RlLnN0eWxlLm1hcmdpbiA9ICcwcHgnO1xuICAgIHRleHRhcmVhTm9kZS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICAgIHRleHRhcmVhTm9kZS5zdHlsZS5iYWNrZ3JvdW5kID0gJ25vbmUnO1xuICAgIHRleHRhcmVhTm9kZS5zdHlsZS5vdXRsaW5lID0gJ25vbmUnO1xuICAgIHRleHRhcmVhTm9kZS5zdHlsZS5yZXNpemUgPSAnbm9uZSc7XG4gICAgdGV4dGFyZWFOb2RlLnN0eWxlLmxpbmVIZWlnaHQgPSB0ZXh0Tm9kZS5saW5lSGVpZ2h0KCk7XG4gICAgdGV4dGFyZWFOb2RlLnN0eWxlLmZvbnRGYW1pbHkgPSB0ZXh0Tm9kZS5mb250RmFtaWx5KCk7XG4gICAgdGV4dGFyZWFOb2RlLnN0eWxlLnRyYW5zZm9ybU9yaWdpbiA9ICdsZWZ0IHRvcCc7XG4gICAgdGV4dGFyZWFOb2RlLnN0eWxlLnRleHRBbGlnbiA9IHRleHROb2RlLmFsaWduKCk7XG4gICAgdGV4dGFyZWFOb2RlLnN0eWxlLmNvbG9yID0gdGV4dE5vZGUuZmlsbCgpO1xuICAgIHRleHRhcmVhTm9kZS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcblxuICAgIGxldCByb3RhdGlvbiA9IHRleHROb2RlLnJvdGF0aW9uKCk7XG4gICAgdGV4dGFyZWFOb2RlLnN0eWxlLnRyYW5zZm9ybSA9IHJvdGF0aW9uID8gYHJvdGF0ZVooJHtyb3RhdGlvbn1kZWcpYCA6ICcnO1xuXG4gICAgdGV4dGFyZWFOb2RlLmZvY3VzKCk7XG5cbiAgICBjb25zdCBrZXlEb3duSGFuZGxlciA9IChlKSA9PiB7XG4gICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgJiYgIWUuc2hpZnRLZXkpIHtcbiAgICAgICAgdGhpcy5zYXZlVmFsdWUoaWQsIHRleHRhcmVhTm9kZSk7XG4gICAgICB9XG4gICAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlVGV4dGFyZWEoaWQsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgYmx1ckhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLnNob3dPbmx5VGV4dE5vZGVzKCk7XG4gICAgICB0aGlzLnNhdmVWYWx1ZShpZCwgdGV4dGFyZWFOb2RlKTtcbiAgICB9O1xuXG4gICAgdGV4dGFyZWFOb2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBrZXlEb3duSGFuZGxlcik7XG4gICAgdGV4dGFyZWFOb2RlLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCBibHVySGFuZGxlcik7XG5cbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzRGV0YWNoQXJyYXkucHVzaCgoKSA9PiB7XG4gICAgICB0ZXh0YXJlYU5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGtleURvd25IYW5kbGVyKTtcbiAgICAgIHRleHRhcmVhTm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKCdibHVyJywgYmx1ckhhbmRsZXIpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5pbml0aWFsaXplRGVmYXVsdChpZCwgaXNEZWZhdWx0KTtcbiAgICB0aGlzLnByb3BzLmZvcmNlVXBkYXRlKCk7XG4gIH07XG5cbiAgaGFuZGxlVHJhbnNmb3JtID0gKGUsIHRleHROb2RlKSA9PiB7XG4gICAgdGhpc1t0ZXh0Tm9kZV0uc2V0QXR0cnMoe1xuICAgICAgd2lkdGg6IHRoaXNbdGV4dE5vZGVdLndpZHRoKCkgKiB0aGlzW3RleHROb2RlXS5zY2FsZVgoKSxcbiAgICAgIHNjYWxlWDogdGhpcy5wcm9wcy5zY2FsZSxcbiAgICB9KTtcbiAgfTtcblxuICByZW5kZXJUZXh0YXJlYXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWxsLm1hcCgodGV4dCkgPT4ge1xuICAgICAgY29uc3QgeyBpZCwgdGV4dGFyZWFWaXNpYmxlIH0gPSB0ZXh0O1xuICAgICAgY29uc3QgdGV4dGFyZWFOb2RlID0gYHRleHRhcmVhXyR7aWR9YDtcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAga2V5PXt0ZXh0YXJlYU5vZGV9XG4gICAgICAgICAgcmVmPXsodGV4dGFyZWEpID0+IHtcbiAgICAgICAgICAgIHRoaXNbdGV4dGFyZWFOb2RlXSA9IHRleHRhcmVhO1xuICAgICAgICAgIH19XG4gICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogYCR7dGV4dGFyZWFWaXNpYmxlID8gJ2Jsb2NrJyA6ICdub25lJ31gIH19XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0SW5pdGlhbFByb3BzKHByb3BzKSB7XG4gICAgaWYgKCF0aGlzLnByb3BzKSB7XG4gICAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKHByb3BzKSB7XG4gICAgdGhpcy5zZXRJbml0aWFsUHJvcHMocHJvcHMpO1xuXG4gICAgaWYgKHByb3BzLnN0YWdlKSB7XG4gICAgICBjb25zdCBuZXdTdGFnZSA9IHByb3BzLnN0YWdlO1xuXG4gICAgICAvLyBzZXR0aW5nIHRoZSBoYW5kbGVyIG9ubHkgb25jZVxuICAgICAgaWYgKG5ld1N0YWdlICE9PSB0aGlzLnN0YWdlKSB7XG4gICAgICAgIGNvbnN0IHN0YWdlQ2xpY2tIYW5kbGVyID0gKGUpID0+IHtcbiAgICAgICAgICBpZiAoZS50YXJnZXQgIT09IHRoaXMuc3RhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnNob3dPbmx5VGV4dE5vZGVzKCk7XG4gICAgICAgICAgdGhpcy5wcm9wcy5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIG5ld1N0YWdlLm9uKCdjbGljaycsIHN0YWdlQ2xpY2tIYW5kbGVyKTtcblxuICAgICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzRGV0YWNoQXJyYXkucHVzaCgoKSA9PiBuZXdTdGFnZS5vZmYoJ2NsaWNrJywgc3RhZ2VDbGlja0hhbmRsZXIpKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdGFnZSA9IG5ld1N0YWdlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFsbC5tYXAoKHRleHQpID0+IHtcbiAgICAgIGNvbnN0IHsgaWQsIGxhYmVsLCB4LCB5LCB3aWR0aCwgdGV4dFZpc2libGUsIHJvdGF0aW9uLCB0cmFuc2Zvcm1lclZpc2libGUgfSA9IHRleHQ7XG5cbiAgICAgIGNvbnN0IHRleHROb2RlID0gYHRleHRfJHtpZH1gO1xuICAgICAgY29uc3QgdHJhbnNmb3JtZXJOb2RlID0gYHRyYW5zZm9ybWVyXyR7aWR9YDtcbiAgICAgIGxldCBleHRyYVByb3BzID0ge307XG5cbiAgICAgIGlmICghcHJvcHMuZGlzYWJsZWQpIHtcbiAgICAgICAgZXh0cmFQcm9wcyA9IHtcbiAgICAgICAgICBvbkNsaWNrOiAoZSkgPT4gdGhpcy5oYW5kbGVDbGljayhlLCBpZCksXG4gICAgICAgICAgb25UYXA6IChlKSA9PiB0aGlzLmhhbmRsZUNsaWNrKGUsIGlkKSxcbiAgICAgICAgICBvbkRibENsaWNrOiAoZSkgPT4gdGhpcy5oYW5kbGVEYmxDbGljayhlLCB0ZXh0KSxcbiAgICAgICAgICBvbkRibFRhcDogKGUpID0+IHRoaXMuaGFuZGxlRGJsQ2xpY2soZSwgdGV4dCksXG4gICAgICAgICAgb25UcmFuc2Zvcm06IChlKSA9PiB0aGlzLmhhbmRsZVRyYW5zZm9ybShlLCB0ZXh0Tm9kZSksXG4gICAgICAgICAgb25UcmFuc2Zvcm1FbmQ6IHRoaXMucHJvcHMuaGFuZGxlU2Vzc2lvbkNoYW5nZSxcbiAgICAgICAgICBvbk1vdXNlRG93bjogdGhpcy5oYW5kbGVNb3VzZURvd24sXG4gICAgICAgICAgb25Ub3VjaFN0YXJ0OiB0aGlzLmhhbmRsZU1vdXNlRG93bixcbiAgICAgICAgICBvbk1vdXNlVXA6IHRoaXMuaGFuZGxlTW91c2VVcCxcbiAgICAgICAgICBvblRvdWNoRW5kOiB0aGlzLmhhbmRsZU1vdXNlVXAsXG4gICAgICAgICAgb25EcmFnRW5kOiB0aGlzLnByb3BzLmhhbmRsZVNlc3Npb25DaGFuZ2UsXG4gICAgICAgICAgb25Nb3VzZUVudGVyOiB0aGlzLnByb3BzLm9uTW91c2VPdmVyRWxlbWVudCxcbiAgICAgICAgICBvbk1vdXNlTGVhdmU6IHRoaXMucHJvcHMub25Nb3VzZU91dEVsZW1lbnQsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChyb3RhdGlvbikge1xuICAgICAgICBleHRyYVByb3BzLnJvdGF0aW9uID0gcm90YXRpb247XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIDxUZXh0XG4gICAgICAgICAga2V5PXtpZH1cbiAgICAgICAgICBidWJibGVzPXt0cnVlfVxuICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICByZWY9eyh0ZXh0KSA9PiB7XG4gICAgICAgICAgICB0aGlzW3RleHROb2RlXSA9IHRleHQ7XG4gICAgICAgICAgfX1cbiAgICAgICAgICB0ZXh0PXt0ZXh0LnRleHQgfHwgbGFiZWx9XG4gICAgICAgICAgbmFtZT17dGV4dE5vZGV9XG4gICAgICAgICAgeD17eH1cbiAgICAgICAgICB5PXt5fVxuICAgICAgICAgIHdpZHRoPXt3aWR0aH1cbiAgICAgICAgICBkcmFnZ2FibGU9eyFwcm9wcy5kaXNhYmxlZH1cbiAgICAgICAgICB2aXNpYmxlPXt0ZXh0VmlzaWJsZX1cbiAgICAgICAgICBmb250U2l6ZT17MTZ9XG4gICAgICAgICAgey4uLmV4dHJhUHJvcHN9XG4gICAgICAgIC8+LFxuICAgICAgICB0cmFuc2Zvcm1lclZpc2libGUgJiYgKFxuICAgICAgICAgIDxUcmFuc2Zvcm1lclxuICAgICAgICAgICAga2V5PXtgdHJhbnNmb3JtZXJfJHtpZH1gfVxuICAgICAgICAgICAgcmVmPXsodGV4dCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzW3RyYW5zZm9ybWVyTm9kZV0gPSB0ZXh0O1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHNlbGVjdGVkU2hhcGVOYW1lPXt0ZXh0Tm9kZX1cbiAgICAgICAgICAgIG9uTW91c2VEb3duPXt0aGlzLmhhbmRsZU1vdXNlRG93bn1cbiAgICAgICAgICAgIG9uVG91Y2hTdGFydD17dGhpcy5oYW5kbGVNb3VzZURvd259XG4gICAgICAgICAgICBvbk1vdXNlVXA9e3RoaXMuaGFuZGxlTW91c2VVcH1cbiAgICAgICAgICAgIG9uVG91Y2hFbmQ9e3RoaXMuaGFuZGxlTW91c2VVcH1cbiAgICAgICAgICAvPlxuICAgICAgICApLFxuICAgICAgXTtcbiAgICB9KTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxXQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxXQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFHQSxJQUFBRyxvQkFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBREEsTUFBTTtFQUFFSTtBQUFXLENBQUMsR0FBR0MsbUJBQVU7QUFHMUIsTUFBTUMsVUFBVSxHQUFHQSxDQUFBLEtBQU1DLElBQUksQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQ0MsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSUMsSUFBSSxDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLENBQUMsQ0FBQ0gsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUFDSSxPQUFBLENBQUFQLFVBQUEsR0FBQUEsVUFBQTtBQUU3RixNQUFNUSxZQUFZLENBQUM7RUFDaEMsT0FBT0MsZUFBZUEsQ0FBQ0MsRUFBRSxFQUFFO0lBQ3pCLE9BQU8sWUFBWUEsRUFBRSxFQUFFO0VBQ3pCO0VBRUEsT0FBT0MsV0FBV0EsQ0FBQ0QsRUFBRSxFQUFFO0lBQ3JCLE9BQU8sUUFBUUEsRUFBRSxFQUFFO0VBQ3JCO0VBRUEsT0FBT0Usa0JBQWtCQSxDQUFDRixFQUFFLEVBQUU7SUFDNUIsT0FBTyxlQUFlQSxFQUFFLEVBQUU7RUFDNUI7RUFFQUcsV0FBV0EsQ0FBQ0MsS0FBSyxFQUFFO0lBQUEsSUFBQUMsZ0JBQUEsQ0FBQUMsT0FBQSxnQ0FLSSxN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