@netless/appliance-plugin 1.1.42-beta.3 → 1.1.43-beta.0

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 (112) hide show
  1. package/READMA.zh-CN.md +23 -1
  2. package/README.md +24 -1
  3. package/dist/appliance-plugin.js +1 -1
  4. package/dist/appliance-plugin.mjs +33 -30
  5. package/dist/{bridge-8P473Gy8.js → bridge-D68E09T9.js} +1 -1
  6. package/dist/{bridge-DKyR7grt.mjs → bridge-DcVN05tP.mjs} +1 -1
  7. package/dist/bridge.js +1 -1
  8. package/dist/bridge.mjs +1 -1
  9. package/dist/collector/collector.d.ts +50 -2
  10. package/dist/collector/types.d.ts +6 -0
  11. package/dist/component/svg/manager.d.ts +1 -0
  12. package/dist/component/svg/snapshot.d.ts +4 -1
  13. package/dist/component/textEditor/manager.d.ts +3 -0
  14. package/dist/core/backGroundThread/index.d.ts +6 -1
  15. package/dist/core/cameraTask.d.ts +45 -0
  16. package/dist/core/const.d.ts +4 -0
  17. package/dist/core/enum.d.ts +5 -1
  18. package/dist/core/error.d.ts +1 -0
  19. package/dist/core/fontFace.d.ts +5 -3
  20. package/dist/core/mainEngine.d.ts +230 -31
  21. package/dist/core/mainThread/base.d.ts +23 -2
  22. package/dist/core/mainThread/canvas2DReadback.d.ts +27 -0
  23. package/dist/core/mainThread/index.d.ts +12 -1
  24. package/dist/core/mainThread/snapshotThread.d.ts +11 -2
  25. package/dist/core/mainThread/subLocalThread.d.ts +12 -6
  26. package/dist/core/mainThread/subServiceThread.d.ts +5 -3
  27. package/dist/core/msgEvent/base.d.ts +4 -1
  28. package/dist/core/msgEvent/baseForWorker.d.ts +1 -1
  29. package/dist/core/msgEvent/copyNode/forWorker.d.ts +1 -1
  30. package/dist/core/msgEvent/forWorker.d.ts +1 -1
  31. package/dist/core/msgEvent/index.d.ts +5 -3
  32. package/dist/core/msgEvent/rotateNode/forMain.d.ts +1 -0
  33. package/dist/core/msgEvent/rotateNode/forWorker.d.ts +1 -1
  34. package/dist/core/msgEvent/scaleNode/forMain.d.ts +1 -0
  35. package/dist/core/msgEvent/scaleNode/forWorker.d.ts +1 -1
  36. package/dist/core/msgEvent/setColor/forMain.d.ts +1 -0
  37. package/dist/core/msgEvent/setColor/forWorker.d.ts +1 -1
  38. package/dist/core/msgEvent/setFont/forWorker.d.ts +1 -1
  39. package/dist/core/msgEvent/setLock/forWorker.d.ts +1 -1
  40. package/dist/core/msgEvent/setPoint/forWorker.d.ts +1 -1
  41. package/dist/core/msgEvent/setShape/forWorker.d.ts +1 -1
  42. package/dist/core/msgEvent/setZIndex/forWorker.d.ts +1 -1
  43. package/dist/core/msgEvent/translateNode/forMain.d.ts +1 -0
  44. package/dist/core/msgEvent/translateNode/forWorker.d.ts +1 -1
  45. package/dist/core/renderRuntimeFallback.d.ts +2 -0
  46. package/dist/core/rendererBusinessTask.d.ts +30 -0
  47. package/dist/core/serviceRenderScheduler.d.ts +33 -0
  48. package/dist/core/tools/base.d.ts +1 -1
  49. package/dist/core/tools/bitmapEraserFastPath.d.ts +8 -0
  50. package/dist/core/tools/eraserFaces.d.ts +24 -9
  51. package/dist/core/tools/image.d.ts +1 -0
  52. package/dist/core/tools/pencilEraserBitMap.d.ts +62 -14
  53. package/dist/core/tools/text.d.ts +2 -1
  54. package/dist/core/types.d.ts +64 -1
  55. package/dist/core/utils/indexDB.d.ts +3 -3
  56. package/dist/core/vNodeManager.d.ts +7 -0
  57. package/dist/core/worker/base.d.ts +52 -7
  58. package/dist/core/worker/fullWorkerLocal.d.ts +8 -2
  59. package/dist/core/worker/fullWorkerService.d.ts +7 -3
  60. package/dist/core/worker/renderCapabilityProbe.d.ts +54 -0
  61. package/dist/core/worker/simpleWorker.d.ts +2 -2
  62. package/dist/core/worker/snapshotWork.d.ts +1 -0
  63. package/dist/core/worker/workerManager.d.ts +17 -4
  64. package/dist/displayer/floatBar/selectorGesture.d.ts +2 -0
  65. package/dist/fullWorker.js +138 -139
  66. package/dist/index-BNHPCii1.mjs +4089 -0
  67. package/dist/index-B_vZ9d3x.mjs +55912 -0
  68. package/dist/index-C2AHqjj8.js +570 -0
  69. package/dist/index-CV8YaU3F.mjs +931 -0
  70. package/dist/index-CWDWQZBs.mjs +4088 -0
  71. package/dist/index-DChI1--R.js +1 -0
  72. package/dist/index-DFo0Gmfx.js +570 -0
  73. package/dist/index-DiLPVPwQ.js +1 -0
  74. package/dist/index-GBYM7kT5.js +1 -0
  75. package/dist/index-GZUDLXJC.js +1 -0
  76. package/dist/{index-C9wx0zmg.mjs → index-K_0NX6pD.mjs} +401 -263
  77. package/dist/index-NG5kKK1W.mjs +55920 -0
  78. package/dist/plugin/applianceMultiPlugin.d.ts +18 -3
  79. package/dist/plugin/applianceSinglePlugin.d.ts +18 -4
  80. package/dist/plugin/baseApplianceManager.d.ts +138 -12
  81. package/dist/plugin/baseViewContainerManager.d.ts +40 -3
  82. package/dist/plugin/bitmapEraserOptions.d.ts +9 -0
  83. package/dist/plugin/const.d.ts +4 -0
  84. package/dist/plugin/displayerView.d.ts +7 -7
  85. package/dist/plugin/initLogAggregator.d.ts +45 -0
  86. package/dist/plugin/multi/applianceMultiManager.d.ts +1 -0
  87. package/dist/plugin/multi/containerManager.d.ts +19 -1
  88. package/dist/plugin/pluginInstanceOwner.d.ts +1 -0
  89. package/dist/plugin/renderImageBitmapRetirement.d.ts +100 -0
  90. package/dist/plugin/renderRuntimeCache.d.ts +18 -0
  91. package/dist/plugin/renderSurface.d.ts +15 -0
  92. package/dist/plugin/renderingCompatibility.d.ts +21 -5
  93. package/dist/plugin/roomLifecycle.d.ts +12 -0
  94. package/dist/plugin/selectorApi.d.ts +8 -0
  95. package/dist/plugin/single/applianceSingleManager.d.ts +4 -0
  96. package/dist/plugin/types.d.ts +11 -14
  97. package/dist/plugin/utils.d.ts +8 -0
  98. package/dist/subWorker.js +136 -137
  99. package/dist/undo/index.d.ts +12 -3
  100. package/dist/undo/timing.d.ts +9 -4
  101. package/package.json +23 -8
  102. package/dist/index-BCvU2uMB.js +0 -570
  103. package/dist/index-BXnpbc6O.mjs +0 -48995
  104. package/dist/index-BrWufZZe.js +0 -1
  105. package/dist/index-BubEu09-.js +0 -1
  106. package/dist/index-C1ph7d6H.mjs +0 -789
  107. package/dist/index-CAXJpQEp.js +0 -570
  108. package/dist/index-D0bfakdd.js +0 -1
  109. package/dist/index-DcS9JJvi.mjs +0 -3266
  110. package/dist/index-Zu5juuhI.js +0 -1
  111. package/dist/index-k0AjJn1s.mjs +0 -48987
  112. package/dist/index-vWLQ-o4q.mjs +0 -3267
