@hufe921/canvas-editor 0.9.78 → 0.9.80

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.
@@ -23,7 +23,7 @@ var __publicField = (obj, key, value) => {
23
23
  return value;
24
24
  };
25
25
  var index = "";
26
- const version = "0.9.78";
26
+ const version = "0.9.80";
27
27
  var MaxHeightRatio;
28
28
  (function(MaxHeightRatio2) {
29
29
  MaxHeightRatio2["HALF"] = "half";
@@ -177,19 +177,27 @@ function getUUID() {
177
177
  }
178
178
  function splitText(text) {
179
179
  const data2 = [];
180
- const symbolMap = new Map();
181
- for (const match of text.matchAll(UNICODE_SYMBOL_REG)) {
182
- symbolMap.set(match.index, match[0]);
183
- }
184
- let t = 0;
185
- while (t < text.length) {
186
- const symbol = symbolMap.get(t);
187
- if (symbol) {
188
- data2.push(symbol);
189
- t += symbol.length;
190
- } else {
191
- data2.push(text[t]);
192
- t++;
180
+ if (Intl.Segmenter) {
181
+ const segmenter = new Intl.Segmenter();
182
+ const segments = segmenter.segment(text);
183
+ for (const { segment } of segments) {
184
+ data2.push(segment);
185
+ }
186
+ } else {
187
+ const symbolMap = new Map();
188
+ for (const match of text.matchAll(UNICODE_SYMBOL_REG)) {
189
+ symbolMap.set(match.index, match[0]);
190
+ }
191
+ let t = 0;
192
+ while (t < text.length) {
193
+ const symbol = symbolMap.get(t);
194
+ if (symbol) {
195
+ data2.push(symbol);
196
+ t += symbol.length;
197
+ } else {
198
+ data2.push(text[t]);
199
+ t++;
200
+ }
193
201
  }
194
202
  }
195
203
  return data2;
@@ -421,7 +429,6 @@ const EDITOR_ELEMENT_COPY_ATTR = [
421
429
  "dateId",
422
430
  "dateFormat",
423
431
  "groupIds",
424
- "rowFlex",
425
432
  "rowMargin",
426
433
  "textDecoration"
427
434
  ];
@@ -460,7 +467,8 @@ const EDITOR_ELEMENT_ZIP_ATTR = [
460
467
  "imgDisplay",
461
468
  "imgFloatPosition",
462
469
  "textDecoration",
463
- "extension"
470
+ "extension",
471
+ "externalId"
464
472
  ];
465
473
  const TABLE_TD_ZIP_ATTR = [
466
474
  "verticalAlign",
@@ -499,7 +507,8 @@ const CONTROL_STYLE_ATTR = [
499
507
  const EDITOR_ELEMENT_CONTEXT_ATTR = [
500
508
  ...TABLE_CONTEXT_ATTR,
501
509
  ...TITLE_CONTEXT_ATTR,
502
- ...LIST_CONTEXT_ATTR
510
+ ...LIST_CONTEXT_ATTR,
511
+ ...EDITOR_ROW_ATTR
503
512
  ];
504
513
  const TEXTLIKE_ELEMENT_TYPE = [
505
514
  ElementType.TEXT,
@@ -513,7 +522,7 @@ const IMAGE_ELEMENT_TYPE = [
513
522
  ElementType.IMAGE,
514
523
  ElementType.LATEX
515
524
  ];
516
- const INLINE_ELEMENT_TYPE = [
525
+ const BLOCK_ELEMENT_TYPE = [
517
526
  ElementType.BLOCK,
518
527
  ElementType.PAGE_BREAK,
519
528
  ElementType.SEPARATOR,
@@ -3726,6 +3735,7 @@ var ControlType;
3726
3735
  ControlType2["SELECT"] = "select";
3727
3736
  ControlType2["CHECKBOX"] = "checkbox";
3728
3737
  ControlType2["RADIO"] = "radio";
3738
+ ControlType2["DATE"] = "date";
3729
3739
  })(ControlType || (ControlType = {}));
3730
3740
  var ControlComponent;
3731
3741
  (function(ControlComponent2) {
@@ -4235,11 +4245,11 @@ function zipElementList(payload) {
4235
4245
  if (controlId) {
4236
4246
  const controlDefaultStyle = pickObject(element, CONTROL_STYLE_ATTR);
4237
4247
  const control = __spreadValues(__spreadValues({}, element.control), controlDefaultStyle);
4238
- const controlElement = {
4248
+ const controlElement = __spreadProps(__spreadValues({}, pickObject(element, EDITOR_ROW_ATTR)), {
4239
4249
  type: ElementType.CONTROL,
4240
4250
  value: "",
4241
4251
  control
4242
- };
4252
+ });
4243
4253
  const valueList = [];
4244
4254
  while (e < elementList.length) {
4245
4255
  const controlE = elementList[e];
@@ -4277,7 +4287,7 @@ function zipElementList(payload) {
4277
4287
  }
4278
4288
  return zipElementListData;
4279
4289
  }
4280
- function getElementRowFlex(node) {
4290
+ function convertTextAlignToRowFlex(node) {
4281
4291
  const textAlign = window.getComputedStyle(node).textAlign;
4282
4292
  switch (textAlign) {
4283
4293
  case "left":
@@ -4296,6 +4306,24 @@ function getElementRowFlex(node) {
4296
4306
  return RowFlex.LEFT;
4297
4307
  }
4298
4308
  }
4309
+ function convertRowFlexToTextAlign(rowFlex) {
4310
+ return rowFlex === RowFlex.ALIGNMENT ? "justify" : rowFlex;
4311
+ }
4312
+ function convertRowFlexToJustifyContent(rowFlex) {
4313
+ switch (rowFlex) {
4314
+ case RowFlex.LEFT:
4315
+ return "flex-start";
4316
+ case RowFlex.CENTER:
4317
+ return "center";
4318
+ case RowFlex.RIGHT:
4319
+ return "flex-end";
4320
+ case RowFlex.ALIGNMENT:
4321
+ case RowFlex.JUSTIFY:
4322
+ return "space-between";
4323
+ default:
4324
+ return "flex-start";
4325
+ }
4326
+ }
4299
4327
  function isTextLikeElement(element) {
4300
4328
  return !element.type || TEXTLIKE_ELEMENT_TYPE.includes(element.type);
4301
4329
  }
@@ -4319,9 +4347,10 @@ function formatElementContext(sourceElementList, formatElementList2, anchorIndex
4319
4347
  isBreakWarped = true;
4320
4348
  }
4321
4349
  if (isBreakWarped || !copyElement.listId && targetElement.type === ElementType.LIST) {
4322
- cloneProperty(TABLE_CONTEXT_ATTR, copyElement, targetElement);
4350
+ const cloneAttr = [...TABLE_CONTEXT_ATTR, ...EDITOR_ROW_ATTR];
4351
+ cloneProperty(cloneAttr, copyElement, targetElement);
4323
4352
  (_a = targetElement.valueList) == null ? void 0 : _a.forEach((valueItem) => {
4324
- cloneProperty(TABLE_CONTEXT_ATTR, copyElement, valueItem);
4353
+ cloneProperty(cloneAttr, copyElement, valueItem);
4325
4354
  });
4326
4355
  continue;
4327
4356
  }
@@ -4337,14 +4366,11 @@ function convertElementToDom(element, options) {
4337
4366
  tagName = "sup";
4338
4367
  } else if (element.type === ElementType.SUBSCRIPT) {
4339
4368
  tagName = "sub";
4340
- } else if (element.rowFlex === RowFlex.CENTER || element.rowFlex === RowFlex.RIGHT) {
4341
- tagName = "p";
4342
4369
  }
4343
4370
  const dom = document.createElement(tagName);
4344
4371
  dom.style.fontFamily = element.font || options.defaultFont;
4345
4372
  if (element.rowFlex) {
4346
- const isAlignment = element.rowFlex === RowFlex.ALIGNMENT;
4347
- dom.style.textAlign = isAlignment ? "justify" : element.rowFlex;
4373
+ dom.style.textAlign = convertRowFlexToTextAlign(element.rowFlex);
4348
4374
  }
4349
4375
  if (element.color) {
4350
4376
  dom.style.color = element.color;
@@ -4399,10 +4425,40 @@ function splitListElement(elementList) {
4399
4425
  }
4400
4426
  return listElementListMap;
4401
4427
  }
4428
+ function groupElementListByRowFlex(elementList) {
4429
+ var _a;
4430
+ const elementListGroupList = [];
4431
+ if (!elementList.length)
4432
+ return elementListGroupList;
4433
+ let currentRowFlex = ((_a = elementList[0]) == null ? void 0 : _a.rowFlex) || null;
4434
+ elementListGroupList.push({
4435
+ rowFlex: currentRowFlex,
4436
+ data: [elementList[0]]
4437
+ });
4438
+ for (let e = 1; e < elementList.length; e++) {
4439
+ const element = elementList[e];
4440
+ const rowFlex = element.rowFlex || null;
4441
+ if (currentRowFlex === rowFlex && !getIsBlockElement(element) && !getIsBlockElement(elementList[e - 1])) {
4442
+ const lastElementListGroup = elementListGroupList[elementListGroupList.length - 1];
4443
+ lastElementListGroup.data.push(element);
4444
+ } else {
4445
+ elementListGroupList.push({
4446
+ rowFlex,
4447
+ data: [element]
4448
+ });
4449
+ currentRowFlex = rowFlex;
4450
+ }
4451
+ }
4452
+ for (let g = 0; g < elementListGroupList.length; g++) {
4453
+ const elementListGroup = elementListGroupList[g];
4454
+ elementListGroup.data = zipElementList(elementListGroup.data);
4455
+ }
4456
+ return elementListGroupList;
4457
+ }
4402
4458
  function createDomFromElementList(elementList, options) {
4403
4459
  function buildDom(payload) {
4404
4460
  var _a, _b, _c, _d, _e, _f, _g, _h, _i;
4405
- const clipboardDom = document.createElement("div");
4461
+ const clipboardDom2 = document.createElement("div");
4406
4462
  for (let e = 0; e < payload.length; e++) {
4407
4463
  const element = payload[e];
4408
4464
  if (element.type === ElementType.TABLE) {
@@ -4452,7 +4508,7 @@ function createDomFromElementList(elementList, options) {
4452
4508
  if ((_d = td.borderTypes) == null ? void 0 : _d.includes(TdBorder.LEFT)) {
4453
4509
  tdDom.style.borderLeft = borderStyle;
4454
4510
  }
4455
- const childDom = buildDom(zipElementList(td.value));
4511
+ const childDom = createDomFromElementList(td.value, options);
4456
4512
  tdDom.innerHTML = childDom.innerHTML;
4457
4513
  if (td.backgroundColor) {
4458
4514
  tdDom.style.backgroundColor = td.backgroundColor;
@@ -4461,19 +4517,19 @@ function createDomFromElementList(elementList, options) {
4461
4517
  }
4462
4518
  tableDom.append(trDom);
4463
4519
  }
4464
- clipboardDom.append(tableDom);
4520
+ clipboardDom2.append(tableDom);
4465
4521
  } else if (element.type === ElementType.HYPERLINK) {
4466
4522
  const a = document.createElement("a");
4467
4523
  a.innerText = element.valueList.map((v) => v.value).join("");
4468
4524
  if (element.url) {
4469
4525
  a.href = element.url;
4470
4526
  }
4471
- clipboardDom.append(a);
4527
+ clipboardDom2.append(a);
4472
4528
  } else if (element.type === ElementType.TITLE) {
4473
4529
  const h = document.createElement(`h${titleOrderNumberMapping[element.level]}`);
4474
- const childDom = buildDom(zipElementList(element.valueList));
4530
+ const childDom = buildDom(element.valueList);
4475
4531
  h.innerHTML = childDom.innerHTML;
4476
- clipboardDom.append(h);
4532
+ clipboardDom2.append(h);
4477
4533
  } else if (element.type === ElementType.LIST) {
4478
4534
  const list = document.createElement(listTypeElementMapping[element.listType]);
4479
4535
  if (element.listStyle) {
@@ -4487,7 +4543,7 @@ function createDomFromElementList(elementList, options) {
4487
4543
  li.innerHTML = childDom.innerHTML;
4488
4544
  list.append(li);
4489
4545
  });
4490
- clipboardDom.append(list);
4546
+ clipboardDom2.append(list);
4491
4547
  } else if (element.type === ElementType.IMAGE) {
4492
4548
  const img = document.createElement("img");
4493
4549
  if (element.value) {
@@ -4495,33 +4551,33 @@ function createDomFromElementList(elementList, options) {
4495
4551
  img.width = element.width;
4496
4552
  img.height = element.height;
4497
4553
  }
4498
- clipboardDom.append(img);
4554
+ clipboardDom2.append(img);
4499
4555
  } else if (element.type === ElementType.SEPARATOR) {
4500
4556
  const hr = document.createElement("hr");
4501
- clipboardDom.append(hr);
4557
+ clipboardDom2.append(hr);
4502
4558
  } else if (element.type === ElementType.CHECKBOX) {
4503
4559
  const checkbox = document.createElement("input");
4504
4560
  checkbox.type = "checkbox";
4505
4561
  if ((_e = element.checkbox) == null ? void 0 : _e.value) {
4506
4562
  checkbox.setAttribute("checked", "true");
4507
4563
  }
4508
- clipboardDom.append(checkbox);
4564
+ clipboardDom2.append(checkbox);
4509
4565
  } else if (element.type === ElementType.RADIO) {
4510
4566
  const radio = document.createElement("input");
4511
4567
  radio.type = "radio";
4512
4568
  if ((_f = element.radio) == null ? void 0 : _f.value) {
4513
4569
  radio.setAttribute("checked", "true");
4514
4570
  }
4515
- clipboardDom.append(radio);
4571
+ clipboardDom2.append(radio);
4516
4572
  } else if (element.type === ElementType.TAB) {
4517
4573
  const tab2 = document.createElement("span");
4518
4574
  tab2.innerHTML = `${NON_BREAKING_SPACE}${NON_BREAKING_SPACE}`;
4519
- clipboardDom.append(tab2);
4575
+ clipboardDom2.append(tab2);
4520
4576
  } else if (element.type === ElementType.CONTROL) {
4521
4577
  const controlElement = document.createElement("span");
4522
- const childDom = buildDom(zipElementList(((_g = element.control) == null ? void 0 : _g.value) || []));
4578
+ const childDom = buildDom(((_g = element.control) == null ? void 0 : _g.value) || []);
4523
4579
  controlElement.innerHTML = childDom.innerHTML;
4524
- clipboardDom.append(controlElement);
4580
+ clipboardDom2.append(controlElement);
4525
4581
  } else if (!element.type || element.type === ElementType.LATEX || TEXTLIKE_ELEMENT_TYPE.includes(element.type)) {
4526
4582
  let text = "";
4527
4583
  if (element.type === ElementType.DATE) {
@@ -4535,23 +4591,44 @@ function createDomFromElementList(elementList, options) {
4535
4591
  if (((_i = payload[e - 1]) == null ? void 0 : _i.type) === ElementType.TITLE) {
4536
4592
  text = text.replace(/^\n/, "");
4537
4593
  }
4538
- if (dom.tagName === "P") {
4539
- text = text.replace(/\n$/, "");
4540
- }
4541
4594
  dom.innerText = text.replace(new RegExp(`${ZERO}`, "g"), "\n");
4542
- clipboardDom.append(dom);
4595
+ clipboardDom2.append(dom);
4596
+ }
4597
+ }
4598
+ return clipboardDom2;
4599
+ }
4600
+ const clipboardDom = document.createElement("div");
4601
+ const groupElementList = groupElementListByRowFlex(elementList);
4602
+ for (let g = 0; g < groupElementList.length; g++) {
4603
+ const elementGroupRowFlex = groupElementList[g];
4604
+ const isDefaultRowFlex = !elementGroupRowFlex.rowFlex || elementGroupRowFlex.rowFlex === RowFlex.LEFT;
4605
+ const rowFlexDom = document.createElement("div");
4606
+ if (!isDefaultRowFlex) {
4607
+ const firstElement = elementGroupRowFlex.data[0];
4608
+ if (getIsBlockElement(firstElement)) {
4609
+ rowFlexDom.style.display = "flex";
4610
+ rowFlexDom.style.justifyContent = convertRowFlexToJustifyContent(firstElement.rowFlex);
4611
+ } else {
4612
+ rowFlexDom.style.textAlign = convertRowFlexToTextAlign(elementGroupRowFlex.rowFlex);
4543
4613
  }
4544
4614
  }
4545
- return clipboardDom;
4615
+ rowFlexDom.innerHTML = buildDom(elementGroupRowFlex.data).innerHTML;
4616
+ if (!isDefaultRowFlex) {
4617
+ clipboardDom.append(rowFlexDom);
4618
+ } else {
4619
+ rowFlexDom.childNodes.forEach((child) => {
4620
+ clipboardDom.append(child.cloneNode(true));
4621
+ });
4622
+ }
4546
4623
  }
4547
- return buildDom(zipElementList(elementList));
4624
+ return clipboardDom;
4548
4625
  }
4549
4626
  function convertTextNodeToElement(textNode) {
4550
4627
  if (!textNode || textNode.nodeType !== 3)
4551
4628
  return null;
4552
4629
  const parentNode = textNode.parentNode;
4553
4630
  const anchorNode = parentNode.nodeName === "FONT" ? parentNode.parentNode : parentNode;
4554
- const rowFlex = getElementRowFlex(anchorNode);
4631
+ const rowFlex = convertTextAlignToRowFlex(anchorNode);
4555
4632
  const value = textNode.textContent;
4556
4633
  const style = window.getComputedStyle(anchorNode);
4557
4634
  if (!value || anchorNode.nodeName === "STYLE")
@@ -4820,8 +4897,8 @@ function getSlimCloneElementList(elementList) {
4820
4897
  "style"
4821
4898
  ]);
4822
4899
  }
4823
- function getIsInlineElement(element) {
4824
- return !!(element == null ? void 0 : element.type) && (INLINE_ELEMENT_TYPE.includes(element.type) || element.imgDisplay === ImageDisplay.INLINE);
4900
+ function getIsBlockElement(element) {
4901
+ return !!(element == null ? void 0 : element.type) && (BLOCK_ELEMENT_TYPE.includes(element.type) || element.imgDisplay === ImageDisplay.INLINE);
4825
4902
  }
4826
4903
  function setClipboardData(data2) {
4827
4904
  localStorage.setItem(EDITOR_CLIPBOARD, JSON.stringify({
@@ -5204,8 +5281,10 @@ class Cursor {
5204
5281
  const cursorLeft = hitLineStartIndex ? leftTop[0] : rightTop[0];
5205
5282
  agentCursorDom.style.left = `${cursorLeft}px`;
5206
5283
  agentCursorDom.style.top = `${cursorTop + cursorHeight - defaultOffsetHeight}px`;
5207
- if (!isShow)
5284
+ if (!isShow) {
5285
+ this.recoveryCursor();
5208
5286
  return;
5287
+ }
5209
5288
  const isReadonly = this.draw.isReadonly();
5210
5289
  this.cursorDom.style.width = `${width * scale}px`;
5211
5290
  this.cursorDom.style.backgroundColor = color;
@@ -6008,13 +6087,21 @@ function del(evt, host) {
6008
6087
  if (!cursorPosition)
6009
6088
  return;
6010
6089
  const { index: index2 } = cursorPosition;
6011
- const isCollapsed = rangeManager.getIsCollapsed();
6012
- if (!isCollapsed) {
6013
- draw.spliceElementList(elementList, startIndex + 1, endIndex - startIndex);
6090
+ const positionContext = position.getPositionContext();
6091
+ if (positionContext.isDirectHit && positionContext.isImage) {
6092
+ draw.spliceElementList(elementList, index2, 1);
6093
+ curIndex = index2 - 1;
6014
6094
  } else {
6015
- draw.spliceElementList(elementList, index2 + 1, 1);
6095
+ const isCollapsed = rangeManager.getIsCollapsed();
6096
+ if (!isCollapsed) {
6097
+ draw.spliceElementList(elementList, startIndex + 1, endIndex - startIndex);
6098
+ } else {
6099
+ if (!elementList[index2 + 1])
6100
+ return;
6101
+ draw.spliceElementList(elementList, index2 + 1, 1);
6102
+ }
6103
+ curIndex = isCollapsed ? index2 : startIndex;
6016
6104
  }
6017
- curIndex = isCollapsed ? index2 : startIndex;
6018
6105
  }
6019
6106
  if (curIndex === null)
6020
6107
  return;
@@ -6049,7 +6136,10 @@ function enter(evt, host) {
6049
6136
  formatElementContext(elementList, [enterText], startIndex);
6050
6137
  const copyElement = getAnchorElement(elementList, endIndex);
6051
6138
  if (copyElement) {
6052
- const copyAttr = [...EDITOR_ELEMENT_STYLE_ATTR, ...EDITOR_ROW_ATTR];
6139
+ const copyAttr = [...EDITOR_ROW_ATTR];
6140
+ if (copyElement.controlComponent !== ControlComponent.POSTFIX) {
6141
+ copyAttr.push(...EDITOR_ELEMENT_STYLE_ATTR);
6142
+ }
6053
6143
  copyAttr.forEach((attr) => {
6054
6144
  const value = copyElement[attr];
6055
6145
  if (value !== void 0) {
@@ -6083,7 +6173,7 @@ function enter(evt, host) {
6083
6173
  evt.preventDefault();
6084
6174
  }
6085
6175
  function left(evt, host) {
6086
- var _a;
6176
+ var _a, _b;
6087
6177
  const draw = host.getDraw();
6088
6178
  const isReadonly = draw.isReadonly();
6089
6179
  if (isReadonly)
@@ -6100,11 +6190,18 @@ function left(evt, host) {
6100
6190
  const { startIndex, endIndex } = rangeManager.getRange();
6101
6191
  const isCollapsed = rangeManager.getIsCollapsed();
6102
6192
  const elementList = draw.getElementList();
6193
+ const control = draw.getControl();
6194
+ if (draw.getMode() === EditorMode.FORM && control.getActiveControl() && ((_a = elementList[index2]) == null ? void 0 : _a.controlComponent) === ControlComponent.PREFIX) {
6195
+ control.initNextControl({
6196
+ direction: MoveDirection.UP
6197
+ });
6198
+ return;
6199
+ }
6103
6200
  let moveCount = 1;
6104
6201
  if (isMod(evt)) {
6105
6202
  const LETTER_REG = draw.getLetterReg();
6106
6203
  const moveStartIndex = evt.shiftKey && !isCollapsed && startIndex === (cursorPosition == null ? void 0 : cursorPosition.index) ? endIndex : startIndex;
6107
- if (LETTER_REG.test((_a = elementList[moveStartIndex]) == null ? void 0 : _a.value)) {
6204
+ if (LETTER_REG.test((_b = elementList[moveStartIndex]) == null ? void 0 : _b.value)) {
6108
6205
  let i = moveStartIndex - 1;
6109
6206
  while (i > 0) {
6110
6207
  const element = elementList[i];
@@ -6214,7 +6311,7 @@ function left(evt, host) {
6214
6311
  evt.preventDefault();
6215
6312
  }
6216
6313
  function right(evt, host) {
6217
- var _a;
6314
+ var _a, _b;
6218
6315
  const draw = host.getDraw();
6219
6316
  const isReadonly = draw.isReadonly();
6220
6317
  if (isReadonly)
@@ -6232,11 +6329,18 @@ function right(evt, host) {
6232
6329
  const { startIndex, endIndex } = rangeManager.getRange();
6233
6330
  const isCollapsed = rangeManager.getIsCollapsed();
6234
6331
  let elementList = draw.getElementList();
6332
+ const control = draw.getControl();
6333
+ if (draw.getMode() === EditorMode.FORM && control.getActiveControl() && ((_a = elementList[index2 + 1]) == null ? void 0 : _a.controlComponent) === ControlComponent.POSTFIX) {
6334
+ control.initNextControl({
6335
+ direction: MoveDirection.DOWN
6336
+ });
6337
+ return;
6338
+ }
6235
6339
  let moveCount = 1;
6236
6340
  if (isMod(evt)) {
6237
6341
  const LETTER_REG = draw.getLetterReg();
6238
6342
  const moveStartIndex = evt.shiftKey && !isCollapsed && startIndex === (cursorPosition == null ? void 0 : cursorPosition.index) ? endIndex : startIndex;
6239
- if (LETTER_REG.test((_a = elementList[moveStartIndex + 1]) == null ? void 0 : _a.value)) {
6343
+ if (LETTER_REG.test((_b = elementList[moveStartIndex + 1]) == null ? void 0 : _b.value)) {
6240
6344
  let i = moveStartIndex + 2;
6241
6345
  while (i < elementList.length) {
6242
6346
  const element = elementList[i];
@@ -6352,16 +6456,24 @@ function tab(evt, host) {
6352
6456
  const isReadonly = draw.isReadonly();
6353
6457
  if (isReadonly)
6354
6458
  return;
6355
- const tabElement = {
6356
- type: ElementType.TAB,
6357
- value: ""
6358
- };
6359
- const rangeManager = draw.getRange();
6360
- const { startIndex } = rangeManager.getRange();
6361
- const elementList = draw.getElementList();
6362
- formatElementContext(elementList, [tabElement], startIndex);
6363
- draw.insertElementList([tabElement]);
6364
6459
  evt.preventDefault();
6460
+ const control = draw.getControl();
6461
+ const activeControl = control.getActiveControl();
6462
+ if (activeControl && control.getIsRangeWithinControl()) {
6463
+ control.initNextControl({
6464
+ direction: evt.shiftKey ? MoveDirection.UP : MoveDirection.DOWN
6465
+ });
6466
+ } else {
6467
+ const tabElement = {
6468
+ type: ElementType.TAB,
6469
+ value: ""
6470
+ };
6471
+ const rangeManager = draw.getRange();
6472
+ const { startIndex } = rangeManager.getRange();
6473
+ const elementList = draw.getElementList();
6474
+ formatElementContext(elementList, [tabElement], startIndex);
6475
+ draw.insertElementList([tabElement]);
6476
+ }
6365
6477
  }
6366
6478
  function getNextPositionIndex(payload) {
6367
6479
  const { positionList, index: index2, isUp, rowNo, cursorX } = payload;
@@ -7646,7 +7758,7 @@ class Position {
7646
7758
  this.positionContext = payload;
7647
7759
  }
7648
7760
  getPositionByXY(payload) {
7649
- var _a, _b, _c;
7761
+ var _a, _b, _c, _d, _e;
7650
7762
  const { x, y, isTable } = payload;
7651
7763
  let { elementList, positionList } = payload;
7652
7764
  if (!elementList) {
@@ -7808,7 +7920,8 @@ class Position {
7808
7920
  }
7809
7921
  if (!isLastArea) {
7810
7922
  const header = this.draw.getHeader();
7811
- const headerBottomY = header.getHeaderTop() + header.getHeight();
7923
+ const headerHeight = header.getHeight();
7924
+ const headerBottomY = header.getHeaderTop() + headerHeight;
7812
7925
  const footer = this.draw.getFooter();
7813
7926
  const pageHeight = this.draw.getHeight();
7814
7927
  const footerTopY = pageHeight - (footer.getFooterBottom() + footer.getHeight());
@@ -7833,14 +7946,45 @@ class Position {
7833
7946
  };
7834
7947
  }
7835
7948
  }
7949
+ const margins = this.draw.getMargins();
7950
+ if (y <= margins[1]) {
7951
+ for (let p = 0; p < positionList.length; p++) {
7952
+ const position = positionList[p];
7953
+ if (position.pageNo !== positionNo || position.rowNo !== 0)
7954
+ continue;
7955
+ const { leftTop, rightTop } = position.coordinate;
7956
+ if (x <= margins[3] || x >= leftTop[0] && x <= rightTop[0] || ((_b = positionList[p + 1]) == null ? void 0 : _b.rowNo) !== 0) {
7957
+ return {
7958
+ index: position.index
7959
+ };
7960
+ }
7961
+ }
7962
+ } else {
7963
+ const lastLetter = lastLetterList[lastLetterList.length - 1];
7964
+ if (lastLetter) {
7965
+ const lastRowNo = lastLetter.rowNo;
7966
+ for (let p = 0; p < positionList.length; p++) {
7967
+ const position = positionList[p];
7968
+ if (position.pageNo !== positionNo || position.rowNo !== lastRowNo) {
7969
+ continue;
7970
+ }
7971
+ const { leftTop, rightTop } = position.coordinate;
7972
+ if (x <= margins[3] || x >= leftTop[0] && x <= rightTop[0] || ((_c = positionList[p + 1]) == null ? void 0 : _c.rowNo) !== lastRowNo) {
7973
+ return {
7974
+ index: position.index
7975
+ };
7976
+ }
7977
+ }
7978
+ }
7979
+ }
7836
7980
  return {
7837
- index: ((_b = lastLetterList[lastLetterList.length - 1]) == null ? void 0 : _b.index) || positionList.length - 1
7981
+ index: ((_d = lastLetterList[lastLetterList.length - 1]) == null ? void 0 : _d.index) || positionList.length - 1
7838
7982
  };
7839
7983
  }
7840
7984
  return {
7841
7985
  hitLineStartIndex,
7842
7986
  index: curPositionIndex,
7843
- isControl: !!((_c = elementList[curPositionIndex]) == null ? void 0 : _c.controlId)
7987
+ isControl: !!((_e = elementList[curPositionIndex]) == null ? void 0 : _e.controlId)
7844
7988
  };
7845
7989
  }
7846
7990
  getFloatPositionByXY(payload) {
@@ -10719,1740 +10863,2204 @@ class TextControl {
10719
10863
  return startIndex;
10720
10864
  }
10721
10865
  }
10722
- class Control {
10723
- constructor(draw) {
10724
- __publicField(this, "controlBorder");
10866
+ class DatePicker {
10867
+ constructor(draw, options = {}) {
10725
10868
  __publicField(this, "draw");
10726
- __publicField(this, "range");
10727
- __publicField(this, "listener");
10728
- __publicField(this, "eventBus");
10729
- __publicField(this, "controlSearch");
10730
10869
  __publicField(this, "options");
10731
- __publicField(this, "controlOptions");
10732
- __publicField(this, "activeControl");
10733
- this.controlBorder = new ControlBorder(draw);
10870
+ __publicField(this, "now");
10871
+ __publicField(this, "dom");
10872
+ __publicField(this, "renderOptions");
10873
+ __publicField(this, "isDatePicker");
10874
+ __publicField(this, "pickDate");
10875
+ __publicField(this, "lang");
10734
10876
  this.draw = draw;
10735
- this.range = draw.getRange();
10736
- this.listener = draw.getListener();
10737
- this.eventBus = draw.getEventBus();
10738
- this.controlSearch = new ControlSearch(this);
10739
- this.options = draw.getOptions();
10740
- this.controlOptions = this.options.control;
10741
- this.activeControl = null;
10742
- }
10743
- setHighlightList(payload) {
10744
- this.controlSearch.setHighlightList(payload);
10745
- }
10746
- computeHighlightList() {
10747
- const highlightList = this.controlSearch.getHighlightList();
10748
- if (highlightList.length) {
10749
- this.controlSearch.computeHighlightList();
10750
- }
10751
- }
10752
- renderHighlightList(ctx, pageNo) {
10753
- const highlightMatchResult = this.controlSearch.getHighlightMatchResult();
10754
- if (highlightMatchResult.length) {
10755
- this.controlSearch.renderHighlightList(ctx, pageNo);
10756
- }
10757
- }
10758
- getDraw() {
10759
- return this.draw;
10877
+ this.options = options;
10878
+ this.lang = this._getLang();
10879
+ this.now = new Date();
10880
+ this.dom = this._createDom();
10881
+ this.renderOptions = null;
10882
+ this.isDatePicker = true;
10883
+ this.pickDate = null;
10884
+ this._bindEvent();
10760
10885
  }
10761
- filterAssistElement(elementList) {
10762
- return elementList.filter((element) => {
10763
- var _a;
10764
- if (element.type === ElementType.TABLE) {
10765
- const trList = element.trList;
10766
- for (let r = 0; r < trList.length; r++) {
10767
- const tr = trList[r];
10768
- for (let d = 0; d < tr.tdList.length; d++) {
10769
- const td = tr.tdList[d];
10770
- td.value = this.filterAssistElement(td.value);
10771
- }
10772
- }
10886
+ _createDom() {
10887
+ const datePickerContainer = document.createElement("div");
10888
+ datePickerContainer.classList.add(`${EDITOR_PREFIX}-date-container`);
10889
+ datePickerContainer.setAttribute(EDITOR_COMPONENT, EditorComponent.POPUP);
10890
+ const dateWrap = document.createElement("div");
10891
+ dateWrap.classList.add(`${EDITOR_PREFIX}-date-wrap`);
10892
+ const datePickerTitle = document.createElement("div");
10893
+ datePickerTitle.classList.add(`${EDITOR_PREFIX}-date-title`);
10894
+ const preYearTitle = document.createElement("span");
10895
+ preYearTitle.classList.add(`${EDITOR_PREFIX}-date-title__pre-year`);
10896
+ preYearTitle.innerText = `<<`;
10897
+ const preMonthTitle = document.createElement("span");
10898
+ preMonthTitle.classList.add(`${EDITOR_PREFIX}-date-title__pre-month`);
10899
+ preMonthTitle.innerText = `<`;
10900
+ const nowTitle = document.createElement("span");
10901
+ nowTitle.classList.add(`${EDITOR_PREFIX}-date-title__now`);
10902
+ const nextMonthTitle = document.createElement("span");
10903
+ nextMonthTitle.classList.add(`${EDITOR_PREFIX}-date-title__next-month`);
10904
+ nextMonthTitle.innerText = `>`;
10905
+ const nextYearTitle = document.createElement("span");
10906
+ nextYearTitle.classList.add(`${EDITOR_PREFIX}-date-title__next-year`);
10907
+ nextYearTitle.innerText = `>>`;
10908
+ datePickerTitle.append(preYearTitle);
10909
+ datePickerTitle.append(preMonthTitle);
10910
+ datePickerTitle.append(nowTitle);
10911
+ datePickerTitle.append(nextMonthTitle);
10912
+ datePickerTitle.append(nextYearTitle);
10913
+ const datePickerWeek = document.createElement("div");
10914
+ datePickerWeek.classList.add(`${EDITOR_PREFIX}-date-week`);
10915
+ const { weeks: { sun, mon, tue, wed, thu, fri, sat } } = this.lang;
10916
+ const weekList = [sun, mon, tue, wed, thu, fri, sat];
10917
+ weekList.forEach((week) => {
10918
+ const weekDom = document.createElement("span");
10919
+ weekDom.innerText = `${week}`;
10920
+ datePickerWeek.append(weekDom);
10921
+ });
10922
+ const datePickerDay = document.createElement("div");
10923
+ datePickerDay.classList.add(`${EDITOR_PREFIX}-date-day`);
10924
+ dateWrap.append(datePickerTitle);
10925
+ dateWrap.append(datePickerWeek);
10926
+ dateWrap.append(datePickerDay);
10927
+ const timeWrap = document.createElement("ul");
10928
+ timeWrap.classList.add(`${EDITOR_PREFIX}-time-wrap`);
10929
+ let hourTime;
10930
+ let minuteTime;
10931
+ let secondTime;
10932
+ const timeList = [this.lang.hour, this.lang.minute, this.lang.second];
10933
+ timeList.forEach((t, i) => {
10934
+ const li = document.createElement("li");
10935
+ const timeText = document.createElement("span");
10936
+ timeText.innerText = t;
10937
+ li.append(timeText);
10938
+ const ol = document.createElement("ol");
10939
+ const isHour = i === 0;
10940
+ const isMinute = i === 1;
10941
+ const endIndex = isHour ? 24 : 60;
10942
+ for (let i2 = 0; i2 < endIndex; i2++) {
10943
+ const time = document.createElement("li");
10944
+ time.innerText = `${String(i2).padStart(2, "0")}`;
10945
+ time.setAttribute("data-id", `${i2}`);
10946
+ ol.append(time);
10773
10947
  }
10774
- if (!element.controlId)
10775
- return true;
10776
- if ((_a = element.control) == null ? void 0 : _a.minWidth) {
10777
- if (element.controlComponent === ControlComponent.PREFIX || element.controlComponent === ControlComponent.POSTFIX) {
10778
- element.value = "";
10779
- return true;
10780
- }
10948
+ if (isHour) {
10949
+ hourTime = ol;
10950
+ } else if (isMinute) {
10951
+ minuteTime = ol;
10952
+ } else {
10953
+ secondTime = ol;
10781
10954
  }
10782
- return element.controlComponent !== ControlComponent.PREFIX && element.controlComponent !== ControlComponent.POSTFIX && element.controlComponent !== ControlComponent.PLACEHOLDER;
10955
+ li.append(ol);
10956
+ timeWrap.append(li);
10783
10957
  });
10958
+ const datePickerMenu = document.createElement("div");
10959
+ datePickerMenu.classList.add(`${EDITOR_PREFIX}-date-menu`);
10960
+ const timeMenu = document.createElement("button");
10961
+ timeMenu.classList.add(`${EDITOR_PREFIX}-date-menu__time`);
10962
+ timeMenu.innerText = this.lang.timeSelect;
10963
+ const nowMenu = document.createElement("button");
10964
+ nowMenu.classList.add(`${EDITOR_PREFIX}-date-menu__now`);
10965
+ nowMenu.innerText = this.lang.now;
10966
+ const submitMenu = document.createElement("button");
10967
+ submitMenu.classList.add(`${EDITOR_PREFIX}-date-menu__submit`);
10968
+ submitMenu.innerText = this.lang.confirm;
10969
+ datePickerMenu.append(timeMenu);
10970
+ datePickerMenu.append(nowMenu);
10971
+ datePickerMenu.append(submitMenu);
10972
+ datePickerContainer.append(dateWrap);
10973
+ datePickerContainer.append(timeWrap);
10974
+ datePickerContainer.append(datePickerMenu);
10975
+ this.draw.getContainer().append(datePickerContainer);
10976
+ return {
10977
+ container: datePickerContainer,
10978
+ dateWrap,
10979
+ datePickerWeek,
10980
+ timeWrap,
10981
+ title: {
10982
+ preYear: preYearTitle,
10983
+ preMonth: preMonthTitle,
10984
+ now: nowTitle,
10985
+ nextMonth: nextMonthTitle,
10986
+ nextYear: nextYearTitle
10987
+ },
10988
+ day: datePickerDay,
10989
+ time: {
10990
+ hour: hourTime,
10991
+ minute: minuteTime,
10992
+ second: secondTime
10993
+ },
10994
+ menu: {
10995
+ time: timeMenu,
10996
+ now: nowMenu,
10997
+ submit: submitMenu
10998
+ }
10999
+ };
10784
11000
  }
10785
- getIsRangeCanCaptureEvent() {
10786
- if (!this.activeControl)
10787
- return false;
10788
- const { startIndex, endIndex } = this.getRange();
10789
- if (!~startIndex && !~endIndex)
10790
- return false;
10791
- const elementList = this.getElementList();
10792
- const startElement = elementList[startIndex];
10793
- if (startIndex === endIndex && startElement.controlComponent === ControlComponent.POSTFIX) {
10794
- return true;
10795
- }
10796
- const endElement = elementList[endIndex];
10797
- if (startElement.controlId && startElement.controlId === endElement.controlId && endElement.controlComponent !== ControlComponent.POSTFIX) {
10798
- return true;
10799
- }
10800
- return false;
10801
- }
10802
- getIsRangeInPostfix() {
10803
- if (!this.activeControl)
10804
- return false;
10805
- const { startIndex, endIndex } = this.getRange();
10806
- if (startIndex !== endIndex)
10807
- return false;
10808
- const elementList = this.getElementList();
10809
- const element = elementList[startIndex];
10810
- return element.controlComponent === ControlComponent.POSTFIX;
10811
- }
10812
- getIsRangeWithinControl() {
10813
- const { startIndex, endIndex } = this.getRange();
10814
- if (!~startIndex && !~endIndex)
10815
- return false;
10816
- const elementList = this.getElementList();
10817
- const startElement = elementList[startIndex];
10818
- const endElement = elementList[endIndex];
10819
- if (startElement.controlId && startElement.controlId === endElement.controlId && endElement.controlComponent !== ControlComponent.POSTFIX) {
10820
- return true;
10821
- }
10822
- return false;
10823
- }
10824
- getIsDisabledControl() {
10825
- var _a, _b;
10826
- return !!((_b = (_a = this.activeControl) == null ? void 0 : _a.getElement().control) == null ? void 0 : _b.disabled);
10827
- }
10828
- getContainer() {
10829
- return this.draw.getContainer();
10830
- }
10831
- getElementList() {
10832
- return this.draw.getElementList();
10833
- }
10834
- getPosition() {
10835
- const positionList = this.draw.getPosition().getPositionList();
10836
- const { endIndex } = this.range.getRange();
10837
- return positionList[endIndex] || null;
11001
+ _bindEvent() {
11002
+ this.dom.title.preYear.onclick = () => {
11003
+ this._preYear();
11004
+ };
11005
+ this.dom.title.preMonth.onclick = () => {
11006
+ this._preMonth();
11007
+ };
11008
+ this.dom.title.nextMonth.onclick = () => {
11009
+ this._nextMonth();
11010
+ };
11011
+ this.dom.title.nextYear.onclick = () => {
11012
+ this._nextYear();
11013
+ };
11014
+ this.dom.menu.time.onclick = () => {
11015
+ this.isDatePicker = !this.isDatePicker;
11016
+ this._toggleDateTimePicker();
11017
+ };
11018
+ this.dom.menu.now.onclick = () => {
11019
+ this._now();
11020
+ this._submit();
11021
+ };
11022
+ this.dom.menu.submit.onclick = () => {
11023
+ this.dispose();
11024
+ this._submit();
11025
+ };
11026
+ this.dom.time.hour.onclick = (evt) => {
11027
+ if (!this.pickDate)
11028
+ return;
11029
+ const li = evt.target;
11030
+ const id = li.dataset.id;
11031
+ if (!id)
11032
+ return;
11033
+ this.pickDate.setHours(Number(id));
11034
+ this._setTimePick(false);
11035
+ };
11036
+ this.dom.time.minute.onclick = (evt) => {
11037
+ if (!this.pickDate)
11038
+ return;
11039
+ const li = evt.target;
11040
+ const id = li.dataset.id;
11041
+ if (!id)
11042
+ return;
11043
+ this.pickDate.setMinutes(Number(id));
11044
+ this._setTimePick(false);
11045
+ };
11046
+ this.dom.time.second.onclick = (evt) => {
11047
+ if (!this.pickDate)
11048
+ return;
11049
+ const li = evt.target;
11050
+ const id = li.dataset.id;
11051
+ if (!id)
11052
+ return;
11053
+ this.pickDate.setSeconds(Number(id));
11054
+ this._setTimePick(false);
11055
+ };
10838
11056
  }
10839
- getPreY() {
11057
+ _setPosition() {
11058
+ if (!this.renderOptions)
11059
+ return;
11060
+ const { position: { coordinate: { leftTop: [left2, top] }, lineHeight, pageNo } } = this.renderOptions;
10840
11061
  const height = this.draw.getHeight();
10841
11062
  const pageGap = this.draw.getPageGap();
10842
- return this.draw.getPageNo() * (height + pageGap);
11063
+ const currentPageNo = pageNo != null ? pageNo : this.draw.getPageNo();
11064
+ const preY = currentPageNo * (height + pageGap);
11065
+ this.dom.container.style.left = `${left2}px`;
11066
+ this.dom.container.style.top = `${top + preY + lineHeight}px`;
10843
11067
  }
10844
- getRange() {
10845
- return this.range.getRange();
11068
+ isInvalidDate(value) {
11069
+ return value.toDateString() === "Invalid Date";
10846
11070
  }
10847
- shrinkBoundary(context = {}) {
10848
- this.range.shrinkBoundary(context);
11071
+ _setValue() {
11072
+ var _a;
11073
+ const value = (_a = this.renderOptions) == null ? void 0 : _a.value;
11074
+ if (value) {
11075
+ const setDate = new Date(value);
11076
+ this.now = this.isInvalidDate(setDate) ? new Date() : setDate;
11077
+ } else {
11078
+ this.now = new Date();
11079
+ }
11080
+ this.pickDate = new Date(this.now);
10849
11081
  }
10850
- getActiveControl() {
10851
- return this.activeControl;
11082
+ _getLang() {
11083
+ const i18n = this.draw.getI18n();
11084
+ const t = i18n.t.bind(i18n);
11085
+ return {
11086
+ now: t("datePicker.now"),
11087
+ confirm: t("datePicker.confirm"),
11088
+ return: t("datePicker.return"),
11089
+ timeSelect: t("datePicker.timeSelect"),
11090
+ weeks: {
11091
+ sun: t("datePicker.weeks.sun"),
11092
+ mon: t("datePicker.weeks.mon"),
11093
+ tue: t("datePicker.weeks.tue"),
11094
+ wed: t("datePicker.weeks.wed"),
11095
+ thu: t("datePicker.weeks.thu"),
11096
+ fri: t("datePicker.weeks.fri"),
11097
+ sat: t("datePicker.weeks.sat")
11098
+ },
11099
+ year: t("datePicker.year"),
11100
+ month: t("datePicker.month"),
11101
+ hour: t("datePicker.hour"),
11102
+ minute: t("datePicker.minute"),
11103
+ second: t("datePicker.second")
11104
+ };
10852
11105
  }
10853
- initControl() {
10854
- const isReadonly = this.draw.isReadonly();
10855
- if (isReadonly)
10856
- return;
10857
- const elementList = this.getElementList();
10858
- const range = this.getRange();
10859
- const element = elementList[range.startIndex];
10860
- if (this.activeControl) {
10861
- if (this.activeControl instanceof SelectControl) {
10862
- this.activeControl.awake();
10863
- }
10864
- const controlElement = this.activeControl.getElement();
10865
- if (element.controlId === controlElement.controlId)
10866
- return;
10867
- }
10868
- this.destroyControl();
10869
- const control = element.control;
10870
- if (control.type === ControlType.TEXT) {
10871
- this.activeControl = new TextControl(element, this);
10872
- } else if (control.type === ControlType.SELECT) {
10873
- const selectControl = new SelectControl(element, this);
10874
- this.activeControl = selectControl;
10875
- selectControl.awake();
10876
- } else if (control.type === ControlType.CHECKBOX) {
10877
- this.activeControl = new CheckboxControl(element, this);
10878
- } else if (control.type === ControlType.RADIO) {
10879
- this.activeControl = new RadioControl(element, this);
10880
- }
10881
- nextTick(() => {
10882
- var _a;
10883
- const controlChangeListener = this.listener.controlChange;
10884
- const isSubscribeControlChange = this.eventBus.isSubscribe("controlChange");
10885
- if (!controlChangeListener && !isSubscribeControlChange)
10886
- return;
10887
- let payload;
10888
- const value = (_a = this.activeControl) == null ? void 0 : _a.getValue();
10889
- if (value && value.length) {
10890
- payload = zipElementList(value)[0].control;
10891
- } else {
10892
- payload = pickElementAttr(deepClone(element)).control;
10893
- }
10894
- if (controlChangeListener) {
10895
- controlChangeListener(payload);
10896
- }
10897
- if (isSubscribeControlChange) {
10898
- this.eventBus.emit("controlChange", payload);
10899
- }
11106
+ _setLangChange() {
11107
+ this.dom.menu.time.innerText = this.lang.timeSelect;
11108
+ this.dom.menu.now.innerText = this.lang.now;
11109
+ this.dom.menu.submit.innerText = this.lang.confirm;
11110
+ const { weeks: { sun, mon, tue, wed, thu, fri, sat } } = this.lang;
11111
+ const weekList = [sun, mon, tue, wed, thu, fri, sat];
11112
+ this.dom.datePickerWeek.childNodes.forEach((child, i) => {
11113
+ const childElement = child;
11114
+ childElement.innerText = weekList[i];
10900
11115
  });
11116
+ const hourTitle = this.dom.time.hour.previousElementSibling;
11117
+ hourTitle.innerText = this.lang.hour;
11118
+ const minuteTitle = this.dom.time.minute.previousElementSibling;
11119
+ minuteTitle.innerText = this.lang.minute;
11120
+ const secondTitle = this.dom.time.second.previousElementSibling;
11121
+ secondTitle.innerText = this.lang.second;
10901
11122
  }
10902
- destroyControl() {
10903
- if (this.activeControl) {
10904
- if (this.activeControl instanceof SelectControl) {
10905
- this.activeControl.destroy();
10906
- }
10907
- this.activeControl = null;
10908
- nextTick(() => {
10909
- const controlChangeListener = this.listener.controlChange;
10910
- const isSubscribeControlChange = this.eventBus.isSubscribe("controlChange");
10911
- if (!controlChangeListener && !isSubscribeControlChange)
10912
- return;
10913
- if (controlChangeListener) {
10914
- controlChangeListener(null);
10915
- }
10916
- if (isSubscribeControlChange) {
10917
- this.eventBus.emit("controlChange", null);
10918
- }
10919
- });
11123
+ _update() {
11124
+ const localDate = new Date();
11125
+ const localYear = localDate.getFullYear();
11126
+ const localMonth = localDate.getMonth() + 1;
11127
+ const localDay = localDate.getDate();
11128
+ let pickYear = null;
11129
+ let pickMonth = null;
11130
+ let pickDay = null;
11131
+ if (this.pickDate) {
11132
+ pickYear = this.pickDate.getFullYear();
11133
+ pickMonth = this.pickDate.getMonth() + 1;
11134
+ pickDay = this.pickDate.getDate();
10920
11135
  }
10921
- }
10922
- repaintControl(options = {}) {
10923
- const { curIndex, isCompute = true, isSubmitHistory = true } = options;
10924
- if (curIndex === void 0) {
10925
- this.range.clearRange();
10926
- this.draw.render({
10927
- isCompute,
10928
- isSubmitHistory,
10929
- isSetCursor: false
10930
- });
10931
- } else {
10932
- this.range.setRange(curIndex, curIndex);
10933
- this.draw.render({
10934
- curIndex,
10935
- isCompute,
10936
- isSubmitHistory
10937
- });
11136
+ const year = this.now.getFullYear();
11137
+ const month = this.now.getMonth() + 1;
11138
+ this.dom.title.now.innerText = `${year}${this.lang.year} ${String(month).padStart(2, "0")}${this.lang.month}`;
11139
+ const curDate = new Date(year, month, 0);
11140
+ const curDay = curDate.getDate();
11141
+ let curWeek = new Date(year, month - 1, 1).getDay();
11142
+ if (curWeek === 0) {
11143
+ curWeek = 7;
10938
11144
  }
10939
- }
10940
- reAwakeControl() {
10941
- if (!this.activeControl)
10942
- return;
10943
- const elementList = this.getElementList();
10944
- const range = this.getRange();
10945
- const element = elementList[range.startIndex];
10946
- this.activeControl.setElement(element);
10947
- if (this.activeControl instanceof SelectControl && this.activeControl.getIsPopup()) {
10948
- this.activeControl.destroy();
10949
- this.activeControl.awake();
10950
- }
10951
- }
10952
- moveCursor(position) {
10953
- const { index: index2, trIndex, tdIndex, tdValueIndex } = position;
10954
- let elementList = this.draw.getOriginalElementList();
10955
- let element;
10956
- const newIndex = position.isTable ? tdValueIndex : index2;
10957
- if (position.isTable) {
10958
- elementList = elementList[index2].trList[trIndex].tdList[tdIndex].value;
10959
- element = elementList[tdValueIndex];
10960
- } else {
10961
- element = elementList[index2];
10962
- }
10963
- if (element.controlComponent === ControlComponent.VALUE) {
10964
- return {
10965
- newIndex,
10966
- newElement: element
11145
+ const preDay = new Date(year, month - 1, 0).getDate();
11146
+ this.dom.day.innerHTML = "";
11147
+ const preStartDay = preDay - curWeek + 1;
11148
+ for (let i = preStartDay; i <= preDay; i++) {
11149
+ const dayDom = document.createElement("div");
11150
+ dayDom.classList.add("disable");
11151
+ dayDom.innerText = `${i}`;
11152
+ dayDom.onclick = () => {
11153
+ const newMonth = month - 2;
11154
+ this.now = new Date(year, newMonth, i);
11155
+ this._setDatePick(year, newMonth, i);
10967
11156
  };
10968
- } else if (element.controlComponent === ControlComponent.POSTFIX) {
10969
- let startIndex = newIndex + 1;
10970
- while (startIndex < elementList.length) {
10971
- const nextElement = elementList[startIndex];
10972
- if (nextElement.controlId !== element.controlId) {
10973
- return {
10974
- newIndex: startIndex - 1,
10975
- newElement: elementList[startIndex - 1]
10976
- };
10977
- }
10978
- startIndex++;
10979
- }
10980
- } else if (element.controlComponent === ControlComponent.PREFIX) {
10981
- let startIndex = newIndex + 1;
10982
- while (startIndex < elementList.length) {
10983
- const nextElement = elementList[startIndex];
10984
- if (nextElement.controlId !== element.controlId || nextElement.controlComponent !== ControlComponent.PREFIX) {
10985
- return {
10986
- newIndex: startIndex - 1,
10987
- newElement: elementList[startIndex - 1]
10988
- };
10989
- }
10990
- startIndex++;
10991
- }
10992
- } else if (element.controlComponent === ControlComponent.PLACEHOLDER) {
10993
- let startIndex = newIndex - 1;
10994
- while (startIndex > 0) {
10995
- const preElement = elementList[startIndex];
10996
- if (preElement.controlId !== element.controlId || preElement.controlComponent === ControlComponent.PREFIX) {
10997
- return {
10998
- newIndex: startIndex,
10999
- newElement: elementList[startIndex]
11000
- };
11001
- }
11002
- startIndex--;
11003
- }
11157
+ this.dom.day.append(dayDom);
11004
11158
  }
11005
- return {
11006
- newIndex,
11007
- newElement: element
11008
- };
11009
- }
11010
- removeControl(startIndex, context = {}) {
11011
- const elementList = context.elementList || this.getElementList();
11012
- const startElement = elementList[startIndex];
11013
- const { deletable = true } = startElement.control;
11014
- if (!deletable)
11015
- return null;
11016
- let leftIndex = -1;
11017
- let rightIndex = -1;
11018
- let preIndex = startIndex;
11019
- while (preIndex > 0) {
11020
- const preElement = elementList[preIndex];
11021
- if (preElement.controlId !== startElement.controlId) {
11022
- leftIndex = preIndex;
11023
- break;
11159
+ for (let i = 1; i <= curDay; i++) {
11160
+ const dayDom = document.createElement("div");
11161
+ if (localYear === year && localMonth === month && localDay === i) {
11162
+ dayDom.classList.add("active");
11024
11163
  }
11025
- preIndex--;
11026
- }
11027
- let nextIndex = startIndex + 1;
11028
- while (nextIndex < elementList.length) {
11029
- const nextElement = elementList[nextIndex];
11030
- if (nextElement.controlId !== startElement.controlId) {
11031
- rightIndex = nextIndex - 1;
11032
- break;
11164
+ if (this.pickDate && pickYear === year && pickMonth === month && pickDay === i) {
11165
+ dayDom.classList.add("select");
11033
11166
  }
11034
- nextIndex++;
11167
+ dayDom.innerText = `${i}`;
11168
+ dayDom.onclick = (evt) => {
11169
+ const newMonth = month - 1;
11170
+ this.now = new Date(year, newMonth, i);
11171
+ this._setDatePick(year, newMonth, i);
11172
+ evt.stopPropagation();
11173
+ };
11174
+ this.dom.day.append(dayDom);
11035
11175
  }
11036
- if (nextIndex === elementList.length) {
11037
- rightIndex = nextIndex - 1;
11176
+ const nextEndDay = 6 * 7 - curWeek - curDay;
11177
+ for (let i = 1; i <= nextEndDay; i++) {
11178
+ const dayDom = document.createElement("div");
11179
+ dayDom.classList.add("disable");
11180
+ dayDom.innerText = `${i}`;
11181
+ dayDom.onclick = () => {
11182
+ this.now = new Date(year, month, i);
11183
+ this._setDatePick(year, month, i);
11184
+ };
11185
+ this.dom.day.append(dayDom);
11038
11186
  }
11039
- if (!~leftIndex && !~rightIndex)
11040
- return startIndex;
11041
- leftIndex = ~leftIndex ? leftIndex : 0;
11042
- this.draw.spliceElementList(elementList, leftIndex + 1, rightIndex - leftIndex);
11043
- return leftIndex;
11044
11187
  }
11045
- removePlaceholder(startIndex, context = {}) {
11046
- const elementList = context.elementList || this.getElementList();
11047
- const startElement = elementList[startIndex];
11048
- const nextElement = elementList[startIndex + 1];
11049
- if (startElement.controlComponent === ControlComponent.PLACEHOLDER || nextElement.controlComponent === ControlComponent.PLACEHOLDER) {
11050
- let isHasSubmitHistory = false;
11051
- let index2 = startIndex;
11052
- while (index2 < elementList.length) {
11053
- const curElement = elementList[index2];
11054
- if (curElement.controlId !== startElement.controlId)
11055
- break;
11056
- if (curElement.controlComponent === ControlComponent.PLACEHOLDER) {
11057
- if (!isHasSubmitHistory) {
11058
- isHasSubmitHistory = true;
11059
- this.draw.getHistoryManager().popUndo();
11060
- this.draw.submitHistory(startIndex);
11061
- }
11062
- elementList.splice(index2, 1);
11063
- } else {
11064
- index2++;
11065
- }
11066
- }
11188
+ _toggleDateTimePicker() {
11189
+ if (this.isDatePicker) {
11190
+ this.dom.dateWrap.classList.add("active");
11191
+ this.dom.timeWrap.classList.remove("active");
11192
+ this.dom.menu.time.innerText = this.lang.timeSelect;
11193
+ } else {
11194
+ this.dom.dateWrap.classList.remove("active");
11195
+ this.dom.timeWrap.classList.add("active");
11196
+ this.dom.menu.time.innerText = this.lang.return;
11197
+ this._setTimePick();
11067
11198
  }
11068
11199
  }
11069
- addPlaceholder(startIndex, context = {}) {
11070
- const elementList = context.elementList || this.getElementList();
11071
- const startElement = elementList[startIndex];
11072
- const control = startElement.control;
11073
- if (!control.placeholder)
11200
+ _setDatePick(year, month, day) {
11201
+ var _a, _b, _c;
11202
+ this.now = new Date(year, month, day);
11203
+ (_a = this.pickDate) == null ? void 0 : _a.setFullYear(year);
11204
+ (_b = this.pickDate) == null ? void 0 : _b.setMonth(month);
11205
+ (_c = this.pickDate) == null ? void 0 : _c.setDate(day);
11206
+ this._update();
11207
+ }
11208
+ _setTimePick(isIntoView = true) {
11209
+ var _a, _b, _c;
11210
+ const hour = ((_a = this.pickDate) == null ? void 0 : _a.getHours()) || 0;
11211
+ const minute = ((_b = this.pickDate) == null ? void 0 : _b.getMinutes()) || 0;
11212
+ const second = ((_c = this.pickDate) == null ? void 0 : _c.getSeconds()) || 0;
11213
+ const { hour: hourDom, minute: minuteDom, second: secondDom } = this.dom.time;
11214
+ const timeDomList = [hourDom, minuteDom, secondDom];
11215
+ timeDomList.forEach((timeDom) => {
11216
+ timeDom.querySelectorAll("li").forEach((li) => li.classList.remove("active"));
11217
+ });
11218
+ const pickList = [
11219
+ [hourDom, hour],
11220
+ [minuteDom, minute],
11221
+ [secondDom, second]
11222
+ ];
11223
+ pickList.forEach(([dom, time]) => {
11224
+ const pickDom = dom.querySelector(`[data-id='${time}']`);
11225
+ pickDom.classList.add("active");
11226
+ if (isIntoView) {
11227
+ this._scrollIntoView(dom, pickDom);
11228
+ }
11229
+ });
11230
+ }
11231
+ _scrollIntoView(container, selected) {
11232
+ if (!selected) {
11233
+ container.scrollTop = 0;
11074
11234
  return;
11075
- const placeholderStrList = splitText(control.placeholder);
11076
- for (let p = 0; p < placeholderStrList.length; p++) {
11077
- const value = placeholderStrList[p];
11078
- const newElement = {
11079
- value,
11080
- controlId: startElement.controlId,
11081
- type: ElementType.CONTROL,
11082
- control: startElement.control,
11083
- controlComponent: ControlComponent.PLACEHOLDER,
11084
- color: this.controlOptions.placeholderColor
11085
- };
11086
- formatElementContext(elementList, [newElement], startIndex);
11087
- this.draw.spliceElementList(elementList, startIndex + p + 1, 0, newElement);
11088
11235
  }
11089
- }
11090
- setValue(data2) {
11091
- if (!this.activeControl) {
11092
- throw new Error("active control is null");
11236
+ const offsetParents = [];
11237
+ let pointer = selected.offsetParent;
11238
+ while (pointer && container !== pointer && container.contains(pointer)) {
11239
+ offsetParents.push(pointer);
11240
+ pointer = pointer.offsetParent;
11093
11241
  }
11094
- return this.activeControl.setValue(data2);
11095
- }
11096
- keydown(evt) {
11097
- if (!this.activeControl) {
11098
- throw new Error("active control is null");
11242
+ const top = selected.offsetTop + offsetParents.reduce((prev, curr) => prev + curr.offsetTop, 0);
11243
+ const bottom = top + selected.offsetHeight;
11244
+ const viewRectTop = container.scrollTop;
11245
+ const viewRectBottom = viewRectTop + container.clientHeight;
11246
+ if (top < viewRectTop) {
11247
+ container.scrollTop = top;
11248
+ } else if (bottom > viewRectBottom) {
11249
+ container.scrollTop = bottom - container.clientHeight;
11099
11250
  }
11100
- return this.activeControl.keydown(evt);
11101
11251
  }
11102
- cut() {
11103
- if (!this.activeControl) {
11104
- throw new Error("active control is null");
11105
- }
11106
- return this.activeControl.cut();
11252
+ _preMonth() {
11253
+ this.now.setMonth(this.now.getMonth() - 1);
11254
+ this._update();
11107
11255
  }
11108
- getValueByConceptId(payload) {
11109
- const { conceptId } = payload;
11110
- const result = [];
11111
- const getValue = (elementList, zone2) => {
11112
- var _a;
11113
- let i = 0;
11114
- while (i < elementList.length) {
11115
- const element = elementList[i];
11116
- i++;
11117
- if (element.type === ElementType.TABLE) {
11118
- const trList = element.trList;
11119
- for (let r = 0; r < trList.length; r++) {
11120
- const tr = trList[r];
11121
- for (let d = 0; d < tr.tdList.length; d++) {
11122
- const td = tr.tdList[d];
11123
- getValue(td.value, zone2);
11124
- }
11125
- }
11126
- }
11127
- if (((_a = element == null ? void 0 : element.control) == null ? void 0 : _a.conceptId) !== conceptId)
11128
- continue;
11129
- const { type, code, valueSets } = element.control;
11130
- let j = i;
11131
- let textControlValue = "";
11132
- while (j < elementList.length) {
11133
- const nextElement = elementList[j];
11134
- if (nextElement.controlId !== element.controlId)
11135
- break;
11136
- if (type === ControlType.TEXT && nextElement.controlComponent === ControlComponent.VALUE) {
11137
- textControlValue += nextElement.value;
11138
- }
11139
- j++;
11140
- }
11141
- if (type === ControlType.TEXT) {
11142
- result.push(__spreadProps(__spreadValues({}, element.control), {
11143
- zone: zone2,
11144
- value: textControlValue || null,
11145
- innerText: textControlValue || null
11146
- }));
11147
- } else if (type === ControlType.SELECT || type === ControlType.CHECKBOX || type === ControlType.RADIO) {
11148
- const innerText = code == null ? void 0 : code.split(",").map((selectCode) => {
11149
- var _a2;
11150
- return (_a2 = valueSets == null ? void 0 : valueSets.find((valueSet) => valueSet.code === selectCode)) == null ? void 0 : _a2.value;
11151
- }).filter(Boolean).join("");
11152
- result.push(__spreadProps(__spreadValues({}, element.control), {
11153
- zone: zone2,
11154
- value: code || null,
11155
- innerText: innerText || null
11156
- }));
11157
- }
11158
- i = j;
11159
- }
11256
+ _nextMonth() {
11257
+ this.now.setMonth(this.now.getMonth() + 1);
11258
+ this._update();
11259
+ }
11260
+ _preYear() {
11261
+ this.now.setFullYear(this.now.getFullYear() - 1);
11262
+ this._update();
11263
+ }
11264
+ _nextYear() {
11265
+ this.now.setFullYear(this.now.getFullYear() + 1);
11266
+ this._update();
11267
+ }
11268
+ _now() {
11269
+ this.pickDate = new Date();
11270
+ this.dispose();
11271
+ }
11272
+ _toggleVisible(isVisible) {
11273
+ if (isVisible) {
11274
+ this.dom.container.classList.add("active");
11275
+ } else {
11276
+ this.dom.container.classList.remove("active");
11277
+ }
11278
+ }
11279
+ _submit() {
11280
+ var _a;
11281
+ if (this.options.onSubmit && this.pickDate) {
11282
+ const format = (_a = this.renderOptions) == null ? void 0 : _a.dateFormat;
11283
+ const pickDateString = this.formatDate(this.pickDate, format);
11284
+ this.options.onSubmit(pickDateString);
11285
+ }
11286
+ }
11287
+ formatDate(date, format = "yyyy-MM-dd hh:mm:ss") {
11288
+ let dateString = format;
11289
+ const dateOption = {
11290
+ "y+": date.getFullYear().toString(),
11291
+ "M+": (date.getMonth() + 1).toString(),
11292
+ "d+": date.getDate().toString(),
11293
+ "h+": date.getHours().toString(),
11294
+ "m+": date.getMinutes().toString(),
11295
+ "s+": date.getSeconds().toString()
11160
11296
  };
11161
- const data2 = [
11162
- {
11163
- zone: EditorZone.HEADER,
11164
- elementList: this.draw.getHeaderElementList()
11165
- },
11166
- {
11167
- zone: EditorZone.MAIN,
11168
- elementList: this.draw.getOriginalMainElementList()
11169
- },
11170
- {
11171
- zone: EditorZone.FOOTER,
11172
- elementList: this.draw.getFooterElementList()
11297
+ for (const k in dateOption) {
11298
+ const reg = new RegExp("(" + k + ")").exec(format);
11299
+ const key = k;
11300
+ if (reg) {
11301
+ dateString = dateString.replace(reg[1], reg[1].length === 1 ? dateOption[key] : dateOption[key].padStart(reg[1].length, "0"));
11173
11302
  }
11174
- ];
11175
- for (const { zone: zone2, elementList } of data2) {
11176
- getValue(elementList, zone2);
11177
11303
  }
11178
- return result;
11304
+ return dateString;
11179
11305
  }
11180
- setValueByConceptId(payload) {
11181
- const isReadonly = this.draw.isReadonly();
11182
- if (isReadonly)
11183
- return;
11184
- let isExistSet = false;
11185
- const { conceptId, value } = payload;
11186
- const setValue = (elementList) => {
11187
- var _a;
11188
- let i = 0;
11189
- while (i < elementList.length) {
11190
- const element = elementList[i];
11191
- i++;
11192
- if (element.type === ElementType.TABLE) {
11193
- const trList = element.trList;
11194
- for (let r = 0; r < trList.length; r++) {
11195
- const tr = trList[r];
11196
- for (let d = 0; d < tr.tdList.length; d++) {
11197
- const td = tr.tdList[d];
11198
- setValue(td.value);
11199
- }
11200
- }
11201
- }
11202
- if (((_a = element == null ? void 0 : element.control) == null ? void 0 : _a.conceptId) !== conceptId)
11203
- continue;
11204
- isExistSet = true;
11205
- const { type } = element.control;
11206
- let currentEndIndex = i;
11207
- while (currentEndIndex < elementList.length) {
11208
- const nextElement = elementList[currentEndIndex];
11209
- if (nextElement.controlId !== element.controlId)
11210
- break;
11211
- currentEndIndex++;
11212
- }
11213
- const fakeRange = {
11214
- startIndex: i - 1,
11215
- endIndex: currentEndIndex - 2
11216
- };
11217
- const controlContext = {
11218
- range: fakeRange,
11219
- elementList
11220
- };
11221
- const controlRule = {
11222
- isIgnoreDisabledRule: true
11223
- };
11224
- if (type === ControlType.TEXT) {
11225
- const formatValue = [{ value }];
11226
- formatElementList(formatValue, {
11227
- isHandleFirstElement: false,
11228
- editorOptions: this.options
11229
- });
11230
- const text = new TextControl(element, this);
11231
- if (value) {
11232
- text.setValue(formatValue, controlContext, controlRule);
11233
- } else {
11234
- text.clearValue(controlContext, controlRule);
11235
- }
11236
- } else if (type === ControlType.SELECT) {
11237
- const select = new SelectControl(element, this);
11238
- if (value) {
11239
- select.setSelect(value, controlContext, controlRule);
11240
- } else {
11241
- select.clearSelect(controlContext, controlRule);
11242
- }
11243
- } else if (type === ControlType.CHECKBOX) {
11244
- const checkbox = new CheckboxControl(element, this);
11245
- const codes = (value == null ? void 0 : value.split(",")) || [];
11246
- checkbox.setSelect(codes, controlContext, controlRule);
11247
- } else if (type === ControlType.RADIO) {
11248
- const radio = new RadioControl(element, this);
11249
- const codes = value ? [value] : [];
11250
- radio.setSelect(codes, controlContext, controlRule);
11251
- }
11252
- let newEndIndex = i;
11253
- while (newEndIndex < elementList.length) {
11254
- const nextElement = elementList[newEndIndex];
11255
- if (nextElement.controlId !== element.controlId)
11256
- break;
11257
- newEndIndex++;
11258
- }
11259
- i = newEndIndex;
11306
+ render(option) {
11307
+ this.renderOptions = option;
11308
+ this.lang = this._getLang();
11309
+ this._setLangChange();
11310
+ this._setValue();
11311
+ this._update();
11312
+ this._setPosition();
11313
+ this.isDatePicker = true;
11314
+ this._toggleDateTimePicker();
11315
+ this._toggleVisible(true);
11316
+ }
11317
+ dispose() {
11318
+ this._toggleVisible(false);
11319
+ }
11320
+ destroy() {
11321
+ this.dom.container.remove();
11322
+ }
11323
+ }
11324
+ class DateControl {
11325
+ constructor(element, control) {
11326
+ __publicField(this, "draw");
11327
+ __publicField(this, "element");
11328
+ __publicField(this, "control");
11329
+ __publicField(this, "isPopup");
11330
+ __publicField(this, "datePicker");
11331
+ const draw = control.getDraw();
11332
+ this.draw = draw;
11333
+ this.element = element;
11334
+ this.control = control;
11335
+ this.isPopup = false;
11336
+ this.datePicker = null;
11337
+ }
11338
+ setElement(element) {
11339
+ this.element = element;
11340
+ }
11341
+ getElement() {
11342
+ return this.element;
11343
+ }
11344
+ getIsPopup() {
11345
+ return this.isPopup;
11346
+ }
11347
+ getValueRange(context = {}) {
11348
+ const elementList = context.elementList || this.control.getElementList();
11349
+ const { startIndex } = context.range || this.control.getRange();
11350
+ const startElement = elementList[startIndex];
11351
+ let preIndex = startIndex;
11352
+ while (preIndex > 0) {
11353
+ const preElement = elementList[preIndex];
11354
+ if (preElement.controlId !== startElement.controlId || preElement.controlComponent === ControlComponent.PREFIX) {
11355
+ break;
11260
11356
  }
11261
- };
11262
- const data2 = [
11263
- this.draw.getHeaderElementList(),
11264
- this.draw.getOriginalMainElementList(),
11265
- this.draw.getFooterElementList()
11266
- ];
11267
- for (const elementList of data2) {
11268
- setValue(elementList);
11357
+ preIndex--;
11269
11358
  }
11270
- if (isExistSet) {
11271
- this.draw.render({
11272
- isSetCursor: false
11273
- });
11359
+ let nextIndex = startIndex + 1;
11360
+ while (nextIndex < elementList.length) {
11361
+ const nextElement = elementList[nextIndex];
11362
+ if (nextElement.controlId !== startElement.controlId || nextElement.controlComponent === ControlComponent.POSTFIX) {
11363
+ break;
11364
+ }
11365
+ nextIndex++;
11274
11366
  }
11367
+ if (preIndex === nextIndex)
11368
+ return null;
11369
+ return [preIndex, nextIndex - 1];
11275
11370
  }
11276
- setExtensionByConceptId(payload) {
11277
- const isReadonly = this.draw.isReadonly();
11278
- if (isReadonly)
11279
- return;
11280
- const { conceptId, extension } = payload;
11281
- const setExtension = (elementList) => {
11282
- var _a;
11283
- let i = 0;
11284
- while (i < elementList.length) {
11285
- const element = elementList[i];
11286
- i++;
11287
- if (element.type === ElementType.TABLE) {
11288
- const trList = element.trList;
11289
- for (let r = 0; r < trList.length; r++) {
11290
- const tr = trList[r];
11291
- for (let d = 0; d < tr.tdList.length; d++) {
11292
- const td = tr.tdList[d];
11293
- setExtension(td.value);
11294
- }
11295
- }
11296
- }
11297
- if (((_a = element == null ? void 0 : element.control) == null ? void 0 : _a.conceptId) !== conceptId)
11298
- continue;
11299
- element.control.extension = extension;
11300
- let newEndIndex = i;
11301
- while (newEndIndex < elementList.length) {
11302
- const nextElement = elementList[newEndIndex];
11303
- if (nextElement.controlId !== element.controlId)
11304
- break;
11305
- newEndIndex++;
11306
- }
11307
- i = newEndIndex;
11371
+ getValue(context = {}) {
11372
+ const elementList = context.elementList || this.control.getElementList();
11373
+ const range = this.getValueRange(context);
11374
+ if (!range)
11375
+ return [];
11376
+ const data2 = [];
11377
+ const [startIndex, endIndex] = range;
11378
+ for (let i = startIndex; i <= endIndex; i++) {
11379
+ const element = elementList[i];
11380
+ if (element.controlComponent === ControlComponent.VALUE) {
11381
+ data2.push(element);
11308
11382
  }
11309
- };
11310
- const data2 = [
11311
- this.draw.getHeaderElementList(),
11312
- this.draw.getOriginalMainElementList(),
11313
- this.draw.getFooterElementList()
11314
- ];
11315
- for (const elementList of data2) {
11316
- setExtension(elementList);
11317
11383
  }
11384
+ return data2;
11318
11385
  }
11319
- setPropertiesByConceptId(payload) {
11320
- var _a;
11321
- const isReadonly = this.draw.isReadonly();
11322
- if (isReadonly)
11386
+ setValue(data2, context = {}, options = {}) {
11387
+ if (!options.isIgnoreDisabledRule && this.control.getIsDisabledControl()) {
11388
+ return -1;
11389
+ }
11390
+ const elementList = context.elementList || this.control.getElementList();
11391
+ const range = context.range || this.control.getRange();
11392
+ this.control.shrinkBoundary(context);
11393
+ const { startIndex, endIndex } = range;
11394
+ const draw = this.control.getDraw();
11395
+ if (startIndex !== endIndex) {
11396
+ draw.spliceElementList(elementList, startIndex + 1, endIndex - startIndex);
11397
+ } else {
11398
+ this.control.removePlaceholder(startIndex, context);
11399
+ }
11400
+ const startElement = elementList[startIndex];
11401
+ const anchorElement = startElement.type && !TEXTLIKE_ELEMENT_TYPE.includes(startElement.type) || startElement.controlComponent === ControlComponent.PREFIX ? pickObject(startElement, [
11402
+ "control",
11403
+ "controlId",
11404
+ ...CONTROL_STYLE_ATTR
11405
+ ]) : omitObject(startElement, ["type"]);
11406
+ const start = range.startIndex + 1;
11407
+ for (let i = 0; i < data2.length; i++) {
11408
+ const newElement = __spreadProps(__spreadValues(__spreadValues({}, anchorElement), data2[i]), {
11409
+ controlComponent: ControlComponent.VALUE
11410
+ });
11411
+ formatElementContext(elementList, [newElement], startIndex);
11412
+ draw.spliceElementList(elementList, start + i, 0, newElement);
11413
+ }
11414
+ return start + data2.length - 1;
11415
+ }
11416
+ clearSelect(context = {}, options = {}) {
11417
+ const { isIgnoreDisabledRule = false, isAddPlaceholder = true } = options;
11418
+ if (!isIgnoreDisabledRule && this.control.getIsDisabledControl()) {
11419
+ return -1;
11420
+ }
11421
+ const range = this.getValueRange(context);
11422
+ if (!range)
11423
+ return -1;
11424
+ const [leftIndex, rightIndex] = range;
11425
+ if (!~leftIndex || !~rightIndex)
11426
+ return -1;
11427
+ const elementList = context.elementList || this.control.getElementList();
11428
+ const draw = this.control.getDraw();
11429
+ draw.spliceElementList(elementList, leftIndex + 1, rightIndex - leftIndex);
11430
+ if (isAddPlaceholder) {
11431
+ this.control.addPlaceholder(leftIndex, context);
11432
+ }
11433
+ return leftIndex;
11434
+ }
11435
+ setSelect(date, context = {}, options = {}) {
11436
+ if (!options.isIgnoreDisabledRule && this.control.getIsDisabledControl()) {
11323
11437
  return;
11324
- const { conceptId, properties } = payload;
11325
- let isExistUpdate = false;
11326
- const pageComponentData = {
11327
- header: this.draw.getHeaderElementList(),
11328
- main: this.draw.getOriginalMainElementList(),
11329
- footer: this.draw.getFooterElementList()
11330
- };
11331
- for (const key in pageComponentData) {
11332
- const elementList = pageComponentData[key];
11333
- let i = 0;
11334
- while (i < elementList.length) {
11335
- const element = elementList[i];
11336
- i++;
11337
- if (((_a = element == null ? void 0 : element.control) == null ? void 0 : _a.conceptId) !== conceptId)
11338
- continue;
11339
- isExistUpdate = true;
11340
- element.control = __spreadProps(__spreadValues(__spreadValues({}, element.control), properties), {
11341
- value: element.control.value
11342
- });
11343
- let newEndIndex = i;
11344
- while (newEndIndex < elementList.length) {
11345
- const nextElement = elementList[newEndIndex];
11346
- if (nextElement.controlId !== element.controlId)
11347
- break;
11348
- newEndIndex++;
11349
- }
11350
- i = newEndIndex;
11351
- }
11352
11438
  }
11353
- if (!isExistUpdate)
11439
+ const elementList = context.elementList || this.control.getElementList();
11440
+ const range = context.range || this.control.getRange();
11441
+ const valueElement = this.getValue(context)[0];
11442
+ const styleElement = valueElement ? pickObject(valueElement, EDITOR_ELEMENT_STYLE_ATTR) : pickObject(elementList[range.startIndex], CONTROL_STYLE_ATTR);
11443
+ const prefixIndex = this.clearSelect(context, {
11444
+ isAddPlaceholder: false
11445
+ });
11446
+ if (!~prefixIndex)
11354
11447
  return;
11355
- for (const key in pageComponentData) {
11356
- const pageComponentKey = key;
11357
- const elementList = zipElementList(pageComponentData[pageComponentKey]);
11358
- pageComponentData[pageComponentKey] = elementList;
11359
- formatElementList(elementList, {
11360
- editorOptions: this.options
11448
+ const propertyElement = omitObject(elementList[prefixIndex], EDITOR_ELEMENT_STYLE_ATTR);
11449
+ const start = prefixIndex + 1;
11450
+ const draw = this.control.getDraw();
11451
+ for (let i = 0; i < date.length; i++) {
11452
+ const newElement = __spreadProps(__spreadValues(__spreadValues({}, styleElement), propertyElement), {
11453
+ type: ElementType.TEXT,
11454
+ value: date[i],
11455
+ controlComponent: ControlComponent.VALUE
11361
11456
  });
11457
+ formatElementContext(elementList, [newElement], prefixIndex);
11458
+ draw.spliceElementList(elementList, start + i, 0, newElement);
11459
+ }
11460
+ if (!context.range) {
11461
+ const newIndex = start + date.length - 1;
11462
+ this.control.repaintControl({
11463
+ curIndex: newIndex
11464
+ });
11465
+ this.destroy();
11362
11466
  }
11363
- this.draw.setEditorData(pageComponentData);
11364
- this.draw.render({
11365
- isSetCursor: false
11366
- });
11367
11467
  }
11368
- getList() {
11369
- const data2 = [
11370
- this.draw.getHeader().getElementList(),
11371
- this.draw.getOriginalMainElementList(),
11372
- this.draw.getFooter().getElementList()
11373
- ];
11374
- const controlElementList = [];
11375
- for (const elementList of data2) {
11376
- for (let e = 0; e < elementList.length; e++) {
11377
- const element = elementList[e];
11378
- if (element.controlId) {
11379
- controlElementList.push(element);
11468
+ keydown(evt) {
11469
+ if (this.control.getIsDisabledControl()) {
11470
+ return null;
11471
+ }
11472
+ const elementList = this.control.getElementList();
11473
+ const range = this.control.getRange();
11474
+ this.control.shrinkBoundary();
11475
+ const { startIndex, endIndex } = range;
11476
+ const startElement = elementList[startIndex];
11477
+ const endElement = elementList[endIndex];
11478
+ const draw = this.control.getDraw();
11479
+ if (evt.key === KeyMap.Backspace) {
11480
+ if (startIndex !== endIndex) {
11481
+ draw.spliceElementList(elementList, startIndex + 1, endIndex - startIndex);
11482
+ const value = this.getValue();
11483
+ if (!value.length) {
11484
+ this.control.addPlaceholder(startIndex);
11485
+ }
11486
+ return startIndex;
11487
+ } else {
11488
+ if (startElement.controlComponent === ControlComponent.PREFIX || endElement.controlComponent === ControlComponent.POSTFIX || startElement.controlComponent === ControlComponent.PLACEHOLDER) {
11489
+ return this.control.removeControl(startIndex);
11490
+ } else {
11491
+ draw.spliceElementList(elementList, startIndex, 1);
11492
+ const value = this.getValue();
11493
+ if (!value.length) {
11494
+ this.control.addPlaceholder(startIndex - 1);
11495
+ }
11496
+ return startIndex - 1;
11497
+ }
11498
+ }
11499
+ } else if (evt.key === KeyMap.Delete) {
11500
+ if (startIndex !== endIndex) {
11501
+ draw.spliceElementList(elementList, startIndex + 1, endIndex - startIndex);
11502
+ const value = this.getValue();
11503
+ if (!value.length) {
11504
+ this.control.addPlaceholder(startIndex);
11505
+ }
11506
+ return startIndex;
11507
+ } else {
11508
+ const endNextElement = elementList[endIndex + 1];
11509
+ if (startElement.controlComponent === ControlComponent.PREFIX && endNextElement.controlComponent === ControlComponent.PLACEHOLDER || endNextElement.controlComponent === ControlComponent.POSTFIX || startElement.controlComponent === ControlComponent.PLACEHOLDER) {
11510
+ return this.control.removeControl(startIndex);
11511
+ } else {
11512
+ draw.spliceElementList(elementList, startIndex + 1, 1);
11513
+ const value = this.getValue();
11514
+ if (!value.length) {
11515
+ this.control.addPlaceholder(startIndex);
11516
+ }
11517
+ return startIndex;
11380
11518
  }
11381
11519
  }
11382
11520
  }
11383
- return zipElementList(controlElementList);
11384
- }
11385
- recordBorderInfo(x, y, width, height) {
11386
- this.controlBorder.recordBorderInfo(x, y, width, height);
11387
- }
11388
- drawBorder(ctx) {
11389
- this.controlBorder.render(ctx);
11390
- }
11391
- }
11392
- class CheckboxParticle {
11393
- constructor(draw) {
11394
- __publicField(this, "draw");
11395
- __publicField(this, "options");
11396
- this.draw = draw;
11397
- this.options = draw.getOptions();
11521
+ return endIndex;
11398
11522
  }
11399
- setSelect(element) {
11400
- const { checkbox } = element;
11401
- if (checkbox) {
11402
- checkbox.value = !checkbox.value;
11403
- } else {
11404
- element.checkbox = {
11405
- value: true
11406
- };
11523
+ cut() {
11524
+ if (this.control.getIsDisabledControl()) {
11525
+ return -1;
11407
11526
  }
11408
- this.draw.render({
11409
- isCompute: false,
11410
- isSetCursor: false
11411
- });
11527
+ this.control.shrinkBoundary();
11528
+ const { startIndex, endIndex } = this.control.getRange();
11529
+ if (startIndex === endIndex) {
11530
+ return startIndex;
11531
+ }
11532
+ const draw = this.control.getDraw();
11533
+ const elementList = this.control.getElementList();
11534
+ draw.spliceElementList(elementList, startIndex + 1, endIndex - startIndex);
11535
+ const value = this.getValue();
11536
+ if (!value.length) {
11537
+ this.control.addPlaceholder(startIndex);
11538
+ }
11539
+ return startIndex;
11412
11540
  }
11413
- render(ctx, element, x, y) {
11414
- const { checkbox: { gap, lineWidth, fillStyle, strokeStyle }, scale } = this.options;
11415
- const { metrics, checkbox } = element;
11416
- const left2 = Math.round(x + gap * scale);
11417
- const top = Math.round(y - metrics.height + lineWidth);
11418
- const width = metrics.width - gap * 2 * scale;
11419
- const height = metrics.height;
11420
- ctx.save();
11421
- ctx.beginPath();
11422
- ctx.translate(0.5, 0.5);
11423
- if (checkbox == null ? void 0 : checkbox.value) {
11424
- ctx.lineWidth = lineWidth;
11425
- ctx.strokeStyle = fillStyle;
11426
- ctx.rect(left2, top, width, height);
11427
- ctx.stroke();
11428
- ctx.beginPath();
11429
- ctx.fillStyle = fillStyle;
11430
- ctx.fillRect(left2, top, width, height);
11431
- ctx.beginPath();
11432
- ctx.strokeStyle = strokeStyle;
11433
- ctx.lineWidth = lineWidth * 2 * scale;
11434
- ctx.moveTo(left2 + 2 * scale, top + height / 2);
11435
- ctx.lineTo(left2 + width / 2, top + height - 3 * scale);
11436
- ctx.lineTo(left2 + width - 2 * scale, top + 3 * scale);
11437
- ctx.stroke();
11541
+ awake() {
11542
+ var _a, _b;
11543
+ if (this.isPopup || this.control.getIsDisabledControl())
11544
+ return;
11545
+ const position = this.control.getPosition();
11546
+ if (!position)
11547
+ return;
11548
+ const elementList = this.draw.getElementList();
11549
+ const { startIndex } = this.control.getRange();
11550
+ if (((_a = elementList[startIndex + 1]) == null ? void 0 : _a.controlId) !== this.element.controlId) {
11551
+ return;
11552
+ }
11553
+ this.datePicker = new DatePicker(this.draw, {
11554
+ onSubmit: this._setDate.bind(this)
11555
+ });
11556
+ const value = this.getValue().map((el) => el.value).join("") || "";
11557
+ const dateFormat = (_b = this.element.control) == null ? void 0 : _b.dateFormat;
11558
+ this.datePicker.render({
11559
+ value,
11560
+ position,
11561
+ dateFormat
11562
+ });
11563
+ this.isPopup = true;
11564
+ }
11565
+ destroy() {
11566
+ var _a;
11567
+ if (!this.isPopup)
11568
+ return;
11569
+ (_a = this.datePicker) == null ? void 0 : _a.destroy();
11570
+ this.isPopup = false;
11571
+ }
11572
+ _setDate(date) {
11573
+ if (!date) {
11574
+ this.clearSelect();
11438
11575
  } else {
11439
- ctx.lineWidth = lineWidth;
11440
- ctx.rect(left2, top, width, height);
11441
- ctx.stroke();
11576
+ this.setSelect(date);
11442
11577
  }
11443
- ctx.closePath();
11444
- ctx.restore();
11578
+ this.destroy();
11445
11579
  }
11446
11580
  }
11447
- class RadioParticle {
11581
+ class Control {
11448
11582
  constructor(draw) {
11583
+ __publicField(this, "controlBorder");
11449
11584
  __publicField(this, "draw");
11585
+ __publicField(this, "range");
11586
+ __publicField(this, "listener");
11587
+ __publicField(this, "eventBus");
11588
+ __publicField(this, "controlSearch");
11450
11589
  __publicField(this, "options");
11590
+ __publicField(this, "controlOptions");
11591
+ __publicField(this, "activeControl");
11592
+ this.controlBorder = new ControlBorder(draw);
11451
11593
  this.draw = draw;
11594
+ this.range = draw.getRange();
11595
+ this.listener = draw.getListener();
11596
+ this.eventBus = draw.getEventBus();
11597
+ this.controlSearch = new ControlSearch(this);
11452
11598
  this.options = draw.getOptions();
11599
+ this.controlOptions = this.options.control;
11600
+ this.activeControl = null;
11453
11601
  }
11454
- setSelect(element) {
11455
- const { radio } = element;
11456
- if (radio) {
11457
- radio.value = !radio.value;
11458
- } else {
11459
- element.radio = {
11460
- value: true
11461
- };
11602
+ setHighlightList(payload) {
11603
+ this.controlSearch.setHighlightList(payload);
11604
+ }
11605
+ computeHighlightList() {
11606
+ const highlightList = this.controlSearch.getHighlightList();
11607
+ if (highlightList.length) {
11608
+ this.controlSearch.computeHighlightList();
11462
11609
  }
11463
- this.draw.render({
11464
- isCompute: false,
11465
- isSetCursor: false
11466
- });
11467
11610
  }
11468
- render(ctx, element, x, y) {
11469
- const { radio: { gap, lineWidth, fillStyle, strokeStyle }, scale } = this.options;
11470
- const { metrics, radio } = element;
11471
- const left2 = Math.round(x + gap * scale);
11472
- const top = Math.round(y - metrics.height + lineWidth);
11473
- const width = metrics.width - gap * 2 * scale;
11474
- const height = metrics.height;
11475
- ctx.save();
11476
- ctx.beginPath();
11477
- ctx.translate(0.5, 0.5);
11478
- ctx.strokeStyle = (radio == null ? void 0 : radio.value) ? fillStyle : strokeStyle;
11479
- ctx.lineWidth = lineWidth;
11480
- ctx.arc(left2 + width / 2, top + height / 2, width / 2, 0, Math.PI * 2);
11481
- ctx.stroke();
11482
- if (radio == null ? void 0 : radio.value) {
11483
- ctx.beginPath();
11484
- ctx.fillStyle = fillStyle;
11485
- ctx.arc(left2 + width / 2, top + height / 2, width / 3, 0, Math.PI * 2);
11486
- ctx.fill();
11611
+ renderHighlightList(ctx, pageNo) {
11612
+ const highlightMatchResult = this.controlSearch.getHighlightMatchResult();
11613
+ if (highlightMatchResult.length) {
11614
+ this.controlSearch.renderHighlightList(ctx, pageNo);
11487
11615
  }
11488
- ctx.closePath();
11489
- ctx.restore();
11490
11616
  }
11491
- }
11492
- const encodedJs$2 = "KCgpPT57KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBmOyhmdW5jdGlvbih0KXt0LlRFWFQ9InRleHQiLHQuVEFCTEU9InRhYmxlIix0LkhZUEVSTElOSz0iaHlwZXJsaW5rIix0LkNPTlRST0w9ImNvbnRyb2wifSkoZnx8KGY9e30pKTt2YXIgcDsoZnVuY3Rpb24odCl7dC5WQUxVRT0idmFsdWUifSkocHx8KHA9e30pKTtjb25zdCBoPSJcdTIwMEIiLGc9YApgO2Z1bmN0aW9uIGEodCl7bGV0IGw9IiIsbj0wO2Zvcig7bjx0Lmxlbmd0aDspe2NvbnN0IG89dFtuXTtpZihvLnR5cGU9PT1mLlRBQkxFKXtpZihvLnRyTGlzdClmb3IobGV0IHI9MDtyPG8udHJMaXN0Lmxlbmd0aDtyKyspe2NvbnN0IHM9by50ckxpc3Rbcl07Zm9yKGxldCBlPTA7ZTxzLnRkTGlzdC5sZW5ndGg7ZSsrKXtjb25zdCBpPXMudGRMaXN0W2VdO2wrPWEoaS52YWx1ZSl9fX1lbHNlIGlmKG8udHlwZT09PWYuSFlQRVJMSU5LKXtjb25zdCByPW8uaHlwZXJsaW5rSWQscz1bXTtmb3IoO248dC5sZW5ndGg7KXtjb25zdCBlPXRbbl07aWYociE9PWUuaHlwZXJsaW5rSWQpe24tLTticmVha31kZWxldGUgZS50eXBlLHMucHVzaChlKSxuKyt9bCs9YShzKX1lbHNlIGlmKG8uY29udHJvbElkKXtjb25zdCByPW8uY29udHJvbElkLHM9W107Zm9yKDtuPHQubGVuZ3RoOyl7Y29uc3QgZT10W25dO2lmKHIhPT1lLmNvbnRyb2xJZCl7bi0tO2JyZWFrfWUuY29udHJvbENvbXBvbmVudD09PXAuVkFMVUUmJihkZWxldGUgZS5jb250cm9sSWQscy5wdXNoKGUpKSxuKyt9bCs9YShzKX1lbHNlKCFvLnR5cGV8fG8udHlwZT09PWYuVEVYVCkmJihsKz1vLnZhbHVlKTtuKyt9cmV0dXJuIGx9ZnVuY3Rpb24gZCh0KXtjb25zdCBsPVtdLG49L1swLTldLyxvPS9bQS1aYS16XS8scj0vXHMvO2xldCBzPSExLGU9ITEsaT0iIjtmdW5jdGlvbiB1KCl7aSYmKGwucHVzaChpKSxpPSIiKX1mb3IoY29uc3QgYyBvZiB0KW8udGVzdChjKT8oc3x8dSgpLGkrPWMscz0hMCxlPSExKTpuLnRlc3QoYyk/KGV8fHUoKSxpKz1jLHM9ITEsZT0hMCk6KHUoKSxzPSExLGU9ITEsci50ZXN0KGMpfHxsLnB1c2goYykpO3JldHVybiB1KCksbH1vbm1lc3NhZ2U9dD0+e2NvbnN0IGw9dC5kYXRhLG89YShsKS5yZXBsYWNlKG5ldyBSZWdFeHAoYF4ke2h9YCksIiIpLnJlcGxhY2UobmV3IFJlZ0V4cChoLCJnIiksZykscj1kKG8pO3Bvc3RNZXNzYWdlKHIubGVuZ3RoKX19KSgpO30pKCk7Cg==";
11493
- const blob$2 = typeof window !== "undefined" && window.Blob && new Blob([atob(encodedJs$2)], { type: "text/javascript;charset=utf-8" });
11494
- function WorkerWrapper$2() {
11495
- const objURL = blob$2 && (window.URL || window.webkitURL).createObjectURL(blob$2);
11496
- try {
11497
- return objURL ? new Worker(objURL) : new Worker("data:application/javascript;base64," + encodedJs$2, { type: "module" });
11498
- } finally {
11499
- objURL && (window.URL || window.webkitURL).revokeObjectURL(objURL);
11617
+ getDraw() {
11618
+ return this.draw;
11500
11619
  }
11501
- }
11502
- const encodedJs$1 = "KCgpPT57KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBhOyhmdW5jdGlvbih0KXt0LlRFWFQ9InRleHQiLHQuSU1BR0U9ImltYWdlIix0LlRBQkxFPSJ0YWJsZSIsdC5IWVBFUkxJTks9Imh5cGVybGluayIsdC5TVVBFUlNDUklQVD0ic3VwZXJzY3JpcHQiLHQuU1VCU0NSSVBUPSJzdWJzY3JpcHQiLHQuU0VQQVJBVE9SPSJzZXBhcmF0b3IiLHQuUEFHRV9CUkVBSz0icGFnZUJyZWFrIix0LkNPTlRST0w9ImNvbnRyb2wiLHQuQ0hFQ0tCT1g9ImNoZWNrYm94Iix0LlJBRElPPSJyYWRpbyIsdC5MQVRFWD0ibGF0ZXgiLHQuVEFCPSJ0YWIiLHQuREFURT0iZGF0ZSIsdC5CTE9DSz0iYmxvY2siLHQuVElUTEU9InRpdGxlIix0LkxJU1Q9Imxpc3QifSkoYXx8KGE9e30pKTt2YXIgYzsoZnVuY3Rpb24odCl7dC5GSVJTVD0iZmlyc3QiLHQuU0VDT05EPSJzZWNvbmQiLHQuVEhJUkQ9InRoaXJkIix0LkZPVVJUSD0iZm91cnRoIix0LkZJRlRIPSJmaWZ0aCIsdC5TSVhUSD0ic2l4dGgifSkoY3x8KGM9e30pKTtjb25zdCBJPXtbYy5GSVJTVF06MSxbYy5TRUNPTkRdOjIsW2MuVEhJUkRdOjMsW2MuRk9VUlRIXTo0LFtjLkZJRlRIXTo1LFtjLlNJWFRIXTo2fSx2PVthLlRFWFQsYS5IWVBFUkxJTkssYS5TVUJTQ1JJUFQsYS5TVVBFUlNDUklQVCxhLkNPTlRST0wsYS5EQVRFXSxoPSJcdTIwMEIiO2Z1bmN0aW9uIFQodCl7cmV0dXJuIXQudHlwZXx8di5pbmNsdWRlcyh0LnR5cGUpfWZ1bmN0aW9uIGYodCl7Y29uc3QgaT1bXTtsZXQgZT0wO2Zvcig7ZTx0Lmxlbmd0aDspe2NvbnN0IHM9dFtlXTtpZihzLnRpdGxlSWQpe2NvbnN0IG89cy50aXRsZUlkLGw9cy5sZXZlbCxuPXt0eXBlOmEuVElUTEUsdmFsdWU6IiIsbGV2ZWw6bCx0aXRsZUlkOm99LHI9W107Zm9yKDtlPHQubGVuZ3RoOyl7Y29uc3QgdT10W2VdO2lmKG8hPT11LnRpdGxlSWQpe2UtLTticmVha31yLnB1c2godSksZSsrfW4udmFsdWU9ci5maWx0ZXIodT0+VCh1KSkubWFwKHU9PnUudmFsdWUpLmpvaW4oIiIpLnJlcGxhY2UobmV3IFJlZ0V4cChoLCJnIiksIiIpLGkucHVzaChuKX1lKyt9aWYoIWkubGVuZ3RoKXJldHVybiBudWxsO2NvbnN0IGc9KHMsbyk9Pntjb25zdCBsPW8uc3ViQ2F0YWxvZ1tvLnN1YkNhdGFsb2cubGVuZ3RoLTFdLG49SVtsPT1udWxsP3ZvaWQgMDpsLmxldmVsXSxyPUlbcy5sZXZlbF07bCYmcj5uP2cocyxsKTpvLnN1YkNhdGFsb2cucHVzaCh7aWQ6cy50aXRsZUlkLG5hbWU6cy52YWx1ZSxsZXZlbDpzLmxldmVsLHN1YkNhdGFsb2c6W119KX0sUj1bXTtmb3IobGV0IHM9MDtzPGkubGVuZ3RoO3MrKyl7Y29uc3Qgbz1pW3NdLGw9UltSLmxlbmd0aC0xXSxuPUlbbD09bnVsbD92b2lkIDA6bC5sZXZlbF0scj1JW28ubGV2ZWxdO2wmJnI+bj9nKG8sbCk6Ui5wdXNoKHtpZDpvLnRpdGxlSWQsbmFtZTpvLnZhbHVlLGxldmVsOm8ubGV2ZWwsc3ViQ2F0YWxvZzpbXX0pfXJldHVybiBSfW9ubWVzc2FnZT10PT57Y29uc3QgaT10LmRhdGEsZT1mKGkpO3Bvc3RNZXNzYWdlKGUpfX0pKCk7fSkoKTsK";
11503
- const blob$1 = typeof window !== "undefined" && window.Blob && new Blob([atob(encodedJs$1)], { type: "text/javascript;charset=utf-8" });
11504
- function WorkerWrapper$1() {
11505
- const objURL = blob$1 && (window.URL || window.webkitURL).createObjectURL(blob$1);
11506
- try {
11507
- return objURL ? new Worker(objURL) : new Worker("data:application/javascript;base64," + encodedJs$1, { type: "module" });
11508
- } finally {
11509
- objURL && (window.URL || window.webkitURL).revokeObjectURL(objURL);
11620
+ filterAssistElement(elementList) {
11621
+ return elementList.filter((element) => {
11622
+ var _a;
11623
+ if (element.type === ElementType.TABLE) {
11624
+ const trList = element.trList;
11625
+ for (let r = 0; r < trList.length; r++) {
11626
+ const tr = trList[r];
11627
+ for (let d = 0; d < tr.tdList.length; d++) {
11628
+ const td = tr.tdList[d];
11629
+ td.value = this.filterAssistElement(td.value);
11630
+ }
11631
+ }
11632
+ }
11633
+ if (!element.controlId)
11634
+ return true;
11635
+ if ((_a = element.control) == null ? void 0 : _a.minWidth) {
11636
+ if (element.controlComponent === ControlComponent.PREFIX || element.controlComponent === ControlComponent.POSTFIX) {
11637
+ element.value = "";
11638
+ return true;
11639
+ }
11640
+ }
11641
+ return element.controlComponent !== ControlComponent.PREFIX && element.controlComponent !== ControlComponent.POSTFIX && element.controlComponent !== ControlComponent.PLACEHOLDER;
11642
+ });
11510
11643
  }
11511
- }
11512
- const encodedJs = "KCgpPT57KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBuOyhmdW5jdGlvbihvKXtvLlRBQkxFPSJ0YWJsZSJ9KShufHwobj17fSkpO2Z1bmN0aW9uIGMobyl7Y29uc3QgdD1bXTtmb3IoY29uc3QgcyBvZiBvKXtpZihzLnR5cGU9PT1uLlRBQkxFKXtjb25zdCBlPXMudHJMaXN0O2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKXtjb25zdCBpPWVbcl07Zm9yKGxldCB1PTA7dTxpLnRkTGlzdC5sZW5ndGg7dSsrKXtjb25zdCBkPWkudGRMaXN0W3VdO3QucHVzaCguLi5jKGQudmFsdWUpKX19fWlmKCEhcy5ncm91cElkcylmb3IoY29uc3QgZSBvZiBzLmdyb3VwSWRzKXQuaW5jbHVkZXMoZSl8fHQucHVzaChlKX1yZXR1cm4gdH1vbm1lc3NhZ2U9bz0+e2NvbnN0IHQ9by5kYXRhLHM9Yyh0KTtwb3N0TWVzc2FnZShzKX19KSgpO30pKCk7Cg==";
11513
- const blob = typeof window !== "undefined" && window.Blob && new Blob([atob(encodedJs)], { type: "text/javascript;charset=utf-8" });
11514
- function WorkerWrapper() {
11515
- const objURL = blob && (window.URL || window.webkitURL).createObjectURL(blob);
11516
- try {
11517
- return objURL ? new Worker(objURL) : new Worker("data:application/javascript;base64," + encodedJs, { type: "module" });
11518
- } finally {
11519
- objURL && (window.URL || window.webkitURL).revokeObjectURL(objURL);
11644
+ getIsRangeCanCaptureEvent() {
11645
+ if (!this.activeControl)
11646
+ return false;
11647
+ const { startIndex, endIndex } = this.getRange();
11648
+ if (!~startIndex && !~endIndex)
11649
+ return false;
11650
+ const elementList = this.getElementList();
11651
+ const startElement = elementList[startIndex];
11652
+ if (startIndex === endIndex && startElement.controlComponent === ControlComponent.POSTFIX) {
11653
+ return true;
11654
+ }
11655
+ const endElement = elementList[endIndex];
11656
+ if (startElement.controlId && startElement.controlId === endElement.controlId && endElement.controlComponent !== ControlComponent.POSTFIX) {
11657
+ return true;
11658
+ }
11659
+ return false;
11520
11660
  }
11521
- }
11522
- class WorkerManager {
11523
- constructor(draw) {
11524
- __publicField(this, "draw");
11525
- __publicField(this, "wordCountWorker");
11526
- __publicField(this, "catalogWorker");
11527
- __publicField(this, "groupWorker");
11528
- this.draw = draw;
11529
- this.wordCountWorker = new WorkerWrapper$2();
11530
- this.catalogWorker = new WorkerWrapper$1();
11531
- this.groupWorker = new WorkerWrapper();
11661
+ getIsRangeInPostfix() {
11662
+ if (!this.activeControl)
11663
+ return false;
11664
+ const { startIndex, endIndex } = this.getRange();
11665
+ if (startIndex !== endIndex)
11666
+ return false;
11667
+ const elementList = this.getElementList();
11668
+ const element = elementList[startIndex];
11669
+ return element.controlComponent === ControlComponent.POSTFIX;
11532
11670
  }
11533
- getWordCount() {
11534
- return new Promise((resolve, reject) => {
11535
- this.wordCountWorker.onmessage = (evt) => {
11536
- resolve(evt.data);
11537
- };
11538
- this.wordCountWorker.onerror = (evt) => {
11539
- reject(evt);
11540
- };
11541
- const elementList = this.draw.getOriginalMainElementList();
11542
- this.wordCountWorker.postMessage(elementList);
11543
- });
11671
+ getIsRangeWithinControl() {
11672
+ const { startIndex, endIndex } = this.getRange();
11673
+ if (!~startIndex && !~endIndex)
11674
+ return false;
11675
+ const elementList = this.getElementList();
11676
+ const startElement = elementList[startIndex];
11677
+ const endElement = elementList[endIndex];
11678
+ if (startElement.controlId && startElement.controlId === endElement.controlId && endElement.controlComponent !== ControlComponent.POSTFIX) {
11679
+ return true;
11680
+ }
11681
+ return false;
11544
11682
  }
11545
- getCatalog() {
11546
- return new Promise((resolve, reject) => {
11547
- this.catalogWorker.onmessage = (evt) => {
11548
- resolve(evt.data);
11549
- };
11550
- this.catalogWorker.onerror = (evt) => {
11551
- reject(evt);
11552
- };
11553
- const elementList = this.draw.getOriginalMainElementList();
11554
- this.catalogWorker.postMessage(elementList);
11555
- });
11683
+ getIsDisabledControl() {
11684
+ var _a, _b;
11685
+ return !!((_b = (_a = this.activeControl) == null ? void 0 : _a.getElement().control) == null ? void 0 : _b.disabled);
11556
11686
  }
11557
- getGroupIds() {
11558
- return new Promise((resolve, reject) => {
11559
- this.groupWorker.onmessage = (evt) => {
11560
- resolve(evt.data);
11561
- };
11562
- this.groupWorker.onerror = (evt) => {
11563
- reject(evt);
11564
- };
11565
- const elementList = this.draw.getOriginalMainElementList();
11566
- this.groupWorker.postMessage(elementList);
11567
- });
11687
+ getContainer() {
11688
+ return this.draw.getContainer();
11568
11689
  }
11569
- }
11570
- class Previewer {
11571
- constructor(draw) {
11572
- __publicField(this, "container");
11573
- __publicField(this, "canvas");
11574
- __publicField(this, "draw");
11575
- __publicField(this, "options");
11576
- __publicField(this, "curElement");
11577
- __publicField(this, "curElementSrc");
11578
- __publicField(this, "previewerDrawOption");
11579
- __publicField(this, "curPosition");
11580
- __publicField(this, "resizerSelection");
11581
- __publicField(this, "resizerHandleList");
11582
- __publicField(this, "resizerImageContainer");
11583
- __publicField(this, "resizerImage");
11584
- __publicField(this, "resizerSize");
11585
- __publicField(this, "width");
11586
- __publicField(this, "height");
11587
- __publicField(this, "mousedownX");
11588
- __publicField(this, "mousedownY");
11589
- __publicField(this, "curHandleIndex");
11590
- __publicField(this, "previewerContainer");
11591
- __publicField(this, "previewerImage");
11592
- __publicField(this, "_keydown", () => {
11593
- if (this.resizerSelection.style.display === "block") {
11594
- this.clearResizer();
11595
- document.removeEventListener("keydown", this._keydown);
11596
- }
11597
- });
11598
- this.container = draw.getContainer();
11599
- this.canvas = draw.getPage();
11600
- this.draw = draw;
11601
- this.options = draw.getOptions();
11602
- this.curElement = null;
11603
- this.curElementSrc = "";
11604
- this.previewerDrawOption = {};
11605
- this.curPosition = null;
11606
- const { resizerSelection, resizerHandleList, resizerImageContainer, resizerImage, resizerSize } = this._createResizerDom();
11607
- this.resizerSelection = resizerSelection;
11608
- this.resizerHandleList = resizerHandleList;
11609
- this.resizerImageContainer = resizerImageContainer;
11610
- this.resizerImage = resizerImage;
11611
- this.resizerSize = resizerSize;
11612
- this.width = 0;
11613
- this.height = 0;
11614
- this.mousedownX = 0;
11615
- this.mousedownY = 0;
11616
- this.curHandleIndex = 0;
11617
- this.previewerContainer = null;
11618
- this.previewerImage = null;
11690
+ getElementList() {
11691
+ return this.draw.getElementList();
11619
11692
  }
11620
- _getElementPosition(element, position = null) {
11621
- let x = 0;
11622
- let y = 0;
11693
+ getPosition() {
11694
+ const positionList = this.draw.getPosition().getPositionList();
11695
+ const { endIndex } = this.range.getRange();
11696
+ return positionList[endIndex] || null;
11697
+ }
11698
+ getPreY() {
11699
+ var _a, _b;
11623
11700
  const height = this.draw.getHeight();
11624
11701
  const pageGap = this.draw.getPageGap();
11625
- const preY = this.draw.getPageNo() * (height + pageGap);
11626
- if (element.imgFloatPosition) {
11627
- x = element.imgFloatPosition.x;
11628
- y = element.imgFloatPosition.y + preY;
11629
- } else if (position) {
11630
- const { coordinate: { leftTop: [left2, top] }, ascent } = position;
11631
- x = left2;
11632
- y = top + preY + ascent;
11633
- }
11634
- return { x, y };
11702
+ const pageNo = (_b = (_a = this.getPosition()) == null ? void 0 : _a.pageNo) != null ? _b : this.draw.getPageNo();
11703
+ return pageNo * (height + pageGap);
11635
11704
  }
11636
- _createResizerDom() {
11637
- const resizerSelection = document.createElement("div");
11638
- resizerSelection.classList.add(`${EDITOR_PREFIX}-resizer-selection`);
11639
- resizerSelection.style.display = "none";
11640
- resizerSelection.style.borderColor = this.options.resizerColor;
11641
- const resizerHandleList = [];
11642
- for (let i = 0; i < 8; i++) {
11643
- const handleDom = document.createElement("div");
11644
- handleDom.style.background = this.options.resizerColor;
11645
- handleDom.classList.add(`resizer-handle`);
11646
- handleDom.classList.add(`handle-${i}`);
11647
- handleDom.setAttribute("data-index", String(i));
11648
- handleDom.onmousedown = this._mousedown.bind(this);
11649
- resizerSelection.append(handleDom);
11650
- resizerHandleList.push(handleDom);
11651
- }
11652
- this.container.append(resizerSelection);
11653
- const resizerSizeView = document.createElement("div");
11654
- resizerSizeView.classList.add(`${EDITOR_PREFIX}-resizer-size-view`);
11655
- const resizerSize = document.createElement("span");
11656
- resizerSizeView.append(resizerSize);
11657
- resizerSelection.append(resizerSizeView);
11658
- const resizerImageContainer = document.createElement("div");
11659
- resizerImageContainer.classList.add(`${EDITOR_PREFIX}-resizer-image`);
11660
- resizerImageContainer.style.display = "none";
11661
- const resizerImage = document.createElement("img");
11662
- resizerImageContainer.append(resizerImage);
11663
- this.container.append(resizerImageContainer);
11664
- return {
11665
- resizerSelection,
11666
- resizerHandleList,
11667
- resizerImageContainer,
11668
- resizerImage,
11669
- resizerSize
11670
- };
11705
+ getRange() {
11706
+ return this.range.getRange();
11671
11707
  }
11672
- _mousedown(evt) {
11673
- this.canvas = this.draw.getPage();
11674
- if (!this.curElement)
11708
+ shrinkBoundary(context = {}) {
11709
+ this.range.shrinkBoundary(context);
11710
+ }
11711
+ getActiveControl() {
11712
+ return this.activeControl;
11713
+ }
11714
+ initControl() {
11715
+ const isReadonly = this.draw.isReadonly();
11716
+ if (isReadonly)
11675
11717
  return;
11676
- const { scale } = this.options;
11677
- this.mousedownX = evt.x;
11678
- this.mousedownY = evt.y;
11679
- const target = evt.target;
11680
- this.curHandleIndex = Number(target.dataset.index);
11681
- const cursor = window.getComputedStyle(target).cursor;
11682
- document.body.style.cursor = cursor;
11683
- this.canvas.style.cursor = cursor;
11684
- this.resizerImage.src = this.curElementSrc;
11685
- this.resizerImageContainer.style.display = "block";
11686
- const { x: resizerLeft, y: resizerTop } = this._getElementPosition(this.curElement, this.curPosition);
11687
- this.resizerImageContainer.style.left = `${resizerLeft}px`;
11688
- this.resizerImageContainer.style.top = `${resizerTop}px`;
11689
- this.resizerImage.style.width = `${this.curElement.width * scale}px`;
11690
- this.resizerImage.style.height = `${this.curElement.height * scale}px`;
11691
- const mousemoveFn = this._mousemove.bind(this);
11692
- document.addEventListener("mousemove", mousemoveFn);
11693
- document.addEventListener("mouseup", () => {
11718
+ const elementList = this.getElementList();
11719
+ const range = this.getRange();
11720
+ const element = elementList[range.startIndex];
11721
+ if (this.activeControl) {
11722
+ if (this.activeControl instanceof SelectControl || this.activeControl instanceof DateControl) {
11723
+ if (element.controlComponent === ControlComponent.POSTFIX) {
11724
+ this.activeControl.destroy();
11725
+ } else {
11726
+ this.activeControl.awake();
11727
+ }
11728
+ }
11729
+ const controlElement = this.activeControl.getElement();
11730
+ if (element.controlId === controlElement.controlId)
11731
+ return;
11732
+ }
11733
+ this.destroyControl();
11734
+ const control = element.control;
11735
+ if (control.type === ControlType.TEXT) {
11736
+ this.activeControl = new TextControl(element, this);
11737
+ } else if (control.type === ControlType.SELECT) {
11738
+ const selectControl = new SelectControl(element, this);
11739
+ this.activeControl = selectControl;
11740
+ selectControl.awake();
11741
+ } else if (control.type === ControlType.CHECKBOX) {
11742
+ this.activeControl = new CheckboxControl(element, this);
11743
+ } else if (control.type === ControlType.RADIO) {
11744
+ this.activeControl = new RadioControl(element, this);
11745
+ } else if (control.type === ControlType.DATE) {
11746
+ const dateControl = new DateControl(element, this);
11747
+ this.activeControl = dateControl;
11748
+ dateControl.awake();
11749
+ }
11750
+ nextTick(() => {
11694
11751
  var _a;
11695
- if (this.curElement) {
11696
- this.curElement.width = this.width;
11697
- this.curElement.height = this.height;
11698
- this.draw.render({
11699
- isSetCursor: true,
11700
- curIndex: (_a = this.curPosition) == null ? void 0 : _a.index
11701
- });
11752
+ const controlChangeListener = this.listener.controlChange;
11753
+ const isSubscribeControlChange = this.eventBus.isSubscribe("controlChange");
11754
+ if (!controlChangeListener && !isSubscribeControlChange)
11755
+ return;
11756
+ let payload;
11757
+ const value = (_a = this.activeControl) == null ? void 0 : _a.getValue();
11758
+ if (value && value.length) {
11759
+ payload = zipElementList(value)[0].control;
11760
+ } else {
11761
+ payload = pickElementAttr(deepClone(element)).control;
11762
+ }
11763
+ if (controlChangeListener) {
11764
+ controlChangeListener(payload);
11765
+ }
11766
+ if (isSubscribeControlChange) {
11767
+ this.eventBus.emit("controlChange", payload);
11702
11768
  }
11703
- this.resizerImageContainer.style.display = "none";
11704
- document.removeEventListener("mousemove", mousemoveFn);
11705
- document.body.style.cursor = "";
11706
- this.canvas.style.cursor = "text";
11707
- }, {
11708
- once: true
11709
11769
  });
11710
- evt.preventDefault();
11711
11770
  }
11712
- _mousemove(evt) {
11713
- if (!this.curElement)
11714
- return;
11715
- const { scale } = this.options;
11716
- let dx = 0;
11717
- let dy = 0;
11718
- switch (this.curHandleIndex) {
11719
- case 0:
11720
- {
11721
- const offsetX = this.mousedownX - evt.x;
11722
- const offsetY = this.mousedownY - evt.y;
11723
- dx = Math.cbrt(offsetX ** 3 + offsetY ** 3);
11724
- dy = this.curElement.height * dx / this.curElement.width;
11725
- }
11726
- break;
11727
- case 1:
11728
- dy = this.mousedownY - evt.y;
11729
- break;
11730
- case 2:
11731
- {
11732
- const offsetX = evt.x - this.mousedownX;
11733
- const offsetY = this.mousedownY - evt.y;
11734
- dx = Math.cbrt(offsetX ** 3 + offsetY ** 3);
11735
- dy = this.curElement.height * dx / this.curElement.width;
11736
- }
11737
- break;
11738
- case 4:
11739
- {
11740
- const offsetX = evt.x - this.mousedownX;
11741
- const offsetY = evt.y - this.mousedownY;
11742
- dx = Math.cbrt(offsetX ** 3 + offsetY ** 3);
11743
- dy = this.curElement.height * dx / this.curElement.width;
11771
+ destroyControl() {
11772
+ if (this.activeControl) {
11773
+ if (this.activeControl instanceof SelectControl || this.activeControl instanceof DateControl) {
11774
+ this.activeControl.destroy();
11775
+ }
11776
+ this.activeControl = null;
11777
+ nextTick(() => {
11778
+ const controlChangeListener = this.listener.controlChange;
11779
+ const isSubscribeControlChange = this.eventBus.isSubscribe("controlChange");
11780
+ if (!controlChangeListener && !isSubscribeControlChange)
11781
+ return;
11782
+ if (controlChangeListener) {
11783
+ controlChangeListener(null);
11744
11784
  }
11745
- break;
11746
- case 3:
11747
- dx = evt.x - this.mousedownX;
11748
- break;
11749
- case 5:
11750
- dy = evt.y - this.mousedownY;
11751
- break;
11752
- case 6:
11753
- {
11754
- const offsetX = this.mousedownX - evt.x;
11755
- const offsetY = evt.y - this.mousedownY;
11756
- dx = Math.cbrt(offsetX ** 3 + offsetY ** 3);
11757
- dy = this.curElement.height * dx / this.curElement.width;
11785
+ if (isSubscribeControlChange) {
11786
+ this.eventBus.emit("controlChange", null);
11758
11787
  }
11759
- break;
11760
- case 7:
11761
- dx = this.mousedownX - evt.x;
11762
- break;
11788
+ });
11763
11789
  }
11764
- const dw = this.curElement.width + dx / scale;
11765
- const dh = this.curElement.height + dy / scale;
11766
- if (dw <= 0 || dh <= 0)
11767
- return;
11768
- this.width = dw;
11769
- this.height = dh;
11770
- const elementWidth = dw * scale;
11771
- const elementHeight = dh * scale;
11772
- this.resizerImage.style.width = `${elementWidth}px`;
11773
- this.resizerImage.style.height = `${elementHeight}px`;
11774
- this._updateResizerRect(elementWidth, elementHeight);
11775
- this._updateResizerSizeView(elementWidth, elementHeight);
11776
- evt.preventDefault();
11777
11790
  }
11778
- _drawPreviewer() {
11779
- const previewerContainer = document.createElement("div");
11780
- previewerContainer.classList.add(`${EDITOR_PREFIX}-image-previewer`);
11781
- const closeBtn = document.createElement("i");
11782
- closeBtn.classList.add("image-close");
11783
- closeBtn.onclick = () => {
11784
- this._clearPreviewer();
11785
- };
11786
- previewerContainer.append(closeBtn);
11787
- const imgContainer = document.createElement("div");
11788
- imgContainer.classList.add(`${EDITOR_PREFIX}-image-container`);
11789
- const img = document.createElement("img");
11790
- img.src = this.curElementSrc;
11791
- img.draggable = false;
11792
- imgContainer.append(img);
11793
- this.previewerImage = img;
11794
- previewerContainer.append(imgContainer);
11795
- let x = 0;
11796
- let y = 0;
11797
- let scaleSize = 1;
11798
- let rotateSize = 0;
11799
- const menuContainer = document.createElement("div");
11800
- menuContainer.classList.add(`${EDITOR_PREFIX}-image-menu`);
11801
- const zoomIn = document.createElement("i");
11802
- zoomIn.classList.add("zoom-in");
11803
- zoomIn.onclick = () => {
11804
- scaleSize += 0.1;
11805
- this._setPreviewerTransform(scaleSize, rotateSize, x, y);
11806
- };
11807
- menuContainer.append(zoomIn);
11808
- const zoomOut = document.createElement("i");
11809
- zoomOut.onclick = () => {
11810
- if (scaleSize - 0.1 <= 0.1)
11811
- return;
11812
- scaleSize -= 0.1;
11813
- this._setPreviewerTransform(scaleSize, rotateSize, x, y);
11814
- };
11815
- zoomOut.classList.add("zoom-out");
11816
- menuContainer.append(zoomOut);
11817
- const rotate = document.createElement("i");
11818
- rotate.classList.add("rotate");
11819
- rotate.onclick = () => {
11820
- rotateSize += 1;
11821
- this._setPreviewerTransform(scaleSize, rotateSize, x, y);
11822
- };
11823
- menuContainer.append(rotate);
11824
- const originalSize = document.createElement("i");
11825
- originalSize.classList.add("original-size");
11826
- originalSize.onclick = () => {
11827
- x = 0;
11828
- y = 0;
11829
- scaleSize = 1;
11830
- rotateSize = 0;
11831
- this._setPreviewerTransform(scaleSize, rotateSize, x, y);
11832
- };
11833
- menuContainer.append(originalSize);
11834
- const imageDownload = document.createElement("i");
11835
- imageDownload.classList.add("image-download");
11836
- imageDownload.onclick = () => {
11837
- var _a;
11838
- const { mime } = this.previewerDrawOption;
11839
- downloadFile(img.src, `${(_a = this.curElement) == null ? void 0 : _a.id}.${mime || "png"}`);
11840
- };
11841
- menuContainer.append(imageDownload);
11842
- previewerContainer.append(menuContainer);
11843
- this.previewerContainer = previewerContainer;
11844
- document.body.append(previewerContainer);
11845
- let startX = 0;
11846
- let startY = 0;
11847
- let isAllowDrag = false;
11848
- img.onmousedown = (evt) => {
11849
- isAllowDrag = true;
11850
- startX = evt.x;
11851
- startY = evt.y;
11852
- previewerContainer.style.cursor = "move";
11853
- };
11854
- previewerContainer.onmousemove = (evt) => {
11855
- if (!isAllowDrag)
11856
- return;
11857
- x += evt.x - startX;
11858
- y += evt.y - startY;
11859
- startX = evt.x;
11860
- startY = evt.y;
11861
- this._setPreviewerTransform(scaleSize, rotateSize, x, y);
11862
- };
11863
- previewerContainer.onmouseup = () => {
11864
- isAllowDrag = false;
11865
- previewerContainer.style.cursor = "auto";
11866
- };
11867
- previewerContainer.onwheel = (evt) => {
11868
- evt.preventDefault();
11869
- if (evt.deltaY < 0) {
11870
- scaleSize += 0.1;
11871
- } else {
11872
- if (scaleSize - 0.1 <= 0.1)
11873
- return;
11874
- scaleSize -= 0.1;
11875
- }
11876
- this._setPreviewerTransform(scaleSize, rotateSize, x, y);
11877
- };
11791
+ repaintControl(options = {}) {
11792
+ const { curIndex, isCompute = true, isSubmitHistory = true } = options;
11793
+ if (curIndex === void 0) {
11794
+ this.range.clearRange();
11795
+ this.draw.render({
11796
+ isCompute,
11797
+ isSubmitHistory,
11798
+ isSetCursor: false
11799
+ });
11800
+ } else {
11801
+ this.range.setRange(curIndex, curIndex);
11802
+ this.draw.render({
11803
+ curIndex,
11804
+ isCompute,
11805
+ isSubmitHistory
11806
+ });
11807
+ }
11878
11808
  }
11879
- _setPreviewerTransform(scale, rotate, x, y) {
11880
- if (!this.previewerImage)
11809
+ reAwakeControl() {
11810
+ if (!this.activeControl)
11881
11811
  return;
11882
- this.previewerImage.style.left = `${x}px`;
11883
- this.previewerImage.style.top = `${y}px`;
11884
- this.previewerImage.style.transform = `scale(${scale}) rotate(${rotate * 90}deg)`;
11885
- }
11886
- _clearPreviewer() {
11887
- var _a;
11888
- (_a = this.previewerContainer) == null ? void 0 : _a.remove();
11889
- this.previewerContainer = null;
11890
- document.body.style.overflow = "auto";
11891
- }
11892
- _updateResizerRect(width, height) {
11893
- const handleSize = this.options.resizerSize;
11894
- this.resizerSelection.style.width = `${width}px`;
11895
- this.resizerSelection.style.height = `${height}px`;
11896
- for (let i = 0; i < 8; i++) {
11897
- const left2 = i === 0 || i === 6 || i === 7 ? -handleSize : i === 1 || i === 5 ? width / 2 : width - handleSize;
11898
- const top = i === 0 || i === 1 || i === 2 ? -handleSize : i === 3 || i === 7 ? height / 2 - handleSize : height - handleSize;
11899
- this.resizerHandleList[i].style.left = `${left2}px`;
11900
- this.resizerHandleList[i].style.top = `${top}px`;
11812
+ const elementList = this.getElementList();
11813
+ const range = this.getRange();
11814
+ const element = elementList[range.startIndex];
11815
+ this.activeControl.setElement(element);
11816
+ if ((this.activeControl instanceof DateControl || this.activeControl instanceof SelectControl) && this.activeControl.getIsPopup()) {
11817
+ this.activeControl.destroy();
11818
+ this.activeControl.awake();
11901
11819
  }
11902
11820
  }
11903
- _updateResizerSizeView(width, height) {
11904
- this.resizerSize.innerText = `${Math.round(width)} \xD7 ${Math.round(height)}`;
11821
+ moveCursor(position) {
11822
+ const { index: index2, trIndex, tdIndex, tdValueIndex } = position;
11823
+ let elementList = this.draw.getOriginalElementList();
11824
+ let element;
11825
+ const newIndex = position.isTable ? tdValueIndex : index2;
11826
+ if (position.isTable) {
11827
+ elementList = elementList[index2].trList[trIndex].tdList[tdIndex].value;
11828
+ element = elementList[tdValueIndex];
11829
+ } else {
11830
+ element = elementList[index2];
11831
+ }
11832
+ if (element.controlComponent === ControlComponent.VALUE) {
11833
+ return {
11834
+ newIndex,
11835
+ newElement: element
11836
+ };
11837
+ } else if (element.controlComponent === ControlComponent.POSTFIX) {
11838
+ let startIndex = newIndex + 1;
11839
+ while (startIndex < elementList.length) {
11840
+ const nextElement = elementList[startIndex];
11841
+ if (nextElement.controlId !== element.controlId) {
11842
+ return {
11843
+ newIndex: startIndex - 1,
11844
+ newElement: elementList[startIndex - 1]
11845
+ };
11846
+ }
11847
+ startIndex++;
11848
+ }
11849
+ } else if (element.controlComponent === ControlComponent.PREFIX) {
11850
+ let startIndex = newIndex + 1;
11851
+ while (startIndex < elementList.length) {
11852
+ const nextElement = elementList[startIndex];
11853
+ if (nextElement.controlId !== element.controlId || nextElement.controlComponent !== ControlComponent.PREFIX) {
11854
+ return {
11855
+ newIndex: startIndex - 1,
11856
+ newElement: elementList[startIndex - 1]
11857
+ };
11858
+ }
11859
+ startIndex++;
11860
+ }
11861
+ } else if (element.controlComponent === ControlComponent.PLACEHOLDER) {
11862
+ let startIndex = newIndex - 1;
11863
+ while (startIndex > 0) {
11864
+ const preElement = elementList[startIndex];
11865
+ if (preElement.controlId !== element.controlId || preElement.controlComponent === ControlComponent.PREFIX) {
11866
+ return {
11867
+ newIndex: startIndex,
11868
+ newElement: elementList[startIndex]
11869
+ };
11870
+ }
11871
+ startIndex--;
11872
+ }
11873
+ }
11874
+ return {
11875
+ newIndex,
11876
+ newElement: element
11877
+ };
11905
11878
  }
11906
- render() {
11907
- this._drawPreviewer();
11908
- document.body.style.overflow = "hidden";
11879
+ removeControl(startIndex, context = {}) {
11880
+ const elementList = context.elementList || this.getElementList();
11881
+ const startElement = elementList[startIndex];
11882
+ const { deletable = true } = startElement.control;
11883
+ if (!deletable)
11884
+ return null;
11885
+ let leftIndex = -1;
11886
+ let rightIndex = -1;
11887
+ let preIndex = startIndex;
11888
+ while (preIndex > 0) {
11889
+ const preElement = elementList[preIndex];
11890
+ if (preElement.controlId !== startElement.controlId) {
11891
+ leftIndex = preIndex;
11892
+ break;
11893
+ }
11894
+ preIndex--;
11895
+ }
11896
+ let nextIndex = startIndex + 1;
11897
+ while (nextIndex < elementList.length) {
11898
+ const nextElement = elementList[nextIndex];
11899
+ if (nextElement.controlId !== startElement.controlId) {
11900
+ rightIndex = nextIndex - 1;
11901
+ break;
11902
+ }
11903
+ nextIndex++;
11904
+ }
11905
+ if (nextIndex === elementList.length) {
11906
+ rightIndex = nextIndex - 1;
11907
+ }
11908
+ if (!~leftIndex && !~rightIndex)
11909
+ return startIndex;
11910
+ leftIndex = ~leftIndex ? leftIndex : 0;
11911
+ this.draw.spliceElementList(elementList, leftIndex + 1, rightIndex - leftIndex);
11912
+ return leftIndex;
11909
11913
  }
11910
- drawResizer(element, position = null, options = {}) {
11911
- this.previewerDrawOption = options;
11912
- this.curElementSrc = element[options.srcKey || "value"] || "";
11913
- this.updateResizer(element, position);
11914
- document.addEventListener("keydown", this._keydown);
11914
+ removePlaceholder(startIndex, context = {}) {
11915
+ const elementList = context.elementList || this.getElementList();
11916
+ const startElement = elementList[startIndex];
11917
+ const nextElement = elementList[startIndex + 1];
11918
+ if (startElement.controlComponent === ControlComponent.PLACEHOLDER || nextElement.controlComponent === ControlComponent.PLACEHOLDER) {
11919
+ let isHasSubmitHistory = false;
11920
+ let index2 = startIndex;
11921
+ while (index2 < elementList.length) {
11922
+ const curElement = elementList[index2];
11923
+ if (curElement.controlId !== startElement.controlId)
11924
+ break;
11925
+ if (curElement.controlComponent === ControlComponent.PLACEHOLDER) {
11926
+ if (!isHasSubmitHistory) {
11927
+ isHasSubmitHistory = true;
11928
+ this.draw.getHistoryManager().popUndo();
11929
+ this.draw.submitHistory(startIndex);
11930
+ }
11931
+ elementList.splice(index2, 1);
11932
+ } else {
11933
+ index2++;
11934
+ }
11935
+ }
11936
+ }
11915
11937
  }
11916
- updateResizer(element, position = null) {
11917
- const { scale } = this.options;
11918
- const elementWidth = element.width * scale;
11919
- const elementHeight = element.height * scale;
11920
- this._updateResizerSizeView(elementWidth, elementHeight);
11921
- const { x: resizerLeft, y: resizerTop } = this._getElementPosition(element, position);
11922
- this.resizerSelection.style.left = `${resizerLeft}px`;
11923
- this.resizerSelection.style.top = `${resizerTop}px`;
11924
- this._updateResizerRect(elementWidth, elementHeight);
11925
- this.resizerSelection.style.display = "block";
11926
- this.curElement = element;
11927
- this.curPosition = position;
11928
- this.width = elementWidth;
11929
- this.height = elementHeight;
11938
+ addPlaceholder(startIndex, context = {}) {
11939
+ const elementList = context.elementList || this.getElementList();
11940
+ const startElement = elementList[startIndex];
11941
+ const control = startElement.control;
11942
+ if (!control.placeholder)
11943
+ return;
11944
+ const placeholderStrList = splitText(control.placeholder);
11945
+ for (let p = 0; p < placeholderStrList.length; p++) {
11946
+ const value = placeholderStrList[p];
11947
+ const newElement = {
11948
+ value,
11949
+ controlId: startElement.controlId,
11950
+ type: ElementType.CONTROL,
11951
+ control: startElement.control,
11952
+ controlComponent: ControlComponent.PLACEHOLDER,
11953
+ color: this.controlOptions.placeholderColor
11954
+ };
11955
+ formatElementContext(elementList, [newElement], startIndex);
11956
+ this.draw.spliceElementList(elementList, startIndex + p + 1, 0, newElement);
11957
+ }
11930
11958
  }
11931
- clearResizer() {
11932
- this.resizerSelection.style.display = "none";
11933
- document.removeEventListener("keydown", this._keydown);
11959
+ setValue(data2) {
11960
+ if (!this.activeControl) {
11961
+ throw new Error("active control is null");
11962
+ }
11963
+ return this.activeControl.setValue(data2);
11934
11964
  }
11935
- }
11936
- const contextmenu$1 = {
11937
- global: {
11938
- cut: "\u526A\u5207",
11939
- copy: "\u590D\u5236",
11940
- paste: "\u7C98\u8D34",
11941
- selectAll: "\u5168\u9009",
11942
- print: "\u6253\u5370"
11943
- },
11944
- control: {
11945
- "delete": "\u5220\u9664\u63A7\u4EF6"
11946
- },
11947
- hyperlink: {
11948
- "delete": "\u5220\u9664\u94FE\u63A5",
11949
- cancel: "\u53D6\u6D88\u94FE\u63A5",
11950
- edit: "\u7F16\u8F91\u94FE\u63A5"
11951
- },
11952
- image: {
11953
- change: "\u66F4\u6539\u56FE\u7247",
11954
- saveAs: "\u53E6\u5B58\u4E3A\u56FE\u7247",
11955
- textWrap: "\u6587\u5B57\u73AF\u7ED5",
11956
- textWrapType: {
11957
- embed: "\u5D4C\u5165\u578B",
11958
- upDown: "\u4E0A\u4E0B\u578B\u73AF\u7ED5",
11959
- floatTop: "\u6D6E\u4E8E\u6587\u5B57\u4E0A\u65B9",
11960
- floatBottom: "\u886C\u4E8E\u6587\u5B57\u4E0B\u65B9"
11965
+ keydown(evt) {
11966
+ if (!this.activeControl) {
11967
+ throw new Error("active control is null");
11961
11968
  }
11962
- },
11963
- table: {
11964
- insertRowCol: "\u63D2\u5165\u884C\u5217",
11965
- insertTopRow: "\u4E0A\u65B9\u63D2\u51651\u884C",
11966
- insertBottomRow: "\u4E0B\u65B9\u63D2\u51651\u884C",
11967
- insertLeftCol: "\u5DE6\u4FA7\u63D2\u51651\u5217",
11968
- insertRightCol: "\u53F3\u4FA7\u63D2\u51651\u5217",
11969
- deleteRowCol: "\u5220\u9664\u884C\u5217",
11970
- deleteRow: "\u5220\u96641\u884C",
11971
- deleteCol: "\u5220\u96641\u5217",
11972
- deleteTable: "\u5220\u9664\u6574\u4E2A\u8868\u683C",
11973
- mergeCell: "\u5408\u5E76\u5355\u5143\u683C",
11974
- mergeCancelCell: "\u53D6\u6D88\u5408\u5E76",
11975
- verticalAlign: "\u5782\u76F4\u5BF9\u9F50",
11976
- verticalAlignTop: "\u9876\u7AEF\u5BF9\u9F50",
11977
- verticalAlignMiddle: "\u5782\u76F4\u5C45\u4E2D",
11978
- verticalAlignBottom: "\u5E95\u7AEF\u5BF9\u9F50",
11979
- border: "\u8868\u683C\u8FB9\u6846",
11980
- borderAll: "\u6240\u6709\u6846\u7EBF",
11981
- borderEmpty: "\u65E0\u6846\u7EBF",
11982
- borderExternal: "\u5916\u4FA7\u6846\u7EBF",
11983
- borderTd: "\u5355\u5143\u683C\u8FB9\u6846",
11984
- borderTdTop: "\u4E0A\u8FB9\u6846",
11985
- borderTdRight: "\u53F3\u8FB9\u6846",
11986
- borderTdBottom: "\u4E0B\u8FB9\u6846",
11987
- borderTdLeft: "\u5DE6\u8FB9\u6846",
11988
- borderTdForward: "\u6B63\u659C\u7EBF",
11989
- borderTdBack: "\u53CD\u659C\u7EBF"
11969
+ return this.activeControl.keydown(evt);
11990
11970
  }
11991
- };
11992
- const datePicker$1 = {
11993
- now: "\u6B64\u523B",
11994
- confirm: "\u786E\u5B9A",
11995
- "return": "\u8FD4\u56DE\u65E5\u671F",
11996
- timeSelect: "\u65F6\u95F4\u9009\u62E9",
11997
- weeks: {
11998
- sun: "\u65E5",
11999
- mon: "\u4E00",
12000
- tue: "\u4E8C",
12001
- wed: "\u4E09",
12002
- thu: "\u56DB",
12003
- fri: "\u4E94",
12004
- sat: "\u516D"
12005
- },
12006
- year: "\u5E74",
12007
- month: "\u6708",
12008
- hour: "\u65F6",
12009
- minute: "\u5206",
12010
- second: "\u79D2"
12011
- };
12012
- const frame$1 = {
12013
- header: "\u9875\u7709",
12014
- footer: "\u9875\u811A"
12015
- };
12016
- const pageBreak$1 = {
12017
- displayName: "\u5206\u9875\u7B26"
12018
- };
12019
- const zone$1 = {
12020
- headerTip: "\u53CC\u51FB\u7F16\u8F91\u9875\u7709",
12021
- footerTip: "\u53CC\u51FB\u7F16\u8F91\u9875\u811A"
12022
- };
12023
- var zhCN = {
12024
- contextmenu: contextmenu$1,
12025
- datePicker: datePicker$1,
12026
- frame: frame$1,
12027
- pageBreak: pageBreak$1,
12028
- zone: zone$1
12029
- };
12030
- class DatePicker {
12031
- constructor(options = {}) {
12032
- __publicField(this, "options");
12033
- __publicField(this, "now");
12034
- __publicField(this, "dom");
12035
- __publicField(this, "renderOptions");
12036
- __publicField(this, "isDatePicker");
12037
- __publicField(this, "pickDate");
12038
- __publicField(this, "lang");
12039
- this.options = __spreadValues({
12040
- mountDom: document.body
12041
- }, options);
12042
- this.lang = datePicker$1;
12043
- this.now = new Date();
12044
- this.dom = this._createDom();
12045
- this.renderOptions = null;
12046
- this.isDatePicker = true;
12047
- this.pickDate = null;
12048
- this._bindEvent();
11971
+ cut() {
11972
+ if (!this.activeControl) {
11973
+ throw new Error("active control is null");
11974
+ }
11975
+ return this.activeControl.cut();
12049
11976
  }
12050
- _createDom() {
12051
- const datePickerContainer = document.createElement("div");
12052
- datePickerContainer.classList.add(`${EDITOR_PREFIX}-date-container`);
12053
- const dateWrap = document.createElement("div");
12054
- dateWrap.classList.add(`${EDITOR_PREFIX}-date-wrap`);
12055
- const datePickerTitle = document.createElement("div");
12056
- datePickerTitle.classList.add(`${EDITOR_PREFIX}-date-title`);
12057
- const preYearTitle = document.createElement("span");
12058
- preYearTitle.classList.add(`${EDITOR_PREFIX}-date-title__pre-year`);
12059
- preYearTitle.innerText = `<<`;
12060
- const preMonthTitle = document.createElement("span");
12061
- preMonthTitle.classList.add(`${EDITOR_PREFIX}-date-title__pre-month`);
12062
- preMonthTitle.innerText = `<`;
12063
- const nowTitle = document.createElement("span");
12064
- nowTitle.classList.add(`${EDITOR_PREFIX}-date-title__now`);
12065
- const nextMonthTitle = document.createElement("span");
12066
- nextMonthTitle.classList.add(`${EDITOR_PREFIX}-date-title__next-month`);
12067
- nextMonthTitle.innerText = `>`;
12068
- const nextYearTitle = document.createElement("span");
12069
- nextYearTitle.classList.add(`${EDITOR_PREFIX}-date-title__next-year`);
12070
- nextYearTitle.innerText = `>>`;
12071
- datePickerTitle.append(preYearTitle);
12072
- datePickerTitle.append(preMonthTitle);
12073
- datePickerTitle.append(nowTitle);
12074
- datePickerTitle.append(nextMonthTitle);
12075
- datePickerTitle.append(nextYearTitle);
12076
- const datePickerWeek = document.createElement("div");
12077
- datePickerWeek.classList.add(`${EDITOR_PREFIX}-date-week`);
12078
- const { weeks: { sun, mon, tue, wed, thu, fri, sat } } = this.lang;
12079
- const weekList = [sun, mon, tue, wed, thu, fri, sat];
12080
- weekList.forEach((week) => {
12081
- const weekDom = document.createElement("span");
12082
- weekDom.innerText = `${week}`;
12083
- datePickerWeek.append(weekDom);
12084
- });
12085
- const datePickerDay = document.createElement("div");
12086
- datePickerDay.classList.add(`${EDITOR_PREFIX}-date-day`);
12087
- dateWrap.append(datePickerTitle);
12088
- dateWrap.append(datePickerWeek);
12089
- dateWrap.append(datePickerDay);
12090
- const timeWrap = document.createElement("ul");
12091
- timeWrap.classList.add(`${EDITOR_PREFIX}-time-wrap`);
12092
- let hourTime;
12093
- let minuteTime;
12094
- let secondTime;
12095
- const timeList = [this.lang.hour, this.lang.minute, this.lang.second];
12096
- timeList.forEach((t, i) => {
12097
- const li = document.createElement("li");
12098
- const timeText = document.createElement("span");
12099
- timeText.innerText = t;
12100
- li.append(timeText);
12101
- const ol = document.createElement("ol");
12102
- const isHour = i === 0;
12103
- const isMinute = i === 1;
12104
- const endIndex = isHour ? 24 : 60;
12105
- for (let i2 = 0; i2 < endIndex; i2++) {
12106
- const time = document.createElement("li");
12107
- time.innerText = `${String(i2).padStart(2, "0")}`;
12108
- time.setAttribute("data-id", `${i2}`);
12109
- ol.append(time);
12110
- }
12111
- if (isHour) {
12112
- hourTime = ol;
12113
- } else if (isMinute) {
12114
- minuteTime = ol;
12115
- } else {
12116
- secondTime = ol;
12117
- }
12118
- li.append(ol);
12119
- timeWrap.append(li);
12120
- });
12121
- const datePickerMenu = document.createElement("div");
12122
- datePickerMenu.classList.add(`${EDITOR_PREFIX}-date-menu`);
12123
- const timeMenu = document.createElement("button");
12124
- timeMenu.classList.add(`${EDITOR_PREFIX}-date-menu__time`);
12125
- timeMenu.innerText = this.lang.timeSelect;
12126
- const nowMenu = document.createElement("button");
12127
- nowMenu.classList.add(`${EDITOR_PREFIX}-date-menu__now`);
12128
- nowMenu.innerText = this.lang.now;
12129
- const submitMenu = document.createElement("button");
12130
- submitMenu.classList.add(`${EDITOR_PREFIX}-date-menu__submit`);
12131
- submitMenu.innerText = this.lang.confirm;
12132
- datePickerMenu.append(timeMenu);
12133
- datePickerMenu.append(nowMenu);
12134
- datePickerMenu.append(submitMenu);
12135
- datePickerContainer.append(dateWrap);
12136
- datePickerContainer.append(timeWrap);
12137
- datePickerContainer.append(datePickerMenu);
12138
- this.options.mountDom.append(datePickerContainer);
12139
- return {
12140
- container: datePickerContainer,
12141
- dateWrap,
12142
- datePickerWeek,
12143
- timeWrap,
12144
- title: {
12145
- preYear: preYearTitle,
12146
- preMonth: preMonthTitle,
12147
- now: nowTitle,
12148
- nextMonth: nextMonthTitle,
12149
- nextYear: nextYearTitle
11977
+ getValueByConceptId(payload) {
11978
+ const { conceptId } = payload;
11979
+ const result = [];
11980
+ const getValue = (elementList, zone2) => {
11981
+ var _a;
11982
+ let i = 0;
11983
+ while (i < elementList.length) {
11984
+ const element = elementList[i];
11985
+ i++;
11986
+ if (element.type === ElementType.TABLE) {
11987
+ const trList = element.trList;
11988
+ for (let r = 0; r < trList.length; r++) {
11989
+ const tr = trList[r];
11990
+ for (let d = 0; d < tr.tdList.length; d++) {
11991
+ const td = tr.tdList[d];
11992
+ getValue(td.value, zone2);
11993
+ }
11994
+ }
11995
+ }
11996
+ if (((_a = element == null ? void 0 : element.control) == null ? void 0 : _a.conceptId) !== conceptId)
11997
+ continue;
11998
+ const { type, code, valueSets } = element.control;
11999
+ let j = i;
12000
+ let textControlValue = "";
12001
+ while (j < elementList.length) {
12002
+ const nextElement = elementList[j];
12003
+ if (nextElement.controlId !== element.controlId)
12004
+ break;
12005
+ if ((type === ControlType.TEXT || type === ControlType.DATE) && nextElement.controlComponent === ControlComponent.VALUE) {
12006
+ textControlValue += nextElement.value;
12007
+ }
12008
+ j++;
12009
+ }
12010
+ if (type === ControlType.TEXT || type === ControlType.DATE) {
12011
+ result.push(__spreadProps(__spreadValues({}, element.control), {
12012
+ zone: zone2,
12013
+ value: textControlValue || null,
12014
+ innerText: textControlValue || null
12015
+ }));
12016
+ } else if (type === ControlType.SELECT || type === ControlType.CHECKBOX || type === ControlType.RADIO) {
12017
+ const innerText = code == null ? void 0 : code.split(",").map((selectCode) => {
12018
+ var _a2;
12019
+ return (_a2 = valueSets == null ? void 0 : valueSets.find((valueSet) => valueSet.code === selectCode)) == null ? void 0 : _a2.value;
12020
+ }).filter(Boolean).join("");
12021
+ result.push(__spreadProps(__spreadValues({}, element.control), {
12022
+ zone: zone2,
12023
+ value: code || null,
12024
+ innerText: innerText || null
12025
+ }));
12026
+ }
12027
+ i = j;
12028
+ }
12029
+ };
12030
+ const data2 = [
12031
+ {
12032
+ zone: EditorZone.HEADER,
12033
+ elementList: this.draw.getHeaderElementList()
12150
12034
  },
12151
- day: datePickerDay,
12152
- time: {
12153
- hour: hourTime,
12154
- minute: minuteTime,
12155
- second: secondTime
12035
+ {
12036
+ zone: EditorZone.MAIN,
12037
+ elementList: this.draw.getOriginalMainElementList()
12156
12038
  },
12157
- menu: {
12158
- time: timeMenu,
12159
- now: nowMenu,
12160
- submit: submitMenu
12039
+ {
12040
+ zone: EditorZone.FOOTER,
12041
+ elementList: this.draw.getFooterElementList()
12042
+ }
12043
+ ];
12044
+ for (const { zone: zone2, elementList } of data2) {
12045
+ getValue(elementList, zone2);
12046
+ }
12047
+ return result;
12048
+ }
12049
+ setValueByConceptId(payload) {
12050
+ const isReadonly = this.draw.isReadonly();
12051
+ if (isReadonly)
12052
+ return;
12053
+ let isExistSet = false;
12054
+ const { conceptId, value } = payload;
12055
+ const setValue = (elementList) => {
12056
+ var _a;
12057
+ let i = 0;
12058
+ while (i < elementList.length) {
12059
+ const element = elementList[i];
12060
+ i++;
12061
+ if (element.type === ElementType.TABLE) {
12062
+ const trList = element.trList;
12063
+ for (let r = 0; r < trList.length; r++) {
12064
+ const tr = trList[r];
12065
+ for (let d = 0; d < tr.tdList.length; d++) {
12066
+ const td = tr.tdList[d];
12067
+ setValue(td.value);
12068
+ }
12069
+ }
12070
+ }
12071
+ if (((_a = element == null ? void 0 : element.control) == null ? void 0 : _a.conceptId) !== conceptId)
12072
+ continue;
12073
+ isExistSet = true;
12074
+ const { type } = element.control;
12075
+ let currentEndIndex = i;
12076
+ while (currentEndIndex < elementList.length) {
12077
+ const nextElement = elementList[currentEndIndex];
12078
+ if (nextElement.controlId !== element.controlId)
12079
+ break;
12080
+ currentEndIndex++;
12081
+ }
12082
+ const fakeRange = {
12083
+ startIndex: i - 1,
12084
+ endIndex: currentEndIndex - 2
12085
+ };
12086
+ const controlContext = {
12087
+ range: fakeRange,
12088
+ elementList
12089
+ };
12090
+ const controlRule = {
12091
+ isIgnoreDisabledRule: true
12092
+ };
12093
+ if (type === ControlType.TEXT) {
12094
+ const formatValue = [{ value }];
12095
+ formatElementList(formatValue, {
12096
+ isHandleFirstElement: false,
12097
+ editorOptions: this.options
12098
+ });
12099
+ const text = new TextControl(element, this);
12100
+ this.activeControl = text;
12101
+ if (value) {
12102
+ text.setValue(formatValue, controlContext, controlRule);
12103
+ } else {
12104
+ text.clearValue(controlContext, controlRule);
12105
+ }
12106
+ } else if (type === ControlType.SELECT) {
12107
+ const select = new SelectControl(element, this);
12108
+ this.activeControl = select;
12109
+ if (value) {
12110
+ select.setSelect(value, controlContext, controlRule);
12111
+ } else {
12112
+ select.clearSelect(controlContext, controlRule);
12113
+ }
12114
+ } else if (type === ControlType.CHECKBOX) {
12115
+ const checkbox = new CheckboxControl(element, this);
12116
+ this.activeControl = checkbox;
12117
+ const codes = (value == null ? void 0 : value.split(",")) || [];
12118
+ checkbox.setSelect(codes, controlContext, controlRule);
12119
+ } else if (type === ControlType.RADIO) {
12120
+ const radio = new RadioControl(element, this);
12121
+ this.activeControl = radio;
12122
+ const codes = value ? [value] : [];
12123
+ radio.setSelect(codes, controlContext, controlRule);
12124
+ } else if (type === ControlType.DATE) {
12125
+ const date = new DateControl(element, this);
12126
+ this.activeControl = date;
12127
+ if (value) {
12128
+ date.setSelect(value, controlContext, controlRule);
12129
+ } else {
12130
+ date.clearSelect(controlContext, controlRule);
12131
+ }
12132
+ }
12133
+ this.activeControl = null;
12134
+ let newEndIndex = i;
12135
+ while (newEndIndex < elementList.length) {
12136
+ const nextElement = elementList[newEndIndex];
12137
+ if (nextElement.controlId !== element.controlId)
12138
+ break;
12139
+ newEndIndex++;
12140
+ }
12141
+ i = newEndIndex;
12161
12142
  }
12162
12143
  };
12144
+ this.destroyControl();
12145
+ const data2 = [
12146
+ this.draw.getHeaderElementList(),
12147
+ this.draw.getOriginalMainElementList(),
12148
+ this.draw.getFooterElementList()
12149
+ ];
12150
+ for (const elementList of data2) {
12151
+ setValue(elementList);
12152
+ }
12153
+ if (isExistSet) {
12154
+ this.draw.render({
12155
+ isSetCursor: false
12156
+ });
12157
+ }
12163
12158
  }
12164
- _bindEvent() {
12165
- this.dom.title.preYear.onclick = () => {
12166
- this._preYear();
12159
+ setExtensionByConceptId(payload) {
12160
+ const isReadonly = this.draw.isReadonly();
12161
+ if (isReadonly)
12162
+ return;
12163
+ const { conceptId, extension } = payload;
12164
+ const setExtension = (elementList) => {
12165
+ var _a;
12166
+ let i = 0;
12167
+ while (i < elementList.length) {
12168
+ const element = elementList[i];
12169
+ i++;
12170
+ if (element.type === ElementType.TABLE) {
12171
+ const trList = element.trList;
12172
+ for (let r = 0; r < trList.length; r++) {
12173
+ const tr = trList[r];
12174
+ for (let d = 0; d < tr.tdList.length; d++) {
12175
+ const td = tr.tdList[d];
12176
+ setExtension(td.value);
12177
+ }
12178
+ }
12179
+ }
12180
+ if (((_a = element == null ? void 0 : element.control) == null ? void 0 : _a.conceptId) !== conceptId)
12181
+ continue;
12182
+ element.control.extension = extension;
12183
+ let newEndIndex = i;
12184
+ while (newEndIndex < elementList.length) {
12185
+ const nextElement = elementList[newEndIndex];
12186
+ if (nextElement.controlId !== element.controlId)
12187
+ break;
12188
+ newEndIndex++;
12189
+ }
12190
+ i = newEndIndex;
12191
+ }
12167
12192
  };
12168
- this.dom.title.preMonth.onclick = () => {
12169
- this._preMonth();
12193
+ const data2 = [
12194
+ this.draw.getHeaderElementList(),
12195
+ this.draw.getOriginalMainElementList(),
12196
+ this.draw.getFooterElementList()
12197
+ ];
12198
+ for (const elementList of data2) {
12199
+ setExtension(elementList);
12200
+ }
12201
+ }
12202
+ setPropertiesByConceptId(payload) {
12203
+ var _a;
12204
+ const isReadonly = this.draw.isReadonly();
12205
+ if (isReadonly)
12206
+ return;
12207
+ const { conceptId, properties } = payload;
12208
+ let isExistUpdate = false;
12209
+ const pageComponentData = {
12210
+ header: this.draw.getHeaderElementList(),
12211
+ main: this.draw.getOriginalMainElementList(),
12212
+ footer: this.draw.getFooterElementList()
12213
+ };
12214
+ for (const key in pageComponentData) {
12215
+ const elementList = pageComponentData[key];
12216
+ let i = 0;
12217
+ while (i < elementList.length) {
12218
+ const element = elementList[i];
12219
+ i++;
12220
+ if (((_a = element == null ? void 0 : element.control) == null ? void 0 : _a.conceptId) !== conceptId)
12221
+ continue;
12222
+ isExistUpdate = true;
12223
+ element.control = __spreadProps(__spreadValues(__spreadValues({}, element.control), properties), {
12224
+ value: element.control.value
12225
+ });
12226
+ let newEndIndex = i;
12227
+ while (newEndIndex < elementList.length) {
12228
+ const nextElement = elementList[newEndIndex];
12229
+ if (nextElement.controlId !== element.controlId)
12230
+ break;
12231
+ newEndIndex++;
12232
+ }
12233
+ i = newEndIndex;
12234
+ }
12235
+ }
12236
+ if (!isExistUpdate)
12237
+ return;
12238
+ for (const key in pageComponentData) {
12239
+ const pageComponentKey = key;
12240
+ const elementList = zipElementList(pageComponentData[pageComponentKey]);
12241
+ pageComponentData[pageComponentKey] = elementList;
12242
+ formatElementList(elementList, {
12243
+ editorOptions: this.options
12244
+ });
12245
+ }
12246
+ this.draw.setEditorData(pageComponentData);
12247
+ this.draw.render({
12248
+ isSetCursor: false
12249
+ });
12250
+ }
12251
+ getList() {
12252
+ const controlElementList = [];
12253
+ function getControlElementList(elementList) {
12254
+ for (let e = 0; e < elementList.length; e++) {
12255
+ const element = elementList[e];
12256
+ if (element.type === ElementType.TABLE) {
12257
+ const trList = element.trList;
12258
+ for (let r = 0; r < trList.length; r++) {
12259
+ const tr = trList[r];
12260
+ for (let d = 0; d < tr.tdList.length; d++) {
12261
+ const td = tr.tdList[d];
12262
+ const tdElement = td.value;
12263
+ getControlElementList(tdElement);
12264
+ }
12265
+ }
12266
+ }
12267
+ if (element.controlId) {
12268
+ controlElementList.push(element);
12269
+ }
12270
+ }
12271
+ }
12272
+ const data2 = [
12273
+ this.draw.getHeader().getElementList(),
12274
+ this.draw.getOriginalMainElementList(),
12275
+ this.draw.getFooter().getElementList()
12276
+ ];
12277
+ for (const elementList of data2) {
12278
+ getControlElementList(elementList);
12279
+ }
12280
+ return zipElementList(controlElementList);
12281
+ }
12282
+ recordBorderInfo(x, y, width, height) {
12283
+ this.controlBorder.recordBorderInfo(x, y, width, height);
12284
+ }
12285
+ drawBorder(ctx) {
12286
+ this.controlBorder.render(ctx);
12287
+ }
12288
+ getPreControlContext() {
12289
+ if (!this.activeControl)
12290
+ return null;
12291
+ const position = this.draw.getPosition();
12292
+ const positionContext = position.getPositionContext();
12293
+ if (!positionContext)
12294
+ return null;
12295
+ const controlElement = this.activeControl.getElement();
12296
+ function getPreContext(elementList2, start) {
12297
+ for (let e = start; e > 0; e--) {
12298
+ const element = elementList2[e];
12299
+ if (element.type === ElementType.TABLE) {
12300
+ const trList = element.trList || [];
12301
+ for (let r = trList.length - 1; r >= 0; r--) {
12302
+ const tr = trList[r];
12303
+ const tdList = tr.tdList;
12304
+ for (let d = tdList.length - 1; d >= 0; d--) {
12305
+ const td = tdList[d];
12306
+ const context2 = getPreContext(td.value, td.value.length - 1);
12307
+ if (context2) {
12308
+ return {
12309
+ positionContext: {
12310
+ isTable: true,
12311
+ index: e,
12312
+ trIndex: r,
12313
+ tdIndex: d,
12314
+ tdId: td.id,
12315
+ trId: tr.id,
12316
+ tableId: element.id
12317
+ },
12318
+ nextIndex: context2.nextIndex
12319
+ };
12320
+ }
12321
+ }
12322
+ }
12323
+ }
12324
+ if (!element.controlId || element.controlId === controlElement.controlId) {
12325
+ continue;
12326
+ }
12327
+ let nextIndex = e;
12328
+ while (nextIndex > 0) {
12329
+ const nextElement = elementList2[nextIndex];
12330
+ if (nextElement.controlComponent === ControlComponent.VALUE || nextElement.controlComponent === ControlComponent.PREFIX) {
12331
+ break;
12332
+ }
12333
+ nextIndex--;
12334
+ }
12335
+ return {
12336
+ positionContext: {
12337
+ isTable: false
12338
+ },
12339
+ nextIndex
12340
+ };
12341
+ }
12342
+ return null;
12343
+ }
12344
+ const { startIndex } = this.range.getRange();
12345
+ const elementList = this.getElementList();
12346
+ const context = getPreContext(elementList, startIndex);
12347
+ if (context) {
12348
+ return {
12349
+ positionContext: positionContext.isTable ? positionContext : context.positionContext,
12350
+ nextIndex: context.nextIndex
12351
+ };
12352
+ }
12353
+ if (controlElement.tableId) {
12354
+ const originalElementList = this.draw.getOriginalElementList();
12355
+ const { index: index2, trIndex, tdIndex } = positionContext;
12356
+ const trList = originalElementList[index2].trList;
12357
+ for (let r = trIndex; r >= 0; r--) {
12358
+ const tr = trList[r];
12359
+ const tdList = tr.tdList;
12360
+ for (let d = tdList.length - 1; d >= 0; d--) {
12361
+ if (trIndex === r && d >= tdIndex)
12362
+ continue;
12363
+ const td = tdList[d];
12364
+ const context3 = getPreContext(td.value, td.value.length - 1);
12365
+ if (context3) {
12366
+ return {
12367
+ positionContext: {
12368
+ isTable: true,
12369
+ index: positionContext.index,
12370
+ trIndex: r,
12371
+ tdIndex: d,
12372
+ tdId: td.id,
12373
+ trId: tr.id,
12374
+ tableId: controlElement.tableId
12375
+ },
12376
+ nextIndex: context3.nextIndex
12377
+ };
12378
+ }
12379
+ }
12380
+ }
12381
+ const context2 = getPreContext(originalElementList, index2 - 1);
12382
+ if (context2) {
12383
+ return {
12384
+ positionContext: {
12385
+ isTable: false
12386
+ },
12387
+ nextIndex: context2.nextIndex
12388
+ };
12389
+ }
12390
+ }
12391
+ return null;
12392
+ }
12393
+ getNextControlContext() {
12394
+ if (!this.activeControl)
12395
+ return null;
12396
+ const position = this.draw.getPosition();
12397
+ const positionContext = position.getPositionContext();
12398
+ if (!positionContext)
12399
+ return null;
12400
+ const controlElement = this.activeControl.getElement();
12401
+ function getNextContext(elementList2, start) {
12402
+ for (let e = start; e < elementList2.length; e++) {
12403
+ const element = elementList2[e];
12404
+ if (element.type === ElementType.TABLE) {
12405
+ const trList = element.trList || [];
12406
+ for (let r = 0; r < trList.length; r++) {
12407
+ const tr = trList[r];
12408
+ const tdList = tr.tdList;
12409
+ for (let d = 0; d < tdList.length; d++) {
12410
+ const td = tdList[d];
12411
+ const context2 = getNextContext(td.value, 0);
12412
+ if (context2) {
12413
+ return {
12414
+ positionContext: {
12415
+ isTable: true,
12416
+ index: e,
12417
+ trIndex: r,
12418
+ tdIndex: d,
12419
+ tdId: td.id,
12420
+ trId: tr.id,
12421
+ tableId: element.id
12422
+ },
12423
+ nextIndex: context2.nextIndex
12424
+ };
12425
+ }
12426
+ }
12427
+ }
12428
+ }
12429
+ if (!element.controlId || element.controlId === controlElement.controlId) {
12430
+ continue;
12431
+ }
12432
+ return {
12433
+ positionContext: {
12434
+ isTable: false
12435
+ },
12436
+ nextIndex: e
12437
+ };
12438
+ }
12439
+ return null;
12440
+ }
12441
+ const { endIndex } = this.range.getRange();
12442
+ const elementList = this.getElementList();
12443
+ const context = getNextContext(elementList, endIndex);
12444
+ if (context) {
12445
+ return {
12446
+ positionContext: positionContext.isTable ? positionContext : context.positionContext,
12447
+ nextIndex: context.nextIndex
12448
+ };
12449
+ }
12450
+ if (controlElement.tableId) {
12451
+ const originalElementList = this.draw.getOriginalElementList();
12452
+ const { index: index2, trIndex, tdIndex } = positionContext;
12453
+ const trList = originalElementList[index2].trList;
12454
+ for (let r = trIndex; r < trList.length; r++) {
12455
+ const tr = trList[r];
12456
+ const tdList = tr.tdList;
12457
+ for (let d = 0; d < tdList.length; d++) {
12458
+ if (trIndex === r && d <= tdIndex)
12459
+ continue;
12460
+ const td = tdList[d];
12461
+ const context3 = getNextContext(td.value, 0);
12462
+ if (context3) {
12463
+ return {
12464
+ positionContext: {
12465
+ isTable: true,
12466
+ index: positionContext.index,
12467
+ trIndex: r,
12468
+ tdIndex: d,
12469
+ tdId: td.id,
12470
+ trId: tr.id,
12471
+ tableId: controlElement.tableId
12472
+ },
12473
+ nextIndex: context3.nextIndex
12474
+ };
12475
+ }
12476
+ }
12477
+ }
12478
+ const context2 = getNextContext(originalElementList, index2 + 1);
12479
+ if (context2) {
12480
+ return {
12481
+ positionContext: {
12482
+ isTable: false
12483
+ },
12484
+ nextIndex: context2.nextIndex
12485
+ };
12486
+ }
12487
+ }
12488
+ return null;
12489
+ }
12490
+ initNextControl(option = {}) {
12491
+ const { direction = MoveDirection.DOWN } = option;
12492
+ let context = null;
12493
+ if (direction === MoveDirection.UP) {
12494
+ context = this.getPreControlContext();
12495
+ } else {
12496
+ context = this.getNextControlContext();
12497
+ }
12498
+ if (!context)
12499
+ return;
12500
+ const { nextIndex, positionContext } = context;
12501
+ const position = this.draw.getPosition();
12502
+ position.setPositionContext(positionContext);
12503
+ this.draw.getRange().replaceRange({
12504
+ startIndex: nextIndex,
12505
+ endIndex: nextIndex
12506
+ });
12507
+ this.draw.render({
12508
+ curIndex: nextIndex,
12509
+ isCompute: false,
12510
+ isSetCursor: true,
12511
+ isSubmitHistory: false
12512
+ });
12513
+ const positionList = position.getPositionList();
12514
+ this.draw.getCursor().moveCursorToVisible({
12515
+ cursorPosition: positionList[nextIndex],
12516
+ direction
12517
+ });
12518
+ }
12519
+ }
12520
+ class CheckboxParticle {
12521
+ constructor(draw) {
12522
+ __publicField(this, "draw");
12523
+ __publicField(this, "options");
12524
+ this.draw = draw;
12525
+ this.options = draw.getOptions();
12526
+ }
12527
+ setSelect(element) {
12528
+ const { checkbox } = element;
12529
+ if (checkbox) {
12530
+ checkbox.value = !checkbox.value;
12531
+ } else {
12532
+ element.checkbox = {
12533
+ value: true
12534
+ };
12535
+ }
12536
+ this.draw.render({
12537
+ isCompute: false,
12538
+ isSetCursor: false
12539
+ });
12540
+ }
12541
+ render(ctx, element, x, y) {
12542
+ const { checkbox: { gap, lineWidth, fillStyle, strokeStyle }, scale } = this.options;
12543
+ const { metrics, checkbox } = element;
12544
+ const left2 = Math.round(x + gap * scale);
12545
+ const top = Math.round(y - metrics.height + lineWidth);
12546
+ const width = metrics.width - gap * 2 * scale;
12547
+ const height = metrics.height;
12548
+ ctx.save();
12549
+ ctx.beginPath();
12550
+ ctx.translate(0.5, 0.5);
12551
+ if (checkbox == null ? void 0 : checkbox.value) {
12552
+ ctx.lineWidth = lineWidth;
12553
+ ctx.strokeStyle = fillStyle;
12554
+ ctx.rect(left2, top, width, height);
12555
+ ctx.stroke();
12556
+ ctx.beginPath();
12557
+ ctx.fillStyle = fillStyle;
12558
+ ctx.fillRect(left2, top, width, height);
12559
+ ctx.beginPath();
12560
+ ctx.strokeStyle = strokeStyle;
12561
+ ctx.lineWidth = lineWidth * 2 * scale;
12562
+ ctx.moveTo(left2 + 2 * scale, top + height / 2);
12563
+ ctx.lineTo(left2 + width / 2, top + height - 3 * scale);
12564
+ ctx.lineTo(left2 + width - 2 * scale, top + 3 * scale);
12565
+ ctx.stroke();
12566
+ } else {
12567
+ ctx.lineWidth = lineWidth;
12568
+ ctx.rect(left2, top, width, height);
12569
+ ctx.stroke();
12570
+ }
12571
+ ctx.closePath();
12572
+ ctx.restore();
12573
+ }
12574
+ }
12575
+ class RadioParticle {
12576
+ constructor(draw) {
12577
+ __publicField(this, "draw");
12578
+ __publicField(this, "options");
12579
+ this.draw = draw;
12580
+ this.options = draw.getOptions();
12581
+ }
12582
+ setSelect(element) {
12583
+ const { radio } = element;
12584
+ if (radio) {
12585
+ radio.value = !radio.value;
12586
+ } else {
12587
+ element.radio = {
12588
+ value: true
12589
+ };
12590
+ }
12591
+ this.draw.render({
12592
+ isCompute: false,
12593
+ isSetCursor: false
12594
+ });
12595
+ }
12596
+ render(ctx, element, x, y) {
12597
+ const { radio: { gap, lineWidth, fillStyle, strokeStyle }, scale } = this.options;
12598
+ const { metrics, radio } = element;
12599
+ const left2 = Math.round(x + gap * scale);
12600
+ const top = Math.round(y - metrics.height + lineWidth);
12601
+ const width = metrics.width - gap * 2 * scale;
12602
+ const height = metrics.height;
12603
+ ctx.save();
12604
+ ctx.beginPath();
12605
+ ctx.translate(0.5, 0.5);
12606
+ ctx.strokeStyle = (radio == null ? void 0 : radio.value) ? fillStyle : strokeStyle;
12607
+ ctx.lineWidth = lineWidth;
12608
+ ctx.arc(left2 + width / 2, top + height / 2, width / 2, 0, Math.PI * 2);
12609
+ ctx.stroke();
12610
+ if (radio == null ? void 0 : radio.value) {
12611
+ ctx.beginPath();
12612
+ ctx.fillStyle = fillStyle;
12613
+ ctx.arc(left2 + width / 2, top + height / 2, width / 3, 0, Math.PI * 2);
12614
+ ctx.fill();
12615
+ }
12616
+ ctx.closePath();
12617
+ ctx.restore();
12618
+ }
12619
+ }
12620
+ const encodedJs$2 = "KCgpPT57KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBmOyhmdW5jdGlvbih0KXt0LlRFWFQ9InRleHQiLHQuVEFCTEU9InRhYmxlIix0LkhZUEVSTElOSz0iaHlwZXJsaW5rIix0LkNPTlRST0w9ImNvbnRyb2wifSkoZnx8KGY9e30pKTt2YXIgcDsoZnVuY3Rpb24odCl7dC5WQUxVRT0idmFsdWUifSkocHx8KHA9e30pKTtjb25zdCBoPSJcdTIwMEIiLGc9YApgO2Z1bmN0aW9uIGEodCl7bGV0IGw9IiIsbj0wO2Zvcig7bjx0Lmxlbmd0aDspe2NvbnN0IG89dFtuXTtpZihvLnR5cGU9PT1mLlRBQkxFKXtpZihvLnRyTGlzdClmb3IobGV0IHI9MDtyPG8udHJMaXN0Lmxlbmd0aDtyKyspe2NvbnN0IHM9by50ckxpc3Rbcl07Zm9yKGxldCBlPTA7ZTxzLnRkTGlzdC5sZW5ndGg7ZSsrKXtjb25zdCBpPXMudGRMaXN0W2VdO2wrPWEoaS52YWx1ZSl9fX1lbHNlIGlmKG8udHlwZT09PWYuSFlQRVJMSU5LKXtjb25zdCByPW8uaHlwZXJsaW5rSWQscz1bXTtmb3IoO248dC5sZW5ndGg7KXtjb25zdCBlPXRbbl07aWYociE9PWUuaHlwZXJsaW5rSWQpe24tLTticmVha31kZWxldGUgZS50eXBlLHMucHVzaChlKSxuKyt9bCs9YShzKX1lbHNlIGlmKG8uY29udHJvbElkKXtjb25zdCByPW8uY29udHJvbElkLHM9W107Zm9yKDtuPHQubGVuZ3RoOyl7Y29uc3QgZT10W25dO2lmKHIhPT1lLmNvbnRyb2xJZCl7bi0tO2JyZWFrfWUuY29udHJvbENvbXBvbmVudD09PXAuVkFMVUUmJihkZWxldGUgZS5jb250cm9sSWQscy5wdXNoKGUpKSxuKyt9bCs9YShzKX1lbHNlKCFvLnR5cGV8fG8udHlwZT09PWYuVEVYVCkmJihsKz1vLnZhbHVlKTtuKyt9cmV0dXJuIGx9ZnVuY3Rpb24gZCh0KXtjb25zdCBsPVtdLG49L1swLTldLyxvPS9bQS1aYS16XS8scj0vXHMvO2xldCBzPSExLGU9ITEsaT0iIjtmdW5jdGlvbiB1KCl7aSYmKGwucHVzaChpKSxpPSIiKX1mb3IoY29uc3QgYyBvZiB0KW8udGVzdChjKT8oc3x8dSgpLGkrPWMscz0hMCxlPSExKTpuLnRlc3QoYyk/KGV8fHUoKSxpKz1jLHM9ITEsZT0hMCk6KHUoKSxzPSExLGU9ITEsci50ZXN0KGMpfHxsLnB1c2goYykpO3JldHVybiB1KCksbH1vbm1lc3NhZ2U9dD0+e2NvbnN0IGw9dC5kYXRhLG89YShsKS5yZXBsYWNlKG5ldyBSZWdFeHAoYF4ke2h9YCksIiIpLnJlcGxhY2UobmV3IFJlZ0V4cChoLCJnIiksZykscj1kKG8pO3Bvc3RNZXNzYWdlKHIubGVuZ3RoKX19KSgpO30pKCk7Cg==";
12621
+ const blob$2 = typeof window !== "undefined" && window.Blob && new Blob([atob(encodedJs$2)], { type: "text/javascript;charset=utf-8" });
12622
+ function WorkerWrapper$2() {
12623
+ const objURL = blob$2 && (window.URL || window.webkitURL).createObjectURL(blob$2);
12624
+ try {
12625
+ return objURL ? new Worker(objURL) : new Worker("data:application/javascript;base64," + encodedJs$2, { type: "module" });
12626
+ } finally {
12627
+ objURL && (window.URL || window.webkitURL).revokeObjectURL(objURL);
12628
+ }
12629
+ }
12630
+ const encodedJs$1 = "KCgpPT57KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBhOyhmdW5jdGlvbih0KXt0LlRFWFQ9InRleHQiLHQuSU1BR0U9ImltYWdlIix0LlRBQkxFPSJ0YWJsZSIsdC5IWVBFUkxJTks9Imh5cGVybGluayIsdC5TVVBFUlNDUklQVD0ic3VwZXJzY3JpcHQiLHQuU1VCU0NSSVBUPSJzdWJzY3JpcHQiLHQuU0VQQVJBVE9SPSJzZXBhcmF0b3IiLHQuUEFHRV9CUkVBSz0icGFnZUJyZWFrIix0LkNPTlRST0w9ImNvbnRyb2wiLHQuQ0hFQ0tCT1g9ImNoZWNrYm94Iix0LlJBRElPPSJyYWRpbyIsdC5MQVRFWD0ibGF0ZXgiLHQuVEFCPSJ0YWIiLHQuREFURT0iZGF0ZSIsdC5CTE9DSz0iYmxvY2siLHQuVElUTEU9InRpdGxlIix0LkxJU1Q9Imxpc3QifSkoYXx8KGE9e30pKTt2YXIgYzsoZnVuY3Rpb24odCl7dC5GSVJTVD0iZmlyc3QiLHQuU0VDT05EPSJzZWNvbmQiLHQuVEhJUkQ9InRoaXJkIix0LkZPVVJUSD0iZm91cnRoIix0LkZJRlRIPSJmaWZ0aCIsdC5TSVhUSD0ic2l4dGgifSkoY3x8KGM9e30pKTtjb25zdCBJPXtbYy5GSVJTVF06MSxbYy5TRUNPTkRdOjIsW2MuVEhJUkRdOjMsW2MuRk9VUlRIXTo0LFtjLkZJRlRIXTo1LFtjLlNJWFRIXTo2fSx2PVthLlRFWFQsYS5IWVBFUkxJTkssYS5TVUJTQ1JJUFQsYS5TVVBFUlNDUklQVCxhLkNPTlRST0wsYS5EQVRFXSxoPSJcdTIwMEIiO2Z1bmN0aW9uIFQodCl7cmV0dXJuIXQudHlwZXx8di5pbmNsdWRlcyh0LnR5cGUpfWZ1bmN0aW9uIGYodCl7Y29uc3QgaT1bXTtsZXQgZT0wO2Zvcig7ZTx0Lmxlbmd0aDspe2NvbnN0IHM9dFtlXTtpZihzLnRpdGxlSWQpe2NvbnN0IG89cy50aXRsZUlkLGw9cy5sZXZlbCxuPXt0eXBlOmEuVElUTEUsdmFsdWU6IiIsbGV2ZWw6bCx0aXRsZUlkOm99LHI9W107Zm9yKDtlPHQubGVuZ3RoOyl7Y29uc3QgdT10W2VdO2lmKG8hPT11LnRpdGxlSWQpe2UtLTticmVha31yLnB1c2godSksZSsrfW4udmFsdWU9ci5maWx0ZXIodT0+VCh1KSkubWFwKHU9PnUudmFsdWUpLmpvaW4oIiIpLnJlcGxhY2UobmV3IFJlZ0V4cChoLCJnIiksIiIpLGkucHVzaChuKX1lKyt9aWYoIWkubGVuZ3RoKXJldHVybiBudWxsO2NvbnN0IGc9KHMsbyk9Pntjb25zdCBsPW8uc3ViQ2F0YWxvZ1tvLnN1YkNhdGFsb2cubGVuZ3RoLTFdLG49SVtsPT1udWxsP3ZvaWQgMDpsLmxldmVsXSxyPUlbcy5sZXZlbF07bCYmcj5uP2cocyxsKTpvLnN1YkNhdGFsb2cucHVzaCh7aWQ6cy50aXRsZUlkLG5hbWU6cy52YWx1ZSxsZXZlbDpzLmxldmVsLHN1YkNhdGFsb2c6W119KX0sUj1bXTtmb3IobGV0IHM9MDtzPGkubGVuZ3RoO3MrKyl7Y29uc3Qgbz1pW3NdLGw9UltSLmxlbmd0aC0xXSxuPUlbbD09bnVsbD92b2lkIDA6bC5sZXZlbF0scj1JW28ubGV2ZWxdO2wmJnI+bj9nKG8sbCk6Ui5wdXNoKHtpZDpvLnRpdGxlSWQsbmFtZTpvLnZhbHVlLGxldmVsOm8ubGV2ZWwsc3ViQ2F0YWxvZzpbXX0pfXJldHVybiBSfW9ubWVzc2FnZT10PT57Y29uc3QgaT10LmRhdGEsZT1mKGkpO3Bvc3RNZXNzYWdlKGUpfX0pKCk7fSkoKTsK";
12631
+ const blob$1 = typeof window !== "undefined" && window.Blob && new Blob([atob(encodedJs$1)], { type: "text/javascript;charset=utf-8" });
12632
+ function WorkerWrapper$1() {
12633
+ const objURL = blob$1 && (window.URL || window.webkitURL).createObjectURL(blob$1);
12634
+ try {
12635
+ return objURL ? new Worker(objURL) : new Worker("data:application/javascript;base64," + encodedJs$1, { type: "module" });
12636
+ } finally {
12637
+ objURL && (window.URL || window.webkitURL).revokeObjectURL(objURL);
12638
+ }
12639
+ }
12640
+ const encodedJs = "KCgpPT57KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBuOyhmdW5jdGlvbihvKXtvLlRBQkxFPSJ0YWJsZSJ9KShufHwobj17fSkpO2Z1bmN0aW9uIGMobyl7Y29uc3QgdD1bXTtmb3IoY29uc3QgcyBvZiBvKXtpZihzLnR5cGU9PT1uLlRBQkxFKXtjb25zdCBlPXMudHJMaXN0O2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKXtjb25zdCBpPWVbcl07Zm9yKGxldCB1PTA7dTxpLnRkTGlzdC5sZW5ndGg7dSsrKXtjb25zdCBkPWkudGRMaXN0W3VdO3QucHVzaCguLi5jKGQudmFsdWUpKX19fWlmKCEhcy5ncm91cElkcylmb3IoY29uc3QgZSBvZiBzLmdyb3VwSWRzKXQuaW5jbHVkZXMoZSl8fHQucHVzaChlKX1yZXR1cm4gdH1vbm1lc3NhZ2U9bz0+e2NvbnN0IHQ9by5kYXRhLHM9Yyh0KTtwb3N0TWVzc2FnZShzKX19KSgpO30pKCk7Cg==";
12641
+ const blob = typeof window !== "undefined" && window.Blob && new Blob([atob(encodedJs)], { type: "text/javascript;charset=utf-8" });
12642
+ function WorkerWrapper() {
12643
+ const objURL = blob && (window.URL || window.webkitURL).createObjectURL(blob);
12644
+ try {
12645
+ return objURL ? new Worker(objURL) : new Worker("data:application/javascript;base64," + encodedJs, { type: "module" });
12646
+ } finally {
12647
+ objURL && (window.URL || window.webkitURL).revokeObjectURL(objURL);
12648
+ }
12649
+ }
12650
+ class WorkerManager {
12651
+ constructor(draw) {
12652
+ __publicField(this, "draw");
12653
+ __publicField(this, "wordCountWorker");
12654
+ __publicField(this, "catalogWorker");
12655
+ __publicField(this, "groupWorker");
12656
+ this.draw = draw;
12657
+ this.wordCountWorker = new WorkerWrapper$2();
12658
+ this.catalogWorker = new WorkerWrapper$1();
12659
+ this.groupWorker = new WorkerWrapper();
12660
+ }
12661
+ getWordCount() {
12662
+ return new Promise((resolve, reject) => {
12663
+ this.wordCountWorker.onmessage = (evt) => {
12664
+ resolve(evt.data);
12665
+ };
12666
+ this.wordCountWorker.onerror = (evt) => {
12667
+ reject(evt);
12668
+ };
12669
+ const elementList = this.draw.getOriginalMainElementList();
12670
+ this.wordCountWorker.postMessage(elementList);
12671
+ });
12672
+ }
12673
+ getCatalog() {
12674
+ return new Promise((resolve, reject) => {
12675
+ this.catalogWorker.onmessage = (evt) => {
12676
+ resolve(evt.data);
12677
+ };
12678
+ this.catalogWorker.onerror = (evt) => {
12679
+ reject(evt);
12680
+ };
12681
+ const elementList = this.draw.getOriginalMainElementList();
12682
+ this.catalogWorker.postMessage(elementList);
12683
+ });
12684
+ }
12685
+ getGroupIds() {
12686
+ return new Promise((resolve, reject) => {
12687
+ this.groupWorker.onmessage = (evt) => {
12688
+ resolve(evt.data);
12689
+ };
12690
+ this.groupWorker.onerror = (evt) => {
12691
+ reject(evt);
12692
+ };
12693
+ const elementList = this.draw.getOriginalMainElementList();
12694
+ this.groupWorker.postMessage(elementList);
12695
+ });
12696
+ }
12697
+ }
12698
+ class Previewer {
12699
+ constructor(draw) {
12700
+ __publicField(this, "container");
12701
+ __publicField(this, "canvas");
12702
+ __publicField(this, "draw");
12703
+ __publicField(this, "options");
12704
+ __publicField(this, "curElement");
12705
+ __publicField(this, "curElementSrc");
12706
+ __publicField(this, "previewerDrawOption");
12707
+ __publicField(this, "curPosition");
12708
+ __publicField(this, "resizerSelection");
12709
+ __publicField(this, "resizerHandleList");
12710
+ __publicField(this, "resizerImageContainer");
12711
+ __publicField(this, "resizerImage");
12712
+ __publicField(this, "resizerSize");
12713
+ __publicField(this, "width");
12714
+ __publicField(this, "height");
12715
+ __publicField(this, "mousedownX");
12716
+ __publicField(this, "mousedownY");
12717
+ __publicField(this, "curHandleIndex");
12718
+ __publicField(this, "previewerContainer");
12719
+ __publicField(this, "previewerImage");
12720
+ __publicField(this, "_keydown", () => {
12721
+ if (this.resizerSelection.style.display === "block") {
12722
+ this.clearResizer();
12723
+ document.removeEventListener("keydown", this._keydown);
12724
+ }
12725
+ });
12726
+ this.container = draw.getContainer();
12727
+ this.canvas = draw.getPage();
12728
+ this.draw = draw;
12729
+ this.options = draw.getOptions();
12730
+ this.curElement = null;
12731
+ this.curElementSrc = "";
12732
+ this.previewerDrawOption = {};
12733
+ this.curPosition = null;
12734
+ const { resizerSelection, resizerHandleList, resizerImageContainer, resizerImage, resizerSize } = this._createResizerDom();
12735
+ this.resizerSelection = resizerSelection;
12736
+ this.resizerHandleList = resizerHandleList;
12737
+ this.resizerImageContainer = resizerImageContainer;
12738
+ this.resizerImage = resizerImage;
12739
+ this.resizerSize = resizerSize;
12740
+ this.width = 0;
12741
+ this.height = 0;
12742
+ this.mousedownX = 0;
12743
+ this.mousedownY = 0;
12744
+ this.curHandleIndex = 0;
12745
+ this.previewerContainer = null;
12746
+ this.previewerImage = null;
12747
+ }
12748
+ _getElementPosition(element, position = null) {
12749
+ var _a;
12750
+ let x = 0;
12751
+ let y = 0;
12752
+ const height = this.draw.getHeight();
12753
+ const pageGap = this.draw.getPageGap();
12754
+ const pageNo = (_a = position == null ? void 0 : position.pageNo) != null ? _a : this.draw.getPageNo();
12755
+ const preY = pageNo * (height + pageGap);
12756
+ if (element.imgFloatPosition) {
12757
+ x = element.imgFloatPosition.x;
12758
+ y = element.imgFloatPosition.y + preY;
12759
+ } else if (position) {
12760
+ const { coordinate: { leftTop: [left2, top] }, ascent } = position;
12761
+ x = left2;
12762
+ y = top + preY + ascent;
12763
+ }
12764
+ return { x, y };
12765
+ }
12766
+ _createResizerDom() {
12767
+ const resizerSelection = document.createElement("div");
12768
+ resizerSelection.classList.add(`${EDITOR_PREFIX}-resizer-selection`);
12769
+ resizerSelection.style.display = "none";
12770
+ resizerSelection.style.borderColor = this.options.resizerColor;
12771
+ const resizerHandleList = [];
12772
+ for (let i = 0; i < 8; i++) {
12773
+ const handleDom = document.createElement("div");
12774
+ handleDom.style.background = this.options.resizerColor;
12775
+ handleDom.classList.add(`resizer-handle`);
12776
+ handleDom.classList.add(`handle-${i}`);
12777
+ handleDom.setAttribute("data-index", String(i));
12778
+ handleDom.onmousedown = this._mousedown.bind(this);
12779
+ resizerSelection.append(handleDom);
12780
+ resizerHandleList.push(handleDom);
12781
+ }
12782
+ this.container.append(resizerSelection);
12783
+ const resizerSizeView = document.createElement("div");
12784
+ resizerSizeView.classList.add(`${EDITOR_PREFIX}-resizer-size-view`);
12785
+ const resizerSize = document.createElement("span");
12786
+ resizerSizeView.append(resizerSize);
12787
+ resizerSelection.append(resizerSizeView);
12788
+ const resizerImageContainer = document.createElement("div");
12789
+ resizerImageContainer.classList.add(`${EDITOR_PREFIX}-resizer-image`);
12790
+ resizerImageContainer.style.display = "none";
12791
+ const resizerImage = document.createElement("img");
12792
+ resizerImageContainer.append(resizerImage);
12793
+ this.container.append(resizerImageContainer);
12794
+ return {
12795
+ resizerSelection,
12796
+ resizerHandleList,
12797
+ resizerImageContainer,
12798
+ resizerImage,
12799
+ resizerSize
12800
+ };
12801
+ }
12802
+ _mousedown(evt) {
12803
+ this.canvas = this.draw.getPage();
12804
+ if (!this.curElement)
12805
+ return;
12806
+ const { scale } = this.options;
12807
+ this.mousedownX = evt.x;
12808
+ this.mousedownY = evt.y;
12809
+ const target = evt.target;
12810
+ this.curHandleIndex = Number(target.dataset.index);
12811
+ const cursor = window.getComputedStyle(target).cursor;
12812
+ document.body.style.cursor = cursor;
12813
+ this.canvas.style.cursor = cursor;
12814
+ this.resizerImage.src = this.curElementSrc;
12815
+ this.resizerImageContainer.style.display = "block";
12816
+ const { x: resizerLeft, y: resizerTop } = this._getElementPosition(this.curElement, this.curPosition);
12817
+ this.resizerImageContainer.style.left = `${resizerLeft}px`;
12818
+ this.resizerImageContainer.style.top = `${resizerTop}px`;
12819
+ this.resizerImage.style.width = `${this.curElement.width * scale}px`;
12820
+ this.resizerImage.style.height = `${this.curElement.height * scale}px`;
12821
+ const mousemoveFn = this._mousemove.bind(this);
12822
+ document.addEventListener("mousemove", mousemoveFn);
12823
+ document.addEventListener("mouseup", () => {
12824
+ var _a;
12825
+ if (this.curElement) {
12826
+ this.curElement.width = this.width;
12827
+ this.curElement.height = this.height;
12828
+ this.draw.render({
12829
+ isSetCursor: true,
12830
+ curIndex: (_a = this.curPosition) == null ? void 0 : _a.index
12831
+ });
12832
+ }
12833
+ this.resizerImageContainer.style.display = "none";
12834
+ document.removeEventListener("mousemove", mousemoveFn);
12835
+ document.body.style.cursor = "";
12836
+ this.canvas.style.cursor = "text";
12837
+ }, {
12838
+ once: true
12839
+ });
12840
+ evt.preventDefault();
12841
+ }
12842
+ _mousemove(evt) {
12843
+ if (!this.curElement)
12844
+ return;
12845
+ const { scale } = this.options;
12846
+ let dx = 0;
12847
+ let dy = 0;
12848
+ switch (this.curHandleIndex) {
12849
+ case 0:
12850
+ {
12851
+ const offsetX = this.mousedownX - evt.x;
12852
+ const offsetY = this.mousedownY - evt.y;
12853
+ dx = Math.cbrt(offsetX ** 3 + offsetY ** 3);
12854
+ dy = this.curElement.height * dx / this.curElement.width;
12855
+ }
12856
+ break;
12857
+ case 1:
12858
+ dy = this.mousedownY - evt.y;
12859
+ break;
12860
+ case 2:
12861
+ {
12862
+ const offsetX = evt.x - this.mousedownX;
12863
+ const offsetY = this.mousedownY - evt.y;
12864
+ dx = Math.cbrt(offsetX ** 3 + offsetY ** 3);
12865
+ dy = this.curElement.height * dx / this.curElement.width;
12866
+ }
12867
+ break;
12868
+ case 4:
12869
+ {
12870
+ const offsetX = evt.x - this.mousedownX;
12871
+ const offsetY = evt.y - this.mousedownY;
12872
+ dx = Math.cbrt(offsetX ** 3 + offsetY ** 3);
12873
+ dy = this.curElement.height * dx / this.curElement.width;
12874
+ }
12875
+ break;
12876
+ case 3:
12877
+ dx = evt.x - this.mousedownX;
12878
+ break;
12879
+ case 5:
12880
+ dy = evt.y - this.mousedownY;
12881
+ break;
12882
+ case 6:
12883
+ {
12884
+ const offsetX = this.mousedownX - evt.x;
12885
+ const offsetY = evt.y - this.mousedownY;
12886
+ dx = Math.cbrt(offsetX ** 3 + offsetY ** 3);
12887
+ dy = this.curElement.height * dx / this.curElement.width;
12888
+ }
12889
+ break;
12890
+ case 7:
12891
+ dx = this.mousedownX - evt.x;
12892
+ break;
12893
+ }
12894
+ const dw = this.curElement.width + dx / scale;
12895
+ const dh = this.curElement.height + dy / scale;
12896
+ if (dw <= 0 || dh <= 0)
12897
+ return;
12898
+ this.width = dw;
12899
+ this.height = dh;
12900
+ const elementWidth = dw * scale;
12901
+ const elementHeight = dh * scale;
12902
+ this.resizerImage.style.width = `${elementWidth}px`;
12903
+ this.resizerImage.style.height = `${elementHeight}px`;
12904
+ this._updateResizerRect(elementWidth, elementHeight);
12905
+ this._updateResizerSizeView(elementWidth, elementHeight);
12906
+ evt.preventDefault();
12907
+ }
12908
+ _drawPreviewer() {
12909
+ const previewerContainer = document.createElement("div");
12910
+ previewerContainer.classList.add(`${EDITOR_PREFIX}-image-previewer`);
12911
+ const closeBtn = document.createElement("i");
12912
+ closeBtn.classList.add("image-close");
12913
+ closeBtn.onclick = () => {
12914
+ this._clearPreviewer();
12170
12915
  };
12171
- this.dom.title.nextMonth.onclick = () => {
12172
- this._nextMonth();
12916
+ previewerContainer.append(closeBtn);
12917
+ const imgContainer = document.createElement("div");
12918
+ imgContainer.classList.add(`${EDITOR_PREFIX}-image-container`);
12919
+ const img = document.createElement("img");
12920
+ img.src = this.curElementSrc;
12921
+ img.draggable = false;
12922
+ imgContainer.append(img);
12923
+ this.previewerImage = img;
12924
+ previewerContainer.append(imgContainer);
12925
+ let x = 0;
12926
+ let y = 0;
12927
+ let scaleSize = 1;
12928
+ let rotateSize = 0;
12929
+ const menuContainer = document.createElement("div");
12930
+ menuContainer.classList.add(`${EDITOR_PREFIX}-image-menu`);
12931
+ const zoomIn = document.createElement("i");
12932
+ zoomIn.classList.add("zoom-in");
12933
+ zoomIn.onclick = () => {
12934
+ scaleSize += 0.1;
12935
+ this._setPreviewerTransform(scaleSize, rotateSize, x, y);
12173
12936
  };
12174
- this.dom.title.nextYear.onclick = () => {
12175
- this._nextYear();
12937
+ menuContainer.append(zoomIn);
12938
+ const zoomOut = document.createElement("i");
12939
+ zoomOut.onclick = () => {
12940
+ if (scaleSize - 0.1 <= 0.1)
12941
+ return;
12942
+ scaleSize -= 0.1;
12943
+ this._setPreviewerTransform(scaleSize, rotateSize, x, y);
12176
12944
  };
12177
- this.dom.menu.time.onclick = () => {
12178
- this.isDatePicker = !this.isDatePicker;
12179
- this._toggleDateTimePicker();
12945
+ zoomOut.classList.add("zoom-out");
12946
+ menuContainer.append(zoomOut);
12947
+ const rotate = document.createElement("i");
12948
+ rotate.classList.add("rotate");
12949
+ rotate.onclick = () => {
12950
+ rotateSize += 1;
12951
+ this._setPreviewerTransform(scaleSize, rotateSize, x, y);
12180
12952
  };
12181
- this.dom.menu.now.onclick = () => {
12182
- this._now();
12183
- this._submit();
12953
+ menuContainer.append(rotate);
12954
+ const originalSize = document.createElement("i");
12955
+ originalSize.classList.add("original-size");
12956
+ originalSize.onclick = () => {
12957
+ x = 0;
12958
+ y = 0;
12959
+ scaleSize = 1;
12960
+ rotateSize = 0;
12961
+ this._setPreviewerTransform(scaleSize, rotateSize, x, y);
12184
12962
  };
12185
- this.dom.menu.submit.onclick = () => {
12186
- this.dispose();
12187
- this._submit();
12963
+ menuContainer.append(originalSize);
12964
+ const imageDownload = document.createElement("i");
12965
+ imageDownload.classList.add("image-download");
12966
+ imageDownload.onclick = () => {
12967
+ var _a;
12968
+ const { mime } = this.previewerDrawOption;
12969
+ downloadFile(img.src, `${(_a = this.curElement) == null ? void 0 : _a.id}.${mime || "png"}`);
12188
12970
  };
12189
- this.dom.time.hour.onclick = (evt) => {
12190
- if (!this.pickDate)
12191
- return;
12192
- const li = evt.target;
12193
- const id = li.dataset.id;
12194
- if (!id)
12195
- return;
12196
- this.pickDate.setHours(Number(id));
12197
- this._setTimePick(false);
12971
+ menuContainer.append(imageDownload);
12972
+ previewerContainer.append(menuContainer);
12973
+ this.previewerContainer = previewerContainer;
12974
+ document.body.append(previewerContainer);
12975
+ let startX = 0;
12976
+ let startY = 0;
12977
+ let isAllowDrag = false;
12978
+ img.onmousedown = (evt) => {
12979
+ isAllowDrag = true;
12980
+ startX = evt.x;
12981
+ startY = evt.y;
12982
+ previewerContainer.style.cursor = "move";
12198
12983
  };
12199
- this.dom.time.minute.onclick = (evt) => {
12200
- if (!this.pickDate)
12201
- return;
12202
- const li = evt.target;
12203
- const id = li.dataset.id;
12204
- if (!id)
12984
+ previewerContainer.onmousemove = (evt) => {
12985
+ if (!isAllowDrag)
12205
12986
  return;
12206
- this.pickDate.setMinutes(Number(id));
12207
- this._setTimePick(false);
12987
+ x += evt.x - startX;
12988
+ y += evt.y - startY;
12989
+ startX = evt.x;
12990
+ startY = evt.y;
12991
+ this._setPreviewerTransform(scaleSize, rotateSize, x, y);
12208
12992
  };
12209
- this.dom.time.second.onclick = (evt) => {
12210
- if (!this.pickDate)
12211
- return;
12212
- const li = evt.target;
12213
- const id = li.dataset.id;
12214
- if (!id)
12215
- return;
12216
- this.pickDate.setSeconds(Number(id));
12217
- this._setTimePick(false);
12993
+ previewerContainer.onmouseup = () => {
12994
+ isAllowDrag = false;
12995
+ previewerContainer.style.cursor = "auto";
12218
12996
  };
12219
- }
12220
- _setPosition() {
12221
- if (!this.renderOptions)
12222
- return;
12223
- const { position: { coordinate: { leftTop: [left2, top] }, lineHeight }, startTop } = this.renderOptions;
12224
- this.dom.container.style.left = `${left2}px`;
12225
- this.dom.container.style.top = `${top + (startTop || 0) + lineHeight}px`;
12226
- }
12227
- isInvalidDate(value) {
12228
- return value.toDateString() === "Invalid Date";
12229
- }
12230
- _setValue() {
12231
- var _a;
12232
- const value = (_a = this.renderOptions) == null ? void 0 : _a.value;
12233
- if (value) {
12234
- const setDate = new Date(value);
12235
- this.now = this.isInvalidDate(setDate) ? new Date() : setDate;
12236
- } else {
12237
- this.now = new Date();
12238
- }
12239
- this.pickDate = new Date(this.now);
12240
- }
12241
- _setLang() {
12242
- this.dom.menu.time.innerText = this.lang.timeSelect;
12243
- this.dom.menu.now.innerText = this.lang.now;
12244
- this.dom.menu.submit.innerText = this.lang.confirm;
12245
- const { weeks: { sun, mon, tue, wed, thu, fri, sat } } = this.lang;
12246
- const weekList = [sun, mon, tue, wed, thu, fri, sat];
12247
- this.dom.datePickerWeek.childNodes.forEach((child, i) => {
12248
- const childElement = child;
12249
- childElement.innerText = weekList[i];
12250
- });
12251
- const hourTitle = this.dom.time.hour.previousElementSibling;
12252
- hourTitle.innerText = this.lang.hour;
12253
- const minuteTitle = this.dom.time.minute.previousElementSibling;
12254
- minuteTitle.innerText = this.lang.minute;
12255
- const secondTitle = this.dom.time.second.previousElementSibling;
12256
- secondTitle.innerText = this.lang.second;
12257
- }
12258
- _update() {
12259
- const localDate = new Date();
12260
- const localYear = localDate.getFullYear();
12261
- const localMonth = localDate.getMonth() + 1;
12262
- const localDay = localDate.getDate();
12263
- let pickYear = null;
12264
- let pickMonth = null;
12265
- let pickDay = null;
12266
- if (this.pickDate) {
12267
- pickYear = this.pickDate.getFullYear();
12268
- pickMonth = this.pickDate.getMonth() + 1;
12269
- pickDay = this.pickDate.getDate();
12270
- }
12271
- const year = this.now.getFullYear();
12272
- const month = this.now.getMonth() + 1;
12273
- this.dom.title.now.innerText = `${year}${this.lang.year} ${String(month).padStart(2, "0")}${this.lang.month}`;
12274
- const curDate = new Date(year, month, 0);
12275
- const curDay = curDate.getDate();
12276
- let curWeek = new Date(year, month - 1, 1).getDay();
12277
- if (curWeek === 0) {
12278
- curWeek = 7;
12279
- }
12280
- const preDay = new Date(year, month - 1, 0).getDate();
12281
- this.dom.day.innerHTML = "";
12282
- const preStartDay = preDay - curWeek + 1;
12283
- for (let i = preStartDay; i <= preDay; i++) {
12284
- const dayDom = document.createElement("div");
12285
- dayDom.classList.add("disable");
12286
- dayDom.innerText = `${i}`;
12287
- dayDom.onclick = () => {
12288
- const newMonth = month - 2;
12289
- this.now = new Date(year, newMonth, i);
12290
- this._setDatePick(year, newMonth, i);
12291
- };
12292
- this.dom.day.append(dayDom);
12293
- }
12294
- for (let i = 1; i <= curDay; i++) {
12295
- const dayDom = document.createElement("div");
12296
- if (localYear === year && localMonth === month && localDay === i) {
12297
- dayDom.classList.add("active");
12298
- }
12299
- if (this.pickDate && pickYear === year && pickMonth === month && pickDay === i) {
12300
- dayDom.classList.add("select");
12301
- }
12302
- dayDom.innerText = `${i}`;
12303
- dayDom.onclick = (evt) => {
12304
- const newMonth = month - 1;
12305
- this.now = new Date(year, newMonth, i);
12306
- this._setDatePick(year, newMonth, i);
12307
- evt.stopPropagation();
12308
- };
12309
- this.dom.day.append(dayDom);
12310
- }
12311
- const nextEndDay = 6 * 7 - curWeek - curDay;
12312
- for (let i = 1; i <= nextEndDay; i++) {
12313
- const dayDom = document.createElement("div");
12314
- dayDom.classList.add("disable");
12315
- dayDom.innerText = `${i}`;
12316
- dayDom.onclick = () => {
12317
- this.now = new Date(year, month, i);
12318
- this._setDatePick(year, month, i);
12319
- };
12320
- this.dom.day.append(dayDom);
12321
- }
12322
- }
12323
- _toggleDateTimePicker() {
12324
- if (this.isDatePicker) {
12325
- this.dom.dateWrap.classList.add("active");
12326
- this.dom.timeWrap.classList.remove("active");
12327
- this.dom.menu.time.innerText = this.lang.timeSelect;
12328
- } else {
12329
- this.dom.dateWrap.classList.remove("active");
12330
- this.dom.timeWrap.classList.add("active");
12331
- this.dom.menu.time.innerText = this.lang.return;
12332
- this._setTimePick();
12333
- }
12334
- }
12335
- _setDatePick(year, month, day) {
12336
- var _a, _b, _c;
12337
- this.now = new Date(year, month, day);
12338
- (_a = this.pickDate) == null ? void 0 : _a.setFullYear(year);
12339
- (_b = this.pickDate) == null ? void 0 : _b.setMonth(month);
12340
- (_c = this.pickDate) == null ? void 0 : _c.setDate(day);
12341
- this._update();
12342
- }
12343
- _setTimePick(isIntoView = true) {
12344
- var _a, _b, _c;
12345
- const hour = ((_a = this.pickDate) == null ? void 0 : _a.getHours()) || 0;
12346
- const minute = ((_b = this.pickDate) == null ? void 0 : _b.getMinutes()) || 0;
12347
- const second = ((_c = this.pickDate) == null ? void 0 : _c.getSeconds()) || 0;
12348
- const { hour: hourDom, minute: minuteDom, second: secondDom } = this.dom.time;
12349
- const timeDomList = [hourDom, minuteDom, secondDom];
12350
- timeDomList.forEach((timeDom) => {
12351
- timeDom.querySelectorAll("li").forEach((li) => li.classList.remove("active"));
12352
- });
12353
- const pickList = [
12354
- [hourDom, hour],
12355
- [minuteDom, minute],
12356
- [secondDom, second]
12357
- ];
12358
- pickList.forEach(([dom, time]) => {
12359
- const pickDom = dom.querySelector(`[data-id='${time}']`);
12360
- pickDom.classList.add("active");
12361
- if (isIntoView) {
12362
- this._scrollIntoView(dom, pickDom);
12997
+ previewerContainer.onwheel = (evt) => {
12998
+ evt.preventDefault();
12999
+ if (evt.deltaY < 0) {
13000
+ scaleSize += 0.1;
13001
+ } else {
13002
+ if (scaleSize - 0.1 <= 0.1)
13003
+ return;
13004
+ scaleSize -= 0.1;
12363
13005
  }
12364
- });
13006
+ this._setPreviewerTransform(scaleSize, rotateSize, x, y);
13007
+ };
12365
13008
  }
12366
- _scrollIntoView(container, selected) {
12367
- if (!selected) {
12368
- container.scrollTop = 0;
13009
+ _setPreviewerTransform(scale, rotate, x, y) {
13010
+ if (!this.previewerImage)
12369
13011
  return;
12370
- }
12371
- const offsetParents = [];
12372
- let pointer = selected.offsetParent;
12373
- while (pointer && container !== pointer && container.contains(pointer)) {
12374
- offsetParents.push(pointer);
12375
- pointer = pointer.offsetParent;
12376
- }
12377
- const top = selected.offsetTop + offsetParents.reduce((prev, curr) => prev + curr.offsetTop, 0);
12378
- const bottom = top + selected.offsetHeight;
12379
- const viewRectTop = container.scrollTop;
12380
- const viewRectBottom = viewRectTop + container.clientHeight;
12381
- if (top < viewRectTop) {
12382
- container.scrollTop = top;
12383
- } else if (bottom > viewRectBottom) {
12384
- container.scrollTop = bottom - container.clientHeight;
12385
- }
12386
- }
12387
- _preMonth() {
12388
- this.now.setMonth(this.now.getMonth() - 1);
12389
- this._update();
12390
- }
12391
- _nextMonth() {
12392
- this.now.setMonth(this.now.getMonth() + 1);
12393
- this._update();
12394
- }
12395
- _preYear() {
12396
- this.now.setFullYear(this.now.getFullYear() - 1);
12397
- this._update();
12398
- }
12399
- _nextYear() {
12400
- this.now.setFullYear(this.now.getFullYear() + 1);
12401
- this._update();
13012
+ this.previewerImage.style.left = `${x}px`;
13013
+ this.previewerImage.style.top = `${y}px`;
13014
+ this.previewerImage.style.transform = `scale(${scale}) rotate(${rotate * 90}deg)`;
12402
13015
  }
12403
- _now() {
12404
- this.pickDate = new Date();
12405
- this.dispose();
13016
+ _clearPreviewer() {
13017
+ var _a;
13018
+ (_a = this.previewerContainer) == null ? void 0 : _a.remove();
13019
+ this.previewerContainer = null;
13020
+ document.body.style.overflow = "auto";
12406
13021
  }
12407
- _toggleVisible(isVisible) {
12408
- if (isVisible) {
12409
- this.dom.container.classList.add("active");
12410
- } else {
12411
- this.dom.container.classList.remove("active");
13022
+ _updateResizerRect(width, height) {
13023
+ const handleSize = this.options.resizerSize;
13024
+ this.resizerSelection.style.width = `${width}px`;
13025
+ this.resizerSelection.style.height = `${height}px`;
13026
+ for (let i = 0; i < 8; i++) {
13027
+ const left2 = i === 0 || i === 6 || i === 7 ? -handleSize : i === 1 || i === 5 ? width / 2 : width - handleSize;
13028
+ const top = i === 0 || i === 1 || i === 2 ? -handleSize : i === 3 || i === 7 ? height / 2 - handleSize : height - handleSize;
13029
+ this.resizerHandleList[i].style.left = `${left2}px`;
13030
+ this.resizerHandleList[i].style.top = `${top}px`;
12412
13031
  }
12413
13032
  }
12414
- _submit() {
12415
- var _a;
12416
- if (this.options.onSubmit && this.pickDate) {
12417
- const format = (_a = this.renderOptions) == null ? void 0 : _a.element.dateFormat;
12418
- const pickDateString = this.formatDate(this.pickDate, format);
12419
- this.options.onSubmit(pickDateString);
12420
- }
13033
+ _updateResizerSizeView(width, height) {
13034
+ this.resizerSize.innerText = `${Math.round(width)} \xD7 ${Math.round(height)}`;
12421
13035
  }
12422
- formatDate(date, format = "yyyy-MM-dd hh:mm:ss") {
12423
- let dateString = format;
12424
- const dateOption = {
12425
- "y+": date.getFullYear().toString(),
12426
- "M+": (date.getMonth() + 1).toString(),
12427
- "d+": date.getDate().toString(),
12428
- "h+": date.getHours().toString(),
12429
- "m+": date.getMinutes().toString(),
12430
- "s+": date.getSeconds().toString()
12431
- };
12432
- for (const k in dateOption) {
12433
- const reg = new RegExp("(" + k + ")").exec(format);
12434
- const key = k;
12435
- if (reg) {
12436
- dateString = dateString.replace(reg[1], reg[1].length === 1 ? dateOption[key] : dateOption[key].padStart(reg[1].length, "0"));
12437
- }
12438
- }
12439
- return dateString;
13036
+ render() {
13037
+ this._drawPreviewer();
13038
+ document.body.style.overflow = "hidden";
12440
13039
  }
12441
- render(option) {
12442
- this.renderOptions = option;
12443
- if (this.options.getLang) {
12444
- this.lang = this.options.getLang();
12445
- this._setLang();
12446
- }
12447
- this._setValue();
12448
- this._update();
12449
- this._setPosition();
12450
- this.isDatePicker = true;
12451
- this._toggleDateTimePicker();
12452
- this._toggleVisible(true);
13040
+ drawResizer(element, position = null, options = {}) {
13041
+ this.previewerDrawOption = options;
13042
+ this.curElementSrc = element[options.srcKey || "value"] || "";
13043
+ this.updateResizer(element, position);
13044
+ document.addEventListener("keydown", this._keydown);
12453
13045
  }
12454
- dispose() {
12455
- this._toggleVisible(false);
13046
+ updateResizer(element, position = null) {
13047
+ const { scale } = this.options;
13048
+ const elementWidth = element.width * scale;
13049
+ const elementHeight = element.height * scale;
13050
+ this._updateResizerSizeView(elementWidth, elementHeight);
13051
+ const { x: resizerLeft, y: resizerTop } = this._getElementPosition(element, position);
13052
+ this.resizerSelection.style.left = `${resizerLeft}px`;
13053
+ this.resizerSelection.style.top = `${resizerTop}px`;
13054
+ this._updateResizerRect(elementWidth, elementHeight);
13055
+ this.resizerSelection.style.display = "block";
13056
+ this.curElement = element;
13057
+ this.curPosition = position;
13058
+ this.width = elementWidth;
13059
+ this.height = elementHeight;
13060
+ }
13061
+ clearResizer() {
13062
+ this.resizerSelection.style.display = "none";
13063
+ document.removeEventListener("keydown", this._keydown);
12456
13064
  }
12457
13065
  }
12458
13066
  class DateParticle {
@@ -12462,31 +13070,8 @@ class DateParticle {
12462
13070
  __publicField(this, "datePicker");
12463
13071
  this.draw = draw;
12464
13072
  this.range = draw.getRange();
12465
- const i18n = draw.getI18n();
12466
- const t = i18n.t.bind(i18n);
12467
- this.datePicker = new DatePicker({
12468
- mountDom: draw.getContainer(),
12469
- onSubmit: this._setValue.bind(this),
12470
- getLang: () => ({
12471
- now: t("datePicker.now"),
12472
- confirm: t("datePicker.confirm"),
12473
- return: t("datePicker.return"),
12474
- timeSelect: t("datePicker.timeSelect"),
12475
- weeks: {
12476
- sun: t("datePicker.weeks.sun"),
12477
- mon: t("datePicker.weeks.mon"),
12478
- tue: t("datePicker.weeks.tue"),
12479
- wed: t("datePicker.weeks.wed"),
12480
- thu: t("datePicker.weeks.thu"),
12481
- fri: t("datePicker.weeks.fri"),
12482
- sat: t("datePicker.weeks.sat")
12483
- },
12484
- year: t("datePicker.year"),
12485
- month: t("datePicker.month"),
12486
- hour: t("datePicker.hour"),
12487
- minute: t("datePicker.minute"),
12488
- second: t("datePicker.second")
12489
- })
13073
+ this.datePicker = new DatePicker(draw, {
13074
+ onSubmit: this._setValue.bind(this)
12490
13075
  });
12491
13076
  }
12492
13077
  _setValue(date) {
@@ -12552,17 +13137,13 @@ class DateParticle {
12552
13137
  this.datePicker.dispose();
12553
13138
  }
12554
13139
  renderDatePicker(element, position) {
12555
- const height = this.draw.getHeight();
12556
- const pageGap = this.draw.getPageGap();
12557
- const startTop = this.draw.getPageNo() * (height + pageGap);
12558
13140
  const elementList = this.draw.getElementList();
12559
13141
  const range = this.getDateElementRange();
12560
13142
  const value = range ? elementList.slice(range[0] + 1, range[1] + 1).map((el) => el.value).join("") : "";
12561
13143
  this.datePicker.render({
12562
13144
  value,
12563
- element,
12564
13145
  position,
12565
- startTop
13146
+ dateFormat: element.dateFormat
12566
13147
  });
12567
13148
  }
12568
13149
  }
@@ -12725,6 +13306,100 @@ class BlockParticle {
12725
13306
  });
12726
13307
  }
12727
13308
  }
13309
+ const contextmenu$1 = {
13310
+ global: {
13311
+ cut: "\u526A\u5207",
13312
+ copy: "\u590D\u5236",
13313
+ paste: "\u7C98\u8D34",
13314
+ selectAll: "\u5168\u9009",
13315
+ print: "\u6253\u5370"
13316
+ },
13317
+ control: {
13318
+ "delete": "\u5220\u9664\u63A7\u4EF6"
13319
+ },
13320
+ hyperlink: {
13321
+ "delete": "\u5220\u9664\u94FE\u63A5",
13322
+ cancel: "\u53D6\u6D88\u94FE\u63A5",
13323
+ edit: "\u7F16\u8F91\u94FE\u63A5"
13324
+ },
13325
+ image: {
13326
+ change: "\u66F4\u6539\u56FE\u7247",
13327
+ saveAs: "\u53E6\u5B58\u4E3A\u56FE\u7247",
13328
+ textWrap: "\u6587\u5B57\u73AF\u7ED5",
13329
+ textWrapType: {
13330
+ embed: "\u5D4C\u5165\u578B",
13331
+ upDown: "\u4E0A\u4E0B\u578B\u73AF\u7ED5",
13332
+ floatTop: "\u6D6E\u4E8E\u6587\u5B57\u4E0A\u65B9",
13333
+ floatBottom: "\u886C\u4E8E\u6587\u5B57\u4E0B\u65B9"
13334
+ }
13335
+ },
13336
+ table: {
13337
+ insertRowCol: "\u63D2\u5165\u884C\u5217",
13338
+ insertTopRow: "\u4E0A\u65B9\u63D2\u51651\u884C",
13339
+ insertBottomRow: "\u4E0B\u65B9\u63D2\u51651\u884C",
13340
+ insertLeftCol: "\u5DE6\u4FA7\u63D2\u51651\u5217",
13341
+ insertRightCol: "\u53F3\u4FA7\u63D2\u51651\u5217",
13342
+ deleteRowCol: "\u5220\u9664\u884C\u5217",
13343
+ deleteRow: "\u5220\u96641\u884C",
13344
+ deleteCol: "\u5220\u96641\u5217",
13345
+ deleteTable: "\u5220\u9664\u6574\u4E2A\u8868\u683C",
13346
+ mergeCell: "\u5408\u5E76\u5355\u5143\u683C",
13347
+ mergeCancelCell: "\u53D6\u6D88\u5408\u5E76",
13348
+ verticalAlign: "\u5782\u76F4\u5BF9\u9F50",
13349
+ verticalAlignTop: "\u9876\u7AEF\u5BF9\u9F50",
13350
+ verticalAlignMiddle: "\u5782\u76F4\u5C45\u4E2D",
13351
+ verticalAlignBottom: "\u5E95\u7AEF\u5BF9\u9F50",
13352
+ border: "\u8868\u683C\u8FB9\u6846",
13353
+ borderAll: "\u6240\u6709\u6846\u7EBF",
13354
+ borderEmpty: "\u65E0\u6846\u7EBF",
13355
+ borderExternal: "\u5916\u4FA7\u6846\u7EBF",
13356
+ borderTd: "\u5355\u5143\u683C\u8FB9\u6846",
13357
+ borderTdTop: "\u4E0A\u8FB9\u6846",
13358
+ borderTdRight: "\u53F3\u8FB9\u6846",
13359
+ borderTdBottom: "\u4E0B\u8FB9\u6846",
13360
+ borderTdLeft: "\u5DE6\u8FB9\u6846",
13361
+ borderTdForward: "\u6B63\u659C\u7EBF",
13362
+ borderTdBack: "\u53CD\u659C\u7EBF"
13363
+ }
13364
+ };
13365
+ const datePicker$1 = {
13366
+ now: "\u6B64\u523B",
13367
+ confirm: "\u786E\u5B9A",
13368
+ "return": "\u8FD4\u56DE\u65E5\u671F",
13369
+ timeSelect: "\u65F6\u95F4\u9009\u62E9",
13370
+ weeks: {
13371
+ sun: "\u65E5",
13372
+ mon: "\u4E00",
13373
+ tue: "\u4E8C",
13374
+ wed: "\u4E09",
13375
+ thu: "\u56DB",
13376
+ fri: "\u4E94",
13377
+ sat: "\u516D"
13378
+ },
13379
+ year: "\u5E74",
13380
+ month: "\u6708",
13381
+ hour: "\u65F6",
13382
+ minute: "\u5206",
13383
+ second: "\u79D2"
13384
+ };
13385
+ const frame$1 = {
13386
+ header: "\u9875\u7709",
13387
+ footer: "\u9875\u811A"
13388
+ };
13389
+ const pageBreak$1 = {
13390
+ displayName: "\u5206\u9875\u7B26"
13391
+ };
13392
+ const zone$1 = {
13393
+ headerTip: "\u53CC\u51FB\u7F16\u8F91\u9875\u7709",
13394
+ footerTip: "\u53CC\u51FB\u7F16\u8F91\u9875\u811A"
13395
+ };
13396
+ var zhCN = {
13397
+ contextmenu: contextmenu$1,
13398
+ datePicker: datePicker$1,
13399
+ frame: frame$1,
13400
+ pageBreak: pageBreak$1,
13401
+ zone: zone$1
13402
+ };
12728
13403
  const contextmenu = {
12729
13404
  global: {
12730
13405
  cut: "Cut",
@@ -14088,7 +14763,7 @@ class Draw {
14088
14763
  });
14089
14764
  }
14090
14765
  spliceElementList(elementList, start, deleteCount, ...items) {
14091
- var _a, _b;
14766
+ var _a, _b, _c;
14092
14767
  if (deleteCount > 0) {
14093
14768
  const endIndex = start + deleteCount;
14094
14769
  const endElement = elementList[endIndex];
@@ -14109,7 +14784,7 @@ class Draw {
14109
14784
  if (!this.control.getActiveControl()) {
14110
14785
  let deleteIndex = endIndex - 1;
14111
14786
  while (deleteIndex >= start) {
14112
- if (((_b = elementList[deleteIndex].control) == null ? void 0 : _b.deletable) !== false) {
14787
+ if (((_c = (_b = elementList[deleteIndex]) == null ? void 0 : _b.control) == null ? void 0 : _c.deletable) !== false) {
14113
14788
  elementList.splice(deleteIndex, 1);
14114
14789
  }
14115
14790
  deleteIndex--;
@@ -14256,10 +14931,18 @@ class Draw {
14256
14931
  this.footer.recovery();
14257
14932
  this.zone.setZone(EditorZone.MAIN);
14258
14933
  }
14934
+ const { startIndex } = this.range.getRange();
14935
+ const isCollapsed = this.range.getIsCollapsed();
14259
14936
  this.render({
14260
- isSubmitHistory: false,
14261
- isSetCursor: false
14937
+ isSetCursor: true,
14938
+ curIndex: startIndex,
14939
+ isSubmitHistory: false
14262
14940
  });
14941
+ if (!isCollapsed) {
14942
+ this.cursor.drawCursor({
14943
+ isShow: false
14944
+ });
14945
+ }
14263
14946
  setTimeout(() => {
14264
14947
  if (this.listener.pageModeChange) {
14265
14948
  this.listener.pageModeChange(payload);
@@ -14518,14 +15201,11 @@ class Draw {
14518
15201
  } else {
14519
15202
  const elementWidth = element.width * scale;
14520
15203
  const elementHeight = element.height * scale;
14521
- const curRowWidth2 = element.imgDisplay === ImageDisplay.INLINE ? 0 : curRow.width;
14522
- if (curRowWidth2 + elementWidth > availableWidth) {
14523
- const surplusWidth = availableWidth - curRowWidth2;
14524
- const adaptiveWidth = surplusWidth > 0 ? surplusWidth : Math.min(elementWidth, availableWidth);
14525
- const adaptiveHeight = elementHeight * adaptiveWidth / elementWidth;
14526
- element.width = adaptiveWidth / scale;
15204
+ if (elementWidth > availableWidth) {
15205
+ const adaptiveHeight = elementHeight * availableWidth / elementWidth;
15206
+ element.width = availableWidth / scale;
14527
15207
  element.height = adaptiveHeight / scale;
14528
- metrics.width = adaptiveWidth;
15208
+ metrics.width = availableWidth;
14529
15209
  metrics.height = adaptiveHeight;
14530
15210
  metrics.boundingBoxDescent = adaptiveHeight;
14531
15211
  } else {
@@ -14851,7 +15531,7 @@ class Draw {
14851
15531
  rowList.push(row);
14852
15532
  } else {
14853
15533
  curRow.width += metrics.width;
14854
- if (i === 0 && getIsInlineElement(elementList[1])) {
15534
+ if (i === 0 && getIsBlockElement(elementList[1])) {
14855
15535
  curRow.height = defaultBasicRowMarginHeight;
14856
15536
  curRow.ascent = defaultBasicRowMarginHeight;
14857
15537
  } else if (curRow.height < height) {
@@ -15147,7 +15827,7 @@ class Draw {
15147
15827
  _clearPage(pageNo) {
15148
15828
  const ctx = this.ctxList[pageNo];
15149
15829
  const pageDom = this.pageList[pageNo];
15150
- ctx.clearRect(0, 0, pageDom.width, pageDom.height);
15830
+ ctx.clearRect(0, 0, Math.max(pageDom.width, this.getWidth()), Math.max(pageDom.height, this.getHeight()));
15151
15831
  this.blockParticle.clear();
15152
15832
  }
15153
15833
  _drawPage(payload) {
@@ -15478,6 +16158,7 @@ class Command {
15478
16158
  __publicField(this, "executeSetControlProperties");
15479
16159
  __publicField(this, "executeSetControlHighlight");
15480
16160
  __publicField(this, "executeUpdateOptions");
16161
+ __publicField(this, "executeInsertTitle");
15481
16162
  __publicField(this, "getCatalog");
15482
16163
  __publicField(this, "getImage");
15483
16164
  __publicField(this, "getOptions");
@@ -15584,6 +16265,7 @@ class Command {
15584
16265
  this.executeLocationGroup = adapt.locationGroup.bind(adapt);
15585
16266
  this.executeSetZone = adapt.setZone.bind(adapt);
15586
16267
  this.executeUpdateOptions = adapt.updateOptions.bind(adapt);
16268
+ this.executeInsertTitle = adapt.insertTitle.bind(adapt);
15587
16269
  this.getImage = adapt.getImage.bind(adapt);
15588
16270
  this.getOptions = adapt.getOptions.bind(adapt);
15589
16271
  this.getValue = adapt.getValue.bind(adapt);
@@ -16372,6 +17054,7 @@ class CommandAdapt {
16372
17054
  } else {
16373
17055
  if (el.titleId) {
16374
17056
  delete el.titleId;
17057
+ delete el.title;
16375
17058
  delete el.level;
16376
17059
  delete el.size;
16377
17060
  delete el.bold;
@@ -17378,14 +18061,15 @@ class CommandAdapt {
17378
18061
  const { startIndex, endIndex } = this.range.getRange();
17379
18062
  if (!~startIndex && !~endIndex)
17380
18063
  return;
17381
- const { value, width, height } = payload;
18064
+ const { value, width, height, imgDisplay } = payload;
17382
18065
  this.insertElementList([
17383
18066
  {
17384
18067
  value,
17385
18068
  width,
17386
18069
  height,
17387
18070
  id: getUUID(),
17388
- type: ElementType.IMAGE
18071
+ type: ElementType.IMAGE,
18072
+ imgDisplay
17389
18073
  }
17390
18074
  ]);
17391
18075
  }
@@ -17562,9 +18246,9 @@ class CommandAdapt {
17562
18246
  if (element.imgDisplay === display)
17563
18247
  return;
17564
18248
  element.imgDisplay = display;
18249
+ const { startIndex, endIndex } = this.range.getRange();
17565
18250
  if (display === ImageDisplay.FLOAT_TOP || display === ImageDisplay.FLOAT_BOTTOM) {
17566
18251
  const positionList = this.position.getPositionList();
17567
- const { startIndex } = this.range.getRange();
17568
18252
  const { coordinate: { leftTop } } = positionList[startIndex];
17569
18253
  element.imgFloatPosition = {
17570
18254
  x: leftTop[0],
@@ -17575,7 +18259,8 @@ class CommandAdapt {
17575
18259
  }
17576
18260
  this.draw.getPreviewer().clearResizer();
17577
18261
  this.draw.render({
17578
- isSetCursor: false
18262
+ isSetCursor: true,
18263
+ curIndex: endIndex
17579
18264
  });
17580
18265
  }
17581
18266
  getImage(payload) {
@@ -17983,6 +18668,27 @@ class CommandAdapt {
17983
18668
  }
17984
18669
  return result;
17985
18670
  }
18671
+ insertTitle(payload) {
18672
+ var _a;
18673
+ const isReadonly = this.draw.isReadonly();
18674
+ if (isReadonly)
18675
+ return;
18676
+ const cloneElement = deepClone(payload);
18677
+ const { startIndex } = this.range.getRange();
18678
+ const elementList = this.draw.getElementList();
18679
+ const copyElement = getAnchorElement(elementList, startIndex);
18680
+ if (!copyElement)
18681
+ return;
18682
+ const cloneAttr = [
18683
+ ...TABLE_CONTEXT_ATTR,
18684
+ ...EDITOR_ROW_ATTR,
18685
+ ...LIST_CONTEXT_ATTR
18686
+ ];
18687
+ (_a = cloneElement.valueList) == null ? void 0 : _a.forEach((valueItem) => {
18688
+ cloneProperty(cloneAttr, copyElement, valueItem);
18689
+ });
18690
+ this.draw.insertElementList([cloneElement]);
18691
+ }
17986
18692
  }
17987
18693
  class Listener {
17988
18694
  constructor() {