axidio-styleguide-library1-v2 0.3.2 → 0.3.3

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.
@@ -6488,9 +6488,11 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6488
6488
  LONG_TICK_LENGTH: 16,
6489
6489
  SHORT_TICK_LENGTH_BG: 5,
6490
6490
  LONG_TICK_LENGTH_BG: 30,
6491
- DESKTOP_BAR_WIDTH: 40, // Desktop bar width
6492
- MOBILE_BAR_WIDTH: 25, // Mobile/Tablet bar width (reduced)
6493
- BAR_GAP: 30, // Gap between bars (increased for better separation)
6491
+ MIN_MOBILE_BAR_WIDTH: 28, // Adjusted for better mobile fit
6492
+ DESKTOP_MIN_BAR_WIDTH: 40,
6493
+ TABLET_MIN_BAR_WIDTH: 35, // Added tablet-specific width
6494
+ MOBILE_BAR_PADDING: 10, // Reduced padding for mobile
6495
+ TABLET_BAR_PADDING: 8, // Added tablet-specific padding
6494
6496
  ZOOM_THRESHOLD: 30,
6495
6497
  ZOOM_IN_THRESHOLD: 8,
6496
6498
  };
@@ -6555,6 +6557,48 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6555
6557
  removeExistingChart() {
6556
6558
  d3.select('#' + this.uniqueId).remove();
6557
6559
  }
6560
+ getDeviceConfig() {
6561
+ const width = window.innerWidth;
6562
+ return {
6563
+ isMobile: width < 768, // Changed from 576 to 768 for better mobile coverage
6564
+ isTablet: width >= 768 && width < 1024, // Changed from 576-992 to 768-1024
6565
+ isDesktop: width >= 1024, // Changed from 992 to 1024
6566
+ };
6567
+ }
6568
+ configureResponsiveSettings(device) {
6569
+ if (device.isMobile) {
6570
+ this.chartConfiguration.margin = { top: 15, right: 5, bottom: 35, left: 25 };
6571
+ this.chartConfiguration.numberOfYTicks = 4;
6572
+ this.chartConfiguration.svgHeight = 55;
6573
+ }
6574
+ else if (device.isTablet) {
6575
+ this.chartConfiguration.margin = { top: 20, right: 15, bottom: 40, left: 35 };
6576
+ this.chartConfiguration.numberOfYTicks = 5;
6577
+ this.chartConfiguration.svgHeight = 65;
6578
+ }
6579
+ else {
6580
+ // Desktop/Large screens
6581
+ const width = window.innerWidth;
6582
+ if (width >= 1920) {
6583
+ // Large monitors
6584
+ this.chartConfiguration.margin = { top: 35, right: 35, bottom: 55, left: 70 };
6585
+ this.chartConfiguration.numberOfYTicks = 8;
6586
+ this.chartConfiguration.svgHeight = 85;
6587
+ }
6588
+ else if (width >= 1366) {
6589
+ // Medium monitors
6590
+ this.chartConfiguration.margin = { top: 30, right: 30, bottom: 50, left: 60 };
6591
+ this.chartConfiguration.numberOfYTicks = 7;
6592
+ this.chartConfiguration.svgHeight = 80;
6593
+ }
6594
+ else {
6595
+ // Small desktops/laptops
6596
+ this.chartConfiguration.margin = { top: 25, right: 25, bottom: 45, left: 50 };
6597
+ this.chartConfiguration.numberOfYTicks = 6;
6598
+ this.chartConfiguration.svgHeight = 75;
6599
+ }
6600
+ }
6601
+ }
6558
6602
  mergeConfigurations() {
6559
6603
  for (const key in this.defaultConfiguration) {
6560
6604
  this.chartConfiguration[key] = ChartHelper.getValueByConfigurationType(key, this.defaultConfiguration, this.customChartConfiguration);
@@ -6573,20 +6617,26 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6573
6617
  }
6574
6618
  return metaData;
6575
6619
  }
