import { ComponentType } from 'react'; import { RegistryItem } from '@grafana/data'; import { PanelOptionsSupplier } from '@grafana/data/src/panel/PanelPlugin'; import { DimensionContext } from '../dimensions/context'; import { BackgroundConfig, Constraint, LineConfig, Placement } from './types'; /** * This gets saved in panel json * * depending on the type, it may have additional config * * @alpha */ export interface CanvasElementOptions { name: string; // configured unique display name type: string; // Custom options depending on the type config?: TConfig; // Standard options available for all elements constraint?: Constraint; // defaults vertical - top, horizontal - left placement?: Placement; background?: BackgroundConfig; border?: LineConfig; } export interface CanvasElementProps { // Saved config config: TConfig; // Raw data data?: TData; } /** * Canvas item builder * * @alpha */ export interface CanvasElementItem extends RegistryItem { /** The default width/height to use when adding */ defaultSize?: Placement; prepareData?: (ctx: DimensionContext, cfg: TConfig) => TData; /** Component used to draw */ display: ComponentType>; getNewOptions: (options?: CanvasElementOptions) => Omit, 'type' | 'name'>; /** Build the configuration UI */ registerOptionsUI?: PanelOptionsSupplier>; }