axidio-styleguide-library1-v2 0.2.96 → 0.2.98

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