6576
- calculateDimensions(chartContainer, verticalContainer, margin, dataLength) {
6620
+ calculateDimensions(chartContainer, verticalContainer, margin, device, dataLength) {
6577
6621
  const containerWidth = chartContainer.node().getBoundingClientRect().width;
6578
6622
  const containerHeight = verticalContainer.node().getBoundingClientRect().height;
6579
- const leftAxisWidth = margin.left;
6580
- const rightAxisWidth = this.CONSTANTS.RIGHT_SVG_WIDTH;
6581
- const availableWidth = containerWidth - leftAxisWidth - rightAxisWidth;
6582
- let width = availableWidth;
6623
+ let width = containerWidth - margin.left - margin.right;
6583
6624
  let height = containerHeight * (this.chartConfiguration.svgHeight / 100) - margin.top - margin.bottom;
6625
+ // Responsive zoom handling
6584
6626
  if (dataLength > this.CONSTANTS.ZOOM_THRESHOLD && this.isZoomedOut) {
6585
- const minWidth = dataLength * 25;
6627
+ const minWidth = device.isMobile
6628
+ ? dataLength * 12
6629
+ : device.isTablet
6630
+ ? dataLength * 20
6631
+ : dataLength * 25;
6586
6632
  width = Math.max(width, minWidth);
6587
6633
  }
6588
6634
  if (dataLength > this.CONSTANTS.ZOOM_IN_THRESHOLD && !this.isZoomedOut) {
6589
- width = dataLength * 130;
6635
+ width = device.isMobile
6636
+ ? dataLength * 50
6637
+ : device.isTablet
6638
+ ? dataLength * 90
6639
+ : dataLength * 130;
6590
6640
  }
6591
6641
  if (this.chartConfiguration.isFullScreen) {
6592
6642
  height = this.chartConfiguration.svgHeight !== 80
@@ -6594,41 +6644,28 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6594
6644
  : containerHeight;
6595
6645
  }
6596
6646
  if (this.chartConfiguration.isDrilldownChart) {
6597
- height = containerHeight - margin.top - margin.bottom - 130;
6647
+ const offset = device.isMobile ? 60 : device.isTablet ? 90 : 130;
6648
+ height = containerHeight - margin.top - margin.bottom - offset;
6598
6649
  }
6599
- const isMobileOrTablet = window.innerWidth < 1024;
6600
6650
  let barWidth;
6601
6651
  let barPadding;
6602
- if (isMobileOrTablet) {
6603
- if (dataLength === 1) {
6604
- barWidth = 60;
6605
- barPadding = 0;
6606
- }
6607
- else if (dataLength === 2) {
6608
- barWidth = 50;
6609
- barPadding = 45;
6610
- }
6611
- else if (dataLength === 3) {
6612
- barWidth = 45;
6613
- barPadding = 40;
6614
- }
6615
- else if (dataLength <= 5) {
6616
- barWidth = 35;
6617
- barPadding = 30;
6618
- }
6619
- else {
6620
- barWidth = 25;
6621
- barPadding = 25;
6622
- }
6652
+ let requiredSvgWidth;
6653
+ if (device.isMobile) {
6654
+ barWidth = this.CONSTANTS.MIN_MOBILE_BAR_WIDTH;
6655
+ barPadding = this.CONSTANTS.MOBILE_BAR_PADDING;
6656
+ requiredSvgWidth = Math.max(width - this.CONSTANTS.RIGHT_SVG_WIDTH, (barWidth + barPadding) * dataLength + this.CONSTANTS.LEFT_RIGHT_SPACES * 2 +
6657
+ this.CONSTANTS.RIGHT_SVG_WIDTH - barPadding);
6658
+ }
6659
+ else if (device.isTablet) {
6660
+ barWidth = this.CONSTANTS.TABLET_MIN_BAR_WIDTH;
6661
+ barPadding = this.CONSTANTS.TABLET_BAR_PADDING;
6662
+ requiredSvgWidth = Math.max(width - this.CONSTANTS.RIGHT_SVG_WIDTH, (barWidth + barPadding) * dataLength + this.CONSTANTS.LEFT_RIGHT_SPACES * 2);
6623
6663
  }
6624
6664
  else {
6625
- barWidth = this.CONSTANTS.DESKTOP_BAR_WIDTH;
6626
- barPadding = this.CONSTANTS.BAR_GAP;
6665
+ barWidth = Math.max(this.CONSTANTS.DESKTOP_MIN_BAR_WIDTH, (width - this.CONSTANTS.RIGHT_SVG_WIDTH - this.CONSTANTS.LEFT_RIGHT_SPACES * 2) / dataLength);
6666
+ barPadding = 0;
6667
+ requiredSvgWidth = width - this.CONSTANTS.RIGHT_SVG_WIDTH;
6627
6668
  }
6628
- const totalBarsWidth = barWidth * dataLength;
6629
- const totalGaps = barPadding * (dataLength - 1);
6630
- const minRequiredWidth = totalBarsWidth + totalGaps;
6631
- const requiredSvgWidth = Math.max(availableWidth, minRequiredWidth);
6632
6669
  return {
6633
6670
  width,
6634
6671
  height,
@@ -6640,63 +6677,39 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6640
6677
  };
6641
6678
  }
6642
6679
  createSvgContainers(chartContainer, dimensions, margin) {
6643
- const chartWrapper = chartContainer
6680
+ const outerContainer = chartContainer
6644
6681
  .append('div')
6645
6682
  .attr('id', this.uniqueId)
6646
- .attr('class', 'chart-wrapper-main')
6647
- .style('position', 'relative')
6683
+ .attr('class', 'outer-container')
6648
6684
  .style('width', '100%')
6649
- .style('height', `${dimensions.height + margin.top + margin.bottom}px`);
6650
- // Left Y-axis - Fixed
6651
- const leftAxisContainer = chartWrapper
6652
- .append('div')
6653
- .attr('class', 'left-axis-container')
6654
- .style('position', 'absolute')
6655
- .style('left', '0')
6656
- .style('top', '0')
6657
- .style('width', `${margin.left}px`)
6658
- .style('height', `${dimensions.height + margin.top + margin.bottom}px`)
6659
- .style('background-color', 'var(--card-bg)')
6660
- .style('z-index', '10');
6661
- const svgYAxisLeft = leftAxisContainer
6685
+ .style('height', dimensions.height)
6686
+ .style('overflow-x', 'hidden')
6687
+ .style('padding-left', `${margin.left}px`)
6688
+ .style('margin-left', '10px')
6689
+ .style('padding-right', `${this.CONSTANTS.RIGHT_SVG_WIDTH}px`);
6690
+ const svgYAxisLeft = outerContainer
6662
6691
  .append('svg')
6663
- .attr('width', margin.left)
6692
+ .attr('width', '80')
6664
6693
  .attr('height', dimensions.height + margin.top + margin.bottom)
6665
- .append('g')
6666
- .attr('transform', `translate(${margin.left - 5},${margin.top})`);
6667
- // Right Y-axis - Fixed
6668
- const rightAxisContainer = chartWrapper
6669
- .append('div')
6670
- .attr('class', 'right-axis-container')
6671
6694
  .style('position', 'absolute')
6672
- .style('right', '0')
6673
- .style('top', '0')
6674
- .style('width', `${this.CONSTANTS.RIGHT_SVG_WIDTH}px`)
6675
- .style('height', `${dimensions.height + margin.top + margin.bottom}px`)
6676
- .style('background-color', 'var(--card-bg)')
6677
- .style('z-index', '10');
6678
- const svgYAxisRight = rightAxisContainer
6695
+ .style('left', '0')
6696
+ .style('z-index', 1)
6697
+ .append('g')
6698
+ .attr('transform', `translate(${margin.left + 10},${margin.top})`);
6699
+ const svgYAxisRight = outerContainer
6679
6700
  .append('svg')
6680
6701
  .attr('width', this.CONSTANTS.RIGHT_SVG_WIDTH)
6681
6702
  .attr('height', dimensions.height + margin.top + margin.bottom)
6703
+ .style('position', 'absolute')
6704
+ .style('right', '2px')
6705
+ .style('z-index', 1)
6682
6706
  .append('g')
6683
6707
  .attr('transform', `translate(0,${margin.top})`);
6684
- // Scrollable middle area
6685
- const scrollableContainer = chartWrapper
6686
- .append('div')
6687
- .attr('class', 'scrollable-chart-container')
6688
- .style('position', 'absolute')
6689
- .style('left', `${margin.left}px`)
6690
- .style('right', `${this.CONSTANTS.RIGHT_SVG_WIDTH}px`)
6691
- .style('top', '0')
6692
- .style('width', 'auto')
6693
- .style('height', `${dimensions.height + margin.top + margin.bottom}px`)
6694
- .style('overflow-x', 'auto')
6695
- .style('overflow-y', 'hidden');
6696
- const innerContainer = scrollableContainer
6708
+ const innerContainer = outerContainer
6697
6709
  .append('div')
6698
- .attr('class', 'inner-chart-container')
6699
- .style('min-width', '100%');
6710
+ .attr('class', 'inner-container')
6711
+ .style('width', '100%')
6712
+ .style('overflow-x', 'auto');
6700
6713
  const svg = innerContainer
6701
6714
  .append('svg')
6702
6715
  .attr('width', dimensions.requiredSvgWidth)
@@ -6705,24 +6718,21 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6705
6718
  .attr('transform', `translate(0,${margin.top})`);
6706
6719
  return { svg, svgYAxisLeft, svgYAxisRight, innerContainer };
6707
6720
  }
6708
- createScales(data, layers, lineData, dimensions) {
6721
+ createScales(data, layers, lineData, dimensions, device) {
6709
6722
  const { width, height, barWidth, barPadding } = dimensions;
6710
- const totalBarsWidth = data.length * barWidth;
6711
- const totalSpacing = (data.length - 1) * barPadding;
6712
- const requiredWidth = totalBarsWidth + totalSpacing;
6713
- const effectiveWidth = Math.max(width, requiredWidth);
6714
- const paddingRatio = barPadding / (barWidth + barPadding);
6715
- // X-scale starts from 0, no gaps
6723
+ // Adjust padding based on device
6724
+ const padding = device.isMobile ? 0.15 : device.isTablet ? 0.3 : 0.5;
6716
6725
  const xScale = d3
6717
6726
  .scaleBand()
6718
- .rangeRound([0, dimensions.requiredSvgWidth])
6727
+ .rangeRound([
6728
+ this.CONSTANTS.LEFT_RIGHT_SPACES,
6729
+ width - this.CONSTANTS.RIGHT_SVG_WIDTH - this.CONSTANTS.LEFT_RIGHT_SPACES
6730
+ ])
6719
6731
  .domain(data.map(d => d.name).reverse())
6720
- .paddingInner(paddingRatio)
6721
- .paddingOuter(0.1)
6722
- .align(0.5);
6732
+ .padding(padding);
6723
6733
  const xScaleFromOrigin = d3
6724
6734
  .scaleBand()
6725
- .rangeRound([width, 0])
6735
+ .rangeRound([width - this.CONSTANTS.RIGHT_SVG_WIDTH, 0])
6726
6736
  .domain(data.map(d => d.name).reverse());
6727
6737
  const yScale = d3.scaleLinear().rangeRound([height, 0]);
6728
6738
  let maxValue = d3.max(layers, (d) => d3.max(d, (d) => d[1]));
@@ -6768,7 +6778,7 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6768
6778
  }
6769
6779
  return { xAxis, yAxis, yLineAxis };
6770
6780
  }
6771
- renderBars(svg, layers, scales, metaData, dimensions) {
6781
+ renderBars(svg, layers, scales, metaData, dimensions, device) {
6772
6782
  const layer = svg
6773
6783
  .selectAll('.layer')
6774
6784
  .data(layers)
@@ -6780,11 +6790,11 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6780
6790
  .selectAll('rect')
6781
6791
  .data((d) => d)
6782
6792
  .enter();
6783
- this.appendRectangles(rect, scales, metaData, dimensions);
6793
+ this.appendRectangles(rect, scales, metaData, dimensions, device);
6784
6794
  this.addInteractions(rect, svg, metaData, scales);
6785
6795
  return rect;
6786
6796
  }
6787
- appendRectangles(rect, scales, metaData, dimensions) {
6797
+ appendRectangles(rect, scales, metaData, dimensions, device) {
6788
6798
  const { barWidth, barPadding } = dimensions;
6789
6799
  const { xScale, yScale } = scales;
6790
6800
  rect
@@ -6803,17 +6813,17 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6803
6813
  }
6804
6814
  return 0;
6805
6815
  })
6806
- .attr('x', (d) => {
6807
- const xPosition = xScale(d.data.name);
6808
- const bandwidth = xScale.bandwidth();
6816
+ .attr('x', (d, i) => {
6817
+ if (device.isMobile) {
6818
+ return this.CONSTANTS.LEFT_RIGHT_SPACES + i * (barWidth + barPadding);
6819
+ }
6809
6820
  if (!this.chartConfiguration.isMultiChartGridLine) {
6810
- return xPosition + (bandwidth - barWidth) / 2;
6821
+ return xScale(d.data.name);
6811
6822
  }
6812
6823
  if (this.chartConfiguration.isDrilldownChart && this.chartData.data.length <= 3) {
6813
- return xPosition + bandwidth / 2 - 35;
6824
+ return xScale(d.data.name) + xScale.bandwidth() / 2 - 35;
6814
6825
  }
6815
- const calculatedWidth = bandwidth * 0.8;
6816
- return xPosition + (bandwidth - calculatedWidth) / 2;
6826
+ return xScale(d.data.name) + xScale.bandwidth() * 0.1;
6817
6827
  })
6818
6828
  .attr('height', (d) => {
6819
6829
  if (!isNaN(d[0]) && !isNaN(d[1])) {
@@ -6823,8 +6833,10 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6823
6833
  return 0;
6824
6834
  })
6825
6835
  .attr('width', (d) => {
6826
- if (!this.chartConfiguration.isMultiChartGridLine)
6836
+ if (device.isMobile)
6827
6837
  return barWidth;
6838
+ if (!this.chartConfiguration.isMultiChartGridLine)
6839
+ return xScale.bandwidth();
6828
6840
  if (this.chartConfiguration.isDrilldownChart && this.chartData.data.length <= 3) {
6829
6841
  return 70;
6830
6842
  }
@@ -6880,13 +6892,23 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6880
6892
  const value = d[1] - d[0];
6881
6893
  if (isNaN(value))
6882
6894
  return;
6895
+ const device = this.getDeviceConfig();
6883
6896
  const bandwidth = xScale.bandwidth();
6884
- // Fixed tooltip width for all resolutions
6885
- const width = /week/i.test(d.data.name) && /\d{4}-\d{2}-\d{2}/.test(d.data.name)
6886
- ? '250px'
6887
- : bandwidth + this.CONSTANTS.LEFT_RIGHT_SPACES * 2 > 180
6888
- ? '180px'
6889
- : bandwidth + this.CONSTANTS.LEFT_RIGHT_SPACES * 2;
6897
+ // Responsive tooltip width
6898
+ let width;
6899
+ if (device.isMobile) {
6900
+ width = Math.min(bandwidth + 40, 150);
6901
+ }
6902
+ else if (device.isTablet) {
6903
+ width = Math.min(bandwidth + 60, 200);
6904
+ }
6905
+ else {
6906
+ width = /week/i.test(d.data.name) && /\d{4}-\d{2}-\d{2}/.test(d.data.name)
6907
+ ? '250px'
6908
+ : bandwidth + this.CONSTANTS.LEFT_RIGHT_SPACES * 2 > 180
6909
+ ? '180px'
6910
+ : bandwidth + this.CONSTANTS.LEFT_RIGHT_SPACES * 2;
6911
+ }
6890
6912
  svg
6891
6913
  .append('foreignObject')
6892
6914
  .attr('x', this.calculateTooltipX(d, xScale, width))
@@ -6930,8 +6952,7 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6930
6952
  this.addYAxisLabel(svgYAxisLeft, metaData.yLabel, dimensions.height, margin);
6931
6953
  }
6932
6954
  if (metaData.xLabel) {
6933
- // Add X-axis label to the scrollable SVG
6934
- this.addXAxisLabel(svg, metaData.xLabel, dimensions.requiredSvgWidth, dimensions.height, margin);
6955
+ this.addXAxisLabel(svg, metaData.xLabel, dimensions.width, dimensions.height, margin);
6935
6956
  }
6936
6957
  }
6937
6958
  addYAxisLabel(svgYAxisLeft, label, height, margin) {
@@ -6956,8 +6977,8 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6956
6977
  const isria = this.customChartConfiguration?.isRia;
6957
6978
  const isAcronym = this.isAcronymLabel(label);
6958
6979
  const xPosition = isria
6959
- ? height + margin.top + margin.bottom - 5
6960
- : height + margin.top + margin.bottom + 5;
6980
+ ? height + margin.top + margin.bottom
6981
+ : height + margin.top + margin.bottom + 10;
6961
6982
  svg
6962
6983
  .append('text')
6963
6984
  .attr('class', this.getXAxisLabelClass())
@@ -6965,8 +6986,6 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6965
6986
  .attr('transform', `translate(${width / 2},${xPosition})`)
6966
6987
  .style('text-anchor', 'middle')
6967
6988
  .style('fill', 'var(--chart-text-color)')
6968
- .style('font-size', '12px')
6969
- .style('font-weight', '600')
6970
6989
  .text(isAcronym ? label.toUpperCase() : label.toLowerCase())
6971
6990
  .style('text-transform', isAcronym ? 'none' : 'capitalize');
6972
6991
  }
@@ -7007,10 +7026,8 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7007
7026
  }
7008
7027
  }
7009
7028
  initializeStackedChart() {
7010
- // Use fixed configuration for all resolutions
7011
- this.chartConfiguration.margin = { top: 20, right: 20, bottom: 40, left: 40 };
7012
- this.chartConfiguration.numberOfYTicks = 5;
7013
- this.chartConfiguration.svgHeight = 70;
7029
+ const device = this.getDeviceConfig();
7030
+ this.configureResponsiveSettings(device);
7014
7031
  this.mergeConfigurations();
7015
7032
  this.applyConfigurationFlags();
7016
7033
  const data = this.chartData.data;
@@ -7021,16 +7038,16 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7021
7038
  const chartContainer = d3.select(this.containerElt.nativeElement);
7022
7039
  const verticalstackedcontainer = d3.select(this.verticalstackedcontainerElt.nativeElement);
7023
7040
  const margin = this.chartConfiguration.margin;
7024
- const dimensions = this.calculateDimensions(chartContainer, verticalstackedcontainer, margin, data.length);
7041
+ const dimensions = this.calculateDimensions(chartContainer, verticalstackedcontainer, margin, device, data.length);
7025
7042
  const { svg, svgYAxisLeft, svgYAxisRight } = this.createSvgContainers(chartContainer, dimensions, margin);
7026
7043
  const stack = d3.stack().keys(keyList).offset(d3.stackOffsetNone);
7027
7044
  const layers = stack(data);
7028
7045
  data.sort((a, b) => b.total - a.total);
7029
- const scales = this.createScales(data, layers, lineData, dimensions);
7046
+ const scales = this.createScales(data, layers, lineData, dimensions, device);
7030
7047
  const axes = this.createAxes(scales);
7031
7048
  this.renderGrids(svg, scales, dimensions);
7032
- const rect = this.renderBars(svg, layers, scales, metaData, dimensions);
7033
- this.renderAxes(svg, svgYAxisLeft, svgYAxisRight, axes, scales, dimensions, data);
7049
+ const rect = this.renderBars(svg, layers, scales, metaData, dimensions, device);
7050
+ this.renderAxes(svg, svgYAxisLeft, svgYAxisRight, axes, scales, dimensions, device, data);
7034
7051
  this.renderAxisLabels(svg, svgYAxisLeft, metaData, dimensions, margin);
7035
7052
  this.renderTargetLine(svg, svgYAxisRight, scales, dimensions, metaData);
7036
7053
  this.renderDataLabels(rect, scales, metaData, dimensions);
@@ -7040,7 +7057,7 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7040
7057
  if (this.chartConfiguration.isXgridBetweenLabels) {
7041
7058
  svg
7042
7059
  .append('g')
7043
- .attr('class', 'grid vertical-grid')
7060
+ .attr('class', 'grid')
7044
7061
  .attr('transform', `translate(${scales.xScale.bandwidth() / 2},${dimensions.height})`)
7045
7062
  .call(d3.axisBottom(scales.xScale).tickSize(-dimensions.height).tickFormat(''))
7046
7063
  .style('stroke-dasharray', '5 5')
@@ -7048,21 +7065,16 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7048
7065
  .call((g) => g.select('.domain').remove());
7049
7066
  }
7050
7067
  if (this.chartConfiguration.yAxisGrid) {
7051
- // Grid lines start exactly at x=0 to align with Y-axis
7052
7068
  svg
7053
7069
  .append('g')
7054
- .attr('class', 'grid horizontal-grid')
7055
- .attr('transform', 'translate(0,0)')
7070
+ .attr('class', 'grid')
7056
7071
  .call(d3
7057
7072
  .axisLeft(scales.yScale)
7058
7073
  .ticks(this.chartConfiguration.numberOfYTicks)
7059
- .tickSize(-dimensions.requiredSvgWidth)
7074
+ .tickSize(-dimensions.width)
7060
7075
  .tickFormat(''))
7061
7076
  .style('color', 'var(--chart-grid-color)')
7062
- .style('opacity', '1')
7063
- .call((g) => {
7064
- g.select('.domain').remove();
7065
- });
7077
+ .style('opacity', '1');
7066
7078
  }
7067
7079
  if (this.chartConfiguration.xAxisGrid) {
7068
7080
  for (let j = 0; j < this.chartConfiguration.xAxisGrid.length; j++) {
@@ -7076,7 +7088,7 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7076
7088
  }
7077
7089
  }
7078
7090
  }
7079
- renderAxes(svg, svgYAxisLeft, svgYAxisRight, axes, scales, dimensions, data) {
7091
+ renderAxes(svg, svgYAxisLeft, svgYAxisRight, axes, scales, dimensions, device, data) {
7080
7092
  if (this.chartConfiguration.showXaxisTop) {
7081
7093
  svg
7082
7094
  .append('g')
@@ -7086,7 +7098,7 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7086
7098
  svg.selectAll('.x-axis > g > text').attr('class', 'lib-display-hidden');
7087
7099
  }
7088
7100
  if (!this.chartConfiguration.isMultiChartGridLine) {
7089
- this.renderStandardAxes(svg, axes, scales, dimensions, data);
7101
+ this.renderStandardAxes(svg, axes, scales, dimensions, device, data);
7090
7102
  }
7091
7103
  else if (this.chartConfiguration.isDrilldownChart) {
7092
7104
  this.renderDrilldownAxes(svg, svgYAxisLeft, svgYAxisRight, axes, scales, dimensions);
@@ -7097,40 +7109,52 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7097
7109
  this.applyAxisStyling(svg, svgYAxisLeft, svgYAxisRight);
7098
7110
  this.applyAxisConfigurations(svg, scales, dimensions, data);
7099
7111
  }
7100
- renderStandardAxes(svg, axes, scales, dimensions, data) {
7101
- const isMobileOrTablet = window.innerWidth < 1024;
7102
- // X-axis at the bottom
7103
- const xAxisGroup = svg
7104
- .append('g')
7105
- .attr('transform', `translate(0,${dimensions.height})`)
7106
- .attr('class', 'lib-stacked-x-axis-text')
7107
- .call(axes.xAxis);
7108
- // X-axis line (domain)
7109
- xAxisGroup
7110
- .select('.domain')
7111
- .style('stroke', 'var(--chart-axis-color)')
7112
- .style('stroke-width', '1px');
7113
- // X-axis labels
7114
- xAxisGroup
7115
- .selectAll('text')
7116
- .style('fill', 'var(--chart-text-color)')
7117
- .style('font-size', isMobileOrTablet ? '10px' : '12px')
7118
- .attr('text-anchor', 'middle')
7119
- .attr('dy', '1em')
7120
- .each(function (d) {
7121
- const textElement = d3.select(this);
7122
- const text = textElement.text();
7123
- if (isMobileOrTablet && text.length > 12) {
7124
- textElement.text(text.substring(0, 10) + '...');
7125
- }
7126
- });
7127
- // Y-axis (hidden in scrollable area, shown in fixed left container)
7112
+ renderStandardAxes(svg, axes, scales, dimensions, device, data) {
7113
+ if (device.isMobile) {
7114
+ this.renderMobileXAxis(svg, data, dimensions);
7115
+ }
7116
+ else {
7117
+ svg
7118
+ .append('g')
7119
+ .attr('transform', `translate(0,${dimensions.height})`)
7120
+ .attr('class', 'lib-stacked-x-axis-text')
7121
+ .call(axes.xAxis)
7122
+ .selectAll('text')
7123
+ .style('fill', 'var(--chart-text-color)')
7124
+ .style('font-size', '12px')
7125
+ .attr('text-anchor', 'middle')
7126
+ .attr('dx', '0')
7127
+ .attr('dy', '0.71em')
7128
+ .attr('transform', null);
7129
+ }
7128
7130
  svg
7129
7131
  .append('g')
7130
- .attr('class', 'lib-stacked-y-axis-text lib-y-axis-hidden')
7132
+ .attr('class', 'lib-stacked-y-axis-text')
7131
7133
  .attr('style', this.chartConfiguration.yAxisCustomTextStyles)
7132
7134
  .call(axes.yAxis)
7133
- .style('opacity', '0');
7135
+ .selectAll('text')
7136
+ .style('fill', 'var(--chart-text-color)');
7137
+ }
7138
+ renderMobileXAxis(svg, data, dimensions) {
7139
+ svg.selectAll('.custom-x-label').remove();
7140
+ const maxLength = Math.max(...data.map(d => d.name.length));
7141
+ const fontSize = maxLength > 10 ? '8px' : '10px';
7142
+ data.forEach((d, i) => {
7143
+ const xVal = this.CONSTANTS.LEFT_RIGHT_SPACES +
7144
+ i * (dimensions.barWidth + dimensions.barPadding) +
7145
+ dimensions.barWidth / 2;
7146
+ svg
7147
+ .append('text')
7148
+ .attr('class', 'custom-x-label')
7149
+ .attr('x', 0)
7150
+ .attr('y', dimensions.height + 18)
7151
+ .attr('text-anchor', 'middle')
7152
+ .attr('transform', `translate(${xVal + 20},0)`)
7153
+ .style('font-size', fontSize)
7154
+ .style('fill', 'var(--chart-text-color)')
7155
+ .style('writing-mode', 'sideways-lr')
7156
+ .text(d.name.length > 6 ? d.name.substring(0, 4) + '...' : d.name);
7157
+ });
7134
7158
  }
7135
7159
  renderDrilldownAxes(svg, svgYAxisLeft, svgYAxisRight, axes, scales, dimensions) {
7136
7160
  svg
@@ -7213,6 +7237,7 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7213
7237
  }
7214
7238
  }
7215
7239
  renderCustomXAxis(svg, scales, dimensions, data) {
7240
+ const device = this.getDeviceConfig();
7216
7241
  svg
7217
7242
  .append('g')
7218
7243
  .attr('class', 'x1 axis1')
@@ -7220,12 +7245,12 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7220
7245
  .style('color', '#000')
7221
7246
  .call(d3.axisBottom(scales.xScale).tickSize(0))
7222
7247
  .call((g) => g.select('.domain').attr('fill', 'none'));
7223
- this.styleCustomXAxisTicks(svg, data);
7248
+ this.styleCustomXAxisTicks(svg, data, device);
7224
7249
  if (this.chartConfiguration.xLabelsOnSameLine) {
7225
- this.applyXLabelsOnSameLine(svg);
7250
+ this.applyXLabelsOnSameLine(svg, device);
7226
7251
  }
7227
7252
  }
7228
- styleCustomXAxisTicks(svg, data) {
7253
+ styleCustomXAxisTicks(svg, data, device) {
7229
7254
  let alternateText = false;
7230
7255
  svg.selectAll('.x1.axis1 .tick line').attr('y2', () => {
7231
7256
  if (this.chartConfiguration.hideXaxisTick)
@@ -7257,17 +7282,28 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7257
7282
  return this.CONSTANTS.SHORT_TICK_LENGTH_BG;
7258
7283
  });
7259
7284
  }
7260
- applyXLabelsOnSameLine(svg) {
7285
+ applyXLabelsOnSameLine(svg, device) {
7261
7286
  svg
7262
7287
  .selectAll('g.x1.axis1 g.tick text')
7263
7288
  .attr('class', 'lib-xaxis-labels-texts-drilldown')
7264
7289
  .attr('y', this.CONSTANTS.SHORT_TICK_LENGTH_BG)
7265
7290
  .text((d) => {
7291
+ if (device.isMobile) {
7292
+ return d.split(' ')[0].substring(0, 3);
7293
+ }
7266
7294
  const trimmed = d.trim();
7267
7295
  const spaceIndex = trimmed.indexOf(' ');
7268
7296
  return spaceIndex > -1
7269
7297
  ? trimmed.substring(0, spaceIndex).toLowerCase()
7270
7298
  : trimmed.toLowerCase();
7299
+ })
7300
+ .attr('transform', function (d, i) {
7301
+ if (device.isMobile) {
7302
+ const parent = this.parentNode?.parentNode;
7303
+ const totalBars = parent ? d3.select(parent).selectAll('g.tick').size() : 0;
7304
+ return totalBars === 2 ? 'translate(0,0)' : `translate(${i * 30},0)`;
7305
+ }
7306
+ return null;
7271
7307
  });
7272
7308
  svg
7273
7309
  .selectAll('g.x1.axis1 g.tick')
@@ -7276,11 +7312,16 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7276
7312
  .attr('y', this.CONSTANTS.LONG_TICK_LENGTH_BG)
7277
7313
  .attr('fill', 'currentColor')
7278
7314
  .text((d) => {
7315
+ if (device.isMobile)
7316
+ return '';
7279
7317
  const trimmed = d.trim();
7280
7318
  const spaceIndex = trimmed.indexOf(' ');
7281
7319
  return spaceIndex > -1
7282
7320
  ? trimmed.substring(spaceIndex).toLowerCase()
7283
7321
  : '';
7322
+ })
7323
+ .attr('transform', (d, i) => {
7324
+ return device.isMobile && i === 0 ? 'translate(20,0)' : null;
7284
7325
  });
7285
7326
  }
7286
7327
  renderDataLabels(rect, scales, metaData, dimensions) {
@@ -7471,11 +7512,11 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7471
7512
  this.isZoomOutSelected(isZoomOut);
7472
7513
  }
7473
7514
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HorizontalBarsWithScrollZoomComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
7474
- 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:12px}.lib-axis-group-label{font-size:12px;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:11px;line-height:13px;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;padding:4px 8px;box-sizing:border-box}.title-top-text{color:var(--font-color)!important;font-size:12px;font-weight:600}.title-bar-name{color:var(--font-color)!important;font-size:14px;font-weight:700;text-transform:capitalize}.title-bottom-text{color:var(--font-color)!important;font-size:11px}.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}.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}.lib-xaxis-labels-texts-drilldown,.lib-xaxis-labels-texts-drilldown-alt,.lib-xaxis-labels-texts-weeklycharts{font-size:12px}.lib-display-hidden{display:none!important}.chart-wrapper-main{position:relative;width:100%;box-sizing:border-box}.left-axis-container,.right-axis-container{pointer-events:none;overflow:hidden;-webkit-user-select:none;user-select:none}.scrollable-chart-container{-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:#888 #f1f1f1}.scrollable-chart-container::-webkit-scrollbar{height:8px}.scrollable-chart-container::-webkit-scrollbar-track{background:#f1f1f1;border-radius:4px}.scrollable-chart-container::-webkit-scrollbar-thumb{background:#888;border-radius:4px}.scrollable-chart-container::-webkit-scrollbar-thumb:hover{background:#555}.inner-chart-container{position:relative}.grid line{stroke-width:1;shape-rendering:crispEdges}.horizontal-grid line{stroke-opacity:.7}.vertical-grid line{stroke-opacity:.7}.lib-y-axis-hidden{opacity:0!important;pointer-events:none}.lib-stacked-x-axis-text .domain{stroke:var(--chart-axis-color);stroke-width:1px}.lib-stacked-x-axis-text text{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;font-size:12px;fill:var(--chart-text-color)}.lib-stacked-y-axis-text .domain{stroke:var(--chart-axis-color);stroke-width:1px}.lib-stacked-y-axis-text text{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;font-size:12px;fill:var(--chart-text-color)}@media (max-width: 1024px){.scrollable-chart-container::-webkit-scrollbar{height:6px}.lib-stacked-x-axis-text text{font-size:10px}}@media (max-width: 768px){.scrollable-chart-container::-webkit-scrollbar{height:4px}}\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 }); }
7515
+ 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:12px}.lib-axis-group-label{font-size:12px;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:11px;line-height:13px;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;padding:4px 8px;box-sizing:border-box}.title-top-text{color:var(--font-color)!important;font-size:12px;font-weight:600}.title-bar-name{color:var(--font-color)!important;font-size:14px;font-weight:700;text-transform:capitalize}.title-bottom-text{color:var(--font-color)!important;font-size:11px}.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}.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}@media (max-width: 767px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:9px!important}.lib-axis-group-label{font-size:10px!important}.dots{font-size:8px!important}.lib-xaxis-labels-texts-drilldown{writing-mode:sideways-lr;font-size:9px!important}.target-display{font-size:9px;line-height:11px}.title-top-text{font-size:10px}.title-bar-name{font-size:12px}.zoomIcons{width:26px;height:26px}.lib-verticalstack-labels-ontop-weklycharts{font-size:9px}}@media (min-width: 768px) and (max-width: 1023px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:10px!important}.lib-axis-group-label{font-size:11px!important}.dots{font-size:9px!important}.target-display{font-size:10px;line-height:12px}.title-top-text{font-size:11px}.title-bar-name{font-size:13px}.zoomIcons{width:28px;height:28px}}@media (min-width: 1024px) and (max-width: 1365px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:11px!important}.lib-axis-group-label{font-size:12px!important}.dots{font-size:10px!important}}@media (min-width: 1366px) and (max-width: 1919px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:12px!important}.lib-axis-group-label{font-size:13px!important}.dots{font-size:11px!important}}@media (min-width: 1920px) and (max-width: 2559px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:14px!important}.lib-axis-group-label{font-size:14px!important}.dots{font-size:12px!important}.target-display{font-size:13px;line-height:15px}.title-top-text{font-size:14px}.title-bar-name{font-size:16px}}@media (min-width: 2560px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:16px!important}.lib-axis-group-label{font-size:15px!important}.dots{font-size:14px!important}.target-display{font-size:14px;line-height:16px}.title-top-text{font-size:15px}.title-bar-name{font-size:18px}.zoomIcons{width:34px;height:34px}}@media (orientation: portrait) and (max-width: 767px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:8px!important}.lib-xaxis-labels-texts-drilldown{font-size:8px!important}}@media (orientation: landscape) and (min-width: 768px) and (max-width: 1023px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:11px!important}}\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 }); }
7475
7516
  }
