@visactor/vseed 0.5.0 → 0.5.1

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.
Files changed (60) hide show
  1. package/dist/cjs/index.cjs +2 -2
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/esm/builder/builder/advanced/colorItems.d.ts +1 -0
  4. package/dist/esm/builder/builder/advanced/colorItems.js +21 -1
  5. package/dist/esm/builder/builder/advanced/colorItems.js.map +1 -1
  6. package/dist/esm/builder/builder/buildSpec.js.map +1 -1
  7. package/dist/esm/builder/builder/builder.d.ts +4 -0
  8. package/dist/esm/builder/builder/builder.js +2 -1
  9. package/dist/esm/builder/builder/builder.js.map +1 -1
  10. package/dist/esm/dataSelector/selector.js.map +1 -1
  11. package/dist/esm/pipeline/spec/chart/pipes/annotation/annotationArea.js +2 -2
  12. package/dist/esm/pipeline/spec/chart/pipes/annotation/annotationArea.js.map +1 -1
  13. package/dist/esm/pipeline/spec/chart/pipes/annotation/annotationAreaBand.js +2 -2
  14. package/dist/esm/pipeline/spec/chart/pipes/annotation/annotationAreaBand.js.map +1 -1
  15. package/dist/esm/pipeline/spec/chart/pipes/annotation/annotationDifferenceLine.js +63 -18
  16. package/dist/esm/pipeline/spec/chart/pipes/annotation/annotationDifferenceLine.js.map +1 -1
  17. package/dist/esm/pipeline/spec/chart/pipes/annotation/annotationHorizontalLine.js +7 -13
  18. package/dist/esm/pipeline/spec/chart/pipes/annotation/annotationHorizontalLine.js.map +1 -1
  19. package/dist/esm/pipeline/spec/chart/pipes/annotation/annotationPointCommon.js +2 -2
  20. package/dist/esm/pipeline/spec/chart/pipes/annotation/annotationPointCommon.js.map +1 -1
  21. package/dist/esm/pipeline/spec/chart/pipes/annotation/annotationVerticalLine.js +9 -15
  22. package/dist/esm/pipeline/spec/chart/pipes/annotation/annotationVerticalLine.js.map +1 -1
  23. package/dist/esm/pipeline/spec/chart/pipes/annotation/utils.d.ts +2 -0
  24. package/dist/esm/pipeline/spec/chart/pipes/annotation/utils.js +15 -1
  25. package/dist/esm/pipeline/spec/chart/pipes/annotation/utils.js.map +1 -1
  26. package/dist/esm/pipeline/utils/sandbox/execute.js.map +1 -1
  27. package/dist/esm/theme/tokenTheme.d.ts +6 -0
  28. package/dist/esm/theme/tokenTheme.js +36 -7
  29. package/dist/esm/theme/tokenTheme.js.map +1 -1
  30. package/dist/esm/types/builder/builder.d.ts +1 -0
  31. package/dist/esm/types/builder/builder.js.map +1 -1
  32. package/dist/esm/types/chartType/area/zArea.d.ts +10 -0
  33. package/dist/esm/types/chartType/bar/zBar.d.ts +10 -0
  34. package/dist/esm/types/chartType/barParallel/zBarParallel.d.ts +10 -0
  35. package/dist/esm/types/chartType/column/zColumn.d.ts +10 -0
  36. package/dist/esm/types/chartType/columnParallel/zColumnParallel.d.ts +10 -0
  37. package/dist/esm/types/chartType/line/zLine.d.ts +10 -0
  38. package/dist/esm/types/properties/annotation/annotation.d.ts +10 -0
  39. package/dist/esm/types/properties/annotation/annotationDifferenceLine.d.ts +4 -0
  40. package/dist/esm/types/properties/annotation/zAnnotationDifferenceLine.d.ts +5 -0
  41. package/dist/esm/types/properties/annotation/zAnnotationDifferenceLine.js +6 -1
  42. package/dist/esm/types/properties/annotation/zAnnotationDifferenceLine.js.map +1 -1
  43. package/dist/esm/types/properties/config/annotation/annotation.d.ts +32 -5
  44. package/dist/esm/types/properties/config/annotation/zAnnotation.d.ts +30 -4
  45. package/dist/esm/types/properties/config/annotation/zAnnotation.js +11 -1
  46. package/dist/esm/types/properties/config/annotation/zAnnotation.js.map +1 -1
  47. package/dist/esm/types/properties/config/area.d.ts +30 -4
  48. package/dist/esm/types/properties/config/bar.d.ts +45 -6
  49. package/dist/esm/types/properties/config/boxplot.d.ts +15 -2
  50. package/dist/esm/types/properties/config/column.d.ts +45 -6
  51. package/dist/esm/types/properties/config/config.d.ts +285 -38
  52. package/dist/esm/types/properties/config/dualAxis.d.ts +15 -2
  53. package/dist/esm/types/properties/config/histogram.d.ts +15 -2
  54. package/dist/esm/types/properties/config/line.d.ts +15 -2
  55. package/dist/esm/types/properties/config/race.d.ts +90 -12
  56. package/dist/esm/types/properties/config/scatter.d.ts +15 -2
  57. package/dist/esm/types/properties/theme/customTheme.d.ts +570 -76
  58. package/dist/umd/index.js +248 -134
  59. package/dist/umd/index.js.map +1 -1
  60. package/package.json +3 -8
@@ -2,15 +2,16 @@ 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, resolveDifferenceAnchor, usesDifferenceLineElementStackEnd } from "./annotationDifferenceLineCommon.js";
5
+ import { getAnnotationLineDash } from "./utils.js";
6
+ import { buildDifferenceCoordinateDatum, buildDifferenceText, getDifferenceLineStackResolveMode, getRuntimeDifferenceValue, inferDifferenceConnectDirection, resolveDifferenceAnchor, usesDifferenceLineElementStackEnd } from "./annotationDifferenceLineCommon.js";
6
7
  const DEFAULT_LINE_COLOR = '#BCC1CB';
7
8
  const DEFAULT_TEXT_COLOR = '#ffffff';
8
9
  const DEFAULT_TEXT_BACKGROUND_COLOR = '#BCC1CB';
9
10
  const DEFAULT_TEXT_FONT_SIZE = 12;
10
- const DEFAULT_LINE_WIDTH = 2;
11
- const DEFAULT_CORNER_RADIUS = 4;
11
+ const DEFAULT_LINE_WIDTH = 1;
12
+ const DEFAULT_CORNER_RADIUS = 3;
12
13
  const DEFAULT_LABEL_PADDING = 4;
13
- const DEFAULT_END_SYMBOL_SIZE = 12;
14
+ const DEFAULT_END_SYMBOL_SIZE = 6;
14
15
  const DEFAULT_END_SYMBOL_REF_X = -4;
15
16
  const DEFAULT_GUTTER_BASE_OFFSET = 20;
16
17
  const DEFAULT_GUTTER_RIGHT_PADDING = 44;
@@ -23,6 +24,7 @@ const DEFAULT_PERCENT_DIFFERENCE_FORMAT = {
23
24
  type: 'percent',
24
25
  fractionDigits: 2
25
26
  };
