axidio-styleguide-library1-v2 0.3.7 → 0.3.8

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