@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.
Files changed (65) hide show
  1. package/CHANGELOG.json +22 -1
  2. package/CHANGELOG.md +12 -2
  3. package/dist/react-charting.d.ts +4 -0
  4. package/dist/react-charting.js +1 -1
  5. package/dist/react-charting.min.js +1 -1
  6. package/etc/react-charting.api.md +1 -0
  7. package/lib/components/CommonComponents/CartesianChart.base.js +1 -0
  8. package/lib/components/CommonComponents/CartesianChart.base.js.map +1 -1
  9. package/lib/components/DeclarativeChart/PlotlySchemaAdapter.d.ts +1 -1
  10. package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js +2 -1
  11. package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
  12. package/lib/components/GaugeChart/GaugeChart.base.d.ts +1 -1
  13. package/lib/components/ScatterChart/ScatterChart.base.js +66 -13
  14. package/lib/components/ScatterChart/ScatterChart.base.js.map +1 -1
  15. package/lib/components/ScatterChart/ScatterChart.types.d.ts +4 -0
  16. package/lib/components/ScatterChart/ScatterChart.types.js.map +1 -1
  17. package/lib/utilities/utilities.d.ts +10 -10
  18. package/lib-amd/components/CommonComponents/CartesianChart.base.js +1 -0
  19. package/lib-amd/components/CommonComponents/CartesianChart.base.js.map +1 -1
  20. package/lib-amd/components/DeclarativeChart/PlotlySchemaAdapter.d.ts +1 -1
  21. package/lib-amd/components/DeclarativeChart/PlotlySchemaAdapter.js +4 -3
  22. package/lib-amd/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
  23. package/lib-amd/components/FunnelChart/funnelGeometry.js +5 -6
  24. package/lib-amd/components/FunnelChart/funnelGeometry.js.map +1 -1
  25. package/lib-amd/components/GaugeChart/GaugeChart.base.d.ts +1 -1
  26. package/lib-amd/components/ResponsiveContainer/withResponsiveContainer.js +1 -2
  27. package/lib-amd/components/ResponsiveContainer/withResponsiveContainer.js.map +1 -1
  28. package/lib-amd/components/SankeyChart/SankeyChart.base.js +4 -4
  29. package/lib-amd/components/SankeyChart/SankeyChart.base.js.map +1 -1
  30. package/lib-amd/components/ScatterChart/ScatterChart.base.js +64 -11
  31. package/lib-amd/components/ScatterChart/ScatterChart.base.js.map +1 -1
  32. package/lib-amd/components/ScatterChart/ScatterChart.types.d.ts +4 -0
  33. package/lib-amd/components/ScatterChart/ScatterChart.types.js.map +1 -1
  34. package/lib-amd/utilities/image-export-utils.js +2 -3
  35. package/lib-amd/utilities/image-export-utils.js.map +1 -1
  36. package/lib-amd/utilities/scatterpolar-utils.js +2 -3
  37. package/lib-amd/utilities/scatterpolar-utils.js.map +1 -1
  38. package/lib-amd/utilities/utilities.d.ts +10 -10
  39. package/lib-amd/utilities/utilities.js +39 -39
  40. package/lib-amd/utilities/utilities.js.map +1 -1
  41. package/lib-commonjs/components/CommonComponents/CartesianChart.base.js +1 -0
  42. package/lib-commonjs/components/CommonComponents/CartesianChart.base.js.map +1 -1
  43. package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.d.ts +1 -1
  44. package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.js +4 -3
  45. package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
  46. package/lib-commonjs/components/FunnelChart/funnelGeometry.js +5 -6
  47. package/lib-commonjs/components/FunnelChart/funnelGeometry.js.map +1 -1
  48. package/lib-commonjs/components/GaugeChart/GaugeChart.base.d.ts +1 -1
  49. package/lib-commonjs/components/ResponsiveContainer/withResponsiveContainer.js +1 -2
  50. package/lib-commonjs/components/ResponsiveContainer/withResponsiveContainer.js.map +1 -1
  51. package/lib-commonjs/components/SankeyChart/SankeyChart.base.js +4 -4
  52. package/lib-commonjs/components/SankeyChart/SankeyChart.base.js.map +1 -1
  53. package/lib-commonjs/components/ScatterChart/ScatterChart.base.js +64 -11
  54. package/lib-commonjs/components/ScatterChart/ScatterChart.base.js.map +1 -1
  55. package/lib-commonjs/components/ScatterChart/ScatterChart.types.d.ts +4 -0
  56. package/lib-commonjs/components/ScatterChart/ScatterChart.types.js.map +1 -1
  57. package/lib-commonjs/utilities/image-export-utils.js +2 -3
  58. package/lib-commonjs/utilities/image-export-utils.js.map +1 -1
  59. package/lib-commonjs/utilities/scatterpolar-utils.js +2 -3
  60. package/lib-commonjs/utilities/scatterpolar-utils.js.map +1 -1
  61. package/lib-commonjs/utilities/utilities.d.ts +10 -10
  62. package/lib-commonjs/utilities/utilities.js +39 -40
  63. package/lib-commonjs/utilities/utilities.js.map +1 -1
  64. package/package.json +2 -2
  65. package/src/components/ScatterChart/ScatterChart.types.ts +5 -0
