axidio-styleguide-library1-v2 0.3.24 → 0.3.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6488,9 +6488,11 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6488
6488
  LONG_TICK_LENGTH: 16,
6489
6489
  SHORT_TICK_LENGTH_BG: 5,
6490
6490
  LONG_TICK_LENGTH_BG: 30,
6491
- DESKTOP_BAR_WIDTH: 40, // Desktop bar width
6492
- MOBILE_BAR_WIDTH: 25, // Mobile/Tablet bar width (reduced)
6493
- BAR_GAP: 30, // Gap between bars (increased for better separation)
6491
+ MIN_MOBILE_BAR_WIDTH: 28, // Adjusted for better mobile fit
6492
+ DESKTOP_MIN_BAR_WIDTH: 40,
6493
+ TABLET_MIN_BAR_WIDTH: 35, // Added tablet-specific width
6494
+ MOBILE_BAR_PADDING: 10, // Reduced padding for mobile
6495
+ TABLET_BAR_PADDING: 8, // Added tablet-specific padding
6494
6496
  ZOOM_THRESHOLD: 30,
6495
6497
  ZOOM_IN_THRESHOLD: 8,
6496
6498
  };
@@ -6555,6 +6557,48 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6555
6557
  removeExistingChart() {
6556
6558
  d3.select('#' + this.uniqueId).remove();
6557
6559
  }
6560
+ getDeviceConfig() {
6561
+ const width = window.innerWidth;
6562
+ return {
6563
+ isMobile: width < 768, // Changed from 576 to 768 for better mobile coverage
6564
+ isTablet: width >= 768 && width < 1024, // Changed from 576-992 to 768-1024
6565
+ isDesktop: width >= 1024, // Changed from 992 to 1024
6566
+ };
6567
+ }
6568
+ configureResponsiveSettings(device) {
6569
+ if (device.isMobile) {
6570
+ this.chartConfiguration.margin = { top: 15, right: 5, bottom: 35, left: 25 };
6571
+ this.chartConfiguration.numberOfYTicks = 4;
6572
+ this.chartConfiguration.svgHeight = 55;
6573
+ }
6574
+ else if (device.isTablet) {
6575
+ this.chartConfiguration.margin = { top: 20, right: 15, bottom: 40, left: 35 };
6576
+ this.chartConfiguration.numberOfYTicks = 5;
6577
+ this.chartConfiguration.svgHeight = 65;
6578
+ }
6579
+ else {
6580
+ // Desktop/Large screens
6581
+ const width = window.innerWidth;
6582
+ if (width >= 1920) {
6583
+ // Large monitors
6584
+ this.chartConfiguration.margin = { top: 35, right: 35, bottom: 55, left: 70 };
6585
+ this.chartConfiguration.numberOfYTicks = 8;
6586
+ this.chartConfiguration.svgHeight = 85;
6587
+ }
6588
+ else if (width >= 1366) {
6589
+ // Medium monitors
6590
+ this.chartConfiguration.margin = { top: 30, right: 30, bottom: 50, left: 60 };
6591
+ this.chartConfiguration.numberOfYTicks = 7;
6592
+ this.chartConfiguration.svgHeight = 80;
6593
+ }
6594
+ else {
6595
+ // Small desktops/laptops
6596
+ this.chartConfiguration.margin = { top: 25, right: 25, bottom: 45, left: 50 };
6597
+ this.chartConfiguration.numberOfYTicks = 6;
6598
+ this.chartConfiguration.svgHeight = 75;
6599
+ }
6600
+ }
6601
+ }
6558
6602
  mergeConfigurations() {
6559
6603
  for (const key in this.defaultConfiguration) {
6560
6604
  this.chartConfiguration[key] = ChartHelper.getValueByConfigurationType(key, this.defaultConfiguration, this.customChartConfiguration);
@@ -6573,20 +6617,26 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6573
6617
  }
6574
6618
  return metaData;
6575
6619
  }
