@netless/forge-whiteboard 1.3.0-beta.1 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/changelog.md CHANGED
@@ -76,7 +76,9 @@
76
76
  ### 1.2.0
77
77
 
78
78
  - 修复 Apple Pencil 手掌误触导致笔迹中断的问题
79
- - 优化曲线笔迹质量
80
- - 缩放感知的 perfect-freehand 参数,跟踪 zoom 变化
81
- - WhiteboardTool 基类增加拖拽事件节流
79
+ - 优化曲线笔迹质量与缩放场景下的书写一致性,减少缩放后笔迹表现失真
80
+ - WhiteboardTool 基类增加拖拽事件节流,降低高频拖拽带来的卡顿
81
+ - 插入图片时自动按当前视口居中并按比例适配展示
82
+ - 点文本初始化流程优化,避免首次创建时 points 重复设置
83
+ - 图片渲染与截图流程增加跨域处理和错误兜底,提升导出稳定性
82
84
  - FPS 指标改为每 60 秒上报,增加 P90 百分位
@@ -5,12 +5,15 @@ import { LiveCursor } from '../../LiveCursor';
5
5
  export declare class ImageModel extends ElementModel {
6
6
  item: paper.Raster | null;
7
7
  private imageSets;
8
+ private imageElement;
9
+ private imageLoadVersion;
8
10
  protected clearLocalPointsWhenYPointsChange: boolean;
9
11
  protected shouldUseLocalPoints: boolean;
10
12
  protected localPointsPick: number;
11
13
  private get src();
12
14
  constructor(root: Y.Map<any>, scope: paper.PaperScope, imageSets: HTMLDivElement, liveCursor: LiveCursor, isPerformanceMode: () => boolean);
13
15
  protected subDispose(): void;
16
+ private bindImageLoad;
14
17
  protected createPaperItem(): void;
15
18
  protected onVectorUpdate(): void;
16
19
  vectorKeys(): string[];
@@ -1 +1 @@
1
- {"version":3,"file":"ImageModel.d.ts","sourceRoot":"","sources":["../../../src/model/renderable/ImageModel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,qBAAa,UAAW,SAAQ,YAAY;IAEnC,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAQ;IAExC,OAAO,CAAC,SAAS,CAAiB;IAClC,SAAS,CAAC,iCAAiC,UAAQ;IACnD,SAAS,CAAC,oBAAoB,UAAQ;IACtC,SAAS,CAAC,eAAe,SAAK;IAE9B,OAAO,KAAK,GAAG,GAEd;gBAEkB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,OAAO;IASjJ,SAAS,CAAC,UAAU;IAOpB,SAAS,CAAC,eAAe,IAAI,IAAI;IAiBjC,SAAS,CAAC,cAAc,IAAI,IAAI;IAOzB,UAAU,IAAI,MAAM,EAAE;IAI7B,SAAS,CAAC,SAAS,IAAI;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE;IAO/D,SAAS,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM;IAS/B,YAAY,IAAI,YAAY;IAQnC,SAAS,CAAC,cAAc,IAAI,GAAG;IAI/B,SAAS,CAAC,eAAe,IAAI,IAAI;CAGlC"}
1
+ {"version":3,"file":"ImageModel.d.ts","sourceRoot":"","sources":["../../../src/model/renderable/ImageModel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAEzB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,qBAAa,UAAW,SAAQ,YAAY;IAEnC,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAQ;IAExC,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,YAAY,CAAiC;IACrD,OAAO,CAAC,gBAAgB,CAAK;IAC7B,SAAS,CAAC,iCAAiC,UAAQ;IACnD,SAAS,CAAC,oBAAoB,UAAQ;IACtC,SAAS,CAAC,eAAe,SAAK;IAE9B,OAAO,KAAK,GAAG,GAEd;gBAEkB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,OAAO;IASjJ,SAAS,CAAC,UAAU;IAiBpB,OAAO,CAAC,aAAa;IAarB,SAAS,CAAC,eAAe,IAAI,IAAI;IAoBjC,SAAS,CAAC,cAAc,IAAI,IAAI;IAOzB,UAAU,IAAI,MAAM,EAAE;IAI7B,SAAS,CAAC,SAAS,IAAI;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE;IAO/D,SAAS,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM;IAW/B,YAAY,IAAI,YAAY;IAQnC,SAAS,CAAC,cAAc,IAAI,GAAG;IAI/B,SAAS,CAAC,eAAe,IAAI,IAAI;CAGlC"}
@@ -28041,6 +28041,8 @@ var ImageModel = class extends ElementModel {
28041
28041
  super(root, scope, liveCursor, isPerformanceMode);
28042
28042
  _defineProperty16(this, "item", null);
28043
28043
  _defineProperty16(this, "imageSets", void 0);
28044
+ _defineProperty16(this, "imageElement", null);
28045
+ _defineProperty16(this, "imageLoadVersion", 0);
28044
28046
  _defineProperty16(this, "clearLocalPointsWhenYPointsChange", true);
28045
28047
  _defineProperty16(this, "shouldUseLocalPoints", true);
28046
28048
  _defineProperty16(this, "localPointsPick", 4);
@@ -28051,22 +28053,44 @@ var ImageModel = class extends ElementModel {
28051
28053
  this.root.set(ElementModel.KEYS.shadow, "");
28052
28054
  }
28053
28055
  subDispose() {
28056
+ this.imageLoadVersion++;
28057
+ if (this.imageElement) {
28058
+ this.imageElement.onload = null;
28059
+ this.imageElement.onerror = null;
28060
+ this.imageElement.remove();
28061
+ this.imageElement = null;
28062
+ return;
28063
+ }
28054
28064
  const img = this.imageSets.querySelector(`[id='${this.uuid}']`);
28055
28065
  if (img) {
28066
+ img.onload = null;
28067
+ img.onerror = null;
28056
28068
  img.remove();
28057
28069
  }
28058
28070
  }
28071
+ bindImageLoad(img) {
28072
+ const loadVersion = ++this.imageLoadVersion;
28073
+ img.onload = () => {
28074
+ if (this.imageLoadVersion !== loadVersion || !this.item) {
28075
+ return;
28076
+ }
28077
+ };
28078
+ img.onerror = null;
28079
+ }
28059
28080
  createPaperItem() {
28060
28081
  if (this.item) {
28061
28082
  return;
28062
28083
  }
28063
- if (!this.imageSets.querySelector(`[id='${this.uuid}']`)) {
28064
- const img = document.createElement("img");
28084
+ let img = this.imageSets.querySelector(`[id='${this.uuid}']`);
28085
+ if (!img) {
28086
+ img = document.createElement("img");
28065
28087
  img.crossOrigin = "anonymous";
28066
- img.src = this.src;
28067
28088
  img.id = this.uuid;
28068
28089
  this.imageSets.appendChild(img);
28069
28090
  }
28091
+ this.imageElement = img;
28092
+ this.bindImageLoad(img);
28093
+ img.src = this.src;
28070
28094
  this.item = new this.scope.Raster(this.uuid);
28071
28095
  const matrix = new this.scope.Matrix(this.pointsMatrix);
28072
28096
  this.item.matrix = matrix;
@@ -28089,8 +28113,10 @@ var ImageModel = class extends ElementModel {
28089
28113
  }
28090
28114
  onStyleKeyUpdate(key) {
28091
28115
  if (key === "src") {
28092
- const imgElement = this.imageSets.querySelector(`[id='${this.uuid}']`);
28116
+ const imgElement = this.imageElement ?? this.imageSets.querySelector(`[id='${this.uuid}']`);
28093
28117
  if (imgElement) {
28118
+ this.imageElement = imgElement;
28119
+ this.bindImageLoad(imgElement);
28094
28120
  imgElement.src = this.src;
28095
28121
  }
28096
28122
  }