@univerjs/engine-render 0.4.1 → 0.4.2-nightly.202410301606

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/lib/es/index.js +454 -281
  2. package/lib/types/base-object.d.ts +6 -5
  3. package/lib/types/basics/const.d.ts +1 -0
  4. package/lib/types/basics/tools.d.ts +2 -2
  5. package/lib/types/components/docs/document.d.ts +0 -2
  6. package/lib/types/components/sheets/column-header.d.ts +1 -1
  7. package/lib/types/components/sheets/constants.d.ts +3 -15
  8. package/lib/types/components/sheets/extensions/row-header-layout.d.ts +1 -1
  9. package/lib/types/components/sheets/row-header.d.ts +1 -1
  10. package/lib/types/components/sheets/sheet-component.d.ts +1 -1
  11. package/lib/types/components/sheets/sheet-skeleton.d.ts +46 -13
  12. package/lib/types/components/sheets/spreadsheet.d.ts +1 -6
  13. package/lib/types/components/sheets/util.d.ts +13 -0
  14. package/lib/types/components/skeleton.d.ts +3 -3
  15. package/lib/types/context.d.ts +14 -29
  16. package/lib/types/index.d.ts +2 -1
  17. package/lib/types/layer.d.ts +2 -2
  18. package/lib/types/scene.transformer.d.ts +6 -1
  19. package/lib/types/services/render-config.d.ts +18 -0
  20. package/lib/types/services/render-config.service.d.ts +26 -0
  21. package/lib/types/shape/rect.d.ts +1 -0
  22. package/lib/types/shape/shape.d.ts +1 -0
  23. package/lib/types/viewport.d.ts +2 -0
  24. package/lib/umd/index.js +1 -1
  25. package/package.json +8 -12
  26. package/LICENSE +0 -176
  27. package/lib/af-Bpw3gNwc.js +0 -1
  28. package/lib/as-C73oboNR.js +0 -1
  29. package/lib/be-DM7HH-wL.js +0 -1
  30. package/lib/bg-BVx3UMtW.js +0 -1
  31. package/lib/bn-C-O6Dyni.js +0 -1
  32. package/lib/ca-DyIg63pT.js +0 -1
  33. package/lib/cjs/index.js +0 -1
  34. package/lib/cop-CzalNZMy.js +0 -1
  35. package/lib/cs-jFzUvpSW.js +0 -1
  36. package/lib/cu-C1YL2AZ4.js +0 -1
  37. package/lib/cy-45KfwWEx.js +0 -1
  38. package/lib/da-DuIo_kbC.js +0 -1
  39. package/lib/de-1901-I9pw9K2h.js +0 -1
  40. package/lib/de-1996-ChjJNsQw.js +0 -1
  41. package/lib/de-ch-1901-9RETBFw-.js +0 -1
  42. package/lib/el-monoton-8RvMnHth.js +0 -1
  43. package/lib/el-polyton-Bu66EDJ7.js +0 -1
  44. package/lib/en-gb-SV_a9fn-.js +0 -1
  45. package/lib/es-D0mhZjcV.js +0 -1
  46. package/lib/et-B0RzltQe.js +0 -1
  47. package/lib/eu-4jAKFEjV.js +0 -1
  48. package/lib/fi-DaRVklIS.js +0 -1
  49. package/lib/fr-DrZ3bXXV.js +0 -1
  50. package/lib/fur-_oHJfsBQ.js +0 -1
  51. package/lib/ga-CFmZeeI7.js +0 -1
  52. package/lib/gl-CfY7Df_j.js +0 -1
  53. package/lib/grc-yz3tVRuC.js +0 -1
  54. package/lib/gu-D-qwCz1q.js +0 -1
  55. package/lib/hi-BRIhY2xN.js +0 -1
  56. package/lib/hr-CKYeeRlN.js +0 -1
  57. package/lib/hsb-BG3O4bTN.js +0 -1
  58. package/lib/hu-11gHgrEC.js +0 -1
  59. package/lib/hy-CbR2hSXC.js +0 -1
  60. package/lib/ia-WpPFDdGr.js +0 -1
  61. package/lib/id-D4J_Cd04.js +0 -1
  62. package/lib/is-DERAkBFR.js +0 -1
  63. package/lib/it-UyiCWqfU.js +0 -1
  64. package/lib/ka-CLqmc6Xv.js +0 -1
  65. package/lib/kmr-CxwXQJXr.js +0 -1
  66. package/lib/kn-BVOgEmVc.js +0 -1
  67. package/lib/la-BjneBRWO.js +0 -1
  68. package/lib/la-x-classic-CZHKpRvI.js +0 -1
  69. package/lib/la-x-liturgic-pcl0n-zH.js +0 -1
  70. package/lib/lt-WYhIeybJ.js +0 -1
  71. package/lib/lv-CnvXw6FR.js +0 -1
  72. package/lib/ml-cY172xt6.js +0 -1
  73. package/lib/mn-cyrl-DjlymiLm.js +0 -1
  74. package/lib/mn-cyrl-x-lmc-j2L28W57.js +0 -1
  75. package/lib/mr-Dm28ir_Z.js +0 -1
  76. package/lib/mul-ethi-YVbJ7VwR.js +0 -1
  77. package/lib/nb-mojOW3Qu.js +0 -1
  78. package/lib/nl-Ds27_sIG.js +0 -1
  79. package/lib/nn-DWxFsoNc.js +0 -1
  80. package/lib/no-Cg50WX2I.js +0 -1
  81. package/lib/oc-K9bKXqET.js +0 -1
  82. package/lib/or-BMcshzJR.js +0 -1
  83. package/lib/pa-Bs8RctRX.js +0 -1
  84. package/lib/pi-Cvbb6qiX.js +0 -1
  85. package/lib/pl-D6gpqB1f.js +0 -1
  86. package/lib/pms-Cv7R-yy1.js +0 -1
  87. package/lib/pt-PAYrX3iM.js +0 -1
  88. package/lib/rm-Cp4-gmvX.js +0 -1
  89. package/lib/ro-D8uNKL54.js +0 -1
  90. package/lib/ru-yfURp3OS.js +0 -1
  91. package/lib/sa-BFf1hHnA.js +0 -1
  92. package/lib/sh-cyrl-CuVvXDHJ.js +0 -1
  93. package/lib/sh-latn-DBgzZ57b.js +0 -1
  94. package/lib/sk-D327HWGT.js +0 -1
  95. package/lib/sl-CJ43wdf2.js +0 -1
  96. package/lib/sr-cyrl-BSAkTr8N.js +0 -1
  97. package/lib/sv-Xk_o_no8.js +0 -1
  98. package/lib/ta-BS1JYNX3.js +0 -1
  99. package/lib/te-CNKqRcI1.js +0 -1
  100. package/lib/th-BNuoQKBG.js +0 -1
  101. package/lib/tk-MvsybXmO.js +0 -1
  102. package/lib/tr-DXSmP_xl.js +0 -1
  103. package/lib/uk-BDFck_NF.js +0 -1
  104. package/lib/zh-latn-pinyin-B17sY_zq.js +0 -1
  105. package/lib/types/{render-engine.d.ts → plugin.d.ts} +1 -1
package/lib/es/index.js CHANGED
@@ -2,8 +2,8 @@ var __defProp = Object.defineProperty;
2
2
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: !0, configurable: !0, writable: !0, value }) : obj[key] = value;
3
3
  var __name = (target, value) => __defProp(target, "name", { value, configurable: !0 });
4
4
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key != "symbol" ? key + "" : key, value);
5
- import { Tools, DEFAULT_STYLES, FontStyleType, BaselineOffset, getCellInfoInMergeData, Rectangle, ColorKit, Disposable, EventSubject, checkParagraphHasIndentByStyle, DataStreamTreeTokenType, BorderStyleTypes, BooleanNumber, DisposableCollection, toDisposable, sortRules, Registry, Range, numberToABC, Inject, LocaleService, insertTextToContent, horizontalLineSegmentsSubtraction, deleteContent, DataStreamTreeNodeType, DocumentDataModel, GridType, BulletAlignment, PositionedObjectLayoutType, WrapTextType, ColumnSeparatorType, TableAlignmentType, ObjectRelativeFromV, TableTextWrapType, SpacingRule, CustomDecorationType, CustomRangeType, ObjectMatrix, SectionType, NumberUnitType, PageOrientType, HorizontalAlign, VerticalAlign, WrapStrategy, AlignTypeH, ObjectRelativeFromH, AlignTypeV, mergeWith, GlyphType as GlyphType$1, numberToListABC, PRESET_LIST_TYPE, searchArray, extractPureTextFromCell, CellValueType, isCellCoverable, isNullCell, getColorStyle, isWhiteColor, IContextService, BuildTextUtils, TextX, DEFAULT_EMPTY_DOCUMENT_VALUE, TextDecoration, COLORS, DocumentFlavor, requestImmediateMacroTask, MOVE_BUFFER_VALUE, sortRulesByDesc, Injector, isClassDependencyItem, createIdentifier, remove, UniverInstanceType, IUniverInstanceService, Plugin, IConfigService } from "@univerjs/core";
6
- import { BehaviorSubject, Subject, startWith, distinctUntilChanged, Subscription, Observable, shareReplay } from "rxjs";
5
+ import { Tools, DEFAULT_STYLES, FontStyleType, BaselineOffset, getCellInfoInMergeData, Rectangle, ColorKit, Disposable, EventSubject, checkParagraphHasIndentByStyle, DataStreamTreeTokenType, BorderStyleTypes, BooleanNumber, DisposableCollection, toDisposable, sortRules, Registry, Range, numberToABC, Inject, LocaleService, insertTextToContent, horizontalLineSegmentsSubtraction, deleteContent, DataStreamTreeNodeType, DocumentDataModel, GridType, BulletAlignment, PositionedObjectLayoutType, WrapTextType, ColumnSeparatorType, TableAlignmentType, ObjectRelativeFromV, TableTextWrapType, SpacingRule, CustomDecorationType, CustomRangeType, ObjectMatrix, SectionType, NumberUnitType, DocumentFlavor, PageOrientType, HorizontalAlign, VerticalAlign, WrapStrategy, AlignTypeH, ObjectRelativeFromH, AlignTypeV, mergeWith, GlyphType as GlyphType$1, numberToListABC, PRESET_LIST_TYPE, DEFAULT_EMPTY_DOCUMENT_VALUE, IS_ROW_STYLE_PRECEDE_COLUMN_STYLE, searchArray, extractPureTextFromCell, CellValueType, isCellCoverable, isNullCell, composeStyles, getColorStyle, isWhiteColor, IContextService, IConfigService, BuildTextUtils, TextX, TextDecoration, COLORS, requestImmediateMacroTask, MOVE_BUFFER_VALUE, sortRulesByDesc, Injector, isClassDependencyItem, createIdentifier, remove, UniverInstanceType, IUniverInstanceService, Plugin, registerDependencies } from "@univerjs/core";
6
+ import { BehaviorSubject, Subject, startWith, distinctUntilChanged, Subscription, debounceTime, Observable, shareReplay } from "rxjs";
7
7
  var SHAPE_TYPE = /* @__PURE__ */ ((SHAPE_TYPE2) => (SHAPE_TYPE2.RECT = "rect", SHAPE_TYPE2.CIRCLE = "circle", SHAPE_TYPE2.PATH = "path", SHAPE_TYPE2))(SHAPE_TYPE || {}), LINK_VIEW_PORT_TYPE = /* @__PURE__ */ ((LINK_VIEW_PORT_TYPE2) => (LINK_VIEW_PORT_TYPE2[LINK_VIEW_PORT_TYPE2.XY = 0] = "XY", LINK_VIEW_PORT_TYPE2[LINK_VIEW_PORT_TYPE2.X = 1] = "X", LINK_VIEW_PORT_TYPE2[LINK_VIEW_PORT_TYPE2.Y = 2] = "Y", LINK_VIEW_PORT_TYPE2))(LINK_VIEW_PORT_TYPE || {});