6576
- calculateDimensions(chartContainer, verticalContainer, margin, dataLength) {
6620
+ calculateDimensions(chartContainer, verticalContainer, margin, device, dataLength) {
6577
6621
  const containerWidth = chartContainer.node().getBoundingClientRect().width;
6578
6622
  const containerHeight = verticalContainer.node().getBoundingClientRect().height;
6579
- const leftAxisWidth = 80;
6580
- const rightAxisWidth = this.CONSTANTS.RIGHT_SVG_WIDTH;
6581
- const availableWidth = containerWidth - leftAxisWidth - rightAxisWidth;
6582
- let width = availableWidth;
6623
+ let width = containerWidth - margin.left - margin.right;
6583
6624
  let height = containerHeight * (this.chartConfiguration.svgHeight / 100) - margin.top - margin.bottom;
6625
+ // Responsive zoom handling
6584
6626
  if (dataLength > this.CONSTANTS.ZOOM_THRESHOLD && this.isZoomedOut) {
6585
- const minWidth = dataLength * 25;
6627
+ const minWidth = device.isMobile
6628
+ ? dataLength * 12
6629
+ : device.isTablet
6630
+ ? dataLength * 20
6631
+ : dataLength * 25;
6586
6632
  width = Math.max(width, minWidth);
6587
6633
  }
6588
6634
  if (dataLength > this.CONSTANTS.ZOOM_IN_THRESHOLD && !this.isZoomedOut) {
6589
- width = dataLength * 130;
6635
+ width = device.isMobile
6636
+ ? dataLength * 50
6637
+ : device.isTablet
6638
+ ? dataLength * 90
6639
+ : dataLength * 130;
6590
6640
  }
6591
6641
  if (this.chartConfiguration.isFullScreen) {
6592
6642
  height = this.chartConfiguration.svgHeight !== 80
@@ -6594,41 +6644,28 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6594
6644
  : containerHeight;
6595
6645
  }
6596
6646
  if (this.chartConfiguration.isDrilldownChart) {
6597
- height = containerHeight - margin.top - margin.bottom - 130;
6647
+ const offset = device.isMobile ? 60 : device.isTablet ? 90 : 130;
6648
+ height = containerHeight - margin.top - margin.bottom - offset;
6598
6649
  }
6599
- const isMobileOrTablet = window.innerWidth < 1024;
6600
6650
  let barWidth;
6601
6651
  let barPadding;
6602
- if (isMobileOrTablet) {
6603
- if (dataLength === 1) {
6604
- barWidth = 60;
6605
- barPadding = 0;
6606
- }
6607
- else if (dataLength === 2) {
6608
- barWidth = 50;
6609
- barPadding = 45;
6610
- }
6611
- else if (dataLength === 3) {
6612
- barWidth = 45;
6613
- barPadding = 40;
6614
- }
6615
- else if (dataLength <= 5) {
6616
- barWidth = 35;
6617
- barPadding = 30;
6618
- }
6619
- else {
6620
- barWidth = 25;
6621
- barPadding = 25;
6622
- }
6652
+ let requiredSvgWidth;
6653
+ if (device.isMobile) {
6654
+ barWidth = this.CONSTANTS.MIN_MOBILE_BAR_WIDTH;
6655
+ barPadding = this.CONSTANTS.MOBILE_BAR_PADDING;
6656
+ requiredSvgWidth = Math.max(width - this.CONSTANTS.RIGHT_SVG_WIDTH, (barWidth + barPadding) * dataLength + this.CONSTANTS.LEFT_RIGHT_SPACES * 2 +
6657
+ this.CONSTANTS.RIGHT_SVG_WIDTH - barPadding);
6658
+ }
6659
+ else if (device.isTablet) {
6660
+ barWidth = this.CONSTANTS.TABLET_MIN_BAR_WIDTH;
6661
+ barPadding = this.CONSTANTS.TABLET_BAR_PADDING;
6662
+ requiredSvgWidth = Math.max(width - this.CONSTANTS.RIGHT_SVG_WIDTH, (barWidth + barPadding) * dataLength + this.CONSTANTS.LEFT_RIGHT_SPACES * 2);
6623
6663
  }
6624
6664
  else {
6625
- barWidth = this.CONSTANTS.DESKTOP_BAR_WIDTH;
6626
- barPadding = this.CONSTANTS.BAR_GAP;
6665
+ barWidth = Math.max(this.CONSTANTS.DESKTOP_MIN_BAR_WIDTH, (width - this.CONSTANTS.RIGHT_SVG_WIDTH - this.CONSTANTS.LEFT_RIGHT_SPACES * 2) / dataLength);
6666
+ barPadding = 0;
6667
+ requiredSvgWidth = width - this.CONSTANTS.RIGHT_SVG_WIDTH;
6627
6668
  }
6628
- const totalBarsWidth = barWidth * dataLength;
6629
- const totalGaps = barPadding * (dataLength - 1);
6630
- const minRequiredWidth = totalBarsWidth + totalGaps + (this.CONSTANTS.LEFT_RIGHT_SPACES * 2);
6631
- const requiredSvgWidth = Math.max(availableWidth, minRequiredWidth);
6632
6669
  return {
6633
6670
  width,
6634
6671
  height,
@@ -6639,109 +6676,63 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6639
6676
  requiredSvgWidth,
6640
6677
  };
6641
6678
  }
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
6679
+ createSvgContainers(chartContainer, dimensions, margin) {
6680
+ const outerContainer = chartContainer
6649
6681
  .append('div')
6650
6682
  .attr('id', this.uniqueId)
6651
- .attr('class', 'chart-wrapper-main')
6652
- .style('position', 'relative')
6683
+ .attr('class', 'outer-container')
6653
6684
  .style('width', '100%')
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
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
6666
6691
  .append('svg')
6667
6692
  .attr('width', '80')
6668
6693
  .attr('height', dimensions.height + margin.top + margin.bottom)
6669
- .append('g')
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
6694
  .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
6695
+ .style('left', '0')
6696
+ .style('z-index', 1)
6697
+ .append('g')
6698
+ .attr('transform', `translate(${margin.left + 10},${margin.top})`);
6699
+ const svgYAxisRight = outerContainer
6683
6700
  .append('svg')
6684
6701
  .attr('width', this.CONSTANTS.RIGHT_SVG_WIDTH)
6685
6702
  .attr('height', dimensions.height + margin.top + margin.bottom)
6703
+ .style('position', 'absolute')
6704
+ .style('right', '2px')
6705
+ .style('z-index', 1)
6686
6706
  .append('g')
6687
6707
  .attr('transform', `translate(0,${margin.top})`);
6688
- // Scrollable middle area
6689
- const scrollableContainer = chartWrapper
6690
- .append('div')
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
6708
+ const innerContainer = outerContainer
6701
6709
  .append('div')
6702
- .attr('class', 'inner-chart-container')
6703
- .style('min-width', '100%');
6710
+ .attr('class', 'inner-container')
6711
+ .style('width', '100%')
6712
+ .style('overflow-x', 'auto');
6704
6713
  const svg = innerContainer
6705
6714
  .append('svg')
6706
6715
  .attr('width', dimensions.requiredSvgWidth)
6707
6716
  .attr('height', dimensions.height + margin.top + margin.bottom + 30)
6708
6717
  .append('g')
6709
6718
  .attr('transform', `translate(0,${margin.top})`);
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) {
6719
+ return { svg, svgYAxisLeft, svgYAxisRight, innerContainer };
6720
+ }
6721
+ createScales(data, layers, lineData, dimensions, device) {
6727
6722
  const { width, height, barWidth, barPadding } = dimensions;
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)
6723
+ // Adjust padding based on device
6724
+ const padding = device.isMobile ? 0.15 : device.isTablet ? 0.3 : 0.5;
6735
6725
  const xScale = d3
6736
6726
  .scaleBand()
6737
- .rangeRound([0, dimensions.requiredSvgWidth])
6727
+ .rangeRound([
6728
+ this.CONSTANTS.LEFT_RIGHT_SPACES,
6729
+ width - this.CONSTANTS.RIGHT_SVG_WIDTH - this.CONSTANTS.LEFT_RIGHT_SPACES
6730
+ ])
6738
6731
  .domain(data.map(d => d.name).reverse())
6739
- .paddingInner(paddingRatio)
6740
- .paddingOuter(0.1) // Small padding for visual spacing
6741
- .align(0.5);
6732
+ .padding(padding);
6742
6733
  const xScaleFromOrigin = d3
6743
6734
  .scaleBand()
6744
- .rangeRound([width, 0])
6735
+ .rangeRound([width - this.CONSTANTS.RIGHT_SVG_WIDTH, 0])
6745
6736
  .domain(data.map(d => d.name).reverse());
6746
6737
  const yScale = d3.scaleLinear().rangeRound([height, 0]);
6747
6738
  let maxValue = d3.max(layers, (d) => d3.max(d, (d) => d[1]));
@@ -6787,7 +6778,7 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6787
6778
  }
6788
6779
  return { xAxis, yAxis, yLineAxis };
6789
6780
  }
