@univerjs/engine-render 1.0.0-alpha.3 → 1.0.0-alpha.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/cjs/index.js CHANGED
@@ -19192,6 +19192,29 @@ const DEFAULT_PADDING_DATA = {
19192
19192
  r: 2
19193
19193
  };
19194
19194
  const RENDER_RAW_FORMULA_KEY = "RENDER_RAW_FORMULA";
19195
+ function getShrinkToFitScale(contentWidth, availableWidth, fontSize) {
19196
+ if (contentWidth <= availableWidth || contentWidth <= 0 || availableWidth <= 0 || fontSize <= 0) return 1;
19197
+ return Math.max(1 / fontSize, availableWidth / contentWidth);
19198
+ }
19199
+ function scaleDocumentDataForShrinkToFit(documentData, scale, fallbackFontSize) {
19200
+ var _scaled$documentStyle, _defaultTextStyle$fs, _scaled$body;
19201
+ const scaled = _univerjs_core.Tools.deepClone(documentData);
19202
+ const defaultTextStyle = (_scaled$documentStyle = scaled.documentStyle.textStyle) !== null && _scaled$documentStyle !== void 0 ? _scaled$documentStyle : {};
19203
+ const defaultFontSize = (_defaultTextStyle$fs = defaultTextStyle.fs) !== null && _defaultTextStyle$fs !== void 0 ? _defaultTextStyle$fs : fallbackFontSize;
19204
+ scaled.documentStyle.textStyle = {
19205
+ ...defaultTextStyle,
19206
+ fs: defaultFontSize * scale
19207
+ };
19208
+ (_scaled$body = scaled.body) === null || _scaled$body === void 0 || (_scaled$body = _scaled$body.textRuns) === null || _scaled$body === void 0 || _scaled$body.forEach((textRun) => {
19209
+ var _textRun$ts, _textStyle$fs;
19210
+ const textStyle = (_textRun$ts = textRun.ts) !== null && _textRun$ts !== void 0 ? _textRun$ts : {};
19211
+ textRun.ts = {
19212
+ ...textStyle,
19213
+ fs: ((_textStyle$fs = textStyle.fs) !== null && _textStyle$fs !== void 0 ? _textStyle$fs : defaultFontSize) * scale
19214
+ };
19215
+ });
19216
+ return scaled;
19217
+ }
19195
19218
  function getResolvedRenderHorizontalAlign$1(horizontalAlign, cellData) {
19196
19219
  if (horizontalAlign !== _univerjs_core.HorizontalAlign.UNSPECIFIED) return horizontalAlign;
19197
19220
  if ((cellData === null || cellData === void 0 ? void 0 : cellData.t) === _univerjs_core.CellValueType.NUMBER || !_univerjs_core.Tools.isDefine(cellData === null || cellData === void 0 ? void 0 : cellData.t) && typeof (cellData === null || cellData === void 0 ? void 0 : cellData.v) === "number") return _univerjs_core.HorizontalAlign.RIGHT;
@@ -20151,6 +20174,29 @@ let SpreadsheetSkeleton = class SpreadsheetSkeleton extends _univerjs_core.Sheet
20151
20174
  (_this$_stylesCache$ba3 = this._stylesCache.backgroundPositions) === null || _this$_stylesCache$ba3 === void 0 || _this$_stylesCache$ba3.setValue(row, col, cellInfo);
20152
20175
  }
20153
20176
  }
20177
+ _applyShrinkToFit(row, col, fontCache, style) {
20178
+ var _style$pd5, _fontCache$cellData, _padding$l, _padding$r, _extension$leftOffset, _extension$rightOffse, _style$fs, _getDocsSkeletonPageS3, _fontCache$displayTex;
20179
+ if (style.stf !== _univerjs_core.BooleanNumber.TRUE) return;
20180
+ const cellInfo = this.getCellWithCoordByIndex(row, col, false);
20181
+ const startX = cellInfo.isMergedMainCell ? cellInfo.mergeInfo.startX : cellInfo.startX;
20182
+ const endX = cellInfo.isMergedMainCell ? cellInfo.mergeInfo.endX : cellInfo.endX;
20183
+ const padding = (_style$pd5 = style.pd) !== null && _style$pd5 !== void 0 ? _style$pd5 : DEFAULT_PADDING_DATA;
20184
+ const extension = (_fontCache$cellData = fontCache.cellData) === null || _fontCache$cellData === void 0 ? void 0 : _fontCache$cellData.fontRenderExtension;
20185
+ const availableWidth = endX - startX - ((_padding$l = padding.l) !== null && _padding$l !== void 0 ? _padding$l : DEFAULT_PADDING_DATA.l) - ((_padding$r = padding.r) !== null && _padding$r !== void 0 ? _padding$r : DEFAULT_PADDING_DATA.r) - ((_extension$leftOffset = extension === null || extension === void 0 ? void 0 : extension.leftOffset) !== null && _extension$leftOffset !== void 0 ? _extension$leftOffset : 0) - ((_extension$rightOffse = extension === null || extension === void 0 ? void 0 : extension.rightOffset) !== null && _extension$rightOffse !== void 0 ? _extension$rightOffse : 0);
20186
+ const fallbackFontSize = (_style$fs = style.fs) !== null && _style$fs !== void 0 ? _style$fs : _univerjs_core.DEFAULT_STYLES.fs;
20187
+ const scale = getShrinkToFitScale(fontCache.documentSkeleton ? ((_getDocsSkeletonPageS3 = getDocsSkeletonPageSize(fontCache.documentSkeleton, fontCache.vertexAngle)) !== null && _getDocsSkeletonPageS3 !== void 0 ? _getDocsSkeletonPageS3 : { width: 0 }).width : FontCache.getMeasureText((_fontCache$displayTex = fontCache.displayText) !== null && _fontCache$displayTex !== void 0 ? _fontCache$displayTex : (0, _univerjs_core.getDisplayValueFromCell)(fontCache.cellData), fontCache.fontString).width, availableWidth, fallbackFontSize);
20188
+ if (scale >= 1) return;
20189
+ fontCache.shrinkScale = scale;
20190
+ if (fontCache.documentSkeleton) {
20191
+ const documentModel = new _univerjs_core.DocumentDataModel(scaleDocumentDataForShrinkToFit(fontCache.documentSkeleton.getViewModel().getDataModel().getSnapshot(), scale, fallbackFontSize));
20192
+ const documentSkeleton = DocumentSkeleton.create(new DocumentViewModel(documentModel), this._localeService);
20193
+ documentSkeleton.calculate();
20194
+ fontCache.documentSkeleton = documentSkeleton;
20195
+ } else fontCache.fontString = getFontStyleString({
20196
+ ...style,
20197
+ fs: fallbackFontSize * scale
20198
+ }).fontCache;
20199
+ }
20154
20200
  _setFontStylesCache(row, col, cellData, style, hasMergeData = true) {
20155
20201
  var _style$tr2;
20156
20202
  if ((0, _univerjs_core.isNullCell)(cellData)) return;
@@ -20209,6 +20255,7 @@ let SpreadsheetSkeleton = class SpreadsheetSkeleton extends _univerjs_core.Sheet
20209
20255
  }
