@hufe921/canvas-editor 0.9.129 → 0.9.131

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 CHANGED
@@ -1,3 +1,37 @@
1
+ ## [0.9.131](https://github.com/Hufe921/canvas-editor/compare/v0.9.130...v0.9.131) (2026-04-10)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * multiple consecutive lists rendering extra blank lines #1389 ([f344b74](https://github.com/Hufe921/canvas-editor/commit/f344b74bb342408a8f39cdae4d06782e8c5945db)), closes [#1389](https://github.com/Hufe921/canvas-editor/issues/1389)
7
+ * table cell adaptive row height #1388 ([8d23ce3](https://github.com/Hufe921/canvas-editor/commit/8d23ce3fa8eb8edacd0dcf4652c78eb71ded50a4)), closes [#1388](https://github.com/Hufe921/canvas-editor/issues/1388)
8
+ * terminate workers and disconnect observer when editor destroy ([132b992](https://github.com/Hufe921/canvas-editor/commit/132b9927df698012a46e597265fadc5ce0be56f2))
9
+
10
+
11
+ ### Features
12
+
13
+ * add filterEmptyControl option to print mode #1385 ([81a6c86](https://github.com/Hufe921/canvas-editor/commit/81a6c86ab0736461f77b821401b08f87a06588c0)), closes [#1385](https://github.com/Hufe921/canvas-editor/issues/1385)
14
+ * support watermark layer configuration #1386 ([b0a068b](https://github.com/Hufe921/canvas-editor/commit/b0a068b097b9ec3a6b89b3385f0bdb589c4204f5)), closes [#1386](https://github.com/Hufe921/canvas-editor/issues/1386)
15
+
16
+
17
+
18
+ ## [0.9.130](https://github.com/Hufe921/canvas-editor/compare/v0.9.129...v0.9.130) (2026-03-27)
19
+
20
+
21
+ ### Bug Fixes
22
+
23
+ * correct duplicate variable check in TextParticle render ([4b72161](https://github.com/Hufe921/canvas-editor/commit/4b721618d10ef484e92b79f52ea27ee4be316814))
24
+ * ensure trailing line break in element list formatting #1378 ([30074b6](https://github.com/Hufe921/canvas-editor/commit/30074b6b703b3da581c5446a75edb38f4bff56b7)), closes [#1378](https://github.com/Hufe921/canvas-editor/issues/1378)
25
+ * optimize cursor positioning for left/right key handlers #1378 ([a79928f](https://github.com/Hufe921/canvas-editor/commit/a79928fc507cac0302e105110bc31f2baeefb74c)), closes [#1378](https://github.com/Hufe921/canvas-editor/issues/1378)
26
+ * prevent extra line break when list is first element in table #1381 ([bae2394](https://github.com/Hufe921/canvas-editor/commit/bae2394ceffee5e1a5b8f55d5ef8d60f7edc44b9)), closes [#1381](https://github.com/Hufe921/canvas-editor/issues/1381)
27
+
28
+
29
+ ### Features
30
+
31
+ * support iframe snapshot in getImage api #1380 ([d980298](https://github.com/Hufe921/canvas-editor/commit/d9802988587333b8b624112f554d2b4e9d702e00)), closes [#1380](https://github.com/Hufe921/canvas-editor/issues/1380)
32
+
33
+
34
+
1
35
  ## [0.9.129](https://github.com/Hufe921/canvas-editor/compare/v0.9.128...v0.9.129) (2026-03-13)
2
36
 
3
37
 
@@ -23,7 +23,7 @@ var __publicField = (obj, key, value) => {
23
23
  return value;
24
24
  };
25
25
  var index = "";
26
- const version = "0.9.129";
26
+ const version = "0.9.131";
27
27
  var MaxHeightRatio;
28
28
  (function(MaxHeightRatio2) {
29
29
  MaxHeightRatio2["HALF"] = "half";
@@ -414,6 +414,14 @@ function isRectIntersect(rect1, rect2) {
414
414
  function isNonValue(value) {
415
415
  return value === void 0 || value === null;
416
416
  }
417
+ function loadImage(src) {
418
+ return new Promise((resolve, reject) => {
419
+ const img = new Image();
420
+ img.onload = () => resolve(img);
421
+ img.onerror = reject;
422
+ img.src = src;
423
+ });
424
+ }
417
425
  function normalizeLineBreak(text) {
418
426
  return text.replace(/\r\n|\r/g, "\n");
419
427
  }
@@ -477,7 +485,8 @@ const EDITOR_CLIPBOARD = `${EDITOR_PREFIX}-clipboard`;
477
485
  const defaultModeRuleOption = {
478
486
  print: {
479
487
  imagePreviewerDisabled: false,
480
- backgroundDisabled: false
488
+ backgroundDisabled: false,
489
+ filterEmptyControl: true
481
490
  },
482
491
  readonly: {
483
492
  imagePreviewerDisabled: false
@@ -4274,6 +4283,11 @@ var WatermarkType;
4274
4283
  WatermarkType2["TEXT"] = "text";
4275
4284
  WatermarkType2["IMAGE"] = "image";
4276
4285
  })(WatermarkType || (WatermarkType = {}));
4286
+ var WatermarkLayer;
4287
+ (function(WatermarkLayer2) {
4288
+ WatermarkLayer2["BOTTOM"] = "bottom";
4289
+ WatermarkLayer2["TOP"] = "top";
4290
+ })(WatermarkLayer || (WatermarkLayer = {}));
4277
4291
  const defaultWatermarkOption = {
4278
4292
  data: "",
4279
4293
  type: WatermarkType.TEXT,
@@ -4285,7 +4299,8 @@ const defaultWatermarkOption = {
4285
4299
  font: "Microsoft YaHei",
4286
4300
  repeat: false,
4287
4301
  gap: [10, 10],
4288
- numberType: NumberType.ARABIC
4302
+ numberType: NumberType.ARABIC,
4303
+ layer: WatermarkLayer.BOTTOM
4289
4304
  };
4290
4305
  const defaultZoneOption = {
4291
4306
  tipDisabled: true
@@ -4440,10 +4455,10 @@ function unzipElementList(elementList) {
4440
4455
  return result;
4441
4456
  }
4442
4457
  function formatElementList(elementList, options) {
4443
- var _a, _b;
4458
+ var _a, _b, _c;
4444
4459
  const { isHandleFirstElement = true, isForceCompensation = false, editorOptions } = options;
4445
4460
  const startElement = elementList[0];
4446
- if (isForceCompensation || isHandleFirstElement && (startElement == null ? void 0 : startElement.type) !== ElementType.LIST && ((startElement == null ? void 0 : startElement.type) && startElement.type !== ElementType.TEXT || !START_LINE_BREAK_REG.test(startElement == null ? void 0 : startElement.value))) {
4461
+ if ((startElement == null ? void 0 : startElement.type) !== ElementType.LIST && (isForceCompensation || isHandleFirstElement && ((startElement == null ? void 0 : startElement.type) && startElement.type !== ElementType.TEXT || !START_LINE_BREAK_REG.test(startElement == null ? void 0 : startElement.value)))) {
4447
4462
  elementList.unshift({
4448
4463
  value: ZERO
4449
4464
  });
@@ -4498,6 +4513,12 @@ function formatElementList(elementList, options) {
4498
4513
  elementList.splice(i, 0, value);
4499
4514
  i++;
4500
4515
  }
4516
+ if (elementList[i] && (((_a = elementList[i].valueList) == null ? void 0 : _a.length) ? !START_LINE_BREAK_REG.test(elementList[i].valueList[0].value) : !START_LINE_BREAK_REG.test(elementList[i].value))) {
4517
+ elementList.splice(i, 0, {
4518
+ value: ZERO
4519
+ });
4520
+ i++;
4521
+ }
4501
4522
  }
4502
4523
  i--;
4503
4524
  } else if (el.type === ElementType.AREA) {
@@ -4557,7 +4578,7 @@ function formatElementList(elementList, options) {
4557
4578
  isHandleFirstElement: true,
4558
4579
  isForceCompensation: true
4559
4580
  }));
4560
- if (!td.value[0].size && ((_a = td.value[1]) == null ? void 0 : _a.size) && isTextLikeElement(td.value[1])) {
4581
+ if (!td.value[0].size && ((_b = td.value[1]) == null ? void 0 : _b.size) && isTextLikeElement(td.value[1])) {
4561
4582
  td.value[0].size = td.value[1].size;
4562
4583
  }
4563
4584
  for (let v = 0; v < td.value.length; v++) {
@@ -4787,7 +4808,7 @@ function formatElementList(elementList, options) {
4787
4808
  i++;
4788
4809
  }
4789
4810
  i--;
4790
- } else if ((!el.type || TEXTLIKE_ELEMENT_TYPE.includes(el.type)) && ((_b = el.value) == null ? void 0 : _b.length) > 1) {
4811
+ } else if ((!el.type || TEXTLIKE_ELEMENT_TYPE.includes(el.type)) && ((_c = el.value) == null ? void 0 : _c.length) > 1) {
4791
4812
  elementList.splice(i, 1);
4792
4813
  const valueList = splitText(el.value);
4793
4814
  for (let v = 0; v < valueList.length; v++) {
@@ -7533,6 +7554,20 @@ function left(evt, host) {
7533
7554
  isSubmitHistory: false,
7534
7555
  isCompute: false
7535
7556
  });
7557
+ if (isAnchorCollapsed) {
7558
+ const positionList = position.getPositionList();
7559
+ const anchorPosition = positionList[anchorStartIndex];
7560
+ if ((anchorPosition == null ? void 0 : anchorPosition.isLastLetter) && anchorPosition.value !== ZERO && anchorStartIndex + 1 < positionList.length) {
7561
+ const nextPosition = positionList[anchorStartIndex + 1];
7562
+ const element = newElementList[anchorStartIndex];
7563
+ const nextElement = newElementList[anchorStartIndex + 1];
7564
+ if (nextPosition.value !== ZERO && !getIsBlockElement(nextElement) && element.listId === nextElement.listId) {
7565
+ draw.getCursor().drawCursor({
7566
+ hitLineStartIndex: anchorStartIndex + 1
7567
+ });
7568
+ }
7569
+ }
7570
+ }
7536
7571
  evt.preventDefault();
7537
7572
  }
7538
7573
  function right(evt, host) {
@@ -7677,6 +7712,19 @@ function right(evt, host) {
7677
7712
  isSubmitHistory: false,
7678
7713
  isCompute: false
7679
7714
  });
7715
+ if (isAnchorCollapsed) {
7716
+ const anchorPosition = positionList[anchorStartIndex];
7717
+ if ((anchorPosition == null ? void 0 : anchorPosition.isLastLetter) && anchorPosition.value !== ZERO && anchorStartIndex + 1 < positionList.length) {
7718
+ const nextPosition = positionList[anchorStartIndex + 1];
7719
+ const element = elementList[anchorStartIndex];
7720
+ const nextElement = elementList[anchorStartIndex + 1];
7721
+ if (nextPosition.value !== ZERO && !getIsBlockElement(nextElement) && element.listId === nextElement.listId) {
7722
+ draw.getCursor().drawCursor({
7723
+ hitLineStartIndex: anchorStartIndex + 1
7724
+ });
7725
+ }
7726
+ }
7727
+ }
7680
7728
  evt.preventDefault();
7681
7729
  }
7682
7730
  function tab(evt, host) {
@@ -10973,7 +11021,7 @@ class TextParticle {
10973
11021
  this.curY = y;
10974
11022
  }
10975
11023
  _render() {
10976
- if (!this.text || !~this.curX || !~this.curX)
11024
+ if (!this.text || !~this.curX || !~this.curY)
10977
11025
  return;
10978
11026
  this.ctx.save();
10979
11027
  this.ctx.font = this.curStyle;
@@ -14142,6 +14190,7 @@ class Control {
14142
14190
  return this.draw;
14143
14191
  }
14144
14192
  filterAssistElement(elementList) {
14193
+ const { filterEmptyControl } = this.options.modeRule[EditorMode.PRINT];
14145
14194
  return elementList.filter((element, index2) => {
14146
14195
  var _a, _b, _c;
14147
14196
  if (element.type === ElementType.TABLE) {
@@ -14193,7 +14242,7 @@ class Control {
14193
14242
  return isExistValue;
14194
14243
  }
14195
14244
  }
14196
- return element.controlComponent !== ControlComponent.PREFIX && element.controlComponent !== ControlComponent.POSTFIX && element.controlComponent !== ControlComponent.PLACEHOLDER;
14245
+ return element.controlComponent !== ControlComponent.PREFIX && element.controlComponent !== ControlComponent.POSTFIX && (!filterEmptyControl || element.controlComponent !== ControlComponent.PLACEHOLDER);
14197
14246
  });
14198
14247
  }
14199
14248
  getIsRangeCanCaptureEvent() {
@@ -15683,7 +15732,7 @@ function WorkerWrapper$1() {
15683
15732
  objURL && (window.URL || window.webkitURL).revokeObjectURL(objURL);
15684
15733
  }
15685
15734
  }
15686
- const encodedJs = "KCgpPT57dmFyIFRlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxJZT1PYmplY3QuZGVmaW5lUHJvcGVydGllczt2YXIgQWU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7dmFyIGxlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyIGRlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksUmU9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgbmU9KFQsSSxkKT0+SSBpbiBUP1RlKFQsSSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZH0pOlRbSV09ZCxnPShULEkpPT57Zm9yKHZhciBkIGluIEl8fChJPXt9KSlkZS5jYWxsKEksZCkmJm5lKFQsZCxJW2RdKTtpZihsZSlmb3IodmFyIGQgb2YgbGUoSSkpUmUuY2FsbChJLGQpJiZuZShULGQsSVtkXSk7cmV0dXJuIFR9LFg9KFQsSSk9PkllKFQsQWUoSSkpOyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgVDsoZnVuY3Rpb24oZSl7ZS5IQUxGPSJoYWxmIixlLk9ORV9USElSRD0ib25lLXRoaXJkIixlLlFVQVJURVI9InF1YXJ0ZXIifSkoVHx8KFQ9e30pKTt2YXIgSTsoZnVuY3Rpb24oZSl7ZS5BUkFCSUM9ImFyYWJpYyIsZS5DSElORVNFPSJjaGluZXNlIn0pKEl8fChJPXt9KSk7dmFyIGQ7KGZ1bmN0aW9uKGUpe2UuSU5MSU5FPSJpbmxpbmUiLGUuQkxPQ0s9ImJsb2NrIixlLlNVUlJPVU5EPSJzdXJyb3VuZCIsZS5GTE9BVF9UT1A9ImZsb2F0LXRvcCIsZS5GTE9BVF9CT1RUT009ImZsb2F0LWJvdHRvbSJ9KShkfHwoZD17fSkpO3ZhciBfOyhmdW5jdGlvbihlKXtlLkJFRk9SRT0iYmVmb3JlIixlLkFGVEVSPSJhZnRlciIsZS5PVVRFUl9CRUZPUkU9Im91dGVyLWJlZm9yZSIsZS5PVVRFUl9BRlRFUj0ib3V0ZXItYWZ0ZXIifSkoX3x8KF89e30pKTt2YXIgTTsoZnVuY3Rpb24oZSl7ZS5ST1c9InJvdyIsZS5DT0xVTU49ImNvbHVtbiJ9KShNfHwoTT17fSkpO2NvbnN0IFA9Ilx1MjAwQiI7VC5IQUxGKyIiLDEvMixULk9ORV9USElSRCsiIiwxLzMsVC5RVUFSVEVSKyIiLDEvNDtmdW5jdGlvbiBiKGUpe2lmKHR5cGVvZiBzdHJ1Y3R1cmVkQ2xvbmU9PSJmdW5jdGlvbiIpcmV0dXJuIHN0cnVjdHVyZWRDbG9uZShlKTtpZighZXx8dHlwZW9mIGUhPSJvYmplY3QiKXJldHVybiBlO2xldCBjPXt9O3JldHVybiBBcnJheS5pc0FycmF5KGUpP2M9ZS5tYXAoRT0+YihFKSk6T2JqZWN0LmtleXMoZSkuZm9yRWFjaChFPT57Y1tFXT1iKGVbRV0pfSksY31mdW5jdGlvbiB3KGUsYyl7Y29uc3QgRT17fTtmb3IoY29uc3QgQSBpbiBlKWMuaW5jbHVkZXMoQSkmJihFW0FdPWVbQV0pO3JldHVybiBFfWZ1bmN0aW9uIHJlKGUsYyl7cmV0dXJuIGUubGVuZ3RoIT09Yy5sZW5ndGg/ITE6IWUuc29tZShFPT4hYy5pbmNsdWRlcyhFKSl9dmFyIG47KGZ1bmN0aW9uKGUpe2UuVEVYVD0idGV4dCIsZS5JTUFHRT0iaW1hZ2UiLGUuVEFCTEU9InRhYmxlIixlLkhZUEVSTElOSz0iaHlwZXJsaW5rIixlLlNVUEVSU0NSSVBUPSJzdXBlcnNjcmlwdCIsZS5TVUJTQ1JJUFQ9InN1YnNjcmlwdCIsZS5TRVBBUkFUT1I9InNlcGFyYXRvciIsZS5QQUdFX0JSRUFLPSJwYWdlQnJlYWsiLGUuQ09OVFJPTD0iY29udHJvbCIsZS5BUkVBPSJhcmVhIixlLkNIRUNLQk9YPSJjaGVja2JveCIsZS5SQURJTz0icmFkaW8iLGUuTEFURVg9ImxhdGV4IixlLlRBQj0idGFiIixlLkRBVEU9ImRhdGUiLGUuQkxPQ0s9ImJsb2NrIixlLlRJVExFPSJ0aXRsZSIsZS5MSVNUPSJsaXN0IixlLkxBQkVMPSJsYWJlbCJ9KShufHwobj17fSkpO2NvbnN0IG9lPVsicm93RmxleCIsInJvd01hcmdpbiJdLGNlPVsidHlwZSIsImZvbnQiLCJzaXplIiwiYm9sZCIsImNvbG9yIiwiaXRhbGljIiwiaGlnaGxpZ2h0IiwidW5kZXJsaW5lIiwic3RyaWtlb3V0Iiwicm93RmxleCIsInJvd01hcmdpbiIsImRhc2hBcnJheSIsInRyTGlzdCIsInRhYmxlVG9vbERpc2FibGVkIiwiYm9yZGVyVHlwZSIsImJvcmRlckNvbG9yIiwidHJhbnNsYXRlWCIsIndpZHRoIiwiaGVpZ2h0IiwidXJsIiwiY29sZ3JvdXAiLCJ2YWx1ZUxpc3QiLCJjb250cm9sIiwiY2hlY2tib3giLCJyYWRpbyIsImRhdGVGb3JtYXQiLCJibG9jayIsImxldmVsIiwidGl0bGUiLCJsaXN0VHlwZSIsImxpc3RTdHlsZSIsImxpc3RXcmFwIiwiZ3JvdXBJZHMiLCJjb25jZXB0SWQiLCJpbWdEaXNwbGF5IiwiaW1nRmxvYXRQb3NpdGlvbiIsImltZ1Rvb2xEaXNhYmxlZCIsImltZ1ByZXZpZXdEaXNhYmxlZCIsImltZ0Nyb3AiLCJpbWdDYXB0aW9uIiwidGV4dERlY29yYXRpb24iLCJleHRlbnNpb24iLCJleHRlcm5hbElkIiwiYXJlYUlkIiwiYXJlYSIsImhpZGUiLCJsYWJlbCIsImxhYmVsSWQiLCJsaW5lV2lkdGgiXSxzZT1bImNvbmNlcHRJZCIsImV4dGVuc2lvbiIsImV4dGVybmFsSWQiLCJ2ZXJ0aWNhbEFsaWduIiwiYmFja2dyb3VuZENvbG9yIiwiYm9yZGVyVHlwZXMiLCJzbGFzaFR5cGVzIiwiZGlzYWJsZWQiLCJkZWxldGFibGUiXSxmZT1bImZvbnQiLCJzaXplIiwiYm9sZCIsImhpZ2hsaWdodCIsIml0YWxpYyIsInN0cmlrZW91dCJdO24uVEVYVCxuLkhZUEVSTElOSyxuLlNVQlNDUklQVCxuLlNVUEVSU0NSSVBULG4uQ09OVFJPTCxuLkRBVEUsbi5JTUFHRSxuLkxBVEVYLG4uQkxPQ0ssbi5QQUdFX0JSRUFLLG4uU0VQQVJBVE9SLG4uVEFCTEUsbi5USVRMRSxuLkxJU1Q7dmFyIE47KGZ1bmN0aW9uKGUpe2UuVUw9InVsIixlLk9MPSJvbCJ9KShOfHwoTj17fSkpO3ZhciBPOyhmdW5jdGlvbihlKXtlLkRJU0M9ImRpc2MiLGUuQ0lSQ0xFPSJjaXJjbGUiLGUuU1FVQVJFPSJzcXVhcmUiLGUuQ0hFQ0tCT1g9ImNoZWNrYm94In0pKE98fChPPXt9KSk7dmFyIEg7KGZ1bmN0aW9uKGUpe2UuREVDSU1BTD0iZGVjaW1hbCJ9KShIfHwoSD17fSkpO3ZhciB2OyhmdW5jdGlvbihlKXtlW2UuRElTQz1PLkRJU0NdPSJESVNDIixlW2UuQ0lSQ0xFPU8uQ0lSQ0xFXT0iQ0lSQ0xFIixlW2UuU1FVQVJFPU8uU1FVQVJFXT0iU1FVQVJFIixlW2UuREVDSU1BTD1ILkRFQ0lNQUxdPSJERUNJTUFMIixlW2UuQ0hFQ0tCT1g9Ty5DSEVDS0JPWF09IkNIRUNLQk9YIn0pKHZ8fCh2PXt9KSksTy5ESVNDKyIiLE8uQ0lSQ0xFKyIiLE8uU1FVQVJFKyIiLE8uQ0hFQ0tCT1grIiIsTi5PTCsiIixOLlVMKyIiLHYuRElTQysiIix2LkNJUkNMRSsiIix2LlNRVUFSRSsiIix2LkRFQ0lNQUwrIiIsdi5DSEVDS0JPWCsiIjt2YXIgdTsoZnVuY3Rpb24oZSl7ZS5GSVJTVD0iZmlyc3QiLGUuU0VDT05EPSJzZWNvbmQiLGUuVEhJUkQ9InRoaXJkIixlLkZPVVJUSD0iZm91cnRoIixlLkZJRlRIPSJmaWZ0aCIsZS5TSVhUSD0ic2l4dGgifSkodXx8KHU9e30pKSx1LkZJUlNUKyIiLHUuU0VDT05EKyIiLHUuVEhJUkQrIiIsdS5GT1VSVEgrIiIsdS5GSUZUSCsiIix1LlNJWFRIKyIiLHUuRklSU1QrIiIsdS5TRUNPTkQrIiIsdS5USElSRCsiIix1LkZPVVJUSCsiIix1LkZJRlRIKyIiLHUuU0lYVEgrIiIsdS5GSVJTVCx1LlNFQ09ORCx1LlRISVJELHUuRk9VUlRILHUuRklGVEgsdS5TSVhUSDt2YXIgSzsoZnVuY3Rpb24oZSl7ZS5JRlJBTUU9ImlmcmFtZSIsZS5WSURFTz0idmlkZW8ifSkoS3x8KEs9e30pKTt2YXIgRzsoZnVuY3Rpb24oZSl7ZS5URVhUPSJ0ZXh0IixlLlNFTEVDVD0ic2VsZWN0IixlLkNIRUNLQk9YPSJjaGVja2JveCIsZS5SQURJTz0icmFkaW8iLGUuREFURT0iZGF0ZSIsZS5OVU1CRVI9Im51bWJlciJ9KShHfHwoRz17fSkpO3ZhciBDOyhmdW5jdGlvbihlKXtlLlBSRUZJWD0icHJlZml4IixlLlBPU1RGSVg9InBvc3RmaXgiLGUuUFJFX1RFWFQ9InByZVRleHQiLGUuUE9TVF9URVhUPSJwb3N0VGV4dCIsZS5QTEFDRUhPTERFUj0icGxhY2Vob2xkZXIiLGUuVkFMVUU9InZhbHVlIixlLkNIRUNLQk9YPSJjaGVja2JveCIsZS5SQURJTz0icmFkaW8ifSkoQ3x8KEM9e30pKTt2YXIgejsoZnVuY3Rpb24oZSl7ZS5ST1dfU1RBUlQ9InJvd1N0YXJ0IixlLlZBTFVFX1NUQVJUPSJ2YWx1ZVN0YXJ0In0pKHp8fCh6PXt9KSk7dmFyIFk7KGZ1bmN0aW9uKGUpe2UuQUNUSVZFPSJhY3RpdmUiLGUuSU5BQ1RJVkU9ImluYWN0aXZlIn0pKFl8fChZPXt9KSk7dmFyIFY7KGZ1bmN0aW9uKGUpe2UuTlVNQkVSPSJudW1iZXIiLGUuT1BFUkFUT1I9Im9wZXJhdG9yIixlLlVUSUxJVFk9InV0aWxpdHkiLGUuRVFVQUw9ImVxdWFsIn0pKFZ8fChWPXt9KSk7dmFyIFE7KGZ1bmN0aW9uKGUpe2UuQ09NUE9ORU5UPSJjb21wb25lbnQiLGUuTUVOVT0ibWVudSIsZS5NQUlOPSJtYWluIixlLkZPT1RFUj0iZm9vdGVyIixlLkNPTlRFWFRNRU5VPSJjb250ZXh0bWVudSIsZS5QT1BVUD0icG9wdXAiLGUuQ0FUQUxPRz0iY2F0YWxvZyIsZS5DT01NRU5UPSJjb21tZW50In0pKFF8fChRPXt9KSk7dmFyIFc7KGZ1bmN0aW9uKGUpe2UuUEFHRT0icGFnZSIsZS5UQUJMRT0idGFibGUifSkoV3x8KFc9e30pKTt2YXIgcTsoZnVuY3Rpb24oZSl7ZS5FRElUPSJlZGl0IixlLkNMRUFOPSJjbGVhbiIsZS5SRUFET05MWT0icmVhZG9ubHkiLGUuRk9STT0iZm9ybSIsZS5QUklOVD0icHJpbnQiLGUuREVTSUdOPSJkZXNpZ24iLGUuR1JBRkZJVEk9ImdyYWZmaXRpIn0pKHF8fChxPXt9KSk7dmFyIFo7KGZ1bmN0aW9uKGUpe2UuSEVBREVSPSJoZWFkZXIiLGUuTUFJTj0ibWFpbiIsZS5GT09URVI9ImZvb3RlciJ9KShafHwoWj17fSkpO3ZhciBKOyhmdW5jdGlvbihlKXtlLlBBR0lORz0icGFnaW5nIixlLkNPTlRJTlVJVFk9ImNvbnRpbnVpdHkifSkoSnx8KEo9e30pKTt2YXIgajsoZnVuY3Rpb24oZSl7ZS5WRVJUSUNBTD0idmVydGljYWwiLGUuSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCJ9KShqfHwoaj17fSkpO3ZhciAkOyhmdW5jdGlvbihlKXtlLkJSRUFLX0FMTD0iYnJlYWstYWxsIixlLkJSRUFLX1dPUkQ9ImJyZWFrLXdvcmQifSkoJHx8KCQ9e30pKTt2YXIgZWU7KGZ1bmN0aW9uKGUpe2UuU1BFRUQ9InNwZWVkIixlLkNPTVBBVElCSUxJVFk9ImNvbXBhdGliaWxpdHkifSkoZWV8fChlZT17fSkpO3ZhciBEOyhmdW5jdGlvbihlKXtlLkxFRlQ9ImxlZnQiLGUuQ0VOVEVSPSJjZW50ZXIiLGUuUklHSFQ9InJpZ2h0IixlLkFMSUdOTUVOVD0iYWxpZ25tZW50IixlLkpVU1RJRlk9Imp1c3RpZnkifSkoRHx8KEQ9e30pKTt2YXIgdGU7KGZ1bmN0aW9uKGUpe2UuQUxMPSJhbGwiLGUuRU1QVFk9ImVtcHR5IixlLkVYVEVSTkFMPSJleHRlcm5hbCIsZS5JTlRFUk5BTD0iaW50ZXJuYWwiLGUuREFTSD0iZGFzaCJ9KSh0ZXx8KHRlPXt9KSk7dmFyIGllOyhmdW5jdGlvbihlKXtlLlRPUD0idG9wIixlLlJJR0hUPSJyaWdodCIsZS5CT1RUT009ImJvdHRvbSIsZS5MRUZUPSJsZWZ0In0pKGllfHwoaWU9e30pKTt2YXIgYWU7KGZ1bmN0aW9uKGUpe2UuRk9SV0FSRD0iZm9yd2FyZCIsZS5CQUNLPSJiYWNrIn0pKGFlfHwoYWU9e30pKTt2YXIgazsoZnVuY3Rpb24oZSl7ZS5DT05UQUlOPSJjb250YWluIixlLkNPVkVSPSJjb3ZlciJ9KShrfHwoaz17fSkpO3ZhciBtOyhmdW5jdGlvbihlKXtlLlJFUEVBVD0icmVwZWF0IixlLk5PX1JFUEVBVD0ibm8tcmVwZWF0IixlLlJFUEVBVF9YPSJyZXBlYXQteCIsZS5SRVBFQVRfWT0icmVwZWF0LXkifSkobXx8KG09e30pKSxrLkNPVkVSLG0uTk9fUkVQRUFUO3ZhciBGOyhmdW5jdGlvbihlKXtlLlRPUD0idG9wIixlLk1JRERMRT0ibWlkZGxlIixlLkJPVFRPTT0iYm90dG9tIn0pKEZ8fChGPXt9KSksRi5CT1RUT00sVC5IQUxGLFQuSEFMRjtjb25zdCBFZT17UEFHRV9OTzoie3BhZ2VOb30iLFBBR0VfQ09VTlQ6IntwYWdlQ291bnR9In07RC5DRU5URVIsRWUuUEFHRV9OTyxJLkFSQUJJQyxGLkJPVFRPTTt2YXIgeTsoZnVuY3Rpb24oZSl7ZS5URVhUPSJ0ZXh0IixlLklNQUdFPSJpbWFnZSJ9KSh5fHwoeT17fSkpLHkuVEVYVCxJLkFSQUJJQzt2YXIgVTsoZnVuY3Rpb24oZSl7ZS5QQUdFPSJwYWdlIixlLkNPTlRJTlVJVFk9ImNvbnRpbnVpdHkifSkoVXx8KFU9e30pKSxVLkNPTlRJTlVJVFk7ZnVuY3Rpb24gdWUoZSxjKXtjb25zdCBFPU9iamVjdC5rZXlzKGUpLEE9T2JqZWN0LmtleXMoYyk7aWYoRS5sZW5ndGghPT1BLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IFI9MDtSPEUubGVuZ3RoO1IrKyl7Y29uc3QgYT1FW1JdO2lmKGEhPT0idmFsdWUiJiYhKGE9PT0iZ3JvdXBJZHMiJiZBcnJheS5pc0FycmF5KGVbYV0pJiZBcnJheS5pc0FycmF5KGNbYV0pJiZyZShlW2FdLGNbYV0pKSYmZVthXSE9PWNbYV0pcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gQihlLGM9e30pe2NvbnN0e2V4dHJhUGlja0F0dHJzOkV9PWMsQT1bLi4uY2VdO0UmJkEucHVzaCguLi5FKTtjb25zdCBSPXt2YWx1ZTplLnZhbHVlPT09UD9gCmA6ZS52YWx1ZX07cmV0dXJuIEEuZm9yRWFjaChhPT57Y29uc3QgcD1lW2FdO3AhPT12b2lkIDAmJihSW2FdPXApfSksUn1mdW5jdGlvbiBoKGUsYz17fSl7Y29uc3R7ZXh0cmFQaWNrQXR0cnM6RSxpc0NsYXNzaWZ5QXJlYTpBPSExLGlzQ2xvbmU6Uj0hMH09YyxhPVI/YihlKTplLHA9W107bGV0IGk9MDtmb3IoO2k8YS5sZW5ndGg7KXtsZXQgdD1hW2ldO2lmKGk9PT0wJiZ0LnZhbHVlPT09UCYmIXQubGlzdElkJiYoIXQudHlwZXx8dC50eXBlPT09bi5URVhUKSl7aSsrO2NvbnRpbnVlfWlmKHQuYXJlYUlkKXtjb25zdCBsPXQuYXJlYUlkLGY9dC5hcmVhLHM9W107Zm9yKDtpPGEubGVuZ3RoOyl7Y29uc3Qgbz1hW2ldO2lmKGwhPT1vLmFyZWFJZCl7aS0tO2JyZWFrfWRlbGV0ZSBvLmFyZWEsZGVsZXRlIG8uYXJlYUlkLHMucHVzaChvKSxpKyt9Y29uc3Qgcj1oKHMsYyk7aWYoQSl7Y29uc3Qgbz17dHlwZTpuLkFSRUEsdmFsdWU6IiIsYXJlYUlkOmwsYXJlYTpmfTtvLnZhbHVlTGlzdD1yLHQ9b31lbHNle3Auc3BsaWNlKGksMCwuLi5yKTtjb250aW51ZX19ZWxzZSBpZih0LnRpdGxlSWQmJnQubGV2ZWwpe2NvbnN0IGw9dC50aXRsZUlkO2lmKGwpe2NvbnN0IGY9dC5sZXZlbCxzPXt0eXBlOm4uVElUTEUsdGl0bGU6dC50aXRsZSx0aXRsZUlkOmwsdmFsdWU6IiIsbGV2ZWw6Zn0scj1bXTtmb3IoO2k8YS5sZW5ndGg7KXtjb25zdCBvPWFbaV07aWYobCE9PW8udGl0bGVJZCl7aS0tO2JyZWFrfWRlbGV0ZSBvLmxldmVsLGRlbGV0ZSBvLnRpdGxlLHIucHVzaChvKSxpKyt9cy52YWx1ZUxpc3Q9aChyLGMpLHQ9c319ZWxzZSBpZih0Lmxpc3RJZCYmdC5saXN0VHlwZSl7Y29uc3QgbD10Lmxpc3RJZDtpZihsKXtjb25zdCBmPXQubGlzdFR5cGUscz10Lmxpc3RTdHlsZSxyPXt0eXBlOm4uTElTVCx2YWx1ZToiIixsaXN0SWQ6bCxsaXN0VHlwZTpmLGxpc3RTdHlsZTpzfSxvPVtdO2Zvcig7aTxhLmxlbmd0aDspe2NvbnN0IEw9YVtpXTtpZihsIT09TC5saXN0SWQpe2ktLTticmVha31kZWxldGUgTC5saXN0VHlwZSxkZWxldGUgTC5saXN0U3R5bGUsby5wdXNoKEwpLGkrK31yLnZhbHVlTGlzdD1oKG8sYyksdD1yfX1lbHNlIGlmKHQudHlwZT09PW4uVEFCTEUpe2lmKHQucGFnaW5nSWQpe2xldCBsPWkrMSxmPTA7Zm9yKDtsPGEubGVuZ3RoOyl7Y29uc3Qgcz1hW2xdO2lmKHMucGFnaW5nSWQ9PT10LnBhZ2luZ0lkKXQuaGVpZ2h0Kz1zLmhlaWdodCx0LnRyTGlzdC5wdXNoKC4uLnMudHJMaXN0KSxsKyssZisrO2Vsc2UgYnJlYWt9aSs9Zn1pZih0LnRyTGlzdClmb3IobGV0IGw9MDtsPHQudHJMaXN0Lmxlbmd0aDtsKyspe2NvbnN0IGY9dC50ckxpc3RbbF07ZGVsZXRlIGYuaWQ7Zm9yKGxldCBzPTA7czxmLnRkTGlzdC5sZW5ndGg7cysrKXtjb25zdCByPWYudGRMaXN0W3NdLG89e2NvbHNwYW46ci5jb2xzcGFuLHJvd3NwYW46ci5yb3dzcGFuLHZhbHVlOmgoci52YWx1ZSxYKGcoe30sYykse2lzQ2xhc3NpZnlBcmVhOiExfSkpfTtzZS5mb3JFYWNoKEw9Pntjb25zdCBTPXJbTF07UyE9PXZvaWQgMCYmKG9bTF09Uyl9KSxmLnRkTGlzdFtzXT1vfX19ZWxzZSBpZih0LnR5cGU9PT1uLkhZUEVSTElOSyl7Y29uc3QgbD10Lmh5cGVybGlua0lkO2lmKGwpe2NvbnN0IGY9e3R5cGU6bi5IWVBFUkxJTkssdmFsdWU6IiIsdXJsOnQudXJsfSxzPVtdO2Zvcig7aTxhLmxlbmd0aDspe2NvbnN0IHI9YVtpXTtpZihsIT09ci5oeXBlcmxpbmtJZCl7aS0tO2JyZWFrfWRlbGV0ZSByLnR5cGUsZGVsZXRlIHIudXJsLHMucHVzaChyKSxpKyt9Zi52YWx1ZUxpc3Q9aChzLGMpLHQ9Zn19ZWxzZSBpZih0LnR5cGU9PT1uLkRBVEUpe2NvbnN0IGw9dC5kYXRlSWQ7aWYobCl7Y29uc3QgZj17dHlwZTpuLkRBVEUsdmFsdWU6IiIsZGF0ZUZvcm1hdDp0LmRhdGVGb3JtYXR9LHM9W107Zm9yKDtpPGEubGVuZ3RoOyl7Y29uc3Qgcj1hW2ldO2lmKGwhPT1yLmRhdGVJZCl7aS0tO2JyZWFrfWRlbGV0ZSByLnR5cGUsZGVsZXRlIHIuZGF0ZUZvcm1hdCxzLnB1c2gociksaSsrfWYudmFsdWVMaXN0PWgocyxjKSx0PWZ9fWVsc2UgaWYodC5jb250cm9sSWQpe2NvbnN0IGw9dC5jb250cm9sSWQ7aWYodC5jb250cm9sQ29tcG9uZW50PT09Qy5QUkVGSVgpe2NvbnN0IGY9W107bGV0IHM9ITEscj1pO2Zvcig7cjxhLmxlbmd0aDspe2NvbnN0IG89YVtyXTtpZihsIT09by5jb250cm9sSWQpYnJlYWs7by5jb250cm9sQ29tcG9uZW50PT09Qy5WQUxVRSYmKGRlbGV0ZSBvLmNvbnRyb2wsZGVsZXRlIG8uY29udHJvbElkLGYucHVzaChvKSksby5jb250cm9sQ29tcG9uZW50PT09Qy5QT1NURklYJiYocz0hMCkscisrfWlmKHMpe2NvbnN0IG89dyh0LGZlKSxMPWcoZyh7fSx0LmNvbnRyb2wpLG8pLFM9WChnKHt9LHcodCxvZSkpLHt0eXBlOm4uQ09OVFJPTCx2YWx1ZToiIixjb250cm9sOkwsY29udHJvbElkOmx9KTtTLmNvbnRyb2wudmFsdWU9aChmLGMpLHQ9QihTLHtleHRyYVBpY2tBdHRyczpFfSksaSs9ci1pLTF9fWlmKHQuY29udHJvbENvbXBvbmVudCYmKGRlbGV0ZSB0LmNvbnRyb2wsZGVsZXRlIHQuY29udHJvbElkLHQuY29udHJvbENvbXBvbmVudCE9PUMuVkFMVUUmJnQuY29udHJvbENvbXBvbmVudCE9PUMuUFJFX1RFWFQmJnQuY29udHJvbENvbXBvbmVudCE9PUMuUE9TVF9URVhUKSl7aSsrO2NvbnRpbnVlfX1jb25zdCB4PUIodCx7ZXh0cmFQaWNrQXR0cnM6RX0pO2lmKCF0LnR5cGV8fHQudHlwZT09PW4uVEVYVHx8dC50eXBlPT09bi5TVUJTQ1JJUFR8fHQudHlwZT09PW4uU1VQRVJTQ1JJUFQpZm9yKDtpPGEubGVuZ3RoOyl7Y29uc3QgbD1hW2krMV07aWYoaSsrLGwmJnVlKHgsQihsLHtleHRyYVBpY2tBdHRyczpFfSkpKXtjb25zdCBmPWwudmFsdWU9PT1QP2AKYDpsLnZhbHVlO3gudmFsdWUrPWZ9ZWxzZSBicmVha31lbHNlIGkrKztwLnB1c2goeCl9cmV0dXJuIHB9b25tZXNzYWdlPWU9Pntjb25zdCBjPWUuZGF0YSx7b3B0aW9uczpFLGRhdGE6QX09Yyx7ZXh0cmFQaWNrQXR0cnM6Uj1bXX09RXx8e30sYT17aGVhZGVyOmgoQS5oZWFkZXIse2V4dHJhUGlja0F0dHJzOlIsaXNDbG9uZTohMX0pLG1haW46aChBLm1haW4se2V4dHJhUGlja0F0dHJzOlIsaXNDbGFzc2lmeUFyZWE6ITAsaXNDbG9uZTohMX0pLGZvb3RlcjpoKEEuZm9vdGVyLHtleHRyYVBpY2tBdHRyczpSLGlzQ2xvbmU6ITF9KX07cG9zdE1lc3NhZ2UoYSl9fSkoKTt9KSgpOwo=";
15735
+ const encodedJs = "KCgpPT57dmFyIEllPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxBZT1PYmplY3QuZGVmaW5lUHJvcGVydGllczt2YXIgZGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7dmFyIG5lPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyIFJlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksT2U9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgcmU9KFQsSSxkKT0+SSBpbiBUP0llKFQsSSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZH0pOlRbSV09ZCxnPShULEkpPT57Zm9yKHZhciBkIGluIEl8fChJPXt9KSlSZS5jYWxsKEksZCkmJnJlKFQsZCxJW2RdKTtpZihuZSlmb3IodmFyIGQgb2YgbmUoSSkpT2UuY2FsbChJLGQpJiZyZShULGQsSVtkXSk7cmV0dXJuIFR9LFg9KFQsSSk9PkFlKFQsZGUoSSkpOyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgVDsoZnVuY3Rpb24oZSl7ZS5IQUxGPSJoYWxmIixlLk9ORV9USElSRD0ib25lLXRoaXJkIixlLlFVQVJURVI9InF1YXJ0ZXIifSkoVHx8KFQ9e30pKTt2YXIgSTsoZnVuY3Rpb24oZSl7ZS5BUkFCSUM9ImFyYWJpYyIsZS5DSElORVNFPSJjaGluZXNlIn0pKEl8fChJPXt9KSk7dmFyIGQ7KGZ1bmN0aW9uKGUpe2UuSU5MSU5FPSJpbmxpbmUiLGUuQkxPQ0s9ImJsb2NrIixlLlNVUlJPVU5EPSJzdXJyb3VuZCIsZS5GTE9BVF9UT1A9ImZsb2F0LXRvcCIsZS5GTE9BVF9CT1RUT009ImZsb2F0LWJvdHRvbSJ9KShkfHwoZD17fSkpO3ZhciBfOyhmdW5jdGlvbihlKXtlLkJFRk9SRT0iYmVmb3JlIixlLkFGVEVSPSJhZnRlciIsZS5PVVRFUl9CRUZPUkU9Im91dGVyLWJlZm9yZSIsZS5PVVRFUl9BRlRFUj0ib3V0ZXItYWZ0ZXIifSkoX3x8KF89e30pKTt2YXIgdzsoZnVuY3Rpb24oZSl7ZS5ST1c9InJvdyIsZS5DT0xVTU49ImNvbHVtbiJ9KSh3fHwodz17fSkpO2NvbnN0IFA9Ilx1MjAwQiI7VC5IQUxGKyIiLDEvMixULk9ORV9USElSRCsiIiwxLzMsVC5RVUFSVEVSKyIiLDEvNDtmdW5jdGlvbiBiKGUpe2lmKHR5cGVvZiBzdHJ1Y3R1cmVkQ2xvbmU9PSJmdW5jdGlvbiIpcmV0dXJuIHN0cnVjdHVyZWRDbG9uZShlKTtpZighZXx8dHlwZW9mIGUhPSJvYmplY3QiKXJldHVybiBlO2xldCBjPXt9O3JldHVybiBBcnJheS5pc0FycmF5KGUpP2M9ZS5tYXAoRT0+YihFKSk6T2JqZWN0LmtleXMoZSkuZm9yRWFjaChFPT57Y1tFXT1iKGVbRV0pfSksY31mdW5jdGlvbiBLKGUsYyl7Y29uc3QgRT17fTtmb3IoY29uc3QgQSBpbiBlKWMuaW5jbHVkZXMoQSkmJihFW0FdPWVbQV0pO3JldHVybiBFfWZ1bmN0aW9uIG9lKGUsYyl7cmV0dXJuIGUubGVuZ3RoIT09Yy5sZW5ndGg/ITE6IWUuc29tZShFPT4hYy5pbmNsdWRlcyhFKSl9dmFyIG47KGZ1bmN0aW9uKGUpe2UuVEVYVD0idGV4dCIsZS5JTUFHRT0iaW1hZ2UiLGUuVEFCTEU9InRhYmxlIixlLkhZUEVSTElOSz0iaHlwZXJsaW5rIixlLlNVUEVSU0NSSVBUPSJzdXBlcnNjcmlwdCIsZS5TVUJTQ1JJUFQ9InN1YnNjcmlwdCIsZS5TRVBBUkFUT1I9InNlcGFyYXRvciIsZS5QQUdFX0JSRUFLPSJwYWdlQnJlYWsiLGUuQ09OVFJPTD0iY29udHJvbCIsZS5BUkVBPSJhcmVhIixlLkNIRUNLQk9YPSJjaGVja2JveCIsZS5SQURJTz0icmFkaW8iLGUuTEFURVg9ImxhdGV4IixlLlRBQj0idGFiIixlLkRBVEU9ImRhdGUiLGUuQkxPQ0s9ImJsb2NrIixlLlRJVExFPSJ0aXRsZSIsZS5MSVNUPSJsaXN0IixlLkxBQkVMPSJsYWJlbCJ9KShufHwobj17fSkpO2NvbnN0IGNlPVsicm93RmxleCIsInJvd01hcmdpbiJdLHNlPVsidHlwZSIsImZvbnQiLCJzaXplIiwiYm9sZCIsImNvbG9yIiwiaXRhbGljIiwiaGlnaGxpZ2h0IiwidW5kZXJsaW5lIiwic3RyaWtlb3V0Iiwicm93RmxleCIsInJvd01hcmdpbiIsImRhc2hBcnJheSIsInRyTGlzdCIsInRhYmxlVG9vbERpc2FibGVkIiwiYm9yZGVyVHlwZSIsImJvcmRlckNvbG9yIiwidHJhbnNsYXRlWCIsIndpZHRoIiwiaGVpZ2h0IiwidXJsIiwiY29sZ3JvdXAiLCJ2YWx1ZUxpc3QiLCJjb250cm9sIiwiY2hlY2tib3giLCJyYWRpbyIsImRhdGVGb3JtYXQiLCJibG9jayIsImxldmVsIiwidGl0bGUiLCJsaXN0VHlwZSIsImxpc3RTdHlsZSIsImxpc3RXcmFwIiwiZ3JvdXBJZHMiLCJjb25jZXB0SWQiLCJpbWdEaXNwbGF5IiwiaW1nRmxvYXRQb3NpdGlvbiIsImltZ1Rvb2xEaXNhYmxlZCIsImltZ1ByZXZpZXdEaXNhYmxlZCIsImltZ0Nyb3AiLCJpbWdDYXB0aW9uIiwidGV4dERlY29yYXRpb24iLCJleHRlbnNpb24iLCJleHRlcm5hbElkIiwiYXJlYUlkIiwiYXJlYSIsImhpZGUiLCJsYWJlbCIsImxhYmVsSWQiLCJsaW5lV2lkdGgiXSxmZT1bImNvbmNlcHRJZCIsImV4dGVuc2lvbiIsImV4dGVybmFsSWQiLCJ2ZXJ0aWNhbEFsaWduIiwiYmFja2dyb3VuZENvbG9yIiwiYm9yZGVyVHlwZXMiLCJzbGFzaFR5cGVzIiwiZGlzYWJsZWQiLCJkZWxldGFibGUiXSxFZT1bImZvbnQiLCJzaXplIiwiYm9sZCIsImhpZ2hsaWdodCIsIml0YWxpYyIsInN0cmlrZW91dCJdO24uVEVYVCxuLkhZUEVSTElOSyxuLlNVQlNDUklQVCxuLlNVUEVSU0NSSVBULG4uQ09OVFJPTCxuLkRBVEUsbi5JTUFHRSxuLkxBVEVYLG4uQkxPQ0ssbi5QQUdFX0JSRUFLLG4uU0VQQVJBVE9SLG4uVEFCTEUsbi5USVRMRSxuLkxJU1Q7dmFyIE47KGZ1bmN0aW9uKGUpe2UuVUw9InVsIixlLk9MPSJvbCJ9KShOfHwoTj17fSkpO3ZhciBPOyhmdW5jdGlvbihlKXtlLkRJU0M9ImRpc2MiLGUuQ0lSQ0xFPSJjaXJjbGUiLGUuU1FVQVJFPSJzcXVhcmUiLGUuQ0hFQ0tCT1g9ImNoZWNrYm94In0pKE98fChPPXt9KSk7dmFyIEg7KGZ1bmN0aW9uKGUpe2UuREVDSU1BTD0iZGVjaW1hbCJ9KShIfHwoSD17fSkpO3ZhciB2OyhmdW5jdGlvbihlKXtlW2UuRElTQz1PLkRJU0NdPSJESVNDIixlW2UuQ0lSQ0xFPU8uQ0lSQ0xFXT0iQ0lSQ0xFIixlW2UuU1FVQVJFPU8uU1FVQVJFXT0iU1FVQVJFIixlW2UuREVDSU1BTD1ILkRFQ0lNQUxdPSJERUNJTUFMIixlW2UuQ0hFQ0tCT1g9Ty5DSEVDS0JPWF09IkNIRUNLQk9YIn0pKHZ8fCh2PXt9KSksTy5ESVNDKyIiLE8uQ0lSQ0xFKyIiLE8uU1FVQVJFKyIiLE8uQ0hFQ0tCT1grIiIsTi5PTCsiIixOLlVMKyIiLHYuRElTQysiIix2LkNJUkNMRSsiIix2LlNRVUFSRSsiIix2LkRFQ0lNQUwrIiIsdi5DSEVDS0JPWCsiIjt2YXIgdTsoZnVuY3Rpb24oZSl7ZS5GSVJTVD0iZmlyc3QiLGUuU0VDT05EPSJzZWNvbmQiLGUuVEhJUkQ9InRoaXJkIixlLkZPVVJUSD0iZm91cnRoIixlLkZJRlRIPSJmaWZ0aCIsZS5TSVhUSD0ic2l4dGgifSkodXx8KHU9e30pKSx1LkZJUlNUKyIiLHUuU0VDT05EKyIiLHUuVEhJUkQrIiIsdS5GT1VSVEgrIiIsdS5GSUZUSCsiIix1LlNJWFRIKyIiLHUuRklSU1QrIiIsdS5TRUNPTkQrIiIsdS5USElSRCsiIix1LkZPVVJUSCsiIix1LkZJRlRIKyIiLHUuU0lYVEgrIiIsdS5GSVJTVCx1LlNFQ09ORCx1LlRISVJELHUuRk9VUlRILHUuRklGVEgsdS5TSVhUSDt2YXIgRzsoZnVuY3Rpb24oZSl7ZS5JRlJBTUU9ImlmcmFtZSIsZS5WSURFTz0idmlkZW8ifSkoR3x8KEc9e30pKTt2YXIgejsoZnVuY3Rpb24oZSl7ZS5URVhUPSJ0ZXh0IixlLlNFTEVDVD0ic2VsZWN0IixlLkNIRUNLQk9YPSJjaGVja2JveCIsZS5SQURJTz0icmFkaW8iLGUuREFURT0iZGF0ZSIsZS5OVU1CRVI9Im51bWJlciJ9KSh6fHwoej17fSkpO3ZhciBDOyhmdW5jdGlvbihlKXtlLlBSRUZJWD0icHJlZml4IixlLlBPU1RGSVg9InBvc3RmaXgiLGUuUFJFX1RFWFQ9InByZVRleHQiLGUuUE9TVF9URVhUPSJwb3N0VGV4dCIsZS5QTEFDRUhPTERFUj0icGxhY2Vob2xkZXIiLGUuVkFMVUU9InZhbHVlIixlLkNIRUNLQk9YPSJjaGVja2JveCIsZS5SQURJTz0icmFkaW8ifSkoQ3x8KEM9e30pKTt2YXIgWTsoZnVuY3Rpb24oZSl7ZS5ST1dfU1RBUlQ9InJvd1N0YXJ0IixlLlZBTFVFX1NUQVJUPSJ2YWx1ZVN0YXJ0In0pKFl8fChZPXt9KSk7dmFyIFY7KGZ1bmN0aW9uKGUpe2UuQUNUSVZFPSJhY3RpdmUiLGUuSU5BQ1RJVkU9ImluYWN0aXZlIn0pKFZ8fChWPXt9KSk7dmFyIFE7KGZ1bmN0aW9uKGUpe2UuTlVNQkVSPSJudW1iZXIiLGUuT1BFUkFUT1I9Im9wZXJhdG9yIixlLlVUSUxJVFk9InV0aWxpdHkiLGUuRVFVQUw9ImVxdWFsIn0pKFF8fChRPXt9KSk7dmFyIFc7KGZ1bmN0aW9uKGUpe2UuQ09NUE9ORU5UPSJjb21wb25lbnQiLGUuTUVOVT0ibWVudSIsZS5NQUlOPSJtYWluIixlLkZPT1RFUj0iZm9vdGVyIixlLkNPTlRFWFRNRU5VPSJjb250ZXh0bWVudSIsZS5QT1BVUD0icG9wdXAiLGUuQ0FUQUxPRz0iY2F0YWxvZyIsZS5DT01NRU5UPSJjb21tZW50In0pKFd8fChXPXt9KSk7dmFyIHE7KGZ1bmN0aW9uKGUpe2UuUEFHRT0icGFnZSIsZS5UQUJMRT0idGFibGUifSkocXx8KHE9e30pKTt2YXIgWjsoZnVuY3Rpb24oZSl7ZS5FRElUPSJlZGl0IixlLkNMRUFOPSJjbGVhbiIsZS5SRUFET05MWT0icmVhZG9ubHkiLGUuRk9STT0iZm9ybSIsZS5QUklOVD0icHJpbnQiLGUuREVTSUdOPSJkZXNpZ24iLGUuR1JBRkZJVEk9ImdyYWZmaXRpIn0pKFp8fChaPXt9KSk7dmFyIEo7KGZ1bmN0aW9uKGUpe2UuSEVBREVSPSJoZWFkZXIiLGUuTUFJTj0ibWFpbiIsZS5GT09URVI9ImZvb3RlciJ9KShKfHwoSj17fSkpO3ZhciBqOyhmdW5jdGlvbihlKXtlLlBBR0lORz0icGFnaW5nIixlLkNPTlRJTlVJVFk9ImNvbnRpbnVpdHkifSkoanx8KGo9e30pKTt2YXIgJDsoZnVuY3Rpb24oZSl7ZS5WRVJUSUNBTD0idmVydGljYWwiLGUuSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCJ9KSgkfHwoJD17fSkpO3ZhciBlZTsoZnVuY3Rpb24oZSl7ZS5CUkVBS19BTEw9ImJyZWFrLWFsbCIsZS5CUkVBS19XT1JEPSJicmVhay13b3JkIn0pKGVlfHwoZWU9e30pKTt2YXIgdGU7KGZ1bmN0aW9uKGUpe2UuU1BFRUQ9InNwZWVkIixlLkNPTVBBVElCSUxJVFk9ImNvbXBhdGliaWxpdHkifSkodGV8fCh0ZT17fSkpO3ZhciBEOyhmdW5jdGlvbihlKXtlLkxFRlQ9ImxlZnQiLGUuQ0VOVEVSPSJjZW50ZXIiLGUuUklHSFQ9InJpZ2h0IixlLkFMSUdOTUVOVD0iYWxpZ25tZW50IixlLkpVU1RJRlk9Imp1c3RpZnkifSkoRHx8KEQ9e30pKTt2YXIgaWU7KGZ1bmN0aW9uKGUpe2UuQUxMPSJhbGwiLGUuRU1QVFk9ImVtcHR5IixlLkVYVEVSTkFMPSJleHRlcm5hbCIsZS5JTlRFUk5BTD0iaW50ZXJuYWwiLGUuREFTSD0iZGFzaCJ9KShpZXx8KGllPXt9KSk7dmFyIGFlOyhmdW5jdGlvbihlKXtlLlRPUD0idG9wIixlLlJJR0hUPSJyaWdodCIsZS5CT1RUT009ImJvdHRvbSIsZS5MRUZUPSJsZWZ0In0pKGFlfHwoYWU9e30pKTt2YXIgbGU7KGZ1bmN0aW9uKGUpe2UuRk9SV0FSRD0iZm9yd2FyZCIsZS5CQUNLPSJiYWNrIn0pKGxlfHwobGU9e30pKTt2YXIgazsoZnVuY3Rpb24oZSl7ZS5DT05UQUlOPSJjb250YWluIixlLkNPVkVSPSJjb3ZlciJ9KShrfHwoaz17fSkpO3ZhciBtOyhmdW5jdGlvbihlKXtlLlJFUEVBVD0icmVwZWF0IixlLk5PX1JFUEVBVD0ibm8tcmVwZWF0IixlLlJFUEVBVF9YPSJyZXBlYXQteCIsZS5SRVBFQVRfWT0icmVwZWF0LXkifSkobXx8KG09e30pKSxrLkNPVkVSLG0uTk9fUkVQRUFUO3ZhciBGOyhmdW5jdGlvbihlKXtlLlRPUD0idG9wIixlLk1JRERMRT0ibWlkZGxlIixlLkJPVFRPTT0iYm90dG9tIn0pKEZ8fChGPXt9KSksRi5CT1RUT00sVC5IQUxGLFQuSEFMRjtjb25zdCB1ZT17UEFHRV9OTzoie3BhZ2VOb30iLFBBR0VfQ09VTlQ6IntwYWdlQ291bnR9In07RC5DRU5URVIsdWUuUEFHRV9OTyxJLkFSQUJJQyxGLkJPVFRPTTt2YXIgeTsoZnVuY3Rpb24oZSl7ZS5URVhUPSJ0ZXh0IixlLklNQUdFPSJpbWFnZSJ9KSh5fHwoeT17fSkpO3ZhciBVOyhmdW5jdGlvbihlKXtlLkJPVFRPTT0iYm90dG9tIixlLlRPUD0idG9wIn0pKFV8fChVPXt9KSkseS5URVhULEkuQVJBQklDLFUuQk9UVE9NO3ZhciBCOyhmdW5jdGlvbihlKXtlLlBBR0U9InBhZ2UiLGUuQ09OVElOVUlUWT0iY29udGludWl0eSJ9KShCfHwoQj17fSkpLEIuQ09OVElOVUlUWTtmdW5jdGlvbiBUZShlLGMpe2NvbnN0IEU9T2JqZWN0LmtleXMoZSksQT1PYmplY3Qua2V5cyhjKTtpZihFLmxlbmd0aCE9PUEubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgUj0wO1I8RS5sZW5ndGg7UisrKXtjb25zdCBhPUVbUl07aWYoYSE9PSJ2YWx1ZSImJiEoYT09PSJncm91cElkcyImJkFycmF5LmlzQXJyYXkoZVthXSkmJkFycmF5LmlzQXJyYXkoY1thXSkmJm9lKGVbYV0sY1thXSkpJiZlW2FdIT09Y1thXSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiB4KGUsYz17fSl7Y29uc3R7ZXh0cmFQaWNrQXR0cnM6RX09YyxBPVsuLi5zZV07RSYmQS5wdXNoKC4uLkUpO2NvbnN0IFI9e3ZhbHVlOmUudmFsdWU9PT1QP2AKYDplLnZhbHVlfTtyZXR1cm4gQS5mb3JFYWNoKGE9Pntjb25zdCBwPWVbYV07cCE9PXZvaWQgMCYmKFJbYV09cCl9KSxSfWZ1bmN0aW9uIGgoZSxjPXt9KXtjb25zdHtleHRyYVBpY2tBdHRyczpFLGlzQ2xhc3NpZnlBcmVhOkE9ITEsaXNDbG9uZTpSPSEwfT1jLGE9Uj9iKGUpOmUscD1bXTtsZXQgaT0wO2Zvcig7aTxhLmxlbmd0aDspe2xldCB0PWFbaV07aWYoaT09PTAmJnQudmFsdWU9PT1QJiYhdC5saXN0SWQmJighdC50eXBlfHx0LnR5cGU9PT1uLlRFWFQpKXtpKys7Y29udGludWV9aWYodC5hcmVhSWQpe2NvbnN0IGw9dC5hcmVhSWQsZj10LmFyZWEscz1bXTtmb3IoO2k8YS5sZW5ndGg7KXtjb25zdCBvPWFbaV07aWYobCE9PW8uYXJlYUlkKXtpLS07YnJlYWt9ZGVsZXRlIG8uYXJlYSxkZWxldGUgby5hcmVhSWQscy5wdXNoKG8pLGkrK31jb25zdCByPWgocyxjKTtpZihBKXtjb25zdCBvPXt0eXBlOm4uQVJFQSx2YWx1ZToiIixhcmVhSWQ6bCxhcmVhOmZ9O28udmFsdWVMaXN0PXIsdD1vfWVsc2V7cC5zcGxpY2UoaSwwLC4uLnIpO2NvbnRpbnVlfX1lbHNlIGlmKHQudGl0bGVJZCYmdC5sZXZlbCl7Y29uc3QgbD10LnRpdGxlSWQ7aWYobCl7Y29uc3QgZj10LmxldmVsLHM9e3R5cGU6bi5USVRMRSx0aXRsZTp0LnRpdGxlLHRpdGxlSWQ6bCx2YWx1ZToiIixsZXZlbDpmfSxyPVtdO2Zvcig7aTxhLmxlbmd0aDspe2NvbnN0IG89YVtpXTtpZihsIT09by50aXRsZUlkKXtpLS07YnJlYWt9ZGVsZXRlIG8ubGV2ZWwsZGVsZXRlIG8udGl0bGUsci5wdXNoKG8pLGkrK31zLnZhbHVlTGlzdD1oKHIsYyksdD1zfX1lbHNlIGlmKHQubGlzdElkJiZ0Lmxpc3RUeXBlKXtjb25zdCBsPXQubGlzdElkO2lmKGwpe2NvbnN0IGY9dC5saXN0VHlwZSxzPXQubGlzdFN0eWxlLHI9e3R5cGU6bi5MSVNULHZhbHVlOiIiLGxpc3RJZDpsLGxpc3RUeXBlOmYsbGlzdFN0eWxlOnN9LG89W107Zm9yKDtpPGEubGVuZ3RoOyl7Y29uc3QgTD1hW2ldO2lmKGwhPT1MLmxpc3RJZCl7aS0tO2JyZWFrfWRlbGV0ZSBMLmxpc3RUeXBlLGRlbGV0ZSBMLmxpc3RTdHlsZSxvLnB1c2goTCksaSsrfXIudmFsdWVMaXN0PWgobyxjKSx0PXJ9fWVsc2UgaWYodC50eXBlPT09bi5UQUJMRSl7aWYodC5wYWdpbmdJZCl7bGV0IGw9aSsxLGY9MDtmb3IoO2w8YS5sZW5ndGg7KXtjb25zdCBzPWFbbF07aWYocy5wYWdpbmdJZD09PXQucGFnaW5nSWQpdC5oZWlnaHQrPXMuaGVpZ2h0LHQudHJMaXN0LnB1c2goLi4ucy50ckxpc3QpLGwrKyxmKys7ZWxzZSBicmVha31pKz1mfWlmKHQudHJMaXN0KWZvcihsZXQgbD0wO2w8dC50ckxpc3QubGVuZ3RoO2wrKyl7Y29uc3QgZj10LnRyTGlzdFtsXTtkZWxldGUgZi5pZDtmb3IobGV0IHM9MDtzPGYudGRMaXN0Lmxlbmd0aDtzKyspe2NvbnN0IHI9Zi50ZExpc3Rbc10sbz17Y29sc3BhbjpyLmNvbHNwYW4scm93c3BhbjpyLnJvd3NwYW4sdmFsdWU6aChyLnZhbHVlLFgoZyh7fSxjKSx7aXNDbGFzc2lmeUFyZWE6ITF9KSl9O2ZlLmZvckVhY2goTD0+e2NvbnN0IFM9cltMXTtTIT09dm9pZCAwJiYob1tMXT1TKX0pLGYudGRMaXN0W3NdPW99fX1lbHNlIGlmKHQudHlwZT09PW4uSFlQRVJMSU5LKXtjb25zdCBsPXQuaHlwZXJsaW5rSWQ7aWYobCl7Y29uc3QgZj17dHlwZTpuLkhZUEVSTElOSyx2YWx1ZToiIix1cmw6dC51cmx9LHM9W107Zm9yKDtpPGEubGVuZ3RoOyl7Y29uc3Qgcj1hW2ldO2lmKGwhPT1yLmh5cGVybGlua0lkKXtpLS07YnJlYWt9ZGVsZXRlIHIudHlwZSxkZWxldGUgci51cmwscy5wdXNoKHIpLGkrK31mLnZhbHVlTGlzdD1oKHMsYyksdD1mfX1lbHNlIGlmKHQudHlwZT09PW4uREFURSl7Y29uc3QgbD10LmRhdGVJZDtpZihsKXtjb25zdCBmPXt0eXBlOm4uREFURSx2YWx1ZToiIixkYXRlRm9ybWF0OnQuZGF0ZUZvcm1hdH0scz1bXTtmb3IoO2k8YS5sZW5ndGg7KXtjb25zdCByPWFbaV07aWYobCE9PXIuZGF0ZUlkKXtpLS07YnJlYWt9ZGVsZXRlIHIudHlwZSxkZWxldGUgci5kYXRlRm9ybWF0LHMucHVzaChyKSxpKyt9Zi52YWx1ZUxpc3Q9aChzLGMpLHQ9Zn19ZWxzZSBpZih0LmNvbnRyb2xJZCl7Y29uc3QgbD10LmNvbnRyb2xJZDtpZih0LmNvbnRyb2xDb21wb25lbnQ9PT1DLlBSRUZJWCl7Y29uc3QgZj1bXTtsZXQgcz0hMSxyPWk7Zm9yKDtyPGEubGVuZ3RoOyl7Y29uc3Qgbz1hW3JdO2lmKGwhPT1vLmNvbnRyb2xJZClicmVhaztvLmNvbnRyb2xDb21wb25lbnQ9PT1DLlZBTFVFJiYoZGVsZXRlIG8uY29udHJvbCxkZWxldGUgby5jb250cm9sSWQsZi5wdXNoKG8pKSxvLmNvbnRyb2xDb21wb25lbnQ9PT1DLlBPU1RGSVgmJihzPSEwKSxyKyt9aWYocyl7Y29uc3Qgbz1LKHQsRWUpLEw9ZyhnKHt9LHQuY29udHJvbCksbyksUz1YKGcoe30sSyh0LGNlKSkse3R5cGU6bi5DT05UUk9MLHZhbHVlOiIiLGNvbnRyb2w6TCxjb250cm9sSWQ6bH0pO1MuY29udHJvbC52YWx1ZT1oKGYsYyksdD14KFMse2V4dHJhUGlja0F0dHJzOkV9KSxpKz1yLWktMX19aWYodC5jb250cm9sQ29tcG9uZW50JiYoZGVsZXRlIHQuY29udHJvbCxkZWxldGUgdC5jb250cm9sSWQsdC5jb250cm9sQ29tcG9uZW50IT09Qy5WQUxVRSYmdC5jb250cm9sQ29tcG9uZW50IT09Qy5QUkVfVEVYVCYmdC5jb250cm9sQ29tcG9uZW50IT09Qy5QT1NUX1RFWFQpKXtpKys7Y29udGludWV9fWNvbnN0IE09eCh0LHtleHRyYVBpY2tBdHRyczpFfSk7aWYoIXQudHlwZXx8dC50eXBlPT09bi5URVhUfHx0LnR5cGU9PT1uLlNVQlNDUklQVHx8dC50eXBlPT09bi5TVVBFUlNDUklQVClmb3IoO2k8YS5sZW5ndGg7KXtjb25zdCBsPWFbaSsxXTtpZihpKyssbCYmVGUoTSx4KGwse2V4dHJhUGlja0F0dHJzOkV9KSkpe2NvbnN0IGY9bC52YWx1ZT09PVA/YApgOmwudmFsdWU7TS52YWx1ZSs9Zn1lbHNlIGJyZWFrfWVsc2UgaSsrO3AucHVzaChNKX1yZXR1cm4gcH1vbm1lc3NhZ2U9ZT0+e2NvbnN0IGM9ZS5kYXRhLHtvcHRpb25zOkUsZGF0YTpBfT1jLHtleHRyYVBpY2tBdHRyczpSPVtdfT1FfHx7fSxhPXtoZWFkZXI6aChBLmhlYWRlcix7ZXh0cmFQaWNrQXR0cnM6Uixpc0Nsb25lOiExfSksbWFpbjpoKEEubWFpbix7ZXh0cmFQaWNrQXR0cnM6Uixpc0NsYXNzaWZ5QXJlYTohMCxpc0Nsb25lOiExfSksZm9vdGVyOmgoQS5mb290ZXIse2V4dHJhUGlja0F0dHJzOlIsaXNDbG9uZTohMX0pfTtwb3N0TWVzc2FnZShhKX19KSgpO30pKCk7Cg==";
15687
15736
  const blob = typeof window !== "undefined" && window.Blob && new Blob([atob(encodedJs)], { type: "text/javascript;charset=utf-8" });
15688
15737
  function WorkerWrapper() {
15689
15738
  const objURL = blob && (window.URL || window.webkitURL).createObjectURL(blob);
@@ -15764,6 +15813,12 @@ class WorkerManager {
15764
15813
  });
15765
15814
  });
15766
15815
  }
15816
+ destroy() {
15817
+ this.wordCountWorker.terminate();
15818
+ this.catalogWorker.terminate();
15819
+ this.groupWorker.terminate();
15820
+ this.valueWorker.terminate();
15821
+ }
15767
15822
  }
15768
15823
  class Previewer {
15769
15824
  constructor(draw) {
@@ -16574,7 +16629,6 @@ class BaseBlock {
16574
16629
  }
16575
16630
  } else if (block.type === BlockType.IFRAME) {
16576
16631
  this.setClientRects(pageNo, x, y);
16577
- this.positionInfo = { pageNo, x, y };
16578
16632
  }
16579
16633
  }
16580
16634
  render() {
@@ -16597,6 +16651,7 @@ class BaseBlock {
16597
16651
  this.blockItem.style.height = `${metrics.height}px`;
16598
16652
  this.blockItem.style.left = `${x}px`;
16599
16653
  this.blockItem.style.top = `${preY + y}px`;
16654
+ this.positionInfo = { pageNo, x, y };
16600
16655
  }
16601
16656
  setStatus() {
16602
16657
  if (this.block instanceof IFrameBlock) {
@@ -16678,6 +16733,27 @@ class BlockParticle {
16678
16733
  }
16679
16734
  });
16680
16735
  }
16736
+ async drawIframeToPage(pageList, snapDomFunction) {
16737
+ const tasks = [];
16738
+ this.blockMap.forEach((cacheBlock) => {
16739
+ var _a, _b, _c;
16740
+ if (((_a = cacheBlock.getBlockElement().block) == null ? void 0 : _a.type) !== BlockType.IFRAME)
16741
+ return;
16742
+ const positionInfo = cacheBlock.getPositionInfo();
16743
+ if (!positionInfo)
16744
+ return;
16745
+ const iframe = (_b = cacheBlock.getIFrameBlock()) == null ? void 0 : _b.getIframe();
16746
+ if (!iframe)
16747
+ return;
16748
+ const { pageNo, x, y } = positionInfo;
16749
+ const ctx = (_c = pageList[pageNo]) == null ? void 0 : _c.getContext("2d");
16750
+ if (!ctx)
16751
+ return;
16752
+ const { width, height } = cacheBlock.getBlockElement().metrics;
16753
+ tasks.push(snapDomFunction(iframe).then((base64) => loadImage(base64)).then((img) => ctx.drawImage(img, x, y, width, height)));
16754
+ });
16755
+ await Promise.allSettled(tasks);
16756
+ }
16681
16757
  pickIframeInfo() {
16682
16758
  const result = [];
16683
16759
  const { scale } = this.options;
@@ -19874,7 +19950,7 @@ class Draw {
19874
19950
  return this.getRowList().length;
19875
19951
  }
19876
19952
  async getDataURL(payload = {}) {
19877
- const { pixelRatio, mode } = payload;
19953
+ const { pixelRatio, mode, snapDomFunction } = payload;
19878
19954
  if (pixelRatio) {
19879
19955
  this.setPagePixelRatio(pixelRatio);
19880
19956
  }
@@ -19890,6 +19966,9 @@ class Draw {
19890
19966
  isSubmitHistory: false
19891
19967
  });
19892
19968
  await this.imageObserver.allSettled();
19969
+ if (snapDomFunction) {
19970
+ await this.blockParticle.drawIframeToPage(this.pageList, snapDomFunction);
19971
+ }
19893
19972
  const dataUrlList = this.pageList.map((c) => c.toDataURL());
19894
19973
  if (pixelRatio) {
19895
19974
  this.setPagePixelRatio(null);
@@ -20203,7 +20282,7 @@ class Draw {
20203
20282
  computeRowList(payload) {
20204
20283
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v;
20205
20284
  const { innerWidth, elementList, isPagingMode = false, isFromTable = false, startX = 0, startY = 0, pageHeight = 0, mainOuterHeight = 0, surroundElementList = [] } = payload;
20206
- const { defaultSize, scale, imgCaption, table: { tdPadding, defaultTrMinHeight }, defaultTabWidth } = this.options;
20285
+ const { defaultSize, scale, imgCaption, table: { tdPadding }, defaultTabWidth } = this.options;
20207
20286
  const defaultBasicRowMarginHeight = this.getDefaultBasicRowMarginHeight();
20208
20287
  const canvas = document.createElement("canvas");
20209
20288
  const ctx = canvas.getContext("2d");
@@ -20297,9 +20376,10 @@ class Draw {
20297
20376
  }
20298
20377
  element.pagingIndex = (_g = element.pagingIndex) != null ? _g : 0;
20299
20378
  const trList = element.trList;
20379
+ const tdMinHeight = tdPaddingHeight + defaultSize + rowMargin * 2 / scale;
20300
20380
  for (let t = 0; t < trList.length; t++) {
20301
20381
  const tr = trList[t];
20302
- tr.height = tr.minHeight || defaultTrMinHeight;
20382
+ tr.height = Math.max(tdMinHeight, tr.minHeight || 0);
20303
20383
  tr.minHeight = tr.height;
20304
20384
  }
20305
20385
  this.tableParticle.computeRowColInfo(element);
@@ -20997,6 +21077,7 @@ class Draw {
20997
21077
  const { elementList, positionList, rowList, pageNo } = payload;
20998
21078
  const { inactiveAlpha, pageMode, header, footer, pageNumber, lineNumber, pageBorder } = this.options;
20999
21079
  const isPrintMode = this.mode === EditorMode.PRINT;
21080
+ const isContinuityMode = pageMode === PageMode.CONTINUITY;
21000
21081
  const innerWidth = this.getInnerWidth();
21001
21082
  const ctx = this.ctxList[pageNo];
21002
21083
  ctx.globalAlpha = !this.zone.isMainActive() ? inactiveAlpha : 1;
@@ -21007,7 +21088,7 @@ class Draw {
21007
21088
  if (!isPrintMode) {
21008
21089
  this.area.render(ctx, pageNo);
21009
21090
  }
21010
- if (pageMode !== PageMode.CONTINUITY && this.options.watermark.data) {
21091
+ if (!isContinuityMode && this.options.watermark.data && this.options.watermark.layer === WatermarkLayer.BOTTOM) {
21011
21092
  this.waterMark.render(ctx, pageNo);
21012
21093
  }
21013
21094
  if (!isPrintMode) {
@@ -21061,6 +21142,9 @@ class Draw {
21061
21142
  if (this.isGraffitiMode()) {
21062
21143
  this.graffiti.render(ctx, pageNo);
21063
21144
  }
21145
+ if (!isContinuityMode && this.options.watermark.data && this.options.watermark.layer === WatermarkLayer.TOP) {
21146
+ this.waterMark.render(ctx, pageNo);
21147
+ }
21064
21148
  }
21065
21149
  _disconnectLazyRender() {
21066
21150
  var _a;
@@ -21260,10 +21344,13 @@ class Draw {
21260
21344
  });
21261
21345
  }
21262
21346
  destroy() {
21347
+ var _a;
21263
21348
  this.container.remove();
21264
21349
  this.globalEvent.removeEvent();
21265
21350
  this.scrollObserver.removeEvent();
21266
21351
  this.selectionObserver.removeEvent();
21352
+ this.workerManager.destroy();
21353
+ (_a = this.lazyRenderIntersectionObserver) == null ? void 0 : _a.disconnect();
21267
21354
  }
21268
21355
  clearSideEffect() {
21269
21356
  this.getPreviewer().clearResizer();
@@ -22719,7 +22806,7 @@ class CommandAdapt {
22719
22806
  if (isReadonly)
22720
22807
  return;
22721
22808
  const options = this.draw.getOptions();
22722
- const { color, size, opacity, font, gap } = defaultWatermarkOption;
22809
+ const { color, size, opacity, font, gap, layer } = defaultWatermarkOption;
22723
22810
  options.watermark.data = payload.data;
22724
22811
  options.watermark.type = payload.type || WatermarkType.TEXT;
22725
22812
  if (payload.width) {
@@ -22737,6 +22824,7 @@ class CommandAdapt {
22737
22824
  options.watermark.numberType = payload.numberType;
22738
22825
  }
22739
22826
  options.watermark.gap = payload.gap || gap;
22827
+ options.watermark.layer = payload.layer || layer;
22740
22828
  this.draw.render({
22741
22829
  isSetCursor: false,
22742
22830
  isSubmitHistory: false,
@@ -25107,5 +25195,5 @@ class Editor {
25107
25195
  this.use = plugin.use.bind(plugin);
25108
25196
  }
25109
25197
  }
25110
- export { AreaMode, BackgroundRepeat, BackgroundSize, BlockType, Command, ControlComponent, ControlIndentation, ControlState, ControlType, EDITOR_CLIPBOARD, EDITOR_COMPONENT, Editor, EditorComponent, EditorMode, EditorZone, ElementType, FlexDirection, INTERNAL_CONTEXT_MENU_KEY, INTERNAL_SHORTCUT_KEY, ImageDisplay, KeyMap, LETTER_CLASS, LineNumberType, ListStyle, ListType, LocationPosition, MaxHeightRatio, NumberType, PageMode, PaperDirection, RenderMode, RowFlex, TableBorder, TdBorder, TdSlash, TextDecorationStyle, TitleLevel, VerticalAlign, WatermarkType, WordBreak, createDomFromElementList, Editor as default, getElementListByHTML, getTextFromElementList, splitText };
25198
+ export { AreaMode, BackgroundRepeat, BackgroundSize, BlockType, Command, ControlComponent, ControlIndentation, ControlState, ControlType, EDITOR_CLIPBOARD, EDITOR_COMPONENT, Editor, EditorComponent, EditorMode, EditorZone, ElementType, FlexDirection, INTERNAL_CONTEXT_MENU_KEY, INTERNAL_SHORTCUT_KEY, ImageDisplay, KeyMap, LETTER_CLASS, LineNumberType, ListStyle, ListType, LocationPosition, MaxHeightRatio, NumberType, PageMode, PaperDirection, RenderMode, RowFlex, TableBorder, TdBorder, TdSlash, TextDecorationStyle, TitleLevel, VerticalAlign, WatermarkLayer, WatermarkType, WordBreak, createDomFromElementList, Editor as default, getElementListByHTML, getTextFromElementList, splitText };
25111
25199
  //# sourceMappingURL=canvas-editor.es.js.map