@visactor/vrender-kits 1.1.0-alpha.21 → 1.1.0-alpha.23

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 (92) hide show
  1. package/cjs/canvas/contributions/create-canvas-module.js +1 -1
  2. package/cjs/canvas/contributions/harmony/canvas.js +5 -1
  3. package/cjs/canvas/contributions/harmony/canvas.js.map +1 -1
  4. package/cjs/canvas/contributions/modules.js +1 -1
  5. package/cjs/env/contributions/browser-contribution.js +1 -1
  6. package/cjs/env/contributions/canvas-wrap.js +1 -1
  7. package/cjs/env/contributions/feishu-contribution.d.ts +15 -8
  8. package/cjs/env/contributions/feishu-contribution.js +26 -14
  9. package/cjs/env/contributions/feishu-contribution.js.map +1 -1
  10. package/cjs/env/contributions/harmony-contribution.d.ts +26 -7
  11. package/cjs/env/contributions/harmony-contribution.js +129 -21
  12. package/cjs/env/contributions/harmony-contribution.js.map +1 -1
  13. package/cjs/env/contributions/lynx-contribution.d.ts +35 -10
  14. package/cjs/env/contributions/lynx-contribution.js +128 -31
  15. package/cjs/env/contributions/lynx-contribution.js.map +1 -1
  16. package/cjs/env/contributions/miniapp-canvas.d.ts +18 -0
  17. package/cjs/env/contributions/miniapp-canvas.js +46 -0
  18. package/cjs/env/contributions/miniapp-canvas.js.map +1 -0
  19. package/cjs/env/contributions/taro-contribution.d.ts +6 -10
  20. package/cjs/env/contributions/taro-contribution.js +17 -18
  21. package/cjs/env/contributions/taro-contribution.js.map +1 -1
  22. package/cjs/env/contributions/tt-contribution.d.ts +14 -8
  23. package/cjs/env/contributions/tt-contribution.js +26 -49
  24. package/cjs/env/contributions/tt-contribution.js.map +1 -1
  25. package/cjs/env/contributions/wx-contribution.d.ts +15 -11
  26. package/cjs/env/contributions/wx-contribution.js +30 -54
  27. package/cjs/env/contributions/wx-contribution.js.map +1 -1
  28. package/cjs/event/extension/drag.js +1 -1
  29. package/cjs/event/extension/gesture.js +1 -1
  30. package/cjs/event/extension/index.js +1 -1
  31. package/cjs/event/extension/interface.js +1 -1
  32. package/cjs/window/contributions/feishu-contribution.js +6 -1
  33. package/cjs/window/contributions/feishu-contribution.js.map +1 -1
  34. package/cjs/window/contributions/harmony-contribution.js +70 -11
  35. package/cjs/window/contributions/harmony-contribution.js.map +1 -1
  36. package/cjs/window/contributions/lynx-contribution.d.ts +1 -2
  37. package/cjs/window/contributions/lynx-contribution.js +63 -9
  38. package/cjs/window/contributions/lynx-contribution.js.map +1 -1
  39. package/cjs/window/contributions/taro-contribution.js +6 -1
  40. package/cjs/window/contributions/taro-contribution.js.map +1 -1
  41. package/cjs/window/contributions/tt-contribution.js +6 -1
  42. package/cjs/window/contributions/tt-contribution.js.map +1 -1
  43. package/cjs/window/contributions/wx-contribution.d.ts +1 -2
  44. package/cjs/window/contributions/wx-contribution.js +29 -10
  45. package/cjs/window/contributions/wx-contribution.js.map +1 -1
  46. package/dist/index.es.js +721 -213
  47. package/es/canvas/contributions/create-canvas-module.js +1 -1
  48. package/es/canvas/contributions/harmony/canvas.js +5 -1
  49. package/es/canvas/contributions/harmony/canvas.js.map +1 -1
  50. package/es/canvas/contributions/modules.js +1 -1
  51. package/es/env/contributions/browser-contribution.js +1 -1
  52. package/es/env/contributions/canvas-wrap.js +1 -1
  53. package/es/env/contributions/feishu-contribution.d.ts +15 -8
  54. package/es/env/contributions/feishu-contribution.js +27 -14
  55. package/es/env/contributions/feishu-contribution.js.map +1 -1
  56. package/es/env/contributions/harmony-contribution.d.ts +26 -7
  57. package/es/env/contributions/harmony-contribution.js +132 -22
  58. package/es/env/contributions/harmony-contribution.js.map +1 -1
  59. package/es/env/contributions/lynx-contribution.d.ts +35 -10
  60. package/es/env/contributions/lynx-contribution.js +128 -29
  61. package/es/env/contributions/lynx-contribution.js.map +1 -1
  62. package/es/env/contributions/miniapp-canvas.d.ts +18 -0
  63. package/es/env/contributions/miniapp-canvas.js +37 -0
  64. package/es/env/contributions/miniapp-canvas.js.map +1 -0
  65. package/es/env/contributions/taro-contribution.d.ts +6 -10
  66. package/es/env/contributions/taro-contribution.js +17 -17
  67. package/es/env/contributions/taro-contribution.js.map +1 -1
  68. package/es/env/contributions/tt-contribution.d.ts +14 -8
  69. package/es/env/contributions/tt-contribution.js +28 -48
  70. package/es/env/contributions/tt-contribution.js.map +1 -1
  71. package/es/env/contributions/wx-contribution.d.ts +15 -11
  72. package/es/env/contributions/wx-contribution.js +32 -53
  73. package/es/env/contributions/wx-contribution.js.map +1 -1
  74. package/es/event/extension/drag.js +1 -1
  75. package/es/event/extension/gesture.js +1 -1
  76. package/es/event/extension/index.js +1 -1
  77. package/es/event/extension/interface.js +1 -1
  78. package/es/window/contributions/feishu-contribution.js +6 -1
  79. package/es/window/contributions/feishu-contribution.js.map +1 -1
  80. package/es/window/contributions/harmony-contribution.js +70 -11
  81. package/es/window/contributions/harmony-contribution.js.map +1 -1
  82. package/es/window/contributions/lynx-contribution.d.ts +1 -2
  83. package/es/window/contributions/lynx-contribution.js +62 -10
  84. package/es/window/contributions/lynx-contribution.js.map +1 -1
  85. package/es/window/contributions/taro-contribution.js +6 -1
  86. package/es/window/contributions/taro-contribution.js.map +1 -1
  87. package/es/window/contributions/tt-contribution.js +6 -1
  88. package/es/window/contributions/tt-contribution.js.map +1 -1
  89. package/es/window/contributions/wx-contribution.d.ts +1 -2
  90. package/es/window/contributions/wx-contribution.js +28 -11
  91. package/es/window/contributions/wx-contribution.js.map +1 -1
  92. package/package.json +2 -2
@@ -16,4 +16,4 @@ function createModule(CanvasConstructor, ContextConstructor) {
16
16
  }
17
17
 
18
18
  exports.createModule = createModule;
19
- //# sourceMappingURL=create-canvas-module.js.map
19
+ //# sourceMappingURL=create-canvas-module.js.map
@@ -13,7 +13,11 @@ class HarmonyCanvas extends vrender_core_1.BaseCanvas {
13
13
  init() {
14
14
  this._context = new context_1.HarmonyContext2d(this, this._dpr);
15
15
  }
16
- resize(width, height) {}
16
+ resize(width, height) {
17
+ this.controled && (this._pixelWidth = width * this._dpr, this._pixelHeight = height * this._dpr,
18
+ this._displayWidth = width, this._displayHeight = height, this._nativeCanvas.width = this._pixelWidth,
19
+ this._nativeCanvas.height = this._pixelHeight, this._context.dpr = this._dpr);
20
+ }
17
21
  release(...params) {}
18
22
  }
