@pie-lib/math-input-mathlive 1.1.5-beta.9 → 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.
- package/README.md +84 -109
- package/dist/_virtual/_rolldown/runtime.js +11 -0
- package/dist/horizontal-keypad.d.ts +22 -0
- package/dist/horizontal-keypad.js +54 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.js +12 -0
- package/dist/keypad/index.d.ts +40 -0
- package/dist/keypad/index.js +245 -0
- package/dist/keypad/keys-layout.d.ts +7 -0
- package/dist/keypad/keys-layout.js +5 -0
- package/dist/keys/basic-operators.d.ts +5 -0
- package/dist/keys/basic-operators.js +30 -0
- package/dist/keys/chars.d.ts +5 -0
- package/dist/keys/comparison.d.ts +4 -0
- package/dist/keys/comparison.js +32 -0
- package/dist/keys/constants.d.ts +4 -0
- package/dist/keys/constants.js +35 -0
- package/dist/keys/digits.d.ts +15 -0
- package/dist/keys/digits.js +34 -0
- package/dist/keys/edit.d.ts +6 -0
- package/dist/keys/edit.js +9 -0
- package/dist/keys/exponent.d.ts +4 -0
- package/dist/keys/exponent.js +28 -0
- package/dist/keys/fractions.d.ts +3 -0
- package/dist/keys/fractions.js +27 -0
- package/dist/keys/geometry.d.ts +23 -0
- package/dist/keys/geometry.js +127 -0
- package/dist/keys/grades.d.ts +9 -0
- package/dist/keys/grades.js +414 -0
- package/dist/keys/index.d.ts +6 -0
- package/dist/keys/index.js +50 -0
- package/dist/keys/log.d.ts +3 -0
- package/dist/keys/log.js +25 -0
- package/dist/keys/logic.d.ts +2 -0
- package/dist/keys/logic.js +13 -0
- package/dist/keys/matrices.d.ts +2 -0
- package/dist/keys/matrices.js +17 -0
- package/dist/keys/misc.d.ts +10 -0
- package/dist/keys/misc.js +60 -0
- package/dist/keys/navigation.d.ts +2 -0
- package/dist/keys/navigation.js +13 -0
- package/dist/keys/operators.d.ts +1 -0
- package/dist/keys/operators.js +11 -0
- package/dist/keys/statistics.d.ts +5 -0
- package/dist/keys/statistics.js +38 -0
- package/dist/keys/sub-sup.d.ts +2 -0
- package/dist/keys/sub-sup.js +17 -0
- package/dist/keys/trigonometry.d.ts +6 -0
- package/dist/keys/trigonometry.js +43 -0
- package/dist/keys/utils.d.ts +5 -0
- package/dist/keys/utils.js +24 -0
- package/dist/keys/vars.d.ts +3 -0
- package/dist/keys/vars.js +22 -0
- package/dist/latex-bridge.d.ts +197 -0
- package/dist/latex-bridge.js +210 -0
- package/dist/longdiv.d.ts +24 -0
- package/dist/longdiv.js +43 -0
- package/dist/math-input.d.ts +26 -0
- package/dist/math-input.js +74 -0
- package/dist/mathlive-instance.d.ts +221 -0
- package/dist/mathlive-instance.js +159 -0
- package/dist/mf/common-styles.d.ts +594 -0
- package/dist/mf/common-styles.js +80 -0
- package/dist/mf/field-label.d.ts +16 -0
- package/dist/mf/field-label.js +13 -0
- package/dist/mf/index.d.ts +4 -0
- package/dist/mf/index.js +21 -0
- package/dist/mf/input.d.ts +94 -0
- package/dist/mf/input.js +127 -0
- package/dist/mf/static.d.ts +143 -0
- package/dist/mf/static.js +230 -0
- package/dist/selection.d.ts +43 -0
- package/dist/selection.js +39 -0
- package/package.json +32 -18
- package/lib/__tests__/composites.test.js +0 -255
- package/lib/__tests__/drop-in-compat.test.js +0 -133
- package/lib/__tests__/embedded-fonts.test.js +0 -121
- package/lib/__tests__/index.test.js +0 -118
- package/lib/__tests__/input-imperative.test.js +0 -155
- package/lib/__tests__/keypad-label.test.js +0 -231
- package/lib/__tests__/keypad-render.test.js +0 -206
- package/lib/__tests__/latex-bridge.test.js +0 -386
- package/lib/__tests__/mathlive-instance.test.js +0 -419
- package/lib/__tests__/mount-race.test.js +0 -218
- package/lib/__tests__/static-prompts.test.js +0 -405
- package/lib/__tests__/tmp-markup.test.js +0 -26
- package/lib/horizontal-keypad.js +0 -101
- package/lib/horizontal-keypad.js.map +0 -1
- package/lib/index.js +0 -143
- package/lib/index.js.map +0 -1
- package/lib/keypad/index.js +0 -431
- package/lib/keypad/index.js.map +0 -1
- package/lib/keypad/keys-layout.js +0 -22
- package/lib/keypad/keys-layout.js.map +0 -1
- package/lib/keys/basic-operators.js +0 -33
- package/lib/keys/basic-operators.js.map +0 -1
- package/lib/keys/chars.js +0 -12
- package/lib/keys/chars.js.map +0 -1
- package/lib/keys/comparison.js +0 -39
- package/lib/keys/comparison.js.map +0 -1
- package/lib/keys/constants.js +0 -37
- package/lib/keys/constants.js.map +0 -1
- package/lib/keys/digits.js +0 -46
- package/lib/keys/digits.js.map +0 -1
- package/lib/keys/edit.js +0 -14
- package/lib/keys/edit.js.map +0 -1
- package/lib/keys/exponent.js +0 -30
- package/lib/keys/exponent.js.map +0 -1
- package/lib/keys/fractions.js +0 -29
- package/lib/keys/fractions.js.map +0 -1
- package/lib/keys/geometry.js +0 -143
- package/lib/keys/geometry.js.map +0 -1
- package/lib/keys/grades.js +0 -259
- package/lib/keys/grades.js.map +0 -1
- package/lib/keys/index.js +0 -35
- package/lib/keys/index.js.map +0 -1
- package/lib/keys/log.js +0 -27
- package/lib/keys/log.js.map +0 -1
- package/lib/keys/logic.js +0 -19
- package/lib/keys/logic.js.map +0 -1
- package/lib/keys/matrices.js +0 -19
- package/lib/keys/matrices.js.map +0 -1
- package/lib/keys/misc.js +0 -69
- package/lib/keys/misc.js.map +0 -1
- package/lib/keys/navigation.js +0 -20
- package/lib/keys/navigation.js.map +0 -1
- package/lib/keys/operators.js +0 -15
- package/lib/keys/operators.js.map +0 -1
- package/lib/keys/statistics.js +0 -40
- package/lib/keys/statistics.js.map +0 -1
- package/lib/keys/sub-sup.js +0 -19
- package/lib/keys/sub-sup.js.map +0 -1
- package/lib/keys/trigonometry.js +0 -45
- package/lib/keys/trigonometry.js.map +0 -1
- package/lib/keys/utils.js +0 -87
- package/lib/keys/utils.js.map +0 -1
- package/lib/keys/vars.js +0 -24
- package/lib/keys/vars.js.map +0 -1
- package/lib/latex-bridge.js +0 -508
- package/lib/latex-bridge.js.map +0 -1
- package/lib/math-input.js +0 -143
- package/lib/math-input.js.map +0 -1
- package/lib/mathlive-instance.js +0 -585
- package/lib/mathlive-instance.js.map +0 -1
- package/lib/mf/common-styles.js +0 -203
- package/lib/mf/common-styles.js.map +0 -1
- package/lib/mf/index.js +0 -84
- package/lib/mf/index.js.map +0 -1
- package/lib/mf/input.js +0 -364
- package/lib/mf/input.js.map +0 -1
- package/lib/mf/static.js +0 -500
- package/lib/mf/static.js.map +0 -1
- package/src/__tests__/composites.test.jsx +0 -220
- package/src/__tests__/drop-in-compat.test.jsx +0 -112
- package/src/__tests__/index.test.jsx +0 -109
- package/src/__tests__/input-imperative.test.jsx +0 -144
- package/src/__tests__/keypad-label.test.jsx +0 -283
- package/src/__tests__/keypad-render.test.jsx +0 -123
- package/src/__tests__/latex-bridge.test.js +0 -389
- package/src/__tests__/mathlive-instance.test.js +0 -418
- package/src/__tests__/mount-race.test.jsx +0 -142
- package/src/__tests__/static-prompts.test.jsx +0 -364
- package/src/horizontal-keypad.jsx +0 -73
- package/src/index.jsx +0 -63
- package/src/keypad/index.jsx +0 -386
- package/src/keypad/keys-layout.js +0 -16
- package/src/keys/basic-operators.js +0 -32
- package/src/keys/chars.js +0 -5
- package/src/keys/comparison.js +0 -28
- package/src/keys/constants.js +0 -35
- package/src/keys/digits.js +0 -40
- package/src/keys/edit.js +0 -3
- package/src/keys/exponent.js +0 -28
- package/src/keys/fractions.js +0 -26
- package/src/keys/geometry.js +0 -149
- package/src/keys/grades.js +0 -367
- package/src/keys/index.js +0 -20
- package/src/keys/log.js +0 -22
- package/src/keys/logic.js +0 -15
- package/src/keys/matrices.js +0 -15
- package/src/keys/misc.js +0 -71
- package/src/keys/navigation.js +0 -8
- package/src/keys/operators.js +0 -10
- package/src/keys/statistics.js +0 -38
- package/src/keys/sub-sup.js +0 -15
- package/src/keys/trigonometry.js +0 -15
- package/src/keys/utils.js +0 -66
- package/src/keys/vars.js +0 -19
- package/src/latex-bridge.js +0 -524
- package/src/math-input.jsx +0 -115
- package/src/mathlive-instance.js +0 -582
- package/src/mf/common-styles.js +0 -210
- package/src/mf/index.js +0 -30
- package/src/mf/input.jsx +0 -319
- package/src/mf/static.jsx +0 -479
package/lib/mf/static.js
DELETED
|
@@ -1,500 +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"] = void 0;
|
|
8
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
10
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
|
-
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
12
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
-
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
14
|
-
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
15
|
-
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
16
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
17
|
-
var _react = _interopRequireDefault(require("react"));
|
|
18
|
-
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
19
|
-
var _styles = require("@mui/material/styles");
|
|
20
|
-
var _debug = _interopRequireDefault(require("debug"));
|
|
21
|
-
var _mathliveInstance = require("../mathlive-instance");
|
|
22
|
-
var _latexBridge = require("../latex-bridge");
|
|
23
|
-
var _commonStyles = require("./common-styles");
|
|
24
|
-
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)); }
|
|
25
|
-
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
26
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
27
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
28
|
-
var log = (0, _debug["default"])('pie-lib:math-input-mathlive:static');
|
|
29
|
-
var Holder = (0, _styles.styled)('span')(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
|
|
30
|
-
display: 'inline-block'
|
|
31
|
-
}, _commonStyles.placeholderStyles), _commonStyles.rootIndexStyles), _commonStyles.parallelStyles), {}, {
|
|
32
|
-
'& math-field': {
|
|
33
|
-
display: 'inline-block',
|
|
34
|
-
border: 'none',
|
|
35
|
-
background: 'transparent'
|
|
36
|
-
},
|
|
37
|
-
'& math-field::part(virtual-keyboard-toggle)': {
|
|
38
|
-
display: 'none'
|
|
39
|
-
},
|
|
40
|
-
'& math-field::part(menu-toggle)': {
|
|
41
|
-
display: 'none'
|
|
42
|
-
}
|
|
43
|
-
}));
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Static math. Drop-in replacement for @pie-lib/math-input's `mq.Static`.
|
|
47
|
-
*
|
|
48
|
-
* Two modes, chosen automatically:
|
|
49
|
-
*
|
|
50
|
-
* - **display** (no answer blocks in the latex): rendered with
|
|
51
|
-
* `convertLatexToMarkup`. No mathfield instance, so it is cheap enough for
|
|
52
|
-
* keypad labels - the old implementation created a full MathQuill
|
|
53
|
-
* StaticMath per button.
|
|
54
|
-
*
|
|
55
|
-
* - **interactive** (latex contains `\MathQuillMathField[..]{}` /
|
|
56
|
-
* `\placeholder[..]{}`): a read-only `<math-field>` whose placeholders stay
|
|
57
|
-
* editable. Sub-field values are surfaced through the prompts API, replacing
|
|
58
|
-
* MathQuill's `innerFields`.
|
|
59
|
-
*/
|
|
60
|
-
var Static = exports["default"] = /*#__PURE__*/function (_React$Component) {
|
|
61
|
-
function Static(props) {
|
|
62
|
-
var _this;
|
|
63
|
-
(0, _classCallCheck2["default"])(this, Static);
|
|
64
|
-
_this = _callSuper(this, Static, [props]);
|
|
65
|
-
/**
|
|
66
|
-
* Off-screen aria-live region, ported from @pie-lib/math-input's Static.
|
|
67
|
-
*
|
|
68
|
-
* MathLive has its own accessibility layer, but it does not announce that
|
|
69
|
-
* typed input was converted into a math symbol, which screen-reader users
|
|
70
|
-
* relied on in the MathQuill implementation.
|
|
71
|
-
*/
|
|
72
|
-
(0, _defineProperty2["default"])(_this, "createLiveRegion", function () {
|
|
73
|
-
if (typeof document === 'undefined' || _this.liveRegion) {
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
_this.liveRegion = document.createElement('div');
|
|
77
|
-
Object.assign(_this.liveRegion.style, {
|
|
78
|
-
position: 'absolute',
|
|
79
|
-
width: '1px',
|
|
80
|
-
height: '1px',
|
|
81
|
-
marginTop: '-1px',
|
|
82
|
-
clip: 'rect(1px, 1px, 1px, 1px)',
|
|
83
|
-
overflow: 'hidden'
|
|
84
|
-
});
|
|
85
|
-
_this.liveRegion.setAttribute('aria-live', 'polite');
|
|
86
|
-
_this.liveRegion.setAttribute('aria-atomic', 'true');
|
|
87
|
-
document.body.appendChild(_this.liveRegion);
|
|
88
|
-
});
|
|
89
|
-
(0, _defineProperty2["default"])(_this, "removeLiveRegion", function () {
|
|
90
|
-
if (_this.liveRegion && _this.liveRegion.parentNode) {
|
|
91
|
-
_this.liveRegion.parentNode.removeChild(_this.liveRegion);
|
|
92
|
-
}
|
|
93
|
-
_this.liveRegion = undefined;
|
|
94
|
-
});
|
|
95
|
-
(0, _defineProperty2["default"])(_this, "announce", function (message) {
|
|
96
|
-
if (!_this.liveRegion) {
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
_this.liveRegion.textContent = message;
|
|
100
|
-
|
|
101
|
-
// Clear once announced, so the same message can be announced again.
|
|
102
|
-
clearTimeout(_this.announceTimeout);
|
|
103
|
-
_this.announceTimeout = setTimeout(function () {
|
|
104
|
-
if (_this.liveRegion) {
|
|
105
|
-
_this.liveRegion.textContent = '';
|
|
106
|
-
}
|
|
107
|
-
}, 500);
|
|
108
|
-
});
|
|
109
|
-
(0, _defineProperty2["default"])(_this, "onKeyDown", function (event) {
|
|
110
|
-
// Deletions should not be announced as conversions.
|
|
111
|
-
_this.isDeleting = (event === null || event === void 0 ? void 0 : event.key) === 'Backspace' || (event === null || event === void 0 ? void 0 : event.key) === 'Delete';
|
|
112
|
-
});
|
|
113
|
-
/**
|
|
114
|
-
* Announce when typed input became a math symbol. The MathQuill version
|
|
115
|
-
* inferred this by counting braces; here a prompt whose latex grew by more
|
|
116
|
-
* than the single character typed means a command was expanded.
|
|
117
|
-
*/
|
|
118
|
-
(0, _defineProperty2["default"])(_this, "announceConversion", function (next) {
|
|
119
|
-
if (_this.isDeleting) {
|
|
120
|
-
_this.isDeleting = false;
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
123
|
-
var converted = Object.keys(next).some(function (id) {
|
|
124
|
-
var before = _this.promptValues[id] || '';
|
|
125
|
-
var after = next[id] || '';
|
|
126
|
-
return after.length > before.length + 1 && /\\/.test(after.slice(before.length));
|
|
127
|
-
});
|
|
128
|
-
if (converted) {
|
|
129
|
-
_this.announce('Converted to math symbol');
|
|
130
|
-
}
|
|
131
|
-
});
|
|
132
|
-
(0, _defineProperty2["default"])(_this, "onPromptInput", function () {
|
|
133
|
-
var _this$props = _this.props,
|
|
134
|
-
onSubFieldChange = _this$props.onSubFieldChange,
|
|
135
|
-
getFieldName = _this$props.getFieldName;
|
|
136
|
-
if (!_this.mathField) {
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
|
-
var next = _this.values();
|
|
140
|
-
_this.announceConversion(next);
|
|
141
|
-
if (!onSubFieldChange) {
|
|
142
|
-
_this.promptValues = next;
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
var fields = _this.innerFields;
|
|
146
|
-
|
|
147
|
-
// Emit only the prompts whose value actually changed, mirroring the
|
|
148
|
-
// per-field granularity of the old onSubFieldChange(name, latex).
|
|
149
|
-
Object.keys(next).forEach(function (id) {
|
|
150
|
-
if (next[id] === _this.promptValues[id]) {
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
var name = getFieldName(_this.promptHandle(id), fields) || id;
|
|
154
|
-
onSubFieldChange(name, next[id]);
|
|
155
|
-
});
|
|
156
|
-
_this.promptValues = next;
|
|
157
|
-
});
|
|
158
|
-
(0, _defineProperty2["default"])(_this, "onPromptFocus", function () {
|
|
159
|
-
var _this$props2 = _this.props,
|
|
160
|
-
onSubFieldFocus = _this$props2.onSubFieldFocus,
|
|
161
|
-
getFieldName = _this$props2.getFieldName;
|
|
162
|
-
if (!_this.mathField || !onSubFieldFocus) {
|
|
163
|
-
return;
|
|
164
|
-
}
|
|
165
|
-
try {
|
|
166
|
-
var ids = _this.mathField.getPrompts() || [];
|
|
167
|
-
// The focused prompt is the one containing the current selection.
|
|
168
|
-
var focused = ids.find(function (id) {
|
|
169
|
-
var range = _this.mathField.getPromptRange(id);
|
|
170
|
-
var selection = _this.mathField.selection;
|
|
171
|
-
if (!range || !selection || !selection.ranges || !selection.ranges.length) {
|
|
172
|
-
return false;
|
|
173
|
-
}
|
|
174
|
-
var _range = (0, _slicedToArray2["default"])(range, 2),
|
|
175
|
-
start = _range[0],
|
|
176
|
-
end = _range[1];
|
|
177
|
-
var _selection$ranges$ = (0, _slicedToArray2["default"])(selection.ranges[0], 1),
|
|
178
|
-
selStart = _selection$ranges$[0];
|
|
179
|
-
return selStart >= start && selStart <= end;
|
|
180
|
-
});
|
|
181
|
-
if (focused) {
|
|
182
|
-
var handle = _this.promptHandle(focused);
|
|
183
|
-
var name = getFieldName(handle, _this.innerFields) || focused;
|
|
184
|
-
if (_this.props.setInput) {
|
|
185
|
-
_this.props.setInput(handle);
|
|
186
|
-
}
|
|
187
|
-
onSubFieldFocus(name, handle);
|
|
188
|
-
}
|
|
189
|
-
} catch (e) {
|
|
190
|
-
log('error resolving focused prompt: %s', e.message);
|
|
191
|
-
}
|
|
192
|
-
});
|
|
193
|
-
_this.holderRef = /*#__PURE__*/_react["default"].createRef();
|
|
194
|
-
_this.state = {
|
|
195
|
-
markup: ''
|
|
196
|
-
};
|
|
197
|
-
_this.promptValues = {};
|
|
198
|
-
return _this;
|
|
199
|
-
}
|
|
200
|
-
(0, _inherits2["default"])(Static, _React$Component);
|
|
201
|
-
return (0, _createClass2["default"])(Static, [{
|
|
202
|
-
key: "componentDidMount",
|
|
203
|
-
value: function () {
|
|
204
|
-
var _componentDidMount = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
205
|
-
var generation, ml;
|
|
206
|
-
return _regenerator["default"].wrap(function (_context) {
|
|
207
|
-
while (1) switch (_context.prev = _context.next) {
|
|
208
|
-
case 0:
|
|
209
|
-
// See the note in mf/input.jsx: a generation counter, not a boolean, so a
|
|
210
|
-
// StrictMode mount -> unmount -> mount on the same instance still ends up
|
|
211
|
-
// with exactly one field.
|
|
212
|
-
generation = this.mountGeneration = (this.mountGeneration || 0) + 1;
|
|
213
|
-
if (this.isInteractive()) {
|
|
214
|
-
_context.next = 2;
|
|
215
|
-
break;
|
|
216
|
-
}
|
|
217
|
-
_context.next = 1;
|
|
218
|
-
return (0, _mathliveInstance.loadMathLive)();
|
|
219
|
-
case 1:
|
|
220
|
-
if (generation === this.mountGeneration) {
|
|
221
|
-
this.renderMarkup();
|
|
222
|
-
}
|
|
223
|
-
return _context.abrupt("return");
|
|
224
|
-
case 2:
|
|
225
|
-
_context.next = 3;
|
|
226
|
-
return (0, _mathliveInstance.loadMathLive)();
|
|
227
|
-
case 3:
|
|
228
|
-
ml = _context.sent;
|
|
229
|
-
if (!(generation !== this.mountGeneration || !ml || !this.holderRef.current || this.mathField)) {
|
|
230
|
-
_context.next = 4;
|
|
231
|
-
break;
|
|
232
|
-
}
|
|
233
|
-
return _context.abrupt("return");
|
|
234
|
-
case 4:
|
|
235
|
-
this.mathField = new ml.MathfieldElement({
|
|
236
|
-
macros: (0, _mathliveInstance.getMacros)()
|
|
237
|
-
});
|
|
238
|
-
this.mathField.readOnly = true;
|
|
239
|
-
this.mathField.mathVirtualKeyboardPolicy = 'manual';
|
|
240
|
-
// Without this the spacebar does nothing: MathLive's mathModeSpace
|
|
241
|
-
// defaults to an empty string.
|
|
242
|
-
this.mathField.mathModeSpace = _mathliveInstance.MATH_MODE_SPACE;
|
|
243
|
-
// Same as the editor: stay in the exponent after a digit (see mf/input.jsx).
|
|
244
|
-
this.mathField.smartSuperscript = false;
|
|
245
|
-
this.mathField.value = (0, _latexBridge.toMathLive)(this.props.latex);
|
|
246
|
-
|
|
247
|
-
// The mathfield renders in shadow DOM, so page CSS cannot reach it - the
|
|
248
|
-
// stretchy-accent fix has to be injected there directly.
|
|
249
|
-
(0, _mathliveInstance.applyShadowStyles)(this.mathField);
|
|
250
|
-
|
|
251
|
-
// A selected `\placeholder{}` gets no MathLive caret; draw one. Answer
|
|
252
|
-
// blocks are typed into with the same keypad, so they grow placeholders too.
|
|
253
|
-
this.untrackCaret = (0, _mathliveInstance.trackPlaceholderCaret)(this.mathField);
|
|
254
|
-
this.mathField.addEventListener('input', this.onPromptInput);
|
|
255
|
-
this.mathField.addEventListener('focusin', this.onPromptFocus);
|
|
256
|
-
this.mathField.addEventListener('keydown', this.onKeyDown);
|
|
257
|
-
|
|
258
|
-
// Belt and braces: drop anything a previous mount may have left behind.
|
|
259
|
-
this.holderRef.current.replaceChildren(this.mathField);
|
|
260
|
-
this.createLiveRegion();
|
|
261
|
-
case 5:
|
|
262
|
-
case "end":
|
|
263
|
-
return _context.stop();
|
|
264
|
-
}
|
|
265
|
-
}, _callee, this);
|
|
266
|
-
}));
|
|
267
|
-
function componentDidMount() {
|
|
268
|
-
return _componentDidMount.apply(this, arguments);
|
|
269
|
-
}
|
|
270
|
-
return componentDidMount;
|
|
271
|
-
}()
|
|
272
|
-
}, {
|
|
273
|
-
key: "componentDidUpdate",
|
|
274
|
-
value: function componentDidUpdate(prevProps) {
|
|
275
|
-
if (prevProps.latex === this.props.latex) {
|
|
276
|
-
return;
|
|
277
|
-
}
|
|
278
|
-
if (this.mathField) {
|
|
279
|
-
this.mathField.value = (0, _latexBridge.toMathLive)(this.props.latex);
|
|
280
|
-
} else {
|
|
281
|
-
this.renderMarkup();
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
}, {
|
|
285
|
-
key: "componentWillUnmount",
|
|
286
|
-
value: function componentWillUnmount() {
|
|
287
|
-
// Invalidate any mount still awaiting the MathLive load.
|
|
288
|
-
this.mountGeneration = (this.mountGeneration || 0) + 1;
|
|
289
|
-
if (this.untrackCaret) {
|
|
290
|
-
this.untrackCaret();
|
|
291
|
-
this.untrackCaret = undefined;
|
|
292
|
-
}
|
|
293
|
-
if (this.mathField) {
|
|
294
|
-
this.mathField.removeEventListener('input', this.onPromptInput);
|
|
295
|
-
this.mathField.removeEventListener('focusin', this.onPromptFocus);
|
|
296
|
-
this.mathField.removeEventListener('keydown', this.onKeyDown);
|
|
297
|
-
this.mathField.remove();
|
|
298
|
-
this.mathField = undefined;
|
|
299
|
-
}
|
|
300
|
-
this.removeLiveRegion();
|
|
301
|
-
}
|
|
302
|
-
}, {
|
|
303
|
-
key: "isInteractive",
|
|
304
|
-
value: /** Does this latex contain answer blocks? */
|
|
305
|
-
function isInteractive() {
|
|
306
|
-
var latex = this.props.latex || '';
|
|
307
|
-
return (0, _latexBridge.fieldIds)(latex).length > 0 || latex.indexOf('\\placeholder') !== -1;
|
|
308
|
-
}
|
|
309
|
-
}, {
|
|
310
|
-
key: "renderMarkup",
|
|
311
|
-
value: function renderMarkup() {
|
|
312
|
-
var markup = (0, _mathliveInstance.latexToMarkup)(this.props.latex);
|
|
313
|
-
if (markup !== this.state.markup) {
|
|
314
|
-
this.setState({
|
|
315
|
-
markup: markup
|
|
316
|
-
});
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
/** MathQuill's `innerFields` equivalent, keyed by prompt id. */
|
|
321
|
-
}, {
|
|
322
|
-
key: "values",
|
|
323
|
-
value: function values() {
|
|
324
|
-
var _this2 = this;
|
|
325
|
-
if (!this.mathField) {
|
|
326
|
-
return {};
|
|
327
|
-
}
|
|
328
|
-
var out = {};
|
|
329
|
-
(this.mathField.getPrompts() || []).forEach(function (id) {
|
|
330
|
-
out[id] = (0, _latexBridge.fromMathLive)(_this2.mathField.getPromptValue(id));
|
|
331
|
-
});
|
|
332
|
-
return out;
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
/**
|
|
336
|
-
* A MathQuill-inner-field-like handle for a prompt.
|
|
337
|
-
*
|
|
338
|
-
* The old API handed callers a MathQuill field object, and consumers commonly
|
|
339
|
-
* called `field.latex()` on it. There is no equivalent object in MathLive -
|
|
340
|
-
* prompts are addressed by id - so this adapter exposes the parts that were
|
|
341
|
-
* actually used: `id` and a get/set `latex()`.
|
|
342
|
-
*/
|
|
343
|
-
}, {
|
|
344
|
-
key: "promptHandle",
|
|
345
|
-
value: function promptHandle(id) {
|
|
346
|
-
var _this3 = this;
|
|
347
|
-
return {
|
|
348
|
-
id: id,
|
|
349
|
-
// MathQuill's inner fields could be focused directly; keep that.
|
|
350
|
-
focus: function focus() {
|
|
351
|
-
if (_this3.mathField) {
|
|
352
|
-
_this3.mathField.focus();
|
|
353
|
-
_this3.focusPrompt(id);
|
|
354
|
-
}
|
|
355
|
-
},
|
|
356
|
-
latex: function latex(value) {
|
|
357
|
-
if (!_this3.mathField) {
|
|
358
|
-
return '';
|
|
359
|
-
}
|
|
360
|
-
if (value === undefined) {
|
|
361
|
-
return (0, _latexBridge.fromMathLive)(_this3.mathField.getPromptValue(id));
|
|
362
|
-
}
|
|
363
|
-
_this3.mathField.setPromptValue(id, (0, _latexBridge.toMathLive)(value), {});
|
|
364
|
-
return value;
|
|
365
|
-
}
|
|
366
|
-
};
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
/** All prompt handles, the analogue of `mathField.innerFields`. */
|
|
370
|
-
}, {
|
|
371
|
-
key: "innerFields",
|
|
372
|
-
get: function get() {
|
|
373
|
-
var _this4 = this;
|
|
374
|
-
if (!this.mathField) {
|
|
375
|
-
return [];
|
|
376
|
-
}
|
|
377
|
-
return (this.mathField.getPrompts() || []).map(function (id) {
|
|
378
|
-
return _this4.promptHandle(id);
|
|
379
|
-
});
|
|
380
|
-
}
|
|
381
|
-
}, {
|
|
382
|
-
key: "promptContaining",
|
|
383
|
-
value: /** The id of the prompt whose range contains `position`, if any. */
|
|
384
|
-
function promptContaining(position) {
|
|
385
|
-
var _this5 = this;
|
|
386
|
-
if (!this.mathField || typeof position !== 'number') {
|
|
387
|
-
return undefined;
|
|
388
|
-
}
|
|
389
|
-
return (this.mathField.getPrompts() || []).find(function (id) {
|
|
390
|
-
var range = _this5.mathField.getPromptRange(id);
|
|
391
|
-
return range && position >= range[0] && position <= range[1];
|
|
392
|
-
});
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
/**
|
|
396
|
-
* Put a blinking caret inside an answer block.
|
|
397
|
-
*
|
|
398
|
-
* MathLive only makes the caret visible while the field element carries the
|
|
399
|
-
* `ML__focused` class, and it adds that class during a *render*, gated on
|
|
400
|
-
* `isSelectionEditable && hasFocus()`. In a read-only field only prompt
|
|
401
|
-
* interiors are editable, so the two things both have to be true:
|
|
402
|
-
*
|
|
403
|
-
* - the selection must sit inside a prompt, and
|
|
404
|
-
* - a render must run afterwards.
|
|
405
|
-
*
|
|
406
|
-
* Assigning `selection` satisfies the first but not the second - it updates
|
|
407
|
-
* the model without re-rendering, so the class stays off and the caret span
|
|
408
|
-
* remains `visibility: hidden`. Executing any command does trigger the
|
|
409
|
-
* render, and `scrollIntoView` is the one with no other effect: it keeps the
|
|
410
|
-
* caret on screen, which the preceding `focus()` already does anyway.
|
|
411
|
-
*
|
|
412
|
-
* @param {string} [id] prompt to focus; defaults to the first one
|
|
413
|
-
*/
|
|
414
|
-
}, {
|
|
415
|
-
key: "focusPrompt",
|
|
416
|
-
value: function focusPrompt(id) {
|
|
417
|
-
if (!this.mathField) {
|
|
418
|
-
return;
|
|
419
|
-
}
|
|
420
|
-
var ids = this.mathField.getPrompts() || [];
|
|
421
|
-
var target = id && ids.indexOf(id) !== -1 ? id : ids[0];
|
|
422
|
-
if (!target) {
|
|
423
|
-
return;
|
|
424
|
-
}
|
|
425
|
-
var range = this.mathField.getPromptRange(target);
|
|
426
|
-
if (!range) {
|
|
427
|
-
return;
|
|
428
|
-
}
|
|
429
|
-
this.mathField.selection = {
|
|
430
|
-
ranges: [[range[0], range[0]]]
|
|
431
|
-
};
|
|
432
|
-
if (typeof this.mathField.executeCommand === 'function') {
|
|
433
|
-
this.mathField.executeCommand('scrollIntoView');
|
|
434
|
-
}
|
|
435
|
-
}
|
|
436
|
-
}, {
|
|
437
|
-
key: "focus",
|
|
438
|
-
value: function focus() {
|
|
439
|
-
if (!this.mathField) {
|
|
440
|
-
return;
|
|
441
|
-
}
|
|
442
|
-
this.mathField.focus();
|
|
443
|
-
|
|
444
|
-
// A bare focus() leaves the selection outside every prompt, which in a
|
|
445
|
-
// read-only field is not editable - the block looked focused but had no
|
|
446
|
-
// cursor. Clicking a prompt already works, because MathLive's own pointer
|
|
447
|
-
// handling moves the selection and re-renders.
|
|
448
|
-
if (!this.promptContaining(this.mathField.position)) {
|
|
449
|
-
this.focusPrompt();
|
|
450
|
-
}
|
|
451
|
-
}
|
|
452
|
-
}, {
|
|
453
|
-
key: "blur",
|
|
454
|
-
value: function blur() {
|
|
455
|
-
this.mathField && this.mathField.blur();
|
|
456
|
-
}
|
|
457
|
-
}, {
|
|
458
|
-
key: "render",
|
|
459
|
-
value: function render() {
|
|
460
|
-
var _this$props3 = this.props,
|
|
461
|
-
className = _this$props3.className,
|
|
462
|
-
onFocus = _this$props3.onFocus,
|
|
463
|
-
onBlur = _this$props3.onBlur;
|
|
464
|
-
var markup = this.state.markup;
|
|
465
|
-
if (this.mathField || this.isInteractive()) {
|
|
466
|
-
return /*#__PURE__*/_react["default"].createElement(Holder, {
|
|
467
|
-
className: className,
|
|
468
|
-
onFocus: onFocus,
|
|
469
|
-
onBlur: onBlur,
|
|
470
|
-
ref: this.holderRef
|
|
471
|
-
});
|
|
472
|
-
}
|
|
473
|
-
return /*#__PURE__*/_react["default"].createElement(Holder, {
|
|
474
|
-
className: className,
|
|
475
|
-
onFocus: onFocus,
|
|
476
|
-
onBlur: onBlur,
|
|
477
|
-
ref: this.holderRef
|
|
478
|
-
// eslint-disable-next-line react/no-danger
|
|
479
|
-
,
|
|
480
|
-
dangerouslySetInnerHTML: {
|
|
481
|
-
__html: markup
|
|
482
|
-
}
|
|
483
|
-
});
|
|
484
|
-
}
|
|
485
|
-
}]);
|
|
486
|
-
}(_react["default"].Component);
|
|
487
|
-
(0, _defineProperty2["default"])(Static, "propTypes", {
|
|
488
|
-
latex: _propTypes["default"].string.isRequired,
|
|
489
|
-
className: _propTypes["default"].string,
|
|
490
|
-
onFocus: _propTypes["default"].func,
|
|
491
|
-
onBlur: _propTypes["default"].func,
|
|
492
|
-
getFieldName: _propTypes["default"].func,
|
|
493
|
-
onSubFieldChange: _propTypes["default"].func,
|
|
494
|
-
onSubFieldFocus: _propTypes["default"].func,
|
|
495
|
-
setInput: _propTypes["default"].func
|
|
496
|
-
});
|
|
497
|
-
(0, _defineProperty2["default"])(Static, "defaultProps", {
|
|
498
|
-
getFieldName: function getFieldName() {}
|
|
499
|
-
});
|
|
500
|
-
//# sourceMappingURL=static.js.map
|
package/lib/mf/static.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"static.js","names":["_react","_interopRequireDefault","require","_propTypes","_styles","_debug","_mathliveInstance","_latexBridge","_commonStyles","_callSuper","t","o","e","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","Reflect","construct","constructor","apply","Boolean","prototype","valueOf","call","ownKeys","r","Object","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","enumerable","push","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","log","debug","Holder","styled","display","placeholderStyles","rootIndexStyles","parallelStyles","border","background","Static","exports","_React$Component","props","_this","_classCallCheck2","document","liveRegion","createElement","assign","style","position","width","height","marginTop","clip","overflow","setAttribute","body","appendChild","parentNode","removeChild","undefined","message","textContent","clearTimeout","announceTimeout","setTimeout","event","isDeleting","key","next","converted","some","id","before","promptValues","after","test","slice","announce","_this$props","onSubFieldChange","getFieldName","mathField","values","announceConversion","fields","innerFields","name","promptHandle","_this$props2","onSubFieldFocus","ids","getPrompts","focused","find","range","getPromptRange","selection","ranges","_range","_slicedToArray2","start","end","_selection$ranges$","selStart","handle","setInput","holderRef","React","createRef","state","markup","_inherits2","_createClass2","value","_componentDidMount","_asyncToGenerator2","_regenerator","mark","_callee","generation","ml","wrap","_context","prev","mountGeneration","isInteractive","loadMathLive","renderMarkup","abrupt","sent","current","MathfieldElement","macros","getMacros","readOnly","mathVirtualKeyboardPolicy","mathModeSpace","MATH_MODE_SPACE","smartSuperscript","toMathLive","latex","applyShadowStyles","untrackCaret","trackPlaceholderCaret","addEventListener","onPromptInput","onPromptFocus","onKeyDown","replaceChildren","createLiveRegion","stop","componentDidMount","componentDidUpdate","prevProps","componentWillUnmount","removeEventListener","remove","removeLiveRegion","fieldIds","indexOf","latexToMarkup","setState","_this2","out","fromMathLive","getPromptValue","_this3","focus","focusPrompt","setPromptValue","get","_this4","map","promptContaining","_this5","target","executeCommand","blur","render","_this$props3","className","onFocus","onBlur","ref","dangerouslySetInnerHTML","__html","Component","PropTypes","string","isRequired","func"],"sources":["../../src/mf/static.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 latexToMarkup,\n MATH_MODE_SPACE,\n applyShadowStyles,\n trackPlaceholderCaret,\n} from '../mathlive-instance';\nimport { toMathLive, fromMathLive, fieldIds } from '../latex-bridge';\nimport { placeholderStyles, rootIndexStyles, parallelStyles } from './common-styles';\n\nconst log = debug('pie-lib:math-input-mathlive:static');\n\nconst Holder = styled('span')({\n display: 'inline-block',\n // Shared static-math rules: muted empty-slot glyphs and svg containment.\n ...placeholderStyles,\n // Readable radical index - display mode renders in the light DOM, so the\n // shadow-root copy of this rule does not reach it.\n ...rootIndexStyles,\n ...parallelStyles,\n '& math-field': {\n display: 'inline-block',\n border: 'none',\n background: 'transparent',\n },\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 * Static math. Drop-in replacement for @pie-lib/math-input's `mq.Static`.\n *\n * Two modes, chosen automatically:\n *\n * - **display** (no answer blocks in the latex): rendered with\n * `convertLatexToMarkup`. No mathfield instance, so it is cheap enough for\n * keypad labels - the old implementation created a full MathQuill\n * StaticMath per button.\n *\n * - **interactive** (latex contains `\\MathQuillMathField[..]{}` /\n * `\\placeholder[..]{}`): a read-only `<math-field>` whose placeholders stay\n * editable. Sub-field values are surfaced through the prompts API, replacing\n * MathQuill's `innerFields`.\n */\nexport default class Static extends React.Component {\n static propTypes = {\n latex: PropTypes.string.isRequired,\n className: PropTypes.string,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n getFieldName: PropTypes.func,\n onSubFieldChange: PropTypes.func,\n onSubFieldFocus: PropTypes.func,\n setInput: PropTypes.func,\n };\n\n static defaultProps = {\n getFieldName: () => {},\n };\n\n constructor(props) {\n super(props);\n this.holderRef = React.createRef();\n this.state = { markup: '' };\n this.promptValues = {};\n }\n\n async componentDidMount() {\n // See the note in mf/input.jsx: a generation counter, not a boolean, so a\n // StrictMode mount -> unmount -> mount on the same instance still ends up\n // with exactly one field.\n const generation = (this.mountGeneration = (this.mountGeneration || 0) + 1);\n\n if (!this.isInteractive()) {\n await loadMathLive();\n\n if (generation === this.mountGeneration) {\n this.renderMarkup();\n }\n\n return;\n }\n\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.readOnly = true;\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 // Same as the editor: stay in the exponent after a digit (see mf/input.jsx).\n this.mathField.smartSuperscript = false;\n this.mathField.value = toMathLive(this.props.latex);\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. Answer\n // blocks are typed into with the same keypad, so they grow placeholders too.\n this.untrackCaret = trackPlaceholderCaret(this.mathField);\n\n this.mathField.addEventListener('input', this.onPromptInput);\n this.mathField.addEventListener('focusin', this.onPromptFocus);\n this.mathField.addEventListener('keydown', this.onKeyDown);\n\n // Belt and braces: drop anything a previous mount may have left behind.\n this.holderRef.current.replaceChildren(this.mathField);\n\n this.createLiveRegion();\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.latex === this.props.latex) {\n return;\n }\n\n if (this.mathField) {\n this.mathField.value = toMathLive(this.props.latex);\n } else {\n this.renderMarkup();\n }\n }\n\n componentWillUnmount() {\n // Invalidate any mount still awaiting the MathLive load.\n this.mountGeneration = (this.mountGeneration || 0) + 1;\n\n if (this.untrackCaret) {\n this.untrackCaret();\n this.untrackCaret = undefined;\n }\n\n if (this.mathField) {\n this.mathField.removeEventListener('input', this.onPromptInput);\n this.mathField.removeEventListener('focusin', this.onPromptFocus);\n this.mathField.removeEventListener('keydown', this.onKeyDown);\n this.mathField.remove();\n this.mathField = undefined;\n }\n\n this.removeLiveRegion();\n }\n\n /**\n * Off-screen aria-live region, ported from @pie-lib/math-input's Static.\n *\n * MathLive has its own accessibility layer, but it does not announce that\n * typed input was converted into a math symbol, which screen-reader users\n * relied on in the MathQuill implementation.\n */\n createLiveRegion = () => {\n if (typeof document === 'undefined' || this.liveRegion) {\n return;\n }\n\n this.liveRegion = document.createElement('div');\n Object.assign(this.liveRegion.style, {\n position: 'absolute',\n width: '1px',\n height: '1px',\n marginTop: '-1px',\n clip: 'rect(1px, 1px, 1px, 1px)',\n overflow: 'hidden',\n });\n this.liveRegion.setAttribute('aria-live', 'polite');\n this.liveRegion.setAttribute('aria-atomic', 'true');\n\n document.body.appendChild(this.liveRegion);\n };\n\n removeLiveRegion = () => {\n if (this.liveRegion && this.liveRegion.parentNode) {\n this.liveRegion.parentNode.removeChild(this.liveRegion);\n }\n\n this.liveRegion = undefined;\n };\n\n announce = (message) => {\n if (!this.liveRegion) {\n return;\n }\n\n this.liveRegion.textContent = message;\n\n // Clear once announced, so the same message can be announced again.\n clearTimeout(this.announceTimeout);\n this.announceTimeout = setTimeout(() => {\n if (this.liveRegion) {\n this.liveRegion.textContent = '';\n }\n }, 500);\n };\n\n onKeyDown = (event) => {\n // Deletions should not be announced as conversions.\n this.isDeleting = event?.key === 'Backspace' || event?.key === 'Delete';\n };\n\n /**\n * Announce when typed input became a math symbol. The MathQuill version\n * inferred this by counting braces; here a prompt whose latex grew by more\n * than the single character typed means a command was expanded.\n */\n announceConversion = (next) => {\n if (this.isDeleting) {\n this.isDeleting = false;\n return;\n }\n\n const converted = Object.keys(next).some((id) => {\n const before = this.promptValues[id] || '';\n const after = next[id] || '';\n\n return after.length > before.length + 1 && /\\\\/.test(after.slice(before.length));\n });\n\n if (converted) {\n this.announce('Converted to math symbol');\n }\n };\n\n /** Does this latex contain answer blocks? */\n isInteractive() {\n const latex = this.props.latex || '';\n\n return fieldIds(latex).length > 0 || latex.indexOf('\\\\placeholder') !== -1;\n }\n\n renderMarkup() {\n const markup = latexToMarkup(this.props.latex);\n\n if (markup !== this.state.markup) {\n this.setState({ markup });\n }\n }\n\n /** MathQuill's `innerFields` equivalent, keyed by prompt id. */\n values() {\n if (!this.mathField) {\n return {};\n }\n\n const out = {};\n\n (this.mathField.getPrompts() || []).forEach((id) => {\n out[id] = fromMathLive(this.mathField.getPromptValue(id));\n });\n\n return out;\n }\n\n /**\n * A MathQuill-inner-field-like handle for a prompt.\n *\n * The old API handed callers a MathQuill field object, and consumers commonly\n * called `field.latex()` on it. There is no equivalent object in MathLive -\n * prompts are addressed by id - so this adapter exposes the parts that were\n * actually used: `id` and a get/set `latex()`.\n */\n promptHandle(id) {\n return {\n id,\n // MathQuill's inner fields could be focused directly; keep that.\n focus: () => {\n if (this.mathField) {\n this.mathField.focus();\n this.focusPrompt(id);\n }\n },\n latex: (value) => {\n if (!this.mathField) {\n return '';\n }\n\n if (value === undefined) {\n return fromMathLive(this.mathField.getPromptValue(id));\n }\n\n this.mathField.setPromptValue(id, toMathLive(value), {});\n\n return value;\n },\n };\n }\n\n /** All prompt handles, the analogue of `mathField.innerFields`. */\n get innerFields() {\n if (!this.mathField) {\n return [];\n }\n\n return (this.mathField.getPrompts() || []).map((id) => this.promptHandle(id));\n }\n\n onPromptInput = () => {\n const { onSubFieldChange, getFieldName } = this.props;\n\n if (!this.mathField) {\n return;\n }\n\n const next = this.values();\n\n this.announceConversion(next);\n\n if (!onSubFieldChange) {\n this.promptValues = next;\n return;\n }\n\n const fields = this.innerFields;\n\n // Emit only the prompts whose value actually changed, mirroring the\n // per-field granularity of the old onSubFieldChange(name, latex).\n Object.keys(next).forEach((id) => {\n if (next[id] === this.promptValues[id]) {\n return;\n }\n\n const name = getFieldName(this.promptHandle(id), fields) || id;\n\n onSubFieldChange(name, next[id]);\n });\n\n this.promptValues = next;\n };\n\n onPromptFocus = () => {\n const { onSubFieldFocus, getFieldName } = this.props;\n\n if (!this.mathField || !onSubFieldFocus) {\n return;\n }\n\n try {\n const ids = this.mathField.getPrompts() || [];\n // The focused prompt is the one containing the current selection.\n const focused = ids.find((id) => {\n const range = this.mathField.getPromptRange(id);\n const selection = this.mathField.selection;\n\n if (!range || !selection || !selection.ranges || !selection.ranges.length) {\n return false;\n }\n\n const [start, end] = range;\n const [selStart] = selection.ranges[0];\n\n return selStart >= start && selStart <= end;\n });\n\n if (focused) {\n const handle = this.promptHandle(focused);\n const name = getFieldName(handle, this.innerFields) || focused;\n\n if (this.props.setInput) {\n this.props.setInput(handle);\n }\n\n onSubFieldFocus(name, handle);\n }\n } catch (e) {\n log('error resolving focused prompt: %s', e.message);\n }\n };\n\n /** The id of the prompt whose range contains `position`, if any. */\n promptContaining(position) {\n if (!this.mathField || typeof position !== 'number') {\n return undefined;\n }\n\n return (this.mathField.getPrompts() || []).find((id) => {\n const range = this.mathField.getPromptRange(id);\n\n return range && position >= range[0] && position <= range[1];\n });\n }\n\n /**\n * Put a blinking caret inside an answer block.\n *\n * MathLive only makes the caret visible while the field element carries the\n * `ML__focused` class, and it adds that class during a *render*, gated on\n * `isSelectionEditable && hasFocus()`. In a read-only field only prompt\n * interiors are editable, so the two things both have to be true:\n *\n * - the selection must sit inside a prompt, and\n * - a render must run afterwards.\n *\n * Assigning `selection` satisfies the first but not the second - it updates\n * the model without re-rendering, so the class stays off and the caret span\n * remains `visibility: hidden`. Executing any command does trigger the\n * render, and `scrollIntoView` is the one with no other effect: it keeps the\n * caret on screen, which the preceding `focus()` already does anyway.\n *\n * @param {string} [id] prompt to focus; defaults to the first one\n */\n focusPrompt(id) {\n if (!this.mathField) {\n return;\n }\n\n const ids = this.mathField.getPrompts() || [];\n const target = id && ids.indexOf(id) !== -1 ? id : ids[0];\n\n if (!target) {\n return;\n }\n\n const range = this.mathField.getPromptRange(target);\n\n if (!range) {\n return;\n }\n\n this.mathField.selection = { ranges: [[range[0], range[0]]] };\n\n if (typeof this.mathField.executeCommand === 'function') {\n this.mathField.executeCommand('scrollIntoView');\n }\n }\n\n focus() {\n if (!this.mathField) {\n return;\n }\n\n this.mathField.focus();\n\n // A bare focus() leaves the selection outside every prompt, which in a\n // read-only field is not editable - the block looked focused but had no\n // cursor. Clicking a prompt already works, because MathLive's own pointer\n // handling moves the selection and re-renders.\n if (!this.promptContaining(this.mathField.position)) {\n this.focusPrompt();\n }\n }\n\n blur() {\n this.mathField && this.mathField.blur();\n }\n\n render() {\n const { className, onFocus, onBlur } = this.props;\n const { markup } = this.state;\n\n if (this.mathField || this.isInteractive()) {\n return <Holder className={className} onFocus={onFocus} onBlur={onBlur} ref={this.holderRef} />;\n }\n\n return (\n <Holder\n className={className}\n onFocus={onFocus}\n onBlur={onBlur}\n ref={this.holderRef}\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{ __html: markup }}\n />\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|