axidio-styleguide-library1-v2 0.2.25 → 0.2.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3481,6 +3481,9 @@ class GroupChartComponent extends ComponentUniqueId {
3481
3481
  var alternate_text = false;
3482
3482
  var short_tick_length = 4;
3483
3483
  var long_tick_length = 16;
3484
+ /**
3485
+ * longer tick length needed for weekly charts
3486
+ */
3484
3487
  var short_tick_length_bg = 5;
3485
3488
  var long_tick_length_bg = 30;
3486
3489
  var leftAndRightSpaces = 50;
@@ -3492,6 +3495,9 @@ class GroupChartComponent extends ComponentUniqueId {
3492
3495
  data = this.chartData.data;
3493
3496
  metaData = this.chartData.metaData;
3494
3497
  lineData = this.chartData.lineData;
3498
+ // if (lineData || this.chartData.targetLineData) {
3499
+ // rightSvgWidth = 60;
3500
+ // }
3495
3501
  if (!metaData.colorAboveTarget) {
3496
3502
  metaData['colorAboveTarget'] = metaData.colors;
3497
3503
  }
@@ -3528,10 +3534,16 @@ class GroupChartComponent extends ComponentUniqueId {
3528
3534
  else
3529
3535
  width = this.chartData.data.length * 160;
3530
3536
  }
3537
+ // if (this.chartData.data.length > 8) {
3538
+ // width = this.chartData.data.length * 140;
3539
+ // }
3531
3540
  var height = parseInt(verticalstackedcontainer.style('height')) *
3532
3541
  (self.chartConfiguration.svgHeight / 100) -
3533
3542
  margin.top -
3534
3543
  margin.bottom;
3544
+ /**
3545
+ * entire height used in weekly charts as x axis needed to be displayed at the bottom of the chart
3546
+ */
3535
3547
  if (this.chartConfiguration.isFullScreen != undefined &&
3536
3548
  this.chartConfiguration.isFullScreen) {
3537
3549
  height =
@@ -3553,15 +3565,30 @@ class GroupChartComponent extends ComponentUniqueId {
3553
3565
  margin.bottom -
3554
3566
  100;
3555
3567
  }
3568
+ /**
3569
+ * for hiding header
3570
+ * used by weekly charts
3571
+ */
3556
3572
  if (this.chartConfiguration.isHeaderVisible != undefined)
3557
3573
  this.isHeaderVisible = this.chartConfiguration.isHeaderVisible;
3574
+ /**
3575
+ * for hiding legends
3576
+ * used by weekly charts
3577
+ */
3558
3578
  if (this.chartConfiguration.legendVisible != undefined) {
3559
3579
  this.legendVisible = this.chartConfiguration.legendVisible;
3560
3580
  }
3581
+ /**
3582
+ * for removing background color so that it can take parents color
3583
+ *
3584
+ */
3561
3585
  if (this.chartConfiguration.isTransparentBackground != undefined) {
3562
3586
  this.isTransparentBackground =
3563
3587
  this.chartConfiguration.isTransparentBackground;
3564
3588
  }
3589
+ /**
3590
+ * format data values based on configuration received
3591
+ */
3565
3592
  if (this.chartConfiguration.textFormatter != undefined) {
3566
3593
  formatFromBackend = ChartHelper.dataValueFormatter(this.chartConfiguration.textFormatter);
3567
3594
  formatForHugeNumbers = ChartHelper.dataValueFormatter('.2s');
@@ -3574,6 +3601,7 @@ class GroupChartComponent extends ComponentUniqueId {
3574
3601
  .style('height', height)
3575
3602
  .style('overflow-x', 'hidden')
3576
3603
  .style('padding-left', `${margin.left}px`)
3604
+ // .call(ChartHelper.responsivefy)
3577
3605
  .style('padding-right', `${rightSvgWidth}px`)
3578
3606
  .style('margin-left', '15px');
3579
3607
  var svgYAxisLeft = outerContainer
@@ -3601,8 +3629,10 @@ class GroupChartComponent extends ComponentUniqueId {
3601
3629
  .style('overflow-x', 'auto');
3602
3630
  var svg = innerContainer
3603
3631
  .append('svg')
3632
+ // .attr('id', self.uniqueId)
3604
3633
  .attr('width', width - rightSvgWidth)
3605
3634
  .attr('height', height + margin.top + margin.bottom + 30)
3635
+ // .call(ChartHelper.responsivefy)
3606
3636
  .append('g')
3607
3637
  .attr('transform', 'translate(' + 0 + ',' + margin.top + ')');
3608
3638
  var subgroups = keyList;
@@ -3611,6 +3641,9 @@ class GroupChartComponent extends ComponentUniqueId {
3611
3641
  return d.name;
3612
3642
  })
3613
3643
  .keys();
3644
+ /**
3645
+ * x axis range made similar to line chart or vertical stack so that all the charts will get aligned with each other.
3646
+ */
3614
3647
  if (this.chartConfiguration.isMultiChartGridLine != undefined) {
3615
3648
  x = d3
3616
3649
  .scaleBand()
@@ -3628,11 +3661,27 @@ class GroupChartComponent extends ComponentUniqueId {
3628
3661
  .range([leftAndRightSpaces, width - rightSvgWidth - leftAndRightSpaces])
3629
3662
  .padding([0.3]);
3630
3663
  }
3664
+ // x.bandwidth(96);
3631
3665
  var xScaleFromOrigin = d3
3632
3666
  .scaleBand()
3633
3667
  .domain(groups)
3634
3668
  .range([0, width - rightSvgWidth]);
3669
+ // .padding([0.2]);
3670
+ /**
3671
+ * draw second x axis on top
3672
+ */
3673
+ // if (self.chartConfiguration.showXaxisTop) {
3674
+ // svg
3675
+ // .append('g')
3676
+ // .attr('class', 'lib-line-axis-text lib-line-x-axis-text x-axis')
3677
+ // .attr('style', self.chartConfiguration.xAxisCustomTextStyles)
3678
+ // .call(d3.axisBottom(x).tickSize(0));
3679
+ // }
3680
+ // d3.svg.axis().scale(x).orient('bottom').ticks(1).innerTickSize(-height);
3635
3681
  if (this.chartConfiguration.isMultiChartGridLine == undefined) {
3682
+ /**
3683
+ * normal ticks for all dashboard charts
3684
+ */
3636
3685
  svg
3637
3686
  .append('g')
3638
3687
  .attr('class', 'x1 axis1')
@@ -3645,7 +3694,7 @@ class GroupChartComponent extends ComponentUniqueId {
3645
3694
  .selectAll('g.x1.axis1 g.tick text')
3646
3695
  .attr('class', 'lib-xaxis-labels-texts-drilldown')
3647
3696
  .style('fill', 'var(--chart-text-color)')
3648
- .attr('y', 32);
3697
+ .attr('y', 32); // Increase distance from bars (default is ~9)
3649
3698
  }
3650
3699
  else {
3651
3700
  svg
@@ -3653,14 +3702,32 @@ class GroupChartComponent extends ComponentUniqueId {
3653
3702
  .attr('class', 'lib-xaxis-labels-texts-drilldown')
3654
3703
  .style('fill', 'var(--chart-text-color)');
3655
3704
  }
3705
+ // .attr('y', function () {
3706
+ // if (alternate_text) {
3707
+ // alternate_text = false;
3708
+ // return long_tick_length + 1;
3709
+ // } else {
3710
+ // alternate_text = true;
3711
+ // return short_tick_length + 1;
3712
+ // }
3713
+ // });
3656
3714
  }
3657
3715
  else {
3716
+ /**
3717
+ * bigger ticks for weekly charts and more space from x axis to labels
3718
+ */
3719
+ /**
3720
+ * draw x axis
3721
+ */
3658
3722
  svg
3659
3723
  .append('g')
3660
3724
  .attr('class', 'x1 axis1')
3661
3725
  .attr('transform', 'translate(0,' + height + ')')
3662
3726
  .call(d3.axisBottom(x).tickSize(0))
3663
3727
  .call((g) => g.select('.domain').attr('fill', 'none'));
3728
+ /**
3729
+ * tick line size in alternate fashion
3730
+ */
3664
3731
  svg.selectAll('g.x1.axis1 g.tick line').attr('y2', function () {
3665
3732
  if (alternate_text &&
3666
3733
  self.chartConfiguration.isNoAlternateXaxisText == undefined) {
@@ -3672,7 +3739,14 @@ class GroupChartComponent extends ComponentUniqueId {
3672
3739
  return short_tick_length_bg - 4;
3673
3740
  }
3674
3741
  });
3742
+ /**
3743
+ * reset the flag so that values can be shown in same alternate fashion
3744
+ */
3675
3745
  alternate_text = false;
3746
+ /**
3747
+ * print x-axis label texts
3748
+ * used by weekly charts
3749
+ */
3676
3750
  svg
3677
3751
  .selectAll('g.x1.axis1 g.tick text')
3678
3752
  .attr('class', 'lib-xaxis-labels-texts-weeklycharts')
@@ -3721,6 +3795,7 @@ class GroupChartComponent extends ComponentUniqueId {
3721
3795
  return '';
3722
3796
  });
3723
3797
  }
3798
+ /**y scale for left y axis */
3724
3799
  var y = d3.scaleLinear().rangeRound([height, 0]);
3725
3800
  var maxValue = d3.max(data, (d) => d3.max(keyList, (key) => +d[key]));
3726
3801
  if (maxValue == 0) {
@@ -3731,7 +3806,27 @@ class GroupChartComponent extends ComponentUniqueId {
3731
3806
  maxValue = 100;
3732
3807
  }
3733
3808
  }
3809
+ if (self.chartConfiguration.yAxisGrid) {
3810
+ // svg
3811
+ // .append('g')
3812
+ // .attr('class', 'grid')
3813
+ // .call(
3814
+ // d3
3815
+ // .axisLeft(y)
3816
+ // .ticks(self.chartConfiguration.numberOfYTicks)
3817
+ // .tickSize(-width)
3818
+ // .tickFormat('')
3819
+ // )
3820
+ // // .style('stroke-dasharray', '5 5')
3821
+ // .style('color', '#B9B9B9')
3822
+ // .style('opacity', '0.5')
3823
+ // .call((g) => g.select('.domain').remove());
3824
+ }
3734
3825
  if (this.chartConfiguration.customYscale) {
3826
+ /**
3827
+ * increase y-scale so that values wont cross or exceed out of range
3828
+ * used in weekly charts
3829
+ */
3735
3830
  maxValue = maxValue * this.chartConfiguration.customYscale;
3736
3831
  }
3737
3832
  if (this.chartData.targetLineData &&
@@ -3769,6 +3864,10 @@ class GroupChartComponent extends ComponentUniqueId {
3769
3864
  .tickSize(0)
3770
3865
  .tickFormat(self.chartConfiguration.yLineAxisLabelFomatter);
3771
3866
  }
3867
+ /**
3868
+ * show x-axis grid between labels
3869
+ * used by weekly charts
3870
+ */
3772
3871
  if (self.chartConfiguration.isXgridBetweenLabels) {
3773
3872
  svg
3774
3873
  .append('g')
@@ -3780,6 +3879,9 @@ class GroupChartComponent extends ComponentUniqueId {
3780
3879
  .call((g) => g.select('.domain').remove());
3781
3880
  }
3782
3881
  if (this.chartConfiguration.yAxisGrid) {
3882
+ /**
3883
+ * draw y axis
3884
+ */
3783
3885
  svg
3784
3886
  .append('g')
3785
3887
  .call(d3
@@ -3803,12 +3905,22 @@ class GroupChartComponent extends ComponentUniqueId {
3803
3905
  xSubgroup.range([0, x.bandwidth()]);
3804
3906
  }
3805
3907
  else {
3908
+ /**
3909
+ * used to make grouped bars with lesser width as we are not using padding for width
3910
+ * used by weekly charts
3911
+ */
3806
3912
  xSubgroup.range([0, x.bandwidth()]);
3807
3913
  }
3914
+ // if (this.chartConfiguration.isDrilldownChart) {
3915
+ // }
3808
3916
  var color = d3
3809
3917
  .scaleOrdinal()
3810
3918
  .domain(subgroups)
3811
3919
  .range(Object.values(metaData.colors));
3920
+ // var colorAboveTarget = d3
3921
+ // .scaleOrdinal()
3922
+ // .domain(subgroups)
3923
+ // .range(Object.values(metaData.colorAboveTarget));
3812
3924
  var state = svg
3813
3925
  .append('g')
3814
3926
  .selectAll('.state')
@@ -3823,8 +3935,10 @@ class GroupChartComponent extends ComponentUniqueId {
3823
3935
  .data(function (d) {
3824
3936
  let newList = [];
3825
3937
  subgroups.map(function (key) {
3938
+ // if (key !== "group") {
3826
3939
  let obj = { key: key, value: d[key], name: d.name };
3827
3940
  newList.push(obj);
3941
+ // }
3828
3942
  });
3829
3943
  return newList;
3830
3944
  })
@@ -3837,6 +3951,7 @@ class GroupChartComponent extends ComponentUniqueId {
3837
3951
  !metaData.barWithoutClick.length ||
3838
3952
  (!metaData.barWithoutClick.includes(d?.name) &&
3839
3953
  !metaData.barWithoutClick.includes(d?.key)))
3954
+ // self.handleClick(d.data.name);
3840
3955
  self.handleClick(d);
3841
3956
  }
3842
3957
  })
@@ -3853,12 +3968,14 @@ class GroupChartComponent extends ComponentUniqueId {
3853
3968
  0 + (x.bandwidth() - 200) / 2,
3854
3969
  x.bandwidth() - (x.bandwidth() - 200) / 2,
3855
3970
  ]);
3971
+ // .padding(0.05);
3856
3972
  }
3857
3973
  else
3858
3974
  tempScale.range([
3859
3975
  0 + (x.bandwidth() - 300) / 2,
3860
3976
  x.bandwidth() - (x.bandwidth() - 300) / 2,
3861
3977
  ]);
3978
+ // .padding(0.05);
3862
3979
  }
3863
3980
  else
3864
3981
  tempScale.range([
@@ -3877,6 +3994,7 @@ class GroupChartComponent extends ComponentUniqueId {
3877
3994
  })
3878
3995
  .attr('width', function (d) {
3879
3996
  if (self.chartConfiguration.isDrilldownChart) {
3997
+ // var tempScale;
3880
3998
  data.map((indiv) => {
3881
3999
  if (indiv.name == d.name) {
3882
4000
  let keys = Object.keys(indiv).filter((temp, i) => i != 0);
@@ -3889,12 +4007,14 @@ class GroupChartComponent extends ComponentUniqueId {
3889
4007
  0 + (x.bandwidth() - 200) / 2,
3890
4008
  x.bandwidth() - (x.bandwidth() - 200) / 2,
3891
4009
  ]);
4010
+ // .padding(0.05);
3892
4011
  }
3893
4012
  else
3894
4013
  tempScale.range([
3895
4014
  0 + (x.bandwidth() - 300) / 2,
3896
4015
  x.bandwidth() - (x.bandwidth() - 300) / 2,
3897
4016
  ]);
4017
+ // .padding(0.05);
3898
4018
  }
3899
4019
  else
3900
4020
  tempScale.range([
@@ -3916,6 +4036,7 @@ class GroupChartComponent extends ComponentUniqueId {
3916
4036
  return height - y(d.value);
3917
4037
  return height - y(0);
3918
4038
  })
4039
+ // .style('cursor', 'pointer')
3919
4040
  .style('cursor', function (d) {
3920
4041
  if (metaData.hasDrillDown && !isria)
3921
4042
  return 'pointer';
@@ -3930,6 +4051,9 @@ class GroupChartComponent extends ComponentUniqueId {
3930
4051
  return self.chartData.metaData.colorAboveTarget[d.key];
3931
4052
  return self.chartData.metaData.colors[d.key];
3932
4053
  });
4054
+ /**
4055
+ * display angled texts on the bars
4056
+ */
3933
4057
  if (this.chartConfiguration.textsOnBar != undefined && !this.isZoomedOut) {
3934
4058
  state
3935
4059
  .selectAll('text')
@@ -3990,12 +4114,14 @@ class GroupChartComponent extends ComponentUniqueId {
3990
4114
  0 + (x.bandwidth() - 200) / 2,
3991
4115
  x.bandwidth() - (x.bandwidth() - 200) / 2,
3992
4116
  ]);
4117
+ // .padding(0.05);
3993
4118
  }
3994
4119
  else
3995
4120
  tempScale.range([
3996
4121
  0 + (x.bandwidth() - 300) / 2,
3997
4122
  x.bandwidth() - (x.bandwidth() - 300) / 2,
3998
4123
  ]);
4124
+ // .padding(0.05);
3999
4125
  }
4000
4126
  else
4001
4127
  tempScale.range([
@@ -4005,9 +4131,16 @@ class GroupChartComponent extends ComponentUniqueId {
4005
4131
  }
4006
4132
  }
4007
4133
  });
4134
+ /**
4135
+ * if set, then all texts ll be horizontal
4136
+ */
4008
4137
  if (self.chartConfiguration.textAlwaysHorizontal) {
4009
4138
  return ('translate(' + xSubgroup(d.key) + ',' + (y(d.value) - 3) + ')');
4010
4139
  }
4140
+ /**
4141
+ * rotate texts having more than one digits
4142
+ */
4143
+ // if (d.value > 9)
4011
4144
  if (!isNaN(tempScale(d.key)))
4012
4145
  return ('translate(' +
4013
4146
  (tempScale(d.key) + tempScale.bandwidth() * 0.55) +
@@ -4015,6 +4148,14 @@ class GroupChartComponent extends ComponentUniqueId {
4015
4148
  (y(0) - 10) +
4016
4149
  ') rotate(270)');
4017
4150
  return 'translate(0,0)';
4151
+ // else
4152
+ // return (
4153
+ // 'translate(' +
4154
+ // (tempScale(d.key) + tempScale.bandwidth() / 2) +
4155
+ // ',' +
4156
+ // y(0) +
4157
+ // ')'
4158
+ // );
4018
4159
  })
4019
4160
  .on('click', function (d) {
4020
4161
  if (!metaData.barWithoutClick ||
@@ -4043,6 +4184,7 @@ class GroupChartComponent extends ComponentUniqueId {
4043
4184
  svg
4044
4185
  .append('foreignObject')
4045
4186
  .attr('x', function () {
4187
+ // var tempScale;
4046
4188
  var elementsCounter;
4047
4189
  data.map((indiv) => {
4048
4190
  if (indiv.name == d.name) {
@@ -4056,12 +4198,14 @@ class GroupChartComponent extends ComponentUniqueId {
4056
4198
  0 + (x.bandwidth() - 200) / 2,
4057
4199
  x.bandwidth() - (x.bandwidth() - 200) / 2,
4058
4200
  ]);
4201
+ // .padding(0.05);
4059
4202
  }
4060
4203
  else
4061
4204
  tempScale.range([
4062
4205
  0 + (x.bandwidth() - 300) / 2,
4063
4206
  x.bandwidth() - (x.bandwidth() - 300) / 2,
4064
4207
  ]);
4208
+ // .padding(0.05);
4065
4209
  }
4066
4210
  else
4067
4211
  tempScale.range([
@@ -4091,6 +4235,7 @@ class GroupChartComponent extends ComponentUniqueId {
4091
4235
  return d.class;
4092
4236
  })
4093
4237
  .attr('width', function () {
4238
+ // var tempScale;
4094
4239
  data.map((indiv) => {
4095
4240
  if (indiv.name == d.name) {
4096
4241
  let keys = Object.keys(indiv).filter((temp, i) => i != 0);
@@ -4102,12 +4247,14 @@ class GroupChartComponent extends ComponentUniqueId {
4102
4247
  0 + (x.bandwidth() - 200) / 2,
4103
4248
  x.bandwidth() - (x.bandwidth() - 200) / 2,
4104
4249
  ]);
4250
+ // .padding(0.05);
4105
4251
  }
4106
4252
  else
4107
4253
  tempScale.range([
4108
4254
  0 + (x.bandwidth() - 300) / 2,
4109
4255
  x.bandwidth() - (x.bandwidth() - 300) / 2,
4110
4256
  ]);
4257
+ // .padding(0.05);
4111
4258
  }
4112
4259
  else
4113
4260
  tempScale.range([
@@ -4194,18 +4341,35 @@ class GroupChartComponent extends ComponentUniqueId {
4194
4341
  .attr('transform', 'translate(0,0)')
4195
4342
  .call(y)
4196
4343
  .style('display', 'none');
4344
+ /**
4345
+ * hide x axis labels
4346
+ * config is there for future use
4347
+ * used by weekly charts
4348
+ */
4197
4349
  if (this.chartConfiguration.isXaxisLabelHidden != undefined &&
4198
4350
  this.chartConfiguration.isXaxisLabelHidden) {
4199
4351
  d3.selectAll('g.lib-line-x-axis-text > g > text').attr('class', 'lib-display-hidden');
4200
4352
  }
4353
+ /**
4354
+ * hide y axis labels
4355
+ * used by weekly charts
4356
+ */
4201
4357
  if (this.chartConfiguration.isYaxisLabelHidden != undefined &&
4202
4358
  this.chartConfiguration.isYaxisLabelHidden) {
4203
4359
  d3.selectAll('.yaxis-dashed > g > text').attr('class', 'lib-display-hidden');
4204
4360
  }
4361
+ /**
4362
+ * hide y axis labels
4363
+ * config is there for future use
4364
+ */
4205
4365
  if (this.chartConfiguration.isYaxisHidden != undefined &&
4206
4366
  this.chartConfiguration.isYaxisHidden) {
4207
4367
  d3.selectAll('.yaxis-dashed').attr('class', 'lib-display-hidden');
4208
4368
  }
4369
+ /**
4370
+ * dashed y axis
4371
+ * used by weekly charts
4372
+ */
4209
4373
  if (this.chartConfiguration.isYaxisDashed != undefined &&
4210
4374
  this.chartConfiguration.isYaxisDashed) {
4211
4375
  d3.selectAll('.yaxis-dashed')
@@ -4222,11 +4386,17 @@ class GroupChartComponent extends ComponentUniqueId {
4222
4386
  .call(yLineAxis);
4223
4387
  }
4224
4388
  }
4389
+ /**
4390
+ * used to display y label
4391
+ */
4225
4392
  if (this.isZoomedOut) {
4226
4393
  svg
4227
4394
  .selectAll('.lib-xaxis-labels-texts-drilldown')
4228
4395
  .attr('class', 'lib-display-hidden');
4229
4396
  }
4397
+ /**
4398
+ * used to write y labels based on configuration
4399
+ */
4230
4400
  if (metaData.yLabel) {
4231
4401
  svgYAxisLeft
4232
4402
  .append('text')
@@ -4245,6 +4415,9 @@ class GroupChartComponent extends ComponentUniqueId {
4245
4415
  .text(metaData.yLabel);
4246
4416
  }
4247
4417
  else {
4418
+ /**
4419
+ * used by weekly charts
4420
+ */
4248
4421
  svg
4249
4422
  .selectAll('.lib-axis-group-label')
4250
4423
  .attr('class', 'lib-ylabel-weeklyCharts')
@@ -4285,6 +4458,13 @@ class GroupChartComponent extends ComponentUniqueId {
4285
4458
  .attr('y2', yZero)
4286
4459
  .style('stroke-dasharray', '5 5')
4287
4460
  .style('stroke', this.chartData.targetLineData.color);
4461
+ // svgYAxisRight
4462
+ // .append('line')
4463
+ // .attr('x1', 0)
4464
+ // .attr('x2', rightSvgWidth)
4465
+ // .attr('y1', yZero)
4466
+ // .attr('y2', yZero)
4467
+ // .style('stroke', this.chartData.targetLineData.color);
4288
4468
  svgYAxisRight
4289
4469
  .append('foreignObject')
4290
4470
  .attr('transform', 'translate(' + 0 + ',' + (yZero - 30) + ')')
@@ -4312,6 +4492,13 @@ class GroupChartComponent extends ComponentUniqueId {
4312
4492
  });
4313
4493
  }
4314
4494
  if (this.chartConfiguration.isDrilldownChart) {
4495
+ /**
4496
+ * used by drilldown charts
4497
+ */
4498
+ // svg
4499
+ // .selectAll('.lib-axis-group-label')
4500
+ // .attr('class', 'lib-ylabel-drilldowncharts')
4501
+ // .text(metaData.yLabel.toLowerCase());
4315
4502
  svg.selectAll('g.x1.axis1 g.tick line').style('display', 'none');
4316
4503
  }
4317
4504
  if (metaData.lineyLabel) {
@@ -6638,21 +6825,6 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6638
6825
  this.isTopCaptionVisible = true;
6639
6826
  this.uniqueId = this.getUniqueId();
6640
6827
  this.isTransparentBackground = false;
6641
- this.isCC = false;
6642
- this.isZoomedOut = true;
6643
- this.CONSTANTS = {
6644
- RIGHT_SVG_WIDTH: 60,
6645
- LEFT_RIGHT_SPACES: 50,
6646
- SHORT_TICK_LENGTH: 4,
6647
- LONG_TICK_LENGTH: 16,
6648
- SHORT_TICK_LENGTH_BG: 5,
6649
- LONG_TICK_LENGTH_BG: 30,
6650
- MIN_MOBILE_BAR_WIDTH: 32,
6651
- DESKTOP_MIN_BAR_WIDTH: 40,
6652
- MOBILE_BAR_PADDING: 12,
6653
- ZOOM_THRESHOLD: 30,
6654
- ZOOM_IN_THRESHOLD: 8,
6655
- };
6656
6828
  this.defaultConfiguration = {
6657
6829
  margin: { top: 20, right: 20, bottom: 20, left: 40 },
6658
6830
  svgHeight: 70,
@@ -6668,7 +6840,6 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6668
6840
  forComparison: true,
6669
6841
  headerMenuOptions: HeaderConfigHelper.headerConfig.headerMenuOptions,
6670
6842
  yAxisGrid: false,
6671
- // Optional configs with undefined defaults
6672
6843
  isHeaderVisible: undefined,
6673
6844
  isTransparentBackground: undefined,
6674
6845
  isTopCaptionVisible: undefined,
@@ -6696,40 +6867,56 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6696
6867
  isToggleVisible: undefined,
6697
6868
  isTitleHidden: undefined,
6698
6869
  };
6699
- }
6700
- ngOnInit() { }
6701
- ngOnChanges() {
6702
- this.removeExistingChart();
6703
- this.initializeStackedChart();
6704
- }
6705
- onResized(event) {
6706
- setTimeout(() => {
6707
- this.removeExistingChart();
6708
- this.initializeStackedChart();
6709
- }, 10);
6870
+ this.isCC = false;
6871
+ this.isZoomedOut = true;
6710
6872
  }
6711
6873
  isZoomOutSelected(isZoomOut) {
6712
6874
  this.isZoomedOut = isZoomOut;
6713
6875
  this.ngOnChanges();
6714
6876
  }
6715
- removeExistingChart() {
6716
- d3.select('#' + this.uniqueId).remove();
6717
- }
6718
- getDeviceConfig() {
6719
- const width = window.innerWidth;
6720
- return {
6721
- isMobile: width < 576,
6722
- isTablet: width >= 576 && width < 992,
6723
- isDesktop: width >= 992,
6724
- };
6877
+ ngOnChanges() {
6878
+ let self = this;
6879
+ d3.select('#' + self.uniqueId).remove();
6880
+ this.initializeStackedChart();
6725
6881
  }
6726
- configureResponsiveSettings(device) {
6727
- if (device.isMobile) {
6882
+ onResized(event) {
6883
+ let self = this;
6884
+ setTimeout(function () {
6885
+ d3.select('#' + self.uniqueId).remove();
6886
+ self.initializeStackedChart();
6887
+ }.bind(self), 10);
6888
+ }
6889
+ ngOnInit() { }
6890
+ initializeStackedChart() {
6891
+ var self = this;
6892
+ let data = [];
6893
+ let metaData = null;
6894
+ let keyList = null;
6895
+ let lineData = null;
6896
+ let colors = null;
6897
+ var alternate_text = false;
6898
+ var alternate_label = false;
6899
+ var short_tick_length = 4;
6900
+ var long_tick_length = 16;
6901
+ var short_tick_length_bg = 5;
6902
+ var long_tick_length_bg = 30;
6903
+ var formatFromBackend;
6904
+ var formatForHugeNumbers;
6905
+ var tempObjectHolder = {};
6906
+ var rightSvgWidth = 60;
6907
+ var leftAndRightSpaces = 50;
6908
+ let isria = this.customChartConfiguration.isRia;
6909
+ // Responsive breakpoints
6910
+ const isMobile = window.innerWidth < 576;
6911
+ const isTablet = window.innerWidth >= 576 && window.innerWidth < 992;
6912
+ const isDesktop = window.innerWidth >= 992;
6913
+ // Adjust margins and font sizes based on device
6914
+ if (isMobile) {
6728
6915
  this.chartConfiguration.margin = { top: 20, right: 10, bottom: 40, left: 30 };
6729
6916
  this.chartConfiguration.numberOfYTicks = 4;
6730
6917
  this.chartConfiguration.svgHeight = 60;
6731
6918
  }
6732
- else if (device.isTablet) {
6919
+ else if (isTablet) {
6733
6920
  this.chartConfiguration.margin = { top: 25, right: 20, bottom: 45, left: 40 };
6734
6921
  this.chartConfiguration.numberOfYTicks = 6;
6735
6922
  this.chartConfiguration.svgHeight = 70;
@@ -6739,612 +6926,922 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6739
6926
  this.chartConfiguration.numberOfYTicks = 7;
6740
6927
  this.chartConfiguration.svgHeight = 80;
6741
6928
  }
6742
- }
6743
- mergeConfigurations() {
6744
- for (const key in this.defaultConfiguration) {
6745
- this.chartConfiguration[key] = ChartHelper.getValueByConfigurationType(key, this.defaultConfiguration, this.customChartConfiguration);
6929
+ for (var i in this.defaultConfiguration) {
6930
+ this.chartConfiguration[i] = ChartHelper.getValueByConfigurationType(i, this.defaultConfiguration, this.customChartConfiguration);
6746
6931
  }
6747
- }
6748
- prepareMetaData(metaData) {
6749
- if (!metaData.unit)
6932
+ data = this.chartData.data;
6933
+ metaData = this.chartData.metaData;
6934
+ if (metaData.unit == undefined)
6750
6935
  metaData.unit = '';
6751
- if (metaData.isCC)
6936
+ if (metaData.isCC) {
6752
6937
  this.isCC = metaData.isCC;
6753
- if (metaData.barWithoutClick?.length) {
6754
- metaData.barWithoutClick = metaData.barWithoutClick.map(el => el.toLowerCase());
6938
+ }
6939
+ if (metaData.barWithoutClick && metaData.barWithoutClick.length) {
6940
+ metaData.barWithoutClick = metaData.barWithoutClick.map((ele) => ele.toLowerCase());
6755
6941
  }
6756
6942
  else {
6757
6943
  metaData.barWithoutClick = [];
6758
6944
  }
6759
- return metaData;
6760
- }
6761
- calculateDimensions(chartContainer, verticalContainer, margin, device, dataLength) {
6762
- const containerWidth = chartContainer.node().getBoundingClientRect().width;
6763
- const containerHeight = verticalContainer.node().getBoundingClientRect().height;
6764
- let width = containerWidth - margin.left - margin.right;
6765
- let height = containerHeight * (this.chartConfiguration.svgHeight / 100) - margin.top - margin.bottom;
6766
- // Handle zoom out scenario
6767
- if (dataLength > this.CONSTANTS.ZOOM_THRESHOLD && this.isZoomedOut) {
6768
- const minWidth = dataLength * (device.isMobile ? 15 : 25);
6769
- width = Math.max(width, minWidth);
6770
- }
6771
- // Handle zoom in scenario
6772
- if (dataLength > this.CONSTANTS.ZOOM_IN_THRESHOLD && !this.isZoomedOut) {
6773
- width = dataLength * (device.isMobile ? 60 : 130);
6774
- }
6775
- // Handle full screen
6776
- if (this.chartConfiguration.isFullScreen) {
6777
- height = this.chartConfiguration.svgHeight !== 80
6945
+ lineData = this.chartData.lineData;
6946
+ colors = metaData.colors;
6947
+ keyList = metaData.keyList;
6948
+ var chartContainer = d3.select(this.containerElt.nativeElement);
6949
+ var verticalstackedcontainer = d3.select(this.verticalstackedcontainerElt.nativeElement);
6950
+ let parsedNum = parseFloat(this.chartData?.targetLineData?.target);
6951
+ if (!isNaN(parsedNum)) {
6952
+ if (Number.isInteger(parsedNum)) {
6953
+ parsedNum = parseInt(this.chartData.targetLineData.target);
6954
+ }
6955
+ else {
6956
+ parsedNum = parseFloat(this.chartData.targetLineData.target);
6957
+ }
6958
+ }
6959
+ var margin = this.chartConfiguration.margin;
6960
+ // Responsive width and height
6961
+ var containerWidth = chartContainer.node().getBoundingClientRect().width;
6962
+ var containerHeight = verticalstackedcontainer.node().getBoundingClientRect().height;
6963
+ var width = containerWidth - margin.left - margin.right;
6964
+ var height = containerHeight * (self.chartConfiguration.svgHeight / 100) - margin.top - margin.bottom;
6965
+ // Adjust width for large datasets and zoom
6966
+ if (this.chartData.data.length > 30 && this.isZoomedOut) {
6967
+ width = width > this.chartData.data.length * (isMobile ? 15 : 25)
6968
+ ? width
6969
+ : this.chartData.data.length * (isMobile ? 15 : 25);
6970
+ }
6971
+ if (this.chartData.data.length > 8 && !this.isZoomedOut) {
6972
+ width = this.chartData.data.length * (isMobile ? 60 : 130);
6973
+ }
6974
+ // Fullscreen and drilldown adjustments
6975
+ if (this.chartConfiguration.isFullScreen != undefined && this.chartConfiguration.isFullScreen) {
6976
+ height = this.chartConfiguration.svgHeight != 80
6778
6977
  ? this.chartConfiguration.svgHeight
6779
6978
  : containerHeight;
6780
6979
  }
6781
- // Handle drilldown
6782
6980
  if (this.chartConfiguration.isDrilldownChart) {
6783
- height = containerHeight - margin.top - margin.bottom - (device.isMobile ? 60 : 130);
6981
+ height = containerHeight - margin.top - margin.bottom - (isMobile ? 60 : 130);
6784
6982
  }
6785
- // Calculate bar dimensions
6786
- let barWidth;
6787
- let barPadding;
6788
- let requiredSvgWidth;
6789
- if (device.isMobile) {
6790
- barWidth = this.CONSTANTS.MIN_MOBILE_BAR_WIDTH;
6791
- barPadding = this.CONSTANTS.MOBILE_BAR_PADDING;
6792
- requiredSvgWidth = Math.max(width - this.CONSTANTS.RIGHT_SVG_WIDTH, (barWidth + barPadding) * dataLength + this.CONSTANTS.LEFT_RIGHT_SPACES * 2 +
6793
- this.CONSTANTS.RIGHT_SVG_WIDTH - barPadding);
6983
+ // ...existing code...
6984
+ /**
6985
+ * for hiding header
6986
+ * used by weekly charts
6987
+ */
6988
+ if (this.chartConfiguration.isHeaderVisible != undefined) {
6989
+ this.isHeaderVisible = this.chartConfiguration.isHeaderVisible;
6794
6990
  }
6795
- else {
6796
- barWidth = Math.max(this.CONSTANTS.DESKTOP_MIN_BAR_WIDTH, (width - this.CONSTANTS.RIGHT_SVG_WIDTH - this.CONSTANTS.LEFT_RIGHT_SPACES * 2) / dataLength);
6797
- barPadding = 0;
6798
- requiredSvgWidth = width - this.CONSTANTS.RIGHT_SVG_WIDTH;
6799
- }
6800
- return {
6801
- width,
6802
- height,
6803
- containerWidth,
6804
- containerHeight,
6805
- barWidth,
6806
- barPadding,
6807
- requiredSvgWidth,
6808
- };
6809
- }
6810
- createSvgContainers(chartContainer, dimensions, margin) {
6811
- const outerContainer = chartContainer
6991
+ /**
6992
+ * for hiding legends
6993
+ * used by weekly charts
6994
+ */
6995
+ if (this.chartConfiguration.isTopCaptionVisible != undefined) {
6996
+ //UPDATENAME
6997
+ this.isTopCaptionVisible = this.chartConfiguration.isTopCaptionVisible;
6998
+ }
6999
+ /**
7000
+ * for removing background color so that it can take parents color
7001
+ *
7002
+ */
7003
+ if (this.chartConfiguration.isTransparentBackground != undefined) {
7004
+ this.isTransparentBackground =
7005
+ this.chartConfiguration.isTransparentBackground;
7006
+ }
7007
+ /**
7008
+ * format data values based on configuration received
7009
+ */
7010
+ if (this.chartConfiguration.textFormatter != undefined) {
7011
+ formatFromBackend = ChartHelper.dataValueFormatter(this.chartConfiguration.textFormatter);
7012
+ formatForHugeNumbers = ChartHelper.dataValueFormatter('.2s');
7013
+ }
7014
+ var outerContainer = chartContainer
6812
7015
  .append('div')
6813
- .attr('id', this.uniqueId)
7016
+ .attr('id', self.uniqueId)
6814
7017
  .attr('class', 'outer-container')
6815
7018
  .style('width', '100%')
6816
- .style('height', dimensions.height)
7019
+ .style('height', height)
6817
7020
  .style('overflow-x', 'hidden')
6818
7021
  .style('padding-left', `${margin.left}px`)
6819
7022
  .style('margin-left', '10px')
6820
- .style('padding-right', `${this.CONSTANTS.RIGHT_SVG_WIDTH}px`);
6821
- const svgYAxisLeft = outerContainer
7023
+ .style('padding-right', `${rightSvgWidth}px`);
7024
+ var svgYAxisLeft = outerContainer
6822
7025
  .append('svg')
6823
7026
  .attr('width', '80')
6824
- .attr('height', dimensions.height + margin.top + margin.bottom)
7027
+ .attr('height', height + margin.top + margin.bottom)
6825
7028
  .style('position', 'absolute')
6826
7029
  .style('left', '0')
6827
7030
  .style('z-index', 1)
6828
7031
  .append('g')
6829
- .attr('transform', `translate(${margin.left + 10},${margin.top})`);
6830
- const svgYAxisRight = outerContainer
7032
+ .attr('transform', 'translate(' + (margin.left + 10) + ',' + margin.top + ')');
7033
+ var svgYAxisRight = outerContainer
6831
7034
  .append('svg')
6832
- .attr('width', this.CONSTANTS.RIGHT_SVG_WIDTH)
6833
- .attr('height', dimensions.height + margin.top + margin.bottom)
7035
+ .attr('width', rightSvgWidth)
7036
+ .attr('height', height + margin.top + margin.bottom)
6834
7037
  .style('position', 'absolute')
6835
7038
  .style('right', '2px')
6836
7039
  .style('z-index', 1)
6837
7040
  .append('g')
6838
- .attr('transform', `translate(0,${margin.top})`);
6839
- const innerContainer = outerContainer
7041
+ .attr('transform', 'translate(' + 0 + ',' + margin.top + ')');
7042
+ var innerContainer = outerContainer
6840
7043
  .append('div')
6841
7044
  .attr('class', 'inner-container')
6842
7045
  .style('width', '100%')
6843
7046
  .style('overflow-x', 'auto');
6844
- const svg = innerContainer
7047
+ // Calculate bar width and padding for mobile to avoid overlap and add space between bars
7048
+ let barWidth;
7049
+ let barPadding = 12; // px, space between bars on mobile
7050
+ let requiredSvgWidth;
7051
+ if (isMobile) {
7052
+ // Use a minimum width per bar and add padding between bars
7053
+ const minBarWidth = 32; // px, can adjust as needed
7054
+ barWidth = minBarWidth;
7055
+ requiredSvgWidth = Math.max(width - rightSvgWidth, (barWidth + barPadding) * data.length + leftAndRightSpaces * 2 + rightSvgWidth - barPadding // no padding after last bar
7056
+ );
7057
+ innerContainer.style('overflow-x', 'auto');
7058
+ }
7059
+ else {
7060
+ barWidth = Math.max(40, (width - rightSvgWidth - leftAndRightSpaces * 2) / data.length);
7061
+ barPadding = 0;
7062
+ requiredSvgWidth = width - rightSvgWidth;
7063
+ }
7064
+ var svg = innerContainer
6845
7065
  .append('svg')
6846
- .attr('width', dimensions.requiredSvgWidth)
6847
- .attr('height', dimensions.height + margin.top + margin.bottom + 30)
7066
+ .attr('width', requiredSvgWidth)
7067
+ .attr('height', height + margin.top + margin.bottom + 30)
6848
7068
  .append('g')
6849
- .attr('transform', `translate(0,${margin.top})`);
6850
- return { svg, svgYAxisLeft, svgYAxisRight, innerContainer };
6851
- }
6852
- createScales(data, layers, lineData, dimensions, device) {
6853
- const { width, height, barWidth, barPadding } = dimensions;
6854
- const xScale = d3
7069
+ .attr('transform', 'translate(' + 0 + ',' + margin.top + ')');
7070
+ let stackKey = keyList;
7071
+ var stack = d3
7072
+ .stack()
7073
+ .keys(stackKey)
7074
+ /*.order(d3.stackOrder)*/
7075
+ .offset(d3.stackOffsetNone);
7076
+ var layers = stack(data);
7077
+ data.sort(function (a, b) {
7078
+ return b.total - a.total;
7079
+ });
7080
+ let lineYscale;
7081
+ if (lineData != null) {
7082
+ lineYscale = d3
7083
+ .scaleLinear()
7084
+ .domain([
7085
+ 0,
7086
+ d3.max(lineData, function (d) {
7087
+ return +d.value;
7088
+ }),
7089
+ ])
7090
+ .range([height, 0]);
7091
+ }
7092
+ // Calculate bar width for mobile to avoid overlap
7093
+ // ...barWidth is now calculated above, remove duplicate...
7094
+ var xScale = d3
6855
7095
  .scaleBand()
6856
7096
  .rangeRound([
6857
- this.CONSTANTS.LEFT_RIGHT_SPACES,
6858
- width - this.CONSTANTS.RIGHT_SVG_WIDTH - this.CONSTANTS.LEFT_RIGHT_SPACES
7097
+ leftAndRightSpaces,
7098
+ width - rightSvgWidth - leftAndRightSpaces
6859
7099
  ])
6860
- .domain(data.map(d => d.name).reverse())
6861
- .padding(device.isMobile ? 0.2 : 0.5);
6862
- const xScaleFromOrigin = d3
7100
+ .domain(data.map(function (d) {
7101
+ return d.name;
7102
+ }).reverse())
7103
+ .padding(isMobile ? 0.2 : 0.5);
7104
+ var xScaleFromOrigin = d3
6863
7105
  .scaleBand()
6864
- .rangeRound([width - this.CONSTANTS.RIGHT_SVG_WIDTH, 0])
6865
- .domain(data.map(d => d.name).reverse());
6866
- const yScale = d3.scaleLinear().rangeRound([height, 0]);
6867
- let maxValue = d3.max(layers, (d) => d3.max(d, (d) => d[1]));
6868
- if (maxValue === 0) {
6869
- maxValue = this.chartData.targetLineData
6870
- ? Number(this.chartData.targetLineData.target) + 20
6871
- : 100;
7106
+ .rangeRound([width - rightSvgWidth, 0])
7107
+ .domain(data.map(function (d) {
7108
+ return d.name;
7109
+ }).reverse());
7110
+ // ...existing code...
7111
+ /**
7112
+ * draw second x axis on top
7113
+ */
7114
+ if (self.chartConfiguration.showXaxisTop) {
7115
+ svg
7116
+ .append('g')
7117
+ .attr('class', 'lib-line-axis-text lib-line-x-axis-text x-axis')
7118
+ .attr('style', self.chartConfiguration.xAxisCustomTextStyles)
7119
+ .call(d3.axisBottom(xScale).tickSize(0));
7120
+ svg.selectAll('.x-axis > g > text').attr('class', 'lib-display-hidden');
7121
+ }
7122
+ /**
7123
+ * draw second x axis on top
7124
+ */
7125
+ // if (self.chartConfiguration.showXaxisAtTarget) {
7126
+ // svg
7127
+ // .append('g')
7128
+ // .attr('class', 'lib-line-axis-text lib-line-x-axis-text x-axis')
7129
+ // .attr('style', self.chartConfiguration.xAxisCustomTextStyles)
7130
+ // .call(d3.axisBottom(xScale).tickSize(0));
7131
+ // svg.selectAll('.x-axis > g > text').attr('class', 'lib-display-hidden');
7132
+ // }
7133
+ if (this.chartConfiguration.xAxisGrid) {
7134
+ for (var j = 0; j < this.chartConfiguration.xAxisGrid.length; j++) {
7135
+ svg
7136
+ .append('g')
7137
+ .attr('class', `x${j + 2} axis${j + 2}`)
7138
+ .style('color', 'var(--chart-grid-color)') // Use CSS variable instead of hardcoded
7139
+ .attr('transform', 'translate(0,' + height * this.chartConfiguration.xAxisGrid[j] + ')')
7140
+ .call(d3.axisBottom(xScale).tickSize(0).ticks(5).tickFormat(''))
7141
+ .style('fill', 'var(--chart-text-color)');
7142
+ }
7143
+ }
7144
+ let yScale = d3.scaleLinear().rangeRound([height, 0]);
7145
+ /**
7146
+ * update max vakues so that the vakue wont exceed the max limit
7147
+ * used by weekly charts
7148
+ */
7149
+ var maxValue = d3.max(layers, (d) => d3.max(d, (d) => d[1]));
7150
+ if (maxValue == 0) {
7151
+ if (this.chartData.targetLineData) {
7152
+ maxValue = this.chartData.targetLineData.target + 20;
7153
+ }
7154
+ else {
7155
+ maxValue = 100;
7156
+ }
6872
7157
  }
6873
7158
  if (this.chartConfiguration.customYscale) {
6874
- maxValue *= this.chartConfiguration.customYscale;
7159
+ maxValue = maxValue * this.chartConfiguration.customYscale;
6875
7160
  }
6876
- if (this.chartData.targetLineData && maxValue < Number(this.chartData.targetLineData.target)) {
6877
- const target = Number(this.chartData.targetLineData.target);
6878
- maxValue = maxValue < 10 && target < 10 ? target + 3 : target + 20;
7161
+ if (this.chartData.targetLineData &&
7162
+ maxValue < this.chartData.targetLineData.target) {
7163
+ maxValue =
7164
+ maxValue < 10 && this.chartData.targetLineData.target < 10
7165
+ ? this.chartData.targetLineData.target + 3
7166
+ : this.chartData.targetLineData.target + 20;
6879
7167
  }
6880
7168
  yScale.domain([0, maxValue]).nice();
6881
- let lineYscale = null;
6882
- if (lineData) {
6883
- lineYscale = d3
6884
- .scaleLinear()
6885
- .domain([0, d3.max(lineData, d => +d.value)])
6886
- .range([height, 0]);
6887
- }
6888
- return { xScale, xScaleFromOrigin, yScale, lineYscale };
6889
- }
6890
- createAxes(scales) {
6891
- const xAxis = d3
6892
- .axisBottom(scales.xScale)
7169
+ let xAxis = d3
7170
+ .axisBottom(xScale)
6893
7171
  .tickSize(0)
6894
- .tickFormat(this.chartConfiguration.xAxisLabelFomatter);
6895
- const yAxis = d3
6896
- .axisLeft(scales.yScale)
6897
- .ticks(this.chartConfiguration.numberOfYTicks)
7172
+ .tickFormat(self.chartConfiguration.xAxisLabelFomatter);
7173
+ let yAxis = d3
7174
+ .axisLeft(yScale)
7175
+ .ticks(self.chartConfiguration.numberOfYTicks)
6898
7176
  .tickSize(0)
6899
- .tickFormat(this.chartConfiguration.yAxisLabelFomatter);
6900
- let yLineAxis = null;
6901
- if (scales.lineYscale) {
7177
+ .tickFormat(self.chartConfiguration.yAxisLabelFomatter);
7178
+ let yLineAxis;
7179
+ if (lineYscale != null) {
6902
7180
  yLineAxis = d3
6903
- .axisRight(scales.lineYscale)
6904
- .ticks(this.chartConfiguration.numberOfYTicks)
7181
+ .axisRight(lineYscale)
7182
+ .ticks(self.chartConfiguration.numberOfYTicks)
6905
7183
  .tickSize(0)
6906
- .tickFormat(this.chartConfiguration.yLineAxisLabelFomatter);
7184
+ .tickFormat(self.chartConfiguration.yLineAxisLabelFomatter);
6907
7185
  }
6908
- return { xAxis, yAxis, yLineAxis };
6909
- }
6910
- renderBars(svg, layers, scales, metaData, dimensions, device) {
6911
- const layer = svg
7186
+ /**
7187
+ * between x-axis label used by weekly charts
7188
+ * isXgridBetweenLabels will be undefined for dashboard charts
7189
+ */
7190
+ if (self.chartConfiguration.isXgridBetweenLabels) {
7191
+ svg
7192
+ .append('g')
7193
+ .attr('class', 'grid')
7194
+ .attr('transform', 'translate(' + xScale.bandwidth() / 2 + ',' + height + ')')
7195
+ .call(d3.axisBottom(xScale).tickSize(-height).tickFormat(''))
7196
+ .style('stroke-dasharray', '5 5')
7197
+ .style('color', '#999999')
7198
+ // .style("opacity", "0.5")
7199
+ .call((g) => g.select('.domain').remove());
7200
+ }
7201
+ /**
7202
+ * used to draw y-axis grid
7203
+ */
7204
+ if (self.chartConfiguration.yAxisGrid) {
7205
+ svg
7206
+ .append('g')
7207
+ .attr('class', 'grid')
7208
+ .call(d3
7209
+ .axisLeft(yScale)
7210
+ .ticks(self.chartConfiguration.numberOfYTicks)
7211
+ .tickSize(-width)
7212
+ .tickFormat(''))
7213
+ // Remove hardcoded colors and use CSS variables
7214
+ .style('color', 'var(--chart-grid-color)')
7215
+ .style('opacity', '1');
7216
+ // .call((g) => g.select('.domain').remove());
7217
+ }
7218
+ var layer = svg
6912
7219
  .selectAll('.layer')
6913
7220
  .data(layers)
6914
7221
  .enter()
6915
7222
  .append('g')
6916
7223
  .attr('class', 'layer')
6917
- .style('fill', (d) => metaData.colors[d.key]);
6918
- const rect = layer
7224
+ .style('fill', function (d, i) {
7225
+ return metaData.colors[d.key];
7226
+ });
7227
+ var rect = layer
6919
7228
  .selectAll('rect')
6920
- .data((d) => d)
7229
+ .data(function (d) {
7230
+ return d;
7231
+ })
6921
7232
  .enter();
6922
- this.appendRectangles(rect, scales, metaData, dimensions, device);
6923
- this.addInteractions(rect, svg, metaData, scales);
6924
- return rect;
6925
- }
6926
- appendRectangles(rect, scales, metaData, dimensions, device) {
6927
- const { barWidth, barPadding } = dimensions;
6928
- const { xScale, yScale } = scales;
6929
7233
  rect
6930
7234
  .append('rect')
6931
- .on('click', (d) => {
6932
- if (!this.chartData.lineData || this.chartConfiguration.forComparison) {
6933
- if (!metaData.barWithoutClick?.includes(d.data.name.toLowerCase())) {
6934
- this.handleClick(d.data.name);
6935
- }
7235
+ .on('click', function (d) {
7236
+ if (!lineData || self.chartConfiguration.forComparison) {
7237
+ if (!metaData.barWithoutClick ||
7238
+ !metaData.barWithoutClick.length ||
7239
+ !metaData.barWithoutClick.includes(d.data.name.toLowerCase()))
7240
+ self.handleClick(d.data.name);
6936
7241
  }
6937
7242
  })
6938
- .attr('y', (d) => {
7243
+ .attr('y', function (d) {
6939
7244
  if (!isNaN(d[0]) && !isNaN(d[1])) {
6940
7245
  const actualHeight = yScale(d[0]) - yScale(d[1]);
6941
7246
  return actualHeight < 3 ? yScale(d[0]) - 3 : yScale(d[1]);
6942
7247
  }
6943
7248
  return 0;
6944
7249
  })
6945
- .attr('x', (d, i) => {
6946
- if (device.isMobile) {
6947
- return this.CONSTANTS.LEFT_RIGHT_SPACES + i * (barWidth + barPadding);
7250
+ .attr('x', function (d, i) {
7251
+ if (isMobile) {
7252
+ // On mobile, position bars with padding
7253
+ return leftAndRightSpaces + i * (barWidth + barPadding);
6948
7254
  }
6949
- if (!this.chartConfiguration.isMultiChartGridLine) {
7255
+ if (self.chartConfiguration.isMultiChartGridLine == undefined) {
6950
7256
  return xScale(d.data.name);
6951
7257
  }
6952
- if (this.chartConfiguration.isDrilldownChart && this.chartData.data.length <= 3) {
6953
- return xScale(d.data.name) + xScale.bandwidth() / 2 - 35;
7258
+ else {
7259
+ if (self.chartConfiguration.isDrilldownChart &&
7260
+ self.chartData.data.length <= 3) {
7261
+ return xScale(d.data.name) + xScale.bandwidth() / 2 - 35;
7262
+ }
7263
+ return xScale(d.data.name) + xScale.bandwidth() * 0.1;
6954
7264
  }
6955
- return xScale(d.data.name) + xScale.bandwidth() * 0.1;
6956
7265
  })
6957
- .attr('height', (d) => {
7266
+ .attr('height', function (d) {
6958
7267
  if (!isNaN(d[0]) && !isNaN(d[1])) {
6959
7268
  const actualHeight = yScale(d[0]) - yScale(d[1]);
6960
7269
  return actualHeight < 3 ? 3 : actualHeight;
6961
7270
  }
6962
7271
  return 0;
6963
7272
  })
6964
- .attr('width', (d) => {
6965
- if (device.isMobile)
7273
+ .attr('width', function (d) {
7274
+ // Use calculated barWidth for mobile, otherwise scale
7275
+ if (isMobile) {
6966
7276
  return barWidth;
6967
- if (!this.chartConfiguration.isMultiChartGridLine)
6968
- return xScale.bandwidth();
6969
- if (this.chartConfiguration.isDrilldownChart && this.chartData.data.length <= 3) {
6970
- return 70;
6971
7277
  }
6972
- return xScale.bandwidth() * 0.8;
7278
+ return self.chartConfiguration.isMultiChartGridLine == undefined
7279
+ ? xScale.bandwidth()
7280
+ : self.chartConfiguration.isDrilldownChart &&
7281
+ self.chartData.data.length <= 3
7282
+ ? 70
7283
+ : xScale.bandwidth() * 0.8;
6973
7284
  })
6974
- .style('cursor', (d) => {
7285
+ // .style('cursor', 'pointer');
7286
+ .style('cursor', function (d) {
6975
7287
  if (metaData.hasDrillDown) {
6976
- if (metaData.barWithoutClick?.includes(d.data.name.toLowerCase())) {
7288
+ if (metaData.barWithoutClick.length > 0 &&
7289
+ metaData.barWithoutClick.includes(d.data.name.toLowerCase())) {
6977
7290
  return 'default';
6978
7291
  }
6979
7292
  return 'pointer';
6980
7293
  }
6981
- return 'default';
7294
+ else
7295
+ return 'default';
6982
7296
  })
6983
- .style('fill', (d) => this.getBarColor(d, metaData));
6984
- }
6985
- getBarColor(d, metaData) {
6986
- if (!isNaN(d[0]) &&
6987
- !isNaN(d[1]) &&
6988
- this.chartData.targetLineData &&
6989
- parseFloat(d[1]) - parseFloat(d[0]) >= parseFloat(String(this.chartData.targetLineData.target))) {
6990
- return this.chartData.targetLineData.barAboveTargetColor || metaData.colors[d.key];
6991
- }
6992
- return metaData.colors[d.key];
6993
- }
6994
- addInteractions(rect, svg, metaData, scales) {
6995
- rect
6996
- .selectAll('rect')
6997
- .on('mouseenter', (d) => this.handleMouseOver(d, svg, metaData, scales))
6998
- .on('mouseout', (d) => this.handleMouseOut(svg, metaData));
6999
- }
7000
- handleMouseOver(d, svg, metaData, scales) {
7001
- if (!this.chartConfiguration.displayTitleOnTop)
7002
- return;
7003
- svg.selectAll('rect')
7004
- .filter((data) => data === d)
7005
- .style('fill', (d) => this.getHoverColor(d, metaData));
7006
- this.displayTooltip(d, svg, metaData, scales);
7007
- }
7008
- getHoverColor(d, metaData) {
7009
- if (!isNaN(d[0]) &&
7010
- !isNaN(d[1]) &&
7011
- this.chartData.targetLineData &&
7012
- parseFloat(d[1]) - parseFloat(d[0]) >= parseFloat(String(this.chartData.targetLineData.target))) {
7013
- return this.chartData.targetLineData.barAboveTargetHoverColor ||
7014
- this.chartData.targetLineData.barAboveTargetColor ||
7015
- metaData.colors[d.key];
7016
- }
7017
- return metaData.hoverColor || metaData.colors[d.key];
7018
- }
7019
- displayTooltip(d, svg, metaData, scales) {
7020
- const { xScale, yScale } = scales;
7021
- const value = d[1] - d[0];
7022
- if (isNaN(value))
7023
- return;
7024
- const width = /week/i.test(d.data.name) && /\d{4}-\d{2}-\d{2}/.test(d.data.name)
7025
- ? '250px'
7026
- : xScale.bandwidth() + this.CONSTANTS.LEFT_RIGHT_SPACES * 2 > 180
7027
- ? '180px'
7028
- : xScale.bandwidth() + this.CONSTANTS.LEFT_RIGHT_SPACES * 2;
7029
- svg
7030
- .append('foreignObject')
7031
- .attr('x', this.calculateTooltipX(d, xScale, width))
7032
- .attr('class', 'lib-verticalstack-title-ontop')
7033
- .attr('y', yScale(d[1]) - 51)
7034
- .attr('width', width)
7035
- .attr('height', 40)
7036
- .append('xhtml:div')
7037
- .attr('class', 'title')
7038
- .style('z-index', 99)
7039
- .html(this.generateTooltipHtml(d, metaData, value));
7040
- }
7041
- calculateTooltipX(d, xScale, width) {
7042
- const bandwidth = xScale.bandwidth();
7043
- const numericWidth = typeof width === 'string' ? parseInt(width) : width;
7044
- if (bandwidth + this.CONSTANTS.LEFT_RIGHT_SPACES * 2 > 180) {
7045
- return xScale(d.data.name) - this.CONSTANTS.LEFT_RIGHT_SPACES +
7046
- (bandwidth + this.CONSTANTS.LEFT_RIGHT_SPACES * 2 - 180) / 2;
7047
- }
7048
- return xScale(d.data.name) - this.CONSTANTS.LEFT_RIGHT_SPACES;
7049
- }
7050
- generateTooltipHtml(d, metaData, value) {
7051
- if (value === 0)
7052
- return '<span class="title-top-text">0</span>';
7053
- const dataType = metaData.dataType || '';
7054
- const name = d.data.name ? `<span class="title-bar-name">${d.data.name}</span>` : '';
7055
- const valueText = metaData.unit
7056
- ? `${metaData.unit}${value} ${dataType}`
7057
- : `${value} ${dataType}`;
7058
- return `${name}<span class="title-top-text">${valueText}</span>`;
7059
- }
7060
- handleMouseOut(svg, metaData) {
7061
- if (!this.chartConfiguration.displayTitleOnTop)
7062
- return;
7063
- svg.selectAll('rect')
7064
- .style('fill', (d) => this.getBarColor(d, metaData));
7065
- svg.selectAll('.lib-verticalstack-title-ontop').remove();
7066
- }
7067
- renderAxisLabels(svg, svgYAxisLeft, metaData, dimensions, margin) {
7068
- if (metaData.yLabel) {
7069
- this.addYAxisLabel(svgYAxisLeft, metaData.yLabel, dimensions.height, margin);
7070
- }
7071
- if (metaData.xLabel) {
7072
- this.addXAxisLabel(svg, metaData.xLabel, dimensions.width, dimensions.height, margin);
7073
- }
7074
- }
7075
- addYAxisLabel(svgYAxisLeft, label, height, margin) {
7076
- const isria = this.customChartConfiguration?.isRia;
7077
- const isAcronym = this.isAcronymLabel(label);
7078
- const yPosition = isria ? -margin.left / 2 - 30 : -margin.left / 2 - 40;
7079
- svgYAxisLeft.selectAll('.lib-axis-group-label, .lib-ylabel-drilldowncharts, .lib-ylabel-weeklyCharts').remove();
7080
- svgYAxisLeft
7081
- .append('text')
7082
- .attr('class', this.getYAxisLabelClass())
7083
- .attr('style', this.chartConfiguration.yAxisCustomlabelStyles)
7084
- .attr('transform', 'rotate(-90)')
7085
- .attr('y', yPosition)
7086
- .attr('x', -height / 2)
7087
- .attr('dy', '1em')
7088
- .style('text-anchor', 'middle')
7089
- .style('fill', 'var(--chart-text-color)')
7090
- .text(isAcronym ? label.toUpperCase() : label.toLowerCase())
7091
- .style('text-transform', isAcronym ? 'none' : 'capitalize');
7092
- }
7093
- addXAxisLabel(svg, label, width, height, margin) {
7094
- const isria = this.customChartConfiguration?.isRia;
7095
- const isAcronym = this.isAcronymLabel(label);
7096
- const xPosition = isria
7097
- ? height + margin.top + margin.bottom
7098
- : height + margin.top + margin.bottom + 10;
7099
- svg
7100
- .append('text')
7101
- .attr('class', this.getXAxisLabelClass())
7102
- .attr('style', this.chartConfiguration.xAxisCustomlabelStyles)
7103
- .attr('transform', `translate(${width / 2},${xPosition})`)
7104
- .style('text-anchor', 'middle')
7105
- .style('fill', 'var(--chart-text-color)')
7106
- .text(isAcronym ? label.toUpperCase() : label.toLowerCase())
7107
- .style('text-transform', isAcronym ? 'none' : 'capitalize');
7108
- }
7109
- isAcronymLabel(label) {
7110
- const cleanLabel = label.replace(/[^A-Za-z]/g, '');
7111
- return (label.length <= 4 && /^[A-Z]+$/.test(label)) ||
7112
- (label === label.toUpperCase() && /[A-Z]/.test(label));
7113
- }
7114
- getYAxisLabelClass() {
7115
- let baseClass = 'lib-axis-group-label font-size-1';
7116
- if (this.chartConfiguration.isDrilldownChart) {
7117
- return `${baseClass} lib-ylabel-drilldowncharts`;
7118
- }
7119
- if (this.chartConfiguration.isMultiChartGridLine !== undefined) {
7120
- return `${baseClass} lib-ylabel-weeklyCharts`;
7121
- }
7122
- return `${baseClass} lib-axis-waterfall-label`;
7123
- }
7124
- getXAxisLabelClass() {
7125
- let baseClass = 'lib-axis-group-label font-size-1';
7126
- if (this.chartConfiguration.isDrilldownChart) {
7127
- return `${baseClass} lib-xlabel-drilldowncharts`;
7128
- }
7129
- if (this.chartConfiguration.isMultiChartGridLine !== undefined) {
7130
- return `${baseClass} lib-xlabel-weeklyCharts`;
7131
- }
7132
- return `${baseClass} lib-axis-waterfall-label`;
7133
- }
7134
- applyConfigurationFlags() {
7135
- if (this.chartConfiguration.isHeaderVisible !== undefined) {
7136
- this.isHeaderVisible = this.chartConfiguration.isHeaderVisible;
7297
+ .style('fill', function (d) {
7298
+ if (!isNaN(d[0]) &&
7299
+ !isNaN(d[1]) &&
7300
+ self.chartData.targetLineData &&
7301
+ parseFloat(d[1]) - parseFloat(d[0]) >=
7302
+ parseFloat(self.chartData.targetLineData.target))
7303
+ return self.chartData?.targetLineData?.barAboveTargetColor;
7304
+ return metaData.colors[d.key];
7305
+ });
7306
+ /**
7307
+ * do not show valus on hover as its alreay dislayed
7308
+ */
7309
+ if (!this.isCC && !self.chartConfiguration.isMultiChartGridLine) {
7310
+ rect
7311
+ .append('svg:title') // TITLE APPENDED HERE
7312
+ .text(function (d) {
7313
+ return d[1] - d[0];
7314
+ });
7137
7315
  }
7138
- if (this.chartConfiguration.isTopCaptionVisible !== undefined) {
7139
- this.isTopCaptionVisible = this.chartConfiguration.isTopCaptionVisible;
7140
- }
7141
- if (this.chartConfiguration.isTransparentBackground !== undefined) {
7142
- this.isTransparentBackground = this.chartConfiguration.isTransparentBackground;
7316
+ if (this.isCC) {
7317
+ rect
7318
+ .append('text')
7319
+ .attr('x', function (d) {
7320
+ return xScale(d.data.name);
7321
+ })
7322
+ .attr('text-anchor', function (d) {
7323
+ if (!d[0]) {
7324
+ return 'end';
7325
+ }
7326
+ else {
7327
+ return 'start';
7328
+ }
7329
+ })
7330
+ .attr('class', 'verticalbar__text')
7331
+ .attr('y', function (d) {
7332
+ if (!d[0]) {
7333
+ return yScale(d[1]);
7334
+ }
7335
+ else {
7336
+ return yScale(d[1]) - 7;
7337
+ }
7338
+ })
7339
+ // .attr("y", function (d) { return yScale(d[0]) - yScale(d[1]); })
7340
+ .attr('dy', function (d) {
7341
+ return d.class;
7342
+ })
7343
+ .text(function (d) {
7344
+ if (!d[0]) {
7345
+ if (!isNaN(d[1] - d[0])) {
7346
+ return Math.round((d[1] - d[0]) * 100) / 100;
7347
+ }
7348
+ else
7349
+ return;
7350
+ }
7351
+ else {
7352
+ if (!isNaN(d[1])) {
7353
+ return Math.round(d[1] * 100) / 100;
7354
+ }
7355
+ else
7356
+ return;
7357
+ }
7358
+ });
7143
7359
  }
7144
- }
7145
- initializeStackedChart() {
7146
- const device = this.getDeviceConfig();
7147
- this.configureResponsiveSettings(device);
7148
- this.mergeConfigurations();
7149
- this.applyConfigurationFlags();
7150
- const data = this.chartData.data;
7151
- const metaData = this.prepareMetaData(this.chartData.metaData);
7152
- const lineData = this.chartData.lineData;
7153
- const colors = metaData.colors;
7154
- const keyList = metaData.keyList;
7155
- const chartContainer = d3.select(this.containerElt.nativeElement);
7156
- const verticalstackedcontainer = d3.select(this.verticalstackedcontainerElt.nativeElement);
7157
- const margin = this.chartConfiguration.margin;
7158
- const dimensions = this.calculateDimensions(chartContainer, verticalstackedcontainer, margin, device, data.length);
7159
- const { svg, svgYAxisLeft, svgYAxisRight } = this.createSvgContainers(chartContainer, dimensions, margin);
7160
- // Create stack and layers
7161
- const stack = d3.stack().keys(keyList).offset(d3.stackOffsetNone);
7162
- const layers = stack(data);
7163
- data.sort((a, b) => b.total - a.total);
7164
- const scales = this.createScales(data, layers, lineData, dimensions, device);
7165
- const axes = this.createAxes(scales);
7166
- // Render chart elements
7167
- this.renderGrids(svg, scales, dimensions);
7168
- const rect = this.renderBars(svg, layers, scales, metaData, dimensions, device);
7169
- this.renderAxes(svg, svgYAxisLeft, svgYAxisRight, axes, scales, dimensions, device, data);
7170
- this.renderAxisLabels(svg, svgYAxisLeft, metaData, dimensions, margin);
7171
- this.renderTargetLine(svg, svgYAxisRight, scales, dimensions, metaData);
7172
- this.renderDataLabels(rect, scales, metaData, dimensions);
7173
- this.renderLineChart(svg, lineData, scales, colors, metaData);
7174
- }
7175
- renderGrids(svg, scales, dimensions) {
7176
- if (this.chartConfiguration.isXgridBetweenLabels) {
7360
+ /**
7361
+ svg
7362
+ .append('foreignObject')
7363
+ .attr('transform', 'translate(' + 0 + ',' + (yZero - 25) + ')')
7364
+ .attr('width', width)
7365
+ .attr('height', 30)
7366
+ .append('xhtml:div')
7367
+ .attr('class', 'target-display')
7368
+ .style('color', this.chartData.targetLineData.color)
7369
+ */
7370
+ /**
7371
+ * on hover, display title on top
7372
+ */
7373
+ function handleMouseOver(d, i) {
7374
+ if (!self.chartConfiguration.displayTitleOnTop) {
7375
+ return;
7376
+ }
7177
7377
  svg
7178
- .append('g')
7179
- .attr('class', 'grid')
7180
- .attr('transform', `translate(${scales.xScale.bandwidth() / 2},${dimensions.height})`)
7181
- .call(d3.axisBottom(scales.xScale).tickSize(-dimensions.height).tickFormat(''))
7182
- .style('stroke-dasharray', '5 5')
7183
- .style('color', '#999999')
7184
- .call((g) => g.select('.domain').remove());
7185
- }
7186
- if (this.chartConfiguration.yAxisGrid) {
7378
+ .selectAll('rect')
7379
+ .filter(function (data) {
7380
+ return data == d;
7381
+ })
7382
+ .style('fill', function (d) {
7383
+ if (!isNaN(d[0]) &&
7384
+ !isNaN(d[1]) &&
7385
+ self.chartData.targetLineData &&
7386
+ parseFloat(d[1]) - parseFloat(d[0]) >=
7387
+ parseFloat(self.chartData.targetLineData.target))
7388
+ return self.chartData.targetLineData.barAboveTargetHoverColor
7389
+ ? self.chartData.targetLineData.barAboveTargetHoverColor
7390
+ : self.chartData?.targetLineData?.barAboveTargetColor
7391
+ ? self.chartData?.targetLineData?.barAboveTargetColor
7392
+ : '';
7393
+ return metaData.hoverColor ? metaData.hoverColor : '';
7394
+ });
7187
7395
  svg
7188
- .append('g')
7189
- .attr('class', 'grid')
7190
- .call(d3
7191
- .axisLeft(scales.yScale)
7192
- .ticks(this.chartConfiguration.numberOfYTicks)
7193
- .tickSize(-dimensions.width)
7194
- .tickFormat(''))
7195
- .style('color', 'var(--chart-grid-color)')
7196
- .style('opacity', '1');
7396
+ .append('foreignObject')
7397
+ .attr('x', function () {
7398
+ if (xScale.bandwidth() + leftAndRightSpaces * 2 > 180) {
7399
+ return (xScale(d.data.name) -
7400
+ leftAndRightSpaces +
7401
+ (xScale.bandwidth() + leftAndRightSpaces * 2 - 180) / 2);
7402
+ }
7403
+ return xScale(d.data.name) - leftAndRightSpaces;
7404
+ })
7405
+ .attr('class', 'lib-verticalstack-title-ontop')
7406
+ .attr('y', function () {
7407
+ // Increase the gap between the bar and the tooltip (was -1 - 40)
7408
+ return yScale(d[1]) - 1 - 50; // 10px more gap
7409
+ })
7410
+ .attr('dy', function () {
7411
+ return d.class;
7412
+ })
7413
+ .attr('width', function () {
7414
+ if (d.data.name && /week/i.test(d.data.name) && /\d{4}-\d{2}-\d{2}/.test(d.data.name)) {
7415
+ return '250px'; // increase for week + date
7416
+ }
7417
+ if (xScale.bandwidth() + leftAndRightSpaces * 2 > 180) {
7418
+ return '180px';
7419
+ }
7420
+ return xScale.bandwidth() + leftAndRightSpaces * 2;
7421
+ })
7422
+ .attr('height', 40)
7423
+ .append('xhtml:div')
7424
+ .attr('class', 'title')
7425
+ .style('z-index', 99)
7426
+ .html(function () {
7427
+ // Tooltip content without any arrow mark
7428
+ if (!isNaN(d[1] - d[0])) {
7429
+ if (d[1] - d[0] === 0) {
7430
+ return '<span class="title-top-text">0</span>';
7431
+ }
7432
+ var dataType = metaData.dataType ? metaData.dataType : '';
7433
+ var desiredText = '';
7434
+ // Always show the full x-axis label (category name) in the tooltip
7435
+ desiredText =
7436
+ '<span class="title-bar-name">' +
7437
+ (d.data.name ? d.data.name : '') +
7438
+ '</span>';
7439
+ desiredText += metaData.unit
7440
+ ? '<span class="title-top-text">' +
7441
+ metaData.unit +
7442
+ (d[1] - d[0]) + ' ' +
7443
+ dataType +
7444
+ '</span>'
7445
+ : '<span class="title-top-text">' +
7446
+ (d[1] - d[0]) + ' ' +
7447
+ dataType +
7448
+ '</span>';
7449
+ // No arrow mark or arrow HTML/CSS in tooltip
7450
+ return desiredText;
7451
+ }
7452
+ else
7453
+ return;
7454
+ });
7197
7455
  }
7198
- if (this.chartConfiguration.xAxisGrid) {
7199
- for (let j = 0; j < this.chartConfiguration.xAxisGrid.length; j++) {
7456
+ function handleMouseOut(d, i) {
7457
+ if (!self.chartConfiguration.displayTitleOnTop) {
7458
+ return;
7459
+ }
7460
+ // svg.selectAll('rect').style('fill', metaData.colors[d.key]);
7461
+ svg.selectAll('rect').style('fill', function (d) {
7462
+ if (!isNaN(d[0]) &&
7463
+ !isNaN(d[1]) &&
7464
+ self.chartData.targetLineData &&
7465
+ parseFloat(d[1]) - parseFloat(d[0]) >=
7466
+ parseFloat(self.chartData.targetLineData.target))
7467
+ return self.chartData?.targetLineData?.barAboveTargetColor;
7468
+ return metaData.colors[d.key];
7469
+ });
7470
+ svg.selectAll('.lib-verticalstack-title-ontop').remove();
7471
+ }
7472
+ /**
7473
+ * used to show value on top of the bars
7474
+ * need to be used by bar charts only(one bar should contain one value)
7475
+ * used by weekly charts
7476
+ */
7477
+ if (this.chartConfiguration.showTotalOnTop != undefined) {
7478
+ rect
7479
+ .append('text')
7480
+ .attr('x', function (d) {
7481
+ return xScale(d.data.name) + xScale.bandwidth() / 2;
7482
+ })
7483
+ .attr('class', 'lib-verticalstack-labels-ontop-weklycharts')
7484
+ .attr('y', function (d) {
7485
+ return yScale(d[1]) - 3;
7486
+ })
7487
+ .attr('dy', function (d) {
7488
+ return d.class;
7489
+ })
7490
+ .text(function (d) {
7491
+ if (!isNaN(d[1] - d[0])) {
7492
+ if (d[1] - d[0] == 0) {
7493
+ return;
7494
+ }
7495
+ if (d[1] - d[0] <= 999)
7496
+ return metaData.unit
7497
+ ? metaData.unit + formatFromBackend(d[1] - d[0])
7498
+ : formatFromBackend(d[1] - d[0]);
7499
+ else
7500
+ return metaData.unit
7501
+ ? metaData.unit + formatForHugeNumbers(d[1] - d[0])
7502
+ : formatForHugeNumbers(d[1] - d[0]);
7503
+ }
7504
+ else
7505
+ return;
7506
+ });
7507
+ }
7508
+ /**
7509
+ * used to show angled values on top of the bars
7510
+ * used by weekly charts
7511
+ */
7512
+ if (this.chartConfiguration.showAngledLabels != undefined) {
7513
+ rect
7514
+ .append('text')
7515
+ .attr('x', 0)
7516
+ .attr('fill', function (d, i) {
7517
+ return metaData.colors[d.key];
7518
+ })
7519
+ .attr('class', 'lib-data-labels-angled-weeklycharts')
7520
+ .attr('y', 0)
7521
+ .attr('dy', function (d) {
7522
+ return d.class;
7523
+ })
7524
+ .text(function (d) {
7525
+ if (!isNaN(d[1] - d[0]) && d[1] - d[0] > 0) {
7526
+ if (d[1] - d[0] <= 999)
7527
+ return metaData.unit
7528
+ ? metaData.unit + formatFromBackend(d[1] - d[0])
7529
+ : formatFromBackend(d[1] - d[0]);
7530
+ else
7531
+ return metaData.unit + formatForHugeNumbers(d[1] - d[0]);
7532
+ }
7533
+ else
7534
+ return;
7535
+ })
7536
+ .attr('transform', function (d) {
7537
+ if (!isNaN(d[1] - d[0]) && d[1] - d[0] > 0) {
7538
+ var total = 0;
7539
+ var incrementer = 1;
7540
+ metaData.keyList.forEach((key) => {
7541
+ if (d.data[key])
7542
+ total = total + d.data[key];
7543
+ else
7544
+ incrementer = 2;
7545
+ });
7546
+ if (tempObjectHolder[d.data.name] == undefined) {
7547
+ tempObjectHolder[d.data.name] = 1;
7548
+ }
7549
+ else {
7550
+ tempObjectHolder[d.data.name] =
7551
+ tempObjectHolder[d.data.name] + incrementer;
7552
+ }
7553
+ switch (tempObjectHolder[d.data.name]) {
7554
+ case 1:
7555
+ return ('translate(' +
7556
+ (xScale(d.data.name) + xScale.bandwidth() / 3) +
7557
+ ',' +
7558
+ (yScale(total) - 3) +
7559
+ ') rotate(270)');
7560
+ case 2:
7561
+ return ('translate(' +
7562
+ (xScale(d.data.name) + xScale.bandwidth() / 2 + 2) +
7563
+ ',' +
7564
+ (yScale(total) - 3) +
7565
+ ') rotate(270)');
7566
+ default:
7567
+ return ('translate(' +
7568
+ (xScale(d.data.name) + (xScale.bandwidth() * 3) / 4) +
7569
+ ',' +
7570
+ (yScale(total) - 3) +
7571
+ ') rotate(270)');
7572
+ }
7573
+ }
7574
+ return 'rotate(0)';
7575
+ });
7576
+ }
7577
+ if (this.chartConfiguration.isMultiChartGridLine == undefined) {
7578
+ if (isMobile) {
7579
+ // Custom x-axis label rendering for mobile: evenly distribute under each bar
7580
+ svg.selectAll('.custom-x-label').remove();
7581
+ data.forEach(function (d, i) {
7582
+ const xVal = leftAndRightSpaces + i * (barWidth + barPadding) + barWidth / 2;
7583
+ svg.append('text')
7584
+ .attr('class', 'custom-x-label')
7585
+ .attr('x', 0)
7586
+ .attr('y', height + 18)
7587
+ .attr('text-anchor', 'middle')
7588
+ .attr('transform', 'translate(' + (xVal + 20) + ',0)') // current value + 20
7589
+ .style('font-size', '10px')
7590
+ .style('fill', 'var(--chart-text-color)')
7591
+ .style('writing-mode', 'sideways-lr') // writing mode for mobile
7592
+ .text(d.name.substring(0, 3));
7593
+ });
7594
+ }
7595
+ else {
7200
7596
  svg
7201
7597
  .append('g')
7202
- .attr('class', `x${j + 2} axis${j + 2}`)
7203
- .style('color', 'var(--chart-grid-color)')
7204
- .attr('transform', `translate(0,${dimensions.height * this.chartConfiguration.xAxisGrid[j]})`)
7205
- .call(d3.axisBottom(scales.xScale).tickSize(0).ticks(5).tickFormat(''))
7206
- .style('fill', 'var(--chart-text-color)');
7598
+ .attr('transform', 'translate(0,' + height + ')')
7599
+ .attr('class', 'lib-stacked-x-axis-text')
7600
+ .call(xAxis)
7601
+ .selectAll('text')
7602
+ .style('fill', 'var(--chart-text-color)')
7603
+ .style('font-size', '12px')
7604
+ .attr('text-anchor', 'middle')
7605
+ .attr('dx', '0')
7606
+ .attr('dy', '0.71em')
7607
+ .attr('transform', null)
7608
+ .text(function (d) {
7609
+ return d;
7610
+ });
7207
7611
  }
7208
- }
7209
- }
7210
- renderAxes(svg, svgYAxisLeft, svgYAxisRight, axes, scales, dimensions, device, data) {
7211
- if (this.chartConfiguration.showXaxisTop) {
7212
7612
  svg
7213
7613
  .append('g')
7214
- .attr('class', 'lib-line-axis-text lib-line-x-axis-text x-axis')
7215
- .attr('style', this.chartConfiguration.xAxisCustomTextStyles)
7216
- .call(d3.axisBottom(scales.xScale).tickSize(0));
7217
- svg.selectAll('.x-axis > g > text').attr('class', 'lib-display-hidden');
7218
- }
7219
- if (!this.chartConfiguration.isMultiChartGridLine) {
7220
- this.renderStandardAxes(svg, axes, scales, dimensions, device, data);
7614
+ .attr('class', 'lib-stacked-y-axis-text')
7615
+ .attr('style', self.chartConfiguration.yAxisCustomTextStyles)
7616
+ .attr('transform', 'translate(0,0)')
7617
+ .call(yAxis)
7618
+ .selectAll('text')
7619
+ .style('fill', 'var(--chart-text-color)');
7221
7620
  }
7222
7621
  else if (this.chartConfiguration.isDrilldownChart) {
7223
- this.renderDrilldownAxes(svg, svgYAxisLeft, svgYAxisRight, axes, scales, dimensions);
7622
+ svg
7623
+ .append('g')
7624
+ .attr('transform', 'translate(0,' + height + ')')
7625
+ .attr('class', 'lib-stacked-x-axis-text multichart1')
7626
+ .call(xAxis)
7627
+ .style('display', 'none');
7628
+ svgYAxisLeft
7629
+ .append('g')
7630
+ .attr('class', 'lib-yaxis-labels-texts-drilldown yaxis-dashed')
7631
+ .attr('style', self.chartConfiguration.yAxisCustomTextStyles)
7632
+ .attr('transform', 'translate(0,0)')
7633
+ .call(yAxis)
7634
+ .selectAll('text')
7635
+ .style('fill', 'var(--chart-text-color)');
7636
+ svgYAxisRight
7637
+ .append('g')
7638
+ .attr('class', 'lib-yaxis-labels-texts-drilldown yaxis-dashed')
7639
+ .attr('style', self.chartConfiguration.yAxisCustomTextStyles)
7640
+ .attr('transform', 'translate(0,0)')
7641
+ .call(yAxis)
7642
+ .style('display', 'none');
7224
7643
  }
7225
7644
  else {
7226
- this.renderMultiChartAxes(svg, axes, scales, dimensions);
7645
+ svg
7646
+ .append('g')
7647
+ .attr('transform', 'translate(0,' + height + ')')
7648
+ .attr('class', 'lib-stacked-x-axis-text multichart')
7649
+ .attr('transform', 'translate(0,' + height + ')')
7650
+ .call(xAxis)
7651
+ .selectAll('text')
7652
+ .style('fill', 'var(--chart-text-color)');
7653
+ svg
7654
+ .append('g')
7655
+ .attr('class', 'lib-stacked-y-axis-text yaxis-dashed')
7656
+ .attr('style', self.chartConfiguration.yAxisCustomTextStyles)
7657
+ .attr('transform', 'translate(0,0)')
7658
+ .call(yAxis)
7659
+ .selectAll('text')
7660
+ .style('fill', 'var(--chart-text-color)');
7227
7661
  }
7228
- this.applyAxisStyling(svg, svgYAxisLeft, svgYAxisRight);
7229
- this.applyAxisConfigurations(svg, scales, dimensions, data);
7230
- }
7231
- renderStandardAxes(svg, axes, scales, dimensions, device, data) {
7232
- if (device.isMobile) {
7233
- this.renderMobileXAxis(svg, data, dimensions);
7662
+ /**
7663
+ * for existing charts, place xaxis labels nearer to xaxis
7664
+ * used by existing charts
7665
+ */
7666
+ if (this.chartConfiguration.isMultiChartGridLine == undefined) {
7667
+ d3.selectAll('g.lib-stacked-x-axis-text g.tick text').attr('y', function () {
7668
+ if (alternate_text) {
7669
+ alternate_text = false;
7670
+ return long_tick_length + 1;
7671
+ }
7672
+ else {
7673
+ alternate_text = true;
7674
+ return short_tick_length + 1;
7675
+ }
7676
+ });
7234
7677
  }
7235
7678
  else {
7679
+ d3.selectAll('.multichart > g > text').attr('class', 'lib-display-hidden');
7680
+ }
7681
+ /**
7682
+ * based of the flag, hide or show xaxis texts
7683
+ * used by weekly charts
7684
+ */
7685
+ if (this.chartConfiguration.isXaxisLabelHidden != undefined &&
7686
+ this.chartConfiguration.isXaxisLabelHidden) {
7687
+ d3.selectAll('.multichart > g > text').attr('class', 'lib-display-hidden');
7688
+ }
7689
+ else if (this.chartConfiguration.isXaxisLabelHidden != undefined) {
7236
7690
  svg
7237
7691
  .append('g')
7238
- .attr('transform', `translate(0,${dimensions.height})`)
7239
- .attr('class', 'lib-stacked-x-axis-text')
7240
- .call(axes.xAxis)
7241
- .selectAll('text')
7242
- .style('fill', 'var(--chart-text-color)')
7243
- .style('font-size', '12px')
7244
- .attr('text-anchor', 'middle')
7245
- .attr('dx', '0')
7246
- .attr('dy', '0.71em')
7247
- .attr('transform', null);
7692
+ .attr('class', 'x1 axis1')
7693
+ .attr('transform', 'translate(0,' + height + ')')
7694
+ .style('color', '#000')
7695
+ .call(d3.axisBottom(xScale).tickSize(0))
7696
+ .call((g) => g.select('.domain').attr('fill', 'none'));
7697
+ svg
7698
+ .append('g')
7699
+ .attr('class', 'x2 axis2')
7700
+ .attr('transform', 'translate(0,' + height + ')')
7701
+ .style('color', '#000')
7702
+ .call(d3.axisBottom(xScaleFromOrigin).tickSize(0))
7703
+ .call((g) => g.select('.domain').attr('fill', 'none'));
7704
+ svg.selectAll('.axis2 > g > text').attr('class', 'lib-display-hidden');
7705
+ // svg.selectAll('g.x2.axis2 g.tick text').style('display', 'none');
7706
+ svg.selectAll('.x1.axis1 .tick line').attr('y2', function () {
7707
+ if (self.chartConfiguration.hideXaxisTick) {
7708
+ return 0;
7709
+ }
7710
+ /**
7711
+ * isNoAlternateXaxisText is used to prevent x-axis label to be displayed in alternate fashion
7712
+ * for future use
7713
+ */
7714
+ if (alternate_text &&
7715
+ self.chartConfiguration.isNoAlternateXaxisText == undefined) {
7716
+ alternate_text = false;
7717
+ return long_tick_length_bg - 7;
7718
+ }
7719
+ else {
7720
+ alternate_text = true;
7721
+ return short_tick_length_bg - 4;
7722
+ }
7723
+ });
7724
+ /**
7725
+ * reset the flag so that texts also follow the pattern of ticks
7726
+ * used by weekly charts
7727
+ */
7728
+ alternate_text = false;
7729
+ svg
7730
+ .selectAll('g.x1.axis1 g.tick text')
7731
+ // .attr('class', 'lib-xaxis-labels-texts-weeklycharts')
7732
+ .attr('class', function () {
7733
+ if (self.chartConfiguration.isDrilldownChart) {
7734
+ if (data && data.length > 8) {
7735
+ return 'lib-xaxis-labels-texts-drilldown-alt';
7736
+ }
7737
+ return 'lib-xaxis-labels-texts-drilldown';
7738
+ }
7739
+ else
7740
+ return 'lib-xaxis-labels-texts-weeklycharts';
7741
+ })
7742
+ .attr('y', function () {
7743
+ if (alternate_text) {
7744
+ alternate_text = false;
7745
+ return long_tick_length_bg;
7746
+ }
7747
+ else {
7748
+ alternate_text = true;
7749
+ return short_tick_length_bg;
7750
+ }
7751
+ });
7248
7752
  }
7249
- svg
7250
- .append('g')
7251
- .attr('class', 'lib-stacked-y-axis-text')
7252
- .attr('style', this.chartConfiguration.yAxisCustomTextStyles)
7253
- .call(axes.yAxis)
7254
- .selectAll('text')
7255
- .style('fill', 'var(--chart-text-color)');
7256
- }
7257
- renderMobileXAxis(svg, data, dimensions) {
7258
- svg.selectAll('.custom-x-label').remove();
7259
- data.forEach((d, i) => {
7260
- const xVal = this.CONSTANTS.LEFT_RIGHT_SPACES +
7261
- i * (dimensions.barWidth + dimensions.barPadding) +
7262
- dimensions.barWidth / 2;
7753
+ if (self.chartConfiguration.xLabelsOnSameLine) {
7754
+ svg
7755
+ .selectAll('g.x1.axis1 g.tick text')
7756
+ .attr('class', 'lib-xaxis-labels-texts-drilldown')
7757
+ .attr('y', short_tick_length_bg)
7758
+ .text(function (d, i) {
7759
+ if (isMobile) {
7760
+ // If label has more than one word, show only first 3 letters of first word
7761
+ var firstWord = d.split(' ')[0];
7762
+ return firstWord.substring(0, 3);
7763
+ }
7764
+ if (d.trim().indexOf(' ') > -1) {
7765
+ return d.trim().substring(0, d.indexOf(' ')).toLowerCase();
7766
+ }
7767
+ return d.toLowerCase();
7768
+ })
7769
+ .attr('transform', function (d, i) {
7770
+ if (isMobile) {
7771
+ var totalBars = 0;
7772
+ if (this.parentNode && this.parentNode.parentNode) {
7773
+ totalBars = d3.select(this.parentNode.parentNode).selectAll('g.tick').size();
7774
+ }
7775
+ if (totalBars === 2) {
7776
+ return 'translate(0,0)';
7777
+ }
7778
+ else {
7779
+ return 'translate(' + (i * 30) + ',0)';
7780
+ }
7781
+ }
7782
+ return null;
7783
+ });
7263
7784
  svg
7785
+ .selectAll('g.x1.axis1 g.tick')
7264
7786
  .append('text')
7265
- .attr('class', 'custom-x-label')
7266
- .attr('x', 0)
7267
- .attr('y', dimensions.height + 18)
7268
- .attr('text-anchor', 'middle')
7269
- .attr('transform', `translate(${xVal + 20},0)`)
7270
- .style('font-size', '10px')
7271
- .style('fill', 'var(--chart-text-color)')
7272
- .style('writing-mode', 'sideways-lr')
7273
- .text(d.name.substring(0, 3));
7274
- });
7275
- }
7276
- renderDrilldownAxes(svg, svgYAxisLeft, svgYAxisRight, axes, scales, dimensions) {
7277
- svg
7278
- .append('g')
7279
- .attr('transform', `translate(0,${dimensions.height})`)
7280
- .attr('class', 'lib-stacked-x-axis-text multichart1')
7281
- .call(axes.xAxis)
7282
- .style('display', 'none');
7283
- svgYAxisLeft
7284
- .append('g')
7285
- .attr('class', 'lib-yaxis-labels-texts-drilldown yaxis-dashed')
7286
- .attr('style', this.chartConfiguration.yAxisCustomTextStyles)
7287
- .call(axes.yAxis)
7288
- .selectAll('text')
7289
- .style('fill', 'var(--chart-text-color)');
7290
- svgYAxisRight
7291
- .append('g')
7292
- .attr('class', 'lib-yaxis-labels-texts-drilldown yaxis-dashed')
7293
- .attr('style', this.chartConfiguration.yAxisCustomTextStyles)
7294
- .call(axes.yAxis)
7295
- .style('display', 'none');
7296
- }
7297
- renderMultiChartAxes(svg, axes, scales, dimensions) {
7298
- svg
7299
- .append('g')
7300
- .attr('transform', `translate(0,${dimensions.height})`)
7301
- .attr('class', 'lib-stacked-x-axis-text multichart')
7302
- .call(axes.xAxis)
7303
- .selectAll('text')
7304
- .style('fill', 'var(--chart-text-color)');
7305
- svg
7306
- .append('g')
7307
- .attr('class', 'lib-stacked-y-axis-text yaxis-dashed')
7308
- .attr('style', this.chartConfiguration.yAxisCustomTextStyles)
7309
- .call(axes.yAxis)
7310
- .selectAll('text')
7311
- .style('fill', 'var(--chart-text-color)');
7312
- }
7313
- applyAxisStyling(svg, svgYAxisLeft, svgYAxisRight) {
7314
- const styleAxisDomain = (container) => {
7315
- container.selectAll('.domain')
7316
- .style('stroke', 'var(--chart-axis-color)')
7317
- .style('stroke-width', '1px');
7318
- };
7319
- styleAxisDomain(svg);
7320
- styleAxisDomain(svgYAxisLeft);
7321
- styleAxisDomain(svgYAxisRight);
7322
- if (this.chartConfiguration.isYaxisDashed) {
7323
- d3.selectAll('.yaxis-dashed')
7324
- .style('stroke-dasharray', '5 5')
7325
- .style('color', 'var(--chart-grid-color)');
7326
- }
7327
- if (this.chartConfiguration.isXaxisColor) {
7328
- d3.selectAll('.multichart').style('color', this.chartConfiguration.isXaxisColor || 'var(--chart-text-color)');
7329
- }
7330
- }
7331
- applyAxisConfigurations(svg, scales, dimensions, data) {
7332
- if (this.chartConfiguration.isMultiChartGridLine !== undefined) {
7333
- d3.selectAll('.multichart > g > text').attr('class', 'lib-display-hidden');
7787
+ .attr('class', 'lib-xaxis-labels-texts-drilldown')
7788
+ .attr('y', long_tick_length_bg)
7789
+ .attr('fill', 'currentColor')
7790
+ .text(function (d) {
7791
+ // For mobile, do not print the second word at all
7792
+ if (isMobile) {
7793
+ return '';
7794
+ }
7795
+ if (d.trim().indexOf(' ') > -1) {
7796
+ return d.trim().substring(d.indexOf(' '), d.length).toLowerCase();
7797
+ }
7798
+ return '';
7799
+ })
7800
+ .attr('transform', function (d, i) {
7801
+ if (isMobile && i === 0) {
7802
+ return 'translate(20,0)';
7803
+ }
7804
+ return null;
7805
+ });
7334
7806
  }
7335
- if (this.chartConfiguration.isXaxisLabelHidden) {
7336
- d3.selectAll('.multichart > g > text').attr('class', 'lib-display-hidden');
7807
+ /**
7808
+ * hide yaxis values
7809
+ * used by weekly charts
7810
+ */
7811
+ if (this.chartConfiguration.isYaxisLabelHidden != undefined &&
7812
+ this.chartConfiguration.isYaxisLabelHidden) {
7813
+ svg
7814
+ .selectAll('.yaxis-dashed > g > text')
7815
+ .attr('class', 'lib-display-hidden');
7337
7816
  }
7338
- else if (this.chartConfiguration.isXaxisLabelHidden !== undefined) {
7339
- this.renderCustomXAxis(svg, scales, dimensions, data);
7817
+ /** hide y axis labels
7818
+ * config is there for future use
7819
+ */
7820
+ if (this.chartConfiguration.isYaxisHidden != undefined &&
7821
+ this.chartConfiguration.isYaxisHidden) {
7822
+ d3.selectAll('.yaxis-dashed').attr('class', 'lib-display-hidden');
7340
7823
  }
7341
- if (this.chartConfiguration.isYaxisLabelHidden) {
7342
- svg.selectAll('.yaxis-dashed > g > text').attr('class', 'lib-display-hidden');
7824
+ /**
7825
+ * dashed y axis
7826
+ * used by weekly charts
7827
+ */
7828
+ if (this.chartConfiguration.isYaxisDashed != undefined &&
7829
+ this.chartConfiguration.isYaxisDashed) {
7830
+ d3.selectAll('.yaxis-dashed')
7831
+ .style('stroke-dasharray', '5 5')
7832
+ .style('color', 'var(--chart-grid-color)'); // Use CSS variable
7343
7833
  }
7344
- if (this.chartConfiguration.isYaxisHidden) {
7345
- d3.selectAll('.yaxis-dashed').attr('class', 'lib-display-hidden');
7834
+ /**
7835
+ * x axis color
7836
+ * used by weekly charts
7837
+ */
7838
+ if (this.chartConfiguration.isXaxisColor != undefined) {
7839
+ d3.selectAll('.multichart').style('color', this.chartConfiguration.isXaxisColor || 'var(--chart-text-color)');
7346
7840
  }
7347
- if (this.isZoomedOut && data.length > 9) {
7841
+ /**
7842
+ * used to display y label
7843
+ */
7844
+ if (this.isZoomedOut && this.chartData.data.length > 9) {
7348
7845
  svg
7349
7846
  .selectAll('.lib-xaxis-labels-texts-drilldown')
7350
7847
  .attr('transform', 'rotate(-90)')
@@ -7352,272 +7849,219 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7352
7849
  .attr('x', '-5')
7353
7850
  .attr('dy', null);
7354
7851
  }
7355
- }
7356
- renderCustomXAxis(svg, scales, dimensions, data) {
7357
- const device = this.getDeviceConfig();
7358
- svg
7359
- .append('g')
7360
- .attr('class', 'x1 axis1')
7361
- .attr('transform', `translate(0,${dimensions.height})`)
7362
- .style('color', '#000')
7363
- .call(d3.axisBottom(scales.xScale).tickSize(0))
7364
- .call((g) => g.select('.domain').attr('fill', 'none'));
7365
- this.styleCustomXAxisTicks(svg, data, device);
7366
- if (this.chartConfiguration.xLabelsOnSameLine) {
7367
- this.applyXLabelsOnSameLine(svg, device);
7852
+ function styleAxisDomain() {
7853
+ svg.selectAll('.domain')
7854
+ .style('stroke', 'var(--chart-axis-color)')
7855
+ .style('stroke-width', '1px');
7856
+ svgYAxisLeft.selectAll('.domain')
7857
+ .style('stroke', 'var(--chart-axis-color)')
7858
+ .style('stroke-width', '1px');
7859
+ svgYAxisRight.selectAll('.domain')
7860
+ .style('stroke', 'var(--chart-axis-color)')
7861
+ .style('stroke-width', '1px');
7368
7862
  }
7369
- }
7370
- styleCustomXAxisTicks(svg, data, device) {
7371
- let alternateText = false;
7372
- svg.selectAll('.x1.axis1 .tick line').attr('y2', () => {
7373
- if (this.chartConfiguration.hideXaxisTick)
7374
- return 0;
7375
- if (alternateText && !this.chartConfiguration.isNoAlternateXaxisText) {
7376
- alternateText = false;
7377
- return this.CONSTANTS.LONG_TICK_LENGTH_BG - 7;
7378
- }
7379
- alternateText = true;
7380
- return this.CONSTANTS.SHORT_TICK_LENGTH_BG - 4;
7381
- });
7382
- alternateText = false;
7383
- svg
7384
- .selectAll('g.x1.axis1 g.tick text')
7385
- .attr('class', () => {
7386
- if (this.chartConfiguration.isDrilldownChart) {
7387
- return data.length > 8
7388
- ? 'lib-xaxis-labels-texts-drilldown-alt'
7389
- : 'lib-xaxis-labels-texts-drilldown';
7390
- }
7391
- return 'lib-xaxis-labels-texts-weeklycharts';
7392
- })
7393
- .attr('y', () => {
7394
- if (alternateText) {
7395
- alternateText = false;
7396
- return this.CONSTANTS.LONG_TICK_LENGTH_BG;
7397
- }
7398
- alternateText = true;
7399
- return this.CONSTANTS.SHORT_TICK_LENGTH_BG;
7400
- });
7401
- }
7402
- applyXLabelsOnSameLine(svg, device) {
7403
- svg
7404
- .selectAll('g.x1.axis1 g.tick text')
7405
- .attr('class', 'lib-xaxis-labels-texts-drilldown')
7406
- .attr('y', this.CONSTANTS.SHORT_TICK_LENGTH_BG)
7407
- .text((d) => {
7408
- if (device.isMobile) {
7409
- return d.split(' ')[0].substring(0, 3);
7410
- }
7411
- const trimmed = d.trim();
7412
- const spaceIndex = trimmed.indexOf(' ');
7413
- return spaceIndex > -1
7414
- ? trimmed.substring(0, spaceIndex).toLowerCase()
7415
- : trimmed.toLowerCase();
7416
- })
7417
- .attr('transform', function (d, i) {
7418
- if (device.isMobile) {
7419
- const parent = this.parentNode?.parentNode;
7420
- const totalBars = parent ? d3.select(parent).selectAll('g.tick').size() : 0;
7421
- return totalBars === 2 ? 'translate(0,0)' : `translate(${i * 30},0)`;
7863
+ styleAxisDomain();
7864
+ if (metaData.yLabel) {
7865
+ svgYAxisLeft.selectAll('.lib-axis-group-label, .lib-ylabel-drilldowncharts, .lib-ylabel-weeklyCharts').remove();
7866
+ function isAcronym(label) {
7867
+ return (label.length <= 4 && /^[A-Z]+$/.test(label)) || (label === label.toUpperCase() && /[A-Z]/.test(label));
7422
7868
  }
7423
- return null;
7424
- });
7425
- svg
7426
- .selectAll('g.x1.axis1 g.tick')
7427
- .append('text')
7428
- .attr('class', 'lib-xaxis-labels-texts-drilldown')
7429
- .attr('y', this.CONSTANTS.LONG_TICK_LENGTH_BG)
7430
- .attr('fill', 'currentColor')
7431
- .text((d) => {
7432
- if (device.isMobile)
7433
- return '';
7434
- const trimmed = d.trim();
7435
- const spaceIndex = trimmed.indexOf(' ');
7436
- return spaceIndex > -1
7437
- ? trimmed.substring(spaceIndex).toLowerCase()
7438
- : '';
7439
- })
7440
- .attr('transform', (d, i) => {
7441
- return device.isMobile && i === 0 ? 'translate(20,0)' : null;
7442
- });
7443
- }
7444
- renderDataLabels(rect, scales, metaData, dimensions) {
7445
- if (!this.isCC && !this.chartConfiguration.isMultiChartGridLine) {
7446
- rect.append('svg:title').text((d) => d[1] - d[0]);
7447
- }
7448
- if (this.chartConfiguration.showTotalOnTop) {
7449
- this.renderTopLabels(rect, scales, metaData);
7869
+ const yLabelText = metaData.yLabel;
7870
+ const isAcr = isAcronym(yLabelText.replace(/[^A-Za-z]/g, ''));
7871
+ const yPosition = isria ? 0 - margin.left / 2 - 30 : 0 - margin.left / 2 - 40;
7872
+ svgYAxisLeft
7873
+ .append('text')
7874
+ .attr('class', function () {
7875
+ let baseClass = 'lib-axis-group-label font-size-1';
7876
+ if (self.chartConfiguration.isDrilldownChart)
7877
+ return baseClass + ' lib-ylabel-drilldowncharts';
7878
+ if (self.chartConfiguration.isMultiChartGridLine != undefined)
7879
+ return baseClass + ' lib-ylabel-weeklyCharts';
7880
+ return baseClass + ' lib-axis-waterfall-label';
7881
+ })
7882
+ .attr('style', self.chartConfiguration.yAxisCustomlabelStyles)
7883
+ .attr('transform', 'rotate(-90)')
7884
+ .attr('y', yPosition)
7885
+ .attr('x', 0 - height / 2)
7886
+ .attr('dy', '1em')
7887
+ .style('text-anchor', 'middle')
7888
+ .style('fill', 'var(--chart-text-color)')
7889
+ .style('color', 'var(--chart-text-color)')
7890
+ .text(isAcr ? yLabelText.toUpperCase() : yLabelText.toLowerCase())
7891
+ .style('text-transform', isAcr ? 'none' : 'capitalize');
7450
7892
  }
7451
- if (this.chartConfiguration.showAngledLabels) {
7452
- this.renderAngledLabels(rect, scales, metaData);
7893
+ if (this.chartData.targetLineData) {
7894
+ const yZero = yScale(parsedNum);
7895
+ svg
7896
+ .append('line')
7897
+ .attr('x1', 0)
7898
+ .attr('x2', width)
7899
+ .attr('y1', yZero)
7900
+ .attr('y2', yZero)
7901
+ .style('stroke-dasharray', '5 5')
7902
+ .style('stroke', this.chartData.targetLineData.color);
7903
+ // svgYAxisRight
7904
+ // .append('line')
7905
+ // .attr('x1', 0)
7906
+ // .attr('x2', rightSvgWidth)
7907
+ // .attr('y1', yZero)
7908
+ // .attr('y2', yZero)
7909
+ // .style('stroke', this.chartData.targetLineData.color);
7910
+ svgYAxisRight
7911
+ .append('foreignObject')
7912
+ // .attr('transform', 'translate(' + 0 + ',' + (yZero - 30) + ')')
7913
+ .attr('transform', 'translate(' + 0 + ',' + (yZero - 13) + ')')
7914
+ .attr('width', rightSvgWidth)
7915
+ .attr('height', 50)
7916
+ .append('xhtml:div')
7917
+ .attr('class', 'target-display')
7918
+ .style('color', 'var(--chart-text-color)')
7919
+ .html(function (d, i) {
7920
+ let dataTypeTemp = '';
7921
+ let targetLineName = 'target';
7922
+ if (metaData.dataType) {
7923
+ dataTypeTemp = metaData.dataType;
7924
+ }
7925
+ if (self.chartData.targetLineData &&
7926
+ self.chartData.targetLineData.targetName) {
7927
+ targetLineName = self.chartData.targetLineData.targetName;
7928
+ }
7929
+ return (`<div>${targetLineName}</div>` +
7930
+ '<div>' +
7931
+ self.chartData.targetLineData.target +
7932
+ '' +
7933
+ dataTypeTemp +
7934
+ '</div>');
7935
+ });
7453
7936
  }
7454
- }
7455
- renderTopLabels(rect, scales, metaData) {
7456
- const formatFromBackend = this.chartConfiguration.textFormatter
7457
- ? ChartHelper.dataValueFormatter(this.chartConfiguration.textFormatter)
7458
- : (d) => d;
7459
- const formatForHugeNumbers = ChartHelper.dataValueFormatter('.2s');
7460
7937
  rect
7461
- .append('text')
7462
- .attr('x', (d) => scales.xScale(d.data.name) + scales.xScale.bandwidth() / 2)
7463
- .attr('class', 'lib-verticalstack-labels-ontop-weklycharts')
7464
- .attr('y', (d) => scales.yScale(d[1]) - 3)
7465
- .text((d) => {
7466
- const value = d[1] - d[0];
7467
- if (isNaN(value) || value === 0)
7468
- return;
7469
- const formattedValue = value <= 999
7470
- ? formatFromBackend(value)
7471
- : formatForHugeNumbers(value);
7472
- return metaData.unit ? metaData.unit + formattedValue : formattedValue;
7473
- });
7474
- }
7475
- renderAngledLabels(rect, scales, metaData) {
7476
- const formatFromBackend = this.chartConfiguration.textFormatter
7477
- ? ChartHelper.dataValueFormatter(this.chartConfiguration.textFormatter)
7478
- : (d) => d;
7479
- const formatForHugeNumbers = ChartHelper.dataValueFormatter('.2s');
7480
- const tempObjectHolder = {};
7481
- rect
7482
- .append('text')
7483
- .attr('x', 0)
7484
- .attr('y', 0)
7485
- .attr('fill', (d) => metaData.colors[d.key])
7486
- .attr('class', 'lib-data-labels-angled-weeklycharts')
7487
- .text((d) => {
7488
- const value = d[1] - d[0];
7489
- if (isNaN(value) || value <= 0)
7490
- return;
7491
- const formattedValue = value <= 999
7492
- ? formatFromBackend(value)
7493
- : formatForHugeNumbers(value);
7494
- return metaData.unit ? metaData.unit + formattedValue : formattedValue;
7495
- })
7496
- .attr('transform', (d) => {
7497
- const value = d[1] - d[0];
7498
- if (isNaN(value) || value <= 0)
7499
- return 'rotate(0)';
7500
- let total = 0;
7501
- let incrementer = 1;
7502
- metaData.keyList.forEach(key => {
7503
- if (d.data[key]) {
7504
- total += d.data[key];
7505
- }
7506
- else {
7507
- incrementer = 2;
7938
+ .selectAll('rect')
7939
+ .on('mouseenter', handleMouseOver)
7940
+ .on('mouseout', handleMouseOut);
7941
+ if (metaData.lineyLabel) {
7942
+ svg
7943
+ .append('text')
7944
+ .attr('class', 'lib-axis-group-label lib-line-axis')
7945
+ .attr('style', self.chartConfiguration.yAxisCustomlabelStyles)
7946
+ .attr('transform', 'translate(' + (width - 20) + ',0) rotate(90)')
7947
+ .attr('y', 0 - margin.right * 3)
7948
+ .attr('x', height / 2)
7949
+ .attr('dy', '5em')
7950
+ .style('text-anchor', 'middle')
7951
+ .text(metaData.lineyLabel);
7952
+ }
7953
+ if (metaData.xLabel) {
7954
+ function isAcronym(label) {
7955
+ return ((label.length <= 4 && /^[A-Z]+$/.test(label)) ||
7956
+ (label === label.toUpperCase() && /[A-Z]/.test(label)));
7957
+ }
7958
+ const xLabelText = metaData.xLabel;
7959
+ const isAcr = isAcronym(xLabelText.replace(/[^A-Za-z]/g, ''));
7960
+ const xPosition = isria ? (height + margin.top + margin.bottom) : (height + margin.top + margin.bottom + 10);
7961
+ svg
7962
+ .append('text')
7963
+ .attr('class', function () {
7964
+ let baseClass = 'lib-axis-group-label font-size-1';
7965
+ if (self.chartConfiguration.isDrilldownChart)
7966
+ return baseClass + ' lib-xlabel-drilldowncharts';
7967
+ if (self.chartConfiguration.isMultiChartGridLine != undefined)
7968
+ return baseClass + ' lib-xlabel-weeklyCharts';
7969
+ return baseClass + ' lib-axis-waterfall-label';
7970
+ })
7971
+ .attr('style', self.chartConfiguration.xAxisCustomlabelStyles)
7972
+ .attr('transform', 'translate(' + width / 2 + ' ,' + xPosition + ')')
7973
+ .style('text-anchor', 'middle')
7974
+ .style('fill', 'var(--chart-text-color)')
7975
+ .text(isAcr ? xLabelText.toUpperCase() : xLabelText.toLowerCase())
7976
+ .style('text-transform', isAcr ? 'none' : 'capitalize');
7977
+ }
7978
+ if (lineData && colors) {
7979
+ var dataGroup = d3
7980
+ .nest()
7981
+ .key(function (d) {
7982
+ return d.category;
7983
+ })
7984
+ .entries(lineData);
7985
+ var lineGen = d3
7986
+ .line()
7987
+ .x(function (d) {
7988
+ return xScale(d.name) + xScale.bandwidth() / 2;
7989
+ })
7990
+ .y(function (d) {
7991
+ return lineYscale(d.value);
7992
+ });
7993
+ var calculateCX = (d) => {
7994
+ return xScale(d.name) + xScale.bandwidth() / 2;
7995
+ };
7996
+ var calculateCY = (d) => {
7997
+ return lineYscale(d.value);
7998
+ };
7999
+ dataGroup.forEach(function (d, i) {
8000
+ svg
8001
+ .append('path')
8002
+ .datum(d.values)
8003
+ .attr('fill', 'none')
8004
+ .attr('stroke', function (d) {
8005
+ if ('category' in d[0]) {
8006
+ return colors[d[0].category];
8007
+ }
8008
+ else {
8009
+ return self.chartConfiguration.lineGraphColor;
8010
+ }
8011
+ })
8012
+ .attr('stroke-width', 2.5) /**line thinkness */
8013
+ .attr('d', lineGen(d.values));
8014
+ var dot = svg
8015
+ .selectAll('myCircles')
8016
+ .data(d.values)
8017
+ .enter()
8018
+ .append('g')
8019
+ .on('click', function (d) {
8020
+ self.handleClick(d);
8021
+ });
8022
+ dot
8023
+ .append('circle')
8024
+ .attr('fill', function (d) {
8025
+ if ('category' in d) {
8026
+ return colors[d.category];
8027
+ }
8028
+ else {
8029
+ return self.chartConfiguration.lineGraphColor;
8030
+ }
8031
+ })
8032
+ .attr('stroke', 'none')
8033
+ .attr('cx', function (d, i) {
8034
+ return xScale(d.name) + xScale.bandwidth() / 2;
8035
+ })
8036
+ .attr('cy', function (d, i) {
8037
+ return lineYscale(d.value);
8038
+ })
8039
+ .attr('r', 3) /**radius of circle=5 */
8040
+ .style('cursor', 'pointer');
8041
+ if (self.chartConfiguration.lineGraphColor) {
8042
+ dot
8043
+ .append('text')
8044
+ .attr('class', 'dots')
8045
+ .attr('fill', self.chartConfiguration.lineGraphColor)
8046
+ .attr('style', 'font-size: ' + '.85em;' + 'font-weight:' + 'bold')
8047
+ .attr('x', function (d, i) {
8048
+ return xScale(d.name) + xScale.bandwidth() / 2;
8049
+ })
8050
+ .attr('y', function (d, i) {
8051
+ return lineYscale(d.value);
8052
+ })
8053
+ .attr('dy', '-1em')
8054
+ .text(function (d, i) {
8055
+ return self.chartConfiguration.labelFormatter(d.value);
8056
+ });
7508
8057
  }
7509
8058
  });
7510
- tempObjectHolder[d.data.name] = (tempObjectHolder[d.data.name] || 0) + incrementer;
7511
- const position = tempObjectHolder[d.data.name];
7512
- const xPos = scales.xScale(d.data.name);
7513
- const bandwidth = scales.xScale.bandwidth();
7514
- const yPos = scales.yScale(total) - 3;
7515
- switch (position) {
7516
- case 1:
7517
- return `translate(${xPos + bandwidth / 3},${yPos}) rotate(270)`;
7518
- case 2:
7519
- return `translate(${xPos + bandwidth / 2 + 2},${yPos}) rotate(270)`;
7520
- default:
7521
- return `translate(${xPos + (bandwidth * 3) / 4},${yPos}) rotate(270)`;
7522
- }
7523
- });
7524
- }
7525
- renderTargetLine(svg, svgYAxisRight, scales, dimensions, metaData) {
7526
- if (!this.chartData.targetLineData)
7527
- return;
7528
- const parsedTarget = this.parseTargetValue(this.chartData.targetLineData.target);
7529
- const yZero = scales.yScale(parsedTarget);
7530
- svg
7531
- .append('line')
7532
- .attr('x1', 0)
7533
- .attr('x2', dimensions.width)
7534
- .attr('y1', yZero)
7535
- .attr('y2', yZero)
7536
- .style('stroke-dasharray', '5 5')
7537
- .style('stroke', this.chartData.targetLineData.color);
7538
- this.renderTargetLabel(svgYAxisRight, yZero, metaData);
7539
- }
7540
- parseTargetValue(target) {
7541
- const parsed = parseFloat(String(target));
7542
- if (isNaN(parsed))
7543
- return 0;
7544
- return Number.isInteger(parsed) ? parseInt(String(target)) : parsed;
7545
- }
7546
- renderTargetLabel(svgYAxisRight, yZero, metaData) {
7547
- const dataType = metaData.dataType || '';
7548
- const targetName = this.chartData.targetLineData.targetName || 'target';
7549
- svgYAxisRight
7550
- .append('foreignObject')
7551
- .attr('transform', `translate(0,${yZero - 13})`)
7552
- .attr('width', this.CONSTANTS.RIGHT_SVG_WIDTH)
7553
- .attr('height', 50)
7554
- .append('xhtml:div')
7555
- .attr('class', 'target-display')
7556
- .style('color', 'var(--chart-text-color)')
7557
- .html(`<div>${targetName}</div><div>${this.chartData.targetLineData.target}${dataType}</div>`);
7558
- }
7559
- renderLineChart(svg, lineData, scales, colors, metaData) {
7560
- if (!lineData || !colors)
7561
- return;
7562
- const dataGroup = d3
7563
- .nest()
7564
- .key((d) => d.category)
7565
- .entries(lineData);
7566
- const lineGen = d3
7567
- .line()
7568
- .x((d) => scales.xScale(d.name) + scales.xScale.bandwidth() / 2)
7569
- .y((d) => scales.lineYscale(d.value));
7570
- dataGroup.forEach((group) => {
7571
- svg
7572
- .append('path')
7573
- .datum(group.values)
7574
- .attr('fill', 'none')
7575
- .attr('stroke', (d) => {
7576
- return d[0]?.category
7577
- ? colors[d[0].category]
7578
- : this.chartConfiguration.lineGraphColor;
7579
- })
7580
- .attr('stroke-width', 2.5)
7581
- .attr('d', lineGen);
7582
- this.renderLineDots(svg, group.values, scales, colors);
7583
- });
7584
- }
7585
- renderLineDots(svg, values, scales, colors) {
7586
- const dot = svg
7587
- .selectAll('.line-dots')
7588
- .data(values)
7589
- .enter()
7590
- .append('g')
7591
- .on('click', (d) => this.handleClick(d));
7592
- dot
7593
- .append('circle')
7594
- .attr('fill', (d) => {
7595
- return d.category
7596
- ? colors[d.category]
7597
- : this.chartConfiguration.lineGraphColor;
7598
- })
7599
- .attr('stroke', 'none')
7600
- .attr('cx', (d) => scales.xScale(d.name) + scales.xScale.bandwidth() / 2)
7601
- .attr('cy', (d) => scales.lineYscale(d.value))
7602
- .attr('r', 3)
7603
- .style('cursor', 'pointer');
7604
- if (this.chartConfiguration.lineGraphColor) {
7605
- dot
7606
- .append('text')
7607
- .attr('class', 'dots')
7608
- .attr('fill', this.chartConfiguration.lineGraphColor)
7609
- .style('font-size', '.85em')
7610
- .style('font-weight', 'bold')
7611
- .attr('x', (d) => scales.xScale(d.name) + scales.xScale.bandwidth() / 2)
7612
- .attr('y', (d) => scales.lineYscale(d.value))
7613
- .attr('dy', '-1em')
7614
- .text((d) => this.chartConfiguration.labelFormatter(d.value));
7615
8059
  }
8060
+ // svg.attr('width', 150).style('max-width', 150).style('overflow-x', 'auto');
7616
8061
  }
7617
8062
  handleClick(d) {
7618
- if (this.chartData?.metaData?.hasDrillDown || d?.toggleFrom) {
8063
+ if (this.chartData?.metaData?.hasDrillDown || d?.toggleFrom)
7619
8064
  this.clickEvent.emit(d);
7620
- }
7621
8065
  }
7622
8066
  handleHeaderMenuClick(id) {
7623
8067
  this.headerMenuclickEvent.emit(id);
@@ -7626,14 +8070,15 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7626
8070
  this.clickEvent.emit(event);
7627
8071
  }
7628
8072
  handleZoominZoomoutClick({ isZoomOut, event }) {
8073
+ // this.isZoomOutSelected(isZoomOut, event);
7629
8074
  this.isZoomOutSelected(isZoomOut);
7630
8075
  }
7631
8076
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HorizontalBarsWithScrollZoomComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7632
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: HorizontalBarsWithScrollZoomComponent, selector: "lib-horizontal-bars-with-scroll-zoom", inputs: { chartData: "chartData", customChartConfiguration: "customChartConfiguration" }, outputs: { clickEvent: "clickEvent", headerMenuclickEvent: "headerMenuclickEvent" }, viewQueries: [{ propertyName: "containerElt", first: true, predicate: ["verticalstackedchartcontainer"], descendants: true, static: true }, { propertyName: "verticalstackedcontainerElt", first: true, predicate: ["verticalstackedcontainer"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<meta http-equiv=\"CACHE-CONTROL\" content=\"NO-CACHE\" />\r\n<meta http-equiv=\"EXPIRES\" content=\"Sat, 01 Jun 2004 11:12:01 GMT\" />\r\n<div\r\n #verticalstackedcontainer\r\n class=\"lib-chart-wrapper\"\r\n [ngClass]=\"{ 'lib-no-background': isTransparentBackground }\"\r\n style=\"background-color: var(--card-bg);\"\r\n\r\n (resized)=\"onResized($event)\"\r\n>\r\n <div class=\"header-alt\" *ngIf=\"!isHeaderVisible\">\r\n <lib-chart-header-v2\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (clickEvent)=\"handleClick($event)\"\r\n ></lib-chart-header-v2>\r\n\r\n <lib-chart-header-v3\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (compareByFilterSelection)=\"handleCompareByFilterSelection($event)\"\r\n (zoomInZoomOutClick)=\"handleZoominZoomoutClick($event)\"\r\n ></lib-chart-header-v3>\r\n </div>\r\n <div\r\n [style.height]=\"chartConfiguration.svgHeight\"\r\n id=\"verticalstackedchartcontainer\"\r\n #verticalstackedchartcontainer\r\n class=\"lib-chart-svg\"\r\n ></div>\r\n</div>\r\n", styles: [".lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1;font-size:1.2em}.lib-axis-group-label{font-size:.85em;font-weight:600;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.dots{font-size:10px}.inline__display{display:flex;justify-content:space-around;padding-top:2%}.verticalbar__text{font-style:normal;font-variant:normal;font-weight:400;font-size:13px;line-height:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;opacity:1}.lib-line-label-item{display:inline-block!important;font-size:.85em;margin-right:10px;font-weight:600}.lib-line-label-wrapper-vertical{display:flex;justify-content:center}.target-display{font-size:12px;line-height:14.52px;font-weight:700;text-transform:uppercase;float:right}.title{background-color:#d9d9d9;height:40px;display:flex;flex-direction:column;justify-content:center;align-items:center;border-radius:3px;line-height:1}.title-top-text{color:var(--font-color)!important;font-size:14px;font-weight:600}.title-bar-name{color:var(--font-color)!important;font-size:17px;font-weight:700;text-transform:capitalize}.title-bottom-text{color:var(--font-color)!important;font-size:12px}.zoomIcons-holder{display:flex;align-items:center;margin-right:15px}.zoomIcons{border:.5px solid #b6b6b6;cursor:pointer;display:flex;justify-content:center;align-items:center;width:30px;height:30px;color:var(--color)!important}.zoom-active{background-color:#2d5ca0;opacity:1}.zoom-inactive{background-color:#d9d9d9;opacity:.5}@media (max-width: 575px){.lib-xaxis-labels-texts-drilldown{writing-mode:sideways-lr}}@media screen and (min-width: 1024px) and (min-height: 400px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:10px!important}.dots{font-size:10px!important}}@media screen and (min-width: 1024px) and (min-height: 1000px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:10px!important}.dots{font-size:10px!important}}@media screen and (min-width: 1024px) and (min-height: 1500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:10px!important}.dots{font-size:10px!important}}@media screen and (min-width: 1366px) and (min-height: 400px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:12px!important}.dots{font-size:12px!important}}@media screen and (min-width: 1366px) and (min-height: 1000px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:12px!important}.dots{font-size:12px!important}}@media screen and (min-width: 1366px) and (min-height: 1500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:12px!important}.dots{font-size:12px!important}}@media screen and (min-width: 1920px) and (min-height: 400px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:14px!important}.dots{font-size:14px!important}}@media screen and (min-width: 1920px) and (min-height: 1000px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:14px!important}.dots{font-size:14px!important}}@media screen and (min-width: 1920px) and (min-height: 1500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:14px!important}.dots{font-size:14px!important}}@media screen and (min-width: 2560px) and (min-height: 500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:16px!important}.dots{font-size:16px!important}}@media screen and (min-width: 2560px) and (min-height: 1000px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:16px!important}.dots{font-size:16px!important}}@media screen and (min-width: 2560px) and (min-height: 1500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:16px!important}}.bottom__text{position:absolute!important;bottom:0!important;display:flex!important;justify-content:center!important;align-items:center!important;width:100%!important}.box__heightwidth{opacity:1;height:10px;width:10px;border:none!important;border-radius:50%}.label__text{margin-right:10px;display:flex;justify-content:center;align-items:center;font-style:normal;font-variant:normal;font-weight:400;font-size:10px;line-height:13px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;letter-spacing:.2px;color:#707070!important}.lib-verticalstack-labels-ontop-weklycharts{font-style:normal;font-variant:normal;font-weight:700;font-size:10px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.05px;text-anchor:middle;fill:#000}.lib-verticalstack-title-ontop{font-style:normal;font-variant:normal;font-size:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.05px;text-anchor:middle;fill:#000}.marginLeft-20{margin-left:20px}.flex-inline{display:flex;justify-content:center;align-items:center;font-size:14px}\n", ".lib-chart-wrapper{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;background:#fff 0% 0% no-repeat padding-box;position:relative}.lib-chart-wrapper-wo-shadow{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background){background-color:#2e3640}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background) .chart-title{color:#fff}.lib-chart-svg{width:100%}.lib-chart-header{text-align:center;background-color:#052340;color:#fff;width:100%;height:17%;word-spacing:.5px;line-height:1.8;font-weight:700;padding-top:2%;letter-spacing:0;font-size:1.2em}.lib-donut-chart-footer{width:100%;text-align:right}.lib-donut-label-text{font-size:.9em;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1}.lib-donut-label-icon{display:inline-block;width:10px;height:10px;margin-right:20px;border-radius:3px}.lib-donut-label-item{font-weight:400;font-size:.85em;color:#2f2f2f}.lib-donut-justified-label-wrapper{width:100%;display:inline-block;text-align:center;list-style-type:none}.lib-donut-justified-label-item{font-weight:400;font-size:.85em;color:#2f2f2f;display:inline-block;text-align:left;padding:0 10px}.lib-donut-justified-label-icon{display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:3px}.lib-no-background{background:none!important}.lib-display-hidden{display:none}.lib-ylabel-weeklyCharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:12px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.07px;text-transform:capitalize;color:#000}.lib-data-labels-weeklycharts{font-style:normal;font-variant:normal;font-weight:400;font-size:12px;line-height:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.06px;color:#000}.lib-data-labels-angled-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:9.5px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:.4px;text-anchor:start}.lib-xaxis-labels-texts-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:11px;letter-spacing:-.05px;fill:#000}.lib-xaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:-1px;color:#000;opacity:1;text-transform:capitalize}.lib-white-space-nowrap{white-space:nowrap}.lib-xaxis-labels-texts-drilldown-alt{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:10px;letter-spacing:0px;color:#000;opacity:1;text-transform:capitalize}.lib-yaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:0px;color:#000!important;opacity:1}.lib-ylabel-drilldowncharts,.lib-xlabel-drilldowncharts{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:16px;letter-spacing:-.1px;color:#000!important;opacity:1}.lib-donut-justified-label-icon-drilldown{display:inline-block;width:14px;height:14px;margin-right:10px;border-radius:50%}.marginright-2{margin-right:2%}.margintop-5{margin-top:5%}.width-100{width:100%}.float-right{float:right}.marginBottom-10{margin-bottom:10px}.header-alt{align-items:center;margin-bottom:10px}input::placeholder{font-size:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.padding-5{padding:5px}.hidden{visibility:hidden}.font-weight-bold{font-weight:900}.textalign-center{text-align:center}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-600{font-weight:600}.marginRight-15{margin-right:15px}.marginRight-20{margin-right:20px}.switch{position:relative;display:inline-block;width:46px;height:24px;margin-left:5px;margin-right:5px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#2d5ca0;-webkit-transition:.4s;transition:.4s}.slider:before{position:absolute;content:\"\";height:18px;width:18px;right:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider.round{border-radius:18px}.slider.round:before{border-radius:50%}.slider1{position:absolute;cursor:pointer;inset:0;background-color:#015ba2cf;-webkit-transition:.4s;transition:.4s}.slider1:before{position:absolute;content:\"\";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider1.round1{border-radius:18px}.slider1.round1:before{border-radius:50%}.lib-display-flex{display:flex}.lib-align-items-center{align-items:center}.lib-flex-direction-column{flex-direction:column}.lib-justify-content-space-between{justify-content:space-between}.lib-justify-content-space-around{justify-content:space-around}.lib-justify-content-center{justify-content:center}.lib-justify-content-start{justify-content:start}.lib-justify-content-end{justify-content:end}.lib-ml-20{margin-left:20px}.lib-position-absolute{position:absolute}.lib-z-index-9{z-index:9}.marginright-3{margin-right:3px}@media (min-height: 900px){.lib-chart-wrapper{border-radius:8px}.header-font-size-1{font-size:18px!important}.font-size-1{font-size:14px!important}.font-size-2{font-size:16px!important}.font-size-3{font-size:14px!important}.font-size-4{font-size:22px!important}.font-size-5{font-size:24px!important}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ResizedDirective, selector: "[resized]", outputs: ["resized"] }, { kind: "component", type: ChartHeaderV2Component, selector: "lib-chart-header-v2", inputs: ["chartData", "chartConfiguration"], outputs: ["clickEvent", "zoomInZoomOutClick"] }, { kind: "component", type: ChartHeaderV3Component, selector: "lib-chart-header-v3", inputs: ["chartData", "chartConfiguration"], outputs: ["compareByFilterSelection", "zoomInZoomOutClick"] }], encapsulation: i0.ViewEncapsulation.None }); }
8077
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: HorizontalBarsWithScrollZoomComponent, selector: "lib-horizontal-bars-with-scroll-zoom", inputs: { chartData: "chartData", customChartConfiguration: "customChartConfiguration" }, outputs: { clickEvent: "clickEvent", headerMenuclickEvent: "headerMenuclickEvent" }, viewQueries: [{ propertyName: "containerElt", first: true, predicate: ["verticalstackedchartcontainer"], descendants: true, static: true }, { propertyName: "verticalstackedcontainerElt", first: true, predicate: ["verticalstackedcontainer"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<meta http-equiv=\"CACHE-CONTROL\" content=\"NO-CACHE\" />\r\n<meta http-equiv=\"EXPIRES\" content=\"Sat, 01 Jun 2004 11:12:01 GMT\" />\r\n<div\r\n #verticalstackedcontainer\r\n class=\"lib-chart-wrapper\"\r\n [ngClass]=\"{ 'lib-no-background': isTransparentBackground }\"\r\n style=\"background-color: var(--card-bg);\"\r\n\r\n (resized)=\"onResized($event)\"\r\n>\r\n <div class=\"header-alt\" *ngIf=\"!isHeaderVisible\">\r\n <lib-chart-header-v2\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (clickEvent)=\"handleClick($event)\"\r\n ></lib-chart-header-v2>\r\n\r\n <!-- <span *ngIf=\"chartConfiguration.isComparebyDropdownVisible\">\r\n <lib-dropdown></lib-dropdown>\r\n </span> -->\r\n <lib-chart-header-v3\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (compareByFilterSelection)=\"handleCompareByFilterSelection($event)\"\r\n (zoomInZoomOutClick)=\"handleZoominZoomoutClick($event)\"\r\n ></lib-chart-header-v3>\r\n </div>\r\n <div\r\n [style.height]=\"chartConfiguration.svgHeight\"\r\n id=\"verticalstackedchartcontainer\"\r\n #verticalstackedchartcontainer\r\n class=\"lib-chart-svg\"\r\n ></div>\r\n</div>\r\n", styles: [".lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1;font-size:1.2em}.lib-axis-group-label{font-size:.85em;font-weight:600;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.dots{font-size:10px}.inline__display{display:flex;justify-content:space-around;padding-top:2%}.verticalbar__text{font-style:normal;font-variant:normal;font-weight:400;font-size:13px;line-height:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;opacity:1}.lib-line-label-item{display:inline-block!important;font-size:.85em;margin-right:10px;font-weight:600}.lib-line-label-wrapper-vertical{display:flex;justify-content:center}.target-display{font-size:12px;line-height:14.52px;font-weight:700;text-transform:uppercase;float:right}.title{background-color:#d9d9d9;height:40px;display:flex;flex-direction:column;justify-content:center;align-items:center;border-radius:3px;line-height:1}.title-top-text{color:var(--font-color)!important;font-size:14px;font-weight:600}.title-bar-name{color:var(--font-color)!important;font-size:17px;font-weight:700;text-transform:capitalize}.title-bottom-text{color:var(--font-color)!important;font-size:12px}.zoomIcons-holder{display:flex;align-items:center;margin-right:15px}.zoomIcons{border:.5px solid #b6b6b6;cursor:pointer;display:flex;justify-content:center;align-items:center;width:30px;height:30px;color:var(--color)!important}.zoom-active{background-color:#2d5ca0;opacity:1}.zoom-inactive{background-color:#d9d9d9;opacity:.5}@media (max-width: 575px){.lib-xaxis-labels-texts-drilldown{writing-mode:sideways-lr}}@media screen and (min-width: 1024px) and (min-height: 400px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:10px!important}.dots{font-size:10px!important}}@media screen and (min-width: 1024px) and (min-height: 1000px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:10px!important}.dots{font-size:10px!important}}@media screen and (min-width: 1024px) and (min-height: 1500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:10px!important}.dots{font-size:10px!important}}@media screen and (min-width: 1366px) and (min-height: 400px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:12px!important}.dots{font-size:12px!important}}@media screen and (min-width: 1366px) and (min-height: 1000px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:12px!important}.dots{font-size:12px!important}}@media screen and (min-width: 1366px) and (min-height: 1500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:12px!important}.dots{font-size:12px!important}}@media screen and (min-width: 1920px) and (min-height: 400px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:14px!important}.dots{font-size:14px!important}}@media screen and (min-width: 1920px) and (min-height: 1000px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:14px!important}.dots{font-size:14px!important}}@media screen and (min-width: 1920px) and (min-height: 1500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:14px!important}.dots{font-size:14px!important}}@media screen and (min-width: 2560px) and (min-height: 500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:16px!important}.dots{font-size:16px!important}}@media screen and (min-width: 2560px) and (min-height: 1000px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:16px!important}.dots{font-size:16px!important}}@media screen and (min-width: 2560px) and (min-height: 1500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:16px!important}}.bottom__text{position:absolute!important;bottom:0!important;display:flex!important;justify-content:center!important;align-items:center!important;width:100%!important}.box__heightwidth{opacity:1;height:10px;width:10px;border:none!important;border-radius:50%}.label__text{margin-right:10px;display:flex;justify-content:center;align-items:center;font-style:normal;font-variant:normal;font-weight:400;font-size:10px;line-height:13px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;letter-spacing:.2px;color:#707070!important}.lib-verticalstack-labels-ontop-weklycharts{font-style:normal;font-variant:normal;font-weight:700;font-size:10px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.05px;text-anchor:middle;fill:#000}.lib-verticalstack-title-ontop{font-style:normal;font-variant:normal;font-size:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.05px;text-anchor:middle;fill:#000}.marginLeft-20{margin-left:20px}.flex-inline{display:flex;justify-content:center;align-items:center;font-size:14px}\n", ".lib-chart-wrapper{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;background:#fff 0% 0% no-repeat padding-box;position:relative}.lib-chart-wrapper-wo-shadow{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background){background-color:#2e3640}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background) .chart-title{color:#fff}.lib-chart-svg{width:100%}.lib-chart-header{text-align:center;background-color:#052340;color:#fff;width:100%;height:17%;word-spacing:.5px;line-height:1.8;font-weight:700;padding-top:2%;letter-spacing:0;font-size:1.2em}.lib-donut-chart-footer{width:100%;text-align:right}.lib-donut-label-text{font-size:.9em;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1}.lib-donut-label-icon{display:inline-block;width:10px;height:10px;margin-right:20px;border-radius:3px}.lib-donut-label-item{font-weight:400;font-size:.85em;color:#2f2f2f}.lib-donut-justified-label-wrapper{width:100%;display:inline-block;text-align:center;list-style-type:none}.lib-donut-justified-label-item{font-weight:400;font-size:.85em;color:#2f2f2f;display:inline-block;text-align:left;padding:0 10px}.lib-donut-justified-label-icon{display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:3px}.lib-no-background{background:none!important}.lib-display-hidden{display:none}.lib-ylabel-weeklyCharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:12px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.07px;text-transform:capitalize;color:#000}.lib-data-labels-weeklycharts{font-style:normal;font-variant:normal;font-weight:400;font-size:12px;line-height:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.06px;color:#000}.lib-data-labels-angled-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:9.5px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:.4px;text-anchor:start}.lib-xaxis-labels-texts-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:11px;letter-spacing:-.05px;fill:#000}.lib-xaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:-1px;color:#000;opacity:1;text-transform:capitalize}.lib-white-space-nowrap{white-space:nowrap}.lib-xaxis-labels-texts-drilldown-alt{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:10px;letter-spacing:0px;color:#000;opacity:1;text-transform:capitalize}.lib-yaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:0px;color:#000!important;opacity:1}.lib-ylabel-drilldowncharts,.lib-xlabel-drilldowncharts{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:16px;letter-spacing:-.1px;color:#000!important;opacity:1}.lib-donut-justified-label-icon-drilldown{display:inline-block;width:14px;height:14px;margin-right:10px;border-radius:50%}.marginright-2{margin-right:2%}.margintop-5{margin-top:5%}.width-100{width:100%}.float-right{float:right}.marginBottom-10{margin-bottom:10px}.header-alt{align-items:center;margin-bottom:10px}input::placeholder{font-size:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.padding-5{padding:5px}.hidden{visibility:hidden}.font-weight-bold{font-weight:900}.textalign-center{text-align:center}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-600{font-weight:600}.marginRight-15{margin-right:15px}.marginRight-20{margin-right:20px}.switch{position:relative;display:inline-block;width:46px;height:24px;margin-left:5px;margin-right:5px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#2d5ca0;-webkit-transition:.4s;transition:.4s}.slider:before{position:absolute;content:\"\";height:18px;width:18px;right:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider.round{border-radius:18px}.slider.round:before{border-radius:50%}.slider1{position:absolute;cursor:pointer;inset:0;background-color:#015ba2cf;-webkit-transition:.4s;transition:.4s}.slider1:before{position:absolute;content:\"\";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider1.round1{border-radius:18px}.slider1.round1:before{border-radius:50%}.lib-display-flex{display:flex}.lib-align-items-center{align-items:center}.lib-flex-direction-column{flex-direction:column}.lib-justify-content-space-between{justify-content:space-between}.lib-justify-content-space-around{justify-content:space-around}.lib-justify-content-center{justify-content:center}.lib-justify-content-start{justify-content:start}.lib-justify-content-end{justify-content:end}.lib-ml-20{margin-left:20px}.lib-position-absolute{position:absolute}.lib-z-index-9{z-index:9}.marginright-3{margin-right:3px}@media (min-height: 900px){.lib-chart-wrapper{border-radius:8px}.header-font-size-1{font-size:18px!important}.font-size-1{font-size:14px!important}.font-size-2{font-size:16px!important}.font-size-3{font-size:14px!important}.font-size-4{font-size:22px!important}.font-size-5{font-size:24px!important}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ResizedDirective, selector: "[resized]", outputs: ["resized"] }, { kind: "component", type: ChartHeaderV2Component, selector: "lib-chart-header-v2", inputs: ["chartData", "chartConfiguration"], outputs: ["clickEvent", "zoomInZoomOutClick"] }, { kind: "component", type: ChartHeaderV3Component, selector: "lib-chart-header-v3", inputs: ["chartData", "chartConfiguration"], outputs: ["compareByFilterSelection", "zoomInZoomOutClick"] }], encapsulation: i0.ViewEncapsulation.None }); }
7633
8078
  }
7634
8079
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HorizontalBarsWithScrollZoomComponent, decorators: [{
7635
8080
  type: Component,
7636
- args: [{ selector: 'lib-horizontal-bars-with-scroll-zoom', encapsulation: ViewEncapsulation.None, template: "<meta http-equiv=\"CACHE-CONTROL\" content=\"NO-CACHE\" />\r\n<meta http-equiv=\"EXPIRES\" content=\"Sat, 01 Jun 2004 11:12:01 GMT\" />\r\n<div\r\n #verticalstackedcontainer\r\n class=\"lib-chart-wrapper\"\r\n [ngClass]=\"{ 'lib-no-background': isTransparentBackground }\"\r\n style=\"background-color: var(--card-bg);\"\r\n\r\n (resized)=\"onResized($event)\"\r\n>\r\n <div class=\"header-alt\" *ngIf=\"!isHeaderVisible\">\r\n <lib-chart-header-v2\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (clickEvent)=\"handleClick($event)\"\r\n ></lib-chart-header-v2>\r\n\r\n <lib-chart-header-v3\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (compareByFilterSelection)=\"handleCompareByFilterSelection($event)\"\r\n (zoomInZoomOutClick)=\"handleZoominZoomoutClick($event)\"\r\n ></lib-chart-header-v3>\r\n </div>\r\n <div\r\n [style.height]=\"chartConfiguration.svgHeight\"\r\n id=\"verticalstackedchartcontainer\"\r\n #verticalstackedchartcontainer\r\n class=\"lib-chart-svg\"\r\n ></div>\r\n</div>\r\n", styles: [".lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1;font-size:1.2em}.lib-axis-group-label{font-size:.85em;font-weight:600;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.dots{font-size:10px}.inline__display{display:flex;justify-content:space-around;padding-top:2%}.verticalbar__text{font-style:normal;font-variant:normal;font-weight:400;font-size:13px;line-height:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;opacity:1}.lib-line-label-item{display:inline-block!important;font-size:.85em;margin-right:10px;font-weight:600}.lib-line-label-wrapper-vertical{display:flex;justify-content:center}.target-display{font-size:12px;line-height:14.52px;font-weight:700;text-transform:uppercase;float:right}.title{background-color:#d9d9d9;height:40px;display:flex;flex-direction:column;justify-content:center;align-items:center;border-radius:3px;line-height:1}.title-top-text{color:var(--font-color)!important;font-size:14px;font-weight:600}.title-bar-name{color:var(--font-color)!important;font-size:17px;font-weight:700;text-transform:capitalize}.title-bottom-text{color:var(--font-color)!important;font-size:12px}.zoomIcons-holder{display:flex;align-items:center;margin-right:15px}.zoomIcons{border:.5px solid #b6b6b6;cursor:pointer;display:flex;justify-content:center;align-items:center;width:30px;height:30px;color:var(--color)!important}.zoom-active{background-color:#2d5ca0;opacity:1}.zoom-inactive{background-color:#d9d9d9;opacity:.5}@media (max-width: 575px){.lib-xaxis-labels-texts-drilldown{writing-mode:sideways-lr}}@media screen and (min-width: 1024px) and (min-height: 400px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:10px!important}.dots{font-size:10px!important}}@media screen and (min-width: 1024px) and (min-height: 1000px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:10px!important}.dots{font-size:10px!important}}@media screen and (min-width: 1024px) and (min-height: 1500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:10px!important}.dots{font-size:10px!important}}@media screen and (min-width: 1366px) and (min-height: 400px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:12px!important}.dots{font-size:12px!important}}@media screen and (min-width: 1366px) and (min-height: 1000px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:12px!important}.dots{font-size:12px!important}}@media screen and (min-width: 1366px) and (min-height: 1500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:12px!important}.dots{font-size:12px!important}}@media screen and (min-width: 1920px) and (min-height: 400px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:14px!important}.dots{font-size:14px!important}}@media screen and (min-width: 1920px) and (min-height: 1000px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:14px!important}.dots{font-size:14px!important}}@media screen and (min-width: 1920px) and (min-height: 1500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:14px!important}.dots{font-size:14px!important}}@media screen and (min-width: 2560px) and (min-height: 500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:16px!important}.dots{font-size:16px!important}}@media screen and (min-width: 2560px) and (min-height: 1000px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:16px!important}.dots{font-size:16px!important}}@media screen and (min-width: 2560px) and (min-height: 1500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:16px!important}}.bottom__text{position:absolute!important;bottom:0!important;display:flex!important;justify-content:center!important;align-items:center!important;width:100%!important}.box__heightwidth{opacity:1;height:10px;width:10px;border:none!important;border-radius:50%}.label__text{margin-right:10px;display:flex;justify-content:center;align-items:center;font-style:normal;font-variant:normal;font-weight:400;font-size:10px;line-height:13px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;letter-spacing:.2px;color:#707070!important}.lib-verticalstack-labels-ontop-weklycharts{font-style:normal;font-variant:normal;font-weight:700;font-size:10px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.05px;text-anchor:middle;fill:#000}.lib-verticalstack-title-ontop{font-style:normal;font-variant:normal;font-size:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.05px;text-anchor:middle;fill:#000}.marginLeft-20{margin-left:20px}.flex-inline{display:flex;justify-content:center;align-items:center;font-size:14px}\n", ".lib-chart-wrapper{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;background:#fff 0% 0% no-repeat padding-box;position:relative}.lib-chart-wrapper-wo-shadow{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background){background-color:#2e3640}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background) .chart-title{color:#fff}.lib-chart-svg{width:100%}.lib-chart-header{text-align:center;background-color:#052340;color:#fff;width:100%;height:17%;word-spacing:.5px;line-height:1.8;font-weight:700;padding-top:2%;letter-spacing:0;font-size:1.2em}.lib-donut-chart-footer{width:100%;text-align:right}.lib-donut-label-text{font-size:.9em;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1}.lib-donut-label-icon{display:inline-block;width:10px;height:10px;margin-right:20px;border-radius:3px}.lib-donut-label-item{font-weight:400;font-size:.85em;color:#2f2f2f}.lib-donut-justified-label-wrapper{width:100%;display:inline-block;text-align:center;list-style-type:none}.lib-donut-justified-label-item{font-weight:400;font-size:.85em;color:#2f2f2f;display:inline-block;text-align:left;padding:0 10px}.lib-donut-justified-label-icon{display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:3px}.lib-no-background{background:none!important}.lib-display-hidden{display:none}.lib-ylabel-weeklyCharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:12px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.07px;text-transform:capitalize;color:#000}.lib-data-labels-weeklycharts{font-style:normal;font-variant:normal;font-weight:400;font-size:12px;line-height:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.06px;color:#000}.lib-data-labels-angled-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:9.5px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:.4px;text-anchor:start}.lib-xaxis-labels-texts-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:11px;letter-spacing:-.05px;fill:#000}.lib-xaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:-1px;color:#000;opacity:1;text-transform:capitalize}.lib-white-space-nowrap{white-space:nowrap}.lib-xaxis-labels-texts-drilldown-alt{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:10px;letter-spacing:0px;color:#000;opacity:1;text-transform:capitalize}.lib-yaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:0px;color:#000!important;opacity:1}.lib-ylabel-drilldowncharts,.lib-xlabel-drilldowncharts{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:16px;letter-spacing:-.1px;color:#000!important;opacity:1}.lib-donut-justified-label-icon-drilldown{display:inline-block;width:14px;height:14px;margin-right:10px;border-radius:50%}.marginright-2{margin-right:2%}.margintop-5{margin-top:5%}.width-100{width:100%}.float-right{float:right}.marginBottom-10{margin-bottom:10px}.header-alt{align-items:center;margin-bottom:10px}input::placeholder{font-size:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.padding-5{padding:5px}.hidden{visibility:hidden}.font-weight-bold{font-weight:900}.textalign-center{text-align:center}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-600{font-weight:600}.marginRight-15{margin-right:15px}.marginRight-20{margin-right:20px}.switch{position:relative;display:inline-block;width:46px;height:24px;margin-left:5px;margin-right:5px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#2d5ca0;-webkit-transition:.4s;transition:.4s}.slider:before{position:absolute;content:\"\";height:18px;width:18px;right:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider.round{border-radius:18px}.slider.round:before{border-radius:50%}.slider1{position:absolute;cursor:pointer;inset:0;background-color:#015ba2cf;-webkit-transition:.4s;transition:.4s}.slider1:before{position:absolute;content:\"\";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider1.round1{border-radius:18px}.slider1.round1:before{border-radius:50%}.lib-display-flex{display:flex}.lib-align-items-center{align-items:center}.lib-flex-direction-column{flex-direction:column}.lib-justify-content-space-between{justify-content:space-between}.lib-justify-content-space-around{justify-content:space-around}.lib-justify-content-center{justify-content:center}.lib-justify-content-start{justify-content:start}.lib-justify-content-end{justify-content:end}.lib-ml-20{margin-left:20px}.lib-position-absolute{position:absolute}.lib-z-index-9{z-index:9}.marginright-3{margin-right:3px}@media (min-height: 900px){.lib-chart-wrapper{border-radius:8px}.header-font-size-1{font-size:18px!important}.font-size-1{font-size:14px!important}.font-size-2{font-size:16px!important}.font-size-3{font-size:14px!important}.font-size-4{font-size:22px!important}.font-size-5{font-size:24px!important}}\n"] }]
8081
+ args: [{ selector: 'lib-horizontal-bars-with-scroll-zoom', encapsulation: ViewEncapsulation.None, template: "<meta http-equiv=\"CACHE-CONTROL\" content=\"NO-CACHE\" />\r\n<meta http-equiv=\"EXPIRES\" content=\"Sat, 01 Jun 2004 11:12:01 GMT\" />\r\n<div\r\n #verticalstackedcontainer\r\n class=\"lib-chart-wrapper\"\r\n [ngClass]=\"{ 'lib-no-background': isTransparentBackground }\"\r\n style=\"background-color: var(--card-bg);\"\r\n\r\n (resized)=\"onResized($event)\"\r\n>\r\n <div class=\"header-alt\" *ngIf=\"!isHeaderVisible\">\r\n <lib-chart-header-v2\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (clickEvent)=\"handleClick($event)\"\r\n ></lib-chart-header-v2>\r\n\r\n <!-- <span *ngIf=\"chartConfiguration.isComparebyDropdownVisible\">\r\n <lib-dropdown></lib-dropdown>\r\n </span> -->\r\n <lib-chart-header-v3\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (compareByFilterSelection)=\"handleCompareByFilterSelection($event)\"\r\n (zoomInZoomOutClick)=\"handleZoominZoomoutClick($event)\"\r\n ></lib-chart-header-v3>\r\n </div>\r\n <div\r\n [style.height]=\"chartConfiguration.svgHeight\"\r\n id=\"verticalstackedchartcontainer\"\r\n #verticalstackedchartcontainer\r\n class=\"lib-chart-svg\"\r\n ></div>\r\n</div>\r\n", styles: [".lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1;font-size:1.2em}.lib-axis-group-label{font-size:.85em;font-weight:600;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.dots{font-size:10px}.inline__display{display:flex;justify-content:space-around;padding-top:2%}.verticalbar__text{font-style:normal;font-variant:normal;font-weight:400;font-size:13px;line-height:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;opacity:1}.lib-line-label-item{display:inline-block!important;font-size:.85em;margin-right:10px;font-weight:600}.lib-line-label-wrapper-vertical{display:flex;justify-content:center}.target-display{font-size:12px;line-height:14.52px;font-weight:700;text-transform:uppercase;float:right}.title{background-color:#d9d9d9;height:40px;display:flex;flex-direction:column;justify-content:center;align-items:center;border-radius:3px;line-height:1}.title-top-text{color:var(--font-color)!important;font-size:14px;font-weight:600}.title-bar-name{color:var(--font-color)!important;font-size:17px;font-weight:700;text-transform:capitalize}.title-bottom-text{color:var(--font-color)!important;font-size:12px}.zoomIcons-holder{display:flex;align-items:center;margin-right:15px}.zoomIcons{border:.5px solid #b6b6b6;cursor:pointer;display:flex;justify-content:center;align-items:center;width:30px;height:30px;color:var(--color)!important}.zoom-active{background-color:#2d5ca0;opacity:1}.zoom-inactive{background-color:#d9d9d9;opacity:.5}@media (max-width: 575px){.lib-xaxis-labels-texts-drilldown{writing-mode:sideways-lr}}@media screen and (min-width: 1024px) and (min-height: 400px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:10px!important}.dots{font-size:10px!important}}@media screen and (min-width: 1024px) and (min-height: 1000px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:10px!important}.dots{font-size:10px!important}}@media screen and (min-width: 1024px) and (min-height: 1500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:10px!important}.dots{font-size:10px!important}}@media screen and (min-width: 1366px) and (min-height: 400px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:12px!important}.dots{font-size:12px!important}}@media screen and (min-width: 1366px) and (min-height: 1000px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:12px!important}.dots{font-size:12px!important}}@media screen and (min-width: 1366px) and (min-height: 1500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:12px!important}.dots{font-size:12px!important}}@media screen and (min-width: 1920px) and (min-height: 400px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:14px!important}.dots{font-size:14px!important}}@media screen and (min-width: 1920px) and (min-height: 1000px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:14px!important}.dots{font-size:14px!important}}@media screen and (min-width: 1920px) and (min-height: 1500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:14px!important}.dots{font-size:14px!important}}@media screen and (min-width: 2560px) and (min-height: 500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:16px!important}.dots{font-size:16px!important}}@media screen and (min-width: 2560px) and (min-height: 1000px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:16px!important}.dots{font-size:16px!important}}@media screen and (min-width: 2560px) and (min-height: 1500px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:16px!important}}.bottom__text{position:absolute!important;bottom:0!important;display:flex!important;justify-content:center!important;align-items:center!important;width:100%!important}.box__heightwidth{opacity:1;height:10px;width:10px;border:none!important;border-radius:50%}.label__text{margin-right:10px;display:flex;justify-content:center;align-items:center;font-style:normal;font-variant:normal;font-weight:400;font-size:10px;line-height:13px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;letter-spacing:.2px;color:#707070!important}.lib-verticalstack-labels-ontop-weklycharts{font-style:normal;font-variant:normal;font-weight:700;font-size:10px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.05px;text-anchor:middle;fill:#000}.lib-verticalstack-title-ontop{font-style:normal;font-variant:normal;font-size:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.05px;text-anchor:middle;fill:#000}.marginLeft-20{margin-left:20px}.flex-inline{display:flex;justify-content:center;align-items:center;font-size:14px}\n", ".lib-chart-wrapper{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;background:#fff 0% 0% no-repeat padding-box;position:relative}.lib-chart-wrapper-wo-shadow{width:100%;height:100%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background){background-color:#2e3640}.lib-chart-wrapper:hover .chart-header-v1:not(.header-no-background) .chart-title{color:#fff}.lib-chart-svg{width:100%}.lib-chart-header{text-align:center;background-color:#052340;color:#fff;width:100%;height:17%;word-spacing:.5px;line-height:1.8;font-weight:700;padding-top:2%;letter-spacing:0;font-size:1.2em}.lib-donut-chart-footer{width:100%;text-align:right}.lib-donut-label-text{font-size:.9em;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1}.lib-donut-label-icon{display:inline-block;width:10px;height:10px;margin-right:20px;border-radius:3px}.lib-donut-label-item{font-weight:400;font-size:.85em;color:#2f2f2f}.lib-donut-justified-label-wrapper{width:100%;display:inline-block;text-align:center;list-style-type:none}.lib-donut-justified-label-item{font-weight:400;font-size:.85em;color:#2f2f2f;display:inline-block;text-align:left;padding:0 10px}.lib-donut-justified-label-icon{display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:3px}.lib-no-background{background:none!important}.lib-display-hidden{display:none}.lib-ylabel-weeklyCharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:12px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.07px;text-transform:capitalize;color:#000}.lib-data-labels-weeklycharts{font-style:normal;font-variant:normal;font-weight:400;font-size:12px;line-height:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.06px;color:#000}.lib-data-labels-angled-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:9.5px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:.4px;text-anchor:start}.lib-xaxis-labels-texts-weeklycharts{font-style:normal;font-variant:normal;font-weight:800;font-size:10px;line-height:11px;letter-spacing:-.05px;fill:#000}.lib-xaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:-1px;color:#000;opacity:1;text-transform:capitalize}.lib-white-space-nowrap{white-space:nowrap}.lib-xaxis-labels-texts-drilldown-alt{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:10px;letter-spacing:0px;color:#000;opacity:1;text-transform:capitalize}.lib-yaxis-labels-texts-drilldown{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:14px;letter-spacing:0px;color:#000!important;opacity:1}.lib-ylabel-drilldowncharts,.lib-xlabel-drilldowncharts{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-size:16px;letter-spacing:-.1px;color:#000!important;opacity:1}.lib-donut-justified-label-icon-drilldown{display:inline-block;width:14px;height:14px;margin-right:10px;border-radius:50%}.marginright-2{margin-right:2%}.margintop-5{margin-top:5%}.width-100{width:100%}.float-right{float:right}.marginBottom-10{margin-bottom:10px}.header-alt{align-items:center;margin-bottom:10px}input::placeholder{font-size:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.padding-5{padding:5px}.hidden{visibility:hidden}.font-weight-bold{font-weight:900}.textalign-center{text-align:center}.cursor-pointer{cursor:pointer}.cursor-default{cursor:default}.font-weight-600{font-weight:600}.marginRight-15{margin-right:15px}.marginRight-20{margin-right:20px}.switch{position:relative;display:inline-block;width:46px;height:24px;margin-left:5px;margin-right:5px}.switch input{opacity:0;width:0;height:0}.slider{position:absolute;cursor:pointer;inset:0;background-color:#2d5ca0;-webkit-transition:.4s;transition:.4s}.slider:before{position:absolute;content:\"\";height:18px;width:18px;right:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider.round{border-radius:18px}.slider.round:before{border-radius:50%}.slider1{position:absolute;cursor:pointer;inset:0;background-color:#015ba2cf;-webkit-transition:.4s;transition:.4s}.slider1:before{position:absolute;content:\"\";height:18px;width:18px;left:3px;bottom:3px;background-color:#fff;-webkit-transition:.4s;transition:.4s}.slider1.round1{border-radius:18px}.slider1.round1:before{border-radius:50%}.lib-display-flex{display:flex}.lib-align-items-center{align-items:center}.lib-flex-direction-column{flex-direction:column}.lib-justify-content-space-between{justify-content:space-between}.lib-justify-content-space-around{justify-content:space-around}.lib-justify-content-center{justify-content:center}.lib-justify-content-start{justify-content:start}.lib-justify-content-end{justify-content:end}.lib-ml-20{margin-left:20px}.lib-position-absolute{position:absolute}.lib-z-index-9{z-index:9}.marginright-3{margin-right:3px}@media (min-height: 900px){.lib-chart-wrapper{border-radius:8px}.header-font-size-1{font-size:18px!important}.font-size-1{font-size:14px!important}.font-size-2{font-size:16px!important}.font-size-3{font-size:14px!important}.font-size-4{font-size:22px!important}.font-size-5{font-size:24px!important}}\n"] }]
7637
8082
  }], ctorParameters: () => [], propDecorators: { containerElt: [{
7638
8083
  type: ViewChild,
7639
8084
  args: ['verticalstackedchartcontainer', { static: true }]
@@ -7784,65 +8229,7 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
7784
8229
  var chartContainer = d3.select(this.containerElt.nativeElement);
7785
8230
  var verticalstackedcontainer = d3.select(this.groupcontainerElt.nativeElement);
7786
8231
  var margin = this.chartConfiguration.margin;
7787
- var width = parseInt(chartContainer.style('width')) - margin.left - margin.right;
7788
- if (this.chartData.data.length > 30 && this.isZoomedOut) {
7789
- width =
7790
- width > this.chartData.data.length * 40
7791
- ? this.chartData.dropdownData1
7792
- ? this.chartData.data.length * 60
7793
- : width
7794
- : this.chartData.dropdownData1
7795
- ? this.chartData.data.length * 60
7796
- : this.chartData.data.length * 40;
7797
- width =
7798
- width > this.chartData.data.length * 40
7799
- ? width
7800
- : this.chartData.data.length * 40;
7801
- }
7802
- if (this.chartData.dropdownData2 &&
7803
- width < this.chartData.data.length * 120 &&
7804
- this.isZoomedOut) {
7805
- width = this.chartData.data.length * 120;
7806
- }
7807
- if (this.chartData.data.length > 8 && !this.isZoomedOut) {
7808
- if (this.chartData.dropdownData2 &&
7809
- width < this.chartData.data.length * 250) {
7810
- width = this.chartData.data.length * 250;
7811
- }
7812
- else
7813
- width = this.chartData.data.length * 160;
7814
- }
7815
- // if (this.chartData.data.length > 8) {
7816
- // width = this.chartData.data.length * 140;
7817
- // }
7818
- var height = parseInt(verticalstackedcontainer.style('height')) *
7819
- (self.chartConfiguration.svgHeight / 100) -
7820
- margin.top -
7821
- margin.bottom;
7822
- /**
7823
- * entire height used in weekly charts as x axis needed to be displayed at the bottom of the chart
7824
- */
7825
- if (this.chartConfiguration.isFullScreen != undefined &&
7826
- this.chartConfiguration.isFullScreen) {
7827
- height =
7828
- this.chartConfiguration.svgHeight != 70
7829
- ? this.chartConfiguration.svgHeight
7830
- : parseInt(verticalstackedcontainer.style('height'));
7831
- }
7832
- if (this.chartConfiguration.isDrilldownChart && !this.isHeaderVisible) {
7833
- height =
7834
- parseInt(verticalstackedcontainer.style('height')) -
7835
- margin.top -
7836
- margin.bottom -
7837
- 130;
7838
- }
7839
- if (this.chartConfiguration.isHeaderVisible) {
7840
- height =
7841
- parseInt(verticalstackedcontainer.style('height')) -
7842
- margin.top -
7843
- margin.bottom -
7844
- 100;
7845
- }
8232
+ const { width, height } = this.calculateChartDimensions(chartContainer, verticalstackedcontainer, margin, self);
7846
8233
  /**
7847
8234
  * for hiding header
7848
8235
  * used by weekly charts
@@ -7871,48 +8258,7 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
7871
8258
  formatFromBackend = ChartHelper.dataValueFormatter(this.chartConfiguration.textFormatter);
7872
8259
  formatForHugeNumbers = ChartHelper.dataValueFormatter('.2s');
7873
8260
  }
7874
- var outerContainer = chartContainer
7875
- .append('div')
7876
- .attr('id', self.uniqueId)
7877
- .attr('class', 'outer-container')
7878
- .style('width', '100%')
7879
- .style('height', height)
7880
- .style('overflow-x', 'hidden')
7881
- .style('padding-left', `${margin.left}px`)
7882
- // .call(ChartHelper.responsivefy)
7883
- .style('padding-right', `${rightSvgWidth}px`)
7884
- .style('margin-left', '15px');
7885
- var svgYAxisLeft = outerContainer
7886
- .append('svg')
7887
- .attr('width', '100')
7888
- .attr('height', height + margin.top + margin.bottom + 10)
7889
- .style('position', 'absolute')
7890
- .style('left', '0')
7891
- .style('z-index', 1)
7892
- .append('g')
7893
- .attr('transform', 'translate(' + (margin.left + 15) + ',' + margin.top + ')');
7894
- var svgYAxisRight = outerContainer
7895
- .append('svg')
7896
- .attr('width', rightSvgWidth)
7897
- .attr('height', height + margin.top + margin.bottom + 10)
7898
- .style('position', 'absolute')
7899
- .style('right', '12px')
7900
- .style('z-index', 1)
7901
- .append('g')
7902
- .attr('transform', 'translate(' + 0 + ',' + margin.top + ')');
7903
- var innerContainer = outerContainer
7904
- .append('div')
7905
- .attr('class', 'inner-container')
7906
- .style('width', '100%')
7907
- .style('overflow-x', 'auto');
7908
- var svg = innerContainer
7909
- .append('svg')
7910
- // .attr('id', self.uniqueId)
7911
- .attr('width', width - rightSvgWidth)
7912
- .attr('height', height + margin.top + margin.bottom + 60)
7913
- // .call(ChartHelper.responsivefy)
7914
- .append('g')
7915
- .attr('transform', 'translate(' + 0 + ',' + margin.top + ')');
8261
+ const { outerContainer, svgYAxisLeft, svgYAxisRight, innerContainer, svg } = this.createChartContainers(chartContainer, margin, height, rightSvgWidth, self, width);
7916
8262
  var subgroups = keyList;
7917
8263
  var groups = d3
7918
8264
  .map(data, function (d) {
@@ -7945,17 +8291,6 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
7945
8291
  .domain(groups)
7946
8292
  .range([0, width - rightSvgWidth]);
7947
8293
  // .padding([0.2]);
7948
- /**
7949
- * draw second x axis on top
7950
- */
7951
- // if (self.chartConfiguration.showXaxisTop) {
7952
- // svg
7953
- // .append('g')
7954
- // .attr('class', 'lib-line-axis-text lib-line-x-axis-text x-axis')
7955
- // .attr('style', self.chartConfiguration.xAxisCustomTextStyles)
7956
- // .call(d3.axisBottom(x).tickSize(0));
7957
- // }
7958
- // d3.svg.axis().scale(x).orient('bottom').ticks(1).innerTickSize(-height);
7959
8294
  if (this.chartConfiguration.isMultiChartGridLine == undefined) {
7960
8295
  /**
7961
8296
  * normal ticks for all dashboard charts
@@ -7981,15 +8316,6 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
7981
8316
  .attr('class', 'lib-xaxis-labels-texts-drilldown')
7982
8317
  .style('fill', 'var(--chart-text-color)');
7983
8318
  }
7984
- // .attr('y', function () {
7985
- // if (alternate_text) {
7986
- // alternate_text = false;
7987
- // return long_tick_length + 1;
7988
- // } else {
7989
- // alternate_text = true;
7990
- // return short_tick_length + 1;
7991
- // }
7992
- // });
7993
8319
  }
7994
8320
  else {
7995
8321
  /**
@@ -8214,22 +8540,6 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
8214
8540
  maxValue = 100;
8215
8541
  }
8216
8542
  }
8217
- if (self.chartConfiguration.yAxisGrid) {
8218
- // svg
8219
- // .append('g')
8220
- // .attr('class', 'grid')
8221
- // .call(
8222
- // d3
8223
- // .axisLeft(y)
8224
- // .ticks(self.chartConfiguration.numberOfYTicks)
8225
- // .tickSize(-width)
8226
- // .tickFormat('')
8227
- // )
8228
- // // .style('stroke-dasharray', '5 5')
8229
- // .style('color', '#B9B9B9')
8230
- // .style('opacity', '0.5')
8231
- // .call((g) => g.select('.domain').remove());
8232
- }
8233
8543
  if (this.chartConfiguration.customYscale) {
8234
8544
  /**
8235
8545
  * increase y-scale so that values wont cross or exceed out of range
@@ -8849,19 +9159,11 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
8849
9159
  // .attr('class', 'lib-display-hidden');
8850
9160
  // }
8851
9161
  if (this.isZoomedOut) {
8852
- // svg
8853
- // .selectAll('.lib-xaxis-labels-texts-drilldown')
8854
- // .attr('transform', 'rotate(-30)')
8855
- // .attr('text-anchor', 'end')
8856
- // .attr('x', '-5')
8857
- // .attr('dy', null)
8858
- // .style('fill', 'var(--chart-text-color)');
8859
9162
  svg
8860
9163
  .selectAll('.lib-xaxis-labels-texts-drilldown')
8861
9164
  .each((d, i, nodes) => {
8862
9165
  const text = d3.select(nodes[i]);
8863
9166
  const label = text.text();
8864
- // If label contains \n, split and use tspan for each line
8865
9167
  if (label.indexOf('\n') > -1) {
8866
9168
  const lines = label.split('\n');
8867
9169
  text.text(null);
@@ -8873,7 +9175,6 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
8873
9175
  });
8874
9176
  }
8875
9177
  else {
8876
- // Fallback: split by space for other labels
8877
9178
  const words = label.split(' ');
8878
9179
  text.text(null);
8879
9180
  words.forEach((word, index) => {
@@ -8882,8 +9183,7 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
8882
9183
  }
8883
9184
  })
8884
9185
  .style('fill', 'var(--chart-text-color)')
8885
- .attr('transform', null); // Remove rotate if using line breaks
8886
- // Optional: Adjust bottom margin or chart layout
9186
+ .attr('transform', null);
8887
9187
  svg
8888
9188
  .select('.x-axis')
8889
9189
  .attr('transform', `translate(0, ${height - margin.bottom + 10})`);
@@ -9069,6 +9369,110 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
9069
9369
  }
9070
9370
  }
9071
9371
  }
9372
+ calculateChartDimensions(chartContainer, verticalstackedcontainer, margin, self) {
9373
+ let width = parseInt(chartContainer.style('width')) - margin.left - margin.right;
9374
+ const dataLength = this.chartData.data.length;
9375
+ // ---- Width Logic (no change) ----
9376
+ if (dataLength > 30 && this.isZoomedOut) {
9377
+ width =
9378
+ width > dataLength * 40
9379
+ ? this.chartData.dropdownData1
9380
+ ? dataLength * 60
9381
+ : width
9382
+ : this.chartData.dropdownData1
9383
+ ? dataLength * 60
9384
+ : dataLength * 40;
9385
+ width = width > dataLength * 40 ? width : dataLength * 40;
9386
+ }
9387
+ if (this.chartData.dropdownData2 &&
9388
+ width < dataLength * 120 &&
9389
+ this.isZoomedOut) {
9390
+ width = dataLength * 120;
9391
+ }
9392
+ if (dataLength > 8 && !this.isZoomedOut) {
9393
+ if (this.chartData.dropdownData2 &&
9394
+ width < dataLength * 250) {
9395
+ width = dataLength * 250;
9396
+ }
9397
+ else {
9398
+ width = dataLength * 160;
9399
+ }
9400
+ }
9401
+ // ---- Height Logic (no change) ----
9402
+ let height = parseInt(verticalstackedcontainer.style('height')) *
9403
+ (self.chartConfiguration.svgHeight / 100) -
9404
+ margin.top -
9405
+ margin.bottom;
9406
+ if (this.chartConfiguration.isFullScreen !== undefined &&
9407
+ this.chartConfiguration.isFullScreen) {
9408
+ height =
9409
+ this.chartConfiguration.svgHeight !== 70
9410
+ ? this.chartConfiguration.svgHeight
9411
+ : parseInt(verticalstackedcontainer.style('height'));
9412
+ }
9413
+ if (this.chartConfiguration.isDrilldownChart && !this.isHeaderVisible) {
9414
+ height =
9415
+ parseInt(verticalstackedcontainer.style('height')) -
9416
+ margin.top -
9417
+ margin.bottom -
9418
+ 130;
9419
+ }
9420
+ if (this.chartConfiguration.isHeaderVisible) {
9421
+ height =
9422
+ parseInt(verticalstackedcontainer.style('height')) -
9423
+ margin.top -
9424
+ margin.bottom -
9425
+ 100;
9426
+ }
9427
+ return { width, height };
9428
+ }
9429
+ createChartContainers(chartContainer, margin, height, rightSvgWidth, self, width) {
9430
+ // Outer container
9431
+ const outerContainer = chartContainer
9432
+ .append('div')
9433
+ .attr('id', self.uniqueId)
9434
+ .attr('class', 'outer-container')
9435
+ .style('width', '100%')
9436
+ .style('height', height)
9437
+ .style('overflow-x', 'hidden')
9438
+ .style('padding-left', `${margin.left}px`)
9439
+ .style('padding-right', `${rightSvgWidth}px`)
9440
+ .style('margin-left', '15px');
9441
+ // Left Y-Axis
9442
+ const svgYAxisLeft = outerContainer
9443
+ .append('svg')
9444
+ .attr('width', '100')
9445
+ .attr('height', height + margin.top + margin.bottom + 10)
9446
+ .style('position', 'absolute')
9447
+ .style('left', '0')
9448
+ .style('z-index', 1)
9449
+ .append('g')
9450
+ .attr('transform', `translate(${margin.left + 15},${margin.top})`);
9451
+ // Right Y-Axis
9452
+ const svgYAxisRight = outerContainer
9453
+ .append('svg')
9454
+ .attr('width', rightSvgWidth)
9455
+ .attr('height', height + margin.top + margin.bottom + 10)
9456
+ .style('position', 'absolute')
9457
+ .style('right', '12px')
9458
+ .style('z-index', 1)
9459
+ .append('g')
9460
+ .attr('transform', `translate(0,${margin.top})`);
9461
+ // Inner scrollable container
9462
+ const innerContainer = outerContainer
9463
+ .append('div')
9464
+ .attr('class', 'inner-container')
9465
+ .style('width', '100%')
9466
+ .style('overflow-x', 'auto');
9467
+ // Main SVG
9468
+ const svg = innerContainer
9469
+ .append('svg')
9470
+ .attr('width', width - rightSvgWidth)
9471
+ .attr('height', height + margin.top + margin.bottom + 60)
9472
+ .append('g')
9473
+ .attr('transform', `translate(0,${margin.top})`);
9474
+ return { outerContainer, svgYAxisLeft, svgYAxisRight, innerContainer, svg };
9475
+ }
9072
9476
  handleClick(d) {
9073
9477
  if (this.chartData.metaData.hasDrillDown || d?.toggleFrom)
9074
9478
  this.clickEvent.emit(d);