6790
- renderBars(svg, layers, scales, metaData, dimensions) {
6781
+ renderBars(svg, layers, scales, metaData, dimensions, device) {
6791
6782
  const layer = svg
6792
6783
  .selectAll('.layer')
6793
6784
  .data(layers)
@@ -6799,11 +6790,11 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6799
6790
  .selectAll('rect')
6800
6791
  .data((d) => d)
6801
6792
  .enter();
6802
- this.appendRectangles(rect, scales, metaData, dimensions);
6793
+ this.appendRectangles(rect, scales, metaData, dimensions, device);
6803
6794
  this.addInteractions(rect, svg, metaData, scales);
6804
6795
  return rect;
6805
6796
  }
6806
- appendRectangles(rect, scales, metaData, dimensions) {
6797
+ appendRectangles(rect, scales, metaData, dimensions, device) {
6807
6798
  const { barWidth, barPadding } = dimensions;
6808
6799
  const { xScale, yScale } = scales;
6809
6800
  rect
@@ -6822,17 +6813,17 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6822
6813
  }
6823
6814
  return 0;
6824
6815
  })
6825
- .attr('x', (d) => {
6826
- const xPosition = xScale(d.data.name);
6827
- const bandwidth = xScale.bandwidth();
6816
+ .attr('x', (d, i) => {
6817
+ if (device.isMobile) {
6818
+ return this.CONSTANTS.LEFT_RIGHT_SPACES + i * (barWidth + barPadding);
6819
+ }
6828
6820
  if (!this.chartConfiguration.isMultiChartGridLine) {
6829
- return xPosition + (bandwidth - barWidth) / 2;
6821
+ return xScale(d.data.name);
6830
6822
  }
6831
6823
  if (this.chartConfiguration.isDrilldownChart && this.chartData.data.length <= 3) {
6832
- return xPosition + bandwidth / 2 - 35;
6824
+ return xScale(d.data.name) + xScale.bandwidth() / 2 - 35;
6833
6825
  }
6834
- const calculatedWidth = bandwidth * 0.8;
6835
- return xPosition + (bandwidth - calculatedWidth) / 2;
6826
+ return xScale(d.data.name) + xScale.bandwidth() * 0.1;
6836
6827
  })
6837
6828
  .attr('height', (d) => {
6838
6829
  if (!isNaN(d[0]) && !isNaN(d[1])) {
@@ -6842,8 +6833,10 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6842
6833
  return 0;
6843
6834
  })
6844
6835
  .attr('width', (d) => {
6845
- if (!this.chartConfiguration.isMultiChartGridLine)
6836
+ if (device.isMobile)
6846
6837
  return barWidth;
6838
+ if (!this.chartConfiguration.isMultiChartGridLine)
6839
+ return xScale.bandwidth();
6847
6840
  if (this.chartConfiguration.isDrilldownChart && this.chartData.data.length <= 3) {
6848
6841
  return 70;
6849
6842
  }
@@ -6899,13 +6892,23 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6899
6892
  const value = d[1] - d[0];
6900
6893
  if (isNaN(value))
6901
6894
  return;
6895
+ const device = this.getDeviceConfig();
6902
6896
  const bandwidth = xScale.bandwidth();
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;
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
+ }
6909
6912
  svg
6910
6913
  .append('foreignObject')
6911
6914
  .attr('x', this.calculateTooltipX(d, xScale, width))
@@ -6944,12 +6947,12 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6944
6947
  .style('fill', (d) => this.getBarColor(d, metaData));
6945
6948
  svg.selectAll('.lib-verticalstack-title-ontop').remove();
6946
6949
  }
6947
- renderAxisLabels(svg, svgYAxisLeft, bottomLabelContainer, metaData, dimensions, margin) {
6950
+ renderAxisLabels(svg, svgYAxisLeft, metaData, dimensions, margin) {
6948
6951
  if (metaData.yLabel) {
6949
6952
  this.addYAxisLabel(svgYAxisLeft, metaData.yLabel, dimensions.height, margin);
6950
6953
  }
6951
6954
  if (metaData.xLabel) {
6952
- this.addXAxisLabel(bottomLabelContainer, metaData.xLabel);
6955
+ this.addXAxisLabel(svg, metaData.xLabel, dimensions.width, dimensions.height, margin);
6953
6956
  }
6954
6957
  }
6955
6958
  addYAxisLabel(svgYAxisLeft, label, height, margin) {
@@ -6970,18 +6973,21 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
6970
6973
  .text(isAcronym ? label.toUpperCase() : label.toLowerCase())
6971
6974
  .style('text-transform', isAcronym ? 'none' : 'capitalize');
6972
6975
  }
6973
- addXAxisLabel(bottomLabelContainer, label) {
6976
+ addXAxisLabel(svg, label, width, height, margin) {
6977
+ const isria = this.customChartConfiguration?.isRia;
6974
6978
  const isAcronym = this.isAcronymLabel(label);
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());
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');
6985
6991
  }
6986
6992
  isAcronymLabel(label) {
6987
6993
  const cleanLabel = label.replace(/[^A-Za-z]/g, '');
@@ -7008,31 +7014,6 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7008
7014
  }
7009
7015
  return `${baseClass} lib-axis-waterfall-label`;
7010
7016
  }
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
- }
7036
7017
  applyConfigurationFlags() {
7037
7018
  if (this.chartConfiguration.isHeaderVisible !== undefined) {
7038
7019
  this.isHeaderVisible = this.chartConfiguration.isHeaderVisible;
@@ -7045,10 +7026,8 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7045
7026
  }
7046
7027
  }
7047
7028
  initializeStackedChart() {
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;
7029
+ const device = this.getDeviceConfig();
7030
+ this.configureResponsiveSettings(device);
7052
7031
  this.mergeConfigurations();
7053
7032
  this.applyConfigurationFlags();
7054
7033
  const data = this.chartData.data;
@@ -7059,19 +7038,17 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7059
7038
  const chartContainer = d3.select(this.containerElt.nativeElement);
7060
7039
  const verticalstackedcontainer = d3.select(this.verticalstackedcontainerElt.nativeElement);
7061
7040
  const margin = this.chartConfiguration.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);
7041
+ const dimensions = this.calculateDimensions(chartContainer, verticalstackedcontainer, margin, device, data.length);
7042
+ const { svg, svgYAxisLeft, svgYAxisRight } = this.createSvgContainers(chartContainer, dimensions, margin);
7065
7043
  const stack = d3.stack().keys(keyList).offset(d3.stackOffsetNone);
7066
7044
  const layers = stack(data);
7067
7045
  data.sort((a, b) => b.total - a.total);
7068
- const scales = this.createScales(data, layers, lineData, dimensions);
7046
+ const scales = this.createScales(data, layers, lineData, dimensions, device);
7069
7047
  const axes = this.createAxes(scales);
7070
- this.renderGridsFromLeftAxis(svgYAxisLeft, scales, dimensions);
7071
7048
  this.renderGrids(svg, scales, dimensions);
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);
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);
7075
7052
  this.renderTargetLine(svg, svgYAxisRight, scales, dimensions, metaData);
