@pie-lib/math-input-mathlive 1.0.11 → 1.0.12

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 (41) hide show
  1. package/lib/keys/misc.js +9 -2
  2. package/lib/keys/misc.js.map +1 -1
  3. package/lib/latex-bridge.js +30 -0
  4. package/lib/latex-bridge.js.map +1 -1
  5. package/lib/mathlive-instance.js +67 -3
  6. package/lib/mathlive-instance.js.map +1 -1
  7. package/lib/mf/input.js +7 -0
  8. package/lib/mf/input.js.map +1 -1
  9. package/lib/mf/static.js +82 -1
  10. package/lib/mf/static.js.map +1 -1
  11. package/package.json +1 -1
  12. package/src/__tests__/keypad-label.test.jsx +58 -5
  13. package/src/__tests__/latex-bridge.test.js +22 -0
  14. package/src/__tests__/mathlive-instance.test.js +128 -0
  15. package/src/__tests__/mount-race.test.jsx +1 -0
  16. package/src/__tests__/static-prompts.test.jsx +113 -0
  17. package/src/keys/misc.js +8 -2
  18. package/src/latex-bridge.js +34 -0
  19. package/src/mathlive-instance.js +75 -1
  20. package/src/mf/input.jsx +15 -1
  21. package/src/mf/static.jsx +94 -2
  22. package/lib/__tests__/composites.test.js +0 -255
  23. package/lib/__tests__/composites.test.js.map +0 -1
  24. package/lib/__tests__/drop-in-compat.test.js +0 -133
  25. package/lib/__tests__/drop-in-compat.test.js.map +0 -1
  26. package/lib/__tests__/index.test.js +0 -118
  27. package/lib/__tests__/index.test.js.map +0 -1
  28. package/lib/__tests__/input-imperative.test.js +0 -155
  29. package/lib/__tests__/input-imperative.test.js.map +0 -1
  30. package/lib/__tests__/keypad-label.test.js +0 -118
  31. package/lib/__tests__/keypad-label.test.js.map +0 -1
  32. package/lib/__tests__/keypad-render.test.js +0 -206
  33. package/lib/__tests__/keypad-render.test.js.map +0 -1
  34. package/lib/__tests__/latex-bridge.test.js +0 -280
  35. package/lib/__tests__/latex-bridge.test.js.map +0 -1
  36. package/lib/__tests__/mathlive-instance.test.js +0 -279
  37. package/lib/__tests__/mathlive-instance.test.js.map +0 -1
  38. package/lib/__tests__/mount-race.test.js +0 -195
  39. package/lib/__tests__/mount-race.test.js.map +0 -1
  40. package/lib/__tests__/static-prompts.test.js +0 -282
  41. package/lib/__tests__/static-prompts.test.js.map +0 -1
