import { Chart, ChartComponent, CoreChartOptions, DatasetController, Element, VisualElement, ScriptableContext, Color, Scriptable, FontSpec } from 'chart.js'; type AnyObject = Record; type TreemapScriptableContext = ScriptableContext<'treemap'> & { raw: TreemapDataPoint } type TreemapControllerDatasetCaptionsOptions = { align?: Scriptable, color?: Scriptable, display?: boolean; formatter?: Scriptable, font?: FontSpec, hoverColor?: Scriptable, hoverFont?: FontSpec, padding?: number, } type TreemapControllerDatasetLabelsOptions = { align?: Scriptable, color?: Scriptable, display?: boolean; formatter?: Scriptable, TreemapScriptableContext>, font?: Scriptable, hoverColor?: Scriptable, hoverFont?: Scriptable, overflow?: Scriptable padding?: number, position?: Scriptable } export type LabelPosition = 'top' | 'middle' | 'bottom'; export type LabelAlign = 'left' | 'center' | 'right'; export type LabelOverflow = 'cut' | 'hidden' | 'fit'; type TreemapControllerDatasetDividersOptions = { display?: boolean, lineCapStyle?: string, lineColor?: string, lineDash?: number[], lineDashOffset?: number, lineWidth?: number, } export interface TreemapControllerDatasetOptions { spacing?: number, rtl?: boolean, backgroundColor?: Scriptable; borderColor?: Scriptable; borderWidth?: number; hoverBackgroundColor?: Scriptable; hoverBorderColor?: Scriptable; hoverBorderWidth?: number; captions?: TreemapControllerDatasetCaptionsOptions; dividers?: TreemapControllerDatasetDividersOptions; labels?: TreemapControllerDatasetLabelsOptions; label?: string; data: TreemapDataPoint[]; // This will be auto-generated from `tree` groups?: Array; sumKeys?: Array; tree: number[] | DType[] | AnyObject; treeLeafKey?: keyof DType; key?: keyof DType; } export interface TreemapDataPoint { x: number, y: number, w: number, h: number, /** * Value */ v: number, /** * Sum */ s: number, /** * Depth, only available if grouping */ l?: number, /** * Group name, only available if grouping */ g?: string, /** * Group Sum, only available if grouping */ gs?: number, /** * additonal keys sums, only available if grouping */ vs?: AnyObject } /* export interface TreemapInteractionOptions { position: Scriptable<"treemap", ScriptableTooltipContext<"treemap">> }*/ declare module 'chart.js' { export interface ChartTypeRegistry { treemap: { chartOptions: CoreChartOptions<'treemap'>; datasetOptions: TreemapControllerDatasetOptions>; defaultDataPoint: TreemapDataPoint; metaExtensions: AnyObject; parsedDataType: unknown, scales: never; } } // interface TooltipOptions extends CoreInteractionOptions, TreemapInteractionOptions { // } } export interface TreemapOptions { backgroundColor: Color; borderColor: Color; borderWidth: number | { top?: number, right?: number, bottom?: number, left?: number } } export interface TreemapConfig { x: number; y: number; width: number; height: number; } export type TreemapController = DatasetController; export const TreemapController: ChartComponent & { prototype: TreemapController; new(chart: Chart, datasetIndex: number): TreemapController }; export interface TreemapElement< T extends TreemapConfig = TreemapConfig, O extends TreemapOptions = TreemapOptions > extends Element, VisualElement {} export const TreemapElement: ChartComponent & { prototype: TreemapElement; new(cfg: TreemapConfig): TreemapElement };