@pie-lib/editable-html-tip-tap 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/CHANGELOG.json +32 -0
  2. package/CHANGELOG.md +2280 -0
  3. package/lib/__tests__/editor.test.js +470 -0
  4. package/lib/__tests__/serialization.test.js +246 -0
  5. package/lib/__tests__/utils.js +106 -0
  6. package/lib/block-tags.js +25 -0
  7. package/lib/constants.js +16 -0
  8. package/lib/editor.js +1356 -0
  9. package/lib/extensions/MediaView.js +112 -0
  10. package/lib/extensions/characters.js +65 -0
  11. package/lib/extensions/component.js +325 -0
  12. package/lib/extensions/css.js +252 -0
  13. package/lib/extensions/custom-toolbar-wrapper.js +124 -0
  14. package/lib/extensions/image.js +106 -0
  15. package/lib/extensions/math.js +330 -0
  16. package/lib/extensions/media.js +276 -0
  17. package/lib/extensions/responseArea.js +278 -0
  18. package/lib/index.js +1213 -0
  19. package/lib/old-index.js +269 -0
  20. package/lib/parse-html.js +16 -0
  21. package/lib/plugins/characters/custom-popper.js +73 -0
  22. package/lib/plugins/characters/index.js +305 -0
  23. package/lib/plugins/characters/utils.js +381 -0
  24. package/lib/plugins/css/icons/index.js +37 -0
  25. package/lib/plugins/css/index.js +390 -0
  26. package/lib/plugins/customPlugin/index.js +114 -0
  27. package/lib/plugins/html/icons/index.js +38 -0
  28. package/lib/plugins/html/index.js +81 -0
  29. package/lib/plugins/image/__tests__/component.test.js +51 -0
  30. package/lib/plugins/image/__tests__/image-toolbar-logic.test.js +56 -0
  31. package/lib/plugins/image/__tests__/image-toolbar.test.js +26 -0
  32. package/lib/plugins/image/__tests__/index.test.js +98 -0
  33. package/lib/plugins/image/__tests__/insert-image-handler.test.js +125 -0
  34. package/lib/plugins/image/__tests__/mock-change.js +25 -0
  35. package/lib/plugins/image/alt-dialog.js +129 -0
  36. package/lib/plugins/image/component.js +419 -0
  37. package/lib/plugins/image/image-toolbar.js +177 -0
  38. package/lib/plugins/image/index.js +263 -0
  39. package/lib/plugins/image/insert-image-handler.js +117 -0
  40. package/lib/plugins/index.js +413 -0
  41. package/lib/plugins/list/__tests__/index.test.js +79 -0
  42. package/lib/plugins/list/index.js +334 -0
  43. package/lib/plugins/math/__tests__/index.test.js +300 -0
  44. package/lib/plugins/math/index.js +454 -0
  45. package/lib/plugins/media/__tests__/index.test.js +71 -0
  46. package/lib/plugins/media/index.js +387 -0
  47. package/lib/plugins/media/media-dialog.js +709 -0
  48. package/lib/plugins/media/media-toolbar.js +101 -0
  49. package/lib/plugins/media/media-wrapper.js +93 -0
  50. package/lib/plugins/rendering/index.js +46 -0
  51. package/lib/plugins/respArea/drag-in-the-blank/choice.js +289 -0
  52. package/lib/plugins/respArea/drag-in-the-blank/index.js +94 -0
  53. package/lib/plugins/respArea/explicit-constructed-response/index.js +120 -0
  54. package/lib/plugins/respArea/icons/index.js +95 -0
  55. package/lib/plugins/respArea/index.js +341 -0
  56. package/lib/plugins/respArea/inline-dropdown/index.js +126 -0
  57. package/lib/plugins/respArea/math-templated/index.js +130 -0
  58. package/lib/plugins/respArea/utils.js +125 -0
  59. package/lib/plugins/table/CustomTablePlugin.js +133 -0
  60. package/lib/plugins/table/__tests__/index.test.js +442 -0
  61. package/lib/plugins/table/__tests__/table-toolbar.test.js +54 -0
  62. package/lib/plugins/table/icons/index.js +69 -0
  63. package/lib/plugins/table/index.js +483 -0
  64. package/lib/plugins/table/table-toolbar.js +187 -0
  65. package/lib/plugins/textAlign/icons/index.js +194 -0
  66. package/lib/plugins/textAlign/index.js +34 -0
  67. package/lib/plugins/toolbar/__tests__/default-toolbar.test.js +128 -0
  68. package/lib/plugins/toolbar/__tests__/editor-and-toolbar.test.js +51 -0
  69. package/lib/plugins/toolbar/__tests__/toolbar-buttons.test.js +54 -0
  70. package/lib/plugins/toolbar/__tests__/toolbar.test.js +120 -0
  71. package/lib/plugins/toolbar/default-toolbar.js +229 -0
  72. package/lib/plugins/toolbar/done-button.js +53 -0
  73. package/lib/plugins/toolbar/editor-and-toolbar.js +286 -0
  74. package/lib/plugins/toolbar/index.js +34 -0
  75. package/lib/plugins/toolbar/toolbar-buttons.js +194 -0
  76. package/lib/plugins/toolbar/toolbar.js +376 -0
  77. package/lib/plugins/utils.js +62 -0
  78. package/lib/serialization.js +677 -0
  79. package/lib/shared/alert-dialog.js +75 -0
  80. package/lib/theme.js +9 -0
  81. package/package.json +69 -0
  82. package/src/__tests__/editor.test.jsx +363 -0
  83. package/src/__tests__/serialization.test.js +291 -0
  84. package/src/__tests__/utils.js +36 -0
  85. package/src/block-tags.js +17 -0
  86. package/src/constants.js +7 -0
  87. package/src/editor.jsx +1197 -0
  88. package/src/extensions/characters.js +46 -0
  89. package/src/extensions/component.jsx +294 -0
  90. package/src/extensions/css.js +217 -0
  91. package/src/extensions/custom-toolbar-wrapper.jsx +100 -0
  92. package/src/extensions/image.js +55 -0
  93. package/src/extensions/math.js +259 -0
  94. package/src/extensions/media.js +182 -0
  95. package/src/extensions/responseArea.js +205 -0
  96. package/src/index.jsx +1462 -0
  97. package/src/old-index.jsx +162 -0
  98. package/src/parse-html.js +8 -0
  99. package/src/plugins/README.md +27 -0
  100. package/src/plugins/characters/custom-popper.js +48 -0
  101. package/src/plugins/characters/index.jsx +284 -0
  102. package/src/plugins/characters/utils.js +447 -0
  103. package/src/plugins/css/icons/index.jsx +17 -0
  104. package/src/plugins/css/index.jsx +340 -0
  105. package/src/plugins/customPlugin/index.jsx +85 -0
  106. package/src/plugins/html/icons/index.jsx +19 -0
  107. package/src/plugins/html/index.jsx +72 -0
  108. package/src/plugins/image/__tests__/__snapshots__/component.test.jsx.snap +51 -0
  109. package/src/plugins/image/__tests__/__snapshots__/image-toolbar-logic.test.jsx.snap +27 -0
  110. package/src/plugins/image/__tests__/__snapshots__/image-toolbar.test.jsx.snap +44 -0
  111. package/src/plugins/image/__tests__/component.test.jsx +41 -0
  112. package/src/plugins/image/__tests__/image-toolbar-logic.test.jsx +42 -0
  113. package/src/plugins/image/__tests__/image-toolbar.test.jsx +11 -0
  114. package/src/plugins/image/__tests__/index.test.js +95 -0
  115. package/src/plugins/image/__tests__/insert-image-handler.test.js +113 -0
  116. package/src/plugins/image/__tests__/mock-change.js +15 -0
  117. package/src/plugins/image/alt-dialog.jsx +82 -0
  118. package/src/plugins/image/component.jsx +343 -0
  119. package/src/plugins/image/image-toolbar.jsx +100 -0
  120. package/src/plugins/image/index.jsx +227 -0
  121. package/src/plugins/image/insert-image-handler.js +79 -0
  122. package/src/plugins/index.jsx +377 -0
  123. package/src/plugins/list/__tests__/index.test.js +54 -0
  124. package/src/plugins/list/index.jsx +305 -0
  125. package/src/plugins/math/__tests__/__snapshots__/index.test.jsx.snap +48 -0
  126. package/src/plugins/math/__tests__/index.test.jsx +245 -0
  127. package/src/plugins/math/index.jsx +379 -0
  128. package/src/plugins/media/__tests__/index.test.js +75 -0
  129. package/src/plugins/media/index.jsx +325 -0
  130. package/src/plugins/media/media-dialog.js +624 -0
  131. package/src/plugins/media/media-toolbar.jsx +56 -0
  132. package/src/plugins/media/media-wrapper.jsx +43 -0
  133. package/src/plugins/rendering/index.js +31 -0
  134. package/src/plugins/respArea/drag-in-the-blank/choice.jsx +215 -0
  135. package/src/plugins/respArea/drag-in-the-blank/index.jsx +70 -0
  136. package/src/plugins/respArea/explicit-constructed-response/index.jsx +92 -0
  137. package/src/plugins/respArea/icons/index.jsx +71 -0
  138. package/src/plugins/respArea/index.jsx +299 -0
  139. package/src/plugins/respArea/inline-dropdown/index.jsx +108 -0
  140. package/src/plugins/respArea/math-templated/index.jsx +104 -0
  141. package/src/plugins/respArea/utils.jsx +90 -0
  142. package/src/plugins/table/CustomTablePlugin.js +113 -0
  143. package/src/plugins/table/__tests__/__snapshots__/table-toolbar.test.jsx.snap +44 -0
  144. package/src/plugins/table/__tests__/index.test.jsx +401 -0
  145. package/src/plugins/table/__tests__/table-toolbar.test.jsx +42 -0
  146. package/src/plugins/table/icons/index.jsx +53 -0
  147. package/src/plugins/table/index.jsx +427 -0
  148. package/src/plugins/table/table-toolbar.jsx +136 -0
  149. package/src/plugins/textAlign/icons/index.jsx +114 -0
  150. package/src/plugins/textAlign/index.jsx +23 -0
  151. package/src/plugins/toolbar/__tests__/__snapshots__/default-toolbar.test.jsx.snap +923 -0
  152. package/src/plugins/toolbar/__tests__/__snapshots__/editor-and-toolbar.test.jsx.snap +20 -0
  153. package/src/plugins/toolbar/__tests__/__snapshots__/toolbar-buttons.test.jsx.snap +36 -0
  154. package/src/plugins/toolbar/__tests__/__snapshots__/toolbar.test.jsx.snap +46 -0
  155. package/src/plugins/toolbar/__tests__/default-toolbar.test.jsx +94 -0
  156. package/src/plugins/toolbar/__tests__/editor-and-toolbar.test.jsx +37 -0
  157. package/src/plugins/toolbar/__tests__/toolbar-buttons.test.jsx +51 -0
  158. package/src/plugins/toolbar/__tests__/toolbar.test.jsx +106 -0
  159. package/src/plugins/toolbar/default-toolbar.jsx +206 -0
  160. package/src/plugins/toolbar/done-button.jsx +38 -0
  161. package/src/plugins/toolbar/editor-and-toolbar.jsx +257 -0
  162. package/src/plugins/toolbar/index.jsx +23 -0
  163. package/src/plugins/toolbar/toolbar-buttons.jsx +138 -0
  164. package/src/plugins/toolbar/toolbar.jsx +338 -0
  165. package/src/plugins/utils.js +31 -0
  166. package/src/serialization.jsx +621 -0
  167. package/src/theme.js +1 -0
@@ -0,0 +1,442 @@
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=
@@ -0,0 +1,54 @@
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=
@@ -0,0 +1,69 @@
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