@pie-lib/math-input-mathlive 1.1.5-beta.1 → 1.1.5-beta.10

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 (50) hide show
  1. package/lib/__tests__/composites.test.js +255 -0
  2. package/lib/__tests__/drop-in-compat.test.js +133 -0
  3. package/lib/__tests__/embedded-fonts.test.js +121 -0
  4. package/lib/__tests__/index.test.js +118 -0
  5. package/lib/__tests__/input-imperative.test.js +155 -0
  6. package/lib/__tests__/keypad-label.test.js +231 -0
  7. package/lib/__tests__/keypad-render.test.js +206 -0
  8. package/lib/__tests__/latex-bridge.test.js +386 -0
  9. package/lib/__tests__/mathlive-instance.test.js +419 -0
  10. package/lib/__tests__/mount-race.test.js +218 -0
  11. package/lib/__tests__/static-prompts.test.js +405 -0
  12. package/lib/__tests__/tmp-markup.test.js +26 -0
  13. package/lib/keypad/index.js +36 -12
  14. package/lib/keypad/index.js.map +1 -1
  15. package/lib/latex-bridge.js +159 -4
  16. package/lib/latex-bridge.js.map +1 -1
  17. package/lib/mathlive-instance.js +21 -28
  18. package/lib/mathlive-instance.js.map +1 -1
  19. package/lib/mf/common-styles.js +17 -2
  20. package/lib/mf/common-styles.js.map +1 -1
  21. package/lib/mf/index.js +6 -0
  22. package/lib/mf/index.js.map +1 -1
  23. package/lib/mf/input.js +5 -0
  24. package/lib/mf/input.js.map +1 -1
  25. package/lib/mf/static.js +4 -2
  26. package/lib/mf/static.js.map +1 -1
  27. package/package.json +1 -1
  28. package/src/__tests__/composites.test.jsx +220 -0
  29. package/src/__tests__/drop-in-compat.test.jsx +112 -0
  30. package/src/__tests__/index.test.jsx +109 -0
  31. package/src/__tests__/input-imperative.test.jsx +144 -0
  32. package/src/__tests__/keypad-label.test.jsx +284 -0
  33. package/src/__tests__/keypad-render.test.jsx +123 -0
  34. package/src/__tests__/latex-bridge.test.js +389 -0
  35. package/src/__tests__/mathlive-instance.test.js +418 -0
  36. package/src/__tests__/mount-race.test.jsx +142 -0
  37. package/src/__tests__/static-prompts.test.jsx +364 -0
  38. package/src/keypad/index.jsx +18 -3
  39. package/src/latex-bridge.js +171 -4
  40. package/src/mathlive-instance.js +27 -29
  41. package/src/mf/common-styles.js +19 -0
  42. package/src/mf/index.js +2 -0
  43. package/src/mf/input.jsx +5 -0
  44. package/src/mf/static.jsx +4 -1
  45. package/lib/fonts/embedded.js +0 -120
  46. package/lib/fonts/index.js +0 -81
  47. package/lib/fonts/index.js.map +0 -1
  48. package/scripts/generate-embedded-fonts.js +0 -94
  49. package/src/fonts/embedded.js +0 -116
  50. package/src/fonts/index.js +0 -71
