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

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.
@@ -0,0 +1,137 @@
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.Controls = 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 _Button = _interopRequireDefault(require("@material-ui/core/Button"));
27
+
28
+ var _styles = require("@material-ui/core/styles");
29
+
30
+ var _Switch = _interopRequireDefault(require("@material-ui/core/Switch"));
31
+
32
+ var _FormControlLabel = _interopRequireDefault(require("@material-ui/core/FormControlLabel"));
33
+
34
+ var _renderUi = require("@pie-lib/render-ui");
35
+
36
+ var _classnames = _interopRequireDefault(require("classnames"));
37
+
38
+ 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); }; }
39
+
40
+ 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; } }
41
+
42
+ var Controls = /*#__PURE__*/function (_React$Component) {
43
+ (0, _inherits2["default"])(Controls, _React$Component);
44
+
45
+ var _super = _createSuper(Controls);
46
+
47
+ function Controls() {
48
+ (0, _classCallCheck2["default"])(this, Controls);
49
+ return _super.apply(this, arguments);
50
+ }
51
+
52
+ (0, _createClass2["default"])(Controls, [{
53
+ key: "render",
54
+ value: function render() {
55
+ var _this$props = this.props,
56
+ classes = _this$props.classes,
57
+ onClear = _this$props.onClear,
58
+ onWords = _this$props.onWords,
59
+ onSentences = _this$props.onSentences,
60
+ onParagraphs = _this$props.onParagraphs,
61
+ setCorrectMode = _this$props.setCorrectMode,
62
+ onToggleCorrectMode = _this$props.onToggleCorrectMode;
63
+ return /*#__PURE__*/_react["default"].createElement("div", {
64
+ className: classes.controls
65
+ }, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_Button["default"], {
66
+ onClick: onWords,
67
+ className: classes.button,
68
+ size: "small",
69
+ color: "primary",
70
+ disabled: setCorrectMode
71
+ }, "Words"), /*#__PURE__*/_react["default"].createElement(_Button["default"], {
72
+ onClick: onSentences,
73
+ className: classes.button,
74
+ size: "small",
75
+ color: "primary",
76
+ disabled: setCorrectMode
77
+ }, "Sentences"), /*#__PURE__*/_react["default"].createElement(_Button["default"], {
78
+ onClick: onParagraphs,
79
+ className: classes.button,
80
+ size: "small",
81
+ color: "primary",
82
+ disabled: setCorrectMode
83
+ }, "Paragraphs"), /*#__PURE__*/_react["default"].createElement(_Button["default"], {
84
+ className: classes.button,
85
+ size: "small",
86
+ color: "secondary",
87
+ onClick: onClear,
88
+ disabled: setCorrectMode
89
+ }, "Clear")), /*#__PURE__*/_react["default"].createElement(_FormControlLabel["default"], {
90
+ control: /*#__PURE__*/_react["default"].createElement(_Switch["default"], {
91
+ classes: {
92
+ checked: classes.checkedThumb,
93
+ bar: (0, _classnames["default"])((0, _defineProperty2["default"])({}, classes.checkedBar, setCorrectMode))
94
+ },
95
+ checked: setCorrectMode,
96
+ onChange: onToggleCorrectMode
97
+ }),
98
+ label: "Set correct answers"
99
+ }));
100
+ }
101
+ }]);
102
+ return Controls;
103
+ }(_react["default"].Component);
104
+
105
+ exports.Controls = Controls;
106
+ (0, _defineProperty2["default"])(Controls, "propTypes", {
107
+ classes: _propTypes["default"].object.isRequired,
108
+ onClear: _propTypes["default"].func.isRequired,
109
+ onWords: _propTypes["default"].func.isRequired,
110
+ onSentences: _propTypes["default"].func.isRequired,
111
+ onParagraphs: _propTypes["default"].func.isRequired,
112
+ setCorrectMode: _propTypes["default"].bool.isRequired,
113
+ onToggleCorrectMode: _propTypes["default"].func.isRequired
114
+ });
115
+ (0, _defineProperty2["default"])(Controls, "defaultProps", {});
116
+
117
+ var _default = (0, _styles.withStyles)(function (theme) {
118
+ return {
119
+ button: {
120
+ marginRight: theme.spacing.unit
121
+ },
122
+ controls: {
123
+ display: 'flex',
124
+ alignItems: 'center',
125
+ justifyContent: 'space-between'
126
+ },
127
+ checkedThumb: {
128
+ color: "".concat(_renderUi.color.tertiary(), " !important")
129
+ },
130
+ checkedBar: {
131
+ backgroundColor: "".concat(_renderUi.color.tertiaryLight(), " !important")
132
+ }
133
+ };
134
+ })(Controls);
135
+
136
+ exports["default"] = _default;
137
+ //# sourceMappingURL=controls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/tokenizer/controls.jsx"],"names":["Controls","props","classes","onClear","onWords","onSentences","onParagraphs","setCorrectMode","onToggleCorrectMode","controls","button","checked","checkedThumb","bar","checkedBar","React","Component","PropTypes","object","isRequired","func","bool","theme","marginRight","spacing","unit","display","alignItems","justifyContent","color","tertiary","backgroundColor","tertiaryLight"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport Button from '@material-ui/core/Button';\nimport { withStyles } from '@material-ui/core/styles';\nimport Switch from '@material-ui/core/Switch';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport { color } from '@pie-lib/render-ui';\nimport classNames from 'classnames';\n\nexport class Controls extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n onClear: PropTypes.func.isRequired,\n onWords: PropTypes.func.isRequired,\n onSentences: PropTypes.func.isRequired,\n onParagraphs: PropTypes.func.isRequired,\n setCorrectMode: PropTypes.bool.isRequired,\n onToggleCorrectMode: PropTypes.func.isRequired,\n };\n\n static defaultProps = {};\n\n render() {\n const { classes, onClear, onWords, onSentences, onParagraphs, setCorrectMode, onToggleCorrectMode } = this.props;\n\n return (\n <div className={classes.controls}>\n <div>\n <Button onClick={onWords} className={classes.button} size=\"small\" color=\"primary\" disabled={setCorrectMode}>\n Words\n </Button>\n <Button\n onClick={onSentences}\n className={classes.button}\n size=\"small\"\n color=\"primary\"\n disabled={setCorrectMode}\n >\n Sentences\n </Button>\n <Button\n onClick={onParagraphs}\n className={classes.button}\n size=\"small\"\n color=\"primary\"\n disabled={setCorrectMode}\n >\n Paragraphs\n </Button>\n <Button className={classes.button} size=\"small\" color=\"secondary\" onClick={onClear} disabled={setCorrectMode}>\n Clear\n </Button>\n </div>\n <FormControlLabel\n control={\n <Switch\n classes={{\n checked: classes.checkedThumb,\n bar: classNames({\n [classes.checkedBar]: setCorrectMode,\n }),\n }}\n checked={setCorrectMode}\n onChange={onToggleCorrectMode}\n />\n }\n label=\"Set correct answers\"\n />\n </div>\n );\n }\n}\nexport default withStyles((theme) => ({\n button: {\n marginRight: theme.spacing.unit,\n },\n controls: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n checkedThumb: {\n color: `${color.tertiary()} !important`,\n },\n checkedBar: {\n backgroundColor: `${color.tertiaryLight()} !important`,\n },\n}))(Controls);\n"],"file":"controls.js"}
@@ -0,0 +1,205 @@
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.Tokenizer = 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 _controls = _interopRequireDefault(require("./controls"));
29
+
30
+ var _styles = require("@material-ui/core/styles");
31
+
32
+ var _builder = require("./builder");
33
+
34
+ var _clone = _interopRequireDefault(require("lodash/clone"));
35
+
36
+ var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
37
+
38
+ var _differenceWith = _interopRequireDefault(require("lodash/differenceWith"));
39
+
40
+ var _classnames = _interopRequireDefault(require("classnames"));
41
+
42
+ var _styleUtils = require("@pie-lib/style-utils");
43
+
44
+ var _tokenText = _interopRequireDefault(require("./token-text"));
45
+
46
+ 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; }
47
+
48
+ 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; }
49
+
50
+ 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); }; }
51
+
52
+ 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; } }
53
+
54
+ var Tokenizer = /*#__PURE__*/function (_React$Component) {
55
+ (0, _inherits2["default"])(Tokenizer, _React$Component);
56
+
57
+ var _super = _createSuper(Tokenizer);
58
+
59
+ function Tokenizer(props) {
60
+ var _this;
61
+
62
+ (0, _classCallCheck2["default"])(this, Tokenizer);
63
+ _this = _super.call(this, props);
64
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onChangeHandler", function (token, mode) {
65
+ _this.props.onChange(token, mode);
66
+
67
+ _this.setState({
68
+ mode: mode
69
+ });
70
+ });
71
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "toggleCorrectMode", function () {
72
+ return _this.setState({
73
+ setCorrectMode: !_this.state.setCorrectMode
74
+ });
75
+ });
76
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "clear", function () {
77
+ _this.onChangeHandler([], '');
78
+ });
79
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "buildTokens", function (type, fn) {
80
+ var text = _this.props.text;
81
+ var tokens = fn(text);
82
+
83
+ _this.onChangeHandler(tokens, type);
84
+ });
85
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "selectToken", function (newToken, tokensToRemove) {
86
+ var tokens = _this.props.tokens;
87
+ var update = (0, _differenceWith["default"])((0, _clone["default"])(tokens), tokensToRemove, _isEqual["default"]);
88
+ update.push(newToken);
89
+
90
+ _this.onChangeHandler(update, _this.state.mode);
91
+ });
92
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "tokenClick", function (token) {
93
+ var setCorrectMode = _this.state.setCorrectMode;
94
+
95
+ if (setCorrectMode) {
96
+ _this.setCorrect(token);
97
+ } else {
98
+ _this.removeToken(token);
99
+ }
100
+ });
101
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "tokenIndex", function (token) {
102
+ var tokens = _this.props.tokens;
103
+ return tokens.findIndex(function (t) {
104
+ return t.text == token.text && t.start == token.start && t.end == token.end;
105
+ });
106
+ });
107
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "setCorrect", function (token) {
108
+ var tokens = _this.props.tokens;
109
+
110
+ var index = _this.tokenIndex(token);
111
+
112
+ if (index !== -1) {
113
+ var t = tokens[index];
114
+ t.correct = !t.correct;
115
+ var update = (0, _clone["default"])(tokens);
116
+ update.splice(index, 1, t);
117
+
118
+ _this.onChangeHandler(update, _this.state.mode);
119
+ }
120
+ });
121
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "removeToken", function (token) {
122
+ var tokens = _this.props.tokens;
123
+
124
+ var index = _this.tokenIndex(token);
125
+
126
+ if (index !== -1) {
127
+ var update = (0, _clone["default"])(tokens);
128
+ update.splice(index, 1);
129
+
130
+ _this.onChangeHandler(update, _this.state.mode);
131
+ }
132
+ });
133
+ _this.state = {
134
+ setCorrectMode: false,
135
+ mode: ''
136
+ };
137
+ return _this;
138
+ }
139
+
140
+ (0, _createClass2["default"])(Tokenizer, [{
141
+ key: "render",
142
+ value: function render() {
143
+ var _this2 = this;
144
+
145
+ var _this$props = this.props,
146
+ text = _this$props.text,
147
+ tokens = _this$props.tokens,
148
+ classes = _this$props.classes,
149
+ className = _this$props.className;
150
+ var setCorrectMode = this.state.setCorrectMode;
151
+ var tokenClassName = (0, _classnames["default"])(classes.text, setCorrectMode && classes.noselect);
152
+ var rootName = (0, _classnames["default"])(classes.tokenizer, className);
153
+ return /*#__PURE__*/_react["default"].createElement("div", {
154
+ className: rootName
155
+ }, /*#__PURE__*/_react["default"].createElement(_controls["default"], {
156
+ onClear: this.clear,
157
+ onWords: function onWords() {
158
+ return _this2.buildTokens('words', _builder.words);
159
+ },
160
+ onSentences: function onSentences() {
161
+ return _this2.buildTokens('sentence', _builder.sentences);
162
+ },
163
+ onParagraphs: function onParagraphs() {
164
+ return _this2.buildTokens('paragraphs', _builder.paragraphs);
165
+ },
166
+ setCorrectMode: setCorrectMode,
167
+ onToggleCorrectMode: this.toggleCorrectMode
168
+ }), /*#__PURE__*/_react["default"].createElement(_tokenText["default"], {
169
+ className: tokenClassName,
170
+ text: text,
171
+ tokens: tokens,
172
+ onTokenClick: this.tokenClick,
173
+ onSelectToken: this.selectToken
174
+ }));
175
+ }
176
+ }]);
177
+ return Tokenizer;
178
+ }(_react["default"].Component);
179
+
180
+ exports.Tokenizer = Tokenizer;
181
+ (0, _defineProperty2["default"])(Tokenizer, "propTypes", {
182
+ text: _propTypes["default"].string.isRequired,
183
+ tokens: _propTypes["default"].arrayOf(_propTypes["default"].shape({
184
+ text: _propTypes["default"].string,
185
+ correct: _propTypes["default"].bool,
186
+ start: _propTypes["default"].number,
187
+ end: _propTypes["default"].number
188
+ })),
189
+ classes: _propTypes["default"].object.isRequired,
190
+ className: _propTypes["default"].string,
191
+ onChange: _propTypes["default"].func.isRequired
192
+ });
193
+ (0, _defineProperty2["default"])(Tokenizer, "defaultProps", {});
194
+
195
+ var _default = (0, _styles.withStyles)(function () {
196
+ return {
197
+ text: {
198
+ whiteSpace: 'pre-wrap'
199
+ },
200
+ noselect: _objectSpread({}, (0, _styleUtils.noSelect)())
201
+ };
202
+ })(Tokenizer);
203
+
204
+ exports["default"] = _default;
205
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/tokenizer/index.jsx"],"names":["Tokenizer","props","token","mode","onChange","setState","setCorrectMode","state","onChangeHandler","type","fn","text","tokens","newToken","tokensToRemove","update","isEqual","push","setCorrect","removeToken","findIndex","t","start","end","index","tokenIndex","correct","splice","classes","className","tokenClassName","noselect","rootName","tokenizer","clear","buildTokens","words","sentences","paragraphs","toggleCorrectMode","tokenClick","selectToken","React","Component","PropTypes","string","isRequired","arrayOf","shape","bool","number","object","func","whiteSpace"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport Controls from './controls';\nimport { withStyles } from '@material-ui/core/styles';\nimport { words, sentences, paragraphs } from './builder';\nimport clone from 'lodash/clone';\nimport isEqual from 'lodash/isEqual';\nimport differenceWith from 'lodash/differenceWith';\nimport classNames from 'classnames';\nimport { noSelect } from '@pie-lib/style-utils';\nimport TokenText from './token-text';\n\nexport class Tokenizer extends React.Component {\n static propTypes = {\n text: PropTypes.string.isRequired,\n tokens: PropTypes.arrayOf(\n PropTypes.shape({\n text: PropTypes.string,\n correct: PropTypes.bool,\n start: PropTypes.number,\n end: PropTypes.number,\n }),\n ),\n classes: PropTypes.object.isRequired,\n className: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n };\n\n static defaultProps = {};\n\n constructor(props) {\n super(props);\n this.state = {\n setCorrectMode: false,\n mode: '',\n };\n }\n\n onChangeHandler = (token, mode) => {\n this.props.onChange(token, mode);\n\n this.setState({\n mode,\n });\n };\n\n toggleCorrectMode = () => this.setState({ setCorrectMode: !this.state.setCorrectMode });\n\n clear = () => {\n this.onChangeHandler([], '');\n };\n\n buildTokens = (type, fn) => {\n const { text } = this.props;\n const tokens = fn(text);\n\n this.onChangeHandler(tokens, type);\n };\n\n selectToken = (newToken, tokensToRemove) => {\n const { tokens } = this.props;\n const update = differenceWith(clone(tokens), tokensToRemove, isEqual);\n\n update.push(newToken);\n this.onChangeHandler(update, this.state.mode);\n };\n\n tokenClick = (token) => {\n const { setCorrectMode } = this.state;\n\n if (setCorrectMode) {\n this.setCorrect(token);\n } else {\n this.removeToken(token);\n }\n };\n\n tokenIndex = (token) => {\n const { tokens } = this.props;\n\n return tokens.findIndex((t) => {\n return t.text == token.text && t.start == token.start && t.end == token.end;\n });\n };\n\n setCorrect = (token) => {\n const { tokens } = this.props;\n const index = this.tokenIndex(token);\n if (index !== -1) {\n const t = tokens[index];\n\n t.correct = !t.correct;\n\n const update = clone(tokens);\n\n update.splice(index, 1, t);\n this.onChangeHandler(update, this.state.mode);\n }\n };\n\n removeToken = (token) => {\n const { tokens } = this.props;\n\n const index = this.tokenIndex(token);\n if (index !== -1) {\n const update = clone(tokens);\n\n update.splice(index, 1);\n\n this.onChangeHandler(update, this.state.mode);\n }\n };\n\n render() {\n const { text, tokens, classes, className } = this.props;\n const { setCorrectMode } = this.state;\n\n const tokenClassName = classNames(classes.text, setCorrectMode && classes.noselect);\n\n const rootName = classNames(classes.tokenizer, className);\n\n return (\n <div className={rootName}>\n <Controls\n onClear={this.clear}\n onWords={() => this.buildTokens('words', words)}\n onSentences={() => this.buildTokens('sentence', sentences)}\n onParagraphs={() => this.buildTokens('paragraphs', paragraphs)}\n setCorrectMode={setCorrectMode}\n onToggleCorrectMode={this.toggleCorrectMode}\n />\n <TokenText\n className={tokenClassName}\n text={text}\n tokens={tokens}\n onTokenClick={this.tokenClick}\n onSelectToken={this.selectToken}\n />\n </div>\n );\n }\n}\n\nexport default withStyles(() => ({\n text: {\n whiteSpace: 'pre-wrap',\n },\n noselect: { ...noSelect() },\n}))(Tokenizer);\n"],"file":"index.js"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getCaretCharacterOffsetWithin = exports.clearSelection = void 0;
7
+
8
+ var clearSelection = function clearSelection() {
9
+ if (document.getSelection) {
10
+ // for all new browsers (IE9+, Chrome, Firefox)
11
+ document.getSelection().removeAllRanges();
12
+ document.getSelection().addRange(document.createRange());
13
+ } else if (window.getSelection) {
14
+ // equals with the document.getSelection (MSDN info)
15
+ if (window.getSelection().removeAllRanges) {
16
+ // for all new browsers (IE9+, Chrome, Firefox)
17
+ window.getSelection().removeAllRanges();
18
+ window.getSelection().addRange(document.createRange());
19
+ } else if (window.getSelection().empty) {
20
+ // Chrome supports this as well
21
+ window.getSelection().empty();
22
+ }
23
+ } else if (document.selection) {
24
+ // IE8-
25
+ document.selection.empty();
26
+ }
27
+ };
28
+
29
+ exports.clearSelection = clearSelection;
30
+
31
+ var getCaretCharacterOffsetWithin = function getCaretCharacterOffsetWithin(element) {
32
+ var caretOffset = 0;
33
+ var doc = element.ownerDocument || element.document;
34
+ var win = doc.defaultView || doc.parentWindow;
35
+ var sel;
36
+
37
+ if (typeof win.getSelection !== 'undefined') {
38
+ sel = win.getSelection();
39
+
40
+ if (sel.rangeCount > 0) {
41
+ var range = win.getSelection().getRangeAt(0);
42
+ var selected = range.toString().length;
43
+ var preCaretRange = range.cloneRange();
44
+ preCaretRange.selectNodeContents(element);
45
+ preCaretRange.setEnd(range.endContainer, range.endOffset);
46
+
47
+ if (selected) {
48
+ caretOffset = preCaretRange.toString().length - selected;
49
+ } else {
50
+ caretOffset = preCaretRange.toString().length;
51
+ }
52
+ }
53
+ } else if ((sel = doc.selection) && sel.type !== 'Control') {
54
+ var textRange = sel.createRange();
55
+ var preCaretTextRange = doc.body.createTextRange();
56
+ preCaretTextRange.moveToElementText(element);
57
+ preCaretTextRange.setEndPoint('EndToEnd', textRange);
58
+ caretOffset = preCaretTextRange.text.length;
59
+ }
60
+
61
+ return caretOffset;
62
+ };
63
+
64
+ exports.getCaretCharacterOffsetWithin = getCaretCharacterOffsetWithin;
65
+ //# sourceMappingURL=selection-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/tokenizer/selection-utils.js"],"names":["clearSelection","document","getSelection","removeAllRanges","addRange","createRange","window","empty","selection","getCaretCharacterOffsetWithin","element","caretOffset","doc","ownerDocument","win","defaultView","parentWindow","sel","rangeCount","range","getRangeAt","selected","toString","length","preCaretRange","cloneRange","selectNodeContents","setEnd","endContainer","endOffset","type","textRange","preCaretTextRange","body","createTextRange","moveToElementText","setEndPoint","text"],"mappings":";;;;;;;AAAO,IAAMA,cAAc,GAAG,SAAjBA,cAAiB,GAAM;AAClC,MAAIC,QAAQ,CAACC,YAAb,EAA2B;AACzB;AACAD,IAAAA,QAAQ,CAACC,YAAT,GAAwBC,eAAxB;AACAF,IAAAA,QAAQ,CAACC,YAAT,GAAwBE,QAAxB,CAAiCH,QAAQ,CAACI,WAAT,EAAjC;AACD,GAJD,MAIO,IAAIC,MAAM,CAACJ,YAAX,EAAyB;AAC9B;AACA,QAAII,MAAM,CAACJ,YAAP,GAAsBC,eAA1B,EAA2C;AACzC;AACAG,MAAAA,MAAM,CAACJ,YAAP,GAAsBC,eAAtB;AACAG,MAAAA,MAAM,CAACJ,YAAP,GAAsBE,QAAtB,CAA+BH,QAAQ,CAACI,WAAT,EAA/B;AACD,KAJD,MAIO,IAAIC,MAAM,CAACJ,YAAP,GAAsBK,KAA1B,EAAiC;AACtC;AACAD,MAAAA,MAAM,CAACJ,YAAP,GAAsBK,KAAtB;AACD;AACF,GAVM,MAUA,IAAIN,QAAQ,CAACO,SAAb,EAAwB;AAC7B;AACAP,IAAAA,QAAQ,CAACO,SAAT,CAAmBD,KAAnB;AACD;AACF,CAnBM;;;;AAqBA,IAAME,6BAA6B,GAAG,SAAhCA,6BAAgC,CAACC,OAAD,EAAa;AACxD,MAAIC,WAAW,GAAG,CAAlB;AACA,MAAIC,GAAG,GAAGF,OAAO,CAACG,aAAR,IAAyBH,OAAO,CAACT,QAA3C;AACA,MAAIa,GAAG,GAAGF,GAAG,CAACG,WAAJ,IAAmBH,GAAG,CAACI,YAAjC;AACA,MAAIC,GAAJ;;AACA,MAAI,OAAOH,GAAG,CAACZ,YAAX,KAA4B,WAAhC,EAA6C;AAC3Ce,IAAAA,GAAG,GAAGH,GAAG,CAACZ,YAAJ,EAAN;;AACA,QAAIe,GAAG,CAACC,UAAJ,GAAiB,CAArB,EAAwB;AACtB,UAAIC,KAAK,GAAGL,GAAG,CAACZ,YAAJ,GAAmBkB,UAAnB,CAA8B,CAA9B,CAAZ;AACA,UAAIC,QAAQ,GAAGF,KAAK,CAACG,QAAN,GAAiBC,MAAhC;AACA,UAAIC,aAAa,GAAGL,KAAK,CAACM,UAAN,EAApB;AACAD,MAAAA,aAAa,CAACE,kBAAd,CAAiChB,OAAjC;AACAc,MAAAA,aAAa,CAACG,MAAd,CAAqBR,KAAK,CAACS,YAA3B,EAAyCT,KAAK,CAACU,SAA/C;;AACA,UAAIR,QAAJ,EAAc;AACZV,QAAAA,WAAW,GAAGa,aAAa,CAACF,QAAd,GAAyBC,MAAzB,GAAkCF,QAAhD;AACD,OAFD,MAEO;AACLV,QAAAA,WAAW,GAAGa,aAAa,CAACF,QAAd,GAAyBC,MAAvC;AACD;AACF;AACF,GAdD,MAcO,IAAI,CAACN,GAAG,GAAGL,GAAG,CAACJ,SAAX,KAAyBS,GAAG,CAACa,IAAJ,KAAa,SAA1C,EAAqD;AAC1D,QAAIC,SAAS,GAAGd,GAAG,CAACZ,WAAJ,EAAhB;AACA,QAAI2B,iBAAiB,GAAGpB,GAAG,CAACqB,IAAJ,CAASC,eAAT,EAAxB;AACAF,IAAAA,iBAAiB,CAACG,iBAAlB,CAAoCzB,OAApC;AACAsB,IAAAA,iBAAiB,CAACI,WAAlB,CAA8B,UAA9B,EAA0CL,SAA1C;AACApB,IAAAA,WAAW,GAAGqB,iBAAiB,CAACK,IAAlB,CAAuBd,MAArC;AACD;;AACD,SAAOZ,WAAP;AACD,CA3BM","sourcesContent":["export const clearSelection = () => {\n if (document.getSelection) {\n // for all new browsers (IE9+, Chrome, Firefox)\n document.getSelection().removeAllRanges();\n document.getSelection().addRange(document.createRange());\n } else if (window.getSelection) {\n // equals with the document.getSelection (MSDN info)\n if (window.getSelection().removeAllRanges) {\n // for all new browsers (IE9+, Chrome, Firefox)\n window.getSelection().removeAllRanges();\n window.getSelection().addRange(document.createRange());\n } else if (window.getSelection().empty) {\n // Chrome supports this as well\n window.getSelection().empty();\n }\n } else if (document.selection) {\n // IE8-\n document.selection.empty();\n }\n};\n\nexport const getCaretCharacterOffsetWithin = (element) => {\n var caretOffset = 0;\n var doc = element.ownerDocument || element.document;\n var win = doc.defaultView || doc.parentWindow;\n var sel;\n if (typeof win.getSelection !== 'undefined') {\n sel = win.getSelection();\n if (sel.rangeCount > 0) {\n var range = win.getSelection().getRangeAt(0);\n var selected = range.toString().length;\n var preCaretRange = range.cloneRange();\n preCaretRange.selectNodeContents(element);\n preCaretRange.setEnd(range.endContainer, range.endOffset);\n if (selected) {\n caretOffset = preCaretRange.toString().length - selected;\n } else {\n caretOffset = preCaretRange.toString().length;\n }\n }\n } else if ((sel = doc.selection) && sel.type !== 'Control') {\n var textRange = sel.createRange();\n var preCaretTextRange = doc.body.createTextRange();\n preCaretTextRange.moveToElementText(element);\n preCaretTextRange.setEndPoint('EndToEnd', textRange);\n caretOffset = preCaretTextRange.text.length;\n }\n return caretOffset;\n};\n"],"file":"selection-utils.js"}
@@ -0,0 +1,209 @@
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.Text = void 0;
9
+
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+
12
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
+
14
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
+
16
+ var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
17
+
18
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
19
+
20
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
21
+
22
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
23
+
24
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
25
+
26
+ var _react = _interopRequireDefault(require("react"));
27
+
28
+ var _propTypes = _interopRequireDefault(require("prop-types"));
29
+
30
+ var _styles = require("@material-ui/core/styles");
31
+
32
+ var _builder = require("./builder");
33
+
34
+ var _yellow = _interopRequireDefault(require("@material-ui/core/colors/yellow"));
35
+
36
+ var _green = _interopRequireDefault(require("@material-ui/core/colors/green"));
37
+
38
+ var _debug = _interopRequireDefault(require("debug"));
39
+
40
+ var _classnames = _interopRequireDefault(require("classnames"));
41
+
42
+ var _selectionUtils = require("./selection-utils");
43
+
44
+ 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); }; }
45
+
46
+ 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; } }
47
+
48
+ var log = (0, _debug["default"])('@pie-lib:text-select:token-text');
49
+ var Text = (0, _styles.withStyles)(function () {
50
+ return {
51
+ predefined: {
52
+ cursor: 'pointer',
53
+ backgroundColor: _yellow["default"][100],
54
+ border: "dashed 0px ".concat(_yellow["default"][700]),
55
+ // we need this for nested tokenized elements like paragraphs, where p is inside span
56
+ '& *': {
57
+ cursor: 'pointer',
58
+ backgroundColor: _yellow["default"][100],
59
+ border: "dashed 0px ".concat(_yellow["default"][700])
60
+ }
61
+ },
62
+ correct: {
63
+ backgroundColor: _green["default"][500],
64
+ '& *': {
65
+ backgroundColor: _green["default"][500]
66
+ }
67
+ }
68
+ };
69
+ })(function (_ref) {
70
+ var text = _ref.text,
71
+ predefined = _ref.predefined,
72
+ classes = _ref.classes,
73
+ onClick = _ref.onClick,
74
+ correct = _ref.correct;
75
+ var formattedText = (text || '').replace(/\n/g, '<br>');
76
+
77
+ if (predefined) {
78
+ var className = (0, _classnames["default"])(classes.predefined, correct && classes.correct);
79
+ return /*#__PURE__*/_react["default"].createElement("span", {
80
+ onClick: onClick,
81
+ className: className,
82
+ dangerouslySetInnerHTML: {
83
+ __html: formattedText
84
+ }
85
+ });
86
+ } else {
87
+ return /*#__PURE__*/_react["default"].createElement("span", {
88
+ dangerouslySetInnerHTML: {
89
+ __html: formattedText
90
+ }
91
+ });
92
+ }
93
+ });
94
+ exports.Text = Text;
95
+ var notAllowedCharacters = ['\n', ' ', '\t'];
96
+
97
+ var TokenText = /*#__PURE__*/function (_React$Component) {
98
+ (0, _inherits2["default"])(TokenText, _React$Component);
99
+
100
+ var _super = _createSuper(TokenText);
101
+
102
+ function TokenText() {
103
+ var _this;
104
+
105
+ (0, _classCallCheck2["default"])(this, TokenText);
106
+
107
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
108
+ args[_key] = arguments[_key];
109
+ }
110
+
111
+ _this = _super.call.apply(_super, [this].concat(args));
112
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onClick", function (event) {
113
+ var _this$props = _this.props,
114
+ onSelectToken = _this$props.onSelectToken,
115
+ text = _this$props.text,
116
+ tokens = _this$props.tokens;
117
+ event.preventDefault();
118
+
119
+ if (typeof window === 'undefined') {
120
+ return;
121
+ }
122
+
123
+ var selection = window.getSelection();
124
+ var textSelected = selection.toString();
125
+
126
+ if (textSelected.length > 0 && notAllowedCharacters.indexOf(textSelected) < 0) {
127
+ if (_this.root) {
128
+ var offset = (0, _selectionUtils.getCaretCharacterOffsetWithin)(_this.root);
129
+ /*
130
+ Since we implemented new line functionality (\n) using <br /> dom elements
131
+ and window.getSelection is not taking that into consideration, the offset might
132
+ be off by a few characters.
133
+ To combat that, we check if the selected text is right at the beginning of the offset.
134
+ If it's not, we add the additional offset in order for that to be accurate
135
+ */
136
+
137
+ var newLineOffset = text.slice(offset).indexOf(textSelected);
138
+ offset += newLineOffset;
139
+
140
+ if (offset !== undefined) {
141
+ var endIndex = offset + textSelected.length;
142
+
143
+ if (endIndex <= text.length) {
144
+ var i = (0, _builder.intersection)({
145
+ start: offset,
146
+ end: endIndex
147
+ }, tokens);
148
+
149
+ if (i.hasOverlap) {
150
+ log('hasOverlap - do nothing');
151
+ (0, _selectionUtils.clearSelection)();
152
+ } else {
153
+ var tokensToRemove = i.surroundedTokens;
154
+ var token = {
155
+ text: textSelected,
156
+ start: offset,
157
+ end: endIndex
158
+ };
159
+ onSelectToken(token, tokensToRemove);
160
+ (0, _selectionUtils.clearSelection)();
161
+ }
162
+ }
163
+ }
164
+ }
165
+ }
166
+ });
167
+ return _this;
168
+ }
169
+
170
+ (0, _createClass2["default"])(TokenText, [{
171
+ key: "render",
172
+ value: function render() {
173
+ var _this2 = this;
174
+
175
+ var _this$props2 = this.props,
176
+ text = _this$props2.text,
177
+ tokens = _this$props2.tokens,
178
+ className = _this$props2.className,
179
+ onTokenClick = _this$props2.onTokenClick;
180
+ var normalized = (0, _builder.normalize)(text, tokens);
181
+ return /*#__PURE__*/_react["default"].createElement("div", {
182
+ className: className,
183
+ ref: function ref(r) {
184
+ return _this2.root = r;
185
+ },
186
+ onClick: this.onClick
187
+ }, normalized.map(function (t, index) {
188
+ return /*#__PURE__*/_react["default"].createElement(Text, (0, _extends2["default"])({
189
+ key: index
190
+ }, t, {
191
+ onClick: function onClick() {
192
+ return onTokenClick(t);
193
+ }
194
+ }));
195
+ }));
196
+ }
197
+ }]);
198
+ return TokenText;
199
+ }(_react["default"].Component);
200
+
201
+ exports["default"] = TokenText;
202
+ (0, _defineProperty2["default"])(TokenText, "propTypes", {
203
+ text: _propTypes["default"].string.isRequired,
204
+ tokens: _propTypes["default"].array.isRequired,
205
+ onTokenClick: _propTypes["default"].func.isRequired,
206
+ onSelectToken: _propTypes["default"].func.isRequired,
207
+ className: _propTypes["default"].string
208
+ });
209
+ //# sourceMappingURL=token-text.js.map