@visactor/vrender 0.15.0-alpha.11 → 0.15.0-alpha.13

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 (65) hide show
  1. package/cjs/core/contributions/env/base-contribution.d.ts +6 -0
  2. package/cjs/core/contributions/env/base-contribution.js +12 -0
  3. package/cjs/core/contributions/env/base-contribution.js.map +1 -1
  4. package/cjs/core/contributions/env/browser-contribution.d.ts +6 -0
  5. package/cjs/core/contributions/env/browser-contribution.js +19 -0
  6. package/cjs/core/contributions/env/browser-contribution.js.map +1 -1
  7. package/cjs/core/contributions/window/base-contribution.d.ts +9 -5
  8. package/cjs/core/contributions/window/base-contribution.js +6 -0
  9. package/cjs/core/contributions/window/base-contribution.js.map +1 -1
  10. package/cjs/core/contributions/window/browser-contribution.d.ts +4 -0
  11. package/cjs/core/contributions/window/browser-contribution.js +3 -0
  12. package/cjs/core/contributions/window/browser-contribution.js.map +1 -1
  13. package/cjs/core/global.d.ts +6 -0
  14. package/cjs/core/global.js +9 -0
  15. package/cjs/core/global.js.map +1 -1
  16. package/cjs/core/stage.js +1 -1
  17. package/cjs/core/stage.js.map +1 -1
  18. package/cjs/core/window.d.ts +4 -0
  19. package/cjs/core/window.js +4 -1
  20. package/cjs/core/window.js.map +1 -1
  21. package/cjs/graphic/text.js +1 -1
  22. package/cjs/graphic/text.js.map +1 -1
  23. package/cjs/index.d.ts +1 -1
  24. package/cjs/index.js +1 -1
  25. package/cjs/index.js.map +1 -1
  26. package/cjs/interface/global.d.ts +12 -0
  27. package/cjs/interface/global.js.map +1 -1
  28. package/cjs/interface/window.d.ts +8 -0
  29. package/cjs/interface/window.js.map +1 -1
  30. package/cjs/plugins/builtin-plugin/html-attribute-plugin.js +7 -3
  31. package/cjs/plugins/builtin-plugin/html-attribute-plugin.js.map +1 -1
  32. package/dist/index.js +88 -4
  33. package/dist/index.min.js +1 -1
  34. package/es/core/contributions/env/base-contribution.d.ts +6 -0
  35. package/es/core/contributions/env/base-contribution.js +12 -0
  36. package/es/core/contributions/env/base-contribution.js.map +1 -1
  37. package/es/core/contributions/env/browser-contribution.d.ts +6 -0
  38. package/es/core/contributions/env/browser-contribution.js +19 -0
  39. package/es/core/contributions/env/browser-contribution.js.map +1 -1
  40. package/es/core/contributions/window/base-contribution.d.ts +9 -5
  41. package/es/core/contributions/window/base-contribution.js +6 -0
  42. package/es/core/contributions/window/base-contribution.js.map +1 -1
  43. package/es/core/contributions/window/browser-contribution.d.ts +4 -0
  44. package/es/core/contributions/window/browser-contribution.js +3 -0
  45. package/es/core/contributions/window/browser-contribution.js.map +1 -1
  46. package/es/core/global.d.ts +6 -0
  47. package/es/core/global.js +9 -0
  48. package/es/core/global.js.map +1 -1
  49. package/es/core/stage.js +1 -1
  50. package/es/core/stage.js.map +1 -1
  51. package/es/core/window.d.ts +4 -0
  52. package/es/core/window.js +4 -1
  53. package/es/core/window.js.map +1 -1
  54. package/es/graphic/text.js +1 -1
  55. package/es/graphic/text.js.map +1 -1
  56. package/es/index.d.ts +1 -1
  57. package/es/index.js +1 -1
  58. package/es/index.js.map +1 -1
  59. package/es/interface/global.d.ts +12 -0
  60. package/es/interface/global.js.map +1 -1
  61. package/es/interface/window.d.ts +8 -0
  62. package/es/interface/window.js.map +1 -1
  63. package/es/plugins/builtin-plugin/html-attribute-plugin.js +7 -3
  64. package/es/plugins/builtin-plugin/html-attribute-plugin.js.map +1 -1
  65. package/package.json +3 -3
