@pie-lib/editable-html-tip-tap 2.2.0-beta.6 → 2.2.0-beta.8

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 (96) hide show
  1. package/lib/extensions/math.js.map +1 -1
  2. package/package.json +3 -3
  3. package/src/extensions/__tests__/math.test.js +2 -6
  4. package/src/extensions/math.js +1 -5
  5. package/lib/__tests__/EditableHtml.test.js +0 -831
  6. package/lib/__tests__/EditableHtml.test.js.map +0 -1
  7. package/lib/__tests__/constants.test.js +0 -21
  8. package/lib/__tests__/constants.test.js.map +0 -1
  9. package/lib/__tests__/div-to-paragraph-conversion.test.js +0 -213
  10. package/lib/__tests__/div-to-paragraph-conversion.test.js.map +0 -1
  11. package/lib/__tests__/extensions.test.js +0 -209
  12. package/lib/__tests__/extensions.test.js.map +0 -1
  13. package/lib/__tests__/index.test.js +0 -250
  14. package/lib/__tests__/index.test.js.map +0 -1
  15. package/lib/__tests__/size-utils.test.js +0 -57
  16. package/lib/__tests__/size-utils.test.js.map +0 -1
  17. package/lib/__tests__/theme.test.js +0 -17
  18. package/lib/__tests__/theme.test.js.map +0 -1
  19. package/lib/components/__tests__/AltDialog.test.js +0 -201
  20. package/lib/components/__tests__/AltDialog.test.js.map +0 -1
  21. package/lib/components/__tests__/CharacterPicker.test.js +0 -455
  22. package/lib/components/__tests__/CharacterPicker.test.js.map +0 -1
  23. package/lib/components/__tests__/CssIcon.test.js +0 -58
  24. package/lib/components/__tests__/CssIcon.test.js.map +0 -1
  25. package/lib/components/__tests__/DragInTheBlank.test.js +0 -295
  26. package/lib/components/__tests__/DragInTheBlank.test.js.map +0 -1
  27. package/lib/components/__tests__/ExplicitConstructedResponse.test.js +0 -345
  28. package/lib/components/__tests__/ExplicitConstructedResponse.test.js.map +0 -1
  29. package/lib/components/__tests__/ImageToolbar.test.js +0 -185
  30. package/lib/components/__tests__/ImageToolbar.test.js.map +0 -1
  31. package/lib/components/__tests__/InlineDropdown.test.js +0 -839
  32. package/lib/components/__tests__/InlineDropdown.test.js.map +0 -1
  33. package/lib/components/__tests__/InsertImageHandler.test.js +0 -171
  34. package/lib/components/__tests__/InsertImageHandler.test.js.map +0 -1
  35. package/lib/components/__tests__/MediaDialog.test.js +0 -433
  36. package/lib/components/__tests__/MediaDialog.test.js.map +0 -1
  37. package/lib/components/__tests__/MediaToolbar.test.js +0 -126
  38. package/lib/components/__tests__/MediaToolbar.test.js.map +0 -1
  39. package/lib/components/__tests__/MediaWrapper.test.js +0 -96
  40. package/lib/components/__tests__/MediaWrapper.test.js.map +0 -1
  41. package/lib/components/__tests__/MenuBar.test.js +0 -502
  42. package/lib/components/__tests__/MenuBar.test.js.map +0 -1
  43. package/lib/components/__tests__/RespArea.test.js +0 -171
  44. package/lib/components/__tests__/RespArea.test.js.map +0 -1
  45. package/lib/components/__tests__/TableIcons.test.js +0 -153
  46. package/lib/components/__tests__/TableIcons.test.js.map +0 -1
  47. package/lib/components/__tests__/TextAlign.test.js +0 -209
  48. package/lib/components/__tests__/TextAlign.test.js.map +0 -1
  49. package/lib/components/__tests__/TiptapContainer.test.js +0 -196
  50. package/lib/components/__tests__/TiptapContainer.test.js.map +0 -1
  51. package/lib/components/__tests__/characterUtils.test.js +0 -178
  52. package/lib/components/__tests__/characterUtils.test.js.map +0 -1
  53. package/lib/components/__tests__/choice.test.js +0 -213
  54. package/lib/components/__tests__/choice.test.js.map +0 -1
  55. package/lib/components/__tests__/custom-popper.test.js +0 -108
  56. package/lib/components/__tests__/custom-popper.test.js.map +0 -1
  57. package/lib/components/__tests__/done-button.test.js +0 -72
  58. package/lib/components/__tests__/done-button.test.js.map +0 -1
  59. package/lib/components/__tests__/toolbar-buttons.test.js +0 -277
  60. package/lib/components/__tests__/toolbar-buttons.test.js.map +0 -1
  61. package/lib/components/respArea/DragInTheBlank/__tests__/choice.test.js +0 -90
  62. package/lib/components/respArea/DragInTheBlank/__tests__/choice.test.js.map +0 -1
  63. package/lib/components/respArea/__tests__/MathTemplated.test.js +0 -217
  64. package/lib/components/respArea/__tests__/MathTemplated.test.js.map +0 -1
  65. package/lib/extensions/__tests__/css.test.js +0 -214
  66. package/lib/extensions/__tests__/css.test.js.map +0 -1
  67. package/lib/extensions/__tests__/custom-toolbar-wrapper.test.js +0 -175
  68. package/lib/extensions/__tests__/custom-toolbar-wrapper.test.js.map +0 -1
  69. package/lib/extensions/__tests__/divNode.test.js +0 -108
  70. package/lib/extensions/__tests__/divNode.test.js.map +0 -1
  71. package/lib/extensions/__tests__/ensure-empty-root-div.test.js +0 -50
  72. package/lib/extensions/__tests__/ensure-empty-root-div.test.js.map +0 -1
  73. package/lib/extensions/__tests__/ensure-list-item-content-is-div.test.js +0 -60
  74. package/lib/extensions/__tests__/ensure-list-item-content-is-div.test.js.map +0 -1
  75. package/lib/extensions/__tests__/extended-list-item.test.js +0 -13
  76. package/lib/extensions/__tests__/extended-list-item.test.js.map +0 -1
  77. package/lib/extensions/__tests__/extended-table-cell.test.js +0 -15
  78. package/lib/extensions/__tests__/extended-table-cell.test.js.map +0 -1
  79. package/lib/extensions/__tests__/extended-table.test.js +0 -200
  80. package/lib/extensions/__tests__/extended-table.test.js.map +0 -1
  81. package/lib/extensions/__tests__/image-component.test.js +0 -432
  82. package/lib/extensions/__tests__/image-component.test.js.map +0 -1
  83. package/lib/extensions/__tests__/image.test.js +0 -313
  84. package/lib/extensions/__tests__/image.test.js.map +0 -1
  85. package/lib/extensions/__tests__/math.test.js +0 -1411
  86. package/lib/extensions/__tests__/math.test.js.map +0 -1
  87. package/lib/extensions/__tests__/media-node-view.test.js +0 -307
  88. package/lib/extensions/__tests__/media-node-view.test.js.map +0 -1
  89. package/lib/extensions/__tests__/media.test.js +0 -292
  90. package/lib/extensions/__tests__/media.test.js.map +0 -1
  91. package/lib/extensions/__tests__/responseArea.test.js +0 -736
  92. package/lib/extensions/__tests__/responseArea.test.js.map +0 -1
  93. package/lib/utils/__tests__/helper.test.js +0 -107
  94. package/lib/utils/__tests__/helper.test.js.map +0 -1
  95. package/lib/utils/__tests__/toolbar.test.js +0 -38
  96. package/lib/utils/__tests__/toolbar.test.js.map +0 -1
