From: Evert Timberg Date: Fri, 9 Jul 2021 10:57:30 +0000 (-0400) Subject: Improve LegendElement and TooltipItem type definitions (#9376) X-Git-Tag: v3.5.0~32 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ab613a301fd0cd52b24059b4f478f480e5f0edb9;p=thirdparty%2FChart.js.git Improve LegendElement and TooltipItem type definitions (#9376) * Document LegendElement properties in TS * Pass chart type to LegendElement * Update tooltip item dataset type --- diff --git a/types/index.esm.d.ts b/types/index.esm.d.ts index d26a63396..ec7743445 100644 --- a/types/index.esm.d.ts +++ b/types/index.esm.d.ts @@ -2120,9 +2120,14 @@ export interface LegendItem { textAlign?: TextAlign; } -export interface LegendElement extends Element, LayoutItem {} +export interface LegendElement extends Element, LayoutItem { + chart: Chart; + ctx: CanvasRenderingContext2D; + legendItems?: LegendItem[]; + options: LegendOptions; +} -export interface LegendOptions { +export interface LegendOptions { /** * Is the legend shown? * @default true @@ -2159,15 +2164,15 @@ export interface LegendOptions { /** * A callback that is called when a click event is registered on a label item. */ - onClick(this: LegendElement, e: ChartEvent, legendItem: LegendItem, legend: LegendElement): void; + onClick(this: LegendElement, e: ChartEvent, legendItem: LegendItem, legend: LegendElement): void; /** * A callback that is called when a 'mousemove' event is registered on top of a label item */ - onHover(this: LegendElement, e: ChartEvent, legendItem: LegendItem, legend: LegendElement): void; + onHover(this: LegendElement, e: ChartEvent, legendItem: LegendItem, legend: LegendElement): void; /** * A callback that is called when a 'mousemove' event is registered outside of a previously hovered label item. */ - onLeave(this: LegendElement, e: ChartEvent, legendItem: LegendItem, legend: LegendElement): void; + onLeave(this: LegendElement, e: ChartEvent, legendItem: LegendItem, legend: LegendElement): void; labels: { /** @@ -2445,7 +2450,7 @@ export interface ScriptableTooltipContext { tooltipItems: TooltipItem[]; } -export interface TooltipOptions extends CoreInteractionOptions { +export interface TooltipOptions extends CoreInteractionOptions { /** * Are on-canvas tooltips enabled? * @default true @@ -2469,9 +2474,9 @@ export interface TooltipOptions extends CoreInteraction /** * Sort tooltip items. */ - itemSort: (a: TooltipItem, b: TooltipItem, data: ChartData) => number; + itemSort: (a: TooltipItem, b: TooltipItem, data: ChartData) => number; - filter: (e: TooltipItem, index: number, array: TooltipItem[], data: ChartData) => boolean; + filter: (e: TooltipItem, index: number, array: TooltipItem[], data: ChartData) => boolean; /** * Background color of the tooltip. @@ -2648,7 +2653,7 @@ export interface TooltipItem { /** * The dataset the item comes from */ - dataset: ChartDataset; + dataset: UnionToIntersection>; /** * Index of the dataset the item comes from @@ -2669,7 +2674,7 @@ export interface TooltipItem { export interface PluginOptionsByType { decimation: DecimationOptions; filler: FillerOptions; - legend: LegendOptions; + legend: LegendOptions; title: TitleOptions; tooltip: TooltipOptions; } diff --git a/types/tests/plugins/plugin.tooltip/tooltip_dataset_type.ts b/types/tests/plugins/plugin.tooltip/tooltip_dataset_type.ts new file mode 100644 index 000000000..989a7cc45 --- /dev/null +++ b/types/tests/plugins/plugin.tooltip/tooltip_dataset_type.ts @@ -0,0 +1,22 @@ +import { Chart } from '../../../index.esm'; + +const chart = new Chart('id', { + type: 'line', + data: { + labels: [], + datasets: [{ + data: [] + }] + }, + options: { + plugins: { + tooltip: { + callbacks: { + label: (item) => { + return `Y Axis ${item.dataset.yAxisID}`; + } + } + } + } + }, +});