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