@pie-lib/text-select 1.32.2 → 1.32.3-next.155

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 (43) hide show
  1. package/CHANGELOG.md +7 -78
  2. package/esm/package.json +3 -0
  3. package/lib/index.js +1 -12
  4. package/lib/index.js.map +1 -1
  5. package/lib/legend.js +87 -94
  6. package/lib/legend.js.map +1 -1
  7. package/lib/text-select.js +18 -51
  8. package/lib/text-select.js.map +1 -1
  9. package/lib/token-select/index.js +85 -128
  10. package/lib/token-select/index.js.map +1 -1
  11. package/lib/token-select/token.js +152 -192
  12. package/lib/token-select/token.js.map +1 -1
  13. package/lib/tokenizer/builder.js +23 -68
  14. package/lib/tokenizer/builder.js.map +1 -1
  15. package/lib/tokenizer/controls.js +50 -81
  16. package/lib/tokenizer/controls.js.map +1 -1
  17. package/lib/tokenizer/index.js +32 -88
  18. package/lib/tokenizer/index.js.map +1 -1
  19. package/lib/tokenizer/selection-utils.js +2 -12
  20. package/lib/tokenizer/selection-utils.js.map +1 -1
  21. package/lib/tokenizer/token-text.js +45 -78
  22. package/lib/tokenizer/token-text.js.map +1 -1
  23. package/lib/utils.js +8 -24
  24. package/lib/utils.js.map +1 -1
  25. package/package.json +23 -16
  26. package/src/__tests__/text-select.test.jsx +33 -23
  27. package/src/legend.js +76 -70
  28. package/src/token-select/__tests__/index.test.jsx +110 -242
  29. package/src/token-select/__tests__/token.test.jsx +21 -24
  30. package/src/token-select/index.jsx +73 -66
  31. package/src/token-select/token.jsx +126 -124
  32. package/src/tokenizer/__tests__/controls.test.jsx +20 -18
  33. package/src/tokenizer/__tests__/index.test.jsx +27 -120
  34. package/src/tokenizer/__tests__/token-text.test.jsx +23 -117
  35. package/src/tokenizer/controls.jsx +40 -42
  36. package/src/tokenizer/index.jsx +15 -18
  37. package/src/tokenizer/token-text.jsx +12 -10
  38. package/src/__tests__/__snapshots__/text-select.test.jsx.snap +0 -21
  39. package/src/token-select/__tests__/__snapshots__/index.test.jsx.snap +0 -49
  40. package/src/token-select/__tests__/__snapshots__/token.test.jsx.snap +0 -27
  41. package/src/tokenizer/__tests__/__snapshots__/controls.test.jsx.snap +0 -59
  42. package/src/tokenizer/__tests__/__snapshots__/index.test.jsx.snap +0 -31
  43. package/src/tokenizer/__tests__/__snapshots__/token-text.test.jsx.snap +0 -17
@@ -1,114 +1,90 @@
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 _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
-
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');
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
+ });
61
41
 
