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