8
8
  const MIDDLE_CELL_POS_MAGIC_NUMBER = 1, DEFAULT_FONTFACE_PLANE = '"Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Heiti SC", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif', DEFAULT_SKELETON_HEADER_FOOTER = {
9
9
  lines: [],
@@ -22,7 +22,7 @@ const MIDDLE_CELL_POS_MAGIC_NUMBER = 1, DEFAULT_FONTFACE_PLANE = '"Helvetica Neu
22
22
  var CURSOR_TYPE = /* @__PURE__ */ ((CURSOR_TYPE2) => (CURSOR_TYPE2.DEFAULT = "default", CURSOR_TYPE2.AUTO = "auto", CURSOR_TYPE2.CROSSHAIR = "crosshair", CURSOR_TYPE2.POINTER = "pointer", CURSOR_TYPE2.MOVE = "move", CURSOR_TYPE2.EAST_RESIZE = "e-resize", CURSOR_TYPE2.NORTH_EAST_RESIZE = "ne-resize", CURSOR_TYPE2.NORTH_WEST_RESIZE = "nw-resize", CURSOR_TYPE2.NORTH_RESIZE = "n-resize", CURSOR_TYPE2.SOUTH_EAST_RESIZE = "se-resize", CURSOR_TYPE2.SOUTH_WEST_RESIZE = "sw-resize", CURSOR_TYPE2.SOUTH_RESIZE = "s-resize", CURSOR_TYPE2.WEST_RESIZE = "w-resize", CURSOR_TYPE2.TEXT = "text", CURSOR_TYPE2.WAIT = "wait", CURSOR_TYPE2.HELP = "help", CURSOR_TYPE2.CELL = "cell", CURSOR_TYPE2.NONE = "none", CURSOR_TYPE2.VERTICAL_TEXT = "vertical-text", CURSOR_TYPE2.NO_DROP = "no-drop", CURSOR_TYPE2.GRAB = "grab", CURSOR_TYPE2.GRABBING = "grabbing", CURSOR_TYPE2.ALL_SCROLL = "all-scroll", CURSOR_TYPE2.COLUMN_RESIZE = "col-resize", CURSOR_TYPE2.ROW_RESIZE = "row-resize", CURSOR_TYPE2.PROGRESS = "progress", CURSOR_TYPE2.NOT_ALLOWED = "not-allowed", CURSOR_TYPE2.ZOOM_IN = "zoom-in", CURSOR_TYPE2.ZOOM_OUT = "zoom-out", CURSOR_TYPE2))(CURSOR_TYPE || {}), DOCUMENT_CONTEXT_CLIP_TYPE = /* @__PURE__ */ ((DOCUMENT_CONTEXT_CLIP_TYPE2) => (DOCUMENT_CONTEXT_CLIP_TYPE2[DOCUMENT_CONTEXT_CLIP_TYPE2.noClip = 0] = "noClip", DOCUMENT_CONTEXT_CLIP_TYPE2[DOCUMENT_CONTEXT_CLIP_TYPE2.DOC_SIZE = 1] = "DOC_SIZE", DOCUMENT_CONTEXT_CLIP_TYPE2[DOCUMENT_CONTEXT_CLIP_TYPE2.CONTENT_SIZE_LEFT = 2] = "CONTENT_SIZE_LEFT", DOCUMENT_CONTEXT_CLIP_TYPE2[DOCUMENT_CONTEXT_CLIP_TYPE2.CONTENT_SIZE_CENTER = 3] = "CONTENT_SIZE_CENTER", DOCUMENT_CONTEXT_CLIP_TYPE2[DOCUMENT_CONTEXT_CLIP_TYPE2.CONTENT_SIZE_Right = 4] = "CONTENT_SIZE_Right", DOCUMENT_CONTEXT_CLIP_TYPE2))(DOCUMENT_CONTEXT_CLIP_TYPE || {});
23
23
  const COLOR_BLACK_RGB = "rgb(0,0,0)";
24
24
  var BORDER_TYPE = /* @__PURE__ */ ((BORDER_TYPE2) => (BORDER_TYPE2.TOP = "t", BORDER_TYPE2.BOTTOM = "b", BORDER_TYPE2.LEFT = "l", BORDER_TYPE2.RIGHT = "r", BORDER_TYPE2.TL_BR = "tl_br", BORDER_TYPE2.TL_BC = "tl_bc", BORDER_TYPE2.TL_MR = "tl_mr", BORDER_TYPE2.BL_TR = "bl_tr", BORDER_TYPE2.ML_TR = "ml_tr", BORDER_TYPE2.BC_TR = "bc_tr", BORDER_TYPE2))(BORDER_TYPE || {}), ORIENTATION_TYPE = /* @__PURE__ */ ((ORIENTATION_TYPE2) => (ORIENTATION_TYPE2[ORIENTATION_TYPE2.UP = 0] = "UP", ORIENTATION_TYPE2[ORIENTATION_TYPE2.DOWN = 1] = "DOWN", ORIENTATION_TYPE2))(ORIENTATION_TYPE || {}), RENDER_CLASS_TYPE = /* @__PURE__ */ ((RENDER_CLASS_TYPE2) => (RENDER_CLASS_TYPE2.ENGINE = "Engine", RENDER_CLASS_TYPE2.SCENE = "Scene", RENDER_CLASS_TYPE2.BASE_OBJECT = "BaseObject", RENDER_CLASS_TYPE2.SCENE_VIEWER = "SceneViewer", RENDER_CLASS_TYPE2.CANVAS = "Canvas", RENDER_CLASS_TYPE2.VIEWPORT = "Viewport", RENDER_CLASS_TYPE2.LAYER = "Layer", RENDER_CLASS_TYPE2.GROUP = "Group", RENDER_CLASS_TYPE2.IMAGE = "Image", RENDER_CLASS_TYPE2.SHAPE = "Shape", RENDER_CLASS_TYPE2.TEXT = "Text", RENDER_CLASS_TYPE2))(RENDER_CLASS_TYPE || {});
25
- const MAXIMUM_ROW_HEIGHT = 2e3, FIX_ONE_PIXEL_BLUR_OFFSET = 0.5, DRAWING_OBJECT_LOWER_LAYER_INDEX = 3, DRAWING_OBJECT_LAYER_INDEX = 4, DRAWING_OBJECT_UPPER_LAYER_INDEX = 5;
25
+ const MAXIMUM_ROW_HEIGHT = 2e3, MAXIMUM_COL_WIDTH = 2e3, FIX_ONE_PIXEL_BLUR_OFFSET = 0.5, DRAWING_OBJECT_LOWER_LAYER_INDEX = 3, DRAWING_OBJECT_LAYER_INDEX = 4, DRAWING_OBJECT_UPPER_LAYER_INDEX = 5;
26
26
  var TRANSFORM_CHANGE_OBSERVABLE_TYPE = /* @__PURE__ */ ((TRANSFORM_CHANGE_OBSERVABLE_TYPE2) => (TRANSFORM_CHANGE_OBSERVABLE_TYPE2[TRANSFORM_CHANGE_OBSERVABLE_TYPE2.translate = 0] = "translate", TRANSFORM_CHANGE_OBSERVABLE_TYPE2[TRANSFORM_CHANGE_OBSERVABLE_TYPE2.resize = 1] = "resize", TRANSFORM_CHANGE_OBSERVABLE_TYPE2[TRANSFORM_CHANGE_OBSERVABLE_TYPE2.scale = 2] = "scale", TRANSFORM_CHANGE_OBSERVABLE_TYPE2[TRANSFORM_CHANGE_OBSERVABLE_TYPE2.skew = 3] = "skew", TRANSFORM_CHANGE_OBSERVABLE_TYPE2[TRANSFORM_CHANGE_OBSERVABLE_TYPE2.flip = 4] = "flip", TRANSFORM_CHANGE_OBSERVABLE_TYPE2[TRANSFORM_CHANGE_OBSERVABLE_TYPE2.all = 5] = "all", TRANSFORM_CHANGE_OBSERVABLE_TYPE2))(TRANSFORM_CHANGE_OBSERVABLE_TYPE || {});
27
27
  const _Base = class _Base {
28
28
  isEmpty() {
@@ -1388,7 +1388,7 @@ function fixLineWidthByScale(num, scale) {
1388
1388
  return Math.round(num * scale) / scale;
1389
1389
  }
1390
1390
  __name(fixLineWidthByScale, "fixLineWidthByScale");
1391
- function getFontStyleString(textStyle, _localeService) {
1391
+ function getFontStyleString(textStyle) {
1392
1392
  const defaultFont = DEFAULT_STYLES.ff, defaultFontSize = DEFAULT_STYLES.fs;
1393
1393
  if (!textStyle) {
1394
1394
  const fontString2 = `${defaultFontSize}pt ${defaultFont}`;
@@ -2593,7 +2593,7 @@ const BASE_OBJECT_ARRAY = [
2593
2593
  "flipY",
2594
2594
  "strokeWidth"
2595
2595
  ];
2596
- var ObjectType = /* @__PURE__ */ ((ObjectType2) => (ObjectType2[ObjectType2.UNKNOWN = 0] = "UNKNOWN", ObjectType2[ObjectType2.RICH_TEXT = 1] = "RICH_TEXT", ObjectType2[ObjectType2.SHAPE = 2] = "SHAPE", ObjectType2[ObjectType2.IMAGE = 3] = "IMAGE", ObjectType2[ObjectType2.RECT = 4] = "RECT", ObjectType2[ObjectType2.CIRCLE = 5] = "CIRCLE", ObjectType2))(ObjectType || {});
2596
+ var ObjectType = /* @__PURE__ */ ((ObjectType2) => (ObjectType2[ObjectType2.UNKNOWN = 0] = "UNKNOWN", ObjectType2[ObjectType2.RICH_TEXT = 1] = "RICH_TEXT", ObjectType2[ObjectType2.SHAPE = 2] = "SHAPE", ObjectType2[ObjectType2.IMAGE = 3] = "IMAGE", ObjectType2[ObjectType2.RECT = 4] = "RECT", ObjectType2[ObjectType2.CIRCLE = 5] = "CIRCLE", ObjectType2[ObjectType2.CHART = 6] = "CHART", ObjectType2))(ObjectType || {});
2597
2597
  const _BaseObject = class _BaseObject extends Disposable {
2598
2598
  // TODO: @DR-Univer. Belong to layer
2599
2599
  constructor(key) {
@@ -3625,14 +3625,20 @@ __name(getOffsetRectForDom, "getOffsetRectForDom");
3625
3625
  const _UniverRenderingContext2D = class _UniverRenderingContext2D {
3626
3626
  constructor(context) {
3627
3627
  __publicField(this, "__mode", "rendering");
3628
- __publicField(this, "_system");
3629
- __publicField(this, "_browser");
3630
3628
  __publicField(this, "_transformCache");
3631
3629
  __publicField(this, "canvas");
3632
3630
  __publicField(this, "_context");
3633
3631
  __publicField(this, "_systemType");
3634
3632
  __publicField(this, "_browserType");
3635
- this._context = context, this.canvas = context.canvas;
3633
+ __publicField(this, "renderConfig", {});
3634
+ __publicField(this, "_id");
3635
+ this.canvas = context.canvas, this._context = context;
3636
+ }
3637
+ getId() {
3638
+ return this._id;
3639
+ }
3640
+ setId(id) {
3641
+ this._id = id;
3636
3642
  }
3637
3643
  isContextLost() {
3638
3644
  return this._context.isContextLost();
@@ -3823,11 +3829,15 @@ const _UniverRenderingContext2D = class _UniverRenderingContext2D {
3823
3829
  set textBaseline(val) {
3824
3830
  this._context.textBaseline = val;
3825
3831
  }
3832
+ /**
3833
+ * Get scale from ctx.
3834
+ * DOMMatrix.a DOMMatrix.d would affect by ctx.rotate()
3835
+ */
3826
3836
  _getScale() {
3827
- const m = this._transformCache || this.getTransform();
3828
- return !this._transformCache && m && (this._transformCache = m), {
3829
- scaleX: m.a,
3830
- scaleY: m.d
3837
+ const transform = this.getTransform(), { a, b, c, d } = transform, scaleX = Math.sqrt(a * a + b * b), scaleY = Math.sqrt(c * c + d * d);
3838
+ return {
3839
+ scaleX,
3840
+ scaleY
3831
3841
  };
3832
3842
  }
3833
3843
  getScale() {
@@ -3850,7 +3860,7 @@ const _UniverRenderingContext2D = class _UniverRenderingContext2D {
3850
3860
  x = fixLineWidthByScale(x, scaleX), y = fixLineWidthByScale(y, scaleY), w = fixLineWidthByScale(w, scaleX), h = fixLineWidthByScale(h, scaleY), this.roundRect(x, y, w, h, radii);
3851
3861
  }
3852
3862
  getTransform() {
3853
- return this._context.getTransform();
3863
+ return this._transformCache || this._context.getTransform();
3854
3864
  }
3855
3865
  resetTransform() {
3856
3866
  this._transformCache = null, this._context.resetTransform();
@@ -4089,6 +4099,10 @@ const _UniverRenderingContext2D = class _UniverRenderingContext2D {
4089
4099
  const { scaleX, scaleY } = this._getScale();
4090
4100
  x = fixLineWidthByScale(x, scaleX), y = fixLineWidthByScale(y, scaleY), this.moveTo(x, y);
4091
4101
  }
4102
+ moveToByPrecisionLog(x, y) {
4103
+ const { scaleX, scaleY } = this._getScale(), afterX = fixLineWidthByScale(x, scaleX), afterY = fixLineWidthByScale(y, scaleY);
4104
+ this.moveTo(afterX, afterY);
4105
+ }
4092
4106
  /**
4093
4107
  * rect function.
4094
4108
  * @method
@@ -4130,7 +4144,7 @@ const _UniverRenderingContext2D = class _UniverRenderingContext2D {
4130
4144
  * @method
4131
4145
  */
4132
4146
  rotate(angle) {
4133
- this._context.rotate(angle);
4147
+ this._transformCache = null, this._context.rotate(angle);
4134
4148
  }
4135
4149
  /**
4136
4150
  * save function.
@@ -4144,7 +4158,7 @@ const _UniverRenderingContext2D = class _UniverRenderingContext2D {
4144
4158
  * @method
4145
4159
  */
4146
4160
  scale(x, y) {
4147
- this._context.scale(x, y);
4161
+ this._transformCache = null, this._context.scale(x, y);
4148
4162
  }
4149
4163
  /**
4150
4164
  * setLineDash function.
@@ -4190,20 +4204,21 @@ const _UniverRenderingContext2D = class _UniverRenderingContext2D {
4190
4204
  * @method
4191
4205
  */
4192
4206
  transform(a, b, c, d, e, f) {
4193
- this._context.transform(a, b, c, d, e, f), this._transformCache = null;
4207
+ this._transformCache = null, this._context.transform(a, b, c, d, e, f);
4194
4208
  }
4195
4209
  /**
4196
4210
  * translate function.
4197
4211
  * @method
4198
4212
  */
4199
4213
  translate(x, y) {
4200
- this._context.translate(x, y);
4214
+ this._transformCache = null, this._context.translate(x, y);
4201
4215
  }
4202
4216
  translateWithPrecision(x, y) {
4203
4217
  const { scaleX, scaleY } = this._getScale();
4204
- x = fixLineWidthByScale(x, scaleX), y = fixLineWidthByScale(y, scaleY), this._context.translate(x, y);
4218
+ x = fixLineWidthByScale(x, scaleX), y = fixLineWidthByScale(y, scaleY), this._transformCache = null, this._context.translate(x, y);
4205
4219
  }
4206
4220
  translateWithPrecisionRatio(x, y) {
4221
+ this._transformCache = null;
4207
4222
  const { scaleX, scaleY } = this._getScale();
4208
4223
  this._context.translate(x / scaleX, y / scaleY);
4209
4224
  }
@@ -4216,14 +4231,6 @@ const _UniverRenderingContext2D = class _UniverRenderingContext2D {
4216
4231
  };
4217
4232
  __name(_UniverRenderingContext2D, "UniverRenderingContext2D");
4218
4233
  let UniverRenderingContext2D = _UniverRenderingContext2D;
4219
- const _UniverRenderingContextWebGL = class _UniverRenderingContextWebGL {
4220
- };
4221
- __name(_UniverRenderingContextWebGL, "UniverRenderingContextWebGL");
4222
- let UniverRenderingContextWebGL = _UniverRenderingContextWebGL;
4223
- const _UniverRenderingContextWebGPU = class _UniverRenderingContextWebGPU {
4224
- };
4225
- __name(_UniverRenderingContextWebGPU, "UniverRenderingContextWebGPU");
4226
- let UniverRenderingContextWebGPU = _UniverRenderingContextWebGPU;
4227
4234
  const _UniverRenderingContext = class _UniverRenderingContext extends UniverRenderingContext2D {
4228
4235
  };
4229
4236
  __name(_UniverRenderingContext, "UniverRenderingContext");
@@ -4233,15 +4240,8 @@ const _UniverPrintingContext = class _UniverPrintingContext extends UniverRender
4233
4240
  super(...arguments);
4234
4241
  __publicField(this, "__mode", "printing");
4235
4242
  }
4236
- __getScale() {
4237
- const m = this.getTransform();
4238
- return {
4239
- scaleX: m.a,
4240
- scaleY: m.d
4241
- };
4242
- }
4243
4243
  clearRect(x, y, width, height) {
4244
- const { scaleX, scaleY } = this.__getScale();
4244
+ const { scaleX, scaleY } = this._getScale();
4245
4245
  x = fixLineWidthByScale(x, scaleX), y = fixLineWidthByScale(y, scaleY), width = fixLineWidthByScale(width, scaleX), height = fixLineWidthByScale(height, scaleY), this._context.save(), this._context.fillStyle = getColor([255, 255, 255]), this._context.fillRect(x, y, width, height), this._context.restore();
4246
4246
  }
4247
4247
  clearRectForTexture(x, y, width, height) {
@@ -4470,7 +4470,7 @@ const _SpreadsheetColumnHeader = class _SpreadsheetColumnHeader extends Spreadsh
4470
4470
  const spreadsheetSkeleton = this.getSkeleton();
4471
4471
  if (!spreadsheetSkeleton) return;
4472
4472
  const parentScale = this.getParentScale();
4473
- spreadsheetSkeleton.calculateSegment(bounds);
4473
+ spreadsheetSkeleton.updateVisibleRange(bounds);
4474
4474
  const segment = spreadsheetSkeleton.rowColumnSegment;
4475
4475
  if (!segment || segment.startColumn === -1 && segment.endColumn === -1) return;
4476
4476
  const { rowHeaderWidth } = spreadsheetSkeleton;
@@ -4918,18 +4918,19 @@ const UNIQUE_KEY$7 = "DefaultCustomExtension", Z_INDEX$1 = 55, stringifyRange$1
4918
4918
  __name(_Custom, "Custom");
4919
4919
  let Custom = _Custom;
4920
4920
  SpreadsheetExtensionRegistry.add(Custom);
4921
- const FONT_EXTENSION_Z_INDEX = 45, EXPAND_SIZE_FOR_RENDER_OVERFLOW = 20;
4921
+ var ShowGridlinesState = /* @__PURE__ */ ((ShowGridlinesState2) => (ShowGridlinesState2[ShowGridlinesState2.OFF = 0] = "OFF", ShowGridlinesState2[ShowGridlinesState2.ON = 1] = "ON", ShowGridlinesState2))(ShowGridlinesState || {}), SHEET_VIEWPORT_KEY = /* @__PURE__ */ ((SHEET_VIEWPORT_KEY2) => (SHEET_VIEWPORT_KEY2.VIEW_MAIN = "viewMain", SHEET_VIEWPORT_KEY2.VIEW_MAIN_LEFT_TOP = "viewMainLeftTop", SHEET_VIEWPORT_KEY2.VIEW_MAIN_TOP = "viewMainTop", SHEET_VIEWPORT_KEY2.VIEW_MAIN_LEFT = "viewMainLeft", SHEET_VIEWPORT_KEY2.VIEW_ROW_TOP = "viewRowTop", SHEET_VIEWPORT_KEY2.VIEW_ROW_BOTTOM = "viewRowBottom", SHEET_VIEWPORT_KEY2.VIEW_COLUMN_LEFT = "viewColumnLeft", SHEET_VIEWPORT_KEY2.VIEW_COLUMN_RIGHT = "viewColumnRight", SHEET_VIEWPORT_KEY2.VIEW_LEFT_TOP = "viewLeftTop", SHEET_VIEWPORT_KEY2))(SHEET_VIEWPORT_KEY || {});
4922
+ const FONT_EXTENSION_Z_INDEX = 45, EXPAND_SIZE_FOR_RENDER_OVERFLOW = 20, sheetContentViewportKeys = [SHEET_VIEWPORT_KEY.VIEW_MAIN, SHEET_VIEWPORT_KEY.VIEW_MAIN_LEFT_TOP, SHEET_VIEWPORT_KEY.VIEW_MAIN_TOP, SHEET_VIEWPORT_KEY.VIEW_MAIN_LEFT], sheetHeaderViewportKeys = [SHEET_VIEWPORT_KEY.VIEW_ROW_TOP, SHEET_VIEWPORT_KEY.VIEW_ROW_BOTTOM, SHEET_VIEWPORT_KEY.VIEW_COLUMN_LEFT, SHEET_VIEWPORT_KEY.VIEW_COLUMN_RIGHT, SHEET_VIEWPORT_KEY.VIEW_LEFT_TOP];
4922
4923
  var __defProp$4 = Object.defineProperty, __getOwnPropDesc$4 = Object.getOwnPropertyDescriptor, __decorateClass$4 = /* @__PURE__ */ __name((decorators, target, key, kind) => {
4923
4924
  for (var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$4(target, key) : target, i = decorators.length - 1, decorator; i >= 0; i--)
4924
4925
  (decorator = decorators[i]) && (result = (kind ? decorator(target, key, result) : decorator(result)) || result);
4925
4926
  return kind && result && __defProp$4(target, key, result), result;
4926
4927
  }, "__decorateClass$4"), __decorateParam$4 = /* @__PURE__ */ __name((index2, decorator) => (target, key) => decorator(target, key, index2), "__decorateParam$4"), _a3;
4927
4928
  let Skeleton = (_a3 = class extends Disposable {
4928
- constructor(_localService) {
4929
+ constructor(_localeService) {
4929
4930
  super();
4930
4931
  __publicField(this, "_fontLocale");
4931
4932
  __publicField(this, "_dirty", !0);
4932
- this._localService = _localService, this._localeInitial();
4933
+ this._localeService = _localeService, this._localeInitial();
4933
4934
  }
4934
4935
  get dirty() {
4935
4936
  return this._dirty;
@@ -7267,7 +7268,7 @@ function getFontCreateConfig(index2, viewModel, paragraphNode, sectionBreakConfi
7267
7268
  },
7268
7269
  marginRight = 0,
7269
7270
  marginLeft = 0,
7270
- localeService,
7271
+ // localeService,
7271
7272
  renderConfig = {}
7272
7273
  } = sectionBreakConfig, { paragraphStyle = {}, bullet } = paragraph, { isRenderStyle } = renderConfig, { startIndex } = paragraphNode, originTextRun = viewModel.getTextRun(index2 + startIndex), textRun = isRenderStyle === BooleanNumber.FALSE ? DEFAULT_TEXT_RUN : originTextRun != null ? originTextRun : DEFAULT_TEXT_RUN, customDecoration = viewModel.getCustomDecoration(index2 + startIndex), showCustomDecoration = customDecoration && customDecoration.show !== !1, customDecorationStyle = showCustomDecoration ? getCustomDecorationStyle(customDecoration) : null, customRange = viewModel.getCustomRange(index2 + startIndex), showCustomRange = customRange && customRange.show !== !1, customRangeStyle = showCustomRange ? getCustomRangeStyle(customRange) : null, hasAddonStyle = showCustomRange || showCustomDecoration || !!bullet, { st, ed } = textRun;
7273
7274
  let { ts: textStyle = {} } = textRun;
@@ -7321,10 +7322,46 @@ const DEFAULT_SECTION_BREAK = {
7321
7322
  columnSeparatorType: ColumnSeparatorType.NONE,
7322
7323
  sectionType: SectionType.SECTION_TYPE_UNSPECIFIED,
7323
7324
  startIndex: 0
7324
- }, DEFAULT_PAGE_SIZE = { width: Number.POSITIVE_INFINITY, height: Number.POSITIVE_INFINITY };
7325
+ }, DEFAULT_PAGE_SIZE = { width: Number.POSITIVE_INFINITY, height: Number.POSITIVE_INFINITY }, DEFAULT_MODERN_DOCUMENT_STYLE = {
7326
+ pageNumberStart: 1,
7327
+ pageSize: {
7328
+ width: ptToPixel(595),
7329
+ height: Number.POSITIVE_INFINITY
7330
+ },
7331
+ marginTop: ptToPixel(50),
7332
+ marginBottom: ptToPixel(50),
7333
+ marginRight: ptToPixel(50),
7334
+ marginLeft: ptToPixel(50),
7335
+ renderConfig: {
7336
+ vertexAngle: 0,
7337
+ centerAngle: 0,
7338
+ background: {
7339
+ rgb: "#FFFFFF"
7340
+ }
7341
+ },
7342
+ defaultHeaderId: "",
7343
+ defaultFooterId: "",
7344
+ evenPageHeaderId: "",
7345
+ evenPageFooterId: "",
7346
+ firstPageHeaderId: "",
7347
+ firstPageFooterId: "",
7348
+ evenAndOddHeaders: BooleanNumber.FALSE,
7349
+ useFirstPageHeaderFooter: BooleanNumber.FALSE,
7350
+ marginHeader: 0,
7351
+ marginFooter: 0
7352
+ }, DEFAULT_MODERN_SECTION_BREAK = {
7353
+ columnProperties: [],
7354
+ columnSeparatorType: ColumnSeparatorType.NONE,
7355
+ sectionType: SectionType.SECTION_TYPE_UNSPECIFIED
7356
+ };
7325
7357
  function prepareSectionBreakConfig(ctx, nodeIndex) {
7326
7358
  var _a10;
7327
- const { viewModel, dataModel, docsConfig } = ctx, sectionNode = viewModel.children[nodeIndex], sectionBreak = viewModel.getSectionBreak(sectionNode.endIndex) || DEFAULT_SECTION_BREAK, { documentStyle } = dataModel, {
7359
+ const { viewModel, dataModel, docsConfig } = ctx, sectionNode = viewModel.children[nodeIndex];
7360
+ let { documentStyle } = dataModel;
7361
+ const { documentFlavor } = documentStyle;
7362
+ let sectionBreak = viewModel.getSectionBreak(sectionNode.endIndex) || DEFAULT_SECTION_BREAK;
7363
+ documentFlavor === DocumentFlavor.MODERN && (sectionBreak = Object.assign({}, sectionBreak, DEFAULT_MODERN_SECTION_BREAK), documentStyle = Object.assign({}, documentStyle, DEFAULT_MODERN_DOCUMENT_STYLE));
7364
+ const {
7328
7365
  pageNumberStart: global_pageNumberStart = 1,
7329
7366
  // pageNumberStart
7330
7367
  pageSize: global_pageSize = DEFAULT_PAGE_SIZE,
@@ -7904,7 +7941,7 @@ function getDefaultBulletSke(listId, startIndex = 1) {
7904
7941
  };
7905
7942
  }
7906
7943
  __name(getDefaultBulletSke, "getDefaultBulletSke");
7907
- function _getBulletSke(listId, nestingLevel, nestings, listLevelAncestors, textStyleConfig, localeService) {
7944
+ function _getBulletSke(listId, nestingLevel, nestings, listLevelAncestors, textStyleConfig, _localeService) {
7908
7945
  var _a10, _b;
7909
7946
  const nesting = nestings[nestingLevel], {
7910
7947
  bulletAlignment,
@@ -13826,7 +13863,13 @@ function compareFontInfoDistance(a, b) {
13826
13863
  __name(compareFontInfoDistance, "compareFontInfoDistance");
13827
13864
  async function checkLocalFontsPermission() {
13828
13865
  var _a10;
13829
- return typeof window > "u" ? void 0 : window.navigator == null || ((_a10 = window.navigator) == null ? void 0 : _a10.permissions) == null ? !1 : (await window.navigator.permissions.query({ name: "local-fonts" })).state === "granted";
13866
+ if (typeof WorkerGlobalScope < "u" && self instanceof WorkerGlobalScope || typeof window > "u" || window.navigator == null || ((_a10 = window.navigator) == null ? void 0 : _a10.permissions) == null)
13867
+ return !1;
13868
+ try {
13869
+ return (await window.navigator.permissions.query({ name: "local-fonts" })).state === "granted";
13870
+ } catch {
13871
+ return !1;
13872
+ }
13830
13873
  }
13831
13874
  __name(checkLocalFontsPermission, "checkLocalFontsPermission");
13832
13875
  const _FontLibrary = class _FontLibrary {
@@ -24394,7 +24437,7 @@ const _DocumentSkeleton = class _DocumentSkeleton extends Skeleton {
24394
24437
  footerTreeMap,
24395
24438
  lists,
24396
24439
  drawings,
24397
- localeService: this._localService,
24440
+ localeService: this._localeService,
24398
24441
  paragraphLineGapDefault,
24399
24442
  defaultTabStop,
24400
24443
  documentTextStyle: textStyle
@@ -24592,6 +24635,88 @@ const _DocumentSkeleton = class _DocumentSkeleton extends Skeleton {
24592
24635
  };
24593
24636
  __name(_DocumentSkeleton, "DocumentSkeleton");
24594
24637
  let DocumentSkeleton = _DocumentSkeleton;
24638
+ function createDocumentModelWithStyle(content, textStyle, config = {}) {
24639
+ const contentLength = content.length, {
24640
+ textRotation,
24641
+ paddingData = DEFAULT_PADDING_DATA,
24642
+ horizontalAlign = HorizontalAlign.UNSPECIFIED,
24643
+ verticalAlign = VerticalAlign.UNSPECIFIED,
24644
+ wrapStrategy = WrapStrategy.UNSPECIFIED,
24645
+ cellValueType
24646
+ } = config, { t: marginTop, r: marginRight, b: marginBottom, l: marginLeft } = paddingData, { vertexAngle, centerAngle } = convertTextRotation(textRotation), documentData = {
24647
+ id: "d",
24648
+ body: {
24649
+ dataStream: `${content}${DEFAULT_EMPTY_DOCUMENT_VALUE}`,
24650
+ textRuns: [
24651
+ {
24652
+ ts: textStyle,
24653
+ st: 0,
24654
+ ed: contentLength
24655
+ }
24656
+ ],
24657
+ paragraphs: [
24658
+ {
24659
+ startIndex: contentLength,
24660
+ paragraphStyle: {
24661
+ horizontalAlign
24662
+ }
24663
+ }
24664
+ ],
24665
+ sectionBreaks: [{
24666
+ startIndex: contentLength + 1
24667
+ }]
24668
+ },
24669
+ documentStyle: {
24670
+ pageSize: {
24671
+ width: Number.POSITIVE_INFINITY,
24672
+ height: Number.POSITIVE_INFINITY
24673
+ },
24674
+ marginTop,
24675
+ marginBottom,
24676
+ marginRight,
24677
+ marginLeft,
24678
+ renderConfig: {
24679
+ horizontalAlign,
24680
+ verticalAlign,
24681
+ centerAngle,
24682
+ vertexAngle,
24683
+ wrapStrategy,
24684
+ cellValueType
24685
+ }
24686
+ },
24687
+ drawings: {},
24688
+ drawingsOrder: []
24689
+ };
24690
+ return new DocumentDataModel(documentData);
24691
+ }
24692
+ __name(createDocumentModelWithStyle, "createDocumentModelWithStyle");
24693
+ function extractOtherStyle(style) {
24694
+ if (!style) return {};
24695
+ const {
24696
+ tr: textRotation,
24697
+ td: textDirection,
24698
+ ht: horizontalAlign,
24699
+ vt: verticalAlign,
24700
+ tb: wrapStrategy,
24701
+ pd: paddingData
24702
+ } = style;
24703
+ return {
24704
+ textRotation,
24705
+ textDirection,
24706
+ horizontalAlign,
24707
+ verticalAlign,
24708
+ wrapStrategy,
24709
+ paddingData
24710
+ };
24711
+ }
24712
+ __name(extractOtherStyle, "extractOtherStyle");
24713
+ function getFontFormat(format) {
24714
+ if (!format)
24715
+ return {};
24716
+ const { ff, fs, it, bl, ul, st, ol, cl } = format, style = {};
24717
+ return ff && (style.ff = ff), fs && (style.fs = fs), it && (style.it = it), bl && (style.bl = bl), ul && (style.ul = ul), st && (style.st = st), ol && (style.ol = ol), cl && (style.cl = cl), style;
24718
+ }
24719
+ __name(getFontFormat, "getFontFormat");
24595
24720
  var __defProp$3 = Object.defineProperty, __getOwnPropDesc$3 = Object.getOwnPropertyDescriptor, __decorateClass$3 = /* @__PURE__ */ __name((decorators, target, key, kind) => {
24596
24721
  for (var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$3(target, key) : target, i = decorators.length - 1, decorator; i >= 0; i--)
24597
24722
  (decorator = decorators[i]) && (result = (kind ? decorator(target, key, result) : decorator(result)) || result);
@@ -24658,7 +24783,8 @@ const DEFAULT_CELL_DOCUMENT_MODEL_OPTION = {
24658
24783
  }, RENDER_RAW_FORMULA_KEY = "RENDER_RAW_FORMULA";
24659
24784
  var _a6;
24660
24785
  let SpreadsheetSkeleton = (_a6 = class extends Skeleton {
24661
- constructor(worksheet, _worksheetData, _cellData, _styles, _localeService, _contextService) {
24786
+ constructor(worksheet, _worksheetData, _cellData, _styles, _localeService, _contextService, _configService) {
24787
+ var _a10;
24662
24788
  super(_localeService);
24663
24789
  __publicField(this, "_rowHeightAccumulation", []);
24664
24790
  __publicField(this, "_columnWidthAccumulation", []);
@@ -24667,7 +24793,8 @@ let SpreadsheetSkeleton = (_a6 = class extends Skeleton {
24667
24793
  __publicField(this, "_rowHeaderWidth", 0);
24668
24794
  __publicField(this, "_columnHeaderHeight", 0);
24669
24795
  /**
24670
- * Range of visible area(range in viewBounds)
24796
+ * Range viewBounds. only update by viewBounds.
24797
+ * It would change multiple times in one frame if there is multiple viewport (after freeze row&col)
24671
24798
  */
24672
24799
  __publicField(this, "_visibleRange", {
24673
24800
  startRow: -1,
@@ -24675,6 +24802,7 @@ let SpreadsheetSkeleton = (_a6 = class extends Skeleton {
24675
24802
  startColumn: -1,
24676
24803
  endColumn: -1
24677
24804
  });
24805
+ __publicField(this, "_visibleRangeMap", /* @__PURE__ */ new Map());
24678
24806
  // private _dataMergeCache: IRange[] = [];
24679
24807
  __publicField(this, "_overflowCache", new ObjectMatrix());
24680
24808
  __publicField(this, "_stylesCache", {
@@ -24691,8 +24819,12 @@ let SpreadsheetSkeleton = (_a6 = class extends Skeleton {
24691
24819
  __publicField(this, "_showGridlines", BooleanNumber.TRUE);
24692
24820
  __publicField(this, "_marginTop", 0);
24693
24821
  __publicField(this, "_marginLeft", 0);
24822
+ /**
24823
+ * Whether the row style precedes the column style.
24824
+ */
24825
+ __publicField(this, "_isRowStylePrecedeColumnStyle", !1);
24694
24826
  __publicField(this, "_renderRawFormula", !1);
24695
- this.worksheet = worksheet, this._worksheetData = _worksheetData, this._cellData = _cellData, this._styles = _styles, this._contextService = _contextService, this._updateLayout(), this._initContextListener();
24827
+ this.worksheet = worksheet, this._worksheetData = _worksheetData, this._cellData = _cellData, this._styles = _styles, this._contextService = _contextService, this._configService = _configService, this._updateLayout(), this._initContextListener(), this._isRowStylePrecedeColumnStyle = (_a10 = this._configService.getConfig(IS_ROW_STYLE_PRECEDE_COLUMN_STYLE)) != null ? _a10 : !1;
24696
24828
  }
24697
24829
  get rowHeightAccumulation() {
24698
24830
  return this._rowHeightAccumulation;
@@ -24718,8 +24850,8 @@ let SpreadsheetSkeleton = (_a6 = class extends Skeleton {
24718
24850
  get rowColumnSegment() {
24719
24851
  return this._visibleRange;
24720
24852
  }
24721
- get visibleArea() {
24722
- return this._visibleRange;
24853
+ visibleRangeByViewportKey(viewportKey) {
24854
+ return this._visibleRangeMap.get(viewportKey);
24723
24855
  }
24724
24856
  // get dataMergeCache(): IRange[] {
24725
24857
  // return this._dataMergeCache;
@@ -24800,16 +24932,61 @@ let SpreadsheetSkeleton = (_a6 = class extends Skeleton {
24800
24932
  * @param bounds
24801
24933
  * @returns boolean
24802
24934
  */
24803
- calculateSegment(bounds) {
24804
- return !this._worksheetData || (this._updateLayout(), !this._rowHeightAccumulation || !this._columnWidthAccumulation) ? !1 : (bounds != null && (this._visibleRange = this.getRowColumnSegment(bounds)), !0);
24935
+ updateVisibleRange(bounds) {
24936
+ if (!this._worksheetData || (this._updateLayout(), !this._rowHeightAccumulation || !this._columnWidthAccumulation))
24937
+ return !1;
24938
+ if (bounds != null) {
24939
+ const range = this.getRowColumnSegment(bounds);
24940
+ this._visibleRange = range, this._visibleRangeMap.set(bounds.viewportKey, range);
24941
+ }
24942
+ return !0;
24805
24943
  }
24806
- calculateWithoutClearingCache(bounds) {
24807
- if (this.calculateSegment(bounds))
24808
- return this._calculateStylesCache(), this;
24944
+ /**
24945
+ * Set border background and font to this._stylesCache by visible range, which derives from bounds)
24946
+ * @param bounds viewBounds
24947
+ */
24948
+ setStylesCache(bounds) {
24949
+ if (!this.updateVisibleRange(bounds))
24950
+ return;
24951
+ const rowColumnSegment = this._visibleRange, columnWidthAccumulation = this.columnWidthAccumulation, { startRow: visibleStartRow, endRow: visibleEndRow, startColumn: visibleStartColumn, endColumn: visibleEndColumn } = rowColumnSegment;
24952
+ if (visibleEndColumn === -1 || visibleEndRow === -1) return;
24953
+ const mergeRanges = this.getCurrentRowColumnSegmentMergeData(this._visibleRange);
24954
+ for (const mergeRange of mergeRanges)
24955
+ this._setStylesCacheForOneCell(mergeRange.startRow, mergeRange.startColumn, {
24956
+ mergeRange
24957
+ });
24958
+ const expandStartCol = Math.max(0, visibleStartColumn - EXPAND_SIZE_FOR_RENDER_OVERFLOW), expandEndCol = Math.min(columnWidthAccumulation.length - 1, visibleEndColumn + EXPAND_SIZE_FOR_RENDER_OVERFLOW);
24959
+ for (let r = visibleStartRow; r <= visibleEndRow; r++)
24960
+ if (this.worksheet.getRowVisible(r) !== !1) {
24961
+ for (let c = visibleStartColumn; c <= visibleEndColumn; c++)
24962
+ this._setStylesCacheForOneCell(r, c, { cacheItem: { bg: !0, border: !0 } });
24963
+ for (let c = expandStartCol; c < visibleEndColumn; c++)
24964
+ this._setStylesCacheForOneCell(r, c, { cacheItem: { bg: !1, border: !1 } });
24965
+ if (visibleEndColumn !== 0)
24966
+ for (let c = visibleEndColumn + 1; c < expandEndCol; c++)
24967
+ this._setStylesCacheForOneCell(r, c, { cacheItem: { bg: !1, border: !1 } });
24968
+ }
24969
+ return this;
24809
24970
  }
24810
24971
  calculate(bounds) {
24811
- return this._resetCache(), this.calculateWithoutClearingCache(bounds), this;
24972
+ return this._resetCache(), this.setStylesCache(bounds), this;
24973
+ }
24974
+ _hasUnMergedCellInRow(rowIndex, startColumn, endColumn) {
24975
+ if (!this.worksheet.getMergeData())
24976
+ return !1;
24977
+ for (let i = startColumn; i <= endColumn; i++) {
24978
+ const { isMerged, isMergedMainCell } = this._getCellMergeInfo(rowIndex, i);
24979
+ if (!isMerged && !isMergedMainCell)
24980
+ return !0;
24981
+ }
24982
+ return !1;
24812
24983
  }
24984
+ //#region auto height
24985
+ /**
24986
+ * Calc all auto height by getDocsSkeletonPageSize in ranges
24987
+ * @param ranges
24988
+ * @returns {IRowAutoHeightInfo[]} result
24989
+ */
24813
24990
  calculateAutoHeightInRange(ranges) {
24814
24991
  var _a10;
24815
24992
  if (!Tools.isArray(ranges))
@@ -24831,24 +25008,10 @@ let SpreadsheetSkeleton = (_a6 = class extends Skeleton {
24831
25008
  }
24832
25009
  return results;
24833
25010
  }
24834
- _hasUnMergedCellInRow(rowIndex, startColumn, endColumn) {
24835
- if (!this.worksheet.getMergeData())
24836
- return !1;
24837
- for (let i = startColumn; i <= endColumn; i++) {
24838
- const { isMerged, isMergedMainCell } = this._getCellMergeInfo(rowIndex, i);
24839
- if (!isMerged && !isMergedMainCell)
24840
- return !0;
24841
- }
24842
- return !1;
24843
- }
24844
- // TODO: auto height
24845
25011
  _calculateRowAutoHeight(rowNum) {
24846
25012
  var _a10, _b, _c;
24847
- const { columnCount, columnData, defaultRowHeight, defaultColumnWidth } = this._worksheetData;
25013
+ const worksheet = this.worksheet, { columnCount, columnData, defaultRowHeight, defaultColumnWidth } = this._worksheetData;
24848
25014
  let height = defaultRowHeight;
24849
- const worksheet = this.worksheet;
24850
- if (!worksheet)
24851
- return height;
24852
25015
  for (let i = 0; i < columnCount; i++) {
24853
25016
  const { isMerged, isMergedMainCell } = this._getCellMergeInfo(rowNum, i);
24854
25017
  if (isMerged || isMergedMainCell)
@@ -24869,7 +25032,7 @@ let SpreadsheetSkeleton = (_a6 = class extends Skeleton {
24869
25032
  continue;
24870
25033
  const documentViewModel = new DocumentViewModel(documentModel), { vertexAngle: angle } = convertTextRotation(textRotation), colWidth = (_b = (_a10 = columnData[i]) == null ? void 0 : _a10.w) != null ? _b : defaultColumnWidth;
24871
25034
  typeof colWidth == "number" && wrapStrategy === WrapStrategy.WRAP && documentModel.updateDocumentDataPageSize(colWidth);
24872
- const documentSkeleton = DocumentSkeleton.create(documentViewModel, this._localService);
25035
+ const documentSkeleton = DocumentSkeleton.create(documentViewModel, this._localeService);
24873
25036
  documentSkeleton.calculate();
24874
25037
  let { height: h = 0 } = (_c = getDocsSkeletonPageSize(documentSkeleton, angle)) != null ? _c : {};
24875
25038
  if (documentSkeleton) {
@@ -24885,6 +25048,95 @@ let SpreadsheetSkeleton = (_a6 = class extends Skeleton {
24885
25048
  }
24886
25049
  return Math.min(height, MAXIMUM_ROW_HEIGHT);
24887
25050
  }
25051
+ //#endregion
25052
+ //#region calculate auto width
25053
+ calculateAutoWidthInRange(ranges) {
25054
+ if (!Tools.isArray(ranges))
25055
+ return [];
25056
+ const results = [], calculatedCols = /* @__PURE__ */ new Set();
25057
+ for (const range of ranges) {
25058
+ const { startColumn, endColumn } = range;
25059
+ for (let colIndex = startColumn; colIndex <= endColumn; colIndex++) {
25060
+ if (!this.worksheet.getColVisible(colIndex) || calculatedCols.has(colIndex)) continue;
25061
+ const autoWidth = this._calculateColWidth(colIndex);
25062
+ calculatedCols.add(colIndex), results.push({
25063
+ col: colIndex,
25064
+ width: autoWidth
25065
+ });
25066
+ }
25067
+ }
25068
+ return results;
25069
+ }
25070
+ /**
25071
+ * Iterate rows in visible area(and rows around it) and return column width of the specified column(by column index)
25072
+ *
25073
+ * @param colIndex
25074
+ * @returns {number} width
25075
+ */
25076
+ _calculateColWidth(colIndex) {
25077
+ var _a10, _b;
25078
+ const worksheet = this.worksheet;
25079
+ let colWidth = 0;
25080
+ const visibleRangeViewMain = this.visibleRangeByViewportKey(SHEET_VIEWPORT_KEY.VIEW_MAIN);
25081
+ if (!visibleRangeViewMain) return colWidth;
25082
+ const { startRow: startRowOfViewMain, endRow: endRowOfViewMain } = visibleRangeViewMain, rowCount = this.worksheet.getRowCount(), checkStart = Math.max(0, startRowOfViewMain - 1e4), checkEnd = Math.min(rowCount, endRowOfViewMain + 1e4), otherRowIndex = /* @__PURE__ */ new Set();
25083
+ otherRowIndex.add(0), otherRowIndex.add(rowCount - 1);
25084
+ const visibleRangeViewMainTop = this.visibleRangeByViewportKey(SHEET_VIEWPORT_KEY.VIEW_MAIN_TOP);
25085
+ if (visibleRangeViewMainTop) {
25086
+ const { startRow: startRowOfViewMainTop, endRow: endRowOfViewMainTop } = visibleRangeViewMainTop;
25087
+ for (let i = startRowOfViewMainTop; i <= endRowOfViewMainTop; i++)
25088
+ otherRowIndex.add(i);
25089
+ }
25090
+ const rowIdxArr = (/* @__PURE__ */ __name((start, end, additionalArr) => [...Array.from(
25091
+ { length: end - start + 1 },
25092
+ (_2, i) => i + start
25093
+ ), ...additionalArr], "createRowSequence"))(checkStart, checkEnd, otherRowIndex), preColIndex = Math.max(0, colIndex - 1), currColWidth = this._columnWidthAccumulation[colIndex] - this._columnWidthAccumulation[preColIndex];
25094
+ for (let i = 0; i < rowIdxArr.length; i++) {
25095
+ const row = rowIdxArr[i], { isMerged, isMergedMainCell } = this._getCellMergeInfo(colIndex, row);
25096
+ if (isMerged && !isMergedMainCell || !this.worksheet.getRowVisible(row)) continue;
25097
+ const cell = worksheet.getCell(row, colIndex);
25098
+ if (!cell || cell.p && (row + 1e3 <= startRowOfViewMain || row - 1e3 >= endRowOfViewMain))
25099
+ continue;
25100
+ let measuredWidth = this._getMeasuredWidthByCell(cell, currColWidth);
25101
+ if (cell.fontRenderExtension && (measuredWidth += (((_a10 = cell.fontRenderExtension) == null ? void 0 : _a10.leftOffset) || 0) + (((_b = cell.fontRenderExtension) == null ? void 0 : _b.rightOffset) || 0)), colWidth = Math.max(colWidth, measuredWidth), colWidth >= MAXIMUM_COL_WIDTH)
25102
+ return MAXIMUM_COL_WIDTH;
25103
+ }
25104
+ return colWidth === 0 ? currColWidth : colWidth;
25105
+ }
25106
+ /**
25107
+ * For _calculateColMaxWidth
25108
+ * @param cell
25109
+ * @returns {number} width
25110
+ */
25111
+ _getMeasuredWidthByCell(cell, currColWidth) {
25112
+ var _a10, _b, _c;
25113
+ let measuredWidth = 0;
25114
+ if ((_a10 = cell.fontRenderExtension) != null && _a10.isSkip && (cell != null && cell.interceptorAutoWidth)) {
25115
+ const cellWidth = (_b = cell.interceptorAutoWidth) == null ? void 0 : _b.call(cell);
25116
+ if (cellWidth)
25117
+ return cellWidth;
25118
+ }
25119
+ const modelObject = this._getCellDocumentModel(cell);
25120
+ if (modelObject == null)
25121
+ return measuredWidth;
25122
+ const { documentModel, textRotation } = modelObject;
25123
+ if (documentModel == null)
25124
+ return measuredWidth;
25125
+ const documentViewModel = new DocumentViewModel(documentModel), { vertexAngle: angle } = convertTextRotation(textRotation), cellStyle = this._styles.getStyleByCell(cell);
25126
+ (cellStyle == null ? void 0 : cellStyle.tb) === WrapStrategy.WRAP ? documentModel.updateDocumentDataPageSize(currColWidth, 1 / 0) : documentModel.updateDocumentDataPageSize(1 / 0, 1 / 0);
25127
+ const documentSkeleton = DocumentSkeleton.create(documentViewModel, this._localeService);
25128
+ if (documentSkeleton.calculate(), measuredWidth = ((_c = getDocsSkeletonPageSize(documentSkeleton, angle)) != null ? _c : { width: 0 }).width, documentSkeleton) {
25129
+ const skeletonData = documentSkeleton.getSkeletonData(), {
25130
+ marginTop: t,
25131
+ marginBottom: b,
25132
+ marginLeft: l,
25133
+ marginRight: r
25134
+ } = skeletonData.pages[skeletonData.pages.length - 1], absAngleInRad = Math.abs(degToRad(angle));
25135
+ measuredWidth += t * Math.sin(absAngleInRad) + r * Math.cos(absAngleInRad) + b * Math.sin(absAngleInRad) + l * Math.cos(absAngleInRad);
25136
+ }
25137
+ return measuredWidth;
25138
+ }
25139
+ //#endregion
24888
25140
  /**
24889
25141
  * Calculate data for row col & cell position, then update position value to this._rowHeaderWidth & this._rowHeightAccumulation & this._columnHeaderHeight & this._columnWidthAccumulation.
24890
25142
  */
@@ -25178,16 +25430,14 @@ let SpreadsheetSkeleton = (_a6 = class extends Skeleton {
25178
25430
  }
25179
25431
  // Only used for cell edit, and no need to rotate text when edit cell content!
25180
25432
  getBlankCellDocumentModel(cell) {
25181
- const documentModelObject = this._getCellDocumentModel(cell, {
25182
- ignoreTextRotation: !0
25183
- }), style = this._styles.getStyleByCell(cell), textStyle = this._getFontFormat(style);
25433
+ const documentModelObject = this._getCellDocumentModel(cell, { ignoreTextRotation: !0 }), style = this._styles.getStyleByCell(cell), textStyle = getFontFormat(style);
25184
25434
  if (documentModelObject != null)
25185
- return documentModelObject.documentModel == null && (documentModelObject.documentModel = this._getDocumentDataByStyle("", textStyle, {})), documentModelObject;
25435
+ return documentModelObject.documentModel == null && (documentModelObject.documentModel = createDocumentModelWithStyle("", textStyle)), documentModelObject;
25186
25436
  const content = "";
25187
25437
  let fontString = "document";
25188
25438
  const textRotation = DEFAULT_STYLES.tr, horizontalAlign = DEFAULT_STYLES.ht, verticalAlign = DEFAULT_STYLES.vt, wrapStrategy = DEFAULT_STYLES.tb, paddingData = DEFAULT_PADDING_DATA;
25189
- return fontString = getFontStyleString({}, this._localService).fontCache, {
25190
- documentModel: this._getDocumentDataByStyle(content, textStyle, {}),
25439
+ return fontString = getFontStyleString({}).fontCache, {
25440
+ documentModel: createDocumentModelWithStyle(content, textStyle),
25191
25441
  fontString,
25192
25442
  textRotation,
25193
25443
  wrapStrategy,
@@ -25221,11 +25471,11 @@ let SpreadsheetSkeleton = (_a6 = class extends Skeleton {
25221
25471
  if (!cell)
25222
25472
  return;
25223
25473
  let documentModel, fontString = "document";
25224
- const cellOtherConfig = this._getOtherStyle(style), textRotation = ignoreTextRotation ? DEFAULT_STYLES.tr : cellOtherConfig.textRotation || DEFAULT_STYLES.tr;
25474
+ const cellOtherConfig = extractOtherStyle(style), textRotation = ignoreTextRotation ? DEFAULT_STYLES.tr : cellOtherConfig.textRotation || DEFAULT_STYLES.tr;
25225
25475
  let horizontalAlign = cellOtherConfig.horizontalAlign || DEFAULT_STYLES.ht;
25226
25476
  const verticalAlign = cellOtherConfig.verticalAlign || DEFAULT_STYLES.vt, wrapStrategy = cellOtherConfig.wrapStrategy || DEFAULT_STYLES.tb, paddingData = cellOtherConfig.paddingData || DEFAULT_PADDING_DATA;
25227
25477
  if (cell.f && displayRawFormula)
25228
- documentModel = this._getDocumentDataByStyle(cell.f.toString(), {}, { verticalAlign }), horizontalAlign = DEFAULT_STYLES.ht;
25478
+ documentModel = createDocumentModelWithStyle(cell.f.toString(), {}, { verticalAlign }), horizontalAlign = DEFAULT_STYLES.ht;
25229
25479
  else if (cell.p) {
25230
25480
  const { centerAngle, vertexAngle } = convertTextRotation(textRotation);
25231
25481
  documentModel = this._updateConfigAndGetDocumentModel(
@@ -25241,10 +25491,10 @@ let SpreadsheetSkeleton = (_a6 = class extends Skeleton {
25241
25491
  }
25242
25492
  );
25243
25493
  } else if (cell.v != null) {
25244
- const textStyle = this._getFontFormat(style);
25245
- fontString = getFontStyleString(textStyle, this._localService).fontCache;
25494
+ const textStyle = getFontFormat(style);
25495
+ fontString = getFontStyleString(textStyle).fontCache;
25246
25496
  let cellText = extractPureTextFromCell(cell);
25247
- cell.t === CellValueType.FORCE_STRING && displayRawFormula && (cellText = `'${cellText}`), documentModel = this._getDocumentDataByStyle(cellText, textStyle, {
25497
+ cell.t === CellValueType.FORCE_STRING && displayRawFormula && (cellText = `'${cellText}`), documentModel = createDocumentModelWithStyle(cellText, textStyle, {
25248
25498
  ...cellOtherConfig,
25249
25499
  textRotation,
25250
25500
  cellValueType: cell.t
@@ -25379,6 +25629,12 @@ let SpreadsheetSkeleton = (_a6 = class extends Skeleton {
25379
25629
  rowHeightAccumulation
25380
25630
  };
25381
25631
  }
25632
+ /**
25633
+ * Calc columnWidthAccumulation by columnData
25634
+ * @param colCount
25635
+ * @param columnData
25636
+ * @param defaultColumnWidth
25637
+ */
25382
25638
  _generateColumnMatrixCache(colCount, columnData, defaultColumnWidth) {
25383
25639
  let columnTotalWidth = 0;
25384
25640
  const columnWidthAccumulation = [], data2 = columnData;
@@ -25435,19 +25691,6 @@ let SpreadsheetSkeleton = (_a6 = class extends Skeleton {
25435
25691
  intersectMergeRange(row, column) {
25436
25692
  return !!this.worksheet.getMergedCell(row, column);
25437
25693
  }
25438
- // private _getMergeRangeCache() {
25439
- // const dataMergeCache = this.dataMergeCache;
25440
- // const mergeRangeCache = new ObjectMatrix<ObjectMatrix<boolean>>();
25441
- // dataMergeCache?.forEach((r, dataMergeRow) => {
25442
- // dataMergeRow?.forEach((c, dataCache) => {
25443
- // const { startRow: startRowMargeIndex, endRow: endRowMargeIndex, startColumn: startColumnMargeIndex, endColumn: endColumnMargeIndex } = dataCache;
25444
- // const endObject = new ObjectMatrix<boolean>();
25445
- // endObject.setValue(endRowMargeIndex, endColumnMargeIndex, true);
25446
- // mergeRangeCache.setValue(startRowMargeIndex, startColumnMargeIndex, endObject);
25447
- // });
25448
- // });
25449
- // return mergeRangeCache;
25450
- // }
25451
25694
  /**
25452
25695
  * get the current row and column segment visible merge data
25453
25696
  * @returns {IRange} The visible merge data
@@ -25461,25 +25704,6 @@ let SpreadsheetSkeleton = (_a6 = class extends Skeleton {
25461
25704
  startColumn: 0
25462
25705
  } : range = { startRow: 0, startColumn: 0, endRow: this.rowHeightAccumulation.length - 1, endColumn: endColumnLast }, this.worksheet.getSpanModel().getMergedCellRangeForSkeleton(range.startRow, range.startColumn, range.endRow, range.endColumn);
25463
25706
  }
25464
- _calculateStylesCache() {
25465
- const rowColumnSegment = this._visibleRange, columnWidthAccumulation = this.columnWidthAccumulation, { startRow, endRow, startColumn, endColumn } = rowColumnSegment;
25466
- if (endColumn === -1 || endRow === -1) return;
25467
- const mergeRanges = this.getCurrentRowColumnSegmentMergeData(this._visibleRange);
25468
- for (const mergeRange of mergeRanges)
25469
- this._setStylesCache(mergeRange.startRow, mergeRange.startColumn, {
25470
- mergeRange
25471
- });
25472
- for (let r = startRow; r <= endRow; r++)
25473
- if (this.worksheet.getRowVisible(r) !== !1) {
25474
- for (let c = startColumn; c <= endColumn; c++)
25475
- this._setStylesCache(r, c, { cacheItem: { bg: !0, border: !0 } });
25476
- for (let c = 0; c < startColumn; c++)
25477
- this._setStylesCache(r, c, { cacheItem: { bg: !1, border: !1 } });
25478
- if (endColumn !== 0)
25479
- for (let c = endColumn + 1; c < columnWidthAccumulation.length; c++)
25480
- this._setStylesCache(r, c, { cacheItem: { bg: !1, border: !1 } });
25481
- }
25482
- }
25483
25707
  resetCache() {
25484
25708
  this._resetCache();
25485
25709
  }
@@ -25524,7 +25748,7 @@ let SpreadsheetSkeleton = (_a6 = class extends Skeleton {
25524
25748
  if (documentModel == null) return;
25525
25749
  const { fontString: _fontString, textRotation, wrapStrategy, verticalAlign, horizontalAlign } = modelObject, documentViewModel = new DocumentViewModel(documentModel);
25526
25750
  if (documentViewModel) {
25527
- const { vertexAngle, centerAngle } = convertTextRotation(textRotation), documentSkeleton = DocumentSkeleton.create(documentViewModel, this._localService);
25751
+ const { vertexAngle, centerAngle } = convertTextRotation(textRotation), documentSkeleton = DocumentSkeleton.create(documentViewModel, this._localeService);
25528
25752
  documentSkeleton.calculate();
25529
25753
  const config = {
25530
25754
  documentSkeleton,
@@ -25538,12 +25762,12 @@ let SpreadsheetSkeleton = (_a6 = class extends Skeleton {
25538
25762
  }
25539
25763
  }
25540
25764
  /**
25541
- * Set border background and font to this._stylesCache
25765
+ * Set border background and font to this._stylesCache cell by cell.
25542
25766
  * @param row {number}
25543
25767
  * @param col {number}
25544
25768
  * @param options {{ mergeRange: IRange; cacheItem: ICacheItem } | undefined}
25545
25769
  */
25546
- _setStylesCache(row, col, options) {
25770
+ _setStylesCacheForOneCell(row, col, options) {
25547
25771
  if (row === -1 || col === -1)
25548
25772
  return;
25549
25773
  const handledBgCell = Tools.isDefine(this._handleBgMatrix.getValue(row, col)), handledBorderCell = Tools.isDefine(this._handleBorderMatrix.getValue(row, col));
@@ -25557,7 +25781,7 @@ let SpreadsheetSkeleton = (_a6 = class extends Skeleton {
25557
25781
  if (!isMergedMainCell)
25558
25782
  return;
25559
25783
  }
25560
- const cell = this.worksheet.getCell(row, col) || this.worksheet.getCellRaw(row, col), style = this._styles.getStyleByCell(cell);
25784
+ const cell = this.worksheet.getCell(row, col) || this.worksheet.getCellRaw(row, col), cellStyle = this._styles.getStyleByCell(cell), columnStyle = this.worksheet.getColumnStyle(col), rowStyle = this.worksheet.getRowStyle(row), defaultStyle = this.worksheet.getDefaultCellStyleInternal(), style = this._isRowStylePrecedeColumnStyle ? composeStyles(defaultStyle, columnStyle, rowStyle, cellStyle) : composeStyles(defaultStyle, rowStyle, columnStyle, cellStyle);
25561
25785
  this._setBgStylesCache(row, col, style, options), this._setBorderStylesCache(row, col, style, options), this._setFontStylesCache(row, col, cell);
25562
25786
  }
25563
25787
  _updateConfigAndGetDocumentModel(documentData, horizontalAlign, paddingData, renderConfig) {
@@ -25573,60 +25797,6 @@ let SpreadsheetSkeleton = (_a6 = class extends Skeleton {
25573
25797
  paragraph.paragraphStyle || (paragraph.paragraphStyle = {}), paragraph.paragraphStyle.horizontalAlign = horizontalAlign;
25574
25798
  return new DocumentDataModel(documentData);
25575
25799
  }
25576
- _getDocumentDataByStyle(content, textStyle, config) {
25577
- const contentLength = content.length, {
25578
- textRotation,
25579
- paddingData = DEFAULT_PADDING_DATA,
25580
- horizontalAlign = HorizontalAlign.UNSPECIFIED,
25581
- verticalAlign = VerticalAlign.UNSPECIFIED,
25582
- wrapStrategy = WrapStrategy.UNSPECIFIED,
25583
- cellValueType
25584
- } = config, { t: marginTop, r: marginRight, b: marginBottom, l: marginLeft } = paddingData || {}, { vertexAngle, centerAngle } = convertTextRotation(textRotation), documentData = {
25585
- id: "d",
25586
- body: {
25587
- dataStream: `${content}${DEFAULT_EMPTY_DOCUMENT_VALUE}`,
25588
- textRuns: [
25589
- {
25590
- ts: textStyle,
25591
- st: 0,
25592
- ed: contentLength
25593
- }
25594
- ],
25595
- paragraphs: [
25596
- {
25597
- startIndex: contentLength,
25598
- paragraphStyle: {
25599
- horizontalAlign
25600
- }
25601
- }
25602
- ],
25603
- sectionBreaks: [{
25604
- startIndex: contentLength + 1
25605
- }]
25606
- },
25607
- documentStyle: {
25608
- pageSize: {
25609
- width: Number.POSITIVE_INFINITY,
25610
- height: Number.POSITIVE_INFINITY
25611
- },
25612
- marginTop,
25613
- marginBottom,
25614
- marginRight,
25615
- marginLeft,
25616
- renderConfig: {
25617
- horizontalAlign,
25618
- verticalAlign,
25619
- centerAngle,
25620
- vertexAngle,
25621
- wrapStrategy,
25622
- cellValueType
25623
- }
25624
- },
25625
- drawings: {},
25626
- drawingsOrder: []
25627
- };
25628
- return new DocumentDataModel(documentData);
25629
- }
25630
25800
  /**
25631
25801
  * pro/issues/344
25632
25802
  * In Excel, for the border rendering of merged cells to take effect, the outermost cells need to have the same border style.
@@ -25694,26 +25864,6 @@ let SpreadsheetSkeleton = (_a6 = class extends Skeleton {
25694
25864
  const { ff, fs, it, bl, ul, st, ol, cl } = format, style = {};
25695
25865
  return ff && (style.ff = ff), fs && (style.fs = fs), it && (style.it = it), bl && (style.bl = bl), ul && (style.ul = ul), st && (style.st = st), ol && (style.ol = ol), cl && (style.cl = cl), style;
25696
25866
  }
25697
- _getOtherStyle(format) {
25698
- if (!format)
25699
- return {};
25700
- const {
25701
- tr: textRotation,
25702
- td: textDirection,
25703
- ht: horizontalAlign,
25704
- vt: verticalAlign,
25705
- tb: wrapStrategy,
25706
- pd: paddingData
25707
- } = format;
25708
- return {
25709
- textRotation,
25710
- textDirection,
25711
- horizontalAlign,
25712
- verticalAlign,
25713
- wrapStrategy,
25714
- paddingData
25715
- };
25716
- }
25717
25867
  /**
25718
25868
  * New version to get merge data.
25719
25869
  * @param row
@@ -25765,7 +25915,8 @@ let SpreadsheetSkeleton = (_a6 = class extends Skeleton {
25765
25915
  }, __name(_a6, "SpreadsheetSkeleton"), _a6);
25766
25916
  SpreadsheetSkeleton = __decorateClass$3([
25767
25917
  __decorateParam$3(4, Inject(LocaleService)),
25768
- __decorateParam$3(5, IContextService)
25918
+ __decorateParam$3(5, IContextService),
25919
+ __decorateParam$3(6, IConfigService)
25769
25920
  ], SpreadsheetSkeleton);
25770
25921
  const UNIQUE_KEY$6 = "DefaultFontExtension", _Font = class _Font extends SheetExtension {
25771
25922
  constructor() {
@@ -25814,12 +25965,10 @@ const UNIQUE_KEY$6 = "DefaultFontExtension", _Font = class _Font extends SheetEx
25814
25965
  }
25815
25966
  renderFontEachCell(renderFontCtx, row, col, fontMatrix) {
25816
25967
  var _a10;
25817
- const { ctx, viewRanges, diffRanges, spreadsheetSkeleton, cellInfo } = renderFontCtx;
25818
- let { startY, endY, startX, endX } = cellInfo;
25819
- const { isMerged, isMergedMainCell, mergeInfo } = cellInfo;
25820
- if (isMerged && !isMergedMainCell)
25968
+ const { ctx, viewRanges, diffRanges, spreadsheetSkeleton, cellInfo } = renderFontCtx, { startY, endY, startX, endX } = cellInfo, { isMerged, isMergedMainCell, mergeInfo } = cellInfo;
25969
+ if (renderFontCtx.startX = startX, renderFontCtx.startY = startY, renderFontCtx.endX = endX, renderFontCtx.endY = endY, isMerged && !isMergedMainCell)
25821
25970
  return !0;
25822
- isMergedMainCell && (startY = mergeInfo.startY, endY = mergeInfo.endY, startX = mergeInfo.startX, endX = mergeInfo.endX);
25971
+ isMergedMainCell && (renderFontCtx.startX = mergeInfo.startX, renderFontCtx.startY = mergeInfo.startY, renderFontCtx.endX = mergeInfo.endX, renderFontCtx.endY = mergeInfo.endY);
25823
25972
  const fontsConfig = fontMatrix.getValue(row, col);
25824
25973
  if (!fontsConfig) return !0;
25825
25974
  const overflowRange = spreadsheetSkeleton.overflowCache.getValue(row, col), renderRange = diffRanges && diffRanges.length > 0 ? diffRanges : viewRanges;
@@ -25830,7 +25979,7 @@ const UNIQUE_KEY$6 = "DefaultFontExtension", _Font = class _Font extends SheetEx
25830
25979
  const cellData = spreadsheetSkeleton.worksheet.getCell(row, col) || {};
25831
25980
  if ((_a10 = cellData.fontRenderExtension) != null && _a10.isSkip)
25832
25981
  return !0;
25833
- ctx.save(), ctx.beginPath(), renderFontCtx.overflowRectangle = overflowRange, renderFontCtx.cellData = cellData, renderFontCtx.startX = startX, renderFontCtx.startY = startY, renderFontCtx.endX = endX, renderFontCtx.endY = endY, this._setFontRenderBounds(renderFontCtx, row, col, fontMatrix), ctx.translate(startX + FIX_ONE_PIXEL_BLUR_OFFSET, startY + FIX_ONE_PIXEL_BLUR_OFFSET), this._renderDocuments(ctx, fontsConfig, renderFontCtx.startX, renderFontCtx.startY, renderFontCtx.endX, renderFontCtx.endY, row, col, spreadsheetSkeleton.overflowCache), ctx.closePath(), ctx.restore();
25982
+ ctx.save(), ctx.beginPath(), renderFontCtx.overflowRectangle = overflowRange, renderFontCtx.cellData = cellData, this._setFontRenderBounds(renderFontCtx, row, col, fontMatrix), ctx.translate(renderFontCtx.startX + FIX_ONE_PIXEL_BLUR_OFFSET, renderFontCtx.startY + FIX_ONE_PIXEL_BLUR_OFFSET), this._renderDocuments(ctx, fontsConfig, renderFontCtx.startX, renderFontCtx.startY, renderFontCtx.endX, renderFontCtx.endY, row, col, spreadsheetSkeleton.overflowCache), ctx.closePath(), ctx.restore();
25834
25983
  }
25835
25984
  /**
25836
25985
  * Change font render bounds, for overflow and filter icon & custom render.
@@ -26066,7 +26215,6 @@ const UNIQUE_KEY$4 = "DefaultRowHeaderLayoutExtension", DEFAULT_ROW_STYLE = {
26066
26215
  __name(_RowHeaderLayout, "RowHeaderLayout");
26067
26216
  let RowHeaderLayout = _RowHeaderLayout;
26068
26217
  SheetRowHeaderExtensionRegistry.add(new RowHeaderLayout());
26069
- var ShowGridlinesState = /* @__PURE__ */ ((ShowGridlinesState2) => (ShowGridlinesState2[ShowGridlinesState2.OFF = 0] = "OFF", ShowGridlinesState2[ShowGridlinesState2.ON = 1] = "ON", ShowGridlinesState2))(ShowGridlinesState || {}), SHEET_VIEWPORT_KEY = /* @__PURE__ */ ((SHEET_VIEWPORT_KEY2) => (SHEET_VIEWPORT_KEY2.VIEW_MAIN = "viewMain", SHEET_VIEWPORT_KEY2.VIEW_MAIN_LEFT_TOP = "viewMainLeftTop", SHEET_VIEWPORT_KEY2.VIEW_MAIN_TOP = "viewMainTop", SHEET_VIEWPORT_KEY2.VIEW_MAIN_LEFT = "viewMainLeft", SHEET_VIEWPORT_KEY2.VIEW_ROW_TOP = "viewRowTop", SHEET_VIEWPORT_KEY2.VIEW_ROW_BOTTOM = "viewRowBottom", SHEET_VIEWPORT_KEY2.VIEW_COLUMN_LEFT = "viewColumnLeft", SHEET_VIEWPORT_KEY2.VIEW_COLUMN_RIGHT = "viewColumnRight", SHEET_VIEWPORT_KEY2.VIEW_LEFT_TOP = "viewLeftTop", SHEET_VIEWPORT_KEY2))(SHEET_VIEWPORT_KEY || {});
26070
26218
  const _SpreadsheetRowHeader = class _SpreadsheetRowHeader extends SpreadsheetHeader {
26071
26219
  constructor(oKey, spreadsheetSkeleton) {
26072
26220
  super(oKey, spreadsheetSkeleton);
@@ -26090,7 +26238,7 @@ const _SpreadsheetRowHeader = class _SpreadsheetRowHeader extends SpreadsheetHea
26090
26238
  if (!spreadsheetSkeleton)
26091
26239
  return;
26092
26240
  const parentScale = this.getParentScale();
26093
- spreadsheetSkeleton.calculateSegment(bounds);
26241
+ spreadsheetSkeleton.updateVisibleRange(bounds);
26094
26242
  const segment = spreadsheetSkeleton.rowColumnSegment;
26095
26243
  if (!segment || segment.startRow === -1 && segment.endRow === -1)
26096
26244
  return;
@@ -26444,10 +26592,10 @@ const BASE_OBJECT_ARRAY_Set = new Set(BASE_OBJECT_ARRAY), SHAPE_OBJECT_ARRAY = [
26444
26592
  return;
26445
26593
  const transformState = {};
26446
26594
  let hasTransformState = !1;
26447
- const hasRotateEnabled = (props == null ? void 0 : props.rotateEnabled) !== void 0, hasResizeEnabled = (props == null ? void 0 : props.resizeEnabled) !== void 0;
26448
- if (hasRotateEnabled || hasResizeEnabled) {
26595
+ const hasRotateEnabled = (props == null ? void 0 : props.rotateEnabled) !== void 0, hasResizeEnabled = (props == null ? void 0 : props.resizeEnabled) !== void 0, hasBorderEnabled = (props == null ? void 0 : props.borderEnabled) !== void 0;
26596
+ if (hasRotateEnabled || hasResizeEnabled || hasBorderEnabled) {
26449
26597
  const transformerConfig = this.transformerConfig || {};
26450
- hasRotateEnabled && (transformerConfig.rotateEnabled = props == null ? void 0 : props.rotateEnabled), hasResizeEnabled && (transformerConfig.resizeEnabled = props == null ? void 0 : props.resizeEnabled), this.transformerConfig = { ...transformerConfig };
26598
+ hasRotateEnabled && (transformerConfig.rotateEnabled = props == null ? void 0 : props.rotateEnabled), hasResizeEnabled && (transformerConfig.resizeEnabled = props == null ? void 0 : props.resizeEnabled), hasBorderEnabled && (transformerConfig.borderEnabled = props == null ? void 0 : props.borderEnabled), this.transformerConfig = { ...transformerConfig };
26451
26599
  }
26452
26600
  themeKeys.forEach((key) => {
26453
26601
  if (props[key] === void 0)
@@ -26552,6 +26700,9 @@ const RECT_OBJECT_ARRAY = ["radius"], _Rect = class _Rect extends Shape {
26552
26700
  get radius() {
26553
26701
  return this._radius;
26554
26702
  }
26703
+ setObjectType(type) {
26704
+ this.objectType = type;
26705
+ }
26555
26706
  static drawWith(ctx, props) {
26556
26707
  let { radius, width, height } = props;
26557
26708
  if (radius = radius != null ? radius : 0, width = width != null ? width : 0, height = height != null ? height : 0, ctx.save(), ctx.beginPath(), props.strokeDashArray && ctx.setLineDash(props.strokeDashArray), props.visualHeight && (ctx.translate(0, (height - (props.visualHeight || 0)) / 2), height = props.visualHeight), props.visualWidth && (ctx.translate((width - (props.visualWidth || 0)) / 2, 0), width = props.visualWidth), !radius)
@@ -27952,11 +28103,11 @@ const UNIQUE_KEY = "DefaultDocsLineExtension", DOC_EXTENSION_Z_INDEX = 40, _Line
27952
28103
  }
27953
28104
  draw(ctx, parentScale, glyph) {
27954
28105
  var _a10;
27955
- const line2 = (_a10 = glyph.parent) == null ? void 0 : _a10.parent, { renderConfig } = this.extensionOffset, vertexAngle = (renderConfig == null ? void 0 : renderConfig.vertexAngle) || 0, drawStrikeAndUnderline = !(((renderConfig == null ? void 0 : renderConfig.centerAngle) || 0) === 0 && vertexAngle !== 0 && vertexAngle % 90 === 0), { ts: textStyle, bBox, content } = glyph;
28106
+ const line2 = (_a10 = glyph.parent) == null ? void 0 : _a10.parent, { ts: textStyle, bBox, content } = glyph;
27956
28107
  if (line2 == null || textStyle == null || content === "\r")
27957
28108
  return;
27958
28109
  const { asc, dsc } = line2, { sp: strikeoutPosition, spo, sbo, bd } = bBox, scale = getScale(parentScale), DELTA = 0.5, { ul: underline, st: strikethrough, ol: overline, va: baselineOffset, bbl: bottomBorderLine } = textStyle;
27959
- if (drawStrikeAndUnderline && underline) {
28110
+ if (underline) {
27960
28111
  const startY = asc + dsc;
27961
28112
  this._drawLine(ctx, glyph, underline, startY, scale);
27962
28113
  }
@@ -27964,7 +28115,7 @@ const UNIQUE_KEY = "DefaultDocsLineExtension", DOC_EXTENSION_Z_INDEX = 40, _Line
27964
28115
  const startY = asc + dsc + 3;
27965
28116
  this._drawLine(ctx, glyph, bottomBorderLine, startY, scale, 2);
27966
28117
  }
27967
- if (drawStrikeAndUnderline && strikethrough) {
28118
+ if (strikethrough) {
27968
28119
  let startY = asc + bd - strikeoutPosition - DELTA;
27969
28120
  baselineOffset === BaselineOffset.SUPERSCRIPT ? startY -= spo : baselineOffset === BaselineOffset.SUBSCRIPT && (startY += sbo), this._drawLine(ctx, glyph, strikethrough, startY, scale);
27970
28121
  }
@@ -27986,11 +28137,11 @@ const UNIQUE_KEY = "DefaultDocsLineExtension", DOC_EXTENSION_Z_INDEX = 40, _Line
27986
28137
  originTranslate = Vector2.create(0, 0),
27987
28138
  alignOffset = Vector2.create(0, 0),
27988
28139
  renderConfig = {}
27989
- } = this.extensionOffset, { left, width } = glyph, { centerAngle: centerAngleDeg = 0, vertexAngle: vertexAngleDeg = 0 } = renderConfig, centerAngle = degToRad(centerAngleDeg), vertexAngle = degToRad(vertexAngleDeg);
27990
- ctx.save(), ctx.translateWithPrecisionRatio(FIX_ONE_PIXEL_BLUR_OFFSET, FIX_ONE_PIXEL_BLUR_OFFSET);
28140
+ } = this.extensionOffset, { left, width } = glyph, { centerAngle: centerAngleDeg = 0, vertexAngle: vertexAngleDeg = 0 } = renderConfig;
28141
+ ctx.save();
27991
28142
  const color = (c === BooleanNumber.TRUE ? getColorStyle((_a10 = glyph.ts) == null ? void 0 : _a10.cl) : getColorStyle(colorStyle)) || COLOR_BLACK_RGB;
27992
28143
  ctx.strokeStyle = color, ctx.lineWidth = lineWidth, this._setLineType(ctx, lineType || TextDecoration.SINGLE);
27993
- const start = calculateRectRotate(
28144
+ const centerAngle = degToRad(centerAngleDeg), vertexAngle = degToRad(vertexAngleDeg), start = calculateRectRotate(
27994
28145
  originTranslate.addByPoint(left, startY),
27995
28146
  Vector2.create(0, 0),
27996
28147
  centerAngle,
@@ -28017,8 +28168,6 @@ const _Documents = class _Documents extends DocComponent {
28017
28168
  super(oKey, documentSkeleton, config);
28018
28169
  __publicField(this, "_pageRender$", new Subject());
28019
28170
  __publicField(this, "pageRender$", this._pageRender$.asObservable());
28020
- __publicField(this, "docsLeft", 0);
28021
- __publicField(this, "docsTop", 0);
28022
28171
  __publicField(this, "_drawLiquid", new Liquid());
28023
28172
  this._initialDefaultExtension(), this.makeDirty(!0);
28024
28173
  }
@@ -28564,9 +28713,6 @@ const OBJECT_KEY = "__SHEET_EXTENSION_FONT_DOCUMENT_INSTANCE__", _Spreadsheet =
28564
28713
  get forceDisableGridlines() {
28565
28714
  return this._forceDisableGridlines;
28566
28715
  }
28567
- /**
28568
- * TODO: DR-Univer, fix as unknown as
28569
- */
28570
28716
  dispose() {
28571
28717
  var _a10;
28572
28718
  super.dispose(), (_a10 = this._documents) == null || _a10.dispose(), this._documents = null, this._backgroundExtension = null, this._borderExtension = null, this._fontExtension = null;
@@ -28721,7 +28867,7 @@ const OBJECT_KEY = "__SHEET_EXTENSION_FONT_DOCUMENT_INSTANCE__", _Spreadsheet =
28721
28867
  const spreadsheetSkeleton = this.getSkeleton();
28722
28868
  if (!spreadsheetSkeleton)
28723
28869
  return;
28724
- spreadsheetSkeleton.calculateWithoutClearingCache(viewportInfo);
28870
+ spreadsheetSkeleton.setStylesCache(viewportInfo);
28725
28871
  const segment = spreadsheetSkeleton.rowColumnSegment;
28726
28872
  if (!segment || segment.startRow === -1 && segment.endRow === -1 || segment.startColumn === -1 && segment.endColumn === -1)
28727
28873
  return;
@@ -28729,7 +28875,7 @@ const OBJECT_KEY = "__SHEET_EXTENSION_FONT_DOCUMENT_INSTANCE__", _Spreadsheet =
28729
28875
  const { rowHeaderWidth, columnHeaderHeight } = spreadsheetSkeleton;
28730
28876
  mainCtx.translateWithPrecision(rowHeaderWidth, columnHeaderHeight);
28731
28877
  const { viewportKey } = viewportInfo;
28732
- return this.sheetContentViewport().includes(viewportKey) ? viewportInfo && viewportInfo.cacheCanvas ? this.renderByViewport(mainCtx, viewportInfo, spreadsheetSkeleton) : this._draw(mainCtx, viewportInfo) : this.sheetHeaderViewport().includes(viewportKey) || (viewportInfo && viewportInfo.cacheCanvas ? this.renderByViewport(mainCtx, viewportInfo, spreadsheetSkeleton) : this._draw(mainCtx, viewportInfo)), mainCtx.restore(), this;
28878
+ return sheetContentViewportKeys.includes(viewportKey) ? viewportInfo && viewportInfo.cacheCanvas ? this.renderByViewport(mainCtx, viewportInfo, spreadsheetSkeleton) : this._draw(mainCtx, viewportInfo) : sheetHeaderViewportKeys.includes(viewportKey) || (viewportInfo && viewportInfo.cacheCanvas ? this.renderByViewport(mainCtx, viewportInfo, spreadsheetSkeleton) : this._draw(mainCtx, viewportInfo)), mainCtx.restore(), this;
28733
28879
  }
28734
28880
  /**
28735
28881
  * applyCache from cache canvas
@@ -28801,6 +28947,7 @@ const OBJECT_KEY = "__SHEET_EXTENSION_FONT_DOCUMENT_INSTANCE__", _Spreadsheet =
28801
28947
  */
28802
28948
  // eslint-disable-next-line max-lines-per-function
28803
28949
  _drawAuxiliary(ctx) {
28950
+ var _a10;
28804
28951
  const spreadsheetSkeleton = this.getSkeleton();
28805
28952
  if (spreadsheetSkeleton == null)
28806
28953
  return;
@@ -28810,7 +28957,7 @@ const OBJECT_KEY = "__SHEET_EXTENSION_FONT_DOCUMENT_INSTANCE__", _Spreadsheet =
28810
28957
  const { rowHeightAccumulation, columnTotalWidth, columnWidthAccumulation, rowTotalHeight } = spreadsheetSkeleton;
28811
28958
  if (!rowHeightAccumulation || !columnWidthAccumulation || columnTotalWidth === void 0 || rowTotalHeight === void 0)
28812
28959
  return;
28813
- ctx.save(), ctx.setLineWidthByPrecision(1), ctx.strokeStyle = getColor([214, 216, 219]);
28960
+ ctx.save(), ctx.setLineWidthByPrecision(1), ctx.strokeStyle = (_a10 = ctx.renderConfig.gridlineColor) != null ? _a10 : getColor([214, 216, 219]);
28814
28961
  const columnWidthAccumulationLength = columnWidthAccumulation.length, rowHeightAccumulationLength = rowHeightAccumulation.length, EXTRA_BOUND = 0.4, rowCount = endRow - startRow + 1, columnCount = endColumn - startColumn + 1, extraRowCount = Math.ceil(rowCount * EXTRA_BOUND), extraColumnCount = Math.ceil(columnCount * EXTRA_BOUND), rowStart = Math.max(Math.floor(startRow - extraRowCount), 0), rowEnd = Math.min(Math.ceil(endRow + extraRowCount), rowHeightAccumulationLength - 1), columnEnd = Math.min(Math.ceil(endColumn + extraColumnCount), columnWidthAccumulationLength - 1), columnStart = Math.max(Math.floor(startColumn - extraColumnCount), 0), startX = columnWidthAccumulation[columnStart - 1] || 0, startY = rowHeightAccumulation[rowStart - 1] || 0, endX = columnWidthAccumulation[columnEnd], endY = rowHeightAccumulation[rowEnd];
28815
28962
  ctx.translateWithPrecisionRatio(FIX_ONE_PIXEL_BLUR_OFFSET, FIX_ONE_PIXEL_BLUR_OFFSET), ctx.beginPath(), ctx.moveToByPrecision(startX, startY), ctx.lineToByPrecision(endX, startY), ctx.moveToByPrecision(startX, startY), ctx.lineToByPrecision(startX, endY), ctx.closePathByEnv(), ctx.stroke();
28816
28963
  for (let r = rowStart; r <= rowEnd; r++) {
@@ -28847,12 +28994,6 @@ const OBJECT_KEY = "__SHEET_EXTENSION_FONT_DOCUMENT_INSTANCE__", _Spreadsheet =
28847
28994
  isMergedMainCell && (startY = mergeInfo.startY, endY = mergeInfo.endY, startX = mergeInfo.startX, endX = mergeInfo.endX), ctx.clearRectForTexture(startX, startY, endX - startX + 0.5, endY - startY + 0.5);
28848
28995
  });
28849
28996
  }
28850
- sheetContentViewport() {
28851
- return [SHEET_VIEWPORT_KEY.VIEW_MAIN, SHEET_VIEWPORT_KEY.VIEW_MAIN_LEFT_TOP, SHEET_VIEWPORT_KEY.VIEW_MAIN_TOP, SHEET_VIEWPORT_KEY.VIEW_MAIN_LEFT];
28852
- }
28853
- sheetHeaderViewport() {
28854
- return [SHEET_VIEWPORT_KEY.VIEW_ROW_TOP, SHEET_VIEWPORT_KEY.VIEW_ROW_BOTTOM, SHEET_VIEWPORT_KEY.VIEW_COLUMN_LEFT, SHEET_VIEWPORT_KEY.VIEW_COLUMN_RIGHT, SHEET_VIEWPORT_KEY.VIEW_LEFT_TOP];
28855
- }
28856
28997
  testShowRuler(cacheCtx, viewportInfo) {
28857
28998
  const { cacheBound } = viewportInfo, spreadsheetSkeleton = this.getSkeleton(), { rowHeaderWidth, columnHeaderHeight } = spreadsheetSkeleton, { left, top, right, bottom } = cacheBound, findClosestHundred = /* @__PURE__ */ __name((number) => {
28858
28999
  const remainder = number % 100;
@@ -29108,6 +29249,27 @@ const arrowPath = "M512 1024C229.248 1024 0 794.752 0 512S229.248 0 512 0s512 22
29108
29249
  };
29109
29250
  __name(_Slide, "Slide");
29110
29251
  let Slide = _Slide;
29252
+ const _UniverRenderConfigService = class _UniverRenderConfigService {
29253
+ constructor() {
29254
+ __publicField(this, "_renderConfig", {
29255
+ ok: "111"
29256
+ });
29257
+ __publicField(this, "_updateSignal$", new Subject());
29258
+ __publicField(this, "updateSignal$", this._updateSignal$.pipe(debounceTime(4)));
29259
+ }
29260
+ setRenderConfig(key, value) {
29261
+ if (value == null) {
29262
+ delete this._renderConfig[key];
29263
+ return;
29264
+ }
29265
+ this._renderConfig[key] = value;
29266
+ }
29267
+ getRenderConfig() {
29268
+ return this._renderConfig;
29269
+ }
29270
+ };
29271
+ __name(_UniverRenderConfigService, "UniverRenderConfigService");
29272
+ let UniverRenderConfigService = _UniverRenderConfigService;
29111
29273
  const PAGE_STROKE_COLOR = "rgba(198, 198, 198, 1)", PAGE_FILL_COLOR = "rgba(255, 255, 255, 1)", MARGIN_STROKE_COLOR = "rgba(158, 158, 158, 1)", _DocBackground = class _DocBackground extends DocComponent {
29112
29274
  constructor(oKey, documentSkeleton, config) {
29113
29275
  super(oKey, documentSkeleton, config);
@@ -29122,7 +29284,9 @@ const PAGE_STROKE_COLOR = "rgba(198, 198, 198, 1)", PAGE_FILL_COLOR = "rgba(255,
29122
29284
  const skeletonData = (_a10 = this.getSkeleton()) == null ? void 0 : _a10.getSkeletonData(), docDataModel = (_b = this.getSkeleton()) == null ? void 0 : _b.getViewModel().getDataModel();
29123
29285
  if (skeletonData == null || docDataModel == null)
29124
29286
  return;
29125
- const documentFlavor = docDataModel.getSnapshot().documentStyle.documentFlavor;
29287
+ const { documentFlavor } = docDataModel.getSnapshot().documentStyle;
29288
+ if (documentFlavor !== DocumentFlavor.TRADITIONAL)
29289
+ return;
29126
29290
  this._drawLiquid.reset();
29127
29291
  const { pages } = skeletonData;
29128
29292
  let pageTop = 0, pageLeft = 0;
@@ -29148,51 +29312,49 @@ const PAGE_STROKE_COLOR = "rgba(198, 198, 198, 1)", PAGE_FILL_COLOR = "rgba(255,
29148
29312
  fill: PAGE_FILL_COLOR,
29149
29313
  zIndex: 3
29150
29314
  };
29151
- if (Rect.drawWith(ctx, backgroundOptions), documentFlavor === DocumentFlavor.TRADITIONAL) {
29152
- const marginIdentification = {
29153
- dataArray: [{
29154
- command: "M",
29155
- points: [marginLeft - 15, originMarginTop]
29156
- }, {
29157
- command: "L",
29158
- points: [marginLeft, originMarginTop]
29159
- }, {
29160
- command: "L",
29161
- points: [marginLeft, originMarginTop - 15]
29162
- }, {
29163
- command: "M",
29164
- points: [pageWidth - marginRight + 15, originMarginTop]
29165
- }, {
29166
- command: "L",
29167
- points: [pageWidth - marginRight, originMarginTop]
29168
- }, {
29169
- command: "L",
29170
- points: [pageWidth - marginRight, originMarginTop - 15]
29171
- }, {
29172
- command: "M",
29173
- points: [marginLeft - 15, pageHeight - originMarginBottom]
29174
- }, {
29175
- command: "L",
29176
- points: [marginLeft, pageHeight - originMarginBottom]
29177
- }, {
29178
- command: "L",
29179
- points: [marginLeft, pageHeight - originMarginBottom + 15]
29180
- }, {
29181
- command: "M",
29182
- points: [pageWidth - marginRight + 15, pageHeight - originMarginBottom]
29183
- }, {
29184
- command: "L",
29185
- points: [pageWidth - marginRight, pageHeight - originMarginBottom]
29186
- }, {
29187
- command: "L",
29188
- points: [pageWidth - marginRight, pageHeight - originMarginBottom + 15]
29189
- }],
29190
- strokeWidth: 1.5,
29191
- stroke: MARGIN_STROKE_COLOR
29192
- };
29193
- Path.drawWith(ctx, marginIdentification);
29194
- }
29195
- ctx.restore();
29315
+ Rect.drawWith(ctx, backgroundOptions);
29316
+ const IDENTIFIER_WIDTH = 15, marginIdentification = {
29317
+ dataArray: [{
29318
+ command: "M",
29319
+ points: [marginLeft - IDENTIFIER_WIDTH, originMarginTop]
29320
+ }, {
29321
+ command: "L",
29322
+ points: [marginLeft, originMarginTop]
29323
+ }, {
29324
+ command: "L",
29325
+ points: [marginLeft, originMarginTop - IDENTIFIER_WIDTH]
29326
+ }, {
29327
+ command: "M",
29328
+ points: [pageWidth - marginRight + IDENTIFIER_WIDTH, originMarginTop]
29329
+ }, {
29330
+ command: "L",
29331
+ points: [pageWidth - marginRight, originMarginTop]
29332
+ }, {
29333
+ command: "L",
29334
+ points: [pageWidth - marginRight, originMarginTop - IDENTIFIER_WIDTH]
29335
+ }, {
29336
+ command: "M",
29337
+ points: [marginLeft - IDENTIFIER_WIDTH, pageHeight - originMarginBottom]
29338
+ }, {
29339
+ command: "L",
29340
+ points: [marginLeft, pageHeight - originMarginBottom]
29341
+ }, {
29342
+ command: "L",
29343
+ points: [marginLeft, pageHeight - originMarginBottom + IDENTIFIER_WIDTH]
29344
+ }, {
29345
+ command: "M",
29346
+ points: [pageWidth - marginRight + IDENTIFIER_WIDTH, pageHeight - originMarginBottom]
29347
+ }, {
29348
+ command: "L",
29349
+ points: [pageWidth - marginRight, pageHeight - originMarginBottom]
29350
+ }, {
29351
+ command: "L",
29352
+ points: [pageWidth - marginRight, pageHeight - originMarginBottom + IDENTIFIER_WIDTH]
29353
+ }],
29354
+ strokeWidth: 1.5,
29355
+ stroke: MARGIN_STROKE_COLOR
29356
+ };
29357
+ Path.drawWith(ctx, marginIdentification), ctx.restore();
29196
29358
  const { x, y } = this._drawLiquid.translatePage(
29197
29359
  page,
29198
29360
  this.pageLayoutType,
@@ -30162,7 +30324,7 @@ const _Layer = class _Layer extends Disposable {
30162
30324
  };
30163
30325
  __name(_Layer, "Layer");
30164
30326
  let Layer = _Layer;
30165
- const _InputManager = class _InputManager extends Disposable {
30327
+ const PLUGIN_CONFIG_KEY = "engine-render.config", defaultPluginConfig = {}, _InputManager = class _InputManager extends Disposable {
30166
30328
  constructor(scene) {
30167
30329
  super();
30168
30330
  __publicField(this, "_scene");
@@ -30439,7 +30601,9 @@ const TransformerManagerTypeArray = [
30439
30601
  "__SpreadsheetTransformerResizeCB__",
30440
30602
  "__SpreadsheetTransformerResizeRB__"
30441
30603
  /* RESIZE_RB */
30442
- ], DEFAULT_TRANSFORMER_LAYER_INDEX = 2, MINI_WIDTH_LIMIT = 20, MINI_HEIGHT_LIMIT = 20, DEFAULT_CONTROL_PLUS_INDEX = 5e3, _Transformer = class _Transformer extends Disposable {
30604
+ ], DEFAULT_TRANSFORMER_LAYER_INDEX = 2, MINI_WIDTH_LIMIT = 20, MINI_HEIGHT_LIMIT = 20, DEFAULT_CONTROL_PLUS_INDEX = 5e3, SINGLE_ACTIVE_OBJECT_TYPE_MAP = /* @__PURE__ */ new Set([
30605
+ ObjectType.CHART
30606
+ ]), _Transformer = class _Transformer extends Disposable {
30443
30607
  constructor(_scene, config) {
30444
30608
  super();
30445
30609
  __publicField(this, "isCropper", !1);
@@ -31336,6 +31500,15 @@ const TransformerManagerTypeArray = [
31336
31500
  _clearControls(changeSelf = !1) {
31337
31501
  this._clearControlMap(), this._clearControl$.next(changeSelf);
31338
31502
  }
31503
+ /**
31504
+ * @description Clear the control of the object with the specified id
31505
+ * @param {string[]} ids the id of the object to be cleared
31506
+ */
31507
+ clearControlByIds(ids) {
31508
+ for (const id of ids)
31509
+ this._selectedObjectMap.delete(id);
31510
+ this.refreshControls();
31511
+ }
31339
31512
  _clearControlMap() {
31340
31513
  this._transformerControlMap.forEach((control) => {
31341
31514
  control.dispose();
@@ -31414,7 +31587,7 @@ const TransformerManagerTypeArray = [
31414
31587
  }
31415
31588
  _updateActiveObjectList(applyObject, evt) {
31416
31589
  const { isCropper } = this._getConfig(applyObject);
31417
- applyObject = this._findGroupObject(applyObject), !this._selectedObjectMap.has(applyObject.oKey) && (evt.ctrlKey || (this._selectedObjectMap.clear(), this._clearControlMap()), isCropper || this._selectedObjectMap.set(applyObject.oKey, applyObject), this._createControl(applyObject));
31590
+ applyObject = this._findGroupObject(applyObject), !this._selectedObjectMap.has(applyObject.oKey) && ((!evt.ctrlKey || SINGLE_ACTIVE_OBJECT_TYPE_MAP.has(applyObject.objectType)) && (this._selectedObjectMap.clear(), this._clearControlMap()), isCropper || this._selectedObjectMap.set(applyObject.oKey, applyObject), this._createControl(applyObject));
31418
31591
  }
31419
31592
  _findGroupObject(applyObject) {
31420
31593
  if (!applyObject.isInGroup)
@@ -32455,7 +32628,6 @@ function isDisposable(thing) {
32455
32628
  return !!thing && typeof thing.dispose == "function";
32456
32629
  }
32457
32630
  __name(isDisposable, "isDisposable");
32458
- const PLUGIN_CONFIG_KEY = "engine-render.config", defaultPluginConfig = {};
32459
32631
  var __defProp2 = Object.defineProperty, __getOwnPropDesc = Object.getOwnPropertyDescriptor, __decorateClass = /* @__PURE__ */ __name((decorators, target, key, kind) => {
32460
32632
  for (var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target, i = decorators.length - 1, decorator; i >= 0; i--)
32461
32633
  (decorator = decorators[i]) && (result = (kind ? decorator(target, key, result) : decorator(result)) || result);
@@ -32467,11 +32639,9 @@ let UniverRenderEnginePlugin = (_a9 = class extends Plugin {
32467
32639
  constructor(_config = defaultPluginConfig, _injector, _configService) {
32468
32640
  super(), this._config = _config, this._injector = _injector, this._configService = _configService;
32469
32641
  const { ...rest } = this._config;
32470
- this._configService.setConfig(PLUGIN_CONFIG_KEY, rest), this._injector.add([IRenderingEngine, { useFactory: /* @__PURE__ */ __name(() => new Engine(), "useFactory") }]), this._injector.add([
32471
- IRenderManagerService,
32472
- {
32473
- useClass: RenderManagerService
32474
- }
32642
+ this._configService.setConfig(PLUGIN_CONFIG_KEY, rest), registerDependencies(this._injector, [
32643
+ [IRenderingEngine, { useFactory: /* @__PURE__ */ __name(() => new Engine(), "useFactory") }],
32644
+ [IRenderManagerService, { useClass: RenderManagerService }]
32475
32645
  ]);
32476
32646
  }
32477
32647
  }, __name(_a9, "UniverRenderEnginePlugin"), __publicField(_a9, "pluginName", PLUGIN_NAME), _a9);
@@ -32746,6 +32916,9 @@ const MOUSE_WHEEL_SPEED_SMOOTHING_FACTOR = 3, _Viewport = class _Viewport {
32746
32916
  get _deltaViewportScrollY() {
32747
32917
  return this.viewportScrollY - this._preViewportScrollY;
32748
32918
  }
32919
+ get canvas() {
32920
+ return this._cacheCanvas;
32921
+ }
32749
32922
  enable() {
32750
32923
  this._active = !0;
32751
32924
  }
@@ -33406,6 +33579,7 @@ export {
33406
33579
  Layer,
33407
33580
  LineType,
33408
33581
  Liquid,
33582
+ MAXIMUM_COL_WIDTH,
33409
33583
  MAXIMUM_ROW_HEIGHT,
33410
33584
  MIDDLE_CELL_POS_MAGIC_NUMBER,
33411
33585
  Marker,
@@ -33463,11 +33637,10 @@ export {
33463
33637
  ThinScene,
33464
33638
  Transform,
33465
33639
  UniverPrintingContext,
33640
+ UniverRenderConfigService,
33466
33641
  UniverRenderEnginePlugin,
33467
33642
  UniverRenderingContext,
33468
33643
  UniverRenderingContext2D,
33469
- UniverRenderingContextWebGL,
33470
- UniverRenderingContextWebGPU,
33471
33644
  VERTICAL_ROTATE_ANGLE,
33472
33645
  Vector2,
33473
33646
  Viewport,