@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.
- package/CHANGELOG.json +1 -632
- package/CHANGELOG.md +122 -30
- package/package.json +6 -6
- package/src/index.js +1 -2
- package/src/legend.js +55 -37
- package/src/token-select/__tests__/__snapshots__/token.test.jsx.snap +2 -6
- package/src/token-select/token.jsx +96 -61
- package/src/tokenizer/controls.jsx +7 -7
- package/lib/__tests__/text-select.test.js +0 -56
- package/lib/__tests__/utils.test.js +0 -23
- package/lib/index.js +0 -76
- package/lib/legend.js +0 -99
- package/lib/text-select.js +0 -138
- package/lib/token-select/__tests__/index.test.js +0 -268
- package/lib/token-select/__tests__/token.test.js +0 -35
- package/lib/token-select/index.js +0 -250
- package/lib/token-select/token.js +0 -230
- package/lib/tokenizer/__tests__/builder.test.js +0 -399
- package/lib/tokenizer/__tests__/controls.test.js +0 -34
- package/lib/tokenizer/__tests__/index.test.js +0 -210
- package/lib/tokenizer/__tests__/selection-utils.test.js +0 -27
- package/lib/tokenizer/__tests__/token-text.test.js +0 -154
- package/lib/tokenizer/builder.js +0 -311
- package/lib/tokenizer/controls.js +0 -137
- package/lib/tokenizer/index.js +0 -205
- package/lib/tokenizer/selection-utils.js +0 -65
- package/lib/tokenizer/token-text.js +0 -209
- package/lib/utils.js +0 -67
|
@@ -1,250 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
-
|
|
7
|
-
Object.defineProperty(exports, "__esModule", {
|
|
8
|
-
value: true
|
|
9
|
-
});
|
|
10
|
-
exports["default"] = exports.TokenSelect = void 0;
|
|
11
|
-
|
|
12
|
-
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
13
|
-
|
|
14
|
-
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
15
|
-
|
|
16
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
17
|
-
|
|
18
|
-
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
19
|
-
|
|
20
|
-
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
21
|
-
|
|
22
|
-
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
23
|
-
|
|
24
|
-
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
25
|
-
|
|
26
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
27
|
-
|
|
28
|
-
var _react = _interopRequireDefault(require("react"));
|
|
29
|
-
|
|
30
|
-
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
31
|
-
|
|
32
|
-
var _token = _interopRequireWildcard(require("./token"));
|
|
33
|
-
|
|
34
|
-
var _styles = require("@material-ui/core/styles");
|
|
35
|
-
|
|
36
|
-
var _classnames = _interopRequireDefault(require("classnames"));
|
|
37
|
-
|
|
38
|
-
var _clone = _interopRequireDefault(require("lodash/clone"));
|
|
39
|
-
|
|
40
|
-
var _debug = _interopRequireDefault(require("debug"));
|
|
41
|
-
|
|
42
|
-
var _styleUtils = require("@pie-lib/style-utils");
|
|
43
|
-
|
|
44
|
-
var _server = require("react-dom/server");
|
|
45
|
-
|
|
46
|
-
var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
|
|
47
|
-
|
|
48
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
49
|
-
|
|
50
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
51
|
-
|
|
52
|
-
function 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; }
|
|
53
|
-
|
|
54
|
-
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; }
|
|
55
|
-
|
|
56
|
-
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); }; }
|
|
57
|
-
|
|
58
|
-
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; } }
|
|
59
|
-
|
|
60
|
-
var log = (0, _debug["default"])('@pie-lib:text-select:token-select');
|
|
61
|
-
|
|
62
|
-
var TokenSelect = /*#__PURE__*/function (_React$Component) {
|
|
63
|
-
(0, _inherits2["default"])(TokenSelect, _React$Component);
|
|
64
|
-
|
|
65
|
-
var _super = _createSuper(TokenSelect);
|
|
66
|
-
|
|
67
|
-
function TokenSelect() {
|
|
68
|
-
var _this;
|
|
69
|
-
|
|
70
|
-
(0, _classCallCheck2["default"])(this, TokenSelect);
|
|
71
|
-
|
|
72
|
-
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
73
|
-
args[_key] = arguments[_key];
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
_this = _super.call.apply(_super, [this].concat(args));
|
|
77
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "selectedCount", function () {
|
|
78
|
-
return _this.props.tokens.filter(function (t) {
|
|
79
|
-
return t.selected;
|
|
80
|
-
}).length;
|
|
81
|
-
});
|
|
82
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "canSelectMore", function (selectedCount) {
|
|
83
|
-
var maxNoOfSelections = _this.props.maxNoOfSelections;
|
|
84
|
-
|
|
85
|
-
if (maxNoOfSelections === 1) {
|
|
86
|
-
return true;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
log('[canSelectMore] maxNoOfSelections: ', maxNoOfSelections, 'selectedCount: ', selectedCount);
|
|
90
|
-
return maxNoOfSelections <= 0 || isFinite(maxNoOfSelections) && selectedCount < maxNoOfSelections;
|
|
91
|
-
});
|
|
92
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "toggleToken", function (event) {
|
|
93
|
-
var target = event.target;
|
|
94
|
-
var _this$props = _this.props,
|
|
95
|
-
tokens = _this$props.tokens,
|
|
96
|
-
animationsDisabled = _this$props.animationsDisabled;
|
|
97
|
-
var tokensCloned = (0, _clone["default"])(tokens);
|
|
98
|
-
var targetSpanWrapper = target.closest(".".concat(_token["default"].rootClassName));
|
|
99
|
-
var targetedTokenIndex = targetSpanWrapper && targetSpanWrapper.dataset && targetSpanWrapper.dataset.indexkey;
|
|
100
|
-
var t = targetedTokenIndex && tokensCloned[targetedTokenIndex]; // don't toggle if we are in print mode, token correctness is defined or if it's missing
|
|
101
|
-
// (missing means that it was evaluated as correct and not selected)
|
|
102
|
-
|
|
103
|
-
if (t && t.correct === undefined && !animationsDisabled && !t.isMissing) {
|
|
104
|
-
var _this$props2 = _this.props,
|
|
105
|
-
onChange = _this$props2.onChange,
|
|
106
|
-
maxNoOfSelections = _this$props2.maxNoOfSelections;
|
|
107
|
-
var selected = !t.selected;
|
|
108
|
-
|
|
109
|
-
if (maxNoOfSelections === 1 && _this.selectedCount() === 1) {
|
|
110
|
-
var selectedToken = (tokens || []).filter(function (t) {
|
|
111
|
-
return t.selected;
|
|
112
|
-
});
|
|
113
|
-
var updatedTokens = tokensCloned.map(function (token) {
|
|
114
|
-
if ((0, _isEqual["default"])(token, selectedToken[0])) {
|
|
115
|
-
return _objectSpread(_objectSpread({}, token), {}, {
|
|
116
|
-
selected: false
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
return _objectSpread(_objectSpread({}, token), {}, {
|
|
121
|
-
selectable: true
|
|
122
|
-
});
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
var update = _objectSpread(_objectSpread({}, t), {}, {
|
|
126
|
-
selected: !t.selected
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
updatedTokens.splice(targetedTokenIndex, 1, update);
|
|
130
|
-
onChange(updatedTokens);
|
|
131
|
-
} else {
|
|
132
|
-
if (selected && maxNoOfSelections > 0 && _this.selectedCount() >= maxNoOfSelections) {
|
|
133
|
-
log('skip toggle max reached');
|
|
134
|
-
return;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
var _update = _objectSpread(_objectSpread({}, t), {}, {
|
|
138
|
-
selected: !t.selected
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
tokensCloned.splice(targetedTokenIndex, 1, _update);
|
|
142
|
-
onChange(tokensCloned);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
});
|
|
146
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "generateTokensInHtml", function () {
|
|
147
|
-
var _this$props3 = _this.props,
|
|
148
|
-
tokens = _this$props3.tokens,
|
|
149
|
-
disabled = _this$props3.disabled,
|
|
150
|
-
highlightChoices = _this$props3.highlightChoices,
|
|
151
|
-
animationsDisabled = _this$props3.animationsDisabled;
|
|
152
|
-
|
|
153
|
-
var selectedCount = _this.selectedCount();
|
|
154
|
-
|
|
155
|
-
var isLineBreak = function isLineBreak(text) {
|
|
156
|
-
return text === '\n';
|
|
157
|
-
};
|
|
158
|
-
|
|
159
|
-
var isNewParagraph = function isNewParagraph(text) {
|
|
160
|
-
return text === '\n\n';
|
|
161
|
-
};
|
|
162
|
-
|
|
163
|
-
var reducer = function reducer(accumulator, t, index) {
|
|
164
|
-
var selectable = t.selected || t.selectable && _this.canSelectMore(selectedCount);
|
|
165
|
-
|
|
166
|
-
var showCorrectAnswer = t.correct !== undefined && (t.selectable || t.selected);
|
|
167
|
-
var finalAcc = accumulator;
|
|
168
|
-
|
|
169
|
-
if (isNewParagraph(t.text)) {
|
|
170
|
-
return finalAcc + '</p><p>';
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
if (isLineBreak(t.text)) {
|
|
174
|
-
return finalAcc + '<br>';
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
if (selectable && !disabled || showCorrectAnswer || t.selected || t.isMissing || animationsDisabled && t.predefined // if we are in print mode
|
|
178
|
-
) {
|
|
179
|
-
return finalAcc + (0, _server.renderToString)( /*#__PURE__*/_react["default"].createElement(_token["default"], (0, _extends2["default"])({
|
|
180
|
-
key: index,
|
|
181
|
-
disabled: disabled,
|
|
182
|
-
index: index
|
|
183
|
-
}, t, {
|
|
184
|
-
selectable: selectable,
|
|
185
|
-
highlight: highlightChoices,
|
|
186
|
-
animationsDisabled: animationsDisabled
|
|
187
|
-
})));
|
|
188
|
-
} else {
|
|
189
|
-
return accumulator + t.text;
|
|
190
|
-
}
|
|
191
|
-
};
|
|
192
|
-
|
|
193
|
-
var reduceResult = (tokens || []).reduce(reducer, '<p>');
|
|
194
|
-
return reduceResult + '</p>';
|
|
195
|
-
});
|
|
196
|
-
return _this;
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
(0, _createClass2["default"])(TokenSelect, [{
|
|
200
|
-
key: "render",
|
|
201
|
-
value: function render() {
|
|
202
|
-
var _this$props4 = this.props,
|
|
203
|
-
classes = _this$props4.classes,
|
|
204
|
-
classNameProp = _this$props4.className;
|
|
205
|
-
var className = (0, _classnames["default"])(classes.tokenSelect, classNameProp);
|
|
206
|
-
var html = this.generateTokensInHtml();
|
|
207
|
-
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
208
|
-
className: className,
|
|
209
|
-
dangerouslySetInnerHTML: {
|
|
210
|
-
__html: html
|
|
211
|
-
},
|
|
212
|
-
onClick: this.toggleToken
|
|
213
|
-
});
|
|
214
|
-
}
|
|
215
|
-
}]);
|
|
216
|
-
return TokenSelect;
|
|
217
|
-
}(_react["default"].Component);
|
|
218
|
-
|
|
219
|
-
exports.TokenSelect = TokenSelect;
|
|
220
|
-
(0, _defineProperty2["default"])(TokenSelect, "propTypes", {
|
|
221
|
-
tokens: _propTypes["default"].arrayOf(_propTypes["default"].shape(_token.TokenTypes)).isRequired,
|
|
222
|
-
className: _propTypes["default"].string,
|
|
223
|
-
classes: _propTypes["default"].object.isRequired,
|
|
224
|
-
onChange: _propTypes["default"].func.isRequired,
|
|
225
|
-
disabled: _propTypes["default"].bool,
|
|
226
|
-
highlightChoices: _propTypes["default"].bool,
|
|
227
|
-
animationsDisabled: _propTypes["default"].bool,
|
|
228
|
-
maxNoOfSelections: _propTypes["default"].number
|
|
229
|
-
});
|
|
230
|
-
(0, _defineProperty2["default"])(TokenSelect, "defaultProps", {
|
|
231
|
-
highlightChoices: false,
|
|
232
|
-
maxNoOfSelections: 0,
|
|
233
|
-
tokens: []
|
|
234
|
-
});
|
|
235
|
-
|
|
236
|
-
var _default = (0, _styles.withStyles)(function () {
|
|
237
|
-
return {
|
|
238
|
-
tokenSelect: _objectSpread(_objectSpread({
|
|
239
|
-
backgroundColor: 'none',
|
|
240
|
-
whiteSpace: 'pre'
|
|
241
|
-
}, (0, _styleUtils.noSelect)()), {}, {
|
|
242
|
-
'& p': {
|
|
243
|
-
whiteSpace: 'break-spaces'
|
|
244
|
-
}
|
|
245
|
-
})
|
|
246
|
-
};
|
|
247
|
-
})(TokenSelect);
|
|
248
|
-
|
|
249
|
-
exports["default"] = _default;
|
|
250
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b2tlbi1zZWxlY3QvaW5kZXguanN4Il0sIm5hbWVzIjpbImxvZyIsIlRva2VuU2VsZWN0IiwicHJvcHMiLCJ0b2tlbnMiLCJmaWx0ZXIiLCJ0Iiwic2VsZWN0ZWQiLCJsZW5ndGgiLCJzZWxlY3RlZENvdW50IiwibWF4Tm9PZlNlbGVjdGlvbnMiLCJpc0Zpbml0ZSIsImV2ZW50IiwidGFyZ2V0IiwiYW5pbWF0aW9uc0Rpc2FibGVkIiwidG9rZW5zQ2xvbmVkIiwidGFyZ2V0U3BhbldyYXBwZXIiLCJjbG9zZXN0IiwiVG9rZW4iLCJyb290Q2xhc3NOYW1lIiwidGFyZ2V0ZWRUb2tlbkluZGV4IiwiZGF0YXNldCIsImluZGV4a2V5IiwiY29ycmVjdCIsInVuZGVmaW5lZCIsImlzTWlzc2luZyIsIm9uQ2hhbmdlIiwic2VsZWN0ZWRUb2tlbiIsInVwZGF0ZWRUb2tlbnMiLCJtYXAiLCJ0b2tlbiIsInNlbGVjdGFibGUiLCJ1cGRhdGUiLCJzcGxpY2UiLCJkaXNhYmxlZCIsImhpZ2hsaWdodENob2ljZXMiLCJpc0xpbmVCcmVhayIsInRleHQiLCJpc05ld1BhcmFncmFwaCIsInJlZHVjZXIiLCJhY2N1bXVsYXRvciIsImluZGV4IiwiY2FuU2VsZWN0TW9yZSIsInNob3dDb3JyZWN0QW5zd2VyIiwiZmluYWxBY2MiLCJwcmVkZWZpbmVkIiwicmVkdWNlUmVzdWx0IiwicmVkdWNlIiwiY2xhc3NlcyIsImNsYXNzTmFtZVByb3AiLCJjbGFzc05hbWUiLCJ0b2tlblNlbGVjdCIsImh0bWwiLCJnZW5lcmF0ZVRva2Vuc0luSHRtbCIsIl9faHRtbCIsInRvZ2dsZVRva2VuIiwiUmVhY3QiLCJDb21wb25lbnQiLCJQcm9wVHlwZXMiLCJhcnJheU9mIiwic2hhcGUiLCJUb2tlblR5cGVzIiwiaXNSZXF1aXJlZCIsInN0cmluZyIsIm9iamVjdCIsImZ1bmMiLCJib29sIiwibnVtYmVyIiwiYmFja2dyb3VuZENvbG9yIiwid2hpdGVTcGFjZSJdLCJtYXBw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QkFBVztBQUFBLFNBQU87QUFDL0IrQyxJQUFBQSxXQUFXO0FBQ1RpQixNQUFBQSxlQUFlLEVBQUUsTUFEUjtBQUVUQyxNQUFBQSxVQUFVLEVBQUU7QUFGSCxPQUdOLDJCQUhNO0FBSVQsYUFBTztBQUNMQSxRQUFBQSxVQUFVLEVBQUU7QUFEUDtBQUpFO0FBRG9CLEdBQVA7QUFBQSxDQUFYLEVBU1huRSxXQVRXLEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBUb2tlbiwgeyBUb2tlblR5cGVzIH0gZnJvbSAnLi90b2tlbic7XG5pbXBvcnQgeyB3aXRoU3R5bGVzIH0gZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUvc3R5bGVzJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IGNsb25lIGZyb20gJ2xvZGFzaC9jbG9uZSc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IHsgbm9TZWxlY3QgfSBmcm9tICdAcGllLWxpYi9zdHlsZS11dGlscyc7XG5pbXBvcnQgeyByZW5kZXJUb1N0cmluZyB9IGZyb20gJ3JlYWN0LWRvbS9zZXJ2ZXInO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuXG5jb25zdCBsb2cgPSBkZWJ1ZygnQHBpZS1saWI6dGV4dC1zZWxlY3Q6dG9rZW4tc2VsZWN0Jyk7XG5cbmV4cG9ydCBjbGFzcyBUb2tlblNlbGVjdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgdG9rZW5zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoVG9rZW5UeXBlcykpLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgaGlnaGxpZ2h0Q2hvaWNlczogUHJvcFR5cGVzLmJvb2wsXG4gICAgYW5pbWF0aW9uc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBtYXhOb09mU2VsZWN0aW9uczogUHJvcFR5cGVzLm51bWJlcixcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGhpZ2hsaWdodENob2ljZXM6IGZhbHNlLFxuICAgIG1heE5vT2ZTZWxlY3Rpb25zOiAwLFxuICAgIHRva2VuczogW10sXG4gIH07XG5cbiAgc2VsZWN0ZWRDb3VudCA9ICgpID0+IHRoaXMucHJvcHMudG9rZW5zLmZpbHRlcigodCkgPT4gdC5zZWxlY3RlZCkubGVuZ3RoO1xuXG4gIGNhblNlbGVjdE1vcmUgPSAoc2VsZWN0ZWRDb3VudCkgPT4ge1xuICAgIGNvbnN0IHsgbWF4Tm9PZlNlbGVjdGlvbnMgfSA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAobWF4Tm9PZlNlbGVjdGlvbnMgPT09IDEpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGxvZygnW2NhblNlbGVjdE1vcmVdIG1heE5vT2ZTZWxlY3Rpb25zOiAnLCBtYXhOb09mU2VsZWN0aW9ucywgJ3NlbGVjdGVkQ291bnQ6ICcsIHNlbGVjdGVkQ291bnQpO1xuICAgIHJldHVybiBtYXhOb09mU2VsZWN0aW9ucyA8PSAwIHx8IChpc0Zpbml0ZShtYXhOb09mU2VsZWN0aW9ucykgJiYgc2VsZWN0ZWRDb3VudCA8IG1heE5vT2ZTZWxlY3Rpb25zKTtcbiAgfTtcblxuICAvKipcbiAgIEBmdW5jdGlvblxuICAgQHBhcmFtIHsgb2JqZWN0IH0gZXZlbnRcblxuICAgQGRlc2NyaXB0aW9uXG4gICAgZWFjaCB0b2tlbiBpcyB3cmFwcGVkIGludG8gYSBzcGFuIHRoYXQgaGFzIFRva2VuLnJvb3RDbGFzc05hbWUgY2xhc3MgYW5kIGluZGV4a2V5IGF0dHJpYnV0ZSAocmVwcmVzZW50cyB0aGUgaW5kZXggb2YgdGhlIHRva2VuKVxuICAgIHRva2VucyBhcmUgdXBkYXRlZCB3aXRoIHRoZSB0YXJnZXRlZCB0b2tlbiBoYXZpbmcgdGhlIGNvcnJlY3QgdmFsdWUgc2V0IGZvciAnc2VsZWN0ZWQnIHByb3BlcnR5XG4gICAqL1xuICB0b2dnbGVUb2tlbiA9IChldmVudCkgPT4ge1xuICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBldmVudDtcbiAgICBjb25zdCB7IHRva2VucywgYW5pbWF0aW9uc0Rpc2FibGVkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHRva2Vuc0Nsb25lZCA9IGNsb25lKHRva2Vucyk7XG4gICAgY29uc3QgdGFyZ2V0U3BhbldyYXBwZXIgPSB0YXJnZXQuY2xvc2VzdChgLiR7VG9rZW4ucm9vdENsYXNzTmFtZX1gKTtcbiAgICBjb25zdCB0YXJnZXRlZFRva2VuSW5kZXggPSB0YXJnZXRTcGFuV3JhcHBlciAmJiB0YXJnZXRTcGFuV3JhcHBlci5kYXRhc2V0ICYmIHRhcmdldFNwYW5XcmFwcGVyLmRhdGFzZXQuaW5kZXhrZXk7XG4gICAgY29uc3QgdCA9IHRhcmdldGVkVG9rZW5JbmRleCAmJiB0b2tlbnNDbG9uZWRbdGFyZ2V0ZWRUb2tlbkluZGV4XTtcblxuICAgIC8vIGRvbid0IHRvZ2dsZSBpZiB3ZSBhcmUgaW4gcHJpbnQgbW9kZSwgdG9rZW4gY29ycmVjdG5lc3MgaXMgZGVmaW5lZCBvciBpZiBpdCdzIG1pc3NpbmdcbiAgICAvLyAobWlzc2luZyBtZWFucyB0aGF0IGl0IHdhcyBldmFsdWF0ZWQgYXMgY29ycmVjdCBhbmQgbm90IHNlbGVjdGVkKVxuICAgIGlmICh0ICYmIHQuY29ycmVjdCA9PT0gdW5kZWZpbmVkICYmICFhbmltYXRpb25zRGlzYWJsZWQgJiYgIXQuaXNNaXNzaW5nKSB7XG4gICAgICBjb25zdCB7IG9uQ2hhbmdlLCBtYXhOb09mU2VsZWN0aW9ucyB9ID0gdGhpcy5wcm9wcztcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gIXQuc2VsZWN0ZWQ7XG5cbiAgICAgIGlmIChtYXhOb09mU2VsZWN0aW9ucyA9PT0gMSAmJiB0aGlzLnNlbGVjdGVkQ291bnQoKSA9PT0gMSkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZFRva2VuID0gKHRva2VucyB8fCBbXSkuZmlsdGVyKCh0KSA9PiB0LnNlbGVjdGVkKTtcblxuICAgICAgICBjb25zdCB1cGRhdGVkVG9rZW5zID0gdG9rZW5zQ2xvbmVkLm1hcCgodG9rZW4pID0+IHtcbiAgICAgICAgICBpZiAoaXNFcXVhbCh0b2tlbiwgc2VsZWN0ZWRUb2tlblswXSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IC4uLnRva2VuLCBzZWxlY3RlZDogZmFsc2UgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4geyAuLi50b2tlbiwgc2VsZWN0YWJsZTogdHJ1ZSB9O1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB1cGRhdGUgPSB7IC4uLnQsIHNlbGVjdGVkOiAhdC5zZWxlY3RlZCB9O1xuXG4gICAgICAgIHVwZGF0ZWRUb2tlbnMuc3BsaWNlKHRhcmdldGVkVG9rZW5JbmRleCwgMSwgdXBkYXRlKTtcbiAgICAgICAgb25DaGFuZ2UodXBkYXRlZFRva2Vucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoc2VsZWN0ZWQgJiYgbWF4Tm9PZlNlbGVjdGlvbnMgPiAwICYmIHRoaXMuc2VsZWN0ZWRDb3VudCgpID49IG1heE5vT2ZTZWxlY3Rpb25zKSB7XG4gICAgICAgICAgbG9nKCdza2lwIHRvZ2dsZSBtYXggcmVhY2hlZCcpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVwZGF0ZSA9IHsgLi4udCwgc2VsZWN0ZWQ6ICF0LnNlbGVjdGVkIH07XG5cbiAgICAgICAgdG9rZW5zQ2xvbmVkLnNwbGljZSh0YXJnZXRlZFRva2VuSW5kZXgsIDEsIHVwZGF0ZSk7XG4gICAgICAgIG9uQ2hhbmdlKHRva2Vuc0Nsb25lZCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGdlbmVyYXRlVG9rZW5zSW5IdG1sID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgdG9rZW5zLCBkaXNhYmxlZCwgaGlnaGxpZ2h0Q2hvaWNlcywgYW5pbWF0aW9uc0Rpc2FibGVkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHNlbGVjdGVkQ291bnQgPSB0aGlzLnNlbGVjdGVkQ291bnQoKTtcbiAgICBjb25zdCBpc0xpbmVCcmVhayA9ICh0ZXh0KSA9PiB0ZXh0ID09PSAnXFxuJztcbiAgICBjb25zdCBpc05ld1BhcmFncmFwaCA9ICh0ZXh0KSA9PiB0ZXh0ID09PSAnXFxuXFxuJztcblxuICAgIGNvbnN0IHJlZHVjZXIgPSAoYWNjdW11bGF0b3IsIHQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBzZWxlY3RhYmxlID0gdC5zZWxlY3RlZCB8fCAodC5zZWxlY3RhYmxlICYmIHRoaXMuY2FuU2VsZWN0TW9yZShzZWxlY3RlZENvdW50KSk7XG4gICAgICBjb25zdCBzaG93Q29ycmVjdEFuc3dlciA9IHQuY29ycmVjdCAhPT0gdW5kZWZpbmVkICYmICh0LnNlbGVjdGFibGUgfHwgdC5zZWxlY3RlZCk7XG4gICAgICBsZXQgZmluYWxBY2MgPSBhY2N1bXVsYXRvcjtcblxuICAgICAgaWYgKGlzTmV3UGFyYWdyYXBoKHQudGV4dCkpIHtcbiAgICAgICAgcmV0dXJuIGZpbmFsQWNjICsgJzwvcD48cD4nO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNMaW5lQnJlYWsodC50ZXh0KSkge1xuICAgICAgICByZXR1cm4gZmluYWxBY2MgKyAnPGJyPic7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgKHNlbGVjdGFibGUgJiYgIWRpc2FibGVkKSB8fFxuICAgICAgICBzaG93Q29ycmVjdEFuc3dlciB8fFxuICAgICAgICB0LnNlbGVjdGVkIHx8XG4gICAgICAgIHQuaXNNaXNzaW5nIHx8XG4gICAgICAgIChhbmltYXRpb25zRGlzYWJsZWQgJiYgdC5wcmVkZWZpbmVkKSAvLyBpZiB3ZSBhcmUgaW4gcHJpbnQgbW9kZVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgZmluYWxBY2MgK1xuICAgICAgICAgIHJlbmRlclRvU3RyaW5nKFxuICAgICAgICAgICAgPFRva2VuXG4gICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICAgICAgICB7Li4udH1cbiAgICAgICAgICAgICAgc2VsZWN0YWJsZT17c2VsZWN0YWJsZX1cbiAgICAgICAgICAgICAgaGlnaGxpZ2h0PXtoaWdobGlnaHRDaG9pY2VzfVxuICAgICAgICAgICAgICBhbmltYXRpb25zRGlzYWJsZWQ9e2FuaW1hdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAgIC8+LFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvciArIHQudGV4dDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcmVkdWNlUmVzdWx0ID0gKHRva2VucyB8fCBbXSkucmVkdWNlKHJlZHVjZXIsICc8cD4nKTtcblxuICAgIHJldHVybiByZWR1Y2VSZXN1bHQgKyAnPC9wPic7XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgY2xhc3NlcywgY2xhc3NOYW1lOiBjbGFzc05hbWVQcm9wIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IGNsYXNzTmFtZXMoY2xhc3Nlcy50b2tlblNlbGVjdCwgY2xhc3NOYW1lUHJvcCk7XG4gICAgY29uc3QgaHRtbCA9IHRoaXMuZ2VuZXJhdGVUb2tlbnNJbkh0bWwoKTtcblxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSBkYW5nZXJvdXNseVNldElubmVySFRNTD17eyBfX2h0bWw6IGh0bWwgfX0gb25DbGljaz17dGhpcy50b2dnbGVUb2tlbn0gLz47XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlcygoKSA9PiAoe1xuICB0b2tlblNlbGVjdDoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ25vbmUnLFxuICAgIHdoaXRlU3BhY2U6ICdwcmUnLFxuICAgIC4uLm5vU2VsZWN0KCksXG4gICAgJyYgcCc6IHtcbiAgICAgIHdoaXRlU3BhY2U6ICdicmVhay1zcGFjZXMnLFxuICAgIH0sXG4gIH0sXG59KSkoVG9rZW5TZWxlY3QpO1xuIl19
|
|
@@ -1,230 +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.TokenTypes = exports.Token = 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 _styles = require("@material-ui/core/styles");
|
|
27
|
-
|
|
28
|
-
var _classnames = _interopRequireDefault(require("classnames"));
|
|
29
|
-
|
|
30
|
-
var _renderUi = require("@pie-lib/render-ui");
|
|
31
|
-
|
|
32
|
-
var _Check = _interopRequireDefault(require("@material-ui/icons/Check"));
|
|
33
|
-
|
|
34
|
-
var _Close = _interopRequireDefault(require("@material-ui/icons/Close"));
|
|
35
|
-
|
|
36
|
-
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; }
|
|
37
|
-
|
|
38
|
-
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; }
|
|
39
|
-
|
|
40
|
-
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); }; }
|
|
41
|
-
|
|
42
|
-
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; } }
|
|
43
|
-
|
|
44
|
-
var Wrapper = function Wrapper(_ref) {
|
|
45
|
-
var useWrapper = _ref.useWrapper,
|
|
46
|
-
children = _ref.children,
|
|
47
|
-
classNameContainer = _ref.classNameContainer,
|
|
48
|
-
iconClass = _ref.iconClass,
|
|
49
|
-
Icon = _ref.Icon;
|
|
50
|
-
|
|
51
|
-
if (useWrapper) {
|
|
52
|
-
return /*#__PURE__*/_react["default"].createElement("span", {
|
|
53
|
-
className: classNameContainer
|
|
54
|
-
}, children, /*#__PURE__*/_react["default"].createElement(Icon, {
|
|
55
|
-
className: iconClass,
|
|
56
|
-
viewBox: '0 1 24 24'
|
|
57
|
-
}));
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
return children;
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
Wrapper.propTypes = {
|
|
64
|
-
useWrapper: _propTypes["default"].bool,
|
|
65
|
-
classNameContainer: _propTypes["default"].string,
|
|
66
|
-
iconClass: _propTypes["default"].string,
|
|
67
|
-
Icon: _propTypes["default"].func,
|
|
68
|
-
children: _propTypes["default"].element
|
|
69
|
-
};
|
|
70
|
-
var TokenTypes = {
|
|
71
|
-
text: _propTypes["default"].string,
|
|
72
|
-
selectable: _propTypes["default"].bool
|
|
73
|
-
};
|
|
74
|
-
exports.TokenTypes = TokenTypes;
|
|
75
|
-
|
|
76
|
-
var Token = /*#__PURE__*/function (_React$Component) {
|
|
77
|
-
(0, _inherits2["default"])(Token, _React$Component);
|
|
78
|
-
|
|
79
|
-
var _super = _createSuper(Token);
|
|
80
|
-
|
|
81
|
-
function Token() {
|
|
82
|
-
(0, _classCallCheck2["default"])(this, Token);
|
|
83
|
-
return _super.apply(this, arguments);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
(0, _createClass2["default"])(Token, [{
|
|
87
|
-
key: "render",
|
|
88
|
-
value: function render() {
|
|
89
|
-
var _this$props = this.props,
|
|
90
|
-
text = _this$props.text,
|
|
91
|
-
selectable = _this$props.selectable,
|
|
92
|
-
selected = _this$props.selected,
|
|
93
|
-
classes = _this$props.classes,
|
|
94
|
-
classNameProp = _this$props.className,
|
|
95
|
-
disabled = _this$props.disabled,
|
|
96
|
-
index = _this$props.index,
|
|
97
|
-
highlight = _this$props.highlight,
|
|
98
|
-
correct = _this$props.correct,
|
|
99
|
-
animationsDisabled = _this$props.animationsDisabled,
|
|
100
|
-
isMissing = _this$props.isMissing;
|
|
101
|
-
var isTouchEnabled = 'ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0;
|
|
102
|
-
var className;
|
|
103
|
-
var classNameContainer;
|
|
104
|
-
var Icon;
|
|
105
|
-
var iconClass;
|
|
106
|
-
|
|
107
|
-
if (correct === undefined && selected && disabled) {
|
|
108
|
-
className = (0, _classnames["default"])(classes.token, classes.selected, classes.disabledBlack);
|
|
109
|
-
} else if (correct !== undefined) {
|
|
110
|
-
className = (0, _classnames["default"])(Token.rootClassName, classes.custom);
|
|
111
|
-
Icon = correct ? _Check["default"] : _Close["default"];
|
|
112
|
-
classNameContainer = correct === true ? classes.correct : classes.incorrect;
|
|
113
|
-
iconClass = correct === true ? classes.correctIcon : classes.incorrectIcon;
|
|
114
|
-
} else if (isMissing) {
|
|
115
|
-
className = (0, _classnames["default"])(Token.rootClassName, classes.custom, isMissing === true && classes.missing);
|
|
116
|
-
} else {
|
|
117
|
-
className = (0, _classnames["default"])(Token.rootClassName, classes.token, disabled && classes.disabled, selectable && !disabled && !isTouchEnabled && classes.selectable, selected && !disabled && classes.selected, selected && disabled && classes.disabledAndSelected, highlight && selectable && !disabled && !selected && classes.highlight, animationsDisabled && classes.print, classNameProp);
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
return /*#__PURE__*/_react["default"].createElement(Wrapper, {
|
|
121
|
-
useWrapper: correct !== undefined,
|
|
122
|
-
classNameContainer: classNameContainer,
|
|
123
|
-
iconClass: iconClass,
|
|
124
|
-
Icon: Icon
|
|
125
|
-
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
126
|
-
className: className,
|
|
127
|
-
dangerouslySetInnerHTML: {
|
|
128
|
-
__html: (text || '').replace(/\n/g, '<br>')
|
|
129
|
-
},
|
|
130
|
-
"data-indexkey": index
|
|
131
|
-
}));
|
|
132
|
-
}
|
|
133
|
-
}]);
|
|
134
|
-
return Token;
|
|
135
|
-
}(_react["default"].Component);
|
|
136
|
-
|
|
137
|
-
exports.Token = Token;
|
|
138
|
-
(0, _defineProperty2["default"])(Token, "rootClassName", 'tokenRootClass');
|
|
139
|
-
(0, _defineProperty2["default"])(Token, "propTypes", _objectSpread(_objectSpread({}, TokenTypes), {}, {
|
|
140
|
-
classes: _propTypes["default"].object.isRequired,
|
|
141
|
-
className: _propTypes["default"].string,
|
|
142
|
-
disabled: _propTypes["default"].bool,
|
|
143
|
-
highlight: _propTypes["default"].bool,
|
|
144
|
-
correct: _propTypes["default"].bool,
|
|
145
|
-
text: _propTypes["default"].string.isRequired
|
|
146
|
-
}));
|
|
147
|
-
(0, _defineProperty2["default"])(Token, "defaultProps", {
|
|
148
|
-
selectable: false,
|
|
149
|
-
text: ''
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
var _default = (0, _styles.withStyles)(function (theme) {
|
|
153
|
-
return {
|
|
154
|
-
token: {
|
|
155
|
-
cursor: 'pointer',
|
|
156
|
-
textIndent: 0
|
|
157
|
-
},
|
|
158
|
-
disabled: {
|
|
159
|
-
cursor: 'inherit',
|
|
160
|
-
color: _renderUi.color.disabled()
|
|
161
|
-
},
|
|
162
|
-
disabledBlack: {
|
|
163
|
-
cursor: 'inherit'
|
|
164
|
-
},
|
|
165
|
-
disabledAndSelected: {
|
|
166
|
-
backgroundColor: _renderUi.color.secondaryLight()
|
|
167
|
-
},
|
|
168
|
-
selectable: (0, _defineProperty2["default"])({}, theme.breakpoints.up(769), {
|
|
169
|
-
'&:hover': {
|
|
170
|
-
backgroundColor: _renderUi.color.primaryLight(),
|
|
171
|
-
color: theme.palette.common.black,
|
|
172
|
-
'& > *': {
|
|
173
|
-
backgroundColor: _renderUi.color.primaryLight()
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
}),
|
|
177
|
-
selected: {
|
|
178
|
-
backgroundColor: _renderUi.color.primaryLight(),
|
|
179
|
-
color: theme.palette.common.black,
|
|
180
|
-
lineHeight: "".concat(theme.spacing.unit * 3, "px"),
|
|
181
|
-
'& > *': {
|
|
182
|
-
backgroundColor: _renderUi.color.primaryLight()
|
|
183
|
-
}
|
|
184
|
-
},
|
|
185
|
-
highlight: {
|
|
186
|
-
border: "dashed 2px ".concat(_renderUi.color.disabled()),
|
|
187
|
-
lineHeight: "".concat(theme.spacing.unit * 3, "px")
|
|
188
|
-
},
|
|
189
|
-
print: {
|
|
190
|
-
border: "dashed 2px ".concat(_renderUi.color.disabled()),
|
|
191
|
-
lineHeight: "".concat(theme.spacing.unit * 3, "px"),
|
|
192
|
-
color: _renderUi.color.text()
|
|
193
|
-
},
|
|
194
|
-
custom: {
|
|
195
|
-
display: 'initial'
|
|
196
|
-
},
|
|
197
|
-
correct: {
|
|
198
|
-
backgroundColor: _renderUi.color.correctSecondary(),
|
|
199
|
-
border: "".concat(_renderUi.color.correct(), " solid 2px"),
|
|
200
|
-
color: theme.palette.common.black,
|
|
201
|
-
lineHeight: "".concat(theme.spacing.unit * 3, "px")
|
|
202
|
-
},
|
|
203
|
-
incorrect: {
|
|
204
|
-
backgroundColor: _renderUi.color.incorrectSecondary(),
|
|
205
|
-
border: "".concat(_renderUi.color.missing(), " solid 2px"),
|
|
206
|
-
color: theme.palette.common.black,
|
|
207
|
-
lineHeight: "".concat(theme.spacing.unit * 3, "px")
|
|
208
|
-
},
|
|
209
|
-
missing: {
|
|
210
|
-
backgroundColor: _renderUi.color.incorrectSecondary(),
|
|
211
|
-
border: "".concat(_renderUi.color.missing(), " dashed 2px"),
|
|
212
|
-
color: theme.palette.common.black,
|
|
213
|
-
lineHeight: "".concat(theme.spacing.unit * 3, "px"),
|
|
214
|
-
textDecoration: "line-through ".concat(_renderUi.color.missing())
|
|
215
|
-
},
|
|
216
|
-
incorrectIcon: {
|
|
217
|
-
verticalAlign: 'middle',
|
|
218
|
-
fontSize: 'larger',
|
|
219
|
-
color: _renderUi.color.missing()
|
|
220
|
-
},
|
|
221
|
-
correctIcon: {
|
|
222
|
-
verticalAlign: 'middle',
|
|
223
|
-
fontSize: 'larger',
|
|
224
|
-
color: _renderUi.color.correct()
|
|
225
|
-
}
|
|
226
|
-
};
|
|
227
|
-
})(Token);
|
|
228
|
-
|
|
229
|
-
exports["default"] = _default;
|
|
230
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b2tlbi1zZWxlY3QvdG9rZW4uanN4Il0sIm5hbWVzIjpbIldyYXBwZXIiLCJ1c2VXcmFwcGVyIiwiY2hpbGRyZW4iLCJjbGFzc05hbWVDb250YWluZXIiLCJpY29uQ2xhc3MiLCJJY29uIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiYm9vbCIsInN0cmluZyIsImZ1bmMiLCJlbGVtZW50IiwiVG9rZW5UeXBlcyIsInRleHQiLCJzZWxlY3RhYmxlIiwiVG9rZW4iLCJwcm9wcyIsInNlbGVjdGVkIiwiY2xhc3NlcyIsImNsYXNzTmFtZVByb3AiLCJjbGFzc05hbWUiLCJkaXNhYmxlZCIsImluZGV4IiwiaGlnaGxpZ2h0IiwiY29ycmVjdCIsImFuaW1hdGlvbnNEaXNhYmxlZCIsImlzTWlzc2luZyIsImlzVG91Y2hFbmFibGVkIiwid2luZG93IiwibmF2aWdhdG9yIiwibWF4VG91Y2hQb2ludHMiLCJtc01heFRvdWNoUG9pbnRzIiwidW5kZWZpbmVkIiwidG9rZW4iLCJkaXNhYmxlZEJsYWNrIiwicm9vdENsYXNzTmFtZSIsImN1c3RvbSIsIkNoZWNrIiwiQ2xvc2UiLCJpbmNvcnJlY3QiLCJjb3JyZWN0SWNvbiIsImluY29ycmVjdEljb24iLCJtaXNzaW5nIiwiZGlzYWJsZWRBbmRTZWxlY3RlZCIsInByaW50IiwiX19odG1sIiwicmVwbGFjZSIsIlJlYWN0IiwiQ29tcG9uZW50Iiwib2JqZWN0IiwiaXNSZXF1aXJlZCIsInRoZW1lIiwiY3Vyc29yIiwidGV4dEluZGVudCIsImNvbG9yIiwiYmFja2dyb3VuZENvbG9yIiwic2Vjb25kYXJ5TGlnaHQiLCJicmVha3BvaW50cyIsInVwIiwicHJpbWFyeUxpZ2h0IiwicGFsZXR0ZSIsImNvbW1vbiIsImJsYWNrIiwibGluZUhlaWdodCIsInNwYWNpbmciLCJ1bml0IiwiYm9yZGVyIiwiZGlzcGxheSIsImNvcnJlY3RTZWNvbmRhcnkiLCJpbmNvcnJlY3RTZWNvbmRhcnkiLCJ0ZXh0RGVjb3Jh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QUssRUFBRUEsZ0JBQU05QixPQUFOO0FBSEk7QUF0RVIsR0FBUDtBQTRFRCxDQTdFYyxFQTZFWlQsS0E3RVksQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgd2l0aFN0eWxlcyB9IGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL3N0eWxlcyc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7IGNvbG9yIH0gZnJvbSAnQHBpZS1saWIvcmVuZGVyLXVpJztcbmltcG9ydCBDaGVjayBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvQ2hlY2snO1xuaW1wb3J0IENsb3NlIGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9DbG9zZSc7XG5cbmNvbnN0IFdyYXBwZXIgPSAoeyB1c2VXcmFwcGVyLCBjaGlsZHJlbiwgY2xhc3NOYW1lQ29udGFpbmVyLCBpY29uQ2xhc3MsIEljb24gfSkgPT4ge1xuICBpZiAodXNlV3JhcHBlcikge1xuICAgIHJldHVybiAoXG4gICAgICA8c3BhbiBjbGFzc05hbWU9e2NsYXNzTmFtZUNvbnRhaW5lcn0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPEljb24gY2xhc3NOYW1lPXtpY29uQ2xhc3N9IHZpZXdCb3g9eycwIDEgMjQgMjQnfSAvPlxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gY2hpbGRyZW47XG59O1xuXG5XcmFwcGVyLnByb3BUeXBlcyA9IHtcbiAgdXNlV3JhcHBlcjogUHJvcFR5cGVzLmJvb2wsXG4gIGNsYXNzTmFtZUNvbnRhaW5lcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgaWNvbkNsYXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBJY29uOiBQcm9wVHlwZXMuZnVuYyxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5lbGVtZW50LFxufTtcblxuZXhwb3J0IGNvbnN0IFRva2VuVHlwZXMgPSB7XG4gIHRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNlbGVjdGFibGU6IFByb3BUeXBlcy5ib29sLFxufTtcblxuZXhwb3J0IGNsYXNzIFRva2VuIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGljIHJvb3RDbGFzc05hbWUgPSAndG9rZW5Sb290Q2xhc3MnO1xuXG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgLi4uVG9rZW5UeXBlcyxcbiAgICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBoaWdobGlnaHQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGNvcnJlY3Q6IFByb3BUeXBlcy5ib29sLFxuICAgIHRleHQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIHNlbGVjdGFibGU6IGZhbHNlLFxuICAgIHRleHQ6ICcnLFxuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICB0ZXh0LFxuICAgICAgc2VsZWN0YWJsZSxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgY2xhc3NlcyxcbiAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lUHJvcCxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgaW5kZXgsXG4gICAgICBoaWdobGlnaHQsXG4gICAgICBjb3JyZWN0LFxuICAgICAgYW5pbWF0aW9uc0Rpc2FibGVkLFxuICAgICAgaXNNaXNzaW5nLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGlzVG91Y2hFbmFibGVkID0gJ29udG91Y2hzdGFydCcgaW4gd2luZG93IHx8IG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDAgfHwgbmF2aWdhdG9yLm1zTWF4VG91Y2hQb2ludHMgPiAwO1xuXG4gICAgbGV0IGNsYXNzTmFtZTtcbiAgICBsZXQgY2xhc3NOYW1lQ29udGFpbmVyO1xuICAgIGxldCBJY29uO1xuICAgIGxldCBpY29uQ2xhc3M7XG5cbiAgICBpZiAoY29ycmVjdCA9PT0gdW5kZWZpbmVkICYmIHNlbGVjdGVkICYmIGRpc2FibGVkKSB7XG4gICAgICBjbGFzc05hbWUgPSBjbGFzc05hbWVzKGNsYXNzZXMudG9rZW4sIGNsYXNzZXMuc2VsZWN0ZWQsIGNsYXNzZXMuZGlzYWJsZWRCbGFjayk7XG4gICAgfSBlbHNlIGlmIChjb3JyZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZXMoVG9rZW4ucm9vdENsYXNzTmFtZSwgY2xhc3Nlcy5jdXN0b20pO1xuICAgICAgSWNvbiA9IGNvcnJlY3QgPyBDaGVjayA6IENsb3NlO1xuICAgICAgY2xhc3NOYW1lQ29udGFpbmVyID0gY29ycmVjdCA9PT0gdHJ1ZSA/IGNsYXNzZXMuY29ycmVjdCA6IGNsYXNzZXMuaW5jb3JyZWN0O1xuICAgICAgaWNvbkNsYXNzID0gY29ycmVjdCA9PT0gdHJ1ZSA/IGNsYXNzZXMuY29ycmVjdEljb24gOiBjbGFzc2VzLmluY29ycmVjdEljb247XG4gICAgfSBlbHNlIGlmIChpc01pc3NpbmcpIHtcbiAgICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZXMoVG9rZW4ucm9vdENsYXNzTmFtZSwgY2xhc3Nlcy5jdXN0b20sIGlzTWlzc2luZyA9PT0gdHJ1ZSAmJiBjbGFzc2VzLm1pc3NpbmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjbGFzc05hbWUgPSBjbGFzc05hbWVzKFxuICAgICAgICBUb2tlbi5yb290Q2xhc3NOYW1lLFxuICAgICAgICBjbGFzc2VzLnRva2VuLFxuICAgICAgICBkaXNhYmxlZCAmJiBjbGFzc2VzLmRpc2FibGVkLFxuICAgICAgICBzZWxlY3RhYmxlICYmICFkaXNhYmxlZCAmJiAhaXNUb3VjaEVuYWJsZWQgJiYgY2xhc3Nlcy5zZWxlY3RhYmxlLFxuICAgICAgICBzZWxlY3RlZCAmJiAhZGlzYWJsZWQgJiYgY2xhc3Nlcy5zZWxlY3RlZCxcbiAgICAgICAgc2VsZWN0ZWQgJiYgZGlzYWJsZWQgJiYgY2xhc3Nlcy5kaXNhYmxlZEFuZFNlbGVjdGVkLFxuICAgICAgICBoaWdobGlnaHQgJiYgc2VsZWN0YWJsZSAmJiAhZGlzYWJsZWQgJiYgIXNlbGVjdGVkICYmIGNsYXNzZXMuaGlnaGxpZ2h0LFxuICAgICAgICBhbmltYXRpb25zRGlzYWJsZWQgJiYgY2xhc3Nlcy5wcmludCxcbiAgICAgICAgY2xhc3NOYW1lUHJvcCxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8V3JhcHBlclxuICAgICAgICB1c2VXcmFwcGVyPXtjb3JyZWN0ICE9PSB1bmRlZmluZWR9XG4gICAgICAgIGNsYXNzTmFtZUNvbnRhaW5lcj17Y2xhc3NOYW1lQ29udGFpbmVyfVxuICAgICAgICBpY29uQ2xhc3M9e2ljb25DbGFzc31cbiAgICAgICAgSWNvbj17SWNvbn1cbiAgICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17eyBfX2h0bWw6ICh0ZXh0IHx8ICcnKS5yZXBsYWNlKC9cXG4vZywgJzxicj4nKSB9fVxuICAgICAgICAgIGRhdGEtaW5kZXhrZXk9e2luZGV4fVxuICAgICAgICAvPlxuICAgICAgPC9XcmFwcGVyPlxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFN0eWxlcygodGhlbWUpID0+IHtcbiAgcmV0dXJuIHtcbiAgICB0b2tlbjoge1xuICAgICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgICB0ZXh0SW5kZW50OiAwLFxuICAgIH0sXG4gICAgZGlzYWJsZWQ6IHtcbiAgICAgIGN1cnNvcjogJ2luaGVyaXQnLFxuICAgICAgY29sb3I6IGNvbG9yLmRpc2FibGVkKCksXG4gICAgfSxcbiAgICBkaXNhYmxlZEJsYWNrOiB7XG4gICAgICBjdXJzb3I6ICdpbmhlcml0JyxcbiAgICB9LFxuICAgIGRpc2FibGVkQW5kU2VsZWN0ZWQ6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogY29sb3Iuc2Vjb25kYXJ5TGlnaHQoKSxcbiAgICB9LFxuICAgIHNlbGVjdGFibGU6IHtcbiAgICAgIFt0aGVtZS5icmVha3BvaW50cy51cCg3NjkpXToge1xuICAgICAgICAnJjpob3Zlcic6IHtcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLnByaW1hcnlMaWdodCgpLFxuICAgICAgICAgIGNvbG9yOiB0aGVtZS5wYWxldHRlLmNvbW1vbi5ibGFjayxcbiAgICAgICAgICAnJiA+IConOiB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLnByaW1hcnlMaWdodCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgc2VsZWN0ZWQ6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogY29sb3IucHJpbWFyeUxpZ2h0KCksXG4gICAgICBjb2xvcjogdGhlbWUucGFsZXR0ZS5jb21tb24uYmxhY2ssXG4gICAgICBsaW5lSGVpZ2h0OiBgJHt0aGVtZS5zcGFjaW5nLnVuaXQgKiAzfXB4YCxcbiAgICAgICcmID4gKic6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBjb2xvci5wcmltYXJ5TGlnaHQoKSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBoaWdobGlnaHQ6IHtcbiAgICAgIGJvcmRlcjogYGRhc2hlZCAycHggJHtjb2xvci5kaXNhYmxlZCgpfWAsXG4gICAgICBsaW5lSGVpZ2h0OiBgJHt0aGVtZS5zcGFjaW5nLnVuaXQgKiAzfXB4YCxcbiAgICB9LFxuICAgIHByaW50OiB7XG4gICAgICBib3JkZXI6IGBkYXNoZWQgMnB4ICR7Y29sb3IuZGlzYWJsZWQoKX1gLFxuICAgICAgbGluZUhlaWdodDogYCR7dGhlbWUuc3BhY2luZy51bml0ICogM31weGAsXG4gICAgICBjb2xvcjogY29sb3IudGV4dCgpLFxuICAgIH0sXG4gICAgY3VzdG9tOiB7XG4gICAgICBkaXNwbGF5OiAnaW5pdGlhbCcsXG4gICAgfSxcbiAgICBjb3JyZWN0OiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLmNvcnJlY3RTZWNvbmRhcnkoKSxcbiAgICAgIGJvcmRlcjogYCR7Y29sb3IuY29ycmVjdCgpfSBzb2xpZCAycHhgLFxuICAgICAgY29sb3I6IHRoZW1lLnBhbGV0dGUuY29tbW9uLmJsYWNrLFxuICAgICAgbGluZUhlaWdodDogYCR7dGhlbWUuc3BhY2luZy51bml0ICogM31weGAsXG4gICAgfSxcbiAgICBpbmNvcnJlY3Q6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogY29sb3IuaW5jb3JyZWN0U2Vjb25kYXJ5KCksXG4gICAgICBib3JkZXI6IGAke2NvbG9yLm1pc3NpbmcoKX0gc29saWQgMnB4YCxcbiAgICAgIGNvbG9yOiB0aGVtZS5wYWxldHRlLmNvbW1vbi5ibGFjayxcbiAgICAgIGxpbmVIZWlnaHQ6IGAke3RoZW1lLnNwYWNpbmcudW5pdCAqIDN9cHhgLFxuICAgIH0sXG4gICAgbWlzc2luZzoge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiBjb2xvci5pbmNvcnJlY3RTZWNvbmRhcnkoKSxcbiAgICAgIGJvcmRlcjogYCR7Y29sb3IubWlzc2luZygpfSBkYXNoZWQgMnB4YCxcbiAgICAgIGNvbG9yOiB0aGVtZS5wYWxldHRlLmNvbW1vbi5ibGFjayxcbiAgICAgIGxpbmVIZWlnaHQ6IGAke3RoZW1lLnNwYWNpbmcudW5pdCAqIDN9cHhgLFxuICAgICAgdGV4dERlY29yYXRpb246IGBsaW5lLXRocm91Z2ggJHtjb2xvci5taXNzaW5nKCl9YCxcbiAgICB9LFxuICAgIGluY29ycmVjdEljb246IHtcbiAgICAgIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICAgICAgZm9udFNpemU6ICdsYXJnZXInLFxuICAgICAgY29sb3I6IGNvbG9yLm1pc3NpbmcoKSxcbiAgICB9LFxuICAgIGNvcnJlY3RJY29uOiB7XG4gICAgICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbiAgICAgIGZvbnRTaXplOiAnbGFyZ2VyJyxcbiAgICAgIGNvbG9yOiBjb2xvci5jb3JyZWN0KCksXG4gICAgfSxcbiAgfTtcbn0pKFRva2VuKTtcbiJdfQ==
|