From 790946dba3b6a63f66f2fb2200fdabbb073e1a49 Mon Sep 17 00:00:00 2001 From: zhouxinyu Date: Wed, 16 Apr 2025 17:16:47 +0800 Subject: [PATCH 1/8] feat: support EventTransformer to enable user dom transform --- .../src/common/event-listener-manager.ts | 147 ++++++++++++ .../src/common/event-transformer.ts | 142 ++++++++++++ packages/vrender-core/src/core/global.ts | 79 +++---- packages/vrender-core/src/core/window.ts | 59 +++-- .../vrender-core/src/event/event-system.ts | 28 ++- packages/vrender-core/src/index.ts | 1 + .../src/interface/event-listener-manager.ts | 45 ++++ packages/vrender-core/src/interface/global.ts | 3 +- packages/vrender-core/src/interface/window.ts | 2 + .../__tests__/browser/src/pages/vchart.ts | 215 ++++++------------ 10 files changed, 491 insertions(+), 230 deletions(-) create mode 100644 packages/vrender-core/src/common/event-listener-manager.ts create mode 100644 packages/vrender-core/src/common/event-transformer.ts create mode 100644 packages/vrender-core/src/interface/event-listener-manager.ts diff --git a/packages/vrender-core/src/common/event-listener-manager.ts b/packages/vrender-core/src/common/event-listener-manager.ts new file mode 100644 index 000000000..036ac309f --- /dev/null +++ b/packages/vrender-core/src/common/event-listener-manager.ts @@ -0,0 +1,147 @@ +import type { IEventListenerManager } from '../interface/event-listener-manager'; + +/** + * Base class to manage event listeners with support for event transformation + * Used by DefaultGlobal and DefaultWindow to handle the transformation of event coordinates + */ +export class EventListenerManager implements IEventListenerManager { + /** + * Map that stores the mapping from original listeners to wrapped listeners + * Structure: Map> + */ + protected _listenerMap: Map>; + + /** + * Transformer function that transforms the event + */ + protected _eventListenerTransformer: (event: Event) => Event; + + constructor() { + this._listenerMap = new Map(); + this._eventListenerTransformer = event => event; // Default: no transformation + } + + /** + * Set the event transformer function + * @param transformer Function that transforms events + */ + setEventListenerTransformer(transformer: (event: Event) => Event): void { + this._eventListenerTransformer = transformer || (event => event); + } + + /** + * Add an event listener with event transformation + * @param type Event type + * @param listener Original event listener + * @param options Event listener options + */ + addEventListener( + type: string, + listener: EventListenerOrEventListenerObject, + options?: boolean | AddEventListenerOptions + ): void { + if (!listener) { + return; + } + + // Create a wrapped listener that applies the transformation + const wrappedListener = (event: Event) => { + const transformedEvent = this._eventListenerTransformer(event); + if (typeof listener === 'function') { + listener(transformedEvent); + } else if (listener.handleEvent) { + listener.handleEvent(transformedEvent); + } + }; + + // Store the mapping between original and wrapped listener + if (!this._listenerMap.has(type)) { + this._listenerMap.set(type, new Map()); + } + this._listenerMap.get(type)!.set(listener, wrappedListener); + + // Add the wrapped listener + this._nativeAddEventListener(type, wrappedListener, options); + } + + /** + * Remove an event listener + * @param type Event type + * @param listener Event listener to remove + * @param options Event listener options + */ + removeEventListener( + type: string, + listener: EventListenerOrEventListenerObject, + options?: boolean | EventListenerOptions + ): void { + if (!listener) { + return; + } + + // Get the wrapped listener from our map + const wrappedListener = this._listenerMap.get(type)?.get(listener); + if (wrappedListener) { + // Remove the wrapped listener + this._nativeRemoveEventListener(type, wrappedListener, options); + + // Remove from our map + this._listenerMap.get(type)!.delete(listener); + if (this._listenerMap.get(type)!.size === 0) { + this._listenerMap.delete(type); + } + } + } + + /** + * Dispatch an event + * @param event Event to dispatch + */ + dispatchEvent(event: Event): boolean { + return this._nativeDispatchEvent(event); + } + + /** + * Clear all event listeners + */ + clearAllEventListeners(): void { + this._listenerMap.forEach((listenersMap, type) => { + listenersMap.forEach((wrappedListener, originalListener) => { + this._nativeRemoveEventListener(type, wrappedListener, undefined); + }); + }); + this._listenerMap.clear(); + } + + /** + * Native implementation of addEventListener + * To be implemented by derived classes + */ + protected _nativeAddEventListener( + type: string, + listener: EventListener, + options?: boolean | AddEventListenerOptions + ): void { + throw new Error('_nativeAddEventListener must be implemented by derived classes'); + } + + /** + * Native implementation of removeEventListener + * To be implemented by derived classes + */ + protected _nativeRemoveEventListener( + type: string, + listener: EventListener, + options?: boolean | EventListenerOptions + ): void { + throw new Error('_nativeRemoveEventListener must be implemented by derived classes'); + } + + /** + * Native implementation of dispatchEvent + * To be implemented by derived classes + */ + protected _nativeDispatchEvent(event: Event): boolean { + throw new Error('_nativeDispatchEvent must be implemented by derived classes'); + } +} diff --git a/packages/vrender-core/src/common/event-transformer.ts b/packages/vrender-core/src/common/event-transformer.ts new file mode 100644 index 000000000..ea8b0cb24 --- /dev/null +++ b/packages/vrender-core/src/common/event-transformer.ts @@ -0,0 +1,142 @@ +import type { IAABBBounds } from '@visactor/vutils'; +import type { Matrix } from '@visactor/vutils'; +import type { IGlobal, IWindow } from '../interface'; +import { isNumber } from '../canvas/util'; + +function isIdentityMatrix(matrix: Matrix): boolean { + return matrix.a === 1 && matrix.b === 0 && matrix.c === 0 && matrix.d === 1 && matrix.e === 0 && matrix.f === 0; +} + +/** + * Create an event transformer that corrects event coordinates based on container transformations + * @param containerElement The container element + * @param matrix The transformation matrix to apply + * @param rect Optional DOMRect of the container, if not provided will use getBoundingClientRect + * @returns A function that transforms events to correct coordinates + */ +export function createEventTransformer( + containerElement: HTMLElement, + getMatrix: () => Matrix, + getRect: () => IAABBBounds, + transformPoint: (clientX: number, clientY: number, matrix: Matrix, rect: IAABBBounds, transformedEvent: Event) => void +): (event: Event) => Event { + return (event: Event): Event => { + // Only transform mouse and touch events that have coordinates + if (!(event instanceof MouseEvent) && !(event instanceof TouchEvent) && !(event instanceof PointerEvent)) { + return event; + } + + // Use provided matrix + const transformMatrix = getMatrix(); + + // If there's no transformation, return the original event + if (isIdentityMatrix(transformMatrix)) { + return event; + } + + // Get the container's bounding rect for coordinate conversion + const containerRect = getRect(); + + // Create a copy of the event to modify + const transformedEvent = new (event.constructor as any)(event.type, event); + Object.defineProperties(transformedEvent, { + target: { value: event.target }, + currentTarget: { value: event.currentTarget } + }); + + if (event instanceof MouseEvent || event instanceof PointerEvent) { + transformPoint(event.clientX, event.clientY, transformMatrix, containerRect, transformedEvent); + } else if (event instanceof TouchEvent) { + // For touch events, we need to transform each touch point + // This is a simplified version that assumes we're only using the first touch + if (event.touches.length > 0) { + const touch = event.touches[0]; + transformPoint(touch.clientX, touch.clientY, transformMatrix, containerRect, transformedEvent); + } + } + + return transformedEvent; + }; +} + +/** + * Create an event transformer for the given canvas element + * @param canvasElement The canvas element + * @param getMatrix The transformation matrix to apply + * @param getRect Optional DOMRect of the container + * @returns A function that transforms events to correct coordinates + */ +export function createCanvasEventTransformer( + canvasElement: HTMLCanvasElement, + getMatrix: () => Matrix, + getRect: () => IAABBBounds, + transformPoint: (clientX: number, clientY: number, matrix: Matrix, rect: IAABBBounds, transformedEvent: Event) => void +): (event: Event) => Event { + return createEventTransformer(canvasElement.parentElement || canvasElement, getMatrix, getRect, transformPoint); +} + +/** + * Register the event transformer with a DefaultWindow instance + * @param window The window instance + * @param container The container element + * @param getMatrix The transformation matrix to apply + * @param getRect Optional DOMRect of the container + */ +export function registerWindowEventTransformer( + window: IWindow, + container: HTMLElement, + getMatrix: () => Matrix, + getRect: () => IAABBBounds, + transformPoint: (clientX: number, clientY: number, matrix: Matrix, rect: IAABBBounds, transformedEvent: Event) => void +): void { + const transformer = createEventTransformer(container, getMatrix, getRect, transformPoint); + window.setEventListenerTransformer(transformer); +} + +/** + * Register the event transformer with a DefaultGlobal instance + * @param global The global instance + * @param container The container element + * @param getMatrix The transformation matrix to apply + * @param getRect Optional DOMRect of the container + */ +export function registerGlobalEventTransformer( + global: IGlobal, + container: HTMLElement, + getMatrix: () => Matrix, + getRect: () => IAABBBounds, + transformPoint: (clientX: number, clientY: number, matrix: Matrix, rect: IAABBBounds, transformedEvent: Event) => void +): void { + const transformer = createEventTransformer(container, getMatrix, getRect, transformPoint); + global.setEventListenerTransformer(transformer); +} + +export function transformPointForCanvas( + clientX: number, + clientY: number, + matrix: Matrix, + rect: IAABBBounds, + transformedEvent: Event +) { + // Apply the inverse transformation + const transformedPoint = { x: clientX, y: clientY }; + + matrix.transformPoint(transformedPoint, transformedPoint); + + // Update the event properties + Object.defineProperties(transformedEvent, { + _canvasX: { value: transformedPoint.x }, + _canvasY: { value: transformedPoint.y } + }); + return; +} + +export function mapToCanvasPointForCanvas(nativeEvent: any) { + if (isNumber(nativeEvent._canvasX) && isNumber(nativeEvent._canvasY)) { + return { + x: nativeEvent._canvasX, + y: nativeEvent._canvasY + }; + } + return; +} diff --git a/packages/vrender-core/src/core/global.ts b/packages/vrender-core/src/core/global.ts index 21fa87ad0..f94e8edbe 100644 --- a/packages/vrender-core/src/core/global.ts +++ b/packages/vrender-core/src/core/global.ts @@ -16,10 +16,11 @@ import { EnvContribution } from '../constants'; import type { IAABBBoundsLike } from '@visactor/vutils'; import { container } from '../container'; import { Generator } from '../common/generator'; +import { EventListenerManager } from '../common/event-listener-manager'; const defaultEnv: EnvType = 'browser'; @injectable() -export class DefaultGlobal implements IGlobal { +export class DefaultGlobal extends EventListenerManager implements IGlobal { readonly id: number; private _env: EnvType; private _isSafari?: boolean; @@ -124,12 +125,17 @@ export class DefaultGlobal implements IGlobal { onSetEnv: ISyncHook<[EnvType | undefined, EnvType, IGlobal]>; }; + // 事件监听器转换器,用于进行Event属性的转换,接收一个原生的Event,返回一个修改后的Event(默认不进行转换直接返回原始Event) + // 注意返回的Event和原始的Event不是同一个对象,但也不能拷贝,返回的Event和原始Event是同一个Event类的实例(比如MouseEvent、FederatedPointerEvent等,不能直接拷贝或者用CustomEvent) + eventListenerTransformer: (event: Event) => Event = event => event; + constructor( // todo: 不需要创建,动态获取就行? @inject(ContributionProvider) @named(EnvContribution) protected readonly contributions: IContributionProvider ) { + super(); this.id = Generator.GenAutoIncrementId(); this.hooks = { onSetEnv: new SyncHook<[EnvType | undefined, EnvType, IGlobal]>(['lastEnv', 'env', 'global']) @@ -138,6 +144,38 @@ export class DefaultGlobal implements IGlobal { this.optimizeVisible = false; } + // Override from EventListenerManager + protected _nativeAddEventListener( + type: string, + listener: EventListenerOrEventListenerObject, + options?: boolean | AddEventListenerOptions + ): void { + if (!this._env) { + this.setEnv(defaultEnv); + } + return this.envContribution.addEventListener(type, listener, options); + } + + // Override from EventListenerManager + protected _nativeRemoveEventListener( + type: string, + listener: EventListenerOrEventListenerObject, + options?: boolean | EventListenerOptions + ): void { + if (!this._env) { + this.setEnv(defaultEnv); + } + return this.envContribution.removeEventListener(type, listener, options); + } + + // Override from EventListenerManager + protected _nativeDispatchEvent(event: Event): boolean { + if (!this._env) { + this.setEnv(defaultEnv); + } + return this.envContribution.dispatchEvent(event); + } + protected bindContribution(params?: any): void | Promise { const promiseArr: any[] = []; this.contributions.getContributions().forEach(contribution => { @@ -230,43 +268,6 @@ export class DefaultGlobal implements IGlobal { return this.envContribution.releaseCanvas(canvas); } - addEventListener( - type: K, - listener: (this: Document, ev: DocumentEventMap[K]) => any, - options?: boolean | AddEventListenerOptions - ): void; - addEventListener( - type: string, - listener: EventListenerOrEventListenerObject, - options?: boolean | AddEventListenerOptions - ): void { - if (!this._env) { - this.setEnv(defaultEnv); - } - return this.envContribution.addEventListener(type, listener, options); - } - removeEventListener( - type: K, - listener: (this: Document, ev: DocumentEventMap[K]) => any, - options?: boolean | EventListenerOptions - ): void; - removeEventListener( - type: string, - listener: EventListenerOrEventListenerObject, - options?: boolean | EventListenerOptions - ): void { - if (!this._env) { - this.setEnv(defaultEnv); - } - return this.envContribution.removeEventListener(type, listener, options); - } - dispatchEvent(event: any): boolean { - if (!this._env) { - this.setEnv(defaultEnv); - } - return this.envContribution.dispatchEvent(event); - } - getRequestAnimationFrame() { if (!this._env) { this.setEnv(defaultEnv); @@ -356,7 +357,7 @@ export class DefaultGlobal implements IGlobal { return this.envContribution.loadBlob(url); } - async loadFont(name: string, source: string | BinaryData, descriptors?: FontFaceDescriptors) { + async loadFont(name: string, source: string | ArrayBuffer, descriptors?: FontFaceDescriptors) { if (!this._env) { this.setEnv('browser'); } diff --git a/packages/vrender-core/src/core/window.ts b/packages/vrender-core/src/core/window.ts index ab44691cb..e0c310ec7 100644 --- a/packages/vrender-core/src/core/window.ts +++ b/packages/vrender-core/src/core/window.ts @@ -14,6 +14,7 @@ import type { import { container } from '../container'; import { SyncHook } from '../tapable'; import { application } from '../application'; +import { EventListenerManager } from '../common/event-listener-manager'; export const VWindow = Symbol.for('VWindow'); @@ -25,7 +26,7 @@ export const WindowHandlerContribution = Symbol.for('WindowHandlerContribution') * 对于原生,就是管理这个系统窗口 */ @injectable() -export class DefaultWindow implements IWindow { +export class DefaultWindow extends EventListenerManager implements IWindow { protected _width: number; protected _height: number; protected _handler: IWindowHandlerContribution; @@ -76,11 +77,35 @@ export class DefaultWindow implements IWindow { } constructor() { + super(); this._uid = Generator.GenAutoIncrementId(); this.global = application.global; this.postInit(); } + // Override from EventListenerManager + protected _nativeAddEventListener( + type: string, + listener: EventListenerOrEventListenerObject, + options?: boolean | AddEventListenerOptions + ): void { + return this._handler.addEventListener(type, listener, options); + } + + // Override from EventListenerManager + protected _nativeRemoveEventListener( + type: string, + listener: EventListenerOrEventListenerObject, + options?: boolean | EventListenerOptions + ): void { + return this._handler.removeEventListener(type, listener, options); + } + + // Override from EventListenerManager + protected _nativeDispatchEvent(event: Event): boolean { + return this._handler.dispatchEvent(event); + } + protected postInit() { this.global.hooks.onSetEnv.tap('window', this.active); this.active(); @@ -151,7 +176,8 @@ export class DefaultWindow implements IWindow { } release(): void { this.global.hooks.onSetEnv.unTap('window', this.active); - + // Clean up all event listeners + this.clearAllEventListeners(); return this._handler.releaseWindow(); } getContext(): IContext2d { @@ -167,35 +193,6 @@ export class DefaultWindow implements IWindow { return this._handler.getImageBuffer(type); } - addEventListener( - type: K, - listener: (this: Document, ev: DocumentEventMap[K]) => any, - options?: boolean | AddEventListenerOptions - ): void; - addEventListener( - type: string, - listener: EventListenerOrEventListenerObject, - options?: boolean | AddEventListenerOptions - ): void { - return this._handler.addEventListener(type, listener, options); - } - removeEventListener( - type: K, - listener: (this: Document, ev: DocumentEventMap[K]) => any, - options?: boolean | EventListenerOptions - ): void; - removeEventListener( - type: string, - listener: EventListenerOrEventListenerObject, - options?: boolean | EventListenerOptions - ): void { - return this._handler.removeEventListener(type, listener, options); - } - - dispatchEvent(event: any): boolean { - return this._handler.dispatchEvent(event); - } - getBoundingClientRect(): IDomRectLike { return this._handler.getBoundingClientRect(); } diff --git a/packages/vrender-core/src/event/event-system.ts b/packages/vrender-core/src/event/event-system.ts index 963ef1355..b71e88aca 100644 --- a/packages/vrender-core/src/event/event-system.ts +++ b/packages/vrender-core/src/event/event-system.ts @@ -271,8 +271,8 @@ export class EventSystem { if (this.supportsPointerEvents) { if (globalObj.getDocument()) { - globalObj.getDocument().addEventListener('pointermove', this.onPointerMove, true); - globalObj.getDocument().addEventListener('pointerup', this.onPointerUp, true); + globalObj.addEventListener('pointermove', this.onPointerMove, true); + globalObj.addEventListener('pointerup', this.onPointerUp, true); } else { domElement.addEventListener('pointermove', this.onPointerMove, true); domElement.addEventListener('pointerup', this.onPointerUp, true); @@ -282,8 +282,8 @@ export class EventSystem { domElement.addEventListener('pointerover', this.onPointerOverOut, true); } else { if (globalObj.getDocument()) { - globalObj.getDocument().addEventListener('mousemove', this.onPointerMove, true); - globalObj.getDocument().addEventListener('mouseup', this.onPointerUp, true); + globalObj.addEventListener('mousemove', this.onPointerMove, true); + globalObj.addEventListener('mouseup', this.onPointerUp, true); } else { domElement.addEventListener('mousemove', this.onPointerMove, true); domElement.addEventListener('mouseup', this.onPointerUp, true); @@ -311,17 +311,27 @@ export class EventSystem { return; } const { globalObj, domElement } = this; - const globalDocument = globalObj.getDocument() ?? domElement; + // const globalDocument = globalObj.getDocument() ?? domElement; if (this.supportsPointerEvents) { - globalDocument.removeEventListener('pointermove', this.onPointerMove, true); - globalDocument.removeEventListener('pointerup', this.onPointerUp, true); + if (globalObj.getDocument()) { + globalObj.removeEventListener('pointermove', this.onPointerMove, true); + globalObj.removeEventListener('pointerup', this.onPointerUp, true); + } else { + domElement.removeEventListener('pointermove', this.onPointerMove, true); + domElement.removeEventListener('pointerup', this.onPointerUp, true); + } domElement.removeEventListener('pointerdown', this.onPointerDown, true); domElement.removeEventListener('pointerleave', this.onPointerOverOut, true); domElement.removeEventListener('pointerover', this.onPointerOverOut, true); } else { - globalDocument.removeEventListener('mousemove', this.onPointerMove, true); - globalDocument.removeEventListener('mouseup', this.onPointerUp, true); + if (globalObj.getDocument()) { + globalObj.removeEventListener('mousemove', this.onPointerMove, true); + globalObj.removeEventListener('mouseup', this.onPointerUp, true); + } else { + domElement.removeEventListener('mousemove', this.onPointerMove, true); + domElement.removeEventListener('mouseup', this.onPointerUp, true); + } domElement.removeEventListener('mousedown', this.onPointerDown, true); domElement.removeEventListener('mouseout', this.onPointerOverOut, true); domElement.removeEventListener('mouseover', this.onPointerOverOut, true); diff --git a/packages/vrender-core/src/index.ts b/packages/vrender-core/src/index.ts index 042131874..171ebd7c1 100644 --- a/packages/vrender-core/src/index.ts +++ b/packages/vrender-core/src/index.ts @@ -45,6 +45,7 @@ export * from './common/morphing-utils'; export * from './common/split-path'; export * from './common/enums'; export * from './common/generator'; +export * from './common/event-transformer'; export * from './plugins/constants'; export * from './plugins/builtin-plugin/richtext-edit-plugin'; export * from './allocator/matrix-allocate'; diff --git a/packages/vrender-core/src/interface/event-listener-manager.ts b/packages/vrender-core/src/interface/event-listener-manager.ts new file mode 100644 index 000000000..a7cc75e55 --- /dev/null +++ b/packages/vrender-core/src/interface/event-listener-manager.ts @@ -0,0 +1,45 @@ +/** + * Interface for event listener management with transformation capabilities + */ +export interface IEventListenerManager { + /** + * Set the event transformer function + * @param transformer Function that transforms events + */ + setEventListenerTransformer: (transformer: (event: Event) => Event) => void; + + /** + * Add an event listener with event transformation + * @param type Event type + * @param listener Event listener function or object + * @param options Event listener options + */ + addEventListener: ( + type: string, + listener: EventListenerOrEventListenerObject, + options?: boolean | AddEventListenerOptions + ) => void; + + /** + * Remove an event listener + * @param type Event type + * @param listener Event listener to remove + * @param options Event listener options + */ + removeEventListener: ( + type: string, + listener: EventListenerOrEventListenerObject, + options?: boolean | EventListenerOptions + ) => void; + + /** + * Dispatch an event + * @param event Event to dispatch + */ + dispatchEvent: (event: Event) => boolean; + + /** + * Clear all event listeners + */ + clearAllEventListeners: () => void; +} diff --git a/packages/vrender-core/src/interface/global.ts b/packages/vrender-core/src/interface/global.ts index 3675c02da..1f26204ec 100644 --- a/packages/vrender-core/src/interface/global.ts +++ b/packages/vrender-core/src/interface/global.ts @@ -129,7 +129,7 @@ export interface IEnvContribution */ loadFont: ( font: string, - source: string | BinaryData, + source: string | any, descriptors?: FontFaceDescriptors ) => Promise<{ loadState: 'success' | 'fail'; @@ -208,6 +208,7 @@ export interface IGlobal extends Omit HTMLCanvasElement | any; createOffscreenCanvas: (params: ICreateCanvasParams) => HTMLCanvasElement | any; releaseCanvas: (canvas: HTMLCanvasElement | string | any) => void; + setEventListenerTransformer: (transformer: (event: Event) => Event) => void; /** * 获取环境中最大动态canvas的数量,offscreenCanvas或者framebuffer diff --git a/packages/vrender-core/src/interface/window.ts b/packages/vrender-core/src/interface/window.ts index b403f2d50..3af828dbc 100644 --- a/packages/vrender-core/src/interface/window.ts +++ b/packages/vrender-core/src/interface/window.ts @@ -74,6 +74,8 @@ export interface IWindow onVisibleChange: (cb: (currentVisible: boolean) => void) => void; getTopLeft: (baseWindow?: boolean) => { top: number; left: number }; + + setEventListenerTransformer: (transformer: (event: Event) => Event) => void; } export interface IWindowHandlerContribution diff --git a/packages/vrender/__tests__/browser/src/pages/vchart.ts b/packages/vrender/__tests__/browser/src/pages/vchart.ts index 635b5fcf7..593416a59 100644 --- a/packages/vrender/__tests__/browser/src/pages/vchart.ts +++ b/packages/vrender/__tests__/browser/src/pages/vchart.ts @@ -2,7 +2,6 @@ import * as VRender from '@visactor/vrender'; import * as VRenderCore from '@visactor/vrender-core'; import * as VRenderKits from '@visactor/vrender-kits'; import * as VRenderComponents from '@visactor/vrender-components'; -import { addShapesToStage, colorPools } from '../utils'; import { pi, pi2 } from '@visactor/vutils'; export const page = () => { @@ -23,89 +22,40 @@ export const page = () => { 'M 8.25 -11 L 11 -11 V -8.25 L -8.25 11 H -11 V 8.25 L 8.25 -11 Z M -11 -11 H -8.3789 L -11 -8.2539 V -11 Z M 11 11 H 8.3789 L 11 8.2539 V 11 Z'; const spec = { - type: 'linearProgress', + type: 'bar', + width: 600, + height: 300, data: [ { - id: 'id0', + id: 'barData', values: [ - { - type: 'Tradition Industries', - value: 0.795, - text: '79.5%' - }, - { - type: 'Business Companies', - value: 0.25, - text: '25%' - }, - { - type: 'Customer-facing Companies', - value: 0.065, - text: '6.5%' - } + { month: 'Monday', sales: 22 }, + { month: 'Tuesday', sales: 13 }, + { month: 'Wednesday', sales: 25 }, + { month: 'Thursday', sales: 29 }, + { month: 'Friday', sales: 38 } ] } ], - direction: 'horizontal', - xField: 'value', - yField: 'type', - seriesField: 'type', - progress: { - style: { - // boundsMode: 'imprecise', - _debug_bounds: true, - texture: path, - textureSize: 30, - texturePadding: 0, - textureRatio: 1, - textureColor: 'orange', - textureOptions: datum => { - return { - // useNewCanvas: true, - beforeDynamicTexture: (ctx, row, column, rowCount, columnCount, ratio, graphic) => { - const dx = ratio - 0.5; - const size = 30; - ctx.translate(dx * size, 0); - }, - dynamicTexture: (ctx, row, column, rowCount, columnCount, ratio, graphic) => { - const dx = ratio - 0.5; - const size = 30; - ctx.translate(-dx * size, 0); - ctx.fillStyle = 'white'; - ctx.globalAlpha = 0.6; - ctx.fill(); - } - }; + bar: { + state: { + hover: { + fill: 'red' } } }, - animationAppear: { - progress: { - channel: { - textureRatio: { - from: 0, - to: 1 - } - }, - easing: 'linear', - duration: 3000, - loop: true - } + tooltip: { + parentElement: 'container' }, - cornerRadius: 20, - bandWidth: 30, - axes: [ - { - orient: 'left', - label: { visible: true }, - type: 'band', - domainLine: { visible: false }, - tick: { visible: false } - }, - { orient: 'bottom', label: { visible: true }, type: 'linear', visible: false } - ] + xField: 'month', + yField: 'sales' }; + const container = document.getElementById('container')!; + + Array.from(container.childNodes).forEach(child => { + container.removeChild(child); + }); // const spec = { // type: 'area', // data: { @@ -446,87 +396,52 @@ export const page = () => { // }; const chartSpace = new window.ChartSpace.default(spec, { - dom: 'container' + dom: container }); - // setTimeout(() => { - // chartSpace.updateSpec({ - // type: 'treemap', - // color: ['#F2F6FF', '#D9E3FF', '#BFD0FF', '#A6BDFF', '#8CAAFF', '#7397FF', '#5984FF', '#4071FF', '#2E5DE5'], - // label: { - // visible: true, - // style: { - // html: (_, a) => { - // return { - // dom: `
测试
`, - // width: 70, - // height: 60 - // }; - // } - // } - // }, - // categoryField: 'name', - // valueField: 'value', - // data: [ - // { - // values: [ - // { - // name: 'A', - // value: 1 - // }, - // { - // name: 'B', - // value: 2 - // }, - // { - // name: 'C', - // value: 6 - // }, - // { - // name: 'D', - // value: 12 - // }, - // { - // name: 'E', - // value: 29 - // } - // ] - // } - // ] - // }); + const domRect = container.getBoundingClientRect(); + const x1 = domRect.left; + const y1 = domRect.top; + const x2 = domRect.right; + const y2 = domRect.bottom; + const getRect = () => { + return { + x1, + y1, + x2, + y2 + }; + }; + + container.style.transform = 'rotate(90deg)'; + console.log('aaa', x1, y1, x2, y2); + + const getMatrix = () => { + const matrix = VRender.matrixAllocate.allocate(1, 0, 0, 1, 0, 0); + matrix.translate(x1, y1); + const width = x2 - x1; + const height = y2 - y1; + matrix.translate(width / 2, height / 2); + matrix.rotate(pi / 2); + matrix.translate(-width / 2, -height / 2); - // // chartSpace.updateData('data0', [ - // // { - // // name: 'A', - // // value: 1 - // // }, - // // { - // // name: 'B', - // // value: 2 - // // }, - // // { - // // name: 'C', - // // value: 6 - // // }, - // // { - // // name: 'D', - // // value: 12 - // // }, - // // { - // // name: 'E', - // // value: 29 - // // } - // // ]); - // setTimeout(() => { - // console.log( - // '2', - // chartSpace - // .getStage() - // .getElementsByType('text') - // .map(item => item._uid) - // ); - // }, 2000); - // }, 3000); + return matrix; + }; + VRender.registerGlobalEventTransformer( + VRender.vglobal, + container, + getMatrix, + getRect, + VRender.transformPointForCanvas + ); + VRender.registerWindowEventTransformer( + chartSpace.getStage().window as any, + container, + getMatrix, + getRect, + VRender.transformPointForCanvas + ); + VRender.vglobal.mapToCanvasPoint = VRender.mapToCanvasPointForCanvas; chartSpace.renderSync(); console.log( From 69a7b46e9f75df5788a64e0f208afc5b8f0591eb Mon Sep 17 00:00:00 2001 From: zhouxinyu Date: Wed, 16 Apr 2025 20:50:32 +0800 Subject: [PATCH 2/8] feat: support reInit and refreshAllContributions to fix contribution can not be load when multi app use vrender --- .../src/common/contribution-provider.ts | 29 +++++++++++++++++++ packages/vrender-core/src/core/stage.ts | 5 ++++ packages/vrender-core/src/index.ts | 1 + packages/vrender-core/src/interface/picker.ts | 1 + packages/vrender-core/src/interface/render.ts | 4 +++ .../src/picker/global-picker-service.ts | 4 +++ .../vrender-core/src/picker/picker-service.ts | 4 +++ .../render/contributions/render/arc-render.ts | 4 +-- .../contributions/render/area-render.ts | 4 +-- .../contributions/render/base-render.ts | 5 ++++ .../contributions/render/circle-render.ts | 4 +-- .../contributions/render/draw-contribution.ts | 7 +++++ .../contributions/render/glyph-render.ts | 4 +++ .../contributions/render/graphic-render.ts | 2 ++ .../contributions/render/group-render.ts | 5 ++++ .../contributions/render/image-render.ts | 4 +-- .../contributions/render/path-render.ts | 4 +-- .../contributions/render/polygon-render.ts | 4 +-- .../contributions/render/rect-render.ts | 4 +-- .../contributions/render/symbol-render.ts | 4 +-- .../contributions/render/text-render.ts | 4 +-- .../vrender-core/src/render/render-service.ts | 4 +++ .../render/contributions/rough/base-render.ts | 4 +++ .../__tests__/browser/src/pages/symbol.ts | 4 +-- 24 files changed, 99 insertions(+), 20 deletions(-) diff --git a/packages/vrender-core/src/common/contribution-provider.ts b/packages/vrender-core/src/common/contribution-provider.ts index 0f06f0136..043e6b71c 100644 --- a/packages/vrender-core/src/common/contribution-provider.ts +++ b/packages/vrender-core/src/common/contribution-provider.ts @@ -11,6 +11,7 @@ class ContributionProviderCache implements IContributionProvider { constructor(serviceIdentifier: interfaces.ServiceIdentifier, container: interfaces.Container) { this.serviceIdentifier = serviceIdentifier; this.container = container; + ContributionStore.setStore(this.serviceIdentifier, this); } getContributions(): T[] { @@ -22,6 +23,16 @@ class ContributionProviderCache implements IContributionProvider { } return this.caches; } + + refresh() { + if (!this.caches) { + return; + } + this.caches.length = 0; + this.container && + this.container.isBound(this.serviceIdentifier) && + this.caches.push(...this.container.getAll(this.serviceIdentifier)); + } } export function bindContributionProvider(bind: interfaces.Bind, id: any): void { @@ -36,3 +47,21 @@ export function bindContributionProviderNoSingletonScope(bind: interfaces.Bind, .toDynamicValue(({ container }) => new ContributionProviderCache(id, container)) .whenTargetNamed(id); } + +export class ContributionStore { + static store: Map, ContributionProviderCache> = new Map(); + + static getStore(id: interfaces.ServiceIdentifier): ContributionProviderCache { + return this.store.get(id); + } + + static setStore(id: interfaces.ServiceIdentifier, cache: ContributionProviderCache): void { + this.store.set(id, cache); + } + + static refreshAllContributions(): void { + this.store.forEach(cache => { + cache.refresh(); + }); + } +} diff --git a/packages/vrender-core/src/core/stage.ts b/packages/vrender-core/src/core/stage.ts index e16c43d50..58277b4d9 100644 --- a/packages/vrender-core/src/core/stage.ts +++ b/packages/vrender-core/src/core/stage.ts @@ -1123,4 +1123,9 @@ export class Stage extends Group implements IStage { } return this.pickerService; } + + reInit() { + this.renderService.reInit(); + this.pickerService.reInit(); + } } diff --git a/packages/vrender-core/src/index.ts b/packages/vrender-core/src/index.ts index 042131874..a0df654d0 100644 --- a/packages/vrender-core/src/index.ts +++ b/packages/vrender-core/src/index.ts @@ -50,6 +50,7 @@ export * from './plugins/builtin-plugin/richtext-edit-plugin'; export * from './allocator/matrix-allocate'; export * from './allocator/canvas-allocate'; export * from './allocator/graphic-allocate'; +export * from './common/contribution-provider'; export * from './animate/default-ticker'; export { wrapCanvas, wrapContext } from './canvas/util'; diff --git a/packages/vrender-core/src/interface/picker.ts b/packages/vrender-core/src/interface/picker.ts index 9a21981dd..171c2cf84 100644 --- a/packages/vrender-core/src/interface/picker.ts +++ b/packages/vrender-core/src/interface/picker.ts @@ -63,6 +63,7 @@ export interface IPickerService { ) => PickResult | null; containsPoint: (graphic: IGraphic, point: IPointLike, params?: IPickParams) => boolean; drawContribution?: IDrawContribution; + reInit: () => void; } export interface IPickItemInterceptorContribution { diff --git a/packages/vrender-core/src/interface/render.ts b/packages/vrender-core/src/interface/render.ts index 8a2da061a..27e9831d8 100644 --- a/packages/vrender-core/src/interface/render.ts +++ b/packages/vrender-core/src/interface/render.ts @@ -38,6 +38,7 @@ export interface IRenderService { draw: (params: IRenderServiceDrawParams) => void; afterDraw: (params: IRenderServiceDrawParams) => void; render: (groups: IGroup[], params: IRenderServiceDrawParams) => MaybePromise; + reInit: () => void; } export interface IDrawContext extends IRenderServiceDrawParams { @@ -70,6 +71,7 @@ export interface IDrawContribution { getRenderContribution: (graphic: IGraphic) => IGraphicRender | null; renderGroup: (group: IGroup, drawContext: IDrawContext, matrix: IMatrixLike, skipSort?: boolean) => void; renderItem: (graphic: IGraphic, drawContext: IDrawContext, params?: IGraphicRenderDrawParams) => void; + reInit: () => void; } export interface IGraphicRenderDrawParams { @@ -109,6 +111,8 @@ export interface IGraphicRender { themeAttribute: IThemeAttribute ) => boolean ) => void; + + reInit: () => void; } export interface IBeforeRenderConstribution { diff --git a/packages/vrender-core/src/picker/global-picker-service.ts b/packages/vrender-core/src/picker/global-picker-service.ts index 0250c18c9..33eff0864 100644 --- a/packages/vrender-core/src/picker/global-picker-service.ts +++ b/packages/vrender-core/src/picker/global-picker-service.ts @@ -30,6 +30,10 @@ export class DefaultGlobalPickerService implements IPickerService { this.configure(this.global, this.global.env); } + reInit() { + return; + } + configure(global: IGlobal, env: EnvType) { // if (!this.global.env) return; // this.contributions.getContributions().forEach(handlerContribution => { diff --git a/packages/vrender-core/src/picker/picker-service.ts b/packages/vrender-core/src/picker/picker-service.ts index 3b37a2c07..8b0d6a397 100644 --- a/packages/vrender-core/src/picker/picker-service.ts +++ b/packages/vrender-core/src/picker/picker-service.ts @@ -48,6 +48,10 @@ export abstract class DefaultPickService implements IPickerService { this.global = application.global; } + reInit() { + this._init(); + } + protected _init() { this.InterceptorContributions = this.pickItemInterceptorContributions .getContributions() diff --git a/packages/vrender-core/src/render/contributions/render/arc-render.ts b/packages/vrender-core/src/render/contributions/render/arc-render.ts index 574fe0956..295b20bd2 100644 --- a/packages/vrender-core/src/render/contributions/render/arc-render.ts +++ b/packages/vrender-core/src/render/contributions/render/arc-render.ts @@ -56,7 +56,7 @@ export class DefaultCanvasArcRender extends BaseRender implements IGraphic constructor( @inject(ContributionProvider) @named(ArcRenderContribution) - protected readonly arcRenderContribitions: IContributionProvider + protected readonly graphicRenderContributions: IContributionProvider ) { super(); this.builtinContributions = [ @@ -64,7 +64,7 @@ export class DefaultCanvasArcRender extends BaseRender implements IGraphic defaultArcBackgroundRenderContribution, defaultArcTextureRenderContribution ]; - this.init(arcRenderContribitions); + this.init(graphicRenderContributions); } // 绘制尾部cap diff --git a/packages/vrender-core/src/render/contributions/render/area-render.ts b/packages/vrender-core/src/render/contributions/render/area-render.ts index 8eb5f8921..c4cbb4536 100644 --- a/packages/vrender-core/src/render/contributions/render/area-render.ts +++ b/packages/vrender-core/src/render/contributions/render/area-render.ts @@ -41,11 +41,11 @@ export class DefaultCanvasAreaRender extends BaseRender implements IGraph constructor( @inject(ContributionProvider) @named(AreaRenderContribution) - protected readonly areaRenderContribitions: IContributionProvider + protected readonly graphicRenderContributions: IContributionProvider ) { super(); this.builtinContributions = [defaultAreaTextureRenderContribution, defaultAreaBackgroundRenderContribution]; - this.init(areaRenderContribitions); + this.init(graphicRenderContributions); } drawLinearAreaHighPerformance( diff --git a/packages/vrender-core/src/render/contributions/render/base-render.ts b/packages/vrender-core/src/render/contributions/render/base-render.ts index 535fc7a57..f27b8dce9 100644 --- a/packages/vrender-core/src/render/contributions/render/base-render.ts +++ b/packages/vrender-core/src/render/contributions/render/base-render.ts @@ -29,6 +29,7 @@ export abstract class BaseRender { declare z: number; builtinContributions: IBaseRenderContribution[]; + protected declare graphicRenderContributions: IContributionProvider>; // declare renderContribitions: IContributionProvider> | null; @@ -61,6 +62,10 @@ export abstract class BaseRender { } } + reInit() { + this.init(this.graphicRenderContributions); + } + beforeRenderStep( graphic: T, context: IContext2d, diff --git a/packages/vrender-core/src/render/contributions/render/circle-render.ts b/packages/vrender-core/src/render/contributions/render/circle-render.ts index 7a19d25a0..8854a0d60 100644 --- a/packages/vrender-core/src/render/contributions/render/circle-render.ts +++ b/packages/vrender-core/src/render/contributions/render/circle-render.ts @@ -32,7 +32,7 @@ export class DefaultCanvasCircleRender extends BaseRender implements IG constructor( @inject(ContributionProvider) @named(CircleRenderContribution) - protected readonly circleRenderContribitions: IContributionProvider + protected readonly graphicRenderContributions: IContributionProvider ) { super(); this.builtinContributions = [ @@ -40,7 +40,7 @@ export class DefaultCanvasCircleRender extends BaseRender implements IG defaultCircleBackgroundRenderContribution, defaultCircleTextureRenderContribution ]; - this.init(circleRenderContribitions); + this.init(graphicRenderContributions); } drawShape( diff --git a/packages/vrender-core/src/render/contributions/render/draw-contribution.ts b/packages/vrender-core/src/render/contributions/render/draw-contribution.ts index 9344c465d..0aed84f12 100644 --- a/packages/vrender-core/src/render/contributions/render/draw-contribution.ts +++ b/packages/vrender-core/src/render/contributions/render/draw-contribution.ts @@ -72,6 +72,13 @@ export class DefaultDrawContribution implements IDrawContribution { this.init(); } + reInit() { + this.init(); + this.contributions.forEach(item => { + item.reInit(); + }); + } + init() { this.contributions.forEach(item => { if (item.style) { diff --git a/packages/vrender-core/src/render/contributions/render/glyph-render.ts b/packages/vrender-core/src/render/contributions/render/glyph-render.ts index ff6f3250d..33381aa60 100644 --- a/packages/vrender-core/src/render/contributions/render/glyph-render.ts +++ b/packages/vrender-core/src/render/contributions/render/glyph-render.ts @@ -20,6 +20,10 @@ export class DefaultCanvasGlyphRender implements IGraphicRender { // constructor() {} + reInit() { + return; + } + drawShape( glyph: IGlyph, context: IContext2d, diff --git a/packages/vrender-core/src/render/contributions/render/graphic-render.ts b/packages/vrender-core/src/render/contributions/render/graphic-render.ts index 39eca50c6..92ff262b4 100644 --- a/packages/vrender-core/src/render/contributions/render/graphic-render.ts +++ b/packages/vrender-core/src/render/contributions/render/graphic-render.ts @@ -7,4 +7,6 @@ export abstract class AbstractGraphicRender implements IGraphicRender { numberType: number; abstract draw(graphic: IGraphic, renderService: IRenderService): void; + + abstract reInit(): void; } diff --git a/packages/vrender-core/src/render/contributions/render/group-render.ts b/packages/vrender-core/src/render/contributions/render/group-render.ts index ec44d6450..8ba74ab6c 100644 --- a/packages/vrender-core/src/render/contributions/render/group-render.ts +++ b/packages/vrender-core/src/render/contributions/render/group-render.ts @@ -40,6 +40,11 @@ export class DefaultCanvasGroupRender implements IGraphicRender { protected readonly groupRenderContribitions: IContributionProvider ) {} + reInit() { + this._groupRenderContribitions = this.groupRenderContribitions.getContributions() || []; + this._groupRenderContribitions.push(defaultGroupBackgroundRenderContribution); + } + drawShape( group: IGroup, context: IContext2d, diff --git a/packages/vrender-core/src/render/contributions/render/image-render.ts b/packages/vrender-core/src/render/contributions/render/image-render.ts index f4d0c9beb..83c4cac25 100644 --- a/packages/vrender-core/src/render/contributions/render/image-render.ts +++ b/packages/vrender-core/src/render/contributions/render/image-render.ts @@ -35,11 +35,11 @@ export class DefaultCanvasImageRender extends BaseRender implements IGra constructor( @inject(ContributionProvider) @named(ImageRenderContribution) - protected readonly imageRenderContribitions: IContributionProvider + protected readonly graphicRenderContributions: IContributionProvider ) { super(); this.builtinContributions = [defaultImageRenderContribution, defaultImageBackgroundRenderContribution]; - this.init(imageRenderContribitions); + this.init(graphicRenderContributions); } drawShape( diff --git a/packages/vrender-core/src/render/contributions/render/path-render.ts b/packages/vrender-core/src/render/contributions/render/path-render.ts index 5691807f1..974b8807f 100644 --- a/packages/vrender-core/src/render/contributions/render/path-render.ts +++ b/packages/vrender-core/src/render/contributions/render/path-render.ts @@ -35,11 +35,11 @@ export class DefaultCanvasPathRender extends BaseRender implements IGraph constructor( @inject(ContributionProvider) @named(PathRenderContribution) - protected readonly pathRenderContribitions: IContributionProvider + protected readonly graphicRenderContributions: IContributionProvider ) { super(); this.builtinContributions = [defaultPathBackgroundRenderContribution, defaultPathTextureRenderContribution]; - this.init(pathRenderContribitions); + this.init(graphicRenderContributions); } drawShape( diff --git a/packages/vrender-core/src/render/contributions/render/polygon-render.ts b/packages/vrender-core/src/render/contributions/render/polygon-render.ts index 193032806..eeb15856f 100644 --- a/packages/vrender-core/src/render/contributions/render/polygon-render.ts +++ b/packages/vrender-core/src/render/contributions/render/polygon-render.ts @@ -33,11 +33,11 @@ export class DefaultCanvasPolygonRender extends BaseRender implements constructor( @inject(ContributionProvider) @named(PolygonRenderContribution) - protected readonly polygonRenderContribitions: IContributionProvider + protected readonly graphicRenderContributions: IContributionProvider ) { super(); this.builtinContributions = [defaultPolygonBackgroundRenderContribution, defaultPolygonTextureRenderContribution]; - this.init(polygonRenderContribitions); + this.init(graphicRenderContributions); } drawShape( diff --git a/packages/vrender-core/src/render/contributions/render/rect-render.ts b/packages/vrender-core/src/render/contributions/render/rect-render.ts index c0e6f6bfc..9500d4be8 100644 --- a/packages/vrender-core/src/render/contributions/render/rect-render.ts +++ b/packages/vrender-core/src/render/contributions/render/rect-render.ts @@ -37,7 +37,7 @@ export class DefaultCanvasRectRender extends BaseRender implements IGraph constructor( @inject(ContributionProvider) @named(RectRenderContribution) - protected readonly rectRenderContribitions: IContributionProvider + protected readonly graphicRenderContributions: IContributionProvider ) { super(); this.builtinContributions = [ @@ -45,7 +45,7 @@ export class DefaultCanvasRectRender extends BaseRender implements IGraph defaultRectBackgroundRenderContribution, defaultRectTextureRenderContribution ]; - this.init(rectRenderContribitions); + this.init(graphicRenderContributions); } drawShape( diff --git a/packages/vrender-core/src/render/contributions/render/symbol-render.ts b/packages/vrender-core/src/render/contributions/render/symbol-render.ts index b3429f70c..8e6d96733 100644 --- a/packages/vrender-core/src/render/contributions/render/symbol-render.ts +++ b/packages/vrender-core/src/render/contributions/render/symbol-render.ts @@ -36,7 +36,7 @@ export class DefaultCanvasSymbolRender extends BaseRender implements IG constructor( @inject(ContributionProvider) @named(SymbolRenderContribution) - protected readonly symbolRenderContribitions: IContributionProvider + protected readonly graphicRenderContributions: IContributionProvider ) { super(); this.builtinContributions = [ @@ -45,7 +45,7 @@ export class DefaultCanvasSymbolRender extends BaseRender implements IG defaultSymbolTextureRenderContribution, defaultSymbolClipRangeStrokeRenderContribution ]; - this.init(symbolRenderContribitions); + this.init(graphicRenderContributions); } drawShape( diff --git a/packages/vrender-core/src/render/contributions/render/text-render.ts b/packages/vrender-core/src/render/contributions/render/text-render.ts index 24c108301..a6df7f3a6 100644 --- a/packages/vrender-core/src/render/contributions/render/text-render.ts +++ b/packages/vrender-core/src/render/contributions/render/text-render.ts @@ -31,11 +31,11 @@ export class DefaultCanvasTextRender extends BaseRender implements IGraph constructor( @inject(ContributionProvider) @named(TextRenderContribution) - protected readonly textRenderContribitions: IContributionProvider + protected readonly graphicRenderContributions: IContributionProvider ) { super(); this.builtinContributions = [defaultTextBackgroundRenderContribution as any]; - this.init(textRenderContribitions); + this.init(graphicRenderContributions); } drawShape( diff --git a/packages/vrender-core/src/render/render-service.ts b/packages/vrender-core/src/render/render-service.ts index f6239386a..fddf41590 100644 --- a/packages/vrender-core/src/render/render-service.ts +++ b/packages/vrender-core/src/render/render-service.ts @@ -58,6 +58,10 @@ export class DefaultRenderService implements IRenderService { this.drawContribution.afterDraw && this.drawContribution.afterDraw(this, { ...this.drawParams }); return; } + + reInit() { + this.drawContribution.reInit(); + } // 对外暴露的绘制方法 render(groups: IGroup[], params: IRenderServiceDrawParams): void { this.renderTreeRoots = groups; diff --git a/packages/vrender-kits/src/render/contributions/rough/base-render.ts b/packages/vrender-kits/src/render/contributions/rough/base-render.ts index f5811eeaf..5636248ab 100644 --- a/packages/vrender-kits/src/render/contributions/rough/base-render.ts +++ b/packages/vrender-kits/src/render/contributions/rough/base-render.ts @@ -33,4 +33,8 @@ export abstract class RoughBaseRender { return this.canvasRenderer.drawShape(graphic, ctx, x, y, drawContext, params, fillCb, strokeCb); } } + + reInit() { + this.canvasRenderer?.reInit(); + } } diff --git a/packages/vrender/__tests__/browser/src/pages/symbol.ts b/packages/vrender/__tests__/browser/src/pages/symbol.ts index bc62ef4af..a9ef3e130 100644 --- a/packages/vrender/__tests__/browser/src/pages/symbol.ts +++ b/packages/vrender/__tests__/browser/src/pages/symbol.ts @@ -15,9 +15,9 @@ export const page = () => { // // ` - `` + `` ); - console.log(result); + console.log(result, parser); // const isSvg = XMLValidator.validate( // ` From 3f941bcbb98764149e542f3067f326041fd497a1 Mon Sep 17 00:00:00 2001 From: zhouxinyu Date: Fri, 18 Apr 2025 12:19:15 +0800 Subject: [PATCH 3/8] fix: fix issue with touch event --- .../src/common/event-transformer.ts | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/packages/vrender-core/src/common/event-transformer.ts b/packages/vrender-core/src/common/event-transformer.ts index ea8b0cb24..bc753cdaf 100644 --- a/packages/vrender-core/src/common/event-transformer.ts +++ b/packages/vrender-core/src/common/event-transformer.ts @@ -50,8 +50,12 @@ export function createEventTransformer( // For touch events, we need to transform each touch point // This is a simplified version that assumes we're only using the first touch if (event.touches.length > 0) { - const touch = event.touches[0]; - transformPoint(touch.clientX, touch.clientY, transformMatrix, containerRect, transformedEvent); + const touch = transformedEvent.touches[0]; + transformPoint(touch.clientX, touch.clientY, transformMatrix, containerRect, touch); + } + if (event.changedTouches.length > 0) { + const touch = transformedEvent.changedTouches[0]; + transformPoint(touch.clientX, touch.clientY, transformMatrix, containerRect, touch); } } @@ -137,6 +141,17 @@ export function mapToCanvasPointForCanvas(nativeEvent: any) { x: nativeEvent._canvasX, y: nativeEvent._canvasY }; + } else if ((nativeEvent as TouchEvent).changedTouches) { + const data = (nativeEvent as TouchEvent).changedTouches[0] ?? ({} as any); + return { + x: data._canvasX, + y: data._canvasY + }; } - return; + const x = (nativeEvent as any)._canvasX || 0; + const y = (nativeEvent as any)._canvasY || 0; + return { + x, + y + }; } From 35f1acf6163614b93f60a7a822a324cdd5355a77 Mon Sep 17 00:00:00 2001 From: neuqzxy Date: Mon, 21 Apr 2025 03:34:29 +0000 Subject: [PATCH 4/8] docs: generate changelog of release v0.22.10 --- docs/assets/changelog/en/changelog.md | 22 ++++++++++++++++++++++ docs/assets/changelog/zh/changelog.md | 22 ++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/docs/assets/changelog/en/changelog.md b/docs/assets/changelog/en/changelog.md index e15135ddb..1d3a91d51 100644 --- a/docs/assets/changelog/en/changelog.md +++ b/docs/assets/changelog/en/changelog.md @@ -1,3 +1,25 @@ +# v0.22.10 + +2025-04-21 + + +**🐛 Bug fix** + +- **@visactor/vrender-components**: fix preventDefault() error when passive: true +- **@visactor/vrender-kits**: fix issue with symbol gradient, and support native conical gradient +- **@visactor/vrender-core**: fix issue with symbol gradient, and support native conical gradient +- **@visactor/vrender-core**: fix preventDefault() error when passive: true + +**📖 Site / documentation update** + +- **@visactor/vrender-components**: update changlog of rush +- **@visactor/vrender-core**: update changlog of rush + + +**Full Changelog**: https://github.com/VisActor/VRender/compare/v0.22.9...v0.22.10 + +[more detail about v0.22.10](https://github.com/VisActor/VRender/releases/tag/v0.22.10) + # v0.22.9 2025-04-18 diff --git a/docs/assets/changelog/zh/changelog.md b/docs/assets/changelog/zh/changelog.md index e6ed0693b..c6a42adcc 100644 --- a/docs/assets/changelog/zh/changelog.md +++ b/docs/assets/changelog/zh/changelog.md @@ -1,3 +1,25 @@ +# v0.22.10 + +2025-04-21 + + +**🐛 功能修复** + +- **@visactor/vrender-components**: fix preventDefault() error when passive: true +- **@visactor/vrender-kits**: fix issue with symbol gradient, and support native conical gradient +- **@visactor/vrender-core**: fix issue with symbol gradient, and support native conical gradient +- **@visactor/vrender-core**: fix preventDefault() error when passive: true + +**📖 文档更新** + +- **@visactor/vrender-components**: update changlog of rush +- **@visactor/vrender-core**: update changlog of rush + + +**Full Changelog**: https://github.com/VisActor/VRender/compare/v0.22.9...v0.22.10 + +[更多详情请查看 v0.22.10](https://github.com/VisActor/VRender/releases/tag/v0.22.10) + # v0.22.9 2025-04-18 From 65d4e244681e3c827979116f1ce8d366c96aa1b0 Mon Sep 17 00:00:00 2001 From: xuanhun <717532978@qq.com> Date: Tue, 22 Apr 2025 11:19:05 +0800 Subject: [PATCH 5/8] docs: update link --- docs/assets/guide/en/asd/Basic/VRender_basic_tutorial.md | 2 +- docs/assets/guide/zh/asd/Basic/Vrender_basic_tutorial.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/assets/guide/en/asd/Basic/VRender_basic_tutorial.md b/docs/assets/guide/en/asd/Basic/VRender_basic_tutorial.md index 3e1287c66..0ac07c18b 100644 --- a/docs/assets/guide/en/asd/Basic/VRender_basic_tutorial.md +++ b/docs/assets/guide/en/asd/Basic/VRender_basic_tutorial.md @@ -14,7 +14,7 @@ VRender is a relatively low-level rendering library. We will introduce the usage ## Graphic System -This section will quickly introduce the graphic system. For more detailed understanding, please refer to [Graphic System](./Basic_Tutorial/Graphic) +This section will quickly introduce the graphic system. For more detailed understanding, please refer to [Graphic System](../Basic_Tutorial/Graphic) ### Create Graphics diff --git a/docs/assets/guide/zh/asd/Basic/Vrender_basic_tutorial.md b/docs/assets/guide/zh/asd/Basic/Vrender_basic_tutorial.md index 72b9ea8e3..7f98d0cc2 100644 --- a/docs/assets/guide/zh/asd/Basic/Vrender_basic_tutorial.md +++ b/docs/assets/guide/zh/asd/Basic/Vrender_basic_tutorial.md @@ -14,7 +14,7 @@ VRender 是一个比较底层的渲染库,我们将以使用场景作为区分 ## 图元系统 -此章节会快速介绍图元系统,如需详细了解,请参考[图元系统](./Basic_Tutorial/Graphic) +此章节会快速介绍图元系统,如需详细了解,请参考[图元系统](../Basic_Tutorial/Graphic) ### 创建图元 From 3ed8d13a1ae09f745af71dd237df98d86df8d567 Mon Sep 17 00:00:00 2001 From: xiaoluoHe Date: Tue, 22 Apr 2025 14:52:36 +0800 Subject: [PATCH 6/8] fix: incorrect result for TagPointsUpdate animation --- packages/vrender-core/src/animate/custom-animate.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/vrender-core/src/animate/custom-animate.ts b/packages/vrender-core/src/animate/custom-animate.ts index 5c0c04f99..c9152c57e 100644 --- a/packages/vrender-core/src/animate/custom-animate.ts +++ b/packages/vrender-core/src/animate/custom-animate.ts @@ -1,6 +1,7 @@ import type { IPoint, IPointLike } from '@visactor/vutils'; import { clamp, + cloneDeep, getDecimalPlaces, isArray, isNumber, @@ -863,6 +864,12 @@ export class TagPointsUpdate extends ACustomAnimate<{ points?: IPointLike[]; seg } onUpdate(end: boolean, ratio: number, out: Record): void { + if (end) { + Object.keys(this.to).forEach(k => { + out[k] = this.to[k]; + }); + return; + } // if not create new points, multi points animation might not work well. this.points = this.points.map((point, index) => { const newPoint = pointInterpolation(this.interpolatePoints[index][0], this.interpolatePoints[index][1], ratio); From 9dc885c187f78e38c03cbd45e6b0741062fb1b8b Mon Sep 17 00:00:00 2001 From: xiaoluoHe Date: Tue, 22 Apr 2025 14:53:18 +0800 Subject: [PATCH 7/8] docs: update changelog of rush --- .../fix-tagPointsUpdate-end_2025-04-22-06-53.json | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 common/changes/@visactor/vrender-core/fix-tagPointsUpdate-end_2025-04-22-06-53.json diff --git a/common/changes/@visactor/vrender-core/fix-tagPointsUpdate-end_2025-04-22-06-53.json b/common/changes/@visactor/vrender-core/fix-tagPointsUpdate-end_2025-04-22-06-53.json new file mode 100644 index 000000000..ac5b8402e --- /dev/null +++ b/common/changes/@visactor/vrender-core/fix-tagPointsUpdate-end_2025-04-22-06-53.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@visactor/vrender-core", + "comment": "fix: incorrect result for TagPointsUpdate animation", + "type": "none" + } + ], + "packageName": "@visactor/vrender-core" +} \ No newline at end of file From a6b721df15a8e191099de5cc3c6d86ae909818cb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 28 Apr 2025 09:14:22 +0000 Subject: [PATCH 8/8] build: prelease version 0.22.11 --- ...-tagPointsUpdate-end_2025-04-22-06-53.json | 10 ------- common/config/rush/pnpm-lock.yaml | 26 +++++++++---------- common/config/rush/version-policies.json | 2 +- docs/package.json | 2 +- packages/react-vrender-utils/CHANGELOG.json | 6 +++++ packages/react-vrender-utils/CHANGELOG.md | 7 ++++- packages/react-vrender-utils/package.json | 6 ++--- packages/react-vrender/CHANGELOG.json | 6 +++++ packages/react-vrender/CHANGELOG.md | 7 ++++- packages/react-vrender/package.json | 4 +-- packages/vrender-components/CHANGELOG.json | 6 +++++ packages/vrender-components/CHANGELOG.md | 7 ++++- packages/vrender-components/package.json | 6 ++--- packages/vrender-core/CHANGELOG.json | 12 +++++++++ packages/vrender-core/CHANGELOG.md | 9 ++++++- packages/vrender-core/package.json | 2 +- packages/vrender-kits/CHANGELOG.json | 6 +++++ packages/vrender-kits/CHANGELOG.md | 7 ++++- packages/vrender-kits/package.json | 4 +-- packages/vrender/CHANGELOG.json | 6 +++++ packages/vrender/CHANGELOG.md | 7 ++++- packages/vrender/package.json | 6 ++--- tools/bugserver-trigger/package.json | 8 +++--- 23 files changed, 113 insertions(+), 49 deletions(-) delete mode 100644 common/changes/@visactor/vrender-core/fix-tagPointsUpdate-end_2025-04-22-06-53.json diff --git a/common/changes/@visactor/vrender-core/fix-tagPointsUpdate-end_2025-04-22-06-53.json b/common/changes/@visactor/vrender-core/fix-tagPointsUpdate-end_2025-04-22-06-53.json deleted file mode 100644 index ac5b8402e..000000000 --- a/common/changes/@visactor/vrender-core/fix-tagPointsUpdate-end_2025-04-22-06-53.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "changes": [ - { - "packageName": "@visactor/vrender-core", - "comment": "fix: incorrect result for TagPointsUpdate animation", - "type": "none" - } - ], - "packageName": "@visactor/vrender-core" -} \ No newline at end of file diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index 9da7a082f..a00bd3b3f 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -22,7 +22,7 @@ importers: specifier: ~0.5.7 version: 0.5.7 '@visactor/vrender': - specifier: workspace:0.22.10 + specifier: workspace:0.22.11 version: link:../packages/vrender '@visactor/vutils': specifier: ~0.19.5 @@ -95,7 +95,7 @@ importers: ../../packages/react-vrender: dependencies: '@visactor/vrender': - specifier: workspace:0.22.10 + specifier: workspace:0.22.11 version: link:../vrender '@visactor/vutils': specifier: ~0.19.5 @@ -153,10 +153,10 @@ importers: ../../packages/react-vrender-utils: dependencies: '@visactor/react-vrender': - specifier: workspace:0.22.10 + specifier: workspace:0.22.11 version: link:../react-vrender '@visactor/vrender': - specifier: workspace:0.22.10 + specifier: workspace:0.22.11 version: link:../vrender '@visactor/vutils': specifier: ~0.19.5 @@ -211,10 +211,10 @@ importers: ../../packages/vrender: dependencies: '@visactor/vrender-core': - specifier: workspace:0.22.10 + specifier: workspace:0.22.11 version: link:../vrender-core '@visactor/vrender-kits': - specifier: workspace:0.22.10 + specifier: workspace:0.22.11 version: link:../vrender-kits devDependencies: '@internal/bundler': @@ -281,10 +281,10 @@ importers: ../../packages/vrender-components: dependencies: '@visactor/vrender-core': - specifier: workspace:0.22.10 + specifier: workspace:0.22.11 version: link:../vrender-core '@visactor/vrender-kits': - specifier: workspace:0.22.10 + specifier: workspace:0.22.11 version: link:../vrender-kits '@visactor/vscale': specifier: ~0.19.5 @@ -403,7 +403,7 @@ importers: specifier: 2.4.1 version: 2.4.1 '@visactor/vrender-core': - specifier: workspace:0.22.10 + specifier: workspace:0.22.11 version: link:../vrender-core '@visactor/vutils': specifier: ~0.19.5 @@ -519,16 +519,16 @@ importers: ../../tools/bugserver-trigger: dependencies: '@visactor/vrender': - specifier: workspace:0.22.10 + specifier: workspace:0.22.11 version: link:../../packages/vrender '@visactor/vrender-components': - specifier: workspace:0.22.10 + specifier: workspace:0.22.11 version: link:../../packages/vrender-components '@visactor/vrender-core': - specifier: workspace:0.22.10 + specifier: workspace:0.22.11 version: link:../../packages/vrender-core '@visactor/vrender-kits': - specifier: workspace:0.22.10 + specifier: workspace:0.22.11 version: link:../../packages/vrender-kits devDependencies: '@internal/bundler': diff --git a/common/config/rush/version-policies.json b/common/config/rush/version-policies.json index 24769dfed..7f86412ba 100644 --- a/common/config/rush/version-policies.json +++ b/common/config/rush/version-policies.json @@ -1 +1 @@ -[{"definitionName":"lockStepVersion","policyName":"vrenderMain","version":"0.22.10","nextBump":"patch"}] +[{"definitionName":"lockStepVersion","policyName":"vrenderMain","version":"0.22.11","nextBump":"patch"}] diff --git a/docs/package.json b/docs/package.json index 9867285a2..ce86be1c3 100644 --- a/docs/package.json +++ b/docs/package.json @@ -13,7 +13,7 @@ "@visactor/vchart": "1.3.0", "@visactor/vutils": "~0.19.5", "@visactor/vgrammar": "~0.5.7", - "@visactor/vrender": "workspace:0.22.10", + "@visactor/vrender": "workspace:0.22.11", "markdown-it": "^13.0.0", "highlight.js": "^11.8.0", "axios": "^1.4.0", diff --git a/packages/react-vrender-utils/CHANGELOG.json b/packages/react-vrender-utils/CHANGELOG.json index ab02c64b8..8b4603931 100644 --- a/packages/react-vrender-utils/CHANGELOG.json +++ b/packages/react-vrender-utils/CHANGELOG.json @@ -1,6 +1,12 @@ { "name": "@visactor/react-vrender-utils", "entries": [ + { + "version": "0.22.11", + "tag": "@visactor/react-vrender-utils_v0.22.11", + "date": "Mon, 28 Apr 2025 09:08:54 GMT", + "comments": {} + }, { "version": "0.22.10", "tag": "@visactor/react-vrender-utils_v0.22.10", diff --git a/packages/react-vrender-utils/CHANGELOG.md b/packages/react-vrender-utils/CHANGELOG.md index 877733226..5c151bb69 100644 --- a/packages/react-vrender-utils/CHANGELOG.md +++ b/packages/react-vrender-utils/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @visactor/react-vrender-utils -This log was last generated on Mon, 21 Apr 2025 02:48:16 GMT and should not be manually modified. +This log was last generated on Mon, 28 Apr 2025 09:08:54 GMT and should not be manually modified. + +## 0.22.11 +Mon, 28 Apr 2025 09:08:54 GMT + +_Version update only_ ## 0.22.10 Mon, 21 Apr 2025 02:48:16 GMT diff --git a/packages/react-vrender-utils/package.json b/packages/react-vrender-utils/package.json index e5ee46d87..d9bb4a947 100644 --- a/packages/react-vrender-utils/package.json +++ b/packages/react-vrender-utils/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/react-vrender-utils", - "version": "0.22.10", + "version": "0.22.11", "description": "", "sideEffects": false, "main": "cjs/index.js", @@ -24,8 +24,8 @@ "react-dom": "^18.2.0" }, "dependencies": { - "@visactor/vrender": "workspace:0.22.10", - "@visactor/react-vrender": "workspace:0.22.10", + "@visactor/vrender": "workspace:0.22.11", + "@visactor/react-vrender": "workspace:0.22.11", "@visactor/vutils": "~0.19.5", "react-reconciler": "^0.29.0", "tslib": "^2.3.1" diff --git a/packages/react-vrender/CHANGELOG.json b/packages/react-vrender/CHANGELOG.json index e784078db..3b4810a84 100644 --- a/packages/react-vrender/CHANGELOG.json +++ b/packages/react-vrender/CHANGELOG.json @@ -1,6 +1,12 @@ { "name": "@visactor/react-vrender", "entries": [ + { + "version": "0.22.11", + "tag": "@visactor/react-vrender_v0.22.11", + "date": "Mon, 28 Apr 2025 09:08:54 GMT", + "comments": {} + }, { "version": "0.22.10", "tag": "@visactor/react-vrender_v0.22.10", diff --git a/packages/react-vrender/CHANGELOG.md b/packages/react-vrender/CHANGELOG.md index ac8e4dbb1..1f4f6a97e 100644 --- a/packages/react-vrender/CHANGELOG.md +++ b/packages/react-vrender/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @visactor/react-vrender -This log was last generated on Mon, 21 Apr 2025 02:48:16 GMT and should not be manually modified. +This log was last generated on Mon, 28 Apr 2025 09:08:54 GMT and should not be manually modified. + +## 0.22.11 +Mon, 28 Apr 2025 09:08:54 GMT + +_Version update only_ ## 0.22.10 Mon, 21 Apr 2025 02:48:16 GMT diff --git a/packages/react-vrender/package.json b/packages/react-vrender/package.json index 4741b0619..592c34c2c 100644 --- a/packages/react-vrender/package.json +++ b/packages/react-vrender/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/react-vrender", - "version": "0.22.10", + "version": "0.22.11", "description": "", "sideEffects": false, "main": "cjs/index.js", @@ -23,7 +23,7 @@ "react": "^18.2.0" }, "dependencies": { - "@visactor/vrender": "workspace:0.22.10", + "@visactor/vrender": "workspace:0.22.11", "@visactor/vutils": "~0.19.5", "react-reconciler": "^0.29.0", "tslib": "^2.3.1" diff --git a/packages/vrender-components/CHANGELOG.json b/packages/vrender-components/CHANGELOG.json index 7c3e3516e..45bbae3a4 100644 --- a/packages/vrender-components/CHANGELOG.json +++ b/packages/vrender-components/CHANGELOG.json @@ -1,6 +1,12 @@ { "name": "@visactor/vrender-components", "entries": [ + { + "version": "0.22.11", + "tag": "@visactor/vrender-components_v0.22.11", + "date": "Mon, 28 Apr 2025 09:08:54 GMT", + "comments": {} + }, { "version": "0.22.10", "tag": "@visactor/vrender-components_v0.22.10", diff --git a/packages/vrender-components/CHANGELOG.md b/packages/vrender-components/CHANGELOG.md index 4fa9d4762..28a96e3ac 100644 --- a/packages/vrender-components/CHANGELOG.md +++ b/packages/vrender-components/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @visactor/vrender-components -This log was last generated on Mon, 21 Apr 2025 02:48:16 GMT and should not be manually modified. +This log was last generated on Mon, 28 Apr 2025 09:08:54 GMT and should not be manually modified. + +## 0.22.11 +Mon, 28 Apr 2025 09:08:54 GMT + +_Version update only_ ## 0.22.10 Mon, 21 Apr 2025 02:48:16 GMT diff --git a/packages/vrender-components/package.json b/packages/vrender-components/package.json index 60831aa7b..455bc75ed 100644 --- a/packages/vrender-components/package.json +++ b/packages/vrender-components/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/vrender-components", - "version": "0.22.10", + "version": "0.22.11", "description": "components library for dp visualization", "sideEffects": false, "main": "cjs/index.js", @@ -27,8 +27,8 @@ "dependencies": { "@visactor/vutils": "~0.19.5", "@visactor/vscale": "~0.19.5", - "@visactor/vrender-core": "workspace:0.22.10", - "@visactor/vrender-kits": "workspace:0.22.10" + "@visactor/vrender-core": "workspace:0.22.11", + "@visactor/vrender-kits": "workspace:0.22.11" }, "devDependencies": { "@internal/bundler": "workspace:*", diff --git a/packages/vrender-core/CHANGELOG.json b/packages/vrender-core/CHANGELOG.json index 837f526fd..5f44b43e4 100644 --- a/packages/vrender-core/CHANGELOG.json +++ b/packages/vrender-core/CHANGELOG.json @@ -1,6 +1,18 @@ { "name": "@visactor/vrender-core", "entries": [ + { + "version": "0.22.11", + "tag": "@visactor/vrender-core_v0.22.11", + "date": "Mon, 28 Apr 2025 09:08:54 GMT", + "comments": { + "none": [ + { + "comment": "fix: incorrect result for TagPointsUpdate animation" + } + ] + } + }, { "version": "0.22.10", "tag": "@visactor/vrender-core_v0.22.10", diff --git a/packages/vrender-core/CHANGELOG.md b/packages/vrender-core/CHANGELOG.md index 49c1c6b2a..c154dae4b 100644 --- a/packages/vrender-core/CHANGELOG.md +++ b/packages/vrender-core/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log - @visactor/vrender-core -This log was last generated on Mon, 21 Apr 2025 02:48:16 GMT and should not be manually modified. +This log was last generated on Mon, 28 Apr 2025 09:08:54 GMT and should not be manually modified. + +## 0.22.11 +Mon, 28 Apr 2025 09:08:54 GMT + +### Updates + +- fix: incorrect result for TagPointsUpdate animation ## 0.22.10 Mon, 21 Apr 2025 02:48:16 GMT diff --git a/packages/vrender-core/package.json b/packages/vrender-core/package.json index 605bec07d..77e2535a8 100644 --- a/packages/vrender-core/package.json +++ b/packages/vrender-core/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/vrender-core", - "version": "0.22.10", + "version": "0.22.11", "description": "", "sideEffects": [ "./src/modules.ts", diff --git a/packages/vrender-kits/CHANGELOG.json b/packages/vrender-kits/CHANGELOG.json index 4546344ae..2ec334646 100644 --- a/packages/vrender-kits/CHANGELOG.json +++ b/packages/vrender-kits/CHANGELOG.json @@ -1,6 +1,12 @@ { "name": "@visactor/vrender-kits", "entries": [ + { + "version": "0.22.11", + "tag": "@visactor/vrender-kits_v0.22.11", + "date": "Mon, 28 Apr 2025 09:08:54 GMT", + "comments": {} + }, { "version": "0.22.10", "tag": "@visactor/vrender-kits_v0.22.10", diff --git a/packages/vrender-kits/CHANGELOG.md b/packages/vrender-kits/CHANGELOG.md index b3df28c49..1867599ee 100644 --- a/packages/vrender-kits/CHANGELOG.md +++ b/packages/vrender-kits/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @visactor/vrender-kits -This log was last generated on Mon, 21 Apr 2025 02:48:16 GMT and should not be manually modified. +This log was last generated on Mon, 28 Apr 2025 09:08:54 GMT and should not be manually modified. + +## 0.22.11 +Mon, 28 Apr 2025 09:08:54 GMT + +_Version update only_ ## 0.22.10 Mon, 21 Apr 2025 02:48:16 GMT diff --git a/packages/vrender-kits/package.json b/packages/vrender-kits/package.json index 7424ad503..2e9637019 100644 --- a/packages/vrender-kits/package.json +++ b/packages/vrender-kits/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/vrender-kits", - "version": "0.22.10", + "version": "0.22.11", "description": "", "sideEffects": false, "main": "cjs/index.js", @@ -21,7 +21,7 @@ }, "dependencies": { "@visactor/vutils": "~0.19.5", - "@visactor/vrender-core": "workspace:0.22.10", + "@visactor/vrender-core": "workspace:0.22.11", "@resvg/resvg-js": "2.4.1", "roughjs": "4.5.2", "gifuct-js": "2.1.2", diff --git a/packages/vrender/CHANGELOG.json b/packages/vrender/CHANGELOG.json index 32f8ba4d6..1eccfc4ff 100644 --- a/packages/vrender/CHANGELOG.json +++ b/packages/vrender/CHANGELOG.json @@ -1,6 +1,12 @@ { "name": "@visactor/vrender", "entries": [ + { + "version": "0.22.11", + "tag": "@visactor/vrender_v0.22.11", + "date": "Mon, 28 Apr 2025 09:08:54 GMT", + "comments": {} + }, { "version": "0.22.10", "tag": "@visactor/vrender_v0.22.10", diff --git a/packages/vrender/CHANGELOG.md b/packages/vrender/CHANGELOG.md index 44bfb60cf..195629e90 100644 --- a/packages/vrender/CHANGELOG.md +++ b/packages/vrender/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log - @visactor/vrender -This log was last generated on Mon, 21 Apr 2025 02:48:16 GMT and should not be manually modified. +This log was last generated on Mon, 28 Apr 2025 09:08:54 GMT and should not be manually modified. + +## 0.22.11 +Mon, 28 Apr 2025 09:08:54 GMT + +_Version update only_ ## 0.22.10 Mon, 21 Apr 2025 02:48:16 GMT diff --git a/packages/vrender/package.json b/packages/vrender/package.json index 7a442588b..837931a21 100644 --- a/packages/vrender/package.json +++ b/packages/vrender/package.json @@ -1,6 +1,6 @@ { "name": "@visactor/vrender", - "version": "0.22.10", + "version": "0.22.11", "description": "", "sideEffects": true, "main": "cjs/index.js", @@ -24,8 +24,8 @@ "test-watch": "cross-env DEBUG_MODE=1 jest --watch" }, "dependencies": { - "@visactor/vrender-core": "workspace:0.22.10", - "@visactor/vrender-kits": "workspace:0.22.10" + "@visactor/vrender-core": "workspace:0.22.11", + "@visactor/vrender-kits": "workspace:0.22.11" }, "devDependencies": { "@internal/bundler": "workspace:*", diff --git a/tools/bugserver-trigger/package.json b/tools/bugserver-trigger/package.json index 68c6b42e9..11acabaac 100644 --- a/tools/bugserver-trigger/package.json +++ b/tools/bugserver-trigger/package.json @@ -8,10 +8,10 @@ "ci": "ts-node --transpileOnly --skipProject ./scripts/trigger-test.ts" }, "dependencies": { - "@visactor/vrender": "workspace:0.22.10", - "@visactor/vrender-core": "workspace:0.22.10", - "@visactor/vrender-kits": "workspace:0.22.10", - "@visactor/vrender-components": "workspace:0.22.10" + "@visactor/vrender": "workspace:0.22.11", + "@visactor/vrender-core": "workspace:0.22.11", + "@visactor/vrender-kits": "workspace:0.22.11", + "@visactor/vrender-components": "workspace:0.22.11" }, "devDependencies": { "@rushstack/eslint-patch": "~1.1.4",