'use strict' ; import type AnimationOptions from '../Animation/AnimationOptions' ; import type ColorType from '../Color/ColorType' ; import type { EventCallback } from '../Callback' ; import type PointLike from './PointLike' ; import type { PointEventsOptions , PointMarkerOptions , PointOptions , PointShortOptions } from './PointOptions' ; import type { PointTypeOptions } from './PointType' ; import type Series from './Series' ; import type { SeriesZonesOptions } from './SeriesOptions' ; import type { StatesOptionsKey } from './StatesOptions' ; import type SVGAttributes from '../Renderer/SVG/SVGAttributes' ; import type SVGElement from '../Renderer/SVG/SVGElement' ; import type SVGLabel from '../Renderer/SVG/SVGLabel' ; import type SVGPath from '../Renderer/SVG/SVGPath' ; import type { SymbolKey } from '../Renderer/SVG/SymbolType' ; import AST from '../Renderer/HTML/AST.js' ; import A from '../Animation/AnimationUtilities.js' ; const { animObject } = A ; import D from '../DefaultOptions.js' ; const { defaultOptions } = D ; import F from '../FormatUtilities.js' ; const { format } = F ; import U from '../Utilities.js' ; const { addEvent , defined , erase , extend , fireEvent , getNestedProperty , isArray , isFunction , isNumber , isObject , merge , objectEach , pick , syncTimeout , removeEvent , uniqueKey } = U ; declare module './PointLike' { interface PointLike { className ? : string ; events ? : PointEventsOptions ; hasImportedEvents ? : boolean ; selected ? : boolean ; selectedStaging ? : boolean ; state ? : string ; haloPath ( size ) : SVGPath ; importEvents ( ) : void ; onMouseOut ( ) : void ; onMouseOver ( e ? ) : void ; select ( selected ? , accumulate ? ) : void ; setState ( state ? , move ? ) : void ; } } /**
 * The Point object. The point objects are generated from the `series.data`
 * configuration objects or raw numbers. They can be accessed from the
 * `Series.points` array. Other ways to instantiate points are through  {@link
 * Highcharts.Series#addPoint} or  Highcharts . Series .
 *
 *  class name class Point { name type { string } public category : string = void 0 as any ; public color ? : ColorType ; name type { number } public colorIndex ? : number = void 0 ; public dataLabels ? : Array < SVGLabel > ; public formatPrefix : string = 'point' ; public id : string = void 0 as any ; public isNew ? : boolean ; public isNull : boolean = false ; public marker ? : PointMarkerOptions ; example name type { string } public name : string = void 0 as any ; public nonZonedColor ? : ColorType ; name type { Highcharts . PointOptionsObject } public options : PointOptions = void 0 as any ; name type { number | undefined } public percentage ? : number = void 0 ; public selected ? : boolean = false ; name type { Highcharts . Series } public series : Series = void 0 as any ; public shapeArgs ? : SVGAttributes ; public shapeType ? : string ; public startXPos ? : number ; public state ? : StatesOptionsKey ; name type { number | undefined } public total ? : number = void 0 ; name type { boolean } default public visible : boolean = true ; public x : number = void 0 as any ; public y ? : ( number | null ) ; private function public animateBeforeDestroy ( ) { const point = this , animateParams = { x : point . startXPos , opacity : 0 } , graphicalProps = point . getGraphicalProps ( ) ; graphicalProps . singular . forEach ( function ( prop ) : void { const isDataLabel = prop === 'dataLabel' ; ( point as any ) [ prop ] = ( point as any ) [ prop ] . animate ( isDataLabel ? { x : ( point as any ) [ prop ] . startXPos , y : ( point as any ) [ prop ] . startYPos , opacity : 0 } : animateParams ) ; } ) ; graphicalProps . plural . forEach ( function ( plural ) : void { ( point as any ) [ plural ] . forEach ( function ( item ) : void { if ( item . element ) { item . animate ( extend < SVGAttributes > ( { x : point . startXPos } , ( item . startYPos ? { x : item . startXPos , y : item . startYPos } : { } ) ) ) ; } } ) ; } ) ; } private function param { Highcharts . PointOptionsType } options param { number } x return { Highcharts . Point } public applyOptions ( options , x ? ) { const point = this , series = point . series , pointValKey = series . options . pointValKey || series . pointValKey ; options = Point . prototype . optionsToObject . call ( this , options ) ; extend ( point , options as any ) ; point . options = point . options ? extend ( point . options , options as any ) : options ; if ( ( options as any ) . group ) { delete ( point as any ) . group ; } if ( options . dataLabels ) { delete point . dataLabels ; } name type { number | undefined } if ( pointValKey ) { point . y = Point . prototype . getNestedProperty . call ( point , pointValKey ) as ( number | null | undefined ) ; } point . isNull = pick ( point . isValid && ! point . isValid ( ) , point . x === null || ! isNumber ( point . y ) ) ; point . formatPrefix = point . isNull ? 'null' : 'point' ; if ( point . selected ) { point . state = 'select' ; } name type { number } if ( 'name' in point && typeof x === 'undefined' && series . xAxis && series . xAxis . hasNames ) { point . x = series . xAxis . nameToX ( point ) ; } if ( typeof point . x === 'undefined' && series ) { if ( typeof x === 'undefined' ) { point . x = series . autoIncrement ( ) ; } else { point . x = x ; } } else if ( isNumber ( options . x ) && series . options . relativeXValue ) { point . x = series . autoIncrement ( options . x ) ; } return point ; } private function public destroy ( ) { const point = this , series = point . series , chart = series . chart , dataSorting = series . options . dataSorting , hoverPoints = chart . hoverPoints , globalAnimation = point . series . chart . renderer . globalAnimation , animation = animObject ( globalAnimation ) ; let prop ; private function destroyPoint ( ) { if ( point . graphic || point . dataLabel || point . dataLabels ) { removeEvent ( point ) ; point . destroyElements ( ) ; } for ( prop in point ) { ( point as any ) [ prop ] = null ; } } if ( point . legendItem ) { chart . legend . destroyItem ( point ) ; } if ( hoverPoints ) { point . setState ( ) ; erase ( hoverPoints , point ) ; if ( ! hoverPoints . length ) { chart . hoverPoints = null as any ; } } if ( point === chart . hoverPoint ) { point . onMouseOut ( ) ; } if ( ! dataSorting || ! dataSorting . enabled ) { destroyPoint ( ) ; } else { this . animateBeforeDestroy ( ) ; syncTimeout ( destroyPoint , animation . duration ) ; } chart . pointCount -- ; } private function param { Highcharts . Dictionary < number > } kinds public destroyElements ( kinds ? ) { const point = this , props = point . getGraphicalProps ( kinds ) ; props . singular . forEach ( function ( prop ) : void { ( point as any ) [ prop ] = ( point as any ) [ prop ] . destroy ( ) ; } ) ; props . plural . forEach ( function ( plural ) : void { ( point as any ) [ plural ] . forEach ( function ( item ) : void { if ( item . element ) { item . destroy ( ) ; } } ) ; delete ( point as any ) [ plural ] ; } ) ; } private function param { string } eventType param { Highcharts . Dictionary < any > | Event } eventArgs param { Highcharts . EventCallbackFunction < Highcharts . Point > | Function } defaultFunction emits public firePointEvent < T extends AnyRecord | Event > ( eventType , eventArgs ? , defaultFunction ? ) { const point = this , series = this . series , seriesOptions = series . options ; if ( ( seriesOptions . point as any ) . events [ eventType ] || ( point . options && point . options . events && ( point . options . events as any ) [ eventType ] ) ) { point . importEvents ( ) ; } if ( eventType === 'click' && seriesOptions . allowPointSelect ) { defaultFunction = function ( event ) : void { if ( point . select ) { point . select ( null as any , event . ctrlKey || event . metaKey || event . shiftKey ) ; } } ; } fireEvent ( point , eventType , eventArgs , defaultFunction ) ; } function return { string } public getClassName ( ) { const point = this ; return 'highcharts-point' + ( point . selected ? ' highcharts-point-select' : '' ) + ( point . negative ? ' highcharts-negative' : '' ) + ( point . isNull ? ' highcharts-null-point' : '' ) + ( typeof point . colorIndex !== 'undefined' ? ' highcharts-color-' + point . colorIndex : '' ) + ( point . options . className ? ' ' + point . options . className : '' ) + ( point . zone && point . zone . className ? ' ' + point . zone . className . replace ( 'highcharts-negative' , '' ) : '' ) ; } private function public getGraphicalProps ( kinds ? ) { const point = this , props = [ ] , graphicalProps = { singular : [ ] , plural : [ ] } ; let prop , i ; kinds = kinds || { graphic : 1 , dataLabel : 1 } ; if ( kinds . graphic ) { props . push ( 'graphic' , 'upperGraphic' , 'shadowGroup' ) ; } if ( kinds . dataLabel ) { props . push ( 'dataLabel' , 'dataLabelUpper' , 'connector' ) ; } i = props . length ; while ( i -- ) { prop = props [ i ] ; if ( ( point as any ) [ prop ] ) { graphicalProps . singular . push ( prop ) ; } } [ 'dataLabel' , 'connector' ] . forEach ( function ( prop ) : void { const plural = prop + 's' ; if ( ( kinds as any ) [ prop ] && ( point as any ) [ plural ] ) { graphicalProps . plural . push ( plural ) ; } } ) ; return graphicalProps ; } function return { Highcharts . PointLabelObject } public getLabelConfig ( ) { return { x : this . category , y : this . y , color : this . color , colorIndex : this . colorIndex , key : this . name || this . category , series : this . series , point : this as any , percentage : this . percentage , total : this . total || ( this as any ) . stackTotal } ; } private public getNestedProperty ( key ? ) { if ( ! key ) { return ; } if ( key . indexOf ( 'custom.' ) === 0 ) { return getNestedProperty ( key , this . options ) ; } return ( this as any ) [ key ] ; } function return { Highcharts . SeriesZonesOptionsObject } public getZone ( ) { const series = this . series , zones = series . zones , zoneAxis = series . zoneAxis || 'y' ; let zone , i = 0 ; zone = zones [ i ] ; while ( ( this as any ) [ zoneAxis ] >= ( zone . value as any ) ) { zone = zones [ ++ i ] ; } if ( ! this . nonZonedColor ) { this . nonZonedColor = this . color ; } if ( zone && zone . color && ! this . options . color ) { this . color = zone . color ; } else { this . color = this . nonZonedColor ; } return zone ; } private public hasNewShapeType ( ) { const point = this ; const oldShapeType = point . graphic && ( point . graphic . symbolName || point . graphic . element . nodeName ) ; return oldShapeType !== this . shapeType ; } function param { Highcharts . Series } series param { Highcharts . PointOptionsType } options param { number } x return { Highcharts . Point } emits public init ( series , options , x ? ) { this . series = series ; this . applyOptions ( options , x ) ; this . id = defined ( this . id ) ? this . id : uniqueKey ( ) ; this . resolveColor ( ) ; series . chart . pointCount ++ ; fireEvent ( this , 'afterInit' ) ; return this ; } private public isValid ? ( ) ; deprecated function param { Highcharts . PointOptionsType } options return { Highcharts . Dictionary < * > } public optionsToObject ( options ) { const series = this . series , keys = series . options . keys , pointArrayMap = keys || series . pointArrayMap || [ 'y' ] , valueCount = pointArrayMap . length ; let ret = { } as AnyRecord , firstItemType , i = 0 , j = 0 ; if ( isNumber ( options ) || options === null ) { ret [ pointArrayMap [ 0 ] ] = options ; } else if ( isArray ( options ) ) { if ( ! keys && ( options as any ) . length > valueCount ) { firstItemType = typeof ( options as any ) [ 0 ] ; if ( firstItemType === 'string' ) { ret . name = ( options as any ) [ 0 ] ; } else if ( firstItemType === 'number' ) { ret . x = ( options as any ) [ 0 ] ; } i ++ ; } while ( j < valueCount ) { if ( ! keys || typeof ( options as any ) [ i ] !== 'undefined' ) { if ( pointArrayMap [ j ] . indexOf ( '.' ) > 0 ) { Point . prototype . setNestedProperty ( ret , ( options as any ) [ i ] , pointArrayMap [ j ] ) ; } else { ret [ pointArrayMap [ j ] ] = ( options as any ) [ i ] ; } } i ++ ; j ++ ; } } else if ( typeof options === 'object' ) { ret = options ; if ( ( options as any ) . dataLabels ) { series . _hasPointLabels = true ; } if ( ( options as any ) . marker ) { series . _hasPointMarkers = true ; } } return ret ; } private function public resolveColor ( ) { const series = this . series , optionsChart = series . chart . options . chart , styledMode = series . chart . styledMode ; let color , colors , colorCount = optionsChart . colorCount , colorIndex ; delete ( this as any ) . nonZonedColor ; if ( series . options . colorByPoint ) { if ( ! styledMode ) { colors = series . options . colors || series . chart . options . colors ; color = ( colors as any ) [ series . colorCounter ] ; colorCount = ( colors as any ) . length ; } colorIndex = series . colorCounter ; series . colorCounter ++ ; if ( series . colorCounter === colorCount ) { series . colorCounter = 0 ; } } else { if ( ! styledMode ) { color = series . color ; } colorIndex = series . colorIndex as any ; } this . colorIndex = pick ( this . options . colorIndex , colorIndex ) ; name type { Highcharts . ColorString | Highcharts . GradientColorObject | Highcharts . PatternObject | undefined } this . color = pick ( this . options . color , color ) ; } function param { T } object param { * } value param { string } key return { T } public setNestedProperty < T > ( object , value , key ) { const nestedKeys = key . split ( '.' ) ; nestedKeys . reduce ( function ( result , key , i , arr ) : T { const isLastKey = arr . length - 1 === i ; result [ key ] = ( isLastKey ? value : isObject ( result [ key ] , true ) ? result [ key ] : { } ) ; return result [ key ] ; } , object ) ; return object ; } function param { string } pointFormat return { string } public tooltipFormatter ( pointFormat ) { const series = this . series , seriesTooltipOptions = series . tooltipOptions , valueDecimals = pick ( seriesTooltipOptions . valueDecimals , '' ) , valuePrefix = seriesTooltipOptions . valuePrefix || '' , valueSuffix = seriesTooltipOptions . valueSuffix || '' ; if ( series . chart . styledMode ) { pointFormat = ( series . chart . tooltip as any ) . styledModeFormat ( pointFormat ) ; } ( series . pointArrayMap || [ 'y' ] ) . forEach ( function ( key ) : void { key = '{point.' + key ; if ( valuePrefix || valueSuffix ) { pointFormat = pointFormat . replace ( RegExp ( key + '}' , 'g' ) , valuePrefix + key + '}' + valueSuffix ) ; } pointFormat = pointFormat . replace ( RegExp ( key + '}' , 'g' ) , key + ':,.' + valueDecimals + 'f}' ) ; } ) ; return format ( pointFormat , { point : this , series : this . series } , series . chart ) ; } sample sample sample function param { Highcharts . PointOptionsType } options param { boolean } redraw param { boolean | Partial < Highcharts . AnimationOptionsObject > } animation emits public update ( options , redraw ? , animation ? , runEvent ? ) { const point = this , series = point . series , graphic = point . graphic , chart = series . chart , seriesOptions = series . options ; let i ; redraw = pick ( redraw , true ) ; private function update ( ) { point . applyOptions ( options ) ; const hasDummyGraphic = graphic && point . hasDummyGraphic ; const shouldDestroyGraphic = point . y === null ? ! hasDummyGraphic : hasDummyGraphic ; if ( graphic && shouldDestroyGraphic ) { point . graphic = graphic . destroy ( ) ; delete point . hasDummyGraphic ; } if ( isObject ( options , true ) ) { if ( graphic && graphic . element ) { if ( options && ( options as any ) . marker && typeof ( options as any ) . marker . symbol !== 'undefined' ) { point . graphic = graphic . destroy ( ) ; } } if ( options && ( options as any ) . dataLabels && point . dataLabel ) { point . dataLabel = point . dataLabel . destroy ( ) ; } if ( point . connector ) { point . connector = point . connector . destroy ( ) ; } } i = point . index as any ; series . updateParallelArrays ( point , i ) ; ( seriesOptions . data as any ) [ i ] = ( isObject ( ( seriesOptions . data as any ) [ i ] , true ) || isObject ( options , true ) ) ? point . options : pick ( options , ( seriesOptions . data as any ) [ i ] ) ; series . isDirty = series . isDirtyData = true ; if ( ! series . fixedBox && series . hasCartesianSeries ) { chart . isDirtyBox = true ; } if ( seriesOptions . legendType === 'point' ) { chart . isDirtyLegend = true ; } if ( redraw ) { chart . redraw ( animation ) ; } } if ( runEvent === false ) { update ( ) ; } else { point . firePointEvent ( 'update' , { options : options } , update ) ; } } sample sample sample function param { boolean } redraw param { boolean | Partial < Highcharts . AnimationOptionsObject > } animation public remove ( redraw ? , animation ? ) { this . series . removePoint ( this . series . data . indexOf ( this ) , redraw , animation ) ; } see Highcharts . Chart sample sample sample function param { boolean } selected param { boolean } accumulate emits emits public select ( selected ? , accumulate ? ) { const point = this , series = point . series , chart = series . chart ; selected = pick ( selected , ! point . selected ) ; this . selectedStaging = selected ; point . firePointEvent ( selected ? 'select' : 'unselect' , { accumulate : accumulate } , function ( ) : void { see Point see Chart name type { boolean } point . selected = point . options . selected = selected ; ( series . options . data as any ) [ series . data . indexOf ( point ) ] = point . options ; point . setState ( ( selected as any ) && 'select' ) ; if ( ! accumulate ) { chart . getSelectedPoints ( ) . forEach ( function ( loopPoint ) : void { const loopSeries = loopPoint . series ; if ( loopPoint . selected && loopPoint !== point ) { loopPoint . selected = loopPoint . options . selected = false ; ( loopSeries . options . data as any ) [ loopSeries . data . indexOf ( loopPoint ) ] = loopPoint . options ; loopPoint . setState ( chart . hoverPoints && loopSeries . options . inactiveOtherPoints ? 'inactive' : '' ) ; loopPoint . firePointEvent ( 'unselect' ) ; } } ) ; } } ) ; delete this . selectedStaging ; } function param { Highcharts . PointerEventObject } e public onMouseOver ( e ? ) { const point = this , series = point . series , chart = series . chart , pointer = chart . pointer ; e = e ? pointer . normalize ( e ) : pointer . getChartCoordinatesFromPoint ( point , chart . inverted ) as any ; pointer . runPointActions ( e as any , point ) ; } function emits public onMouseOut ( ) { const point = this , chart = point . series . chart ; point . firePointEvent ( 'mouseOut' ) ; if ( ! point . series . options . inactiveOtherPoints ) { ( chart . hoverPoints || [ ] ) . forEach ( function ( p ) : void { p . setState ( ) ; } ) ; } chart . hoverPoints = chart . hoverPoint = null as any ; } private function public importEvents ( ) { if ( ! this . hasImportedEvents ) { const point = this , options = merge ( point . series . options . point as PointOptions , point . options ) , events = options . events ; point . events = events ; objectEach ( events , function ( event , eventType ) : void { if ( isFunction ( event ) ) { addEvent ( point , eventType , event ) ; } } ) ; this . hasImportedEvents = true ; } } function param { Highcharts . PointStateValue | "" } state param { boolean } move emits public setState ( state ? , move ? ) { const point = this , series = point . series , previousState = point . state , stateOptions = ( ( series . options . states as any ) [ state || 'normal' ] || { } ) , markerOptions = ( ( defaultOptions . plotOptions as any ) [ series . type as any ] . marker && series . options . marker ) , normalDisabled = ( markerOptions && markerOptions . enabled === false ) , markerStateOptions = ( ( markerOptions && markerOptions . states && ( markerOptions . states as any ) [ state || 'normal' ] ) || { } ) , stateDisabled = ( markerStateOptions as any ) . enabled === false , pointMarker = point . marker || { } , chart = series . chart , hasMarkers = ( markerOptions && series . markerAttribs ) ; let halo = series . halo , markerAttribs , pointAttribs , pointAttribsAnimation , stateMarkerGraphic = series . stateMarkerGraphic , newSymbol ; state = state || '' ; if ( ( state === point . state && ! move ) || ( point . selected && state !== 'select' ) || ( stateOptions . enabled === false ) || ( state && ( stateDisabled || ( normalDisabled && ( markerStateOptions as any ) . enabled === false ) ) ) || ( state && pointMarker . states && ( pointMarker . states as any ) [ state ] && ( pointMarker . states as any ) [ state ] . enabled === false ) ) { return ; } point . state = state ; if ( hasMarkers ) { markerAttribs = series . markerAttribs ( point , state ) ; } if ( point . graphic && ! point . hasDummyGraphic ) { if ( previousState ) { point . graphic . removeClass ( 'highcharts-point-' + previousState ) ; } if ( state ) { point . graphic . addClass ( 'highcharts-point-' + state ) ; } if ( ! chart . styledMode ) { pointAttribs = series . pointAttribs ( point , state ) ; pointAttribsAnimation = pick ( chart . options . chart . animation , stateOptions . animation ) ; if ( series . options . inactiveOtherPoints && isNumber ( pointAttribs . opacity ) ) { ( point . dataLabels || [ ] ) . forEach ( function ( label ) : void { if ( label ) { label . animate ( { opacity : pointAttribs . opacity } , pointAttribsAnimation ) ; } } ) ; if ( point . connector ) { point . connector . animate ( { opacity : pointAttribs . opacity } , pointAttribsAnimation ) ; } } point . graphic . animate ( pointAttribs , pointAttribsAnimation ) ; } if ( markerAttribs ) { point . graphic . animate ( markerAttribs , pick ( chart . options . chart . animation , ( markerStateOptions as any ) . animation , ( markerOptions as any ) . animation ) ) ; } if ( stateMarkerGraphic ) { stateMarkerGraphic . hide ( ) ; } } else { if ( state && markerStateOptions ) { newSymbol = pointMarker . symbol || series . symbol ; if ( stateMarkerGraphic && stateMarkerGraphic . currentSymbol !== newSymbol ) { stateMarkerGraphic = stateMarkerGraphic . destroy ( ) ; } if ( markerAttribs ) { if ( ! stateMarkerGraphic ) { if ( newSymbol ) { series . stateMarkerGraphic = stateMarkerGraphic = chart . renderer . symbol ( newSymbol , markerAttribs . x , markerAttribs . y , markerAttribs . width , markerAttribs . height ) . add ( series . markerGroup ) ; stateMarkerGraphic . currentSymbol = newSymbol ; } } else { stateMarkerGraphic [ move ? 'animate' : 'attr' ] ( { x : markerAttribs . x , y : markerAttribs . y } ) ; } } if ( ! chart . styledMode && stateMarkerGraphic && point . state !== 'inactive' ) { stateMarkerGraphic . attr ( series . pointAttribs ( point , state ) ) ; } } if ( stateMarkerGraphic ) { stateMarkerGraphic [ state && point . isInside ? 'show' : 'hide' ] ( ) ; ( stateMarkerGraphic . element as any ) . point = point ; stateMarkerGraphic . addClass ( point . getClassName ( ) , true ) ; } } const haloOptions = stateOptions . halo ; const markerGraphic = ( point . graphic || stateMarkerGraphic ) ; const markerVisibility = ( markerGraphic && markerGraphic . visibility || 'inherit' ) ; if ( haloOptions && haloOptions . size && markerGraphic && markerVisibility !== 'hidden' && ! point . isCluster ) { if ( ! halo ) { series . halo = halo = chart . renderer . path ( ) . add ( markerGraphic . parentGroup ) ; } halo . show ( ) [ move ? 'animate' : 'attr' ] ( { d : point . haloPath ( haloOptions . size ) as any } ) ; halo . attr ( { 'class' : 'highcharts-halo highcharts-color-' + pick ( point . colorIndex , series . colorIndex ) + ( point . className ? ' ' + point . className : '' ) , 'visibility' : markerVisibility , 'zIndex' : - 1 } ) ; halo . point = point ; if ( ! chart . styledMode ) { halo . attr ( extend < SVGAttributes > ( { 'fill' : point . color || series . color , 'fill-opacity' : haloOptions . opacity } , AST . filterUserAttributes ( haloOptions . attributes || { } ) ) ) ; } } else if ( halo && halo . point && halo . point . haloPath ) { halo . animate ( { d : halo . point . haloPath ( 0 ) } , null as any , halo . hide ) ; } fireEvent ( point , 'afterSetState' , { state } ) ; } function param { number } size return { Highcharts . SVGPathArray } public haloPath ( size ) { const series = this . series , chart = series . chart ; return chart . renderer . symbols . circle ( Math . floor ( this . plotX as any ) - size , ( this . plotY as any ) - size , size * 2 , size * 2 ) ; } } interface Point extends PointLike { } namespace Point { export interface GraphicalProps { singular : Array < string > ; plural : Array < string > ; } export interface PointLabelObject { x ? : ( number | string ) ; y ? : ( number | null ) ; color ? : ColorType ; colorIndex ? : number ; key ? : number | string ; series : Series ; point : Point ; percentage ? : number ; total ? : number ; } export interface SeriesPointsOptions { events ? : Highcharts . PointEventsOptionsObject ; } export interface UpdateCallbackFunction { ( this , event ) : void ; } export interface UpdateEventObject { options ? : PointTypeOptions ; } } export default Point ; callback Highcharts . PointClickCallbackFunction param { Highcharts . Point } this param { Highcharts . PointClickEventObject } event interface extends Highcharts . PointerEventObject name type { Highcharts . Point } interface name type { Highcharts . ColorString | Highcharts . GradientColorObject | Highcharts . PatternObject | undefined } name type { number } name type { string | undefined } name type { number } name type { Highcharts . Point } name type { Highcharts . Series } name type { number | undefined } name type { number | string | undefined } name type { number | null | undefined } callback Highcharts . PointMouseOutCallbackFunction param { Highcharts . Point } this param { global . PointerEvent } event callback Highcharts . PointMouseOverCallbackFunction param { Highcharts . Point } this param { global . Event } event interface typedef { number | string | Highcharts . PointOptionsObject | Array < ( number | string | null ) > | null } Highcharts . PointOptionsType callback Highcharts . PointRemoveCallbackFunction param { Highcharts . Point } this param { global . Event } event typedef { "hover" | "inactive" | "normal" | "select" } Highcharts . PointStateValue callback Highcharts . PointUpdateCallbackFunction param { Highcharts . Point } this param { Highcharts . PointUpdateEventObject } event interface extends global . Event name type { Highcharts . PointOptionsType } interface name type { Highcharts . PointSelectCallbackFunction | undefined } name type { Highcharts . PointUnselectCallbackFunction | undefined } interface extends global . Event name type { boolean } callback Highcharts . PointSelectCallbackFunction param { Highcharts . Point } this param { Highcharts . PointInteractionEventObject } event callback Highcharts . PointUnselectCallbackFunction param { Highcharts . Point } this param { Highcharts . PointInteractionEventObject } event '' ;