@pie-lib/editable-html-tip-tap 2.1.10 → 2.2.0-beta

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 (114) hide show
  1. package/CHANGELOG.md +0 -75
  2. package/lib/__tests__/EditableHtml.test.js +831 -0
  3. package/lib/__tests__/EditableHtml.test.js.map +1 -0
  4. package/lib/__tests__/constants.test.js +21 -0
  5. package/lib/__tests__/constants.test.js.map +1 -0
  6. package/lib/__tests__/div-to-paragraph-conversion.test.js +213 -0
  7. package/lib/__tests__/div-to-paragraph-conversion.test.js.map +1 -0
  8. package/lib/__tests__/extensions.test.js +209 -0
  9. package/lib/__tests__/extensions.test.js.map +1 -0
  10. package/lib/__tests__/index.test.js +250 -0
  11. package/lib/__tests__/index.test.js.map +1 -0
  12. package/lib/__tests__/size-utils.test.js +57 -0
  13. package/lib/__tests__/size-utils.test.js.map +1 -0
  14. package/lib/__tests__/theme.test.js +17 -0
  15. package/lib/__tests__/theme.test.js.map +1 -0
  16. package/lib/components/EditableHtml.js +4 -2
  17. package/lib/components/EditableHtml.js.map +1 -1
  18. package/lib/components/__tests__/AltDialog.test.js +201 -0
  19. package/lib/components/__tests__/AltDialog.test.js.map +1 -0
  20. package/lib/components/__tests__/CharacterPicker.test.js +455 -0
  21. package/lib/components/__tests__/CharacterPicker.test.js.map +1 -0
  22. package/lib/components/__tests__/CssIcon.test.js +58 -0
  23. package/lib/components/__tests__/CssIcon.test.js.map +1 -0
  24. package/lib/components/__tests__/DragInTheBlank.test.js +295 -0
  25. package/lib/components/__tests__/DragInTheBlank.test.js.map +1 -0
  26. package/lib/components/__tests__/ExplicitConstructedResponse.test.js +345 -0
  27. package/lib/components/__tests__/ExplicitConstructedResponse.test.js.map +1 -0
  28. package/lib/components/__tests__/ImageToolbar.test.js +185 -0
  29. package/lib/components/__tests__/ImageToolbar.test.js.map +1 -0
  30. package/lib/components/__tests__/InlineDropdown.test.js +839 -0
  31. package/lib/components/__tests__/InlineDropdown.test.js.map +1 -0
  32. package/lib/components/__tests__/InsertImageHandler.test.js +171 -0
  33. package/lib/components/__tests__/InsertImageHandler.test.js.map +1 -0
  34. package/lib/components/__tests__/MediaDialog.test.js +433 -0
  35. package/lib/components/__tests__/MediaDialog.test.js.map +1 -0
  36. package/lib/components/__tests__/MediaToolbar.test.js +126 -0
  37. package/lib/components/__tests__/MediaToolbar.test.js.map +1 -0
  38. package/lib/components/__tests__/MediaWrapper.test.js +96 -0
  39. package/lib/components/__tests__/MediaWrapper.test.js.map +1 -0
  40. package/lib/components/__tests__/MenuBar.test.js +502 -0
  41. package/lib/components/__tests__/MenuBar.test.js.map +1 -0
  42. package/lib/components/__tests__/RespArea.test.js +171 -0
  43. package/lib/components/__tests__/RespArea.test.js.map +1 -0
  44. package/lib/components/__tests__/TableIcons.test.js +153 -0
  45. package/lib/components/__tests__/TableIcons.test.js.map +1 -0
  46. package/lib/components/__tests__/TextAlign.test.js +209 -0
  47. package/lib/components/__tests__/TextAlign.test.js.map +1 -0
  48. package/lib/components/__tests__/TiptapContainer.test.js +196 -0
  49. package/lib/components/__tests__/TiptapContainer.test.js.map +1 -0
  50. package/lib/components/__tests__/characterUtils.test.js +178 -0
  51. package/lib/components/__tests__/characterUtils.test.js.map +1 -0
  52. package/lib/components/__tests__/choice.test.js +213 -0
  53. package/lib/components/__tests__/choice.test.js.map +1 -0
  54. package/lib/components/__tests__/custom-popper.test.js +108 -0
  55. package/lib/components/__tests__/custom-popper.test.js.map +1 -0
  56. package/lib/components/__tests__/done-button.test.js +72 -0
  57. package/lib/components/__tests__/done-button.test.js.map +1 -0
  58. package/lib/components/__tests__/toolbar-buttons.test.js +277 -0
  59. package/lib/components/__tests__/toolbar-buttons.test.js.map +1 -0
  60. package/lib/components/respArea/DragInTheBlank/__tests__/choice.test.js +90 -0
  61. package/lib/components/respArea/DragInTheBlank/__tests__/choice.test.js.map +1 -0
  62. package/lib/components/respArea/DragInTheBlank/choice.js +3 -0
  63. package/lib/components/respArea/DragInTheBlank/choice.js.map +1 -1
  64. package/lib/components/respArea/MathTemplated.js +2 -2
  65. package/lib/components/respArea/MathTemplated.js.map +1 -1
  66. package/lib/components/respArea/__tests__/MathTemplated.test.js +217 -0
  67. package/lib/components/respArea/__tests__/MathTemplated.test.js.map +1 -0
  68. package/lib/extensions/__tests__/css.test.js +214 -0
  69. package/lib/extensions/__tests__/css.test.js.map +1 -0
  70. package/lib/extensions/__tests__/custom-toolbar-wrapper.test.js +175 -0
  71. package/lib/extensions/__tests__/custom-toolbar-wrapper.test.js.map +1 -0
  72. package/lib/extensions/__tests__/divNode.test.js +108 -0
  73. package/lib/extensions/__tests__/divNode.test.js.map +1 -0
  74. package/lib/extensions/__tests__/ensure-empty-root-div.test.js +50 -0
  75. package/lib/extensions/__tests__/ensure-empty-root-div.test.js.map +1 -0
  76. package/lib/extensions/__tests__/ensure-list-item-content-is-div.test.js +60 -0
  77. package/lib/extensions/__tests__/ensure-list-item-content-is-div.test.js.map +1 -0
  78. package/lib/extensions/__tests__/extended-list-item.test.js +13 -0
  79. package/lib/extensions/__tests__/extended-list-item.test.js.map +1 -0
  80. package/lib/extensions/__tests__/extended-table-cell.test.js +15 -0
  81. package/lib/extensions/__tests__/extended-table-cell.test.js.map +1 -0
  82. package/lib/extensions/__tests__/extended-table.test.js +200 -0
  83. package/lib/extensions/__tests__/extended-table.test.js.map +1 -0
  84. package/lib/extensions/__tests__/image-component.test.js +432 -0
  85. package/lib/extensions/__tests__/image-component.test.js.map +1 -0
  86. package/lib/extensions/__tests__/image.test.js +313 -0
  87. package/lib/extensions/__tests__/image.test.js.map +1 -0
  88. package/lib/extensions/__tests__/math.test.js +1399 -0
  89. package/lib/extensions/__tests__/math.test.js.map +1 -0
  90. package/lib/extensions/__tests__/media-node-view.test.js +307 -0
  91. package/lib/extensions/__tests__/media-node-view.test.js.map +1 -0
  92. package/lib/extensions/__tests__/media.test.js +292 -0
  93. package/lib/extensions/__tests__/media.test.js.map +1 -0
  94. package/lib/extensions/__tests__/responseArea.test.js +736 -0
  95. package/lib/extensions/__tests__/responseArea.test.js.map +1 -0
  96. package/lib/extensions/image-component.js +9 -6
  97. package/lib/extensions/image-component.js.map +1 -1
  98. package/lib/extensions/responseArea.js +7 -1
  99. package/lib/extensions/responseArea.js.map +1 -1
  100. package/lib/utils/__tests__/helper.test.js +107 -0
  101. package/lib/utils/__tests__/helper.test.js.map +1 -0
  102. package/lib/utils/__tests__/toolbar.test.js +38 -0
  103. package/lib/utils/__tests__/toolbar.test.js.map +1 -0
  104. package/package.json +7 -7
  105. package/src/components/EditableHtml.jsx +5 -3
  106. package/src/components/respArea/DragInTheBlank/__tests__/choice.test.jsx +72 -0
  107. package/src/components/respArea/DragInTheBlank/choice.jsx +3 -0
  108. package/src/components/respArea/MathTemplated.jsx +1 -1
  109. package/src/components/respArea/__tests__/MathTemplated.test.jsx +1 -1
  110. package/src/extensions/__tests__/image-component.test.jsx +1 -0
  111. package/src/extensions/__tests__/responseArea.test.js +57 -3
  112. package/src/extensions/image-component.jsx +8 -6
  113. package/src/extensions/responseArea.js +7 -1
  114. package/LICENSE.md +0 -5
