@pie-lib/editable-html 10.0.0-beta.4 → 10.0.0-beta.6

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 (143) hide show
  1. package/CHANGELOG.md +255 -152
  2. package/lib/components.js +15 -39
  3. package/lib/components.js.map +1 -1
  4. package/lib/editor.js +200 -356
  5. package/lib/editor.js.map +1 -1
  6. package/lib/index.js +25 -49
  7. package/lib/index.js.map +1 -1
  8. package/lib/new-serialization.js +31 -71
  9. package/lib/new-serialization.js.map +1 -1
  10. package/lib/parse-html.js +7 -6
  11. package/lib/parse-html.js.map +1 -1
  12. package/lib/plugins/characters/custom-popper.js +3 -13
  13. package/lib/plugins/characters/custom-popper.js.map +1 -1
  14. package/lib/plugins/characters/index.js +20 -59
  15. package/lib/plugins/characters/index.js.map +1 -1
  16. package/lib/plugins/characters/utils.js +1 -1
  17. package/lib/plugins/characters/utils.js.map +1 -1
  18. package/lib/plugins/hotKeys/index.js +9 -16
  19. package/lib/plugins/hotKeys/index.js.map +1 -1
  20. package/lib/plugins/image/alt-dialog.js +6 -27
  21. package/lib/plugins/image/alt-dialog.js.map +1 -1
  22. package/lib/plugins/image/component.js +42 -99
  23. package/lib/plugins/image/component.js.map +1 -1
  24. package/lib/plugins/image/image-toolbar.js +14 -50
  25. package/lib/plugins/image/image-toolbar.js.map +1 -1
  26. package/lib/plugins/image/index.js +16 -59
  27. package/lib/plugins/image/index.js.map +1 -1
  28. package/lib/plugins/image/insert-image-handler.js +13 -25
  29. package/lib/plugins/image/insert-image-handler.js.map +1 -1
  30. package/lib/plugins/index.js +6 -36
  31. package/lib/plugins/index.js.map +1 -1
  32. package/lib/plugins/list/index.js +11 -46
  33. package/lib/plugins/list/index.js.map +1 -1
  34. package/lib/plugins/math/index.js +89 -93
  35. package/lib/plugins/math/index.js.map +1 -1
  36. package/lib/plugins/media/index.js +32 -109
  37. package/lib/plugins/media/index.js.map +1 -1
  38. package/lib/plugins/media/media-dialog.js +107 -195
  39. package/lib/plugins/media/media-dialog.js.map +1 -1
  40. package/lib/plugins/media/media-toolbar.js +7 -27
  41. package/lib/plugins/media/media-toolbar.js.map +1 -1
  42. package/lib/plugins/media/media-wrapper.js +9 -14
  43. package/lib/plugins/media/media-wrapper.js.map +1 -1
  44. package/lib/plugins/respArea/drag-in-the-blank/choice.js +13 -53
  45. package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -1
  46. package/lib/plugins/respArea/drag-in-the-blank/index.js +6 -20
  47. package/lib/plugins/respArea/drag-in-the-blank/index.js.map +1 -1
  48. package/lib/plugins/respArea/explicit-constructed-response/index.js +5 -10
  49. package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -1
  50. package/lib/plugins/respArea/icons/index.js +16 -31
  51. package/lib/plugins/respArea/icons/index.js.map +1 -1
  52. package/lib/plugins/respArea/index.js +7 -54
  53. package/lib/plugins/respArea/index.js.map +1 -1
  54. package/lib/plugins/respArea/inline-dropdown/index.js +3 -10
  55. package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -1
  56. package/lib/plugins/respArea/utils.js +6 -21
  57. package/lib/plugins/respArea/utils.js.map +1 -1
  58. package/lib/plugins/table/icons/index.js +1 -8
  59. package/lib/plugins/table/icons/index.js.map +1 -1
  60. package/lib/plugins/table/index.js +54 -187
  61. package/lib/plugins/table/index.js.map +1 -1
  62. package/lib/plugins/table/table-toolbar.js +12 -44
  63. package/lib/plugins/table/table-toolbar.js.map +1 -1
  64. package/lib/plugins/toolbar/default-toolbar.js +17 -46
  65. package/lib/plugins/toolbar/default-toolbar.js.map +1 -1
  66. package/lib/plugins/toolbar/done-button.js +2 -10
  67. package/lib/plugins/toolbar/done-button.js.map +1 -1
  68. package/lib/plugins/toolbar/editor-and-toolbar.js +134 -144
  69. package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -1
  70. package/lib/plugins/toolbar/index.js +2 -6
  71. package/lib/plugins/toolbar/index.js.map +1 -1
  72. package/lib/plugins/toolbar/toolbar-buttons.js +9 -40
  73. package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -1
  74. package/lib/plugins/toolbar/toolbar.js +29 -83
  75. package/lib/plugins/toolbar/toolbar.js.map +1 -1
  76. package/lib/plugins/utils.js +8 -30
  77. package/lib/plugins/utils.js.map +1 -1
  78. package/lib/serialization.js +11 -69
  79. package/lib/serialization.js.map +1 -1
  80. package/lib/test-serializer.js +5 -56
  81. package/lib/test-serializer.js.map +1 -1
  82. package/lib/theme.js +1 -1
  83. package/lib/theme.js.map +1 -1
  84. package/package.json +7 -7
  85. package/playground/image/data.js +20 -20
  86. package/playground/image/index.html +20 -22
  87. package/playground/image/index.jsx +10 -12
  88. package/playground/index.html +23 -25
  89. package/playground/mathquill/index.html +20 -23
  90. package/playground/mathquill/index.jsx +22 -18
  91. package/playground/prod-test/index.html +20 -24
  92. package/playground/prod-test/index.jsx +3 -5
  93. package/playground/schema-override/data.js +10 -10
  94. package/playground/schema-override/image-plugin.jsx +4 -3
  95. package/playground/schema-override/index.html +19 -21
  96. package/playground/schema-override/index.jsx +14 -13
  97. package/playground/serialization/data.js +10 -10
  98. package/playground/serialization/image-plugin.jsx +4 -3
  99. package/playground/serialization/index.html +20 -22
  100. package/playground/table-examples.html +8 -5
  101. package/playground/webpack.config.js +10 -10
  102. package/src/editor.jsx +108 -104
  103. package/src/index.jsx +20 -13
  104. package/src/new-serialization.jsx +30 -11
  105. package/src/parse-html.js +1 -1
  106. package/src/plugins/characters/custom-popper.js +7 -7
  107. package/src/plugins/characters/index.jsx +34 -23
  108. package/src/plugins/characters/utils.js +81 -81
  109. package/src/plugins/image/alt-dialog.jsx +5 -4
  110. package/src/plugins/image/component.jsx +47 -44
  111. package/src/plugins/image/image-toolbar.jsx +19 -27
  112. package/src/plugins/image/index.jsx +24 -18
  113. package/src/plugins/image/insert-image-handler.js +9 -0
  114. package/src/plugins/index.jsx +7 -9
  115. package/src/plugins/list/index.jsx +7 -7
  116. package/src/plugins/math/index.jsx +71 -28
  117. package/src/plugins/media/index.jsx +7 -7
  118. package/src/plugins/media/media-dialog.js +63 -89
  119. package/src/plugins/media/media-toolbar.jsx +8 -8
  120. package/src/plugins/media/media-wrapper.jsx +8 -5
  121. package/src/plugins/respArea/drag-in-the-blank/choice.jsx +19 -21
  122. package/src/plugins/respArea/drag-in-the-blank/index.jsx +4 -4
  123. package/src/plugins/respArea/explicit-constructed-response/index.jsx +5 -4
  124. package/src/plugins/respArea/icons/index.jsx +14 -11
  125. package/src/plugins/respArea/index.jsx +9 -15
  126. package/src/plugins/respArea/inline-dropdown/index.jsx +6 -6
  127. package/src/plugins/respArea/utils.jsx +7 -3
  128. package/src/plugins/table/icons/index.jsx +11 -17
  129. package/src/plugins/table/index.jsx +14 -10
  130. package/src/plugins/table/table-toolbar.jsx +6 -6
  131. package/src/plugins/toolbar/default-toolbar.jsx +9 -9
  132. package/src/plugins/toolbar/done-button.jsx +4 -4
  133. package/src/plugins/toolbar/editor-and-toolbar.jsx +36 -33
  134. package/src/plugins/toolbar/index.jsx +3 -2
  135. package/src/plugins/toolbar/toolbar-buttons.jsx +11 -11
  136. package/src/plugins/toolbar/toolbar.jsx +6 -1
  137. package/src/plugins/utils.js +2 -2
  138. package/src/serialization.jsx +34 -32
  139. package/src/test-serializer.js +2 -9
  140. package/lib/old-serialization.js +0 -330
  141. package/lib/slate-editor.js +0 -302
  142. package/src/test-serializer.js.rej +0 -20
  143. package/yarn-error.log +0 -18318
@@ -1,47 +1,29 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.CustomToolbarComp = void 0;
9
8
  exports["default"] = MathPlugin;
10
9
  exports.serialization = exports.inlineMath = void 0;
11
-
12
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
-
14
11
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
-
16
12
  var _react = _interopRequireDefault(require("react"));
17
-
18
13
  var _slate = require("slate");
19
-
20
14
  var _slateReact = require("slate-react");
21
-
22
15
  var _slateHyperscript = require("slate-hyperscript");
23
-
24
16
  var _Functions = _interopRequireDefault(require("@material-ui/icons/Functions"));
25
-
26
17
  var _mathToolbar = require("@pie-lib/math-toolbar");
