@pie-lib/editable-html 9.5.13 → 10.0.0-beta.1

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 (144) hide show
  1. package/CHANGELOG.md +0 -302
  2. package/lib/components.js +116 -0
  3. package/lib/components.js.map +1 -0
  4. package/lib/editor.js +418 -103
  5. package/lib/editor.js.map +1 -1
  6. package/lib/index.js +101 -155
  7. package/lib/index.js.map +1 -1
  8. package/lib/new-serialization.js +320 -0
  9. package/lib/new-serialization.js.map +1 -0
  10. package/lib/old-serialization.js +330 -0
  11. package/lib/parse-html.js +1 -1
  12. package/lib/parse-html.js.map +1 -1
  13. package/lib/plugins/characters/custom-popper.js +1 -1
  14. package/lib/plugins/characters/custom-popper.js.map +1 -1
  15. package/lib/plugins/characters/index.js +21 -19
  16. package/lib/plugins/characters/index.js.map +1 -1
  17. package/lib/plugins/characters/utils.js +1 -1
  18. package/lib/plugins/characters/utils.js.map +1 -1
  19. package/lib/plugins/hotKeys/index.js +67 -0
  20. package/lib/plugins/hotKeys/index.js.map +1 -0
  21. package/lib/plugins/image/alt-dialog.js +1 -6
  22. package/lib/plugins/image/alt-dialog.js.map +1 -1
  23. package/lib/plugins/image/component.js +70 -53
  24. package/lib/plugins/image/component.js.map +1 -1
  25. package/lib/plugins/image/image-toolbar.js +7 -9
  26. package/lib/plugins/image/image-toolbar.js.map +1 -1
  27. package/lib/plugins/image/index.js +83 -27
  28. package/lib/plugins/image/index.js.map +1 -1
  29. package/lib/plugins/image/insert-image-handler.js +72 -33
  30. package/lib/plugins/image/insert-image-handler.js.map +1 -1
  31. package/lib/plugins/index.js +23 -41
  32. package/lib/plugins/index.js.map +1 -1
  33. package/lib/plugins/list/index.js +64 -100
  34. package/lib/plugins/list/index.js.map +1 -1
  35. package/lib/plugins/math/index.js +86 -60
  36. package/lib/plugins/math/index.js.map +1 -1
  37. package/lib/plugins/media/index.js +202 -132
  38. package/lib/plugins/media/index.js.map +1 -1
  39. package/lib/plugins/media/media-dialog.js +17 -16
  40. package/lib/plugins/media/media-dialog.js.map +1 -1
  41. package/lib/plugins/media/media-toolbar.js +3 -3
  42. package/lib/plugins/media/media-toolbar.js.map +1 -1
  43. package/lib/plugins/media/media-wrapper.js +21 -58
  44. package/lib/plugins/media/media-wrapper.js.map +1 -1
  45. package/lib/plugins/respArea/drag-in-the-blank/choice.js +3 -3
  46. package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -1
  47. package/lib/plugins/respArea/drag-in-the-blank/index.js +3 -2
  48. package/lib/plugins/respArea/drag-in-the-blank/index.js.map +1 -1
  49. package/lib/plugins/respArea/explicit-constructed-response/index.js +3 -2
  50. package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -1
  51. package/lib/plugins/respArea/icons/index.js +13 -15
  52. package/lib/plugins/respArea/icons/index.js.map +1 -1
  53. package/lib/plugins/respArea/index.js +87 -53
  54. package/lib/plugins/respArea/index.js.map +1 -1
  55. package/lib/plugins/respArea/inline-dropdown/index.js +4 -3
  56. package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -1
  57. package/lib/plugins/respArea/utils.js +17 -20
  58. package/lib/plugins/respArea/utils.js.map +1 -1
  59. package/lib/plugins/table/icons/index.js +1 -1
  60. package/lib/plugins/table/icons/index.js.map +1 -1
  61. package/lib/plugins/table/index.js +381 -212
  62. package/lib/plugins/table/index.js.map +1 -1
  63. package/lib/plugins/table/table-toolbar.js +5 -6
  64. package/lib/plugins/table/table-toolbar.js.map +1 -1
  65. package/lib/plugins/toolbar/default-toolbar.js +55 -11
  66. package/lib/plugins/toolbar/default-toolbar.js.map +1 -1
  67. package/lib/plugins/toolbar/done-button.js +1 -1
  68. package/lib/plugins/toolbar/done-button.js.map +1 -1
  69. package/lib/plugins/toolbar/editor-and-toolbar.js +186 -232
  70. package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -1
  71. package/lib/plugins/toolbar/index.js +1 -2
  72. package/lib/plugins/toolbar/index.js.map +1 -1
  73. package/lib/plugins/toolbar/toolbar-buttons.js +1 -1
  74. package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -1
  75. package/lib/plugins/toolbar/toolbar.js +253 -239
  76. package/lib/plugins/toolbar/toolbar.js.map +1 -1
  77. package/lib/plugins/utils.js +27 -2
  78. package/lib/plugins/utils.js.map +1 -1
  79. package/lib/serialization.js +1 -1
  80. package/lib/serialization.js.map +1 -1
  81. package/lib/slate-editor.js +302 -0
  82. package/lib/test-serializer.js +189 -0
  83. package/lib/test-serializer.js.map +1 -0
  84. package/lib/theme.js +1 -1
  85. package/lib/theme.js.map +1 -1
  86. package/package.json +18 -14
  87. package/playground/image/data.js +20 -20
  88. package/playground/image/index.html +22 -20
  89. package/playground/image/index.jsx +12 -10
  90. package/playground/index.html +25 -23
  91. package/playground/mathquill/index.html +23 -20
  92. package/playground/mathquill/index.jsx +18 -22
  93. package/playground/prod-test/index.html +24 -20
  94. package/playground/prod-test/index.jsx +5 -3
  95. package/playground/schema-override/data.js +10 -10
  96. package/playground/schema-override/image-plugin.jsx +3 -4
  97. package/playground/schema-override/index.html +21 -19
  98. package/playground/schema-override/index.jsx +13 -14
  99. package/playground/serialization/data.js +10 -10
  100. package/playground/serialization/image-plugin.jsx +3 -4
  101. package/playground/serialization/index.html +22 -20
  102. package/playground/table-examples.html +5 -8
  103. package/playground/webpack.config.js +10 -10
  104. package/src/components.js +135 -0
  105. package/src/editor.jsx +478 -141
  106. package/src/index.jsx +71 -95
  107. package/src/new-serialization.jsx +291 -0
  108. package/src/parse-html.js +1 -1
  109. package/src/plugins/characters/custom-popper.js +7 -7
  110. package/src/plugins/characters/index.jsx +33 -34
  111. package/src/plugins/characters/utils.js +81 -81
  112. package/src/plugins/hotKeys/index.js +54 -0
  113. package/src/plugins/image/alt-dialog.jsx +4 -5
  114. package/src/plugins/image/component.jsx +106 -89
  115. package/src/plugins/image/image-toolbar.jsx +27 -19
  116. package/src/plugins/image/index.jsx +75 -43
  117. package/src/plugins/image/insert-image-handler.js +62 -27
  118. package/src/plugins/index.jsx +23 -41
  119. package/src/plugins/list/index.jsx +70 -95
  120. package/src/plugins/math/index.jsx +102 -82
  121. package/src/plugins/media/index.jsx +159 -124
  122. package/src/plugins/media/media-dialog.js +98 -71
  123. package/src/plugins/media/media-toolbar.jsx +8 -8
  124. package/src/plugins/media/media-wrapper.jsx +29 -30
  125. package/src/plugins/respArea/drag-in-the-blank/choice.jsx +21 -19
  126. package/src/plugins/respArea/drag-in-the-blank/index.jsx +14 -11
  127. package/src/plugins/respArea/explicit-constructed-response/index.jsx +7 -6
  128. package/src/plugins/respArea/icons/index.jsx +11 -14
  129. package/src/plugins/respArea/index.jsx +92 -52
  130. package/src/plugins/respArea/inline-dropdown/index.jsx +9 -8
  131. package/src/plugins/respArea/utils.jsx +26 -35
  132. package/src/plugins/table/icons/index.jsx +17 -11
  133. package/src/plugins/table/index.jsx +288 -231
  134. package/src/plugins/table/table-toolbar.jsx +15 -11
  135. package/src/plugins/toolbar/default-toolbar.jsx +65 -19
  136. package/src/plugins/toolbar/done-button.jsx +4 -4
  137. package/src/plugins/toolbar/editor-and-toolbar.jsx +150 -145
  138. package/src/plugins/toolbar/index.jsx +2 -3
  139. package/src/plugins/toolbar/toolbar-buttons.jsx +11 -11
  140. package/src/plugins/toolbar/toolbar.jsx +244 -221
  141. package/src/plugins/utils.js +21 -4
  142. package/src/serialization.jsx +32 -32
  143. package/src/test-serializer.js +139 -0
  144. package/src/test-serializer.js.rej +20 -0
@@ -7,18 +7,18 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.serialization = exports["default"] = void 0;
9
9
 
10
- var _react = _interopRequireDefault(require("react"));
11
-
12
- var _slate = require("slate");
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
11
 
14
- var _immutable = _interopRequireDefault(require("immutable"));
12
+ var _react = _interopRequireDefault(require("react"));
15
13
 
16
14
  var _propTypes = _interopRequireDefault(require("prop-types"));
17
15
 
18
- var _slateEditList = _interopRequireDefault(require("slate-edit-list"));
19
-
20
16
  var _debug = _interopRequireDefault(require("debug"));
21
17
 
18
+ var _slate = require("slate");
19
+
20
+ var _slateHyperscript = require("slate-hyperscript");
21
+
22
22
  var log = (0, _debug["default"])('@pie-lib:editable-html:plugins:list');
23
23
 
