@pie-lib/editable-html 11.18.6-esmbeta.0 → 11.19.0-mui-update.0

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 (136) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/lib/block-tags.js +2 -3
  3. package/lib/block-tags.js.map +1 -1
  4. package/lib/constants.js +3 -6
  5. package/lib/constants.js.map +1 -1
  6. package/lib/editor.js +302 -450
  7. package/lib/editor.js.map +1 -1
  8. package/lib/index.js +19 -77
  9. package/lib/index.js.map +1 -1
  10. package/lib/parse-html.js +7 -7
  11. package/lib/parse-html.js.map +1 -1
  12. package/lib/plugins/characters/custom-popper.js +24 -44
  13. package/lib/plugins/characters/custom-popper.js.map +1 -1
  14. package/lib/plugins/characters/index.js +9 -60
  15. package/lib/plugins/characters/index.js.map +1 -1
  16. package/lib/plugins/characters/utils.js +3 -6
  17. package/lib/plugins/characters/utils.js.map +1 -1
  18. package/lib/plugins/css/icons/index.js +13 -25
  19. package/lib/plugins/css/icons/index.js.map +1 -1
  20. package/lib/plugins/css/index.js +22 -88
  21. package/lib/plugins/css/index.js.map +1 -1
  22. package/lib/plugins/customPlugin/index.js +10 -26
  23. package/lib/plugins/customPlugin/index.js.map +1 -1
  24. package/lib/plugins/html/icons/index.js +14 -26
  25. package/lib/plugins/html/icons/index.js.map +1 -1
  26. package/lib/plugins/html/index.js +4 -13
  27. package/lib/plugins/html/index.js.map +1 -1
  28. package/lib/plugins/image/alt-dialog.js +20 -49
  29. package/lib/plugins/image/alt-dialog.js.map +1 -1
  30. package/lib/plugins/image/component.js +119 -190
  31. package/lib/plugins/image/component.js.map +1 -1
  32. package/lib/plugins/image/image-toolbar.js +44 -86
  33. package/lib/plugins/image/image-toolbar.js.map +1 -1
  34. package/lib/plugins/image/index.js +6 -46
  35. package/lib/plugins/image/index.js.map +1 -1
  36. package/lib/plugins/image/insert-image-handler.js +10 -31
  37. package/lib/plugins/image/insert-image-handler.js.map +1 -1
  38. package/lib/plugins/index.js +44 -106
  39. package/lib/plugins/index.js.map +1 -1
  40. package/lib/plugins/list/index.js +27 -73
  41. package/lib/plugins/list/index.js.map +1 -1
  42. package/lib/plugins/math/index.js +64 -116
  43. package/lib/plugins/math/index.js.map +1 -1
  44. package/lib/plugins/media/index.js +23 -81
  45. package/lib/plugins/media/index.js.map +1 -1
  46. package/lib/plugins/media/media-dialog.js +192 -307
  47. package/lib/plugins/media/media-dialog.js.map +1 -1
  48. package/lib/plugins/media/media-toolbar.js +40 -65
  49. package/lib/plugins/media/media-toolbar.js.map +1 -1
  50. package/lib/plugins/media/media-wrapper.js +20 -49
  51. package/lib/plugins/media/media-wrapper.js.map +1 -1
  52. package/lib/plugins/rendering/index.js +5 -15
  53. package/lib/plugins/rendering/index.js.map +1 -1
  54. package/lib/plugins/respArea/drag-in-the-blank/choice.js +175 -249
  55. package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -1
  56. package/lib/plugins/respArea/drag-in-the-blank/index.js +39 -29
  57. package/lib/plugins/respArea/drag-in-the-blank/index.js.map +1 -1
  58. package/lib/plugins/respArea/explicit-constructed-response/index.js +3 -10
  59. package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -1
  60. package/lib/plugins/respArea/icons/index.js +22 -45
  61. package/lib/plugins/respArea/icons/index.js.map +1 -1
  62. package/lib/plugins/respArea/index.js +5 -59
  63. package/lib/plugins/respArea/index.js.map +1 -1
  64. package/lib/plugins/respArea/inline-dropdown/index.js +2 -10
  65. package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -1
  66. package/lib/plugins/respArea/math-templated/index.js +92 -109
  67. package/lib/plugins/respArea/math-templated/index.js.map +1 -1
  68. package/lib/plugins/respArea/utils.js +8 -40
  69. package/lib/plugins/respArea/utils.js.map +1 -1
  70. package/lib/plugins/table/CustomTablePlugin.js +24 -41
  71. package/lib/plugins/table/CustomTablePlugin.js.map +1 -1
  72. package/lib/plugins/table/icons/index.js +19 -35
  73. package/lib/plugins/table/icons/index.js.map +1 -1
  74. package/lib/plugins/table/index.js +41 -118
  75. package/lib/plugins/table/index.js.map +1 -1
  76. package/lib/plugins/table/table-toolbar.js +37 -87
  77. package/lib/plugins/table/table-toolbar.js.map +1 -1
  78. package/lib/plugins/textAlign/icons/index.js +18 -64
  79. package/lib/plugins/textAlign/icons/index.js.map +1 -1
  80. package/lib/plugins/textAlign/index.js +1 -6
  81. package/lib/plugins/textAlign/index.js.map +1 -1
  82. package/lib/plugins/toolbar/default-toolbar.js +30 -79
  83. package/lib/plugins/toolbar/default-toolbar.js.map +1 -1
  84. package/lib/plugins/toolbar/done-button.js +16 -34
  85. package/lib/plugins/toolbar/done-button.js.map +1 -1
  86. package/lib/plugins/toolbar/editor-and-toolbar.js +174 -201
  87. package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -1
  88. package/lib/plugins/toolbar/index.js +0 -5
  89. package/lib/plugins/toolbar/index.js.map +1 -1
  90. package/lib/plugins/toolbar/toolbar-buttons.js +57 -107
  91. package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -1
  92. package/lib/plugins/toolbar/toolbar.js +95 -161
  93. package/lib/plugins/toolbar/toolbar.js.map +1 -1
  94. package/lib/plugins/utils.js +5 -25
  95. package/lib/plugins/utils.js.map +1 -1
  96. package/lib/serialization.js +44 -150
  97. package/lib/serialization.js.map +1 -1
  98. package/lib/shared/alert-dialog.js +23 -42
  99. package/lib/theme.js +1 -2
  100. package/lib/theme.js.map +1 -1
  101. package/package.json +15 -21
  102. package/src/__tests__/utils.js +1 -1
  103. package/src/editor.jsx +110 -108
  104. package/src/plugins/characters/custom-popper.js +20 -25
  105. package/src/plugins/css/icons/index.jsx +11 -13
  106. package/src/plugins/css/index.jsx +3 -5
  107. package/src/plugins/html/icons/index.jsx +12 -14
  108. package/src/plugins/image/alt-dialog.jsx +9 -8
  109. package/src/plugins/image/component.jsx +67 -87
  110. package/src/plugins/image/image-toolbar.jsx +26 -26
  111. package/src/plugins/image/index.jsx +1 -1
  112. package/src/plugins/index.jsx +10 -10
  113. package/src/plugins/math/index.jsx +1 -1
  114. package/src/plugins/media/index.jsx +2 -2
  115. package/src/plugins/media/media-dialog.js +65 -76
  116. package/src/plugins/media/media-toolbar.jsx +32 -33
  117. package/src/plugins/media/media-wrapper.jsx +10 -13
  118. package/src/plugins/respArea/drag-in-the-blank/choice.jsx +193 -180
  119. package/src/plugins/respArea/drag-in-the-blank/index.jsx +58 -22
  120. package/src/plugins/respArea/icons/index.jsx +16 -16
  121. package/src/plugins/respArea/math-templated/index.jsx +88 -89
  122. package/src/plugins/respArea/utils.jsx +1 -1
  123. package/src/plugins/table/icons/index.jsx +14 -16
  124. package/src/plugins/table/index.jsx +27 -19
  125. package/src/plugins/table/table-toolbar.jsx +17 -19
  126. package/src/plugins/textAlign/icons/index.jsx +3 -3
  127. package/src/plugins/toolbar/__tests__/default-toolbar.test.jsx +1 -1
  128. package/src/plugins/toolbar/__tests__/toolbar.test.jsx +1 -1
  129. package/src/plugins/toolbar/default-toolbar.jsx +18 -21
  130. package/src/plugins/toolbar/done-button.jsx +16 -22
  131. package/src/plugins/toolbar/editor-and-toolbar.jsx +134 -157
  132. package/src/plugins/toolbar/toolbar-buttons.jsx +29 -46
  133. package/src/plugins/toolbar/toolbar.jsx +60 -78
  134. package/esm/index.js +0 -111560
  135. package/esm/index.js.map +0 -1
  136. package/esm/package.json +0 -1
@@ -1,45 +1,28 @@
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
- var _Functions = _interopRequireDefault(require("@material-ui/icons/Functions"));
17
-
12
+ var _Functions = _interopRequireDefault(require("@mui/icons-material/Functions"));
18
13
  var _slate = require("slate");
