@pie-lib/text-select 1.12.8-next.1 → 1.13.1-beta.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 (46) hide show
  1. package/CHANGELOG.md +20 -64
  2. package/NEXT.CHANGELOG.json +1 -0
  3. package/package.json +8 -6
  4. package/src/__tests__/__snapshots__/text-select.test.jsx.snap +21 -0
  5. package/src/__tests__/text-select.test.jsx +34 -0
  6. package/src/__tests__/utils.test.jsx +27 -0
  7. package/src/index.js +2 -1
  8. package/src/token-select/__tests__/__snapshots__/index.test.jsx.snap +49 -0
  9. package/src/token-select/__tests__/__snapshots__/token.test.jsx.snap +31 -0
  10. package/src/token-select/__tests__/index.test.jsx +257 -0
  11. package/src/token-select/__tests__/token.test.jsx +33 -0
  12. package/src/token-select/index.jsx +3 -1
  13. package/src/token-select/token.jsx +11 -20
  14. package/src/tokenizer/__tests__/__snapshots__/controls.test.jsx.snap +59 -0
  15. package/src/tokenizer/__tests__/__snapshots__/index.test.jsx.snap +31 -0
  16. package/src/tokenizer/__tests__/__snapshots__/token-text.test.jsx.snap +17 -0
  17. package/src/tokenizer/__tests__/builder.test.js +256 -0
  18. package/src/tokenizer/__tests__/controls.test.jsx +25 -0
  19. package/src/tokenizer/__tests__/index.test.jsx +140 -0
  20. package/src/tokenizer/__tests__/selection-utils.test.js +26 -0
  21. package/src/tokenizer/__tests__/token-text.test.jsx +136 -0
  22. package/src/tokenizer/controls.jsx +20 -1
  23. package/src/tokenizer/token-text.jsx +9 -0
  24. package/README.md +0 -3
  25. package/lib/index.js +0 -68
  26. package/lib/index.js.map +0 -1
  27. package/lib/legend.js +0 -99
  28. package/lib/legend.js.map +0 -1
  29. package/lib/text-select.js +0 -138
  30. package/lib/text-select.js.map +0 -1
  31. package/lib/token-select/index.js +0 -249
  32. package/lib/token-select/index.js.map +0 -1
  33. package/lib/token-select/token.js +0 -237
  34. package/lib/token-select/token.js.map +0 -1
  35. package/lib/tokenizer/builder.js +0 -311
  36. package/lib/tokenizer/builder.js.map +0 -1
  37. package/lib/tokenizer/controls.js +0 -123
  38. package/lib/tokenizer/controls.js.map +0 -1
  39. package/lib/tokenizer/index.js +0 -205
  40. package/lib/tokenizer/index.js.map +0 -1
  41. package/lib/tokenizer/selection-utils.js +0 -65
  42. package/lib/tokenizer/selection-utils.js.map +0 -1
  43. package/lib/tokenizer/token-text.js +0 -200
  44. package/lib/tokenizer/token-text.js.map +0 -1
  45. package/lib/utils.js +0 -67
  46. package/lib/utils.js.map +0 -1
