@visactor/vchart 1.13.11-alpha.2 → 1.13.12
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 +376 -184
- package/build/index.js +376 -184
- package/build/index.min.js +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/cjs/chart/histogram/base/histogram-base-transformer.js +1 -1
- package/cjs/chart/histogram/base/histogram-base-transformer.js.map +1 -1
- package/cjs/component/brush/brush.d.ts +1 -1
- package/cjs/component/brush/brush.js +18 -15
- package/cjs/component/brush/brush.js.map +1 -1
- package/cjs/component/crosshair/base.js +4 -3
- package/cjs/component/crosshair/base.js.map +1 -1
- package/cjs/component/crosshair/cartesian.js +3 -2
- package/cjs/component/crosshair/cartesian.js.map +1 -1
- package/cjs/component/crosshair/interface/common.d.ts +3 -1
- package/cjs/component/crosshair/interface/common.js.map +1 -1
- package/cjs/component/crosshair/interface/spec.d.ts +1 -0
- package/cjs/component/crosshair/interface/spec.js.map +1 -1
- package/cjs/component/crosshair/interface/theme.d.ts +2 -0
- package/cjs/component/crosshair/interface/theme.js.map +1 -1
- package/cjs/component/crosshair/utils/cartesian.js +15 -13
- package/cjs/component/crosshair/utils/cartesian.js.map +1 -1
- package/cjs/component/crosshair/utils/common.js +9 -5
- package/cjs/component/crosshair/utils/common.js.map +1 -1
- package/cjs/component/data-zoom/data-filter-base-component.js +7 -6
- package/cjs/component/data-zoom/data-filter-base-component.js.map +1 -1
- package/cjs/component/data-zoom/util.d.ts +1 -0
- package/cjs/component/data-zoom/util.js +13 -10
- package/cjs/component/data-zoom/util.js.map +1 -1
- package/cjs/component/marker/utils.js +14 -9
- package/cjs/component/marker/utils.js.map +1 -1
- package/cjs/component/tooltip/interface/theme.d.ts +3 -0
- package/cjs/component/tooltip/interface/theme.js.map +1 -1
- package/cjs/component/tooltip/tooltip-transformer.js +3 -1
- package/cjs/component/tooltip/tooltip-transformer.js.map +1 -1
- package/cjs/core/expression-function.js +1 -2
- package/cjs/core/index.d.ts +1 -1
- package/cjs/core/index.js +3 -2
- package/cjs/core/index.js.map +1 -1
- package/cjs/plugin/components/tooltip-handler/dom-tooltip-handler.js +2 -3
- package/cjs/plugin/components/tooltip-handler/dom-tooltip-handler.js.map +1 -1
- package/cjs/series/bar/bar.d.ts +3 -0
- package/cjs/series/bar/bar.js +28 -7
- package/cjs/series/bar/bar.js.map +1 -1
- package/cjs/series/bar/interface.d.ts +1 -0
- package/cjs/series/bar/interface.js.map +1 -1
- package/esm/chart/histogram/base/histogram-base-transformer.js +1 -1
- package/esm/chart/histogram/base/histogram-base-transformer.js.map +1 -1
- package/esm/component/brush/brush.d.ts +1 -1
- package/esm/component/brush/brush.js +18 -15
- package/esm/component/brush/brush.js.map +1 -1
- package/esm/component/crosshair/base.js +4 -3
- package/esm/component/crosshair/base.js.map +1 -1
- package/esm/component/crosshair/cartesian.js +3 -2
- package/esm/component/crosshair/cartesian.js.map +1 -1
- package/esm/component/crosshair/interface/common.d.ts +3 -1
- package/esm/component/crosshair/interface/common.js.map +1 -1
- package/esm/component/crosshair/interface/spec.d.ts +1 -0
- package/esm/component/crosshair/interface/spec.js.map +1 -1
- package/esm/component/crosshair/interface/theme.d.ts +2 -0
- package/esm/component/crosshair/interface/theme.js.map +1 -1
- package/esm/component/crosshair/utils/cartesian.js +15 -13
- package/esm/component/crosshair/utils/cartesian.js.map +1 -1
- package/esm/component/crosshair/utils/common.js +8 -4
- package/esm/component/crosshair/utils/common.js.map +1 -1
- package/esm/component/data-zoom/data-filter-base-component.js +6 -4
- package/esm/component/data-zoom/data-filter-base-component.js.map +1 -1
- package/esm/component/data-zoom/util.d.ts +1 -0
- package/esm/component/data-zoom/util.js +13 -9
- package/esm/component/data-zoom/util.js.map +1 -1
- package/esm/component/marker/utils.js +15 -8
- package/esm/component/marker/utils.js.map +1 -1
- package/esm/component/tooltip/interface/theme.d.ts +3 -0
- package/esm/component/tooltip/interface/theme.js.map +1 -1
- package/esm/component/tooltip/tooltip-transformer.js +3 -1
- package/esm/component/tooltip/tooltip-transformer.js.map +1 -1
- package/esm/core/expression-function.js +1 -2
- package/esm/core/index.d.ts +1 -1
- package/esm/core/index.js +3 -2
- package/esm/core/index.js.map +1 -1
- package/esm/plugin/components/tooltip-handler/dom-tooltip-handler.js +2 -3
- package/esm/plugin/components/tooltip-handler/dom-tooltip-handler.js.map +1 -1
- package/esm/series/bar/bar.d.ts +3 -0
- package/esm/series/bar/bar.js +26 -7
- package/esm/series/bar/bar.js.map +1 -1
- package/esm/series/bar/interface.d.ts +1 -0
- package/esm/series/bar/interface.js.map +1 -1
- package/package.json +13 -13
|
@@ -2,7 +2,7 @@ import type { Dict } from '@visactor/vutils';
|
|
|
2
2
|
import type { IPadding, StringOrNumber } from '../../../typings';
|
|
3
3
|
import type { IAxis } from '../../axis/interface';
|
|
4
4
|
import type { LineCrosshair, RectCrosshair, Tag } from '@visactor/vrender-components';
|
|
5
|
-
import type { IGroup, IRichTextGraphicAttribute, ITextGraphicAttribute } from '@visactor/vrender-core';
|
|
5
|
+
import type { IGroup, IRichTextGraphicAttribute, IText, ITextGraphicAttribute } from '@visactor/vrender-core';
|
|
6
6
|
export type AxisCurrentValueMap = Map<number, {
|
|
7
7
|
datum: StringOrNumber;
|
|
8
8
|
axis: IAxis;
|
|
@@ -31,6 +31,7 @@ export interface IHair {
|
|
|
31
31
|
padding?: IPadding | number | number[];
|
|
32
32
|
panel?: Dict<any>;
|
|
33
33
|
zIndex?: number;
|
|
34
|
+
syncAxisLabelAngle?: boolean;
|
|
34
35
|
};
|
|
35
36
|
smooth?: boolean;
|
|
36
37
|
}
|
|
@@ -56,6 +57,7 @@ export interface ICrosshairInfo {
|
|
|
56
57
|
visible: boolean;
|
|
57
58
|
_isCache?: boolean;
|
|
58
59
|
axis: IAxis;
|
|
60
|
+
axisLabel?: IText;
|
|
59
61
|
sides?: number;
|
|
60
62
|
}
|
|
61
63
|
export interface CrossHairStateItem {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/component/crosshair/interface/common.ts"],"names":[],"mappings":"","file":"common.js","sourcesContent":["import type { Dict } from '@visactor/vutils';\nimport type { IPadding, StringOrNumber } from '../../../typings';\nimport type { IAxis } from '../../axis/interface';\nimport type { LineCrosshair, RectCrosshair, Tag } from '@visactor/vrender-components';\nimport type { IGroup, IRichTextGraphicAttribute, ITextGraphicAttribute } from '@visactor/vrender-core';\n\nexport type AxisCurrentValueMap = Map<\n number,\n {\n datum: StringOrNumber;\n axis: IAxis;\n [key: string]: any;\n }\n>;\n\nexport type IBound = { x1: number; y1: number; x2: number; y2: number };\nexport type IAxisInfo<T> = Map<number, IBound & { axis: T }>;\n\nexport interface IHair {\n /** 是否展示 crosshair 辅助图形 */\n visible: boolean;\n /** 类型 */\n type: 'rect' | 'line';\n /** 样式 */\n style?: Dict<any>;\n label?: {\n /** 文本是否可见 */\n visible: boolean;\n /** 格式化函数 */\n formatMethod?: (text: StringOrNumber | string[], position: string) => string | string[];\n /**\n * 格式化模板\n * @description 可以通过类似 `{value:.2f}%` 的形式对指定数据字段进行格式化\n * @since 1.10.0\n */\n formatter?: string | string[];\n /** 文本样式 */\n textStyle?: Dict<any>;\n minWidth?: number;\n maxWidth?: number;\n padding?: IPadding | number | number[];\n panel?: Dict<any>;\n zIndex?: number;\n };\n /**\n * 极坐标系样式\n */\n smooth?: boolean;\n}\n\nexport interface IHairRadius extends IHair {\n smooth?: boolean;\n}\n\nexport interface ICrosshairLabelInfo {\n visible: boolean;\n text: StringOrNumber;\n dx?: number;\n dy?: number;\n x?: number;\n y?: number;\n offset?: number;\n defaultFormatter?: (value: StringOrNumber) => StringOrNumber;\n}\n\nexport interface ICrosshairInfo {\n /**\n * croosshair 的大小,xField 对应了crosshair图形的高度,yField 对应了crosshair图形的宽度\n */\n coordRange: [number, number];\n sizeRange: [number, number];\n coord: number;\n labels: Record<string, ICrosshairLabelInfo>;\n labelsTextStyle?: Record<string, Partial<ITextGraphicAttribute> | Partial<IRichTextGraphicAttribute>>;\n visible: boolean;\n _isCache?: boolean;\n axis: IAxis;\n /**\n * 半径轴对应的crosshair,当crosshair类型为多边形的时候,多边形的边数\n */\n sides?: number;\n}\n\nexport interface CrossHairStateItem {\n /**\n * 坐标对应的key,xField对应了'x',yField对应了'y'\n */\n coordKey: string;\n /**\n * 另一个轴对应的key,xField对应了'y',yField对应了'x'\n */\n anotherAxisKey: string;\n /**\n * 记录当前crosshair对应的轴组件和位置信息\n */\n currentValue: AxisCurrentValueMap;\n /**\n * crosshair组件对应的公共的图形属性配置\n */\n attributes?: IHair | undefined;\n /**\n * 记录当前crosshair的信息,用于crosshair组件的更新\n */\n cacheInfo?: ICrosshairInfo | undefined;\n /**\n * crosshair组件的实例\n */\n crosshairComp?: LineCrosshair | RectCrosshair | IGroup;\n /**\n * crosshair组件的文本实例\n */\n labelsComp?: Record<string, Tag>;\n /**\n * 当前轴对应的band大小\n */\n bandSize?: number;\n /**\n * 当前轴对应的band偏移量\n */\n offsetSize?: number;\n}\n\nexport type CrossHairStateByField = Record<string, CrossHairStateItem>;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/component/crosshair/interface/common.ts"],"names":[],"mappings":"","file":"common.js","sourcesContent":["import type { Dict } from '@visactor/vutils';\nimport type { IPadding, StringOrNumber } from '../../../typings';\nimport type { IAxis } from '../../axis/interface';\nimport type { LineCrosshair, RectCrosshair, Tag } from '@visactor/vrender-components';\nimport type { IGroup, IRichTextGraphicAttribute, IText, ITextGraphicAttribute } from '@visactor/vrender-core';\n\nexport type AxisCurrentValueMap = Map<\n number,\n {\n datum: StringOrNumber;\n axis: IAxis;\n [key: string]: any;\n }\n>;\n\nexport type IBound = { x1: number; y1: number; x2: number; y2: number };\nexport type IAxisInfo<T> = Map<number, IBound & { axis: T }>;\n\nexport interface IHair {\n /** 是否展示 crosshair 辅助图形 */\n visible: boolean;\n /** 类型 */\n type: 'rect' | 'line';\n /** 样式 */\n style?: Dict<any>;\n label?: {\n /** 文本是否可见 */\n visible: boolean;\n /** 格式化函数 */\n formatMethod?: (text: StringOrNumber | string[], position: string) => string | string[];\n /**\n * 格式化模板\n * @description 可以通过类似 `{value:.2f}%` 的形式对指定数据字段进行格式化\n * @since 1.10.0\n */\n formatter?: string | string[];\n /** 文本样式 */\n textStyle?: Dict<any>;\n minWidth?: number;\n maxWidth?: number;\n padding?: IPadding | number | number[];\n panel?: Dict<any>;\n zIndex?: number;\n /**\n * 文本是否跟随轴标签的角度旋转\n * default: false\n * @since 1.13.12\n */\n syncAxisLabelAngle?: boolean;\n };\n /**\n * 极坐标系样式\n */\n smooth?: boolean;\n}\n\nexport interface IHairRadius extends IHair {\n smooth?: boolean;\n}\n\nexport interface ICrosshairLabelInfo {\n visible: boolean;\n text: StringOrNumber;\n dx?: number;\n dy?: number;\n x?: number;\n y?: number;\n offset?: number;\n defaultFormatter?: (value: StringOrNumber) => StringOrNumber;\n}\n\nexport interface ICrosshairInfo {\n /**\n * croosshair 的大小,xField 对应了crosshair图形的高度,yField 对应了crosshair图形的宽度\n */\n coordRange: [number, number];\n sizeRange: [number, number];\n coord: number;\n labels: Record<string, ICrosshairLabelInfo>;\n labelsTextStyle?: Record<string, Partial<ITextGraphicAttribute> | Partial<IRichTextGraphicAttribute>>;\n visible: boolean;\n _isCache?: boolean;\n axis: IAxis;\n axisLabel?: IText;\n /**\n * 半径轴对应的crosshair,当crosshair类型为多边形的时候,多边形的边数\n */\n sides?: number;\n}\n\nexport interface CrossHairStateItem {\n /**\n * 坐标对应的key,xField对应了'x',yField对应了'y'\n */\n coordKey: string;\n /**\n * 另一个轴对应的key,xField对应了'y',yField对应了'x'\n */\n anotherAxisKey: string;\n /**\n * 记录当前crosshair对应的轴组件和位置信息\n */\n currentValue: AxisCurrentValueMap;\n /**\n * crosshair组件对应的公共的图形属性配置\n */\n attributes?: IHair | undefined;\n /**\n * 记录当前crosshair的信息,用于crosshair组件的更新\n */\n cacheInfo?: ICrosshairInfo | undefined;\n /**\n * crosshair组件的实例\n */\n crosshairComp?: LineCrosshair | RectCrosshair | IGroup;\n /**\n * crosshair组件的文本实例\n */\n labelsComp?: Record<string, Tag>;\n /**\n * 当前轴对应的band大小\n */\n bandSize?: number;\n /**\n * 当前轴对应的band偏移量\n */\n offsetSize?: number;\n}\n\nexport type CrossHairStateByField = Record<string, CrossHairStateItem>;\n"]}
|
|
@@ -65,6 +65,7 @@ export interface ICrosshairLabelSpec {
|
|
|
65
65
|
formatter?: string | string[];
|
|
66
66
|
style?: Partial<ITextMarkSpec>;
|
|
67
67
|
labelBackground?: ICrosshairLabelBackgroundSpec;
|
|
68
|
+
syncAxisLabelAngle?: boolean;
|
|
68
69
|
}
|
|
69
70
|
export interface ICrosshairLabelBackgroundSpec {
|
|
70
71
|
visible?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/component/crosshair/interface/spec.ts"],"names":[],"mappings":"","file":"spec.js","sourcesContent":["import type { ITooltipActiveTypeAsKeys } from '../../tooltip/interface/common';\nimport type { IPadding, StringOrNumber, ILineMarkSpec, IRectMarkSpec, ITextMarkSpec } from '../../../typings';\nimport type { IAxis } from '../../axis/interface';\nimport type { IComponentSpec } from '../../base/interface';\nimport type { IComponent } from '../../interface';\n\nexport interface ICrossHair extends IComponent {\n clearAxisValue: () => void;\n setAxisValue: (v: StringOrNumber, axis: IAxis) => void;\n layoutByValue: (enableRemain?: boolean) => void;\n hideCrosshair: () => any;\n showCrosshair: (dimInfo: { axis: IAxis; value: string | number }[]) => any;\n}\n\nexport type CrossHairTrigger = 'click' | 'hover' | ['click', 'hover'];\n\nexport interface ICommonCrosshairSpec extends IComponentSpec {\n /**\n * 是否和tooltip保持同步,默认为false\n * tooltip出现的时候crosshair出现;tooltip隐藏的时候crsshair隐藏;\n * 默认只要有tooltip显示,都会显示crosshair\n * 也可以通过设置 followTooltip.dimension 为 `false` 来实现显示dimension tooltip的时候不显示crosshair\n * 设置 followTooltip.mark 为 `false` 来实现显示mark tooltip的时候不显示crosshair\n * 设置 followTooltip.group 为 `false` 来实现显示group tooltip的时候不显示crosshair\n *\n * @since 1.11.1\n */\n followTooltip?: boolean | Partial<ITooltipActiveTypeAsKeys<boolean, boolean, boolean>>;\n /**\n * 是否可以通过 点击 固定住一组 crosshair,也可以同时触发。\n * @default 'hover'\n */\n trigger?: CrossHairTrigger;\n /**\n * 隐藏crosshair的触发方式(目前仅支持和trigger一致的设置以及none)\n */\n triggerOff?: CrossHairTrigger | 'none' | number;\n /**\n * 点击后锁定,只有点击才可以更新位置或者解锁\n *\n * @since 1.9.0\n */\n lockAfterClick?: boolean;\n /**\n * crosshair 文本的显示层级\n */\n labelZIndex?: number;\n /**\n * crosshair 辅助图形的显示层级\n */\n gridZIndex?: number;\n}\n\n/**\n * 笛卡尔坐标系下的 crosshair 配置\n */\nexport interface ICartesianCrosshairSpec extends ICommonCrosshairSpec {\n /**\n * 笛卡尔坐标系下 x 轴上 crosshair 配置\n */\n xField?: ICrosshairCategoryFieldSpec;\n /**\n * 笛卡尔坐标系下 y 轴上 crosshair 配置\n */\n yField?: ICrosshairCategoryFieldSpec;\n}\n\n/**\n * 极坐标系下的 crosshair 配置\n */\nexport interface IPolarCrosshairSpec extends ICommonCrosshairSpec {\n /**\n * 极坐标系下 categoryField 字段对应轴上的 crosshair 配置\n */\n categoryField?: ICrosshairCategoryFieldSpec;\n /**\n * 极坐标系下 valueField 字段对应轴上的 crosshair 配置\n */\n valueField?: ICrosshairValueFieldSpec;\n}\nexport interface ICrosshairCategoryFieldSpec extends ICrosshairDataBindSpec {\n /**\n * 是否可见\n */\n visible: boolean;\n /**\n * crosshair 辅助图形配置\n */\n line?: ICrosshairLineSpec | Omit<ICrosshairRectSpec, 'width'>;\n /**\n * crosshair 文本配置\n */\n label?: ICrosshairLabelSpec;\n}\n\nexport interface ICrosshairValueFieldSpec extends ICrosshairDataBindSpec {\n /**\n * 是否可见\n */\n visible: boolean;\n /**\n * crosshair 辅助图形配置\n */\n line?: ICrosshairLineSpec;\n /**\n * crosshair 文本配置\n */\n label?: ICrosshairLabelSpec;\n}\n\nexport type ICrosshairLineStyle = Pick<\n ILineMarkSpec,\n 'stroke' | 'strokeOpacity' | 'opacity' | 'lineDash' | 'lineWidth'\n>;\nexport type ICrosshairRectStyle = ICrosshairLineStyle & Pick<IRectMarkSpec, 'fill' | 'fillOpacity' | 'cornerRadius'>;\n\nexport interface ICrosshairLineSpec {\n /**\n * 是否显示辅助图形\n */\n visible?: boolean;\n /**\n * 辅助图形的类型设置为'line'\n */\n type?: 'line';\n /**\n * 线宽\n * @default 2\n */\n width?: number;\n /**\n * 极坐标系下是否平滑\n */\n smooth?: boolean;\n /**\n * 辅助图形的样式配置\n */\n style?: ICrosshairLineStyle;\n}\n\nexport type ICrosshairRectWidthCallback = (axisSize: { width: number; height: number }, axis: IAxis) => number;\n\nexport interface ICrosshairRectSpec {\n /**\n * 是否显示辅助图形\n */\n visible?: boolean;\n /**\n * 辅助图形的类型设置为'rect'\n */\n type?: 'rect';\n /**\n * 字符串xx%表示此处是内容区间的百分比,数字表示宽度像素,\n * 仅支持笛卡尔坐标系下的 crosshair 配置\n * @default '100%''\n */\n width?: number | string | ICrosshairRectWidthCallback;\n /**\n * 辅助图形的样式配置\n */\n style?: ICrosshairRectStyle;\n}\n\nexport interface ICrosshairLabelSpec {\n /**\n * 十字准星辅助标签是否展示\n */\n visible?: boolean;\n /**\n * label 文本格式化方法\n * @param text\n * @returns\n */\n formatMethod?: (text: StringOrNumber | string[]) => string | string[];\n /**\n * 格式化模板\n * @description 可以通过类似 `{value:.2f}%` 的形式对指定数据字段进行格式化\n * @since 1.10.0\n */\n formatter?: string | string[];\n /**\n * 文本样式配置\n */\n style?: Partial<ITextMarkSpec>;\n /**\n * 文本背景相关配置\n */\n labelBackground?: ICrosshairLabelBackgroundSpec;\n}\n\nexport interface ICrosshairLabelBackgroundSpec {\n /**\n * 是否显示背景,默认为 true\n */\n visible?: boolean;\n /**\n * 最小宽度,像素值\n * @default 30\n */\n minWidth?: number;\n /**\n * 最大宽度,像素值。当文字超过最大宽度时,会自动省略。\n */\n maxWidth?: number;\n /**\n * 内部边距\n */\n padding?: IPadding | number | number[];\n /**\n * 标签背景的样式配置\n */\n style?: Partial<IRectMarkSpec>;\n}\n\nexport interface ICrosshairDataBindSpec {\n /**\n * 声明 crosshair 绑定的轴索引,如果没有声明,则会默认绑定所有同 crosshair 位置相对应的轴。\n */\n bindingAxesIndex?: number[];\n /**\n * crosshair 初始化显示信息,通过该配置可在图表绘制时默认展示 crosshair 组件。\n */\n defaultSelect?: {\n /**\n * 声明要显示数据的轴索引\n */\n axisIndex: number;\n /**\n * 声明显示的数据\n */\n datum: StringOrNumber;\n };\n}\n\nexport type ICrosshairSpec = ICartesianCrosshairSpec | IPolarCrosshairSpec;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/component/crosshair/interface/spec.ts"],"names":[],"mappings":"","file":"spec.js","sourcesContent":["import type { ITooltipActiveTypeAsKeys } from '../../tooltip/interface/common';\nimport type { IPadding, StringOrNumber, ILineMarkSpec, IRectMarkSpec, ITextMarkSpec } from '../../../typings';\nimport type { IAxis } from '../../axis/interface';\nimport type { IComponentSpec } from '../../base/interface';\nimport type { IComponent } from '../../interface';\n\nexport interface ICrossHair extends IComponent {\n clearAxisValue: () => void;\n setAxisValue: (v: StringOrNumber, axis: IAxis) => void;\n layoutByValue: (enableRemain?: boolean) => void;\n hideCrosshair: () => any;\n showCrosshair: (dimInfo: { axis: IAxis; value: string | number }[]) => any;\n}\n\nexport type CrossHairTrigger = 'click' | 'hover' | ['click', 'hover'];\n\nexport interface ICommonCrosshairSpec extends IComponentSpec {\n /**\n * 是否和tooltip保持同步,默认为false\n * tooltip出现的时候crosshair出现;tooltip隐藏的时候crsshair隐藏;\n * 默认只要有tooltip显示,都会显示crosshair\n * 也可以通过设置 followTooltip.dimension 为 `false` 来实现显示dimension tooltip的时候不显示crosshair\n * 设置 followTooltip.mark 为 `false` 来实现显示mark tooltip的时候不显示crosshair\n * 设置 followTooltip.group 为 `false` 来实现显示group tooltip的时候不显示crosshair\n *\n * @since 1.11.1\n */\n followTooltip?: boolean | Partial<ITooltipActiveTypeAsKeys<boolean, boolean, boolean>>;\n /**\n * 是否可以通过 点击 固定住一组 crosshair,也可以同时触发。\n * @default 'hover'\n */\n trigger?: CrossHairTrigger;\n /**\n * 隐藏crosshair的触发方式(目前仅支持和trigger一致的设置以及none)\n */\n triggerOff?: CrossHairTrigger | 'none' | number;\n /**\n * 点击后锁定,只有点击才可以更新位置或者解锁\n *\n * @since 1.9.0\n */\n lockAfterClick?: boolean;\n /**\n * crosshair 文本的显示层级\n */\n labelZIndex?: number;\n /**\n * crosshair 辅助图形的显示层级\n */\n gridZIndex?: number;\n}\n\n/**\n * 笛卡尔坐标系下的 crosshair 配置\n */\nexport interface ICartesianCrosshairSpec extends ICommonCrosshairSpec {\n /**\n * 笛卡尔坐标系下 x 轴上 crosshair 配置\n */\n xField?: ICrosshairCategoryFieldSpec;\n /**\n * 笛卡尔坐标系下 y 轴上 crosshair 配置\n */\n yField?: ICrosshairCategoryFieldSpec;\n}\n\n/**\n * 极坐标系下的 crosshair 配置\n */\nexport interface IPolarCrosshairSpec extends ICommonCrosshairSpec {\n /**\n * 极坐标系下 categoryField 字段对应轴上的 crosshair 配置\n */\n categoryField?: ICrosshairCategoryFieldSpec;\n /**\n * 极坐标系下 valueField 字段对应轴上的 crosshair 配置\n */\n valueField?: ICrosshairValueFieldSpec;\n}\nexport interface ICrosshairCategoryFieldSpec extends ICrosshairDataBindSpec {\n /**\n * 是否可见\n */\n visible: boolean;\n /**\n * crosshair 辅助图形配置\n */\n line?: ICrosshairLineSpec | Omit<ICrosshairRectSpec, 'width'>;\n /**\n * crosshair 文本配置\n */\n label?: ICrosshairLabelSpec;\n}\n\nexport interface ICrosshairValueFieldSpec extends ICrosshairDataBindSpec {\n /**\n * 是否可见\n */\n visible: boolean;\n /**\n * crosshair 辅助图形配置\n */\n line?: ICrosshairLineSpec;\n /**\n * crosshair 文本配置\n */\n label?: ICrosshairLabelSpec;\n}\n\nexport type ICrosshairLineStyle = Pick<\n ILineMarkSpec,\n 'stroke' | 'strokeOpacity' | 'opacity' | 'lineDash' | 'lineWidth'\n>;\nexport type ICrosshairRectStyle = ICrosshairLineStyle & Pick<IRectMarkSpec, 'fill' | 'fillOpacity' | 'cornerRadius'>;\n\nexport interface ICrosshairLineSpec {\n /**\n * 是否显示辅助图形\n */\n visible?: boolean;\n /**\n * 辅助图形的类型设置为'line'\n */\n type?: 'line';\n /**\n * 线宽\n * @default 2\n */\n width?: number;\n /**\n * 极坐标系下是否平滑\n */\n smooth?: boolean;\n /**\n * 辅助图形的样式配置\n */\n style?: ICrosshairLineStyle;\n}\n\nexport type ICrosshairRectWidthCallback = (axisSize: { width: number; height: number }, axis: IAxis) => number;\n\nexport interface ICrosshairRectSpec {\n /**\n * 是否显示辅助图形\n */\n visible?: boolean;\n /**\n * 辅助图形的类型设置为'rect'\n */\n type?: 'rect';\n /**\n * 字符串xx%表示此处是内容区间的百分比,数字表示宽度像素,\n * 仅支持笛卡尔坐标系下的 crosshair 配置\n * @default '100%''\n */\n width?: number | string | ICrosshairRectWidthCallback;\n /**\n * 辅助图形的样式配置\n */\n style?: ICrosshairRectStyle;\n}\n\nexport interface ICrosshairLabelSpec {\n /**\n * 十字准星辅助标签是否展示\n */\n visible?: boolean;\n /**\n * label 文本格式化方法\n * @param text\n * @returns\n */\n formatMethod?: (text: StringOrNumber | string[]) => string | string[];\n /**\n * 格式化模板\n * @description 可以通过类似 `{value:.2f}%` 的形式对指定数据字段进行格式化\n * @since 1.10.0\n */\n formatter?: string | string[];\n /**\n * 文本样式配置\n */\n style?: Partial<ITextMarkSpec>;\n /**\n * 文本背景相关配置\n */\n labelBackground?: ICrosshairLabelBackgroundSpec;\n /**\n * 文本是否跟随轴标签的角度旋转,目前只在直角坐标系下支持\n * @since 1.13.12\n */\n syncAxisLabelAngle?: boolean;\n}\n\nexport interface ICrosshairLabelBackgroundSpec {\n /**\n * 是否显示背景,默认为 true\n */\n visible?: boolean;\n /**\n * 最小宽度,像素值\n * @default 30\n */\n minWidth?: number;\n /**\n * 最大宽度,像素值。当文字超过最大宽度时,会自动省略。\n */\n maxWidth?: number;\n /**\n * 内部边距\n */\n padding?: IPadding | number | number[];\n /**\n * 标签背景的样式配置\n */\n style?: Partial<IRectMarkSpec>;\n}\n\nexport interface ICrosshairDataBindSpec {\n /**\n * 声明 crosshair 绑定的轴索引,如果没有声明,则会默认绑定所有同 crosshair 位置相对应的轴。\n */\n bindingAxesIndex?: number[];\n /**\n * crosshair 初始化显示信息,通过该配置可在图表绘制时默认展示 crosshair 组件。\n */\n defaultSelect?: {\n /**\n * 声明要显示数据的轴索引\n */\n axisIndex: number;\n /**\n * 声明显示的数据\n */\n datum: StringOrNumber;\n };\n}\n\nexport type ICrosshairSpec = ICartesianCrosshairSpec | IPolarCrosshairSpec;\n"]}
|
|
@@ -6,4 +6,6 @@ export interface ICrosshairTheme extends ICommonCrosshairSpec {
|
|
|
6
6
|
yField?: Partial<ICartesianCrosshairSpec['yField']>;
|
|
7
7
|
categoryField?: Partial<IPolarCrosshairSpec['categoryField']>;
|
|
8
8
|
valueField?: Partial<IPolarCrosshairSpec['valueField']>;
|
|
9
|
+
trigger?: ICommonCrosshairSpec['trigger'];
|
|
10
|
+
triggerOff?: ICommonCrosshairSpec['triggerOff'];
|
|
9
11
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/component/crosshair/interface/theme.ts"],"names":[],"mappings":"","file":"theme.js","sourcesContent":["import type {\n ICartesianCrosshairSpec,\n ICommonCrosshairSpec,\n ICrosshairCategoryFieldSpec,\n ICrosshairValueFieldSpec,\n IPolarCrosshairSpec\n} from './spec';\n\nexport interface ICrosshairTheme extends ICommonCrosshairSpec {\n /**\n * band 轴 crosshair 的公共配置\n * @since 1.3.0\n */\n bandField?: Partial<ICrosshairCategoryFieldSpec>;\n /**\n * linear 轴 crosshair 的公共配置\n * @since 1.3.0\n */\n linearField?: Partial<ICrosshairValueFieldSpec>;\n xField?: Partial<ICartesianCrosshairSpec['xField']>;\n yField?: Partial<ICartesianCrosshairSpec['yField']>;\n categoryField?: Partial<IPolarCrosshairSpec['categoryField']>;\n valueField?: Partial<IPolarCrosshairSpec['valueField']>;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/component/crosshair/interface/theme.ts"],"names":[],"mappings":"","file":"theme.js","sourcesContent":["import type {\n ICartesianCrosshairSpec,\n ICommonCrosshairSpec,\n ICrosshairCategoryFieldSpec,\n ICrosshairValueFieldSpec,\n IPolarCrosshairSpec\n} from './spec';\n\nexport interface ICrosshairTheme extends ICommonCrosshairSpec {\n /**\n * band 轴 crosshair 的公共配置\n * @since 1.3.0\n */\n bandField?: Partial<ICrosshairCategoryFieldSpec>;\n /**\n * linear 轴 crosshair 的公共配置\n * @since 1.3.0\n */\n linearField?: Partial<ICrosshairValueFieldSpec>;\n xField?: Partial<ICartesianCrosshairSpec['xField']>;\n yField?: Partial<ICartesianCrosshairSpec['yField']>;\n categoryField?: Partial<IPolarCrosshairSpec['categoryField']>;\n valueField?: Partial<IPolarCrosshairSpec['valueField']>;\n /**\n * crosshair trigger配置\n */\n trigger?: ICommonCrosshairSpec['trigger'];\n triggerOff?: ICommonCrosshairSpec['triggerOff'];\n}\n"]}
|
|
@@ -12,12 +12,13 @@ export const layoutByValue = (stateByField, series, layoutStartPoint, enableRema
|
|
|
12
12
|
x: 0,
|
|
13
13
|
y: 0
|
|
14
14
|
}), Object.keys(stateByField).forEach((field => {
|
|
15
|
+
var _a, _b, _c, _d, _e;
|
|
15
16
|
const {currentValue: currentValue, cacheInfo: cacheInfo, labelsComp: labelsComp, attributes: attributes, coordKey: coordKey} = stateByField[field];
|
|
16
|
-
let axis = null, coord = 0;
|
|
17
|
+
let axis = null, coord = 0, axisLabel = null;
|
|
17
18
|
if (currentValue.size) {
|
|
18
19
|
const item = Array.from(currentValue.values())[0];
|
|
19
20
|
coord = item.axis.getScale().scale(item.datum) + item.axis.getLayoutStartPoint()[coordKey] - layoutStartPoint[coordKey],
|
|
20
|
-
axis = item.axis;
|
|
21
|
+
axis = item.axis, axisLabel = null === (_e = null === (_d = null === (_c = null === (_b = null === (_a = axis.getVRenderComponents()[0]) || void 0 === _a ? void 0 : _a.children[0]) || void 0 === _b ? void 0 : _b.children[0]) || void 0 === _c ? void 0 : _c.getChildByName("axis-label-container")) || void 0 === _d ? void 0 : _d.getChildByName("axis-label-container-layer-0")) || void 0 === _e ? void 0 : _e.children[0];
|
|
21
22
|
}
|
|
22
23
|
const isVisible = !!currentValue.size && Number.isFinite(coord) && !Number.isNaN(coord), useCache = enableRemain && !isVisible && isValid(cacheInfo), newCacheInfo = useCache ? cacheInfo : {
|
|
23
24
|
coordRange: [ 0, 0 ],
|
|
@@ -31,13 +32,14 @@ export const layoutByValue = (stateByField, series, layoutStartPoint, enableRema
|
|
|
31
32
|
dy: 0
|
|
32
33
|
}, res)), {}) : null,
|
|
33
34
|
visible: isVisible,
|
|
34
|
-
axis: axis
|
|
35
|
+
axis: axis,
|
|
36
|
+
axisLabel: axisLabel
|
|
35
37
|
};
|
|
36
38
|
let bandSize;
|
|
37
39
|
newCacheInfo && (newCacheInfo._isCache = useCache);
|
|
38
40
|
let offsetSize = 0;
|
|
39
41
|
if (attributes && currentValue.forEach((({axis: axis, datum: value = ""}) => {
|
|
40
|
-
var _a;
|
|
42
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
41
43
|
let niceLabelFormatter = null;
|
|
42
44
|
const scale = axis.getScale();
|
|
43
45
|
if (isDiscrete(scale.type)) bandSize = scale.bandwidth(), 0 === bandSize && scale.step && (offsetSize = scale.step()); else if (isContinuous(scale.type)) {
|
|
@@ -50,24 +52,24 @@ export const layoutByValue = (stateByField, series, layoutStartPoint, enableRema
|
|
|
50
52
|
niceLabelFormatter = axis.niceLabelFormatter;
|
|
51
53
|
}
|
|
52
54
|
if (newCacheInfo && (null === (_a = attributes.label) || void 0 === _a ? void 0 : _a.visible) && !useCache) {
|
|
53
|
-
const labelOffset = getAxisLabelOffset(axis.getSpec()), axisOrient = axis.getOrient();
|
|
55
|
+
const labelOffset = getAxisLabelOffset(axis.getSpec()), axisOrient = axis.getOrient(), syncAxisLabelAngle = null === (_b = attributes.label) || void 0 === _b ? void 0 : _b.syncAxisLabelAngle;
|
|
54
56
|
newCacheInfo.labels[axisOrient] && (newCacheInfo.labels[axisOrient].visible = !0,
|
|
55
57
|
newCacheInfo.labels[axisOrient].text = value, "left" === axisOrient ? (newCacheInfo.labels[axisOrient].dx = -labelOffset,
|
|
56
58
|
newCacheInfo.labelsTextStyle[axisOrient] = {
|
|
57
|
-
textAlign: "right",
|
|
58
|
-
textBaseline: "middle"
|
|
59
|
+
textAlign: syncAxisLabelAngle && axisLabel && null !== (_c = axisLabel.attribute.textAlign) && void 0 !== _c ? _c : "right",
|
|
60
|
+
textBaseline: syncAxisLabelAngle && axisLabel && null !== (_d = axisLabel.attribute.textBaseline) && void 0 !== _d ? _d : "middle"
|
|
59
61
|
}) : "right" === axisOrient ? (newCacheInfo.labels[axisOrient].dx = labelOffset,
|
|
60
62
|
newCacheInfo.labelsTextStyle[axisOrient] = {
|
|
61
|
-
textAlign: "left",
|
|
62
|
-
textBaseline: "middle"
|
|
63
|
+
textAlign: syncAxisLabelAngle && axisLabel && null !== (_e = axisLabel.attribute.textAlign) && void 0 !== _e ? _e : "left",
|
|
64
|
+
textBaseline: syncAxisLabelAngle && axisLabel && null !== (_f = axisLabel.attribute.textBaseline) && void 0 !== _f ? _f : "middle"
|
|
63
65
|
}) : "top" === axisOrient ? (newCacheInfo.labels[axisOrient].y = 0, newCacheInfo.labels[axisOrient].dy = -labelOffset,
|
|
64
66
|
newCacheInfo.labelsTextStyle[axisOrient] = {
|
|
65
|
-
textAlign: "center",
|
|
66
|
-
textBaseline: "bottom"
|
|
67
|
+
textAlign: syncAxisLabelAngle && axisLabel && null !== (_g = axisLabel.attribute.textAlign) && void 0 !== _g ? _g : "center",
|
|
68
|
+
textBaseline: syncAxisLabelAngle && axisLabel && null !== (_h = axisLabel.attribute.textBaseline) && void 0 !== _h ? _h : "bottom"
|
|
67
69
|
}) : "bottom" === axisOrient && (newCacheInfo.labels[axisOrient].dy = labelOffset,
|
|
68
70
|
newCacheInfo.labelsTextStyle[axisOrient] = {
|
|
69
|
-
textAlign: "center",
|
|
70
|
-
textBaseline: "top"
|
|
71
|
+
textAlign: syncAxisLabelAngle && axisLabel && null !== (_j = axisLabel.attribute.textAlign) && void 0 !== _j ? _j : "center",
|
|
72
|
+
textBaseline: syncAxisLabelAngle && axisLabel && null !== (_k = axisLabel.attribute.textBaseline) && void 0 !== _k ? _k : "top"
|
|
71
73
|
}), newCacheInfo.labels[axisOrient].defaultFormatter = niceLabelFormatter);
|
|
72
74
|
}
|
|
73
75
|
})), newCacheInfo && !useCache) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/component/crosshair/utils/cartesian.ts"],"names":[],"mappings":"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","file":"cartesian.js","sourcesContent":["import type { BandScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { isContinuous, isDiscrete } from '@visactor/vscale';\nimport type { ICartesianSeries } from '../../../series';\nimport type { ILayoutPoint, StringOrNumber } from '../../../typings';\nimport type {\n AxisCurrentValueMap,\n CrossHairStateByField,\n CrossHairStateItem,\n IBound,\n ICrosshairInfo,\n ICrosshairLabelInfo,\n IHair\n} from '../interface';\nimport { getDatumByValue } from './common';\nimport { getAxisLabelOffset } from '../../axis/util';\nimport { isValid } from '@visactor/vutils';\nimport type { IAxis, ILinearAxis } from '../../axis';\nimport { getFormatFunction } from '../../util';\n\nexport const layoutByValue = (\n stateByField: CrossHairStateByField,\n series: ICartesianSeries,\n layoutStartPoint: ILayoutPoint,\n enableRemain: boolean = false\n) => {\n if (!layoutStartPoint) {\n layoutStartPoint = { x: 0, y: 0 };\n }\n\n Object.keys(stateByField).forEach(field => {\n const { currentValue, cacheInfo, labelsComp, attributes, coordKey } = stateByField[field];\n let axis = null;\n let coord = 0;\n\n if (currentValue.size) {\n const item = Array.from(currentValue.values())[0];\n coord =\n item.axis.getScale().scale(item.datum) +\n item.axis.getLayoutStartPoint()[coordKey as 'x' | 'y'] -\n layoutStartPoint[coordKey as 'x' | 'y'];\n axis = item.axis;\n }\n const isVisible = !!currentValue.size && Number.isFinite(coord) && !Number.isNaN(coord);\n const useCache = enableRemain && !isVisible && isValid(cacheInfo);\n const newCacheInfo: ICrosshairInfo = useCache\n ? cacheInfo\n : {\n coordRange: [0, 0],\n sizeRange: [0, 0],\n coord,\n labelsTextStyle: {},\n labels: labelsComp\n ? Object.keys(labelsComp).reduce((res: Record<string, ICrosshairLabelInfo>, labelKey: string) => {\n res[labelKey] = { visible: false, text: '', dx: 0, dy: 0 };\n\n return res;\n }, {})\n : null,\n visible: isVisible,\n axis\n };\n if (newCacheInfo) {\n newCacheInfo._isCache = useCache;\n }\n let bandSize;\n let offsetSize: number = 0;\n\n // 计算x轴和y轴的数据,只允许最多一对x和一对y\n if (attributes) {\n currentValue.forEach(({ axis, datum: value = '' }) => {\n let niceLabelFormatter: (value: StringOrNumber) => StringOrNumber = null;\n const scale = axis.getScale();\n if (isDiscrete(scale.type)) {\n bandSize = (scale as BandScale).bandwidth();\n\n if (bandSize === 0 && (scale as BandScale).step) {\n offsetSize = (scale as BandScale).step();\n }\n } else if (isContinuous(scale.type)) {\n const field1 = field === 'xField' ? series.fieldX[0] : series.fieldY[0]; // todo\n const field2 = field === 'xField' ? series.fieldX2 : series.fieldY2; // todo\n const datum = getDatumByValue(series.getViewData().latestData, +value, field1, field2);\n if (datum) {\n const startX = field === 'xField' ? series.dataToPositionX(datum) : series.dataToPositionY(datum);\n if (field2) {\n bandSize = Math.abs(\n startX - (field === 'xField' ? series.dataToPositionX1(datum) : series.dataToPositionY1(datum))\n );\n value = `${datum[field1]} ~ ${datum[field2]}`;\n } else {\n bandSize = 1;\n }\n coord = startX;\n }\n niceLabelFormatter = (axis as ILinearAxis).niceLabelFormatter;\n }\n if (newCacheInfo && attributes.label?.visible && !useCache) {\n const labelOffset = getAxisLabelOffset(axis.getSpec());\n const axisOrient = axis.getOrient();\n\n if (newCacheInfo.labels[axisOrient]) {\n newCacheInfo.labels[axisOrient].visible = true;\n newCacheInfo.labels[axisOrient].text = value;\n if (axisOrient === 'left') {\n newCacheInfo.labels[axisOrient].dx = -labelOffset;\n newCacheInfo.labelsTextStyle[axisOrient] = {\n textAlign: 'right',\n textBaseline: 'middle'\n };\n } else if (axisOrient === 'right') {\n newCacheInfo.labels[axisOrient].dx = labelOffset;\n newCacheInfo.labelsTextStyle[axisOrient] = {\n textAlign: 'left',\n textBaseline: 'middle'\n };\n } else if (axisOrient === 'top') {\n newCacheInfo.labels[axisOrient].y = 0;\n newCacheInfo.labels[axisOrient].dy = -labelOffset;\n newCacheInfo.labelsTextStyle[axisOrient] = {\n textAlign: 'center',\n textBaseline: 'bottom'\n };\n } else if (axisOrient === 'bottom') {\n newCacheInfo.labels[axisOrient].dy = labelOffset;\n newCacheInfo.labelsTextStyle[axisOrient] = {\n textAlign: 'center',\n textBaseline: 'top'\n };\n }\n newCacheInfo.labels[axisOrient].defaultFormatter = niceLabelFormatter;\n }\n }\n });\n }\n\n if (newCacheInfo && !useCache) {\n const region = { x1: Infinity, y1: Infinity, x2: -Infinity, y2: -Infinity };\n setRegionArea(region, currentValue);\n if (field === 'xField') {\n newCacheInfo.coordRange = [region.x1, region.x2];\n newCacheInfo.sizeRange = [region.y1, region.y2];\n newCacheInfo.coord = coord + layoutStartPoint.x;\n if (newCacheInfo.labels) {\n newCacheInfo.labels.top.y = region.y1;\n newCacheInfo.labels.bottom.y = region.y2;\n }\n } else {\n newCacheInfo.coordRange = [region.y1, region.y2]; // todo\n newCacheInfo.sizeRange = [region.x1, region.x2];\n newCacheInfo.coord = coord + layoutStartPoint.y;\n\n if (newCacheInfo.labels) {\n newCacheInfo.labels.left.x = region.x1;\n newCacheInfo.labels.right.x = region.x2;\n }\n }\n\n if (newCacheInfo.coord < newCacheInfo.coordRange[0] || newCacheInfo.coord > newCacheInfo.coordRange[1]) {\n newCacheInfo.visible = false;\n }\n\n if (attributes && attributes.label) {\n Object.keys(newCacheInfo.labels).forEach(labelKey => {\n if (newCacheInfo.labels[labelKey].visible) {\n setFormattedCrosshairLabel(newCacheInfo.labels[labelKey], labelKey, attributes.label);\n }\n });\n }\n }\n\n stateByField[field].bandSize = bandSize ?? 0;\n stateByField[field].offsetSize = offsetSize;\n stateByField[field].cacheInfo = newCacheInfo;\n });\n\n return stateByField;\n};\n\nconst setFormattedCrosshairLabel = (labelInfo: ICrosshairLabelInfo, position: string, labelSpec: IHair['label']) => {\n const { formatMethod, formatter } = labelSpec;\n const { formatFunc, args } = getFormatFunction(formatMethod, formatter, labelInfo.text, {\n label: labelInfo.text,\n position\n });\n if (formatFunc) {\n labelInfo.text = formatFunc(...args);\n } else if (labelInfo.defaultFormatter) {\n labelInfo.text = labelInfo.defaultFormatter(labelInfo.text);\n }\n};\n\n// 计算x轴和y轴对应的region区域\nconst setRegionArea = (outRegion: IBound, currentValue: AxisCurrentValueMap) => {\n currentValue.forEach(({ axis }) => {\n const regions = axis.getRegions();\n regions.forEach(r => {\n const { x, y } = r.getLayoutStartPoint();\n const { width, height } = r.getLayoutRect();\n\n outRegion.x1 = Math.min(outRegion.x1, x);\n outRegion.y1 = Math.min(outRegion.y1, y);\n outRegion.x2 = Math.max(outRegion.x2, x + width);\n outRegion.y2 = Math.max(outRegion.y2, y + height);\n });\n });\n};\n\nexport const layoutCrosshair = (stateItem: CrossHairStateItem) => {\n const { cacheInfo, attributes, bandSize, offsetSize, coordKey, anotherAxisKey } = stateItem;\n const { coord, sizeRange } = cacheInfo;\n\n // 外部设置的size\n const type = attributes.type;\n let positionAttribute;\n if (type === 'line') {\n const pos = coord + bandSize / 2;\n\n positionAttribute = {\n visible: true,\n start: { [coordKey]: pos, [anotherAxisKey]: sizeRange[0] },\n end: { [coordKey]: pos, [anotherAxisKey]: sizeRange[1] }\n };\n } else if (type === 'rect') {\n const [offset0, offset1] = getRectSize(attributes, bandSize, offsetSize, cacheInfo.axis);\n const { coordRange } = cacheInfo;\n\n positionAttribute = {\n visible: true,\n start: {\n [coordKey]: Math.max(coord + offset0, coordRange[0]),\n [anotherAxisKey]: sizeRange[0]\n },\n end: {\n [coordKey]: Math.min(coord + offset1, coordRange[1]),\n [anotherAxisKey]: sizeRange[1]\n }\n };\n }\n\n return positionAttribute;\n};\n\nconst getRectSize = (hair: IHair, bandSize: number, offsetSize: number, axis: IAxis) => {\n // 外部设置的size\n const visualSize = bandSize === 0 ? offsetSize : bandSize;\n let size = visualSize;\n\n if (hair.style?.sizePercent) {\n // 按照百分比设置大小\n size = visualSize * hair.style.sizePercent;\n } else if (typeof hair.style?.size === 'number') {\n size = hair.style.size;\n } else if (typeof hair.style?.size === 'function') {\n const axisRect = axis.getLayoutRect();\n size = hair.style.size(axisRect, axis);\n }\n\n return bandSize === 0 ? [-size / 2, size / 2] : [bandSize / 2 - size / 2, size / 2 + bandSize / 2];\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/component/crosshair/utils/cartesian.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAY5D,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,YAAmC,EACnC,MAAwB,EACxB,gBAA8B,EAC9B,eAAwB,KAAK,EAC7B,EAAE;IACF,IAAI,CAAC,gBAAgB,EAAE;QACrB,gBAAgB,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;KACnC;IAED,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;;QACxC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QAC1F,IAAI,IAAI,GAAG,IAAI,CAAC;QAChB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,SAAS,GAAU,IAAI,CAAC;QAC5B,IAAI,YAAY,CAAC,IAAI,EAAE;YACrB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,KAAK;gBACH,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;oBACtC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,QAAqB,CAAC;oBACtD,gBAAgB,CAAC,QAAqB,CAAC,CAAC;YAC1C,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACjB,SAAS,GAAG,MAAA,MAAA,MAAA,MAAA,MAAA,IAAI;iBACb,oBAAoB,EAAE,CAAC,CAAC,CAAC,0CACxB,QAAQ,CAAC,CAAC,CAAC,0CAAE,QAAQ,CAAC,CAAC,CAAC,0CAAE,cAAc,CAAC,sBAAsB,CAAC,0CAChE,cAAc,CAAC,8BAA8B,CAAC,0CAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;SACjE;QACD,MAAM,SAAS,GAAG,CAAC,CAAC,YAAY,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACxF,MAAM,QAAQ,GAAG,YAAY,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC;QAClE,MAAM,YAAY,GAAmB,QAAQ;YAC3C,CAAC,CAAC,SAAS;YACX,CAAC,CAAC;gBACE,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;gBAClB,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;gBACjB,KAAK;gBACL,eAAe,EAAE,EAAE;gBACnB,MAAM,EAAE,UAAU;oBAChB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,GAAwC,EAAE,QAAgB,EAAE,EAAE;wBAC5F,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;wBAE3D,OAAO,GAAG,CAAC;oBACb,CAAC,EAAE,EAAE,CAAC;oBACR,CAAC,CAAC,IAAI;gBACR,OAAO,EAAE,SAAS;gBAClB,IAAI;gBACJ,SAAS,EAAE,SAAS;aACrB,CAAC;QACN,IAAI,YAAY,EAAE;YAChB,YAAY,CAAC,QAAQ,GAAG,QAAQ,CAAC;SAClC;QACD,IAAI,QAAQ,CAAC;QACb,IAAI,UAAU,GAAW,CAAC,CAAC;QAG3B,IAAI,UAAU,EAAE;YACd,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,EAAE,EAAE,EAAE,EAAE;;gBACnD,IAAI,kBAAkB,GAA8C,IAAI,CAAC;gBACzE,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC9B,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;oBAC1B,QAAQ,GAAI,KAAmB,CAAC,SAAS,EAAE,CAAC;oBAE5C,IAAI,QAAQ,KAAK,CAAC,IAAK,KAAmB,CAAC,IAAI,EAAE;wBAC/C,UAAU,GAAI,KAAmB,CAAC,IAAI,EAAE,CAAC;qBAC1C;iBACF;qBAAM,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;oBACnC,MAAM,MAAM,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACxE,MAAM,MAAM,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;oBACpE,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;oBACvF,IAAI,KAAK,EAAE;wBACT,MAAM,MAAM,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;wBAClG,IAAI,MAAM,EAAE;4BACV,QAAQ,GAAG,IAAI,CAAC,GAAG,CACjB,MAAM,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAChG,CAAC;4BACF,KAAK,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;yBAC/C;6BAAM;4BACL,QAAQ,GAAG,CAAC,CAAC;yBACd;wBACD,KAAK,GAAG,MAAM,CAAC;qBAChB;oBACD,kBAAkB,GAAI,IAAoB,CAAC,kBAAkB,CAAC;iBAC/D;gBACD,IAAI,YAAY,KAAI,MAAA,UAAU,CAAC,KAAK,0CAAE,OAAO,CAAA,IAAI,CAAC,QAAQ,EAAE;oBAC1D,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;oBACvD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;oBACpC,MAAM,kBAAkB,GAAG,MAAA,UAAU,CAAC,KAAK,0CAAE,kBAAkB,CAAC;oBAChE,IAAI,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE;wBACnC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;wBAC/C,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC;wBAC7C,IAAI,UAAU,KAAK,MAAM,EAAE;4BACzB,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC;4BAClD,YAAY,CAAC,eAAe,CAAC,UAAU,CAAC,GAAG;gCACzC,SAAS,EAAE,kBAAkB,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAA,SAAS,CAAC,SAAS,CAAC,SAAS,mCAAI,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO;gCACjG,YAAY,EACV,kBAAkB,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAA,SAAS,CAAC,SAAS,CAAC,YAAY,mCAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ;6BAC9F,CAAC;yBACH;6BAAM,IAAI,UAAU,KAAK,OAAO,EAAE;4BACjC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,WAAW,CAAC;4BACjD,YAAY,CAAC,eAAe,CAAC,UAAU,CAAC,GAAG;gCACzC,SAAS,EAAE,kBAAkB,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAA,SAAS,CAAC,SAAS,CAAC,SAAS,mCAAI,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM;gCAC/F,YAAY,EACV,kBAAkB,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAA,SAAS,CAAC,SAAS,CAAC,YAAY,mCAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ;6BAC9F,CAAC;yBACH;6BAAM,IAAI,UAAU,KAAK,KAAK,EAAE;4BAC/B,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;4BACtC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC;4BAClD,YAAY,CAAC,eAAe,CAAC,UAAU,CAAC,GAAG;gCACzC,SAAS,EAAE,kBAAkB,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAA,SAAS,CAAC,SAAS,CAAC,SAAS,mCAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ;gCACnG,YAAY,EACV,kBAAkB,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAA,SAAS,CAAC,SAAS,CAAC,YAAY,mCAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ;6BAC9F,CAAC;yBACH;6BAAM,IAAI,UAAU,KAAK,QAAQ,EAAE;4BAClC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,WAAW,CAAC;4BACjD,YAAY,CAAC,eAAe,CAAC,UAAU,CAAC,GAAG;gCACzC,SAAS,EAAE,kBAAkB,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAA,SAAS,CAAC,SAAS,CAAC,SAAS,mCAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ;gCACnG,YAAY,EAAE,kBAAkB,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAA,SAAS,CAAC,SAAS,CAAC,YAAY,mCAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK;6BACpG,CAAC;yBACH;wBACD,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,gBAAgB,GAAG,kBAAkB,CAAC;qBACvE;iBACF;YACH,CAAC,CAAC,CAAC;SACJ;QAED,IAAI,YAAY,IAAI,CAAC,QAAQ,EAAE;YAC7B,MAAM,MAAM,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC;YAC5E,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YACpC,IAAI,KAAK,KAAK,QAAQ,EAAE;gBACtB,YAAY,CAAC,UAAU,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;gBACjD,YAAY,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;gBAChD,YAAY,CAAC,KAAK,GAAG,KAAK,GAAG,gBAAgB,CAAC,CAAC,CAAC;gBAChD,IAAI,YAAY,CAAC,MAAM,EAAE;oBACvB,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC;oBACtC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC;iBAC1C;aACF;iBAAM;gBACL,YAAY,CAAC,UAAU,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;gBACjD,YAAY,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;gBAChD,YAAY,CAAC,KAAK,GAAG,KAAK,GAAG,gBAAgB,CAAC,CAAC,CAAC;gBAEhD,IAAI,YAAY,CAAC,MAAM,EAAE;oBACvB,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC;oBACvC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC;iBACzC;aACF;YAED,IAAI,YAAY,CAAC,KAAK,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,KAAK,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;gBACtG,YAAY,CAAC,OAAO,GAAG,KAAK,CAAC;aAC9B;YAED,IAAI,UAAU,IAAI,UAAU,CAAC,KAAK,EAAE;gBAClC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;oBAClD,IAAI,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE;wBACzC,0BAA0B,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;qBACvF;gBACH,CAAC,CAAC,CAAC;aACJ;SACF;QAED,YAAY,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,CAAC,CAAC;QAC7C,YAAY,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,UAAU,CAAC;QAC5C,YAAY,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,YAAY,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AAEF,MAAM,0BAA0B,GAAG,CAAC,SAA8B,EAAE,QAAgB,EAAE,SAAyB,EAAE,EAAE;IACjH,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC;IAC9C,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,iBAAiB,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE;QACtF,KAAK,EAAE,SAAS,CAAC,IAAI;QACrB,QAAQ;KACT,CAAC,CAAC;IACH,IAAI,UAAU,EAAE;QACd,SAAS,CAAC,IAAI,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC;KACtC;SAAM,IAAI,SAAS,CAAC,gBAAgB,EAAE;QACrC,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KAC7D;AACH,CAAC,CAAC;AAGF,MAAM,aAAa,GAAG,CAAC,SAAiB,EAAE,YAAiC,EAAE,EAAE;IAC7E,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;QAChC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YAClB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,mBAAmB,EAAE,CAAC;YACzC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC;YAE5C,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACzC,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACzC,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;YACjD,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,SAA6B,EAAE,EAAE;IAC/D,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,SAAS,CAAC;IAC5F,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC;IAGvC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;IAC7B,IAAI,iBAAiB,CAAC;IACtB,IAAI,IAAI,KAAK,MAAM,EAAE;QACnB,MAAM,GAAG,GAAG,KAAK,GAAG,QAAQ,GAAG,CAAC,CAAC;QAEjC,iBAAiB,GAAG;YAClB,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE;YAC1D,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE;SACzD,CAAC;KACH;SAAM,IAAI,IAAI,KAAK,MAAM,EAAE;QAC1B,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,WAAW,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QACzF,MAAM,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC;QAEjC,iBAAiB,GAAG;YAClB,OAAO,EAAE,IAAI;YACb,KAAK,EAAE;gBACL,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;gBACpD,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;aAC/B;YACD,GAAG,EAAE;gBACH,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;gBACpD,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;aAC/B;SACF,CAAC;KACH;IAED,OAAO,iBAAiB,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,IAAW,EAAE,QAAgB,EAAE,UAAkB,EAAE,IAAW,EAAE,EAAE;;IAErF,MAAM,UAAU,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC1D,IAAI,IAAI,GAAG,UAAU,CAAC;IAEtB,IAAI,MAAA,IAAI,CAAC,KAAK,0CAAE,WAAW,EAAE;QAE3B,IAAI,GAAG,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;KAC5C;SAAM,IAAI,OAAO,CAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,IAAI,CAAA,KAAK,QAAQ,EAAE;QAC/C,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;KACxB;SAAM,IAAI,OAAO,CAAA,MAAA,IAAI,CAAC,KAAK,0CAAE,IAAI,CAAA,KAAK,UAAU,EAAE;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACtC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;KACxC;IAED,OAAO,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC;AACrG,CAAC,CAAC","file":"cartesian.js","sourcesContent":["import type { IText } from '@visactor/vrender-core';\nimport type { BandScale } from '@visactor/vscale';\n// eslint-disable-next-line no-duplicate-imports\nimport { isContinuous, isDiscrete } from '@visactor/vscale';\nimport type { ICartesianSeries } from '../../../series';\nimport type { ILayoutPoint, StringOrNumber } from '../../../typings';\nimport type {\n AxisCurrentValueMap,\n CrossHairStateByField,\n CrossHairStateItem,\n IBound,\n ICrosshairInfo,\n ICrosshairLabelInfo,\n IHair\n} from '../interface';\nimport { getDatumByValue } from './common';\nimport { getAxisLabelOffset } from '../../axis/util';\nimport { isValid } from '@visactor/vutils';\nimport type { IAxis, ILinearAxis } from '../../axis';\nimport { getFormatFunction } from '../../util';\n\nexport const layoutByValue = (\n stateByField: CrossHairStateByField,\n series: ICartesianSeries,\n layoutStartPoint: ILayoutPoint,\n enableRemain: boolean = false\n) => {\n if (!layoutStartPoint) {\n layoutStartPoint = { x: 0, y: 0 };\n }\n\n Object.keys(stateByField).forEach(field => {\n const { currentValue, cacheInfo, labelsComp, attributes, coordKey } = stateByField[field];\n let axis = null;\n let coord = 0;\n let axisLabel: IText = null;\n if (currentValue.size) {\n const item = Array.from(currentValue.values())[0];\n coord =\n item.axis.getScale().scale(item.datum) +\n item.axis.getLayoutStartPoint()[coordKey as 'x' | 'y'] -\n layoutStartPoint[coordKey as 'x' | 'y'];\n axis = item.axis;\n axisLabel = axis\n .getVRenderComponents()[0]\n ?.children[0]?.children[0]?.getChildByName('axis-label-container')\n ?.getChildByName('axis-label-container-layer-0')?.children[0];\n }\n const isVisible = !!currentValue.size && Number.isFinite(coord) && !Number.isNaN(coord);\n const useCache = enableRemain && !isVisible && isValid(cacheInfo);\n const newCacheInfo: ICrosshairInfo = useCache\n ? cacheInfo\n : {\n coordRange: [0, 0],\n sizeRange: [0, 0],\n coord,\n labelsTextStyle: {},\n labels: labelsComp\n ? Object.keys(labelsComp).reduce((res: Record<string, ICrosshairLabelInfo>, labelKey: string) => {\n res[labelKey] = { visible: false, text: '', dx: 0, dy: 0 };\n\n return res;\n }, {})\n : null,\n visible: isVisible,\n axis,\n axisLabel: axisLabel\n };\n if (newCacheInfo) {\n newCacheInfo._isCache = useCache;\n }\n let bandSize;\n let offsetSize: number = 0;\n\n // 计算x轴和y轴的数据,只允许最多一对x和一对y\n if (attributes) {\n currentValue.forEach(({ axis, datum: value = '' }) => {\n let niceLabelFormatter: (value: StringOrNumber) => StringOrNumber = null;\n const scale = axis.getScale();\n if (isDiscrete(scale.type)) {\n bandSize = (scale as BandScale).bandwidth();\n\n if (bandSize === 0 && (scale as BandScale).step) {\n offsetSize = (scale as BandScale).step();\n }\n } else if (isContinuous(scale.type)) {\n const field1 = field === 'xField' ? series.fieldX[0] : series.fieldY[0]; // todo\n const field2 = field === 'xField' ? series.fieldX2 : series.fieldY2; // todo\n const datum = getDatumByValue(series.getViewData().latestData, +value, field1, field2);\n if (datum) {\n const startX = field === 'xField' ? series.dataToPositionX(datum) : series.dataToPositionY(datum);\n if (field2) {\n bandSize = Math.abs(\n startX - (field === 'xField' ? series.dataToPositionX1(datum) : series.dataToPositionY1(datum))\n );\n value = `${datum[field1]} ~ ${datum[field2]}`;\n } else {\n bandSize = 1;\n }\n coord = startX;\n }\n niceLabelFormatter = (axis as ILinearAxis).niceLabelFormatter;\n }\n if (newCacheInfo && attributes.label?.visible && !useCache) {\n const labelOffset = getAxisLabelOffset(axis.getSpec());\n const axisOrient = axis.getOrient();\n const syncAxisLabelAngle = attributes.label?.syncAxisLabelAngle;\n if (newCacheInfo.labels[axisOrient]) {\n newCacheInfo.labels[axisOrient].visible = true;\n newCacheInfo.labels[axisOrient].text = value;\n if (axisOrient === 'left') {\n newCacheInfo.labels[axisOrient].dx = -labelOffset;\n newCacheInfo.labelsTextStyle[axisOrient] = {\n textAlign: syncAxisLabelAngle && axisLabel ? (axisLabel.attribute.textAlign ?? 'right') : 'right',\n textBaseline:\n syncAxisLabelAngle && axisLabel ? (axisLabel.attribute.textBaseline ?? 'middle') : 'middle'\n };\n } else if (axisOrient === 'right') {\n newCacheInfo.labels[axisOrient].dx = labelOffset;\n newCacheInfo.labelsTextStyle[axisOrient] = {\n textAlign: syncAxisLabelAngle && axisLabel ? (axisLabel.attribute.textAlign ?? 'left') : 'left',\n textBaseline:\n syncAxisLabelAngle && axisLabel ? (axisLabel.attribute.textBaseline ?? 'middle') : 'middle'\n };\n } else if (axisOrient === 'top') {\n newCacheInfo.labels[axisOrient].y = 0;\n newCacheInfo.labels[axisOrient].dy = -labelOffset;\n newCacheInfo.labelsTextStyle[axisOrient] = {\n textAlign: syncAxisLabelAngle && axisLabel ? (axisLabel.attribute.textAlign ?? 'center') : 'center',\n textBaseline:\n syncAxisLabelAngle && axisLabel ? (axisLabel.attribute.textBaseline ?? 'bottom') : 'bottom'\n };\n } else if (axisOrient === 'bottom') {\n newCacheInfo.labels[axisOrient].dy = labelOffset;\n newCacheInfo.labelsTextStyle[axisOrient] = {\n textAlign: syncAxisLabelAngle && axisLabel ? (axisLabel.attribute.textAlign ?? 'center') : 'center',\n textBaseline: syncAxisLabelAngle && axisLabel ? (axisLabel.attribute.textBaseline ?? 'top') : 'top'\n };\n }\n newCacheInfo.labels[axisOrient].defaultFormatter = niceLabelFormatter;\n }\n }\n });\n }\n\n if (newCacheInfo && !useCache) {\n const region = { x1: Infinity, y1: Infinity, x2: -Infinity, y2: -Infinity };\n setRegionArea(region, currentValue);\n if (field === 'xField') {\n newCacheInfo.coordRange = [region.x1, region.x2];\n newCacheInfo.sizeRange = [region.y1, region.y2];\n newCacheInfo.coord = coord + layoutStartPoint.x;\n if (newCacheInfo.labels) {\n newCacheInfo.labels.top.y = region.y1;\n newCacheInfo.labels.bottom.y = region.y2;\n }\n } else {\n newCacheInfo.coordRange = [region.y1, region.y2]; // todo\n newCacheInfo.sizeRange = [region.x1, region.x2];\n newCacheInfo.coord = coord + layoutStartPoint.y;\n\n if (newCacheInfo.labels) {\n newCacheInfo.labels.left.x = region.x1;\n newCacheInfo.labels.right.x = region.x2;\n }\n }\n\n if (newCacheInfo.coord < newCacheInfo.coordRange[0] || newCacheInfo.coord > newCacheInfo.coordRange[1]) {\n newCacheInfo.visible = false;\n }\n\n if (attributes && attributes.label) {\n Object.keys(newCacheInfo.labels).forEach(labelKey => {\n if (newCacheInfo.labels[labelKey].visible) {\n setFormattedCrosshairLabel(newCacheInfo.labels[labelKey], labelKey, attributes.label);\n }\n });\n }\n }\n\n stateByField[field].bandSize = bandSize ?? 0;\n stateByField[field].offsetSize = offsetSize;\n stateByField[field].cacheInfo = newCacheInfo;\n });\n\n return stateByField;\n};\n\nconst setFormattedCrosshairLabel = (labelInfo: ICrosshairLabelInfo, position: string, labelSpec: IHair['label']) => {\n const { formatMethod, formatter } = labelSpec;\n const { formatFunc, args } = getFormatFunction(formatMethod, formatter, labelInfo.text, {\n label: labelInfo.text,\n position\n });\n if (formatFunc) {\n labelInfo.text = formatFunc(...args);\n } else if (labelInfo.defaultFormatter) {\n labelInfo.text = labelInfo.defaultFormatter(labelInfo.text);\n }\n};\n\n// 计算x轴和y轴对应的region区域\nconst setRegionArea = (outRegion: IBound, currentValue: AxisCurrentValueMap) => {\n currentValue.forEach(({ axis }) => {\n const regions = axis.getRegions();\n regions.forEach(r => {\n const { x, y } = r.getLayoutStartPoint();\n const { width, height } = r.getLayoutRect();\n\n outRegion.x1 = Math.min(outRegion.x1, x);\n outRegion.y1 = Math.min(outRegion.y1, y);\n outRegion.x2 = Math.max(outRegion.x2, x + width);\n outRegion.y2 = Math.max(outRegion.y2, y + height);\n });\n });\n};\n\nexport const layoutCrosshair = (stateItem: CrossHairStateItem) => {\n const { cacheInfo, attributes, bandSize, offsetSize, coordKey, anotherAxisKey } = stateItem;\n const { coord, sizeRange } = cacheInfo;\n\n // 外部设置的size\n const type = attributes.type;\n let positionAttribute;\n if (type === 'line') {\n const pos = coord + bandSize / 2;\n\n positionAttribute = {\n visible: true,\n start: { [coordKey]: pos, [anotherAxisKey]: sizeRange[0] },\n end: { [coordKey]: pos, [anotherAxisKey]: sizeRange[1] }\n };\n } else if (type === 'rect') {\n const [offset0, offset1] = getRectSize(attributes, bandSize, offsetSize, cacheInfo.axis);\n const { coordRange } = cacheInfo;\n\n positionAttribute = {\n visible: true,\n start: {\n [coordKey]: Math.max(coord + offset0, coordRange[0]),\n [anotherAxisKey]: sizeRange[0]\n },\n end: {\n [coordKey]: Math.min(coord + offset1, coordRange[1]),\n [anotherAxisKey]: sizeRange[1]\n }\n };\n }\n\n return positionAttribute;\n};\n\nconst getRectSize = (hair: IHair, bandSize: number, offsetSize: number, axis: IAxis) => {\n // 外部设置的size\n const visualSize = bandSize === 0 ? offsetSize : bandSize;\n let size = visualSize;\n\n if (hair.style?.sizePercent) {\n // 按照百分比设置大小\n size = visualSize * hair.style.sizePercent;\n } else if (typeof hair.style?.size === 'number') {\n size = hair.style.size;\n } else if (typeof hair.style?.size === 'function') {\n const axisRect = axis.getLayoutRect();\n size = hair.style.size(axisRect, axis);\n }\n\n return bandSize === 0 ? [-size / 2, size / 2] : [bandSize / 2 - size / 2, size / 2 + bandSize / 2];\n};\n"]}
|
|
@@ -33,7 +33,7 @@ export function getDatumByValue(data, value, startField, endField) {
|
|
|
33
33
|
|
|
34
34
|
export const getCartesianCrosshairTheme = (chartTheme, chartSpec) => {
|
|
35
35
|
var _a, _b;
|
|
36
|
-
const axes = array(null !== (_a = chartSpec.axes) && void 0 !== _a ? _a : []),
|
|
36
|
+
const axes = array(null !== (_a = chartSpec.axes) && void 0 !== _a ? _a : []), crosshairTheme = null !== (_b = getComponentThemeFromOption(ComponentTypeEnum.crosshair, chartTheme)) && void 0 !== _b ? _b : {}, {bandField: bandField, linearField: linearField, xField: xField, yField: yField, trigger: trigger, triggerOff: triggerOff} = crosshairTheme, xAxis = axes.find((axis => isXAxis(axis.orient)));
|
|
37
37
|
let newXField;
|
|
38
38
|
newXField = isValid(xAxis) ? mergeSpec({}, isDiscreteAxis(xAxis.type) ? bandField : linearField, xField) : xField;
|
|
39
39
|
const yAxis = axes.find((axis => isYAxis(axis.orient)));
|
|
@@ -41,13 +41,15 @@ export const getCartesianCrosshairTheme = (chartTheme, chartSpec) => {
|
|
|
41
41
|
return newYField = isValid(yAxis) ? mergeSpec({}, isDiscrete(yAxis.type) ? bandField : linearField, yField) : yField,
|
|
42
42
|
{
|
|
43
43
|
xField: newXField,
|
|
44
|
-
yField: newYField
|
|
44
|
+
yField: newYField,
|
|
45
|
+
trigger: trigger,
|
|
46
|
+
triggerOff: triggerOff
|
|
45
47
|
};
|
|
46
48
|
};
|
|
47
49
|
|
|
48
50
|
export const getPolarCrosshairTheme = (chartTheme, chartSpec) => {
|
|
49
51
|
var _a, _b;
|
|
50
|
-
const axes = array(null !== (_a = chartSpec.axes) && void 0 !== _a ? _a : []), {bandField: bandField, linearField: linearField, categoryField: categoryField, valueField: valueField} = null !== (_b = getComponentThemeFromOption(ComponentTypeEnum.crosshair, chartTheme)) && void 0 !== _b ? _b : {}, angleAxis = axes.find((axis => "angle" === axis.orient));
|
|
52
|
+
const axes = array(null !== (_a = chartSpec.axes) && void 0 !== _a ? _a : []), {bandField: bandField, linearField: linearField, categoryField: categoryField, valueField: valueField, trigger: trigger, triggerOff: triggerOff} = null !== (_b = getComponentThemeFromOption(ComponentTypeEnum.crosshair, chartTheme)) && void 0 !== _b ? _b : {}, angleAxis = axes.find((axis => "angle" === axis.orient));
|
|
51
53
|
let newAngleField;
|
|
52
54
|
newAngleField = isValid(angleAxis) ? mergeSpec({}, isDiscreteAxis(angleAxis.type) ? bandField : linearField, categoryField) : categoryField;
|
|
53
55
|
const radiusAxis = axes.find((axis => "radius" === axis.orient));
|
|
@@ -55,7 +57,9 @@ export const getPolarCrosshairTheme = (chartTheme, chartSpec) => {
|
|
|
55
57
|
return newRadiusField = isValid(radiusAxis) ? mergeSpec({}, isDiscrete(radiusAxis.type) ? bandField : linearField, valueField) : valueField,
|
|
56
58
|
{
|
|
57
59
|
categoryField: newAngleField,
|
|
58
|
-
valueField: newRadiusField
|
|
60
|
+
valueField: newRadiusField,
|
|
61
|
+
trigger: trigger,
|
|
62
|
+
triggerOff: triggerOff
|
|
59
63
|
};
|
|
60
64
|
};
|
|
61
65
|
//# sourceMappingURL=common.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/component/crosshair/utils/common.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,MAAM,UAAU,gBAAgB,CAAC,KAAU,EAAE,MAAmB;IAC9D,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IAClF,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC;IAC5C,MAAM,EAAE,EAAE,EAAE,QAAQ,GAAG,CAAC,EAAE,EAAE,EAAE,QAAQ,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC;IAE/D,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,UAAU,EAAE;QAEnB,EAAE,GAAG,UAAU,GAAG,EAAE,CAAC;KACtB;IACD,IAAI,EAAE,GAAG,UAAU,EAAE;QAEnB,EAAE,GAAG,UAAU,GAAG,EAAE,CAAC;KACtB;IAED,IAAI,EAAE,GAAG,UAAU,EAAE;QAEnB,EAAE,GAAG,UAAU,GAAG,EAAE,CAAC;KACtB;IAED,IAAI,EAAE,GAAG,UAAU,EAAE;QAEnB,EAAE,GAAG,UAAU,GAAG,EAAE,CAAC;KACtB;IACD,IAAI,EAAE,EAAE;QACN,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,GAAG,QAAQ,CAAC,CAAC;KACzC;IACD,IAAI,EAAE,EAAE;QACN,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,GAAG,QAAQ,CAAC,CAAC;KACzC;AACH,CAAC;AAWD,MAAM,UAAU,eAAe,CAAC,IAAa,EAAE,KAAa,EAAE,UAAkB,EAAE,QAAiB;IACjG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEvB,IAAI,MAAM,EAAE;YACV,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,UAAU,CAAC,CAAC;YAEhD,IAAI,UAAU,IAAI,KAAK,IAAI,QAAQ,IAAI,KAAK,EAAE;gBAC5C,OAAO,MAAM,CAAC;aACf;SACF;KACF;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,UAAkB,EAAE,SAAc,EAAmB,EAAE;;IAChG,MAAM,IAAI,GAA+B,KAAK,CAAC,MAAA,SAAS,CAAC,IAAI,mCAAI,EAAE,CAAC,CAAC;IACrE,MAAM,
|
|
1
|
+
{"version":3,"sources":["../src/component/crosshair/utils/common.ts"],"names":[],"mappings":"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","file":"common.js","sourcesContent":["import type { Tag } from '@visactor/vrender-components';\nimport type { IBoundsLike } from '@visactor/vutils';\nimport type { Datum } from '../../../typings';\nimport type { ICrosshairTheme } from '../interface';\n// eslint-disable-next-line no-duplicate-imports\nimport { array, isValid } from '@visactor/vutils';\nimport { isXAxis, isYAxis } from '../../axis/cartesian/util/common';\nimport { isDiscrete } from '@visactor/vscale';\nimport type { ICartesianAxisCommonSpec, IPolarAxisCommonSpec } from '../../axis';\nimport { getComponentThemeFromOption } from '../../util';\nimport { ComponentTypeEnum } from '../../interface/type';\nimport type { ITheme } from '../../../theme';\nimport { isDiscreteAxis } from '../../axis/util';\nimport { mergeSpec } from '@visactor/vutils-extension';\n\nexport function limitTagInBounds(shape: Tag, bounds: IBoundsLike) {\n const { x1: regionMinX, y1: regionMinY, x2: regionMaxX, y2: regionMaxY } = bounds;\n const { x1, y1, x2, y2 } = shape.AABBBounds;\n const { dx: originDx = 0, dy: originDy = 0 } = shape.attribute;\n\n let dx = 0;\n let dy = 0;\n if (x1 < regionMinX) {\n // 超出左侧\n dx = regionMinX - x1;\n }\n if (y1 < regionMinY) {\n // 超出顶部\n dy = regionMinY - y1;\n }\n\n if (x2 > regionMaxX) {\n // 超出右侧\n dx = regionMaxX - x2;\n }\n\n if (y2 > regionMaxY) {\n // 整体超出顶部\n dy = regionMaxY - y2;\n }\n if (dx) {\n shape.setAttribute('dx', dx + originDx);\n }\n if (dy) {\n shape.setAttribute('dy', dy + originDy);\n }\n}\n\n/**\n * 查找系列中的数据\n * @todo 待重构优化,和 `getDimensionData` 中的逻辑存在重合\n * @param data 系列数据\n * @param value 数据值\n * @param startField 开始值对应的字段\n * @param endField 结束值对应的字段\n * @returns 系列数据\n */\nexport function getDatumByValue(data: Datum[], value: number, startField: string, endField?: string): Datum | null {\n for (let i = 0, len = data.length; i < len; i++) {\n const record = data[i];\n\n if (record) {\n const startValue = record[startField];\n const endValue = record[endField || startField];\n\n if (startValue <= value && endValue >= value) {\n return record;\n }\n }\n }\n\n return null;\n}\n\nexport const getCartesianCrosshairTheme = (chartTheme: ITheme, chartSpec: any): ICrosshairTheme => {\n const axes: ICartesianAxisCommonSpec[] = array(chartSpec.axes ?? []);\n const crosshairTheme = getComponentThemeFromOption(ComponentTypeEnum.crosshair, chartTheme) ?? {};\n const { bandField, linearField, xField, yField, trigger, triggerOff } = crosshairTheme;\n\n const xAxis = axes.find(axis => isXAxis(axis.orient));\n let newXField;\n if (isValid(xAxis)) {\n newXField = mergeSpec({}, isDiscreteAxis(xAxis.type) ? bandField : linearField, xField);\n } else {\n newXField = xField;\n }\n\n const yAxis = axes.find(axis => isYAxis(axis.orient));\n let newYField;\n if (isValid(yAxis)) {\n newYField = mergeSpec({}, isDiscrete(yAxis.type) ? bandField : linearField, yField);\n } else {\n newYField = yField;\n }\n\n // 返回主题配置,包括交互相关配置\n return {\n xField: newXField,\n yField: newYField,\n trigger,\n triggerOff\n };\n};\n\nexport const getPolarCrosshairTheme = (chartTheme: ITheme, chartSpec: any): ICrosshairTheme => {\n const axes: IPolarAxisCommonSpec[] = array(chartSpec.axes ?? []);\n const { bandField, linearField, categoryField, valueField, trigger, triggerOff } =\n getComponentThemeFromOption(ComponentTypeEnum.crosshair, chartTheme) ?? {};\n\n const angleAxis = axes.find(axis => axis.orient === 'angle');\n let newAngleField;\n if (isValid(angleAxis)) {\n newAngleField = mergeSpec({}, isDiscreteAxis(angleAxis.type) ? bandField : linearField, categoryField);\n } else {\n newAngleField = categoryField;\n }\n\n const radiusAxis = axes.find(axis => axis.orient === 'radius');\n let newRadiusField;\n if (isValid(radiusAxis)) {\n newRadiusField = mergeSpec({}, isDiscrete(radiusAxis.type) ? bandField : linearField, valueField);\n } else {\n newRadiusField = valueField;\n }\n\n // 返回主题配置,包括交互相关配置\n return {\n categoryField: newAngleField,\n valueField: newRadiusField,\n trigger,\n triggerOff\n };\n};\n"]}
|
|
@@ -243,20 +243,21 @@ export class DataFilterBaseComponent extends BaseComponent {
|
|
|
243
243
|
}
|
|
244
244
|
_initData() {
|
|
245
245
|
const dataCollection = [], stateFields = [], valueFields = [];
|
|
246
|
+
let isCategoryState;
|
|
246
247
|
if (this._relatedAxisComponent) {
|
|
247
248
|
const originalStateFields = {};
|
|
248
249
|
eachSeries(this._regions, (s => {
|
|
249
250
|
var _a, _b;
|
|
250
251
|
const xAxisHelper = "cartesian" === s.coordinate ? s.getXAxisHelper() : "polar" === s.coordinate ? s.angleAxisHelper : null, yAxisHelper = "cartesian" === s.coordinate ? s.getYAxisHelper() : "polar" === s.coordinate ? s.radiusAxisHelper : null;
|
|
251
252
|
if (!xAxisHelper || !yAxisHelper) return;
|
|
252
|
-
const stateAxisHelper = xAxisHelper.getAxisId() === this._relatedAxisComponent.id ? xAxisHelper : yAxisHelper.getAxisId() === this._relatedAxisComponent.id ? yAxisHelper : this._isHorizontal ? xAxisHelper : yAxisHelper, valueAxisHelper = stateAxisHelper === xAxisHelper ? yAxisHelper : xAxisHelper
|
|
253
|
+
const stateAxisHelper = xAxisHelper.getAxisId() === this._relatedAxisComponent.id ? xAxisHelper : yAxisHelper.getAxisId() === this._relatedAxisComponent.id ? yAxisHelper : this._isHorizontal ? xAxisHelper : yAxisHelper, valueAxisHelper = stateAxisHelper === xAxisHelper ? yAxisHelper : xAxisHelper;
|
|
253
254
|
dataCollection.push(s.getRawData());
|
|
254
255
|
const seriesSpec = s.getSpec(), xField = "cartesian" === s.coordinate ? array(seriesSpec.xField) : array(null !== (_a = seriesSpec.angleField) && void 0 !== _a ? _a : seriesSpec.categoryField), yField = "cartesian" === s.coordinate ? array(seriesSpec.yField) : array(null !== (_b = seriesSpec.radiusField) && void 0 !== _b ? _b : seriesSpec.valueField);
|
|
255
256
|
if (originalStateFields[s.id] = "link" === s.type ? [ "from_xField" ] : stateAxisHelper === xAxisHelper ? xField : yField,
|
|
256
|
-
|
|
257
|
+
isContinuous(stateAxisHelper.getScale(0).type) ? (isCategoryState = !1, stateFields.push(originalStateFields[s.id])) : stateFields.push(originalStateFields[s.id][0]),
|
|
257
258
|
this._valueField) {
|
|
258
259
|
const valueField = "link" === s.type ? [ "from_yField" ] : valueAxisHelper === xAxisHelper ? xField : yField;
|
|
259
|
-
|
|
260
|
+
isContinuous(valueAxisHelper.getScale(0).type) && valueFields.push(...valueField);
|
|
260
261
|
}
|
|
261
262
|
}), {
|
|
262
263
|
userId: this._seriesUserId,
|
|
@@ -279,7 +280,8 @@ export class DataFilterBaseComponent extends BaseComponent {
|
|
|
279
280
|
input: {
|
|
280
281
|
dataCollection: dataCollection,
|
|
281
282
|
stateFields: stateFields,
|
|
282
|
-
valueFields: valueFields
|
|
283
|
+
valueFields: valueFields,
|
|
284
|
+
isCategoryState: isCategoryState
|
|
283
285
|
},
|
|
284
286
|
output: {
|
|
285
287
|
stateField: this._stateField,
|