@pie-lib/text-select 1.30.0 → 1.32.0-mui-update.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -3
- package/lib/index.js +1 -12
- package/lib/index.js.map +1 -1
- package/lib/legend.js +87 -91
- package/lib/legend.js.map +1 -1
- package/lib/text-select.js +18 -51
- package/lib/text-select.js.map +1 -1
- package/lib/token-select/index.js +77 -129
- package/lib/token-select/index.js.map +1 -1
- package/lib/token-select/token.js +160 -189
- package/lib/token-select/token.js.map +1 -1
- package/lib/tokenizer/builder.js +23 -68
- package/lib/tokenizer/builder.js.map +1 -1
- package/lib/tokenizer/controls.js +50 -81
- package/lib/tokenizer/controls.js.map +1 -1
- package/lib/tokenizer/index.js +37 -84
- package/lib/tokenizer/index.js.map +1 -1
- package/lib/tokenizer/selection-utils.js +2 -12
- package/lib/tokenizer/selection-utils.js.map +1 -1
- package/lib/tokenizer/token-text.js +45 -78
- package/lib/tokenizer/token-text.js.map +1 -1
- package/lib/utils.js +8 -24
- package/lib/utils.js.map +1 -1
- package/package.json +13 -12
- package/src/legend.js +76 -67
- package/src/token-select/index.jsx +63 -66
- package/src/token-select/token.jsx +131 -122
- package/src/tokenizer/controls.jsx +40 -42
- package/src/tokenizer/index.jsx +17 -15
- package/src/tokenizer/token-text.jsx +12 -10
|
@@ -1,114 +1,82 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
-
|
|
7
5
|
Object.defineProperty(exports, "__esModule", {
|
|
8
6
|
value: true
|
|
9
7
|
});
|
|
10
8
|
exports["default"] = exports.TokenSelect = void 0;
|
|
11
|
-
|
|
12
9
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
13
|
-
|
|
14
10
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
15
|
-
|
|
16
11
|
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
12
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
23
|
-
|
|
24
13
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
25
|
-
|
|
14
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
26
15
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
27
|
-
|
|
28
16
|
var _react = _interopRequireDefault(require("react"));
|
|
29
|
-
|
|
30
17
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
31
|
-
|
|
32
18
|
var _token = _interopRequireWildcard(require("./token"));
|
|
33
|
-
|
|
34
|
-
var _styles = require("@material-ui/core/styles");
|
|
35
|
-
|
|
36
|
-
var _classnames = _interopRequireDefault(require("classnames"));
|
|
37
|
-
|
|
19
|
+
var _styles = require("@mui/material/styles");
|
|
38
20
|
var _clone = _interopRequireDefault(require("lodash/clone"));
|
|
39
|
-
|
|
40
21
|
var _debug = _interopRequireDefault(require("debug"));
|
|
41
|
-
|
|
42
22
|
var _styleUtils = require("@pie-lib/style-utils");
|
|
43
|
-
|
|
44
|
-
var _server = require("react-dom/server");
|
|
45
|
-
|
|
46
23
|
var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
|
|
47
|
-
|
|
48
|
-
function
|
|
49
|
-
|
|
50
|
-
function
|
|
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
|
-
|
|
24
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
25
|
+
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
|
|
26
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
27
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
28
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
60
29
|
var log = (0, _debug["default"])('@pie-lib:text-select:token-select');
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
30
|
+
var StyledTokenSelect = (0, _styles.styled)('div')(function () {
|
|
31
|
+
return _objectSpread(_objectSpread({
|
|
32
|
+
backgroundColor: 'none',
|
|
33
|
+
whiteSpace: 'pre'
|
|
34
|
+
}, (0, _styleUtils.noSelect)()), {}, {
|
|
35
|
+
'& p': {
|
|
36
|
+
whiteSpace: 'break-spaces',
|
|
37
|
+
margin: 0
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
var TokenSelect = exports.TokenSelect = /*#__PURE__*/function (_React$Component) {
|
|
67
42
|
function TokenSelect() {
|
|
68
43
|
var _this;
|
|
69
|
-
|
|
70
44
|
(0, _classCallCheck2["default"])(this, TokenSelect);
|
|
71
|
-
|
|
72
45
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
73
46
|
args[_key] = arguments[_key];
|
|
74
47
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "selectedCount", function () {
|
|
48
|
+
_this = _callSuper(this, TokenSelect, [].concat(args));
|
|
49
|
+
(0, _defineProperty2["default"])(_this, "selectedCount", function () {
|
|
78
50
|
return _this.props.tokens.filter(function (t) {
|
|
79
51
|
return t.selected;
|
|
80
52
|
}).length;
|
|
81
53
|
});
|
|
82
|
-
(0, _defineProperty2["default"])(
|
|
54
|
+
(0, _defineProperty2["default"])(_this, "canSelectMore", function (selectedCount) {
|
|
83
55
|
var maxNoOfSelections = _this.props.maxNoOfSelections;
|
|
84
|
-
|
|
85
|
-
if (maxNoOfSelections === 1) {
|
|
86
|
-
return true;
|
|
87
|
-
}
|
|
88
|
-
|
|
56
|
+
if (maxNoOfSelections === 1) return true;
|
|
89
57
|
log('[canSelectMore] maxNoOfSelections: ', maxNoOfSelections, 'selectedCount: ', selectedCount);
|
|
90
58
|
return maxNoOfSelections <= 0 || isFinite(maxNoOfSelections) && selectedCount < maxNoOfSelections;
|
|
91
59
|
});
|
|
92
|
-
(0, _defineProperty2["default"])(
|
|
60
|
+
(0, _defineProperty2["default"])(_this, "toggleToken", function (event) {
|
|
61
|
+
var _target$closest, _targetSpanWrapper$da;
|
|
93
62
|
var target = event.target;
|
|
94
63
|
var _this$props = _this.props,
|
|
95
|
-
|
|
96
|
-
|
|
64
|
+
tokens = _this$props.tokens,
|
|
65
|
+
animationsDisabled = _this$props.animationsDisabled;
|
|
97
66
|
var tokensCloned = (0, _clone["default"])(tokens);
|
|
98
|
-
var targetSpanWrapper = target.closest(".".concat(_token["default"].rootClassName));
|
|
99
|
-
var targetedTokenIndex = targetSpanWrapper
|
|
100
|
-
var t = targetedTokenIndex
|
|
101
|
-
// (missing means that it was evaluated as correct and not selected)
|
|
67
|
+
var targetSpanWrapper = (_target$closest = target.closest) === null || _target$closest === void 0 ? void 0 : _target$closest.call(target, ".".concat(_token["default"].rootClassName));
|
|
68
|
+
var targetedTokenIndex = targetSpanWrapper === null || targetSpanWrapper === void 0 || (_targetSpanWrapper$da = targetSpanWrapper.dataset) === null || _targetSpanWrapper$da === void 0 ? void 0 : _targetSpanWrapper$da.indexkey;
|
|
69
|
+
var t = targetedTokenIndex !== undefined ? tokensCloned[targetedTokenIndex] : undefined;
|
|
102
70
|
|
|
71
|
+
// don't toggle if in print mode, correctness is defined, or is missing
|
|
103
72
|
if (t && t.correct === undefined && !animationsDisabled && !t.isMissing) {
|
|
104
73
|
var _this$props2 = _this.props,
|
|
105
|
-
|
|
106
|
-
|
|
74
|
+
onChange = _this$props2.onChange,
|
|
75
|
+
maxNoOfSelections = _this$props2.maxNoOfSelections;
|
|
107
76
|
var selected = !t.selected;
|
|
108
|
-
|
|
109
77
|
if (maxNoOfSelections === 1 && _this.selectedCount() === 1) {
|
|
110
|
-
var selectedToken = (tokens || []).filter(function (
|
|
111
|
-
return
|
|
78
|
+
var selectedToken = (tokens || []).filter(function (tk) {
|
|
79
|
+
return tk.selected;
|
|
112
80
|
});
|
|
113
81
|
var updatedTokens = tokensCloned.map(function (token) {
|
|
114
82
|
if ((0, _isEqual["default"])(token, selectedToken[0])) {
|
|
@@ -116,16 +84,13 @@ var TokenSelect = /*#__PURE__*/function (_React$Component) {
|
|
|
116
84
|
selected: false
|
|
117
85
|
});
|
|
118
86
|
}
|
|
119
|
-
|
|
120
87
|
return _objectSpread(_objectSpread({}, token), {}, {
|
|
121
88
|
selectable: true
|
|
122
89
|
});
|
|
123
90
|
});
|
|
124
|
-
|
|
125
91
|
var update = _objectSpread(_objectSpread({}, t), {}, {
|
|
126
|
-
selected:
|
|
92
|
+
selected: selected
|
|
127
93
|
});
|
|
128
|
-
|
|
129
94
|
updatedTokens.splice(targetedTokenIndex, 1, update);
|
|
130
95
|
onChange(updatedTokens);
|
|
131
96
|
} else {
|
|
@@ -133,50 +98,53 @@ var TokenSelect = /*#__PURE__*/function (_React$Component) {
|
|
|
133
98
|
log('skip toggle max reached');
|
|
134
99
|
return;
|
|
135
100
|
}
|
|
136
|
-
|
|
137
101
|
var _update = _objectSpread(_objectSpread({}, t), {}, {
|
|
138
|
-
selected:
|
|
102
|
+
selected: selected
|
|
139
103
|
});
|
|
140
|
-
|
|
141
104
|
tokensCloned.splice(targetedTokenIndex, 1, _update);
|
|
142
105
|
onChange(tokensCloned);
|
|
143
106
|
}
|
|
144
107
|
}
|
|
145
108
|
});
|
|
146
|
-
|
|
109
|
+
/** Build a React tree instead of an HTML string so Emotion can inject CSS */
|
|
110
|
+
(0, _defineProperty2["default"])(_this, "generateTokensNodes", function () {
|
|
147
111
|
var _this$props3 = _this.props,
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
112
|
+
tokens = _this$props3.tokens,
|
|
113
|
+
disabled = _this$props3.disabled,
|
|
114
|
+
highlightChoices = _this$props3.highlightChoices,
|
|
115
|
+
animationsDisabled = _this$props3.animationsDisabled;
|
|
153
116
|
var selectedCount = _this.selectedCount();
|
|
154
|
-
|
|
155
117
|
var isLineBreak = function isLineBreak(text) {
|
|
156
118
|
return text === '\n';
|
|
157
119
|
};
|
|
158
|
-
|
|
159
120
|
var isNewParagraph = function isNewParagraph(text) {
|
|
160
121
|
return text === '\n\n';
|
|
161
122
|
};
|
|
162
|
-
|
|
163
|
-
var
|
|
123
|
+
var paragraphs = [];
|
|
124
|
+
var currentChildren = [];
|
|
125
|
+
var flushParagraph = function flushParagraph() {
|
|
126
|
+
// Always push a <p>, even if empty, to mirror previous behavior
|
|
127
|
+
paragraphs.push(/*#__PURE__*/_react["default"].createElement("p", {
|
|
128
|
+
key: "p-".concat(paragraphs.length)
|
|
129
|
+
}, currentChildren));
|
|
130
|
+
currentChildren = [];
|
|
131
|
+
};
|
|
132
|
+
(tokens || []).forEach(function (t, index) {
|
|
164
133
|
var selectable = t.selected || t.selectable && _this.canSelectMore(selectedCount);
|
|
165
|
-
|
|
166
134
|
var showCorrectAnswer = t.correct !== undefined && (t.selectable || t.selected);
|
|
167
|
-
var finalAcc = accumulator;
|
|
168
|
-
|
|
169
135
|
if (isNewParagraph(t.text)) {
|
|
170
|
-
|
|
136
|
+
flushParagraph();
|
|
137
|
+
return;
|
|
171
138
|
}
|
|
172
|
-
|
|
173
139
|
if (isLineBreak(t.text)) {
|
|
174
|
-
|
|
140
|
+
currentChildren.push(/*#__PURE__*/_react["default"].createElement("br", {
|
|
141
|
+
key: "br-".concat(index)
|
|
142
|
+
}));
|
|
143
|
+
return;
|
|
175
144
|
}
|
|
176
|
-
|
|
177
|
-
if (selectable && !disabled || showCorrectAnswer || t.selected || t.isMissing || animationsDisabled && t.predefined // if we are in print mode
|
|
145
|
+
if (selectable && !disabled || showCorrectAnswer || t.selected || t.isMissing || animationsDisabled && t.predefined // print mode
|
|
178
146
|
) {
|
|
179
|
-
|
|
147
|
+
currentChildren.push(/*#__PURE__*/_react["default"].createElement(_token["default"], (0, _extends2["default"])({
|
|
180
148
|
key: index,
|
|
181
149
|
disabled: disabled,
|
|
182
150
|
index: index
|
|
@@ -186,41 +154,35 @@ var TokenSelect = /*#__PURE__*/function (_React$Component) {
|
|
|
186
154
|
animationsDisabled: animationsDisabled
|
|
187
155
|
})));
|
|
188
156
|
} else {
|
|
189
|
-
|
|
157
|
+
// raw text node – React will escape as needed
|
|
158
|
+
currentChildren.push(/*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, {
|
|
159
|
+
key: index
|
|
160
|
+
}, t.text));
|
|
190
161
|
}
|
|
191
|
-
};
|
|
162
|
+
});
|
|
192
163
|
|
|
193
|
-
|
|
194
|
-
|
|
164
|
+
// flush last paragraph
|
|
165
|
+
flushParagraph();
|
|
166
|
+
return paragraphs;
|
|
195
167
|
});
|
|
196
168
|
return _this;
|
|
197
169
|
}
|
|
198
|
-
|
|
199
|
-
(0, _createClass2["default"])(TokenSelect, [{
|
|
170
|
+
(0, _inherits2["default"])(TokenSelect, _React$Component);
|
|
171
|
+
return (0, _createClass2["default"])(TokenSelect, [{
|
|
200
172
|
key: "render",
|
|
201
173
|
value: function render() {
|
|
202
|
-
var
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
var html = this.generateTokensInHtml();
|
|
207
|
-
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
208
|
-
className: className,
|
|
209
|
-
dangerouslySetInnerHTML: {
|
|
210
|
-
__html: html
|
|
211
|
-
},
|
|
174
|
+
var classNameProp = this.props.className;
|
|
175
|
+
var nodes = this.generateTokensNodes();
|
|
176
|
+
return /*#__PURE__*/_react["default"].createElement(StyledTokenSelect, {
|
|
177
|
+
className: classNameProp,
|
|
212
178
|
onClick: this.toggleToken
|
|
213
|
-
});
|
|
179
|
+
}, nodes);
|
|
214
180
|
}
|
|
215
181
|
}]);
|
|
216
|
-
return TokenSelect;
|
|
217
182
|
}(_react["default"].Component);
|
|
218
|
-
|
|
219
|
-
exports.TokenSelect = TokenSelect;
|
|
220
183
|
(0, _defineProperty2["default"])(TokenSelect, "propTypes", {
|
|
221
184
|
tokens: _propTypes["default"].arrayOf(_propTypes["default"].shape(_token.TokenTypes)).isRequired,
|
|
222
185
|
className: _propTypes["default"].string,
|
|
223
|
-
classes: _propTypes["default"].object.isRequired,
|
|
224
186
|
onChange: _propTypes["default"].func.isRequired,
|
|
225
187
|
disabled: _propTypes["default"].bool,
|
|
226
188
|
highlightChoices: _propTypes["default"].bool,
|
|
@@ -232,19 +194,5 @@ exports.TokenSelect = TokenSelect;
|
|
|
232
194
|
maxNoOfSelections: 0,
|
|
233
195
|
tokens: []
|
|
234
196
|
});
|
|
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;
|
|
197
|
+
var _default = exports["default"] = TokenSelect;
|
|
250
198
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/token-select/index.jsx"],"names":["log","TokenSelect","props","tokens","filter","t","selected","length","selectedCount","maxNoOfSelections","isFinite","event","target","animationsDisabled","tokensCloned","targetSpanWrapper","closest","Token","rootClassName","targetedTokenIndex","dataset","indexkey","correct","undefined","isMissing","onChange","selectedToken","updatedTokens","map","token","selectable","update","splice","disabled","highlightChoices","isLineBreak","text","isNewParagraph","reducer","accumulator","index","canSelectMore","showCorrectAnswer","finalAcc","predefined","reduceResult","reduce","classes","classNameProp","className","tokenSelect","html","generateTokensInHtml","__html","toggleToken","React","Component","PropTypes","arrayOf","shape","TokenTypes","isRequired","string","object","func","bool","number","backgroundColor","whiteSpace"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport Token, { TokenTypes } from './token';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport clone from 'lodash/clone';\nimport debug from 'debug';\nimport { noSelect } from '@pie-lib/style-utils';\nimport { renderToString } from 'react-dom/server';\nimport isEqual from 'lodash/isEqual';\n\nconst log = debug('@pie-lib:text-select:token-select');\n\nexport class TokenSelect extends React.Component {\n static propTypes = {\n tokens: PropTypes.arrayOf(PropTypes.shape(TokenTypes)).isRequired,\n className: PropTypes.string,\n classes: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n disabled: PropTypes.bool,\n highlightChoices: PropTypes.bool,\n animationsDisabled: PropTypes.bool,\n maxNoOfSelections: PropTypes.number,\n };\n\n static defaultProps = {\n highlightChoices: false,\n maxNoOfSelections: 0,\n tokens: [],\n };\n\n selectedCount = () => this.props.tokens.filter((t) => t.selected).length;\n\n canSelectMore = (selectedCount) => {\n const { maxNoOfSelections } = this.props;\n\n if (maxNoOfSelections === 1) {\n return true;\n }\n\n log('[canSelectMore] maxNoOfSelections: ', maxNoOfSelections, 'selectedCount: ', selectedCount);\n return maxNoOfSelections <= 0 || (isFinite(maxNoOfSelections) && selectedCount < maxNoOfSelections);\n };\n\n /**\n @function\n @param { object } event\n\n @description\n each token is wrapped into a span that has Token.rootClassName class and indexkey attribute (represents the index of the token)\n tokens are updated with the targeted token having the correct value set for 'selected' property\n */\n toggleToken = (event) => {\n const { target } = event;\n const { tokens, animationsDisabled } = this.props;\n const tokensCloned = clone(tokens);\n const targetSpanWrapper = target.closest(`.${Token.rootClassName}`);\n const targetedTokenIndex = targetSpanWrapper && targetSpanWrapper.dataset && targetSpanWrapper.dataset.indexkey;\n const t = targetedTokenIndex && tokensCloned[targetedTokenIndex];\n\n // don't toggle if we are in print mode, token correctness is defined or if it's missing\n // (missing means that it was evaluated as correct and not selected)\n if (t && t.correct === undefined && !animationsDisabled && !t.isMissing) {\n const { onChange, maxNoOfSelections } = this.props;\n const selected = !t.selected;\n\n if (maxNoOfSelections === 1 && this.selectedCount() === 1) {\n const selectedToken = (tokens || []).filter((t) => t.selected);\n\n const updatedTokens = tokensCloned.map((token) => {\n if (isEqual(token, selectedToken[0])) {\n return { ...token, selected: false };\n }\n\n return { ...token, selectable: true };\n });\n\n const update = { ...t, selected: !t.selected };\n\n updatedTokens.splice(targetedTokenIndex, 1, update);\n onChange(updatedTokens);\n } else {\n if (selected && maxNoOfSelections > 0 && this.selectedCount() >= maxNoOfSelections) {\n log('skip toggle max reached');\n return;\n }\n\n const update = { ...t, selected: !t.selected };\n\n tokensCloned.splice(targetedTokenIndex, 1, update);\n onChange(tokensCloned);\n }\n }\n };\n\n generateTokensInHtml = () => {\n const { tokens, disabled, highlightChoices, animationsDisabled } = this.props;\n const selectedCount = this.selectedCount();\n const isLineBreak = (text) => text === '\\n';\n const isNewParagraph = (text) => text === '\\n\\n';\n\n const reducer = (accumulator, t, index) => {\n const selectable = t.selected || (t.selectable && this.canSelectMore(selectedCount));\n const showCorrectAnswer = t.correct !== undefined && (t.selectable || t.selected);\n let finalAcc = accumulator;\n\n if (isNewParagraph(t.text)) {\n return finalAcc + '</p><p>';\n }\n\n if (isLineBreak(t.text)) {\n return finalAcc + '<br>';\n }\n\n if (\n (selectable && !disabled) ||\n showCorrectAnswer ||\n t.selected ||\n t.isMissing ||\n (animationsDisabled && t.predefined) // if we are in print mode\n ) {\n return (\n finalAcc +\n renderToString(\n <Token\n key={index}\n disabled={disabled}\n index={index}\n {...t}\n selectable={selectable}\n highlight={highlightChoices}\n animationsDisabled={animationsDisabled}\n />,\n )\n );\n } else {\n return accumulator + t.text;\n }\n };\n\n const reduceResult = (tokens || []).reduce(reducer, '<p>');\n\n return reduceResult + '</p>';\n };\n\n render() {\n const { classes, className: classNameProp } = this.props;\n const className = classNames(classes.tokenSelect, classNameProp);\n const html = this.generateTokensInHtml();\n\n return <div className={className} dangerouslySetInnerHTML={{ __html: html }} onClick={this.toggleToken} />;\n }\n}\n\nexport default withStyles(() => ({\n tokenSelect: {\n backgroundColor: 'none',\n whiteSpace: 'pre',\n ...noSelect(),\n '& p': {\n whiteSpace: 'break-spaces',\n },\n },\n}))(TokenSelect);\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_propTypes","_token","_interopRequireWildcard","_styles","_clone","_debug","_styleUtils","_isEqual","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","_typeof","has","get","set","_t","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","Reflect","construct","constructor","apply","Boolean","prototype","valueOf","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","log","debug","StyledTokenSelect","styled","backgroundColor","whiteSpace","noSelect","margin","TokenSelect","exports","_React$Component","_this","_classCallCheck2","_len","args","Array","_key","concat","props","tokens","selected","selectedCount","maxNoOfSelections","isFinite","event","_target$closest","_targetSpanWrapper$da","target","_this$props","animationsDisabled","tokensCloned","clone","targetSpanWrapper","closest","Token","rootClassName","targetedTokenIndex","dataset","indexkey","undefined","correct","isMissing","_this$props2","onChange","selectedToken","tk","updatedTokens","map","token","isEqual","selectable","update","splice","_this$props3","disabled","highlightChoices","isLineBreak","text","isNewParagraph","paragraphs","currentChildren","flushParagraph","createElement","key","index","canSelectMore","showCorrectAnswer","predefined","_extends2","highlight","Fragment","_inherits2","_createClass2","value","render","classNameProp","className","nodes","generateTokensNodes","onClick","toggleToken","React","Component","PropTypes","arrayOf","shape","TokenTypes","isRequired","string","func","bool","number","_default"],"sources":["../../src/token-select/index.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport Token, { TokenTypes } from './token';\nimport { styled } from '@mui/material/styles';\nimport clone from 'lodash/clone';\nimport debug from 'debug';\nimport { noSelect } from '@pie-lib/style-utils';\nimport isEqual from 'lodash/isEqual';\n\nconst log = debug('@pie-lib:text-select:token-select');\n\nconst StyledTokenSelect = styled('div')(() => ({\n backgroundColor: 'none',\n whiteSpace: 'pre',\n ...noSelect(),\n '& p': {\n whiteSpace: 'break-spaces',\n margin: 0,\n },\n}));\n\nexport class TokenSelect extends React.Component {\n static propTypes = {\n tokens: PropTypes.arrayOf(PropTypes.shape(TokenTypes)).isRequired,\n className: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n disabled: PropTypes.bool,\n highlightChoices: PropTypes.bool,\n animationsDisabled: PropTypes.bool,\n maxNoOfSelections: PropTypes.number,\n };\n\n static defaultProps = {\n highlightChoices: false,\n maxNoOfSelections: 0,\n tokens: [],\n };\n\n selectedCount = () => this.props.tokens.filter((t) => t.selected).length;\n\n canSelectMore = (selectedCount) => {\n const { maxNoOfSelections } = this.props;\n\n if (maxNoOfSelections === 1) return true;\n\n log('[canSelectMore] maxNoOfSelections: ', maxNoOfSelections, 'selectedCount: ', selectedCount);\n return maxNoOfSelections <= 0 || (isFinite(maxNoOfSelections) && selectedCount < maxNoOfSelections);\n };\n\n toggleToken = (event) => {\n const { target } = event;\n const { tokens, animationsDisabled } = this.props;\n const tokensCloned = clone(tokens);\n\n const targetSpanWrapper = target.closest?.(`.${Token.rootClassName}`);\n const targetedTokenIndex = targetSpanWrapper?.dataset?.indexkey;\n const t = targetedTokenIndex !== undefined ? tokensCloned[targetedTokenIndex] : undefined;\n\n // don't toggle if in print mode, correctness is defined, or is missing\n if (t && t.correct === undefined && !animationsDisabled && !t.isMissing) {\n const { onChange, maxNoOfSelections } = this.props;\n const selected = !t.selected;\n\n if (maxNoOfSelections === 1 && this.selectedCount() === 1) {\n const selectedToken = (tokens || []).filter((tk) => tk.selected);\n const updatedTokens = tokensCloned.map((token) => {\n if (isEqual(token, selectedToken[0])) {\n return { ...token, selected: false };\n }\n return { ...token, selectable: true };\n });\n\n const update = { ...t, selected };\n updatedTokens.splice(targetedTokenIndex, 1, update);\n onChange(updatedTokens);\n } else {\n if (selected && maxNoOfSelections > 0 && this.selectedCount() >= maxNoOfSelections) {\n log('skip toggle max reached');\n return;\n }\n const update = { ...t, selected };\n tokensCloned.splice(targetedTokenIndex, 1, update);\n onChange(tokensCloned);\n }\n }\n };\n\n /** Build a React tree instead of an HTML string so Emotion can inject CSS */\n generateTokensNodes = () => {\n const { tokens, disabled, highlightChoices, animationsDisabled } = this.props;\n const selectedCount = this.selectedCount();\n\n const isLineBreak = (text) => text === '\\n';\n const isNewParagraph = (text) => text === '\\n\\n';\n\n const paragraphs = [];\n let currentChildren = [];\n\n const flushParagraph = () => {\n // Always push a <p>, even if empty, to mirror previous behavior\n paragraphs.push(<p key={`p-${paragraphs.length}`}>{currentChildren}</p>);\n currentChildren = [];\n };\n\n (tokens || []).forEach((t, index) => {\n const selectable = t.selected || (t.selectable && this.canSelectMore(selectedCount));\n const showCorrectAnswer = t.correct !== undefined && (t.selectable || t.selected);\n\n if (isNewParagraph(t.text)) {\n flushParagraph();\n return;\n }\n\n if (isLineBreak(t.text)) {\n currentChildren.push(<br key={`br-${index}`} />);\n return;\n }\n\n if (\n (selectable && !disabled) ||\n showCorrectAnswer ||\n t.selected ||\n t.isMissing ||\n (animationsDisabled && t.predefined) // print mode\n ) {\n currentChildren.push(\n <Token\n key={index}\n disabled={disabled}\n index={index}\n {...t}\n selectable={selectable}\n highlight={highlightChoices}\n animationsDisabled={animationsDisabled}\n />\n );\n } else {\n // raw text node – React will escape as needed\n currentChildren.push(<React.Fragment key={index}>{t.text}</React.Fragment>);\n }\n });\n\n // flush last paragraph\n flushParagraph();\n\n return paragraphs;\n };\n\n render() {\n const { className: classNameProp } = this.props;\n const nodes = this.generateTokensNodes();\n\n return (\n <StyledTokenSelect className={classNameProp} onClick={this.toggleToken}>\n {nodes}\n </StyledTokenSelect>\n );\n }\n}\n\nexport default TokenSelect;"],"mappings":";;;;;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,MAAA,GAAAC,uBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,MAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,MAAA,GAAAP,sBAAA,CAAAC,OAAA;AACA,IAAAO,WAAA,GAAAP,OAAA;AACA,IAAAQ,QAAA,GAAAT,sBAAA,CAAAC,OAAA;AAAqC,SAAAG,wBAAAM,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAR,uBAAA,YAAAA,wBAAAM,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,mBAAAT,CAAA,iBAAAA,CAAA,gBAAAU,OAAA,CAAAV,CAAA,0BAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,cAAAM,EAAA,IAAAd,CAAA,gBAAAc,EAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,EAAA,OAAAP,CAAA,IAAAD,CAAA,GAAAW,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAnB,CAAA,EAAAc,EAAA,OAAAP,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAM,EAAA,EAAAP,CAAA,IAAAC,CAAA,CAAAM,EAAA,IAAAd,CAAA,CAAAc,EAAA,WAAAN,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAAA,SAAAmB,WAAAnB,CAAA,EAAAK,CAAA,EAAAN,CAAA,WAAAM,CAAA,OAAAe,gBAAA,aAAAf,CAAA,OAAAgB,2BAAA,aAAArB,CAAA,EAAAsB,yBAAA,KAAAC,OAAA,CAAAC,SAAA,CAAAnB,CAAA,EAAAN,CAAA,YAAAqB,gBAAA,aAAApB,CAAA,EAAAyB,WAAA,IAAApB,CAAA,CAAAqB,KAAA,CAAA1B,CAAA,EAAAD,CAAA;AAAA,SAAAuB,0BAAA,cAAAtB,CAAA,IAAA2B,OAAA,CAAAC,SAAA,CAAAC,OAAA,CAAAd,IAAA,CAAAQ,OAAA,CAAAC,SAAA,CAAAG,OAAA,iCAAA3B,CAAA,aAAAsB,yBAAA,YAAAA,0BAAA,aAAAtB,CAAA;AAAA,SAAA8B,QAAA/B,CAAA,EAAAG,CAAA,QAAAF,CAAA,GAAAgB,MAAA,CAAAe,IAAA,CAAAhC,CAAA,OAAAiB,MAAA,CAAAgB,qBAAA,QAAA3B,CAAA,GAAAW,MAAA,CAAAgB,qBAAA,CAAAjC,CAAA,GAAAG,CAAA,KAAAG,CAAA,GAAAA,CAAA,CAAA4B,MAAA,WAAA/B,CAAA,WAAAc,MAAA,CAAAE,wBAAA,CAAAnB,CAAA,EAAAG,CAAA,EAAAgC,UAAA,OAAAlC,CAAA,CAAAmC,IAAA,CAAAT,KAAA,CAAA1B,CAAA,EAAAK,CAAA,YAAAL,CAAA;AAAA,SAAAoC,cAAArC,CAAA,aAAAG,CAAA,MAAAA,CAAA,GAAAmC,SAAA,CAAAC,MAAA,EAAApC,CAAA,UAAAF,CAAA,WAAAqC,SAAA,CAAAnC,CAAA,IAAAmC,SAAA,CAAAnC,CAAA,QAAAA,CAAA,OAAA4B,OAAA,CAAAd,MAAA,CAAAhB,CAAA,OAAAuC,OAAA,WAAArC,CAAA,QAAAsC,gBAAA,aAAAzC,CAAA,EAAAG,CAAA,EAAAF,CAAA,CAAAE,CAAA,SAAAc,MAAA,CAAAyB,yBAAA,GAAAzB,MAAA,CAAA0B,gBAAA,CAAA3C,CAAA,EAAAiB,MAAA,CAAAyB,yBAAA,CAAAzC,CAAA,KAAA8B,OAAA,CAAAd,MAAA,CAAAhB,CAAA,GAAAuC,OAAA,WAAArC,CAAA,IAAAc,MAAA,CAAAC,cAAA,CAAAlB,CAAA,EAAAG,CAAA,EAAAc,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAE,CAAA,iBAAAH,CAAA;AAErC,IAAM4C,GAAG,GAAG,IAAAC,iBAAK,EAAC,mCAAmC,CAAC;AAEtD,IAAMC,iBAAiB,GAAG,IAAAC,cAAM,EAAC,KAAK,CAAC,CAAC;EAAA,OAAAV,aAAA,CAAAA,aAAA;IACtCW,eAAe,EAAE,MAAM;IACvBC,UAAU,EAAE;EAAK,GACd,IAAAC,oBAAQ,EAAC,CAAC;IACb,KAAK,EAAE;MACLD,UAAU,EAAE,cAAc;MAC1BE,MAAM,EAAE;IACV;EAAC;AAAA,CACD,CAAC;AAAC,IAESC,WAAW,GAAAC,OAAA,CAAAD,WAAA,0BAAAE,gBAAA;EAAA,SAAAF,YAAA;IAAA,IAAAG,KAAA;IAAA,IAAAC,gBAAA,mBAAAJ,WAAA;IAAA,SAAAK,IAAA,GAAAnB,SAAA,CAAAC,MAAA,EAAAmB,IAAA,OAAAC,KAAA,CAAAF,IAAA,GAAAG,IAAA,MAAAA,IAAA,GAAAH,IAAA,EAAAG,IAAA;MAAAF,IAAA,CAAAE,IAAA,IAAAtB,SAAA,CAAAsB,IAAA;IAAA;IAAAL,KAAA,GAAAnC,UAAA,OAAAgC,WAAA,KAAAS,MAAA,CAAAH,IAAA;IAAA,IAAAjB,gBAAA,aAAAc,KAAA,mBAiBN;MAAA,OAAMA,KAAA,CAAKO,KAAK,CAACC,MAAM,CAAC7B,MAAM,CAAC,UAACjC,CAAC;QAAA,OAAKA,CAAC,CAAC+D,QAAQ;MAAA,EAAC,CAACzB,MAAM;IAAA;IAAA,IAAAE,gBAAA,aAAAc,KAAA,mBAExD,UAACU,aAAa,EAAK;MACjC,IAAQC,iBAAiB,GAAKX,KAAA,CAAKO,KAAK,CAAhCI,iBAAiB;MAEzB,IAAIA,iBAAiB,KAAK,CAAC,EAAE,OAAO,IAAI;MAExCtB,GAAG,CAAC,qCAAqC,EAAEsB,iBAAiB,EAAE,iBAAiB,EAAED,aAAa,CAAC;MAC/F,OAAOC,iBAAiB,IAAI,CAAC,IAAKC,QAAQ,CAACD,iBAAiB,CAAC,IAAID,aAAa,GAAGC,iBAAkB;IACrG,CAAC;IAAA,IAAAzB,gBAAA,aAAAc,KAAA,iBAEa,UAACa,KAAK,EAAK;MAAA,IAAAC,eAAA,EAAAC,qBAAA;MACvB,IAAQC,MAAM,GAAKH,KAAK,CAAhBG,MAAM;MACd,IAAAC,WAAA,GAAuCjB,KAAA,CAAKO,KAAK;QAAzCC,MAAM,GAAAS,WAAA,CAANT,MAAM;QAAEU,kBAAkB,GAAAD,WAAA,CAAlBC,kBAAkB;MAClC,IAAMC,YAAY,GAAG,IAAAC,iBAAK,EAACZ,MAAM,CAAC;MAElC,IAAMa,iBAAiB,IAAAP,eAAA,GAAGE,MAAM,CAACM,OAAO,cAAAR,eAAA,uBAAdA,eAAA,CAAArD,IAAA,CAAAuD,MAAM,MAAAV,MAAA,CAAeiB,iBAAK,CAACC,aAAa,CAAE,CAAC;MACrE,IAAMC,kBAAkB,GAAGJ,iBAAiB,aAAjBA,iBAAiB,gBAAAN,qBAAA,GAAjBM,iBAAiB,CAAEK,OAAO,cAAAX,qBAAA,uBAA1BA,qBAAA,CAA4BY,QAAQ;MAC/D,IAAMjF,CAAC,GAAG+E,kBAAkB,KAAKG,SAAS,GAAGT,YAAY,CAACM,kBAAkB,CAAC,GAAGG,SAAS;;MAEzF;MACA,IAAIlF,CAAC,IAAIA,CAAC,CAACmF,OAAO,KAAKD,SAAS,IAAI,CAACV,kBAAkB,IAAI,CAACxE,CAAC,CAACoF,SAAS,EAAE;QACvE,IAAAC,YAAA,GAAwC/B,KAAA,CAAKO,KAAK;UAA1CyB,QAAQ,GAAAD,YAAA,CAARC,QAAQ;UAAErB,iBAAiB,GAAAoB,YAAA,CAAjBpB,iBAAiB;QACnC,IAAMF,QAAQ,GAAG,CAAC/D,CAAC,CAAC+D,QAAQ;QAE5B,IAAIE,iBAAiB,KAAK,CAAC,IAAIX,KAAA,CAAKU,aAAa,CAAC,CAAC,KAAK,CAAC,EAAE;UACzD,IAAMuB,aAAa,GAAG,CAACzB,MAAM,IAAI,EAAE,EAAE7B,MAAM,CAAC,UAACuD,EAAE;YAAA,OAAKA,EAAE,CAACzB,QAAQ;UAAA,EAAC;UAChE,IAAM0B,aAAa,GAAGhB,YAAY,CAACiB,GAAG,CAAC,UAACC,KAAK,EAAK;YAChD,IAAI,IAAAC,mBAAO,EAACD,KAAK,EAAEJ,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE;cACpC,OAAAnD,aAAA,CAAAA,aAAA,KAAYuD,KAAK;gBAAE5B,QAAQ,EAAE;cAAK;YACpC;YACA,OAAA3B,aAAA,CAAAA,aAAA,KAAYuD,KAAK;cAAEE,UAAU,EAAE;YAAI;UACrC,CAAC,CAAC;UAEF,IAAMC,MAAM,GAAA1D,aAAA,CAAAA,aAAA,KAAQpC,CAAC;YAAE+D,QAAQ,EAARA;UAAQ,EAAE;UACjC0B,aAAa,CAACM,MAAM,CAAChB,kBAAkB,EAAE,CAAC,EAAEe,MAAM,CAAC;UACnDR,QAAQ,CAACG,aAAa,CAAC;QACzB,CAAC,MAAM;UACL,IAAI1B,QAAQ,IAAIE,iBAAiB,GAAG,CAAC,IAAIX,KAAA,CAAKU,aAAa,CAAC,CAAC,IAAIC,iBAAiB,EAAE;YAClFtB,GAAG,CAAC,yBAAyB,CAAC;YAC9B;UACF;UACA,IAAMmD,OAAM,GAAA1D,aAAA,CAAAA,aAAA,KAAQpC,CAAC;YAAE+D,QAAQ,EAARA;UAAQ,EAAE;UACjCU,YAAY,CAACsB,MAAM,CAAChB,kBAAkB,EAAE,CAAC,EAAEe,OAAM,CAAC;UAClDR,QAAQ,CAACb,YAAY,CAAC;QACxB;MACF;IACF,CAAC;IAED;IAAA,IAAAjC,gBAAA,aAAAc,KAAA,yBACsB,YAAM;MAC1B,IAAA0C,YAAA,GAAmE1C,KAAA,CAAKO,KAAK;QAArEC,MAAM,GAAAkC,YAAA,CAANlC,MAAM;QAAEmC,QAAQ,GAAAD,YAAA,CAARC,QAAQ;QAAEC,gBAAgB,GAAAF,YAAA,CAAhBE,gBAAgB;QAAE1B,kBAAkB,GAAAwB,YAAA,CAAlBxB,kBAAkB;MAC9D,IAAMR,aAAa,GAAGV,KAAA,CAAKU,aAAa,CAAC,CAAC;MAE1C,IAAMmC,WAAW,GAAG,SAAdA,WAAWA,CAAIC,IAAI;QAAA,OAAKA,IAAI,KAAK,IAAI;MAAA;MAC3C,IAAMC,cAAc,GAAG,SAAjBA,cAAcA,CAAID,IAAI;QAAA,OAAKA,IAAI,KAAK,MAAM;MAAA;MAEhD,IAAME,UAAU,GAAG,EAAE;MACrB,IAAIC,eAAe,GAAG,EAAE;MAExB,IAAMC,cAAc,GAAG,SAAjBA,cAAcA,CAAA,EAAS;QAC3B;QACAF,UAAU,CAACnE,IAAI,cAAC/C,MAAA,YAAAqH,aAAA;UAAGC,GAAG,OAAA9C,MAAA,CAAO0C,UAAU,CAAChE,MAAM;QAAG,GAAEiE,eAAmB,CAAC,CAAC;QACxEA,eAAe,GAAG,EAAE;MACtB,CAAC;MAED,CAACzC,MAAM,IAAI,EAAE,EAAEvB,OAAO,CAAC,UAACvC,CAAC,EAAE2G,KAAK,EAAK;QACnC,IAAMd,UAAU,GAAG7F,CAAC,CAAC+D,QAAQ,IAAK/D,CAAC,CAAC6F,UAAU,IAAIvC,KAAA,CAAKsD,aAAa,CAAC5C,aAAa,CAAE;QACpF,IAAM6C,iBAAiB,GAAG7G,CAAC,CAACmF,OAAO,KAAKD,SAAS,KAAKlF,CAAC,CAAC6F,UAAU,IAAI7F,CAAC,CAAC+D,QAAQ,CAAC;QAEjF,IAAIsC,cAAc,CAACrG,CAAC,CAACoG,IAAI,CAAC,EAAE;UAC1BI,cAAc,CAAC,CAAC;UAChB;QACF;QAEA,IAAIL,WAAW,CAACnG,CAAC,CAACoG,IAAI,CAAC,EAAE;UACvBG,eAAe,CAACpE,IAAI,cAAC/C,MAAA,YAAAqH,aAAA;YAAIC,GAAG,QAAA9C,MAAA,CAAQ+C,KAAK;UAAG,CAAE,CAAC,CAAC;UAChD;QACF;QAEA,IACGd,UAAU,IAAI,CAACI,QAAQ,IACxBY,iBAAiB,IACjB7G,CAAC,CAAC+D,QAAQ,IACV/D,CAAC,CAACoF,SAAS,IACVZ,kBAAkB,IAAIxE,CAAC,CAAC8G,UAAW,CAAC;QAAA,EACrC;UACAP,eAAe,CAACpE,IAAI,cAClB/C,MAAA,YAAAqH,aAAA,CAACjH,MAAA,WAAK,MAAAuH,SAAA;YACJL,GAAG,EAAEC,KAAM;YACXV,QAAQ,EAAEA,QAAS;YACnBU,KAAK,EAAEA;UAAM,GACT3G,CAAC;YACL6F,UAAU,EAAEA,UAAW;YACvBmB,SAAS,EAAEd,gBAAiB;YAC5B1B,kBAAkB,EAAEA;UAAmB,EACxC,CACH,CAAC;QACH,CAAC,MAAM;UACL;UACA+B,eAAe,CAACpE,IAAI,cAAC/C,MAAA,YAAAqH,aAAA,CAACrH,MAAA,WAAK,CAAC6H,QAAQ;YAACP,GAAG,EAAEC;UAAM,GAAE3G,CAAC,CAACoG,IAAqB,CAAC,CAAC;QAC7E;MACF,CAAC,CAAC;;MAEF;MACAI,cAAc,CAAC,CAAC;MAEhB,OAAOF,UAAU;IACnB,CAAC;IAAA,OAAAhD,KAAA;EAAA;EAAA,IAAA4D,UAAA,aAAA/D,WAAA,EAAAE,gBAAA;EAAA,WAAA8D,aAAA,aAAAhE,WAAA;IAAAuD,GAAA;IAAAU,KAAA,EAED,SAAAC,MAAMA,CAAA,EAAG;MACP,IAAmBC,aAAa,GAAK,IAAI,CAACzD,KAAK,CAAvC0D,SAAS;MACjB,IAAMC,KAAK,GAAG,IAAI,CAACC,mBAAmB,CAAC,CAAC;MAExC,oBACErI,MAAA,YAAAqH,aAAA,CAAC5D,iBAAiB;QAAC0E,SAAS,EAAED,aAAc;QAACI,OAAO,EAAE,IAAI,CAACC;MAAY,GACpEH,KACgB,CAAC;IAExB;EAAC;AAAA,EAxI8BI,iBAAK,CAACC,SAAS;AAAA,IAAArF,gBAAA,aAAnCW,WAAW,eACH;EACjBW,MAAM,EAAEgE,qBAAS,CAACC,OAAO,CAACD,qBAAS,CAACE,KAAK,CAACC,iBAAU,CAAC,CAAC,CAACC,UAAU;EACjEX,SAAS,EAAEO,qBAAS,CAACK,MAAM;EAC3B7C,QAAQ,EAAEwC,qBAAS,CAACM,IAAI,CAACF,UAAU;EACnCjC,QAAQ,EAAE6B,qBAAS,CAACO,IAAI;EACxBnC,gBAAgB,EAAE4B,qBAAS,CAACO,IAAI;EAChC7D,kBAAkB,EAAEsD,qBAAS,CAACO,IAAI;EAClCpE,iBAAiB,EAAE6D,qBAAS,CAACQ;AAC/B,CAAC;AAAA,IAAA9F,gBAAA,aATUW,WAAW,kBAWA;EACpB+C,gBAAgB,EAAE,KAAK;EACvBjC,iBAAiB,EAAE,CAAC;EACpBH,MAAM,EAAE;AACV,CAAC;AAAA,IAAAyE,QAAA,GAAAnF,OAAA,cA4HYD,WAAW","ignoreList":[]}
|