@pie-lib/editable-html-tip-tap 2.1.20-beta.6 → 2.1.20-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 (94) hide show
  1. package/lib/__tests__/EditableHtml.test.js +831 -0
  2. package/lib/__tests__/constants.test.js +21 -0
  3. package/lib/__tests__/div-to-paragraph-conversion.test.js +213 -0
  4. package/lib/__tests__/extensions.test.js +209 -0
  5. package/lib/__tests__/index.test.js +250 -0
  6. package/lib/__tests__/size-utils.test.js +57 -0
  7. package/lib/__tests__/spellcheck.test.js +142 -0
  8. package/lib/__tests__/theme.test.js +17 -0
  9. package/lib/components/__tests__/AltDialog.test.js +201 -0
  10. package/lib/components/__tests__/CharacterPicker.test.js +455 -0
  11. package/lib/components/__tests__/CssIcon.test.js +58 -0
  12. package/lib/components/__tests__/DragInTheBlank.test.js +295 -0
  13. package/lib/components/__tests__/ExplicitConstructedResponse.test.js +345 -0
  14. package/lib/components/__tests__/ImageToolbar.test.js +185 -0
  15. package/lib/components/__tests__/InlineDropdown.test.js +839 -0
  16. package/lib/components/__tests__/InsertImageHandler.test.js +171 -0
  17. package/lib/components/__tests__/MediaDialog.test.js +433 -0
  18. package/lib/components/__tests__/MediaToolbar.test.js +126 -0
  19. package/lib/components/__tests__/MediaWrapper.test.js +96 -0
  20. package/lib/components/__tests__/MenuBar.test.js +502 -0
  21. package/lib/components/__tests__/RespArea.test.js +171 -0
  22. package/lib/components/__tests__/TableIcons.test.js +153 -0
  23. package/lib/components/__tests__/TextAlign.test.js +209 -0
  24. package/lib/components/__tests__/TiptapContainer.test.js +196 -0
  25. package/lib/components/__tests__/characterUtils.test.js +178 -0
  26. package/lib/components/__tests__/choice.test.js +213 -0
  27. package/lib/components/__tests__/custom-popper.test.js +108 -0
  28. package/lib/components/__tests__/done-button.test.js +72 -0
  29. package/lib/components/__tests__/toolbar-buttons.test.js +277 -0
  30. package/lib/components/respArea/DragInTheBlank/__tests__/choice.test.js +90 -0
  31. package/lib/components/respArea/__tests__/MathTemplated.test.js +217 -0
  32. package/lib/extensions/__tests__/css.test.js +214 -0
  33. package/lib/extensions/__tests__/custom-toolbar-wrapper.test.js +175 -0
  34. package/lib/extensions/__tests__/divNode.test.js +108 -0
  35. package/lib/extensions/__tests__/ensure-empty-root-div.test.js +50 -0
  36. package/lib/extensions/__tests__/ensure-list-item-content-is-div.test.js +60 -0
  37. package/lib/extensions/__tests__/extended-list-item.test.js +13 -0
  38. package/lib/extensions/__tests__/extended-table-cell.test.js +15 -0
  39. package/lib/extensions/__tests__/extended-table.test.js +200 -0
  40. package/lib/extensions/__tests__/image-component.test.js +432 -0
  41. package/lib/extensions/__tests__/image.test.js +313 -0
  42. package/lib/extensions/__tests__/math.test.js +1411 -0
  43. package/lib/extensions/__tests__/media-node-view.test.js +307 -0
  44. package/lib/extensions/__tests__/media.test.js +292 -0
  45. package/lib/extensions/__tests__/responseArea.test.js +736 -0
  46. package/lib/utils/__tests__/helper.test.js +107 -0
  47. package/lib/utils/__tests__/toolbar.test.js +38 -0
  48. package/package.json +3 -3
  49. package/src/__tests__/EditableHtml.test.jsx +588 -0
  50. package/src/__tests__/constants.test.js +19 -0
  51. package/src/__tests__/div-to-paragraph-conversion.test.jsx +125 -0
  52. package/src/__tests__/extensions.test.js +208 -0
  53. package/src/__tests__/index.test.jsx +154 -0
  54. package/src/__tests__/size-utils.test.js +64 -0
  55. package/src/__tests__/theme.test.js +17 -0
  56. package/src/components/__tests__/AltDialog.test.jsx +147 -0
  57. package/src/components/__tests__/CharacterPicker.test.jsx +270 -0
  58. package/src/components/__tests__/CssIcon.test.jsx +46 -0
  59. package/src/components/__tests__/DragInTheBlank.test.jsx +255 -0
  60. package/src/components/__tests__/ExplicitConstructedResponse.test.jsx +209 -0
  61. package/src/components/__tests__/ImageToolbar.test.jsx +128 -0
  62. package/src/components/__tests__/InlineDropdown.test.jsx +557 -0
  63. package/src/components/__tests__/InsertImageHandler.test.js +161 -0
  64. package/src/components/__tests__/MediaDialog.test.jsx +293 -0
  65. package/src/components/__tests__/MediaToolbar.test.jsx +74 -0
  66. package/src/components/__tests__/MediaWrapper.test.jsx +81 -0
  67. package/src/components/__tests__/MenuBar.test.jsx +250 -0
  68. package/src/components/__tests__/RespArea.test.jsx +122 -0
  69. package/src/components/__tests__/TableIcons.test.jsx +149 -0
  70. package/src/components/__tests__/TextAlign.test.jsx +167 -0
  71. package/src/components/__tests__/TiptapContainer.test.jsx +138 -0
  72. package/src/components/__tests__/characterUtils.test.js +166 -0
  73. package/src/components/__tests__/choice.test.jsx +171 -0
  74. package/src/components/__tests__/custom-popper.test.jsx +82 -0
  75. package/src/components/__tests__/done-button.test.jsx +54 -0
  76. package/src/components/__tests__/toolbar-buttons.test.jsx +234 -0
  77. package/src/components/respArea/DragInTheBlank/__tests__/choice.test.jsx +72 -0
  78. package/src/components/respArea/__tests__/MathTemplated.test.jsx +210 -0
  79. package/src/extensions/__tests__/css.test.js +196 -0
  80. package/src/extensions/__tests__/custom-toolbar-wrapper.test.jsx +180 -0
  81. package/src/extensions/__tests__/divNode.test.js +87 -0
  82. package/src/extensions/__tests__/ensure-empty-root-div.test.js +57 -0
  83. package/src/extensions/__tests__/ensure-list-item-content-is-div.test.js +44 -0
  84. package/src/extensions/__tests__/extended-list-item.test.js +13 -0
  85. package/src/extensions/__tests__/extended-table-cell.test.js +22 -0
  86. package/src/extensions/__tests__/extended-table.test.js +183 -0
  87. package/src/extensions/__tests__/image-component.test.jsx +346 -0
  88. package/src/extensions/__tests__/image.test.js +237 -0
  89. package/src/extensions/__tests__/math.test.js +900 -0
  90. package/src/extensions/__tests__/media-node-view.test.jsx +298 -0
  91. package/src/extensions/__tests__/media.test.js +271 -0
  92. package/src/extensions/__tests__/responseArea.test.js +655 -0
  93. package/src/utils/__tests__/helper.test.js +126 -0
  94. package/src/utils/__tests__/toolbar.test.js +43 -0
