@hufe921/canvas-editor 0.9.106 → 0.9.108

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,44 @@
1
+ ## [0.9.108](https://github.com/Hufe921/canvas-editor/compare/v0.9.107...v0.9.108) (2025-04-30)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * delete pickElementAttr method data reference #1107 ([a7a7e47](https://github.com/Hufe921/canvas-editor/commit/a7a7e474b6170d26c2b253c8189720e25e17438b)), closes [#1107](https://github.com/Hufe921/canvas-editor/issues/1107)
7
+ * set non deletable control boundary error #1111 ([34fe3e8](https://github.com/Hufe921/canvas-editor/commit/34fe3e87d03b0abf22511d5054ea966847ef853a)), closes [#1111](https://github.com/Hufe921/canvas-editor/issues/1111)
8
+
9
+
10
+ ### Chores
11
+
12
+ * update README.md ([f6828fb](https://github.com/Hufe921/canvas-editor/commit/f6828fb43a176d3098fe3bac1cd0dde9744d630d))
13
+
14
+
15
+ ### Features
16
+
17
+ * add control disabledBackgroundColor option #1105 ([bb6b5ce](https://github.com/Hufe921/canvas-editor/commit/bb6b5ce711ab784ff4e1f3e2b98629bca2018dbd)), closes [#1105](https://github.com/Hufe921/canvas-editor/issues/1105)
18
+ * locate outside the control #1100 ([949421b](https://github.com/Hufe921/canvas-editor/commit/949421baad9ba5854913af0bc17f1b4df7b88f69)), closes [#1100](https://github.com/Hufe921/canvas-editor/issues/1100)
19
+
20
+
21
+
22
+ ## [0.9.107](https://github.com/Hufe921/canvas-editor/compare/v0.9.106...v0.9.107) (2025-04-18)
23
+
24
+
25
+ ### Bug Fixes
26
+
27
+ * area background position error #1082 ([d708629](https://github.com/Hufe921/canvas-editor/commit/d708629c4883b73c78d722352a6ff5a08642fa9e)), closes [#1082](https://github.com/Hufe921/canvas-editor/issues/1082)
28
+ * delete control element boundary error #1079 ([b8132cd](https://github.com/Hufe921/canvas-editor/commit/b8132cdd82822b2840dee95a88fcc8492737f352)), closes [#1079](https://github.com/Hufe921/canvas-editor/issues/1079)
29
+ * input boundary error when control is disabled #1092 ([353ada2](https://github.com/Hufe921/canvas-editor/commit/353ada21cd70adb61094fef301462063ddc00a01)), closes [#1092](https://github.com/Hufe921/canvas-editor/issues/1092)
30
+ * update area element context #1084 ([a7598d2](https://github.com/Hufe921/canvas-editor/commit/a7598d2a08e87e86ea34e80903f168010362d188)), closes [#1084](https://github.com/Hufe921/canvas-editor/issues/1084)
31
+
32
+
33
+ ### Features
34
+
35
+ * add area deletable option #1014 ([6bb1982](https://github.com/Hufe921/canvas-editor/commit/6bb19824c1f6f31adb99ecac5c8b20d3dfa7b17c)), closes [#1014](https://github.com/Hufe921/canvas-editor/issues/1014)
36
+ * add area placeholder option #1076 ([fd9f780](https://github.com/Hufe921/canvas-editor/commit/fd9f780b537c99d9aaa93054e6bbaee8b363ec45)), closes [#1076](https://github.com/Hufe921/canvas-editor/issues/1076)
37
+ * add conceptId to executeImage api #1080 ([b05eb06](https://github.com/Hufe921/canvas-editor/commit/b05eb065e25162ebf21a32c160db6f3e74365588)), closes [#1080](https://github.com/Hufe921/canvas-editor/issues/1080)
38
+ * remove null values when merging cells #1096 ([f673352](https://github.com/Hufe921/canvas-editor/commit/f673352b095653e85921c02cee7a23a0bd8105b1)), closes [#1096](https://github.com/Hufe921/canvas-editor/issues/1096)
39
+
40
+
41
+
1
42
  ## [0.9.106](https://github.com/Hufe921/canvas-editor/compare/v0.9.105...v0.9.106) (2025-04-04)
2
43
 
3
44
 
package/README.md CHANGED
@@ -26,7 +26,7 @@
26
26
  <a href="https://github.com/Hufe921/canvas-editor/discussions" target="_blank">FAQ</a>
27
27
  </p>
28
28
 
29
- <p align="center">Love the project? Please consider <a href="https://hufe.club/donate.jpg" target="_blank">donating</a> to help it improve!</p>
29
+ <p align="center">Love the project? Please consider <a href="https://hufe.club/donate.jpg" target="_blank">donating(赞助)</a> to help it improve!</p>
30
30
 
31
31
  ## Tips
32
32
 
@@ -23,7 +23,7 @@ var __publicField = (obj, key, value) => {
23
23
  return value;
24
24
  };
25
25
  var index = "";
26
- const version = "0.9.106";
26
+ const version = "0.9.108";
27
27
  var MaxHeightRatio;
28
28
  (function(MaxHeightRatio2) {
29
29
  MaxHeightRatio2["HALF"] = "half";
@@ -47,6 +47,8 @@ var LocationPosition;
47
47
  (function(LocationPosition2) {
48
48
  LocationPosition2["BEFORE"] = "before";
49
49
  LocationPosition2["AFTER"] = "after";
50
+ LocationPosition2["OUTER_BEFORE"] = "outer-before";
51
+ LocationPosition2["OUTER_AFTER"] = "outer-after";
50
52
  })(LocationPosition || (LocationPosition = {}));
51
53
  var FlexDirection;
52
54
  (function(FlexDirection2) {
@@ -3968,7 +3970,8 @@ const defaultControlOption = {
3968
3970
  postfix: "}",
3969
3971
  borderWidth: 1,
3970
3972
  borderColor: "#000000",
3971
- activeBackgroundColor: ""
3973
+ activeBackgroundColor: "",
3974
+ disabledBackgroundColor: ""
3972
3975
  };
3973
3976
  const defaultFooterOption = {
3974
3977
  bottom: 30,
@@ -4248,6 +4251,7 @@ function formatElementList(elementList, options) {
4248
4251
  const value = valueList[v];
4249
4252
  value.areaId = el.areaId || areaId;
4250
4253
  value.area = el.area;
4254
+ value.areaIndex = v;
4251
4255
  if (value.type === ElementType.TABLE) {
4252
4256
  const trList = value.trList;
4253
4257
  for (let r = 0; r < trList.length; r++) {
@@ -4562,7 +4566,7 @@ function isSameElementExceptValue(source, target) {
4562
4566
  }
4563
4567
  function pickElementAttr(payload, option = {}) {
4564
4568
  const { extraPickAttrs } = option;
4565
- const zipAttrs = EDITOR_ELEMENT_ZIP_ATTR;
4569
+ const zipAttrs = [...EDITOR_ELEMENT_ZIP_ATTR];
4566
4570
  if (extraPickAttrs) {
4567
4571
  zipAttrs.push(...extraPickAttrs);
4568
4572
  }
@@ -11951,7 +11955,9 @@ class SelectControl {
11951
11955
  if (!~leftIndex || !~rightIndex)
11952
11956
  return -1;
11953
11957
  const draw = this.control.getDraw();
11954
- draw.spliceElementList(elementList, leftIndex + 1, rightIndex - leftIndex);
11958
+ draw.spliceElementList(elementList, leftIndex + 1, rightIndex - leftIndex, [], {
11959
+ isIgnoreDeletedRule: options.isIgnoreDeletedRule
11960
+ });
11955
11961
  if (isAddPlaceholder) {
11956
11962
  this.control.addPlaceholder(preIndex, context);
11957
11963
  }
@@ -11990,7 +11996,9 @@ class SelectControl {
11990
11996
  const text = this.getText(newCodes);
11991
11997
  if (!text) {
11992
11998
  if (oldCode) {
11993
- const prefixIndex2 = this.clearSelect(context);
11999
+ const prefixIndex2 = this.clearSelect(context, {
12000
+ isIgnoreDeletedRule: options.isIgnoreDeletedRule
12001
+ });
11994
12002
  if (~prefixIndex2) {
11995
12003
  this.control.repaintControl({
11996
12004
  curIndex: prefixIndex2
@@ -12005,7 +12013,8 @@ class SelectControl {
12005
12013
  const valueElement = this.getValue(context)[0];
12006
12014
  const styleElement = valueElement ? pickObject(valueElement, EDITOR_ELEMENT_STYLE_ATTR) : pickObject(elementList[range.startIndex], CONTROL_STYLE_ATTR);
12007
12015
  const prefixIndex = this.clearSelect(context, {
12008
- isAddPlaceholder: false
12016
+ isAddPlaceholder: false,
12017
+ isIgnoreDeletedRule: options.isIgnoreDeletedRule
12009
12018
  });
12010
12019
  if (!~prefixIndex)
12011
12020
  return;
@@ -12169,7 +12178,9 @@ class TextControl {
12169
12178
  const { startIndex, endIndex } = range;
12170
12179
  const draw = this.control.getDraw();
12171
12180
  if (startIndex !== endIndex) {
12172
- draw.spliceElementList(elementList, startIndex + 1, endIndex - startIndex);
12181
+ draw.spliceElementList(elementList, startIndex + 1, endIndex - startIndex, [], {
12182
+ isIgnoreDeletedRule: options.isIgnoreDeletedRule
12183
+ });
12173
12184
  } else {
12174
12185
  this.control.removePlaceholder(startIndex, context);
12175
12186
  }
@@ -12198,7 +12209,9 @@ class TextControl {
12198
12209
  const elementList = context.elementList || this.control.getElementList();
12199
12210
  const range = context.range || this.control.getRange();
12200
12211
  const { startIndex, endIndex } = range;
12201
- this.control.getDraw().spliceElementList(elementList, startIndex + 1, endIndex - startIndex);
12212
+ this.control.getDraw().spliceElementList(elementList, startIndex + 1, endIndex - startIndex, [], {
12213
+ isIgnoreDeletedRule: options.isIgnoreDeletedRule
12214
+ });
12202
12215
  const value = this.getValue(context);
12203
12216
  if (!value.length) {
12204
12217
  this.control.addPlaceholder(startIndex, context);
@@ -12846,7 +12859,9 @@ class DateControl {
12846
12859
  return -1;
12847
12860
  const elementList = context.elementList || this.control.getElementList();
12848
12861
  const draw = this.control.getDraw();
12849
- draw.spliceElementList(elementList, leftIndex + 1, rightIndex - leftIndex);
12862
+ draw.spliceElementList(elementList, leftIndex + 1, rightIndex - leftIndex, [], {
12863
+ isIgnoreDeletedRule: options.isIgnoreDeletedRule
12864
+ });
12850
12865
  if (isAddPlaceholder) {
12851
12866
  this.control.addPlaceholder(leftIndex, context);
12852
12867
  }
@@ -12861,7 +12876,8 @@ class DateControl {
12861
12876
  const valueElement = this.getValue(context)[0];
12862
12877
  const styleElement = valueElement ? pickObject(valueElement, EDITOR_ELEMENT_STYLE_ATTR) : pickObject(elementList[range.startIndex], CONTROL_STYLE_ATTR);
12863
12878
  const prefixIndex = this.clearSelect(context, {
12864
- isAddPlaceholder: false
12879
+ isAddPlaceholder: false,
12880
+ isIgnoreDeletedRule: options.isIgnoreDeletedRule
12865
12881
  });
12866
12882
  if (!~prefixIndex)
12867
12883
  return;
@@ -13719,7 +13735,8 @@ class Control {
13719
13735
  elementList
13720
13736
  };
13721
13737
  const controlRule = {
13722
- isIgnoreDisabledRule: true
13738
+ isIgnoreDisabledRule: true,
13739
+ isIgnoreDeletedRule: true
13723
13740
  };
13724
13741
  if (type === ControlType.TEXT) {
13725
13742
  const formatValue = Array.isArray(value) ? value : value ? [{ value }] : [];
@@ -14445,7 +14462,7 @@ function WorkerWrapper$1() {
14445
14462
  objURL && (window.URL || window.webkitURL).revokeObjectURL(objURL);
14446
14463
  }
14447
14464
  }
14448
- const encodedJs = "KCgpPT57dmFyIEV0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxmdD1PYmplY3QuZGVmaW5lUHJvcGVydGllczt2YXIgVHQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7dmFyIGl0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyIEl0PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksQXQ9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgbnQ9KFQsSSxkKT0+SSBpbiBUP0V0KFQsSSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZH0pOlRbSV09ZCxOPShULEkpPT57Zm9yKHZhciBkIGluIEl8fChJPXt9KSlJdC5jYWxsKEksZCkmJm50KFQsZCxJW2RdKTtpZihpdClmb3IodmFyIGQgb2YgaXQoSSkpQXQuY2FsbChJLGQpJiZudChULGQsSVtkXSk7cmV0dXJuIFR9LHg9KFQsSSk9PmZ0KFQsVHQoSSkpOyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgVDsoZnVuY3Rpb24odCl7dC5IQUxGPSJoYWxmIix0Lk9ORV9USElSRD0ib25lLXRoaXJkIix0LlFVQVJURVI9InF1YXJ0ZXIifSkoVHx8KFQ9e30pKTt2YXIgSTsoZnVuY3Rpb24odCl7dC5BUkFCSUM9ImFyYWJpYyIsdC5DSElORVNFPSJjaGluZXNlIn0pKEl8fChJPXt9KSk7dmFyIGQ7KGZ1bmN0aW9uKHQpe3QuSU5MSU5FPSJpbmxpbmUiLHQuQkxPQ0s9ImJsb2NrIix0LlNVUlJPVU5EPSJzdXJyb3VuZCIsdC5GTE9BVF9UT1A9ImZsb2F0LXRvcCIsdC5GTE9BVF9CT1RUT009ImZsb2F0LWJvdHRvbSJ9KShkfHwoZD17fSkpO3ZhciBfOyhmdW5jdGlvbih0KXt0LkJFRk9SRT0iYmVmb3JlIix0LkFGVEVSPSJhZnRlciJ9KShffHwoXz17fSkpO3ZhciBYOyhmdW5jdGlvbih0KXt0LlJPVz0icm93Iix0LkNPTFVNTj0iY29sdW1uIn0pKFh8fChYPXt9KSk7Y29uc3QgRj0iXHUyMDBCIjtULkhBTEYrIiIsMS8yLFQuT05FX1RISVJEKyIiLDEvMyxULlFVQVJURVIrIiIsMS80O2Z1bmN0aW9uIEgodCl7aWYodHlwZW9mIHN0cnVjdHVyZWRDbG9uZT09ImZ1bmN0aW9uIilyZXR1cm4gc3RydWN0dXJlZENsb25lKHQpO2lmKCF0fHx0eXBlb2YgdCE9Im9iamVjdCIpcmV0dXJuIHQ7bGV0IHM9e307cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/cz10Lm1hcChFPT5IKEUpKTpPYmplY3Qua2V5cyh0KS5mb3JFYWNoKEU9PnNbRV09SCh0W0VdKSksc31mdW5jdGlvbiBNKHQscyl7Y29uc3QgRT17fTtmb3IoY29uc3QgQSBpbiB0KXMuaW5jbHVkZXMoQSkmJihFW0FdPXRbQV0pO3JldHVybiBFfWZ1bmN0aW9uIGF0KHQscyl7cmV0dXJuIHQubGVuZ3RoIT09cy5sZW5ndGg/ITE6IXQuc29tZShFPT4hcy5pbmNsdWRlcyhFKSl9dmFyIGw7KGZ1bmN0aW9uKHQpe3QuVEVYVD0idGV4dCIsdC5JTUFHRT0iaW1hZ2UiLHQuVEFCTEU9InRhYmxlIix0LkhZUEVSTElOSz0iaHlwZXJsaW5rIix0LlNVUEVSU0NSSVBUPSJzdXBlcnNjcmlwdCIsdC5TVUJTQ1JJUFQ9InN1YnNjcmlwdCIsdC5TRVBBUkFUT1I9InNlcGFyYXRvciIsdC5QQUdFX0JSRUFLPSJwYWdlQnJlYWsiLHQuQ09OVFJPTD0iY29udHJvbCIsdC5BUkVBPSJhcmVhIix0LkNIRUNLQk9YPSJjaGVja2JveCIsdC5SQURJTz0icmFkaW8iLHQuTEFURVg9ImxhdGV4Iix0LlRBQj0idGFiIix0LkRBVEU9ImRhdGUiLHQuQkxPQ0s9ImJsb2NrIix0LlRJVExFPSJ0aXRsZSIsdC5MSVNUPSJsaXN0In0pKGx8fChsPXt9KSk7Y29uc3QgbHQ9WyJyb3dGbGV4Iiwicm93TWFyZ2luIl0sb3Q9WyJ0eXBlIiwiZm9udCIsInNpemUiLCJib2xkIiwiY29sb3IiLCJpdGFsaWMiLCJoaWdobGlnaHQiLCJ1bmRlcmxpbmUiLCJzdHJpa2VvdXQiLCJyb3dGbGV4Iiwicm93TWFyZ2luIiwiZGFzaEFycmF5IiwidHJMaXN0IiwidGFibGVUb29sRGlzYWJsZWQiLCJib3JkZXJUeXBlIiwiYm9yZGVyQ29sb3IiLCJ3aWR0aCIsImhlaWdodCIsInVybCIsImNvbGdyb3VwIiwidmFsdWVMaXN0IiwiY29udHJvbCIsImNoZWNrYm94IiwicmFkaW8iLCJkYXRlRm9ybWF0IiwiYmxvY2siLCJsZXZlbCIsInRpdGxlIiwibGlzdFR5cGUiLCJsaXN0U3R5bGUiLCJsaXN0V3JhcCIsImdyb3VwSWRzIiwiY29uY2VwdElkIiwiaW1nRGlzcGxheSIsImltZ0Zsb2F0UG9zaXRpb24iLCJpbWdUb29sRGlzYWJsZWQiLCJ0ZXh0RGVjb3JhdGlvbiIsImV4dGVuc2lvbiIsImV4dGVybmFsSWQiLCJhcmVhSWQiLCJhcmVhIl0scnQ9WyJjb25jZXB0SWQiLCJleHRlbnNpb24iLCJleHRlcm5hbElkIiwidmVydGljYWxBbGlnbiIsImJhY2tncm91bmRDb2xvciIsImJvcmRlclR5cGVzIiwic2xhc2hUeXBlcyIsImRpc2FibGVkIiwiZGVsZXRhYmxlIl0sc3Q9WyJmb250Iiwic2l6ZSIsImJvbGQiLCJoaWdobGlnaHQiLCJpdGFsaWMiLCJzdHJpa2VvdXQiXTtsLlRFWFQsbC5IWVBFUkxJTkssbC5TVUJTQ1JJUFQsbC5TVVBFUlNDUklQVCxsLkNPTlRST0wsbC5EQVRFLGwuSU1BR0UsbC5MQVRFWCxsLkJMT0NLLGwuUEFHRV9CUkVBSyxsLlNFUEFSQVRPUixsLlRBQkxFLGwuVElUTEUsbC5MSVNUO3ZhciBnOyhmdW5jdGlvbih0KXt0LlVMPSJ1bCIsdC5PTD0ib2wifSkoZ3x8KGc9e30pKTt2YXIgTzsoZnVuY3Rpb24odCl7dC5ESVNDPSJkaXNjIix0LkNJUkNMRT0iY2lyY2xlIix0LlNRVUFSRT0ic3F1YXJlIix0LkNIRUNLQk9YPSJjaGVja2JveCJ9KShPfHwoTz17fSkpO3ZhciBiOyhmdW5jdGlvbih0KXt0LkRFQ0lNQUw9ImRlY2ltYWwifSkoYnx8KGI9e30pKTt2YXIgdjsoZnVuY3Rpb24odCl7dFt0LkRJU0M9Ty5ESVNDXT0iRElTQyIsdFt0LkNJUkNMRT1PLkNJUkNMRV09IkNJUkNMRSIsdFt0LlNRVUFSRT1PLlNRVUFSRV09IlNRVUFSRSIsdFt0LkRFQ0lNQUw9Yi5ERUNJTUFMXT0iREVDSU1BTCIsdFt0LkNIRUNLQk9YPU8uQ0hFQ0tCT1hdPSJDSEVDS0JPWCJ9KSh2fHwodj17fSkpLE8uRElTQysiIixPLkNJUkNMRSsiIixPLlNRVUFSRSsiIixPLkNIRUNLQk9YKyIiLGcuT0wrIiIsZy5VTCsiIix2LkRJU0MrIiIsdi5DSVJDTEUrIiIsdi5TUVVBUkUrIiIsdi5ERUNJTUFMKyIiLHYuQ0hFQ0tCT1grIiI7dmFyIGY7KGZ1bmN0aW9uKHQpe3QuRklSU1Q9ImZpcnN0Iix0LlNFQ09ORD0ic2Vjb25kIix0LlRISVJEPSJ0aGlyZCIsdC5GT1VSVEg9ImZvdXJ0aCIsdC5GSUZUSD0iZmlmdGgiLHQuU0lYVEg9InNpeHRoIn0pKGZ8fChmPXt9KSksZi5GSVJTVCsiIixmLlNFQ09ORCsiIixmLlRISVJEKyIiLGYuRk9VUlRIKyIiLGYuRklGVEgrIiIsZi5TSVhUSCsiIixmLkZJUlNUKyIiLGYuU0VDT05EKyIiLGYuVEhJUkQrIiIsZi5GT1VSVEgrIiIsZi5GSUZUSCsiIixmLlNJWFRIKyIiLGYuRklSU1QsZi5TRUNPTkQsZi5USElSRCxmLkZPVVJUSCxmLkZJRlRILGYuU0lYVEg7dmFyIEs7KGZ1bmN0aW9uKHQpe3QuSUZSQU1FPSJpZnJhbWUiLHQuVklERU89InZpZGVvIn0pKEt8fChLPXt9KSk7dmFyIHc7KGZ1bmN0aW9uKHQpe3QuVEVYVD0idGV4dCIsdC5TRUxFQ1Q9InNlbGVjdCIsdC5DSEVDS0JPWD0iY2hlY2tib3giLHQuUkFESU89InJhZGlvIix0LkRBVEU9ImRhdGUiLHQuTlVNQkVSPSJudW1iZXIifSkod3x8KHc9e30pKTt2YXIgQzsoZnVuY3Rpb24odCl7dC5QUkVGSVg9InByZWZpeCIsdC5QT1NURklYPSJwb3N0Zml4Iix0LlBSRV9URVhUPSJwcmVUZXh0Iix0LlBPU1RfVEVYVD0icG9zdFRleHQiLHQuUExBQ0VIT0xERVI9InBsYWNlaG9sZGVyIix0LlZBTFVFPSJ2YWx1ZSIsdC5DSEVDS0JPWD0iY2hlY2tib3giLHQuUkFESU89InJhZGlvIn0pKEN8fChDPXt9KSk7dmFyIHo7KGZ1bmN0aW9uKHQpe3QuUk9XX1NUQVJUPSJyb3dTdGFydCIsdC5WQUxVRV9TVEFSVD0idmFsdWVTdGFydCJ9KSh6fHwoej17fSkpO3ZhciBHOyhmdW5jdGlvbih0KXt0LkFDVElWRT0iYWN0aXZlIix0LklOQUNUSVZFPSJpbmFjdGl2ZSJ9KShHfHwoRz17fSkpO3ZhciBZOyhmdW5jdGlvbih0KXt0LkNPTVBPTkVOVD0iY29tcG9uZW50Iix0Lk1FTlU9Im1lbnUiLHQuTUFJTj0ibWFpbiIsdC5GT09URVI9ImZvb3RlciIsdC5DT05URVhUTUVOVT0iY29udGV4dG1lbnUiLHQuUE9QVVA9InBvcHVwIix0LkNBVEFMT0c9ImNhdGFsb2ciLHQuQ09NTUVOVD0iY29tbWVudCJ9KShZfHwoWT17fSkpO3ZhciBWOyhmdW5jdGlvbih0KXt0LlBBR0U9InBhZ2UiLHQuVEFCTEU9InRhYmxlIn0pKFZ8fChWPXt9KSk7dmFyIFE7KGZ1bmN0aW9uKHQpe3QuRURJVD0iZWRpdCIsdC5DTEVBTj0iY2xlYW4iLHQuUkVBRE9OTFk9InJlYWRvbmx5Iix0LkZPUk09ImZvcm0iLHQuUFJJTlQ9InByaW50Iix0LkRFU0lHTj0iZGVzaWduIn0pKFF8fChRPXt9KSk7dmFyIFc7KGZ1bmN0aW9uKHQpe3QuSEVBREVSPSJoZWFkZXIiLHQuTUFJTj0ibWFpbiIsdC5GT09URVI9ImZvb3RlciJ9KShXfHwoVz17fSkpO3ZhciBxOyhmdW5jdGlvbih0KXt0LlBBR0lORz0icGFnaW5nIix0LkNPTlRJTlVJVFk9ImNvbnRpbnVpdHkifSkocXx8KHE9e30pKTt2YXIgWjsoZnVuY3Rpb24odCl7dC5WRVJUSUNBTD0idmVydGljYWwiLHQuSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCJ9KShafHwoWj17fSkpO3ZhciBKOyhmdW5jdGlvbih0KXt0LkJSRUFLX0FMTD0iYnJlYWstYWxsIix0LkJSRUFLX1dPUkQ9ImJyZWFrLXdvcmQifSkoSnx8KEo9e30pKTt2YXIgajsoZnVuY3Rpb24odCl7dC5TUEVFRD0ic3BlZWQiLHQuQ09NUEFUSUJJTElUWT0iY29tcGF0aWJpbGl0eSJ9KShqfHwoaj17fSkpO3ZhciBEOyhmdW5jdGlvbih0KXt0LkxFRlQ9ImxlZnQiLHQuQ0VOVEVSPSJjZW50ZXIiLHQuUklHSFQ9InJpZ2h0Iix0LkFMSUdOTUVOVD0iYWxpZ25tZW50Iix0LkpVU1RJRlk9Imp1c3RpZnkifSkoRHx8KEQ9e30pKTt2YXIgJDsoZnVuY3Rpb24odCl7dC5BTEw9ImFsbCIsdC5FTVBUWT0iZW1wdHkiLHQuRVhURVJOQUw9ImV4dGVybmFsIix0LklOVEVSTkFMPSJpbnRlcm5hbCIsdC5EQVNIPSJkYXNoIn0pKCR8fCgkPXt9KSk7dmFyIHR0OyhmdW5jdGlvbih0KXt0LlRPUD0idG9wIix0LlJJR0hUPSJyaWdodCIsdC5CT1RUT009ImJvdHRvbSIsdC5MRUZUPSJsZWZ0In0pKHR0fHwodHQ9e30pKTt2YXIgZXQ7KGZ1bmN0aW9uKHQpe3QuRk9SV0FSRD0iZm9yd2FyZCIsdC5CQUNLPSJiYWNrIn0pKGV0fHwoZXQ9e30pKTt2YXIgazsoZnVuY3Rpb24odCl7dC5DT05UQUlOPSJjb250YWluIix0LkNPVkVSPSJjb3ZlciJ9KShrfHwoaz17fSkpO3ZhciBtOyhmdW5jdGlvbih0KXt0LlJFUEVBVD0icmVwZWF0Iix0Lk5PX1JFUEVBVD0ibm8tcmVwZWF0Iix0LlJFUEVBVF9YPSJyZXBlYXQteCIsdC5SRVBFQVRfWT0icmVwZWF0LXkifSkobXx8KG09e30pKSxrLkNPVkVSLG0uTk9fUkVQRUFUO3ZhciBQOyhmdW5jdGlvbih0KXt0LlRPUD0idG9wIix0Lk1JRERMRT0ibWlkZGxlIix0LkJPVFRPTT0iYm90dG9tIn0pKFB8fChQPXt9KSksUC5CT1RUT00sVC5IQUxGLFQuSEFMRjtjb25zdCBjdD17UEFHRV9OTzoie3BhZ2VOb30iLFBBR0VfQ09VTlQ6IntwYWdlQ291bnR9In07RC5DRU5URVIsY3QuUEFHRV9OTyxJLkFSQUJJQyxQLkJPVFRPTSxJLkFSQUJJQzt2YXIgeTsoZnVuY3Rpb24odCl7dC5QQUdFPSJwYWdlIix0LkNPTlRJTlVJVFk9ImNvbnRpbnVpdHkifSkoeXx8KHk9e30pKSx5LkNPTlRJTlVJVFk7ZnVuY3Rpb24gdXQodCxzKXtjb25zdCBFPU9iamVjdC5rZXlzKHQpLEE9T2JqZWN0LmtleXMocyk7aWYoRS5sZW5ndGghPT1BLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IFI9MDtSPEUubGVuZ3RoO1IrKyl7Y29uc3Qgbj1FW1JdO2lmKG4hPT0idmFsdWUiJiYhKG49PT0iZ3JvdXBJZHMiJiZBcnJheS5pc0FycmF5KHRbbl0pJiZBcnJheS5pc0FycmF5KHNbbl0pJiZhdCh0W25dLHNbbl0pKSYmdFtuXSE9PXNbbl0pcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gQih0LHM9e30pe2NvbnN0e2V4dHJhUGlja0F0dHJzOkV9PXMsQT1vdDtFJiZBLnB1c2goLi4uRSk7Y29uc3QgUj17dmFsdWU6dC52YWx1ZT09PUY/YApgOnQudmFsdWV9O3JldHVybiBBLmZvckVhY2gobj0+e2NvbnN0IHA9dFtuXTtwIT09dm9pZCAwJiYoUltuXT1wKX0pLFJ9ZnVuY3Rpb24gaCh0LHM9e30pe2NvbnN0e2V4dHJhUGlja0F0dHJzOkUsaXNDbGFzc2lmeUFyZWE6QT0hMSxpc0Nsb25lOlI9ITB9PXMsbj1SP0godCk6dCxwPVtdO2xldCBpPTA7Zm9yKDtpPG4ubGVuZ3RoOyl7bGV0IGU9bltpXTtpZihpPT09MCYmZS52YWx1ZT09PUYmJiFlLmxpc3RJZCYmKCFlLnR5cGV8fGUudHlwZT09PWwuVEVYVCkpe2krKztjb250aW51ZX1pZihlLmFyZWFJZCYmZS5hcmVhKXtjb25zdCBhPWUuYXJlYUlkLHU9ZS5hcmVhLGM9W107Zm9yKDtpPG4ubGVuZ3RoOyl7Y29uc3Qgcj1uW2ldO2lmKGEhPT1yLmFyZWFJZCl7aS0tO2JyZWFrfWRlbGV0ZSByLmFyZWEsZGVsZXRlIHIuYXJlYUlkLGMucHVzaChyKSxpKyt9Y29uc3Qgbz1oKGMscyk7aWYoQSl7Y29uc3Qgcj17dHlwZTpsLkFSRUEsdmFsdWU6IiIsYXJlYUlkOmEsYXJlYTp1fTtyLnZhbHVlTGlzdD1vLGU9cn1lbHNle3Auc3BsaWNlKGksMCwuLi5vKTtjb250aW51ZX19ZWxzZSBpZihlLnRpdGxlSWQmJmUubGV2ZWwpe2NvbnN0IGE9ZS50aXRsZUlkO2lmKGEpe2NvbnN0IHU9ZS5sZXZlbCxjPXt0eXBlOmwuVElUTEUsdGl0bGU6ZS50aXRsZSx0aXRsZUlkOmEsdmFsdWU6IiIsbGV2ZWw6dX0sbz1bXTtmb3IoO2k8bi5sZW5ndGg7KXtjb25zdCByPW5baV07aWYoYSE9PXIudGl0bGVJZCl7aS0tO2JyZWFrfWRlbGV0ZSByLmxldmVsLGRlbGV0ZSByLnRpdGxlLG8ucHVzaChyKSxpKyt9Yy52YWx1ZUxpc3Q9aChvLHMpLGU9Y319ZWxzZSBpZihlLmxpc3RJZCYmZS5saXN0VHlwZSl7Y29uc3QgYT1lLmxpc3RJZDtpZihhKXtjb25zdCB1PWUubGlzdFR5cGUsYz1lLmxpc3RTdHlsZSxvPXt0eXBlOmwuTElTVCx2YWx1ZToiIixsaXN0SWQ6YSxsaXN0VHlwZTp1LGxpc3RTdHlsZTpjfSxyPVtdO2Zvcig7aTxuLmxlbmd0aDspe2NvbnN0IEw9bltpXTtpZihhIT09TC5saXN0SWQpe2ktLTticmVha31kZWxldGUgTC5saXN0VHlwZSxkZWxldGUgTC5saXN0U3R5bGUsci5wdXNoKEwpLGkrK31vLnZhbHVlTGlzdD1oKHIscyksZT1vfX1lbHNlIGlmKGUudHlwZT09PWwuVEFCTEUpe2lmKGUucGFnaW5nSWQpe2xldCBhPWkrMSx1PTA7Zm9yKDthPG4ubGVuZ3RoOyl7Y29uc3QgYz1uW2FdO2lmKGMucGFnaW5nSWQ9PT1lLnBhZ2luZ0lkKWUuaGVpZ2h0Kz1jLmhlaWdodCxlLnRyTGlzdC5wdXNoKC4uLmMudHJMaXN0KSxhKyssdSsrO2Vsc2UgYnJlYWt9aSs9dX1pZihlLnRyTGlzdClmb3IobGV0IGE9MDthPGUudHJMaXN0Lmxlbmd0aDthKyspe2NvbnN0IHU9ZS50ckxpc3RbYV07ZGVsZXRlIHUuaWQ7Zm9yKGxldCBjPTA7Yzx1LnRkTGlzdC5sZW5ndGg7YysrKXtjb25zdCBvPXUudGRMaXN0W2NdLHI9e2NvbHNwYW46by5jb2xzcGFuLHJvd3NwYW46by5yb3dzcGFuLHZhbHVlOmgoby52YWx1ZSx4KE4oe30scykse2lzQ2xhc3NpZnlBcmVhOiExfSkpfTtydC5mb3JFYWNoKEw9Pntjb25zdCBTPW9bTF07UyE9PXZvaWQgMCYmKHJbTF09Uyl9KSx1LnRkTGlzdFtjXT1yfX19ZWxzZSBpZihlLnR5cGU9PT1sLkhZUEVSTElOSyl7Y29uc3QgYT1lLmh5cGVybGlua0lkO2lmKGEpe2NvbnN0IHU9e3R5cGU6bC5IWVBFUkxJTkssdmFsdWU6IiIsdXJsOmUudXJsfSxjPVtdO2Zvcig7aTxuLmxlbmd0aDspe2NvbnN0IG89bltpXTtpZihhIT09by5oeXBlcmxpbmtJZCl7aS0tO2JyZWFrfWRlbGV0ZSBvLnR5cGUsZGVsZXRlIG8udXJsLGMucHVzaChvKSxpKyt9dS52YWx1ZUxpc3Q9aChjLHMpLGU9dX19ZWxzZSBpZihlLnR5cGU9PT1sLkRBVEUpe2NvbnN0IGE9ZS5kYXRlSWQ7aWYoYSl7Y29uc3QgdT17dHlwZTpsLkRBVEUsdmFsdWU6IiIsZGF0ZUZvcm1hdDplLmRhdGVGb3JtYXR9LGM9W107Zm9yKDtpPG4ubGVuZ3RoOyl7Y29uc3Qgbz1uW2ldO2lmKGEhPT1vLmRhdGVJZCl7aS0tO2JyZWFrfWRlbGV0ZSBvLnR5cGUsZGVsZXRlIG8uZGF0ZUZvcm1hdCxjLnB1c2gobyksaSsrfXUudmFsdWVMaXN0PWgoYyxzKSxlPXV9fWVsc2UgaWYoZS5jb250cm9sSWQpe2NvbnN0IGE9ZS5jb250cm9sSWQ7aWYoZS5jb250cm9sQ29tcG9uZW50PT09Qy5QUkVGSVgpe2NvbnN0IHU9W107bGV0IGM9ITEsbz1pO2Zvcig7bzxuLmxlbmd0aDspe2NvbnN0IHI9bltvXTtpZihhIT09ci5jb250cm9sSWQpYnJlYWs7ci5jb250cm9sQ29tcG9uZW50PT09Qy5WQUxVRSYmKGRlbGV0ZSByLmNvbnRyb2wsZGVsZXRlIHIuY29udHJvbElkLHUucHVzaChyKSksci5jb250cm9sQ29tcG9uZW50PT09Qy5QT1NURklYJiYoYz0hMCksbysrfWlmKGMpe2NvbnN0IHI9TShlLHN0KSxMPU4oTih7fSxlLmNvbnRyb2wpLHIpLFM9eChOKHt9LE0oZSxsdCkpLHt0eXBlOmwuQ09OVFJPTCx2YWx1ZToiIixjb250cm9sOkwsY29udHJvbElkOmF9KTtTLmNvbnRyb2wudmFsdWU9aCh1LHMpLGU9QihTLHtleHRyYVBpY2tBdHRyczpFfSksaSs9by1pLTF9fWlmKGUuY29udHJvbENvbXBvbmVudCYmKGRlbGV0ZSBlLmNvbnRyb2wsZGVsZXRlIGUuY29udHJvbElkLGUuY29udHJvbENvbXBvbmVudCE9PUMuVkFMVUUmJmUuY29udHJvbENvbXBvbmVudCE9PUMuUFJFX1RFWFQmJmUuY29udHJvbENvbXBvbmVudCE9PUMuUE9TVF9URVhUKSl7aSsrO2NvbnRpbnVlfX1jb25zdCBVPUIoZSx7ZXh0cmFQaWNrQXR0cnM6RX0pO2lmKCFlLnR5cGV8fGUudHlwZT09PWwuVEVYVHx8ZS50eXBlPT09bC5TVUJTQ1JJUFR8fGUudHlwZT09PWwuU1VQRVJTQ1JJUFQpZm9yKDtpPG4ubGVuZ3RoOyl7Y29uc3QgYT1uW2krMV07aWYoaSsrLGEmJnV0KFUsQihhLHtleHRyYVBpY2tBdHRyczpFfSkpKXtjb25zdCB1PWEudmFsdWU9PT1GP2AKYDphLnZhbHVlO1UudmFsdWUrPXV9ZWxzZSBicmVha31lbHNlIGkrKztwLnB1c2goVSl9cmV0dXJuIHB9b25tZXNzYWdlPXQ9Pntjb25zdCBzPXQuZGF0YSx7b3B0aW9uczpFLGRhdGE6QX09cyx7ZXh0cmFQaWNrQXR0cnM6Uj1bXX09RXx8e30sbj17aGVhZGVyOmgoQS5oZWFkZXIse2V4dHJhUGlja0F0dHJzOlIsaXNDbG9uZTohMX0pLG1haW46aChBLm1haW4se2V4dHJhUGlja0F0dHJzOlIsaXNDbGFzc2lmeUFyZWE6ITAsaXNDbG9uZTohMX0pLGZvb3RlcjpoKEEuZm9vdGVyLHtleHRyYVBpY2tBdHRyczpSLGlzQ2xvbmU6ITF9KX07cG9zdE1lc3NhZ2Uobil9fSkoKTt9KSgpOwo=";
14465
+ const encodedJs = "KCgpPT57dmFyIEVlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxmZT1PYmplY3QuZGVmaW5lUHJvcGVydGllczt2YXIgVGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7dmFyIGllPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyIEllPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksQWU9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgYWU9KFQsSSxkKT0+SSBpbiBUP0VlKFQsSSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZH0pOlRbSV09ZCxOPShULEkpPT57Zm9yKHZhciBkIGluIEl8fChJPXt9KSlJZS5jYWxsKEksZCkmJmFlKFQsZCxJW2RdKTtpZihpZSlmb3IodmFyIGQgb2YgaWUoSSkpQWUuY2FsbChJLGQpJiZhZShULGQsSVtkXSk7cmV0dXJuIFR9LF89KFQsSSk9PmZlKFQsVGUoSSkpOyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgVDsoZnVuY3Rpb24oZSl7ZS5IQUxGPSJoYWxmIixlLk9ORV9USElSRD0ib25lLXRoaXJkIixlLlFVQVJURVI9InF1YXJ0ZXIifSkoVHx8KFQ9e30pKTt2YXIgSTsoZnVuY3Rpb24oZSl7ZS5BUkFCSUM9ImFyYWJpYyIsZS5DSElORVNFPSJjaGluZXNlIn0pKEl8fChJPXt9KSk7dmFyIGQ7KGZ1bmN0aW9uKGUpe2UuSU5MSU5FPSJpbmxpbmUiLGUuQkxPQ0s9ImJsb2NrIixlLlNVUlJPVU5EPSJzdXJyb3VuZCIsZS5GTE9BVF9UT1A9ImZsb2F0LXRvcCIsZS5GTE9BVF9CT1RUT009ImZsb2F0LWJvdHRvbSJ9KShkfHwoZD17fSkpO3ZhciB4OyhmdW5jdGlvbihlKXtlLkJFRk9SRT0iYmVmb3JlIixlLkFGVEVSPSJhZnRlciIsZS5PVVRFUl9CRUZPUkU9Im91dGVyLWJlZm9yZSIsZS5PVVRFUl9BRlRFUj0ib3V0ZXItYWZ0ZXIifSkoeHx8KHg9e30pKTt2YXIgWDsoZnVuY3Rpb24oZSl7ZS5ST1c9InJvdyIsZS5DT0xVTU49ImNvbHVtbiJ9KShYfHwoWD17fSkpO2NvbnN0IFA9Ilx1MjAwQiI7VC5IQUxGKyIiLDEvMixULk9ORV9USElSRCsiIiwxLzMsVC5RVUFSVEVSKyIiLDEvNDtmdW5jdGlvbiBIKGUpe2lmKHR5cGVvZiBzdHJ1Y3R1cmVkQ2xvbmU9PSJmdW5jdGlvbiIpcmV0dXJuIHN0cnVjdHVyZWRDbG9uZShlKTtpZighZXx8dHlwZW9mIGUhPSJvYmplY3QiKXJldHVybiBlO2xldCBzPXt9O3JldHVybiBBcnJheS5pc0FycmF5KGUpP3M9ZS5tYXAoRT0+SChFKSk6T2JqZWN0LmtleXMoZSkuZm9yRWFjaChFPT5zW0VdPUgoZVtFXSkpLHN9ZnVuY3Rpb24gTShlLHMpe2NvbnN0IEU9e307Zm9yKGNvbnN0IEEgaW4gZSlzLmluY2x1ZGVzKEEpJiYoRVtBXT1lW0FdKTtyZXR1cm4gRX1mdW5jdGlvbiBuZShlLHMpe3JldHVybiBlLmxlbmd0aCE9PXMubGVuZ3RoPyExOiFlLnNvbWUoRT0+IXMuaW5jbHVkZXMoRSkpfXZhciBsOyhmdW5jdGlvbihlKXtlLlRFWFQ9InRleHQiLGUuSU1BR0U9ImltYWdlIixlLlRBQkxFPSJ0YWJsZSIsZS5IWVBFUkxJTks9Imh5cGVybGluayIsZS5TVVBFUlNDUklQVD0ic3VwZXJzY3JpcHQiLGUuU1VCU0NSSVBUPSJzdWJzY3JpcHQiLGUuU0VQQVJBVE9SPSJzZXBhcmF0b3IiLGUuUEFHRV9CUkVBSz0icGFnZUJyZWFrIixlLkNPTlRST0w9ImNvbnRyb2wiLGUuQVJFQT0iYXJlYSIsZS5DSEVDS0JPWD0iY2hlY2tib3giLGUuUkFESU89InJhZGlvIixlLkxBVEVYPSJsYXRleCIsZS5UQUI9InRhYiIsZS5EQVRFPSJkYXRlIixlLkJMT0NLPSJibG9jayIsZS5USVRMRT0idGl0bGUiLGUuTElTVD0ibGlzdCJ9KShsfHwobD17fSkpO2NvbnN0IGxlPVsicm93RmxleCIsInJvd01hcmdpbiJdLHJlPVsidHlwZSIsImZvbnQiLCJzaXplIiwiYm9sZCIsImNvbG9yIiwiaXRhbGljIiwiaGlnaGxpZ2h0IiwidW5kZXJsaW5lIiwic3RyaWtlb3V0Iiwicm93RmxleCIsInJvd01hcmdpbiIsImRhc2hBcnJheSIsInRyTGlzdCIsInRhYmxlVG9vbERpc2FibGVkIiwiYm9yZGVyVHlwZSIsImJvcmRlckNvbG9yIiwid2lkdGgiLCJoZWlnaHQiLCJ1cmwiLCJjb2xncm91cCIsInZhbHVlTGlzdCIsImNvbnRyb2wiLCJjaGVja2JveCIsInJhZGlvIiwiZGF0ZUZvcm1hdCIsImJsb2NrIiwibGV2ZWwiLCJ0aXRsZSIsImxpc3RUeXBlIiwibGlzdFN0eWxlIiwibGlzdFdyYXAiLCJncm91cElkcyIsImNvbmNlcHRJZCIsImltZ0Rpc3BsYXkiLCJpbWdGbG9hdFBvc2l0aW9uIiwiaW1nVG9vbERpc2FibGVkIiwidGV4dERlY29yYXRpb24iLCJleHRlbnNpb24iLCJleHRlcm5hbElkIiwiYXJlYUlkIiwiYXJlYSJdLG9lPVsiY29uY2VwdElkIiwiZXh0ZW5zaW9uIiwiZXh0ZXJuYWxJZCIsInZlcnRpY2FsQWxpZ24iLCJiYWNrZ3JvdW5kQ29sb3IiLCJib3JkZXJUeXBlcyIsInNsYXNoVHlwZXMiLCJkaXNhYmxlZCIsImRlbGV0YWJsZSJdLHNlPVsiZm9udCIsInNpemUiLCJib2xkIiwiaGlnaGxpZ2h0IiwiaXRhbGljIiwic3RyaWtlb3V0Il07bC5URVhULGwuSFlQRVJMSU5LLGwuU1VCU0NSSVBULGwuU1VQRVJTQ1JJUFQsbC5DT05UUk9MLGwuREFURSxsLklNQUdFLGwuTEFURVgsbC5CTE9DSyxsLlBBR0VfQlJFQUssbC5TRVBBUkFUT1IsbC5UQUJMRSxsLlRJVExFLGwuTElTVDt2YXIgZzsoZnVuY3Rpb24oZSl7ZS5VTD0idWwiLGUuT0w9Im9sIn0pKGd8fChnPXt9KSk7dmFyIE87KGZ1bmN0aW9uKGUpe2UuRElTQz0iZGlzYyIsZS5DSVJDTEU9ImNpcmNsZSIsZS5TUVVBUkU9InNxdWFyZSIsZS5DSEVDS0JPWD0iY2hlY2tib3gifSkoT3x8KE89e30pKTt2YXIgYjsoZnVuY3Rpb24oZSl7ZS5ERUNJTUFMPSJkZWNpbWFsIn0pKGJ8fChiPXt9KSk7dmFyIHY7KGZ1bmN0aW9uKGUpe2VbZS5ESVNDPU8uRElTQ109IkRJU0MiLGVbZS5DSVJDTEU9Ty5DSVJDTEVdPSJDSVJDTEUiLGVbZS5TUVVBUkU9Ty5TUVVBUkVdPSJTUVVBUkUiLGVbZS5ERUNJTUFMPWIuREVDSU1BTF09IkRFQ0lNQUwiLGVbZS5DSEVDS0JPWD1PLkNIRUNLQk9YXT0iQ0hFQ0tCT1gifSkodnx8KHY9e30pKSxPLkRJU0MrIiIsTy5DSVJDTEUrIiIsTy5TUVVBUkUrIiIsTy5DSEVDS0JPWCsiIixnLk9MKyIiLGcuVUwrIiIsdi5ESVNDKyIiLHYuQ0lSQ0xFKyIiLHYuU1FVQVJFKyIiLHYuREVDSU1BTCsiIix2LkNIRUNLQk9YKyIiO3ZhciBmOyhmdW5jdGlvbihlKXtlLkZJUlNUPSJmaXJzdCIsZS5TRUNPTkQ9InNlY29uZCIsZS5USElSRD0idGhpcmQiLGUuRk9VUlRIPSJmb3VydGgiLGUuRklGVEg9ImZpZnRoIixlLlNJWFRIPSJzaXh0aCJ9KShmfHwoZj17fSkpLGYuRklSU1QrIiIsZi5TRUNPTkQrIiIsZi5USElSRCsiIixmLkZPVVJUSCsiIixmLkZJRlRIKyIiLGYuU0lYVEgrIiIsZi5GSVJTVCsiIixmLlNFQ09ORCsiIixmLlRISVJEKyIiLGYuRk9VUlRIKyIiLGYuRklGVEgrIiIsZi5TSVhUSCsiIixmLkZJUlNULGYuU0VDT05ELGYuVEhJUkQsZi5GT1VSVEgsZi5GSUZUSCxmLlNJWFRIO3ZhciBLOyhmdW5jdGlvbihlKXtlLklGUkFNRT0iaWZyYW1lIixlLlZJREVPPSJ2aWRlbyJ9KShLfHwoSz17fSkpO3ZhciB3OyhmdW5jdGlvbihlKXtlLlRFWFQ9InRleHQiLGUuU0VMRUNUPSJzZWxlY3QiLGUuQ0hFQ0tCT1g9ImNoZWNrYm94IixlLlJBRElPPSJyYWRpbyIsZS5EQVRFPSJkYXRlIixlLk5VTUJFUj0ibnVtYmVyIn0pKHd8fCh3PXt9KSk7dmFyIEw7KGZ1bmN0aW9uKGUpe2UuUFJFRklYPSJwcmVmaXgiLGUuUE9TVEZJWD0icG9zdGZpeCIsZS5QUkVfVEVYVD0icHJlVGV4dCIsZS5QT1NUX1RFWFQ9InBvc3RUZXh0IixlLlBMQUNFSE9MREVSPSJwbGFjZWhvbGRlciIsZS5WQUxVRT0idmFsdWUiLGUuQ0hFQ0tCT1g9ImNoZWNrYm94IixlLlJBRElPPSJyYWRpbyJ9KShMfHwoTD17fSkpO3ZhciB6OyhmdW5jdGlvbihlKXtlLlJPV19TVEFSVD0icm93U3RhcnQiLGUuVkFMVUVfU1RBUlQ9InZhbHVlU3RhcnQifSkoenx8KHo9e30pKTt2YXIgRzsoZnVuY3Rpb24oZSl7ZS5BQ1RJVkU9ImFjdGl2ZSIsZS5JTkFDVElWRT0iaW5hY3RpdmUifSkoR3x8KEc9e30pKTt2YXIgWTsoZnVuY3Rpb24oZSl7ZS5DT01QT05FTlQ9ImNvbXBvbmVudCIsZS5NRU5VPSJtZW51IixlLk1BSU49Im1haW4iLGUuRk9PVEVSPSJmb290ZXIiLGUuQ09OVEVYVE1FTlU9ImNvbnRleHRtZW51IixlLlBPUFVQPSJwb3B1cCIsZS5DQVRBTE9HPSJjYXRhbG9nIixlLkNPTU1FTlQ9ImNvbW1lbnQifSkoWXx8KFk9e30pKTt2YXIgVjsoZnVuY3Rpb24oZSl7ZS5QQUdFPSJwYWdlIixlLlRBQkxFPSJ0YWJsZSJ9KShWfHwoVj17fSkpO3ZhciBROyhmdW5jdGlvbihlKXtlLkVESVQ9ImVkaXQiLGUuQ0xFQU49ImNsZWFuIixlLlJFQURPTkxZPSJyZWFkb25seSIsZS5GT1JNPSJmb3JtIixlLlBSSU5UPSJwcmludCIsZS5ERVNJR049ImRlc2lnbiJ9KShRfHwoUT17fSkpO3ZhciBXOyhmdW5jdGlvbihlKXtlLkhFQURFUj0iaGVhZGVyIixlLk1BSU49Im1haW4iLGUuRk9PVEVSPSJmb290ZXIifSkoV3x8KFc9e30pKTt2YXIgcTsoZnVuY3Rpb24oZSl7ZS5QQUdJTkc9InBhZ2luZyIsZS5DT05USU5VSVRZPSJjb250aW51aXR5In0pKHF8fChxPXt9KSk7dmFyIFo7KGZ1bmN0aW9uKGUpe2UuVkVSVElDQUw9InZlcnRpY2FsIixlLkhPUklaT05UQUw9Imhvcml6b250YWwifSkoWnx8KFo9e30pKTt2YXIgSjsoZnVuY3Rpb24oZSl7ZS5CUkVBS19BTEw9ImJyZWFrLWFsbCIsZS5CUkVBS19XT1JEPSJicmVhay13b3JkIn0pKEp8fChKPXt9KSk7dmFyIGo7KGZ1bmN0aW9uKGUpe2UuU1BFRUQ9InNwZWVkIixlLkNPTVBBVElCSUxJVFk9ImNvbXBhdGliaWxpdHkifSkoanx8KGo9e30pKTt2YXIgRDsoZnVuY3Rpb24oZSl7ZS5MRUZUPSJsZWZ0IixlLkNFTlRFUj0iY2VudGVyIixlLlJJR0hUPSJyaWdodCIsZS5BTElHTk1FTlQ9ImFsaWdubWVudCIsZS5KVVNUSUZZPSJqdXN0aWZ5In0pKER8fChEPXt9KSk7dmFyICQ7KGZ1bmN0aW9uKGUpe2UuQUxMPSJhbGwiLGUuRU1QVFk9ImVtcHR5IixlLkVYVEVSTkFMPSJleHRlcm5hbCIsZS5JTlRFUk5BTD0iaW50ZXJuYWwiLGUuREFTSD0iZGFzaCJ9KSgkfHwoJD17fSkpO3ZhciBlZTsoZnVuY3Rpb24oZSl7ZS5UT1A9InRvcCIsZS5SSUdIVD0icmlnaHQiLGUuQk9UVE9NPSJib3R0b20iLGUuTEVGVD0ibGVmdCJ9KShlZXx8KGVlPXt9KSk7dmFyIHRlOyhmdW5jdGlvbihlKXtlLkZPUldBUkQ9ImZvcndhcmQiLGUuQkFDSz0iYmFjayJ9KSh0ZXx8KHRlPXt9KSk7dmFyIGs7KGZ1bmN0aW9uKGUpe2UuQ09OVEFJTj0iY29udGFpbiIsZS5DT1ZFUj0iY292ZXIifSkoa3x8KGs9e30pKTt2YXIgbTsoZnVuY3Rpb24oZSl7ZS5SRVBFQVQ9InJlcGVhdCIsZS5OT19SRVBFQVQ9Im5vLXJlcGVhdCIsZS5SRVBFQVRfWD0icmVwZWF0LXgiLGUuUkVQRUFUX1k9InJlcGVhdC15In0pKG18fChtPXt9KSksay5DT1ZFUixtLk5PX1JFUEVBVDt2YXIgRjsoZnVuY3Rpb24oZSl7ZS5UT1A9InRvcCIsZS5NSURETEU9Im1pZGRsZSIsZS5CT1RUT009ImJvdHRvbSJ9KShGfHwoRj17fSkpLEYuQk9UVE9NLFQuSEFMRixULkhBTEY7Y29uc3QgY2U9e1BBR0VfTk86IntwYWdlTm99IixQQUdFX0NPVU5UOiJ7cGFnZUNvdW50fSJ9O0QuQ0VOVEVSLGNlLlBBR0VfTk8sSS5BUkFCSUMsRi5CT1RUT00sSS5BUkFCSUM7dmFyIHk7KGZ1bmN0aW9uKGUpe2UuUEFHRT0icGFnZSIsZS5DT05USU5VSVRZPSJjb250aW51aXR5In0pKHl8fCh5PXt9KSkseS5DT05USU5VSVRZO2Z1bmN0aW9uIHVlKGUscyl7Y29uc3QgRT1PYmplY3Qua2V5cyhlKSxBPU9iamVjdC5rZXlzKHMpO2lmKEUubGVuZ3RoIT09QS5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBSPTA7UjxFLmxlbmd0aDtSKyspe2NvbnN0IGE9RVtSXTtpZihhIT09InZhbHVlIiYmIShhPT09Imdyb3VwSWRzIiYmQXJyYXkuaXNBcnJheShlW2FdKSYmQXJyYXkuaXNBcnJheShzW2FdKSYmbmUoZVthXSxzW2FdKSkmJmVbYV0hPT1zW2FdKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIFUoZSxzPXt9KXtjb25zdHtleHRyYVBpY2tBdHRyczpFfT1zLEE9Wy4uLnJlXTtFJiZBLnB1c2goLi4uRSk7Y29uc3QgUj17dmFsdWU6ZS52YWx1ZT09PVA/YApgOmUudmFsdWV9O3JldHVybiBBLmZvckVhY2goYT0+e2NvbnN0IHA9ZVthXTtwIT09dm9pZCAwJiYoUlthXT1wKX0pLFJ9ZnVuY3Rpb24gaChlLHM9e30pe2NvbnN0e2V4dHJhUGlja0F0dHJzOkUsaXNDbGFzc2lmeUFyZWE6QT0hMSxpc0Nsb25lOlI9ITB9PXMsYT1SP0goZSk6ZSxwPVtdO2xldCBpPTA7Zm9yKDtpPGEubGVuZ3RoOyl7bGV0IHQ9YVtpXTtpZihpPT09MCYmdC52YWx1ZT09PVAmJiF0Lmxpc3RJZCYmKCF0LnR5cGV8fHQudHlwZT09PWwuVEVYVCkpe2krKztjb250aW51ZX1pZih0LmFyZWFJZCYmdC5hcmVhKXtjb25zdCBuPXQuYXJlYUlkLHU9dC5hcmVhLGM9W107Zm9yKDtpPGEubGVuZ3RoOyl7Y29uc3Qgbz1hW2ldO2lmKG4hPT1vLmFyZWFJZCl7aS0tO2JyZWFrfWRlbGV0ZSBvLmFyZWEsZGVsZXRlIG8uYXJlYUlkLGMucHVzaChvKSxpKyt9Y29uc3Qgcj1oKGMscyk7aWYoQSl7Y29uc3Qgbz17dHlwZTpsLkFSRUEsdmFsdWU6IiIsYXJlYUlkOm4sYXJlYTp1fTtvLnZhbHVlTGlzdD1yLHQ9b31lbHNle3Auc3BsaWNlKGksMCwuLi5yKTtjb250aW51ZX19ZWxzZSBpZih0LnRpdGxlSWQmJnQubGV2ZWwpe2NvbnN0IG49dC50aXRsZUlkO2lmKG4pe2NvbnN0IHU9dC5sZXZlbCxjPXt0eXBlOmwuVElUTEUsdGl0bGU6dC50aXRsZSx0aXRsZUlkOm4sdmFsdWU6IiIsbGV2ZWw6dX0scj1bXTtmb3IoO2k8YS5sZW5ndGg7KXtjb25zdCBvPWFbaV07aWYobiE9PW8udGl0bGVJZCl7aS0tO2JyZWFrfWRlbGV0ZSBvLmxldmVsLGRlbGV0ZSBvLnRpdGxlLHIucHVzaChvKSxpKyt9Yy52YWx1ZUxpc3Q9aChyLHMpLHQ9Y319ZWxzZSBpZih0Lmxpc3RJZCYmdC5saXN0VHlwZSl7Y29uc3Qgbj10Lmxpc3RJZDtpZihuKXtjb25zdCB1PXQubGlzdFR5cGUsYz10Lmxpc3RTdHlsZSxyPXt0eXBlOmwuTElTVCx2YWx1ZToiIixsaXN0SWQ6bixsaXN0VHlwZTp1LGxpc3RTdHlsZTpjfSxvPVtdO2Zvcig7aTxhLmxlbmd0aDspe2NvbnN0IEM9YVtpXTtpZihuIT09Qy5saXN0SWQpe2ktLTticmVha31kZWxldGUgQy5saXN0VHlwZSxkZWxldGUgQy5saXN0U3R5bGUsby5wdXNoKEMpLGkrK31yLnZhbHVlTGlzdD1oKG8scyksdD1yfX1lbHNlIGlmKHQudHlwZT09PWwuVEFCTEUpe2lmKHQucGFnaW5nSWQpe2xldCBuPWkrMSx1PTA7Zm9yKDtuPGEubGVuZ3RoOyl7Y29uc3QgYz1hW25dO2lmKGMucGFnaW5nSWQ9PT10LnBhZ2luZ0lkKXQuaGVpZ2h0Kz1jLmhlaWdodCx0LnRyTGlzdC5wdXNoKC4uLmMudHJMaXN0KSxuKyssdSsrO2Vsc2UgYnJlYWt9aSs9dX1pZih0LnRyTGlzdClmb3IobGV0IG49MDtuPHQudHJMaXN0Lmxlbmd0aDtuKyspe2NvbnN0IHU9dC50ckxpc3Rbbl07ZGVsZXRlIHUuaWQ7Zm9yKGxldCBjPTA7Yzx1LnRkTGlzdC5sZW5ndGg7YysrKXtjb25zdCByPXUudGRMaXN0W2NdLG89e2NvbHNwYW46ci5jb2xzcGFuLHJvd3NwYW46ci5yb3dzcGFuLHZhbHVlOmgoci52YWx1ZSxfKE4oe30scykse2lzQ2xhc3NpZnlBcmVhOiExfSkpfTtvZS5mb3JFYWNoKEM9Pntjb25zdCBTPXJbQ107UyE9PXZvaWQgMCYmKG9bQ109Uyl9KSx1LnRkTGlzdFtjXT1vfX19ZWxzZSBpZih0LnR5cGU9PT1sLkhZUEVSTElOSyl7Y29uc3Qgbj10Lmh5cGVybGlua0lkO2lmKG4pe2NvbnN0IHU9e3R5cGU6bC5IWVBFUkxJTkssdmFsdWU6IiIsdXJsOnQudXJsfSxjPVtdO2Zvcig7aTxhLmxlbmd0aDspe2NvbnN0IHI9YVtpXTtpZihuIT09ci5oeXBlcmxpbmtJZCl7aS0tO2JyZWFrfWRlbGV0ZSByLnR5cGUsZGVsZXRlIHIudXJsLGMucHVzaChyKSxpKyt9dS52YWx1ZUxpc3Q9aChjLHMpLHQ9dX19ZWxzZSBpZih0LnR5cGU9PT1sLkRBVEUpe2NvbnN0IG49dC5kYXRlSWQ7aWYobil7Y29uc3QgdT17dHlwZTpsLkRBVEUsdmFsdWU6IiIsZGF0ZUZvcm1hdDp0LmRhdGVGb3JtYXR9LGM9W107Zm9yKDtpPGEubGVuZ3RoOyl7Y29uc3Qgcj1hW2ldO2lmKG4hPT1yLmRhdGVJZCl7aS0tO2JyZWFrfWRlbGV0ZSByLnR5cGUsZGVsZXRlIHIuZGF0ZUZvcm1hdCxjLnB1c2gociksaSsrfXUudmFsdWVMaXN0PWgoYyxzKSx0PXV9fWVsc2UgaWYodC5jb250cm9sSWQpe2NvbnN0IG49dC5jb250cm9sSWQ7aWYodC5jb250cm9sQ29tcG9uZW50PT09TC5QUkVGSVgpe2NvbnN0IHU9W107bGV0IGM9ITEscj1pO2Zvcig7cjxhLmxlbmd0aDspe2NvbnN0IG89YVtyXTtpZihuIT09by5jb250cm9sSWQpYnJlYWs7by5jb250cm9sQ29tcG9uZW50PT09TC5WQUxVRSYmKGRlbGV0ZSBvLmNvbnRyb2wsZGVsZXRlIG8uY29udHJvbElkLHUucHVzaChvKSksby5jb250cm9sQ29tcG9uZW50PT09TC5QT1NURklYJiYoYz0hMCkscisrfWlmKGMpe2NvbnN0IG89TSh0LHNlKSxDPU4oTih7fSx0LmNvbnRyb2wpLG8pLFM9XyhOKHt9LE0odCxsZSkpLHt0eXBlOmwuQ09OVFJPTCx2YWx1ZToiIixjb250cm9sOkMsY29udHJvbElkOm59KTtTLmNvbnRyb2wudmFsdWU9aCh1LHMpLHQ9VShTLHtleHRyYVBpY2tBdHRyczpFfSksaSs9ci1pLTF9fWlmKHQuY29udHJvbENvbXBvbmVudCYmKGRlbGV0ZSB0LmNvbnRyb2wsZGVsZXRlIHQuY29udHJvbElkLHQuY29udHJvbENvbXBvbmVudCE9PUwuVkFMVUUmJnQuY29udHJvbENvbXBvbmVudCE9PUwuUFJFX1RFWFQmJnQuY29udHJvbENvbXBvbmVudCE9PUwuUE9TVF9URVhUKSl7aSsrO2NvbnRpbnVlfX1jb25zdCBCPVUodCx7ZXh0cmFQaWNrQXR0cnM6RX0pO2lmKCF0LnR5cGV8fHQudHlwZT09PWwuVEVYVHx8dC50eXBlPT09bC5TVUJTQ1JJUFR8fHQudHlwZT09PWwuU1VQRVJTQ1JJUFQpZm9yKDtpPGEubGVuZ3RoOyl7Y29uc3Qgbj1hW2krMV07aWYoaSsrLG4mJnVlKEIsVShuLHtleHRyYVBpY2tBdHRyczpFfSkpKXtjb25zdCB1PW4udmFsdWU9PT1QP2AKYDpuLnZhbHVlO0IudmFsdWUrPXV9ZWxzZSBicmVha31lbHNlIGkrKztwLnB1c2goQil9cmV0dXJuIHB9b25tZXNzYWdlPWU9Pntjb25zdCBzPWUuZGF0YSx7b3B0aW9uczpFLGRhdGE6QX09cyx7ZXh0cmFQaWNrQXR0cnM6Uj1bXX09RXx8e30sYT17aGVhZGVyOmgoQS5oZWFkZXIse2V4dHJhUGlja0F0dHJzOlIsaXNDbG9uZTohMX0pLG1haW46aChBLm1haW4se2V4dHJhUGlja0F0dHJzOlIsaXNDbGFzc2lmeUFyZWE6ITAsaXNDbG9uZTohMX0pLGZvb3RlcjpoKEEuZm9vdGVyLHtleHRyYVBpY2tBdHRyczpSLGlzQ2xvbmU6ITF9KX07cG9zdE1lc3NhZ2UoYSl9fSkoKTt9KSgpOwo=";
14449
14466
  const blob = typeof window !== "undefined" && window.Blob && new Blob([atob(encodedJs)], { type: "text/javascript;charset=utf-8" });
14450
14467
  function WorkerWrapper() {
14451
14468
  const objURL = blob && (window.URL || window.webkitURL).createObjectURL(blob);
@@ -15928,9 +15945,9 @@ class Placeholder {
15928
15945
  this.rowList = [];
15929
15946
  this.positionList = [];
15930
15947
  }
15931
- _compute() {
15948
+ _compute(options) {
15932
15949
  this._computeRowList();
15933
- this._computePositionList();
15950
+ this._computePositionList(options);
15934
15951
  }
15935
15952
  _computeRowList() {
15936
15953
  const innerWidth = this.draw.getInnerWidth();
@@ -15939,7 +15956,7 @@ class Placeholder {
15939
15956
  elementList: this.elementList
15940
15957
  });
15941
15958
  }
15942
- _computePositionList() {
15959
+ _computePositionList(options) {
15943
15960
  const { lineBreak, scale } = this.options;
15944
15961
  const headerExtraHeight = this.draw.getHeader().getExtraHeight();
15945
15962
  const innerWidth = this.draw.getInnerWidth();
@@ -15948,7 +15965,7 @@ class Placeholder {
15948
15965
  if (!lineBreak.disabled) {
15949
15966
  startX += (LineBreakParticle.WIDTH + LineBreakParticle.GAP) * scale;
15950
15967
  }
15951
- const startY = margins[0] + headerExtraHeight;
15968
+ const startY = (options == null ? void 0 : options.startY) || margins[0] + headerExtraHeight;
15952
15969
  this.position.computePageRowPosition({
15953
15970
  positionList: this.positionList,
15954
15971
  rowList: this.rowList,
@@ -15960,10 +15977,9 @@ class Placeholder {
15960
15977
  innerWidth
15961
15978
  });
15962
15979
  }
15963
- render(ctx) {
15964
- const { placeholder: { data: data2, font, size, color, opacity } } = this.options;
15965
- if (!data2)
15966
- return;
15980
+ render(ctx, options) {
15981
+ const { placeholder = this.options.placeholder } = options || {};
15982
+ const { data: data2, font, size, color, opacity } = placeholder;
15967
15983
  this._recovery();
15968
15984
  this.elementList = [
15969
15985
  {
@@ -15977,7 +15993,7 @@ class Placeholder {
15977
15993
  editorOptions: this.options,
15978
15994
  isForceCompensation: true
15979
15995
  });
15980
- this._compute();
15996
+ this._compute(options);
15981
15997
  const innerWidth = this.draw.getInnerWidth();
15982
15998
  ctx.save();
15983
15999
  ctx.globalAlpha = opacity;
@@ -16753,7 +16769,8 @@ class TableOperate {
16753
16769
  const isAnchorTd = t === 0 && d === 0;
16754
16770
  if (!isAnchorTd) {
16755
16771
  mergeTdIdList.push(td.id);
16756
- for (let d2 = 0; d2 < td.value.length; d2++) {
16772
+ const startTdValueIndex = td.value.length > 1 ? 0 : 1;
16773
+ for (let d2 = startTdValueIndex; d2 < td.value.length; d2++) {
16757
16774
  const tdElement = td.value[d2];
16758
16775
  cloneProperty(TABLE_CONTEXT_ATTR, anchorElement, tdElement);
16759
16776
  anchorTd.value.push(tdElement);
@@ -17203,8 +17220,9 @@ class Area {
17203
17220
  const width = this.draw.getInnerWidth();
17204
17221
  for (const areaInfoItem of this.areaInfoMap) {
17205
17222
  const { area, positionList } = areaInfoItem[1];
17206
- if (!(area == null ? void 0 : area.backgroundColor) && !(area == null ? void 0 : area.borderColor))
17223
+ if (!(area == null ? void 0 : area.backgroundColor) && !(area == null ? void 0 : area.borderColor) && !(area == null ? void 0 : area.placeholder)) {
17207
17224
  continue;
17225
+ }
17208
17226
  const pagePositionList = positionList.filter((p) => p.pageNo === pageNo);
17209
17227
  if (!pagePositionList.length)
17210
17228
  continue;
@@ -17222,6 +17240,14 @@ class Area {
17222
17240
  ctx.strokeStyle = area.borderColor;
17223
17241
  ctx.strokeRect(x, y, width, height);
17224
17242
  }
17243
+ if (area.placeholder && positionList.length <= 1) {
17244
+ const placeholder = new Placeholder(this.draw);
17245
+ placeholder.render(ctx, {
17246
+ placeholder: __spreadValues(__spreadValues({}, defaultPlaceholderOption), area.placeholder),
17247
+ startY: firstPosition.coordinate.leftTop[1]
17248
+ });
17249
+ }
17250
+ ctx.translate(-0.5, -0.5);
17225
17251
  }
17226
17252
  ctx.restore();
17227
17253
  }
@@ -17604,7 +17630,7 @@ class Draw {
17604
17630
  if (startIndex === endIndex) {
17605
17631
  const startElement = elementList[startIndex];
17606
17632
  const nextElement = elementList[startIndex + 1];
17607
- return !!(((_b = startElement == null ? void 0 : startElement.title) == null ? void 0 : _b.disabled) && ((_c = nextElement == null ? void 0 : nextElement.title) == null ? void 0 : _c.disabled) || ((_d = startElement == null ? void 0 : startElement.control) == null ? void 0 : _d.disabled) && ((_e = nextElement == null ? void 0 : nextElement.control) == null ? void 0 : _e.disabled));
17633
+ return !!(((_b = startElement == null ? void 0 : startElement.title) == null ? void 0 : _b.disabled) && ((_c = nextElement == null ? void 0 : nextElement.title) == null ? void 0 : _c.disabled) && startElement.titleId === nextElement.titleId || ((_d = startElement == null ? void 0 : startElement.control) == null ? void 0 : _d.disabled) && ((_e = nextElement == null ? void 0 : nextElement.control) == null ? void 0 : _e.disabled) && startElement.controlId === nextElement.controlId);
17608
17634
  }
17609
17635
  const selectionElementList = elementList.slice(startIndex + 1, endIndex + 1);
17610
17636
  return selectionElementList.some((element) => {
@@ -17615,6 +17641,9 @@ class Draw {
17615
17641
  isDesignMode() {
17616
17642
  return this.mode === EditorMode.DESIGN;
17617
17643
  }
17644
+ isPrintMode() {
17645
+ return this.mode === EditorMode.PRINT;
17646
+ }
17618
17647
  getOriginalWidth() {
17619
17648
  const { paperDirection, width, height } = this.options;
17620
17649
  return paperDirection === PaperDirection.VERTICAL ? width : height;
@@ -17908,9 +17937,9 @@ class Draw {
17908
17937
  curIndex
17909
17938
  });
17910
17939
  }
17911
- spliceElementList(elementList, start, deleteCount, items) {
17912
- var _a, _b, _c, _d, _e;
17913
- const isDesignMode = this.isDesignMode();
17940
+ spliceElementList(elementList, start, deleteCount, items, options) {
17941
+ var _a, _b, _c, _d, _e, _f;
17942
+ const { isIgnoreDeletedRule = false } = options || {};
17914
17943
  if (deleteCount > 0) {
17915
17944
  const endIndex = start + deleteCount;
17916
17945
  const endElement = elementList[endIndex];
@@ -17928,12 +17957,12 @@ class Draw {
17928
17957
  startIndex++;
17929
17958
  }
17930
17959
  }
17931
- if (!this.control.getActiveControl()) {
17960
+ if (!isIgnoreDeletedRule && !this.isDesignMode() && !this.control.getIsRangeWithinControl()) {
17932
17961
  const tdDeletable = (_b = this.getTd()) == null ? void 0 : _b.deletable;
17933
17962
  let deleteIndex = endIndex - 1;
17934
17963
  while (deleteIndex >= start) {
17935
17964
  const deleteElement = elementList[deleteIndex];
17936
- if (isDesignMode || ((_c = deleteElement == null ? void 0 : deleteElement.control) == null ? void 0 : _c.hide) || tdDeletable !== false && ((_d = deleteElement == null ? void 0 : deleteElement.control) == null ? void 0 : _d.deletable) !== false && ((_e = deleteElement == null ? void 0 : deleteElement.title) == null ? void 0 : _e.deletable) !== false) {
17965
+ if (((_c = deleteElement == null ? void 0 : deleteElement.control) == null ? void 0 : _c.hide) || tdDeletable !== false && ((_d = deleteElement == null ? void 0 : deleteElement.control) == null ? void 0 : _d.deletable) !== false && ((_e = deleteElement == null ? void 0 : deleteElement.title) == null ? void 0 : _e.deletable) !== false && (((_f = deleteElement == null ? void 0 : deleteElement.area) == null ? void 0 : _f.deletable) !== false || (deleteElement == null ? void 0 : deleteElement.areaIndex) !== 0)) {
17937
17966
  elementList.splice(deleteIndex, 1);
17938
17967
  }
17939
17968
  deleteIndex--;
@@ -18846,22 +18875,25 @@ class Draw {
18846
18875
  return pageRowList;
18847
18876
  }
18848
18877
  _drawHighlight(ctx, payload) {
18849
- var _a;
18850
- const { control: { activeBackgroundColor } } = this.options;
18878
+ var _a, _b;
18879
+ const { control: { activeBackgroundColor, disabledBackgroundColor } } = this.options;
18851
18880
  const { rowList, positionList } = payload;
18881
+ const isPrintMode = this.isPrintMode();
18852
18882
  const activeControlElement = (_a = this.control.getActiveControl()) == null ? void 0 : _a.getElement();
18853
18883
  for (let i = 0; i < rowList.length; i++) {
18854
18884
  const curRow = rowList[i];
18855
18885
  for (let j = 0; j < curRow.elementList.length; j++) {
18856
18886
  const element = curRow.elementList[j];
18857
18887
  const preElement = curRow.elementList[j - 1];
18858
- if (element.highlight || activeBackgroundColor && activeControlElement && element.controlId === activeControlElement.controlId && !this.control.getIsRangeInPostfix()) {
18888
+ const isActiveControlHighlight = !isPrintMode && activeBackgroundColor && activeControlElement && element.controlId === activeControlElement.controlId && !this.control.getIsRangeInPostfix();
18889
+ const isDisabledControlHighlight = !isPrintMode && disabledBackgroundColor && ((_b = element.control) == null ? void 0 : _b.disabled);
18890
+ if (element.highlight || isActiveControlHighlight || isDisabledControlHighlight) {
18859
18891
  if (preElement && preElement.highlight && preElement.highlight !== element.highlight) {
18860
18892
  this.highlight.render(ctx);
18861
18893
  }
18862
18894
  const { coordinate: { leftTop: [x, y] } } = positionList[curRow.startIndex + j];
18863
18895
  const offsetX = element.left || 0;
18864
- this.highlight.recordFillInfo(ctx, x - offsetX, y, element.metrics.width + offsetX, curRow.height, element.highlight || activeBackgroundColor);
18896
+ this.highlight.recordFillInfo(ctx, x - offsetX, y, element.metrics.width + offsetX, curRow.height, element.highlight || (isActiveControlHighlight ? activeBackgroundColor : "") || (isDisabledControlHighlight ? disabledBackgroundColor : ""));
18865
18897
  } else if (preElement == null ? void 0 : preElement.highlight) {
18866
18898
  this.highlight.render(ctx);
18867
18899
  }
@@ -20756,13 +20788,14 @@ class CommandAdapt {
20756
20788
  const { startIndex, endIndex } = this.range.getRange();
20757
20789
  if (!~startIndex && !~endIndex)
20758
20790
  return null;
20759
- const { id, value, width, height, imgDisplay } = payload;
20791
+ const { id, conceptId, value, width, height, imgDisplay } = payload;
20760
20792
  const imageId = id || getUUID();
20761
20793
  this.insertElementList([
20762
20794
  {
20763
20795
  value,
20764
20796
  width,
20765
20797
  height,
20798
+ conceptId,
20766
20799
  id: imageId,
20767
20800
  type: ElementType.IMAGE,
20768
20801
  imgDisplay
@@ -21177,9 +21210,13 @@ class CommandAdapt {
21177
21210
  return;
21178
21211
  for (let i = 0; i < updateElementInfoList.length; i++) {
21179
21212
  const { elementList, index: index2 } = updateElementInfoList[i];
21213
+ const oldElement = elementList[index2];
21180
21214
  const newElement = zipElementList([
21181
- __spreadValues(__spreadValues({}, elementList[index2]), payload.properties)
21182
- ]);
21215
+ __spreadValues(__spreadValues({}, oldElement), payload.properties)
21216
+ ], {
21217
+ extraPickAttrs: ["id"]
21218
+ });
21219
+ cloneProperty(AREA_CONTEXT_ATTR, oldElement, newElement[0]);
21183
21220
  formatElementList(newElement, {
21184
21221
  isHandleFirstElement: false,
21185
21222
  editorOptions: this.options
@@ -21477,9 +21514,8 @@ class CommandAdapt {
21477
21514
  return this.draw.getControl().getList();
21478
21515
  }
21479
21516
  locationControl(controlId, options) {
21480
- const isLocationAfter = (options == null ? void 0 : options.position) === LocationPosition.AFTER;
21481
21517
  function location(elementList, zone2) {
21482
- var _a, _b;
21518
+ var _a, _b, _c;
21483
21519
  let i = 0;
21484
21520
  while (i < elementList.length) {
21485
21521
  const element = elementList[i];
@@ -21510,13 +21546,19 @@ class CommandAdapt {
21510
21546
  if ((element == null ? void 0 : element.controlId) !== controlId)
21511
21547
  continue;
21512
21548
  let curIndex = i - 1;
21513
- if (isLocationAfter) {
21549
+ if ((options == null ? void 0 : options.position) === LocationPosition.OUTER_AFTER) {
21550
+ if (!(element.controlComponent === ControlComponent.POSTFIX && ((_a = elementList[i + 1]) == null ? void 0 : _a.controlComponent) !== ControlComponent.POST_TEXT)) {
21551
+ continue;
21552
+ }
21553
+ } else if ((options == null ? void 0 : options.position) === LocationPosition.OUTER_BEFORE) {
21554
+ curIndex -= 1;
21555
+ } else if ((options == null ? void 0 : options.position) === LocationPosition.AFTER) {
21514
21556
  curIndex -= 1;
21515
21557
  if (element.controlComponent !== ControlComponent.PLACEHOLDER && element.controlComponent !== ControlComponent.POSTFIX && element.controlComponent !== ControlComponent.POST_TEXT) {
21516
21558
  continue;
21517
21559
  }
21518
21560
  } else {
21519
- if (element.controlComponent !== ControlComponent.PREFIX && element.controlComponent !== ControlComponent.PRE_TEXT || ((_a = elementList[i]) == null ? void 0 : _a.controlComponent) === ControlComponent.PREFIX || ((_b = elementList[i]) == null ? void 0 : _b.controlComponent) === ControlComponent.PRE_TEXT) {
21561
+ if (element.controlComponent !== ControlComponent.PREFIX && element.controlComponent !== ControlComponent.PRE_TEXT || ((_b = elementList[i]) == null ? void 0 : _b.controlComponent) === ControlComponent.PREFIX || ((_c = elementList[i]) == null ? void 0 : _c.controlComponent) === ControlComponent.PRE_TEXT) {
21520
21562
  continue;
21521
21563
  }
21522
21564
  }