7076
7053
  this.renderDataLabels(rect, scales, metaData, dimensions);
7077
7054
  this.renderLineChart(svg, lineData, scales, colors, metaData);
@@ -7080,13 +7057,25 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7080
7057
  if (this.chartConfiguration.isXgridBetweenLabels) {
7081
7058
  svg
7082
7059
  .append('g')
7083
- .attr('class', 'grid vertical-grid')
7060
+ .attr('class', 'grid')
7084
7061
  .attr('transform', `translate(${scales.xScale.bandwidth() / 2},${dimensions.height})`)
7085
7062
  .call(d3.axisBottom(scales.xScale).tickSize(-dimensions.height).tickFormat(''))
7086
7063
  .style('stroke-dasharray', '5 5')
7087
7064
  .style('color', '#999999')
7088
7065
  .call((g) => g.select('.domain').remove());
7089
7066
  }
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
+ }
7090
7079
  if (this.chartConfiguration.xAxisGrid) {
7091
7080
  for (let j = 0; j < this.chartConfiguration.xAxisGrid.length; j++) {
7092
7081
  svg
@@ -7099,7 +7088,7 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7099
7088
  }
7100
7089
  }
7101
7090
  }
7102
- renderAxes(svg, svgYAxisLeft, svgYAxisRight, axes, scales, dimensions, data) {
7091
+ renderAxes(svg, svgYAxisLeft, svgYAxisRight, axes, scales, dimensions, device, data) {
7103
7092
  if (this.chartConfiguration.showXaxisTop) {
7104
7093
  svg
7105
7094
  .append('g')
@@ -7109,7 +7098,7 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7109
7098
  svg.selectAll('.x-axis > g > text').attr('class', 'lib-display-hidden');
7110
7099
  }
7111
7100
  if (!this.chartConfiguration.isMultiChartGridLine) {
7112
- this.renderStandardAxes(svg, axes, scales, dimensions, data);
7101
+ this.renderStandardAxes(svg, axes, scales, dimensions, device, data);
7113
7102
  }
7114
7103
  else if (this.chartConfiguration.isDrilldownChart) {
7115
7104
  this.renderDrilldownAxes(svg, svgYAxisLeft, svgYAxisRight, axes, scales, dimensions);
@@ -7120,35 +7109,24 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7120
7109
  this.applyAxisStyling(svg, svgYAxisLeft, svgYAxisRight);
7121
7110
  this.applyAxisConfigurations(svg, scales, dimensions, data);
7122
7111
  }
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
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
+ }
7152
7130
  svg
7153
7131
  .append('g')
7154
7132
  .attr('class', 'lib-stacked-y-axis-text')
@@ -7157,6 +7135,27 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7157
7135
  .selectAll('text')
7158
7136
  .style('fill', 'var(--chart-text-color)');
7159
7137
  }
