@fluentui/react-charting 5.24.23 → 5.24.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.json +22 -1
- package/CHANGELOG.md +12 -2
- package/dist/react-charting.d.ts +4 -0
- package/dist/react-charting.js +1 -1
- package/dist/react-charting.min.js +1 -1
- package/etc/react-charting.api.md +1 -0
- package/lib/components/CommonComponents/CartesianChart.base.js +1 -0
- package/lib/components/CommonComponents/CartesianChart.base.js.map +1 -1
- package/lib/components/DeclarativeChart/PlotlySchemaAdapter.d.ts +1 -1
- package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js +2 -1
- package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
- package/lib/components/GaugeChart/GaugeChart.base.d.ts +1 -1
- package/lib/components/ScatterChart/ScatterChart.base.js +66 -13
- package/lib/components/ScatterChart/ScatterChart.base.js.map +1 -1
- package/lib/components/ScatterChart/ScatterChart.types.d.ts +4 -0
- package/lib/components/ScatterChart/ScatterChart.types.js.map +1 -1
- package/lib/utilities/utilities.d.ts +10 -10
- package/lib-amd/components/CommonComponents/CartesianChart.base.js +1 -0
- package/lib-amd/components/CommonComponents/CartesianChart.base.js.map +1 -1
- package/lib-amd/components/DeclarativeChart/PlotlySchemaAdapter.d.ts +1 -1
- package/lib-amd/components/DeclarativeChart/PlotlySchemaAdapter.js +4 -3
- package/lib-amd/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
- package/lib-amd/components/FunnelChart/funnelGeometry.js +5 -6
- package/lib-amd/components/FunnelChart/funnelGeometry.js.map +1 -1
- package/lib-amd/components/GaugeChart/GaugeChart.base.d.ts +1 -1
- package/lib-amd/components/ResponsiveContainer/withResponsiveContainer.js +1 -2
- package/lib-amd/components/ResponsiveContainer/withResponsiveContainer.js.map +1 -1
- package/lib-amd/components/SankeyChart/SankeyChart.base.js +4 -4
- package/lib-amd/components/SankeyChart/SankeyChart.base.js.map +1 -1
- package/lib-amd/components/ScatterChart/ScatterChart.base.js +64 -11
- package/lib-amd/components/ScatterChart/ScatterChart.base.js.map +1 -1
- package/lib-amd/components/ScatterChart/ScatterChart.types.d.ts +4 -0
- package/lib-amd/components/ScatterChart/ScatterChart.types.js.map +1 -1
- package/lib-amd/utilities/image-export-utils.js +2 -3
- package/lib-amd/utilities/image-export-utils.js.map +1 -1
- package/lib-amd/utilities/scatterpolar-utils.js +2 -3
- package/lib-amd/utilities/scatterpolar-utils.js.map +1 -1
- package/lib-amd/utilities/utilities.d.ts +10 -10
- package/lib-amd/utilities/utilities.js +39 -39
- package/lib-amd/utilities/utilities.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/CartesianChart.base.js +1 -0
- package/lib-commonjs/components/CommonComponents/CartesianChart.base.js.map +1 -1
- package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.d.ts +1 -1
- package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.js +4 -3
- package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
- package/lib-commonjs/components/FunnelChart/funnelGeometry.js +5 -6
- package/lib-commonjs/components/FunnelChart/funnelGeometry.js.map +1 -1
- package/lib-commonjs/components/GaugeChart/GaugeChart.base.d.ts +1 -1
- package/lib-commonjs/components/ResponsiveContainer/withResponsiveContainer.js +1 -2
- package/lib-commonjs/components/ResponsiveContainer/withResponsiveContainer.js.map +1 -1
- package/lib-commonjs/components/SankeyChart/SankeyChart.base.js +4 -4
- package/lib-commonjs/components/SankeyChart/SankeyChart.base.js.map +1 -1
- package/lib-commonjs/components/ScatterChart/ScatterChart.base.js +64 -11
- package/lib-commonjs/components/ScatterChart/ScatterChart.base.js.map +1 -1
- package/lib-commonjs/components/ScatterChart/ScatterChart.types.d.ts +4 -0
- package/lib-commonjs/components/ScatterChart/ScatterChart.types.js.map +1 -1
- package/lib-commonjs/utilities/image-export-utils.js +2 -3
- package/lib-commonjs/utilities/image-export-utils.js.map +1 -1
- package/lib-commonjs/utilities/scatterpolar-utils.js +2 -3
- package/lib-commonjs/utilities/scatterpolar-utils.js.map +1 -1
- package/lib-commonjs/utilities/utilities.d.ts +10 -10
- package/lib-commonjs/utilities/utilities.js +39 -40
- package/lib-commonjs/utilities/utilities.js.map +1 -1
- package/package.json +2 -2
- package/src/components/ScatterChart/ScatterChart.types.ts +5 -0
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.getVerticalFunnelSegmentGeometry = getVerticalFunnelSegmentGeometry;
|
|
4
|
+
exports.getHorizontalFunnelSegmentGeometry = getHorizontalFunnelSegmentGeometry;
|
|
5
|
+
exports.getStackedVerticalFunnelSegmentGeometry = getStackedVerticalFunnelSegmentGeometry;
|
|
6
|
+
exports.getStackedHorizontalFunnelSegmentGeometry = getStackedHorizontalFunnelSegmentGeometry;
|
|
7
|
+
exports.getSegmentTextProps = getSegmentTextProps;
|
|
4
8
|
function getVerticalFunnelSegmentGeometry(_a) {
|
|
5
9
|
var d = _a.d, i = _a.i, data = _a.data, funnelWidth = _a.funnelWidth, funnelHeight = _a.funnelHeight, isRTL = _a.isRTL;
|
|
6
10
|
var segmentHeight = funnelHeight / data.length;
|
|
@@ -26,7 +30,6 @@ function getVerticalFunnelSegmentGeometry(_a) {
|
|
|
26
30
|
var pathD = "M".concat(xStart, ",").concat(i * segmentHeight, "\n L").concat(funnelWidth - xStart, ",").concat(i * segmentHeight, "\n L").concat(funnelWidth - xEnd, ",").concat((i + 1) * segmentHeight, "\n L").concat(xEnd, ",").concat((i + 1) * segmentHeight, "\n Z");
|
|
27
31
|
return { pathD: pathD, textX: textX, textY: textY, availableWidth: availableWidth };
|
|
28
32
|
}
|
|
29
|
-
exports.getVerticalFunnelSegmentGeometry = getVerticalFunnelSegmentGeometry;
|
|
30
33
|
function getHorizontalFunnelSegmentGeometry(_a) {
|
|
31
34
|
var d = _a.d, i = _a.i, data = _a.data, funnelWidth = _a.funnelWidth, funnelHeight = _a.funnelHeight, isRTL = _a.isRTL;
|
|
32
35
|
var segmentWidth = funnelWidth / data.length;
|
|
@@ -68,7 +71,6 @@ function getHorizontalFunnelSegmentGeometry(_a) {
|
|
|
68
71
|
var pathD = "M".concat(x0, ",").concat(yOffset, "\n L").concat(x1, ",").concat(nextYOffset, "\n L").concat(x1, ",").concat(funnelHeight - nextYOffset, "\n L").concat(x0, ",").concat(funnelHeight - yOffset, "\n Z");
|
|
69
72
|
return { pathD: pathD, textX: textX, textY: textY, availableWidth: availableWidth };
|
|
70
73
|
}
|
|
71
|
-
exports.getHorizontalFunnelSegmentGeometry = getHorizontalFunnelSegmentGeometry;
|
|
72
74
|
function getStackedVerticalFunnelSegmentGeometry(_a) {
|
|
73
75
|
var _b, _c;
|
|
74
76
|
var i = _a.i, k = _a.k, stages = _a.stages, totals = _a.totals, maxTotal = _a.maxTotal, funnelWidth = _a.funnelWidth, funnelHeight = _a.funnelHeight;
|
|
@@ -118,7 +120,6 @@ function getStackedVerticalFunnelSegmentGeometry(_a) {
|
|
|
118
120
|
var pathD = "M".concat(topStart, ",").concat(i * segmentHeight, "\n L").concat(topEnd, ",").concat(i * segmentHeight, "\n L").concat(botEnd, ",").concat((i + 1) * segmentHeight, "\n L").concat(botStart, ",").concat((i + 1) * segmentHeight, "\n Z");
|
|
119
121
|
return { pathD: pathD, textX: textX, textY: textY, availableWidth: availableWidth };
|
|
120
122
|
}
|
|
121
|
-
exports.getStackedVerticalFunnelSegmentGeometry = getStackedVerticalFunnelSegmentGeometry;
|
|
122
123
|
function getStackedHorizontalFunnelSegmentGeometry(_a) {
|
|
123
124
|
var _b, _c;
|
|
124
125
|
var i = _a.i, k = _a.k, stages = _a.stages, totals = _a.totals, maxTotal = _a.maxTotal, funnelWidth = _a.funnelWidth, funnelHeight = _a.funnelHeight;
|
|
@@ -184,7 +185,6 @@ function getStackedHorizontalFunnelSegmentGeometry(_a) {
|
|
|
184
185
|
var pathD = "M".concat(leftStart, ",").concat(topStart, "\n L").concat(leftEnd, ",").concat(botStart, "\n L").concat(leftEnd, ",").concat(botEnd, "\n L").concat(leftStart, ",").concat(topEnd, "\n Z");
|
|
185
186
|
return { pathD: pathD, textX: textX, textY: textY, availableWidth: availableWidth };
|
|
186
187
|
}
|
|
187
|
-
exports.getStackedHorizontalFunnelSegmentGeometry = getStackedHorizontalFunnelSegmentGeometry;
|
|
188
188
|
function getSegmentTextProps(_a) {
|
|
189
189
|
var availableWidth = _a.availableWidth, _b = _a.minTextWidth, minTextWidth = _b === void 0 ? 24 : _b, textX = _a.textX, textY = _a.textY, value = _a.value, culture = _a.culture, onMouseOver = _a.onMouseOver, onMouseMove = _a.onMouseMove, onMouseOut = _a.onMouseOut;
|
|
190
190
|
return {
|
|
@@ -198,5 +198,4 @@ function getSegmentTextProps(_a) {
|
|
|
198
198
|
onMouseOut: onMouseOut,
|
|
199
199
|
};
|
|
200
200
|
}
|
|
201
|
-
exports.getSegmentTextProps = getSegmentTextProps;
|
|
202
201
|
//# sourceMappingURL=funnelGeometry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"funnelGeometry.js","sourceRoot":"../src/","sources":["components/FunnelChart/funnelGeometry.ts"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { IFunnelChartDataPoint } from './FunnelChart.types';\n\nexport interface IFunnelSegmentGeometry {\n pathD: string;\n textX: number;\n textY: number;\n availableWidth: number;\n}\n\nexport interface IStackedFunnelSegmentGeometry {\n pathD: string;\n textX: number;\n textY: number;\n availableWidth: number;\n}\n\ninterface ISubValue {\n category: string;\n value: number;\n color: string;\n}\n\ninterface IStage {\n subValues: ISubValue[];\n}\n\nexport function getVerticalFunnelSegmentGeometry({\n d,\n i,\n data,\n funnelWidth,\n funnelHeight,\n isRTL,\n}: {\n d: IFunnelChartDataPoint;\n i: number;\n data: IFunnelChartDataPoint[];\n funnelWidth: number;\n funnelHeight: number;\n isRTL: boolean;\n}): IFunnelSegmentGeometry {\n const segmentHeight = funnelHeight / data.length;\n const widthScale = (value: number) => (value / Math.max(...data.map(dataPoint => dataPoint.value!))) * funnelWidth;\n const topWidth = widthScale(d.value!);\n const bottomWidth = i < data.length - 1 ? widthScale(data[i + 1].value!) : 0;\n const xOffset = (funnelWidth - topWidth) / 2;\n const nextXOffset = (funnelWidth - bottomWidth) / 2;\n const xStart = isRTL ? funnelWidth - xOffset : xOffset;\n const xEnd = isRTL ? funnelWidth - nextXOffset : nextXOffset;\n\n const isLastSegment = i === data.length - 1;\n const textY = isLastSegment ? i * segmentHeight + segmentHeight * 0.33 : i * segmentHeight + segmentHeight / 2;\n\n const textX = funnelWidth / 2;\n let availableWidth = topWidth;\n if (isLastSegment) {\n const yFromTop = textY - i * segmentHeight;\n const widthAtY = topWidth * (1 - yFromTop / segmentHeight);\n availableWidth = Math.max(widthAtY * 0.8, 0);\n } else {\n availableWidth = Math.min(topWidth, bottomWidth) * 0.9;\n }\n const pathD = `M${xStart},${i * segmentHeight}\n L${funnelWidth - xStart},${i * segmentHeight}\n L${funnelWidth - xEnd},${(i + 1) * segmentHeight}\n L${xEnd},${(i + 1) * segmentHeight}\n Z`;\n return { pathD, textX, textY, availableWidth };\n}\n\nexport function getHorizontalFunnelSegmentGeometry({\n d,\n i,\n data,\n funnelWidth,\n funnelHeight,\n isRTL,\n}: {\n d: IFunnelChartDataPoint;\n i: number;\n data: IFunnelChartDataPoint[];\n funnelWidth: number;\n funnelHeight: number;\n isRTL: boolean;\n}): IFunnelSegmentGeometry {\n const segmentWidth = funnelWidth / data.length;\n const heightScale = (value: number) => (value / Math.max(...data.map(dataPoint => dataPoint.value!))) * funnelHeight;\n const leftHeight = heightScale(d.value!);\n const rightHeight = i < data.length - 1 ? heightScale(data[i + 1].value!) : 0;\n const yOffset = (funnelHeight - leftHeight) / 2;\n const nextYOffset = (funnelHeight - rightHeight) / 2;\n const x0 = i * segmentWidth;\n const x1 = (i + 1) * segmentWidth;\n\n const isLastSegment = i === data.length - 1;\n let textX: number;\n let textY: number;\n let availableWidth = segmentWidth * 0.8;\n\n if (isLastSegment) {\n // For the triangular last segment, position text at 1/4 from the left edge\n textX = x0 + (x1 - x0) * 0.25;\n textY = funnelHeight / 2;\n\n // For triangular segments, we need to check both height and width constraints\n // The segment needs to be large enough to contain text\n const segmentArea = (leftHeight * segmentWidth) / 2; // Area of triangle\n const minAreaForText = 800; // Minimum area needed to show text\n\n if (leftHeight < 40 || segmentArea < minAreaForText) {\n // Hide text if height is too small or area is insufficient\n availableWidth = 0;\n } else {\n // Calculate available width at text position\n const widthAtTextPosition = (x1 - x0) * 0.75;\n availableWidth = widthAtTextPosition * 0.6;\n }\n } else {\n textX = (x0 + x1) / 2;\n textY = funnelHeight / 2;\n const minHeight = Math.min(leftHeight, rightHeight);\n availableWidth = minHeight > 20 ? segmentWidth * 0.8 : 0;\n }\n\n const pathD = `M${x0},${yOffset}\n L${x1},${nextYOffset}\n L${x1},${funnelHeight - nextYOffset}\n L${x0},${funnelHeight - yOffset}\n Z`;\n return { pathD, textX, textY, availableWidth };\n}\n\nexport function getStackedVerticalFunnelSegmentGeometry({\n i,\n k,\n stages,\n totals,\n maxTotal,\n funnelWidth,\n funnelHeight,\n}: {\n i: number;\n k: number;\n stages: IStage[];\n totals: number[];\n maxTotal: number;\n funnelWidth: number;\n funnelHeight: number;\n}): IStackedFunnelSegmentGeometry {\n const segmentHeight = funnelHeight / stages.length;\n const cur = stages[i];\n const next = stages[i + 1] || { subValues: [] };\n const curTotal = totals[i] || 1;\n const nextTotal = totals[i + 1] || 0;\n\n let cumTop = 0;\n let cumBot = 0;\n for (let idx = 0; idx < k; idx++) {\n const v = cur.subValues[idx];\n const vNext = next.subValues?.find((x: ISubValue) => x.category === v.category);\n const val = v.value;\n const nextVal = vNext ? vNext.value : 0;\n cumTop += (val / curTotal) * (curTotal / maxTotal) * funnelWidth;\n cumBot += (nextVal / nextTotal || 0) * (nextTotal / maxTotal) * funnelWidth;\n }\n const v = cur.subValues[k];\n const vNext = next.subValues?.find((x: ISubValue) => x.category === v.category);\n const val = v.value;\n const nextVal = vNext ? vNext.value : 0;\n const topW = (val / curTotal) * (curTotal / maxTotal) * funnelWidth;\n const botW = (nextVal / nextTotal || 0) * (nextTotal / maxTotal) * funnelWidth;\n const topStart = (funnelWidth - (curTotal / maxTotal) * funnelWidth) / 2 + cumTop;\n const topEnd = topStart + topW;\n const botStart = (funnelWidth - (nextTotal / maxTotal) * funnelWidth) / 2 + cumBot;\n const botEnd = botStart + botW;\n const textX = (topStart + topEnd + botStart + botEnd) / 4;\n\n const isLastSegment = i === stages.length - 1;\n const textY = isLastSegment ? i * segmentHeight + segmentHeight * 0.33 : (i + 0.5) * segmentHeight;\n\n // Calculate available width based on this specific segment's width\n let availableWidth: number;\n if (isLastSegment) {\n // For triangular last segment, use the width at text Y position\n const yFromTop = textY - i * segmentHeight;\n const widthRatio = 1 - yFromTop / segmentHeight;\n availableWidth = topW * widthRatio;\n } else {\n // For trapezoidal segments, use the actual segment width\n availableWidth = Math.min(topW, botW);\n }\n\n const pathD = `M${topStart},${i * segmentHeight}\n L${topEnd},${i * segmentHeight}\n L${botEnd},${(i + 1) * segmentHeight}\n L${botStart},${(i + 1) * segmentHeight}\n Z`;\n return { pathD, textX, textY, availableWidth };\n}\n\nexport function getStackedHorizontalFunnelSegmentGeometry({\n i,\n k,\n stages,\n totals,\n maxTotal,\n funnelWidth,\n funnelHeight,\n}: {\n i: number;\n k: number;\n stages: IStage[];\n totals: number[];\n maxTotal: number;\n funnelWidth: number;\n funnelHeight: number;\n}): IStackedFunnelSegmentGeometry {\n const segmentWidth = funnelWidth / stages.length;\n const cur = stages[i];\n const next = stages[i + 1] || { subValues: [] };\n const curTotal = totals[i] || 1;\n const nextTotal = totals[i + 1] || 0;\n\n let cumTop = 0;\n let cumBot = 0;\n for (let idx = 0; idx < k; idx++) {\n const v = cur.subValues[idx];\n const vNext = next.subValues?.find((x: ISubValue) => x.category === v.category);\n const val = v.value;\n const nextVal = vNext ? vNext.value : 0;\n cumTop += (val / curTotal) * (curTotal / maxTotal) * funnelHeight;\n cumBot += (nextVal / nextTotal || 0) * (nextTotal / maxTotal) * funnelHeight;\n }\n const v = cur.subValues[k];\n const vNext = next.subValues?.find((x: ISubValue) => x.category === v.category);\n const val = v.value;\n const nextVal = vNext ? vNext.value : 0;\n const topH = (val / curTotal) * (curTotal / maxTotal) * funnelHeight;\n const botH = (nextVal / nextTotal || 0) * (nextTotal / maxTotal) * funnelHeight;\n const leftStart = i * segmentWidth;\n const leftEnd = (i + 1) * segmentWidth;\n const topStart = (funnelHeight - (curTotal / maxTotal) * funnelHeight) / 2 + cumTop;\n const topEnd = topStart + topH;\n const botStart = (funnelHeight - (nextTotal / maxTotal) * funnelHeight) / 2 + cumBot;\n const botEnd = botStart + botH;\n\n const isLastSegment = i === stages.length - 1;\n let textX: number;\n let textY: number;\n let availableWidth: number;\n\n if (isLastSegment) {\n textX = leftStart + (leftEnd - leftStart) * 0.25;\n textY = (topStart + topEnd) / 2;\n // For triangular segments, calculate available width at text position\n const segmentWidthAtTextPos = (leftEnd - leftStart) * 0.5;\n availableWidth = segmentWidthAtTextPos * 0.8;\n\n // For triangular last segments, also check if there's enough height\n // The segment area should be large enough to contain text\n const segmentArea = (topH * segmentWidth) / 2;\n if (topH < 24 || segmentArea < 600) {\n availableWidth = 0;\n }\n } else {\n textX = (leftStart + leftEnd) / 2;\n textY = (topStart + topEnd + botStart + botEnd) / 4;\n // For trapezoidal segments, use full segment width\n availableWidth = Math.abs(leftEnd - leftStart) * 0.9;\n\n // Check if the segment has sufficient height for text\n // For non-last segments, we need to ensure there's enough vertical space\n const avgHeight = (topH + botH) / 2;\n if (avgHeight < 20) {\n availableWidth = 0;\n }\n }\n\n const pathD = `M${leftStart},${topStart}\n L${leftEnd},${botStart}\n L${leftEnd},${botEnd}\n L${leftStart},${topEnd}\n Z`;\n return { pathD, textX, textY, availableWidth };\n}\n\nexport function getSegmentTextProps({\n availableWidth,\n minTextWidth = 24,\n textX,\n textY,\n value,\n culture,\n onMouseOver,\n onMouseMove,\n onMouseOut,\n}: {\n availableWidth: number;\n minTextWidth?: number;\n textX: number;\n textY: number;\n value: number;\n culture: string | undefined;\n onMouseOver: ((event: React.MouseEvent<SVGElement>) => void) | undefined;\n onMouseMove: ((event: React.MouseEvent<SVGElement>) => void) | undefined;\n onMouseOut: () => void;\n}) {\n return {\n show: availableWidth > minTextWidth && availableWidth > 0,\n x: textX,\n y: textY,\n value,\n culture,\n onMouseOver,\n onMouseMove,\n onMouseOut,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"funnelGeometry.js","sourceRoot":"../src/","sources":["components/FunnelChart/funnelGeometry.ts"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { IFunnelChartDataPoint } from './FunnelChart.types';\n\nexport interface IFunnelSegmentGeometry {\n pathD: string;\n textX: number;\n textY: number;\n availableWidth: number;\n}\n\nexport interface IStackedFunnelSegmentGeometry {\n pathD: string;\n textX: number;\n textY: number;\n availableWidth: number;\n}\n\ninterface ISubValue {\n category: string;\n value: number;\n color: string;\n}\n\ninterface IStage {\n subValues: ISubValue[];\n}\n\nexport function getVerticalFunnelSegmentGeometry({\n d,\n i,\n data,\n funnelWidth,\n funnelHeight,\n isRTL,\n}: {\n d: IFunnelChartDataPoint;\n i: number;\n data: IFunnelChartDataPoint[];\n funnelWidth: number;\n funnelHeight: number;\n isRTL: boolean;\n}): IFunnelSegmentGeometry {\n const segmentHeight = funnelHeight / data.length;\n const widthScale = (value: number) => (value / Math.max(...data.map(dataPoint => dataPoint.value!))) * funnelWidth;\n const topWidth = widthScale(d.value!);\n const bottomWidth = i < data.length - 1 ? widthScale(data[i + 1].value!) : 0;\n const xOffset = (funnelWidth - topWidth) / 2;\n const nextXOffset = (funnelWidth - bottomWidth) / 2;\n const xStart = isRTL ? funnelWidth - xOffset : xOffset;\n const xEnd = isRTL ? funnelWidth - nextXOffset : nextXOffset;\n\n const isLastSegment = i === data.length - 1;\n const textY = isLastSegment ? i * segmentHeight + segmentHeight * 0.33 : i * segmentHeight + segmentHeight / 2;\n\n const textX = funnelWidth / 2;\n let availableWidth = topWidth;\n if (isLastSegment) {\n const yFromTop = textY - i * segmentHeight;\n const widthAtY = topWidth * (1 - yFromTop / segmentHeight);\n availableWidth = Math.max(widthAtY * 0.8, 0);\n } else {\n availableWidth = Math.min(topWidth, bottomWidth) * 0.9;\n }\n const pathD = `M${xStart},${i * segmentHeight}\n L${funnelWidth - xStart},${i * segmentHeight}\n L${funnelWidth - xEnd},${(i + 1) * segmentHeight}\n L${xEnd},${(i + 1) * segmentHeight}\n Z`;\n return { pathD, textX, textY, availableWidth };\n}\n\nexport function getHorizontalFunnelSegmentGeometry({\n d,\n i,\n data,\n funnelWidth,\n funnelHeight,\n isRTL,\n}: {\n d: IFunnelChartDataPoint;\n i: number;\n data: IFunnelChartDataPoint[];\n funnelWidth: number;\n funnelHeight: number;\n isRTL: boolean;\n}): IFunnelSegmentGeometry {\n const segmentWidth = funnelWidth / data.length;\n const heightScale = (value: number) => (value / Math.max(...data.map(dataPoint => dataPoint.value!))) * funnelHeight;\n const leftHeight = heightScale(d.value!);\n const rightHeight = i < data.length - 1 ? heightScale(data[i + 1].value!) : 0;\n const yOffset = (funnelHeight - leftHeight) / 2;\n const nextYOffset = (funnelHeight - rightHeight) / 2;\n const x0 = i * segmentWidth;\n const x1 = (i + 1) * segmentWidth;\n\n const isLastSegment = i === data.length - 1;\n let textX: number;\n let textY: number;\n let availableWidth = segmentWidth * 0.8;\n\n if (isLastSegment) {\n // For the triangular last segment, position text at 1/4 from the left edge\n textX = x0 + (x1 - x0) * 0.25;\n textY = funnelHeight / 2;\n\n // For triangular segments, we need to check both height and width constraints\n // The segment needs to be large enough to contain text\n const segmentArea = (leftHeight * segmentWidth) / 2; // Area of triangle\n const minAreaForText = 800; // Minimum area needed to show text\n\n if (leftHeight < 40 || segmentArea < minAreaForText) {\n // Hide text if height is too small or area is insufficient\n availableWidth = 0;\n } else {\n // Calculate available width at text position\n const widthAtTextPosition = (x1 - x0) * 0.75;\n availableWidth = widthAtTextPosition * 0.6;\n }\n } else {\n textX = (x0 + x1) / 2;\n textY = funnelHeight / 2;\n const minHeight = Math.min(leftHeight, rightHeight);\n availableWidth = minHeight > 20 ? segmentWidth * 0.8 : 0;\n }\n\n const pathD = `M${x0},${yOffset}\n L${x1},${nextYOffset}\n L${x1},${funnelHeight - nextYOffset}\n L${x0},${funnelHeight - yOffset}\n Z`;\n return { pathD, textX, textY, availableWidth };\n}\n\nexport function getStackedVerticalFunnelSegmentGeometry({\n i,\n k,\n stages,\n totals,\n maxTotal,\n funnelWidth,\n funnelHeight,\n}: {\n i: number;\n k: number;\n stages: IStage[];\n totals: number[];\n maxTotal: number;\n funnelWidth: number;\n funnelHeight: number;\n}): IStackedFunnelSegmentGeometry {\n const segmentHeight = funnelHeight / stages.length;\n const cur = stages[i];\n const next = stages[i + 1] || { subValues: [] };\n const curTotal = totals[i] || 1;\n const nextTotal = totals[i + 1] || 0;\n\n let cumTop = 0;\n let cumBot = 0;\n for (let idx = 0; idx < k; idx++) {\n const v = cur.subValues[idx];\n const vNext = next.subValues?.find((x: ISubValue) => x.category === v.category);\n const val = v.value;\n const nextVal = vNext ? vNext.value : 0;\n cumTop += (val / curTotal) * (curTotal / maxTotal) * funnelWidth;\n cumBot += (nextVal / nextTotal || 0) * (nextTotal / maxTotal) * funnelWidth;\n }\n const v = cur.subValues[k];\n const vNext = next.subValues?.find((x: ISubValue) => x.category === v.category);\n const val = v.value;\n const nextVal = vNext ? vNext.value : 0;\n const topW = (val / curTotal) * (curTotal / maxTotal) * funnelWidth;\n const botW = (nextVal / nextTotal || 0) * (nextTotal / maxTotal) * funnelWidth;\n const topStart = (funnelWidth - (curTotal / maxTotal) * funnelWidth) / 2 + cumTop;\n const topEnd = topStart + topW;\n const botStart = (funnelWidth - (nextTotal / maxTotal) * funnelWidth) / 2 + cumBot;\n const botEnd = botStart + botW;\n const textX = (topStart + topEnd + botStart + botEnd) / 4;\n\n const isLastSegment = i === stages.length - 1;\n const textY = isLastSegment ? i * segmentHeight + segmentHeight * 0.33 : (i + 0.5) * segmentHeight;\n\n // Calculate available width based on this specific segment's width\n let availableWidth: number;\n if (isLastSegment) {\n // For triangular last segment, use the width at text Y position\n const yFromTop = textY - i * segmentHeight;\n const widthRatio = 1 - yFromTop / segmentHeight;\n availableWidth = topW * widthRatio;\n } else {\n // For trapezoidal segments, use the actual segment width\n availableWidth = Math.min(topW, botW);\n }\n\n const pathD = `M${topStart},${i * segmentHeight}\n L${topEnd},${i * segmentHeight}\n L${botEnd},${(i + 1) * segmentHeight}\n L${botStart},${(i + 1) * segmentHeight}\n Z`;\n return { pathD, textX, textY, availableWidth };\n}\n\nexport function getStackedHorizontalFunnelSegmentGeometry({\n i,\n k,\n stages,\n totals,\n maxTotal,\n funnelWidth,\n funnelHeight,\n}: {\n i: number;\n k: number;\n stages: IStage[];\n totals: number[];\n maxTotal: number;\n funnelWidth: number;\n funnelHeight: number;\n}): IStackedFunnelSegmentGeometry {\n const segmentWidth = funnelWidth / stages.length;\n const cur = stages[i];\n const next = stages[i + 1] || { subValues: [] };\n const curTotal = totals[i] || 1;\n const nextTotal = totals[i + 1] || 0;\n\n let cumTop = 0;\n let cumBot = 0;\n for (let idx = 0; idx < k; idx++) {\n const v = cur.subValues[idx];\n const vNext = next.subValues?.find((x: ISubValue) => x.category === v.category);\n const val = v.value;\n const nextVal = vNext ? vNext.value : 0;\n cumTop += (val / curTotal) * (curTotal / maxTotal) * funnelHeight;\n cumBot += (nextVal / nextTotal || 0) * (nextTotal / maxTotal) * funnelHeight;\n }\n const v = cur.subValues[k];\n const vNext = next.subValues?.find((x: ISubValue) => x.category === v.category);\n const val = v.value;\n const nextVal = vNext ? vNext.value : 0;\n const topH = (val / curTotal) * (curTotal / maxTotal) * funnelHeight;\n const botH = (nextVal / nextTotal || 0) * (nextTotal / maxTotal) * funnelHeight;\n const leftStart = i * segmentWidth;\n const leftEnd = (i + 1) * segmentWidth;\n const topStart = (funnelHeight - (curTotal / maxTotal) * funnelHeight) / 2 + cumTop;\n const topEnd = topStart + topH;\n const botStart = (funnelHeight - (nextTotal / maxTotal) * funnelHeight) / 2 + cumBot;\n const botEnd = botStart + botH;\n\n const isLastSegment = i === stages.length - 1;\n let textX: number;\n let textY: number;\n let availableWidth: number;\n\n if (isLastSegment) {\n textX = leftStart + (leftEnd - leftStart) * 0.25;\n textY = (topStart + topEnd) / 2;\n // For triangular segments, calculate available width at text position\n const segmentWidthAtTextPos = (leftEnd - leftStart) * 0.5;\n availableWidth = segmentWidthAtTextPos * 0.8;\n\n // For triangular last segments, also check if there's enough height\n // The segment area should be large enough to contain text\n const segmentArea = (topH * segmentWidth) / 2;\n if (topH < 24 || segmentArea < 600) {\n availableWidth = 0;\n }\n } else {\n textX = (leftStart + leftEnd) / 2;\n textY = (topStart + topEnd + botStart + botEnd) / 4;\n // For trapezoidal segments, use full segment width\n availableWidth = Math.abs(leftEnd - leftStart) * 0.9;\n\n // Check if the segment has sufficient height for text\n // For non-last segments, we need to ensure there's enough vertical space\n const avgHeight = (topH + botH) / 2;\n if (avgHeight < 20) {\n availableWidth = 0;\n }\n }\n\n const pathD = `M${leftStart},${topStart}\n L${leftEnd},${botStart}\n L${leftEnd},${botEnd}\n L${leftStart},${topEnd}\n Z`;\n return { pathD, textX, textY, availableWidth };\n}\n\nexport function getSegmentTextProps({\n availableWidth,\n minTextWidth = 24,\n textX,\n textY,\n value,\n culture,\n onMouseOver,\n onMouseMove,\n onMouseOut,\n}: {\n availableWidth: number;\n minTextWidth?: number;\n textX: number;\n textY: number;\n value: number;\n culture: string | undefined;\n onMouseOver: ((event: React.MouseEvent<SVGElement>) => void) | undefined;\n onMouseMove: ((event: React.MouseEvent<SVGElement>) => void) | undefined;\n onMouseOut: () => void;\n}) {\n return {\n show: availableWidth > minTextWidth && availableWidth > 0,\n x: textX,\n y: textY,\n value,\n culture,\n onMouseOver,\n onMouseMove,\n onMouseOut,\n };\n}\n"]}
|
|
@@ -10,7 +10,7 @@ export declare const BREAKPOINTS: {
|
|
|
10
10
|
}[];
|
|
11
11
|
export declare const calcNeedleRotation: (chartValue: number, minValue: number, maxValue: number) => number;
|
|
12
12
|
export declare const getSegmentLabel: (segment: IExtendedSegment, minValue: number, maxValue: number, variant?: GaugeChartVariant, isAriaLabel?: boolean) => string;
|
|
13
|
-
export declare const getChartValueLabel: (chartValue: number, minValue: number, maxValue: number, chartValueFormat?: GaugeValueFormat | ((sweepFraction: [number, number]) => string)
|
|
13
|
+
export declare const getChartValueLabel: (chartValue: number, minValue: number, maxValue: number, chartValueFormat?: GaugeValueFormat | ((sweepFraction: [number, number]) => string), forCallout?: boolean) => string;
|
|
14
14
|
interface IYValue extends Omit<IYValueHover, 'y'> {
|
|
15
15
|
y?: string | number;
|
|
16
16
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.withResponsiveContainer =
|
|
3
|
+
exports.withResponsiveContainer = withResponsiveContainer;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
6
6
|
var React = require("react");
|
|
@@ -17,5 +17,4 @@ function withResponsiveContainer(WrappedComponent) {
|
|
|
17
17
|
};
|
|
18
18
|
return ComponentWithResponsiveContainer;
|
|
19
19
|
}
|
|
20
|
-
exports.withResponsiveContainer = withResponsiveContainer;
|
|
21
20
|
//# sourceMappingURL=withResponsiveContainer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withResponsiveContainer.js","sourceRoot":"../src/","sources":["components/ResponsiveContainer/withResponsiveContainer.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"withResponsiveContainer.js","sourceRoot":"../src/","sources":["components/ResponsiveContainer/withResponsiveContainer.tsx"],"names":[],"mappings":";;AASA,0DA6BC;;AAtCD,uDAAuD;AACvD,6BAA+B;AAC/B,6DAA4D;AAG5D;;;GAGG;AACH,SAAgB,uBAAuB,CACrC,gBAA6C;IAE7C,IAAM,gCAAgC,GAAqB,UAAC,EAS3D;QARC,IAAA,MAAM,YAAA,EACN,KAAK,WAAA,EACL,MAAM,YAAA,EACN,QAAQ,cAAA,EACR,SAAS,eAAA,EACT,SAAS,eAAA,EACT,QAAQ,cAAA,EACL,SAAS,sBAR8C,+EAS3D,CADa;QAEZ,OAAO,CACL,oBAAC,yCAAmB,IAClB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ;YAElB,oBAAC,gBAAgB,uBAAM,SAAiB,EAAI,CACxB,CACvB,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,gCAAgC,CAAC;AAC1C,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport * as React from 'react';\nimport { ResponsiveContainer } from './ResponsiveContainer';\nimport { IResponsiveContainerProps } from './ResponsiveContainer.types';\n\n/**\n * An HOC to update wrapped component on container resize.\n * {@docCategory ResponsiveContainer}\n */\nexport function withResponsiveContainer<TProps extends Omit<IResponsiveContainerProps, 'children'>>(\n WrappedComponent: React.ComponentType<TProps>,\n) {\n const ComponentWithResponsiveContainer: React.FC<TProps> = ({\n aspect,\n width,\n height,\n minWidth,\n minHeight,\n maxHeight,\n onResize,\n ...restProps\n }) => {\n return (\n <ResponsiveContainer\n aspect={aspect}\n width={width}\n height={height}\n minWidth={minWidth}\n minHeight={minHeight}\n maxHeight={maxHeight}\n onResize={onResize}\n >\n <WrappedComponent {...(restProps as any)} />\n </ResponsiveContainer>\n );\n };\n\n return ComponentWithResponsiveContainer;\n}\n"]}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SankeyChartBase =
|
|
3
|
+
exports.SankeyChartBase = void 0;
|
|
4
|
+
exports.groupNodesByColumn = groupNodesByColumn;
|
|
5
|
+
exports.adjustPadding = adjustPadding;
|
|
6
|
+
exports.preRenderLayout = preRenderLayout;
|
|
4
7
|
var tslib_1 = require("tslib");
|
|
5
8
|
var react_focus_1 = require("@fluentui/react-focus");
|
|
6
9
|
var Callout_1 = require("@fluentui/react/lib/Callout");
|
|
@@ -133,7 +136,6 @@ function groupNodesByColumn(graph) {
|
|
|
133
136
|
});
|
|
134
137
|
return nodesInColumn;
|
|
135
138
|
}
|
|
136
|
-
exports.groupNodesByColumn = groupNodesByColumn;
|
|
137
139
|
/**
|
|
138
140
|
* This is used to normalize the nodes value whose value is less than 1% of the total column value.
|
|
139
141
|
*/
|
|
@@ -219,7 +221,6 @@ function adjustPadding(sankey, height, nodesInColumn) {
|
|
|
219
221
|
});
|
|
220
222
|
sankey.nodePadding(padding);
|
|
221
223
|
}
|
|
222
|
-
exports.adjustPadding = adjustPadding;
|
|
223
224
|
function idFromNumberOrSNode(node) {
|
|
224
225
|
if (typeof node === 'number') {
|
|
225
226
|
return node;
|
|
@@ -272,7 +273,6 @@ function preRenderLayout(margins, containerWidth, containerHeight, isRtl) {
|
|
|
272
273
|
.nodeAlign(isRtl ? d3_sankey_1.sankeyRight : d3_sankey_1.sankeyJustify);
|
|
273
274
|
return { sankey: sankey, height: containerHeight, width: containerWidth };
|
|
274
275
|
}
|
|
275
|
-
exports.preRenderLayout = preRenderLayout;
|
|
276
276
|
var elipsis = '...';
|
|
277
277
|
/**
|
|
278
278
|
* This is used to assign node fillcolors and borderColor cyclically when the user doesnt
|