{"version":3,"file":"bd2-ngx-hboxplot.mjs","sources":["../../../projects/bd2-ngx-hboxplot/src/lib/hbox-plot/hbox-plot.dom.ts","../../../projects/bd2-ngx-hboxplot/src/lib/hbox-utils/box-dom.ts","../../../projects/bd2-ngx-hboxplot/src/lib/hbox-utils/box-util.ts","../../../projects/bd2-ngx-hboxplot/src/lib/hbox-utils/color-palette.ts","../../../projects/bd2-ngx-hboxplot/src/lib/hbox-utils/smart-rounding.ts","../../../projects/bd2-ngx-hboxplot/src/lib/hbox-plot/hbox-plot.component.ts","../../../projects/bd2-ngx-hboxplot/src/lib/bd2-ngx-hboxplot.module.ts","../../../projects/bd2-ngx-hboxplot/src/public-api.ts","../../../projects/bd2-ngx-hboxplot/src/bd2-ngx-hboxplot.ts"],"sourcesContent":["// import {Transition} from 'd3-transition';\r\nimport {Axis} from 'd3-axis';\r\nimport {ScaleBand, ScaleLinear} from 'd3-scale';\r\nimport {Selection, Transition} from 'd3';\r\n\r\n\r\nexport class LookAndFeel {\r\n\r\n  vMargin = 25;\r\n  hMarginL = 20;\r\n  hMarginR = 15;\r\n  rowWidth = 30;\r\n  rowGap = 0.2;\r\n\r\n  transitionTime = 600;\r\n\r\n  boxStrokeWidth = '2px';\r\n  boxFillOpacity = 0.35;\r\n  meanStrokeWidth = '4px';\r\n\r\n  labelFont = '12px';\r\n  labelFillOpacity = 0.35;\r\n  backLabelOpacity = 0.30;\r\n\r\n  backdropColor = 'white';\r\n  backdropOpacity = 1;\r\n\r\n  whiskerStrokeWidth = '1px';\r\n\r\n  outliersStrokeWidth = '1px';\r\n  outliersCircleRadius = 3;\r\n  outliersFillOpacity = 0.4;\r\n}\r\n\r\n\r\nexport let defualtLookAndFeel: () => LookAndFeel = function() {\r\n  return new LookAndFeel();\r\n};\r\n\r\nexport class GraphicContext {\r\n\r\n  /*transitionTime: number;\r\n\r\n   get transitionOn(): boolean {\r\n   return (this.transitionTime && this.transitionTime > 0);\r\n   };*/\r\n\r\n  transitionOn: boolean;\r\n  transition: Transition<any, any, any, any>;\r\n\r\n  workspaceWidth: number;\r\n  workspaceHeight: number;\r\n\r\n  axisWrapper: Selection<SVGGElement, any, null, undefined>;\r\n  xScale: ScaleLinear<number, number>;\r\n  xTopAxis: Axis<number | { valueOf(): number }>;\r\n  xBottomAxis: Axis<number | { valueOf(): number }>;\r\n\r\n  yScale: ScaleBand<string>;\r\n  yLeftAxis: Axis<string>;\r\n  yRightAxis: Axis<string>;\r\n\r\n  palette: string[];\r\n\r\n  dataWrapper: Selection<SVGGElement, any, null, undefined>;\r\n\r\n  tooltipWrapper: Selection<SVGGElement, any, null, undefined>;\r\n  tooltipText: Selection<SVGGElement, any, null, undefined>;\r\n  tooltipBox: Selection<SVGGElement, any, null, undefined>;\r\n\r\n  labelsWrapper: Selection<SVGGElement, any, null, undefined>;\r\n  backLabelsWrapper: Selection<SVGGElement, any, null, undefined>;\r\n  labelsTimers = [];\r\n}\r\n\r\nexport function offsetScaleValue(x: number, pixOffset: number, scale: ScaleLinear<number, number>) {\r\n  const r = scale.range();\r\n  const pos = scale(x) + pixOffset;\r\n  if (pos < r[0]) {\r\n    return r[0];\r\n  } else if (pos > r[1]) {\r\n    return r[1];\r\n  }\r\n  return pos;\r\n}\r\n\r\n\r\n\r\n","\r\nexport class BoxDefinition {\r\n  median: number;\r\n  mean: number;\r\n  fstQnt: number;\r\n  thrdQnt: number;\r\n  lowWskr: number;\r\n  highWskr: number;\r\n  outliers: number[] = [];\r\n  ix: number;\r\n  key: string;\r\n  label: string;\r\n  color: string;\r\n  hidden: boolean;\r\n}\r\n","import {BoxDefinition} from './box-dom';\r\n//import {d3} from '../d3service';\r\nimport * as d3 from 'd3';\r\n\r\nexport class BoxUtil {\r\n\r\n  dataToBoxes(data: number[][]): BoxDefinition[] {\r\n    if (!data) {\r\n      return [];\r\n    }\r\n\r\n\r\n    return data.map((v, ix) => {\r\n      const b = this.datumToBox(v);\r\n      b.ix = ix;\r\n      b.key = (ix + 1) + '.';\r\n      return b;\r\n    });\r\n  }\r\n\r\n  datumToBox(data: number[]): BoxDefinition {\r\n\r\n    const box = new BoxDefinition();\r\n    if (!data || data.length === 0) {\r\n      return box;\r\n    }\r\n\r\n    data = data.sort(d3.ascending);\r\n    box.mean = d3.mean(data);\r\n    box.median = d3.median(data);\r\n    box.fstQnt = d3.quantile(data, 0.25);\r\n    box.thrdQnt = d3.quantile(data, 0.75);\r\n\r\n    const iqr = 1.5 * (box.thrdQnt - box.fstQnt);\r\n    box.lowWskr = box.fstQnt - iqr;\r\n    box.highWskr = box.thrdQnt + iqr;\r\n\r\n    for (let i = 0; i < data.length; i++) {\r\n      if (data[i] >= box.lowWskr) {\r\n        box.lowWskr = data[i];\r\n        break;\r\n      }\r\n    }\r\n\r\n    for (let i = data.length - 1; i >= 0; i--) {\r\n      if (data[i] <= box.highWskr) {\r\n        box.highWskr = data[i];\r\n        break;\r\n      }\r\n    }\r\n\r\n\r\n    box.outliers = data.filter(v => (v < box.lowWskr || v > box.highWskr));\r\n    return box;\r\n  }\r\n\r\n  mockEmptyValues(boxes: BoxDefinition[], missingVal: number) {\r\n    boxes.forEach(box => {\r\n      if (box.mean === undefined || box.mean === null) {\r\n        box.mean = missingVal;\r\n        box.median = missingVal;\r\n        box.fstQnt = missingVal;\r\n        box.thrdQnt = missingVal;\r\n        box.lowWskr = missingVal;\r\n        box.highWskr = missingVal;\r\n      }\r\n    });\r\n  }\r\n}\r\n","\r\nexport class BD2ColorPalette {\r\n\r\n  static schemeCategory10 = [\r\n    '#1f77b4',\r\n    '#ff7f0e',\r\n    '#2ca02c',\r\n    '#d62728',\r\n    '#9467bd',\r\n    '#8c564b',\r\n    '#e377c2',\r\n    '#7f7f7f',\r\n    '#bcbd22',\r\n    '#17becf'\r\n  ];\r\n\r\n  static schemeCategory20 = [\r\n'#1f77b4'\r\n, '#aec7e8'\r\n, '#ff7f0e'\r\n, '#ffbb78'\r\n, '#2ca02c'\r\n, '#98df8a'\r\n, '#d62728'\r\n, '#ff9896'\r\n, '#9467bd'\r\n, '#c5b0d5'\r\n, '#8c564b'\r\n, '#c49c94'\r\n, '#e377c2'\r\n, '#f7b6d2'\r\n, '#7f7f7f'\r\n, '#c7c7c7'\r\n, '#bcbd22'\r\n, '#dbdb8d'\r\n, '#17becf'\r\n, '#9edae5'];\r\n\r\n  static extendPalette(palette: string[] | ReadonlyArray<string>, size: number): string[] {\r\n\r\n    if (!palette || palette.length === 0) {\r\n      palette = ['black'];\r\n    }\r\n\r\n    const out = [];\r\n    for (let i = 0; i < size; i++) {\r\n      out.push(palette[i % palette.length]);\r\n    }\r\n    return out;\r\n\r\n  }\r\n\r\n  static palette(size: number): string[] {\r\n    // if (true) return BD2ColorPalette.extendPalette(['#1f77b4'], size);\r\n    if (size <= BD2ColorPalette.schemeCategory10.length) {\r\n      return BD2ColorPalette.extendPalette(BD2ColorPalette.schemeCategory10, size);\r\n    } else {\r\n      return BD2ColorPalette.extendPalette(BD2ColorPalette.schemeCategory20, size);\r\n    }\r\n\r\n  }\r\n}\r\n","\r\nexport class SmartRounder {\r\n\r\n  static round(value: number, base?: number): number {\r\n\r\n    base = base || value;\r\n    base = Math.abs(base);\r\n\r\n    if (base < 0.01) {\r\n      return value;\r\n    }\r\n\r\n    if (base < 1) {\r\n      return Math.round(value * 10000) / 10000;\r\n    }\r\n\r\n    if (base < 1000) {\r\n      return Math.round(value * 100) / 100;\r\n    }\r\n    return Math.round(value);\r\n  }\r\n\r\n\r\n}\r\n","import {\r\n  Component, OnInit, Input, AfterViewInit, OnChanges, OnDestroy, NgZone, ChangeDetectorRef,\r\n  ElementRef, SimpleChanges, ChangeDetectionStrategy, EventEmitter, Output\r\n} from '@angular/core';\r\nimport * as d3 from 'd3';\r\n\r\nimport {Selection} from 'd3';\r\nimport {defualtLookAndFeel, GraphicContext, LookAndFeel, offsetScaleValue} from './hbox-plot.dom';\r\nimport {BoxDefinition} from '../hbox-utils/box-dom';\r\nimport {BoxUtil} from '../hbox-utils/box-util';\r\nimport {BD2ColorPalette} from '../hbox-utils/color-palette';\r\nimport {SmartRounder} from '../hbox-utils/smart-rounding';\r\n\r\n\r\n\r\n\r\n\r\n@Component({\r\n  selector: 'bd2-ngx-hbox-plot',\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n  template: `\r\n    <div class=\"hbox-plot\" [hidden]=\"hidden\"></div>\r\n  `,\r\n  styles: [\r\n      `\r\n      :host ::ng-deep .axisWrapper path {\r\n        stroke: gray;\r\n      }\r\n\r\n      :host ::ng-deep .axisWrapper line {\r\n        stroke: gray;\r\n      }\r\n\r\n      :host ::ng-deep .axisWrapper text {\r\n        fill: gray;\r\n      }\r\n    `\r\n  ]\r\n})\r\nexport class HBoxPlotComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\r\n\r\n  /**\r\n   * Necessary to control hiding of the element, otherwise the BBoxes are not defined and labels\r\n   * were not rendered in correct places.\r\n   *\r\n   */\r\n  @Input()\r\n  hidden = false;\r\n\r\n\r\n  @Input()\r\n  data: number[][] = [];\r\n\r\n  @Input()\r\n  removed: number[] = [];\r\n\r\n  @Input()\r\n  domain: number[] = [17, 36];\r\n\r\n  @Input()\r\n  palette: string[] = [];\r\n\r\n  @Input()\r\n  labels: string[] = [];\r\n\r\n  @Input()\r\n  labelsOn = 'always'; // trigger //null\r\n\r\n  @Input()\r\n  lookAndFeel = defualtLookAndFeel();\r\n\r\n  @Input() // median, label, null\r\n  set sorted(sorting: string) {\r\n\r\n    if (sorting === 'median') {\r\n      this.sortFunction = (b1: BoxDefinition, b2: BoxDefinition) => b1.median - b2.median;\r\n    } else if (sorting === 'label') {\r\n      // console.log(\"N\",navigator.language);\r\n      /*if (navigator.language) {\r\n       this.sortFunction = (b1: BoxDefinition, b2: BoxDefinition) =>\r\n       b1.label.localeCompare(b2.label, navigator.language, {sensitivity: 'case'});\r\n       } else {\r\n       this.sortFunction = (b1: BoxDefinition, b2: BoxDefinition) => b1.label.localeCompare(b2.label);\r\n       };*/\r\n      this.sortFunction = (b1: BoxDefinition, b2: BoxDefinition) => {\r\n        if (b1.label === b2.label) {\r\n          return 0;\r\n        }\r\n        if (b1.label < b2.label) {\r\n          return -1;\r\n        }\r\n        return 1;\r\n      };\r\n    } else {\r\n      this.sortFunction = (b1: BoxDefinition, b2: BoxDefinition) => b1.ix - b2.ix;\r\n    }\r\n  }\r\n\r\n\r\n  sortChanged = false;\r\n\r\n  @Output()\r\n  colors = new EventEmitter<string[]>();\r\n\r\n  private d3;\r\n  private parentNativeElement: any;\r\n  private d3Svg: Selection<SVGSVGElement, any, null, undefined>;\r\n  // private removedSVG: Selection<SVGSVGElement, any, null, undefined>;\r\n\r\n  private mainPane: Selection<SVGGElement, any, null, undefined>;\r\n\r\n  private graphicContext = new GraphicContext();\r\n  private boxUtil = new BoxUtil();\r\n\r\n  sortFunction = function(b1: BoxDefinition, b2: BoxDefinition) {\r\n    return b1.ix - b2.ix;\r\n  };\r\n\r\n\r\n  constructor(private ngZone: NgZone, private changeDetectorRef: ChangeDetectorRef, element: ElementRef) {\r\n    this.d3 = d3;\r\n    this.parentNativeElement = element.nativeElement;\r\n\r\n  }\r\n\r\n  /**\r\n   * It is detached from angular to prevent unnecessary change detection\r\n   */\r\n  ngAfterViewInit() {\r\n    this.changeDetectorRef.detach();\r\n    // console.log(\"AFI\");\r\n  }\r\n\r\n  /**\r\n   * Explicit triggers re-drawing as need to have all the parameters set (so will not redrawn if data came frist and domain later)\r\n   * @param changes\r\n   */\r\n  ngOnChanges(changes: SimpleChanges) {\r\n\r\n    // console.log(\"Changes\", changes);\r\n\r\n    // otherwise the hidden on inner div was not updated\r\n    this.changeDetectorRef.detectChanges();\r\n\r\n\r\n    this.initSVG();\r\n\r\n    // this.handleHiding();\r\n\r\n    if (!this.data) {\r\n      return;\r\n    }\r\n\r\n    this.sortChanged = changes['sorted'] !== undefined;\r\n\r\n    if (!this.hidden) {\r\n      this.updatePlot();\r\n    }\r\n  }\r\n\r\n  isDataUpdate(changes: any): boolean {\r\n\r\n    return (changes.data || changes.removed || changes.domain || changes.palette || changes.labels );\r\n  }\r\n\r\n  initSVG() {\r\n    if (!this.d3Svg) {\r\n      const d3ParentElement = this.d3.select(this.parentNativeElement);\r\n      this.d3Svg = d3ParentElement.select('.hbox-plot').append('svg');\r\n      this.d3Svg.attr('width', '0');\r\n    }\r\n  }\r\n\r\n  ngOnInit() {\r\n\r\n    if (this.parentNativeElement !== null) {\r\n\r\n\r\n    } else {\r\n      console.error('Missing parrent element for the component');\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    if (this.d3Svg && this.d3Svg.empty && !this.d3Svg.empty()) {\r\n      this.d3Svg.selectAll('*').remove();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Only for testing\r\n   * @param context\r\n   */\r\n  testGraphicContext(context: GraphicContext) {\r\n    this.graphicContext = context;\r\n  }\r\n\r\n  /* Not needed any more, the hidding is achieved by simple div hidden attribute\r\n   // and the problem with labels background rendering is solved using delayed rendering with a timer.\r\n   handleHiding() {\r\n   if (this.hidden) {\r\n   this.removed = this.d3Svg.remove();\r\n   } else {\r\n   if (this.removed) {\r\n   this.d3.select(this.parentNativeElement)\r\n   .select('.hbox-plot')\r\n   .append(() => this.d3Svg.node());\r\n   this.removed = undefined;\r\n   }\r\n   }\r\n\r\n   }*/\r\n\r\n  updatePlot() {\r\n\r\n    // this.graphicContext.transitionTime = this.lookAndFeel.transitionTime;\r\n\r\n    if (this.lookAndFeel.transitionTime > 0) {\r\n      this.graphicContext.transitionOn = true;\r\n      this.ngZone.runOutsideAngular(() => {\r\n        this.graphicContext.transition = (this.d3 as any).transition().duration(this.lookAndFeel.transitionTime);\r\n      });\r\n    } else {\r\n      this.graphicContext.transitionOn = false;\r\n      this.graphicContext.transition = undefined;\r\n    }\r\n\r\n    this.graphicContext = this.updatePalette(this.data, this.palette, this.graphicContext);\r\n\r\n    let boxes = this.prepareDataModel(this.data, this.removed, this.labels, this.graphicContext.palette,\r\n      this.domain, this.sortFunction);\r\n\r\n    boxes = boxes.filter(b => !b.hidden);\r\n\r\n    this.graphicContext = this.preparePane(boxes, this.lookAndFeel, this.graphicContext);\r\n\r\n    this.graphicContext = this.prepareScales(boxes, this.domain, this.lookAndFeel, this.graphicContext);\r\n\r\n    this.graphicContext = this.plotAxisBox(boxes, this.domain, this.lookAndFeel, this.mainPane, this.graphicContext);\r\n\r\n\r\n    this.graphicContext = this.plotDataBoxes(boxes, this.lookAndFeel, this.mainPane, this.graphicContext);\r\n\r\n    this.graphicContext = this.prepareTooltip(this.mainPane, this.graphicContext);\r\n\r\n    this.graphicContext = this.prepareLabels(boxes, this.mainPane, this.lookAndFeel, this.graphicContext, this.labelsOn);\r\n\r\n  }\r\n\r\n  prepareDataModel(data: number[][], removed: number[], labels: string[], palette: string[], domain: number[],\r\n                   sortFunction: (b1: BoxDefinition, b2: BoxDefinition) => number): BoxDefinition[] {\r\n\r\n    let boxes = this.boxUtil.dataToBoxes(data);\r\n\r\n    this.boxUtil.mockEmptyValues(boxes, domain[1]);\r\n    this.labelBoxes(boxes, labels);\r\n\r\n    this.colorBoxes(boxes, palette);\r\n\r\n    removed.forEach(ix => {\r\n      if (boxes[ix]) {\r\n        boxes[ix].hidden = true;\r\n      }\r\n    });\r\n\r\n    boxes = boxes.sort(sortFunction);\r\n    return boxes;\r\n\r\n  }\r\n\r\n\r\n  updatePalette(data: any[], palette: string[], graphicContext: GraphicContext): GraphicContext {\r\n\r\n    if (!palette || palette.length === 0) {\r\n      graphicContext.palette = BD2ColorPalette.palette(data.length);\r\n    } else {\r\n      graphicContext.palette = BD2ColorPalette.extendPalette(palette, data.length);\r\n\r\n    }\r\n    this.colors.next(graphicContext.palette.slice());\r\n\r\n    return graphicContext;\r\n  }\r\n\r\n  colorBoxes(boxes: BoxDefinition[], palette: string[]) {\r\n    boxes.forEach(b => b.color = palette[b.ix]);\r\n  }\r\n\r\n\r\n  preparePane(data: any[], lookAndFeel: LookAndFeel, graphicContext: GraphicContext): GraphicContext {\r\n\r\n    // console.log(\"PP\",data);\r\n\r\n    if (!this.mainPane) {\r\n      // let d3ParentElement = this.d3.select(this.parentNativeElement);\r\n      // this.d3Svg = d3ParentElement.select('.hbox-plot').append<SVGSVGElement>('svg');\r\n      this.d3Svg.attr('width', '100%');\r\n\r\n      this.mainPane = this.d3Svg.append<SVGGElement>('g');\r\n      this.mainPane.classed('mainPane', true);\r\n\r\n    }\r\n\r\n    const pWidth = 500;\r\n    const pHeight = this.calculateWorkspaceHeight(data, lookAndFeel) + 2 * lookAndFeel.vMargin;\r\n\r\n    const elm = (graphicContext.transitionOn ? this.d3Svg.transition(graphicContext.transition) : this.d3Svg);\r\n    elm.attr('viewBox', '0 0 ' + pWidth + ' ' + pHeight);\r\n    this.mainPane.attr('transform', 'translate(' + lookAndFeel.hMarginL + ',' + lookAndFeel.vMargin + ')');\r\n    // .attr('transform', 'translate(' + (pWidth / 2) + ',' + (pHeight / 2) + ')'); //moves 0,0 of the pain to the middle of the graphics\r\n\r\n    graphicContext.workspaceWidth = pWidth - lookAndFeel.hMarginL - lookAndFeel.hMarginR;\r\n    graphicContext.workspaceHeight = pHeight - 2 * lookAndFeel.vMargin;\r\n\r\n    return graphicContext;\r\n\r\n  }\r\n\r\n  calculateWorkspaceHeight(data: any[], lookAndFeel: LookAndFeel) {\r\n    return lookAndFeel.rowWidth * data.length;\r\n\r\n  }\r\n\r\n\r\n  labelBoxes(boxes: BoxDefinition[], labels: string[]) {\r\n    if (!labels) {\r\n      labels = [];\r\n    }\r\n\r\n\r\n    boxes.forEach((b, ix) => {\r\n      b.label = labels[ix] ? labels[ix] : '' + (ix + 1);\r\n    });\r\n  }\r\n\r\n  prepareLabels(boxes: BoxDefinition[], mainPane: Selection<SVGGElement, any, null, undefined>, lookAndFeel: LookAndFeel,\r\n                graphicContext: GraphicContext, labelsOn: string): GraphicContext {\r\n\r\n    if (!graphicContext.labelsWrapper) {\r\n      graphicContext.labelsWrapper = mainPane.append<SVGGElement>('g')\r\n        .classed('labelsWrapper', true);\r\n    }\r\n\r\n    if (!graphicContext.backLabelsWrapper) {\r\n      graphicContext.backLabelsWrapper = mainPane.insert<SVGGElement>('g', 'g.dataWrapper')\r\n        .classed('backLabelsWrapper', true);\r\n    }\r\n\r\n    const backLabelsOn = labelsOn === 'always';\r\n    const mainLabelsOn = labelsOn === 'always' || labelsOn === 'trigger';\r\n\r\n\r\n    const labels = graphicContext.labelsWrapper.selectAll('g.yLabel')\r\n      .data(mainLabelsOn ? boxes : [], (d: BoxDefinition) => d.key);\r\n\r\n    labels.exit().remove();\r\n\r\n    const newLabels = labels.enter()\r\n      .append<SVGGElement>('g')\r\n      .classed('yLabel', true);\r\n\r\n    this.ngZone.runOutsideAngular(() => {\r\n      newLabels.on('mouseover', function(evnt: MouseEvent, d: BoxDefinition) {\r\n        d3.select(this)\r\n          .selectAll('.yLabel')\r\n          // .style(\"visibility\", \"visible\");\r\n          .style('display', null);\r\n      }).on('mouseout', function() {\r\n        d3.select(this)\r\n          .selectAll('.yLabel')\r\n          // .style(\"visibility\", \"hidden\");\r\n          .style('display', 'none');\r\n      });\r\n    });\r\n\r\n    newLabels.append<SVGGElement>('rect')\r\n      .attr('class', 'yTrigger')\r\n      .style('fill-opacity', 1)\r\n    ;\r\n\r\n    newLabels.append<SVGGElement>('rect')\r\n      .attr('class', 'yLabel')\r\n      .style('fill-opacity', 0.35)\r\n      // .style(\"visibility\", \"hidden\");\r\n      .style('display', 'none');\r\n\r\n\r\n    newLabels.append<SVGGElement>('text')\r\n      .attr('class', 'yLabel')\r\n      .attr('text-anchor', 'left')\r\n      .attr('dominant-baseline', 'central')\r\n      .style('font-size', lookAndFeel.labelFont)\r\n      .style('opacity', 1)\r\n      .attr('x', 5)\r\n    // .style(\"visibility\", \"hidden\");\r\n    // .style(\"display\", \"none\");\r\n    ;\r\n\r\n    const backLabels = graphicContext.backLabelsWrapper.selectAll('g.yLabel')\r\n      .data(backLabelsOn ? boxes : [], (d: BoxDefinition) => d.key);\r\n\r\n    backLabels.exit().remove();\r\n\r\n    const newBackLabels = backLabels.enter()\r\n      .append<SVGGElement>('g')\r\n      .classed('yLabel', true);\r\n\r\n    /*\r\n     newBackLabels.append<SVGGElement>(\"rect\")\r\n     .attr(\"class\", \"yLabel\")\r\n     .style(\"fill-opacity\", 0.05);\r\n     */\r\n\r\n    newBackLabels.append<SVGGElement>('text')\r\n      .attr('class', 'yLabel')\r\n      .attr('text-anchor', 'left')\r\n      .attr('dominant-baseline', 'central')\r\n      .style('font-size', lookAndFeel.labelFont)\r\n      .style('opacity', lookAndFeel.backLabelOpacity)\r\n      .attr('x', 5);\r\n    // .style(\"visibility\", \"hidden\");\r\n\r\n\r\n    const enterUpdate: Selection<SVGSVGElement, BoxDefinition, null, undefined> =\r\n      newLabels.merge(labels as any) as Selection<SVGSVGElement, BoxDefinition, null, undefined>;\r\n\r\n    const backEnterUpdate: Selection<SVGSVGElement, BoxDefinition, null, undefined> =\r\n      newBackLabels.merge(backLabels as any) as Selection<SVGSVGElement, BoxDefinition, null, undefined>;\r\n\r\n    // called with delay to allow, parent divs to component sets their visibility, otherwise the bboxes cannot be calculated\r\n    // and the labels backgrounds and trigers are not rendered correctly\r\n    // it is a hack, but don't know how to do it correctly\r\n    // timers have to be cleared as otherwise saw errors in logs for fast changing input data (like cause by sorting and pagination)\r\n    graphicContext.labelsTimers.forEach( timer => clearTimeout(timer));\r\n    graphicContext.labelsTimers = [];\r\n    const timer = setTimeout(() => {\r\n\r\n\r\n      const bboxes: SVGRect[] = [];\r\n\r\n      enterUpdate.select<SVGSVGElement>('text')\r\n        .style('display', null)\r\n        .attr('y', d => graphicContext.yScale(d.key) + graphicContext.yScale.bandwidth() / 2)\r\n        .text(d => d.label)\r\n        .each(function(d) {\r\n          bboxes.push(this.getBBox());\r\n          // console.log(\"D: \" + d.label, this.getBBox());\r\n        })\r\n        .style('display', 'none');\r\n\r\n\r\n      let elm = backEnterUpdate.select<SVGSVGElement>('text');\r\n      elm = (graphicContext.transitionOn ? elm.transition(graphicContext.transition) : elm) as any;\r\n      elm\r\n        .attr('y', d => graphicContext.yScale(d.key) + graphicContext.yScale.bandwidth() / 2)\r\n        .text(d => d.label)\r\n      // .style(\"fill\", d => d.color)\r\n      /*.each(function (d) {\r\n       bboxes.push(this.getBBox());\r\n       //console.log(\"D: \" + d.label, this.getBBox());\r\n       });*/\r\n      ;\r\n\r\n      const trigers = enterUpdate.select<SVGSVGElement>('.yTrigger')\r\n        .style('fill', d => d.color)\r\n        .style('stroke', d => d.color);\r\n\r\n\r\n      let telm = trigers.data(bboxes);\r\n      telm = (graphicContext.transitionOn ? telm.transition(graphicContext.transition) : telm) as any;\r\n      telm\r\n        .attr('x', -7)\r\n        .attr('y', b => b.y - 3)\r\n        .attr('width', b => 7)\r\n        .attr('height', b => b.height + 6);\r\n\r\n      const frames = enterUpdate.select<SVGSVGElement>('rect.yLabel')\r\n        .style('fill', d => d.color)\r\n        .style('fill-opacity', lookAndFeel.labelFillOpacity);\r\n\r\n      frames.data(bboxes)\r\n        .attr('x', 0)\r\n        .attr('y', b => b.y - 3)\r\n        .attr('width', b => b.width + 10)\r\n        .attr('height', b => b.height + 7);\r\n\r\n\r\n      /*\r\n       let backFrames = backEnterUpdate.select<SVGSVGElement>(\"rect.yLabel\")\r\n       .style(\"fill\", d => d.color);\r\n\r\n       backFrames.data(bboxes)\r\n       .attr(\"x\", 0)\r\n       .attr(\"y\", b => b.y - 3)\r\n       .attr(\"width\", b => b.width + 10)\r\n       .attr(\"height\", b => b.height + 7);\r\n       */\r\n\r\n    }, 10);\r\n\r\n    graphicContext.labelsTimers.push(timer);\r\n    return graphicContext;\r\n  }\r\n\r\n\r\n  prepareTooltip(mainPane: Selection<SVGGElement, any, null, undefined>, graphicContext: GraphicContext): GraphicContext {\r\n\r\n    if (graphicContext.tooltipWrapper) {\r\n      return graphicContext;\r\n    }\r\n\r\n    graphicContext.tooltipWrapper = mainPane.append<SVGGElement>('g')\r\n      .classed('tooltipWrapper', true);\r\n\r\n    graphicContext.tooltipBox = graphicContext.tooltipWrapper.append<SVGGElement>('rect')\r\n      .style('fill', 'white')\r\n      .style('fill-opacity', 0.8)\r\n      .style('stroke', 'grey')\r\n    // .style(\"visibility\", \"hidden\");\r\n    ;\r\n\r\n    graphicContext.tooltipText = graphicContext.tooltipWrapper.append<SVGGElement>('text')\r\n      .attr('class', 'tooltip')\r\n      // .attr(\"text-anchor\", \"left\")\r\n      .attr('text-anchor', 'middle')\r\n      // .attr(\"alignment-baseline\", \"middle\")\r\n      // .attr(\"alignment-baseline\", \"baseline\")\r\n      // .attr(\"dy\", \"-10px\")\r\n      .style('opacity', 1)\r\n    // .attr(\"dx\", \"0.35em\")\r\n    // .style(\"font-size\", this.lookAndFeel.tooltipFontSize) //\"11px\")\r\n    // .style(\"opacity\", 0)\r\n    ;\r\n\r\n    graphicContext.tooltipWrapper\r\n    // .style(\"visibility\", \"hidden\");\r\n      .style('display', 'none');\r\n\r\n    return graphicContext;\r\n  }\r\n\r\n  showTooltip(v: number, x: any, y: any) {\r\n    // console.log(\"Show: \" + v + \";\" + this.constructor.name);\r\n    // console.log('Show: ' + v + '; ' + x + ': ' + y);\r\n    // console.log('v', SmartRounder.round(v));\r\n    // console.log('x', this.graphicContext.xScale(x));\r\n    // console.log('y', this.graphicContext.yScale(y));\r\n\r\n    if (!this.graphicContext.tooltipText) {\r\n      return;\r\n    }\r\n\r\n    this.graphicContext.tooltipText\r\n      .attr('x', this.graphicContext.xScale(x))\r\n      .attr('y', this.graphicContext.yScale(y))\r\n      .text(SmartRounder.round(v))\r\n    // .transition().duration(this.lookAndFeel.baseTransitionsTime / 2)\r\n    // .style('opacity', 1);\r\n    ;\r\n\r\n    // I have to change the display here even before the box is ready as\r\n    // in firefox the getBBox was not working if called with display none\r\n    // giving NS_ERROR_FAILURE 2147500037\r\n    this.graphicContext.tooltipWrapper\r\n      // .style(\"visibility\", \"visible\");\r\n      .style('display', null);\r\n\r\n    const bbox = this.graphicContext.tooltipText.node().getBBox();\r\n\r\n    this.graphicContext.tooltipBox\r\n      .attr('x', bbox.x - 3)\r\n      .attr('y', bbox.y - 2)\r\n      .attr('width', bbox.width + 6)\r\n      .attr('height', bbox.height + 4);\r\n\r\n\r\n\r\n\r\n  }\r\n\r\n  hideTooltip() {\r\n    // console.log(\"Hide: \");\r\n    if (!this.graphicContext.tooltipText) {\r\n      return;\r\n    }\r\n\r\n\r\n    this.graphicContext.tooltipWrapper\r\n    // .style(\"visibility\", \"hidden\");\r\n      .style('display', 'none');\r\n\r\n\r\n    // this.graphicContext.tooltipText\r\n    // .transition().duration(this.lookAndFeel.baseTransitionsTime / 2)\r\n    // .style(\"opacity\", 0);\r\n  }\r\n\r\n  prepareScales(data: BoxDefinition[], domain: number[], lookAndFeel: LookAndFeel,\r\n                graphicContext: GraphicContext): GraphicContext {\r\n\r\n    if (!graphicContext.xScale) {\r\n      graphicContext.xScale = d3.scaleLinear()\r\n        .clamp(true);\r\n    }\r\n\r\n    graphicContext.xScale\r\n      .domain(domain)\r\n      .range([0, graphicContext.workspaceWidth]);\r\n\r\n    if (!graphicContext.yScale) {\r\n      graphicContext.yScale = d3.scaleBand()\r\n        .padding(lookAndFeel.rowGap)\r\n      ;\r\n    }\r\n\r\n    const domainY = data.map((d) => d.key);\r\n\r\n    graphicContext.yScale\r\n      .domain(domainY)\r\n      .range([0, graphicContext.workspaceHeight]);\r\n\r\n\r\n    return graphicContext;\r\n  }\r\n\r\n  plotAxisBox(data: BoxDefinition[], domain: number[], lookAndFeel: LookAndFeel, mainPane: Selection<SVGGElement, any, null, undefined>,\r\n              graphicContext: GraphicContext): GraphicContext {\r\n\r\n    if (!graphicContext.axisWrapper) {\r\n      graphicContext.axisWrapper = this.initAxisWrapper(mainPane);\r\n    }\r\n\r\n    graphicContext = this.plotHorizontalScales(domain, lookAndFeel, graphicContext);\r\n    graphicContext = this.plotVerticalScales(data, lookAndFeel, graphicContext);\r\n\r\n    return graphicContext;\r\n\r\n  }\r\n\r\n  initAxisWrapper(mainPane: Selection<SVGGElement, any, null, undefined>): Selection<SVGGElement, any, null, undefined> {\r\n\r\n    let wrapper = mainPane.select<SVGGElement>('.axisWrapper');\r\n    if (wrapper.size() === 0) {\r\n      wrapper = mainPane.append<SVGGElement>('g').attr('class', 'axisWrapper');\r\n\r\n      wrapper.append('g').attr('class', 'xTopAxis');\r\n      wrapper.append('g').attr('class', 'xBottomAxis');\r\n      wrapper.append('g').attr('class', 'yLeftAxis');\r\n      wrapper.append('g').attr('class', 'yRightAxis');\r\n\r\n    }\r\n    return wrapper;\r\n  }\r\n\r\n  plotHorizontalScales(domain: number[], lookAndFeel: LookAndFeel, graphicContext: GraphicContext): GraphicContext {\r\n\r\n\r\n    if (!graphicContext.xTopAxis) {\r\n      graphicContext.xTopAxis = d3.axisTop(graphicContext.xScale);\r\n    }\r\n\r\n    if (!graphicContext.xBottomAxis) {\r\n      graphicContext.xBottomAxis = d3.axisBottom(graphicContext.xScale);\r\n    }\r\n\r\n\r\n    let elmT = graphicContext.axisWrapper.select('g.xTopAxis')  as any;\r\n    elmT.call(graphicContext.xTopAxis);\r\n\r\n    let elmB = graphicContext.axisWrapper.select('g.xBottomAxis') as any;\r\n    elmB = (graphicContext.transitionOn ? elmB.transition(graphicContext.transition) : elmB);\r\n    elmB\r\n      .attr('transform', 'translate(0,' + graphicContext.workspaceHeight + ')')\r\n      .call(graphicContext.xBottomAxis);\r\n\r\n    return graphicContext;\r\n\r\n  }\r\n\r\n  plotVerticalScales(data: BoxDefinition[], lookAndFeel: LookAndFeel, graphicContext: GraphicContext): GraphicContext {\r\n\r\n\r\n    if (!graphicContext.yLeftAxis) {\r\n      graphicContext.yLeftAxis = d3.axisLeft(graphicContext.yScale)\r\n        .tickFormat(() => '')\r\n      ;\r\n    }\r\n\r\n    if (!graphicContext.yRightAxis) {\r\n      graphicContext.yRightAxis = d3.axisRight(graphicContext.yScale)\r\n        .tickValues([])\r\n      ;\r\n    }\r\n\r\n    let elm = graphicContext.axisWrapper.select('g.yLeftAxis') as any;\r\n    elm = (graphicContext.transitionOn ? elm.transition(graphicContext.transition) : elm);\r\n    elm\r\n      .call(graphicContext.yLeftAxis);\r\n\r\n\r\n    elm = graphicContext.axisWrapper.select('g.yRightAxis')\r\n      .attr('transform', 'translate(' + graphicContext.workspaceWidth + ',0)') as any;\r\n    elm = (graphicContext.transitionOn ? elm.transition(graphicContext.transition) : elm);\r\n    elm\r\n      .call(graphicContext.yRightAxis);\r\n\r\n    return graphicContext;\r\n\r\n  }\r\n\r\n\r\n  plotDataBoxes(boxes: BoxDefinition[], lookAndFeel: LookAndFeel, mainPane: Selection<SVGGElement, any, null, undefined>,\r\n                graphicContext: GraphicContext): GraphicContext {\r\n\r\n    if (!graphicContext.dataWrapper) {\r\n      graphicContext.dataWrapper = mainPane.append<SVGGElement>('g').attr('class', 'dataWrapper');\r\n    }\r\n\r\n\r\n\r\n    let boxWidgets = graphicContext.dataWrapper.selectAll('.boxWidget') as Selection<SVGGElement, BoxDefinition, null, undefined>;\r\n\r\n    boxWidgets = boxWidgets.data(boxes, d => d.key);\r\n\r\n\r\n    this.updateBoxWidgets(boxWidgets, lookAndFeel, graphicContext);\r\n\r\n    const newBoxWidgets = boxWidgets.enter()\r\n      .append<SVGGElement>('g').attr('class', 'boxWidget');\r\n\r\n\r\n    this.createBoxWidgets(newBoxWidgets, lookAndFeel, graphicContext);\r\n\r\n    boxWidgets.exit().remove();\r\n\r\n\r\n    return graphicContext;\r\n  }\r\n\r\n  updateBoxWidgets(boxWidgets: Selection<SVGGElement, BoxDefinition, null, undefined>,\r\n                   lookAndFeel: LookAndFeel, graphicContext: GraphicContext) {\r\n\r\n    // this.ngZone.runOutsideAngular(() => {\r\n\r\n    boxWidgets.select('rect.backdrop')\r\n      .call(this.positionBackdrop, graphicContext);\r\n\r\n    this.updateWhiskers(boxWidgets.select('g.whiskers') as any, graphicContext);\r\n\r\n    boxWidgets.select('g.box rect')\r\n      .call(this.positionBoxRectangle, graphicContext);\r\n\r\n    boxWidgets.select('g.box line.medianline')\r\n      .call(this.positionMedianLine, graphicContext);\r\n\r\n    boxWidgets.select('g.box line.meanline')\r\n      .call(this.positionMeanLine, graphicContext);\r\n\r\n    const out = boxWidgets.select('g.outliers').selectAll('.outlier')\r\n      .data(d => d.outliers.map(x => [x, d.key, d.color]));\r\n\r\n    out.enter()\r\n      .call(this.createOutlier, lookAndFeel, graphicContext, this.positionOutlier);\r\n\r\n    out.call(this.positionOutlier, graphicContext);\r\n\r\n    out.exit().remove();\r\n\r\n    // });\r\n\r\n  }\r\n\r\n\r\n  positionBackdrop(elm: Selection<SVGGElement, BoxDefinition, null, undefined>, graphicContext: GraphicContext) {\r\n\r\n    elm = (graphicContext.transitionOn ? elm.transition(graphicContext.transition) : elm) as any;\r\n    elm\r\n      .attr('x', (d) => offsetScaleValue(d.lowWskr, -5, graphicContext.xScale))\r\n      .attr('y', (d) => {\r\n        return graphicContext.yScale(d.key);\r\n      })\r\n      .attr('width', (d) => {\r\n        const x1 = offsetScaleValue(d.lowWskr, -5, graphicContext.xScale);\r\n        const x2 = offsetScaleValue(d.highWskr, +5, graphicContext.xScale);\r\n        return x2 - x1;\r\n      })\r\n      .attr('height', (d) => {\r\n        return graphicContext.yScale.bandwidth();\r\n      })\r\n    // .style(\"stroke\", d => d.color)\r\n    // .style(\"fill\", d => d.color)\r\n    ;\r\n\r\n  }\r\n\r\n  positionBoxRectangle(elm: Selection<SVGGElement, BoxDefinition, null, undefined>, graphicContext: GraphicContext) {\r\n\r\n    elm = (graphicContext.transitionOn ? elm.transition(graphicContext.transition) : elm) as any;\r\n    elm\r\n      .attr('x', (d) => graphicContext.xScale(d.fstQnt))\r\n      .attr('y', (d) => {\r\n        return graphicContext.yScale(d.key);\r\n      })\r\n      .attr('width', (d) => (graphicContext.xScale(d.thrdQnt) - graphicContext.xScale(d.fstQnt)))\r\n      .attr('height', (d) => {\r\n        return graphicContext.yScale.bandwidth();\r\n      })\r\n      .style('stroke', d => d.color)\r\n      .style('fill', d => d.color);\r\n\r\n  }\r\n\r\n  positionMedianLine(elm: Selection<SVGGElement, BoxDefinition, null, undefined>, graphicContext: GraphicContext) {\r\n\r\n    elm = (graphicContext.transitionOn ? elm.transition(graphicContext.transition) : elm) as any;\r\n    elm\r\n      .attr('x1', (d, i) => graphicContext.xScale(d.median))\r\n      .attr('y1', (d, i) => graphicContext.yScale(d.key))\r\n      .attr('x2', (d, i) => graphicContext.xScale(d.median))\r\n      .attr('y2', (d, i) => graphicContext.yScale(d.key) + graphicContext.yScale.bandwidth())\r\n      .style('stroke', d => d.color)\r\n      // .style(\"visibility\", d => d.mean === d.median ? \"hidden\" : \"visible\");\r\n      .style('display', d => d.mean === d.median ? 'none' : null);\r\n\r\n\r\n\r\n  }\r\n\r\n  positionMeanLine(elm: Selection<SVGGElement, BoxDefinition, null, undefined>, graphicContext: GraphicContext) {\r\n\r\n    elm = (graphicContext.transitionOn ? elm.transition(graphicContext.transition) : elm) as any;\r\n    elm\r\n      .attr('x1', (d, i) => graphicContext.xScale(d.mean))\r\n      .attr('y1', (d, i) => graphicContext.yScale(d.key))\r\n      .attr('x2', (d, i) => graphicContext.xScale(d.mean))\r\n      .attr('y2', (d, i) => graphicContext.yScale(d.key) + graphicContext.yScale.bandwidth())\r\n      .style('stroke', d => d.color);\r\n  }\r\n\r\n  positionOutlier(elm: Selection<SVGGElement, any, null, undefined>, graphicContext: GraphicContext) {\r\n\r\n    elm = (graphicContext.transitionOn ? elm.transition(graphicContext.transition) : elm) as any;\r\n    elm.attr('cx', d => graphicContext.xScale(d[0]))\r\n      .attr('cy', d => graphicContext.yScale(d[1]) + graphicContext.yScale.bandwidth() / 2)\r\n      .style('stroke', d => d[2])\r\n      .style('fill', d => d[2]);\r\n\r\n  }\r\n\r\n\r\n  createOutlier(elm: Selection<SVGGElement, any, null, undefined>, lookAndFeel: LookAndFeel, graphicContext: GraphicContext,\r\n                positionOutlierFunction: (elm: Selection<SVGGElement, any, null, undefined>, graphicContext: GraphicContext) => {}) {\r\n\r\n\r\n    elm\r\n      .append<SVGGElement>('circle')\r\n      .attr('class', 'outlier')\r\n      .attr('r', lookAndFeel.outliersCircleRadius)\r\n      .style('stroke-width', lookAndFeel.outliersStrokeWidth)\r\n      .style('fill-opacity', lookAndFeel.outliersFillOpacity)\r\n      .call(positionOutlierFunction, graphicContext)\r\n    ;\r\n\r\n  }\r\n\r\n  positionWhiskerLine(elm: Selection<SVGGElement, BoxDefinition, null, undefined>, left: boolean, graphicContext: GraphicContext) {\r\n\r\n    elm = (graphicContext.transitionOn ? elm.transition(graphicContext.transition) : elm) as any;\r\n    elm\r\n      .attr('x1', (d, i) => left ? graphicContext.xScale(d.lowWskr) : graphicContext.xScale(d.thrdQnt))\r\n      .attr('y1', (d, i) => graphicContext.yScale(d.key) + graphicContext.yScale.bandwidth() / 2)\r\n      .attr('x2', (d, i) => left ? graphicContext.xScale(d.fstQnt) : graphicContext.xScale(d.highWskr))\r\n      .attr('y2', (d, i) => graphicContext.yScale(d.key) + graphicContext.yScale.bandwidth() / 2)\r\n      .style('stroke', d => d.color)\r\n      // .style(\"visibility\", d => (left && (d.lowWskr === d.fstQnt)) || (!left && (d.highWskr === d.thrdQnt)) ? \"hidden\" : \"visible\");\r\n      .style('display', d => (left && (d.lowWskr === d.fstQnt)) || (!left && (d.highWskr === d.thrdQnt)) ? 'none' : null);\r\n\r\n\r\n  }\r\n\r\n  positionWhiskerTip(elm: Selection<SVGGElement, BoxDefinition, null, undefined>, left: boolean, graphicContext: GraphicContext) {\r\n\r\n    elm = (graphicContext.transitionOn ? elm.transition(graphicContext.transition) : elm) as any;\r\n    elm\r\n      .attr('x1', (d, i) => left ? graphicContext.xScale(d.lowWskr) : graphicContext.xScale(d.highWskr))\r\n      .attr('y1', (d, i) => graphicContext.yScale(d.key))\r\n      .attr('x2', (d, i) => left ? graphicContext.xScale(d.lowWskr) : graphicContext.xScale(d.highWskr))\r\n      .attr('y2', (d, i) => graphicContext.yScale(d.key) + graphicContext.yScale.bandwidth())\r\n      .style('stroke', d => d.color)\r\n      // .style(\"visibility\", d => (left && (d.lowWskr === d.fstQnt)) || (!left && (d.highWskr === d.thrdQnt)) ? \"hidden\" : \"visible\");\r\n      .style('display', d => (left && (d.lowWskr === d.fstQnt)) || (!left && (d.highWskr === d.thrdQnt)) ? 'none' : null);\r\n\r\n\r\n\r\n  }\r\n\r\n  updateWhiskers(whiskers: Selection<SVGGElement, BoxDefinition, null, undefined>,\r\n                 graphicContext: GraphicContext) {\r\n\r\n    whiskers.select('line.whiskerlineL')\r\n      .call(this.positionWhiskerLine, true, graphicContext);\r\n\r\n    whiskers.select('line.whiskerlineR')\r\n      .call(this.positionWhiskerLine, false, graphicContext);\r\n\r\n    whiskers.select('line.whiskertipL')\r\n      .call(this.positionWhiskerTip, true, graphicContext);\r\n\r\n    whiskers.select('line.whiskertipR')\r\n      .call(this.positionWhiskerTip, false, graphicContext);\r\n\r\n  }\r\n\r\n  createWhiskers(whiskers: Selection<SVGGElement, BoxDefinition, null, undefined>,\r\n                 lookAndFeel: LookAndFeel, graphicContext: GraphicContext) {\r\n\r\n\r\n    const lwhiskr = whiskers.append('line')\r\n      .attr('class', 'whiskerlineL')\r\n      .style('stroke-width', lookAndFeel.whiskerStrokeWidth)\r\n      .style('stroke-dasharray', '4 3')\r\n      .call(this.positionWhiskerLine, true, graphicContext)\r\n    ;\r\n    const rwhiskr = whiskers.append('line')\r\n      .attr('class', 'whiskerlineR')\r\n      .style('stroke-width', lookAndFeel.whiskerStrokeWidth)\r\n      .style('stroke-dasharray', '4 3')\r\n      .call(this.positionWhiskerLine, false, graphicContext)\r\n    ;\r\n\r\n    const lTip = whiskers.append('line')\r\n      .attr('class', 'whiskertipL')\r\n      .style('stroke-width', lookAndFeel.whiskerStrokeWidth)\r\n      .call(this.positionWhiskerTip, true, graphicContext)\r\n    ;\r\n\r\n    const rTip = whiskers.append('line')\r\n      .attr('class', 'whiskertipR')\r\n      .style('stroke-width', lookAndFeel.whiskerStrokeWidth)\r\n      .call(this.positionWhiskerTip, false, graphicContext)\r\n    ;\r\n\r\n\r\n  }\r\n\r\n  createBoxes(widgets: Selection<SVGGElement, BoxDefinition, null, undefined>,\r\n              lookAndFeel: LookAndFeel, graphicContext: GraphicContext) {\r\n\r\n\r\n    const rect = widgets.append('rect')\r\n      .attr('class', 'box')\r\n      .style('stroke-width', lookAndFeel.boxStrokeWidth)\r\n      .style('fill-opacity', lookAndFeel.boxFillOpacity)\r\n      .call(this.positionBoxRectangle, graphicContext);\r\n\r\n\r\n    const median = widgets.append('line')\r\n      .attr('class', 'medianline')\r\n      .style('stroke-width', lookAndFeel.boxStrokeWidth)\r\n      .call(this.positionMedianLine, graphicContext);\r\n\r\n    const instance = this;\r\n\r\n    this.ngZone.runOutsideAngular(() => {\r\n      rect.on('mouseover', function(evnt: MouseEvent, d: BoxDefinition) {\r\n        instance.showTooltip(d.median, d.median, d.key);\r\n      })\r\n        .on('mouseout', function() {\r\n          instance.hideTooltip();\r\n        });\r\n\r\n      median.on('mouseover', function(evnt: MouseEvent, d: BoxDefinition) {\r\n        instance.showTooltip(d.median, d.median, d.key);\r\n      })\r\n        .on('mouseout', function() {\r\n          instance.hideTooltip();\r\n        });\r\n\r\n    });\r\n\r\n    const mean = widgets\r\n      .append('line')\r\n      .attr('class', 'meanline')\r\n      .style('stroke-width', lookAndFeel.meanStrokeWidth)\r\n      .style('stroke-dasharray', '4 2')\r\n      .call(this.positionMeanLine, graphicContext)\r\n    ;\r\n\r\n    // has to be outside angular, to prevent detection\r\n    this.ngZone.runOutsideAngular(() => {\r\n      mean\r\n        .on('mouseover', function(evnt: MouseEvent, d: BoxDefinition) {\r\n          instance.showTooltip(d.mean, d.mean, d.key);\r\n        })\r\n        .on('mouseout', function() {\r\n          instance.hideTooltip();\r\n        });\r\n\r\n    });\r\n\r\n  }\r\n\r\n  createBoxWidgets(newBoxWidgets: Selection<SVGGElement, BoxDefinition, null, undefined>,\r\n                   lookAndFeel: LookAndFeel, graphicContext: GraphicContext) {\r\n\r\n    // this.ngZone.runOutsideAngular(() => {\r\n\r\n    const instance = this;\r\n\r\n    const backdrops = newBoxWidgets.append<SVGGElement>('rect').attr('class', 'backdrop')\r\n    // .style(\"stroke-width\", lookAndFeel.boxStrokeWidth)\r\n      .style('fill-opacity', lookAndFeel.backdropOpacity)\r\n      .style('fill', lookAndFeel.backdropColor)\r\n      .call(this.positionBackdrop, graphicContext);\r\n\r\n\r\n    const whiskers = newBoxWidgets.append<SVGGElement>('g').attr('class', 'whiskers');\r\n\r\n    this.createWhiskers(whiskers, lookAndFeel, graphicContext);\r\n\r\n    const boxes = newBoxWidgets.append<SVGGElement>('g').attr('class', 'box');\r\n    this.createBoxes(boxes, lookAndFeel, graphicContext);\r\n\r\n\r\n    const outliers = newBoxWidgets.append<SVGGElement>('g').attr('class', 'outliers');\r\n\r\n\r\n    outliers.selectAll('.outlier')\r\n      .data(d => d.outliers.map(x => [x, d.key, d.color]))\r\n      .enter()\r\n      .call(this.createOutlier, lookAndFeel, graphicContext, this.positionOutlier)\r\n    ;\r\n\r\n    // });\r\n  }\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport {HBoxPlotComponent} from './hbox-plot/hbox-plot.component';\r\n\r\n\r\n\r\n@NgModule({\r\n  declarations: [HBoxPlotComponent],\r\n  imports: [\r\n  ],\r\n  exports: [HBoxPlotComponent]\r\n})\r\nexport class BD2NgxHBoxplotModule { }\r\n","/*\r\n * Public API Surface of bd2-ngx-hboxplot\r\n */\r\n\r\nexport * from './lib/hbox-plot/hbox-plot.component';\r\nexport * from './lib/bd2-ngx-hboxplot.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}