7138
+ renderMobileXAxis(svg, data, dimensions) {
7139
+ svg.selectAll('.custom-x-label').remove();
7140
+ const maxLength = Math.max(...data.map(d => d.name.length));
7141
+ const fontSize = maxLength > 10 ? '8px' : '10px';
7142
+ data.forEach((d, i) => {
7143
+ const xVal = this.CONSTANTS.LEFT_RIGHT_SPACES +
7144
+ i * (dimensions.barWidth + dimensions.barPadding) +
7145
+ dimensions.barWidth / 2;
7146
+ svg
7147
+ .append('text')
7148
+ .attr('class', 'custom-x-label')
7149
+ .attr('x', 0)
7150
+ .attr('y', dimensions.height + 18)
7151
+ .attr('text-anchor', 'middle')
7152
+ .attr('transform', `translate(${xVal + 20},0)`)
7153
+ .style('font-size', fontSize)
7154
+ .style('fill', 'var(--chart-text-color)')
7155
+ .style('writing-mode', 'sideways-lr')
7156
+ .text(d.name.length > 6 ? d.name.substring(0, 4) + '...' : d.name);
7157
+ });
7158
+ }
7160
7159
  renderDrilldownAxes(svg, svgYAxisLeft, svgYAxisRight, axes, scales, dimensions) {
7161
7160
  svg
7162
7161
  .append('g')
@@ -7238,6 +7237,7 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7238
7237
  }
