@pie-lib/text-select 1.12.8 → 1.13.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/CHANGELOG.md +25 -61
  2. package/NEXT.CHANGELOG.json +1 -0
  3. package/package.json +8 -6
  4. package/src/__tests__/__snapshots__/text-select.test.jsx.snap +21 -0
  5. package/src/__tests__/text-select.test.jsx +34 -0
  6. package/src/__tests__/utils.test.jsx +27 -0
  7. package/src/index.js +2 -1
  8. package/src/token-select/__tests__/__snapshots__/index.test.jsx.snap +49 -0
  9. package/src/token-select/__tests__/__snapshots__/token.test.jsx.snap +31 -0
  10. package/src/token-select/__tests__/index.test.jsx +257 -0
  11. package/src/token-select/__tests__/token.test.jsx +33 -0
  12. package/src/token-select/index.jsx +3 -1
  13. package/src/token-select/token.jsx +11 -20
  14. package/src/tokenizer/__tests__/__snapshots__/controls.test.jsx.snap +59 -0
  15. package/src/tokenizer/__tests__/__snapshots__/index.test.jsx.snap +31 -0
  16. package/src/tokenizer/__tests__/__snapshots__/token-text.test.jsx.snap +17 -0
  17. package/src/tokenizer/__tests__/builder.test.js +256 -0
  18. package/src/tokenizer/__tests__/controls.test.jsx +25 -0
  19. package/src/tokenizer/__tests__/index.test.jsx +140 -0
  20. package/src/tokenizer/__tests__/selection-utils.test.js +26 -0
  21. package/src/tokenizer/__tests__/token-text.test.jsx +136 -0
  22. package/src/tokenizer/controls.jsx +20 -1
  23. package/src/tokenizer/token-text.jsx +9 -0
  24. package/README.md +0 -3
  25. package/lib/index.js +0 -68
  26. package/lib/index.js.map +0 -1
  27. package/lib/legend.js +0 -99
  28. package/lib/legend.js.map +0 -1
  29. package/lib/text-select.js +0 -138
  30. package/lib/text-select.js.map +0 -1
  31. package/lib/token-select/index.js +0 -249
  32. package/lib/token-select/index.js.map +0 -1
  33. package/lib/token-select/token.js +0 -237
  34. package/lib/token-select/token.js.map +0 -1
  35. package/lib/tokenizer/builder.js +0 -311
  36. package/lib/tokenizer/builder.js.map +0 -1
  37. package/lib/tokenizer/controls.js +0 -123
  38. package/lib/tokenizer/controls.js.map +0 -1
  39. package/lib/tokenizer/index.js +0 -205
  40. package/lib/tokenizer/index.js.map +0 -1
  41. package/lib/tokenizer/selection-utils.js +0 -65
  42. package/lib/tokenizer/selection-utils.js.map +0 -1
  43. package/lib/tokenizer/token-text.js +0 -200
  44. package/lib/tokenizer/token-text.js.map +0 -1
  45. package/lib/utils.js +0 -67
  46. package/lib/utils.js.map +0 -1
