@visactor/vchart 1.13.8-alpha.5 → 1.13.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/es5/index.js +1 -1
- package/build/index.es.js +37 -17
- package/build/index.js +37 -17
- package/build/index.min.js +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/cjs/chart/stack.js +2 -2
- package/cjs/chart/stack.js.map +1 -1
- package/cjs/component/label/interface.d.ts +1 -0
- package/cjs/component/label/interface.js.map +1 -1
- package/cjs/component/legend/continuous/util.js +3 -2
- package/cjs/component/legend/continuous/util.js.map +1 -1
- package/cjs/component/legend/discrete/util.js +3 -2
- package/cjs/component/legend/discrete/util.js.map +1 -1
- package/cjs/constant/event.d.ts +1 -0
- package/cjs/constant/event.js +3 -2
- package/cjs/constant/event.js.map +1 -1
- package/cjs/constant/funnel.js +1 -2
- package/cjs/constant/sunburst.js +2 -1
- package/cjs/core/index.d.ts +1 -1
- package/cjs/core/index.js +1 -1
- package/cjs/core/index.js.map +1 -1
- package/cjs/core/interface.js +1 -2
- package/cjs/core/vchart.js +2 -1
- package/cjs/data/transforms/dimension-statistics.js +1 -1
- package/cjs/data/transforms/dimension-statistics.js.map +1 -1
- package/cjs/event/event-dispatcher.d.ts +4 -1
- package/cjs/event/event-dispatcher.js +2 -3
- package/cjs/event/event-dispatcher.js.map +1 -1
- package/cjs/event/event.d.ts +4 -1
- package/cjs/event/event.js.map +1 -1
- package/cjs/event/interface.d.ts +8 -2
- package/cjs/event/interface.js.map +1 -1
- package/cjs/interaction/zoom/zoomable.js +6 -1
- package/cjs/interaction/zoom/zoomable.js.map +1 -1
- package/cjs/typings/spec/common.d.ts +1 -1
- package/cjs/typings/spec/common.js.map +1 -1
- package/esm/chart/stack.js +2 -2
- package/esm/chart/stack.js.map +1 -1
- package/esm/component/label/interface.d.ts +1 -0
- package/esm/component/label/interface.js.map +1 -1
- package/esm/component/legend/continuous/util.js +3 -2
- package/esm/component/legend/continuous/util.js.map +1 -1
- package/esm/component/legend/discrete/util.js +5 -3
- package/esm/component/legend/discrete/util.js.map +1 -1
- package/esm/constant/event.d.ts +1 -0
- package/esm/constant/event.js +2 -0
- package/esm/constant/event.js.map +1 -1
- package/esm/constant/funnel.js +1 -2
- package/esm/constant/sunburst.js +2 -1
- package/esm/core/index.d.ts +1 -1
- package/esm/core/index.js +1 -1
- package/esm/core/index.js.map +1 -1
- package/esm/core/interface.js +1 -2
- package/esm/core/vchart.js +2 -1
- package/esm/data/transforms/dimension-statistics.js +1 -1
- package/esm/data/transforms/dimension-statistics.js.map +1 -1
- package/esm/event/event-dispatcher.d.ts +4 -1
- package/esm/event/event-dispatcher.js +2 -3
- package/esm/event/event-dispatcher.js.map +1 -1
- package/esm/event/event.d.ts +4 -1
- package/esm/event/event.js.map +1 -1
- package/esm/event/interface.d.ts +8 -2
- package/esm/event/interface.js.map +1 -1
- package/esm/interaction/zoom/zoomable.js +6 -1
- package/esm/interaction/zoom/zoomable.js.map +1 -1
- package/esm/typings/spec/common.d.ts +1 -1
- package/esm/typings/spec/common.js.map +1 -1
- package/package.json +11 -11
package/cjs/event/interface.d.ts
CHANGED
|
@@ -153,7 +153,10 @@ export interface IEventDispatcher {
|
|
|
153
153
|
dispatch: <Evt extends EventType>(eType: Evt, params?: EventParamsDefinition[Evt], level?: EventBubbleLevel) => this;
|
|
154
154
|
clear: () => void;
|
|
155
155
|
release: () => void;
|
|
156
|
-
prevent: <Evt extends EventType>(eType: Evt, except
|
|
156
|
+
prevent: <Evt extends EventType>(eType: Evt, except?: {
|
|
157
|
+
handler: EventCallback<EventParamsDefinition[Evt]>;
|
|
158
|
+
level: EventBubbleLevel;
|
|
159
|
+
}) => void;
|
|
157
160
|
allow: <Evt extends EventType>(eType: Evt) => void;
|
|
158
161
|
}
|
|
159
162
|
export interface IEvent {
|
|
@@ -165,7 +168,10 @@ export interface IEvent {
|
|
|
165
168
|
eventType: EventType;
|
|
166
169
|
event: IComposedEvent;
|
|
167
170
|
}>;
|
|
168
|
-
prevent: <Evt extends EventType>(eType: Evt, except
|
|
171
|
+
prevent: <Evt extends EventType>(eType: Evt, except?: {
|
|
172
|
+
handler: EventCallback<EventParamsDefinition[Evt]>;
|
|
173
|
+
level: EventBubbleLevel;
|
|
174
|
+
}) => void;
|
|
169
175
|
allow: <Evt extends EventType>(eType: Evt) => void;
|
|
170
176
|
}
|
|
171
177
|
export interface IComposedEvent {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/event/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { IGraphic } from '@visactor/vrender-core';\nimport type { IElement } from '@visactor/vgrammar-core';\nimport type { IChart } from '../chart/interface';\nimport type { IModel } from '../model/interface';\nimport type { IMark, MarkType } from '../mark/interface';\nimport type { DimensionEventParams } from './events/dimension/interface';\nimport type { Datum, IPoint, StringOrNumber } from '../typings';\nimport type { ChartEvent, Event_Bubble_Level, Event_Source_Type, VGRAMMAR_HOOK_EVENT } from '../constant/event';\nimport type { SeriesType } from '../series/interface';\nimport type { TooltipEventParams } from '../component/tooltip/interface/event';\nimport type { ILayoutItem } from '../layout/interface';\nimport type { IVChart } from '../core/interface';\n\nexport type EventType =\n | 'pointerdown'\n | 'pointerup'\n | 'pointerupoutside'\n | 'pointertap'\n | 'pointerover'\n | 'pointermove'\n | 'pointerenter'\n | 'pointerleave'\n | 'pointerout'\n | 'mousedown'\n | 'mouseup'\n | 'mouseupoutside'\n | 'rightdown'\n | 'rightup'\n | 'rightupoutside'\n | 'click'\n | 'dblclick'\n | 'mousemove'\n | 'mouseover'\n | 'mouseout'\n | 'mouseenter'\n | 'mouseleave'\n | 'wheel'\n | 'touchstart'\n | 'touchend'\n | 'touchendoutside'\n | 'touchmove'\n | 'touchcancel'\n | 'tap'\n | 'dragstart'\n | 'drag'\n | 'dragenter'\n | 'dragleave'\n | 'dragover'\n | 'dragend'\n | 'drop'\n | 'pan'\n | 'panstart'\n | 'panend'\n | 'press'\n | 'pressup'\n | 'pressend'\n | 'pinch'\n | 'pinchstart'\n | 'pinchend'\n | 'swipe'\n | keyof typeof ChartEvent\n | keyof typeof VGRAMMAR_HOOK_EVENT\n | string;\n\nexport type EventBubbleLevel = keyof typeof Event_Bubble_Level;\n\nexport type ComponentType =\n | 'axis'\n | 'dataZoom'\n | 'indicator'\n | 'legend'\n | 'mapLabel'\n | 'markLine'\n | 'markArea'\n | 'markPoint'\n | 'tooltip'\n | 'title'\n | 'label'\n | 'totalLabel'\n | 'customMark';\nexport type EventTargetType = MarkType | ComponentType | SeriesType;\n\nexport type EventSourceType = keyof typeof Event_Source_Type;\n\n/**\n * 事件 API 中的事件筛选配置\n */\nexport type EventQuery = {\n /**\n * 事件的冒泡层级配置,其中 model 指的是图表的内部模型,包括 region、series 以及 component\n */\n level?: EventBubbleLevel;\n /**\n * 事件来源配置。\n * - `window`: window 事件\n * - `chart`: 图表事件\n */\n source?: EventSourceType;\n\n /**\n * vrender 图形节点名称\n */\n nodeName?: string;\n /**\n * mark 图元名称\n */\n markName?: string;\n /**\n * 仅在 level 为 'mark' 或者 'model' 的场景下使用,用于筛选 mark 类型或者图表组成元素模型类型\n */\n type?: EventTargetType;\n /**\n * 用户在 spec 上配置的 id\n */\n id?: StringOrNumber;\n /**\n * 自定义过滤函数\n * @param params\n * @returns\n */\n filter?: (params: Partial<BaseEventParams>) => boolean;\n\n throttle?: number;\n debounce?: number;\n /**\n * 是否阻止冒泡\n */\n consume?: boolean;\n};\n\nexport type EventParams = {\n /**\n * 事件对象\n */\n event?: SuperEvent;\n /**\n * 供不同的事件用于存储期望携带的数据\n */\n value?: any;\n /**\n * 事件来源的 mark\n */\n mark?: IMark;\n /**\n * 事件来源的 model\n */\n model?: IModel;\n /**\n * 事件来源的 chart\n */\n chart?: IChart;\n /**\n * 事件拾取到的图元的数据\n */\n datum?: Datum;\n /**\n * 拾取到的图形节点\n */\n node?: IGraphic;\n /**\n * @since 1.10.4\n * 生命周期相关事件,包括:\n * - 'rendered'\n * - 'initialized'\n * - 'animationFinished'\n * - 'renderFinished'\n * - 'layoutStart'\n * - 'layoutEnd'\n * 会返回vchart实例\n */\n vchart?: IVChart;\n};\n\ntype SuperEvent = Event & {\n [key: string]: any;\n};\n\nexport type BaseEventParams = EventParams & {\n /**\n * 事件对象\n */\n event: SuperEvent;\n item: IElement;\n datum: Datum;\n source: EventSourceType;\n itemMap: Map<string, any>;\n};\n\nexport type EventCallback<Params extends EventParams> = (params: Params) => boolean | void;\n\n/**\n * 内部事件分发中所应用的事件筛选配置\n */\nexport type EventFilter = {\n source: EventSourceType;\n level: EventBubbleLevel;\n type: string | null;\n markName: string | null;\n nodeName: string | null;\n userId: StringOrNumber | null;\n filter: (params: Partial<BaseEventParams>) => boolean | null;\n};\n\nexport type EventHandler<Params extends EventParams> = {\n callback: EventCallback<Params>;\n query: EventQuery | null;\n // 如果有 debounce/throttle 配置则需要封装原始回调函数\n wrappedCallback?: EventCallback<Params>;\n // 转换后的事件筛选配置\n filter?: EventFilter;\n // handler 是否被禁止触发\n prevented?: boolean;\n};\n\nexport type ExtendEventParam = EventParams & {\n event?: Event;\n item?: any;\n datum?: Datum;\n source?: EventSourceType;\n itemMap?: Map<string, any>;\n};\n\nexport type LayoutEventParam = {\n elements: (ILayoutItem & { type: string })[];\n} & Partial<BaseEventParams>;\n\nexport type PanEventParam = ExtendEventParam & {\n // x/y方向上的偏移值\n delta: [number, number];\n};\n\nexport type ZoomEventParam = ExtendEventParam & {\n // 缩放值\n scale: number;\n // 缩放中心\n scaleCenter: IPoint;\n};\n\nexport type InteractionEventParam = {\n items?: IElement[];\n datums?: Datum[];\n} & Partial<BaseEventParams>;\n\nexport type EventParamsDefinition = {\n // 基础事件回调参数\n pointerdown: BaseEventParams;\n pointerup: BaseEventParams;\n pointerupoutside: BaseEventParams;\n pointertap: BaseEventParams;\n pointerover: BaseEventParams;\n pointermove: BaseEventParams;\n pointerenter: BaseEventParams;\n pointerleave: BaseEventParams;\n pointerout: BaseEventParams;\n mousedown: BaseEventParams;\n mouseup: BaseEventParams;\n mouseupoutside: BaseEventParams;\n rightdown: BaseEventParams;\n rightup: BaseEventParams;\n rightupoutside: BaseEventParams;\n click: BaseEventParams;\n dblclick: BaseEventParams;\n mousemove: BaseEventParams;\n mouseover: BaseEventParams;\n mouseout: BaseEventParams;\n mouseenter: BaseEventParams;\n mouseleave: BaseEventParams;\n wheel: BaseEventParams;\n touchstart: BaseEventParams;\n touchend: BaseEventParams;\n touchendoutside: BaseEventParams;\n touchmove: BaseEventParams;\n touchcancel: BaseEventParams;\n\n dragstart: BaseEventParams;\n drag: BaseEventParams;\n dragenter: BaseEventParams;\n dragleave: BaseEventParams;\n dragover: BaseEventParams;\n dragend: BaseEventParams;\n drop: BaseEventParams;\n\n tap: BaseEventParams;\n pan: BaseEventParams;\n panstart: BaseEventParams;\n panend: BaseEventParams;\n press: BaseEventParams;\n pressup: BaseEventParams;\n pressend: BaseEventParams;\n pinch: BaseEventParams;\n pinchstart: BaseEventParams;\n pinchend: BaseEventParams;\n swipe: BaseEventParams;\n\n // VChart 内置的扩展组合事件\n dimensionHover: DimensionEventParams;\n dimensionClick: DimensionEventParams;\n tooltipShow: TooltipEventParams;\n tooltipHide: TooltipEventParams;\n tooltipRelease: TooltipEventParams;\n afterLayout: LayoutEventParam;\n\n // 交互相关事件\n 'element-select:start': InteractionEventParam;\n 'element-select:reset': InteractionEventParam;\n 'element-highlight:start': InteractionEventParam;\n 'element-highlight:reset': InteractionEventParam;\n\n // 扩展事件参数\n [key: string]: ExtendEventParam;\n};\n\nexport interface IEventDispatcher {\n globalInstance: IVChart;\n register: <Evt extends EventType>(eType: Evt, handler: EventHandler<EventParamsDefinition[Evt]>) => this;\n unregister: <Evt extends EventType>(eType: Evt, handler?: EventHandler<EventParamsDefinition[Evt]>) => this;\n dispatch: <Evt extends EventType>(eType: Evt, params?: EventParamsDefinition[Evt], level?: EventBubbleLevel) => this;\n clear: () => void;\n release: () => void;\n prevent: <Evt extends EventType>(eType: Evt
|
|
1
|
+
{"version":3,"sources":["../src/event/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { IGraphic } from '@visactor/vrender-core';\nimport type { IElement } from '@visactor/vgrammar-core';\nimport type { IChart } from '../chart/interface';\nimport type { IModel } from '../model/interface';\nimport type { IMark, MarkType } from '../mark/interface';\nimport type { DimensionEventParams } from './events/dimension/interface';\nimport type { Datum, IPoint, StringOrNumber } from '../typings';\nimport type { ChartEvent, Event_Bubble_Level, Event_Source_Type, VGRAMMAR_HOOK_EVENT } from '../constant/event';\nimport type { SeriesType } from '../series/interface';\nimport type { TooltipEventParams } from '../component/tooltip/interface/event';\nimport type { ILayoutItem } from '../layout/interface';\nimport type { IVChart } from '../core/interface';\n\nexport type EventType =\n | 'pointerdown'\n | 'pointerup'\n | 'pointerupoutside'\n | 'pointertap'\n | 'pointerover'\n | 'pointermove'\n | 'pointerenter'\n | 'pointerleave'\n | 'pointerout'\n | 'mousedown'\n | 'mouseup'\n | 'mouseupoutside'\n | 'rightdown'\n | 'rightup'\n | 'rightupoutside'\n | 'click'\n | 'dblclick'\n | 'mousemove'\n | 'mouseover'\n | 'mouseout'\n | 'mouseenter'\n | 'mouseleave'\n | 'wheel'\n | 'touchstart'\n | 'touchend'\n | 'touchendoutside'\n | 'touchmove'\n | 'touchcancel'\n | 'tap'\n | 'dragstart'\n | 'drag'\n | 'dragenter'\n | 'dragleave'\n | 'dragover'\n | 'dragend'\n | 'drop'\n | 'pan'\n | 'panstart'\n | 'panend'\n | 'press'\n | 'pressup'\n | 'pressend'\n | 'pinch'\n | 'pinchstart'\n | 'pinchend'\n | 'swipe'\n | keyof typeof ChartEvent\n | keyof typeof VGRAMMAR_HOOK_EVENT\n | string;\n\nexport type EventBubbleLevel = keyof typeof Event_Bubble_Level;\n\nexport type ComponentType =\n | 'axis'\n | 'dataZoom'\n | 'indicator'\n | 'legend'\n | 'mapLabel'\n | 'markLine'\n | 'markArea'\n | 'markPoint'\n | 'tooltip'\n | 'title'\n | 'label'\n | 'totalLabel'\n | 'customMark';\nexport type EventTargetType = MarkType | ComponentType | SeriesType;\n\nexport type EventSourceType = keyof typeof Event_Source_Type;\n\n/**\n * 事件 API 中的事件筛选配置\n */\nexport type EventQuery = {\n /**\n * 事件的冒泡层级配置,其中 model 指的是图表的内部模型,包括 region、series 以及 component\n */\n level?: EventBubbleLevel;\n /**\n * 事件来源配置。\n * - `window`: window 事件\n * - `chart`: 图表事件\n */\n source?: EventSourceType;\n\n /**\n * vrender 图形节点名称\n */\n nodeName?: string;\n /**\n * mark 图元名称\n */\n markName?: string;\n /**\n * 仅在 level 为 'mark' 或者 'model' 的场景下使用,用于筛选 mark 类型或者图表组成元素模型类型\n */\n type?: EventTargetType;\n /**\n * 用户在 spec 上配置的 id\n */\n id?: StringOrNumber;\n /**\n * 自定义过滤函数\n * @param params\n * @returns\n */\n filter?: (params: Partial<BaseEventParams>) => boolean;\n\n throttle?: number;\n debounce?: number;\n /**\n * 是否阻止冒泡\n */\n consume?: boolean;\n};\n\nexport type EventParams = {\n /**\n * 事件对象\n */\n event?: SuperEvent;\n /**\n * 供不同的事件用于存储期望携带的数据\n */\n value?: any;\n /**\n * 事件来源的 mark\n */\n mark?: IMark;\n /**\n * 事件来源的 model\n */\n model?: IModel;\n /**\n * 事件来源的 chart\n */\n chart?: IChart;\n /**\n * 事件拾取到的图元的数据\n */\n datum?: Datum;\n /**\n * 拾取到的图形节点\n */\n node?: IGraphic;\n /**\n * @since 1.10.4\n * 生命周期相关事件,包括:\n * - 'rendered'\n * - 'initialized'\n * - 'animationFinished'\n * - 'renderFinished'\n * - 'layoutStart'\n * - 'layoutEnd'\n * 会返回vchart实例\n */\n vchart?: IVChart;\n};\n\ntype SuperEvent = Event & {\n [key: string]: any;\n};\n\nexport type BaseEventParams = EventParams & {\n /**\n * 事件对象\n */\n event: SuperEvent;\n item: IElement;\n datum: Datum;\n source: EventSourceType;\n itemMap: Map<string, any>;\n};\n\nexport type EventCallback<Params extends EventParams> = (params: Params) => boolean | void;\n\n/**\n * 内部事件分发中所应用的事件筛选配置\n */\nexport type EventFilter = {\n source: EventSourceType;\n level: EventBubbleLevel;\n type: string | null;\n markName: string | null;\n nodeName: string | null;\n userId: StringOrNumber | null;\n filter: (params: Partial<BaseEventParams>) => boolean | null;\n};\n\nexport type EventHandler<Params extends EventParams> = {\n callback: EventCallback<Params>;\n query: EventQuery | null;\n // 如果有 debounce/throttle 配置则需要封装原始回调函数\n wrappedCallback?: EventCallback<Params>;\n // 转换后的事件筛选配置\n filter?: EventFilter;\n // handler 是否被禁止触发\n prevented?: boolean;\n};\n\nexport type ExtendEventParam = EventParams & {\n event?: Event;\n item?: any;\n datum?: Datum;\n source?: EventSourceType;\n itemMap?: Map<string, any>;\n};\n\nexport type LayoutEventParam = {\n elements: (ILayoutItem & { type: string })[];\n} & Partial<BaseEventParams>;\n\nexport type PanEventParam = ExtendEventParam & {\n // x/y方向上的偏移值\n delta: [number, number];\n};\n\nexport type ZoomEventParam = ExtendEventParam & {\n // 缩放值\n scale: number;\n // 缩放中心\n scaleCenter: IPoint;\n};\n\nexport type InteractionEventParam = {\n items?: IElement[];\n datums?: Datum[];\n} & Partial<BaseEventParams>;\n\nexport type EventParamsDefinition = {\n // 基础事件回调参数\n pointerdown: BaseEventParams;\n pointerup: BaseEventParams;\n pointerupoutside: BaseEventParams;\n pointertap: BaseEventParams;\n pointerover: BaseEventParams;\n pointermove: BaseEventParams;\n pointerenter: BaseEventParams;\n pointerleave: BaseEventParams;\n pointerout: BaseEventParams;\n mousedown: BaseEventParams;\n mouseup: BaseEventParams;\n mouseupoutside: BaseEventParams;\n rightdown: BaseEventParams;\n rightup: BaseEventParams;\n rightupoutside: BaseEventParams;\n click: BaseEventParams;\n dblclick: BaseEventParams;\n mousemove: BaseEventParams;\n mouseover: BaseEventParams;\n mouseout: BaseEventParams;\n mouseenter: BaseEventParams;\n mouseleave: BaseEventParams;\n wheel: BaseEventParams;\n touchstart: BaseEventParams;\n touchend: BaseEventParams;\n touchendoutside: BaseEventParams;\n touchmove: BaseEventParams;\n touchcancel: BaseEventParams;\n\n dragstart: BaseEventParams;\n drag: BaseEventParams;\n dragenter: BaseEventParams;\n dragleave: BaseEventParams;\n dragover: BaseEventParams;\n dragend: BaseEventParams;\n drop: BaseEventParams;\n\n tap: BaseEventParams;\n pan: BaseEventParams;\n panstart: BaseEventParams;\n panend: BaseEventParams;\n press: BaseEventParams;\n pressup: BaseEventParams;\n pressend: BaseEventParams;\n pinch: BaseEventParams;\n pinchstart: BaseEventParams;\n pinchend: BaseEventParams;\n swipe: BaseEventParams;\n\n // VChart 内置的扩展组合事件\n dimensionHover: DimensionEventParams;\n dimensionClick: DimensionEventParams;\n tooltipShow: TooltipEventParams;\n tooltipHide: TooltipEventParams;\n tooltipRelease: TooltipEventParams;\n afterLayout: LayoutEventParam;\n\n // 交互相关事件\n 'element-select:start': InteractionEventParam;\n 'element-select:reset': InteractionEventParam;\n 'element-highlight:start': InteractionEventParam;\n 'element-highlight:reset': InteractionEventParam;\n\n // 扩展事件参数\n [key: string]: ExtendEventParam;\n};\n\nexport interface IEventDispatcher {\n globalInstance: IVChart;\n register: <Evt extends EventType>(eType: Evt, handler: EventHandler<EventParamsDefinition[Evt]>) => this;\n unregister: <Evt extends EventType>(eType: Evt, handler?: EventHandler<EventParamsDefinition[Evt]>) => this;\n dispatch: <Evt extends EventType>(eType: Evt, params?: EventParamsDefinition[Evt], level?: EventBubbleLevel) => this;\n clear: () => void;\n release: () => void;\n prevent: <Evt extends EventType>(\n eType: Evt,\n except?: {\n handler: EventCallback<EventParamsDefinition[Evt]>;\n level: EventBubbleLevel;\n }\n ) => void;\n allow: <Evt extends EventType>(eType: Evt) => void;\n}\n\nexport interface IEvent {\n on: (<Evt extends EventType>(eType: Evt, callback: EventCallback<EventParamsDefinition[Evt]>) => this) &\n (<Evt extends EventType>(\n eType: Evt,\n query: EventQuery,\n callback: EventCallback<EventParamsDefinition[Evt]>\n ) => this);\n off: (<Evt extends EventType>(eType: Evt, callback?: EventCallback<EventParamsDefinition[Evt]>) => this) &\n (<Evt extends EventType>(\n eType: Evt,\n query: EventQuery,\n callback: EventCallback<EventParamsDefinition[Evt]>\n ) => this);\n emit: <Evt extends EventType>(eType: Evt, params: EventParamsDefinition[Evt], level?: EventBubbleLevel) => void;\n release: () => void;\n\n getComposedEventMap: () => Map<EventCallback<EventParams>, { eventType: EventType; event: IComposedEvent }>;\n prevent: <Evt extends EventType>(\n eType: Evt,\n except?: {\n handler: EventCallback<EventParamsDefinition[Evt]>;\n level: EventBubbleLevel;\n }\n ) => void;\n allow: <Evt extends EventType>(eType: Evt) => void;\n}\n\nexport interface IComposedEvent {\n register: <Evt extends EventType>(eType: Evt, handler: EventHandler<EventParamsDefinition[Evt]>) => void;\n unregister: () => void;\n dispatch: (v: unknown, opt: unknown) => unknown;\n}\n"]}
|
|
@@ -201,7 +201,12 @@ class Zoomable {
|
|
|
201
201
|
}), this._clearDragEvent();
|
|
202
202
|
}), delayTime), this._handleDragMouseMove = delayMap[delayType]((params => {
|
|
203
203
|
if (!this.isDragEnable(params.event)) return;
|
|
204
|
-
this._clickEnable = !1, end.forEach((endEventType =>
|
|
204
|
+
this._clickEnable = !1, end.forEach((endEventType => {
|
|
205
|
+
this._eventObj.prevent(endEventType, {
|
|
206
|
+
handler: this._handleDragMouseUp,
|
|
207
|
+
level: event_1.Event_Bubble_Level.chart
|
|
208
|
+
});
|
|
209
|
+
}));
|
|
205
210
|
const event = params.event, delta = [ event.canvasX - moveX, event.canvasY - moveY ];
|
|
206
211
|
moveX = event.canvasX, moveY = event.canvasY, realTime && callback && callback(delta, params.event),
|
|
207
212
|
this._eventObj.emit("panmove", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/interaction/zoom/zoomable.ts"],"names":[],"mappings":"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","file":"zoomable.js","sourcesContent":["import type { IModelOption } from './../../model/interface';\n/* eslint-disable no-duplicate-imports */\nimport { debounce, isNil, pointInRect, throttle } from '@visactor/vutils';\nimport type { BaseEventParams, EventQuery, EventType, ExtendEventParam, IEvent } from '../../event/interface';\nimport type { IRegion } from '../../region/interface';\nimport type { RenderMode } from '../../typings/spec';\nimport { RenderModeEnum } from '../../typings/spec/common';\nimport { getDefaultTriggerEventByMode } from '../../component/common/trigger/config';\nimport type { IZoomTrigger } from '../../component/common/trigger/interface';\nimport type { ISeries } from '../../series/interface';\nimport { Event_Bubble_Level, Event_Source_Type } from '../../constant/event';\nimport type { IDelayType } from '../../typings/event';\nimport { isMiniAppLikeMode, isMobileLikeMode } from '../../util';\nimport type { Gesture } from '@visactor/vrender-kits';\n\nconst delayMap = {\n debounce: debounce,\n throttle: throttle\n};\n\nexport interface ITriggerOption {\n delayType: IDelayType;\n delayTime: number;\n realTime: boolean;\n // 在某些场景中, 组件不应该触发zoom事件, 例如滚动分页的离散图例\n // 但在另一些场景中, 组件应该触发zoom事件, 例如缩略轴和滚动条\n // 当前代码逻辑中, 默认不触发组件zoom事件\n // 所以增设该配置, 用于允许组件触发zoom事件\n allowComponentZoom?: boolean;\n}\n\nexport type ZoomEventParams = { zoomDelta: number; zoomX: number; zoomY: number };\n\nexport type ZoomCallback = (params: ZoomEventParams, e: BaseEventParams['event']) => Record<string, any> | void;\n\nexport interface IZoomable {\n initZoomable: (evt: IEvent, mode?: RenderMode) => void;\n initZoomEventOfSeries: (s: ISeries, callback?: ZoomCallback) => any;\n initZoomEventOfRegions: (\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: ZoomCallback,\n option?: ITriggerOption\n ) => void;\n\n initScrollEventOfSeries: (\n s: ISeries,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void\n ) => any;\n initScrollEventOfRegions: (\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) => void;\n\n initDragEventOfSeries: (\n s: ISeries,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) => any;\n\n initDragEventOfRegions: (\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) => void;\n}\n\nexport class Zoomable implements IZoomable {\n private _clickEnable: boolean;\n\n private _option: IModelOption;\n\n private _zoomableTrigger: IZoomTrigger;\n\n private _eventObj: IEvent;\n\n private _renderMode: RenderMode;\n\n private _gestureController!: Gesture | null;\n\n private _isGestureListener: boolean = false;\n\n initZoomable(evt: IEvent, mode: RenderMode = RenderModeEnum['desktop-browser']) {\n this._eventObj = evt;\n this._renderMode = mode;\n this._gestureController = (this._option.getChart().getVGrammarView().renderer as any)._gestureController;\n this._isGestureListener = isMobileLikeMode(this._renderMode) || isMiniAppLikeMode(this._renderMode);\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n // hack 应该由事件系统做?或者事件系统有更好的方式处理这种交互冲突场景\n\n // 只在drag时屏蔽,而zoom、scroll时不屏蔽\n // drag move: 屏蔽\n // darg end 结束屏蔽\n // 屏蔽时:clickEnable应该为false,即其他逻辑不允许响应click\n this._clickEnable = true;\n this._zoomableTrigger = new (this._getZoomTriggerEvent('trigger') as any)();\n }\n }\n\n // event\n private _getZoomTriggerEvent(type: string): EventType | EventType[] {\n return getDefaultTriggerEventByMode(this._renderMode)[type];\n }\n\n private _zoomEventDispatch(\n params: BaseEventParams,\n regionOrSeries: IRegion | ISeries,\n callback?: ZoomCallback,\n allowComponentZoom?: boolean\n ) {\n if (!this._isGestureListener && !params.event) {\n return;\n }\n const event = this._isGestureListener ? params : params.event.clone();\n this._zoomableTrigger.parserZoomEvent(event);\n // FIXME: event类型目前不全\n const { zoomDelta, zoomX, zoomY, path } = event as any;\n\n // 不响应由组件触发的 zoom 事件(例如滚动分页的离散图例)\n if (!allowComponentZoom && !path.some((node: any) => node.name && node.name.includes('region'))) {\n return;\n }\n\n if (isNil(zoomDelta)) {\n return;\n }\n if (\n !pointInRect(\n {\n x: zoomX,\n y: zoomY\n },\n this._getRegionOrSeriesLayout(regionOrSeries),\n false\n )\n ) {\n return;\n }\n this._clearDragEvent(); // 防止drag 事件被同时触发,状态混乱\n this._zoomableTrigger.clearScroll(); // 防止scroll事件被同时触发,状态混乱\n\n let extendParams: ReturnType<typeof callback> = {};\n if (callback) {\n extendParams = callback({ zoomDelta, zoomX, zoomY }, event);\n }\n this._eventObj.emit('zoom', {\n scale: event.zoomDelta,\n scaleCenter: { x: event.zoomX, y: event.zoomY },\n ...extendParams,\n model: this\n } as unknown as ExtendEventParam);\n }\n\n private _getRegionOrSeriesLayout(rs: IRegion | ISeries) {\n if (rs.type !== 'region') {\n rs = (<ISeries>rs).getRegion();\n }\n const { x, y, width, height } = rs.layout.getLayout();\n return {\n x1: x,\n y1: y,\n x2: x + width,\n y2: y + height\n };\n }\n\n private _bindZoomEventAsRegion(\n eventObj: IEvent,\n regionOrSeries: IRegion | ISeries,\n callback?: ZoomCallback,\n option?: ITriggerOption\n ) {\n const delayType = option?.delayType ?? 'throttle';\n const delayTime = option?.delayTime ?? 0;\n\n const event = this._isGestureListener ? this._gestureController : eventObj;\n const zoomParams = this._isGestureListener\n ? [this._getZoomTriggerEvent('zoom')]\n : [this._getZoomTriggerEvent('zoom'), { level: Event_Bubble_Level.chart, consume: true }];\n const zoomEndParams: [string] | [string, EventQuery] = this._isGestureListener\n ? [this._getZoomTriggerEvent('zoomEnd') as string]\n : [this._getZoomTriggerEvent('zoomEnd') as string, { level: Event_Bubble_Level.chart, consume: false }];\n // pc端没有scrollEnd事件,所以漫游模式下scroll仅支持realTime\n (event as any).on(\n ...zoomEndParams,\n delayMap[delayType]((params: BaseEventParams) => {\n this._zoomableTrigger.clearZoom();\n }, delayTime) as any\n );\n\n (event as any).on(\n ...zoomParams,\n delayMap[delayType]((params: BaseEventParams) => {\n // if (realTime) {\n this._zoomEventDispatch(params, regionOrSeries, callback, option?.allowComponentZoom ?? false);\n // }\n }, delayTime) as any\n );\n }\n\n initZoomEventOfSeries(s: ISeries, callback?: ZoomCallback, option?: ITriggerOption) {\n if (this._option.disableTriggerEvent) {\n return;\n }\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n this._bindZoomEventAsRegion(s.event, s, callback, option);\n }\n }\n\n initZoomEventOfRegions(\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: ZoomCallback,\n option?: ITriggerOption\n ) {\n if (this._option.disableTriggerEvent) {\n return;\n }\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n regions.forEach(r => {\n if (filter) {\n r.getSeries().forEach(s => {\n if (filter(s)) {\n this._bindZoomEventAsRegion(s.event, s, callback, option);\n }\n });\n } else {\n this._bindZoomEventAsRegion(this._eventObj, r, callback, option);\n }\n });\n }\n }\n\n private _scrollEventDispatch(\n params: BaseEventParams,\n regionOrSeries: IRegion | ISeries,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => any\n ) {\n let stopBubble: boolean | undefined = false;\n if (!this._isGestureListener && (!params.event || this._option.disableTriggerEvent)) {\n return stopBubble;\n }\n const event = this._isGestureListener ? params : params.event;\n this._zoomableTrigger.parserScrollEvent(event);\n // FIXME: event类型目前不全\n const { scrollX, scrollY, canvasX, canvasY } = event as any;\n if (isNil(scrollX) && isNil(scrollY)) {\n return stopBubble;\n }\n if (\n !pointInRect(\n {\n x: canvasX,\n y: canvasY\n },\n this._getRegionOrSeriesLayout(regionOrSeries),\n false\n )\n ) {\n return stopBubble;\n }\n this._clearDragEvent(); // 防止drag 同时触发,状态混乱\n this._zoomableTrigger.clearZoom(); // 防止zoom同时触发,状态混乱\n\n if (callback) {\n stopBubble = callback({ scrollX, scrollY }, event as any);\n }\n this._eventObj.emit('scroll', {\n scrollX,\n scrollY,\n model: this\n } as unknown as ExtendEventParam);\n\n return stopBubble;\n }\n\n private _bindScrollEventAsRegion(\n eventObj: IEvent,\n regionOrSeries: IRegion | ISeries,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => any,\n option?: ITriggerOption\n ) {\n const delayType = option?.delayType ?? 'throttle';\n const delayTime = option?.delayTime ?? 0;\n\n const event = this._isGestureListener ? this._gestureController : eventObj;\n const scrollParams = this._isGestureListener\n ? [this._getZoomTriggerEvent('scroll')]\n : [this._getZoomTriggerEvent('scroll'), { level: Event_Bubble_Level.chart, consume: true }];\n const scrollEndParams = this._isGestureListener\n ? [this._getZoomTriggerEvent('scrollEnd')]\n : [this._getZoomTriggerEvent('scrollEnd'), { level: Event_Bubble_Level.chart, consume: false }];\n\n // pc端没有scrollEnd事件,所以漫游模式下scroll仅支持realTime\n (event as any).on(\n ...scrollEndParams,\n delayMap[delayType]((params: any) => {\n this._zoomableTrigger.clearScroll();\n }, delayTime)\n );\n\n (event as any).on(\n ...scrollParams,\n delayMap[delayType]((params: any) => {\n // if (realTime) {\n return this._scrollEventDispatch(params, regionOrSeries, callback);\n // }\n }, delayTime)\n );\n }\n\n initScrollEventOfSeries(\n s: ISeries,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n this._bindScrollEventAsRegion(s.event, s, callback, option);\n }\n }\n\n initScrollEventOfRegions(\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n if (this._option.disableTriggerEvent) {\n return;\n }\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n regions.forEach(r => {\n if (filter) {\n r.getSeries().forEach(s => {\n if (filter(s)) {\n this._bindScrollEventAsRegion(s.event, s, callback, option);\n }\n });\n } else {\n this._bindScrollEventAsRegion(this._eventObj, r, callback, option);\n }\n });\n }\n }\n\n private _bindDragEventAsRegion(\n eventObj: IEvent,\n regionOrSeries: IRegion | ISeries,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n eventObj.on(this._getZoomTriggerEvent('start') as string, { level: Event_Bubble_Level.chart }, (params: any) => {\n if (!params.event) {\n return;\n }\n\n const { event } = params;\n const shouldTrigger = pointInRect(\n {\n x: event.canvasX,\n y: event.canvasY\n },\n this._getRegionOrSeriesLayout(regionOrSeries),\n false\n );\n if (shouldTrigger) {\n this._handleDrag(params, callback, option);\n }\n });\n // hack 应该由事件系统做?或者事件系统有更好的方式处理这种交互冲突场景\n\n // 只在drag时屏蔽,而zoom、scrol时不屏蔽\n // drag move: 屏蔽\n // darg end 结束屏蔽\n // 屏蔽时:clickEnable应该为false,即其他逻辑不允许响应click\n eventObj.on('click', { level: Event_Bubble_Level.chart }, () => {\n return !this._clickEnable;\n });\n }\n\n initDragEventOfSeries(\n s: ISeries,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n if (this._option.disableTriggerEvent) {\n return;\n }\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n s.event.on(\n this._getZoomTriggerEvent('start') as string,\n { level: Event_Bubble_Level.model, filter: ({ model }) => model?.id === s.id },\n params => {\n this._handleDrag(params, callback, option);\n }\n );\n }\n }\n\n initDragEventOfRegions(\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n if (this._option.disableTriggerEvent) {\n return;\n }\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n regions.forEach(r => {\n if (filter) {\n r.getSeries().forEach(s => {\n if (filter(s)) {\n s.event.on(\n this._getZoomTriggerEvent('start') as string,\n { level: Event_Bubble_Level.model, filter: ({ model }) => model?.id === s.id },\n params => {\n this._handleDrag(params, callback);\n }\n );\n\n // click 事件需要在drag和zoom时被屏蔽\n // hack 应该由事件系统做?或者事件系统有更好的方式处理这种交互冲突场景\n\n // 只在drag时屏蔽,而zoom、scrol时不屏蔽\n // drag move: 屏蔽\n // darg end 结束屏蔽\n // 屏蔽时:clickEnable应该为false,即其他逻辑不允许响应click\n s.event.on(\n 'click',\n { level: Event_Bubble_Level.model, filter: ({ model }) => model?.id === s.id },\n () => {\n return !this._clickEnable;\n }\n );\n }\n });\n } else {\n this._bindDragEventAsRegion(this._eventObj, r, callback, option);\n }\n });\n }\n }\n\n private _handleDragMouseUp?: (params: ExtendEventParam) => void;\n private _handleDragMouseMove?: (params: ExtendEventParam) => void;\n\n protected _clearDragEvent() {\n const move = this._getZoomTriggerEvent('move') as string;\n const end = this._getZoomTriggerEvent('end') as string[];\n\n if (this._handleDragMouseMove) {\n this._eventObj.off(\n move,\n { level: Event_Bubble_Level.chart, source: Event_Source_Type.chart },\n this._handleDragMouseMove\n );\n this._handleDragMouseMove = undefined;\n }\n\n if (this._handleDragMouseUp) {\n end.forEach(endEventType => {\n this._eventObj.off(\n endEventType,\n { level: Event_Bubble_Level.chart, source: Event_Source_Type.chart },\n this._handleDragMouseUp\n );\n this._eventObj.allow(endEventType);\n });\n\n this._handleDragMouseUp = undefined;\n }\n }\n\n private isDragEnable(event: any) {\n if (this._isGestureListener && this._gestureController) {\n const events = (this._gestureController as any).cachedEvents;\n\n return !events || events.length < 2;\n }\n\n return true;\n }\n\n protected _handleDrag(\n params: ExtendEventParam,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n this._clearDragEvent();\n if (this._option.disableTriggerEvent) {\n return;\n }\n this._clickEnable = false;\n\n if (!this.isDragEnable(params.event)) {\n return;\n }\n this._zoomableTrigger.clearZoom(); // 防止zoom 事件被同时触发, 状态混乱\n this._zoomableTrigger.clearScroll(); // 防止 scroll 事件被同时触发, 状态混乱\n const delayType = option?.delayType ?? 'throttle';\n const delayTime = option?.delayTime ?? 0;\n const realTime = option?.realTime ?? true;\n const move = this._getZoomTriggerEvent('move') as string;\n const end = this._getZoomTriggerEvent('end') as string[];\n const event = params.event;\n let moveX = event.canvasX;\n let moveY = event.canvasY;\n let upX = event.canvasX;\n let upY = event.canvasY;\n\n this._handleDragMouseUp = delayMap[delayType]((params: ExtendEventParam) => {\n this._clickEnable = true;\n const event = params.event as any;\n const dx = event.canvasX - upX;\n const dy = event.canvasY - upY;\n const delta: [number, number] = [dx, dy];\n\n upX = event.canvasX;\n upY = event.canvasY;\n\n if (!realTime && callback) {\n callback(delta, params.event);\n }\n\n this._eventObj.emit('panend', {\n delta,\n model: this\n } as unknown as BaseEventParams);\n this._clearDragEvent();\n }, delayTime);\n\n this._handleDragMouseMove = delayMap[delayType]((params: ExtendEventParam) => {\n if (!this.isDragEnable(params.event)) {\n return;\n }\n this._clickEnable = false;\n end.forEach(endEventType => this._eventObj.prevent(endEventType, this._handleDragMouseUp as any));\n\n const event = params.event;\n const dx = event.canvasX - moveX;\n const dy = event.canvasY - moveY;\n const delta: [number, number] = [dx, dy];\n\n moveX = event.canvasX;\n moveY = event.canvasY;\n\n if (realTime && callback) {\n callback(delta, params.event);\n }\n this._eventObj.emit('panmove', {\n delta,\n model: this\n } as unknown as ExtendEventParam);\n }, delayTime);\n\n this._eventObj.on(\n move,\n { level: Event_Bubble_Level.chart, source: Event_Source_Type.chart },\n this._handleDragMouseMove as any\n );\n end.forEach(endEventType => {\n this._eventObj.on(\n endEventType,\n { level: Event_Bubble_Level.chart, source: Event_Source_Type.chart },\n this._handleDragMouseUp\n );\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/interaction/zoom/zoomable.ts"],"names":[],"mappings":"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","file":"zoomable.js","sourcesContent":["import type { IModelOption } from './../../model/interface';\n/* eslint-disable no-duplicate-imports */\nimport { debounce, isNil, pointInRect, throttle } from '@visactor/vutils';\nimport type { BaseEventParams, EventQuery, EventType, ExtendEventParam, IEvent } from '../../event/interface';\nimport type { IRegion } from '../../region/interface';\nimport type { RenderMode } from '../../typings/spec';\nimport { RenderModeEnum } from '../../typings/spec/common';\nimport { getDefaultTriggerEventByMode } from '../../component/common/trigger/config';\nimport type { IZoomTrigger } from '../../component/common/trigger/interface';\nimport type { ISeries } from '../../series/interface';\nimport { Event_Bubble_Level, Event_Source_Type } from '../../constant/event';\nimport type { IDelayType } from '../../typings/event';\nimport { isMiniAppLikeMode, isMobileLikeMode } from '../../util';\nimport type { Gesture } from '@visactor/vrender-kits';\n\nconst delayMap = {\n debounce: debounce,\n throttle: throttle\n};\n\nexport interface ITriggerOption {\n delayType: IDelayType;\n delayTime: number;\n realTime: boolean;\n // 在某些场景中, 组件不应该触发zoom事件, 例如滚动分页的离散图例\n // 但在另一些场景中, 组件应该触发zoom事件, 例如缩略轴和滚动条\n // 当前代码逻辑中, 默认不触发组件zoom事件\n // 所以增设该配置, 用于允许组件触发zoom事件\n allowComponentZoom?: boolean;\n}\n\nexport type ZoomEventParams = { zoomDelta: number; zoomX: number; zoomY: number };\n\nexport type ZoomCallback = (params: ZoomEventParams, e: BaseEventParams['event']) => Record<string, any> | void;\n\nexport interface IZoomable {\n initZoomable: (evt: IEvent, mode?: RenderMode) => void;\n initZoomEventOfSeries: (s: ISeries, callback?: ZoomCallback) => any;\n initZoomEventOfRegions: (\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: ZoomCallback,\n option?: ITriggerOption\n ) => void;\n\n initScrollEventOfSeries: (\n s: ISeries,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void\n ) => any;\n initScrollEventOfRegions: (\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) => void;\n\n initDragEventOfSeries: (\n s: ISeries,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) => any;\n\n initDragEventOfRegions: (\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) => void;\n}\n\nexport class Zoomable implements IZoomable {\n private _clickEnable: boolean;\n\n private _option: IModelOption;\n\n private _zoomableTrigger: IZoomTrigger;\n\n private _eventObj: IEvent;\n\n private _renderMode: RenderMode;\n\n private _gestureController!: Gesture | null;\n\n private _isGestureListener: boolean = false;\n\n initZoomable(evt: IEvent, mode: RenderMode = RenderModeEnum['desktop-browser']) {\n this._eventObj = evt;\n this._renderMode = mode;\n this._gestureController = (this._option.getChart().getVGrammarView().renderer as any)._gestureController;\n this._isGestureListener = isMobileLikeMode(this._renderMode) || isMiniAppLikeMode(this._renderMode);\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n // hack 应该由事件系统做?或者事件系统有更好的方式处理这种交互冲突场景\n\n // 只在drag时屏蔽,而zoom、scroll时不屏蔽\n // drag move: 屏蔽\n // darg end 结束屏蔽\n // 屏蔽时:clickEnable应该为false,即其他逻辑不允许响应click\n this._clickEnable = true;\n this._zoomableTrigger = new (this._getZoomTriggerEvent('trigger') as any)();\n }\n }\n\n // event\n private _getZoomTriggerEvent(type: string): EventType | EventType[] {\n return getDefaultTriggerEventByMode(this._renderMode)[type];\n }\n\n private _zoomEventDispatch(\n params: BaseEventParams,\n regionOrSeries: IRegion | ISeries,\n callback?: ZoomCallback,\n allowComponentZoom?: boolean\n ) {\n if (!this._isGestureListener && !params.event) {\n return;\n }\n const event = this._isGestureListener ? params : params.event.clone();\n this._zoomableTrigger.parserZoomEvent(event);\n // FIXME: event类型目前不全\n const { zoomDelta, zoomX, zoomY, path } = event as any;\n\n // 不响应由组件触发的 zoom 事件(例如滚动分页的离散图例)\n if (!allowComponentZoom && !path.some((node: any) => node.name && node.name.includes('region'))) {\n return;\n }\n\n if (isNil(zoomDelta)) {\n return;\n }\n if (\n !pointInRect(\n {\n x: zoomX,\n y: zoomY\n },\n this._getRegionOrSeriesLayout(regionOrSeries),\n false\n )\n ) {\n return;\n }\n this._clearDragEvent(); // 防止drag 事件被同时触发,状态混乱\n this._zoomableTrigger.clearScroll(); // 防止scroll事件被同时触发,状态混乱\n\n let extendParams: ReturnType<typeof callback> = {};\n if (callback) {\n extendParams = callback({ zoomDelta, zoomX, zoomY }, event);\n }\n this._eventObj.emit('zoom', {\n scale: event.zoomDelta,\n scaleCenter: { x: event.zoomX, y: event.zoomY },\n ...extendParams,\n model: this\n } as unknown as ExtendEventParam);\n }\n\n private _getRegionOrSeriesLayout(rs: IRegion | ISeries) {\n if (rs.type !== 'region') {\n rs = (<ISeries>rs).getRegion();\n }\n const { x, y, width, height } = rs.layout.getLayout();\n return {\n x1: x,\n y1: y,\n x2: x + width,\n y2: y + height\n };\n }\n\n private _bindZoomEventAsRegion(\n eventObj: IEvent,\n regionOrSeries: IRegion | ISeries,\n callback?: ZoomCallback,\n option?: ITriggerOption\n ) {\n const delayType = option?.delayType ?? 'throttle';\n const delayTime = option?.delayTime ?? 0;\n\n const event = this._isGestureListener ? this._gestureController : eventObj;\n const zoomParams = this._isGestureListener\n ? [this._getZoomTriggerEvent('zoom')]\n : [this._getZoomTriggerEvent('zoom'), { level: Event_Bubble_Level.chart, consume: true }];\n const zoomEndParams: [string] | [string, EventQuery] = this._isGestureListener\n ? [this._getZoomTriggerEvent('zoomEnd') as string]\n : [this._getZoomTriggerEvent('zoomEnd') as string, { level: Event_Bubble_Level.chart, consume: false }];\n // pc端没有scrollEnd事件,所以漫游模式下scroll仅支持realTime\n (event as any).on(\n ...zoomEndParams,\n delayMap[delayType]((params: BaseEventParams) => {\n this._zoomableTrigger.clearZoom();\n }, delayTime) as any\n );\n\n (event as any).on(\n ...zoomParams,\n delayMap[delayType]((params: BaseEventParams) => {\n // if (realTime) {\n this._zoomEventDispatch(params, regionOrSeries, callback, option?.allowComponentZoom ?? false);\n // }\n }, delayTime) as any\n );\n }\n\n initZoomEventOfSeries(s: ISeries, callback?: ZoomCallback, option?: ITriggerOption) {\n if (this._option.disableTriggerEvent) {\n return;\n }\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n this._bindZoomEventAsRegion(s.event, s, callback, option);\n }\n }\n\n initZoomEventOfRegions(\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: ZoomCallback,\n option?: ITriggerOption\n ) {\n if (this._option.disableTriggerEvent) {\n return;\n }\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n regions.forEach(r => {\n if (filter) {\n r.getSeries().forEach(s => {\n if (filter(s)) {\n this._bindZoomEventAsRegion(s.event, s, callback, option);\n }\n });\n } else {\n this._bindZoomEventAsRegion(this._eventObj, r, callback, option);\n }\n });\n }\n }\n\n private _scrollEventDispatch(\n params: BaseEventParams,\n regionOrSeries: IRegion | ISeries,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => any\n ) {\n let stopBubble: boolean | undefined = false;\n if (!this._isGestureListener && (!params.event || this._option.disableTriggerEvent)) {\n return stopBubble;\n }\n const event = this._isGestureListener ? params : params.event;\n this._zoomableTrigger.parserScrollEvent(event);\n // FIXME: event类型目前不全\n const { scrollX, scrollY, canvasX, canvasY } = event as any;\n if (isNil(scrollX) && isNil(scrollY)) {\n return stopBubble;\n }\n if (\n !pointInRect(\n {\n x: canvasX,\n y: canvasY\n },\n this._getRegionOrSeriesLayout(regionOrSeries),\n false\n )\n ) {\n return stopBubble;\n }\n this._clearDragEvent(); // 防止drag 同时触发,状态混乱\n this._zoomableTrigger.clearZoom(); // 防止zoom同时触发,状态混乱\n\n if (callback) {\n stopBubble = callback({ scrollX, scrollY }, event as any);\n }\n this._eventObj.emit('scroll', {\n scrollX,\n scrollY,\n model: this\n } as unknown as ExtendEventParam);\n\n return stopBubble;\n }\n\n private _bindScrollEventAsRegion(\n eventObj: IEvent,\n regionOrSeries: IRegion | ISeries,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => any,\n option?: ITriggerOption\n ) {\n const delayType = option?.delayType ?? 'throttle';\n const delayTime = option?.delayTime ?? 0;\n\n const event = this._isGestureListener ? this._gestureController : eventObj;\n const scrollParams = this._isGestureListener\n ? [this._getZoomTriggerEvent('scroll')]\n : [this._getZoomTriggerEvent('scroll'), { level: Event_Bubble_Level.chart, consume: true }];\n const scrollEndParams = this._isGestureListener\n ? [this._getZoomTriggerEvent('scrollEnd')]\n : [this._getZoomTriggerEvent('scrollEnd'), { level: Event_Bubble_Level.chart, consume: false }];\n\n // pc端没有scrollEnd事件,所以漫游模式下scroll仅支持realTime\n (event as any).on(\n ...scrollEndParams,\n delayMap[delayType]((params: any) => {\n this._zoomableTrigger.clearScroll();\n }, delayTime)\n );\n\n (event as any).on(\n ...scrollParams,\n delayMap[delayType]((params: any) => {\n // if (realTime) {\n return this._scrollEventDispatch(params, regionOrSeries, callback);\n // }\n }, delayTime)\n );\n }\n\n initScrollEventOfSeries(\n s: ISeries,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n this._bindScrollEventAsRegion(s.event, s, callback, option);\n }\n }\n\n initScrollEventOfRegions(\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (params: { scrollX: number; scrollY: number }, e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n if (this._option.disableTriggerEvent) {\n return;\n }\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n regions.forEach(r => {\n if (filter) {\n r.getSeries().forEach(s => {\n if (filter(s)) {\n this._bindScrollEventAsRegion(s.event, s, callback, option);\n }\n });\n } else {\n this._bindScrollEventAsRegion(this._eventObj, r, callback, option);\n }\n });\n }\n }\n\n private _bindDragEventAsRegion(\n eventObj: IEvent,\n regionOrSeries: IRegion | ISeries,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n eventObj.on(this._getZoomTriggerEvent('start') as string, { level: Event_Bubble_Level.chart }, (params: any) => {\n if (!params.event) {\n return;\n }\n\n const { event } = params;\n const shouldTrigger = pointInRect(\n {\n x: event.canvasX,\n y: event.canvasY\n },\n this._getRegionOrSeriesLayout(regionOrSeries),\n false\n );\n if (shouldTrigger) {\n this._handleDrag(params, callback, option);\n }\n });\n // hack 应该由事件系统做?或者事件系统有更好的方式处理这种交互冲突场景\n\n // 只在drag时屏蔽,而zoom、scrol时不屏蔽\n // drag move: 屏蔽\n // darg end 结束屏蔽\n // 屏蔽时:clickEnable应该为false,即其他逻辑不允许响应click\n eventObj.on('click', { level: Event_Bubble_Level.chart }, () => {\n return !this._clickEnable;\n });\n }\n\n initDragEventOfSeries(\n s: ISeries,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n if (this._option.disableTriggerEvent) {\n return;\n }\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n s.event.on(\n this._getZoomTriggerEvent('start') as string,\n { level: Event_Bubble_Level.model, filter: ({ model }) => model?.id === s.id },\n params => {\n this._handleDrag(params, callback, option);\n }\n );\n }\n }\n\n initDragEventOfRegions(\n regions: IRegion[],\n filter?: (s: ISeries) => boolean,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n if (this._option.disableTriggerEvent) {\n return;\n }\n if (getDefaultTriggerEventByMode(this._renderMode)) {\n regions.forEach(r => {\n if (filter) {\n r.getSeries().forEach(s => {\n if (filter(s)) {\n s.event.on(\n this._getZoomTriggerEvent('start') as string,\n { level: Event_Bubble_Level.model, filter: ({ model }) => model?.id === s.id },\n params => {\n this._handleDrag(params, callback);\n }\n );\n\n // click 事件需要在drag和zoom时被屏蔽\n // hack 应该由事件系统做?或者事件系统有更好的方式处理这种交互冲突场景\n\n // 只在drag时屏蔽,而zoom、scrol时不屏蔽\n // drag move: 屏蔽\n // darg end 结束屏蔽\n // 屏蔽时:clickEnable应该为false,即其他逻辑不允许响应click\n s.event.on(\n 'click',\n { level: Event_Bubble_Level.model, filter: ({ model }) => model?.id === s.id },\n () => {\n return !this._clickEnable;\n }\n );\n }\n });\n } else {\n this._bindDragEventAsRegion(this._eventObj, r, callback, option);\n }\n });\n }\n }\n\n private _handleDragMouseUp?: (params: ExtendEventParam) => void;\n private _handleDragMouseMove?: (params: ExtendEventParam) => void;\n\n protected _clearDragEvent() {\n const move = this._getZoomTriggerEvent('move') as string;\n const end = this._getZoomTriggerEvent('end') as string[];\n\n if (this._handleDragMouseMove) {\n this._eventObj.off(\n move,\n { level: Event_Bubble_Level.chart, source: Event_Source_Type.chart },\n this._handleDragMouseMove\n );\n this._handleDragMouseMove = undefined;\n }\n\n if (this._handleDragMouseUp) {\n end.forEach(endEventType => {\n this._eventObj.off(\n endEventType,\n { level: Event_Bubble_Level.chart, source: Event_Source_Type.chart },\n this._handleDragMouseUp\n );\n this._eventObj.allow(endEventType);\n });\n\n this._handleDragMouseUp = undefined;\n }\n }\n\n private isDragEnable(event: any) {\n if (this._isGestureListener && this._gestureController) {\n const events = (this._gestureController as any).cachedEvents;\n\n return !events || events.length < 2;\n }\n\n return true;\n }\n\n protected _handleDrag(\n params: ExtendEventParam,\n callback?: (delta: [number, number], e: BaseEventParams['event']) => void,\n option?: ITriggerOption\n ) {\n this._clearDragEvent();\n if (this._option.disableTriggerEvent) {\n return;\n }\n this._clickEnable = false;\n\n if (!this.isDragEnable(params.event)) {\n return;\n }\n this._zoomableTrigger.clearZoom(); // 防止zoom 事件被同时触发, 状态混乱\n this._zoomableTrigger.clearScroll(); // 防止 scroll 事件被同时触发, 状态混乱\n const delayType = option?.delayType ?? 'throttle';\n const delayTime = option?.delayTime ?? 0;\n const realTime = option?.realTime ?? true;\n const move = this._getZoomTriggerEvent('move') as string;\n const end = this._getZoomTriggerEvent('end') as string[];\n const event = params.event;\n let moveX = event.canvasX;\n let moveY = event.canvasY;\n let upX = event.canvasX;\n let upY = event.canvasY;\n\n this._handleDragMouseUp = delayMap[delayType]((params: ExtendEventParam) => {\n this._clickEnable = true;\n const event = params.event as any;\n const dx = event.canvasX - upX;\n const dy = event.canvasY - upY;\n const delta: [number, number] = [dx, dy];\n\n upX = event.canvasX;\n upY = event.canvasY;\n\n if (!realTime && callback) {\n callback(delta, params.event);\n }\n\n this._eventObj.emit('panend', {\n delta,\n model: this\n } as unknown as BaseEventParams);\n this._clearDragEvent();\n }, delayTime);\n\n this._handleDragMouseMove = delayMap[delayType]((params: ExtendEventParam) => {\n if (!this.isDragEnable(params.event)) {\n return;\n }\n this._clickEnable = false;\n end.forEach(endEventType => {\n this._eventObj.prevent(endEventType, {\n handler: this._handleDragMouseUp as any,\n level: Event_Bubble_Level.chart // 这里的level 与下面 end 事件的默认 level 一致\n });\n });\n\n const event = params.event;\n const dx = event.canvasX - moveX;\n const dy = event.canvasY - moveY;\n const delta: [number, number] = [dx, dy];\n\n moveX = event.canvasX;\n moveY = event.canvasY;\n\n if (realTime && callback) {\n callback(delta, params.event);\n }\n this._eventObj.emit('panmove', {\n delta,\n model: this\n } as unknown as ExtendEventParam);\n }, delayTime);\n\n this._eventObj.on(\n move,\n { level: Event_Bubble_Level.chart, source: Event_Source_Type.chart },\n this._handleDragMouseMove as any\n );\n end.forEach(endEventType => {\n this._eventObj.on(\n endEventType,\n { level: Event_Bubble_Level.chart, source: Event_Source_Type.chart },\n this._handleDragMouseUp\n );\n });\n }\n}\n"]}
|
|
@@ -109,7 +109,7 @@ export type BuildInTransformOptions = {
|
|
|
109
109
|
export interface IFieldsMeta {
|
|
110
110
|
alias?: string;
|
|
111
111
|
domain?: StringOrNumber[];
|
|
112
|
-
lockStatisticsByDomain?: boolean;
|
|
112
|
+
lockStatisticsByDomain?: boolean | 'onlyFull';
|
|
113
113
|
type?: 'ordinal' | 'linear';
|
|
114
114
|
sortIndex?: number;
|
|
115
115
|
sortReverse?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/typings/spec/common.ts"],"names":[],"mappings":";;;AAkIA,IAAY,cAWX;AAXD,WAAY,cAAc;IACxB,qDAAqC,CAAA;IACrC,mDAAmC,CAAA;IACnC,+BAAe,CAAA;IACf,mCAAmB,CAAA;IACnB,qCAAqB,CAAA;IACrB,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,qCAAqB,CAAA;IACrB,qDAAqC,CAAA;IACrC,+BAAe,CAAA;AACjB,CAAC,EAXW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAWzB","file":"common.js","sourcesContent":["import type { IVChart } from './../../core/interface';\nimport type { IFillMarkSpec, IImageMarkSpec } from '../visual';\nimport type { LayoutCallBack } from '../../layout/interface';\nimport type { IElement, srIOption3DType } from '@visactor/vgrammar-core';\nimport type {\n DataSet,\n DataView,\n ISimplifyOptions,\n IFieldsOptions,\n IFilterOptions,\n IFoldOptions,\n IDsvParserOptions\n} from '@visactor/vdataset';\nimport type { RegionSpec } from '../../region/interface';\nimport type { IHoverSpec, ISelectSpec, IInteractionSpec } from '../../interaction/interface';\nimport type { IRenderOption } from '../../compile/interface';\nimport type { ISeriesTooltipSpec, ITooltipSpec } from '../../component/tooltip/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ILayoutSpec } from '../../layout/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type {\n ConvertToMarkStyleSpec,\n IArc3dMarkSpec,\n IArcMarkSpec,\n IAreaMarkSpec,\n IBoxPlotMarkSpec,\n ICommonSpec,\n IGroupMarkSpec,\n ILineMarkSpec,\n ILinkPathMarkSpec,\n IPathMarkSpec,\n IPolygonMarkSpec,\n IPyramid3dMarkSpec,\n IRect3dMarkSpec,\n IRectMarkSpec,\n IRuleMarkSpec,\n ISymbolMarkSpec,\n IRippleMarkSpec,\n ITextMarkSpec,\n IVisualSpecScale\n} from '../visual';\nimport type { StateValue } from '../../compile/mark/interface';\nimport type { ISeriesStyle, SeriesType } from '../../series/interface';\nimport type { Datum, StringOrNumber } from '../common';\nimport type { IInvalidType } from '../data';\nimport type { IAnimationSpec, IMorphSeriesSpec } from '../../animation/spec';\nimport type { IPlayer } from '../../component/player/interface';\nimport type { IMarkProgressiveConfig, MarkTypeEnum } from '../../mark/interface';\nimport type { IDataZoomSpec } from '../../component/data-zoom/data-zoom/interface';\nimport type { IScrollBarSpec } from '../../component/data-zoom/scroll-bar/interface';\nimport type { ICrosshairSpec } from '../../component/crosshair/interface';\nimport type { ITheme } from '../../theme/interface';\nimport type { ITitleSpec } from '../../component/title/interface';\nimport type { IBrushSpec } from '../../component/brush/interface';\nimport type { ITotalLabelSpec } from '../../component/label/interface';\nimport type { ILegendSpec } from '../../component/legend/interface';\nimport type { ILayoutOrientPadding, ILayoutPaddingSpec } from '../layout';\nimport type { IColor, ICustomPath2D, IRichTextCharacter } from '@visactor/vrender-core';\nimport type { ICommonAxisSpec } from '../../component/axis/interface';\nimport type { IMediaQuerySpec } from './media-query';\nimport type { IModelSpec } from '../../model/interface';\n\nexport type IChartPadding = ILayoutOrientPadding | number;\n\n/** chart option */\nexport interface IInitOption extends Omit<IRenderOption, 'pluginList'> {\n /**\n * **仅生效于浏览器环境。**\n * 图表挂载的父容器,可以直接指定容器 id,也可以传入 dom 对象\n */\n dom?: string | HTMLElement;\n /**\n * 除去选择 dom 属性进行挂载父容器,也可以使用 renderCanvas 属性直接传入 canvas 实例/ canvasId\n * 小程序/小组件环境请直接传入 id\n */\n renderCanvas?: string | HTMLCanvasElement;\n /** 数据集 */\n dataSet?: DataSet;\n /** 是否自适应容器大小 */\n autoFit?: boolean;\n /**\n * 性能测试钩子\n */\n performanceHook?: IPerformanceHook;\n /**\n * 是否开启动画\n */\n animation?: boolean;\n /**\n * 3d配置\n */\n options3d?: srIOption3DType;\n\n /**\n * 自定义布局函数\n */\n layout?: LayoutCallBack;\n\n /**\n * 当文本省略时,鼠标 hover 到文本上时是否显示 poptip\n * @default true\n */\n poptip?: boolean;\n\n /**\n * 报错的回调函数\n * @since 1.2.0\n */\n onError?: (...args: any[]) => void;\n\n /**\n * 默认主题(支持完整主题对象或者主题名称,主题名称需要提前在 `ThemeManager` 中注册)\n * @since 1.3.0\n */\n theme?: string | ITheme;\n\n /**\n * 是否关闭交互效果\n * @since 1.9.0\n * @default false\n */\n disableTriggerEvent?: boolean;\n /**\n * 当自动响应容器resize 事件时,触发resize 的间隔时长,单位毫秒\n * @since 1.12.5\n * @default 100\n */\n resizeDelay?: number;\n}\n\nexport enum RenderModeEnum {\n 'desktop-browser' = 'desktop-browser',\n 'mobile-browser' = 'mobile-browser',\n 'node' = 'node',\n 'worker' = 'worker',\n 'miniApp' = 'miniApp',\n 'wx' = 'wx',\n 'tt' = 'tt',\n 'harmony' = 'harmony',\n 'desktop-miniApp' = 'desktop-miniApp',\n 'lynx' = 'lynx'\n}\nexport type RenderMode = keyof typeof RenderModeEnum;\n\n/** chart spec */\nexport interface IChartSpec {\n /** 图表类型 */\n type: string;\n /** 数据 */\n data?: IData;\n /** 画布宽度 */\n width?: number;\n /** 画布高度 */\n height?: number;\n /**\n * 图表宽高是否自适应容器,浏览器环境下默认为 true。\n * 该配置的优先级高于构造函数中的 autoFit 配置。\n * 如果用户配置了 width,则以用户配置的 width 为准,height 同理。\n */\n autoFit?: boolean;\n /**\n * 图表整体 padding 设置\n */\n padding?: ILayoutPaddingSpec;\n /**\n * 图表色系配置\n */\n color?: string[] | Omit<IVisualSpecScale<unknown, string>, 'id'>;\n /**\n * 系列\n * @description 仅在组合图中使用, 文档中除组合图外均未透出该配置\n */\n series?: ISeriesSpec[];\n /**\n * 系列样式\n * @description 仅在图表配置了seriesField时生效\n */\n seriesStyle?: ISeriesStyle;\n\n /**\n * 自动关闭动画的阀值,对应的是单系列data的长度\n * @since 1.2.0\n */\n animationThreshold?: number;\n\n /** hover 交互 */\n hover?: boolean | IHoverSpec;\n /** select 交互 */\n select?: boolean | ISelectSpec;\n\n /** region配置 */\n region?: RegionSpec[];\n /** 图表标题配置 */\n title?: ITitleSpec;\n /** 布局配置 */\n layout?: ILayoutSpec;\n /** 图例配置 */\n legends?: ILegendSpec | ILegendSpec[];\n /** 十字辅助线配置 */\n crosshair?: ICrosshairSpec | ICrosshairSpec[];\n /** tooltip配置 */\n tooltip?: ITooltipSpec;\n /** 播放器配置 */\n player?: IPlayer;\n /** 缩略轴配置 */\n dataZoom?: IDataZoomSpec | IDataZoomSpec[];\n /** 滚动条配置 */\n scrollBar?: IScrollBarSpec | IScrollBarSpec[];\n /** 框选配置 */\n brush?: IBrushSpec;\n /** 全局 scale 配置 */\n scales?: IVisualSpecScale<unknown, unknown>[];\n /** 自定义mark */\n customMark?: ICustomMarkSpec<EnableMarkType>[];\n /** 轴 */\n axes?: ICommonAxisSpec[];\n /**\n * 图表上的主题定义。\n * 可以直接配置主题名,前提是该主题名已经注册\n */\n theme?: Omit<ITheme, 'name'> | string;\n /**\n * 图表背景色配置,优先级高于构造函数中的 background 配置\n * 自1.11.6版本支持渐变色对象的配置\n */\n background?: IBackgroundSpec;\n\n // TODO:后续开放,现在仍有问题\n // poptip?: PopTipAttributes;\n // TODO: 补充动画配置\n\n /**\n * 堆积时是否逆序\n * @default false\n * @since 1.4.0\n */\n stackInverse?: boolean;\n /**\n * 堆积时是否排序\n * @default false\n * @since 1.10.4\n */\n stackSort?: boolean;\n /**\n * 媒体查询配置\n * @since 1.8.0\n */\n media?: IMediaQuerySpec;\n}\n\nexport type IBackgroundSpec = IColor | ConvertToMarkStyleSpec<IGroupMarkSpec>;\n\n/** data */\nexport type IDataType = IDataValues | DataView;\nexport type IData = IDataType | IDataType[];\nexport type DataKeyType = string | string[] | ((data: Datum, index: number) => string);\nexport type BuildInTransformOptions =\n | {\n /** 地理数据简化 */\n type: 'simplify';\n options: ISimplifyOptions;\n }\n | {\n /** 数据维度处理,包括排序,逆序,数据筛选能力 */\n type: 'fields';\n options: IFieldsOptions;\n }\n | {\n /** 使用回调的自定义筛选 */\n type: 'filter';\n options: IFilterOptions;\n }\n | {\n /** 数据展开 */\n type: 'fold';\n options: IFoldOptions;\n };\n\nexport interface IFieldsMeta {\n /** TODO: 字段通用format, 暂时先不支持 */\n // format?: (datum: Datum, index: number) => unknown;\n /** 字段别名 */\n alias?: string;\n /** 字段取值范围 */\n domain?: StringOrNumber[];\n /** 是否使用 domain 锁定统计信息。默认为 false */\n lockStatisticsByDomain?: boolean;\n /** 连续型 还是 离散型 */\n type?: 'ordinal' | 'linear';\n /** 排序顺序 不设置的话当前维度不进行排序 */\n sortIndex?: number;\n /** 排序时是否反转 默认为 false */\n sortReverse?: boolean;\n}\n\nexport interface SheetParseOptions extends CommonParseOptions {\n /**\n * 特定类型的数据,支持以下类型:\n * - csv: 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。\n * - dsv: 分隔值(Delimiter-Separated Values,DSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。\n * - tsv: 制表符分隔值(Tab-Separated Values,TSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。\n */\n type: 'csv' | 'dsv' | 'tsv';\n /**\n * 具体的解析配置\n */\n options?: IDsvParserOptions;\n}\n\nexport interface CommonParseOptions {\n /**\n * 是否需要对数据进行 clone,默认为 true。\n * 如果考虑性能,你可以将其关闭,但是这会带了一些副作用,即我们会对传入的数据进行修改(不会对原有字段及值修改,只会在原有数据基础上添加一些字段)。\n * @default true\n * @since 1.3.0\n */\n clone?: boolean;\n}\n\nexport interface IDataValues {\n /**\n * 数据唯一标识\n */\n id?: StringOrNumber;\n /**\n * 数据\n */\n values: Datum[] | string;\n /**\n * 引用的数据索引\n */\n fromDataIndex?: number;\n /**\n * 引用的数据 id\n */\n fromDataId?: StringOrNumber;\n /**\n * 数据 transform 配置\n */\n transforms?: BuildInTransformOptions[];\n /**\n * 数据字段相关配置\n */\n fields?: Record<\n /** 字段key */\n string,\n IFieldsMeta\n >;\n /**\n * 数据解析器配置\n */\n parser?: SheetParseOptions | CommonParseOptions;\n}\n\nexport type IHierarchyNodeData = {\n value?: number;\n children?: IHierarchyNodeData[];\n} & Datum;\n\nexport interface IHierarchyDataValues extends Omit<IDataValues, 'values'> {\n values: IHierarchyNodeData;\n}\n\nexport type IHierarchyData = DataView | IHierarchyDataValues;\n\n/** series */\nexport interface ISeriesSpec extends IInteractionSpec {\n /** 系列类型 */\n type: SeriesType;\n\n /** 系列名称 */\n name?: string;\n\n /** 用户自定义的 series id */\n id?: StringOrNumber;\n /**\n * 系列数据\n * @description 系列可以配置自身的数据,也可以从chart.data中获取数据\n */\n data?: IDataType;\n /**\n * 系列关联的数据索引\n * @default 0\n */\n dataIndex?: number;\n /**\n * 系列关联的数据id\n */\n dataId?: StringOrNumber;\n /**\n * dataKey用于绑定数据与Mark的关系, 该配置在动画中非常重要.\n */\n dataKey?: DataKeyType;\n\n /**\n * 系列关联的region索引\n * @default 0\n */\n regionIndex?: number;\n /** 系列关联的region id */\n regionId?: StringOrNumber;\n /**\n * 分组字段\n */\n seriesField?: string;\n /**\n * 系列样式\n * @description 仅在图表配置了seriesField时生效\n */\n seriesStyle?: ISeriesStyle;\n\n /** 是否对数据进行堆叠处理 */\n stack?: boolean;\n\n /**\n * 堆叠时的分组值\n * stackValue 相等的系列将在一起堆积。没有配置的系列将在一组\n * @since 1.4.0\n */\n stackValue?: StringOrNumber;\n\n /** 堆叠汇总标签\n * @since 1.3.0\n */\n totalLabel?: ITotalLabelSpec;\n\n /** 是否对数据进行百分比处理 */\n percent?: boolean;\n\n /** 是否围绕中心轴偏移轮廓 */\n stackOffsetSilhouette?: boolean;\n\n /**\n * 非合规数据点连接方式\n * @description null,undefined等非法数据点连接方式。\n * @default 'break'\n * 'break'指在该数据点处断开\n * 'link' 指忽略该点保持连续\n * 'zero' 指该点默认数值为0\n * 'ignore' 指不处理\n */\n invalidType?: IInvalidType;\n\n /** 系列对应的提示信息设置,优先级高于图表的tooltip配置 */\n tooltip?: ISeriesTooltipSpec;\n\n /**\n * 是否开启系列动画\n */\n animation?: boolean;\n /**\n * 自动关闭动画的阀值,对应的是单系列data的长度\n * @since 1.2.0\n */\n animationThreshold?: number;\n\n /**\n * 是否支持3d视角\n */\n support3d?: boolean;\n /**\n * morph 动画配置\n */\n morph?: IMorphSeriesSpec;\n\n /**\n * 系列的扩展mark,能够获取系列上的数据\n */\n extensionMark?: (IExtensionMarkSpec<Exclude<EnableMarkType, 'group'>> | IExtensionGroupMarkSpec)[];\n\n /**\n * 今当通过`series`配置的时候,才会生效\n */\n zIndex?: number;\n\n /**\n * series background\n * 作用是支持系列的图形对系列背景进行 mask,或者切分等效果。不是作为背景图\n * 暂时不开放api,避免出现break change\n */\n // background?: IBackgroundSpec;\n}\n\nexport type IChartExtendsSeriesSpec<T extends ISeriesSpec> = Omit<T, 'data' | 'morph' | 'stackValue' | 'tooltip'>;\n\nexport type AdaptiveSpec<T, K extends keyof any> = {\n [key in Exclude<keyof T, K>]: T[key];\n} & { [key in K]: any };\n\nexport interface IMarkStateFullSpec<T> extends Record<string, IMarkStateSpec<T> | IMarkStateStyleSpec<T>> {\n /**\n * 正常状态下图元的样式设置\n */\n normal?: IMarkStateSpec<T> | IMarkStateStyleSpec<T>;\n /**\n * hover状态下图元的样式设置\n */\n hover?: IMarkStateSpec<T> | IMarkStateStyleSpec<T>;\n /**\n * 没有被hover的状态下图元的样式设置\n */\n hover_reverse?: IMarkStateSpec<T> | IMarkStateStyleSpec<T>;\n /**\n * 选中状态下图元的样式设置\n */\n selected?: IMarkStateSpec<T> | IMarkStateStyleSpec<T>;\n /**\n * 没有被选中的状态下图元的样式设置\n */\n selected_reverse?: IMarkStateSpec<T> | IMarkStateStyleSpec<T>;\n}\n\n/** markSpec */\nexport type IMarkSpec<T extends ICommonSpec = ICommonSpec> = {\n /**\n * 用户id\n */\n id?: StringOrNumber;\n /**\n * 是否响应交互\n */\n interactive?: boolean;\n // /**\n // * 是否会被region区域裁减\n // * @todo 暂未支持\n // */\n // clip?: boolean;\n /**\n * 与其他mark元素的层级\n */\n zIndex?: number;\n /**\n * mark 层 是否显示配置\n */\n visible?: boolean;\n /** 默认样式设置 */\n style?: ConvertToMarkStyleSpec<T>;\n /** 不同状态下的样式配置 */\n state?: IMarkStateFullSpec<T>;\n /**\n * 状态排序方法,默认状态都是按照添加的顺序处理的,如果有特殊的需求,需要指定状态顺序,可以通过这个方法实现\n * @since 1.9.0\n */\n stateSort?: (stateA: string, stateB: string) => number;\n\n /*\n * 是否是3d视角的mark\n */\n support3d?: boolean;\n /* customized shape of mark */\n customShape?: (datum: any[], attrs: any, path: ICustomPath2D) => ICustomPath2D;\n} & IMarkProgressiveConfig;\n\nexport type IMarkStateFilter =\n | {\n /** 维度筛选 */\n fields: { [key in string]: { type: 'ordinal' | 'linear'; domain: StringOrNumber[] } };\n }\n | {\n /** 筛选数据 */\n datums: Datum[];\n /** 筛选数据 */\n datumKeys: string[];\n }\n | {\n /** 筛选 item */\n items: IElement[];\n }\n /** 筛选函数 */\n | ((datum: Datum, options: Record<string, any>) => boolean);\n\nexport interface IMarkStateSpec<T> {\n /** 筛选器 */\n filter?: IMarkStateFilter;\n /** 状态优先级 */\n level?: number | undefined;\n style: ConvertToMarkStyleSpec<T>;\n}\n\nexport type IMarkStateStyleSpec<T> = ConvertToMarkStyleSpec<T>;\n\nexport interface IMarkStateTheme<T> extends Record<string, T> {\n /**\n * 图元在正常状态下的主题样式设置\n */\n normal?: T;\n /**\n * 图元在 hover 状态下的主题样式设置\n */\n hover?: T;\n /**\n * 图元在 未被hover 状态下的主题样式设置\n */\n hover_reverse?: T;\n /**\n * 图元在 选中状态下的主题样式设置\n */\n selected?: T;\n /**\n * 图元在 未被选中 状态下的主题样式设置\n */\n selected_reverse?: T;\n}\n\nexport type IMarkTheme<T> = {\n /**\n * mark 层 是否显示配置\n */\n visible?: boolean;\n /** 默认样式设置 */\n style?: T;\n /** 不同状态下的样式配置 */\n state?: IMarkStateTheme<T>;\n /**\n * 可交互的开关\n */\n interactive?: boolean;\n};\n\nexport interface IPerformanceHook {\n // constructor\n // 创建完成。在使用 vstory 的场景下,图表实例不由业务创建,业务想要获取图表时机非常靠后,因此补充一个钩子\n afterCreateVChart?: (vchart?: IVChart) => void;\n\n // InitRender\n // ├── InitializeChart\n // ├── CompileToVGrammar\n // ├── ParseView\n // | └── ParseExpression\n // ├── (new View)\n // | ├── CreateRuntime\n // | └── (view.initialize)\n // | └── CreateVRenderStage\n // └── SrViewEvaluateAsync / SrViewRunAsync\n // ├── MarkTransform\n // ├── FacetTransform\n // ├── CreateVRenderMark\n // └── VRenderDraw\n\n // 初始化图表配置\n beforeInitializeChart?: (vchart?: IVChart) => void;\n afterInitializeChart?: (vchart?: IVChart) => void;\n\n // 编译\n beforeCompileToVGrammar?: () => void;\n afterCompileToVGrammar?: () => void;\n // 各个图表模块编译\n beforeRegionCompile?: () => void;\n afterRegionCompile?: () => void;\n beforeSeriesCompile?: () => void;\n afterSeriesCompile?: () => void;\n beforeComponentCompile?: () => void;\n afterComponentCompile?: () => void;\n\n // resize的时候的钩子\n beforeResizeWithUpdate?: () => void;\n afterResizeWithUpdate?: () => void;\n\n // LayoutWithSceneGraph 二次布局\n beforeLayoutWithSceneGraph?: () => void;\n afterLayoutWithSceneGraph?: () => void;\n\n // VGrammar 解析spec\n beforeParseView?: () => void;\n afterParseView?: () => void;\n\n // 初始化runtime\n beforeCreateRuntime?: () => void;\n afterCreateRuntime?: () => void;\n\n // VGrammar EvaluateAsync 时间\n beforeSrViewEvaluateAsync?: () => void;\n afterSrViewEvaluateAsync?: () => void;\n\n // VGrammar RunAsync 时间\n beforeSrViewRunAsync?: () => void;\n afterSrViewRunAsync?: () => void;\n\n // transform测量\n beforeTransform?: (name: string) => void;\n afterTransform?: (name: string) => void;\n\n // Create VRender Stage 时间\n beforeCreateVRenderStage?: () => void;\n afterCreateVRenderStage?: () => void;\n\n // Create VRender Mark 时间\n beforeCreateVRenderMark?: () => void;\n afterCreateVRenderMark?: () => void;\n\n // VGrammar 创建元素完成,vrender 绘图之前\n beforeDoRender?: (vchart?: IVChart) => void;\n\n // VRender Draw 时间\n beforeVRenderDraw?: () => void;\n afterVRenderDraw?: () => void;\n}\n\nexport type IBuildinMarkSpec = {\n group: IGroupMarkSpec;\n symbol: ISymbolMarkSpec;\n rule: IRuleMarkSpec;\n line: ILineMarkSpec;\n text: ITextMarkSpec;\n rect: IRectMarkSpec;\n rect3d: IRect3dMarkSpec;\n image: IImageMarkSpec;\n path: IPathMarkSpec;\n area: IAreaMarkSpec;\n arc: IArcMarkSpec;\n arc3d: IArc3dMarkSpec;\n polygon: IPolygonMarkSpec;\n pyramid3d: IPyramid3dMarkSpec;\n boxPlot: IBoxPlotMarkSpec;\n linkPath: ILinkPathMarkSpec;\n ripple: IRippleMarkSpec;\n};\n\nexport type EnableMarkType = keyof IBuildinMarkSpec;\nexport interface ICustomMarkSpec<T extends EnableMarkType>\n extends IModelSpec,\n IMarkSpec<IBuildinMarkSpec[T]>,\n IAnimationSpec<string, string> {\n type: T;\n /**\n * mark对应的名称,主要用于事件过滤如: { markName: 'yourName' }\n * @since 1.12.5\n */\n name?: string;\n /**\n * 关联的数据索引\n * @default 与系列使用同一份数据\n */\n dataIndex?: number;\n /**\n * dataKey用于绑定数据与Mark的关系\n * 如果数据和系列数据一致,可以不配置,默认会读取系列中的配置\n *\n * @support since 1.9.5\n */\n dataKey?: string | ((datum: any) => string);\n /**\n * 关联的数据id\n */\n dataId?: StringOrNumber;\n /**\n * specify the component type\n * @support since 1.9.0\n */\n componentType?: string;\n /**\n * enable animation of custom-mark or not\n * @since 1.11.0\n */\n animation?: boolean;\n /**\n * 指定 parent Id\n * @since 1.13.0\n */\n parent?: string;\n}\nexport interface ICustomMarkGroupSpec extends ICustomMarkSpec<MarkTypeEnum.group> {\n children?: ICustomMarkSpec<EnableMarkType>[];\n}\n\nexport interface IExtensionMarkSpec<T extends Exclude<EnableMarkType, 'group'>> extends ICustomMarkSpec<T> {\n /**\n * 关联的数据索引\n * @default 与系列使用同一份数据\n */\n dataIndex?: number;\n /**\n * dataKey用于绑定数据与Mark的关系\n * 如果数据和系列数据一致,可以不配置,默认会读取系列中的配置\n *\n * @support since 1.9.5\n */\n dataKey?: string | ((datum: any) => string);\n /**\n * 关联的数据id\n */\n dataId?: StringOrNumber;\n /**\n * specify the component type\n * @support since 1.9.0\n */\n componentType?: string;\n}\n\nexport interface IExtensionGroupMarkSpec extends ICustomMarkSpec<MarkTypeEnum.group> {\n /**\n * 支持子节点\n */\n children?: ICustomMarkSpec<EnableMarkType>[];\n}\n\n/** 纯文本类型的 formatMethod */\nexport type ITextFormatMethod<T extends any[]> = (\n ...args: T\n) => ITextMarkSpec['text'] | { type: 'text'; text: ITextMarkSpec['text'] };\n\nexport type IRichTextFormatMethod<T extends any[]> = (...args: T) =>\n | {\n /**\n * 设置文本类型为富文本\n */\n type: 'rich';\n /**\n * 当文本类型为富文本的时候,设置文本的内容\n */\n text: IRichTextCharacter[];\n }\n | IRichTextCharacter[];\n\n/**\n * 常规 text.formatMethod 支持返回文字字符串,或统一的对象配置\n * (这里特指由 vgrammar 代理的 text 图元)\n */\nexport type IFormatMethod<T extends any[]> = (\n ...args: T\n) => ReturnType<ITextFormatMethod<T>> | ReturnType<IRichTextFormatMethod<T>>;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/typings/spec/common.ts"],"names":[],"mappings":";;;AAkIA,IAAY,cAWX;AAXD,WAAY,cAAc;IACxB,qDAAqC,CAAA;IACrC,mDAAmC,CAAA;IACnC,+BAAe,CAAA;IACf,mCAAmB,CAAA;IACnB,qCAAqB,CAAA;IACrB,2BAAW,CAAA;IACX,2BAAW,CAAA;IACX,qCAAqB,CAAA;IACrB,qDAAqC,CAAA;IACrC,+BAAe,CAAA;AACjB,CAAC,EAXW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAWzB","file":"common.js","sourcesContent":["import type { IVChart } from './../../core/interface';\nimport type { IFillMarkSpec, IImageMarkSpec } from '../visual';\nimport type { LayoutCallBack } from '../../layout/interface';\nimport type { IElement, srIOption3DType } from '@visactor/vgrammar-core';\nimport type {\n DataSet,\n DataView,\n ISimplifyOptions,\n IFieldsOptions,\n IFilterOptions,\n IFoldOptions,\n IDsvParserOptions\n} from '@visactor/vdataset';\nimport type { RegionSpec } from '../../region/interface';\nimport type { IHoverSpec, ISelectSpec, IInteractionSpec } from '../../interaction/interface';\nimport type { IRenderOption } from '../../compile/interface';\nimport type { ISeriesTooltipSpec, ITooltipSpec } from '../../component/tooltip/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type { ILayoutSpec } from '../../layout/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport type {\n ConvertToMarkStyleSpec,\n IArc3dMarkSpec,\n IArcMarkSpec,\n IAreaMarkSpec,\n IBoxPlotMarkSpec,\n ICommonSpec,\n IGroupMarkSpec,\n ILineMarkSpec,\n ILinkPathMarkSpec,\n IPathMarkSpec,\n IPolygonMarkSpec,\n IPyramid3dMarkSpec,\n IRect3dMarkSpec,\n IRectMarkSpec,\n IRuleMarkSpec,\n ISymbolMarkSpec,\n IRippleMarkSpec,\n ITextMarkSpec,\n IVisualSpecScale\n} from '../visual';\nimport type { StateValue } from '../../compile/mark/interface';\nimport type { ISeriesStyle, SeriesType } from '../../series/interface';\nimport type { Datum, StringOrNumber } from '../common';\nimport type { IInvalidType } from '../data';\nimport type { IAnimationSpec, IMorphSeriesSpec } from '../../animation/spec';\nimport type { IPlayer } from '../../component/player/interface';\nimport type { IMarkProgressiveConfig, MarkTypeEnum } from '../../mark/interface';\nimport type { IDataZoomSpec } from '../../component/data-zoom/data-zoom/interface';\nimport type { IScrollBarSpec } from '../../component/data-zoom/scroll-bar/interface';\nimport type { ICrosshairSpec } from '../../component/crosshair/interface';\nimport type { ITheme } from '../../theme/interface';\nimport type { ITitleSpec } from '../../component/title/interface';\nimport type { IBrushSpec } from '../../component/brush/interface';\nimport type { ITotalLabelSpec } from '../../component/label/interface';\nimport type { ILegendSpec } from '../../component/legend/interface';\nimport type { ILayoutOrientPadding, ILayoutPaddingSpec } from '../layout';\nimport type { IColor, ICustomPath2D, IRichTextCharacter } from '@visactor/vrender-core';\nimport type { ICommonAxisSpec } from '../../component/axis/interface';\nimport type { IMediaQuerySpec } from './media-query';\nimport type { IModelSpec } from '../../model/interface';\n\nexport type IChartPadding = ILayoutOrientPadding | number;\n\n/** chart option */\nexport interface IInitOption extends Omit<IRenderOption, 'pluginList'> {\n /**\n * **仅生效于浏览器环境。**\n * 图表挂载的父容器,可以直接指定容器 id,也可以传入 dom 对象\n */\n dom?: string | HTMLElement;\n /**\n * 除去选择 dom 属性进行挂载父容器,也可以使用 renderCanvas 属性直接传入 canvas 实例/ canvasId\n * 小程序/小组件环境请直接传入 id\n */\n renderCanvas?: string | HTMLCanvasElement;\n /** 数据集 */\n dataSet?: DataSet;\n /** 是否自适应容器大小 */\n autoFit?: boolean;\n /**\n * 性能测试钩子\n */\n performanceHook?: IPerformanceHook;\n /**\n * 是否开启动画\n */\n animation?: boolean;\n /**\n * 3d配置\n */\n options3d?: srIOption3DType;\n\n /**\n * 自定义布局函数\n */\n layout?: LayoutCallBack;\n\n /**\n * 当文本省略时,鼠标 hover 到文本上时是否显示 poptip\n * @default true\n */\n poptip?: boolean;\n\n /**\n * 报错的回调函数\n * @since 1.2.0\n */\n onError?: (...args: any[]) => void;\n\n /**\n * 默认主题(支持完整主题对象或者主题名称,主题名称需要提前在 `ThemeManager` 中注册)\n * @since 1.3.0\n */\n theme?: string | ITheme;\n\n /**\n * 是否关闭交互效果\n * @since 1.9.0\n * @default false\n */\n disableTriggerEvent?: boolean;\n /**\n * 当自动响应容器resize 事件时,触发resize 的间隔时长,单位毫秒\n * @since 1.12.5\n * @default 100\n */\n resizeDelay?: number;\n}\n\nexport enum RenderModeEnum {\n 'desktop-browser' = 'desktop-browser',\n 'mobile-browser' = 'mobile-browser',\n 'node' = 'node',\n 'worker' = 'worker',\n 'miniApp' = 'miniApp',\n 'wx' = 'wx',\n 'tt' = 'tt',\n 'harmony' = 'harmony',\n 'desktop-miniApp' = 'desktop-miniApp',\n 'lynx' = 'lynx'\n}\nexport type RenderMode = keyof typeof RenderModeEnum;\n\n/** chart spec */\nexport interface IChartSpec {\n /** 图表类型 */\n type: string;\n /** 数据 */\n data?: IData;\n /** 画布宽度 */\n width?: number;\n /** 画布高度 */\n height?: number;\n /**\n * 图表宽高是否自适应容器,浏览器环境下默认为 true。\n * 该配置的优先级高于构造函数中的 autoFit 配置。\n * 如果用户配置了 width,则以用户配置的 width 为准,height 同理。\n */\n autoFit?: boolean;\n /**\n * 图表整体 padding 设置\n */\n padding?: ILayoutPaddingSpec;\n /**\n * 图表色系配置\n */\n color?: string[] | Omit<IVisualSpecScale<unknown, string>, 'id'>;\n /**\n * 系列\n * @description 仅在组合图中使用, 文档中除组合图外均未透出该配置\n */\n series?: ISeriesSpec[];\n /**\n * 系列样式\n * @description 仅在图表配置了seriesField时生效\n */\n seriesStyle?: ISeriesStyle;\n\n /**\n * 自动关闭动画的阀值,对应的是单系列data的长度\n * @since 1.2.0\n */\n animationThreshold?: number;\n\n /** hover 交互 */\n hover?: boolean | IHoverSpec;\n /** select 交互 */\n select?: boolean | ISelectSpec;\n\n /** region配置 */\n region?: RegionSpec[];\n /** 图表标题配置 */\n title?: ITitleSpec;\n /** 布局配置 */\n layout?: ILayoutSpec;\n /** 图例配置 */\n legends?: ILegendSpec | ILegendSpec[];\n /** 十字辅助线配置 */\n crosshair?: ICrosshairSpec | ICrosshairSpec[];\n /** tooltip配置 */\n tooltip?: ITooltipSpec;\n /** 播放器配置 */\n player?: IPlayer;\n /** 缩略轴配置 */\n dataZoom?: IDataZoomSpec | IDataZoomSpec[];\n /** 滚动条配置 */\n scrollBar?: IScrollBarSpec | IScrollBarSpec[];\n /** 框选配置 */\n brush?: IBrushSpec;\n /** 全局 scale 配置 */\n scales?: IVisualSpecScale<unknown, unknown>[];\n /** 自定义mark */\n customMark?: ICustomMarkSpec<EnableMarkType>[];\n /** 轴 */\n axes?: ICommonAxisSpec[];\n /**\n * 图表上的主题定义。\n * 可以直接配置主题名,前提是该主题名已经注册\n */\n theme?: Omit<ITheme, 'name'> | string;\n /**\n * 图表背景色配置,优先级高于构造函数中的 background 配置\n * 自1.11.6版本支持渐变色对象的配置\n */\n background?: IBackgroundSpec;\n\n // TODO:后续开放,现在仍有问题\n // poptip?: PopTipAttributes;\n // TODO: 补充动画配置\n\n /**\n * 堆积时是否逆序\n * @default false\n * @since 1.4.0\n */\n stackInverse?: boolean;\n /**\n * 堆积时是否排序\n * @default false\n * @since 1.10.4\n */\n stackSort?: boolean;\n /**\n * 媒体查询配置\n * @since 1.8.0\n */\n media?: IMediaQuerySpec;\n}\n\nexport type IBackgroundSpec = IColor | ConvertToMarkStyleSpec<IGroupMarkSpec>;\n\n/** data */\nexport type IDataType = IDataValues | DataView;\nexport type IData = IDataType | IDataType[];\nexport type DataKeyType = string | string[] | ((data: Datum, index: number) => string);\nexport type BuildInTransformOptions =\n | {\n /** 地理数据简化 */\n type: 'simplify';\n options: ISimplifyOptions;\n }\n | {\n /** 数据维度处理,包括排序,逆序,数据筛选能力 */\n type: 'fields';\n options: IFieldsOptions;\n }\n | {\n /** 使用回调的自定义筛选 */\n type: 'filter';\n options: IFilterOptions;\n }\n | {\n /** 数据展开 */\n type: 'fold';\n options: IFoldOptions;\n };\n\nexport interface IFieldsMeta {\n /** TODO: 字段通用format, 暂时先不支持 */\n // format?: (datum: Datum, index: number) => unknown;\n /**\n * 字段别名\n */\n alias?: string;\n /** 字段取值范围 */\n domain?: StringOrNumber[];\n /**\n * 是否使用 domain 锁定统计信息。默认为 false\n * true - 在图例交互场景,也固定domain\n * 当设置为 `onlyFull` 时,仅在初始化的展示完整数据的场景锁定domain,在交互触发的筛选场景不锁定\n */\n lockStatisticsByDomain?: boolean | 'onlyFull';\n /** 连续型 还是 离散型 */\n type?: 'ordinal' | 'linear';\n /** 排序顺序 不设置的话当前维度不进行排序 */\n sortIndex?: number;\n /** 排序时是否反转 默认为 false */\n sortReverse?: boolean;\n}\n\nexport interface SheetParseOptions extends CommonParseOptions {\n /**\n * 特定类型的数据,支持以下类型:\n * - csv: 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。\n * - dsv: 分隔值(Delimiter-Separated Values,DSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。\n * - tsv: 制表符分隔值(Tab-Separated Values,TSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。\n */\n type: 'csv' | 'dsv' | 'tsv';\n /**\n * 具体的解析配置\n */\n options?: IDsvParserOptions;\n}\n\nexport interface CommonParseOptions {\n /**\n * 是否需要对数据进行 clone,默认为 true。\n * 如果考虑性能,你可以将其关闭,但是这会带了一些副作用,即我们会对传入的数据进行修改(不会对原有字段及值修改,只会在原有数据基础上添加一些字段)。\n * @default true\n * @since 1.3.0\n */\n clone?: boolean;\n}\n\nexport interface IDataValues {\n /**\n * 数据唯一标识\n */\n id?: StringOrNumber;\n /**\n * 数据\n */\n values: Datum[] | string;\n /**\n * 引用的数据索引\n */\n fromDataIndex?: number;\n /**\n * 引用的数据 id\n */\n fromDataId?: StringOrNumber;\n /**\n * 数据 transform 配置\n */\n transforms?: BuildInTransformOptions[];\n /**\n * 数据字段相关配置\n */\n fields?: Record<\n /** 字段key */\n string,\n IFieldsMeta\n >;\n /**\n * 数据解析器配置\n */\n parser?: SheetParseOptions | CommonParseOptions;\n}\n\nexport type IHierarchyNodeData = {\n value?: number;\n children?: IHierarchyNodeData[];\n} & Datum;\n\nexport interface IHierarchyDataValues extends Omit<IDataValues, 'values'> {\n values: IHierarchyNodeData;\n}\n\nexport type IHierarchyData = DataView | IHierarchyDataValues;\n\n/** series */\nexport interface ISeriesSpec extends IInteractionSpec {\n /** 系列类型 */\n type: SeriesType;\n\n /** 系列名称 */\n name?: string;\n\n /** 用户自定义的 series id */\n id?: StringOrNumber;\n /**\n * 系列数据\n * @description 系列可以配置自身的数据,也可以从chart.data中获取数据\n */\n data?: IDataType;\n /**\n * 系列关联的数据索引\n * @default 0\n */\n dataIndex?: number;\n /**\n * 系列关联的数据id\n */\n dataId?: StringOrNumber;\n /**\n * dataKey用于绑定数据与Mark的关系, 该配置在动画中非常重要.\n */\n dataKey?: DataKeyType;\n\n /**\n * 系列关联的region索引\n * @default 0\n */\n regionIndex?: number;\n /** 系列关联的region id */\n regionId?: StringOrNumber;\n /**\n * 分组字段\n */\n seriesField?: string;\n /**\n * 系列样式\n * @description 仅在图表配置了seriesField时生效\n */\n seriesStyle?: ISeriesStyle;\n\n /** 是否对数据进行堆叠处理 */\n stack?: boolean;\n\n /**\n * 堆叠时的分组值\n * stackValue 相等的系列将在一起堆积。没有配置的系列将在一组\n * @since 1.4.0\n */\n stackValue?: StringOrNumber;\n\n /** 堆叠汇总标签\n * @since 1.3.0\n */\n totalLabel?: ITotalLabelSpec;\n\n /** 是否对数据进行百分比处理 */\n percent?: boolean;\n\n /** 是否围绕中心轴偏移轮廓 */\n stackOffsetSilhouette?: boolean;\n\n /**\n * 非合规数据点连接方式\n * @description null,undefined等非法数据点连接方式。\n * @default 'break'\n * 'break'指在该数据点处断开\n * 'link' 指忽略该点保持连续\n * 'zero' 指该点默认数值为0\n * 'ignore' 指不处理\n */\n invalidType?: IInvalidType;\n\n /** 系列对应的提示信息设置,优先级高于图表的tooltip配置 */\n tooltip?: ISeriesTooltipSpec;\n\n /**\n * 是否开启系列动画\n */\n animation?: boolean;\n /**\n * 自动关闭动画的阀值,对应的是单系列data的长度\n * @since 1.2.0\n */\n animationThreshold?: number;\n\n /**\n * 是否支持3d视角\n */\n support3d?: boolean;\n /**\n * morph 动画配置\n */\n morph?: IMorphSeriesSpec;\n\n /**\n * 系列的扩展mark,能够获取系列上的数据\n */\n extensionMark?: (IExtensionMarkSpec<Exclude<EnableMarkType, 'group'>> | IExtensionGroupMarkSpec)[];\n\n /**\n * 今当通过`series`配置的时候,才会生效\n */\n zIndex?: number;\n\n /**\n * series background\n * 作用是支持系列的图形对系列背景进行 mask,或者切分等效果。不是作为背景图\n * 暂时不开放api,避免出现break change\n */\n // background?: IBackgroundSpec;\n}\n\nexport type IChartExtendsSeriesSpec<T extends ISeriesSpec> = Omit<T, 'data' | 'morph' | 'stackValue' | 'tooltip'>;\n\nexport type AdaptiveSpec<T, K extends keyof any> = {\n [key in Exclude<keyof T, K>]: T[key];\n} & { [key in K]: any };\n\nexport interface IMarkStateFullSpec<T> extends Record<string, IMarkStateSpec<T> | IMarkStateStyleSpec<T>> {\n /**\n * 正常状态下图元的样式设置\n */\n normal?: IMarkStateSpec<T> | IMarkStateStyleSpec<T>;\n /**\n * hover状态下图元的样式设置\n */\n hover?: IMarkStateSpec<T> | IMarkStateStyleSpec<T>;\n /**\n * 没有被hover的状态下图元的样式设置\n */\n hover_reverse?: IMarkStateSpec<T> | IMarkStateStyleSpec<T>;\n /**\n * 选中状态下图元的样式设置\n */\n selected?: IMarkStateSpec<T> | IMarkStateStyleSpec<T>;\n /**\n * 没有被选中的状态下图元的样式设置\n */\n selected_reverse?: IMarkStateSpec<T> | IMarkStateStyleSpec<T>;\n}\n\n/** markSpec */\nexport type IMarkSpec<T extends ICommonSpec = ICommonSpec> = {\n /**\n * 用户id\n */\n id?: StringOrNumber;\n /**\n * 是否响应交互\n */\n interactive?: boolean;\n // /**\n // * 是否会被region区域裁减\n // * @todo 暂未支持\n // */\n // clip?: boolean;\n /**\n * 与其他mark元素的层级\n */\n zIndex?: number;\n /**\n * mark 层 是否显示配置\n */\n visible?: boolean;\n /** 默认样式设置 */\n style?: ConvertToMarkStyleSpec<T>;\n /** 不同状态下的样式配置 */\n state?: IMarkStateFullSpec<T>;\n /**\n * 状态排序方法,默认状态都是按照添加的顺序处理的,如果有特殊的需求,需要指定状态顺序,可以通过这个方法实现\n * @since 1.9.0\n */\n stateSort?: (stateA: string, stateB: string) => number;\n\n /*\n * 是否是3d视角的mark\n */\n support3d?: boolean;\n /* customized shape of mark */\n customShape?: (datum: any[], attrs: any, path: ICustomPath2D) => ICustomPath2D;\n} & IMarkProgressiveConfig;\n\nexport type IMarkStateFilter =\n | {\n /** 维度筛选 */\n fields: { [key in string]: { type: 'ordinal' | 'linear'; domain: StringOrNumber[] } };\n }\n | {\n /** 筛选数据 */\n datums: Datum[];\n /** 筛选数据 */\n datumKeys: string[];\n }\n | {\n /** 筛选 item */\n items: IElement[];\n }\n /** 筛选函数 */\n | ((datum: Datum, options: Record<string, any>) => boolean);\n\nexport interface IMarkStateSpec<T> {\n /** 筛选器 */\n filter?: IMarkStateFilter;\n /** 状态优先级 */\n level?: number | undefined;\n style: ConvertToMarkStyleSpec<T>;\n}\n\nexport type IMarkStateStyleSpec<T> = ConvertToMarkStyleSpec<T>;\n\nexport interface IMarkStateTheme<T> extends Record<string, T> {\n /**\n * 图元在正常状态下的主题样式设置\n */\n normal?: T;\n /**\n * 图元在 hover 状态下的主题样式设置\n */\n hover?: T;\n /**\n * 图元在 未被hover 状态下的主题样式设置\n */\n hover_reverse?: T;\n /**\n * 图元在 选中状态下的主题样式设置\n */\n selected?: T;\n /**\n * 图元在 未被选中 状态下的主题样式设置\n */\n selected_reverse?: T;\n}\n\nexport type IMarkTheme<T> = {\n /**\n * mark 层 是否显示配置\n */\n visible?: boolean;\n /** 默认样式设置 */\n style?: T;\n /** 不同状态下的样式配置 */\n state?: IMarkStateTheme<T>;\n /**\n * 可交互的开关\n */\n interactive?: boolean;\n};\n\nexport interface IPerformanceHook {\n // constructor\n // 创建完成。在使用 vstory 的场景下,图表实例不由业务创建,业务想要获取图表时机非常靠后,因此补充一个钩子\n afterCreateVChart?: (vchart?: IVChart) => void;\n\n // InitRender\n // ├── InitializeChart\n // ├── CompileToVGrammar\n // ├── ParseView\n // | └── ParseExpression\n // ├── (new View)\n // | ├── CreateRuntime\n // | └── (view.initialize)\n // | └── CreateVRenderStage\n // └── SrViewEvaluateAsync / SrViewRunAsync\n // ├── MarkTransform\n // ├── FacetTransform\n // ├── CreateVRenderMark\n // └── VRenderDraw\n\n // 初始化图表配置\n beforeInitializeChart?: (vchart?: IVChart) => void;\n afterInitializeChart?: (vchart?: IVChart) => void;\n\n // 编译\n beforeCompileToVGrammar?: () => void;\n afterCompileToVGrammar?: () => void;\n // 各个图表模块编译\n beforeRegionCompile?: () => void;\n afterRegionCompile?: () => void;\n beforeSeriesCompile?: () => void;\n afterSeriesCompile?: () => void;\n beforeComponentCompile?: () => void;\n afterComponentCompile?: () => void;\n\n // resize的时候的钩子\n beforeResizeWithUpdate?: () => void;\n afterResizeWithUpdate?: () => void;\n\n // LayoutWithSceneGraph 二次布局\n beforeLayoutWithSceneGraph?: () => void;\n afterLayoutWithSceneGraph?: () => void;\n\n // VGrammar 解析spec\n beforeParseView?: () => void;\n afterParseView?: () => void;\n\n // 初始化runtime\n beforeCreateRuntime?: () => void;\n afterCreateRuntime?: () => void;\n\n // VGrammar EvaluateAsync 时间\n beforeSrViewEvaluateAsync?: () => void;\n afterSrViewEvaluateAsync?: () => void;\n\n // VGrammar RunAsync 时间\n beforeSrViewRunAsync?: () => void;\n afterSrViewRunAsync?: () => void;\n\n // transform测量\n beforeTransform?: (name: string) => void;\n afterTransform?: (name: string) => void;\n\n // Create VRender Stage 时间\n beforeCreateVRenderStage?: () => void;\n afterCreateVRenderStage?: () => void;\n\n // Create VRender Mark 时间\n beforeCreateVRenderMark?: () => void;\n afterCreateVRenderMark?: () => void;\n\n // VGrammar 创建元素完成,vrender 绘图之前\n beforeDoRender?: (vchart?: IVChart) => void;\n\n // VRender Draw 时间\n beforeVRenderDraw?: () => void;\n afterVRenderDraw?: () => void;\n}\n\nexport type IBuildinMarkSpec = {\n group: IGroupMarkSpec;\n symbol: ISymbolMarkSpec;\n rule: IRuleMarkSpec;\n line: ILineMarkSpec;\n text: ITextMarkSpec;\n rect: IRectMarkSpec;\n rect3d: IRect3dMarkSpec;\n image: IImageMarkSpec;\n path: IPathMarkSpec;\n area: IAreaMarkSpec;\n arc: IArcMarkSpec;\n arc3d: IArc3dMarkSpec;\n polygon: IPolygonMarkSpec;\n pyramid3d: IPyramid3dMarkSpec;\n boxPlot: IBoxPlotMarkSpec;\n linkPath: ILinkPathMarkSpec;\n ripple: IRippleMarkSpec;\n};\n\nexport type EnableMarkType = keyof IBuildinMarkSpec;\nexport interface ICustomMarkSpec<T extends EnableMarkType>\n extends IModelSpec,\n IMarkSpec<IBuildinMarkSpec[T]>,\n IAnimationSpec<string, string> {\n type: T;\n /**\n * mark对应的名称,主要用于事件过滤如: { markName: 'yourName' }\n * @since 1.12.5\n */\n name?: string;\n /**\n * 关联的数据索引\n * @default 与系列使用同一份数据\n */\n dataIndex?: number;\n /**\n * dataKey用于绑定数据与Mark的关系\n * 如果数据和系列数据一致,可以不配置,默认会读取系列中的配置\n *\n * @support since 1.9.5\n */\n dataKey?: string | ((datum: any) => string);\n /**\n * 关联的数据id\n */\n dataId?: StringOrNumber;\n /**\n * specify the component type\n * @support since 1.9.0\n */\n componentType?: string;\n /**\n * enable animation of custom-mark or not\n * @since 1.11.0\n */\n animation?: boolean;\n /**\n * 指定 parent Id\n * @since 1.13.0\n */\n parent?: string;\n}\nexport interface ICustomMarkGroupSpec extends ICustomMarkSpec<MarkTypeEnum.group> {\n children?: ICustomMarkSpec<EnableMarkType>[];\n}\n\nexport interface IExtensionMarkSpec<T extends Exclude<EnableMarkType, 'group'>> extends ICustomMarkSpec<T> {\n /**\n * 关联的数据索引\n * @default 与系列使用同一份数据\n */\n dataIndex?: number;\n /**\n * dataKey用于绑定数据与Mark的关系\n * 如果数据和系列数据一致,可以不配置,默认会读取系列中的配置\n *\n * @support since 1.9.5\n */\n dataKey?: string | ((datum: any) => string);\n /**\n * 关联的数据id\n */\n dataId?: StringOrNumber;\n /**\n * specify the component type\n * @support since 1.9.0\n */\n componentType?: string;\n}\n\nexport interface IExtensionGroupMarkSpec extends ICustomMarkSpec<MarkTypeEnum.group> {\n /**\n * 支持子节点\n */\n children?: ICustomMarkSpec<EnableMarkType>[];\n}\n\n/** 纯文本类型的 formatMethod */\nexport type ITextFormatMethod<T extends any[]> = (\n ...args: T\n) => ITextMarkSpec['text'] | { type: 'text'; text: ITextMarkSpec['text'] };\n\nexport type IRichTextFormatMethod<T extends any[]> = (...args: T) =>\n | {\n /**\n * 设置文本类型为富文本\n */\n type: 'rich';\n /**\n * 当文本类型为富文本的时候,设置文本的内容\n */\n text: IRichTextCharacter[];\n }\n | IRichTextCharacter[];\n\n/**\n * 常规 text.formatMethod 支持返回文字字符串,或统一的对象配置\n * (这里特指由 vgrammar 代理的 text 图元)\n */\nexport type IFormatMethod<T extends any[]> = (\n ...args: T\n) => ReturnType<ITextFormatMethod<T>> | ReturnType<IRichTextFormatMethod<T>>;\n"]}
|
package/esm/chart/stack.js
CHANGED
|
@@ -13,8 +13,8 @@ export class Stack {
|
|
|
13
13
|
const series = model.getSeries();
|
|
14
14
|
if (!series.some((s => s.getStack()))) return;
|
|
15
15
|
const hasTotalLabel = series.some((s => {
|
|
16
|
-
var _a, _b;
|
|
17
|
-
return null === (_b = null === (_a = s.getSpec()) || void 0 === _a ? void 0 : _a.totalLabel) || void 0 === _b ? void 0 : _b.visible;
|
|
16
|
+
var _a, _b, _c, _d;
|
|
17
|
+
return !!(null === (_b = null === (_a = s.getSpec()) || void 0 === _a ? void 0 : _a.totalLabel) || void 0 === _b ? void 0 : _b.alwayCalculateTotal) || (null === (_d = null === (_c = s.getSpec()) || void 0 === _c ? void 0 : _c.totalLabel) || void 0 === _d ? void 0 : _d.visible);
|
|
18
18
|
})), hasPercent = hasTotalLabel || series.some((s => s.getPercent())), hasOffsetSilhouette = series.some((s => s.getStackOffsetSilhouette())), stackValueGroup = getRegionStackGroup(model, !0);
|
|
19
19
|
for (const stackValue in stackValueGroup) for (const key in stackValueGroup[stackValue].nodes) stack(stackValueGroup[stackValue].nodes[key], model.getStackInverse(), hasPercent, hasTotalLabel);
|
|
20
20
|
if (hasOffsetSilhouette) for (const stackValue in stackValueGroup) for (const key in stackValueGroup[stackValue].nodes) stackOffsetSilhouette(stackValueGroup[stackValue].nodes[key]);
|
package/esm/chart/stack.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/chart/stack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAK/C,OAAO,EAAE,mBAAmB,EAAE,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGxF,OAAO,EAAE,gCAAgC,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAQ5D,MAAM,OAAO,KAAK;IAMhB,YACE,KAAa,EACb,OAEC;QAsBH,gBAAW,GAAG,CAAC,EAAE,KAAK,EAAsB,EAAE,EAAE;;YAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YAEhD,IAAI,CAAC,QAAQ,EAAE;gBACb,OAAO;aACR;YAED,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;;
|
|
1
|
+
{"version":3,"sources":["../src/chart/stack.ts"],"names":[],"mappings":"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","file":"stack.js","sourcesContent":["import { ChartEvent } from '../constant/event';\nimport type { IRegion } from '../region/interface';\nimport type { IChart } from './interface';\nimport type { IStackCacheNode, IStackCacheRoot } from '../util';\n// eslint-disable-next-line no-duplicate-imports\nimport { getRegionStackGroup, stack, stackOffsetSilhouette, stackTotal } from '../util';\nimport type { EventCallback } from '../event/interface';\nimport type { DataSet } from '@visactor/vdataset';\nimport { registerDataSetInstanceTransform } from '../data/register';\nimport { stackSplit } from '../data/transforms/stack-split';\n\n// stack\n// 1. 不可以多个region之间的series进行堆积,目前看这种需求没有场景。将堆积改为针对 region\n// 2. 堆积是一个数据层面的逻辑,但是会影响系列当前使用的yField到底是什么。\n// 3. ECharts 线系列参与堆积后,线系列的y不变,但是与它一起堆积的柱图,数据变化了了,是堆积后的值\n// 4. x 方向分组的功能,是属于轴的,与堆积和怎么堆积无关。\n// 现有功能,有支持堆积时的方向可以调整。也就是sort\nexport class Stack {\n protected _chart: IChart;\n protected _options?: {\n afterStackRegion?: (region: IRegion, stackValueGroup: { [key: string]: IStackCacheRoot }) => void;\n };\n\n constructor(\n chart: IChart,\n options?: {\n afterStackRegion?: (region: IRegion, stackValueGroup: { [key: string]: IStackCacheRoot }) => void;\n }\n ) {\n this._chart = chart;\n this._options = options;\n }\n\n init() {\n this._chart.getAllRegions().forEach(r => {\n r.event.on(\n ChartEvent.regionSeriesDataFilterOver,\n { filter: ({ model }) => model?.id === r.id },\n this.stackRegion as EventCallback<unknown>\n );\n });\n }\n\n stackAll() {\n this._chart.getAllRegions().forEach(r => {\n this.stackRegion({ model: r });\n });\n }\n\n stackRegion = ({ model }: { model: IRegion }) => {\n const series = model.getSeries();\n const hasStack = series.some(s => s.getStack());\n\n if (!hasStack) {\n return;\n }\n // total label need percent\n const hasTotalLabel = series.some(s => {\n // 如果设置了alwayCalculateTotal,那么一定需要计算total\n if (s.getSpec()?.totalLabel?.alwayCalculateTotal) {\n return true;\n }\n return s.getSpec()?.totalLabel?.visible;\n });\n const hasPercent = hasTotalLabel || series.some(s => s.getPercent());\n const hasOffsetSilhouette = series.some(s => s.getStackOffsetSilhouette());\n\n const stackValueGroup = getRegionStackGroup(model, true);\n\n // 计算堆积\n for (const stackValue in stackValueGroup) {\n for (const key in stackValueGroup[stackValue].nodes) {\n stack(stackValueGroup[stackValue].nodes[key], model.getStackInverse(), hasPercent, hasTotalLabel);\n }\n }\n\n if (hasOffsetSilhouette) {\n // 围绕中心轴偏移轮廓\n for (const stackValue in stackValueGroup) {\n for (const key in stackValueGroup[stackValue].nodes) {\n stackOffsetSilhouette(stackValueGroup[stackValue].nodes[key]);\n }\n }\n }\n\n if (hasTotalLabel) {\n model.getSeries().forEach(s => {\n const stackData = s.getStackData();\n const stackValue = s.getStackValue();\n const stackValueField = s.getStackValueField(); // yField\n if (stackData && stackValueField) {\n stackTotal(stackValueGroup[stackValue] as IStackCacheNode, stackValueField);\n }\n });\n }\n\n if (this._options?.afterStackRegion) {\n this._options.afterStackRegion(model, stackValueGroup);\n }\n };\n}\n\nexport class StackChartMixin {\n protected _stack: Stack;\n protected _dataSet: DataSet;\n\n protected _beforeInit() {\n if (this._dataSet) {\n registerDataSetInstanceTransform(this._dataSet, 'stackSplit', stackSplit);\n }\n }\n\n protected _initStack() {\n this._stack = new Stack(this as unknown as IChart);\n this._stack.init();\n }\n}\n"]}
|
|
@@ -52,6 +52,7 @@ type LabelStateStyle<T> = {
|
|
|
52
52
|
};
|
|
53
53
|
export type ITotalLabelSpec = Pick<ILabelSpec, 'visible' | 'formatMethod' | 'interactive' | 'offset' | 'style' | 'state' | 'textType' | 'overlap'> & {
|
|
54
54
|
position?: 'top' | 'bottom';
|
|
55
|
+
alwayCalculateTotal?: boolean;
|
|
55
56
|
};
|
|
56
57
|
export interface ITotalLabelTheme extends Pick<ILabelSpec, 'visible' | 'interactive' | 'offset' | 'overlap' | 'smartInvert' | 'animation'> {
|
|
57
58
|
style?: ITextMarkSpec;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/component/label/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { BaseLabelAttrs, DataLabelAttrs } from '@visactor/vrender-components';\nimport type { ConvertToMarkStyleSpec, Datum, IComposedTextMarkSpec, IFormatMethod, ITextMarkSpec } from '../../typings';\nimport type { IComponentSpec } from '../base/interface';\nimport type { ILabelMark } from '../../mark/interface';\nimport type { ISeries } from '../../series/interface';\nimport type { ICompilableMark } from '../../compile/mark/interface';\nimport type { IRegion } from '../../region/interface';\n\nexport interface ILabelInfo {\n baseMark: ICompilableMark;\n labelMark: ILabelMark;\n series: ISeries;\n labelSpec: TransformedLabelSpec;\n}\n\nexport interface ILabelComponentContext {\n region: IRegion;\n labelInfo: ILabelInfo[];\n}\n\nexport interface ILabelFormatMethodContext {\n series?: ISeries;\n}\n\n/**\n * 系列图元标签配置,一般用于展示数据项\n */\nexport interface ILabelSpec extends ILabelAnimationSpec {\n /**\n * 标签组件的层级\n */\n zIndex?: number;\n /** 默认不显示标签 */\n visible?: boolean;\n /**\n * 是否支持交互。\n * @default false\n */\n interactive?: boolean;\n /**\n * 文本类型:text, rich,\n * @since 1.7.0\n * @deprecated\n */\n textType?: 'text' | 'rich';\n /**\n * 格式化函数\n * @since 1.10.0 支持返回结构 `{type:'rich', text: [{text:'some text', fill:'black', fontSize: 20}]}\n */\n formatMethod?: IFormatMethod<[text: string | string[], datum?: Datum, ctx?: ILabelFormatMethodContext]>;\n /**\n * 字符串模版\n * 用{}包裹变量名的字符串模版, 变量名取自数据属性值\n * eg: 'type={type},value={value}'\n * @since 1.7.0\n */\n formatter?: string | string[];\n /** 标签与其对应数据图元的间距 */\n offset?: number;\n /** 标签位置 */\n position?: string;\n /** 标签样式配置 */\n style?: ConvertToMarkStyleSpec<IComposedTextMarkSpec>;\n /** 交互样式配置 */\n state?: LabelStateStyle<Partial<IComposedTextMarkSpec>>;\n /** 标签防重叠配置 */\n overlap?: BaseLabelAttrs['overlap'] & {\n /**\n * 防重叠区域边距\n * @since 1.13.7\n */\n padding?: DataLabelAttrs['size']['padding'];\n };\n /** 标签智能反色配置 */\n smartInvert?: BaseLabelAttrs['smartInvert'];\n /**\n * 堆积数据过滤类型\n * @since 1.12.0\n */\n stackDataFilterType?: 'min' | 'max';\n /** 自定义标签数据筛选和排序\n * @since 1.3.0\n */\n dataFilter?: BaseLabelAttrs['dataFilter'];\n /** 自定义标签布局函数。\n * @description 当配置了 customLayoutFunc 后,默认布局和防重叠逻辑将不再生效。(overlap/position/offset不生效)\n * @since 1.3.0\n */\n customLayoutFunc?: BaseLabelAttrs['customLayoutFunc'];\n /** 自定义标签躲避函数\n * @description 当配置了 customOverlapFunc 后,会根据 position 和 offset 进行初始布局。配置的防重叠逻辑(overlap)不生效。\n * @since 1.3.0\n */\n customOverlapFunc?: BaseLabelAttrs['customOverlapFunc'];\n /**\n * 防重叠计算完成后的回调函数\n * @since 1.13.5\n */\n onAfterOverlapping?: BaseLabelAttrs['onAfterOverlapping'];\n /**\n * 标签布局\n */\n labelLayout?: 'series' | 'region';\n /**\n * 是否支持3D\n */\n support3d?: boolean;\n /**\n * 是否同步数据图元的状态变化\n * @default false\n * @since 1.9.0\n */\n syncState?: boolean;\n /**\n * 是否显示标签关联图元的 mark tooltip\n * @default false\n * @since 1.13.5\n */\n showRelatedMarkTooltip?: boolean;\n}\n\nexport type ILabelAnimationSpec = Pick<\n BaseLabelAttrs,\n 'animation' | 'animationEnter' | 'animationUpdate' | 'animationExit'\n>;\nexport type IMultiLabelSpec<T extends Omit<ILabelSpec, 'position'>> = T | T[];\n\ntype LabelStateStyle<T> = {\n /**\n * 标签hover状态样式配置\n */\n hover?: T;\n /**\n * 标签hover_reverse状态样式配置\n */\n hover_reverse?: T;\n /**\n * 标签选中状态样式配置\n */\n selected?: T;\n /**\n * 标签未选中状态样式配置\n */\n selected_reverse?: T;\n};\n\nexport type ITotalLabelSpec = Pick<\n ILabelSpec,\n 'visible' | 'formatMethod' | 'interactive' | 'offset' | 'style' | 'state' | 'textType' | 'overlap'\n> & {\n /** 堆叠汇总标签的位置,在一组堆积图元的上方或下方\n * @default 'top'\n */\n position?: 'top' | 'bottom';\n};\n\nexport interface ITotalLabelTheme\n extends Pick<ILabelSpec, 'visible' | 'interactive' | 'offset' | 'overlap' | 'smartInvert' | 'animation'> {\n style?: ITextMarkSpec;\n}\n\n// 内部处理转换后的标签配置\nexport type TransformedLabelSpec = ILabelSpec & {\n getStyleHandler: (series: ISeries) => (mark?: ILabelMark, spec?: any) => void;\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/component/label/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { BaseLabelAttrs, DataLabelAttrs } from '@visactor/vrender-components';\nimport type { ConvertToMarkStyleSpec, Datum, IComposedTextMarkSpec, IFormatMethod, ITextMarkSpec } from '../../typings';\nimport type { IComponentSpec } from '../base/interface';\nimport type { ILabelMark } from '../../mark/interface';\nimport type { ISeries } from '../../series/interface';\nimport type { ICompilableMark } from '../../compile/mark/interface';\nimport type { IRegion } from '../../region/interface';\n\nexport interface ILabelInfo {\n baseMark: ICompilableMark;\n labelMark: ILabelMark;\n series: ISeries;\n labelSpec: TransformedLabelSpec;\n}\n\nexport interface ILabelComponentContext {\n region: IRegion;\n labelInfo: ILabelInfo[];\n}\n\nexport interface ILabelFormatMethodContext {\n series?: ISeries;\n}\n\n/**\n * 系列图元标签配置,一般用于展示数据项\n */\nexport interface ILabelSpec extends ILabelAnimationSpec {\n /**\n * 标签组件的层级\n */\n zIndex?: number;\n /** 默认不显示标签 */\n visible?: boolean;\n /**\n * 是否支持交互。\n * @default false\n */\n interactive?: boolean;\n /**\n * 文本类型:text, rich,\n * @since 1.7.0\n * @deprecated\n */\n textType?: 'text' | 'rich';\n /**\n * 格式化函数\n * @since 1.10.0 支持返回结构 `{type:'rich', text: [{text:'some text', fill:'black', fontSize: 20}]}\n */\n formatMethod?: IFormatMethod<[text: string | string[], datum?: Datum, ctx?: ILabelFormatMethodContext]>;\n /**\n * 字符串模版\n * 用{}包裹变量名的字符串模版, 变量名取自数据属性值\n * eg: 'type={type},value={value}'\n * @since 1.7.0\n */\n formatter?: string | string[];\n /** 标签与其对应数据图元的间距 */\n offset?: number;\n /** 标签位置 */\n position?: string;\n /** 标签样式配置 */\n style?: ConvertToMarkStyleSpec<IComposedTextMarkSpec>;\n /** 交互样式配置 */\n state?: LabelStateStyle<Partial<IComposedTextMarkSpec>>;\n /** 标签防重叠配置 */\n overlap?: BaseLabelAttrs['overlap'] & {\n /**\n * 防重叠区域边距\n * @since 1.13.7\n */\n padding?: DataLabelAttrs['size']['padding'];\n };\n /** 标签智能反色配置 */\n smartInvert?: BaseLabelAttrs['smartInvert'];\n /**\n * 堆积数据过滤类型\n * @since 1.12.0\n */\n stackDataFilterType?: 'min' | 'max';\n /** 自定义标签数据筛选和排序\n * @since 1.3.0\n */\n dataFilter?: BaseLabelAttrs['dataFilter'];\n /** 自定义标签布局函数。\n * @description 当配置了 customLayoutFunc 后,默认布局和防重叠逻辑将不再生效。(overlap/position/offset不生效)\n * @since 1.3.0\n */\n customLayoutFunc?: BaseLabelAttrs['customLayoutFunc'];\n /** 自定义标签躲避函数\n * @description 当配置了 customOverlapFunc 后,会根据 position 和 offset 进行初始布局。配置的防重叠逻辑(overlap)不生效。\n * @since 1.3.0\n */\n customOverlapFunc?: BaseLabelAttrs['customOverlapFunc'];\n /**\n * 防重叠计算完成后的回调函数\n * @since 1.13.5\n */\n onAfterOverlapping?: BaseLabelAttrs['onAfterOverlapping'];\n /**\n * 标签布局\n */\n labelLayout?: 'series' | 'region';\n /**\n * 是否支持3D\n */\n support3d?: boolean;\n /**\n * 是否同步数据图元的状态变化\n * @default false\n * @since 1.9.0\n */\n syncState?: boolean;\n /**\n * 是否显示标签关联图元的 mark tooltip\n * @default false\n * @since 1.13.5\n */\n showRelatedMarkTooltip?: boolean;\n}\n\nexport type ILabelAnimationSpec = Pick<\n BaseLabelAttrs,\n 'animation' | 'animationEnter' | 'animationUpdate' | 'animationExit'\n>;\nexport type IMultiLabelSpec<T extends Omit<ILabelSpec, 'position'>> = T | T[];\n\ntype LabelStateStyle<T> = {\n /**\n * 标签hover状态样式配置\n */\n hover?: T;\n /**\n * 标签hover_reverse状态样式配置\n */\n hover_reverse?: T;\n /**\n * 标签选中状态样式配置\n */\n selected?: T;\n /**\n * 标签未选中状态样式配置\n */\n selected_reverse?: T;\n};\n\nexport type ITotalLabelSpec = Pick<\n ILabelSpec,\n 'visible' | 'formatMethod' | 'interactive' | 'offset' | 'style' | 'state' | 'textType' | 'overlap'\n> & {\n /** 堆叠汇总标签的位置,在一组堆积图元的上方或下方\n * @default 'top'\n */\n position?: 'top' | 'bottom';\n /**\n * 不管总计标签是否展示,内部都默认计算总计值\n * @default false\n */\n alwayCalculateTotal?: boolean;\n};\n\nexport interface ITotalLabelTheme\n extends Pick<ILabelSpec, 'visible' | 'interactive' | 'offset' | 'overlap' | 'smartInvert' | 'animation'> {\n style?: ITextMarkSpec;\n}\n\n// 内部处理转换后的标签配置\nexport type TransformedLabelSpec = ILabelSpec & {\n getStyleHandler: (series: ISeries) => (mark?: ILabelMark, spec?: any) => void;\n};\n"]}
|
|
@@ -20,8 +20,9 @@ import { transformLegendTitleAttributes } from "../util";
|
|
|
20
20
|
|
|
21
21
|
export function getContinuousLegendAttributes(spec) {
|
|
22
22
|
const _a = mergeSpec({}, spec), {title: title = {}, handler: handler = {}, rail: rail = {}, track: track = {}, startText: startText, endText: endText, handlerText: handlerText, sizeBackground: sizeBackground, background: background = {}, type: type, id: id, visible: visible, orient: orient, position: position, data: data, defaultSelected: defaultSelected, field: field, filter: filter, regionId: regionId, regionIndex: regionIndex, seriesIndex: seriesIndex, seriesId: seriesId, padding: padding} = _a, attrs = __rest(_a, [ "title", "handler", "rail", "track", "startText", "endText", "handlerText", "sizeBackground", "background", "type", "id", "visible", "orient", "position", "data", "defaultSelected", "field", "filter", "regionId", "regionIndex", "seriesIndex", "seriesId", "padding" ]);
|
|
23
|
-
return title.visible
|
|
24
|
-
|
|
23
|
+
return title.visible ? attrs.title = transformLegendTitleAttributes(title) : attrs.title = {
|
|
24
|
+
visible: !1
|
|
25
|
+
}, attrs.showHandler = !1 !== handler.visible, isEmpty(handler.style) || (attrs.handlerStyle = transformToGraphic(handler.style)),
|
|
25
26
|
isValid(rail.width) && (attrs.railWidth = rail.width), isValid(rail.height) && (attrs.railHeight = rail.height),
|
|
26
27
|
isEmpty(rail.style) || (attrs.railStyle = transformToGraphic(rail.style)), isEmpty(track.style) || (attrs.trackStyle = transformToGraphic(track.style)),
|
|
27
28
|
attrs.startText = transformComponentStyle(startText), attrs.endText = transformComponentStyle(endText),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/component/legend/continuous/util.ts"],"names":[],"mappings":"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","file":"util.js","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\nimport type { IColorLegendSpec, ISizeLegendSpec } from './interface';\nimport { ColorContinuousLegend, SizeContinuousLegend } from '@visactor/vrender-components';\nimport { isEmpty, isValid } from '@visactor/vutils';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { transformComponentStyle, transformToGraphic } from '../../../util/style';\nimport { transformLegendTitleAttributes } from '../util';\n\n// 获取连续图例组件属性\nexport function getContinuousLegendAttributes(spec: IColorLegendSpec | ISizeLegendSpec) {\n const {\n // 需要进行样式转换的属性\n title = {},\n handler = {},\n rail = {},\n track = {},\n startText,\n endText,\n handlerText,\n sizeBackground,\n background = {},\n\n // 以下不属于 legend 需要的属性,单独拿出来以免污染传递给组件的属性\n type,\n id,\n visible,\n orient,\n position,\n data,\n defaultSelected,\n field,\n filter,\n regionId,\n regionIndex,\n seriesIndex,\n seriesId,\n padding, // vchart 布局模块已经处理了\n\n ...restSpec\n } = mergeSpec({}, spec);\n\n const attrs = restSpec;\n\n // transform title\n if (title.visible) {\n attrs.title = transformLegendTitleAttributes(title);\n }\n\n // handlerStyle\n attrs.showHandler = handler.visible !== false;\n if (!isEmpty(handler.style)) {\n attrs.handlerStyle = transformToGraphic(handler.style);\n }\n if (isValid(rail.width)) {\n attrs.railWidth = rail.width;\n }\n if (isValid(rail.height)) {\n attrs.railHeight = rail.height;\n }\n if (!isEmpty(rail.style)) {\n attrs.railStyle = transformToGraphic(rail.style);\n }\n if (!isEmpty(track.style)) {\n attrs.trackStyle = transformToGraphic(track.style);\n }\n\n attrs.startText = transformComponentStyle(startText);\n attrs.endText = transformComponentStyle(endText);\n attrs.handlerText = transformComponentStyle(handlerText);\n\n if (!isEmpty(sizeBackground)) {\n attrs.sizeBackground = transformToGraphic(sizeBackground);\n }\n\n if (background.visible && !isEmpty(background.style)) {\n mergeSpec(attrs, background.style);\n if (isValid(background.padding)) {\n attrs.padding = background.padding;\n }\n }\n\n return attrs;\n}\n\nexport function isContinuousLegend(type: string) {\n return type === 'color' || type === 'size';\n}\n\nexport const ContinuousLegendMap = {\n color: ColorContinuousLegend,\n size: SizeContinuousLegend\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/component/legend/continuous/util.ts"],"names":[],"mappings":"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","file":"util.js","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\nimport type { IColorLegendSpec, ISizeLegendSpec } from './interface';\nimport { ColorContinuousLegend, SizeContinuousLegend } from '@visactor/vrender-components';\nimport { isEmpty, isValid } from '@visactor/vutils';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { transformComponentStyle, transformToGraphic } from '../../../util/style';\nimport { transformLegendTitleAttributes } from '../util';\n\n// 获取连续图例组件属性\nexport function getContinuousLegendAttributes(spec: IColorLegendSpec | ISizeLegendSpec) {\n const {\n // 需要进行样式转换的属性\n title = {},\n handler = {},\n rail = {},\n track = {},\n startText,\n endText,\n handlerText,\n sizeBackground,\n background = {},\n\n // 以下不属于 legend 需要的属性,单独拿出来以免污染传递给组件的属性\n type,\n id,\n visible,\n orient,\n position,\n data,\n defaultSelected,\n field,\n filter,\n regionId,\n regionIndex,\n seriesIndex,\n seriesId,\n padding, // vchart 布局模块已经处理了\n\n ...restSpec\n } = mergeSpec({}, spec);\n\n const attrs = restSpec;\n\n // transform title\n if (title.visible) {\n attrs.title = transformLegendTitleAttributes(title);\n } else {\n attrs.title = { visible: false };\n }\n\n // handlerStyle\n attrs.showHandler = handler.visible !== false;\n if (!isEmpty(handler.style)) {\n attrs.handlerStyle = transformToGraphic(handler.style);\n }\n if (isValid(rail.width)) {\n attrs.railWidth = rail.width;\n }\n if (isValid(rail.height)) {\n attrs.railHeight = rail.height;\n }\n if (!isEmpty(rail.style)) {\n attrs.railStyle = transformToGraphic(rail.style);\n }\n if (!isEmpty(track.style)) {\n attrs.trackStyle = transformToGraphic(track.style);\n }\n\n attrs.startText = transformComponentStyle(startText);\n attrs.endText = transformComponentStyle(endText);\n attrs.handlerText = transformComponentStyle(handlerText);\n\n if (!isEmpty(sizeBackground)) {\n attrs.sizeBackground = transformToGraphic(sizeBackground);\n }\n\n if (background.visible && !isEmpty(background.style)) {\n mergeSpec(attrs, background.style);\n if (isValid(background.padding)) {\n attrs.padding = background.padding;\n }\n }\n\n return attrs;\n}\n\nexport function isContinuousLegend(type: string) {\n return type === 'color' || type === 'size';\n}\n\nexport const ContinuousLegendMap = {\n color: ColorContinuousLegend,\n size: SizeContinuousLegend\n};\n"]}
|
|
@@ -20,9 +20,11 @@ import { transformLegendTitleAttributes } from "../util";
|
|
|
20
20
|
|
|
21
21
|
export function getLegendAttributes(spec, rect) {
|
|
22
22
|
const {title: title = {}, item: item = {}, pager: pager = {}, background: background = {}, type: type, id: id, visible: visible, orient: orient, position: position, data: data, filter: filter, regionId: regionId, regionIndex: regionIndex, seriesIndex: seriesIndex, seriesId: seriesId, padding: padding} = spec, attrs = __rest(spec, [ "title", "item", "pager", "background", "type", "id", "visible", "orient", "position", "data", "filter", "regionId", "regionIndex", "seriesIndex", "seriesId", "padding" ]);
|
|
23
|
-
return title.visible
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
return title.visible ? attrs.title = transformLegendTitleAttributes(title) : attrs.title = {
|
|
24
|
+
visible: !1
|
|
25
|
+
}, isEmpty(item.focusIconStyle) || transformToGraphic(item.focusIconStyle), item.shape && (item.shape = transformComponentStyle(item.shape)),
|
|
26
|
+
item.label && (item.label = transformComponentStyle(item.label)), item.value && (item.value = transformComponentStyle(item.value)),
|
|
27
|
+
item.background && (item.background = transformComponentStyle(item.background)),
|
|
26
28
|
isPercent(item.maxWidth) && (item.maxWidth = Number(item.maxWidth.substring(0, item.maxWidth.length - 1)) * rect.width / 100),
|
|
27
29
|
isPercent(item.width) && (item.width = Number(item.width.substring(0, item.width.length - 1)) * rect.width / 100),
|
|
28
30
|
isPercent(item.height) && (item.height = Number(item.height.substring(0, item.height.length - 1)) * rect.width / 100),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/component/legend/discrete/util.ts"],"names":[],"mappings":"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","file":"util.js","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { isEmpty, isValid } from '@visactor/vutils';\nimport { isPercent } from '../../../util/space';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { transformComponentStyle, transformToGraphic } from '../../../util/style';\nimport { transformLegendTitleAttributes } from '../util';\nimport type { IDiscreteLegendSpec, ILegendScrollbar, IPager } from './interface';\nimport type { ILayoutRect } from '../../../typings/layout';\n\nexport function getLegendAttributes(spec: IDiscreteLegendSpec, rect: ILayoutRect) {\n const {\n // 需要进行样式转换的属性\n title = {},\n item = {},\n pager = {},\n background = {},\n\n // 以下不属于 legend 需要的属性,单独拿出来以免污染传递给组件的属性\n type,\n id,\n visible,\n orient,\n position,\n data,\n filter,\n regionId,\n regionIndex,\n seriesIndex,\n seriesId,\n padding, // vchart 布局模块已经处理了\n\n ...restSpec\n } = spec;\n\n const attrs: any = restSpec;\n\n // transform title\n if (title.visible) {\n attrs.title = transformLegendTitleAttributes(title);\n }\n\n // transform item\n if (!isEmpty(item.focusIconStyle)) {\n transformToGraphic(item.focusIconStyle);\n }\n if (item.shape) {\n item.shape = transformComponentStyle(item.shape);\n }\n if (item.label) {\n item.label = transformComponentStyle(item.label);\n }\n if (item.value) {\n item.value = transformComponentStyle(item.value);\n }\n if (item.background) {\n item.background = transformComponentStyle(item.background);\n }\n\n if (isPercent(item.maxWidth)) {\n item.maxWidth = (Number(item.maxWidth.substring(0, item.maxWidth.length - 1)) * rect.width) / 100;\n }\n if (isPercent(item.width)) {\n item.width = (Number(item.width.substring(0, item.width.length - 1)) * rect.width) / 100;\n }\n if (isPercent(item.height)) {\n item.height = (Number(item.height.substring(0, item.height.length - 1)) * rect.width) / 100;\n }\n attrs.item = item;\n\n if ((pager as ILegendScrollbar).type === 'scrollbar') {\n if (!isEmpty((pager as ILegendScrollbar).railStyle)) {\n transformToGraphic((pager as ILegendScrollbar).railStyle);\n }\n if (!isEmpty((pager as ILegendScrollbar).sliderStyle)) {\n transformToGraphic((pager as ILegendScrollbar).sliderStyle);\n }\n } else {\n // transform pager\n if (!isEmpty((pager as IPager).textStyle)) {\n transformToGraphic((pager as IPager).textStyle);\n }\n\n if ((pager as IPager).handler) {\n transformComponentStyle((pager as IPager).handler);\n }\n }\n\n attrs.pager = pager;\n\n if (background.visible && !isEmpty(background.style)) {\n mergeSpec(attrs, background.style);\n if (isValid(background.padding)) {\n attrs.padding = background.padding;\n }\n }\n\n return attrs;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/component/legend/discrete/util.ts"],"names":[],"mappings":";;;;;;;;;;;AACA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAAE,8BAA8B,EAAE,MAAM,SAAS,CAAC;AAIzD,MAAM,UAAU,mBAAmB,CAAC,IAAyB,EAAE,IAAiB;IAC9E,MAAM,EAEJ,KAAK,GAAG,EAAE,EACV,IAAI,GAAG,EAAE,EACT,KAAK,GAAG,EAAE,EACV,UAAU,GAAG,EAAE,EAGf,IAAI,EACJ,EAAE,EACF,OAAO,EACP,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,WAAW,EACX,WAAW,EACX,QAAQ,EACR,OAAO,KAGL,IAAI,EADH,QAAQ,UACT,IAAI,EAtBF,0KAsBL,CAAO,CAAC;IAET,MAAM,KAAK,GAAQ,QAAQ,CAAC;IAG5B,IAAI,KAAK,CAAC,OAAO,EAAE;QACjB,KAAK,CAAC,KAAK,GAAG,8BAA8B,CAAC,KAAK,CAAC,CAAC;KACrD;SAAM;QACL,KAAK,CAAC,KAAK,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;KAClC;IAGD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;QACjC,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;KACzC;IACD,IAAI,IAAI,CAAC,KAAK,EAAE;QACd,IAAI,CAAC,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAClD;IACD,IAAI,IAAI,CAAC,KAAK,EAAE;QACd,IAAI,CAAC,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAClD;IACD,IAAI,IAAI,CAAC,KAAK,EAAE;QACd,IAAI,CAAC,KAAK,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAClD;IACD,IAAI,IAAI,CAAC,UAAU,EAAE;QACnB,IAAI,CAAC,UAAU,GAAG,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KAC5D;IAED,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;QAC5B,IAAI,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;KACnG;IACD,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QACzB,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;KAC1F;IACD,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;QAC1B,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;KAC7F;IACD,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAElB,IAAK,KAA0B,CAAC,IAAI,KAAK,WAAW,EAAE;QACpD,IAAI,CAAC,OAAO,CAAE,KAA0B,CAAC,SAAS,CAAC,EAAE;YACnD,kBAAkB,CAAE,KAA0B,CAAC,SAAS,CAAC,CAAC;SAC3D;QACD,IAAI,CAAC,OAAO,CAAE,KAA0B,CAAC,WAAW,CAAC,EAAE;YACrD,kBAAkB,CAAE,KAA0B,CAAC,WAAW,CAAC,CAAC;SAC7D;KACF;SAAM;QAEL,IAAI,CAAC,OAAO,CAAE,KAAgB,CAAC,SAAS,CAAC,EAAE;YACzC,kBAAkB,CAAE,KAAgB,CAAC,SAAS,CAAC,CAAC;SACjD;QAED,IAAK,KAAgB,CAAC,OAAO,EAAE;YAC7B,uBAAuB,CAAE,KAAgB,CAAC,OAAO,CAAC,CAAC;SACpD;KACF;IAED,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;IAEpB,IAAI,UAAU,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;QACpD,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;YAC/B,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;SACpC;KACF;IAED,OAAO,KAAK,CAAC;AACf,CAAC","file":"util.js","sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { isEmpty, isValid } from '@visactor/vutils';\nimport { isPercent } from '../../../util/space';\nimport { mergeSpec } from '@visactor/vutils-extension';\nimport { transformComponentStyle, transformToGraphic } from '../../../util/style';\nimport { transformLegendTitleAttributes } from '../util';\nimport type { IDiscreteLegendSpec, ILegendScrollbar, IPager } from './interface';\nimport type { ILayoutRect } from '../../../typings/layout';\n\nexport function getLegendAttributes(spec: IDiscreteLegendSpec, rect: ILayoutRect) {\n const {\n // 需要进行样式转换的属性\n title = {},\n item = {},\n pager = {},\n background = {},\n\n // 以下不属于 legend 需要的属性,单独拿出来以免污染传递给组件的属性\n type,\n id,\n visible,\n orient,\n position,\n data,\n filter,\n regionId,\n regionIndex,\n seriesIndex,\n seriesId,\n padding, // vchart 布局模块已经处理了\n\n ...restSpec\n } = spec;\n\n const attrs: any = restSpec;\n\n // transform title\n if (title.visible) {\n attrs.title = transformLegendTitleAttributes(title);\n } else {\n attrs.title = { visible: false };\n }\n\n // transform item\n if (!isEmpty(item.focusIconStyle)) {\n transformToGraphic(item.focusIconStyle);\n }\n if (item.shape) {\n item.shape = transformComponentStyle(item.shape);\n }\n if (item.label) {\n item.label = transformComponentStyle(item.label);\n }\n if (item.value) {\n item.value = transformComponentStyle(item.value);\n }\n if (item.background) {\n item.background = transformComponentStyle(item.background);\n }\n\n if (isPercent(item.maxWidth)) {\n item.maxWidth = (Number(item.maxWidth.substring(0, item.maxWidth.length - 1)) * rect.width) / 100;\n }\n if (isPercent(item.width)) {\n item.width = (Number(item.width.substring(0, item.width.length - 1)) * rect.width) / 100;\n }\n if (isPercent(item.height)) {\n item.height = (Number(item.height.substring(0, item.height.length - 1)) * rect.width) / 100;\n }\n attrs.item = item;\n\n if ((pager as ILegendScrollbar).type === 'scrollbar') {\n if (!isEmpty((pager as ILegendScrollbar).railStyle)) {\n transformToGraphic((pager as ILegendScrollbar).railStyle);\n }\n if (!isEmpty((pager as ILegendScrollbar).sliderStyle)) {\n transformToGraphic((pager as ILegendScrollbar).sliderStyle);\n }\n } else {\n // transform pager\n if (!isEmpty((pager as IPager).textStyle)) {\n transformToGraphic((pager as IPager).textStyle);\n }\n\n if ((pager as IPager).handler) {\n transformComponentStyle((pager as IPager).handler);\n }\n }\n\n attrs.pager = pager;\n\n if (background.visible && !isEmpty(background.style)) {\n mergeSpec(attrs, background.style);\n if (isValid(background.padding)) {\n attrs.padding = background.padding;\n }\n }\n\n return attrs;\n}\n"]}
|
package/esm/constant/event.d.ts
CHANGED
package/esm/constant/event.js
CHANGED
|
@@ -39,4 +39,6 @@ export var Event_Bubble_Level;
|
|
|
39
39
|
Event_Bubble_Level.vchart = "vchart", Event_Bubble_Level.chart = "chart", Event_Bubble_Level.model = "model",
|
|
40
40
|
Event_Bubble_Level.mark = "mark";
|
|
41
41
|
}(Event_Bubble_Level || (Event_Bubble_Level = {}));
|
|
42
|
+
|
|
43
|
+
export const EventBubbleLevels = [ Event_Bubble_Level.mark, Event_Bubble_Level.model, Event_Bubble_Level.chart, Event_Bubble_Level.vchart ];
|
|
42
44
|
//# sourceMappingURL=event.js.map
|