@@ -0,0 +1,345 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
5
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
6
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
7
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
8
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _react2 = require("@testing-library/react");
11
+ var _ExplicitConstructedResponse = _interopRequireDefault(require("../respArea/ExplicitConstructedResponse"));
12
+ var _excluded = ["children"];
13
+ 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; }
14
+ 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; }
15
+ jest.mock('@tiptap/react', function () {
16
+ return {
17
+ NodeViewWrapper: function NodeViewWrapper(_ref) {
18
+ var children = _ref.children,
19
+ props = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
20
+ return /*#__PURE__*/_react["default"].createElement("div", (0, _extends2["default"])({
21
+ "data-testid": "node-view-wrapper"
22
+ }, props), children);
23
+ }
24
+ };
25
+ });
26
+ jest.mock('react-dom', function () {
27
+ return _objectSpread(_objectSpread({}, jest.requireActual('react-dom')), {}, {
28
+ createPortal: function createPortal(node) {
29
+ return node;
30
+ }
31
+ });
32
+ });
33
+ describe('ExplicitConstructedResponse', function () {
34
+ var buildMockEditor = function buildMockEditor() {
35
+ var overrides = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
36
+ var mockTr = {
37
+ "delete": jest.fn(),
38
+ setMeta: jest.fn(function setMeta() {
39
+ return mockTr;
40
+ })
41
+ };
42
+ return _objectSpread({
43
+ state: {
44
+ selection: {
45
+ from: 0,
46
+ to: 1
47
+ },
48
+ tr: mockTr
49
+ },
50
+ view: {
51
+ dispatch: jest.fn()
52
+ },
53
+ commands: {
54
+ focus: jest.fn()
55
+ },
56
+ _tiptapContainerEl: document.createElement('div')
57
+ }, overrides);
58
+ };
59
+ var mockEditor;
60
+ var mockNode = {
61
+ attrs: {
62
+ index: '0',
63
+ value: 'Test value'
64
+ },
65
+ nodeSize: 1
66
+ };
67
+ var mockOptions = {
68
+ respAreaToolbar: jest.fn(function () {
69
+ return function () {
70
+ return /*#__PURE__*/_react["default"].createElement("div", {
71
+ "data-testid": "toolbar"
72
+ }, "Toolbar");
73
+ };
74
+ }),
75
+ error: jest.fn(function () {
76
+ return {};
77
+ })
78
+ };
79
+ var defaultProps = {
80
+ editor: mockEditor,
81
+ node: mockNode,
82
+ getPos: function getPos() {
83
+ return 5;
84
+ },
85
+ options: mockOptions,
86
+ selected: false
87
+ };
88
+ beforeEach(function () {
89
+ jest.clearAllMocks();
90
+ mockEditor = buildMockEditor();
91
+ defaultProps.editor = mockEditor;
92
+ });
93
+ it('renders without crashing', function () {
94
+ var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ExplicitConstructedResponse["default"], defaultProps)),
95
+ container = _render.container;
96
+ expect(container).toBeInTheDocument();
97
+ });
98
+ it('renders NodeViewWrapper', function () {
99
+ var _render2 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ExplicitConstructedResponse["default"], defaultProps)),
100
+ getByTestId = _render2.getByTestId;
101
+ expect(getByTestId('node-view-wrapper')).toBeInTheDocument();
102
+ });
103
+ it('displays node value', function () {
104
+ var _render3 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ExplicitConstructedResponse["default"], defaultProps)),
105
+ container = _render3.container;
106
+ var valueDiv = container.querySelector('div[style*="padding"]');
107
+ expect(valueDiv).toBeInTheDocument();
108
+ });
109
+ it('applies correct border when no error', function () {
110
+ var _render4 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ExplicitConstructedResponse["default"], defaultProps)),
111
+ container = _render4.container;
112
+ var contentDiv = container.querySelector('div[style*="border"]');
113
+ expect(contentDiv).toHaveStyle({
114
+ border: '1px solid #C0C3CF'
115
+ });
116
+ });
117
+ it('applies red border when error exists', function () {
118
+ var errorFn = jest.fn(function () {
119
+ return {
120
+ 0: ['error']
121
+ };
122
+ });
123
+ var options = _objectSpread(_objectSpread({}, mockOptions), {}, {
124
+ error: errorFn
125
+ });
126
+ var _render5 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ExplicitConstructedResponse["default"], (0, _extends2["default"])({}, defaultProps, {
127
+ options: options
128
+ }))),
129
+ container = _render5.container;
130
+ var contentDiv = container.querySelector('div[style*="border"]');
131
+ expect(contentDiv).toHaveStyle({
132
+ border: '1px solid red'
133
+ });
134
+ });
135
+ it('shows toolbar when selected and only this node is selected', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
136
+ var _render6, container;
137
+ return _regenerator["default"].wrap(function (_context) {
138
+ while (1) switch (_context.prev = _context.next) {
139
+ case 0:
140
+ _render6 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ExplicitConstructedResponse["default"], (0, _extends2["default"])({}, defaultProps, {
141
+ selected: true
142
+ }))), container = _render6.container;
143
+ _context.next = 1;
144
+ return (0, _react2.waitFor)(function () {
145
+ var toolbar = container.querySelector('[data-testid="toolbar"]');
146
+ // Toolbar might be hidden initially based on selection logic
147
+ expect(container).toBeInTheDocument();
148
+ });
149
+ case 1:
150
+ case "end":
151
+ return _context.stop();
152
+ }
153
+ }, _callee);
154
+ })));
155
+ it('does not show toolbar when not selected', function () {
156
+ var _render7 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ExplicitConstructedResponse["default"], (0, _extends2["default"])({}, defaultProps, {
157
+ selected: false
158
+ }))),
159
+ queryByTestId = _render7.queryByTestId;
160
+ expect(queryByTestId('toolbar')).not.toBeInTheDocument();
161
+ });
162
+ it('shows toolbar on click', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
163
+ var _render8, container, queryByTestId, clickableDiv;
164
+ return _regenerator["default"].wrap(function (_context2) {
165
+ while (1) switch (_context2.prev = _context2.next) {
166
+ case 0:
167
+ _render8 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ExplicitConstructedResponse["default"], defaultProps)), container = _render8.container, queryByTestId = _render8.queryByTestId;
168
+ clickableDiv = container.querySelector('div[style*="border"]');
169
+ _react2.fireEvent.click(clickableDiv);
170
+ _context2.next = 1;
171
+ return (0, _react2.waitFor)(function () {
172
+ expect(queryByTestId('toolbar')).toBeInTheDocument();
173
+ });
174
+ case 1:
175
+ case "end":
176
+ return _context2.stop();
177
+ }
178
+ }, _callee2);
179
+ })));
180
+ it('hides content when toolbar is shown', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
181
+ var _render9, container;
182
+ return _regenerator["default"].wrap(function (_context3) {
183
+ while (1) switch (_context3.prev = _context3.next) {
184
+ case 0:
185
+ _render9 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ExplicitConstructedResponse["default"], (0, _extends2["default"])({}, defaultProps, {
186
+ selected: true
187
+ }))), container = _render9.container;
188
+ _context3.next = 1;
189
+ return (0, _react2.waitFor)(function () {
190
+ // Check visibility state
191
+ expect(container).toBeInTheDocument();
192
+ });
193
+ case 1:
194
+ case "end":
195
+ return _context3.stop();
196
+ }
197
+ }, _callee3);
198
+ })));
199
+ it('has correct minimum dimensions', function () {
200
+ var _render0 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ExplicitConstructedResponse["default"], defaultProps)),
201
+ container = _render0.container;
202
+ var wrapper = container.querySelector('[data-testid="node-view-wrapper"]');
203
+ expect(wrapper).toHaveStyle({
204
+ minHeight: '55px'
205
+ });
206
+ });
207
+ it('renders with empty value as nbsp', function () {
208
+ var emptyNode = _objectSpread(_objectSpread({}, mockNode), {}, {
209
+ attrs: _objectSpread(_objectSpread({}, mockNode.attrs), {}, {
210
+ value: ''
211
+ })
212
+ });
213
+ var _render1 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ExplicitConstructedResponse["default"], (0, _extends2["default"])({}, defaultProps, {
214
+ node: emptyNode
215
+ }))),
216
+ container = _render1.container;
217
+ expect(container).toBeInTheDocument();
218
+ });
219
+ it('calls respAreaToolbar with correct params', function () {
220
+ (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ExplicitConstructedResponse["default"], defaultProps));
221
+ expect(mockOptions.respAreaToolbar).toHaveBeenCalledWith([mockNode, 5], mockEditor, expect.any(Function));
222
+ });
223
+ it('has cursor pointer style', function () {
224
+ var _render10 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ExplicitConstructedResponse["default"], defaultProps)),
225
+ container = _render10.container;
226
+ var wrapper = container.querySelector('[data-testid="node-view-wrapper"]');
227
+ expect(wrapper).toHaveStyle({
228
+ cursor: 'pointer'
229
+ });
230
+ });
231
+ it('has inline-flex display', function () {
232
+ var _render11 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ExplicitConstructedResponse["default"], defaultProps)),
233
+ container = _render11.container;
234
+ var wrapper = container.querySelector('[data-testid="node-view-wrapper"]');
235
+ expect(wrapper).toHaveStyle({
236
+ display: 'inline-flex'
237
+ });
238
+ });
239
+ it('closes toolbar on outside click', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4() {
240
+ var _render12, container;
241
+ return _regenerator["default"].wrap(function (_context4) {
242
+ while (1) switch (_context4.prev = _context4.next) {
243
+ case 0:
244
+ _render12 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ExplicitConstructedResponse["default"], (0, _extends2["default"])({}, defaultProps, {
245
+ selected: true
246
+ }))), container = _render12.container;
247
+ _context4.next = 1;
248
+ return (0, _react2.waitFor)(function () {
249
+ _react2.fireEvent.mouseDown(document.body);
250
+ });
251
+ case 1:
252
+ expect(container).toBeInTheDocument();
253
+ case 2:
254
+ case "end":
255
+ return _context4.stop();
256
+ }
257
+ }, _callee4);
258
+ })));
259
+ it('applies correct padding to content', function () {
260
+ var _render13 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ExplicitConstructedResponse["default"], defaultProps)),
261
+ container = _render13.container;
262
+ var contentDiv = container.querySelector('div[style*="padding"]');
263
+ expect(contentDiv).toHaveStyle({
264
+ padding: '12px 21px'
265
+ });
266
+ });
267
+ it('applies correct min width', function () {
268
+ var _render14 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ExplicitConstructedResponse["default"], defaultProps)),
269
+ container = _render14.container;
270
+ var contentDiv = container.querySelector('div[style*="padding"]');
271
+ expect(contentDiv).toHaveStyle({
272
+ minWidth: '178px'
273
+ });
274
+ });
275
+ it('renders delete control on portaled custom toolbar when container el is set', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee5() {
276
+ var _render15, findByLabelText, _t;
277
+ return _regenerator["default"].wrap(function (_context5) {
278
+ while (1) switch (_context5.prev = _context5.next) {
279
+ case 0:
280
+ _render15 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ExplicitConstructedResponse["default"], (0, _extends2["default"])({}, defaultProps, {
281
+ selected: true
282
+ }))), findByLabelText = _render15.findByLabelText;
283
+ _t = expect;
284
+ _context5.next = 1;
285
+ return findByLabelText('Delete');
286
+ case 1:
287
+ _t(_context5.sent).toBeInTheDocument();
288
+ case 2:
289
+ case "end":
290
+ return _context5.stop();
291
+ }
292
+ }, _callee5);
293
+ })));
294
+ it('does not render portaled delete control when _tiptapContainerEl is missing', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee6() {
295
+ var editor, _render16, queryByLabelText, findByTestId, _t2;
296
+ return _regenerator["default"].wrap(function (_context6) {
297
+ while (1) switch (_context6.prev = _context6.next) {
298
+ case 0:
299
+ editor = buildMockEditor({
300
+ _tiptapContainerEl: undefined
301
+ });
302
+ _render16 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ExplicitConstructedResponse["default"], (0, _extends2["default"])({}, defaultProps, {
303
+ editor: editor,
304
+ selected: true
305
+ }))), queryByLabelText = _render16.queryByLabelText, findByTestId = _render16.findByTestId;
306
+ _t2 = expect;
307
+ _context6.next = 1;
308
+ return findByTestId('toolbar');
309
+ case 1:
310
+ _t2(_context6.sent).toBeInTheDocument();
311
+ expect(queryByLabelText('Delete')).not.toBeInTheDocument();
312
+ case 2:
313
+ case "end":
314
+ return _context6.stop();
315
+ }
316
+ }, _callee6);
317
+ })));
318
+ it('delete clears toolbar flag, removes node range, dispatches, and focuses', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee7() {
319
+ var _render17, findByLabelText, _t3;
320
+ return _regenerator["default"].wrap(function (_context7) {
321
+ while (1) switch (_context7.prev = _context7.next) {
322
+ case 0:
323
+ mockEditor._toolbarOpened = true;
324
+ _render17 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ExplicitConstructedResponse["default"], (0, _extends2["default"])({}, defaultProps, {
325
+ selected: true
326
+ }))), findByLabelText = _render17.findByLabelText;
327
+ _t3 = _react2.fireEvent;
328
+ _context7.next = 1;
329
+ return findByLabelText('Delete');
330
+ case 1:
331
+ _t3.mouseDown.call(_t3, _context7.sent);
332
+ expect(mockEditor.state.tr["delete"]).toHaveBeenCalledWith(5, 6);
333
+ expect(mockEditor.view.dispatch).toHaveBeenCalledTimes(2);
334
+ expect(mockEditor.view.dispatch).toHaveBeenNthCalledWith(1, mockEditor.state.tr);
335
+ expect(mockEditor.view.dispatch).toHaveBeenNthCalledWith(2, mockEditor.state.tr);
336
+ expect(mockEditor._toolbarOpened).toBe(false);
337
+ expect(mockEditor.commands.focus).toHaveBeenCalled();
338
+ case 2:
339
+ case "end":
340
+ return _context7.stop();
341
+ }
342
+ }, _callee7);
343
+ })));
344
+ });
345
+ //# sourceMappingURL=ExplicitConstructedResponse.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExplicitConstructedResponse.test.js","names":["_react","_interopRequireDefault","require","_react2","_ExplicitConstructedResponse","_excluded","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","jest","mock","NodeViewWrapper","_ref","children","props","_objectWithoutProperties2","createElement","_extends2","requireActual","createPortal","node","describe","buildMockEditor","overrides","undefined","mockTr","fn","setMeta","state","selection","from","to","tr","view","dispatch","commands","focus","_tiptapContainerEl","document","mockEditor","mockNode","attrs","index","value","nodeSize","mockOptions","respAreaToolbar","error","defaultProps","editor","getPos","options","selected","beforeEach","clearAllMocks","it","_render","render","container","expect","toBeInTheDocument","_render2","getByTestId","_render3","valueDiv","querySelector","_render4","contentDiv","toHaveStyle","border","errorFn","_render5","_asyncToGenerator2","_regenerator","mark","_callee","_render6","wrap","_context","prev","next","waitFor","toolbar","stop","_render7","queryByTestId","not","_callee2","_render8","clickableDiv","_context2","fireEvent","click","_callee3","_render9","_context3","_render0","wrapper","minHeight","emptyNode","_render1","toHaveBeenCalledWith","any","Function","_render10","cursor","_render11","display","_callee4","_render12","_context4","mouseDown","body","_render13","padding","_render14","minWidth","_callee5","_render15","findByLabelText","_t","_context5","sent","_callee6","_render16","queryByLabelText","findByTestId","_t2","_context6","_callee7","_render17","_t3","_context7","_toolbarOpened","call","toHaveBeenCalledTimes","toHaveBeenNthCalledWith","toBe","toHaveBeenCalled"],"sources":["../../../src/components/__tests__/ExplicitConstructedResponse.test.jsx"],"sourcesContent":["import React from 'react';\nimport { fireEvent, render, waitFor } from '@testing-library/react';\nimport ExplicitConstructedResponse from '../respArea/ExplicitConstructedResponse';\n\njest.mock('@tiptap/react', () => ({\n NodeViewWrapper: ({ children, ...props }) => (\n <div data-testid=\"node-view-wrapper\" {...props}>\n {children}\n </div>\n ),\n}));\n\njest.mock('react-dom', () => ({\n ...jest.requireActual('react-dom'),\n createPortal: (node) => node,\n}));\n\ndescribe('ExplicitConstructedResponse', () => {\n const buildMockEditor = (overrides = {}) => {\n const mockTr = {\n delete: jest.fn(),\n setMeta: jest.fn(function setMeta() {\n return mockTr;\n }),\n };\n return {\n state: {\n selection: {\n from: 0,\n to: 1,\n },\n tr: mockTr,\n },\n view: {\n dispatch: jest.fn(),\n },\n commands: {\n focus: jest.fn(),\n },\n _tiptapContainerEl: document.createElement('div'),\n ...overrides,\n };\n };\n\n let mockEditor;\n\n const mockNode = {\n attrs: {\n index: '0',\n value: 'Test value',\n },\n nodeSize: 1,\n };\n\n const mockOptions = {\n respAreaToolbar: jest.fn(() => () => <div data-testid=\"toolbar\">Toolbar</div>),\n error: jest.fn(() => ({})),\n };\n\n const defaultProps = {\n editor: mockEditor,\n node: mockNode,\n getPos: () => 5,\n options: mockOptions,\n selected: false,\n };\n\n beforeEach(() => {\n jest.clearAllMocks();\n mockEditor = buildMockEditor();\n defaultProps.editor = mockEditor;\n });\n\n it('renders without crashing', () => {\n const { container } = render(<ExplicitConstructedResponse {...defaultProps} />);\n expect(container).toBeInTheDocument();\n });\n\n it('renders NodeViewWrapper', () => {\n const { getByTestId } = render(<ExplicitConstructedResponse {...defaultProps} />);\n expect(getByTestId('node-view-wrapper')).toBeInTheDocument();\n });\n\n it('displays node value', () => {\n const { container } = render(<ExplicitConstructedResponse {...defaultProps} />);\n const valueDiv = container.querySelector('div[style*=\"padding\"]');\n expect(valueDiv).toBeInTheDocument();\n });\n\n it('applies correct border when no error', () => {\n const { container } = render(<ExplicitConstructedResponse {...defaultProps} />);\n const contentDiv = container.querySelector('div[style*=\"border\"]');\n expect(contentDiv).toHaveStyle({ border: '1px solid #C0C3CF' });\n });\n\n it('applies red border when error exists', () => {\n const errorFn = jest.fn(() => ({ 0: ['error'] }));\n const options = { ...mockOptions, error: errorFn };\n const { container } = render(<ExplicitConstructedResponse {...defaultProps} options={options} />);\n const contentDiv = container.querySelector('div[style*=\"border\"]');\n expect(contentDiv).toHaveStyle({ border: '1px solid red' });\n });\n\n it('shows toolbar when selected and only this node is selected', async () => {\n const { container } = render(<ExplicitConstructedResponse {...defaultProps} selected={true} />);\n await waitFor(() => {\n const toolbar = container.querySelector('[data-testid=\"toolbar\"]');\n // Toolbar might be hidden initially based on selection logic\n expect(container).toBeInTheDocument();\n });\n });\n\n it('does not show toolbar when not selected', () => {\n const { queryByTestId } = render(<ExplicitConstructedResponse {...defaultProps} selected={false} />);\n expect(queryByTestId('toolbar')).not.toBeInTheDocument();\n });\n\n it('shows toolbar on click', async () => {\n const { container, queryByTestId } = render(<ExplicitConstructedResponse {...defaultProps} />);\n const clickableDiv = container.querySelector('div[style*=\"border\"]');\n fireEvent.click(clickableDiv);\n await waitFor(() => {\n expect(queryByTestId('toolbar')).toBeInTheDocument();\n });\n });\n\n it('hides content when toolbar is shown', async () => {\n const { container } = render(<ExplicitConstructedResponse {...defaultProps} selected={true} />);\n await waitFor(() => {\n // Check visibility state\n expect(container).toBeInTheDocument();\n });\n });\n\n it('has correct minimum dimensions', () => {\n const { container } = render(<ExplicitConstructedResponse {...defaultProps} />);\n const wrapper = container.querySelector('[data-testid=\"node-view-wrapper\"]');\n expect(wrapper).toHaveStyle({ minHeight: '55px' });\n });\n\n it('renders with empty value as nbsp', () => {\n const emptyNode = { ...mockNode, attrs: { ...mockNode.attrs, value: '' } };\n const { container } = render(<ExplicitConstructedResponse {...defaultProps} node={emptyNode} />);\n expect(container).toBeInTheDocument();\n });\n\n it('calls respAreaToolbar with correct params', () => {\n render(<ExplicitConstructedResponse {...defaultProps} />);\n expect(mockOptions.respAreaToolbar).toHaveBeenCalledWith([mockNode, 5], mockEditor, expect.any(Function));\n });\n\n it('has cursor pointer style', () => {\n const { container } = render(<ExplicitConstructedResponse {...defaultProps} />);\n const wrapper = container.querySelector('[data-testid=\"node-view-wrapper\"]');\n expect(wrapper).toHaveStyle({ cursor: 'pointer' });\n });\n\n it('has inline-flex display', () => {\n const { container } = render(<ExplicitConstructedResponse {...defaultProps} />);\n const wrapper = container.querySelector('[data-testid=\"node-view-wrapper\"]');\n expect(wrapper).toHaveStyle({ display: 'inline-flex' });\n });\n\n it('closes toolbar on outside click', async () => {\n const { container } = render(<ExplicitConstructedResponse {...defaultProps} selected={true} />);\n await waitFor(() => {\n fireEvent.mouseDown(document.body);\n });\n expect(container).toBeInTheDocument();\n });\n\n it('applies correct padding to content', () => {\n const { container } = render(<ExplicitConstructedResponse {...defaultProps} />);\n const contentDiv = container.querySelector('div[style*=\"padding\"]');\n expect(contentDiv).toHaveStyle({ padding: '12px 21px' });\n });\n\n it('applies correct min width', () => {\n const { container } = render(<ExplicitConstructedResponse {...defaultProps} />);\n const contentDiv = container.querySelector('div[style*=\"padding\"]');\n expect(contentDiv).toHaveStyle({ minWidth: '178px' });\n });\n\n it('renders delete control on portaled custom toolbar when container el is set', async () => {\n const { findByLabelText } = render(<ExplicitConstructedResponse {...defaultProps} selected />);\n expect(await findByLabelText('Delete')).toBeInTheDocument();\n });\n\n it('does not render portaled delete control when _tiptapContainerEl is missing', async () => {\n const editor = buildMockEditor({ _tiptapContainerEl: undefined });\n const { queryByLabelText, findByTestId } = render(\n <ExplicitConstructedResponse {...defaultProps} editor={editor} selected />,\n );\n expect(await findByTestId('toolbar')).toBeInTheDocument();\n expect(queryByLabelText('Delete')).not.toBeInTheDocument();\n });\n\n it('delete clears toolbar flag, removes node range, dispatches, and focuses', async () => {\n mockEditor._toolbarOpened = true;\n const { findByLabelText } = render(<ExplicitConstructedResponse {...defaultProps} selected />);\n fireEvent.mouseDown(await findByLabelText('Delete'));\n expect(mockEditor.state.tr.delete).toHaveBeenCalledWith(5, 6);\n expect(mockEditor.view.dispatch).toHaveBeenCalledTimes(2);\n expect(mockEditor.view.dispatch).toHaveBeenNthCalledWith(1, mockEditor.state.tr);\n expect(mockEditor.view.dispatch).toHaveBeenNthCalledWith(2, mockEditor.state.tr);\n expect(mockEditor._toolbarOpened).toBe(false);\n expect(mockEditor.commands.focus).toHaveBeenCalled();\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,185 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
5
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
6
+ var _react = _interopRequireDefault(require("react"));
7
+ var _react2 = require("@testing-library/react");
8
+ var _ImageToolbar = require("../image/ImageToolbar");
9
+ 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; }
10
+ 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; }
11
+ jest.mock('react-dom', function () {
12
+ return _objectSpread(_objectSpread({}, jest.requireActual('react-dom')), {}, {
13
+ render: jest.fn()
14
+ });
15
+ });
16
+ jest.mock('../image/AltDialog', function () {
17
+ return {
18
+ __esModule: true,
19
+ "default": jest.fn(function () {
20
+ return /*#__PURE__*/_react["default"].createElement("div", {
21
+ "data-testid": "alt-dialog"
22
+ });
23
+ })
24
+ };
25
+ });
26
+ jest.mock('../common/toolbar-buttons', function () {
27
+ return {
28
+ MarkButton: function MarkButton(_ref) {
29
+ var onToggle = _ref.onToggle,
30
+ active = _ref.active,
31
+ label = _ref.label,
32
+ children = _ref.children;
33
+ return /*#__PURE__*/_react["default"].createElement("button", {
34
+ onClick: function onClick() {
35
+ return onToggle();
36
+ },
37
+ "data-testid": "mark-button-".concat(label),
38
+ "data-active": active
39
+ }, children);
40
+ }
41
+ };
42
+ });
43
+ describe('ImageToolbar', function () {
44
+ var defaultProps = {
45
+ onChange: jest.fn(),
46
+ alignment: 'left',
47
+ alt: 'Test alt text',
48
+ imageLoaded: true,
49
+ disableImageAlignmentButtons: false
50
+ };
51
+ beforeEach(function () {
52
+ jest.clearAllMocks();
53
+ });
54
+ it('renders without crashing', function () {
55
+ var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ImageToolbar.ImageToolbar, defaultProps)),
56
+ container = _render.container;
57
+ expect(container).toBeInTheDocument();
58
+ });
59
+ it('renders alignment buttons when not disabled', function () {
60
+ var _render2 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ImageToolbar.ImageToolbar, defaultProps)),
61
+ getByTestId = _render2.getByTestId;
62
+ expect(getByTestId('mark-button-left')).toBeInTheDocument();
63
+ expect(getByTestId('mark-button-center')).toBeInTheDocument();
64
+ expect(getByTestId('mark-button-right')).toBeInTheDocument();
65
+ });
66
+ it('does not render alignment buttons when disabled', function () {
67
+ var _render3 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ImageToolbar.ImageToolbar, (0, _extends2["default"])({}, defaultProps, {
68
+ disableImageAlignmentButtons: true
69
+ }))),
70
+ queryByTestId = _render3.queryByTestId;
71
+ expect(queryByTestId('mark-button-left')).not.toBeInTheDocument();
72
+ expect(queryByTestId('mark-button-center')).not.toBeInTheDocument();
73
+ expect(queryByTestId('mark-button-right')).not.toBeInTheDocument();
74
+ });
75
+ it('renders "Alt text" label', function () {
76
+ var _render4 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ImageToolbar.ImageToolbar, defaultProps)),
77
+ getByText = _render4.getByText;
78
+ expect(getByText('Alt text')).toBeInTheDocument();
79
+ });
80
+ it('calls onChange with alignment when alignment button clicked', function () {
81
+ var onChange = jest.fn();
82
+ var _render5 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ImageToolbar.ImageToolbar, (0, _extends2["default"])({}, defaultProps, {
83
+ onChange: onChange
84
+ }))),
85
+ getByTestId = _render5.getByTestId;
86
+ _react2.fireEvent.click(getByTestId('mark-button-center'));
87
+ expect(onChange).toHaveBeenCalledWith({
88
+ alignment: 'center'
89
+ });
90
+ });
91
+ it('shows left button as active when alignment is left', function () {
92
+ var _render6 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ImageToolbar.ImageToolbar, (0, _extends2["default"])({}, defaultProps, {
93
+ alignment: "left"
94
+ }))),
95
+ getByTestId = _render6.getByTestId;
96
+ expect(getByTestId('mark-button-left')).toHaveAttribute('data-active', 'true');
97
+ });
98
+ it('shows center button as active when alignment is center', function () {
99
+ var _render7 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ImageToolbar.ImageToolbar, (0, _extends2["default"])({}, defaultProps, {
100
+ alignment: "center"
101
+ }))),
102
+ getByTestId = _render7.getByTestId;
103
+ expect(getByTestId('mark-button-center')).toHaveAttribute('data-active', 'true');
104
+ });
105
+ it('shows right button as active when alignment is right', function () {
106
+ var _render8 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ImageToolbar.ImageToolbar, (0, _extends2["default"])({}, defaultProps, {
107
+ alignment: "right"
108
+ }))),
109
+ getByTestId = _render8.getByTestId;
110
+ expect(getByTestId('mark-button-right')).toHaveAttribute('data-active', 'true');
111
+ });
112
+ it('disables alt text when image is not loaded', function () {
113
+ var _render9 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ImageToolbar.ImageToolbar, (0, _extends2["default"])({}, defaultProps, {
114
+ imageLoaded: false
115
+ }))),
116
+ getByText = _render9.getByText;
117
+ var altText = getByText('Alt text');
118
+ expect(altText).toHaveStyle({
119
+ opacity: '0.5'
120
+ });
121
+ });
122
+ it('does not disable alt text when image is loaded', function () {
123
+ var _render0 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ImageToolbar.ImageToolbar, (0, _extends2["default"])({}, defaultProps, {
124
+ imageLoaded: true
125
+ }))),
126
+ getByText = _render0.getByText;
127
+ var altText = getByText('Alt text');
128
+ expect(altText).not.toHaveStyle({
129
+ opacity: '0.5'
130
+ });
131
+ });
132
+ it('renders alt text dialog on mouse down when image is loaded', function () {
133
+ var _render1 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ImageToolbar.ImageToolbar, (0, _extends2["default"])({}, defaultProps, {
134
+ imageLoaded: true
135
+ }))),
136
+ getByText = _render1.getByText,
137
+ container = _render1.container;
138
+ var altText = getByText('Alt text');
139
+ _react2.fireEvent.mouseDown(altText);
140
+ // Just verify the component rendered and mouseDown didn't throw
141
+ expect(container).toBeInTheDocument();
142
+ });
143
+ it('does not render alt text dialog on mouse down when image is not loaded', function () {
144
+ var _render10 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ImageToolbar.ImageToolbar, (0, _extends2["default"])({}, defaultProps, {
145
+ imageLoaded: false
146
+ }))),
147
+ getByText = _render10.getByText,
148
+ container = _render10.container;
149
+ var altText = getByText('Alt text');
150
+ _react2.fireEvent.mouseDown(altText);
151
+ // Just verify the component rendered and mouseDown didn't throw
152
+ expect(container).toBeInTheDocument();
153
+ });
154
+ it('calls onChange with new alt text and true when alt dialog is done', function () {
155
+ var onChange = jest.fn();
156
+ var toolbar = new _ImageToolbar.ImageToolbar(_objectSpread(_objectSpread({}, defaultProps), {}, {
157
+ onChange: onChange
158
+ }));
159
+ toolbar.onAltTextDone('New alt text');
160
+ expect(onChange).toHaveBeenCalledWith({
161
+ alt: 'New alt text'
162
+ }, true);
163
+ });
164
+ it('has border on alt text when alignment buttons are shown', function () {
165
+ var _render11 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ImageToolbar.ImageToolbar, (0, _extends2["default"])({}, defaultProps, {
166
+ disableImageAlignmentButtons: false
167
+ }))),
168
+ getByText = _render11.getByText;
169
+ var altText = getByText('Alt text');
170
+ expect(altText).toHaveStyle({
171
+ borderLeft: '1px solid grey'
172
+ });
173
+ });
174
+ it('does not have border on alt text when alignment buttons are hidden', function () {
175
+ var _render12 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_ImageToolbar.ImageToolbar, (0, _extends2["default"])({}, defaultProps, {
176
+ disableImageAlignmentButtons: true
177
+ }))),
178
+ getByText = _render12.getByText;
179
+ var altText = getByText('Alt text');
180
+ expect(altText).not.toHaveStyle({
181
+ borderLeft: '1px solid grey'
182
+ });
183
+ });
184
+ });
185
+ //# sourceMappingURL=ImageToolbar.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ImageToolbar.test.js","names":["_react","_interopRequireDefault","require","_react2","_ImageToolbar","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","jest","mock","requireActual","render","fn","__esModule","createElement","MarkButton","_ref","onToggle","active","label","children","onClick","concat","describe","defaultProps","onChange","alignment","alt","imageLoaded","disableImageAlignmentButtons","beforeEach","clearAllMocks","it","_render","ImageToolbar","container","expect","toBeInTheDocument","_render2","getByTestId","_render3","_extends2","queryByTestId","not","_render4","getByText","_render5","fireEvent","click","toHaveBeenCalledWith","_render6","toHaveAttribute","_render7","_render8","_render9","altText","toHaveStyle","opacity","_render0","_render1","mouseDown","_render10","toolbar","onAltTextDone","_render11","borderLeft","_render12"],"sources":["../../../src/components/__tests__/ImageToolbar.test.jsx"],"sourcesContent":["import React from 'react';\nimport { fireEvent, render } from '@testing-library/react';\nimport { ImageToolbar } from '../image/ImageToolbar';\n\njest.mock('react-dom', () => ({\n ...jest.requireActual('react-dom'),\n render: jest.fn(),\n}));\n\njest.mock('../image/AltDialog', () => ({\n __esModule: true,\n default: jest.fn(() => <div data-testid=\"alt-dialog\" />),\n}));\n\njest.mock('../common/toolbar-buttons', () => ({\n MarkButton: ({ onToggle, active, label, children }) => (\n <button onClick={() => onToggle()} data-testid={`mark-button-${label}`} data-active={active}>\n {children}\n </button>\n ),\n}));\n\ndescribe('ImageToolbar', () => {\n const defaultProps = {\n onChange: jest.fn(),\n alignment: 'left',\n alt: 'Test alt text',\n imageLoaded: true,\n disableImageAlignmentButtons: false,\n };\n\n beforeEach(() => {\n jest.clearAllMocks();\n });\n\n it('renders without crashing', () => {\n const { container } = render(<ImageToolbar {...defaultProps} />);\n expect(container).toBeInTheDocument();\n });\n\n it('renders alignment buttons when not disabled', () => {\n const { getByTestId } = render(<ImageToolbar {...defaultProps} />);\n expect(getByTestId('mark-button-left')).toBeInTheDocument();\n expect(getByTestId('mark-button-center')).toBeInTheDocument();\n expect(getByTestId('mark-button-right')).toBeInTheDocument();\n });\n\n it('does not render alignment buttons when disabled', () => {\n const { queryByTestId } = render(<ImageToolbar {...defaultProps} disableImageAlignmentButtons={true} />);\n expect(queryByTestId('mark-button-left')).not.toBeInTheDocument();\n expect(queryByTestId('mark-button-center')).not.toBeInTheDocument();\n expect(queryByTestId('mark-button-right')).not.toBeInTheDocument();\n });\n\n it('renders \"Alt text\" label', () => {\n const { getByText } = render(<ImageToolbar {...defaultProps} />);\n expect(getByText('Alt text')).toBeInTheDocument();\n });\n\n it('calls onChange with alignment when alignment button clicked', () => {\n const onChange = jest.fn();\n const { getByTestId } = render(<ImageToolbar {...defaultProps} onChange={onChange} />);\n fireEvent.click(getByTestId('mark-button-center'));\n expect(onChange).toHaveBeenCalledWith({ alignment: 'center' });\n });\n\n it('shows left button as active when alignment is left', () => {\n const { getByTestId } = render(<ImageToolbar {...defaultProps} alignment=\"left\" />);\n expect(getByTestId('mark-button-left')).toHaveAttribute('data-active', 'true');\n });\n\n it('shows center button as active when alignment is center', () => {\n const { getByTestId } = render(<ImageToolbar {...defaultProps} alignment=\"center\" />);\n expect(getByTestId('mark-button-center')).toHaveAttribute('data-active', 'true');\n });\n\n it('shows right button as active when alignment is right', () => {\n const { getByTestId } = render(<ImageToolbar {...defaultProps} alignment=\"right\" />);\n expect(getByTestId('mark-button-right')).toHaveAttribute('data-active', 'true');\n });\n\n it('disables alt text when image is not loaded', () => {\n const { getByText } = render(<ImageToolbar {...defaultProps} imageLoaded={false} />);\n const altText = getByText('Alt text');\n expect(altText).toHaveStyle({ opacity: '0.5' });\n });\n\n it('does not disable alt text when image is loaded', () => {\n const { getByText } = render(<ImageToolbar {...defaultProps} imageLoaded={true} />);\n const altText = getByText('Alt text');\n expect(altText).not.toHaveStyle({ opacity: '0.5' });\n });\n\n it('renders alt text dialog on mouse down when image is loaded', () => {\n const { getByText, container } = render(<ImageToolbar {...defaultProps} imageLoaded={true} />);\n const altText = getByText('Alt text');\n fireEvent.mouseDown(altText);\n // Just verify the component rendered and mouseDown didn't throw\n expect(container).toBeInTheDocument();\n });\n\n it('does not render alt text dialog on mouse down when image is not loaded', () => {\n const { getByText, container } = render(<ImageToolbar {...defaultProps} imageLoaded={false} />);\n const altText = getByText('Alt text');\n fireEvent.mouseDown(altText);\n // Just verify the component rendered and mouseDown didn't throw\n expect(container).toBeInTheDocument();\n });\n\n it('calls onChange with new alt text and true when alt dialog is done', () => {\n const onChange = jest.fn();\n const toolbar = new ImageToolbar({ ...defaultProps, onChange });\n toolbar.onAltTextDone('New alt text');\n expect(onChange).toHaveBeenCalledWith({ alt: 'New alt text' }, true);\n });\n\n it('has border on alt text when alignment buttons are shown', () => {\n const { getByText } = render(<ImageToolbar {...defaultProps} disableImageAlignmentButtons={false} />);\n const altText = getByText('Alt text');\n expect(altText).toHaveStyle({ borderLeft: '1px solid grey' });\n });\n\n it('does not have border on alt text when alignment buttons are hidden', () => {\n const { getByText } = render(<ImageToolbar {...defaultProps} disableImageAlignmentButtons={true} />);\n const altText = getByText('Alt text');\n expect(altText).not.toHaveStyle({ borderLeft: '1px solid grey' });\n });\n});\n"],"mappings":"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","ignoreList":[]}