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