@pie-lib/text-select 1.14.0-beta.0 → 1.14.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.
@@ -1,311 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.words = exports.sort = exports.sentences = exports.paragraphs = exports.normalize = exports.intersection = exports.handleSentence = void 0;
9
-
10
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
-
12
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
-
14
- var _compact = _interopRequireDefault(require("lodash/compact"));
15
-
16
- var _parseEnglish = _interopRequireDefault(require("@pie-framework/parse-english"));
17
-
18
- var _clone = _interopRequireDefault(require("lodash/clone"));
19
-
20
- var g = function g(str, node) {
21
- if (node.children) {
22
- return node.children.reduce(g, str);
23
- } else if (node.value) {
24
- return str + node.value;
25
- } else {
26
- return str;
27
- }
28
- };
29
-
30
- var getParagraph = function getParagraph(p) {
31
- return g('', p);
32
- };
33
-
34
- var getSentence = function getSentence(s) {
35
- return g('', s);
36
- };
37
-
38
- var getWord = function getWord(w) {
39
- return g('', w);
40
- };
41
-
42
- var paragraphs = function paragraphs(text) {
43
- var tree = new _parseEnglish["default"]().parse(text);
44
- var out = tree.children.reduce(function (acc, child) {
45
- if (child.type === 'ParagraphNode') {
46
- var paragraph = {
47
- text: getParagraph(child),
48
- start: child.position.start.offset,
49
- end: child.position.end.offset
50
- };
51
- return acc.concat([paragraph]);
52
- } else {
53
- return acc;
54
- }
55
- }, []);
56
- return out;
57
- };
58
-
59
- exports.paragraphs = paragraphs;
60
-
61
- var handleSentence = function handleSentence(child, acc) {
62
- var sentenceChilds = []; // we parse the children of the sentence
63
-
64
- var newAcc = child.children.reduce(function (acc, child) {
65
- // if we find a whitespace node that's \n, we end the sentence
66
- if (child.type === 'WhiteSpaceNode' && child.value === '\n') {
67
- if (sentenceChilds.length) {
68
- var firstWord = sentenceChilds[0]; // we create a sentence starting from the first word until the new line
69
-
70
- var sentence = {
71
- text: sentenceChilds.map(function (d) {
72
- return getSentence(d);
73
- }).join(''),
74
- start: firstWord.position.start.offset,
75
- end: child.position.start.offset
76
- }; // we remove all the elements from the array
77
-
78
- sentenceChilds.splice(0, sentenceChilds.length);
79
- return acc.concat([sentence]);
80
- }
81
- } else {
82
- // otherwise we add it to the array that contains the child forming a sentence
83
- sentenceChilds.push(child);
84
- }
85
-
86
- return acc;
87
- }, acc); // we treat the case when no \n character is found at the end
88
- // so we create a sentence from the last words or white spaces found
89
-
90
- if (sentenceChilds.length) {
91
- var firstWord = sentenceChilds[0];
92
- var lastWord = sentenceChilds[sentenceChilds.length - 1];
93
- var sentence = {
94
- text: sentenceChilds.map(function (d) {
95
- return getSentence(d);
96
- }).join(''),
97
- start: firstWord.position.start.offset,
98
- end: lastWord.position.end.offset
99
- };
100
- newAcc = newAcc.concat([sentence]);
101
- sentenceChilds.splice(0, sentenceChilds.length);
102
- }
103
-
104
- return newAcc;
105
- };
106
-
107
- exports.handleSentence = handleSentence;
108
-
109
- var sentences = function sentences(text) {
110
- var tree = new _parseEnglish["default"]().parse(text);
111
- var out = tree.children.reduce(function (acc, child) {
112
- if (child.type === 'ParagraphNode') {
113
- return child.children.reduce(function (acc, child) {
114
- if (child.type === 'SentenceNode') {
115
- var newAcc = handleSentence(child, acc);
116
- return newAcc || acc;
117
- } else {
118
- return acc;
119
- }
120
- }, acc);
121
- } else {
122
- return acc;
123
- }
124
- }, []);
125
- return out;
126
- };
127
-
128
- exports.sentences = sentences;
129
-
130
- var words = function words(text) {
131
- var tree = new _parseEnglish["default"]().parse(text);
132
- var out = tree.children.reduce(function (acc, child) {
133
- if (child.type === 'ParagraphNode') {
134
- return child.children.reduce(function (acc, child) {
135
- if (child.type === 'SentenceNode') {
136
- return child.children.reduce(function (acc, child) {
137
- if (child.type === 'WordNode') {
138
- var node = {
139
- text: getWord(child),
140
- start: child.position.start.offset,
141
- end: child.position.end.offset
142
- };
143
- return acc.concat([node]);
144
- } else {
145
- return acc;
146
- }
147
- }, acc);
148
- } else {
149
- return acc;
150
- }
151
- }, acc);
152
- } else {
153
- return acc;
154
- }
155
- }, []);
156
- return out;
157
- };
158
-
159
- exports.words = words;
160
-
161
- var Intersection = /*#__PURE__*/function () {
162
- function Intersection(results) {
163
- (0, _classCallCheck2["default"])(this, Intersection);
164
- this.results = results;
165
- }
166
-
167
- (0, _createClass2["default"])(Intersection, [{
168
- key: "hasOverlap",
169
- get: function get() {
170
- return this.results.filter(function (r) {
171
- return r.type === 'overlap';
172
- }).length > 0;
173
- }
174
- }, {
175
- key: "surroundedTokens",
176
- get: function get() {
177
- return this.results.filter(function (r) {
178
- return r.type === 'within-selection';
179
- }).map(function (t) {
180
- return t.token;
181
- });
182
- }
183
- }]);
184
- return Intersection;
185
- }();
186
- /**
187
- * get intersection info for the selection in relation to tokens.
188
- * @param {{start: number, end: number}} selection
189
- * @param {{start: number, end: number}[]} tokens
190
- * @return {tokens: [], type: 'overlap|no-overlap|contains'}
191
- */
192
-
193
-
194
- var intersection = function intersection(selection, tokens) {
195
- var start = selection.start,
196
- end = selection.end;
197
-
198
- var startsWithin = function startsWithin(t) {
199
- return start >= t.start && start < t.end;
200
- };
201
-
202
- var endsWithin = function endsWithin(t) {
203
- return end > t.start && end <= t.end;
204
- };
205
-
206
- var mapped = tokens.map(function (t) {
207
- if (start === t.start && end === t.end) {
208
- return {
209
- token: t,
210
- type: 'exact-fit'
211
- };
212
- } else if (start <= t.start && end >= t.end) {
213
- return {
214
- token: t,
215
- type: 'within-selection'
216
- };
217
- } else if (startsWithin(t) || endsWithin(t)) {
218
- return {
219
- token: t,
220
- type: 'overlap'
221
- };
222
- }
223
- });
224
- return new Intersection((0, _compact["default"])(mapped));
225
- };
226
-
227
- exports.intersection = intersection;
228
-
229
- var sort = function sort(tokens) {
230
- if (!Array.isArray(tokens)) {
231
- return tokens;
232
- } else {
233
- var out = (0, _clone["default"])(tokens);
234
- out.sort(function (a, b) {
235
- var s = a.start < b.start ? -1 : a.start > b.start ? 1 : 0;
236
- var e = a.end < b.end ? -1 : a.end > b.end ? 1 : 0;
237
-
238
- if (s === -1 && e !== -1) {
239
- throw new Error("sort does not support intersecting tokens. a: ".concat(a.start, "-").concat(a.end, ", b: ").concat(b.start, "-").concat(b.end));
240
- }
241
-
242
- return s;
243
- });
244
- return out;
245
- }
246
- };
247
-
248
- exports.sort = sort;
249
-
250
- var normalize = function normalize(textToNormalize, tokens) {
251
- // making sure text provided is a string
252
- var text = textToNormalize || '';
253
-
254
- if (!Array.isArray(tokens) || tokens.length === 0) {
255
- return [{
256
- text: text,
257
- start: 0,
258
- end: text.length
259
- }];
260
- }
261
-
262
- var out = sort(tokens).reduce(function (acc, t, index, outer) {
263
- var tokens = [];
264
- var lastIndex = acc.lastIndex;
265
-
266
- if (t.start === lastIndex) {
267
- tokens = [{
268
- text: text.substring(lastIndex, t.end),
269
- start: lastIndex,
270
- end: t.end,
271
- predefined: true,
272
- correct: t.correct,
273
- isMissing: t.isMissing
274
- }];
275
- } else if (lastIndex < t.start) {
276
- tokens = [{
277
- text: text.substring(lastIndex, t.start),
278
- start: lastIndex,
279
- end: t.start
280
- }, {
281
- text: text.substring(t.start, t.end),
282
- start: t.start,
283
- end: t.end,
284
- predefined: true,
285
- correct: t.correct,
286
- isMissing: t.isMissing
287
- }];
288
- }
289
-
290
- if (index === outer.length - 1 && t.end < text.length) {
291
- var last = {
292
- text: text.substring(t.end),
293
- start: t.end,
294
- end: text.length
295
- };
296
- tokens.push(last);
297
- }
298
-
299
- return {
300
- lastIndex: tokens.length ? tokens[tokens.length - 1].end : lastIndex,
301
- result: acc.result.concat(tokens)
302
- };
303
- }, {
304
- result: [],
305
- lastIndex: 0
306
- });
307
- return out.result;
308
- };
309
-
310
- exports.normalize = normalize;
311
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b2tlbml6ZXIvYnVpbGRlci5qcyJdLCJuYW1lcyI6WyJnIiwic3RyIiwibm9kZSIsImNoaWxkcmVuIiwicmVkdWNlIiwidmFsdWUiLCJnZXRQYXJhZ3JhcGgiLCJwIiwiZ2V0U2VudGVuY2UiLCJzIiwiZ2V0V29yZCIsInciLCJwYXJhZ3JhcGhzIiwidGV4dCIsInRyZWUiLCJFbmdsaXNoIiwicGFyc2UiLCJvdXQiLCJhY2MiLCJjaGlsZCIsInR5cGUiLCJwYXJhZ3JhcGgiLCJzdGFydCIsInBvc2l0aW9uIiwib2Zmc2V0IiwiZW5kIiwiY29uY2F0IiwiaGFuZGxlU2VudGVuY2UiLCJzZW50ZW5jZUNoaWxkcyIsIm5ld0FjYyIsImxlbmd0aCIsImZpcnN0V29yZCIsInNlbnRlbmNlIiwibWFwIiwiZCIsImpvaW4iLCJzcGxpY2UiLCJwdXNoIiwibGFzdFdvcmQiLCJzZW50ZW5jZXMiLCJ3b3JkcyIsIkludGVyc2VjdGlvbiIsInJlc3VsdHMiLCJmaWx0ZXIiLCJyIiwidCIsInRva2VuIiwiaW50ZXJzZWN0aW9uIiwic2VsZWN0aW9uIiwidG9rZW5zIiwic3RhcnRzV2l0aGluIiwiZW5kc1dpdGhpbiIsIm1hcHBlZCIsInNvcnQiLCJBcnJheSIsImlzQXJyYXkiLCJhIiwiYiIsImUiLCJFcnJvciIsIm5vcm1hbGl6ZSIsInRleHRUb05vcm1hbGl6ZSIsImluZGV4Iiwib3V0ZXIiLCJsYXN0SW5kZXgiLCJzdWJzdHJpbmciLCJwcmVkZWZpbmVkIiwiY29ycmVjdCIsImlzTWlzc2luZyIsImxhc3QiLCJyZXN1bHQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFFQSxJQUFNQSxDQUFDLEdBQUcsU0FBSkEsQ0FBSSxDQUFDQyxHQUFELEVBQU1DLElBQU4sRUFBZTtBQUN2QixNQUFJQSxJQUFJLENBQUNDLFFBQVQsRUFBbUI7QUFDakIsV0FBT0QsSUFBSSxDQUFDQyxRQUFMLENBQWNDLE1BQWQsQ0FBcUJK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SEMsT0FBYjtBQUtBbUIsTUFBQUEsTUFBTSxDQUFDWixJQUFQLENBQVlnQyxJQUFaO0FBQ0Q7O0FBRUQsV0FBTztBQUNMTCxNQUFBQSxTQUFTLEVBQUVmLE1BQU0sQ0FBQ25CLE1BQVAsR0FBZ0JtQixNQUFNLENBQUNBLE1BQU0sQ0FBQ25CLE1BQVAsR0FBZ0IsQ0FBakIsQ0FBTixDQUEwQkwsR0FBMUMsR0FBZ0R1QyxTQUR0RDtBQUVMTSxNQUFBQSxNQUFNLEVBQUVwRCxHQUFHLENBQUNvRCxNQUFKLENBQVc1QyxNQUFYLENBQWtCdUIsTUFBbEI7QUFGSCxLQUFQO0FBSUQsR0EvQ1MsRUFnRFY7QUFBRXFCLElBQUFBLE1BQU0sRUFBRSxFQUFWO0FBQWNOLElBQUFBLFNBQVMsRUFBRTtBQUF6QixHQWhEVSxDQUFaO0FBbURBLFNBQU8vQyxHQUFHLENBQUNxRCxNQUFYO0FBQ0QsQ0FsRU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29tcGFjdCBmcm9tICdsb2Rhc2gvY29tcGFjdCc7XG5pbXBvcnQgRW5nbGlzaCBmcm9tICdAcGllLWZyYW1ld29yay9wYXJzZS1lbmdsaXNoJztcbmltcG9ydCBjbG9uZSBmcm9tICdsb2Rhc2gvY2xvbmUnO1xuXG5jb25zdCBnID0gKHN0ciwgbm9kZSkgPT4ge1xuICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgIHJldHVybiBub2RlLmNoaWxkcmVuLnJlZHVjZShnLCBzdHIpO1xuICB9IGVsc2UgaWYgKG5vZGUudmFsdWUpIHtcbiAgICByZXR1cm4gc3RyICsgbm9kZS52YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG59O1xuXG5jb25zdCBnZXRQYXJhZ3JhcGggPSAocCkgPT4gZygnJywgcCk7XG5cbmNvbnN0IGdldFNlbnRlbmNlID0gKHMpID0+IGcoJycsIHMpO1xuXG5jb25zdCBnZXRXb3JkID0gKHcpID0+IGcoJycsIHcpO1xuXG5leHBvcnQgY29uc3QgcGFyYWdyYXBocyA9ICh0ZXh0KSA9PiB7XG4gIGNvbnN0IHRyZWUgPSBuZXcgRW5nbGlzaCgpLnBhcnNlKHRleHQpO1xuXG4gIGNvbnN0IG91dCA9IHRyZWUuY2hpbGRyZW4ucmVkdWNlKChhY2MsIGNoaWxkKSA9PiB7XG4gICAgaWYgKGNoaWxkLnR5cGUgPT09ICdQYXJhZ3JhcGhOb2RlJykge1xuICAgICAgY29uc3QgcGFyYWdyYXBoID0ge1xuICAgICAgICB0ZXh0OiBnZXRQYXJhZ3JhcGgoY2hpbGQpLFxuICAgICAgICBzdGFydDogY2hpbGQucG9zaXRpb24uc3RhcnQub2Zmc2V0LFxuICAgICAgICBlbmQ6IGNoaWxkLnBvc2l0aW9uLmVuZC5vZmZzZXQsXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gYWNjLmNvbmNhdChbcGFyYWdyYXBoXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuICB9LCBbXSk7XG5cbiAgcmV0dXJuIG91dDtcbn07XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVTZW50ZW5jZSA9IChjaGlsZCwgYWNjKSA9PiB7XG4gIGNvbnN0IHNlbnRlbmNlQ2hpbGRzID0gW107XG4gIC8vIHdlIHBhcnNlIHRoZSBjaGlsZHJlbiBvZiB0aGUgc2VudGVuY2VcbiAgbGV0IG5ld0FjYyA9IGNoaWxkLmNoaWxkcmVuLnJlZHVjZShmdW5jdGlvbihhY2MsIGNoaWxkKSB7XG4gICAgLy8gaWYgd2UgZmluZCBhIHdoaXRlc3BhY2Ugbm9kZSB0aGF0J3MgXFxuLCB3ZSBlbmQgdGhlIHNlbnRlbmNlXG4gICAgaWYgKGNoaWxkLnR5cGUgPT09ICdXaGl0ZVNwYWNlTm9kZScgJiYgY2hpbGQudmFsdWUgPT09ICdcXG4nKSB7XG4gICAgICBpZiAoc2VudGVuY2VDaGlsZHMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0V29yZCA9IHNlbnRlbmNlQ2hpbGRzWzBdO1xuICAgICAgICAvLyB3ZSBjcmVhdGUgYSBzZW50ZW5jZSBzdGFydGluZyBmcm9tIHRoZSBmaXJzdCB3b3JkIHVudGlsIHRoZSBuZXcgbGluZVxuICAgICAgICBjb25zdCBzZW50ZW5jZSA9IHtcbiAgICAgICAgICB0ZXh0OiBzZW50ZW5jZUNoaWxkcy5tYXAoKGQpID0+IGdldFNlbnRlbmNlKGQpKS5qb2luKCcnKSxcbiAgICAgICAgICBzdGFydDogZmlyc3RXb3JkLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldCxcbiAgICAgICAgICBlbmQ6IGNoaWxkLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldCxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyB3ZSByZW1vdmUgYWxsIHRoZSBlbGVtZW50cyBmcm9tIHRoZSBhcnJheVxuICAgICAgICBzZW50ZW5jZUNoaWxkcy5zcGxpY2UoMCwgc2VudGVuY2VDaGlsZHMubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQoW3NlbnRlbmNlXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG90aGVyd2lzZSB3ZSBhZGQgaXQgdG8gdGhlIGFycmF5IHRoYXQgY29udGFpbnMgdGhlIGNoaWxkIGZvcm1pbmcgYSBzZW50ZW5jZVxuICAgICAgc2VudGVuY2VDaGlsZHMucHVzaChjaGlsZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjYztcbiAgfSwgYWNjKTtcblxuICAvLyB3ZSB0cmVhdCB0aGUgY2FzZSB3aGVuIG5vIFxcbiBjaGFyYWN0ZXIgaXMgZm91bmQgYXQgdGhlIGVuZFxuICAvLyBzbyB3ZSBjcmVhdGUgYSBzZW50ZW5jZSBmcm9tIHRoZSBsYXN0IHdvcmRzIG9yIHdoaXRlIHNwYWNlcyBmb3VuZFxuICBpZiAoc2VudGVuY2VDaGlsZHMubGVuZ3RoKSB7XG4gICAgY29uc3QgZmlyc3RXb3JkID0gc2VudGVuY2VDaGlsZHNbMF07XG4gICAgY29uc3QgbGFzdFdvcmQgPSBzZW50ZW5jZUNoaWxkc1tzZW50ZW5jZUNoaWxkcy5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBzZW50ZW5jZSA9IHtcbiAgICAgIHRleHQ6IHNlbnRlbmNlQ2hpbGRzLm1hcCgoZCkgPT4gZ2V0U2VudGVuY2UoZCkpLmpvaW4oJycpLFxuICAgICAgc3RhcnQ6IGZpcnN0V29yZC5wb3NpdGlvbi5zdGFydC5vZmZzZXQsXG4gICAgICBlbmQ6IGxhc3RXb3JkLnBvc2l0aW9uLmVuZC5vZmZzZXQsXG4gICAgfTtcblxuICAgIG5ld0FjYyA9IG5ld0FjYy5jb25jYXQoW3NlbnRlbmNlXSk7XG5cbiAgICBzZW50ZW5jZUNoaWxkcy5zcGxpY2UoMCwgc2VudGVuY2VDaGlsZHMubGVuZ3RoKTtcbiAgfVxuXG4gIHJldHVybiBuZXdBY2M7XG59O1xuXG5leHBvcnQgY29uc3Qgc2VudGVuY2VzID0gKHRleHQpID0+IHtcbiAgY29uc3QgdHJlZSA9IG5ldyBFbmdsaXNoKCkucGFyc2UodGV4dCk7XG5cbiAgY29uc3Qgb3V0ID0gdHJlZS5jaGlsZHJlbi5yZWR1Y2UoKGFjYywgY2hpbGQpID0+IHtcbiAgICBpZiAoY2hpbGQudHlwZSA9PT0gJ1BhcmFncmFwaE5vZGUnKSB7XG4gICAgICByZXR1cm4gY2hpbGQuY2hpbGRyZW4ucmVkdWNlKChhY2MsIGNoaWxkKSA9PiB7XG4gICAgICAgIGlmIChjaGlsZC50eXBlID09PSAnU2VudGVuY2VOb2RlJykge1xuICAgICAgICAgIGNvbnN0IG5ld0FjYyA9IGhhbmRsZVNlbnRlbmNlKGNoaWxkLCBhY2MpO1xuXG4gICAgICAgICAgcmV0dXJuIG5ld0FjYyB8fCBhY2M7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfVxuICAgICAgfSwgYWNjKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9XG4gIH0sIFtdKTtcblxuICByZXR1cm4gb3V0O1xufTtcbmV4cG9ydCBjb25zdCB3b3JkcyA9ICh0ZXh0KSA9PiB7XG4gIGNvbnN0IHRyZWUgPSBuZXcgRW5nbGlzaCgpLnBhcnNlKHRleHQpO1xuXG4gIGNvbnN0IG91dCA9IHRyZWUuY2hpbGRyZW4ucmVkdWNlKChhY2MsIGNoaWxkKSA9PiB7XG4gICAgaWYgKGNoaWxkLnR5cGUgPT09ICdQYXJhZ3JhcGhOb2RlJykge1xuICAgICAgcmV0dXJuIGNoaWxkLmNoaWxkcmVuLnJlZHVjZSgoYWNjLCBjaGlsZCkgPT4ge1xuICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gJ1NlbnRlbmNlTm9kZScpIHtcbiAgICAgICAgICByZXR1cm4gY2hpbGQuY2hpbGRyZW4ucmVkdWNlKChhY2MsIGNoaWxkKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gJ1dvcmROb2RlJykge1xuICAgICAgICAgICAgICBjb25zdCBub2RlID0ge1xuICAgICAgICAgICAgICAgIHRleHQ6IGdldFdvcmQoY2hpbGQpLFxuICAgICAgICAgICAgICAgIHN0YXJ0OiBjaGlsZC5wb3NpdGlvbi5zdGFydC5vZmZzZXQsXG4gICAgICAgICAgICAgICAgZW5kOiBjaGlsZC5wb3NpdGlvbi5lbmQub2Zmc2V0LFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICByZXR1cm4gYWNjLmNvbmNhdChbbm9kZV0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBhY2MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH1cbiAgICAgIH0sIGFjYyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfVxuICB9LCBbXSk7XG5cbiAgcmV0dXJuIG91dDtcbn07XG5cbmNsYXNzIEludGVyc2VjdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHJlc3VsdHMpIHtcbiAgICB0aGlzLnJlc3VsdHMgPSByZXN1bHRzO1xuICB9XG5cbiAgZ2V0IGhhc092ZXJsYXAoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzdWx0cy5maWx0ZXIoKHIpID0+IHIudHlwZSA9PT0gJ292ZXJsYXAnKS5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0IHN1cnJvdW5kZWRUb2tlbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzdWx0cy5maWx0ZXIoKHIpID0+IHIudHlwZSA9PT0gJ3dpdGhpbi1zZWxlY3Rpb24nKS5tYXAoKHQpID0+IHQudG9rZW4pO1xuICB9XG59XG4vKipcbiAqIGdldCBpbnRlcnNlY3Rpb24gaW5mbyBmb3IgdGhlIHNlbGVjdGlvbiBpbiByZWxhdGlvbiB0byB0b2tlbnMuXG4gKiBAcGFyYW0ge3tzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcn19IHNlbGVjdGlvblxuICogQHBhcmFtIHt7c3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXJ9W119IHRva2Vuc1xuICogQHJldHVybiB7dG9rZW5zOiBbXSwgdHlwZTogJ292ZXJsYXB8bm8tb3ZlcmxhcHxjb250YWlucyd9XG4gKi9cbmV4cG9ydCBjb25zdCBpbnRlcnNlY3Rpb24gPSAoc2VsZWN0aW9uLCB0b2tlbnMpID0+IHtcbiAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSBzZWxlY3Rpb247XG5cbiAgY29uc3Qgc3RhcnRzV2l0aGluID0gKHQpID0+IHN0YXJ0ID49IHQuc3RhcnQgJiYgc3RhcnQgPCB0LmVuZDtcbiAgY29uc3QgZW5kc1dpdGhpbiA9ICh0KSA9PiBlbmQgPiB0LnN0YXJ0ICYmIGVuZCA8PSB0LmVuZDtcblxuICBjb25zdCBtYXBwZWQgPSB0b2tlbnMubWFwKCh0KSA9PiB7XG4gICAgaWYgKHN0YXJ0ID09PSB0LnN0YXJ0ICYmIGVuZCA9PT0gdC5lbmQpIHtcbiAgICAgIHJldHVybiB7IHRva2VuOiB0LCB0eXBlOiAnZXhhY3QtZml0JyB9O1xuICAgIH0gZWxzZSBpZiAoc3RhcnQgPD0gdC5zdGFydCAmJiBlbmQgPj0gdC5lbmQpIHtcbiAgICAgIHJldHVybiB7IHRva2VuOiB0LCB0eXBlOiAnd2l0aGluLXNlbGVjdGlvbicgfTtcbiAgICB9IGVsc2UgaWYgKHN0YXJ0c1dpdGhpbih0KSB8fCBlbmRzV2l0aGluKHQpKSB7XG4gICAgICByZXR1cm4geyB0b2tlbjogdCwgdHlwZTogJ292ZXJsYXAnIH07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG5ldyBJbnRlcnNlY3Rpb24oY29tcGFjdChtYXBwZWQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzb3J0ID0gKHRva2VucykgPT4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkodG9rZW5zKSkge1xuICAgIHJldHVybiB0b2tlbnM7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgb3V0ID0gY2xvbmUodG9rZW5zKTtcbiAgICBvdXQuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgcyA9IGEuc3RhcnQgPCBiLnN0YXJ0ID8gLTEgOiBhLnN0YXJ0ID4gYi5zdGFydCA/IDEgOiAwO1xuICAgICAgY29uc3QgZSA9IGEuZW5kIDwgYi5lbmQgPyAtMSA6IGEuZW5kID4gYi5lbmQgPyAxIDogMDtcbiAgICAgIGlmIChzID09PSAtMSAmJiBlICE9PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHNvcnQgZG9lcyBub3Qgc3VwcG9ydCBpbnRlcnNlY3RpbmcgdG9rZW5zLiBhOiAke2Euc3RhcnR9LSR7YS5lbmR9LCBiOiAke2Iuc3RhcnR9LSR7Yi5lbmR9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcztcbiAgICB9KTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplID0gKHRleHRUb05vcm1hbGl6ZSwgdG9rZW5zKSA9PiB7XG4gIC8vIG1ha2luZyBzdXJlIHRleHQgcHJvdmlkZWQgaXMgYSBzdHJpbmdcbiAgY29uc3QgdGV4dCA9IHRleHRUb05vcm1hbGl6ZSB8fCAnJztcblxuICBpZiAoIUFycmF5LmlzQXJyYXkodG9rZW5zKSB8fCB0b2tlbnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgdGV4dCxcbiAgICAgICAgc3RhcnQ6IDAsXG4gICAgICAgIGVuZDogdGV4dC5sZW5ndGgsXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICBjb25zdCBvdXQgPSBzb3J0KHRva2VucykucmVkdWNlKFxuICAgIChhY2MsIHQsIGluZGV4LCBvdXRlcikgPT4ge1xuICAgICAgbGV0IHRva2VucyA9IFtdO1xuICAgICAgY29uc3QgbGFzdEluZGV4ID0gYWNjLmxhc3RJbmRleDtcblxuICAgICAgaWYgKHQuc3RhcnQgPT09IGxhc3RJbmRleCkge1xuICAgICAgICB0b2tlbnMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGV4dDogdGV4dC5zdWJzdHJpbmcobGFzdEluZGV4LCB0LmVuZCksXG4gICAgICAgICAgICBzdGFydDogbGFzdEluZGV4LFxuICAgICAgICAgICAgZW5kOiB0LmVuZCxcbiAgICAgICAgICAgIHByZWRlZmluZWQ6IHRydWUsXG4gICAgICAgICAgICBjb3JyZWN0OiB0LmNvcnJlY3QsXG4gICAgICAgICAgICBpc01pc3Npbmc6IHQuaXNNaXNzaW5nLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICB9IGVsc2UgaWYgKGxhc3RJbmRleCA8IHQuc3RhcnQpIHtcbiAgICAgICAgdG9rZW5zID0gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRleHQ6IHRleHQuc3Vic3RyaW5nKGxhc3RJbmRleCwgdC5zdGFydCksXG4gICAgICAgICAgICBzdGFydDogbGFzdEluZGV4LFxuICAgICAgICAgICAgZW5kOiB0LnN0YXJ0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGV4dDogdGV4dC5zdWJzdHJpbmcodC5zdGFydCwgdC5lbmQpLFxuICAgICAgICAgICAgc3RhcnQ6IHQuc3RhcnQsXG4gICAgICAgICAgICBlbmQ6IHQuZW5kLFxuICAgICAgICAgICAgcHJlZGVmaW5lZDogdHJ1ZSxcbiAgICAgICAgICAgIGNvcnJlY3Q6IHQuY29ycmVjdCxcbiAgICAgICAgICAgIGlzTWlzc2luZzogdC5pc01pc3NpbmcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgIH1cblxuICAgICAgaWYgKGluZGV4ID09PSBvdXRlci5sZW5ndGggLSAxICYmIHQuZW5kIDwgdGV4dC5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgbGFzdCA9IHtcbiAgICAgICAgICB0ZXh0OiB0ZXh0LnN1YnN0cmluZyh0LmVuZCksXG4gICAgICAgICAgc3RhcnQ6IHQuZW5kLFxuICAgICAgICAgIGVuZDogdGV4dC5sZW5ndGgsXG4gICAgICAgIH07XG4gICAgICAgIHRva2Vucy5wdXNoKGxhc3QpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYXN0SW5kZXg6IHRva2Vucy5sZW5ndGggPyB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdLmVuZCA6IGxhc3RJbmRleCxcbiAgICAgICAgcmVzdWx0OiBhY2MucmVzdWx0LmNvbmNhdCh0b2tlbnMpLFxuICAgICAgfTtcbiAgICB9LFxuICAgIHsgcmVzdWx0OiBbXSwgbGFzdEluZGV4OiAwIH0sXG4gICk7XG5cbiAgcmV0dXJuIG91dC5yZXN1bHQ7XG59O1xuIl19
@@ -1,137 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports["default"] = exports.Controls = void 0;
9
-
10
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
-
12
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
-
14
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
15
-
16
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
17
-
18
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
19
-
20
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
21
-
22
- var _react = _interopRequireDefault(require("react"));
23
-
24
- var _propTypes = _interopRequireDefault(require("prop-types"));
25
-
26
- var _Button = _interopRequireDefault(require("@material-ui/core/Button"));
27
-
28
- var _styles = require("@material-ui/core/styles");
29
-
30
- var _Switch = _interopRequireDefault(require("@material-ui/core/Switch"));
31
-
32
- var _FormControlLabel = _interopRequireDefault(require("@material-ui/core/FormControlLabel"));
33
-
34
- var _renderUi = require("@pie-lib/render-ui");
35
-
36
- var _classnames = _interopRequireDefault(require("classnames"));
37
-
38
- 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); }; }
39
-
40
- 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; } }
41
-
42
- var Controls = /*#__PURE__*/function (_React$Component) {
43
- (0, _inherits2["default"])(Controls, _React$Component);
44
-
45
- var _super = _createSuper(Controls);
46
-
47
- function Controls() {
48
- (0, _classCallCheck2["default"])(this, Controls);
49
- return _super.apply(this, arguments);
50
- }
51
-
52
- (0, _createClass2["default"])(Controls, [{
53
- key: "render",
54
- value: function render() {
55
- var _this$props = this.props,
56
- classes = _this$props.classes,
57
- onClear = _this$props.onClear,
58
- onWords = _this$props.onWords,
59
- onSentences = _this$props.onSentences,
60
- onParagraphs = _this$props.onParagraphs,
61
- setCorrectMode = _this$props.setCorrectMode,
62
- onToggleCorrectMode = _this$props.onToggleCorrectMode;
63
- return /*#__PURE__*/_react["default"].createElement("div", {
64
- className: classes.controls
65
- }, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_Button["default"], {
66
- onClick: onWords,
67
- className: classes.button,
68
- size: "small",
69
- color: "primary",
70
- disabled: setCorrectMode
71
- }, "Words"), /*#__PURE__*/_react["default"].createElement(_Button["default"], {
72
- onClick: onSentences,
73
- className: classes.button,
74
- size: "small",
75
- color: "primary",
76
- disabled: setCorrectMode
77
- }, "Sentences"), /*#__PURE__*/_react["default"].createElement(_Button["default"], {
78
- onClick: onParagraphs,
79
- className: classes.button,
80
- size: "small",
81
- color: "primary",
82
- disabled: setCorrectMode
83
- }, "Paragraphs"), /*#__PURE__*/_react["default"].createElement(_Button["default"], {
84
- className: classes.button,
85
- size: "small",
86
- color: "secondary",
87
- onClick: onClear,
88
- disabled: setCorrectMode
89
- }, "Clear")), /*#__PURE__*/_react["default"].createElement(_FormControlLabel["default"], {
90
- control: /*#__PURE__*/_react["default"].createElement(_Switch["default"], {
91
- classes: {
92
- checked: classes.checkedThumb,
93
- bar: (0, _classnames["default"])((0, _defineProperty2["default"])({}, classes.checkedBar, setCorrectMode))
94
- },
95
- checked: setCorrectMode,
96
- onChange: onToggleCorrectMode
97
- }),
98
- label: "Set correct answers"
99
- }));
100
- }
101
- }]);
102
- return Controls;
103
- }(_react["default"].Component);
104
-
105
- exports.Controls = Controls;
106
- (0, _defineProperty2["default"])(Controls, "propTypes", {
107
- classes: _propTypes["default"].object.isRequired,
108
- onClear: _propTypes["default"].func.isRequired,
109
- onWords: _propTypes["default"].func.isRequired,
110
- onSentences: _propTypes["default"].func.isRequired,
111
- onParagraphs: _propTypes["default"].func.isRequired,
112
- setCorrectMode: _propTypes["default"].bool.isRequired,
113
- onToggleCorrectMode: _propTypes["default"].func.isRequired
114
- });
115
- (0, _defineProperty2["default"])(Controls, "defaultProps", {});
116
-
117
- var _default = (0, _styles.withStyles)(function (theme) {
118
- return {
119
- button: {
120
- marginRight: theme.spacing.unit
121
- },
122
- controls: {
123
- display: 'flex',
124
- alignItems: 'center',
125
- justifyContent: 'space-between'
126
- },
127
- checkedThumb: {
128
- color: "".concat(_renderUi.color.tertiary(), " !important")
129
- },
130
- checkedBar: {
131
- backgroundColor: "".concat(_renderUi.color.tertiaryLight(), " !important")
132
- }
133
- };
134
- })(Controls);
135
-
136
- exports["default"] = _default;
137
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b2tlbml6ZXIvY29udHJvbHMuanN4Il0sIm5hbWVzIjpbIkNvbnRyb2xzIiwicHJvcHMiLCJjbGFzc2VzIiwib25DbGVhciIsIm9uV29yZHMiLCJvblNlbnRlbmNlcyIsIm9uUGFyYWdyYXBocyIsInNldENvcnJlY3RNb2RlIiwib25Ub2dnbGVDb3JyZWN0TW9kZSIsImNvbnRyb2xzIiwiYnV0dG9uIiwiY2hlY2tlZCIsImNoZWNrZWRUaHVtYiIsImJhciIsImNoZWNrZWRCYXIiLCJSZWFjdCIsIkNvbXBvbmVudCIsIlByb3BUeXBlcyIsIm9iamVjdCIsImlzUmVxdWlyZWQiLCJmdW5jIiwiYm9vbCIsInRoZW1lIiwibWFyZ2luUmlnaHQiLCJzcGFjaW5nIiwidW5pdCIsImRpc3BsYXkiLCJhbGlnbkl0ZW1zIiwianVzdGlmeUNvbnRlbnQiLCJjb2xvciIsInRlcnRpYXJ5IiwiYmFja2dyb3VuZENvbG9yIiwidGVydGlhcnlMaWdodCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztJQUVhQSxROzs7Ozs7Ozs7Ozs7V0FhWCxrQkFBUztBQUNQLHdCQUFzRyxLQUFLQyxLQUEzRztBQUFBLFVBQVFDLE9BQVIsZUFBUUEsT0FBUjtBQUFBLFVBQWlCQyxPQUFqQixlQUFpQkEsT0FBakI7QUFBQSxVQUEwQkMsT0FBMUIsZUFBMEJBLE9BQTFCO0FBQUEsVUFBbUNDLFdBQW5DLGVBQW1DQSxXQUFuQztBQUFBLFVBQWdEQyxZQUFoRCxlQUFnREEsWUFBaEQ7QUFBQSxVQUE4REMsY0FBOUQsZUFBOERBLGNBQTlEO0FBQUEsVUFBOEVDLG1CQUE5RSxlQUE4RUEsbUJBQTlFO0FBRUEsMEJBQ0U7QUFBSyxRQUFBLFNBQVMsRUFBRU4sT0FBTyxDQUFDTztBQUF4QixzQkFDRSwwREFDRSxnQ0FBQyxrQkFBRDtBQUFRLFFBQUEsT0FBTyxFQUFFTCxPQUFqQjtBQUEwQixRQUFBLFNBQVMsRUFBRUYsT0FBTyxDQUFDUSxNQUE3QztBQUFxRCxRQUFBLElBQUksRUFBQyxPQUExRDtBQUFrRSxRQUFBLEtBQUssRUFBQyxTQUF4RTtBQUFrRixRQUFBLFFBQVEsRUFBRUg7QUFBNUYsaUJBREYsZUFJRSxnQ0FBQyxrQkFBRDtBQUNFLFFBQUEsT0FBTyxFQUFFRixXQURYO0FBRUUsUUFBQSxTQUFTLEVBQUVILE9BQU8sQ0FBQ1EsTUFGckI7QUFHRSxRQUFBLElBQUksRUFBQyxPQUhQO0FBSUUsUUFBQSxLQUFLLEVBQUMsU0FKUjtBQUtFLFFBQUEsUUFBUSxFQUFFSDtBQUxaLHFCQUpGLGVBYUUsZ0NBQUMsa0JBQUQ7QUFDRSxRQUFBLE9BQU8sRUFBRUQsWUFEWDtBQUVFLFFBQUEsU0FBUyxFQUFFSixPQUFPLENBQUNRLE1BRnJCO0FBR0UsUUFBQSxJQUFJLEVBQUMsT0FIUDtBQUlFLFFBQUEsS0FBSyxFQUFDLFNBSlI7QUFLRSxRQUFBLFFBQVEsRUFBRUg7QUFMWixzQkFiRixlQXNCRSxnQ0FBQyxrQkFBRDtBQUFRLFFBQUEsU0FBUyxFQUFFTCxPQUFPLENBQUNRLE1BQTNCO0FBQW1DLFFBQUEsSUFBSSxFQUFDLE9BQXhDO0FBQWdELFFBQUEsS0FBSyxFQUFDLFdBQXREO0FBQWtFLFFBQUEsT0FBTyxFQUFFUCxPQUEzRTtBQUFvRixRQUFBLFFBQVEsRUFBRUk7QUFBOUYsaUJBdEJGLENBREYsZUEyQkUsZ0NBQUMsNEJBQUQ7QUFDRSxRQUFBLE9BQU8sZUFDUCxnQ0FBQyxrQkFBRDtBQUNJLFVBQUEsT0FBTyxFQUFFO0FBQ1BJLFlBQUFBLE9BQU8sRUFBRVQsT0FBTyxDQUFDVSxZQURWO0FBRVBDLFlBQUFBLEdBQUcsRUFBRSxpRUFDRlgsT0FBTyxDQUFDWSxVQUROLEVBQ21CUCxjQURuQjtBQUZFLFdBRGI7QUFPSSxVQUFBLE9BQU8sRUFBRUEsY0FQYjtBQVFJLFVBQUEsUUFBUSxFQUFFQztBQVJkLFVBRkY7QUFhRSxRQUFBLEtBQUssRUFBQztBQWJSLFFBM0JGLENBREY7QUE2Q0Q7OztFQTdEMkJPLGtCQUFNQyxTOzs7aUNBQXZCaEIsUSxlQUNRO0FBQ2pCRSxFQUFBQSxPQUFPLEVBQUVlLHNCQUFVQyxNQUFWLENBQWlCQyxVQURUO0FBRWpCaEIsRUFBQUEsT0FBTyxFQUFFYyxzQkFBVUcsSUFBVixDQUFlRCxVQUZQO0FBR2pCZixFQUFBQSxPQUFPLEVBQUVhLHNCQUFVRyxJQUFWLENBQWVELFVBSFA7QUFJakJkLEVBQUFBLFdBQVcsRUFBRVksc0JBQVVHLElBQVYsQ0FBZUQsVUFKWDtBQUtqQmIsRUFBQUEsWUFBWSxFQUFFVyxzQkFBVUcsSUFBVixDQUFlRCxVQUxaO0FBTWpCWixFQUFBQSxjQUFjLEVBQUVVLHNCQUFVSSxJQUFWLENBQWVGLFVBTmQ7QUFPakJYLEVBQUFBLG1CQUFtQixFQUFFUyxzQkFBVUcsSUFBVixDQUFlRDtBQVBuQixDO2lDQURSbkIsUSxrQkFXVyxFOztlQW9EVCx3QkFBVyxVQUFDc0IsS0FBRDtBQUFBLFNBQVk7QUFDcENaLElBQUFBLE1BQU0sRUFBRTtBQUNOYSxNQUFBQSxXQUFXLEVBQUVELEtBQUssQ0FBQ0UsT0FBTixDQUFjQztBQURyQixLQUQ0QjtBQUlwQ2hCLElBQUFBLFFBQVEsRUFBRTtBQUNSaUIsTUFBQUEsT0FBTyxFQUFFLE1BREQ7QUFFUkMsTUFBQUEsVUFBVSxFQUFFLFFBRko7QUFHUkMsTUFBQUEsY0FBYyxFQUFFO0FBSFIsS0FKMEI7QUFTcENoQixJQUFBQSxZQUFZLEVBQUU7QUFDWmlCLE1BQUFBLEtBQUssWUFBS0EsZ0JBQU1DLFFBQU4sRUFBTDtBQURPLEtBVHNCO0FBWXBDaEIsSUFBQUEsVUFBVSxFQUFFO0FBQ1ZpQixNQUFBQSxlQUFlLFlBQUtGLGdCQUFNRyxhQUFOLEVBQUw7QUFETDtBQVp3QixHQUFaO0FBQUEsQ0FBWCxFQWVYaEMsUUFmVyxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL0J1dHRvbic7XG5pbXBvcnQgeyB3aXRoU3R5bGVzIH0gZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUvc3R5bGVzJztcbmltcG9ydCBTd2l0Y2ggZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUvU3dpdGNoJztcbmltcG9ydCBGb3JtQ29udHJvbExhYmVsIGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL0Zvcm1Db250cm9sTGFiZWwnO1xuaW1wb3J0IHsgY29sb3IgfSBmcm9tICdAcGllLWxpYi9yZW5kZXItdWknO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5cbmV4cG9ydCBjbGFzcyBDb250cm9scyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgIG9uQ2xlYXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25Xb3JkczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblNlbnRlbmNlczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblBhcmFncmFwaHM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgc2V0Q29ycmVjdE1vZGU6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgb25Ub2dnbGVDb3JyZWN0TW9kZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge307XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgY2xhc3Nlcywgb25DbGVhciwgb25Xb3Jkcywgb25TZW50ZW5jZXMsIG9uUGFyYWdyYXBocywgc2V0Q29ycmVjdE1vZGUsIG9uVG9nZ2xlQ29ycmVjdE1vZGUgfSA9IHRoaXMucHJvcHM7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzZXMuY29udHJvbHN9PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxCdXR0b24gb25DbGljaz17b25Xb3Jkc30gY2xhc3NOYW1lPXtjbGFzc2VzLmJ1dHRvbn0gc2l6ZT1cInNtYWxsXCIgY29sb3I9XCJwcmltYXJ5XCIgZGlzYWJsZWQ9e3NldENvcnJlY3RNb2RlfT5cbiAgICAgICAgICAgIFdvcmRzXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgb25DbGljaz17b25TZW50ZW5jZXN9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXMuYnV0dG9ufVxuICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICBkaXNhYmxlZD17c2V0Q29ycmVjdE1vZGV9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgU2VudGVuY2VzXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgb25DbGljaz17b25QYXJhZ3JhcGhzfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzLmJ1dHRvbn1cbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgZGlzYWJsZWQ9e3NldENvcnJlY3RNb2RlfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIFBhcmFncmFwaHNcbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT17Y2xhc3Nlcy5idXR0b259IHNpemU9XCJzbWFsbFwiIGNvbG9yPVwic2Vjb25kYXJ5XCIgb25DbGljaz17b25DbGVhcn0gZGlzYWJsZWQ9e3NldENvcnJlY3RNb2RlfT5cbiAgICAgICAgICAgIENsZWFyXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8Rm9ybUNvbnRyb2xMYWJlbFxuICAgICAgICAgIGNvbnRyb2w9e1xuICAgICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICAgICAgY2xhc3Nlcz17e1xuICAgICAgICAgICAgICAgIGNoZWNrZWQ6IGNsYXNzZXMuY2hlY2tlZFRodW1iLFxuICAgICAgICAgICAgICAgIGJhcjogY2xhc3NOYW1lcyh7XG4gICAgICAgICAgICAgICAgICBbY2xhc3Nlcy5jaGVja2VkQmFyXTogc2V0Q29ycmVjdE1vZGUsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIGNoZWNrZWQ9e3NldENvcnJlY3RNb2RlfSBcbiAgICAgICAgICAgICAgb25DaGFuZ2U9e29uVG9nZ2xlQ29ycmVjdE1vZGV9IFxuICAgICAgICAgIC8+XG4gICAgICAgIH1cbiAgICAgICAgICBsYWJlbD1cIlNldCBjb3JyZWN0IGFuc3dlcnNcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlcygodGhlbWUpID0+ICh7XG4gIGJ1dHRvbjoge1xuICAgIG1hcmdpblJpZ2h0OiB0aGVtZS5zcGFjaW5nLnVuaXQsXG4gIH0sXG4gIGNvbnRyb2xzOiB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsXG4gIH0sXG4gIGNoZWNrZWRUaHVtYjoge1xuICAgIGNvbG9yOiBgJHtjb2xvci50ZXJ0aWFyeSgpfSAhaW1wb3J0YW50YCxcbiAgfSxcbiAgY2hlY2tlZEJhcjoge1xuICAgIGJhY2tncm91bmRDb2xvcjogYCR7Y29sb3IudGVydGlhcnlMaWdodCgpfSAhaW1wb3J0YW50YCxcbiAgfVxufSkpKENvbnRyb2xzKTtcbiJdfQ==