@@ -0,0 +1,255 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _react = _interopRequireDefault(require("react"));
5
+ var _react2 = require("@testing-library/react");
6
+ var _mathInput = _interopRequireDefault(require("../math-input"));
7
+ var _horizontalKeypad = _interopRequireDefault(require("../horizontal-keypad"));
8
+ var _input = _interopRequireDefault(require("../mf/input"));
9
+ /**
10
+ * The pieces that sit between the keypad and the field: how a pressed key is
11
+ * routed into the field, and the legacy `{value,type}` shape math-toolbar
12
+ * consumes.
13
+ */
14
+ describe('MathInput.keypadPress routing', function () {
15
+ var withInput = function withInput() {
16
+ var mi = new _mathInput["default"]({});
17
+ var calls = {
18
+ write: [],
19
+ keystroke: []
20
+ };
21
+ mi.input = {
22
+ write: function write(v) {
23
+ return calls.write.push(v);
24
+ },
25
+ keystroke: function keystroke(v) {
26
+ return calls.keystroke.push(v);
27
+ }
28
+ };
29
+ return {
30
+ mi: mi,
31
+ calls: calls
32
+ };
33
+ };
34
+ it('routes an insert action to write()', function () {
35
+ var _withInput = withInput(),
36
+ mi = _withInput.mi,
37
+ calls = _withInput.calls;
38
+ mi.keypadPress({
39
+ latex: '\\pi'
40
+ });
41
+ expect(calls.write).toEqual(['\\pi']);
42
+ expect(calls.keystroke).toEqual([]);
43
+ });
44
+ it('expands an argument-taking command before writing', function () {
45
+ var _withInput2 = withInput(),
46
+ mi = _withInput2.mi,
47
+ calls = _withInput2.calls;
48
+ mi.keypadPress({
49
+ command: '\\frac'
50
+ });
51
+ expect(calls.write).toEqual(['\\frac{#?}{#?}']);
52
+ });
53
+ it('routes a cursor keystroke to keystroke()', function () {
54
+ var _withInput3 = withInput(),
55
+ mi = _withInput3.mi,
56
+ calls = _withInput3.calls;
57
+ mi.keypadPress({
58
+ keystroke: 'Left'
59
+ });
60
+ expect(calls.keystroke).toEqual(['moveToPreviousChar']);
61
+ expect(calls.write).toEqual([]);
62
+ });
63
+ it('ignores keys with no action', function () {
64
+ var _withInput4 = withInput(),
65
+ mi = _withInput4.mi,
66
+ calls = _withInput4.calls;
67
+ mi.keypadPress({});
68
+ mi.keypadPress({
69
+ keystroke: 'Nonsense'
70
+ });
71
+ expect(calls.write).toEqual([]);
72
+ expect(calls.keystroke).toEqual([]);
73
+ });
74
+ it('is a no-op before the field ref exists', function () {
75
+ var mi = new _mathInput["default"]({});
76
+ expect(function () {
77
+ return mi.keypadPress({
78
+ latex: '\\pi'
79
+ });
80
+ }).not.toThrow();
81
+ });
82
+ it('changeLatex only fires onChange when the value differs', function () {
83
+ var onChange = jest.fn();
84
+ var mi = new _mathInput["default"]({
85
+ latex: 'x',
86
+ onChange: onChange
87
+ });
88
+ mi.changeLatex('x');
89
+ expect(onChange).not.toHaveBeenCalled();
90
+ mi.changeLatex('y');
91
+ expect(onChange).toHaveBeenCalledWith('y');
92
+ });
93
+ it('tracks focus state', function () {
94
+ var mi = new _mathInput["default"]({});
95
+ mi.setState = function (s) {
96
+ return Object.assign(mi.state, s);
97
+ };
98
+ mi.inputFocus();
99
+ expect(mi.state.focused).toBe(true);
100
+ mi.inputBlur();
101
+ expect(mi.state.focused).toBe(false);
102
+ });
103
+ });
104
+ describe('HorizontalKeypad legacy {value,type} model', function () {
105
+ var pressed = function pressed(key) {
106
+ var onClick = jest.fn();
107
+ var hk = new _horizontalKeypad["default"]({
108
+ onClick: onClick
109
+ });
110
+ hk.keypadPress(key);
111
+ return onClick.mock.calls[0][0];
112
+ };
113
+ it('maps a command to {value, type: command}', function () {
114
+ expect(pressed({
115
+ command: '\\frac'
116
+ })).toEqual({
117
+ value: '\\frac',
118
+ type: 'command'
119
+ });
120
+ });
121
+ it('maps a write to {value}', function () {
122
+ expect(pressed({
123
+ write: 'x'
124
+ })).toEqual({
125
+ value: 'x'
126
+ });
127
+ });
128
+ it('maps a keystroke to {type: cursor}', function () {
129
+ expect(pressed({
130
+ keystroke: 'Left'
131
+ })).toEqual({
132
+ type: 'cursor',
133
+ value: 'Left'
134
+ });
135
+ });
136
+ it('renders without throwing', function () {
137
+ expect(function () {
138
+ return (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_horizontalKeypad["default"], {
139
+ onClick: function onClick() {}
140
+ }));
141
+ }).not.toThrow();
142
+ });
143
+ });
144
+ describe('Input: controlled-value sync and events', function () {
145
+ var withField = function withField() {
146
+ var input = new _input["default"]({});
147
+ input.mathField = {
148
+ value: '',
149
+ getValue: function getValue() {
150
+ return input.mathField.value;
151
+ },
152
+ insert: function insert(v) {
153
+ input.mathField.value += v;
154
+ },
155
+ executeCommand: function executeCommand() {},
156
+ focus: function focus() {},
157
+ blur: function blur() {},
158
+ addEventListener: function addEventListener() {},
159
+ removeEventListener: function removeEventListener() {},
160
+ remove: function remove() {}
161
+ };
162
+ return input;
163
+ };
164
+ it('emits stored-form latex on edit', function () {
165
+ var onChange = jest.fn();
166
+ var input = withField();
167
+ input.props = {
168
+ onChange: onChange
169
+ };
170
+ input.mathField.value = '\\longdiv{\\placeholder{}}';
171
+ input.onInputEdit();
172
+
173
+ // \placeholder is MathLive-internal and must not reach the model
174
+ expect(onChange).toHaveBeenCalledWith('\\longdiv{}');
175
+ expect(input.lastEmitted).toEqual('\\longdiv{}');
176
+ });
177
+ it('does not push a prop echo back into the field', function () {
178
+ var input = withField();
179
+ input.mathField.value = 'x';
180
+ input.lastEmitted = 'x';
181
+ input.props = {
182
+ latex: 'x'
183
+ };
184
+ input.componentDidUpdate({
185
+ latex: ''
186
+ });
187
+ expect(input.mathField.value).toEqual('x');
188
+ });
189
+ it('pushes a genuinely new latex prop into the field', function () {
190
+ var input = withField();
191
+ input.mathField.value = 'x';
192
+ input.lastEmitted = 'x';
193
+ input.props = {
194
+ latex: 'y'
195
+ };
196
+ input.componentDidUpdate({
197
+ latex: 'x'
198
+ });
199
+ expect(input.mathField.value).toEqual('y');
200
+ });
201
+ it('bridges stored latex on the way in', function () {
202
+ var input = withField();
203
+ input.props = {
204
+ latex: '\\longdiv{5}'
205
+ };
206
+ input.componentDidUpdate({
207
+ latex: ''
208
+ });
209
+
210
+ // must become native \enclose so the content stays editable
211
+ expect(input.mathField.value).toEqual('\\enclose{longdiv}{5}');
212
+ });
213
+ it('toggles readOnly', function () {
214
+ var input = withField();
215
+ input.props = {
216
+ readOnly: true
217
+ };
218
+ input.componentDidUpdate({
219
+ readOnly: false
220
+ });
221
+ expect(input.mathField.readOnly).toBe(true);
222
+ });
223
+ it('clear() empties the field', function () {
224
+ var input = withField();
225
+ input.mathField.value = 'abc';
226
+ expect(input.clear()).toEqual('');
227
+ expect(input.mathField.value).toEqual('');
228
+ });
229
+ it('suppresses Enter so it cannot insert a line break', function () {
230
+ var input = withField();
231
+ var preventDefault = jest.fn();
232
+ input.onKeyDown({
233
+ key: 'Enter',
234
+ preventDefault: preventDefault
235
+ });
236
+ expect(preventDefault).toHaveBeenCalled();
237
+ preventDefault.mockClear();
238
+ input.onKeyDown({
239
+ key: 'a',
240
+ preventDefault: preventDefault
241
+ });
242
+ expect(preventDefault).not.toHaveBeenCalled();
243
+ });
244
+ it('componentDidUpdate is safe before the field exists', function () {
245
+ var input = new _input["default"]({
246
+ latex: 'x'
247
+ });
248
+ expect(function () {
249
+ return input.componentDidUpdate({
250
+ latex: ''
251
+ });
252
+ }).not.toThrow();
253
+ });
254
+ });
255
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfbWF0aElucHV0IiwiX2hvcml6b250YWxLZXlwYWQiLCJfaW5wdXQiLCJkZXNjcmliZSIsIndpdGhJbnB1dCIsIm1pIiwiTWF0aElucHV0IiwiY2FsbHMiLCJ3cml0ZSIsImtleXN0cm9rZSIsImlucHV0IiwidiIsInB1c2giLCJpdCIsIl93aXRoSW5wdXQiLCJrZXlwYWRQcmVzcyIsImxhdGV4IiwiZXhwZWN0IiwidG9FcXVhbCIsIl93aXRoSW5wdXQyIiwiY29tbWFuZCIsIl93aXRoSW5wdXQzIiwiX3dpdGhJbnB1dDQiLCJub3QiLCJ0b1Rocm93Iiwib25DaGFuZ2UiLCJqZXN0IiwiZm4iLCJjaGFuZ2VMYXRleCIsInRvSGF2ZUJlZW5DYWxsZWQiLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCIsInNldFN0YXRlIiwicyIsIk9iamVjdCIsImFzc2lnbiIsInN0YXRlIiwiaW5wdXRGb2N1cyIsImZvY3VzZWQiLCJ0b0JlIiwiaW5wdXRCbHVyIiwicHJlc3NlZCIsImtleSIsIm9uQ2xpY2siLCJoayIsIkhvcml6b250YWxLZXlwYWQiLCJtb2NrIiwidmFsdWUiLCJ0eXBlIiwicmVuZGVyIiwiY3JlYXRlRWxlbWVudCIsIndpdGhGaWVsZCIsIklucHV0IiwibWF0aEZpZWxkIiwiZ2V0VmFsdWUiLCJpbnNlcnQiLCJleGVjdXRlQ29tbWFuZCIsImZvY3VzIiwiYmx1ciIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwicmVtb3ZlIiwicHJvcHMiLCJvbklucHV0RWRpdCIsImxhc3RFbWl0dGVkIiwiY29tcG9uZW50RGlkVXBkYXRlIiwicmVhZE9ubHkiLCJjbGVhciIsInByZXZlbnREZWZhdWx0Iiwib25LZXlEb3duIiwibW9ja0NsZWFyIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL19fdGVzdHNfXy9jb21wb3NpdGVzLnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3JlYWN0JztcblxuaW1wb3J0IE1hdGhJbnB1dCBmcm9tICcuLi9tYXRoLWlucHV0JztcbmltcG9ydCBIb3Jpem9udGFsS2V5cGFkIGZyb20gJy4uL2hvcml6b250YWwta2V5cGFkJztcbmltcG9ydCBJbnB1dCBmcm9tICcuLi9tZi9pbnB1dCc7XG5cbi8qKlxuICogVGhlIHBpZWNlcyB0aGF0IHNpdCBiZXR3ZWVuIHRoZSBrZXlwYWQgYW5kIHRoZSBmaWVsZDogaG93IGEgcHJlc3NlZCBrZXkgaXNcbiAqIHJvdXRlZCBpbnRvIHRoZSBmaWVsZCwgYW5kIHRoZSBsZWdhY3kgYHt2YWx1ZSx0eXBlfWAgc2hhcGUgbWF0aC10b29sYmFyXG4gKiBjb25zdW1lcy5cbiAqL1xuZGVzY3JpYmUoJ01hdGhJbnB1dC5rZXlwYWRQcmVzcyByb3V0aW5nJywgKCkgPT4ge1xuICBjb25zdCB3aXRoSW5wdXQgPSAoKSA9PiB7XG4gICAgY29uc3QgbWkgPSBuZXcgTWF0aElucHV0KHt9KTtcbiAgICBjb25zdCBjYWxscyA9IHsgd3JpdGU6IFtdLCBrZXlzdHJva2U6IFtdIH07XG5cbiAgICBtaS5pbnB1dCA9IHtcbiAgICAgIHdyaXRlOiAodikgPT4gY2FsbHMud3JpdGUucHVzaCh2KSxcbiAgICAgIGtleXN0cm9rZTogKHYpID0+IGNhbGxzLmtleXN0cm9rZS5wdXNoKHYpLFxuICAgIH07XG5cbiAgICByZXR1cm4geyBtaSwgY2FsbHMgfTtcbiAgfTtcblxuICBpdCgncm91dGVzIGFuIGluc2VydCBhY3Rpb24gdG8gd3JpdGUoKScsICgpID0+IHtcbiAgICBjb25zdCB7IG1pLCBjYWxscyB9ID0gd2l0aElucHV0KCk7XG5cbiAgICBtaS5rZXlwYWRQcmVzcyh7IGxhdGV4OiAnXFxcXHBpJyB9KTtcblxuICAgIGV4cGVjdChjYWxscy53cml0ZSkudG9FcXVhbChbJ1xcXFxwaSddKTtcbiAgICBleHBlY3QoY2FsbHMua2V5c3Ryb2tlKS50b0VxdWFsKFtdKTtcbiAgfSk7XG5cbiAgaXQoJ2V4cGFuZHMgYW4gYXJndW1lbnQtdGFraW5nIGNvbW1hbmQgYmVmb3JlIHdyaXRpbmcnLCAoKSA9PiB7XG4gICAgY29uc3QgeyBtaSwgY2FsbHMgfSA9IHdpdGhJbnB1dCgpO1xuXG4gICAgbWkua2V5cGFkUHJlc3MoeyBjb21tYW5kOiAnXFxcXGZyYWMnIH0pO1xuXG4gICAgZXhwZWN0KGNhbGxzLndyaXRlKS50b0VxdWFsKFsnXFxcXGZyYWN7Iz99eyM/fSddKTtcbiAgfSk7XG5cbiAgaXQoJ3JvdXRlcyBhIGN1cnNvciBrZXlzdHJva2UgdG8ga2V5c3Ryb2tlKCknLCAoKSA9PiB7XG4gICAgY29uc3QgeyBtaSwgY2FsbHMgfSA9IHdpdGhJbnB1dCgpO1xuXG4gICAgbWkua2V5cGFkUHJlc3MoeyBrZXlzdHJva2U6ICdMZWZ0JyB9KTtcblxuICAgIGV4cGVjdChjYWxscy5rZXlzdHJva2UpLnRvRXF1YWwoWydtb3ZlVG9QcmV2aW91c0NoYXInXSk7XG4gICAgZXhwZWN0KGNhbGxzLndyaXRlKS50b0VxdWFsKFtdKTtcbiAgfSk7XG5cbiAgaXQoJ2lnbm9yZXMga2V5cyB3aXRoIG5vIGFjdGlvbicsICgpID0+IHtcbiAgICBjb25zdCB7IG1pLCBjYWxscyB9ID0gd2l0aElucHV0KCk7XG5cbiAgICBtaS5rZXlwYWRQcmVzcyh7fSk7XG4gICAgbWkua2V5cGFkUHJlc3MoeyBrZXlzdHJva2U6ICdOb25zZW5zZScgfSk7XG5cbiAgICBleHBlY3QoY2FsbHMud3JpdGUpLnRvRXF1YWwoW10pO1xuICAgIGV4cGVjdChjYWxscy5rZXlzdHJva2UpLnRvRXF1YWwoW10pO1xuICB9KTtcblxuICBpdCgnaXMgYSBuby1vcCBiZWZvcmUgdGhlIGZpZWxkIHJlZiBleGlzdHMnLCAoKSA9PiB7XG4gICAgY29uc3QgbWkgPSBuZXcgTWF0aElucHV0KHt9KTtcblxuICAgIGV4cGVjdCgoKSA9PiBtaS5rZXlwYWRQcmVzcyh7IGxhdGV4OiAnXFxcXHBpJyB9KSkubm90LnRvVGhyb3coKTtcbiAgfSk7XG5cbiAgaXQoJ2NoYW5nZUxhdGV4IG9ubHkgZmlyZXMgb25DaGFuZ2Ugd2hlbiB0aGUgdmFsdWUgZGlmZmVycycsICgpID0+IHtcbiAgICBjb25zdCBvbkNoYW5nZSA9IGplc3QuZm4oKTtcbiAgICBjb25zdCBtaSA9IG5ldyBNYXRoSW5wdXQoeyBsYXRleDogJ3gnLCBvbkNoYW5nZSB9KTtcblxuICAgIG1pLmNoYW5nZUxhdGV4KCd4Jyk7XG4gICAgZXhwZWN0KG9uQ2hhbmdlKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuXG4gICAgbWkuY2hhbmdlTGF0ZXgoJ3knKTtcbiAgICBleHBlY3Qob25DaGFuZ2UpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCd5Jyk7XG4gIH0pO1xuXG4gIGl0KCd0cmFja3MgZm9jdXMgc3RhdGUnLCAoKSA9PiB7XG4gICAgY29uc3QgbWkgPSBuZXcgTWF0aElucHV0KHt9KTtcblxuICAgIG1pLnNldFN0YXRlID0gKHMpID0+IE9iamVjdC5hc3NpZ24obWkuc3RhdGUsIHMpO1xuICAgIG1pLmlucHV0Rm9jdXMoKTtcbiAgICBleHBlY3QobWkuc3RhdGUuZm9jdXNlZCkudG9CZSh0cnVlKTtcblxuICAgIG1pLmlucHV0Qmx1cigpO1xuICAgIGV4cGVjdChtaS5zdGF0ZS5mb2N1c2VkKS50b0JlKGZhbHNlKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ0hvcml6b250YWxLZXlwYWQgbGVnYWN5IHt2YWx1ZSx0eXBlfSBtb2RlbCcsICgpID0+IHtcbiAgY29uc3QgcHJlc3NlZCA9IChrZXkpID0+IHtcbiAgICBjb25zdCBvbkNsaWNrID0gamVzdC5mbigpO1xuICAgIGNvbnN0IGhrID0gbmV3IEhvcml6b250YWxLZXlwYWQoeyBvbkNsaWNrIH0pO1xuXG4gICAgaGsua2V5cGFkUHJlc3Moa2V5KTtcblxuICAgIHJldHVybiBvbkNsaWNrLm1vY2suY2FsbHNbMF1bMF07XG4gIH07XG5cbiAgaXQoJ21hcHMgYSBjb21tYW5kIHRvIHt2YWx1ZSwgdHlwZTogY29tbWFuZH0nLCAoKSA9PiB7XG4gICAgZXhwZWN0KHByZXNzZWQoeyBjb21tYW5kOiAnXFxcXGZyYWMnIH0pKS50b0VxdWFsKHsgdmFsdWU6ICdcXFxcZnJhYycsIHR5cGU6ICdjb21tYW5kJyB9KTtcbiAgfSk7XG5cbiAgaXQoJ21hcHMgYSB3cml0ZSB0byB7dmFsdWV9JywgKCkgPT4ge1xuICAgIGV4cGVjdChwcmVzc2VkKHsgd3JpdGU6ICd4JyB9KSkudG9FcXVhbCh7IHZhbHVlOiAneCcgfSk7XG4gIH0pO1xuXG4gIGl0KCdtYXBzIGEga2V5c3Ryb2tlIHRvIHt0eXBlOiBjdXJzb3J9JywgKCkgPT4ge1xuICAgIGV4cGVjdChwcmVzc2VkKHsga2V5c3Ryb2tlOiAnTGVmdCcgfSkpLnRvRXF1YWwoeyB0eXBlOiAnY3Vyc29yJywgdmFsdWU6ICdMZWZ0JyB9KTtcbiAgfSk7XG5cbiAgaXQoJ3JlbmRlcnMgd2l0aG91dCB0aHJvd2luZycsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT4gcmVuZGVyKDxIb3Jpem9udGFsS2V5cGFkIG9uQ2xpY2s9eygpID0+IHt9fSAvPikpLm5vdC50b1Rocm93KCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdJbnB1dDogY29udHJvbGxlZC12YWx1ZSBzeW5jIGFuZCBldmVudHMnLCAoKSA9PiB7XG4gIGNvbnN0IHdpdGhGaWVsZCA9ICgpID0+IHtcbiAgICBjb25zdCBpbnB1dCA9IG5ldyBJbnB1dCh7fSk7XG5cbiAgICBpbnB1dC5tYXRoRmllbGQgPSB7XG4gICAgICB2YWx1ZTogJycsXG4gICAgICBnZXRWYWx1ZTogKCkgPT4gaW5wdXQubWF0aEZpZWxkLnZhbHVlLFxuICAgICAgaW5zZXJ0KHYpIHtcbiAgICAgICAgaW5wdXQubWF0aEZpZWxkLnZhbHVlICs9IHY7XG4gICAgICB9LFxuICAgICAgZXhlY3V0ZUNvbW1hbmQoKSB7fSxcbiAgICAgIGZvY3VzKCkge30sXG4gICAgICBibHVyKCkge30sXG4gICAgICBhZGRFdmVudExpc3RlbmVyKCkge30sXG4gICAgICByZW1vdmVFdmVudExpc3RlbmVyKCkge30sXG4gICAgICByZW1vdmUoKSB7fSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGlucHV0O1xuICB9O1xuXG4gIGl0KCdlbWl0cyBzdG9yZWQtZm9ybSBsYXRleCBvbiBlZGl0JywgKCkgPT4ge1xuICAgIGNvbnN0IG9uQ2hhbmdlID0gamVzdC5mbigpO1xuICAgIGNvbnN0IGlucHV0ID0gd2l0aEZpZWxkKCk7XG5cbiAgICBpbnB1dC5wcm9wcyA9IHsgb25DaGFuZ2UgfTtcbiAgICBpbnB1dC5tYXRoRmllbGQudmFsdWUgPSAnXFxcXGxvbmdkaXZ7XFxcXHBsYWNlaG9sZGVye319JztcbiAgICBpbnB1dC5vbklucHV0RWRpdCgpO1xuXG4gICAgLy8gXFxwbGFjZWhvbGRlciBpcyBNYXRoTGl2ZS1pbnRlcm5hbCBhbmQgbXVzdCBub3QgcmVhY2ggdGhlIG1vZGVsXG4gICAgZXhwZWN0KG9uQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnXFxcXGxvbmdkaXZ7fScpO1xuICAgIGV4cGVjdChpbnB1dC5sYXN0RW1pdHRlZCkudG9FcXVhbCgnXFxcXGxvbmdkaXZ7fScpO1xuICB9KTtcblxuICBpdCgnZG9lcyBub3QgcHVzaCBhIHByb3AgZWNobyBiYWNrIGludG8gdGhlIGZpZWxkJywgKCkgPT4ge1xuICAgIGNvbnN0IGlucHV0ID0gd2l0aEZpZWxkKCk7XG5cbiAgICBpbnB1dC5tYXRoRmllbGQudmFsdWUgPSAneCc7XG4gICAgaW5wdXQubGFzdEVtaXR0ZWQgPSAneCc7XG4gICAgaW5wdXQucHJvcHMgPSB7IGxhdGV4OiAneCcgfTtcblxuICAgIGlucHV0LmNvbXBvbmVudERpZFVwZGF0ZSh7IGxhdGV4OiAnJyB9KTtcblxuICAgIGV4cGVjdChpbnB1dC5tYXRoRmllbGQudmFsdWUpLnRvRXF1YWwoJ3gnKTtcbiAgfSk7XG5cbiAgaXQoJ3B1c2hlcyBhIGdlbnVpbmVseSBuZXcgbGF0ZXggcHJvcCBpbnRvIHRoZSBmaWVsZCcsICgpID0+IHtcbiAgICBjb25zdCBpbnB1dCA9IHdpdGhGaWVsZCgpO1xuXG4gICAgaW5wdXQubWF0aEZpZWxkLnZhbHVlID0gJ3gnO1xuICAgIGlucHV0Lmxhc3RFbWl0dGVkID0gJ3gnO1xuICAgIGlucHV0LnByb3BzID0geyBsYXRleDogJ3knIH07XG5cbiAgICBpbnB1dC5jb21wb25lbnREaWRVcGRhdGUoeyBsYXRleDogJ3gnIH0pO1xuXG4gICAgZXhwZWN0KGlucHV0Lm1hdGhGaWVsZC52YWx1ZSkudG9FcXVhbCgneScpO1xuICB9KTtcblxuICBpdCgnYnJpZGdlcyBzdG9yZWQgbGF0ZXggb24gdGhlIHdheSBpbicsICgpID0+IHtcbiAgICBjb25zdCBpbnB1dCA9IHdpdGhGaWVsZCgpO1xuXG4gICAgaW5wdXQucHJvcHMgPSB7IGxhdGV4OiAnXFxcXGxvbmdkaXZ7NX0nIH07XG4gICAgaW5wdXQuY29tcG9uZW50RGlkVXBkYXRlKHsgbGF0ZXg6ICcnIH0pO1xuXG4gICAgLy8gbXVzdCBiZWNvbWUgbmF0aXZlIFxcZW5jbG9zZSBzbyB0aGUgY29udGVudCBzdGF5cyBlZGl0YWJsZVxuICAgIGV4cGVjdChpbnB1dC5tYXRoRmllbGQudmFsdWUpLnRvRXF1YWwoJ1xcXFxlbmNsb3Nle2xvbmdkaXZ9ezV9Jyk7XG4gIH0pO1xuXG4gIGl0KCd0b2dnbGVzIHJlYWRPbmx5JywgKCkgPT4ge1xuICAgIGNvbnN0IGlucHV0ID0gd2l0aEZpZWxkKCk7XG5cbiAgICBpbnB1dC5wcm9wcyA9IHsgcmVhZE9ubHk6IHRydWUgfTtcbiAgICBpbnB1dC5jb21wb25lbnREaWRVcGRhdGUoeyByZWFkT25seTogZmFsc2UgfSk7XG5cbiAgICBleHBlY3QoaW5wdXQubWF0aEZpZWxkLnJlYWRPbmx5KS50b0JlKHRydWUpO1xuICB9KTtcblxuICBpdCgnY2xlYXIoKSBlbXB0aWVzIHRoZSBmaWVsZCcsICgpID0+IHtcbiAgICBjb25zdCBpbnB1dCA9IHdpdGhGaWVsZCgpO1xuXG4gICAgaW5wdXQubWF0aEZpZWxkLnZhbHVlID0gJ2FiYyc7XG4gICAgZXhwZWN0KGlucHV0LmNsZWFyKCkpLnRvRXF1YWwoJycpO1xuICAgIGV4cGVjdChpbnB1dC5tYXRoRmllbGQudmFsdWUpLnRvRXF1YWwoJycpO1xuICB9KTtcblxuICBpdCgnc3VwcHJlc3NlcyBFbnRlciBzbyBpdCBjYW5ub3QgaW5zZXJ0IGEgbGluZSBicmVhaycsICgpID0+IHtcbiAgICBjb25zdCBpbnB1dCA9IHdpdGhGaWVsZCgpO1xuICAgIGNvbnN0IHByZXZlbnREZWZhdWx0ID0gamVzdC5mbigpO1xuXG4gICAgaW5wdXQub25LZXlEb3duKHsga2V5OiAnRW50ZXInLCBwcmV2ZW50RGVmYXVsdCB9KTtcbiAgICBleHBlY3QocHJldmVudERlZmF1bHQpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcblxuICAgIHByZXZlbnREZWZhdWx0Lm1vY2tDbGVhcigpO1xuICAgIGlucHV0Lm9uS2V5RG93bih7IGtleTogJ2EnLCBwcmV2ZW50RGVmYXVsdCB9KTtcbiAgICBleHBlY3QocHJldmVudERlZmF1bHQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIH0pO1xuXG4gIGl0KCdjb21wb25lbnREaWRVcGRhdGUgaXMgc2FmZSBiZWZvcmUgdGhlIGZpZWxkIGV4aXN0cycsICgpID0+IHtcbiAgICBjb25zdCBpbnB1dCA9IG5ldyBJbnB1dCh7IGxhdGV4OiAneCcgfSk7XG5cbiAgICBleHBlY3QoKCkgPT4gaW5wdXQuY29tcG9uZW50RGlkVXBkYXRlKHsgbGF0ZXg6ICcnIH0pKS5ub3QudG9UaHJvdygpO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFFQSxJQUFBRSxVQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxpQkFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFB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
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
5
+ var _react = _interopRequireDefault(require("react"));
6
+ var _react2 = require("@testing-library/react");
7
+ var _styles = require("@mui/material/styles");
8
+ var _index = require("../index");
9
+ 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; }
10
+ 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; }
11
+ /**
12
+ * Exercises the exact call patterns real consumers use against
13
+ * @pie-lib/math-input, to catch drop-in incompatibilities.
14
+ *
15
+ * Sources:
16
+ * - packages/math-toolbar/src/editor-and-pad.jsx:16,185
17
+ * - packages/math-toolbar/src/math-preview.jsx:8,156
18
+ * - packages/editable-html/src/plugins/respArea/math-templated/index.jsx:92
19
+ * - packages/editable-html-tip-tap/src/components/respArea/MathTemplated.jsx:111
20
+ */
21
+ describe('drop-in compatibility with @pie-lib/math-input consumers', function () {
22
+ describe('mq.CommonMqStyles destructuring', function () {
23
+ it('math-preview.jsx: { commonMqFontStyles, longdivStyles, supsubStyles }', function () {
24
+ var _mq$CommonMqStyles = _index.mq.CommonMqStyles,
25
+ commonMqFontStyles = _mq$CommonMqStyles.commonMqFontStyles,
26
+ longdivStyles = _mq$CommonMqStyles.longdivStyles,
27
+ supsubStyles = _mq$CommonMqStyles.supsubStyles;
28
+ expect(commonMqFontStyles).toBeDefined();
29
+ expect(longdivStyles).toBeDefined();
30
+ expect(supsubStyles).toBeDefined();
31
+ });
32
+ it('editor-and-pad.jsx: also { commonMqKeyboardStyles }', function () {
33
+ var _mq$CommonMqStyles2 = _index.mq.CommonMqStyles,
34
+ commonMqFontStyles = _mq$CommonMqStyles2.commonMqFontStyles,
35
+ commonMqKeyboardStyles = _mq$CommonMqStyles2.commonMqKeyboardStyles,
36
+ longdivStyles = _mq$CommonMqStyles2.longdivStyles,
37
+ supsubStyles = _mq$CommonMqStyles2.supsubStyles;
38
+ expect(commonMqKeyboardStyles).toBeDefined();
39
+ // All four must be spreadable into an emotion style object.
40
+ expect(function () {
41
+ return _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, commonMqFontStyles), commonMqKeyboardStyles), longdivStyles), supsubStyles);
42
+ }).not.toThrow();
43
+ });
44
+ it('the destructured groups survive being spread into a styled component', function () {
45
+ var _mq$CommonMqStyles3 = _index.mq.CommonMqStyles,
46
+ commonMqFontStyles = _mq$CommonMqStyles3.commonMqFontStyles,
47
+ longdivStyles = _mq$CommonMqStyles3.longdivStyles,
48
+ supsubStyles = _mq$CommonMqStyles3.supsubStyles;
49
+ var Styled = (0, _styles.styled)('div')(_objectSpread(_objectSpread(_objectSpread({}, commonMqFontStyles), longdivStyles), supsubStyles));
50
+ expect(function () {
51
+ return (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(Styled, null));
52
+ }).not.toThrow();
53
+ });
54
+ });
55
+ describe('mq.Input', function () {
56
+ it('editor-and-pad.jsx: styled(mq.Input) renders', function () {
57
+ var MathEditor = (0, _styles.styled)(_index.mq.Input)(function () {
58
+ return {
59
+ width: '100%'
60
+ };
61
+ });
62
+ expect(function () {
63
+ return (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(MathEditor, {
64
+ latex: "\\\\frac{1}{2}",
65
+ onChange: function onChange() {}
66
+ }));
67
+ }).not.toThrow();
68
+ });
69
+ it('accepts the className that styled() injects', function () {
70
+ var Styled = (0, _styles.styled)(_index.mq.Input)({
71
+ padding: 4
72
+ });
73
+ var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(Styled, {
74
+ latex: "x",
75
+ onChange: function onChange() {}
76
+ })),
77
+ container = _render.container;
78
+ expect(container.firstChild).toBeTruthy();
79
+ expect(container.firstChild.className).toBeTruthy();
80
+ });
81
+ });
82
+ describe('mq.Static', function () {
83
+ it('math-preview.jsx: <mq.Static latex onFocus onBlur />', function () {
84
+ expect(function () {
85
+ return (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.mq.Static, {
86
+ latex: '\\frac{1}{2}',
87
+ onFocus: function onFocus() {},
88
+ onBlur: function onBlur() {}
89
+ }));
90
+ }).not.toThrow();
91
+ });
92
+ it('math-templated respArea: <mq.Static latex={value} />', function () {
93
+ expect(function () {
94
+ return (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.mq.Static, {
95
+ latex: 'x=1'
96
+ }));
97
+ }).not.toThrow();
98
+ });
99
+ it('renders answer-block latex (the templated-math case) without throwing', function () {
100
+ expect(function () {
101
+ return (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_index.mq.Static, {
102
+ latex: 'x=\\MathQuillMathField[r1]{}',
103
+ onSubFieldChange: function onSubFieldChange() {}
104
+ }));
105
+ }).not.toThrow();
106
+ });
107
+ it('is styleable, as keypad labels were in math-input', function () {
108
+ var Styled = (0, _styles.styled)(_index.mq.Static)({
109
+ pointerEvents: 'none'
110
+ });
111
+ expect(function () {
112
+ return (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(Styled, {
113
+ latex: '\\pi'
114
+ }));
115
+ }).not.toThrow();
116
+ });
117
+ });
118
+ describe('surface parity', function () {
119
+ it('exposes exactly the names math-input exported', function () {
120
+ // eslint-disable-next-line global-require
121
+ var pkg = require('../index');
122
+ ['keysForGrade', 'addBrackets', 'removeBrackets', 'keys', 'HorizontalKeypad', 'mq', 'updateSpans', 'registerEmbed', 'applyStaticMath'].forEach(function (name) {
123
+ expect(pkg[name]).toBeDefined();
124
+ });
125
+ });
126
+ it('mq exposes Input, Static and CommonMqStyles', function () {
127
+ ['Input', 'Static', 'CommonMqStyles'].forEach(function (name) {
128
+ expect(_index.mq[name]).toBeDefined();
129
+ });
130
+ });
131
+ });
132
+ });
133
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfc3R5bGVzIiwiX2luZGV4Iiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJkZXNjcmliZSIsIml0IiwiX21xJENvbW1vbk1xU3R5bGVzIiwibXEiLCJDb21tb25NcVN0eWxlcyIsImNvbW1vbk1xRm9udFN0eWxlcyIsImxvbmdkaXZTdHlsZXMiLCJzdXBzdWJTdHlsZXMiLCJleHBlY3QiLCJ0b0JlRGVmaW5lZCIsIl9tcSRDb21tb25NcVN0eWxlczIiLCJjb21tb25NcUtleWJvYXJkU3R5bGVzIiwibm90IiwidG9UaHJvdyIsIl9tcSRDb21tb25NcVN0eWxlczMiLCJTdHlsZWQiLCJzdHlsZWQiLCJyZW5kZXIiLCJjcmVhdGVFbGVtZW50IiwiTWF0aEVkaXRvciIsIklucHV0Iiwid2lkdGgiLCJsYXRleCIsIm9uQ2hhbmdlIiwicGFkZGluZyIsIl9yZW5kZXIiLCJjb250YWluZXIiLCJmaXJzdENoaWxkIiwidG9CZVRydXRoeSIsImNsYXNzTmFtZSIsIlN0YXRpYyIsIm9uRm9jdXMiLCJvbkJsdXIiLCJvblN1YkZpZWxkQ2hhbmdlIiwicG9pbnRlckV2ZW50cyIsInBrZyIsIm5hbWUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL2Ryb3AtaW4tY29tcGF0LnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3JlYWN0JztcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvc3R5bGVzJztcblxuaW1wb3J0IHsgbXEgfSBmcm9tICcuLi9pbmRleCc7XG5cbi8qKlxuICogRXhlcmNpc2VzIHRoZSBleGFjdCBjYWxsIHBhdHRlcm5zIHJlYWwgY29uc3VtZXJzIHVzZSBhZ2FpbnN0XG4gKiBAcGllLWxpYi9tYXRoLWlucHV0LCB0byBjYXRjaCBkcm9wLWluIGluY29tcGF0aWJpbGl0aWVzLlxuICpcbiAqIFNvdXJjZXM6XG4gKiAgLSBwYWNrYWdlcy9tYXRoLXRvb2xiYXIvc3JjL2VkaXRvci1hbmQtcGFkLmpzeDoxNiwxODVcbiAqICAtIHBhY2thZ2VzL21hdGgtdG9vbGJhci9zcmMvbWF0aC1wcmV2aWV3LmpzeDo4LDE1NlxuICogIC0gcGFja2FnZXMvZWRpdGFibGUtaHRtbC9zcmMvcGx1Z2lucy9yZXNwQXJlYS9tYXRoLXRlbXBsYXRlZC9pbmRleC5qc3g6OTJcbiAqICAtIHBhY2thZ2VzL2VkaXRhYmxlLWh0bWwtdGlwLXRhcC9zcmMvY29tcG9uZW50cy9yZXNwQXJlYS9NYXRoVGVtcGxhdGVkLmpzeDoxMTFcbiAqL1xuZGVzY3JpYmUoJ2Ryb3AtaW4gY29tcGF0aWJpbGl0eSB3aXRoIEBwaWUtbGliL21hdGgtaW5wdXQgY29uc3VtZXJzJywgKCkgPT4ge1xuICBkZXNjcmliZSgnbXEuQ29tbW9uTXFTdHlsZXMgZGVzdHJ1Y3R1cmluZycsICgpID0+IHtcbiAgICBpdCgnbWF0aC1wcmV2aWV3LmpzeDogeyBjb21tb25NcUZvbnRTdHlsZXMsIGxvbmdkaXZTdHlsZXMsIHN1cHN1YlN0eWxlcyB9JywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb21tb25NcUZvbnRTdHlsZXMsIGxvbmdkaXZTdHlsZXMsIHN1cHN1YlN0eWxlcyB9ID0gbXEuQ29tbW9uTXFTdHlsZXM7XG5cbiAgICAgIGV4cGVjdChjb21tb25NcUZvbnRTdHlsZXMpLnRvQmVEZWZpbmVkKCk7XG4gICAgICBleHBlY3QobG9uZ2RpdlN0eWxlcykudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChzdXBzdWJTdHlsZXMpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZWRpdG9yLWFuZC1wYWQuanN4OiBhbHNvIHsgY29tbW9uTXFLZXlib2FyZFN0eWxlcyB9JywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb21tb25NcUZvbnRTdHlsZXMsIGNvbW1vbk1xS2V5Ym9hcmRTdHlsZXMsIGxvbmdkaXZTdHlsZXMsIHN1cHN1YlN0eWxlcyB9ID0gbXEuQ29tbW9uTXFTdHlsZXM7XG5cbiAgICAgIGV4cGVjdChjb21tb25NcUtleWJvYXJkU3R5bGVzKS50b0JlRGVmaW5lZCgpO1xuICAgICAgLy8gQWxsIGZvdXIgbXVzdCBiZSBzcHJlYWRhYmxlIGludG8gYW4gZW1vdGlvbiBzdHlsZSBvYmplY3QuXG4gICAgICBleHBlY3QoKCkgPT4gKHtcbiAgICAgICAgLi4uY29tbW9uTXFGb250U3R5bGVzLFxuICAgICAgICAuLi5jb21tb25NcUtleWJvYXJkU3R5bGVzLFxuICAgICAgICAuLi5sb25nZGl2U3R5bGVzLFxuICAgICAgICAuLi5zdXBzdWJTdHlsZXMsXG4gICAgICB9KSkubm90LnRvVGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aGUgZGVzdHJ1Y3R1cmVkIGdyb3VwcyBzdXJ2aXZlIGJlaW5nIHNwcmVhZCBpbnRvIGEgc3R5bGVkIGNvbXBvbmVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29tbW9uTXFGb250U3R5bGVzLCBsb25nZGl2U3R5bGVzLCBzdXBzdWJTdHlsZXMgfSA9IG1xLkNvbW1vbk1xU3R5bGVzO1xuICAgICAgY29uc3QgU3R5bGVkID0gc3R5bGVkKCdkaXYnKSh7IC4uLmNvbW1vbk1xRm9udFN0eWxlcywgLi4ubG9uZ2RpdlN0eWxlcywgLi4uc3Vwc3ViU3R5bGVzIH0pO1xuXG4gICAgICBleHBlY3QoKCkgPT4gcmVuZGVyKDxTdHlsZWQgLz4pKS5ub3QudG9UaHJvdygpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbXEuSW5wdXQnLCAoKSA9PiB7XG4gICAgaXQoJ2VkaXRvci1hbmQtcGFkLmpzeDogc3R5bGVkKG1xLklucHV0KSByZW5kZXJzJywgKCkgPT4ge1xuICAgICAgY29uc3QgTWF0aEVkaXRvciA9IHN0eWxlZChtcS5JbnB1dCkoKCkgPT4gKHsgd2lkdGg6ICcxMDAlJyB9KSk7XG5cbiAgICAgIGV4cGVjdCgoKSA9PiByZW5kZXIoPE1hdGhFZGl0b3IgbGF0ZXg9XCJcXFxcZnJhY3sxfXsyfVwiIG9uQ2hhbmdlPXsoKSA9PiB7fX0gLz4pKS5ub3QudG9UaHJvdygpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FjY2VwdHMgdGhlIGNsYXNzTmFtZSB0aGF0IHN0eWxlZCgpIGluamVjdHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBTdHlsZWQgPSBzdHlsZWQobXEuSW5wdXQpKHsgcGFkZGluZzogNCB9KTtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPFN0eWxlZCBsYXRleD1cInhcIiBvbkNoYW5nZT17KCkgPT4ge319IC8+KTtcblxuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlVHJ1dGh5KCk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQuY2xhc3NOYW1lKS50b0JlVHJ1dGh5KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdtcS5TdGF0aWMnLCAoKSA9PiB7XG4gICAgaXQoJ21hdGgtcHJldmlldy5qc3g6IDxtcS5TdGF0aWMgbGF0ZXggb25Gb2N1cyBvbkJsdXIgLz4nLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4gcmVuZGVyKDxtcS5TdGF0aWMgbGF0ZXg9eydcXFxcZnJhY3sxfXsyfSd9IG9uRm9jdXM9eygpID0+IHt9fSBvbkJsdXI9eygpID0+IHt9fSAvPikpLm5vdC50b1Rocm93KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnbWF0aC10ZW1wbGF0ZWQgcmVzcEFyZWE6IDxtcS5TdGF0aWMgbGF0ZXg9e3ZhbHVlfSAvPicsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiByZW5kZXIoPG1xLlN0YXRpYyBsYXRleD17J3g9MSd9IC8+KSkubm90LnRvVGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIGFuc3dlci1ibG9jayBsYXRleCAodGhlIHRlbXBsYXRlZC1tYXRoIGNhc2UpIHdpdGhvdXQgdGhyb3dpbmcnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT5cbiAgICAgICAgcmVuZGVyKDxtcS5TdGF0aWMgbGF0ZXg9eyd4PVxcXFxNYXRoUXVpbGxNYXRoRmllbGRbcjFde30nfSBvblN1YkZpZWxkQ2hhbmdlPXsoKSA9PiB7fX0gLz4pLFxuICAgICAgKS5ub3QudG9UaHJvdygpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2lzIHN0eWxlYWJsZSwgYXMga2V5cGFkIGxhYmVscyB3ZXJlIGluIG1hdGgtaW5wdXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBTdHlsZWQgPSBzdHlsZWQobXEuU3RhdGljKSh7IHBvaW50ZXJFdmVudHM6ICdub25lJyB9KTtcblxuICAgICAgZXhwZWN0KCgpID0+IHJlbmRlcig8U3R5bGVkIGxhdGV4PXsnXFxcXHBpJ30gLz4pKS5ub3QudG9UaHJvdygpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc3VyZmFjZSBwYXJpdHknLCAoKSA9PiB7XG4gICAgaXQoJ2V4cG9zZXMgZXhhY3RseSB0aGUgbmFtZXMgbWF0aC1pbnB1dCBleHBvcnRlZCcsICgpID0+IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxuICAgICAgY29uc3QgcGtnID0gcmVxdWlyZSgnLi4vaW5kZXgnKTtcblxuICAgICAgW1xuICAgICAgICAna2V5c0ZvckdyYWRlJyxcbiAgICAgICAgJ2FkZEJyYWNrZXRzJyxcbiAgICAgICAgJ3JlbW92ZUJyYWNrZXRzJyxcbiAgICAgICAgJ2tleXMnLFxuICAgICAgICAnSG9yaXpvbnRhbEtleXBhZCcsXG4gICAgICAgICdtcScsXG4gICAgICAgICd1cGRhdGVTcGFucycsXG4gICAgICAgICdyZWdpc3RlckVtYmVkJyxcbiAgICAgICAgJ2FwcGx5U3RhdGljTWF0aCcsXG4gICAgICBdLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgZXhwZWN0KHBrZ1tuYW1lXSkudG9CZURlZmluZWQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ21xIGV4cG9zZXMgSW5wdXQsIFN0YXRpYyBhbmQgQ29tbW9uTXFTdHlsZXMnLCAoKSA9PiB7XG4gICAgICBbJ0lucHV0JywgJ1N0YXRpYycsICdDb21tb25NcVN0eWxlcyddLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgZXhwZWN0KG1xW25hbWVdKS50b0JlRGVmaW5lZCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFGLE9BQUE7QUFFQSxJQUFBRyxNQUFBLEdBQUFILE9BQUE7QUFBOEIsU0FBQUksUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBUixDQUFBLEVBQUFDLENBQUEsRUFBQVEsVUFBQSxPQUFBUCxDQUFBLENBQUFRLElBQUEsQ0FBQUMsS0FBQSxDQUFBVCxD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
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
5
+ var _embedded = require("../fonts/embedded");
6
+ var _fonts = require("../fonts");
7
+ /**
8
+ * MathLive composes some glyphs from Private Use Area codepoints that only the
9
+ * KaTeX fonts carry (`\ne` is U+E020 overlapped on `=`), so a missing font file
10
+ * renders tofu rather than a plainer glyph. The faces therefore ship in the
11
+ * bundle - pie-elements has no stylesheet to carry `@font-face` and no asset
12
+ * path to serve woff2 files from.
13
+ */
14
+ describe('embedded fonts', function () {
15
+ var originalFonts = document.fonts;
16
+ var fakeFontSet = function fakeFontSet() {
17
+ var existing = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
18
+ var added = [];
19
+ var set = (0, _defineProperty2["default"])({
20
+ add: function add(f) {
21
+ return added.push(f);
22
+ }
23
+ }, Symbol.iterator, function () {
24
+ return existing[Symbol.iterator]();
25
+ });
26
+ Object.defineProperty(document, 'fonts', {
27
+ value: set,
28
+ configurable: true
29
+ });
30
+ return added;
31
+ };
32
+ beforeEach(function () {
33
+ (0, _fonts.resetEmbeddedFontsForTests)();
34
+ global.FontFace = jest.fn(function FontFace(family, src, descriptors) {
35
+ Object.assign(this, {
36
+ family: family,
37
+ src: src,
38
+ descriptors: descriptors
39
+ });
40
+ });
41
+ });
42
+ afterEach(function () {
43
+ Object.defineProperty(document, 'fonts', {
44
+ value: originalFonts,
45
+ configurable: true
46
+ });
47
+ delete global.FontFace;
48
+ });
49
+
50
+ // The 12 families MathLive's own loadFonts() looks for; if every one is in
51
+ // document.fonts it short-circuits to "ready" and issues no network request.
52
+ it('covers every family MathLive requires', function () {
53
+ expect(_fonts.EMBEDDED_FONT_FAMILIES.sort()).toEqual(['KaTeX_AMS', 'KaTeX_Caligraphic', 'KaTeX_Fraktur', 'KaTeX_Main', 'KaTeX_Math', 'KaTeX_SansSerif', 'KaTeX_Script', 'KaTeX_Size1', 'KaTeX_Size2', 'KaTeX_Size3', 'KaTeX_Size4', 'KaTeX_Typewriter'].sort());
54
+ });
55
+ it('carries all 20 faces as self-contained data URIs', function () {
56
+ expect(_embedded.EMBEDDED_FONTS).toHaveLength(20);
57
+ _embedded.EMBEDDED_FONTS.forEach(function (_ref) {
58
+ var family = _ref.family,
59
+ src = _ref.src;
60
+ expect(family).toMatch(/^KaTeX_/);
61
+ // No network: a data URI, not a path or a CDN URL.
62
+ expect(src).toMatch(/^url\(data:font\/woff2;base64,[A-Za-z0-9+/=]+\) format\('woff2'\)$/);
63
+ });
64
+ });
65
+ it('is generated from the installed mathlive, so glyph metrics match the engine', function () {
66
+ /* eslint-disable global-require */
67
+ var fs = require('fs');
68
+ var path = require('path');
69
+ /* eslint-enable global-require */
70
+
71
+ // Read the file rather than require('mathlive/package.json'): MathLive's
72
+ // exports map does not expose that subpath.
73
+ var manifest = [path.resolve(__dirname, '../../../../node_modules/mathlive/package.json'), path.resolve(__dirname, '../../node_modules/mathlive/package.json')].find(function (p) {
74
+ return fs.existsSync(p);
75
+ });
76
+ expect(manifest).toBeDefined();
77
+ expect(_embedded.MATHLIVE_VERSION).toEqual(JSON.parse(fs.readFileSync(manifest, 'utf8')).version);
78
+ });
79
+ it('registers every face with the document', function () {
80
+ var added = fakeFontSet();
81
+ expect((0, _fonts.registerEmbeddedFonts)()).toBe(true);
82
+ expect(added).toHaveLength(20);
83
+ expect(added.map(function (f) {
84
+ return f.family;
85
+ })).toContain('KaTeX_Main');
86
+ // Descriptors ride along, or bold/italic math would synthesise from regular.
87
+ expect(added.find(function (f) {
88
+ return f.src.startsWith('url(data:') && f.descriptors.weight === 'bold';
89
+ })).toBeDefined();
90
+ });
91
+ it('does not register twice', function () {
92
+ var added = fakeFontSet();
93
+ (0, _fonts.registerEmbeddedFonts)();
94
+ (0, _fonts.registerEmbeddedFonts)();
95
+ expect(added).toHaveLength(20);
96
+ });
97
+ it('leaves the document alone when it already provides every family', function () {
98
+ // A host that serves the fonts itself - configureFonts, or importing
99
+ // mathlive/fonts.css - wins.
100
+ var added = fakeFontSet(_fonts.EMBEDDED_FONT_FAMILIES.map(function (family) {
101
+ return {
102
+ family: family
103
+ };
104
+ }));
105
+ expect((0, _fonts.registerEmbeddedFonts)()).toBe(true);
106
+ expect(added).toHaveLength(0);
107
+ });
108
+ it('reports failure instead of throwing when the FontFace API is missing', function () {
109
+ fakeFontSet();
110
+ delete global.FontFace;
111
+ expect((0, _fonts.registerEmbeddedFonts)()).toBe(false);
112
+ });
113
+ it('reports failure instead of throwing when a face cannot be constructed', function () {
114
+ fakeFontSet();
115
+ global.FontFace = jest.fn(function () {
116
+ throw new Error('bad font');
117
+ });
118
+ expect((0, _fonts.registerEmbeddedFonts)()).toBe(false);
119
+ });
120
+ });
121
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZW1iZWRkZWQiLCJyZXF1aXJlIiwiX2ZvbnRzIiwiZGVzY3JpYmUiLCJvcmlnaW5hbEZvbnRzIiwiZG9jdW1lbnQiLCJmb250cyIsImZha2VGb250U2V0IiwiZXhpc3RpbmciLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJhZGRlZCIsInNldCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJhZGQiLCJmIiwicHVzaCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsImJlZm9yZUVhY2giLCJyZXNldEVtYmVkZGVkRm9udHNGb3JUZXN0cyIsImdsb2JhbCIsIkZvbnRGYWNlIiwiamVzdCIsImZuIiwiZmFtaWx5Iiwic3JjIiwiZGVzY3JpcHRvcnMiLCJhc3NpZ24iLCJhZnRlckVhY2giLCJpdCIsImV4cGVjdCIsIkVNQkVEREVEX0ZPTlRfRkFNSUxJRVMiLCJzb3J0IiwidG9FcXVhbCIsIkVNQkVEREVEX0ZPTlRTIiwidG9IYXZlTGVuZ3RoIiwiZm9yRWFjaCIsIl9yZWYiLCJ0b01hdGNoIiwiZnMiLCJwYXRoIiwibWFuaWZlc3QiLCJyZXNvbHZlIiwiX19kaXJuYW1lIiwiZmluZCIsInAiLCJleGlzdHNTeW5jIiwidG9CZURlZmluZWQiLCJNQVRITElWRV9WRVJTSU9OIiwiSlNPTiIsInBhcnNlIiwicmVhZEZpbGVTeW5jIiwidmVyc2lvbiIsInJlZ2lzdGVyRW1iZWRkZWRGb250cyIsInRvQmUiLCJtYXAiLCJ0b0NvbnRhaW4iLCJzdGFydHNXaXRoIiwid2VpZ2h0IiwiRXJyb3IiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL2VtYmVkZGVkLWZvbnRzLnRlc3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRU1CRURERURfRk9OVFMsIE1BVEhMSVZFX1ZFUlNJT04gfSBmcm9tICcuLi9mb250cy9lbWJlZGRlZCc7XG5pbXBvcnQgeyBFTUJFRERFRF9GT05UX0ZBTUlMSUVTLCByZWdpc3RlckVtYmVkZGVkRm9udHMsIHJlc2V0RW1iZWRkZWRGb250c0ZvclRlc3RzIH0gZnJvbSAnLi4vZm9udHMnO1xuXG4vKipcbiAqIE1hdGhMaXZlIGNvbXBvc2VzIHNvbWUgZ2x5cGhzIGZyb20gUHJpdmF0ZSBVc2UgQXJlYSBjb2RlcG9pbnRzIHRoYXQgb25seSB0aGVcbiAqIEthVGVYIGZvbnRzIGNhcnJ5IChgXFxuZWAgaXMgVStFMDIwIG92ZXJsYXBwZWQgb24gYD1gKSwgc28gYSBtaXNzaW5nIGZvbnQgZmlsZVxuICogcmVuZGVycyB0b2Z1IHJhdGhlciB0aGFuIGEgcGxhaW5lciBnbHlwaC4gVGhlIGZhY2VzIHRoZXJlZm9yZSBzaGlwIGluIHRoZVxuICogYnVuZGxlIC0gcGllLWVsZW1lbnRzIGhhcyBubyBzdHlsZXNoZWV0IHRvIGNhcnJ5IGBAZm9udC1mYWNlYCBhbmQgbm8gYXNzZXRcbiAqIHBhdGggdG8gc2VydmUgd29mZjIgZmlsZXMgZnJvbS5cbiAqL1xuZGVzY3JpYmUoJ2VtYmVkZGVkIGZvbnRzJywgKCkgPT4ge1xuICBjb25zdCBvcmlnaW5hbEZvbnRzID0gZG9jdW1lbnQuZm9udHM7XG5cbiAgY29uc3QgZmFrZUZvbnRTZXQgPSAoZXhpc3RpbmcgPSBbXSkgPT4ge1xuICAgIGNvbnN0IGFkZGVkID0gW107XG4gICAgY29uc3Qgc2V0ID0ge1xuICAgICAgYWRkOiAoZikgPT4gYWRkZWQucHVzaChmKSxcbiAgICAgIFtTeW1ib2wuaXRlcmF0b3JdOiAoKSA9PiBleGlzdGluZ1tTeW1ib2wuaXRlcmF0b3JdKCksXG4gICAgfTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkb2N1bWVudCwgJ2ZvbnRzJywgeyB2YWx1ZTogc2V0LCBjb25maWd1cmFibGU6IHRydWUgfSk7XG5cbiAgICByZXR1cm4gYWRkZWQ7XG4gIH07XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgcmVzZXRFbWJlZGRlZEZvbnRzRm9yVGVzdHMoKTtcbiAgICBnbG9iYWwuRm9udEZhY2UgPSBqZXN0LmZuKGZ1bmN0aW9uIEZvbnRGYWNlKGZhbWlseSwgc3JjLCBkZXNjcmlwdG9ycykge1xuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCB7IGZhbWlseSwgc3JjLCBkZXNjcmlwdG9ycyB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZG9jdW1lbnQsICdmb250cycsIHsgdmFsdWU6IG9yaWdpbmFsRm9udHMsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICBkZWxldGUgZ2xvYmFsLkZvbnRGYWNlO1xuICB9KTtcblxuICAvLyBUaGUgMTIgZmFtaWxpZXMgTWF0aExpdmUncyBvd24gbG9hZEZvbnRzKCkgbG9va3MgZm9yOyBpZiBldmVyeSBvbmUgaXMgaW5cbiAgLy8gZG9jdW1lbnQuZm9udHMgaXQgc2hvcnQtY2lyY3VpdHMgdG8gXCJyZWFkeVwiIGFuZCBpc3N1ZXMgbm8gbmV0d29yayByZXF1ZXN0LlxuICBpdCgnY292ZXJzIGV2ZXJ5IGZhbWlseSBNYXRoTGl2ZSByZXF1aXJlcycsICgpID0+IHtcbiAgICBleHBlY3QoRU1CRURERURfRk9OVF9GQU1JTElFUy5zb3J0KCkpLnRvRXF1YWwoXG4gICAgICBbXG4gICAgICAgICdLYVRlWF9BTVMnLFxuICAgICAgICAnS2FUZVhfQ2FsaWdyYXBoaWMnLFxuICAgICAgICAnS2FUZVhfRnJha3R1cicsXG4gICAgICAgICdLYVRlWF9NYWluJyxcbiAgICAgICAgJ0thVGVYX01hdGgnLFxuICAgICAgICAnS2FUZVhfU2Fuc1NlcmlmJyxcbiAgICAgICAgJ0thVGVYX1NjcmlwdCcsXG4gICAgICAgICdLYVRlWF9TaXplMScsXG4gICAgICAgICdLYVRlWF9TaXplMicsXG4gICAgICAgICdLYVRlWF9TaXplMycsXG4gICAgICAgICdLYVRlWF9TaXplNCcsXG4gICAgICAgICdLYVRlWF9UeXBld3JpdGVyJyxcbiAgICAgIF0uc29ydCgpLFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdjYXJyaWVzIGFsbCAyMCBmYWNlcyBhcyBzZWxmLWNvbnRhaW5lZCBkYXRhIFVSSXMnLCAoKSA9PiB7XG4gICAgZXhwZWN0KEVNQkVEREVEX0ZPTlRTKS50b0hhdmVMZW5ndGgoMjApO1xuXG4gICAgRU1CRURERURfRk9OVFMuZm9yRWFjaCgoeyBmYW1pbHksIHNyYyB9KSA9PiB7XG4gICAgICBleHBlY3QoZmFtaWx5KS50b01hdGNoKC9eS2FUZVhfLyk7XG4gICAgICAvLyBObyBuZXR3b3JrOiBhIGRhdGEgVVJJLCBub3QgYSBwYXRoIG9yIGEgQ0ROIFVSTC5cbiAgICAgIGV4cGVjdChzcmMpLnRvTWF0Y2goL151cmxcXChkYXRhOmZvbnRcXC93b2ZmMjtiYXNlNjQsW0EtWmEtejAtOSsvPV0rXFwpIGZvcm1hdFxcKCd3b2ZmMidcXCkkLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdpcyBnZW5lcmF0ZWQgZnJvbSB0aGUgaW5zdGFsbGVkIG1hdGhsaXZlLCBzbyBnbHlwaCBtZXRyaWNzIG1hdGNoIHRoZSBlbmdpbmUnLCAoKSA9PiB7XG4gICAgLyogZXNsaW50LWRpc2FibGUgZ2xvYmFsLXJlcXVpcmUgKi9cbiAgICBjb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG4gICAgY29uc3QgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIGdsb2JhbC1yZXF1aXJlICovXG5cbiAgICAvLyBSZWFkIHRoZSBmaWxlIHJhdGhlciB0aGFuIHJlcXVpcmUoJ21hdGhsaXZlL3BhY2thZ2UuanNvbicpOiBNYXRoTGl2ZSdzXG4gICAgLy8gZXhwb3J0cyBtYXAgZG9lcyBub3QgZXhwb3NlIHRoYXQgc3VicGF0aC5cbiAgICBjb25zdCBtYW5pZmVzdCA9IFtcbiAgICAgIHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICcuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbWF0aGxpdmUvcGFja2FnZS5qc29uJyksXG4gICAgICBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAnLi4vLi4vbm9kZV9tb2R1bGVzL21hdGhsaXZlL3BhY2thZ2UuanNvbicpLFxuICAgIF0uZmluZCgocCkgPT4gZnMuZXhpc3RzU3luYyhwKSk7XG5cbiAgICBleHBlY3QobWFuaWZlc3QpLnRvQmVEZWZpbmVkKCk7XG4gICAgZXhwZWN0KE1BVEhMSVZFX1ZFUlNJT04pLnRvRXF1YWwoSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMobWFuaWZlc3QsICd1dGY4JykpLnZlcnNpb24pO1xuICB9KTtcblxuICBpdCgncmVnaXN0ZXJzIGV2ZXJ5IGZhY2Ugd2l0aCB0aGUgZG9jdW1lbnQnLCAoKSA9PiB7XG4gICAgY29uc3QgYWRkZWQgPSBmYWtlRm9udFNldCgpO1xuXG4gICAgZXhwZWN0KHJlZ2lzdGVyRW1iZWRkZWRGb250cygpKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdChhZGRlZCkudG9IYXZlTGVuZ3RoKDIwKTtcbiAgICBleHBlY3QoYWRkZWQubWFwKChmKSA9PiBmLmZhbWlseSkpLnRvQ29udGFpbignS2FUZVhfTWFpbicpO1xuICAgIC8vIERlc2NyaXB0b3JzIHJpZGUgYWxvbmcsIG9yIGJvbGQvaXRhbGljIG1hdGggd291bGQgc3ludGhlc2lzZSBmcm9tIHJlZ3VsYXIuXG4gICAgZXhwZWN0KGFkZGVkLmZpbmQoKGYpID0+IGYuc3JjLnN0YXJ0c1dpdGgoJ3VybChkYXRhOicpICYmIGYuZGVzY3JpcHRvcnMud2VpZ2h0ID09PSAnYm9sZCcpKS50b0JlRGVmaW5lZCgpO1xuICB9KTtcblxuICBpdCgnZG9lcyBub3QgcmVnaXN0ZXIgdHdpY2UnLCAoKSA9PiB7XG4gICAgY29uc3QgYWRkZWQgPSBmYWtlRm9udFNldCgpO1xuXG4gICAgcmVnaXN0ZXJFbWJlZGRlZEZvbnRzKCk7XG4gICAgcmVnaXN0ZXJFbWJlZGRlZEZvbnRzKCk7XG5cbiAgICBleHBlY3QoYWRkZWQpLnRvSGF2ZUxlbmd0aCgyMCk7XG4gIH0pO1xuXG4gIGl0KCdsZWF2ZXMgdGhlIGRvY3VtZW50IGFsb25lIHdoZW4gaXQgYWxyZWFkeSBwcm92aWRlcyBldmVyeSBmYW1pbHknLCAoKSA9PiB7XG4gICAgLy8gQSBob3N0IHRoYXQgc2VydmVzIHRoZSBmb250cyBpdHNlbGYgLSBjb25maWd1cmVGb250cywgb3IgaW1wb3J0aW5nXG4gICAgLy8gbWF0aGxpdmUvZm9udHMuY3NzIC0gd2lucy5cbiAgICBjb25zdCBhZGRlZCA9IGZha2VGb250U2V0KEVNQkVEREVEX0ZPTlRfRkFNSUxJRVMubWFwKChmYW1pbHkpID0+ICh7IGZhbWlseSB9KSkpO1xuXG4gICAgZXhwZWN0KHJlZ2lzdGVyRW1iZWRkZWRGb250cygpKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdChhZGRlZCkudG9IYXZlTGVuZ3RoKDApO1xuICB9KTtcblxuICBpdCgncmVwb3J0cyBmYWlsdXJlIGluc3RlYWQgb2YgdGhyb3dpbmcgd2hlbiB0aGUgRm9udEZhY2UgQVBJIGlzIG1pc3NpbmcnLCAoKSA9PiB7XG4gICAgZmFrZUZvbnRTZXQoKTtcbiAgICBkZWxldGUgZ2xvYmFsLkZvbnRGYWNlO1xuXG4gICAgZXhwZWN0KHJlZ2lzdGVyRW1iZWRkZWRGb250cygpKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoJ3JlcG9ydHMgZmFpbHVyZSBpbnN0ZWFkIG9mIHRocm93aW5nIHdoZW4gYSBmYWNlIGNhbm5vdCBiZSBjb25zdHJ1Y3RlZCcsICgpID0+IHtcbiAgICBmYWtlRm9udFNldCgpO1xuICAgIGdsb2JhbC5Gb250RmFjZSA9IGplc3QuZm4oKCkgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgZm9udCcpO1xuICAgIH0pO1xuXG4gICAgZXhwZWN0KHJlZ2lzdGVyRW1iZWRkZWRGb250cygpKS50b0JlKGZhbHNlKTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLElBQUFBLFNBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUQsT0FBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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