@visactor/vseed 0.4.27 → 0.4.28
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/dist/cjs/index.cjs +2 -2
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/esm/pipeline/spec/chart/pipes/annotation/annotationDifferenceLine.js +63 -10
- package/dist/esm/pipeline/spec/chart/pipes/annotation/annotationDifferenceLine.js.map +1 -1
- package/dist/esm/pipeline/spec/chart/pipes/annotation/annotationPointCommon.d.ts +1 -0
- package/dist/esm/pipeline/spec/chart/pipes/annotation/annotationPointCommon.js +8 -3
- package/dist/esm/pipeline/spec/chart/pipes/annotation/annotationPointCommon.js.map +1 -1
- package/dist/esm/pipeline/spec/chart/pipes/annotation/annotationPointOfDualAxis.js +3 -3
- package/dist/esm/pipeline/spec/chart/pipes/annotation/annotationPointOfDualAxis.js.map +1 -1
- package/dist/esm/types/chartType/area/zArea.d.ts +2 -0
- package/dist/esm/types/chartType/areaPercent/zAreaPercent.d.ts +2 -0
- package/dist/esm/types/chartType/bar/zBar.d.ts +2 -0
- package/dist/esm/types/chartType/barParallel/zBarParallel.d.ts +2 -0
- package/dist/esm/types/chartType/barPercent/zBarPercent.d.ts +2 -0
- package/dist/esm/types/chartType/boxPlot/zBoxPlot.d.ts +2 -0
- package/dist/esm/types/chartType/column/zColumn.d.ts +2 -0
- package/dist/esm/types/chartType/columnParallel/zColumnParallel.d.ts +2 -0
- package/dist/esm/types/chartType/columnPercent/zColumnPercent.d.ts +2 -0
- package/dist/esm/types/chartType/dualAxis/zDualAxis.d.ts +2 -0
- package/dist/esm/types/chartType/histogram/zHistogram.d.ts +2 -0
- package/dist/esm/types/chartType/line/zLine.d.ts +2 -0
- package/dist/esm/types/chartType/raceBar/zRaceBar.d.ts +2 -0
- package/dist/esm/types/chartType/raceColumn/zRaceColumn.d.ts +2 -0
- package/dist/esm/types/chartType/raceLine/zRaceLine.d.ts +2 -0
- package/dist/esm/types/chartType/raceScatter/zRaceScatter.d.ts +2 -0
- package/dist/esm/types/chartType/scatter/zScatter.d.ts +2 -0
- package/dist/esm/types/properties/annotation/annotation.d.ts +2 -0
- package/dist/esm/types/properties/annotation/annotationPoint.d.ts +4 -0
- package/dist/esm/types/properties/annotation/zAnnotationPoint.d.ts +1 -0
- package/dist/esm/types/properties/annotation/zAnnotationPoint.js +1 -0
- package/dist/esm/types/properties/annotation/zAnnotationPoint.js.map +1 -1
- package/dist/esm/types/properties/config/annotation/zAnnotation.js +1 -0
- package/dist/esm/types/properties/config/annotation/zAnnotation.js.map +1 -1
- package/dist/umd/index.js +78 -28
- package/dist/umd/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -2,18 +2,19 @@ import { autoFormatter, createFormatter, findAllMeasures } from "../../../../uti
|
|
|
2
2
|
import { isDimensionSelector, isFieldSelector, isMeasureSelector, isPartialDatumSelector } from "../../../../../dataSelector/index.js";
|
|
3
3
|
import { isEmpty } from "remeda";
|
|
4
4
|
import { ANNOTATION_Z_INDEX } from "../../../../utils/constant.js";
|
|
5
|
-
import { buildDifferenceCoordinateDatum, buildDifferenceText, getDifferenceLineStackResolveMode, getRuntimeDifferenceValue,
|
|
5
|
+
import { buildDifferenceCoordinateDatum, buildDifferenceText, getDifferenceLineStackResolveMode, getRuntimeDifferenceValue, resolveDifferenceAnchor, usesDifferenceLineElementStackEnd } from "./annotationDifferenceLineCommon.js";
|
|
6
6
|
const DEFAULT_LINE_COLOR = '#BCC1CB';
|
|
7
7
|
const DEFAULT_TEXT_COLOR = '#ffffff';
|
|
8
8
|
const DEFAULT_TEXT_BACKGROUND_COLOR = '#BCC1CB';
|
|
9
9
|
const DEFAULT_TEXT_FONT_SIZE = 12;
|
|
10
|
-
const DEFAULT_EXPAND_DISTANCE = 24;
|
|
11
10
|
const DEFAULT_LINE_WIDTH = 2;
|
|
12
11
|
const DEFAULT_CORNER_RADIUS = 4;
|
|
13
12
|
const DEFAULT_LABEL_PADDING = 4;
|
|
14
13
|
const DEFAULT_END_SYMBOL_SIZE = 12;
|
|
15
14
|
const DEFAULT_END_SYMBOL_REF_X = -4;
|
|
16
|
-
const
|
|
15
|
+
const DEFAULT_GUTTER_BASE_OFFSET = 20;
|
|
16
|
+
const DEFAULT_GUTTER_RIGHT_PADDING = 44;
|
|
17
|
+
const DEFAULT_GUTTER_TOP_PADDING = 36;
|
|
17
18
|
const DEFAULT_BRACKET_LINE_DASH = [
|
|
18
19
|
2,
|
|
19
20
|
2
|
|
@@ -29,6 +30,54 @@ const toArray = (value)=>{
|
|
|
29
30
|
value
|
|
30
31
|
];
|
|
31
32
|
};
|
|
33
|
+
const normalizeRegionPadding = (padding)=>{
|
|
34
|
+
if ('number' == typeof padding) return {
|
|
35
|
+
top: padding,
|
|
36
|
+
right: padding,
|
|
37
|
+
bottom: padding,
|
|
38
|
+
left: padding
|
|
39
|
+
};
|
|
40
|
+
return {
|
|
41
|
+
top: padding?.top ?? 0,
|
|
42
|
+
right: padding?.right ?? 0,
|
|
43
|
+
bottom: padding?.bottom ?? 0,
|
|
44
|
+
left: padding?.left ?? 0
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
const mergeDifferenceLineRegionPadding = (spec, paddingPatch)=>{
|
|
48
|
+
const region = spec.region;
|
|
49
|
+
if (!Array.isArray(region) || 0 === region.length) return spec;
|
|
50
|
+
const mergedPadding = normalizeRegionPadding(region[0].padding);
|
|
51
|
+
if (void 0 !== paddingPatch.top) mergedPadding.top = Math.max(mergedPadding.top, paddingPatch.top);
|
|
52
|
+
if (void 0 !== paddingPatch.right) mergedPadding.right = Math.max(mergedPadding.right, paddingPatch.right);
|
|
53
|
+
if (void 0 !== paddingPatch.bottom) mergedPadding.bottom = Math.max(mergedPadding.bottom, paddingPatch.bottom);
|
|
54
|
+
if (void 0 !== paddingPatch.left) mergedPadding.left = Math.max(mergedPadding.left, paddingPatch.left);
|
|
55
|
+
return {
|
|
56
|
+
...spec,
|
|
57
|
+
region: [
|
|
58
|
+
{
|
|
59
|
+
...region[0],
|
|
60
|
+
padding: mergedPadding
|
|
61
|
+
},
|
|
62
|
+
...region.slice(1)
|
|
63
|
+
]
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
const buildFixedGutterExpandDistance = (isHorizontalChart)=>(_markerData, context)=>{
|
|
67
|
+
const region = context?.region;
|
|
68
|
+
const coordinatePoints = Array.isArray(context?.coordinatePoints) ? context.coordinatePoints : [];
|
|
69
|
+
if (!region || 0 === coordinatePoints.length) return 0;
|
|
70
|
+
const { x: regionStartX, y: regionStartY } = region.getLayoutStartPoint();
|
|
71
|
+
const { width } = region.getLayoutRect();
|
|
72
|
+
if (isHorizontalChart) {
|
|
73
|
+
const targetY = regionStartY - DEFAULT_GUTTER_BASE_OFFSET;
|
|
74
|
+
const minY = Math.min(...coordinatePoints.map((point)=>point.y));
|
|
75
|
+
return Math.max(0, minY - targetY);
|
|
76
|
+
}
|
|
77
|
+
const targetX = regionStartX + width + DEFAULT_GUTTER_BASE_OFFSET;
|
|
78
|
+
const maxX = Math.max(...coordinatePoints.map((point)=>point.x));
|
|
79
|
+
return Math.max(0, targetX - maxX);
|
|
80
|
+
};
|
|
32
81
|
const getAxisFormatter = (spec)=>{
|
|
33
82
|
const valueAxisOrient = 'horizontal' === spec.direction ? 'bottom' : 'left';
|
|
34
83
|
const formatMethod = spec.axes?.find((axis)=>axis.orient === valueAxisOrient)?.label?.formatMethod;
|
|
@@ -96,6 +145,7 @@ const annotationDifferenceLine_annotationDifferenceLine = (spec, context)=>{
|
|
|
96
145
|
const measureIds = measures.map((measure)=>measure.id);
|
|
97
146
|
const axisFormatter = getAxisFormatter(chartSpec);
|
|
98
147
|
const percentFormatter = createFormatter(DEFAULT_PERCENT_DIFFERENCE_FORMAT);
|
|
148
|
+
const isHorizontalChart = 'horizontal' === chartSpec.direction;
|
|
99
149
|
const markLine = annotationDifferenceLineList.flatMap((annotationDifferenceLine, index)=>{
|
|
100
150
|
try {
|
|
101
151
|
assertDifferenceLineConfig(annotationDifferenceLine, getDifferenceLinePath(index, annotationDifferenceLineList.length));
|
|
@@ -119,11 +169,8 @@ const annotationDifferenceLine_annotationDifferenceLine = (spec, context)=>{
|
|
|
119
169
|
if (start.mode !== end.mode) return [];
|
|
120
170
|
const usesRuntimeStackEnd = useElementStackEnd || ('column' === vseed.chartType || 'bar' === vseed.chartType) && 'element' === start.mode && 'auto' === stackResolveMode;
|
|
121
171
|
const useBracketStyle = isBracketChart || ('column' === vseed.chartType || 'bar' === vseed.chartType) && 'element' === start.mode && 'auto' === stackResolveMode;
|
|
122
|
-
const
|
|
123
|
-
const
|
|
124
|
-
start.value,
|
|
125
|
-
end.value
|
|
126
|
-
]);
|
|
172
|
+
const connectDirection = isHorizontalChart ? 'top' : 'right';
|
|
173
|
+
const expandDistance = buildFixedGutterExpandDistance(isHorizontalChart);
|
|
127
174
|
const lineColor = annotationDifferenceLine.lineColor ?? theme?.lineColor ?? DEFAULT_LINE_COLOR;
|
|
128
175
|
const textColor = annotationDifferenceLine.textColor ?? theme?.textColor ?? DEFAULT_TEXT_COLOR;
|
|
129
176
|
const textBackgroundColor = annotationDifferenceLine.textBackgroundColor ?? theme?.textBackgroundColor ?? DEFAULT_TEXT_BACKGROUND_COLOR;
|
|
@@ -195,7 +242,7 @@ const annotationDifferenceLine_annotationDifferenceLine = (spec, context)=>{
|
|
|
195
242
|
autoRange: true,
|
|
196
243
|
zIndex: ANNOTATION_Z_INDEX,
|
|
197
244
|
connectDirection,
|
|
198
|
-
expandDistance
|
|
245
|
+
expandDistance,
|
|
199
246
|
coordinates: (seriesData, relativeSeries)=>{
|
|
200
247
|
try {
|
|
201
248
|
return [
|
|
@@ -268,13 +315,19 @@ const annotationDifferenceLine_annotationDifferenceLine = (spec, context)=>{
|
|
|
268
315
|
}
|
|
269
316
|
});
|
|
270
317
|
const specMarkLine = chartSpec.markLine || [];
|
|
271
|
-
|
|
318
|
+
const nextSpec = {
|
|
272
319
|
...spec,
|
|
273
320
|
markLine: [
|
|
274
321
|
...specMarkLine,
|
|
275
322
|
...markLine
|
|
276
323
|
]
|
|
277
324
|
};
|
|
325
|
+
if (0 === markLine.length) return nextSpec;
|
|
326
|
+
return mergeDifferenceLineRegionPadding(nextSpec, isHorizontalChart ? {
|
|
327
|
+
top: DEFAULT_GUTTER_TOP_PADDING
|
|
328
|
+
} : {
|
|
329
|
+
right: DEFAULT_GUTTER_RIGHT_PADDING
|
|
330
|
+
});
|
|
278
331
|
};
|
|
279
332
|
export { annotationDifferenceLine_annotationDifferenceLine as annotationDifferenceLine };
|
|
280
333
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline/spec/chart/pipes/annotation/annotationDifferenceLine.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/annotation/annotationDifferenceLine.ts"],"sourcesContent":["import type { IAreaChartSpec, IBarChartSpec, ICartesianSeries, ILineChartSpec, IMarkLineSpec } from '@visactor/vchart'\nimport type { AnnotationDifferenceLine, Measure, VChartSpecPipe } from 'src/types'\nimport { createFormatter, findAllMeasures, autoFormatter } from '../../../../utils'\nimport {\n isDimensionSelector,\n isFieldSelector,\n isMeasureSelector,\n isPartialDatumSelector,\n} from '../../../../../dataSelector'\nimport { isEmpty } from 'remeda'\nimport { ANNOTATION_Z_INDEX } from '../../../../utils/constant'\nimport {\n buildDifferenceCoordinateDatum,\n buildDifferenceText,\n getDifferenceLineStackResolveMode,\n getRuntimeDifferenceValue,\n inferDifferenceBracketDirection,\n inferDifferenceConnectDirection,\n type ResolvedDifferenceAnchor,\n usesDifferenceLineElementStackEnd,\n resolveDifferenceAnchor,\n} from './annotationDifferenceLineCommon'\n\nconst DEFAULT_LINE_COLOR = '#BCC1CB'\nconst DEFAULT_TEXT_COLOR = '#ffffff'\nconst DEFAULT_TEXT_BACKGROUND_COLOR = '#BCC1CB'\nconst DEFAULT_TEXT_FONT_SIZE = 12\nconst DEFAULT_EXPAND_DISTANCE = 24\nconst DEFAULT_LINE_WIDTH = 2\nconst DEFAULT_CORNER_RADIUS = 4\nconst DEFAULT_LABEL_PADDING = 4\nconst DEFAULT_END_SYMBOL_SIZE = 12\nconst DEFAULT_END_SYMBOL_REF_X = -4\nconst DEFAULT_BRACKET_EXPAND_DISTANCE = 80\nconst DEFAULT_BRACKET_LINE_DASH: [number, number] = [2, 2]\nconst DEFAULT_PERCENT_DIFFERENCE_FORMAT = {\n type: 'percent' as const,\n fractionDigits: 2,\n}\n\nconst getDifferenceLinePath = (index: number, total: number) =>\n total === 1 ? 'annotationDifferenceLine' : `annotationDifferenceLine[${index}]`\n\nconst toArray = <T>(value: T | T[] | undefined | null): T[] => {\n if (Array.isArray(value)) {\n return value\n }\n\n return value === undefined || value === null ? [] : [value]\n}\n\nconst getAxisFormatter = (spec: IBarChartSpec | ILineChartSpec | IAreaChartSpec) => {\n const valueAxisOrient = spec.direction === 'horizontal' ? 'bottom' : 'left'\n const formatMethod = spec.axes?.find((axis) => axis.orient === valueAxisOrient)?.label?.formatMethod\n\n return typeof formatMethod === 'function'\n ? (value: number) => String(formatMethod(value as never) ?? value)\n : undefined\n}\n\nconst getExplicitMeasureFormat = (measure?: Measure) => {\n if (measure?.numFormat && !isEmpty(measure.numFormat)) {\n return measure.numFormat\n }\n\n if (measure?.format && !isEmpty(measure.format)) {\n return measure.format\n }\n\n return undefined\n}\n\nconst inferMeasureIdFromDatum = (anchor: ResolvedDifferenceAnchor, measureIds: string[]) => {\n const candidateValues = [anchor.matchedDatum, anchor.coordinateDatum]\n\n for (const datum of candidateValues) {\n if (!datum) {\n continue\n }\n\n const candidates = measureIds.filter((measureId) => Number(datum[measureId]) === anchor.value)\n\n if (candidates.length === 1) {\n return candidates[0]\n }\n }\n\n return undefined\n}\n\nconst inferMeasureIdFromSelector = (\n selectorValue: AnnotationDifferenceLine['start']['selector'],\n measureIdSet: Set<string>,\n) => {\n const matchedMeasureIds = new Set<string>()\n\n for (const currentSelector of toArray(selectorValue)) {\n if (isMeasureSelector(currentSelector)) {\n if (measureIdSet.has(currentSelector.field)) {\n matchedMeasureIds.add(currentSelector.field)\n }\n continue\n }\n\n if (isFieldSelector(currentSelector) || isDimensionSelector(currentSelector)) {\n continue\n }\n\n if (isPartialDatumSelector(currentSelector)) {\n Object.keys(currentSelector).forEach((field) => {\n if (measureIdSet.has(field)) {\n matchedMeasureIds.add(field)\n }\n })\n }\n }\n\n return matchedMeasureIds.size === 1 ? Array.from(matchedMeasureIds)[0] : undefined\n}\n\nconst resolveDifferenceMeasureId = (\n anchor: ResolvedDifferenceAnchor,\n selectorValue: AnnotationDifferenceLine['start']['selector'],\n measureIds: string[],\n) => {\n if (anchor.mode !== 'element') {\n return undefined\n }\n\n if (measureIds.length === 1) {\n return measureIds[0]\n }\n\n const measureIdSet = new Set(measureIds)\n return inferMeasureIdFromSelector(selectorValue, measureIdSet) ?? inferMeasureIdFromDatum(anchor, measureIds)\n}\n\nconst assertDifferenceLineConfig: (value: unknown, path: string) => asserts value is AnnotationDifferenceLine = (\n value,\n path,\n) => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n throw new Error(`${path} must be an object`)\n }\n\n const start = (value as Record<string, unknown>).start\n if (typeof start !== 'object' || start === null || Array.isArray(start)) {\n throw new Error(`${path}.start is required`)\n }\n if ((start as Record<string, unknown>).selector == null) {\n throw new Error(`${path}.start.selector is required`)\n }\n\n const end = (value as Record<string, unknown>).end\n if (typeof end !== 'object' || end === null || Array.isArray(end)) {\n throw new Error(`${path}.end is required`)\n }\n if ((end as Record<string, unknown>).selector == null) {\n throw new Error(`${path}.end.selector is required`)\n }\n}\n\nexport const annotationDifferenceLine: VChartSpecPipe = (spec, context) => {\n const { advancedVSeed, vseed } = context\n const annotationDifferenceLine = advancedVSeed.annotation?.annotationDifferenceLine\n\n if (!annotationDifferenceLine) {\n return spec\n }\n\n const theme = advancedVSeed.config?.[vseed.chartType as 'column']?.annotation?.annotationDifferenceLine\n const annotationDifferenceLineList = Array.isArray(annotationDifferenceLine)\n ? annotationDifferenceLine\n : [annotationDifferenceLine]\n const dataset = advancedVSeed.dataset.flat()\n const chartSpec = spec as IBarChartSpec | ILineChartSpec | IAreaChartSpec\n const stackResolveMode = getDifferenceLineStackResolveMode(vseed, advancedVSeed)\n const useElementStackEnd = usesDifferenceLineElementStackEnd(vseed, advancedVSeed)\n const isBracketChart = vseed.chartType === 'line' || vseed.chartType === 'area'\n const measures = findAllMeasures(advancedVSeed.measures)\n const measureIds = measures.map((measure) => measure.id)\n const axisFormatter = getAxisFormatter(chartSpec)\n const percentFormatter = createFormatter(DEFAULT_PERCENT_DIFFERENCE_FORMAT)\n\n const markLine = annotationDifferenceLineList.flatMap((annotationDifferenceLine, index) => {\n try {\n assertDifferenceLineConfig(\n annotationDifferenceLine,\n getDifferenceLinePath(index, annotationDifferenceLineList.length),\n )\n\n const start = resolveDifferenceAnchor({\n dataset,\n selectorLabel: 'start',\n selectorValue: annotationDifferenceLine.start.selector,\n spec: chartSpec,\n stackResolveMode,\n allowSelectorFallback: !useElementStackEnd,\n })\n const end = resolveDifferenceAnchor({\n dataset,\n selectorLabel: 'end',\n selectorValue: annotationDifferenceLine.end.selector,\n spec: chartSpec,\n stackResolveMode,\n allowSelectorFallback: !useElementStackEnd,\n })\n\n if (!start || !end) {\n return []\n }\n\n if (start.mode !== end.mode) {\n return []\n }\n\n const usesRuntimeStackEnd =\n useElementStackEnd ||\n ((vseed.chartType === 'column' || vseed.chartType === 'bar') &&\n start.mode === 'element' &&\n stackResolveMode === 'auto')\n const useBracketStyle =\n isBracketChart ||\n ((vseed.chartType === 'column' || vseed.chartType === 'bar') &&\n start.mode === 'element' &&\n stackResolveMode === 'auto')\n const isStackedBarElementBracket =\n vseed.chartType === 'bar' && start.mode === 'element' && stackResolveMode === 'auto'\n const connectDirection = useBracketStyle\n ? isStackedBarElementBracket\n ? 'top'\n : inferDifferenceBracketDirection(start, end)\n : inferDifferenceConnectDirection(vseed, [start.value, end.value])\n\n const lineColor = annotationDifferenceLine.lineColor ?? theme?.lineColor ?? DEFAULT_LINE_COLOR\n const textColor = annotationDifferenceLine.textColor ?? theme?.textColor ?? DEFAULT_TEXT_COLOR\n const textBackgroundColor =\n annotationDifferenceLine.textBackgroundColor ?? theme?.textBackgroundColor ?? DEFAULT_TEXT_BACKGROUND_COLOR\n const textFontSize = annotationDifferenceLine.textFontSize ?? theme?.textFontSize ?? DEFAULT_TEXT_FONT_SIZE\n const differenceType = annotationDifferenceLine.differenceType ?? 'absolute'\n const startMeasureId = resolveDifferenceMeasureId(start, annotationDifferenceLine.start.selector, measureIds)\n const endMeasureId = resolveDifferenceMeasureId(end, annotationDifferenceLine.end.selector, measureIds)\n const sameMeasure = startMeasureId !== undefined && startMeasureId === endMeasureId\n const explicitMeasureFormat = sameMeasure\n ? getExplicitMeasureFormat(measures.find((measure) => measure.id === startMeasureId))\n : undefined\n const differenceFormatter =\n differenceType === 'percent'\n ? percentFormatter\n : explicitMeasureFormat\n ? createFormatter(explicitMeasureFormat)\n : (axisFormatter ?? autoFormatter)\n\n const label = usesRuntimeStackEnd\n ? {\n visible: true,\n position: 'middle',\n refY: 0,\n formatMethod: (_markData: any[], seriesData: any[]) => {\n try {\n return buildDifferenceText(\n getRuntimeDifferenceValue({\n anchor: start,\n seriesData,\n useElementStackEnd: usesRuntimeStackEnd,\n }),\n getRuntimeDifferenceValue({\n anchor: end,\n seriesData,\n useElementStackEnd: usesRuntimeStackEnd,\n }),\n differenceType,\n differenceFormatter,\n )\n } catch {\n return ''\n }\n },\n style: {\n fill: textColor,\n fontSize: textFontSize,\n },\n labelBackground: {\n visible: true,\n padding: DEFAULT_LABEL_PADDING,\n style: {\n fill: textBackgroundColor,\n fillOpacity: 1,\n stroke: lineColor,\n lineWidth: 1,\n cornerRadius: DEFAULT_CORNER_RADIUS,\n },\n },\n }\n : {\n visible: true,\n position: 'middle',\n refY: 0,\n text: buildDifferenceText(start.value, end.value, differenceType, differenceFormatter),\n style: {\n fill: textColor,\n fontSize: textFontSize,\n },\n labelBackground: {\n visible: true,\n padding: DEFAULT_LABEL_PADDING,\n style: {\n fill: textBackgroundColor,\n fillOpacity: 1,\n stroke: lineColor,\n lineWidth: 1,\n cornerRadius: DEFAULT_CORNER_RADIUS,\n },\n },\n }\n\n return [\n {\n type: 'type-step',\n autoRange: true,\n zIndex: ANNOTATION_Z_INDEX,\n connectDirection,\n expandDistance: useBracketStyle ? DEFAULT_BRACKET_EXPAND_DISTANCE : DEFAULT_EXPAND_DISTANCE,\n coordinates: (seriesData: any[], relativeSeries: ICartesianSeries) => {\n try {\n return [\n buildDifferenceCoordinateDatum({\n anchor: start,\n seriesData,\n relativeSeries,\n useElementStackEnd: usesRuntimeStackEnd,\n }),\n buildDifferenceCoordinateDatum({\n anchor: end,\n seriesData,\n relativeSeries,\n useElementStackEnd: usesRuntimeStackEnd,\n }),\n ]\n } catch {\n return []\n }\n },\n line: useBracketStyle\n ? {\n multiSegment: true,\n mainSegmentIndex: 1,\n style: [\n {\n visible: true,\n stroke: lineColor,\n lineWidth: DEFAULT_LINE_WIDTH,\n lineDash: DEFAULT_BRACKET_LINE_DASH,\n },\n {\n visible: true,\n stroke: lineColor,\n lineWidth: DEFAULT_LINE_WIDTH,\n },\n {\n visible: true,\n stroke: lineColor,\n lineWidth: DEFAULT_LINE_WIDTH,\n lineDash: DEFAULT_BRACKET_LINE_DASH,\n },\n ],\n }\n : {\n style: {\n visible: true,\n stroke: lineColor,\n lineWidth: DEFAULT_LINE_WIDTH,\n lineDash: [0],\n cornerRadius: DEFAULT_CORNER_RADIUS,\n },\n },\n label,\n startSymbol: {\n visible: false,\n },\n endSymbol: {\n visible: true,\n size: DEFAULT_END_SYMBOL_SIZE,\n refX: DEFAULT_END_SYMBOL_REF_X,\n style: {\n fill: lineColor,\n },\n },\n } as IMarkLineSpec,\n ]\n } catch {\n return []\n }\n })\n\n const specMarkLine = (chartSpec.markLine as IMarkLineSpec[]) || []\n\n return {\n ...spec,\n markLine: [...specMarkLine, ...markLine],\n }\n}\n"],"names":["DEFAULT_LINE_COLOR","DEFAULT_TEXT_COLOR","DEFAULT_TEXT_BACKGROUND_COLOR","DEFAULT_TEXT_FONT_SIZE","DEFAULT_EXPAND_DISTANCE","DEFAULT_LINE_WIDTH","DEFAULT_CORNER_RADIUS","DEFAULT_LABEL_PADDING","DEFAULT_END_SYMBOL_SIZE","DEFAULT_END_SYMBOL_REF_X","DEFAULT_BRACKET_EXPAND_DISTANCE","DEFAULT_BRACKET_LINE_DASH","DEFAULT_PERCENT_DIFFERENCE_FORMAT","getDifferenceLinePath","index","total","toArray","value","Array","getAxisFormatter","spec","valueAxisOrient","formatMethod","axis","String","undefined","getExplicitMeasureFormat","measure","isEmpty","inferMeasureIdFromDatum","anchor","measureIds","candidateValues","datum","candidates","measureId","Number","inferMeasureIdFromSelector","selectorValue","measureIdSet","matchedMeasureIds","Set","currentSelector","isMeasureSelector","isFieldSelector","isDimensionSelector","isPartialDatumSelector","Object","field","resolveDifferenceMeasureId","assertDifferenceLineConfig","path","Error","start","end","annotationDifferenceLine","context","advancedVSeed","vseed","theme","annotationDifferenceLineList","dataset","chartSpec","stackResolveMode","getDifferenceLineStackResolveMode","useElementStackEnd","usesDifferenceLineElementStackEnd","isBracketChart","measures","findAllMeasures","axisFormatter","percentFormatter","createFormatter","markLine","resolveDifferenceAnchor","usesRuntimeStackEnd","useBracketStyle","isStackedBarElementBracket","connectDirection","inferDifferenceBracketDirection","inferDifferenceConnectDirection","lineColor","textColor","textBackgroundColor","textFontSize","differenceType","startMeasureId","endMeasureId","sameMeasure","explicitMeasureFormat","differenceFormatter","autoFormatter","label","_markData","seriesData","buildDifferenceText","getRuntimeDifferenceValue","ANNOTATION_Z_INDEX","relativeSeries","buildDifferenceCoordinateDatum","specMarkLine"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pipeline/spec/chart/pipes/annotation/annotationDifferenceLine.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/annotation/annotationDifferenceLine.ts"],"sourcesContent":["import type { IAreaChartSpec, IBarChartSpec, ICartesianSeries, ILineChartSpec, IMarkLineSpec } from '@visactor/vchart'\nimport type { AnnotationDifferenceLine, Measure, RegionPadding, VChartSpecPipe } from 'src/types'\nimport { createFormatter, findAllMeasures, autoFormatter } from '../../../../utils'\nimport {\n isDimensionSelector,\n isFieldSelector,\n isMeasureSelector,\n isPartialDatumSelector,\n} from '../../../../../dataSelector'\nimport { isEmpty } from 'remeda'\nimport { ANNOTATION_Z_INDEX } from '../../../../utils/constant'\nimport {\n buildDifferenceCoordinateDatum,\n buildDifferenceText,\n getDifferenceLineStackResolveMode,\n getRuntimeDifferenceValue,\n type ResolvedDifferenceAnchor,\n usesDifferenceLineElementStackEnd,\n resolveDifferenceAnchor,\n} from './annotationDifferenceLineCommon'\n\nconst DEFAULT_LINE_COLOR = '#BCC1CB'\nconst DEFAULT_TEXT_COLOR = '#ffffff'\nconst DEFAULT_TEXT_BACKGROUND_COLOR = '#BCC1CB'\nconst DEFAULT_TEXT_FONT_SIZE = 12\nconst DEFAULT_LINE_WIDTH = 2\nconst DEFAULT_CORNER_RADIUS = 4\nconst DEFAULT_LABEL_PADDING = 4\nconst DEFAULT_END_SYMBOL_SIZE = 12\nconst DEFAULT_END_SYMBOL_REF_X = -4\nconst DEFAULT_GUTTER_BASE_OFFSET = 20\nconst DEFAULT_GUTTER_RIGHT_PADDING = 44\nconst DEFAULT_GUTTER_TOP_PADDING = 36\nconst DEFAULT_BRACKET_LINE_DASH: [number, number] = [2, 2]\nconst DEFAULT_PERCENT_DIFFERENCE_FORMAT = {\n type: 'percent' as const,\n fractionDigits: 2,\n}\n\ntype RegionPaddingObject = Required<Exclude<RegionPadding, number>>\n\nconst getDifferenceLinePath = (index: number, total: number) =>\n total === 1 ? 'annotationDifferenceLine' : `annotationDifferenceLine[${index}]`\n\nconst toArray = <T>(value: T | T[] | undefined | null): T[] => {\n if (Array.isArray(value)) {\n return value\n }\n\n return value === undefined || value === null ? [] : [value]\n}\n\nconst normalizeRegionPadding = (padding?: RegionPadding): RegionPaddingObject => {\n if (typeof padding === 'number') {\n return {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding,\n }\n }\n\n return {\n top: padding?.top ?? 0,\n right: padding?.right ?? 0,\n bottom: padding?.bottom ?? 0,\n left: padding?.left ?? 0,\n }\n}\n\nconst mergeDifferenceLineRegionPadding = (\n spec: IBarChartSpec | ILineChartSpec | IAreaChartSpec,\n paddingPatch: Partial<RegionPaddingObject>,\n) => {\n const region = (spec as { region?: Array<Record<string, unknown>> }).region\n\n if (!Array.isArray(region) || region.length === 0) {\n return spec\n }\n\n const mergedPadding = normalizeRegionPadding(region[0].padding as RegionPadding | undefined)\n\n if (paddingPatch.top !== undefined) {\n mergedPadding.top = Math.max(mergedPadding.top, paddingPatch.top)\n }\n\n if (paddingPatch.right !== undefined) {\n mergedPadding.right = Math.max(mergedPadding.right, paddingPatch.right)\n }\n\n if (paddingPatch.bottom !== undefined) {\n mergedPadding.bottom = Math.max(mergedPadding.bottom, paddingPatch.bottom)\n }\n\n if (paddingPatch.left !== undefined) {\n mergedPadding.left = Math.max(mergedPadding.left, paddingPatch.left)\n }\n\n return {\n ...spec,\n region: [\n {\n ...region[0],\n padding: mergedPadding,\n },\n ...region.slice(1),\n ],\n }\n}\n\nconst buildFixedGutterExpandDistance = (isHorizontalChart: boolean) => {\n return (_markerData: unknown, context: any) => {\n const region = context?.region\n const coordinatePoints = Array.isArray(context?.coordinatePoints) ? context.coordinatePoints : []\n\n if (!region || coordinatePoints.length === 0) {\n return 0\n }\n\n const { x: regionStartX, y: regionStartY } = region.getLayoutStartPoint()\n const { width } = region.getLayoutRect()\n\n if (isHorizontalChart) {\n const targetY = regionStartY - DEFAULT_GUTTER_BASE_OFFSET\n const minY = Math.min(...coordinatePoints.map((point: { y: number }) => point.y))\n\n return Math.max(0, minY - targetY)\n }\n\n const targetX = regionStartX + width + DEFAULT_GUTTER_BASE_OFFSET\n const maxX = Math.max(...coordinatePoints.map((point: { x: number }) => point.x))\n\n return Math.max(0, targetX - maxX)\n }\n}\n\nconst getAxisFormatter = (spec: IBarChartSpec | ILineChartSpec | IAreaChartSpec) => {\n const valueAxisOrient = spec.direction === 'horizontal' ? 'bottom' : 'left'\n const formatMethod = spec.axes?.find((axis) => axis.orient === valueAxisOrient)?.label?.formatMethod\n\n return typeof formatMethod === 'function'\n ? (value: number) => String(formatMethod(value as never) ?? value)\n : undefined\n}\n\nconst getExplicitMeasureFormat = (measure?: Measure) => {\n if (measure?.numFormat && !isEmpty(measure.numFormat)) {\n return measure.numFormat\n }\n\n if (measure?.format && !isEmpty(measure.format)) {\n return measure.format\n }\n\n return undefined\n}\n\nconst inferMeasureIdFromDatum = (anchor: ResolvedDifferenceAnchor, measureIds: string[]) => {\n const candidateValues = [anchor.matchedDatum, anchor.coordinateDatum]\n\n for (const datum of candidateValues) {\n if (!datum) {\n continue\n }\n\n const candidates = measureIds.filter((measureId) => Number(datum[measureId]) === anchor.value)\n\n if (candidates.length === 1) {\n return candidates[0]\n }\n }\n\n return undefined\n}\n\nconst inferMeasureIdFromSelector = (\n selectorValue: AnnotationDifferenceLine['start']['selector'],\n measureIdSet: Set<string>,\n) => {\n const matchedMeasureIds = new Set<string>()\n\n for (const currentSelector of toArray(selectorValue)) {\n if (isMeasureSelector(currentSelector)) {\n if (measureIdSet.has(currentSelector.field)) {\n matchedMeasureIds.add(currentSelector.field)\n }\n continue\n }\n\n if (isFieldSelector(currentSelector) || isDimensionSelector(currentSelector)) {\n continue\n }\n\n if (isPartialDatumSelector(currentSelector)) {\n Object.keys(currentSelector).forEach((field) => {\n if (measureIdSet.has(field)) {\n matchedMeasureIds.add(field)\n }\n })\n }\n }\n\n return matchedMeasureIds.size === 1 ? Array.from(matchedMeasureIds)[0] : undefined\n}\n\nconst resolveDifferenceMeasureId = (\n anchor: ResolvedDifferenceAnchor,\n selectorValue: AnnotationDifferenceLine['start']['selector'],\n measureIds: string[],\n) => {\n if (anchor.mode !== 'element') {\n return undefined\n }\n\n if (measureIds.length === 1) {\n return measureIds[0]\n }\n\n const measureIdSet = new Set(measureIds)\n return inferMeasureIdFromSelector(selectorValue, measureIdSet) ?? inferMeasureIdFromDatum(anchor, measureIds)\n}\n\nconst assertDifferenceLineConfig: (value: unknown, path: string) => asserts value is AnnotationDifferenceLine = (\n value,\n path,\n) => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n throw new Error(`${path} must be an object`)\n }\n\n const start = (value as Record<string, unknown>).start\n if (typeof start !== 'object' || start === null || Array.isArray(start)) {\n throw new Error(`${path}.start is required`)\n }\n if ((start as Record<string, unknown>).selector == null) {\n throw new Error(`${path}.start.selector is required`)\n }\n\n const end = (value as Record<string, unknown>).end\n if (typeof end !== 'object' || end === null || Array.isArray(end)) {\n throw new Error(`${path}.end is required`)\n }\n if ((end as Record<string, unknown>).selector == null) {\n throw new Error(`${path}.end.selector is required`)\n }\n}\n\nexport const annotationDifferenceLine: VChartSpecPipe = (spec, context) => {\n const { advancedVSeed, vseed } = context\n const annotationDifferenceLine = advancedVSeed.annotation?.annotationDifferenceLine\n\n if (!annotationDifferenceLine) {\n return spec\n }\n\n const theme = advancedVSeed.config?.[vseed.chartType as 'column']?.annotation?.annotationDifferenceLine\n const annotationDifferenceLineList = Array.isArray(annotationDifferenceLine)\n ? annotationDifferenceLine\n : [annotationDifferenceLine]\n const dataset = advancedVSeed.dataset.flat()\n const chartSpec = spec as IBarChartSpec | ILineChartSpec | IAreaChartSpec\n const stackResolveMode = getDifferenceLineStackResolveMode(vseed, advancedVSeed)\n const useElementStackEnd = usesDifferenceLineElementStackEnd(vseed, advancedVSeed)\n const isBracketChart = vseed.chartType === 'line' || vseed.chartType === 'area'\n const measures = findAllMeasures(advancedVSeed.measures)\n const measureIds = measures.map((measure) => measure.id)\n const axisFormatter = getAxisFormatter(chartSpec)\n const percentFormatter = createFormatter(DEFAULT_PERCENT_DIFFERENCE_FORMAT)\n const isHorizontalChart = chartSpec.direction === 'horizontal'\n\n const markLine = annotationDifferenceLineList.flatMap((annotationDifferenceLine, index) => {\n try {\n assertDifferenceLineConfig(\n annotationDifferenceLine,\n getDifferenceLinePath(index, annotationDifferenceLineList.length),\n )\n\n const start = resolveDifferenceAnchor({\n dataset,\n selectorLabel: 'start',\n selectorValue: annotationDifferenceLine.start.selector,\n spec: chartSpec,\n stackResolveMode,\n allowSelectorFallback: !useElementStackEnd,\n })\n const end = resolveDifferenceAnchor({\n dataset,\n selectorLabel: 'end',\n selectorValue: annotationDifferenceLine.end.selector,\n spec: chartSpec,\n stackResolveMode,\n allowSelectorFallback: !useElementStackEnd,\n })\n\n if (!start || !end) {\n return []\n }\n\n if (start.mode !== end.mode) {\n return []\n }\n\n const usesRuntimeStackEnd =\n useElementStackEnd ||\n ((vseed.chartType === 'column' || vseed.chartType === 'bar') &&\n start.mode === 'element' &&\n stackResolveMode === 'auto')\n const useBracketStyle =\n isBracketChart ||\n ((vseed.chartType === 'column' || vseed.chartType === 'bar') &&\n start.mode === 'element' &&\n stackResolveMode === 'auto')\n const connectDirection = isHorizontalChart ? 'top' : 'right'\n const expandDistance = buildFixedGutterExpandDistance(isHorizontalChart)\n\n const lineColor = annotationDifferenceLine.lineColor ?? theme?.lineColor ?? DEFAULT_LINE_COLOR\n const textColor = annotationDifferenceLine.textColor ?? theme?.textColor ?? DEFAULT_TEXT_COLOR\n const textBackgroundColor =\n annotationDifferenceLine.textBackgroundColor ?? theme?.textBackgroundColor ?? DEFAULT_TEXT_BACKGROUND_COLOR\n const textFontSize = annotationDifferenceLine.textFontSize ?? theme?.textFontSize ?? DEFAULT_TEXT_FONT_SIZE\n const differenceType = annotationDifferenceLine.differenceType ?? 'absolute'\n const startMeasureId = resolveDifferenceMeasureId(start, annotationDifferenceLine.start.selector, measureIds)\n const endMeasureId = resolveDifferenceMeasureId(end, annotationDifferenceLine.end.selector, measureIds)\n const sameMeasure = startMeasureId !== undefined && startMeasureId === endMeasureId\n const explicitMeasureFormat = sameMeasure\n ? getExplicitMeasureFormat(measures.find((measure) => measure.id === startMeasureId))\n : undefined\n const differenceFormatter =\n differenceType === 'percent'\n ? percentFormatter\n : explicitMeasureFormat\n ? createFormatter(explicitMeasureFormat)\n : (axisFormatter ?? autoFormatter)\n\n const label = usesRuntimeStackEnd\n ? {\n visible: true,\n position: 'middle',\n refY: 0,\n formatMethod: (_markData: any[], seriesData: any[]) => {\n try {\n return buildDifferenceText(\n getRuntimeDifferenceValue({\n anchor: start,\n seriesData,\n useElementStackEnd: usesRuntimeStackEnd,\n }),\n getRuntimeDifferenceValue({\n anchor: end,\n seriesData,\n useElementStackEnd: usesRuntimeStackEnd,\n }),\n differenceType,\n differenceFormatter,\n )\n } catch {\n return ''\n }\n },\n style: {\n fill: textColor,\n fontSize: textFontSize,\n },\n labelBackground: {\n visible: true,\n padding: DEFAULT_LABEL_PADDING,\n style: {\n fill: textBackgroundColor,\n fillOpacity: 1,\n stroke: lineColor,\n lineWidth: 1,\n cornerRadius: DEFAULT_CORNER_RADIUS,\n },\n },\n }\n : {\n visible: true,\n position: 'middle',\n refY: 0,\n text: buildDifferenceText(start.value, end.value, differenceType, differenceFormatter),\n style: {\n fill: textColor,\n fontSize: textFontSize,\n },\n labelBackground: {\n visible: true,\n padding: DEFAULT_LABEL_PADDING,\n style: {\n fill: textBackgroundColor,\n fillOpacity: 1,\n stroke: lineColor,\n lineWidth: 1,\n cornerRadius: DEFAULT_CORNER_RADIUS,\n },\n },\n }\n\n return [\n {\n type: 'type-step',\n autoRange: true,\n zIndex: ANNOTATION_Z_INDEX,\n connectDirection,\n expandDistance,\n coordinates: (seriesData: any[], relativeSeries: ICartesianSeries) => {\n try {\n return [\n buildDifferenceCoordinateDatum({\n anchor: start,\n seriesData,\n relativeSeries,\n useElementStackEnd: usesRuntimeStackEnd,\n }),\n buildDifferenceCoordinateDatum({\n anchor: end,\n seriesData,\n relativeSeries,\n useElementStackEnd: usesRuntimeStackEnd,\n }),\n ]\n } catch {\n return []\n }\n },\n line: useBracketStyle\n ? {\n multiSegment: true,\n mainSegmentIndex: 1,\n style: [\n {\n visible: true,\n stroke: lineColor,\n lineWidth: DEFAULT_LINE_WIDTH,\n lineDash: DEFAULT_BRACKET_LINE_DASH,\n },\n {\n visible: true,\n stroke: lineColor,\n lineWidth: DEFAULT_LINE_WIDTH,\n },\n {\n visible: true,\n stroke: lineColor,\n lineWidth: DEFAULT_LINE_WIDTH,\n lineDash: DEFAULT_BRACKET_LINE_DASH,\n },\n ],\n }\n : {\n style: {\n visible: true,\n stroke: lineColor,\n lineWidth: DEFAULT_LINE_WIDTH,\n lineDash: [0],\n cornerRadius: DEFAULT_CORNER_RADIUS,\n },\n },\n label,\n startSymbol: {\n visible: false,\n },\n endSymbol: {\n visible: true,\n size: DEFAULT_END_SYMBOL_SIZE,\n refX: DEFAULT_END_SYMBOL_REF_X,\n style: {\n fill: lineColor,\n },\n },\n } as IMarkLineSpec,\n ]\n } catch {\n return []\n }\n })\n\n const specMarkLine = (chartSpec.markLine as IMarkLineSpec[]) || []\n const nextSpec = {\n ...spec,\n markLine: [...specMarkLine, ...markLine],\n }\n\n if (markLine.length === 0) {\n return nextSpec\n }\n\n return mergeDifferenceLineRegionPadding(\n nextSpec as IBarChartSpec | ILineChartSpec | IAreaChartSpec,\n isHorizontalChart ? { top: DEFAULT_GUTTER_TOP_PADDING } : { right: DEFAULT_GUTTER_RIGHT_PADDING },\n )\n}\n"],"names":["DEFAULT_LINE_COLOR","DEFAULT_TEXT_COLOR","DEFAULT_TEXT_BACKGROUND_COLOR","DEFAULT_TEXT_FONT_SIZE","DEFAULT_LINE_WIDTH","DEFAULT_CORNER_RADIUS","DEFAULT_LABEL_PADDING","DEFAULT_END_SYMBOL_SIZE","DEFAULT_END_SYMBOL_REF_X","DEFAULT_GUTTER_BASE_OFFSET","DEFAULT_GUTTER_RIGHT_PADDING","DEFAULT_GUTTER_TOP_PADDING","DEFAULT_BRACKET_LINE_DASH","DEFAULT_PERCENT_DIFFERENCE_FORMAT","getDifferenceLinePath","index","total","toArray","value","Array","normalizeRegionPadding","padding","mergeDifferenceLineRegionPadding","spec","paddingPatch","region","mergedPadding","undefined","Math","buildFixedGutterExpandDistance","isHorizontalChart","_markerData","context","coordinatePoints","regionStartX","regionStartY","width","targetY","minY","point","targetX","maxX","getAxisFormatter","valueAxisOrient","formatMethod","axis","String","getExplicitMeasureFormat","measure","isEmpty","inferMeasureIdFromDatum","anchor","measureIds","candidateValues","datum","candidates","measureId","Number","inferMeasureIdFromSelector","selectorValue","measureIdSet","matchedMeasureIds","Set","currentSelector","isMeasureSelector","isFieldSelector","isDimensionSelector","isPartialDatumSelector","Object","field","resolveDifferenceMeasureId","assertDifferenceLineConfig","path","Error","start","end","annotationDifferenceLine","advancedVSeed","vseed","theme","annotationDifferenceLineList","dataset","chartSpec","stackResolveMode","getDifferenceLineStackResolveMode","useElementStackEnd","usesDifferenceLineElementStackEnd","isBracketChart","measures","findAllMeasures","axisFormatter","percentFormatter","createFormatter","markLine","resolveDifferenceAnchor","usesRuntimeStackEnd","useBracketStyle","connectDirection","expandDistance","lineColor","textColor","textBackgroundColor","textFontSize","differenceType","startMeasureId","endMeasureId","sameMeasure","explicitMeasureFormat","differenceFormatter","autoFormatter","label","_markData","seriesData","buildDifferenceText","getRuntimeDifferenceValue","ANNOTATION_Z_INDEX","relativeSeries","buildDifferenceCoordinateDatum","specMarkLine","nextSpec"],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ export declare const generateAnnotationPointPipe: (options: {
|
|
|
4
4
|
findSelectedDatas?: (options: {
|
|
5
5
|
dataset: Datum[];
|
|
6
6
|
selector: Selector | Selectors | undefined | null;
|
|
7
|
+
measureId?: string | null;
|
|
7
8
|
dynamicFilter?: ChartDynamicFilter;
|
|
8
9
|
spec: ISpec;
|
|
9
10
|
context: SpecPipelineContext;
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { selector, selectorWithDynamicFilter } from "../../../../../dataSelector/index.js";
|
|
2
|
+
import { MeasureId } from "../../../../../dataReshape/constant.js";
|
|
2
3
|
import { isSubset } from "./utils.js";
|
|
3
4
|
import { ANNOTATION_Z_INDEX } from "../../../../utils/constant.js";
|
|
4
5
|
import { isBarLikeChart } from "../../../../utils/chatType.js";
|
|
5
6
|
const generateAnnotationPointPipe = (options)=>{
|
|
6
7
|
const findSelectedDatas = options.findSelectedDatas ?? ((opts)=>{
|
|
7
|
-
const { dataset, selector: s, dynamicFilter } = opts;
|
|
8
|
-
return dataset.filter((datum)=>
|
|
8
|
+
const { dataset, selector: s, measureId, dynamicFilter } = opts;
|
|
9
|
+
return dataset.filter((datum)=>{
|
|
10
|
+
const isSelected = dynamicFilter ? selectorWithDynamicFilter(datum, dynamicFilter, s) : selector(datum, s);
|
|
11
|
+
return isSelected && (!measureId || datum[MeasureId] === measureId);
|
|
12
|
+
});
|
|
9
13
|
});
|
|
10
14
|
const generateMarkPoint = options.generateMarkPoint ?? ((datum)=>[
|
|
11
15
|
{
|
|
@@ -43,11 +47,12 @@ const generateAnnotationPointPipe = (options)=>{
|
|
|
43
47
|
textBaseline: 'top'
|
|
44
48
|
};
|
|
45
49
|
const markPoint = annotationPointList.flatMap((annotationPoint)=>{
|
|
46
|
-
const { selector: selectorPoint, dynamicFilter, text = '', textColor = theme?.textColor ?? '#ffffff', textFontSize = theme?.textFontSize ?? 12, textFontWeight = theme?.textFontWeight ?? 400, textAlign = defaultStyle.textAlign, textBaseline = defaultStyle.textBaseline, textBackgroundBorderColor = theme?.textBackgroundBorderColor, textBackgroundBorderRadius = theme?.textBackgroundBorderRadius ?? 4, textBackgroundBorderWidth = theme?.textBackgroundBorderWidth ?? 1, textBackgroundColor = theme?.textBackgroundColor ?? '#212121', textBackgroundPadding = theme?.textBackgroundPadding ?? 2, textBackgroundVisible = theme?.textBackgroundVisible ?? true, offsetX = theme?.offsetX ?? 0, offsetY = theme?.offsetY ?? 0 } = annotationPoint;
|
|
50
|
+
const { selector: selectorPoint, measureId, dynamicFilter, text = '', textColor = theme?.textColor ?? '#ffffff', textFontSize = theme?.textFontSize ?? 12, textFontWeight = theme?.textFontWeight ?? 400, textAlign = defaultStyle.textAlign, textBaseline = defaultStyle.textBaseline, textBackgroundBorderColor = theme?.textBackgroundBorderColor, textBackgroundBorderRadius = theme?.textBackgroundBorderRadius ?? 4, textBackgroundBorderWidth = theme?.textBackgroundBorderWidth ?? 1, textBackgroundColor = theme?.textBackgroundColor ?? '#212121', textBackgroundPadding = theme?.textBackgroundPadding ?? 2, textBackgroundVisible = theme?.textBackgroundVisible ?? true, offsetX = theme?.offsetX ?? 0, offsetY = theme?.offsetY ?? 0 } = annotationPoint;
|
|
47
51
|
const dataset = advancedVSeed.dataset.flat();
|
|
48
52
|
const selectedData = selectorPoint || dynamicFilter ? findSelectedDatas({
|
|
49
53
|
dataset,
|
|
50
54
|
selector: selectorPoint,
|
|
55
|
+
measureId,
|
|
51
56
|
dynamicFilter,
|
|
52
57
|
spec,
|
|
53
58
|
context
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline/spec/chart/pipes/annotation/annotationPointCommon.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/annotation/annotationPointCommon.ts"],"sourcesContent":["import type { ISpec, IMarkPointSpec } from '@visactor/vchart'\nimport { selector, selectorWithDynamicFilter } from '../../../../../dataSelector'\nimport type {\n ChartDynamicFilter,\n Datum,\n Selector,\n Selectors,\n SpecPipelineContext,\n VChartSpecPipe,\n VSeed,\n} from 'src/types'\nimport { isSubset } from './utils'\nimport { ANNOTATION_Z_INDEX } from '../../../../utils/constant'\nimport { isBarLikeChart } from 'src/pipeline/utils/chatType'\nexport const generateAnnotationPointPipe = (options: {\n findSelectedDatas?: (options: {\n dataset: Datum[]\n selector: Selector | Selectors | undefined | null\n dynamicFilter?: ChartDynamicFilter\n spec: ISpec\n context: SpecPipelineContext\n }) => Datum[]\n generateMarkPoint?: (datum: Datum, spec: ISpec, context: SpecPipelineContext) => IMarkPointSpec[] | undefined\n}) => {\n const findSelectedDatas =\n options.findSelectedDatas ??\n ((opts) => {\n const { dataset, selector: s, dynamicFilter } = opts\n return dataset.filter((datum) => {\n
|
|
1
|
+
{"version":3,"file":"pipeline/spec/chart/pipes/annotation/annotationPointCommon.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/annotation/annotationPointCommon.ts"],"sourcesContent":["import type { ISpec, IMarkPointSpec } from '@visactor/vchart'\nimport { selector, selectorWithDynamicFilter } from '../../../../../dataSelector'\nimport { MeasureId } from 'src/dataReshape/constant'\nimport type {\n ChartDynamicFilter,\n Datum,\n Selector,\n Selectors,\n SpecPipelineContext,\n VChartSpecPipe,\n VSeed,\n} from 'src/types'\nimport { isSubset } from './utils'\nimport { ANNOTATION_Z_INDEX } from '../../../../utils/constant'\nimport { isBarLikeChart } from 'src/pipeline/utils/chatType'\nexport const generateAnnotationPointPipe = (options: {\n findSelectedDatas?: (options: {\n dataset: Datum[]\n selector: Selector | Selectors | undefined | null\n measureId?: string | null\n dynamicFilter?: ChartDynamicFilter\n spec: ISpec\n context: SpecPipelineContext\n }) => Datum[]\n generateMarkPoint?: (datum: Datum, spec: ISpec, context: SpecPipelineContext) => IMarkPointSpec[] | undefined\n}) => {\n const findSelectedDatas =\n options.findSelectedDatas ??\n ((opts) => {\n const { dataset, selector: s, measureId, dynamicFilter } = opts\n return dataset.filter((datum) => {\n const isSelected = dynamicFilter ? selectorWithDynamicFilter(datum, dynamicFilter, s) : selector(datum, s)\n return isSelected && (!measureId || datum[MeasureId] === measureId)\n })\n })\n const generateMarkPoint =\n options.generateMarkPoint ??\n ((datum: Datum) => {\n return [\n {\n coordinate: (data: Datum[], context) => {\n const targetDatum = data.find((item) => isSubset(datum, item))\n if (context.getStack() === true) {\n const stackedDatum = { ...datum, ...targetDatum }\n return {\n ...stackedDatum,\n [context.getStackValueField()]: stackedDatum['__VCHART_STACK_END'],\n }\n }\n\n return targetDatum\n },\n },\n ]\n })\n\n return ((spec: ISpec, context: SpecPipelineContext) => {\n const { advancedVSeed, vseed } = context\n const { annotation, config } = advancedVSeed\n\n if (!annotation || !annotation.annotationPoint) {\n return spec\n }\n\n const theme = config?.[vseed.chartType as 'column']?.annotation?.annotationPoint\n const { annotationPoint } = annotation\n const annotationPointList = Array.isArray(annotationPoint) ? annotationPoint : [annotationPoint]\n const isHorizontalBar = isBarLikeChart(advancedVSeed as VSeed)\n const defaultStyle = isHorizontalBar\n ? {\n textAlign: 'right',\n textBaseline: 'middle',\n }\n : {\n textAlign: 'center',\n textBaseline: 'top',\n }\n\n const markPoint = annotationPointList.flatMap((annotationPoint) => {\n const {\n selector: selectorPoint,\n measureId,\n dynamicFilter,\n text = '',\n textColor = theme?.textColor ?? '#ffffff',\n textFontSize = theme?.textFontSize ?? 12,\n textFontWeight = theme?.textFontWeight ?? 400,\n textAlign = defaultStyle.textAlign,\n textBaseline = defaultStyle.textBaseline,\n textBackgroundBorderColor = theme?.textBackgroundBorderColor,\n textBackgroundBorderRadius = theme?.textBackgroundBorderRadius ?? 4,\n textBackgroundBorderWidth = theme?.textBackgroundBorderWidth ?? 1,\n textBackgroundColor = theme?.textBackgroundColor ?? '#212121',\n textBackgroundPadding = theme?.textBackgroundPadding ?? 2,\n textBackgroundVisible = theme?.textBackgroundVisible ?? true,\n offsetX = theme?.offsetX ?? 0,\n offsetY = theme?.offsetY ?? 0,\n } = annotationPoint\n\n const dataset = advancedVSeed.dataset.flat()\n const selectedData =\n selectorPoint || dynamicFilter\n ? findSelectedDatas({\n dataset,\n selector: selectorPoint,\n measureId,\n dynamicFilter,\n spec,\n context,\n })\n : []\n const dx = -10 - (isHorizontalBar ? (textFontSize as number) : 0) // 由于vchart tag实现问题,需要设置这个强制偏移量\n const dy = isHorizontalBar ? 0 : (textFontSize as number)\n const markPointStyle = {\n zIndex: ANNOTATION_Z_INDEX,\n regionRelative: true,\n itemLine: {\n visible: false,\n },\n itemContent: {\n offsetY,\n offsetX,\n confine: true,\n text: {\n text: text,\n labelBackground: {\n visible: textBackgroundVisible,\n padding: textBackgroundPadding,\n style: {\n opacity: 0.95,\n cornerRadius: textBackgroundBorderRadius ?? 4,\n fill: textBackgroundColor,\n stroke: textBackgroundBorderColor,\n lineWidth: textBackgroundBorderWidth,\n dx,\n dy,\n },\n },\n },\n style: {\n opacity: 0.95,\n visible: true,\n textAlign: textAlign,\n textBaseline: textBaseline,\n fill: textColor,\n stroke: textBackgroundColor,\n lineWidth: 1,\n fontSize: textFontSize,\n fontWeight: textFontWeight,\n dx,\n dy,\n },\n },\n } as Partial<IMarkPointSpec>\n\n return selectedData.reduce((res: IMarkPointSpec[], datum) => {\n const marks = generateMarkPoint(datum, spec, context)\n\n if (marks && marks.length) {\n marks.forEach((mark) => {\n res.push({\n ...markPointStyle,\n ...mark,\n } as IMarkPointSpec)\n })\n }\n\n return res\n }, [])\n }) as unknown as IMarkPointSpec[]\n\n return {\n ...spec,\n markPoint,\n } as ISpec\n }) as VChartSpecPipe\n}\n"],"names":["generateAnnotationPointPipe","options","findSelectedDatas","opts","dataset","s","measureId","dynamicFilter","datum","isSelected","selectorWithDynamicFilter","selector","MeasureId","generateMarkPoint","data","context","targetDatum","item","isSubset","stackedDatum","spec","advancedVSeed","vseed","annotation","config","theme","annotationPoint","annotationPointList","Array","isHorizontalBar","isBarLikeChart","defaultStyle","markPoint","selectorPoint","text","textColor","textFontSize","textFontWeight","textAlign","textBaseline","textBackgroundBorderColor","textBackgroundBorderRadius","textBackgroundBorderWidth","textBackgroundColor","textBackgroundPadding","textBackgroundVisible","offsetX","offsetY","selectedData","dx","dy","markPointStyle","ANNOTATION_Z_INDEX","res","marks","mark"],"mappings":"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"}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { selector, selectorWithDynamicFilter } from "../../../../../dataSelector/index.js";
|
|
2
|
+
import { MeasureId } from "../../../../../dataReshape/constant.js";
|
|
2
3
|
import { isSubset } from "./utils.js";
|
|
3
4
|
import { flatReshapeMeasures } from "../../../../utils/index.js";
|
|
4
|
-
import { MeasureId } from "../../../../../dataReshape/constant.js";
|
|
5
5
|
import { pickWithout } from "@visactor/vutils";
|
|
6
6
|
import { generateAnnotationPointPipe } from "./annotationPointCommon.js";
|
|
7
7
|
const annotationPointOfDualAxis = generateAnnotationPointPipe({
|
|
8
8
|
findSelectedDatas: (options)=>{
|
|
9
|
-
const { dataset, selector: s, dynamicFilter, context } = options;
|
|
9
|
+
const { dataset, selector: s, measureId, dynamicFilter, context } = options;
|
|
10
10
|
return dataset.reduce((res, d)=>{
|
|
11
11
|
const { advancedVSeed } = context;
|
|
12
12
|
const allMeasureIds = flatReshapeMeasures(advancedVSeed.reshapeMeasures ?? []).map((m)=>m.id);
|
|
13
13
|
const pickedDatum = pickWithout(d, allMeasureIds.filter((id)=>id !== d[MeasureId]));
|
|
14
14
|
const shouldSelect = dynamicFilter ? selectorWithDynamicFilter(pickedDatum, dynamicFilter, s) : selector(pickedDatum, s);
|
|
15
|
-
if (shouldSelect) res.push(pickedDatum);
|
|
15
|
+
if (shouldSelect && (!measureId || pickedDatum[MeasureId] === measureId)) res.push(pickedDatum);
|
|
16
16
|
return res;
|
|
17
17
|
}, []);
|
|
18
18
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline/spec/chart/pipes/annotation/annotationPointOfDualAxis.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/annotation/annotationPointOfDualAxis.ts"],"sourcesContent":["import type { IMarkPointSpec, ISpec } from '@visactor/vchart'\nimport { selector, selectorWithDynamicFilter } from '../../../../../dataSelector'\nimport type { Datum, SpecPipelineContext, VChartSpecPipe } from 'src/types'\nimport { isSubset } from './utils'\nimport { flatReshapeMeasures } from 'src/pipeline/utils'\nimport {
|
|
1
|
+
{"version":3,"file":"pipeline/spec/chart/pipes/annotation/annotationPointOfDualAxis.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/annotation/annotationPointOfDualAxis.ts"],"sourcesContent":["import type { IMarkPointSpec, ISpec } from '@visactor/vchart'\nimport { selector, selectorWithDynamicFilter } from '../../../../../dataSelector'\nimport { MeasureId } from 'src/dataReshape/constant'\nimport type { Datum, SpecPipelineContext, VChartSpecPipe } from 'src/types'\nimport { isSubset } from './utils'\nimport { flatReshapeMeasures } from 'src/pipeline/utils'\nimport { pickWithout } from '@visactor/vutils'\nimport { generateAnnotationPointPipe } from './annotationPointCommon'\n\nexport const annotationPointOfDualAxis: VChartSpecPipe = generateAnnotationPointPipe({\n findSelectedDatas: (options) => {\n const { dataset, selector: s, measureId, dynamicFilter, context } = options\n return dataset.reduce((res: Datum[], d: Datum) => {\n const { advancedVSeed } = context\n const allMeasureIds = flatReshapeMeasures(advancedVSeed.reshapeMeasures ?? []).map((m) => m.id)\n const pickedDatum = pickWithout(\n d,\n allMeasureIds.filter((id) => id !== d[MeasureId]),\n )\n\n const shouldSelect = dynamicFilter\n ? selectorWithDynamicFilter(pickedDatum, dynamicFilter, s)\n : selector(pickedDatum, s)\n\n if (shouldSelect && (!measureId || pickedDatum[MeasureId] === measureId)) {\n res.push(pickedDatum)\n }\n\n return res\n }, [])\n },\n generateMarkPoint: (datum: Datum, spec: ISpec, context: SpecPipelineContext) => {\n const { advancedVSeed } = context\n const allMeasureIds = flatReshapeMeasures(advancedVSeed.reshapeMeasures ?? []).map((m) => m.id)\n return spec.series?.map((s: any, index: number) => {\n return {\n relativeSeriesIndex: index,\n coordinate: (data: Datum[]) => {\n return data.find((item) => {\n return isSubset(\n datum,\n item,\n allMeasureIds.filter((id) => id !== item[MeasureId]),\n )\n })\n },\n } as IMarkPointSpec\n })\n },\n})\n"],"names":["annotationPointOfDualAxis","generateAnnotationPointPipe","options","dataset","s","measureId","dynamicFilter","context","res","d","advancedVSeed","allMeasureIds","flatReshapeMeasures","m","pickedDatum","pickWithout","id","MeasureId","shouldSelect","selectorWithDynamicFilter","selector","datum","spec","index","data","item","isSubset"],"mappings":";;;;;;AASO,MAAMA,4BAA4CC,4BAA4B;IACnF,mBAAmB,CAACC;QAClB,MAAM,EAAEC,OAAO,EAAE,UAAUC,CAAC,EAAEC,SAAS,EAAEC,aAAa,EAAEC,OAAO,EAAE,GAAGL;QACpE,OAAOC,QAAQ,MAAM,CAAC,CAACK,KAAcC;YACnC,MAAM,EAAEC,aAAa,EAAE,GAAGH;YAC1B,MAAMI,gBAAgBC,oBAAoBF,cAAc,eAAe,IAAI,EAAE,EAAE,GAAG,CAAC,CAACG,IAAMA,EAAE,EAAE;YAC9F,MAAMC,cAAcC,YAClBN,GACAE,cAAc,MAAM,CAAC,CAACK,KAAOA,OAAOP,CAAC,CAACQ,UAAU;YAGlD,MAAMC,eAAeZ,gBACjBa,0BAA0BL,aAAaR,eAAeF,KACtDgB,SAASN,aAAaV;YAE1B,IAAIc,gBAAiB,EAACb,aAAaS,WAAW,CAACG,UAAU,KAAKZ,SAAQ,GACpEG,IAAI,IAAI,CAACM;YAGX,OAAON;QACT,GAAG,EAAE;IACP;IACA,mBAAmB,CAACa,OAAcC,MAAaf;QAC7C,MAAM,EAAEG,aAAa,EAAE,GAAGH;QAC1B,MAAMI,gBAAgBC,oBAAoBF,cAAc,eAAe,IAAI,EAAE,EAAE,GAAG,CAAC,CAACG,IAAMA,EAAE,EAAE;QAC9F,OAAOS,KAAK,MAAM,EAAE,IAAI,CAAClB,GAAQmB,QACxB;gBACL,qBAAqBA;gBACrB,YAAY,CAACC,OACJA,KAAK,IAAI,CAAC,CAACC,OACTC,SACLL,OACAI,MACAd,cAAc,MAAM,CAAC,CAACK,KAAOA,OAAOS,IAAI,CAACR,UAAU;YAI3D;IAEJ;AACF"}
|
|
@@ -1673,6 +1673,7 @@ export declare const zArea: z.ZodObject<{
|
|
|
1673
1673
|
}>>>;
|
|
1674
1674
|
value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
|
|
1675
1675
|
}, z.core.$strip>, z.ZodRecord<z.ZodUnion<[z.ZodString, z.ZodNumber]>, z.ZodAny>]>>]>>>;
|
|
1676
|
+
measureId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1676
1677
|
dynamicFilter: z.ZodOptional<z.ZodObject<{
|
|
1677
1678
|
type: z.ZodLiteral<"row-with-field">;
|
|
1678
1679
|
description: z.ZodOptional<z.ZodString>;
|
|
@@ -1854,6 +1855,7 @@ export declare const zArea: z.ZodObject<{
|
|
|
1854
1855
|
}>>>;
|
|
1855
1856
|
value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
|
|
1856
1857
|
}, z.core.$strip>, z.ZodRecord<z.ZodUnion<[z.ZodString, z.ZodNumber]>, z.ZodAny>]>>]>>>;
|
|
1858
|
+
measureId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1857
1859
|
dynamicFilter: z.ZodOptional<z.ZodObject<{
|
|
1858
1860
|
type: z.ZodLiteral<"row-with-field">;
|
|
1859
1861
|
description: z.ZodOptional<z.ZodString>;
|
|
@@ -1673,6 +1673,7 @@ export declare const zAreaPercent: z.ZodObject<{
|
|
|
1673
1673
|
}>>>;
|
|
1674
1674
|
value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
|
|
1675
1675
|
}, z.core.$strip>, z.ZodRecord<z.ZodUnion<[z.ZodString, z.ZodNumber]>, z.ZodAny>]>>]>>>;
|
|
1676
|
+
measureId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1676
1677
|
dynamicFilter: z.ZodOptional<z.ZodObject<{
|
|
1677
1678
|
type: z.ZodLiteral<"row-with-field">;
|
|
1678
1679
|
description: z.ZodOptional<z.ZodString>;
|
|
@@ -1854,6 +1855,7 @@ export declare const zAreaPercent: z.ZodObject<{
|
|
|
1854
1855
|
}>>>;
|
|
1855
1856
|
value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
|
|
1856
1857
|
}, z.core.$strip>, z.ZodRecord<z.ZodUnion<[z.ZodString, z.ZodNumber]>, z.ZodAny>]>>]>>>;
|
|
1858
|
+
measureId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1857
1859
|
dynamicFilter: z.ZodOptional<z.ZodObject<{
|
|
1858
1860
|
type: z.ZodLiteral<"row-with-field">;
|
|
1859
1861
|
description: z.ZodOptional<z.ZodString>;
|
|
@@ -1002,6 +1002,7 @@ export declare const zBar: z.ZodObject<{
|
|
|
1002
1002
|
}>>>;
|
|
1003
1003
|
value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
|
|
1004
1004
|
}, z.core.$strip>, z.ZodRecord<z.ZodUnion<[z.ZodString, z.ZodNumber]>, z.ZodAny>]>>]>>>;
|
|
1005
|
+
measureId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1005
1006
|
dynamicFilter: z.ZodOptional<z.ZodObject<{
|
|
1006
1007
|
type: z.ZodLiteral<"row-with-field">;
|
|
1007
1008
|
description: z.ZodOptional<z.ZodString>;
|
|
@@ -1183,6 +1184,7 @@ export declare const zBar: z.ZodObject<{
|
|
|
1183
1184
|
}>>>;
|
|
1184
1185
|
value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
|
|
1185
1186
|
}, z.core.$strip>, z.ZodRecord<z.ZodUnion<[z.ZodString, z.ZodNumber]>, z.ZodAny>]>>]>>>;
|
|
1187
|
+
measureId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1186
1188
|
dynamicFilter: z.ZodOptional<z.ZodObject<{
|
|
1187
1189
|
type: z.ZodLiteral<"row-with-field">;
|
|
1188
1190
|
description: z.ZodOptional<z.ZodString>;
|
|
@@ -999,6 +999,7 @@ export declare const zBarParallel: z.ZodObject<{
|
|
|
999
999
|
}>>>;
|
|
1000
1000
|
value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
|
|
1001
1001
|
}, z.core.$strip>, z.ZodRecord<z.ZodUnion<[z.ZodString, z.ZodNumber]>, z.ZodAny>]>>]>>>;
|
|
1002
|
+
measureId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1002
1003
|
dynamicFilter: z.ZodOptional<z.ZodObject<{
|
|
1003
1004
|
type: z.ZodLiteral<"row-with-field">;
|
|
1004
1005
|
description: z.ZodOptional<z.ZodString>;
|
|
@@ -1180,6 +1181,7 @@ export declare const zBarParallel: z.ZodObject<{
|
|
|
1180
1181
|
}>>>;
|
|
1181
1182
|
value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
|
|
1182
1183
|
}, z.core.$strip>, z.ZodRecord<z.ZodUnion<[z.ZodString, z.ZodNumber]>, z.ZodAny>]>>]>>>;
|
|
1184
|
+
measureId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1183
1185
|
dynamicFilter: z.ZodOptional<z.ZodObject<{
|
|
1184
1186
|
type: z.ZodLiteral<"row-with-field">;
|
|
1185
1187
|
description: z.ZodOptional<z.ZodString>;
|
|
@@ -1002,6 +1002,7 @@ export declare const zBarPercent: z.ZodObject<{
|
|
|
1002
1002
|
}>>>;
|
|
1003
1003
|
value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
|
|
1004
1004
|
}, z.core.$strip>, z.ZodRecord<z.ZodUnion<[z.ZodString, z.ZodNumber]>, z.ZodAny>]>>]>>>;
|
|
1005
|
+
measureId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1005
1006
|
dynamicFilter: z.ZodOptional<z.ZodObject<{
|
|
1006
1007
|
type: z.ZodLiteral<"row-with-field">;
|
|
1007
1008
|
description: z.ZodOptional<z.ZodString>;
|
|
@@ -1183,6 +1184,7 @@ export declare const zBarPercent: z.ZodObject<{
|
|
|
1183
1184
|
}>>>;
|
|
1184
1185
|
value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
|
|
1185
1186
|
}, z.core.$strip>, z.ZodRecord<z.ZodUnion<[z.ZodString, z.ZodNumber]>, z.ZodAny>]>>]>>>;
|
|
1187
|
+
measureId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1186
1188
|
dynamicFilter: z.ZodOptional<z.ZodObject<{
|
|
1187
1189
|
type: z.ZodLiteral<"row-with-field">;
|
|
1188
1190
|
description: z.ZodOptional<z.ZodString>;
|
|
@@ -1016,6 +1016,7 @@ export declare const zBoxPlot: z.ZodObject<{
|
|
|
1016
1016
|
}>>>;
|
|
1017
1017
|
value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
|
|
1018
1018
|
}, z.core.$strip>, z.ZodRecord<z.ZodUnion<[z.ZodString, z.ZodNumber]>, z.ZodAny>]>>]>>>;
|
|
1019
|
+
measureId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1019
1020
|
dynamicFilter: z.ZodOptional<z.ZodObject<{
|
|
1020
1021
|
type: z.ZodLiteral<"row-with-field">;
|
|
1021
1022
|
description: z.ZodOptional<z.ZodString>;
|
|
@@ -1197,6 +1198,7 @@ export declare const zBoxPlot: z.ZodObject<{
|
|
|
1197
1198
|
}>>>;
|
|
1198
1199
|
value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
|
|
1199
1200
|
}, z.core.$strip>, z.ZodRecord<z.ZodUnion<[z.ZodString, z.ZodNumber]>, z.ZodAny>]>>]>>>;
|
|
1201
|
+
measureId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1200
1202
|
dynamicFilter: z.ZodOptional<z.ZodObject<{
|
|
1201
1203
|
type: z.ZodLiteral<"row-with-field">;
|
|
1202
1204
|
description: z.ZodOptional<z.ZodString>;
|
|
@@ -1039,6 +1039,7 @@ export declare const zColumn: z.ZodObject<{
|
|
|
1039
1039
|
}>>>;
|
|
1040
1040
|
value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
|
|
1041
1041
|
}, z.core.$strip>, z.ZodRecord<z.ZodUnion<[z.ZodString, z.ZodNumber]>, z.ZodAny>]>>]>>>;
|
|
1042
|
+
measureId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1042
1043
|
dynamicFilter: z.ZodOptional<z.ZodObject<{
|
|
1043
1044
|
type: z.ZodLiteral<"row-with-field">;
|
|
1044
1045
|
description: z.ZodOptional<z.ZodString>;
|
|
@@ -1220,6 +1221,7 @@ export declare const zColumn: z.ZodObject<{
|
|
|
1220
1221
|
}>>>;
|
|
1221
1222
|
value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
|
|
1222
1223
|
}, z.core.$strip>, z.ZodRecord<z.ZodUnion<[z.ZodString, z.ZodNumber]>, z.ZodAny>]>>]>>>;
|
|
1224
|
+
measureId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1223
1225
|
dynamicFilter: z.ZodOptional<z.ZodObject<{
|
|
1224
1226
|
type: z.ZodLiteral<"row-with-field">;
|
|
1225
1227
|
description: z.ZodOptional<z.ZodString>;
|
|
@@ -1024,6 +1024,7 @@ export declare const zColumnParallel: z.ZodObject<{
|
|
|
1024
1024
|
}>>>;
|
|
1025
1025
|
value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
|
|
1026
1026
|
}, z.core.$strip>, z.ZodRecord<z.ZodUnion<[z.ZodString, z.ZodNumber]>, z.ZodAny>]>>]>>>;
|
|
1027
|
+
measureId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1027
1028
|
dynamicFilter: z.ZodOptional<z.ZodObject<{
|
|
1028
1029
|
type: z.ZodLiteral<"row-with-field">;
|
|
1029
1030
|
description: z.ZodOptional<z.ZodString>;
|
|
@@ -1205,6 +1206,7 @@ export declare const zColumnParallel: z.ZodObject<{
|
|
|
1205
1206
|
}>>>;
|
|
1206
1207
|
value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
|
|
1207
1208
|
}, z.core.$strip>, z.ZodRecord<z.ZodUnion<[z.ZodString, z.ZodNumber]>, z.ZodAny>]>>]>>>;
|
|
1209
|
+
measureId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1208
1210
|
dynamicFilter: z.ZodOptional<z.ZodObject<{
|
|
1209
1211
|
type: z.ZodLiteral<"row-with-field">;
|
|
1210
1212
|
description: z.ZodOptional<z.ZodString>;
|
|
@@ -1002,6 +1002,7 @@ export declare const zColumnPercent: z.ZodObject<{
|
|
|
1002
1002
|
}>>>;
|
|
1003
1003
|
value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
|
|
1004
1004
|
}, z.core.$strip>, z.ZodRecord<z.ZodUnion<[z.ZodString, z.ZodNumber]>, z.ZodAny>]>>]>>>;
|
|
1005
|
+
measureId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1005
1006
|
dynamicFilter: z.ZodOptional<z.ZodObject<{
|
|
1006
1007
|
type: z.ZodLiteral<"row-with-field">;
|
|
1007
1008
|
description: z.ZodOptional<z.ZodString>;
|
|
@@ -1183,6 +1184,7 @@ export declare const zColumnPercent: z.ZodObject<{
|
|
|
1183
1184
|
}>>>;
|
|
1184
1185
|
value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
|
|
1185
1186
|
}, z.core.$strip>, z.ZodRecord<z.ZodUnion<[z.ZodString, z.ZodNumber]>, z.ZodAny>]>>]>>>;
|
|
1187
|
+
measureId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1186
1188
|
dynamicFilter: z.ZodOptional<z.ZodObject<{
|
|
1187
1189
|
type: z.ZodLiteral<"row-with-field">;
|
|
1188
1190
|
description: z.ZodOptional<z.ZodString>;
|
|
@@ -2199,6 +2199,7 @@ export declare const zDualAxis: z.ZodObject<{
|
|
|
2199
2199
|
}>>>;
|
|
2200
2200
|
value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
|
|
2201
2201
|
}, z.core.$strip>, z.ZodRecord<z.ZodUnion<[z.ZodString, z.ZodNumber]>, z.ZodAny>]>>]>>>;
|
|
2202
|
+
measureId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
2202
2203
|
dynamicFilter: z.ZodOptional<z.ZodObject<{
|
|
2203
2204
|
type: z.ZodLiteral<"row-with-field">;
|
|
2204
2205
|
description: z.ZodOptional<z.ZodString>;
|
|
@@ -2380,6 +2381,7 @@ export declare const zDualAxis: z.ZodObject<{
|
|
|
2380
2381
|
}>>>;
|
|
2381
2382
|
value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
|
|
2382
2383
|
}, z.core.$strip>, z.ZodRecord<z.ZodUnion<[z.ZodString, z.ZodNumber]>, z.ZodAny>]>>]>>>;
|
|
2384
|
+
measureId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
2383
2385
|
dynamicFilter: z.ZodOptional<z.ZodObject<{
|
|
2384
2386
|
type: z.ZodLiteral<"row-with-field">;
|
|
2385
2387
|
description: z.ZodOptional<z.ZodString>;
|
|
@@ -1028,6 +1028,7 @@ export declare const zHistogram: z.ZodObject<{
|
|
|
1028
1028
|
}>>>;
|
|
1029
1029
|
value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
|
|
1030
1030
|
}, z.core.$strip>, z.ZodRecord<z.ZodUnion<[z.ZodString, z.ZodNumber]>, z.ZodAny>]>>]>>>;
|
|
1031
|
+
measureId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1031
1032
|
dynamicFilter: z.ZodOptional<z.ZodObject<{
|
|
1032
1033
|
type: z.ZodLiteral<"row-with-field">;
|
|
1033
1034
|
description: z.ZodOptional<z.ZodString>;
|
|
@@ -1209,6 +1210,7 @@ export declare const zHistogram: z.ZodObject<{
|
|
|
1209
1210
|
}>>>;
|
|
1210
1211
|
value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
|
|
1211
1212
|
}, z.core.$strip>, z.ZodRecord<z.ZodUnion<[z.ZodString, z.ZodNumber]>, z.ZodAny>]>>]>>>;
|
|
1213
|
+
measureId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1212
1214
|
dynamicFilter: z.ZodOptional<z.ZodObject<{
|
|
1213
1215
|
type: z.ZodLiteral<"row-with-field">;
|
|
1214
1216
|
description: z.ZodOptional<z.ZodString>;
|
|
@@ -1364,6 +1364,7 @@ export declare const zLine: z.ZodObject<{
|
|
|
1364
1364
|
}>>>;
|
|
1365
1365
|
value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
|
|
1366
1366
|
}, z.core.$strip>, z.ZodRecord<z.ZodUnion<[z.ZodString, z.ZodNumber]>, z.ZodAny>]>>]>>>;
|
|
1367
|
+
measureId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1367
1368
|
dynamicFilter: z.ZodOptional<z.ZodObject<{
|
|
1368
1369
|
type: z.ZodLiteral<"row-with-field">;
|
|
1369
1370
|
description: z.ZodOptional<z.ZodString>;
|
|
@@ -1545,6 +1546,7 @@ export declare const zLine: z.ZodObject<{
|
|
|
1545
1546
|
}>>>;
|
|
1546
1547
|
value: z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>;
|
|
1547
1548
|
}, z.core.$strip>, z.ZodRecord<z.ZodUnion<[z.ZodString, z.ZodNumber]>, z.ZodAny>]>>]>>>;
|
|
1549
|
+
measureId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1548
1550
|
dynamicFilter: z.ZodOptional<z.ZodObject<{
|
|
1549
1551
|
type: z.ZodLiteral<"row-with-field">;
|
|
1550
1552
|
description: z.ZodOptional<z.ZodString>;
|