@pie-lib/text-select 1.19.0 → 1.20.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 +4 -16
- package/lib/index.js +68 -0
- package/lib/index.js.map +1 -0
- package/lib/legend.js +126 -0
- package/lib/legend.js.map +1 -0
- package/lib/text-select.js +138 -0
- package/lib/text-select.js.map +1 -0
- package/lib/token-select/index.js +250 -0
- package/lib/token-select/index.js.map +1 -0
- package/lib/token-select/token.js +276 -0
- package/lib/token-select/token.js.map +1 -0
- package/lib/tokenizer/builder.js +311 -0
- package/lib/tokenizer/builder.js.map +1 -0
- package/lib/tokenizer/controls.js +137 -0
- package/lib/tokenizer/controls.js.map +1 -0
- package/lib/tokenizer/index.js +205 -0
- package/lib/tokenizer/index.js.map +1 -0
- package/lib/tokenizer/selection-utils.js +65 -0
- package/lib/tokenizer/selection-utils.js.map +1 -0
- package/lib/tokenizer/token-text.js +209 -0
- package/lib/tokenizer/token-text.js.map +1 -0
- package/lib/utils.js +67 -0
- package/lib/utils.js.map +1 -0
- package/package.json +6 -6
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,276 @@
|
|
|
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 _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
15
|
+
|
|
16
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
17
|
+
|
|
18
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
19
|
+
|
|
20
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
21
|
+
|
|
22
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
23
|
+
|
|
24
|
+
var _react = _interopRequireDefault(require("react"));
|
|
25
|
+
|
|
26
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
27
|
+
|
|
28
|
+
var _styles = require("@material-ui/core/styles");
|
|
29
|
+
|
|
30
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
31
|
+
|
|
32
|
+
var _Check = _interopRequireDefault(require("@material-ui/icons/Check"));
|
|
33
|
+
|
|
34
|
+
var _Close = _interopRequireDefault(require("@material-ui/icons/Close"));
|
|
35
|
+
|
|
36
|
+
var _renderUi = require("@pie-lib/render-ui");
|
|
37
|
+
|
|
38
|
+
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; }
|
|
39
|
+
|
|
40
|
+
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; }
|
|
41
|
+
|
|
42
|
+
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); }; }
|
|
43
|
+
|
|
44
|
+
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; } }
|
|
45
|
+
|
|
46
|
+
// we need to use a larger line height for the token to be more readable
|
|
47
|
+
var LINE_HEIGHT_MULTIPLIER = 3.2; // we need a bit more space for correctness indicators
|
|
48
|
+
|
|
49
|
+
var CORRECTNESS_LINE_HEIGHT_MULTIPLIER = 3.4;
|
|
50
|
+
var CORRECTNESS_PADDING = 2;
|
|
51
|
+
|
|
52
|
+
var Wrapper = function Wrapper(_ref) {
|
|
53
|
+
var useWrapper = _ref.useWrapper,
|
|
54
|
+
children = _ref.children,
|
|
55
|
+
classNameContainer = _ref.classNameContainer,
|
|
56
|
+
iconClass = _ref.iconClass,
|
|
57
|
+
Icon = _ref.Icon;
|
|
58
|
+
return useWrapper ? /*#__PURE__*/_react["default"].createElement("span", {
|
|
59
|
+
className: classNameContainer
|
|
60
|
+
}, children, /*#__PURE__*/_react["default"].createElement(Icon, {
|
|
61
|
+
className: iconClass
|
|
62
|
+
})) : children;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
Wrapper.propTypes = {
|
|
66
|
+
useWrapper: _propTypes["default"].bool,
|
|
67
|
+
classNameContainer: _propTypes["default"].string,
|
|
68
|
+
iconClass: _propTypes["default"].string,
|
|
69
|
+
Icon: _propTypes["default"].func,
|
|
70
|
+
children: _propTypes["default"].element
|
|
71
|
+
};
|
|
72
|
+
var TokenTypes = {
|
|
73
|
+
text: _propTypes["default"].string,
|
|
74
|
+
selectable: _propTypes["default"].bool
|
|
75
|
+
};
|
|
76
|
+
exports.TokenTypes = TokenTypes;
|
|
77
|
+
|
|
78
|
+
var Token = /*#__PURE__*/function (_React$Component) {
|
|
79
|
+
(0, _inherits2["default"])(Token, _React$Component);
|
|
80
|
+
|
|
81
|
+
var _super = _createSuper(Token);
|
|
82
|
+
|
|
83
|
+
function Token() {
|
|
84
|
+
var _this;
|
|
85
|
+
|
|
86
|
+
(0, _classCallCheck2["default"])(this, Token);
|
|
87
|
+
|
|
88
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
89
|
+
args[_key] = arguments[_key];
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
_this = _super.call.apply(_super, [this].concat(args));
|
|
93
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getClassAndIconConfig", function () {
|
|
94
|
+
var _this$props = _this.props,
|
|
95
|
+
selectable = _this$props.selectable,
|
|
96
|
+
selected = _this$props.selected,
|
|
97
|
+
classes = _this$props.classes,
|
|
98
|
+
classNameProp = _this$props.className,
|
|
99
|
+
disabled = _this$props.disabled,
|
|
100
|
+
highlight = _this$props.highlight,
|
|
101
|
+
correct = _this$props.correct,
|
|
102
|
+
animationsDisabled = _this$props.animationsDisabled,
|
|
103
|
+
isMissing = _this$props.isMissing;
|
|
104
|
+
var isTouchEnabled = 'ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0;
|
|
105
|
+
var baseClassName = Token.rootClassName;
|
|
106
|
+
var classNameContainer;
|
|
107
|
+
var Icon;
|
|
108
|
+
var iconClass;
|
|
109
|
+
|
|
110
|
+
if (correct === undefined && selected && disabled) {
|
|
111
|
+
return {
|
|
112
|
+
className: (0, _classnames["default"])(classes.token, classes.selected, classes.disabledBlack)
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
if (correct !== undefined) {
|
|
117
|
+
var isCorrect = correct === true;
|
|
118
|
+
return {
|
|
119
|
+
className: (0, _classnames["default"])(baseClassName, classes.custom),
|
|
120
|
+
classNameContainer: (0, _classnames["default"])(isCorrect ? classes.correct : classes.incorrect, classes.commonTokenStyle),
|
|
121
|
+
Icon: isCorrect ? _Check["default"] : _Close["default"],
|
|
122
|
+
iconClass: (0, _classnames["default"])(classes.correctnessIndicatorIcon, isCorrect ? classes.correctIcon : classes.incorrectIcon)
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
if (isMissing) {
|
|
127
|
+
return {
|
|
128
|
+
className: (0, _classnames["default"])(baseClassName, classes.custom, classes.missing, classes.commonTokenStyle),
|
|
129
|
+
classNameContainer: classes.commonTokenStyle,
|
|
130
|
+
Icon: _Close["default"],
|
|
131
|
+
iconClass: (0, _classnames["default"])(classes.correctnessIndicatorIcon, classes.incorrectIcon)
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return {
|
|
136
|
+
className: (0, _classnames["default"])(baseClassName, 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),
|
|
137
|
+
classNameContainer: classNameContainer,
|
|
138
|
+
Icon: Icon,
|
|
139
|
+
iconClass: iconClass
|
|
140
|
+
};
|
|
141
|
+
});
|
|
142
|
+
return _this;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
(0, _createClass2["default"])(Token, [{
|
|
146
|
+
key: "render",
|
|
147
|
+
value: function render() {
|
|
148
|
+
var _this$props2 = this.props,
|
|
149
|
+
text = _this$props2.text,
|
|
150
|
+
index = _this$props2.index,
|
|
151
|
+
correct = _this$props2.correct,
|
|
152
|
+
isMissing = _this$props2.isMissing;
|
|
153
|
+
|
|
154
|
+
var _this$getClassAndIcon = this.getClassAndIconConfig(),
|
|
155
|
+
className = _this$getClassAndIcon.className,
|
|
156
|
+
classNameContainer = _this$getClassAndIcon.classNameContainer,
|
|
157
|
+
Icon = _this$getClassAndIcon.Icon,
|
|
158
|
+
iconClass = _this$getClassAndIcon.iconClass;
|
|
159
|
+
|
|
160
|
+
return /*#__PURE__*/_react["default"].createElement(Wrapper, {
|
|
161
|
+
useWrapper: correct !== undefined || isMissing,
|
|
162
|
+
classNameContainer: classNameContainer,
|
|
163
|
+
iconClass: iconClass,
|
|
164
|
+
Icon: Icon
|
|
165
|
+
}, /*#__PURE__*/_react["default"].createElement("span", {
|
|
166
|
+
className: className,
|
|
167
|
+
dangerouslySetInnerHTML: {
|
|
168
|
+
__html: (text || '').replace(/\n/g, '<br>')
|
|
169
|
+
},
|
|
170
|
+
"data-indexkey": index
|
|
171
|
+
}));
|
|
172
|
+
}
|
|
173
|
+
}]);
|
|
174
|
+
return Token;
|
|
175
|
+
}(_react["default"].Component);
|
|
176
|
+
|
|
177
|
+
exports.Token = Token;
|
|
178
|
+
(0, _defineProperty2["default"])(Token, "rootClassName", 'tokenRootClass');
|
|
179
|
+
(0, _defineProperty2["default"])(Token, "propTypes", _objectSpread(_objectSpread({}, TokenTypes), {}, {
|
|
180
|
+
classes: _propTypes["default"].object.isRequired,
|
|
181
|
+
text: _propTypes["default"].string.isRequired,
|
|
182
|
+
className: _propTypes["default"].string,
|
|
183
|
+
disabled: _propTypes["default"].bool,
|
|
184
|
+
highlight: _propTypes["default"].bool,
|
|
185
|
+
correct: _propTypes["default"].bool
|
|
186
|
+
}));
|
|
187
|
+
(0, _defineProperty2["default"])(Token, "defaultProps", {
|
|
188
|
+
selectable: false,
|
|
189
|
+
text: ''
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
var _default = (0, _styles.withStyles)(function (theme) {
|
|
193
|
+
return {
|
|
194
|
+
token: {
|
|
195
|
+
cursor: 'pointer',
|
|
196
|
+
textIndent: 0
|
|
197
|
+
},
|
|
198
|
+
disabled: {
|
|
199
|
+
cursor: 'inherit',
|
|
200
|
+
color: _renderUi.color.disabled()
|
|
201
|
+
},
|
|
202
|
+
disabledBlack: {
|
|
203
|
+
cursor: 'inherit'
|
|
204
|
+
},
|
|
205
|
+
disabledAndSelected: {
|
|
206
|
+
backgroundColor: _renderUi.color.blueGrey100()
|
|
207
|
+
},
|
|
208
|
+
selectable: (0, _defineProperty2["default"])({}, theme.breakpoints.up(769), {
|
|
209
|
+
'&:hover': {
|
|
210
|
+
backgroundColor: _renderUi.color.blueGrey300(),
|
|
211
|
+
color: theme.palette.common.black,
|
|
212
|
+
'& > *': {
|
|
213
|
+
backgroundColor: _renderUi.color.blueGrey300()
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}),
|
|
217
|
+
selected: {
|
|
218
|
+
backgroundColor: _renderUi.color.blueGrey100(),
|
|
219
|
+
color: theme.palette.common.black,
|
|
220
|
+
lineHeight: "".concat(theme.spacing.unit * LINE_HEIGHT_MULTIPLIER, "px"),
|
|
221
|
+
border: "solid 2px ".concat(_renderUi.color.blueGrey900()),
|
|
222
|
+
borderRadius: '4px',
|
|
223
|
+
'& > *': {
|
|
224
|
+
backgroundColor: _renderUi.color.blueGrey100()
|
|
225
|
+
}
|
|
226
|
+
},
|
|
227
|
+
highlight: {
|
|
228
|
+
border: "dashed 2px ".concat(_renderUi.color.blueGrey600()),
|
|
229
|
+
borderRadius: '4px',
|
|
230
|
+
lineHeight: "".concat(theme.spacing.unit * LINE_HEIGHT_MULTIPLIER, "px")
|
|
231
|
+
},
|
|
232
|
+
print: {
|
|
233
|
+
border: "dashed 2px ".concat(_renderUi.color.blueGrey600()),
|
|
234
|
+
borderRadius: '4px',
|
|
235
|
+
lineHeight: "".concat(theme.spacing.unit * LINE_HEIGHT_MULTIPLIER, "px"),
|
|
236
|
+
color: _renderUi.color.text()
|
|
237
|
+
},
|
|
238
|
+
custom: {
|
|
239
|
+
display: 'initial'
|
|
240
|
+
},
|
|
241
|
+
commonTokenStyle: {
|
|
242
|
+
position: 'relative',
|
|
243
|
+
borderRadius: '4px',
|
|
244
|
+
color: theme.palette.common.black,
|
|
245
|
+
lineHeight: "".concat(theme.spacing.unit * CORRECTNESS_LINE_HEIGHT_MULTIPLIER + CORRECTNESS_PADDING, "px"),
|
|
246
|
+
padding: "".concat(CORRECTNESS_PADDING, "px")
|
|
247
|
+
},
|
|
248
|
+
correct: {
|
|
249
|
+
border: "".concat(_renderUi.color.correctTertiary(), " solid 2px")
|
|
250
|
+
},
|
|
251
|
+
incorrect: {
|
|
252
|
+
border: "".concat(_renderUi.color.incorrectWithIcon(), " solid 2px")
|
|
253
|
+
},
|
|
254
|
+
missing: {
|
|
255
|
+
border: "".concat(_renderUi.color.incorrectWithIcon(), " dashed 2px")
|
|
256
|
+
},
|
|
257
|
+
incorrectIcon: {
|
|
258
|
+
backgroundColor: _renderUi.color.incorrectWithIcon()
|
|
259
|
+
},
|
|
260
|
+
correctIcon: {
|
|
261
|
+
backgroundColor: _renderUi.color.correctTertiary()
|
|
262
|
+
},
|
|
263
|
+
correctnessIndicatorIcon: {
|
|
264
|
+
color: _renderUi.color.white(),
|
|
265
|
+
position: 'absolute',
|
|
266
|
+
top: '-8px',
|
|
267
|
+
left: '-8px',
|
|
268
|
+
borderRadius: '50%',
|
|
269
|
+
fontSize: '12px',
|
|
270
|
+
padding: '2px'
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
})(Token);
|
|
274
|
+
|
|
275
|
+
exports["default"] = _default;
|
|
276
|
+
//# sourceMappingURL=token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/token-select/token.jsx"],"names":["LINE_HEIGHT_MULTIPLIER","CORRECTNESS_LINE_HEIGHT_MULTIPLIER","CORRECTNESS_PADDING","Wrapper","useWrapper","children","classNameContainer","iconClass","Icon","propTypes","PropTypes","bool","string","func","element","TokenTypes","text","selectable","Token","props","selected","classes","classNameProp","className","disabled","highlight","correct","animationsDisabled","isMissing","isTouchEnabled","window","navigator","maxTouchPoints","msMaxTouchPoints","baseClassName","rootClassName","undefined","token","disabledBlack","isCorrect","custom","incorrect","commonTokenStyle","Check","Close","correctnessIndicatorIcon","correctIcon","incorrectIcon","missing","disabledAndSelected","print","index","getClassAndIconConfig","__html","replace","React","Component","object","isRequired","theme","cursor","textIndent","color","backgroundColor","blueGrey100","breakpoints","up","blueGrey300","palette","common","black","lineHeight","spacing","unit","border","blueGrey900","borderRadius","blueGrey600","display","position","padding","correctTertiary","incorrectWithIcon","white","top","left","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 Check from '@material-ui/icons/Check';\nimport Close from '@material-ui/icons/Close';\n\nimport { color } from '@pie-lib/render-ui';\n\n// we need to use a larger line height for the token to be more readable\nconst LINE_HEIGHT_MULTIPLIER = 3.2;\n// we need a bit more space for correctness indicators\nconst CORRECTNESS_LINE_HEIGHT_MULTIPLIER = 3.4;\nconst CORRECTNESS_PADDING = 2;\n\nconst Wrapper = ({ useWrapper, children, classNameContainer, iconClass, Icon }) =>\n useWrapper ? (\n <span className={classNameContainer}>\n {children}\n <Icon className={iconClass} />\n </span>\n ) : (\n 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 text: PropTypes.string.isRequired,\n className: PropTypes.string,\n disabled: PropTypes.bool,\n highlight: PropTypes.bool,\n correct: PropTypes.bool,\n };\n\n static defaultProps = {\n selectable: false,\n text: '',\n };\n\n getClassAndIconConfig = () => {\n const {\n selectable,\n selected,\n classes,\n className: classNameProp,\n disabled,\n highlight,\n correct,\n animationsDisabled,\n isMissing,\n } = this.props;\n const isTouchEnabled = 'ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0;\n const baseClassName = Token.rootClassName;\n let classNameContainer;\n let Icon;\n let iconClass;\n\n if (correct === undefined && selected && disabled) {\n return {\n className: classNames(classes.token, classes.selected, classes.disabledBlack),\n };\n }\n\n if (correct !== undefined) {\n const isCorrect = correct === true;\n return {\n className: classNames(baseClassName, classes.custom),\n classNameContainer: classNames(isCorrect ? classes.correct : classes.incorrect, classes.commonTokenStyle),\n Icon: isCorrect ? Check : Close,\n iconClass: classNames(\n classes.correctnessIndicatorIcon,\n isCorrect ? classes.correctIcon : classes.incorrectIcon,\n ),\n };\n }\n\n if (isMissing) {\n return {\n className: classNames(baseClassName, classes.custom, classes.missing, classes.commonTokenStyle),\n classNameContainer: classes.commonTokenStyle,\n Icon: Close,\n iconClass: classNames(classes.correctnessIndicatorIcon, classes.incorrectIcon),\n };\n }\n\n return {\n className: classNames(\n baseClassName,\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 classNameContainer,\n Icon,\n iconClass,\n };\n };\n\n render() {\n const { text, index, correct, isMissing } = this.props;\n const { className, classNameContainer, Icon, iconClass } = this.getClassAndIconConfig();\n\n return (\n <Wrapper\n useWrapper={correct !== undefined || isMissing}\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 },\n disabled: {\n cursor: 'inherit',\n color: color.disabled(),\n },\n disabledBlack: {\n cursor: 'inherit',\n },\n disabledAndSelected: {\n backgroundColor: color.blueGrey100(),\n },\n selectable: {\n [theme.breakpoints.up(769)]: {\n '&:hover': {\n backgroundColor: color.blueGrey300(),\n color: theme.palette.common.black,\n '& > *': {\n backgroundColor: color.blueGrey300(),\n },\n },\n },\n },\n selected: {\n backgroundColor: color.blueGrey100(),\n color: theme.palette.common.black,\n lineHeight: `${theme.spacing.unit * LINE_HEIGHT_MULTIPLIER}px`,\n border: `solid 2px ${color.blueGrey900()}`,\n borderRadius: '4px',\n '& > *': {\n backgroundColor: color.blueGrey100(),\n },\n },\n highlight: {\n border: `dashed 2px ${color.blueGrey600()}`,\n borderRadius: '4px',\n lineHeight: `${theme.spacing.unit * LINE_HEIGHT_MULTIPLIER}px`,\n },\n print: {\n border: `dashed 2px ${color.blueGrey600()}`,\n borderRadius: '4px',\n lineHeight: `${theme.spacing.unit * LINE_HEIGHT_MULTIPLIER}px`,\n color: color.text(),\n },\n custom: {\n display: 'initial',\n },\n commonTokenStyle: {\n position: 'relative',\n borderRadius: '4px',\n color: theme.palette.common.black,\n lineHeight: `${theme.spacing.unit * CORRECTNESS_LINE_HEIGHT_MULTIPLIER + CORRECTNESS_PADDING}px`,\n padding: `${CORRECTNESS_PADDING}px`,\n },\n correct: {\n border: `${color.correctTertiary()} solid 2px`,\n },\n incorrect: {\n border: `${color.incorrectWithIcon()} solid 2px`,\n },\n missing: {\n border: `${color.incorrectWithIcon()} dashed 2px`,\n },\n incorrectIcon: {\n backgroundColor: color.incorrectWithIcon(),\n },\n correctIcon: {\n backgroundColor: color.correctTertiary(),\n },\n correctnessIndicatorIcon: {\n color: color.white(),\n position: 'absolute',\n top: '-8px',\n left: '-8px',\n borderRadius: '50%',\n fontSize: '12px',\n padding: '2px',\n },\n };\n})(Token);\n"],"file":"token.js"}
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.words = exports.sort = exports.sentences = exports.paragraphs = exports.normalize = exports.intersection = exports.handleSentence = void 0;
|
|
9
|
+
|
|
10
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
+
|
|
12
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
+
|
|
14
|
+
var _compact = _interopRequireDefault(require("lodash/compact"));
|
|
15
|
+
|
|
16
|
+
var _parseEnglish = _interopRequireDefault(require("@pie-framework/parse-english"));
|
|
17
|
+
|
|
18
|
+
var _clone = _interopRequireDefault(require("lodash/clone"));
|
|
19
|
+
|
|
20
|
+
var g = function g(str, node) {
|
|
21
|
+
if (node.children) {
|
|
22
|
+
return node.children.reduce(g, str);
|
|
23
|
+
} else if (node.value) {
|
|
24
|
+
return str + node.value;
|
|
25
|
+
} else {
|
|
26
|
+
return str;
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
var getParagraph = function getParagraph(p) {
|
|
31
|
+
return g('', p);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
var getSentence = function getSentence(s) {
|
|
35
|
+
return g('', s);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
var getWord = function getWord(w) {
|
|
39
|
+
return g('', w);
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
var paragraphs = function paragraphs(text) {
|
|
43
|
+
var tree = new _parseEnglish["default"]().parse(text);
|
|
44
|
+
var out = tree.children.reduce(function (acc, child) {
|
|
45
|
+
if (child.type === 'ParagraphNode') {
|
|
46
|
+
var paragraph = {
|
|
47
|
+
text: getParagraph(child),
|
|
48
|
+
start: child.position.start.offset,
|
|
49
|
+
end: child.position.end.offset
|
|
50
|
+
};
|
|
51
|
+
return acc.concat([paragraph]);
|
|
52
|
+
} else {
|
|
53
|
+
return acc;
|
|
54
|
+
}
|
|
55
|
+
}, []);
|
|
56
|
+
return out;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
exports.paragraphs = paragraphs;
|
|
60
|
+
|
|
61
|
+
var handleSentence = function handleSentence(child, acc) {
|
|
62
|
+
var sentenceChilds = []; // we parse the children of the sentence
|
|
63
|
+
|
|
64
|
+
var newAcc = child.children.reduce(function (acc, child) {
|
|
65
|
+
// if we find a whitespace node that's \n, we end the sentence
|
|
66
|
+
if (child.type === 'WhiteSpaceNode' && child.value === '\n') {
|
|
67
|
+
if (sentenceChilds.length) {
|
|
68
|
+
var firstWord = sentenceChilds[0]; // we create a sentence starting from the first word until the new line
|
|
69
|
+
|
|
70
|
+
var sentence = {
|
|
71
|
+
text: sentenceChilds.map(function (d) {
|
|
72
|
+
return getSentence(d);
|
|
73
|
+
}).join(''),
|
|
74
|
+
start: firstWord.position.start.offset,
|
|
75
|
+
end: child.position.start.offset
|
|
76
|
+
}; // we remove all the elements from the array
|
|
77
|
+
|
|
78
|
+
sentenceChilds.splice(0, sentenceChilds.length);
|
|
79
|
+
return acc.concat([sentence]);
|
|
80
|
+
}
|
|
81
|
+
} else {
|
|
82
|
+
// otherwise we add it to the array that contains the child forming a sentence
|
|
83
|
+
sentenceChilds.push(child);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return acc;
|
|
87
|
+
}, acc); // we treat the case when no \n character is found at the end
|
|
88
|
+
// so we create a sentence from the last words or white spaces found
|
|
89
|
+
|
|
90
|
+
if (sentenceChilds.length) {
|
|
91
|
+
var firstWord = sentenceChilds[0];
|
|
92
|
+
var lastWord = sentenceChilds[sentenceChilds.length - 1];
|
|
93
|
+
var sentence = {
|
|
94
|
+
text: sentenceChilds.map(function (d) {
|
|
95
|
+
return getSentence(d);
|
|
96
|
+
}).join(''),
|
|
97
|
+
start: firstWord.position.start.offset,
|
|
98
|
+
end: lastWord.position.end.offset
|
|
99
|
+
};
|
|
100
|
+
newAcc = newAcc.concat([sentence]);
|
|
101
|
+
sentenceChilds.splice(0, sentenceChilds.length);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return newAcc;
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
exports.handleSentence = handleSentence;
|
|
108
|
+
|
|
109
|
+
var sentences = function sentences(text) {
|
|
110
|
+
var tree = new _parseEnglish["default"]().parse(text);
|
|
111
|
+
var out = tree.children.reduce(function (acc, child) {
|
|
112
|
+
if (child.type === 'ParagraphNode') {
|
|
113
|
+
return child.children.reduce(function (acc, child) {
|
|
114
|
+
if (child.type === 'SentenceNode') {
|
|
115
|
+
var newAcc = handleSentence(child, acc);
|
|
116
|
+
return newAcc || acc;
|
|
117
|
+
} else {
|
|
118
|
+
return acc;
|
|
119
|
+
}
|
|
120
|
+
}, acc);
|
|
121
|
+
} else {
|
|
122
|
+
return acc;
|
|
123
|
+
}
|
|
124
|
+
}, []);
|
|
125
|
+
return out;
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
exports.sentences = sentences;
|
|
129
|
+
|
|
130
|
+
var words = function words(text) {
|
|
131
|
+
var tree = new _parseEnglish["default"]().parse(text);
|
|
132
|
+
var out = tree.children.reduce(function (acc, child) {
|
|
133
|
+
if (child.type === 'ParagraphNode') {
|
|
134
|
+
return child.children.reduce(function (acc, child) {
|
|
135
|
+
if (child.type === 'SentenceNode') {
|
|
136
|
+
return child.children.reduce(function (acc, child) {
|
|
137
|
+
if (child.type === 'WordNode') {
|
|
138
|
+
var node = {
|
|
139
|
+
text: getWord(child),
|
|
140
|
+
start: child.position.start.offset,
|
|
141
|
+
end: child.position.end.offset
|
|
142
|
+
};
|
|
143
|
+
return acc.concat([node]);
|
|
144
|
+
} else {
|
|
145
|
+
return acc;
|
|
146
|
+
}
|
|
147
|
+
}, acc);
|
|
148
|
+
} else {
|
|
149
|
+
return acc;
|
|
150
|
+
}
|
|
151
|
+
}, acc);
|
|
152
|
+
} else {
|
|
153
|
+
return acc;
|
|
154
|
+
}
|
|
155
|
+
}, []);
|
|
156
|
+
return out;
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
exports.words = words;
|
|
160
|
+
|
|
161
|
+
var Intersection = /*#__PURE__*/function () {
|
|
162
|
+
function Intersection(results) {
|
|
163
|
+
(0, _classCallCheck2["default"])(this, Intersection);
|
|
164
|
+
this.results = results;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
(0, _createClass2["default"])(Intersection, [{
|
|
168
|
+
key: "hasOverlap",
|
|
169
|
+
get: function get() {
|
|
170
|
+
return this.results.filter(function (r) {
|
|
171
|
+
return r.type === 'overlap';
|
|
172
|
+
}).length > 0;
|
|
173
|
+
}
|
|
174
|
+
}, {
|
|
175
|
+
key: "surroundedTokens",
|
|
176
|
+
get: function get() {
|
|
177
|
+
return this.results.filter(function (r) {
|
|
178
|
+
return r.type === 'within-selection';
|
|
179
|
+
}).map(function (t) {
|
|
180
|
+
return t.token;
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
}]);
|
|
184
|
+
return Intersection;
|
|
185
|
+
}();
|
|
186
|
+
/**
|
|
187
|
+
* get intersection info for the selection in relation to tokens.
|
|
188
|
+
* @param {{start: number, end: number}} selection
|
|
189
|
+
* @param {{start: number, end: number}[]} tokens
|
|
190
|
+
* @return {tokens: [], type: 'overlap|no-overlap|contains'}
|
|
191
|
+
*/
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
var intersection = function intersection(selection, tokens) {
|
|
195
|
+
var start = selection.start,
|
|
196
|
+
end = selection.end;
|
|
197
|
+
|
|
198
|
+
var startsWithin = function startsWithin(t) {
|
|
199
|
+
return start >= t.start && start < t.end;
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
var endsWithin = function endsWithin(t) {
|
|
203
|
+
return end > t.start && end <= t.end;
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
var mapped = tokens.map(function (t) {
|
|
207
|
+
if (start === t.start && end === t.end) {
|
|
208
|
+
return {
|
|
209
|
+
token: t,
|
|
210
|
+
type: 'exact-fit'
|
|
211
|
+
};
|
|
212
|
+
} else if (start <= t.start && end >= t.end) {
|
|
213
|
+
return {
|
|
214
|
+
token: t,
|
|
215
|
+
type: 'within-selection'
|
|
216
|
+
};
|
|
217
|
+
} else if (startsWithin(t) || endsWithin(t)) {
|
|
218
|
+
return {
|
|
219
|
+
token: t,
|
|
220
|
+
type: 'overlap'
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
return new Intersection((0, _compact["default"])(mapped));
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
exports.intersection = intersection;
|
|
228
|
+
|
|
229
|
+
var sort = function sort(tokens) {
|
|
230
|
+
if (!Array.isArray(tokens)) {
|
|
231
|
+
return tokens;
|
|
232
|
+
} else {
|
|
233
|
+
var out = (0, _clone["default"])(tokens);
|
|
234
|
+
out.sort(function (a, b) {
|
|
235
|
+
var s = a.start < b.start ? -1 : a.start > b.start ? 1 : 0;
|
|
236
|
+
var e = a.end < b.end ? -1 : a.end > b.end ? 1 : 0;
|
|
237
|
+
|
|
238
|
+
if (s === -1 && e !== -1) {
|
|
239
|
+
throw new Error("sort does not support intersecting tokens. a: ".concat(a.start, "-").concat(a.end, ", b: ").concat(b.start, "-").concat(b.end));
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
return s;
|
|
243
|
+
});
|
|
244
|
+
return out;
|
|
245
|
+
}
|
|
246
|
+
};
|
|
247
|
+
|
|
248
|
+
exports.sort = sort;
|
|
249
|
+
|
|
250
|
+
var normalize = function normalize(textToNormalize, tokens) {
|
|
251
|
+
// making sure text provided is a string
|
|
252
|
+
var text = textToNormalize || '';
|
|
253
|
+
|
|
254
|
+
if (!Array.isArray(tokens) || tokens.length === 0) {
|
|
255
|
+
return [{
|
|
256
|
+
text: text,
|
|
257
|
+
start: 0,
|
|
258
|
+
end: text.length
|
|
259
|
+
}];
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
var out = sort(tokens).reduce(function (acc, t, index, outer) {
|
|
263
|
+
var tokens = [];
|
|
264
|
+
var lastIndex = acc.lastIndex;
|
|
265
|
+
|
|
266
|
+
if (t.start === lastIndex) {
|
|
267
|
+
tokens = [{
|
|
268
|
+
text: text.substring(lastIndex, t.end),
|
|
269
|
+
start: lastIndex,
|
|
270
|
+
end: t.end,
|
|
271
|
+
predefined: true,
|
|
272
|
+
correct: t.correct,
|
|
273
|
+
isMissing: t.isMissing
|
|
274
|
+
}];
|
|
275
|
+
} else if (lastIndex < t.start) {
|
|
276
|
+
tokens = [{
|
|
277
|
+
text: text.substring(lastIndex, t.start),
|
|
278
|
+
start: lastIndex,
|
|
279
|
+
end: t.start
|
|
280
|
+
}, {
|
|
281
|
+
text: text.substring(t.start, t.end),
|
|
282
|
+
start: t.start,
|
|
283
|
+
end: t.end,
|
|
284
|
+
predefined: true,
|
|
285
|
+
correct: t.correct,
|
|
286
|
+
isMissing: t.isMissing
|
|
287
|
+
}];
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
if (index === outer.length - 1 && t.end < text.length) {
|
|
291
|
+
var last = {
|
|
292
|
+
text: text.substring(t.end),
|
|
293
|
+
start: t.end,
|
|
294
|
+
end: text.length
|
|
295
|
+
};
|
|
296
|
+
tokens.push(last);
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
return {
|
|
300
|
+
lastIndex: tokens.length ? tokens[tokens.length - 1].end : lastIndex,
|
|
301
|
+
result: acc.result.concat(tokens)
|
|
302
|
+
};
|
|
303
|
+
}, {
|
|
304
|
+
result: [],
|
|
305
|
+
lastIndex: 0
|
|
306
|
+
});
|
|
307
|
+
return out.result;
|
|
308
|
+
};
|
|
309
|
+
|
|
310
|
+
exports.normalize = normalize;
|
|
311
|
+
//# sourceMappingURL=builder.js.map
|