@@ -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=builder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/tokenizer/builder.js"],"names":["g","str","node","children","reduce","value","getParagraph","p","getSentence","s","getWord","w","paragraphs","text","tree","English","parse","out","acc","child","type","paragraph","start","position","offset","end","concat","handleSentence","sentenceChilds","newAcc","length","firstWord","sentence","map","d","join","splice","push","lastWord","sentences","words","Intersection","results","filter","r","t","token","intersection","selection","tokens","startsWithin","endsWithin","mapped","sort","Array","isArray","a","b","e","Error","normalize","textToNormalize","index","outer","lastIndex","substring","predefined","correct","isMissing","last","result"],"mappings":"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","sourcesContent":["import compact from 'lodash/compact';\nimport English from '@pie-framework/parse-english';\nimport clone from 'lodash/clone';\n\nconst g = (str, node) => {\n if (node.children) {\n return node.children.reduce(g, str);\n } else if (node.value) {\n return str + node.value;\n } else {\n return str;\n }\n};\n\nconst getParagraph = (p) => g('', p);\n\nconst getSentence = (s) => g('', s);\n\nconst getWord = (w) => g('', w);\n\nexport const paragraphs = (text) => {\n const tree = new English().parse(text);\n\n const out = tree.children.reduce((acc, child) => {\n if (child.type === 'ParagraphNode') {\n const paragraph = {\n text: getParagraph(child),\n start: child.position.start.offset,\n end: child.position.end.offset,\n };\n\n return acc.concat([paragraph]);\n } else {\n return acc;\n }\n }, []);\n\n return out;\n};\n\nexport const handleSentence = (child, acc) => {\n const sentenceChilds = [];\n // we parse the children of the sentence\n let newAcc = child.children.reduce(function(acc, child) {\n // if we find a whitespace node that's \\n, we end the sentence\n if (child.type === 'WhiteSpaceNode' && child.value === '\\n') {\n if (sentenceChilds.length) {\n const firstWord = sentenceChilds[0];\n // we create a sentence starting from the first word until the new line\n const sentence = {\n text: sentenceChilds.map((d) => getSentence(d)).join(''),\n start: firstWord.position.start.offset,\n end: child.position.start.offset,\n };\n\n // we remove all the elements from the array\n sentenceChilds.splice(0, sentenceChilds.length);\n return acc.concat([sentence]);\n }\n } else {\n // otherwise we add it to the array that contains the child forming a sentence\n sentenceChilds.push(child);\n }\n\n return acc;\n }, acc);\n\n // we treat the case when no \\n character is found at the end\n // so we create a sentence from the last words or white spaces found\n if (sentenceChilds.length) {\n const firstWord = sentenceChilds[0];\n const lastWord = sentenceChilds[sentenceChilds.length - 1];\n const sentence = {\n text: sentenceChilds.map((d) => getSentence(d)).join(''),\n start: firstWord.position.start.offset,\n end: lastWord.position.end.offset,\n };\n\n newAcc = newAcc.concat([sentence]);\n\n sentenceChilds.splice(0, sentenceChilds.length);\n }\n\n return newAcc;\n};\n\nexport const sentences = (text) => {\n const tree = new English().parse(text);\n\n const out = tree.children.reduce((acc, child) => {\n if (child.type === 'ParagraphNode') {\n return child.children.reduce((acc, child) => {\n if (child.type === 'SentenceNode') {\n const newAcc = handleSentence(child, acc);\n\n return newAcc || acc;\n } else {\n return acc;\n }\n }, acc);\n } else {\n return acc;\n }\n }, []);\n\n return out;\n};\nexport const words = (text) => {\n const tree = new English().parse(text);\n\n const out = tree.children.reduce((acc, child) => {\n if (child.type === 'ParagraphNode') {\n return child.children.reduce((acc, child) => {\n if (child.type === 'SentenceNode') {\n return child.children.reduce((acc, child) => {\n if (child.type === 'WordNode') {\n const node = {\n text: getWord(child),\n start: child.position.start.offset,\n end: child.position.end.offset,\n };\n return acc.concat([node]);\n } else {\n return acc;\n }\n }, acc);\n } else {\n return acc;\n }\n }, acc);\n } else {\n return acc;\n }\n }, []);\n\n return out;\n};\n\nclass Intersection {\n constructor(results) {\n this.results = results;\n }\n\n get hasOverlap() {\n return this.results.filter((r) => r.type === 'overlap').length > 0;\n }\n\n get surroundedTokens() {\n return this.results.filter((r) => r.type === 'within-selection').map((t) => t.token);\n }\n}\n/**\n * get intersection info for the selection in relation to tokens.\n * @param {{start: number, end: number}} selection\n * @param {{start: number, end: number}[]} tokens\n * @return {tokens: [], type: 'overlap|no-overlap|contains'}\n */\nexport const intersection = (selection, tokens) => {\n const { start, end } = selection;\n\n const startsWithin = (t) => start >= t.start && start < t.end;\n const endsWithin = (t) => end > t.start && end <= t.end;\n\n const mapped = tokens.map((t) => {\n if (start === t.start && end === t.end) {\n return { token: t, type: 'exact-fit' };\n } else if (start <= t.start && end >= t.end) {\n return { token: t, type: 'within-selection' };\n } else if (startsWithin(t) || endsWithin(t)) {\n return { token: t, type: 'overlap' };\n }\n });\n return new Intersection(compact(mapped));\n};\n\nexport const sort = (tokens) => {\n if (!Array.isArray(tokens)) {\n return tokens;\n } else {\n const out = clone(tokens);\n out.sort((a, b) => {\n const s = a.start < b.start ? -1 : a.start > b.start ? 1 : 0;\n const e = a.end < b.end ? -1 : a.end > b.end ? 1 : 0;\n if (s === -1 && e !== -1) {\n throw new Error(`sort does not support intersecting tokens. a: ${a.start}-${a.end}, b: ${b.start}-${b.end}`);\n }\n return s;\n });\n return out;\n }\n};\n\nexport const normalize = (textToNormalize, tokens) => {\n // making sure text provided is a string\n const text = textToNormalize || '';\n\n if (!Array.isArray(tokens) || tokens.length === 0) {\n return [\n {\n text,\n start: 0,\n end: text.length,\n },\n ];\n }\n\n const out = sort(tokens).reduce(\n (acc, t, index, outer) => {\n let tokens = [];\n const lastIndex = acc.lastIndex;\n\n if (t.start === lastIndex) {\n tokens = [\n {\n text: text.substring(lastIndex, t.end),\n start: lastIndex,\n end: t.end,\n predefined: true,\n correct: t.correct,\n isMissing: t.isMissing,\n },\n ];\n } else if (lastIndex < t.start) {\n tokens = [\n {\n text: text.substring(lastIndex, t.start),\n start: lastIndex,\n end: t.start,\n },\n {\n text: text.substring(t.start, t.end),\n start: t.start,\n end: t.end,\n predefined: true,\n correct: t.correct,\n isMissing: t.isMissing,\n },\n ];\n }\n\n if (index === outer.length - 1 && t.end < text.length) {\n const last = {\n text: text.substring(t.end),\n start: t.end,\n end: text.length,\n };\n tokens.push(last);\n }\n\n return {\n lastIndex: tokens.length ? tokens[tokens.length - 1].end : lastIndex,\n result: acc.result.concat(tokens),\n };\n },\n { result: [], lastIndex: 0 },\n );\n\n return out.result;\n};\n"],"file":"builder.js"}
@@ -1,123 +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
- 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); }; }
35
-
36
- 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; } }
37
-
38
- var Controls = /*#__PURE__*/function (_React$Component) {
39
- (0, _inherits2["default"])(Controls, _React$Component);
40
-
41
- var _super = _createSuper(Controls);
42
-
43
- function Controls() {
44
- (0, _classCallCheck2["default"])(this, Controls);
45
- return _super.apply(this, arguments);
46
- }
47
-
48
- (0, _createClass2["default"])(Controls, [{
49
- key: "render",
50
- value: function render() {
51
- var _this$props = this.props,
52
- classes = _this$props.classes,
53
- onClear = _this$props.onClear,
54
- onWords = _this$props.onWords,
55
- onSentences = _this$props.onSentences,
56
- onParagraphs = _this$props.onParagraphs,
57
- setCorrectMode = _this$props.setCorrectMode,
58
- onToggleCorrectMode = _this$props.onToggleCorrectMode;
59
- return /*#__PURE__*/_react["default"].createElement("div", {
60
- className: classes.controls
61
- }, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_Button["default"], {
62
- onClick: onWords,
63
- className: classes.button,
64
- size: "small",
65
- color: "primary",
66
- disabled: setCorrectMode
67
- }, "Words"), /*#__PURE__*/_react["default"].createElement(_Button["default"], {
68
- onClick: onSentences,
69
- className: classes.button,
70
- size: "small",
71
- color: "primary",
72
- disabled: setCorrectMode
73
- }, "Sentences"), /*#__PURE__*/_react["default"].createElement(_Button["default"], {
74
- onClick: onParagraphs,
75
- className: classes.button,
76
- size: "small",
77
- color: "primary",
78
- disabled: setCorrectMode
79
- }, "Paragraphs"), /*#__PURE__*/_react["default"].createElement(_Button["default"], {
80
- className: classes.button,
81
- size: "small",
82
- color: "secondary",
83
- onClick: onClear,
84
- disabled: setCorrectMode
85
- }, "Clear")), /*#__PURE__*/_react["default"].createElement(_FormControlLabel["default"], {
86
- control: /*#__PURE__*/_react["default"].createElement(_Switch["default"], {
87
- checked: setCorrectMode,
88
- onChange: onToggleCorrectMode
89
- }),
90
- label: "Set correct answers"
91
- }));
92
- }
93
- }]);
94
- return Controls;
95
- }(_react["default"].Component);
96
-
97
- exports.Controls = Controls;
98
- (0, _defineProperty2["default"])(Controls, "propTypes", {
99
- classes: _propTypes["default"].object.isRequired,
100
- onClear: _propTypes["default"].func.isRequired,
101
- onWords: _propTypes["default"].func.isRequired,
102
- onSentences: _propTypes["default"].func.isRequired,
103
- onParagraphs: _propTypes["default"].func.isRequired,
104
- setCorrectMode: _propTypes["default"].bool.isRequired,
105
- onToggleCorrectMode: _propTypes["default"].func.isRequired
106
- });
107
- (0, _defineProperty2["default"])(Controls, "defaultProps", {});
108
-
109
- var _default = (0, _styles.withStyles)(function (theme) {
110
- return {
111
- button: {
112
- marginRight: theme.spacing.unit
113
- },
114
- controls: {
115
- display: 'flex',
116
- alignItems: 'center',
117
- justifyContent: 'space-between'
118
- }
119
- };
120
- })(Controls);
121
-
122
- exports["default"] = _default;
123
- //# sourceMappingURL=controls.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/tokenizer/controls.jsx"],"names":["Controls","props","classes","onClear","onWords","onSentences","onParagraphs","setCorrectMode","onToggleCorrectMode","controls","button","React","Component","PropTypes","object","isRequired","func","bool","theme","marginRight","spacing","unit","display","alignItems","justifyContent"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;IAEaA,Q;;;;;;;;;;;;WAaX,kBAAS;AACP,wBAAsG,KAAKC,KAA3G;AAAA,UAAQC,OAAR,eAAQA,OAAR;AAAA,UAAiBC,OAAjB,eAAiBA,OAAjB;AAAA,UAA0BC,OAA1B,eAA0BA,OAA1B;AAAA,UAAmCC,WAAnC,eAAmCA,WAAnC;AAAA,UAAgDC,YAAhD,eAAgDA,YAAhD;AAAA,UAA8DC,cAA9D,eAA8DA,cAA9D;AAAA,UAA8EC,mBAA9E,eAA8EA,mBAA9E;AAEA,0BACE;AAAK,QAAA,SAAS,EAAEN,OAAO,CAACO;AAAxB,sBACE,0DACE,gCAAC,kBAAD;AAAQ,QAAA,OAAO,EAAEL,OAAjB;AAA0B,QAAA,SAAS,EAAEF,OAAO,CAACQ,MAA7C;AAAqD,QAAA,IAAI,EAAC,OAA1D;AAAkE,QAAA,KAAK,EAAC,SAAxE;AAAkF,QAAA,QAAQ,EAAEH;AAA5F,iBADF,eAIE,gCAAC,kBAAD;AACE,QAAA,OAAO,EAAEF,WADX;AAEE,QAAA,SAAS,EAAEH,OAAO,CAACQ,MAFrB;AAGE,QAAA,IAAI,EAAC,OAHP;AAIE,QAAA,KAAK,EAAC,SAJR;AAKE,QAAA,QAAQ,EAAEH;AALZ,qBAJF,eAaE,gCAAC,kBAAD;AACE,QAAA,OAAO,EAAED,YADX;AAEE,QAAA,SAAS,EAAEJ,OAAO,CAACQ,MAFrB;AAGE,QAAA,IAAI,EAAC,OAHP;AAIE,QAAA,KAAK,EAAC,SAJR;AAKE,QAAA,QAAQ,EAAEH;AALZ,sBAbF,eAsBE,gCAAC,kBAAD;AAAQ,QAAA,SAAS,EAAEL,OAAO,CAACQ,MAA3B;AAAmC,QAAA,IAAI,EAAC,OAAxC;AAAgD,QAAA,KAAK,EAAC,WAAtD;AAAkE,QAAA,OAAO,EAAEP,OAA3E;AAAoF,QAAA,QAAQ,EAAEI;AAA9F,iBAtBF,CADF,eA2BE,gCAAC,4BAAD;AACE,QAAA,OAAO,eAAE,gCAAC,kBAAD;AAAQ,UAAA,OAAO,EAAEA,cAAjB;AAAiC,UAAA,QAAQ,EAAEC;AAA3C,UADX;AAEE,QAAA,KAAK,EAAC;AAFR,QA3BF,CADF;AAkCD;;;EAlD2BG,kBAAMC,S;;;iCAAvBZ,Q,eACQ;AACjBE,EAAAA,OAAO,EAAEW,sBAAUC,MAAV,CAAiBC,UADT;AAEjBZ,EAAAA,OAAO,EAAEU,sBAAUG,IAAV,CAAeD,UAFP;AAGjBX,EAAAA,OAAO,EAAES,sBAAUG,IAAV,CAAeD,UAHP;AAIjBV,EAAAA,WAAW,EAAEQ,sBAAUG,IAAV,CAAeD,UAJX;AAKjBT,EAAAA,YAAY,EAAEO,sBAAUG,IAAV,CAAeD,UALZ;AAMjBR,EAAAA,cAAc,EAAEM,sBAAUI,IAAV,CAAeF,UANd;AAOjBP,EAAAA,mBAAmB,EAAEK,sBAAUG,IAAV,CAAeD;AAPnB,C;iCADRf,Q,kBAWW,E;;eAyCT,wBAAW,UAACkB,KAAD;AAAA,SAAY;AACpCR,IAAAA,MAAM,EAAE;AACNS,MAAAA,WAAW,EAAED,KAAK,CAACE,OAAN,CAAcC;AADrB,KAD4B;AAIpCZ,IAAAA,QAAQ,EAAE;AACRa,MAAAA,OAAO,EAAE,MADD;AAERC,MAAAA,UAAU,EAAE,QAFJ;AAGRC,MAAAA,cAAc,EAAE;AAHR;AAJ0B,GAAZ;AAAA,CAAX,EASXxB,QATW,C","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport Button from '@material-ui/core/Button';\nimport { withStyles } from '@material-ui/core/styles';\nimport Switch from '@material-ui/core/Switch';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\n\nexport class Controls extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n onClear: PropTypes.func.isRequired,\n onWords: PropTypes.func.isRequired,\n onSentences: PropTypes.func.isRequired,\n onParagraphs: PropTypes.func.isRequired,\n setCorrectMode: PropTypes.bool.isRequired,\n onToggleCorrectMode: PropTypes.func.isRequired,\n };\n\n static defaultProps = {};\n\n render() {\n const { classes, onClear, onWords, onSentences, onParagraphs, setCorrectMode, onToggleCorrectMode } = this.props;\n\n return (\n <div className={classes.controls}>\n <div>\n <Button onClick={onWords} className={classes.button} size=\"small\" color=\"primary\" disabled={setCorrectMode}>\n Words\n </Button>\n <Button\n onClick={onSentences}\n className={classes.button}\n size=\"small\"\n color=\"primary\"\n disabled={setCorrectMode}\n >\n Sentences\n </Button>\n <Button\n onClick={onParagraphs}\n className={classes.button}\n size=\"small\"\n color=\"primary\"\n disabled={setCorrectMode}\n >\n Paragraphs\n </Button>\n <Button className={classes.button} size=\"small\" color=\"secondary\" onClick={onClear} disabled={setCorrectMode}>\n Clear\n </Button>\n </div>\n <FormControlLabel\n control={<Switch checked={setCorrectMode} onChange={onToggleCorrectMode} />}\n label=\"Set correct answers\"\n />\n </div>\n );\n }\n}\nexport default withStyles((theme) => ({\n button: {\n marginRight: theme.spacing.unit,\n },\n controls: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n}))(Controls);\n"],"file":"controls.js"}