@hufe921/canvas-editor 0.9.107 → 0.9.109

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,41 @@
1
+ ## [0.9.109](https://github.com/Hufe921/canvas-editor/compare/v0.9.108...v0.9.109) (2025-05-11)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * area mode priority error #1119 ([2abd43a](https://github.com/Hufe921/canvas-editor/commit/2abd43a2a4eb156d154c72a7b709cde6aa433fbd)), closes [#1119](https://github.com/Hufe921/canvas-editor/issues/1119)
7
+
8
+
9
+ ### Features
10
+
11
+ * add controlComponent property to getRangeContext api ([6420421](https://github.com/Hufe921/canvas-editor/commit/6420421e2fd01d79ad5be835eac4f2f49359fec6))
12
+ * add disable selection option outside the page #1120 ([f2c61e5](https://github.com/Hufe921/canvas-editor/commit/f2c61e539747c71a6e051fe9f607bf0098b3b22f)), closes [#1120](https://github.com/Hufe921/canvas-editor/issues/1120)
13
+ * add isIgnoreDisabledRule option to richtext style setting apis #1109 ([46d917c](https://github.com/Hufe921/canvas-editor/commit/46d917caa5023c28e692a852f5b036bfbb9a6f0d)), closes [#1109](https://github.com/Hufe921/canvas-editor/issues/1109)
14
+ * add isSubmitHistory option to the insert element apis #1124 ([424e01f](https://github.com/Hufe921/canvas-editor/commit/424e01f9d30d88cf8d749cb169c6733309821d71)), closes [#1124](https://github.com/Hufe921/canvas-editor/issues/1124)
15
+
16
+
17
+
18
+ ## [0.9.108](https://github.com/Hufe921/canvas-editor/compare/v0.9.107...v0.9.108) (2025-04-30)
19
+
20
+
21
+ ### Bug Fixes
22
+
23
+ * 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)
24
+ * 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)
25
+
26
+
27
+ ### Chores
28
+
29
+ * update README.md ([f6828fb](https://github.com/Hufe921/canvas-editor/commit/f6828fb43a176d3098fe3bac1cd0dde9744d630d))
30
+
31
+
32
+ ### Features
33
+
34
+ * add control disabledBackgroundColor option #1105 ([bb6b5ce](https://github.com/Hufe921/canvas-editor/commit/bb6b5ce711ab784ff4e1f3e2b98629bca2018dbd)), closes [#1105](https://github.com/Hufe921/canvas-editor/issues/1105)
35
+ * locate outside the control #1100 ([949421b](https://github.com/Hufe921/canvas-editor/commit/949421baad9ba5854913af0bc17f1b4df7b88f69)), closes [#1100](https://github.com/Hufe921/canvas-editor/issues/1100)
36
+
37
+
38
+
1
39
  ## [0.9.107](https://github.com/Hufe921/canvas-editor/compare/v0.9.106...v0.9.107) (2025-04-18)
2
40
 
3
41
 
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.107";
26
+ const version = "0.9.109";
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,
@@ -4139,7 +4142,8 @@ function mergeOption(options = {}) {
4139
4142
  maskMargin: [0, 0, 0, 0],
4140
4143
  letterClass: [LETTER_CLASS.ENGLISH],
4141
4144
  contextMenuDisableKeys: [],
4142
- scrollContainerSelector: ""
4145
+ scrollContainerSelector: "",
4146
+ pageOuterSelectionDisable: false
4143
4147
  }, options), {
4144
4148
  table: tableOptions,
4145
4149
  header: headerOptions,
@@ -4563,7 +4567,7 @@ function isSameElementExceptValue(source, target) {
4563
4567
  }
4564
4568
  function pickElementAttr(payload, option = {}) {
4565
4569
  const { extraPickAttrs } = option;
4566
- const zipAttrs = EDITOR_ELEMENT_ZIP_ATTR;
4570
+ const zipAttrs = [...EDITOR_ELEMENT_ZIP_ATTR];
4567
4571
  if (extraPickAttrs) {
4568
4572
  zipAttrs.push(...extraPickAttrs);
4569
4573
  }
@@ -6645,6 +6649,8 @@ function mouseup(evt, host) {
6645
6649
  }
6646
6650
  function mouseleave(evt, host) {
6647
6651
  const draw = host.getDraw();
6652
+ if (!draw.getOptions().pageOuterSelectionDisable)
6653
+ return;
6648
6654
  const pageContainer = draw.getPageContainer();
6649
6655
  const { x, y, width, height } = pageContainer.getBoundingClientRect();
6650
6656
  if (evt.x >= x && evt.x <= x + width && evt.y >= y && evt.y <= y + height) {
@@ -11952,7 +11958,9 @@ class SelectControl {
11952
11958
  if (!~leftIndex || !~rightIndex)
11953
11959
  return -1;
11954
11960
  const draw = this.control.getDraw();
11955
- draw.spliceElementList(elementList, leftIndex + 1, rightIndex - leftIndex);
11961
+ draw.spliceElementList(elementList, leftIndex + 1, rightIndex - leftIndex, [], {
11962
+ isIgnoreDeletedRule: options.isIgnoreDeletedRule
11963
+ });
11956
11964
  if (isAddPlaceholder) {
11957
11965
  this.control.addPlaceholder(preIndex, context);
11958
11966
  }
@@ -11991,7 +11999,9 @@ class SelectControl {
11991
11999
  const text = this.getText(newCodes);
11992
12000
  if (!text) {
11993
12001
  if (oldCode) {
11994
- const prefixIndex2 = this.clearSelect(context);
12002
+ const prefixIndex2 = this.clearSelect(context, {
12003
+ isIgnoreDeletedRule: options.isIgnoreDeletedRule
12004
+ });
11995
12005
  if (~prefixIndex2) {
11996
12006
  this.control.repaintControl({
11997
12007
  curIndex: prefixIndex2
@@ -12006,7 +12016,8 @@ class SelectControl {
12006
12016
  const valueElement = this.getValue(context)[0];
12007
12017
  const styleElement = valueElement ? pickObject(valueElement, EDITOR_ELEMENT_STYLE_ATTR) : pickObject(elementList[range.startIndex], CONTROL_STYLE_ATTR);
12008
12018
  const prefixIndex = this.clearSelect(context, {
12009
- isAddPlaceholder: false
12019
+ isAddPlaceholder: false,
12020
+ isIgnoreDeletedRule: options.isIgnoreDeletedRule
12010
12021
  });
12011
12022
  if (!~prefixIndex)
12012
12023
  return;
@@ -12170,7 +12181,9 @@ class TextControl {
12170
12181
  const { startIndex, endIndex } = range;
12171
12182
  const draw = this.control.getDraw();
12172
12183
  if (startIndex !== endIndex) {
12173
- draw.spliceElementList(elementList, startIndex + 1, endIndex - startIndex);
12184
+ draw.spliceElementList(elementList, startIndex + 1, endIndex - startIndex, [], {
12185
+ isIgnoreDeletedRule: options.isIgnoreDeletedRule
12186
+ });
12174
12187
  } else {
12175
12188
  this.control.removePlaceholder(startIndex, context);
12176
12189
  }
@@ -12199,7 +12212,9 @@ class TextControl {
12199
12212
  const elementList = context.elementList || this.control.getElementList();
12200
12213
  const range = context.range || this.control.getRange();
12201
12214
  const { startIndex, endIndex } = range;
12202
- this.control.getDraw().spliceElementList(elementList, startIndex + 1, endIndex - startIndex);
12215
+ this.control.getDraw().spliceElementList(elementList, startIndex + 1, endIndex - startIndex, [], {
12216
+ isIgnoreDeletedRule: options.isIgnoreDeletedRule
12217
+ });
12203
12218
  const value = this.getValue(context);
12204
12219
  if (!value.length) {
12205
12220
  this.control.addPlaceholder(startIndex, context);
@@ -12847,7 +12862,9 @@ class DateControl {
12847
12862
  return -1;
12848
12863
  const elementList = context.elementList || this.control.getElementList();
12849
12864
  const draw = this.control.getDraw();
12850
- draw.spliceElementList(elementList, leftIndex + 1, rightIndex - leftIndex);
12865
+ draw.spliceElementList(elementList, leftIndex + 1, rightIndex - leftIndex, [], {
12866
+ isIgnoreDeletedRule: options.isIgnoreDeletedRule
12867
+ });
12851
12868
  if (isAddPlaceholder) {
12852
12869
  this.control.addPlaceholder(leftIndex, context);
12853
12870
  }
@@ -12862,7 +12879,8 @@ class DateControl {
12862
12879
  const valueElement = this.getValue(context)[0];
12863
12880
  const styleElement = valueElement ? pickObject(valueElement, EDITOR_ELEMENT_STYLE_ATTR) : pickObject(elementList[range.startIndex], CONTROL_STYLE_ATTR);
12864
12881
  const prefixIndex = this.clearSelect(context, {
12865
- isAddPlaceholder: false
12882
+ isAddPlaceholder: false,
12883
+ isIgnoreDeletedRule: options.isIgnoreDeletedRule
12866
12884
  });
12867
12885
  if (!~prefixIndex)
12868
12886
  return;
@@ -13720,7 +13738,8 @@ class Control {
13720
13738
  elementList
13721
13739
  };
13722
13740
  const controlRule = {
13723
- isIgnoreDisabledRule: true
13741
+ isIgnoreDisabledRule: true,
13742
+ isIgnoreDeletedRule: true
13724
13743
  };
13725
13744
  if (type === ControlType.TEXT) {
13726
13745
  const formatValue = Array.isArray(value) ? value : value ? [{ value }] : [];
@@ -14446,7 +14465,7 @@ function WorkerWrapper$1() {
14446
14465
  objURL && (window.URL || window.webkitURL).revokeObjectURL(objURL);
14447
14466
  }
14448
14467
  }
14449
- const encodedJs = "KCgpPT57dmFyIEV0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxmdD1PYmplY3QuZGVmaW5lUHJvcGVydGllczt2YXIgVHQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7dmFyIGl0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyIEl0PU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksQXQ9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgbnQ9KFQsSSxkKT0+SSBpbiBUP0V0KFQsSSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZH0pOlRbSV09ZCxOPShULEkpPT57Zm9yKHZhciBkIGluIEl8fChJPXt9KSlJdC5jYWxsKEksZCkmJm50KFQsZCxJW2RdKTtpZihpdClmb3IodmFyIGQgb2YgaXQoSSkpQXQuY2FsbChJLGQpJiZudChULGQsSVtkXSk7cmV0dXJuIFR9LHg9KFQsSSk9PmZ0KFQsVHQoSSkpOyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgVDsoZnVuY3Rpb24odCl7dC5IQUxGPSJoYWxmIix0Lk9ORV9USElSRD0ib25lLXRoaXJkIix0LlFVQVJURVI9InF1YXJ0ZXIifSkoVHx8KFQ9e30pKTt2YXIgSTsoZnVuY3Rpb24odCl7dC5BUkFCSUM9ImFyYWJpYyIsdC5DSElORVNFPSJjaGluZXNlIn0pKEl8fChJPXt9KSk7dmFyIGQ7KGZ1bmN0aW9uKHQpe3QuSU5MSU5FPSJpbmxpbmUiLHQuQkxPQ0s9ImJsb2NrIix0LlNVUlJPVU5EPSJzdXJyb3VuZCIsdC5GTE9BVF9UT1A9ImZsb2F0LXRvcCIsdC5GTE9BVF9CT1RUT009ImZsb2F0LWJvdHRvbSJ9KShkfHwoZD17fSkpO3ZhciBfOyhmdW5jdGlvbih0KXt0LkJFRk9SRT0iYmVmb3JlIix0LkFGVEVSPSJhZnRlciJ9KShffHwoXz17fSkpO3ZhciBYOyhmdW5jdGlvbih0KXt0LlJPVz0icm93Iix0LkNPTFVNTj0iY29sdW1uIn0pKFh8fChYPXt9KSk7Y29uc3QgRj0iXHUyMDBCIjtULkhBTEYrIiIsMS8yLFQuT05FX1RISVJEKyIiLDEvMyxULlFVQVJURVIrIiIsMS80O2Z1bmN0aW9uIEgodCl7aWYodHlwZW9mIHN0cnVjdHVyZWRDbG9uZT09ImZ1bmN0aW9uIilyZXR1cm4gc3RydWN0dXJlZENsb25lKHQpO2lmKCF0fHx0eXBlb2YgdCE9Im9iamVjdCIpcmV0dXJuIHQ7bGV0IHM9e307cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/cz10Lm1hcChFPT5IKEUpKTpPYmplY3Qua2V5cyh0KS5mb3JFYWNoKEU9PnNbRV09SCh0W0VdKSksc31mdW5jdGlvbiBNKHQscyl7Y29uc3QgRT17fTtmb3IoY29uc3QgQSBpbiB0KXMuaW5jbHVkZXMoQSkmJihFW0FdPXRbQV0pO3JldHVybiBFfWZ1bmN0aW9uIGF0KHQscyl7cmV0dXJuIHQubGVuZ3RoIT09cy5sZW5ndGg/ITE6IXQuc29tZShFPT4hcy5pbmNsdWRlcyhFKSl9dmFyIGw7KGZ1bmN0aW9uKHQpe3QuVEVYVD0idGV4dCIsdC5JTUFHRT0iaW1hZ2UiLHQuVEFCTEU9InRhYmxlIix0LkhZUEVSTElOSz0iaHlwZXJsaW5rIix0LlNVUEVSU0NSSVBUPSJzdXBlcnNjcmlwdCIsdC5TVUJTQ1JJUFQ9InN1YnNjcmlwdCIsdC5TRVBBUkFUT1I9InNlcGFyYXRvciIsdC5QQUdFX0JSRUFLPSJwYWdlQnJlYWsiLHQuQ09OVFJPTD0iY29udHJvbCIsdC5BUkVBPSJhcmVhIix0LkNIRUNLQk9YPSJjaGVja2JveCIsdC5SQURJTz0icmFkaW8iLHQuTEFURVg9ImxhdGV4Iix0LlRBQj0idGFiIix0LkRBVEU9ImRhdGUiLHQuQkxPQ0s9ImJsb2NrIix0LlRJVExFPSJ0aXRsZSIsdC5MSVNUPSJsaXN0In0pKGx8fChsPXt9KSk7Y29uc3QgbHQ9WyJyb3dGbGV4Iiwicm93TWFyZ2luIl0sb3Q9WyJ0eXBlIiwiZm9udCIsInNpemUiLCJib2xkIiwiY29sb3IiLCJpdGFsaWMiLCJoaWdobGlnaHQiLCJ1bmRlcmxpbmUiLCJzdHJpa2VvdXQiLCJyb3dGbGV4Iiwicm93TWFyZ2luIiwiZGFzaEFycmF5IiwidHJMaXN0IiwidGFibGVUb29sRGlzYWJsZWQiLCJib3JkZXJUeXBlIiwiYm9yZGVyQ29sb3IiLCJ3aWR0aCIsImhlaWdodCIsInVybCIsImNvbGdyb3VwIiwidmFsdWVMaXN0IiwiY29udHJvbCIsImNoZWNrYm94IiwicmFkaW8iLCJkYXRlRm9ybWF0IiwiYmxvY2siLCJsZXZlbCIsInRpdGxlIiwibGlzdFR5cGUiLCJsaXN0U3R5bGUiLCJsaXN0V3JhcCIsImdyb3VwSWRzIiwiY29uY2VwdElkIiwiaW1nRGlzcGxheSIsImltZ0Zsb2F0UG9zaXRpb24iLCJpbWdUb29sRGlzYWJsZWQiLCJ0ZXh0RGVjb3JhdGlvbiIsImV4dGVuc2lvbiIsImV4dGVybmFsSWQiLCJhcmVhSWQiLCJhcmVhIl0scnQ9WyJjb25jZXB0SWQiLCJleHRlbnNpb24iLCJleHRlcm5hbElkIiwidmVydGljYWxBbGlnbiIsImJhY2tncm91bmRDb2xvciIsImJvcmRlclR5cGVzIiwic2xhc2hUeXBlcyIsImRpc2FibGVkIiwiZGVsZXRhYmxlIl0sc3Q9WyJmb250Iiwic2l6ZSIsImJvbGQiLCJoaWdobGlnaHQiLCJpdGFsaWMiLCJzdHJpa2VvdXQiXTtsLlRFWFQsbC5IWVBFUkxJTkssbC5TVUJTQ1JJUFQsbC5TVVBFUlNDUklQVCxsLkNPTlRST0wsbC5EQVRFLGwuSU1BR0UsbC5MQVRFWCxsLkJMT0NLLGwuUEFHRV9CUkVBSyxsLlNFUEFSQVRPUixsLlRBQkxFLGwuVElUTEUsbC5MSVNUO3ZhciBnOyhmdW5jdGlvbih0KXt0LlVMPSJ1bCIsdC5PTD0ib2wifSkoZ3x8KGc9e30pKTt2YXIgTzsoZnVuY3Rpb24odCl7dC5ESVNDPSJkaXNjIix0LkNJUkNMRT0iY2lyY2xlIix0LlNRVUFSRT0ic3F1YXJlIix0LkNIRUNLQk9YPSJjaGVja2JveCJ9KShPfHwoTz17fSkpO3ZhciBiOyhmdW5jdGlvbih0KXt0LkRFQ0lNQUw9ImRlY2ltYWwifSkoYnx8KGI9e30pKTt2YXIgdjsoZnVuY3Rpb24odCl7dFt0LkRJU0M9Ty5ESVNDXT0iRElTQyIsdFt0LkNJUkNMRT1PLkNJUkNMRV09IkNJUkNMRSIsdFt0LlNRVUFSRT1PLlNRVUFSRV09IlNRVUFSRSIsdFt0LkRFQ0lNQUw9Yi5ERUNJTUFMXT0iREVDSU1BTCIsdFt0LkNIRUNLQk9YPU8uQ0hFQ0tCT1hdPSJDSEVDS0JPWCJ9KSh2fHwodj17fSkpLE8uRElTQysiIixPLkNJUkNMRSsiIixPLlNRVUFSRSsiIixPLkNIRUNLQk9YKyIiLGcuT0wrIiIsZy5VTCsiIix2LkRJU0MrIiIsdi5DSVJDTEUrIiIsdi5TUVVBUkUrIiIsdi5ERUNJTUFMKyIiLHYuQ0hFQ0tCT1grIiI7dmFyIGY7KGZ1bmN0aW9uKHQpe3QuRklSU1Q9ImZpcnN0Iix0LlNFQ09ORD0ic2Vjb25kIix0LlRISVJEPSJ0aGlyZCIsdC5GT1VSVEg9ImZvdXJ0aCIsdC5GSUZUSD0iZmlmdGgiLHQuU0lYVEg9InNpeHRoIn0pKGZ8fChmPXt9KSksZi5GSVJTVCsiIixmLlNFQ09ORCsiIixmLlRISVJEKyIiLGYuRk9VUlRIKyIiLGYuRklGVEgrIiIsZi5TSVhUSCsiIixmLkZJUlNUKyIiLGYuU0VDT05EKyIiLGYuVEhJUkQrIiIsZi5GT1VSVEgrIiIsZi5GSUZUSCsiIixmLlNJWFRIKyIiLGYuRklSU1QsZi5TRUNPTkQsZi5USElSRCxmLkZPVVJUSCxmLkZJRlRILGYuU0lYVEg7dmFyIEs7KGZ1bmN0aW9uKHQpe3QuSUZSQU1FPSJpZnJhbWUiLHQuVklERU89InZpZGVvIn0pKEt8fChLPXt9KSk7dmFyIHc7KGZ1bmN0aW9uKHQpe3QuVEVYVD0idGV4dCIsdC5TRUxFQ1Q9InNlbGVjdCIsdC5DSEVDS0JPWD0iY2hlY2tib3giLHQuUkFESU89InJhZGlvIix0LkRBVEU9ImRhdGUiLHQuTlVNQkVSPSJudW1iZXIifSkod3x8KHc9e30pKTt2YXIgQzsoZnVuY3Rpb24odCl7dC5QUkVGSVg9InByZWZpeCIsdC5QT1NURklYPSJwb3N0Zml4Iix0LlBSRV9URVhUPSJwcmVUZXh0Iix0LlBPU1RfVEVYVD0icG9zdFRleHQiLHQuUExBQ0VIT0xERVI9InBsYWNlaG9sZGVyIix0LlZBTFVFPSJ2YWx1ZSIsdC5DSEVDS0JPWD0iY2hlY2tib3giLHQuUkFESU89InJhZGlvIn0pKEN8fChDPXt9KSk7dmFyIHo7KGZ1bmN0aW9uKHQpe3QuUk9XX1NUQVJUPSJyb3dTdGFydCIsdC5WQUxVRV9TVEFSVD0idmFsdWVTdGFydCJ9KSh6fHwoej17fSkpO3ZhciBHOyhmdW5jdGlvbih0KXt0LkFDVElWRT0iYWN0aXZlIix0LklOQUNUSVZFPSJpbmFjdGl2ZSJ9KShHfHwoRz17fSkpO3ZhciBZOyhmdW5jdGlvbih0KXt0LkNPTVBPTkVOVD0iY29tcG9uZW50Iix0Lk1FTlU9Im1lbnUiLHQuTUFJTj0ibWFpbiIsdC5GT09URVI9ImZvb3RlciIsdC5DT05URVhUTUVOVT0iY29udGV4dG1lbnUiLHQuUE9QVVA9InBvcHVwIix0LkNBVEFMT0c9ImNhdGFsb2ciLHQuQ09NTUVOVD0iY29tbWVudCJ9KShZfHwoWT17fSkpO3ZhciBWOyhmdW5jdGlvbih0KXt0LlBBR0U9InBhZ2UiLHQuVEFCTEU9InRhYmxlIn0pKFZ8fChWPXt9KSk7dmFyIFE7KGZ1bmN0aW9uKHQpe3QuRURJVD0iZWRpdCIsdC5DTEVBTj0iY2xlYW4iLHQuUkVBRE9OTFk9InJlYWRvbmx5Iix0LkZPUk09ImZvcm0iLHQuUFJJTlQ9InByaW50Iix0LkRFU0lHTj0iZGVzaWduIn0pKFF8fChRPXt9KSk7dmFyIFc7KGZ1bmN0aW9uKHQpe3QuSEVBREVSPSJoZWFkZXIiLHQuTUFJTj0ibWFpbiIsdC5GT09URVI9ImZvb3RlciJ9KShXfHwoVz17fSkpO3ZhciBxOyhmdW5jdGlvbih0KXt0LlBBR0lORz0icGFnaW5nIix0LkNPTlRJTlVJVFk9ImNvbnRpbnVpdHkifSkocXx8KHE9e30pKTt2YXIgWjsoZnVuY3Rpb24odCl7dC5WRVJUSUNBTD0idmVydGljYWwiLHQuSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCJ9KShafHwoWj17fSkpO3ZhciBKOyhmdW5jdGlvbih0KXt0LkJSRUFLX0FMTD0iYnJlYWstYWxsIix0LkJSRUFLX1dPUkQ9ImJyZWFrLXdvcmQifSkoSnx8KEo9e30pKTt2YXIgajsoZnVuY3Rpb24odCl7dC5TUEVFRD0ic3BlZWQiLHQuQ09NUEFUSUJJTElUWT0iY29tcGF0aWJpbGl0eSJ9KShqfHwoaj17fSkpO3ZhciBEOyhmdW5jdGlvbih0KXt0LkxFRlQ9ImxlZnQiLHQuQ0VOVEVSPSJjZW50ZXIiLHQuUklHSFQ9InJpZ2h0Iix0LkFMSUdOTUVOVD0iYWxpZ25tZW50Iix0LkpVU1RJRlk9Imp1c3RpZnkifSkoRHx8KEQ9e30pKTt2YXIgJDsoZnVuY3Rpb24odCl7dC5BTEw9ImFsbCIsdC5FTVBUWT0iZW1wdHkiLHQuRVhURVJOQUw9ImV4dGVybmFsIix0LklOVEVSTkFMPSJpbnRlcm5hbCIsdC5EQVNIPSJkYXNoIn0pKCR8fCgkPXt9KSk7dmFyIHR0OyhmdW5jdGlvbih0KXt0LlRPUD0idG9wIix0LlJJR0hUPSJyaWdodCIsdC5CT1RUT009ImJvdHRvbSIsdC5MRUZUPSJsZWZ0In0pKHR0fHwodHQ9e30pKTt2YXIgZXQ7KGZ1bmN0aW9uKHQpe3QuRk9SV0FSRD0iZm9yd2FyZCIsdC5CQUNLPSJiYWNrIn0pKGV0fHwoZXQ9e30pKTt2YXIgazsoZnVuY3Rpb24odCl7dC5DT05UQUlOPSJjb250YWluIix0LkNPVkVSPSJjb3ZlciJ9KShrfHwoaz17fSkpO3ZhciBtOyhmdW5jdGlvbih0KXt0LlJFUEVBVD0icmVwZWF0Iix0Lk5PX1JFUEVBVD0ibm8tcmVwZWF0Iix0LlJFUEVBVF9YPSJyZXBlYXQteCIsdC5SRVBFQVRfWT0icmVwZWF0LXkifSkobXx8KG09e30pKSxrLkNPVkVSLG0uTk9fUkVQRUFUO3ZhciBQOyhmdW5jdGlvbih0KXt0LlRPUD0idG9wIix0Lk1JRERMRT0ibWlkZGxlIix0LkJPVFRPTT0iYm90dG9tIn0pKFB8fChQPXt9KSksUC5CT1RUT00sVC5IQUxGLFQuSEFMRjtjb25zdCBjdD17UEFHRV9OTzoie3BhZ2VOb30iLFBBR0VfQ09VTlQ6IntwYWdlQ291bnR9In07RC5DRU5URVIsY3QuUEFHRV9OTyxJLkFSQUJJQyxQLkJPVFRPTSxJLkFSQUJJQzt2YXIgeTsoZnVuY3Rpb24odCl7dC5QQUdFPSJwYWdlIix0LkNPTlRJTlVJVFk9ImNvbnRpbnVpdHkifSkoeXx8KHk9e30pKSx5LkNPTlRJTlVJVFk7ZnVuY3Rpb24gdXQodCxzKXtjb25zdCBFPU9iamVjdC5rZXlzKHQpLEE9T2JqZWN0LmtleXMocyk7aWYoRS5sZW5ndGghPT1BLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IFI9MDtSPEUubGVuZ3RoO1IrKyl7Y29uc3Qgbj1FW1JdO2lmKG4hPT0idmFsdWUiJiYhKG49PT0iZ3JvdXBJZHMiJiZBcnJheS5pc0FycmF5KHRbbl0pJiZBcnJheS5pc0FycmF5KHNbbl0pJiZhdCh0W25dLHNbbl0pKSYmdFtuXSE9PXNbbl0pcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gQih0LHM9e30pe2NvbnN0e2V4dHJhUGlja0F0dHJzOkV9PXMsQT1vdDtFJiZBLnB1c2goLi4uRSk7Y29uc3QgUj17dmFsdWU6dC52YWx1ZT09PUY/YApgOnQudmFsdWV9O3JldHVybiBBLmZvckVhY2gobj0+e2NvbnN0IHA9dFtuXTtwIT09dm9pZCAwJiYoUltuXT1wKX0pLFJ9ZnVuY3Rpb24gaCh0LHM9e30pe2NvbnN0e2V4dHJhUGlja0F0dHJzOkUsaXNDbGFzc2lmeUFyZWE6QT0hMSxpc0Nsb25lOlI9ITB9PXMsbj1SP0godCk6dCxwPVtdO2xldCBpPTA7Zm9yKDtpPG4ubGVuZ3RoOyl7bGV0IGU9bltpXTtpZihpPT09MCYmZS52YWx1ZT09PUYmJiFlLmxpc3RJZCYmKCFlLnR5cGV8fGUudHlwZT09PWwuVEVYVCkpe2krKztjb250aW51ZX1pZihlLmFyZWFJZCYmZS5hcmVhKXtjb25zdCBhPWUuYXJlYUlkLHU9ZS5hcmVhLGM9W107Zm9yKDtpPG4ubGVuZ3RoOyl7Y29uc3Qgcj1uW2ldO2lmKGEhPT1yLmFyZWFJZCl7aS0tO2JyZWFrfWRlbGV0ZSByLmFyZWEsZGVsZXRlIHIuYXJlYUlkLGMucHVzaChyKSxpKyt9Y29uc3Qgbz1oKGMscyk7aWYoQSl7Y29uc3Qgcj17dHlwZTpsLkFSRUEsdmFsdWU6IiIsYXJlYUlkOmEsYXJlYTp1fTtyLnZhbHVlTGlzdD1vLGU9cn1lbHNle3Auc3BsaWNlKGksMCwuLi5vKTtjb250aW51ZX19ZWxzZSBpZihlLnRpdGxlSWQmJmUubGV2ZWwpe2NvbnN0IGE9ZS50aXRsZUlkO2lmKGEpe2NvbnN0IHU9ZS5sZXZlbCxjPXt0eXBlOmwuVElUTEUsdGl0bGU6ZS50aXRsZSx0aXRsZUlkOmEsdmFsdWU6IiIsbGV2ZWw6dX0sbz1bXTtmb3IoO2k8bi5sZW5ndGg7KXtjb25zdCByPW5baV07aWYoYSE9PXIudGl0bGVJZCl7aS0tO2JyZWFrfWRlbGV0ZSByLmxldmVsLGRlbGV0ZSByLnRpdGxlLG8ucHVzaChyKSxpKyt9Yy52YWx1ZUxpc3Q9aChvLHMpLGU9Y319ZWxzZSBpZihlLmxpc3RJZCYmZS5saXN0VHlwZSl7Y29uc3QgYT1lLmxpc3RJZDtpZihhKXtjb25zdCB1PWUubGlzdFR5cGUsYz1lLmxpc3RTdHlsZSxvPXt0eXBlOmwuTElTVCx2YWx1ZToiIixsaXN0SWQ6YSxsaXN0VHlwZTp1LGxpc3RTdHlsZTpjfSxyPVtdO2Zvcig7aTxuLmxlbmd0aDspe2NvbnN0IEw9bltpXTtpZihhIT09TC5saXN0SWQpe2ktLTticmVha31kZWxldGUgTC5saXN0VHlwZSxkZWxldGUgTC5saXN0U3R5bGUsci5wdXNoKEwpLGkrK31vLnZhbHVlTGlzdD1oKHIscyksZT1vfX1lbHNlIGlmKGUudHlwZT09PWwuVEFCTEUpe2lmKGUucGFnaW5nSWQpe2xldCBhPWkrMSx1PTA7Zm9yKDthPG4ubGVuZ3RoOyl7Y29uc3QgYz1uW2FdO2lmKGMucGFnaW5nSWQ9PT1lLnBhZ2luZ0lkKWUuaGVpZ2h0Kz1jLmhlaWdodCxlLnRyTGlzdC5wdXNoKC4uLmMudHJMaXN0KSxhKyssdSsrO2Vsc2UgYnJlYWt9aSs9dX1pZihlLnRyTGlzdClmb3IobGV0IGE9MDthPGUudHJMaXN0Lmxlbmd0aDthKyspe2NvbnN0IHU9ZS50ckxpc3RbYV07ZGVsZXRlIHUuaWQ7Zm9yKGxldCBjPTA7Yzx1LnRkTGlzdC5sZW5ndGg7YysrKXtjb25zdCBvPXUudGRMaXN0W2NdLHI9e2NvbHNwYW46by5jb2xzcGFuLHJvd3NwYW46by5yb3dzcGFuLHZhbHVlOmgoby52YWx1ZSx4KE4oe30scykse2lzQ2xhc3NpZnlBcmVhOiExfSkpfTtydC5mb3JFYWNoKEw9Pntjb25zdCBTPW9bTF07UyE9PXZvaWQgMCYmKHJbTF09Uyl9KSx1LnRkTGlzdFtjXT1yfX19ZWxzZSBpZihlLnR5cGU9PT1sLkhZUEVSTElOSyl7Y29uc3QgYT1lLmh5cGVybGlua0lkO2lmKGEpe2NvbnN0IHU9e3R5cGU6bC5IWVBFUkxJTkssdmFsdWU6IiIsdXJsOmUudXJsfSxjPVtdO2Zvcig7aTxuLmxlbmd0aDspe2NvbnN0IG89bltpXTtpZihhIT09by5oeXBlcmxpbmtJZCl7aS0tO2JyZWFrfWRlbGV0ZSBvLnR5cGUsZGVsZXRlIG8udXJsLGMucHVzaChvKSxpKyt9dS52YWx1ZUxpc3Q9aChjLHMpLGU9dX19ZWxzZSBpZihlLnR5cGU9PT1sLkRBVEUpe2NvbnN0IGE9ZS5kYXRlSWQ7aWYoYSl7Y29uc3QgdT17dHlwZTpsLkRBVEUsdmFsdWU6IiIsZGF0ZUZvcm1hdDplLmRhdGVGb3JtYXR9LGM9W107Zm9yKDtpPG4ubGVuZ3RoOyl7Y29uc3Qgbz1uW2ldO2lmKGEhPT1vLmRhdGVJZCl7aS0tO2JyZWFrfWRlbGV0ZSBvLnR5cGUsZGVsZXRlIG8uZGF0ZUZvcm1hdCxjLnB1c2gobyksaSsrfXUudmFsdWVMaXN0PWgoYyxzKSxlPXV9fWVsc2UgaWYoZS5jb250cm9sSWQpe2NvbnN0IGE9ZS5jb250cm9sSWQ7aWYoZS5jb250cm9sQ29tcG9uZW50PT09Qy5QUkVGSVgpe2NvbnN0IHU9W107bGV0IGM9ITEsbz1pO2Zvcig7bzxuLmxlbmd0aDspe2NvbnN0IHI9bltvXTtpZihhIT09ci5jb250cm9sSWQpYnJlYWs7ci5jb250cm9sQ29tcG9uZW50PT09Qy5WQUxVRSYmKGRlbGV0ZSByLmNvbnRyb2wsZGVsZXRlIHIuY29udHJvbElkLHUucHVzaChyKSksci5jb250cm9sQ29tcG9uZW50PT09Qy5QT1NURklYJiYoYz0hMCksbysrfWlmKGMpe2NvbnN0IHI9TShlLHN0KSxMPU4oTih7fSxlLmNvbnRyb2wpLHIpLFM9eChOKHt9LE0oZSxsdCkpLHt0eXBlOmwuQ09OVFJPTCx2YWx1ZToiIixjb250cm9sOkwsY29udHJvbElkOmF9KTtTLmNvbnRyb2wudmFsdWU9aCh1LHMpLGU9QihTLHtleHRyYVBpY2tBdHRyczpFfSksaSs9by1pLTF9fWlmKGUuY29udHJvbENvbXBvbmVudCYmKGRlbGV0ZSBlLmNvbnRyb2wsZGVsZXRlIGUuY29udHJvbElkLGUuY29udHJvbENvbXBvbmVudCE9PUMuVkFMVUUmJmUuY29udHJvbENvbXBvbmVudCE9PUMuUFJFX1RFWFQmJmUuY29udHJvbENvbXBvbmVudCE9PUMuUE9TVF9URVhUKSl7aSsrO2NvbnRpbnVlfX1jb25zdCBVPUIoZSx7ZXh0cmFQaWNrQXR0cnM6RX0pO2lmKCFlLnR5cGV8fGUudHlwZT09PWwuVEVYVHx8ZS50eXBlPT09bC5TVUJTQ1JJUFR8fGUudHlwZT09PWwuU1VQRVJTQ1JJUFQpZm9yKDtpPG4ubGVuZ3RoOyl7Y29uc3QgYT1uW2krMV07aWYoaSsrLGEmJnV0KFUsQihhLHtleHRyYVBpY2tBdHRyczpFfSkpKXtjb25zdCB1PWEudmFsdWU9PT1GP2AKYDphLnZhbHVlO1UudmFsdWUrPXV9ZWxzZSBicmVha31lbHNlIGkrKztwLnB1c2goVSl9cmV0dXJuIHB9b25tZXNzYWdlPXQ9Pntjb25zdCBzPXQuZGF0YSx7b3B0aW9uczpFLGRhdGE6QX09cyx7ZXh0cmFQaWNrQXR0cnM6Uj1bXX09RXx8e30sbj17aGVhZGVyOmgoQS5oZWFkZXIse2V4dHJhUGlja0F0dHJzOlIsaXNDbG9uZTohMX0pLG1haW46aChBLm1haW4se2V4dHJhUGlja0F0dHJzOlIsaXNDbGFzc2lmeUFyZWE6ITAsaXNDbG9uZTohMX0pLGZvb3RlcjpoKEEuZm9vdGVyLHtleHRyYVBpY2tBdHRyczpSLGlzQ2xvbmU6ITF9KX07cG9zdE1lc3NhZ2Uobil9fSkoKTt9KSgpOwo=";
14468
+ const encodedJs = "KCgpPT57dmFyIEVlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxmZT1PYmplY3QuZGVmaW5lUHJvcGVydGllczt2YXIgVGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM7dmFyIGllPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyIEllPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksQWU9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTt2YXIgYWU9KFQsSSxkKT0+SSBpbiBUP0VlKFQsSSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZH0pOlRbSV09ZCxOPShULEkpPT57Zm9yKHZhciBkIGluIEl8fChJPXt9KSlJZS5jYWxsKEksZCkmJmFlKFQsZCxJW2RdKTtpZihpZSlmb3IodmFyIGQgb2YgaWUoSSkpQWUuY2FsbChJLGQpJiZhZShULGQsSVtkXSk7cmV0dXJuIFR9LF89KFQsSSk9PmZlKFQsVGUoSSkpOyhmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgVDsoZnVuY3Rpb24oZSl7ZS5IQUxGPSJoYWxmIixlLk9ORV9USElSRD0ib25lLXRoaXJkIixlLlFVQVJURVI9InF1YXJ0ZXIifSkoVHx8KFQ9e30pKTt2YXIgSTsoZnVuY3Rpb24oZSl7ZS5BUkFCSUM9ImFyYWJpYyIsZS5DSElORVNFPSJjaGluZXNlIn0pKEl8fChJPXt9KSk7dmFyIGQ7KGZ1bmN0aW9uKGUpe2UuSU5MSU5FPSJpbmxpbmUiLGUuQkxPQ0s9ImJsb2NrIixlLlNVUlJPVU5EPSJzdXJyb3VuZCIsZS5GTE9BVF9UT1A9ImZsb2F0LXRvcCIsZS5GTE9BVF9CT1RUT009ImZsb2F0LWJvdHRvbSJ9KShkfHwoZD17fSkpO3ZhciB4OyhmdW5jdGlvbihlKXtlLkJFRk9SRT0iYmVmb3JlIixlLkFGVEVSPSJhZnRlciIsZS5PVVRFUl9CRUZPUkU9Im91dGVyLWJlZm9yZSIsZS5PVVRFUl9BRlRFUj0ib3V0ZXItYWZ0ZXIifSkoeHx8KHg9e30pKTt2YXIgWDsoZnVuY3Rpb24oZSl7ZS5ST1c9InJvdyIsZS5DT0xVTU49ImNvbHVtbiJ9KShYfHwoWD17fSkpO2NvbnN0IFA9Ilx1MjAwQiI7VC5IQUxGKyIiLDEvMixULk9ORV9USElSRCsiIiwxLzMsVC5RVUFSVEVSKyIiLDEvNDtmdW5jdGlvbiBIKGUpe2lmKHR5cGVvZiBzdHJ1Y3R1cmVkQ2xvbmU9PSJmdW5jdGlvbiIpcmV0dXJuIHN0cnVjdHVyZWRDbG9uZShlKTtpZighZXx8dHlwZW9mIGUhPSJvYmplY3QiKXJldHVybiBlO2xldCBzPXt9O3JldHVybiBBcnJheS5pc0FycmF5KGUpP3M9ZS5tYXAoRT0+SChFKSk6T2JqZWN0LmtleXMoZSkuZm9yRWFjaChFPT5zW0VdPUgoZVtFXSkpLHN9ZnVuY3Rpb24gTShlLHMpe2NvbnN0IEU9e307Zm9yKGNvbnN0IEEgaW4gZSlzLmluY2x1ZGVzKEEpJiYoRVtBXT1lW0FdKTtyZXR1cm4gRX1mdW5jdGlvbiBuZShlLHMpe3JldHVybiBlLmxlbmd0aCE9PXMubGVuZ3RoPyExOiFlLnNvbWUoRT0+IXMuaW5jbHVkZXMoRSkpfXZhciBsOyhmdW5jdGlvbihlKXtlLlRFWFQ9InRleHQiLGUuSU1BR0U9ImltYWdlIixlLlRBQkxFPSJ0YWJsZSIsZS5IWVBFUkxJTks9Imh5cGVybGluayIsZS5TVVBFUlNDUklQVD0ic3VwZXJzY3JpcHQiLGUuU1VCU0NSSVBUPSJzdWJzY3JpcHQiLGUuU0VQQVJBVE9SPSJzZXBhcmF0b3IiLGUuUEFHRV9CUkVBSz0icGFnZUJyZWFrIixlLkNPTlRST0w9ImNvbnRyb2wiLGUuQVJFQT0iYXJlYSIsZS5DSEVDS0JPWD0iY2hlY2tib3giLGUuUkFESU89InJhZGlvIixlLkxBVEVYPSJsYXRleCIsZS5UQUI9InRhYiIsZS5EQVRFPSJkYXRlIixlLkJMT0NLPSJibG9jayIsZS5USVRMRT0idGl0bGUiLGUuTElTVD0ibGlzdCJ9KShsfHwobD17fSkpO2NvbnN0IGxlPVsicm93RmxleCIsInJvd01hcmdpbiJdLHJlPVsidHlwZSIsImZvbnQiLCJzaXplIiwiYm9sZCIsImNvbG9yIiwiaXRhbGljIiwiaGlnaGxpZ2h0IiwidW5kZXJsaW5lIiwic3RyaWtlb3V0Iiwicm93RmxleCIsInJvd01hcmdpbiIsImRhc2hBcnJheSIsInRyTGlzdCIsInRhYmxlVG9vbERpc2FibGVkIiwiYm9yZGVyVHlwZSIsImJvcmRlckNvbG9yIiwid2lkdGgiLCJoZWlnaHQiLCJ1cmwiLCJjb2xncm91cCIsInZhbHVlTGlzdCIsImNvbnRyb2wiLCJjaGVja2JveCIsInJhZGlvIiwiZGF0ZUZvcm1hdCIsImJsb2NrIiwibGV2ZWwiLCJ0aXRsZSIsImxpc3RUeXBlIiwibGlzdFN0eWxlIiwibGlzdFdyYXAiLCJncm91cElkcyIsImNvbmNlcHRJZCIsImltZ0Rpc3BsYXkiLCJpbWdGbG9hdFBvc2l0aW9uIiwiaW1nVG9vbERpc2FibGVkIiwidGV4dERlY29yYXRpb24iLCJleHRlbnNpb24iLCJleHRlcm5hbElkIiwiYXJlYUlkIiwiYXJlYSJdLG9lPVsiY29uY2VwdElkIiwiZXh0ZW5zaW9uIiwiZXh0ZXJuYWxJZCIsInZlcnRpY2FsQWxpZ24iLCJiYWNrZ3JvdW5kQ29sb3IiLCJib3JkZXJUeXBlcyIsInNsYXNoVHlwZXMiLCJkaXNhYmxlZCIsImRlbGV0YWJsZSJdLHNlPVsiZm9udCIsInNpemUiLCJib2xkIiwiaGlnaGxpZ2h0IiwiaXRhbGljIiwic3RyaWtlb3V0Il07bC5URVhULGwuSFlQRVJMSU5LLGwuU1VCU0NSSVBULGwuU1VQRVJTQ1JJUFQsbC5DT05UUk9MLGwuREFURSxsLklNQUdFLGwuTEFURVgsbC5CTE9DSyxsLlBBR0VfQlJFQUssbC5TRVBBUkFUT1IsbC5UQUJMRSxsLlRJVExFLGwuTElTVDt2YXIgZzsoZnVuY3Rpb24oZSl7ZS5VTD0idWwiLGUuT0w9Im9sIn0pKGd8fChnPXt9KSk7dmFyIE87KGZ1bmN0aW9uKGUpe2UuRElTQz0iZGlzYyIsZS5DSVJDTEU9ImNpcmNsZSIsZS5TUVVBUkU9InNxdWFyZSIsZS5DSEVDS0JPWD0iY2hlY2tib3gifSkoT3x8KE89e30pKTt2YXIgYjsoZnVuY3Rpb24oZSl7ZS5ERUNJTUFMPSJkZWNpbWFsIn0pKGJ8fChiPXt9KSk7dmFyIHY7KGZ1bmN0aW9uKGUpe2VbZS5ESVNDPU8uRElTQ109IkRJU0MiLGVbZS5DSVJDTEU9Ty5DSVJDTEVdPSJDSVJDTEUiLGVbZS5TUVVBUkU9Ty5TUVVBUkVdPSJTUVVBUkUiLGVbZS5ERUNJTUFMPWIuREVDSU1BTF09IkRFQ0lNQUwiLGVbZS5DSEVDS0JPWD1PLkNIRUNLQk9YXT0iQ0hFQ0tCT1gifSkodnx8KHY9e30pKSxPLkRJU0MrIiIsTy5DSVJDTEUrIiIsTy5TUVVBUkUrIiIsTy5DSEVDS0JPWCsiIixnLk9MKyIiLGcuVUwrIiIsdi5ESVNDKyIiLHYuQ0lSQ0xFKyIiLHYuU1FVQVJFKyIiLHYuREVDSU1BTCsiIix2LkNIRUNLQk9YKyIiO3ZhciBmOyhmdW5jdGlvbihlKXtlLkZJUlNUPSJmaXJzdCIsZS5TRUNPTkQ9InNlY29uZCIsZS5USElSRD0idGhpcmQiLGUuRk9VUlRIPSJmb3VydGgiLGUuRklGVEg9ImZpZnRoIixlLlNJWFRIPSJzaXh0aCJ9KShmfHwoZj17fSkpLGYuRklSU1QrIiIsZi5TRUNPTkQrIiIsZi5USElSRCsiIixmLkZPVVJUSCsiIixmLkZJRlRIKyIiLGYuU0lYVEgrIiIsZi5GSVJTVCsiIixmLlNFQ09ORCsiIixmLlRISVJEKyIiLGYuRk9VUlRIKyIiLGYuRklGVEgrIiIsZi5TSVhUSCsiIixmLkZJUlNULGYuU0VDT05ELGYuVEhJUkQsZi5GT1VSVEgsZi5GSUZUSCxmLlNJWFRIO3ZhciBLOyhmdW5jdGlvbihlKXtlLklGUkFNRT0iaWZyYW1lIixlLlZJREVPPSJ2aWRlbyJ9KShLfHwoSz17fSkpO3ZhciB3OyhmdW5jdGlvbihlKXtlLlRFWFQ9InRleHQiLGUuU0VMRUNUPSJzZWxlY3QiLGUuQ0hFQ0tCT1g9ImNoZWNrYm94IixlLlJBRElPPSJyYWRpbyIsZS5EQVRFPSJkYXRlIixlLk5VTUJFUj0ibnVtYmVyIn0pKHd8fCh3PXt9KSk7dmFyIEw7KGZ1bmN0aW9uKGUpe2UuUFJFRklYPSJwcmVmaXgiLGUuUE9TVEZJWD0icG9zdGZpeCIsZS5QUkVfVEVYVD0icHJlVGV4dCIsZS5QT1NUX1RFWFQ9InBvc3RUZXh0IixlLlBMQUNFSE9MREVSPSJwbGFjZWhvbGRlciIsZS5WQUxVRT0idmFsdWUiLGUuQ0hFQ0tCT1g9ImNoZWNrYm94IixlLlJBRElPPSJyYWRpbyJ9KShMfHwoTD17fSkpO3ZhciB6OyhmdW5jdGlvbihlKXtlLlJPV19TVEFSVD0icm93U3RhcnQiLGUuVkFMVUVfU1RBUlQ9InZhbHVlU3RhcnQifSkoenx8KHo9e30pKTt2YXIgRzsoZnVuY3Rpb24oZSl7ZS5BQ1RJVkU9ImFjdGl2ZSIsZS5JTkFDVElWRT0iaW5hY3RpdmUifSkoR3x8KEc9e30pKTt2YXIgWTsoZnVuY3Rpb24oZSl7ZS5DT01QT05FTlQ9ImNvbXBvbmVudCIsZS5NRU5VPSJtZW51IixlLk1BSU49Im1haW4iLGUuRk9PVEVSPSJmb290ZXIiLGUuQ09OVEVYVE1FTlU9ImNvbnRleHRtZW51IixlLlBPUFVQPSJwb3B1cCIsZS5DQVRBTE9HPSJjYXRhbG9nIixlLkNPTU1FTlQ9ImNvbW1lbnQifSkoWXx8KFk9e30pKTt2YXIgVjsoZnVuY3Rpb24oZSl7ZS5QQUdFPSJwYWdlIixlLlRBQkxFPSJ0YWJsZSJ9KShWfHwoVj17fSkpO3ZhciBROyhmdW5jdGlvbihlKXtlLkVESVQ9ImVkaXQiLGUuQ0xFQU49ImNsZWFuIixlLlJFQURPTkxZPSJyZWFkb25seSIsZS5GT1JNPSJmb3JtIixlLlBSSU5UPSJwcmludCIsZS5ERVNJR049ImRlc2lnbiJ9KShRfHwoUT17fSkpO3ZhciBXOyhmdW5jdGlvbihlKXtlLkhFQURFUj0iaGVhZGVyIixlLk1BSU49Im1haW4iLGUuRk9PVEVSPSJmb290ZXIifSkoV3x8KFc9e30pKTt2YXIgcTsoZnVuY3Rpb24oZSl7ZS5QQUdJTkc9InBhZ2luZyIsZS5DT05USU5VSVRZPSJjb250aW51aXR5In0pKHF8fChxPXt9KSk7dmFyIFo7KGZ1bmN0aW9uKGUpe2UuVkVSVElDQUw9InZlcnRpY2FsIixlLkhPUklaT05UQUw9Imhvcml6b250YWwifSkoWnx8KFo9e30pKTt2YXIgSjsoZnVuY3Rpb24oZSl7ZS5CUkVBS19BTEw9ImJyZWFrLWFsbCIsZS5CUkVBS19XT1JEPSJicmVhay13b3JkIn0pKEp8fChKPXt9KSk7dmFyIGo7KGZ1bmN0aW9uKGUpe2UuU1BFRUQ9InNwZWVkIixlLkNPTVBBVElCSUxJVFk9ImNvbXBhdGliaWxpdHkifSkoanx8KGo9e30pKTt2YXIgRDsoZnVuY3Rpb24oZSl7ZS5MRUZUPSJsZWZ0IixlLkNFTlRFUj0iY2VudGVyIixlLlJJR0hUPSJyaWdodCIsZS5BTElHTk1FTlQ9ImFsaWdubWVudCIsZS5KVVNUSUZZPSJqdXN0aWZ5In0pKER8fChEPXt9KSk7dmFyICQ7KGZ1bmN0aW9uKGUpe2UuQUxMPSJhbGwiLGUuRU1QVFk9ImVtcHR5IixlLkVYVEVSTkFMPSJleHRlcm5hbCIsZS5JTlRFUk5BTD0iaW50ZXJuYWwiLGUuREFTSD0iZGFzaCJ9KSgkfHwoJD17fSkpO3ZhciBlZTsoZnVuY3Rpb24oZSl7ZS5UT1A9InRvcCIsZS5SSUdIVD0icmlnaHQiLGUuQk9UVE9NPSJib3R0b20iLGUuTEVGVD0ibGVmdCJ9KShlZXx8KGVlPXt9KSk7dmFyIHRlOyhmdW5jdGlvbihlKXtlLkZPUldBUkQ9ImZvcndhcmQiLGUuQkFDSz0iYmFjayJ9KSh0ZXx8KHRlPXt9KSk7dmFyIGs7KGZ1bmN0aW9uKGUpe2UuQ09OVEFJTj0iY29udGFpbiIsZS5DT1ZFUj0iY292ZXIifSkoa3x8KGs9e30pKTt2YXIgbTsoZnVuY3Rpb24oZSl7ZS5SRVBFQVQ9InJlcGVhdCIsZS5OT19SRVBFQVQ9Im5vLXJlcGVhdCIsZS5SRVBFQVRfWD0icmVwZWF0LXgiLGUuUkVQRUFUX1k9InJlcGVhdC15In0pKG18fChtPXt9KSksay5DT1ZFUixtLk5PX1JFUEVBVDt2YXIgRjsoZnVuY3Rpb24oZSl7ZS5UT1A9InRvcCIsZS5NSURETEU9Im1pZGRsZSIsZS5CT1RUT009ImJvdHRvbSJ9KShGfHwoRj17fSkpLEYuQk9UVE9NLFQuSEFMRixULkhBTEY7Y29uc3QgY2U9e1BBR0VfTk86IntwYWdlTm99IixQQUdFX0NPVU5UOiJ7cGFnZUNvdW50fSJ9O0QuQ0VOVEVSLGNlLlBBR0VfTk8sSS5BUkFCSUMsRi5CT1RUT00sSS5BUkFCSUM7dmFyIHk7KGZ1bmN0aW9uKGUpe2UuUEFHRT0icGFnZSIsZS5DT05USU5VSVRZPSJjb250aW51aXR5In0pKHl8fCh5PXt9KSkseS5DT05USU5VSVRZO2Z1bmN0aW9uIHVlKGUscyl7Y29uc3QgRT1PYmplY3Qua2V5cyhlKSxBPU9iamVjdC5rZXlzKHMpO2lmKEUubGVuZ3RoIT09QS5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBSPTA7UjxFLmxlbmd0aDtSKyspe2NvbnN0IGE9RVtSXTtpZihhIT09InZhbHVlIiYmIShhPT09Imdyb3VwSWRzIiYmQXJyYXkuaXNBcnJheShlW2FdKSYmQXJyYXkuaXNBcnJheShzW2FdKSYmbmUoZVthXSxzW2FdKSkmJmVbYV0hPT1zW2FdKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIFUoZSxzPXt9KXtjb25zdHtleHRyYVBpY2tBdHRyczpFfT1zLEE9Wy4uLnJlXTtFJiZBLnB1c2goLi4uRSk7Y29uc3QgUj17dmFsdWU6ZS52YWx1ZT09PVA/YApgOmUudmFsdWV9O3JldHVybiBBLmZvckVhY2goYT0+e2NvbnN0IHA9ZVthXTtwIT09dm9pZCAwJiYoUlthXT1wKX0pLFJ9ZnVuY3Rpb24gaChlLHM9e30pe2NvbnN0e2V4dHJhUGlja0F0dHJzOkUsaXNDbGFzc2lmeUFyZWE6QT0hMSxpc0Nsb25lOlI9ITB9PXMsYT1SP0goZSk6ZSxwPVtdO2xldCBpPTA7Zm9yKDtpPGEubGVuZ3RoOyl7bGV0IHQ9YVtpXTtpZihpPT09MCYmdC52YWx1ZT09PVAmJiF0Lmxpc3RJZCYmKCF0LnR5cGV8fHQudHlwZT09PWwuVEVYVCkpe2krKztjb250aW51ZX1pZih0LmFyZWFJZCYmdC5hcmVhKXtjb25zdCBuPXQuYXJlYUlkLHU9dC5hcmVhLGM9W107Zm9yKDtpPGEubGVuZ3RoOyl7Y29uc3Qgbz1hW2ldO2lmKG4hPT1vLmFyZWFJZCl7aS0tO2JyZWFrfWRlbGV0ZSBvLmFyZWEsZGVsZXRlIG8uYXJlYUlkLGMucHVzaChvKSxpKyt9Y29uc3Qgcj1oKGMscyk7aWYoQSl7Y29uc3Qgbz17dHlwZTpsLkFSRUEsdmFsdWU6IiIsYXJlYUlkOm4sYXJlYTp1fTtvLnZhbHVlTGlzdD1yLHQ9b31lbHNle3Auc3BsaWNlKGksMCwuLi5yKTtjb250aW51ZX19ZWxzZSBpZih0LnRpdGxlSWQmJnQubGV2ZWwpe2NvbnN0IG49dC50aXRsZUlkO2lmKG4pe2NvbnN0IHU9dC5sZXZlbCxjPXt0eXBlOmwuVElUTEUsdGl0bGU6dC50aXRsZSx0aXRsZUlkOm4sdmFsdWU6IiIsbGV2ZWw6dX0scj1bXTtmb3IoO2k8YS5sZW5ndGg7KXtjb25zdCBvPWFbaV07aWYobiE9PW8udGl0bGVJZCl7aS0tO2JyZWFrfWRlbGV0ZSBvLmxldmVsLGRlbGV0ZSBvLnRpdGxlLHIucHVzaChvKSxpKyt9Yy52YWx1ZUxpc3Q9aChyLHMpLHQ9Y319ZWxzZSBpZih0Lmxpc3RJZCYmdC5saXN0VHlwZSl7Y29uc3Qgbj10Lmxpc3RJZDtpZihuKXtjb25zdCB1PXQubGlzdFR5cGUsYz10Lmxpc3RTdHlsZSxyPXt0eXBlOmwuTElTVCx2YWx1ZToiIixsaXN0SWQ6bixsaXN0VHlwZTp1LGxpc3RTdHlsZTpjfSxvPVtdO2Zvcig7aTxhLmxlbmd0aDspe2NvbnN0IEM9YVtpXTtpZihuIT09Qy5saXN0SWQpe2ktLTticmVha31kZWxldGUgQy5saXN0VHlwZSxkZWxldGUgQy5saXN0U3R5bGUsby5wdXNoKEMpLGkrK31yLnZhbHVlTGlzdD1oKG8scyksdD1yfX1lbHNlIGlmKHQudHlwZT09PWwuVEFCTEUpe2lmKHQucGFnaW5nSWQpe2xldCBuPWkrMSx1PTA7Zm9yKDtuPGEubGVuZ3RoOyl7Y29uc3QgYz1hW25dO2lmKGMucGFnaW5nSWQ9PT10LnBhZ2luZ0lkKXQuaGVpZ2h0Kz1jLmhlaWdodCx0LnRyTGlzdC5wdXNoKC4uLmMudHJMaXN0KSxuKyssdSsrO2Vsc2UgYnJlYWt9aSs9dX1pZih0LnRyTGlzdClmb3IobGV0IG49MDtuPHQudHJMaXN0Lmxlbmd0aDtuKyspe2NvbnN0IHU9dC50ckxpc3Rbbl07ZGVsZXRlIHUuaWQ7Zm9yKGxldCBjPTA7Yzx1LnRkTGlzdC5sZW5ndGg7YysrKXtjb25zdCByPXUudGRMaXN0W2NdLG89e2NvbHNwYW46ci5jb2xzcGFuLHJvd3NwYW46ci5yb3dzcGFuLHZhbHVlOmgoci52YWx1ZSxfKE4oe30scykse2lzQ2xhc3NpZnlBcmVhOiExfSkpfTtvZS5mb3JFYWNoKEM9Pntjb25zdCBTPXJbQ107UyE9PXZvaWQgMCYmKG9bQ109Uyl9KSx1LnRkTGlzdFtjXT1vfX19ZWxzZSBpZih0LnR5cGU9PT1sLkhZUEVSTElOSyl7Y29uc3Qgbj10Lmh5cGVybGlua0lkO2lmKG4pe2NvbnN0IHU9e3R5cGU6bC5IWVBFUkxJTkssdmFsdWU6IiIsdXJsOnQudXJsfSxjPVtdO2Zvcig7aTxhLmxlbmd0aDspe2NvbnN0IHI9YVtpXTtpZihuIT09ci5oeXBlcmxpbmtJZCl7aS0tO2JyZWFrfWRlbGV0ZSByLnR5cGUsZGVsZXRlIHIudXJsLGMucHVzaChyKSxpKyt9dS52YWx1ZUxpc3Q9aChjLHMpLHQ9dX19ZWxzZSBpZih0LnR5cGU9PT1sLkRBVEUpe2NvbnN0IG49dC5kYXRlSWQ7aWYobil7Y29uc3QgdT17dHlwZTpsLkRBVEUsdmFsdWU6IiIsZGF0ZUZvcm1hdDp0LmRhdGVGb3JtYXR9LGM9W107Zm9yKDtpPGEubGVuZ3RoOyl7Y29uc3Qgcj1hW2ldO2lmKG4hPT1yLmRhdGVJZCl7aS0tO2JyZWFrfWRlbGV0ZSByLnR5cGUsZGVsZXRlIHIuZGF0ZUZvcm1hdCxjLnB1c2gociksaSsrfXUudmFsdWVMaXN0PWgoYyxzKSx0PXV9fWVsc2UgaWYodC5jb250cm9sSWQpe2NvbnN0IG49dC5jb250cm9sSWQ7aWYodC5jb250cm9sQ29tcG9uZW50PT09TC5QUkVGSVgpe2NvbnN0IHU9W107bGV0IGM9ITEscj1pO2Zvcig7cjxhLmxlbmd0aDspe2NvbnN0IG89YVtyXTtpZihuIT09by5jb250cm9sSWQpYnJlYWs7by5jb250cm9sQ29tcG9uZW50PT09TC5WQUxVRSYmKGRlbGV0ZSBvLmNvbnRyb2wsZGVsZXRlIG8uY29udHJvbElkLHUucHVzaChvKSksby5jb250cm9sQ29tcG9uZW50PT09TC5QT1NURklYJiYoYz0hMCkscisrfWlmKGMpe2NvbnN0IG89TSh0LHNlKSxDPU4oTih7fSx0LmNvbnRyb2wpLG8pLFM9XyhOKHt9LE0odCxsZSkpLHt0eXBlOmwuQ09OVFJPTCx2YWx1ZToiIixjb250cm9sOkMsY29udHJvbElkOm59KTtTLmNvbnRyb2wudmFsdWU9aCh1LHMpLHQ9VShTLHtleHRyYVBpY2tBdHRyczpFfSksaSs9ci1pLTF9fWlmKHQuY29udHJvbENvbXBvbmVudCYmKGRlbGV0ZSB0LmNvbnRyb2wsZGVsZXRlIHQuY29udHJvbElkLHQuY29udHJvbENvbXBvbmVudCE9PUwuVkFMVUUmJnQuY29udHJvbENvbXBvbmVudCE9PUwuUFJFX1RFWFQmJnQuY29udHJvbENvbXBvbmVudCE9PUwuUE9TVF9URVhUKSl7aSsrO2NvbnRpbnVlfX1jb25zdCBCPVUodCx7ZXh0cmFQaWNrQXR0cnM6RX0pO2lmKCF0LnR5cGV8fHQudHlwZT09PWwuVEVYVHx8dC50eXBlPT09bC5TVUJTQ1JJUFR8fHQudHlwZT09PWwuU1VQRVJTQ1JJUFQpZm9yKDtpPGEubGVuZ3RoOyl7Y29uc3Qgbj1hW2krMV07aWYoaSsrLG4mJnVlKEIsVShuLHtleHRyYVBpY2tBdHRyczpFfSkpKXtjb25zdCB1PW4udmFsdWU9PT1QP2AKYDpuLnZhbHVlO0IudmFsdWUrPXV9ZWxzZSBicmVha31lbHNlIGkrKztwLnB1c2goQil9cmV0dXJuIHB9b25tZXNzYWdlPWU9Pntjb25zdCBzPWUuZGF0YSx7b3B0aW9uczpFLGRhdGE6QX09cyx7ZXh0cmFQaWNrQXR0cnM6Uj1bXX09RXx8e30sYT17aGVhZGVyOmgoQS5oZWFkZXIse2V4dHJhUGlja0F0dHJzOlIsaXNDbG9uZTohMX0pLG1haW46aChBLm1haW4se2V4dHJhUGlja0F0dHJzOlIsaXNDbGFzc2lmeUFyZWE6ITAsaXNDbG9uZTohMX0pLGZvb3RlcjpoKEEuZm9vdGVyLHtleHRyYVBpY2tBdHRyczpSLGlzQ2xvbmU6ITF9KX07cG9zdE1lc3NhZ2UoYSl9fSkoKTt9KSgpOwo=";
14450
14469
  const blob = typeof window !== "undefined" && window.Blob && new Blob([atob(encodedJs)], { type: "text/javascript;charset=utf-8" });
14451
14470
  function WorkerWrapper() {
14452
14471
  const objURL = blob && (window.URL || window.webkitURL).createObjectURL(blob);
@@ -17588,7 +17607,8 @@ class Draw {
17588
17607
  });
17589
17608
  }
17590
17609
  isReadonly() {
17591
- if (this.area.getActiveAreaId()) {
17610
+ var _a;
17611
+ if ((_a = this.area.getActiveAreaInfo()) == null ? void 0 : _a.area.mode) {
17592
17612
  return this.area.isReadonly();
17593
17613
  }
17594
17614
  switch (this.mode) {
@@ -17625,6 +17645,9 @@ class Draw {
17625
17645
  isDesignMode() {
17626
17646
  return this.mode === EditorMode.DESIGN;
17627
17647
  }
17648
+ isPrintMode() {
17649
+ return this.mode === EditorMode.PRINT;
17650
+ }
17628
17651
  getOriginalWidth() {
17629
17652
  const { paperDirection, width, height } = this.options;
17630
17653
  return paperDirection === PaperDirection.VERTICAL ? width : height;
@@ -17854,12 +17877,13 @@ class Draw {
17854
17877
  }
17855
17878
  return null;
17856
17879
  }
17857
- insertElementList(payload) {
17880
+ insertElementList(payload, options = {}) {
17858
17881
  if (!payload.length || !this.range.getIsCanInput())
17859
17882
  return;
17860
17883
  const { startIndex, endIndex } = this.range.getRange();
17861
17884
  if (!~startIndex && !~endIndex)
17862
17885
  return;
17886
+ const { isSubmitHistory = true } = options;
17863
17887
  formatElementList(payload, {
17864
17888
  isHandleFirstElement: false,
17865
17889
  editorOptions: this.options
@@ -17893,7 +17917,8 @@ class Draw {
17893
17917
  if (~curIndex) {
17894
17918
  this.range.setRange(curIndex, curIndex);
17895
17919
  this.render({
17896
- curIndex
17920
+ curIndex,
17921
+ isSubmitHistory
17897
17922
  });
17898
17923
  }
17899
17924
  }
@@ -17905,7 +17930,7 @@ class Draw {
17905
17930
  editorOptions: this.options
17906
17931
  });
17907
17932
  let curIndex;
17908
- const { isPrepend } = options;
17933
+ const { isPrepend, isSubmitHistory = true } = options;
17909
17934
  if (isPrepend) {
17910
17935
  this.elementList.splice(1, 0, ...elementList);
17911
17936
  curIndex = elementList.length;
@@ -17915,12 +17940,13 @@ class Draw {
17915
17940
  }
17916
17941
  this.range.setRange(curIndex, curIndex);
17917
17942
  this.render({
17918
- curIndex
17943
+ curIndex,
17944
+ isSubmitHistory
17919
17945
  });
17920
17946
  }
17921
- spliceElementList(elementList, start, deleteCount, items) {
17947
+ spliceElementList(elementList, start, deleteCount, items, options) {
17922
17948
  var _a, _b, _c, _d, _e, _f;
17923
- const isDesignMode = this.isDesignMode();
17949
+ const { isIgnoreDeletedRule = false } = options || {};
17924
17950
  if (deleteCount > 0) {
17925
17951
  const endIndex = start + deleteCount;
17926
17952
  const endElement = elementList[endIndex];
@@ -17938,12 +17964,12 @@ class Draw {
17938
17964
  startIndex++;
17939
17965
  }
17940
17966
  }
17941
- if (!this.control.getIsRangeWithinControl()) {
17967
+ if (!isIgnoreDeletedRule && !this.isDesignMode() && !this.control.getIsRangeWithinControl()) {
17942
17968
  const tdDeletable = (_b = this.getTd()) == null ? void 0 : _b.deletable;
17943
17969
  let deleteIndex = endIndex - 1;
17944
17970
  while (deleteIndex >= start) {
17945
17971
  const deleteElement = elementList[deleteIndex];
17946
- 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 && (((_f = deleteElement == null ? void 0 : deleteElement.area) == null ? void 0 : _f.deletable) !== false || (deleteElement == null ? void 0 : deleteElement.areaIndex) !== 0)) {
17972
+ 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)) {
17947
17973
  elementList.splice(deleteIndex, 1);
17948
17974
  }
17949
17975
  deleteIndex--;
@@ -18856,22 +18882,25 @@ class Draw {
18856
18882
  return pageRowList;
18857
18883
  }
18858
18884
  _drawHighlight(ctx, payload) {
18859
- var _a;
18860
- const { control: { activeBackgroundColor } } = this.options;
18885
+ var _a, _b;
18886
+ const { control: { activeBackgroundColor, disabledBackgroundColor } } = this.options;
18861
18887
  const { rowList, positionList } = payload;
18888
+ const isPrintMode = this.isPrintMode();
18862
18889
  const activeControlElement = (_a = this.control.getActiveControl()) == null ? void 0 : _a.getElement();
18863
18890
  for (let i = 0; i < rowList.length; i++) {
18864
18891
  const curRow = rowList[i];
18865
18892
  for (let j = 0; j < curRow.elementList.length; j++) {
18866
18893
  const element = curRow.elementList[j];
18867
18894
  const preElement = curRow.elementList[j - 1];
18868
- if (element.highlight || activeBackgroundColor && activeControlElement && element.controlId === activeControlElement.controlId && !this.control.getIsRangeInPostfix()) {
18895
+ const isActiveControlHighlight = !isPrintMode && activeBackgroundColor && activeControlElement && element.controlId === activeControlElement.controlId && !this.control.getIsRangeInPostfix();
18896
+ const isDisabledControlHighlight = !isPrintMode && disabledBackgroundColor && ((_b = element.control) == null ? void 0 : _b.disabled);
18897
+ if (element.highlight || isActiveControlHighlight || isDisabledControlHighlight) {
18869
18898
  if (preElement && preElement.highlight && preElement.highlight !== element.highlight) {
18870
18899
  this.highlight.render(ctx);
18871
18900
  }
18872
18901
  const { coordinate: { leftTop: [x, y] } } = positionList[curRow.startIndex + j];
18873
18902
  const offsetX = element.left || 0;
18874
- this.highlight.recordFillInfo(ctx, x - offsetX, y, element.metrics.width + offsetX, curRow.height, element.highlight || activeBackgroundColor);
18903
+ this.highlight.recordFillInfo(ctx, x - offsetX, y, element.metrics.width + offsetX, curRow.height, element.highlight || (isActiveControlHighlight ? activeBackgroundColor : "") || (isDisabledControlHighlight ? disabledBackgroundColor : ""));
18875
18904
  } else if (preElement == null ? void 0 : preElement.highlight) {
18876
18905
  this.highlight.render(ctx);
18877
18906
  }
@@ -19885,8 +19914,9 @@ class CommandAdapt {
19885
19914
  return;
19886
19915
  this.canvasEvent.applyPainterStyle();
19887
19916
  }
19888
- format() {
19889
- const isDisabled = this.draw.isReadonly() || this.draw.isDisabled();
19917
+ format(options) {
19918
+ const { isIgnoreDisabledRule = false } = options || {};
19919
+ const isDisabled = !isIgnoreDisabledRule && (this.draw.isReadonly() || this.draw.isDisabled());
19890
19920
  if (isDisabled)
19891
19921
  return;
19892
19922
  const selection = this.range.getSelectionElementList();
@@ -19913,8 +19943,9 @@ class CommandAdapt {
19913
19943
  });
19914
19944
  this.draw.render(renderOption);
19915
19945
  }
19916
- font(payload) {
19917
- const isDisabled = this.draw.isReadonly() || this.draw.isDisabled();
19946
+ font(payload, options) {
19947
+ const { isIgnoreDisabledRule = false } = options || {};
19948
+ const isDisabled = !isIgnoreDisabledRule && (this.draw.isReadonly() || this.draw.isDisabled());
19918
19949
  if (isDisabled)
19919
19950
  return;
19920
19951
  const selection = this.range.getSelectionElementList();
@@ -19943,13 +19974,14 @@ class CommandAdapt {
19943
19974
  });
19944
19975
  }
19945
19976
  }
19946
- size(payload) {
19977
+ size(payload, options) {
19978
+ const { isIgnoreDisabledRule = false } = options || {};
19979
+ const isDisabled = !isIgnoreDisabledRule && (this.draw.isReadonly() || this.draw.isDisabled());
19980
+ if (isDisabled)
19981
+ return;
19947
19982
  const { minSize, maxSize, defaultSize } = this.options;
19948
19983
  if (payload < minSize || payload > maxSize)
19949
19984
  return;
19950
- const isDisabled = this.draw.isReadonly() || this.draw.isDisabled();
19951
- if (isDisabled)
19952
- return;
19953
19985
  let renderOption = {};
19954
19986
  let changeElementList = [];
19955
19987
  const selection = this.range.getTextLikeSelectionElementList();
@@ -19988,8 +20020,9 @@ class CommandAdapt {
19988
20020
  this.draw.render(renderOption);
19989
20021
  }
19990
20022
  }
19991
- sizeAdd() {
19992
- const isDisabled = this.draw.isReadonly() || this.draw.isDisabled();
20023
+ sizeAdd(options) {
20024
+ const { isIgnoreDisabledRule = false } = options || {};
20025
+ const isDisabled = !isIgnoreDisabledRule && (this.draw.isReadonly() || this.draw.isDisabled());
19993
20026
  if (isDisabled)
19994
20027
  return;
19995
20028
  const { defaultSize, maxSize } = this.options;
@@ -20039,8 +20072,9 @@ class CommandAdapt {
20039
20072
  this.draw.render(renderOption);
20040
20073
  }
20041
20074
  }
20042
- sizeMinus() {
20043
- const isDisabled = this.draw.isReadonly() || this.draw.isDisabled();
20075
+ sizeMinus(options) {
20076
+ const { isIgnoreDisabledRule = false } = options || {};
20077
+ const isDisabled = !isIgnoreDisabledRule && (this.draw.isReadonly() || this.draw.isDisabled());
20044
20078
  if (isDisabled)
20045
20079
  return;
20046
20080
  const { defaultSize, minSize } = this.options;
@@ -20090,9 +20124,10 @@ class CommandAdapt {
20090
20124
  this.draw.render(renderOption);
20091
20125
  }
20092
20126
  }
20093
- bold() {
20127
+ bold(options) {
20094
20128
  var _a;
20095
- const isDisabled = this.draw.isReadonly() || this.draw.isDisabled();
20129
+ const { isIgnoreDisabledRule = false } = options || {};
20130
+ const isDisabled = !isIgnoreDisabledRule && (this.draw.isReadonly() || this.draw.isDisabled());
20096
20131
  if (isDisabled)
20097
20132
  return;
20098
20133
  const selection = this.range.getSelectionElementList();
@@ -20122,9 +20157,10 @@ class CommandAdapt {
20122
20157
  });
20123
20158
  }
20124
20159
  }
20125
- italic() {
20160
+ italic(options) {
20126
20161
  var _a;
20127
- const isDisabled = this.draw.isReadonly() || this.draw.isDisabled();
20162
+ const { isIgnoreDisabledRule = false } = options || {};
20163
+ const isDisabled = !isIgnoreDisabledRule && (this.draw.isReadonly() || this.draw.isDisabled());
20128
20164
  if (isDisabled)
20129
20165
  return;
20130
20166
  const selection = this.range.getSelectionElementList();
@@ -20154,9 +20190,10 @@ class CommandAdapt {
20154
20190
  });
20155
20191
  }
20156
20192
  }
20157
- underline(textDecoration) {
20193
+ underline(textDecoration, options) {
20158
20194
  var _a;
20159
- const isDisabled = this.draw.isReadonly() || this.draw.isDisabled();
20195
+ const { isIgnoreDisabledRule = false } = options || {};
20196
+ const isDisabled = !isIgnoreDisabledRule && (this.draw.isReadonly() || this.draw.isDisabled());
20160
20197
  if (isDisabled)
20161
20198
  return;
20162
20199
  const selection = this.range.getSelectionElementList();
@@ -20194,9 +20231,10 @@ class CommandAdapt {
20194
20231
  });
20195
20232
  }
20196
20233
  }
20197
- strikeout() {
20234
+ strikeout(options) {
20198
20235
  var _a;
20199
- const isDisabled = this.draw.isReadonly() || this.draw.isDisabled();
20236
+ const { isIgnoreDisabledRule = false } = options || {};
20237
+ const isDisabled = !isIgnoreDisabledRule && (this.draw.isReadonly() || this.draw.isDisabled());
20200
20238
  if (isDisabled)
20201
20239
  return;
20202
20240
  const selection = this.range.getSelectionElementList();
@@ -20229,8 +20267,9 @@ class CommandAdapt {
20229
20267
  });
20230
20268
  }
20231
20269
  }
20232
- superscript() {
20233
- const isDisabled = this.draw.isReadonly() || this.draw.isDisabled();
20270
+ superscript(options) {
20271
+ const { isIgnoreDisabledRule = false } = options || {};
20272
+ const isDisabled = !isIgnoreDisabledRule && (this.draw.isReadonly() || this.draw.isDisabled());
20234
20273
  if (isDisabled)
20235
20274
  return;
20236
20275
  const selection = this.range.getSelectionElementList();
@@ -20251,8 +20290,9 @@ class CommandAdapt {
20251
20290
  });
20252
20291
  this.draw.render({ isSetCursor: false });
20253
20292
  }
20254
- subscript() {
20255
- const isDisabled = this.draw.isReadonly() || this.draw.isDisabled();
20293
+ subscript(options) {
20294
+ const { isIgnoreDisabledRule = false } = options || {};
20295
+ const isDisabled = !isIgnoreDisabledRule && (this.draw.isReadonly() || this.draw.isDisabled());
20256
20296
  if (isDisabled)
20257
20297
  return;
20258
20298
  const selection = this.range.getSelectionElementList();
@@ -20273,8 +20313,9 @@ class CommandAdapt {
20273
20313
  });
20274
20314
  this.draw.render({ isSetCursor: false });
20275
20315
  }
20276
- color(payload) {
20277
- const isDisabled = this.draw.isReadonly() || this.draw.isDisabled();
20316
+ color(payload, options) {
20317
+ const { isIgnoreDisabledRule = false } = options || {};
20318
+ const isDisabled = !isIgnoreDisabledRule && (this.draw.isReadonly() || this.draw.isDisabled());
20278
20319
  if (isDisabled)
20279
20320
  return;
20280
20321
  const selection = this.range.getSelectionElementList();
@@ -20314,8 +20355,9 @@ class CommandAdapt {
20314
20355
  });
20315
20356
  }
20316
20357
  }
20317
- highlight(payload) {
20318
- const isDisabled = this.draw.isReadonly() || this.draw.isDisabled();
20358
+ highlight(payload, options) {
20359
+ const { isIgnoreDisabledRule = false } = options || {};
20360
+ const isDisabled = !isIgnoreDisabledRule && (this.draw.isReadonly() || this.draw.isDisabled());
20319
20361
  if (isDisabled)
20320
20362
  return;
20321
20363
  const selection = this.range.getSelectionElementList();
@@ -20933,10 +20975,10 @@ class CommandAdapt {
20933
20975
  const selectionElementList = zipElementList(this.range.getSelectionElementList() || []);
20934
20976
  const elementList = this.draw.getElementList();
20935
20977
  const startElement = pickElementAttr(elementList[isCollapsed ? startIndex : startIndex + 1], {
20936
- extraPickAttrs: ["id"]
20978
+ extraPickAttrs: ["id", "controlComponent"]
20937
20979
  });
20938
20980
  const endElement = pickElementAttr(elementList[endIndex], {
20939
- extraPickAttrs: ["id"]
20981
+ extraPickAttrs: ["id", "controlComponent"]
20940
20982
  });
20941
20983
  const positionList = this.position.getPositionList();
20942
20984
  const startPosition = positionList[startIndex];
@@ -21138,7 +21180,7 @@ class CommandAdapt {
21138
21180
  isBreakWhenWrap: true,
21139
21181
  editorOptions: this.options
21140
21182
  });
21141
- this.draw.insertElementList(cloneElementList);
21183
+ this.draw.insertElementList(cloneElementList, options);
21142
21184
  }
21143
21185
  appendElementList(elementList, options) {
21144
21186
  if (!elementList.length)
@@ -21492,9 +21534,8 @@ class CommandAdapt {
21492
21534
  return this.draw.getControl().getList();
21493
21535
  }
21494
21536
  locationControl(controlId, options) {
21495
- const isLocationAfter = (options == null ? void 0 : options.position) === LocationPosition.AFTER;
21496
21537
  function location(elementList, zone2) {
21497
- var _a, _b;
21538
+ var _a, _b, _c;
21498
21539
  let i = 0;
21499
21540
  while (i < elementList.length) {
21500
21541
  const element = elementList[i];
@@ -21525,13 +21566,19 @@ class CommandAdapt {
21525
21566
  if ((element == null ? void 0 : element.controlId) !== controlId)
21526
21567
  continue;
21527
21568
  let curIndex = i - 1;
21528
- if (isLocationAfter) {
21569
+ if ((options == null ? void 0 : options.position) === LocationPosition.OUTER_AFTER) {
21570
+ if (!(element.controlComponent === ControlComponent.POSTFIX && ((_a = elementList[i + 1]) == null ? void 0 : _a.controlComponent) !== ControlComponent.POST_TEXT)) {
21571
+ continue;
21572
+ }
21573
+ } else if ((options == null ? void 0 : options.position) === LocationPosition.OUTER_BEFORE) {
21574
+ curIndex -= 1;
21575
+ } else if ((options == null ? void 0 : options.position) === LocationPosition.AFTER) {
21529
21576
  curIndex -= 1;
21530
21577
  if (element.controlComponent !== ControlComponent.PLACEHOLDER && element.controlComponent !== ControlComponent.POSTFIX && element.controlComponent !== ControlComponent.POST_TEXT) {
21531
21578
  continue;
21532
21579
  }
21533
21580
  } else {
21534
- 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) {
21581
+ 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) {
21535
21582
  continue;
21536
21583
  }
21537
21584
  }
@@ -22944,5 +22991,5 @@ class Editor {
22944
22991
  this.use = plugin.use.bind(plugin);
22945
22992
  }
22946
22993
  }
22947
- export { AreaMode, BackgroundRepeat, BackgroundSize, BlockType, Command, ControlIndentation, ControlState, ControlType, EDITOR_CLIPBOARD, EDITOR_COMPONENT, Editor, EditorComponent, EditorMode, EditorZone, ElementType, FlexDirection, INTERNAL_CONTEXT_MENU_KEY, ImageDisplay, KeyMap, LETTER_CLASS, LineNumberType, ListStyle, ListType, LocationPosition, MaxHeightRatio, NumberType, PageMode, PaperDirection, RenderMode, RowFlex, TableBorder, TdBorder, TdSlash, TextDecorationStyle, TitleLevel, VerticalAlign, WordBreak, createDomFromElementList, Editor as default, getElementListByHTML, getTextFromElementList, splitText };
22994
+ export { AreaMode, BackgroundRepeat, BackgroundSize, BlockType, Command, ControlComponent, ControlIndentation, ControlState, ControlType, EDITOR_CLIPBOARD, EDITOR_COMPONENT, Editor, EditorComponent, EditorMode, EditorZone, ElementType, FlexDirection, INTERNAL_CONTEXT_MENU_KEY, ImageDisplay, KeyMap, LETTER_CLASS, LineNumberType, ListStyle, ListType, LocationPosition, MaxHeightRatio, NumberType, PageMode, PaperDirection, RenderMode, RowFlex, TableBorder, TdBorder, TdSlash, TextDecorationStyle, TitleLevel, VerticalAlign, WordBreak, createDomFromElementList, Editor as default, getElementListByHTML, getTextFromElementList, splitText };
22948
22995
  //# sourceMappingURL=canvas-editor.es.js.map