import type { BorderRadius, Chart, ChartComponent, Color, CoreChartOptions, DatasetController, Element, FontSpec, Scriptable, ScriptableContext, VisualElement } from 'chart.js'; export type AnyObject = Record; export type LabelPosition = 'top' | 'middle' | 'bottom'; export type LabelAlign = 'left' | 'center' | 'right'; export type LabelOverflow = 'cut' | 'hidden' | 'fit'; export type TreemapDisplayMode = 'containerBoxes' | 'headerBoxes'; export type TreemapBorderWidth = number | Partial>; export type TreemapBorderRadius = Required; export type TreemapFontSpec = Partial; export type TreemapScriptableContext = ScriptableContext<'treemap'> & { raw: TreemapDataPoint; }; export type TreemapFormatter = T | ((context: TreemapScriptableContext) => T); export type TreemapControllerDatasetCaptionsOptions = { align?: Scriptable; color?: Scriptable; display?: boolean; formatter?: TreemapFormatter; font?: TreemapFontSpec; hoverColor?: Scriptable; hoverFont?: TreemapFontSpec; padding?: number; }; export type TreemapControllerDatasetLabelsOptions = { align?: Scriptable; color?: Scriptable; display?: boolean; formatter?: TreemapFormatter; font?: Scriptable; hoverColor?: Scriptable; hoverFont?: Scriptable; overflow?: Scriptable; padding?: number; position?: Scriptable; }; export type TreemapControllerDatasetDividersOptions = { display?: boolean; lineCapStyle?: CanvasLineCap; lineColor?: Color; lineDash?: number[]; lineDashOffset?: number; lineWidth?: number; }; export type TreemapCaptionsOptions = { align?: LabelAlign; color: Color; display?: boolean; font: TreemapFontSpec; formatter?: TreemapFormatter; hoverColor?: Color; hoverFont?: TreemapFontSpec; padding: number; }; export type TreemapLabelsOptions = { align: LabelAlign; color: Color | Color[]; display?: boolean; font: TreemapFontSpec | TreemapFontSpec[]; formatter?: TreemapFormatter; hoverColor?: Color | Color[]; hoverFont?: TreemapFontSpec | TreemapFontSpec[]; overflow: LabelOverflow; padding: number; position: LabelPosition; }; export type TreemapDividersOptions = { display?: boolean; lineCapStyle: CanvasLineCap; lineColor: Color; lineDash: number[]; lineDashOffset: number; lineWidth: number; }; export interface TreemapControllerDatasetOptions { spacing?: number; rtl?: boolean; displayType?: TreemapDisplayMode; backgroundColor?: Scriptable; borderColor?: Scriptable; borderRadius?: Scriptable, TreemapScriptableContext>; borderWidth?: number; hoverBackgroundColor?: Scriptable; hoverBorderColor?: Scriptable; hoverBorderWidth?: number; captions?: TreemapControllerDatasetCaptionsOptions; dividers?: TreemapControllerDatasetDividersOptions; labels?: TreemapControllerDatasetLabelsOptions; label?: string; data: TreemapDataPoint[]; groups?: Array; sumKeys?: Array; tree: number[] | DType[] | AnyObject; treeLeafKey?: keyof DType; treeVersion?: number | string; key?: keyof DType; } export interface TreemapDataPoint { x: number; y: number; w: number; h: number; v: number; s: number; l?: number; g?: string; gs?: number; vs?: AnyObject; _data?: AnyObject; isLeaf?: boolean; } declare module 'chart.js' { interface ChartTypeRegistry { treemap: { chartOptions: CoreChartOptions<'treemap'>; datasetOptions: TreemapControllerDatasetOptions>; defaultDataPoint: TreemapDataPoint; metaExtensions: AnyObject; parsedDataType: unknown; scales: never; }; } } export interface TreemapOptions { backgroundColor: Color; borderColor: Color; borderRadius: number | Partial; borderWidth: TreemapBorderWidth; captions: TreemapCaptionsOptions; displayMode: TreemapDisplayMode; dividers: TreemapDividersOptions; labels: TreemapLabelsOptions; rtl: boolean; spacing: number; } export interface TreemapConfig { x: number; y: number; width: number; height: number; } export type TreemapController = DatasetController; export type TreemapControllerComponent = ChartComponent & { prototype: TreemapController; new (chart: Chart, datasetIndex: number): TreemapController; }; export interface TreemapElement extends Element, VisualElement { } export type TreemapElementComponent = ChartComponent & { prototype: TreemapElement; new (cfg: TreemapConfig): TreemapElement; };