@visactor/vchart 2.0.4-alpha.5 → 2.0.4-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/es5/index.js +1 -1
- package/build/index.es.js +1509 -85
- package/build/index.js +1509 -85
- package/build/index.min.js +2 -2
- package/build/tsconfig.tsbuildinfo +1 -1
- package/cjs/animation/utils.js +1 -1
- package/cjs/animation/utils.js.map +1 -1
- package/cjs/chart/base/base-chart.js +2 -1
- package/cjs/chart/base/base-chart.js.map +1 -1
- package/cjs/chart/range-area/range-area-transformer.js +2 -1
- package/cjs/chart/range-area/range-area-transformer.js.map +1 -1
- package/cjs/compile/compiler.js +4 -3
- package/cjs/compile/compiler.js.map +1 -1
- package/cjs/component/data-zoom/data-filter-base-component.d.ts +2 -0
- package/cjs/component/data-zoom/data-filter-base-component.js +15 -5
- package/cjs/component/data-zoom/data-filter-base-component.js.map +1 -1
- package/cjs/component/data-zoom/interface.d.ts +1 -0
- package/cjs/component/data-zoom/interface.js.map +1 -1
- package/cjs/component/marker/mark-point/cartesian-mark-point.js +2 -2
- package/cjs/component/marker/mark-point/cartesian-mark-point.js.map +1 -1
- package/cjs/constant/attribute.js +1 -2
- package/cjs/constant/event.d.ts +2 -1
- package/cjs/constant/event.js +1 -1
- package/cjs/constant/event.js.map +1 -1
- package/cjs/constant/label.js +2 -1
- package/cjs/constant/waterfall.js +1 -2
- package/cjs/constant/word-cloud.js +1 -1
- package/cjs/core/expression-function.js +2 -1
- package/cjs/core/factory.d.ts +4 -0
- package/cjs/core/factory.js +8 -2
- package/cjs/core/factory.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/core/interface.d.ts +2 -0
- package/cjs/core/interface.js.map +1 -1
- package/cjs/core/vchart.d.ts +3 -1
- package/cjs/core/vchart.js +8 -2
- package/cjs/core/vchart.js.map +1 -1
- package/cjs/model/interface.d.ts +1 -0
- package/cjs/model/interface.js.map +1 -1
- package/cjs/plugin/components/tooltip-handler/dom-tooltip-handler.d.ts +1 -1
- package/cjs/plugin/components/tooltip-handler/dom-tooltip-handler.js +17 -17
- package/cjs/plugin/components/tooltip-handler/dom-tooltip-handler.js.map +1 -1
- package/cjs/plugin/vchart/index.d.ts +2 -0
- package/cjs/plugin/vchart/index.js +21 -0
- package/cjs/plugin/vchart/index.js.map +1 -0
- package/cjs/plugin/vchart/interface.d.ts +16 -0
- package/cjs/plugin/vchart/interface.js +6 -0
- package/cjs/plugin/vchart/interface.js.map +1 -0
- package/cjs/plugin/vchart/plugin-service.d.ts +9 -0
- package/cjs/plugin/vchart/plugin-service.js +24 -0
- package/cjs/plugin/vchart/plugin-service.js.map +1 -0
- package/cjs/plugin/vchart/register.d.ts +2 -0
- package/cjs/plugin/vchart/register.js +12 -0
- package/cjs/plugin/vchart/register.js.map +1 -0
- package/cjs/plugin/vchart/rotate/index.d.ts +1 -0
- package/cjs/plugin/vchart/rotate/index.js +21 -0
- package/cjs/plugin/vchart/rotate/index.js.map +1 -0
- package/cjs/plugin/vchart/rotate/rotate.d.ts +18 -0
- package/cjs/plugin/vchart/rotate/rotate.js +67 -0
- package/cjs/plugin/vchart/rotate/rotate.js.map +1 -0
- package/cjs/series/word-cloud/base.js +15 -1
- package/cjs/series/word-cloud/base.js.map +1 -1
- package/cjs/typings/spec/common.d.ts +1 -0
- package/cjs/typings/spec/common.js.map +1 -1
- package/cjs/util/style.js +3 -2
- package/cjs/util/style.js.map +1 -1
- package/esm/animation/utils.js +1 -1
- package/esm/animation/utils.js.map +1 -1
- package/esm/chart/base/base-chart.js +2 -1
- package/esm/chart/base/base-chart.js.map +1 -1
- package/esm/chart/range-area/range-area-transformer.js +2 -1
- package/esm/chart/range-area/range-area-transformer.js.map +1 -1
- package/esm/compile/compiler.js +4 -3
- package/esm/compile/compiler.js.map +1 -1
- package/esm/component/data-zoom/data-filter-base-component.d.ts +2 -0
- package/esm/component/data-zoom/data-filter-base-component.js +16 -6
- package/esm/component/data-zoom/data-filter-base-component.js.map +1 -1
- package/esm/component/data-zoom/interface.d.ts +1 -0
- package/esm/component/data-zoom/interface.js.map +1 -1
- package/esm/component/marker/mark-point/cartesian-mark-point.js +2 -2
- package/esm/component/marker/mark-point/cartesian-mark-point.js.map +1 -1
- package/esm/constant/attribute.js +1 -2
- package/esm/constant/event.d.ts +2 -1
- package/esm/constant/event.js +1 -1
- package/esm/constant/event.js.map +1 -1
- package/esm/constant/label.js +2 -1
- package/esm/constant/waterfall.js +1 -2
- package/esm/constant/word-cloud.js +1 -1
- package/esm/core/expression-function.js +2 -1
- package/esm/core/factory.d.ts +4 -0
- package/esm/core/factory.js +8 -1
- package/esm/core/factory.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/core/interface.d.ts +2 -0
- package/esm/core/interface.js.map +1 -1
- package/esm/core/vchart.d.ts +3 -1
- package/esm/core/vchart.js +9 -1
- package/esm/core/vchart.js.map +1 -1
- package/esm/model/interface.d.ts +1 -0
- package/esm/model/interface.js.map +1 -1
- package/esm/plugin/components/tooltip-handler/dom-tooltip-handler.d.ts +1 -1
- package/esm/plugin/components/tooltip-handler/dom-tooltip-handler.js +17 -17
- package/esm/plugin/components/tooltip-handler/dom-tooltip-handler.js.map +1 -1
- package/esm/plugin/vchart/index.d.ts +2 -0
- package/esm/plugin/vchart/index.js +4 -0
- package/esm/plugin/vchart/index.js.map +1 -0
- package/esm/plugin/vchart/interface.d.ts +16 -0
- package/esm/plugin/vchart/interface.js +2 -0
- package/esm/plugin/vchart/interface.js.map +1 -0
- package/esm/plugin/vchart/plugin-service.d.ts +9 -0
- package/esm/plugin/vchart/plugin-service.js +16 -0
- package/esm/plugin/vchart/plugin-service.js.map +1 -0
- package/esm/plugin/vchart/register.d.ts +2 -0
- package/esm/plugin/vchart/register.js +6 -0
- package/esm/plugin/vchart/register.js.map +1 -0
- package/esm/plugin/vchart/rotate/index.d.ts +1 -0
- package/esm/plugin/vchart/rotate/index.js +2 -0
- package/esm/plugin/vchart/rotate/index.js.map +1 -0
- package/esm/plugin/vchart/rotate/rotate.d.ts +18 -0
- package/esm/plugin/vchart/rotate/rotate.js +62 -0
- package/esm/plugin/vchart/rotate/rotate.js.map +1 -0
- package/esm/series/word-cloud/base.js +16 -0
- package/esm/series/word-cloud/base.js.map +1 -1
- package/esm/typings/spec/common.d.ts +1 -0
- package/esm/typings/spec/common.js.map +1 -1
- package/esm/util/style.js +3 -2
- package/esm/util/style.js.map +1 -1
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/model/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { IBoundsLike } from '@visactor/vutils';\nimport type { DataSet, DataView } from '@visactor/vdataset';\nimport type { IEvent, IEventDispatcher } from '../event/interface';\nimport type { AnimationStateValues, IMark, IMarkGraphic, IMarkRaw, IMarkStyle, MarkTypeEnum } from '../mark/interface';\nimport type { RenderMode } from '../typings/spec/common';\nimport type { StringOrNumber } from '../typings/common';\nimport type { IGroupMarkSpec, ConvertToMarkStyleSpec, ICommonSpec } from '../typings/visual';\nimport type { IRect } from '../typings/space';\nimport type { IPoint, CoordinateType } from '../typings/coordinate';\nimport type { StateValueType } from '../typings/spec';\nimport type { ICompilable, ICompilableInitOption } from '../compile/interface';\nimport type { IGlobalScale } from '../scale/interface';\nimport type { IChart, IChartSpecInfo, IChartSpecTransformerOption } from '../chart/interface';\nimport type { IThemeColorScheme } from '../theme/color-scheme/interface';\nimport type { ILayoutItem, ILayoutItemSpec } from '../layout/interface';\nimport type { ILayoutPoint, ILayoutRect } from '../typings/layout';\nimport type { ComponentTypeEnum } from '../component/interface';\nimport type { SeriesTypeEnum } from '../series/interface';\nimport type { ITooltipSpec } from '../component/tooltip/interface';\nimport type { TooltipActiveType } from '../typings';\nimport type { IVChart } from '../core/interface';\nimport type { ICompilableData } from '../compile/data/interface';\nimport type { IDimensionData, IDimensionInfo } from '../event/events/dimension/interface';\nimport type { IAxis } from '../component/axis';\n// TODO:\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IModelInitOption {}\n// TODO:\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IModelLayoutOption {}\n// TODO:\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IModelEvaluateOption {}\n// TODO:\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IModelRenderOption {}\n\nexport interface IEffect {\n [key: string]: (e?: any) => any;\n}\n\nexport interface IMarkTreeGroup extends Partial<IMarkStyle<IGroupMarkSpec>> {\n // 必须要有名字\n type: 'group';\n name: string;\n marks: (IMarkTreeGroup | IMark)[];\n // TODO: 这里要不要支持复杂场景,有图形组合的场景,用自定义mark?\n // from?: IData;\n}\n\nexport type IMarkTree = IMarkTreeGroup | IMark | (IMarkTreeGroup | IMark)[];\n\nexport interface IUpdateSpecResult {\n change: boolean;\n reMake: boolean;\n reRender?: boolean;\n reSize?: boolean;\n // TODO: compile 的判断应不应该出现在这里?\n reCompile?: boolean;\n reTransformSpec?: boolean;\n reAnimate?: boolean;\n changeTheme?: boolean;\n changeBackground?: boolean;\n}\n\nexport interface IUpdateDataResult {\n reAnimate?: boolean;\n}\n\nexport interface IModel extends ICompilable {\n readonly modelType: string;\n readonly type: string;\n readonly specKey: string;\n readonly transformerConstructor: new (option: IBaseModelSpecTransformerOption) => IBaseModelSpecTransformer;\n\n readonly id: number;\n\n readonly userId?: StringOrNumber;\n\n // 事件\n readonly event: IEvent;\n\n // 副作用\n readonly effect: IEffect;\n\n coordinate?: CoordinateType;\n\n // 布局\n layout?: ILayoutItem;\n\n /** 是否可见 */\n getVisible: () => boolean;\n\n // 初始化参数\n getOption: () => IModelOption;\n\n getMarks: () => IMark[];\n getMarkNameMap: () => Record<string, IMark>;\n\n getData: () => ICompilableData;\n\n getChart: () => IChart;\n\n //生命周期\n // 创建模块自身内容,设置自身属性\n created: () => void;\n // 用来处理与其他图表模块的联系\n init: (option: IModelInitOption) => void;\n /** updateSpec 或者切换主题后,根据新 spec 执行的初始化过程 */\n reInit: (spec?: any) => void;\n beforeRelease: () => void;\n\n onEvaluateEnd: (ctx: IModelEvaluateOption) => void;\n onDataUpdate: () => void;\n onBeforeRender: () => void;\n\n updateSpec: (spec: any, totalSpec?: any) => IUpdateSpecResult;\n getSpec?: () => any;\n getSpecIndex: () => number;\n getSpecPath: () => Array<string | number>;\n\n //布局周期\n onLayoutStart: (layoutRect: IRect, viewRect: ILayoutRect) => void;\n onLayoutEnd: () => void;\n\n getColorScheme: () => IThemeColorScheme | undefined;\n\n setMarkStyle: <T extends ICommonSpec>(\n mark?: IMarkRaw<T>,\n style?: Partial<IMarkStyle<T> | ConvertToMarkStyleSpec<T>>,\n state?: StateValueType,\n level?: number\n ) => void;\n\n initMarkStyleWithSpec: (mark?: IMark, spec?: any) => void;\n\n getSpecInfo: () => IModelSpecInfo;\n\n updateAnimateStateCallback: (callback: (graphic: IMarkGraphic) => AnimationStateValues) => void;\n getAnimationStateCallback: () => (graphic: IMarkGraphic) => AnimationStateValues;\n}\n\nexport interface ILayoutModel extends IModel {\n // 布局相关\n getLayoutStartPoint: () => IPoint;\n setLayoutStartPosition: (pos: Partial<IPoint>) => void;\n getLayoutRect: () => ILayoutRect;\n setLayoutRect: (rect: Partial<ILayoutRect>, levelMap?: Partial<ILayoutRect>) => void;\n\n getLastComputeOutBounds: () => IBoundsLike;\n\n getBoundsInRect: (rect: ILayoutRect, fullRect: ILayoutRect) => IBoundsLike;\n\n //布局周期\n afterSetLayoutStartPoint: (pos: ILayoutPoint) => void;\n}\n\nexport interface IModelOption extends ICompilableInitOption {\n type: string;\n eventDispatcher: IEventDispatcher;\n dataSet: DataSet;\n map: Map<StringOrNumber, IModel | IMark>;\n mode: RenderMode;\n globalInstance: IVChart;\n regionIndexes?: Array<number>;\n specKey?: string;\n specPath?: Array<string | number>;\n specInfoPath?: Array<string | number>;\n\n getTheme?: (...keys: string[]) => any;\n getSpecInfo?: () => IChartSpecInfo;\n getChartLayoutRect: () => IRect;\n getChartViewRect: () => ILayoutRect;\n\n getChart: () => IChart;\n getSeriesData: (id: StringOrNumber | undefined, index: number | undefined) => DataView | undefined;\n\n globalScale: IGlobalScale;\n animation?: boolean;\n /**\n * 错误消息回调函数\n */\n onError: (...args: any[]) => void;\n\n /**\n * 是否关闭交互效果\n */\n disableTriggerEvent?: boolean;\n getDimensionInfo?: (chart: IChart | undefined, pos: ILayoutPoint, isTooltip?: boolean) => IDimensionInfo[] | null;\n getDimensionInfoByValue?: (axis: IAxis, value: any) => IDimensionInfo | null;\n getRectByDimensionData?: (dimensionData: IDimensionData, layoutStartPoint: ILayoutPoint) => any;\n}\n\nexport interface IModelSpecInfo<T extends Record<string, unknown> = any> {\n /** model 具体类型 */\n type: string | ComponentTypeEnum | SeriesTypeEnum;\n /** model spec */\n spec: T;\n /** 该 spec 在图表 spec 上的路径 */\n specPath?: Array<string | number>;\n /** 该 spec 在图表 spec info 上的路径 */\n specInfoPath?: Array<string | number>;\n /** model 当前主题 */\n theme?: any;\n /** model 对应的 region 索引 */\n regionIndexes?: number[];\n /** model 对应的 series 索引 */\n seriesIndexes?: number[];\n}\n\nexport interface IModelConstructor {\n readonly builtInTheme?: any;\n readonly transformerConstructor: new (option: IBaseModelSpecTransformerOption) => IBaseModelSpecTransformer;\n}\n\nexport type ILayoutModelState = {\n layoutUpdateRank: number;\n [key: string]: unknown;\n};\n\n// TODO: 补充model共有配置\nexport type IModelSpec = ILayoutItemSpec & { id?: StringOrNumber };\n\nexport interface IModelMarkInfo {\n /** mark 类型 */\n type: MarkTypeEnum | string | (MarkTypeEnum | string)[];\n /** mark 名称 */\n name: string;\n}\n\nexport type IBaseModelSpecTransformerOption = IChartSpecTransformerOption;\n\nexport interface IBaseModelSpecTransformerResult<T, K> {\n spec: T;\n theme: K;\n}\n\nexport interface IBaseModelSpecTransformer {\n getTheme: (spec: any, chartSpec: any) => any;\n transformSpec: (\n spec: any,\n chartSpec: any,\n chartSpecInfo?: IChartSpecInfo\n ) => IBaseModelSpecTransformerResult<any, any>;\n}\n\nexport interface ITooltipHelper {\n /** tooltip对应spec */\n spec: ITooltipSpec | undefined;\n\n /** 实际生效的tooltip activeType */\n activeType: TooltipActiveType[];\n\n /** 可以响应mark tooltip或者dimension tooltip的对象 */\n activeTriggerSet: {\n mark?: Set<IMark>;\n group?: Set<IMark>;\n };\n /** 不响应tooltip且不会影响已有tooltip的对象 */\n ignoreTriggerSet: {\n mark?: Set<IMark>;\n };\n\n /** 更新spec */\n updateTooltipSpec: () => void;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/model/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { IBoundsLike } from '@visactor/vutils';\nimport type { DataSet, DataView } from '@visactor/vdataset';\nimport type { IEvent, IEventDispatcher } from '../event/interface';\nimport type { AnimationStateValues, IMark, IMarkGraphic, IMarkRaw, IMarkStyle, MarkTypeEnum } from '../mark/interface';\nimport type { RenderMode } from '../typings/spec/common';\nimport type { StringOrNumber } from '../typings/common';\nimport type { IGroupMarkSpec, ConvertToMarkStyleSpec, ICommonSpec } from '../typings/visual';\nimport type { IRect } from '../typings/space';\nimport type { IPoint, CoordinateType } from '../typings/coordinate';\nimport type { StateValueType } from '../typings/spec';\nimport type { ICompilable, ICompilableInitOption } from '../compile/interface';\nimport type { IGlobalScale } from '../scale/interface';\nimport type { IChart, IChartSpecInfo, IChartSpecTransformerOption } from '../chart/interface';\nimport type { IThemeColorScheme } from '../theme/color-scheme/interface';\nimport type { ILayoutItem, ILayoutItemSpec } from '../layout/interface';\nimport type { ILayoutPoint, ILayoutRect } from '../typings/layout';\nimport type { ComponentTypeEnum } from '../component/interface';\nimport type { SeriesTypeEnum } from '../series/interface';\nimport type { ITooltipSpec } from '../component/tooltip/interface';\nimport type { TooltipActiveType } from '../typings';\nimport type { IVChart } from '../core/interface';\nimport type { ICompilableData } from '../compile/data/interface';\nimport type { IDimensionData, IDimensionInfo } from '../event/events/dimension/interface';\nimport type { IAxis } from '../component/axis';\n// TODO:\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IModelInitOption {}\n// TODO:\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IModelLayoutOption {}\n// TODO:\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IModelEvaluateOption {}\n// TODO:\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IModelRenderOption {}\n\nexport interface IEffect {\n [key: string]: (e?: any) => any;\n}\n\nexport interface IMarkTreeGroup extends Partial<IMarkStyle<IGroupMarkSpec>> {\n // 必须要有名字\n type: 'group';\n name: string;\n marks: (IMarkTreeGroup | IMark)[];\n // TODO: 这里要不要支持复杂场景,有图形组合的场景,用自定义mark?\n // from?: IData;\n}\n\nexport type IMarkTree = IMarkTreeGroup | IMark | (IMarkTreeGroup | IMark)[];\n\nexport interface IUpdateSpecResult {\n change: boolean;\n reMake: boolean;\n reRender?: boolean;\n reSize?: boolean;\n // TODO: compile 的判断应不应该出现在这里?\n reCompile?: boolean;\n reTransformSpec?: boolean;\n reAnimate?: boolean;\n changeTheme?: boolean;\n changeBackground?: boolean;\n}\n\nexport interface IUpdateDataResult {\n reAnimate?: boolean;\n}\n\nexport interface IModel extends ICompilable {\n readonly modelType: string;\n readonly type: string;\n readonly specKey: string;\n readonly transformerConstructor: new (option: IBaseModelSpecTransformerOption) => IBaseModelSpecTransformer;\n\n readonly id: number;\n\n readonly userId?: StringOrNumber;\n\n // 事件\n readonly event: IEvent;\n\n // 副作用\n readonly effect: IEffect;\n\n coordinate?: CoordinateType;\n\n // 布局\n layout?: ILayoutItem;\n\n /** 是否可见 */\n getVisible: () => boolean;\n\n // 初始化参数\n getOption: () => IModelOption;\n\n getMarks: () => IMark[];\n getMarkNameMap: () => Record<string, IMark>;\n\n getData: () => ICompilableData;\n\n getChart: () => IChart;\n\n //生命周期\n // 创建模块自身内容,设置自身属性\n created: () => void;\n // 用来处理与其他图表模块的联系\n init: (option: IModelInitOption) => void;\n /** updateSpec 或者切换主题后,根据新 spec 执行的初始化过程 */\n reInit: (spec?: any) => void;\n beforeRelease: () => void;\n\n onEvaluateEnd: (ctx: IModelEvaluateOption) => void;\n onDataUpdate: () => void;\n onBeforeRender: () => void;\n\n updateSpec: (spec: any, totalSpec?: any) => IUpdateSpecResult;\n getSpec?: () => any;\n getSpecIndex: () => number;\n getSpecPath: () => Array<string | number>;\n\n //布局周期\n onLayoutStart: (layoutRect: IRect, viewRect: ILayoutRect) => void;\n onLayoutEnd: () => void;\n\n getColorScheme: () => IThemeColorScheme | undefined;\n\n setMarkStyle: <T extends ICommonSpec>(\n mark?: IMarkRaw<T>,\n style?: Partial<IMarkStyle<T> | ConvertToMarkStyleSpec<T>>,\n state?: StateValueType,\n level?: number\n ) => void;\n\n initMarkStyleWithSpec: (mark?: IMark, spec?: any) => void;\n\n getSpecInfo: () => IModelSpecInfo;\n\n updateAnimateStateCallback: (callback: (graphic: IMarkGraphic) => AnimationStateValues) => void;\n getAnimationStateCallback: () => (graphic: IMarkGraphic) => AnimationStateValues;\n}\n\nexport interface ILayoutModel extends IModel {\n // 布局相关\n getLayoutStartPoint: () => IPoint;\n setLayoutStartPosition: (pos: Partial<IPoint>) => void;\n getLayoutRect: () => ILayoutRect;\n setLayoutRect: (rect: Partial<ILayoutRect>, levelMap?: Partial<ILayoutRect>) => void;\n\n getLastComputeOutBounds: () => IBoundsLike;\n\n getBoundsInRect: (rect: ILayoutRect, fullRect: ILayoutRect) => IBoundsLike;\n\n //布局周期\n afterSetLayoutStartPoint: (pos: ILayoutPoint) => void;\n}\n\nexport interface IModelOption extends ICompilableInitOption {\n type: string;\n eventDispatcher: IEventDispatcher;\n dataSet: DataSet;\n map: Map<StringOrNumber, IModel | IMark>;\n mode: RenderMode;\n globalInstance: IVChart;\n regionIndexes?: Array<number>;\n specKey?: string;\n specPath?: Array<string | number>;\n specInfoPath?: Array<string | number>;\n\n getTheme?: (...keys: string[]) => any;\n getSpecInfo?: () => IChartSpecInfo;\n getChartLayoutRect: () => IRect;\n getChartViewRect: () => ILayoutRect;\n\n getChart: () => IChart;\n getSeriesData: (id: StringOrNumber | undefined, index: number | undefined) => DataView | undefined;\n\n globalScale: IGlobalScale;\n animation?: boolean;\n /**\n * 错误消息回调函数\n */\n onError: (...args: any[]) => void;\n\n /**\n * 是否关闭交互效果\n */\n disableTriggerEvent?: boolean;\n getDimensionInfo?: (chart: IChart | undefined, pos: ILayoutPoint, isTooltip?: boolean) => IDimensionInfo[] | null;\n getDimensionInfoByValue?: (axis: IAxis, value: any) => IDimensionInfo | null;\n getRectByDimensionData?: (dimensionData: IDimensionData, layoutStartPoint: ILayoutPoint) => any;\n\n dispatchEvent?: (key: string, params?: any) => void;\n}\n\nexport interface IModelSpecInfo<T extends Record<string, unknown> = any> {\n /** model 具体类型 */\n type: string | ComponentTypeEnum | SeriesTypeEnum;\n /** model spec */\n spec: T;\n /** 该 spec 在图表 spec 上的路径 */\n specPath?: Array<string | number>;\n /** 该 spec 在图表 spec info 上的路径 */\n specInfoPath?: Array<string | number>;\n /** model 当前主题 */\n theme?: any;\n /** model 对应的 region 索引 */\n regionIndexes?: number[];\n /** model 对应的 series 索引 */\n seriesIndexes?: number[];\n}\n\nexport interface IModelConstructor {\n readonly builtInTheme?: any;\n readonly transformerConstructor: new (option: IBaseModelSpecTransformerOption) => IBaseModelSpecTransformer;\n}\n\nexport type ILayoutModelState = {\n layoutUpdateRank: number;\n [key: string]: unknown;\n};\n\n// TODO: 补充model共有配置\nexport type IModelSpec = ILayoutItemSpec & { id?: StringOrNumber };\n\nexport interface IModelMarkInfo {\n /** mark 类型 */\n type: MarkTypeEnum | string | (MarkTypeEnum | string)[];\n /** mark 名称 */\n name: string;\n}\n\nexport type IBaseModelSpecTransformerOption = IChartSpecTransformerOption;\n\nexport interface IBaseModelSpecTransformerResult<T, K> {\n spec: T;\n theme: K;\n}\n\nexport interface IBaseModelSpecTransformer {\n getTheme: (spec: any, chartSpec: any) => any;\n transformSpec: (\n spec: any,\n chartSpec: any,\n chartSpecInfo?: IChartSpecInfo\n ) => IBaseModelSpecTransformerResult<any, any>;\n}\n\nexport interface ITooltipHelper {\n /** tooltip对应spec */\n spec: ITooltipSpec | undefined;\n\n /** 实际生效的tooltip activeType */\n activeType: TooltipActiveType[];\n\n /** 可以响应mark tooltip或者dimension tooltip的对象 */\n activeTriggerSet: {\n mark?: Set<IMark>;\n group?: Set<IMark>;\n };\n /** 不响应tooltip且不会影响已有tooltip的对象 */\n ignoreTriggerSet: {\n mark?: Set<IMark>;\n };\n\n /** 更新spec */\n updateTooltipSpec: () => void;\n}\n"]}
|
|
@@ -38,6 +38,6 @@ export declare class DomTooltipHandler extends BaseTooltipHandler {
|
|
|
38
38
|
protected _getParentElement(spec: ITooltipSpec): HTMLElement;
|
|
39
39
|
isTooltipShown(): boolean;
|
|
40
40
|
reInit(): void;
|
|
41
|
-
protected _updatePosition({ x, y }: ITooltipPositionActual): void;
|
|
41
|
+
protected _updatePosition({ x, y }: ITooltipPositionActual, resetTransition?: boolean): void;
|
|
42
42
|
}
|
|
43
43
|
export declare const registerDomTooltipHandler: () => void;
|
|
@@ -73,28 +73,26 @@ class DomTooltipHandler extends base_1.BaseTooltipHandler {
|
|
|
73
73
|
this._rootDom = null), this._container = null;
|
|
74
74
|
}
|
|
75
75
|
_updateTooltip(visible, params) {
|
|
76
|
-
var _a, _b
|
|
76
|
+
var _a, _b;
|
|
77
77
|
if (visible && this._rootDom) {
|
|
78
78
|
const {tooltipSpec: tooltipSpec, activeTooltipSpec: activeTooltipSpec} = params;
|
|
79
79
|
params.changePositionOnly || (this._tooltipActual = activeTooltipSpec);
|
|
80
|
-
const
|
|
80
|
+
const el = this._rootDom;
|
|
81
81
|
if (el) {
|
|
82
82
|
const {x: x = 0, y: y = 0} = null !== (_a = activeTooltipSpec.position) && void 0 !== _a ? _a : {};
|
|
83
|
-
|
|
84
|
-
this._updatePosition(null !== (_b = this._cacheCustomTooltipPosition) && void 0 !== _b ? _b : {
|
|
85
|
-
x: x,
|
|
86
|
-
y: y
|
|
87
|
-
}), tooltipSpec.updateElement(el, activeTooltipSpec, params);
|
|
88
|
-
const position = this._getActualTooltipPosition(activeTooltipSpec, params, {
|
|
89
|
-
width: el.offsetWidth,
|
|
90
|
-
height: el.offsetHeight
|
|
91
|
-
});
|
|
92
|
-
this._updatePosition(position), this._cacheCustomTooltipPosition = position;
|
|
93
|
-
} else this._rootDom.style.transitionDuration = currentVisible ? null !== (_c = this._domStyle.panel.transitionDuration) && void 0 !== _c ? _c : "initial" : "0ms",
|
|
94
|
-
this._updatePosition({
|
|
83
|
+
let position = {
|
|
95
84
|
x: x,
|
|
96
85
|
y: y
|
|
97
|
-
}
|
|
86
|
+
};
|
|
87
|
+
const currentVisible = this.getVisibility();
|
|
88
|
+
tooltipSpec.updateElement && (this._updatePosition(null !== (_b = this._cacheCustomTooltipPosition) && void 0 !== _b ? _b : {
|
|
89
|
+
x: x,
|
|
90
|
+
y: y
|
|
91
|
+
}), tooltipSpec.updateElement(el, activeTooltipSpec, params), position = this._getActualTooltipPosition(activeTooltipSpec, params, {
|
|
92
|
+
width: el.offsetWidth,
|
|
93
|
+
height: el.offsetHeight
|
|
94
|
+
}), this._cacheCustomTooltipPosition = position), !currentVisible && visible && (this._rootDom.style.transition = "none",
|
|
95
|
+
this._updatePosition(position, !1), this._rootDom.getBoundingClientRect()), this._updatePosition(position);
|
|
98
96
|
}
|
|
99
97
|
this.setVisibility(visible);
|
|
100
98
|
} else this.setVisibility(visible), this._cacheCustomTooltipPosition = void 0;
|
|
@@ -198,8 +196,10 @@ class DomTooltipHandler extends base_1.BaseTooltipHandler {
|
|
|
198
196
|
super.reInit(), this._initStyle(), this._rootDom && (0, style_1.setStyleToDom)(this._rootDom, this._domStyle.panel),
|
|
199
197
|
this.getVisibility() && (this._updateDomStringByCol(this._tooltipActual), this._updateDomStyle("height", !1));
|
|
200
198
|
}
|
|
201
|
-
_updatePosition({x: x, y: y}) {
|
|
202
|
-
this._rootDom && (this._rootDom.style.transform = `translate3d(${x}px, ${y}px, 0)
|
|
199
|
+
_updatePosition({x: x, y: y}, resetTransition = !0) {
|
|
200
|
+
this._rootDom && (this._rootDom.style.transform = `translate3d(${x}px, ${y}px, 0)`,
|
|
201
|
+
resetTransition && "" !== this._rootDom.style.transition && (this._rootDom.style.transition = "",
|
|
202
|
+
Object.assign(this._rootDom.style, this._domStyle.panel)));
|
|
203
203
|
}
|
|
204
204
|
}
|
|
205
205
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/plugin/components/tooltip-handler/dom-tooltip-handler.ts"],"names":[],"mappings":"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","file":"dom-tooltip-handler.js","sourcesContent":["import type { ITooltipActual, ITooltipPositionActual } from '../../../typings/tooltip';\nimport { BaseTooltipHandler } from './base';\nimport { getDomStyle, getTextStyle, setStyleToDom } from './utils/style';\nimport {\n TOOLTIP_CONTAINER_EL_CLASS_NAME,\n DEFAULT_TOOLTIP_Z_INDEX,\n TOOLTIP_PREFIX,\n TOOLTIP_CONTENT_BOX_CLASS_NAME,\n TOOLTIP_TITLE_CLASS_NAME\n} from './constants';\nimport { type Maybe, isValid } from '@visactor/vutils';\nimport type { IContainerSize } from '@visactor/vrender-components';\nimport { domDocument } from '../../../util/env';\nimport type { ITooltipSpec, TooltipHandlerParams } from '../../../component/tooltip';\nimport type { IComponentPluginService } from '../interface';\nimport { registerComponentPlugin } from '../register';\nimport type { ILayoutPoint } from '../../../typings';\nimport { TooltipHandlerType } from '../../../component/tooltip/constant';\nimport { getSvgHtml } from './utils/svg';\nimport { formatContent } from './utils/common';\nimport { token } from '../../../theme/token';\nimport { calcLayoutNumber } from '../../../util/space';\n/**\n * The tooltip handler class.\n */\nexport class DomTooltipHandler extends BaseTooltipHandler {\n static readonly type = TooltipHandlerType.dom;\n readonly type = TooltipHandlerType.dom;\n\n protected _tooltipContainer = domDocument?.body;\n protected _domStyle: {\n panelPadding?: number[];\n panel: Partial<CSSStyleDeclaration>;\n row: Partial<CSSStyleDeclaration>;\n title: Partial<CSSStyleDeclaration>;\n shape: Partial<CSSStyleDeclaration>;\n key: Partial<CSSStyleDeclaration>;\n value: Partial<CSSStyleDeclaration>;\n };\n protected _rootDom?: HTMLElement;\n protected _tooltipActual?: ITooltipActual;\n protected declare _container: Maybe<HTMLDivElement>;\n\n /** 自定义 tooltip 的位置缓存 */\n protected _cacheCustomTooltipPosition: ILayoutPoint;\n\n getVisibility() {\n return this._rootDom ? this._rootDom.style.visibility === 'visible' : false;\n }\n\n setVisibility(_value: boolean) {\n // 这里做个节流\n if (_value !== this.getVisibility() && this._rootDom) {\n this._rootDom.style.visibility = _value ? 'visible' : 'hidden';\n }\n }\n\n getRootDom() {\n return this._rootDom;\n }\n\n constructor() {\n super(DomTooltipHandler.type);\n }\n\n onAdd(service: IComponentPluginService<any>): void {\n super.onAdd(service);\n this._initStyle();\n this.initEl();\n }\n\n initEl() {\n const tooltipSpec = this._component.getSpec() as ITooltipSpec;\n const parentElement = tooltipSpec.parentElement as HTMLElement | HTMLCanvasElement;\n if (domDocument && parentElement && parentElement.children && parentElement.children.length) {\n for (let i = 0; i < parentElement.children.length; i++) {\n if (parentElement.children[i].classList.contains(TOOLTIP_CONTAINER_EL_CLASS_NAME)) {\n this._container = parentElement.children[i] as HTMLDivElement;\n break;\n }\n }\n if (!this._container) {\n this._container = domDocument.createElement('div');\n this._container.style.position = 'relative';\n this._container.style.zIndex = DEFAULT_TOOLTIP_Z_INDEX;\n this._container.classList.add(TOOLTIP_CONTAINER_EL_CLASS_NAME);\n parentElement.appendChild(this._container);\n }\n }\n }\n\n initRootDom() {\n const tooltipSpec = this._component.getSpec() as ITooltipSpec;\n const tooltipElement = document.createElement('div');\n const themeFontFamily = this._chartOption?.getTheme('fontFamily');\n\n setStyleToDom(tooltipElement, {\n left: '0',\n top: '0',\n pointerEvents: 'none',\n padding: '12px',\n position: 'absolute',\n zIndex: DEFAULT_TOOLTIP_Z_INDEX,\n fontFamily: (themeFontFamily ?? token.fontFamily) as string,\n fontSize: '11px',\n borderRadius: '3px',\n borderStyle: 'solid',\n lineHeight: 'initial',\n background: '#fff',\n boxShadow: '2px 2px 4px rgba(0, 0, 0, 0.1)',\n maxWidth: '100wh',\n maxHeight: '100vh',\n visibility: 'hidden',\n ...this._domStyle.panel\n } as CSSStyleDeclaration);\n tooltipElement.classList.add(tooltipSpec.className);\n tooltipElement.setAttribute('vchart-tooltip-id', `${this.id}`);\n this._container.appendChild(tooltipElement);\n this._rootDom = tooltipElement;\n }\n\n // 计算 tooltip 内容区域的宽高,并缓存结果\n protected _getTooltipBoxSize(actualTooltip: ITooltipActual, changePositionOnly: boolean): IContainerSize | undefined {\n if (!this._rootDom) {\n this.initRootDom();\n }\n if (!changePositionOnly) {\n this._updateDomStringByCol(actualTooltip);\n }\n\n this._updateDomStyle('height', changePositionOnly);\n\n const rect = this._rootDom?.getBoundingClientRect();\n\n return {\n width: rect?.width,\n height: rect?.height\n };\n }\n\n protected _removeTooltip() {\n if (this._rootDom && this._rootDom.parentNode) {\n this._rootDom.parentNode.removeChild(this._rootDom);\n this._rootDom = null;\n }\n this._container = null;\n }\n\n protected _updateTooltip(visible: boolean, params: TooltipHandlerParams) {\n if (!visible || !this._rootDom) {\n this.setVisibility(visible);\n this._cacheCustomTooltipPosition = undefined;\n } else {\n const { tooltipSpec, activeTooltipSpec } = params;\n\n if (!params.changePositionOnly) {\n this._tooltipActual = activeTooltipSpec;\n }\n const currentVisible = this.getVisibility();\n\n // 位置\n const el = this._rootDom;\n if (el) {\n const { x = 0, y = 0 } = activeTooltipSpec.position ?? {};\n if (tooltipSpec.updateElement) {\n // 此处先设定一次位置,防止页面暂时出现滚动条(优先设置上次的位置)\n this._updatePosition(this._cacheCustomTooltipPosition ?? { x, y });\n // 更新 tooltip dom\n tooltipSpec.updateElement(el, activeTooltipSpec, params);\n // 重新计算 tooltip 位置\n const position = this._getActualTooltipPosition(activeTooltipSpec, params, {\n width: el.offsetWidth,\n height: el.offsetHeight\n });\n // 更新位置\n this._updatePosition(position);\n // 更新缓存\n this._cacheCustomTooltipPosition = position;\n } else {\n if (!currentVisible) {\n // 当从隐藏切换到显示的时候,需要先设置一次 transition 为 0ms,防止出现从一个非常远的初始位置进行动画\n this._rootDom.style.transitionDuration = '0ms';\n } else {\n this._rootDom.style.transitionDuration = this._domStyle.panel.transitionDuration ?? 'initial';\n }\n this._updatePosition({ x, y });\n }\n }\n this.setVisibility(visible);\n }\n }\n\n protected _initStyle() {\n const tooltipSpec = this._component.getSpec() as ITooltipSpec;\n\n this._domStyle = getDomStyle(tooltipSpec);\n }\n\n protected _updateDomStringByCol(actualTooltip?: ITooltipActual) {\n const { title = {}, content } = actualTooltip;\n const hasContent = content && content.length;\n const rowStyle = this._domStyle.row;\n const chilren = [...(this._rootDom.children as any)] as HTMLElement[];\n let titleDom = chilren.find(child => child.className.includes(TOOLTIP_TITLE_CLASS_NAME));\n let contentDom = chilren.find(child => child.className.includes(TOOLTIP_CONTENT_BOX_CLASS_NAME));\n\n if (!titleDom && title.visible !== false) {\n titleDom = document.createElement('h2');\n const span = document.createElement('span');\n titleDom.appendChild(span);\n\n titleDom.classList.add(TOOLTIP_TITLE_CLASS_NAME);\n\n // 将 titleDom 插入到 this._rootDom 中作为第一个节点\n if (this._rootDom.firstChild) {\n this._rootDom.insertBefore(titleDom, this._rootDom.firstChild);\n } else {\n this._rootDom.appendChild(titleDom);\n }\n }\n\n if (titleDom && title.visible !== false) {\n setStyleToDom(titleDom, {\n ...this._domStyle.title,\n ...(hasContent ? rowStyle : { marginBottom: '0px' }),\n marginTop: '0px'\n });\n (titleDom.firstChild as HTMLElement).innerHTML = `${title.value ?? ''}`;\n } else if (titleDom && title.visible === false) {\n titleDom.parentNode.removeChild(titleDom);\n }\n\n const columns = ['shape', 'key', 'value'];\n\n if (!contentDom && hasContent) {\n contentDom = document.createElement('div');\n\n columns.forEach(col => {\n const colDiv = document.createElement('div');\n\n colDiv.classList.add(`${TOOLTIP_PREFIX}-column`);\n colDiv.classList.add(`${TOOLTIP_PREFIX}-${col}-column`);\n colDiv.setAttribute('data-col', col);\n contentDom.appendChild(colDiv);\n });\n\n contentDom.classList.add(TOOLTIP_CONTENT_BOX_CLASS_NAME);\n this._rootDom.appendChild(contentDom);\n }\n\n if (contentDom && hasContent) {\n const columnDivs = [...(contentDom.children as any)] as HTMLElement[];\n setStyleToDom(contentDom, { whiteSpace: 'nowrap' });\n\n columnDivs.forEach((colDiv, index) => {\n const colName = colDiv.getAttribute('data-col');\n\n if (colName && columns.includes(colName)) {\n const hideColumn = colName === 'shape' && content.every(c => !c.hasShape || !c.shapeType);\n\n setStyleToDom(colDiv, {\n ...(this._domStyle as any)[colName],\n display: hideColumn ? 'none' : 'inline-block',\n verticalAlign: 'top'\n });\n const rows = [...(colDiv.children as any)] as HTMLElement[];\n\n // 删除多余的行\n rows.slice(content.length).forEach(extraRow => {\n extraRow.parentNode.removeChild(extraRow);\n });\n\n content.forEach((entry, index) => {\n let row = rows[index];\n\n if (!row) {\n row = document.createElement('div');\n row.classList.add(`${TOOLTIP_PREFIX}-${colName}`);\n colDiv.appendChild(row);\n }\n const styleByRow = {\n ...rowStyle\n };\n\n if (index === content.length - 1) {\n styleByRow.marginBottom = '0px';\n }\n\n styleByRow.display = entry.visible === false ? 'none' : 'block';\n // 每次更新,需要更新单元格的高度,防止同步高度的时候没有更新\n styleByRow.height = 'initial';\n\n if (colName === 'key') {\n row.innerHTML = formatContent(entry.key);\n if (entry.keyStyle) {\n getTextStyle(entry.keyStyle, styleByRow);\n }\n } else if (colName === 'value') {\n row.innerHTML = formatContent(entry.value);\n if (entry.valueStyle) {\n getTextStyle(entry.valueStyle, styleByRow);\n }\n } else if (colName === 'shape') {\n row.innerHTML = getSvgHtml(entry, `${this.id}_${index}`);\n }\n\n setStyleToDom(row, styleByRow);\n });\n }\n });\n } else if (contentDom && !hasContent) {\n contentDom.parentNode.removeChild(contentDom);\n }\n }\n protected _updateDomStyle(sizeKey: 'width' | 'height' = 'width', refreshSize: boolean) {\n const rootDom = this._rootDom;\n const contentDom = [...(rootDom.children as any)].find(child =>\n child.className.includes(TOOLTIP_CONTENT_BOX_CLASS_NAME)\n );\n const titleDom = [...(rootDom.children as any)].find(child => child.className.includes(TOOLTIP_TITLE_CLASS_NAME));\n\n if (contentDom) {\n const tooltipSpec = this._component.getSpec() as ITooltipSpec;\n const contentStyle: Partial<CSSStyleDeclaration> = {};\n const titleLabel = tooltipSpec.style?.titleLabel;\n const autoFixTitleWidth = titleLabel && titleLabel.autoWidth && titleLabel.multiLine !== false;\n\n if (autoFixTitleWidth && titleDom) {\n const maxWidth = [...(contentDom.children as any)].reduce((res, col) => {\n return sizeKey === 'height'\n ? res + col.getBoundingClientRect().width\n : Math.max(res, col.getBoundingClientRect().width);\n }, 0);\n\n if (maxWidth > 0) {\n titleDom.style.maxWidth = `${maxWidth}px`;\n // 需要再计算一次,因为之前可能因为没有设置maxWidth, content的dom被撑宽了\n titleDom.style.maxWidth = `${Math.ceil(contentDom.getBoundingClientRect().width)}px`;\n }\n }\n\n if (isValid(tooltipSpec?.style?.maxContentHeight)) {\n const titleHeight =\n titleDom && titleDom.className.includes(TOOLTIP_TITLE_CLASS_NAME)\n ? titleDom.getBoundingClientRect().height + (tooltipSpec.style.spaceRow ?? 0)\n : 0;\n const viewRect = (this._chartOption as any).getChartViewRect();\n const maxHeight = calcLayoutNumber(\n tooltipSpec.style.maxContentHeight,\n Math.min(viewRect.height, document.body.clientHeight) -\n titleHeight -\n (this._domStyle.panelPadding ? this._domStyle.panelPadding[0] + this._domStyle.panelPadding[1] : 0)\n );\n\n if (maxHeight > 0) {\n contentStyle.maxHeight = `${maxHeight}px`;\n contentStyle.overflowY = 'auto';\n // todo 让内容宽度往外阔一点,给滚动条留出位置\n contentStyle.width = `calc(100% + ${\n this._domStyle.panelPadding ? this._domStyle.panelPadding[1] + 'px' : '10px'\n })`;\n\n setStyleToDom(contentDom as HTMLElement, contentStyle);\n }\n }\n\n const rows = contentDom.children;\n const widthByCol: number[] = [];\n if (rows) {\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n const cols = row.children ?? ([] as HTMLElement[]);\n\n for (let j = 0; j < cols.length; j++) {\n if (refreshSize) {\n // 每次更新,需要更新单元格的高度,防止同步高度的时候没有更新\n cols[j].style[sizeKey] = 'initial';\n }\n\n const width = cols[j].getBoundingClientRect()[sizeKey];\n if (widthByCol[j] === undefined || widthByCol[j] < width) {\n widthByCol[j] = width;\n }\n }\n }\n\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n const cols = row.children ?? ([] as HTMLElement[]);\n\n for (let j = 0; j < cols.length; j++) {\n (cols[j] as HTMLElement).style[sizeKey] = `${widthByCol[j]}px`;\n }\n }\n }\n }\n }\n\n protected _getParentElement(spec: ITooltipSpec): HTMLElement {\n return this._container ?? super._getParentElement(spec);\n }\n\n isTooltipShown() {\n return this.getVisibility();\n }\n\n reInit() {\n super.reInit();\n this._initStyle();\n if (this._rootDom) {\n setStyleToDom(this._rootDom, this._domStyle.panel);\n }\n\n if (this.getVisibility()) {\n this._updateDomStringByCol(this._tooltipActual);\n this._updateDomStyle('height', false);\n }\n }\n\n protected _updatePosition({ x, y }: ITooltipPositionActual) {\n if (this._rootDom) {\n // translate3d 性能较好:https://stackoverflow.com/questions/22111256/translate3d-vs-translate-performance\n this._rootDom.style.transform = `translate3d(${x}px, ${y}px, 0)`;\n }\n }\n}\n\nexport const registerDomTooltipHandler = () => {\n registerComponentPlugin(DomTooltipHandler);\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/plugin/components/tooltip-handler/dom-tooltip-handler.ts"],"names":[],"mappings":"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","file":"dom-tooltip-handler.js","sourcesContent":["import type { ITooltipActual, ITooltipPositionActual } from '../../../typings/tooltip';\nimport { BaseTooltipHandler } from './base';\nimport { getDomStyle, getTextStyle, setStyleToDom } from './utils/style';\nimport {\n TOOLTIP_CONTAINER_EL_CLASS_NAME,\n DEFAULT_TOOLTIP_Z_INDEX,\n TOOLTIP_PREFIX,\n TOOLTIP_CONTENT_BOX_CLASS_NAME,\n TOOLTIP_TITLE_CLASS_NAME\n} from './constants';\nimport { type Maybe, isValid } from '@visactor/vutils';\nimport type { IContainerSize } from '@visactor/vrender-components';\nimport { domDocument } from '../../../util/env';\nimport type { ITooltipSpec, TooltipHandlerParams } from '../../../component/tooltip';\nimport type { IComponentPluginService } from '../interface';\nimport { registerComponentPlugin } from '../register';\nimport type { ILayoutPoint } from '../../../typings';\nimport { TooltipHandlerType } from '../../../component/tooltip/constant';\nimport { getSvgHtml } from './utils/svg';\nimport { formatContent } from './utils/common';\nimport { token } from '../../../theme/token';\nimport { calcLayoutNumber } from '../../../util/space';\n/**\n * The tooltip handler class.\n */\nexport class DomTooltipHandler extends BaseTooltipHandler {\n static readonly type = TooltipHandlerType.dom;\n readonly type = TooltipHandlerType.dom;\n\n protected _tooltipContainer = domDocument?.body;\n protected _domStyle: {\n panelPadding?: number[];\n panel: Partial<CSSStyleDeclaration>;\n row: Partial<CSSStyleDeclaration>;\n title: Partial<CSSStyleDeclaration>;\n shape: Partial<CSSStyleDeclaration>;\n key: Partial<CSSStyleDeclaration>;\n value: Partial<CSSStyleDeclaration>;\n };\n protected _rootDom?: HTMLElement;\n protected _tooltipActual?: ITooltipActual;\n protected declare _container: Maybe<HTMLDivElement>;\n\n /** 自定义 tooltip 的位置缓存 */\n protected _cacheCustomTooltipPosition: ILayoutPoint;\n\n getVisibility() {\n return this._rootDom ? this._rootDom.style.visibility === 'visible' : false;\n }\n\n setVisibility(_value: boolean) {\n // 这里做个节流\n if (_value !== this.getVisibility() && this._rootDom) {\n this._rootDom.style.visibility = _value ? 'visible' : 'hidden';\n }\n }\n\n getRootDom() {\n return this._rootDom;\n }\n\n constructor() {\n super(DomTooltipHandler.type);\n }\n\n onAdd(service: IComponentPluginService<any>): void {\n super.onAdd(service);\n this._initStyle();\n this.initEl();\n }\n\n initEl() {\n const tooltipSpec = this._component.getSpec() as ITooltipSpec;\n const parentElement = tooltipSpec.parentElement as HTMLElement | HTMLCanvasElement;\n if (domDocument && parentElement && parentElement.children && parentElement.children.length) {\n for (let i = 0; i < parentElement.children.length; i++) {\n if (parentElement.children[i].classList.contains(TOOLTIP_CONTAINER_EL_CLASS_NAME)) {\n this._container = parentElement.children[i] as HTMLDivElement;\n break;\n }\n }\n if (!this._container) {\n this._container = domDocument.createElement('div');\n this._container.style.position = 'relative';\n this._container.style.zIndex = DEFAULT_TOOLTIP_Z_INDEX;\n this._container.classList.add(TOOLTIP_CONTAINER_EL_CLASS_NAME);\n parentElement.appendChild(this._container);\n }\n }\n }\n\n initRootDom() {\n const tooltipSpec = this._component.getSpec() as ITooltipSpec;\n const tooltipElement = document.createElement('div');\n const themeFontFamily = this._chartOption?.getTheme('fontFamily');\n setStyleToDom(tooltipElement, {\n left: '0',\n top: '0',\n pointerEvents: 'none',\n padding: '12px',\n position: 'absolute',\n zIndex: DEFAULT_TOOLTIP_Z_INDEX,\n fontFamily: (themeFontFamily ?? token.fontFamily) as string,\n fontSize: '11px',\n borderRadius: '3px',\n borderStyle: 'solid',\n lineHeight: 'initial',\n background: '#fff',\n boxShadow: '2px 2px 4px rgba(0, 0, 0, 0.1)',\n maxWidth: '100wh',\n maxHeight: '100vh',\n visibility: 'hidden',\n ...this._domStyle.panel\n } as CSSStyleDeclaration);\n tooltipElement.classList.add(tooltipSpec.className);\n tooltipElement.setAttribute('vchart-tooltip-id', `${this.id}`);\n this._container.appendChild(tooltipElement);\n this._rootDom = tooltipElement;\n }\n\n // 计算 tooltip 内容区域的宽高,并缓存结果\n protected _getTooltipBoxSize(actualTooltip: ITooltipActual, changePositionOnly: boolean): IContainerSize | undefined {\n if (!this._rootDom) {\n this.initRootDom();\n }\n if (!changePositionOnly) {\n this._updateDomStringByCol(actualTooltip);\n }\n\n this._updateDomStyle('height', changePositionOnly);\n\n const rect = this._rootDom?.getBoundingClientRect();\n\n return {\n width: rect?.width,\n height: rect?.height\n };\n }\n\n protected _removeTooltip() {\n if (this._rootDom && this._rootDom.parentNode) {\n this._rootDom.parentNode.removeChild(this._rootDom);\n this._rootDom = null;\n }\n this._container = null;\n }\n\n protected _updateTooltip(visible: boolean, params: TooltipHandlerParams) {\n if (!visible || !this._rootDom) {\n this.setVisibility(visible);\n this._cacheCustomTooltipPosition = undefined;\n } else {\n const { tooltipSpec, activeTooltipSpec } = params;\n\n if (!params.changePositionOnly) {\n this._tooltipActual = activeTooltipSpec;\n }\n // 位置\n const el = this._rootDom;\n if (el) {\n const { x = 0, y = 0 } = activeTooltipSpec.position ?? {};\n let position = { x, y };\n const currentVisible = this.getVisibility();\n if (tooltipSpec.updateElement) {\n // 此处先设定一次位置,防止页面暂时出现滚动条(优先设置上次的位置)\n this._updatePosition(this._cacheCustomTooltipPosition ?? { x, y });\n // 更新 tooltip dom\n tooltipSpec.updateElement(el, activeTooltipSpec, params);\n // 重新计算 tooltip 位置\n position = this._getActualTooltipPosition(activeTooltipSpec, params, {\n width: el.offsetWidth,\n height: el.offsetHeight\n });\n // 更新缓存\n this._cacheCustomTooltipPosition = position;\n }\n // 首次从false展示需要先设置一次位置,防止出现从一个非常远的初始位置进行动画\n if (!currentVisible && visible) {\n this._rootDom.style.transition = 'none';\n this._updatePosition(position, false);\n this._rootDom.getBoundingClientRect();\n }\n // 更新位置\n this._updatePosition(position);\n }\n this.setVisibility(visible);\n }\n }\n\n protected _initStyle() {\n const tooltipSpec = this._component.getSpec() as ITooltipSpec;\n\n this._domStyle = getDomStyle(tooltipSpec);\n }\n\n protected _updateDomStringByCol(actualTooltip?: ITooltipActual) {\n const { title = {}, content } = actualTooltip;\n const hasContent = content && content.length;\n const rowStyle = this._domStyle.row;\n const chilren = [...(this._rootDom.children as any)] as HTMLElement[];\n let titleDom = chilren.find(child => child.className.includes(TOOLTIP_TITLE_CLASS_NAME));\n let contentDom = chilren.find(child => child.className.includes(TOOLTIP_CONTENT_BOX_CLASS_NAME));\n\n if (!titleDom && title.visible !== false) {\n titleDom = document.createElement('h2');\n const span = document.createElement('span');\n titleDom.appendChild(span);\n\n titleDom.classList.add(TOOLTIP_TITLE_CLASS_NAME);\n\n // 将 titleDom 插入到 this._rootDom 中作为第一个节点\n if (this._rootDom.firstChild) {\n this._rootDom.insertBefore(titleDom, this._rootDom.firstChild);\n } else {\n this._rootDom.appendChild(titleDom);\n }\n }\n\n if (titleDom && title.visible !== false) {\n setStyleToDom(titleDom, {\n ...this._domStyle.title,\n ...(hasContent ? rowStyle : { marginBottom: '0px' }),\n marginTop: '0px'\n });\n (titleDom.firstChild as HTMLElement).innerHTML = `${title.value ?? ''}`;\n } else if (titleDom && title.visible === false) {\n titleDom.parentNode.removeChild(titleDom);\n }\n\n const columns = ['shape', 'key', 'value'];\n\n if (!contentDom && hasContent) {\n contentDom = document.createElement('div');\n\n columns.forEach(col => {\n const colDiv = document.createElement('div');\n\n colDiv.classList.add(`${TOOLTIP_PREFIX}-column`);\n colDiv.classList.add(`${TOOLTIP_PREFIX}-${col}-column`);\n colDiv.setAttribute('data-col', col);\n contentDom.appendChild(colDiv);\n });\n\n contentDom.classList.add(TOOLTIP_CONTENT_BOX_CLASS_NAME);\n this._rootDom.appendChild(contentDom);\n }\n\n if (contentDom && hasContent) {\n const columnDivs = [...(contentDom.children as any)] as HTMLElement[];\n setStyleToDom(contentDom, { whiteSpace: 'nowrap' });\n\n columnDivs.forEach((colDiv, index) => {\n const colName = colDiv.getAttribute('data-col');\n\n if (colName && columns.includes(colName)) {\n const hideColumn = colName === 'shape' && content.every(c => !c.hasShape || !c.shapeType);\n\n setStyleToDom(colDiv, {\n ...(this._domStyle as any)[colName],\n display: hideColumn ? 'none' : 'inline-block',\n verticalAlign: 'top'\n });\n const rows = [...(colDiv.children as any)] as HTMLElement[];\n\n // 删除多余的行\n rows.slice(content.length).forEach(extraRow => {\n extraRow.parentNode.removeChild(extraRow);\n });\n\n content.forEach((entry, index) => {\n let row = rows[index];\n\n if (!row) {\n row = document.createElement('div');\n row.classList.add(`${TOOLTIP_PREFIX}-${colName}`);\n colDiv.appendChild(row);\n }\n const styleByRow = {\n ...rowStyle\n };\n\n if (index === content.length - 1) {\n styleByRow.marginBottom = '0px';\n }\n\n styleByRow.display = entry.visible === false ? 'none' : 'block';\n // 每次更新,需要更新单元格的高度,防止同步高度的时候没有更新\n styleByRow.height = 'initial';\n\n if (colName === 'key') {\n row.innerHTML = formatContent(entry.key);\n if (entry.keyStyle) {\n getTextStyle(entry.keyStyle, styleByRow);\n }\n } else if (colName === 'value') {\n row.innerHTML = formatContent(entry.value);\n if (entry.valueStyle) {\n getTextStyle(entry.valueStyle, styleByRow);\n }\n } else if (colName === 'shape') {\n row.innerHTML = getSvgHtml(entry, `${this.id}_${index}`);\n }\n\n setStyleToDom(row, styleByRow);\n });\n }\n });\n } else if (contentDom && !hasContent) {\n contentDom.parentNode.removeChild(contentDom);\n }\n }\n protected _updateDomStyle(sizeKey: 'width' | 'height' = 'width', refreshSize: boolean) {\n const rootDom = this._rootDom;\n const contentDom = [...(rootDom.children as any)].find(child =>\n child.className.includes(TOOLTIP_CONTENT_BOX_CLASS_NAME)\n );\n const titleDom = [...(rootDom.children as any)].find(child => child.className.includes(TOOLTIP_TITLE_CLASS_NAME));\n\n if (contentDom) {\n const tooltipSpec = this._component.getSpec() as ITooltipSpec;\n const contentStyle: Partial<CSSStyleDeclaration> = {};\n const titleLabel = tooltipSpec.style?.titleLabel;\n const autoFixTitleWidth = titleLabel && titleLabel.autoWidth && titleLabel.multiLine !== false;\n\n if (autoFixTitleWidth && titleDom) {\n const maxWidth = [...(contentDom.children as any)].reduce((res, col) => {\n return sizeKey === 'height'\n ? res + col.getBoundingClientRect().width\n : Math.max(res, col.getBoundingClientRect().width);\n }, 0);\n\n if (maxWidth > 0) {\n titleDom.style.maxWidth = `${maxWidth}px`;\n // 需要再计算一次,因为之前可能因为没有设置maxWidth, content的dom被撑宽了\n titleDom.style.maxWidth = `${Math.ceil(contentDom.getBoundingClientRect().width)}px`;\n }\n }\n\n if (isValid(tooltipSpec?.style?.maxContentHeight)) {\n const titleHeight =\n titleDom && titleDom.className.includes(TOOLTIP_TITLE_CLASS_NAME)\n ? titleDom.getBoundingClientRect().height + (tooltipSpec.style.spaceRow ?? 0)\n : 0;\n const viewRect = (this._chartOption as any).getChartViewRect();\n const maxHeight = calcLayoutNumber(\n tooltipSpec.style.maxContentHeight,\n Math.min(viewRect.height, document.body.clientHeight) -\n titleHeight -\n (this._domStyle.panelPadding ? this._domStyle.panelPadding[0] + this._domStyle.panelPadding[1] : 0)\n );\n\n if (maxHeight > 0) {\n contentStyle.maxHeight = `${maxHeight}px`;\n contentStyle.overflowY = 'auto';\n // todo 让内容宽度往外阔一点,给滚动条留出位置\n contentStyle.width = `calc(100% + ${\n this._domStyle.panelPadding ? this._domStyle.panelPadding[1] + 'px' : '10px'\n })`;\n\n setStyleToDom(contentDom as HTMLElement, contentStyle);\n }\n }\n\n const rows = contentDom.children;\n const widthByCol: number[] = [];\n if (rows) {\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n const cols = row.children ?? ([] as HTMLElement[]);\n\n for (let j = 0; j < cols.length; j++) {\n if (refreshSize) {\n // 每次更新,需要更新单元格的高度,防止同步高度的时候没有更新\n cols[j].style[sizeKey] = 'initial';\n }\n\n const width = cols[j].getBoundingClientRect()[sizeKey];\n if (widthByCol[j] === undefined || widthByCol[j] < width) {\n widthByCol[j] = width;\n }\n }\n }\n\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n const cols = row.children ?? ([] as HTMLElement[]);\n\n for (let j = 0; j < cols.length; j++) {\n (cols[j] as HTMLElement).style[sizeKey] = `${widthByCol[j]}px`;\n }\n }\n }\n }\n }\n\n protected _getParentElement(spec: ITooltipSpec): HTMLElement {\n return this._container ?? super._getParentElement(spec);\n }\n\n isTooltipShown() {\n return this.getVisibility();\n }\n\n reInit() {\n super.reInit();\n this._initStyle();\n if (this._rootDom) {\n setStyleToDom(this._rootDom, this._domStyle.panel);\n }\n\n if (this.getVisibility()) {\n this._updateDomStringByCol(this._tooltipActual);\n this._updateDomStyle('height', false);\n }\n }\n\n protected _updatePosition({ x, y }: ITooltipPositionActual, resetTransition = true) {\n if (this._rootDom) {\n // translate3d 性能较好:https://stackoverflow.com/questions/22111256/translate3d-vs-translate-performance\n this._rootDom.style.transform = `translate3d(${x}px, ${y}px, 0)`;\n if (resetTransition && this._rootDom.style.transition !== '') {\n this._rootDom.style.transition = '';\n Object.assign(this._rootDom.style, this._domStyle.panel);\n }\n }\n }\n}\n\nexport const registerDomTooltipHandler = () => {\n registerComponentPlugin(DomTooltipHandler);\n};\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var __createBinding = this && this.__createBinding || (Object.create ? function(o, m, k, k2) {
|
|
4
|
+
void 0 === k2 && (k2 = k);
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
desc && !("get" in desc ? !m.__esModule : desc.writable || desc.configurable) || (desc = {
|
|
7
|
+
enumerable: !0,
|
|
8
|
+
get: function() {
|
|
9
|
+
return m[k];
|
|
10
|
+
}
|
|
11
|
+
}), Object.defineProperty(o, k2, desc);
|
|
12
|
+
} : function(o, m, k, k2) {
|
|
13
|
+
void 0 === k2 && (k2 = k), o[k2] = m[k];
|
|
14
|
+
}), __exportStar = this && this.__exportStar || function(m, exports) {
|
|
15
|
+
for (var p in m) "default" === p || Object.prototype.hasOwnProperty.call(exports, p) || __createBinding(exports, m, p);
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
Object.defineProperty(exports, "__esModule", {
|
|
19
|
+
value: !0
|
|
20
|
+
}), __exportStar(require("./register"), exports), __exportStar(require("./interface"), exports);
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/plugin/vchart/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,8CAA4B","file":"index.js","sourcesContent":["export * from './register';\nexport * from './interface';\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { IVChart } from '../../core/interface';
|
|
2
|
+
import type { IBasePlugin, IBasePluginService, MaybePromise } from '../base/interface';
|
|
3
|
+
export interface IVChartPlugin<T extends IVChartPluginService = any> extends IBasePlugin<T> {
|
|
4
|
+
specKey?: string;
|
|
5
|
+
onInit?: (service: T) => MaybePromise<void>;
|
|
6
|
+
}
|
|
7
|
+
export interface IVChartPluginConstructor {
|
|
8
|
+
readonly pluginType: 'vchart';
|
|
9
|
+
readonly specKey?: string;
|
|
10
|
+
readonly type: string;
|
|
11
|
+
new (): IVChartPlugin;
|
|
12
|
+
}
|
|
13
|
+
export interface IVChartPluginService<T extends IVChartPlugin = any> extends IBasePluginService<T> {
|
|
14
|
+
globalInstance: IVChart;
|
|
15
|
+
onInit?: () => MaybePromise<void>;
|
|
16
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/plugin/vchart/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["import type { IVChart } from '../../core/interface';\nimport type { IBasePlugin, IBasePluginService, MaybePromise } from '../base/interface';\n\nexport interface IVChartPlugin<T extends IVChartPluginService = any> extends IBasePlugin<T> {\n specKey?: string;\n onInit?: (service: T) => MaybePromise<void>;\n}\n\nexport interface IVChartPluginConstructor {\n readonly pluginType: 'vchart';\n readonly specKey?: string;\n readonly type: string;\n new (): IVChartPlugin;\n}\n\nexport interface IVChartPluginService<T extends IVChartPlugin = any> extends IBasePluginService<T> {\n globalInstance: IVChart;\n onInit?: () => MaybePromise<void>;\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { IVChartPlugin, IVChartPluginService } from './interface';
|
|
2
|
+
import type { IVChart } from '../../core';
|
|
3
|
+
import { BasePluginService } from '../base/base-plugin-service';
|
|
4
|
+
export declare class VChartPluginService<T extends IVChartPlugin = IVChartPlugin> extends BasePluginService<T> implements IVChartPluginService<T> {
|
|
5
|
+
globalInstance: IVChart;
|
|
6
|
+
constructor(globalInstance: IVChart);
|
|
7
|
+
onInit(): void;
|
|
8
|
+
releaseAll(): void;
|
|
9
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: !0
|
|
5
|
+
}), exports.VChartPluginService = void 0;
|
|
6
|
+
|
|
7
|
+
const base_plugin_service_1 = require("../base/base-plugin-service");
|
|
8
|
+
|
|
9
|
+
class VChartPluginService extends base_plugin_service_1.BasePluginService {
|
|
10
|
+
constructor(globalInstance) {
|
|
11
|
+
super(), this.globalInstance = globalInstance;
|
|
12
|
+
}
|
|
13
|
+
onInit() {
|
|
14
|
+
this._plugins.forEach((plugin => {
|
|
15
|
+
plugin.onInit && plugin.onInit(this);
|
|
16
|
+
}));
|
|
17
|
+
}
|
|
18
|
+
releaseAll() {
|
|
19
|
+
super.releaseAll(), this.globalInstance = null;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
exports.VChartPluginService = VChartPluginService;
|
|
24
|
+
//# sourceMappingURL=plugin-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/plugin/vchart/plugin-service.ts"],"names":[],"mappings":";;;AAEA,qEAAgE;AAEhE,MAAa,mBACX,SAAQ,uCAAoB;IAK5B,YAAY,cAAuB;QACjC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC7B,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,UAAU;QACR,KAAK,CAAC,UAAU,EAAE,CAAC;QACnB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,CAAC;CACF;AArBD,kDAqBC","file":"plugin-service.js","sourcesContent":["import type { IVChartPlugin, IVChartPluginService } from './interface';\nimport type { IVChart } from '../../core';\nimport { BasePluginService } from '../base/base-plugin-service';\n\nexport class VChartPluginService<T extends IVChartPlugin = IVChartPlugin>\n extends BasePluginService<T>\n implements IVChartPluginService<T>\n{\n globalInstance: IVChart;\n\n constructor(globalInstance: IVChart) {\n super();\n this.globalInstance = globalInstance;\n }\n\n onInit() {\n this._plugins.forEach(plugin => {\n plugin.onInit && plugin.onInit(this);\n });\n }\n\n releaseAll(): void {\n super.releaseAll();\n this.globalInstance = null;\n }\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: !0
|
|
5
|
+
}), exports.registerVChartPlugin = void 0;
|
|
6
|
+
|
|
7
|
+
const factory_1 = require("../../core/factory"), registerVChartPlugin = plugin => {
|
|
8
|
+
factory_1.Factory.registerVChartPlugin(plugin.type, plugin);
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
exports.registerVChartPlugin = registerVChartPlugin;
|
|
12
|
+
//# sourceMappingURL=register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/plugin/vchart/register.ts"],"names":[],"mappings":";;;AAAA,gDAA6C;AAGtC,MAAM,oBAAoB,GAAG,CAAC,MAAgC,EAAE,EAAE;IACvE,iBAAO,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC,CAAC;AAFW,QAAA,oBAAoB,wBAE/B","file":"register.js","sourcesContent":["import { Factory } from '../../core/factory';\nimport type { IVChartPluginConstructor } from './interface';\n\nexport const registerVChartPlugin = (plugin: IVChartPluginConstructor) => {\n Factory.registerVChartPlugin(plugin.type, plugin);\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './rotate';
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var __createBinding = this && this.__createBinding || (Object.create ? function(o, m, k, k2) {
|
|
4
|
+
void 0 === k2 && (k2 = k);
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
desc && !("get" in desc ? !m.__esModule : desc.writable || desc.configurable) || (desc = {
|
|
7
|
+
enumerable: !0,
|
|
8
|
+
get: function() {
|
|
9
|
+
return m[k];
|
|
10
|
+
}
|
|
11
|
+
}), Object.defineProperty(o, k2, desc);
|
|
12
|
+
} : function(o, m, k, k2) {
|
|
13
|
+
void 0 === k2 && (k2 = k), o[k2] = m[k];
|
|
14
|
+
}), __exportStar = this && this.__exportStar || function(m, exports) {
|
|
15
|
+
for (var p in m) "default" === p || Object.prototype.hasOwnProperty.call(exports, p) || __createBinding(exports, m, p);
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
Object.defineProperty(exports, "__esModule", {
|
|
19
|
+
value: !0
|
|
20
|
+
}), __exportStar(require("./rotate"), exports);
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/plugin/vchart/rotate/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB","file":"index.js","sourcesContent":["export * from './rotate';\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { BasePlugin } from '../../base/base-plugin';
|
|
2
|
+
import type { IVChartPlugin, IVChartPluginService } from '../interface';
|
|
3
|
+
export declare class RotatePlugin extends BasePlugin implements IVChartPlugin {
|
|
4
|
+
static readonly pluginType: 'vchart';
|
|
5
|
+
static readonly specKey = "rotate";
|
|
6
|
+
static readonly type: string;
|
|
7
|
+
readonly type: string;
|
|
8
|
+
private rotateDegree;
|
|
9
|
+
private matrix;
|
|
10
|
+
private vglobal_mapToCanvasPoint;
|
|
11
|
+
private _vchart;
|
|
12
|
+
constructor();
|
|
13
|
+
onInit(service: IVChartPluginService): void;
|
|
14
|
+
rotate90WithTransform: (rotateDom: HTMLElement) => void;
|
|
15
|
+
cancelTransform: (rotateDom: HTMLElement) => void;
|
|
16
|
+
release(): void;
|
|
17
|
+
}
|
|
18
|
+
export declare const registerRotatePlugin: () => void;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: !0
|
|
5
|
+
}), exports.registerRotatePlugin = exports.RotatePlugin = void 0;
|
|
6
|
+
|
|
7
|
+
const base_plugin_1 = require("../../base/base-plugin"), register_1 = require("../register"), vrender_core_1 = require("@visactor/vrender-core");
|
|
8
|
+
|
|
9
|
+
class RotatePlugin extends base_plugin_1.BasePlugin {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(RotatePlugin.type), this.type = "rotatePlugin", this.rotate90WithTransform = rotateDom => {
|
|
12
|
+
this.rotateDegree = 90;
|
|
13
|
+
const rotateCenter = rotateDom.clientWidth < rotateDom.clientHeight ? Math.max(rotateDom.clientWidth, rotateDom.clientHeight) / 2 : Math.min(rotateDom.clientWidth, rotateDom.clientHeight) / 2, domRect = this._vchart.getContainer().getBoundingClientRect(), x1 = domRect.left, y1 = domRect.top, x2 = domRect.right, y2 = domRect.bottom;
|
|
14
|
+
rotateDom.style.transform = "rotate(90deg)", rotateDom.style.transformOrigin = `${rotateCenter}px ${rotateCenter}px`;
|
|
15
|
+
const getRect = () => ({
|
|
16
|
+
x1: x1,
|
|
17
|
+
y1: y1,
|
|
18
|
+
x2: x2,
|
|
19
|
+
y2: y2
|
|
20
|
+
}), getMatrix = () => {
|
|
21
|
+
const viewPortWidth = ("undefined" != typeof window ? {
|
|
22
|
+
width: window.innerWidth || document.documentElement.clientWidth,
|
|
23
|
+
height: window.innerHeight || document.documentElement.clientHeight
|
|
24
|
+
} : vrender_core_1.vglobal && "getViewportSize" in vrender_core_1.vglobal && vrender_core_1.vglobal.getViewportSize ? vrender_core_1.vglobal.getViewportSize() : rotateDom.getBoundingClientRect()).width, domRect = this._vchart.getContainer().getBoundingClientRect(), x1 = domRect.top, y1 = viewPortWidth - domRect.right, matrix = vrender_core_1.matrixAllocate.allocate(1, 0, 0, 1, 0, 0);
|
|
25
|
+
matrix.translate(x1, y1);
|
|
26
|
+
const centerX = rotateCenter - x1, centerY = rotateCenter - y1;
|
|
27
|
+
return matrix.translate(centerX, centerY), matrix.rotate(Math.PI / 2), matrix.translate(-centerX, -centerY),
|
|
28
|
+
this.matrix = matrix, matrix;
|
|
29
|
+
};
|
|
30
|
+
(0, vrender_core_1.registerGlobalEventTransformer)(vrender_core_1.vglobal, this._vchart.getContainer(), getMatrix, getRect, vrender_core_1.transformPointForCanvas),
|
|
31
|
+
(0, vrender_core_1.registerWindowEventTransformer)(this._vchart.getStage().window, this._vchart.getContainer(), getMatrix, getRect, vrender_core_1.transformPointForCanvas),
|
|
32
|
+
this.vglobal_mapToCanvasPoint = vrender_core_1.vglobal.mapToCanvasPoint, vrender_core_1.vglobal.mapToCanvasPoint = vrender_core_1.mapToCanvasPointForCanvas;
|
|
33
|
+
}, this.cancelTransform = rotateDom => {
|
|
34
|
+
this.rotateDegree = 0, rotateDom.style.transform = "none", rotateDom.style.transformOrigin = "none";
|
|
35
|
+
const domRect = this._vchart.getContainer().getBoundingClientRect(), x1 = domRect.left, y1 = domRect.top, x2 = domRect.right, y2 = domRect.bottom, getRect = () => ({
|
|
36
|
+
x1: x1,
|
|
37
|
+
y1: y1,
|
|
38
|
+
x2: x2,
|
|
39
|
+
y2: y2
|
|
40
|
+
}), getMatrix = () => {
|
|
41
|
+
const matrix = vrender_core_1.matrixAllocate.allocate(1, 0, 0, 1, 0, 0);
|
|
42
|
+
return matrix.translate(x1, y1), matrix;
|
|
43
|
+
};
|
|
44
|
+
(0, vrender_core_1.registerGlobalEventTransformer)(vrender_core_1.vglobal, this._vchart.getContainer(), getMatrix, getRect, vrender_core_1.transformPointForCanvas),
|
|
45
|
+
(0, vrender_core_1.registerWindowEventTransformer)(this._vchart.getStage().window, this._vchart.getContainer(), getMatrix, getRect, vrender_core_1.transformPointForCanvas),
|
|
46
|
+
vrender_core_1.vglobal.mapToCanvasPoint = this.vglobal_mapToCanvasPoint;
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
onInit(service) {
|
|
50
|
+
const {globalInstance: vchart} = service;
|
|
51
|
+
vchart && (this._vchart = vchart, vchart.rotate90WithTransform = this.rotate90WithTransform,
|
|
52
|
+
vchart.cancelTransform = this.cancelTransform);
|
|
53
|
+
}
|
|
54
|
+
release() {
|
|
55
|
+
this._vchart = null, this.vglobal_mapToCanvasPoint = null, this.matrix = null, super.release();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
exports.RotatePlugin = RotatePlugin, RotatePlugin.pluginType = "vchart", RotatePlugin.specKey = "rotate",
|
|
60
|
+
RotatePlugin.type = "rotatePlugin";
|
|
61
|
+
|
|
62
|
+
const registerRotatePlugin = () => {
|
|
63
|
+
(0, register_1.registerVChartPlugin)(RotatePlugin);
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
exports.registerRotatePlugin = registerRotatePlugin;
|
|
67
|
+
//# sourceMappingURL=rotate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/plugin/vchart/rotate/rotate.ts"],"names":[],"mappings":"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","file":"rotate.js","sourcesContent":["import type { IAABBBounds, Matrix } from '@visactor/vutils';\nimport { BasePlugin } from '../../base/base-plugin';\nimport type { IVChartPlugin, IVChartPluginService } from '../interface';\nimport { registerVChartPlugin } from '../register';\nimport type { IVChart } from '../../../core/interface';\nimport {\n matrixAllocate,\n transformPointForCanvas,\n mapToCanvasPointForCanvas,\n registerGlobalEventTransformer,\n registerWindowEventTransformer,\n vglobal\n} from '@visactor/vrender-core';\n\nexport class RotatePlugin extends BasePlugin implements IVChartPlugin {\n static readonly pluginType: 'vchart' = 'vchart';\n\n static readonly specKey = 'rotate';\n\n static readonly type: string = 'rotatePlugin';\n readonly type: string = 'rotatePlugin';\n\n private rotateDegree: number;\n private matrix: Matrix;\n private vglobal_mapToCanvasPoint: any; // 保存vrender中vglobal的mapToCanvasPoint原方法\n private _vchart: IVChart;\n\n constructor() {\n super(RotatePlugin.type);\n }\n\n onInit(service: IVChartPluginService) {\n const { globalInstance: vchart } = service;\n if (!vchart) {\n return;\n }\n this._vchart = vchart;\n //将函数rotate90WithTransform绑定到table实例上,一般情况下插件不需要将api绑定到table实例上,可以直接自身实现某个api功能\n vchart.rotate90WithTransform = this.rotate90WithTransform;\n vchart.cancelTransform = this.cancelTransform;\n }\n\n rotate90WithTransform = (rotateDom: HTMLElement) => {\n this.rotateDegree = 90;\n const rotateCenter =\n rotateDom.clientWidth < rotateDom.clientHeight\n ? Math.max(rotateDom.clientWidth, rotateDom.clientHeight) / 2\n : Math.min(rotateDom.clientWidth, rotateDom.clientHeight) / 2;\n const domRect = this._vchart.getContainer().getBoundingClientRect();\n const x1 = domRect.left;\n const y1 = domRect.top;\n const x2 = domRect.right;\n const y2 = domRect.bottom;\n\n rotateDom.style.transform = 'rotate(90deg)';\n rotateDom.style.transformOrigin = `${rotateCenter}px ${rotateCenter}px`;\n const getRect = () => {\n return {\n x1,\n y1,\n x2,\n y2\n } as IAABBBounds;\n };\n // 获取视口尺寸的通用方法\n const getViewportDimensions = () => {\n // 浏览器环境\n if (typeof window !== 'undefined') {\n return {\n width: window.innerWidth || document.documentElement.clientWidth,\n height: window.innerHeight || document.documentElement.clientHeight\n };\n }\n // 如果有 vglobal 上的方法可以使用\n if (vglobal && 'getViewportSize' in vglobal && vglobal.getViewportSize) {\n // @ts-ignore\n return vglobal.getViewportSize();\n }\n // 默认使用容器的尺寸\n return rotateDom.getBoundingClientRect();\n };\n\n const getMatrix = () => {\n const viewPortWidth = getViewportDimensions().width; //获取整个视口的尺寸\n const domRect = this._vchart.getContainer().getBoundingClientRect(); //TODO 这个地方应该获取窗口的宽高 最好能从vglobal上直接获取\n const x1 = domRect.top;\n const y1 = viewPortWidth - domRect.right;\n\n const matrix = matrixAllocate.allocate(1, 0, 0, 1, 0, 0);\n matrix.translate(x1, y1);\n const centerX = rotateCenter - x1;\n const centerY = rotateCenter - y1;\n matrix.translate(centerX, centerY);\n matrix.rotate(Math.PI / 2);\n matrix.translate(-centerX, -centerY);\n this.matrix = matrix;\n return matrix;\n };\n registerGlobalEventTransformer(vglobal, this._vchart.getContainer(), getMatrix, getRect, transformPointForCanvas);\n registerWindowEventTransformer(\n this._vchart.getStage().window,\n this._vchart.getContainer(),\n getMatrix,\n getRect,\n transformPointForCanvas\n );\n this.vglobal_mapToCanvasPoint = vglobal.mapToCanvasPoint;\n vglobal.mapToCanvasPoint = mapToCanvasPointForCanvas;\n //transformPointForCanvas和mapToCanvasPointForCanvas时相对应的\n //具体逻辑在 VRender/packages/vrender-core/src/common/event-transformer.ts中\n // 可以自定义这两个函数 来修改事件属性,transformPointForCanvas中将坐标转换后存放了_canvasX _canvasY,mapToCanvasPointForCanvas中加以利用\n // 在VTable的touch文件中,利用到了_canvasX _canvasY 所以如果自定义上面两个函数也需提供_canvasX _canvasY\n };\n cancelTransform = (rotateDom: HTMLElement) => {\n this.rotateDegree = 0;\n rotateDom.style.transform = 'none';\n rotateDom.style.transformOrigin = 'none';\n const domRect = this._vchart.getContainer().getBoundingClientRect();\n const x1 = domRect.left;\n const y1 = domRect.top;\n const x2 = domRect.right;\n const y2 = domRect.bottom;\n\n const getRect = () => {\n return {\n x1,\n y1,\n x2,\n y2\n } as IAABBBounds;\n };\n const getMatrix = () => {\n const matrix = matrixAllocate.allocate(1, 0, 0, 1, 0, 0);\n matrix.translate(x1, y1);\n return matrix;\n };\n registerGlobalEventTransformer(vglobal, this._vchart.getContainer(), getMatrix, getRect, transformPointForCanvas);\n registerWindowEventTransformer(\n this._vchart.getStage().window,\n this._vchart.getContainer(),\n getMatrix,\n getRect,\n transformPointForCanvas\n );\n vglobal.mapToCanvasPoint = this.vglobal_mapToCanvasPoint;\n };\n\n release() {\n this._vchart = null;\n this.vglobal_mapToCanvasPoint = null;\n this.matrix = null;\n super.release();\n }\n}\n\nexport const registerRotatePlugin = () => {\n registerVChartPlugin(RotatePlugin);\n};\n"]}
|
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: !0
|
|
5
5
|
}), exports.BaseWordCloudSeries = void 0;
|
|
6
6
|
|
|
7
|
-
const vutils_1 = require("@visactor/vutils"), vutils_2 = require("@visactor/vutils"), data_1 = require("../../constant/data"), attribute_1 = require("../../constant/attribute"), env_1 = require("../../util/env"), config_1 = require("./config"), utils_1 = require("../../animation/utils"), word_cloud_1 = require("../../constant/word-cloud"), base_series_1 = require("../base/base-series"), color_ordinal_scale_1 = require("../../scale/color-ordinal-scale"), constant_1 = require("./constant"), factory_1 = require("../../core/factory"), vscale_1 = require("@visactor/vscale"), vrender_core_1 = require("@visactor/vrender-core"), word_cloud_2 = require("../../theme/builtin/common/series/word-cloud"), layout_1 = require("../../constant/layout");
|
|
7
|
+
const vutils_1 = require("@visactor/vutils"), vutils_2 = require("@visactor/vutils"), data_1 = require("../../constant/data"), attribute_1 = require("../../constant/attribute"), env_1 = require("../../util/env"), config_1 = require("./config"), utils_1 = require("../../animation/utils"), word_cloud_1 = require("../../constant/word-cloud"), base_series_1 = require("../base/base-series"), color_ordinal_scale_1 = require("../../scale/color-ordinal-scale"), constant_1 = require("./constant"), factory_1 = require("../../core/factory"), vscale_1 = require("@visactor/vscale"), vrender_core_1 = require("@visactor/vrender-core"), word_cloud_2 = require("../../theme/builtin/common/series/word-cloud"), layout_1 = require("../../constant/layout"), core_1 = require("../../core");
|
|
8
8
|
|
|
9
9
|
class BaseWordCloudSeries extends base_series_1.BaseSeries {
|
|
10
10
|
constructor() {
|
|
@@ -152,6 +152,20 @@ class BaseWordCloudSeries extends base_series_1.BaseSeries {
|
|
|
152
152
|
fontFamily: this._option.getTheme("fontFamily")
|
|
153
153
|
}, this._maskShape) : this._maskShape,
|
|
154
154
|
onUpdateMaskCanvas: this.handleMaskCanvasUpdate,
|
|
155
|
+
onLayoutFinished: () => {
|
|
156
|
+
const afterWordcloudShapeDraw = () => {
|
|
157
|
+
var _a, _b, _c, _d;
|
|
158
|
+
this._option.globalInstance.getStage().hooks.afterRender.taps = this._option.globalInstance.getStage().hooks.afterRender.taps.filter((tap => tap.fn !== afterWordcloudShapeDraw)),
|
|
159
|
+
null === (_b = (_a = this._option).dispatchEvent) || void 0 === _b || _b.call(_a, core_1.ChartEvent.afterWordcloudShapeDraw, {
|
|
160
|
+
instance: this._option.globalInstance
|
|
161
|
+
}), null === (_d = null === (_c = this._option.globalInstance.getChart().getOption().performanceHook) || void 0 === _c ? void 0 : _c.afterWordcloudShapeDraw) || void 0 === _d || _d.call(_c, this._option.globalInstance);
|
|
162
|
+
};
|
|
163
|
+
this._option.globalInstance.getStage().hooks.afterRender.taps.push({
|
|
164
|
+
type: "sync",
|
|
165
|
+
name: "afterWordcloudShapeDraw",
|
|
166
|
+
fn: afterWordcloudShapeDraw
|
|
167
|
+
});
|
|
168
|
+
},
|
|
155
169
|
dataIndexKey: data_1.DEFAULT_DATA_KEY,
|
|
156
170
|
text: wordSpec.formatMethod ? datum => wordSpec.formatMethod(datum) : {
|
|
157
171
|
field: this._textField
|