@@ -1,249 +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];
101
-
102
- if (t && t.correct === undefined && !animationsDisabled) {
103
- var _this$props2 = _this.props,
104
- onChange = _this$props2.onChange,
105
- maxNoOfSelections = _this$props2.maxNoOfSelections;
106
- var selected = !t.selected;
107
-
108
- if (maxNoOfSelections === 1 && _this.selectedCount() === 1) {
109
- var selectedToken = (tokens || []).filter(function (t) {
110
- return t.selected;
111
- });
112
- var updatedTokens = tokensCloned.map(function (token) {
113
- if ((0, _isEqual["default"])(token, selectedToken[0])) {
114
- return _objectSpread(_objectSpread({}, token), {}, {
115
- selected: false
116
- });
117
- }
118
-
119
- return _objectSpread(_objectSpread({}, token), {}, {
120
- selectable: true
121
- });
122
- });
123
-
124
- var update = _objectSpread(_objectSpread({}, t), {}, {
125
- selected: !t.selected
126
- });
127
-
128
- updatedTokens.splice(targetedTokenIndex, 1, update);
129
- onChange(updatedTokens);
130
- } else {
131
- if (selected && maxNoOfSelections > 0 && _this.selectedCount() >= maxNoOfSelections) {
132
- log('skip toggle max reached');
133
- return;
134
- }
135
-
136
- var _update = _objectSpread(_objectSpread({}, t), {}, {
137
- selected: !t.selected
138
- });
139
-
140
- tokensCloned.splice(targetedTokenIndex, 1, _update);
141
- onChange(tokensCloned);
142
- }
143
- }
144
- });
145
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "generateTokensInHtml", function () {
146
- var _this$props3 = _this.props,
147
- tokens = _this$props3.tokens,
148
- disabled = _this$props3.disabled,
149
- highlightChoices = _this$props3.highlightChoices,
150
- animationsDisabled = _this$props3.animationsDisabled;
151
-
152
- var selectedCount = _this.selectedCount();
153
-
154
- var isLineBreak = function isLineBreak(text) {
155
- return text === '\n';
156
- };
157
-
158
- var isNewParagraph = function isNewParagraph(text) {
159
- return text === '\n\n';
160
- };
161
-
162
- var reducer = function reducer(accumulator, t, index) {
163
- var selectable = t.selected || t.selectable && _this.canSelectMore(selectedCount);
164
-
165
- var showCorrectAnswer = t.correct !== undefined && (t.selectable || t.selected);
166
- var finalAcc = accumulator;
167
-
168
- if (isNewParagraph(t.text)) {
169
- return finalAcc + '</p><p>';
170
- }
171
-
172
- if (isLineBreak(t.text)) {
173
- return finalAcc + '<br>';
174
- }
175
-
176
- if (selectable && !disabled || showCorrectAnswer || t.selected || t.isMissing || animationsDisabled && t.predefined // if we are in print mode
177
- ) {
178
- return finalAcc + (0, _server.renderToString)( /*#__PURE__*/_react["default"].createElement(_token["default"], (0, _extends2["default"])({
179
- key: index,
180
- disabled: disabled,
181
- index: index
182
- }, t, {
183
- selectable: selectable,
184
- highlight: highlightChoices,
185
- animationsDisabled: animationsDisabled
186
- })));
187
- } else {
188
- return accumulator + t.text;
189
- }
190
- };
191
-
192
- var reduceResult = (tokens || []).reduce(reducer, '<p>');
193
- return reduceResult + '</p>';
194
- });
195
- return _this;
196
- }
197
-
198
- (0, _createClass2["default"])(TokenSelect, [{
199
- key: "render",
200
- value: function render() {
201
- var _this$props4 = this.props,
202
- classes = _this$props4.classes,
203
- classNameProp = _this$props4.className;
204
- var className = (0, _classnames["default"])(classes.tokenSelect, classNameProp);
205
- var html = this.generateTokensInHtml();
206
- return /*#__PURE__*/_react["default"].createElement("div", {
207
- className: className,
208
- dangerouslySetInnerHTML: {
209
- __html: html
210
- },
211
- onClick: this.toggleToken
212
- });
213
- }
214
- }]);
215
- return TokenSelect;
216
- }(_react["default"].Component);
217
-
218
- exports.TokenSelect = TokenSelect;
219
- (0, _defineProperty2["default"])(TokenSelect, "propTypes", {
220
- tokens: _propTypes["default"].arrayOf(_propTypes["default"].shape(_token.TokenTypes)).isRequired,
221
- className: _propTypes["default"].string,
222
- classes: _propTypes["default"].object.isRequired,
223
- onChange: _propTypes["default"].func.isRequired,
224
- disabled: _propTypes["default"].bool,
225
- highlightChoices: _propTypes["default"].bool,
226
- animationsDisabled: _propTypes["default"].bool,
227
- maxNoOfSelections: _propTypes["default"].number
228
- });
229
- (0, _defineProperty2["default"])(TokenSelect, "defaultProps", {
230
- highlightChoices: false,
231
- maxNoOfSelections: 0,
232
- tokens: []
233
- });
234
-
235
- var _default = (0, _styles.withStyles)(function () {
236
- return {
237
- tokenSelect: _objectSpread(_objectSpread({
238
- backgroundColor: 'none',
239
- whiteSpace: 'pre'
240
- }, (0, _styleUtils.noSelect)()), {}, {
241
- '& p': {
242
- whiteSpace: 'break-spaces'
243
- }
244
- })
245
- };
246
- })(TokenSelect);
247
-
248
- exports["default"] = _default;
249
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
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","onChange","selectedToken","updatedTokens","map","token","selectable","update","splice","disabled","highlightChoices","isLineBreak","text","isNewParagraph","reducer","accumulator","index","canSelectMore","showCorrectAnswer","finalAcc","isMissing","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 if (t && t.correct === undefined && !animationsDisabled) {\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,237 +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
- padding: theme.spacing.unit / 2,
158
- paddingRight: 0,
159
- paddingLeft: 0,
160
- transition: 'background-color 100ms ease-in'
161
- },
162
- disabled: {
163
- cursor: 'inherit',
164
- color: _renderUi.color.disabled()
165
- },
166
- disabledBlack: {
167
- cursor: 'inherit'
168
- },
169
- disabledAndSelected: {
170
- backgroundColor: _renderUi.color.secondaryLight()
171
- },
172
- selectable: (0, _defineProperty2["default"])({}, theme.breakpoints.up(769), {
173
- '&:hover': {
174
- backgroundColor: _renderUi.color.primaryLight(),
175
- '& > *': {
176
- backgroundColor: _renderUi.color.primaryLight()
177
- }
178
- }
179
- }),
180
- selected: {
181
- lineHeight: 2,
182
- marginTop: theme.spacing.unit / 2,
183
- backgroundColor: _renderUi.color.primaryLight(),
184
- '& > *': {
185
- backgroundColor: _renderUi.color.primaryLight()
186
- }
187
- },
188
- highlight: {
189
- border: "dashed 2px ".concat(_renderUi.color.disabled()),
190
- lineHeight: 2,
191
- boxSizing: 'border-box',
192
- marginTop: theme.spacing.unit / 2,
193
- display: 'inline-block',
194
- padding: theme.spacing.unit
195
- },
196
- print: {
197
- border: "dashed 2px ".concat(_renderUi.color.disabled()),
198
- lineHeight: 2,
199
- boxSizing: 'border-box',
200
- marginTop: theme.spacing.unit / 2,
201
- display: 'inline-block',
202
- padding: theme.spacing.unit,
203
- color: _renderUi.color.text()
204
- },
205
- custom: {
206
- display: 'initial'
207
- },
208
- correct: {
209
- backgroundColor: _renderUi.color.correctSecondary(),
210
- border: "".concat(_renderUi.color.correct(), " solid 2px"),
211
- lineHeight: "".concat(theme.spacing.unit * 4, "px")
212
- },
213
- incorrect: {
214
- backgroundColor: _renderUi.color.incorrectSecondary(),
215
- border: "".concat(_renderUi.color.missing(), " solid 2px"),
216
- lineHeight: "".concat(theme.spacing.unit * 4, "px")
217
- },
218
- missing: {
219
- backgroundColor: _renderUi.color.incorrectSecondary(),
220
- border: "".concat(_renderUi.color.missing(), " dashed 2px"),
221
- textDecoration: "line-through ".concat(_renderUi.color.missing())
222
- },
223
- incorrectIcon: {
224
- verticalAlign: 'middle',
225
- fontSize: 'larger',
226
- color: _renderUi.color.missing()
227
- },
228
- correctIcon: {
229
- verticalAlign: 'middle',
230
- fontSize: 'larger',
231
- color: _renderUi.color.correct()
232
- }
233
- };
234
- })(Token);
235
-
236
- exports["default"] = _default;
237
- //# sourceMappingURL=token.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/token-select/token.jsx"],"names":["Wrapper","useWrapper","children","classNameContainer","iconClass","Icon","propTypes","PropTypes","bool","string","func","element","TokenTypes","text","selectable","Token","props","selected","classes","classNameProp","className","disabled","index","highlight","correct","animationsDisabled","isMissing","isTouchEnabled","window","navigator","maxTouchPoints","msMaxTouchPoints","undefined","token","disabledBlack","rootClassName","custom","Check","Close","incorrect","correctIcon","incorrectIcon","missing","disabledAndSelected","print","__html","replace","React","Component","object","isRequired","theme","cursor","textIndent","padding","spacing","unit","paddingRight","paddingLeft","transition","color","backgroundColor","secondaryLight","breakpoints","up","primaryLight","lineHeight","marginTop","border","boxSizing","display","correctSecondary","incorrectSecondary","textDecoration","verticalAlign","fontSize"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport { color } from '@pie-lib/render-ui';\nimport Check from '@material-ui/icons/Check';\nimport Close from '@material-ui/icons/Close';\n\nconst Wrapper = ({ useWrapper, children, classNameContainer, iconClass, Icon }) => {\n if (useWrapper) {\n return (\n <span className={classNameContainer}>\n {children}\n <Icon className={iconClass} viewBox={'0 1 24 24'} />\n </span>\n );\n }\n\n return children;\n};\n\nWrapper.propTypes = {\n useWrapper: PropTypes.bool,\n classNameContainer: PropTypes.string,\n iconClass: PropTypes.string,\n Icon: PropTypes.func,\n children: PropTypes.element,\n};\n\nexport const TokenTypes = {\n text: PropTypes.string,\n selectable: PropTypes.bool,\n};\n\nexport class Token extends React.Component {\n static rootClassName = 'tokenRootClass';\n\n static propTypes = {\n ...TokenTypes,\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n disabled: PropTypes.bool,\n highlight: PropTypes.bool,\n correct: PropTypes.bool,\n text: PropTypes.string.isRequired,\n };\n\n static defaultProps = {\n selectable: false,\n text: '',\n };\n\n render() {\n const {\n text,\n selectable,\n selected,\n classes,\n className: classNameProp,\n disabled,\n index,\n highlight,\n correct,\n animationsDisabled,\n isMissing,\n } = this.props;\n const isTouchEnabled = 'ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0;\n\n let className;\n let classNameContainer;\n let Icon;\n let iconClass;\n\n if (correct === undefined && selected && disabled) {\n className = classNames(classes.token, classes.selected, classes.disabledBlack);\n } else if (correct !== undefined) {\n className = classNames(Token.rootClassName, classes.custom);\n Icon = correct ? Check : Close;\n classNameContainer = correct === true ? classes.correct : classes.incorrect;\n iconClass = correct === true ? classes.correctIcon : classes.incorrectIcon;\n } else if (isMissing) {\n className = classNames(Token.rootClassName, classes.custom, isMissing === true && classes.missing);\n } else {\n className = classNames(\n Token.rootClassName,\n classes.token,\n disabled && classes.disabled,\n selectable && !disabled && !isTouchEnabled && classes.selectable,\n selected && !disabled && classes.selected,\n selected && disabled && classes.disabledAndSelected,\n highlight && selectable && !disabled && !selected && classes.highlight,\n animationsDisabled && classes.print,\n classNameProp,\n );\n }\n return (\n <Wrapper\n useWrapper={correct !== undefined}\n classNameContainer={classNameContainer}\n iconClass={iconClass}\n Icon={Icon}\n >\n <span\n className={className}\n dangerouslySetInnerHTML={{ __html: (text || '').replace(/\\n/g, '<br>') }}\n data-indexkey={index}\n />\n </Wrapper>\n );\n }\n}\n\nexport default withStyles((theme) => {\n return {\n token: {\n cursor: 'pointer',\n textIndent: 0,\n padding: theme.spacing.unit / 2,\n paddingRight: 0,\n paddingLeft: 0,\n transition: 'background-color 100ms ease-in',\n },\n disabled: {\n cursor: 'inherit',\n color: color.disabled(),\n },\n disabledBlack: {\n cursor: 'inherit',\n },\n disabledAndSelected: {\n backgroundColor: color.secondaryLight(),\n },\n selectable: {\n [theme.breakpoints.up(769)]: {\n '&:hover': {\n backgroundColor: color.primaryLight(),\n '& > *': {\n backgroundColor: color.primaryLight(),\n },\n },\n },\n },\n selected: {\n lineHeight: 2,\n marginTop: theme.spacing.unit / 2,\n backgroundColor: color.primaryLight(),\n '& > *': {\n backgroundColor: color.primaryLight(),\n },\n },\n highlight: {\n border: `dashed 2px ${color.disabled()}`,\n lineHeight: 2,\n boxSizing: 'border-box',\n marginTop: theme.spacing.unit / 2,\n display: 'inline-block',\n padding: theme.spacing.unit,\n },\n print: {\n border: `dashed 2px ${color.disabled()}`,\n lineHeight: 2,\n boxSizing: 'border-box',\n marginTop: theme.spacing.unit / 2,\n display: 'inline-block',\n padding: theme.spacing.unit,\n color: color.text(),\n },\n\n custom: {\n display: 'initial',\n },\n correct: {\n backgroundColor: color.correctSecondary(),\n border: `${color.correct()} solid 2px`,\n lineHeight: `${theme.spacing.unit * 4}px`,\n },\n incorrect: {\n backgroundColor: color.incorrectSecondary(),\n border: `${color.missing()} solid 2px`,\n lineHeight: `${theme.spacing.unit * 4}px`,\n },\n missing: {\n backgroundColor: color.incorrectSecondary(),\n border: `${color.missing()} dashed 2px`,\n textDecoration: `line-through ${color.missing()}`,\n },\n incorrectIcon: {\n verticalAlign: 'middle',\n fontSize: 'larger',\n color: color.missing(),\n },\n\n correctIcon: {\n verticalAlign: 'middle',\n fontSize: 'larger',\n color: color.correct(),\n },\n };\n})(Token);\n"],"file":"token.js"}