27
+ const shouldInferDifferenceConnectDirection = (chartType)=>'column' === chartType || 'bar' === chartType || 'columnParallel' === chartType || 'barParallel' === chartType;
26
28
  const getDifferenceLinePath = (index, total)=>1 === total ? 'annotationDifferenceLine' : `annotationDifferenceLine[${index}]`;
27
29
  const toArray = (value)=>{
28
30
  if (Array.isArray(value)) return value;
@@ -63,21 +65,45 @@ const mergeDifferenceLineRegionPadding = (spec, paddingPatch)=>{
63
65
  ]
64
66
  };
65
67
  };
66
- const buildFixedGutterExpandDistance = (isHorizontalChart)=>(_markerData, context)=>{
68
+ const buildFixedGutterExpandDistance = (connectDirection)=>(_markerData, context)=>{
67
69
  const region = context?.region;
68
70
  const coordinatePoints = Array.isArray(context?.coordinatePoints) ? context.coordinatePoints : [];
69
71
  if (!region || 0 === coordinatePoints.length) return 0;
70
72
  const { x: regionStartX, y: regionStartY } = region.getLayoutStartPoint();
71
- const { width } = region.getLayoutRect();
72
- if (isHorizontalChart) {
73
+ const { width, height } = region.getLayoutRect();
74
+ if ('top' === connectDirection) {
73
75
  const targetY = regionStartY - DEFAULT_GUTTER_BASE_OFFSET;
74
76
  const minY = Math.min(...coordinatePoints.map((point)=>point.y));
75
77
  return Math.max(0, minY - targetY);
76
78
  }
79
+ if ('bottom' === connectDirection) {
80
+ const targetY = regionStartY + height + DEFAULT_GUTTER_BASE_OFFSET;
81
+ const maxY = Math.max(...coordinatePoints.map((point)=>point.y));
82
+ return Math.max(0, targetY - maxY);
83
+ }
84
+ if ('left' === connectDirection) {
85
+ const targetX = regionStartX - DEFAULT_GUTTER_BASE_OFFSET;
86
+ const minX = Math.min(...coordinatePoints.map((point)=>point.x));
87
+ return Math.max(0, minX - targetX);
88
+ }
77
89
  const targetX = regionStartX + width + DEFAULT_GUTTER_BASE_OFFSET;
78
90
  const maxX = Math.max(...coordinatePoints.map((point)=>point.x));
79
91
  return Math.max(0, targetX - maxX);
80
92
  };
93
+ const getDifferenceLinePaddingPatch = (connectDirection)=>{
94
+ if ('top' === connectDirection) return {
95
+ top: DEFAULT_GUTTER_TOP_PADDING
96
+ };
97
+ if ('bottom' === connectDirection) return {
98
+ bottom: DEFAULT_GUTTER_TOP_PADDING
99
+ };
100
+ if ('left' === connectDirection) return {
101
+ left: DEFAULT_GUTTER_RIGHT_PADDING
102
+ };
103
+ return {
104
+ right: DEFAULT_GUTTER_RIGHT_PADDING
105
+ };
106
+ };
81
107
  const getAxisFormatter = (spec)=>{
82
108
  const valueAxisOrient = 'horizontal' === spec.direction ? 'bottom' : 'left';
83
109
  const formatMethod = spec.axes?.find((axis)=>axis.orient === valueAxisOrient)?.label?.formatMethod;
@@ -146,6 +172,12 @@ const annotationDifferenceLine_annotationDifferenceLine = (spec, context)=>{
146
172
  const axisFormatter = getAxisFormatter(chartSpec);
147
173
  const percentFormatter = createFormatter(DEFAULT_PERCENT_DIFFERENCE_FORMAT);
148
174
  const isHorizontalChart = 'horizontal' === chartSpec.direction;
175
+ const paddingPatch = {
176
+ top: 0,
177
+ right: 0,
178
+ bottom: 0,
179
+ left: 0
180
+ };
149
181
  const markLine = annotationDifferenceLineList.flatMap((annotationDifferenceLine, index)=>{
150
182
  try {
151
183
  assertDifferenceLineConfig(annotationDifferenceLine, getDifferenceLinePath(index, annotationDifferenceLineList.length));
@@ -169,11 +201,23 @@ const annotationDifferenceLine_annotationDifferenceLine = (spec, context)=>{
169
201
  if (start.mode !== end.mode) return [];
170
202
  const usesRuntimeStackEnd = useElementStackEnd || ('column' === vseed.chartType || 'bar' === vseed.chartType) && 'element' === start.mode && 'auto' === stackResolveMode;
171
203
  const useBracketStyle = isBracketChart || ('column' === vseed.chartType || 'bar' === vseed.chartType) && 'element' === start.mode && 'auto' === stackResolveMode;
172
- const connectDirection = isHorizontalChart ? 'top' : 'right';
173
- const expandDistance = buildFixedGutterExpandDistance(isHorizontalChart);
204
+ const connectDirection = shouldInferDifferenceConnectDirection(vseed.chartType) ? inferDifferenceConnectDirection(vseed, [
205
+ start.value,
206
+ end.value
207
+ ]) : isHorizontalChart ? 'top' : 'right';
208
+ const expandDistance = buildFixedGutterExpandDistance(connectDirection);
209
+ const currentPaddingPatch = getDifferenceLinePaddingPatch(connectDirection);
210
+ paddingPatch.top = Math.max(paddingPatch.top, currentPaddingPatch.top ?? 0);
211
+ paddingPatch.right = Math.max(paddingPatch.right, currentPaddingPatch.right ?? 0);
212
+ paddingPatch.bottom = Math.max(paddingPatch.bottom, currentPaddingPatch.bottom ?? 0);
213
+ paddingPatch.left = Math.max(paddingPatch.left, currentPaddingPatch.left ?? 0);
174
214
  const lineColor = annotationDifferenceLine.lineColor ?? theme?.lineColor ?? DEFAULT_LINE_COLOR;
215
+ const lineStyle = annotationDifferenceLine.lineStyle;
216
+ const themeLineStyle = theme?.lineStyle;
217
+ const configuredLineDash = lineStyle ? getAnnotationLineDash(lineStyle) : theme?.lineDash ?? (themeLineStyle ? getAnnotationLineDash(themeLineStyle) : void 0);
175
218
  const textColor = annotationDifferenceLine.textColor ?? theme?.textColor ?? DEFAULT_TEXT_COLOR;
176
219
  const textBackgroundColor = annotationDifferenceLine.textBackgroundColor ?? theme?.textBackgroundColor ?? DEFAULT_TEXT_BACKGROUND_COLOR;
220
+ const textBackgroundOpacity = theme?.textBackgroundOpacity;
177
221
  const textFontSize = annotationDifferenceLine.textFontSize ?? theme?.textFontSize ?? DEFAULT_TEXT_FONT_SIZE;
178
222
  const differenceType = annotationDifferenceLine.differenceType ?? 'absolute';
179
223
  const startMeasureId = resolveDifferenceMeasureId(start, annotationDifferenceLine.start.selector, measureIds);
@@ -208,6 +252,7 @@ const annotationDifferenceLine_annotationDifferenceLine = (spec, context)=>{
208
252
  visible: true,
209
253
  padding: DEFAULT_LABEL_PADDING,
210
254
  style: {
255
+ opacity: textBackgroundOpacity ?? 0.95,
211
256
  fill: textBackgroundColor,
212
257
  fillOpacity: 1,
213
258
  stroke: lineColor,
@@ -228,6 +273,7 @@ const annotationDifferenceLine_annotationDifferenceLine = (spec, context)=>{
228
273
  visible: true,
229
274
  padding: DEFAULT_LABEL_PADDING,
230
275
  style: {
276
+ opacity: textBackgroundOpacity ?? 0.95,
231
277
  fill: textBackgroundColor,
232
278
  fillOpacity: 1,
233
279
  stroke: lineColor,
@@ -271,18 +317,21 @@ const annotationDifferenceLine_annotationDifferenceLine = (spec, context)=>{
271
317
  visible: true,
272
318
  stroke: lineColor,
273
319
  lineWidth: DEFAULT_LINE_WIDTH,
274
- lineDash: DEFAULT_BRACKET_LINE_DASH
320
+ lineDash: configuredLineDash ?? DEFAULT_BRACKET_LINE_DASH
275
321
  },
276
322
  {
277
323
  visible: true,
278
324
  stroke: lineColor,
279
- lineWidth: DEFAULT_LINE_WIDTH
325
+ lineWidth: DEFAULT_LINE_WIDTH,
326
+ ...configuredLineDash ? {
327
+ lineDash: configuredLineDash
328
+ } : {}
280
329
  },
281
330
  {
282
331
  visible: true,
283
332
  stroke: lineColor,
284
333
  lineWidth: DEFAULT_LINE_WIDTH,
285
- lineDash: DEFAULT_BRACKET_LINE_DASH
334
+ lineDash: configuredLineDash ?? DEFAULT_BRACKET_LINE_DASH
286
335
  }
287
336
  ]
288
337
  } : {
@@ -290,7 +339,7 @@ const annotationDifferenceLine_annotationDifferenceLine = (spec, context)=>{
290
339
  visible: true,
291
340
  stroke: lineColor,
292
341
  lineWidth: DEFAULT_LINE_WIDTH,
293
- lineDash: [
342
+ lineDash: configuredLineDash ?? [
294
343
  0
295
344
  ],
296
345
  cornerRadius: DEFAULT_CORNER_RADIUS
@@ -323,11 +372,7 @@ const annotationDifferenceLine_annotationDifferenceLine = (spec, context)=>{
323
372
  ]
324
373
  };
325
374
  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
- });
375
+ return mergeDifferenceLineRegionPadding(nextSpec, paddingPatch);
331
376
  };
332
377
  export { annotationDifferenceLine_annotationDifferenceLine as annotationDifferenceLine };
333
378
 
@@ -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, 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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"}
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 { getAnnotationLineDash } from './utils'\nimport {\n buildDifferenceCoordinateDatum,\n buildDifferenceText,\n getDifferenceLineStackResolveMode,\n getRuntimeDifferenceValue,\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_LINE_WIDTH = 1\nconst DEFAULT_CORNER_RADIUS = 3\nconst DEFAULT_LABEL_PADDING = 4\nconst DEFAULT_END_SYMBOL_SIZE = 6\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>>\ntype DifferenceConnectDirection = 'top' | 'right' | 'bottom' | 'left'\n\nconst shouldInferDifferenceConnectDirection = (chartType: string) =>\n chartType === 'column' || chartType === 'bar' || chartType === 'columnParallel' || chartType === 'barParallel'\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 = (connectDirection: DifferenceConnectDirection) => {\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, height } = region.getLayoutRect()\n\n if (connectDirection === 'top') {\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 if (connectDirection === 'bottom') {\n const targetY = regionStartY + height + DEFAULT_GUTTER_BASE_OFFSET\n const maxY = Math.max(...coordinatePoints.map((point: { y: number }) => point.y))\n\n return Math.max(0, targetY - maxY)\n }\n\n if (connectDirection === 'left') {\n const targetX = regionStartX - DEFAULT_GUTTER_BASE_OFFSET\n const minX = Math.min(...coordinatePoints.map((point: { x: number }) => point.x))\n\n return Math.max(0, minX - targetX)\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 getDifferenceLinePaddingPatch = (connectDirection: DifferenceConnectDirection): Partial<RegionPaddingObject> => {\n if (connectDirection === 'top') {\n return { top: DEFAULT_GUTTER_TOP_PADDING }\n }\n\n if (connectDirection === 'bottom') {\n return { bottom: DEFAULT_GUTTER_TOP_PADDING }\n }\n\n if (connectDirection === 'left') {\n return { left: DEFAULT_GUTTER_RIGHT_PADDING }\n }\n\n return { right: DEFAULT_GUTTER_RIGHT_PADDING }\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 paddingPatch = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n }\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: DifferenceConnectDirection = shouldInferDifferenceConnectDirection(vseed.chartType)\n ? inferDifferenceConnectDirection(vseed, [start.value, end.value])\n : isHorizontalChart\n ? 'top'\n : 'right'\n const expandDistance = buildFixedGutterExpandDistance(connectDirection)\n const currentPaddingPatch = getDifferenceLinePaddingPatch(connectDirection)\n\n paddingPatch.top = Math.max(paddingPatch.top, currentPaddingPatch.top ?? 0)\n paddingPatch.right = Math.max(paddingPatch.right, currentPaddingPatch.right ?? 0)\n paddingPatch.bottom = Math.max(paddingPatch.bottom, currentPaddingPatch.bottom ?? 0)\n paddingPatch.left = Math.max(paddingPatch.left, currentPaddingPatch.left ?? 0)\n\n const lineColor = annotationDifferenceLine.lineColor ?? theme?.lineColor ?? DEFAULT_LINE_COLOR\n const lineStyle = annotationDifferenceLine.lineStyle\n const themeLineStyle = theme?.lineStyle\n const configuredLineDash = lineStyle\n ? getAnnotationLineDash(lineStyle)\n : (theme?.lineDash ?? (themeLineStyle ? getAnnotationLineDash(themeLineStyle) : undefined))\n const textColor = annotationDifferenceLine.textColor ?? theme?.textColor ?? DEFAULT_TEXT_COLOR\n const textBackgroundColor =\n annotationDifferenceLine.textBackgroundColor ?? theme?.textBackgroundColor ?? DEFAULT_TEXT_BACKGROUND_COLOR\n const textBackgroundOpacity = theme?.textBackgroundOpacity\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 opacity: textBackgroundOpacity ?? 0.95,\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 opacity: textBackgroundOpacity ?? 0.95,\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: configuredLineDash ?? DEFAULT_BRACKET_LINE_DASH,\n },\n {\n visible: true,\n stroke: lineColor,\n lineWidth: DEFAULT_LINE_WIDTH,\n ...(configuredLineDash ? { lineDash: configuredLineDash } : {}),\n },\n {\n visible: true,\n stroke: lineColor,\n lineWidth: DEFAULT_LINE_WIDTH,\n lineDash: configuredLineDash ?? DEFAULT_BRACKET_LINE_DASH,\n },\n ],\n }\n : {\n style: {\n visible: true,\n stroke: lineColor,\n lineWidth: DEFAULT_LINE_WIDTH,\n lineDash: configuredLineDash ?? [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(nextSpec as IBarChartSpec | ILineChartSpec | IAreaChartSpec, paddingPatch)\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","shouldInferDifferenceConnectDirection","chartType","getDifferenceLinePath","index","total","toArray","value","Array","normalizeRegionPadding","padding","mergeDifferenceLineRegionPadding","spec","paddingPatch","region","mergedPadding","undefined","Math","buildFixedGutterExpandDistance","connectDirection","_markerData","context","coordinatePoints","regionStartX","regionStartY","width","height","targetY","minY","point","maxY","targetX","minX","maxX","getDifferenceLinePaddingPatch","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","isHorizontalChart","markLine","resolveDifferenceAnchor","usesRuntimeStackEnd","useBracketStyle","inferDifferenceConnectDirection","expandDistance","currentPaddingPatch","lineColor","lineStyle","themeLineStyle","configuredLineDash","getAnnotationLineDash","textColor","textBackgroundColor","textBackgroundOpacity","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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"}
@@ -1,6 +1,6 @@
1
1
  import { isArray, isNumber, isString } from "remeda";
2
2
  import { ANNOTATION_Z_INDEX } from "../../../../utils/constant.js";
3
- import { resolveAnnotationValue } from "./utils.js";
3
+ import { getAnnotationLineDash, resolveAnnotationValue } from "./utils.js";
4
4
  const annotationHorizontalLine_annotationHorizontalLine = (spec, context)=>{
5
5
  const { advancedVSeed, vseed } = context;
6
6
  const { annotation, config } = advancedVSeed;
@@ -19,7 +19,10 @@ const annotationHorizontalLine_annotationHorizontalLine = (spec, context)=>{
19
19
  insideEnd: 'insideEndTop'
20
20
  };
21
21
  const markLine = annotationHorizontalLineList.flatMap((annotationHorizontalLine)=>{
22
- const { yValue, dynamicFilter, text = '', textPosition = 'insideEnd', textColor = theme?.textColor ?? '#ffffff', textFontSize = theme?.textFontSize ?? 12, textFontWeight = theme?.textFontWeight ?? 400, textAlign = 'right', textBaseline = 'bottom', lineColor = theme?.lineColor ?? '#212121', lineStyle = theme?.lineStyle ?? 'dashed', lineVisible = theme?.lineStyle ?? true, lineWidth = theme?.lineWidth ?? 1, textBackgroundVisible = theme?.textBackgroundVisible ?? true, textBackgroundColor = theme?.textBackgroundColor ?? '#212121', textBackgroundBorderColor = theme?.textBackgroundBorderColor ?? '#212121', textBackgroundBorderRadius = theme?.textBackgroundBorderRadius ?? 4, textBackgroundBorderWidth = theme?.textBackgroundBorderWidth ?? 1, textBackgroundPadding = theme?.textBackgroundPadding ?? 2 } = annotationHorizontalLine;
22
+ const { yValue, dynamicFilter, text = '', textPosition = 'insideEnd', textColor = theme?.textColor ?? '#ffffff', textFontSize = theme?.textFontSize ?? 12, textFontWeight = theme?.textFontWeight ?? 400, textAlign = 'right', textBaseline = 'bottom', lineColor = theme?.lineColor ?? '#212121', lineVisible = theme?.lineStyle ?? true, lineWidth = theme?.lineWidth ?? 1, textBackgroundVisible = theme?.textBackgroundVisible ?? true, textBackgroundColor = theme?.textBackgroundColor ?? '#212121', textBackgroundBorderColor = theme?.textBackgroundBorderColor ?? '#212121', textBackgroundBorderRadius = theme?.textBackgroundBorderRadius ?? 4, textBackgroundBorderWidth = theme?.textBackgroundBorderWidth ?? 1, textBackgroundPadding = theme?.textBackgroundPadding ?? 2 } = annotationHorizontalLine;
23
+ const lineStyle = annotationHorizontalLine.lineStyle ?? theme?.lineStyle ?? 'dashed';
24
+ const lineDash = getAnnotationLineDash(lineStyle, annotationHorizontalLine.lineStyle ? void 0 : theme?.lineDash);
25
+ const textBackgroundOpacity = theme?.textBackgroundOpacity;
23
26
  const generateOneMarkLine = (y)=>({
24
27
  y,
25
28
  autoRange: true,
@@ -29,15 +32,7 @@ const annotationHorizontalLine_annotationHorizontalLine = (spec, context)=>{
29
32
  visible: lineVisible,
30
33
  stroke: lineColor,
31
34
  lineWidth: lineWidth,
32
- lineDash: 'dashed' === lineStyle ? [
33
- 5,
34
- 2
35
- ] : 'dotted' === lineStyle ? [
36
- 2,
37
- 5
38
- ] : [
39
- 0
40
- ]
35
+ lineDash
41
36
  }
42
37
  },
43
38
  label: {
@@ -45,7 +40,6 @@ const annotationHorizontalLine_annotationHorizontalLine = (spec, context)=>{
45
40
  text: text,
46
41
  position: positionMap[textPosition || 'insideEnd'],
47
42
  style: {
48
- opacity: 0.95,
49
43
  visible: true,
50
44
  dy: 4,
51
45
  stroke: textBackgroundColor,
@@ -60,7 +54,7 @@ const annotationHorizontalLine_annotationHorizontalLine = (spec, context)=>{
60
54
  visible: textBackgroundVisible,
61
55
  padding: textBackgroundPadding,
62
56
  style: {
63
- opacity: 0.95,
57
+ opacity: textBackgroundOpacity ?? 0.95,
64
58
  dy: 4,
65
59
  cornerRadius: textBackgroundBorderRadius,
66
60
  fill: textBackgroundColor,
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/chart/pipes/annotation/annotationHorizontalLine.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/annotation/annotationHorizontalLine.ts"],"sourcesContent":["import type { ILineChartSpec, IMarkLineSpec } from '@visactor/vchart'\nimport type { VChartSpecPipe } from 'src/types'\nimport { isArray, isNumber, isString } from 'remeda'\nimport { ANNOTATION_Z_INDEX } from '../../../../utils/constant'\nimport { resolveAnnotationValue } from './utils'\n\nexport const annotationHorizontalLine: VChartSpecPipe = (spec, context) => {\n const { advancedVSeed, vseed } = context\n const { annotation, config } = advancedVSeed\n\n if (!annotation || !annotation.annotationHorizontalLine) {\n return spec\n }\n const theme = config?.[vseed.chartType as 'column']?.annotation?.annotationHorizontalLine\n const { annotationHorizontalLine } = annotation\n const annotationHorizontalLineList = Array.isArray(annotationHorizontalLine)\n ? annotationHorizontalLine\n : [annotationHorizontalLine]\n\n const positionMap = {\n outsideStart: 'start',\n outsideEnd: 'end',\n outsideMiddle: 'middle',\n insideStart: 'insideStartTop',\n insideMiddle: 'insideMiddleTop',\n insideEnd: 'insideEndTop',\n }\n\n const markLine = annotationHorizontalLineList.flatMap((annotationHorizontalLine) => {\n const {\n yValue,\n dynamicFilter,\n text = '',\n textPosition = 'insideEnd',\n textColor = theme?.textColor ?? '#ffffff',\n textFontSize = theme?.textFontSize ?? 12,\n textFontWeight = theme?.textFontWeight ?? 400,\n textAlign = 'right',\n textBaseline = 'bottom',\n\n lineColor = theme?.lineColor ?? '#212121',\n lineStyle = theme?.lineStyle ?? 'dashed',\n lineVisible = theme?.lineStyle ?? true,\n lineWidth = theme?.lineWidth ?? 1,\n\n textBackgroundVisible = theme?.textBackgroundVisible ?? true,\n textBackgroundColor = theme?.textBackgroundColor ?? '#212121',\n textBackgroundBorderColor = theme?.textBackgroundBorderColor ?? '#212121',\n textBackgroundBorderRadius = theme?.textBackgroundBorderRadius ?? 4,\n textBackgroundBorderWidth = theme?.textBackgroundBorderWidth ?? 1,\n textBackgroundPadding = theme?.textBackgroundPadding ?? 2,\n } = annotationHorizontalLine\n\n const generateOneMarkLine = (y: string | number) => {\n return {\n y,\n autoRange: true,\n zIndex: ANNOTATION_Z_INDEX,\n line: {\n style: {\n visible: lineVisible,\n stroke: lineColor,\n lineWidth: lineWidth,\n lineDash: lineStyle === 'dashed' ? [5, 2] : lineStyle === 'dotted' ? [2, 5] : [0],\n },\n },\n label: {\n confine: true,\n text: text,\n position: (positionMap as any)[textPosition || 'insideEnd'],\n style: {\n opacity: 0.95,\n visible: true,\n dy: 4,\n stroke: textBackgroundColor,\n lineWidth: 1,\n textAlign: textAlign,\n textBaseline: textBaseline,\n fill: textColor,\n fontSize: textFontSize,\n fontWeight: textFontWeight,\n },\n labelBackground: {\n visible: textBackgroundVisible,\n padding: textBackgroundPadding,\n style: {\n opacity: 0.95,\n dy: 4,\n cornerRadius: textBackgroundBorderRadius,\n fill: textBackgroundColor,\n stroke: textBackgroundBorderColor,\n lineWidth: textBackgroundBorderWidth,\n fillOpacity: 1,\n },\n },\n },\n startSymbol: {\n visible: theme?.startSymbolVisible ?? true,\n symbolType: theme?.startSymbolType ?? 'triangleDown',\n size: 5 + (lineWidth || 1),\n style: {\n dx: 3,\n fill: lineColor,\n },\n },\n endSymbol: {\n visible: theme?.endSymbolVisible ?? false,\n symbolType: theme?.endSymbolType ?? 'arrow',\n size: 10 + (lineWidth || 1),\n style: {\n dx: -4,\n fill: lineColor,\n },\n },\n }\n }\n\n const finalYValue = resolveAnnotationValue({\n dynamicFilter,\n fallback: dynamicFilter?.fallback as string | number | undefined,\n defaultValue: yValue,\n })\n\n if (isArray(finalYValue) || isString(finalYValue) || isNumber(finalYValue)) {\n const yValueArr = Array.isArray(finalYValue) ? finalYValue : [finalYValue]\n return yValueArr.map(generateOneMarkLine)\n }\n\n return []\n }) as IMarkLineSpec[]\n const specMarkLine = ((spec as ILineChartSpec).markLine as IMarkLineSpec[]) || []\n const newMarkLine = [...specMarkLine, ...(markLine || [])]\n return {\n ...spec,\n markLine: newMarkLine,\n }\n}\n"],"names":["annotationHorizontalLine","spec","context","advancedVSeed","vseed","annotation","config","theme","annotationHorizontalLineList","Array","positionMap","markLine","yValue","dynamicFilter","text","textPosition","textColor","textFontSize","textFontWeight","textAlign","textBaseline","lineColor","lineStyle","lineVisible","lineWidth","textBackgroundVisible","textBackgroundColor","textBackgroundBorderColor","textBackgroundBorderRadius","textBackgroundBorderWidth","textBackgroundPadding","generateOneMarkLine","y","ANNOTATION_Z_INDEX","finalYValue","resolveAnnotationValue","isArray","isString","isNumber","yValueArr","specMarkLine","newMarkLine"],"mappings":"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"}
1
+ {"version":3,"file":"pipeline/spec/chart/pipes/annotation/annotationHorizontalLine.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/annotation/annotationHorizontalLine.ts"],"sourcesContent":["import type { ILineChartSpec, IMarkLineSpec } from '@visactor/vchart'\nimport type { VChartSpecPipe } from 'src/types'\nimport { isArray, isNumber, isString } from 'remeda'\nimport { ANNOTATION_Z_INDEX } from '../../../../utils/constant'\nimport { getAnnotationLineDash, resolveAnnotationValue } from './utils'\n\nexport const annotationHorizontalLine: VChartSpecPipe = (spec, context) => {\n const { advancedVSeed, vseed } = context\n const { annotation, config } = advancedVSeed\n\n if (!annotation || !annotation.annotationHorizontalLine) {\n return spec\n }\n const theme = config?.[vseed.chartType as 'column']?.annotation?.annotationHorizontalLine\n const { annotationHorizontalLine } = annotation\n const annotationHorizontalLineList = Array.isArray(annotationHorizontalLine)\n ? annotationHorizontalLine\n : [annotationHorizontalLine]\n\n const positionMap = {\n outsideStart: 'start',\n outsideEnd: 'end',\n outsideMiddle: 'middle',\n insideStart: 'insideStartTop',\n insideMiddle: 'insideMiddleTop',\n insideEnd: 'insideEndTop',\n }\n\n const markLine = annotationHorizontalLineList.flatMap((annotationHorizontalLine) => {\n const {\n yValue,\n dynamicFilter,\n text = '',\n textPosition = 'insideEnd',\n textColor = theme?.textColor ?? '#ffffff',\n textFontSize = theme?.textFontSize ?? 12,\n textFontWeight = theme?.textFontWeight ?? 400,\n textAlign = 'right',\n textBaseline = 'bottom',\n\n lineColor = theme?.lineColor ?? '#212121',\n lineVisible = theme?.lineStyle ?? true,\n lineWidth = theme?.lineWidth ?? 1,\n\n textBackgroundVisible = theme?.textBackgroundVisible ?? true,\n textBackgroundColor = theme?.textBackgroundColor ?? '#212121',\n textBackgroundBorderColor = theme?.textBackgroundBorderColor ?? '#212121',\n textBackgroundBorderRadius = theme?.textBackgroundBorderRadius ?? 4,\n textBackgroundBorderWidth = theme?.textBackgroundBorderWidth ?? 1,\n textBackgroundPadding = theme?.textBackgroundPadding ?? 2,\n } = annotationHorizontalLine\n const lineStyle = annotationHorizontalLine.lineStyle ?? theme?.lineStyle ?? 'dashed'\n const lineDash = getAnnotationLineDash(lineStyle, annotationHorizontalLine.lineStyle ? undefined : theme?.lineDash)\n const textBackgroundOpacity = theme?.textBackgroundOpacity\n\n const generateOneMarkLine = (y: string | number) => {\n return {\n y,\n autoRange: true,\n zIndex: ANNOTATION_Z_INDEX,\n line: {\n style: {\n visible: lineVisible,\n stroke: lineColor,\n lineWidth: lineWidth,\n lineDash,\n },\n },\n label: {\n confine: true,\n text: text,\n position: (positionMap as any)[textPosition || 'insideEnd'],\n style: {\n visible: true,\n dy: 4,\n stroke: textBackgroundColor,\n lineWidth: 1,\n textAlign: textAlign,\n textBaseline: textBaseline,\n fill: textColor,\n fontSize: textFontSize,\n fontWeight: textFontWeight,\n },\n labelBackground: {\n visible: textBackgroundVisible,\n padding: textBackgroundPadding,\n style: {\n opacity: textBackgroundOpacity ?? 0.95,\n dy: 4,\n cornerRadius: textBackgroundBorderRadius,\n fill: textBackgroundColor,\n stroke: textBackgroundBorderColor,\n lineWidth: textBackgroundBorderWidth,\n fillOpacity: 1,\n },\n },\n },\n startSymbol: {\n visible: theme?.startSymbolVisible ?? true,\n symbolType: theme?.startSymbolType ?? 'triangleDown',\n size: 5 + (lineWidth || 1),\n style: {\n dx: 3,\n fill: lineColor,\n },\n },\n endSymbol: {\n visible: theme?.endSymbolVisible ?? false,\n symbolType: theme?.endSymbolType ?? 'arrow',\n size: 10 + (lineWidth || 1),\n style: {\n dx: -4,\n fill: lineColor,\n },\n },\n }\n }\n\n const finalYValue = resolveAnnotationValue({\n dynamicFilter,\n fallback: dynamicFilter?.fallback as string | number | undefined,\n defaultValue: yValue,\n })\n\n if (isArray(finalYValue) || isString(finalYValue) || isNumber(finalYValue)) {\n const yValueArr = Array.isArray(finalYValue) ? finalYValue : [finalYValue]\n return yValueArr.map(generateOneMarkLine)\n }\n\n return []\n }) as IMarkLineSpec[]\n const specMarkLine = ((spec as ILineChartSpec).markLine as IMarkLineSpec[]) || []\n const newMarkLine = [...specMarkLine, ...(markLine || [])]\n return {\n ...spec,\n markLine: newMarkLine,\n }\n}\n"],"names":["annotationHorizontalLine","spec","context","advancedVSeed","vseed","annotation","config","theme","annotationHorizontalLineList","Array","positionMap","markLine","yValue","dynamicFilter","text","textPosition","textColor","textFontSize","textFontWeight","textAlign","textBaseline","lineColor","lineVisible","lineWidth","textBackgroundVisible","textBackgroundColor","textBackgroundBorderColor","textBackgroundBorderRadius","textBackgroundBorderWidth","textBackgroundPadding","lineStyle","lineDash","getAnnotationLineDash","undefined","textBackgroundOpacity","generateOneMarkLine","y","ANNOTATION_Z_INDEX","finalYValue","resolveAnnotationValue","isArray","isString","isNumber","yValueArr","specMarkLine","newMarkLine"],"mappings":"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"}
@@ -48,6 +48,7 @@ const generateAnnotationPointPipe = (options)=>{
48
48
  };
49
49
  const markPoint = annotationPointList.flatMap((annotationPoint)=>{
50
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;
51
+ const textBackgroundOpacity = theme?.textBackgroundOpacity;
51
52
  const dataset = advancedVSeed.dataset.flat();
52
53
  const selectedData = selectorPoint || dynamicFilter ? findSelectedDatas({
53
54
  dataset,
@@ -75,7 +76,7 @@ const generateAnnotationPointPipe = (options)=>{
75
76
  visible: textBackgroundVisible,
76
77
  padding: textBackgroundPadding,
77
78
  style: {
78
- opacity: 0.95,
79
+ opacity: textBackgroundOpacity ?? 0.95,
79
80
  cornerRadius: textBackgroundBorderRadius ?? 4,
80
81
  fill: textBackgroundColor,
81
82
  stroke: textBackgroundBorderColor,
@@ -86,7 +87,6 @@ const generateAnnotationPointPipe = (options)=>{
86
87
  }
87
88
  },
88
89
  style: {
89
- opacity: 0.95,
90
90
  visible: true,
91
91
  textAlign: textAlign,
92
92
  textBaseline: textBaseline,
@@ -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 { 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
+ {"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 const textBackgroundOpacity = theme?.textBackgroundOpacity\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: textBackgroundOpacity ?? 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 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","textBackgroundOpacity","selectedData","dx","dy","markPointStyle","ANNOTATION_Z_INDEX","res","marks","mark"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { isArray, isNumber, isString } from "remeda";
2
2
  import { ANNOTATION_Z_INDEX } from "../../../../utils/constant.js";
3
- import { resolveAnnotationValue } from "./utils.js";
3
+ import { getAnnotationLineDash, resolveAnnotationValue } from "./utils.js";
4
4
  const annotationVerticalLine_annotationVerticalLine = (spec, context)=>{
5
5
  const { advancedVSeed, vseed } = context;
6
6
  const { annotation, config } = advancedVSeed;
@@ -19,7 +19,10 @@ const annotationVerticalLine_annotationVerticalLine = (spec, context)=>{
19
19
  insideEnd: 'insideEndTop'
20
20
  };
21
21
  const markLine = annotationVerticalLineList.flatMap((annotationVerticalLine)=>{
22
- const { xValue, dynamicFilter, text = '', textPosition = 'insideEnd', textColor = theme?.textColor ?? '#ffffff', textFontSize = theme?.textFontSize ?? 12, textFontWeight = theme?.textFontWeight ?? 400, textAlign = 'center', textBaseline = 'top', lineColor = theme?.lineColor ?? '#212121', lineStyle = theme?.lineStyle ?? 'dashed', lineVisible = theme?.lineStyle ?? true, lineWidth = theme?.lineWidth ?? 1, textBackgroundVisible = theme?.textBackgroundVisible ?? true, textBackgroundColor = theme?.textBackgroundColor ?? '#212121', textBackgroundBorderColor = theme?.textBackgroundBorderColor ?? '#212121', textBackgroundBorderRadius = theme?.textBackgroundBorderRadius ?? 4, textBackgroundBorderWidth = theme?.textBackgroundBorderWidth ?? 1, textBackgroundPadding = theme?.textBackgroundPadding ?? 2 } = annotationVerticalLine;
22
+ const { xValue, dynamicFilter, text = '', textPosition = 'insideEnd', textColor = theme?.textColor ?? '#ffffff', textFontSize = theme?.textFontSize ?? 12, textFontWeight = theme?.textFontWeight ?? 400, textAlign = 'center', textBaseline = 'top', lineColor = theme?.lineColor ?? '#212121', lineVisible = theme?.lineStyle ?? true, lineWidth = theme?.lineWidth ?? 1, textBackgroundVisible = theme?.textBackgroundVisible ?? true, textBackgroundColor = theme?.textBackgroundColor ?? '#212121', textBackgroundBorderColor = theme?.textBackgroundBorderColor ?? '#212121', textBackgroundBorderRadius = theme?.textBackgroundBorderRadius ?? 4, textBackgroundBorderWidth = theme?.textBackgroundBorderWidth ?? 1, textBackgroundPadding = theme?.textBackgroundPadding ?? 2 } = annotationVerticalLine;
23
+ const lineStyle = annotationVerticalLine.lineStyle ?? theme?.lineStyle ?? 'dashed';
24
+ const lineDash = getAnnotationLineDash(lineStyle, annotationVerticalLine.lineStyle ? void 0 : theme?.lineDash);
25
+ const textBackgroundOpacity = theme?.textBackgroundOpacity;
23
26
  const generateOneMarkLine = (x)=>({
24
27
  x,
25
28
  autoRange: true,
@@ -30,15 +33,7 @@ const annotationVerticalLine_annotationVerticalLine = (spec, context)=>{
30
33
  stroke: lineColor,
31
34
  lineStyle: lineStyle,
32
35
  lineWidth: lineWidth,
33
- lineDash: 'dashed' === lineStyle ? [
34
- 5,
35
- 2
36
- ] : 'dotted' === lineStyle ? [
37
- 2,
38
- 5
39
- ] : [
40
- 0
41
- ]
36
+ lineDash
42
37
  }
43
38
  },
44
39
  label: {
@@ -46,7 +41,6 @@ const annotationVerticalLine_annotationVerticalLine = (spec, context)=>{
46
41
  text: text,
47
42
  position: positionMap[textPosition || 'insideEnd'],
48
43
  style: {
49
- opacity: 0.95,
50
44
  dx: 5,
51
45
  visible: true,
52
46
  stroke: textBackgroundColor,
@@ -61,13 +55,13 @@ const annotationVerticalLine_annotationVerticalLine = (spec, context)=>{
61
55
  visible: textBackgroundVisible,
62
56
  padding: textBackgroundPadding,
63
57
  style: {
64
- opacity: 0.95,
58
+ opacity: textBackgroundOpacity ?? 0.95,
65
59
  dx: 5,
66
60
  cornerRadius: textBackgroundBorderRadius,
67
61
  fill: textBackgroundColor,
68
- fillOpacity: 1,
69
62
  stroke: textBackgroundBorderColor,
70
- lineWidth: textBackgroundBorderWidth
63
+ lineWidth: textBackgroundBorderWidth,
64
+ fillOpacity: 1
71
65
  }
72
66
  }
73
67
  },
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline/spec/chart/pipes/annotation/annotationVerticalLine.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/annotation/annotationVerticalLine.ts"],"sourcesContent":["import type { ILineChartSpec, IMarkLineSpec } from '@visactor/vchart'\nimport type { VChartSpecPipe } from 'src/types'\nimport { isArray, isNumber, isString } from 'remeda'\nimport { ANNOTATION_Z_INDEX } from '../../../../utils/constant'\nimport { resolveAnnotationValue } from './utils'\n\nexport const annotationVerticalLine: VChartSpecPipe = (spec, context) => {\n const { advancedVSeed, vseed } = context\n const { annotation, config } = advancedVSeed\n\n if (!annotation || !annotation.annotationVerticalLine) {\n return spec\n }\n\n const theme = config?.[vseed.chartType as 'column']?.annotation?.annotationVerticalLine\n const { annotationVerticalLine } = annotation\n const annotationVerticalLineList = Array.isArray(annotationVerticalLine)\n ? annotationVerticalLine\n : [annotationVerticalLine]\n\n const positionMap = {\n outsideStart: 'start',\n outsideEnd: 'end',\n outsideMiddle: 'middle',\n insideStart: 'insideStartTop',\n insideMiddle: 'insideMiddleTop',\n insideEnd: 'insideEndTop',\n }\n const markLine = annotationVerticalLineList.flatMap((annotationVerticalLine) => {\n const {\n xValue,\n dynamicFilter,\n text = '',\n textPosition = 'insideEnd',\n textColor = theme?.textColor ?? '#ffffff',\n textFontSize = theme?.textFontSize ?? 12,\n textFontWeight = theme?.textFontWeight ?? 400,\n textAlign = 'center',\n textBaseline = 'top',\n\n lineColor = theme?.lineColor ?? '#212121',\n lineStyle = theme?.lineStyle ?? 'dashed',\n lineVisible = theme?.lineStyle ?? true,\n lineWidth = theme?.lineWidth ?? 1,\n\n textBackgroundVisible = theme?.textBackgroundVisible ?? true,\n textBackgroundColor = theme?.textBackgroundColor ?? '#212121',\n textBackgroundBorderColor = theme?.textBackgroundBorderColor ?? '#212121',\n textBackgroundBorderRadius = theme?.textBackgroundBorderRadius ?? 4,\n textBackgroundBorderWidth = theme?.textBackgroundBorderWidth ?? 1,\n textBackgroundPadding = theme?.textBackgroundPadding ?? 2,\n } = annotationVerticalLine\n\n const generateOneMarkLine = (x: number | string) => ({\n x,\n autoRange: true,\n zIndex: ANNOTATION_Z_INDEX,\n line: {\n style: {\n visible: lineVisible,\n stroke: lineColor,\n lineStyle: lineStyle,\n lineWidth: lineWidth,\n lineDash: lineStyle === 'dashed' ? [5, 2] : lineStyle === 'dotted' ? [2, 5] : [0],\n },\n },\n label: {\n confine: true,\n text: text,\n position: (positionMap as any)[textPosition || 'insideEnd'],\n style: {\n opacity: 0.95,\n dx: 5,\n visible: true,\n stroke: textBackgroundColor,\n lineWidth: 1,\n textAlign: textAlign,\n textBaseline: textBaseline,\n fill: textColor,\n fontSize: textFontSize,\n fontWeight: textFontWeight,\n },\n labelBackground: {\n visible: textBackgroundVisible,\n padding: textBackgroundPadding,\n style: {\n opacity: 0.95,\n dx: 5,\n cornerRadius: textBackgroundBorderRadius,\n fill: textBackgroundColor,\n fillOpacity: 1,\n stroke: textBackgroundBorderColor,\n lineWidth: textBackgroundBorderWidth,\n },\n },\n },\n startSymbol: {\n visible: theme?.startSymbolVisible ?? true,\n symbolType: theme?.startSymbolType ?? 'triangleDown',\n size: 5 + (lineWidth || 1),\n style: {\n dy: -3,\n fill: lineColor,\n },\n },\n endSymbol: {\n visible: theme?.endSymbolVisible ?? false,\n symbolType: theme?.endSymbolType ?? 'arrow',\n size: 10 + (lineWidth || 1),\n style: {\n dy: 4,\n fill: lineColor,\n },\n },\n })\n\n const finalXValue = resolveAnnotationValue({\n dynamicFilter,\n fallback: dynamicFilter?.fallback as string | number | undefined,\n defaultValue: xValue,\n })\n\n if (isArray(finalXValue) || isString(finalXValue) || isNumber(finalXValue)) {\n const xValueArr = Array.isArray(finalXValue) ? finalXValue : [finalXValue]\n return xValueArr.map(generateOneMarkLine)\n }\n\n return []\n }) as IMarkLineSpec[]\n\n const specMarkLine = ((spec as ILineChartSpec).markLine as IMarkLineSpec[]) || []\n const newMarkLine = [...specMarkLine, ...(markLine || [])]\n\n return {\n ...spec,\n markLine: newMarkLine,\n }\n}\n"],"names":["annotationVerticalLine","spec","context","advancedVSeed","vseed","annotation","config","theme","annotationVerticalLineList","Array","positionMap","markLine","xValue","dynamicFilter","text","textPosition","textColor","textFontSize","textFontWeight","textAlign","textBaseline","lineColor","lineStyle","lineVisible","lineWidth","textBackgroundVisible","textBackgroundColor","textBackgroundBorderColor","textBackgroundBorderRadius","textBackgroundBorderWidth","textBackgroundPadding","generateOneMarkLine","x","ANNOTATION_Z_INDEX","finalXValue","resolveAnnotationValue","isArray","isString","isNumber","xValueArr","specMarkLine","newMarkLine"],"mappings":"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"}
1
+ {"version":3,"file":"pipeline/spec/chart/pipes/annotation/annotationVerticalLine.js","sources":["../../../../../../../src/pipeline/spec/chart/pipes/annotation/annotationVerticalLine.ts"],"sourcesContent":["import type { ILineChartSpec, IMarkLineSpec } from '@visactor/vchart'\nimport type { VChartSpecPipe } from 'src/types'\nimport { isArray, isNumber, isString } from 'remeda'\nimport { ANNOTATION_Z_INDEX } from '../../../../utils/constant'\nimport { getAnnotationLineDash, resolveAnnotationValue } from './utils'\n\nexport const annotationVerticalLine: VChartSpecPipe = (spec, context) => {\n const { advancedVSeed, vseed } = context\n const { annotation, config } = advancedVSeed\n\n if (!annotation || !annotation.annotationVerticalLine) {\n return spec\n }\n\n const theme = config?.[vseed.chartType as 'column']?.annotation?.annotationVerticalLine\n const { annotationVerticalLine } = annotation\n const annotationVerticalLineList = Array.isArray(annotationVerticalLine)\n ? annotationVerticalLine\n : [annotationVerticalLine]\n\n const positionMap = {\n outsideStart: 'start',\n outsideEnd: 'end',\n outsideMiddle: 'middle',\n insideStart: 'insideStartTop',\n insideMiddle: 'insideMiddleTop',\n insideEnd: 'insideEndTop',\n }\n const markLine = annotationVerticalLineList.flatMap((annotationVerticalLine) => {\n const {\n xValue,\n dynamicFilter,\n text = '',\n textPosition = 'insideEnd',\n textColor = theme?.textColor ?? '#ffffff',\n textFontSize = theme?.textFontSize ?? 12,\n textFontWeight = theme?.textFontWeight ?? 400,\n textAlign = 'center',\n textBaseline = 'top',\n\n lineColor = theme?.lineColor ?? '#212121',\n lineVisible = theme?.lineStyle ?? true,\n lineWidth = theme?.lineWidth ?? 1,\n\n textBackgroundVisible = theme?.textBackgroundVisible ?? true,\n textBackgroundColor = theme?.textBackgroundColor ?? '#212121',\n textBackgroundBorderColor = theme?.textBackgroundBorderColor ?? '#212121',\n textBackgroundBorderRadius = theme?.textBackgroundBorderRadius ?? 4,\n textBackgroundBorderWidth = theme?.textBackgroundBorderWidth ?? 1,\n textBackgroundPadding = theme?.textBackgroundPadding ?? 2,\n } = annotationVerticalLine\n const lineStyle = annotationVerticalLine.lineStyle ?? theme?.lineStyle ?? 'dashed'\n const lineDash = getAnnotationLineDash(lineStyle, annotationVerticalLine.lineStyle ? undefined : theme?.lineDash)\n const textBackgroundOpacity = theme?.textBackgroundOpacity\n\n const generateOneMarkLine = (x: number | string) => ({\n x,\n autoRange: true,\n zIndex: ANNOTATION_Z_INDEX,\n line: {\n style: {\n visible: lineVisible,\n stroke: lineColor,\n lineStyle: lineStyle,\n lineWidth: lineWidth,\n lineDash,\n },\n },\n label: {\n confine: true,\n text: text,\n position: (positionMap as any)[textPosition || 'insideEnd'],\n style: {\n dx: 5,\n visible: true,\n stroke: textBackgroundColor,\n lineWidth: 1,\n textAlign: textAlign,\n textBaseline: textBaseline,\n fill: textColor,\n fontSize: textFontSize,\n fontWeight: textFontWeight,\n },\n labelBackground: {\n visible: textBackgroundVisible,\n padding: textBackgroundPadding,\n style: {\n opacity: textBackgroundOpacity ?? 0.95,\n dx: 5,\n cornerRadius: textBackgroundBorderRadius,\n fill: textBackgroundColor,\n stroke: textBackgroundBorderColor,\n lineWidth: textBackgroundBorderWidth,\n fillOpacity: 1,\n },\n },\n },\n startSymbol: {\n visible: theme?.startSymbolVisible ?? true,\n symbolType: theme?.startSymbolType ?? 'triangleDown',\n size: 5 + (lineWidth || 1),\n style: {\n dy: -3,\n fill: lineColor,\n },\n },\n endSymbol: {\n visible: theme?.endSymbolVisible ?? false,\n symbolType: theme?.endSymbolType ?? 'arrow',\n size: 10 + (lineWidth || 1),\n style: {\n dy: 4,\n fill: lineColor,\n },\n },\n })\n\n const finalXValue = resolveAnnotationValue({\n dynamicFilter,\n fallback: dynamicFilter?.fallback as string | number | undefined,\n defaultValue: xValue,\n })\n\n if (isArray(finalXValue) || isString(finalXValue) || isNumber(finalXValue)) {\n const xValueArr = Array.isArray(finalXValue) ? finalXValue : [finalXValue]\n return xValueArr.map(generateOneMarkLine)\n }\n\n return []\n }) as IMarkLineSpec[]\n\n const specMarkLine = ((spec as ILineChartSpec).markLine as IMarkLineSpec[]) || []\n const newMarkLine = [...specMarkLine, ...(markLine || [])]\n\n return {\n ...spec,\n markLine: newMarkLine,\n }\n}\n"],"names":["annotationVerticalLine","spec","context","advancedVSeed","vseed","annotation","config","theme","annotationVerticalLineList","Array","positionMap","markLine","xValue","dynamicFilter","text","textPosition","textColor","textFontSize","textFontWeight","textAlign","textBaseline","lineColor","lineVisible","lineWidth","textBackgroundVisible","textBackgroundColor","textBackgroundBorderColor","textBackgroundBorderRadius","textBackgroundBorderWidth","textBackgroundPadding","lineStyle","lineDash","getAnnotationLineDash","undefined","textBackgroundOpacity","generateOneMarkLine","x","ANNOTATION_Z_INDEX","finalXValue","resolveAnnotationValue","isArray","isString","isNumber","xValueArr","specMarkLine","newMarkLine"],"mappings":"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"}