20210
20256
  const fontCacheItem = config;
20211
20257
  setRenderTextCache(fontCacheItem, cellData);
20258
+ this._applyShrinkToFit(row, col, fontCacheItem, style);
20212
20259
  this._calculateOverflowCell(row, col, fontCacheItem, hasMergeData);
20213
20260
  this._stylesCache.fontMatrix.setValue(row, col, fontCacheItem);
20214
20261
  }
@@ -21244,6 +21291,12 @@ var DocComponent = class extends RenderComponent {
21244
21291
  _defineProperty(this, "pageMarginLeft", 0);
21245
21292
  _defineProperty(this, "pageMarginTop", 0);
21246
21293
  _defineProperty(this, "pageLayoutType", 0);
21294
+ _defineProperty(this, "onTextFillImageLoaded", void 0);
21295
+ this.onTextFillImageLoaded = () => {
21296
+ var _config$onTextFillIma;
21297
+ this.makeDirty(true);
21298
+ config === null || config === void 0 || (_config$onTextFillIma = config.onTextFillImageLoaded) === null || _config$onTextFillIma === void 0 || _config$onTextFillIma.call(config);
21299
+ };
21247
21300
  this._setConfig(config);
21248
21301
  }
21249
21302
  getSkeleton() {
@@ -21772,7 +21825,6 @@ var Image$1 = class extends Shape {
21772
21825
  this._props = { ...config };
21773
21826
  if (config.image) {
21774
21827
  this._native = config.image;
21775
- this._native.crossOrigin = "anonymous";
21776
21828
  this.makeDirty(true);
21777
21829
  } else if (config.url) {
21778
21830
  this._native = document.createElement("img");
@@ -23638,6 +23690,7 @@ var FontAndBaseLine = class extends docExtension {
23638
23690
  {}
23639
23691
  );
23640
23692
  _defineProperty(this, "_textFillImageCache", /* @__PURE__ */ new Map());
23693
+ _defineProperty(this, "_textFillImageLoadListeners", /* @__PURE__ */ new Map());
23641
23694
  }
23642
23695
  draw(ctx, _parentScale, glyph, _, _more) {
23643
23696
  var _glyph$parent;
@@ -23763,10 +23816,32 @@ var FontAndBaseLine = class extends docExtension {
23763
23816
  return pattern;
23764
23817
  }
23765
23818
  _getTextFillImage(source) {
23819
+ var _this$parent;
23820
+ const onTextFillImageLoaded = (_this$parent = this.parent) === null || _this$parent === void 0 ? void 0 : _this$parent.onTextFillImageLoaded;
23766
23821
  const cached = this._textFillImageCache.get(source);
23767
- if (cached) return cached;
23822
+ if (cached) {
23823
+ if (!cached.complete && onTextFillImageLoaded) {
23824
+ var _this$_textFillImageL;
23825
+ (_this$_textFillImageL = this._textFillImageLoadListeners.get(source)) === null || _this$_textFillImageL === void 0 || _this$_textFillImageL.add(onTextFillImageLoaded);
23826
+ }
23827
+ return cached;
23828
+ }
23768
23829
  const image = new Image();
23769
- image.crossOrigin = "anonymous";
23830
+ const listeners = /* @__PURE__ */ new Set();
23831
+ if (onTextFillImageLoaded) listeners.add(onTextFillImageLoaded);
23832
+ this._textFillImageLoadListeners.set(source, listeners);
23833
+ image.onload = () => {
23834
+ image.onload = null;
23835
+ image.onerror = null;
23836
+ const loadListeners = this._textFillImageLoadListeners.get(source);
23837
+ this._textFillImageLoadListeners.delete(source);
23838
+ loadListeners === null || loadListeners === void 0 || loadListeners.forEach((listener) => listener());
23839
+ };
23840
+ image.onerror = () => {
23841
+ image.onload = null;
23842
+ image.onerror = null;
23843
+ this._textFillImageLoadListeners.delete(source);
23844
+ };
23770
23845
  image.src = source;
23771
23846
  this._textFillImageCache.set(source, image);
23772
23847
  return image.complete ? image : null;
@@ -26533,6 +26608,11 @@ var DrawingGroupObject = class extends Group {
26533
26608
  width: 0,
26534
26609
  height: 0
26535
26610
  });
26611
+ _defineProperty(this, "_outerShadow", void 0);
26612
+ }
26613
+ setOuterShadow(shadow) {
26614
+ this._outerShadow = shadow;
26615
+ this.makeDirty(true);
26536
26616
  }
26537
26617
  /**
26538
26618
  * Set the baseBound (chOff/chExt in OOXML) for this group.
@@ -26580,6 +26660,12 @@ var DrawingGroupObject = class extends Group {
26580
26660
  const centerX = realLeft + realWidth / 2;
26581
26661
  const centerY = realTop + realHeight / 2;
26582
26662
  ctx.transform(m[0], m[1], m[2], m[3], centerX, centerY);
26663
+ if (this._outerShadow) {
26664
+ ctx.shadowColor = this._outerShadow.shadowColor;
26665
+ ctx.shadowBlur = this._outerShadow.shadowBlur;
26666
+ ctx.shadowOffsetX = this._outerShadow.shadowOffsetX;
26667
+ ctx.shadowOffsetY = this._outerShadow.shadowOffsetY;
26668
+ }
26583
26669
  const objects = this.getObjectsByOrder();
26584
26670
  for (let i = 0; i < objects.length; i++) objects[i].render(ctx, bounds);
26585
26671
  ctx.restore();
@@ -27516,7 +27602,7 @@ Engine = __decorate([__decorateParam(2, ICanvasColorService)], Engine);
27516
27602
  //#endregion
27517
27603
  //#region package.json
27518
27604
  var name = "@univerjs/engine-render";
27519
- var version = "1.0.0-alpha.3";
27605
+ var version = "1.0.0-alpha.5";
27520
27606
 
27521
27607
  //#endregion
27522
27608
  //#region src/config/config.ts
@@ -28789,6 +28875,7 @@ var Transformer = class extends _univerjs_core.Disposable {
28789
28875
  _recoverySizeBoundary(selectedObjects, ancestorLeft, ancestorTop, topSceneWidth, topSceneHeight) {
28790
28876
  for (let i = 0; i < selectedObjects.length; i++) {
28791
28877
  const moveObject = selectedObjects[i];
28878
+ if (this._getConfig(moveObject).moveBoundaryEnabled === false) continue;
28792
28879
  const { left, top, width, height } = moveObject;
28793
28880
  const newTransform = {};
28794
28881
  if (left + ancestorLeft < this.zeroLeft) {
@@ -32128,6 +32215,7 @@ exports.getRotateOffsetAndFarthestHypotenuse = getRotateOffsetAndFarthestHypoten
32128
32215
  exports.getRotateOrientation = getRotateOrientation;
32129
32216
  exports.getRotatedBoundInGroup = getRotatedBoundInGroup;
32130
32217
  exports.getScale = getScale;
32218
+ exports.getShrinkToFitScale = getShrinkToFitScale;
32131
32219
  exports.getSizeForDom = getSizeForDom;
32132
32220
  exports.getSystemHighlightColor = getSystemHighlightColor;
32133
32221
  exports.getTableIdAndSliceIndex = getTableIdAndSliceIndex;
@@ -32184,6 +32272,7 @@ exports.renderTextWatermark = renderTextWatermark;
32184
32272
  exports.renderUserInfoWatermark = renderUserInfoWatermark;
32185
32273
  exports.renderWatermark = renderWatermark;
32186
32274
  exports.requestNewFrame = requestNewFrame;
32275
+ exports.scaleDocumentDataForShrinkToFit = scaleDocumentDataForShrinkToFit;
32187
32276
  exports.setDocsCustomBlockRenderViewportProvider = setDocsCustomBlockRenderViewportProvider;
32188
32277
  exports.setDocsTableRenderViewportProvider = setDocsTableRenderViewportProvider;
32189
32278
  exports.setLineType = setLineType;
package/lib/es/index.js CHANGED
@@ -19191,6 +19191,29 @@ const DEFAULT_PADDING_DATA = {
19191
19191
  r: 2
19192
19192
  };
19193
19193
  const RENDER_RAW_FORMULA_KEY = "RENDER_RAW_FORMULA";
19194
+ function getShrinkToFitScale(contentWidth, availableWidth, fontSize) {
19195
+ if (contentWidth <= availableWidth || contentWidth <= 0 || availableWidth <= 0 || fontSize <= 0) return 1;
19196
+ return Math.max(1 / fontSize, availableWidth / contentWidth);
19197
+ }
19198
+ function scaleDocumentDataForShrinkToFit(documentData, scale, fallbackFontSize) {
19199
+ var _scaled$documentStyle, _defaultTextStyle$fs, _scaled$body;
19200
+ const scaled = Tools.deepClone(documentData);
19201
+ const defaultTextStyle = (_scaled$documentStyle = scaled.documentStyle.textStyle) !== null && _scaled$documentStyle !== void 0 ? _scaled$documentStyle : {};
19202
+ const defaultFontSize = (_defaultTextStyle$fs = defaultTextStyle.fs) !== null && _defaultTextStyle$fs !== void 0 ? _defaultTextStyle$fs : fallbackFontSize;
19203
+ scaled.documentStyle.textStyle = {
19204
+ ...defaultTextStyle,
19205
+ fs: defaultFontSize * scale
19206
+ };
19207
+ (_scaled$body = scaled.body) === null || _scaled$body === void 0 || (_scaled$body = _scaled$body.textRuns) === null || _scaled$body === void 0 || _scaled$body.forEach((textRun) => {
19208
+ var _textRun$ts, _textStyle$fs;
19209
+ const textStyle = (_textRun$ts = textRun.ts) !== null && _textRun$ts !== void 0 ? _textRun$ts : {};
19210
+ textRun.ts = {
19211
+ ...textStyle,
19212
+ fs: ((_textStyle$fs = textStyle.fs) !== null && _textStyle$fs !== void 0 ? _textStyle$fs : defaultFontSize) * scale
19213
+ };
19214
+ });
19215
+ return scaled;
19216
+ }
19194
19217
  function getResolvedRenderHorizontalAlign$1(horizontalAlign, cellData) {
19195
19218
  if (horizontalAlign !== HorizontalAlign.UNSPECIFIED) return horizontalAlign;
19196
19219
  if ((cellData === null || cellData === void 0 ? void 0 : cellData.t) === CellValueType.NUMBER || !Tools.isDefine(cellData === null || cellData === void 0 ? void 0 : cellData.t) && typeof (cellData === null || cellData === void 0 ? void 0 : cellData.v) === "number") return HorizontalAlign.RIGHT;
@@ -20150,6 +20173,29 @@ let SpreadsheetSkeleton = class SpreadsheetSkeleton extends SheetSkeleton {
20150
20173
  (_this$_stylesCache$ba3 = this._stylesCache.backgroundPositions) === null || _this$_stylesCache$ba3 === void 0 || _this$_stylesCache$ba3.setValue(row, col, cellInfo);
20151
20174
  }
20152
20175
  }
20176
+ _applyShrinkToFit(row, col, fontCache, style) {
20177
+ var _style$pd5, _fontCache$cellData, _padding$l, _padding$r, _extension$leftOffset, _extension$rightOffse, _style$fs, _getDocsSkeletonPageS3, _fontCache$displayTex;
20178
+ if (style.stf !== BooleanNumber.TRUE) return;
20179
+ const cellInfo = this.getCellWithCoordByIndex(row, col, false);
20180
+ const startX = cellInfo.isMergedMainCell ? cellInfo.mergeInfo.startX : cellInfo.startX;
20181
+ const endX = cellInfo.isMergedMainCell ? cellInfo.mergeInfo.endX : cellInfo.endX;
20182
+ const padding = (_style$pd5 = style.pd) !== null && _style$pd5 !== void 0 ? _style$pd5 : DEFAULT_PADDING_DATA;
20183
+ const extension = (_fontCache$cellData = fontCache.cellData) === null || _fontCache$cellData === void 0 ? void 0 : _fontCache$cellData.fontRenderExtension;
20184
+ const availableWidth = endX - startX - ((_padding$l = padding.l) !== null && _padding$l !== void 0 ? _padding$l : DEFAULT_PADDING_DATA.l) - ((_padding$r = padding.r) !== null && _padding$r !== void 0 ? _padding$r : DEFAULT_PADDING_DATA.r) - ((_extension$leftOffset = extension === null || extension === void 0 ? void 0 : extension.leftOffset) !== null && _extension$leftOffset !== void 0 ? _extension$leftOffset : 0) - ((_extension$rightOffse = extension === null || extension === void 0 ? void 0 : extension.rightOffset) !== null && _extension$rightOffse !== void 0 ? _extension$rightOffse : 0);
20185
+ const fallbackFontSize = (_style$fs = style.fs) !== null && _style$fs !== void 0 ? _style$fs : DEFAULT_STYLES.fs;
20186
+ const scale = getShrinkToFitScale(fontCache.documentSkeleton ? ((_getDocsSkeletonPageS3 = getDocsSkeletonPageSize(fontCache.documentSkeleton, fontCache.vertexAngle)) !== null && _getDocsSkeletonPageS3 !== void 0 ? _getDocsSkeletonPageS3 : { width: 0 }).width : FontCache.getMeasureText((_fontCache$displayTex = fontCache.displayText) !== null && _fontCache$displayTex !== void 0 ? _fontCache$displayTex : getDisplayValueFromCell(fontCache.cellData), fontCache.fontString).width, availableWidth, fallbackFontSize);
20187
+ if (scale >= 1) return;
20188
+ fontCache.shrinkScale = scale;
20189
+ if (fontCache.documentSkeleton) {
20190
+ const documentModel = new DocumentDataModel(scaleDocumentDataForShrinkToFit(fontCache.documentSkeleton.getViewModel().getDataModel().getSnapshot(), scale, fallbackFontSize));
20191
+ const documentSkeleton = DocumentSkeleton.create(new DocumentViewModel(documentModel), this._localeService);
20192
+ documentSkeleton.calculate();
20193
+ fontCache.documentSkeleton = documentSkeleton;
20194
+ } else fontCache.fontString = getFontStyleString({
20195
+ ...style,
20196
+ fs: fallbackFontSize * scale
20197
+ }).fontCache;
20198
+ }
20153
20199
  _setFontStylesCache(row, col, cellData, style, hasMergeData = true) {
20154
20200
  var _style$tr2;
20155
20201
  if (isNullCell(cellData)) return;
@@ -20208,6 +20254,7 @@ let SpreadsheetSkeleton = class SpreadsheetSkeleton extends SheetSkeleton {
20208
20254
  }
20209
20255
  const fontCacheItem = config;
20210
20256
  setRenderTextCache(fontCacheItem, cellData);
20257
+ this._applyShrinkToFit(row, col, fontCacheItem, style);
20211
20258
  this._calculateOverflowCell(row, col, fontCacheItem, hasMergeData);
20212
20259
  this._stylesCache.fontMatrix.setValue(row, col, fontCacheItem);
20213
20260
  }
@@ -21243,6 +21290,12 @@ var DocComponent = class extends RenderComponent {
21243
21290
  _defineProperty(this, "pageMarginLeft", 0);
21244
21291
  _defineProperty(this, "pageMarginTop", 0);
21245
21292
  _defineProperty(this, "pageLayoutType", 0);
21293
+ _defineProperty(this, "onTextFillImageLoaded", void 0);
21294
+ this.onTextFillImageLoaded = () => {
21295
+ var _config$onTextFillIma;
21296
+ this.makeDirty(true);
21297
+ config === null || config === void 0 || (_config$onTextFillIma = config.onTextFillImageLoaded) === null || _config$onTextFillIma === void 0 || _config$onTextFillIma.call(config);
21298
+ };
21246
21299
  this._setConfig(config);
21247
21300
  }
21248
21301
  getSkeleton() {
@@ -21771,7 +21824,6 @@ var Image$1 = class extends Shape {
21771
21824
  this._props = { ...config };
21772
21825
  if (config.image) {
21773
21826
  this._native = config.image;
21774
- this._native.crossOrigin = "anonymous";
21775
21827
  this.makeDirty(true);
21776
21828
  } else if (config.url) {
21777
21829
  this._native = document.createElement("img");
@@ -23637,6 +23689,7 @@ var FontAndBaseLine = class extends docExtension {
23637
23689
  {}
23638
23690
  );
23639
23691
  _defineProperty(this, "_textFillImageCache", /* @__PURE__ */ new Map());
23692
+ _defineProperty(this, "_textFillImageLoadListeners", /* @__PURE__ */ new Map());
23640
23693
  }