@@ -1,839 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
5
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
6
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
7
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
8
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
- var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
10
- var _react = _interopRequireDefault(require("react"));
11
- var _react2 = require("@testing-library/react");
12
- var _mathRendering = require("@pie-lib/math-rendering");
13
- var _InlineDropdown = _interopRequireDefault(require("../respArea/InlineDropdown"));
14
- var _excluded = ["children"];
15
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
16
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
17
- jest.mock('@pie-lib/math-rendering', function () {
18
- return {
19
- renderMath: jest.fn()
20
- };
21
- });
22
- jest.mock('@tiptap/react', function () {
23
- return {
24
- NodeViewWrapper: function NodeViewWrapper(_ref) {
25
- var children = _ref.children,
26
- props = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
27
- return /*#__PURE__*/_react["default"].createElement("div", (0, _extends2["default"])({
28
- "data-testid": "node-view-wrapper"
29
- }, props), children);
30
- }
31
- };
32
- });
33
- var mockCreatePortal = jest.fn(function (node) {
34
- return node;
35
- });
36
- jest.mock('react-dom', function () {
37
- return _objectSpread(_objectSpread({}, jest.requireActual('react-dom')), {}, {
38
- createPortal: function createPortal() {
39
- return mockCreatePortal.apply(void 0, arguments);
40
- }
41
- });
42
- });
43
- describe('InlineDropdown', function () {
44
- var buildMockEditor = function buildMockEditor() {
45
- var overrides = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
46
- var mockNodeAt = jest.fn(function (pos) {
47
- return pos === 5 ? {
48
- nodeSize: 1
49
- } : null;
50
- });
51
- var mockDoc = {
52
- descendants: jest.fn(),
53
- nodeAt: mockNodeAt
54
- };
55
- var mockTr = {
56
- "delete": jest.fn(),
57
- doc: {
58
- nodeAt: mockNodeAt
59
- },
60
- setSelection: jest.fn(),
61
- setMeta: jest.fn(function setMeta() {
62
- return mockTr;
63
- })
64
- };
65
- return _objectSpread({
66
- state: {
67
- selection: {
68
- from: 0,
69
- to: 1
70
- },
71
- tr: mockTr,
72
- doc: mockDoc
73
- },
74
- view: {
75
- coordsAtPos: jest.fn(function () {
76
- return {
77
- top: 100,
78
- left: 50
79
- };
80
- }),
81
- dispatch: jest.fn()
82
- },
83
- commands: {
84
- focus: jest.fn()
85
- },
86
- _tiptapContainerEl: document.createElement('div'),
87
- _toolbarOpened: false
88
- }, overrides);
89
- };
90
- var mockEditor;
91
- var mockNode = {
92
- attrs: {
93
- index: '0',
94
- value: 'Selected Option',
95
- error: false
96
- },
97
- nodeSize: 1
98
- };
99
- var mockOptions = {
100
- respAreaToolbar: jest.fn(function () {
101
- return function () {
102
- return /*#__PURE__*/_react["default"].createElement("div", {
103
- "data-testid": "inline-dropdown-toolbar"
104
- }, "Toolbar");
105
- };
106
- })
107
- };
108
- var defaultProps = {
109
- editor: mockEditor,
110
- node: mockNode,
111
- getPos: function getPos() {
112
- return 5;
113
- },
114
- options: mockOptions,
115
- selected: false
116
- };
117
- beforeEach(function () {
118
- jest.clearAllMocks();
119
- mockCreatePortal.mockClear();
120
- mockEditor = buildMockEditor();
121
- defaultProps.editor = mockEditor;
122
- Object.defineProperty(document.body, 'getBoundingClientRect', {
123
- value: jest.fn(function () {
124
- return {
125
- top: 0,
126
- left: 0
127
- };
128
- }),
129
- configurable: true
130
- });
131
- });
132
- it('renders without crashing', function () {
133
- var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], defaultProps)),
134
- container = _render.container;
135
- expect(container).toBeInTheDocument();
136
- });
137
- it('renders NodeViewWrapper', function () {
138
- var _render2 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], defaultProps)),
139
- getByTestId = _render2.getByTestId;
140
- expect(getByTestId('node-view-wrapper')).toBeInTheDocument();
141
- });
142
- it('displays selected value', function () {
143
- var _render3 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], defaultProps)),
144
- container = _render3.container;
145
- var valueDiv = container.querySelector('div[style*="border"]');
146
- expect(valueDiv).toBeInTheDocument();
147
- });
148
- it('renders math inside the value control on mount', function () {
149
- var _render4 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], defaultProps)),
150
- container = _render4.container;
151
- var valueDiv = container.querySelector('div[style*="border"]');
152
- expect(_mathRendering.renderMath).toHaveBeenCalledWith(valueDiv);
153
- });
154
- it('re-renders math when the value changes', function () {
155
- var updatedNode = _objectSpread(_objectSpread({}, mockNode), {}, {
156
- attrs: _objectSpread(_objectSpread({}, mockNode.attrs), {}, {
157
- value: '<span>Updated math</span>'
158
- })
159
- });
160
- var _render5 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], defaultProps)),
161
- container = _render5.container,
162
- rerender = _render5.rerender;
163
- _mathRendering.renderMath.mockClear();
164
- rerender(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], (0, _extends2["default"])({}, defaultProps, {
165
- node: updatedNode
166
- })));
167
- var valueDiv = container.querySelector('div[style*="border"]');
168
- expect(_mathRendering.renderMath).toHaveBeenCalledWith(valueDiv);
169
- });
170
- it('uses 2px horizontal margin on the value control and no horizontal margin on the wrapper', function () {
171
- var _render6 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], defaultProps)),
172
- container = _render6.container,
173
- getByTestId = _render6.getByTestId;
174
- var valueDiv = container.querySelector('div[style*="border"]');
175
- expect(valueDiv).toHaveStyle({
176
- margin: '0 2px'
177
- });
178
- var wrapper = getByTestId('node-view-wrapper');
179
- expect(wrapper.getAttribute('style') || '').not.toMatch(/margin/);
180
- });
181
- it('renders chevron icon', function () {
182
- var _render7 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], defaultProps)),
183
- container = _render7.container;
184
- var chevron = container.querySelector('svg');
185
- expect(chevron).toBeInTheDocument();
186
- });
187
- it('shows toolbar when selected and only this node is selected', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
188
- var _render8, queryByTestId;
189
- return _regenerator["default"].wrap(function (_context) {
190
- while (1) switch (_context.prev = _context.next) {
191
- case 0:
192
- _render8 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], (0, _extends2["default"])({}, defaultProps, {
193
- selected: true
194
- }))), queryByTestId = _render8.queryByTestId;
195
- _context.next = 1;
196
- return (0, _react2.waitFor)(function () {
197
- // Toolbar is shown via portal
198
- expect(queryByTestId('inline-dropdown-toolbar')).toBeInTheDocument();
199
- });
200
- case 1:
201
- case "end":
202
- return _context.stop();
203
- }
204
- }, _callee);
205
- })));
206
- it('does not show toolbar when not selected', function () {
207
- var _render9 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], (0, _extends2["default"])({}, defaultProps, {
208
- selected: false
209
- }))),
210
- queryByTestId = _render9.queryByTestId;
211
- expect(queryByTestId('inline-dropdown-toolbar')).not.toBeInTheDocument();
212
- });
213
- it('shows toolbar on click', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
214
- var _render0, container, queryByTestId, dropdown;
215
- return _regenerator["default"].wrap(function (_context2) {
216
- while (1) switch (_context2.prev = _context2.next) {
217
- case 0:
218
- _render0 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], defaultProps)), container = _render0.container, queryByTestId = _render0.queryByTestId;
219
- dropdown = container.querySelector('div[style*="border"]');
220
- if (!dropdown) {
221
- _context2.next = 2;
222
- break;
223
- }
224
- _react2.fireEvent.click(dropdown);
225
- _context2.next = 1;
226
- return (0, _react2.waitFor)(function () {
227
- expect(queryByTestId('inline-dropdown-toolbar')).toBeInTheDocument();
228
- });
229
- case 1:
230
- _context2.next = 3;
231
- break;
232
- case 2:
233
- // If dropdown is not found, just verify the component rendered
234
- expect(container).toBeInTheDocument();
235
- case 3:
236
- case "end":
237
- return _context2.stop();
238
- }
239
- }, _callee2);
240
- })));
241
- it('has correct minimum dimensions', function () {
242
- var _render1 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], defaultProps)),
243
- container = _render1.container;
244
- var wrapper = container.querySelector('[data-testid="node-view-wrapper"]');
245
- expect(wrapper).toHaveStyle({
246
- height: '50px'
247
- });
248
- });
249
- it('has inline-flex display', function () {
250
- var _render10 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], defaultProps)),
251
- container = _render10.container;
252
- var wrapper = container.querySelector('[data-testid="node-view-wrapper"]');
253
- expect(wrapper).toHaveStyle({
254
- display: 'inline-flex'
255
- });
256
- });
257
- it('has cursor pointer style', function () {
258
- var _render11 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], defaultProps)),
259
- container = _render11.container;
260
- var wrapper = container.querySelector('[data-testid="node-view-wrapper"]');
261
- expect(wrapper).toHaveStyle({
262
- cursor: 'pointer'
263
- });
264
- });
265
- it('renders with empty value as nbsp', function () {
266
- var emptyNode = _objectSpread(_objectSpread({}, mockNode), {}, {
267
- attrs: _objectSpread(_objectSpread({}, mockNode.attrs), {}, {
268
- value: ''
269
- })
270
- });
271
- var _render12 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], (0, _extends2["default"])({}, defaultProps, {
272
- node: emptyNode
273
- }))),
274
- container = _render12.container;
275
- expect(container).toBeInTheDocument();
276
- });
277
- it('calls respAreaToolbar with correct params', function () {
278
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], defaultProps));
279
- expect(mockOptions.respAreaToolbar).toHaveBeenCalledWith([mockNode, 5], mockEditor, expect.any(Function));
280
- });
281
- it('closes toolbar on outside click', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
282
- var _render13, container, queryByTestId;
283
- return _regenerator["default"].wrap(function (_context3) {
284
- while (1) switch (_context3.prev = _context3.next) {
285
- case 0:
286
- _render13 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], (0, _extends2["default"])({}, defaultProps, {
287
- selected: true
288
- }))), container = _render13.container, queryByTestId = _render13.queryByTestId;
289
- _context3.next = 1;
290
- return (0, _react2.waitFor)(function () {
291
- _react2.fireEvent.mouseDown(document.body);
292
- });
293
- case 1:
294
- _context3.next = 2;
295
- return (0, _react2.waitFor)(function () {
296
- expect(queryByTestId('inline-dropdown-toolbar')).not.toBeInTheDocument();
297
- });
298
- case 2:
299
- case "end":
300
- return _context3.stop();
301
- }
302
- }, _callee3);
303
- })));
304
- it('calls close callback when toolbar closes on outside click', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4() {
305
- var onInlineDropdownToolbarClose, options, _render14, queryByTestId;
306
- return _regenerator["default"].wrap(function (_context4) {
307
- while (1) switch (_context4.prev = _context4.next) {
308
- case 0:
309
- onInlineDropdownToolbarClose = jest.fn();
310
- options = _objectSpread(_objectSpread({}, mockOptions), {}, {
311
- onInlineDropdownToolbarClose: onInlineDropdownToolbarClose
312
- });
313
- _render14 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], (0, _extends2["default"])({}, defaultProps, {
314
- options: options,
315
- selected: true
316
- }))), queryByTestId = _render14.queryByTestId;
317
- _context4.next = 1;
318
- return (0, _react2.waitFor)(function () {
319
- expect(queryByTestId('inline-dropdown-toolbar')).toBeInTheDocument();
320
- });
321
- case 1:
322
- _react2.fireEvent.mouseDown(document.body);
323
- _context4.next = 2;
324
- return (0, _react2.waitFor)(function () {
325
- expect(queryByTestId('inline-dropdown-toolbar')).not.toBeInTheDocument();
326
- });
327
- case 2:
328
- expect(onInlineDropdownToolbarClose).toHaveBeenCalledWith(mockEditor);
329
- case 3:
330
- case "end":
331
- return _context4.stop();
332
- }
333
- }, _callee4);
334
- })));
335
- it('uses the current node when closing on outside click after the node prop changes', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee5() {
336
- var onToolbarCloseRequest, options, updatedNode, _render15, queryByTestId, rerender;
337
- return _regenerator["default"].wrap(function (_context5) {
338
- while (1) switch (_context5.prev = _context5.next) {
339
- case 0:
340
- onToolbarCloseRequest = jest.fn(function (_tuple, _editor, onConfirm) {
341
- return onConfirm();
342
- });
343
- options = _objectSpread(_objectSpread({}, mockOptions), {}, {
344
- onToolbarCloseRequest: onToolbarCloseRequest
345
- });
346
- updatedNode = {
347
- attrs: {
348
- index: '1',
349
- value: 'Updated Option',
350
- error: false
351
- },
352
- nodeSize: 1
353
- };
354
- _render15 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], (0, _extends2["default"])({}, defaultProps, {
355
- options: options,
356
- selected: true
357
- }))), queryByTestId = _render15.queryByTestId, rerender = _render15.rerender;
358
- _context5.next = 1;
359
- return (0, _react2.waitFor)(function () {
360
- expect(queryByTestId('inline-dropdown-toolbar')).toBeInTheDocument();
361
- });
362
- case 1:
363
- rerender(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], (0, _extends2["default"])({}, defaultProps, {
364
- options: options,
365
- node: updatedNode,
366
- selected: true
367
- })));
368
- _react2.fireEvent.mouseDown(document.body);
369
- _context5.next = 2;
370
- return (0, _react2.waitFor)(function () {
371
- expect(onToolbarCloseRequest).toHaveBeenCalledWith([updatedNode, 5], expect.anything(), expect.any(Function), expect.any(Function));
372
- });
373
- case 2:
374
- case "end":
375
- return _context5.stop();
376
- }
377
- }, _callee5);
378
- })));
379
- it('respects hold state for the current node after the node prop changes', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee6() {
380
- var updatedNode, _render16, queryByTestId, rerender;
381
- return _regenerator["default"].wrap(function (_context6) {
382
- while (1) switch (_context6.prev = _context6.next) {
383
- case 0:
384
- updatedNode = {
385
- attrs: {
386
- index: '1',
387
- value: 'Updated Option',
388
- error: false
389
- },
390
- nodeSize: 1
391
- };
392
- mockEditor._holdInlineDropdownToolbarIndex = '1';
393
- _render16 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], (0, _extends2["default"])({}, defaultProps, {
394
- selected: true
395
- }))), queryByTestId = _render16.queryByTestId, rerender = _render16.rerender;
396
- _context6.next = 1;
397
- return (0, _react2.waitFor)(function () {
398
- expect(queryByTestId('inline-dropdown-toolbar')).toBeInTheDocument();
399
- });
400
- case 1:
401
- rerender(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], (0, _extends2["default"])({}, defaultProps, {
402
- node: updatedNode,
403
- selected: true
404
- })));
405
- _react2.fireEvent.mouseDown(document.body);
406
- _context6.next = 2;
407
- return (0, _react2.waitFor)(function () {
408
- expect(queryByTestId('inline-dropdown-toolbar')).toBeInTheDocument();
409
- });
410
- case 2:
411
- case "end":
412
- return _context6.stop();
413
- }
414
- }, _callee6);
415
- })));
416
- it('rebinds the outside-click listener when the node prop changes while the toolbar is open', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee7() {
417
- var addSpy, removeSpy, updatedNode, _render17, rerender, removeCallsBeforeRerender;
418
- return _regenerator["default"].wrap(function (_context7) {
419
- while (1) switch (_context7.prev = _context7.next) {
420
- case 0:
421
- addSpy = jest.spyOn(document, 'addEventListener');
422
- removeSpy = jest.spyOn(document, 'removeEventListener');
423
- updatedNode = _objectSpread(_objectSpread({}, mockNode), {}, {
424
- attrs: _objectSpread(_objectSpread({}, mockNode.attrs), {}, {
425
- value: 'Updated Option'
426
- })
427
- });
428
- _render17 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], (0, _extends2["default"])({}, defaultProps, {
429
- selected: true
430
- }))), rerender = _render17.rerender;
431
- _context7.next = 1;
432
- return (0, _react2.waitFor)(function () {
433
- expect(addSpy).toHaveBeenCalledWith('mousedown', expect.any(Function));
434
- });
435
- case 1:
436
- removeCallsBeforeRerender = removeSpy.mock.calls.filter(function (_ref9) {
437
- var _ref0 = (0, _slicedToArray2["default"])(_ref9, 1),
438
- type = _ref0[0];
439
- return type === 'mousedown';
440
- }).length;
441
- rerender(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], (0, _extends2["default"])({}, defaultProps, {
442
- node: updatedNode,
443
- selected: true
444
- })));
445
- _context7.next = 2;
446
- return (0, _react2.waitFor)(function () {
447
- var removeCallsAfterRerender = removeSpy.mock.calls.filter(function (_ref1) {
448
- var _ref10 = (0, _slicedToArray2["default"])(_ref1, 1),
449
- type = _ref10[0];
450
- return type === 'mousedown';
451
- }).length;
452
- expect(removeCallsAfterRerender).toBeGreaterThan(removeCallsBeforeRerender);
453
- expect(addSpy).toHaveBeenCalledWith('mousedown', expect.any(Function));
454
- });
455
- case 2:
456
- addSpy.mockRestore();
457
- removeSpy.mockRestore();
458
- case 3:
459
- case "end":
460
- return _context7.stop();
461
- }
462
- }, _callee7);
463
- })));
464
- it('has correct border styling', function () {
465
- var _render18 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], defaultProps)),
466
- container = _render18.container;
467
- var dropdownDiv = container.querySelector('div[style*="border"]');
468
- expect(dropdownDiv).toHaveStyle({
469
- border: '1px solid #C0C3CF'
470
- });
471
- });
472
- it('has correct min width', function () {
473
- var _render19 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], defaultProps)),
474
- container = _render19.container;
475
- var dropdownDiv = container.querySelector('div[style*="border"]');
476
- expect(dropdownDiv).toHaveStyle({
477
- minWidth: '178px'
478
- });
479
- });
480
- it('positions chevron correctly', function () {
481
- var _render20 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], defaultProps)),
482
- container = _render20.container;
483
- var chevron = container.querySelector('svg');
484
- // Chevron styling is applied inline, just verify it rendered
485
- if (chevron) {
486
- expect(chevron).toBeInTheDocument();
487
- } else {
488
- expect(container).toBeInTheDocument();
489
- }
490
- });
491
- it('has ellipsis for overflow text', function () {
492
- var _render21 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], defaultProps)),
493
- container = _render21.container;
494
- var textContainer = container.querySelector('div[style*="overflow"]');
495
- expect(textContainer).toHaveStyle({
496
- textOverflow: 'ellipsis',
497
- whiteSpace: 'nowrap'
498
- });
499
- });
500
- it('portals toolbar into editor container when _tiptapContainerEl is set', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee8() {
501
- var containerEl, editor;
502
- return _regenerator["default"].wrap(function (_context8) {
503
- while (1) switch (_context8.prev = _context8.next) {
504
- case 0:
505
- containerEl = document.createElement('div');
506
- editor = buildMockEditor({
507
- _tiptapContainerEl: containerEl
508
- });
509
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], (0, _extends2["default"])({}, defaultProps, {
510
- editor: editor,
511
- selected: true
512
- })));
513
- _context8.next = 1;
514
- return (0, _react2.waitFor)(function () {
515
- expect(mockCreatePortal).toHaveBeenCalled();
516
- });
517
- case 1:
518
- expect(mockCreatePortal.mock.calls[0][1]).toBe(containerEl);
519
- case 2:
520
- case "end":
521
- return _context8.stop();
522
- }
523
- }, _callee8);
524
- })));
525
- it('portals toolbar into document.body when _tiptapContainerEl is missing', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee9() {
526
- var editor;
527
- return _regenerator["default"].wrap(function (_context9) {
528
- while (1) switch (_context9.prev = _context9.next) {
529
- case 0:
530
- editor = buildMockEditor({
531
- _tiptapContainerEl: undefined
532
- });
533
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], (0, _extends2["default"])({}, defaultProps, {
534
- editor: editor,
535
- selected: true
536
- })));
537
- _context9.next = 1;
538
- return (0, _react2.waitFor)(function () {
539
- expect(mockCreatePortal).toHaveBeenCalled();
540
- });
541
- case 1:
542
- expect(mockCreatePortal.mock.calls[0][1]).toBe(document.body);
543
- case 2:
544
- case "end":
545
- return _context9.stop();
546
- }
547
- }, _callee9);
548
- })));
549
- it('passes editorCallback to InlineDropdownToolbar', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee0() {
550
- var mockToolbarComponent, mockOptionsWithCallback, _render22, queryByTestId;
551
- return _regenerator["default"].wrap(function (_context0) {
552
- while (1) switch (_context0.prev = _context0.next) {
553
- case 0:
554
- mockToolbarComponent = jest.fn(function (_ref14) {
555
- var editorCallback = _ref14.editorCallback;
556
- editorCallback === null || editorCallback === void 0 || editorCallback({
557
- instanceId: 'test-instance'
558
- });
559
- return /*#__PURE__*/_react["default"].createElement("div", {
560
- "data-testid": "inline-dropdown-toolbar"
561
- }, "Toolbar");
562
- });
563
- mockOptionsWithCallback = {
564
- respAreaToolbar: jest.fn(function () {
565
- return mockToolbarComponent;
566
- })
567
- };
568
- _render22 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], (0, _extends2["default"])({}, defaultProps, {
569
- options: mockOptionsWithCallback,
570
- selected: true
571
- }))), queryByTestId = _render22.queryByTestId;
572
- _context0.next = 1;
573
- return (0, _react2.waitFor)(function () {
574
- expect(queryByTestId('inline-dropdown-toolbar')).toBeInTheDocument();
575
- });
576
- case 1:
577
- case "end":
578
- return _context0.stop();
579
- }
580
- }, _callee0);
581
- })));
582
- it('stores toolbar editor instance in ref when editorCallback is called', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee1() {
583
- var capturedCallback, mockToolbarComponent, mockOptionsWithCallback, _render23, queryByTestId;
584
- return _regenerator["default"].wrap(function (_context1) {
585
- while (1) switch (_context1.prev = _context1.next) {
586
- case 0:
587
- mockToolbarComponent = function mockToolbarComponent(_ref16) {
588
- var editorCallback = _ref16.editorCallback;
589
- capturedCallback = editorCallback;
590
- return /*#__PURE__*/_react["default"].createElement("div", {
591
- "data-testid": "inline-dropdown-toolbar"
592
- }, "Toolbar");
593
- };
594
- mockOptionsWithCallback = {
595
- respAreaToolbar: jest.fn(function () {
596
- return mockToolbarComponent;
597
- })
598
- };
599
- _render23 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], (0, _extends2["default"])({}, defaultProps, {
600
- options: mockOptionsWithCallback,
601
- selected: true
602
- }))), queryByTestId = _render23.queryByTestId;
603
- _context1.next = 1;
604
- return (0, _react2.waitFor)(function () {
605
- expect(queryByTestId('inline-dropdown-toolbar')).toBeInTheDocument();
606
- });
607
- case 1:
608
- // Verify callback exists
609
- expect(capturedCallback).toBeDefined();
610
- case 2:
611
- case "end":
612
- return _context1.stop();
613
- }
614
- }, _callee1);
615
- })));
616
- it('handles click outside logic with data-toolbar-for attribute', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee10() {
617
- var editorWithInstanceId, capturedCallback, mockToolbarComponent, mockOptionsWithCallback, _render24, container, queryByTestId, otherToolbar;
618
- return _regenerator["default"].wrap(function (_context10) {
619
- while (1) switch (_context10.prev = _context10.next) {
620
- case 0:
621
- editorWithInstanceId = _objectSpread(_objectSpread({}, mockEditor), {}, {
622
- instanceId: 'editor-123',
623
- _toolbarOpened: false
624
- }); // Mock the toolbar callback to set the toolbar editor instance
625
- mockToolbarComponent = function mockToolbarComponent(_ref18) {
626
- var editorCallback = _ref18.editorCallback;
627
- _react["default"].useEffect(function () {
628
- capturedCallback = editorCallback;
629
- if (editorCallback) {
630
- editorCallback({
631
- instanceId: 'editor-123'
632
- });
633
- }
634
- }, [editorCallback]);
635
- return /*#__PURE__*/_react["default"].createElement("div", {
636
- "data-testid": "inline-dropdown-toolbar"
637
- }, "Toolbar");
638
- };
639
- mockOptionsWithCallback = {
640
- respAreaToolbar: jest.fn(function () {
641
- return mockToolbarComponent;
642
- })
643
- };
644
- _render24 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], (0, _extends2["default"])({}, defaultProps, {
645
- editor: editorWithInstanceId,
646
- options: mockOptionsWithCallback,
647
- selected: true
648
- }))), container = _render24.container, queryByTestId = _render24.queryByTestId;
649
- _context10.next = 1;
650
- return (0, _react2.waitFor)(function () {
651
- expect(queryByTestId('inline-dropdown-toolbar')).toBeInTheDocument();
652
- });
653
- case 1:
654
- // Create an element with data-toolbar-for attribute
655
- otherToolbar = document.createElement('div');
656
- otherToolbar.setAttribute('data-toolbar-for', 'editor-456');
657
- document.body.appendChild(otherToolbar);
658
- _context10.next = 2;
659
- return (0, _react2.waitFor)(function () {
660
- _react2.fireEvent.mouseDown(otherToolbar);
661
- });
662
- case 2:
663
- // Cleanup
664
- document.body.removeChild(otherToolbar);
665
- expect(container).toBeInTheDocument();
666
- case 3:
667
- case "end":
668
- return _context10.stop();
669
- }
670
- }, _callee10);
671
- })));
672
- it('does not close when clicking inside same editor toolbar', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee11() {
673
- var editorWithInstanceId, toolbarEditorInstance, mockToolbarComponent, mockOptionsWithCallback;
674
- return _regenerator["default"].wrap(function (_context11) {
675
- while (1) switch (_context11.prev = _context11.next) {
676
- case 0:
677
- editorWithInstanceId = _objectSpread(_objectSpread({}, mockEditor), {}, {
678
- instanceId: 'editor-123',
679
- _toolbarOpened: false
680
- });
681
- mockToolbarComponent = function mockToolbarComponent(_ref20) {
682
- var editorCallback = _ref20.editorCallback;
683
- _react["default"].useEffect(function () {
684
- if (editorCallback) {
685
- editorCallback({
686
- instanceId: 'editor-123'
687
- });
688
- toolbarEditorInstance = {
689
- instanceId: 'editor-123'
690
- };
691
- }
692
- }, [editorCallback]);
693
- return /*#__PURE__*/_react["default"].createElement("div", {
694
- "data-testid": "inline-dropdown-toolbar"
695
- }, "Toolbar");
696
- };
697
- mockOptionsWithCallback = {
698
- respAreaToolbar: jest.fn(function () {
699
- return mockToolbarComponent;
700
- })
701
- };
702
- (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], (0, _extends2["default"])({}, defaultProps, {
703
- editor: editorWithInstanceId,
704
- options: mockOptionsWithCallback,
705
- selected: true
706
- })));
707
- _context11.next = 1;
708
- return (0, _react2.waitFor)(function () {
709
- expect(mockOptionsWithCallback.respAreaToolbar).toHaveBeenCalled();
710
- });
711
- case 1:
712
- case "end":
713
- return _context11.stop();
714
- }
715
- }, _callee11);
716
- })));
717
- it('checks editor._toolbarOpened in click outside handler', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee12() {
718
- var editorWithToolbarOpened, _render25, queryByTestId;
719
- return _regenerator["default"].wrap(function (_context12) {
720
- while (1) switch (_context12.prev = _context12.next) {
721
- case 0:
722
- editorWithToolbarOpened = buildMockEditor({
723
- _toolbarOpened: true
724
- });
725
- _render25 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], (0, _extends2["default"])({}, defaultProps, {
726
- editor: editorWithToolbarOpened,
727
- selected: true
728
- }))), queryByTestId = _render25.queryByTestId;
729
- _context12.next = 1;
730
- return (0, _react2.waitFor)(function () {
731
- expect(queryByTestId('inline-dropdown-toolbar')).toBeInTheDocument();
732
- });
733
- case 1:
734
- // When _toolbarOpened is true, clicking outside should not close
735
- _react2.fireEvent.mouseDown(document.body);
736
-
737
- // Toolbar should still be visible
738
- expect(queryByTestId('inline-dropdown-toolbar')).toBeInTheDocument();
739
- case 2:
740
- case "end":
741
- return _context12.stop();
742
- }
743
- }, _callee12);
744
- })));
745
- it('does not close toolbar when clicking the page scrollbar (documentElement)', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee13() {
746
- var _render26, queryByTestId;
747
- return _regenerator["default"].wrap(function (_context13) {
748
- while (1) switch (_context13.prev = _context13.next) {
749
- case 0:
750
- _render26 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], (0, _extends2["default"])({}, defaultProps, {
751
- selected: true
752
- }))), queryByTestId = _render26.queryByTestId;
753
- _context13.next = 1;
754
- return (0, _react2.waitFor)(function () {
755
- expect(queryByTestId('inline-dropdown-toolbar')).toBeInTheDocument();
756
- });
757
- case 1:
758
- _react2.fireEvent.mouseDown(document.documentElement);
759
- _context13.next = 2;
760
- return (0, _react2.waitFor)(function () {
761
- expect(queryByTestId('inline-dropdown-toolbar')).toBeInTheDocument();
762
- });
763
- case 2:
764
- case "end":
765
- return _context13.stop();
766
- }
767
- }, _callee13);
768
- })));
769
- it('renders delete control on portaled custom toolbar when container el is set', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee14() {
770
- var _render27, findByLabelText, _t;
771
- return _regenerator["default"].wrap(function (_context14) {
772
- while (1) switch (_context14.prev = _context14.next) {
773
- case 0:
774
- _render27 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], (0, _extends2["default"])({}, defaultProps, {
775
- selected: true
776
- }))), findByLabelText = _render27.findByLabelText;
777
- _t = expect;
778
- _context14.next = 1;
779
- return findByLabelText('Delete');
780
- case 1:
781
- _t(_context14.sent).toBeInTheDocument();
782
- case 2:
783
- case "end":
784
- return _context14.stop();
785
- }
786
- }, _callee14);
787
- })));
788
- it('does not render portaled delete control when _tiptapContainerEl is missing', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee15() {
789
- var editor, _render28, queryByLabelText, findByTestId, _t2;
790
- return _regenerator["default"].wrap(function (_context15) {
791
- while (1) switch (_context15.prev = _context15.next) {
792
- case 0:
793
- editor = buildMockEditor({
794
- _tiptapContainerEl: undefined
795
- });
796
- _render28 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], (0, _extends2["default"])({}, defaultProps, {
797
- editor: editor,
798
- selected: true
799
- }))), queryByLabelText = _render28.queryByLabelText, findByTestId = _render28.findByTestId;
800
- _t2 = expect;
801
- _context15.next = 1;
802
- return findByTestId('inline-dropdown-toolbar');
803
- case 1:
804
- _t2(_context15.sent).toBeInTheDocument();
805
- expect(queryByLabelText('Delete')).not.toBeInTheDocument();
806
- case 2:
807
- case "end":
808
- return _context15.stop();
809
- }
810
- }, _callee15);
811
- })));
812
- it('delete clears toolbar flag, removes node range, dispatches, and focuses', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee16() {
813
- var _render29, findByLabelText, _t3;
814
- return _regenerator["default"].wrap(function (_context16) {
815
- while (1) switch (_context16.prev = _context16.next) {
816
- case 0:
817
- mockEditor._toolbarOpened = true;
818
- _render29 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], (0, _extends2["default"])({}, defaultProps, {
819
- selected: true
820
- }))), findByLabelText = _render29.findByLabelText;
821
- _t3 = _react2.fireEvent;
822
- _context16.next = 1;
823
- return findByLabelText('Delete');
824
- case 1:
825
- _t3.mouseDown.call(_t3, _context16.sent);
826
- expect(mockEditor.state.tr["delete"]).toHaveBeenCalledWith(5, 6);
827
- expect(mockEditor.view.dispatch).toHaveBeenCalledTimes(2);
828
- expect(mockEditor.view.dispatch).toHaveBeenNthCalledWith(1, mockEditor.state.tr);
829
- expect(mockEditor.view.dispatch).toHaveBeenNthCalledWith(2, mockEditor.state.tr);
830
- expect(mockEditor._toolbarOpened).toBe(false);
831
- expect(mockEditor.commands.focus).toHaveBeenCalled();
832
- case 2:
833
- case "end":
834
- return _context16.stop();
835
- }
836
- }, _callee16);
837
- })));
838
- });
839
- //# sourceMappingURL=InlineDropdown.test.js.map