7239
7238
  }
7240
7239
  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);
7248
+ this.styleCustomXAxisTicks(svg, data, device);
7249
7249
  if (this.chartConfiguration.xLabelsOnSameLine) {
7250
- this.applyXLabelsOnSameLine(svg);
7250
+ this.applyXLabelsOnSameLine(svg, device);
7251
7251
  }
7252
7252
  }
7253
- styleCustomXAxisTicks(svg, data) {
7253
+ styleCustomXAxisTicks(svg, data, device) {
7254
7254
  let alternateText = false;
7255
7255
  svg.selectAll('.x1.axis1 .tick line').attr('y2', () => {
7256
7256
  if (this.chartConfiguration.hideXaxisTick)
@@ -7282,17 +7282,28 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7282
7282
  return this.CONSTANTS.SHORT_TICK_LENGTH_BG;
7283
7283
  });
7284
7284
  }
7285
- applyXLabelsOnSameLine(svg) {
7285
+ applyXLabelsOnSameLine(svg, device) {
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
+ }
7291
7294
  const trimmed = d.trim();
7292
7295
  const spaceIndex = trimmed.indexOf(' ');
7293
7296
  return spaceIndex > -1
7294
7297
  ? trimmed.substring(0, spaceIndex).toLowerCase()
7295
7298
  : trimmed.toLowerCase();
7299
+ })
7300
+ .attr('transform', function (d, i) {
7301
+ if (device.isMobile) {
7302
+ const parent = this.parentNode?.parentNode;
7303
+ const totalBars = parent ? d3.select(parent).selectAll('g.tick').size() : 0;
7304
+ return totalBars === 2 ? 'translate(0,0)' : `translate(${i * 30},0)`;
7305
+ }
7306
+ return null;
7296
7307
  });
7297
7308
  svg
7298
7309
  .selectAll('g.x1.axis1 g.tick')
@@ -7301,11 +7312,16 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7301
7312
  .attr('y', this.CONSTANTS.LONG_TICK_LENGTH_BG)
7302
7313
  .attr('fill', 'currentColor')
7303
7314
  .text((d) => {
7315
+ if (device.isMobile)
7316
+ return '';
7304
7317
  const trimmed = d.trim();
7305
7318
  const spaceIndex = trimmed.indexOf(' ');
7306
7319
  return spaceIndex > -1
7307
7320
  ? trimmed.substring(spaceIndex).toLowerCase()
7308
7321
  : '';
7322
+ })
7323
+ .attr('transform', (d, i) => {
7324
+ return device.isMobile && i === 0 ? 'translate(20,0)' : null;
7309
7325
  });
7310
7326
  }
7311
7327
  renderDataLabels(rect, scales, metaData, dimensions) {
@@ -7394,16 +7410,14 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7394
7410
  return;
7395
7411
  const parsedTarget = this.parseTargetValue(this.chartData.targetLineData.target);
7396
7412
  const yZero = scales.yScale(parsedTarget);
7397
- // Draw target line across the full chart width
7398
7413
  svg
7399
7414
  .append('line')
7400
- .attr('x1', 0) // Start from the beginning of the chart
7401
- .attr('x2', dimensions.requiredSvgWidth) // Extend to full width
7415
+ .attr('x1', 0)
7416
+ .attr('x2', dimensions.width)
7402
7417
  .attr('y1', yZero)
7403
7418
  .attr('y2', yZero)
7404
7419
  .style('stroke-dasharray', '5 5')
7405
- .style('stroke', this.chartData.targetLineData.color)
7406
- .style('stroke-width', '2px');
7420
+ .style('stroke', this.chartData.targetLineData.color);
7407
7421
  this.renderTargetLabel(svgYAxisRight, yZero, metaData);
7408
7422
  }
7409
7423
  parseTargetValue(target) {
@@ -7498,11 +7512,11 @@ class HorizontalBarsWithScrollZoomComponent extends ComponentUniqueId {
7498
7512
  this.isZoomOutSelected(isZoomOut);
7499
7513
  }
7500
7514
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HorizontalBarsWithScrollZoomComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
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 }); }
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 }); }
7502
7516
  }
