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