@visactor/vchart 1.10.2-alpha.3 → 1.10.2
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.js +623 -265
- package/build/index.min.js +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/cjs/animation/utils.d.ts +3 -3
- package/cjs/animation/utils.js.map +1 -1
- package/cjs/compile/compiler.js +1 -1
- package/cjs/compile/compiler.js.map +1 -1
- package/cjs/compile/mark/compilable-mark.js +3 -3
- package/cjs/compile/mark/compilable-mark.js.map +1 -1
- package/cjs/component/custom-mark/custom-mark.d.ts +4 -0
- package/cjs/component/custom-mark/custom-mark.js +32 -13
- package/cjs/component/custom-mark/custom-mark.js.map +1 -1
- package/cjs/component/label/total-label.js +1 -1
- package/cjs/component/label/total-label.js.map +1 -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/event/event-dispatcher.d.ts +2 -0
- package/cjs/event/event-dispatcher.js +21 -2
- package/cjs/event/event-dispatcher.js.map +1 -1
- package/cjs/event/interface.d.ts +8 -0
- package/cjs/event/interface.js.map +1 -1
- package/cjs/interaction/interaction.js +1 -1
- package/cjs/interaction/interaction.js.map +1 -1
- package/cjs/interaction/interface.d.ts +8 -8
- package/cjs/interaction/interface.js.map +1 -1
- package/cjs/mark/group.js +1 -3
- package/cjs/mark/group.js.map +1 -1
- package/cjs/series/base/base-series.d.ts +2 -2
- package/cjs/series/base/base-series.js +41 -30
- package/cjs/series/base/base-series.js.map +1 -1
- package/cjs/theme/builtin/common/component/crosshair.js +2 -8
- package/cjs/theme/builtin/common/component/crosshair.js.map +1 -1
- package/esm/animation/utils.d.ts +3 -3
- package/esm/animation/utils.js.map +1 -1
- package/esm/compile/compiler.js +1 -1
- package/esm/compile/compiler.js.map +1 -1
- package/esm/compile/mark/compilable-mark.js +3 -3
- package/esm/compile/mark/compilable-mark.js.map +1 -1
- package/esm/component/custom-mark/custom-mark.d.ts +4 -0
- package/esm/component/custom-mark/custom-mark.js +33 -12
- package/esm/component/custom-mark/custom-mark.js.map +1 -1
- package/esm/component/label/total-label.js +1 -1
- package/esm/component/label/total-label.js.map +1 -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/event/event-dispatcher.d.ts +2 -0
- package/esm/event/event-dispatcher.js +22 -1
- package/esm/event/event-dispatcher.js.map +1 -1
- package/esm/event/interface.d.ts +8 -0
- package/esm/event/interface.js.map +1 -1
- package/esm/interaction/interaction.js +1 -1
- package/esm/interaction/interaction.js.map +1 -1
- package/esm/interaction/interface.d.ts +8 -8
- package/esm/interaction/interface.js.map +1 -1
- package/esm/mark/group.js +1 -3
- package/esm/mark/group.js.map +1 -1
- package/esm/series/base/base-series.d.ts +2 -2
- package/esm/series/base/base-series.js +41 -30
- package/esm/series/base/base-series.js.map +1 -1
- package/esm/theme/builtin/common/component/crosshair.js +2 -8
- package/esm/theme/builtin/common/component/crosshair.js.map +1 -1
- package/package.json +15 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/component/label/total-label.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAIxG,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAIvD,OAAO,EAAE,aAAa,IAAI,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGlD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,MAAM,OAAO,UAAW,SAAQ,kBAAkB;IAAlD;;QAEE,SAAI,GAAG,iBAAiB,CAAC,UAAU,CAAC;QACpC,SAAI,GAAW,iBAAiB,CAAC,UAAU,CAAC;QAG5C,YAAO,GAAG,YAAY,CAAC;QAEvB,iBAAY,GAAW,YAAY,CAAC,KAAK,CAAC;IA8J5C,CAAC;IAzJC,MAAM,CAAC,WAAW,CAAC,SAAc,EAAE,aAA8B;;QAC/D,MAAM,QAAQ,GAAqB,EAAE,CAAC;QACtC,MAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,MAAM,0CAAE,OAAO,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,EAAE;;YACzD,MAAA,UAAU,CAAC,aAAa,0CAAE,OAAO,CAAC,WAAW,CAAC,EAAE;gBAC9C,MAAM,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;gBACnD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACrC,IAAI,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,OAAO,EAAE;oBACtB,QAAQ,CAAC,IAAI,CAAC;wBACZ,IAAI,EAAE,SAAS;wBACf,IAAI,EAAE,iBAAiB,CAAC,UAAU;wBAClC,QAAQ,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC;wBAC/C,YAAY,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;wBACtD,aAAa,EAAE,CAAC,WAAW,CAAC;wBAC5B,aAAa,EAAE,CAAC,WAAW,CAAC;qBAC7B,CAAC,CAAC;iBACJ;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,MAAwB;QAC3B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAES,aAAa;;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACjC,IAAI,MAAA,MAAM,CAAC,OAAO,EAAE,CAAC,UAAU,0CAAE,OAAO,EAAE;YACxC,MAAM,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC,kBAAwC,CAAC,CAAC,CAAC,CAAC,CAAC;YAChF,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,SAAoB,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,cAAc,EAAE,CAAe,CAAC;YAChH,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;YAC1B,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAC3B;IACH,CAAC;IAED,kBAAkB;QAChB,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACxD,IAAI,CAAC,YAAY,CACf,IAAI,CAAC,SAAS,EACd;YACE,IAAI,EAAE,CAAC,KAAY,EAAE,EAAE;gBACrB,OAAO,KAAK,CAAC,iBAAiB,CAAC,CAAC;YAClC,CAAC;SACF,EACD,QAAQ,EACR,cAAc,CAAC,OAAO,CACvB,CAAC;IACJ,CAAC;IAES,mBAAmB;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAChC,EAAE,IAAI,aAAwB,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,IAAI,wBAAwB,EAAE,EAC9E;YACE,aAAa,EAAE,OAAO;YACtB,eAAe,EAAE,IAAI;YACrB,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;SAChC,CACF,CAAC;QACF,IAAI,SAAS,EAAE;YACb,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;SAChC;IACH,CAAC;IAED,YAAY;QACV,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE;YAC3C,MAAM,OAAO,GAAG,aAAa,CAAC,UAAU,EAAgC,CAAC;YACzE,IAAI,OAAO,EAAE;gBACX,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,oBAAoB,EAAE,GAAG,EAAE;oBAC7D,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;wBAC5B,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;qBACzD;gBACH,CAAC,CAAC,CAAC;aACJ;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,qBAAqB;QACnB,KAAK,CAAC,qBAAqB,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE;YAC3C,MAAM,SAAS,GAAG,aAAa,CAAC,UAAU,EAAgC,CAAC;YAC3E,SAAS;iBACN,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;iBACnC,SAAS,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;iBACjC,UAAU,CAAC,GAAG,EAAE;gBACf,IAAI,IAAI,CAAC,SAAS,EAAE;oBAClB,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;oBAClD,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACxD,OAAO,SAAS,CACd;wBACE,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,KAAK,IAAI,EAAE;wBACxD,QAAQ,EAAE,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;wBACzD,CAAC,EAAE,CAAC;wBACJ,CAAC,EAAE,CAAC;qBACL,kBAEC,MAAM;wBACN,SAAS;wBACT,OAAO,EACP,UAAU,EAAE,CAAC,IAAS,EAAE,EAAE;4BACxB,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;wBAChE,CAAC,IACE,WAAW,EAEjB,CAAC;iBACH;YACH,CAAC,CAAC;iBACD,MAAM,CAAC,KAAK,CAAC,EAAE;gBACd,OAAO,aAAa,CAClB;oBACE,QAAQ,EAAE,IAAI,CAAC,SAAS;oBACxB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,MAAM;oBACN,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,UAAU;iBACvC,EACD,KAAK,EACL,IAAI,CAAC,KAAK,CAAC,YAAY,CACxB,CAAC;YACJ,CAAC,CAAC;iBACD,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,YAAY;QACV,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;;YAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,UAAU,EAAgB,CAAC;YACzE,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YACrB,MAAA,CAAC,CAAC,UAAU,EAAE,0CAAE,SAAS,CAAC;gBACxB,OAAO,EAAE;oBACP,KAAK,EAAE,IAAI;iBACZ;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,oBAAoB;QAClB,MAAM,MAAM,GAAU,EAAE,CAAC;QACzB,IAAI,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YAC1B,MAAM,WAAW,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,mBAAmB,EAAE,CAAC;YACzD,IAAI,WAAW,EAAE;gBACf,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aAC1B;QACH,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAES,UAAU;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,CAAC;;AApKM,eAAI,GAAG,iBAAiB,CAAC,UAAU,CAAC;AAIpC,kBAAO,GAAG,YAAY,CAAC;AAmKhC,MAAM,UAAU,kBAAkB,CAAC,MAAe,EAAE,IAAc;;IAChE,IAAI,QAAQ,CAAC;IACb,MAAM,EAAE,SAAS,EAAE,GAAG,MAA0B,CAAC;IACjD,MAAM,SAAS,GACb,SAAS,KAAK,YAAY;QACxB,CAAC,CAAC,MAAC,MAA2B,CAAC,cAAc,EAAE,0CAAE,SAAS,EAAE;QAC5D,CAAC,CAAC,MAAC,MAA2B,CAAC,cAAc,EAAE,0CAAE,SAAS,EAAE,CAAC;IACjE,MAAM,WAAW,GAAG,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;IACnF,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,QAAQ,IAAI,EAAE;QACZ,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ;YACX,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC;YACzC,MAAM;QACR;YACE,QAAQ,GAAG,KAAK,CAAC;KACpB;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,EAAE;IACrC,qBAAqB,EAAE,CAAC;IACxB,iBAAiB,EAAE,CAAC;IACpB,qBAAqB,EAAE,CAAC;IACxB,OAAO,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AAC/D,CAAC,CAAC","file":"total-label.js","sourcesContent":["import type { ILabelMark } from '../../mark/label';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerLabelMark } from '../../mark/label';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../interface/type';\nimport { AttributeLevel, LayoutZIndex, STACK_FIELD_TOTAL, STACK_FIELD_TOTAL_TOP } from '../../constant';\nimport type { IMark, MarkType } from '../../mark/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from '../../mark/interface';\nimport { mergeSpec } from '../../util/spec/merge-spec';\nimport type { ICartesianSeries, ISeries } from '../../series/interface';\nimport type { IGroupMark, IView } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerLabel as registerVGrammarLabel } from '@visactor/vgrammar-core';\nimport { textAttribute } from './util';\nimport { BaseLabelComponent } from './base-label';\nimport type { IModelInitOption, IModelSpecInfo } from '../../model/interface';\nimport type { Datum, Maybe } from '../../typings';\nimport { Factory } from '../../core/factory';\nimport { registerComponentMark } from '../../mark/component';\nimport type { IChartSpecInfo } from '../../chart/interface';\nimport { HOOK_EVENT } from '@visactor/vgrammar-core';\n\nexport class TotalLabel extends BaseLabelComponent {\n static type = ComponentTypeEnum.totalLabel;\n type = ComponentTypeEnum.totalLabel;\n name: string = ComponentTypeEnum.totalLabel;\n\n static specKey = 'totalLabel';\n specKey = 'totalLabel';\n\n layoutZIndex: number = LayoutZIndex.Label;\n\n private _textMark?: ILabelMark;\n private _baseMark?: IMark;\n\n static getSpecInfo(chartSpec: any, chartSpecInfo?: IChartSpecInfo): Maybe<IModelSpecInfo[]> {\n const specInfo: IModelSpecInfo[] = [];\n chartSpecInfo?.region?.forEach((regionInfo, regionIndex) => {\n regionInfo.seriesIndexes?.forEach(seriesIndex => {\n const { spec } = chartSpecInfo.series[seriesIndex];\n const labelSpec = spec[this.specKey];\n if (labelSpec?.visible) {\n specInfo.push({\n spec: labelSpec,\n type: ComponentTypeEnum.totalLabel,\n specPath: ['series', seriesIndex, this.specKey],\n specInfoPath: ['component', this.specKey, seriesIndex],\n regionIndexes: [regionIndex],\n seriesIndexes: [seriesIndex]\n });\n }\n });\n });\n return specInfo;\n }\n\n init(option: IModelInitOption): void {\n super.init(option);\n this._initTextMark();\n this._initLabelComponent();\n }\n\n protected _initTextMark() {\n const series = this._getSeries();\n if (series.getSpec().totalLabel?.visible) {\n const mark = series.getMarksInType([MarkTypeEnum.rect, MarkTypeEnum.symbol])[0];\n const textMark = this._createMark({ type: MarkTypeEnum.label, name: `${mark.name}-total-label` }) as ILabelMark;\n this._baseMark = mark;\n this._textMark = textMark;\n this._initTextMarkStyle();\n }\n }\n\n _initTextMarkStyle() {\n super.initMarkStyleWithSpec(this._textMark, this._spec);\n this.setMarkStyle(\n this._textMark,\n {\n text: (datum: Datum) => {\n return datum[STACK_FIELD_TOTAL];\n }\n },\n 'normal',\n AttributeLevel.Default\n );\n }\n\n protected _initLabelComponent() {\n const series = this._getSeries();\n const component = this._createMark(\n { type: MarkTypeEnum.component, name: `${series.name}-total-label-component` },\n {\n componentType: 'label',\n noSeparateStyle: true,\n support3d: this._spec.support3d\n }\n );\n if (component) {\n this._marks.addMark(component);\n }\n }\n\n afterCompile() {\n this._marks.forEach((componentMark, index) => {\n const product = componentMark.getProduct() as ReturnType<IView['label']>;\n if (product) {\n product.addEventListener(HOOK_EVENT.AFTER_ELEMENT_ENCODE, () => {\n if (this._isLayout === false) {\n this._delegateLabelEvent(product.getGroupGraphicItem());\n }\n });\n }\n });\n }\n\n updateLayoutAttribute(): void {\n super.updateLayoutAttribute();\n const series = this._getSeries();\n this._marks.forEach((componentMark, index) => {\n const component = componentMark.getProduct() as ReturnType<IView['label']>;\n component\n .target(this._baseMark.getProduct())\n .configure({ interactive: false })\n .labelStyle(() => {\n if (this._baseMark) {\n const { offset, animation, overlap } = this._spec;\n const interactive = this._interactiveConfig(this._spec);\n return mergeSpec(\n {\n textStyle: { pickable: this._spec.interactive === true },\n position: totalLabelPosition(series, this._baseMark.type),\n x: 0,\n y: 0\n },\n {\n offset,\n animation,\n overlap,\n dataFilter: (data: any) => {\n return data.filter((d: any) => d.data[STACK_FIELD_TOTAL_TOP]);\n },\n ...interactive\n }\n );\n }\n })\n .encode(datum => {\n return textAttribute(\n {\n baseMark: this._baseMark,\n labelMark: this._textMark,\n series,\n labelSpec: series.getSpec().totalLabel\n },\n datum,\n this._spec.formatMethod\n );\n })\n .size(() => this._regions[0].getLayoutRect());\n });\n }\n\n compileMarks() {\n this.getMarks().forEach(m => {\n const group = this._regions[0].getGroupMark().getProduct() as IGroupMark;\n m.compile({ group });\n m.getProduct()?.configure({\n context: {\n model: this\n }\n });\n });\n }\n\n getVRenderComponents() {\n const labels: any[] = [];\n this.getMarks().forEach(m => {\n const graphicItem = m.getProduct().getGroupGraphicItem();\n if (graphicItem) {\n labels.push(graphicItem);\n }\n });\n return labels;\n }\n\n protected _getSeries() {\n return this._option.getSeriesInIndex([this.getSpecPath()[1] as number])[0];\n }\n}\n\nexport function totalLabelPosition(series: ISeries, type: MarkType) {\n let position;\n const { direction } = series as ICartesianSeries;\n const isInverse =\n direction === 'horizontal'\n ? (series as ICartesianSeries).getXAxisHelper()?.isInverse()\n : (series as ICartesianSeries).getYAxisHelper()?.isInverse();\n const positionMap = { vertical: ['top', 'bottom'], horizontal: ['right', 'left'] };\n const index = isInverse ? 1 : 0;\n switch (type) {\n case 'rect':\n case 'symbol':\n position = positionMap[direction][index];\n break;\n default:\n position = 'top';\n }\n return position;\n}\n\nexport const registerTotalLabel = () => {\n registerVGrammarLabel();\n registerLabelMark();\n registerComponentMark();\n Factory.registerComponent(TotalLabel.type, TotalLabel, true);\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/component/label/total-label.ts"],"names":[],"mappings":"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","file":"total-label.js","sourcesContent":["import type { ILabelMark } from '../../mark/label';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerLabelMark } from '../../mark/label';\n// eslint-disable-next-line no-duplicate-imports\nimport { ComponentTypeEnum } from '../interface/type';\nimport { AttributeLevel, LayoutZIndex, STACK_FIELD_TOTAL, STACK_FIELD_TOTAL_TOP } from '../../constant';\nimport type { IMark, MarkType } from '../../mark/interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from '../../mark/interface';\nimport { mergeSpec } from '../../util/spec/merge-spec';\nimport type { ICartesianSeries, ISeries } from '../../series/interface';\nimport type { IGroupMark, IView } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerLabel as registerVGrammarLabel } from '@visactor/vgrammar-core';\nimport { textAttribute } from './util';\nimport { BaseLabelComponent } from './base-label';\nimport type { IModelInitOption, IModelSpecInfo } from '../../model/interface';\nimport type { Datum, Maybe } from '../../typings';\nimport { Factory } from '../../core/factory';\nimport { registerComponentMark } from '../../mark/component';\nimport type { IChartSpecInfo } from '../../chart/interface';\nimport { HOOK_EVENT } from '@visactor/vgrammar-core';\n\nexport class TotalLabel extends BaseLabelComponent {\n static type = ComponentTypeEnum.totalLabel;\n type = ComponentTypeEnum.totalLabel;\n name: string = ComponentTypeEnum.totalLabel;\n\n static specKey = 'totalLabel';\n specKey = 'totalLabel';\n\n layoutZIndex: number = LayoutZIndex.Label;\n\n private _textMark?: ILabelMark;\n private _baseMark?: IMark;\n\n static getSpecInfo(chartSpec: any, chartSpecInfo?: IChartSpecInfo): Maybe<IModelSpecInfo[]> {\n const specInfo: IModelSpecInfo[] = [];\n chartSpecInfo?.region?.forEach((regionInfo, regionIndex) => {\n regionInfo.seriesIndexes?.forEach(seriesIndex => {\n const { spec } = chartSpecInfo.series[seriesIndex];\n const labelSpec = spec[this.specKey];\n if (labelSpec?.visible) {\n specInfo.push({\n spec: labelSpec,\n type: ComponentTypeEnum.totalLabel,\n specPath: ['series', seriesIndex, this.specKey],\n specInfoPath: ['component', this.specKey, seriesIndex],\n regionIndexes: [regionIndex],\n seriesIndexes: [seriesIndex]\n });\n }\n });\n });\n return specInfo;\n }\n\n init(option: IModelInitOption): void {\n super.init(option);\n this._initTextMark();\n this._initLabelComponent();\n }\n\n protected _initTextMark() {\n const series = this._getSeries();\n if (series.getSpec().totalLabel?.visible) {\n const mark = series.getMarkInName(series.type);\n const textMark = this._createMark({ type: MarkTypeEnum.label, name: `${mark.name}-total-label` }) as ILabelMark;\n this._baseMark = mark;\n this._textMark = textMark;\n this._initTextMarkStyle();\n }\n }\n\n _initTextMarkStyle() {\n super.initMarkStyleWithSpec(this._textMark, this._spec);\n this.setMarkStyle(\n this._textMark,\n {\n text: (datum: Datum) => {\n return datum[STACK_FIELD_TOTAL];\n }\n },\n 'normal',\n AttributeLevel.Default\n );\n }\n\n protected _initLabelComponent() {\n const series = this._getSeries();\n const component = this._createMark(\n { type: MarkTypeEnum.component, name: `${series.name}-total-label-component` },\n {\n componentType: 'label',\n noSeparateStyle: true,\n support3d: this._spec.support3d\n }\n );\n if (component) {\n this._marks.addMark(component);\n }\n }\n\n afterCompile() {\n this._marks.forEach((componentMark, index) => {\n const product = componentMark.getProduct() as ReturnType<IView['label']>;\n if (product) {\n product.addEventListener(HOOK_EVENT.AFTER_ELEMENT_ENCODE, () => {\n if (this._isLayout === false) {\n this._delegateLabelEvent(product.getGroupGraphicItem());\n }\n });\n }\n });\n }\n\n updateLayoutAttribute(): void {\n super.updateLayoutAttribute();\n const series = this._getSeries();\n this._marks.forEach((componentMark, index) => {\n const component = componentMark.getProduct() as ReturnType<IView['label']>;\n component\n .target(this._baseMark.getProduct())\n .configure({ interactive: false })\n .labelStyle(() => {\n if (this._baseMark) {\n const { offset, animation, overlap } = this._spec;\n const interactive = this._interactiveConfig(this._spec);\n return mergeSpec(\n {\n textStyle: { pickable: this._spec.interactive === true },\n position: totalLabelPosition(series, this._baseMark.type),\n x: 0,\n y: 0\n },\n {\n offset,\n animation,\n overlap,\n dataFilter: (data: any) => {\n return data.filter((d: any) => d.data[STACK_FIELD_TOTAL_TOP]);\n },\n ...interactive\n }\n );\n }\n })\n .encode(datum => {\n return textAttribute(\n {\n baseMark: this._baseMark,\n labelMark: this._textMark,\n series,\n labelSpec: series.getSpec().totalLabel\n },\n datum,\n this._spec.formatMethod\n );\n })\n .size(() => this._regions[0].getLayoutRect());\n });\n }\n\n compileMarks() {\n this.getMarks().forEach(m => {\n const group = this._regions[0].getGroupMark().getProduct() as IGroupMark;\n m.compile({ group });\n m.getProduct()?.configure({\n context: {\n model: this\n }\n });\n });\n }\n\n getVRenderComponents() {\n const labels: any[] = [];\n this.getMarks().forEach(m => {\n const graphicItem = m.getProduct().getGroupGraphicItem();\n if (graphicItem) {\n labels.push(graphicItem);\n }\n });\n return labels;\n }\n\n protected _getSeries() {\n return this._option.getSeriesInIndex([this.getSpecPath()[1] as number])[0];\n }\n}\n\nexport function totalLabelPosition(series: ISeries, type: MarkType) {\n let position;\n const { direction } = series as ICartesianSeries;\n const isInverse =\n direction === 'horizontal'\n ? (series as ICartesianSeries).getXAxisHelper()?.isInverse()\n : (series as ICartesianSeries).getYAxisHelper()?.isInverse();\n const positionMap = { vertical: ['top', 'bottom'], horizontal: ['right', 'left'] };\n const index = isInverse ? 1 : 0;\n switch (type) {\n case 'rect':\n case 'symbol':\n position = positionMap[direction][index];\n break;\n default:\n position = 'top';\n }\n return position;\n}\n\nexport const registerTotalLabel = () => {\n registerVGrammarLabel();\n registerLabelMark();\n registerComponentMark();\n Factory.registerComponent(TotalLabel.type, TotalLabel, true);\n};\n"]}
|
package/esm/core/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { VChart } from './vchart';
|
|
2
2
|
import { Factory } from './factory';
|
|
3
3
|
export { VChart, Factory };
|
|
4
|
-
export declare const version = "1.10.2
|
|
4
|
+
export declare const version = "1.10.2";
|
|
5
5
|
export type { IVChart } from './interface';
|
|
6
6
|
export type { IStateSpec, StateValueType } from '../compile/mark';
|
|
7
7
|
export * from '../typings/spec/common';
|
package/esm/core/index.js
CHANGED
package/esm/core/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAG3B,MAAM,CAAC,MAAM,OAAO,GAAG,
|
|
1
|
+
{"version":3,"sources":["../src/core/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AAG3B,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC;AAMhC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAK5B,cAAc,uBAAuB,CAAC;AAGtC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,gBAAgB,CAAC;AAG/B,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAGjD,cAAc,WAAW,CAAC","file":"index.js","sourcesContent":["/**\n * @description The core module of VChart, containing the necessary interfaces for using VChart.\n */\n\nimport { VChart } from './vchart';\nimport { Factory } from './factory';\n\nexport { VChart, Factory };\n\n// export the version\nexport const version = \"1.10.2\";\n\n// export necessary types\nexport type { IVChart } from './interface';\nexport type { IStateSpec, StateValueType } from '../compile/mark';\n\nexport * from '../typings/spec/common';\nexport * from '../event/interface';\nexport * from '../theme/interface';\nexport * from '../constant';\nexport * from './interface';\n\n/**\n * spec\n */\nexport * from '../typings/spec/index';\n\n// tooltip\nexport * from '../typings/tooltip';\n\n// theme\nexport * from '../theme/index';\n\n// vrender\nexport { vglobal } from '@visactor/vrender-core';\n\n// plugin\nexport * from '../plugin';\n"]}
|
|
@@ -19,10 +19,12 @@ export declare class EventDispatcher implements IEventDispatcher {
|
|
|
19
19
|
private _filter;
|
|
20
20
|
private _prepareParams;
|
|
21
21
|
private _onDelegate;
|
|
22
|
+
private _onDelegateInteractionEvent;
|
|
22
23
|
private _invoke;
|
|
23
24
|
private _getQueryLevel;
|
|
24
25
|
private _parseQuery;
|
|
25
26
|
private getEventBubble;
|
|
26
27
|
private getEventListeners;
|
|
27
28
|
private _isValidEvent;
|
|
29
|
+
private _isInteractionEvent;
|
|
28
30
|
}
|
|
@@ -4,6 +4,8 @@ import { isValid, debounce, throttle, get, isFunction } from "@visactor/vutils";
|
|
|
4
4
|
|
|
5
5
|
import { BASE_EVENTS, Event_Bubble_Level, Event_Source_Type, VGRAMMAR_HOOK_EVENT } from "../constant/event";
|
|
6
6
|
|
|
7
|
+
import { Factory as VGrammarFactory } from "@visactor/vgrammar-core";
|
|
8
|
+
|
|
7
9
|
const componentTypeMap = {
|
|
8
10
|
cartesianAxis: "axis",
|
|
9
11
|
"cartesianAxis-band": "axis",
|
|
@@ -43,10 +45,21 @@ export class EventDispatcher {
|
|
|
43
45
|
node: get(listenerParams.event, "target")
|
|
44
46
|
};
|
|
45
47
|
this.dispatch(listenerParams.type, params);
|
|
48
|
+
}, this._onDelegateInteractionEvent = listenerParams => {
|
|
49
|
+
const chart = this.globalInstance.getChart(), event = listenerParams.event;
|
|
50
|
+
let items = null;
|
|
51
|
+
event.elements && (items = event.elements);
|
|
52
|
+
const params = {
|
|
53
|
+
event: listenerParams.event,
|
|
54
|
+
chart: chart,
|
|
55
|
+
items: items,
|
|
56
|
+
datums: items && items.map((item => item.getDatum()))
|
|
57
|
+
};
|
|
58
|
+
this.dispatch(listenerParams.type, params);
|
|
46
59
|
}, this.globalInstance = vchart, this._compiler = compiler;
|
|
47
60
|
}
|
|
48
61
|
register(eType, handler) {
|
|
49
|
-
var _a, _b, _c, _d;
|
|
62
|
+
var _a, _b, _c, _d, _e;
|
|
50
63
|
this._parseQuery(handler);
|
|
51
64
|
const bubbles = this.getEventBubble((null === (_a = handler.filter) || void 0 === _a ? void 0 : _a.source) || Event_Source_Type.chart), listeners = this.getEventListeners((null === (_b = handler.filter) || void 0 === _b ? void 0 : _b.source) || Event_Source_Type.chart);
|
|
52
65
|
bubbles.get(eType) || bubbles.set(eType, new Bubble);
|
|
@@ -55,6 +68,10 @@ export class EventDispatcher {
|
|
|
55
68
|
const callback = this._onDelegate.bind(this);
|
|
56
69
|
this._compiler.addEventListener(null === (_d = handler.filter) || void 0 === _d ? void 0 : _d.source, eType, callback),
|
|
57
70
|
listeners.set(eType, callback);
|
|
71
|
+
} else if (this._isInteractionEvent(eType) && !listeners.has(eType)) {
|
|
72
|
+
const callback = this._onDelegateInteractionEvent.bind(this);
|
|
73
|
+
this._compiler.addEventListener(null === (_e = handler.filter) || void 0 === _e ? void 0 : _e.source, eType, callback),
|
|
74
|
+
listeners.set(eType, callback);
|
|
58
75
|
}
|
|
59
76
|
return this;
|
|
60
77
|
}
|
|
@@ -202,4 +219,8 @@ export class EventDispatcher {
|
|
|
202
219
|
_isValidEvent(eType) {
|
|
203
220
|
return BASE_EVENTS.includes(eType) || Object.values(VGRAMMAR_HOOK_EVENT).includes(eType);
|
|
204
221
|
}
|
|
222
|
+
_isInteractionEvent(eType) {
|
|
223
|
+
let interactionType;
|
|
224
|
+
return eType && (interactionType = eType.split(":")[0], interactionType) && VGrammarFactory.hasInteraction(interactionType);
|
|
225
|
+
}
|
|
205
226
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/event/event-dispatcher.ts"],"names":[],"mappings":"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","file":"event-dispatcher.js","sourcesContent":["import { Bubble } from './bubble';\nimport { isValid, debounce, throttle, get, isFunction } from '@visactor/vutils';\nimport { BASE_EVENTS, Event_Bubble_Level, Event_Source_Type, VGRAMMAR_HOOK_EVENT } from '../constant/event';\nimport type {\n EventType,\n EventQuery,\n EventHandler,\n EventParamsDefinition,\n IEventDispatcher,\n EventBubbleLevel,\n BaseEventParams,\n EventParams,\n EventFilter,\n EventSourceType\n} from './interface';\nimport type { VChart } from '../core/vchart';\nimport type { CompilerListenerParameters } from '../compile/interface';\nimport type { Compiler } from '../compile/compiler';\nimport type { StringOrNumber } from '../typings';\n\nconst componentTypeMap = {\n cartesianAxis: 'axis',\n 'cartesianAxis-band': 'axis',\n 'cartesianAxis-linear': 'axis',\n 'cartesianAxis-time': 'axis',\n polarAxis: 'axis',\n 'polarAxis-band': 'axis',\n 'polarAxis-linear': 'axis',\n discreteLegend: 'legend',\n continuousLegend: 'legend',\n colorLegend: 'legend',\n sizeLegend: 'legend',\n label: 'label'\n};\n\nexport class EventDispatcher implements IEventDispatcher {\n globalInstance: VChart;\n\n // view 事件与 window 事件视作为不同类型的事件信息,进行独立的冒泡处理\n private _viewBubbles: Map<EventType, Bubble> = new Map<EventType, Bubble>();\n private _windowBubbles: Map<EventType, Bubble> = new Map<EventType, Bubble>();\n private _canvasBubbles: Map<EventType, Bubble> = new Map<EventType, Bubble>();\n\n private _viewListeners: Map<string, (params: CompilerListenerParameters) => void> = new Map<\n string,\n (params: CompilerListenerParameters) => void\n >();\n private _windowListeners: Map<string, (params: CompilerListenerParameters) => void> = new Map<\n string,\n (params: CompilerListenerParameters) => void\n >();\n private _canvasListeners: Map<string, (params: CompilerListenerParameters) => void> = new Map<\n string,\n (params: CompilerListenerParameters) => void\n >();\n\n private _compiler: Compiler;\n\n constructor(vchart: VChart, compiler: Compiler) {\n this.globalInstance = vchart;\n this._compiler = compiler;\n }\n\n register<Evt extends EventType>(eType: Evt, handler: EventHandler<EventParamsDefinition[Evt]>): this {\n // 解析 query 配置并生成最终 handler 内容\n this._parseQuery(handler);\n // view/window 事件做独立的处理\n const bubbles = this.getEventBubble(handler.filter?.source || Event_Source_Type.chart);\n const listeners = this.getEventListeners(handler.filter?.source || Event_Source_Type.chart);\n\n if (!bubbles.get(eType)) {\n bubbles.set(eType, new Bubble());\n }\n\n // 挂载事件监听\n const bubble = bubbles.get(eType) as Bubble;\n bubble.addHandler(handler, handler.filter?.level as EventBubbleLevel);\n if (this._isValidEvent(eType) && !listeners.has(eType)) {\n const callback = this._onDelegate.bind(this);\n this._compiler.addEventListener(handler.filter?.source as EventSourceType, eType, callback);\n listeners.set(eType, callback);\n }\n return this;\n }\n\n unregister<Evt extends EventType>(eType: Evt, handler?: EventHandler<EventParamsDefinition[Evt]>): this {\n let clean: boolean = false;\n // view/window 事件做独立的处理\n const bubbles = this.getEventBubble(handler?.filter?.source || Event_Source_Type.chart);\n const listeners = this.getEventListeners(handler?.filter?.source || Event_Source_Type.chart);\n\n if (!handler) {\n const bubble = bubbles.get(eType);\n bubble?.release();\n bubbles.delete(eType);\n clean = true;\n } else {\n const bubble = bubbles.get(eType);\n bubble?.removeHandler(handler);\n if (bubble?.getCount() === 0) {\n bubble?.release();\n bubbles.delete(eType);\n clean = true;\n }\n\n if ((handler?.wrappedCallback as any)?.cancel) {\n // 取消debounce/throttle事件,释放闭包内部的上下文对象\n (handler.wrappedCallback as any).cancel();\n }\n }\n // 某个事件下所有的监听取消之后删除语法层事件的代理\n if (clean && this._isValidEvent(eType)) {\n const callback = listeners.get(eType) as (params: CompilerListenerParameters) => void;\n this._compiler.removeEventListener(handler?.filter?.source || Event_Source_Type.chart, eType, callback);\n listeners.delete(eType);\n }\n return this;\n }\n\n dispatch<Evt extends EventType>(eType: Evt, params: EventParamsDefinition[Evt], level?: EventBubbleLevel): this {\n // 默认事件类别为 view\n const bubble = this.getEventBubble((params as BaseEventParams).source || Event_Source_Type.chart).get(\n eType\n ) as Bubble;\n // 没有任何监听事件时,bubble 不存在\n if (!bubble) {\n return this;\n }\n\n // 事件冒泡逻辑:Mark -> Model -> Chart -> VChart\n let stopBubble: boolean = false;\n\n if (level) {\n // 如果指定了 level,则直接处理,不进行冒泡\n const handlers = bubble.getHandlers(level);\n stopBubble = this._invoke(handlers, eType, params);\n } else {\n // Mark 级别的事件只包含对语法层代理的基础事件\n const handlers = bubble.getHandlers(Event_Bubble_Level.mark);\n stopBubble = this._invoke(handlers, eType, params);\n\n if (!stopBubble) {\n const handlers = bubble.getHandlers(Event_Bubble_Level.model);\n stopBubble = this._invoke(handlers, eType, params);\n }\n if (!stopBubble) {\n const handlers = bubble.getHandlers(Event_Bubble_Level.chart);\n stopBubble = this._invoke(handlers, eType, params);\n }\n if (!stopBubble) {\n const handlers = bubble.getHandlers(Event_Bubble_Level.vchart);\n stopBubble = this._invoke(handlers, eType, params);\n }\n }\n\n return this;\n }\n\n clear(): void {\n for (const entry of this._viewListeners.entries()) {\n this._compiler.removeEventListener(Event_Source_Type.chart, entry[0], entry[1]);\n }\n this._viewListeners.clear();\n for (const entry of this._windowListeners.entries()) {\n this._compiler.removeEventListener(Event_Source_Type.window, entry[0], entry[1]);\n }\n this._windowListeners.clear();\n for (const entry of this._canvasListeners.entries()) {\n this._compiler.removeEventListener(Event_Source_Type.canvas, entry[0], entry[1]);\n }\n this._canvasListeners.clear();\n for (const bubble of this._viewBubbles.values()) {\n bubble.release();\n }\n this._viewBubbles.clear();\n for (const bubble of this._windowBubbles.values()) {\n bubble.release();\n }\n this._windowBubbles.clear();\n for (const bubble of this._canvasBubbles.values()) {\n bubble.release();\n }\n this._canvasBubbles.clear();\n }\n\n release(): void {\n this.clear();\n this.globalInstance = null;\n this._compiler = null;\n }\n\n /**\n * 基于转换后的事件筛选配置过滤需要调用的 handler\n */\n private _filter<Evt extends EventType>(filter: EventFilter, evt: Evt, params: EventParamsDefinition[Evt]): boolean {\n if (isFunction(filter.filter) && !filter.filter(params)) {\n return false;\n }\n\n // 事件 level 不需要筛选,在冒泡流程中已经处理了 level 的逻辑\n if (filter.nodeName && get(params, 'node.name') !== filter.nodeName) {\n return false;\n }\n\n if (filter.markName && (params as BaseEventParams)?.mark?.name !== filter.markName) {\n // 对于 markName 的筛选需要包含所有父级 mark 的 name\n return false;\n }\n\n let modelType = params.model?.type;\n if (componentTypeMap[modelType]) {\n modelType = componentTypeMap[modelType];\n }\n if (filter.type && modelType !== filter.type) {\n return false;\n }\n\n // 如果配置了 level 为 'mark' 并且没有配置 type,则只在事件参数中包含了 mark 时才触发\n if (filter.level === 'mark' && !filter.type && !(params as BaseEventParams)?.mark) {\n return false;\n }\n\n // 如果配置了 level 为 'model' 并且没有配置 type,则只在事件参数中包含了 model 时才触发\n if (filter.level === 'model' && !filter.type && !(params as BaseEventParams)?.model) {\n return false;\n }\n\n if (isValid(filter.userId) && params.model?.userId !== filter.userId) {\n return false;\n }\n\n return true;\n }\n\n private _prepareParams<Evt extends EventType>(\n filter: EventFilter,\n params: EventParamsDefinition[Evt]\n ): EventParamsDefinition[Evt] {\n // 如果针对于 mark 做了筛选,则事件参数转为筛选器制定的父级 mark\n if (filter.markName && params.mark && (params as BaseEventParams).itemMap) {\n const markId = params.mark.getProductId();\n const item = (params as BaseEventParams).itemMap.get(markId);\n const datum = item?.getDatum();\n return { ...params, item, datum };\n }\n return { ...params };\n }\n\n /**\n * 代理语法层事件的监听回调\n */\n private _onDelegate = (listenerParams: CompilerListenerParameters) => {\n const chart = this.globalInstance.getChart();\n const model = (isValid(listenerParams.modelId) && chart?.getModelById(listenerParams.modelId)) || undefined;\n const mark = (isValid(listenerParams.markId) && chart?.getMarkById(listenerParams.markId)) || null;\n\n // FIXME: 这里操作的应当是场景树结构,与 vgrammar 结构无关\n // 遍历取到所有父级的 mark 以支持子元素响应父元素事件\n const itemMap = new Map<string, any>();\n let targetMark: any = listenerParams.item?.mark;\n if (targetMark && isValid(targetMark.id())) {\n itemMap.set(targetMark.id(), listenerParams.item);\n }\n while (targetMark?.elements) {\n const id = targetMark.id();\n // 由于父级的 markName 可能重复,因此只取最近的父级 mark\n if (isValid(id) && !itemMap.has(id)) {\n itemMap.set(id, targetMark.elements[0]);\n }\n targetMark = targetMark.group;\n }\n\n const params: BaseEventParams = {\n event: listenerParams.event,\n item: listenerParams.item,\n datum: listenerParams.datum,\n source: listenerParams.source,\n itemMap,\n chart,\n model,\n mark: mark ?? undefined,\n node: get(listenerParams.event, 'target')\n };\n this.dispatch(listenerParams.type, params);\n };\n\n /**\n * 调用相应事件监听下的 handlers\n */\n private _invoke<Evt extends EventType>(\n handlers: EventHandler<EventParams>[],\n type: EventType,\n params: EventParamsDefinition[Evt]\n ): boolean {\n const result = handlers.map(handler => {\n const filter = handler.filter as EventFilter;\n if (!handler.query || this._filter(filter, type, params)) {\n const callback = handler.wrappedCallback || handler.callback;\n const stopBubble = callback.call(null, this._prepareParams(filter, params));\n const doStopBubble = stopBubble ?? handler.query?.consume;\n if (doStopBubble) {\n (params as BaseEventParams).event?.stopPropagation();\n (params as BaseEventParams).event?.preventDefault();\n }\n return !!doStopBubble;\n }\n return undefined;\n });\n // 如果某个事件回调阻止了冒泡,则阻止更高级别事件的调用过程\n return result.some(r => r === true);\n }\n\n /**\n * 依据事件 query 得到事件冒泡层级\n */\n private _getQueryLevel(query: EventQuery | null): EventBubbleLevel {\n // 事件默认监听在 vchart 层\n if (!query) {\n return Event_Bubble_Level.vchart;\n }\n if (query.level) {\n return query.level;\n }\n if (isValid(query.id)) {\n return Event_Bubble_Level.model;\n }\n\n return Event_Bubble_Level.vchart;\n }\n\n /**\n * 将用户 query 配置转换为最终事件筛选参数\n */\n private _parseQuery(handler: EventHandler<EventParams>): EventHandler<EventParams> {\n const query = handler.query;\n // 处理 query 带来的函数封装\n if (query?.throttle) {\n handler.wrappedCallback = throttle(handler.callback, query.throttle);\n } else if (query?.debounce) {\n handler.wrappedCallback = debounce(handler.callback, query.debounce);\n }\n let level = this._getQueryLevel(query);\n let type: string | null = null;\n let source: EventSourceType = Event_Source_Type.chart;\n let nodeName: string | null = null;\n let markName: string | null = null;\n let userId: StringOrNumber | null = null;\n\n if (query?.nodeName) {\n nodeName = query.nodeName;\n }\n\n if (query?.markName) {\n markName = query.markName;\n }\n\n if (query?.type && (level === Event_Bubble_Level.model || level === Event_Bubble_Level.mark)) {\n type = query.type;\n }\n if (query?.source) {\n source = query.source;\n }\n\n if (isValid(query?.id)) {\n userId = query?.id;\n level = Event_Bubble_Level.model; // 如果用户配置了 id,那么默认 level 为 model\n }\n handler.filter = {\n level,\n markName,\n type,\n source,\n nodeName,\n userId,\n filter: query?.filter ?? null\n };\n return handler;\n }\n\n private getEventBubble(source: EventSourceType) {\n switch (source) {\n case Event_Source_Type.chart:\n return this._viewBubbles;\n case Event_Source_Type.window:\n return this._windowBubbles;\n case Event_Source_Type.canvas:\n return this._canvasBubbles;\n default:\n return this._viewBubbles;\n }\n }\n\n private getEventListeners(source: EventSourceType) {\n switch (source) {\n case Event_Source_Type.chart:\n return this._viewListeners;\n case Event_Source_Type.window:\n return this._windowListeners;\n case Event_Source_Type.canvas:\n return this._canvasListeners;\n default:\n return this._viewListeners;\n }\n }\n\n private _isValidEvent(eType: string) {\n return BASE_EVENTS.includes(eType) || (Object.values(VGRAMMAR_HOOK_EVENT) as string[]).includes(eType);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/event/event-dispatcher.ts"],"names":[],"mappings":"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","file":"event-dispatcher.js","sourcesContent":["import { Bubble } from './bubble';\nimport { isValid, debounce, throttle, get, isFunction } from '@visactor/vutils';\nimport { BASE_EVENTS, Event_Bubble_Level, Event_Source_Type, VGRAMMAR_HOOK_EVENT } from '../constant/event';\nimport type {\n EventType,\n EventQuery,\n EventHandler,\n EventParamsDefinition,\n IEventDispatcher,\n EventBubbleLevel,\n BaseEventParams,\n EventParams,\n EventFilter,\n EventSourceType,\n InteractionEventParam\n} from './interface';\nimport type { VChart } from '../core/vchart';\nimport type { CompilerListenerParameters } from '../compile/interface';\nimport type { Compiler } from '../compile/compiler';\nimport type { StringOrNumber } from '../typings';\nimport type { IElement } from '@visactor/vgrammar-core';\nimport { Factory as VGrammarFactory } from '@visactor/vgrammar-core';\n\nconst componentTypeMap = {\n cartesianAxis: 'axis',\n 'cartesianAxis-band': 'axis',\n 'cartesianAxis-linear': 'axis',\n 'cartesianAxis-time': 'axis',\n polarAxis: 'axis',\n 'polarAxis-band': 'axis',\n 'polarAxis-linear': 'axis',\n discreteLegend: 'legend',\n continuousLegend: 'legend',\n colorLegend: 'legend',\n sizeLegend: 'legend',\n label: 'label'\n};\n\nexport class EventDispatcher implements IEventDispatcher {\n globalInstance: VChart;\n\n // view 事件与 window 事件视作为不同类型的事件信息,进行独立的冒泡处理\n private _viewBubbles: Map<EventType, Bubble> = new Map<EventType, Bubble>();\n private _windowBubbles: Map<EventType, Bubble> = new Map<EventType, Bubble>();\n private _canvasBubbles: Map<EventType, Bubble> = new Map<EventType, Bubble>();\n\n private _viewListeners: Map<string, (params: CompilerListenerParameters) => void> = new Map<\n string,\n (params: CompilerListenerParameters) => void\n >();\n private _windowListeners: Map<string, (params: CompilerListenerParameters) => void> = new Map<\n string,\n (params: CompilerListenerParameters) => void\n >();\n private _canvasListeners: Map<string, (params: CompilerListenerParameters) => void> = new Map<\n string,\n (params: CompilerListenerParameters) => void\n >();\n\n private _compiler: Compiler;\n\n constructor(vchart: VChart, compiler: Compiler) {\n this.globalInstance = vchart;\n this._compiler = compiler;\n }\n\n register<Evt extends EventType>(eType: Evt, handler: EventHandler<EventParamsDefinition[Evt]>): this {\n // 解析 query 配置并生成最终 handler 内容\n this._parseQuery(handler);\n // view/window 事件做独立的处理\n const bubbles = this.getEventBubble(handler.filter?.source || Event_Source_Type.chart);\n const listeners = this.getEventListeners(handler.filter?.source || Event_Source_Type.chart);\n\n if (!bubbles.get(eType)) {\n bubbles.set(eType, new Bubble());\n }\n\n // 挂载事件监听\n const bubble = bubbles.get(eType) as Bubble;\n bubble.addHandler(handler, handler.filter?.level as EventBubbleLevel);\n if (this._isValidEvent(eType) && !listeners.has(eType)) {\n const callback = this._onDelegate.bind(this);\n this._compiler.addEventListener(handler.filter?.source as EventSourceType, eType, callback);\n listeners.set(eType, callback);\n } else if (this._isInteractionEvent(eType) && !listeners.has(eType)) {\n const callback = this._onDelegateInteractionEvent.bind(this);\n this._compiler.addEventListener(handler.filter?.source as EventSourceType, eType, callback);\n listeners.set(eType, callback);\n }\n return this;\n }\n\n unregister<Evt extends EventType>(eType: Evt, handler?: EventHandler<EventParamsDefinition[Evt]>): this {\n let clean: boolean = false;\n // view/window 事件做独立的处理\n const bubbles = this.getEventBubble(handler?.filter?.source || Event_Source_Type.chart);\n const listeners = this.getEventListeners(handler?.filter?.source || Event_Source_Type.chart);\n\n if (!handler) {\n const bubble = bubbles.get(eType);\n bubble?.release();\n bubbles.delete(eType);\n clean = true;\n } else {\n const bubble = bubbles.get(eType);\n bubble?.removeHandler(handler);\n if (bubble?.getCount() === 0) {\n bubble?.release();\n bubbles.delete(eType);\n clean = true;\n }\n\n if ((handler?.wrappedCallback as any)?.cancel) {\n // 取消debounce/throttle事件,释放闭包内部的上下文对象\n (handler.wrappedCallback as any).cancel();\n }\n }\n // 某个事件下所有的监听取消之后删除语法层事件的代理\n if (clean && this._isValidEvent(eType)) {\n const callback = listeners.get(eType) as (params: CompilerListenerParameters) => void;\n this._compiler.removeEventListener(handler?.filter?.source || Event_Source_Type.chart, eType, callback);\n listeners.delete(eType);\n }\n return this;\n }\n\n dispatch<Evt extends EventType>(eType: Evt, params: EventParamsDefinition[Evt], level?: EventBubbleLevel): this {\n // 默认事件类别为 view\n const bubble = this.getEventBubble((params as BaseEventParams).source || Event_Source_Type.chart).get(\n eType\n ) as Bubble;\n // 没有任何监听事件时,bubble 不存在\n if (!bubble) {\n return this;\n }\n\n // 事件冒泡逻辑:Mark -> Model -> Chart -> VChart\n let stopBubble: boolean = false;\n\n if (level) {\n // 如果指定了 level,则直接处理,不进行冒泡\n const handlers = bubble.getHandlers(level);\n stopBubble = this._invoke(handlers, eType, params);\n } else {\n // Mark 级别的事件只包含对语法层代理的基础事件\n const handlers = bubble.getHandlers(Event_Bubble_Level.mark);\n stopBubble = this._invoke(handlers, eType, params);\n\n if (!stopBubble) {\n const handlers = bubble.getHandlers(Event_Bubble_Level.model);\n stopBubble = this._invoke(handlers, eType, params);\n }\n if (!stopBubble) {\n const handlers = bubble.getHandlers(Event_Bubble_Level.chart);\n stopBubble = this._invoke(handlers, eType, params);\n }\n if (!stopBubble) {\n const handlers = bubble.getHandlers(Event_Bubble_Level.vchart);\n stopBubble = this._invoke(handlers, eType, params);\n }\n }\n\n return this;\n }\n\n clear(): void {\n for (const entry of this._viewListeners.entries()) {\n this._compiler.removeEventListener(Event_Source_Type.chart, entry[0], entry[1]);\n }\n this._viewListeners.clear();\n for (const entry of this._windowListeners.entries()) {\n this._compiler.removeEventListener(Event_Source_Type.window, entry[0], entry[1]);\n }\n this._windowListeners.clear();\n for (const entry of this._canvasListeners.entries()) {\n this._compiler.removeEventListener(Event_Source_Type.canvas, entry[0], entry[1]);\n }\n this._canvasListeners.clear();\n for (const bubble of this._viewBubbles.values()) {\n bubble.release();\n }\n this._viewBubbles.clear();\n for (const bubble of this._windowBubbles.values()) {\n bubble.release();\n }\n this._windowBubbles.clear();\n for (const bubble of this._canvasBubbles.values()) {\n bubble.release();\n }\n this._canvasBubbles.clear();\n }\n\n release(): void {\n this.clear();\n this.globalInstance = null;\n this._compiler = null;\n }\n\n /**\n * 基于转换后的事件筛选配置过滤需要调用的 handler\n */\n private _filter<Evt extends EventType>(filter: EventFilter, evt: Evt, params: EventParamsDefinition[Evt]): boolean {\n if (isFunction(filter.filter) && !filter.filter(params)) {\n return false;\n }\n\n // 事件 level 不需要筛选,在冒泡流程中已经处理了 level 的逻辑\n if (filter.nodeName && get(params, 'node.name') !== filter.nodeName) {\n return false;\n }\n\n if (filter.markName && (params as BaseEventParams)?.mark?.name !== filter.markName) {\n // 对于 markName 的筛选需要包含所有父级 mark 的 name\n return false;\n }\n\n let modelType = params.model?.type;\n if (componentTypeMap[modelType]) {\n modelType = componentTypeMap[modelType];\n }\n if (filter.type && modelType !== filter.type) {\n return false;\n }\n\n // 如果配置了 level 为 'mark' 并且没有配置 type,则只在事件参数中包含了 mark 时才触发\n if (filter.level === 'mark' && !filter.type && !(params as BaseEventParams)?.mark) {\n return false;\n }\n\n // 如果配置了 level 为 'model' 并且没有配置 type,则只在事件参数中包含了 model 时才触发\n if (filter.level === 'model' && !filter.type && !(params as BaseEventParams)?.model) {\n return false;\n }\n\n if (isValid(filter.userId) && params.model?.userId !== filter.userId) {\n return false;\n }\n\n return true;\n }\n\n private _prepareParams<Evt extends EventType>(\n filter: EventFilter,\n params: EventParamsDefinition[Evt]\n ): EventParamsDefinition[Evt] {\n // 如果针对于 mark 做了筛选,则事件参数转为筛选器制定的父级 mark\n if (filter.markName && params.mark && (params as BaseEventParams).itemMap) {\n const markId = params.mark.getProductId();\n const item = (params as BaseEventParams).itemMap.get(markId);\n const datum = item?.getDatum();\n return { ...params, item, datum };\n }\n return { ...params };\n }\n\n /**\n * 代理语法层事件的监听回调\n */\n private _onDelegate = (listenerParams: CompilerListenerParameters) => {\n const chart = this.globalInstance.getChart();\n const model = (isValid(listenerParams.modelId) && chart?.getModelById(listenerParams.modelId)) || undefined;\n const mark = (isValid(listenerParams.markId) && chart?.getMarkById(listenerParams.markId)) || null;\n\n // FIXME: 这里操作的应当是场景树结构,与 vgrammar 结构无关\n // 遍历取到所有父级的 mark 以支持子元素响应父元素事件\n const itemMap = new Map<string, any>();\n let targetMark: any = listenerParams.item?.mark;\n if (targetMark && isValid(targetMark.id())) {\n itemMap.set(targetMark.id(), listenerParams.item);\n }\n while (targetMark?.elements) {\n const id = targetMark.id();\n // 由于父级的 markName 可能重复,因此只取最近的父级 mark\n if (isValid(id) && !itemMap.has(id)) {\n itemMap.set(id, targetMark.elements[0]);\n }\n targetMark = targetMark.group;\n }\n\n const params: BaseEventParams = {\n event: listenerParams.event,\n item: listenerParams.item,\n datum: listenerParams.datum,\n source: listenerParams.source,\n itemMap,\n chart,\n model,\n mark: mark ?? undefined,\n node: get(listenerParams.event, 'target')\n };\n this.dispatch(listenerParams.type, params);\n };\n\n /**\n * 代理语法层事件的监听回调\n */\n private _onDelegateInteractionEvent = (listenerParams: CompilerListenerParameters) => {\n const chart = this.globalInstance.getChart();\n const event = listenerParams.event;\n let items: IElement[] = null;\n\n if ((event as any).elements) {\n items = (event as any).elements;\n }\n\n const params: InteractionEventParam = {\n event: listenerParams.event,\n chart,\n items,\n datums:\n items &&\n items.map(item => {\n return item.getDatum();\n })\n };\n this.dispatch(listenerParams.type, params);\n };\n\n /**\n * 调用相应事件监听下的 handlers\n */\n private _invoke<Evt extends EventType>(\n handlers: EventHandler<EventParams>[],\n type: EventType,\n params: EventParamsDefinition[Evt]\n ): boolean {\n const result = handlers.map(handler => {\n const filter = handler.filter as EventFilter;\n if (!handler.query || this._filter(filter, type, params)) {\n const callback = handler.wrappedCallback || handler.callback;\n const stopBubble = callback.call(null, this._prepareParams(filter, params));\n const doStopBubble = stopBubble ?? handler.query?.consume;\n if (doStopBubble) {\n (params as BaseEventParams).event?.stopPropagation();\n (params as BaseEventParams).event?.preventDefault();\n }\n return !!doStopBubble;\n }\n return undefined;\n });\n // 如果某个事件回调阻止了冒泡,则阻止更高级别事件的调用过程\n return result.some(r => r === true);\n }\n\n /**\n * 依据事件 query 得到事件冒泡层级\n */\n private _getQueryLevel(query: EventQuery | null): EventBubbleLevel {\n // 事件默认监听在 vchart 层\n if (!query) {\n return Event_Bubble_Level.vchart;\n }\n if (query.level) {\n return query.level;\n }\n if (isValid(query.id)) {\n return Event_Bubble_Level.model;\n }\n\n return Event_Bubble_Level.vchart;\n }\n\n /**\n * 将用户 query 配置转换为最终事件筛选参数\n */\n private _parseQuery(handler: EventHandler<EventParams>): EventHandler<EventParams> {\n const query = handler.query;\n // 处理 query 带来的函数封装\n if (query?.throttle) {\n handler.wrappedCallback = throttle(handler.callback, query.throttle);\n } else if (query?.debounce) {\n handler.wrappedCallback = debounce(handler.callback, query.debounce);\n }\n let level = this._getQueryLevel(query);\n let type: string | null = null;\n let source: EventSourceType = Event_Source_Type.chart;\n let nodeName: string | null = null;\n let markName: string | null = null;\n let userId: StringOrNumber | null = null;\n\n if (query?.nodeName) {\n nodeName = query.nodeName;\n }\n\n if (query?.markName) {\n markName = query.markName;\n }\n\n if (query?.type && (level === Event_Bubble_Level.model || level === Event_Bubble_Level.mark)) {\n type = query.type;\n }\n if (query?.source) {\n source = query.source;\n }\n\n if (isValid(query?.id)) {\n userId = query?.id;\n level = Event_Bubble_Level.model; // 如果用户配置了 id,那么默认 level 为 model\n }\n handler.filter = {\n level,\n markName,\n type,\n source,\n nodeName,\n userId,\n filter: query?.filter ?? null\n };\n return handler;\n }\n\n private getEventBubble(source: EventSourceType) {\n switch (source) {\n case Event_Source_Type.chart:\n return this._viewBubbles;\n case Event_Source_Type.window:\n return this._windowBubbles;\n case Event_Source_Type.canvas:\n return this._canvasBubbles;\n default:\n return this._viewBubbles;\n }\n }\n\n private getEventListeners(source: EventSourceType) {\n switch (source) {\n case Event_Source_Type.chart:\n return this._viewListeners;\n case Event_Source_Type.window:\n return this._windowListeners;\n case Event_Source_Type.canvas:\n return this._canvasListeners;\n default:\n return this._viewListeners;\n }\n }\n\n private _isValidEvent(eType: string) {\n return BASE_EVENTS.includes(eType) || (Object.values(VGRAMMAR_HOOK_EVENT) as string[]).includes(eType);\n }\n\n private _isInteractionEvent(eType: string) {\n let interactionType: string;\n\n return (\n eType &&\n ((interactionType = eType.split(':')[0]), interactionType) &&\n VGrammarFactory.hasInteraction(interactionType)\n );\n }\n}\n"]}
|
package/esm/event/interface.d.ts
CHANGED
|
@@ -81,6 +81,10 @@ export type ZoomEventParam = ExtendEventParam & {
|
|
|
81
81
|
scale: number;
|
|
82
82
|
scaleCenter: IPoint;
|
|
83
83
|
};
|
|
84
|
+
export type InteractionEventParam = {
|
|
85
|
+
items?: IElement[];
|
|
86
|
+
datums?: Datum[];
|
|
87
|
+
} & Partial<BaseEventParams>;
|
|
84
88
|
export type EventParamsDefinition = {
|
|
85
89
|
pointerdown: BaseEventParams;
|
|
86
90
|
pointerup: BaseEventParams;
|
|
@@ -134,6 +138,10 @@ export type EventParamsDefinition = {
|
|
|
134
138
|
tooltipHide: TooltipEventParams;
|
|
135
139
|
tooltipRelease: TooltipEventParams;
|
|
136
140
|
afterLayout: LayoutEventParam;
|
|
141
|
+
'element-select:start': InteractionEventParam;
|
|
142
|
+
'element-select:reset': InteractionEventParam;
|
|
143
|
+
'element-highlight:start': InteractionEventParam;
|
|
144
|
+
'element-highlight:reset': InteractionEventParam;
|
|
137
145
|
[key: string]: ExtendEventParam;
|
|
138
146
|
};
|
|
139
147
|
export interface IEventDispatcher {
|
|
@@ -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 { VChart } from '../core/vchart';\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';\nimport type { SeriesType } from '../series/interface';\nimport type { TooltipEventParams } from '../component/tooltip/interface/event';\nimport type { ILayoutItem } from '../layout/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\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};\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 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 [key: string]: ExtendEventParam;\n};\n\nexport interface IEventDispatcher {\n globalInstance: VChart;\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}\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}\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"]}
|
|
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 { VChart } from '../core/vchart';\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';\nimport type { SeriesType } from '../series/interface';\nimport type { TooltipEventParams } from '../component/tooltip/interface/event';\nimport type { ILayoutItem } from '../layout/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\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};\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: VChart;\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}\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}\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"]}
|
|
@@ -8,7 +8,7 @@ export class Interaction {
|
|
|
8
8
|
this._disableTriggerEvent = !1;
|
|
9
9
|
}
|
|
10
10
|
addVgrammarInteraction(state, i) {
|
|
11
|
-
this._vgrammarInteractions.get(state) ? this._vgrammarInteractions.get(state).push(i) : this._vgrammarInteractions.set(state, [ i ]);
|
|
11
|
+
state && (this._vgrammarInteractions.get(state) ? this._vgrammarInteractions.get(state).push(i) : this._vgrammarInteractions.set(state, [ i ]));
|
|
12
12
|
}
|
|
13
13
|
static markStateEnable(mark, state) {
|
|
14
14
|
return !isEmpty(mark.stateStyle[state]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/interaction/interaction.ts"],"names":[],"mappings":"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","file":"interaction.js","sourcesContent":["import { isEmpty } from '@visactor/vutils';\nimport type { StateValue } from '../compile/mark';\nimport type { IElement } from '@visactor/vgrammar-core';\nimport type { BaseEventParams } from '../event/interface';\nimport type { IMark } from '../mark/interface';\nimport type { IInteraction } from './interface';\nimport type { IInteraction as IVGrammarInteraction } from '@visactor/vgrammar-core';\n\nimport { stateToReverse } from '../compile/mark/util';\n\nexport class Interaction implements IInteraction {\n // 数据\n private _stateMarks: Map<StateValue, IMark[]> = new Map();\n // active\n private _stateElements: Map<StateValue, IElement[]> = new Map();\n\n private _vgrammarInteractions: Map<StateValue, IVGrammarInteraction[]> = new Map();\n addVgrammarInteraction(state: StateValue, i: IVGrammarInteraction) {\n if (!this._vgrammarInteractions.get(state)) {\n !this._vgrammarInteractions.set(state, [i]);\n } else {\n this._vgrammarInteractions.get(state).push(i);\n }\n }\n\n static markStateEnable(mark: IMark, state: string) {\n return !isEmpty(mark.stateStyle[state]);\n }\n\n private _disableTriggerEvent: boolean = false;\n\n setDisableActiveEffect(disable: boolean) {\n this._disableTriggerEvent = disable;\n }\n\n registerMark(state: StateValue, mark: IMark): void {\n if (!this._stateMarks.has(state)) {\n this._stateMarks.set(state, []);\n }\n this._stateMarks.get(state)?.push(mark);\n }\n\n getStateMark(state: StateValue): IMark[] | null {\n return this._stateMarks.get(state);\n }\n\n filterEventMark(params: BaseEventParams, state: StateValue): boolean {\n return !!(params.mark && this._stateMarks.get(state)?.includes(params.mark));\n }\n\n getEventElement(stateValue: StateValue) {\n return this._stateElements.get(stateValue) ?? [];\n }\n\n getEventElementData(stateValue: StateValue) {\n return this.getEventElement(stateValue).map(e => e.getDatum());\n }\n\n exchangeEventElement(stateValue: StateValue, element: IElement) {\n if (this._disableTriggerEvent) {\n return;\n }\n // reverse\n const reState = stateToReverse(stateValue);\n this._stateElements.get(stateValue)?.forEach(e => {\n e.removeState(stateValue);\n if (reState) {\n this.addEventElement(reState, e);\n }\n });\n if (!element.getStates().includes(stateValue)) {\n element.addState(stateValue);\n if (reState) {\n element.removeState(reState);\n }\n }\n this._stateElements.set(stateValue, [element]);\n }\n\n removeEventElement(stateValue: StateValue, element: IElement) {\n if (this._disableTriggerEvent) {\n return;\n }\n element.removeState(stateValue);\n const list = this._stateElements.get(stateValue)?.filter(e => e !== element) ?? [];\n this._stateElements.set(stateValue, list);\n // reverse\n const reState = stateToReverse(stateValue);\n if (reState) {\n if (list.length === 0) {\n // clear reverse\n this.clearEventElement(reState, false);\n } else {\n // add reverse to element\n this.addEventElement(reState, element);\n }\n }\n }\n\n addEventElement(stateValue: StateValue, element: IElement) {\n if (this._disableTriggerEvent) {\n return;\n }\n if (!element.getStates().includes(stateValue)) {\n element.addState(stateValue);\n }\n const list = this._stateElements.get(stateValue) ?? [];\n list.push(element);\n this._stateElements.set(stateValue, list);\n }\n\n clearEventElement(stateValue: StateValue, clearReverse: boolean) {\n if (this._disableTriggerEvent) {\n return;\n }\n this._stateElements.get(stateValue)?.forEach(e => {\n e.removeState(stateValue);\n });\n this._stateElements.set(stateValue, []);\n\n if (clearReverse) {\n const reState = stateToReverse(stateValue);\n if (reState) {\n this.clearEventElement(reState, false);\n }\n }\n }\n\n /**\n * 激活交互元素时 进行反选\n * 需要先将元素添加到已交互状态再使用此方法反选\n * @param stateValue\n * @param activeElement\n * @returns\n */\n reverseEventElement(stateValue: StateValue) {\n if (this._disableTriggerEvent) {\n return;\n }\n // TODO:直接加默认后缀?or再增加一个map?\n const state = stateToReverse(stateValue);\n if (!state) {\n return;\n }\n const marks = this.getStateMark(state);\n if (!marks) {\n return;\n }\n const activeElements = this.getEventElement(stateValue);\n if (!activeElements.length) {\n return;\n }\n const currentReverse = this.getEventElement(state);\n if (!currentReverse.length) {\n // all\n // for performance array.include\n // FIXME: 也许并没有太大必要\n if (activeElements.length === 1) {\n marks.forEach(m => {\n m.getProduct()\n .elements.filter(e => e !== activeElements[0])\n .forEach(e => {\n this.addEventElement(state, e);\n });\n });\n } else {\n marks.forEach(m => {\n m.getProduct()\n .elements.filter(e => !activeElements.includes(e))\n .forEach(e => {\n this.addEventElement(state, e);\n });\n });\n }\n }\n }\n\n /**\n * hover/select 交互通过 vgrammar 代理\n * @param stateValue\n * @param activeElement\n * @returns\n */\n startInteraction(stateValue: StateValue, element: IElement) {\n const interactions = this._vgrammarInteractions.get(stateValue);\n if (interactions) {\n interactions.forEach(vgInteraction => {\n vgInteraction.start(element);\n });\n }\n }\n\n /**\n * hover/select 交互通过 vgrammar 代理\n * @param stateValue\n * @param activeElement\n * @returns\n */\n resetInteraction(stateValue: StateValue, element: IElement) {\n const interactions = this._vgrammarInteractions.get(stateValue);\n if (interactions) {\n interactions.forEach(vgInteraction => {\n vgInteraction.reset(element);\n });\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/interaction/interaction.ts"],"names":[],"mappings":"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","file":"interaction.js","sourcesContent":["import { isEmpty } from '@visactor/vutils';\nimport type { StateValue } from '../compile/mark';\nimport type { IElement } from '@visactor/vgrammar-core';\nimport type { BaseEventParams } from '../event/interface';\nimport type { IMark } from '../mark/interface';\nimport type { IInteraction } from './interface';\nimport type { IInteraction as IVGrammarInteraction } from '@visactor/vgrammar-core';\n\nimport { stateToReverse } from '../compile/mark/util';\n\nexport class Interaction implements IInteraction {\n // 数据\n private _stateMarks: Map<StateValue, IMark[]> = new Map();\n // active\n private _stateElements: Map<StateValue, IElement[]> = new Map();\n\n private _vgrammarInteractions: Map<StateValue, IVGrammarInteraction[]> = new Map();\n addVgrammarInteraction(state: StateValue, i: IVGrammarInteraction) {\n if (!state) {\n return;\n }\n\n if (!this._vgrammarInteractions.get(state)) {\n !this._vgrammarInteractions.set(state, [i]);\n } else {\n this._vgrammarInteractions.get(state).push(i);\n }\n }\n\n static markStateEnable(mark: IMark, state: string) {\n return !isEmpty(mark.stateStyle[state]);\n }\n\n private _disableTriggerEvent: boolean = false;\n\n setDisableActiveEffect(disable: boolean) {\n this._disableTriggerEvent = disable;\n }\n\n registerMark(state: StateValue, mark: IMark): void {\n if (!this._stateMarks.has(state)) {\n this._stateMarks.set(state, []);\n }\n this._stateMarks.get(state)?.push(mark);\n }\n\n getStateMark(state: StateValue): IMark[] | null {\n return this._stateMarks.get(state);\n }\n\n filterEventMark(params: BaseEventParams, state: StateValue): boolean {\n return !!(params.mark && this._stateMarks.get(state)?.includes(params.mark));\n }\n\n getEventElement(stateValue: StateValue) {\n return this._stateElements.get(stateValue) ?? [];\n }\n\n getEventElementData(stateValue: StateValue) {\n return this.getEventElement(stateValue).map(e => e.getDatum());\n }\n\n exchangeEventElement(stateValue: StateValue, element: IElement) {\n if (this._disableTriggerEvent) {\n return;\n }\n // reverse\n const reState = stateToReverse(stateValue);\n this._stateElements.get(stateValue)?.forEach(e => {\n e.removeState(stateValue);\n if (reState) {\n this.addEventElement(reState, e);\n }\n });\n if (!element.getStates().includes(stateValue)) {\n element.addState(stateValue);\n if (reState) {\n element.removeState(reState);\n }\n }\n this._stateElements.set(stateValue, [element]);\n }\n\n removeEventElement(stateValue: StateValue, element: IElement) {\n if (this._disableTriggerEvent) {\n return;\n }\n element.removeState(stateValue);\n const list = this._stateElements.get(stateValue)?.filter(e => e !== element) ?? [];\n this._stateElements.set(stateValue, list);\n // reverse\n const reState = stateToReverse(stateValue);\n if (reState) {\n if (list.length === 0) {\n // clear reverse\n this.clearEventElement(reState, false);\n } else {\n // add reverse to element\n this.addEventElement(reState, element);\n }\n }\n }\n\n addEventElement(stateValue: StateValue, element: IElement) {\n if (this._disableTriggerEvent) {\n return;\n }\n if (!element.getStates().includes(stateValue)) {\n element.addState(stateValue);\n }\n const list = this._stateElements.get(stateValue) ?? [];\n list.push(element);\n this._stateElements.set(stateValue, list);\n }\n\n clearEventElement(stateValue: StateValue, clearReverse: boolean) {\n if (this._disableTriggerEvent) {\n return;\n }\n this._stateElements.get(stateValue)?.forEach(e => {\n e.removeState(stateValue);\n });\n this._stateElements.set(stateValue, []);\n\n if (clearReverse) {\n const reState = stateToReverse(stateValue);\n if (reState) {\n this.clearEventElement(reState, false);\n }\n }\n }\n\n /**\n * 激活交互元素时 进行反选\n * 需要先将元素添加到已交互状态再使用此方法反选\n * @param stateValue\n * @param activeElement\n * @returns\n */\n reverseEventElement(stateValue: StateValue) {\n if (this._disableTriggerEvent) {\n return;\n }\n // TODO:直接加默认后缀?or再增加一个map?\n const state = stateToReverse(stateValue);\n if (!state) {\n return;\n }\n const marks = this.getStateMark(state);\n if (!marks) {\n return;\n }\n const activeElements = this.getEventElement(stateValue);\n if (!activeElements.length) {\n return;\n }\n const currentReverse = this.getEventElement(state);\n if (!currentReverse.length) {\n // all\n // for performance array.include\n // FIXME: 也许并没有太大必要\n if (activeElements.length === 1) {\n marks.forEach(m => {\n m.getProduct()\n .elements.filter(e => e !== activeElements[0])\n .forEach(e => {\n this.addEventElement(state, e);\n });\n });\n } else {\n marks.forEach(m => {\n m.getProduct()\n .elements.filter(e => !activeElements.includes(e))\n .forEach(e => {\n this.addEventElement(state, e);\n });\n });\n }\n }\n }\n\n /**\n * hover/select 交互通过 vgrammar 代理\n * @param stateValue\n * @param activeElement\n * @returns\n */\n startInteraction(stateValue: StateValue, element: IElement) {\n const interactions = this._vgrammarInteractions.get(stateValue);\n if (interactions) {\n interactions.forEach(vgInteraction => {\n vgInteraction.start(element);\n });\n }\n }\n\n /**\n * hover/select 交互通过 vgrammar 代理\n * @param stateValue\n * @param activeElement\n * @returns\n */\n resetInteraction(stateValue: StateValue, element: IElement) {\n const interactions = this._vgrammarInteractions.get(stateValue);\n if (interactions) {\n interactions.forEach(vgInteraction => {\n vgInteraction.reset(element);\n });\n }\n }\n}\n"]}
|
|
@@ -35,26 +35,26 @@ export interface ITriggerOption {
|
|
|
35
35
|
eventDispatcher: IEventDispatcher;
|
|
36
36
|
model: IModel;
|
|
37
37
|
}
|
|
38
|
+
export interface IBaseInteractionSpec {
|
|
39
|
+
markIds?: StringOrNumber[];
|
|
40
|
+
markNames?: StringOrNumber[];
|
|
41
|
+
}
|
|
38
42
|
type Trigger = EventType | EventType[];
|
|
39
|
-
export
|
|
43
|
+
export interface IHoverSpec extends IBaseInteractionSpec {
|
|
40
44
|
enable?: boolean;
|
|
41
45
|
trigger?: Trigger;
|
|
42
46
|
triggerOff?: Trigger;
|
|
43
|
-
}
|
|
44
|
-
export
|
|
47
|
+
}
|
|
48
|
+
export interface ISelectSpec extends IBaseInteractionSpec {
|
|
45
49
|
enable?: boolean;
|
|
46
50
|
mode?: 'single' | 'multiple';
|
|
47
51
|
trigger?: Trigger;
|
|
48
52
|
triggerOff?: Trigger | number;
|
|
49
|
-
}
|
|
53
|
+
}
|
|
50
54
|
export interface ITriggerSpec {
|
|
51
55
|
hover?: IHoverSpec | boolean;
|
|
52
56
|
select?: ISelectSpec | boolean;
|
|
53
57
|
}
|
|
54
|
-
interface IBaseInteractionSpec {
|
|
55
|
-
markIds?: StringOrNumber[];
|
|
56
|
-
markNames?: StringOrNumber[];
|
|
57
|
-
}
|
|
58
58
|
export type IElementActiveSpec = IBaseInteractionSpec & Pick<ElementActiveSpec, 'type' | 'trigger' | 'triggerOff' | 'state'>;
|
|
59
59
|
export type IElementSelectSpec = IBaseInteractionSpec & Pick<ElementSelectSpec, 'type' | 'trigger' | 'triggerOff' | 'state' | 'isMultiple' | 'reverseState'>;
|
|
60
60
|
export type IElementHighlightSpec = IBaseInteractionSpec & Pick<ElementHighlightSpec, 'type' | 'blurState' | 'highlightState' | 'triggerOff' | 'trigger'>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/interaction/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type {\n ElementActiveByLegendSpec,\n ElementActiveSpec,\n ElementHighlightByGroupSpec,\n ElementHighlightByKeySpec,\n ElementHighlightByLegendSpec,\n ElementHighlightByNameSpec,\n ElementHighlightSpec,\n ElementSelectSpec,\n IElement,\n IInteraction as IVGrammarInteraction\n} from '@visactor/vgrammar-core';\nimport type { IMark } from '../mark/interface';\nimport type { RenderMode } from '../typings/spec/common';\nimport type { BaseEventParams, IEventDispatcher, EventType } from '../event/interface';\nimport type { IModel } from '../model/interface';\nimport type { StateValue } from '../compile/mark';\nimport type { StringOrNumber } from '../typings/common';\n\nexport interface IInteraction {\n registerMark: (state: StateValue, mark: IMark) => void;\n filterEventMark: (params: BaseEventParams, state: StateValue) => boolean;\n getStateMark: (state: StateValue) => IMark[] | null;\n\n getEventElement: (stateValue: StateValue) => IElement[];\n getEventElementData: (stateValue: StateValue) => any[];\n addEventElement: (stateValue: StateValue, element: IElement) => void;\n removeEventElement: (stateValue: StateValue, elements: IElement) => void;\n exchangeEventElement: (stateValue: StateValue, elements: IElement) => void;\n clearEventElement: (stateValue: StateValue, clearReverse: boolean) => void;\n reverseEventElement: (stateValue: StateValue) => void;\n\n setDisableActiveEffect: (disable: boolean) => void;\n addVgrammarInteraction: (state: StateValue, i: IVGrammarInteraction) => void;\n startInteraction: (state: StateValue, element: IElement) => void;\n resetInteraction: (state: StateValue, element: IElement) => void;\n}\n\nexport interface ITrigger {\n init: () => void;\n setStateKeys: (fields: string[]) => void;\n registerMark: (mark: IMark) => void;\n release: () => void;\n hover?: IHoverSpec;\n select?: ISelectSpec;\n}\n\nexport interface ITriggerOption {\n mode: RenderMode;\n interaction: IInteraction;\n eventDispatcher: IEventDispatcher;\n model: IModel;\n}\n\ntype Trigger = EventType | EventType[];\n\nexport
|
|
1
|
+
{"version":3,"sources":["../src/interaction/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type {\n ElementActiveByLegendSpec,\n ElementActiveSpec,\n ElementHighlightByGroupSpec,\n ElementHighlightByKeySpec,\n ElementHighlightByLegendSpec,\n ElementHighlightByNameSpec,\n ElementHighlightSpec,\n ElementSelectSpec,\n IElement,\n IInteraction as IVGrammarInteraction\n} from '@visactor/vgrammar-core';\nimport type { IMark } from '../mark/interface';\nimport type { RenderMode } from '../typings/spec/common';\nimport type { BaseEventParams, IEventDispatcher, EventType } from '../event/interface';\nimport type { IModel } from '../model/interface';\nimport type { StateValue } from '../compile/mark';\nimport type { StringOrNumber } from '../typings/common';\n\nexport interface IInteraction {\n registerMark: (state: StateValue, mark: IMark) => void;\n filterEventMark: (params: BaseEventParams, state: StateValue) => boolean;\n getStateMark: (state: StateValue) => IMark[] | null;\n\n getEventElement: (stateValue: StateValue) => IElement[];\n getEventElementData: (stateValue: StateValue) => any[];\n addEventElement: (stateValue: StateValue, element: IElement) => void;\n removeEventElement: (stateValue: StateValue, elements: IElement) => void;\n exchangeEventElement: (stateValue: StateValue, elements: IElement) => void;\n clearEventElement: (stateValue: StateValue, clearReverse: boolean) => void;\n reverseEventElement: (stateValue: StateValue) => void;\n\n setDisableActiveEffect: (disable: boolean) => void;\n addVgrammarInteraction: (state: StateValue, i: IVGrammarInteraction) => void;\n startInteraction: (state: StateValue, element: IElement) => void;\n resetInteraction: (state: StateValue, element: IElement) => void;\n}\n\nexport interface ITrigger {\n init: () => void;\n setStateKeys: (fields: string[]) => void;\n registerMark: (mark: IMark) => void;\n release: () => void;\n hover?: IHoverSpec;\n select?: ISelectSpec;\n}\n\nexport interface ITriggerOption {\n mode: RenderMode;\n interaction: IInteraction;\n eventDispatcher: IEventDispatcher;\n model: IModel;\n}\n\nexport interface IBaseInteractionSpec {\n markIds?: StringOrNumber[];\n markNames?: StringOrNumber[];\n}\n\ntype Trigger = EventType | EventType[];\n\nexport interface IHoverSpec extends IBaseInteractionSpec {\n enable?: boolean;\n trigger?: Trigger;\n triggerOff?: Trigger;\n}\n\nexport interface ISelectSpec extends IBaseInteractionSpec {\n enable?: boolean;\n mode?: 'single' | 'multiple';\n trigger?: Trigger;\n triggerOff?: Trigger | number;\n}\n\nexport interface ITriggerSpec {\n hover?: IHoverSpec | boolean;\n select?: ISelectSpec | boolean;\n}\n\nexport type IElementActiveSpec = IBaseInteractionSpec &\n Pick<ElementActiveSpec, 'type' | 'trigger' | 'triggerOff' | 'state'>;\n\nexport type IElementSelectSpec = IBaseInteractionSpec &\n Pick<ElementSelectSpec, 'type' | 'trigger' | 'triggerOff' | 'state' | 'isMultiple' | 'reverseState'>;\nexport type IElementHighlightSpec = IBaseInteractionSpec &\n Pick<ElementHighlightSpec, 'type' | 'blurState' | 'highlightState' | 'triggerOff' | 'trigger'>;\n\nexport type IElementHighlightByKeySpec = IBaseInteractionSpec &\n Pick<ElementHighlightByKeySpec, 'type' | 'blurState' | 'highlightState' | 'triggerOff' | 'trigger'>;\n\nexport type IElementHighlightByGroup = IBaseInteractionSpec &\n Pick<ElementHighlightByGroupSpec, 'type' | 'blurState' | 'highlightState' | 'triggerOff' | 'trigger'>;\n\nexport type IElementActiveByLegend = IBaseInteractionSpec &\n Pick<ElementActiveByLegendSpec, 'type' | 'filterType' | 'state'>;\n\nexport type IElementHighlightByLegend = IBaseInteractionSpec &\n Pick<ElementHighlightByLegendSpec, 'type' | 'filterType' | 'blurState' | 'highlightState'>;\n\nexport type IElementHighlightByName = IBaseInteractionSpec &\n Pick<ElementHighlightByNameSpec, 'type' | 'blurState' | 'highlightState' | 'graphicName' | 'parseData'>;\n\nexport interface ICustomInteraction extends IBaseInteractionSpec {\n type: string;\n}\n\nexport type IInteractionItemSpec =\n | IElementActiveSpec\n | IElementSelectSpec\n | IElementHighlightSpec\n | IElementHighlightByKeySpec\n | IElementHighlightByGroup\n | IElementActiveByLegend\n | IElementHighlightByLegend\n | IElementHighlightByName;\n\nexport interface IInteractionSpec {\n hover?: IHoverSpec | boolean;\n select?: ISelectSpec | boolean;\n interactions?: IInteractionItemSpec[];\n}\n"]}
|
package/esm/mark/group.js
CHANGED
|
@@ -14,9 +14,7 @@ export class GroupMark extends BaseMark {
|
|
|
14
14
|
return this._marks;
|
|
15
15
|
}
|
|
16
16
|
_getDefaultStyle() {
|
|
17
|
-
return Object.assign(
|
|
18
|
-
clip: !1
|
|
19
|
-
});
|
|
17
|
+
return Object.assign({}, super._getDefaultStyle());
|
|
20
18
|
}
|
|
21
19
|
isMarkExist(mark) {
|
|
22
20
|
return void 0 !== this._marks.find((m => m.id === mark.id || m.name === mark.name));
|
package/esm/mark/group.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/mark/group.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAG5C,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAM5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAkB/D,MAAM,OAAO,SAAU,SAAQ,QAAwB;IAAvD;;QAEW,SAAI,GAAG,SAAS,CAAC,IAAI,CAAC;QACrB,WAAM,GAAY,EAAE,CAAC;IAwEjC,CAAC;IAvEC,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAKS,gBAAgB;QACxB,MAAM,YAAY,
|
|
1
|
+
{"version":3,"sources":["../src/mark/group.ts"],"names":[],"mappings":"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","file":"group.js","sourcesContent":["import { Factory } from './../core/factory';\nimport type { Maybe } from '../typings';\n// eslint-disable-next-line no-duplicate-imports\nimport { warn } from '../util/debug';\nimport type { IGroupMarkSpec } from '../typings/visual';\nimport { BaseMark } from './base/base-mark';\nimport type { IMark, IMarkRaw, IMarkStyle, MarkType } from './interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { MarkTypeEnum } from './interface/type';\nimport type { IGroupMark as IVGrammarGroupMark } from '@visactor/vgrammar-core';\n// eslint-disable-next-line no-duplicate-imports\nimport { registerGroupGraphic } from '@visactor/vgrammar-core';\nimport type { IMarkCompileOption } from '../compile/mark';\n\nexport interface IGroupMark extends IMarkRaw<IGroupMarkSpec> {\n // groupMark的zIndex只能配在外层,encode里不生效,且无法写成signal\n // {type:'group', zIndex: 100} ✅\n // {type:'group', encode:{enter:{zIndex:{value:100}}}} ❌\n // {type:'group', zIndex: {signal: }} ❌\n\n addMark: (m: IMark) => boolean;\n removeMark: (m: IMark) => boolean;\n // TODO: 这里可能会出现mark嵌套的问题\n getMarks: () => IMark[];\n getMarkInType: (type: MarkType) => IMark[];\n getMarkInId: (id: number) => IMark | undefined;\n getMarkInName: (name: string) => IMark | undefined;\n}\n\nexport class GroupMark extends BaseMark<IGroupMarkSpec> implements IGroupMark {\n static readonly type = MarkTypeEnum.group;\n readonly type = GroupMark.type;\n protected _marks: IMark[] = [];\n getMarks(): IMark[] {\n return this._marks;\n }\n\n protected declare _product: Maybe<IVGrammarGroupMark>;\n declare getProduct: () => Maybe<IVGrammarGroupMark>;\n\n protected _getDefaultStyle() {\n const defaultStyle: IMarkStyle<IGroupMarkSpec> = {\n ...super._getDefaultStyle()\n // clip: false\n };\n return defaultStyle;\n }\n\n protected isMarkExist(mark: IMark): boolean {\n return this._marks.find(m => m.id === mark.id || m.name === mark.name) !== undefined;\n }\n\n addMark(mark: IMark): boolean {\n if (this.isMarkExist(mark)) {\n warn('Mark already exists, add mark failed.');\n return false;\n }\n\n this._marks.push(mark);\n return true;\n }\n\n removeMark(mark: IMark): boolean {\n const index = this._marks.findIndex(m => m.id === mark.id || m.name === mark.name);\n if (index === -1) {\n warn('Mark does not exists, removeMark failed.');\n return false;\n }\n this._marks.splice(index, 1);\n return true;\n }\n\n getMarkInType(type: MarkType) {\n return this._marks.filter(m => m.type === type);\n }\n\n getMarkInId(id: number) {\n return this._marks.find(m => m.id === id);\n }\n\n getMarkInName(name: string) {\n return this._marks.find(m => m.name === name);\n }\n\n protected _compileProduct(option?: IMarkCompileOption): void {\n // 编译自身\n super._compileProduct(option);\n\n // 设置zIndex\n this._product.configure({\n zIndex: this.getZIndex()\n });\n\n // 编译子元素\n if (!option?.ignoreChildren) {\n this.getMarks().forEach(mark => {\n // TODO: 如果语法元素已创建,先删除再重新指定父结点生成。vgrammar 是否可以动态指定 mark 父结点?\n if (mark.getProduct()) {\n mark.removeProduct();\n }\n mark.compile({ group: this._product });\n });\n }\n }\n}\n\nexport const registerGroupMark = () => {\n registerGroupGraphic();\n Factory.registerMark(GroupMark.type, GroupMark);\n};\n"]}
|
|
@@ -7,6 +7,7 @@ import { BaseModel } from '../../model/base-model';
|
|
|
7
7
|
import type { ISeriesOption, ISeries, ISeriesMarkInitOption, ISeriesStackData, ISeriesTooltipHelper, SeriesMarkMap, ISeriesMarkInfo, ISeriesSpecInfo, ISeriesStackDataLeaf, ISeriesStackDataMeta } from '../interface';
|
|
8
8
|
import type { IModelEvaluateOption, IModelRenderOption } from '../../model/interface';
|
|
9
9
|
import type { AddVChartPropertyContext } from '../../data/transforms/add-property';
|
|
10
|
+
import type { IBaseInteractionSpec } from '../../interaction/interface';
|
|
10
11
|
import type { StatisticOperations } from '../../data/transforms/dimension-statistics';
|
|
11
12
|
import { SeriesData } from './series-data';
|
|
12
13
|
import type { IGroupMark } from '../../mark/group';
|
|
@@ -125,8 +126,8 @@ export declare abstract class BaseSeries<T extends ISeriesSpec> extends BaseMode
|
|
|
125
126
|
private _createExtensionMark;
|
|
126
127
|
protected _updateExtensionMarkSpec(lastSpec?: any): void;
|
|
127
128
|
getStackData(): ISeriesStackData;
|
|
129
|
+
protected _parseSelectorOfInteraction(interactionSpec: IBaseInteractionSpec, marks: IMark[]): string[];
|
|
128
130
|
protected _parseDefaultInteractionConfig(mainMarks?: IMark[]): ({
|
|
129
|
-
vchartState: STATE_VALUE_ENUM;
|
|
130
131
|
seriesId: number;
|
|
131
132
|
regionId: number;
|
|
132
133
|
selector: string[];
|
|
@@ -139,7 +140,6 @@ export declare abstract class BaseSeries<T extends ISeriesSpec> extends BaseMode
|
|
|
139
140
|
state?: undefined;
|
|
140
141
|
isMultiple?: undefined;
|
|
141
142
|
} | {
|
|
142
|
-
vchartState: STATE_VALUE_ENUM;
|
|
143
143
|
type: string;
|
|
144
144
|
seriesId: number;
|
|
145
145
|
regionId: number;
|