@@ -45,6 +45,10 @@ export interface IWindow extends Releaseable, Omit<IEventElement, 'on' | 'off' |
45
45
  getBoundingClientRect: () => IDomRectLike;
46
46
  isVisible: (bbox?: IBoundsLike) => boolean;
47
47
  onVisibleChange: (cb: (currentVisible: boolean) => void) => void;
48
+ getTopLeft: (baseWindow?: boolean) => {
49
+ top: number;
50
+ left: number;
51
+ };
48
52
  }
49
53
  export interface IWindowHandlerContribution extends IContribution<IWindow>, Omit<IEventElement, 'on' | 'off' | 'once' | 'emit' | 'removeAllListeners'> {
50
54
  container?: any;
@@ -73,4 +77,8 @@ export interface IWindowHandlerContribution extends IContribution<IWindow>, Omit
73
77
  clearViewBox: (vb: IBoundsLike, color?: string) => void;
74
78
  isVisible: (bbox?: IBoundsLike) => boolean;
75
79
  onVisibleChange: (cb: (currentVisible: boolean) => void) => void;
80
+ getTopLeft: (baseWindow?: boolean) => {
81
+ top: number;
82
+ left: number;
83
+ };
76
84
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/interface/window.ts"],"names":[],"mappings":"","file":"window.js","sourcesContent":["// window为内部对象,属性均为stage传入\n\nimport type { IBoundsLike } from '@visactor/vutils';\nimport type { ICanvas } from './canvas';\nimport type { IContext2d } from './context';\nimport type { IDomRectLike, IEventElement, Releaseable } from './common';\nimport type { ISyncHook } from './sync-hook';\nimport type { IContribution } from './contribution';\nimport type { IGlobal } from './global';\n\n// TODO: 参数考虑动态注入,比如CreateWindow是native的专用接口\nexport interface IWindowParams {\n canvas?: string | HTMLCanvasElement;\n offscreen?: boolean;\n width?: number;\n height?: number;\n x?: number;\n y?: number;\n dpr: number;\n container?: string | HTMLElement;\n canvasControled: boolean;\n title: string;\n CreateWindow?: (w: number, h: number, title: string) => void;\n}\n\nexport interface IWindow\n extends Releaseable,\n Omit<IEventElement, 'on' | 'off' | 'once' | 'emit' | 'removeAllListeners'> {\n hooks: {\n onChange: ISyncHook<[number, number, number, number]>;\n };\n // 窗口的大小\n width: number;\n height: number;\n // // 窗口的位置\n // x: number;\n // y: number;\n // 窗口操作配置\n resizable: boolean;\n minHeight: number;\n minWidth: number;\n maxHeight: number;\n maxWidth: number;\n // 窗口配置\n title: string;\n dpr: number;\n style: CSSStyleDeclaration | Record<string, any>;\n\n create: (options: IWindowParams) => void;\n setWindowHandler: (handler: IWindowHandlerContribution) => void;\n setDpr: (dpr: number) => void;\n resize: (w: number, h: number) => void;\n configure: () => void;\n\n // 获取上下文和canvas,可以是2d也可以是GL\n getContext: () => IContext2d;\n getNativeHandler: () => ICanvas;\n getContainer: () => HTMLElement | any;\n getImageBuffer: (type?: string) => any;\n\n clearViewBox: (viewBox: IBoundsLike, color?: string) => void;\n\n getBoundingClientRect: () => IDomRectLike;\n\n isVisible: (bbox?: IBoundsLike) => boolean;\n\n onVisibleChange: (cb: (currentVisible: boolean) => void) => void;\n}\n\nexport interface IWindowHandlerContribution\n extends IContribution<IWindow>,\n Omit<IEventElement, 'on' | 'off' | 'once' | 'emit' | 'removeAllListeners'> {\n container?: any;\n\n configure: (window: IWindow, global: IGlobal) => void;\n createWindow: (params: IWindowParams) => void;\n releaseWindow: () => void;\n resizeWindow: (width: number, height: number) => void;\n setDpr: (dpr: number) => void;\n getDpr: () => number;\n getWH: () => { width: number; height: number };\n getXY: () => { x: number; y: number };\n getTitle: () => string;\n\n // 获取上下文和canvas,可以是2d也可以是GL\n getContext: () => IContext2d;\n getNativeHandler: () => ICanvas;\n getImageBuffer?: (type?: string) => any;\n release: (...params: any) => void;\n\n getStyle: () => CSSStyleDeclaration | Record<string, any>;\n setStyle: (s: CSSStyleDeclaration | Record<string, any>) => void;\n\n getBoundingClientRect: () => IDomRectLike;\n clearViewBox: (vb: IBoundsLike, color?: string) => void;\n isVisible: (bbox?: IBoundsLike) => boolean;\n\n onVisibleChange: (cb: (currentVisible: boolean) => void) => void;\n}\n"]}
1
+ {"version":3,"sources":["../src/interface/window.ts"],"names":[],"mappings":"","file":"window.js","sourcesContent":["// window为内部对象,属性均为stage传入\n\nimport type { IBoundsLike } from '@visactor/vutils';\nimport type { ICanvas } from './canvas';\nimport type { IContext2d } from './context';\nimport type { IDomRectLike, IEventElement, Releaseable } from './common';\nimport type { ISyncHook } from './sync-hook';\nimport type { IContribution } from './contribution';\nimport type { IGlobal } from './global';\n\n// TODO: 参数考虑动态注入,比如CreateWindow是native的专用接口\nexport interface IWindowParams {\n canvas?: string | HTMLCanvasElement;\n offscreen?: boolean;\n width?: number;\n height?: number;\n x?: number;\n y?: number;\n dpr: number;\n container?: string | HTMLElement;\n canvasControled: boolean;\n title: string;\n CreateWindow?: (w: number, h: number, title: string) => void;\n}\n\nexport interface IWindow\n extends Releaseable,\n Omit<IEventElement, 'on' | 'off' | 'once' | 'emit' | 'removeAllListeners'> {\n hooks: {\n onChange: ISyncHook<[number, number, number, number]>;\n };\n // 窗口的大小\n width: number;\n height: number;\n // // 窗口的位置\n // x: number;\n // y: number;\n // 窗口操作配置\n resizable: boolean;\n minHeight: number;\n minWidth: number;\n maxHeight: number;\n maxWidth: number;\n // 窗口配置\n title: string;\n dpr: number;\n style: CSSStyleDeclaration | Record<string, any>;\n\n create: (options: IWindowParams) => void;\n setWindowHandler: (handler: IWindowHandlerContribution) => void;\n setDpr: (dpr: number) => void;\n resize: (w: number, h: number) => void;\n configure: () => void;\n\n // 获取上下文和canvas,可以是2d也可以是GL\n getContext: () => IContext2d;\n getNativeHandler: () => ICanvas;\n getContainer: () => HTMLElement | any;\n getImageBuffer: (type?: string) => any;\n\n clearViewBox: (viewBox: IBoundsLike, color?: string) => void;\n\n getBoundingClientRect: () => IDomRectLike;\n\n isVisible: (bbox?: IBoundsLike) => boolean;\n\n onVisibleChange: (cb: (currentVisible: boolean) => void) => void;\n\n getTopLeft: (baseWindow?: boolean) => { top: number; left: number };\n}\n\nexport interface IWindowHandlerContribution\n extends IContribution<IWindow>,\n Omit<IEventElement, 'on' | 'off' | 'once' | 'emit' | 'removeAllListeners'> {\n container?: any;\n\n configure: (window: IWindow, global: IGlobal) => void;\n createWindow: (params: IWindowParams) => void;\n releaseWindow: () => void;\n resizeWindow: (width: number, height: number) => void;\n setDpr: (dpr: number) => void;\n getDpr: () => number;\n getWH: () => { width: number; height: number };\n getXY: () => { x: number; y: number };\n getTitle: () => string;\n\n // 获取上下文和canvas,可以是2d也可以是GL\n getContext: () => IContext2d;\n getNativeHandler: () => ICanvas;\n getImageBuffer?: (type?: string) => any;\n release: (...params: any) => void;\n\n getStyle: () => CSSStyleDeclaration | Record<string, any>;\n setStyle: (s: CSSStyleDeclaration | Record<string, any>) => void;\n\n getBoundingClientRect: () => IDomRectLike;\n clearViewBox: (vb: IBoundsLike, color?: string) => void;\n isVisible: (bbox?: IBoundsLike) => boolean;\n\n onVisibleChange: (cb: (currentVisible: boolean) => void) => void;\n getTopLeft: (baseWindow?: boolean) => { top: number; left: number };\n}\n"]}
@@ -32,7 +32,9 @@ export class HtmlAttributePlugin {
32
32
  }
33
33
  renderGraphicHTML(graphic) {
34
34
  const {html: html} = graphic.attribute;
35
- if (!html) return;
35
+ if (!html) return void (graphic.bindDom && graphic.bindDom.size && (graphic.bindDom.forEach((item => {
36
+ item.dom && item.dom.parentElement.removeChild(item.dom);
37
+ })), graphic.bindDom.clear()));
36
38
  const stage = graphic.stage;
37
39
  if (!stage) return;
38
40
  const {dom: dom, container: container, width: width, height: height, style: style, anchorType: anchorType = "boundsLeftTop"} = html;
@@ -56,7 +58,8 @@ export class HtmlAttributePlugin {
56
58
  dom: nativeDom,
57
59
  container: container,
58
60
  wrapGroup: wrapGroup
59
- })), wrapGroup.style.pointerEvents = "none", wrapGroup.style.position || (wrapGroup.style.position = "absolute");
61
+ })), wrapGroup.style.pointerEvents = "none", wrapGroup.style.position || (wrapGroup.style.position = "absolute",
62
+ nativeContainer.style.position = "relative");
60
63
  let left = 0, top = 0;