62
- var TokenSelect = /*#__PURE__*/function (_React$Component) {
63
- (0, _inherits2["default"])(TokenSelect, _React$Component);
64
-
65
- var _super = _createSuper(TokenSelect);
66
-
42
+ // strip HTML tags for plain text rendering
43
+ var stripHtmlTags = function stripHtmlTags(text) {
44
+ if (!text) {
45
+ return text;
46
+ }
47
+ return text.replace(/<[^>]+>/g, '');
48
+ };
49
+ var TokenSelect = exports.TokenSelect = /*#__PURE__*/function (_React$Component) {
67
50
  function TokenSelect() {
68
51
  var _this;
69
-
70
52
  (0, _classCallCheck2["default"])(this, TokenSelect);
71
-
72
53
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
73
54
  args[_key] = arguments[_key];
74
55
  }
75
-
76
- _this = _super.call.apply(_super, [this].concat(args));
77
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "selectedCount", function () {
56
+ _this = _callSuper(this, TokenSelect, [].concat(args));
57
+ (0, _defineProperty2["default"])(_this, "selectedCount", function () {
78
58
  return _this.props.tokens.filter(function (t) {
79
59
  return t.selected;
80
60
  }).length;
81
61
  });
82
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "canSelectMore", function (selectedCount) {
62
+ (0, _defineProperty2["default"])(_this, "canSelectMore", function (selectedCount) {
83
63
  var maxNoOfSelections = _this.props.maxNoOfSelections;
84
-
85
- if (maxNoOfSelections === 1) {
86
- return true;
87
- }
88
-
64
+ if (maxNoOfSelections === 1) return true;
89
65
  log('[canSelectMore] maxNoOfSelections: ', maxNoOfSelections, 'selectedCount: ', selectedCount);
90
66
  return maxNoOfSelections <= 0 || isFinite(maxNoOfSelections) && selectedCount < maxNoOfSelections;
91
67
  });
92
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "toggleToken", function (event) {
68
+ (0, _defineProperty2["default"])(_this, "toggleToken", function (event) {
69
+ var _target$closest, _targetSpanWrapper$da;
93
70
  var target = event.target;
94
71
  var _this$props = _this.props,
95
- tokens = _this$props.tokens,
96
- animationsDisabled = _this$props.animationsDisabled;
72
+ tokens = _this$props.tokens,
73
+ animationsDisabled = _this$props.animationsDisabled;
97
74
  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)
75
+ var targetSpanWrapper = (_target$closest = target.closest) === null || _target$closest === void 0 ? void 0 : _target$closest.call(target, ".".concat(_token["default"].rootClassName));
76
+ var targetedTokenIndex = targetSpanWrapper === null || targetSpanWrapper === void 0 || (_targetSpanWrapper$da = targetSpanWrapper.dataset) === null || _targetSpanWrapper$da === void 0 ? void 0 : _targetSpanWrapper$da.indexkey;
77
+ var t = targetedTokenIndex !== undefined ? tokensCloned[targetedTokenIndex] : undefined;
102
78
 
79
+ // don't toggle if in print mode, correctness is defined, or is missing
103
80
  if (t && t.correct === undefined && !animationsDisabled && !t.isMissing) {
104
81
  var _this$props2 = _this.props,
105
- onChange = _this$props2.onChange,
106
- maxNoOfSelections = _this$props2.maxNoOfSelections;
82
+ onChange = _this$props2.onChange,
83
+ maxNoOfSelections = _this$props2.maxNoOfSelections;
107
84
  var selected = !t.selected;
108
-
109
85
  if (maxNoOfSelections === 1 && _this.selectedCount() === 1) {
110
- var selectedToken = (tokens || []).filter(function (t) {
111
- return t.selected;
86
+ var selectedToken = (tokens || []).filter(function (tk) {
87
+ return tk.selected;
112
88
  });
113
89
  var updatedTokens = tokensCloned.map(function (token) {
114
90
  if ((0, _isEqual["default"])(token, selectedToken[0])) {
@@ -116,16 +92,13 @@ var TokenSelect = /*#__PURE__*/function (_React$Component) {
116
92
  selected: false
117
93
  });
118
94
  }
119
-
120
95
  return _objectSpread(_objectSpread({}, token), {}, {
121
96
  selectable: true
122
97
  });
123
98
  });
124
-
125
99
  var update = _objectSpread(_objectSpread({}, t), {}, {
126
- selected: !t.selected
100
+ selected: selected
127
101
  });
128
-
129
102
  updatedTokens.splice(targetedTokenIndex, 1, update);
130
103
  onChange(updatedTokens);
131
104
  } else {
@@ -133,94 +106,92 @@ var TokenSelect = /*#__PURE__*/function (_React$Component) {
133
106
  log('skip toggle max reached');
134
107
  return;
135
108
  }
136
-
137
109
  var _update = _objectSpread(_objectSpread({}, t), {}, {
138
- selected: !t.selected
110
+ selected: selected
139
111
  });
140
-
141
112
  tokensCloned.splice(targetedTokenIndex, 1, _update);
142
113
  onChange(tokensCloned);
143
114
  }
144
115
  }
145
116
  });
146
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "generateTokensInHtml", function () {
117
+ /** Build a React tree instead of an HTML string so Emotion can inject CSS */
118
+ (0, _defineProperty2["default"])(_this, "generateTokensNodes", function () {
147
119
  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
-
120
+ tokens = _this$props3.tokens,
121
+ disabled = _this$props3.disabled,
122
+ highlightChoices = _this$props3.highlightChoices,
123
+ animationsDisabled = _this$props3.animationsDisabled;
153
124
  var selectedCount = _this.selectedCount();
154
-
155
125
  var isLineBreak = function isLineBreak(text) {
156
126
  return text === '\n';
157
127
  };
158
-
159
128
  var isNewParagraph = function isNewParagraph(text) {
160
129
  return text === '\n\n';
161
130
  };
162
-
163
- var reducer = function reducer(accumulator, t, index) {
131
+ var paragraphs = [];
132
+ var currentChildren = [];
133
+ var flushParagraph = function flushParagraph() {
134
+ // Always push a <p>, even if empty, to mirror previous behavior
135
+ paragraphs.push(/*#__PURE__*/_react["default"].createElement("p", {
136
+ key: "p-".concat(paragraphs.length)
137
+ }, currentChildren));
138
+ currentChildren = [];
139
+ };
140
+ (tokens || []).forEach(function (t, index) {
164
141
  var selectable = t.selected || t.selectable && _this.canSelectMore(selectedCount);
165
-
166
142
  var showCorrectAnswer = t.correct !== undefined && (t.selectable || t.selected);
167
- var finalAcc = accumulator;
168
-
169
143
  if (isNewParagraph(t.text)) {
170
- return finalAcc + '</p><p>';
144
+ flushParagraph();
145
+ return;
171
146
  }
172
-
173
147
  if (isLineBreak(t.text)) {
174
- return finalAcc + '<br>';
148
+ currentChildren.push(/*#__PURE__*/_react["default"].createElement("br", {
149
+ key: "br-".concat(index)
150
+ }));
151
+ return;
175
152
  }
176
-
177
- if (selectable && !disabled || showCorrectAnswer || t.selected || t.isMissing || animationsDisabled && t.predefined // if we are in print mode
153
+ if (selectable && !disabled || showCorrectAnswer || t.selected || t.isMissing || animationsDisabled && t.predefined // print mode
178
154
  ) {
179
- return finalAcc + (0, _server.renderToString)( /*#__PURE__*/_react["default"].createElement(_token["default"], (0, _extends2["default"])({
155
+ currentChildren.push(/*#__PURE__*/_react["default"].createElement(_token["default"], (0, _extends2["default"])({
180
156
  key: index,
181
157
  disabled: disabled,
182
158
  index: index
183
159
  }, t, {
160
+ text: stripHtmlTags(t.text),
184
161
  selectable: selectable,
185
162
  highlight: highlightChoices,
186
163
  animationsDisabled: animationsDisabled
187
164
  })));
188
165
  } else {
189
- return accumulator + t.text;
166
+ // raw text node – React will escape as needed
167
+ currentChildren.push(/*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, {
168
+ key: index
169
+ }, stripHtmlTags(t.text)));
190
170
  }
191
- };
171
+ });
192
172
 
193
- var reduceResult = (tokens || []).reduce(reducer, '<p>');
194
- return reduceResult + '</p>';
173
+ // flush last paragraph
174
+ flushParagraph();
175
+ return paragraphs;
195
176
  });
196
177
  return _this;
197
178
  }
198
-
199
- (0, _createClass2["default"])(TokenSelect, [{
179
+ (0, _inherits2["default"])(TokenSelect, _React$Component);
180
+ return (0, _createClass2["default"])(TokenSelect, [{
200
181
  key: "render",
201
182
  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
- },
183
+ var classNameProp = this.props.className;
184
+ var nodes = this.generateTokensNodes();
185
+ return /*#__PURE__*/_react["default"].createElement(StyledTokenSelect, {
186
+ className: classNameProp,
212
187
  onClick: this.toggleToken
213
- });
188
+ }, nodes);
214
189
  }
215
190
  }]);
216
- return TokenSelect;
217
191
  }(_react["default"].Component);
218
-
219
- exports.TokenSelect = TokenSelect;
220
192
  (0, _defineProperty2["default"])(TokenSelect, "propTypes", {
221
193
  tokens: _propTypes["default"].arrayOf(_propTypes["default"].shape(_token.TokenTypes)).isRequired,
222
194
  className: _propTypes["default"].string,
223
- classes: _propTypes["default"].object.isRequired,
224
195
  onChange: _propTypes["default"].func.isRequired,
225
196
  disabled: _propTypes["default"].bool,
226
197
  highlightChoices: _propTypes["default"].bool,
@@ -232,19 +203,5 @@ exports.TokenSelect = TokenSelect;
232
203
  maxNoOfSelections: 0,
233
204
  tokens: []
234
205
  });
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;
206
+ var _default = exports["default"] = TokenSelect;
250
207
  //# 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","stripHtmlTags","text","replace","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","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\n// strip HTML tags for plain text rendering\nconst stripHtmlTags = (text) => {\n if (!text) {\n return text;\n }\n\n return text.replace(/<[^>]+>/g, '');\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 text={stripHtmlTags(t.text)}\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}>{stripHtmlTags(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;\n"],"mappings":"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","ignoreList":[]}