axidio-styleguide-library1-v2 0.3.22 → 0.3.24

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,20 @@ 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
+ const leftAxisWidth = 80;
6580
+ const rightAxisWidth = this.CONSTANTS.RIGHT_SVG_WIDTH;
6581
+ const availableWidth = containerWidth - leftAxisWidth - rightAxisWidth;
6582
+ let width = availableWidth;
6624
6583
  let height = containerHeight * (this.chartConfiguration.svgHeight / 100) - margin.top - margin.bottom;
6625
- // Responsive zoom handling
6626
6584
  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;
6585
+ const minWidth = dataLength * 25;
6632
6586
  width = Math.max(width, minWidth);
6633
6587
  }
6634
6588
  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;
6589
+ width = dataLength * 130;
6640
6590
  }
6641
6591
  if (this.chartConfiguration.isFullScreen) {
6642
6592
  height = this.chartConfiguration.svgHeight !== 80
@@ -6644,28 +6594,41 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6644
6594
  : containerHeight;
6645
6595
  }
6646
6596
  if (this.chartConfiguration.isDrilldownChart) {
6647
- const offset = device.isMobile ? 60 : device.isTablet ? 90 : 130;
6648
- height = containerHeight - margin.top - margin.bottom - offset;
6597
+ height = containerHeight - margin.top - margin.bottom - 130;
6649
6598
  }
6599
+ const isMobileOrTablet = window.innerWidth < 1024;
6650
6600
  let barWidth;
6651
6601
  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);
6602
+ if (isMobileOrTablet) {
6603
+ if (dataLength === 1) {
6604
+ barWidth = 60;
6605
+ barPadding = 0;
6606
+ }
6607
+ else if (dataLength === 2) {
6608
+ barWidth = 50;
6609
+ barPadding = 45;
6610
+ }
6611
+ else if (dataLength === 3) {
6612
+ barWidth = 45;
6613
+ barPadding = 40;
6614
+ }
6615
+ else if (dataLength <= 5) {
6616
+ barWidth = 35;
6617
+ barPadding = 30;
6618
+ }
6619
+ else {
6620
+ barWidth = 25;
6621
+ barPadding = 25;
6622
+ }
6663
6623
  }
6664
6624
  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;
6625
+ barWidth = this.CONSTANTS.DESKTOP_BAR_WIDTH;
6626
+ barPadding = this.CONSTANTS.BAR_GAP;
6668
6627
  }
6628
+ const totalBarsWidth = barWidth * dataLength;
6629
+ const totalGaps = barPadding * (dataLength - 1);
6630
+ const minRequiredWidth = totalBarsWidth + totalGaps + (this.CONSTANTS.LEFT_RIGHT_SPACES * 2);
6631
+ const requiredSvgWidth = Math.max(availableWidth, minRequiredWidth);
6669
6632
  return {
6670
6633
  width,
6671
6634
  height,
@@ -6676,63 +6639,109 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6676
6639
  requiredSvgWidth,
6677
6640
  };
6678
6641
  }
6679
- createSvgContainers(chartContainer, dimensions, margin) {
6680
- const outerContainer = chartContainer
6642
+ createSvgContainers(chartContainer, dimensions, margin, hasXLabel // Add this parameter
6643
+ ) {
6644
+ // Calculate total height including space for X-axis label if present
6645
+ const xLabelSpace = hasXLabel ? 30 : 0;
6646
+ const totalHeight = dimensions.height + margin.top + margin.bottom + xLabelSpace;
6647
+ // Main wrapper
6648
+ const chartWrapper = chartContainer
6681
6649
  .append('div')
6682
6650
  .attr('id', this.uniqueId)
6683
- .attr('class', 'outer-container')
6651
+ .attr('class', 'chart-wrapper-main')
6652
+ .style('position', 'relative')
6684
6653
  .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
6654
+ .style('height', `${totalHeight}px`); // Include X-label space
6655
+ const leftAxisContainer = chartWrapper
6656
+ .append('div')
6657
+ .attr('class', 'left-axis-container')
6658
+ .style('position', 'absolute')
6659
+ .style('left', '0')
6660
+ .style('top', '0')
6661
+ .style('width', '80px')
6662
+ .style('height', `${dimensions.height + margin.top + margin.bottom}px`)
6663
+ .style('background-color', 'var(--card-bg)')
6664
+ .style('z-index', '10');
6665
+ const svgYAxisLeft = leftAxisContainer
6691
6666
  .append('svg')
6692
6667
  .attr('width', '80')
6693
6668
  .attr('height', dimensions.height + margin.top + margin.bottom)
6694
- .style('position', 'absolute')
6695
- .style('left', '0')
6696
- .style('z-index', 1)
6697
6669
  .append('g')
6698
- .attr('transform', `translate(${margin.left + 10},${margin.top})`);
6699
- const svgYAxisRight = outerContainer
6670
+ .attr('transform', `translate(70,${margin.top})`);
6671
+ // Right Y-axis - Fixed
6672
+ const rightAxisContainer = chartWrapper
6673
+ .append('div')
6674
+ .attr('class', 'right-axis-container')
6675
+ .style('position', 'absolute')
6676
+ .style('right', '0')
6677
+ .style('top', '0')
6678
+ .style('width', `${this.CONSTANTS.RIGHT_SVG_WIDTH}px`)
6679
+ .style('height', `${dimensions.height + margin.top + margin.bottom}px`) // Exclude X-label space
6680
+ .style('background-color', 'var(--card-bg)')
6681
+ .style('z-index', '10');
6682
+ const svgYAxisRight = rightAxisContainer
6700
6683
  .append('svg')
6701
6684
  .attr('width', this.CONSTANTS.RIGHT_SVG_WIDTH)
6702
6685
  .attr('height', dimensions.height + margin.top + margin.bottom)
6703
- .style('position', 'absolute')
6704
- .style('right', '2px')
6705
- .style('z-index', 1)
6706
6686
  .append('g')
6707
6687
  .attr('transform', `translate(0,${margin.top})`);
6708
- const innerContainer = outerContainer
6688
+ // Scrollable middle area
6689
+ const scrollableContainer = chartWrapper
6709
6690
  .append('div')
6710
- .attr('class', 'inner-container')
6711
- .style('width', '100%')
6712
- .style('overflow-x', 'auto');
6691
+ .attr('class', 'scrollable-chart-container')
6692
+ .style('position', 'absolute')
6693
+ .style('left', '80px') // Exactly where left container ends
6694
+ .style('right', `${this.CONSTANTS.RIGHT_SVG_WIDTH}px`)
6695
+ .style('top', '0')
6696
+ .style('width', 'auto')
6697
+ .style('height', `${dimensions.height + margin.top + margin.bottom}px`)
6698
+ .style('overflow-x', 'auto')
6699
+ .style('overflow-y', 'hidden');
6700
+ const innerContainer = scrollableContainer
6701
+ .append('div')
6702
+ .attr('class', 'inner-chart-container')
6703
+ .style('min-width', '100%');
6713
6704
  const svg = innerContainer
6714
6705
  .append('svg')
6715
6706
  .attr('width', dimensions.requiredSvgWidth)
6716
6707
  .attr('height', dimensions.height + margin.top + margin.bottom + 30)
6717
6708
  .append('g')
6718
6709
  .attr('transform', `translate(0,${margin.top})`);
6719
- return { svg, svgYAxisLeft, svgYAxisRight, innerContainer };
6720
- }
6721
- createScales(data, layers, lineData, dimensions, device) {
6710
+ // Fixed bottom container for X-axis label
6711
+ const bottomLabelContainer = chartWrapper
6712
+ .append('div')
6713
+ .attr('class', 'bottom-label-container')
6714
+ .style('position', 'absolute')
6715
+ .style('left', '80px')
6716
+ .style('right', `${this.CONSTANTS.RIGHT_SVG_WIDTH}px`)
6717
+ .style('bottom', '0')
6718
+ .style('height', `${xLabelSpace}px`)
6719
+ .style('display', 'flex')
6720
+ .style('justify-content', 'center')
6721
+ .style('align-items', 'center')
6722
+ .style('background-color', 'var(--card-bg)')
6723
+ .style('z-index', '10');
6724
+ return { svg, svgYAxisLeft, svgYAxisRight, innerContainer, bottomLabelContainer };
6725
+ }
6726
+ createScales(data, layers, lineData, dimensions) {
6722
6727
  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;
6728
+ // Calculate bar positioning
6729
+ const totalBarsWidth = data.length * barWidth;
6730
+ const totalSpacing = (data.length - 1) * barPadding;
6731
+ const requiredWidth = totalBarsWidth + totalSpacing + (this.CONSTANTS.LEFT_RIGHT_SPACES * 2);
6732
+ const effectiveWidth = Math.max(width, requiredWidth);
6733
+ const paddingRatio = barPadding / (barWidth + barPadding);
6734
+ // X-scale starts from 0 (no left spacing for grid alignment)
6725
6735
  const xScale = d3
6726
6736
  .scaleBand()
6727
- .rangeRound([
6728
- this.CONSTANTS.LEFT_RIGHT_SPACES,
6729
- width - this.CONSTANTS.RIGHT_SVG_WIDTH - this.CONSTANTS.LEFT_RIGHT_SPACES
6730
- ])
6737
+ .rangeRound([0, dimensions.requiredSvgWidth])
6731
6738
  .domain(data.map(d => d.name).reverse())
6732
- .padding(padding);
6739
+ .paddingInner(paddingRatio)
6740
+ .paddingOuter(0.1) // Small padding for visual spacing
6741
+ .align(0.5);
6733
6742
  const xScaleFromOrigin = d3
6734
6743
  .scaleBand()
6735
- .rangeRound([width - this.CONSTANTS.RIGHT_SVG_WIDTH, 0])
6744
+ .rangeRound([width, 0])
6736
6745
  .domain(data.map(d => d.name).reverse());
6737
6746
  const yScale = d3.scaleLinear().rangeRound([height, 0]);
6738
6747
  let maxValue = d3.max(layers, (d) => d3.max(d, (d) => d[1]));
@@ -6778,7 +6787,7 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6778
6787
  }
6779
6788
  return { xAxis, yAxis, yLineAxis };
6780
6789
  }
6781
- renderBars(svg, layers, scales, metaData, dimensions, device) {
6790
+ renderBars(svg, layers, scales, metaData, dimensions) {
6782
6791
  const layer = svg
6783
6792
  .selectAll('.layer')
6784
6793
  .data(layers)
@@ -6790,11 +6799,11 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6790
6799
  .selectAll('rect')
6791
6800
  .data((d) => d)
6792
6801
  .enter();
6793
- this.appendRectangles(rect, scales, metaData, dimensions, device);
6802
+ this.appendRectangles(rect, scales, metaData, dimensions);
6794
6803
  this.addInteractions(rect, svg, metaData, scales);
6795
6804
  return rect;
6796
6805
  }
6797
- appendRectangles(rect, scales, metaData, dimensions, device) {
6806
+ appendRectangles(rect, scales, metaData, dimensions) {
6798
6807
  const { barWidth, barPadding } = dimensions;
6799
6808
  const { xScale, yScale } = scales;
6800
6809
  rect
@@ -6813,17 +6822,17 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6813
6822
  }
6814
6823
  return 0;
6815
6824
  })