@@ -1,7 +1,11 @@
1
1
  define(["require", "exports"], function (require, exports) {
2
2
  "use strict";
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.getSegmentTextProps = exports.getStackedHorizontalFunnelSegmentGeometry = exports.getStackedVerticalFunnelSegmentGeometry = exports.getHorizontalFunnelSegmentGeometry = exports.getVerticalFunnelSegmentGeometry = void 0;
4
+ exports.getVerticalFunnelSegmentGeometry = getVerticalFunnelSegmentGeometry;
5
+ exports.getHorizontalFunnelSegmentGeometry = getHorizontalFunnelSegmentGeometry;
6
+ exports.getStackedVerticalFunnelSegmentGeometry = getStackedVerticalFunnelSegmentGeometry;
7
+ exports.getStackedHorizontalFunnelSegmentGeometry = getStackedHorizontalFunnelSegmentGeometry;
8
+ exports.getSegmentTextProps = getSegmentTextProps;
5
9
  function getVerticalFunnelSegmentGeometry(_a) {
6
10
  var d = _a.d, i = _a.i, data = _a.data, funnelWidth = _a.funnelWidth, funnelHeight = _a.funnelHeight, isRTL = _a.isRTL;
7
11
  var segmentHeight = funnelHeight / data.length;
@@ -27,7 +31,6 @@ define(["require", "exports"], function (require, exports) {
27
31
  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");
28
32
  return { pathD: pathD, textX: textX, textY: textY, availableWidth: availableWidth };
29
33
  }
30
- exports.getVerticalFunnelSegmentGeometry = getVerticalFunnelSegmentGeometry;
31
34
  function getHorizontalFunnelSegmentGeometry(_a) {
32
35
  var d = _a.d, i = _a.i, data = _a.data, funnelWidth = _a.funnelWidth, funnelHeight = _a.funnelHeight, isRTL = _a.isRTL;
33
36
  var segmentWidth = funnelWidth / data.length;
@@ -69,7 +72,6 @@ define(["require", "exports"], function (require, exports) {
69
72
  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");
70
73
  return { pathD: pathD, textX: textX, textY: textY, availableWidth: availableWidth };
71
74
  }
72
- exports.getHorizontalFunnelSegmentGeometry = getHorizontalFunnelSegmentGeometry;
73
75
  function getStackedVerticalFunnelSegmentGeometry(_a) {
74
76
  var _b, _c;
75
77
  var i = _a.i, k = _a.k, stages = _a.stages, totals = _a.totals, maxTotal = _a.maxTotal, funnelWidth = _a.funnelWidth, funnelHeight = _a.funnelHeight;
@@ -119,7 +121,6 @@ define(["require", "exports"], function (require, exports) {
119
121
  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");
120
122
  return { pathD: pathD, textX: textX, textY: textY, availableWidth: availableWidth };
121
123
  }
122
- exports.getStackedVerticalFunnelSegmentGeometry = getStackedVerticalFunnelSegmentGeometry;
123
124
  function getStackedHorizontalFunnelSegmentGeometry(_a) {
124
125
  var _b, _c;
125
126
  var i = _a.i, k = _a.k, stages = _a.stages, totals = _a.totals, maxTotal = _a.maxTotal, funnelWidth = _a.funnelWidth, funnelHeight = _a.funnelHeight;
@@ -185,7 +186,6 @@ define(["require", "exports"], function (require, exports) {
185
186
  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");
186
187
  return { pathD: pathD, textX: textX, textY: textY, availableWidth: availableWidth };
187
188
  }
188
- exports.getStackedHorizontalFunnelSegmentGeometry = getStackedHorizontalFunnelSegmentGeometry;
189
189
  function getSegmentTextProps(_a) {
190
190
  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;
191
191
  return {
@@ -199,6 +199,5 @@ define(["require", "exports"], function (require, exports) {
199
199
  onMouseOut: onMouseOut,
200
200
  };
201
201
  }
202
- exports.getSegmentTextProps = getSegmentTextProps;
203
202
  });
204
203
  //# 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) | undefined, forCallout?: boolean) => 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,7 +1,7 @@
1
1
  define(["require", "exports", "tslib", "react", "./ResponsiveContainer"], function (require, exports, tslib_1, React, ResponsiveContainer_1) {
2
2
  "use strict";
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.withResponsiveContainer = void 0;
4
+ exports.withResponsiveContainer = withResponsiveContainer;
5
5
  /**
6
6
  * An HOC to update wrapped component on container resize.
7
7
  * {@docCategory ResponsiveContainer}
@@ -14,6 +14,5 @@ define(["require", "exports", "tslib", "react", "./ResponsiveContainer"], functi
14
14
  };
15
15
  return ComponentWithResponsiveContainer;
16
16
  }
17
- exports.withResponsiveContainer = withResponsiveContainer;
18
17
  });
19
18
  //# sourceMappingURL=withResponsiveContainer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"withResponsiveContainer.js","sourceRoot":"../src/","sources":["components/ResponsiveContainer/withResponsiveContainer.tsx"],"names":[],"mappings":";;;;IAKA;;;OAGG;IACH,SAAgB,uBAAuB,CACrC,gBAA6C;QAE7C,IAAM,gCAAgC,GAAqB,UAAC,EAS3D;YARC,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;YAEZ,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;gBAElB,oBAAC,gBAAgB,uBAAM,SAAiB,EAAI,CACxB,CACvB,CAAC;QACJ,CAAC,CAAC;QAEF,OAAO,gCAAgC,CAAC;IAC1C,CAAC;IA7BD,0DA6BC","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
+ {"version":3,"file":"withResponsiveContainer.js","sourceRoot":"../src/","sources":["components/ResponsiveContainer/withResponsiveContainer.tsx"],"names":[],"mappings":";;;IASA,0DA6BC;IAjCD;;;OAGG;IACH,SAAgB,uBAAuB,CACrC,gBAA6C;QAE7C,IAAM,gCAAgC,GAAqB,UAAC,EAS3D;YARC,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;YAEZ,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;gBAElB,oBAAC,gBAAgB,uBAAM,SAAiB,EAAI,CACxB,CACvB,CAAC;QACJ,CAAC,CAAC;QAEF,OAAO,gCAAgC,CAAC;IAC1C,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,7 +1,10 @@
1
1
  define(["require", "exports", "tslib", "@fluentui/react-focus", "@fluentui/react/lib/Callout", "@fluentui/react/lib/Utilities", "d3-array", "d3-sankey", "d3-selection", "d3-shape", "react", "../../utilities/ChartHoverCard/ChartHoverCard", "../../utilities/image-export-utils"], function (require, exports, tslib_1, react_focus_1, Callout_1, Utilities_1, d3_array_1, d3_sankey_1, d3_selection_1, d3_shape_1, React, ChartHoverCard_1, image_export_utils_1) {
2
2
  "use strict";
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.SankeyChartBase = exports.preRenderLayout = exports.adjustPadding = exports.groupNodesByColumn = void 0;
4
+ exports.SankeyChartBase = void 0;
5
+ exports.groupNodesByColumn = groupNodesByColumn;
6
+ exports.adjustPadding = adjustPadding;
7
+ exports.preRenderLayout = preRenderLayout;
5
8
  var getClassNames = (0, Utilities_1.classNamesFunction)();
6
9
  var PADDING_PERCENTAGE = 0.3;
7
10
  var NON_SELECTED_NODE_AND_STREAM_COLOR = '#757575';
@@ -123,7 +126,6 @@ define(["require", "exports", "tslib", "@fluentui/react-focus", "@fluentui/react
123
126
  });
124
127
  return nodesInColumn;
125
128
  }
126
- exports.groupNodesByColumn = groupNodesByColumn;
127
129
  /**
128
130
  * This is used to normalize the nodes value whose value is less than 1% of the total column value.
129
131
  */
@@ -209,7 +211,6 @@ define(["require", "exports", "tslib", "@fluentui/react-focus", "@fluentui/react
209
211
  });
210
212
  sankey.nodePadding(padding);
211
213
  }
212
- exports.adjustPadding = adjustPadding;
213
214
  function idFromNumberOrSNode(node) {
214
215
  if (typeof node === 'number') {
215
216
  return node;
@@ -262,7 +263,6 @@ define(["require", "exports", "tslib", "@fluentui/react-focus", "@fluentui/react
262
263
  .nodeAlign(isRtl ? d3_sankey_1.sankeyRight : d3_sankey_1.sankeyJustify);
263
264
  return { sankey: sankey, height: containerHeight, width: containerWidth };
264
265
  }
265
- exports.preRenderLayout = preRenderLayout;
266
266
  var elipsis = '...';
267
267
  /**
268
268
  * This is used to assign node fillcolors and borderColor cyclically when the user doesnt