| 228 | } |
| 229 | |
| 230 | private getDataLabels( |
| 231 | seriesModels: BulletModel[], |
| 232 | vertical: boolean, |
| 233 | size: number |
| 234 | ): (RectDataLabel | LineDataLabel)[] { |
| 235 | const { dataLabels: dataLabelTheme } = this.theme; |
| 236 | const bulletLabelTheme = omit(dataLabelTheme, 'marker'); |
| 237 | const { useSeriesColor, color } = bulletLabelTheme; |
| 238 | const { marker } = dataLabelTheme; |
| 239 | |
| 240 | return seriesModels |
| 241 | .filter((m) => m.type === 'line' || (m as BulletRectModel).modelType !== 'range') |
| 242 | .map((m) => { |
| 243 | if (m.type === 'line') { |
| 244 | return { |
| 245 | ...m, |
| 246 | x: vertical ? (m.x + m.x2) / 2 : m.x, |
| 247 | theme: { |
| 248 | ...marker, |
| 249 | color: marker!.useSeriesColor ? m.strokeStyle : marker!.color, |
| 250 | }, |
| 251 | } as LineDataLabel; |
| 252 | } |
| 253 | |
| 254 | const isValueNegative = isNumber(m.value) && m?.value < 0; |
| 255 | let direction = vertical ? 'top' : 'right'; |
| 256 | if (isValueNegative) { |
| 257 | direction = vertical ? 'bottom' : 'left'; |
| 258 | } |
| 259 | |
| 260 | return { |
| 261 | ...m, |
| 262 | direction, |
| 263 | plot: { |
| 264 | x: 0, |
| 265 | y: 0, |
| 266 | size, |
| 267 | }, |
| 268 | theme: { |
| 269 | ...bulletLabelTheme, |
| 270 | color: useSeriesColor ? m.color : color, |
| 271 | }, |
| 272 | } as RectDataLabel; |
| 273 | }); |
| 274 | } |
| 275 | |
| 276 | private setEventDetectType(series: Series, options?: BulletChartOptions) { |
| 277 | if (options?.series?.eventDetectType) { |