@@ -1,282 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
5
- var _static = _interopRequireDefault(require("../mf/static"));
6
- 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; }
7
- 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; }
8
- /**
9
- * The answer-block contract: `\MathQuillMathField[id]{}` in stored latex becomes
10
- * a MathLive prompt, and sub-field values/focus are surfaced through the same
11
- * callbacks @pie-lib/math-input exposed (`onSubFieldChange`, `onSubFieldFocus`,
12
- * `getFieldName`, `setInput`).
13
- *
14
- * Driven against a stub mathfield: a real <math-field> needs a browser, and what
15
- * matters here is the mapping, not MathLive's rendering.
16
- */
17
- var stubField = function stubField() {
18
- var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
19
- var selection = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
20
- return {
21
- values: _objectSpread({}, values),
22
- getPrompts: function getPrompts() {
23
- return Object.keys(this.values);
24
- },
25
- getPromptValue: function getPromptValue(id) {
26
- return this.values[id];
27
- },
28
- setPromptValue: function setPromptValue(id, v) {
29
- this.values[id] = v;
30
- },
31
- getPromptRange: function getPromptRange(id) {
32
- var i = Object.keys(this.values).indexOf(id);
33
- return [i * 10, i * 10 + 5];
34
- },
35
- selection: selection,
36
- addEventListener: function addEventListener() {},
37
- removeEventListener: function removeEventListener() {},
38
- focus: function focus() {
39
- this.focused = true;
40
- },
41
- blur: function blur() {
42
- this.blurred = true;
43
- },
44
- remove: function remove() {}
45
- };
46
- };
47
- var make = function make() {
48
- var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
49
- return new _static["default"](_objectSpread({
50
- latex: 'x=\\MathQuillMathField[r1]{}',
51
- getFieldName: function getFieldName() {}
52
- }, props));
53
- };
54
- describe('Static: answer blocks / prompts', function () {
55
- describe('isInteractive', function () {
56
- it('is interactive when the latex has answer blocks', function () {
57
- expect(make({
58
- latex: 'x=\\MathQuillMathField[r1]{}'
59
- }).isInteractive()).toBe(true);
60
- expect(make({
61
- latex: 'x=\\placeholder[r1]{}'
62
- }).isInteractive()).toBe(true);
63
- });
64
- it('is display-only for plain latex', function () {
65
- expect(make({
66
- latex: '\\frac{1}{2}'
67
- }).isInteractive()).toBe(false);
68
- expect(make({
69
- latex: ''
70
- }).isInteractive()).toBe(false);
71
- });
72
- });
73
- describe('values', function () {
74
- it('returns {} before the field exists', function () {
75
- expect(make().values()).toEqual({});
76
- });
77
- it('maps each prompt id to its stored-form latex', function () {
78
- var s = make();
79
- s.mathField = stubField({
80
- r1: '7',
81
- r2: '\\placeholder{}'
82
- });
83
-
84
- // \placeholder must not leak into stored values
85
- expect(s.values()).toEqual({
86
- r1: '7',
87
- r2: ''
88
- });
89
- });
90
- });
91
- describe('promptHandle / innerFields', function () {
92
- it('exposes a MathQuill-field-like handle with get/set latex', function () {
93
- var s = make();
94
- s.mathField = stubField({
95
- r1: '7'
96
- });
97
- var h = s.promptHandle('r1');
98
- expect(h.id).toEqual('r1');
99
- expect(h.latex()).toEqual('7');
100
- h.latex('9');
101
- expect(s.mathField.values.r1).toEqual('9');
102
- });
103
- it('handle latex() is safe with no field', function () {
104
- expect(make().promptHandle('r1').latex()).toEqual('');
105
- });
106
- it('innerFields returns one handle per prompt', function () {
107
- var s = make();
108
- s.mathField = stubField({
109
- r1: '1',
110
- r2: '2'
111
- });
112
- expect(s.innerFields.map(function (f) {
113
- return f.id;
114
- })).toEqual(['r1', 'r2']);
115
- expect(make().innerFields).toEqual([]);
116
- });
117
- });
118
- describe('onSubFieldChange', function () {
119
- it('fires only for prompts whose value changed', function () {
120
- var onSubFieldChange = jest.fn();
121
- var s = make({
122
- onSubFieldChange: onSubFieldChange
123
- });
124
- s.mathField = stubField({
125
- r1: '1',
126
- r2: '2'
127
- });
128
- s.promptValues = {
129
- r1: '1',
130
- r2: '2'
131
- };
132
- s.mathField.values.r2 = '5';
133
- s.onPromptInput();
134
- expect(onSubFieldChange).toHaveBeenCalledTimes(1);
135
- expect(onSubFieldChange).toHaveBeenCalledWith('r2', '5');
136
- });
137
- it('uses getFieldName when it returns a name', function () {
138
- var onSubFieldChange = jest.fn();
139
- var s = make({
140
- onSubFieldChange: onSubFieldChange,
141
- getFieldName: function getFieldName(handle) {
142
- return 'named-' + handle.id;
143
- }
144
- });
145
- s.mathField = stubField({
146
- r1: '1'
147
- });
148
- s.promptValues = {};
149
- s.onPromptInput();
150
- expect(onSubFieldChange).toHaveBeenCalledWith('named-r1', '1');
151
- });
152
- it('still tracks values when no callback is supplied', function () {
153
- var s = make();
154
- s.mathField = stubField({
155
- r1: '3'
156
- });
157
- s.onPromptInput();
158
- expect(s.promptValues).toEqual({
159
- r1: '3'
160
- });
161
- });
162
- });
163
- describe('onSubFieldFocus', function () {
164
- it('reports the prompt containing the selection, plus setInput', function () {
165
- var onSubFieldFocus = jest.fn();
166
- var setInput = jest.fn();
167
- var s = make({
168
- onSubFieldFocus: onSubFieldFocus,
169
- setInput: setInput
170
- });
171
-
172
- // r2 occupies offsets 10..15
173
- s.mathField = stubField({
174
- r1: '',
175
- r2: ''
176
- }, {
177
- ranges: [[11, 11]]
178
- });
179
- s.onPromptFocus();
180
- expect(onSubFieldFocus).toHaveBeenCalledTimes(1);
181
- expect(onSubFieldFocus.mock.calls[0][0]).toEqual('r2');
182
- expect(onSubFieldFocus.mock.calls[0][1].id).toEqual('r2');
183
- expect(setInput).toHaveBeenCalled();
184
- });
185
- it('does nothing without a selection', function () {
186
- var onSubFieldFocus = jest.fn();
187
- var s = make({
188
- onSubFieldFocus: onSubFieldFocus
189
- });
190
- s.mathField = stubField({
191
- r1: ''
192
- }, null);
193
- s.onPromptFocus();
194
- expect(onSubFieldFocus).not.toHaveBeenCalled();
195
- });
196
- it('does not throw when the field is missing', function () {
197
- var s = make({
198
- onSubFieldFocus: jest.fn()
199
- });
200
- expect(function () {
201
- return s.onPromptFocus();
202
- }).not.toThrow();
203
- });
204
- });
205
- describe('accessibility announcements', function () {
206
- afterEach(function () {
207
- document.body.innerHTML = '';
208
- });
209
- it('creates a polite off-screen live region', function () {
210
- var s = make();
211
- s.createLiveRegion();
212
- expect(s.liveRegion.getAttribute('aria-live')).toEqual('polite');
213
- expect(s.liveRegion.getAttribute('aria-atomic')).toEqual('true');
214
- expect(document.body.contains(s.liveRegion)).toBe(true);
215
- s.removeLiveRegion();
216
- expect(s.liveRegion).toBeUndefined();
217
- });
218
- it('does not create a second region', function () {
219
- var s = make();
220
- s.createLiveRegion();
221
- var first = s.liveRegion;
222
- s.createLiveRegion();
223
- expect(s.liveRegion).toBe(first);
224
- s.removeLiveRegion();
225
- });
226
- it('announces when typed input expands into a command', function () {
227
- var s = make();
228
- s.createLiveRegion();
229
- s.promptValues = {
230
- r1: 'x'
231
- };
232
- // grew by more than one char AND gained a backslash => a conversion
233
- s.announceConversion({
234
- r1: 'x\\frac{}{}'
235
- });
236
- expect(s.liveRegion.textContent).toEqual('Converted to math symbol');
237
- s.removeLiveRegion();
238
- });
239
- it('does not announce ordinary typing', function () {
240
- var s = make();
241
- s.createLiveRegion();
242
- s.promptValues = {
243
- r1: 'x'
244
- };
245
- s.announceConversion({
246
- r1: 'xy'
247
- });
248
- expect(s.liveRegion.textContent).toEqual('');
249
- s.removeLiveRegion();
250
- });
251
- it('does not announce a deletion', function () {
252
- var s = make();
253
- s.createLiveRegion();
254
- s.promptValues = {
255
- r1: 'x\\frac{}{}'
256
- };
257
- s.onKeyDown({
258
- key: 'Backspace'
259
- });
260
- s.announceConversion({
261
- r1: 'x'
262
- });
263
- expect(s.liveRegion.textContent).toEqual('');
264
- s.removeLiveRegion();
265
- });
266
- });
267
- describe('focus / blur', function () {
268
- it('delegates to the field and is safe without one', function () {
269
- var s = make();
270
- expect(function () {
271
- s.focus();
272
- s.blur();
273
- }).not.toThrow();
274
- s.mathField = stubField();
275
- s.focus();
276
- s.blur();
277
- expect(s.mathField.focused).toBe(true);
278
- expect(s.mathField.blurred).toBe(true);
279
- });
280
- });
281
- });
282
- //# sourceMappingURL=static-prompts.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"static-prompts.test.js","names":["_static","_interopRequireDefault","require","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","stubField","values","undefined","selection","getPrompts","getPromptValue","id","setPromptValue","v","getPromptRange","i","indexOf","addEventListener","removeEventListener","focus","focused","blur","blurred","remove","make","props","Static","latex","getFieldName","describe","it","expect","isInteractive","toBe","toEqual","s","mathField","r1","r2","h","promptHandle","innerFields","map","f","onSubFieldChange","jest","fn","promptValues","onPromptInput","toHaveBeenCalledTimes","toHaveBeenCalledWith","handle","onSubFieldFocus","setInput","ranges","onPromptFocus","mock","calls","toHaveBeenCalled","not","toThrow","afterEach","document","body","innerHTML","createLiveRegion","liveRegion","getAttribute","contains","removeLiveRegion","toBeUndefined","first","announceConversion","textContent","onKeyDown","key"],"sources":["../../src/__tests__/static-prompts.test.jsx"],"sourcesContent":["import Static from '../mf/static';\n\n/**\n * The answer-block contract: `\\MathQuillMathField[id]{}` in stored latex becomes\n * a MathLive prompt, and sub-field values/focus are surfaced through the same\n * callbacks @pie-lib/math-input exposed (`onSubFieldChange`, `onSubFieldFocus`,\n * `getFieldName`, `setInput`).\n *\n * Driven against a stub mathfield: a real <math-field> needs a browser, and what\n * matters here is the mapping, not MathLive's rendering.\n */\nconst stubField = (values = {}, selection = null) => ({\n values: { ...values },\n getPrompts() {\n return Object.keys(this.values);\n },\n getPromptValue(id) {\n return this.values[id];\n },\n setPromptValue(id, v) {\n this.values[id] = v;\n },\n getPromptRange(id) {\n const i = Object.keys(this.values).indexOf(id);\n\n return [i * 10, i * 10 + 5];\n },\n selection,\n addEventListener() {},\n removeEventListener() {},\n focus() {\n this.focused = true;\n },\n blur() {\n this.blurred = true;\n },\n remove() {},\n});\n\nconst make = (props = {}) => new Static({ latex: 'x=\\\\MathQuillMathField[r1]{}', getFieldName: () => {}, ...props });\n\ndescribe('Static: answer blocks / prompts', () => {\n describe('isInteractive', () => {\n it('is interactive when the latex has answer blocks', () => {\n expect(make({ latex: 'x=\\\\MathQuillMathField[r1]{}' }).isInteractive()).toBe(true);\n expect(make({ latex: 'x=\\\\placeholder[r1]{}' }).isInteractive()).toBe(true);\n });\n\n it('is display-only for plain latex', () => {\n expect(make({ latex: '\\\\frac{1}{2}' }).isInteractive()).toBe(false);\n expect(make({ latex: '' }).isInteractive()).toBe(false);\n });\n });\n\n describe('values', () => {\n it('returns {} before the field exists', () => {\n expect(make().values()).toEqual({});\n });\n\n it('maps each prompt id to its stored-form latex', () => {\n const s = make();\n\n s.mathField = stubField({ r1: '7', r2: '\\\\placeholder{}' });\n\n // \\placeholder must not leak into stored values\n expect(s.values()).toEqual({ r1: '7', r2: '' });\n });\n });\n\n describe('promptHandle / innerFields', () => {\n it('exposes a MathQuill-field-like handle with get/set latex', () => {\n const s = make();\n\n s.mathField = stubField({ r1: '7' });\n\n const h = s.promptHandle('r1');\n\n expect(h.id).toEqual('r1');\n expect(h.latex()).toEqual('7');\n\n h.latex('9');\n expect(s.mathField.values.r1).toEqual('9');\n });\n\n it('handle latex() is safe with no field', () => {\n expect(make().promptHandle('r1').latex()).toEqual('');\n });\n\n it('innerFields returns one handle per prompt', () => {\n const s = make();\n\n s.mathField = stubField({ r1: '1', r2: '2' });\n\n expect(s.innerFields.map((f) => f.id)).toEqual(['r1', 'r2']);\n expect(make().innerFields).toEqual([]);\n });\n });\n\n describe('onSubFieldChange', () => {\n it('fires only for prompts whose value changed', () => {\n const onSubFieldChange = jest.fn();\n const s = make({ onSubFieldChange });\n\n s.mathField = stubField({ r1: '1', r2: '2' });\n s.promptValues = { r1: '1', r2: '2' };\n\n s.mathField.values.r2 = '5';\n s.onPromptInput();\n\n expect(onSubFieldChange).toHaveBeenCalledTimes(1);\n expect(onSubFieldChange).toHaveBeenCalledWith('r2', '5');\n });\n\n it('uses getFieldName when it returns a name', () => {\n const onSubFieldChange = jest.fn();\n const s = make({ onSubFieldChange, getFieldName: (handle) => 'named-' + handle.id });\n\n s.mathField = stubField({ r1: '1' });\n s.promptValues = {};\n\n s.onPromptInput();\n\n expect(onSubFieldChange).toHaveBeenCalledWith('named-r1', '1');\n });\n\n it('still tracks values when no callback is supplied', () => {\n const s = make();\n\n s.mathField = stubField({ r1: '3' });\n s.onPromptInput();\n\n expect(s.promptValues).toEqual({ r1: '3' });\n });\n });\n\n describe('onSubFieldFocus', () => {\n it('reports the prompt containing the selection, plus setInput', () => {\n const onSubFieldFocus = jest.fn();\n const setInput = jest.fn();\n const s = make({ onSubFieldFocus, setInput });\n\n // r2 occupies offsets 10..15\n s.mathField = stubField({ r1: '', r2: '' }, { ranges: [[11, 11]] });\n s.onPromptFocus();\n\n expect(onSubFieldFocus).toHaveBeenCalledTimes(1);\n expect(onSubFieldFocus.mock.calls[0][0]).toEqual('r2');\n expect(onSubFieldFocus.mock.calls[0][1].id).toEqual('r2');\n expect(setInput).toHaveBeenCalled();\n });\n\n it('does nothing without a selection', () => {\n const onSubFieldFocus = jest.fn();\n const s = make({ onSubFieldFocus });\n\n s.mathField = stubField({ r1: '' }, null);\n s.onPromptFocus();\n\n expect(onSubFieldFocus).not.toHaveBeenCalled();\n });\n\n it('does not throw when the field is missing', () => {\n const s = make({ onSubFieldFocus: jest.fn() });\n\n expect(() => s.onPromptFocus()).not.toThrow();\n });\n });\n\n describe('accessibility announcements', () => {\n afterEach(() => {\n document.body.innerHTML = '';\n });\n\n it('creates a polite off-screen live region', () => {\n const s = make();\n\n s.createLiveRegion();\n\n expect(s.liveRegion.getAttribute('aria-live')).toEqual('polite');\n expect(s.liveRegion.getAttribute('aria-atomic')).toEqual('true');\n expect(document.body.contains(s.liveRegion)).toBe(true);\n\n s.removeLiveRegion();\n expect(s.liveRegion).toBeUndefined();\n });\n\n it('does not create a second region', () => {\n const s = make();\n\n s.createLiveRegion();\n const first = s.liveRegion;\n\n s.createLiveRegion();\n expect(s.liveRegion).toBe(first);\n s.removeLiveRegion();\n });\n\n it('announces when typed input expands into a command', () => {\n const s = make();\n\n s.createLiveRegion();\n s.promptValues = { r1: 'x' };\n // grew by more than one char AND gained a backslash => a conversion\n s.announceConversion({ r1: 'x\\\\frac{}{}' });\n\n expect(s.liveRegion.textContent).toEqual('Converted to math symbol');\n s.removeLiveRegion();\n });\n\n it('does not announce ordinary typing', () => {\n const s = make();\n\n s.createLiveRegion();\n s.promptValues = { r1: 'x' };\n s.announceConversion({ r1: 'xy' });\n\n expect(s.liveRegion.textContent).toEqual('');\n s.removeLiveRegion();\n });\n\n it('does not announce a deletion', () => {\n const s = make();\n\n s.createLiveRegion();\n s.promptValues = { r1: 'x\\\\frac{}{}' };\n s.onKeyDown({ key: 'Backspace' });\n s.announceConversion({ r1: 'x' });\n\n expect(s.liveRegion.textContent).toEqual('');\n s.removeLiveRegion();\n });\n });\n\n describe('focus / blur', () => {\n it('delegates to the field and is safe without one', () => {\n const s = make();\n\n expect(() => {\n s.focus();\n s.blur();\n }).not.toThrow();\n\n s.mathField = stubField();\n s.focus();\n s.blur();\n\n expect(s.mathField.focused).toBe(true);\n expect(s.mathField.blurred).toBe(true);\n });\n });\n});\n"],"mappings":"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","ignoreList":[]}