23641
23694
  draw(ctx, _parentScale, glyph, _, _more) {
23642
23695
  var _glyph$parent;
@@ -23762,10 +23815,32 @@ var FontAndBaseLine = class extends docExtension {
23762
23815
  return pattern;
23763
23816
  }
23764
23817
  _getTextFillImage(source) {
23818
+ var _this$parent;
23819
+ const onTextFillImageLoaded = (_this$parent = this.parent) === null || _this$parent === void 0 ? void 0 : _this$parent.onTextFillImageLoaded;
23765
23820
  const cached = this._textFillImageCache.get(source);
23766
- if (cached) return cached;
23821
+ if (cached) {
23822
+ if (!cached.complete && onTextFillImageLoaded) {
23823
+ var _this$_textFillImageL;
23824
+ (_this$_textFillImageL = this._textFillImageLoadListeners.get(source)) === null || _this$_textFillImageL === void 0 || _this$_textFillImageL.add(onTextFillImageLoaded);
23825
+ }
23826
+ return cached;
23827
+ }
23767
23828
  const image = new Image();
23768
- image.crossOrigin = "anonymous";
23829
+ const listeners = /* @__PURE__ */ new Set();
23830
+ if (onTextFillImageLoaded) listeners.add(onTextFillImageLoaded);
23831
+ this._textFillImageLoadListeners.set(source, listeners);
23832
+ image.onload = () => {
23833
+ image.onload = null;
23834
+ image.onerror = null;
23835
+ const loadListeners = this._textFillImageLoadListeners.get(source);
23836
+ this._textFillImageLoadListeners.delete(source);
23837
+ loadListeners === null || loadListeners === void 0 || loadListeners.forEach((listener) => listener());
23838
+ };
23839
+ image.onerror = () => {
23840
+ image.onload = null;
23841
+ image.onerror = null;
23842
+ this._textFillImageLoadListeners.delete(source);
23843
+ };
23769
23844
  image.src = source;
23770
23845
  this._textFillImageCache.set(source, image);
23771
23846
  return image.complete ? image : null;
@@ -26532,6 +26607,11 @@ var DrawingGroupObject = class extends Group {
26532
26607
  width: 0,
26533
26608
  height: 0
26534
26609
  });
26610
+ _defineProperty(this, "_outerShadow", void 0);
26611
+ }
26612
+ setOuterShadow(shadow) {
26613
+ this._outerShadow = shadow;
26614
+ this.makeDirty(true);
26535
26615
  }
