@pie-lib/math-input-mathlive 1.0.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/README.md +119 -0
- package/lib/__tests__/index.test.js +118 -0
- package/lib/__tests__/index.test.js.map +1 -0
- package/lib/__tests__/latex-bridge.test.js +186 -0
- package/lib/__tests__/latex-bridge.test.js.map +1 -0
- package/lib/__tests__/mathlive-instance.test.js +137 -0
- package/lib/__tests__/mathlive-instance.test.js.map +1 -0
- package/lib/horizontal-keypad.js +101 -0
- package/lib/horizontal-keypad.js.map +1 -0
- package/lib/index.js +143 -0
- package/lib/index.js.map +1 -0
- package/lib/keypad/index.js +365 -0
- package/lib/keypad/index.js.map +1 -0
- package/lib/keypad/keys-layout.js +22 -0
- package/lib/keypad/keys-layout.js.map +1 -0
- package/lib/keys/basic-operators.js +33 -0
- package/lib/keys/basic-operators.js.map +1 -0
- package/lib/keys/chars.js +12 -0
- package/lib/keys/chars.js.map +1 -0
- package/lib/keys/comparison.js +39 -0
- package/lib/keys/comparison.js.map +1 -0
- package/lib/keys/constants.js +37 -0
- package/lib/keys/constants.js.map +1 -0
- package/lib/keys/digits.js +46 -0
- package/lib/keys/digits.js.map +1 -0
- package/lib/keys/edit.js +14 -0
- package/lib/keys/edit.js.map +1 -0
- package/lib/keys/exponent.js +30 -0
- package/lib/keys/exponent.js.map +1 -0
- package/lib/keys/fractions.js +29 -0
- package/lib/keys/fractions.js.map +1 -0
- package/lib/keys/geometry.js +140 -0
- package/lib/keys/geometry.js.map +1 -0
- package/lib/keys/grades.js +259 -0
- package/lib/keys/grades.js.map +1 -0
- package/lib/keys/index.js +35 -0
- package/lib/keys/index.js.map +1 -0
- package/lib/keys/log.js +27 -0
- package/lib/keys/log.js.map +1 -0
- package/lib/keys/logic.js +19 -0
- package/lib/keys/logic.js.map +1 -0
- package/lib/keys/matrices.js +19 -0
- package/lib/keys/matrices.js.map +1 -0
- package/lib/keys/misc.js +62 -0
- package/lib/keys/misc.js.map +1 -0
- package/lib/keys/navigation.js +20 -0
- package/lib/keys/navigation.js.map +1 -0
- package/lib/keys/operators.js +15 -0
- package/lib/keys/operators.js.map +1 -0
- package/lib/keys/statistics.js +40 -0
- package/lib/keys/statistics.js.map +1 -0
- package/lib/keys/sub-sup.js +19 -0
- package/lib/keys/sub-sup.js.map +1 -0
- package/lib/keys/trigonometry.js +45 -0
- package/lib/keys/trigonometry.js.map +1 -0
- package/lib/keys/utils.js +87 -0
- package/lib/keys/utils.js.map +1 -0
- package/lib/keys/vars.js +24 -0
- package/lib/keys/vars.js.map +1 -0
- package/lib/latex-bridge.js +195 -0
- package/lib/latex-bridge.js.map +1 -0
- package/lib/math-input.js +143 -0
- package/lib/math-input.js.map +1 -0
- package/lib/mathlive-instance.js +319 -0
- package/lib/mathlive-instance.js.map +1 -0
- package/lib/mf/common-styles.js +111 -0
- package/lib/mf/common-styles.js.map +1 -0
- package/lib/mf/index.js +72 -0
- package/lib/mf/index.js.map +1 -0
- package/lib/mf/input.js +266 -0
- package/lib/mf/input.js.map +1 -0
- package/lib/mf/static.js +396 -0
- package/lib/mf/static.js.map +1 -0
- package/package.json +31 -0
- package/src/__tests__/index.test.jsx +109 -0
- package/src/__tests__/latex-bridge.test.js +151 -0
- package/src/__tests__/mathlive-instance.test.js +130 -0
- package/src/horizontal-keypad.jsx +73 -0
- package/src/index.jsx +63 -0
- package/src/keypad/index.jsx +335 -0
- package/src/keypad/keys-layout.js +16 -0
- package/src/keys/basic-operators.js +32 -0
- package/src/keys/chars.js +5 -0
- package/src/keys/comparison.js +28 -0
- package/src/keys/constants.js +35 -0
- package/src/keys/digits.js +40 -0
- package/src/keys/edit.js +3 -0
- package/src/keys/exponent.js +28 -0
- package/src/keys/fractions.js +26 -0
- package/src/keys/geometry.js +144 -0
- package/src/keys/grades.js +367 -0
- package/src/keys/index.js +20 -0
- package/src/keys/log.js +22 -0
- package/src/keys/logic.js +15 -0
- package/src/keys/matrices.js +15 -0
- package/src/keys/misc.js +65 -0
- package/src/keys/navigation.js +8 -0
- package/src/keys/operators.js +10 -0
- package/src/keys/statistics.js +38 -0
- package/src/keys/sub-sup.js +15 -0
- package/src/keys/trigonometry.js +15 -0
- package/src/keys/utils.js +66 -0
- package/src/keys/vars.js +19 -0
- package/src/latex-bridge.js +190 -0
- package/src/math-input.jsx +115 -0
- package/src/mathlive-instance.js +286 -0
- package/src/mf/common-styles.js +108 -0
- package/src/mf/index.js +26 -0
- package/src/mf/input.jsx +223 -0
- package/src/mf/static.jsx +358 -0
package/lib/mf/input.js
ADDED
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports["default"] = exports.Input = void 0;
|
|
8
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
10
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
12
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
13
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
14
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
15
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
16
|
+
var _react = _interopRequireDefault(require("react"));
|
|
17
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
18
|
+
var _styles = require("@mui/material/styles");
|
|
19
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
20
|
+
var _mathliveInstance = require("../mathlive-instance");
|
|
21
|
+
var _latexBridge = require("../latex-bridge");
|
|
22
|
+
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
|
|
23
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
24
|
+
var log = (0, _debug["default"])('pie-lib:math-input-mathlive:input');
|
|
25
|
+
var Holder = (0, _styles.styled)('span')({
|
|
26
|
+
display: 'inline-block',
|
|
27
|
+
'& math-field': {
|
|
28
|
+
display: 'block',
|
|
29
|
+
width: '100%'
|
|
30
|
+
},
|
|
31
|
+
// MathLive ships its own virtual keyboard toggle; pie supplies its own keypad.
|
|
32
|
+
'& math-field::part(virtual-keyboard-toggle)': {
|
|
33
|
+
display: 'none'
|
|
34
|
+
},
|
|
35
|
+
'& math-field::part(menu-toggle)': {
|
|
36
|
+
display: 'none'
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Editable math field. Drop-in replacement for @pie-lib/math-input's `mq.Input`.
|
|
42
|
+
*
|
|
43
|
+
* Keeps the same imperative surface used by MathInput's keypad
|
|
44
|
+
* (`write`, `command`, `keystroke`, `clear`, `focus`, `blur`) so callers do not
|
|
45
|
+
* change, and the same `latex` / `onChange` props.
|
|
46
|
+
*/
|
|
47
|
+
var Input = exports.Input = /*#__PURE__*/function (_React$Component) {
|
|
48
|
+
function Input(props) {
|
|
49
|
+
var _this;
|
|
50
|
+
(0, _classCallCheck2["default"])(this, Input);
|
|
51
|
+
_this = _callSuper(this, Input, [props]);
|
|
52
|
+
(0, _defineProperty2["default"])(_this, "onInputEdit", function () {
|
|
53
|
+
var onChange = _this.props.onChange;
|
|
54
|
+
if (!_this.mathField) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
var latex = (0, _latexBridge.fromMathLive)(_this.mathField.getValue('latex'));
|
|
58
|
+
_this.lastEmitted = latex;
|
|
59
|
+
if (onChange) {
|
|
60
|
+
onChange(latex);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
/**
|
|
64
|
+
* Enter must not insert a line break: math input is single-expression, and
|
|
65
|
+
* the MathQuill version swallowed charCode 13 for the same reason. Newlines
|
|
66
|
+
* are authored explicitly through the newLine embed, not the Enter key.
|
|
67
|
+
*/
|
|
68
|
+
(0, _defineProperty2["default"])(_this, "onKeyDown", function (event) {
|
|
69
|
+
if (event.key === 'Enter') {
|
|
70
|
+
event.preventDefault();
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
_this.holderRef = /*#__PURE__*/_react["default"].createRef();
|
|
74
|
+
// Tracks the last latex we emitted, so prop echoes don't reset the cursor.
|
|
75
|
+
_this.lastEmitted = undefined;
|
|
76
|
+
return _this;
|
|
77
|
+
}
|
|
78
|
+
(0, _inherits2["default"])(Input, _React$Component);
|
|
79
|
+
return (0, _createClass2["default"])(Input, [{
|
|
80
|
+
key: "componentDidMount",
|
|
81
|
+
value: function () {
|
|
82
|
+
var _componentDidMount = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
83
|
+
var _this$setState;
|
|
84
|
+
var ml;
|
|
85
|
+
return _regenerator["default"].wrap(function (_context) {
|
|
86
|
+
while (1) switch (_context.prev = _context.next) {
|
|
87
|
+
case 0:
|
|
88
|
+
_context.next = 1;
|
|
89
|
+
return (0, _mathliveInstance.loadMathLive)();
|
|
90
|
+
case 1:
|
|
91
|
+
ml = _context.sent;
|
|
92
|
+
if (!(!ml || !this.holderRef.current)) {
|
|
93
|
+
_context.next = 2;
|
|
94
|
+
break;
|
|
95
|
+
}
|
|
96
|
+
return _context.abrupt("return");
|
|
97
|
+
case 2:
|
|
98
|
+
this.mathField = new ml.MathfieldElement({
|
|
99
|
+
macros: (0, _mathliveInstance.getMacros)()
|
|
100
|
+
});
|
|
101
|
+
this.mathField.value = (0, _latexBridge.toMathLive)(this.props.latex || '');
|
|
102
|
+
if (this.props.readOnly) {
|
|
103
|
+
this.mathField.readOnly = true;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// pie drives input through its own keypad, so suppress MathLive's.
|
|
107
|
+
this.mathField.mathVirtualKeyboardPolicy = 'manual';
|
|
108
|
+
this.mathField.addEventListener('input', this.onInputEdit);
|
|
109
|
+
this.holderRef.current.appendChild(this.mathField);
|
|
110
|
+
if (this.props.innerRef) {
|
|
111
|
+
this.props.innerRef(this);
|
|
112
|
+
}
|
|
113
|
+
(_this$setState = this.setState) === null || _this$setState === void 0 || _this$setState.call(this, {});
|
|
114
|
+
case 3:
|
|
115
|
+
case "end":
|
|
116
|
+
return _context.stop();
|
|
117
|
+
}
|
|
118
|
+
}, _callee, this);
|
|
119
|
+
}));
|
|
120
|
+
function componentDidMount() {
|
|
121
|
+
return _componentDidMount.apply(this, arguments);
|
|
122
|
+
}
|
|
123
|
+
return componentDidMount;
|
|
124
|
+
}()
|
|
125
|
+
}, {
|
|
126
|
+
key: "componentDidUpdate",
|
|
127
|
+
value: function componentDidUpdate(prevProps) {
|
|
128
|
+
if (!this.mathField) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
var _this$props = this.props,
|
|
132
|
+
latex = _this$props.latex,
|
|
133
|
+
readOnly = _this$props.readOnly;
|
|
134
|
+
if (readOnly !== prevProps.readOnly) {
|
|
135
|
+
this.mathField.readOnly = !!readOnly;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Only push the prop back into the field when it genuinely differs from
|
|
139
|
+
// what the field already holds. This is the analogue of the old
|
|
140
|
+
// shouldComponentUpdate latex-equality guard and prevents cursor thrash.
|
|
141
|
+
if (latex !== undefined && latex !== null && latex !== this.lastEmitted) {
|
|
142
|
+
var next = (0, _latexBridge.toMathLive)(latex);
|
|
143
|
+
if (next !== this.mathField.value) {
|
|
144
|
+
this.mathField.value = next;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}, {
|
|
149
|
+
key: "componentWillUnmount",
|
|
150
|
+
value: function componentWillUnmount() {
|
|
151
|
+
if (this.mathField) {
|
|
152
|
+
this.mathField.removeEventListener('input', this.onInputEdit);
|
|
153
|
+
this.mathField.remove();
|
|
154
|
+
this.mathField = undefined;
|
|
155
|
+
}
|
|
156
|
+
if (this.props.innerRef) {
|
|
157
|
+
this.props.innerRef(null);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}, {
|
|
161
|
+
key: "latex",
|
|
162
|
+
value: /** Current latex, in stored (MathQuill-compatible) form. */
|
|
163
|
+
function latex() {
|
|
164
|
+
return this.mathField ? (0, _latexBridge.fromMathLive)(this.mathField.getValue('latex')) : '';
|
|
165
|
+
}
|
|
166
|
+
}, {
|
|
167
|
+
key: "clear",
|
|
168
|
+
value: function clear() {
|
|
169
|
+
if (this.mathField) {
|
|
170
|
+
this.mathField.value = '';
|
|
171
|
+
}
|
|
172
|
+
return '';
|
|
173
|
+
}
|
|
174
|
+
}, {
|
|
175
|
+
key: "blur",
|
|
176
|
+
value: function blur() {
|
|
177
|
+
log('blur mathfield');
|
|
178
|
+
this.mathField && this.mathField.blur();
|
|
179
|
+
}
|
|
180
|
+
}, {
|
|
181
|
+
key: "focus",
|
|
182
|
+
value: function focus() {
|
|
183
|
+
log('focus mathfield...');
|
|
184
|
+
this.mathField && this.mathField.focus();
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/** MathQuill `cmd()` equivalent. */
|
|
188
|
+
}, {
|
|
189
|
+
key: "command",
|
|
190
|
+
value: function command(v) {
|
|
191
|
+
var _this2 = this;
|
|
192
|
+
log('command: ', v);
|
|
193
|
+
if (!this.mathField) {
|
|
194
|
+
return '';
|
|
195
|
+
}
|
|
196
|
+
var values = Array.isArray(v) ? v : [v];
|
|
197
|
+
values.forEach(function (vv) {
|
|
198
|
+
return _this2.mathField.insert(vv, {
|
|
199
|
+
focus: true
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
this.mathField.focus();
|
|
203
|
+
return this.latex();
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/** MathQuill `keystroke()` equivalent - takes a MathLive selector. */
|
|
207
|
+
}, {
|
|
208
|
+
key: "keystroke",
|
|
209
|
+
value: function keystroke(selector) {
|
|
210
|
+
if (!this.mathField) {
|
|
211
|
+
return '';
|
|
212
|
+
}
|
|
213
|
+
this.mathField.executeCommand(selector);
|
|
214
|
+
this.mathField.focus();
|
|
215
|
+
return this.latex();
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/** MathQuill `write()` equivalent. Accepts an array, as `cmd()` did. */
|
|
219
|
+
}, {
|
|
220
|
+
key: "write",
|
|
221
|
+
value: function write(v) {
|
|
222
|
+
var _this3 = this;
|
|
223
|
+
log('write: ', v);
|
|
224
|
+
if (!this.mathField) {
|
|
225
|
+
return '';
|
|
226
|
+
}
|
|
227
|
+
var values = Array.isArray(v) ? v : [v];
|
|
228
|
+
values.forEach(function (vv) {
|
|
229
|
+
return _this3.mathField.insert(vv, {
|
|
230
|
+
focus: true
|
|
231
|
+
});
|
|
232
|
+
});
|
|
233
|
+
this.mathField.focus();
|
|
234
|
+
return this.latex();
|
|
235
|
+
}
|
|
236
|
+
}, {
|
|
237
|
+
key: "render",
|
|
238
|
+
value: function render() {
|
|
239
|
+
var _this$props2 = this.props,
|
|
240
|
+
className = _this$props2.className,
|
|
241
|
+
onFocus = _this$props2.onFocus,
|
|
242
|
+
onBlur = _this$props2.onBlur,
|
|
243
|
+
onClick = _this$props2.onClick;
|
|
244
|
+
return /*#__PURE__*/_react["default"].createElement(Holder, {
|
|
245
|
+
className: className,
|
|
246
|
+
onFocus: onFocus,
|
|
247
|
+
onBlur: onBlur,
|
|
248
|
+
onClick: onClick,
|
|
249
|
+
onKeyDown: this.onKeyDown,
|
|
250
|
+
ref: this.holderRef
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
}]);
|
|
254
|
+
}(_react["default"].Component);
|
|
255
|
+
(0, _defineProperty2["default"])(Input, "propTypes", {
|
|
256
|
+
className: _propTypes["default"].string,
|
|
257
|
+
latex: _propTypes["default"].string,
|
|
258
|
+
onChange: _propTypes["default"].func,
|
|
259
|
+
onClick: _propTypes["default"].func,
|
|
260
|
+
onFocus: _propTypes["default"].func,
|
|
261
|
+
onBlur: _propTypes["default"].func,
|
|
262
|
+
readOnly: _propTypes["default"].bool,
|
|
263
|
+
innerRef: _propTypes["default"].func
|
|
264
|
+
});
|
|
265
|
+
var _default = exports["default"] = Input;
|
|
266
|
+
//# sourceMappingURL=input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.js","names":["_react","_interopRequireDefault","require","_propTypes","_styles","_debug","_mathliveInstance","_latexBridge","_callSuper","t","o","e","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","Reflect","construct","constructor","apply","Boolean","prototype","valueOf","call","log","debug","Holder","styled","display","width","Input","exports","_React$Component","props","_this","_classCallCheck2","_defineProperty2","onChange","mathField","latex","fromMathLive","getValue","lastEmitted","event","key","preventDefault","holderRef","React","createRef","undefined","_inherits2","_createClass2","value","_componentDidMount","_asyncToGenerator2","_regenerator","mark","_callee","_this$setState","ml","wrap","_context","prev","next","loadMathLive","sent","current","abrupt","MathfieldElement","macros","getMacros","toMathLive","readOnly","mathVirtualKeyboardPolicy","addEventListener","onInputEdit","appendChild","innerRef","setState","stop","componentDidMount","arguments","componentDidUpdate","prevProps","_this$props","componentWillUnmount","removeEventListener","remove","clear","blur","focus","command","v","_this2","values","Array","isArray","forEach","vv","insert","keystroke","selector","executeCommand","write","_this3","render","_this$props2","className","onFocus","onBlur","onClick","createElement","onKeyDown","ref","Component","PropTypes","string","func","bool","_default"],"sources":["../../src/mf/input.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { styled } from '@mui/material/styles';\nimport debug from 'debug';\nimport { loadMathLive, getMacros } from '../mathlive-instance';\nimport { toMathLive, fromMathLive } from '../latex-bridge';\n\nconst log = debug('pie-lib:math-input-mathlive:input');\n\nconst Holder = styled('span')({\n display: 'inline-block',\n '& math-field': {\n display: 'block',\n width: '100%',\n },\n // MathLive ships its own virtual keyboard toggle; pie supplies its own keypad.\n '& math-field::part(virtual-keyboard-toggle)': {\n display: 'none',\n },\n '& math-field::part(menu-toggle)': {\n display: 'none',\n },\n});\n\n/**\n * Editable math field. Drop-in replacement for @pie-lib/math-input's `mq.Input`.\n *\n * Keeps the same imperative surface used by MathInput's keypad\n * (`write`, `command`, `keystroke`, `clear`, `focus`, `blur`) so callers do not\n * change, and the same `latex` / `onChange` props.\n */\nexport class Input extends React.Component {\n static propTypes = {\n className: PropTypes.string,\n latex: PropTypes.string,\n onChange: PropTypes.func,\n onClick: PropTypes.func,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n readOnly: PropTypes.bool,\n innerRef: PropTypes.func,\n };\n\n constructor(props) {\n super(props);\n this.holderRef = React.createRef();\n // Tracks the last latex we emitted, so prop echoes don't reset the cursor.\n this.lastEmitted = undefined;\n }\n\n async componentDidMount() {\n const ml = await loadMathLive();\n\n if (!ml || !this.holderRef.current) {\n return;\n }\n\n this.mathField = new ml.MathfieldElement({ macros: getMacros() });\n this.mathField.value = toMathLive(this.props.latex || '');\n\n if (this.props.readOnly) {\n this.mathField.readOnly = true;\n }\n\n // pie drives input through its own keypad, so suppress MathLive's.\n this.mathField.mathVirtualKeyboardPolicy = 'manual';\n\n this.mathField.addEventListener('input', this.onInputEdit);\n this.holderRef.current.appendChild(this.mathField);\n\n if (this.props.innerRef) {\n this.props.innerRef(this);\n }\n\n this.setState?.({});\n }\n\n componentDidUpdate(prevProps) {\n if (!this.mathField) {\n return;\n }\n\n const { latex, readOnly } = this.props;\n\n if (readOnly !== prevProps.readOnly) {\n this.mathField.readOnly = !!readOnly;\n }\n\n // Only push the prop back into the field when it genuinely differs from\n // what the field already holds. This is the analogue of the old\n // shouldComponentUpdate latex-equality guard and prevents cursor thrash.\n if (latex !== undefined && latex !== null && latex !== this.lastEmitted) {\n const next = toMathLive(latex);\n\n if (next !== this.mathField.value) {\n this.mathField.value = next;\n }\n }\n }\n\n componentWillUnmount() {\n if (this.mathField) {\n this.mathField.removeEventListener('input', this.onInputEdit);\n this.mathField.remove();\n this.mathField = undefined;\n }\n\n if (this.props.innerRef) {\n this.props.innerRef(null);\n }\n }\n\n onInputEdit = () => {\n const { onChange } = this.props;\n\n if (!this.mathField) {\n return;\n }\n\n const latex = fromMathLive(this.mathField.getValue('latex'));\n\n this.lastEmitted = latex;\n\n if (onChange) {\n onChange(latex);\n }\n };\n\n /** Current latex, in stored (MathQuill-compatible) form. */\n latex() {\n return this.mathField ? fromMathLive(this.mathField.getValue('latex')) : '';\n }\n\n clear() {\n if (this.mathField) {\n this.mathField.value = '';\n }\n\n return '';\n }\n\n blur() {\n log('blur mathfield');\n this.mathField && this.mathField.blur();\n }\n\n focus() {\n log('focus mathfield...');\n this.mathField && this.mathField.focus();\n }\n\n /** MathQuill `cmd()` equivalent. */\n command(v) {\n log('command: ', v);\n\n if (!this.mathField) {\n return '';\n }\n\n const values = Array.isArray(v) ? v : [v];\n\n values.forEach((vv) => this.mathField.insert(vv, { focus: true }));\n this.mathField.focus();\n\n return this.latex();\n }\n\n /** MathQuill `keystroke()` equivalent - takes a MathLive selector. */\n keystroke(selector) {\n if (!this.mathField) {\n return '';\n }\n\n this.mathField.executeCommand(selector);\n this.mathField.focus();\n\n return this.latex();\n }\n\n /** MathQuill `write()` equivalent. Accepts an array, as `cmd()` did. */\n write(v) {\n log('write: ', v);\n\n if (!this.mathField) {\n return '';\n }\n\n const values = Array.isArray(v) ? v : [v];\n\n values.forEach((vv) => this.mathField.insert(vv, { focus: true }));\n this.mathField.focus();\n\n return this.latex();\n }\n\n /**\n * Enter must not insert a line break: math input is single-expression, and\n * the MathQuill version swallowed charCode 13 for the same reason. Newlines\n * are authored explicitly through the newLine embed, not the Enter key.\n */\n onKeyDown = (event) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n }\n };\n\n render() {\n const { className, onFocus, onBlur, onClick } = this.props;\n\n return (\n <Holder\n className={className}\n onFocus={onFocus}\n onBlur={onBlur}\n onClick={onClick}\n onKeyDown={this.onKeyDown}\n ref={this.holderRef}\n />\n );\n }\n}\n\nexport default Input;\n"],"mappings":"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","ignoreList":[]}
|