@pie-lib/math-input-mathlive 1.1.5-beta.8 → 2.0.1-next.20261107131445

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/README.md +84 -109
  2. package/dist/_virtual/_rolldown/runtime.js +11 -0
  3. package/dist/horizontal-keypad.d.ts +22 -0
  4. package/dist/horizontal-keypad.js +54 -0
  5. package/dist/index.d.ts +20 -0
  6. package/dist/index.js +12 -0
  7. package/dist/keypad/index.d.ts +40 -0
  8. package/dist/keypad/index.js +245 -0
  9. package/dist/keypad/keys-layout.d.ts +7 -0
  10. package/dist/keypad/keys-layout.js +5 -0
  11. package/dist/keys/basic-operators.d.ts +5 -0
  12. package/dist/keys/basic-operators.js +30 -0
  13. package/dist/keys/chars.d.ts +5 -0
  14. package/dist/keys/comparison.d.ts +4 -0
  15. package/dist/keys/comparison.js +32 -0
  16. package/dist/keys/constants.d.ts +4 -0
  17. package/dist/keys/constants.js +35 -0
  18. package/dist/keys/digits.d.ts +15 -0
  19. package/dist/keys/digits.js +34 -0
  20. package/dist/keys/edit.d.ts +6 -0
  21. package/dist/keys/edit.js +9 -0
  22. package/dist/keys/exponent.d.ts +4 -0
  23. package/dist/keys/exponent.js +28 -0
  24. package/dist/keys/fractions.d.ts +3 -0
  25. package/dist/keys/fractions.js +27 -0
  26. package/dist/keys/geometry.d.ts +23 -0
  27. package/dist/keys/geometry.js +127 -0
  28. package/dist/keys/grades.d.ts +9 -0
  29. package/dist/keys/grades.js +414 -0
  30. package/dist/keys/index.d.ts +6 -0
  31. package/dist/keys/index.js +50 -0
  32. package/dist/keys/log.d.ts +3 -0
  33. package/dist/keys/log.js +25 -0
  34. package/dist/keys/logic.d.ts +2 -0
  35. package/dist/keys/logic.js +13 -0
  36. package/dist/keys/matrices.d.ts +2 -0
  37. package/dist/keys/matrices.js +17 -0
  38. package/dist/keys/misc.d.ts +10 -0
  39. package/dist/keys/misc.js +60 -0
  40. package/dist/keys/navigation.d.ts +2 -0
  41. package/dist/keys/navigation.js +13 -0
  42. package/dist/keys/operators.d.ts +1 -0
  43. package/dist/keys/operators.js +11 -0
  44. package/dist/keys/statistics.d.ts +5 -0
  45. package/dist/keys/statistics.js +38 -0
  46. package/dist/keys/sub-sup.d.ts +2 -0
  47. package/dist/keys/sub-sup.js +17 -0
  48. package/dist/keys/trigonometry.d.ts +6 -0
  49. package/dist/keys/trigonometry.js +43 -0
  50. package/dist/keys/utils.d.ts +5 -0
  51. package/dist/keys/utils.js +24 -0
  52. package/dist/keys/vars.d.ts +3 -0
  53. package/dist/keys/vars.js +22 -0
  54. package/dist/latex-bridge.d.ts +197 -0
  55. package/dist/latex-bridge.js +210 -0
  56. package/dist/longdiv.d.ts +24 -0
  57. package/dist/longdiv.js +43 -0
  58. package/dist/math-input.d.ts +26 -0
  59. package/dist/math-input.js +74 -0
  60. package/dist/mathlive-instance.d.ts +221 -0
  61. package/dist/mathlive-instance.js +159 -0
  62. package/dist/mf/common-styles.d.ts +594 -0
  63. package/dist/mf/common-styles.js +80 -0
  64. package/dist/mf/field-label.d.ts +16 -0
  65. package/dist/mf/field-label.js +13 -0
  66. package/dist/mf/index.d.ts +4 -0
  67. package/dist/mf/index.js +21 -0
  68. package/dist/mf/input.d.ts +94 -0
  69. package/dist/mf/input.js +127 -0
  70. package/dist/mf/static.d.ts +143 -0
  71. package/dist/mf/static.js +230 -0
  72. package/dist/selection.d.ts +43 -0
  73. package/dist/selection.js +39 -0
  74. package/package.json +32 -18
  75. package/lib/__tests__/composites.test.js +0 -255
  76. package/lib/__tests__/drop-in-compat.test.js +0 -133
  77. package/lib/__tests__/embedded-fonts.test.js +0 -121
  78. package/lib/__tests__/index.test.js +0 -118
  79. package/lib/__tests__/input-imperative.test.js +0 -155
  80. package/lib/__tests__/input-selection.test.js +0 -103
  81. package/lib/__tests__/keypad-label.test.js +0 -231
  82. package/lib/__tests__/keypad-render.test.js +0 -206
  83. package/lib/__tests__/latex-bridge.test.js +0 -386
  84. package/lib/__tests__/mathlive-instance.test.js +0 -419
  85. package/lib/__tests__/mount-race.test.js +0 -218
  86. package/lib/__tests__/selection.test.js +0 -195
  87. package/lib/__tests__/static-prompts.test.js +0 -405
  88. package/lib/__tests__/tmp-markup.test.js +0 -26
  89. package/lib/horizontal-keypad.js +0 -101
  90. package/lib/horizontal-keypad.js.map +0 -1
  91. package/lib/index.js +0 -143
  92. package/lib/index.js.map +0 -1
  93. package/lib/keypad/index.js +0 -431
  94. package/lib/keypad/index.js.map +0 -1
  95. package/lib/keypad/keys-layout.js +0 -22
  96. package/lib/keypad/keys-layout.js.map +0 -1
  97. package/lib/keys/basic-operators.js +0 -33
  98. package/lib/keys/basic-operators.js.map +0 -1
  99. package/lib/keys/chars.js +0 -12
  100. package/lib/keys/chars.js.map +0 -1
  101. package/lib/keys/comparison.js +0 -39
  102. package/lib/keys/comparison.js.map +0 -1
  103. package/lib/keys/constants.js +0 -37
  104. package/lib/keys/constants.js.map +0 -1
  105. package/lib/keys/digits.js +0 -46
  106. package/lib/keys/digits.js.map +0 -1
  107. package/lib/keys/edit.js +0 -14
  108. package/lib/keys/edit.js.map +0 -1
  109. package/lib/keys/exponent.js +0 -30
  110. package/lib/keys/exponent.js.map +0 -1
  111. package/lib/keys/fractions.js +0 -29
  112. package/lib/keys/fractions.js.map +0 -1
  113. package/lib/keys/geometry.js +0 -143
  114. package/lib/keys/geometry.js.map +0 -1
  115. package/lib/keys/grades.js +0 -259
  116. package/lib/keys/grades.js.map +0 -1
  117. package/lib/keys/index.js +0 -35
  118. package/lib/keys/index.js.map +0 -1
  119. package/lib/keys/log.js +0 -27
  120. package/lib/keys/log.js.map +0 -1
  121. package/lib/keys/logic.js +0 -19
  122. package/lib/keys/logic.js.map +0 -1
  123. package/lib/keys/matrices.js +0 -19
  124. package/lib/keys/matrices.js.map +0 -1
  125. package/lib/keys/misc.js +0 -69
  126. package/lib/keys/misc.js.map +0 -1
  127. package/lib/keys/navigation.js +0 -20
  128. package/lib/keys/navigation.js.map +0 -1
  129. package/lib/keys/operators.js +0 -15
  130. package/lib/keys/operators.js.map +0 -1
  131. package/lib/keys/statistics.js +0 -40
  132. package/lib/keys/statistics.js.map +0 -1
  133. package/lib/keys/sub-sup.js +0 -19
  134. package/lib/keys/sub-sup.js.map +0 -1
  135. package/lib/keys/trigonometry.js +0 -45
  136. package/lib/keys/trigonometry.js.map +0 -1
  137. package/lib/keys/utils.js +0 -87
  138. package/lib/keys/utils.js.map +0 -1
  139. package/lib/keys/vars.js +0 -24
  140. package/lib/keys/vars.js.map +0 -1
  141. package/lib/latex-bridge.js +0 -445
  142. package/lib/latex-bridge.js.map +0 -1
  143. package/lib/math-input.js +0 -143
  144. package/lib/math-input.js.map +0 -1
  145. package/lib/mathlive-instance.js +0 -585
  146. package/lib/mathlive-instance.js.map +0 -1
  147. package/lib/mf/common-styles.js +0 -203
  148. package/lib/mf/common-styles.js.map +0 -1
  149. package/lib/mf/index.js +0 -84
  150. package/lib/mf/index.js.map +0 -1
  151. package/lib/mf/input.js +0 -372
  152. package/lib/mf/input.js.map +0 -1
  153. package/lib/mf/static.js +0 -500
  154. package/lib/mf/static.js.map +0 -1
  155. package/lib/selection.js +0 -148
  156. package/lib/selection.js.map +0 -1
  157. package/src/__tests__/composites.test.jsx +0 -220
  158. package/src/__tests__/drop-in-compat.test.jsx +0 -112
  159. package/src/__tests__/index.test.jsx +0 -109
  160. package/src/__tests__/input-imperative.test.jsx +0 -144
  161. package/src/__tests__/input-selection.test.jsx +0 -64
  162. package/src/__tests__/keypad-label.test.jsx +0 -283
  163. package/src/__tests__/keypad-render.test.jsx +0 -123
  164. package/src/__tests__/latex-bridge.test.js +0 -359
  165. package/src/__tests__/mathlive-instance.test.js +0 -418
  166. package/src/__tests__/mount-race.test.jsx +0 -142
  167. package/src/__tests__/selection.test.js +0 -212
  168. package/src/__tests__/static-prompts.test.jsx +0 -364
  169. package/src/horizontal-keypad.jsx +0 -73
  170. package/src/index.jsx +0 -63
  171. package/src/keypad/index.jsx +0 -386
  172. package/src/keypad/keys-layout.js +0 -16
  173. package/src/keys/basic-operators.js +0 -32
  174. package/src/keys/chars.js +0 -5
  175. package/src/keys/comparison.js +0 -28
  176. package/src/keys/constants.js +0 -35
  177. package/src/keys/digits.js +0 -40
  178. package/src/keys/edit.js +0 -3
  179. package/src/keys/exponent.js +0 -28
  180. package/src/keys/fractions.js +0 -26
  181. package/src/keys/geometry.js +0 -149
  182. package/src/keys/grades.js +0 -367
  183. package/src/keys/index.js +0 -20
  184. package/src/keys/log.js +0 -22
  185. package/src/keys/logic.js +0 -15
  186. package/src/keys/matrices.js +0 -15
  187. package/src/keys/misc.js +0 -71
  188. package/src/keys/navigation.js +0 -8
  189. package/src/keys/operators.js +0 -10
  190. package/src/keys/statistics.js +0 -38
  191. package/src/keys/sub-sup.js +0 -15
  192. package/src/keys/trigonometry.js +0 -15
  193. package/src/keys/utils.js +0 -66
  194. package/src/keys/vars.js +0 -19
  195. package/src/latex-bridge.js +0 -449
  196. package/src/math-input.jsx +0 -115
  197. package/src/mathlive-instance.js +0 -582
  198. package/src/mf/common-styles.js +0 -210
  199. package/src/mf/index.js +0 -30
  200. package/src/mf/input.jsx +0 -328
  201. package/src/mf/static.jsx +0 -479
  202. package/src/selection.js +0 -146