26536
26616
  /**
26537
26617
  * Set the baseBound (chOff/chExt in OOXML) for this group.
@@ -26579,6 +26659,12 @@ var DrawingGroupObject = class extends Group {
26579
26659
  const centerX = realLeft + realWidth / 2;
26580
26660
  const centerY = realTop + realHeight / 2;
26581
26661
  ctx.transform(m[0], m[1], m[2], m[3], centerX, centerY);
26662
+ if (this._outerShadow) {
26663
+ ctx.shadowColor = this._outerShadow.shadowColor;
26664
+ ctx.shadowBlur = this._outerShadow.shadowBlur;
26665
+ ctx.shadowOffsetX = this._outerShadow.shadowOffsetX;
26666
+ ctx.shadowOffsetY = this._outerShadow.shadowOffsetY;
26667
+ }
26582
26668
  const objects = this.getObjectsByOrder();
26583
26669
  for (let i = 0; i < objects.length; i++) objects[i].render(ctx, bounds);
26584
26670
  ctx.restore();
@@ -27515,7 +27601,7 @@ Engine = __decorate([__decorateParam(2, ICanvasColorService)], Engine);
27515
27601
  //#endregion
27516
27602
  //#region package.json
27517
27603
  var name = "@univerjs/engine-render";
27518
- var version = "1.0.0-alpha.3";
27604
+ var version = "1.0.0-alpha.5";
27519
27605
 
27520
27606
  //#endregion
27521
27607
  //#region src/config/config.ts
@@ -28788,6 +28874,7 @@ var Transformer = class extends Disposable {
28788
28874
  _recoverySizeBoundary(selectedObjects, ancestorLeft, ancestorTop, topSceneWidth, topSceneHeight) {
28789
28875
  for (let i = 0; i < selectedObjects.length; i++) {
28790
28876
  const moveObject = selectedObjects[i];
28877
+ if (this._getConfig(moveObject).moveBoundaryEnabled === false) continue;
28791
28878
  const { left, top, width, height } = moveObject;
28792
28879
  const newTransform = {};
28793
28880
  if (left + ancestorLeft < this.zeroLeft) {
@@ -31901,4 +31988,4 @@ var Viewport = class {
31901
31988
  };
31902
31989
 
31903
31990
  //#endregion
31904
- export { BASE_OBJECT_ARRAY, BG_Z_INDEX, BORDER_TYPE, BORDER_Z_INDEX, Background, BaseObject, Border, BreakType, CHECK_OBJECT_ARRAY, CIRCLE_OBJECT_ARRAY, COLOR_BLACK_RGB, CURSOR_TYPE, Canvas, CanvasColorService, CanvasRenderMode, CheckboxShape, Circle, ColumnHeaderLayout, ComponentExtension, Control, Custom, CustomObject, DEFAULT_DOCUMENT_FONTSIZE, DEFAULT_FONTFACE_PLANE, DEFAULT_FRAME_LIST_SIZE, DEFAULT_FRAME_SAMPLE_SIZE, DEFAULT_MEASURE_TEXT, DEFAULT_OFFSET_SPACING, DEFAULT_PADDING_DATA, DEFAULT_SKELETON_FOOTER, DEFAULT_SKELETON_HEADER, DOCUMENT_CONTEXT_CLIP_TYPE, DRAWING_OBJECT_LAYER_INDEX, DRAWING_OBJECT_LOWER_LAYER_INDEX, DRAWING_OBJECT_UPPER_LAYER_INDEX, DashedRect, DataStreamTreeNode, DeviceInputEventType, DeviceType, DocBackground, DocSimpleSkeleton, DocumentEditArea, DocumentSkeleton, DocumentSkeletonPageType, DocumentViewModel, Documents, DocumentsSpanAndLineExtensionRegistry, Drawing, DrawingGroupObject, DumbCanvasColorService, EXPAND_SIZE_FOR_RENDER_OVERFLOW, Engine, EventConstants, FIX_ONE_PIXEL_BLUR_OFFSET, FONT_EXTENSION_Z_INDEX, Font, FontCache, GlyphType, Group, HitCanvas, ICanvasColorService, INITIAL_MATRIX, INITIAL_Path2, IRenderManagerService, IRenderingEngine, IWatermarkTypeEnum, Image$1 as Image, IsSafari, LINK_VIEW_PORT_TYPE, Layer, LineType, Liquid, MAIN_VIEW_PORT_KEY, MAXIMUM_COL_WIDTH, MAXIMUM_ROW_HEIGHT, MEASURE_EXTENT, MEASURE_EXTENT_FOR_PARAGRAPH, MIDDLE_CELL_POS_MAGIC_NUMBER, MIN_COL_WIDTH, Marker, NORMAL_TEXT_SELECTION_PLUGIN_STYLE, ORIENTATION_TYPE, ObjectType, PATH_OBJECT_ARRAY, PRINTING_BG_Z_INDEX, PageLayoutType, Path, Path2, PerformanceMonitor, PointerInput, RECT_OBJECT_ARRAY, REGULAR_POLYGON_OBJECT_ARRAY, RENDER_CLASS_TYPE, RENDER_RAW_FORMULA_KEY, RICHTEXT_OBJECT_ARRAY, Rect, RegularPolygon, RenderComponent, RenderManagerService, RenderUnit, RichText, RollingAverage, RowHeaderLayout, SHAPE_OBJECT_ARRAY, SHAPE_TYPE, SHEET_EXTENSION_PREFIX, SHEET_EXTENSION_TYPE, SHEET_VIEWPORT_KEY, SLIDE_NAVIGATION_KEY, Scene, SceneCanvas, SceneViewer, ScrollBar, ScrollTimer, ScrollTimerType, Shape, SheetColumnHeaderExtensionRegistry, SheetComponent, SheetExtension, SheetRowHeaderExtensionRegistry, ShowGridlinesState, SkeletonType, Slide, Spreadsheet, SpreadsheetColumnHeader, SpreadsheetExtensionRegistry, SpreadsheetHeader, SpreadsheetRowHeader, SpreadsheetSkeleton, TEXT_OBJECT_ARRAY, TRANSFORM_CHANGE_OBSERVABLE_TYPE, Text, Transform, UNIVER_WATERMARK_LAYER_INDEX, UNIVER_WATERMARK_STORAGE_KEY, UniverPrintingContext, UniverRenderEnginePlugin, UniverRenderingContext, UniverRenderingContext2D, VERTICAL_ROTATE_ANGLE, Vector2, Viewport, WatermarkLayer, calculateRectRotate, cancelRequestFrame, checkStyle, cjk, clampRange, clearLineByBorderType, compareDocumentSkeletonNestedPagePathOrder, convertTextRotation, convertTransformToOffsetX, convertTransformToOffsetY, createCanvasElement, createImageElement, degToRad, documentSkeletonLineIterator, documentSkeletonTableIterator, drawDiagonalLineByBorderType, drawLineByBorderType, expandRangeIfIntersects, fixLineWidthByScale, generateRandomKey, getCellByIndexWithMergeInfo, getCellPositionByIndex, getCharSpaceApply, getColor, getCurrentScrollXY, getCurrentTypeOfRenderer, getDPI, getDevicePixelRatio, getDocsCustomBlockRenderViewport, getDocsSkeletonPageSize, getDocsTableRenderViewport, getDocumentSkeletonColumnPagePathInfo, getDocumentSkeletonNestedPageOffset, getDrawingGroupState, getFirstGrapheme, getFontStyleString, getGroupState, getLastColumn, getLastLine, getLineOffset, getLineWidth, getLineWith, getNextWheelZoomRatio, getNumberUnitValue, getOffsetRectForDom, getPageFromPath, getParagraphByGlyph, getPointerPrefix, getRenderTransformBaseOnParentBound, getRotateOffsetAndFarthestHypotenuse, getRotateOrientation, getRotatedBoundInGroup, getScale, getSizeForDom, getSystemHighlightColor, getTableIdAndSliceIndex, getTranslateInSpreadContextWithPixelRatio, getValueType, glyphIterator, hasAllLatin, hasArabic, hasBasicLatin, hasLatinExtendedA, hasLatinExtendedB, hasLatinOneSupplement, hasListGlyph, hasSpace, hasThai, hasTibetan, hasUnMergedCellInRow, inViewRanges, injectStyle, isArray, isCjkCenterAlignedPunctuation, isCjkLeftAlignedPunctuation, isCjkRightAlignedPunctuation, isDate, isEmojiGrapheme, isFirstGlyph, isFunction, isIndentByGlyph, isLastGlyph, isNumber, isObject, isPlaceholderOrSpace, isRectIntersect, isRegExp, isSameLine, isString, lineIterator, measureDocumentNoWrapTextRangeWidth, measureDocumentNoWrapTextWidth, measureDocumentUnbreakableTextWidth, mergeInfoOffset, parseDataStreamToTree, pixelToPt, precisionTo, ptToMM, ptToPixel, ptToPx, pxToInch, pxToNum, pxToPt, radToDeg, renderImageWatermark, renderTextWatermark, renderUserInfoWatermark, renderWatermark, requestNewFrame, setDocsCustomBlockRenderViewportProvider, setDocsTableRenderViewportProvider, setLineType, sheetContentViewportKeys, sheetHeaderViewportKeys, startWithEmoji, toPx, transformObjectOutOfGroup, withCurrentTypeOfRenderer };
31991
+ export { BASE_OBJECT_ARRAY, BG_Z_INDEX, BORDER_TYPE, BORDER_Z_INDEX, Background, BaseObject, Border, BreakType, CHECK_OBJECT_ARRAY, CIRCLE_OBJECT_ARRAY, COLOR_BLACK_RGB, CURSOR_TYPE, Canvas, CanvasColorService, CanvasRenderMode, CheckboxShape, Circle, ColumnHeaderLayout, ComponentExtension, Control, Custom, CustomObject, DEFAULT_DOCUMENT_FONTSIZE, DEFAULT_FONTFACE_PLANE, DEFAULT_FRAME_LIST_SIZE, DEFAULT_FRAME_SAMPLE_SIZE, DEFAULT_MEASURE_TEXT, DEFAULT_OFFSET_SPACING, DEFAULT_PADDING_DATA, DEFAULT_SKELETON_FOOTER, DEFAULT_SKELETON_HEADER, DOCUMENT_CONTEXT_CLIP_TYPE, DRAWING_OBJECT_LAYER_INDEX, DRAWING_OBJECT_LOWER_LAYER_INDEX, DRAWING_OBJECT_UPPER_LAYER_INDEX, DashedRect, DataStreamTreeNode, DeviceInputEventType, DeviceType, DocBackground, DocSimpleSkeleton, DocumentEditArea, DocumentSkeleton, DocumentSkeletonPageType, DocumentViewModel, Documents, DocumentsSpanAndLineExtensionRegistry, Drawing, DrawingGroupObject, DumbCanvasColorService, EXPAND_SIZE_FOR_RENDER_OVERFLOW, Engine, EventConstants, FIX_ONE_PIXEL_BLUR_OFFSET, FONT_EXTENSION_Z_INDEX, Font, FontCache, GlyphType, Group, HitCanvas, ICanvasColorService, INITIAL_MATRIX, INITIAL_Path2, IRenderManagerService, IRenderingEngine, IWatermarkTypeEnum, Image$1 as Image, IsSafari, LINK_VIEW_PORT_TYPE, Layer, LineType, Liquid, MAIN_VIEW_PORT_KEY, MAXIMUM_COL_WIDTH, MAXIMUM_ROW_HEIGHT, MEASURE_EXTENT, MEASURE_EXTENT_FOR_PARAGRAPH, MIDDLE_CELL_POS_MAGIC_NUMBER, MIN_COL_WIDTH, Marker, NORMAL_TEXT_SELECTION_PLUGIN_STYLE, ORIENTATION_TYPE, ObjectType, PATH_OBJECT_ARRAY, PRINTING_BG_Z_INDEX, PageLayoutType, Path, Path2, PerformanceMonitor, PointerInput, RECT_OBJECT_ARRAY, REGULAR_POLYGON_OBJECT_ARRAY, RENDER_CLASS_TYPE, RENDER_RAW_FORMULA_KEY, RICHTEXT_OBJECT_ARRAY, Rect, RegularPolygon, RenderComponent, RenderManagerService, RenderUnit, RichText, RollingAverage, RowHeaderLayout, SHAPE_OBJECT_ARRAY, SHAPE_TYPE, SHEET_EXTENSION_PREFIX, SHEET_EXTENSION_TYPE, SHEET_VIEWPORT_KEY, SLIDE_NAVIGATION_KEY, Scene, SceneCanvas, SceneViewer, ScrollBar, ScrollTimer, ScrollTimerType, Shape, SheetColumnHeaderExtensionRegistry, SheetComponent, SheetExtension, SheetRowHeaderExtensionRegistry, ShowGridlinesState, SkeletonType, Slide, Spreadsheet, SpreadsheetColumnHeader, SpreadsheetExtensionRegistry, SpreadsheetHeader, SpreadsheetRowHeader, SpreadsheetSkeleton, TEXT_OBJECT_ARRAY, TRANSFORM_CHANGE_OBSERVABLE_TYPE, Text, Transform, UNIVER_WATERMARK_LAYER_INDEX, UNIVER_WATERMARK_STORAGE_KEY, UniverPrintingContext, UniverRenderEnginePlugin, UniverRenderingContext, UniverRenderingContext2D, VERTICAL_ROTATE_ANGLE, Vector2, Viewport, WatermarkLayer, calculateRectRotate, cancelRequestFrame, checkStyle, cjk, clampRange, clearLineByBorderType, compareDocumentSkeletonNestedPagePathOrder, convertTextRotation, convertTransformToOffsetX, convertTransformToOffsetY, createCanvasElement, createImageElement, degToRad, documentSkeletonLineIterator, documentSkeletonTableIterator, drawDiagonalLineByBorderType, drawLineByBorderType, expandRangeIfIntersects, fixLineWidthByScale, generateRandomKey, getCellByIndexWithMergeInfo, getCellPositionByIndex, getCharSpaceApply, getColor, getCurrentScrollXY, getCurrentTypeOfRenderer, getDPI, getDevicePixelRatio, getDocsCustomBlockRenderViewport, getDocsSkeletonPageSize, getDocsTableRenderViewport, getDocumentSkeletonColumnPagePathInfo, getDocumentSkeletonNestedPageOffset, getDrawingGroupState, getFirstGrapheme, getFontStyleString, getGroupState, getLastColumn, getLastLine, getLineOffset, getLineWidth, getLineWith, getNextWheelZoomRatio, getNumberUnitValue, getOffsetRectForDom, getPageFromPath, getParagraphByGlyph, getPointerPrefix, getRenderTransformBaseOnParentBound, getRotateOffsetAndFarthestHypotenuse, getRotateOrientation, getRotatedBoundInGroup, getScale, getShrinkToFitScale, getSizeForDom, getSystemHighlightColor, getTableIdAndSliceIndex, getTranslateInSpreadContextWithPixelRatio, getValueType, glyphIterator, hasAllLatin, hasArabic, hasBasicLatin, hasLatinExtendedA, hasLatinExtendedB, hasLatinOneSupplement, hasListGlyph, hasSpace, hasThai, hasTibetan, hasUnMergedCellInRow, inViewRanges, injectStyle, isArray, isCjkCenterAlignedPunctuation, isCjkLeftAlignedPunctuation, isCjkRightAlignedPunctuation, isDate, isEmojiGrapheme, isFirstGlyph, isFunction, isIndentByGlyph, isLastGlyph, isNumber, isObject, isPlaceholderOrSpace, isRectIntersect, isRegExp, isSameLine, isString, lineIterator, measureDocumentNoWrapTextRangeWidth, measureDocumentNoWrapTextWidth, measureDocumentUnbreakableTextWidth, mergeInfoOffset, parseDataStreamToTree, pixelToPt, precisionTo, ptToMM, ptToPixel, ptToPx, pxToInch, pxToNum, pxToPt, radToDeg, renderImageWatermark, renderTextWatermark, renderUserInfoWatermark, renderWatermark, requestNewFrame, scaleDocumentDataForShrinkToFit, setDocsCustomBlockRenderViewportProvider, setDocsTableRenderViewportProvider, setLineType, sheetContentViewportKeys, sheetHeaderViewportKeys, startWithEmoji, toPx, transformObjectOutOfGroup, withCurrentTypeOfRenderer };
@@ -31,12 +31,15 @@ export interface IDocumentsConfig extends IPageMarginLayout {
31
31
  pageFillColor?: string;
32
32
  pageStrokeColor?: string;
33
33
  marginStrokeColor?: string;
34
+ /** Called after an image used by a text fill finishes loading. */
35
+ onTextFillImageLoaded?: () => void;
34
36
  }
