@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
|
@@ -2,29 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
4
|
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
5
7
|
Object.defineProperty(exports, "__esModule", {
|
|
6
8
|
value: true
|
|
7
9
|
});
|
|
8
10
|
exports["default"] = exports.Toolbar = void 0;
|
|
9
11
|
|
|
10
|
-
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
-
|
|
12
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
-
|
|
14
|
-
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
15
|
-
|
|
16
|
-
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
17
|
-
|
|
18
|
-
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
19
|
-
|
|
20
|
-
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
21
|
-
|
|
22
12
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
23
13
|
|
|
24
|
-
var
|
|
14
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
15
|
+
|
|
16
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
25
17
|
|
|
26
18
|
var _slate = require("slate");
|
|
27
19
|
|
|
20
|
+
var _slateReact = require("slate-react");
|
|
21
|
+
|
|
28
22
|
var _Delete = _interopRequireDefault(require("@material-ui/icons/Delete"));
|
|
29
23
|
|
|
30
24
|
var _IconButton = _interopRequireDefault(require("@material-ui/core/IconButton"));
|
|
@@ -35,31 +29,27 @@ var _classnames = _interopRequireDefault(require("classnames"));
|
|
|
35
29
|
|
|
36
30
|
var _debug = _interopRequireDefault(require("debug"));
|
|
37
31
|
|
|
38
|
-
var _slatePropTypes = _interopRequireDefault(require("slate-prop-types"));
|
|
39
|
-
|
|
40
32
|
var _debounce = _interopRequireDefault(require("lodash/debounce"));
|
|
41
33
|
|
|
42
34
|
var _doneButton = require("./done-button");
|
|
43
35
|
|
|
44
|
-
var _utils = require("../utils");
|
|
45
|
-
|
|
46
36
|
var _styles = require("@material-ui/core/styles");
|
|
47
37
|
|
|
48
38
|
var _defaultToolbar = _interopRequireDefault(require("./default-toolbar"));
|
|
49
39
|
|
|
50
40
|
var _characters = require("../characters");
|
|
51
41
|
|
|
52
|
-
function
|
|
42
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
53
43
|
|
|
54
|
-
function
|
|
44
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
55
45
|
|
|
56
|
-
function
|
|
46
|
+
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; }
|
|
57
47
|
|
|
58
|
-
function
|
|
48
|
+
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; }
|
|
59
49
|
|
|
60
50
|
var log = (0, _debug["default"])('@pie-lib:editable-html:plugins:toolbar');
|
|
61
51
|
|
|
62
|
-
var getCustomToolbar = function getCustomToolbar(plugin, node, value,
|
|
52
|
+
var getCustomToolbar = function getCustomToolbar(plugin, node, value, editor, handleDone) {
|
|
63
53
|
if (!plugin) {
|
|
64
54
|
return;
|
|
65
55
|
}
|
|
@@ -78,225 +68,10 @@ var getCustomToolbar = function getCustomToolbar(plugin, node, value, handleDone
|
|
|
78
68
|
return plugin.toolbar.CustomToolbarComp;
|
|
79
69
|
} else if (typeof plugin.toolbar.customToolbar === 'function') {
|
|
80
70
|
log('deprecated - use CustomToolbarComp');
|
|
81
|
-
return plugin.toolbar.customToolbar(node, value,
|
|
71
|
+
return plugin.toolbar.customToolbar(node, value, editor, handleDone);
|
|
82
72
|
}
|
|
83
73
|
};
|
|
84
74
|
|
|
85
|
-
var Toolbar = /*#__PURE__*/function (_React$Component) {
|
|
86
|
-
(0, _inherits2["default"])(Toolbar, _React$Component);
|
|
87
|
-
|
|
88
|
-
var _super = _createSuper(Toolbar);
|
|
89
|
-
|
|
90
|
-
function Toolbar(props) {
|
|
91
|
-
var _this;
|
|
92
|
-
|
|
93
|
-
(0, _classCallCheck2["default"])(this, Toolbar);
|
|
94
|
-
_this = _super.call(this, props);
|
|
95
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "hasMark", function (type) {
|
|
96
|
-
var value = _this.props.value;
|
|
97
|
-
return value.marks.some(function (mark) {
|
|
98
|
-
return mark.type == type;
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "hasBlock", function (type) {
|
|
102
|
-
var value = _this.props.value;
|
|
103
|
-
return value.blocks.some(function (node) {
|
|
104
|
-
return node.type == type;
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onToggle", function (plugin) {
|
|
108
|
-
var _this$props = _this.props,
|
|
109
|
-
value = _this$props.value,
|
|
110
|
-
onChange = _this$props.onChange;
|
|
111
|
-
if (!plugin.onToggle) return;
|
|
112
|
-
var change = plugin.onToggle(value.change());
|
|
113
|
-
onChange(change);
|
|
114
|
-
});
|
|
115
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onClick", function (e) {
|
|
116
|
-
log('[onClick]');
|
|
117
|
-
e.preventDefault();
|
|
118
|
-
});
|
|
119
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onButtonClick", function (fn) {
|
|
120
|
-
return function (e) {
|
|
121
|
-
e.preventDefault();
|
|
122
|
-
fn();
|
|
123
|
-
};
|
|
124
|
-
});
|
|
125
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onToolbarDone", function (change, finishEditing) {
|
|
126
|
-
log('[onToolbarDone] change: ', change, 'finishEditing: ', finishEditing);
|
|
127
|
-
var _this$props2 = _this.props,
|
|
128
|
-
onChange = _this$props2.onChange,
|
|
129
|
-
onDone = _this$props2.onDone; // use handler only if this is an actual Slate Change
|
|
130
|
-
|
|
131
|
-
if (change instanceof _slate.Change) {
|
|
132
|
-
onChange(change, function () {
|
|
133
|
-
if (finishEditing) {
|
|
134
|
-
onDone();
|
|
135
|
-
}
|
|
136
|
-
});
|
|
137
|
-
} else {
|
|
138
|
-
if (finishEditing) {
|
|
139
|
-
log('[onToolbarChange] call onDone');
|
|
140
|
-
onDone();
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
});
|
|
144
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onDeleteClick", (0, _debounce["default"])(function (e, plugin, node, value, onChange) {
|
|
145
|
-
return plugin.deleteNode(e, node, value, onChange);
|
|
146
|
-
}, 500));
|
|
147
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onDeleteMouseDown", function (e, plugin, node, value, onChange) {
|
|
148
|
-
e.persist();
|
|
149
|
-
|
|
150
|
-
_this.onDeleteClick(e, plugin, node, value, onChange);
|
|
151
|
-
});
|
|
152
|
-
_this.state = {
|
|
153
|
-
change: null
|
|
154
|
-
};
|
|
155
|
-
return _this;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
(0, _createClass2["default"])(Toolbar, [{
|
|
159
|
-
key: "componentWillUnmount",
|
|
160
|
-
value: function componentWillUnmount() {
|
|
161
|
-
(0, _characters.removeDialogs)();
|
|
162
|
-
}
|
|
163
|
-
}, {
|
|
164
|
-
key: "render",
|
|
165
|
-
value: function render() {
|
|
166
|
-
var _this2 = this,
|
|
167
|
-
_classNames;
|
|
168
|
-
|
|
169
|
-
var _this$props3 = this.props,
|
|
170
|
-
classes = _this$props3.classes,
|
|
171
|
-
plugins = _this$props3.plugins,
|
|
172
|
-
pluginProps = _this$props3.pluginProps,
|
|
173
|
-
toolbarOpts = _this$props3.toolbarOpts,
|
|
174
|
-
value = _this$props3.value,
|
|
175
|
-
autoWidth = _this$props3.autoWidth,
|
|
176
|
-
onChange = _this$props3.onChange,
|
|
177
|
-
getFocusedValue = _this$props3.getFocusedValue,
|
|
178
|
-
isFocused = _this$props3.isFocused,
|
|
179
|
-
onDone = _this$props3.onDone,
|
|
180
|
-
toolbarRef = _this$props3.toolbarRef;
|
|
181
|
-
var node = (0, _utils.findSingleNode)(value);
|
|
182
|
-
var parentNode = (0, _utils.findParentNode)(value, node);
|
|
183
|
-
log(' --------------> [render] node: ', node);
|
|
184
|
-
log('[render] node: ', node);
|
|
185
|
-
var plugin = plugins.find(function (p) {
|
|
186
|
-
if (!node) {
|
|
187
|
-
return;
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
if (p.toolbar) {
|
|
191
|
-
return p.toolbar.supports && p.toolbar.supports(node, value);
|
|
192
|
-
}
|
|
193
|
-
});
|
|
194
|
-
var parentPlugin = plugins.find(function (p) {
|
|
195
|
-
if (!parentNode) {
|
|
196
|
-
return;
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
if (p.toolbar) {
|
|
200
|
-
return p.toolbar.supports && p.toolbar.supports(parentNode, value);
|
|
201
|
-
}
|
|
202
|
-
});
|
|
203
|
-
log('[render] plugin: ', plugin);
|
|
204
|
-
|
|
205
|
-
var handleDone = function handleDone(change, done) {
|
|
206
|
-
var handler = onDone;
|
|
207
|
-
|
|
208
|
-
if (plugin && plugin.toolbar && plugin.toolbar.customToolbar) {
|
|
209
|
-
handler = _this2.onToolbarDone;
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
handler(change, done);
|
|
213
|
-
|
|
214
|
-
if (parentPlugin && parentPlugin.handleDone) {
|
|
215
|
-
parentPlugin.handleDone(value, node, plugin, onChange);
|
|
216
|
-
}
|
|
217
|
-
};
|
|
218
|
-
|
|
219
|
-
var handleDataChange = function handleDataChange(key, data) {
|
|
220
|
-
_this2.props.onDataChange(key, data);
|
|
221
|
-
};
|
|
222
|
-
|
|
223
|
-
var CustomToolbar = getCustomToolbar(plugin, node, value, handleDone, this.props.onDataChange);
|
|
224
|
-
var filteredPlugins = plugin && plugin.filterPlugins ? plugin.filterPlugins(node, plugins) : plugins;
|
|
225
|
-
log('[render] CustomToolbar: ', CustomToolbar);
|
|
226
|
-
var parentExtraStyles = parentPlugin && parentPlugin.pluginStyles ? parentPlugin.pluginStyles(node, parentNode, plugin) : {};
|
|
227
|
-
var pluginExtraStyles = plugin && plugin.pluginStyles ? plugin.pluginStyles(node, parentNode, plugin) : {};
|
|
228
|
-
|
|
229
|
-
var extraStyles = _objectSpread(_objectSpread({}, pluginExtraStyles), parentExtraStyles);
|
|
230
|
-
|
|
231
|
-
var deletable = node && plugin && plugin.deleteNode;
|
|
232
|
-
var customToolbarShowDone = node && plugin && plugin.toolbar && plugin.toolbar.showDone && !toolbarOpts.alwaysVisible; // If there is a toolbarOpts we check if the showDone is not equal to false
|
|
233
|
-
|
|
234
|
-
var defaultToolbarShowDone = !toolbarOpts || toolbarOpts.showDone !== false;
|
|
235
|
-
var hasDoneButton = defaultToolbarShowDone || customToolbarShowDone;
|
|
236
|
-
var names = (0, _classnames["default"])(classes.toolbar, (_classNames = {}, (0, _defineProperty2["default"])(_classNames, classes.toolbarWithNoDone, !hasDoneButton), (0, _defineProperty2["default"])(_classNames, classes.toolbarTop, toolbarOpts.position === 'top'), (0, _defineProperty2["default"])(_classNames, classes.toolbarRight, toolbarOpts.alignment === 'right'), (0, _defineProperty2["default"])(_classNames, classes.focused, toolbarOpts.alwaysVisible || isFocused), (0, _defineProperty2["default"])(_classNames, classes.autoWidth, autoWidth), (0, _defineProperty2["default"])(_classNames, classes.fullWidth, !autoWidth), _classNames));
|
|
237
|
-
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
238
|
-
className: names,
|
|
239
|
-
style: extraStyles,
|
|
240
|
-
onClick: this.onClick,
|
|
241
|
-
ref: toolbarRef
|
|
242
|
-
}, CustomToolbar ? /*#__PURE__*/_react["default"].createElement(CustomToolbar, {
|
|
243
|
-
node: node,
|
|
244
|
-
value: value,
|
|
245
|
-
onToolbarDone: this.onToolbarDone,
|
|
246
|
-
onDataChange: handleDataChange,
|
|
247
|
-
pluginProps: pluginProps
|
|
248
|
-
}) : /*#__PURE__*/_react["default"].createElement(_defaultToolbar["default"], {
|
|
249
|
-
plugins: filteredPlugins,
|
|
250
|
-
pluginProps: pluginProps,
|
|
251
|
-
value: value,
|
|
252
|
-
onChange: onChange,
|
|
253
|
-
getFocusedValue: getFocusedValue,
|
|
254
|
-
showDone: defaultToolbarShowDone,
|
|
255
|
-
onDone: handleDone,
|
|
256
|
-
deletable: deletable
|
|
257
|
-
}), /*#__PURE__*/_react["default"].createElement("div", {
|
|
258
|
-
className: classes.shared
|
|
259
|
-
}, deletable && /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
|
|
260
|
-
"aria-label": "Delete",
|
|
261
|
-
className: classes.iconRoot,
|
|
262
|
-
onMouseDown: function onMouseDown(e) {
|
|
263
|
-
return _this2.onDeleteMouseDown(e, plugin, node, value, onChange);
|
|
264
|
-
},
|
|
265
|
-
classes: {
|
|
266
|
-
root: classes.iconRoot
|
|
267
|
-
}
|
|
268
|
-
}, /*#__PURE__*/_react["default"].createElement(_Delete["default"], null)), customToolbarShowDone && /*#__PURE__*/_react["default"].createElement(_doneButton.DoneButton, {
|
|
269
|
-
onClick: handleDone
|
|
270
|
-
})));
|
|
271
|
-
}
|
|
272
|
-
}]);
|
|
273
|
-
return Toolbar;
|
|
274
|
-
}(_react["default"].Component);
|
|
275
|
-
|
|
276
|
-
exports.Toolbar = Toolbar;
|
|
277
|
-
(0, _defineProperty2["default"])(Toolbar, "propTypes", {
|
|
278
|
-
zIndex: _propTypes["default"].number,
|
|
279
|
-
value: _slatePropTypes["default"].value.isRequired,
|
|
280
|
-
plugins: _propTypes["default"].array,
|
|
281
|
-
plugin: _propTypes["default"].object,
|
|
282
|
-
onImageClick: _propTypes["default"].func,
|
|
283
|
-
onDone: _propTypes["default"].func.isRequired,
|
|
284
|
-
toolbarRef: _propTypes["default"].func.isRequired,
|
|
285
|
-
classes: _propTypes["default"].object.isRequired,
|
|
286
|
-
isFocused: _propTypes["default"].bool,
|
|
287
|
-
autoWidth: _propTypes["default"].bool,
|
|
288
|
-
onChange: _propTypes["default"].func.isRequired,
|
|
289
|
-
getFocusedValue: _propTypes["default"].func.isRequired,
|
|
290
|
-
pluginProps: _propTypes["default"].object,
|
|
291
|
-
toolbarOpts: _propTypes["default"].shape({
|
|
292
|
-
position: _propTypes["default"].oneOf(['bottom', 'top']),
|
|
293
|
-
alignment: _propTypes["default"].oneOf(['left', 'right']),
|
|
294
|
-
alwaysVisible: _propTypes["default"].bool,
|
|
295
|
-
ref: _propTypes["default"].func,
|
|
296
|
-
showDone: _propTypes["default"].bool
|
|
297
|
-
}),
|
|
298
|
-
onDataChange: _propTypes["default"].func
|
|
299
|
-
});
|
|
300
75
|
var style = {
|
|
301
76
|
toolbar: {
|
|
302
77
|
position: 'absolute',
|
|
@@ -343,9 +118,248 @@ var style = {
|
|
|
343
118
|
}
|
|
344
119
|
};
|
|
345
120
|
|
|
121
|
+
var Toolbar = function Toolbar(props) {
|
|
122
|
+
var _classNames;
|
|
123
|
+
|
|
124
|
+
(0, _react.useEffect)(function () {
|
|
125
|
+
return function () {
|
|
126
|
+
return (0, _characters.removeDialogs)();
|
|
127
|
+
};
|
|
128
|
+
}, []);
|
|
129
|
+
|
|
130
|
+
var hasMark = function hasMark(type) {
|
|
131
|
+
var value = props.value;
|
|
132
|
+
return value.marks.some(function (mark) {
|
|
133
|
+
return mark.type === type;
|
|
134
|
+
});
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
var hasBlock = function hasBlock(type) {
|
|
138
|
+
var value = props.value;
|
|
139
|
+
return value.blocks.some(function (node) {
|
|
140
|
+
return node.type === type;
|
|
141
|
+
});
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
var onToggle = function onToggle(plugin) {
|
|
145
|
+
var value = props.value,
|
|
146
|
+
onChange = props.onChange;
|
|
147
|
+
if (!plugin.onToggle) return;
|
|
148
|
+
var change = plugin.onToggle(value.change());
|
|
149
|
+
onChange(change);
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
var onClick = function onClick(e) {
|
|
153
|
+
log('[onClick]');
|
|
154
|
+
e.preventDefault();
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
var onButtonClick = function onButtonClick(fn) {
|
|
158
|
+
return function (e) {
|
|
159
|
+
e.preventDefault();
|
|
160
|
+
fn();
|
|
161
|
+
};
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
var onToolbarDone = function onToolbarDone(change, finishEditing) {
|
|
165
|
+
log('[onToolbarDone] change: ', change, 'finishEditing: ', finishEditing);
|
|
166
|
+
var onChange = props.onChange,
|
|
167
|
+
onDone = props.onDone;
|
|
168
|
+
|
|
169
|
+
if (change) {
|
|
170
|
+
onChange(change, function () {
|
|
171
|
+
if (finishEditing) {
|
|
172
|
+
onDone();
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
} else {
|
|
176
|
+
if (finishEditing) {
|
|
177
|
+
log('[onToolbarChange] call onDone');
|
|
178
|
+
onDone();
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
var onDeleteClick = (0, _debounce["default"])(function (e, plugin, node, value, onChange) {
|
|
184
|
+
return plugin.deleteNode(e, node, value, onChange);
|
|
185
|
+
}, 500);
|
|
186
|
+
|
|
187
|
+
var onDeleteMouseDown = function onDeleteMouseDown(e, plugin, node, value, onChange) {
|
|
188
|
+
e.persist();
|
|
189
|
+
onDeleteClick(e, plugin, node, value, onChange);
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
var classes = props.classes,
|
|
193
|
+
plugins = props.plugins,
|
|
194
|
+
pluginProps = props.pluginProps,
|
|
195
|
+
toolbarOpts = props.toolbarOpts,
|
|
196
|
+
value = props.value,
|
|
197
|
+
autoWidth = props.autoWidth,
|
|
198
|
+
onChange = props.onChange,
|
|
199
|
+
getFocusedValue = props.getFocusedValue,
|
|
200
|
+
isFocused = props.isFocused,
|
|
201
|
+
onDone = props.onDone,
|
|
202
|
+
toolbarRef = props.toolbarRef;
|
|
203
|
+
var editor = (0, _slateReact.useSlate)();
|
|
204
|
+
var selection = (0, _slateReact.useSlateSelection)();
|
|
205
|
+
|
|
206
|
+
var getNode = function getNode(editor, selection, depth) {
|
|
207
|
+
if (!selection) {
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
var _Editor$node = _slate.Editor.node(editor, selection, depth ? {
|
|
212
|
+
depth: depth
|
|
213
|
+
} : undefined),
|
|
214
|
+
_Editor$node2 = (0, _slicedToArray2["default"])(_Editor$node, 2),
|
|
215
|
+
node = _Editor$node2[0],
|
|
216
|
+
path = _Editor$node2[1];
|
|
217
|
+
|
|
218
|
+
if (!node) {
|
|
219
|
+
return null;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
if (!_slate.Text.isText(node)) {
|
|
223
|
+
return [node, path];
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
return getNode(editor, selection, path.length - 1);
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
var getParentNode = function getParentNode(editor, path) {
|
|
230
|
+
return Array.isArray(path) && path.length > 0 && _slate.Editor.parent(editor, path);
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
var _ref = getNode(editor, selection) || [],
|
|
234
|
+
_ref2 = (0, _slicedToArray2["default"])(_ref, 2),
|
|
235
|
+
node = _ref2[0],
|
|
236
|
+
nodePath = _ref2[1];
|
|
237
|
+
|
|
238
|
+
var _ref3 = getParentNode(editor, nodePath) || [],
|
|
239
|
+
_ref4 = (0, _slicedToArray2["default"])(_ref3, 1),
|
|
240
|
+
parentNode = _ref4[0];
|
|
241
|
+
|
|
242
|
+
log(' --------------> [render] node: ', node);
|
|
243
|
+
log('[render] node: ', node);
|
|
244
|
+
var plugin = plugins.find(function (p) {
|
|
245
|
+
if (!node) {
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
if (p.toolbar) {
|
|
250
|
+
return p.supports && p.supports(node, editor, value);
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
var parentPlugin = plugins.find(function (p) {
|
|
254
|
+
if (!parentNode) {
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
if (p.toolbar) {
|
|
259
|
+
return p.supports && p.supports(parentNode, editor, value);
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
log('[render] plugin: ', plugin);
|
|
263
|
+
|
|
264
|
+
var handleDone = function handleDone(editor) {
|
|
265
|
+
var handler = onDone;
|
|
266
|
+
|
|
267
|
+
if (plugin && plugin.toolbar && plugin.toolbar.customToolbar) {
|
|
268
|
+
handler = onToolbarDone;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
handler(editor);
|
|
272
|
+
|
|
273
|
+
if (parentPlugin && parentPlugin.handleDone) {
|
|
274
|
+
parentPlugin.handleDone(editor, node, plugin);
|
|
275
|
+
}
|
|
276
|
+
};
|
|
277
|
+
|
|
278
|
+
var CustomToolbar = getCustomToolbar(plugin, node, value, editor, handleDone);
|
|
279
|
+
var filteredPlugins = plugin && plugin.filterPlugins ? plugin.filterPlugins(node, plugins) : plugins;
|
|
280
|
+
log('[render] CustomToolbar: ', CustomToolbar);
|
|
281
|
+
var parentExtraStyles = parentPlugin && parentPlugin.pluginStyles ? parentPlugin.pluginStyles(node, parentNode, plugin) : {};
|
|
282
|
+
var pluginExtraStyles = plugin && plugin.pluginStyles ? plugin.pluginStyles(node, parentNode, plugin) : {};
|
|
283
|
+
|
|
284
|
+
var extraStyles = _objectSpread(_objectSpread({}, pluginExtraStyles), parentExtraStyles);
|
|
285
|
+
|
|
286
|
+
var deletable = node && plugin && typeof plugin.deleteNode === 'function';
|
|
287
|
+
var customToolbarShowDone = node && plugin && plugin.toolbar && plugin.toolbar.showDone && !toolbarOpts.alwaysVisible; // If there is a toolbarOpts we check if the showDone is not equal to false
|
|
288
|
+
|
|
289
|
+
var defaultToolbarShowDone = !toolbarOpts || toolbarOpts.showDone !== false;
|
|
290
|
+
var hasDoneButton = defaultToolbarShowDone || customToolbarShowDone;
|
|
291
|
+
var names = (0, _classnames["default"])(classes.toolbar, (_classNames = {}, (0, _defineProperty2["default"])(_classNames, classes.toolbarWithNoDone, !hasDoneButton), (0, _defineProperty2["default"])(_classNames, classes.toolbarTop, toolbarOpts.position === 'top'), (0, _defineProperty2["default"])(_classNames, classes.toolbarRight, toolbarOpts.alignment === 'right'), (0, _defineProperty2["default"])(_classNames, classes.focused, toolbarOpts.alwaysVisible || isFocused), (0, _defineProperty2["default"])(_classNames, classes.autoWidth, autoWidth), (0, _defineProperty2["default"])(_classNames, classes.fullWidth, !autoWidth), _classNames));
|
|
292
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
293
|
+
className: names,
|
|
294
|
+
style: extraStyles,
|
|
295
|
+
onClick: onClick,
|
|
296
|
+
ref: toolbarRef
|
|
297
|
+
}, CustomToolbar ? /*#__PURE__*/_react["default"].createElement(CustomToolbar, {
|
|
298
|
+
editor: editor,
|
|
299
|
+
node: node,
|
|
300
|
+
nodePath: nodePath,
|
|
301
|
+
value: value,
|
|
302
|
+
onToolbarDone: onToolbarDone,
|
|
303
|
+
pluginProps: pluginProps
|
|
304
|
+
}) : /*#__PURE__*/_react["default"].createElement(_defaultToolbar["default"], {
|
|
305
|
+
editor: editor,
|
|
306
|
+
nodePath: nodePath,
|
|
307
|
+
plugins: filteredPlugins,
|
|
308
|
+
pluginProps: pluginProps,
|
|
309
|
+
value: value,
|
|
310
|
+
onChange: onChange,
|
|
311
|
+
getFocusedValue: getFocusedValue,
|
|
312
|
+
showDone: defaultToolbarShowDone,
|
|
313
|
+
onDone: handleDone,
|
|
314
|
+
deletable: deletable
|
|
315
|
+
}), /*#__PURE__*/_react["default"].createElement("div", {
|
|
316
|
+
className: classes.shared
|
|
317
|
+
}, deletable && /*#__PURE__*/_react["default"].createElement(_IconButton["default"], {
|
|
318
|
+
"aria-label": "Delete",
|
|
319
|
+
className: classes.iconRoot,
|
|
320
|
+
onMouseDown: function onMouseDown(e) {
|
|
321
|
+
return onDeleteMouseDown(e, plugin, node, value, onChange);
|
|
322
|
+
},
|
|
323
|
+
classes: {
|
|
324
|
+
root: classes.iconRoot
|
|
325
|
+
}
|
|
326
|
+
}, /*#__PURE__*/_react["default"].createElement(_Delete["default"], null)), customToolbarShowDone && /*#__PURE__*/_react["default"].createElement(_doneButton.DoneButton, {
|
|
327
|
+
onClick: handleDone
|
|
328
|
+
})));
|
|
329
|
+
};
|
|
330
|
+
|
|
331
|
+
exports.Toolbar = Toolbar;
|
|
332
|
+
Toolbar.propTypes = {
|
|
333
|
+
editor: _propTypes["default"].object.isRequired,
|
|
334
|
+
zIndex: _propTypes["default"].number,
|
|
335
|
+
value: _propTypes["default"].arrayOf(_propTypes["default"].shape({
|
|
336
|
+
type: _propTypes["default"].string,
|
|
337
|
+
children: _propTypes["default"].array,
|
|
338
|
+
data: _propTypes["default"].object
|
|
339
|
+
})),
|
|
340
|
+
plugins: _propTypes["default"].array,
|
|
341
|
+
plugin: _propTypes["default"].object,
|
|
342
|
+
onImageClick: _propTypes["default"].func,
|
|
343
|
+
onDone: _propTypes["default"].func.isRequired,
|
|
344
|
+
toolbarRef: _propTypes["default"].func.isRequired,
|
|
345
|
+
classes: _propTypes["default"].object.isRequired,
|
|
346
|
+
isFocused: _propTypes["default"].bool,
|
|
347
|
+
autoWidth: _propTypes["default"].bool,
|
|
348
|
+
onChange: _propTypes["default"].func.isRequired,
|
|
349
|
+
getFocusedValue: _propTypes["default"].func.isRequired,
|
|
350
|
+
pluginProps: _propTypes["default"].object,
|
|
351
|
+
toolbarOpts: _propTypes["default"].shape({
|
|
352
|
+
position: _propTypes["default"].oneOf(['bottom', 'top']),
|
|
353
|
+
alignment: _propTypes["default"].oneOf(['left', 'right']),
|
|
354
|
+
alwaysVisible: _propTypes["default"].bool,
|
|
355
|
+
ref: _propTypes["default"].func,
|
|
356
|
+
showDone: _propTypes["default"].bool
|
|
357
|
+
})
|
|
358
|
+
};
|
|
359
|
+
|
|
346
360
|
var _default = (0, _styles.withStyles)(style, {
|
|
347
361
|
index: 1000
|
|
348
362
|
})(Toolbar);
|
|
349
363
|
|
|
350
364
|
exports["default"] = _default;
|
|
351
|
-
//# sourceMappingURL=toolbar.js.map
|
|
365
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2ciLCJkZWJ1ZyIsImdldEN1c3RvbVRvb2xiYXIiLCJwbHVnaW4iLCJub2RlIiwidmFsdWUiLCJlZGl0b3IiLCJoYW5kbGVEb25lIiwidG9vbGJhciIsIkN1c3RvbVRvb2xiYXJDb21wIiwiY3VzdG9tVG9vbGJhciIsInN0eWxlIiwicG9zaXRpb24iLCJ6SW5kZXgiLCJjdXJzb3IiLCJqdXN0aWZ5Q29udGVudCIsImJhY2tncm91bmQiLCJtaW5XaWR0aCIsIm1hcmdpbiIsInBhZGRpbmciLCJib3hTaGFkb3ciLCJib3hTaXppbmciLCJkaXNwbGF5IiwidG9vbGJhcldpdGhOb0RvbmUiLCJ0b29sYmFyVG9wIiwidG9wIiwidG9vbGJhclJpZ2h0IiwicmlnaHQiLCJmdWxsV2lkdGgiLCJ3aWR0aCIsImF1dG9XaWR0aCIsImZvY3VzZWQiLCJpY29uUm9vdCIsImhlaWdodCIsInZlcnRpY2FsQWxpZ24iLCJsYWJlbCIsImNvbG9yIiwic2hhcmVkIiwiVG9vbGJhciIsInByb3BzIiwidXNlRWZmZWN0IiwicmVtb3ZlQ2hhcmFjdGVyRGlhbG9ncyIsImhhc01hcmsiLCJ0eXBlIiwibWFya3MiLCJzb21lIiwibWFyayIsImhhc0Jsb2NrIiwiYmxvY2tzIiwib25Ub2dnbGUiLCJvbkNoYW5nZSIsImNoYW5nZSIsIm9uQ2xpY2siLCJlIiwicHJldmVudERlZmF1bHQiLCJvbkJ1dHRvbkNsaWNrIiwiZm4iLCJvblRvb2xiYXJEb25lIiwiZmluaXNoRWRpdGluZyIsIm9uRG9uZSIsIm9uRGVsZXRlQ2xpY2siLCJkZWJvdW5jZSIsImRlbGV0ZU5vZGUiLCJvbkRlbGV0ZU1vdXNlRG93biIsInBlcnNpc3QiLCJjbGFzc2VzIiwicGx1Z2lucyIsInBsdWdpblByb3BzIiwidG9vbGJhck9wdHMiLCJnZXRGb2N1c2VkVmFsdWUiLCJpc0ZvY3VzZWQiLCJ0b29sYmFyUmVmIiwidXNlU2xhdGUiLCJzZWxlY3Rpb24iLCJ1c2VTbGF0ZVNlbGVjdGlvbiIsImdldE5vZGUiLCJkZXB0aCIsIkVkaXRvciIsInVuZGVmaW5lZCIsInBhdGgiLCJUZXh0IiwiaXNUZXh0IiwibGVuZ3RoIiwiZ2V0UGFyZW50Tm9kZSIsIkFycmF5IiwiaXNBcnJheSIsInBhcmVudCIsIm5vZGVQYXRoIiwicGFyZW50Tm9kZSIsImZpbmQiLCJwIiwic3VwcG9ydHMiLCJwYXJlbnRQbHVnaW4iLCJoYW5kbGVyIiwiQ3VzdG9tVG9vbGJhciIsImZpbHRlcmVkUGx1Z2lucyIsImZpbHRlclBsdWdpbnMiLCJwYXJlbnRFeHRyYVN0eWxlcyIsInBsdWdpblN0eWxlcyIsInBsdWdpbkV4dHJhU3R5bGVzIiwiZXh0cmFTdHlsZXMiLCJkZWxldGFibGUiLCJjdXN0b21Ub29sYmFyU2hvd0RvbmUiLCJzaG93RG9uZSIsImFsd2F5c1Zpc2libGUiLCJkZWZhdWx0VG9vbGJhclNob3dEb25lIiwiaGFzRG9uZUJ1dHRvbiIsIm5hbWVzIiwiY2xhc3NOYW1lcyIsImFsaWdubWVudCIsInJvb3QiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJvYmplY3QiLCJpc1JlcXVpcmVkIiwibnVtYmVyIiwiYXJyYXlPZiIsInNoYXBlIiwic3RyaW5nIiwiY2hpbGRyZW4iLCJhcnJheSIsImRhdGEiLCJvbkltYWdlQ2xpY2siLCJmdW5jIiwiYm9vbCIsIm9uZU9mIiwicmVmIiwid2l0aFN0eWxlcyIsImluZGV4Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BsdWdpbnMvdG9vbGJhci90b29sYmFyLmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ2hhbmdlLCBFZGl0b3IsIEVsZW1lbnQgYXMgU2xhdGVFbGVtZW50LCBUZXh0LCBOb2RlIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgdXNlU2xhdGUsIHVzZVNsYXRlU2VsZWN0aW9uIH0gZnJvbSBcInNsYXRlLXJlYWN0XCI7XG5pbXBvcnQgRGVsZXRlIGZyb20gJ0BtYXRlcmlhbC11aS9pY29ucy9EZWxldGUnO1xuaW1wb3J0IEljb25CdXR0b24gZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUvSWNvbkJ1dHRvbic7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gJ2xvZGFzaC9kZWJvdW5jZSc7XG5cbmltcG9ydCB7IERvbmVCdXR0b24gfSBmcm9tICcuL2RvbmUtYnV0dG9uJztcblxuaW1wb3J0IHsgd2l0aFN0eWxlcyB9IGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL3N0eWxlcyc7XG5pbXBvcnQgRGVmYXVsdFRvb2xiYXIgZnJvbSAnLi9kZWZhdWx0LXRvb2xiYXInO1xuaW1wb3J0IHsgcmVtb3ZlRGlhbG9ncyBhcyByZW1vdmVDaGFyYWN0ZXJEaWFsb2dzIH0gZnJvbSAnLi4vY2hhcmFjdGVycyc7XG5cbmNvbnN0IGxvZyA9IGRlYnVnKCdAcGllLWxpYjplZGl0YWJsZS1odG1sOnBsdWdpbnM6dG9vbGJhcicpO1xuXG5jb25zdCBnZXRDdXN0b21Ub29sYmFyID0gKHBsdWdpbiwgbm9kZSwgdmFsdWUsIGVkaXRvciwgaGFuZGxlRG9uZSkgPT4ge1xuICBpZiAoIXBsdWdpbikge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIXBsdWdpbi50b29sYmFyKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChwbHVnaW4udG9vbGJhci5DdXN0b21Ub29sYmFyQ29tcCkge1xuICAgIC8qKlxuICAgICAqIFVzaW5nIGEgcHJlLWRlZmluZWQgQ29tcG9uZW50IHNob3VsZCBiZSBwcmVmZXJyZWRcbiAgICAgKiBhcyB0aGUgcmVuZGVyaW5nIG9mIGl0IChhbmQgaXQncyBjaGlsZHJlbikgY2FuIGJlIG9wdGltaXplZCBieSBSZWFjdC5cbiAgICAgKiBJZiB5b3Uga2VlcCByZS1kZWZpbmluZyB0aGUgY29tcCB3aXRoIGFuIGlubGluZSBmdW5jdGlvblxuICAgICAqIHRoZW4gcmVhY3Qgd2lsbCBoYXZlIHRvIHJlLXJlbmRlci5cbiAgICAgKi9cbiAgICByZXR1cm4gcGx1Z2luLnRvb2xiYXIuQ3VzdG9tVG9vbGJhckNvbXA7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHBsdWdpbi50b29sYmFyLmN1c3RvbVRvb2xiYXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBsb2coJ2RlcHJlY2F0ZWQgLSB1c2UgQ3VzdG9tVG9vbGJhckNvbXAnKTtcbiAgICByZXR1cm4gcGx1Z2luLnRvb2xiYXIuY3VzdG9tVG9vbGJhcihub2RlLCB2YWx1ZSwgZWRpdG9yLCBoYW5kbGVEb25lKTtcbiAgfVxufTtcblxuY29uc3Qgc3R5bGUgPSB7XG4gIHRvb2xiYXI6IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB6SW5kZXg6IDEwLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicsXG4gICAgYmFja2dyb3VuZDogJ3ZhcigtLWVkaXRhYmxlLWh0bWwtdG9vbGJhci1iZywgI2VmZWZlZiknLFxuICAgIG1pbldpZHRoOiAnMjgwcHgnLFxuICAgIG1hcmdpbjogJzVweCAwIDAgMCcsXG4gICAgcGFkZGluZzogJzJweCcsXG4gICAgYm94U2hhZG93OlxuICAgICAgJzBweCAxcHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDBweCAycHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLCAwcHggM3B4IDFweCAtMnB4IHJnYmEoMCwgMCwgMCwgMC4xMiknLFxuICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgIGRpc3BsYXk6ICdub25lJ1xuICB9LFxuICB0b29sYmFyV2l0aE5vRG9uZToge1xuICAgIG1pbldpZHRoOiAnMjY1cHgnXG4gIH0sXG4gIHRvb2xiYXJUb3A6IHtcbiAgICB0b3A6ICctNDVweCdcbiAgfSxcbiAgdG9vbGJhclJpZ2h0OiB7XG4gICAgcmlnaHQ6IDBcbiAgfSxcbiAgZnVsbFdpZHRoOiB7XG4gICAgd2lkdGg6ICcxMDAlJ1xuICB9LFxuICBhdXRvV2lkdGg6IHtcbiAgICB3aWR0aDogJ2F1dG8nXG4gIH0sXG4gIGZvY3VzZWQ6IHtcbiAgICBkaXNwbGF5OiAnZmxleCdcbiAgfSxcbiAgaWNvblJvb3Q6IHtcbiAgICB3aWR0aDogJzI4cHgnLFxuICAgIGhlaWdodDogJzI4cHgnLFxuICAgIHBhZGRpbmc6ICc0cHgnLFxuICAgIHZlcnRpY2FsQWxpZ246ICd0b3AnXG4gIH0sXG4gIGxhYmVsOiB7XG4gICAgY29sb3I6ICd2YXIoLS1lZGl0YWJsZS1odG1sLXRvb2xiYXItY2hlY2ssICMwMGJiMDApJ1xuICB9LFxuICBzaGFyZWQ6IHtcbiAgICBkaXNwbGF5OiAnZmxleCdcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IFRvb2xiYXIgPSBwcm9wcyA9PiB7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHJlbW92ZUNoYXJhY3RlckRpYWxvZ3MoKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGhhc01hcmsgPSB0eXBlID0+IHtcbiAgICBjb25zdCB7IHZhbHVlIH0gPSBwcm9wcztcbiAgICByZXR1cm4gdmFsdWUubWFya3Muc29tZShtYXJrID0+IG1hcmsudHlwZSA9PT0gdHlwZSk7XG4gIH07XG5cbiAgY29uc3QgaGFzQmxvY2sgPSB0eXBlID0+IHtcbiAgICBjb25zdCB7IHZhbHVlIH0gPSBwcm9wcztcbiAgICByZXR1cm4gdmFsdWUuYmxvY2tzLnNvbWUobm9kZSA9PiBub2RlLnR5cGUgPT09IHR5cGUpO1xuICB9O1xuXG4gIGNvbnN0IG9uVG9nZ2xlID0gcGx1Z2luID0+IHtcbiAgICBjb25zdCB7IHZhbHVlLCBvbkNoYW5nZSB9ID0gcHJvcHM7XG5cbiAgICBpZiAoIXBsdWdpbi5vblRvZ2dsZSkgcmV0dXJuO1xuXG4gICAgY29uc3QgY2hhbmdlID0gcGx1Z2luLm9uVG9nZ2xlKHZhbHVlLmNoYW5nZSgpKTtcbiAgICBvbkNoYW5nZShjaGFuZ2UpO1xuICB9O1xuXG4gIGNvbnN0IG9uQ2xpY2sgPSBlID0+IHtcbiAgICBsb2coJ1tvbkNsaWNrXScpO1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgfTtcblxuICBjb25zdCBvbkJ1dHRvbkNsaWNrID0gZm4gPT4ge1xuICAgIHJldHVybiBlID0+IHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGZuKCk7XG4gICAgfTtcbiAgfTtcblxuICBjb25zdCBvblRvb2xiYXJEb25lID0gKGNoYW5nZSwgZmluaXNoRWRpdGluZykgPT4ge1xuICAgIGxvZygnW29uVG9vbGJhckRvbmVdIGNoYW5nZTogJywgY2hhbmdlLCAnZmluaXNoRWRpdGluZzogJywgZmluaXNoRWRpdGluZyk7XG4gICAgY29uc3QgeyBvbkNoYW5nZSwgb25Eb25lIH0gPSBwcm9wcztcblxuICAgIGlmIChjaGFuZ2UpIHtcbiAgICAgIG9uQ2hhbmdlKGNoYW5nZSwgKCkgPT4ge1xuICAgICAgICBpZiAoZmluaXNoRWRpdGluZykge1xuICAgICAgICAgIG9uRG9uZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGZpbmlzaEVkaXRpbmcpIHtcbiAgICAgICAgbG9nKCdbb25Ub29sYmFyQ2hhbmdlXSBjYWxsIG9uRG9uZScpO1xuICAgICAgICBvbkRvbmUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgb25EZWxldGVDbGljayA9IGRlYm91bmNlKFxuICAgIChlLCBwbHVnaW4sIG5vZGUsIHZhbHVlLCBvbkNoYW5nZSkgPT4gcGx1Z2luLmRlbGV0ZU5vZGUoZSwgbm9kZSwgdmFsdWUsIG9uQ2hhbmdlKSxcbiAgICA1MDBcbiAgKTtcblxuICBjb25zdCBvbkRlbGV0ZU1vdXNlRG93biA9IChlLCBwbHVnaW4sIG5vZGUsIHZhbHVlLCBvbkNoYW5nZSkgPT4ge1xuICAgIGUucGVyc2lzdCgpO1xuICAgIG9uRGVsZXRlQ2xpY2soZSwgcGx1Z2luLCBub2RlLCB2YWx1ZSwgb25DaGFuZ2UpO1xuICB9O1xuXG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIHBsdWdpbnMsXG4gICAgcGx1Z2luUHJvcHMsXG4gICAgdG9vbGJhck9wdHMsXG4gICAgdmFsdWUsXG4gICAgYXV0b1dpZHRoLFxuICAgIG9uQ2hhbmdlLFxuICAgIGdldEZvY3VzZWRWYWx1ZSxcbiAgICBpc0ZvY3VzZWQsXG4gICAgb25Eb25lLFxuICAgIHRvb2xiYXJSZWZcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IGVkaXRvciA9IHVzZVNsYXRlKCk7XG4gIGNvbnN0IHNlbGVjdGlvbiA9IHVzZVNsYXRlU2VsZWN0aW9uKCk7XG4gIGNvbnN0IGdldE5vZGUgPSAoZWRpdG9yLCBzZWxlY3Rpb24sIGRlcHRoKSA9PiB7XG4gICAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IFtub2RlLCBwYXRoXSA9IEVkaXRvci5ub2RlKGVkaXRvciwgc2VsZWN0aW9uLCBkZXB0aCA/IHsgZGVwdGggfSA6IHVuZGVmaW5lZCk7XG5cbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICghVGV4dC5pc1RleHQobm9kZSkpIHtcbiAgICAgIHJldHVybiBbbm9kZSwgcGF0aF07XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldE5vZGUoZWRpdG9yLCBzZWxlY3Rpb24sIHBhdGgubGVuZ3RoIC0gMSk7XG4gIH07XG4gIGNvbnN0IGdldFBhcmVudE5vZGUgPSAoZWRpdG9yLCBwYXRoKSA9PiBBcnJheS5pc0FycmF5KHBhdGgpICYmIHBhdGgubGVuZ3RoID4gMCAmJiBFZGl0b3IucGFyZW50KGVkaXRvciwgcGF0aCk7XG5cbiAgY29uc3QgW25vZGUsIG5vZGVQYXRoXSA9IGdldE5vZGUoZWRpdG9yLCBzZWxlY3Rpb24pIHx8IFtdO1xuICBjb25zdCBbcGFyZW50Tm9kZV0gPSBnZXRQYXJlbnROb2RlKGVkaXRvciwgbm9kZVBhdGgpIHx8IFtdO1xuXG4gIGxvZygnIC0tLS0tLS0tLS0tLS0tPiBbcmVuZGVyXSBub2RlOiAnLCBub2RlKTtcbiAgbG9nKCdbcmVuZGVyXSBub2RlOiAnLCBub2RlKTtcblxuICBjb25zdCBwbHVnaW4gPSBwbHVnaW5zLmZpbmQocCA9PiB7XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHAudG9vbGJhcikge1xuICAgICAgcmV0dXJuIHAuc3VwcG9ydHMgJiYgcC5zdXBwb3J0cyhub2RlLCBlZGl0b3IsIHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBwYXJlbnRQbHVnaW4gPSBwbHVnaW5zLmZpbmQocCA9PiB7XG4gICAgaWYgKCFwYXJlbnROb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHAudG9vbGJhcikge1xuICAgICAgcmV0dXJuIHAuc3VwcG9ydHMgJiYgcC5zdXBwb3J0cyhwYXJlbnROb2RlLCBlZGl0b3IsIHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuXG4gIGxvZygnW3JlbmRlcl0gcGx1Z2luOiAnLCBwbHVnaW4pO1xuXG4gIGNvbnN0IGhhbmRsZURvbmUgPSBlZGl0b3IgPT4ge1xuICAgIGxldCBoYW5kbGVyID0gb25Eb25lO1xuXG4gICAgaWYgKHBsdWdpbiAmJiBwbHVnaW4udG9vbGJhciAmJiBwbHVnaW4udG9vbGJhci5jdXN0b21Ub29sYmFyKSB7XG4gICAgICBoYW5kbGVyID0gb25Ub29sYmFyRG9uZTtcbiAgICB9XG5cbiAgICBoYW5kbGVyKGVkaXRvcik7XG5cbiAgICBpZiAocGFyZW50UGx1Z2luICYmIHBhcmVudFBsdWdpbi5oYW5kbGVEb25lKSB7XG4gICAgICBwYXJlbnRQbHVnaW4uaGFuZGxlRG9uZShlZGl0b3IsIG5vZGUsIHBsdWdpbik7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IEN1c3RvbVRvb2xiYXIgPSBnZXRDdXN0b21Ub29sYmFyKHBsdWdpbiwgbm9kZSwgdmFsdWUsIGVkaXRvciwgaGFuZGxlRG9uZSk7XG5cbiAgY29uc3QgZmlsdGVyZWRQbHVnaW5zID1cbiAgICBwbHVnaW4gJiYgcGx1Z2luLmZpbHRlclBsdWdpbnMgPyBwbHVnaW4uZmlsdGVyUGx1Z2lucyhub2RlLCBwbHVnaW5zKSA6IHBsdWdpbnM7XG5cbiAgbG9nKCdbcmVuZGVyXSBDdXN0b21Ub29sYmFyOiAnLCBDdXN0b21Ub29sYmFyKTtcbiAgY29uc3QgcGFyZW50RXh0cmFTdHlsZXMgPVxuICAgIHBhcmVudFBsdWdpbiAmJiBwYXJlbnRQbHVnaW4ucGx1Z2luU3R5bGVzXG4gICAgICA/IHBhcmVudFBsdWdpbi5wbHVnaW5TdHlsZXMobm9kZSwgcGFyZW50Tm9kZSwgcGx1Z2luKVxuICAgICAgOiB7fTtcbiAgY29uc3QgcGx1Z2luRXh0cmFTdHlsZXMgPVxuICAgIHBsdWdpbiAmJiBwbHVnaW4ucGx1Z2luU3R5bGVzID8gcGx1Z2luLnBsdWdpblN0eWxlcyhub2RlLCBwYXJlbnROb2RlLCBwbHVnaW4pIDoge307XG4gIGNvbnN0IGV4dHJhU3R5bGVzID0ge1xuICAgIC4uLnBsdWdpbkV4dHJhU3R5bGVzLFxuICAgIC4uLnBhcmVudEV4dHJhU3R5bGVzXG4gIH07XG5cbiAgY29uc3QgZGVsZXRhYmxlID0gbm9kZSAmJiBwbHVnaW4gJiYgdHlwZW9mIHBsdWdpbi5kZWxldGVOb2RlID09PSAnZnVuY3Rpb24nO1xuICBjb25zdCBjdXN0b21Ub29sYmFyU2hvd0RvbmUgPVxuICAgIG5vZGUgJiYgcGx1Z2luICYmIHBsdWdpbi50b29sYmFyICYmIHBsdWdpbi50b29sYmFyLnNob3dEb25lICYmICF0b29sYmFyT3B0cy5hbHdheXNWaXNpYmxlO1xuXG4gIC8vIElmIHRoZXJlIGlzIGEgdG9vbGJhck9wdHMgd2UgY2hlY2sgaWYgdGhlIHNob3dEb25lIGlzIG5vdCBlcXVhbCB0byBmYWxzZVxuICBjb25zdCBkZWZhdWx0VG9vbGJhclNob3dEb25lID0gIXRvb2xiYXJPcHRzIHx8IHRvb2xiYXJPcHRzLnNob3dEb25lICE9PSBmYWxzZTtcblxuICBjb25zdCBoYXNEb25lQnV0dG9uID0gZGVmYXVsdFRvb2xiYXJTaG93RG9uZSB8fCBjdXN0b21Ub29sYmFyU2hvd0RvbmU7XG5cbiAgY29uc3QgbmFtZXMgPSBjbGFzc05hbWVzKGNsYXNzZXMudG9vbGJhciwge1xuICAgIFtjbGFzc2VzLnRvb2xiYXJXaXRoTm9Eb25lXTogIWhhc0RvbmVCdXR0b24sXG4gICAgW2NsYXNzZXMudG9vbGJhclRvcF06IHRvb2xiYXJPcHRzLnBvc2l0aW9uID09PSAndG9wJyxcbiAgICBbY2xhc3Nlcy50b29sYmFyUmlnaHRdOiB0b29sYmFyT3B0cy5hbGlnbm1lbnQgPT09ICdyaWdodCcsXG4gICAgW2NsYXNzZXMuZm9jdXNlZF06IHRvb2xiYXJPcHRzLmFsd2F5c1Zpc2libGUgfHwgaXNGb2N1c2VkLFxuICAgIFtjbGFzc2VzLmF1dG9XaWR0aF06IGF1dG9XaWR0aCxcbiAgICBbY2xhc3Nlcy5mdWxsV2lkdGhdOiAhYXV0b1dpZHRoXG4gIH0pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e25hbWVzfSBzdHlsZT17ZXh0cmFTdHlsZXN9IG9uQ2xpY2s9e29uQ2xpY2t9IHJlZj17dG9vbGJhclJlZn0+XG4gICAgICB7Q3VzdG9tVG9vbGJhciA/IChcbiAgICAgICAgPEN1c3RvbVRvb2xiYXJcbiAgICAgICAgICBlZGl0b3I9e2VkaXRvcn1cbiAgICAgICAgICBub2RlPXtub2RlfVxuICAgICAgICAgIG5vZGVQYXRoPXtub2RlUGF0aH1cbiAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgb25Ub29sYmFyRG9uZT17b25Ub29sYmFyRG9uZX1cbiAgICAgICAgICBwbHVnaW5Qcm9wcz17cGx1Z2luUHJvcHN9XG4gICAgICAgIC8+XG4gICAgICApIDogKFxuICAgICAgICA8RGVmYXVsdFRvb2xiYXJcbiAgICAgICAgICBlZGl0b3I9e2VkaXRvcn1cbiAgICAgICAgICBub2RlUGF0aD17bm9kZVBhdGh9XG4gICAgICAgICAgcGx1Z2lucz17ZmlsdGVyZWRQbHVnaW5zfVxuICAgICAgICAgIHBsdWdpblByb3BzPXtwbHVnaW5Qcm9wc31cbiAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgICAgIGdldEZvY3VzZWRWYWx1ZT17Z2V0Rm9jdXNlZFZhbHVlfVxuICAgICAgICAgIHNob3dEb25lPXtkZWZhdWx0VG9vbGJhclNob3dEb25lfVxuICAgICAgICAgIG9uRG9uZT17aGFuZGxlRG9uZX1cbiAgICAgICAgICBkZWxldGFibGU9e2RlbGV0YWJsZX1cbiAgICAgICAgLz5cbiAgICAgICl9XG5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2VzLnNoYXJlZH0+XG4gICAgICAgIHtkZWxldGFibGUgJiYgKFxuICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiRGVsZXRlXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlcy5pY29uUm9vdH1cbiAgICAgICAgICAgIG9uTW91c2VEb3duPXtlID0+IG9uRGVsZXRlTW91c2VEb3duKGUsIHBsdWdpbiwgbm9kZSwgdmFsdWUsIG9uQ2hhbmdlKX1cbiAgICAgICAgICAgIGNsYXNzZXM9e3tcbiAgICAgICAgICAgICAgcm9vdDogY2xhc3Nlcy5pY29uUm9vdFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8RGVsZXRlIC8+XG4gICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICApfVxuICAgICAgICB7Y3VzdG9tVG9vbGJhclNob3dEb25lICYmIDxEb25lQnV0dG9uIG9uQ2xpY2s9e2hhbmRsZURvbmV9IC8+fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5Ub29sYmFyLnByb3BUeXBlcyA9IHtcbiAgZWRpdG9yOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIHpJbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgdmFsdWU6IFByb3BUeXBlcy5hcnJheU9mKFxuICAgIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgY2hpbGRyZW46IFByb3BUeXBlcy5hcnJheSxcbiAgICAgIGRhdGE6IFByb3BUeXBlcy5vYmplY3RcbiAgICB9KVxuICApLFxuICBwbHVnaW5zOiBQcm9wVHlwZXMuYXJyYXksXG4gIHBsdWdpbjogUHJvcFR5cGVzLm9iamVjdCxcbiAgb25JbWFnZUNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Eb25lOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICB0b29sYmFyUmVmOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIGlzRm9jdXNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGF1dG9XaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBnZXRGb2N1c2VkVmFsdWU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIHBsdWdpblByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICB0b29sYmFyT3B0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBwb3NpdGlvbjogUHJvcFR5cGVzLm9uZU9mKFsnYm90dG9tJywgJ3RvcCddKSxcbiAgICBhbGlnbm1lbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2xlZnQnLCAncmlnaHQnXSksXG4gICAgYWx3YXlzVmlzaWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgcmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBzaG93RG9uZTogUHJvcFR5cGVzLmJvb2xcbiAgfSlcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZXMoc3R5bGUsIHsgaW5kZXg6IDEwMDAgfSkoVG9vbGJhcik7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztB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
|