@@ -22,7 +22,7 @@ export interface SubLocalThread {
22
22
  workId: string;
23
23
  }): void;
24
24
  setWorkOptions(workId: string, opt: BaseShapeOptions): void;
25
- consumeDrawAll(data: IWorkerMessage, serviceWork: SubServiceThread): void;
25
+ consumeDrawAll(data: IWorkerMessage, serviceWork: SubServiceThread): Promise<void>;
26
26
  consumeDraw(data: IWorkerMessage, serviceWork: SubServiceThread): Promise<void>;
27
27
  colloctEffectSelectWork(data: IWorkerMessage): Promise<IWorkerMessage | undefined>;
28
28
  hasSelector(): boolean;
@@ -35,7 +35,7 @@ export interface SubLocalThread {
35
35
  consumeFull(data: IWorkerMessage): Promise<void>;
36
36
  removeWork(data: IWorkerMessage): void;
37
37
  removeSelector(data: IWorkerMessage): Promise<void>;
38
- updateFullSelectWork(data: IWorkerMessage): void;
38
+ updateFullSelectWork(data: IWorkerMessage): Promise<void>;
39
39
  cursorHover(msg: IWorkerMessage): void;
40
40
  cursorBlur(): void;
41
41
  checkTextActive(data: IWorkerMessage): Promise<void>;
@@ -70,8 +70,12 @@ export declare class SubLocalMainThreadImpl implements SubLocalThread {
70
70
  private consumeCount;
71
71
  private combineDrawActiveId?;
72
72
  private readonly eraserBatchScheduler;
73
+ private disposeVNodeRevisionObserver?;
74
+ private bitmapEraserRenderQueue;
75
+ private bitmapEraserRevalidationQueued;
73
76
  constructor(opt: ISubThreadInitOption);
74
- loadImageBitMap(msg: Pick<IWorkerMessage, "toolsType" | "opt" | "workId">): Promise<HTMLImageElement | ImageBitmap | undefined>;
77
+ private scheduleActiveBitmapEraserRevalidation;
78
+ loadImageBitMap(msg: Pick<IWorkerMessage, "toolsType" | "opt" | "workId" | "requestId">): Promise<HTMLImageElement | ImageBitmap | undefined>;
75
79
  createLocalWork(data: IWorkerMessage): void;
76
80
  updateSelector(params: IUpdateSelectorPropsType & {
77
81
  callback?: ((props: {
@@ -92,7 +96,7 @@ export declare class SubLocalMainThreadImpl implements SubLocalThread {
92
96
  checkTextActive(data: IWorkerMessage): Promise<void>;
93
97
  cursorHover(msg: IWorkerMessage): void;
94
98
  cursorBlur(): void;
95
- updateFullSelectWork(data: IWorkerMessage): void;
99
+ updateFullSelectWork(data: IWorkerMessage): Promise<void>;
96
100
  removeSelector(data: IWorkerMessage): Promise<void>;
97
101
  removeWork(data: IWorkerMessage): void;
98
102
  removeNode(key: string): void;
@@ -111,8 +115,10 @@ export declare class SubLocalMainThreadImpl implements SubLocalThread {
111
115
  getWorkShape(workId: string): BaseShapeTool | undefined;
112
116
  getWorkShapes(): Map<string, BaseShapeTool>;
113
117
  consumeDraw(data: IWorkerMessage, serviceWork: SubServiceThread): Promise<void>;
114
- private drawEraserCombine;
115
- consumeDrawAll(data: IWorkerMessage, serviceWork: SubServiceThread): void;
118
+ private enqueueBitmapEraserRender;
119
+ private drawPencilEraserCombine;
120
+ private postEraserBatch;
121
+ consumeDrawAll(data: IWorkerMessage, serviceWork: SubServiceThread): Promise<void>;
116
122
  getToolsOpt(): IActiveToolsDataType | undefined;
117
123
  setToolsOpt(opt: IActiveToolsDataType): void;
118
124
  setWorkOptions(workId: string, opt: BaseShapeOptions): void;
@@ -11,6 +11,7 @@ export interface SubServiceThread {
11
11
  consumeFull(data: IWorkerMessage): void;
12
12
  removeWork(data: IWorkerMessage): void;
13
13
  runSelectWork(data: IWorkerMessage): void;
14
+ flush(): Promise<void>;
14
15
  }
15
16
  export declare class SubServiceMainThreadImpl implements SubServiceThread {
16
17
  readonly vNodes: VNodeManager;
@@ -18,11 +19,11 @@ export declare class SubServiceMainThreadImpl implements SubServiceThread {
18
19
  workShapes: Map<string, IServiceWorkItem>;
19
20
  selectorWorkShapes: Map<string, IServiceWorkItem>;
20
21
  private willRunEffectSelectorIds;
21
- private runEffectId?;
22
- private animationId?;
23
22
  private syncUnitTime;
23
+ private readonly animationScheduler;
24
+ private readonly effectScheduler;
24
25
  constructor(opt: ISubThreadInitOption);
25
- loadImageBitMap(msg: Pick<IWorkerMessage, "toolsType" | "opt" | "workId">): Promise<HTMLImageElement | ImageBitmap | undefined>;
26
+ loadImageBitMap(msg: Pick<IWorkerMessage, "toolsType" | "opt" | "workId" | "requestId">): Promise<HTMLImageElement | ImageBitmap | undefined>;
26
27
  destroy(): void;
27
28
  clearAll(): void;
28
29
  private runEffect;
@@ -35,6 +36,7 @@ export declare class SubServiceMainThreadImpl implements SubServiceThread {
35
36
  private computNextAnimationIndex;
36
37
  private animationDraw;
37
38
  private runAnimation;
39
+ flush(): Promise<void>;
38
40
  private hasDiffData;
39
41
  private activeWorkShape;
40
42
  private removeNode;
@@ -21,6 +21,9 @@ export declare abstract class BaseMsgMethod {
21
21
  collectForLocalWorker(data: [IWorkerMessage, IqueryTask][], isSync?: boolean): void;
22
22
  collectForServiceWorker(actions: BaseCollectorReducerAction[]): void;
23
23
  abstract collect(data: unknown, isSync?: boolean): void;
24
+ protected onAbort(_undoTickerId?: number): void;
25
+ abort(viewId?: string, workId?: string): boolean;
24
26
  pause(viewId?: string, scenePath?: string): Promise<number | undefined>;
25
- recover(): void;
27
+ recover(viewId?: string, scenePath?: string): void;
28
+ discardRecovery(viewId?: string, scenePath?: string): void;
26
29
  }
@@ -10,5 +10,5 @@ export declare abstract class BaseMsgMethodForWorker {
10
10
  serviceWork: ServiceWorkForFullWorker | undefined;
11
11
  threadEngine: WorkThreadEngineForFullWorker | undefined;
12
12
  registerForWorker(threadEngine: WorkThreadEngineForFullWorker): this;
13
- abstract consume(data: IWorkerMessage): boolean | undefined;
13
+ abstract consume(data: IWorkerMessage): boolean | Promise<boolean | undefined> | undefined;
14
14
  }
@@ -3,6 +3,6 @@ import { BaseMsgMethodForWorker } from "../baseForWorker";
3
3
  import { IWorkerMessage } from "../../types";
4
4
  export declare class CopyNodeMethodForWorker extends BaseMsgMethodForWorker {
5
5
  readonly emitEventType: EmitEventType;
6
- consume(data: IWorkerMessage): boolean | undefined;
6
+ consume(data: IWorkerMessage): Promise<boolean> | undefined;
7
7
  consumeForLocalWorker(data: IWorkerMessage): Promise<void>;
8
8
  }
@@ -8,5 +8,5 @@ export declare class MethodBuilderWorker {
8
8
  constructor(emitTypes: EmitEventType[]);
9
9
  build(type: EmitEventType): MsgMethodForWorker<BaseMsgMethodForWorker> | undefined;
10
10
  registerForWorker(threadEngine: WorkThreadEngineForFullWorker): this;
11
- consumeForWorker(data: IWorkerMessage): boolean;
11
+ consumeForWorker(data: IWorkerMessage): Promise<boolean>;
12
12
  }
@@ -13,8 +13,10 @@ export declare class MethodBuilderMain {
13
13
  destroy(): void;
14
14
  pause(): Promise<this>;
15
15
  finishActiveContinuousMethods(viewId: string, scenePath: string): Promise<number[]>;
16
- recover(): this;
16
+ abortActiveContinuousMethods(viewId: string, workId?: string): boolean;
17
+ recover(viewId?: string, scenePath?: string): this;
18
+ discardRecovery(viewId?: string, scenePath?: string): this;
17
19
  static emitMethod(emtType: InternalMsgEmitterType, type: EmitEventType, data: unknown): undefined;
18
- static activeListener(callback: (isActive: boolean) => void): void;
19
- static unmountActiveListener(callback: (isActive: boolean) => void): void;
20
+ static activeListener(callback: (isActive: boolean, viewId?: string) => void): void;
21
+ static unmountActiveListener(callback: (isActive: boolean, viewId?: string) => void): void;
20
22
  }
@@ -13,5 +13,6 @@ export declare class RotateNodeMethod extends BaseMsgMethod {
13
13
  protected lastEmtData?: RotateNodeEmtData;
14
14
  readonly emitEventType: EmitEventType;
15
15
  private cacheOriginRotate;
16
+ protected onAbort(): void;
16
17
  collect(data: RotateNodeEmtData, isSync?: boolean): void;
17
18
  }
@@ -3,7 +3,7 @@ import { BaseMsgMethodForWorker } from "../baseForWorker";
3
3
  import { IWorkerMessage } from "../../types";
4
4
  export declare class RotateNodeMethodForWorker extends BaseMsgMethodForWorker {
5
5
  readonly emitEventType: EmitEventType;
6
- consume(data: IWorkerMessage): boolean | undefined;
6
+ consume(data: IWorkerMessage): Promise<boolean> | undefined;
7
7
  consumeForLocalWorker(data: IWorkerMessage): Promise<void>;
8
8
  private updateSelectorCallback;
9
9
  }
@@ -19,6 +19,7 @@ export declare class ScaleNodeMethod extends BaseMsgMethod {
19
19
  readonly emitEventType: EmitEventType;
20
20
  private targetText;
21
21
  private cacheTextInfo;
22
+ protected onAbort(undoTickerId?: number): void;
22
23
  private setTextStyle;
23
24
  collect(data: ScaleNodeEmtData, isSync?: boolean): Promise<void>;
24
25
  }
@@ -3,7 +3,7 @@ import { BaseMsgMethodForWorker } from "../baseForWorker";
3
3
  import { IWorkerMessage } from "../../types";
4
4
  export declare class ScaleNodeMethodForWorker extends BaseMsgMethodForWorker {
5
5
  readonly emitEventType: EmitEventType;
6
- consume(data: IWorkerMessage): boolean | undefined;
6
+ consume(data: IWorkerMessage): Promise<boolean> | undefined;
7
7
  consumeForLocalWorker(data: IWorkerMessage): Promise<void>;
8
8
  private updateSelectorCallback;
9
9
  }
@@ -19,6 +19,7 @@ export declare class SetColorNodeMethod extends BaseMsgMethod {
19
19
  protected lastEmtData?: SetColorNodeEmtData;
20
20
  readonly emitEventType: EmitEventType;
21
21
  private undoTickerId?;
22
+ protected onAbort(undoTickerId?: number): void;
22
23
  private ensureUndoTicker;
23
24
  private setTextColor;
24
25
  collect(data: SetColorNodeEmtData, isSync?: boolean): void;
@@ -3,7 +3,7 @@ import { BaseMsgMethodForWorker } from "../baseForWorker";
3
3
  import { IWorkerMessage } from "../../types";
4
4
  export declare class SetColorNodeMethodForWorker extends BaseMsgMethodForWorker {
5
5
  readonly emitEventType: EmitEventType;
6
- consume(data: IWorkerMessage): boolean | undefined;
6
+ consume(data: IWorkerMessage): Promise<boolean> | undefined;
7
7
  consumeForLocalWorker(data: IWorkerMessage): Promise<void>;
8
8
  private updateSelectorCallback;
9
9
  }
@@ -3,7 +3,7 @@ import { BaseMsgMethodForWorker } from "../baseForWorker";
3
3
  import { IWorkerMessage } from "../../types";
4
4
  export declare class SetFontStyleMethodForWorker extends BaseMsgMethodForWorker {
5
5
  readonly emitEventType: EmitEventType;
6
- consume(data: IWorkerMessage): boolean | undefined;
6
+ consume(data: IWorkerMessage): Promise<boolean> | undefined;
7
7
  consumeForLocalWorker(data: IWorkerMessage): Promise<void>;
8
8
  private updateSelectorCallback;
9
9
  }
@@ -3,7 +3,7 @@ import { BaseMsgMethodForWorker } from "../baseForWorker";
3
3
  import { IWorkerMessage } from "../../types";
4
4
  export declare class SetLockMethodForWorker extends BaseMsgMethodForWorker {
5
5
  readonly emitEventType: EmitEventType;
6
- consume(data: IWorkerMessage): boolean | undefined;
6
+ consume(data: IWorkerMessage): Promise<boolean> | undefined;
7
7
  consumeForLocalWorker(data: IWorkerMessage): Promise<void>;
8
8
  private updateSelectorCallback;
9
9
  }
@@ -3,7 +3,7 @@ import { BaseMsgMethodForWorker } from "../baseForWorker";
3
3
  import { IWorkerMessage } from "../../types";
4
4
  export declare class SetPointMethodForWorker extends BaseMsgMethodForWorker {
5
5
  readonly emitEventType: EmitEventType;
6
- consume(data: IWorkerMessage): boolean | undefined;
6
+ consume(data: IWorkerMessage): Promise<boolean> | undefined;
7
7
  consumeForLocalWorker(data: IWorkerMessage): Promise<void>;
8
8
  private updateSelectorCallback;
9
9
  }
@@ -3,7 +3,7 @@ import { BaseMsgMethodForWorker } from "../baseForWorker";
3
3
  import { IWorkerMessage } from "../../types";
4
4
  export declare class SetShapeOptMethodForWorker extends BaseMsgMethodForWorker {
5
5
  readonly emitEventType: EmitEventType;
6
- consume(data: IWorkerMessage): boolean | undefined;
6
+ consume(data: IWorkerMessage): Promise<boolean> | undefined;
7
7
  consumeForLocalWorker(data: IWorkerMessage): Promise<void>;
8
8
  private updateSelectorCallback;
9
9
  }
@@ -3,7 +3,7 @@ import { BaseMsgMethodForWorker } from "../baseForWorker";
3
3
  import { IWorkerMessage } from "../../types";
4
4
  export declare class ZIndexNodeMethodForWorker extends BaseMsgMethodForWorker {
5
5
  readonly emitEventType: EmitEventType;
6
- consume(data: IWorkerMessage): boolean | undefined;
6
+ consume(data: IWorkerMessage): Promise<boolean> | undefined;
7
7
  consumeForLocalWorker(data: IWorkerMessage): Promise<void>;
8
8
  private updateSelectorCallback;
9
9
  }
@@ -16,5 +16,6 @@ export declare class TranslateNodeMethod extends BaseMsgMethod {
16
16
  protected lastEmtData?: TranslateNodeEmtData;
17
17
  readonly emitEventType: EmitEventType;
18
18
  private cachePosition;
19
+ protected onAbort(): void;
19
20
  collect(data: TranslateNodeEmtData, isSync?: boolean): void;
20
21
  }
@@ -3,7 +3,7 @@ import { BaseMsgMethodForWorker } from "../baseForWorker";
3
3
  import { IWorkerMessage } from "../../types";
4
4
  export declare class TranslateNodeMethodForWorker extends BaseMsgMethodForWorker {
5
5
  readonly emitEventType: EmitEventType;
6
- consume(data: IWorkerMessage): boolean | undefined;
6
+ consume(data: IWorkerMessage): Promise<boolean> | undefined;
7
7
  consumeForLocalWorker(data: IWorkerMessage): Promise<void>;
8
8
  private updateSelectorCallback;
9
9
  }
@@ -0,0 +1,2 @@
1
+ export declare const WebGLProgramUnavailableErrorCode: "WEBGL_PROGRAM_UNAVAILABLE";
2
+ export declare function isWebGLProgramUnavailableMessage(message: unknown): boolean;
@@ -0,0 +1,30 @@
1
+ export interface RendererBusinessTaskOptions {
2
+ business: string;
3
+ stage: string;
4
+ timeoutMs?: number;
5
+ }
6
+ export declare class RendererBusinessTimeoutError extends Error {
7
+ readonly code = "RENDERER_BUSINESS_TIMEOUT";
8
+ readonly business: string;
9
+ readonly stage: string;
10
+ readonly elapsedMs: number;
11
+ reported: boolean;
12
+ constructor(options: RendererBusinessTaskOptions);
13
+ }
14
+ export declare class RendererBusinessError extends Error {
15
+ readonly code = "RENDERER_BUSINESS_ERROR";
16
+ readonly business: string;
17
+ readonly stage: string;
18
+ readonly cause: unknown;
19
+ reported: boolean;
20
+ constructor(error: unknown, options: Pick<RendererBusinessTaskOptions, "business" | "stage">);
21
+ }
22
+ export type RendererBusinessTaskError = RendererBusinessTimeoutError | RendererBusinessError;
23
+ export declare function waitForRendererBusiness<T>(task: PromiseLike<T>, options: RendererBusinessTaskOptions): Promise<T>;
24
+ export declare function isRendererBusinessTimeoutError(error: unknown): error is RendererBusinessTimeoutError;
25
+ export declare function isRendererBusinessTaskError(error: unknown): error is RendererBusinessTaskError;
26
+ export declare function toRendererBusinessError(error: unknown, options: Pick<RendererBusinessTaskOptions, "business" | "stage">): RendererBusinessTaskError;
27
+ export declare function formatRendererBusinessError(error: unknown, fallback: Pick<RendererBusinessTaskOptions, "business" | "stage">, context: {
28
+ viewId: string;
29
+ renderer: string;
30
+ }): string;
@@ -0,0 +1,33 @@
1
+ export type ServiceRenderSchedule = (callback: () => void) => number;
2
+ export interface ServiceRenderSchedulerOptions {
3
+ run: () => void | Promise<void>;
4
+ schedule: ServiceRenderSchedule;
5
+ cancel: (handle: number) => void;
6
+ onError?: (error: unknown) => void;
7
+ }
8
+ export declare function flushServiceRenderBarrier(serviceWork: {
9
+ flush(): Promise<void>;
10
+ } | undefined, layers: Array<{
11
+ readonly prepareRender: PromiseLike<unknown>;
12
+ }>): Promise<void>;
13
+ /**
14
+ * Keeps the normal frame-delayed service render cadence while allowing a
15
+ * protocol barrier to immediately drain every requested frame.
16
+ */
17
+ export declare class ServiceRenderScheduler {
18
+ private readonly options;
19
+ private scheduledHandle?;
20
+ private activeTask?;
21
+ private flushTask?;
22
+ private pending;
23
+ private destroyed;
24
+ private failure?;
25
+ constructor(options: ServiceRenderSchedulerOptions);
26
+ request(immediate?: boolean): void;
27
+ flush(): Promise<void>;
28
+ destroy(): void;
29
+ private scheduleTask;
30
+ private cancelScheduledTask;
31
+ private startTask;
32
+ private flushPending;
33
+ }
@@ -100,7 +100,7 @@ export declare abstract class BaseShapeTool {
100
100
  abstract consumeAll(props: {
101
101
  data?: IWorkerMessage;
102
102
  workerEngine?: LocalWorkForFullWorker | SubLocalMainThreadImpl;
103
- }): BaseConsumeResultType;
103
+ }): BaseConsumeResultType | Promise<BaseConsumeResultType>;
104
104
  /** 消费服务端数据,返回绘制结果 */
105
105
  abstract consumeService(props: {
106
106
  isFullWork: boolean;
@@ -0,0 +1,8 @@
1
+ import type { BaseNodeMapItem, IRectType } from "../types";
2
+ export type BitmapEraserFastPathNodeKind = "vector" | "delete-on-done" | "blocked";
3
+ export declare function classifyBitmapEraserFastPathNode(node: BaseNodeMapItem): BitmapEraserFastPathNodeKind;
4
+ export declare function worldPointsToScreen(points: ReadonlyArray<{
5
+ x: number;
6
+ y: number;
7
+ }>, worldPosition: readonly [number, number], worldScaling: readonly [number, number]): Array<[number, number]>;
8
+ export declare function capsuleTrackIntersectsRect(points: ReadonlyArray<readonly [number, number]>, radius: number, rect: IRectType): boolean;
@@ -18,18 +18,25 @@ export interface EraserRuntimeFields extends EraserPersistenceFields {
18
18
  doingLines?: SerializerEraserLines;
19
19
  }
20
20
  type DoingGeometryTransform = (matrix: readonly [number, number, number, number, number, number]) => void;
21
- export declare function setOutgoingEraserGeometryDelta(opt: object, delta: {
22
- matrix: [number, number, number, number, number, number];
21
+ type EraserAffineMatrix = [number, number, number, number, number, number];
22
+ type EraserGeometryDeltaValue = {
23
+ matrix: EraserAffineMatrix;
23
24
  fromDigest: string;
24
25
  toDigest: string;
25
- }): void;
26
- export declare function getOutgoingEraserGeometryDelta(opt: object): {
27
- matrix: [number, number, number, number, number, number];
28
- fromDigest: string;
29
- toDigest: string;
30
- } | undefined;
26
+ };
27
+ export declare function setOutgoingEraserGeometryDelta(owner: object, workId: string, delta: EraserGeometryDeltaValue, gestureOwner?: object): void;
28
+ /**
29
+ * Resolve a delta only when the caller is about to publish the object update.
30
+ * Selector scale updates are absolute to the gesture baseline, while the
31
+ * receiver already contains the last published frame. Advancing here keeps
32
+ * smooth-sync and Done-only sync on the same protocol.
33
+ */
34
+ export declare function getOutgoingEraserGeometryDelta(owner: object | undefined, workId: string): EraserGeometryDeltaValue | undefined;
35
+ /** Apply an absolute gesture transform to local Doing geometry exactly once. */
36
+ export declare function applyLocalDoingGeometryTransform(owner: object, workId: string, gestureOwner: object | undefined, matrix: EraserAffineMatrix): boolean;
31
37
  export declare function registerDoingGeometryTransform(owner: object, workId: string, transform: DoingGeometryTransform, cancel?: () => void): () => void;
32
38
  export declare function applyDoingGeometryTransform(owner: object, workId: string, matrix: readonly [number, number, number, number, number, number]): void;
39
+ export declare function hasDoingGeometryTransform(owner: object, workId: string): boolean;
33
40
  export declare function cancelDoingForGeometryMismatch(owner: object, workId: string): void;
34
41
  export declare function transformEraserLines(lines: SerializerEraserLines, matrix: readonly [number, number, number, number, number, number]): void;
35
42
  export declare const DEFAULT_ERASER_FACE_SCALE = 16;
@@ -38,12 +45,20 @@ export declare function shouldDropCancelledEraseResult(cancelledTxnIds: Readonly
38
45
  export declare function normalizeEraserPersistence<T extends EraserPersistenceFields>(previous: T | undefined, incoming: T): T;
39
46
  export declare function stripEraserRuntimeFields<T extends EraserRuntimeFields>(value: T): T;
40
47
  export declare function restoreEraserPersistence<T extends EraserPersistenceFields>(target: T, snapshot: EraserPersistenceFields): T;
41
- export declare function commitEraserFaces(persistent: EraserPersistenceFields, doingLines: SerializerEraserLines): EraserPersistenceFields;
48
+ export declare function commitEraserFaces(persistent: EraserPersistenceFields, doingLines: SerializerEraserLines, prepared?: SerializedEraserFaces): EraserPersistenceFields;
49
+ export declare function accumulateEraserFaces(prepared: SerializedEraserFaces | undefined, doingLines: SerializerEraserLines): SerializedEraserFaces;
42
50
  export declare function encodeEraserFaces(faces: EraserFace[], scale?: number): SerializedEraserFaces;
43
51
  export declare function decodeEraserFaces(value: SerializedEraserFaces): EraserFace[];
44
52
  export declare function eraserLinesToFaces(lines: SerializerEraserLines, scale?: number): EraserFace[];
45
53
  export declare function unionEraserFaces(committed: EraserFace[], doing: EraserFace[], scale?: number): EraserFace[];
54
+ /**
55
+ * Freeze runtime strokes into faces before applying an object transform.
56
+ * A scalar stroke width cannot represent a non-uniformly scaled circle, while
57
+ * transformed face vertices preserve scale, rotation, translation and mirror.
58
+ */
59
+ export declare function transformPendingEraserFaces(prepared: EraserFace[] | undefined, doingLines: SerializerEraserLines, matrix: readonly [number, number, number, number, number, number]): EraserFace[];
46
60
  export declare function transformEraserFaces(faces: EraserFace[], matrix: readonly [number, number, number, number, number, number]): EraserFace[];
61
+ export declare function transformSerializedEraserFaces(value: SerializedEraserFaces, matrix: readonly [number, number, number, number, number, number]): SerializedEraserFaces;
47
62
  export declare function geometryDigest(op: number[], centerPos: number[]): string;
48
63
  export declare function isValidEraserGeometryDelta(delta: {
49
64
  matrix: readonly number[];
@@ -53,6 +53,7 @@ export declare class ImageShape extends BaseShapeTool {
53
53
  isFullWork: boolean;
54
54
  worker: WorkThreadEngineForSimpleWorker | LocalWorkForFullWorker | WorkThreadEngineForFullWorker | WorkThreadEngineForSubWorker | SubLocalMainThreadImpl | SnapshotThreadImpl | SubServiceMainThreadImpl;
55
55
  replaceId?: string;
56
+ requestId?: string;
56
57
  }): Promise<IRectType | undefined>;
57
58
  clearTmpPoints(): void;
58
59
  static getScaleType(opt: ImageOptions): EScaleType.all | EScaleType.proportional;
@@ -13,14 +13,19 @@ export interface SerializerEraserItem {
13
13
  export type SerializerEraserLines = Array<SerializerEraserItem>;
14
14
  export interface BitMapEraserOptions extends BaseShapeOptions {
15
15
  thickness: number;
16
+ /** @deprecated Bitmap Eraser now always uses the FullLayer Doing mask. */
17
+ fullLayerDoingMask?: boolean;
18
+ maxImageWidth?: number;
19
+ maxImageHeight?: number;
16
20
  removeOnDone?: boolean;
17
21
  }
22
+ type BitmapWorkerEngine = LocalWorkForFullWorker | SubLocalMainThreadImpl;
18
23
  export declare class BitMapEraserShape extends BaseShapeTool {
19
24
  readonly canRotate: boolean;
20
25
  readonly scaleType: EScaleType;
21
26
  readonly toolsType: EToolsKey;
22
27
  private static readonly eraserSizes;
23
- protected tmpPoints: Array<Point2d>;
28
+ protected tmpPoints: Point2d[];
24
29
  protected workOptions: BitMapEraserOptions;
25
30
  worldPosition: [number, number];
26
31
  worldScaling: [number, number];
@@ -28,19 +33,23 @@ export declare class BitMapEraserShape extends BaseShapeTool {
28
33
  eraserPolyline?: [number, number, number, number];
29
34
  oldRect: IRectType | undefined;
30
35
  private committedPointIndex;
36
+ private candidateWorkIds;
37
+ private doingPointBatches;
38
+ private doingLines;
31
39
  private readonly changedNodes;
32
- private readonly doingLines;
33
- private readonly doingTransformDisposers;
34
40
  private readonly deletedNodes;
35
41
  private changedRect?;
42
+ private lastSceneRevision;
43
+ private readonly pendingDeleteIds;
44
+ private readonly hiddenRenderNodes;
45
+ private fullLayerPreviewGroup?;
46
+ private disposeVNodeObserver?;
36
47
  constructor(props: BaseShapeToolProps);
37
- /** 批量合并消费本地数据,返回绘制结果 */
38
- combineConsume(props: {
39
- workerEngine?: LocalWorkForFullWorker | SubLocalMainThreadImpl;
48
+ /** Consume exactly one accepted input batch and publish one FullLayer preview. */
49
+ combineConsume(_props: {
50
+ workerEngine?: BitmapWorkerEngine;
40
51
  }): IMainMessage | undefined;
41
52
  consumeService(): undefined;
42
- private updateTempPoints;
43
- private getChangeNodes;
44
53
  consume(props: {
45
54
  data: IWorkerMessage;
46
55
  isFullWork: boolean;
@@ -54,16 +63,16 @@ export declare class BitMapEraserShape extends BaseShapeTool {
54
63
  opt: import("./utils").ShapeOptions;
55
64
  type: EPostMessageType;
56
65
  };
57
- private computEraserPointLines;
58
66
  consumeAll(props: {
59
- workerEngine?: LocalWorkForFullWorker | SubLocalMainThreadImpl;
60
- }): {
67
+ workerEngine?: BitmapWorkerEngine;
68
+ }): Promise<{
61
69
  workId: string;
62
70
  toolsType: EToolsKey;
63
71
  opt: import("./utils").ShapeOptions;
64
72
  type: EPostMessageType;
65
73
  } | {
66
74
  rect: IRectType | undefined;
75
+ eraseTxnCommitStatus: "applied";
67
76
  workId: string;
68
77
  toolsType: EToolsKey;
69
78
  opt: import("./utils").ShapeOptions;
@@ -75,12 +84,51 @@ export declare class BitMapEraserShape extends BaseShapeTool {
75
84
  ops: string;
76
85
  willUpdateNodes: Map<string, BaseNodeMapItem>;
77
86
  willDeleteNodes: Set<string>;
87
+ eraseTxnCommitStatus: "applied";
78
88
  workId: string;
79
89
  toolsType: EToolsKey;
80
90
  opt: import("./utils").ShapeOptions;
81
- };
91
+ } | {
92
+ rect: IRectType | undefined;
93
+ willUpdateNodes: Map<string, BaseNodeMapItem>;
94
+ willDeleteNodes: Set<string>;
95
+ eraseTxnRecoveryRequired: boolean;
96
+ eraseTxnCommitStatus: "failed";
97
+ workId: string;
98
+ toolsType: EToolsKey;
99
+ opt: import("./utils").ShapeOptions;
100
+ type: EPostMessageType;
101
+ }>;
82
102
  clearTmpPoints(): void;
83
- private commitDoingFaces;
84
- private confirmChangedNodeDeletions;
103
+ shouldRevalidateVNodeRevision(): boolean;
104
+ private syncWorldTransform;
105
+ private getEraserThickness;
106
+ private updateTempPoints;
85
107
  private getDeltaPoints;
108
+ private recordFinalPointBatch;
109
+ private recordDoingPointBatch;
110
+ private getDoingPointBatches;
111
+ private getDoingLines;
112
+ private getCandidateWorkIds;
113
+ private appendFullLayerPreview;
114
+ private getFullLayerPreviewGroup;
115
+ private getTrackRect;
116
+ private getScreenTrack;
117
+ private collectVectorCandidateWorkIds;
118
+ private hideDeleteCandidatesForPoints;
119
+ private collectDeleteCandidatesForDone;
120
+ private hideRenderNodesForId;
121
+ private restoreNoLongerClearablePendingDeletes;
122
+ private snapshotDoneCandidates;
123
+ private collectDoneVectorChanges;
124
+ private normalizeClippedLine;
125
+ private commitDoingFaces;
126
+ private renderChangedNodes;
127
+ private commitPendingDeletions;
128
+ private clearFullLayerPreview;
129
+ private startVNodeObservation;
130
+ private stopVNodeObservation;
131
+ private restoreFailedDoneCandidates;
132
+ private computEraserPointLines;
86
133
  }
134
+ export {};
@@ -50,13 +50,14 @@ export declare class TextShape extends BaseShapeTool {
50
50
  replaceId?: string;
51
51
  isDrawLabel?: boolean;
52
52
  boxRect?: IRectType;
53
+ isActive?: () => boolean;
53
54
  }): Promise<IRectType | undefined>;
54
55
  updataOptService(): IRectType | undefined;
55
56
  updataOptServiceAsync(updateNodeOpt: IUpdateNodeOpt, isDrawLabel?: boolean, boxRect?: IRectType): Promise<IRectType | undefined>;
56
57
  clearTmpPoints(): void;
57
58
  static getSafetySnippetRatio(layer: Group): number;
58
59
  static getSafetySnippetFontLength(fontSize: number): number;
59
- static createLabels(textOpt: TextOptions, layer: Group, groupRect: IRectType): Promise<{
60
+ static createLabels(textOpt: TextOptions, layer: Group, groupRect: IRectType, isActive?: () => boolean): Promise<{
60
61
  labels: (Group | Polyline | Sprite | Label)[];
61
62
  maxWidth: number;
62
63
  }>;