35
37
  export declare abstract class DocComponent extends RenderComponent<IDocumentSkeletonGlyph | IDocumentSkeletonLine, DOCS_EXTENSION_TYPE, IBoundRectNoAngle[]> {
36
38
  private _skeleton?;
37
39
  pageMarginLeft: number;
38
40
  pageMarginTop: number;
39
41
  pageLayoutType: PageLayoutType;
42
+ readonly onTextFillImageLoaded: () => void;
40
43
  constructor(oKey: string, _skeleton?: DocumentSkeleton | undefined, config?: IDocumentsConfig);
41
44
  getSkeleton(): DocumentSkeleton | undefined;
42
45
  setSkeleton(skeleton: DocumentSkeleton): void;
@@ -33,6 +33,7 @@ export declare class FontAndBaseLine extends docExtension {
33
33
  */
34
34
  actualFontMap: Record<string, string>;
35
35
  private _textFillImageCache;
36
+ private _textFillImageLoadListeners;
36
37
  constructor();
37
38
  draw(ctx: UniverRenderingContext, _parentScale: IScale, glyph: IDocumentSkeletonGlyph, _?: IBoundRectNoAngle, _more?: IDrawInfo): void;
38
39
  private _fillTextWithTextFill;
@@ -40,6 +40,7 @@ export interface IFontCacheItem {
40
40
  displayText?: string;
41
41
  resolvedHorizontalAlign?: HorizontalAlign;
42
42
  textFitsCurrentCell?: boolean;
43
+ shrinkScale?: number;
43
44
  }
44
45
  type colorString = string;
45
46
  export interface IStylesCache {
@@ -13,11 +13,11 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import type { DocumentDataModel, ICellData, ICellDataForSheetInterceptor, ICellInfo, ICellWithCoord, IColAutoWidthInfo, IColumnRange, IGetRowColByPosOptions, IPaddingData, IRange, IRowAutoHeightInfo, IRowRange, ISize, IStyleData, ITextRotation, Nullable, Styles, Worksheet } from '@univerjs/core';
16
+ import type { ICellData, ICellDataForSheetInterceptor, ICellInfo, ICellWithCoord, IColAutoWidthInfo, IColumnRange, IDocumentData, IGetRowColByPosOptions, IPaddingData, IRange, IRowAutoHeightInfo, IRowRange, ISize, IStyleData, ITextRotation, Nullable, Styles, Worksheet } from '@univerjs/core';
17
17
  import type { IBoundRectNoAngle, IPoint, IViewportInfo } from '../../basics/vector2';
18
18
  import type { Scene } from '../../scene';
19
19
  import type { IFontCacheItem, IStylesCache } from './interfaces';
20
- import { BooleanNumber, HorizontalAlign, IConfigService, IContextService, Injector, LocaleService, ObjectMatrix, SheetSkeleton, VerticalAlign, WrapStrategy } from '@univerjs/core';
20
+ import { BooleanNumber, DocumentDataModel, HorizontalAlign, IConfigService, IContextService, Injector, LocaleService, ObjectMatrix, SheetSkeleton, VerticalAlign, WrapStrategy } from '@univerjs/core';
21
21
  import { DocumentSkeleton } from '../docs/layout/doc-skeleton';
22
22
  import { SHEET_VIEWPORT_KEY } from './interfaces';
23
23
  interface IRowColumnRange extends IRowRange, IColumnRange {
@@ -39,6 +39,8 @@ export declare const DEFAULT_PADDING_DATA: {
39
39
  r: number;
40
40
  };
41
41
  export declare const RENDER_RAW_FORMULA_KEY = "RENDER_RAW_FORMULA";
42
+ export declare function getShrinkToFitScale(contentWidth: number, availableWidth: number, fontSize: number): number;
43
+ export declare function scaleDocumentDataForShrinkToFit(documentData: IDocumentData, scale: number, fallbackFontSize: number): IDocumentData;
42
44
  export interface ICacheItem {
43
45
  bg: boolean;
44
46
  border: boolean;
@@ -253,6 +255,7 @@ export declare class SpreadsheetSkeleton extends SheetSkeleton {
253
255
  resetRangeCache(ranges: IRange[]): void;
254
256
  _setBorderStylesCache(row: number, col: number, style: Nullable<IStyleData>, options: ISetStylesCacheForOneCellOptions | undefined): void;
255
257
  _setBgStylesCache(row: number, col: number, style: Nullable<IStyleData>, options: ISetStylesCacheForOneCellOptions | undefined): void;
258
+ private _applyShrinkToFit;
256
259
  _setFontStylesCache(row: number, col: number, cellData: Nullable<ICellDataForSheetInterceptor>, style: IStyleData, hasMergeData?: boolean): void;
257
260
  /**
258
261
  * Set border background and font to this._stylesCache cell by cell.
@@ -19,6 +19,12 @@ import type { IViewportInfo, Vector2 } from './basics';
19
19
  import type { UniverRenderingContext } from './context';
20
20
  import { Transform } from './basics';
21
21
  import { Group } from './group';
22
+ export interface IDrawingGroupShadow {
23
+ shadowColor: string;
24
+ shadowBlur: number;
25
+ shadowOffsetX: number;
26
+ shadowOffsetY: number;
27
+ }
22
28
  export declare class DrawingGroupObject extends Group {
23
29
  protected _selfSizeMode: boolean;
24
30
  /**
@@ -28,6 +34,8 @@ export declare class DrawingGroupObject extends Group {
28
34
  * When rendering, positions are mapped from baseBound space to the group's current transform.
29
35
  */
30
36
  private _baseBound;
37
+ private _outerShadow?;
38
+ setOuterShadow(shadow?: IDrawingGroupShadow): void;
31
39
  /**
32
40
  * Set the baseBound (chOff/chExt in OOXML) for this group.
33
41
  * This defines the coordinate space of children within the group.
@@ -44,6 +44,7 @@ export type { IUniverEngineRenderConfig } from './config/config';
44
44
  export * from './context';
45
45
  export * from './custom';
46
46
  export { DrawingGroupObject } from './drawing-group';
47
+ export type { IDrawingGroupShadow } from './drawing-group';
47
48
  export * from './engine';
48
49
  export * from './group';
49
50
  export * from './layer';