@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.
- package/CHANGELOG.md +0 -302
- package/lib/components.js +116 -0
- package/lib/components.js.map +1 -0
- package/lib/editor.js +418 -103
- package/lib/editor.js.map +1 -1
- package/lib/index.js +101 -155
- package/lib/index.js.map +1 -1
- package/lib/new-serialization.js +320 -0
- package/lib/new-serialization.js.map +1 -0
- package/lib/old-serialization.js +330 -0
- package/lib/parse-html.js +1 -1
- package/lib/parse-html.js.map +1 -1
- package/lib/plugins/characters/custom-popper.js +1 -1
- package/lib/plugins/characters/custom-popper.js.map +1 -1
- package/lib/plugins/characters/index.js +21 -19
- package/lib/plugins/characters/index.js.map +1 -1
- package/lib/plugins/characters/utils.js +1 -1
- package/lib/plugins/characters/utils.js.map +1 -1
- package/lib/plugins/hotKeys/index.js +67 -0
- package/lib/plugins/hotKeys/index.js.map +1 -0
- package/lib/plugins/image/alt-dialog.js +1 -6
- package/lib/plugins/image/alt-dialog.js.map +1 -1
- package/lib/plugins/image/component.js +70 -53
- package/lib/plugins/image/component.js.map +1 -1
- package/lib/plugins/image/image-toolbar.js +7 -9
- package/lib/plugins/image/image-toolbar.js.map +1 -1
- package/lib/plugins/image/index.js +83 -27
- package/lib/plugins/image/index.js.map +1 -1
- package/lib/plugins/image/insert-image-handler.js +72 -33
- package/lib/plugins/image/insert-image-handler.js.map +1 -1
- package/lib/plugins/index.js +23 -41
- package/lib/plugins/index.js.map +1 -1
- package/lib/plugins/list/index.js +64 -100
- package/lib/plugins/list/index.js.map +1 -1
- package/lib/plugins/math/index.js +86 -60
- package/lib/plugins/math/index.js.map +1 -1
- package/lib/plugins/media/index.js +202 -132
- package/lib/plugins/media/index.js.map +1 -1
- package/lib/plugins/media/media-dialog.js +17 -16
- package/lib/plugins/media/media-dialog.js.map +1 -1
- package/lib/plugins/media/media-toolbar.js +3 -3
- package/lib/plugins/media/media-toolbar.js.map +1 -1
- package/lib/plugins/media/media-wrapper.js +21 -58
- package/lib/plugins/media/media-wrapper.js.map +1 -1
- package/lib/plugins/respArea/drag-in-the-blank/choice.js +3 -3
- package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -1
- package/lib/plugins/respArea/drag-in-the-blank/index.js +3 -2
- package/lib/plugins/respArea/drag-in-the-blank/index.js.map +1 -1
- package/lib/plugins/respArea/explicit-constructed-response/index.js +3 -2
- package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -1
- package/lib/plugins/respArea/icons/index.js +13 -15
- package/lib/plugins/respArea/icons/index.js.map +1 -1
- package/lib/plugins/respArea/index.js +87 -53
- package/lib/plugins/respArea/index.js.map +1 -1
- package/lib/plugins/respArea/inline-dropdown/index.js +4 -3
- package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -1
- package/lib/plugins/respArea/utils.js +17 -20
- package/lib/plugins/respArea/utils.js.map +1 -1
- package/lib/plugins/table/icons/index.js +1 -1
- package/lib/plugins/table/icons/index.js.map +1 -1
- package/lib/plugins/table/index.js +381 -212
- package/lib/plugins/table/index.js.map +1 -1
- package/lib/plugins/table/table-toolbar.js +5 -6
- package/lib/plugins/table/table-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/default-toolbar.js +55 -11
- package/lib/plugins/toolbar/default-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/done-button.js +1 -1
- package/lib/plugins/toolbar/done-button.js.map +1 -1
- package/lib/plugins/toolbar/editor-and-toolbar.js +186 -232
- package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/index.js +1 -2
- package/lib/plugins/toolbar/index.js.map +1 -1
- package/lib/plugins/toolbar/toolbar-buttons.js +1 -1
- package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -1
- package/lib/plugins/toolbar/toolbar.js +253 -239
- package/lib/plugins/toolbar/toolbar.js.map +1 -1
- package/lib/plugins/utils.js +27 -2
- package/lib/plugins/utils.js.map +1 -1
- package/lib/serialization.js +1 -1
- package/lib/serialization.js.map +1 -1
- package/lib/slate-editor.js +302 -0
- package/lib/test-serializer.js +189 -0
- package/lib/test-serializer.js.map +1 -0
- package/lib/theme.js +1 -1
- package/lib/theme.js.map +1 -1
- package/package.json +18 -14
- package/playground/image/data.js +20 -20
- package/playground/image/index.html +22 -20
- package/playground/image/index.jsx +12 -10
- package/playground/index.html +25 -23
- package/playground/mathquill/index.html +23 -20
- package/playground/mathquill/index.jsx +18 -22
- package/playground/prod-test/index.html +24 -20
- package/playground/prod-test/index.jsx +5 -3
- package/playground/schema-override/data.js +10 -10
- package/playground/schema-override/image-plugin.jsx +3 -4
- package/playground/schema-override/index.html +21 -19
- package/playground/schema-override/index.jsx +13 -14
- package/playground/serialization/data.js +10 -10
- package/playground/serialization/image-plugin.jsx +3 -4
- package/playground/serialization/index.html +22 -20
- package/playground/table-examples.html +5 -8
- package/playground/webpack.config.js +10 -10
- package/src/components.js +135 -0
- package/src/editor.jsx +478 -141
- package/src/index.jsx +71 -95
- package/src/new-serialization.jsx +291 -0
- package/src/parse-html.js +1 -1
- package/src/plugins/characters/custom-popper.js +7 -7
- package/src/plugins/characters/index.jsx +33 -34
- package/src/plugins/characters/utils.js +81 -81
- package/src/plugins/hotKeys/index.js +54 -0
- package/src/plugins/image/alt-dialog.jsx +4 -5
- package/src/plugins/image/component.jsx +106 -89
- package/src/plugins/image/image-toolbar.jsx +27 -19
- package/src/plugins/image/index.jsx +75 -43
- package/src/plugins/image/insert-image-handler.js +62 -27
- package/src/plugins/index.jsx +23 -41
- package/src/plugins/list/index.jsx +70 -95
- package/src/plugins/math/index.jsx +102 -82
- package/src/plugins/media/index.jsx +159 -124
- package/src/plugins/media/media-dialog.js +98 -71
- package/src/plugins/media/media-toolbar.jsx +8 -8
- package/src/plugins/media/media-wrapper.jsx +29 -30
- package/src/plugins/respArea/drag-in-the-blank/choice.jsx +21 -19
- package/src/plugins/respArea/drag-in-the-blank/index.jsx +14 -11
- package/src/plugins/respArea/explicit-constructed-response/index.jsx +7 -6
- package/src/plugins/respArea/icons/index.jsx +11 -14
- package/src/plugins/respArea/index.jsx +92 -52
- package/src/plugins/respArea/inline-dropdown/index.jsx +9 -8
- package/src/plugins/respArea/utils.jsx +26 -35
- package/src/plugins/table/icons/index.jsx +17 -11
- package/src/plugins/table/index.jsx +288 -231
- package/src/plugins/table/table-toolbar.jsx +15 -11
- package/src/plugins/toolbar/default-toolbar.jsx +65 -19
- package/src/plugins/toolbar/done-button.jsx +4 -4
- package/src/plugins/toolbar/editor-and-toolbar.jsx +150 -145
- package/src/plugins/toolbar/index.jsx +2 -3
- package/src/plugins/toolbar/toolbar-buttons.jsx +11 -11
- package/src/plugins/toolbar/toolbar.jsx +244 -221
- package/src/plugins/utils.js +21 -4
- package/src/serialization.jsx +32 -32
- package/src/test-serializer.js +139 -0
- package/src/test-serializer.js.rej +20 -0
|
@@ -5,16 +5,18 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.serialization = exports.reactAttributes = exports.parseStyleString = exports
|
|
8
|
+
exports.serialization = exports.reactAttributes = exports.parseStyleString = exports["default"] = void 0;
|
|
9
9
|
|
|
10
10
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
11
|
|
|
12
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
13
|
+
|
|
14
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
15
|
+
|
|
12
16
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
13
17
|
|
|
14
18
|
var _react = _interopRequireDefault(require("react"));
|
|
15
19
|
|
|
16
|
-
var _slateEditTable = _interopRequireDefault(require("slate-edit-table"));
|
|
17
|
-
|
|
18
20
|
var _slate = require("slate");
|
|
19
21
|
|
|
20
22
|
var _debug = _interopRequireDefault(require("debug"));
|
|
@@ -25,43 +27,57 @@ var _tableToolbar = _interopRequireDefault(require("./table-toolbar"));
|
|
|
25
27
|
|
|
26
28
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
27
29
|
|
|
28
|
-
var
|
|
30
|
+
var _slateHyperscript = require("slate-hyperscript");
|
|
29
31
|
|
|
30
|
-
var _styles = require("@material-ui/
|
|
32
|
+
var _styles = require("@material-ui/styles");
|
|
31
33
|
|
|
32
34
|
var _reactAttrConverter = _interopRequireDefault(require("react-attr-converter"));
|
|
33
35
|
|
|
34
36
|
var _toStyle = require("to-style");
|
|
35
37
|
|
|
38
|
+
var _get = _interopRequireDefault(require("lodash/get"));
|
|
39
|
+
|
|
40
|
+
var _omit = _interopRequireDefault(require("lodash/omit"));
|
|
41
|
+
|
|
42
|
+
var _reduce = _interopRequireDefault(require("lodash/reduce"));
|
|
43
|
+
|
|
36
44
|
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
45
|
|
|
38
46
|
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
47
|
|
|
48
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
49
|
+
|
|
50
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
51
|
+
|
|
52
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
53
|
+
|
|
40
54
|
var log = (0, _debug["default"])('@pie-lib:editable-html:plugins:table');
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
var nodeAttributes = dataToAttributes(props.node.data);
|
|
47
|
-
return /*#__PURE__*/_react["default"].createElement("table", (0, _extends2["default"])({
|
|
48
|
-
className: props.classes.table
|
|
49
|
-
}, props.attributes, nodeAttributes, {
|
|
55
|
+
|
|
56
|
+
var Table = /*#__PURE__*/_react["default"].forwardRef(function (props) {
|
|
57
|
+
var nodeAttributes = (0, _omit["default"])(dataToAttributes(props.element.data), 'newTable');
|
|
58
|
+
var attrs = (0, _omit["default"])(props.attributes, 'newTable');
|
|
59
|
+
return /*#__PURE__*/_react["default"].createElement("table", (0, _extends2["default"])({}, attrs, nodeAttributes, {
|
|
50
60
|
onFocus: props.onFocus,
|
|
51
61
|
onBlur: props.onBlur
|
|
52
|
-
}),
|
|
62
|
+
}), props.children);
|
|
53
63
|
});
|
|
64
|
+
|
|
54
65
|
Table.propTypes = {
|
|
55
66
|
attributes: _propTypes["default"].object,
|
|
67
|
+
element: _propTypes["default"].object,
|
|
56
68
|
onFocus: _propTypes["default"].func,
|
|
57
69
|
onBlur: _propTypes["default"].func,
|
|
58
|
-
node:
|
|
70
|
+
node: _propTypes["default"].shape({
|
|
71
|
+
type: _propTypes["default"].string,
|
|
72
|
+
children: _propTypes["default"].array,
|
|
73
|
+
data: _propTypes["default"].object
|
|
74
|
+
}),
|
|
59
75
|
children: _propTypes["default"].oneOfType([_propTypes["default"].arrayOf(_propTypes["default"].node), _propTypes["default"].node]).isRequired
|
|
60
76
|
};
|
|
61
77
|
|
|
62
|
-
var TableRow = function
|
|
78
|
+
var TableRow = /*#__PURE__*/_react["default"].forwardRef(function (props) {
|
|
63
79
|
return /*#__PURE__*/_react["default"].createElement("tr", props.attributes, props.children);
|
|
64
|
-
};
|
|
80
|
+
});
|
|
65
81
|
|
|
66
82
|
TableRow.propTypes = {
|
|
67
83
|
attributes: _propTypes["default"].object,
|
|
@@ -69,163 +85,377 @@ TableRow.propTypes = {
|
|
|
69
85
|
onBlur: _propTypes["default"].func,
|
|
70
86
|
children: _propTypes["default"].oneOfType([_propTypes["default"].arrayOf(_propTypes["default"].node), _propTypes["default"].node]).isRequired
|
|
71
87
|
};
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
88
|
+
|
|
89
|
+
var TableBody = /*#__PURE__*/_react["default"].forwardRef(function (props) {
|
|
90
|
+
return /*#__PURE__*/_react["default"].createElement("tbody", props.attributes, props.children);
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
TableBody.propTypes = {
|
|
94
|
+
attributes: _propTypes["default"].object,
|
|
95
|
+
onFocus: _propTypes["default"].func,
|
|
96
|
+
onBlur: _propTypes["default"].func,
|
|
97
|
+
children: _propTypes["default"].oneOfType([_propTypes["default"].arrayOf(_propTypes["default"].node), _propTypes["default"].node]).isRequired
|
|
98
|
+
};
|
|
99
|
+
var useCellStyles = (0, _styles.makeStyles)({
|
|
100
|
+
td: {
|
|
101
|
+
minWidth: '25px'
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
var TableCell = /*#__PURE__*/_react["default"].forwardRef(function (props) {
|
|
106
|
+
var classes = useCellStyles();
|
|
107
|
+
var node = props.node;
|
|
108
|
+
var Tag = (0, _get["default"])(node, 'data.header') ? 'th' : 'td';
|
|
109
|
+
var nodeAttributes = dataToAttributes(props.element.data);
|
|
81
110
|
delete nodeAttributes.header;
|
|
82
111
|
return /*#__PURE__*/_react["default"].createElement(Tag, (0, _extends2["default"])({}, props.attributes, nodeAttributes, {
|
|
83
|
-
colSpan:
|
|
84
|
-
className:
|
|
112
|
+
colSpan: (0, _get["default"])(node, 'data.colspan'),
|
|
113
|
+
className: classes[Tag],
|
|
85
114
|
onFocus: props.onFocus,
|
|
86
115
|
onBlur: props.onBlur
|
|
87
116
|
}), props.children);
|
|
88
117
|
});
|
|
118
|
+
|
|
89
119
|
TableCell.propTypes = {
|
|
120
|
+
node: _propTypes["default"].object,
|
|
121
|
+
element: _propTypes["default"].object,
|
|
90
122
|
attributes: _propTypes["default"].object,
|
|
91
123
|
onFocus: _propTypes["default"].func,
|
|
92
124
|
onBlur: _propTypes["default"].func,
|
|
93
125
|
children: _propTypes["default"].oneOfType([_propTypes["default"].arrayOf(_propTypes["default"].node), _propTypes["default"].node]).isRequired
|
|
94
126
|
};
|
|
95
127
|
|
|
96
|
-
var
|
|
97
|
-
|
|
98
|
-
return
|
|
128
|
+
var getAncestorByType = function getAncestorByType(editor, type) {
|
|
129
|
+
if (!editor || !type) {
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
var ancestors = _slate.Node.ancestors(editor, _slate.Editor.path(editor, editor.selection), {
|
|
134
|
+
reverse: true
|
|
99
135
|
});
|
|
100
136
|
|
|
101
|
-
|
|
102
|
-
|
|
137
|
+
var _iterator = _createForOfIteratorHelper(ancestors),
|
|
138
|
+
_step;
|
|
139
|
+
|
|
140
|
+
try {
|
|
141
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
142
|
+
var _step$value = (0, _slicedToArray2["default"])(_step.value, 2),
|
|
143
|
+
ancestor = _step$value[0],
|
|
144
|
+
ancestorPath = _step$value[1];
|
|
145
|
+
|
|
146
|
+
if (ancestor.type === type) {
|
|
147
|
+
return [ancestor, ancestorPath];
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
} catch (err) {
|
|
151
|
+
_iterator.e(err);
|
|
152
|
+
} finally {
|
|
153
|
+
_iterator.f();
|
|
103
154
|
}
|
|
104
155
|
|
|
105
|
-
|
|
106
|
-
var update = addedTable.data.remove('newTable');
|
|
107
|
-
change.setNodeByKey(addedTable.key, {
|
|
108
|
-
data: update
|
|
109
|
-
});
|
|
156
|
+
return null;
|
|
110
157
|
};
|
|
111
158
|
|
|
112
|
-
|
|
159
|
+
var moveToBeginningOfTable = function moveToBeginningOfTable(editor) {
|
|
160
|
+
var _getAncestorByType = getAncestorByType(editor, 'table'),
|
|
161
|
+
_getAncestorByType2 = (0, _slicedToArray2["default"])(_getAncestorByType, 2),
|
|
162
|
+
tableBlock = _getAncestorByType2[0],
|
|
163
|
+
tablePath = _getAncestorByType2[1];
|
|
164
|
+
|
|
165
|
+
var firstTdPath;
|
|
166
|
+
|
|
167
|
+
var _iterator2 = _createForOfIteratorHelper(_slate.Node.descendants(tableBlock, {
|
|
168
|
+
reverse: true
|
|
169
|
+
})),
|
|
170
|
+
_step2;
|
|
171
|
+
|
|
172
|
+
try {
|
|
173
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
174
|
+
var _step2$value = (0, _slicedToArray2["default"])(_step2.value, 2),
|
|
175
|
+
descendant = _step2$value[0],
|
|
176
|
+
descendantPath = _step2$value[1];
|
|
177
|
+
|
|
178
|
+
if (descendant.type === 'td') {
|
|
179
|
+
firstTdPath = descendantPath;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
} catch (err) {
|
|
183
|
+
_iterator2.e(err);
|
|
184
|
+
} finally {
|
|
185
|
+
_iterator2.f();
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
_slate.Transforms.select(editor, [].concat((0, _toConsumableArray2["default"])(tablePath), (0, _toConsumableArray2["default"])(firstTdPath)));
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
var TABLE_TYPES = ['tbody', 'tr', 'td', 'table'];
|
|
113
192
|
|
|
114
193
|
var _default = function _default(opts, toolbarPlugins
|
|
115
194
|
/* : {toolbar: {}}[] */
|
|
116
195
|
) {
|
|
117
|
-
var core =
|
|
118
|
-
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
if (core.schema && core.schema.blocks) {
|
|
122
|
-
Object.keys(core.schema.blocks).forEach(function (key) {
|
|
123
|
-
var block = core.schema.blocks[key];
|
|
124
|
-
|
|
125
|
-
if (block.parent) {
|
|
126
|
-
if (block.nodes[0].types) {
|
|
127
|
-
block.nodes[0] = {
|
|
128
|
-
type: block.nodes[0].types[0]
|
|
129
|
-
};
|
|
130
|
-
}
|
|
196
|
+
var core = {
|
|
197
|
+
utils: {}
|
|
198
|
+
};
|
|
131
199
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
200
|
+
core.utils.createTable = function () {
|
|
201
|
+
var row = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 2;
|
|
202
|
+
var columns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;
|
|
203
|
+
var tableRows = [];
|
|
204
|
+
var rowLength = new Array(row).fill(0).length;
|
|
205
|
+
var columnsLength = new Array(columns).fill(0).length;
|
|
206
|
+
|
|
207
|
+
for (var i = 0; i < rowLength; i++) {
|
|
208
|
+
var tableRow = {
|
|
209
|
+
type: 'tr',
|
|
210
|
+
children: []
|
|
211
|
+
};
|
|
137
212
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
};
|
|
213
|
+
for (var j = 0; j < columnsLength; j++) {
|
|
214
|
+
tableRow.children.push({
|
|
215
|
+
type: 'td',
|
|
216
|
+
children: [{
|
|
217
|
+
text: ''
|
|
218
|
+
}]
|
|
219
|
+
});
|
|
145
220
|
}
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
221
|
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
return
|
|
153
|
-
|
|
154
|
-
|
|
222
|
+
tableRows.push(tableRow);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
return {
|
|
226
|
+
type: 'table',
|
|
227
|
+
children: [{
|
|
228
|
+
type: 'tbody',
|
|
229
|
+
children: tableRows
|
|
230
|
+
}]
|
|
231
|
+
};
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
core.utils.getTableBlock = function (editor) {
|
|
235
|
+
return getAncestorByType(editor, 'table');
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
core.utils.isSelectionInTable = function (editor) {
|
|
239
|
+
return !!core.utils.getTableBlock(editor);
|
|
155
240
|
};
|
|
156
241
|
|
|
157
242
|
core.utils.createTableWithOptions = function (row, columns, extra) {
|
|
158
243
|
var createdTable = core.utils.createTable(row, columns);
|
|
159
244
|
|
|
160
|
-
var newTable =
|
|
245
|
+
var newTable = _objectSpread(_objectSpread({}, createdTable), extra);
|
|
161
246
|
|
|
162
247
|
return newTable;
|
|
163
248
|
};
|
|
164
249
|
|
|
165
250
|
core.toolbar = {
|
|
166
251
|
icon: /*#__PURE__*/_react["default"].createElement(_GridOn["default"], null),
|
|
167
|
-
onClick: function onClick(
|
|
252
|
+
onClick: function onClick(editor) {
|
|
168
253
|
log('insert table');
|
|
169
|
-
var change = value.change();
|
|
170
254
|
var newTable = core.utils.createTableWithOptions(2, 2, {
|
|
171
255
|
data: {
|
|
172
256
|
border: '1',
|
|
173
257
|
newTable: true
|
|
174
258
|
}
|
|
175
259
|
});
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
onChange(change);
|
|
179
|
-
},
|
|
180
|
-
supports: function supports(node, value) {
|
|
181
|
-
return node && node.object === 'block' && core.utils.isSelectionInTable(value);
|
|
260
|
+
editor.insertNode(newTable);
|
|
261
|
+
moveToBeginningOfTable(editor, newTable);
|
|
182
262
|
},
|
|
183
263
|
|
|
184
264
|
/**
|
|
185
265
|
* Note - the node may not be a table node - it may be a node inside a table.
|
|
186
266
|
*/
|
|
187
|
-
customToolbar: function customToolbar(node, value, onToolbarDone) {
|
|
267
|
+
customToolbar: function customToolbar(node, value, editor, onToolbarDone) {
|
|
188
268
|
log('[customToolbar] node.data: ', node.data);
|
|
189
|
-
|
|
269
|
+
|
|
270
|
+
var _core$utils$getTableB = core.utils.getTableBlock(editor),
|
|
271
|
+
_core$utils$getTableB2 = (0, _slicedToArray2["default"])(_core$utils$getTableB, 1),
|
|
272
|
+
tableBlock = _core$utils$getTableB2[0];
|
|
273
|
+
|
|
190
274
|
log('[customToolbar] tableBlock: ', tableBlock);
|
|
191
275
|
|
|
192
276
|
var hasBorder = function hasBorder() {
|
|
193
|
-
return
|
|
277
|
+
return (0, _get["default"])(tableBlock, 'data.border') !== '0';
|
|
194
278
|
};
|
|
195
279
|
|
|
196
280
|
var addRow = function addRow() {
|
|
197
|
-
var
|
|
198
|
-
|
|
199
|
-
|
|
281
|
+
var _getAncestorByType3 = getAncestorByType(editor, 'tr'),
|
|
282
|
+
_getAncestorByType4 = (0, _slicedToArray2["default"])(_getAncestorByType3, 2),
|
|
283
|
+
trNode = _getAncestorByType4[0],
|
|
284
|
+
trPath = _getAncestorByType4[1];
|
|
200
285
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
286
|
+
log('[addRow]');
|
|
287
|
+
|
|
288
|
+
if (trNode) {
|
|
289
|
+
var newTr = {
|
|
290
|
+
type: 'tr',
|
|
291
|
+
children: []
|
|
292
|
+
};
|
|
293
|
+
var columnsLength = trNode.children.length;
|
|
294
|
+
|
|
295
|
+
for (var i = 0; i < columnsLength; i++) {
|
|
296
|
+
newTr.children.push({
|
|
297
|
+
type: 'td',
|
|
298
|
+
children: [{
|
|
299
|
+
text: ''
|
|
300
|
+
}]
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
_slate.Transforms.insertNodes(editor, [newTr], {
|
|
305
|
+
at: trPath
|
|
306
|
+
});
|
|
307
|
+
}
|
|
204
308
|
};
|
|
205
309
|
|
|
206
310
|
var removeRow = function removeRow() {
|
|
207
|
-
var
|
|
208
|
-
|
|
311
|
+
var _getAncestorByType5 = getAncestorByType(editor, 'tbody'),
|
|
312
|
+
_getAncestorByType6 = (0, _slicedToArray2["default"])(_getAncestorByType5, 2),
|
|
313
|
+
tBodyNode = _getAncestorByType6[0],
|
|
314
|
+
tBodyPath = _getAncestorByType6[1];
|
|
315
|
+
|
|
316
|
+
log('[removeRow]');
|
|
317
|
+
|
|
318
|
+
if (tBodyPath) {
|
|
319
|
+
if (tBodyNode.children.length > 1) {
|
|
320
|
+
var _getAncestorByType7 = getAncestorByType(editor, 'tr'),
|
|
321
|
+
_getAncestorByType8 = (0, _slicedToArray2["default"])(_getAncestorByType7, 2),
|
|
322
|
+
trPath = _getAncestorByType8[1];
|
|
323
|
+
|
|
324
|
+
log('[removeRow]');
|
|
325
|
+
|
|
326
|
+
if (trPath) {
|
|
327
|
+
_slate.Transforms.removeNodes(editor, {
|
|
328
|
+
at: trPath
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
};
|
|
334
|
+
|
|
335
|
+
var addColumn = function addColumn() {
|
|
336
|
+
var _getAncestorByType9 = getAncestorByType(editor, 'tbody'),
|
|
337
|
+
_getAncestorByType10 = (0, _slicedToArray2["default"])(_getAncestorByType9, 2),
|
|
338
|
+
tBodyNode = _getAncestorByType10[0],
|
|
339
|
+
tBodyPath = _getAncestorByType10[1];
|
|
340
|
+
|
|
341
|
+
log('[addColumn]');
|
|
342
|
+
|
|
343
|
+
if (tBodyNode) {
|
|
344
|
+
var emptyTd = {
|
|
345
|
+
type: 'td',
|
|
346
|
+
children: [{
|
|
347
|
+
text: ''
|
|
348
|
+
}]
|
|
349
|
+
};
|
|
350
|
+
|
|
351
|
+
var trElements = _slate.Editor.nodes(editor, {
|
|
352
|
+
at: tBodyPath,
|
|
353
|
+
// Path of Editor
|
|
354
|
+
match: function match(node) {
|
|
355
|
+
return 'tr' === node.type;
|
|
356
|
+
}
|
|
357
|
+
});
|
|
358
|
+
|
|
359
|
+
var _iterator3 = _createForOfIteratorHelper(trElements),
|
|
360
|
+
_step3;
|
|
361
|
+
|
|
362
|
+
try {
|
|
363
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
364
|
+
var _step3$value = (0, _slicedToArray2["default"])(_step3.value, 2),
|
|
365
|
+
trNode = _step3$value[0],
|
|
366
|
+
nodePath = _step3$value[1];
|
|
367
|
+
|
|
368
|
+
_slate.Transforms.insertNodes(editor, [emptyTd], {
|
|
369
|
+
at: [].concat((0, _toConsumableArray2["default"])(nodePath), [trNode.children.length])
|
|
370
|
+
});
|
|
371
|
+
}
|
|
372
|
+
} catch (err) {
|
|
373
|
+
_iterator3.e(err);
|
|
374
|
+
} finally {
|
|
375
|
+
_iterator3.f();
|
|
376
|
+
}
|
|
377
|
+
}
|
|
209
378
|
};
|
|
210
379
|
|
|
211
380
|
var removeColumn = function removeColumn() {
|
|
212
|
-
var
|
|
213
|
-
|
|
381
|
+
var _getAncestorByType11 = getAncestorByType(editor, 'tbody'),
|
|
382
|
+
_getAncestorByType12 = (0, _slicedToArray2["default"])(_getAncestorByType11, 2),
|
|
383
|
+
tBodyNode = _getAncestorByType12[0],
|
|
384
|
+
tBodyPath = _getAncestorByType12[1];
|
|
385
|
+
|
|
386
|
+
log('[addColumn]');
|
|
387
|
+
|
|
388
|
+
if (tBodyNode) {
|
|
389
|
+
var currentPath = _slate.Editor.path(editor, editor.selection);
|
|
390
|
+
|
|
391
|
+
var columnIndex = currentPath[currentPath.length - 2];
|
|
392
|
+
|
|
393
|
+
var trElements = _slate.Editor.nodes(editor, {
|
|
394
|
+
at: tBodyPath,
|
|
395
|
+
// Path of Editor
|
|
396
|
+
match: function match(node) {
|
|
397
|
+
return 'tr' === node.type;
|
|
398
|
+
}
|
|
399
|
+
});
|
|
400
|
+
|
|
401
|
+
var _iterator4 = _createForOfIteratorHelper(trElements),
|
|
402
|
+
_step4;
|
|
403
|
+
|
|
404
|
+
try {
|
|
405
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
406
|
+
var _step4$value = (0, _slicedToArray2["default"])(_step4.value, 2),
|
|
407
|
+
trNode = _step4$value[0],
|
|
408
|
+
nodePath = _step4$value[1];
|
|
409
|
+
|
|
410
|
+
if (trNode.children.length > 1) {
|
|
411
|
+
_slate.Transforms.removeNodes(editor, {
|
|
412
|
+
at: [].concat((0, _toConsumableArray2["default"])(nodePath), [columnIndex])
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
} catch (err) {
|
|
417
|
+
_iterator4.e(err);
|
|
418
|
+
} finally {
|
|
419
|
+
_iterator4.f();
|
|
420
|
+
}
|
|
421
|
+
}
|
|
214
422
|
};
|
|
215
423
|
|
|
216
424
|
var removeTable = function removeTable() {
|
|
217
|
-
var
|
|
218
|
-
|
|
425
|
+
var _getAncestorByType13 = getAncestorByType(editor, 'table'),
|
|
426
|
+
_getAncestorByType14 = (0, _slicedToArray2["default"])(_getAncestorByType13, 2),
|
|
427
|
+
tableNode = _getAncestorByType14[0],
|
|
428
|
+
tablePath = _getAncestorByType14[1];
|
|
429
|
+
|
|
430
|
+
editor.apply({
|
|
431
|
+
type: 'remove_node',
|
|
432
|
+
path: tablePath,
|
|
433
|
+
node: tableNode
|
|
434
|
+
});
|
|
219
435
|
};
|
|
220
436
|
|
|
221
437
|
var toggleBorder = function toggleBorder() {
|
|
222
438
|
var data = tableBlock.data;
|
|
223
|
-
|
|
439
|
+
|
|
440
|
+
var update = _objectSpread(_objectSpread({}, data), {}, {
|
|
441
|
+
border: hasBorder() ? '0' : '1'
|
|
442
|
+
});
|
|
443
|
+
|
|
444
|
+
var _getAncestorByType15 = getAncestorByType(editor, 'table'),
|
|
445
|
+
_getAncestorByType16 = (0, _slicedToArray2["default"])(_getAncestorByType15, 2),
|
|
446
|
+
tablePath = _getAncestorByType16[1];
|
|
447
|
+
|
|
224
448
|
log('[toggleBorder] update: ', update);
|
|
225
|
-
|
|
226
|
-
|
|
449
|
+
editor.apply({
|
|
450
|
+
type: 'set_node',
|
|
451
|
+
path: tablePath,
|
|
452
|
+
properties: {
|
|
453
|
+
data: node.data
|
|
454
|
+
},
|
|
455
|
+
newProperties: {
|
|
456
|
+
data: update
|
|
457
|
+
}
|
|
227
458
|
});
|
|
228
|
-
onToolbarDone(change, false);
|
|
229
459
|
};
|
|
230
460
|
|
|
231
461
|
var onDone = function onDone() {
|
|
@@ -235,11 +465,11 @@ var _default = function _default(opts, toolbarPlugins
|
|
|
235
465
|
|
|
236
466
|
var Tb = function Tb() {
|
|
237
467
|
return /*#__PURE__*/_react["default"].createElement(_tableToolbar["default"], {
|
|
468
|
+
editor: editor,
|
|
238
469
|
plugins: toolbarPlugins,
|
|
239
470
|
onChange: function onChange(c) {
|
|
240
471
|
return onToolbarDone(c, false);
|
|
241
472
|
},
|
|
242
|
-
value: value,
|
|
243
473
|
onAddRow: addRow,
|
|
244
474
|
onRemoveRow: removeRow,
|
|
245
475
|
onAddColumn: addColumn,
|
|
@@ -255,6 +485,10 @@ var _default = function _default(opts, toolbarPlugins
|
|
|
255
485
|
}
|
|
256
486
|
};
|
|
257
487
|
|
|
488
|
+
core.supports = function (node, editor) {
|
|
489
|
+
return TABLE_TYPES.includes(node.type);
|
|
490
|
+
};
|
|
491
|
+
|
|
258
492
|
var Node = function Node(props) {
|
|
259
493
|
switch (props.node.type) {
|
|
260
494
|
case 'table':
|
|
@@ -263,10 +497,16 @@ var _default = function _default(opts, toolbarPlugins
|
|
|
263
497
|
onBlur: opts.onBlur
|
|
264
498
|
}));
|
|
265
499
|
|
|
266
|
-
case '
|
|
500
|
+
case 'tbody':
|
|
501
|
+
return /*#__PURE__*/_react["default"].createElement(TableBody, (0, _extends2["default"])({}, props, {
|
|
502
|
+
onFocus: opts.onFocus,
|
|
503
|
+
onBlur: opts.onBlur
|
|
504
|
+
}));
|
|
505
|
+
|
|
506
|
+
case 'tr':
|
|
267
507
|
return /*#__PURE__*/_react["default"].createElement(TableRow, props);
|
|
268
508
|
|
|
269
|
-
case '
|
|
509
|
+
case 'td':
|
|
270
510
|
return /*#__PURE__*/_react["default"].createElement(TableCell, (0, _extends2["default"])({}, props, {
|
|
271
511
|
onFocus: opts.onFocus,
|
|
272
512
|
onBlur: opts.onBlur
|
|
@@ -280,74 +520,6 @@ var _default = function _default(opts, toolbarPlugins
|
|
|
280
520
|
Node.propTypes = {
|
|
281
521
|
node: _propTypes["default"].object
|
|
282
522
|
};
|
|
283
|
-
|
|
284
|
-
core.normalizeNode = function (node) {
|
|
285
|
-
if (node.object !== 'document') {
|
|
286
|
-
return;
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
var tableAdded = node.findDescendant(function (d) {
|
|
290
|
-
return d.data && d.data.get('newTable');
|
|
291
|
-
});
|
|
292
|
-
|
|
293
|
-
if (!tableAdded) {
|
|
294
|
-
return;
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
var nodeToSearch = node.getParent(tableAdded.key) || node;
|
|
298
|
-
var shouldAddTextAfterNode = false;
|
|
299
|
-
var indexToNotHaveTableOn = nodeToSearch.nodes.size - 1;
|
|
300
|
-
var indexOfLastTable = nodeToSearch.nodes.findLastIndex(function (d) {
|
|
301
|
-
return d.type === 'table';
|
|
302
|
-
}); // if the last table in the document is of type table, we need to do the change
|
|
303
|
-
|
|
304
|
-
if (indexOfLastTable === indexToNotHaveTableOn) {
|
|
305
|
-
shouldAddTextAfterNode = true;
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
if (!shouldAddTextAfterNode) {
|
|
309
|
-
return;
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
return function (change) {
|
|
313
|
-
if (shouldAddTextAfterNode) {
|
|
314
|
-
var tableJSON = tableAdded.toJSON(); // we remove the table node because otherwise we can't add the empty block after it
|
|
315
|
-
// we need a block that contains text in order to do it
|
|
316
|
-
|
|
317
|
-
change.removeNodeByKey(tableAdded.key);
|
|
318
|
-
|
|
319
|
-
var newBlock = _slate.Block.create({
|
|
320
|
-
object: 'block',
|
|
321
|
-
type: 'div'
|
|
322
|
-
}); // we add an empty block but that it's going to be normalized
|
|
323
|
-
// because it will add the empty text to it like it should
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
change.insertBlock(newBlock);
|
|
327
|
-
change.withoutNormalization(function () {
|
|
328
|
-
// we do these changes without normalization
|
|
329
|
-
// we get the text previous to the new block added
|
|
330
|
-
var prevText = change.value.document.getPreviousText(newBlock.key);
|
|
331
|
-
|
|
332
|
-
if (prevText) {
|
|
333
|
-
var _prevText$text, _prevText$text2;
|
|
334
|
-
|
|
335
|
-
// we move focus to the previous text
|
|
336
|
-
change.moveFocusTo(prevText.key, (_prevText$text = prevText.text) === null || _prevText$text === void 0 ? void 0 : _prevText$text.length).moveAnchorTo(prevText.key, (_prevText$text2 = prevText.text) === null || _prevText$text2 === void 0 ? void 0 : _prevText$text2.length);
|
|
337
|
-
} // we insert the table block between the first block with text and the last block with text
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
change.insertBlock(_objectSpread(_objectSpread({}, tableJSON), {}, {
|
|
341
|
-
data: _objectSpread(_objectSpread({}, tableJSON.data), {}, {
|
|
342
|
-
newTable: true
|
|
343
|
-
})
|
|
344
|
-
}));
|
|
345
|
-
moveFocusToBeginningOfTable(change);
|
|
346
|
-
});
|
|
347
|
-
}
|
|
348
|
-
};
|
|
349
|
-
};
|
|
350
|
-
|
|
351
523
|
core.renderNode = Node;
|
|
352
524
|
return core;
|
|
353
525
|
};
|
|
@@ -396,11 +568,7 @@ var attributesToMap = function attributesToMap(el) {
|
|
|
396
568
|
};
|
|
397
569
|
|
|
398
570
|
var dataToAttributes = function dataToAttributes(data) {
|
|
399
|
-
|
|
400
|
-
return {};
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
return data.reduce(function (acc, v, name) {
|
|
571
|
+
return (0, _reduce["default"])(data, function (acc, v, name) {
|
|
404
572
|
if (v) {
|
|
405
573
|
acc[(0, _reactAttrConverter["default"])(name)] = v;
|
|
406
574
|
}
|
|
@@ -420,80 +588,81 @@ var serialization = {
|
|
|
420
588
|
{
|
|
421
589
|
var children = el.children.length === 1 && el.children[0].tagName.toLowerCase() === 'tbody' ? el.children[0].children : el.children;
|
|
422
590
|
var c = Array.from(children);
|
|
423
|
-
return {
|
|
424
|
-
object: 'block',
|
|
591
|
+
return (0, _slateHyperscript.jsx)('element', {
|
|
425
592
|
type: 'table',
|
|
426
|
-
nodes: next(c),
|
|
427
593
|
data: attributes.reduce(attributesToMap(el), {})
|
|
428
|
-
};
|
|
594
|
+
}, next(c));
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
case 'tbody':
|
|
598
|
+
{
|
|
599
|
+
return (0, _slateHyperscript.jsx)('element', {
|
|
600
|
+
type: 'tbody'
|
|
601
|
+
}, next(el.childNodes));
|
|
429
602
|
}
|
|
430
603
|
|
|
431
604
|
case 'th':
|
|
432
605
|
{
|
|
433
|
-
return {
|
|
434
|
-
|
|
435
|
-
type: 'table_cell',
|
|
436
|
-
nodes: next(el.childNodes),
|
|
606
|
+
return (0, _slateHyperscript.jsx)('element', {
|
|
607
|
+
type: 'th',
|
|
437
608
|
data: cellAttributes.reduce(attributesToMap(el), {
|
|
438
609
|
header: true
|
|
439
610
|
})
|
|
440
|
-
};
|
|
611
|
+
}, next(el.childNodes));
|
|
441
612
|
}
|
|
442
613
|
|
|
443
614
|
case 'tr':
|
|
444
615
|
{
|
|
445
|
-
return {
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
nodes: next(Array.from(el.children))
|
|
449
|
-
};
|
|
616
|
+
return (0, _slateHyperscript.jsx)('element', {
|
|
617
|
+
type: 'tr'
|
|
618
|
+
}, next(Array.from(el.children)));
|
|
450
619
|
}
|
|
451
620
|
|
|
452
621
|
case 'td':
|
|
453
622
|
{
|
|
454
|
-
return {
|
|
455
|
-
|
|
456
|
-
type: 'table_cell',
|
|
457
|
-
nodes: next(Array.from(el.childNodes)),
|
|
623
|
+
return (0, _slateHyperscript.jsx)('element', {
|
|
624
|
+
type: 'td',
|
|
458
625
|
data: cellAttributes.reduce(attributesToMap(el), {
|
|
459
|
-
header:
|
|
626
|
+
header: true
|
|
460
627
|
})
|
|
461
|
-
};
|
|
628
|
+
}, next(el.childNodes));
|
|
462
629
|
}
|
|
463
630
|
}
|
|
464
631
|
},
|
|
465
632
|
serialize: function serialize(object, children) {
|
|
466
|
-
if (object.object !== 'block') {
|
|
467
|
-
return;
|
|
468
|
-
}
|
|
469
|
-
|
|
470
633
|
switch (object.type) {
|
|
471
634
|
case 'table':
|
|
472
635
|
{
|
|
473
636
|
var _attributes = dataToAttributes(object.data);
|
|
474
637
|
|
|
475
|
-
return /*#__PURE__*/_react["default"].createElement("table", _attributes,
|
|
638
|
+
return /*#__PURE__*/_react["default"].createElement("table", _attributes, children);
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
case 'tbody':
|
|
642
|
+
{
|
|
643
|
+
return /*#__PURE__*/_react["default"].createElement("tbody", null, children);
|
|
476
644
|
}
|
|
477
645
|
|
|
478
|
-
case '
|
|
646
|
+
case 'tr':
|
|
479
647
|
{
|
|
480
648
|
return /*#__PURE__*/_react["default"].createElement("tr", null, children);
|
|
481
649
|
}
|
|
482
650
|
|
|
483
|
-
case '
|
|
651
|
+
case 'td':
|
|
484
652
|
{
|
|
485
653
|
var _attributes2 = dataToAttributes(object.data);
|
|
486
654
|
|
|
487
|
-
|
|
655
|
+
return /*#__PURE__*/_react["default"].createElement("td", _attributes2, children);
|
|
656
|
+
}
|
|
488
657
|
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
658
|
+
case 'th':
|
|
659
|
+
{
|
|
660
|
+
var _attributes3 = dataToAttributes(object.data);
|
|
661
|
+
|
|
662
|
+
return /*#__PURE__*/_react["default"].createElement("th", _attributes3, children);
|
|
494
663
|
}
|
|
495
664
|
}
|
|
496
665
|
}
|
|
497
666
|
};
|
|
498
667
|
exports.serialization = serialization;
|
|
499
|
-
//# sourceMappingURL=index.js.map
|
|
668
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2ciLCJkZWJ1ZyIsIlRhYmxlIiwiUmVhY3QiLCJmb3J3YXJkUmVmIiwicHJvcHMiLCJub2RlQXR0cmlidXRlcyIsIm9taXQiLCJkYXRhVG9BdHRyaWJ1dGVzIiwiZWxlbWVudCIsImRhdGEiLCJhdHRycyIsImF0dHJpYnV0ZXMiLCJvbkZvY3VzIiwib25CbHVyIiwiY2hpbGRyZW4iLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJvYmplY3QiLCJmdW5jIiwibm9kZSIsInNoYXBlIiwidHlwZSIsInN0cmluZyIsImFycmF5Iiwib25lT2ZUeXBlIiwiYXJyYXlPZiIsImlzUmVxdWlyZWQiLCJUYWJsZVJvdyIsIlRhYmxlQm9keSIsInVzZUNlbGxTdHlsZXMiLCJtYWtlU3R5bGVzIiwidGQiLCJtaW5XaWR0aCIsIlRhYmxlQ2VsbCIsImNsYXNzZXMiLCJUYWciLCJnZXQiLCJoZWFkZXIiLCJnZXRBbmNlc3RvckJ5VHlwZSIsImVkaXRvciIsImFuY2VzdG9ycyIsIlNsYXRlTm9kZSIsIkVkaXRvciIsInBhdGgiLCJzZWxlY3Rpb24iLCJyZXZlcnNlIiwiYW5jZXN0b3IiLCJhbmNlc3RvclBhdGgiLCJtb3ZlVG9CZWdpbm5pbmdPZlRhYmxlIiwidGFibGVCbG9jayIsInRhYmxlUGF0aCIsImZpcnN0VGRQYXRoIiwiZGVzY2VuZGFudHMiLCJkZXNjZW5kYW50IiwiZGVzY2VuZGFudFBhdGgiLCJUcmFuc2Zvcm1zIiwic2VsZWN0IiwiVEFCTEVfVFlQRVMiLCJvcHRzIiwidG9vbGJhclBsdWdpbnMiLCJjb3JlIiwidXRpbHMiLCJjcmVhdGVUYWJsZSIsInJvdyIsImNvbHVtbnMiLCJ0YWJsZVJvd3MiLCJyb3dMZW5ndGgiLCJBcnJheSIsImZpbGwiLCJsZW5ndGgiLCJjb2x1bW5zTGVuZ3RoIiwiaSIsInRhYmxlUm93IiwiaiIsInB1c2giLCJ0ZXh0IiwiZ2V0VGFibGVCbG9jayIsImlzU2VsZWN0aW9uSW5UYWJsZSIsImNyZWF0ZVRhYmxlV2l0aE9wdGlvbnMiLCJleHRyYSIsImNyZWF0ZWRUYWJsZSIsIm5ld1RhYmxlIiwidG9vbGJhciIsImljb24iLCJvbkNsaWNrIiwiYm9yZGVyIiwiaW5zZXJ0Tm9kZSIsImN1c3RvbVRvb2xiYXIiLCJ2YWx1ZSIsIm9uVG9vbGJhckRvbmUiLCJoYXNCb3JkZXIiLCJhZGRSb3ciLCJ0ck5vZGUiLCJ0clBhdGgiLCJuZXdUciIsImluc2VydE5vZGVzIiwiYXQiLCJyZW1vdmVSb3ciLCJ0Qm9keU5vZGUiLCJ0Qm9keVBhdGgiLCJyZW1vdmVOb2RlcyIsImFkZENvbHVtbiIsImVtcHR5VGQiLCJ0ckVsZW1lbnRzIiwibm9kZXMiLCJtYXRjaCIsIm5vZGVQYXRoIiwicmVtb3ZlQ29sdW1uIiwiY3VycmVudFBhdGgiLCJjb2x1bW5JbmRleCIsInJlbW92ZVRhYmxlIiwidGFibGVOb2RlIiwiYXBwbHkiLCJ0b2dnbGVCb3JkZXIiLCJ1cGRhdGUiLCJwcm9wZXJ0aWVzIiwibmV3UHJvcGVydGllcyIsIm9uRG9uZSIsIlRiIiwiYyIsInN1cHBvcnRzIiwiaW5jbHVkZXMiLCJOb2RlIiwicmVuZGVyTm9kZSIsInBhcnNlU3R5bGVTdHJpbmciLCJzIiwicmVnZXgiLCJyZXN1bHQiLCJleGVjIiwidHJpbSIsInJlYWN0QXR0cmlidXRlcyIsIm8iLCJ0b1N0eWxlT2JqZWN0IiwiY2FtZWxpemUiLCJhZGRVbml0cyIsImF0dHJpYnV0ZXNUb01hcCIsImVsIiwiYWNjIiwiYXR0cmlidXRlIiwiZ2V0QXR0cmlidXRlIiwic3R5bGVTdHJpbmciLCJyZWFjdFN0eWxlT2JqZWN0IiwicmVkdWNlIiwidiIsIm5hbWUiLCJjb252ZXJ0IiwiY2VsbEF0dHJpYnV0ZXMiLCJzZXJpYWxpemF0aW9uIiwiZGVzZXJpYWxpemUiLCJuZXh0IiwidGFnIiwidGFnTmFtZSIsInRvTG93ZXJDYXNlIiwiZnJvbSIsImpzeCIsImNoaWxkTm9kZXMiLCJzZXJpYWxpemUiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGx1Z2lucy90YWJsZS9pbmRleC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IE5vZGUgYXMgU2xhdGVOb2RlLCBFZGl0b3IsIFRyYW5zZm9ybXMgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IEdyaWRPbiBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvR3JpZE9uJztcbmltcG9ydCBUYWJsZVRvb2xiYXIgZnJvbSAnLi90YWJsZS10b29sYmFyJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBqc3ggfSBmcm9tICdzbGF0ZS1oeXBlcnNjcmlwdCc7XG5pbXBvcnQgeyBtYWtlU3R5bGVzIH0gZnJvbSAnQG1hdGVyaWFsLXVpL3N0eWxlcyc7XG5pbXBvcnQgY29udmVydCBmcm9tICdyZWFjdC1hdHRyLWNvbnZlcnRlcic7XG5pbXBvcnQgeyBvYmplY3QgYXMgdG9TdHlsZU9iamVjdCB9IGZyb20gJ3RvLXN0eWxlJztcbmltcG9ydCBnZXQgZnJvbSAnbG9kYXNoL2dldCc7XG5pbXBvcnQgb21pdCBmcm9tICdsb2Rhc2gvb21pdCc7XG5pbXBvcnQgcmVkdWNlIGZyb20gJ2xvZGFzaC9yZWR1Y2UnO1xuXG5jb25zdCBsb2cgPSBkZWJ1ZygnQHBpZS1saWI6ZWRpdGFibGUtaHRtbDpwbHVnaW5zOnRhYmxlJyk7XG5cbmNvbnN0IFRhYmxlID0gUmVhY3QuZm9yd2FyZFJlZihwcm9wcyA9PiB7XG4gIGNvbnN0IG5vZGVBdHRyaWJ1dGVzID0gb21pdChkYXRhVG9BdHRyaWJ1dGVzKHByb3BzLmVsZW1lbnQuZGF0YSksICduZXdUYWJsZScpO1xuICBjb25zdCBhdHRycyA9IG9taXQocHJvcHMuYXR0cmlidXRlcywgJ25ld1RhYmxlJyk7XG5cbiAgcmV0dXJuIChcbiAgICA8dGFibGUgey4uLmF0dHJzfSB7Li4ubm9kZUF0dHJpYnV0ZXN9IG9uRm9jdXM9e3Byb3BzLm9uRm9jdXN9IG9uQmx1cj17cHJvcHMub25CbHVyfT5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L3RhYmxlPlxuICApO1xufSk7XG5cblRhYmxlLnByb3BUeXBlcyA9IHtcbiAgYXR0cmlidXRlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgZWxlbWVudDogUHJvcFR5cGVzLm9iamVjdCxcbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIG5vZGU6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgdHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjaGlsZHJlbjogUHJvcFR5cGVzLmFycmF5LFxuICAgIGRhdGE6IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMubm9kZSksIFByb3BUeXBlcy5ub2RlXSkuaXNSZXF1aXJlZFxufTtcblxuY29uc3QgVGFibGVSb3cgPSBSZWFjdC5mb3J3YXJkUmVmKHByb3BzID0+IDx0ciB7Li4ucHJvcHMuYXR0cmlidXRlc30+e3Byb3BzLmNoaWxkcmVufTwvdHI+KTtcblxuVGFibGVSb3cucHJvcFR5cGVzID0ge1xuICBhdHRyaWJ1dGVzOiBQcm9wVHlwZXMub2JqZWN0LFxuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5ub2RlKSwgUHJvcFR5cGVzLm5vZGVdKS5pc1JlcXVpcmVkXG59O1xuXG5jb25zdCBUYWJsZUJvZHkgPSBSZWFjdC5mb3J3YXJkUmVmKHByb3BzID0+IDx0Ym9keSB7Li4ucHJvcHMuYXR0cmlidXRlc30+e3Byb3BzLmNoaWxkcmVufTwvdGJvZHk+KTtcblxuVGFibGVCb2R5LnByb3BUeXBlcyA9IHtcbiAgYXR0cmlidXRlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMubm9kZSksIFByb3BUeXBlcy5ub2RlXSkuaXNSZXF1aXJlZFxufTtcblxuY29uc3QgdXNlQ2VsbFN0eWxlcyA9IG1ha2VTdHlsZXMoe1xuICB0ZDoge1xuICAgIG1pbldpZHRoOiAnMjVweCdcbiAgfVxufSk7XG5cbmNvbnN0IFRhYmxlQ2VsbCA9IFJlYWN0LmZvcndhcmRSZWYocHJvcHMgPT4ge1xuICBjb25zdCBjbGFzc2VzID0gdXNlQ2VsbFN0eWxlcygpO1xuICBjb25zdCB7IG5vZGUgfSA9IHByb3BzO1xuICBjb25zdCBUYWcgPSBnZXQobm9kZSwgJ2RhdGEuaGVhZGVyJykgPyAndGgnIDogJ3RkJztcblxuICBjb25zdCBub2RlQXR0cmlidXRlcyA9IGRhdGFUb0F0dHJpYnV0ZXMocHJvcHMuZWxlbWVudC5kYXRhKTtcbiAgZGVsZXRlIG5vZGVBdHRyaWJ1dGVzLmhlYWRlcjtcblxuICByZXR1cm4gKFxuICAgIDxUYWdcbiAgICAgIHsuLi5wcm9wcy5hdHRyaWJ1dGVzfVxuICAgICAgey4uLm5vZGVBdHRyaWJ1dGVzfVxuICAgICAgY29sU3Bhbj17Z2V0KG5vZGUsICdkYXRhLmNvbHNwYW4nKX1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlc1tUYWddfVxuICAgICAgb25Gb2N1cz17cHJvcHMub25Gb2N1c31cbiAgICAgIG9uQmx1cj17cHJvcHMub25CbHVyfVxuICAgID5cbiAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICA8L1RhZz5cbiAgKTtcbn0pO1xuXG5UYWJsZUNlbGwucHJvcFR5cGVzID0ge1xuICBub2RlOiBQcm9wVHlwZXMub2JqZWN0LFxuICBlbGVtZW50OiBQcm9wVHlwZXMub2JqZWN0LFxuICBhdHRyaWJ1dGVzOiBQcm9wVHlwZXMub2JqZWN0LFxuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5ub2RlKSwgUHJvcFR5cGVzLm5vZGVdKS5pc1JlcXVpcmVkXG59O1xuXG5jb25zdCBnZXRBbmNlc3RvckJ5VHlwZSA9IChlZGl0b3IsIHR5cGUpID0+IHtcbiAgaWYgKCFlZGl0b3IgfHwgIXR5cGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGFuY2VzdG9ycyA9IFNsYXRlTm9kZS5hbmNlc3RvcnMoZWRpdG9yLCBFZGl0b3IucGF0aChlZGl0b3IsIGVkaXRvci5zZWxlY3Rpb24pLCB7XG4gICAgcmV2ZXJzZTogdHJ1ZVxuICB9KTtcblxuICBmb3IgKGNvbnN0IFthbmNlc3RvciwgYW5jZXN0b3JQYXRoXSBvZiBhbmNlc3RvcnMpIHtcbiAgICBpZiAoYW5jZXN0b3IudHlwZSA9PT0gdHlwZSkge1xuICAgICAgcmV0dXJuIFthbmNlc3RvciwgYW5jZXN0b3JQYXRoXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cbmNvbnN0IG1vdmVUb0JlZ2lubmluZ09mVGFibGUgPSBlZGl0b3IgPT4ge1xuICBjb25zdCBbdGFibGVCbG9jaywgdGFibGVQYXRoXSA9IGdldEFuY2VzdG9yQnlUeXBlKGVkaXRvciwgJ3RhYmxlJyk7XG4gIGxldCBmaXJzdFRkUGF0aDtcblxuICBmb3IgKGNvbnN0IFtkZXNjZW5kYW50LCBkZXNjZW5kYW50UGF0aF0gb2YgU2xhdGVOb2RlLmRlc2NlbmRhbnRzKHRhYmxlQmxvY2ssIHsgcmV2ZXJzZTogdHJ1ZSB9KSkge1xuICAgIGlmIChkZXNjZW5kYW50LnR5cGUgPT09ICd0ZCcpIHtcbiAgICAgIGZpcnN0VGRQYXRoID0gZGVzY2VuZGFudFBhdGg7XG4gICAgfVxuICB9XG5cbiAgVHJhbnNmb3Jtcy5zZWxlY3QoZWRpdG9yLCBbLi4udGFibGVQYXRoLCAuLi5maXJzdFRkUGF0aF0pO1xufTtcblxuY29uc3QgVEFCTEVfVFlQRVMgPSBbJ3Rib2R5JywgJ3RyJywgJ3RkJywgJ3RhYmxlJ107XG5cbmV4cG9ydCBkZWZhdWx0IChvcHRzLCB0b29sYmFyUGx1Z2lucyAvKiA6ICB7dG9vbGJhcjoge319W10gKi8pID0+IHtcbiAgY29uc3QgY29yZSA9IHtcbiAgICB1dGlsczoge31cbiAgfTtcblxuICBjb3JlLnV0aWxzLmNyZWF0ZVRhYmxlID0gKHJvdyA9IDIsIGNvbHVtbnMgPSAyKSA9PiB7XG4gICAgY29uc3QgdGFibGVSb3dzID0gW107XG4gICAgY29uc3Qgcm93TGVuZ3RoID0gbmV3IEFycmF5KHJvdykuZmlsbCgwKS5sZW5ndGg7XG4gICAgY29uc3QgY29sdW1uc0xlbmd0aCA9IG5ldyBBcnJheShjb2x1bW5zKS5maWxsKDApLmxlbmd0aDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93TGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHRhYmxlUm93ID0geyB0eXBlOiAndHInLCBjaGlsZHJlbjogW10gfTtcblxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2x1bW5zTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdGFibGVSb3cuY2hpbGRyZW4ucHVzaCh7XG4gICAgICAgICAgdHlwZTogJ3RkJyxcbiAgICAgICAgICBjaGlsZHJlbjogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0ZXh0OiAnJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRhYmxlUm93cy5wdXNoKHRhYmxlUm93KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ3RhYmxlJyxcbiAgICAgIGNoaWxkcmVuOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAndGJvZHknLFxuICAgICAgICAgIGNoaWxkcmVuOiB0YWJsZVJvd3NcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG4gIH07XG5cbiAgY29yZS51dGlscy5nZXRUYWJsZUJsb2NrID0gZWRpdG9yID0+IGdldEFuY2VzdG9yQnlUeXBlKGVkaXRvciwgJ3RhYmxlJyk7XG5cbiAgY29yZS51dGlscy5pc1NlbGVjdGlvbkluVGFibGUgPSBlZGl0b3IgPT4gISFjb3JlLnV0aWxzLmdldFRhYmxlQmxvY2soZWRpdG9yKTtcblxuICBjb3JlLnV0aWxzLmNyZWF0ZVRhYmxlV2l0aE9wdGlvbnMgPSAocm93LCBjb2x1bW5zLCBleHRyYSkgPT4ge1xuICAgIGNvbnN0IGNyZWF0ZWRUYWJsZSA9IGNvcmUudXRpbHMuY3JlYXRlVGFibGUocm93LCBjb2x1bW5zKTtcbiAgICBjb25zdCBuZXdUYWJsZSA9IHsgLi4uY3JlYXRlZFRhYmxlLCAuLi5leHRyYSB9O1xuXG4gICAgcmV0dXJuIG5ld1RhYmxlO1xuICB9O1xuXG4gIGNvcmUudG9vbGJhciA9IHtcbiAgICBpY29uOiA8R3JpZE9uIC8+LFxuICAgIG9uQ2xpY2s6IGVkaXRvciA9PiB7XG4gICAgICBsb2coJ2luc2VydCB0YWJsZScpO1xuICAgICAgY29uc3QgbmV3VGFibGUgPSBjb3JlLnV0aWxzLmNyZWF0ZVRhYmxlV2l0aE9wdGlvbnMoMiwgMiwge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgYm9yZGVyOiAnMScsXG4gICAgICAgICAgbmV3VGFibGU6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGVkaXRvci5pbnNlcnROb2RlKG5ld1RhYmxlKTtcbiAgICAgIG1vdmVUb0JlZ2lubmluZ09mVGFibGUoZWRpdG9yLCBuZXdUYWJsZSk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBOb3RlIC0gdGhlIG5vZGUgbWF5IG5vdCBiZSBhIHRhYmxlIG5vZGUgLSBpdCBtYXkgYmUgYSBub2RlIGluc2lkZSBhIHRhYmxlLlxuICAgICAqL1xuICAgIGN1c3RvbVRvb2xiYXI6IChub2RlLCB2YWx1ZSwgZWRpdG9yLCBvblRvb2xiYXJEb25lKSA9PiB7XG4gICAgICBsb2coJ1tjdXN0b21Ub29sYmFyXSBub2RlLmRhdGE6ICcsIG5vZGUuZGF0YSk7XG5cbiAgICAgIGNvbnN0IFt0YWJsZUJsb2NrXSA9IGNvcmUudXRpbHMuZ2V0VGFibGVCbG9jayhlZGl0b3IpO1xuICAgICAgbG9nKCdbY3VzdG9tVG9vbGJhcl0gdGFibGVCbG9jazogJywgdGFibGVCbG9jayk7XG5cbiAgICAgIGNvbnN0IGhhc0JvcmRlciA9ICgpID0+IGdldCh0YWJsZUJsb2NrLCAnZGF0YS5ib3JkZXInKSAhPT0gJzAnO1xuICAgICAgY29uc3QgYWRkUm93ID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBbdHJOb2RlLCB0clBhdGhdID0gZ2V0QW5jZXN0b3JCeVR5cGUoZWRpdG9yLCAndHInKTtcblxuICAgICAgICBsb2coJ1thZGRSb3ddJyk7XG5cbiAgICAgICAgaWYgKHRyTm9kZSkge1xuICAgICAgICAgIGNvbnN0IG5ld1RyID0geyB0eXBlOiAndHInLCBjaGlsZHJlbjogW10gfTtcbiAgICAgICAgICBjb25zdCBjb2x1bW5zTGVuZ3RoID0gdHJOb2RlLmNoaWxkcmVuLmxlbmd0aDtcblxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1uc0xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBuZXdUci5jaGlsZHJlbi5wdXNoKHtcbiAgICAgICAgICAgICAgdHlwZTogJ3RkJyxcbiAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0ZXh0OiAnJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgVHJhbnNmb3Jtcy5pbnNlcnROb2RlcyhlZGl0b3IsIFtuZXdUcl0sIHsgYXQ6IHRyUGF0aCB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVtb3ZlUm93ID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBbdEJvZHlOb2RlLCB0Qm9keVBhdGhdID0gZ2V0QW5jZXN0b3JCeVR5cGUoZWRpdG9yLCAndGJvZHknKTtcblxuICAgICAgICBsb2coJ1tyZW1vdmVSb3ddJyk7XG5cbiAgICAgICAgaWYgKHRCb2R5UGF0aCkge1xuICAgICAgICAgIGlmICh0Qm9keU5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY29uc3QgWywgdHJQYXRoXSA9IGdldEFuY2VzdG9yQnlUeXBlKGVkaXRvciwgJ3RyJyk7XG5cbiAgICAgICAgICAgIGxvZygnW3JlbW92ZVJvd10nKTtcblxuICAgICAgICAgICAgaWYgKHRyUGF0aCkge1xuICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnJlbW92ZU5vZGVzKGVkaXRvciwgeyBhdDogdHJQYXRoIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3QgYWRkQ29sdW1uID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBbdEJvZHlOb2RlLCB0Qm9keVBhdGhdID0gZ2V0QW5jZXN0b3JCeVR5cGUoZWRpdG9yLCAndGJvZHknKTtcblxuICAgICAgICBsb2coJ1thZGRDb2x1bW5dJyk7XG5cbiAgICAgICAgaWYgKHRCb2R5Tm9kZSkge1xuICAgICAgICAgIGNvbnN0IGVtcHR5VGQgPSB7XG4gICAgICAgICAgICB0eXBlOiAndGQnLFxuICAgICAgICAgICAgY2hpbGRyZW46IFt7IHRleHQ6ICcnIH1dXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCB0ckVsZW1lbnRzID0gRWRpdG9yLm5vZGVzKGVkaXRvciwge1xuICAgICAgICAgICAgYXQ6IHRCb2R5UGF0aCwgLy8gUGF0aCBvZiBFZGl0b3JcbiAgICAgICAgICAgIG1hdGNoOiBub2RlID0+ICd0cicgPT09IG5vZGUudHlwZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBbdHJOb2RlLCBub2RlUGF0aF0gb2YgdHJFbGVtZW50cykge1xuICAgICAgICAgICAgVHJhbnNmb3Jtcy5pbnNlcnROb2RlcyhlZGl0b3IsIFtlbXB0eVRkXSwge1xuICAgICAgICAgICAgICBhdDogWy4uLm5vZGVQYXRoLCB0ck5vZGUuY2hpbGRyZW4ubGVuZ3RoXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZW1vdmVDb2x1bW4gPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IFt0Qm9keU5vZGUsIHRCb2R5UGF0aF0gPSBnZXRBbmNlc3RvckJ5VHlwZShlZGl0b3IsICd0Ym9keScpO1xuXG4gICAgICAgIGxvZygnW2FkZENvbHVtbl0nKTtcblxuICAgICAgICBpZiAodEJvZHlOb2RlKSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudFBhdGggPSBFZGl0b3IucGF0aChlZGl0b3IsIGVkaXRvci5zZWxlY3Rpb24pO1xuICAgICAgICAgIGNvbnN0IGNvbHVtbkluZGV4ID0gY3VycmVudFBhdGhbY3VycmVudFBhdGgubGVuZ3RoIC0gMl07XG4gICAgICAgICAgY29uc3QgdHJFbGVtZW50cyA9IEVkaXRvci5ub2RlcyhlZGl0b3IsIHtcbiAgICAgICAgICAgIGF0OiB0Qm9keVBhdGgsIC8vIFBhdGggb2YgRWRpdG9yXG4gICAgICAgICAgICBtYXRjaDogbm9kZSA9PiAndHInID09PSBub2RlLnR5cGVcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGZvciAoY29uc3QgW3RyTm9kZSwgbm9kZVBhdGhdIG9mIHRyRWxlbWVudHMpIHtcbiAgICAgICAgICAgIGlmICh0ck5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnJlbW92ZU5vZGVzKGVkaXRvciwgeyBhdDogWy4uLm5vZGVQYXRoLCBjb2x1bW5JbmRleF0gfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZW1vdmVUYWJsZSA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgW3RhYmxlTm9kZSwgdGFibGVQYXRoXSA9IGdldEFuY2VzdG9yQnlUeXBlKGVkaXRvciwgJ3RhYmxlJyk7XG5cbiAgICAgICAgZWRpdG9yLmFwcGx5KHtcbiAgICAgICAgICB0eXBlOiAncmVtb3ZlX25vZGUnLFxuICAgICAgICAgIHBhdGg6IHRhYmxlUGF0aCxcbiAgICAgICAgICBub2RlOiB0YWJsZU5vZGVcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB0b2dnbGVCb3JkZXIgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gdGFibGVCbG9jaztcbiAgICAgICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgYm9yZGVyOiBoYXNCb3JkZXIoKSA/ICcwJyA6ICcxJ1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBbLCB0YWJsZVBhdGhdID0gZ2V0QW5jZXN0b3JCeVR5cGUoZWRpdG9yLCAndGFibGUnKTtcblxuICAgICAgICBsb2coJ1t0b2dnbGVCb3JkZXJdIHVwZGF0ZTogJywgdXBkYXRlKTtcblxuICAgICAgICBlZGl0b3IuYXBwbHkoe1xuICAgICAgICAgIHR5cGU6ICdzZXRfbm9kZScsXG4gICAgICAgICAgcGF0aDogdGFibGVQYXRoLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGRhdGE6IG5vZGUuZGF0YVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbmV3UHJvcGVydGllczogeyBkYXRhOiB1cGRhdGUgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uRG9uZSA9ICgpID0+IHtcbiAgICAgICAgbG9nKCdbb25Eb25lXSBjYWxsIG9uVG9vbGJhckRvbmUuLi4nKTtcbiAgICAgICAgb25Ub29sYmFyRG9uZShudWxsLCB0cnVlKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IFRiID0gKCkgPT4gKFxuICAgICAgICA8VGFibGVUb29sYmFyXG4gICAgICAgICAgZWRpdG9yPXtlZGl0b3J9XG4gICAgICAgICAgcGx1Z2lucz17dG9vbGJhclBsdWdpbnN9XG4gICAgICAgICAgb25DaGFuZ2U9e2MgPT4gb25Ub29sYmFyRG9uZShjLCBmYWxzZSl9XG4gICAgICAgICAgb25BZGRSb3c9e2FkZFJvd31cbiAgICAgICAgICBvblJlbW92ZVJvdz17cmVtb3ZlUm93fVxuICAgICAgICAgIG9uQWRkQ29sdW1uPXthZGRDb2x1bW59XG4gICAgICAgICAgb25SZW1vdmVDb2x1bW49e3JlbW92ZUNvbHVtbn1cbiAgICAgICAgICBvblJlbW92ZVRhYmxlPXtyZW1vdmVUYWJsZX1cbiAgICAgICAgICBoYXNCb3JkZXI9e2hhc0JvcmRlcigpfVxuICAgICAgICAgIG9uVG9nZ2xlQm9yZGVyPXt0b2dnbGVCb3JkZXJ9XG4gICAgICAgICAgb25Eb25lPXtvbkRvbmV9XG4gICAgICAgIC8+XG4gICAgICApO1xuICAgICAgcmV0dXJuIFRiO1xuICAgIH1cbiAgfTtcblxuICBjb3JlLnN1cHBvcnRzID0gKG5vZGUsIGVkaXRvcikgPT4gVEFCTEVfVFlQRVMuaW5jbHVkZXMobm9kZS50eXBlKTtcblxuICBjb25zdCBOb2RlID0gcHJvcHMgPT4ge1xuICAgIHN3aXRjaCAocHJvcHMubm9kZS50eXBlKSB7XG4gICAgICBjYXNlICd0YWJsZSc6XG4gICAgICAgIHJldHVybiA8VGFibGUgey4uLnByb3BzfSBvbkZvY3VzPXtvcHRzLm9uRm9jdXN9IG9uQmx1cj17b3B0cy5vbkJsdXJ9IC8+O1xuICAgICAgY2FzZSAndGJvZHknOlxuICAgICAgICByZXR1cm4gPFRhYmxlQm9keSB7Li4ucHJvcHN9IG9uRm9jdXM9e29wdHMub25Gb2N1c30gb25CbHVyPXtvcHRzLm9uQmx1cn0gLz47XG4gICAgICBjYXNlICd0cic6XG4gICAgICAgIHJldHVybiA8VGFibGVSb3cgey4uLnByb3BzfSAvPjtcbiAgICAgIGNhc2UgJ3RkJzpcbiAgICAgICAgcmV0dXJuIDxUYWJsZUNlbGwgey4uLnByb3BzfSBvbkZvY3VzPXtvcHRzLm9uRm9jdXN9IG9uQmx1cj17b3B0cy5vbkJsdXJ9IC8+O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuICBOb2RlLnByb3BUeXBlcyA9IHtcbiAgICBub2RlOiBQcm9wVHlwZXMub2JqZWN0XG4gIH07XG5cbiAgY29yZS5yZW5kZXJOb2RlID0gTm9kZTtcblxuICByZXR1cm4gY29yZTtcbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZVN0eWxlU3RyaW5nID0gcyA9PiB7XG4gIGNvbnN0IHJlZ2V4ID0gLyhbXFx3LV0qKVxccyo6XFxzKihbXjtdKikvZztcbiAgbGV0IG1hdGNoO1xuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgd2hpbGUgKChtYXRjaCA9IHJlZ2V4LmV4ZWMocykpKSB7XG4gICAgcmVzdWx0W21hdGNoWzFdXSA9IG1hdGNoWzJdLnRyaW0oKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IHJlYWN0QXR0cmlidXRlcyA9IG8gPT4gdG9TdHlsZU9iamVjdChvLCB7IGNhbWVsaXplOiB0cnVlLCBhZGRVbml0czogZmFsc2UgfSk7XG5cbmNvbnN0IGF0dHJpYnV0ZXNUb01hcCA9IGVsID0+IChhY2MsIGF0dHJpYnV0ZSkgPT4ge1xuICBjb25zdCB2YWx1ZSA9IGVsLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuICBpZiAodmFsdWUpIHtcbiAgICBpZiAoYXR0cmlidXRlID09PSAnc3R5bGUnKSB7XG4gICAgICBjb25zdCBzdHlsZVN0cmluZyA9IGVsLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuICAgICAgY29uc3QgcmVhY3RTdHlsZU9iamVjdCA9IHJlYWN0QXR0cmlidXRlcyhwYXJzZVN0eWxlU3RyaW5nKHN0eWxlU3RyaW5nKSk7XG4gICAgICBhY2NbJ3N0eWxlJ10gPSByZWFjdFN0eWxlT2JqZWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICBhY2NbYXR0cmlidXRlXSA9IGVsLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYWNjO1xufTtcblxuY29uc3QgZGF0YVRvQXR0cmlidXRlcyA9IGRhdGEgPT4ge1xuICByZXR1cm4gcmVkdWNlKFxuICAgIGRhdGEsXG4gICAgKGFjYywgdiwgbmFtZSkgPT4ge1xuICAgICAgaWYgKHYpIHtcbiAgICAgICAgYWNjW2NvbnZlcnQobmFtZSldID0gdjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSxcbiAgICB7fVxuICApO1xufTtcblxuY29uc3QgYXR0cmlidXRlcyA9IFsnYm9yZGVyJywgJ2NlbGxwYWRkaW5nJywgJ2NlbGxzcGFjaW5nJywgJ2NsYXNzJywgJ3N0eWxlJ107XG5cbmNvbnN0IGNlbGxBdHRyaWJ1dGVzID0gWydjb2xzcGFuJywgJ3Jvd3NwYW4nLCAnY2xhc3MnLCAnc3R5bGUnXTtcblxuZXhwb3J0IGNvbnN0IHNlcmlhbGl6YXRpb24gPSB7XG4gIGRlc2VyaWFsaXplKGVsLCBuZXh0KSB7XG4gICAgY29uc3QgdGFnID0gZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgJ3RhYmxlJzoge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9XG4gICAgICAgICAgZWwuY2hpbGRyZW4ubGVuZ3RoID09PSAxICYmIGVsLmNoaWxkcmVuWzBdLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3Rib2R5J1xuICAgICAgICAgICAgPyBlbC5jaGlsZHJlblswXS5jaGlsZHJlblxuICAgICAgICAgICAgOiBlbC5jaGlsZHJlbjtcbiAgICAgICAgY29uc3QgYyA9IEFycmF5LmZyb20oY2hpbGRyZW4pO1xuXG4gICAgICAgIHJldHVybiBqc3goXG4gICAgICAgICAgJ2VsZW1lbnQnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6ICd0YWJsZScsXG4gICAgICAgICAgICBkYXRhOiBhdHRyaWJ1dGVzLnJlZHVjZShhdHRyaWJ1dGVzVG9NYXAoZWwpLCB7fSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5leHQoYylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3Rib2R5Jzoge1xuICAgICAgICByZXR1cm4ganN4KFxuICAgICAgICAgICdlbGVtZW50JyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAndGJvZHknXG4gICAgICAgICAgfSxcbiAgICAgICAgICBuZXh0KGVsLmNoaWxkTm9kZXMpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjYXNlICd0aCc6IHtcbiAgICAgICAgcmV0dXJuIGpzeChcbiAgICAgICAgICAnZWxlbWVudCcsXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ3RoJyxcbiAgICAgICAgICAgIGRhdGE6IGNlbGxBdHRyaWJ1dGVzLnJlZHVjZShhdHRyaWJ1dGVzVG9NYXAoZWwpLCB7IGhlYWRlcjogdHJ1ZSB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbmV4dChlbC5jaGlsZE5vZGVzKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY2FzZSAndHInOiB7XG4gICAgICAgIHJldHVybiBqc3goXG4gICAgICAgICAgJ2VsZW1lbnQnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6ICd0cidcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5leHQoQXJyYXkuZnJvbShlbC5jaGlsZHJlbikpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjYXNlICd0ZCc6IHtcbiAgICAgICAgcmV0dXJuIGpzeChcbiAgICAgICAgICAnZWxlbWVudCcsXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ3RkJyxcbiAgICAgICAgICAgIGRhdGE6IGNlbGxBdHRyaWJ1dGVzLnJlZHVjZShhdHRyaWJ1dGVzVG9NYXAoZWwpLCB7IGhlYWRlcjogdHJ1ZSB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbmV4dChlbC5jaGlsZE5vZGVzKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgc2VyaWFsaXplKG9iamVjdCwgY2hpbGRyZW4pIHtcbiAgICBzd2l0Y2ggKG9iamVjdC50eXBlKSB7XG4gICAgICBjYXNlICd0YWJsZSc6IHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGRhdGFUb0F0dHJpYnV0ZXMob2JqZWN0LmRhdGEpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDx0YWJsZSB7Li4uYXR0cmlidXRlc30+XG4gICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3Rib2R5Jzoge1xuICAgICAgICByZXR1cm4gPHRib2R5PntjaGlsZHJlbn08L3Rib2R5PjtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RyJzoge1xuICAgICAgICByZXR1cm4gPHRyPntjaGlsZHJlbn08L3RyPjtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RkJzoge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gZGF0YVRvQXR0cmlidXRlcyhvYmplY3QuZGF0YSk7XG4gICAgICAgIHJldHVybiA8dGQgey4uLmF0dHJpYnV0ZXN9PntjaGlsZHJlbn08L3RkPjtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RoJzoge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gZGF0YVRvQXR0cmlidXRlcyhvYmplY3QuZGF0YSk7XG4gICAgICAgIHJldHVybiA8dGggey4uLmF0dHJpYnV0ZXN9PntjaGlsZHJlbn08L3RoPjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7OztBQUVBLElBQU1BLEdBQUcsR0FBRyxJQUFBQyxpQkFBQSxF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
|