7476
7517
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HorizontalBarsWithScrollZoomComponent, decorators: [{
7477
7518
  type: Component,
7478
- 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:12px}.lib-axis-group-label{font-size:12px;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:11px;line-height:13px;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;padding:4px 8px;box-sizing:border-box}.title-top-text{color:var(--font-color)!important;font-size:12px;font-weight:600}.title-bar-name{color:var(--font-color)!important;font-size:14px;font-weight:700;text-transform:capitalize}.title-bottom-text{color:var(--font-color)!important;font-size:11px}.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}.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}.lib-xaxis-labels-texts-drilldown,.lib-xaxis-labels-texts-drilldown-alt,.lib-xaxis-labels-texts-weeklycharts{font-size:12px}.lib-display-hidden{display:none!important}.chart-wrapper-main{position:relative;width:100%;box-sizing:border-box}.left-axis-container,.right-axis-container{pointer-events:none;overflow:hidden;-webkit-user-select:none;user-select:none}.scrollable-chart-container{-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:#888 #f1f1f1}.scrollable-chart-container::-webkit-scrollbar{height:8px}.scrollable-chart-container::-webkit-scrollbar-track{background:#f1f1f1;border-radius:4px}.scrollable-chart-container::-webkit-scrollbar-thumb{background:#888;border-radius:4px}.scrollable-chart-container::-webkit-scrollbar-thumb:hover{background:#555}.inner-chart-container{position:relative}.grid line{stroke-width:1;shape-rendering:crispEdges}.horizontal-grid line{stroke-opacity:.7}.vertical-grid line{stroke-opacity:.7}.lib-y-axis-hidden{opacity:0!important;pointer-events:none}.lib-stacked-x-axis-text .domain{stroke:var(--chart-axis-color);stroke-width:1px}.lib-stacked-x-axis-text text{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;font-size:12px;fill:var(--chart-text-color)}.lib-stacked-y-axis-text .domain{stroke:var(--chart-axis-color);stroke-width:1px}.lib-stacked-y-axis-text text{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;font-size:12px;fill:var(--chart-text-color)}@media (max-width: 1024px){.scrollable-chart-container::-webkit-scrollbar{height:6px}.lib-stacked-x-axis-text text{font-size:10px}}@media (max-width: 768px){.scrollable-chart-container::-webkit-scrollbar{height:4px}}\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"] }]
7519
+ 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:12px}.lib-axis-group-label{font-size:12px;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:11px;line-height:13px;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;padding:4px 8px;box-sizing:border-box}.title-top-text{color:var(--font-color)!important;font-size:12px;font-weight:600}.title-bar-name{color:var(--font-color)!important;font-size:14px;font-weight:700;text-transform:capitalize}.title-bottom-text{color:var(--font-color)!important;font-size:11px}.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}.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}@media (max-width: 767px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:9px!important}.lib-axis-group-label{font-size:10px!important}.dots{font-size:8px!important}.lib-xaxis-labels-texts-drilldown{writing-mode:sideways-lr;font-size:9px!important}.target-display{font-size:9px;line-height:11px}.title-top-text{font-size:10px}.title-bar-name{font-size:12px}.zoomIcons{width:26px;height:26px}.lib-verticalstack-labels-ontop-weklycharts{font-size:9px}}@media (min-width: 768px) and (max-width: 1023px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:10px!important}.lib-axis-group-label{font-size:11px!important}.dots{font-size:9px!important}.target-display{font-size:10px;line-height:12px}.title-top-text{font-size:11px}.title-bar-name{font-size:13px}.zoomIcons{width:28px;height:28px}}@media (min-width: 1024px) and (max-width: 1365px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:11px!important}.lib-axis-group-label{font-size:12px!important}.dots{font-size:10px!important}}@media (min-width: 1366px) and (max-width: 1919px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:12px!important}.lib-axis-group-label{font-size:13px!important}.dots{font-size:11px!important}}@media (min-width: 1920px) and (max-width: 2559px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:14px!important}.lib-axis-group-label{font-size:14px!important}.dots{font-size:12px!important}.target-display{font-size:13px;line-height:15px}.title-top-text{font-size:14px}.title-bar-name{font-size:16px}}@media (min-width: 2560px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:16px!important}.lib-axis-group-label{font-size:15px!important}.dots{font-size:14px!important}.target-display{font-size:14px;line-height:16px}.title-top-text{font-size:15px}.title-bar-name{font-size:18px}.zoomIcons{width:34px;height:34px}}@media (orientation: portrait) and (max-width: 767px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:8px!important}.lib-xaxis-labels-texts-drilldown{font-size:8px!important}}@media (orientation: landscape) and (min-width: 768px) and (max-width: 1023px){.lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-size:11px!important}}\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"] }]
7479
7520
  }], ctorParameters: () => [], propDecorators: { containerElt: [{
7480
7521
  type: ViewChild,
7481
7522
  args: ['verticalstackedchartcontainer', { static: true }]
@@ -7584,1242 +7625,6 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
7584
7625
  get isAlertEnabled() {
7585
7626
  return this.chartConfiguration?.headerMenuOptions?.some((option) => option.id === 'editAlert');
7586
7627
  }
7587
- // initializegroupChart() {
7588
- // var self = this;
7589
- // let data = [];
7590
- // let metaData: any = null;
7591
- // let keyList = null;
7592
- // let lineData = null;
7593
- // let colorMap = {};
7594
- // var formatFromBackend;
7595
- // var formatForHugeNumbers;
7596
- // const isMobile = window.innerWidth < 576;
7597
- // const isTablet = window.innerWidth >= 576 && window.innerWidth < 992;
7598
- // const isDesktop = window.innerWidth >= 992;
7599
- // let isria = this.customChartConfiguration.isRia
7600
- // var x: any;
7601
- // var alternate_text = false;
7602
- // var short_tick_length = 4;
7603
- // var long_tick_length = 16;
7604
- // /**
7605
- // * longer tick length needed for weekly charts
7606
- // */
7607
- // var short_tick_length_bg = 5;
7608
- // var long_tick_length_bg = 30;
7609
- // var leftAndRightSpaces = 50;
7610
- // var rightSvgWidth = 60;
7611
- // var tempScale;
7612
- // for (var i in this.defaultConfiguration) {
7613
- // this.chartConfiguration[i] = ChartHelper.getValueByConfigurationType(
7614
- // i,
7615
- // this.defaultConfiguration,
7616
- // this.customChartConfiguration
7617
- // );
7618
- // }
7619
- // data = this.chartData.data;
7620
- // metaData = this.chartData.metaData;
7621
- // lineData = this.chartData.lineData;
7622
- // // if (lineData || this.chartData.targetLineData) {
7623
- // // rightSvgWidth = 60;
7624
- // // }
7625
- // if (!metaData.colorAboveTarget) {
7626
- // metaData['colorAboveTarget'] = metaData.colors;
7627
- // }
7628
- // colorMap = metaData.colors;
7629
- // keyList = metaData.keyList;
7630
- // var chartContainer = d3.select(this.containerElt.nativeElement);
7631
- // var verticalstackedcontainer = d3.select(
7632
- // this.groupcontainerElt.nativeElement
7633
- // );
7634
- // var margin = this.chartConfiguration.margin;
7635
- // const { width, height } = this.calculateChartDimensions(
7636
- // chartContainer,
7637
- // verticalstackedcontainer,
7638
- // margin,
7639
- // self
7640
- // );
7641
- // /**
7642
- // * for hiding header
7643
- // * used by weekly charts
7644
- // */
7645
- // if (this.chartConfiguration.isHeaderVisible != undefined)
7646
- // this.isHeaderVisible = this.chartConfiguration.isHeaderVisible;
7647
- // /**
7648
- // * for hiding legends
7649
- // * used by weekly charts
7650
- // */
7651
- // if (this.chartConfiguration.legendVisible != undefined) {
7652
- // this.legendVisible = this.chartConfiguration.legendVisible;
7653
- // }
7654
- // /**
7655
- // * for removing background color so that it can take parents color
7656
- // *
7657
- // */
7658
- // if (this.chartConfiguration.isTransparentBackground != undefined) {
7659
- // this.isTransparentBackground =
7660
- // this.chartConfiguration.isTransparentBackground;
7661
- // }
7662
- // /**
7663
- // * format data values based on configuration received
7664
- // */
7665
- // if (this.chartConfiguration.textFormatter != undefined) {
7666
- // formatFromBackend = ChartHelper.dataValueFormatter(
7667
- // this.chartConfiguration.textFormatter
7668
- // );
7669
- // formatForHugeNumbers = ChartHelper.dataValueFormatter('.2s');
7670
- // }
7671
- // const {
7672
- // outerContainer,
7673
- // svgYAxisLeft,
7674
- // svgYAxisRight,
7675
- // innerContainer,
7676
- // svg
7677
- // } = this.createChartContainers(chartContainer, margin, height, rightSvgWidth, self, width);
7678
- // var subgroups: any = keyList;
7679
- // var groups = d3
7680
- // .map(data, function (d) {
7681
- // return d.name;
7682
- // })
7683
- // .keys();
7684
- // /**
7685
- // * x axis range made similar to line chart or vertical stack so that all the charts will get aligned with each other.
7686
- // */
7687
- // if (this.chartConfiguration.isMultiChartGridLine != undefined) {
7688
- // x = d3
7689
- // .scaleBand()
7690
- // .rangeRound([width, 0])
7691
- // .align(0.5)
7692
- // .padding([0.5])
7693
- // .domain(
7694
- // data.map(function (d: any) {
7695
- // return d.name.toLowerCase();
7696
- // })
7697
- // );
7698
- // } else {
7699
- // x = d3
7700
- // .scaleBand()
7701
- // .domain(groups)
7702
- // .range([leftAndRightSpaces, width - rightSvgWidth - leftAndRightSpaces])
7703
- // .padding([0.3]);
7704
- // }
7705
- // // x.bandwidth(96);
7706
- // var xScaleFromOrigin = d3
7707
- // .scaleBand()
7708
- // .domain(groups)
7709
- // .range([0, width - rightSvgWidth]);
7710
- // // .padding([0.2]);
7711
- // if (this.chartConfiguration.isMultiChartGridLine == undefined) {
7712
- // /**
7713
- // * normal ticks for all dashboard charts
7714
- // */
7715
- // svg
7716
- // .append('g')
7717
- // .attr('class', 'x1 axis1')
7718
- // .attr('transform', 'translate(0,' + height + ')')
7719
- // .call(d3.axisBottom(x))
7720
- // .call((g) => g.select('.domain').remove());
7721
- // svg.selectAll('g.x1.axis1 g.tick line').remove();
7722
- // // Only move x-axis labels further down for grouped charts if there is no xLabel
7723
- // if (subgroups.length > 1 && !metaData.xLabel) {
7724
- // svg
7725
- // .selectAll('g.x1.axis1 g.tick text')
7726
- // .attr('class', 'lib-xaxis-labels-texts-drilldown')
7727
- // .style('fill', 'var(--chart-text-color)')
7728
- // .attr('y', 32); // Increase distance from bars (default is ~9)
7729
- // } else {
7730
- // svg
7731
- // .selectAll('g.x1.axis1 g.tick text')
7732
- // .attr('class', 'lib-xaxis-labels-texts-drilldown')
7733
- // .style('fill', 'var(--chart-text-color)');
7734
- // }
7735
- // }
7736
- // else {
7737
- // /**
7738
- // * bigger ticks for weekly charts and more space from x axis to labels
7739
- // */
7740
- // /**
7741
- // * draw x axis
7742
- // */
7743
- // svg
7744
- // .append('g')
7745
- // .attr('class', 'x1 axis1')
7746
- // .attr('transform', 'translate(0,' + height + ')')
7747
- // .call(d3.axisBottom(x).tickSize(0))
7748
- // .call((g) => g.select('.domain').attr('fill', 'none'));
7749
- // /**
7750
- // * tick line size in alternate fashion
7751
- // */
7752
- // svg.selectAll('g.x1.axis1 g.tick line').attr('y2', function () {
7753
- // if (
7754
- // alternate_text &&
7755
- // self.chartConfiguration.isNoAlternateXaxisText == undefined
7756
- // ) {
7757
- // alternate_text = false;
7758
- // return long_tick_length_bg - 7;
7759
- // } else {
7760
- // alternate_text = true;
7761
- // return short_tick_length_bg - 4;
7762
- // }
7763
- // });
7764
- // /**
7765
- // * reset the flag so that values can be shown in same alternate fashion
7766
- // */
7767
- // alternate_text = false;
7768
- // /**
7769
- // * print x-axis label texts
7770
- // * used by weekly charts
7771
- // */
7772
- // svg
7773
- // .selectAll('g.x1.axis1 g.tick text')
7774
- // .attr('class', 'lib-xaxis-labels-texts-weeklycharts')
7775
- // .attr('y', function () {
7776
- // // Minimize gap in maximized (fullscreen) view for weekly charts
7777
- // if (self.chartConfiguration.isFullScreen) {
7778
- // return short_tick_length_bg;
7779
- // }
7780
- // if (alternate_text) {
7781
- // alternate_text = false;
7782
- // return long_tick_length_bg;
7783
- // } else {
7784
- // alternate_text = true;
7785
- // return short_tick_length_bg;
7786
- // }
7787
- // });
7788
- // }
7789
- // if (self.chartConfiguration.xLabelsOnSameLine) {
7790
- // const xAxisLabels = svg
7791
- // .selectAll('g.x1.axis1 g.tick text')
7792
- // .attr('class', 'lib-xaxis-labels-texts-drilldown')
7793
- // .style('font-size', this.isHeaderVisible ? '18px' : '14px')
7794
- // .attr('text-anchor', 'middle')
7795
- // .attr('y', function(d) {
7796
- // // For grouped bar charts with many bars and xLabel present, only add 5 if the label is a date
7797
- // if (subgroups.length > 1 && data.length > 8 && metaData.xLabel) {
7798
- // const isDateLabel = /\d{2,4}[-\/]/.test(d);
7799
- // if (self.chartConfiguration.isFullScreen) {
7800
- // return isDateLabel ? short_tick_length_bg + 14 : short_tick_length_bg;
7801
- // }
7802
- // return isDateLabel ? short_tick_length_bg + 14 : short_tick_length_bg;
7803
- // }
7804
- // // For grouped bar charts with many bars and NO xLabel, add space as before, but reduce in fullscreen
7805
- // if (subgroups.length > 1 && data.length > 8 && !metaData.xLabel) {
7806
- // const chartHasExtraBottom = (self.chartConfiguration.margin && self.chartConfiguration.margin.bottom >= 40);
7807
- // if (self.chartConfiguration.isFullScreen) {
7808
- // // Reduce extra gap in maximized view
7809
- // return short_tick_length_bg + 2;
7810
- // }
7811
- // return chartHasExtraBottom ? short_tick_length_bg : short_tick_length_bg + 10;
7812
- // }
7813
- // // Default/fallback logic for other cases
7814
- // let baseY = self.isHeaderVisible ? short_tick_length_bg + 25 : short_tick_length_bg;
7815
- // if (
7816
- // subgroups.length > 1 &&
7817
- // !metaData.xLabel &&
7818
- // (/\d{2,4}[-\/]\d{2}[-\/]\d{2,4}/.test(d) || /\d{2,4}[-\/]\d{2,4}/.test(d))
7819
- // ) {
7820
- // baseY = self.isHeaderVisible ? short_tick_length_bg + 15 : short_tick_length_bg + 25;
7821
- // }
7822
- // if (/\d{2,4}[-\/]\d{2,4}/.test(d) && d.indexOf(' ') > -1) {
7823
- // baseY += 4;
7824
- // }
7825
- // // In maximized view, reduce baseY slightly for grouped bars
7826
- // if (self.chartConfiguration.isFullScreen && subgroups.length > 1) {
7827
- // baseY = Math.max(short_tick_length_bg, baseY - 10);
7828
- // }
7829
- // return baseY;
7830
- // })
7831
- // .attr('x', function (d) {
7832
- // if (self.chartData.data.length > 8 && !self.isZoomedOut) {
7833
- // return 1; // Move first line text slightly to the left in zoom-in view for better alignment
7834
- // }
7835
- // return 0; // Default position
7836
- // })
7837
- // .text(function (d) {
7838
- // var isValueToBeIgnored = false;
7839
- // if (isMobile && !self.isHeaderVisible) {
7840
- // let firstPart = d.split(/[\s\-]+/)[0];
7841
- // return firstPart.substring(0, 3).toLowerCase();
7842
- // }
7843
- // (data as any[]).map((indiv: any) => {
7844
- // if (
7845
- // indiv.name &&
7846
- // indiv.name.toLowerCase() == d.trim().toLowerCase() &&
7847
- // indiv[metaData.keyList[0]] == -1
7848
- // ) {
7849
- // isValueToBeIgnored = true;
7850
- // }
7851
- // });
7852
- // if (isValueToBeIgnored) {
7853
- // return '';
7854
- // }
7855
- // // Always add space before and after hyphen for date range labels, even when header is visible and label is single line
7856
- // // Apply for grouped bar charts and single bar charts, header visible, single line
7857
- // const dateRangeRegex = /(\d{2,4}[-\/]\d{2}[-\/]\d{2,4})\s*-\s*(\d{2,4}[-\/]\d{2}[-\/]\d{2,4})/;
7858
- // if (dateRangeRegex.test(d.trim())) {
7859
- // return d.trim().replace(dateRangeRegex, (m, d1, d2) => `${d1} - ${d2}`);
7860
- // }
7861
- // // Split date and week labels into two lines in grouped bar zoom-in view (and minimized view)
7862
- // const isDateLabel = /\d{2,4}[-\/]/.test(d);
7863
- // const isWeekLabel = /week|wk|w\d+/i.test(d);
7864
- // if (
7865
- // subgroups.length > 1 && !self.isZoomedOut && data.length > 8 && d.indexOf(' ') > -1 && (isDateLabel || isWeekLabel)
7866
- // ) {
7867
- // var first = d.substring(0, d.indexOf(' '));
7868
- // var second = d.substring(d.indexOf(' ') + 1).trim();
7869
- // return first + '\n' + second;
7870
- // }
7871
- // // Also keep previous logic for minimized view
7872
- // if (isDateLabel) {
7873
- // if (!self.isHeaderVisible && data.length > 8 && d.indexOf(' ') > -1) {
7874
- // var first = d.substring(0, d.indexOf(' '));
7875
- // var second = d.substring(d.indexOf(' ') + 1).trim();
7876
- // return first + '\n' + second;
7877
- // } else {
7878
- // return d;
7879
- // }
7880
- // }
7881
- // if (d.trim().indexOf(' ') > -1) {
7882
- // return d.trim().substring(0, d.indexOf(' ')).toLowerCase();
7883
- // }
7884
- // return d.toLowerCase();
7885
- // // If label looks like a date (contains digits and - or /)
7886
- // const isDateLabel2 = /\d{2,4}[-\/]/.test(d);
7887
- // // Only split date/week labels if there are many grouped bars and header is not visible
7888
- // if (isDateLabel) {
7889
- // if (!self.isHeaderVisible && data.length > 8 && d.indexOf(' ') > -1) {
7890
- // var first = d.substring(0, d.indexOf(' '));
7891
- // var second = d.substring(d.indexOf(' ') + 1).trim();
7892
- // return first + '\n' + second;
7893
- // } else {
7894
- // return d;
7895
- // }
7896
- // }
7897
- // if (d.trim().indexOf(' ') > -1) {
7898
- // return d.trim().substring(0, d.indexOf(' ')).toLowerCase();
7899
- // }
7900
- // return d.toLowerCase();
7901
- // });
7902
- // // Now apply writing-mode: sideways-lr for grouped charts with date labels in zoomed-out view and many bars
7903
- // xAxisLabels.each(function(this: SVGTextElement, d: any) {
7904
- // // Only apply writing-mode for exact date labels, not those containing 'week' or similar
7905
- // const isDateLabel = /^(\d{2,4}[-\/])?\d{2,4}[-\/]\d{2,4}$/.test(d.trim());
7906
- // const isWeekLabel = /week|wk|w\d+/i.test(d);
7907
- // if (subgroups.length > 1 && self.isZoomedOut && data.length > 8 && isDateLabel && !isWeekLabel) {
7908
- // d3.select(this).style('writing-mode', 'sideways-lr');
7909
- // }
7910
- // });
7911
- // if (!isMobile) {
7912
- // svg
7913
- // .selectAll('g.x1.axis1 g.tick')
7914
- // .filter(function (d) {
7915
- // return !/\d{2,4}[-\/]/.test(d); // Only process non-date labels
7916
- // })
7917
- // .append('text')
7918
- // .attr('class', 'lib-xaxis-labels-texts-drilldown')
7919
- // .attr('y', long_tick_length_bg)
7920
- // .attr('fill', 'var(--chart-text-color)')
7921
- // .attr('x', function (d) {
7922
- // if (self.chartData.data.length > 8 && !self.isZoomedOut) {
7923
- // return 1; // Move text slightly to the left
7924
- // }
7925
- // return 0; // Default position
7926
- // })
7927
- // .text(function (d) {
7928
- // if (d.trim().indexOf(' ') > -1) {
7929
- // return d.trim().substring(d.indexOf(' '), d.length).toLowerCase();
7930
- // }
7931
- // return '';
7932
- // });
7933
- // }
7934
- // }
7935
- // if (isria && self.chartData.data.length > 8) {
7936
- // svg
7937
- // .selectAll('g.x1.axis1 g.tick text')
7938
- // .classed('mobile-xaxis-override', true)
7939
- // .text(function (d: string) {
7940
- // return d.substring(0, 3);
7941
- // })
7942
- // .style('font-size', '12px')
7943
- // .attr('y', 5)
7944
- // .attr('x', 5)
7945
- // .style('text-anchor', 'middle');
7946
- // }
7947
- // if (isMobile && !this.isHeaderVisible) {
7948
- // svg
7949
- // .selectAll('g.x1.axis1 g.tick text')
7950
- // .classed('mobile-xaxis-override', true);
7951
- // }
7952
- // /**y scale for left y axis */
7953
- // var y = d3.scaleLinear().rangeRound([height, 0]);
7954
- // var maxValue = d3.max(data, (d) => d3.max(keyList, (key) => +d[key]));
7955
- // if (maxValue == 0) {
7956
- // if (this.chartData.targetLineData) {
7957
- // maxValue = this.chartData.targetLineData.target + 20;
7958
- // } else {
7959
- // maxValue = 100;
7960
- // }
7961
- // }
7962
- // if (this.chartConfiguration.customYscale) {
7963
- // /**
7964
- // * increase y-scale so that values wont cross or exceed out of range
7965
- // * used in weekly charts
7966
- // */
7967
- // maxValue = maxValue * this.chartConfiguration.customYscale;
7968
- // }
7969
- // if (
7970
- // this.chartData.targetLineData &&
7971
- // maxValue < this.chartData.targetLineData.target
7972
- // ) {
7973
- // maxValue =
7974
- // maxValue < 10 && this.chartData.targetLineData.target < 10
7975
- // ? this.chartData.targetLineData.target + 3
7976
- // : this.chartData.targetLineData.target + 20;
7977
- // }
7978
- // y.domain([0, maxValue]).nice();
7979
- // let lineYscale;
7980
- // if (lineData != null) {
7981
- // let maxLineValue = d3.max(lineData, function (d) {
7982
- // return +d.value;
7983
- // });
7984
- // maxLineValue = maxLineValue * this.chartConfiguration.customYscale;
7985
- // let minLineValue = d3.min(lineData, function (d) {
7986
- // return +d.value;
7987
- // });
7988
- // if (maxLineValue > 0) minLineValue = minLineValue - 3;
7989
- // if (minLineValue > 0) {
7990
- // minLineValue = 0;
7991
- // }
7992
- // lineYscale = d3
7993
- // .scaleLinear()
7994
- // .domain([minLineValue, maxLineValue])
7995
- // .range([height, minLineValue]);
7996
- // }
7997
- // let yLineAxis;
7998
- // if (lineYscale != null) {
7999
- // yLineAxis = d3
8000
- // .axisRight(lineYscale)
8001
- // .ticks(self.chartConfiguration.numberOfYTicks)
8002
- // .tickSize(0)
8003
- // .tickFormat(self.chartConfiguration.yLineAxisLabelFomatter);
8004
- // }
8005
- // /**
8006
- // * show x-axis grid between labels
8007
- // * used by weekly charts
8008
- // */
8009
- // if (self.chartConfiguration.isXgridBetweenLabels) {
8010
- // svg
8011
- // .append('g')
8012
- // .attr('class', 'grid')
8013
- // .attr(
8014
- // 'transform',
8015
- // 'translate(' + x.bandwidth() / 2 + ',' + height + ')'
8016
- // )
8017
- // .call(d3.axisBottom(x).tickSize(-height).tickFormat(''))
8018
- // .style('stroke-dasharray', '5 5')
8019
- // .style('color', 'var(--chart-grid-color, #999999)') // Use CSS variable
8020
- // .call((g) => g.select('.domain').remove());
8021
- // }
8022
- // if (this.chartConfiguration.yAxisGrid) {
8023
- // svg
8024
- // .append('g')
8025
- // .call(
8026
- // d3
8027
- // .axisLeft(y)
8028
- // .ticks(self.chartConfiguration.numberOfYTicks)
8029
- // .tickSize(-width)
8030
- // )
8031
- // .style('color', 'var(--chart-axis-color, #B9B9B9)')
8032
- // .style('opacity', '0.5')
8033
- // .call((g) => {
8034
- // g.select('.domain')
8035
- // .remove()
8036
- // .style('stroke', 'var(--chart-domain-color, #000000)'); // Add CSS variable for domain
8037
- // });
8038
- // } else {
8039
- // svg
8040
- // .append('g')
8041
- // .call(d3.axisLeft(y).ticks(self.chartConfiguration.numberOfYTicks))
8042
- // .style('color', 'var(--chart-axis-color, #B9B9B9)')
8043
- // .style('opacity', '0.5')
8044
- // .call((g) => {
8045
- // g.select('.domain')
8046
- // .style('stroke', 'var(--chart-domain-color, #000000)') // Add CSS variable for domain
8047
- // .style('stroke-width', '1px'); // Ensure visibility
8048
- // });
8049
- // }
8050
- // var xSubgroup = d3.scaleBand().domain(subgroups);
8051
- // if (subgroups.length > 1 && !this.isZoomedOut) {
8052
- // // For grouped bar charts in zoom-in view, use full x.bandwidth() for subgroups
8053
- // xSubgroup.range([0, x.bandwidth()]);
8054
- // } else if (subgroups.length === 1 && !this.isZoomedOut) {
8055
- // // For single-bar (non-grouped) charts in zoom-in view, set bar width to 100 (increased from 80)
8056
- // xSubgroup.range([0, 100]);
8057
- // } else if (this.chartConfiguration.isMultiChartGridLine == undefined) {
8058
- // xSubgroup.range([0, x.bandwidth()]);
8059
- // } else {
8060
- // // used to make grouped bars with lesser width as we are not using padding for width
8061
- // xSubgroup.range([0, x.bandwidth()]);
8062
- // }
8063
- // // if (this.chartConfiguration.isDrilldownChart) {
8064
- // // }
8065
- // var color = d3
8066
- // .scaleOrdinal()
8067
- // .domain(subgroups)
8068
- // .range(Object.values(metaData.colors));
8069
- // // var colorAboveTarget = d3
8070
- // // .scaleOrdinal()
8071
- // // .domain(subgroups)
8072
- // // .range(Object.values(metaData.colorAboveTarget));
8073
- // var state = svg
8074
- // .append('g')
8075
- // .selectAll('.state')
8076
- // .data(data)
8077
- // .enter()
8078
- // .append('g')
8079
- // .attr('transform', function (d) {
8080
- // return 'translate(' + x(d.name) + ',0)';
8081
- // });
8082
- // state
8083
- // .selectAll('rect')
8084
- // .data(function (d) {
8085
- // let newList: any = [];
8086
- // subgroups.map(function (key) {
8087
- // // if (key !== "group") {
8088
- // let obj: any = { key: key, value: d[key], name: d.name };
8089
- // newList.push(obj);
8090
- // // }
8091
- // });
8092
- // return newList;
8093
- // })
8094
- // .enter()
8095
- // .append('rect')
8096
- // .attr('class', 'bars')
8097
- // .on('click', function (d) {
8098
- // if (d.key != 'Target') {
8099
- // if (
8100
- // !metaData.barWithoutClick ||
8101
- // !metaData.barWithoutClick.length ||
8102
- // (!metaData.barWithoutClick.includes(d?.name) &&
8103
- // !metaData.barWithoutClick.includes(d?.key))
8104
- // )
8105
- // // self.handleClick(d.data.name);
8106
- // self.handleClick(d);
8107
- // }
8108
- // })
8109
- // .attr('x', function (d) {
8110
- // if (self.chartConfiguration.isDrilldownChart) {
8111
- // data.map((indiv: any) => {
8112
- // if (indiv.name == d.name) {
8113
- // let keys = Object.keys(indiv).filter((temp, i) => i != 0);
8114
- // tempScale = d3.scaleBand().domain(keys).range([0, x.bandwidth()]);
8115
- // if (x.bandwidth() > 100) {
8116
- // // Increase bar width a bit in zoom-in view
8117
- // let reducedBarWidth = 60;
8118
- // if (!self.isZoomedOut) {
8119
- // reducedBarWidth = 30;
8120
- // }
8121
- // if (self.chartData.data.length == 1) {
8122
- // if (Object.keys(self.chartData.data[0]).length == 2) {
8123
- // tempScale.range([
8124
- // 0 + (x.bandwidth() - reducedBarWidth) / 2,
8125
- // x.bandwidth() - (x.bandwidth() - reducedBarWidth) / 2,
8126
- // ]);
8127
- // } else
8128
- // tempScale.range([
8129
- // 0 + (x.bandwidth() - reducedBarWidth) / 2,
8130
- // x.bandwidth() - (x.bandwidth() - reducedBarWidth) / 2,
8131
- // ]);
8132
- // } else
8133
- // tempScale.range([
8134
- // 0 + (x.bandwidth() - reducedBarWidth) / 2,
8135
- // x.bandwidth() - (x.bandwidth() - reducedBarWidth) / 2,
8136
- // ]);
8137
- // }
8138
- // }
8139
- // });
8140
- // return tempScale(d.key);
8141
- // }
8142
- // return xSubgroup(d.key);
8143
- // })
8144
- // .attr('y', function (d) {
8145
- // if (d.value == -1) {
8146
- // return y(0);
8147
- // }
8148
- // if (d.value >= 0) {
8149
- // const barHeight = height - y(d.value);
8150
- // const minHeight = self.chartConfiguration.defaultBarHeight || 2;
8151
- // return barHeight < minHeight ? y(0) - minHeight : y(d.value);
8152
- // }
8153
- // return y(0);
8154
- // })
8155
- // .attr('width', function (d) {
8156
- // // For grouped bar charts in zoom-in view, set bar width to 50 for maximum thickness
8157
- // if (subgroups.length > 1 && !self.isZoomedOut) {
8158
- // return 50;
8159
- // }
8160
- // // For single-bar (non-grouped) charts in zoom-in view, set bar width to 80
8161
- // if (subgroups.length === 1 && !self.isZoomedOut) {
8162
- // return 80;
8163
- // }
8164
- // let tempScale = d3.scaleBand().domain([]).range([0, 0]);
8165
- // // Default logic for other chart types
8166
- // if (self.chartConfiguration.isDrilldownChart) {
8167
- // data.map((indiv: any) => {
8168
- // if (indiv.name == d.name) {
8169
- // let keys = Object.keys(indiv).filter((temp, i) => i != 0);
8170
- // tempScale = d3.scaleBand().domain(keys).range([0, x.bandwidth()]);
8171
- // if (x.bandwidth() > 100) {
8172
- // // Increase bar width a bit in zoom-in view
8173
- // let reducedBarWidth = 60;
8174
- // if (!self.isZoomedOut) {
8175
- // reducedBarWidth = 100;
8176
- // }
8177
- // if (self.chartData.data.length == 1) {
8178
- // if (Object.keys(self.chartData.data[0]).length == 2) {
8179
- // tempScale.range([
8180
- // 0 + (x.bandwidth() - reducedBarWidth) / 2,
8181
- // x.bandwidth() - (x.bandwidth() - reducedBarWidth) / 2,
8182
- // ]);
8183
- // } else
8184
- // tempScale.range([
8185
- // 0 + (x.bandwidth() - reducedBarWidth) / 2,
8186
- // x.bandwidth() - (x.bandwidth() - reducedBarWidth) / 2,
8187
- // ]);
8188
- // } else
8189
- // tempScale.range([
8190
- // 0 + (x.bandwidth() - reducedBarWidth) / 2,
8191
- // x.bandwidth() - (x.bandwidth() - reducedBarWidth) / 2,
8192
- // ]);
8193
- // }
8194
- // }
8195
- // });
8196
- // return self.isZoomedOut
8197
- // ? tempScale.bandwidth()
8198
- // : self.chartData.data.length && self.chartData.data.length > 8
8199
- // ? tempScale.bandwidth()
8200
- // : tempScale.bandwidth();
8201
- // }
8202
- // return self.isZoomedOut
8203
- // ? tempScale.bandwidth()
8204
- // : self.chartData.data.length && self.chartData.data.length > 8
8205
- // ? tempScale.bandwidth()
8206
- // : tempScale.bandwidth();
8207
- // })
8208
- // .attr('height', function (d) {
8209
- // if (d.value == -1) {
8210
- // return height - y(0);
8211
- // }
8212
- // if (d.value >= 0) {
8213
- // const barHeight = height - y(d.value);
8214
- // const minHeight = self.chartConfiguration.defaultBarHeight || 2;
8215
- // return Math.max(barHeight, minHeight);
8216
- // }
8217
- // return height - y(0);
8218
- // })
8219
- // .style('cursor', function (d) {
8220
- // if (metaData.hasDrillDown && !isria) return 'pointer';
8221
- // else return 'default';
8222
- // })
8223
- // .attr('fill', function (d) {
8224
- // if (
8225
- // d.value &&
8226
- // self.chartData.targetLineData &&
8227
- // d.value >= parseFloat(self.chartData.targetLineData.target) &&
8228
- // self.chartData.metaData.colorAboveTarget
8229
- // ) {
8230
- // const key = d.key.toLowerCase();
8231
- // const colorAboveTarget = Object.keys(self.chartData.metaData.colorAboveTarget).find(
8232
- // k => k.toLowerCase() === key
8233
- // );
8234
- // if (colorAboveTarget) {
8235
- // return self.chartData.metaData.colorAboveTarget[colorAboveTarget];
8236
- // }
8237
- // }
8238
- // return self.chartData.metaData.colors[d.key];
8239
- // });
8240
- // /**
8241
- // * display angled texts on the bars
8242
- // */
8243
- // if (this.chartConfiguration.textsOnBar != undefined && !this.isZoomedOut) {
8244
- // state
8245
- // .selectAll('text')
8246
- // .data(function (d) {
8247
- // let newList: any = [];
8248
- // subgroups.map(function (key) {
8249
- // let obj: any = { key: key, value: d[key], name: d.name };
8250
- // newList.push(obj);
8251
- // });
8252
- // return newList;
8253
- // })
8254
- // .enter()
8255
- // .append('text')
8256
- // .attr('fill', 'var(--chart-text-color)')
8257
- // .attr('x', function (d) {
8258
- // return 0;
8259
- // })
8260
- // .attr('y', function (d) {
8261
- // return 0;
8262
- // })
8263
- // .attr('class', 'lib-data-labels-weeklycharts')
8264
- // .text(function (d) {
8265
- // return d.key && d.value
8266
- // ? d.key.length > 20
8267
- // ? d.key.substring(0, 17) + '...'
8268
- // : d.key
8269
- // : '';
8270
- // })
8271
- // .style('fill', function (d) {
8272
- // return '#000';
8273
- // })
8274
- // .style('font-weight', 'bold')
8275
- // .style('font-size', function (d) {
8276
- // if (self.isZoomedOut) {
8277
- // return '9px'; // 👈 Zoomed out mode
8278
- // }
8279
- // if (self.chartConfiguration.isDrilldownChart) {
8280
- // if (window.innerWidth > 1900) {
8281
- // return '18px';
8282
- // } else if (window.innerWidth < 1400) {
8283
- // return '10px';
8284
- // } else {
8285
- // return '14px';
8286
- // }
8287
- // } else {
8288
- // return '14px';
8289
- // }
8290
- // })
8291
- // .attr('transform', function (d) {
8292
- // data.map((indiv: any) => {
8293
- // if (indiv.name == d.name) {
8294
- // let keys = Object.keys(indiv).filter((temp, i) => i != 0);
8295
- // var temp;
8296
- // tempScale = d3.scaleBand().domain(keys).range([0, x.bandwidth()]);
8297
- // if (x.bandwidth() > 100) {
8298
- // if (self.chartData.data.length == 1) {
8299
- // if (Object.keys(self.chartData.data[0]).length == 2) {
8300
- // tempScale.range([
8301
- // 0 + (x.bandwidth() - 200) / 2,
8302
- // x.bandwidth() - (x.bandwidth() - 200) / 2,
8303
- // ]);
8304
- // // .padding(0.05);
8305
- // } else
8306
- // tempScale.range([
8307
- // 0 + (x.bandwidth() - 300) / 2,
8308
- // x.bandwidth() - (x.bandwidth() - 300) / 2,
8309
- // ]);
8310
- // // .padding(0.05);
8311
- // } else
8312
- // tempScale.range([
8313
- // 0 + (x.bandwidth() - 125) / 2,
8314
- // x.bandwidth() - (x.bandwidth() - 125) / 2,
8315
- // ]);
8316
- // }
8317
- // }
8318
- // });
8319
- // /**
8320
- // * if set, then all texts ll be horizontal
8321
- // */
8322
- // if (self.chartConfiguration.textAlwaysHorizontal) {
8323
- // return (
8324
- // 'translate(' + xSubgroup(d.key) + ',' + (y(d.value) - 3) + ')'
8325
- // );
8326
- // }
8327
- // /**
8328
- // * rotate texts having more than one digits
8329
- // */
8330
- // // if (d.value > 9)
8331
- // if (!isNaN(tempScale(d.key)))
8332
- // return (
8333
- // 'translate(' +
8334
- // (tempScale(d.key) + tempScale.bandwidth() * 0.55) +
8335
- // ',' +
8336
- // (y(0) - 10) +
8337
- // ') rotate(270)'
8338
- // );
8339
- // return 'translate(0,0)';
8340
- // // else
8341
- // // return (
8342
- // // 'translate(' +
8343
- // // (tempScale(d.key) + tempScale.bandwidth() / 2) +
8344
- // // ',' +
8345
- // // y(0) +
8346
- // // ')'
8347
- // // );
8348
- // })
8349
- // .on('click', function (d) {
8350
- // if (
8351
- // !metaData.barWithoutClick ||
8352
- // !metaData.barWithoutClick.length ||
8353
- // (!metaData.barWithoutClick.includes(d?.name) &&
8354
- // !metaData.barWithoutClick.includes(d?.key))
8355
- // )
8356
- // self.handleClick(d);
8357
- // });
8358
- // if (!isria) {
8359
- // state
8360
- // .selectAll('.lib-data-labels-weeklycharts')
8361
- // .on('mouseout', handleMouseOut)
8362
- // .on('mouseover', handleMouseOver);
8363
- // }
8364
- // }
8365
- // if (this.chartConfiguration.displayTitleOnTop || (
8366
- // this.chartConfiguration.textsOnBar == undefined &&
8367
- // this.chartConfiguration.displayTitleOnTop == undefined
8368
- // )) {
8369
- // if (!isria) {
8370
- // state
8371
- // .selectAll('rect')
8372
- // .on('mouseout', handleMouseOut)
8373
- // .on('mouseover', handleMouseOver);
8374
- // }
8375
- // }
8376
- // function handleMouseOver(d, i) {
8377
- // svg.selectAll('.lib-verticalstack-title-ontop').remove();
8378
- // svg
8379
- // .append('foreignObject')
8380
- // .attr('x', function () {
8381
- // // ...existing code for tempScale calculation...
8382
- // var elementsCounter;
8383
- // data.map((indiv: any) => {
8384
- // if (indiv.name == d.name) {
8385
- // let keys = Object.keys(indiv).filter((temp, i) => i != 0);
8386
- // elementsCounter = keys.length;
8387
- // tempScale = d3.scaleBand().domain(keys).range([0, x.bandwidth()]);
8388
- // if (x.bandwidth() > 100) {
8389
- // if (self.chartData.data.length == 1) {
8390
- // if (Object.keys(self.chartData.data[0]).length == 2) {
8391
- // tempScale.range([
8392
- // 0 + (x.bandwidth() - 200) / 2,
8393
- // x.bandwidth() - (x.bandwidth() - 200) / 2,
8394
- // ]);
8395
- // } else
8396
- // tempScale.range([
8397
- // 0 + (x.bandwidth() - 300) / 2,
8398
- // x.bandwidth() - (x.bandwidth() - 300) / 2,
8399
- // ]);
8400
- // } else
8401
- // tempScale.range([
8402
- // 0 + (x.bandwidth() - 125) / 2,
8403
- // x.bandwidth() - (x.bandwidth() - 125) / 2,
8404
- // ]);
8405
- // }
8406
- // }
8407
- // });
8408
- // if (metaData.hasDrillDown) {
8409
- // if (tempScale.bandwidth() + leftAndRightSpaces * 2 > 180) {
8410
- // return (
8411
- // x(d.name) + tempScale(d.key) + tempScale.bandwidth() / 2 - 90
8412
- // );
8413
- // }
8414
- // return (
8415
- // x(d.name) +
8416
- // tempScale(d.key) -
8417
- // (tempScale.bandwidth() + leftAndRightSpaces * 2) / 2 +
8418
- // tempScale.bandwidth() / 2
8419
- // );
8420
- // } else return x(d.name) + tempScale(d.key) - (tempScale.bandwidth() + leftAndRightSpaces * 2) / 2 + tempScale.bandwidth() / 2;
8421
- // })
8422
- // .attr('class', 'lib-verticalstack-title-ontop')
8423
- // .attr('y', function () {
8424
- // return y(d.value) - 3 - 40 - 10;
8425
- // })
8426
- // .attr('dy', function () {
8427
- // return d.class;
8428
- // })
8429
- // .attr('width', function () {
8430
- // data.map((indiv: any) => {
8431
- // if (indiv.name == d.name) {
8432
- // let keys = Object.keys(indiv).filter((temp, i) => i != 0);
8433
- // tempScale = d3.scaleBand().domain(keys).range([0, x.bandwidth()]);
8434
- // if (x.bandwidth() > 100) {
8435
- // if (self.chartData.data.length == 1) {
8436
- // if (Object.keys(self.chartData.data[0]).length == 2) {
8437
- // tempScale.range([
8438
- // 0 + (x.bandwidth() - 200) / 2,
8439
- // x.bandwidth() - (x.bandwidth() - 200) / 2,
8440
- // ]);
8441
- // } else
8442
- // tempScale.range([
8443
- // 0 + (x.bandwidth() - 300) / 2,
8444
- // x.bandwidth() - (x.bandwidth() - 300) / 2,
8445
- // ]);
8446
- // } else
8447
- // tempScale.range([
8448
- // 0 + (x.bandwidth() - 125) / 2,
8449
- // x.bandwidth() - (x.bandwidth() - 125) / 2,
8450
- // ]);
8451
- // }
8452
- // }
8453
- // });
8454
- // if (metaData.hasDrillDown) {
8455
- // if (tempScale.bandwidth() + leftAndRightSpaces * 2 > 180) {
8456
- // return '180px';
8457
- // }
8458
- // return tempScale.bandwidth() + leftAndRightSpaces * 2;
8459
- // } else return tempScale.bandwidth() + leftAndRightSpaces * 2;
8460
- // })
8461
- // .attr('height', 50)
8462
- // .append('xhtml:div')
8463
- // .attr('class', 'title')
8464
- // .style('z-index', 99)
8465
- // .html(function () {
8466
- // let barLabel = d.key;
8467
- // let dataType = metaData.dataType ? metaData.dataType : '';
8468
- // let value = d.value;
8469
- // let desiredText =
8470
- // '<span class="title-bar-name">' + barLabel + '</span>';
8471
- // desiredText +=
8472
- // '<span class="title-bar-value"><span>' +
8473
- // value +
8474
- // '</span>' +
8475
- // dataType +
8476
- // '</span>';
8477
- // return desiredText;
8478
- // });
8479
- // }
8480
- // function handleMouseOut(d, i) {
8481
- // svg.selectAll('.lib-verticalstack-title-ontop').remove();
8482
- // }
8483
- // svg
8484
- // .append('g')
8485
- // .attr('class', 'x2 axis2')
8486
- // .attr('transform', 'translate(0,' + height + ')')
8487
- // .style('color', 'var(--chart-axis-color, #000)') // Use CSS variable instead of hardcoded #000
8488
- // .call(d3.axisBottom(xScaleFromOrigin).tickSize(0))
8489
- // .call((g) => g.select('.domain').attr('fill', 'none'));
8490
- // svg.selectAll('g.x2.axis2 g.tick text').style('display', 'none');
8491
- // svg
8492
- // .append('g')
8493
- // .attr('class', 'lib-stacked-y-axis-text yaxis-dashed')
8494
- // .attr('style', self.chartConfiguration.yAxisCustomTextStyles)
8495
- // .attr('transform', 'translate(0,0)')
8496
- // .call(y)
8497
- // .style('display', 'none');
8498
- // svgYAxisLeft
8499
- // .append('g')
8500
- // .append('g')
8501
- // .attr('class', 'lib-yaxis-labels-texts-drilldown yaxis-dashed')
8502
- // .attr('style', self.chartConfiguration.yAxisCustomTextStyles)
8503
- // .attr('transform', 'translate(0,0)')
8504
- // .call(
8505
- // d3
8506
- // .axisLeft(y)
8507
- // .tickSize(0)
8508
- // .ticks(self.chartConfiguration.numberOfYTicks)
8509
- // .tickFormat(function (d) {
8510
- // const formatted = self.chartConfiguration.yAxisLabelFomatter
8511
- // ? self.chartConfiguration.yAxisLabelFomatter(d)
8512
- // : d;
8513
- // return formatted >= 1000 ? formatted / 1000 + 'k' : formatted;
8514
- // })
8515
- // )
8516
- // .call((g) => {
8517
- // // Style the domain line for theme support
8518
- // g.select('.domain')
8519
- // .style('stroke', 'var(--chart-domain-color, #000000)')
8520
- // .style('stroke-width', '1px');
8521
- // })
8522
- // .selectAll('text')
8523
- // .style('fill', 'var(--chart-text-color)');
8524
- // svgYAxisRight
8525
- // .append('g')
8526
- // .attr('class', 'lib-yaxis-labels-texts-drilldown yaxis-dashed')
8527
- // .attr('style', self.chartConfiguration.yAxisCustomTextStyles)
8528
- // .attr('transform', 'translate(0,0)')
8529
- // .call(y)
8530
- // .style('display', 'none');
8531
- // /**
8532
- // * hide x axis labels
8533
- // * config is there for future use
8534
- // * used by weekly charts
8535
- // */
8536
- // if (
8537
- // this.chartConfiguration.isXaxisLabelHidden != undefined &&
8538
- // this.chartConfiguration.isXaxisLabelHidden
8539
- // ) {
8540
- // d3.selectAll('g.lib-line-x-axis-text > g > text').attr(
8541
- // 'class',
8542
- // 'lib-display-hidden'
8543
- // );
8544
- // }
8545
- // /**
8546
- // * hide y axis labels
8547
- // * used by weekly charts
8548
- // */
8549
- // if (
8550
- // this.chartConfiguration.isYaxisLabelHidden != undefined &&
8551
- // this.chartConfiguration.isYaxisLabelHidden
8552
- // ) {
8553
- // d3.selectAll('.yaxis-dashed > g > text').attr(
8554
- // 'class',
8555
- // 'lib-display-hidden'
8556
- // );
8557
- // }
8558
- // /**
8559
- // * hide y axis labels
8560
- // * config is there for future use
8561
- // */
8562
- // if (
8563
- // this.chartConfiguration.isYaxisHidden != undefined &&
8564
- // this.chartConfiguration.isYaxisHidden
8565
- // ) {
8566
- // d3.selectAll('.yaxis-dashed').attr('class', 'lib-display-hidden');
8567
- // }
8568
- // /**
8569
- // * dashed y axis
8570
- // * used by weekly charts
8571
- // */
8572
- // if (
8573
- // this.chartConfiguration.isYaxisDashed != undefined &&
8574
- // this.chartConfiguration.isYaxisDashed
8575
- // ) {
8576
- // d3.selectAll('.yaxis-dashed')
8577
- // .style('stroke-dasharray', '5 5')
8578
- // .style('color', 'var(--chart-axis-color, #999999)'); // Use CSS variable
8579
- // }
8580
- // if (lineData != null) {
8581
- // if (lineData && self.chartConfiguration.showLineChartAxis) {
8582
- // svgYAxisRight
8583
- // .append('g')
8584
- // .attr('class', 'lib-stacked-y-axis-text1')
8585
- // .attr('style', self.chartConfiguration.yAxisCustomTextStyles)
8586
- // .attr('transform', 'translate(' + 0 + ',0)')
8587
- // .call(yLineAxis);
8588
- // }
8589
- // }
8590
- // /**
8591
- // * used to display y label
8592
- // */
8593
- // // if (this.isZoomedOut) {
8594
- // // svg
8595
- // // .selectAll('.lib-xaxis-labels-texts-drilldown')
8596
- // // .attr('class', 'lib-display-hidden');
8597
- // // }
8598
- // if (this.isZoomedOut) {
8599
- // svg
8600
- // .selectAll('.lib-xaxis-labels-texts-drilldown')
8601
- // .each((d, i, nodes) => {
8602
- // const text = d3.select(nodes[i]);
8603
- // const label = text.text();
8604
- // if (label.indexOf('\n') > -1) {
8605
- // const lines = label.split('\n');
8606
- // text.text(null);
8607
- // lines.forEach((line, idx) => {
8608
- // text.append('tspan')
8609
- // .text(line)
8610
- // .attr('x', 0)
8611
- // .attr('dy', idx === 0 ? '1em' : '1.1em');
8612
- // });
8613
- // } else {
8614
- // const words = label.split(' ');
8615
- // text.text(null);
8616
- // words.forEach((word, index) => {
8617
- // text.append('tspan').text(word);
8618
- // });
8619
- // }
8620
- // })
8621
- // .style('fill', 'var(--chart-text-color)')
8622
- // .attr('transform', null);
8623
- // svg
8624
- // .select('.x-axis')
8625
- // .attr('transform', `translate(0, ${height - margin.bottom + 10})`);
8626
- // }
8627
- // /**
8628
- // * used to write y labels based on configuration
8629
- // */
8630
- // if (metaData.yLabel) {
8631
- // const yPosition = isria ? 0 - margin.left / 2 - 30 : 0 - margin.left / 2 - 40;
8632
- // svgYAxisLeft
8633
- // .append('text')
8634
- // .attr('class', 'lib-axis-group-label font-size-1')
8635
- // .attr('style', self.chartConfiguration.yAxisCustomlabelStyles)
8636
- // .attr('transform', 'rotate(-90)')
8637
- // .attr('y', yPosition)
8638
- // .attr('x', 0 - height / 2)
8639
- // .attr('dy', '1em')
8640
- // .style('text-anchor', 'middle')
8641
- // .attr('fill', 'var(--chart-text-color)');
8642
- // if (this.chartConfiguration.isMultiChartGridLine === undefined) {
8643
- // svgYAxisLeft
8644
- // .selectAll('.lib-axis-group-label')
8645
- // .style('font-size', 'smaller')
8646
- // .text(metaData.yLabel);
8647
- // } else {
8648
- // svg
8649
- // .selectAll('.lib-axis-group-label')
8650
- // .attr('class', 'lib-ylabel-weeklyCharts')
8651
- // .text(metaData.yLabel.toLowerCase());
8652
- // }
8653
- // }
8654
- // if (this.chartData.targetLineData) {
8655
- // const yZero = y(this.chartData.targetLineData.target);
8656
- // svg
8657
- // .append('line')
8658
- // .attr('x1', 0)
8659
- // .attr('x2', width)
8660
- // .attr('y1', yZero)
8661
- // .attr('y2', yZero)
8662
- // .style('stroke-dasharray', '5 5')
8663
- // .style('stroke', this.chartData.targetLineData.color);
8664
- // // svgYAxisRight
8665
- // // .append('line')
8666
- // // .attr('x1', 0)
8667
- // // .attr('x2', rightSvgWidth)
8668
- // // .attr('y1', yZero)
8669
- // // .attr('y2', yZero)
8670
- // // .style('stroke', this.chartData.targetLineData.color);
8671
- // svgYAxisRight
8672
- // .append('foreignObject')
8673
- // .attr('transform', 'translate(' + 0 + ',' + (yZero - 30) + ')')
8674
- // .attr('width', rightSvgWidth)
8675
- // .attr('height', 50)
8676
- // .append('xhtml:div')
8677
- // .attr('class', 'target-display')
8678
- // .style('color', 'var(--chart-text-color)')
8679
- // .html(function () {
8680
- // let dataTypeTemp = '';
8681
- // let targetLineName = 'target';
8682
- // if (metaData.dataType) {
8683
- // dataTypeTemp = metaData.dataType;
8684
- // }
8685
- // if (
8686
- // self.chartData.targetLineData &&
8687
- // self.chartData.targetLineData.targetName
8688
- // ) {
8689
- // targetLineName = self.chartData.targetLineData.targetName;
8690
- // }
8691
- // return (
8692
- // `<div>${targetLineName}</div>` +
8693
- // '<div>' +
8694
- // self.chartData.targetLineData.target +
8695
- // '' +
8696
- // dataTypeTemp +
8697
- // '</div>'
8698
- // );
8699
- // });
8700
- // }
8701
- // if (this.chartConfiguration.isDrilldownChart) {
8702
- // /**
8703
- // * used by drilldown charts
8704
- // */
8705
- // // svg
8706
- // // .selectAll('.lib-axis-group-label')
8707
- // // .attr('class', 'lib-ylabel-drilldowncharts')
8708
- // // .text(metaData.yLabel.toLowerCase());
8709
- // svg.selectAll('g.x1.axis1 g.tick line').style('display', 'none');
8710
- // }
8711
- // if (metaData.xLabel) {
8712
- // function isAcronym(label) {
8713
- // return (
8714
- // (label.length <= 4 && /^[A-Z]+$/.test(label)) ||
8715
- // (label === label.toUpperCase() && /[A-Z]/.test(label))
8716
- // );
8717
- // }
8718
- // const xLabelText = metaData.xLabel;
8719
- // const isAcr = isAcronym(xLabelText.replace(/[^A-Za-z]/g, ''));
8720
- // const xPosition = isria ? (height + margin.top + margin.bottom) : (height + margin.top + margin.bottom + 40);
8721
- // svg
8722
- // .append('text')
8723
- // .attr('class', function () {
8724
- // let baseClass = 'lib-axis-group-label font-size-1';
8725
- // if (self.chartConfiguration.isDrilldownChart)
8726
- // return baseClass + ' lib-xlabel-drilldowncharts';
8727
- // if (self.chartConfiguration.isMultiChartGridLine != undefined)
8728
- // return baseClass + ' lib-xlabel-weeklyCharts';
8729
- // return baseClass + ' lib-axis-waterfall-label';
8730
- // })
8731
- // .attr('style', self.chartConfiguration.xAxisCustomlabelStyles)
8732
- // .attr(
8733
- // 'transform',
8734
- // 'translate(' + width / 2 + ' ,' + xPosition + ')'
8735
- // )
8736
- // .style('text-anchor', 'middle')
8737
- // .style('fill', 'var(--chart-text-color)')
8738
- // .text(isAcr ? xLabelText.toUpperCase() : xLabelText.toLowerCase())
8739
- // .style('text-transform', isAcr ? 'none' : 'capitalize');
8740
- // }
8741
- // if (metaData.lineyLabel) {
8742
- // svgYAxisRight
8743
- // .append('text')
8744
- // .attr('class', 'lib-axis-group-label lib-line-axis')
8745
- // .attr('fill', 'var(--chart-text-color)')
8746
- // .attr('style', self.chartConfiguration.yAxisCustomlabelStyles)
8747
- // .attr('transform', 'translate(0,0) rotate(90)')
8748
- // .attr('y', 0 - 100)
8749
- // .attr('x', 0 + 100)
8750
- // .attr('dy', '5em')
8751
- // .style('text-anchor', 'middle')
8752
- // .style('font-size', 'smaller')
8753
- // .text(metaData.lineyLabel);
8754
- // }
8755
- // if (lineData) {
8756
- // svg
8757
- // .append('path')
8758
- // .datum(lineData)
8759
- // .attr('fill', 'none')
8760
- // .attr('stroke', self.chartConfiguration.lineGraphColor)
8761
- // .attr('stroke-width', 1.5)
8762
- // .attr(
8763
- // 'd',
8764
- // d3
8765
- // .line()
8766
- // .x(function (d) {
8767
- // return x(d.name) + x.bandwidth() / 2;
8768
- // })
8769
- // .y(function (d) {
8770
- // return lineYscale(d.value);
8771
- // })
8772
- // );
8773
- // var dot = svg
8774
- // .selectAll('myCircles')
8775
- // .data(lineData)
8776
- // .enter()
8777
- // .append('g')
8778
- // .on('click', function (d) {
8779
- // if (
8780
- // !metaData.barWithoutClick ||
8781
- // !metaData.barWithoutClick.length ||
8782
- // (!metaData.barWithoutClick.includes(d?.name) &&
8783
- // !metaData.barWithoutClick.includes(d?.key))
8784
- // )
8785
- // self.handleClick(d);
8786
- // });
8787
- // dot
8788
- // .append('circle')
8789
- // .attr('fill', function (d) {
8790
- // return self.chartConfiguration.lineGraphColor;
8791
- // })
8792
- // .attr('stroke', 'none')
8793
- // .attr('cx', function (d) {
8794
- // return x(d.name) + x.bandwidth() / 2;
8795
- // })
8796
- // .attr('cy', function (d) {
8797
- // return lineYscale(d.value);
8798
- // })
8799
- // .style('cursor', () =>
8800
- // self.chartData.metaData.hasDrillDown ? 'pointer' : 'default'
8801
- // )
8802
- // .attr('r', 3);
8803
- // if (self.chartConfiguration.lineGraphColor) {
8804
- // dot
8805
- // .append('text')
8806
- // .attr('class', 'dot')
8807
- // .attr('fill', 'var(--chart-text-color)')
8808
- // .attr('color', self.chartConfiguration.lineGraphColor)
8809
- // .attr('style', 'font-size: ' + '.85em')
8810
- // .attr('x', function (d, i) {
8811
- // return x(d.name) + x.bandwidth() / 2;
8812
- // })
8813
- // .attr('y', function (d) {
8814
- // return lineYscale(d.value);
8815
- // })
8816
- // .attr('dy', '-1em')
8817
- // .text(function (d) {
8818
- // return self.chartConfiguration.labelFormatter(d.value);
8819
- // });
8820
- // }
8821
- // }
8822
- // }
8823
7628
  initializegroupChart() {
8824
7629
  // ==================== VARIABLE DECLARATIONS ====================
8825
7630
  const self = this;
@@ -8930,7 +7735,7 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
8930
7735
  .domain(groups)
8931
7736
  .range([0, width - RIGHT_SVG_WIDTH]);
8932
7737
  // ==================== X-AXIS RENDERING ====================
8933
- this.renderXAxis(svg, x, height, metaData, subgroups, data, SHORT_TICK_LENGTH_BG, LONG_TICK_LENGTH_BG, self, isria, isMobile);
7738
+ this.renderXAxis(svg, x, height, metaData, subgroups, data, SHORT_TICK_LENGTH_BG, LONG_TICK_LENGTH_BG, self, isria, isMobile, isTablet);
8934
7739
  // ==================== Y-AXIS SETUP ====================
8935
7740
  const y = d3.scaleLinear().rangeRound([height, 0]);
8936
7741
  let maxValue = this.calculateMaxValue(data, keyList);
@@ -8981,13 +7786,18 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
8981
7786
  }
8982
7787
  }
8983
7788
  // ==================== HELPER METHODS ====================
8984
- renderXAxis(svg, x, height, metaData, subgroups, data, shortTickLengthBg, longTickLengthBg, self, isria, isMobile) {
7789
+ renderXAxis(svg, x, height, metaData, subgroups, data, shortTickLengthBg, longTickLengthBg, self, isria, isMobile, isTablet) {
8985
7790
  let alternate_text = false;
8986
7791
  if (this.chartConfiguration.isMultiChartGridLine === undefined) {
8987
7792
  // Normal ticks for dashboard charts
7793
+ // Dynamically adjust Y translation for mobile
7794
+ let translateY = height;
7795
+ if (isMobile) {
7796
+ translateY = height + 24; // Add extra space at the top for mobile
7797
+ }
8988
7798
  svg.append('g')
8989
7799
  .attr('class', 'x1 axis1')
8990
- .attr('transform', `translate(0,${height})`)
7800
+ .attr('transform', `translate(0,${translateY})`)
8991
7801
  .call(d3.axisBottom(x))
8992
7802
  .call((g) => g.select('.domain').remove());
8993
7803
  svg.selectAll('g.x1.axis1 g.tick line').remove();
@@ -9047,7 +7857,7 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
9047
7857
  .attr('x', 5)
9048
7858
  .style('text-anchor', 'middle');
9049
7859
  }
9050
- // Mobile override - check for single-group date charts first
7860
+ // Mobile/tablet override - check for single-group date charts first
9051
7861
  if (isMobile) {
9052
7862
  const textNodes = svg.selectAll('g.x1.axis1 g.tick text');
9053
7863
  const groupsCount = data.length || 0;
@@ -9076,15 +7886,6 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
9076
7886
  // Default mobile behavior for non-date or multi-group
9077
7887
  textNodes.classed('mobile-xaxis-override', true);
9078
7888
  }
9079
- // If there are many groups on mobile, rotate labels to sideways to
9080
- // avoid overlapping and make them readable. Use a lower threshold
9081
- // (3) so even small mobile screens get rotated labels when needed.
9082
- if (groupsCount > 3) {
9083
- svg.selectAll('g.x1.axis1 g.tick text')
9084
- .style('writing-mode', 'sideways-lr')
9085
- .style('text-anchor', 'middle')
9086
- .attr('y', 0);
9087
- }
9088
7889
  }
9089
7890
  }
9090
7891
  applyXLabelsOnSameLine(svg, subgroups, data, metaData, self, shortTickLengthBg, isMobile, isria) {
@@ -9149,15 +7950,44 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
9149
7950
  return baseY;
9150
7951
  }
9151
7952
  formatXLabelText(d, data, metaData, subgroups, self, isMobile) {
9152
- // Mobile handling: keep date labels intact for single-series charts (do not trim)
7953
+ // Check if we're on mobile or tablet
7954
+ const isSmallScreen = window.innerWidth < 992; // Less than 992px (mobile or tablet)
7955
+ // Check if label contains both date and week information
7956
+ const hasDateAndTime = (text) => {
7957
+ const dateMatch = /\d{2,4}[-\/]\d{1,2}[-\/]\d{1,4}/.test(text) || !isNaN(Date.parse(text));
7958
+ const weekMatch = /week|wk|w\d+/i.test(text);
7959
+ return { isDate: dateMatch, isWeek: weekMatch };
7960
+ };
7961
+ const labelInfo = hasDateAndTime(d);
7962
+ // When label contains both date and week, show it as-is (no trimming)
7963
+ if (isSmallScreen && labelInfo.isDate && labelInfo.isWeek) {
7964
+ return d;
7965
+ }
7966
+ // Mobile handling: format date and week on separate lines
9153
7967
  if (isMobile) {
9154
- const isDateLabel = /\d{2,4}[-\/]\d{1,2}[-\/]\d{1,4}/.test(d) || !isNaN(Date.parse(d));
9155
- if (isDateLabel && subgroups && subgroups.length < 3) {
9156
- // For single-series charts on mobile, show full date labels (no trimming)
9157
- return d;
9158
- }
9159
- // If header is hidden (compact mobile), trim non-date labels as before
7968
+ // If header is hidden (compact mobile)
9160
7969
  if (!self.isHeaderVisible) {
7970
+ const labelInfo = hasDateAndTime(d);
7971
+ // If it has both date and week, split them
7972
+ if (labelInfo.isDate && labelInfo.isWeek) {
7973
+ const datePart = d.match(/\d{2}[-\/]\d{2}[-\/]\d{2,4}/)?.[0] || '';
7974
+ const weekMatch = d.match(/(?:week|wk|w)\s*(\d+)/i);
7975
+ if (weekMatch) {
7976
+ return `${datePart}\nW${weekMatch[1]}`;
7977
+ }
7978
+ }
7979
+ // If it's just a date, return it unchanged
7980
+ if (labelInfo.isDate) {
7981
+ return d;
7982
+ }
7983
+ // If it has just week number, format it
7984
+ if (labelInfo.isWeek) {
7985
+ const weekMatch = d.match(/(?:week|wk|w)\s*(\d+)/i);
7986
+ if (weekMatch) {
7987
+ return `W${weekMatch[1]}`;
7988
+ }
7989
+ }
7990
+ // For non-date labels, trim as before
9161
7991
  const firstPart = d.split(/[\s\-]+/)[0];
9162
7992
  return firstPart.substring(0, 3).toLowerCase();
9163
7993
  }
@@ -9173,17 +8003,15 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
9173
8003
  if (dateRangeRegex.test(d.trim())) {
9174
8004
  return d.trim().replace(dateRangeRegex, (m, d1, d2) => `${d1} - ${d2}`);
9175
8005
  }
9176
- // Split date and week labels into two lines
9177
- const isDateLabel = /\d{2,4}[-\/]/.test(d);
9178
- const isWeekLabel = /week|wk|w\d+/i.test(d);
8006
+ // Handle splitting of multi-part labels
9179
8007
  if (subgroups.length > 1 && !self.isZoomedOut && data.length > 8 &&
9180
- d.indexOf(' ') > -1 && (isDateLabel || isWeekLabel)) {
8008
+ d.indexOf(' ') > -1 && (labelInfo.isDate || labelInfo.isWeek)) {
9181
8009
  const first = d.substring(0, d.indexOf(' '));
9182
8010
  const second = d.substring(d.indexOf(' ') + 1).trim();
9183
8011
  return `${first}\n${second}`;
9184
8012
  }
9185
8013
  // Handle date labels in minimized view
9186
- if (isDateLabel) {
8014
+ if (labelInfo.isDate) {
9187
8015
  if (!self.isHeaderVisible && data.length > 8 && d.indexOf(' ') > -1) {
9188
8016
  const first = d.substring(0, d.indexOf(' '));
9189
8017
  const second = d.substring(d.indexOf(' ') + 1).trim();
@@ -9782,7 +8610,7 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
9782
8610
  // Minimum width per bar group based on device and number of subgroups
9783
8611
  const minWidthPerGroup = (() => {
9784
8612
  if (subgroupsCount > 2) {
9785
- return isMobile ? 80 : isTablet ? 100 : 120; // Wider for multiple subgroups
8613
+ return isMobile ? 100 : isTablet ? 100 : 120; // Wider for multiple subgroups
9786
8614
  }
9787
8615
  return isMobile ? 40 : isTablet ? 60 : 80; // Normal width for 1-2 subgroups
9788
8616
  })();