19
23
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/canvas/contributions/harmony/canvas.ts"],"names":[],"mappings":";;;AAAA,yDAAoD;AAEpD,uCAA6C;AAE7C,MAAa,aAAc,SAAQ,yBAAU;IAO3C,YAAY,MAAwB;QAClC,KAAK,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;IAED,IAAI;QACF,IAAI,CAAC,QAAQ,GAAG,IAAI,0BAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,CAAC,KAAa,EAAE,MAAc;QAClC,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,MAAW;QACpB,OAAO;IACT,CAAC;;AArBH,sCAsBC;AArBQ,iBAAG,GAAY,SAAS,CAAC","file":"canvas.js","sourcesContent":["import { BaseCanvas } from '@visactor/vrender-core';\nimport type { ICanvas, CanvasConfigType, EnvType } from '@visactor/vrender-core';\nimport { HarmonyContext2d } from './context';\n\nexport class HarmonyCanvas extends BaseCanvas implements ICanvas {\n static env: EnvType = 'harmony';\n\n /**\n * 通过canvas生成一个wrap对象,初始化时不会再设置canvas的属性\n * @param params\n */\n constructor(params: CanvasConfigType) {\n super(params);\n }\n\n init() {\n this._context = new HarmonyContext2d(this, this._dpr);\n }\n\n resize(width: number, height: number): void {\n return;\n }\n\n release(...params: any): void {\n return;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/canvas/contributions/harmony/canvas.ts"],"names":[],"mappings":";;;AAAA,yDAAoD;AAEpD,uCAA6C;AAE7C,MAAa,aAAc,SAAQ,yBAAU;IAO3C,YAAY,MAAwB;QAClC,KAAK,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;IAED,IAAI;QACF,IAAI,CAAC,QAAQ,GAAG,IAAI,0BAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,CAAC,KAAa,EAAE,MAAc;QAClC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,OAAO;SACR;QACD,IAAI,CAAC,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;QACvC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;QAC7B,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;QAC5C,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;QAC9C,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;QAC9B,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,MAAW;QACpB,OAAO;IACT,CAAC;;AA/BH,sCAgCC;AA/BQ,iBAAG,GAAY,SAAS,CAAC","file":"canvas.js","sourcesContent":["import { BaseCanvas } from '@visactor/vrender-core';\nimport type { ICanvas, CanvasConfigType, EnvType } from '@visactor/vrender-core';\nimport { HarmonyContext2d } from './context';\n\nexport class HarmonyCanvas extends BaseCanvas implements ICanvas {\n static env: EnvType = 'harmony';\n\n /**\n * 通过canvas生成一个wrap对象,初始化时不会再设置canvas的属性\n * @param params\n */\n constructor(params: CanvasConfigType) {\n super(params);\n }\n\n init() {\n this._context = new HarmonyContext2d(this, this._dpr);\n }\n\n resize(width: number, height: number): void {\n if (!this.controled) {\n return;\n }\n this._pixelWidth = width * this._dpr;\n this._pixelHeight = height * this._dpr;\n this._displayWidth = width;\n this._displayHeight = height;\n this._nativeCanvas.width = this._pixelWidth;\n this._nativeCanvas.height = this._pixelHeight;\n this._context.dpr = this._dpr;\n return;\n }\n\n release(...params: any): void {\n return;\n }\n}\n"]}
@@ -45,4 +45,4 @@ exports.loadAllCavnvas = loadAllCavnvas, exports.loadBrowserCanvas = loadBrowser
45
45
  exports.loadFeishuCanvas = loadFeishuCanvas, exports.loadLynxCanvas = loadLynxCanvas,
46
46
  exports.loadNodeCanvas = loadNodeCanvas, exports.loadTaroCanvas = loadTaroCanvas,
47
47
  exports.loadTTCanvas = loadTTCanvas, exports.loadWxCanvas = loadWxCanvas;
48
- //# sourceMappingURL=modules.js.map
48
+ //# sourceMappingURL=modules.js.map
@@ -247,4 +247,4 @@ class BrowserEnvContribution extends vrender_core_1.BaseEnvContribution {
247
247
  }
248
248
 
249
249
  exports.BrowserEnvContribution = BrowserEnvContribution;
250
- //# sourceMappingURL=browser-contribution.js.map
250
+ //# sourceMappingURL=browser-contribution.js.map
@@ -79,4 +79,4 @@ class CanvasWrapEnableWH {
79
79
  }
80
80
 
81
81
  exports.CanvasWrapEnableWH = CanvasWrapEnableWH;
82
- //# sourceMappingURL=canvas-wrap.js.map
82
+ //# sourceMappingURL=canvas-wrap.js.map
@@ -1,20 +1,26 @@
1
1
  import { BaseEnvContribution } from '@visactor/vrender-core';
2
2
  import type { ICanvasLike, EnvType, ICreateCanvasParams, IEnvContribution, IGlobal, ITTCanvas } from '@visactor/vrender-core';
3
+ import { type MiniAppCanvasEnvParams } from './miniapp-canvas';
4
+ declare const tt: {
5
+ getSystemInfoSync?: () => {
6
+ pixelRatio: number;
7
+ };
8
+ createCanvasContext?: (id: string) => any;
9
+ };
10
+ type FeishuEnvParams = MiniAppCanvasEnvParams & {
11
+ tt?: typeof tt;
12
+ feishu?: typeof tt;
13
+ runtime?: typeof tt;
14
+ };
3
15
  export declare class FeishuEnvContribution extends BaseEnvContribution implements IEnvContribution {
4
16
  type: EnvType;
5
17
  supportEvent: boolean;
6
18
  canvasMap: Map<string, ITTCanvas>;
7
- freeCanvasList: ITTCanvas[];
8
- canvasIdx: number;
19
+ private feishuEnvParams;
9
20
  constructor();
10
21
  getDynamicCanvasCount(): number;
11
22
  getStaticCanvasCount(): number;
12
- configure(service: IGlobal, params: {
13
- domref: any;
14
- canvasIdLists: string[];
15
- freeCanvasIdx: number;
16
- pixelRatio?: number;
17
- }): void;
23
+ configure(service: IGlobal, params?: FeishuEnvParams): void;
18
24
  loadImage(url: string): Promise<{
19
25
  loadState: 'success' | 'fail';
20
26
  data: HTMLImageElement | ImageData | null;
@@ -40,3 +46,4 @@ export declare class FeishuEnvContribution extends BaseEnvContribution implement
40
46
  release(...params: any): void;
41
47
  mapToCanvasPoint(event: any): any;
42
48
  }
49
+ export {};
@@ -4,20 +4,26 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  }), exports.FeishuEnvContribution = void 0;
6
6
 
7
- const vrender_core_1 = require("@visactor/vrender-core"), canvas_wrap_1 = require("./canvas-wrap");
7
+ const vrender_core_1 = require("@visactor/vrender-core"), miniapp_canvas_1 = require("./miniapp-canvas"), FEISHU_CANVAS_BRIDGE_ERROR = "Feishu canvas bridge is unavailable. VRender feishu env requires envParams.canvasFactory, a Stage canvas object, or a feishu/tt runtime that exposes createCanvasContext(id).";
8
8
 
9
- function makeUpCanvas(domref, canvasIdLists, canvasMap, freeCanvasIdx, freeCanvasList, pixelRatio) {
10
- const dpr = null != pixelRatio ? pixelRatio : tt.getSystemInfoSync().pixelRatio;
11
- canvasIdLists.forEach(((id, i) => {
12
- const ctx = tt.createCanvasContext(id), canvas = new canvas_wrap_1.CanvasWrapDisableWH(ctx.canvas || {}, ctx, dpr, domref.width, domref.height, id);
13
- ctx.canvas = canvas, canvasMap.set(id, canvas), i >= freeCanvasIdx && freeCanvasList.push(canvas);
14
- }));
9
+ function getFeishuRuntime(params) {
10
+ var _a, _b, _c, _d, _e;
11
+ try {
12
+ return null !== (_c = null !== (_b = null !== (_a = null == params ? void 0 : params.feishu) && void 0 !== _a ? _a : null == params ? void 0 : params.tt) && void 0 !== _b ? _b : null == params ? void 0 : params.runtime) && void 0 !== _c ? _c : "undefined" != typeof tt ? tt : void 0;
13
+ } catch (_f) {
14
+ return null !== (_e = null !== (_d = null == params ? void 0 : params.feishu) && void 0 !== _d ? _d : null == params ? void 0 : params.tt) && void 0 !== _e ? _e : null == params ? void 0 : params.runtime;
15
+ }
16
+ }
17
+
18
+ function getFeishuPixelRatio(params, runtime = getFeishuRuntime(params)) {
19
+ var _a, _b, _c, _d;
20
+ return null !== (_d = null !== (_a = null == params ? void 0 : params.pixelRatio) && void 0 !== _a ? _a : null === (_c = null === (_b = null == runtime ? void 0 : runtime.getSystemInfoSync) || void 0 === _b ? void 0 : _b.call(runtime)) || void 0 === _c ? void 0 : _c.pixelRatio) && void 0 !== _d ? _d : 1;
15
21
  }
16
22
 
17
23
  class FeishuEnvContribution extends vrender_core_1.BaseEnvContribution {
18
24
  constructor() {
19
25
  super(), this.type = "feishu", this.supportEvent = !0, this.canvasMap = new Map,
20
- this.freeCanvasList = [], this.canvasIdx = 0, this.supportsTouchEvents = !0;
26
+ this.feishuEnvParams = {}, this.supportsTouchEvents = !0;
21
27
  try {
22
28
  this.supportsPointerEvents = !!globalThis.PointerEvent, this.supportsMouseEvents = !!globalThis.MouseEvent;
23
29
  } catch (err) {
@@ -26,13 +32,13 @@ class FeishuEnvContribution extends vrender_core_1.BaseEnvContribution {
26
32
  this.applyStyles = !0;
27
33
  }
28
34
  getDynamicCanvasCount() {
29
- return this.freeCanvasList.length;
35
+ return 0;
30
36
  }
31
37
  getStaticCanvasCount() {
32
38
  return 9999;
33
39
  }
34
- configure(service, params) {
35
- service.env === this.type && (service.setActiveEnvContribution(this), makeUpCanvas(params.domref, params.canvasIdLists, this.canvasMap, params.freeCanvasIdx, this.freeCanvasList, params.pixelRatio));
40
+ configure(service, params = {}) {
41
+ service.env === this.type && (service.setActiveEnvContribution(this), this.feishuEnvParams = params);
36
42
  }
37
43
  loadImage(url) {
38
44
  return Promise.resolve({
@@ -44,13 +50,19 @@ class FeishuEnvContribution extends vrender_core_1.BaseEnvContribution {
44
50
  return Promise.reject();
45
51
  }
46
52
  createCanvas(params) {
47
- const result = this.freeCanvasList[this.canvasIdx] || this.freeCanvasList[this.freeCanvasList.length - 1];
48
- return this.canvasIdx++, result;
53
+ var _a;
54
+ const envParams = this.feishuEnvParams, runtime = getFeishuRuntime(envParams), dpr = null !== (_a = params.dpr) && void 0 !== _a ? _a : getFeishuPixelRatio(envParams, runtime), factoryCanvas = (0,
55
+ miniapp_canvas_1.createCanvasWithFactory)(params, dpr, this.canvasMap, envParams.canvasFactory);
56
+ if (factoryCanvas) return factoryCanvas;
57
+ const options = (0, miniapp_canvas_1.getMiniAppCanvasOptions)(params, dpr, !1);
58
+ if (null == options.id || "function" != typeof (null == runtime ? void 0 : runtime.createCanvasContext)) throw new Error(FEISHU_CANVAS_BRIDGE_ERROR);
59
+ const canvas = (0, miniapp_canvas_1.wrapMiniAppContextCanvas)(runtime.createCanvasContext(options.id), options);
60
+ return this.canvasMap.set(options.id, canvas), canvas;
49
61
  }
50
62
  createOffscreenCanvas(params) {}
51
63
  releaseCanvas(canvas) {}
52
64
  getDevicePixelRatio() {
53
- return tt.getSystemInfoSync().pixelRatio;
65
+ return getFeishuPixelRatio(this.feishuEnvParams);
54
66
  }
55
67
  getRequestAnimationFrame() {
56
68
  return function(callback) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/env/contributions/feishu-contribution.ts"],"names":[],"mappings":"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","file":"feishu-contribution.js","sourcesContent":["import { BaseEnvContribution, rafBasedSto } from '@visactor/vrender-core';\n// import { loadFeishuContributions } from '../../../kits';\nimport type {\n ICanvasLike,\n EnvType,\n ICreateCanvasParams,\n IEnvContribution,\n IGlobal,\n ITTCanvas\n} from '@visactor/vrender-core';\nimport { CanvasWrapDisableWH } from './canvas-wrap';\n\ndeclare const tt: {\n getSystemInfoSync: () => { pixelRatio: number };\n createCanvasContext: (id: string) => any;\n};\n\n// 飞书小程序canvas的wrap\nfunction makeUpCanvas(\n domref: any,\n canvasIdLists: string[],\n canvasMap: Map<string, ITTCanvas>,\n freeCanvasIdx: number,\n freeCanvasList: ITTCanvas[],\n pixelRatio?: number\n) {\n const dpr = pixelRatio ?? tt.getSystemInfoSync().pixelRatio;\n\n canvasIdLists.forEach((id, i) => {\n // if (canvasMap.has(id)) {\n // return;\n // }\n const ctx = tt.createCanvasContext(id);\n\n const canvas = new CanvasWrapDisableWH(ctx.canvas || {}, ctx, dpr, domref.width, domref.height, id);\n ctx.canvas = canvas;\n canvasMap.set(id, canvas);\n if (i >= freeCanvasIdx) {\n freeCanvasList.push(canvas);\n }\n });\n}\n\nexport class FeishuEnvContribution extends BaseEnvContribution implements IEnvContribution {\n type: EnvType = 'feishu';\n supportEvent: boolean = true;\n // 所有添加进来的canvas\n canvasMap: Map<string, ITTCanvas> = new Map();\n // 所有可用的canvasList\n freeCanvasList: ITTCanvas[] = [];\n canvasIdx: number = 0;\n\n constructor() {\n super();\n this.supportsTouchEvents = true;\n try {\n this.supportsPointerEvents = !!globalThis.PointerEvent;\n this.supportsMouseEvents = !!globalThis.MouseEvent;\n } catch (err) {\n this.supportsPointerEvents = false;\n this.supportsMouseEvents = false;\n }\n this.applyStyles = true;\n }\n\n /**\n * 获取动态canvas的数量,offscreenCanvas或者framebuffer\n */\n getDynamicCanvasCount(): number {\n return this.freeCanvasList.length;\n }\n\n /**\n * 获取静态canvas的数量,纯粹canvas\n */\n getStaticCanvasCount(): number {\n return 9999;\n }\n\n // TODO:VGrammar在小程序环境会重复调用setEnv传入canvas,所以每次configure并不会释放\n // 这里等待后续和VGrammar沟通\n configure(\n service: IGlobal,\n params: { domref: any; canvasIdLists: string[]; freeCanvasIdx: number; pixelRatio?: number }\n ) {\n if (service.env === this.type) {\n service.setActiveEnvContribution(this);\n makeUpCanvas(\n params.domref,\n params.canvasIdLists,\n this.canvasMap,\n params.freeCanvasIdx,\n this.freeCanvasList,\n params.pixelRatio\n );\n\n // loadFeishuContributions();\n }\n }\n\n loadImage(url: string): Promise<{\n loadState: 'success' | 'fail';\n data: HTMLImageElement | ImageData | null;\n }> {\n return Promise.resolve({\n data: url as unknown as HTMLImageElement,\n loadState: 'success'\n });\n }\n\n loadSvg(url: string): Promise<{\n loadState: 'success' | 'fail';\n data: HTMLImageElement | ImageData | null;\n }> {\n // 飞书小组件不支持DOMParser和URL.createObjectURL,无法解析svg字符串,可以通过url使用svg资源\n return Promise.reject();\n }\n\n createCanvas(params: ICreateCanvasParams): ITTCanvas {\n const result = this.freeCanvasList[this.canvasIdx] || this.freeCanvasList[this.freeCanvasList.length - 1];\n this.canvasIdx++;\n return result;\n }\n\n createOffscreenCanvas(params: ICreateCanvasParams) {\n return;\n }\n\n releaseCanvas(canvas: ICanvasLike | string) {\n return;\n }\n\n getDevicePixelRatio(): number {\n return tt.getSystemInfoSync().pixelRatio;\n }\n\n getRequestAnimationFrame(): (callback: FrameRequestCallback) => number {\n // return requestAnimationFrame;\n\n // 飞书小组件,在云文档浏览器环境中,没有requestAnimationFrame\n // 但是在小组件工作台环境和模拟器中正常\n // 反馈飞书修改,目前先使用setTimeout模拟,进行测试,飞书修复后替换回requestAnimationFrame\n // return function (callback: FrameRequestCallback) {\n // return setTimeout(callback, 1000 / 60, true);\n // } as any;\n return function (callback: FrameRequestCallback) {\n return rafBasedSto.call(callback);\n } as any;\n }\n\n getCancelAnimationFrame(): (h: number) => void {\n return (h: number) => {\n rafBasedSto.clear(h);\n };\n }\n\n addEventListener<K extends keyof DocumentEventMap>(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions | undefined\n ): void;\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions | undefined\n ): void;\n addEventListener(type: unknown, listener: unknown, options?: unknown): void {\n return null;\n }\n\n removeEventListener<K extends keyof DocumentEventMap>(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | EventListenerOptions | undefined\n ): void;\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions | undefined\n ): void;\n removeEventListener(type: unknown, listener: unknown, options?: unknown): void {\n return null;\n }\n\n dispatchEvent(event: any): boolean {\n return null;\n }\n\n // 只能索引canvas\n getElementById(str: string): any | null {\n return this.canvasMap.get(str);\n }\n\n getRootElement(): HTMLElement | null {\n return null;\n }\n\n getDocument(): Document | null {\n return null;\n }\n\n release(...params: any): void {\n return;\n }\n\n mapToCanvasPoint(event: any) {\n if (event?.type?.startsWith('mouse')) {\n return event;\n }\n return event;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/env/contributions/feishu-contribution.ts"],"names":[],"mappings":"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","file":"feishu-contribution.js","sourcesContent":["import { BaseEnvContribution, rafBasedSto } from '@visactor/vrender-core';\n// import { loadFeishuContributions } from '../../../kits';\nimport type {\n ICanvasLike,\n EnvType,\n ICreateCanvasParams,\n IEnvContribution,\n IGlobal,\n ITTCanvas\n} from '@visactor/vrender-core';\nimport {\n createCanvasWithFactory,\n getMiniAppCanvasOptions,\n type MiniAppCanvasEnvParams,\n wrapMiniAppContextCanvas\n} from './miniapp-canvas';\n\ndeclare const tt: {\n getSystemInfoSync?: () => { pixelRatio: number };\n createCanvasContext?: (id: string) => any;\n};\n\ntype FeishuEnvParams = MiniAppCanvasEnvParams & {\n tt?: typeof tt;\n feishu?: typeof tt;\n runtime?: typeof tt;\n};\n\nconst FEISHU_CANVAS_BRIDGE_ERROR =\n 'Feishu canvas bridge is unavailable. VRender feishu env requires envParams.canvasFactory, ' +\n 'a Stage canvas object, or a feishu/tt runtime that exposes createCanvasContext(id).';\n\nfunction getFeishuRuntime(params?: FeishuEnvParams): any {\n try {\n return params?.feishu ?? params?.tt ?? params?.runtime ?? (typeof tt !== 'undefined' ? tt : undefined);\n } catch {\n return params?.feishu ?? params?.tt ?? params?.runtime;\n }\n}\n\nfunction getFeishuPixelRatio(params?: FeishuEnvParams, runtime: any = getFeishuRuntime(params)): number {\n return params?.pixelRatio ?? runtime?.getSystemInfoSync?.()?.pixelRatio ?? 1;\n}\n\nexport class FeishuEnvContribution extends BaseEnvContribution implements IEnvContribution {\n type: EnvType = 'feishu';\n supportEvent: boolean = true;\n // 所有添加进来的canvas\n canvasMap: Map<string, ITTCanvas> = new Map();\n private feishuEnvParams: FeishuEnvParams = {};\n\n constructor() {\n super();\n this.supportsTouchEvents = true;\n try {\n this.supportsPointerEvents = !!globalThis.PointerEvent;\n this.supportsMouseEvents = !!globalThis.MouseEvent;\n } catch (err) {\n this.supportsPointerEvents = false;\n this.supportsMouseEvents = false;\n }\n this.applyStyles = true;\n }\n\n /**\n * 获取动态canvas的数量,offscreenCanvas或者framebuffer\n */\n getDynamicCanvasCount(): number {\n return 0;\n }\n\n /**\n * 获取静态canvas的数量,纯粹canvas\n */\n getStaticCanvasCount(): number {\n return 9999;\n }\n\n configure(service: IGlobal, params: FeishuEnvParams = {}) {\n if (service.env === this.type) {\n service.setActiveEnvContribution(this);\n this.feishuEnvParams = params;\n\n // loadFeishuContributions();\n }\n }\n\n loadImage(url: string): Promise<{\n loadState: 'success' | 'fail';\n data: HTMLImageElement | ImageData | null;\n }> {\n return Promise.resolve({\n data: url as unknown as HTMLImageElement,\n loadState: 'success'\n });\n }\n\n loadSvg(url: string): Promise<{\n loadState: 'success' | 'fail';\n data: HTMLImageElement | ImageData | null;\n }> {\n // 飞书小组件不支持DOMParser和URL.createObjectURL,无法解析svg字符串,可以通过url使用svg资源\n return Promise.reject();\n }\n\n createCanvas(params: ICreateCanvasParams): ITTCanvas {\n const envParams = this.feishuEnvParams;\n const runtime = getFeishuRuntime(envParams);\n const dpr = params.dpr ?? getFeishuPixelRatio(envParams, runtime);\n const factoryCanvas = createCanvasWithFactory(params, dpr, this.canvasMap, envParams.canvasFactory);\n if (factoryCanvas) {\n return factoryCanvas;\n }\n\n const options = getMiniAppCanvasOptions(params, dpr, false);\n if (options.id == null || typeof runtime?.createCanvasContext !== 'function') {\n throw new Error(FEISHU_CANVAS_BRIDGE_ERROR);\n }\n\n const canvas = wrapMiniAppContextCanvas(runtime.createCanvasContext(options.id), options);\n this.canvasMap.set(options.id, canvas);\n return canvas;\n }\n\n createOffscreenCanvas(params: ICreateCanvasParams) {\n return;\n }\n\n releaseCanvas(canvas: ICanvasLike | string) {\n return;\n }\n\n getDevicePixelRatio(): number {\n return getFeishuPixelRatio(this.feishuEnvParams);\n }\n\n getRequestAnimationFrame(): (callback: FrameRequestCallback) => number {\n // return requestAnimationFrame;\n\n // 飞书小组件,在云文档浏览器环境中,没有requestAnimationFrame\n // 但是在小组件工作台环境和模拟器中正常\n // 反馈飞书修改,目前先使用setTimeout模拟,进行测试,飞书修复后替换回requestAnimationFrame\n // return function (callback: FrameRequestCallback) {\n // return setTimeout(callback, 1000 / 60, true);\n // } as any;\n return function (callback: FrameRequestCallback) {\n return rafBasedSto.call(callback);\n } as any;\n }\n\n getCancelAnimationFrame(): (h: number) => void {\n return (h: number) => {\n rafBasedSto.clear(h);\n };\n }\n\n addEventListener<K extends keyof DocumentEventMap>(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions | undefined\n ): void;\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions | undefined\n ): void;\n addEventListener(type: unknown, listener: unknown, options?: unknown): void {\n return null;\n }\n\n removeEventListener<K extends keyof DocumentEventMap>(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | EventListenerOptions | undefined\n ): void;\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions | undefined\n ): void;\n removeEventListener(type: unknown, listener: unknown, options?: unknown): void {\n return null;\n }\n\n dispatchEvent(event: any): boolean {\n return null;\n }\n\n // 只能索引canvas\n getElementById(str: string): any | null {\n return this.canvasMap.get(str);\n }\n\n getRootElement(): HTMLElement | null {\n return null;\n }\n\n getDocument(): Document | null {\n return null;\n }\n\n release(...params: any): void {\n return;\n }\n\n mapToCanvasPoint(event: any) {\n if (event?.type?.startsWith('mouse')) {\n return event;\n }\n return event;\n }\n}\n"]}
@@ -1,17 +1,35 @@
1
1
  import { BaseEnvContribution, RafBasedSTO } from '@visactor/vrender-core';
2
2
  import type { ICanvasLike, EnvType, ICreateCanvasParams, IEnvContribution, IGlobal, ILynxCanvas } from '@visactor/vrender-core';
3
+ type HarmonyCanvasFactoryOptions = {
4
+ id: string;
5
+ width: number;
6
+ height: number;
7
+ dpr: number;
8
+ offscreen: boolean;
9
+ };
10
+ type HarmonyCanvasFactory = (options: HarmonyCanvasFactoryOptions) => any;
11
+ type HarmonyRuntime = Partial<{
12
+ createCanvas: (options: HarmonyCanvasFactoryOptions) => any;
13
+ createOffscreenCanvas: (options: HarmonyCanvasFactoryOptions) => any;
14
+ createImage: (src: string) => any;
15
+ }>;
16
+ type HarmonyEnvParams = {
17
+ pixelRatio?: number;
18
+ harmony?: HarmonyRuntime;
19
+ runtime?: HarmonyRuntime;
20
+ canvasFactory?: HarmonyCanvasFactory;
21
+ };
3
22
  export declare class HarmonyEnvContribution extends BaseEnvContribution implements IEnvContribution {
4
23
  type: EnvType;
5
24
  supportEvent: boolean;
6
25
  rafSTO: RafBasedSTO;
26
+ canvasMap: Map<string, ILynxCanvas>;
27
+ freeCanvasList: ILynxCanvas[];
28
+ canvasIdx: number;
29
+ private harmonyRuntime?;
30
+ private harmonyEnvParams?;
7
31
  constructor();
8
- configure(service: IGlobal, params: {
9
- domref: any;
10
- canvasIdLists: string[];
11
- freeCanvasIdx: number;
12
- offscreen?: boolean;
13
- pixelRatio?: number;
14
- }): void;
32
+ configure(service: IGlobal, params?: HarmonyEnvParams): void;
15
33
  getDynamicCanvasCount(): number;
16
34
  getStaticCanvasCount(): number;
17
35
  loadImage(url: string): Promise<{
@@ -39,3 +57,4 @@ export declare class HarmonyEnvContribution extends BaseEnvContribution implemen
39
57
  getDocument(): Document | null;
40
58
  release(...params: any): void;
41
59
  }
60
+ export {};
@@ -4,26 +4,99 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
5
  }), exports.HarmonyEnvContribution = void 0;
6
6
 
7
- const vrender_core_1 = require("@visactor/vrender-core"), canvas_wrap_1 = require("./canvas-wrap");
7
+ const vrender_core_1 = require("@visactor/vrender-core"), canvas_wrap_1 = require("./canvas-wrap"), HARMONY_CANVAS_BRIDGE_ERROR = "Harmony canvas bridge is unavailable. VRender Harmony env requires envParams.canvasFactory or a Harmony runtime that exposes a global createCanvas/createOffscreenCanvas capability.", HARMONY_CANVAS_SIZE_ERROR = "Harmony canvas size is unavailable. Pass stage width/height when creating a Harmony stage canvas.";
8
8
 
9
- function createCanvas(width, height, id) {
10
- const _c = new OffscreenCanvas(width, height), context = _c.getContext("2d"), nativeCanvas = {
9
+ function isValidCoordinate(value) {
10
+ return "number" == typeof value && Number.isFinite(value);
11
+ }
12
+
13
+ function pickCoordinate(...values) {
14
+ for (let i = 0; i < values.length; i++) if (isValidCoordinate(values[i])) return values[i];
15
+ }
16
+
17
+ function getPrimaryTouch(event) {
18
+ var _a, _b, _c;
19
+ return null !== (_b = null === (_a = null == event ? void 0 : event.changedTouches) || void 0 === _a ? void 0 : _a[0]) && void 0 !== _b ? _b : null === (_c = null == event ? void 0 : event.touches) || void 0 === _c ? void 0 : _c[0];
20
+ }
21
+
22
+ function getHarmonyEventPoint(event) {
23
+ const touch = getPrimaryTouch(event), x = pickCoordinate(null == event ? void 0 : event.x, null == event ? void 0 : event.offsetX, null == event ? void 0 : event.clientX, null == event ? void 0 : event.pageX, null == touch ? void 0 : touch.x, null == touch ? void 0 : touch.offsetX, null == touch ? void 0 : touch.clientX, null == touch ? void 0 : touch.pageX), y = pickCoordinate(null == event ? void 0 : event.y, null == event ? void 0 : event.offsetY, null == event ? void 0 : event.clientY, null == event ? void 0 : event.pageY, null == touch ? void 0 : touch.y, null == touch ? void 0 : touch.offsetY, null == touch ? void 0 : touch.clientY, null == touch ? void 0 : touch.pageY);
24
+ return null == x || null == y ? null : {
25
+ x: x,
26
+ y: y
27
+ };
28
+ }
29
+
30
+ function getHarmonyRuntime(params) {
31
+ var _a;
32
+ return null !== (_a = null == params ? void 0 : params.harmony) && void 0 !== _a ? _a : null == params ? void 0 : params.runtime;
33
+ }
34
+
35
+ function getHarmonyPixelRatio(params) {
36
+ var _a;
37
+ return null !== (_a = null == params ? void 0 : params.pixelRatio) && void 0 !== _a ? _a : 1;
38
+ }
39
+
40
+ function getCanvasSize(width, height) {
41
+ if (!isValidCoordinate(width) || !isValidCoordinate(height)) throw new Error(HARMONY_CANVAS_SIZE_ERROR);
42
+ return {
43
+ width: width,
44
+ height: height
45
+ };
46
+ }
47
+
48
+ function getGlobalOffscreenCanvasCtor() {
49
+ try {
50
+ return "undefined" != typeof OffscreenCanvas ? OffscreenCanvas : void 0;
51
+ } catch (err) {
52
+ return;
53
+ }
54
+ }
55
+
56
+ function createFallbackOffscreenCanvas(width, height) {
57
+ const OffscreenCanvasCtor = getGlobalOffscreenCanvasCtor();
58
+ return "function" != typeof OffscreenCanvasCtor ? null : new OffscreenCanvasCtor(width, height);
59
+ }
60
+
61
+ function wrapHarmonyNativeCanvas(nativeCanvas, id, width, height, dpr) {
62
+ var _a, _b, _c;
63
+ nativeCanvas.width = width * dpr, nativeCanvas.height = height * dpr;
64
+ const context = null !== (_b = null === (_a = nativeCanvas.getContext) || void 0 === _a ? void 0 : _a.call(nativeCanvas, "2d")) && void 0 !== _b ? _b : null === (_c = nativeCanvas.getContext) || void 0 === _c ? void 0 : _c.call(nativeCanvas);
65
+ if (!context) throw new Error(HARMONY_CANVAS_BRIDGE_ERROR);
66
+ return "function" != typeof nativeCanvas.getBoundingClientRect && (nativeCanvas.getBoundingClientRect = () => ({
67
+ width: width,
68
+ height: height
69
+ })), new canvas_wrap_1.CanvasWrapEnableWH(nativeCanvas, context, dpr, width, height, id);
70
+ }
71
+
72
+ function createHarmonyNativeCanvas(id, width, height, dpr, offscreen, params, runtime) {
73
+ const options = {
74
+ id: id,
11
75
  width: width,
12
76
  height: height,
13
- context: context,
14
- _c: _c,
15
- getBoundingClientRect: () => ({
16
- width: width,
17
- height: height
18
- }),
19
- getContext: () => context
77
+ dpr: dpr,
78
+ offscreen: offscreen
20
79
  };
21
- return new canvas_wrap_1.CanvasWrapDisableWH(nativeCanvas, context, 1, width, height, id);
80
+ if (params.canvasFactory) return params.canvasFactory(options);
81
+ if (offscreen && "function" == typeof (null == runtime ? void 0 : runtime.createOffscreenCanvas)) {
82
+ const canvas = runtime.createOffscreenCanvas(options);
83
+ if (canvas) return canvas;
84
+ }
85
+ if (!offscreen && "function" == typeof (null == runtime ? void 0 : runtime.createCanvas)) {
86
+ const canvas = runtime.createCanvas(options);
87
+ if (canvas) return canvas;
88
+ }
89
+ if (offscreen) {
90
+ const canvas = createFallbackOffscreenCanvas(width * dpr, height * dpr);
91
+ if (canvas) return canvas;
92
+ }
93
+ throw new Error(HARMONY_CANVAS_BRIDGE_ERROR);
22
94
  }
23
95
 
24
96
  class HarmonyEnvContribution extends vrender_core_1.BaseEnvContribution {
25
97
  constructor() {
26
- super(), this.type = "harmony", this.supportEvent = !0, this.supportsTouchEvents = !0;
98
+ super(), this.type = "harmony", this.supportEvent = !0, this.canvasMap = new Map,
99
+ this.freeCanvasList = [], this.canvasIdx = 0, this.supportsTouchEvents = !0;
27
100
  try {
28
101
  this.supportsPointerEvents = !!globalThis.PointerEvent, this.supportsMouseEvents = !!globalThis.MouseEvent;
29
102
  } catch (err) {
@@ -31,8 +104,9 @@ class HarmonyEnvContribution extends vrender_core_1.BaseEnvContribution {
31
104
  }
32
105
  this.applyStyles = !0, this.rafSTO = new vrender_core_1.RafBasedSTO(0);
33
106
  }
34
- configure(service, params) {
35
- service.env === this.type && service.setActiveEnvContribution(this);
107
+ configure(service, params = {}) {
108
+ service.env === this.type && (service.setActiveEnvContribution(this), this.harmonyEnvParams = params,
109
+ this.harmonyRuntime = getHarmonyRuntime(params));
36
110
  }
37
111
  getDynamicCanvasCount() {
38
112
  return 9999;
@@ -40,17 +114,51 @@ class HarmonyEnvContribution extends vrender_core_1.BaseEnvContribution {
40
114
  getStaticCanvasCount() {
41
115
  return 9999;
42
116
  }
43
- loadImage(url) {}
117
+ loadImage(url) {
118
+ var _a;
119
+ if ("function" != typeof (null === (_a = this.harmonyRuntime) || void 0 === _a ? void 0 : _a.createImage)) return Promise.resolve({
120
+ data: null,
121
+ loadState: "fail"
122
+ });
123
+ const img = this.harmonyRuntime.createImage(url);
124
+ return new Promise((resolve => {
125
+ img.onload = () => {
126
+ resolve({
127
+ data: img,
128
+ loadState: "success"
129
+ });
130
+ }, img.onerror = () => {
131
+ resolve({
132
+ data: null,
133
+ loadState: "fail"
134
+ });
135
+ };
136
+ }));
137
+ }
44
138
  loadSvg(url) {
45
- return Promise.reject();
139
+ return Promise.resolve({
140
+ data: null,
141
+ loadState: "fail"
142
+ });
46
143
  }
47
144
  createCanvas(params) {
48
- return createCanvas(params.width, params.height, params.id);
145
+ var _a, _b;
146
+ const envParams = null !== (_a = this.harmonyEnvParams) && void 0 !== _a ? _a : {}, runtime = getHarmonyRuntime(envParams), dpr = null !== (_b = params.dpr) && void 0 !== _b ? _b : getHarmonyPixelRatio(envParams), size = getCanvasSize(params.width, params.height);
147
+ if (null != params.id) {
148
+ const id = String(params.id), existing = this.canvasMap.get(id);
149
+ if (existing) return existing;
150
+ const canvas = wrapHarmonyNativeCanvas(createHarmonyNativeCanvas(id, size.width, size.height, dpr, !1, envParams, runtime), id, size.width, size.height, dpr);
151
+ return this.canvasMap.set(id, canvas), canvas;
152
+ }
153
+ const result = this.freeCanvasList[this.canvasIdx] || this.freeCanvasList[this.freeCanvasList.length - 1];
154
+ if (this.canvasIdx++, result) return result;
155
+ const id = Math.random().toString(), canvas = wrapHarmonyNativeCanvas(createHarmonyNativeCanvas(id, size.width, size.height, dpr, !0, envParams, runtime), id, size.width, size.height, dpr);
156
+ return this.canvasMap.set(id, canvas), this.freeCanvasList.push(canvas), canvas;
49
157
  }
50
158
  createOffscreenCanvas(params) {}
51
159
  releaseCanvas(canvas) {}
52
160
  getDevicePixelRatio() {
53
- return 1;
161
+ return getHarmonyPixelRatio(this.harmonyEnvParams);
54
162
  }
55
163
  getRequestAnimationFrame() {
56
164
  return callback => this.rafSTO.call(callback);
@@ -62,8 +170,7 @@ class HarmonyEnvContribution extends vrender_core_1.BaseEnvContribution {
62
170
  }
63
171
  mapToCanvasPoint(event) {
64
172
  var _a;
65
- return null === (_a = null == event ? void 0 : event.type) || void 0 === _a || _a.startsWith("mouse"),
66
- event;
173
+ return null !== (_a = getHarmonyEventPoint(event)) && void 0 !== _a ? _a : event;
67
174
  }
68
175
  addEventListener(type, listener, options) {
69
176
  return null;
@@ -75,7 +182,8 @@ class HarmonyEnvContribution extends vrender_core_1.BaseEnvContribution {
75
182
  return null;
76
183
  }
77
184
  getElementById(str) {
78
- return null;
185
+ var _a;
186
+ return null !== (_a = this.canvasMap.get(str)) && void 0 !== _a ? _a : null;
79
187
  }
80
188
  getRootElement() {
81
189
  return null;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/env/contributions/harmony-contribution.ts"],"names":[],"mappings":"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","file":"harmony-contribution.js","sourcesContent":["import { BaseEnvContribution, RafBasedSTO } from '@visactor/vrender-core';\n// import { loadFeishuContributions } from '../../../kits';\nimport type {\n ICanvasLike,\n EnvType,\n ICreateCanvasParams,\n IEnvContribution,\n IGlobal,\n ILynxCanvas\n} from '@visactor/vrender-core';\nimport { CanvasWrapDisableWH, CanvasWrapEnableWH } from './canvas-wrap';\n\nfunction createCanvas(width: number, height: number, id?: string) {\n // const context = new (OffscreenCanvasRenderingContext2D as any)(width, height);\n // 浏览器debug\n const _c = new OffscreenCanvas(width, height);\n const context = _c.getContext('2d');\n\n const nativeCanvas = {\n width,\n height,\n context,\n _c,\n getBoundingClientRect() {\n return {\n width,\n height\n };\n },\n getContext() {\n return context;\n }\n };\n return new CanvasWrapDisableWH(nativeCanvas, context, 1, width, height, id);\n}\n\nexport class HarmonyEnvContribution extends BaseEnvContribution implements IEnvContribution {\n type: EnvType = 'harmony';\n supportEvent: boolean = true;\n rafSTO: RafBasedSTO;\n\n constructor() {\n super();\n this.supportsTouchEvents = true;\n try {\n this.supportsPointerEvents = !!globalThis.PointerEvent;\n this.supportsMouseEvents = !!globalThis.MouseEvent;\n } catch (err) {\n this.supportsPointerEvents = false;\n this.supportsMouseEvents = false;\n }\n this.applyStyles = true;\n this.rafSTO = new RafBasedSTO(0);\n }\n\n // TODO:VGrammar在小程序环境会重复调用setEnv传入canvas,所以每次configure并不会释放\n // 这里等待后续和VGrammar沟通\n configure(\n service: IGlobal,\n params: { domref: any; canvasIdLists: string[]; freeCanvasIdx: number; offscreen?: boolean; pixelRatio?: number }\n ) {\n if (service.env === this.type) {\n service.setActiveEnvContribution(this);\n\n // loadFeishuContributions();\n }\n }\n /**\n * 获取动态canvas的数量,offscreenCanvas或者framebuffer\n */\n getDynamicCanvasCount(): number {\n return 9999;\n }\n\n /**\n * 获取静态canvas的数量,纯粹canvas\n */\n getStaticCanvasCount(): number {\n return 9999;\n }\n\n loadImage(url: string): Promise<{\n loadState: 'success' | 'fail';\n data: HTMLImageElement | ImageData | null;\n }> {\n return;\n }\n\n loadSvg(url: string): Promise<{\n loadState: 'success' | 'fail';\n data: HTMLImageElement | ImageData | null;\n }> {\n // 飞书小组件不支持DOMParser和URL.createObjectURL,无法解析svg字符串,可以通过url使用svg资源\n return Promise.reject();\n }\n\n createCanvas(params: ICreateCanvasParams): ILynxCanvas {\n return createCanvas(params.width, params.height, params.id);\n }\n\n createOffscreenCanvas(params: ICreateCanvasParams) {\n return;\n }\n\n releaseCanvas(canvas: ICanvasLike | string) {\n return;\n }\n\n getDevicePixelRatio(): number {\n return 1;\n }\n\n getRequestAnimationFrame(): (callback: FrameRequestCallback) => number {\n // return requestAnimationFrame;\n\n // 飞书小组件,在云文档浏览器环境中,没有requestAnimationFrame\n // 但是在小组件工作台环境和模拟器中正常\n // 反馈飞书修改,目前先使用setTimeout模拟,进行测试,飞书修复后替换回requestAnimationFrame\n // return function (callback: FrameRequestCallback) {\n // return setTimeout(callback, 1000 / 60, true);\n // } as any;\n return (callback: FrameRequestCallback) => {\n return this.rafSTO.call(callback);\n };\n }\n\n getCancelAnimationFrame(): (h: number) => void {\n return (h: number) => {\n this.rafSTO.clear(h);\n };\n }\n\n mapToCanvasPoint(event: any) {\n if (event?.type?.startsWith('mouse')) {\n return event;\n }\n return event;\n }\n\n addEventListener<K extends keyof DocumentEventMap>(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions | undefined\n ): void;\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions | undefined\n ): void;\n addEventListener(type: unknown, listener: unknown, options?: unknown): void {\n return null;\n }\n\n removeEventListener<K extends keyof DocumentEventMap>(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | EventListenerOptions | undefined\n ): void;\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions | undefined\n ): void;\n removeEventListener(type: unknown, listener: unknown, options?: unknown): void {\n return null;\n }\n\n dispatchEvent(event: any): boolean {\n return null;\n }\n\n // 只能索引canvas\n getElementById(str: string): any | null {\n return null;\n }\n\n getRootElement(): HTMLElement | null {\n return null;\n }\n\n getDocument(): Document | null {\n return null;\n }\n\n release(...params: any): void {\n return;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/env/contributions/harmony-contribution.ts"],"names":[],"mappings":"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","file":"harmony-contribution.js","sourcesContent":["import { BaseEnvContribution, RafBasedSTO } from '@visactor/vrender-core';\n// import { loadFeishuContributions } from '../../../kits';\nimport type {\n ICanvasLike,\n EnvType,\n ICreateCanvasParams,\n IEnvContribution,\n IGlobal,\n ILynxCanvas\n} from '@visactor/vrender-core';\nimport { CanvasWrapEnableWH } from './canvas-wrap';\n\ntype HarmonyCanvasFactoryOptions = {\n id: string;\n width: number;\n height: number;\n dpr: number;\n offscreen: boolean;\n};\n\ntype HarmonyCanvasFactory = (options: HarmonyCanvasFactoryOptions) => any;\n\ntype HarmonyRuntime = Partial<{\n createCanvas: (options: HarmonyCanvasFactoryOptions) => any;\n createOffscreenCanvas: (options: HarmonyCanvasFactoryOptions) => any;\n createImage: (src: string) => any;\n}>;\n\ntype HarmonyEnvParams = {\n pixelRatio?: number;\n harmony?: HarmonyRuntime;\n runtime?: HarmonyRuntime;\n canvasFactory?: HarmonyCanvasFactory;\n};\n\nconst HARMONY_CANVAS_BRIDGE_ERROR =\n 'Harmony canvas bridge is unavailable. VRender Harmony env requires envParams.canvasFactory ' +\n 'or a Harmony runtime that exposes a global createCanvas/createOffscreenCanvas capability.';\nconst HARMONY_CANVAS_SIZE_ERROR =\n 'Harmony canvas size is unavailable. Pass stage width/height when creating a Harmony stage canvas.';\n\nfunction isValidCoordinate(value: unknown): value is number {\n return typeof value === 'number' && Number.isFinite(value);\n}\n\nfunction pickCoordinate(...values: unknown[]): number | undefined {\n for (let i = 0; i < values.length; i++) {\n if (isValidCoordinate(values[i])) {\n return values[i] as number;\n }\n }\n return undefined;\n}\n\nfunction getPrimaryTouch(event: any) {\n return event?.changedTouches?.[0] ?? event?.touches?.[0];\n}\n\nfunction getHarmonyEventPoint(event: any) {\n const touch = getPrimaryTouch(event);\n const x = pickCoordinate(\n event?.x,\n event?.offsetX,\n event?.clientX,\n event?.pageX,\n touch?.x,\n touch?.offsetX,\n touch?.clientX,\n touch?.pageX\n );\n const y = pickCoordinate(\n event?.y,\n event?.offsetY,\n event?.clientY,\n event?.pageY,\n touch?.y,\n touch?.offsetY,\n touch?.clientY,\n touch?.pageY\n );\n\n return x == null || y == null ? null : { x, y };\n}\n\nfunction getHarmonyRuntime(params?: HarmonyEnvParams): HarmonyRuntime | undefined {\n return params?.harmony ?? params?.runtime;\n}\n\nfunction getHarmonyPixelRatio(params?: HarmonyEnvParams): number {\n return params?.pixelRatio ?? 1;\n}\n\nfunction getCanvasSize(width?: number, height?: number) {\n if (!isValidCoordinate(width) || !isValidCoordinate(height)) {\n throw new Error(HARMONY_CANVAS_SIZE_ERROR);\n }\n return { width, height };\n}\n\nfunction getGlobalOffscreenCanvasCtor() {\n try {\n return typeof OffscreenCanvas !== 'undefined' ? OffscreenCanvas : undefined;\n } catch (err) {\n return undefined;\n }\n}\n\nfunction createFallbackOffscreenCanvas(width: number, height: number) {\n const OffscreenCanvasCtor = getGlobalOffscreenCanvasCtor();\n if (typeof OffscreenCanvasCtor !== 'function') {\n return null;\n }\n return new OffscreenCanvasCtor(width, height);\n}\n\nfunction wrapHarmonyNativeCanvas(nativeCanvas: any, id: string, width: number, height: number, dpr: number) {\n nativeCanvas.width = width * dpr;\n nativeCanvas.height = height * dpr;\n const context = nativeCanvas.getContext?.('2d') ?? nativeCanvas.getContext?.();\n if (!context) {\n throw new Error(HARMONY_CANVAS_BRIDGE_ERROR);\n }\n if (typeof nativeCanvas.getBoundingClientRect !== 'function') {\n nativeCanvas.getBoundingClientRect = () => ({\n width,\n height\n });\n }\n return new CanvasWrapEnableWH(nativeCanvas, context, dpr, width, height, id);\n}\n\nfunction createHarmonyNativeCanvas(\n id: string,\n width: number,\n height: number,\n dpr: number,\n offscreen: boolean,\n params: HarmonyEnvParams,\n runtime?: HarmonyRuntime\n) {\n const options = {\n id,\n width,\n height,\n dpr,\n offscreen\n };\n\n if (params.canvasFactory) {\n return params.canvasFactory(options);\n }\n\n if (offscreen && typeof runtime?.createOffscreenCanvas === 'function') {\n const canvas = runtime.createOffscreenCanvas(options);\n if (canvas) {\n return canvas;\n }\n }\n\n if (!offscreen && typeof runtime?.createCanvas === 'function') {\n const canvas = runtime.createCanvas(options);\n if (canvas) {\n return canvas;\n }\n }\n\n if (offscreen) {\n const canvas = createFallbackOffscreenCanvas(width * dpr, height * dpr);\n if (canvas) {\n return canvas;\n }\n }\n\n throw new Error(HARMONY_CANVAS_BRIDGE_ERROR);\n}\n\nexport class HarmonyEnvContribution extends BaseEnvContribution implements IEnvContribution {\n type: EnvType = 'harmony';\n supportEvent: boolean = true;\n rafSTO: RafBasedSTO;\n canvasMap: Map<string, ILynxCanvas> = new Map();\n freeCanvasList: ILynxCanvas[] = [];\n canvasIdx: number = 0;\n private harmonyRuntime?: HarmonyRuntime;\n private harmonyEnvParams?: HarmonyEnvParams;\n\n constructor() {\n super();\n this.supportsTouchEvents = true;\n try {\n this.supportsPointerEvents = !!globalThis.PointerEvent;\n this.supportsMouseEvents = !!globalThis.MouseEvent;\n } catch (err) {\n this.supportsPointerEvents = false;\n this.supportsMouseEvents = false;\n }\n this.applyStyles = true;\n this.rafSTO = new RafBasedSTO(0);\n }\n\n // TODO:VGrammar在小程序环境会重复调用setEnv传入canvas,所以每次configure并不会释放\n // 这里等待后续和VGrammar沟通\n configure(service: IGlobal, params: HarmonyEnvParams = {}) {\n if (service.env === this.type) {\n service.setActiveEnvContribution(this);\n this.harmonyEnvParams = params;\n this.harmonyRuntime = getHarmonyRuntime(params);\n\n // loadFeishuContributions();\n }\n }\n /**\n * 获取动态canvas的数量,offscreenCanvas或者framebuffer\n */\n getDynamicCanvasCount(): number {\n return 9999;\n }\n\n /**\n * 获取静态canvas的数量,纯粹canvas\n */\n getStaticCanvasCount(): number {\n return 9999;\n }\n\n loadImage(url: string): Promise<{\n loadState: 'success' | 'fail';\n data: HTMLImageElement | ImageData | null;\n }> {\n if (typeof this.harmonyRuntime?.createImage !== 'function') {\n return Promise.resolve({\n data: null,\n loadState: 'fail'\n });\n }\n const img = this.harmonyRuntime.createImage(url);\n return new Promise(resolve => {\n img.onload = () => {\n resolve({\n data: img,\n loadState: 'success'\n });\n };\n img.onerror = () => {\n resolve({\n data: null,\n loadState: 'fail'\n });\n };\n });\n }\n\n loadSvg(url: string): Promise<{\n loadState: 'success' | 'fail';\n data: HTMLImageElement | ImageData | null;\n }> {\n return Promise.resolve({\n data: null,\n loadState: 'fail'\n });\n }\n\n createCanvas(params: ICreateCanvasParams): ILynxCanvas {\n const envParams = this.harmonyEnvParams ?? {};\n const runtime = getHarmonyRuntime(envParams);\n const dpr = params.dpr ?? getHarmonyPixelRatio(envParams);\n const size = getCanvasSize(params.width, params.height);\n\n if (params.id != null) {\n const id = String(params.id);\n const existing = this.canvasMap.get(id);\n if (existing) {\n return existing;\n }\n const nativeCanvas = createHarmonyNativeCanvas(id, size.width, size.height, dpr, false, envParams, runtime);\n const canvas = wrapHarmonyNativeCanvas(nativeCanvas, id, size.width, size.height, dpr);\n this.canvasMap.set(id, canvas);\n return canvas;\n }\n\n const result = this.freeCanvasList[this.canvasIdx] || this.freeCanvasList[this.freeCanvasList.length - 1];\n this.canvasIdx++;\n if (result) {\n return result;\n }\n\n const id = Math.random().toString();\n const nativeCanvas = createHarmonyNativeCanvas(id, size.width, size.height, dpr, true, envParams, runtime);\n const canvas = wrapHarmonyNativeCanvas(nativeCanvas, id, size.width, size.height, dpr);\n this.canvasMap.set(id, canvas);\n this.freeCanvasList.push(canvas);\n return canvas;\n }\n\n createOffscreenCanvas(params: ICreateCanvasParams) {\n return;\n }\n\n releaseCanvas(canvas: ICanvasLike | string) {\n return;\n }\n\n getDevicePixelRatio(): number {\n return getHarmonyPixelRatio(this.harmonyEnvParams);\n }\n\n getRequestAnimationFrame(): (callback: FrameRequestCallback) => number {\n // return requestAnimationFrame;\n\n // 飞书小组件,在云文档浏览器环境中,没有requestAnimationFrame\n // 但是在小组件工作台环境和模拟器中正常\n // 反馈飞书修改,目前先使用setTimeout模拟,进行测试,飞书修复后替换回requestAnimationFrame\n // return function (callback: FrameRequestCallback) {\n // return setTimeout(callback, 1000 / 60, true);\n // } as any;\n return (callback: FrameRequestCallback) => {\n return this.rafSTO.call(callback);\n };\n }\n\n getCancelAnimationFrame(): (h: number) => void {\n return (h: number) => {\n this.rafSTO.clear(h);\n };\n }\n\n mapToCanvasPoint(event: any) {\n return getHarmonyEventPoint(event) ?? event;\n }\n\n addEventListener<K extends keyof DocumentEventMap>(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions | undefined\n ): void;\n addEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | AddEventListenerOptions | undefined\n ): void;\n addEventListener(type: unknown, listener: unknown, options?: unknown): void {\n return null;\n }\n\n removeEventListener<K extends keyof DocumentEventMap>(\n type: K,\n listener: (this: Document, ev: DocumentEventMap[K]) => any,\n options?: boolean | EventListenerOptions | undefined\n ): void;\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions | undefined\n ): void;\n removeEventListener(type: unknown, listener: unknown, options?: unknown): void {\n return null;\n }\n\n dispatchEvent(event: any): boolean {\n return null;\n }\n\n // 只能索引canvas\n getElementById(str: string): any | null {\n return this.canvasMap.get(str) ?? null;\n }\n\n getRootElement(): HTMLElement | null {\n return null;\n }\n\n getDocument(): Document | null {\n return null;\n }\n\n release(...params: any): void {\n return;\n }\n}\n"]}
@@ -1,20 +1,44 @@
1
- import { BaseEnvContribution } from '@visactor/vrender-core';
2
- import type { ICanvasLike, EnvType, ICreateCanvasParams, IEnvContribution, IGlobal, ILynxCanvas } from '@visactor/vrender-core';
3
- export declare function createImageElement(src: string, isSvg?: boolean): Promise<HTMLImageElement>;
1
+ import { BaseEnvContribution, type EnvType, type ICanvasLike, type ICreateCanvasParams, type IEnvContribution, type IGlobal, type ILynxCanvas } from '@visactor/vrender-core';
2
+ type LynxKryptonRuntime = Partial<{
3
+ createCanvas: (id: string) => any;
4
+ createCanvasNG: () => any;
5
+ CanvasElement: new (name: string) => any;
6
+ }>;
7
+ type LynxRuntime = Partial<{
8
+ getSystemInfoSync: () => {
9
+ pixelRatio?: number;
10
+ };
11
+ createCanvas: (id: string) => any;
12
+ createCanvasNG: (id?: string) => any;
13
+ createImage: (id: string) => any;
14
+ createOffscreenCanvas: () => any;
15
+ krypton: LynxKryptonRuntime;
16
+ }>;
17
+ type LynxCanvasFactoryOptions = {
18
+ id: string;
19
+ width: number;
20
+ height: number;
21
+ dpr: number;
22
+ offscreen: boolean;
23
+ };
24
+ type LynxCanvasFactory = (options: LynxCanvasFactoryOptions) => any;
25
+ type LynxEnvParams = {
26
+ pixelRatio?: number;
27
+ lynx?: LynxRuntime;
28
+ runtime?: LynxRuntime;
29
+ canvasFactory?: LynxCanvasFactory;
30
+ };
31
+ export declare function createImageElement(src: string, isSvg?: boolean, runtime?: LynxRuntime | undefined): Promise<HTMLImageElement>;
4
32
  export declare class LynxEnvContribution extends BaseEnvContribution implements IEnvContribution {
5
33
  type: EnvType;
6
34
  supportEvent: boolean;
7
35
  canvasMap: Map<string, ILynxCanvas>;
8
36
  freeCanvasList: ILynxCanvas[];
9
37
  canvasIdx: number;
38
+ private lynxRuntime?;
39
+ private lynxEnvParams?;
10
40
  constructor();
11
- configure(service: IGlobal, params: {
12
- domref: any;
13
- canvasIdLists: string[];
14
- freeCanvasIdx: number;
15
- offscreen?: boolean;
16
- pixelRatio?: number;
17
- }): void;
41
+ configure(service: IGlobal, params?: LynxEnvParams): void;
18
42
  getDynamicCanvasCount(): number;
19
43
  getStaticCanvasCount(): number;
20
44
  loadImage(url: string): Promise<{
@@ -42,3 +66,4 @@ export declare class LynxEnvContribution extends BaseEnvContribution implements
42
66
  getDocument(): Document | null;
43
67
  release(...params: any): void;
44
68
  }
69
+ export {};