@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.
- package/CHANGELOG.md +0 -75
- package/lib/__tests__/EditableHtml.test.js +831 -0
- package/lib/__tests__/EditableHtml.test.js.map +1 -0
- package/lib/__tests__/constants.test.js +21 -0
- package/lib/__tests__/constants.test.js.map +1 -0
- package/lib/__tests__/div-to-paragraph-conversion.test.js +213 -0
- package/lib/__tests__/div-to-paragraph-conversion.test.js.map +1 -0
- package/lib/__tests__/extensions.test.js +209 -0
- package/lib/__tests__/extensions.test.js.map +1 -0
- package/lib/__tests__/index.test.js +250 -0
- package/lib/__tests__/index.test.js.map +1 -0
- package/lib/__tests__/size-utils.test.js +57 -0
- package/lib/__tests__/size-utils.test.js.map +1 -0
- package/lib/__tests__/theme.test.js +17 -0
- package/lib/__tests__/theme.test.js.map +1 -0
- package/lib/components/EditableHtml.js +4 -2
- package/lib/components/EditableHtml.js.map +1 -1
- package/lib/components/__tests__/AltDialog.test.js +201 -0
- package/lib/components/__tests__/AltDialog.test.js.map +1 -0
- package/lib/components/__tests__/CharacterPicker.test.js +455 -0
- package/lib/components/__tests__/CharacterPicker.test.js.map +1 -0
- package/lib/components/__tests__/CssIcon.test.js +58 -0
- package/lib/components/__tests__/CssIcon.test.js.map +1 -0
- package/lib/components/__tests__/DragInTheBlank.test.js +295 -0
- package/lib/components/__tests__/DragInTheBlank.test.js.map +1 -0
- package/lib/components/__tests__/ExplicitConstructedResponse.test.js +345 -0
- package/lib/components/__tests__/ExplicitConstructedResponse.test.js.map +1 -0
- package/lib/components/__tests__/ImageToolbar.test.js +185 -0
- package/lib/components/__tests__/ImageToolbar.test.js.map +1 -0
- package/lib/components/__tests__/InlineDropdown.test.js +839 -0
- package/lib/components/__tests__/InlineDropdown.test.js.map +1 -0
- package/lib/components/__tests__/InsertImageHandler.test.js +171 -0
- package/lib/components/__tests__/InsertImageHandler.test.js.map +1 -0
- package/lib/components/__tests__/MediaDialog.test.js +433 -0
- package/lib/components/__tests__/MediaDialog.test.js.map +1 -0
- package/lib/components/__tests__/MediaToolbar.test.js +126 -0
- package/lib/components/__tests__/MediaToolbar.test.js.map +1 -0
- package/lib/components/__tests__/MediaWrapper.test.js +96 -0
- package/lib/components/__tests__/MediaWrapper.test.js.map +1 -0
- package/lib/components/__tests__/MenuBar.test.js +502 -0
- package/lib/components/__tests__/MenuBar.test.js.map +1 -0
- package/lib/components/__tests__/RespArea.test.js +171 -0
- package/lib/components/__tests__/RespArea.test.js.map +1 -0
- package/lib/components/__tests__/TableIcons.test.js +153 -0
- package/lib/components/__tests__/TableIcons.test.js.map +1 -0
- package/lib/components/__tests__/TextAlign.test.js +209 -0
- package/lib/components/__tests__/TextAlign.test.js.map +1 -0
- package/lib/components/__tests__/TiptapContainer.test.js +196 -0
- package/lib/components/__tests__/TiptapContainer.test.js.map +1 -0
- package/lib/components/__tests__/characterUtils.test.js +178 -0
- package/lib/components/__tests__/characterUtils.test.js.map +1 -0
- package/lib/components/__tests__/choice.test.js +213 -0
- package/lib/components/__tests__/choice.test.js.map +1 -0
- package/lib/components/__tests__/custom-popper.test.js +108 -0
- package/lib/components/__tests__/custom-popper.test.js.map +1 -0
- package/lib/components/__tests__/done-button.test.js +72 -0
- package/lib/components/__tests__/done-button.test.js.map +1 -0
- package/lib/components/__tests__/toolbar-buttons.test.js +277 -0
- package/lib/components/__tests__/toolbar-buttons.test.js.map +1 -0
- package/lib/components/respArea/DragInTheBlank/__tests__/choice.test.js +90 -0
- package/lib/components/respArea/DragInTheBlank/__tests__/choice.test.js.map +1 -0
- package/lib/components/respArea/DragInTheBlank/choice.js +3 -0
- package/lib/components/respArea/DragInTheBlank/choice.js.map +1 -1
- package/lib/components/respArea/MathTemplated.js +2 -2
- package/lib/components/respArea/MathTemplated.js.map +1 -1
- package/lib/components/respArea/__tests__/MathTemplated.test.js +217 -0
- package/lib/components/respArea/__tests__/MathTemplated.test.js.map +1 -0
- package/lib/extensions/__tests__/css.test.js +214 -0
- package/lib/extensions/__tests__/css.test.js.map +1 -0
- package/lib/extensions/__tests__/custom-toolbar-wrapper.test.js +175 -0
- package/lib/extensions/__tests__/custom-toolbar-wrapper.test.js.map +1 -0
- package/lib/extensions/__tests__/divNode.test.js +108 -0
- package/lib/extensions/__tests__/divNode.test.js.map +1 -0
- package/lib/extensions/__tests__/ensure-empty-root-div.test.js +50 -0
- package/lib/extensions/__tests__/ensure-empty-root-div.test.js.map +1 -0
- package/lib/extensions/__tests__/ensure-list-item-content-is-div.test.js +60 -0
- package/lib/extensions/__tests__/ensure-list-item-content-is-div.test.js.map +1 -0
- package/lib/extensions/__tests__/extended-list-item.test.js +13 -0
- package/lib/extensions/__tests__/extended-list-item.test.js.map +1 -0
- package/lib/extensions/__tests__/extended-table-cell.test.js +15 -0
- package/lib/extensions/__tests__/extended-table-cell.test.js.map +1 -0
- package/lib/extensions/__tests__/extended-table.test.js +200 -0
- package/lib/extensions/__tests__/extended-table.test.js.map +1 -0
- package/lib/extensions/__tests__/image-component.test.js +432 -0
- package/lib/extensions/__tests__/image-component.test.js.map +1 -0
- package/lib/extensions/__tests__/image.test.js +313 -0
- package/lib/extensions/__tests__/image.test.js.map +1 -0
- package/lib/extensions/__tests__/math.test.js +1399 -0
- package/lib/extensions/__tests__/math.test.js.map +1 -0
- package/lib/extensions/__tests__/media-node-view.test.js +307 -0
- package/lib/extensions/__tests__/media-node-view.test.js.map +1 -0
- package/lib/extensions/__tests__/media.test.js +292 -0
- package/lib/extensions/__tests__/media.test.js.map +1 -0
- package/lib/extensions/__tests__/responseArea.test.js +736 -0
- package/lib/extensions/__tests__/responseArea.test.js.map +1 -0
- package/lib/extensions/image-component.js +9 -6
- package/lib/extensions/image-component.js.map +1 -1
- package/lib/extensions/responseArea.js +7 -1
- package/lib/extensions/responseArea.js.map +1 -1
- package/lib/utils/__tests__/helper.test.js +107 -0
- package/lib/utils/__tests__/helper.test.js.map +1 -0
- package/lib/utils/__tests__/toolbar.test.js +38 -0
- package/lib/utils/__tests__/toolbar.test.js.map +1 -0
- package/package.json +7 -7
- package/src/components/EditableHtml.jsx +5 -3
- package/src/components/respArea/DragInTheBlank/__tests__/choice.test.jsx +72 -0
- package/src/components/respArea/DragInTheBlank/choice.jsx +3 -0
- package/src/components/respArea/MathTemplated.jsx +1 -1
- package/src/components/respArea/__tests__/MathTemplated.test.jsx +1 -1
- package/src/extensions/__tests__/image-component.test.jsx +1 -0
- package/src/extensions/__tests__/responseArea.test.js +57 -3
- package/src/extensions/image-component.jsx +8 -6
- package/src/extensions/responseArea.js +7 -1
- package/LICENSE.md +0 -5
|
@@ -0,0 +1,313 @@
|
|
|
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 _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
7
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
8
|
+
var _state = require("@tiptap/pm/state");
|
|
9
|
+
var _image = require("../image");
|
|
10
|
+
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; }
|
|
11
|
+
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; }
|
|
12
|
+
jest.mock('@tiptap/core', function () {
|
|
13
|
+
return {
|
|
14
|
+
Node: {
|
|
15
|
+
create: jest.fn(function (config) {
|
|
16
|
+
return config;
|
|
17
|
+
})
|
|
18
|
+
},
|
|
19
|
+
mergeAttributes: jest.fn(function () {
|
|
20
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
21
|
+
args[_key] = arguments[_key];
|
|
22
|
+
}
|
|
23
|
+
return Object.assign.apply(Object, [{}].concat(args));
|
|
24
|
+
})
|
|
25
|
+
};
|
|
26
|
+
});
|
|
27
|
+
jest.mock('@tiptap/pm/state', function () {
|
|
28
|
+
return {
|
|
29
|
+
Plugin: jest.fn(function MockPlugin(spec) {
|
|
30
|
+
this.spec = spec;
|
|
31
|
+
return {
|
|
32
|
+
spec: spec
|
|
33
|
+
};
|
|
34
|
+
})
|
|
35
|
+
};
|
|
36
|
+
});
|
|
37
|
+
jest.mock('@tiptap/react', function () {
|
|
38
|
+
return {
|
|
39
|
+
ReactNodeViewRenderer: jest.fn(function (component) {
|
|
40
|
+
return component;
|
|
41
|
+
})
|
|
42
|
+
};
|
|
43
|
+
});
|
|
44
|
+
jest.mock('../image-component', function () {
|
|
45
|
+
return {
|
|
46
|
+
__esModule: true,
|
|
47
|
+
"default": jest.fn(function () {
|
|
48
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
49
|
+
"data-testid": "image-component"
|
|
50
|
+
});
|
|
51
|
+
})
|
|
52
|
+
};
|
|
53
|
+
});
|
|
54
|
+
function setupPastePlugin() {
|
|
55
|
+
var insertContent = jest.fn();
|
|
56
|
+
var editor = {
|
|
57
|
+
commands: {
|
|
58
|
+
insertContent: insertContent
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
_state.Plugin.mockClear();
|
|
62
|
+
_image.ImageUploadNode.addProseMirrorPlugins.call({
|
|
63
|
+
editor: editor
|
|
64
|
+
});
|
|
65
|
+
expect(_state.Plugin).toHaveBeenCalledTimes(1);
|
|
66
|
+
var handlePaste = _state.Plugin.mock.calls[0][0].props.handlePaste;
|
|
67
|
+
return {
|
|
68
|
+
handlePaste: handlePaste,
|
|
69
|
+
insertContent: insertContent,
|
|
70
|
+
editor: editor
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
describe('ImageUploadNode', function () {
|
|
74
|
+
describe('configuration', function () {
|
|
75
|
+
it('has correct name', function () {
|
|
76
|
+
expect(_image.ImageUploadNode.name).toBe('imageUploadNode');
|
|
77
|
+
});
|
|
78
|
+
it('is in block group', function () {
|
|
79
|
+
expect(_image.ImageUploadNode.group).toBe('block');
|
|
80
|
+
});
|
|
81
|
+
it('is atomic', function () {
|
|
82
|
+
expect(_image.ImageUploadNode.atom).toBe(true);
|
|
83
|
+
});
|
|
84
|
+
it('is selectable', function () {
|
|
85
|
+
expect(_image.ImageUploadNode.selectable).toBe(true);
|
|
86
|
+
});
|
|
87
|
+
it('is draggable', function () {
|
|
88
|
+
expect(_image.ImageUploadNode.draggable).toBe(true);
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
describe('addAttributes', function () {
|
|
92
|
+
it('returns all required attributes with defaults', function () {
|
|
93
|
+
var attributes = _image.ImageUploadNode.addAttributes();
|
|
94
|
+
expect(attributes).toHaveProperty('loaded');
|
|
95
|
+
expect(attributes).toHaveProperty('deleteStatus');
|
|
96
|
+
expect(attributes).toHaveProperty('alignment');
|
|
97
|
+
expect(attributes).toHaveProperty('percent');
|
|
98
|
+
expect(attributes).toHaveProperty('width');
|
|
99
|
+
expect(attributes).toHaveProperty('height');
|
|
100
|
+
expect(attributes).toHaveProperty('src');
|
|
101
|
+
expect(attributes).toHaveProperty('alt');
|
|
102
|
+
expect(attributes.loaded).toEqual({
|
|
103
|
+
"default": false
|
|
104
|
+
});
|
|
105
|
+
expect(attributes.deleteStatus).toEqual({
|
|
106
|
+
"default": null
|
|
107
|
+
});
|
|
108
|
+
expect(attributes.alignment).toEqual({
|
|
109
|
+
"default": null
|
|
110
|
+
});
|
|
111
|
+
expect(attributes.percent).toEqual({
|
|
112
|
+
"default": null
|
|
113
|
+
});
|
|
114
|
+
expect(attributes.width).toEqual({
|
|
115
|
+
"default": null
|
|
116
|
+
});
|
|
117
|
+
expect(attributes.height).toEqual({
|
|
118
|
+
"default": null
|
|
119
|
+
});
|
|
120
|
+
expect(attributes.src).toEqual({
|
|
121
|
+
"default": null
|
|
122
|
+
});
|
|
123
|
+
expect(attributes.alt).toEqual({
|
|
124
|
+
"default": null
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
describe('parseHTML', function () {
|
|
129
|
+
it('returns array with div selector', function () {
|
|
130
|
+
var rules = _image.ImageUploadNode.parseHTML();
|
|
131
|
+
expect(Array.isArray(rules)).toBe(true);
|
|
132
|
+
expect(rules).toHaveLength(1);
|
|
133
|
+
expect(rules[0]).toHaveProperty('tag', 'img[data-type="image-upload-node"]');
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
describe('renderHTML', function () {
|
|
137
|
+
it('renders img tag with data-type attribute', function () {
|
|
138
|
+
var HTMLAttributes = {
|
|
139
|
+
src: 'test.jpg',
|
|
140
|
+
width: 100,
|
|
141
|
+
height: 100
|
|
142
|
+
};
|
|
143
|
+
var result = _image.ImageUploadNode.renderHTML({
|
|
144
|
+
HTMLAttributes: HTMLAttributes
|
|
145
|
+
});
|
|
146
|
+
expect(result[0]).toBe('img');
|
|
147
|
+
expect(result[1]).toEqual(_objectSpread(_objectSpread({}, HTMLAttributes), {}, {
|
|
148
|
+
'data-type': 'image-upload-node'
|
|
149
|
+
}));
|
|
150
|
+
});
|
|
151
|
+
it('merges attributes correctly', function () {
|
|
152
|
+
var HTMLAttributes = {
|
|
153
|
+
src: 'test.jpg',
|
|
154
|
+
alt: 'Test image'
|
|
155
|
+
};
|
|
156
|
+
var result = _image.ImageUploadNode.renderHTML({
|
|
157
|
+
HTMLAttributes: HTMLAttributes
|
|
158
|
+
});
|
|
159
|
+
expect(result[1].src).toBe('test.jpg');
|
|
160
|
+
expect(result[1].alt).toBe('Test image');
|
|
161
|
+
expect(result[1]['data-type']).toBe('image-upload-node');
|
|
162
|
+
});
|
|
163
|
+
});
|
|
164
|
+
describe('addNodeView', function () {
|
|
165
|
+
it('returns ReactNodeViewRenderer result', function () {
|
|
166
|
+
var result = _image.ImageUploadNode.addNodeView();
|
|
167
|
+
expect(result).toBeDefined();
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
describe('addCommands', function () {
|
|
171
|
+
it('returns setImageUploadNode command', function () {
|
|
172
|
+
var context = {
|
|
173
|
+
name: 'imageUploadNode'
|
|
174
|
+
};
|
|
175
|
+
var commands = _image.ImageUploadNode.addCommands.call(context);
|
|
176
|
+
expect(commands).toHaveProperty('setImageUploadNode');
|
|
177
|
+
expect((0, _typeof2["default"])(commands.setImageUploadNode)).toBe('function');
|
|
178
|
+
});
|
|
179
|
+
it('setImageUploadNode inserts content', function () {
|
|
180
|
+
var context = {
|
|
181
|
+
name: 'imageUploadNode'
|
|
182
|
+
};
|
|
183
|
+
var commands = _image.ImageUploadNode.addCommands.call(context);
|
|
184
|
+
var mockCommands = {
|
|
185
|
+
insertContent: jest.fn(function () {
|
|
186
|
+
return true;
|
|
187
|
+
})
|
|
188
|
+
};
|
|
189
|
+
var result = commands.setImageUploadNode()({
|
|
190
|
+
commands: mockCommands
|
|
191
|
+
});
|
|
192
|
+
expect(mockCommands.insertContent).toHaveBeenCalledWith(expect.objectContaining({
|
|
193
|
+
type: 'imageUploadNode',
|
|
194
|
+
attrs: expect.objectContaining({
|
|
195
|
+
nodeKey: expect.any(String)
|
|
196
|
+
})
|
|
197
|
+
}));
|
|
198
|
+
expect(result).toBe(true);
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
describe('addProseMirrorPlugins', function () {
|
|
202
|
+
var mockView = {};
|
|
203
|
+
beforeEach(function () {
|
|
204
|
+
jest.spyOn(global, 'FileReader').mockImplementation(function MockFileReader() {
|
|
205
|
+
this.readAsDataURL = function readAsDataURL() {
|
|
206
|
+
var _this = this;
|
|
207
|
+
this.result = 'data:image/png;base64,Zm9v';
|
|
208
|
+
queueMicrotask(function () {
|
|
209
|
+
if (_this.onload) {
|
|
210
|
+
_this.onload();
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
};
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
afterEach(function () {
|
|
217
|
+
global.FileReader.mockRestore();
|
|
218
|
+
});
|
|
219
|
+
it('registers one paste plugin', function () {
|
|
220
|
+
var insertContent = jest.fn();
|
|
221
|
+
var editor = {
|
|
222
|
+
commands: {
|
|
223
|
+
insertContent: insertContent
|
|
224
|
+
}
|
|
225
|
+
};
|
|
226
|
+
_state.Plugin.mockClear();
|
|
227
|
+
var plugins = _image.ImageUploadNode.addProseMirrorPlugins.call({
|
|
228
|
+
editor: editor
|
|
229
|
+
});
|
|
230
|
+
expect(plugins).toHaveLength(1);
|
|
231
|
+
expect(_state.Plugin).toHaveBeenCalledTimes(1);
|
|
232
|
+
});
|
|
233
|
+
it('handlePaste returns false when clipboard has no image file', function () {
|
|
234
|
+
var _setupPastePlugin = setupPastePlugin(),
|
|
235
|
+
handlePaste = _setupPastePlugin.handlePaste;
|
|
236
|
+
var event = {
|
|
237
|
+
clipboardData: {
|
|
238
|
+
items: [{
|
|
239
|
+
kind: 'string',
|
|
240
|
+
type: 'text/plain',
|
|
241
|
+
getAsFile: function getAsFile() {
|
|
242
|
+
return null;
|
|
243
|
+
}
|
|
244
|
+
}]
|
|
245
|
+
}
|
|
246
|
+
};
|
|
247
|
+
expect(handlePaste(mockView, event)).toBe(false);
|
|
248
|
+
});
|
|
249
|
+
it('handlePaste returns false when clipboardData is missing', function () {
|
|
250
|
+
var _setupPastePlugin2 = setupPastePlugin(),
|
|
251
|
+
handlePaste = _setupPastePlugin2.handlePaste;
|
|
252
|
+
var event = {};
|
|
253
|
+
expect(handlePaste(mockView, event)).toBe(false);
|
|
254
|
+
});
|
|
255
|
+
it('handlePaste returns false when the file item has no file', function () {
|
|
256
|
+
var _setupPastePlugin3 = setupPastePlugin(),
|
|
257
|
+
handlePaste = _setupPastePlugin3.handlePaste;
|
|
258
|
+
var event = {
|
|
259
|
+
clipboardData: {
|
|
260
|
+
items: [{
|
|
261
|
+
kind: 'file',
|
|
262
|
+
type: 'image/png',
|
|
263
|
+
getAsFile: function getAsFile() {
|
|
264
|
+
return null;
|
|
265
|
+
}
|
|
266
|
+
}]
|
|
267
|
+
}
|
|
268
|
+
};
|
|
269
|
+
expect(handlePaste(mockView, event)).toBe(false);
|
|
270
|
+
});
|
|
271
|
+
it('handlePaste returns true and inserts imageUploadNode with data URL after read', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
272
|
+
var _setupPastePlugin4, handlePaste, insertContent, file, event;
|
|
273
|
+
return _regenerator["default"].wrap(function (_context) {
|
|
274
|
+
while (1) switch (_context.prev = _context.next) {
|
|
275
|
+
case 0:
|
|
276
|
+
_setupPastePlugin4 = setupPastePlugin(), handlePaste = _setupPastePlugin4.handlePaste, insertContent = _setupPastePlugin4.insertContent;
|
|
277
|
+
file = new File([new Uint8Array([1, 2, 3])], 'p.png', {
|
|
278
|
+
type: 'image/png'
|
|
279
|
+
});
|
|
280
|
+
event = {
|
|
281
|
+
clipboardData: {
|
|
282
|
+
items: [{
|
|
283
|
+
kind: 'file',
|
|
284
|
+
type: 'image/png',
|
|
285
|
+
getAsFile: function getAsFile() {
|
|
286
|
+
return file;
|
|
287
|
+
}
|
|
288
|
+
}]
|
|
289
|
+
}
|
|
290
|
+
};
|
|
291
|
+
expect(handlePaste(mockView, event)).toBe(true);
|
|
292
|
+
expect(insertContent).not.toHaveBeenCalled();
|
|
293
|
+
_context.next = 1;
|
|
294
|
+
return new Promise(function (resolve) {
|
|
295
|
+
return queueMicrotask(resolve);
|
|
296
|
+
});
|
|
297
|
+
case 1:
|
|
298
|
+
expect(insertContent).toHaveBeenCalledWith(expect.objectContaining({
|
|
299
|
+
type: 'imageUploadNode',
|
|
300
|
+
attrs: expect.objectContaining({
|
|
301
|
+
src: 'data:image/png;base64,Zm9v',
|
|
302
|
+
loaded: true
|
|
303
|
+
})
|
|
304
|
+
}));
|
|
305
|
+
case 2:
|
|
306
|
+
case "end":
|
|
307
|
+
return _context.stop();
|
|
308
|
+
}
|
|
309
|
+
}, _callee);
|
|
310
|
+
})));
|
|
311
|
+
});
|
|
312
|
+
});
|
|
313
|
+
//# sourceMappingURL=image.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image.test.js","names":["_state","require","_image","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","jest","mock","Node","create","fn","config","mergeAttributes","_len","args","Array","_key","assign","concat","Plugin","MockPlugin","spec","ReactNodeViewRenderer","component","__esModule","React","createElement","setupPastePlugin","insertContent","editor","commands","mockClear","ImageUploadNode","addProseMirrorPlugins","call","expect","toHaveBeenCalledTimes","handlePaste","calls","props","describe","it","name","toBe","group","atom","selectable","draggable","attributes","addAttributes","toHaveProperty","loaded","toEqual","deleteStatus","alignment","percent","width","height","src","alt","rules","parseHTML","isArray","toHaveLength","HTMLAttributes","result","renderHTML","addNodeView","toBeDefined","context","addCommands","_typeof2","setImageUploadNode","mockCommands","toHaveBeenCalledWith","objectContaining","type","attrs","nodeKey","any","String","mockView","beforeEach","spyOn","global","mockImplementation","MockFileReader","readAsDataURL","_this","queueMicrotask","onload","afterEach","FileReader","mockRestore","plugins","_setupPastePlugin","event","clipboardData","items","kind","getAsFile","_setupPastePlugin2","_setupPastePlugin3","_asyncToGenerator2","_regenerator","mark","_callee","_setupPastePlugin4","file","wrap","_context","prev","next","File","Uint8Array","not","toHaveBeenCalled","Promise","resolve","stop"],"sources":["../../../src/extensions/__tests__/image.test.js"],"sourcesContent":["jest.mock('@tiptap/core', () => ({\n Node: { create: jest.fn((config) => config) },\n mergeAttributes: jest.fn((...args) => Object.assign({}, ...args)),\n}));\n\njest.mock('@tiptap/pm/state', () => ({\n Plugin: jest.fn(function MockPlugin(spec) {\n this.spec = spec;\n return { spec };\n }),\n}));\n\njest.mock('@tiptap/react', () => ({\n ReactNodeViewRenderer: jest.fn((component) => component),\n}));\n\njest.mock('../image-component', () => ({\n __esModule: true,\n default: jest.fn(() => <div data-testid=\"image-component\" />),\n}));\n\nimport { Plugin } from '@tiptap/pm/state';\nimport { ImageUploadNode } from '../image';\n\nfunction setupPastePlugin() {\n const insertContent = jest.fn();\n const editor = { commands: { insertContent } };\n Plugin.mockClear();\n ImageUploadNode.addProseMirrorPlugins.call({ editor });\n expect(Plugin).toHaveBeenCalledTimes(1);\n const handlePaste = Plugin.mock.calls[0][0].props.handlePaste;\n return { handlePaste, insertContent, editor };\n}\n\ndescribe('ImageUploadNode', () => {\n describe('configuration', () => {\n it('has correct name', () => {\n expect(ImageUploadNode.name).toBe('imageUploadNode');\n });\n\n it('is in block group', () => {\n expect(ImageUploadNode.group).toBe('block');\n });\n\n it('is atomic', () => {\n expect(ImageUploadNode.atom).toBe(true);\n });\n\n it('is selectable', () => {\n expect(ImageUploadNode.selectable).toBe(true);\n });\n\n it('is draggable', () => {\n expect(ImageUploadNode.draggable).toBe(true);\n });\n });\n\n describe('addAttributes', () => {\n it('returns all required attributes with defaults', () => {\n const attributes = ImageUploadNode.addAttributes();\n\n expect(attributes).toHaveProperty('loaded');\n expect(attributes).toHaveProperty('deleteStatus');\n expect(attributes).toHaveProperty('alignment');\n expect(attributes).toHaveProperty('percent');\n expect(attributes).toHaveProperty('width');\n expect(attributes).toHaveProperty('height');\n expect(attributes).toHaveProperty('src');\n expect(attributes).toHaveProperty('alt');\n\n expect(attributes.loaded).toEqual({ default: false });\n expect(attributes.deleteStatus).toEqual({ default: null });\n expect(attributes.alignment).toEqual({ default: null });\n expect(attributes.percent).toEqual({ default: null });\n expect(attributes.width).toEqual({ default: null });\n expect(attributes.height).toEqual({ default: null });\n expect(attributes.src).toEqual({ default: null });\n expect(attributes.alt).toEqual({ default: null });\n });\n });\n\n describe('parseHTML', () => {\n it('returns array with div selector', () => {\n const rules = ImageUploadNode.parseHTML();\n\n expect(Array.isArray(rules)).toBe(true);\n expect(rules).toHaveLength(1);\n expect(rules[0]).toHaveProperty('tag', 'img[data-type=\"image-upload-node\"]');\n });\n });\n\n describe('renderHTML', () => {\n it('renders img tag with data-type attribute', () => {\n const HTMLAttributes = {\n src: 'test.jpg',\n width: 100,\n height: 100,\n };\n\n const result = ImageUploadNode.renderHTML({ HTMLAttributes });\n\n expect(result[0]).toBe('img');\n expect(result[1]).toEqual({\n ...HTMLAttributes,\n 'data-type': 'image-upload-node',\n });\n });\n\n it('merges attributes correctly', () => {\n const HTMLAttributes = {\n src: 'test.jpg',\n alt: 'Test image',\n };\n\n const result = ImageUploadNode.renderHTML({ HTMLAttributes });\n\n expect(result[1].src).toBe('test.jpg');\n expect(result[1].alt).toBe('Test image');\n expect(result[1]['data-type']).toBe('image-upload-node');\n });\n });\n\n describe('addNodeView', () => {\n it('returns ReactNodeViewRenderer result', () => {\n const result = ImageUploadNode.addNodeView();\n\n expect(result).toBeDefined();\n });\n });\n\n describe('addCommands', () => {\n it('returns setImageUploadNode command', () => {\n const context = { name: 'imageUploadNode' };\n const commands = ImageUploadNode.addCommands.call(context);\n\n expect(commands).toHaveProperty('setImageUploadNode');\n expect(typeof commands.setImageUploadNode).toBe('function');\n });\n\n it('setImageUploadNode inserts content', () => {\n const context = { name: 'imageUploadNode' };\n const commands = ImageUploadNode.addCommands.call(context);\n const mockCommands = {\n insertContent: jest.fn(() => true),\n };\n const result = commands.setImageUploadNode()({ commands: mockCommands });\n expect(mockCommands.insertContent).toHaveBeenCalledWith(\n expect.objectContaining({\n type: 'imageUploadNode',\n attrs: expect.objectContaining({ nodeKey: expect.any(String) }),\n }),\n );\n expect(result).toBe(true);\n });\n });\n\n describe('addProseMirrorPlugins', () => {\n const mockView = {};\n\n beforeEach(() => {\n jest.spyOn(global, 'FileReader').mockImplementation(function MockFileReader() {\n this.readAsDataURL = function readAsDataURL() {\n this.result = 'data:image/png;base64,Zm9v';\n queueMicrotask(() => {\n if (this.onload) {\n this.onload();\n }\n });\n };\n });\n });\n\n afterEach(() => {\n global.FileReader.mockRestore();\n });\n\n it('registers one paste plugin', () => {\n const insertContent = jest.fn();\n const editor = { commands: { insertContent } };\n Plugin.mockClear();\n const plugins = ImageUploadNode.addProseMirrorPlugins.call({ editor });\n expect(plugins).toHaveLength(1);\n expect(Plugin).toHaveBeenCalledTimes(1);\n });\n\n it('handlePaste returns false when clipboard has no image file', () => {\n const { handlePaste } = setupPastePlugin();\n const event = {\n clipboardData: {\n items: [{ kind: 'string', type: 'text/plain', getAsFile: () => null }],\n },\n };\n expect(handlePaste(mockView, event)).toBe(false);\n });\n\n it('handlePaste returns false when clipboardData is missing', () => {\n const { handlePaste } = setupPastePlugin();\n const event = {};\n expect(handlePaste(mockView, event)).toBe(false);\n });\n\n it('handlePaste returns false when the file item has no file', () => {\n const { handlePaste } = setupPastePlugin();\n const event = {\n clipboardData: {\n items: [{ kind: 'file', type: 'image/png', getAsFile: () => null }],\n },\n };\n expect(handlePaste(mockView, event)).toBe(false);\n });\n\n it('handlePaste returns true and inserts imageUploadNode with data URL after read', async () => {\n const { handlePaste, insertContent } = setupPastePlugin();\n const file = new File([new Uint8Array([1, 2, 3])], 'p.png', { type: 'image/png' });\n const event = {\n clipboardData: {\n items: [{ kind: 'file', type: 'image/png', getAsFile: () => file }],\n },\n };\n\n expect(handlePaste(mockView, event)).toBe(true);\n expect(insertContent).not.toHaveBeenCalled();\n\n await new Promise((resolve) => queueMicrotask(resolve));\n\n expect(insertContent).toHaveBeenCalledWith(\n expect.objectContaining({\n type: 'imageUploadNode',\n attrs: expect.objectContaining({\n src: 'data:image/png;base64,Zm9v',\n loaded: true,\n }),\n }),\n );\n });\n });\n});\n"],"mappings":";;;;;;;AAqBA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAA2C,SAAAE,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,MAAA,CAAAC,IAAA,CAAAJ,CAAA,OAAAG,MAAA,CAAAE,qBAAA,QAAAC,CAAA,GAAAH,MAAA,CAAAE,qBAAA,CAAAL,CAAA,GAAAC,CAAA,KAAAK,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAN,CAAA,WAAAE,MAAA,CAAAK,wBAAA,CAAAR,CAAA,EAAAC,CAAA,EAAAQ,UAAA,OAAAP,CAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,CAAA,EAAAI,CAAA,YAAAJ,CAAA;AAAA,SAAAU,cAAAZ,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAY,SAAA,CAAAC,MAAA,EAAAb,CAAA,UAAAC,CAAA,WAAAW,SAAA,CAAAZ,CAAA,IAAAY,SAAA,CAAAZ,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAI,MAAA,CAAAD,CAAA,OAAAa,OAAA,WAAAd,CAAA,QAAAe,gBAAA,aAAAhB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAE,MAAA,CAAAc,yBAAA,GAAAd,MAAA,CAAAe,gBAAA,CAAAlB,CAAA,EAAAG,MAAA,CAAAc,yBAAA,CAAAf,CAAA,KAAAH,OAAA,CAAAI,MAAA,CAAAD,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAE,MAAA,CAAAgB,cAAA,CAAAnB,CAAA,EAAAC,CAAA,EAAAE,MAAA,CAAAK,wBAAA,CAAAN,CAAA,EAAAD,CAAA,iBAAAD,CAAA;AAtB3CoB,IAAI,CAACC,IAAI,CAAC,cAAc,EAAE;EAAA,OAAO;IAC/BC,IAAI,EAAE;MAAEC,MAAM,EAAEH,IAAI,CAACI,EAAE,CAAC,UAACC,MAAM;QAAA,OAAKA,MAAM;MAAA;IAAE,CAAC;IAC7CC,eAAe,EAAEN,IAAI,CAACI,EAAE,CAAC;MAAA,SAAAG,IAAA,GAAAd,SAAA,CAAAC,MAAA,EAAIc,IAAI,OAAAC,KAAA,CAAAF,IAAA,GAAAG,IAAA,MAAAA,IAAA,GAAAH,IAAA,EAAAG,IAAA;QAAJF,IAAI,CAAAE,IAAA,IAAAjB,SAAA,CAAAiB,IAAA;MAAA;MAAA,OAAK3B,MAAM,CAAC4B,MAAM,CAAApB,KAAA,CAAbR,MAAM,GAAQ,CAAC,CAAC,EAAA6B,MAAA,CAAKJ,IAAI,EAAC;IAAA;EAClE,CAAC;AAAA,CAAC,CAAC;AAEHR,IAAI,CAACC,IAAI,CAAC,kBAAkB,EAAE;EAAA,OAAO;IACnCY,MAAM,EAAEb,IAAI,CAACI,EAAE,CAAC,SAASU,UAAUA,CAACC,IAAI,EAAE;MACxC,IAAI,CAACA,IAAI,GAAGA,IAAI;MAChB,OAAO;QAAEA,IAAI,EAAJA;MAAK,CAAC;IACjB,CAAC;EACH,CAAC;AAAA,CAAC,CAAC;AAEHf,IAAI,CAACC,IAAI,CAAC,eAAe,EAAE;EAAA,OAAO;IAChCe,qBAAqB,EAAEhB,IAAI,CAACI,EAAE,CAAC,UAACa,SAAS;MAAA,OAAKA,SAAS;IAAA;EACzD,CAAC;AAAA,CAAC,CAAC;AAEHjB,IAAI,CAACC,IAAI,CAAC,oBAAoB,EAAE;EAAA,OAAO;IACrCiB,UAAU,EAAE,IAAI;IAChB,WAASlB,IAAI,CAACI,EAAE,CAAC;MAAA,oBAAMe,KAAA,CAAAC,aAAA;QAAK,eAAY;MAAiB,CAAE,CAAC;IAAA;EAC9D,CAAC;AAAA,CAAC,CAAC;AAKH,SAASC,gBAAgBA,CAAA,EAAG;EAC1B,IAAMC,aAAa,GAAGtB,IAAI,CAACI,EAAE,CAAC,CAAC;EAC/B,IAAMmB,MAAM,GAAG;IAAEC,QAAQ,EAAE;MAAEF,aAAa,EAAbA;IAAc;EAAE,CAAC;EAC9CT,aAAM,CAACY,SAAS,CAAC,CAAC;EAClBC,sBAAe,CAACC,qBAAqB,CAACC,IAAI,CAAC;IAAEL,MAAM,EAANA;EAAO,CAAC,CAAC;EACtDM,MAAM,CAAChB,aAAM,CAAC,CAACiB,qBAAqB,CAAC,CAAC,CAAC;EACvC,IAAMC,WAAW,GAAGlB,aAAM,CAACZ,IAAI,CAAC+B,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAACC,KAAK,CAACF,WAAW;EAC7D,OAAO;IAAEA,WAAW,EAAXA,WAAW;IAAET,aAAa,EAAbA,aAAa;IAAEC,MAAM,EAANA;EAAO,CAAC;AAC/C;AAEAW,QAAQ,CAAC,iBAAiB,EAAE,YAAM;EAChCA,QAAQ,CAAC,eAAe,EAAE,YAAM;IAC9BC,EAAE,CAAC,kBAAkB,EAAE,YAAM;MAC3BN,MAAM,CAACH,sBAAe,CAACU,IAAI,CAAC,CAACC,IAAI,CAAC,iBAAiB,CAAC;IACtD,CAAC,CAAC;IAEFF,EAAE,CAAC,mBAAmB,EAAE,YAAM;MAC5BN,MAAM,CAACH,sBAAe,CAACY,KAAK,CAAC,CAACD,IAAI,CAAC,OAAO,CAAC;IAC7C,CAAC,CAAC;IAEFF,EAAE,CAAC,WAAW,EAAE,YAAM;MACpBN,MAAM,CAACH,sBAAe,CAACa,IAAI,CAAC,CAACF,IAAI,CAAC,IAAI,CAAC;IACzC,CAAC,CAAC;IAEFF,EAAE,CAAC,eAAe,EAAE,YAAM;MACxBN,MAAM,CAACH,sBAAe,CAACc,UAAU,CAAC,CAACH,IAAI,CAAC,IAAI,CAAC;IAC/C,CAAC,CAAC;IAEFF,EAAE,CAAC,cAAc,EAAE,YAAM;MACvBN,MAAM,CAACH,sBAAe,CAACe,SAAS,CAAC,CAACJ,IAAI,CAAC,IAAI,CAAC;IAC9C,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFH,QAAQ,CAAC,eAAe,EAAE,YAAM;IAC9BC,EAAE,CAAC,+CAA+C,EAAE,YAAM;MACxD,IAAMO,UAAU,GAAGhB,sBAAe,CAACiB,aAAa,CAAC,CAAC;MAElDd,MAAM,CAACa,UAAU,CAAC,CAACE,cAAc,CAAC,QAAQ,CAAC;MAC3Cf,MAAM,CAACa,UAAU,CAAC,CAACE,cAAc,CAAC,cAAc,CAAC;MACjDf,MAAM,CAACa,UAAU,CAAC,CAACE,cAAc,CAAC,WAAW,CAAC;MAC9Cf,MAAM,CAACa,UAAU,CAAC,CAACE,cAAc,CAAC,SAAS,CAAC;MAC5Cf,MAAM,CAACa,UAAU,CAAC,CAACE,cAAc,CAAC,OAAO,CAAC;MAC1Cf,MAAM,CAACa,UAAU,CAAC,CAACE,cAAc,CAAC,QAAQ,CAAC;MAC3Cf,MAAM,CAACa,UAAU,CAAC,CAACE,cAAc,CAAC,KAAK,CAAC;MACxCf,MAAM,CAACa,UAAU,CAAC,CAACE,cAAc,CAAC,KAAK,CAAC;MAExCf,MAAM,CAACa,UAAU,CAACG,MAAM,CAAC,CAACC,OAAO,CAAC;QAAE,WAAS;MAAM,CAAC,CAAC;MACrDjB,MAAM,CAACa,UAAU,CAACK,YAAY,CAAC,CAACD,OAAO,CAAC;QAAE,WAAS;MAAK,CAAC,CAAC;MAC1DjB,MAAM,CAACa,UAAU,CAACM,SAAS,CAAC,CAACF,OAAO,CAAC;QAAE,WAAS;MAAK,CAAC,CAAC;MACvDjB,MAAM,CAACa,UAAU,CAACO,OAAO,CAAC,CAACH,OAAO,CAAC;QAAE,WAAS;MAAK,CAAC,CAAC;MACrDjB,MAAM,CAACa,UAAU,CAACQ,KAAK,CAAC,CAACJ,OAAO,CAAC;QAAE,WAAS;MAAK,CAAC,CAAC;MACnDjB,MAAM,CAACa,UAAU,CAACS,MAAM,CAAC,CAACL,OAAO,CAAC;QAAE,WAAS;MAAK,CAAC,CAAC;MACpDjB,MAAM,CAACa,UAAU,CAACU,GAAG,CAAC,CAACN,OAAO,CAAC;QAAE,WAAS;MAAK,CAAC,CAAC;MACjDjB,MAAM,CAACa,UAAU,CAACW,GAAG,CAAC,CAACP,OAAO,CAAC;QAAE,WAAS;MAAK,CAAC,CAAC;IACnD,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFZ,QAAQ,CAAC,WAAW,EAAE,YAAM;IAC1BC,EAAE,CAAC,iCAAiC,EAAE,YAAM;MAC1C,IAAMmB,KAAK,GAAG5B,sBAAe,CAAC6B,SAAS,CAAC,CAAC;MAEzC1B,MAAM,CAACpB,KAAK,CAAC+C,OAAO,CAACF,KAAK,CAAC,CAAC,CAACjB,IAAI,CAAC,IAAI,CAAC;MACvCR,MAAM,CAACyB,KAAK,CAAC,CAACG,YAAY,CAAC,CAAC,CAAC;MAC7B5B,MAAM,CAACyB,KAAK,CAAC,CAAC,CAAC,CAAC,CAACV,cAAc,CAAC,KAAK,EAAE,oCAAoC,CAAC;IAC9E,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFV,QAAQ,CAAC,YAAY,EAAE,YAAM;IAC3BC,EAAE,CAAC,0CAA0C,EAAE,YAAM;MACnD,IAAMuB,cAAc,GAAG;QACrBN,GAAG,EAAE,UAAU;QACfF,KAAK,EAAE,GAAG;QACVC,MAAM,EAAE;MACV,CAAC;MAED,IAAMQ,MAAM,GAAGjC,sBAAe,CAACkC,UAAU,CAAC;QAAEF,cAAc,EAAdA;MAAe,CAAC,CAAC;MAE7D7B,MAAM,CAAC8B,MAAM,CAAC,CAAC,CAAC,CAAC,CAACtB,IAAI,CAAC,KAAK,CAAC;MAC7BR,MAAM,CAAC8B,MAAM,CAAC,CAAC,CAAC,CAAC,CAACb,OAAO,CAAAtD,aAAA,CAAAA,aAAA,KACpBkE,cAAc;QACjB,WAAW,EAAE;MAAmB,EACjC,CAAC;IACJ,CAAC,CAAC;IAEFvB,EAAE,CAAC,6BAA6B,EAAE,YAAM;MACtC,IAAMuB,cAAc,GAAG;QACrBN,GAAG,EAAE,UAAU;QACfC,GAAG,EAAE;MACP,CAAC;MAED,IAAMM,MAAM,GAAGjC,sBAAe,CAACkC,UAAU,CAAC;QAAEF,cAAc,EAAdA;MAAe,CAAC,CAAC;MAE7D7B,MAAM,CAAC8B,MAAM,CAAC,CAAC,CAAC,CAACP,GAAG,CAAC,CAACf,IAAI,CAAC,UAAU,CAAC;MACtCR,MAAM,CAAC8B,MAAM,CAAC,CAAC,CAAC,CAACN,GAAG,CAAC,CAAChB,IAAI,CAAC,YAAY,CAAC;MACxCR,MAAM,CAAC8B,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAACtB,IAAI,CAAC,mBAAmB,CAAC;IAC1D,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFH,QAAQ,CAAC,aAAa,EAAE,YAAM;IAC5BC,EAAE,CAAC,sCAAsC,EAAE,YAAM;MAC/C,IAAMwB,MAAM,GAAGjC,sBAAe,CAACmC,WAAW,CAAC,CAAC;MAE5ChC,MAAM,CAAC8B,MAAM,CAAC,CAACG,WAAW,CAAC,CAAC;IAC9B,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF5B,QAAQ,CAAC,aAAa,EAAE,YAAM;IAC5BC,EAAE,CAAC,oCAAoC,EAAE,YAAM;MAC7C,IAAM4B,OAAO,GAAG;QAAE3B,IAAI,EAAE;MAAkB,CAAC;MAC3C,IAAMZ,QAAQ,GAAGE,sBAAe,CAACsC,WAAW,CAACpC,IAAI,CAACmC,OAAO,CAAC;MAE1DlC,MAAM,CAACL,QAAQ,CAAC,CAACoB,cAAc,CAAC,oBAAoB,CAAC;MACrDf,MAAM,KAAAoC,QAAA,aAAQzC,QAAQ,CAAC0C,kBAAkB,EAAC,CAAC7B,IAAI,CAAC,UAAU,CAAC;IAC7D,CAAC,CAAC;IAEFF,EAAE,CAAC,oCAAoC,EAAE,YAAM;MAC7C,IAAM4B,OAAO,GAAG;QAAE3B,IAAI,EAAE;MAAkB,CAAC;MAC3C,IAAMZ,QAAQ,GAAGE,sBAAe,CAACsC,WAAW,CAACpC,IAAI,CAACmC,OAAO,CAAC;MAC1D,IAAMI,YAAY,GAAG;QACnB7C,aAAa,EAAEtB,IAAI,CAACI,EAAE,CAAC;UAAA,OAAM,IAAI;QAAA;MACnC,CAAC;MACD,IAAMuD,MAAM,GAAGnC,QAAQ,CAAC0C,kBAAkB,CAAC,CAAC,CAAC;QAAE1C,QAAQ,EAAE2C;MAAa,CAAC,CAAC;MACxEtC,MAAM,CAACsC,YAAY,CAAC7C,aAAa,CAAC,CAAC8C,oBAAoB,CACrDvC,MAAM,CAACwC,gBAAgB,CAAC;QACtBC,IAAI,EAAE,iBAAiB;QACvBC,KAAK,EAAE1C,MAAM,CAACwC,gBAAgB,CAAC;UAAEG,OAAO,EAAE3C,MAAM,CAAC4C,GAAG,CAACC,MAAM;QAAE,CAAC;MAChE,CAAC,CACH,CAAC;MACD7C,MAAM,CAAC8B,MAAM,CAAC,CAACtB,IAAI,CAAC,IAAI,CAAC;IAC3B,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFH,QAAQ,CAAC,uBAAuB,EAAE,YAAM;IACtC,IAAMyC,QAAQ,GAAG,CAAC,CAAC;IAEnBC,UAAU,CAAC,YAAM;MACf5E,IAAI,CAAC6E,KAAK,CAACC,MAAM,EAAE,YAAY,CAAC,CAACC,kBAAkB,CAAC,SAASC,cAAcA,CAAA,EAAG;QAC5E,IAAI,CAACC,aAAa,GAAG,SAASA,aAAaA,CAAA,EAAG;UAAA,IAAAC,KAAA;UAC5C,IAAI,CAACvB,MAAM,GAAG,4BAA4B;UAC1CwB,cAAc,CAAC,YAAM;YACnB,IAAID,KAAI,CAACE,MAAM,EAAE;cACfF,KAAI,CAACE,MAAM,CAAC,CAAC;YACf;UACF,CAAC,CAAC;QACJ,CAAC;MACH,CAAC,CAAC;IACJ,CAAC,CAAC;IAEFC,SAAS,CAAC,YAAM;MACdP,MAAM,CAACQ,UAAU,CAACC,WAAW,CAAC,CAAC;IACjC,CAAC,CAAC;IAEFpD,EAAE,CAAC,4BAA4B,EAAE,YAAM;MACrC,IAAMb,aAAa,GAAGtB,IAAI,CAACI,EAAE,CAAC,CAAC;MAC/B,IAAMmB,MAAM,GAAG;QAAEC,QAAQ,EAAE;UAAEF,aAAa,EAAbA;QAAc;MAAE,CAAC;MAC9CT,aAAM,CAACY,SAAS,CAAC,CAAC;MAClB,IAAM+D,OAAO,GAAG9D,sBAAe,CAACC,qBAAqB,CAACC,IAAI,CAAC;QAAEL,MAAM,EAANA;MAAO,CAAC,CAAC;MACtEM,MAAM,CAAC2D,OAAO,CAAC,CAAC/B,YAAY,CAAC,CAAC,CAAC;MAC/B5B,MAAM,CAAChB,aAAM,CAAC,CAACiB,qBAAqB,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC;IAEFK,EAAE,CAAC,4DAA4D,EAAE,YAAM;MACrE,IAAAsD,iBAAA,GAAwBpE,gBAAgB,CAAC,CAAC;QAAlCU,WAAW,GAAA0D,iBAAA,CAAX1D,WAAW;MACnB,IAAM2D,KAAK,GAAG;QACZC,aAAa,EAAE;UACbC,KAAK,EAAE,CAAC;YAAEC,IAAI,EAAE,QAAQ;YAAEvB,IAAI,EAAE,YAAY;YAAEwB,SAAS,EAAE,SAAXA,SAASA,CAAA;cAAA,OAAQ,IAAI;YAAA;UAAC,CAAC;QACvE;MACF,CAAC;MACDjE,MAAM,CAACE,WAAW,CAAC4C,QAAQ,EAAEe,KAAK,CAAC,CAAC,CAACrD,IAAI,CAAC,KAAK,CAAC;IAClD,CAAC,CAAC;IAEFF,EAAE,CAAC,yDAAyD,EAAE,YAAM;MAClE,IAAA4D,kBAAA,GAAwB1E,gBAAgB,CAAC,CAAC;QAAlCU,WAAW,GAAAgE,kBAAA,CAAXhE,WAAW;MACnB,IAAM2D,KAAK,GAAG,CAAC,CAAC;MAChB7D,MAAM,CAACE,WAAW,CAAC4C,QAAQ,EAAEe,KAAK,CAAC,CAAC,CAACrD,IAAI,CAAC,KAAK,CAAC;IAClD,CAAC,CAAC;IAEFF,EAAE,CAAC,0DAA0D,EAAE,YAAM;MACnE,IAAA6D,kBAAA,GAAwB3E,gBAAgB,CAAC,CAAC;QAAlCU,WAAW,GAAAiE,kBAAA,CAAXjE,WAAW;MACnB,IAAM2D,KAAK,GAAG;QACZC,aAAa,EAAE;UACbC,KAAK,EAAE,CAAC;YAAEC,IAAI,EAAE,MAAM;YAAEvB,IAAI,EAAE,WAAW;YAAEwB,SAAS,EAAE,SAAXA,SAASA,CAAA;cAAA,OAAQ,IAAI;YAAA;UAAC,CAAC;QACpE;MACF,CAAC;MACDjE,MAAM,CAACE,WAAW,CAAC4C,QAAQ,EAAEe,KAAK,CAAC,CAAC,CAACrD,IAAI,CAAC,KAAK,CAAC;IAClD,CAAC,CAAC;IAEFF,EAAE,CAAC,+EAA+E,mBAAA8D,kBAAA,0BAAAC,YAAA,YAAAC,IAAA,CAAE,SAAAC,QAAA;MAAA,IAAAC,kBAAA,EAAAtE,WAAA,EAAAT,aAAA,EAAAgF,IAAA,EAAAZ,KAAA;MAAA,OAAAQ,YAAA,YAAAK,IAAA,WAAAC,QAAA;QAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;UAAA;YAAAL,kBAAA,GAC3ChF,gBAAgB,CAAC,CAAC,EAAjDU,WAAW,GAAAsE,kBAAA,CAAXtE,WAAW,EAAET,aAAa,GAAA+E,kBAAA,CAAb/E,aAAa;YAC5BgF,IAAI,GAAG,IAAIK,IAAI,CAAC,CAAC,IAAIC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE;cAAEtC,IAAI,EAAE;YAAY,CAAC,CAAC;YAC5EoB,KAAK,GAAG;cACZC,aAAa,EAAE;gBACbC,KAAK,EAAE,CAAC;kBAAEC,IAAI,EAAE,MAAM;kBAAEvB,IAAI,EAAE,WAAW;kBAAEwB,SAAS,EAAE,SAAXA,SAASA,CAAA;oBAAA,OAAQQ,IAAI;kBAAA;gBAAC,CAAC;cACpE;YACF,CAAC;YAEDzE,MAAM,CAACE,WAAW,CAAC4C,QAAQ,EAAEe,KAAK,CAAC,CAAC,CAACrD,IAAI,CAAC,IAAI,CAAC;YAC/CR,MAAM,CAACP,aAAa,CAAC,CAACuF,GAAG,CAACC,gBAAgB,CAAC,CAAC;YAACN,QAAA,CAAAE,IAAA;YAAA,OAEvC,IAAIK,OAAO,CAAC,UAACC,OAAO;cAAA,OAAK7B,cAAc,CAAC6B,OAAO,CAAC;YAAA,EAAC;UAAA;YAEvDnF,MAAM,CAACP,aAAa,CAAC,CAAC8C,oBAAoB,CACxCvC,MAAM,CAACwC,gBAAgB,CAAC;cACtBC,IAAI,EAAE,iBAAiB;cACvBC,KAAK,EAAE1C,MAAM,CAACwC,gBAAgB,CAAC;gBAC7BjB,GAAG,EAAE,4BAA4B;gBACjCP,MAAM,EAAE;cACV,CAAC;YACH,CAAC,CACH,CAAC;UAAC;UAAA;YAAA,OAAA2D,QAAA,CAAAS,IAAA;QAAA;MAAA,GAAAb,OAAA;IAAA,CACH,GAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
|