27
-
28
18
  var _mathRendering = require("@pie-lib/math-rendering");
29
-
30
19
  var _debug = _interopRequireDefault(require("debug"));
31
-
32
20
  var _propTypes = _interopRequireDefault(require("prop-types"));
33
-
34
21
  var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
35
-
36
22
  var _newSerialization = require("../../new-serialization");
37
-
38
23
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
39
-
40
24
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
41
-
42
25
  var log = (0, _debug["default"])('@pie-lib:editable-html:plugins:math');
43
26
  var TEXT_NODE = 3;
44
-
45
27
  function generateAdditionalKeys() {
46
28
  var keyData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
47
29
  return keyData.map(function (key) {
@@ -54,31 +36,27 @@ function generateAdditionalKeys() {
54
36
  });
55
37
  }
56
38
 
39
+ // eslint-disable-next-line react/display-name
57
40
  var CustomToolbarComp = /*#__PURE__*/_react["default"].memo(function (props) {
58
41
  var node = props.node,
59
- nodePath = props.nodePath,
60
- onFocus = props.onFocus,
61
- onBlur = props.onBlur,
62
- onClick = props.onClick,
63
- editor = props.editor;
64
-
42
+ nodePath = props.nodePath,
43
+ onFocus = props.onFocus,
44
+ onBlur = props.onBlur,
45
+ onClick = props.onClick,
46
+ editor = props.editor;
65
47
  var _ref = props || {},
66
- pluginProps = _ref.pluginProps;
67
-
48
+ pluginProps = _ref.pluginProps;
68
49
  var _ref2 = pluginProps || {},
69
- math = _ref2.math;
70
-
50
+ math = _ref2.math;
71
51
  var _ref3 = math || {},
72
- keypadMode = _ref3.keypadMode,
73
- customKeys = _ref3.customKeys,
74
- _ref3$controlledKeypa = _ref3.controlledKeypadMode,
75
- controlledKeypadMode = _ref3$controlledKeypa === void 0 ? true : _ref3$controlledKeypa;
76
-
52
+ keypadMode = _ref3.keypadMode,
53
+ customKeys = _ref3.customKeys,
54
+ _ref3$controlledKeypa = _ref3.controlledKeypadMode,
55
+ controlledKeypadMode = _ref3$controlledKeypa === void 0 ? true : _ref3$controlledKeypa;
77
56
  var onDone = function onDone(latex) {
78
57
  var update = _objectSpread(_objectSpread({}, node.data), {}, {
79
58
  latex: latex
80
59
  });
81
-
82
60
  editor.apply({
83
61
  type: 'set_node',
84
62
  path: nodePath,
@@ -89,15 +67,12 @@ var CustomToolbarComp = /*#__PURE__*/_react["default"].memo(function (props) {
89
67
  data: update
90
68
  }
91
69
  });
92
-
93
70
  _slateReact.ReactEditor.focus(editor);
94
-
95
71
  _slate.Transforms.move(editor, {
96
72
  distance: 1,
97
73
  unit: 'offset'
98
74
  });
99
75
  };
100
-
101
76
  var latex = node.data.latex;
102
77
  return /*#__PURE__*/_react["default"].createElement(_mathToolbar.MathToolbar, {
103
78
  autoFocus: true,
@@ -112,25 +87,24 @@ var CustomToolbarComp = /*#__PURE__*/_react["default"].memo(function (props) {
112
87
  });
113
88
  }, function (prev, next) {
114
89
  var node = prev.node,
115
- _prev$pluginProps = prev.pluginProps;
116
- _prev$pluginProps = _prev$pluginProps === void 0 ? {} : _prev$pluginProps;
117
- var _prev$pluginProps$mat = _prev$pluginProps.math;
118
- _prev$pluginProps$mat = _prev$pluginProps$mat === void 0 ? {} : _prev$pluginProps$mat;
119
- var keypadMode = _prev$pluginProps$mat.keypadMode,
120
- controlledKeypadMode = _prev$pluginProps$mat.controlledKeypadMode;
90
+ _prev$pluginProps = prev.pluginProps,
91
+ _prev$pluginProps2 = _prev$pluginProps === void 0 ? {} : _prev$pluginProps,
92
+ _prev$pluginProps2$ma = _prev$pluginProps2.math,
93
+ _prev$pluginProps2$ma2 = _prev$pluginProps2$ma === void 0 ? {} : _prev$pluginProps2$ma,
94
+ keypadMode = _prev$pluginProps2$ma2.keypadMode,
95
+ controlledKeypadMode = _prev$pluginProps2$ma2.controlledKeypadMode;
121
96
  var nodeNext = next.node,
122
- _next$pluginProps = next.pluginProps;
123
- _next$pluginProps = _next$pluginProps === void 0 ? {} : _next$pluginProps;
124
- var _next$pluginProps$mat = _next$pluginProps.math;
125
- _next$pluginProps$mat = _next$pluginProps$mat === void 0 ? {} : _next$pluginProps$mat;
126
- var keypadModeNext = _next$pluginProps$mat.keypadMode,
127
- controlledKeypadModeNext = _next$pluginProps$mat.controlledKeypadMode;
97
+ _next$pluginProps = next.pluginProps,
98
+ _next$pluginProps2 = _next$pluginProps === void 0 ? {} : _next$pluginProps,
99
+ _next$pluginProps2$ma = _next$pluginProps2.math,
100
+ _next$pluginProps2$ma2 = _next$pluginProps2$ma === void 0 ? {} : _next$pluginProps2$ma,
101
+ keypadModeNext = _next$pluginProps2$ma2.keypadMode,
102
+ controlledKeypadModeNext = _next$pluginProps2$ma2.controlledKeypadMode;
128
103
  var keypadModeChanged = keypadMode !== keypadModeNext;
129
104
  var controlledKeypadModeChanged = controlledKeypadMode !== controlledKeypadModeNext;
130
105
  var equal = (0, _isEqual["default"])(node, nodeNext);
131
106
  return equal && !keypadModeChanged && !controlledKeypadModeChanged;
132
107
  });
133
-
134
108
  exports.CustomToolbarComp = CustomToolbarComp;
135
109
  CustomToolbarComp.propTypes = {
136
110
  editor: _propTypes["default"].object,
@@ -150,8 +124,11 @@ CustomToolbarComp.propTypes = {
150
124
  onBlur: _propTypes["default"].func
151
125
  };
152
126
  var mathTypes = ['math', 'mathml'];
153
-
154
- function MathPlugin() {
127
+ function MathPlugin(opts) {
128
+ MathPlugin.mathMlOptions = {
129
+ mmlOutput: opts.mmlOutput,
130
+ mmlEditing: opts.mmlEditing
131
+ };
155
132
  return {
156
133
  name: 'math',
157
134
  toolbar: {
@@ -161,7 +138,6 @@ function MathPlugin() {
161
138
  var math = inlineMath();
162
139
  editor.insertNode(math);
163
140
  },
164
-
165
141
  /**
166
142
  * Return a react component function
167
143
  * @param node {Slate.Node}
@@ -173,16 +149,13 @@ function MathPlugin() {
173
149
  },
174
150
  rules: function rules(editor) {
175
151
  var isVoid = editor.isVoid,
176
- isInline = editor.isInline;
177
-
152
+ isInline = editor.isInline;
178
153
  editor.isVoid = function (element) {
179
154
  return mathTypes.includes(element.type) ? true : isVoid(element);
180
155
  };
181
-
182
156
  editor.isInline = function (element) {
183
157
  return mathTypes.includes(element.type) ? true : isInline(element);
184
158
  };
185
-
186
159
  return editor;
187
160
  },
188
161
  supports: function supports(node) {
@@ -208,11 +181,10 @@ function MathPlugin() {
208
181
  log('[renderNode]: data:', props.node.data);
209
182
  return /*#__PURE__*/_react["default"].createElement(_mathToolbar.MathPreview, props);
210
183
  }
184
+
211
185
  /**
212
186
  * Here for rendering mathml content
213
187
  */
214
-
215
-
216
188
  if (props.node.type === 'mathml') {
217
189
  var html = props.node.data.html;
218
190
  return /*#__PURE__*/_react["default"].createElement("span", null, /*#__PURE__*/_react["default"].createElement("span", (0, _extends2["default"])({}, props.attributes, {
@@ -225,12 +197,15 @@ function MathPlugin() {
225
197
  }
226
198
  };
227
199
  }
228
-
229
200
  MathPlugin.ROUND_BRACKETS = 'round_brackets';
230
201
  MathPlugin.SQUARE_BRACKETS = 'square_brackets';
231
202
  MathPlugin.DOLLAR = 'dollar';
232
203
  MathPlugin.DOUBLE_DOLLAR = 'double_dollar';
233
-
204
+ MathPlugin.mathMlOptions = {};
205
+ MathPlugin.propTypes = {
206
+ attributes: _propTypes["default"].object,
207
+ node: _propTypes["default"].node
208
+ };
234
209
  var inlineMath = function inlineMath() {
235
210
  return {
236
211
  type: 'math',
@@ -242,17 +217,15 @@ var inlineMath = function inlineMath() {
242
217
  }]
243
218
  };
244
219
  };
245
-
246
220
  exports.inlineMath = inlineMath;
247
-
248
221
  var htmlDecode = function htmlDecode(input) {
249
222
  var doc = new DOMParser().parseFromString(input, 'text/html');
250
223
  return doc.documentElement.textContent;
251
224
  };
252
-
253
225
  var getTagName = function getTagName(el) {
254
226
  return (el && el.tagName || '').toLowerCase();
255
227
  };
228
+
256
229
  /**
257
230
  * Makes sure that strings that contain stuff like:
258
231
  * x<y are not transformed into x by the DOMParser because it thinks
@@ -260,11 +233,10 @@ var getTagName = function getTagName(el) {
260
233
  * @param input
261
234
  * @returns {*}
262
235
  */
263
-
264
-
265
236
  var lessThanHandling = function lessThanHandling(input) {
266
- var arrowSplit = input.split('<'); // if we don't have at least 2 characters there's no point in checking
237
+ var arrowSplit = input.split('<');
267
238
 
239
+ // if we don't have at least 2 characters there's no point in checking
268
240
  if (input.length > 2) {
269
241
  return arrowSplit.reduce(function (st, part) {
270
242
  /*
@@ -276,14 +248,11 @@ var lessThanHandling = function lessThanHandling(input) {
276
248
  if (part.match(/<[a-zA-Z/][\s\S]*>/gi)) {
277
249
  return "".concat(st).concat(st ? '<' : '').concat(part);
278
250
  }
279
-
280
251
  return "".concat(st).concat(st ? '&lt;' : '').concat(part);
281
252
  }, '');
282
253
  }
283
-
284
254
  return input;
285
255
  };
286
-
287
256
  var serialization = {
288
257
  deserialize: function deserialize(el, children) {
289
258
  var tagName = getTagName(el);
@@ -294,15 +263,28 @@ var serialization = {
294
263
  * an inline child and the block is of type block
295
264
  * This is for legacy content only since our math rendering is valid for the core slate rules
296
265
  */
297
-
298
266
  var hasMathChild = _newSerialization.BLOCK_TAGS[tagName] && el.childNodes.length === 1 && getTagName(el.firstChild) === 'math';
299
267
  log('[deserialize] name: ', tagName);
268
+
300
269
  /**
301
270
  * This is here in order to be able to render mathml content
302
271
  */
303
-
304
272
  if (tagName === 'math' || el.dataset && el.dataset.type === 'mathml' || hasMathChild) {
305
273
  var newHtml = hasMathChild ? el.innerHTML : el.outerHTML;
274
+ if (MathPlugin.mathMlOptions.mmlEditing) {
275
+ var htmlToUse = (0, _mathRendering.mmlToLatex)(newHtml);
276
+ var latex = htmlDecode(htmlToUse);
277
+ var _unWrapMath = (0, _mathRendering.unWrapMath)(latex),
278
+ unwrapped = _unWrapMath.unwrapped,
279
+ wrapType = _unWrapMath.wrapType;
280
+ return (0, _slateHyperscript.jsx)('element', {
281
+ type: 'math',
282
+ data: {
283
+ latex: unwrapped,
284
+ wrapper: wrapType
285
+ }
286
+ });
287
+ }
306
288
  return (0, _slateHyperscript.jsx)('element', {
307
289
  type: 'mathml',
308
290
  data: {
@@ -310,30 +292,24 @@ var serialization = {
310
292
  }
311
293
  });
312
294
  }
313
-
314
295
  if (el.nodeType === TEXT_NODE) {
315
296
  return;
316
297
  }
317
-
318
298
  if (tagName !== 'span') {
319
299
  return;
320
300
  }
321
-
322
301
  var hasLatex = el.hasAttribute('data-latex') || el.hasAttribute('latex');
323
-
324
302
  if (hasLatex) {
325
- var latex = htmlDecode(el.innerHTML);
326
-
327
- var _unWrapMath = (0, _mathRendering.unWrapMath)(latex),
328
- unwrapped = _unWrapMath.unwrapped,
329
- wrapType = _unWrapMath.wrapType;
330
-
331
- log('[deserialize]: noBrackets: ', unwrapped, wrapType);
303
+ var _latex = htmlDecode(el.innerHTML);
304
+ var _unWrapMath2 = (0, _mathRendering.unWrapMath)(_latex),
305
+ _unwrapped = _unWrapMath2.unwrapped,
306
+ _wrapType = _unWrapMath2.wrapType;
307
+ log('[deserialize]: noBrackets: ', _unwrapped, _wrapType);
332
308
  return (0, _slateHyperscript.jsx)('element', {
333
309
  type: 'math',
334
310
  data: {
335
- latex: unwrapped,
336
- wrapper: wrapType
311
+ latex: _unwrapped,
312
+ wrapper: _wrapType
337
313
  }
338
314
  });
339
315
  }
@@ -341,25 +317,45 @@ var serialization = {
341
317
  serialize: function serialize(object) {
342
318
  if (object.type === 'math') {
343
319
  var _ref4 = object.data || {},
344
- latex = _ref4.latex,
345
- wrapper = _ref4.wrapper;
346
-
320
+ latex = _ref4.latex,
321
+ wrapper = _ref4.wrapper;
347
322
  log('[serialize] latex: ', latex);
348
323
  var decoded = htmlDecode(lessThanHandling(latex));
324
+ if (MathPlugin.mathMlOptions.mmlOutput) {
325
+ var res = (0, _mathRendering.renderMath)("<span data-latex=\"\" data-raw=\"".concat(decoded, "\">").concat((0, _mathRendering.wrapMath)(decoded, wrapper), "</span>"));
326
+ var newLatex = (0, _mathRendering.mmlToLatex)(res);
327
+
328
+ // we need to remove all the spaces from the latex to be able to compare it
329
+ var strippedL = latex.replace(/\s/g, '');
330
+ var strippedNewL = newLatex.replace(/\s/g, '');
331
+
332
+ // we check if the latex keeps his form after being converted to mathml and back to latex
333
+ // if it does we can safely convert it to mathml
334
+ if ((0, _isEqual["default"])(strippedL, strippedNewL)) {
335
+ return /*#__PURE__*/_react["default"].createElement("span", {
336
+ "data-type": "mathml",
337
+ dangerouslySetInnerHTML: {
338
+ __html: res
339
+ }
340
+ });
341
+ } else {
342
+ // if it doesn't we keep the latex version
343
+ console.log('This latex can not be safely converted to mathml:', latex, 'so we will keep the latex version!!!');
344
+ console.warn('This latex can not be safely converted to mathml:', latex, 'so we will keep the latex version!!!');
345
+ }
346
+ }
349
347
  return /*#__PURE__*/_react["default"].createElement("span", {
350
348
  "data-latex": "",
351
349
  "data-raw": decoded
352
350
  }, (0, _mathRendering.wrapMath)(decoded, wrapper));
353
351
  }
352
+
354
353
  /**
355
354
  * Here for rendering mathml content
356
355
  */
357
-
358
-
359
356
  if (object.type === 'mathml') {
360
357
  var _ref5 = object.data || {},
361
- html = _ref5.html;
362
-
358
+ html = _ref5.html;
363
359
  return /*#__PURE__*/_react["default"].createElement("span", {
364
360
  "data-type": "mathml",
365
361
  dangerouslySetInnerHTML: {
@@ -370,4 +366,4 @@ var serialization = {
370
366
  }
371
367
  };
372
368
  exports.serialization = serialization;
373
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2ciLCJkZWJ1ZyIsIlRFWFRfTk9ERSIsImdlbmVyYXRlQWRkaXRpb25hbEtleXMiLCJrZXlEYXRhIiwibWFwIiwia2V5IiwibmFtZSIsImxhdGV4Iiwid3JpdGUiLCJsYWJlbCIsIkN1c3RvbVRvb2xiYXJDb21wIiwiUmVhY3QiLCJtZW1vIiwicHJvcHMiLCJub2RlIiwibm9kZVBhdGgiLCJvbkZvY3VzIiwib25CbHVyIiwib25DbGljayIsImVkaXRvciIsInBsdWdpblByb3BzIiwibWF0aCIsImtleXBhZE1vZGUiLCJjdXN0b21LZXlzIiwiY29udHJvbGxlZEtleXBhZE1vZGUiLCJvbkRvbmUiLCJ1cGRhdGUiLCJkYXRhIiwiYXBwbHkiLCJ0eXBlIiwicGF0aCIsInByb3BlcnRpZXMiLCJuZXdQcm9wZXJ0aWVzIiwiUmVhY3RFZGl0b3IiLCJmb2N1cyIsIlRyYW5zZm9ybXMiLCJtb3ZlIiwiZGlzdGFuY2UiLCJ1bml0IiwicHJldiIsIm5leHQiLCJub2RlTmV4dCIsImtleXBhZE1vZGVOZXh0IiwiY29udHJvbGxlZEtleXBhZE1vZGVOZXh0Iiwia2V5cGFkTW9kZUNoYW5nZWQiLCJjb250cm9sbGVkS2V5cGFkTW9kZUNoYW5nZWQiLCJlcXVhbCIsImlzRXF1YWwiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJvYmplY3QiLCJzaGFwZSIsInN0cmluZyIsImNoaWxkcmVuIiwiYXJyYXkiLCJpc1JlcXVpcmVkIiwidmFsdWUiLCJhcnJheU9mIiwib25Ub29sYmFyRG9uZSIsImZ1bmMiLCJtYXRoVHlwZXMiLCJNYXRoUGx1Z2luIiwidG9vbGJhciIsImljb24iLCJpbmxpbmVNYXRoIiwiaW5zZXJ0Tm9kZSIsInJ1bGVzIiwiaXNWb2lkIiwiaXNJbmxpbmUiLCJlbGVtZW50IiwiaW5jbHVkZXMiLCJzdXBwb3J0cyIsInNjaGVtYSIsImRvY3VtZW50IiwibWF0Y2giLCJwbHVnaW5TdHlsZXMiLCJwYXJlbnROb2RlIiwicCIsInBvc2l0aW9uIiwidG9wIiwicmVuZGVyTm9kZSIsImh0bWwiLCJhdHRyaWJ1dGVzIiwiX19odG1sIiwiUk9VTkRfQlJBQ0tFVFMiLCJTUVVBUkVfQlJBQ0tFVFMiLCJET0xMQVIiLCJET1VCTEVfRE9MTEFSIiwidGV4dCIsImh0bWxEZWNvZGUiLCJpbnB1dCIsImRvYyIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsImRvY3VtZW50RWxlbWVudCIsInRleHRDb250ZW50IiwiZ2V0VGFnTmFtZSIsImVsIiwidGFnTmFtZSIsInRvTG93ZXJDYXNlIiwibGVzc1RoYW5IYW5kbGluZyIsImFycm93U3BsaXQiLCJzcGxpdCIsImxlbmd0aCIsInJlZHVjZSIsInN0IiwicGFydCIsInNlcmlhbGl6YXRpb24iLCJkZXNlcmlhbGl6ZSIsImhhc01hdGhDaGlsZCIsIkJMT0NLX1RBR1MiLCJjaGlsZE5vZGVzIiwiZmlyc3RDaGlsZCIsImRhdGFzZXQiLCJuZXdIdG1sIiwiaW5uZXJIVE1MIiwib3V0ZXJIVE1MIiwianN4Iiwibm9kZVR5cGUiLCJoYXNMYXRleCIsImhhc0F0dHJpYnV0ZSIsInVuV3JhcE1hdGgiLCJ1bndyYXBwZWQiLCJ3cmFwVHlwZSIsIndyYXBwZXIiLCJzZXJpYWxpemUiLCJkZWNvZGVkIiwid3JhcE1hdGgiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGx1Z2lucy9tYXRoL2luZGV4LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRWRpdG9yLCBJbmxpbmUsIFRyYW5zZm9ybXMgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBSZWFjdEVkaXRvciB9IGZyb20gJ3NsYXRlLXJlYWN0JztcbmltcG9ydCB7IGpzeCB9IGZyb20gJ3NsYXRlLWh5cGVyc2NyaXB0JztcbmltcG9ydCBGdW5jdGlvbnMgZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL0Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBNYXRoUHJldmlldywgTWF0aFRvb2xiYXIgfSBmcm9tICdAcGllLWxpYi9tYXRoLXRvb2xiYXInO1xuaW1wb3J0IHsgd3JhcE1hdGgsIHVuV3JhcE1hdGggfSBmcm9tICdAcGllLWxpYi9tYXRoLXJlbmRlcmluZyc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcblxuaW1wb3J0IHsgQkxPQ0tfVEFHUyB9IGZyb20gJy4uLy4uL25ldy1zZXJpYWxpemF0aW9uJztcbmNvbnN0IGxvZyA9IGRlYnVnKCdAcGllLWxpYjplZGl0YWJsZS1odG1sOnBsdWdpbnM6bWF0aCcpO1xuXG5jb25zdCBURVhUX05PREUgPSAzO1xuXG5mdW5jdGlvbiBnZW5lcmF0ZUFkZGl0aW9uYWxLZXlzKGtleURhdGEgPSBbXSkge1xuICByZXR1cm4ga2V5RGF0YS5tYXAoa2V5ID0+ICh7XG4gICAgbmFtZToga2V5LFxuICAgIGxhdGV4OiBrZXksXG4gICAgd3JpdGU6IGtleSxcbiAgICBsYWJlbDoga2V5XG4gIH0pKTtcbn1cblxuZXhwb3J0IGNvbnN0IEN1c3RvbVRvb2xiYXJDb21wID0gUmVhY3QubWVtbyhcbiAgcHJvcHMgPT4ge1xuICAgIGNvbnN0IHsgbm9kZSwgbm9kZVBhdGgsIG9uRm9jdXMsIG9uQmx1ciwgb25DbGljaywgZWRpdG9yIH0gPSBwcm9wcztcbiAgICBjb25zdCB7IHBsdWdpblByb3BzIH0gPSBwcm9wcyB8fCB7fTtcbiAgICBjb25zdCB7IG1hdGggfSA9IHBsdWdpblByb3BzIHx8IHt9O1xuICAgIGNvbnN0IHsga2V5cGFkTW9kZSwgY3VzdG9tS2V5cywgY29udHJvbGxlZEtleXBhZE1vZGUgPSB0cnVlIH0gPSBtYXRoIHx8IHt9O1xuXG4gICAgY29uc3Qgb25Eb25lID0gbGF0ZXggPT4ge1xuICAgICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgICAuLi5ub2RlLmRhdGEsXG4gICAgICAgIGxhdGV4XG4gICAgICB9O1xuICAgICAgZWRpdG9yLmFwcGx5KHtcbiAgICAgICAgdHlwZTogJ3NldF9ub2RlJyxcbiAgICAgICAgcGF0aDogbm9kZVBhdGgsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBkYXRhOiBub2RlLmRhdGFcbiAgICAgICAgfSxcbiAgICAgICAgbmV3UHJvcGVydGllczogeyBkYXRhOiB1cGRhdGUgfVxuICAgICAgfSk7XG4gICAgICBSZWFjdEVkaXRvci5mb2N1cyhlZGl0b3IpO1xuICAgICAgVHJhbnNmb3Jtcy5tb3ZlKGVkaXRvciwgeyBkaXN0YW5jZTogMSwgdW5pdDogJ29mZnNldCcgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhdGV4ID0gbm9kZS5kYXRhLmxhdGV4O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxNYXRoVG9vbGJhclxuICAgICAgICBhdXRvRm9jdXNcbiAgICAgICAgYWRkaXRpb25hbEtleXM9e2dlbmVyYXRlQWRkaXRpb25hbEtleXMoY3VzdG9tS2V5cyl9XG4gICAgICAgIGxhdGV4PXtsYXRleH1cbiAgICAgICAgb25Eb25lPXtvbkRvbmV9XG4gICAgICAgIG9uQmx1cj17b25CbHVyfVxuICAgICAgICBvbkZvY3VzPXtvbkZvY3VzfVxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICBrZXlwYWRNb2RlPXtrZXlwYWRNb2RlfVxuICAgICAgICBjb250cm9sbGVkS2V5cGFkTW9kZT17Y29udHJvbGxlZEtleXBhZE1vZGV9XG4gICAgICAvPlxuICAgICk7XG4gIH0sXG4gIChwcmV2LCBuZXh0KSA9PiB7XG4gICAgY29uc3QgeyBub2RlLCBwbHVnaW5Qcm9wczogeyBtYXRoOiB7IGtleXBhZE1vZGUsIGNvbnRyb2xsZWRLZXlwYWRNb2RlIH0gPSB7fSB9ID0ge30gfSA9IHByZXY7XG4gICAgY29uc3Qge1xuICAgICAgbm9kZTogbm9kZU5leHQsXG4gICAgICBwbHVnaW5Qcm9wczoge1xuICAgICAgICBtYXRoOiB7IGtleXBhZE1vZGU6IGtleXBhZE1vZGVOZXh0LCBjb250cm9sbGVkS2V5cGFkTW9kZTogY29udHJvbGxlZEtleXBhZE1vZGVOZXh0IH0gPSB7fVxuICAgICAgfSA9IHt9XG4gICAgfSA9IG5leHQ7XG4gICAgY29uc3Qga2V5cGFkTW9kZUNoYW5nZWQgPSBrZXlwYWRNb2RlICE9PSBrZXlwYWRNb2RlTmV4dDtcbiAgICBjb25zdCBjb250cm9sbGVkS2V5cGFkTW9kZUNoYW5nZWQgPSBjb250cm9sbGVkS2V5cGFkTW9kZSAhPT0gY29udHJvbGxlZEtleXBhZE1vZGVOZXh0O1xuXG4gICAgY29uc3QgZXF1YWwgPSBpc0VxdWFsKG5vZGUsIG5vZGVOZXh0KTtcbiAgICByZXR1cm4gZXF1YWwgJiYgIWtleXBhZE1vZGVDaGFuZ2VkICYmICFjb250cm9sbGVkS2V5cGFkTW9kZUNoYW5nZWQ7XG4gIH1cbik7XG5cbkN1c3RvbVRvb2xiYXJDb21wLnByb3BUeXBlcyA9IHtcbiAgZWRpdG9yOiBQcm9wVHlwZXMub2JqZWN0LFxuICBub2RlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY2hpbGRyZW46IFByb3BUeXBlcy5hcnJheSxcbiAgICBkYXRhOiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLmlzUmVxdWlyZWQsXG4gIHZhbHVlOiBQcm9wVHlwZXMuYXJyYXlPZihcbiAgICBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgdHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGNoaWxkcmVuOiBQcm9wVHlwZXMuYXJyYXksXG4gICAgICBkYXRhOiBQcm9wVHlwZXMub2JqZWN0XG4gICAgfSlcbiAgKS5pc1JlcXVpcmVkLFxuICBvblRvb2xiYXJEb25lOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jXG59O1xuXG5jb25zdCBtYXRoVHlwZXMgPSBbJ21hdGgnLCAnbWF0aG1sJ107XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1hdGhQbHVnaW4oKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ21hdGgnLFxuICAgIHRvb2xiYXI6IHtcbiAgICAgIGljb246IDxGdW5jdGlvbnMgLz4sXG4gICAgICBvbkNsaWNrOiBlZGl0b3IgPT4ge1xuICAgICAgICBsb2coJ1tpbnNlcnRNYXRoXScpO1xuICAgICAgICBjb25zdCBtYXRoID0gaW5saW5lTWF0aCgpO1xuXG4gICAgICAgIGVkaXRvci5pbnNlcnROb2RlKG1hdGgpO1xuICAgICAgfSxcbiAgICAgIC8qKlxuICAgICAgICogUmV0dXJuIGEgcmVhY3QgY29tcG9uZW50IGZ1bmN0aW9uXG4gICAgICAgKiBAcGFyYW0gbm9kZSB7U2xhdGUuTm9kZX1cbiAgICAgICAqIEBwYXJhbSB2YWx1ZSB7U2xhdGUuVmFsdWV9XG4gICAgICAgKiBAcGFyYW0gb25Eb25lIHsoY2hhbmdlPzogU2xhdGUuQ2hhbmdlLCBmaW5pc2hFZGl0aW5nIDpib29sZWEpID0+IHZvaWR9IC0gYSBmdW5jdGlvbiB0byBjYWxsIG9uY2UgdGhlIHRvb2xiYXJcbiAgICAgICAqICAgaGFzIG1hZGUgYW55IGNoYW5nZXMsIGNhbGwgd2l0aCB0aGUgbm9kZS5rZXkgYW5kIGEgZGF0YSBvYmplY3QuXG4gICAgICAgKi9cbiAgICAgIEN1c3RvbVRvb2xiYXJDb21wXG4gICAgfSxcbiAgICBydWxlczogZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHsgaXNWb2lkLCBpc0lubGluZSB9ID0gZWRpdG9yO1xuXG4gICAgICBlZGl0b3IuaXNWb2lkID0gZWxlbWVudCA9PiB7XG4gICAgICAgIHJldHVybiBtYXRoVHlwZXMuaW5jbHVkZXMoZWxlbWVudC50eXBlKSA/IHRydWUgOiBpc1ZvaWQoZWxlbWVudCk7XG4gICAgICB9O1xuXG4gICAgICBlZGl0b3IuaXNJbmxpbmUgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgcmV0dXJuIG1hdGhUeXBlcy5pbmNsdWRlcyhlbGVtZW50LnR5cGUpID8gdHJ1ZSA6IGlzSW5saW5lKGVsZW1lbnQpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGVkaXRvcjtcbiAgICB9LFxuICAgIHN1cHBvcnRzOiBub2RlID0+IG1hdGhUeXBlcy5pbmNsdWRlcyhub2RlLnR5cGUpLFxuICAgIHNjaGVtYToge1xuICAgICAgZG9jdW1lbnQ6IHsgbWF0Y2g6IFt7IHR5cGU6ICdtYXRoJyB9XSB9XG4gICAgfSxcblxuICAgIHBsdWdpblN0eWxlczogKG5vZGUsIHBhcmVudE5vZGUsIHApID0+IHtcbiAgICAgIGlmIChwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgdG9wOiAnaW5pdGlhbCdcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVuZGVyTm9kZTogcHJvcHMgPT4ge1xuICAgICAgaWYgKHByb3BzLm5vZGUudHlwZSA9PT0gJ21hdGgnKSB7XG4gICAgICAgIGxvZygnW3JlbmRlck5vZGVdOiBkYXRhOicsIHByb3BzLm5vZGUuZGF0YSk7XG4gICAgICAgIHJldHVybiA8TWF0aFByZXZpZXcgey4uLnByb3BzfSAvPjtcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBIZXJlIGZvciByZW5kZXJpbmcgbWF0aG1sIGNvbnRlbnRcbiAgICAgICAqL1xuICAgICAgaWYgKHByb3BzLm5vZGUudHlwZSA9PT0gJ21hdGhtbCcpIHtcbiAgICAgICAgY29uc3QgeyBkYXRhOiB7IGh0bWwgfSB9ID0gcHJvcHMubm9kZTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgPHNwYW4gey4uLnByb3BzLmF0dHJpYnV0ZXN9IGNvbnRlbnRFZGl0YWJsZT17ZmFsc2V9IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogaHRtbCB9fSAvPlxuICAgICAgICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbk1hdGhQbHVnaW4uUk9VTkRfQlJBQ0tFVFMgPSAncm91bmRfYnJhY2tldHMnO1xuTWF0aFBsdWdpbi5TUVVBUkVfQlJBQ0tFVFMgPSAnc3F1YXJlX2JyYWNrZXRzJztcbk1hdGhQbHVnaW4uRE9MTEFSID0gJ2RvbGxhcic7XG5NYXRoUGx1Z2luLkRPVUJMRV9ET0xMQVIgPSAnZG91YmxlX2RvbGxhcic7XG5cbmV4cG9ydCBjb25zdCBpbmxpbmVNYXRoID0gKCkgPT4gKHtcbiAgdHlwZTogJ21hdGgnLFxuICBkYXRhOiB7XG4gICAgbGF0ZXg6ICcnXG4gIH0sXG4gIGNoaWxkcmVuOiBbeyB0ZXh0OiAnJyB9XVxufSk7XG5cbmNvbnN0IGh0bWxEZWNvZGUgPSBpbnB1dCA9PiB7XG4gIGNvbnN0IGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaW5wdXQsICd0ZXh0L2h0bWwnKTtcblxuICByZXR1cm4gZG9jLmRvY3VtZW50RWxlbWVudC50ZXh0Q29udGVudDtcbn07XG5cbmNvbnN0IGdldFRhZ05hbWUgPSBlbCA9PiB7XG4gIHJldHVybiAoKGVsICYmIGVsLnRhZ05hbWUpIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xufTtcblxuLyoqXG4gKiBNYWtlcyBzdXJlIHRoYXQgc3RyaW5ncyB0aGF0IGNvbnRhaW4gc3R1ZmYgbGlrZTpcbiAqIHg8eSBhcmUgbm90IHRyYW5zZm9ybWVkIGludG8geCBieSB0aGUgRE9NUGFyc2VyIGJlY2F1c2UgaXQgdGhpbmtzXG4gKiB0aGF0IDx5IGlzIHRoZSBzdGFydCBvZiBhIGRvbSBlbGVtZW50IHRhZ1xuICogQHBhcmFtIGlucHV0XG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuY29uc3QgbGVzc1RoYW5IYW5kbGluZyA9IGlucHV0ID0+IHtcbiAgY29uc3QgYXJyb3dTcGxpdCA9IGlucHV0LnNwbGl0KCc8Jyk7XG5cbiAgLy8gaWYgd2UgZG9uJ3QgaGF2ZSBhdCBsZWFzdCAyIGNoYXJhY3RlcnMgdGhlcmUncyBubyBwb2ludCBpbiBjaGVja2luZ1xuICBpZiAoaW5wdXQubGVuZ3RoID4gMikge1xuICAgIHJldHVybiBhcnJvd1NwbGl0LnJlZHVjZSgoc3QsIHBhcnQpID0+IHtcbiAgICAgIC8qXG4gICAgICAgV2UgY2hlY2sgaWYgdGhpcyBlbGVtZW50IHJlc3VsdGVkIGlzOlxuICAgICAgIGRpdiAtIGNvbnRpbnVhdGlvbiBvZiBhIGJlZ2lubmluZyBvZiBhIEhUTUwgZWxlbWVudFxuICAgICAgIC9kaXYgLSBjbG9zaW5nIG9mIGEgSFRNTCB0YWdcbiAgICAgICBici8+IC0gYmVnaW5uaW5nIGFuZCBjbG9zaW5nIG9mIGEgaHRtbCBUQUdcbiAgICAgICAqL1xuICAgICAgaWYgKHBhcnQubWF0Y2goLzxbYS16QS1aL11bXFxzXFxTXSo+L2dpKSkge1xuICAgICAgICByZXR1cm4gYCR7c3R9JHtzdCA/ICc8JyA6ICcnfSR7cGFydH1gO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYCR7c3R9JHtzdCA/ICcmbHQ7JyA6ICcnfSR7cGFydH1gO1xuICAgIH0sICcnKTtcbiAgfVxuXG4gIHJldHVybiBpbnB1dDtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXJpYWxpemF0aW9uID0ge1xuICBkZXNlcmlhbGl6ZShlbCwgY2hpbGRyZW4pIHtcbiAgICBjb25zdCB0YWdOYW1lID0gZ2V0VGFnTmFtZShlbCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB1c2VkIGZvciB3aGVuIHRoZXJlJ3MgYSB3cmFwcGVyIG92ZXIgdGhlIG1hdGhtbCBlbGVtZW50LlxuICAgICAqIEJlY2F1c2Ugb2YgdGhpcyBzbGF0ZSBydWxlOiBcIk9ubHkgYWxsb3cgYmxvY2sgbm9kZXMgb3IgaW5saW5lIGFuZCB0ZXh0IG5vZGVzIGluIGJsb2Nrcy5cIlxuICAgICAqIFRoZSBlbGVtZW50IHRoYXQgY29udGFpbnMgb25seSB0aGUgbWF0aG1sIGlzIHJlbW92ZWQgKGFsb25nIHdpdGggdGhlIG1hdGgpIGJlY2F1c2UgaXQgaGFzXG4gICAgICogYW4gaW5saW5lIGNoaWxkIGFuZCB0aGUgYmxvY2sgaXMgb2YgdHlwZSBibG9ja1xuICAgICAqIFRoaXMgaXMgZm9yIGxlZ2FjeSBjb250ZW50IG9ubHkgc2luY2Ugb3VyIG1hdGggcmVuZGVyaW5nIGlzIHZhbGlkIGZvciB0aGUgY29yZSBzbGF0ZSBydWxlc1xuICAgICAqL1xuICAgIGNvbnN0IGhhc01hdGhDaGlsZCA9XG4gICAgICBCTE9DS19UQUdTW3RhZ05hbWVdICYmIGVsLmNoaWxkTm9kZXMubGVuZ3RoID09PSAxICYmIGdldFRhZ05hbWUoZWwuZmlyc3RDaGlsZCkgPT09ICdtYXRoJztcbiAgICBsb2coJ1tkZXNlcmlhbGl6ZV0gbmFtZTogJywgdGFnTmFtZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGhlcmUgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byByZW5kZXIgbWF0aG1sIGNvbnRlbnRcbiAgICAgKi9cbiAgICBpZiAodGFnTmFtZSA9PT0gJ21hdGgnIHx8IChlbC5kYXRhc2V0ICYmIGVsLmRhdGFzZXQudHlwZSA9PT0gJ21hdGhtbCcpIHx8IGhhc01hdGhDaGlsZCkge1xuICAgICAgY29uc3QgbmV3SHRtbCA9IGhhc01hdGhDaGlsZCA/IGVsLmlubmVySFRNTCA6IGVsLm91dGVySFRNTDtcblxuICAgICAgcmV0dXJuIGpzeCgnZWxlbWVudCcsIHtcbiAgICAgICAgdHlwZTogJ21hdGhtbCcsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBodG1sOiBuZXdIdG1sXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChlbC5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRhZ05hbWUgIT09ICdzcGFuJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc0xhdGV4ID0gZWwuaGFzQXR0cmlidXRlKCdkYXRhLWxhdGV4JykgfHwgZWwuaGFzQXR0cmlidXRlKCdsYXRleCcpO1xuXG4gICAgaWYgKGhhc0xhdGV4KSB7XG4gICAgICBjb25zdCBsYXRleCA9IGh0bWxEZWNvZGUoZWwuaW5uZXJIVE1MKTtcbiAgICAgIGNvbnN0IHsgdW53cmFwcGVkLCB3cmFwVHlwZSB9ID0gdW5XcmFwTWF0aChsYXRleCk7XG4gICAgICBsb2coJ1tkZXNlcmlhbGl6ZV06IG5vQnJhY2tldHM6ICcsIHVud3JhcHBlZCwgd3JhcFR5cGUpO1xuXG4gICAgICByZXR1cm4ganN4KCdlbGVtZW50Jywge1xuICAgICAgICB0eXBlOiAnbWF0aCcsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBsYXRleDogdW53cmFwcGVkLFxuICAgICAgICAgIHdyYXBwZXI6IHdyYXBUeXBlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgc2VyaWFsaXplKG9iamVjdCkge1xuICAgIGlmIChvYmplY3QudHlwZSA9PT0gJ21hdGgnKSB7XG4gICAgICBjb25zdCB7IGxhdGV4LCB3cmFwcGVyIH0gPSBvYmplY3QuZGF0YSB8fCB7fTtcbiAgICAgIGxvZygnW3NlcmlhbGl6ZV0gbGF0ZXg6ICcsIGxhdGV4KTtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBodG1sRGVjb2RlKGxlc3NUaGFuSGFuZGxpbmcobGF0ZXgpKTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxzcGFuIGRhdGEtbGF0ZXg9XCJcIiBkYXRhLXJhdz17ZGVjb2RlZH0+XG4gICAgICAgICAge3dyYXBNYXRoKGRlY29kZWQsIHdyYXBwZXIpfVxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhlcmUgZm9yIHJlbmRlcmluZyBtYXRobWwgY29udGVudFxuICAgICAqL1xuICAgIGlmIChvYmplY3QudHlwZSA9PT0gJ21hdGhtbCcpIHtcbiAgICAgIGNvbnN0IHsgaHRtbCB9ID0gb2JqZWN0LmRhdGEgfHwge307XG5cbiAgICAgIHJldHVybiA8c3BhbiBkYXRhLXR5cGU9XCJtYXRobWxcIiBkYW5nZXJvdXNseVNldElubmVySFRNTD17eyBfX2h0bWw6IGh0bWwgfX0gLz47XG4gICAgfVxuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7Ozs7O0FBQ0EsSUFBTUEsR0FBRyxHQUFHLElBQUFDLGlCQUFBLEVBQU0scUNBQU4sQ0FBWjtBQUVBLElBQU1DLFNBQVMsR0FBRyxDQUFsQjs7QUFFQSxTQUFTQyxzQkFBVCxHQUE4QztFQUFBLElBQWRDLE9BQWMsdUVBQUosRUFBSTtFQUM1QyxPQUFPQSxPQUFPLENBQUNDLEdBQVIsQ0FBWSxVQUFBQyxHQUFHO0lBQUEsT0FBSztNQUN6QkMsSUFBSSxFQUFFRCxHQURtQjtNQUV6QkUsS0FBSyxFQUFFRixHQUZrQjtNQUd6QkcsS0FBSyxFQUFFSCxHQUhrQjtNQUl6QkksS0FBSyxFQUFFSjtJQUprQixDQUFMO0VBQUEsQ0FBZixDQUFQO0FBTUQ7O0FBRU0sSUFBTUssaUJBQWlCLGdCQUFHQyxpQkFBQSxDQUFNQyxJQUFOLENBQy9CLFVBQUFDLEtBQUssRUFBSTtFQUNQLElBQVFDLElBQVIsR0FBNkRELEtBQTdELENBQVFDLElBQVI7RUFBQSxJQUFjQyxRQUFkLEdBQTZERixLQUE3RCxDQUFjRSxRQUFkO0VBQUEsSUFBd0JDLE9BQXhCLEdBQTZESCxLQUE3RCxDQUF3QkcsT0FBeEI7RUFBQSxJQUFpQ0MsTUFBakMsR0FBNkRKLEtBQTdELENBQWlDSSxNQUFqQztFQUFBLElBQXlDQyxPQUF6QyxHQUE2REwsS0FBN0QsQ0FBeUNLLE9BQXpDO0VBQUEsSUFBa0RDLE1BQWxELEdBQTZETixLQUE3RCxDQUFrRE0sTUFBbEQ7O0VBQ0EsV0FBd0JOLEtBQUssSUFBSSxFQUFqQztFQUFBLElBQVFPLFdBQVIsUUFBUUEsV0FBUjs7RUFDQSxZQUFpQkEsV0FBVyxJQUFJLEVBQWhDO0VBQUEsSUFBUUMsSUFBUixTQUFRQSxJQUFS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
369
+ //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["log","debug","TEXT_NODE","generateAdditionalKeys","keyData","map","key","name","latex","write","label","CustomToolbarComp","React","memo","props","node","onFocus","onBlur","onClick","editor","nodePath","pluginProps","math","keypadMode","customKeys","controlledKeypadMode","onDone","update","data","apply","type","path","properties","newProperties","ReactEditor","focus","Transforms","move","distance","unit","prev","next","nodeNext","keypadModeNext","controlledKeypadModeNext","keypadModeChanged","controlledKeypadModeChanged","equal","isEqual","propTypes","PropTypes","object","shape","string","children","array","isRequired","value","arrayOf","onToolbarDone","func","MathPlugin","toolbar","icon","inlineMath","insertNode","rules","isVoid","isInline","element","supports","schema","document","match","pluginStyles","parentNode","p","position","top","renderNode","html","get","attributes","__html","ROUND_BRACKETS","SQUARE_BRACKETS","DOLLAR","DOUBLE_DOLLAR","text","htmlDecode","input","doc","DOMParser","parseFromString","documentElement","textContent","getTagName","el","tagName","toLowerCase","lessThanHandling","arrowSplit","split","length","reduce","st","part","serialization","deserialize","hasMathChild","BLOCK_TAGS","childNodes","firstChild","dataset","newHtml","innerHTML","outerHTML","jsx","nodeType","hasLatex","hasAttribute","unWrapMath","unwrapped","wrapType","wrapper","serialize","decoded","wrapMath"],"sources":["../../../src/plugins/math/index.jsx"],"sourcesContent":["import React from 'react';\nimport { Editor, Inline, Transforms } from 'slate';\nimport { ReactEditor } from 'slate-react';\nimport { jsx } from 'slate-hyperscript';\nimport Functions from '@material-ui/icons/Functions';\nimport { MathPreview, MathToolbar } from '@pie-lib/math-toolbar';\nimport { wrapMath, unWrapMath } from '@pie-lib/math-rendering';\nimport debug from 'debug';\nimport PropTypes from 'prop-types';\nimport isEqual from 'lodash/isEqual';\n\nimport { BLOCK_TAGS } from '../../new-serialization';\nconst log = debug('@pie-lib:editable-html:plugins:math');\n\nconst TEXT_NODE = 3;\n\nfunction generateAdditionalKeys(keyData = []) {\n return keyData.map(key => ({\n name: key,\n latex: key,\n write: key,\n label: key\n }));\n}\n\nexport const CustomToolbarComp = React.memo(\n props => {\n const { node, onFocus, onBlur, onClick, editor, nodePath } = props;\n const { pluginProps } = props || {};\n const { math } = pluginProps || {};\n const { keypadMode, customKeys, controlledKeypadMode = true } = math || {};\n\n const onDone = latex => {\n const update = {\n ...node.data,\n latex\n };\n editor.apply({\n type: 'set_node',\n path: nodePath,\n properties: {\n data: node.data\n },\n newProperties: { data: update }\n });\n ReactEditor.focus(editor);\n Transforms.move(editor, { distance: 1, unit: 'offset' });\n };\n\n const latex = node.data.latex;\n\n return (\n <MathToolbar\n autoFocus\n additionalKeys={generateAdditionalKeys(customKeys)}\n latex={latex}\n onDone={onDone}\n onBlur={onBlur}\n onFocus={onFocus}\n onClick={onClick}\n keypadMode={keypadMode}\n controlledKeypadMode={controlledKeypadMode}\n />\n );\n },\n (prev, next) => {\n const { node, pluginProps: { math: { keypadMode, controlledKeypadMode } = {} } = {} } = prev;\n const {\n node: nodeNext,\n pluginProps: {\n math: { keypadMode: keypadModeNext, controlledKeypadMode: controlledKeypadModeNext } = {}\n } = {}\n } = next;\n const keypadModeChanged = keypadMode !== keypadModeNext;\n const controlledKeypadModeChanged = controlledKeypadMode !== controlledKeypadModeNext;\n\n const equal = isEqual(node, nodeNext);\n return equal && !keypadModeChanged && !controlledKeypadModeChanged;\n }\n);\n\nCustomToolbarComp.propTypes = {\n editor: PropTypes.object,\n node: PropTypes.shape({\n type: PropTypes.string,\n children: PropTypes.array,\n data: PropTypes.object\n }).isRequired,\n value: PropTypes.arrayOf(\n PropTypes.shape({\n type: PropTypes.string,\n children: PropTypes.array,\n data: PropTypes.object\n })\n ).isRequired,\n onToolbarDone: PropTypes.func,\n onFocus: PropTypes.func,\n onClick: PropTypes.func,\n onBlur: PropTypes.func\n};\n\nexport default function MathPlugin() {\n return {\n name: 'math',\n toolbar: {\n icon: <Functions />,\n onClick: editor => {\n log('[insertMath]');\n const math = inlineMath();\n\n editor.insertNode(math);\n },\n /**\n * Return a react component function\n * @param node {Slate.Node}\n * @param value {Slate.Value}\n * @param onDone {(change?: Slate.Change, finishEditing :boolea) => void} - a function to call once the toolbar\n * has made any changes, call with the node.key and a data object.\n */\n CustomToolbarComp\n },\n rules: editor => {\n const { isVoid, isInline } = editor;\n\n editor.isVoid = element => {\n return element.type === 'math' ? true : isVoid(element);\n };\n\n editor.isInline = element => {\n return element.type === 'math' ? true : isInline(element);\n };\n\n return editor;\n },\n supports: node => node && node.type === 'math',\n schema: {\n document: { match: [{ type: 'math' }] }\n },\n\n pluginStyles: (node, parentNode, p) => {\n if (p) {\n return {\n position: 'absolute',\n top: 'initial'\n };\n }\n },\n\n renderNode: props => {\n if (props.node.type === 'math') {\n log('[renderNode]: data:', props.node.data);\n return <MathPreview {...props} />;\n }\n\n /**\n * Here for rendering mathml content\n */\n if (props.node.type === 'mathml') {\n const html = props.node.data.get('html');\n\n return <span {...props.attributes} dangerouslySetInnerHTML={{ __html: html }} />;\n }\n }\n };\n}\n\nMathPlugin.ROUND_BRACKETS = 'round_brackets';\nMathPlugin.SQUARE_BRACKETS = 'square_brackets';\nMathPlugin.DOLLAR = 'dollar';\nMathPlugin.DOUBLE_DOLLAR = 'double_dollar';\n\nexport const inlineMath = () => ({\n type: 'math',\n data: {\n latex: ''\n },\n children: [{ text: '' }]\n});\n\nconst htmlDecode = input => {\n const doc = new DOMParser().parseFromString(input, 'text/html');\n\n return doc.documentElement.textContent;\n};\n\nconst getTagName = el => {\n return ((el && el.tagName) || '').toLowerCase();\n};\n\n/**\n * Makes sure that strings that contain stuff like:\n * x<y are not transformed into x by the DOMParser because it thinks\n * that <y is the start of a dom element tag\n * @param input\n * @returns {*}\n */\nconst lessThanHandling = input => {\n const arrowSplit = input.split('<');\n\n // if we don't have at least 2 characters there's no point in checking\n if (input.length > 2) {\n return arrowSplit.reduce((st, part) => {\n /*\n We check if this element resulted is:\n div - continuation of a beginning of a HTML element\n /div - closing of a HTML tag\n br/> - beginning and closing of a html TAG\n */\n if (part.match(/<[a-zA-Z/][\\s\\S]*>/gi)) {\n return `${st}${st ? '<' : ''}${part}`;\n }\n\n return `${st}${st ? '&lt;' : ''}${part}`;\n }, '');\n }\n\n return input;\n};\n\nexport const serialization = {\n deserialize(el, children) {\n const tagName = getTagName(el);\n /**\n * This is used for when there's a wrapper over the mathml element.\n * Because of this slate rule: \"Only allow block nodes or inline and text nodes in blocks.\"\n * The element that contains only the mathml is removed (along with the math) because it has\n * an inline child and the block is of type block\n * This is for legacy content only since our math rendering is valid for the core slate rules\n */\n const hasMathChild =\n BLOCK_TAGS[tagName] && el.childNodes.length === 1 && getTagName(el.firstChild) === 'math';\n log('[deserialize] name: ', tagName);\n\n /**\n * This is here in order to be able to render mathml content\n */\n if (tagName === 'math' || (el.dataset && el.dataset.type === 'mathml') || hasMathChild) {\n const newHtml = hasMathChild ? el.innerHTML : el.outerHTML;\n\n return jsx('element', {\n type: 'mathml',\n data: {\n html: newHtml\n }\n });\n }\n\n if (el.nodeType === TEXT_NODE) {\n return;\n }\n\n if (tagName !== 'span') {\n return;\n }\n\n const hasLatex = el.hasAttribute('data-latex') || el.hasAttribute('latex');\n\n if (hasLatex) {\n const latex = htmlDecode(el.innerHTML);\n const { unwrapped, wrapType } = unWrapMath(latex);\n log('[deserialize]: noBrackets: ', unwrapped, wrapType);\n\n return jsx('element', {\n type: 'math',\n data: {\n latex: unwrapped,\n wrapper: wrapType\n }\n });\n }\n },\n serialize(object) {\n if (object.type === 'math') {\n const { latex, wrapper } = object.data || {};\n log('[serialize] latex: ', latex);\n const decoded = htmlDecode(lessThanHandling(latex));\n return (\n <span data-latex=\"\" data-raw={decoded}>\n {wrapMath(decoded, wrapper)}\n </span>\n );\n }\n\n /**\n * Here for rendering mathml content\n */\n if (object.type === 'mathml') {\n const { html } = object.data || {};\n\n return <span data-type=\"mathml\" dangerouslySetInnerHTML={{ __html: html }} />;\n }\n }\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_slate","_slateReact","_slateHyperscript","_Functions","_mathToolbar","_mathRendering","_debug","_propTypes","_isEqual","_newSerialization","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","log","debug","TEXT_NODE","generateAdditionalKeys","keyData","undefined","map","name","latex","write","label","CustomToolbarComp","React","memo","props","node","nodePath","onFocus","onBlur","onClick","editor","_ref","pluginProps","_ref2","math","_ref3","keypadMode","customKeys","_ref3$controlledKeypa","controlledKeypadMode","onDone","update","data","type","path","properties","newProperties","ReactEditor","focus","Transforms","move","distance","unit","createElement","MathToolbar","autoFocus","additionalKeys","prev","next","_prev$pluginProps","_prev$pluginProps2","_prev$pluginProps2$ma","_prev$pluginProps2$ma2","nodeNext","_next$pluginProps","_next$pluginProps2","_next$pluginProps2$ma","_next$pluginProps2$ma2","keypadModeNext","controlledKeypadModeNext","keypadModeChanged","controlledKeypadModeChanged","equal","isEqual","exports","propTypes","PropTypes","shape","string","children","array","isRequired","value","arrayOf","onToolbarDone","func","mathTypes","MathPlugin","opts","mathMlOptions","mmlOutput","mmlEditing","toolbar","icon","inlineMath","insertNode","rules","isVoid","isInline","element","includes","supports","schema","document","match","pluginStyles","parentNode","p","position","top","renderNode","MathPreview","html","_extends2","attributes","contentEditable","dangerouslySetInnerHTML","__html","ROUND_BRACKETS","SQUARE_BRACKETS","DOLLAR","DOUBLE_DOLLAR","text","htmlDecode","input","doc","DOMParser","parseFromString","documentElement","textContent","getTagName","el","tagName","toLowerCase","lessThanHandling","arrowSplit","split","reduce","st","part","concat","serialization","deserialize","hasMathChild","BLOCK_TAGS","childNodes","firstChild","dataset","newHtml","innerHTML","outerHTML","htmlToUse","mmlToLatex","_unWrapMath","unWrapMath","unwrapped","wrapType","jsx","wrapper","nodeType","hasLatex","hasAttribute","_unWrapMath2","serialize","_ref4","decoded","res","renderMath","wrapMath","newLatex","strippedL","replace","strippedNewL","console","warn","_ref5"],"sources":["../../../src/plugins/math/index.jsx"],"sourcesContent":["import React from 'react';\nimport { Editor, Inline, Transforms } from 'slate';\nimport { ReactEditor } from 'slate-react';\nimport { jsx } from 'slate-hyperscript';\nimport Functions from '@material-ui/icons/Functions';\nimport { MathPreview, MathToolbar } from '@pie-lib/math-toolbar';\nimport { wrapMath, unWrapMath, mmlToLatex, renderMath } from '@pie-lib/math-rendering';\nimport debug from 'debug';\nimport PropTypes from 'prop-types';\nimport isEqual from 'lodash/isEqual';\n\nimport { BLOCK_TAGS } from '../../new-serialization';\nconst log = debug('@pie-lib:editable-html:plugins:math');\n\nconst TEXT_NODE = 3;\n\nfunction generateAdditionalKeys(keyData = []) {\n return keyData.map((key) => ({\n name: key,\n latex: key,\n write: key,\n label: key,\n }));\n}\n\n// eslint-disable-next-line react/display-name\nexport const CustomToolbarComp = React.memo(\n (props) => {\n const { node, nodePath, onFocus, onBlur, onClick, editor } = props;\n const { pluginProps } = props || {};\n const { math } = pluginProps || {};\n const { keypadMode, customKeys, controlledKeypadMode = true } = math || {};\n\n const onDone = (latex) => {\n const update = {\n ...node.data,\n latex\n };\n editor.apply({\n type: 'set_node',\n path: nodePath,\n properties: {\n data: node.data\n },\n newProperties: { data: update }\n });\n ReactEditor.focus(editor);\n Transforms.move(editor, { distance: 1, unit: 'offset' });\n };\n\n const latex = node.data.latex;\n\n return (\n <MathToolbar\n autoFocus\n additionalKeys={generateAdditionalKeys(customKeys)}\n latex={latex}\n onDone={onDone}\n onBlur={onBlur}\n onFocus={onFocus}\n onClick={onClick}\n keypadMode={keypadMode}\n controlledKeypadMode={controlledKeypadMode}\n />\n );\n },\n (prev, next) => {\n const { node, pluginProps: { math: { keypadMode, controlledKeypadMode } = {} } = {} } = prev;\n const {\n node: nodeNext,\n pluginProps: { math: { keypadMode: keypadModeNext, controlledKeypadMode: controlledKeypadModeNext } = {} } = {},\n } = next;\n const keypadModeChanged = keypadMode !== keypadModeNext;\n const controlledKeypadModeChanged = controlledKeypadMode !== controlledKeypadModeNext;\n\n const equal = isEqual(node, nodeNext);\n return equal && !keypadModeChanged && !controlledKeypadModeChanged;\n },\n);\n\nCustomToolbarComp.propTypes = {\n editor: PropTypes.object,\n node: PropTypes.shape({\n type: PropTypes.string,\n children: PropTypes.array,\n data: PropTypes.object\n }).isRequired,\n value: PropTypes.arrayOf(\n PropTypes.shape({\n type: PropTypes.string,\n children: PropTypes.array,\n data: PropTypes.object\n })\n ).isRequired,\n onToolbarDone: PropTypes.func,\n onFocus: PropTypes.func,\n onClick: PropTypes.func,\n onBlur: PropTypes.func,\n};\n\nconst mathTypes = ['math', 'mathml'];\n\nexport default function MathPlugin(opts) {\n MathPlugin.mathMlOptions = {\n mmlOutput: opts.mmlOutput,\n mmlEditing: opts.mmlEditing,\n };\n\n return {\n name: 'math',\n toolbar: {\n icon: <Functions />,\n onClick: editor => {\n log('[insertMath]');\n const math = inlineMath();\n\n editor.insertNode(math);\n },\n /**\n * Return a react component function\n * @param node {Slate.Node}\n * @param value {Slate.Value}\n * @param onDone {(change?: Slate.Change, finishEditing :boolea) => void} - a function to call once the toolbar\n * has made any changes, call with the node.key and a data object.\n */\n CustomToolbarComp,\n },\n rules: editor => {\n const { isVoid, isInline } = editor;\n\n editor.isVoid = element => {\n return mathTypes.includes(element.type) ? true : isVoid(element);\n };\n\n editor.isInline = element => {\n return mathTypes.includes(element.type) ? true : isInline(element);\n };\n\n return editor;\n },\n supports: node => mathTypes.includes(node.type),\n schema: {\n document: { match: [{ type: 'math' }] },\n },\n\n pluginStyles: (node, parentNode, p) => {\n if (p) {\n return {\n position: 'absolute',\n top: 'initial',\n };\n }\n },\n\n renderNode: (props) => {\n if (props.node.type === 'math') {\n log('[renderNode]: data:', props.node.data);\n return <MathPreview {...props} />;\n }\n\n /**\n * Here for rendering mathml content\n */\n if (props.node.type === 'mathml') {\n const { data: { html } } = props.node;\n\n return (\n <span>\n <span {...props.attributes} contentEditable={false} dangerouslySetInnerHTML={{ __html: html }} />\n {props.children}\n </span>\n );\n }\n },\n };\n}\n\nMathPlugin.ROUND_BRACKETS = 'round_brackets';\nMathPlugin.SQUARE_BRACKETS = 'square_brackets';\nMathPlugin.DOLLAR = 'dollar';\nMathPlugin.DOUBLE_DOLLAR = 'double_dollar';\nMathPlugin.mathMlOptions = {};\n\nMathPlugin.propTypes = {\n attributes: PropTypes.object,\n node: PropTypes.node,\n};\n\nexport const inlineMath = () => ({\n type: 'math',\n data: {\n latex: '',\n },\n children: [{ text: '' }],\n});\n\nconst htmlDecode = (input) => {\n const doc = new DOMParser().parseFromString(input, 'text/html');\n\n return doc.documentElement.textContent;\n};\n\nconst getTagName = (el) => {\n return ((el && el.tagName) || '').toLowerCase();\n};\n\n/**\n * Makes sure that strings that contain stuff like:\n * x<y are not transformed into x by the DOMParser because it thinks\n * that <y is the start of a dom element tag\n * @param input\n * @returns {*}\n */\nconst lessThanHandling = (input) => {\n const arrowSplit = input.split('<');\n\n // if we don't have at least 2 characters there's no point in checking\n if (input.length > 2) {\n return arrowSplit.reduce((st, part) => {\n /*\n We check if this element resulted is:\n div - continuation of a beginning of a HTML element\n /div - closing of a HTML tag\n br/> - beginning and closing of a html TAG\n */\n if (part.match(/<[a-zA-Z/][\\s\\S]*>/gi)) {\n return `${st}${st ? '<' : ''}${part}`;\n }\n\n return `${st}${st ? '&lt;' : ''}${part}`;\n }, '');\n }\n\n return input;\n};\n\nexport const serialization = {\n deserialize(el, children) {\n const tagName = getTagName(el);\n /**\n * This is used for when there's a wrapper over the mathml element.\n * Because of this slate rule: \"Only allow block nodes or inline and text nodes in blocks.\"\n * The element that contains only the mathml is removed (along with the math) because it has\n * an inline child and the block is of type block\n * This is for legacy content only since our math rendering is valid for the core slate rules\n */\n const hasMathChild = BLOCK_TAGS[tagName] && el.childNodes.length === 1 && getTagName(el.firstChild) === 'math';\n log('[deserialize] name: ', tagName);\n\n /**\n * This is here in order to be able to render mathml content\n */\n if (tagName === 'math' || (el.dataset && el.dataset.type === 'mathml') || hasMathChild) {\n const newHtml = hasMathChild ? el.innerHTML : el.outerHTML;\n\n if (MathPlugin.mathMlOptions.mmlEditing) {\n const htmlToUse = mmlToLatex(newHtml);\n const latex = htmlDecode(htmlToUse);\n const { unwrapped, wrapType } = unWrapMath(latex);\n\n return jsx('element', {\n type: 'math',\n data: {\n latex: unwrapped,\n wrapper: wrapType,\n },\n });\n }\n\n return jsx('element', {\n type: 'mathml',\n data: {\n html: newHtml,\n },\n });\n }\n\n if (el.nodeType === TEXT_NODE) {\n return;\n }\n\n if (tagName !== 'span') {\n return;\n }\n\n const hasLatex = el.hasAttribute('data-latex') || el.hasAttribute('latex');\n\n if (hasLatex) {\n const latex = htmlDecode(el.innerHTML);\n const { unwrapped, wrapType } = unWrapMath(latex);\n log('[deserialize]: noBrackets: ', unwrapped, wrapType);\n\n return jsx('element', {\n type: 'math',\n data: {\n latex: unwrapped,\n wrapper: wrapType,\n },\n });\n }\n },\n serialize(object) {\n if (object.type === 'math') {\n const { latex, wrapper } = object.data || {};\n log('[serialize] latex: ', latex);\n const decoded = htmlDecode(lessThanHandling(latex));\n\n if (MathPlugin.mathMlOptions.mmlOutput) {\n const res = renderMath(`<span data-latex=\"\" data-raw=\"${decoded}\">${wrapMath(decoded, wrapper)}</span>`);\n const newLatex = mmlToLatex(res);\n\n // we need to remove all the spaces from the latex to be able to compare it\n const strippedL = latex.replace(/\\s/g, '');\n const strippedNewL = newLatex.replace(/\\s/g, '');\n\n // we check if the latex keeps his form after being converted to mathml and back to latex\n // if it does we can safely convert it to mathml\n if (isEqual(strippedL, strippedNewL)) {\n return <span data-type=\"mathml\" dangerouslySetInnerHTML={{ __html: res }} />;\n } else {\n // if it doesn't we keep the latex version\n console.log('This latex can not be safely converted to mathml:', latex, 'so we will keep the latex version!!!');\n console.warn('This latex can not be safely converted to mathml:', latex, 'so we will keep the latex version!!!');\n }\n }\n\n return (\n <span data-latex=\"\" data-raw={decoded}>\n {wrapMath(decoded, wrapper)}\n </span>\n );\n }\n\n /**\n * Here for rendering mathml content\n */\n if (object.type === 'mathml') {\n const { html } = object.data || {};\n\n return <span data-type=\"mathml\" dangerouslySetInnerHTML={{ __html: html }} />;\n }\n },\n};\n"],"mappings":"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"}