@pie-lib/editable-html-tip-tap 1.0.5 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/lib/constants.js +2 -5
  2. package/package.json +3 -3
  3. package/src/constants.js +0 -2
  4. package/lib/__tests__/editor.test.js +0 -470
  5. package/lib/__tests__/serialization.test.js +0 -246
  6. package/lib/block-tags.js +0 -25
  7. package/lib/components/CharacterPicker.js.map +0 -1
  8. package/lib/components/EditableHtml.js.map +0 -1
  9. package/lib/components/MenuBar.js.map +0 -1
  10. package/lib/components/TiptapContainer.js.map +0 -1
  11. package/lib/components/buttons/done-button.js +0 -53
  12. package/lib/components/characters/characterUtils.js.map +0 -1
  13. package/lib/components/characters/custom-popper.js.map +0 -1
  14. package/lib/components/common/done-button.js.map +0 -1
  15. package/lib/components/common/toolbar-buttons.js.map +0 -1
  16. package/lib/components/icons/CssIcon.js.map +0 -1
  17. package/lib/components/icons/RespArea.js.map +0 -1
  18. package/lib/components/icons/TableIcons.js.map +0 -1
  19. package/lib/components/icons/TextAlign.js.map +0 -1
  20. package/lib/components/icons/index.js +0 -194
  21. package/lib/components/image/AltDialog.js.map +0 -1
  22. package/lib/components/image/ImageToolbar.js.map +0 -1
  23. package/lib/components/image/InsertImageHandler.js.map +0 -1
  24. package/lib/components/image/alt-dialog.js +0 -2
  25. package/lib/components/media/MediaDialog.js.map +0 -1
  26. package/lib/components/media/MediaToolbar.js.map +0 -1
  27. package/lib/components/media/MediaWrapper.js.map +0 -1
  28. package/lib/components/respArea/DragInTheBlank/DragInTheBlank.js.map +0 -1
  29. package/lib/components/respArea/DragInTheBlank/choice.js.map +0 -1
  30. package/lib/components/respArea/DragInTheBlank.js +0 -94
  31. package/lib/components/respArea/ExplicitConstructedResponse.js.map +0 -1
  32. package/lib/components/respArea/InlineDropdown.js.map +0 -1
  33. package/lib/components/respArea/ToolbarIcon.js.map +0 -1
  34. package/lib/components/respArea/choice.js +0 -2
  35. package/lib/constants.js.map +0 -1
  36. package/lib/editor.js +0 -1356
  37. package/lib/extensions/MediaView.js +0 -112
  38. package/lib/extensions/characters.js +0 -65
  39. package/lib/extensions/component.js.map +0 -1
  40. package/lib/extensions/css.js.map +0 -1
  41. package/lib/extensions/custom-toolbar-wrapper.js.map +0 -1
  42. package/lib/extensions/extended-table.js.map +0 -1
  43. package/lib/extensions/image.js.map +0 -1
  44. package/lib/extensions/index.js.map +0 -1
  45. package/lib/extensions/math.js.map +0 -1
  46. package/lib/extensions/media.js.map +0 -1
  47. package/lib/extensions/responseArea.js.map +0 -1
  48. package/lib/index.js.map +0 -1
  49. package/lib/old-index.js +0 -269
  50. package/lib/parse-html.js +0 -16
  51. package/lib/plugins/characters/custom-popper.js +0 -73
  52. package/lib/plugins/characters/index.js +0 -305
  53. package/lib/plugins/characters/utils.js +0 -381
  54. package/lib/plugins/css/icons/index.js +0 -37
  55. package/lib/plugins/css/index.js +0 -390
  56. package/lib/plugins/customPlugin/index.js +0 -114
  57. package/lib/plugins/html/icons/index.js +0 -38
  58. package/lib/plugins/html/index.js +0 -81
  59. package/lib/plugins/image/__tests__/component.test.js +0 -51
  60. package/lib/plugins/image/__tests__/image-toolbar-logic.test.js +0 -56
  61. package/lib/plugins/image/__tests__/image-toolbar.test.js +0 -26
  62. package/lib/plugins/image/__tests__/index.test.js +0 -98
  63. package/lib/plugins/image/__tests__/insert-image-handler.test.js +0 -125
  64. package/lib/plugins/image/__tests__/mock-change.js +0 -25
  65. package/lib/plugins/image/alt-dialog.js +0 -129
  66. package/lib/plugins/image/component.js +0 -419
  67. package/lib/plugins/image/image-toolbar.js +0 -177
  68. package/lib/plugins/image/index.js +0 -263
  69. package/lib/plugins/image/insert-image-handler.js +0 -117
  70. package/lib/plugins/index.js +0 -341
  71. package/lib/plugins/list/__tests__/index.test.js +0 -79
  72. package/lib/plugins/list/index.js +0 -334
  73. package/lib/plugins/math/__tests__/index.test.js +0 -300
  74. package/lib/plugins/math/index.js +0 -454
  75. package/lib/plugins/media/__tests__/index.test.js +0 -71
  76. package/lib/plugins/media/index.js +0 -387
  77. package/lib/plugins/media/media-dialog.js +0 -709
  78. package/lib/plugins/media/media-toolbar.js +0 -101
  79. package/lib/plugins/media/media-wrapper.js +0 -93
  80. package/lib/plugins/rendering/index.js +0 -46
  81. package/lib/plugins/respArea/drag-in-the-blank/choice.js +0 -289
  82. package/lib/plugins/respArea/drag-in-the-blank/index.js +0 -94
  83. package/lib/plugins/respArea/explicit-constructed-response/index.js +0 -120
  84. package/lib/plugins/respArea/icons/index.js +0 -95
  85. package/lib/plugins/respArea/index.js +0 -341
  86. package/lib/plugins/respArea/inline-dropdown/index.js +0 -126
  87. package/lib/plugins/respArea/math-templated/index.js +0 -130
  88. package/lib/plugins/respArea/utils.js +0 -125
  89. package/lib/plugins/table/CustomTablePlugin.js +0 -133
  90. package/lib/plugins/table/__tests__/index.test.js +0 -442
  91. package/lib/plugins/table/__tests__/table-toolbar.test.js +0 -54
  92. package/lib/plugins/table/icons/index.js +0 -69
  93. package/lib/plugins/table/index.js +0 -483
  94. package/lib/plugins/table/table-toolbar.js +0 -187
  95. package/lib/plugins/textAlign/icons/index.js +0 -194
  96. package/lib/plugins/textAlign/index.js +0 -34
  97. package/lib/plugins/toolbar/__tests__/default-toolbar.test.js +0 -128
  98. package/lib/plugins/toolbar/__tests__/editor-and-toolbar.test.js +0 -51
  99. package/lib/plugins/toolbar/__tests__/toolbar-buttons.test.js +0 -54
  100. package/lib/plugins/toolbar/__tests__/toolbar.test.js +0 -120
  101. package/lib/plugins/toolbar/default-toolbar.js +0 -229
  102. package/lib/plugins/toolbar/done-button.js +0 -53
  103. package/lib/plugins/toolbar/editor-and-toolbar.js +0 -286
  104. package/lib/plugins/toolbar/index.js +0 -34
  105. package/lib/plugins/toolbar/toolbar-buttons.js +0 -194
  106. package/lib/plugins/toolbar/toolbar.js +0 -376
  107. package/lib/plugins/utils.js +0 -62
  108. package/lib/serialization.js +0 -677
  109. package/lib/shared/alert-dialog.js +0 -75
  110. package/lib/styles/editorContainerStyles.js.map +0 -1
  111. package/lib/theme.js.map +0 -1
  112. package/lib/utils/size.js.map +0 -1