@@ -0,0 +1,200 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
6
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
7
+ var _extendedTable = _interopRequireWildcard(require("../extended-table"));
8
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
9
+ var mockTableViewState = {
10
+ updateReturns: true
11
+ };
12
+ jest.mock('@tiptap/extension-table', function () {
13
+ return {
14
+ Table: {
15
+ extend: jest.fn(function (config) {
16
+ return config;
17
+ })
18
+ },
19
+ TableView: /*#__PURE__*/function () {
20
+ function TableView() {
21
+ (0, _classCallCheck2["default"])(this, TableView);
22
+ this.table = {
23
+ style: {
24
+ setProperty: jest.fn()
25
+ },
26
+ setAttribute: jest.fn()
27
+ };
28
+ }
29
+ return (0, _createClass2["default"])(TableView, [{
30
+ key: "update",
31
+ value: function update() {
32
+ return mockTableViewState.updateReturns;
33
+ }
34
+ }]);
35
+ }()
36
+ };
37
+ });
38
+ describe('ExtendedTable', function () {
39
+ beforeEach(function () {
40
+ mockTableViewState.updateReturns = true;
41
+ });
42
+ describe('applyPresentationToTableElement', function () {
43
+ it('sets default border and theme styles', function () {
44
+ var table = document.createElement('table');
45
+ var setProperty = jest.spyOn(table.style, 'setProperty');
46
+ (0, _extendedTable.applyPresentationToTableElement)(table, {});
47
+ expect(table.getAttribute('border')).toBe('1');
48
+ expect(setProperty).toHaveBeenCalledWith('color', 'var(--pie-text, black)');
49
+ expect(setProperty).toHaveBeenCalledWith('background-color', 'var(--pie-background, rgba(255, 255, 255))');
50
+ setProperty.mockRestore();
51
+ });
52
+ it('uses explicit border from attrs', function () {
53
+ var table = document.createElement('table');
54
+ (0, _extendedTable.applyPresentationToTableElement)(table, {
55
+ border: '0'
56
+ });
57
+ expect(table.getAttribute('border')).toBe('0');
58
+ });
59
+ it('treats empty border as default', function () {
60
+ var table = document.createElement('table');
61
+ (0, _extendedTable.applyPresentationToTableElement)(table, {
62
+ border: ''
63
+ });
64
+ expect(table.getAttribute('border')).toBe('1');
65
+ });
66
+ });
67
+ describe('ExtendedTableView', function () {
68
+ it('applies presentation after construction', function () {
69
+ var node = {
70
+ attrs: {
71
+ border: '2'
72
+ }
73
+ };
74
+ var view = new _extendedTable.ExtendedTableView(node, 25);
75
+ expect(view.table.setAttribute).toHaveBeenCalledWith('border', '2');
76
+ expect(view.table.style.setProperty).toHaveBeenCalledWith('color', 'var(--pie-text, black)');
77
+ expect(view.table.style.setProperty).toHaveBeenCalledWith('background-color', 'var(--pie-background, rgba(255, 255, 255))');
78
+ });
79
+ it('reapplies presentation when super.update returns true', function () {
80
+ var view = new _extendedTable.ExtendedTableView({
81
+ attrs: {
82
+ border: '1'
83
+ }
84
+ }, 25);
85
+ view.table.setAttribute.mockClear();
86
+ view.table.style.setProperty.mockClear();
87
+ view.update({
88
+ attrs: {
89
+ border: '0'
90
+ }
91
+ });
92
+ expect(view.table.setAttribute).toHaveBeenCalledWith('border', '0');
93
+ expect(view.table.style.setProperty).toHaveBeenCalledWith('color', 'var(--pie-text, black)');
94
+ expect(view.table.style.setProperty).toHaveBeenCalledWith('background-color', 'var(--pie-background, rgba(255, 255, 255))');
95
+ });
96
+ it('does not reapply presentation when super.update returns false', function () {
97
+ mockTableViewState.updateReturns = false;
98
+ var view = new _extendedTable.ExtendedTableView({
99
+ attrs: {
100
+ border: '1'
101
+ }
102
+ }, 25);
103
+ view.table.setAttribute.mockClear();
104
+ view.table.style.setProperty.mockClear();
105
+ var ok = view.update({
106
+ attrs: {
107
+ border: '0'
108
+ }
109
+ });
110
+ expect(ok).toBe(false);
111
+ expect(view.table.setAttribute).not.toHaveBeenCalled();
112
+ expect(view.table.style.setProperty).not.toHaveBeenCalled();
113
+ });
114
+ });
115
+ describe('addOptions', function () {
116
+ it('enables resizable table view with zero handle width for colgroup sync', function () {
117
+ var options = _extendedTable["default"].addOptions();
118
+ expect(options.resizable).toBe(true);
119
+ expect(options.handleWidth).toBe(0);
120
+ expect(options.View).toBe(_extendedTable.ExtendedTableView);
121
+ });
122
+ });
123
+ describe('addAttributes', function () {
124
+ it('returns border attribute with default value', function () {
125
+ var attributes = _extendedTable["default"].addAttributes();
126
+ expect(attributes).toHaveProperty('border');
127
+ expect(attributes.border).toEqual({
128
+ "default": '1'
129
+ });
130
+ });
131
+ });
132
+ describe('renderHTML', function () {
133
+ it('renders table with default border', function () {
134
+ var props = {
135
+ HTMLAttributes: {}
136
+ };
137
+ var mockParent = jest.fn(function () {
138
+ return ['table', {
139
+ style: ''
140
+ }];
141
+ });
142
+ var context = {
143
+ parent: mockParent
144
+ };
145
+ var result = _extendedTable["default"].renderHTML.call(context, props);
146
+ expect(mockParent).toHaveBeenCalledWith(props);
147
+ expect(result[0]).toBe('table');
148
+ expect(result[1]).toHaveProperty('style');
149
+ });
150
+ it('renders table with custom border', function () {
151
+ var props = {
152
+ HTMLAttributes: {
153
+ border: '2'
154
+ }
155
+ };
156
+ var mockParent = jest.fn(function () {
157
+ return ['table', {
158
+ style: ''
159
+ }];
160
+ });
161
+ var context = {
162
+ parent: mockParent
163
+ };
164
+ var result = _extendedTable["default"].renderHTML.call(context, props);
165
+ expect(result[1].border).toBe('2');
166
+ });
167
+ it('handles styles ending with semicolon', function () {
168
+ var props = {
169
+ HTMLAttributes: {}
170
+ };
171
+ var mockParent = jest.fn(function () {
172
+ return ['table', {
173
+ style: 'padding: 5px;'
174
+ }];
175
+ });
176
+ var context = {
177
+ parent: mockParent
178
+ };
179
+ var result = _extendedTable["default"].renderHTML.call(context, props);
180
+ expect(result[1].style).toContain('padding: 5px;');
181
+ });
182
+ it('includes CSS custom properties', function () {
183
+ var props = {
184
+ HTMLAttributes: {}
185
+ };
186
+ var mockParent = jest.fn(function () {
187
+ return ['table', {
188
+ style: ''
189
+ }];
190
+ });
191
+ var context = {
192
+ parent: mockParent
193
+ };
194
+ var result = _extendedTable["default"].renderHTML.call(context, props);
195
+ expect(result[1].style).toContain('color: var(--pie-text, black)');
196
+ expect(result[1].style).toContain('background-color: var(--pie-background, rgba(255, 255, 255))');
197
+ });
198
+ });
199
+ });
200
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXh0ZW5kZWRUYWJsZSIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJzZXQiLCJfdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwibW9ja1RhYmxlVmlld1N0YXRlIiwidXBkYXRlUmV0dXJucyIsImplc3QiLCJtb2NrIiwiVGFibGUiLCJleHRlbmQiLCJmbiIsImNvbmZpZyIsIlRhYmxlVmlldyIsIl9jbGFzc0NhbGxDaGVjazIiLCJ0YWJsZSIsInN0eWxlIiwic2V0UHJvcGVydHkiLCJzZXRBdHRyaWJ1dGUiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwidmFsdWUiLCJ1cGRhdGUiLCJkZXNjcmliZSIsImJlZm9yZUVhY2giLCJpdCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInNweU9uIiwiYXBwbHlQcmVzZW50YXRpb25Ub1RhYmxlRWxlbWVudCIsImV4cGVjdCIsImdldEF0dHJpYnV0ZSIsInRvQmUiLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCIsIm1vY2tSZXN0b3JlIiwiYm9yZGVyIiwibm9kZSIsImF0dHJzIiwidmlldyIsIkV4dGVuZGVkVGFibGVWaWV3IiwibW9ja0NsZWFyIiwib2siLCJub3QiLCJ0b0hhdmVCZWVuQ2FsbGVkIiwib3B0aW9ucyIsIkV4dGVuZGVkVGFibGUiLCJhZGRPcHRpb25zIiwicmVzaXphYmxlIiwiaGFuZGxlV2lkdGgiLCJWaWV3IiwiYXR0cmlidXRlcyIsImFkZEF0dHJpYnV0ZXMiLCJ0b0hhdmVQcm9wZXJ0eSIsInRvRXF1YWwiLCJwcm9wcyIsIkhUTUxBdHRyaWJ1dGVzIiwibW9ja1BhcmVudCIsImNvbnRleHQiLCJwYXJlbnQiLCJyZXN1bHQiLCJyZW5kZXJIVE1MIiwidG9Db250YWluIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2V4dGVuc2lvbnMvX190ZXN0c19fL2V4dGVuZGVkLXRhYmxlLnRlc3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEV4dGVuZGVkVGFibGUsIHsgYXBwbHlQcmVzZW50YXRpb25Ub1RhYmxlRWxlbWVudCwgRXh0ZW5kZWRUYWJsZVZpZXcgfSBmcm9tICcuLi9leHRlbmRlZC10YWJsZSc7XG5cbmNvbnN0IG1vY2tUYWJsZVZpZXdTdGF0ZSA9IHsgdXBkYXRlUmV0dXJuczogdHJ1ZSB9O1xuXG5qZXN0Lm1vY2soJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlJywgKCkgPT4gKHtcbiAgVGFibGU6IHtcbiAgICBleHRlbmQ6IGplc3QuZm4oKGNvbmZpZykgPT4gY29uZmlnKSxcbiAgfSxcbiAgVGFibGVWaWV3OiBjbGFzcyBUYWJsZVZpZXcge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgdGhpcy50YWJsZSA9IHtcbiAgICAgICAgc3R5bGU6IHsgc2V0UHJvcGVydHk6IGplc3QuZm4oKSB9LFxuICAgICAgICBzZXRBdHRyaWJ1dGU6IGplc3QuZm4oKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdXBkYXRlKCkge1xuICAgICAgcmV0dXJuIG1vY2tUYWJsZVZpZXdTdGF0ZS51cGRhdGVSZXR1cm5zO1xuICAgIH1cbiAgfSxcbn0pKTtcblxuZGVzY3JpYmUoJ0V4dGVuZGVkVGFibGUnLCAoKSA9PiB7XG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIG1vY2tUYWJsZVZpZXdTdGF0ZS51cGRhdGVSZXR1cm5zID0gdHJ1ZTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2FwcGx5UHJlc2VudGF0aW9uVG9UYWJsZUVsZW1lbnQnLCAoKSA9PiB7XG4gICAgaXQoJ3NldHMgZGVmYXVsdCBib3JkZXIgYW5kIHRoZW1lIHN0eWxlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGFibGUnKTtcbiAgICAgIGNvbnN0IHNldFByb3BlcnR5ID0gamVzdC5zcHlPbih0YWJsZS5zdHlsZSwgJ3NldFByb3BlcnR5Jyk7XG5cbiAgICAgIGFwcGx5UHJlc2VudGF0aW9uVG9UYWJsZUVsZW1lbnQodGFibGUsIHt9KTtcblxuICAgICAgZXhwZWN0KHRhYmxlLmdldEF0dHJpYnV0ZSgnYm9yZGVyJykpLnRvQmUoJzEnKTtcbiAgICAgIGV4cGVjdChzZXRQcm9wZXJ0eSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ2NvbG9yJywgJ3ZhcigtLXBpZS10ZXh0LCBibGFjayknKTtcbiAgICAgIGV4cGVjdChzZXRQcm9wZXJ0eSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ2JhY2tncm91bmQtY29sb3InLCAndmFyKC0tcGllLWJhY2tncm91bmQsIHJnYmEoMjU1LCAyNTUsIDI1NSkpJyk7XG4gICAgICBzZXRQcm9wZXJ0eS5tb2NrUmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3VzZXMgZXhwbGljaXQgYm9yZGVyIGZyb20gYXR0cnMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RhYmxlJyk7XG4gICAgICBhcHBseVByZXNlbnRhdGlvblRvVGFibGVFbGVtZW50KHRhYmxlLCB7IGJvcmRlcjogJzAnIH0pO1xuXG4gICAgICBleHBlY3QodGFibGUuZ2V0QXR0cmlidXRlKCdib3JkZXInKSkudG9CZSgnMCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3RyZWF0cyBlbXB0eSBib3JkZXIgYXMgZGVmYXVsdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGFibGUnKTtcbiAgICAgIGFwcGx5UHJlc2VudGF0aW9uVG9UYWJsZUVsZW1lbnQodGFibGUsIHsgYm9yZGVyOiAnJyB9KTtcblxuICAgICAgZXhwZWN0KHRhYmxlLmdldEF0dHJpYnV0ZSgnYm9yZGVyJykpLnRvQmUoJzEnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0V4dGVuZGVkVGFibGVWaWV3JywgKCkgPT4ge1xuICAgIGl0KCdhcHBsaWVzIHByZXNlbnRhdGlvbiBhZnRlciBjb25zdHJ1Y3Rpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCBub2RlID0geyBhdHRyczogeyBib3JkZXI6ICcyJyB9IH07XG4gICAgICBjb25zdCB2aWV3ID0gbmV3IEV4dGVuZGVkVGFibGVWaWV3KG5vZGUsIDI1KTtcblxuICAgICAgZXhwZWN0KHZpZXcudGFibGUuc2V0QXR0cmlidXRlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnYm9yZGVyJywgJzInKTtcbiAgICAgIGV4cGVjdCh2aWV3LnRhYmxlLnN0eWxlLnNldFByb3BlcnR5KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnY29sb3InLCAndmFyKC0tcGllLXRleHQsIGJsYWNrKScpO1xuICAgICAgZXhwZWN0KHZpZXcudGFibGUuc3R5bGUuc2V0UHJvcGVydHkpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgICAnYmFja2dyb3VuZC1jb2xvcicsXG4gICAgICAgICd2YXIoLS1waWUtYmFja2dyb3VuZCwgcmdiYSgyNTUsIDI1NSwgMjU1KSknLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZWFwcGxpZXMgcHJlc2VudGF0aW9uIHdoZW4gc3VwZXIudXBkYXRlIHJldHVybnMgdHJ1ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHZpZXcgPSBuZXcgRXh0ZW5kZWRUYWJsZVZpZXcoeyBhdHRyczogeyBib3JkZXI6ICcxJyB9IH0sIDI1KTtcbiAgICAgIHZpZXcudGFibGUuc2V0QXR0cmlidXRlLm1vY2tDbGVhcigpO1xuICAgICAgdmlldy50YWJsZS5zdHlsZS5zZXRQcm9wZXJ0eS5tb2NrQ2xlYXIoKTtcblxuICAgICAgdmlldy51cGRhdGUoeyBhdHRyczogeyBib3JkZXI6ICcwJyB9IH0pO1xuXG4gICAgICBleHBlY3Qodmlldy50YWJsZS5zZXRBdHRyaWJ1dGUpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCdib3JkZXInLCAnMCcpO1xuICAgICAgZXhwZWN0KHZpZXcudGFibGUuc3R5bGUuc2V0UHJvcGVydHkpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCdjb2xvcicsICd2YXIoLS1waWUtdGV4dCwgYmxhY2spJyk7XG4gICAgICBleHBlY3Qodmlldy50YWJsZS5zdHlsZS5zZXRQcm9wZXJ0eSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJyxcbiAgICAgICAgJ3ZhcigtLXBpZS1iYWNrZ3JvdW5kLCByZ2JhKDI1NSwgMjU1LCAyNTUpKScsXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IHJlYXBwbHkgcHJlc2VudGF0aW9uIHdoZW4gc3VwZXIudXBkYXRlIHJldHVybnMgZmFsc2UnLCAoKSA9PiB7XG4gICAgICBtb2NrVGFibGVWaWV3U3RhdGUudXBkYXRlUmV0dXJucyA9IGZhbHNlO1xuICAgICAgY29uc3QgdmlldyA9IG5ldyBFeHRlbmRlZFRhYmxlVmlldyh7IGF0dHJzOiB7IGJvcmRlcjogJzEnIH0gfSwgMjUpO1xuICAgICAgdmlldy50YWJsZS5zZXRBdHRyaWJ1dGUubW9ja0NsZWFyKCk7XG4gICAgICB2aWV3LnRhYmxlLnN0eWxlLnNldFByb3BlcnR5Lm1vY2tDbGVhcigpO1xuXG4gICAgICBjb25zdCBvayA9IHZpZXcudXBkYXRlKHsgYXR0cnM6IHsgYm9yZGVyOiAnMCcgfSB9KTtcblxuICAgICAgZXhwZWN0KG9rKS50b0JlKGZhbHNlKTtcbiAgICAgIGV4cGVjdCh2aWV3LnRhYmxlLnNldEF0dHJpYnV0ZSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICAgIGV4cGVjdCh2aWV3LnRhYmxlLnN0eWxlLnNldFByb3BlcnR5KS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYWRkT3B0aW9ucycsICgpID0+IHtcbiAgICBpdCgnZW5hYmxlcyByZXNpemFibGUgdGFibGUgdmlldyB3aXRoIHplcm8gaGFuZGxlIHdpZHRoIGZvciBjb2xncm91cCBzeW5jJywgKCkgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IEV4dGVuZGVkVGFibGUuYWRkT3B0aW9ucygpO1xuICAgICAgZXhwZWN0KG9wdGlvbnMucmVzaXphYmxlKS50b0JlKHRydWUpO1xuICAgICAgZXhwZWN0KG9wdGlvbnMuaGFuZGxlV2lkdGgpLnRvQmUoMCk7XG4gICAgICBleHBlY3Qob3B0aW9ucy5WaWV3KS50b0JlKEV4dGVuZGVkVGFibGVWaWV3KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2FkZEF0dHJpYnV0ZXMnLCAoKSA9PiB7XG4gICAgaXQoJ3JldHVybnMgYm9yZGVyIGF0dHJpYnV0ZSB3aXRoIGRlZmF1bHQgdmFsdWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBhdHRyaWJ1dGVzID0gRXh0ZW5kZWRUYWJsZS5hZGRBdHRyaWJ1dGVzKCk7XG4gICAgICBleHBlY3QoYXR0cmlidXRlcykudG9IYXZlUHJvcGVydHkoJ2JvcmRlcicpO1xuICAgICAgZXhwZWN0KGF0dHJpYnV0ZXMuYm9yZGVyKS50b0VxdWFsKHsgZGVmYXVsdDogJzEnIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncmVuZGVySFRNTCcsICgpID0+IHtcbiAgICBpdCgncmVuZGVycyB0YWJsZSB3aXRoIGRlZmF1bHQgYm9yZGVyJywgKCkgPT4ge1xuICAgICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICAgIEhUTUxBdHRyaWJ1dGVzOiB7fSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG1vY2tQYXJlbnQgPSBqZXN0LmZuKCgpID0+IFsndGFibGUnLCB7IHN0eWxlOiAnJyB9XSk7XG5cbiAgICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAgIHBhcmVudDogbW9ja1BhcmVudCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IEV4dGVuZGVkVGFibGUucmVuZGVySFRNTC5jYWxsKGNvbnRleHQsIHByb3BzKTtcblxuICAgICAgZXhwZWN0KG1vY2tQYXJlbnQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHByb3BzKTtcbiAgICAgIGV4cGVjdChyZXN1bHRbMF0pLnRvQmUoJ3RhYmxlJyk7XG4gICAgICBleHBlY3QocmVzdWx0WzFdKS50b0hhdmVQcm9wZXJ0eSgnc3R5bGUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIHRhYmxlIHdpdGggY3VzdG9tIGJvcmRlcicsICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgICBIVE1MQXR0cmlidXRlczogeyBib3JkZXI6ICcyJyB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgbW9ja1BhcmVudCA9IGplc3QuZm4oKCkgPT4gWyd0YWJsZScsIHsgc3R5bGU6ICcnIH1dKTtcblxuICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgcGFyZW50OiBtb2NrUGFyZW50LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gRXh0ZW5kZWRUYWJsZS5yZW5kZXJIVE1MLmNhbGwoY29udGV4dCwgcHJvcHMpO1xuXG4gICAgICBleHBlY3QocmVzdWx0WzFdLmJvcmRlcikudG9CZSgnMicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgc3R5bGVzIGVuZGluZyB3aXRoIHNlbWljb2xvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgICBIVE1MQXR0cmlidXRlczoge30sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBtb2NrUGFyZW50ID0gamVzdC5mbigoKSA9PiBbJ3RhYmxlJywgeyBzdHlsZTogJ3BhZGRpbmc6IDVweDsnIH1dKTtcblxuICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgcGFyZW50OiBtb2NrUGFyZW50LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gRXh0ZW5kZWRUYWJsZS5yZW5kZXJIVE1MLmNhbGwoY29udGV4dCwgcHJvcHMpO1xuXG4gICAgICBleHBlY3QocmVzdWx0WzFdLnN0eWxlKS50b0NvbnRhaW4oJ3BhZGRpbmc6IDVweDsnKTtcbiAgICB9KTtcblxuICAgIGl0KCdpbmNsdWRlcyBDU1MgY3VzdG9tIHByb3BlcnRpZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgICAgSFRNTEF0dHJpYnV0ZXM6IHt9LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgbW9ja1BhcmVudCA9IGplc3QuZm4oKCkgPT4gWyd0YWJsZScsIHsgc3R5bGU6ICcnIH1dKTtcblxuICAgICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICAgcGFyZW50OiBtb2NrUGFyZW50LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gRXh0ZW5kZWRUYWJsZS5yZW5kZXJIVE1MLmNhbGwoY29udGV4dCwgcHJvcHMpO1xuXG4gICAgICBleHBlY3QocmVzdWx0WzFdLnN0eWxlKS50b0NvbnRhaW4oJ2NvbG9yOiB2YXIoLS1waWUtdGV4dCwgYmxhY2spJyk7XG4gICAgICBleHBlY3QocmVzdWx0WzFdLnN0eWxlKS50b0NvbnRhaW4oJ2JhY2tncm91bmQtY29sb3I6IHZhcigtLXBpZS1iYWNrZ3JvdW5kLCByZ2JhKDI1NSwgMjU1LCAyNTUpKScpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxjQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFBc0csU0FBQUQsd0JBQUFFLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFKLHVCQUFBLFlBQUFBLHdCQUFBRSxDQUFBLEVBQUFDLENBQUEsU0FBQUEsQ0FBQSxJQUFBRCxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxTQUFBTCxDQUFBLE1BQUFNLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLEtBQUFDLFNBQUEsbUJBQUFU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