/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 . ĠJetBrains Ġs . r . o . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠMIT Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ Ġ*/ Ċ Ċ package Ġjet brains . datal ore Ċ Ċ import Ġjet brains . datal ore . plot . base . Aes Ċ import Ġjet brains . datal ore . plot . builder . interact . Geom Interaction Builder Ċ import Ġjet brains . datal ore . plot . builder . theme . Default Theme Ċ import Ġjet brains . datal ore . plot . builder . theme . Theme Ċ import Ġjet brains . datal ore . plot . builder . theme 2 . values . Theme Option . AXIS _ TEXT Ċ import Ġjet brains . datal ore . plot . builder . theme 2 . values . Theme Option . AXIS _ TOOL TIP Ċ import Ġjet brains . datal ore . plot . builder . theme 2 . values . Theme Option . ELEMENT _ BLANK Ċ import Ġjet brains . datal ore . plot . builder . tooltip . Mapping Value Ċ import Ġjet brains . datal ore . plot . builder . tooltip . Tooltip Line Ċ import Ġjet brains . datal ore . plot . config . Geom Interaction Util Ċ import Ġjet brains . datal ore . plot . config . Option Ċ import Ġjet brains . datal ore . plot . config . Option . Layer . GE OM Ċ import Ġjet brains . datal ore . plot . config . Option . Meta Ċ import Ġjet brains . datal ore . plot . config . Option . Plot . LAY ERS Ċ import Ġjet brains . datal ore . plot . config . Option . Plot . SCAL ES Ċ import Ġjet brains . datal ore . plot . config . Option . Plot Base . MAPPING Ċ import Ġjet brains . datal ore . plot . config . Option . Scale . AES Ċ import Ġjet brains . datal ore . plot . config . Option . Scale . SCALE _ MAP PER _ KIND Ċ import Ġjet brains . datal ore . plot . config . Plot Config Ċ import Ġjet brains . datal ore . plot . config . Plot Config Client Side Ċ import Ġjet brains . datal ore . plot . config . theme . Theme Config Ċ import Ġjet brains . datal ore . plot . server . config . Plot Config Server Side Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertFalse Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠGe om Interaction Builder Creation Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġdata Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠ ĠA es . X . name Ġto ĠlistOf ( 1 . 0 ), ĊĠĠĠĠĠĠĠ ĠA es . Y . name Ġto ĠlistOf ( 1 . 0 ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` check Ġaes Ġlist Ġfor Ġtooltip `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmapped Data Ġ= Ġdata Ġ+ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA es . FILL . name Ġto ĠlistOf ( 4 . 0 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġhistogram Interaction Builder ( mapped Data ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Aes List Ġ= ĠlistOf ( Aes . X , ĠA es . Y , ĠA es . FILL ) ĊĠĠĠĠĠĠĠ Ġval Ġaes List For Tooltip Ġ= Ġget Aes List In Tooltip ( builder . tooltip Lines ) ĊĠĠĠĠĠĠĠ Ġassert Aes List ( expected Aes List , Ġaes List For Tooltip ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġnot Ġduplicate Ġvar Ġto Ġaxis Ġand Ġgeneric Ġtooltip `() Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcheck D uplicated With Axis ( mapped Data : ĠMap < String , ĠAny >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġhistogram Interaction Builder ( mapped Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaes List For Tooltip Ġ= Ġget Aes List In Tooltip ( builder . tooltip Lines ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert No Tooltip For Aes ( Aes . FILL , Ġaes List For Tooltip ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Aes List Ġ= ĠlistOf ( Aes . X , ĠA es . Y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Aes List ( expected Aes List , Ġaes List For Tooltip ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmapped Data Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA es . X . name Ġto ĠlistOf ( 4 . 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA es . FILL . name Ġto ĠA es . X . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck D uplicated With Axis ( mapped Data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdiscrete Ġvar Ġwith Ġmultiple Ġfactors Ġenough Ġfor Ġthe Ġtooltip ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmapped Data Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA es . X . name Ġto ĠlistOf (' a ', Ġ' b ', Ġ' c ', Ġ' d ', Ġ' e '), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA es . FILL . name Ġto ĠA es . X . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck D uplicated With Axis ( mapped Data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġskip Ġdiscrete Ġmappings Ġ( small Ġnumber Ġof Ġfactors )` () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmapped Data Ġ= Ġdata Ġ+ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA es . X . name Ġto ĠlistOf ( 4 . 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA es . FILL . name Ġto ĠlistOf (' a '), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA es . COLOR . name Ġto ĠlistOf (' a '), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA es . SIZE . name Ġto ĠlistOf ( 1 . 0 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġhistogram Interaction Builder ( mapped Data ) ĊĠĠĠĠĠĠĠ Ġval Ġaes List For Tooltip Ġ= Ġget Aes List In Tooltip ( builder . tooltip Lines ) ĊĠĠĠĠĠĠĠ Ġassert No Tooltip For Aes ( Aes . FILL , Ġaes List For Tooltip ) ĊĠĠĠĠĠĠĠ Ġassert No Tooltip For Aes ( Aes . COLOR , Ġaes List For Tooltip ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Aes List Ġ= ĠlistOf ( Aes . X , ĠA es . Y , ĠA es . SIZE ) ĊĠĠĠĠĠĠĠ Ġassert Aes List ( expected Aes List , Ġaes List For Tooltip ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` origin ally Ġcontinuous Ġvar Ġshould Ġbe Ġin Ġtooltip `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠIssue Ġ# 2 4 1 : ĠTooltip Ġshould Ġappear Ġif Ġthe Ġmapped Ġdata Ġis Ġcontinuous ĊĠĠĠĠĠĠĠ Ġ// ĠWith Ġcolor _ fill _ bre wer : ĊĠĠĠĠĠĠĠ Ġ// Ġafter ĠGuide Map pers . continuous To Discrete () Ġtooltip Ġmay Ġnot Ġdisplay Ġrequired Ġoriginally Ġcontinuous Ġdata . ĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġtile With Bre wer Scale ( use Bre wer Scale Ġ= Ġtrue , Ġuse Continuous Vars Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaes List For Tooltip Ġ= Ġget Aes List In Tooltip ( builder . tooltip Lines ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tooltip For Aes ( Aes . FILL , Ġaes List For Tooltip ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġtile With Bre wer Scale ( use Bre wer Scale Ġ= Ġfalse , Ġuse Continuous Vars Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaes List For Tooltip Ġ= Ġget Aes List In Tooltip ( builder . tooltip Lines ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tooltip For Aes ( Aes . FILL , Ġaes List For Tooltip ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` discrete Ġvar Ġshould Ġnot Ġbe Ġin Ġtooltip Ġ( small Ġnumber Ġof Ġfactors )` () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġtile With Bre wer Scale ( use Bre wer Scale Ġ= Ġtrue , Ġuse Continuous Vars Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaes List For Tooltip Ġ= Ġget Aes List In Tooltip ( builder . tooltip Lines ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert No Tooltip For Aes ( Aes . FILL , Ġaes List For Tooltip ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġtile With Bre wer Scale ( use Bre wer Scale Ġ= Ġfalse , Ġuse Continuous Vars Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaes List For Tooltip Ġ= Ġget Aes List In Tooltip ( builder . tooltip Lines ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert No Tooltip For Aes ( Aes . FILL , Ġaes List For Tooltip ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` tooltip s Ġdepending Ġon Ġnumber Ġof Ġfactors `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġhistogram Interaction Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA es . X . name Ġto ĠlistOf (' a ', Ġ' b ', Ġ' c ', Ġ' d ', Ġ' e '), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA es . FILL . name Ġto ĠlistOf (' a ', Ġ' b ', Ġ' c ', Ġ' d ', Ġ' e ') Ġ// Ġfactors . size Ġ= Ġ 5 Ġ- Ġenough Ġto Ġshow Ġin Ġthe Ġtooltip ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaes List For Tooltip Ġ= Ġget Aes List In Tooltip ( builder . tooltip Lines ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tooltip For Aes ( Aes . FILL , Ġaes List For Tooltip ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġhistogram Interaction Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA es . X . name Ġto ĠlistOf (' a ', Ġ' b ', Ġ' c ', Ġ' d ', Ġ' e '), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA es . FILL . name Ġto ĠlistOf (' a ', Ġ' b ', Ġ' a ', Ġ' b ', Ġ' c ') Ġ// Ġfactors . size Ġ= Ġ 3 Ġ- Ġnot Ġenough ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaes List For Tooltip Ġ= Ġget Aes List In Tooltip ( builder . tooltip Lines ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert No Tooltip For Aes ( Aes . FILL , Ġaes List For Tooltip ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` X Ġaxis Ġtooltip Ġshould Ġbe Ġalways Ġshown Ġ( un ivariate Ġfunction )` () Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġassert Axis X Has Tooltip ( x Mapping : ĠPair < String , ĠList < Any >>) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= Ġhistogram Interaction Builder ( map Of ( x Mapping )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaes List For Tooltip Ġ= Ġget Aes List In Axis Tooltip ( builder . tooltip Lines ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tooltip For Aes ( Aes . X , Ġaes List For Tooltip ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġdiscrete Ġ- Ġnot Ġdepend Ġon Ġfactors ĊĠĠĠĠĠĠĠ Ġassert Axis X Has Tooltip ( Aes . X . name Ġto ĠlistOf (' a ')) ĊĠĠĠĠĠĠĠ Ġassert Axis X Has Tooltip ( Aes . X . name Ġto ĠlistOf (' a ', Ġ' b ', Ġ' c ', Ġ' d ', Ġ' e ')) ĊĊĠĠĠĠĠĠĠ Ġ// Ġcontinuous ĊĠĠĠĠĠĠĠ Ġassert Axis X Has Tooltip ( Aes . X . name Ġto ĠlistOf ( 0 . 0 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` use Ġ' theme ' Ġto Ġcontrol Ġtooltip s `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdefault : ĠX Ġaxis Ġtooltip Ġ+ ĠY Ġvalue Ġin Ġthe Ġgeneral Ġtooltip ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtooltip Lines Ġ= Ġhistogram Interaction Builder ( data , Ġtheme Opts Ġ= Ġnull ). tooltip Lines ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaxis Ġ= Ġget Aes List In Axis Tooltip ( tooltip Lines ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tooltip For Aes ( Aes . X , Ġaxis ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgeneral Ġ= Ġget Aes List In General Tooltip ( tooltip Lines ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tooltip For Aes ( Aes . Y , Ġgeneral ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġaxis Ġtooltip Ġis Ġhidden Ġ- Ġremove Ġvalue Ġalso Ġfrom Ġthe Ġgeneral Ġtooltip ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhide Tooltip s Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAX IS _ TOOL TIP Ġ+ Ġ"_ x " Ġto ĠELEMENT _ BLANK , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAX IS _ TOOL TIP Ġ+ Ġ"_ y " Ġto ĠELEMENT _ BLANK , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtooltip Lines Ġ= Ġhistogram Interaction Builder ( data , Ġtheme Opts Ġ= Ġhide Tooltip s ). tooltip Lines ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaxis Ġ= Ġget Aes List In Axis Tooltip ( tooltip Lines ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert No Tooltip For Aes ( Aes . X , Ġaxis ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgeneral Ġ= Ġget Aes List In General Tooltip ( tooltip Lines ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert No Tooltip For Aes ( Aes . Y , Ġgeneral ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġaxis Ġtick Ġlabels Ġare Ġhidden Ġ- Ġnot Ġshow Ġaxis Ġtooltip Ġbut Ġthis Ġvalue Ġcan Ġbe Ġin Ġthe Ġgeneral Ġtooltip ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhide Axis Tick Labels Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAX IS _ TEXT Ġ+ Ġ"_ x " Ġto ĠELEMENT _ BLANK , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAX IS _ TEXT Ġ+ Ġ"_ y " Ġto ĠELEMENT _ BLANK , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtooltip Lines Ġ= Ġhistogram Interaction Builder ( data , Ġtheme Opts Ġ= Ġhide Axis Tick Labels ). tooltip Lines ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaxis Ġ= Ġget Aes List In Axis Tooltip ( tooltip Lines ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert No Tooltip For Aes ( Aes . X , Ġaxis ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgeneral Ġ= Ġget Aes List In General Tooltip ( tooltip Lines ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tooltip For Aes ( Aes . Y , Ġgeneral ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtile With Bre wer Scale ( use Bre wer Scale : ĠBoolean , Ġuse Continuous Vars : ĠBoolean ): ĠGe om Interaction Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmapped Data Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA es . X . name Ġto ĠlistOf ( 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA es . FILL . name Ġto Ġif Ġ( use Continuous Vars ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( 0 . 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (' a ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġscales Ġ= Ġif Ġ( use Bre wer Scale ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAES Ġto ĠA es . FILL . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSC ALE _ MAP PER _ KIND Ġto Ġ" color _ bre wer " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġplot Opts Ġ= Ġmutable Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeta . KIND Ġto ĠMeta . Kind . PLOT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠM APP ING Ġto Ġmapped Data , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLAY ERS Ġto ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGE OM Ġto Ġ" tile " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSC AL ES Ġto Ġscales ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcreate Geom Interaction Builder ( plot Opts ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhistogram Interaction Builder ( ĊĠĠĠĠĠĠĠ Ġmapped Data : ĠMap < String , ĠAny >, ĊĠĠĠĠĠĠĠ Ġtheme Opts : ĠMap < String , ĠAny >? Ġ= Ġnull ĊĠĠĠ Ġ): ĠGe om Interaction Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġplot Opts Ġ= Ġmutable Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeta . KIND Ġto ĠMeta . Kind . PLOT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠM APP ING Ġto Ġmapped Data , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLAY ERS Ġto ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGE OM Ġto ĠOption . Geom Name . HIST O GRAM ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcreate Geom Interaction Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplot Opts , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtheme Ġ= Ġtheme Opts ?. let Ġ{ ĠTheme Config ( it ). theme Ġ} Ġ?: ĠDefault Theme () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Geom Interaction Builder ( ĊĠĠĠĠĠĠĠ Ġplot Opts : ĠMutable Map < String , ĠAny >, ĊĠĠĠĠĠĠĠ Ġtheme : ĠTheme Ġ= ĠDefault Theme () ĊĠĠĠ Ġ): ĠGe om Interaction Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġplot Spec Ġ= ĠPlot Config Server Side . process Transform ( plot Opts ) ĊĠĠĠĠĠĠĠ Ġrequire (! Plot Config . is Failure ( plot Spec )) Ġ{ ĠPlot Config . get ErrorMessage ( plot Spec ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġplot Config Ġ= ĠPlot Config Client Side . create ( plot Spec ) Ġ{} ĊĠĠĠĠĠĠĠ Ġval Ġlayer Config Ġ= Ġplot Config . layer Configs . first () ĊĠĠĠĠĠĠĠ Ġreturn ĠGe om Interaction Util . create Geom Interaction Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayer Config Ġ= Ġlayer Config , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale Map Ġ= Ġplot Config . scale Map , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmult il ayer Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Live Map Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtheme ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Aes List In Tooltip ( tooltip Lines : ĠList < Tooltip Line >): ĠList < Aes <* >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtooltip Lines . flatMap Ġ{ Ġline Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline . fields . filter Is Instance < Mapping Value >(). map ( Mapping Value :: aes ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Aes List In Axis Tooltip ( tooltip Lines : ĠList < Tooltip Line >): ĠList < Aes <* >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtooltip Lines . flatMap Ġ{ Ġline Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline . fields . filter Is Instance < Mapping Value >(). filter ( Mapping Value :: is Axis ). map ( Mapping Value :: aes ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Aes List In General Tooltip ( tooltip Lines : ĠList < Tooltip Line >): ĠList < Aes <* >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtooltip Lines . flatMap Ġ{ Ġline Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline . fields . filter Is Instance < Mapping Value >(). filter Not ( Mapping Value :: is Out lier ). map ( Mapping Value :: aes ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassert Aes List ( expected List : ĠList < Aes <* >>, Ġactual List : ĠList < Aes <* >>) Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected List . size , Ġactual List . size ) ĊĠĠĠĠĠĠĠ Ġexpected List . forEach Ġ{ Ġaes Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tooltip For Aes ( aes , Ġactual List ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassert No Tooltip For Aes ( aes : ĠA es <* >, Ġaes List For Tooltip : ĠList < Aes <* >>) Ġ{ ĊĠĠĠĠĠĠĠ ĠassertFalse ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaes Ġin Ġaes List For Tooltip , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Aes Ġ'${ aes . name }' Ġshould Ġnot Ġbe Ġin Ġtooltip s , Ġactual Ġlist : Ġ$ aes List For Tooltip " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassert Tooltip For Aes ( aes : ĠA es <* >, Ġaes List For Tooltip : ĠList < Aes <* >>) Ġ{ ĊĠĠĠĠĠĠĠ ĠassertTrue ( aes Ġin Ġaes List For Tooltip , Ġ" No Ġtooltip s Ġfor Ġaes Ġ= Ġ'${ aes . name }', Ġactual Ġlist : Ġ$ aes List For Tooltip ") ĊĠĠĠ Ġ} Ċ }