@@ -1,442 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- var _typeof = require("@babel/runtime/helpers/typeof");
6
-
7
- var _slateEditTable = _interopRequireDefault(require("slate-edit-table"));
8
-
9
- var _index = _interopRequireWildcard(require("../index"));
10
-
11
- var _slate = require("slate");
12
-
13
- var _react = _interopRequireDefault(require("react"));
14
-
15
- 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); }
16
-
17
- 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; }
18
-
19
- jest.mock('slate-edit-table', function () {
20
- var mock = {
21
- "default": jest.fn().mockReturnThis(),
22
- utils: {
23
- isSelectionInTable: jest.fn().mockReturnValue(true),
24
- createTable: jest.fn(function (c) {
25
- return {
26
- toJSON: jest.fn().mockReturnValue({
27
- object: 'block',
28
- type: 'table'
29
- })
30
- };
31
- })
32
- },
33
- changes: {
34
- insertTable: jest.fn(function (c) {
35
- return c;
36
- })
37
- }
38
- };
39
- return jest.fn().mockReturnValue(mock);
40
- });
41
- describe('table', function () {
42
- describe('toolbar', function () {
43
- describe('onClick', function () {
44
- var plugin;
45
- var onChange;
46
- var findDescendant;
47
- var insertBlock;
48
- var changeMock;
49
- beforeEach(function () {
50
- plugin = (0, _index["default"])();
51
- onChange = jest.fn();
52
- insertBlock = jest.fn();
53
- findDescendant = jest.fn();
54
- changeMock = jest.fn().mockReturnValue({
55
- insertBlock: insertBlock,
56
- value: {
57
- document: {
58
- findDescendant: findDescendant
59
- }
60
- }
61
- });
62
- });
63
- it('calls utils.createTable', function () {
64
- plugin.toolbar.onClick({
65
- change: changeMock
66
- }, onChange);
67
- expect((0, _slateEditTable["default"])().utils.createTable).toHaveBeenCalledWith(2, 2);
68
- });
69
- it('creates table with border: 1 as default', function () {
70
- plugin.toolbar.onClick({
71
- change: changeMock
72
- }, onChange);
73
- expect(insertBlock).toHaveBeenCalledWith(_slate.Block.create({
74
- key: '2',
75
- type: 'table',
76
- data: {
77
- border: '1',
78
- newTable: true
79
- }
80
- }));
81
- });
82
- it('moves cursor to first cell of the table and removes the newTable property', function () {
83
- var dataRemoveFn = jest.fn().mockReturnValue({
84
- border: '1'
85
- });
86
- var setNodeByKey = jest.fn();
87
- var newTableBlock = {
88
- key: '2',
89
- data: {
90
- remove: dataRemoveFn
91
- }
92
- };
93
- var collapseToStartOf = jest.fn();
94
- changeMock = jest.fn().mockReturnValue({
95
- insertBlock: insertBlock,
96
- collapseToStartOf: collapseToStartOf,
97
- setNodeByKey: setNodeByKey,
98
- value: {
99
- document: {
100
- findDescendant: jest.fn().mockReturnValue(newTableBlock)
101
- }
102
- }
103
- });
104
- plugin.toolbar.onClick({
105
- change: changeMock
106
- }, onChange);
107
- expect(collapseToStartOf).toHaveBeenCalledWith(newTableBlock);
108
- expect(dataRemoveFn).toHaveBeenCalledWith('newTable');
109
- expect(setNodeByKey).toHaveBeenCalledWith('2', {
110
- data: {
111
- border: '1'
112
- }
113
- });
114
- });
115
- });
116
- describe('supports', function () {
117
- var assertSupports = function assertSupports(inTable, object, expected) {
118
- it("inTable: ".concat(inTable, ", type: ").concat(object, " => ").concat(expected), function () {
119
- (0, _slateEditTable["default"])().utils.isSelectionInTable.mockReturnValue(inTable);
120
- var plugin = (0, _index["default"])();
121
- var supports = plugin.toolbar.supports({
122
- object: object
123
- });
124
- expect(supports).toEqual(expected);
125
- });
126
- };
127
-
128
- assertSupports(true, 'block', true);
129
- assertSupports(false, 'block', false);
130
- assertSupports(true, 'inline', false);
131
- assertSupports(false, 'inline', false);
132
- });
133
- describe('customToolbar', function () {
134
- describe('toggleBorder', function () {
135
- var assertToggle = function assertToggle(border, expectedBorder) {
136
- describe("with initial border of ".concat(border), function () {
137
- var change;
138
- var done;
139
- beforeEach(function () {
140
- var plugin = (0, _index["default"])();
141
- change = {
142
- setNodeByKey: jest.fn().mockReturnThis()
143
- };
144
- plugin.utils.getTableBlock = jest.fn().mockReturnValue({
145
- key: 'tableKey',
146
- data: _slate.Data.create({
147
- border: border
148
- })
149
- });
150
- var node = {
151
- key: 'nodeKey'
152
- };
153
- var value = {
154
- change: jest.fn().mockReturnValue(change)
155
- };
156
- done = jest.fn();
157
- var Comp = plugin.toolbar.customToolbar(node, value, done);
158
- var c = Comp();
159
- c.props.onToggleBorder();
160
- });
161
- it("calls setNodeByKey with ".concat(expectedBorder), function () {
162
- expect(change.setNodeByKey).toHaveBeenCalledWith('tableKey', {
163
- data: _slate.Data.create({
164
- border: expectedBorder
165
- })
166
- });
167
- });
168
- it('calls onToolbarDone', function () {
169
- expect(done).toHaveBeenCalledWith(change, false);
170
- });
171
- });
172
- };
173
-
174
- assertToggle(null, '1');
175
- assertToggle(undefined, '1');
176
- assertToggle('0', '1');
177
- assertToggle('1', '0');
178
- assertToggle('2', '0');
179
- });
180
- });
181
- describe('normalizeNode', function () {
182
- it('should exit the function if the node is not of type document', function () {
183
- var tablePlugin = (0, _index["default"])();
184
- var returnValue = tablePlugin.normalizeNode({
185
- object: 'table'
186
- });
187
- expect(returnValue).toEqual(undefined);
188
- });
189
- it('should exit there are no changes needed', function () {
190
- var tablePlugin = (0, _index["default"])();
191
- var nodes = {
192
- size: 3,
193
- findLastIndex: jest.fn().mockReturnValue(1)
194
- };
195
- var returnValue = tablePlugin.normalizeNode({
196
- object: 'document',
197
- nodes: nodes,
198
- findDescendant: jest.fn().mockReturnValue({
199
- object: 'block',
200
- type: 'table'
201
- }),
202
- getParent: jest.fn().mockReturnValue(undefined)
203
- });
204
- expect(returnValue).toEqual(undefined);
205
- });
206
- it('should return a function if a table does not have a node before or after it', function () {
207
- var tablePlugin = (0, _index["default"])();
208
- var nodes = [{
209
- object: 'block',
210
- type: 'table',
211
- key: '99',
212
- data: _slate.Data.create({
213
- newTable: true
214
- })
215
- }];
216
- var findDescendant = jest.fn(function (callback) {
217
- nodes.forEach(function (n) {
218
- return callback(n);
219
- });
220
- });
221
- var change = {
222
- insertNodeByPath: jest.fn(),
223
- value: {
224
- document: {
225
- getPath: jest.fn().mockReturnValue(_slate.PathUtils.create([0, 0]))
226
- }
227
- }
228
- };
229
- var returnValue = tablePlugin.normalizeNode({
230
- object: 'document',
231
- findDescendant: findDescendant,
232
- getPath: jest.fn().mockReturnValue(_slate.PathUtils.create([0, 0])),
233
- getPreviousNode: jest.fn().mockReturnValue(undefined),
234
- getNextNode: jest.fn().mockReturnValue(undefined)
235
- });
236
- expect(returnValue).toEqual(expect.any(Function));
237
- returnValue(change);
238
- expect(change.insertNodeByPath).toHaveBeenCalledWith([0], 0, {
239
- object: 'block',
240
- type: 'div'
241
- });
242
- });
243
- });
244
- });
245
- });
246
- describe('parseStyleString', function () {
247
- var parses = function parses(s, expected) {
248
- it("parses ".concat(s, " -> ").concat(JSON.stringify(expected)), function () {
249
- var result = (0, _index.parseStyleString)(s);
250
- expect(result).toEqual(expected);
251
- });
252
- };
253
-
254
- parses(' width: 10px ', {
255
- width: '10px'
256
- });
257
- parses(' width: 10px; ', {
258
- width: '10px'
259
- });
260
- parses(' border-width: 10px; ', {
261
- 'border-width': '10px'
262
- });
263
- parses(' border: solid 1px red; height: 1px', {
264
- border: 'solid 1px red',
265
- height: '1px'
266
- });
267
- });
268
- describe('toStyleString', function () {
269
- var styleString = function styleString(o, expected) {
270
- it("".concat(JSON.stringify(s), " -> ").concat(expected), function () {
271
- var result = toStyleString(o);
272
- expect(result).toEqual(expected);
273
- });
274
- };
275
- });
276
- describe('reactAttributes', function () {
277
- var attributes = function attributes(o, expected) {
278
- it("".concat(JSON.stringify(o), " -> ").concat(JSON.stringify(expected)), function () {
279
- var result = (0, _index.reactAttributes)(o);
280
- expect(result).toEqual(expected);
281
- });
282
- };
283
-
284
- attributes({
285
- 'border-width': '10px',
286
- 'line-height': 1.56
287
- }, {
288
- borderWidth: '10px',
289
- lineHeight: '1.56'
290
- });
291
- });
292
- describe('serialization', function () {
293
- describe('deserialize', function () {
294
- var next;
295
- beforeEach(function () {
296
- next = jest.fn().mockReturnValue([]);
297
- });
298
- describe('table', function () {
299
- var el;
300
- var out;
301
- beforeEach(function () {
302
- el = {
303
- tagName: 'table',
304
- children: [],
305
- getAttribute: jest.fn(function (name) {
306
- switch (name) {
307
- case 'border':
308
- return '1';
309
-
310
- case 'cellspacing':
311
- return '2';
312
-
313
- case 'cellpadding':
314
- return '3';
315
-
316
- case 'class':
317
- return 'table-class';
318
-
319
- case 'style':
320
- return 'width: 10px';
321
- }
322
- })
323
- };
324
- out = _index.serialization.deserialize(el, next);
325
- });
326
-
327
- var assertData = function assertData(name, value) {
328
- it("data.".concat(name, " should eql ").concat(value), function () {
329
- expect(out.data[name]).toEqual(value);
330
- });
331
- };
332
-
333
- assertData('border', '1');
334
- assertData('cellspacing', '2');
335
- assertData('cellpadding', '3');
336
- assertData('class', 'table-class');
337
- assertData('style', {
338
- width: '10px'
339
- });
340
- it('returns a table block', function () {
341
- expect(out).toMatchObject({
342
- object: 'block',
343
- type: 'table',
344
- nodes: []
345
- });
346
- });
347
- });
348
- it('deserializes tr', function () {
349
- var el = {
350
- tagName: 'tr',
351
- children: []
352
- };
353
-
354
- var out = _index.serialization.deserialize(el, next);
355
-
356
- expect(out).toEqual({
357
- object: 'block',
358
- type: 'table_row',
359
- nodes: []
360
- });
361
- });
362
- it('deserializes td', function () {
363
- var el = {
364
- tagName: 'td',
365
- childNodes: [],
366
- getAttribute: jest.fn(function (name) {
367
- var o = {
368
- "class": 'class name',
369
- colspan: '1',
370
- rowspan: '1'
371
- };
372
- return o[name];
373
- })
374
- };
375
-
376
- var out = _index.serialization.deserialize(el, next);
377
-
378
- expect(out).toEqual({
379
- object: 'block',
380
- type: 'table_cell',
381
- nodes: [],
382
- data: {
383
- colspan: '1',
384
- rowspan: '1',
385
- "class": 'class name',
386
- header: false
387
- }
388
- });
389
- });
390
- });
391
- describe('serialize', function () {
392
- it('serializes table', function () {
393
- var el = _index.serialization.serialize({
394
- object: 'block',
395
- type: 'table',
396
- nodes: [],
397
- data: _slate.Data.create({
398
- border: '1',
399
- cellpadding: '2',
400
- cellspacing: '3'
401
- })
402
- });
403
-
404
- expect(el).toEqual( /*#__PURE__*/_react["default"].createElement("table", {
405
- border: "1",
406
- cellPadding: "2",
407
- cellSpacing: "3"
408
- }, /*#__PURE__*/_react["default"].createElement("tbody", null)));
409
- });
410
- it('serializes table_row', function () {
411
- var el = _index.serialization.serialize({
412
- object: 'block',
413
- type: 'table_row',
414
- nodes: []
415
- });
416
-
417
- expect(el).toEqual( /*#__PURE__*/_react["default"].createElement("tr", null));
418
- });
419
- it('serializes table_cell', function () {
420
- var el = _index.serialization.serialize({
421
- object: 'block',
422
- type: 'table_cell',
423
- nodes: [],
424
- data: _slate.Data.create({
425
- header: false,
426
- style: {
427
- width: '10px'
428
- },
429
- "class": 'foo'
430
- })
431
- });
432
-
433
- expect(el).toEqual( /*#__PURE__*/_react["default"].createElement("td", {
434
- style: {
435
- width: '10px'
436
- },
437
- className: 'foo'
438
- }));
439
- });
440
- });
441
- });
442
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW5zL3RhYmxlL19fdGVzdHNfXy9pbmRleC50ZXN0LmpzeCJdLCJuYW1lcyI6WyJqZXN0IiwibW9jayIsImZuIiwibW9ja1JldHVyblRoaXMiLCJ1dGlscyIsImlzU2VsZWN0aW9uSW5UYWJsZSIsIm1vY2tSZXR1cm5WYWx1ZSIsImNyZWF0ZVRhYmxlIiwiYyIsInRvSlNPTiIsIm9iamVjdCIsInR5cGUiLCJjaGFuZ2VzIiwiaW5zZXJ0VGFibGUiLCJkZXNjcmliZSIsInBsdWdpbiIsIm9uQ2hhbmdlIiwiZmluZERlc2NlbmRhbnQiLCJpbnNlcnRCbG9jayIsImNoYW5nZU1vY2siLCJiZWZvcmVFYWNoIiwidmFsdWUiLCJkb2N1bWVudCIsIml0IiwidG9vbGJhciIsIm9uQ2xpY2siLCJjaGFuZ2UiLCJleHBlY3QiLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCIsIkJsb2NrIiwiY3JlYXRlIiwia2V5IiwiZGF0YSIsImJvcmRlciIsIm5ld1RhYmxlIiwiZGF0YVJlbW92ZUZuIiwic2V0Tm9kZUJ5S2V5IiwibmV3VGFibGVCbG9jayIsInJlbW92ZSIsImNvbGxhcHNlVG9TdGFydE9mIiwiYXNzZXJ0U3VwcG9ydHMiLCJpblRhYmxlIiwiZXhwZWN0ZWQiLCJzdXBwb3J0cyIsInRvRXF1YWwiLCJhc3NlcnRUb2dnbGUiLCJleHBlY3RlZEJvcmRlciIsImRvbmUiLCJnZXRUYWJsZUJsb2NrIiwiRGF0YSIsIm5vZGUiLCJDb21wIiwiY3VzdG9tVG9vbGJhciIsInByb3BzIiwib25Ub2dnbGVCb3JkZXIiLCJ1bmRlZmluZWQiLCJ0YWJsZVBsdWdpbiIsInJldHVyblZhbHVlIiwibm9ybWFsaXplTm9kZSIsIm5vZGVzIiwic2l6ZSIsImZpbmRMYXN0SW5kZXgiLCJnZXRQYXJlbnQiLCJjYWxsYmFjayIsImZvckVhY2giLCJuIiwiaW5zZXJ0Tm9kZUJ5UGF0aCIsImdldFBhdGgiLCJQYXRoVXRpbHMiLCJnZXRQcmV2aW91c05vZGUiLCJnZXROZXh0Tm9kZSIsImFueSIsIkZ1bmN0aW9uIiwicGFyc2VzIiwicyIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZXN1bHQiLCJ3aWR0aCIsImhlaWdodCIsInN0eWxlU3RyaW5nIiwibyIsInRvU3R5bGVTdHJpbmciLCJhdHRyaWJ1dGVzIiwiYm9yZGVyV2lkdGgiLCJsaW5lSGVpZ2h0IiwibmV4dCIsImVsIiwib3V0IiwidGFnTmFtZSIsImNoaWxkcmVuIiwiZ2V0QXR0cmlidXRlIiwibmFtZSIsInNlcmlhbGl6YXRpb24iLCJkZXNlcmlhbGl6ZSIsImFzc2VydERhdGEiLCJ0b01hdGNoT2JqZWN0IiwiY2hpbGROb2RlcyIsImNvbHNwYW4iLCJyb3dzcGFuIiwiaGVhZGVyIiwic2VyaWFsaXplIiwiY2VsbHBhZGRpbmciLCJjZWxsc3BhY2luZyIsInN0eWxlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0FBRUFBLElBQUksQ0FBQ0MsSUFBTCxDQUFVLGtCQUFWLEVBQThCLFlBQU07QUFDbEMsTUFBTUEsSUFBSSxHQUFHO0FBQ1gsZUFBU0QsSUFBSSxDQUFDRSxFQUFMLEdBQVVDLGNBQVYsRUFERTtBQUVYQyxJQUFBQSxLQUFLLEVBQUU7QUFDTEMsTUFBQUEsa0JBQWtCLEVBQUVMLElBQUksQ0FBQ0UsRUFBTCxHQUFVSSxlQUFWLENBQTBCLElBQTFCLENBRGY7QUFFTEMsTUFBQUEsV0FBVyxFQUFFUCxJQUFJLENBQUNFLEVBQUwsQ0FBUSxVQUFTTSxDQUFULEVBQVk7QUFDL0IsZUFBTztBQUNMQyxVQUFBQSxNQUFNLEVBQUVULElBQUksQ0FBQ0UsRUFBTCxHQUFVSSxlQUFWLENBQTBCO0FBQUVJLFlBQUFBLE1BQU0sRUFBRSxPQUFWO0FBQW1CQyxZQUFBQSxJQUFJLEVBQUU7QUFBekIsV0FBMUI7QUFESCxTQUFQO0FBR0QsT0FKWTtBQUZSLEtBRkk7QUFVWEMsSUFBQUEsT0FBTyxFQUFFO0FBQ1BDLE1BQUFBLFdBQVcsRUFBRWIsSUFBSSxDQUFDRSxFQUFMLENB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LE9BRHlCO0FBRWpDQyxRQUFBQSxJQUFJLEVBQUUsWUFGMkI7QUFHakNnRCxRQUFBQSxLQUFLLEVBQUUsRUFIMEI7QUFJakMzQixRQUFBQSxJQUFJLEVBQUVpQixZQUFLbkIsTUFBTCxDQUFZO0FBQ2hCc0UsVUFBQUEsTUFBTSxFQUFFLEtBRFE7QUFFaEJJLFVBQUFBLEtBQUssRUFBRTtBQUFFMUIsWUFBQUEsS0FBSyxFQUFFO0FBQVQsV0FGUztBQUdoQixtQkFBTztBQUhTLFNBQVo7QUFKMkIsT0FBeEIsQ0FBWDs7QUFXQW5ELE1BQUFBLE1BQU0sQ0FBQzRELEVBQUQsQ0FBTixDQUFXM0MsT0FBWCxlQUFtQjtBQUFJLFFBQUEsS0FBSyxFQUFFO0FBQUVrQyxVQUFBQSxLQUFLLEVBQUU7QUFBVCxTQUFYO0FBQThCLFFBQUEsU0FBUyxFQUFFO0FBQXpDLFFBQW5CO0FBQ0QsS0FiQyxDQUFGO0FBY0QsR0EzQ08sQ0FBUjtBQTRDRCxDQTlJTyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEVkaXRUYWJsZSBmcm9tICdzbGF0ZS1lZGl0LXRhYmxlJztcbmltcG9ydCBUYWJsZVBsdWdpbiwgeyBzZXJpYWxpemF0aW9uLCBwYXJzZVN0eWxlU3RyaW5nLCByZWFjdEF0dHJpYnV0ZXMgfSBmcm9tICcuLi9pbmRleCc7XG5pbXBvcnQgeyBEYXRhLCBCbG9jaywgUGF0aFV0aWxzIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuamVzdC5tb2NrKCdzbGF0ZS1lZGl0LXRhYmxlJywgKCkgPT4ge1xuICBjb25zdCBtb2NrID0ge1xuICAgIGRlZmF1bHQ6IGplc3QuZm4oKS5tb2NrUmV0dXJuVGhpcygpLFxuICAgIHV0aWxzOiB7XG4gICAgICBpc1NlbGVjdGlvbkluVGFibGU6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUodHJ1ZSksXG4gICAgICBjcmVhdGVUYWJsZTogamVzdC5mbihmdW5jdGlvbihjKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdG9KU09OOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHsgb2JqZWN0OiAnYmxvY2snLCB0eXBlOiAndGFibGUnIH0pLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgfSxcbiAgICBjaGFuZ2VzOiB7XG4gICAgICBpbnNlcnRUYWJsZTogamVzdC5mbihmdW5jdGlvbihjKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfSksXG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShtb2NrKTtcbn0pO1xuXG5kZXNjcmliZSgndGFibGUnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCd0b29sYmFyJywgKCkgPT4ge1xuICAgIGRlc2NyaWJlKCdvbkNsaWNrJywgKCkgPT4ge1xuICAgICAgbGV0IHBsdWdpbjtcbiAgICAgIGxldCBvbkNoYW5nZTtcbiAgICAgIGxldCBmaW5kRGVzY2VuZGFudDtcbiAgICAgIGxldCBpbnNlcnRCbG9jaztcbiAgICAgIGxldCBjaGFuZ2VNb2NrO1xuXG4gICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgcGx1Z2luID0gVGFibGVQbHVnaW4oKTtcbiAgICAgICAgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG4gICAgICAgIGluc2VydEJsb2NrID0gamVzdC5mbigpO1xuICAgICAgICBmaW5kRGVzY2VuZGFudCA9IGplc3QuZm4oKTtcbiAgICAgICAgY2hhbmdlTW9jayA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoe1xuICAgICAgICAgIGluc2VydEJsb2NrLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICBkb2N1bWVudDoge1xuICAgICAgICAgICAgICBmaW5kRGVzY2VuZGFudCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2NhbGxzIHV0aWxzLmNyZWF0ZVRhYmxlJywgKCkgPT4ge1xuICAgICAgICBwbHVnaW4udG9vbGJhci5vbkNsaWNrKHsgY2hhbmdlOiBjaGFuZ2VNb2NrIH0sIG9uQ2hhbmdlKTtcblxuICAgICAgICBleHBlY3QoRWRpdFRhYmxlKCkudXRpbHMuY3JlYXRlVGFibGUpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKDIsIDIpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdjcmVhdGVzIHRhYmxlIHdpdGggYm9yZGVyOiAxIGFzIGRlZmF1bHQnLCAoKSA9PiB7XG4gICAgICAgIHBsdWdpbi50b29sYmFyLm9uQ2xpY2soeyBjaGFuZ2U6IGNoYW5nZU1vY2sgfSwgb25DaGFuZ2UpO1xuXG4gICAgICAgIGV4cGVjdChpbnNlcnRCbG9jaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICAgICAgQmxvY2suY3JlYXRlKHsga2V5OiAnMicsIHR5cGU6ICd0YWJsZScsIGRhdGE6IHsgYm9yZGVyOiAnMScsIG5ld1RhYmxlOiB0cnVlIH0gfSksXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ21vdmVzIGN1cnNvciB0byBmaXJzdCBjZWxsIG9mIHRoZSB0YWJsZSBhbmQgcmVtb3ZlcyB0aGUgbmV3VGFibGUgcHJvcGVydHknLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGFSZW1vdmVGbiA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoeyBib3JkZXI6ICcxJyB9KTtcbiAgICAgICAgY29uc3Qgc2V0Tm9kZUJ5S2V5ID0gamVzdC5mbigpO1xuICAgICAgICBjb25zdCBuZXdUYWJsZUJsb2NrID0ge1xuICAgICAgICAgIGtleTogJzInLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHJlbW92ZTogZGF0YVJlbW92ZUZuLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGNvbGxhcHNlVG9TdGFydE9mID0gamVzdC5mbigpO1xuXG4gICAgICAgIGNoYW5nZU1vY2sgPSBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHtcbiAgICAgICAgICBpbnNlcnRCbG9jayxcbiAgICAgICAgICBjb2xsYXBzZVRvU3RhcnRPZixcbiAgICAgICAgICBzZXROb2RlQnlLZXksXG4gICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgIGRvY3VtZW50OiB7XG4gICAgICAgICAgICAgIGZpbmREZXNjZW5kYW50OiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKG5ld1RhYmxlQmxvY2spLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcGx1Z2luLnRvb2xiYXIub25DbGljayh7IGNoYW5nZTogY2hhbmdlTW9jayB9LCBvbkNoYW5nZSk7XG5cbiAgICAgICAgZXhwZWN0KGNvbGxhcHNlVG9TdGFydE9mKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChuZXdUYWJsZUJsb2NrKTtcbiAgICAgICAgZXhwZWN0KGRhdGFSZW1vdmVGbikudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ25ld1RhYmxlJyk7XG4gICAgICAgIGV4cGVjdChzZXROb2RlQnlLZXkpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCcyJywgeyBkYXRhOiB7IGJvcmRlcjogJzEnIH0gfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdzdXBwb3J0cycsICgpID0+IHtcbiAgICAgIGNvbnN0IGFzc2VydFN1cHBvcnRzID0gKGluVGFibGUsIG9iamVjdCwgZXhwZWN0ZWQpID0+IHtcbiAgICAgICAgaXQoYGluVGFibGU6ICR7aW5UYWJsZX0sIHR5cGU6ICR7b2JqZWN0fSA9PiAke2V4cGVjdGVkfWAsICgpID0+IHtcbiAgICAgICAgICBFZGl0VGFibGUoKS51dGlscy5pc1NlbGVjdGlvbkluVGFibGUubW9ja1JldHVyblZhbHVlKGluVGFibGUpO1xuICAgICAgICAgIGNvbnN0IHBsdWdpbiA9IFRhYmxlUGx1Z2luKCk7XG4gICAgICAgICAgY29uc3Qgc3VwcG9ydHMgPSBwbHVnaW4udG9vbGJhci5zdXBwb3J0cyh7IG9iamVjdCB9KTtcbiAgICAgICAgICBleHBlY3Qoc3VwcG9ydHMpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGFzc2VydFN1cHBvcnRzKHRydWUsICdibG9jaycsIHRydWUpO1xuICAgICAgYXNzZXJ0U3VwcG9ydHMoZmFsc2UsICdibG9jaycsIGZhbHNlKTtcbiAgICAgIGFzc2VydFN1cHBvcnRzKHRydWUsICdpbmxpbmUnLCBmYWxzZSk7XG4gICAgICBhc3NlcnRTdXBwb3J0cyhmYWxzZSwgJ2lubGluZScsIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjdXN0b21Ub29sYmFyJywgKCkgPT4ge1xuICAgICAgZGVzY3JpYmUoJ3RvZ2dsZUJvcmRlcicsICgpID0+IHtcbiAgICAgICAgY29uc3QgYXNzZXJ0VG9nZ2xlID0gKGJvcmRlciwgZXhwZWN0ZWRCb3JkZXIpID0+IHtcbiAgICAgICAgICBkZXNjcmliZShgd2l0aCBpbml0aWFsIGJvcmRlciBvZiAke2JvcmRlcn1gLCAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgY2hhbmdlO1xuICAgICAgICAgICAgbGV0IGRvbmU7XG5cbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBwbHVnaW4gPSBUYWJsZVBsdWdpbigpO1xuICAgICAgICAgICAgICBjaGFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgc2V0Tm9kZUJ5S2V5OiBqZXN0LmZuKCkubW9ja1JldHVyblRoaXMoKSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgcGx1Z2luLnV0aWxzLmdldFRhYmxlQmxvY2sgPSBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHtcbiAgICAgICAgICAgICAgICBrZXk6ICd0YWJsZUtleScsXG4gICAgICAgICAgICAgICAgZGF0YTogRGF0YS5jcmVhdGUoeyBib3JkZXIgfSksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjb25zdCBub2RlID0geyBrZXk6ICdub2RlS2V5JyB9O1xuICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHtcbiAgICAgICAgICAgICAgICBjaGFuZ2U6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoY2hhbmdlKSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgZG9uZSA9IGplc3QuZm4oKTtcbiAgICAgICAgICAgICAgY29uc3QgQ29tcCA9IHBsdWdpbi50b29sYmFyLmN1c3RvbVRvb2xiYXIobm9kZSwgdmFsdWUsIGRvbmUpO1xuICAgICAgICAgICAgICBjb25zdCBjID0gQ29tcCgpO1xuICAgICAgICAgICAgICBjLnByb3BzLm9uVG9nZ2xlQm9yZGVyKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoYGNhbGxzIHNldE5vZGVCeUtleSB3aXRoICR7ZXhwZWN0ZWRCb3JkZXJ9YCwgKCkgPT4ge1xuICAgICAgICAgICAgICBleHBlY3QoY2hhbmdlLnNldE5vZGVCeUtleSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ3RhYmxlS2V5Jywge1xuICAgICAgICAgICAgICAgIGRhdGE6IERhdGEuY3JlYXRlKHsgYm9yZGVyOiBleHBlY3RlZEJvcmRlciB9KSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ2NhbGxzIG9uVG9vbGJhckRvbmUnLCAoKSA9PiB7XG4gICAgICAgICAgICAgIGV4cGVjdChkb25lKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChjaGFuZ2UsIGZhbHNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIGFzc2VydFRvZ2dsZShudWxsLCAnMScpO1xuICAgICAgICBhc3NlcnRUb2dnbGUodW5kZWZpbmVkLCAnMScpO1xuICAgICAgICBhc3NlcnRUb2dnbGUoJzAnLCAnMScpO1xuICAgICAgICBhc3NlcnRUb2dnbGUoJzEnLCAnMCcpO1xuICAgICAgICBhc3NlcnRUb2dnbGUoJzInLCAnMCcpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbm9ybWFsaXplTm9kZScsICgpID0+IHtcbiAgICAgIGl0KCdzaG91bGQgZXhpdCB0aGUgZnVuY3Rpb24gaWYgdGhlIG5vZGUgaXMgbm90IG9mIHR5cGUgZG9jdW1lbnQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhYmxlUGx1Z2luID0gVGFibGVQbHVnaW4oKTtcbiAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSB0YWJsZVBsdWdpbi5ub3JtYWxpemVOb2RlKHsgb2JqZWN0OiAndGFibGUnIH0pO1xuXG4gICAgICAgIGV4cGVjdChyZXR1cm5WYWx1ZSkudG9FcXVhbCh1bmRlZmluZWQpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZXhpdCB0aGVyZSBhcmUgbm8gY2hhbmdlcyBuZWVkZWQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhYmxlUGx1Z2luID0gVGFibGVQbHVnaW4oKTtcbiAgICAgICAgY29uc3Qgbm9kZXMgPSB7XG4gICAgICAgICAgc2l6ZTogMyxcbiAgICAgICAgICBmaW5kTGFzdEluZGV4OiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKDEpLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXR1cm5WYWx1ZSA9IHRhYmxlUGx1Z2luLm5vcm1hbGl6ZU5vZGUoe1xuICAgICAgICAgIG9iamVjdDogJ2RvY3VtZW50JyxcbiAgICAgICAgICBub2RlcyxcbiAgICAgICAgICBmaW5kRGVzY2VuZGFudDogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh7IG9iamVjdDogJ2Jsb2NrJywgdHlwZTogJ3RhYmxlJyB9KSxcbiAgICAgICAgICBnZXRQYXJlbnQ6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUodW5kZWZpbmVkKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGV4cGVjdChyZXR1cm5WYWx1ZSkudG9FcXVhbCh1bmRlZmluZWQpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgZnVuY3Rpb24gaWYgYSB0YWJsZSBkb2VzIG5vdCBoYXZlIGEgbm9kZSBiZWZvcmUgb3IgYWZ0ZXIgaXQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhYmxlUGx1Z2luID0gVGFibGVQbHVnaW4oKTtcbiAgICAgICAgY29uc3Qgbm9kZXMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgb2JqZWN0OiAnYmxvY2snLFxuICAgICAgICAgICAgdHlwZTogJ3RhYmxlJyxcbiAgICAgICAgICAgIGtleTogJzk5JyxcbiAgICAgICAgICAgIGRhdGE6IERhdGEuY3JlYXRlKHtcbiAgICAgICAgICAgICAgbmV3VGFibGU6IHRydWUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBmaW5kRGVzY2VuZGFudCA9IGplc3QuZm4oKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgbm9kZXMuZm9yRWFjaCgobikgPT4gY2FsbGJhY2sobikpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY2hhbmdlID0ge1xuICAgICAgICAgIGluc2VydE5vZGVCeVBhdGg6IGplc3QuZm4oKSxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgZG9jdW1lbnQ6IHtcbiAgICAgICAgICAgICAgZ2V0UGF0aDogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShQYXRoVXRpbHMuY3JlYXRlKFswLCAwXSkpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gdGFibGVQbHVnaW4ubm9ybWFsaXplTm9kZSh7XG4gICAgICAgICAgb2JqZWN0OiAnZG9jdW1lbnQnLFxuICAgICAgICAgIGZpbmREZXNjZW5kYW50LFxuICAgICAgICAgIGdldFBhdGg6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoUGF0aFV0aWxzLmNyZWF0ZShbMCwgMF0pKSxcbiAgICAgICAgICBnZXRQcmV2aW91c05vZGU6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUodW5kZWZpbmVkKSxcbiAgICAgICAgICBnZXROZXh0Tm9kZTogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh1bmRlZmluZWQpLFxuICAgICAgICB9KTtcblxuICAgICAgICBleHBlY3QocmV0dXJuVmFsdWUpLnRvRXF1YWwoZXhwZWN0LmFueShGdW5jdGlvbikpO1xuXG4gICAgICAgIHJldHVyblZhbHVlKGNoYW5nZSk7XG5cbiAgICAgICAgZXhwZWN0KGNoYW5nZS5pbnNlcnROb2RlQnlQYXRoKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChbMF0sIDAsIHtcbiAgICAgICAgICBvYmplY3Q6ICdibG9jaycsXG4gICAgICAgICAgdHlwZTogJ2RpdicsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdwYXJzZVN0eWxlU3RyaW5nJywgKCkgPT4ge1xuICBjb25zdCBwYXJzZXMgPSAocywgZXhwZWN0ZWQpID0+IHtcbiAgICBpdChgcGFyc2VzICR7c30gLT4gJHtKU09OLnN0cmluZ2lmeShleHBlY3RlZCl9YCwgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VTdHlsZVN0cmluZyhzKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuICB9O1xuICBwYXJzZXMoJyB3aWR0aDogMTBweCAnLCB7IHdpZHRoOiAnMTBweCcgfSk7XG4gIHBhcnNlcygnIHdpZHRoOiAxMHB4OyAnLCB7IHdpZHRoOiAnMTBweCcgfSk7XG4gIHBhcnNlcygnIGJvcmRlci13aWR0aDogMTBweDsgJywgeyAnYm9yZGVyLXdpZHRoJzogJzEwcHgnIH0pO1xuICBwYXJzZXMoJyBib3JkZXI6IHNvbGlkIDFweCByZWQ7IGhlaWdodDogMXB4Jywge1xuICAgIGJvcmRlcjogJ3NvbGlkIDFweCByZWQnLFxuICAgIGhlaWdodDogJzFweCcsXG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCd0b1N0eWxlU3RyaW5nJywgKCkgPT4ge1xuICBjb25zdCBzdHlsZVN0cmluZyA9IChvLCBleHBlY3RlZCkgPT4ge1xuICAgIGl0KGAke0pTT04uc3RyaW5naWZ5KHMpfSAtPiAke2V4cGVjdGVkfWAsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRvU3R5bGVTdHJpbmcobyk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICB9KTtcbiAgfTtcbn0pO1xuXG5kZXNjcmliZSgncmVhY3RBdHRyaWJ1dGVzJywgKCkgPT4ge1xuICBjb25zdCBhdHRyaWJ1dGVzID0gKG8sIGV4cGVjdGVkKSA9PiB7XG4gICAgaXQoYCR7SlNPTi5zdHJpbmdpZnkobyl9IC0+ICR7SlNPTi5zdHJpbmdpZnkoZXhwZWN0ZWQpfWAsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlYWN0QXR0cmlidXRlcyhvKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuICB9O1xuICBhdHRyaWJ1dGVzKHsgJ2JvcmRlci13aWR0aCc6ICcxMHB4JywgJ2xpbmUtaGVpZ2h0JzogMS41NiB9LCB7IGJvcmRlcldpZHRoOiAnMTBweCcsIGxpbmVIZWlnaHQ6ICcxLjU2JyB9KTtcbn0pO1xuXG5kZXNjcmliZSgnc2VyaWFsaXphdGlvbicsICgpID0+IHtcbiAgZGVzY3JpYmUoJ2Rlc2VyaWFsaXplJywgKCkgPT4ge1xuICAgIGxldCBuZXh0O1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICBuZXh0ID0gamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShbXSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgndGFibGUnLCAoKSA9PiB7XG4gICAgICBsZXQgZWw7XG4gICAgICBsZXQgb3V0O1xuICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGVsID0ge1xuICAgICAgICAgIHRhZ05hbWU6ICd0YWJsZScsXG4gICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgIGdldEF0dHJpYnV0ZTogamVzdC5mbigobmFtZSkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ2JvcmRlcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuICcxJztcbiAgICAgICAgICAgICAgY2FzZSAnY2VsbHNwYWNpbmcnOlxuICAgICAgICAgICAgICAgIHJldHVybiAnMic7XG4gICAgICAgICAgICAgIGNhc2UgJ2NlbGxwYWRkaW5nJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJzMnO1xuICAgICAgICAgICAgICBjYXNlICdjbGFzcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0YWJsZS1jbGFzcyc7XG4gICAgICAgICAgICAgIGNhc2UgJ3N0eWxlJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3dpZHRoOiAxMHB4JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgb3V0ID0gc2VyaWFsaXphdGlvbi5kZXNlcmlhbGl6ZShlbCwgbmV4dCk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYXNzZXJ0RGF0YSA9IChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgICBpdChgZGF0YS4ke25hbWV9IHNob3VsZCBlcWwgJHt2YWx1ZX1gLCAoKSA9PiB7XG4gICAgICAgICAgZXhwZWN0KG91dC5kYXRhW25hbWVdKS50b0VxdWFsKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBhc3NlcnREYXRhKCdib3JkZXInLCAnMScpO1xuICAgICAgYXNzZXJ0RGF0YSgnY2VsbHNwYWNpbmcnLCAnMicpO1xuICAgICAgYXNzZXJ0RGF0YSgnY2VsbHBhZGRpbmcnLCAnMycpO1xuICAgICAgYXNzZXJ0RGF0YSgnY2xhc3MnLCAndGFibGUtY2xhc3MnKTtcbiAgICAgIGFzc2VydERhdGEoJ3N0eWxlJywgeyB3aWR0aDogJzEwcHgnIH0pO1xuICAgICAgaXQoJ3JldHVybnMgYSB0YWJsZSBibG9jaycsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KG91dCkudG9NYXRjaE9iamVjdCh7XG4gICAgICAgICAgb2JqZWN0OiAnYmxvY2snLFxuICAgICAgICAgIHR5cGU6ICd0YWJsZScsXG4gICAgICAgICAgbm9kZXM6IFtdLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Rlc2VyaWFsaXplcyB0cicsICgpID0+IHtcbiAgICAgIGNvbnN0IGVsID0ge1xuICAgICAgICB0YWdOYW1lOiAndHInLFxuICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvdXQgPSBzZXJpYWxpemF0aW9uLmRlc2VyaWFsaXplKGVsLCBuZXh0KTtcblxuICAgICAgZXhwZWN0KG91dCkudG9FcXVhbCh7XG4gICAgICAgIG9iamVjdDogJ2Jsb2NrJyxcbiAgICAgICAgdHlwZTogJ3RhYmxlX3JvdycsXG4gICAgICAgIG5vZGVzOiBbXSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Rlc2VyaWFsaXplcyB0ZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGVsID0ge1xuICAgICAgICB0YWdOYW1lOiAndGQnLFxuICAgICAgICBjaGlsZE5vZGVzOiBbXSxcbiAgICAgICAgZ2V0QXR0cmlidXRlOiBqZXN0LmZuKGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgICAgICBjb25zdCBvID0ge1xuICAgICAgICAgICAgY2xhc3M6ICdjbGFzcyBuYW1lJyxcbiAgICAgICAgICAgIGNvbHNwYW46ICcxJyxcbiAgICAgICAgICAgIHJvd3NwYW46ICcxJyxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBvW25hbWVdO1xuICAgICAgICB9KSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG91dCA9IHNlcmlhbGl6YXRpb24uZGVzZXJpYWxpemUoZWwsIG5leHQpO1xuXG4gICAgICBleHBlY3Qob3V0KS50b0VxdWFsKHtcbiAgICAgICAgb2JqZWN0OiAnYmxvY2snLFxuICAgICAgICB0eXBlOiAndGFibGVfY2VsbCcsXG4gICAgICAgIG5vZGVzOiBbXSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNvbHNwYW46ICcxJyxcbiAgICAgICAgICByb3dzcGFuOiAnMScsXG4gICAgICAgICAgY2xhc3M6ICdjbGFzcyBuYW1lJyxcbiAgICAgICAgICBoZWFkZXI6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzZXJpYWxpemUnLCAoKSA9PiB7XG4gICAgaXQoJ3NlcmlhbGl6ZXMgdGFibGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBlbCA9IHNlcmlhbGl6YXRpb24uc2VyaWFsaXplKHtcbiAgICAgICAgb2JqZWN0OiAnYmxvY2snLFxuICAgICAgICB0eXBlOiAndGFibGUnLFxuICAgICAgICBub2RlczogW10sXG4gICAgICAgIGRhdGE6IERhdGEuY3JlYXRlKHtcbiAgICAgICAgICBib3JkZXI6ICcxJyxcbiAgICAgICAgICBjZWxscGFkZGluZzogJzInLFxuICAgICAgICAgIGNlbGxzcGFjaW5nOiAnMycsXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChlbCkudG9FcXVhbChcbiAgICAgICAgPHRhYmxlIGJvcmRlcj1cIjFcIiBjZWxsUGFkZGluZz1cIjJcIiBjZWxsU3BhY2luZz1cIjNcIj5cbiAgICAgICAgICA8dGJvZHkgLz5cbiAgICAgICAgPC90YWJsZT4sXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3NlcmlhbGl6ZXMgdGFibGVfcm93JywgKCkgPT4ge1xuICAgICAgY29uc3QgZWwgPSBzZXJpYWxpemF0aW9uLnNlcmlhbGl6ZSh7XG4gICAgICAgIG9iamVjdDogJ2Jsb2NrJyxcbiAgICAgICAgdHlwZTogJ3RhYmxlX3JvdycsXG4gICAgICAgIG5vZGVzOiBbXSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoZWwpLnRvRXF1YWwoPHRyIC8+KTtcbiAgICB9KTtcbiAgICBpdCgnc2VyaWFsaXplcyB0YWJsZV9jZWxsJywgKCkgPT4ge1xuICAgICAgY29uc3QgZWwgPSBzZXJpYWxpemF0aW9uLnNlcmlhbGl6ZSh7XG4gICAgICAgIG9iamVjdDogJ2Jsb2NrJyxcbiAgICAgICAgdHlwZTogJ3RhYmxlX2NlbGwnLFxuICAgICAgICBub2RlczogW10sXG4gICAgICAgIGRhdGE6IERhdGEuY3JlYXRlKHtcbiAgICAgICAgICBoZWFkZXI6IGZhbHNlLFxuICAgICAgICAgIHN0eWxlOiB7IHdpZHRoOiAnMTBweCcgfSxcbiAgICAgICAgICBjbGFzczogJ2ZvbycsXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChlbCkudG9FcXVhbCg8dGQgc3R5bGU9e3sgd2lkdGg6ICcxMHB4JyB9fSBjbGFzc05hbWU9eydmb28nfSAvPik7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -1,54 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
6
-
7
- var _enzyme = require("enzyme");
8
-
9
- var _react = _interopRequireDefault(require("react"));
10
-
11
- var _tableToolbar = require("../table-toolbar");
12
-
13
- 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; }
14
-
15
- 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; }
16
-
17
- describe('table-toolbar', function () {
18
- var onDone, onAddColumn, onAddRow, onRemoveColumn, onRemoveRow, onRemoveTable, onToggleBorder;
19
- beforeEach(function () {
20
- onAddColumn = jest.fn();
21
- onAddRow = jest.fn();
22
- onRemoveColumn = jest.fn();
23
- onRemoveRow = jest.fn();
24
- onRemoveTable = jest.fn();
25
- onDone = jest.fn();
26
- onToggleBorder = jest.fn();
27
- });
28
-
29
- var mkWrapper = function mkWrapper(extras) {
30
- var props = _objectSpread({
31
- onDone: onDone,
32
- onAddRow: onAddRow,
33
- onRemoveRow: onRemoveRow,
34
- onAddColumn: onAddColumn,
35
- onRemoveColumn: onRemoveColumn,
36
- onRemoveTable: onRemoveTable,
37
- hasBorder: true,
38
- onToggleBorder: onToggleBorder,
39
- classes: {
40
- tableToolbar: 'table-toolbar'
41
- }
42
- }, extras);
43
-
44
- return (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_tableToolbar.TableToolbar, props));
45
- };
46
-
47
- describe('snapshot', function () {
48
- it('renders', function () {
49
- var w = mkWrapper();
50
- expect(w).toMatchSnapshot();
51
- });
52
- });
53
- });
54
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW5zL3RhYmxlL19fdGVzdHNfXy90YWJsZS10b29sYmFyLnRlc3QuanN4Il0sIm5hbWVzIjpbImRlc2NyaWJlIiwib25Eb25lIiwib25BZGRDb2x1bW4iLCJvbkFkZFJvdyIsIm9uUmVtb3ZlQ29sdW1uIiwib25SZW1vdmVSb3ciLCJvblJlbW92ZVRhYmxlIiwib25Ub2dnbGVCb3JkZXIiLCJiZWZvcmVFYWNoIiwiamVzdCIsImZuIiwibWtXcmFwcGVyIiwiZXh0cmFzIiwicHJvcHMiLCJoYXNCb3JkZXIiLCJjbGFzc2VzIiwidGFibGVUb29sYmFyIiwiaXQiLCJ3IiwiZXhwZWN0IiwidG9NYXRjaFNuYXBzaG90Il0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7Ozs7O0FBQ0FBLFFBQVEsQ0FBQyxlQUFELEVBQWtCLFlBQU07QUFDOUIsTUFBSUMsTUFBSixFQUFZQyxXQUFaLEVBQXlCQyxRQUF6QixFQUFtQ0MsY0FBbkMsRUFBbURDLFdBQW5ELEVBQWdFQyxhQUFoRSxFQUErRUMsY0FBL0U7QUFFQUMsRUFBQUEsVUFBVSxDQUFDLFlBQU07QUFDZk4sSUFBQUEsV0FBVyxHQUFHTyxJQUFJLENBQUNDLEVBQUwsRUFBZDtBQUNBUCxJQUFBQSxRQUFRLEdBQUdNLElBQUksQ0FBQ0MsRUFBTCxFQUFYO0FBQ0FOLElBQUFBLGNBQWMsR0FBR0ssSUFBSSxDQUFDQyxFQUFMLEVBQWpCO0FBQ0FMLElBQUFBLFdBQVcsR0FBR0ksSUFBSSxDQUFDQyxFQUFMLEVBQWQ7QUFDQUosSUFBQUEsYUFBYSxHQUFHRyxJQUFJLENBQUNDLEVBQUwsRUFBaEI7QUFDQVQsSUFBQUEsTUFBTSxHQUFHUSxJQUFJLENBQUNDLEVBQUwsRUFBVDtBQUNBSCxJQUFBQSxjQUFjLEdBQUdFLElBQUksQ0FBQ0MsRUFBTCxFQUFqQjtBQUNELEdBUlMsQ0FBVjs7QUFVQSxNQUFNQyxTQUFTLEdBQUcsU0FBWkEsU0FBWSxDQUFDQyxNQUFELEVBQVk7QUFDNUIsUUFBTUMsS0FBSztBQUNUWixNQUFBQSxNQUFNLEVBQU5BLE1BRFM7QUFFVEUsTUFBQUEsUUFBUSxFQUFSQSxRQUZTO0FBR1RFLE1BQUFBLFdBQVcsRUFBWEEsV0FIUztBQUlUSCxNQUFBQSxXQUFXLEVBQVhBLFdBSlM7QUFLVEUsTUFBQUEsY0FBYyxFQUFkQSxjQUxTO0FBTVRFLE1BQUFBLGFBQWEsRUFBYkEsYUFOUztBQU9UUSxNQUFBQSxTQUFTLEVBQUUsSUFQRjtBQVFUUCxNQUFBQSxjQUFjLEVBQWRBLGNBUlM7QUFTVFEsTUFBQUEsT0FBTyxFQUFFO0FBQ1BDLFFBQUFBLFlBQVksRUFBRTtBQURQO0FBVEEsT0FZTkosTUFaTSxDQUFYOztBQWVBLFdBQU8sbUNBQVEsZ0NBQUMsMEJBQUQsRUFBa0JDLEtBQWxCLENBQVIsQ0FBUDtBQUNELEdBakJEOztBQW1CQWIsRUFBQUEsUUFBUSxDQUFDLFVBQUQsRUFBYSxZQUFNO0FBQ3pCaUIsSUFBQUEsRUFBRSxDQUFDLFNBQUQsRUFBWSxZQUFNO0FBQ2xCLFVBQU1DLENBQUMsR0FBR1AsU0FBUyxFQUFuQjtBQUNBUSxNQUFBQSxNQUFNLENBQUNELENBQUQsQ0FBTixDQUFVRSxlQUFWO0FBQ0QsS0FIQyxDQUFGO0FBSUQsR0FMTyxDQUFSO0FBTUQsQ0F0Q08sQ0FBUiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNoYWxsb3cgfSBmcm9tICdlbnp5bWUnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFRhYmxlVG9vbGJhciB9IGZyb20gJy4uL3RhYmxlLXRvb2xiYXInO1xuZGVzY3JpYmUoJ3RhYmxlLXRvb2xiYXInLCAoKSA9PiB7XG4gIGxldCBvbkRvbmUsIG9uQWRkQ29sdW1uLCBvbkFkZFJvdywgb25SZW1vdmVDb2x1bW4sIG9uUmVtb3ZlUm93LCBvblJlbW92ZVRhYmxlLCBvblRvZ2dsZUJvcmRlcjtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBvbkFkZENvbHVtbiA9IGplc3QuZm4oKTtcbiAgICBvbkFkZFJvdyA9IGplc3QuZm4oKTtcbiAgICBvblJlbW92ZUNvbHVtbiA9IGplc3QuZm4oKTtcbiAgICBvblJlbW92ZVJvdyA9IGplc3QuZm4oKTtcbiAgICBvblJlbW92ZVRhYmxlID0gamVzdC5mbigpO1xuICAgIG9uRG9uZSA9IGplc3QuZm4oKTtcbiAgICBvblRvZ2dsZUJvcmRlciA9IGplc3QuZm4oKTtcbiAgfSk7XG5cbiAgY29uc3QgbWtXcmFwcGVyID0gKGV4dHJhcykgPT4ge1xuICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgb25Eb25lLFxuICAgICAgb25BZGRSb3csXG4gICAgICBvblJlbW92ZVJvdyxcbiAgICAgIG9uQWRkQ29sdW1uLFxuICAgICAgb25SZW1vdmVDb2x1bW4sXG4gICAgICBvblJlbW92ZVRhYmxlLFxuICAgICAgaGFzQm9yZGVyOiB0cnVlLFxuICAgICAgb25Ub2dnbGVCb3JkZXIsXG4gICAgICBjbGFzc2VzOiB7XG4gICAgICAgIHRhYmxlVG9vbGJhcjogJ3RhYmxlLXRvb2xiYXInLFxuICAgICAgfSxcbiAgICAgIC4uLmV4dHJhcyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHNoYWxsb3coPFRhYmxlVG9vbGJhciB7Li4ucHJvcHN9IC8+KTtcbiAgfTtcblxuICBkZXNjcmliZSgnc25hcHNob3QnLCAoKSA9PiB7XG4gICAgaXQoJ3JlbmRlcnMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB3ID0gbWtXcmFwcGVyKCk7XG4gICAgICBleHBlY3QodykudG9NYXRjaFNuYXBzaG90KCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -1,69 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.RemoveTable = exports.RemoveRow = exports.RemoveColumn = exports.AddRow = exports.AddColumn = void 0;
9
-
10
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
-
12
- var _react = _interopRequireDefault(require("react"));
13
-
14
- var _styles = require("@material-ui/core/styles");
15
-
16
- var styles = {
17
- icon: {
18
- fill: 'grey',
19
- '&:hover': {
20
- fill: 'black'
21
- }
22
- }
23
- };
24
-
25
- var SvgIcon = function SvgIcon(Component) {
26
- return (0, _styles.withStyles)(styles)(function (props) {
27
- return /*#__PURE__*/_react["default"].createElement("svg", {
28
- xmlns: "http://www.w3.org/2000/svg",
29
- version: "1.1",
30
- width: "24",
31
- height: "24",
32
- viewBox: "0 0 24 24"
33
- }, /*#__PURE__*/_react["default"].createElement(Component, {
34
- className: props.classes.icon
35
- }));
36
- });
37
- };
38
-
39
- var AddRow = SvgIcon(function (props) {
40
- return /*#__PURE__*/_react["default"].createElement("path", (0, _extends2["default"])({}, props, {
41
- d: "M22,10A2,2 0 0,1 20,12H4A2,2 0 0,1 2,10V3H4V5H8V3H10V5H14V3H16V5H20V3H22V10M4,10H8V7H4V10M10,10H14V7H10V10M20,10V7H16V10H20M11,14H13V17H16V19H13V22H11V19H8V17H11V14Z"
42
- }));
43
- });
44
- exports.AddRow = AddRow;
45
- var RemoveRow = SvgIcon(function (props) {
46
- return /*#__PURE__*/_react["default"].createElement("path", (0, _extends2["default"])({}, props, {
47
- d: "M9.41,13L12,15.59L14.59,13L16,14.41L13.41,17L16,19.59L14.59,21L12,18.41L9.41,21L8,19.59L10.59,17L8,14.41L9.41,13M22,9A2,2 0 0,1 20,11H4A2,2 0 0,1 2,9V6A2,2 0 0,1 4,4H20A2,2 0 0,1 22,6V9M4,9H8V6H4V9M10,9H14V6H10V9M16,9H20V6H16V9Z"
48
- }));
49
- });
50
- exports.RemoveRow = RemoveRow;
51
- var AddColumn = SvgIcon(function (props) {
52
- return /*#__PURE__*/_react["default"].createElement("path", (0, _extends2["default"])({}, props, {
53
- d: "M11,2A2,2 0 0,1 13,4V20A2,2 0 0,1 11,22H2V2H11M4,10V14H11V10H4M4,16V20H11V16H4M4,4V8H11V4H4M15,11H18V8H20V11H23V13H20V16H18V13H15V11Z"
54
- }));
55
- });
56
- exports.AddColumn = AddColumn;
57
- var RemoveColumn = SvgIcon(function (props) {
58
- return /*#__PURE__*/_react["default"].createElement("path", (0, _extends2["default"])({}, props, {
59
- d: "M4,2H11A2,2 0 0,1 13,4V20A2,2 0 0,1 11,22H4A2,2 0 0,1 2,20V4A2,2 0 0,1 4,2M4,10V14H11V10H4M4,16V20H11V16H4M4,4V8H11V4H4M17.59,12L15,9.41L16.41,8L19,10.59L21.59,8L23,9.41L20.41,12L23,14.59L21.59,16L19,13.41L16.41,16L15,14.59L17.59,12Z"
60
- }));
61
- });
62
- exports.RemoveColumn = RemoveColumn;
63
- var RemoveTable = SvgIcon(function (props) {
64
- return /*#__PURE__*/_react["default"].createElement("path", (0, _extends2["default"])({}, props, {
65
- d: "M15.46,15.88L16.88,14.46L19,16.59L21.12,14.46L22.54,15.88L20.41,18L22.54,20.12L21.12,21.54L19,19.41L16.88,21.54L15.46,20.12L17.59,18L15.46,15.88M4,3H18A2,2 0 0,1 20,5V12.08C18.45,11.82 16.92,12.18 15.68,13H12V17H13.08C12.97,17.68 12.97,18.35 13.08,19H4A2,2 0 0,1 2,17V5A2,2 0 0,1 4,3M4,7V11H10V7H4M12,7V11H18V7H12M4,13V17H10V13H4Z"
66
- }));
67
- });
68
- exports.RemoveTable = RemoveTable;
69
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW5zL3RhYmxlL2ljb25zL2luZGV4LmpzeCJdLCJuYW1lcyI6WyJzdHlsZXMiLCJpY29uIiwiZmlsbCIsIlN2Z0ljb24iLCJDb21wb25lbnQiLCJwcm9wcyIsImNsYXNzZXMiLCJBZGRSb3ciLCJSZW1vdmVSb3ciLCJBZGRDb2x1bW4iLCJSZW1vdmVDb2x1bW4iLCJSZW1vdmVUYWJsZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFFQSxJQUFNQSxNQUFNLEdBQUc7QUFDYkMsRUFBQUEsSUFBSSxFQUFFO0FBQ0pDLElBQUFBLElBQUksRUFBRSxNQURGO0FBRUosZUFBVztBQUNUQSxNQUFBQSxJQUFJLEVBQUU7QUFERztBQUZQO0FBRE8sQ0FBZjs7QUFTQSxJQUFNQyxPQUFPLEdBQUcsU0FBVkEsT0FBVSxDQUFDQyxTQUFELEVBQWU7QUFDN0IsU0FBTyx3QkFBV0osTUFBWCxFQUFtQixVQUFDSyxLQUFEO0FBQUEsd0JBQ3hCO0FBQUssTUFBQSxLQUFLLEVBQUMsNEJBQVg7QUFBd0MsTUFBQSxPQUFPLEVBQUMsS0FBaEQ7QUFBc0QsTUFBQSxLQUFLLEVBQUMsSUFBNUQ7QUFBaUUsTUFBQSxNQUFNLEVBQUMsSUFBeEU7QUFBNkUsTUFBQSxPQUFPLEVBQUM7QUFBckYsb0JBQ0UsZ0NBQUMsU0FBRDtBQUFXLE1BQUEsU0FBUyxFQUFFQSxLQUFLLENBQUNDLE9BQU4sQ0FBY0w7QUFBcEMsTUFERixDQUR3QjtBQUFBLEdBQW5CLENBQVA7QUFLRCxDQU5EOztBQU9PLElBQU1NLE1BQU0sR0FBR0osT0FBTyxDQUFDLFVBQUNFLEtBQUQ7QUFBQSxzQkFDNUIsc0VBQ01BLEtBRE47QUFFRSxJQUFBLENBQUMsRUFBQztBQUZKLEtBRDRCO0FBQUEsQ0FBRCxDQUF0Qjs7QUFPQSxJQUFNRyxTQUFTLEdBQUdMLE9BQU8sQ0FBQyxVQUFDRSxLQUFEO0FBQUEsc0JBQy9CLHNFQUNNQSxLQUROO0FBRUUsSUFBQSxDQUFDLEVBQUM7QUFGSixLQUQrQjtBQUFBLENBQUQsQ0FBekI7O0FBT0EsSUFBTUksU0FBUyxHQUFHTixPQUFPLENBQUMsVUFBQ0UsS0FBRDtBQUFBLHNCQUMvQixzRUFDTUEsS0FETjtBQUVFLElBQUEsQ0FBQyxFQUFDO0FBRkosS0FEK0I7QUFBQSxDQUFELENBQXpCOztBQU9BLElBQU1LLFlBQVksR0FBR1AsT0FBTyxDQUFDLFVBQUNFLEtBQUQ7QUFBQSxzQkFDbEMsc0VBQ01BLEtBRE47QUFFRSxJQUFBLENBQUMsRUFBQztBQUZKLEtBRGtDO0FBQUEsQ0FBRCxDQUE1Qjs7QUFPQSxJQUFNTSxXQUFXLEdBQUdSLE9BQU8sQ0FBQyxVQUFDRSxLQUFEO0FBQUEsc0JBQ2pDLHNFQUNNQSxLQUROO0FBRUUsSUFBQSxDQUFDLEVBQUM7QUFGSixLQURpQztBQUFBLENBQUQsQ0FBM0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgd2l0aFN0eWxlcyB9IGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL3N0eWxlcyc7XG5cbmNvbnN0IHN0eWxlcyA9IHtcbiAgaWNvbjoge1xuICAgIGZpbGw6ICdncmV5JyxcbiAgICAnJjpob3Zlcic6IHtcbiAgICAgIGZpbGw6ICdibGFjaycsXG4gICAgfSxcbiAgfSxcbn07XG5cbmNvbnN0IFN2Z0ljb24gPSAoQ29tcG9uZW50KSA9PiB7XG4gIHJldHVybiB3aXRoU3R5bGVzKHN0eWxlcykoKHByb3BzKSA9PiAoXG4gICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmVyc2lvbj1cIjEuMVwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIj5cbiAgICAgIDxDb21wb25lbnQgY2xhc3NOYW1lPXtwcm9wcy5jbGFzc2VzLmljb259IC8+XG4gICAgPC9zdmc+XG4gICkpO1xufTtcbmV4cG9ydCBjb25zdCBBZGRSb3cgPSBTdmdJY29uKChwcm9wcykgPT4gKFxuICA8cGF0aFxuICAgIHsuLi5wcm9wc31cbiAgICBkPVwiTTIyLDEwQTIsMiAwIDAsMSAyMCwxMkg0QTIsMiAwIDAsMSAyLDEwVjNINFY1SDhWM0gxMFY1SDE0VjNIMTZWNUgyMFYzSDIyVjEwTTQsMTBIOFY3SDRWMTBNMTAsMTBIMTRWN0gxMFYxME0yMCwxMFY3SDE2VjEwSDIwTTExLDE0SDEzVjE3SDE2VjE5SDEzVjIySDExVjE5SDhWMTdIMTFWMTRaXCJcbiAgLz5cbikpO1xuXG5leHBvcnQgY29uc3QgUmVtb3ZlUm93ID0gU3ZnSWNvbigocHJvcHMpID0+IChcbiAgPHBhdGhcbiAgICB7Li4ucHJvcHN9XG4gICAgZD1cIk05LjQxLDEzTDEyLDE1LjU5TDE0LjU5LDEzTDE2LDE0LjQxTDEzLjQxLDE3TDE2LDE5LjU5TDE0LjU5LDIxTDEyLDE4LjQxTDkuNDEsMjFMOCwxOS41OUwxMC41OSwxN0w4LDE0LjQxTDkuNDEsMTNNMjIsOUEyLDIgMCAwLDEgMjAsMTFINEEyLDIgMCAwLDEgMiw5VjZBMiwyIDAgMCwxIDQsNEgyMEEyLDIgMCAwLDEgMjIsNlY5TTQsOUg4VjZINFY5TTEwLDlIMTRWNkgxMFY5TTE2LDlIMjBWNkgxNlY5WlwiXG4gIC8+XG4pKTtcblxuZXhwb3J0IGNvbnN0IEFkZENvbHVtbiA9IFN2Z0ljb24oKHByb3BzKSA9PiAoXG4gIDxwYXRoXG4gICAgey4uLnByb3BzfVxuICAgIGQ9XCJNMTEsMkEyLDIgMCAwLDEgMTMsNFYyMEEyLDIgMCAwLDEgMTEsMjJIMlYySDExTTQsMTBWMTRIMTFWMTBINE00LDE2VjIwSDExVjE2SDRNNCw0VjhIMTFWNEg0TTE1LDExSDE4VjhIMjBWMTFIMjNWMTNIMjBWMTZIMThWMTNIMTVWMTFaXCJcbiAgLz5cbikpO1xuXG5leHBvcnQgY29uc3QgUmVtb3ZlQ29sdW1uID0gU3ZnSWNvbigocHJvcHMpID0+IChcbiAgPHBhdGhcbiAgICB7Li4ucHJvcHN9XG4gICAgZD1cIk00LDJIMTFBMiwyIDAgMCwxIDEzLDRWMjBBMiwyIDAgMCwxIDExLDIySDRBMiwyIDAgMCwxIDIsMjBWNEEyLDIgMCAwLDEgNCwyTTQsMTBWMTRIMTFWMTBINE00LDE2VjIwSDExVjE2SDRNNCw0VjhIMTFWNEg0TTE3LjU5LDEyTDE1LDkuNDFMMTYuNDEsOEwxOSwxMC41OUwyMS41OSw4TDIzLDkuNDFMMjAuNDEsMTJMMjMsMTQuNTlMMjEuNTksMTZMMTksMTMuNDFMMTYuNDEsMTZMMTUsMTQuNTlMMTcuNTksMTJaXCJcbiAgLz5cbikpO1xuXG5leHBvcnQgY29uc3QgUmVtb3ZlVGFibGUgPSBTdmdJY29uKChwcm9wcykgPT4gKFxuICA8cGF0aFxuICAgIHsuLi5wcm9wc31cbiAgICBkPVwiTTE1LjQ2LDE1Ljg4TDE2Ljg4LDE0LjQ2TDE5LDE2LjU5TDIxLjEyLDE0LjQ2TDIyLjU0LDE1Ljg4TDIwLjQxLDE4TDIyLjU0LDIwLjEyTDIxLjEyLDIxLjU0TDE5LDE5LjQxTDE2Ljg4LDIxLjU0TDE1LjQ2LDIwLjEyTDE3LjU5LDE4TDE1LjQ2LDE1Ljg4TTQsM0gxOEEyLDIgMCAwLDEgMjAsNVYxMi4wOEMxOC40NSwxMS44MiAxNi45MiwxMi4xOCAxNS42OCwxM0gxMlYxN0gxMy4wOEMxMi45NywxNy42OCAxMi45NywxOC4zNSAxMy4wOCwxOUg0QTIsMiAwIDAsMSAyLDE3VjVBMiwyIDAgMCwxIDQsM000LDdWMTFIMTBWN0g0TTEyLDdWMTFIMThWN0gxMk00LDEzVjE3SDEwVjEzSDRaXCJcbiAgLz5cbikpO1xuIl19