24
24
  var b = function b(type, next, childNodes) {
@@ -32,22 +32,27 @@ var b = function b(type, next, childNodes) {
32
32
  var serialization = {
33
33
  deserialize: function deserialize(el, next) {
34
34
  var name = el.tagName.toLowerCase();
35
+ var children = el.children.length ? Array.from(el.children) : el.childNodes;
35
36
 
36
37
  if (name === 'li') {
37
- return b('list_item', next, el.childNodes);
38
+ return (0, _slateHyperscript.jsx)('element', {
39
+ type: 'li'
40
+ }, next(children));
38
41
  }
39
42
 
40
43
  if (name === 'ul') {
41
- return b('ul_list', next, el.children.length ? Array.from(el.children) : el.childNodes);
44
+ return (0, _slateHyperscript.jsx)('element', {
45
+ type: 'ul'
46
+ }, next(children));
42
47
  }
43
48
 
44
49
  if (name === 'ol') {
45
- return b('ol_list', next, el.children.length ? Array.from(el.children) : el.childNodes);
50
+ return (0, _slateHyperscript.jsx)('element', {
51
+ type: 'ol'
52
+ }, next(children));
46
53
  }
47
54
  },
48
55
  serialize: function serialize(object, children) {
49
- if (object.object !== 'block') return;
50
-
51
56
  if (object.type === 'list_item') {
52
57
  return /*#__PURE__*/_react["default"].createElement("li", null, children);
53
58
  }
@@ -63,91 +68,67 @@ var serialization = {
63
68
  };
64
69
  exports.serialization = serialization;
65
70
 
66
- var createEditList = function createEditList() {
67
- var core = (0, _slateEditList["default"])({
68
- typeDefault: 'span'
69
- }); // fix outdated schema
71
+ var isBlockActive = function isBlockActive(editor, format) {
72
+ var selection = editor.selection;
73
+ if (!selection) return false;
70
74
 
71
- if (core.schema && core.schema.blocks) {
72
- Object.keys(core.schema.blocks).forEach(function (key) {
73
- var block = core.schema.blocks[key];
75
+ var _Array$from = Array.from(_slate.Editor.nodes(editor, {
76
+ at: _slate.Editor.unhangRange(editor, selection),
77
+ match: function match(node) {
78
+ return !_slate.Editor.isEditor(node) && _slate.Element.isElement(node) && node.type === format;
79
+ }
80
+ })),
81
+ _Array$from2 = (0, _slicedToArray2["default"])(_Array$from, 1),
82
+ match = _Array$from2[0];
74
83
 
75
- if (block.parent) {
76
- return;
77
- }
84
+ return !!match;
85
+ };
78
86
 
79
- block.nodes[0] = {
80
- type: block.nodes[0].types[0]
81
- };
87
+ var createEditList = function createEditList() {
88
+ var core = {
89
+ changes: {}
90
+ };
91
+
92
+ core.changes.wrapInList = function (editor, format) {
93
+ var isActive = isBlockActive(editor, format);
94
+ var isList = LIST_TYPES.includes(format);
95
+
96
+ _slate.Transforms.unwrapNodes(editor, {
97
+ match: function match(n) {
98
+ return !_slate.Editor.isEditor(n) && _slate.Element.isElement(n) && LIST_TYPES.includes(n.type);
99
+ },
100
+ split: true
82
101
  });
83
- }
84
- /**
85
- * This override of the core.changes.wrapInList is needed because the version
86
- * of immutable that we have does not support getting the element at a specific
87
- * index with a square bracket (list[0]). We have to use the list.get function instead
88
- */
89
102
 
90
- /**
91
- * Returns the highest list of blocks that cover the current selection
92
- */
103
+ var newProperties = {
104
+ type: isActive ? 'paragraph' : isList ? 'list_item' : format
105
+ };
93
106
 
107
+ _slate.Transforms.setNodes(editor, newProperties);
94
108
 
95
- var getHighestSelectedBlocks = function getHighestSelectedBlocks(value) {
96
- var range = value.selection;
97
- var document = value.document;
98
- var startBlock = document.getClosestBlock(range.startKey);
99
- var endBlock = document.getClosestBlock(range.endKey);
109
+ if (!isActive && isList) {
110
+ var block = {
111
+ type: format,
112
+ children: []
113
+ };
100
114
 
101
- if (startBlock === endBlock) {
102
- return _immutable["default"].List([startBlock]);
115
+ _slate.Transforms.wrapNodes(editor, block);
103
116
  }
104
-
105
- var ancestor = document.getCommonAncestor(startBlock.key, endBlock.key);
106
- var startPath = ancestor.getPath(startBlock.key);
107
- var endPath = ancestor.getPath(endBlock.key);
108
- return ancestor.nodes.slice(startPath.get(0), endPath.get(0) + 1);
109
- };
110
- /**
111
- * Wrap the blocks in the current selection in a new list. Selected
112
- * lists are merged together.
113
- */
114
-
115
-
116
- core.changes.wrapInList = function (change, type, data) {
117
- var selectedBlocks = getHighestSelectedBlocks(change.value); // Wrap in container
118
-
119
- change.wrapBlock({
120
- type: type,
121
- data: _slate.Data.create(data)
122
- }, {
123
- normalize: false
124
- }); // Wrap in list items
125
-
126
- selectedBlocks.forEach(function (node) {
127
- if (core.utils.isList(node)) {
128
- // Merge its items with the created list
129
- node.nodes.forEach(function (_ref) {
130
- var key = _ref.key;
131
- return change.unwrapNodeByKey(key, {
132
- normalize: false
133
- });
134
- });
135
- } else if (node.type !== 'list_item') {
136
- change.wrapBlockByKey(node.key, 'list_item', {
137
- normalize: false
138
- });
139
- }
140
- });
141
- return change.normalize();
142
117
  };
143
118
 
144
119
  return core;
145
120
  };
146
121
 
122
+ var LIST_TYPES = ['ol_list', 'ul_list', 'list_item'];
123
+
147
124
  var _default = function _default(options) {
148
125
  var type = options.type,
149
126
  icon = options.icon;
150
- var core = createEditList(); // eslint-disable-next-line react/display-name
127
+ var core = createEditList();
128
+
129
+ core.supports = function (node) {
130
+ return LIST_TYPES.includes(node.type);
131
+ };
151
132
 
152
133
  core.renderNode = function (props) {
153
134
  var node = props.node,
@@ -170,26 +151,9 @@ var _default = function _default(options) {
170
151
  isMark: false,
171
152
  type: type,
172
153
  icon: icon,
173
- isActive: function isActive(value, type) {
174
- if (!core.utils.isSelectionInList(value)) {
175
- return false;
176
- }
177
-
178
- var current = core.utils.getCurrentList(value);
179
- return current ? current.type === type : false;
180
- },
181
- onClick: function onClick(value, onChange) {
182
- log('[onClick]', value);
183
- var inList = core.utils.isSelectionInList(value);
184
-
185
- if (inList) {
186
- var change = value.change().call(core.changes.unwrapList);
187
- onChange(change);
188
- } else {
189
- var _change = value.change().call(core.changes.wrapInList, type);
190
-
191
- onChange(_change);
192
- }
154
+ isActive: isBlockActive,
155
+ onClick: function onClick(editor) {
156
+ core.changes.wrapInList(editor, type);
193
157
  }
194
158
  };
195
159
  core.renderNode.propTypes = {
@@ -201,4 +165,4 @@ var _default = function _default(options) {
201
165
  };
202
166
 
203
167
  exports["default"] = _default;
204
- //# sourceMappingURL=index.js.map
168
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2ciLCJkZWJ1ZyIsImIiLCJ0eXBlIiwibmV4dCIsImNoaWxkTm9kZXMiLCJvYmplY3QiLCJub2RlcyIsInNlcmlhbGl6YXRpb24iLCJkZXNlcmlhbGl6ZSIsImVsIiwibmFtZSIsInRhZ05hbWUiLCJ0b0xvd2VyQ2FzZSIsImNoaWxkcmVuIiwibGVuZ3RoIiwiQXJyYXkiLCJmcm9tIiwianN4Iiwic2VyaWFsaXplIiwiaXNCbG9ja0FjdGl2ZSIsImVkaXRvciIsImZvcm1hdCIsInNlbGVjdGlvbiIsIkVkaXRvciIsImF0IiwidW5oYW5nUmFuZ2UiLCJtYXRjaCIsIm5vZGUiLCJpc0VkaXRvciIsIlNsYXRlRWxlbWVudCIsImlzRWxlbWVudCIsImNyZWF0ZUVkaXRMaXN0IiwiY29yZSIsImNoYW5nZXMiLCJ3cmFwSW5MaXN0IiwiaXNBY3RpdmUiLCJpc0xpc3QiLCJMSVNUX1RZUEVTIiwiaW5jbHVkZXMiLCJUcmFuc2Zvcm1zIiwidW53cmFwTm9kZXMiLCJuIiwic3BsaXQiLCJuZXdQcm9wZXJ0aWVzIiwic2V0Tm9kZXMiLCJibG9jayIsIndyYXBOb2RlcyIsIm9wdGlvbnMiLCJpY29uIiwic3VwcG9ydHMiLCJyZW5kZXJOb2RlIiwicHJvcHMiLCJhdHRyaWJ1dGVzIiwidG9vbGJhciIsImlzTWFyayIsIm9uQ2xpY2siLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJmdW5jIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BsdWdpbnMvbGlzdC9pbmRleC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IHsgRWRpdG9yLCBFbGVtZW50IGFzIFNsYXRlRWxlbWVudCwgVHJhbnNmb3JtcyB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IGpzeCB9IGZyb20gXCJzbGF0ZS1oeXBlcnNjcmlwdFwiO1xuXG5jb25zdCBsb2cgPSBkZWJ1ZygnQHBpZS1saWI6ZWRpdGFibGUtaHRtbDpwbHVnaW5zOmxpc3QnKTtcblxuY29uc3QgYiA9ICh0eXBlLCBuZXh0LCBjaGlsZE5vZGVzKSA9PiAoe1xuICBvYmplY3Q6ICdibG9jaycsXG4gIHR5cGUsXG4gIG5vZGVzOiBuZXh0KGNoaWxkTm9kZXMpXG59KTtcblxuZXhwb3J0IGNvbnN0IHNlcmlhbGl6YXRpb24gPSB7XG4gIGRlc2VyaWFsaXplKGVsLCBuZXh0KSB7XG4gICAgY29uc3QgbmFtZSA9IGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGVsLmNoaWxkcmVuLmxlbmd0aCA/IEFycmF5LmZyb20oZWwuY2hpbGRyZW4pIDogZWwuY2hpbGROb2RlcztcblxuICAgIGlmIChuYW1lID09PSAnbGknKSB7XG4gICAgICByZXR1cm4ganN4KFxuICAgICAgICAnZWxlbWVudCcsXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnbGknXG4gICAgICAgIH0sXG4gICAgICAgIG5leHQoY2hpbGRyZW4pXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChuYW1lID09PSAndWwnKSB7XG4gICAgICByZXR1cm4ganN4KFxuICAgICAgICAnZWxlbWVudCcsXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAndWwnXG4gICAgICAgIH0sXG4gICAgICAgIG5leHQoY2hpbGRyZW4pXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChuYW1lID09PSAnb2wnKSB7XG4gICAgICByZXR1cm4ganN4KFxuICAgICAgICAnZWxlbWVudCcsXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnb2wnXG4gICAgICAgIH0sXG4gICAgICAgIG5leHQoY2hpbGRyZW4pXG4gICAgICApO1xuICAgIH1cbiAgfSxcbiAgc2VyaWFsaXplKG9iamVjdCwgY2hpbGRyZW4pIHtcbiAgICBpZiAob2JqZWN0LnR5cGUgPT09ICdsaXN0X2l0ZW0nKSB7XG4gICAgICByZXR1cm4gPGxpPntjaGlsZHJlbn08L2xpPjtcbiAgICB9XG5cbiAgICBpZiAob2JqZWN0LnR5cGUgPT09ICd1bF9saXN0Jykge1xuICAgICAgcmV0dXJuIDx1bD57Y2hpbGRyZW59PC91bD47XG4gICAgfVxuXG4gICAgaWYgKG9iamVjdC50eXBlID09PSAnb2xfbGlzdCcpIHtcbiAgICAgIHJldHVybiA8b2w+e2NoaWxkcmVufTwvb2w+O1xuICAgIH1cbiAgfVxufTtcblxuY29uc3QgaXNCbG9ja0FjdGl2ZSA9IChlZGl0b3IsIGZvcm1hdCkgPT4ge1xuICBjb25zdCB7IHNlbGVjdGlvbiB9ID0gZWRpdG9yO1xuICBpZiAoIXNlbGVjdGlvbikgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IFttYXRjaF0gPSBBcnJheS5mcm9tKFxuICAgIEVkaXRvci5ub2RlcyhlZGl0b3IsIHtcbiAgICAgIGF0OiBFZGl0b3IudW5oYW5nUmFuZ2UoZWRpdG9yLCBzZWxlY3Rpb24pLFxuICAgICAgbWF0Y2g6IG5vZGUgPT4gIUVkaXRvci5pc0VkaXRvcihub2RlKSAmJiBTbGF0ZUVsZW1lbnQuaXNFbGVtZW50KG5vZGUpICYmIG5vZGUudHlwZSA9PT0gZm9ybWF0XG4gICAgfSlcbiAgKTtcblxuICByZXR1cm4gISFtYXRjaDtcbn07XG5cbmNvbnN0IGNyZWF0ZUVkaXRMaXN0ID0gKCkgPT4ge1xuICBjb25zdCBjb3JlID0ge1xuICAgIGNoYW5nZXM6IHt9XG4gIH07XG5cbiAgY29yZS5jaGFuZ2VzLndyYXBJbkxpc3QgPSAoZWRpdG9yLCBmb3JtYXQpID0+IHtcbiAgICBjb25zdCBpc0FjdGl2ZSA9IGlzQmxvY2tBY3RpdmUoZWRpdG9yLCBmb3JtYXQpO1xuICAgIGNvbnN0IGlzTGlzdCA9IExJU1RfVFlQRVMuaW5jbHVkZXMoZm9ybWF0KTtcblxuICAgIFRyYW5zZm9ybXMudW53cmFwTm9kZXMoZWRpdG9yLCB7XG4gICAgICBtYXRjaDogbiA9PlxuICAgICAgICAhRWRpdG9yLmlzRWRpdG9yKG4pICYmXG4gICAgICAgIFNsYXRlRWxlbWVudC5pc0VsZW1lbnQobikgJiZcbiAgICAgICAgTElTVF9UWVBFUy5pbmNsdWRlcyhuLnR5cGUpLFxuICAgICAgc3BsaXQ6IHRydWVcbiAgICB9KTtcblxuICAgIGNvbnN0IG5ld1Byb3BlcnRpZXMgPSB7XG4gICAgICB0eXBlOiBpc0FjdGl2ZSA/ICdwYXJhZ3JhcGgnIDogaXNMaXN0ID8gJ2xpc3RfaXRlbScgOiBmb3JtYXRcbiAgICB9O1xuXG4gICAgVHJhbnNmb3Jtcy5zZXROb2RlcyhlZGl0b3IsIG5ld1Byb3BlcnRpZXMpO1xuXG4gICAgaWYgKCFpc0FjdGl2ZSAmJiBpc0xpc3QpIHtcbiAgICAgIGNvbnN0IGJsb2NrID0geyB0eXBlOiBmb3JtYXQsIGNoaWxkcmVuOiBbXSB9O1xuICAgICAgVHJhbnNmb3Jtcy53cmFwTm9kZXMoZWRpdG9yLCBibG9jayk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBjb3JlO1xufTtcblxuY29uc3QgTElTVF9UWVBFUyA9IFsnb2xfbGlzdCcsICd1bF9saXN0JywgJ2xpc3RfaXRlbSddO1xuXG5leHBvcnQgZGVmYXVsdCBvcHRpb25zID0+IHtcbiAgY29uc3QgeyB0eXBlLCBpY29uIH0gPSBvcHRpb25zO1xuXG4gIGNvbnN0IGNvcmUgPSBjcmVhdGVFZGl0TGlzdCgpO1xuXG4gIGNvcmUuc3VwcG9ydHMgPSBub2RlID0+IExJU1RfVFlQRVMuaW5jbHVkZXMobm9kZS50eXBlKTtcblxuICBjb3JlLnJlbmRlck5vZGUgPSBwcm9wcyA9PiB7XG4gICAgY29uc3QgeyBub2RlLCBhdHRyaWJ1dGVzLCBjaGlsZHJlbiB9ID0gcHJvcHM7XG5cbiAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgY2FzZSAndWxfbGlzdCc6XG4gICAgICAgIHJldHVybiA8dWwgey4uLmF0dHJpYnV0ZXN9PntjaGlsZHJlbn08L3VsPjtcbiAgICAgIGNhc2UgJ29sX2xpc3QnOlxuICAgICAgICByZXR1cm4gPG9sIHsuLi5hdHRyaWJ1dGVzfT57Y2hpbGRyZW59PC9vbD47XG4gICAgICBjYXNlICdsaXN0X2l0ZW0nOlxuICAgICAgICByZXR1cm4gPGxpIHsuLi5hdHRyaWJ1dGVzfT57Y2hpbGRyZW59PC9saT47XG4gICAgfVxuICB9O1xuXG4gIGNvcmUudG9vbGJhciA9IHtcbiAgICBpc01hcms6IGZhbHNlLFxuICAgIHR5cGUsXG4gICAgaWNvbixcbiAgICBpc0FjdGl2ZTogaXNCbG9ja0FjdGl2ZSxcbiAgICBvbkNsaWNrOiBlZGl0b3IgPT4ge1xuICAgICAgY29yZS5jaGFuZ2VzLndyYXBJbkxpc3QoZWRpdG9yLCB0eXBlKTtcbiAgICB9XG4gIH07XG5cbiAgY29yZS5yZW5kZXJOb2RlLnByb3BUeXBlcyA9IHtcbiAgICBub2RlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGF0dHJpYnV0ZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgY2hpbGRyZW46IFByb3BUeXBlcy5mdW5jXG4gIH07XG5cbiAgcmV0dXJuIGNvcmU7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLElBQU1BLEdBQUcsR0FBRyxJQUFBQyxpQkFBQSxFQUFNLHFDQUFOLENBQVo7O0FBRUEsSUFBTUMsQ0FBQyxHQUFHLFNBQUpBLENBQUksQ0FBQ0MsSUFBRCxFQUFPQyxJQUFQLEVBQWFDLFVBQWI7RUFBQSxPQUE2QjtJQUNyQ0MsTUFBTSxFQUFFLE9BRDZCO0lBRXJDSCxJQUFJLEVBQUpBLElBRnFDO0lBR3JDSSxLQUFLLEVBQUVILElBQUksQ0FBQ0MsVUFBRDtFQUgwQixDQUE3QjtBQUFBLENBQVY7O0FBTU8sSUFBTUcsYUFBYSxHQUFHO0VBQzNCQyxXQUQyQix1QkFDZkMsRUFEZSxFQUNYTixJQURXLEVBQ0w7SUFDcEIsSUFBTU8sSUFBSSxHQUFHRCxFQUFFLENBQUNFLE9BQUgsQ0FBV0MsV0FBWCxFQUFiO0lBQ0EsSUFBTUMsUUFBUSxHQUFHSixFQUFFLENBQUNJLFFBQUgsQ0FBWUMsTUFBWixHQUFxQkMs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
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/plugins/list/index.jsx"],"names":["log","b","type","next","childNodes","object","nodes","serialization","deserialize","el","name","tagName","toLowerCase","children","length","Array","from","serialize","createEditList","core","typeDefault","schema","blocks","Object","keys","forEach","key","block","parent","types","getHighestSelectedBlocks","value","range","selection","document","startBlock","getClosestBlock","startKey","endBlock","endKey","Immutable","List","ancestor","getCommonAncestor","startPath","getPath","endPath","slice","get","changes","wrapInList","change","data","selectedBlocks","wrapBlock","Data","create","normalize","node","utils","isList","_ref","unwrapNodeByKey","wrapBlockByKey","options","icon","renderNode","props","attributes","toolbar","isMark","isActive","isSelectionInList","current","getCurrentList","onClick","onChange","inList","call","unwrapList","propTypes","PropTypes","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Data } from 'slate';\nimport Immutable from 'immutable';\nimport PropTypes from 'prop-types';\nimport EditList from 'slate-edit-list';\nimport debug from 'debug';\n\nconst log = debug('@pie-lib:editable-html:plugins:list');\n\nconst b = (type, next, childNodes) => ({\n object: 'block',\n type,\n nodes: next(childNodes),\n});\n\nexport const serialization = {\n deserialize(el, next) {\n const name = el.tagName.toLowerCase();\n\n if (name === 'li') {\n return b('list_item', next, el.childNodes);\n }\n\n if (name === 'ul') {\n return b('ul_list', next, el.children.length ? Array.from(el.children) : el.childNodes);\n }\n\n if (name === 'ol') {\n return b('ol_list', next, el.children.length ? Array.from(el.children) : el.childNodes);\n }\n },\n serialize(object, children) {\n if (object.object !== 'block') return;\n\n if (object.type === 'list_item') {\n return <li>{children}</li>;\n }\n\n if (object.type === 'ul_list') {\n return <ul>{children}</ul>;\n }\n\n if (object.type === 'ol_list') {\n return <ol>{children}</ol>;\n }\n },\n};\n\nconst createEditList = () => {\n const core = EditList({\n typeDefault: 'span',\n });\n\n // fix outdated schema\n if (core.schema && core.schema.blocks) {\n Object.keys(core.schema.blocks).forEach((key) => {\n const block = core.schema.blocks[key];\n\n if (block.parent) {\n return;\n }\n\n block.nodes[0] = { type: block.nodes[0].types[0] };\n });\n }\n\n /**\n * This override of the core.changes.wrapInList is needed because the version\n * of immutable that we have does not support getting the element at a specific\n * index with a square bracket (list[0]). We have to use the list.get function instead\n */\n\n /**\n * Returns the highest list of blocks that cover the current selection\n */\n const getHighestSelectedBlocks = (value) => {\n const range = value.selection;\n const document = value.document;\n\n const startBlock = document.getClosestBlock(range.startKey);\n const endBlock = document.getClosestBlock(range.endKey);\n\n if (startBlock === endBlock) {\n return Immutable.List([startBlock]);\n }\n\n const ancestor = document.getCommonAncestor(startBlock.key, endBlock.key);\n const startPath = ancestor.getPath(startBlock.key);\n const endPath = ancestor.getPath(endBlock.key);\n\n return ancestor.nodes.slice(startPath.get(0), endPath.get(0) + 1);\n };\n\n /**\n * Wrap the blocks in the current selection in a new list. Selected\n * lists are merged together.\n */\n core.changes.wrapInList = function(change, type, data) {\n const selectedBlocks = getHighestSelectedBlocks(change.value);\n\n // Wrap in container\n change.wrapBlock({ type: type, data: Data.create(data) }, { normalize: false });\n\n // Wrap in list items\n selectedBlocks.forEach(function(node) {\n if (core.utils.isList(node)) {\n // Merge its items with the created list\n node.nodes.forEach(function(_ref) {\n const key = _ref.key;\n return change.unwrapNodeByKey(key, { normalize: false });\n });\n } else if (node.type !== 'list_item') {\n change.wrapBlockByKey(node.key, 'list_item', {\n normalize: false,\n });\n }\n });\n\n return change.normalize();\n };\n\n return core;\n};\n\nexport default (options) => {\n const { type, icon } = options;\n\n const core = createEditList();\n\n // eslint-disable-next-line react/display-name\n core.renderNode = (props) => {\n const { node, attributes, children } = props;\n\n switch (node.type) {\n case 'ul_list':\n return <ul {...attributes}>{children}</ul>;\n case 'ol_list':\n return <ol {...attributes}>{children}</ol>;\n case 'list_item':\n return <li {...attributes}>{children}</li>;\n }\n };\n\n core.toolbar = {\n isMark: false,\n type,\n icon,\n isActive: (value, type) => {\n if (!core.utils.isSelectionInList(value)) {\n return false;\n }\n const current = core.utils.getCurrentList(value);\n return current ? current.type === type : false;\n },\n onClick: (value, onChange) => {\n log('[onClick]', value);\n const inList = core.utils.isSelectionInList(value);\n if (inList) {\n const change = value.change().call(core.changes.unwrapList);\n onChange(change);\n } else {\n const change = value.change().call(core.changes.wrapInList, type);\n onChange(change);\n }\n },\n };\n\n core.renderNode.propTypes = {\n node: PropTypes.object,\n attributes: PropTypes.object,\n children: PropTypes.func,\n };\n\n return core;\n};\n"],"file":"index.js"}
1
+ {"version":3,"file":"index.js","names":["log","debug","b","type","next","childNodes","object","nodes","serialization","deserialize","el","name","tagName","toLowerCase","children","length","Array","from","jsx","serialize","isBlockActive","editor","format","selection","Editor","at","unhangRange","match","node","isEditor","SlateElement","isElement","createEditList","core","changes","wrapInList","isActive","isList","LIST_TYPES","includes","Transforms","unwrapNodes","n","split","newProperties","setNodes","block","wrapNodes","options","icon","supports","renderNode","props","attributes","toolbar","isMark","onClick","propTypes","PropTypes","func"],"sources":["../../../src/plugins/list/index.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport debug from 'debug';\nimport { Editor, Element as SlateElement, Transforms } from 'slate';\nimport { jsx } from \"slate-hyperscript\";\n\nconst log = debug('@pie-lib:editable-html:plugins:list');\n\nconst b = (type, next, childNodes) => ({\n object: 'block',\n type,\n nodes: next(childNodes)\n});\n\nexport const serialization = {\n deserialize(el, next) {\n const name = el.tagName.toLowerCase();\n const children = el.children.length ? Array.from(el.children) : el.childNodes;\n\n if (name === 'li') {\n return jsx(\n 'element',\n {\n type: 'li'\n },\n next(children)\n );\n }\n\n if (name === 'ul') {\n return jsx(\n 'element',\n {\n type: 'ul'\n },\n next(children)\n );\n }\n\n if (name === 'ol') {\n return jsx(\n 'element',\n {\n type: 'ol'\n },\n next(children)\n );\n }\n },\n serialize(object, children) {\n if (object.type === 'list_item') {\n return <li>{children}</li>;\n }\n\n if (object.type === 'ul_list') {\n return <ul>{children}</ul>;\n }\n\n if (object.type === 'ol_list') {\n return <ol>{children}</ol>;\n }\n }\n};\n\nconst isBlockActive = (editor, format) => {\n const { selection } = editor;\n if (!selection) return false;\n\n const [match] = Array.from(\n Editor.nodes(editor, {\n at: Editor.unhangRange(editor, selection),\n match: node => !Editor.isEditor(node) && SlateElement.isElement(node) && node.type === format\n })\n );\n\n return !!match;\n};\n\nconst createEditList = () => {\n const core = {\n changes: {}\n };\n\n core.changes.wrapInList = (editor, format) => {\n const isActive = isBlockActive(editor, format);\n const isList = LIST_TYPES.includes(format);\n\n Transforms.unwrapNodes(editor, {\n match: n =>\n !Editor.isEditor(n) &&\n SlateElement.isElement(n) &&\n LIST_TYPES.includes(n.type),\n split: true\n });\n\n const newProperties = {\n type: isActive ? 'paragraph' : isList ? 'list_item' : format\n };\n\n Transforms.setNodes(editor, newProperties);\n\n if (!isActive && isList) {\n const block = { type: format, children: [] };\n Transforms.wrapNodes(editor, block);\n }\n };\n\n return core;\n};\n\nconst LIST_TYPES = ['ol_list', 'ul_list', 'list_item'];\n\nexport default options => {\n const { type, icon } = options;\n\n const core = createEditList();\n\n core.supports = node => LIST_TYPES.includes(node.type);\n\n core.renderNode = props => {\n const { node, attributes, children } = props;\n\n switch (node.type) {\n case 'ul_list':\n return <ul {...attributes}>{children}</ul>;\n case 'ol_list':\n return <ol {...attributes}>{children}</ol>;\n case 'list_item':\n return <li {...attributes}>{children}</li>;\n }\n };\n\n core.toolbar = {\n isMark: false,\n type,\n icon,\n isActive: isBlockActive,\n onClick: editor => {\n core.changes.wrapInList(editor, type);\n }\n };\n\n core.renderNode.propTypes = {\n node: PropTypes.object,\n attributes: PropTypes.object,\n children: PropTypes.func\n };\n\n return core;\n};\n"],"mappings":"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"}
@@ -13,23 +13,27 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
13
13
 
14
14
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
15
 
16
- var _Functions = _interopRequireDefault(require("@material-ui/icons/Functions"));
16
+ var _react = _interopRequireDefault(require("react"));
17
17
 
18
18
  var _slate = require("slate");
19
19
 
20
+ var _slateReact = require("slate-react");
21
+
22
+ var _slateHyperscript = require("slate-hyperscript");
23
+
24
+ var _Functions = _interopRequireDefault(require("@material-ui/icons/Functions"));
25
+
20
26
  var _mathToolbar = require("@pie-lib/math-toolbar");
21
27
 
22
28
  var _mathRendering = require("@pie-lib/math-rendering");
23
29
 
24
- var _react = _interopRequireDefault(require("react"));
25
-
26
30
  var _debug = _interopRequireDefault(require("debug"));
27
31
 
28
- var _slatePropTypes = _interopRequireDefault(require("slate-prop-types"));
29
-
30
32
  var _propTypes = _interopRequireDefault(require("prop-types"));
31
33
 
32
- var _serialization = require("../../serialization");
34
+ var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
35
+
36
+ var _newSerialization = require("../../new-serialization");
33
37
 
34
38
  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; }
35
39
 
@@ -52,10 +56,11 @@ function generateAdditionalKeys() {
52
56
 
53
57
  var CustomToolbarComp = /*#__PURE__*/_react["default"].memo(function (props) {
54
58
  var node = props.node,
55
- value = props.value,
56
59
  onFocus = props.onFocus,
57
60
  onBlur = props.onBlur,
58
- onClick = props.onClick;
61
+ onClick = props.onClick,
62
+ editor = props.editor,
63
+ nodePath = props.nodePath;
59
64
 
60
65
  var _ref = props || {},
61
66
  pluginProps = _ref.pluginProps;
@@ -70,36 +75,34 @@ var CustomToolbarComp = /*#__PURE__*/_react["default"].memo(function (props) {
70
75
  controlledKeypadMode = _ref3$controlledKeypa === void 0 ? true : _ref3$controlledKeypa;
71
76
 
72
77
  var onDone = function onDone(latex) {
73
- var update = _objectSpread(_objectSpread({}, node.data.toObject()), {}, {
78
+ var update = _objectSpread(_objectSpread({}, node.data), {}, {
74
79
  latex: latex
75
80
  });
76
81
 
77
- var change = value.change().setNodeByKey(node.key, {
78
- data: update
82
+ editor.apply({
83
+ type: 'set_node',
84
+ path: nodePath,
85
+ properties: {
86
+ data: node.data
87
+ },
88
+ newProperties: {
89
+ data: update
90
+ }
79
91
  });
80
- var nextText = value.document.getNextText(node.key);
81
- change.moveFocusTo(nextText.key, 0).moveAnchorTo(nextText.key, 0);
82
- props.onToolbarDone(change, false);
83
- };
84
92
 
85
- var onChange = function onChange(latex) {
86
- var update = _objectSpread(_objectSpread({}, node.data.toObject()), {}, {
87
- latex: latex
88
- });
93
+ _slateReact.ReactEditor.focus(editor);
89
94
 
90
- var change = value.change().setNodeByKey(node.key, {
91
- data: update
95
+ _slate.Transforms.move(editor, {
96
+ distance: 1,
97
+ unit: 'offset'
92
98
  });
93
- log('call onToolbarChange:', change);
94
- props.onDataChange(node.key, update);
95
99
  };
96
100
 
97
- var latex = node.data.get('latex');
101
+ var latex = node.data.latex;
98
102
  return /*#__PURE__*/_react["default"].createElement(_mathToolbar.MathToolbar, {
99
103
  autoFocus: true,
100
104
  additionalKeys: generateAdditionalKeys(customKeys),
101
105
  latex: latex,
102
- onChange: onChange,
103
106
  onDone: onDone,
104
107
  onBlur: onBlur,
105
108
  onFocus: onFocus,
@@ -124,34 +127,39 @@ var CustomToolbarComp = /*#__PURE__*/_react["default"].memo(function (props) {
124
127
  controlledKeypadModeNext = _next$pluginProps$mat.controlledKeypadMode;
125
128
  var keypadModeChanged = keypadMode !== keypadModeNext;
126
129
  var controlledKeypadModeChanged = controlledKeypadMode !== controlledKeypadModeNext;
127
- var equal = node.equals(nodeNext);
130
+ var equal = (0, _isEqual["default"])(node, nodeNext);
128
131
  return equal && !keypadModeChanged && !controlledKeypadModeChanged;
129
132
  });
130
133
 
131
134
  exports.CustomToolbarComp = CustomToolbarComp;
132
135
  CustomToolbarComp.propTypes = {
133
- node: _slatePropTypes["default"].node.isRequired,
134
- value: _slatePropTypes["default"].value,
136
+ editor: _propTypes["default"].object,
137
+ node: _propTypes["default"].shape({
138
+ type: _propTypes["default"].string,
139
+ children: _propTypes["default"].array,
140
+ data: _propTypes["default"].object
141
+ }).isRequired,
142
+ value: _propTypes["default"].arrayOf(_propTypes["default"].shape({
143
+ type: _propTypes["default"].string,
144
+ children: _propTypes["default"].array,
145
+ data: _propTypes["default"].object
146
+ })).isRequired,
135
147
  onToolbarDone: _propTypes["default"].func,
136
- onDataChange: _propTypes["default"].func,
137
148
  onFocus: _propTypes["default"].func,
138
149
  onClick: _propTypes["default"].func,
139
150
  onBlur: _propTypes["default"].func
140
151
  };
152
+ var mathTypes = ['math', 'mathml'];
141
153
 
142
154
  function MathPlugin() {
143
155
  return {
144
156
  name: 'math',
145
157
  toolbar: {
146
158
  icon: /*#__PURE__*/_react["default"].createElement(_Functions["default"], null),
147
- onClick: function onClick(value, onChange) {
159
+ onClick: function onClick(editor) {
148
160
  log('[insertMath]');
149
161
  var math = inlineMath();
150
- var change = value.change().insertInline(math);
151
- onChange(change);
152
- },
153
- supports: function supports(node) {
154
- return node && node.object === 'inline' && node.type === 'math';
162
+ editor.insertNode(math);
155
163
  },
156
164
 
157
165
  /**
@@ -163,6 +171,23 @@ function MathPlugin() {
163
171
  */
164
172
  CustomToolbarComp: CustomToolbarComp
165
173
  },
174
+ rules: function rules(editor) {
175
+ var isVoid = editor.isVoid,
176
+ isInline = editor.isInline;
177
+
178
+ editor.isVoid = function (element) {
179
+ return mathTypes.includes(element.type) ? true : isVoid(element);
180
+ };
181
+
182
+ editor.isInline = function (element) {
183
+ return mathTypes.includes(element.type) ? true : isInline(element);
184
+ };
185
+
186
+ return editor;
187
+ },
188
+ supports: function supports(node) {
189
+ return mathTypes.includes(node.type);
190
+ },
166
191
  schema: {
167
192
  document: {
168
193
  match: [{
@@ -189,12 +214,13 @@ function MathPlugin() {
189
214
 
190
215
 
191
216
  if (props.node.type === 'mathml') {
192
- var html = props.node.data.get('html');
193
- return /*#__PURE__*/_react["default"].createElement("span", (0, _extends2["default"])({}, props.attributes, {
217
+ var html = props.node.data.html;
218
+ return /*#__PURE__*/_react["default"].createElement("span", null, /*#__PURE__*/_react["default"].createElement("span", (0, _extends2["default"])({}, props.attributes, {
219
+ contentEditable: false,
194
220
  dangerouslySetInnerHTML: {
195
221
  __html: html
196
222
  }
197
- }));
223
+ })), props.children);
198
224
  }
199
225
  }
200
226
  };
@@ -206,14 +232,15 @@ MathPlugin.DOLLAR = 'dollar';
206
232
  MathPlugin.DOUBLE_DOLLAR = 'double_dollar';
207
233
 
208
234
  var inlineMath = function inlineMath() {
209
- return _slate.Inline.create({
210
- object: 'inline',
235
+ return {
211
236
  type: 'math',
212
- isVoid: true,
213
237
  data: {
214
238
  latex: ''
215
- }
216
- });
239
+ },
240
+ children: [{
241
+ text: ''
242
+ }]
243
+ };
217
244
  };
218
245
 
219
246
  exports.inlineMath = inlineMath;
@@ -258,7 +285,7 @@ var lessThanHandling = function lessThanHandling(input) {
258
285
  };
259
286
 
260
287
  var serialization = {
261
- deserialize: function deserialize(el) {
288
+ deserialize: function deserialize(el, children) {
262
289
  var tagName = getTagName(el);
263
290
  /**
264
291
  * This is used for when there's a wrapper over the mathml element.
@@ -268,7 +295,7 @@ var serialization = {
268
295
  * This is for legacy content only since our math rendering is valid for the core slate rules
269
296
  */
270
297
 
271
- var hasMathChild = _serialization.BLOCK_TAGS[tagName] && el.childNodes.length === 1 && getTagName(el.firstChild) === 'math';
298
+ var hasMathChild = _newSerialization.BLOCK_TAGS[tagName] && el.childNodes.length === 1 && getTagName(el.firstChild) === 'math';
272
299
  log('[deserialize] name: ', tagName);
273
300
  /**
274
301
  * This is here in order to be able to render mathml content
@@ -276,14 +303,12 @@ var serialization = {
276
303
 
277
304
  if (tagName === 'math' || el.dataset && el.dataset.type === 'mathml' || hasMathChild) {
278
305
  var newHtml = hasMathChild ? el.innerHTML : el.outerHTML;
279
- return {
280
- object: 'inline',
281
- isVoid: true,
306
+ return (0, _slateHyperscript.jsx)('element', {
282
307
  type: 'mathml',
283
308
  data: {
284
309
  html: newHtml
285
310
  }
286
- };
311
+ });
287
312
  }
288
313
 
289
314
  if (el.nodeType === TEXT_NODE) {
@@ -304,24 +329,23 @@ var serialization = {
304
329
  wrapType = _unWrapMath.wrapType;
305
330
 
306
331
  log('[deserialize]: noBrackets: ', unwrapped, wrapType);
307
- return {
308
- object: 'inline',
332
+ return (0, _slateHyperscript.jsx)('element', {
309
333
  type: 'math',
310
- isVoid: true,
311
- nodes: [],
312
334
  data: {
313
335
  latex: unwrapped,
314
336
  wrapper: wrapType
315
337
  }
316
- };
338
+ });
317
339
  }
318
340
  },
319
341
  serialize: function serialize(object) {
320
342
  if (object.type === 'math') {
321
- var l = object.data.get('latex');
322
- var wrapper = object.data.get('wrapper');
323
- log('[serialize] latex: ', l);
324
- var decoded = htmlDecode(lessThanHandling(l));
343
+ var _ref4 = object.data || {},
344
+ latex = _ref4.latex,
345
+ wrapper = _ref4.wrapper;
346
+
347
+ log('[serialize] latex: ', latex);
348
+ var decoded = htmlDecode(lessThanHandling(latex));
325
349
  return /*#__PURE__*/_react["default"].createElement("span", {
326
350
  "data-latex": "",
327
351
  "data-raw": decoded
@@ -333,7 +357,9 @@ var serialization = {
333
357
 
334
358
 
335
359
  if (object.type === 'mathml') {
336
- var html = object.data.get('html');
360
+ var _ref5 = object.data || {},
361
+ html = _ref5.html;
362
+
337
363
  return /*#__PURE__*/_react["default"].createElement("span", {
338
364
  "data-type": "mathml",
339
365
  dangerouslySetInnerHTML: {
@@ -344,4 +370,4 @@ var serialization = {
344
370
  }
345
371
  };
346
372
  exports.serialization = serialization;
347
- //# sourceMappingURL=index.js.map
373
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2ciLCJkZWJ1ZyIsIlRFWFRfTk9ERSIsImdlbmVyYXRlQWRkaXRpb25hbEtleXMiLCJrZXlEYXRhIiwibWFwIiwia2V5IiwibmFtZSIsImxhdGV4Iiwid3JpdGUiLCJsYWJlbCIsIkN1c3RvbVRvb2xiYXJDb21wIiwiUmVhY3QiLCJtZW1vIiwicHJvcHMiLCJub2RlIiwib25Gb2N1cyIsIm9uQmx1ciIsIm9uQ2xpY2siLCJlZGl0b3IiLCJub2RlUGF0aCIsInBsdWdpblByb3BzIiwibWF0aCIsImtleXBhZE1vZGUiLCJjdXN0b21LZXlzIiwiY29udHJvbGxlZEtleXBhZE1vZGUiLCJvbkRvbmUiLCJ1cGRhdGUiLCJkYXRhIiwiYXBwbHkiLCJ0eXBlIiwicGF0aCIsInByb3BlcnRpZXMiLCJuZXdQcm9wZXJ0aWVzIiwiUmVhY3RFZGl0b3IiLCJmb2N1cyIsIlRyYW5zZm9ybXMiLCJtb3ZlIiwiZGlzdGFuY2UiLCJ1bml0IiwicHJldiIsIm5leHQiLCJub2RlTmV4dCIsImtleXBhZE1vZGVOZXh0IiwiY29udHJvbGxlZEtleXBhZE1vZGVOZXh0Iiwia2V5cGFkTW9kZUNoYW5nZWQiLCJjb250cm9sbGVkS2V5cGFkTW9kZUNoYW5nZWQiLCJlcXVhbCIsImlzRXF1YWwiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJvYmplY3QiLCJzaGFwZSIsInN0cmluZyIsImNoaWxkcmVuIiwiYXJyYXkiLCJpc1JlcXVpcmVkIiwidmFsdWUiLCJhcnJheU9mIiwib25Ub29sYmFyRG9uZSIsImZ1bmMiLCJtYXRoVHlwZXMiLCJNYXRoUGx1Z2luIiwidG9vbGJhciIsImljb24iLCJpbmxpbmVNYXRoIiwiaW5zZXJ0Tm9kZSIsInJ1bGVzIiwiaXNWb2lkIiwiaXNJbmxpbmUiLCJlbGVtZW50IiwiaW5jbHVkZXMiLCJzdXBwb3J0cyIsInNjaGVtYSIsImRvY3VtZW50IiwibWF0Y2giLCJwbHVnaW5TdHlsZXMiLCJwYXJlbnROb2RlIiwicCIsInBvc2l0aW9uIiwidG9wIiwicmVuZGVyTm9kZSIsImh0bWwiLCJhdHRyaWJ1dGVzIiwiX19odG1sIiwiUk9VTkRfQlJBQ0tFVFMiLCJTUVVBUkVfQlJBQ0tFVFMiLCJET0xMQVIiLCJET1VCTEVfRE9MTEFSIiwidGV4dCIsImh0bWxEZWNvZGUiLCJpbnB1dCIsImRvYyIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsImRvY3VtZW50RWxlbWVudCIsInRleHRDb250ZW50IiwiZ2V0VGFnTmFtZSIsImVsIiwidGFnTmFtZSIsInRvTG93ZXJDYXNlIiwibGVzc1RoYW5IYW5kbGluZyIsImFycm93U3BsaXQiLCJzcGxpdCIsImxlbmd0aCIsInJlZHVjZSIsInN0IiwicGFydCIsInNlcmlhbGl6YXRpb24iLCJkZXNlcmlhbGl6ZSIsImhhc01hdGhDaGlsZCIsIkJMT0NLX1RBR1MiLCJjaGlsZE5vZGVzIiwiZmlyc3RDaGlsZCIsImRhdGFzZXQiLCJuZXdIdG1sIiwiaW5uZXJIVE1MIiwib3V0ZXJIVE1MIiwianN4Iiwibm9kZVR5cGUiLCJoYXNMYXRleCIsImhhc0F0dHJpYnV0ZSIsInVuV3JhcE1hdGgiLCJ1bndyYXBwZWQiLCJ3cmFwVHlwZSIsIndyYXBwZXIiLCJzZXJpYWxpemUiLCJkZWNvZGVkIiwid3JhcE1hdGgiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGx1Z2lucy9tYXRoL2luZGV4LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRWRpdG9yLCBJbmxpbmUsIFRyYW5zZm9ybXMgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBSZWFjdEVkaXRvciB9IGZyb20gJ3NsYXRlLXJlYWN0JztcbmltcG9ydCB7IGpzeCB9IGZyb20gJ3NsYXRlLWh5cGVyc2NyaXB0JztcbmltcG9ydCBGdW5jdGlvbnMgZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL0Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBNYXRoUHJldmlldywgTWF0aFRvb2xiYXIgfSBmcm9tICdAcGllLWxpYi9tYXRoLXRvb2xiYXInO1xuaW1wb3J0IHsgd3JhcE1hdGgsIHVuV3JhcE1hdGggfSBmcm9tICdAcGllLWxpYi9tYXRoLXJlbmRlcmluZyc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcblxuaW1wb3J0IHsgQkxPQ0tfVEFHUyB9IGZyb20gJy4uLy4uL25ldy1zZXJpYWxpemF0aW9uJztcbmNvbnN0IGxvZyA9IGRlYnVnKCdAcGllLWxpYjplZGl0YWJsZS1odG1sOnBsdWdpbnM6bWF0aCcpO1xuXG5jb25zdCBURVhUX05PREUgPSAzO1xuXG5mdW5jdGlvbiBnZW5lcmF0ZUFkZGl0aW9uYWxLZXlzKGtleURhdGEgPSBbXSkge1xuICByZXR1cm4ga2V5RGF0YS5tYXAoa2V5ID0+ICh7XG4gICAgbmFtZToga2V5LFxuICAgIGxhdGV4OiBrZXksXG4gICAgd3JpdGU6IGtleSxcbiAgICBsYWJlbDoga2V5XG4gIH0pKTtcbn1cblxuZXhwb3J0IGNvbnN0IEN1c3RvbVRvb2xiYXJDb21wID0gUmVhY3QubWVtbyhcbiAgcHJvcHMgPT4ge1xuICAgIGNvbnN0IHsgbm9kZSwgb25Gb2N1cywgb25CbHVyLCBvbkNsaWNrLCBlZGl0b3IsIG5vZGVQYXRoIH0gPSBwcm9wcztcbiAgICBjb25zdCB7IHBsdWdpblByb3BzIH0gPSBwcm9wcyB8fCB7fTtcbiAgICBjb25zdCB7IG1hdGggfSA9IHBsdWdpblByb3BzIHx8IHt9O1xuICAgIGNvbnN0IHsga2V5cGFkTW9kZSwgY3VzdG9tS2V5cywgY29udHJvbGxlZEtleXBhZE1vZGUgPSB0cnVlIH0gPSBtYXRoIHx8IHt9O1xuXG4gICAgY29uc3Qgb25Eb25lID0gbGF0ZXggPT4ge1xuICAgICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgICAuLi5ub2RlLmRhdGEsXG4gICAgICAgIGxhdGV4XG4gICAgICB9O1xuICAgICAgZWRpdG9yLmFwcGx5KHtcbiAgICAgICAgdHlwZTogJ3NldF9ub2RlJyxcbiAgICAgICAgcGF0aDogbm9kZVBhdGgsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBkYXRhOiBub2RlLmRhdGFcbiAgICAgICAgfSxcbiAgICAgICAgbmV3UHJvcGVydGllczogeyBkYXRhOiB1cGRhdGUgfVxuICAgICAgfSk7XG4gICAgICBSZWFjdEVkaXRvci5mb2N1cyhlZGl0b3IpO1xuICAgICAgVHJhbnNmb3Jtcy5tb3ZlKGVkaXRvciwgeyBkaXN0YW5jZTogMSwgdW5pdDogJ29mZnNldCcgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxhdGV4ID0gbm9kZS5kYXRhLmxhdGV4O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxNYXRoVG9vbGJhclxuICAgICAgICBhdXRvRm9jdXNcbiAgICAgICAgYWRkaXRpb25hbEtleXM9e2dlbmVyYXRlQWRkaXRpb25hbEtleXMoY3VzdG9tS2V5cyl9XG4gICAgICAgIGxhdGV4PXtsYXRleH1cbiAgICAgICAgb25Eb25lPXtvbkRvbmV9XG4gICAgICAgIG9uQmx1cj17b25CbHVyfVxuICAgICAgICBvbkZvY3VzPXtvbkZvY3VzfVxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICBrZXlwYWRNb2RlPXtrZXlwYWRNb2RlfVxuICAgICAgICBjb250cm9sbGVkS2V5cGFkTW9kZT17Y29udHJvbGxlZEtleXBhZE1vZGV9XG4gICAgICAvPlxuICAgICk7XG4gIH0sXG4gIChwcmV2LCBuZXh0KSA9PiB7XG4gICAgY29uc3QgeyBub2RlLCBwbHVnaW5Qcm9wczogeyBtYXRoOiB7IGtleXBhZE1vZGUsIGNvbnRyb2xsZWRLZXlwYWRNb2RlIH0gPSB7fSB9ID0ge30gfSA9IHByZXY7XG4gICAgY29uc3Qge1xuICAgICAgbm9kZTogbm9kZU5leHQsXG4gICAgICBwbHVnaW5Qcm9wczoge1xuICAgICAgICBtYXRoOiB7IGtleXBhZE1vZGU6IGtleXBhZE1vZGVOZXh0LCBjb250cm9sbGVkS2V5cGFkTW9kZTogY29udHJvbGxlZEtleXBhZE1vZGVOZXh0IH0gPSB7fVxuICAgICAgfSA9IHt9XG4gICAgfSA9IG5leHQ7XG4gICAgY29uc3Qga2V5cGFkTW9kZUNoYW5nZWQgPSBrZXlwYWRNb2RlICE9PSBrZXlwYWRNb2RlTmV4dDtcbiAgICBjb25zdCBjb250cm9sbGVkS2V5cGFkTW9kZUNoYW5nZWQgPSBjb250cm9sbGVkS2V5cGFkTW9kZSAhPT0gY29udHJvbGxlZEtleXBhZE1vZGVOZXh0O1xuXG4gICAgY29uc3QgZXF1YWwgPSBpc0VxdWFsKG5vZGUsIG5vZGVOZXh0KTtcbiAgICByZXR1cm4gZXF1YWwgJiYgIWtleXBhZE1vZGVDaGFuZ2VkICYmICFjb250cm9sbGVkS2V5cGFkTW9kZUNoYW5nZWQ7XG4gIH1cbik7XG5cbkN1c3RvbVRvb2xiYXJDb21wLnByb3BUeXBlcyA9IHtcbiAgZWRpdG9yOiBQcm9wVHlwZXMub2JqZWN0LFxuICBub2RlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY2hpbGRyZW46IFByb3BUeXBlcy5hcnJheSxcbiAgICBkYXRhOiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLmlzUmVxdWlyZWQsXG4gIHZhbHVlOiBQcm9wVHlwZXMuYXJyYXlPZihcbiAgICBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgdHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGNoaWxkcmVuOiBQcm9wVHlwZXMuYXJyYXksXG4gICAgICBkYXRhOiBQcm9wVHlwZXMub2JqZWN0XG4gICAgfSlcbiAgKS5pc1JlcXVpcmVkLFxuICBvblRvb2xiYXJEb25lOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jXG59O1xuXG5jb25zdCBtYXRoVHlwZXMgPSBbJ21hdGgnLCAnbWF0aG1sJ107XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1hdGhQbHVnaW4oKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ21hdGgnLFxuICAgIHRvb2xiYXI6IHtcbiAgICAgIGljb246IDxGdW5jdGlvbnMgLz4sXG4gICAgICBvbkNsaWNrOiBlZGl0b3IgPT4ge1xuICAgICAgICBsb2coJ1tpbnNlcnRNYXRoXScpO1xuICAgICAgICBjb25zdCBtYXRoID0gaW5saW5lTWF0aCgpO1xuXG4gICAgICAgIGVkaXRvci5pbnNlcnROb2RlKG1hdGgpO1xuICAgICAgfSxcbiAgICAgIC8qKlxuICAgICAgICogUmV0dXJuIGEgcmVhY3QgY29tcG9uZW50IGZ1bmN0aW9uXG4gICAgICAgKiBAcGFyYW0gbm9kZSB7U2xhdGUuTm9kZX1cbiAgICAgICAqIEBwYXJhbSB2YWx1ZSB7U2xhdGUuVmFsdWV9XG4gICAgICAgKiBAcGFyYW0gb25Eb25lIHsoY2hhbmdlPzogU2xhdGUuQ2hhbmdlLCBmaW5pc2hFZGl0aW5nIDpib29sZWEpID0+IHZvaWR9IC0gYSBmdW5jdGlvbiB0byBjYWxsIG9uY2UgdGhlIHRvb2xiYXJcbiAgICAgICAqICAgaGFzIG1hZGUgYW55IGNoYW5nZXMsIGNhbGwgd2l0aCB0aGUgbm9kZS5rZXkgYW5kIGEgZGF0YSBvYmplY3QuXG4gICAgICAgKi9cbiAgICAgIEN1c3RvbVRvb2xiYXJDb21wXG4gICAgfSxcbiAgICBydWxlczogZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHsgaXNWb2lkLCBpc0lubGluZSB9ID0gZWRpdG9yO1xuXG4gICAgICBlZGl0b3IuaXNWb2lkID0gZWxlbWVudCA9PiB7XG4gICAgICAgIHJldHVybiBtYXRoVHlwZXMuaW5jbHVkZXMoZWxlbWVudC50eXBlKSA/IHRydWUgOiBpc1ZvaWQoZWxlbWVudCk7XG4gICAgICB9O1xuXG4gICAgICBlZGl0b3IuaXNJbmxpbmUgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgcmV0dXJuIG1hdGhUeXBlcy5pbmNsdWRlcyhlbGVtZW50LnR5cGUpID8gdHJ1ZSA6IGlzSW5saW5lKGVsZW1lbnQpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGVkaXRvcjtcbiAgICB9LFxuICAgIHN1cHBvcnRzOiBub2RlID0+IG1hdGhUeXBlcy5pbmNsdWRlcyhub2RlLnR5cGUpLFxuICAgIHNjaGVtYToge1xuICAgICAgZG9jdW1lbnQ6IHsgbWF0Y2g6IFt7IHR5cGU6ICdtYXRoJyB9XSB9XG4gICAgfSxcblxuICAgIHBsdWdpblN0eWxlczogKG5vZGUsIHBhcmVudE5vZGUsIHApID0+IHtcbiAgICAgIGlmIChwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgdG9wOiAnaW5pdGlhbCdcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVuZGVyTm9kZTogcHJvcHMgPT4ge1xuICAgICAgaWYgKHByb3BzLm5vZGUudHlwZSA9PT0gJ21hdGgnKSB7XG4gICAgICAgIGxvZygnW3JlbmRlck5vZGVdOiBkYXRhOicsIHByb3BzLm5vZGUuZGF0YSk7XG4gICAgICAgIHJldHVybiA8TWF0aFByZXZpZXcgey4uLnByb3BzfSAvPjtcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBIZXJlIGZvciByZW5kZXJpbmcgbWF0aG1sIGNvbnRlbnRcbiAgICAgICAqL1xuICAgICAgaWYgKHByb3BzLm5vZGUudHlwZSA9PT0gJ21hdGhtbCcpIHtcbiAgICAgICAgY29uc3QgeyBkYXRhOiB7IGh0bWwgfSB9ID0gcHJvcHMubm9kZTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgPHNwYW4gey4uLnByb3BzLmF0dHJpYnV0ZXN9IGNvbnRlbnRFZGl0YWJsZT17ZmFsc2V9IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogaHRtbCB9fSAvPlxuICAgICAgICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbk1hdGhQbHVnaW4uUk9VTkRfQlJBQ0tFVFMgPSAncm91bmRfYnJhY2tldHMnO1xuTWF0aFBsdWdpbi5TUVVBUkVfQlJBQ0tFVFMgPSAnc3F1YXJlX2JyYWNrZXRzJztcbk1hdGhQbHVnaW4uRE9MTEFSID0gJ2RvbGxhcic7XG5NYXRoUGx1Z2luLkRPVUJMRV9ET0xMQVIgPSAnZG91YmxlX2RvbGxhcic7XG5cbmV4cG9ydCBjb25zdCBpbmxpbmVNYXRoID0gKCkgPT4gKHtcbiAgdHlwZTogJ21hdGgnLFxuICBkYXRhOiB7XG4gICAgbGF0ZXg6ICcnXG4gIH0sXG4gIGNoaWxkcmVuOiBbeyB0ZXh0OiAnJyB9XVxufSk7XG5cbmNvbnN0IGh0bWxEZWNvZGUgPSBpbnB1dCA9PiB7XG4gIGNvbnN0IGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaW5wdXQsICd0ZXh0L2h0bWwnKTtcblxuICByZXR1cm4gZG9jLmRvY3VtZW50RWxlbWVudC50ZXh0Q29udGVudDtcbn07XG5cbmNvbnN0IGdldFRhZ05hbWUgPSBlbCA9PiB7XG4gIHJldHVybiAoKGVsICYmIGVsLnRhZ05hbWUpIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xufTtcblxuLyoqXG4gKiBNYWtlcyBzdXJlIHRoYXQgc3RyaW5ncyB0aGF0IGNvbnRhaW4gc3R1ZmYgbGlrZTpcbiAqIHg8eSBhcmUgbm90IHRyYW5zZm9ybWVkIGludG8geCBieSB0aGUgRE9NUGFyc2VyIGJlY2F1c2UgaXQgdGhpbmtzXG4gKiB0aGF0IDx5IGlzIHRoZSBzdGFydCBvZiBhIGRvbSBlbGVtZW50IHRhZ1xuICogQHBhcmFtIGlucHV0XG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuY29uc3QgbGVzc1RoYW5IYW5kbGluZyA9IGlucHV0ID0+IHtcbiAgY29uc3QgYXJyb3dTcGxpdCA9IGlucHV0LnNwbGl0KCc8Jyk7XG5cbiAgLy8gaWYgd2UgZG9uJ3QgaGF2ZSBhdCBsZWFzdCAyIGNoYXJhY3RlcnMgdGhlcmUncyBubyBwb2ludCBpbiBjaGVja2luZ1xuICBpZiAoaW5wdXQubGVuZ3RoID4gMikge1xuICAgIHJldHVybiBhcnJvd1NwbGl0LnJlZHVjZSgoc3QsIHBhcnQpID0+IHtcbiAgICAgIC8qXG4gICAgICAgV2UgY2hlY2sgaWYgdGhpcyBlbGVtZW50IHJlc3VsdGVkIGlzOlxuICAgICAgIGRpdiAtIGNvbnRpbnVhdGlvbiBvZiBhIGJlZ2lubmluZyBvZiBhIEhUTUwgZWxlbWVudFxuICAgICAgIC9kaXYgLSBjbG9zaW5nIG9mIGEgSFRNTCB0YWdcbiAgICAgICBici8+IC0gYmVnaW5uaW5nIGFuZCBjbG9zaW5nIG9mIGEgaHRtbCBUQUdcbiAgICAgICAqL1xuICAgICAgaWYgKHBhcnQubWF0Y2goLzxbYS16QS1aL11bXFxzXFxTXSo+L2dpKSkge1xuICAgICAgICByZXR1cm4gYCR7c3R9JHtzdCA/ICc8JyA6ICcnfSR7cGFydH1gO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYCR7c3R9JHtzdCA/ICcmbHQ7JyA6ICcnfSR7cGFydH1gO1xuICAgIH0sICcnKTtcbiAgfVxuXG4gIHJldHVybiBpbnB1dDtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXJpYWxpemF0aW9uID0ge1xuICBkZXNlcmlhbGl6ZShlbCwgY2hpbGRyZW4pIHtcbiAgICBjb25zdCB0YWdOYW1lID0gZ2V0VGFnTmFtZShlbCk7XG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB1c2VkIGZvciB3aGVuIHRoZXJlJ3MgYSB3cmFwcGVyIG92ZXIgdGhlIG1hdGhtbCBlbGVtZW50LlxuICAgICAqIEJlY2F1c2Ugb2YgdGhpcyBzbGF0ZSBydWxlOiBcIk9ubHkgYWxsb3cgYmxvY2sgbm9kZXMgb3IgaW5saW5lIGFuZCB0ZXh0IG5vZGVzIGluIGJsb2Nrcy5cIlxuICAgICAqIFRoZSBlbGVtZW50IHRoYXQgY29udGFpbnMgb25seSB0aGUgbWF0aG1sIGlzIHJlbW92ZWQgKGFsb25nIHdpdGggdGhlIG1hdGgpIGJlY2F1c2UgaXQgaGFzXG4gICAgICogYW4gaW5saW5lIGNoaWxkIGFuZCB0aGUgYmxvY2sgaXMgb2YgdHlwZSBibG9ja1xuICAgICAqIFRoaXMgaXMgZm9yIGxlZ2FjeSBjb250ZW50IG9ubHkgc2luY2Ugb3VyIG1hdGggcmVuZGVyaW5nIGlzIHZhbGlkIGZvciB0aGUgY29yZSBzbGF0ZSBydWxlc1xuICAgICAqL1xuICAgIGNvbnN0IGhhc01hdGhDaGlsZCA9XG4gICAgICBCTE9DS19UQUdTW3RhZ05hbWVdICYmIGVsLmNoaWxkTm9kZXMubGVuZ3RoID09PSAxICYmIGdldFRhZ05hbWUoZWwuZmlyc3RDaGlsZCkgPT09ICdtYXRoJztcbiAgICBsb2coJ1tkZXNlcmlhbGl6ZV0gbmFtZTogJywgdGFnTmFtZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGhlcmUgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byByZW5kZXIgbWF0aG1sIGNvbnRlbnRcbiAgICAgKi9cbiAgICBpZiAodGFnTmFtZSA9PT0gJ21hdGgnIHx8IChlbC5kYXRhc2V0ICYmIGVsLmRhdGFzZXQudHlwZSA9PT0gJ21hdGhtbCcpIHx8IGhhc01hdGhDaGlsZCkge1xuICAgICAgY29uc3QgbmV3SHRtbCA9IGhhc01hdGhDaGlsZCA/IGVsLmlubmVySFRNTCA6IGVsLm91dGVySFRNTDtcblxuICAgICAgcmV0dXJuIGpzeCgnZWxlbWVudCcsIHtcbiAgICAgICAgdHlwZTogJ21hdGhtbCcsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBodG1sOiBuZXdIdG1sXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChlbC5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRhZ05hbWUgIT09ICdzcGFuJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc0xhdGV4ID0gZWwuaGFzQXR0cmlidXRlKCdkYXRhLWxhdGV4JykgfHwgZWwuaGFzQXR0cmlidXRlKCdsYXRleCcpO1xuXG4gICAgaWYgKGhhc0xhdGV4KSB7XG4gICAgICBjb25zdCBsYXRleCA9IGh0bWxEZWNvZGUoZWwuaW5uZXJIVE1MKTtcbiAgICAgIGNvbnN0IHsgdW53cmFwcGVkLCB3cmFwVHlwZSB9ID0gdW5XcmFwTWF0aChsYXRleCk7XG4gICAgICBsb2coJ1tkZXNlcmlhbGl6ZV06IG5vQnJhY2tldHM6ICcsIHVud3JhcHBlZCwgd3JhcFR5cGUpO1xuXG4gICAgICByZXR1cm4ganN4KCdlbGVtZW50Jywge1xuICAgICAgICB0eXBlOiAnbWF0aCcsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBsYXRleDogdW53cmFwcGVkLFxuICAgICAgICAgIHdyYXBwZXI6IHdyYXBUeXBlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgc2VyaWFsaXplKG9iamVjdCkge1xuICAgIGlmIChvYmplY3QudHlwZSA9PT0gJ21hdGgnKSB7XG4gICAgICBjb25zdCB7IGxhdGV4LCB3cmFwcGVyIH0gPSBvYmplY3QuZGF0YSB8fCB7fTtcbiAgICAgIGxvZygnW3NlcmlhbGl6ZV0gbGF0ZXg6ICcsIGxhdGV4KTtcbiAgICAgIGNvbnN0IGRlY29kZWQgPSBodG1sRGVjb2RlKGxlc3NUaGFuSGFuZGxpbmcobGF0ZXgpKTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxzcGFuIGRhdGEtbGF0ZXg9XCJcIiBkYXRhLXJhdz17ZGVjb2RlZH0+XG4gICAgICAgICAge3dyYXBNYXRoKGRlY29kZWQsIHdyYXBwZXIpfVxuICAgICAgICA8L3NwYW4+XG4gICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhlcmUgZm9yIHJlbmRlcmluZyBtYXRobWwgY29udGVudFxuICAgICAqL1xuICAgIGlmIChvYmplY3QudHlwZSA9PT0gJ21hdGhtbCcpIHtcbiAgICAgIGNvbnN0IHsgaHRtbCB9ID0gb2JqZWN0LmRhdGEgfHwge307XG5cbiAgICAgIHJldHVybiA8c3BhbiBkYXRhLXR5cGU9XCJtYXRobWxcIiBkYW5nZXJvdXNseVNldElubmVySFRNTD17eyBfX2h0bWw6IGh0bWwgfX0gLz47XG4gICAgfVxuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7Ozs7O0FBQ0EsSUFBTUEsR0FBRyxHQUFHLElBQUFDLGlCQUFBLEVBQU0scUNBQU4sQ0FBWjtBQUVBLElBQU1DLFNBQVMsR0FBRyxDQUFsQjs7QUFFQSxTQUFTQyxzQkFBVCxHQUE4QztFQUFBLElBQWRDLE9BQWMsdUVBQUosRUFBSTtFQUM1QyxPQUFPQSxPQUFPLENBQUNDLEdBQVIsQ0FBWSxVQUFBQyxHQUFHO0lBQUEsT0FBSztNQUN6QkMsSUFBSSxFQUFFRCxHQURtQjtNQUV6QkUsS0FBSyxFQUFFRixHQUZrQjtNQUd6QkcsS0FBSyxFQUFFSCxHQUhrQjtNQUl6QkksS0FBSyxFQUFFSjtJQUprQixDQUFMO0VBQUEsQ0FBZixDQUFQO0FBTUQ7O0FBRU0sSUFBTUssaUJBQWlCLGdCQUFHQyxpQkFBQSxDQUFNQyxJQUFOLENBQy9CLFVBQUFDLEtBQUssRUFBSTtFQUNQLElBQVFDLElBQVIsR0FBNkRELEtBQTdELENBQVFDLElBQVI7RUFBQSxJQUFjQyxPQUFkLEdBQTZERixLQUE3RCxDQUFjRSxPQUFkO0VBQUEsSUFBdUJDLE1BQXZCLEdBQTZESCxLQUE3RCxDQUF1QkcsTUFBdkI7RUFBQSxJQUErQkMsT0FBL0IsR0FBNkRKLEtBQTdELENBQStCSSxPQUEvQjtFQUFBLElBQXdDQyxNQUF4QyxHQUE2REwsS0FBN0QsQ0FBd0NLLE1BQXhDO0VBQUEsSUFBZ0RDLFFBQWhELEdBQTZETixLQUE3RCxDQUFnRE0sUUFBaEQ7O0VBQ0EsV0FBd0JOLEtBQUssSUFBSSxFQUFqQztFQUFBLElBQVFPLFdBQVIsUUFBUUEsV0FBUjs7RUFDQSxZQUFpQkEsV0FBVyxJQUFJLEVBQWhDO0VBQUEsSUFBUUMsSUFBUixTQUFRQSxJQUFS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