import { type DefaultizedProps } from '@mui/x-internals/types'; import type { HighlightItemIdentifierWithType, HighlightItemIdentifier, SeriesItemIdentifier, SeriesItemIdentifierWithType } from "../../../../models/seriesType/index.js"; import { type ChartSeriesType } from "../../../../models/seriesType/config.js"; import { type ChartPluginSignature } from "../../models/index.js"; import { type UseChartSeriesSignature } from "../../corePlugins/useChartSeries/index.js"; export type HighlightUpdateSource = 'pointer' | 'keyboard'; export interface UseChartHighlightInstance { /** * Remove all highlight. */ clearHighlight: () => void; /** * Set the highlighted item. * @param {HighlightItemIdentifier} item The item to highlight. */ setHighlight: (item: HighlightItemIdentifier | SeriesItemIdentifier | HighlightItemIdentifierWithType | SeriesItemIdentifierWithType) => void; } export interface UseChartHighlightParameters { /** * The highlighted item. * Used when the highlight is controlled. */ highlightedItem?: HighlightItemIdentifier | HighlightItemIdentifierWithType | null; /** * The callback fired when the highlighted item changes. * * @param {HighlightItemIdentifierWithType | null} highlightedItem The newly highlighted item. */ onHighlightChange?: (highlightedItem: HighlightItemIdentifierWithType | null) => void; } export type UseChartHighlightDefaultizedParameters = DefaultizedProps, 'highlightedItem'>; export interface UseChartHighlightState { highlight: { /** * Indicates if the highlighted item is controlled. */ isControlled: boolean; /** * The item currently highlighted. */ item: HighlightItemIdentifierWithType | null; /** * The last interaction highlight update. * Used to decide if highlight should be based on pointer position or keyboard navigation. */ lastUpdate: HighlightUpdateSource; }; } export type UseChartHighlightSignature = ChartPluginSignature<{ instance: UseChartHighlightInstance; state: UseChartHighlightState; params: UseChartHighlightParameters; defaultizedParams: UseChartHighlightDefaultizedParameters; modelNames: 'highlightedItem'; dependencies: [UseChartSeriesSignature]; }>;