19
-
20
14
  var _mathToolbar = require("@pie-lib/math-toolbar");
21
-
22
15
  var _mathRendering = require("@pie-lib/math-rendering");
23
-
24
16
  var _react = _interopRequireDefault(require("react"));
25
-
26
17
  var _debug = _interopRequireDefault(require("debug"));
27
-
28
18
  var _slatePropTypes = _interopRequireDefault(require("slate-prop-types"));
29
-
30
19
  var _propTypes = _interopRequireDefault(require("prop-types"));
31
-
32
20
  var _blockTags = require("../../block-tags");
33
-
34
21
  var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
35
-
36
- 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; }
37
-
38
- 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; }
39
-
22
+ 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; }
23
+ 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; }
40
24
  var log = (0, _debug["default"])('@pie-lib:editable-html:plugins:math');
41
25
  var TEXT_NODE = 3;
42
-
43
26
  function generateAdditionalKeys() {
44
27
  var keyData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
45
28
  return keyData.map(function (key) {
@@ -50,33 +33,28 @@ function generateAdditionalKeys() {
50
33
  label: key
51
34
  };
52
35
  });
53
- } // eslint-disable-next-line react/display-name
54
-
36
+ }
55
37
 
56
- var CustomToolbarComp = /*#__PURE__*/_react["default"].memo(function (props) {
38
+ // eslint-disable-next-line react/display-name
39
+ var CustomToolbarComp = exports.CustomToolbarComp = /*#__PURE__*/_react["default"].memo(function (props) {
57
40
  var node = props.node,
58
- value = props.value,
59
- onFocus = props.onFocus,
60
- onBlur = props.onBlur,
61
- onClick = props.onClick;
62
-
41
+ value = props.value,
42
+ onFocus = props.onFocus,
43
+ onBlur = props.onBlur,
44
+ onClick = props.onClick;
63
45
  var _ref = props || {},
64
- pluginProps = _ref.pluginProps;
65
-
46
+ pluginProps = _ref.pluginProps;
66
47
  var _ref2 = pluginProps || {},
67
- math = _ref2.math;
68
-
48
+ math = _ref2.math;
69
49
  var _ref3 = math || {},
70
- keypadMode = _ref3.keypadMode,
71
- customKeys = _ref3.customKeys,
72
- _ref3$controlledKeypa = _ref3.controlledKeypadMode,
73
- controlledKeypadMode = _ref3$controlledKeypa === void 0 ? true : _ref3$controlledKeypa;
74
-
50
+ keypadMode = _ref3.keypadMode,
51
+ customKeys = _ref3.customKeys,
52
+ _ref3$controlledKeypa = _ref3.controlledKeypadMode,
53
+ controlledKeypadMode = _ref3$controlledKeypa === void 0 ? true : _ref3$controlledKeypa;
75
54
  var onDone = function onDone(latex) {
76
55
  var update = _objectSpread(_objectSpread({}, node.data.toObject()), {}, {
77
56
  latex: latex
78
57
  });
79
-
80
58
  var change = value.change().setNodeByKey(node.key, {
81
59
  data: update
82
60
  });
@@ -84,19 +62,16 @@ var CustomToolbarComp = /*#__PURE__*/_react["default"].memo(function (props) {
84
62
  change.moveFocusTo(nextText.key, 0).moveAnchorTo(nextText.key, 0);
85
63
  props.onToolbarDone(change, false);
86
64
  };
87
-
88
65
  var onChange = function onChange(latex) {
89
66
  var update = _objectSpread(_objectSpread({}, node.data.toObject()), {}, {
90
67
  latex: latex
91
68
  });
92
-
93
69
  var change = value.change().setNodeByKey(node.key, {
94
70
  data: update
95
71
  });
96
72
  log('call onToolbarChange:', change);
97
73
  props.onDataChange(node.key, update);
98
74
  };
99
-
100
75
  var latex = node.data.get('latex');
101
76
  return /*#__PURE__*/_react["default"].createElement(_mathToolbar.MathToolbar, {
102
77
  autoFocus: true,
@@ -112,26 +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 = node.equals(nodeNext);
131
106
  return equal && !keypadModeChanged && !controlledKeypadModeChanged;
132
107
  });
133
-
134
- exports.CustomToolbarComp = CustomToolbarComp;
135
108
  CustomToolbarComp.propTypes = {
136
109
  node: _slatePropTypes["default"].node.isRequired,
137
110
  value: _slatePropTypes["default"].value,
@@ -141,7 +114,6 @@ CustomToolbarComp.propTypes = {
141
114
  onClick: _propTypes["default"].func,
142
115
  onBlur: _propTypes["default"].func
143
116
  };
144
-
145
117
  function MathPlugin(opts) {
146
118
  MathPlugin.mathMlOptions = {
147
119
  mmlOutput: opts.mmlOutput,
@@ -161,7 +133,6 @@ function MathPlugin(opts) {
161
133
  supports: function supports(node) {
162
134
  return node && node.object === 'inline' && node.type === 'math';
163
135
  },
164
-
165
136
  /**
166
137
  * Return a react component function
167
138
  * @param node {Slate.Node}
@@ -191,11 +162,10 @@ function MathPlugin(opts) {
191
162
  log('[renderNode]: data:', props.node.data);
192
163
  return /*#__PURE__*/_react["default"].createElement(_mathToolbar.MathPreview, props);
193
164
  }
165
+
194
166
  /**
195
167
  * Here for rendering mathml content
196
168
  */
197
-
198
-
199
169
  if (props.node.type === 'mathml') {
200
170
  var html = props.node.data.get('html');
201
171
  return /*#__PURE__*/_react["default"].createElement("span", (0, _extends2["default"])({}, props.attributes, {
@@ -207,7 +177,6 @@ function MathPlugin(opts) {
207
177
  }
208
178
  };
209
179
  }
210
-
211
180
  MathPlugin.ROUND_BRACKETS = 'round_brackets';
212
181
  MathPlugin.SQUARE_BRACKETS = 'square_brackets';
213
182
  MathPlugin.DOLLAR = 'dollar';
@@ -217,8 +186,7 @@ MathPlugin.propTypes = {
217
186
  attributes: _propTypes["default"].object,
218
187
  node: _slatePropTypes["default"].node
219
188
  };
220
-
221
- var inlineMath = function inlineMath() {
189
+ var inlineMath = exports.inlineMath = function inlineMath() {
222
190
  return _slate.Inline.create({
223
191
  object: 'inline',
224
192
  type: 'math',
@@ -228,17 +196,14 @@ var inlineMath = function inlineMath() {
228
196
  }
229
197
  });
230
198
  };
231
-
232
- exports.inlineMath = inlineMath;
233
-
234
199
  var htmlDecode = function htmlDecode(input) {
235
200
  var doc = new DOMParser().parseFromString(input, 'text/html');
236
201
  return doc.documentElement.textContent;
237
202
  };
238
-
239
203
  var getTagName = function getTagName(el) {
240
204
  return (el && el.tagName || '').toLowerCase();
241
205
  };
206
+
242
207
  /**
243
208
  * Makes sure that strings that contain stuff like:
244
209
  * x<y are not transformed into x by the DOMParser because it thinks
@@ -246,8 +211,6 @@ var getTagName = function getTagName(el) {
246
211
  * @param input
247
212
  * @returns {*}
248
213
  */
249
-
250
-
251
214
  var arrowHandlingCase = function arrowHandlingCase(input) {
252
215
  /*
253
216
  If we have a < character followed by a letter
@@ -255,47 +218,50 @@ var arrowHandlingCase = function arrowHandlingCase(input) {
255
218
  */
256
219
  return input.replace(/<([a-zA-Z]*)/g, '&lt;$1');
257
220
  };
258
-
259
221
  function replaceLeftRight(latexInput) {
260
222
  // for some reason, mmlToLatex parses () incorrectly - or at least in a way that our interpreter can not use them
261
223
  // Replace '\\left.' and '\\right.' with an empty string
262
224
  return latexInput.replace(/\\left\.\s*|\\right\.\s*/g, '');
263
225
  }
264
-
265
226
  var convertLatexToMathMl = function convertLatexToMathMl(_ref4) {
266
227
  var latex = _ref4.latex,
267
- decoded = _ref4.decoded,
268
- wrapper = _ref4.wrapper;
269
-
228
+ decoded = _ref4.decoded,
229
+ wrapper = _ref4.wrapper;
270
230
  var removeEmptyMos = function removeEmptyMos(mmlFromLatex) {
271
231
  // Regular expression to match <mo>&#x2061;</mo> and <mo ...>&#x2061;</mo>, which get added when using log with base
272
232
  // not sure why they get added, but they add an extra space which is not needed
273
- var regex = /<mo(?: [^>]*)?>&#x2061;<\/mo>/g; // Replace all occurrences of the matched patterns
233
+ var regex = /<mo(?: [^>]*)?>&#x2061;<\/mo>/g;
274
234
 
235
+ // Replace all occurrences of the matched patterns
275
236
  return mmlFromLatex.replace(regex, '');
276
237
  };
277
-
278
238
  var handled = arrowHandlingCase(decoded);
279
- var latexToConvert = "<span data-latex=\"\" data-raw=\"".concat(handled, "\">").concat((0, _mathRendering.wrapMath)(handled, wrapper), "</span>"); // use math rendering (MathJax) to convert latex to mathMl
239
+ var latexToConvert = "<span data-latex=\"\" data-raw=\"".concat(handled, "\">").concat((0, _mathRendering.wrapMath)(handled, wrapper), "</span>");
280
240
 
241
+ // use math rendering (MathJax) to convert latex to mathMl
281
242
  var mathMlFromLatex = (0, _mathRendering.renderMath)(latexToConvert, {
282
243
  skipWaitForMathRenderingLib: true
283
- }); // if renderMath returned the exact same string that we sent, it just means that the conversion could not be done
244
+ });
284
245
 
246
+ // if renderMath returned the exact same string that we sent, it just means that the conversion could not be done
285
247
  var conversionDidNotWork = (0, _isEqual["default"])(latexToConvert, mathMlFromLatex);
286
- mathMlFromLatex = removeEmptyMos(mathMlFromLatex); // we convert resulted mathml to latex to check if the resulted mathMl can be converted back to latex if user wants to edit it later
248
+ mathMlFromLatex = removeEmptyMos(mathMlFromLatex);
287
249
 
288
- var latexFromMathMl = mathMlFromLatex ? (0, _mathRendering.mmlToLatex)(mathMlFromLatex) : ''; // we need to remove all the spaces from the latex to be able to compare it
250
+ // we convert resulted mathml to latex to check if the resulted mathMl can be converted back to latex if user wants to edit it later
251
+ var latexFromMathMl = mathMlFromLatex ? (0, _mathRendering.mmlToLatex)(mathMlFromLatex) : '';
289
252
 
253
+ // we need to remove all the spaces from the latex to be able to compare it
290
254
  var strippedL = latex.replace(/\s/g, '');
291
- var strippedNewL = latexFromMathMl.replace(/\s/g, ''); // we check if the latex keeps his form after being converted to mathml and back to latex
292
- // if it does, we can safely convert it to mathml
255
+ var strippedNewL = latexFromMathMl.replace(/\s/g, '');
293
256
 
257
+ // we check if the latex keeps his form after being converted to mathml and back to latex
258
+ // if it does, we can safely convert it to mathml
294
259
  if (!(0, _isEqual["default"])(strippedL, strippedNewL)) {
295
- var correctedLatex = replaceLeftRight(latexFromMathMl); // As George requested in PD-3167, I will set the new mathML anyway, and also log differences
260
+ var correctedLatex = replaceLeftRight(latexFromMathMl);
261
+
262
+ // As George requested in PD-3167, I will set the new mathML anyway, and also log differences
296
263
  // if it doesn't, we keep the latex version
297
264
  // eslint-disable-next-line no-console
298
-
299
265
  console.log('This latex can not be safely converted to mathml so we will keep the latex version!!!', {
300
266
  initialLatex: latex,
301
267
  newLatex: latexFromMathMl,
@@ -304,22 +270,20 @@ var convertLatexToMathMl = function convertLatexToMathMl(_ref4) {
304
270
  conversionDidNotWork: conversionDidNotWork
305
271
  });
306
272
  }
307
-
308
273
  return {
309
274
  mathMlFromLatex: mathMlFromLatex,
310
275
  conversionDidNotWork: conversionDidNotWork
311
276
  };
312
277
  };
313
-
314
278
  var convertMathMlToLatex = function convertMathMlToLatex(mathMl) {
315
279
  var htmlWithRemovedSpaces = mathMl.replaceAll('&nbsp;', ' ');
316
280
  var htmlToUse = (0, _mathRendering.mmlToLatex)(htmlWithRemovedSpaces);
317
- var latex = htmlDecode(htmlToUse); // todo fix this in mathml-to-latex
281
+ var latex = htmlDecode(htmlToUse);
318
282
 
283
+ // todo fix this in mathml-to-latex
319
284
  return replaceLeftRight(latex);
320
285
  };
321
-
322
- var serialization = {
286
+ var serialization = exports.serialization = {
323
287
  deserialize: function deserialize(el) {
324
288
  var tagName = getTagName(el);
325
289
  /**
@@ -329,21 +293,18 @@ var serialization = {
329
293
  * an inline child and the block is of type block
330
294
  * This is for legacy content only since our math rendering is valid for the core slate rules
331
295
  */
332
-
333
296
  var hasMathChild = _blockTags.BLOCK_TAGS[tagName] && el.childNodes.length === 1 && getTagName(el.firstChild) === 'math';
334
297
  log('[deserialize] name: ', tagName);
298
+
335
299
  /**
336
300
  * This is here in order to be able to render mathml content
337
301
  */
338
-
339
302
  if (tagName === 'math' || el.dataset && el.dataset.type === 'mathml' || hasMathChild) {
340
303
  var mathMl = hasMathChild ? el.innerHTML : el.outerHTML;
341
-
342
304
  if (MathPlugin.mathMlOptions.mmlEditing) {
343
305
  var _unWrapMath = (0, _mathRendering.unWrapMath)(convertMathMlToLatex(mathMl)),
344
- unwrapped = _unWrapMath.unwrapped,
345
- wrapType = _unWrapMath.wrapType;
346
-
306
+ unwrapped = _unWrapMath.unwrapped,
307
+ wrapType = _unWrapMath.wrapType;
347
308
  return {
348
309
  object: 'inline',
349
310
  type: 'math',
@@ -355,7 +316,6 @@ var serialization = {
355
316
  }
356
317
  };
357
318
  }
358
-
359
319
  return {
360
320
  object: 'inline',
361
321
  isVoid: true,
@@ -365,24 +325,18 @@ var serialization = {
365
325
  }
366
326
  };
367
327
  }
368
-
369
328
  if (el.nodeType === TEXT_NODE) {
370
329
  return;
371
330
  }
372
-
373
331
  if (tagName !== 'span') {
374
332
  return;
375
333
  }
376
-
377
334
  var hasLatex = el.hasAttribute('data-latex') || el.hasAttribute('latex');
378
-
379
335
  if (hasLatex) {
380
336
  var latex = htmlDecode(el.innerHTML);
381
-
382
337
  var _unWrapMath2 = (0, _mathRendering.unWrapMath)(latex),
383
- _unwrapped = _unWrapMath2.unwrapped,
384
- _wrapType = _unWrapMath2.wrapType;
385
-
338
+ _unwrapped = _unWrapMath2.unwrapped,
339
+ _wrapType = _unWrapMath2.wrapType;
386
340
  log('[deserialize]: noBrackets: ', _unwrapped, _wrapType);
387
341
  return {
388
342
  object: 'inline',
@@ -402,16 +356,14 @@ var serialization = {
402
356
  var wrapper = object.data.get('wrapper');
403
357
  var decoded = htmlDecode(arrowHandlingCase(latex));
404
358
  log('[serialize] latex: ', latex);
405
-
406
359
  if (MathPlugin.mathMlOptions.mmlOutput) {
407
360
  var _convertLatexToMathMl = convertLatexToMathMl({
408
- latex: latex,
409
- decoded: decoded,
410
- wrapper: wrapper
411
- }),
412
- mathMlFromLatex = _convertLatexToMathMl.mathMlFromLatex,
413
- conversionDidNotWork = _convertLatexToMathMl.conversionDidNotWork;
414
-
361
+ latex: latex,
362
+ decoded: decoded,
363
+ wrapper: wrapper
364
+ }),
365
+ mathMlFromLatex = _convertLatexToMathMl.mathMlFromLatex,
366
+ conversionDidNotWork = _convertLatexToMathMl.conversionDidNotWork;
415
367
  if (conversionDidNotWork) {
416
368
  // this means we could not convert latex to mathMl, so just return the latex version,
417
369
  // same as we would do if mmlOutput would not be enabled
@@ -420,7 +372,6 @@ var serialization = {
420
372
  "data-raw": decoded
421
373
  }, (0, _mathRendering.wrapMath)(decoded, wrapper));
422
374
  }
423
-
424
375
  return /*#__PURE__*/_react["default"].createElement("span", {
425
376
  "data-type": "mathml",
426
377
  dangerouslySetInnerHTML: {
@@ -428,17 +379,15 @@ var serialization = {
428
379
  }
429
380
  });
430
381
  }
431
-
432
382
  return /*#__PURE__*/_react["default"].createElement("span", {
433
383
  "data-latex": "",
434
384
  "data-raw": decoded
435
385
  }, (0, _mathRendering.wrapMath)(decoded, wrapper));
436
386
  }
387
+
437
388
  /**
438
389
  * Here for rendering mathml content
439
390
  */
440
-
441
-
442
391
  if (object.type === 'mathml') {
443
392
  var html = object.data.get('html');
444
393
  return /*#__PURE__*/_react["default"].createElement("span", {
@@ -450,5 +399,4 @@ var serialization = {
450
399
  }
451
400
  }
452
401
  };
453
- exports.serialization = serialization;
454
402
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/plugins/math/index.jsx"],"names":["log","TEXT_NODE","generateAdditionalKeys","keyData","map","key","name","latex","write","label","CustomToolbarComp","React","memo","props","node","value","onFocus","onBlur","onClick","pluginProps","math","keypadMode","customKeys","controlledKeypadMode","onDone","update","data","toObject","change","setNodeByKey","nextText","document","getNextText","moveFocusTo","moveAnchorTo","onToolbarDone","onChange","onDataChange","get","prev","next","nodeNext","keypadModeNext","controlledKeypadModeNext","keypadModeChanged","controlledKeypadModeChanged","equal","equals","propTypes","SlatePropTypes","isRequired","PropTypes","func","MathPlugin","opts","mathMlOptions","mmlOutput","mmlEditing","toolbar","ariaLabel","icon","inlineMath","insertInline","supports","object","type","schema","match","pluginStyles","parentNode","p","position","top","renderNode","html","attributes","__html","ROUND_BRACKETS","SQUARE_BRACKETS","DOLLAR","DOUBLE_DOLLAR","Inline","create","isVoid","htmlDecode","input","doc","DOMParser","parseFromString","documentElement","textContent","getTagName","el","tagName","toLowerCase","arrowHandlingCase","replace","replaceLeftRight","latexInput","convertLatexToMathMl","decoded","wrapper","removeEmptyMos","mmlFromLatex","regex","handled","latexToConvert","mathMlFromLatex","skipWaitForMathRenderingLib","conversionDidNotWork","latexFromMathMl","strippedL","strippedNewL","correctedLatex","console","initialLatex","newLatex","mathML","convertMathMlToLatex","mathMl","htmlWithRemovedSpaces","replaceAll","htmlToUse","serialization","deserialize","hasMathChild","BLOCK_TAGS","childNodes","length","firstChild","dataset","innerHTML","outerHTML","unwrapped","wrapType","nodes","nodeType","hasLatex","hasAttribute","serialize"],"mappings":"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","sourcesContent":["import Functions from '@material-ui/icons/Functions';\nimport { Inline } from 'slate';\nimport { MathPreview, MathToolbar } from '@pie-lib/math-toolbar';\nimport { wrapMath, unWrapMath, mmlToLatex, renderMath } from '@pie-lib/math-rendering';\nimport React from 'react';\nimport debug from 'debug';\nimport SlatePropTypes from 'slate-prop-types';\nimport PropTypes from 'prop-types';\n\nimport { BLOCK_TAGS } from '../../block-tags';\nimport isEqual from 'lodash/isEqual';\n\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, value, onFocus, onBlur, onClick } = 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.toObject(),\n latex,\n };\n\n const change = value.change().setNodeByKey(node.key, { data: update });\n\n const nextText = value.document.getNextText(node.key);\n\n change.moveFocusTo(nextText.key, 0).moveAnchorTo(nextText.key, 0);\n\n props.onToolbarDone(change, false);\n };\n\n const onChange = (latex) => {\n const update = {\n ...node.data.toObject(),\n latex,\n };\n const change = value.change().setNodeByKey(node.key, { data: update });\n log('call onToolbarChange:', change);\n props.onDataChange(node.key, update);\n };\n\n const latex = node.data.get('latex');\n\n return (\n <MathToolbar\n autoFocus\n additionalKeys={generateAdditionalKeys(customKeys)}\n latex={latex}\n onChange={onChange}\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 = node.equals(nodeNext);\n return equal && !keypadModeChanged && !controlledKeypadModeChanged;\n },\n);\n\nCustomToolbarComp.propTypes = {\n node: SlatePropTypes.node.isRequired,\n value: SlatePropTypes.value,\n onToolbarDone: PropTypes.func,\n onDataChange: PropTypes.func,\n onFocus: PropTypes.func,\n onClick: PropTypes.func,\n onBlur: PropTypes.func,\n};\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 ariaLabel: 'Math Toolbar',\n icon: <Functions />,\n onClick: (value, onChange) => {\n log('[insertMath]');\n const math = inlineMath();\n const change = value.change().insertInline(math);\n onChange(change);\n },\n supports: (node) => node && node.object === 'inline' && node.type === 'math',\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 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';\nMathPlugin.mathMlOptions = {};\n\nMathPlugin.propTypes = {\n attributes: PropTypes.object,\n node: SlatePropTypes.node,\n};\n\nexport const inlineMath = () =>\n Inline.create({\n object: 'inline',\n type: 'math',\n isVoid: true,\n data: {\n latex: '',\n },\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 arrowHandlingCase = (input) => {\n /*\n If we have a < character followed by a letter\n we make sure to replace it with a &lt; sign instead\n */\n return input.replace(/<([a-zA-Z]*)/g, '&lt;$1');\n};\n\nfunction replaceLeftRight(latexInput) {\n // for some reason, mmlToLatex parses () incorrectly - or at least in a way that our interpreter can not use them\n // Replace '\\\\left.' and '\\\\right.' with an empty string\n return latexInput.replace(/\\\\left\\.\\s*|\\\\right\\.\\s*/g, '');\n}\n\nconst convertLatexToMathMl = ({ latex, decoded, wrapper }) => {\n const removeEmptyMos = (mmlFromLatex) => {\n // Regular expression to match <mo>&#x2061;</mo> and <mo ...>&#x2061;</mo>, which get added when using log with base\n // not sure why they get added, but they add an extra space which is not needed\n const regex = /<mo(?: [^>]*)?>&#x2061;<\\/mo>/g;\n\n // Replace all occurrences of the matched patterns\n return mmlFromLatex.replace(regex, '');\n };\n const handled = arrowHandlingCase(decoded);\n\n const latexToConvert = `<span data-latex=\"\" data-raw=\"${handled}\">${wrapMath(handled, wrapper)}</span>`;\n\n // use math rendering (MathJax) to convert latex to mathMl\n let mathMlFromLatex = renderMath(latexToConvert, {\n skipWaitForMathRenderingLib: true,\n });\n\n // if renderMath returned the exact same string that we sent, it just means that the conversion could not be done\n const conversionDidNotWork = isEqual(latexToConvert, mathMlFromLatex);\n\n mathMlFromLatex = removeEmptyMos(mathMlFromLatex);\n\n // we convert resulted mathml to latex to check if the resulted mathMl can be converted back to latex if user wants to edit it later\n const latexFromMathMl = mathMlFromLatex ? mmlToLatex(mathMlFromLatex) : '';\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 = latexFromMathMl.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 const correctedLatex = replaceLeftRight(latexFromMathMl);\n\n // As George requested in PD-3167, I will set the new mathML anyway, and also log differences\n // if it doesn't, we keep the latex version\n // eslint-disable-next-line no-console\n console.log('This latex can not be safely converted to mathml so we will keep the latex version!!!', {\n initialLatex: latex,\n newLatex: latexFromMathMl,\n correctedLatex,\n mathML: mathMlFromLatex,\n conversionDidNotWork,\n });\n }\n\n return { mathMlFromLatex, conversionDidNotWork };\n};\n\nconst convertMathMlToLatex = (mathMl) => {\n const htmlWithRemovedSpaces = mathMl.replaceAll('&nbsp;', ' ');\n const htmlToUse = mmlToLatex(htmlWithRemovedSpaces);\n const latex = htmlDecode(htmlToUse);\n\n // todo fix this in mathml-to-latex\n return replaceLeftRight(latex);\n};\n\nexport const serialization = {\n deserialize(el) {\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 mathMl = hasMathChild ? el.innerHTML : el.outerHTML;\n\n if (MathPlugin.mathMlOptions.mmlEditing) {\n const { unwrapped, wrapType } = unWrapMath(convertMathMlToLatex(mathMl));\n\n return {\n object: 'inline',\n type: 'math',\n isVoid: true,\n nodes: [],\n data: {\n latex: unwrapped,\n wrapper: wrapType,\n },\n };\n }\n\n return {\n object: 'inline',\n isVoid: true,\n type: 'mathml',\n data: {\n html: mathMl,\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 return {\n object: 'inline',\n type: 'math',\n isVoid: true,\n nodes: [],\n data: {\n latex: unwrapped,\n wrapper: wrapType,\n },\n };\n }\n },\n serialize(object) {\n if (object.type === 'math') {\n const latex = object.data.get('latex');\n const wrapper = object.data.get('wrapper');\n const decoded = htmlDecode(arrowHandlingCase(latex));\n\n log('[serialize] latex: ', latex);\n\n if (MathPlugin.mathMlOptions.mmlOutput) {\n const { mathMlFromLatex, conversionDidNotWork } = convertLatexToMathMl({ latex, decoded, wrapper });\n\n if (conversionDidNotWork) {\n // this means we could not convert latex to mathMl, so just return the latex version,\n // same as we would do if mmlOutput would not be enabled\n return (\n <span data-latex=\"\" data-raw={decoded}>\n {wrapMath(decoded, wrapper)}\n </span>\n );\n }\n\n return <span data-type=\"mathml\" dangerouslySetInnerHTML={{ __html: mathMlFromLatex }} />;\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.get('html');\n\n return <span data-type=\"mathml\" dangerouslySetInnerHTML={{ __html: html }} />;\n }\n },\n};\n"],"file":"index.js"}
1
+ {"version":3,"file":"index.js","names":["_Functions","_interopRequireDefault","require","_slate","_mathToolbar","_mathRendering","_react","_debug","_slatePropTypes","_propTypes","_blockTags","_isEqual","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","log","debug","TEXT_NODE","generateAdditionalKeys","keyData","undefined","map","key","name","latex","write","label","CustomToolbarComp","exports","React","memo","props","node","value","onFocus","onBlur","onClick","_ref","pluginProps","_ref2","math","_ref3","keypadMode","customKeys","_ref3$controlledKeypa","controlledKeypadMode","onDone","update","data","toObject","change","setNodeByKey","nextText","document","getNextText","moveFocusTo","moveAnchorTo","onToolbarDone","onChange","onDataChange","get","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","equals","propTypes","SlatePropTypes","isRequired","PropTypes","func","MathPlugin","opts","mathMlOptions","mmlOutput","mmlEditing","toolbar","ariaLabel","icon","inlineMath","insertInline","supports","object","type","schema","match","pluginStyles","parentNode","p","position","top","renderNode","MathPreview","html","_extends2","attributes","dangerouslySetInnerHTML","__html","ROUND_BRACKETS","SQUARE_BRACKETS","DOLLAR","DOUBLE_DOLLAR","Inline","create","isVoid","htmlDecode","input","doc","DOMParser","parseFromString","documentElement","textContent","getTagName","el","tagName","toLowerCase","arrowHandlingCase","replace","replaceLeftRight","latexInput","convertLatexToMathMl","_ref4","decoded","wrapper","removeEmptyMos","mmlFromLatex","regex","handled","latexToConvert","concat","wrapMath","mathMlFromLatex","renderMath","skipWaitForMathRenderingLib","conversionDidNotWork","isEqual","latexFromMathMl","mmlToLatex","strippedL","strippedNewL","correctedLatex","console","initialLatex","newLatex","mathML","convertMathMlToLatex","mathMl","htmlWithRemovedSpaces","replaceAll","htmlToUse","serialization","deserialize","hasMathChild","BLOCK_TAGS","childNodes","firstChild","dataset","innerHTML","outerHTML","_unWrapMath","unWrapMath","unwrapped","wrapType","nodes","nodeType","hasLatex","hasAttribute","_unWrapMath2","serialize","_convertLatexToMathMl"],"sources":["../../../src/plugins/math/index.jsx"],"sourcesContent":["import Functions from '@mui/icons-material/Functions';\nimport { Inline } from 'slate';\nimport { MathPreview, MathToolbar } from '@pie-lib/math-toolbar';\nimport { wrapMath, unWrapMath, mmlToLatex, renderMath } from '@pie-lib/math-rendering';\nimport React from 'react';\nimport debug from 'debug';\nimport SlatePropTypes from 'slate-prop-types';\nimport PropTypes from 'prop-types';\n\nimport { BLOCK_TAGS } from '../../block-tags';\nimport isEqual from 'lodash/isEqual';\n\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, value, onFocus, onBlur, onClick } = 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.toObject(),\n latex,\n };\n\n const change = value.change().setNodeByKey(node.key, { data: update });\n\n const nextText = value.document.getNextText(node.key);\n\n change.moveFocusTo(nextText.key, 0).moveAnchorTo(nextText.key, 0);\n\n props.onToolbarDone(change, false);\n };\n\n const onChange = (latex) => {\n const update = {\n ...node.data.toObject(),\n latex,\n };\n const change = value.change().setNodeByKey(node.key, { data: update });\n log('call onToolbarChange:', change);\n props.onDataChange(node.key, update);\n };\n\n const latex = node.data.get('latex');\n\n return (\n <MathToolbar\n autoFocus\n additionalKeys={generateAdditionalKeys(customKeys)}\n latex={latex}\n onChange={onChange}\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 = node.equals(nodeNext);\n return equal && !keypadModeChanged && !controlledKeypadModeChanged;\n },\n);\n\nCustomToolbarComp.propTypes = {\n node: SlatePropTypes.node.isRequired,\n value: SlatePropTypes.value,\n onToolbarDone: PropTypes.func,\n onDataChange: PropTypes.func,\n onFocus: PropTypes.func,\n onClick: PropTypes.func,\n onBlur: PropTypes.func,\n};\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 ariaLabel: 'Math Toolbar',\n icon: <Functions />,\n onClick: (value, onChange) => {\n log('[insertMath]');\n const math = inlineMath();\n const change = value.change().insertInline(math);\n onChange(change);\n },\n supports: (node) => node && node.object === 'inline' && node.type === 'math',\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 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';\nMathPlugin.mathMlOptions = {};\n\nMathPlugin.propTypes = {\n attributes: PropTypes.object,\n node: SlatePropTypes.node,\n};\n\nexport const inlineMath = () =>\n Inline.create({\n object: 'inline',\n type: 'math',\n isVoid: true,\n data: {\n latex: '',\n },\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 arrowHandlingCase = (input) => {\n /*\n If we have a < character followed by a letter\n we make sure to replace it with a &lt; sign instead\n */\n return input.replace(/<([a-zA-Z]*)/g, '&lt;$1');\n};\n\nfunction replaceLeftRight(latexInput) {\n // for some reason, mmlToLatex parses () incorrectly - or at least in a way that our interpreter can not use them\n // Replace '\\\\left.' and '\\\\right.' with an empty string\n return latexInput.replace(/\\\\left\\.\\s*|\\\\right\\.\\s*/g, '');\n}\n\nconst convertLatexToMathMl = ({ latex, decoded, wrapper }) => {\n const removeEmptyMos = (mmlFromLatex) => {\n // Regular expression to match <mo>&#x2061;</mo> and <mo ...>&#x2061;</mo>, which get added when using log with base\n // not sure why they get added, but they add an extra space which is not needed\n const regex = /<mo(?: [^>]*)?>&#x2061;<\\/mo>/g;\n\n // Replace all occurrences of the matched patterns\n return mmlFromLatex.replace(regex, '');\n };\n const handled = arrowHandlingCase(decoded);\n\n const latexToConvert = `<span data-latex=\"\" data-raw=\"${handled}\">${wrapMath(handled, wrapper)}</span>`;\n\n // use math rendering (MathJax) to convert latex to mathMl\n let mathMlFromLatex = renderMath(latexToConvert, {\n skipWaitForMathRenderingLib: true,\n });\n\n // if renderMath returned the exact same string that we sent, it just means that the conversion could not be done\n const conversionDidNotWork = isEqual(latexToConvert, mathMlFromLatex);\n\n mathMlFromLatex = removeEmptyMos(mathMlFromLatex);\n\n // we convert resulted mathml to latex to check if the resulted mathMl can be converted back to latex if user wants to edit it later\n const latexFromMathMl = mathMlFromLatex ? mmlToLatex(mathMlFromLatex) : '';\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 = latexFromMathMl.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 const correctedLatex = replaceLeftRight(latexFromMathMl);\n\n // As George requested in PD-3167, I will set the new mathML anyway, and also log differences\n // if it doesn't, we keep the latex version\n // eslint-disable-next-line no-console\n console.log('This latex can not be safely converted to mathml so we will keep the latex version!!!', {\n initialLatex: latex,\n newLatex: latexFromMathMl,\n correctedLatex,\n mathML: mathMlFromLatex,\n conversionDidNotWork,\n });\n }\n\n return { mathMlFromLatex, conversionDidNotWork };\n};\n\nconst convertMathMlToLatex = (mathMl) => {\n const htmlWithRemovedSpaces = mathMl.replaceAll('&nbsp;', ' ');\n const htmlToUse = mmlToLatex(htmlWithRemovedSpaces);\n const latex = htmlDecode(htmlToUse);\n\n // todo fix this in mathml-to-latex\n return replaceLeftRight(latex);\n};\n\nexport const serialization = {\n deserialize(el) {\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 mathMl = hasMathChild ? el.innerHTML : el.outerHTML;\n\n if (MathPlugin.mathMlOptions.mmlEditing) {\n const { unwrapped, wrapType } = unWrapMath(convertMathMlToLatex(mathMl));\n\n return {\n object: 'inline',\n type: 'math',\n isVoid: true,\n nodes: [],\n data: {\n latex: unwrapped,\n wrapper: wrapType,\n },\n };\n }\n\n return {\n object: 'inline',\n isVoid: true,\n type: 'mathml',\n data: {\n html: mathMl,\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 return {\n object: 'inline',\n type: 'math',\n isVoid: true,\n nodes: [],\n data: {\n latex: unwrapped,\n wrapper: wrapType,\n },\n };\n }\n },\n serialize(object) {\n if (object.type === 'math') {\n const latex = object.data.get('latex');\n const wrapper = object.data.get('wrapper');\n const decoded = htmlDecode(arrowHandlingCase(latex));\n\n log('[serialize] latex: ', latex);\n\n if (MathPlugin.mathMlOptions.mmlOutput) {\n const { mathMlFromLatex, conversionDidNotWork } = convertLatexToMathMl({ latex, decoded, wrapper });\n\n if (conversionDidNotWork) {\n // this means we could not convert latex to mathMl, so just return the latex version,\n // same as we would do if mmlOutput would not be enabled\n return (\n <span data-latex=\"\" data-raw={decoded}>\n {wrapMath(decoded, wrapper)}\n </span>\n );\n }\n\n return <span data-type=\"mathml\" dangerouslySetInnerHTML={{ __html: mathMlFromLatex }} />;\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.get('html');\n\n return <span data-type=\"mathml\" dangerouslySetInnerHTML={{ __html: html }} />;\n }\n },\n};\n"],"mappings":";;;;;;;;;;;AAAA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAF,OAAA;AACA,IAAAG,cAAA,GAAAH,OAAA;AACA,IAAAI,MAAA,GAAAL,sBAAA,CAAAC,OAAA;AACA,IAAAK,MAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,eAAA,GAAAP,sBAAA,CAAAC,OAAA;AACA,IAAAO,UAAA,GAAAR,sBAAA,CAAAC,OAAA;AAEA,IAAAQ,UAAA,GAAAR,OAAA;AACA,IAAAS,QAAA,GAAAV,sBAAA,CAAAC,OAAA;AAAqC,SAAAU,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,MAAA,CAAAC,IAAA,CAAAJ,CAAA,OAAAG,MAAA,CAAAE,qBAAA,QAAAC,CAAA,GAAAH,MAAA,CAAAE,qBAAA,CAAAL,CAAA,GAAAC,CAAA,KAAAK,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAN,CAAA,WAAAE,MAAA,CAAAK,wBAAA,CAAAR,CAAA,EAAAC,CAAA,EAAAQ,UAAA,OAAAP,CAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,CAAA,EAAAI,CAAA,YAAAJ,CAAA;AAAA,SAAAU,cAAAZ,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAY,SAAA,CAAAC,MAAA,EAAAb,CAAA,UAAAC,CAAA,WAAAW,SAAA,CAAAZ,CAAA,IAAAY,SAAA,CAAAZ,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAI,MAAA,CAAAD,CAAA,OAAAa,OAAA,WAAAd,CAAA,QAAAe,gBAAA,aAAAhB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAE,MAAA,CAAAc,yBAAA,GAAAd,MAAA,CAAAe,gBAAA,CAAAlB,CAAA,EAAAG,MAAA,CAAAc,yBAAA,CAAAf,CAAA,KAAAH,OAAA,CAAAI,MAAA,CAAAD,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAE,MAAA,CAAAgB,cAAA,CAAAnB,CAAA,EAAAC,CAAA,EAAAE,MAAA,CAAAK,wBAAA,CAAAN,CAAA,EAAAD,CAAA,iBAAAD,CAAA;AAErC,IAAMoB,GAAG,GAAG,IAAAC,iBAAK,EAAC,qCAAqC,CAAC;AAExD,IAAMC,SAAS,GAAG,CAAC;AAEnB,SAASC,sBAAsBA,CAAA,EAAe;EAAA,IAAdC,OAAO,GAAAX,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAY,SAAA,GAAAZ,SAAA,MAAG,EAAE;EAC1C,OAAOW,OAAO,CAACE,GAAG,CAAC,UAACC,GAAG;IAAA,OAAM;MAC3BC,IAAI,EAAED,GAAG;MACTE,KAAK,EAAEF,GAAG;MACVG,KAAK,EAAEH,GAAG;MACVI,KAAK,EAAEJ;IACT,CAAC;EAAA,CAAC,CAAC;AACL;;AAEA;AACO,IAAMK,iBAAiB,GAAAC,OAAA,CAAAD,iBAAA,gBAAGE,iBAAK,CAACC,IAAI,CACzC,UAACC,KAAK,EAAK;EACT,IAAQC,IAAI,GAAsCD,KAAK,CAA/CC,IAAI;IAAEC,KAAK,GAA+BF,KAAK,CAAzCE,KAAK;IAAEC,OAAO,GAAsBH,KAAK,CAAlCG,OAAO;IAAEC,MAAM,GAAcJ,KAAK,CAAzBI,MAAM;IAAEC,OAAO,GAAKL,KAAK,CAAjBK,OAAO;EAC7C,IAAAC,IAAA,GAAwBN,KAAK,IAAI,CAAC,CAAC;IAA3BO,WAAW,GAAAD,IAAA,CAAXC,WAAW;EACnB,IAAAC,KAAA,GAAiBD,WAAW,IAAI,CAAC,CAAC;IAA1BE,IAAI,GAAAD,KAAA,CAAJC,IAAI;EACZ,IAAAC,KAAA,GAAgED,IAAI,IAAI,CAAC,CAAC;IAAlEE,UAAU,GAAAD,KAAA,CAAVC,UAAU;IAAEC,UAAU,GAAAF,KAAA,CAAVE,UAAU;IAAAC,qBAAA,GAAAH,KAAA,CAAEI,oBAAoB;IAApBA,oBAAoB,GAAAD,qBAAA,cAAG,IAAI,GAAAA,qBAAA;EAE3D,IAAME,MAAM,GAAG,SAATA,MAAMA,CAAItB,KAAK,EAAK;IACxB,IAAMuB,MAAM,GAAAxC,aAAA,CAAAA,aAAA,KACPyB,IAAI,CAACgB,IAAI,CAACC,QAAQ,CAAC,CAAC;MACvBzB,KAAK,EAALA;IAAK,EACN;IAED,IAAM0B,MAAM,GAAGjB,KAAK,CAACiB,MAAM,CAAC,CAAC,CAACC,YAAY,CAACnB,IAAI,CAACV,GAAG,EAAE;MAAE0B,IAAI,EAAED;IAAO,CAAC,CAAC;IAEtE,IAAMK,QAAQ,GAAGnB,KAAK,CAACoB,QAAQ,CAACC,WAAW,CAACtB,IAAI,CAACV,GAAG,CAAC;IAErD4B,MAAM,CAACK,WAAW,CAACH,QAAQ,CAAC9B,GAAG,EAAE,CAAC,CAAC,CAACkC,YAAY,CAACJ,QAAQ,CAAC9B,GAAG,EAAE,CAAC,CAAC;IAEjES,KAAK,CAAC0B,aAAa,CAACP,MAAM,EAAE,KAAK,CAAC;EACpC,CAAC;EAED,IAAMQ,QAAQ,GAAG,SAAXA,QAAQA,CAAIlC,KAAK,EAAK;IAC1B,IAAMuB,MAAM,GAAAxC,aAAA,CAAAA,aAAA,KACPyB,IAAI,CAACgB,IAAI,CAACC,QAAQ,CAAC,CAAC;MACvBzB,KAAK,EAALA;IAAK,EACN;IACD,IAAM0B,MAAM,GAAGjB,KAAK,CAACiB,MAAM,CAAC,CAAC,CAACC,YAAY,CAACnB,IAAI,CAACV,GAAG,EAAE;MAAE0B,IAAI,EAAED;IAAO,CAAC,CAAC;IACtEhC,GAAG,CAAC,uBAAuB,EAAEmC,MAAM,CAAC;IACpCnB,KAAK,CAAC4B,YAAY,CAAC3B,IAAI,CAACV,GAAG,EAAEyB,MAAM,CAAC;EACtC,CAAC;EAED,IAAMvB,KAAK,GAAGQ,IAAI,CAACgB,IAAI,CAACY,GAAG,CAAC,OAAO,CAAC;EAEpC,oBACExE,MAAA,YAAAyE,aAAA,CAAC3E,YAAA,CAAA4E,WAAW;IACVC,SAAS;IACTC,cAAc,EAAE9C,sBAAsB,CAACyB,UAAU,CAAE;IACnDnB,KAAK,EAAEA,KAAM;IACbkC,QAAQ,EAAEA,QAAS;IACnBZ,MAAM,EAAEA,MAAO;IACfX,MAAM,EAAEA,MAAO;IACfD,OAAO,EAAEA,OAAQ;IACjBE,OAAO,EAAEA,OAAQ;IACjBM,UAAU,EAAEA,UAAW;IACvBG,oBAAoB,EAAEA;EAAqB,CAC5C,CAAC;AAEN,CAAC,EACD,UAACoB,IAAI,EAAEC,IAAI,EAAK;EACd,IAAQlC,IAAI,GAA4EiC,IAAI,CAApFjC,IAAI;IAAAmC,iBAAA,GAA4EF,IAAI,CAA9E3B,WAAW;IAAA8B,kBAAA,GAAAD,iBAAA,cAAwD,CAAC,CAAC,GAAAA,iBAAA;IAAAE,qBAAA,GAAAD,kBAAA,CAAtD5B,IAAI;IAAA8B,sBAAA,GAAAD,qBAAA,cAAyC,CAAC,CAAC,GAAAA,qBAAA;IAAvC3B,UAAU,GAAA4B,sBAAA,CAAV5B,UAAU;IAAEG,oBAAoB,GAAAyB,sBAAA,CAApBzB,oBAAoB;EACrE,IACQ0B,QAAQ,GAEZL,IAAI,CAFNlC,IAAI;IAAAwC,iBAAA,GAEFN,IAAI,CADN5B,WAAW;IAAAmC,kBAAA,GAAAD,iBAAA,cAAkG,CAAC,CAAC,GAAAA,iBAAA;IAAAE,qBAAA,GAAAD,kBAAA,CAAhGjC,IAAI;IAAAmC,sBAAA,GAAAD,qBAAA,cAAmF,CAAC,CAAC,GAAAA,qBAAA;IAArEE,cAAc,GAAAD,sBAAA,CAA1BjC,UAAU;IAAwCmC,wBAAwB,GAAAF,sBAAA,CAA9C9B,oBAAoB;EAEzE,IAAMiC,iBAAiB,GAAGpC,UAAU,KAAKkC,cAAc;EACvD,IAAMG,2BAA2B,GAAGlC,oBAAoB,KAAKgC,wBAAwB;EAErF,IAAMG,KAAK,GAAGhD,IAAI,CAACiD,MAAM,CAACV,QAAQ,CAAC;EACnC,OAAOS,KAAK,IAAI,CAACF,iBAAiB,IAAI,CAACC,2BAA2B;AACpE,CACF,CAAC;AAEDpD,iBAAiB,CAACuD,SAAS,GAAG;EAC5BlD,IAAI,EAAEmD,0BAAc,CAACnD,IAAI,CAACoD,UAAU;EACpCnD,KAAK,EAAEkD,0BAAc,CAAClD,KAAK;EAC3BwB,aAAa,EAAE4B,qBAAS,CAACC,IAAI;EAC7B3B,YAAY,EAAE0B,qBAAS,CAACC,IAAI;EAC5BpD,OAAO,EAAEmD,qBAAS,CAACC,IAAI;EACvBlD,OAAO,EAAEiD,qBAAS,CAACC,IAAI;EACvBnD,MAAM,EAAEkD,qBAAS,CAACC;AACpB,CAAC;AAEc,SAASC,UAAUA,CAACC,IAAI,EAAE;EACvCD,UAAU,CAACE,aAAa,GAAG;IACzBC,SAAS,EAAEF,IAAI,CAACE,SAAS;IACzBC,UAAU,EAAEH,IAAI,CAACG;EACnB,CAAC;EAED,OAAO;IACLpE,IAAI,EAAE,MAAM;IACZqE,OAAO,EAAE;MACPC,SAAS,EAAE,cAAc;MACzBC,IAAI,eAAE1G,MAAA,YAAAyE,aAAA,CAAC/E,UAAA,WAAS,MAAE,CAAC;MACnBsD,OAAO,EAAE,SAATA,OAAOA,CAAGH,KAAK,EAAEyB,QAAQ,EAAK;QAC5B3C,GAAG,CAAC,cAAc,CAAC;QACnB,IAAMyB,IAAI,GAAGuD,UAAU,CAAC,CAAC;QACzB,IAAM7C,MAAM,GAAGjB,KAAK,CAACiB,MAAM,CAAC,CAAC,CAAC8C,YAAY,CAACxD,IAAI,CAAC;QAChDkB,QAAQ,CAACR,MAAM,CAAC;MAClB,CAAC;MACD+C,QAAQ,EAAE,SAAVA,QAAQA,CAAGjE,IAAI;QAAA,OAAKA,IAAI,IAAIA,IAAI,CAACkE,MAAM,KAAK,QAAQ,IAAIlE,IAAI,CAACmE,IAAI,KAAK,MAAM;MAAA;MAC5E;AACN;AACA;AACA;AACA;AACA;AACA;MACMxE,iBAAiB,EAAjBA;IACF,CAAC;IACDyE,MAAM,EAAE;MACN/C,QAAQ,EAAE;QAAEgD,KAAK,EAAE,CAAC;UAAEF,IAAI,EAAE;QAAO,CAAC;MAAE;IACxC,CAAC;IAEDG,YAAY,EAAE,SAAdA,YAAYA,CAAGtE,IAAI,EAAEuE,UAAU,EAAEC,CAAC,EAAK;MACrC,IAAIA,CAAC,EAAE;QACL,OAAO;UACLC,QAAQ,EAAE,UAAU;UACpBC,GAAG,EAAE;QACP,CAAC;MACH;IACF,CAAC;IAEDC,UAAU,EAAE,SAAZA,UAAUA,CAAG5E,KAAK,EAAK;MACrB,IAAIA,KAAK,CAACC,IAAI,CAACmE,IAAI,KAAK,MAAM,EAAE;QAC9BpF,GAAG,CAAC,qBAAqB,EAAEgB,KAAK,CAACC,IAAI,CAACgB,IAAI,CAAC;QAC3C,oBAAO5D,MAAA,YAAAyE,aAAA,CAAC3E,YAAA,CAAA0H,WAAW,EAAK7E,KAAQ,CAAC;MACnC;;MAEA;AACN;AACA;MACM,IAAIA,KAAK,CAACC,IAAI,CAACmE,IAAI,KAAK,QAAQ,EAAE;QAChC,IAAMU,IAAI,GAAG9E,KAAK,CAACC,IAAI,CAACgB,IAAI,CAACY,GAAG,CAAC,MAAM,CAAC;QAExC,oBAAOxE,MAAA,YAAAyE,aAAA,aAAAiD,SAAA,iBAAU/E,KAAK,CAACgF,UAAU;UAAEC,uBAAuB,EAAE;YAAEC,MAAM,EAAEJ;UAAK;QAAE,EAAE,CAAC;MAClF;IACF;EACF,CAAC;AACH;AAEAtB,UAAU,CAAC2B,cAAc,GAAG,gBAAgB;AAC5C3B,UAAU,CAAC4B,eAAe,GAAG,iBAAiB;AAC9C5B,UAAU,CAAC6B,MAAM,GAAG,QAAQ;AAC5B7B,UAAU,CAAC8B,aAAa,GAAG,eAAe;AAC1C9B,UAAU,CAACE,aAAa,GAAG,CAAC,CAAC;AAE7BF,UAAU,CAACL,SAAS,GAAG;EACrB6B,UAAU,EAAE1B,qBAAS,CAACa,MAAM;EAC5BlE,IAAI,EAAEmD,0BAAc,CAACnD;AACvB,CAAC;AAEM,IAAM+D,UAAU,GAAAnE,OAAA,CAAAmE,UAAA,GAAG,SAAbA,UAAUA,CAAA;EAAA,OACrBuB,aAAM,CAACC,MAAM,CAAC;IACZrB,MAAM,EAAE,QAAQ;IAChBC,IAAI,EAAE,MAAM;IACZqB,MAAM,EAAE,IAAI;IACZxE,IAAI,EAAE;MACJxB,KAAK,EAAE;IACT;EACF,CAAC,CAAC;AAAA;AAEJ,IAAMiG,UAAU,GAAG,SAAbA,UAAUA,CAAIC,KAAK,EAAK;EAC5B,IAAMC,GAAG,GAAG,IAAIC,SAAS,CAAC,CAAC,CAACC,eAAe,CAACH,KAAK,EAAE,WAAW,CAAC;EAE/D,OAAOC,GAAG,CAACG,eAAe,CAACC,WAAW;AACxC,CAAC;AAED,IAAMC,UAAU,GAAG,SAAbA,UAAUA,CAAIC,EAAE,EAAK;EACzB,OAAO,CAAEA,EAAE,IAAIA,EAAE,CAACC,OAAO,IAAK,EAAE,EAAEC,WAAW,CAAC,CAAC;AACjD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMC,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAIV,KAAK,EAAK;EACnC;AACF;AACA;AACA;EACE,OAAOA,KAAK,CAACW,OAAO,CAAC,eAAe,EAAE,QAAQ,CAAC;AACjD,CAAC;AAED,SAASC,gBAAgBA,CAACC,UAAU,EAAE;EACpC;EACA;EACA,OAAOA,UAAU,CAACF,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC;AAC5D;AAEA,IAAMG,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAAC,KAAA,EAAoC;EAAA,IAA9BjH,KAAK,GAAAiH,KAAA,CAALjH,KAAK;IAAEkH,OAAO,GAAAD,KAAA,CAAPC,OAAO;IAAEC,OAAO,GAAAF,KAAA,CAAPE,OAAO;EACrD,IAAMC,cAAc,GAAG,SAAjBA,cAAcA,CAAIC,YAAY,EAAK;IACvC;IACA;IACA,IAAMC,KAAK,GAAG,gCAAgC;;IAE9C;IACA,OAAOD,YAAY,CAACR,OAAO,CAACS,KAAK,EAAE,EAAE,CAAC;EACxC,CAAC;EACD,IAAMC,OAAO,GAAGX,iBAAiB,CAACM,OAAO,CAAC;EAE1C,IAAMM,cAAc,uCAAAC,MAAA,CAAoCF,OAAO,SAAAE,MAAA,CAAK,IAAAC,uBAAQ,EAACH,OAAO,EAAEJ,OAAO,CAAC,YAAS;;EAEvG;EACA,IAAIQ,eAAe,GAAG,IAAAC,yBAAU,EAACJ,cAAc,EAAE;IAC/CK,2BAA2B,EAAE;EAC/B,CAAC,CAAC;;EAEF;EACA,IAAMC,oBAAoB,GAAG,IAAAC,mBAAO,EAACP,cAAc,EAAEG,eAAe,CAAC;EAErEA,eAAe,GAAGP,cAAc,CAACO,eAAe,CAAC;;EAEjD;EACA,IAAMK,eAAe,GAAGL,eAAe,GAAG,IAAAM,yBAAU,EAACN,eAAe,CAAC,GAAG,EAAE;;EAE1E;EACA,IAAMO,SAAS,GAAGlI,KAAK,CAAC6G,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;EAC1C,IAAMsB,YAAY,GAAGH,eAAe,CAACnB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;;EAEvD;EACA;EACA,IAAI,CAAC,IAAAkB,mBAAO,EAACG,SAAS,EAAEC,YAAY,CAAC,EAAE;IACrC,IAAMC,cAAc,GAAGtB,gBAAgB,CAACkB,eAAe,CAAC;;IAExD;IACA;IACA;IACAK,OAAO,CAAC9I,GAAG,CAAC,uFAAuF,EAAE;MACnG+I,YAAY,EAAEtI,KAAK;MACnBuI,QAAQ,EAAEP,eAAe;MACzBI,cAAc,EAAdA,cAAc;MACdI,MAAM,EAAEb,eAAe;MACvBG,oBAAoB,EAApBA;IACF,CAAC,CAAC;EACJ;EAEA,OAAO;IAAEH,eAAe,EAAfA,eAAe;IAAEG,oBAAoB,EAApBA;EAAqB,CAAC;AAClD,CAAC;AAED,IAAMW,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAIC,MAAM,EAAK;EACvC,IAAMC,qBAAqB,GAAGD,MAAM,CAACE,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC;EAC9D,IAAMC,SAAS,GAAG,IAAAZ,yBAAU,EAACU,qBAAqB,CAAC;EACnD,IAAM3I,KAAK,GAAGiG,UAAU,CAAC4C,SAAS,CAAC;;EAEnC;EACA,OAAO/B,gBAAgB,CAAC9G,KAAK,CAAC;AAChC,CAAC;AAEM,IAAM8I,aAAa,GAAA1I,OAAA,CAAA0I,aAAA,GAAG;EAC3BC,WAAW,WAAXA,WAAWA,CAACtC,EAAE,EAAE;IACd,IAAMC,OAAO,GAAGF,UAAU,CAACC,EAAE,CAAC;IAC9B;AACJ;AACA;AACA;AACA;AACA;AACA;IACI,IAAMuC,YAAY,GAAGC,qBAAU,CAACvC,OAAO,CAAC,IAAID,EAAE,CAACyC,UAAU,CAACjK,MAAM,KAAK,CAAC,IAAIuH,UAAU,CAACC,EAAE,CAAC0C,UAAU,CAAC,KAAK,MAAM;IAC9G5J,GAAG,CAAC,sBAAsB,EAAEmH,OAAO,CAAC;;IAEpC;AACJ;AACA;IACI,IAAIA,OAAO,KAAK,MAAM,IAAKD,EAAE,CAAC2C,OAAO,IAAI3C,EAAE,CAAC2C,OAAO,CAACzE,IAAI,KAAK,QAAS,IAAIqE,YAAY,EAAE;MACtF,IAAMN,MAAM,GAAGM,YAAY,GAAGvC,EAAE,CAAC4C,SAAS,GAAG5C,EAAE,CAAC6C,SAAS;MAEzD,IAAIvF,UAAU,CAACE,aAAa,CAACE,UAAU,EAAE;QACvC,IAAAoF,WAAA,GAAgC,IAAAC,yBAAU,EAACf,oBAAoB,CAACC,MAAM,CAAC,CAAC;UAAhEe,SAAS,GAAAF,WAAA,CAATE,SAAS;UAAEC,QAAQ,GAAAH,WAAA,CAARG,QAAQ;QAE3B,OAAO;UACLhF,MAAM,EAAE,QAAQ;UAChBC,IAAI,EAAE,MAAM;UACZqB,MAAM,EAAE,IAAI;UACZ2D,KAAK,EAAE,EAAE;UACTnI,IAAI,EAAE;YACJxB,KAAK,EAAEyJ,SAAS;YAChBtC,OAAO,EAAEuC;UACX;QACF,CAAC;MACH;MAEA,OAAO;QACLhF,MAAM,EAAE,QAAQ;QAChBsB,MAAM,EAAE,IAAI;QACZrB,IAAI,EAAE,QAAQ;QACdnD,IAAI,EAAE;UACJ6D,IAAI,EAAEqD;QACR;MACF,CAAC;IACH;IAEA,IAAIjC,EAAE,CAACmD,QAAQ,KAAKnK,SAAS,EAAE;MAC7B;IACF;IAEA,IAAIiH,OAAO,KAAK,MAAM,EAAE;MACtB;IACF;IAEA,IAAMmD,QAAQ,GAAGpD,EAAE,CAACqD,YAAY,CAAC,YAAY,CAAC,IAAIrD,EAAE,CAACqD,YAAY,CAAC,OAAO,CAAC;IAE1E,IAAID,QAAQ,EAAE;MACZ,IAAM7J,KAAK,GAAGiG,UAAU,CAACQ,EAAE,CAAC4C,SAAS,CAAC;MACtC,IAAAU,YAAA,GAAgC,IAAAP,yBAAU,EAACxJ,KAAK,CAAC;QAAzCyJ,UAAS,GAAAM,YAAA,CAATN,SAAS;QAAEC,SAAQ,GAAAK,YAAA,CAARL,QAAQ;MAC3BnK,GAAG,CAAC,6BAA6B,EAAEkK,UAAS,EAAEC,SAAQ,CAAC;MACvD,OAAO;QACLhF,MAAM,EAAE,QAAQ;QAChBC,IAAI,EAAE,MAAM;QACZqB,MAAM,EAAE,IAAI;QACZ2D,KAAK,EAAE,EAAE;QACTnI,IAAI,EAAE;UACJxB,KAAK,EAAEyJ,UAAS;UAChBtC,OAAO,EAAEuC;QACX;MACF,CAAC;IACH;EACF,CAAC;EACDM,SAAS,WAATA,SAASA,CAACtF,MAAM,EAAE;IAChB,IAAIA,MAAM,CAACC,IAAI,KAAK,MAAM,EAAE;MAC1B,IAAM3E,KAAK,GAAG0E,MAAM,CAAClD,IAAI,CAACY,GAAG,CAAC,OAAO,CAAC;MACtC,IAAM+E,OAAO,GAAGzC,MAAM,CAAClD,IAAI,CAACY,GAAG,CAAC,SAAS,CAAC;MAC1C,IAAM8E,OAAO,GAAGjB,UAAU,CAACW,iBAAiB,CAAC5G,KAAK,CAAC,CAAC;MAEpDT,GAAG,CAAC,qBAAqB,EAAES,KAAK,CAAC;MAEjC,IAAI+D,UAAU,CAACE,aAAa,CAACC,SAAS,EAAE;QACtC,IAAA+F,qBAAA,GAAkDjD,oBAAoB,CAAC;YAAEhH,KAAK,EAALA,KAAK;YAAEkH,OAAO,EAAPA,OAAO;YAAEC,OAAO,EAAPA;UAAQ,CAAC,CAAC;UAA3FQ,eAAe,GAAAsC,qBAAA,CAAftC,eAAe;UAAEG,oBAAoB,GAAAmC,qBAAA,CAApBnC,oBAAoB;QAE7C,IAAIA,oBAAoB,EAAE;UACxB;UACA;UACA,oBACElK,MAAA,YAAAyE,aAAA;YAAM,cAAW,EAAE;YAAC,YAAU6E;UAAQ,GACnC,IAAAQ,uBAAQ,EAACR,OAAO,EAAEC,OAAO,CACtB,CAAC;QAEX;QAEA,oBAAOvJ,MAAA,YAAAyE,aAAA;UAAM,aAAU,QAAQ;UAACmD,uBAAuB,EAAE;YAAEC,MAAM,EAAEkC;UAAgB;QAAE,CAAE,CAAC;MAC1F;MAEA,oBACE/J,MAAA,YAAAyE,aAAA;QAAM,cAAW,EAAE;QAAC,YAAU6E;MAAQ,GACnC,IAAAQ,uBAAQ,EAACR,OAAO,EAAEC,OAAO,CACtB,CAAC;IAEX;;IAEA;AACJ;AACA;IACI,IAAIzC,MAAM,CAACC,IAAI,KAAK,QAAQ,EAAE;MAC5B,IAAMU,IAAI,GAAGX,MAAM,CAAClD,IAAI,CAACY,GAAG,CAAC,MAAM,CAAC;MAEpC,oBAAOxE,MAAA,YAAAyE,aAAA;QAAM,aAAU,QAAQ;QAACmD,uBAAuB,EAAE;UAAEC,MAAM,EAAEJ;QAAK;MAAE,CAAE,CAAC;IAC/E;EACF;AACF,CAAC","ignoreList":[]}