7503
7517
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: HorizontalBarsWithScrollZoomComponent, decorators: [{
7504
7518
  type: Component,
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"] }]
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"] }]
7506
7520
  }], ctorParameters: () => [], propDecorators: { containerElt: [{
7507
7521
  type: ViewChild,
7508
7522
  args: ['verticalstackedchartcontainer', { static: true }]
@@ -7611,1242 +7625,6 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
7611
7625
  get isAlertEnabled() {
7612
7626
  return this.chartConfiguration?.headerMenuOptions?.some((option) => option.id === 'editAlert');
7613
7627
  }
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
- // }
8850
7628
  initializegroupChart() {
8851
7629
  // ==================== VARIABLE DECLARATIONS ====================
8852
7630
  const self = this;
@@ -8957,7 +7735,7 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
8957
7735
  .domain(groups)
8958
7736
  .range([0, width - RIGHT_SVG_WIDTH]);
8959
7737
  // ==================== X-AXIS RENDERING ====================
8960
- this.renderXAxis(svg, x, height, metaData, subgroups, data, SHORT_TICK_LENGTH_BG, LONG_TICK_LENGTH_BG, self, isria, isMobile);
7738
+ this.renderXAxis(svg, x, height, metaData, subgroups, data, SHORT_TICK_LENGTH_BG, LONG_TICK_LENGTH_BG, self, isria, isMobile, isTablet);
8961
7739
  // ==================== Y-AXIS SETUP ====================
8962
7740
  const y = d3.scaleLinear().rangeRound([height, 0]);
8963
7741
  let maxValue = this.calculateMaxValue(data, keyList);
@@ -9008,13 +7786,18 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
9008
7786
  }
9009
7787
  }
9010
7788
  // ==================== HELPER METHODS ====================
9011
- renderXAxis(svg, x, height, metaData, subgroups, data, shortTickLengthBg, longTickLengthBg, self, isria, isMobile) {
7789
+ renderXAxis(svg, x, height, metaData, subgroups, data, shortTickLengthBg, longTickLengthBg, self, isria, isMobile, isTablet) {
9012
7790
  let alternate_text = false;
9013
7791
  if (this.chartConfiguration.isMultiChartGridLine === undefined) {
9014
7792
  // 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
+ }
9015
7798
  svg.append('g')
9016
7799
  .attr('class', 'x1 axis1')
9017
- .attr('transform', `translate(0,${height})`)
7800
+ .attr('transform', `translate(0,${translateY})`)
9018
7801
  .call(d3.axisBottom(x))
9019
7802
  .call((g) => g.select('.domain').remove());
9020
7803
  svg.selectAll('g.x1.axis1 g.tick line').remove();
@@ -9074,7 +7857,7 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
9074
7857
  .attr('x', 5)
9075
7858
  .style('text-anchor', 'middle');
9076
7859
  }
9077
- // Mobile override - check for single-group date charts first
7860
+ // Mobile/tablet override - check for single-group date charts first
9078
7861
  if (isMobile) {
9079
7862
  const textNodes = svg.selectAll('g.x1.axis1 g.tick text');
9080
7863
  const groupsCount = data.length || 0;
@@ -9088,8 +7871,14 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
9088
7871
  hasDateValues = true;
9089
7872
  }
9090
7873
  });
9091
- if (hasDateValues && subgroups && subgroups.length < 3) {
9092
- // For single chart with dates, ensure horizontal display
7874
+ // Count unique x-axis labels
7875
+ const uniqueLabels = new Set();
7876
+ textNodes.each(function (d) {
7877
+ uniqueLabels.add(d);
7878
+ });
7879
+ const labelCount = uniqueLabels.size;
7880
+ if (hasDateValues && labelCount <= 3) {
7881
+ // For 3 or fewer labels, keep horizontal display
9093
7882
  textNodes
9094
7883
  .style('writing-mode', 'horizontal-tb') // Explicitly set horizontal
9095
7884
  .classed('mobile-xaxis-override', false) // Remove vertical class
@@ -9099,19 +7888,19 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
9099
7888
  .attr('dx', '0') // Reset any x offset
9100
7889
  .attr('dy', '0'); // Reset any y offset
9101
7890
  }
7891
+ else if (labelCount > 3) {
7892
+ // For more than 3 labels, use vertical alignment
7893
+ textNodes
7894
+ .style('writing-mode', 'sideways-lr') // Vertical text
7895
+ .classed('mobile-xaxis-override', true) // Add vertical class
7896
+ .attr('text-anchor', 'middle') // Center align
7897
+ .attr('y', 30) // Adjust vertical position
7898
+ .attr('x', 0); // Reset x position
7899
+ }
9102
7900
  else if (!this.isHeaderVisible) {
9103
7901
  // Default mobile behavior for non-date or multi-group
9104
7902
  textNodes.classed('mobile-xaxis-override', true);
9105
7903
  }
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);
9114
- }
9115
7904
  }