6816
- .attr('x', (d, i) => {
6817
- if (device.isMobile) {
6818
- return this.CONSTANTS.LEFT_RIGHT_SPACES + i * (barWidth + barPadding);
6819
- }
6825
+ .attr('x', (d) => {
6826
+ const xPosition = xScale(d.data.name);
6827
+ const bandwidth = xScale.bandwidth();
6820
6828
  if (!this.chartConfiguration.isMultiChartGridLine) {
6821
- return xScale(d.data.name);
6829
+ return xPosition + (bandwidth - barWidth) / 2;
6822
6830
  }
6823
6831
  if (this.chartConfiguration.isDrilldownChart && this.chartData.data.length <= 3) {
6824
- return xScale(d.data.name) + xScale.bandwidth() / 2 - 35;
6832
+ return xPosition + bandwidth / 2 - 35;
6825
6833
  }
6826
- return xScale(d.data.name) + xScale.bandwidth() * 0.1;
6834
+ const calculatedWidth = bandwidth * 0.8;
6835
+ return xPosition + (bandwidth - calculatedWidth) / 2;
6827
6836
  })
6828
6837
  .attr('height', (d) => {
6829
6838
  if (!isNaN(d[0]) && !isNaN(d[1])) {
@@ -6833,10 +6842,8 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6833
6842
  return 0;
6834
6843
  })
6835
6844
  .attr('width', (d) => {
6836
- if (device.isMobile)
6837
- return barWidth;
6838
6845
  if (!this.chartConfiguration.isMultiChartGridLine)
6839
- return xScale.bandwidth();
6846
+ return barWidth;
6840
6847
  if (this.chartConfiguration.isDrilldownChart && this.chartData.data.length <= 3) {
6841
6848
  return 70;
6842
6849
  }
@@ -6892,23 +6899,13 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6892
6899
  const value = d[1] - d[0];
6893
6900
  if (isNaN(value))
6894
6901
  return;
6895
- const device = this.getDeviceConfig();
6896
6902
  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
- }
6903
+ // Fixed tooltip width for all resolutions
6904
+ const width = /week/i.test(d.data.name) && /\d{4}-\d{2}-\d{2}/.test(d.data.name)
6905
+ ? '250px'
6906
+ : bandwidth + this.CONSTANTS.LEFT_RIGHT_SPACES * 2 > 180
6907
+ ? '180px'
6908
+ : bandwidth + this.CONSTANTS.LEFT_RIGHT_SPACES * 2;
6912
6909
  svg
6913
6910
  .append('foreignObject')
6914
6911
  .attr('x', this.calculateTooltipX(d, xScale, width))
@@ -6947,12 +6944,12 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6947
6944
  .style('fill', (d) => this.getBarColor(d, metaData));
6948
6945
  svg.selectAll('.lib-verticalstack-title-ontop').remove();
6949
6946
  }
6950
- renderAxisLabels(svg, svgYAxisLeft, metaData, dimensions, margin) {
6947
+ renderAxisLabels(svg, svgYAxisLeft, bottomLabelContainer, metaData, dimensions, margin) {
6951
6948
  if (metaData.yLabel) {
6952
6949
  this.addYAxisLabel(svgYAxisLeft, metaData.yLabel, dimensions.height, margin);
6953
6950
  }
6954
6951
  if (metaData.xLabel) {
6955
- this.addXAxisLabel(svg, metaData.xLabel, dimensions.width, dimensions.height, margin);
6952
+ this.addXAxisLabel(bottomLabelContainer, metaData.xLabel);
6956
6953
  }
6957
6954
  }
6958
6955
  addYAxisLabel(svgYAxisLeft, label, height, margin) {
@@ -6973,21 +6970,18 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6973
6970
  .text(isAcronym ? label.toUpperCase() : label.toLowerCase())
6974
6971
  .style('text-transform', isAcronym ? 'none' : 'capitalize');
6975
6972
  }
6976
- addXAxisLabel(svg, label, width, height, margin) {
6977
- const isria = this.customChartConfiguration?.isRia;
6973
+ addXAxisLabel(bottomLabelContainer, label) {
6978
6974
  const isAcronym = this.isAcronymLabel(label);
6979
- const xPosition = isria
6980
- ? height + margin.top + margin.bottom
6981
- : height + margin.top + margin.bottom + 10;
6982
- svg
6983
- .append('text')
6984
- .attr('class', this.getXAxisLabelClass())
6985
- .attr('style', this.chartConfiguration.xAxisCustomlabelStyles)
6986
- .attr('transform', `translate(${width / 2},${xPosition})`)
6987
- .style('text-anchor', 'middle')
6988
- .style('fill', 'var(--chart-text-color)')
6989
- .text(isAcronym ? label.toUpperCase() : label.toLowerCase())
6990
- .style('text-transform', isAcronym ? 'none' : 'capitalize');
6975
+ bottomLabelContainer
6976
+ .append('div')
6977
+ .style('width', '100%')
6978
+ .style('text-align', 'center')
6979
+ .style('font-size', '12px')
6980
+ .style('font-weight', '600')
6981
+ .style('font-family', 'system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto')
6982
+ .style('color', 'var(--chart-text-color)')
6983
+ .style('text-transform', isAcronym ? 'none' : 'capitalize')
6984
+ .text(isAcronym ? label.toUpperCase() : label.toLowerCase());
6991
6985
  }
6992
6986
  isAcronymLabel(label) {
6993
6987
  const cleanLabel = label.replace(/[^A-Za-z]/g, '');
@@ -7014,6 +7008,31 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7014
7008
  }
7015
7009
  return `${baseClass} lib-axis-waterfall-label`;
7016
7010
  }
7011
+ renderGridsFromLeftAxis(svgYAxisLeft, scales, dimensions) {
7012
+ if (this.chartConfiguration.yAxisGrid) {
7013
+ // Grid lines need to extend from left axis (x=0) to:
7014
+ // - The required SVG width (chart content)
7015
+ // - Plus the right axis width
7016
+ const gridWidth = dimensions.requiredSvgWidth + this.CONSTANTS.RIGHT_SVG_WIDTH;
7017
+ svgYAxisLeft
7018
+ .append('g')
7019
+ .attr('class', 'grid horizontal-grid-from-left')
7020
+ .attr('transform', 'translate(0,0)')
7021
+ .call(d3
7022
+ .axisLeft(scales.yScale)
7023
+ .ticks(this.chartConfiguration.numberOfYTicks)
7024
+ .tickSize(-gridWidth) // Negative to extend right
7025
+ .tickFormat(''))
7026
+ .style('color', 'var(--chart-grid-color)')
7027
+ .style('opacity', '1')
7028
+ .call((g) => {
7029
+ g.select('.domain').remove();
7030
+ g.selectAll('.tick line')
7031
+ .style('stroke', 'var(--chart-grid-color)')
7032
+ .style('stroke-width', '1px');
7033
+ });
7034
+ }
7035
+ }
7017
7036
  applyConfigurationFlags() {
7018
7037
  if (this.chartConfiguration.isHeaderVisible !== undefined) {
7019
7038
  this.isHeaderVisible = this.chartConfiguration.isHeaderVisible;
@@ -7026,8 +7045,10 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7026
7045
  }
7027
7046
  }
7028
7047
  initializeStackedChart() {
7029
- const device = this.getDeviceConfig();
7030
- this.configureResponsiveSettings(device);
7048
+ // Use fixed configuration for all resolutions
7049
+ this.chartConfiguration.margin = { top: 20, right: 20, bottom: 40, left: 40 };
7050
+ this.chartConfiguration.numberOfYTicks = 5;
7051
+ this.chartConfiguration.svgHeight = 70;
7031
7052
  this.mergeConfigurations();
7032
7053
  this.applyConfigurationFlags();
7033
7054
  const data = this.chartData.data;
@@ -7038,17 +7059,19 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7038
7059
  const chartContainer = d3.select(this.containerElt.nativeElement);
7039
7060
  const verticalstackedcontainer = d3.select(this.verticalstackedcontainerElt.nativeElement);
7040
7061
  const margin = this.chartConfiguration.margin;
7041
- const dimensions = this.calculateDimensions(chartContainer, verticalstackedcontainer, margin, device, data.length);
7042
- const { svg, svgYAxisLeft, svgYAxisRight } = this.createSvgContainers(chartContainer, dimensions, margin);
7062
+ const dimensions = this.calculateDimensions(chartContainer, verticalstackedcontainer, margin, data.length);
7063
+ const hasXLabel = !!metaData.xLabel;
7064
+ const { svg, svgYAxisLeft, svgYAxisRight, bottomLabelContainer } = this.createSvgContainers(chartContainer, dimensions, margin, hasXLabel);
7043
7065
  const stack = d3.stack().keys(keyList).offset(d3.stackOffsetNone);
7044
7066
  const layers = stack(data);
7045
7067
  data.sort((a, b) => b.total - a.total);
7046
- const scales = this.createScales(data, layers, lineData, dimensions, device);
7068
+ const scales = this.createScales(data, layers, lineData, dimensions);
7047
7069
  const axes = this.createAxes(scales);
7070
+ this.renderGridsFromLeftAxis(svgYAxisLeft, scales, dimensions);
7048
7071
  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);
7051
- this.renderAxisLabels(svg, svgYAxisLeft, metaData, dimensions, margin);
7072
+ const rect = this.renderBars(svg, layers, scales, metaData, dimensions);
7073
+ this.renderAxes(svg, svgYAxisLeft, svgYAxisRight, axes, scales, dimensions, data);
7074
+ this.renderAxisLabels(svg, svgYAxisLeft, bottomLabelContainer, metaData, dimensions, margin);
7052
7075
  this.renderTargetLine(svg, svgYAxisRight, scales, dimensions, metaData);
7053
7076
  this.renderDataLabels(rect, scales, metaData, dimensions);
7054
7077
  this.renderLineChart(svg, lineData, scales, colors, metaData);
@@ -7057,25 +7080,13 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7057
7080
  if (this.chartConfiguration.isXgridBetweenLabels) {
7058
7081
  svg
7059
7082
  .append('g')
7060
- .attr('class', 'grid')
7083
+ .attr('class', 'grid vertical-grid')
7061
7084
  .attr('transform', `translate(${scales.xScale.bandwidth() / 2},${dimensions.height})`)
7062
7085
  .call(d3.axisBottom(scales.xScale).tickSize(-dimensions.height).tickFormat(''))
7063
7086
  .style('stroke-dasharray', '5 5')
7064
7087
  .style('color', '#999999')
7065
7088
  .call((g) => g.select('.domain').remove());
7066
7089
  }
7067
- if (this.chartConfiguration.yAxisGrid) {
7068
- svg
7069
- .append('g')
7070
- .attr('class', 'grid')
7071
- .call(d3
7072
- .axisLeft(scales.yScale)
7073
- .ticks(this.chartConfiguration.numberOfYTicks)
7074
- .tickSize(-dimensions.width)
7075
- .tickFormat(''))
7076
- .style('color', 'var(--chart-grid-color)')
7077
- .style('opacity', '1');
7078
- }
7079
7090
  if (this.chartConfiguration.xAxisGrid) {
7080
7091
  for (let j = 0; j < this.chartConfiguration.xAxisGrid.length; j++) {
7081
7092
  svg
@@ -7088,7 +7099,7 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7088
7099
  }
7089
7100
  }
7090
7101
  }
7091
- renderAxes(svg, svgYAxisLeft, svgYAxisRight, axes, scales, dimensions, device, data) {
7102
+ renderAxes(svg, svgYAxisLeft, svgYAxisRight, axes, scales, dimensions, data) {
7092
7103
  if (this.chartConfiguration.showXaxisTop) {
7093
7104
  svg
7094
7105
  .append('g')
@@ -7098,7 +7109,7 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7098
7109
  svg.selectAll('.x-axis > g > text').attr('class', 'lib-display-hidden');
7099
7110
  }
7100
7111
  if (!this.chartConfiguration.isMultiChartGridLine) {
7101
- this.renderStandardAxes(svg, axes, scales, dimensions, device, data);
7112
+ this.renderStandardAxes(svg, axes, scales, dimensions, data);
7102
7113
  }
7103
7114
  else if (this.chartConfiguration.isDrilldownChart) {
7104
7115
  this.renderDrilldownAxes(svg, svgYAxisLeft, svgYAxisRight, axes, scales, dimensions);
@@ -7109,24 +7120,35 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7109
7120
  this.applyAxisStyling(svg, svgYAxisLeft, svgYAxisRight);
7110
7121
  this.applyAxisConfigurations(svg, scales, dimensions, data);
7111
7122
  }
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
- }
7123
+ renderStandardAxes(svg, axes, scales, dimensions, data) {
7124
+ const isMobileOrTablet = window.innerWidth < 1024;
7125
+ // X-axis with labels
7126
+ const xAxisGroup = svg
7127
+ .append('g')
7128
+ .attr('transform', `translate(0,${dimensions.height})`)
7129
+ .attr('class', 'lib-stacked-x-axis-text')
7130
+ .call(axes.xAxis);
7131
+ // Style X-axis labels
7132
+ xAxisGroup
7133
+ .selectAll('text')
7134
+ .style('fill', 'var(--chart-text-color)')
7135
+ .style('font-size', isMobileOrTablet ? '10px' : '12px')
7136
+ .attr('text-anchor', 'middle')
7137
+ .attr('dy', '1em')
7138
+ .each(function (d) {
7139
+ const textElement = d3.select(this);
7140
+ const text = textElement.text();
7141
+ if (isMobileOrTablet && text.length > 12) {
7142
+ textElement.text(text.substring(0, 10) + '...');
7143
+ }
7144
+ });
7145
+ // Ensure X-axis line starts exactly at x=0
7146
+ xAxisGroup
7147
+ .select('.domain')
7148
+ .style('stroke', 'var(--chart-axis-color)')
7149
+ .style('stroke-width', '1px')
7150
+ .attr('d', `M0,0.5H${dimensions.requiredSvgWidth}`);
7151
+ // Y-axis
7130
7152
  svg
7131
7153
  .append('g')
7132
7154
  .attr('class', 'lib-stacked-y-axis-text')
@@ -7135,27 +7157,6 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7135
7157
  .selectAll('text')
7136
7158
  .style('fill', 'var(--chart-text-color)');
7137
7159
  }
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
7160
  renderDrilldownAxes(svg, svgYAxisLeft, svgYAxisRight, axes, scales, dimensions) {
7160
7161
  svg
7161
7162
  .append('g')
@@ -7237,7 +7238,6 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7237
7238
  }
7238
7239
  }
7239
7240
  renderCustomXAxis(svg, scales, dimensions, data) {
7240
- const device = this.getDeviceConfig();
7241
7241
  svg
7242
7242
  .append('g')
7243
7243
  .attr('class', 'x1 axis1')
@@ -7245,12 +7245,12 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7245
7245
  .style('color', '#000')
7246
7246
  .call(d3.axisBottom(scales.xScale).tickSize(0))
7247
7247
  .call((g) => g.select('.domain').attr('fill', 'none'));
7248
- this.styleCustomXAxisTicks(svg, data, device);
7248
+ this.styleCustomXAxisTicks(svg, data);
7249
7249
  if (this.chartConfiguration.xLabelsOnSameLine) {
7250
- this.applyXLabelsOnSameLine(svg, device);
7250
+ this.applyXLabelsOnSameLine(svg);
7251
7251
  }
7252
7252
  }
7253
- styleCustomXAxisTicks(svg, data, device) {
7253
+ styleCustomXAxisTicks(svg, data) {
7254
7254
  let alternateText = false;
7255
7255
  svg.selectAll('.x1.axis1 .tick line').attr('y2', () => {
7256
7256
  if (this.chartConfiguration.hideXaxisTick)
@@ -7282,28 +7282,17 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7282
7282
  return this.CONSTANTS.SHORT_TICK_LENGTH_BG;
7283
7283
  });
7284
7284
  }
7285
- applyXLabelsOnSameLine(svg, device) {
7285
+ applyXLabelsOnSameLine(svg) {
7286
7286
  svg
7287
7287
  .selectAll('g.x1.axis1 g.tick text')
7288
7288
  .attr('class', 'lib-xaxis-labels-texts-drilldown')
7289
7289
  .attr('y', this.CONSTANTS.SHORT_TICK_LENGTH_BG)
7290
7290
  .text((d) => {
7291
- if (device.isMobile) {
7292
- return d.split(' ')[0].substring(0, 3);
7293
- }
7294
7291
  const trimmed = d.trim();
7295
7292
  const spaceIndex = trimmed.indexOf(' ');
7296
7293
  return spaceIndex > -1
7297
7294
  ? trimmed.substring(0, spaceIndex).toLowerCase()
7298
7295
  : 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
7296
  });
7308
7297
  svg
7309
7298
  .selectAll('g.x1.axis1 g.tick')
@@ -7312,16 +7301,11 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7312
7301
  .attr('y', this.CONSTANTS.LONG_TICK_LENGTH_BG)
7313
7302
  .attr('fill', 'currentColor')
7314
7303
  .text((d) => {
7315
- if (device.isMobile)
7316
- return '';
7317
7304
  const trimmed = d.trim();
7318
7305
  const spaceIndex = trimmed.indexOf(' ');
7319
7306
  return spaceIndex > -1
7320
7307
  ? trimmed.substring(spaceIndex).toLowerCase()
7321
7308
  : '';
7322
- })
7323
- .attr('transform', (d, i) => {
7324
- return device.isMobile && i === 0 ? 'translate(20,0)' : null;
7325
7309
  });
7326
7310
  }
7327
7311
  renderDataLabels(rect, scales, metaData, dimensions) {
@@ -7410,14 +7394,16 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7410
7394
  return;
7411
7395
  const parsedTarget = this.parseTargetValue(this.chartData.targetLineData.target);
7412
7396
  const yZero = scales.yScale(parsedTarget);
7397
+ // Draw target line across the full chart width
7413
7398
  svg
7414
7399
  .append('line')
7415
- .attr('x1', 0)
7416
- .attr('x2', dimensions.width)
7400
+ .attr('x1', 0) // Start from the beginning of the chart
7401
+ .attr('x2', dimensions.requiredSvgWidth) // Extend to full width
7417
7402
  .attr('y1', yZero)
7418
7403
  .attr('y2', yZero)
7419
7404
  .style('stroke-dasharray', '5 5')
7420
- .style('stroke', this.chartData.targetLineData.color);
7405
+ .style('stroke', this.chartData.targetLineData.color)
7406
+ .style('stroke-width', '2px');
7421
7407
  this.renderTargetLabel(svgYAxisRight, yZero, metaData);
7422
7408
  }
7423
7409
  parseTargetValue(target) {
@@ -7512,11 +7498,11 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7512
7498
  this.isZoomOutSelected(isZoomOut);
7513
7499
  }
7514
7500
  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 }); }
7501
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: HorizontalBarsWithScrollZoomComponent, selector: "lib-horizontal-bars-with-scroll-zoom", inputs: { chartData: "chartData", customChartConfiguration: "customChartConfiguration" }, outputs: { clickEvent: "clickEvent", headerMenuclickEvent: "headerMenuclickEvent" }, viewQueries: [{ propertyName: "containerElt", first: true, predicate: ["verticalstackedchartcontainer"], descendants: true, static: true }, { propertyName: "verticalstackedcontainerElt", first: true, predicate: ["verticalstackedcontainer"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<meta http-equiv=\"CACHE-CONTROL\" content=\"NO-CACHE\" />\r\n<meta http-equiv=\"EXPIRES\" content=\"Sat, 01 Jun 2004 11:12:01 GMT\" />\r\n<div\r\n #verticalstackedcontainer\r\n class=\"lib-chart-wrapper\"\r\n [ngClass]=\"{ 'lib-no-background': isTransparentBackground }\"\r\n style=\"background-color: var(--card-bg);\"\r\n\r\n (resized)=\"onResized($event)\"\r\n>\r\n <div class=\"header-alt\" *ngIf=\"!isHeaderVisible\">\r\n <lib-chart-header-v2\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (clickEvent)=\"handleClick($event)\"\r\n ></lib-chart-header-v2>\r\n\r\n <lib-chart-header-v3\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (compareByFilterSelection)=\"handleCompareByFilterSelection($event)\"\r\n (zoomInZoomOutClick)=\"handleZoominZoomoutClick($event)\"\r\n ></lib-chart-header-v3>\r\n </div>\r\n <div\r\n [style.height]=\"chartConfiguration.svgHeight\"\r\n id=\"verticalstackedchartcontainer\"\r\n #verticalstackedchartcontainer\r\n class=\"lib-chart-svg\"\r\n ></div>\r\n</div>\r\n", styles: [".lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1;font-size:12px}.lib-axis-group-label{font-size:12px;font-weight:600;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.dots{font-size:10px}.inline__display{display:flex;justify-content:space-around;padding-top:2%}.verticalbar__text{font-style:normal;font-variant:normal;font-weight:400;font-size:13px;line-height:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;opacity:1}.lib-line-label-item{display:inline-block!important;font-size:.85em;margin-right:10px;font-weight:600}.lib-line-label-wrapper-vertical{display:flex;justify-content:center}.target-display{font-size:11px;line-height:13px;font-weight:700;text-transform:uppercase;float:right}.title{background-color:#d9d9d9;height:40px;display:flex;flex-direction:column;justify-content:center;align-items:center;border-radius:3px;line-height:1;padding:4px 8px;box-sizing:border-box}.title-top-text{color:var(--font-color)!important;font-size:12px;font-weight:600}.title-bar-name{color:var(--font-color)!important;font-size:14px;font-weight:700;text-transform:capitalize}.title-bottom-text{color:var(--font-color)!important;font-size:11px}.zoomIcons-holder{display:flex;align-items:center;margin-right:15px}.zoomIcons{border:.5px solid #b6b6b6;cursor:pointer;display:flex;justify-content:center;align-items:center;width:30px;height:30px;color:var(--color)!important}.zoom-active{background-color:#2d5ca0;opacity:1}.zoom-inactive{background-color:#d9d9d9;opacity:.5}.bottom__text{position:absolute!important;bottom:0!important;display:flex!important;justify-content:center!important;align-items:center!important;width:100%!important}.box__heightwidth{opacity:1;height:10px;width:10px;border:none!important;border-radius:50%}.label__text{margin-right:10px;display:flex;justify-content:center;align-items:center;font-style:normal;font-variant:normal;font-weight:400;font-size:10px;line-height:13px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;letter-spacing:.2px;color:#707070!important}.lib-verticalstack-labels-ontop-weklycharts{font-style:normal;font-variant:normal;font-weight:700;font-size:10px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.05px;text-anchor:middle;fill:#000}.lib-verticalstack-title-ontop{font-style:normal;font-variant:normal;font-size:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.05px;text-anchor:middle;fill:#000}.marginLeft-20{margin-left:20px}.flex-inline{display:flex;justify-content:center;align-items:center;font-size:14px}.lib-xaxis-labels-texts-drilldown,.lib-xaxis-labels-texts-drilldown-alt,.lib-xaxis-labels-texts-weeklycharts{font-size:12px}.lib-display-hidden{display:none!important}.chart-wrapper-main{position:relative;width:100%;box-sizing:border-box}.left-axis-container,.right-axis-container{pointer-events:none;overflow:hidden;-webkit-user-select:none;user-select:none}.scrollable-chart-container{-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:#888 #f1f1f1}.scrollable-chart-container::-webkit-scrollbar{height:8px}.scrollable-chart-container::-webkit-scrollbar-track{background:#f1f1f1;border-radius:4px}.scrollable-chart-container::-webkit-scrollbar-thumb{background:#888;border-radius:4px}.scrollable-chart-container::-webkit-scrollbar-thumb:hover{background:#555}.inner-chart-container{position:relative}.grid line{stroke-width:1;shape-rendering:crispEdges}.horizontal-grid line{stroke-opacity:.7}.vertical-grid line{stroke-opacity:.7}.lib-y-axis-hidden{opacity:0!important;pointer-events:none}.lib-stacked-x-axis-text .domain{stroke:var(--chart-axis-color);stroke-width:1px}.lib-stacked-x-axis-text text{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;font-size:12px;fill:var(--chart-text-color)}.lib-stacked-y-axis-text .domain{stroke:var(--chart-axis-color);stroke-width:1px}.lib-stacked-y-axis-text text{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;font-size:12px;fill:var(--chart-text-color)}@media (max-width: 1024px){.scrollable-chart-container::-webkit-scrollbar{height:6px}.lib-stacked-x-axis-text text{font-size:10px}}@media (max-width: 768px){.scrollable-chart-container::-webkit-scrollbar{height:4px}}.left-axis-container svg{pointer-events:none;overflow:visible!important}.horizontal-grid-from-left line{pointer-events:none;shape-rendering:crispEdges}.horizontal-grid-from-left .domain{display:none}\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
7502
  }
7517
7503
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HorizontalBarsWithScrollZoomComponent, decorators: [{
7518
7504
  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"] }]
7505
+ args: [{ selector: 'lib-horizontal-bars-with-scroll-zoom', encapsulation: ViewEncapsulation.None, template: "<meta http-equiv=\"CACHE-CONTROL\" content=\"NO-CACHE\" />\r\n<meta http-equiv=\"EXPIRES\" content=\"Sat, 01 Jun 2004 11:12:01 GMT\" />\r\n<div\r\n #verticalstackedcontainer\r\n class=\"lib-chart-wrapper\"\r\n [ngClass]=\"{ 'lib-no-background': isTransparentBackground }\"\r\n style=\"background-color: var(--card-bg);\"\r\n\r\n (resized)=\"onResized($event)\"\r\n>\r\n <div class=\"header-alt\" *ngIf=\"!isHeaderVisible\">\r\n <lib-chart-header-v2\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (clickEvent)=\"handleClick($event)\"\r\n ></lib-chart-header-v2>\r\n\r\n <lib-chart-header-v3\r\n [chartData]=\"chartData\"\r\n [chartConfiguration]=\"chartConfiguration\"\r\n (compareByFilterSelection)=\"handleCompareByFilterSelection($event)\"\r\n (zoomInZoomOutClick)=\"handleZoominZoomoutClick($event)\"\r\n ></lib-chart-header-v3>\r\n </div>\r\n <div\r\n [style.height]=\"chartConfiguration.svgHeight\"\r\n id=\"verticalstackedchartcontainer\"\r\n #verticalstackedchartcontainer\r\n class=\"lib-chart-svg\"\r\n ></div>\r\n</div>\r\n", styles: [".lib-stacked-y-axis-text text,.lib-stacked-x-axis-text text{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;letter-spacing:0px;color:#000;opacity:1;font-size:12px}.lib-axis-group-label{font-size:12px;font-weight:600;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;color:#000;opacity:1}.dots{font-size:10px}.inline__display{display:flex;justify-content:space-around;padding-top:2%}.verticalbar__text{font-style:normal;font-variant:normal;font-weight:400;font-size:13px;line-height:20px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:0px;opacity:1}.lib-line-label-item{display:inline-block!important;font-size:.85em;margin-right:10px;font-weight:600}.lib-line-label-wrapper-vertical{display:flex;justify-content:center}.target-display{font-size:11px;line-height:13px;font-weight:700;text-transform:uppercase;float:right}.title{background-color:#d9d9d9;height:40px;display:flex;flex-direction:column;justify-content:center;align-items:center;border-radius:3px;line-height:1;padding:4px 8px;box-sizing:border-box}.title-top-text{color:var(--font-color)!important;font-size:12px;font-weight:600}.title-bar-name{color:var(--font-color)!important;font-size:14px;font-weight:700;text-transform:capitalize}.title-bottom-text{color:var(--font-color)!important;font-size:11px}.zoomIcons-holder{display:flex;align-items:center;margin-right:15px}.zoomIcons{border:.5px solid #b6b6b6;cursor:pointer;display:flex;justify-content:center;align-items:center;width:30px;height:30px;color:var(--color)!important}.zoom-active{background-color:#2d5ca0;opacity:1}.zoom-inactive{background-color:#d9d9d9;opacity:.5}.bottom__text{position:absolute!important;bottom:0!important;display:flex!important;justify-content:center!important;align-items:center!important;width:100%!important}.box__heightwidth{opacity:1;height:10px;width:10px;border:none!important;border-radius:50%}.label__text{margin-right:10px;display:flex;justify-content:center;align-items:center;font-style:normal;font-variant:normal;font-weight:400;font-size:10px;line-height:13px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Open Sans,Helvetica Neue,sans-serif;letter-spacing:.2px;color:#707070!important}.lib-verticalstack-labels-ontop-weklycharts{font-style:normal;font-variant:normal;font-weight:700;font-size:10px;line-height:11px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.05px;text-anchor:middle;fill:#000}.lib-verticalstack-title-ontop{font-style:normal;font-variant:normal;font-size:14px;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;letter-spacing:-.05px;text-anchor:middle;fill:#000}.marginLeft-20{margin-left:20px}.flex-inline{display:flex;justify-content:center;align-items:center;font-size:14px}.lib-xaxis-labels-texts-drilldown,.lib-xaxis-labels-texts-drilldown-alt,.lib-xaxis-labels-texts-weeklycharts{font-size:12px}.lib-display-hidden{display:none!important}.chart-wrapper-main{position:relative;width:100%;box-sizing:border-box}.left-axis-container,.right-axis-container{pointer-events:none;overflow:hidden;-webkit-user-select:none;user-select:none}.scrollable-chart-container{-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:#888 #f1f1f1}.scrollable-chart-container::-webkit-scrollbar{height:8px}.scrollable-chart-container::-webkit-scrollbar-track{background:#f1f1f1;border-radius:4px}.scrollable-chart-container::-webkit-scrollbar-thumb{background:#888;border-radius:4px}.scrollable-chart-container::-webkit-scrollbar-thumb:hover{background:#555}.inner-chart-container{position:relative}.grid line{stroke-width:1;shape-rendering:crispEdges}.horizontal-grid line{stroke-opacity:.7}.vertical-grid line{stroke-opacity:.7}.lib-y-axis-hidden{opacity:0!important;pointer-events:none}.lib-stacked-x-axis-text .domain{stroke:var(--chart-axis-color);stroke-width:1px}.lib-stacked-x-axis-text text{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;font-size:12px;fill:var(--chart-text-color)}.lib-stacked-y-axis-text .domain{stroke:var(--chart-axis-color);stroke-width:1px}.lib-stacked-y-axis-text text{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto;font-weight:400;font-size:12px;fill:var(--chart-text-color)}@media (max-width: 1024px){.scrollable-chart-container::-webkit-scrollbar{height:6px}.lib-stacked-x-axis-text text{font-size:10px}}@media (max-width: 768px){.scrollable-chart-container::-webkit-scrollbar{height:4px}}.left-axis-container svg{pointer-events:none;overflow:visible!important}.horizontal-grid-from-left line{pointer-events:none;shape-rendering:crispEdges}.horizontal-grid-from-left .domain{display:none}\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
7506
  }], ctorParameters: () => [], propDecorators: { containerElt: [{
7521
7507
  type: ViewChild,
7522
7508
  args: ['verticalstackedchartcontainer', { static: true }]
@@ -7625,6 +7611,1242 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
7625
7611
  get isAlertEnabled() {
7626
7612
  return this.chartConfiguration?.headerMenuOptions?.some((option) => option.id === 'editAlert');
7627
7613
  }
7614
+ // initializegroupChart() {
7615
+ // var self = this;
7616
+ // let data = [];
7617
+ // let metaData: any = null;
7618
+ // let keyList = null;
7619
+ // let lineData = null;
7620
+ // let colorMap = {};
7621
+ // var formatFromBackend;
7622
+ // var formatForHugeNumbers;
7623
+ // const isMobile = window.innerWidth < 576;
7624
+ // const isTablet = window.innerWidth >= 576 && window.innerWidth < 992;
7625
+ // const isDesktop = window.innerWidth >= 992;
7626
+ // let isria = this.customChartConfiguration.isRia
7627
+ // var x: any;
7628
+ // var alternate_text = false;
7629
+ // var short_tick_length = 4;
7630
+ // var long_tick_length = 16;
7631
+ // /**
7632
+ // * longer tick length needed for weekly charts
7633
+ // */
7634
+ // var short_tick_length_bg = 5;
7635
+ // var long_tick_length_bg = 30;
7636
+ // var leftAndRightSpaces = 50;
7637
+ // var rightSvgWidth = 60;
7638
+ // var tempScale;
7639
+ // for (var i in this.defaultConfiguration) {
7640
+ // this.chartConfiguration[i] = ChartHelper.getValueByConfigurationType(
7641
+ // i,
7642
+ // this.defaultConfiguration,
7643
+ // this.customChartConfiguration
7644
+ // );
7645
+ // }
7646
+ // data = this.chartData.data;
7647
+ // metaData = this.chartData.metaData;
7648
+ // lineData = this.chartData.lineData;
7649
+ // // if (lineData || this.chartData.targetLineData) {
7650
+ // // rightSvgWidth = 60;
7651
+ // // }
7652
+ // if (!metaData.colorAboveTarget) {
7653
+ // metaData['colorAboveTarget'] = metaData.colors;
7654
+ // }
7655
+ // colorMap = metaData.colors;
7656
+ // keyList = metaData.keyList;
7657
+ // var chartContainer = d3.select(this.containerElt.nativeElement);
7658
+ // var verticalstackedcontainer = d3.select(
7659
+ // this.groupcontainerElt.nativeElement
7660
+ // );
7661
+ // var margin = this.chartConfiguration.margin;
7662
+ // const { width, height } = this.calculateChartDimensions(
7663
+ // chartContainer,
7664
+ // verticalstackedcontainer,
7665
+ // margin,
7666
+ // self
7667
+ // );
7668
+ // /**
7669
+ // * for hiding header
7670
+ // * used by weekly charts
7671
+ // */
7672
+ // if (this.chartConfiguration.isHeaderVisible != undefined)
7673
+ // this.isHeaderVisible = this.chartConfiguration.isHeaderVisible;
7674
+ // /**
7675
+ // * for hiding legends
7676
+ // * used by weekly charts
7677
+ // */
7678
+ // if (this.chartConfiguration.legendVisible != undefined) {
7679
+ // this.legendVisible = this.chartConfiguration.legendVisible;
7680
+ // }
7681
+ // /**
7682
+ // * for removing background color so that it can take parents color
7683
+ // *
7684
+ // */
7685
+ // if (this.chartConfiguration.isTransparentBackground != undefined) {
7686
+ // this.isTransparentBackground =
7687
+ // this.chartConfiguration.isTransparentBackground;
7688
+ // }
7689
+ // /**
7690
+ // * format data values based on configuration received
7691
+ // */
7692
+ // if (this.chartConfiguration.textFormatter != undefined) {
7693
+ // formatFromBackend = ChartHelper.dataValueFormatter(
7694
+ // this.chartConfiguration.textFormatter
7695
+ // );
7696
+ // formatForHugeNumbers = ChartHelper.dataValueFormatter('.2s');
7697
+ // }
7698
+ // const {
7699
+ // outerContainer,
7700
+ // svgYAxisLeft,
7701
+ // svgYAxisRight,
7702
+ // innerContainer,
7703
+ // svg
7704
+ // } = this.createChartContainers(chartContainer, margin, height, rightSvgWidth, self, width);
7705
+ // var subgroups: any = keyList;
7706
+ // var groups = d3
7707
+ // .map(data, function (d) {
7708
+ // return d.name;
7709
+ // })
7710
+ // .keys();
7711
+ // /**
7712
+ // * x axis range made similar to line chart or vertical stack so that all the charts will get aligned with each other.
7713
+ // */
7714
+ // if (this.chartConfiguration.isMultiChartGridLine != undefined) {
7715
+ // x = d3
7716
+ // .scaleBand()
7717
+ // .rangeRound([width, 0])
7718
+ // .align(0.5)
7719
+ // .padding([0.5])
7720
+ // .domain(
7721
+ // data.map(function (d: any) {
7722
+ // return d.name.toLowerCase();
7723
+ // })
7724
+ // );
7725
+ // } else {
7726
+ // x = d3
7727
+ // .scaleBand()
7728
+ // .domain(groups)
7729
+ // .range([leftAndRightSpaces, width - rightSvgWidth - leftAndRightSpaces])
7730
+ // .padding([0.3]);
7731
+ // }
7732
+ // // x.bandwidth(96);
7733
+ // var xScaleFromOrigin = d3
7734
+ // .scaleBand()
7735
+ // .domain(groups)
7736
+ // .range([0, width - rightSvgWidth]);
7737
+ // // .padding([0.2]);
7738
+ // if (this.chartConfiguration.isMultiChartGridLine == undefined) {
7739
+ // /**
7740
+ // * normal ticks for all dashboard charts
7741
+ // */
7742
+ // svg
7743
+ // .append('g')
7744
+ // .attr('class', 'x1 axis1')
7745
+ // .attr('transform', 'translate(0,' + height + ')')
7746
+ // .call(d3.axisBottom(x))
7747
+ // .call((g) => g.select('.domain').remove());
7748
+ // svg.selectAll('g.x1.axis1 g.tick line').remove();
7749
+ // // Only move x-axis labels further down for grouped charts if there is no xLabel
7750
+ // if (subgroups.length > 1 && !metaData.xLabel) {
7751
+ // svg
7752
+ // .selectAll('g.x1.axis1 g.tick text')
7753
+ // .attr('class', 'lib-xaxis-labels-texts-drilldown')
7754
+ // .style('fill', 'var(--chart-text-color)')
7755
+ // .attr('y', 32); // Increase distance from bars (default is ~9)
7756
+ // } else {
7757
+ // svg
7758
+ // .selectAll('g.x1.axis1 g.tick text')
7759
+ // .attr('class', 'lib-xaxis-labels-texts-drilldown')
7760
+ // .style('fill', 'var(--chart-text-color)');
7761
+ // }
7762
+ // }
7763
+ // else {
7764
+ // /**
7765
+ // * bigger ticks for weekly charts and more space from x axis to labels
7766
+ // */
7767
+ // /**
7768
+ // * draw x axis
7769
+ // */
7770
+ // svg
7771
+ // .append('g')
7772
+ // .attr('class', 'x1 axis1')
7773
+ // .attr('transform', 'translate(0,' + height + ')')
7774
+ // .call(d3.axisBottom(x).tickSize(0))
7775
+ // .call((g) => g.select('.domain').attr('fill', 'none'));
7776
+ // /**
7777
+ // * tick line size in alternate fashion
7778
+ // */
7779
+ // svg.selectAll('g.x1.axis1 g.tick line').attr('y2', function () {
7780
+ // if (
7781
+ // alternate_text &&
7782
+ // self.chartConfiguration.isNoAlternateXaxisText == undefined
7783
+ // ) {
7784
+ // alternate_text = false;
7785
+ // return long_tick_length_bg - 7;
7786
+ // } else {
7787
+ // alternate_text = true;
7788
+ // return short_tick_length_bg - 4;
7789
+ // }
7790
+ // });
7791
+ // /**
7792
+ // * reset the flag so that values can be shown in same alternate fashion
7793
+ // */
7794
+ // alternate_text = false;
7795
+ // /**
7796
+ // * print x-axis label texts
7797
+ // * used by weekly charts
7798
+ // */
7799
+ // svg
7800
+ // .selectAll('g.x1.axis1 g.tick text')
7801
+ // .attr('class', 'lib-xaxis-labels-texts-weeklycharts')
7802
+ // .attr('y', function () {
7803
+ // // Minimize gap in maximized (fullscreen) view for weekly charts
7804
+ // if (self.chartConfiguration.isFullScreen) {
7805
+ // return short_tick_length_bg;
7806
+ // }
7807
+ // if (alternate_text) {
7808
+ // alternate_text = false;
7809
+ // return long_tick_length_bg;
7810
+ // } else {
7811
+ // alternate_text = true;
7812
+ // return short_tick_length_bg;
7813
+ // }
7814
+ // });
7815
+ // }
7816
+ // if (self.chartConfiguration.xLabelsOnSameLine) {
7817
+ // const xAxisLabels = svg
7818
+ // .selectAll('g.x1.axis1 g.tick text')
7819
+ // .attr('class', 'lib-xaxis-labels-texts-drilldown')
7820
+ // .style('font-size', this.isHeaderVisible ? '18px' : '14px')
7821
+ // .attr('text-anchor', 'middle')
7822
+ // .attr('y', function(d) {
7823
+ // // For grouped bar charts with many bars and xLabel present, only add 5 if the label is a date
7824
+ // if (subgroups.length > 1 && data.length > 8 && metaData.xLabel) {
7825
+ // const isDateLabel = /\d{2,4}[-\/]/.test(d);
7826
+ // if (self.chartConfiguration.isFullScreen) {
7827
+ // return isDateLabel ? short_tick_length_bg + 14 : short_tick_length_bg;
7828
+ // }
7829
+ // return isDateLabel ? short_tick_length_bg + 14 : short_tick_length_bg;
7830
+ // }
7831
+ // // For grouped bar charts with many bars and NO xLabel, add space as before, but reduce in fullscreen
7832
+ // if (subgroups.length > 1 && data.length > 8 && !metaData.xLabel) {
7833
+ // const chartHasExtraBottom = (self.chartConfiguration.margin && self.chartConfiguration.margin.bottom >= 40);
7834
+ // if (self.chartConfiguration.isFullScreen) {
7835
+ // // Reduce extra gap in maximized view
7836
+ // return short_tick_length_bg + 2;
7837
+ // }
7838
+ // return chartHasExtraBottom ? short_tick_length_bg : short_tick_length_bg + 10;
7839
+ // }
7840
+ // // Default/fallback logic for other cases
7841
+ // let baseY = self.isHeaderVisible ? short_tick_length_bg + 25 : short_tick_length_bg;
7842
+ // if (
7843
+ // subgroups.length > 1 &&
7844
+ // !metaData.xLabel &&
7845
+ // (/\d{2,4}[-\/]\d{2}[-\/]\d{2,4}/.test(d) || /\d{2,4}[-\/]\d{2,4}/.test(d))
7846
+ // ) {
7847
+ // baseY = self.isHeaderVisible ? short_tick_length_bg + 15 : short_tick_length_bg + 25;
7848
+ // }
7849
+ // if (/\d{2,4}[-\/]\d{2,4}/.test(d) && d.indexOf(' ') > -1) {
7850
+ // baseY += 4;
7851
+ // }
7852
+ // // In maximized view, reduce baseY slightly for grouped bars
7853
+ // if (self.chartConfiguration.isFullScreen && subgroups.length > 1) {
7854
+ // baseY = Math.max(short_tick_length_bg, baseY - 10);
7855
+ // }
7856
+ // return baseY;
7857
+ // })
7858
+ // .attr('x', function (d) {
7859
+ // if (self.chartData.data.length > 8 && !self.isZoomedOut) {
7860
+ // return 1; // Move first line text slightly to the left in zoom-in view for better alignment
7861
+ // }
7862
+ // return 0; // Default position
7863
+ // })
7864
+ // .text(function (d) {
7865
+ // var isValueToBeIgnored = false;
7866
+ // if (isMobile && !self.isHeaderVisible) {
7867
+ // let firstPart = d.split(/[\s\-]+/)[0];
7868
+ // return firstPart.substring(0, 3).toLowerCase();
7869
+ // }
7870
+ // (data as any[]).map((indiv: any) => {
7871
+ // if (
7872
+ // indiv.name &&
7873
+ // indiv.name.toLowerCase() == d.trim().toLowerCase() &&
7874
+ // indiv[metaData.keyList[0]] == -1
7875
+ // ) {
7876
+ // isValueToBeIgnored = true;
7877
+ // }
7878
+ // });
7879
+ // if (isValueToBeIgnored) {
7880
+ // return '';
7881
+ // }
7882
+ // // Always add space before and after hyphen for date range labels, even when header is visible and label is single line
7883
+ // // Apply for grouped bar charts and single bar charts, header visible, single line
7884
+ // const dateRangeRegex = /(\d{2,4}[-\/]\d{2}[-\/]\d{2,4})\s*-\s*(\d{2,4}[-\/]\d{2}[-\/]\d{2,4})/;
7885
+ // if (dateRangeRegex.test(d.trim())) {
7886
+ // return d.trim().replace(dateRangeRegex, (m, d1, d2) => `${d1} - ${d2}`);
7887
+ // }
7888
+ // // Split date and week labels into two lines in grouped bar zoom-in view (and minimized view)
7889
+ // const isDateLabel = /\d{2,4}[-\/]/.test(d);
7890
+ // const isWeekLabel = /week|wk|w\d+/i.test(d);
7891
+ // if (
7892
+ // subgroups.length > 1 && !self.isZoomedOut && data.length > 8 && d.indexOf(' ') > -1 && (isDateLabel || isWeekLabel)
7893
+ // ) {
7894
+ // var first = d.substring(0, d.indexOf(' '));
7895
+ // var second = d.substring(d.indexOf(' ') + 1).trim();
7896
+ // return first + '\n' + second;
7897
+ // }
7898
+ // // Also keep previous logic for minimized view
7899
+ // if (isDateLabel) {
7900
+ // if (!self.isHeaderVisible && data.length > 8 && d.indexOf(' ') > -1) {
7901
+ // var first = d.substring(0, d.indexOf(' '));
7902
+ // var second = d.substring(d.indexOf(' ') + 1).trim();
7903
+ // return first + '\n' + second;
7904
+ // } else {
7905
+ // return d;
7906
+ // }
7907
+ // }
7908
+ // if (d.trim().indexOf(' ') > -1) {
7909
+ // return d.trim().substring(0, d.indexOf(' ')).toLowerCase();
7910
+ // }
7911
+ // return d.toLowerCase();
7912
+ // // If label looks like a date (contains digits and - or /)
7913
+ // const isDateLabel2 = /\d{2,4}[-\/]/.test(d);
7914
+ // // Only split date/week labels if there are many grouped bars and header is not visible
7915
+ // if (isDateLabel) {
7916
+ // if (!self.isHeaderVisible && data.length > 8 && d.indexOf(' ') > -1) {
7917
+ // var first = d.substring(0, d.indexOf(' '));
7918
+ // var second = d.substring(d.indexOf(' ') + 1).trim();
7919
+ // return first + '\n' + second;
7920
+ // } else {
7921
+ // return d;
7922
+ // }
7923
+ // }
7924
+ // if (d.trim().indexOf(' ') > -1) {
7925
+ // return d.trim().substring(0, d.indexOf(' ')).toLowerCase();
7926
+ // }
7927
+ // return d.toLowerCase();
7928
+ // });
7929
+ // // Now apply writing-mode: sideways-lr for grouped charts with date labels in zoomed-out view and many bars
7930
+ // xAxisLabels.each(function(this: SVGTextElement, d: any) {
7931
+ // // Only apply writing-mode for exact date labels, not those containing 'week' or similar
7932
+ // const isDateLabel = /^(\d{2,4}[-\/])?\d{2,4}[-\/]\d{2,4}$/.test(d.trim());
7933
+ // const isWeekLabel = /week|wk|w\d+/i.test(d);
7934
+ // if (subgroups.length > 1 && self.isZoomedOut && data.length > 8 && isDateLabel && !isWeekLabel) {
7935
+ // d3.select(this).style('writing-mode', 'sideways-lr');
7936
+ // }
7937
+ // });
7938
+ // if (!isMobile) {
7939
+ // svg
7940
+ // .selectAll('g.x1.axis1 g.tick')
7941
+ // .filter(function (d) {
7942
+ // return !/\d{2,4}[-\/]/.test(d); // Only process non-date labels
7943
+ // })
7944
+ // .append('text')
7945
+ // .attr('class', 'lib-xaxis-labels-texts-drilldown')
7946
+ // .attr('y', long_tick_length_bg)
7947
+ // .attr('fill', 'var(--chart-text-color)')
7948
+ // .attr('x', function (d) {
7949
+ // if (self.chartData.data.length > 8 && !self.isZoomedOut) {
7950
+ // return 1; // Move text slightly to the left
7951
+ // }
7952
+ // return 0; // Default position
7953
+ // })
7954
+ // .text(function (d) {
7955
+ // if (d.trim().indexOf(' ') > -1) {
7956
+ // return d.trim().substring(d.indexOf(' '), d.length).toLowerCase();
7957
+ // }
7958
+ // return '';
7959
+ // });
7960
+ // }
7961
+ // }
7962
+ // if (isria && self.chartData.data.length > 8) {
7963
+ // svg
7964
+ // .selectAll('g.x1.axis1 g.tick text')
7965
+ // .classed('mobile-xaxis-override', true)
7966
+ // .text(function (d: string) {
7967
+ // return d.substring(0, 3);
7968
+ // })
7969
+ // .style('font-size', '12px')
7970
+ // .attr('y', 5)
7971
+ // .attr('x', 5)
7972
+ // .style('text-anchor', 'middle');
7973
+ // }
7974
+ // if (isMobile && !this.isHeaderVisible) {
7975
+ // svg
7976
+ // .selectAll('g.x1.axis1 g.tick text')
7977
+ // .classed('mobile-xaxis-override', true);
7978
+ // }
7979
+ // /**y scale for left y axis */
7980
+ // var y = d3.scaleLinear().rangeRound([height, 0]);
7981
+ // var maxValue = d3.max(data, (d) => d3.max(keyList, (key) => +d[key]));
7982
+ // if (maxValue == 0) {
7983
+ // if (this.chartData.targetLineData) {
7984
+ // maxValue = this.chartData.targetLineData.target + 20;
7985
+ // } else {
7986
+ // maxValue = 100;
7987
+ // }
7988
+ // }
7989
+ // if (this.chartConfiguration.customYscale) {
7990
+ // /**
7991
+ // * increase y-scale so that values wont cross or exceed out of range
7992
+ // * used in weekly charts
7993
+ // */
7994
+ // maxValue = maxValue * this.chartConfiguration.customYscale;
7995
+ // }
7996
+ // if (
7997
+ // this.chartData.targetLineData &&
7998
+ // maxValue < this.chartData.targetLineData.target
7999
+ // ) {
8000
+ // maxValue =
8001
+ // maxValue < 10 && this.chartData.targetLineData.target < 10
8002
+ // ? this.chartData.targetLineData.target + 3
8003
+ // : this.chartData.targetLineData.target + 20;
8004
+ // }
8005
+ // y.domain([0, maxValue]).nice();
8006
+ // let lineYscale;
8007
+ // if (lineData != null) {
8008
+ // let maxLineValue = d3.max(lineData, function (d) {
8009
+ // return +d.value;
8010
+ // });
8011
+ // maxLineValue = maxLineValue * this.chartConfiguration.customYscale;
8012
+ // let minLineValue = d3.min(lineData, function (d) {
8013
+ // return +d.value;
8014
+ // });
8015
+ // if (maxLineValue > 0) minLineValue = minLineValue - 3;
8016
+ // if (minLineValue > 0) {
8017
+ // minLineValue = 0;
8018
+ // }
8019
+ // lineYscale = d3
8020
+ // .scaleLinear()
8021
+ // .domain([minLineValue, maxLineValue])
8022
+ // .range([height, minLineValue]);
8023
+ // }
8024
+ // let yLineAxis;
8025
+ // if (lineYscale != null) {
8026
+ // yLineAxis = d3
8027
+ // .axisRight(lineYscale)
8028
+ // .ticks(self.chartConfiguration.numberOfYTicks)
8029
+ // .tickSize(0)
8030
+ // .tickFormat(self.chartConfiguration.yLineAxisLabelFomatter);
8031
+ // }
8032
+ // /**
8033
+ // * show x-axis grid between labels
8034
+ // * used by weekly charts
8035
+ // */
8036
+ // if (self.chartConfiguration.isXgridBetweenLabels) {
8037
+ // svg
8038
+ // .append('g')
8039
+ // .attr('class', 'grid')
8040
+ // .attr(
8041
+ // 'transform',
8042
+ // 'translate(' + x.bandwidth() / 2 + ',' + height + ')'
8043
+ // )
8044
+ // .call(d3.axisBottom(x).tickSize(-height).tickFormat(''))
8045
+ // .style('stroke-dasharray', '5 5')
8046
+ // .style('color', 'var(--chart-grid-color, #999999)') // Use CSS variable
8047
+ // .call((g) => g.select('.domain').remove());
8048
+ // }
8049
+ // if (this.chartConfiguration.yAxisGrid) {
8050
+ // svg
8051
+ // .append('g')
8052
+ // .call(
8053
+ // d3
8054
+ // .axisLeft(y)
8055
+ // .ticks(self.chartConfiguration.numberOfYTicks)
8056
+ // .tickSize(-width)
8057
+ // )
8058
+ // .style('color', 'var(--chart-axis-color, #B9B9B9)')
8059
+ // .style('opacity', '0.5')
8060
+ // .call((g) => {
8061
+ // g.select('.domain')
8062
+ // .remove()
8063
+ // .style('stroke', 'var(--chart-domain-color, #000000)'); // Add CSS variable for domain
8064
+ // });
8065
+ // } else {
8066
+ // svg
8067
+ // .append('g')
8068
+ // .call(d3.axisLeft(y).ticks(self.chartConfiguration.numberOfYTicks))
8069
+ // .style('color', 'var(--chart-axis-color, #B9B9B9)')
8070
+ // .style('opacity', '0.5')
8071
+ // .call((g) => {
8072
+ // g.select('.domain')
8073
+ // .style('stroke', 'var(--chart-domain-color, #000000)') // Add CSS variable for domain
8074
+ // .style('stroke-width', '1px'); // Ensure visibility
8075
+ // });
8076
+ // }
8077
+ // var xSubgroup = d3.scaleBand().domain(subgroups);
8078
+ // if (subgroups.length > 1 && !this.isZoomedOut) {
8079
+ // // For grouped bar charts in zoom-in view, use full x.bandwidth() for subgroups
8080
+ // xSubgroup.range([0, x.bandwidth()]);
8081
+ // } else if (subgroups.length === 1 && !this.isZoomedOut) {
8082
+ // // For single-bar (non-grouped) charts in zoom-in view, set bar width to 100 (increased from 80)
8083
+ // xSubgroup.range([0, 100]);
8084
+ // } else if (this.chartConfiguration.isMultiChartGridLine == undefined) {
8085
+ // xSubgroup.range([0, x.bandwidth()]);
8086
+ // } else {
8087
+ // // used to make grouped bars with lesser width as we are not using padding for width
8088
+ // xSubgroup.range([0, x.bandwidth()]);
8089
+ // }
8090
+ // // if (this.chartConfiguration.isDrilldownChart) {
8091
+ // // }
8092
+ // var color = d3
8093
+ // .scaleOrdinal()
8094
+ // .domain(subgroups)
8095
+ // .range(Object.values(metaData.colors));
8096
+ // // var colorAboveTarget = d3
8097
+ // // .scaleOrdinal()
8098
+ // // .domain(subgroups)
8099
+ // // .range(Object.values(metaData.colorAboveTarget));
8100
+ // var state = svg
8101
+ // .append('g')
8102
+ // .selectAll('.state')
8103
+ // .data(data)
8104
+ // .enter()
8105
+ // .append('g')
8106
+ // .attr('transform', function (d) {
8107
+ // return 'translate(' + x(d.name) + ',0)';
8108
+ // });
8109
+ // state
8110
+ // .selectAll('rect')
8111
+ // .data(function (d) {
8112
+ // let newList: any = [];
8113
+ // subgroups.map(function (key) {
8114
+ // // if (key !== "group") {
8115
+ // let obj: any = { key: key, value: d[key], name: d.name };
8116
+ // newList.push(obj);
8117
+ // // }
8118
+ // });
8119
+ // return newList;
8120
+ // })
8121
+ // .enter()
8122
+ // .append('rect')
8123
+ // .attr('class', 'bars')
8124
+ // .on('click', function (d) {
8125
+ // if (d.key != 'Target') {
8126
+ // if (
8127
+ // !metaData.barWithoutClick ||
8128
+ // !metaData.barWithoutClick.length ||
8129
+ // (!metaData.barWithoutClick.includes(d?.name) &&
8130
+ // !metaData.barWithoutClick.includes(d?.key))
8131
+ // )
8132
+ // // self.handleClick(d.data.name);
8133
+ // self.handleClick(d);
8134
+ // }
8135
+ // })
8136
+ // .attr('x', function (d) {
8137
+ // if (self.chartConfiguration.isDrilldownChart) {
8138
+ // data.map((indiv: any) => {
8139
+ // if (indiv.name == d.name) {
8140
+ // let keys = Object.keys(indiv).filter((temp, i) => i != 0);
8141
+ // tempScale = d3.scaleBand().domain(keys).range([0, x.bandwidth()]);
8142
+ // if (x.bandwidth() > 100) {
8143
+ // // Increase bar width a bit in zoom-in view
8144
+ // let reducedBarWidth = 60;
8145
+ // if (!self.isZoomedOut) {
8146
+ // reducedBarWidth = 30;
8147
+ // }
8148
+ // if (self.chartData.data.length == 1) {
8149
+ // if (Object.keys(self.chartData.data[0]).length == 2) {
8150
+ // tempScale.range([
8151
+ // 0 + (x.bandwidth() - reducedBarWidth) / 2,
8152
+ // x.bandwidth() - (x.bandwidth() - reducedBarWidth) / 2,
8153
+ // ]);
8154
+ // } else
8155
+ // tempScale.range([
8156
+ // 0 + (x.bandwidth() - reducedBarWidth) / 2,
8157
+ // x.bandwidth() - (x.bandwidth() - reducedBarWidth) / 2,
8158
+ // ]);
8159
+ // } else
8160
+ // tempScale.range([
8161
+ // 0 + (x.bandwidth() - reducedBarWidth) / 2,
8162
+ // x.bandwidth() - (x.bandwidth() - reducedBarWidth) / 2,
8163
+ // ]);
8164
+ // }
8165
+ // }
8166
+ // });
8167
+ // return tempScale(d.key);
8168
+ // }
8169
+ // return xSubgroup(d.key);
8170
+ // })
8171
+ // .attr('y', function (d) {
8172
+ // if (d.value == -1) {
8173
+ // return y(0);
8174
+ // }
8175
+ // if (d.value >= 0) {
8176
+ // const barHeight = height - y(d.value);
8177
+ // const minHeight = self.chartConfiguration.defaultBarHeight || 2;
8178
+ // return barHeight < minHeight ? y(0) - minHeight : y(d.value);
8179
+ // }
8180
+ // return y(0);
8181
+ // })
8182
+ // .attr('width', function (d) {
8183
+ // // For grouped bar charts in zoom-in view, set bar width to 50 for maximum thickness
8184
+ // if (subgroups.length > 1 && !self.isZoomedOut) {
8185
+ // return 50;
8186
+ // }
8187
+ // // For single-bar (non-grouped) charts in zoom-in view, set bar width to 80
8188
+ // if (subgroups.length === 1 && !self.isZoomedOut) {
8189
+ // return 80;
8190
+ // }
8191
+ // let tempScale = d3.scaleBand().domain([]).range([0, 0]);
8192
+ // // Default logic for other chart types
8193
+ // if (self.chartConfiguration.isDrilldownChart) {
8194
+ // data.map((indiv: any) => {
8195
+ // if (indiv.name == d.name) {
8196
+ // let keys = Object.keys(indiv).filter((temp, i) => i != 0);
8197
+ // tempScale = d3.scaleBand().domain(keys).range([0, x.bandwidth()]);
8198
+ // if (x.bandwidth() > 100) {
8199
+ // // Increase bar width a bit in zoom-in view
8200
+ // let reducedBarWidth = 60;
8201
+ // if (!self.isZoomedOut) {
8202
+ // reducedBarWidth = 100;
8203
+ // }
8204
+ // if (self.chartData.data.length == 1) {
8205
+ // if (Object.keys(self.chartData.data[0]).length == 2) {
8206
+ // tempScale.range([
8207
+ // 0 + (x.bandwidth() - reducedBarWidth) / 2,
8208
+ // x.bandwidth() - (x.bandwidth() - reducedBarWidth) / 2,
8209
+ // ]);
8210
+ // } else
8211
+ // tempScale.range([
8212
+ // 0 + (x.bandwidth() - reducedBarWidth) / 2,
8213
+ // x.bandwidth() - (x.bandwidth() - reducedBarWidth) / 2,
8214
+ // ]);
8215
+ // } else
8216
+ // tempScale.range([
8217
+ // 0 + (x.bandwidth() - reducedBarWidth) / 2,
8218
+ // x.bandwidth() - (x.bandwidth() - reducedBarWidth) / 2,
8219
+ // ]);
8220
+ // }
8221
+ // }
8222
+ // });
8223
+ // return self.isZoomedOut
8224
+ // ? tempScale.bandwidth()
8225
+ // : self.chartData.data.length && self.chartData.data.length > 8
8226
+ // ? tempScale.bandwidth()
8227
+ // : tempScale.bandwidth();
8228
+ // }
8229
+ // return self.isZoomedOut
8230
+ // ? tempScale.bandwidth()
8231
+ // : self.chartData.data.length && self.chartData.data.length > 8
8232
+ // ? tempScale.bandwidth()
8233
+ // : tempScale.bandwidth();
8234
+ // })
8235
+ // .attr('height', function (d) {
8236
+ // if (d.value == -1) {
8237
+ // return height - y(0);
8238
+ // }
8239
+ // if (d.value >= 0) {
8240
+ // const barHeight = height - y(d.value);
8241
+ // const minHeight = self.chartConfiguration.defaultBarHeight || 2;
8242
+ // return Math.max(barHeight, minHeight);
8243
+ // }
8244
+ // return height - y(0);
8245
+ // })
8246
+ // .style('cursor', function (d) {
8247
+ // if (metaData.hasDrillDown && !isria) return 'pointer';
8248
+ // else return 'default';
8249
+ // })
8250
+ // .attr('fill', function (d) {
8251
+ // if (
8252
+ // d.value &&
8253
+ // self.chartData.targetLineData &&
8254
+ // d.value >= parseFloat(self.chartData.targetLineData.target) &&
8255
+ // self.chartData.metaData.colorAboveTarget
8256
+ // ) {
8257
+ // const key = d.key.toLowerCase();
8258
+ // const colorAboveTarget = Object.keys(self.chartData.metaData.colorAboveTarget).find(
8259
+ // k => k.toLowerCase() === key
8260
+ // );
8261
+ // if (colorAboveTarget) {
8262
+ // return self.chartData.metaData.colorAboveTarget[colorAboveTarget];
8263
+ // }
8264
+ // }
8265
+ // return self.chartData.metaData.colors[d.key];
8266
+ // });
8267
+ // /**
8268
+ // * display angled texts on the bars
8269
+ // */
8270
+ // if (this.chartConfiguration.textsOnBar != undefined && !this.isZoomedOut) {
8271
+ // state
8272
+ // .selectAll('text')
8273
+ // .data(function (d) {
8274
+ // let newList: any = [];
8275
+ // subgroups.map(function (key) {
8276
+ // let obj: any = { key: key, value: d[key], name: d.name };
8277
+ // newList.push(obj);
8278
+ // });
8279
+ // return newList;
8280
+ // })
8281
+ // .enter()
8282
+ // .append('text')
8283
+ // .attr('fill', 'var(--chart-text-color)')
8284
+ // .attr('x', function (d) {
8285
+ // return 0;
8286
+ // })
8287
+ // .attr('y', function (d) {
8288
+ // return 0;
8289
+ // })
8290
+ // .attr('class', 'lib-data-labels-weeklycharts')
8291
+ // .text(function (d) {
8292
+ // return d.key && d.value
8293
+ // ? d.key.length > 20
8294
+ // ? d.key.substring(0, 17) + '...'
8295
+ // : d.key
8296
+ // : '';
8297
+ // })
8298
+ // .style('fill', function (d) {
8299
+ // return '#000';
8300
+ // })
8301
+ // .style('font-weight', 'bold')
8302
+ // .style('font-size', function (d) {
8303
+ // if (self.isZoomedOut) {
8304
+ // return '9px'; // 👈 Zoomed out mode
8305
+ // }
8306
+ // if (self.chartConfiguration.isDrilldownChart) {
8307
+ // if (window.innerWidth > 1900) {
8308
+ // return '18px';
8309
+ // } else if (window.innerWidth < 1400) {
8310
+ // return '10px';
8311
+ // } else {
8312
+ // return '14px';
8313
+ // }
8314
+ // } else {
8315
+ // return '14px';
8316
+ // }
8317
+ // })
8318
+ // .attr('transform', function (d) {
8319
+ // data.map((indiv: any) => {
8320
+ // if (indiv.name == d.name) {
8321
+ // let keys = Object.keys(indiv).filter((temp, i) => i != 0);
8322
+ // var temp;
8323
+ // tempScale = d3.scaleBand().domain(keys).range([0, x.bandwidth()]);
8324
+ // if (x.bandwidth() > 100) {
8325
+ // if (self.chartData.data.length == 1) {
8326
+ // if (Object.keys(self.chartData.data[0]).length == 2) {
8327
+ // tempScale.range([
8328
+ // 0 + (x.bandwidth() - 200) / 2,
8329
+ // x.bandwidth() - (x.bandwidth() - 200) / 2,
8330
+ // ]);
8331
+ // // .padding(0.05);
8332
+ // } else
8333
+ // tempScale.range([
8334
+ // 0 + (x.bandwidth() - 300) / 2,
8335
+ // x.bandwidth() - (x.bandwidth() - 300) / 2,
8336
+ // ]);
8337
+ // // .padding(0.05);
8338
+ // } else
8339
+ // tempScale.range([
8340
+ // 0 + (x.bandwidth() - 125) / 2,
8341
+ // x.bandwidth() - (x.bandwidth() - 125) / 2,
8342
+ // ]);
8343
+ // }
8344
+ // }
8345
+ // });
8346
+ // /**
8347
+ // * if set, then all texts ll be horizontal
8348
+ // */
8349
+ // if (self.chartConfiguration.textAlwaysHorizontal) {
8350
+ // return (
8351
+ // 'translate(' + xSubgroup(d.key) + ',' + (y(d.value) - 3) + ')'
8352
+ // );
8353
+ // }
8354
+ // /**
8355
+ // * rotate texts having more than one digits
8356
+ // */
8357
+ // // if (d.value > 9)
8358
+ // if (!isNaN(tempScale(d.key)))
8359
+ // return (
8360
+ // 'translate(' +
8361
+ // (tempScale(d.key) + tempScale.bandwidth() * 0.55) +
8362
+ // ',' +
8363
+ // (y(0) - 10) +
8364
+ // ') rotate(270)'
8365
+ // );
8366
+ // return 'translate(0,0)';
8367
+ // // else
8368
+ // // return (
8369
+ // // 'translate(' +
8370
+ // // (tempScale(d.key) + tempScale.bandwidth() / 2) +
8371
+ // // ',' +
8372
+ // // y(0) +
8373
+ // // ')'
8374
+ // // );
8375
+ // })
8376
+ // .on('click', function (d) {
8377
+ // if (
8378
+ // !metaData.barWithoutClick ||
8379
+ // !metaData.barWithoutClick.length ||
8380
+ // (!metaData.barWithoutClick.includes(d?.name) &&
8381
+ // !metaData.barWithoutClick.includes(d?.key))
8382
+ // )
8383
+ // self.handleClick(d);
8384
+ // });
8385
+ // if (!isria) {
8386
+ // state
8387
+ // .selectAll('.lib-data-labels-weeklycharts')
8388
+ // .on('mouseout', handleMouseOut)
8389
+ // .on('mouseover', handleMouseOver);
8390
+ // }
8391
+ // }
8392
+ // if (this.chartConfiguration.displayTitleOnTop || (
8393
+ // this.chartConfiguration.textsOnBar == undefined &&
8394
+ // this.chartConfiguration.displayTitleOnTop == undefined
8395
+ // )) {
8396
+ // if (!isria) {
8397
+ // state
8398
+ // .selectAll('rect')
8399
+ // .on('mouseout', handleMouseOut)
8400
+ // .on('mouseover', handleMouseOver);
8401
+ // }
8402
+ // }
8403
+ // function handleMouseOver(d, i) {
8404
+ // svg.selectAll('.lib-verticalstack-title-ontop').remove();
8405
+ // svg
8406
+ // .append('foreignObject')
8407
+ // .attr('x', function () {
8408
+ // // ...existing code for tempScale calculation...
8409
+ // var elementsCounter;
8410
+ // data.map((indiv: any) => {
8411
+ // if (indiv.name == d.name) {
8412
+ // let keys = Object.keys(indiv).filter((temp, i) => i != 0);
8413
+ // elementsCounter = keys.length;
8414
+ // tempScale = d3.scaleBand().domain(keys).range([0, x.bandwidth()]);
8415
+ // if (x.bandwidth() > 100) {
8416
+ // if (self.chartData.data.length == 1) {
8417
+ // if (Object.keys(self.chartData.data[0]).length == 2) {
8418
+ // tempScale.range([
8419
+ // 0 + (x.bandwidth() - 200) / 2,
8420
+ // x.bandwidth() - (x.bandwidth() - 200) / 2,
8421
+ // ]);
8422
+ // } else
8423
+ // tempScale.range([
8424
+ // 0 + (x.bandwidth() - 300) / 2,
8425
+ // x.bandwidth() - (x.bandwidth() - 300) / 2,
8426
+ // ]);
8427
+ // } else
8428
+ // tempScale.range([
8429
+ // 0 + (x.bandwidth() - 125) / 2,
8430
+ // x.bandwidth() - (x.bandwidth() - 125) / 2,
8431
+ // ]);
8432
+ // }
8433
+ // }
8434
+ // });
8435
+ // if (metaData.hasDrillDown) {
8436
+ // if (tempScale.bandwidth() + leftAndRightSpaces * 2 > 180) {
8437
+ // return (
8438
+ // x(d.name) + tempScale(d.key) + tempScale.bandwidth() / 2 - 90
8439
+ // );
8440
+ // }
8441
+ // return (
8442
+ // x(d.name) +
8443
+ // tempScale(d.key) -
8444
+ // (tempScale.bandwidth() + leftAndRightSpaces * 2) / 2 +
8445
+ // tempScale.bandwidth() / 2
8446
+ // );
8447
+ // } else return x(d.name) + tempScale(d.key) - (tempScale.bandwidth() + leftAndRightSpaces * 2) / 2 + tempScale.bandwidth() / 2;
8448
+ // })
8449
+ // .attr('class', 'lib-verticalstack-title-ontop')
8450
+ // .attr('y', function () {
8451
+ // return y(d.value) - 3 - 40 - 10;
8452
+ // })
8453
+ // .attr('dy', function () {
8454
+ // return d.class;
8455
+ // })
8456
+ // .attr('width', function () {
8457
+ // data.map((indiv: any) => {
8458
+ // if (indiv.name == d.name) {
8459
+ // let keys = Object.keys(indiv).filter((temp, i) => i != 0);
8460
+ // tempScale = d3.scaleBand().domain(keys).range([0, x.bandwidth()]);
8461
+ // if (x.bandwidth() > 100) {
8462
+ // if (self.chartData.data.length == 1) {
8463
+ // if (Object.keys(self.chartData.data[0]).length == 2) {
8464
+ // tempScale.range([
8465
+ // 0 + (x.bandwidth() - 200) / 2,
8466
+ // x.bandwidth() - (x.bandwidth() - 200) / 2,
8467
+ // ]);
8468
+ // } else
8469
+ // tempScale.range([
8470
+ // 0 + (x.bandwidth() - 300) / 2,
8471
+ // x.bandwidth() - (x.bandwidth() - 300) / 2,
8472
+ // ]);
8473
+ // } else
8474
+ // tempScale.range([
8475
+ // 0 + (x.bandwidth() - 125) / 2,
8476
+ // x.bandwidth() - (x.bandwidth() - 125) / 2,
8477
+ // ]);
8478
+ // }
8479
+ // }
8480
+ // });
8481
+ // if (metaData.hasDrillDown) {
8482
+ // if (tempScale.bandwidth() + leftAndRightSpaces * 2 > 180) {
8483
+ // return '180px';
8484
+ // }
8485
+ // return tempScale.bandwidth() + leftAndRightSpaces * 2;
8486
+ // } else return tempScale.bandwidth() + leftAndRightSpaces * 2;
8487
+ // })
8488
+ // .attr('height', 50)
8489
+ // .append('xhtml:div')
8490
+ // .attr('class', 'title')
8491
+ // .style('z-index', 99)
8492
+ // .html(function () {
8493
+ // let barLabel = d.key;
8494
+ // let dataType = metaData.dataType ? metaData.dataType : '';
8495
+ // let value = d.value;
8496
+ // let desiredText =
8497
+ // '<span class="title-bar-name">' + barLabel + '</span>';
8498
+ // desiredText +=
8499
+ // '<span class="title-bar-value"><span>' +
8500
+ // value +
8501
+ // '</span>' +
8502
+ // dataType +
8503
+ // '</span>';
8504
+ // return desiredText;
8505
+ // });
8506
+ // }
8507
+ // function handleMouseOut(d, i) {
8508
+ // svg.selectAll('.lib-verticalstack-title-ontop').remove();
8509
+ // }
8510
+ // svg
8511
+ // .append('g')
8512
+ // .attr('class', 'x2 axis2')
8513
+ // .attr('transform', 'translate(0,' + height + ')')
8514
+ // .style('color', 'var(--chart-axis-color, #000)') // Use CSS variable instead of hardcoded #000
8515
+ // .call(d3.axisBottom(xScaleFromOrigin).tickSize(0))
8516
+ // .call((g) => g.select('.domain').attr('fill', 'none'));
8517
+ // svg.selectAll('g.x2.axis2 g.tick text').style('display', 'none');
8518
+ // svg
8519
+ // .append('g')
8520
+ // .attr('class', 'lib-stacked-y-axis-text yaxis-dashed')
8521
+ // .attr('style', self.chartConfiguration.yAxisCustomTextStyles)
8522
+ // .attr('transform', 'translate(0,0)')
8523
+ // .call(y)
8524
+ // .style('display', 'none');
8525
+ // svgYAxisLeft
8526
+ // .append('g')
8527
+ // .append('g')
8528
+ // .attr('class', 'lib-yaxis-labels-texts-drilldown yaxis-dashed')
8529
+ // .attr('style', self.chartConfiguration.yAxisCustomTextStyles)
8530
+ // .attr('transform', 'translate(0,0)')
8531
+ // .call(
8532
+ // d3
8533
+ // .axisLeft(y)
8534
+ // .tickSize(0)
8535
+ // .ticks(self.chartConfiguration.numberOfYTicks)
8536
+ // .tickFormat(function (d) {
8537
+ // const formatted = self.chartConfiguration.yAxisLabelFomatter
8538
+ // ? self.chartConfiguration.yAxisLabelFomatter(d)
8539
+ // : d;
8540
+ // return formatted >= 1000 ? formatted / 1000 + 'k' : formatted;
8541
+ // })
8542
+ // )
8543
+ // .call((g) => {
8544
+ // // Style the domain line for theme support
8545
+ // g.select('.domain')
8546
+ // .style('stroke', 'var(--chart-domain-color, #000000)')
8547
+ // .style('stroke-width', '1px');
8548
+ // })
8549
+ // .selectAll('text')
8550
+ // .style('fill', 'var(--chart-text-color)');
8551
+ // svgYAxisRight
8552
+ // .append('g')
8553
+ // .attr('class', 'lib-yaxis-labels-texts-drilldown yaxis-dashed')
8554
+ // .attr('style', self.chartConfiguration.yAxisCustomTextStyles)
8555
+ // .attr('transform', 'translate(0,0)')
8556
+ // .call(y)
8557
+ // .style('display', 'none');
8558
+ // /**
8559
+ // * hide x axis labels
8560
+ // * config is there for future use
8561
+ // * used by weekly charts
8562
+ // */
8563
+ // if (
8564
+ // this.chartConfiguration.isXaxisLabelHidden != undefined &&
8565
+ // this.chartConfiguration.isXaxisLabelHidden
8566
+ // ) {
8567
+ // d3.selectAll('g.lib-line-x-axis-text > g > text').attr(
8568
+ // 'class',
8569
+ // 'lib-display-hidden'
8570
+ // );
8571
+ // }
8572
+ // /**
8573
+ // * hide y axis labels
8574
+ // * used by weekly charts
8575
+ // */
8576
+ // if (
8577
+ // this.chartConfiguration.isYaxisLabelHidden != undefined &&
8578
+ // this.chartConfiguration.isYaxisLabelHidden
8579
+ // ) {
8580
+ // d3.selectAll('.yaxis-dashed > g > text').attr(
8581
+ // 'class',
8582
+ // 'lib-display-hidden'
8583
+ // );
8584
+ // }
8585
+ // /**
8586
+ // * hide y axis labels
8587
+ // * config is there for future use
8588
+ // */
8589
+ // if (
8590
+ // this.chartConfiguration.isYaxisHidden != undefined &&
8591
+ // this.chartConfiguration.isYaxisHidden
8592
+ // ) {
8593
+ // d3.selectAll('.yaxis-dashed').attr('class', 'lib-display-hidden');
8594
+ // }
8595
+ // /**
8596
+ // * dashed y axis
8597
+ // * used by weekly charts
8598
+ // */
8599
+ // if (
8600
+ // this.chartConfiguration.isYaxisDashed != undefined &&
8601
+ // this.chartConfiguration.isYaxisDashed
8602
+ // ) {
8603
+ // d3.selectAll('.yaxis-dashed')
8604
+ // .style('stroke-dasharray', '5 5')
8605
+ // .style('color', 'var(--chart-axis-color, #999999)'); // Use CSS variable
8606
+ // }
8607
+ // if (lineData != null) {
8608
+ // if (lineData && self.chartConfiguration.showLineChartAxis) {
8609
+ // svgYAxisRight
8610
+ // .append('g')
8611
+ // .attr('class', 'lib-stacked-y-axis-text1')
8612
+ // .attr('style', self.chartConfiguration.yAxisCustomTextStyles)
8613
+ // .attr('transform', 'translate(' + 0 + ',0)')
8614
+ // .call(yLineAxis);
8615
+ // }
8616
+ // }
8617
+ // /**
8618
+ // * used to display y label
8619
+ // */
8620
+ // // if (this.isZoomedOut) {
8621
+ // // svg
8622
+ // // .selectAll('.lib-xaxis-labels-texts-drilldown')
8623
+ // // .attr('class', 'lib-display-hidden');
8624
+ // // }
8625
+ // if (this.isZoomedOut) {
8626
+ // svg
8627
+ // .selectAll('.lib-xaxis-labels-texts-drilldown')
8628
+ // .each((d, i, nodes) => {
8629
+ // const text = d3.select(nodes[i]);
8630
+ // const label = text.text();
8631
+ // if (label.indexOf('\n') > -1) {
8632
+ // const lines = label.split('\n');
8633
+ // text.text(null);
8634
+ // lines.forEach((line, idx) => {
8635
+ // text.append('tspan')
8636
+ // .text(line)
8637
+ // .attr('x', 0)
8638
+ // .attr('dy', idx === 0 ? '1em' : '1.1em');
8639
+ // });
8640
+ // } else {
8641
+ // const words = label.split(' ');
8642
+ // text.text(null);
8643
+ // words.forEach((word, index) => {
8644
+ // text.append('tspan').text(word);
8645
+ // });
8646
+ // }
8647
+ // })
8648
+ // .style('fill', 'var(--chart-text-color)')
8649
+ // .attr('transform', null);
8650
+ // svg
8651
+ // .select('.x-axis')
8652
+ // .attr('transform', `translate(0, ${height - margin.bottom + 10})`);
8653
+ // }
8654
+ // /**
8655
+ // * used to write y labels based on configuration
8656
+ // */
8657
+ // if (metaData.yLabel) {
8658
+ // const yPosition = isria ? 0 - margin.left / 2 - 30 : 0 - margin.left / 2 - 40;
8659
+ // svgYAxisLeft
8660
+ // .append('text')
8661
+ // .attr('class', 'lib-axis-group-label font-size-1')
8662
+ // .attr('style', self.chartConfiguration.yAxisCustomlabelStyles)
8663
+ // .attr('transform', 'rotate(-90)')
8664
+ // .attr('y', yPosition)
8665
+ // .attr('x', 0 - height / 2)
8666
+ // .attr('dy', '1em')
8667
+ // .style('text-anchor', 'middle')
8668
+ // .attr('fill', 'var(--chart-text-color)');
8669
+ // if (this.chartConfiguration.isMultiChartGridLine === undefined) {
8670
+ // svgYAxisLeft
8671
+ // .selectAll('.lib-axis-group-label')
8672
+ // .style('font-size', 'smaller')
8673
+ // .text(metaData.yLabel);
8674
+ // } else {
8675
+ // svg
8676
+ // .selectAll('.lib-axis-group-label')
8677
+ // .attr('class', 'lib-ylabel-weeklyCharts')
8678
+ // .text(metaData.yLabel.toLowerCase());
8679
+ // }
8680
+ // }
8681
+ // if (this.chartData.targetLineData) {
8682
+ // const yZero = y(this.chartData.targetLineData.target);
8683
+ // svg
8684
+ // .append('line')
8685
+ // .attr('x1', 0)
8686
+ // .attr('x2', width)
8687
+ // .attr('y1', yZero)
8688
+ // .attr('y2', yZero)
8689
+ // .style('stroke-dasharray', '5 5')
8690
+ // .style('stroke', this.chartData.targetLineData.color);
8691
+ // // svgYAxisRight
8692
+ // // .append('line')
8693
+ // // .attr('x1', 0)
8694
+ // // .attr('x2', rightSvgWidth)
8695
+ // // .attr('y1', yZero)
8696
+ // // .attr('y2', yZero)
8697
+ // // .style('stroke', this.chartData.targetLineData.color);
8698
+ // svgYAxisRight
8699
+ // .append('foreignObject')
8700
+ // .attr('transform', 'translate(' + 0 + ',' + (yZero - 30) + ')')
8701
+ // .attr('width', rightSvgWidth)
8702
+ // .attr('height', 50)
8703
+ // .append('xhtml:div')
8704
+ // .attr('class', 'target-display')
8705
+ // .style('color', 'var(--chart-text-color)')
8706
+ // .html(function () {
8707
+ // let dataTypeTemp = '';
8708
+ // let targetLineName = 'target';
8709
+ // if (metaData.dataType) {
8710
+ // dataTypeTemp = metaData.dataType;
8711
+ // }
8712
+ // if (
8713
+ // self.chartData.targetLineData &&
8714
+ // self.chartData.targetLineData.targetName
8715
+ // ) {
8716
+ // targetLineName = self.chartData.targetLineData.targetName;
8717
+ // }
8718
+ // return (
8719
+ // `<div>${targetLineName}</div>` +
8720
+ // '<div>' +
8721
+ // self.chartData.targetLineData.target +
8722
+ // '' +
8723
+ // dataTypeTemp +
8724
+ // '</div>'
8725
+ // );
8726
+ // });
8727
+ // }
8728
+ // if (this.chartConfiguration.isDrilldownChart) {
8729
+ // /**
8730
+ // * used by drilldown charts
8731
+ // */
8732
+ // // svg
8733
+ // // .selectAll('.lib-axis-group-label')
8734
+ // // .attr('class', 'lib-ylabel-drilldowncharts')
8735
+ // // .text(metaData.yLabel.toLowerCase());
8736
+ // svg.selectAll('g.x1.axis1 g.tick line').style('display', 'none');
8737
+ // }
8738
+ // if (metaData.xLabel) {
8739
+ // function isAcronym(label) {
8740
+ // return (
8741
+ // (label.length <= 4 && /^[A-Z]+$/.test(label)) ||
8742
+ // (label === label.toUpperCase() && /[A-Z]/.test(label))
8743
+ // );
8744
+ // }
8745
+ // const xLabelText = metaData.xLabel;
8746
+ // const isAcr = isAcronym(xLabelText.replace(/[^A-Za-z]/g, ''));
8747
+ // const xPosition = isria ? (height + margin.top + margin.bottom) : (height + margin.top + margin.bottom + 40);
8748
+ // svg
8749
+ // .append('text')
8750
+ // .attr('class', function () {
8751
+ // let baseClass = 'lib-axis-group-label font-size-1';
8752
+ // if (self.chartConfiguration.isDrilldownChart)
8753
+ // return baseClass + ' lib-xlabel-drilldowncharts';
8754
+ // if (self.chartConfiguration.isMultiChartGridLine != undefined)
8755
+ // return baseClass + ' lib-xlabel-weeklyCharts';
8756
+ // return baseClass + ' lib-axis-waterfall-label';
8757
+ // })
8758
+ // .attr('style', self.chartConfiguration.xAxisCustomlabelStyles)
8759
+ // .attr(
8760
+ // 'transform',
8761
+ // 'translate(' + width / 2 + ' ,' + xPosition + ')'
8762
+ // )
8763
+ // .style('text-anchor', 'middle')
8764
+ // .style('fill', 'var(--chart-text-color)')
8765
+ // .text(isAcr ? xLabelText.toUpperCase() : xLabelText.toLowerCase())
8766
+ // .style('text-transform', isAcr ? 'none' : 'capitalize');
8767
+ // }
8768
+ // if (metaData.lineyLabel) {
8769
+ // svgYAxisRight
8770
+ // .append('text')
8771
+ // .attr('class', 'lib-axis-group-label lib-line-axis')
8772
+ // .attr('fill', 'var(--chart-text-color)')
8773
+ // .attr('style', self.chartConfiguration.yAxisCustomlabelStyles)
8774
+ // .attr('transform', 'translate(0,0) rotate(90)')
8775
+ // .attr('y', 0 - 100)
8776
+ // .attr('x', 0 + 100)
8777
+ // .attr('dy', '5em')
8778
+ // .style('text-anchor', 'middle')
8779
+ // .style('font-size', 'smaller')
8780
+ // .text(metaData.lineyLabel);
8781
+ // }
8782
+ // if (lineData) {
8783
+ // svg
8784
+ // .append('path')
8785
+ // .datum(lineData)
8786
+ // .attr('fill', 'none')
8787
+ // .attr('stroke', self.chartConfiguration.lineGraphColor)
8788
+ // .attr('stroke-width', 1.5)
8789
+ // .attr(
8790
+ // 'd',
8791
+ // d3
8792
+ // .line()
8793
+ // .x(function (d) {
8794
+ // return x(d.name) + x.bandwidth() / 2;
8795
+ // })
8796
+ // .y(function (d) {
8797
+ // return lineYscale(d.value);
8798
+ // })
8799
+ // );
8800
+ // var dot = svg
8801
+ // .selectAll('myCircles')
8802
+ // .data(lineData)
8803
+ // .enter()
8804
+ // .append('g')
8805
+ // .on('click', function (d) {
8806
+ // if (
8807
+ // !metaData.barWithoutClick ||
8808
+ // !metaData.barWithoutClick.length ||
8809
+ // (!metaData.barWithoutClick.includes(d?.name) &&
8810
+ // !metaData.barWithoutClick.includes(d?.key))
8811
+ // )
8812
+ // self.handleClick(d);
8813
+ // });
8814
+ // dot
8815
+ // .append('circle')
8816
+ // .attr('fill', function (d) {
8817
+ // return self.chartConfiguration.lineGraphColor;
8818
+ // })
8819
+ // .attr('stroke', 'none')
8820
+ // .attr('cx', function (d) {
8821
+ // return x(d.name) + x.bandwidth() / 2;
8822
+ // })
8823
+ // .attr('cy', function (d) {
8824
+ // return lineYscale(d.value);
8825
+ // })
8826
+ // .style('cursor', () =>
8827
+ // self.chartData.metaData.hasDrillDown ? 'pointer' : 'default'
8828
+ // )
8829
+ // .attr('r', 3);
8830
+ // if (self.chartConfiguration.lineGraphColor) {
8831
+ // dot
8832
+ // .append('text')
8833
+ // .attr('class', 'dot')
8834
+ // .attr('fill', 'var(--chart-text-color)')
8835
+ // .attr('color', self.chartConfiguration.lineGraphColor)
8836
+ // .attr('style', 'font-size: ' + '.85em')
8837
+ // .attr('x', function (d, i) {
8838
+ // return x(d.name) + x.bandwidth() / 2;
8839
+ // })
8840
+ // .attr('y', function (d) {
8841
+ // return lineYscale(d.value);
8842
+ // })
8843
+ // .attr('dy', '-1em')
8844
+ // .text(function (d) {
8845
+ // return self.chartConfiguration.labelFormatter(d.value);
8846
+ // });
8847
+ // }
8848
+ // }
8849
+ // }
7628
8850
  initializegroupChart() {
7629
8851
  // ==================== VARIABLE DECLARATIONS ====================
7630
8852
  const self = this;
@@ -7735,7 +8957,7 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
7735
8957
  .domain(groups)
7736
8958
  .range([0, width - RIGHT_SVG_WIDTH]);
7737
8959
  // ==================== X-AXIS RENDERING ====================
7738
- this.renderXAxis(svg, x, height, metaData, subgroups, data, SHORT_TICK_LENGTH_BG, LONG_TICK_LENGTH_BG, self, isria, isMobile, isTablet);
8960
+ this.renderXAxis(svg, x, height, metaData, subgroups, data, SHORT_TICK_LENGTH_BG, LONG_TICK_LENGTH_BG, self, isria, isMobile);
7739
8961
  // ==================== Y-AXIS SETUP ====================
7740
8962
  const y = d3.scaleLinear().rangeRound([height, 0]);
7741
8963
  let maxValue = this.calculateMaxValue(data, keyList);
@@ -7786,18 +9008,13 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
7786
9008
  }
7787
9009
  }
7788
9010
  // ==================== HELPER METHODS ====================
7789
- renderXAxis(svg, x, height, metaData, subgroups, data, shortTickLengthBg, longTickLengthBg, self, isria, isMobile, isTablet) {
9011
+ renderXAxis(svg, x, height, metaData, subgroups, data, shortTickLengthBg, longTickLengthBg, self, isria, isMobile) {
7790
9012
  let alternate_text = false;
7791
9013
  if (this.chartConfiguration.isMultiChartGridLine === undefined) {
7792
9014
  // Normal ticks for dashboard charts
7793
- // Dynamically adjust Y translation for mobile
7794
- let translateY = height;
7795
- if (isMobile) {
7796
- translateY = height + 5; // Add extra space at the top for mobile
7797
- }
7798
9015
  svg.append('g')
7799
9016
  .attr('class', 'x1 axis1')
7800
- .attr('transform', `translate(0,${translateY})`)
9017
+ .attr('transform', `translate(0,${height})`)
7801
9018
  .call(d3.axisBottom(x))
7802
9019
  .call((g) => g.select('.domain').remove());
7803
9020
  svg.selectAll('g.x1.axis1 g.tick line').remove();
@@ -7857,7 +9074,7 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
7857
9074
  .attr('x', 5)
7858
9075
  .style('text-anchor', 'middle');
7859
9076
  }
7860
- // Mobile/tablet override - check for single-group date charts first
9077
+ // Mobile override - check for single-group date charts first
7861
9078
  if (isMobile) {
7862
9079
  const textNodes = svg.selectAll('g.x1.axis1 g.tick text');
7863
9080
  const groupsCount = data.length || 0;
@@ -7871,14 +9088,8 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
7871
9088
  hasDateValues = true;
7872
9089
  }
7873
9090
  });
7874
- // Count unique x-axis labels
7875
- const uniqueLabels = new Set();
7876
- textNodes.each(function (d) {
7877
- uniqueLabels.add(d);
7878
- });
7879
- const labelCount = uniqueLabels.size;
7880
- if (hasDateValues && labelCount <= 3) {
7881
- // For 3 or fewer labels, keep horizontal display
9091
+ if (hasDateValues && subgroups && subgroups.length < 3) {
9092
+ // For single chart with dates, ensure horizontal display
7882
9093
  textNodes
7883
9094
  .style('writing-mode', 'horizontal-tb') // Explicitly set horizontal
7884
9095
  .classed('mobile-xaxis-override', false) // Remove vertical class
@@ -7888,91 +9099,18 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
7888
9099
  .attr('dx', '0') // Reset any x offset
7889
9100
  .attr('dy', '0'); // Reset any y offset
7890
9101
  }
7891
- else if (labelCount > 3) {
7892
- // For more than 3 labels, use vertical alignment
7893
- textNodes
7894
- .style('writing-mode', 'sideways-lr') // Vertical text
7895
- .classed('mobile-xaxis-override', true) // Add vertical class
7896
- .attr('text-anchor', 'middle') // Center align
7897
- .attr('y', 30) // Adjust vertical position
7898
- .attr('x', 0); // Reset x position
7899
- }
7900
9102
  else if (!this.isHeaderVisible) {
7901
9103
  // Default mobile behavior for non-date or multi-group
7902
9104
  textNodes.classed('mobile-xaxis-override', true);
7903
9105
  }
7904
- }
7905
- // Tablet view: try to wrap long labels into two lines first; fall back to vertical rotation
7906
- if (isTablet) {
7907
- const textNodes = svg.selectAll('g.x1.axis1 g.tick text');
7908
- // Measure max label width
7909
- let maxLabelWidth = 0;
7910
- textNodes.each(function () {
7911
- try {
7912
- const bbox = this.getBBox();
7913
- if (bbox && bbox.width && bbox.width > maxLabelWidth) {
7914
- maxLabelWidth = bbox.width;
7915
- }
7916
- }
7917
- catch (e) {
7918
- // ignore measurement errors
7919
- }
7920
- });
7921
- const slotWidth = (typeof x.bandwidth === 'function') ? x.bandwidth() : 0;
7922
- const labelCount = textNodes.size ? textNodes.size() : 0;
7923
- // If labels are too wide or many, attempt wrapping
7924
- if ((slotWidth > 0 && maxLabelWidth > slotWidth * 0.75) || labelCount > 3) {
7925
- let wrapped = 0;
7926
- textNodes.each(function (d) {
7927
- const t = d3.select(this);
7928
- let label = (typeof d === 'string') ? d : t.text();
7929
- if (!label || label.indexOf('\n') > -1)
7930
- return;
7931
- // Try splitting on spaces into two roughly equal parts
7932
- if (label.indexOf(' ') > -1) {
7933
- const words = label.trim().split(/\s+/);
7934
- const mid = Math.ceil(words.length / 2);
7935
- const first = words.slice(0, mid).join(' ');
7936
- const second = words.slice(mid).join(' ');
7937
- if (second && second.length > 0) {
7938
- t.text(null);
7939
- t.append('tspan').attr('x', 0).attr('dy', '0em').text(first);
7940
- t.append('tspan').attr('x', 0).attr('dy', '1.1em').text(second);
7941
- wrapped++;
7942
- return;
7943
- }
7944
- }
7945
- // If no spaces, try splitting on slash or dash
7946
- const sepIdx = Math.max(label.lastIndexOf('/'), label.lastIndexOf('-'));
7947
- if (sepIdx > 0 && sepIdx < label.length - 1) {
7948
- const first = label.substring(0, sepIdx + 1);
7949
- const second = label.substring(sepIdx + 1);
7950
- t.text(null);
7951
- t.append('tspan').attr('x', 0).attr('dy', '0em').text(first);
7952
- t.append('tspan').attr('x', 0).attr('dy', '1.1em').text(second);
7953
- wrapped++;
7954
- return;
7955
- }
7956
- // Fallback: split roughly in the middle
7957
- if (label.length > 8) {
7958
- const mid = Math.floor(label.length / 2);
7959
- const first = label.substring(0, mid);
7960
- const second = label.substring(mid);
7961
- t.text(null);
7962
- t.append('tspan').attr('x', 0).attr('dy', '0em').text(first);
7963
- t.append('tspan').attr('x', 0).attr('dy', '1.1em').text(second);
7964
- wrapped++;
7965
- }
7966
- });
7967
- // If very few labels were wrapped, it's better to rotate vertically instead
7968
- if (wrapped < Math.max(1, Math.floor(labelCount / 3))) {
7969
- textNodes
7970
- .style('writing-mode', 'sideways-lr')
7971
- .style('text-anchor', 'middle')
7972
- .attr('y', 30)
7973
- .attr('x', 0)
7974
- .classed('mobile-xaxis-override', true);
7975
- }
9106
+ // If there are many groups on mobile, rotate labels to sideways to
9107
+ // avoid overlapping and make them readable. Use a lower threshold
9108
+ // (3) so even small mobile screens get rotated labels when needed.
9109
+ if (groupsCount > 3) {
9110
+ svg.selectAll('g.x1.axis1 g.tick text')
9111
+ .style('writing-mode', 'sideways-lr')
9112
+ .style('text-anchor', 'middle')
9113
+ .attr('y', 0);
7976
9114
  }
7977
9115
  }
7978
9116
  }
@@ -8038,49 +9176,15 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
8038
9176
  return baseY;
8039
9177
  }
8040
9178
  formatXLabelText(d, data, metaData, subgroups, self, isMobile) {
8041
- // Check if we're on mobile or tablet
8042
- const isSmallScreen = window.innerWidth < 992; // Less than 992px (mobile or tablet)
8043
- // Helper to extract and format week number
8044
- const extractWeekNumber = (text) => {
8045
- const match = text.match(/(?:week|wk|w)\s*(\d+)/i);
8046
- return match ? `W${match[1]}` : null;
8047
- };
8048
- // Helper to extract date part
8049
- const extractDate = (text) => {
8050
- const match = text.match(/\d{2}[-\/]\d{2}[-\/]\d{2,4}/);
8051
- return match ? match[0] : null;
8052
- };
8053
- // Check if label contains both date and week information
8054
- const hasDateAndTime = (text) => {
8055
- const dateMatch = /\d{2,4}[-\/]\d{1,2}[-\/]\d{1,4}/.test(text);
8056
- const weekMatch = /(?:week|wk|w)\s*\d+/i.test(text);
8057
- return { isDate: dateMatch, isWeek: weekMatch };
8058
- };
8059
- const labelInfo = hasDateAndTime(d);
8060
- // Mobile handling: format date and week parts
9179
+ // Mobile handling: keep date labels intact for single-series charts (do not trim)
8061
9180
  if (isMobile) {
8062
- // If header is hidden (compact mobile)
9181
+ const isDateLabel = /\d{2,4}[-\/]\d{1,2}[-\/]\d{1,4}/.test(d) || !isNaN(Date.parse(d));
9182
+ if (isDateLabel && subgroups && subgroups.length < 3) {
9183
+ // For single-series charts on mobile, show full date labels (no trimming)
9184
+ return d;
9185
+ }
9186
+ // If header is hidden (compact mobile), trim non-date labels as before
8063
9187
  if (!self.isHeaderVisible) {
8064
- // If it has both date and week, format appropriately
8065
- if (labelInfo.isDate && labelInfo.isWeek) {
8066
- const datePart = extractDate(d);
8067
- const weekPart = extractWeekNumber(d);
8068
- if (datePart && weekPart) {
8069
- return `${datePart}\n${weekPart}`;
8070
- }
8071
- }
8072
- // If it's just a date, return it unchanged
8073
- if (labelInfo.isDate) {
8074
- return extractDate(d) || d;
8075
- }
8076
- // If it has just week number, format it as W##
8077
- if (labelInfo.isWeek) {
8078
- const weekPart = extractWeekNumber(d);
8079
- if (weekPart) {
8080
- return weekPart;
8081
- }
8082
- }
8083
- // For non-date labels, trim as before
8084
9188
  const firstPart = d.split(/[\s\-]+/)[0];
8085
9189
  return firstPart.substring(0, 3).toLowerCase();
8086
9190
  }
@@ -8096,15 +9200,17 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
8096
9200
  if (dateRangeRegex.test(d.trim())) {
8097
9201
  return d.trim().replace(dateRangeRegex, (m, d1, d2) => `${d1} - ${d2}`);
8098
9202
  }
8099
- // Handle splitting of multi-part labels
9203
+ // Split date and week labels into two lines
9204
+ const isDateLabel = /\d{2,4}[-\/]/.test(d);
9205
+ const isWeekLabel = /week|wk|w\d+/i.test(d);
8100
9206
  if (subgroups.length > 1 && !self.isZoomedOut && data.length > 8 &&
8101
- d.indexOf(' ') > -1 && (labelInfo.isDate || labelInfo.isWeek)) {
9207
+ d.indexOf(' ') > -1 && (isDateLabel || isWeekLabel)) {
8102
9208
  const first = d.substring(0, d.indexOf(' '));
8103
9209
  const second = d.substring(d.indexOf(' ') + 1).trim();
8104
9210
  return `${first}\n${second}`;
8105
9211
  }
8106
9212
  // Handle date labels in minimized view
8107
- if (labelInfo.isDate) {
9213
+ if (isDateLabel) {
8108
9214
  if (!self.isHeaderVisible && data.length > 8 && d.indexOf(' ') > -1) {
8109
9215
  const first = d.substring(0, d.indexOf(' '));
8110
9216
  const second = d.substring(d.indexOf(' ') + 1).trim();
@@ -8703,7 +9809,7 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
8703
9809
  // Minimum width per bar group based on device and number of subgroups
8704
9810
  const minWidthPerGroup = (() => {
8705
9811
  if (subgroupsCount > 2) {
8706
- return isMobile ? 100 : isTablet ? 100 : 120; // Wider for multiple subgroups
9812
+ return isMobile ? 80 : isTablet ? 100 : 120; // Wider for multiple subgroups
8707
9813
  }
8708
9814
  return isMobile ? 40 : isTablet ? 60 : 80; // Normal width for 1-2 subgroups
8709
9815
  })();