import { ChartType } from '../../..' ; import { Color , Colors } from '../../../../common/colors' ; import { Pixels } from '../../../../common/geometry' ; import { Box , Font } from '../../../../common/text_utils' ; import { Fill , Line , Rect , Stroke } from '../../../../geoms/types' ; import { HeatmapBrushEvent } from '../../../../specs/settings' ; import { Point } from '../../../../utils/point' ; import { LIGHT_THEME } from '../../../../utils/themes/light_theme' ; import { Visible , HeatmapStyle } from '../../../../utils/themes/theme' ; import { PrimitiveValue } from '../../../partition_chart/layout/utils/group_by_rollup' ; import { HeatmapCellDatum } from '../viewmodel/viewmodel' ; public export interface Cell { x : number ; y : number ; width : number ; height : number ; yIndex : number ; fill : Fill ; stroke : Stroke ; value : number ; formatted : string ; visible : boolean ; datum : HeatmapCellDatum ; textColor : Color ; fontSize : Pixels ; } internal export interface TextBox extends Box { value : NonNullable < PrimitiveValue > ; x : number ; y : number ; } internal export interface HeatmapViewModel { gridOrigin : { x : number ; y : number ; } ; gridLines : { x : Line [ ] ; y : Line [ ] ; stroke : Stroke ; } ; cells : Cell [ ] ; cellFontSize : ( c : Cell ) => Pixels ; xValues : Array < TextBox > ; yValues : Array < TextBox > ; pageSize : number ; titles : Array < Font & Visible & { fontSize : number ; text : string ; origin : Point ; rotation : 0 | - 90 ; } > ; } internal export function isPickedCells ( v ) { return Array . isArray ( v ) ; } internal export type PickFunction = ( x : Pixels , y : Pixels ) => Cell [ ] | TextBox ; internal export type PickDragFunction = ( points : [ Point , Point ] ) => HeatmapBrushEvent ; internal export type PickDragShapeFunction = ( points : [ Point , Point ] ) => Rect | null ; internal export type PickHighlightedArea = ( x : Array < NonNullable < PrimitiveValue > > , y : Array < NonNullable < PrimitiveValue > > ) => Rect | null ; internal export type DragShape = ReturnType < PickDragShapeFunction > ; internal export type ShapeViewModel = { theme : HeatmapStyle ; heatmapViewModel : HeatmapViewModel ; pickQuads : PickFunction ; pickDragArea : PickDragFunction ; pickDragShape : PickDragShapeFunction ; pickHighlightedArea : PickHighlightedArea ; } ; internal export const nullHeatmapViewModel = { gridOrigin : { x : 0 , y : 0 , } , gridLines : { x : [ ] , y : [ ] , stroke : { width : 0 , color : Colors . Transparent . rgba } , } , cells : [ ] , xValues : [ ] , yValues : [ ] , pageSize : 0 , cellFontSize : ( ) => 0 , titles : [ ] , } ; internal export const nullShapeViewModel = ( ) : ShapeViewModel => ( { theme : LIGHT_THEME . heatmap , heatmapViewModel : nullHeatmapViewModel , pickQuads : ( ) => [ ] , pickDragArea : ( ) => ( { cells : [ ] , x : [ ] , y : [ ] , chartType : ChartType . Heatmap } ) , pickDragShape : ( ) => ( { x : 0 , y : 0 , width : 0 , height : 0 } ) , pickHighlightedArea : ( ) => ( { x : 0 , y : 0 , width : 0 , height : 0 } ) , } ) ;