9116
7905
  }
9117
7906
  applyXLabelsOnSameLine(svg, subgroups, data, metaData, self, shortTickLengthBg, isMobile, isria) {
@@ -9176,15 +7965,49 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
9176
7965
  return baseY;
9177
7966
  }
9178
7967
  formatXLabelText(d, data, metaData, subgroups, self, isMobile) {
9179
- // Mobile handling: keep date labels intact for single-series charts (do not trim)
7968
+ // Check if we're on mobile or tablet
7969
+ const isSmallScreen = window.innerWidth < 992; // Less than 992px (mobile or tablet)
7970
+ // Helper to extract and format week number
7971
+ const extractWeekNumber = (text) => {
7972
+ const match = text.match(/(?:week|wk|w)\s*(\d+)/i);
7973
+ return match ? `W${match[1]}` : null;
7974
+ };
7975
+ // Helper to extract date part
7976
+ const extractDate = (text) => {
7977
+ const match = text.match(/\d{2}[-\/]\d{2}[-\/]\d{2,4}/);
7978
+ return match ? match[0] : null;
7979
+ };
7980
+ // Check if label contains both date and week information
7981
+ const hasDateAndTime = (text) => {
7982
+ const dateMatch = /\d{2,4}[-\/]\d{1,2}[-\/]\d{1,4}/.test(text);
7983
+ const weekMatch = /(?:week|wk|w)\s*\d+/i.test(text);
7984
+ return { isDate: dateMatch, isWeek: weekMatch };
7985
+ };
7986
+ const labelInfo = hasDateAndTime(d);
7987
+ // Mobile handling: format date and week parts
9180
7988
  if (isMobile) {
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
7989
+ // If header is hidden (compact mobile)
9187
7990
  if (!self.isHeaderVisible) {
7991
+ // If it has both date and week, format appropriately
7992
+ if (labelInfo.isDate && labelInfo.isWeek) {
7993
+ const datePart = extractDate(d);
7994
+ const weekPart = extractWeekNumber(d);
7995
+ if (datePart && weekPart) {
7996
+ return `${datePart}\n${weekPart}`;
7997
+ }
7998
+ }
7999
+ // If it's just a date, return it unchanged
8000
+ if (labelInfo.isDate) {
8001
+ return extractDate(d) || d;
8002
+ }
8003
+ // If it has just week number, format it as W##
8004
+ if (labelInfo.isWeek) {
8005
+ const weekPart = extractWeekNumber(d);
8006
+ if (weekPart) {
8007
+ return weekPart;
8008
+ }
8009
+ }
8010
+ // For non-date labels, trim as before
9188
8011
  const firstPart = d.split(/[\s\-]+/)[0];
9189
8012
  return firstPart.substring(0, 3).toLowerCase();
9190
8013
  }
@@ -9200,17 +8023,15 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
9200
8023
  if (dateRangeRegex.test(d.trim())) {
9201
8024
  return d.trim().replace(dateRangeRegex, (m, d1, d2) => `${d1} - ${d2}`);
9202
8025
  }
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);
8026
+ // Handle splitting of multi-part labels
9206
8027
  if (subgroups.length > 1 && !self.isZoomedOut && data.length > 8 &&
9207
- d.indexOf(' ') > -1 && (isDateLabel || isWeekLabel)) {
8028
+ d.indexOf(' ') > -1 && (labelInfo.isDate || labelInfo.isWeek)) {
9208
8029
  const first = d.substring(0, d.indexOf(' '));
9209
8030
  const second = d.substring(d.indexOf(' ') + 1).trim();
9210
8031
  return `${first}\n${second}`;
9211
8032
  }
9212
8033
  // Handle date labels in minimized view
9213
- if (isDateLabel) {
8034
+ if (labelInfo.isDate) {
9214
8035
  if (!self.isHeaderVisible && data.length > 8 && d.indexOf(' ') > -1) {
9215
8036
  const first = d.substring(0, d.indexOf(' '));
9216
8037
  const second = d.substring(d.indexOf(' ') + 1).trim();
@@ -9809,7 +8630,7 @@ class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUniqueId {
9809
8630
  // Minimum width per bar group based on device and number of subgroups
9810
8631
  const minWidthPerGroup = (() => {
9811
8632
  if (subgroupsCount > 2) {
9812
- return isMobile ? 80 : isTablet ? 100 : 120; // Wider for multiple subgroups
8633
+ return isMobile ? 100 : isTablet ? 100 : 120; // Wider for multiple subgroups
9813
8634
  }
9814
8635
  return isMobile ? 40 : isTablet ? 60 : 80; // Normal width for 1-2 subgroups
9815
8636
  })();