61
64
  if ("position" === anchorType) {
62
65
  const matrix = graphic.transMatrix;
@@ -65,7 +68,8 @@ export class HtmlAttributePlugin {
65
68
  const b = graphic.AABBBounds;
66
69
  left = b.x1, top = b.y1;
67
70
  }
68
- wrapGroup.style.left = `${left}px`, wrapGroup.style.top = `${top}px`;
71
+ const containerTL = application.global.getElementTopLeft(nativeContainer, !1), windowTL = stage.window.getTopLeft(!1), offsetX = left + windowTL.left - containerTL.left, offsetTop = top + windowTL.top - containerTL.top;
72
+ wrapGroup.style.left = `${offsetX}px`, wrapGroup.style.top = `${offsetTop}px`;
69
73
  }
70
74
  }
71
75
  //# sourceMappingURL=html-attribute-plugin.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/plugins/builtin-plugin/html-attribute-plugin.ts"],"names":[],"mappings":"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","file":"html-attribute-plugin.js","sourcesContent":["import { Generator } from '../../common/generator';\nimport type { IGraphic, IPlugin, IPluginService, IRenderService, IDrawContext, IGroup } from '../../interface';\nimport { application } from '../../application';\nimport { DefaultAttribute } from '../../graphic';\n\nexport class HtmlAttributePlugin implements IPlugin {\n name: 'HtmlAttributePlugin' = 'HtmlAttributePlugin';\n activeEvent: 'onRegister' = 'onRegister';\n pluginService: IPluginService;\n _uid: number = Generator.GenAutoIncrementId();\n key: string = this.name + this._uid;\n\n activate(context: IPluginService): void {\n this.pluginService = context;\n context.stage.hooks.afterRender.tap(this.key, stage => {\n if (!(stage && stage === this.pluginService.stage)) {\n return;\n }\n\n this.drawHTML(context.stage.renderService);\n });\n }\n deactivate(context: IPluginService): void {\n context.stage.hooks.afterRender.taps = context.stage.hooks.afterRender.taps.filter(item => {\n return item.name !== this.key;\n });\n }\n\n protected drawHTML(renderService: IRenderService) {\n if (application.global.env === 'browser') {\n renderService.renderTreeRoots\n .sort((a, b) => {\n return (a.attribute.zIndex ?? DefaultAttribute.zIndex) - (b.attribute.zIndex ?? DefaultAttribute.zIndex);\n })\n .forEach(group => {\n this.renderGroupHTML(group as IGroup);\n });\n }\n }\n\n renderGroupHTML(group: IGroup) {\n this.renderGraphicHTML(group);\n group.forEachChildren((g: IGraphic) => {\n this.renderGraphicHTML(g);\n });\n }\n\n renderGraphicHTML(graphic: IGraphic) {\n const { html } = graphic.attribute;\n if (!html) {\n return;\n }\n const stage = graphic.stage;\n if (!stage) {\n return;\n }\n const { dom, container, width, height, style, anchorType = 'boundsLeftTop' } = html;\n if (!graphic.bindDom) {\n graphic.bindDom = new Map();\n }\n const lastDom = graphic.bindDom.get(dom);\n // 如果存在了(dom存在,且container没有变化),就跳过\n if (lastDom && !(container && container !== lastDom.container)) {\n return;\n }\n // 清除上一次的dom\n graphic.bindDom.forEach(({ wrapGroup }) => {\n application.global.removeDom(wrapGroup);\n });\n // 转化这个dom为nativeDOM\n let nativeDom: HTMLElement;\n if (typeof dom === 'string') {\n nativeDom = new DOMParser().parseFromString(dom, 'text/xml').firstChild as any;\n } else {\n nativeDom = dom;\n }\n // 获取container的dom,默认为window的container\n let nativeContainer;\n const _container =\n container || (stage.params.enableHtmlAttribute === true ? null : stage.params.enableHtmlAttribute);\n if (_container) {\n if (typeof _container === 'string') {\n nativeContainer = application.global.getElementById(_container);\n } else {\n nativeContainer = _container;\n }\n } else {\n // nativeContainer = application.global.getRootElement();\n nativeContainer = graphic.stage.window.getContainer();\n }\n // 创建wrapGroup\n const wrapGroup = application.global.createDom({ tagName: 'div', width, height, style, parent: nativeContainer });\n if (wrapGroup) {\n wrapGroup.appendChild(nativeDom);\n graphic.bindDom.set(dom, { dom: nativeDom, container, wrapGroup: wrapGroup as any });\n }\n // 事件穿透\n wrapGroup.style.pointerEvents = 'none';\n // 定位wrapGroup\n if (!wrapGroup.style.position) {\n wrapGroup.style.position = 'absolute';\n }\n let left: number = 0;\n let top: number = 0;\n if (anchorType === 'position') {\n const matrix = graphic.transMatrix;\n left = matrix.e;\n top = matrix.f;\n } else {\n const b = graphic.AABBBounds;\n left = b.x1;\n top = b.y1;\n }\n wrapGroup.style.left = `${left}px`;\n wrapGroup.style.top = `${top}px`;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/plugins/builtin-plugin/html-attribute-plugin.ts"],"names":[],"mappings":"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","file":"html-attribute-plugin.js","sourcesContent":["import { Generator } from '../../common/generator';\nimport type { IGraphic, IPlugin, IPluginService, IRenderService, IDrawContext, IGroup } from '../../interface';\nimport { application } from '../../application';\nimport { DefaultAttribute } from '../../graphic';\n\nexport class HtmlAttributePlugin implements IPlugin {\n name: 'HtmlAttributePlugin' = 'HtmlAttributePlugin';\n activeEvent: 'onRegister' = 'onRegister';\n pluginService: IPluginService;\n _uid: number = Generator.GenAutoIncrementId();\n key: string = this.name + this._uid;\n\n activate(context: IPluginService): void {\n this.pluginService = context;\n context.stage.hooks.afterRender.tap(this.key, stage => {\n if (!(stage && stage === this.pluginService.stage)) {\n return;\n }\n\n this.drawHTML(context.stage.renderService);\n });\n }\n deactivate(context: IPluginService): void {\n context.stage.hooks.afterRender.taps = context.stage.hooks.afterRender.taps.filter(item => {\n return item.name !== this.key;\n });\n }\n\n protected drawHTML(renderService: IRenderService) {\n if (application.global.env === 'browser') {\n renderService.renderTreeRoots\n .sort((a, b) => {\n return (a.attribute.zIndex ?? DefaultAttribute.zIndex) - (b.attribute.zIndex ?? DefaultAttribute.zIndex);\n })\n .forEach(group => {\n this.renderGroupHTML(group as IGroup);\n });\n }\n }\n\n renderGroupHTML(group: IGroup) {\n this.renderGraphicHTML(group);\n group.forEachChildren((g: IGraphic) => {\n this.renderGraphicHTML(g);\n });\n }\n\n renderGraphicHTML(graphic: IGraphic) {\n const { html } = graphic.attribute;\n if (!html) {\n if (graphic.bindDom && graphic.bindDom.size) {\n // 删除dom\n graphic.bindDom.forEach(item => {\n item.dom && item.dom.parentElement.removeChild(item.dom);\n });\n graphic.bindDom.clear();\n }\n return;\n }\n const stage = graphic.stage;\n if (!stage) {\n return;\n }\n const { dom, container, width, height, style, anchorType = 'boundsLeftTop' } = html;\n if (!graphic.bindDom) {\n graphic.bindDom = new Map();\n }\n const lastDom = graphic.bindDom.get(dom);\n // 如果存在了(dom存在,且container没有变化),就跳过\n if (lastDom && !(container && container !== lastDom.container)) {\n return;\n }\n // 清除上一次的dom\n graphic.bindDom.forEach(({ wrapGroup }) => {\n application.global.removeDom(wrapGroup);\n });\n // 转化这个dom为nativeDOM\n let nativeDom: HTMLElement;\n if (typeof dom === 'string') {\n nativeDom = new DOMParser().parseFromString(dom, 'text/xml').firstChild as any;\n } else {\n nativeDom = dom;\n }\n // 获取container的dom,默认为window的container\n let nativeContainer;\n const _container =\n container || (stage.params.enableHtmlAttribute === true ? null : stage.params.enableHtmlAttribute);\n if (_container) {\n if (typeof _container === 'string') {\n nativeContainer = application.global.getElementById(_container);\n } else {\n nativeContainer = _container;\n }\n } else {\n // nativeContainer = application.global.getRootElement();\n nativeContainer = graphic.stage.window.getContainer();\n }\n // 创建wrapGroup\n const wrapGroup = application.global.createDom({ tagName: 'div', width, height, style, parent: nativeContainer });\n if (wrapGroup) {\n wrapGroup.appendChild(nativeDom);\n graphic.bindDom.set(dom, { dom: nativeDom, container, wrapGroup: wrapGroup as any });\n }\n // 事件穿透\n wrapGroup.style.pointerEvents = 'none';\n // 定位wrapGroup\n if (!wrapGroup.style.position) {\n wrapGroup.style.position = 'absolute';\n nativeContainer.style.position = 'relative';\n }\n let left: number = 0;\n let top: number = 0;\n if (anchorType === 'position') {\n const matrix = graphic.transMatrix;\n left = matrix.e;\n top = matrix.f;\n } else {\n const b = graphic.AABBBounds;\n left = b.x1;\n top = b.y1;\n }\n // 查看wrapGroup的位置\n // const wrapGroupTL = application.global.getElementTopLeft(wrapGroup, false);\n const containerTL = application.global.getElementTopLeft(nativeContainer, false);\n const windowTL = stage.window.getTopLeft(false);\n const offsetX = left + windowTL.left - containerTL.left;\n const offsetTop = top + windowTL.top - containerTL.top;\n // wrapGroup.style.transform = `translate(${offsetX}px, ${offsetTop}px)`;\n wrapGroup.style.left = `${offsetX}px`;\n wrapGroup.style.top = `${offsetTop}px`;\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@visactor/vrender",
3
- "version": "0.15.0-alpha.11",
3
+ "version": "0.15.0-alpha.13",
4
4
  "description": "",
5
5
  "sideEffects": true,
6
6
  "main": "cjs/index.js",
@@ -33,9 +33,9 @@
33
33
  "eslint": "~8.18.0",
34
34
  "vite": "3.2.6",
35
35
  "typescript": "4.9.5",
36
- "@internal/bundler": "0.0.1",
37
36
  "@internal/eslint-config": "0.0.1",
38
- "@internal/ts-config": "0.0.1"
37
+ "@internal/ts-config": "0.0.1",
38
+ "@internal/bundler": "0.0.1"
39
39
  },
40
40
  "keywords": [
41
41
  "VisActor",