package/lib/mf/input.js DELETED
@@ -1,372 +0,0 @@
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
- var _selection = require("../selection");
23
- 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)); }
24
- function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
25
- var log = (0, _debug["default"])('pie-lib:math-input-mathlive:input');
26
- var Holder = (0, _styles.styled)('span')({
27
- display: 'inline-block',
28
- '& math-field': {
29
- display: 'block',
30
- width: '100%'
31
- },
32
- // MathLive ships its own virtual keyboard toggle; pie supplies its own keypad.
33
- '& math-field::part(virtual-keyboard-toggle)': {
34
- display: 'none'
35
- },
36
- '& math-field::part(menu-toggle)': {
37
- display: 'none'
38
- }
39
- });
40
-
41
- /**
42
- * Editable math field. Drop-in replacement for @pie-lib/math-input's `mq.Input`.
43
- *
44
- * Keeps the same imperative surface used by MathInput's keypad
45
- * (`write`, `command`, `keystroke`, `clear`, `focus`, `blur`) so callers do not
46
- * change, and the same `latex` / `onChange` props.
47
- */
48
- var Input = exports.Input = /*#__PURE__*/function (_React$Component) {
49
- function Input(props) {
50
- var _this;
51
- (0, _classCallCheck2["default"])(this, Input);
52
- _this = _callSuper(this, Input, [props]);
53
- (0, _defineProperty2["default"])(_this, "onInputEdit", function () {
54
- var onChange = _this.props.onChange;
55
- if (!_this.mathField) {
56
- return;
57
- }
58
- var latex = (0, _latexBridge.fromMathLive)(_this.mathField.getValue('latex'));
59
- _this.lastEmitted = latex;
60
- if (onChange) {
61
- onChange(latex);
62
- }
63
- });
64
- /**
65
- * Enter must not insert a line break: math input is single-expression, and
66
- * the MathQuill version swallowed charCode 13 for the same reason. Newlines
67
- * are authored explicitly through the newLine embed, not the Enter key.
68
- */
69
- (0, _defineProperty2["default"])(_this, "onKeyDown", function (event) {
70
- if (event.key === 'Enter') {
71
- event.preventDefault();
72
- }
73
- });
74
- _this.holderRef = /*#__PURE__*/_react["default"].createRef();
75
- // Tracks the last latex we emitted, so prop echoes don't reset the cursor.
76
- _this.lastEmitted = undefined;
77
- return _this;
78
- }
79
- (0, _inherits2["default"])(Input, _React$Component);
80
- return (0, _createClass2["default"])(Input, [{
81
- key: "componentDidMount",
82
- value: function () {
83
- var _componentDidMount = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
84
- var generation, ml;
85
- return _regenerator["default"].wrap(function (_context) {
86
- while (1) switch (_context.prev = _context.next) {
87
- case 0:
88
- // MathLive loads asynchronously, so this method resumes after an await and
89
- // has to know whether it is still the current mount. React StrictMode calls
90
- // mount -> unmount -> mount on the SAME instance in dev, so a boolean
91
- // "unmounted" flag would latch and block the remount from ever creating a
92
- // field. A generation counter identifies the live mount instead: only the
93
- // newest one proceeds, and a real unmount invalidates all pending ones.
94
- generation = this.mountGeneration = (this.mountGeneration || 0) + 1;
95
- _context.next = 1;
96
- return (0, _mathliveInstance.loadMathLive)();
97
- case 1:
98
- ml = _context.sent;
99
- if (!(generation !== this.mountGeneration || !ml || !this.holderRef.current || this.mathField)) {
100
- _context.next = 2;
101
- break;
102
- }
103
- return _context.abrupt("return");
104
- case 2:
105
- this.mathField = new ml.MathfieldElement({
106
- macros: (0, _mathliveInstance.getMacros)()
107
- });
108
- this.mathField.value = (0, _latexBridge.toMathLive)(this.props.latex || '');
109
- if (this.props.readOnly) {
110
- this.mathField.readOnly = true;
111
- }
112
-
113
- // pie drives input through its own keypad, so suppress MathLive's.
114
- this.mathField.mathVirtualKeyboardPolicy = 'manual';
115
- // Without this the spacebar does nothing: MathLive's mathModeSpace
116
- // defaults to an empty string.
117
- this.mathField.mathModeSpace = _mathliveInstance.MATH_MODE_SPACE;
118
- // After the exponent key the cursor must stay in the exponent until it is moved
119
- // MathLive's `smartSuperscript` (on by
120
- // default) jumps out of an empty superscript after a single digit, which breaks
121
- // typing x^23 or 10^6 and is inconsistent with non-digit exponents.
122
- this.mathField.smartSuperscript = false;
123
-
124
- // The mathfield renders in shadow DOM, so page CSS cannot reach it - the
125
- // stretchy-accent fix has to be injected there directly.
126
- (0, _mathliveInstance.applyShadowStyles)(this.mathField);
127
-
128
- // A selected `\placeholder{}` gets no MathLive caret; draw one.
129
- this.untrackCaret = (0, _mathliveInstance.trackPlaceholderCaret)(this.mathField);
130
-
131
- // Shift+Arrow would otherwise select half a fraction; snap to whole atoms.
132
- this.untrackSelection = (0, _selection.trackWholeAtomSelection)(this.mathField);
133
- this.mathField.addEventListener('input', this.onInputEdit);
134
-
135
- // Belt and braces: drop anything a previous mount may have left behind.
136
- this.holderRef.current.replaceChildren(this.mathField);
137
- if (this.props.innerRef) {
138
- this.props.innerRef(this);
139
- }
140
- case 3:
141
- case "end":
142
- return _context.stop();
143
- }
144
- }, _callee, this);
145
- }));
146
- function componentDidMount() {
147
- return _componentDidMount.apply(this, arguments);
148
- }
149
- return componentDidMount;
150
- }()
151
- }, {
152
- key: "componentDidUpdate",
153
- value: function componentDidUpdate(prevProps) {
154
- if (!this.mathField) {
155
- return;
156
- }
157
- var _this$props = this.props,
158
- latex = _this$props.latex,
159
- readOnly = _this$props.readOnly;
160
- if (readOnly !== prevProps.readOnly) {
161
- this.mathField.readOnly = !!readOnly;
162
- }
163
-
164
- // Only push the prop back into the field when it genuinely differs from
165
- // what the field already holds. This is the analogue of the old
166
- // shouldComponentUpdate latex-equality guard and prevents cursor thrash.
167
- if (latex !== undefined && latex !== null && latex !== this.lastEmitted) {
168
- var next = (0, _latexBridge.toMathLive)(latex);
169
- if (next !== this.mathField.value) {
170
- this.mathField.value = next;
171
- }
172
- }
173
- }
174
- }, {
175
- key: "componentWillUnmount",
176
- value: function componentWillUnmount() {
177
- // Invalidate any mount still awaiting the MathLive load, so it does not
178
- // append a field into a holder that is going away.
179
- this.mountGeneration = (this.mountGeneration || 0) + 1;
180
- if (this.untrackCaret) {
181
- this.untrackCaret();
182
- this.untrackCaret = undefined;
183
- }
184
- if (this.untrackSelection) {
185
- this.untrackSelection();
186
- this.untrackSelection = undefined;
187
- }
188
- if (this.mathField) {
189
- this.mathField.removeEventListener('input', this.onInputEdit);
190
- this.mathField.remove();
191
- this.mathField = undefined;
192
- }
193
- if (this.props.innerRef) {
194
- this.props.innerRef(null);
195
- }
196
- }
197
- }, {
198
- key: "latex",
199
- value: /** Current latex, in stored (MathQuill-compatible) form. */
200
- function latex() {
201
- return this.mathField ? (0, _latexBridge.fromMathLive)(this.mathField.getValue('latex')) : '';
202
- }
203
-
204
- /**
205
- * The underlying `<math-field>` element, or undefined until MathLive has
206
- * finished loading. Exposed for callers that need the real element.
207
- *
208
- * NOTE: this is NOT a MathQuill field. Code written against
209
- * `@pie-lib/math-input` often did `input.mathField.latex()`; that shape is
210
- * provided by `mqCompat` below, and `latex()` on this component is the
211
- * supported replacement.
212
- */
213
- }, {
214
- key: "element",
215
- get: function get() {
216
- return this.mathField;
217
- }
218
-
219
- /**
220
- * MathQuill-shaped facade, so existing `input.mathField.latex()` /
221
- * `.el()` call sites keep working instead of throwing. Only the members that
222
- * consumers actually used are provided; MathQuill internals such as
223
- * `__controller` have no MathLive equivalent and are deliberately absent.
224
- */
225
- }, {
226
- key: "mqCompat",
227
- get: function get() {
228
- var _this2 = this;
229
- return {
230
- latex: function latex(v) {
231
- return v === undefined ? _this2.latex() : (_this2.setLatex(v), v);
232
- },
233
- el: function el() {
234
- return _this2.mathField;
235
- },
236
- focus: function focus() {
237
- return _this2.focus();
238
- },
239
- blur: function blur() {
240
- return _this2.blur();
241
- }
242
- };
243
- }
244
-
245
- /** Programmatically replace the content. */
246
- }, {
247
- key: "setLatex",
248
- value: function setLatex(v) {
249
- if (this.mathField) {
250
- this.mathField.value = (0, _latexBridge.toMathLive)(v || '');
251
- }
252
- }
253
- }, {
254
- key: "clear",
255
- value: function clear() {
256
- if (this.mathField) {
257
- this.mathField.value = '';
258
- }
259
- return '';
260
- }
261
- }, {
262
- key: "blur",
263
- value: function blur() {
264
- log('blur mathfield');
265
- this.mathField && this.mathField.blur();
266
- }
267
- }, {
268
- key: "focus",
269
- value: function focus() {
270
- log('focus mathfield...');
271
- this.mathField && this.mathField.focus();
272
- }
273
-
274
- /**
275
- * MathQuill `cmd()` equivalent.
276
- *
277
- * Callers pass MathQuill command names (`'\\frac'`, `'\\sqrt'`, `'^'`, or an
278
- * array of them). Those must be expanded into latex with `#?` placeholders,
279
- * otherwise inserting a bare `\frac` produces no editable slots.
280
- */
281
- }, {
282
- key: "command",
283
- value: function command(v) {
284
- log('command: ', v);
285
- if (!this.mathField) {
286
- return '';
287
- }
288
- var action = (0, _latexBridge.keyToAction)({
289
- command: v
290
- });
291
- if (action) {
292
- this.mathField.insert(action.value, {
293
- focus: true
294
- });
295
- }
296
- this.mathField.focus();
297
- return this.latex();
298
- }
299
-
300
- /**
301
- * MathQuill `keystroke()` equivalent.
302
- *
303
- * Accepts MathQuill keystroke names (`'Left'`, `'Right'`, `'Backspace'`) as
304
- * the keypad emits them, and passes anything else through as a MathLive
305
- * selector.
306
- */
307
- }, {
308
- key: "keystroke",
309
- value: function keystroke(v) {
310
- log('keystroke: ', v);
311
- if (!this.mathField) {
312
- return '';
313
- }
314
- var selector = _latexBridge.KEYSTROKES[v] || v;
315
- try {
316
- this.mathField.executeCommand(selector);
317
- } catch (e) {
318
- log('unknown keystroke/selector "%s": %s', v, e && e.message);
319
- }
320
- this.mathField.focus();
321
- return this.latex();
322
- }
323
-
324
- /** MathQuill `write()` equivalent. Accepts an array, as `cmd()` did. */
325
- }, {
326
- key: "write",
327
- value: function write(v) {
328
- var _this3 = this;
329
- log('write: ', v);
330
- if (!this.mathField) {
331
- return '';
332
- }
333
- var values = Array.isArray(v) ? v : [v];
334
- values.forEach(function (vv) {
335
- return _this3.mathField.insert(vv, {
336
- focus: true
337
- });
338
- });
339
- this.mathField.focus();
340
- return this.latex();
341
- }
342
- }, {
343
- key: "render",
344
- value: function render() {
345
- var _this$props2 = this.props,
346
- className = _this$props2.className,
347
- onFocus = _this$props2.onFocus,
348
- onBlur = _this$props2.onBlur,
349
- onClick = _this$props2.onClick;
350
- return /*#__PURE__*/_react["default"].createElement(Holder, {
351
- className: className,
352
- onFocus: onFocus,
353
- onBlur: onBlur,
354
- onClick: onClick,
355
- onKeyDown: this.onKeyDown,
356
- ref: this.holderRef
357
- });
358
- }
359
- }]);
360
- }(_react["default"].Component);
361
- (0, _defineProperty2["default"])(Input, "propTypes", {
362
- className: _propTypes["default"].string,
363
- latex: _propTypes["default"].string,
364
- onChange: _propTypes["default"].func,
365
- onClick: _propTypes["default"].func,
366
- onFocus: _propTypes["default"].func,
367
- onBlur: _propTypes["default"].func,
368
- readOnly: _propTypes["default"].bool,
369
- innerRef: _propTypes["default"].func
370
- });
371
- var _default = exports["default"] = Input;
372
- //# sourceMappingURL=input.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"input.js","names":["_react","_interopRequireDefault","require","_propTypes","_styles","_debug","_mathliveInstance","_latexBridge","_selection","_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","generation","ml","wrap","_context","prev","next","mountGeneration","loadMathLive","sent","current","abrupt","MathfieldElement","macros","getMacros","toMathLive","readOnly","mathVirtualKeyboardPolicy","mathModeSpace","MATH_MODE_SPACE","smartSuperscript","applyShadowStyles","untrackCaret","trackPlaceholderCaret","untrackSelection","trackWholeAtomSelection","addEventListener","onInputEdit","replaceChildren","innerRef","stop","componentDidMount","arguments","componentDidUpdate","prevProps","_this$props","componentWillUnmount","removeEventListener","remove","get","_this2","v","setLatex","el","focus","blur","clear","command","action","keyToAction","insert","keystroke","selector","KEYSTROKES","executeCommand","message","write","_this3","values","Array","isArray","forEach","vv","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 {\n loadMathLive,\n getMacros,\n MATH_MODE_SPACE,\n applyShadowStyles,\n trackPlaceholderCaret,\n} from '../mathlive-instance';\nimport { toMathLive, fromMathLive, keyToAction, KEYSTROKES } from '../latex-bridge';\nimport { trackWholeAtomSelection } from '../selection';\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 // MathLive loads asynchronously, so this method resumes after an await and\n // has to know whether it is still the current mount. React StrictMode calls\n // mount -> unmount -> mount on the SAME instance in dev, so a boolean\n // \"unmounted\" flag would latch and block the remount from ever creating a\n // field. A generation counter identifies the live mount instead: only the\n // newest one proceeds, and a real unmount invalidates all pending ones.\n const generation = (this.mountGeneration = (this.mountGeneration || 0) + 1);\n const ml = await loadMathLive();\n\n if (generation !== this.mountGeneration || !ml || !this.holderRef.current || this.mathField) {\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 // Without this the spacebar does nothing: MathLive's mathModeSpace\n // defaults to an empty string.\n this.mathField.mathModeSpace = MATH_MODE_SPACE;\n // After the exponent key the cursor must stay in the exponent until it is moved\n // MathLive's `smartSuperscript` (on by\n // default) jumps out of an empty superscript after a single digit, which breaks\n // typing x^23 or 10^6 and is inconsistent with non-digit exponents.\n this.mathField.smartSuperscript = false;\n\n // The mathfield renders in shadow DOM, so page CSS cannot reach it - the\n // stretchy-accent fix has to be injected there directly.\n applyShadowStyles(this.mathField);\n\n // A selected `\\placeholder{}` gets no MathLive caret; draw one.\n this.untrackCaret = trackPlaceholderCaret(this.mathField);\n\n // Shift+Arrow would otherwise select half a fraction; snap to whole atoms.\n this.untrackSelection = trackWholeAtomSelection(this.mathField);\n\n this.mathField.addEventListener('input', this.onInputEdit);\n\n // Belt and braces: drop anything a previous mount may have left behind.\n this.holderRef.current.replaceChildren(this.mathField);\n\n if (this.props.innerRef) {\n this.props.innerRef(this);\n }\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 // Invalidate any mount still awaiting the MathLive load, so it does not\n // append a field into a holder that is going away.\n this.mountGeneration = (this.mountGeneration || 0) + 1;\n\n if (this.untrackCaret) {\n this.untrackCaret();\n this.untrackCaret = undefined;\n }\n\n if (this.untrackSelection) {\n this.untrackSelection();\n this.untrackSelection = undefined;\n }\n\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 /**\n * The underlying `<math-field>` element, or undefined until MathLive has\n * finished loading. Exposed for callers that need the real element.\n *\n * NOTE: this is NOT a MathQuill field. Code written against\n * `@pie-lib/math-input` often did `input.mathField.latex()`; that shape is\n * provided by `mqCompat` below, and `latex()` on this component is the\n * supported replacement.\n */\n get element() {\n return this.mathField;\n }\n\n /**\n * MathQuill-shaped facade, so existing `input.mathField.latex()` /\n * `.el()` call sites keep working instead of throwing. Only the members that\n * consumers actually used are provided; MathQuill internals such as\n * `__controller` have no MathLive equivalent and are deliberately absent.\n */\n get mqCompat() {\n return {\n latex: (v) => (v === undefined ? this.latex() : (this.setLatex(v), v)),\n el: () => this.mathField,\n focus: () => this.focus(),\n blur: () => this.blur(),\n };\n }\n\n /** Programmatically replace the content. */\n setLatex(v) {\n if (this.mathField) {\n this.mathField.value = toMathLive(v || '');\n }\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 /**\n * MathQuill `cmd()` equivalent.\n *\n * Callers pass MathQuill command names (`'\\\\frac'`, `'\\\\sqrt'`, `'^'`, or an\n * array of them). Those must be expanded into latex with `#?` placeholders,\n * otherwise inserting a bare `\\frac` produces no editable slots.\n */\n command(v) {\n log('command: ', v);\n\n if (!this.mathField) {\n return '';\n }\n\n const action = keyToAction({ command: v });\n\n if (action) {\n this.mathField.insert(action.value, { focus: true });\n }\n\n this.mathField.focus();\n\n return this.latex();\n }\n\n /**\n * MathQuill `keystroke()` equivalent.\n *\n * Accepts MathQuill keystroke names (`'Left'`, `'Right'`, `'Backspace'`) as\n * the keypad emits them, and passes anything else through as a MathLive\n * selector.\n */\n keystroke(v) {\n log('keystroke: ', v);\n\n if (!this.mathField) {\n return '';\n }\n\n const selector = KEYSTROKES[v] || v;\n\n try {\n this.mathField.executeCommand(selector);\n } catch (e) {\n log('unknown keystroke/selector \"%s\": %s', v, e && e.message);\n }\n\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":[]}