@fluentui/react-charts 9.2.3 → 9.3.0
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.md +79 -10
- package/dist/index.d.ts +98 -5
- package/lib/components/AreaChart/AreaChart.js +8 -6
- package/lib/components/AreaChart/AreaChart.js.map +1 -1
- package/lib/components/AreaChart/useAreaChartStyles.styles.js +4 -2
- package/lib/components/AreaChart/useAreaChartStyles.styles.js.map +1 -1
- package/lib/components/AreaChart/useAreaChartStyles.styles.raw.js +4 -15
- package/lib/components/AreaChart/useAreaChartStyles.styles.raw.js.map +1 -1
- package/lib/components/ChartTable/ChartTable.js +95 -8
- package/lib/components/ChartTable/ChartTable.js.map +1 -1
- package/lib/components/ChartTable/useChartTableStyles.styles.js +5 -3
- package/lib/components/ChartTable/useChartTableStyles.styles.js.map +1 -1
- package/lib/components/ChartTable/useChartTableStyles.styles.raw.js +3 -2
- package/lib/components/ChartTable/useChartTableStyles.styles.raw.js.map +1 -1
- package/lib/components/CommonComponents/CartesianChart.js +45 -42
- package/lib/components/CommonComponents/CartesianChart.js.map +1 -1
- package/lib/components/CommonComponents/CartesianChart.types.js.map +1 -1
- package/lib/components/CommonComponents/ChartPopover.js +14 -5
- package/lib/components/CommonComponents/ChartPopover.js.map +1 -1
- package/lib/components/CommonComponents/useCartesianChartStyles.styles.js +19 -14
- package/lib/components/CommonComponents/useCartesianChartStyles.styles.js.map +1 -1
- package/lib/components/CommonComponents/useCartesianChartStyles.styles.raw.js +7 -33
- package/lib/components/CommonComponents/useCartesianChartStyles.styles.raw.js.map +1 -1
- package/lib/components/CommonComponents/useChartPopoverStyles.styles.js +5 -3
- package/lib/components/CommonComponents/useChartPopoverStyles.styles.js.map +1 -1
- package/lib/components/CommonComponents/useChartPopoverStyles.styles.raw.js +3 -2
- package/lib/components/CommonComponents/useChartPopoverStyles.styles.raw.js.map +1 -1
- package/lib/components/DeclarativeChart/DeclarativeChart.js +56 -16
- package/lib/components/DeclarativeChart/DeclarativeChart.js.map +1 -1
- package/lib/components/DeclarativeChart/PlotlyColorAdapter.js +19 -0
- package/lib/components/DeclarativeChart/PlotlyColorAdapter.js.map +1 -1
- package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js +1096 -337
- package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
- package/lib/components/DeclarativeChart/imageExporter.js +1 -0
- package/lib/components/DeclarativeChart/imageExporter.js.map +1 -1
- package/lib/components/DonutChart/Arc/Arc.js +8 -8
- package/lib/components/DonutChart/Arc/Arc.js.map +1 -1
- package/lib/components/DonutChart/Arc/Arc.types.js.map +1 -1
- package/lib/components/DonutChart/Arc/useArcStyles.styles.js +9 -2
- package/lib/components/DonutChart/Arc/useArcStyles.styles.js.map +1 -1
- package/lib/components/DonutChart/Arc/useArcStyles.styles.raw.js +6 -1
- package/lib/components/DonutChart/Arc/useArcStyles.styles.raw.js.map +1 -1
- package/lib/components/DonutChart/DonutChart.js +61 -25
- package/lib/components/DonutChart/DonutChart.js.map +1 -1
- package/lib/components/DonutChart/DonutChart.types.js.map +1 -1
- package/lib/components/DonutChart/Pie/Pie.js +1 -0
- package/lib/components/DonutChart/Pie/Pie.js.map +1 -1
- package/lib/components/DonutChart/Pie/Pie.types.js.map +1 -1
- package/lib/components/DonutChart/Pie/usePieStyles.styles.js +2 -0
- package/lib/components/DonutChart/Pie/usePieStyles.styles.js.map +1 -1
- package/lib/components/DonutChart/Pie/usePieStyles.styles.raw.js +1 -0
- package/lib/components/DonutChart/Pie/usePieStyles.styles.raw.js.map +1 -1
- package/lib/components/DonutChart/useDonutChartStyles.styles.js +23 -4
- package/lib/components/DonutChart/useDonutChartStyles.styles.js.map +1 -1
- package/lib/components/DonutChart/useDonutChartStyles.styles.raw.js +9 -4
- package/lib/components/DonutChart/useDonutChartStyles.styles.raw.js.map +1 -1
- package/lib/components/FunnelChart/FunnelChart.js +11 -5
- package/lib/components/FunnelChart/FunnelChart.js.map +1 -1
- package/lib/components/FunnelChart/funnelGeometry.js.map +1 -1
- package/lib/components/FunnelChart/useFunnelChartStyles.styles.js +2 -0
- package/lib/components/FunnelChart/useFunnelChartStyles.styles.js.map +1 -1
- package/lib/components/FunnelChart/useFunnelChartStyles.styles.raw.js +1 -0
- package/lib/components/FunnelChart/useFunnelChartStyles.styles.raw.js.map +1 -1
- package/lib/components/GanttChart/GanttChart.js +1 -0
- package/lib/components/GanttChart/GanttChart.js.map +1 -1
- package/lib/components/GaugeChart/GaugeChart.js +2 -2
- package/lib/components/GaugeChart/GaugeChart.js.map +1 -1
- package/lib/components/GaugeChart/useGaugeChartStyles.styles.js +2 -0
- package/lib/components/GaugeChart/useGaugeChartStyles.styles.js.map +1 -1
- package/lib/components/GaugeChart/useGaugeChartStyles.styles.raw.js +1 -0
- package/lib/components/GaugeChart/useGaugeChartStyles.styles.raw.js.map +1 -1
- package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js +15 -9
- package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js.map +1 -1
- package/lib/components/GroupedVerticalBarChart/useGroupedVerticalBarChartStyles.styles.js +6 -17
- package/lib/components/GroupedVerticalBarChart/useGroupedVerticalBarChartStyles.styles.js.map +1 -1
- package/lib/components/GroupedVerticalBarChart/useGroupedVerticalBarChartStyles.styles.raw.js +5 -21
- package/lib/components/GroupedVerticalBarChart/useGroupedVerticalBarChartStyles.styles.raw.js.map +1 -1
- package/lib/components/HeatMapChart/HeatMapChart.js +2 -1
- package/lib/components/HeatMapChart/HeatMapChart.js.map +1 -1
- package/lib/components/HeatMapChart/useHeatMapChartStyles.styles.js +2 -0
- package/lib/components/HeatMapChart/useHeatMapChartStyles.styles.js.map +1 -1
- package/lib/components/HeatMapChart/useHeatMapChartStyles.styles.raw.js +1 -0
- package/lib/components/HeatMapChart/useHeatMapChartStyles.styles.raw.js.map +1 -1
- package/lib/components/HorizontalBarChart/HorizontalBarChart.js +3 -3
- package/lib/components/HorizontalBarChart/HorizontalBarChart.js.map +1 -1
- package/lib/components/HorizontalBarChart/useHorizontalBarChartStyles.styles.js +8 -2
- package/lib/components/HorizontalBarChart/useHorizontalBarChartStyles.styles.js.map +1 -1
- package/lib/components/HorizontalBarChart/useHorizontalBarChartStyles.styles.raw.js +5 -1
- package/lib/components/HorizontalBarChart/useHorizontalBarChartStyles.styles.raw.js.map +1 -1
- package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js +2 -2
- package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js.map +1 -1
- package/lib/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.js +2 -0
- package/lib/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.js.map +1 -1
- package/lib/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.raw.js +1 -0
- package/lib/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.raw.js.map +1 -1
- package/lib/components/Legends/Legends.js +1 -0
- package/lib/components/Legends/Legends.js.map +1 -1
- package/lib/components/Legends/OverflowMenu.js +1 -0
- package/lib/components/Legends/OverflowMenu.js.map +1 -1
- package/lib/components/Legends/shape.js +1 -0
- package/lib/components/Legends/shape.js.map +1 -1
- package/lib/components/Legends/useLegendsStyles.styles.js +2 -0
- package/lib/components/Legends/useLegendsStyles.styles.js.map +1 -1
- package/lib/components/Legends/useLegendsStyles.styles.raw.js +1 -0
- package/lib/components/Legends/useLegendsStyles.styles.raw.js.map +1 -1
- package/lib/components/LineChart/LineChart.js +284 -281
- package/lib/components/LineChart/LineChart.js.map +1 -1
- package/lib/components/LineChart/LineChart.types.js.map +1 -1
- package/lib/components/LineChart/eventAnnotation/LabelLink.js +1 -0
- package/lib/components/LineChart/eventAnnotation/LabelLink.js.map +1 -1
- package/lib/components/LineChart/eventAnnotation/Textbox.js +1 -0
- package/lib/components/LineChart/eventAnnotation/Textbox.js.map +1 -1
- package/lib/components/LineChart/useLineChartStyles.styles.js +25 -10
- package/lib/components/LineChart/useLineChartStyles.styles.js.map +1 -1
- package/lib/components/LineChart/useLineChartStyles.styles.raw.js +5 -21
- package/lib/components/LineChart/useLineChartStyles.styles.raw.js.map +1 -1
- package/lib/components/ResponsiveContainer/ResponsiveContainer.js +1 -0
- package/lib/components/ResponsiveContainer/ResponsiveContainer.js.map +1 -1
- package/lib/components/ResponsiveContainer/useResponsiveChildStyles.styles.js +2 -0
- package/lib/components/ResponsiveContainer/useResponsiveChildStyles.styles.js.map +1 -1
- package/lib/components/ResponsiveContainer/useResponsiveChildStyles.styles.raw.js +1 -0
- package/lib/components/ResponsiveContainer/useResponsiveChildStyles.styles.raw.js.map +1 -1
- package/lib/components/ResponsiveContainer/withResponsiveContainer.js +1 -0
- package/lib/components/ResponsiveContainer/withResponsiveContainer.js.map +1 -1
- package/lib/components/SankeyChart/SankeyChart.js +1 -0
- package/lib/components/SankeyChart/SankeyChart.js.map +1 -1
- package/lib/components/SankeyChart/useSankeyChartStyles.styles.js +14 -25
- package/lib/components/SankeyChart/useSankeyChartStyles.styles.js.map +1 -1
- package/lib/components/SankeyChart/useSankeyChartStyles.styles.raw.js +3 -12
- package/lib/components/SankeyChart/useSankeyChartStyles.styles.raw.js.map +1 -1
- package/lib/components/ScatterChart/ScatterChart.js +121 -81
- package/lib/components/ScatterChart/ScatterChart.js.map +1 -1
- package/lib/components/ScatterChart/ScatterChart.types.js.map +1 -1
- package/lib/components/ScatterChart/useScatterChartStyles.styles.js +13 -7
- package/lib/components/ScatterChart/useScatterChartStyles.styles.js.map +1 -1
- package/lib/components/ScatterChart/useScatterChartStyles.styles.raw.js +5 -22
- package/lib/components/ScatterChart/useScatterChartStyles.styles.raw.js.map +1 -1
- package/lib/components/Sparkline/Sparkline.js +1 -0
- package/lib/components/Sparkline/Sparkline.js.map +1 -1
- package/lib/components/Sparkline/useSparklineStyles.styles.js +2 -0
- package/lib/components/Sparkline/useSparklineStyles.styles.js.map +1 -1
- package/lib/components/Sparkline/useSparklineStyles.styles.raw.js +1 -0
- package/lib/components/Sparkline/useSparklineStyles.styles.raw.js.map +1 -1
- package/lib/components/VerticalBarChart/VerticalBarChart.js +17 -12
- package/lib/components/VerticalBarChart/VerticalBarChart.js.map +1 -1
- package/lib/components/VerticalBarChart/useVerticalBarChartStyles.styles.js +10 -6
- package/lib/components/VerticalBarChart/useVerticalBarChartStyles.styles.js.map +1 -1
- package/lib/components/VerticalBarChart/useVerticalBarChartStyles.styles.raw.js +6 -19
- package/lib/components/VerticalBarChart/useVerticalBarChartStyles.styles.raw.js.map +1 -1
- package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.js +30 -25
- package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.js.map +1 -1
- package/lib/components/VerticalStackedBarChart/useVerticalStackedBarChartStyles.styles.js +9 -6
- package/lib/components/VerticalStackedBarChart/useVerticalStackedBarChartStyles.styles.js.map +1 -1
- package/lib/components/VerticalStackedBarChart/useVerticalStackedBarChartStyles.styles.raw.js +5 -19
- package/lib/components/VerticalStackedBarChart/useVerticalStackedBarChartStyles.styles.raw.js.map +1 -1
- package/lib/types/DataPoint.js +3 -1
- package/lib/types/DataPoint.js.map +1 -1
- package/lib/utilities/Common.styles.js +47 -0
- package/lib/utilities/Common.styles.js.map +1 -0
- package/lib/utilities/Common.styles.raw.js +47 -0
- package/lib/utilities/Common.styles.raw.js.map +1 -0
- package/lib/utilities/FocusableTooltipText.js +1 -0
- package/lib/utilities/FocusableTooltipText.js.map +1 -1
- package/lib/utilities/SVGTooltipText.js +1 -0
- package/lib/utilities/SVGTooltipText.js.map +1 -1
- package/lib/utilities/image-export-utils.js +1 -0
- package/lib/utilities/image-export-utils.js.map +1 -1
- package/lib/utilities/index.js +1 -0
- package/lib/utilities/index.js.map +1 -1
- package/lib/utilities/scatterpolar-utils.js +52 -0
- package/lib/utilities/scatterpolar-utils.js.map +1 -0
- package/lib/utilities/utilities.js +314 -146
- package/lib/utilities/utilities.js.map +1 -1
- package/lib/utilities/vbc-utils.js.map +1 -1
- package/lib-commonjs/components/AreaChart/AreaChart.js +7 -5
- package/lib-commonjs/components/AreaChart/AreaChart.js.map +1 -1
- package/lib-commonjs/components/AreaChart/useAreaChartStyles.styles.js +1 -0
- package/lib-commonjs/components/AreaChart/useAreaChartStyles.styles.js.map +1 -1
- package/lib-commonjs/components/AreaChart/useAreaChartStyles.styles.raw.js +3 -14
- package/lib-commonjs/components/AreaChart/useAreaChartStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/ChartTable/ChartTable.js +95 -8
- package/lib-commonjs/components/ChartTable/ChartTable.js.map +1 -1
- package/lib-commonjs/components/ChartTable/useChartTableStyles.styles.js +4 -3
- package/lib-commonjs/components/ChartTable/useChartTableStyles.styles.js.map +1 -1
- package/lib-commonjs/components/ChartTable/useChartTableStyles.styles.raw.js +3 -2
- package/lib-commonjs/components/ChartTable/useChartTableStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/CartesianChart.js +45 -42
- package/lib-commonjs/components/CommonComponents/CartesianChart.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/CartesianChart.types.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/ChartPopover.js +14 -5
- package/lib-commonjs/components/CommonComponents/ChartPopover.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/useCartesianChartStyles.styles.js +16 -13
- package/lib-commonjs/components/CommonComponents/useCartesianChartStyles.styles.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/useCartesianChartStyles.styles.raw.js +5 -32
- package/lib-commonjs/components/CommonComponents/useCartesianChartStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/useChartPopoverStyles.styles.js +4 -3
- package/lib-commonjs/components/CommonComponents/useChartPopoverStyles.styles.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/useChartPopoverStyles.styles.raw.js +3 -2
- package/lib-commonjs/components/CommonComponents/useChartPopoverStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/DeclarativeChart/DeclarativeChart.js +60 -20
- package/lib-commonjs/components/DeclarativeChart/DeclarativeChart.js.map +1 -1
- package/lib-commonjs/components/DeclarativeChart/PlotlyColorAdapter.js +22 -0
- package/lib-commonjs/components/DeclarativeChart/PlotlyColorAdapter.js.map +1 -1
- package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.js +1109 -338
- package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
- package/lib-commonjs/components/DeclarativeChart/imageExporter.js +1 -0
- package/lib-commonjs/components/DeclarativeChart/imageExporter.js.map +1 -1
- package/lib-commonjs/components/DonutChart/Arc/Arc.js +8 -8
- package/lib-commonjs/components/DonutChart/Arc/Arc.js.map +1 -1
- package/lib-commonjs/components/DonutChart/Arc/Arc.types.js.map +1 -1
- package/lib-commonjs/components/DonutChart/Arc/useArcStyles.styles.js +11 -1
- package/lib-commonjs/components/DonutChart/Arc/useArcStyles.styles.js.map +1 -1
- package/lib-commonjs/components/DonutChart/Arc/useArcStyles.styles.raw.js +6 -1
- package/lib-commonjs/components/DonutChart/Arc/useArcStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/DonutChart/DonutChart.js +61 -25
- package/lib-commonjs/components/DonutChart/DonutChart.js.map +1 -1
- package/lib-commonjs/components/DonutChart/DonutChart.types.js.map +1 -1
- package/lib-commonjs/components/DonutChart/Pie/Pie.js +2 -1
- package/lib-commonjs/components/DonutChart/Pie/Pie.js.map +1 -1
- package/lib-commonjs/components/DonutChart/Pie/Pie.types.js.map +1 -1
- package/lib-commonjs/components/DonutChart/Pie/usePieStyles.styles.js +1 -0
- package/lib-commonjs/components/DonutChart/Pie/usePieStyles.styles.js.map +1 -1
- package/lib-commonjs/components/DonutChart/Pie/usePieStyles.styles.raw.js +1 -0
- package/lib-commonjs/components/DonutChart/Pie/usePieStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/DonutChart/useDonutChartStyles.styles.js +33 -4
- package/lib-commonjs/components/DonutChart/useDonutChartStyles.styles.js.map +1 -1
- package/lib-commonjs/components/DonutChart/useDonutChartStyles.styles.raw.js +9 -4
- package/lib-commonjs/components/DonutChart/useDonutChartStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/FunnelChart/FunnelChart.js +11 -5
- package/lib-commonjs/components/FunnelChart/FunnelChart.js.map +1 -1
- package/lib-commonjs/components/FunnelChart/funnelGeometry.js.map +1 -1
- package/lib-commonjs/components/FunnelChart/useFunnelChartStyles.styles.js +1 -0
- package/lib-commonjs/components/FunnelChart/useFunnelChartStyles.styles.js.map +1 -1
- package/lib-commonjs/components/FunnelChart/useFunnelChartStyles.styles.raw.js +1 -0
- package/lib-commonjs/components/FunnelChart/useFunnelChartStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/GanttChart/GanttChart.js +1 -0
- package/lib-commonjs/components/GanttChart/GanttChart.js.map +1 -1
- package/lib-commonjs/components/GaugeChart/GaugeChart.js +2 -2
- package/lib-commonjs/components/GaugeChart/GaugeChart.js.map +1 -1
- package/lib-commonjs/components/GaugeChart/useGaugeChartStyles.styles.js +1 -0
- package/lib-commonjs/components/GaugeChart/useGaugeChartStyles.styles.js.map +1 -1
- package/lib-commonjs/components/GaugeChart/useGaugeChartStyles.styles.raw.js +1 -0
- package/lib-commonjs/components/GaugeChart/useGaugeChartStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js +15 -9
- package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js.map +1 -1
- package/lib-commonjs/components/GroupedVerticalBarChart/useGroupedVerticalBarChartStyles.styles.js +3 -19
- package/lib-commonjs/components/GroupedVerticalBarChart/useGroupedVerticalBarChartStyles.styles.js.map +1 -1
- package/lib-commonjs/components/GroupedVerticalBarChart/useGroupedVerticalBarChartStyles.styles.raw.js +4 -20
- package/lib-commonjs/components/GroupedVerticalBarChart/useGroupedVerticalBarChartStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/HeatMapChart/HeatMapChart.js +2 -1
- package/lib-commonjs/components/HeatMapChart/HeatMapChart.js.map +1 -1
- package/lib-commonjs/components/HeatMapChart/useHeatMapChartStyles.styles.js +1 -0
- package/lib-commonjs/components/HeatMapChart/useHeatMapChartStyles.styles.js.map +1 -1
- package/lib-commonjs/components/HeatMapChart/useHeatMapChartStyles.styles.raw.js +1 -0
- package/lib-commonjs/components/HeatMapChart/useHeatMapChartStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/HorizontalBarChart/HorizontalBarChart.js +3 -3
- package/lib-commonjs/components/HorizontalBarChart/HorizontalBarChart.js.map +1 -1
- package/lib-commonjs/components/HorizontalBarChart/useHorizontalBarChartStyles.styles.js +10 -2
- package/lib-commonjs/components/HorizontalBarChart/useHorizontalBarChartStyles.styles.js.map +1 -1
- package/lib-commonjs/components/HorizontalBarChart/useHorizontalBarChartStyles.styles.raw.js +5 -1
- package/lib-commonjs/components/HorizontalBarChart/useHorizontalBarChartStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js +2 -2
- package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js.map +1 -1
- package/lib-commonjs/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.js +1 -0
- package/lib-commonjs/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.js.map +1 -1
- package/lib-commonjs/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.raw.js +1 -0
- package/lib-commonjs/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/Legends/Legends.js +1 -0
- package/lib-commonjs/components/Legends/Legends.js.map +1 -1
- package/lib-commonjs/components/Legends/OverflowMenu.js +1 -0
- package/lib-commonjs/components/Legends/OverflowMenu.js.map +1 -1
- package/lib-commonjs/components/Legends/shape.js +1 -0
- package/lib-commonjs/components/Legends/shape.js.map +1 -1
- package/lib-commonjs/components/Legends/useLegendsStyles.styles.js +1 -0
- package/lib-commonjs/components/Legends/useLegendsStyles.styles.js.map +1 -1
- package/lib-commonjs/components/Legends/useLegendsStyles.styles.raw.js +1 -0
- package/lib-commonjs/components/Legends/useLegendsStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/LineChart/LineChart.js +282 -279
- package/lib-commonjs/components/LineChart/LineChart.js.map +1 -1
- package/lib-commonjs/components/LineChart/LineChart.types.js.map +1 -1
- package/lib-commonjs/components/LineChart/eventAnnotation/LabelLink.js +1 -0
- package/lib-commonjs/components/LineChart/eventAnnotation/LabelLink.js.map +1 -1
- package/lib-commonjs/components/LineChart/eventAnnotation/Textbox.js +1 -0
- package/lib-commonjs/components/LineChart/eventAnnotation/Textbox.js.map +1 -1
- package/lib-commonjs/components/LineChart/useLineChartStyles.styles.js +31 -9
- package/lib-commonjs/components/LineChart/useLineChartStyles.styles.js.map +1 -1
- package/lib-commonjs/components/LineChart/useLineChartStyles.styles.raw.js +3 -20
- package/lib-commonjs/components/LineChart/useLineChartStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/ResponsiveContainer/ResponsiveContainer.js +1 -0
- package/lib-commonjs/components/ResponsiveContainer/ResponsiveContainer.js.map +1 -1
- package/lib-commonjs/components/ResponsiveContainer/useResponsiveChildStyles.styles.js +1 -0
- package/lib-commonjs/components/ResponsiveContainer/useResponsiveChildStyles.styles.js.map +1 -1
- package/lib-commonjs/components/ResponsiveContainer/useResponsiveChildStyles.styles.raw.js +1 -0
- package/lib-commonjs/components/ResponsiveContainer/useResponsiveChildStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/ResponsiveContainer/withResponsiveContainer.js +2 -1
- package/lib-commonjs/components/ResponsiveContainer/withResponsiveContainer.js.map +1 -1
- package/lib-commonjs/components/SankeyChart/SankeyChart.js +1 -0
- package/lib-commonjs/components/SankeyChart/SankeyChart.js.map +1 -1
- package/lib-commonjs/components/SankeyChart/useSankeyChartStyles.styles.js +24 -33
- package/lib-commonjs/components/SankeyChart/useSankeyChartStyles.styles.js.map +1 -1
- package/lib-commonjs/components/SankeyChart/useSankeyChartStyles.styles.raw.js +2 -12
- package/lib-commonjs/components/SankeyChart/useSankeyChartStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/ScatterChart/ScatterChart.js +118 -78
- package/lib-commonjs/components/ScatterChart/ScatterChart.js.map +1 -1
- package/lib-commonjs/components/ScatterChart/ScatterChart.types.js.map +1 -1
- package/lib-commonjs/components/ScatterChart/useScatterChartStyles.styles.js +14 -7
- package/lib-commonjs/components/ScatterChart/useScatterChartStyles.styles.js.map +1 -1
- package/lib-commonjs/components/ScatterChart/useScatterChartStyles.styles.raw.js +3 -20
- package/lib-commonjs/components/ScatterChart/useScatterChartStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/Sparkline/Sparkline.js +1 -0
- package/lib-commonjs/components/Sparkline/Sparkline.js.map +1 -1
- package/lib-commonjs/components/Sparkline/useSparklineStyles.styles.js +1 -0
- package/lib-commonjs/components/Sparkline/useSparklineStyles.styles.js.map +1 -1
- package/lib-commonjs/components/Sparkline/useSparklineStyles.styles.raw.js +1 -0
- package/lib-commonjs/components/Sparkline/useSparklineStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.js +16 -11
- package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.js.map +1 -1
- package/lib-commonjs/components/VerticalBarChart/useVerticalBarChartStyles.styles.js +6 -3
- package/lib-commonjs/components/VerticalBarChart/useVerticalBarChartStyles.styles.js.map +1 -1
- package/lib-commonjs/components/VerticalBarChart/useVerticalBarChartStyles.styles.raw.js +4 -17
- package/lib-commonjs/components/VerticalBarChart/useVerticalBarChartStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.js +29 -24
- package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.js.map +1 -1
- package/lib-commonjs/components/VerticalStackedBarChart/useVerticalStackedBarChartStyles.styles.js +6 -3
- package/lib-commonjs/components/VerticalStackedBarChart/useVerticalStackedBarChartStyles.styles.js.map +1 -1
- package/lib-commonjs/components/VerticalStackedBarChart/useVerticalStackedBarChartStyles.styles.raw.js +4 -18
- package/lib-commonjs/components/VerticalStackedBarChart/useVerticalStackedBarChartStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/types/DataPoint.js +3 -1
- package/lib-commonjs/types/DataPoint.js.map +1 -1
- package/lib-commonjs/utilities/Common.styles.js +71 -0
- package/lib-commonjs/utilities/Common.styles.js.map +1 -0
- package/lib-commonjs/utilities/Common.styles.raw.js +71 -0
- package/lib-commonjs/utilities/Common.styles.raw.js.map +1 -0
- package/lib-commonjs/utilities/FocusableTooltipText.js +2 -1
- package/lib-commonjs/utilities/FocusableTooltipText.js.map +1 -1
- package/lib-commonjs/utilities/SVGTooltipText.js +1 -0
- package/lib-commonjs/utilities/SVGTooltipText.js.map +1 -1
- package/lib-commonjs/utilities/image-export-utils.js +1 -0
- package/lib-commonjs/utilities/image-export-utils.js.map +1 -1
- package/lib-commonjs/utilities/index.js +1 -0
- package/lib-commonjs/utilities/index.js.map +1 -1
- package/lib-commonjs/utilities/scatterpolar-utils.js +67 -0
- package/lib-commonjs/utilities/scatterpolar-utils.js.map +1 -0
- package/lib-commonjs/utilities/utilities.js +327 -137
- package/lib-commonjs/utilities/utilities.js.map +1 -1
- package/lib-commonjs/utilities/vbc-utils.js.map +1 -1
- package/package.json +10 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/FunnelChart/FunnelChart.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useId } from '@fluentui/react-utilities';\nimport type { JSXElement } from '@fluentui/react-utilities';\nimport { useRtl } from '../../utilities/index';\nimport { FunnelChartDataPoint, FunnelChartProps } from './FunnelChart.types';\nimport { Legend, Legends, LegendContainer } from '../Legends/index';\nimport { useFocusableGroup } from '@fluentui/react-tabster';\nimport { ChartPopover } from '../CommonComponents/ChartPopover';\nimport { formatToLocaleString } from '@fluentui/chart-utilities';\nimport { getContrastTextColor } from '../../utilities/colors';\nimport { useFunnelChartStyles } from './useFunnelChartStyles.styles';\nimport {\n getHorizontalFunnelSegmentGeometry,\n getVerticalFunnelSegmentGeometry,\n getSegmentTextProps,\n getStackedHorizontalFunnelSegmentGeometry,\n getStackedVerticalFunnelSegmentGeometry,\n} from './funnelGeometry';\nimport { ChartPopoverProps, ImageExportOptions } from '../../index';\nimport { toImage } from '../../utilities/image-export-utils';\n\nexport const FunnelChart: React.FunctionComponent<FunnelChartProps> = React.forwardRef<\n HTMLDivElement,\n FunnelChartProps\n>((props, forwardedRef) => {\n const _emptyChartId: string = useId('_FunnelChart_empty');\n const isRTL = useRtl();\n\n const [hoveredStage, setHoveredStage] = React.useState<string | null>(null);\n const [calloutData, setCalloutData] = React.useState<FunnelChartDataPoint | null>(null);\n const [selectedLegends, setSelectedLegends] = React.useState<string[]>([]);\n const [clickPosition, setClickPosition] = React.useState({ x: 0, y: 0 });\n const [isPopoverOpen, setPopoverOpen] = React.useState(false);\n const chartContainerRef = React.useRef<HTMLDivElement | null>(null);\n const isStacked = isStackedFunnelData(props.data);\n const _legendsRef = React.useRef<LegendContainer>(null);\n\n React.useEffect(() => {\n if (props.legendProps?.selectedLegends) {\n setSelectedLegends(props.legendProps.selectedLegends);\n }\n }, [props.legendProps?.selectedLegends]);\n\n React.useImperativeHandle(\n props.componentRef,\n () => ({\n toImage: (opts?: ImageExportOptions): Promise<string> => {\n return toImage(chartContainerRef.current, _legendsRef.current?.toSVG, isRTL, opts);\n },\n }),\n [],\n );\n\n function _handleHover(data: FunnelChartDataPoint, mouseEvent: React.MouseEvent<SVGElement>) {\n mouseEvent?.persist();\n updatePosition(mouseEvent.clientX, mouseEvent.clientY);\n setCalloutData(data);\n setPopoverOpen(true);\n }\n\n function _handleFocus(data: FunnelChartDataPoint, focusEvent: React.FocusEvent<SVGPathElement>) {\n focusEvent?.persist();\n let x = 0;\n let y = 0;\n const targetRect = (focusEvent.target as SVGPathElement).getBoundingClientRect();\n x = targetRect.left + targetRect.width / 2;\n y = targetRect.top + targetRect.height / 2;\n\n updatePosition(x, y);\n setCalloutData(data);\n setPopoverOpen(true);\n }\n\n function _handleStackedHover(\n stage: string,\n subValue: { category: string; value: number; color: string },\n mouseEvent: React.MouseEvent<SVGElement>,\n ) {\n mouseEvent?.persist();\n updatePosition(mouseEvent.clientX, mouseEvent.clientY);\n setCalloutData({\n stage,\n value: subValue.value,\n color: subValue.color,\n category: subValue.category,\n } as FunnelChartDataPoint);\n setPopoverOpen(true);\n }\n\n function _handleStackedFocus(\n stage: string,\n subValue: { category: string; value: number; color: string },\n focusEvent: React.FocusEvent<SVGPathElement>,\n ) {\n focusEvent?.persist();\n let x = 0;\n let y = 0;\n const targetRect = (focusEvent.target as SVGPathElement).getBoundingClientRect();\n x = targetRect.left + targetRect.width / 2;\n y = targetRect.top + targetRect.height / 2;\n\n updatePosition(x, y);\n setCalloutData({\n stage,\n value: subValue.value,\n color: subValue.color,\n category: subValue.category,\n } as FunnelChartDataPoint);\n setPopoverOpen(true);\n }\n\n function _handleMouseOut() {\n setHoveredStage(null);\n setPopoverOpen(false);\n setCalloutData(null);\n }\n\n function _onLegendSelectionChange(\n legendsSelected: string[],\n event: React.MouseEvent<HTMLButtonElement>,\n currentLegend?: Legend,\n ): void {\n if (props.legendProps?.canSelectMultipleLegends) {\n setSelectedLegends(legendsSelected);\n } else {\n setSelectedLegends(legendsSelected.slice(-1));\n }\n\n if (props.legendProps?.onChange) {\n props.legendProps.onChange(legendsSelected, event, currentLegend);\n }\n }\n\n const _onLegendSelectionChangeCallback = React.useCallback(_onLegendSelectionChange, [props.legendProps]);\n\n function getHighlightedLegend(): string[] {\n return selectedLegends.length > 0 ? selectedLegends : hoveredStage ? [hoveredStage] : [];\n }\n\n function legendHighlighted(legend: string): boolean {\n return getHighlightedLegend().includes(legend);\n }\n\n function noLegendHighlighted(): boolean {\n return getHighlightedLegend().length === 0;\n }\n\n function _getEventHandlerProps(\n data: FunnelChartDataPoint | { stage: string; subValue: { category: string; value: number; color: string } },\n opacity?: number,\n ) {\n if ('subValue' in data) {\n return {\n culture: props.culture,\n onMouseOver:\n opacity == 1\n ? (event: React.MouseEvent<SVGElement>) => _handleStackedHover(data.stage, data.subValue, event)\n : undefined,\n onMouseMove:\n opacity == 1\n ? (event: React.MouseEvent<SVGElement>) => _handleStackedHover(data.stage, data.subValue, event)\n : undefined,\n onFocus: (event: React.FocusEvent<SVGPathElement>) => _handleStackedFocus(data.stage, data.subValue, event),\n onBlur: () => _handleMouseOut(),\n onMouseOut: () => _handleMouseOut(),\n };\n } else {\n return {\n culture: props.culture,\n onMouseOver: opacity == 1 ? (event: React.MouseEvent<SVGElement>) => _handleHover(data, event) : undefined,\n onMouseMove: opacity == 1 ? (event: React.MouseEvent<SVGElement>) => _handleHover(data, event) : undefined,\n onFocus: (event: React.FocusEvent<SVGPathElement>) => _handleFocus(data, event),\n onBlur: () => _handleMouseOut(),\n onMouseOut: () => _handleMouseOut(),\n };\n }\n }\n\n function _renderSegmentText({\n show,\n x,\n y,\n value,\n textColor,\n }: {\n show: boolean;\n x: number;\n y: number;\n value: number;\n textColor: string;\n }) {\n if (!show) {\n return null;\n }\n\n const textElement = (\n <text x={isRTL ? funnelWidth - x : x} y={y} textAnchor=\"middle\" alignmentBaseline=\"middle\" fill={textColor}>\n {formatToLocaleString(value.toString(), props.culture) as React.ReactNode}\n </text>\n );\n\n if (isRTL) {\n return <g transform={`scale(-1,1) translate(${-funnelWidth},0)`}>{textElement}</g>;\n }\n return textElement;\n }\n\n function _renderFunnelSegment({\n key,\n pathD,\n fill,\n opacity,\n textProps,\n data,\n tabIndex,\n }: {\n key: string | number;\n pathD: string;\n fill: string;\n opacity: number;\n textProps?: {\n show: boolean;\n x: number;\n y: number;\n value: number;\n };\n data: FunnelChartDataPoint | { stage: string; subValue: { category: string; value: number; color: string } };\n tabIndex?: number;\n }) {\n const eventHandlers = _getEventHandlerProps(data, opacity);\n const textColor = getContrastTextColor(fill);\n\n return (\n <g key={key}>\n <path d={pathD} fill={fill} opacity={opacity} {...eventHandlers} tabIndex={tabIndex} />\n {textProps && <g {...eventHandlers}>{_renderSegmentText({ ...textProps, textColor })}</g>}\n </g>\n );\n }\n\n function _createFunnel(\n containerHeight: number,\n containerWidth: number,\n ): // eslint-disable-next-line @typescript-eslint/no-deprecated\n JSXElement[] {\n const { data } = props;\n const funnelWidth = containerWidth;\n const funnelHeight = containerHeight * 0.8;\n\n return data.map((d, i) => {\n const geometryProps =\n props.orientation === 'vertical'\n ? getVerticalFunnelSegmentGeometry({ d, i, data, funnelWidth, funnelHeight, isRTL })\n : getHorizontalFunnelSegmentGeometry({ d, i, data, funnelWidth, funnelHeight, isRTL });\n\n const { pathD, textX, textY, availableWidth } = geometryProps;\n const minTextWidth = 16;\n const eventHandlerProps = _getEventHandlerProps(d);\n const textProps = getSegmentTextProps({\n availableWidth,\n minTextWidth,\n textX,\n textY,\n value: d.value!,\n ...eventHandlerProps,\n });\n\n return _renderFunnelSegment({\n key: i,\n pathD,\n fill: d.color!,\n opacity: legendHighlighted(d.stage as string) || noLegendHighlighted() ? 1 : 0.1,\n textProps,\n data: d,\n tabIndex: legendHighlighted(d.stage as string) || noLegendHighlighted() ? 0 : undefined,\n });\n });\n }\n\n function isStackedFunnelData(data: FunnelChartDataPoint[]): boolean {\n return Array.isArray(data) && data.every(stage => Array.isArray(stage.subValues));\n }\n\n function _renderStackedSegment(\n stage: FunnelChartDataPoint,\n subValue: { value: number; color: string; category: string },\n stageIndex: number,\n subValueIndex: number,\n geometryParams: {\n stages: FunnelChartDataPoint[];\n totals: number[];\n maxTotal: number;\n funnelWidth: number;\n funnelHeight: number;\n isRTL: boolean;\n },\n ): // eslint-disable-next-line @typescript-eslint/no-deprecated\n JSXElement {\n // Ensure stages have subValues for geometry functions\n const stagesWithSubValues = geometryParams.stages.map(s => ({\n ...s,\n subValues: s.subValues || [],\n }));\n const geom =\n props.orientation === 'vertical'\n ? getStackedVerticalFunnelSegmentGeometry({\n ...geometryParams,\n stages: stagesWithSubValues,\n i: stageIndex,\n k: subValueIndex,\n })\n : getStackedHorizontalFunnelSegmentGeometry({\n ...geometryParams,\n stages: stagesWithSubValues,\n i: stageIndex,\n k: subValueIndex,\n });\n\n const minTextWidth = 16;\n const eventHandlerProps = _getEventHandlerProps({ stage: stage.stage as string, subValue });\n const textProps = getSegmentTextProps({\n availableWidth: geom.availableWidth,\n minTextWidth,\n textX: geom.textX,\n textY: geom.textY,\n value: subValue.value,\n ...eventHandlerProps,\n });\n\n return _renderFunnelSegment({\n key: `${stageIndex}-${subValueIndex}`,\n pathD: geom.pathD,\n fill: subValue.color,\n opacity:\n (isStackedFunnelData(props.data) && legendHighlighted(subValue.category)) || noLegendHighlighted() ? 1 : 0.1,\n textProps,\n data: { stage: stage.stage as string, subValue },\n tabIndex: legendHighlighted(subValue.category) || noLegendHighlighted() ? 0 : undefined,\n });\n }\n\n function _createStackedFunnel(\n containerHeight: number,\n containerWidth: number,\n ): // eslint-disable-next-line @typescript-eslint/no-deprecated\n JSXElement[] {\n const { data } = props;\n\n const stages = data;\n const totals = stages.map(s => s?.subValues?.reduce((sum, subValue) => sum + subValue.value, 0) ?? 0);\n const maxTotal = Math.max(...totals);\n\n const funnelWidth = containerWidth;\n const funnelHeight = containerHeight * 0.8;\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const paths: JSXElement[] = [];\n\n const geometryParams = {\n stages,\n totals,\n maxTotal,\n funnelWidth,\n funnelHeight,\n isRTL,\n };\n\n for (let i = 0; i < stages.length; i++) {\n const cur = stages[i];\n for (let k = 0; k < (cur.subValues ?? []).length; k++) {\n const v = cur.subValues?.[k];\n if (!v) {\n continue;\n }\n paths.push(_renderStackedSegment(cur, v, i, k, geometryParams));\n }\n }\n return paths;\n }\n\n function _renderLegends(): // eslint-disable-next-line @typescript-eslint/no-deprecated\n JSXElement {\n if (props.hideLegend) {\n return <></>;\n }\n let legends: Legend[];\n\n if (isStacked) {\n // Collect unique categories and their color\n const categoryMap: Record<string, string> = {};\n props.data.forEach((stage: FunnelChartDataPoint) => {\n (stage.subValues || []).forEach(sub => {\n if (!(sub.category in categoryMap)) {\n categoryMap[sub.category] = sub.color;\n }\n });\n });\n legends = Object.entries(categoryMap).map(([category, color]) => ({\n title: category,\n color,\n hoverAction: () => setHoveredStage(category),\n onMouseOutAction: () => setHoveredStage(null),\n }));\n } else {\n legends = props.data.map((d: FunnelChartDataPoint) => ({\n title: d.stage as string,\n color: d.color!,\n hoverAction: () => setHoveredStage(d.stage as string),\n onMouseOutAction: () => setHoveredStage(null),\n }));\n }\n\n return (\n <div style={{ display: 'flex', justifyContent: 'center' }}>\n <Legends\n legends={legends}\n centerLegends={true}\n onChange={_onLegendSelectionChangeCallback}\n {...props.legendProps}\n legendRef={_legendsRef}\n />\n </div>\n );\n }\n\n function _isChartEmpty(): boolean {\n return !(props.data && props.data.length > 0);\n }\n\n function updatePosition(newX: number, newY: number) {\n const threshold = 1; // Set a threshold for movement\n const { x, y } = clickPosition;\n // Calculate the distance moved\n const distance = Math.sqrt(Math.pow(newX - x, 2) + Math.pow(newY - y, 2));\n // Update the position only if the distance moved is greater than the threshold\n if (distance > threshold) {\n setClickPosition({ x: newX, y: newY });\n setPopoverOpen(true);\n }\n }\n\n const classes = useFunnelChartStyles(props);\n\n const calloutProps: ChartPopoverProps = {\n ...props.calloutProps,\n color: calloutData?.color,\n hoverXValue: calloutData?.stage,\n YValue: calloutData?.value,\n };\n\n const width = props.width || 350;\n const height = props.height || 500;\n\n const funnelMarginTop = 40;\n const funnelWidth = width * 0.8;\n const funnelOffsetX = (width - funnelWidth) / 2;\n const focusAttributes = useFocusableGroup();\n\n return !_isChartEmpty() ? (\n <div ref={chartContainerRef} className={classes.root} {...focusAttributes}>\n <svg width={width} height={height} className={classes.chart} role={'img'} aria-label={props.chartTitle}>\n <g\n transform={\n isRTL\n ? `translate(${funnelOffsetX + funnelWidth}, ${funnelMarginTop}) scale(-1,1)`\n : `translate(${funnelOffsetX}, ${funnelMarginTop})`\n }\n >\n {isStacked\n ? _createStackedFunnel(height - funnelMarginTop, funnelWidth)\n : _createFunnel(height - funnelMarginTop, funnelWidth)}\n </g>\n </svg>\n {isPopoverOpen && (\n <ChartPopover\n {...props.calloutProps}\n XValue={calloutProps?.hoverXValue as string}\n yCalloutValue={calloutProps?.YValue as string}\n culture={props.culture ?? 'en-us'}\n clickPosition={clickPosition}\n isPopoverOpen={isPopoverOpen}\n color={calloutProps?.color}\n isCartesian={false}\n />\n )}\n {_renderLegends()}\n </div>\n ) : (\n <div id={_emptyChartId} role={'alert'} style={{ opacity: '0' }} aria-label={'Graph has no data to display'} />\n );\n});\nFunnelChart.displayName = 'FunnelChart';\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nFunnelChart.defaultProps = {\n orientation: 'vertical',\n};\n"],"names":["React","useId","useRtl","Legends","useFocusableGroup","ChartPopover","formatToLocaleString","getContrastTextColor","useFunnelChartStyles","getHorizontalFunnelSegmentGeometry","getVerticalFunnelSegmentGeometry","getSegmentTextProps","getStackedHorizontalFunnelSegmentGeometry","getStackedVerticalFunnelSegmentGeometry","toImage","FunnelChart","forwardRef","props","forwardedRef","_emptyChartId","isRTL","hoveredStage","setHoveredStage","useState","calloutData","setCalloutData","selectedLegends","setSelectedLegends","clickPosition","setClickPosition","x","y","isPopoverOpen","setPopoverOpen","chartContainerRef","useRef","isStacked","isStackedFunnelData","data","_legendsRef","useEffect","legendProps","useImperativeHandle","componentRef","opts","current","toSVG","_handleHover","mouseEvent","persist","updatePosition","clientX","clientY","_handleFocus","focusEvent","targetRect","target","getBoundingClientRect","left","width","top","height","_handleStackedHover","stage","subValue","value","color","category","_handleStackedFocus","_handleMouseOut","_onLegendSelectionChange","legendsSelected","event","currentLegend","canSelectMultipleLegends","slice","onChange","_onLegendSelectionChangeCallback","useCallback","getHighlightedLegend","length","legendHighlighted","legend","includes","noLegendHighlighted","_getEventHandlerProps","opacity","culture","onMouseOver","undefined","onMouseMove","onFocus","onBlur","onMouseOut","_renderSegmentText","show","textColor","textElement","text","funnelWidth","textAnchor","alignmentBaseline","fill","toString","g","transform","_renderFunnelSegment","key","pathD","textProps","tabIndex","eventHandlers","path","d","_createFunnel","containerHeight","containerWidth","funnelHeight","map","i","geometryProps","orientation","textX","textY","availableWidth","minTextWidth","eventHandlerProps","Array","isArray","every","subValues","_renderStackedSegment","stageIndex","subValueIndex","geometryParams","stagesWithSubValues","stages","s","geom","k","_createStackedFunnel","totals","reduce","sum","maxTotal","Math","max","paths","cur","v","push","_renderLegends","hideLegend","legends","categoryMap","forEach","sub","Object","entries","title","hoverAction","onMouseOutAction","div","style","display","justifyContent","centerLegends","legendRef","_isChartEmpty","newX","newY","threshold","distance","sqrt","pow","classes","calloutProps","hoverXValue","YValue","funnelMarginTop","funnelOffsetX","focusAttributes","ref","className","root","svg","chart","role","aria-label","chartTitle","XValue","yCalloutValue","isCartesian","id","displayName","defaultProps"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../src/components/FunnelChart/FunnelChart.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { useId } from '@fluentui/react-utilities';\nimport type { JSXElement } from '@fluentui/react-utilities';\nimport { useRtl } from '../../utilities/index';\nimport { FunnelChartDataPoint, FunnelChartProps } from './FunnelChart.types';\nimport { Legend, Legends, LegendContainer } from '../Legends/index';\nimport { useFocusableGroup } from '@fluentui/react-tabster';\nimport { ChartPopover } from '../CommonComponents/ChartPopover';\nimport { formatToLocaleString } from '@fluentui/chart-utilities';\nimport { getContrastTextColor } from '../../utilities/colors';\nimport { useFunnelChartStyles } from './useFunnelChartStyles.styles';\nimport {\n getHorizontalFunnelSegmentGeometry,\n getVerticalFunnelSegmentGeometry,\n getSegmentTextProps,\n getStackedHorizontalFunnelSegmentGeometry,\n getStackedVerticalFunnelSegmentGeometry,\n} from './funnelGeometry';\nimport { ChartPopoverProps, ImageExportOptions } from '../../index';\nimport { toImage } from '../../utilities/image-export-utils';\n\nexport const FunnelChart: React.FunctionComponent<FunnelChartProps> = React.forwardRef<\n HTMLDivElement,\n FunnelChartProps\n>((props, forwardedRef) => {\n const _emptyChartId: string = useId('_FunnelChart_empty');\n const isRTL = useRtl();\n\n const [hoveredStage, setHoveredStage] = React.useState<string | null>(null);\n const [calloutData, setCalloutData] = React.useState<FunnelChartDataPoint | null>(null);\n const [selectedLegends, setSelectedLegends] = React.useState<string[]>([]);\n const [clickPosition, setClickPosition] = React.useState({ x: 0, y: 0 });\n const [isPopoverOpen, setPopoverOpen] = React.useState(false);\n const chartContainerRef = React.useRef<HTMLDivElement | null>(null);\n const isStacked = isStackedFunnelData(props.data);\n const _legendsRef = React.useRef<LegendContainer>(null);\n\n React.useEffect(() => {\n if (props.legendProps?.selectedLegends) {\n setSelectedLegends(props.legendProps.selectedLegends);\n }\n }, [props.legendProps?.selectedLegends]);\n\n React.useImperativeHandle(\n props.componentRef,\n () => ({\n toImage: (opts?: ImageExportOptions): Promise<string> => {\n return toImage(chartContainerRef.current, _legendsRef.current?.toSVG, isRTL, opts);\n },\n }),\n [],\n );\n\n function _handleHover(data: FunnelChartDataPoint, mouseEvent: React.MouseEvent<SVGElement>) {\n mouseEvent?.persist();\n updatePosition(mouseEvent.clientX, mouseEvent.clientY);\n setCalloutData(data);\n setPopoverOpen(true);\n }\n\n function _handleFocus(data: FunnelChartDataPoint, focusEvent: React.FocusEvent<SVGPathElement>) {\n focusEvent?.persist();\n let x = 0;\n let y = 0;\n const targetRect = (focusEvent.target as SVGPathElement).getBoundingClientRect();\n x = targetRect.left + targetRect.width / 2;\n y = targetRect.top + targetRect.height / 2;\n\n updatePosition(x, y);\n setCalloutData(data);\n setPopoverOpen(true);\n }\n\n function _handleStackedHover(\n stage: string,\n subValue: { category: string; value: number; color: string },\n mouseEvent: React.MouseEvent<SVGElement>,\n ) {\n mouseEvent?.persist();\n updatePosition(mouseEvent.clientX, mouseEvent.clientY);\n setCalloutData({\n stage,\n value: subValue.value,\n color: subValue.color,\n category: subValue.category,\n } as FunnelChartDataPoint);\n setPopoverOpen(true);\n }\n\n function _handleStackedFocus(\n stage: string,\n subValue: { category: string; value: number; color: string },\n focusEvent: React.FocusEvent<SVGPathElement>,\n ) {\n focusEvent?.persist();\n let x = 0;\n let y = 0;\n const targetRect = (focusEvent.target as SVGPathElement).getBoundingClientRect();\n x = targetRect.left + targetRect.width / 2;\n y = targetRect.top + targetRect.height / 2;\n\n updatePosition(x, y);\n setCalloutData({\n stage,\n value: subValue.value,\n color: subValue.color,\n category: subValue.category,\n } as FunnelChartDataPoint);\n setPopoverOpen(true);\n }\n\n function _handleMouseOut() {\n setHoveredStage(null);\n setPopoverOpen(false);\n setCalloutData(null);\n }\n\n function _onLegendSelectionChange(\n legendsSelected: string[],\n event: React.MouseEvent<HTMLButtonElement>,\n currentLegend?: Legend,\n ): void {\n if (props.legendProps?.canSelectMultipleLegends) {\n setSelectedLegends(legendsSelected);\n } else {\n setSelectedLegends(legendsSelected.slice(-1));\n }\n\n if (props.legendProps?.onChange) {\n props.legendProps.onChange(legendsSelected, event, currentLegend);\n }\n }\n\n const _onLegendSelectionChangeCallback = React.useCallback(_onLegendSelectionChange, [props.legendProps]);\n\n function getHighlightedLegend(): string[] {\n return selectedLegends.length > 0 ? selectedLegends : hoveredStage ? [hoveredStage] : [];\n }\n\n function legendHighlighted(legend: string): boolean {\n return getHighlightedLegend().includes(legend);\n }\n\n function noLegendHighlighted(): boolean {\n return getHighlightedLegend().length === 0;\n }\n\n function _getEventHandlerProps(\n data: FunnelChartDataPoint | { stage: string; subValue: { category: string; value: number; color: string } },\n opacity?: number,\n ) {\n if ('subValue' in data) {\n return {\n culture: props.culture,\n onMouseOver:\n opacity == 1\n ? (event: React.MouseEvent<SVGElement>) => _handleStackedHover(data.stage, data.subValue, event)\n : undefined,\n onMouseMove:\n opacity == 1\n ? (event: React.MouseEvent<SVGElement>) => _handleStackedHover(data.stage, data.subValue, event)\n : undefined,\n onFocus: (event: React.FocusEvent<SVGPathElement>) => _handleStackedFocus(data.stage, data.subValue, event),\n onBlur: () => _handleMouseOut(),\n onMouseOut: () => _handleMouseOut(),\n };\n } else {\n return {\n culture: props.culture,\n onMouseOver: opacity == 1 ? (event: React.MouseEvent<SVGElement>) => _handleHover(data, event) : undefined,\n onMouseMove: opacity == 1 ? (event: React.MouseEvent<SVGElement>) => _handleHover(data, event) : undefined,\n onFocus: (event: React.FocusEvent<SVGPathElement>) => _handleFocus(data, event),\n onBlur: () => _handleMouseOut(),\n onMouseOut: () => _handleMouseOut(),\n };\n }\n }\n\n function _renderSegmentText({\n show,\n x,\n y,\n value,\n textColor,\n opacity,\n }: {\n show: boolean;\n x: number;\n y: number;\n value: number;\n textColor: string;\n opacity: number;\n }) {\n if (!show) {\n return null;\n }\n\n const textElement = (\n <text\n x={isRTL ? funnelWidth - x : x}\n y={y}\n opacity={opacity}\n textAnchor=\"middle\"\n alignmentBaseline=\"middle\"\n fill={textColor}\n >\n {formatToLocaleString(value.toString(), props.culture) as React.ReactNode}\n </text>\n );\n\n if (isRTL) {\n return <g transform={`scale(-1,1) translate(${-funnelWidth},0)`}>{textElement}</g>;\n }\n return textElement;\n }\n\n function _renderFunnelSegment({\n key,\n pathD,\n fill,\n opacity,\n textProps,\n data,\n tabIndex,\n }: {\n key: string | number;\n pathD: string;\n fill: string;\n opacity: number;\n textProps?: {\n show: boolean;\n x: number;\n y: number;\n value: number;\n };\n data: FunnelChartDataPoint | { stage: string; subValue: { category: string; value: number; color: string } };\n tabIndex?: number;\n }) {\n const eventHandlers = _getEventHandlerProps(data, opacity);\n const textColor = getContrastTextColor(fill);\n\n return (\n <g key={key}>\n <path d={pathD} fill={fill} opacity={opacity} {...eventHandlers} tabIndex={tabIndex} />\n {textProps && <g {...eventHandlers}>{_renderSegmentText({ ...textProps, textColor, opacity })}</g>}\n </g>\n );\n }\n\n function _createFunnel(\n containerHeight: number,\n containerWidth: number,\n ): // eslint-disable-next-line @typescript-eslint/no-deprecated\n JSXElement[] {\n const { data } = props;\n const funnelWidth = containerWidth;\n const funnelHeight = containerHeight * 0.8;\n\n return data.map((d, i) => {\n const geometryProps =\n props.orientation === 'vertical'\n ? getVerticalFunnelSegmentGeometry({ d, i, data, funnelWidth, funnelHeight, isRTL })\n : getHorizontalFunnelSegmentGeometry({ d, i, data, funnelWidth, funnelHeight, isRTL });\n\n const { pathD, textX, textY, availableWidth } = geometryProps;\n const minTextWidth = 16;\n const eventHandlerProps = _getEventHandlerProps(d);\n const textProps = getSegmentTextProps({\n availableWidth,\n minTextWidth,\n textX,\n textY,\n value: d.value!,\n ...eventHandlerProps,\n });\n\n return _renderFunnelSegment({\n key: i,\n pathD,\n fill: d.color!,\n opacity: legendHighlighted(d.stage as string) || noLegendHighlighted() ? 1 : 0.1,\n textProps,\n data: d,\n tabIndex: legendHighlighted(d.stage as string) || noLegendHighlighted() ? 0 : undefined,\n });\n });\n }\n\n function isStackedFunnelData(data: FunnelChartDataPoint[]): boolean {\n return Array.isArray(data) && data.every(stage => Array.isArray(stage.subValues));\n }\n\n function _renderStackedSegment(\n stage: FunnelChartDataPoint,\n subValue: { value: number; color: string; category: string },\n stageIndex: number,\n subValueIndex: number,\n geometryParams: {\n stages: FunnelChartDataPoint[];\n totals: number[];\n maxTotal: number;\n funnelWidth: number;\n funnelHeight: number;\n isRTL: boolean;\n },\n ): // eslint-disable-next-line @typescript-eslint/no-deprecated\n JSXElement {\n // Ensure stages have subValues for geometry functions\n const stagesWithSubValues = geometryParams.stages.map(s => ({\n ...s,\n subValues: s.subValues || [],\n }));\n const geom =\n props.orientation === 'vertical'\n ? getStackedVerticalFunnelSegmentGeometry({\n ...geometryParams,\n stages: stagesWithSubValues,\n i: stageIndex,\n k: subValueIndex,\n })\n : getStackedHorizontalFunnelSegmentGeometry({\n ...geometryParams,\n stages: stagesWithSubValues,\n i: stageIndex,\n k: subValueIndex,\n });\n\n const minTextWidth = 16;\n const eventHandlerProps = _getEventHandlerProps({ stage: stage.stage as string, subValue });\n const textProps = getSegmentTextProps({\n availableWidth: geom.availableWidth,\n minTextWidth,\n textX: geom.textX,\n textY: geom.textY,\n value: subValue.value,\n ...eventHandlerProps,\n });\n\n return _renderFunnelSegment({\n key: `${stageIndex}-${subValueIndex}`,\n pathD: geom.pathD,\n fill: subValue.color,\n opacity:\n (isStackedFunnelData(props.data) && legendHighlighted(subValue.category)) || noLegendHighlighted() ? 1 : 0.1,\n textProps,\n data: { stage: stage.stage as string, subValue },\n tabIndex: legendHighlighted(subValue.category) || noLegendHighlighted() ? 0 : undefined,\n });\n }\n\n function _createStackedFunnel(\n containerHeight: number,\n containerWidth: number,\n ): // eslint-disable-next-line @typescript-eslint/no-deprecated\n JSXElement[] {\n const { data } = props;\n\n const stages = data;\n const totals = stages.map(s => s?.subValues?.reduce((sum, subValue) => sum + subValue.value, 0) ?? 0);\n const maxTotal = Math.max(...totals);\n\n const funnelWidth = containerWidth;\n const funnelHeight = containerHeight * 0.8;\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const paths: JSXElement[] = [];\n\n const geometryParams = {\n stages,\n totals,\n maxTotal,\n funnelWidth,\n funnelHeight,\n isRTL,\n };\n\n for (let i = 0; i < stages.length; i++) {\n const cur = stages[i];\n for (let k = 0; k < (cur.subValues ?? []).length; k++) {\n const v = cur.subValues?.[k];\n if (!v) {\n continue;\n }\n paths.push(_renderStackedSegment(cur, v, i, k, geometryParams));\n }\n }\n return paths;\n }\n\n function _renderLegends(): // eslint-disable-next-line @typescript-eslint/no-deprecated\n JSXElement {\n if (props.hideLegend) {\n return <></>;\n }\n let legends: Legend[];\n\n if (isStacked) {\n // Collect unique categories and their color\n const categoryMap: Record<string, string> = {};\n props.data.forEach((stage: FunnelChartDataPoint) => {\n (stage.subValues || []).forEach(sub => {\n if (!(sub.category in categoryMap)) {\n categoryMap[sub.category] = sub.color;\n }\n });\n });\n legends = Object.entries(categoryMap).map(([category, color]) => ({\n title: category,\n color,\n hoverAction: () => setHoveredStage(category),\n onMouseOutAction: () => setHoveredStage(null),\n }));\n } else {\n legends = props.data.map((d: FunnelChartDataPoint) => ({\n title: d.stage as string,\n color: d.color!,\n hoverAction: () => setHoveredStage(d.stage as string),\n onMouseOutAction: () => setHoveredStage(null),\n }));\n }\n\n return (\n <div style={{ display: 'flex', justifyContent: 'center' }}>\n <Legends\n legends={legends}\n centerLegends={true}\n onChange={_onLegendSelectionChangeCallback}\n {...props.legendProps}\n legendRef={_legendsRef}\n />\n </div>\n );\n }\n\n function _isChartEmpty(): boolean {\n return !(props.data && props.data.length > 0);\n }\n\n function updatePosition(newX: number, newY: number) {\n const threshold = 1; // Set a threshold for movement\n const { x, y } = clickPosition;\n // Calculate the distance moved\n const distance = Math.sqrt(Math.pow(newX - x, 2) + Math.pow(newY - y, 2));\n // Update the position only if the distance moved is greater than the threshold\n if (distance > threshold) {\n setClickPosition({ x: newX, y: newY });\n setPopoverOpen(true);\n }\n }\n\n const classes = useFunnelChartStyles(props);\n\n const calloutProps: ChartPopoverProps = {\n ...props.calloutProps,\n color: calloutData?.color,\n hoverXValue: calloutData?.stage,\n YValue: calloutData?.value,\n };\n\n const width = props.width || 350;\n const height = props.height || 500;\n\n const funnelMarginTop = 40;\n const funnelWidth = width * 0.8;\n const funnelOffsetX = (width - funnelWidth) / 2;\n const focusAttributes = useFocusableGroup();\n\n return !_isChartEmpty() ? (\n <div ref={chartContainerRef} className={classes.root} {...focusAttributes} style={{ width, height }}>\n <svg width={width} height={height} className={classes.chart} role={'img'} aria-label={props.chartTitle}>\n <g\n transform={\n isRTL\n ? `translate(${funnelOffsetX + funnelWidth}, ${funnelMarginTop}) scale(-1,1)`\n : `translate(${funnelOffsetX}, ${funnelMarginTop})`\n }\n >\n {isStacked\n ? _createStackedFunnel(height - funnelMarginTop, funnelWidth)\n : _createFunnel(height - funnelMarginTop, funnelWidth)}\n </g>\n </svg>\n {isPopoverOpen && (\n <ChartPopover\n {...props.calloutProps}\n XValue={calloutProps?.hoverXValue as string}\n yCalloutValue={calloutProps?.YValue as string}\n culture={props.culture}\n clickPosition={clickPosition}\n isPopoverOpen={isPopoverOpen}\n color={calloutProps?.color}\n isCartesian={false}\n />\n )}\n {_renderLegends()}\n </div>\n ) : (\n <div id={_emptyChartId} role={'alert'} style={{ opacity: '0' }} aria-label={'Graph has no data to display'} />\n );\n});\nFunnelChart.displayName = 'FunnelChart';\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nFunnelChart.defaultProps = {\n orientation: 'vertical',\n};\n"],"names":["React","useId","useRtl","Legends","useFocusableGroup","ChartPopover","formatToLocaleString","getContrastTextColor","useFunnelChartStyles","getHorizontalFunnelSegmentGeometry","getVerticalFunnelSegmentGeometry","getSegmentTextProps","getStackedHorizontalFunnelSegmentGeometry","getStackedVerticalFunnelSegmentGeometry","toImage","FunnelChart","forwardRef","props","forwardedRef","_emptyChartId","isRTL","hoveredStage","setHoveredStage","useState","calloutData","setCalloutData","selectedLegends","setSelectedLegends","clickPosition","setClickPosition","x","y","isPopoverOpen","setPopoverOpen","chartContainerRef","useRef","isStacked","isStackedFunnelData","data","_legendsRef","useEffect","legendProps","useImperativeHandle","componentRef","opts","current","toSVG","_handleHover","mouseEvent","persist","updatePosition","clientX","clientY","_handleFocus","focusEvent","targetRect","target","getBoundingClientRect","left","width","top","height","_handleStackedHover","stage","subValue","value","color","category","_handleStackedFocus","_handleMouseOut","_onLegendSelectionChange","legendsSelected","event","currentLegend","canSelectMultipleLegends","slice","onChange","_onLegendSelectionChangeCallback","useCallback","getHighlightedLegend","length","legendHighlighted","legend","includes","noLegendHighlighted","_getEventHandlerProps","opacity","culture","onMouseOver","undefined","onMouseMove","onFocus","onBlur","onMouseOut","_renderSegmentText","show","textColor","textElement","text","funnelWidth","textAnchor","alignmentBaseline","fill","toString","g","transform","_renderFunnelSegment","key","pathD","textProps","tabIndex","eventHandlers","path","d","_createFunnel","containerHeight","containerWidth","funnelHeight","map","i","geometryProps","orientation","textX","textY","availableWidth","minTextWidth","eventHandlerProps","Array","isArray","every","subValues","_renderStackedSegment","stageIndex","subValueIndex","geometryParams","stagesWithSubValues","stages","s","geom","k","_createStackedFunnel","totals","reduce","sum","maxTotal","Math","max","paths","cur","v","push","_renderLegends","hideLegend","legends","categoryMap","forEach","sub","Object","entries","title","hoverAction","onMouseOutAction","div","style","display","justifyContent","centerLegends","legendRef","_isChartEmpty","newX","newY","threshold","distance","sqrt","pow","classes","calloutProps","hoverXValue","YValue","funnelMarginTop","funnelOffsetX","focusAttributes","ref","className","root","svg","chart","role","aria-label","chartTitle","XValue","yCalloutValue","isCartesian","id","displayName","defaultProps"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/FunnelChart/funnelGeometry.ts"],"sourcesContent":["import * as React from 'react';\nimport { FunnelChartDataPoint } from './FunnelChart.types';\n\nexport interface FunnelSegmentGeometry {\n pathD: string;\n textX: number;\n textY: number;\n availableWidth: number;\n}\n\nexport interface StackedFunnelSegmentGeometry {\n pathD: string;\n textX: number;\n textY: number;\n availableWidth: number;\n}\n\ninterface SubValue {\n category: string;\n value: number;\n color: string;\n}\n\ninterface Stage {\n subValues: SubValue[];\n}\n\nexport function getVerticalFunnelSegmentGeometry({\n d,\n i,\n data,\n funnelWidth,\n funnelHeight,\n isRTL,\n}: {\n d: FunnelChartDataPoint;\n i: number;\n data: FunnelChartDataPoint[];\n funnelWidth: number;\n funnelHeight: number;\n isRTL: boolean;\n}): FunnelSegmentGeometry {\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: FunnelChartDataPoint;\n i: number;\n data: FunnelChartDataPoint[];\n funnelWidth: number;\n funnelHeight: number;\n isRTL: boolean;\n}): FunnelSegmentGeometry {\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: Stage[];\n totals: number[];\n maxTotal: number;\n funnelWidth: number;\n funnelHeight: number;\n}): StackedFunnelSegmentGeometry {\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: SubValue) => 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: SubValue) => 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: Stage[];\n totals: number[];\n maxTotal: number;\n funnelWidth: number;\n funnelHeight: number;\n}): StackedFunnelSegmentGeometry {\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: SubValue) => 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: SubValue) => 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) | undefined;\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"],"names":["React","getVerticalFunnelSegmentGeometry","d","i","data","funnelWidth","funnelHeight","isRTL","segmentHeight","length","widthScale","value","Math","max","map","dataPoint","topWidth","bottomWidth","xOffset","nextXOffset","xStart","xEnd","isLastSegment","textY","textX","availableWidth","yFromTop","widthAtY","min","pathD","getHorizontalFunnelSegmentGeometry","segmentWidth","heightScale","leftHeight","rightHeight","yOffset","nextYOffset","x0","x1","segmentArea","minAreaForText","widthAtTextPosition","minHeight","getStackedVerticalFunnelSegmentGeometry","k","stages","totals","maxTotal","next","cur","subValues","curTotal","nextTotal","cumTop","cumBot","idx","v","vNext","find","x","category","val","nextVal","topW","botW","topStart","topEnd","botStart","botEnd","widthRatio","getStackedHorizontalFunnelSegmentGeometry","topH","botH","leftStart","leftEnd","segmentWidthAtTextPos","abs","avgHeight","getSegmentTextProps","minTextWidth","culture","onMouseOver","onMouseMove","onMouseOut","show","y"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../src/components/FunnelChart/funnelGeometry.ts"],"sourcesContent":["import * as React from 'react';\nimport { FunnelChartDataPoint } from './FunnelChart.types';\n\nexport interface FunnelSegmentGeometry {\n pathD: string;\n textX: number;\n textY: number;\n availableWidth: number;\n}\n\nexport interface StackedFunnelSegmentGeometry {\n pathD: string;\n textX: number;\n textY: number;\n availableWidth: number;\n}\n\ninterface SubValue {\n category: string;\n value: number;\n color: string;\n}\n\ninterface Stage {\n subValues: SubValue[];\n}\n\nexport function getVerticalFunnelSegmentGeometry({\n d,\n i,\n data,\n funnelWidth,\n funnelHeight,\n isRTL,\n}: {\n d: FunnelChartDataPoint;\n i: number;\n data: FunnelChartDataPoint[];\n funnelWidth: number;\n funnelHeight: number;\n isRTL: boolean;\n}): FunnelSegmentGeometry {\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: FunnelChartDataPoint;\n i: number;\n data: FunnelChartDataPoint[];\n funnelWidth: number;\n funnelHeight: number;\n isRTL: boolean;\n}): FunnelSegmentGeometry {\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: Stage[];\n totals: number[];\n maxTotal: number;\n funnelWidth: number;\n funnelHeight: number;\n}): StackedFunnelSegmentGeometry {\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: SubValue) => 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: SubValue) => 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: Stage[];\n totals: number[];\n maxTotal: number;\n funnelWidth: number;\n funnelHeight: number;\n}): StackedFunnelSegmentGeometry {\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: SubValue) => 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: SubValue) => 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) | undefined;\n}): {\n show: boolean;\n x: number;\n y: 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) | undefined;\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"],"names":["React","getVerticalFunnelSegmentGeometry","d","i","data","funnelWidth","funnelHeight","isRTL","segmentHeight","length","widthScale","value","Math","max","map","dataPoint","topWidth","bottomWidth","xOffset","nextXOffset","xStart","xEnd","isLastSegment","textY","textX","availableWidth","yFromTop","widthAtY","min","pathD","getHorizontalFunnelSegmentGeometry","segmentWidth","heightScale","leftHeight","rightHeight","yOffset","nextYOffset","x0","x1","segmentArea","minAreaForText","widthAtTextPosition","minHeight","getStackedVerticalFunnelSegmentGeometry","k","stages","totals","maxTotal","next","cur","subValues","curTotal","nextTotal","cumTop","cumBot","idx","v","vNext","find","x","category","val","nextVal","topW","botW","topStart","topEnd","botStart","botEnd","widthRatio","getStackedHorizontalFunnelSegmentGeometry","topH","botH","leftStart","leftEnd","segmentWidthAtTextPos","abs","avgHeight","getSegmentTextProps","minTextWidth","culture","onMouseOver","onMouseMove","onMouseOut","show","y"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["useFunnelChartStyles.styles.js"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["useFunnelChartStyles.styles.js"],"sourcesContent":["'use client';\nimport { makeStyles, mergeClasses } from '@griffel/react';\nimport { tokens } from '@fluentui/react-theme';\n/**\n * @internal\n */ export const funnelClassNames = {\n root: 'fui-funnel__root',\n chart: 'fui-funnel__chart',\n text: 'fui-funnel__text',\n calloutContentRoot: 'fui-funnel__callout-content-root'\n};\n/**\n * Base Styles\n */ const useStyles = makeStyles({\n root: {\n alignItems: 'center',\n width: '100%',\n height: '100%',\n fontFamily: tokens.fontFamilyBase,\n fontSize: tokens.fontSizeBase300,\n fontWeight: tokens.fontWeightRegular,\n position: 'relative'\n },\n chart: {\n display: 'block',\n width: '100%',\n height: '100%'\n },\n text: {\n pointerEvents: 'none',\n fontWeight: tokens.fontWeightSemibold,\n fill: tokens.colorNeutralForeground1,\n fontFamily: tokens.fontFamilyBase,\n fontSize: tokens.fontSizeBase300\n },\n calloutContentRoot: {\n maxWidth: '238px'\n }\n});\n/**\n * Apply styling to the FunnelChart component\n */ export const useFunnelChartStyles = (props)=>{\n var _props_styles, _props_styles1, _props_styles2, _props_styles3;\n const { className } = props;\n const baseStyles = useStyles();\n return {\n root: mergeClasses(funnelClassNames.root, baseStyles.root, className, (_props_styles = props.styles) === null || _props_styles === void 0 ? void 0 : _props_styles.root),\n chart: mergeClasses(funnelClassNames.chart, baseStyles.chart, (_props_styles1 = props.styles) === null || _props_styles1 === void 0 ? void 0 : _props_styles1.chart),\n text: mergeClasses(funnelClassNames.text, baseStyles.text, (_props_styles2 = props.styles) === null || _props_styles2 === void 0 ? void 0 : _props_styles2.text),\n calloutContentRoot: mergeClasses(baseStyles.calloutContentRoot, (_props_styles3 = props.styles) === null || _props_styles3 === void 0 ? void 0 : _props_styles3.calloutContentRoot)\n };\n};\n"],"names":["__styles","mergeClasses","tokens","funnelClassNames","root","chart","text","calloutContentRoot","useStyles","Bt984gj","a9b677","Bqenvij","Bahqtrf","Be2twd7","Bhrd7zp","qhf8xq","mc9l5x","Bkecrkj","Bkfmm31","B2u0y6b","d","useFunnelChartStyles","props","_props_styles","_props_styles1","_props_styles2","_props_styles3","className","baseStyles","styles"],"mappings":"AAAA,YAAY;;;;;;;;;;;;IAKKG,gBAAgB;;;wBAoCI;eAApBkB;;;uBAxCwB,gBAAgB;AAI9C,yBAAyB;IAChCjB,IAAI,EAAE,kBAAkB;IACxBC,KAAK,EAAE,mBAAmB;IAC1BC,IAAI,EAAE,kBAAkB;IACxBC,kBAAkB,EAAE;AACxB,CAAC;AACD;;CAEA,GAAI,MAAMC,SAAS,GAAA,WAAA,OAAGR,eAAA,EAAA;IAAAI,IAAA,EAAA;QAAAK,OAAA,EAAA;QAAAC,MAAA,EAAA;QAAAC,OAAA,EAAA;QAAAC,OAAA,EAAA;QAAAC,OAAA,EAAA;QAAAC,OAAA,EAAA;QAAAC,MAAA,EAAA;IAAA;IAAAV,KAAA,EAAA;QAAAW,MAAA,EAAA;QAAAN,MAAA,EAAA;QAAAC,OAAA,EAAA;IAAA;IAAAL,IAAA,EAAA;QAAAW,OAAA,EAAA;QAAAH,OAAA,EAAA;QAAAI,OAAA,EAAA;QAAAN,OAAA,EAAA;QAAAC,OAAA,EAAA;IAAA;IAAAN,kBAAA,EAAA;QAAAY,OAAA,EAAA;IAAA;AAAA,GAAA;IAAAC,CAAA,EAAA;QAAA;QAAA;QAAA;QAAA;QAAA;QAAA;QAAA;QAAA;QAAA;QAAA;QAAA;QAAA;KAAA;AAAA,CAyBrB,CAAC;AAGS,8BAA8BE,KAAK,IAAG;IAC7C,IAAIC,aAAa,EAAEC,cAAc,EAAEC,cAAc,EAAEC,cAAc;IACjE,MAAM,EAAEC,SAAAA,EAAW,GAAGL,KAAK;IAC3B,MAAMM,UAAU,GAAGpB,SAAS,CAAC,CAAC;IAC9B,OAAO;QACHJ,IAAI,MAAEH,mBAAY,EAACE,gBAAgB,CAACC,IAAI,EAAEwB,UAAU,CAACxB,IAAI,EAAEuB,SAAS,EAAE,CAACJ,aAAa,GAAGD,KAAK,CAACO,MAAAA,AAAM,MAAM,IAAI,IAAIN,aAAa,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAGA,aAAa,CAACnB,IAAI,CAAC;QACxKC,KAAK,MAAEJ,mBAAY,EAACE,gBAAgB,CAACE,KAAK,EAAEuB,UAAU,CAACvB,KAAK,EAAE,CAACmB,cAAc,GAAGF,KAAK,CAACO,MAAAA,AAAM,MAAM,IAAI,IAAIL,cAAc,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAGA,cAAc,CAACnB,KAAK,CAAC;QACpKC,IAAI,MAAEL,mBAAY,EAACE,gBAAgB,CAACG,IAAI,EAAEsB,UAAU,CAACtB,IAAI,EAAE,CAACmB,cAAc,GAAGH,KAAK,CAACO,MAAAA,AAAM,MAAM,IAAI,IAAIJ,cAAc,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAGA,cAAc,CAACnB,IAAI,CAAC;QAChKC,kBAAkB,MAAEN,mBAAY,EAAC2B,UAAU,CAACrB,kBAAkB,EAAE,CAACmB,cAAc,GAAGJ,KAAK,CAACO,MAAAA,AAAM,MAAM,IAAI,IAAIH,cAAc,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAGA,cAAc,CAACnB,kBAAkB;IACtL,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/FunnelChart/useFunnelChartStyles.styles.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../src/components/FunnelChart/useFunnelChartStyles.styles.ts"],"sourcesContent":["'use client';\n\nimport { makeStyles, mergeClasses } from '@griffel/react';\nimport { tokens } from '@fluentui/react-theme';\nimport { FunnelChartProps, FunnelChartStyles } from './index';\nimport type { SlotClassNames } from '@fluentui/react-utilities';\n\n/**\n * @internal\n */\nexport const funnelClassNames: SlotClassNames<FunnelChartStyles> = {\n root: 'fui-funnel__root',\n chart: 'fui-funnel__chart',\n text: 'fui-funnel__text',\n calloutContentRoot: 'fui-funnel__callout-content-root',\n};\n\n/**\n * Base Styles\n */\nconst useStyles = makeStyles({\n root: {\n alignItems: 'center',\n width: '100%',\n height: '100%',\n fontFamily: tokens.fontFamilyBase,\n fontSize: tokens.fontSizeBase300,\n fontWeight: tokens.fontWeightRegular,\n position: 'relative',\n },\n chart: {\n display: 'block',\n width: '100%',\n height: '100%',\n },\n text: {\n pointerEvents: 'none',\n fontWeight: tokens.fontWeightSemibold,\n fill: tokens.colorNeutralForeground1,\n fontFamily: tokens.fontFamilyBase,\n fontSize: tokens.fontSizeBase300,\n },\n calloutContentRoot: {\n maxWidth: '238px',\n },\n});\n\n/**\n * Apply styling to the FunnelChart component\n */\nexport const useFunnelChartStyles = (props: FunnelChartProps): FunnelChartStyles => {\n const { className } = props;\n const baseStyles = useStyles();\n\n return {\n root: mergeClasses(funnelClassNames.root, baseStyles.root, className, props.styles?.root),\n chart: mergeClasses(funnelClassNames.chart, baseStyles.chart, props.styles?.chart),\n text: mergeClasses(funnelClassNames.text, baseStyles.text, props.styles?.text),\n calloutContentRoot: mergeClasses(baseStyles.calloutContentRoot, props.styles?.calloutContentRoot),\n };\n};\n"],"names":["makeStyles","mergeClasses","tokens","funnelClassNames","root","chart","text","calloutContentRoot","useStyles","alignItems","width","height","fontFamily","fontFamilyBase","fontSize","fontSizeBase300","fontWeight","fontWeightRegular","position","display","pointerEvents","fontWeightSemibold","fill","colorNeutralForeground1","maxWidth","useFunnelChartStyles","props","className","baseStyles","styles"],"mappings":"AAAA;;;;;;;;;;;;IAUaG,gBAAAA;;;wBAwCAsB;eAAAA;;;uBAhD4B,iBAAiB;4BACnC,wBAAwB;AAOxC,yBAA4D;IACjErB,MAAM;IACNC,OAAO;IACPC,MAAM;IACNC,oBAAoB;AACtB,EAAE;AAEF;;CAEC,GACD,MAAMC,gBAAYR,iBAAAA,EAAW;IAC3BI,MAAM;QACJK,YAAY;QACZC,OAAO;QACPC,QAAQ;QACRC,YAAYV,kBAAAA,CAAOW,cAAc;QACjCC,UAAUZ,kBAAAA,CAAOa,eAAe;QAChCC,YAAYd,kBAAAA,CAAOe,iBAAiB;QACpCC,UAAU;IACZ;IACAb,OAAO;QACLc,SAAS;QACTT,OAAO;QACPC,QAAQ;IACV;IACAL,MAAM;QACJc,eAAe;QACfJ,YAAYd,kBAAAA,CAAOmB,kBAAkB;QACrCC,MAAMpB,kBAAAA,CAAOqB,uBAAuB;QACpCX,YAAYV,kBAAAA,CAAOW,cAAc;QACjCC,UAAUZ,kBAAAA,CAAOa,eAAe;IAClC;IACAR,oBAAoB;QAClBiB,UAAU;IACZ;AACF;AAKO,6BAA6B,CAACE;QAKqCA,eACRA,gBACHA,gBACKA;IAPlE,MAAM,EAAEC,SAAS,EAAE,GAAGD;IACtB,MAAME,aAAapB;IAEnB,OAAO;QACLJ,UAAMH,mBAAAA,EAAaE,iBAAiBC,IAAI,EAAEwB,WAAWxB,IAAI,EAAEuB,WAAAA,CAAWD,gBAAAA,MAAMG,MAAAA,AAAM,MAAA,QAAZH,kBAAAA,KAAAA,IAAAA,KAAAA,IAAAA,cAActB,IAAI;QACxFC,WAAOJ,mBAAAA,EAAaE,iBAAiBE,KAAK,EAAEuB,WAAWvB,KAAK,EAAA,CAAEqB,iBAAAA,MAAMG,MAAAA,AAAM,MAAA,QAAZH,mBAAAA,KAAAA,IAAAA,KAAAA,IAAAA,eAAcrB,KAAK;QACjFC,UAAML,mBAAAA,EAAaE,iBAAiBG,IAAI,EAAEsB,WAAWtB,IAAI,EAAA,CAAEoB,iBAAAA,MAAMG,MAAAA,AAAM,MAAA,QAAZH,mBAAAA,KAAAA,IAAAA,KAAAA,IAAAA,eAAcpB,IAAI;QAC7EC,wBAAoBN,mBAAAA,EAAa2B,WAAWrB,kBAAkB,EAAA,CAAEmB,iBAAAA,MAAMG,MAAAA,AAAM,MAAA,QAAZH,mBAAAA,KAAAA,IAAAA,KAAAA,IAAAA,eAAcnB,kBAAkB;IAClG;AACF,EAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/GanttChart/GanttChart.tsx"],"sourcesContent":["import * as React from 'react';\nimport { max as d3Max, min as d3Min } from 'd3-array';\nimport { ScaleLinear, ScaleBand, ScaleTime } from 'd3-scale';\nimport { useId } from '@fluentui/react-utilities';\nimport type { JSXElement } from '@fluentui/react-utilities';\nimport { Legend, Legends, LegendContainer } from '../Legends/index';\nimport { Margins, GanttChartDataPoint } from '../../types/DataPoint';\nimport { CartesianChart, ModifiedCartesianChartProps } from '../CommonComponents/index';\nimport { GanttChartProps } from './GanttChart.types';\nimport { ChartPopover } from '../CommonComponents/ChartPopover';\nimport { ChartPopoverProps, ImageExportOptions, Chart } from '../../index';\nimport {\n ChartTypes,\n YAxisType,\n XAxisTypes,\n getTypeOfAxis,\n getNextColor,\n findHBCWANumericMinMaxOfY,\n createYAxisForHorizontalBarChartWithAxis,\n IDomainNRange,\n createStringYAxisForHorizontalBarChartWithAxis,\n areArraysEqual,\n MIN_DOMAIN_MARGIN,\n sortAxisCategories,\n calculateAppropriateBarWidth,\n getColorFromToken,\n getScalePadding,\n getDateFormatLevel,\n useRtl,\n} from '../../utilities/index';\nimport { formatDateToLocaleString, getMultiLevelDateTimeFormatOptions } from '@fluentui/chart-utilities';\nimport { toImage } from '../../utilities/image-export-utils';\n\ntype NumberScale = ScaleLinear<number, number>;\ntype StringScale = ScaleBand<string>;\ntype DateScale = ScaleTime<Date, number>;\n\nconst DEFAULT_BAR_HEIGHT = 24;\nconst MIN_BAR_HEIGHT = 1;\n\nexport const GanttChart: React.FunctionComponent<GanttChartProps> = React.forwardRef<HTMLDivElement, GanttChartProps>(\n ({ useUTC = true, yAxisCategoryOrder = 'default', maxBarHeight = 24, ...props }, forwardedRef) => {\n const _barHeight = React.useRef<number>(DEFAULT_BAR_HEIGHT);\n const _margins = React.useRef<Margins>({});\n const _calloutAnchorPoint = React.useRef<GanttChartDataPoint | null>(null);\n const _emptyChartId = useId('Gantt_empty');\n const _legendId = useId('gantt_legend');\n const _legendMap = React.useRef<Record<string, { id: string; startColor: string; endColor: string }>>({});\n const _prevProps = React.useRef<Partial<GanttChartProps>>({});\n\n const [calloutColor, setCalloutColor] = React.useState<string>('');\n const [hoveredLegend, setHoveredLegend] = React.useState<string>('');\n const [calloutLegend, setCalloutLegend] = React.useState<string>('');\n const [xCalloutValue, setXCalloutValue] = React.useState<string>('');\n const [yCalloutValue, setYCalloutValue] = React.useState<string>('');\n const [selectedLegends, setSelectedLegends] = React.useState<string[]>(props.legendProps?.selectedLegends || []);\n const [calloutDataPoint, setCalloutDataPoint] = React.useState<GanttChartDataPoint>();\n const [clickPosition, setClickPosition] = React.useState({ x: 0, y: 0 });\n const [isPopoverOpen, setPopoverOpen] = React.useState(false);\n const cartesianChartRef = React.useRef<Chart>(null);\n const _legendsRef = React.useRef<LegendContainer>(null);\n const _isRTL = useRtl();\n\n React.useEffect(() => {\n if (!areArraysEqual(_prevProps.current.legendProps?.selectedLegends, props.legendProps?.selectedLegends)) {\n setSelectedLegends(props.legendProps?.selectedLegends || []);\n }\n _prevProps.current = props;\n }, [props]);\n\n React.useImperativeHandle(\n props.componentRef,\n () => ({\n chartContainer: cartesianChartRef.current?.chartContainer ?? null,\n toImage: (opts?: ImageExportOptions): Promise<string> => {\n return toImage(cartesianChartRef.current?.chartContainer, _legendsRef.current?.toSVG, _isRTL, opts);\n },\n }),\n [],\n );\n\n const _points = React.useMemo(() => {\n _legendMap.current = {};\n let colorIndex = 0;\n\n return (\n props.data?.map(point => {\n const legend = `${point.legend}`;\n if (!_legendMap.current[legend]) {\n let startColor = point.color ? getColorFromToken(point.color) : getNextColor(colorIndex, 0);\n let endColor = startColor;\n\n if (props.enableGradient) {\n startColor = point.gradient?.[0]!;\n endColor = point.gradient?.[1]!;\n }\n\n _legendMap.current[legend] = { id: `${_legendId}_${colorIndex}`, startColor, endColor };\n colorIndex += 1;\n }\n\n const { startColor, endColor } = _legendMap.current[legend];\n return {\n ...point,\n color: startColor,\n ...(props.enableGradient ? { gradient: [startColor, endColor] as [string, string] } : {}),\n };\n }) ?? []\n );\n }, [props.data, props.enableGradient]);\n\n const _xAxisType = React.useMemo(() => {\n if (_points.length > 0) {\n return getTypeOfAxis(_points[0].x.start, true) as XAxisTypes;\n }\n return XAxisTypes.DateAxis;\n }, [_points]);\n\n const _yAxisType = React.useMemo(() => {\n if (_points.length > 0) {\n return getTypeOfAxis(_points[0].y, false) as YAxisType;\n }\n return YAxisType.StringAxis;\n }, [_points]);\n\n const _yAxisPadding = React.useMemo(() => {\n return getScalePadding(props.yAxisPadding, undefined, 1 / 2);\n }, [props.yAxisPadding]);\n\n const _dateFormatOptions = React.useMemo(() => {\n if (_xAxisType !== XAxisTypes.DateAxis) {\n return undefined;\n }\n\n let lowestFormatLevel = 100;\n let highestFormatLevel = -1;\n _points.forEach(p => {\n const startFormatLevel = getDateFormatLevel(p.x.start as Date, useUTC as boolean);\n const endFormatLevel = getDateFormatLevel(p.x.end as Date, useUTC as boolean);\n lowestFormatLevel = Math.min(lowestFormatLevel, startFormatLevel, endFormatLevel);\n highestFormatLevel = Math.max(highestFormatLevel, startFormatLevel, endFormatLevel);\n });\n\n return getMultiLevelDateTimeFormatOptions(lowestFormatLevel, highestFormatLevel);\n }, [useUTC, _points, _xAxisType]);\n\n const _mapYValueToXValues = React.useCallback(() => {\n const yValueToXValues: Record<string, number[]> = {};\n _points.forEach(point => {\n if (!yValueToXValues[point.y]) {\n yValueToXValues[point.y] = [];\n }\n yValueToXValues[point.y].push(+point.x.end - +point.x.start);\n });\n return yValueToXValues;\n }, [_points]);\n\n const _getOrderedYAxisLabels = React.useCallback(() => {\n const yValueToXValues = _mapYValueToXValues();\n\n if (_yAxisType !== YAxisType.StringAxis) {\n return Object.keys(yValueToXValues).sort((a, b) => +a - +b);\n }\n\n if (yAxisCategoryOrder === 'default') {\n return Object.keys(yValueToXValues).reverse();\n }\n return sortAxisCategories(yValueToXValues, yAxisCategoryOrder);\n }, [_mapYValueToXValues, _yAxisType, yAxisCategoryOrder]);\n\n const _yAxisLabels = React.useMemo(() => _getOrderedYAxisLabels(), [_getOrderedYAxisLabels]);\n\n const _getDomainNRangeValues = React.useCallback(\n (\n points: GanttChartDataPoint[],\n margins: Margins,\n containerWidth: number,\n chartType: ChartTypes,\n isRTL: boolean,\n xAxisType: XAxisTypes,\n barWidth: number,\n tickValues: Date[] | number[] | undefined,\n shiftX: number,\n ): IDomainNRange => {\n const xValues: (Date | number)[] = [];\n points.forEach(point => {\n xValues.push(point.x.start, point.x.end);\n });\n\n const xMin = d3Min(xValues) || 0;\n const xMax = d3Max(xValues) || 0;\n\n return {\n dStartValue: isRTL ? xMax : xMin,\n dEndValue: isRTL ? xMin : xMax,\n rStartValue: margins.left! + (isRTL ? 0 : shiftX),\n rEndValue: containerWidth - margins.right! - (isRTL ? shiftX : 0),\n };\n },\n [],\n );\n\n const _getMargins = React.useCallback((margins: Margins) => {\n _margins.current = margins;\n }, []);\n\n const _getFormattedXValue = React.useCallback(\n (point: GanttChartDataPoint): string => {\n let formattedStartX: string;\n let formattedEndX: string;\n\n if (_xAxisType === XAxisTypes.DateAxis) {\n formattedStartX = formatDateToLocaleString(\n point.x.start as Date,\n props.culture,\n useUTC as boolean,\n false,\n _dateFormatOptions,\n );\n formattedEndX = formatDateToLocaleString(\n point.x.end as Date,\n props.culture,\n useUTC as boolean,\n false,\n _dateFormatOptions,\n );\n } else {\n formattedStartX = point.x.start.toString();\n formattedEndX = point.x.end.toString();\n }\n\n return `${formattedStartX} - ${formattedEndX}`;\n },\n [props.culture, useUTC, _dateFormatOptions, _xAxisType],\n );\n\n const _getCustomizedCallout = React.useCallback(() => {\n const defaultRender = (point?: GanttChartDataPoint): JSXElement | null => {\n return point ? (\n <ChartPopover\n isPopoverOpen={isPopoverOpen}\n clickPosition={clickPosition}\n XValue={point.yAxisCalloutData || point.y.toString()}\n legend={point.legend}\n YValue={point.xAxisCalloutData || _getFormattedXValue(point)}\n color={point.color}\n culture={props.culture}\n />\n ) : null;\n };\n\n return props.onRenderCalloutPerDataPoint\n ? props.onRenderCalloutPerDataPoint(calloutDataPoint, defaultRender)\n : null;\n //eslint-disable-next-line react-hooks/exhaustive-deps\n }, [_getFormattedXValue, calloutDataPoint, props.culture, props.onRenderCalloutPerDataPoint]);\n\n const _getAriaLabel = React.useCallback(\n (point: GanttChartDataPoint): string => {\n const xValue = point.xAxisCalloutData || _getFormattedXValue(point);\n const yValue = point.yAxisCalloutData || point.y;\n return (\n point.callOutAccessibilityData?.ariaLabel ||\n `${yValue}. ` + (point.legend ? `${point.legend}, ` : '') + `${xValue}.`\n );\n },\n [_getFormattedXValue],\n );\n\n const _getHighlightedLegend = React.useCallback(() => {\n return selectedLegends.length > 0 ? selectedLegends : hoveredLegend ? [hoveredLegend] : [];\n }, [hoveredLegend, selectedLegends]);\n\n /**\n * This function checks if the given legend is highlighted or not.\n * A legend can be highlighted in 2 ways:\n * 1. selection: if the user clicks on it\n * 2. hovering: if there is no selected legend and the user hovers over it\n */\n const _legendHighlighted = React.useCallback(\n (legend: string | undefined) => {\n return _getHighlightedLegend().includes(`${legend}`);\n },\n [_getHighlightedLegend],\n );\n\n /**\n * This function checks if none of the legends is selected or hovered.\n */\n const _noLegendHighlighted = React.useCallback(() => {\n return _getHighlightedLegend().length === 0;\n }, [_getHighlightedLegend]);\n\n const _showCallout = React.useCallback(\n (target: React.MouseEvent<SVGElement> | React.FocusEvent<SVGElement>, point: GanttChartDataPoint) => {\n if (!(_noLegendHighlighted() || _legendHighlighted(point.legend)) || _calloutAnchorPoint.current === point) {\n return;\n }\n if ('clientX' in target && 'clientY' in target) {\n updatePosition(target.clientX, target.clientY);\n } else {\n const rect = (target.target as SVGElement).getBoundingClientRect();\n updatePosition(rect.left, rect.top);\n }\n _calloutAnchorPoint.current = point;\n setPopoverOpen(true);\n setCalloutLegend(point.legend!);\n setCalloutColor(point.color!);\n setXCalloutValue(point.yAxisCalloutData || point.y.toString());\n setYCalloutValue(point.xAxisCalloutData! || _getFormattedXValue(point));\n setCalloutDataPoint(point);\n },\n [_getFormattedXValue, _legendHighlighted, _noLegendHighlighted],\n );\n\n const _onBarFocus = React.useCallback(\n (point: GanttChartDataPoint, focusEvent: React.FocusEvent<SVGElement>): void => {\n _showCallout(focusEvent, point);\n },\n [_showCallout],\n );\n\n const _onBarHover = React.useCallback(\n (point: GanttChartDataPoint, mouseEvent: React.MouseEvent<SVGElement>): void => {\n _showCallout(mouseEvent, point);\n },\n [_showCallout],\n );\n\n const _onBarLeave = React.useCallback((): void => {\n // do nothing\n }, []);\n\n const _handleChartMouseLeave = React.useCallback((): void => {\n _calloutAnchorPoint.current = null;\n setPopoverOpen(false);\n setCalloutLegend('');\n setCalloutColor('');\n setXCalloutValue('');\n setYCalloutValue('');\n setCalloutDataPoint(undefined);\n }, []);\n\n const _getBarHeight = React.useCallback(\n (adjustedValue: number): number => {\n let barHeight: number;\n if (typeof props.barHeight === 'number') {\n barHeight = props.barHeight;\n } else {\n barHeight = adjustedValue;\n }\n if (typeof maxBarHeight === 'number') {\n barHeight = Math.min(barHeight, maxBarHeight);\n }\n barHeight = Math.max(barHeight, MIN_BAR_HEIGHT);\n return barHeight;\n },\n [maxBarHeight, props.barHeight],\n );\n\n const _getOrderedDataPoints = React.useCallback(() => {\n const result: GanttChartDataPoint[] = [];\n\n const yValueToPoints: Record<string, GanttChartDataPoint[]> = {};\n _points.forEach(point => {\n if (!yValueToPoints[point.y]) {\n yValueToPoints[point.y] = [];\n }\n yValueToPoints[point.y].push(point);\n });\n\n for (let i = _yAxisLabels.length - 1; i >= 0; i--) {\n const yValue = _yAxisLabels[i];\n if (yValueToPoints[yValue]) {\n result.push(...yValueToPoints[yValue].sort((a, b) => +a.x.start - +b.x.start));\n }\n }\n\n return result;\n }, [_points, _yAxisLabels]);\n\n const _createBars = React.useCallback(\n ({\n xScale,\n yScalePrimary: yScale,\n }: {\n xScale: DateScale | NumberScale;\n yScalePrimary: NumberScale | StringScale;\n }): JSXElement => {\n const getGradientId = (legend: string | undefined) => {\n const legendId = _legendMap.current[`${legend}`].id;\n return `${legendId}_gradient`;\n };\n\n const gradientDefs: JSXElement[] = [];\n if (props.enableGradient) {\n Object.keys(_legendMap.current).forEach((legend: string, index: number) => {\n const { startColor, endColor } = _legendMap.current[legend];\n gradientDefs.push(\n <linearGradient key={index} id={getGradientId(legend)}>\n <stop offset=\"0\" stopColor={startColor} />\n <stop offset=\"100%\" stopColor={endColor} />\n </linearGradient>,\n );\n });\n }\n\n let scaleBandwidth = 0;\n if (_yAxisType === YAxisType.StringAxis) {\n scaleBandwidth = (yScale as StringScale).bandwidth();\n _barHeight.current = _getBarHeight(scaleBandwidth);\n }\n\n const points = _getOrderedDataPoints();\n const bars = points.map((point: GanttChartDataPoint, index: number) => {\n const rectStartX = xScale(point.x.start);\n const rectEndX = xScale(point.x.end);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const rectY = yScale(point.y as any)! + (scaleBandwidth - _barHeight.current) / 2;\n\n const shouldHighlight = _noLegendHighlighted() || _legendHighlighted(point.legend);\n\n return (\n <rect\n key={index}\n x={Math.min(rectStartX, rectEndX)}\n y={rectY}\n width={Math.abs(rectEndX - rectStartX)}\n height={_barHeight.current}\n rx={props.roundCorners ? 3 : 0}\n fill={props.enableGradient ? `url(#${getGradientId(point.legend)})` : point.color}\n opacity={shouldHighlight ? 1 : 0.1}\n onClick={point.onClick}\n onMouseOver={(event: React.MouseEvent<SVGElement>) => _onBarHover(point, event)}\n onMouseLeave={_onBarLeave}\n onFocus={(event: React.FocusEvent<SVGElement>) => _onBarFocus(point, event)}\n onBlur={_onBarLeave}\n tabIndex={shouldHighlight ? 0 : -1}\n role=\"img\"\n aria-label={_getAriaLabel(point)}\n />\n );\n });\n return (\n <g>\n {gradientDefs.length > 0 ? <defs>{gradientDefs}</defs> : null}\n {bars}\n </g>\n );\n },\n [\n _getAriaLabel,\n _getBarHeight,\n _getOrderedDataPoints,\n _legendHighlighted,\n _noLegendHighlighted,\n _onBarFocus,\n _onBarHover,\n _onBarLeave,\n _yAxisType,\n props.enableGradient,\n props.roundCorners,\n ],\n );\n\n const _onLegendHover = React.useCallback((legend: string): void => {\n setHoveredLegend(legend);\n }, []);\n\n const _onLegendLeave = React.useCallback((): void => {\n setHoveredLegend('');\n }, []);\n\n const _onLegendSelectionChange = React.useCallback(\n (_selectedLegends: string[], event: React.MouseEvent<HTMLButtonElement>, currentLegend?: Legend): void => {\n if (props.legendProps?.canSelectMultipleLegends) {\n setSelectedLegends(_selectedLegends);\n } else {\n setSelectedLegends(_selectedLegends.slice(-1));\n }\n if (props.legendProps?.onChange) {\n props.legendProps.onChange(_selectedLegends, event, currentLegend);\n }\n },\n [props.legendProps],\n );\n\n const _getLegendData = React.useCallback((): JSXElement => {\n const actions: Legend[] = [];\n\n Object.keys(_legendMap.current).forEach((legendTitle: string) => {\n const legend: Legend = {\n title: legendTitle,\n color: _legendMap.current[legendTitle].startColor,\n hoverAction: () => {\n _handleChartMouseLeave();\n _onLegendHover(legendTitle);\n },\n onMouseOutAction: () => {\n _onLegendLeave();\n },\n };\n\n actions.push(legend);\n });\n\n const legends = (\n <Legends\n legends={actions}\n enabledWrapLines={props.enabledLegendsWrapLines}\n overflowText={props.legendsOverflowText}\n onChange={_onLegendSelectionChange}\n {...props.legendProps}\n legendRef={_legendsRef}\n />\n );\n return legends;\n }, [\n _handleChartMouseLeave,\n _onLegendHover,\n _onLegendLeave,\n _onLegendSelectionChange,\n props.enabledLegendsWrapLines,\n props.legendProps,\n props.legendsOverflowText,\n ]);\n\n const _getChartTitle = React.useCallback((): string => {\n return (props.chartTitle ? `${props.chartTitle}. ` : '') + `Gantt chart with ${_points.length} data points. `;\n }, [_points.length, props.chartTitle]);\n\n const _isChartEmpty = React.useCallback((): boolean => {\n return _points.length === 0;\n }, [_points.length]);\n\n const _getYDomainMargins = React.useCallback(\n (containerHeight: number): Margins => {\n let domainMargin = MIN_DOMAIN_MARGIN;\n\n const ySet = new Set<string | number>();\n _points.forEach((point: GanttChartDataPoint) => {\n ySet.add(point.y);\n });\n const uniqueY = Array.from(ySet);\n\n /** Total height available to render the bars */\n const totalHeight =\n containerHeight -\n (_margins.current.top! + MIN_DOMAIN_MARGIN) -\n (_margins.current.bottom! + MIN_DOMAIN_MARGIN);\n\n if (_yAxisType !== YAxisType.StringAxis) {\n _barHeight.current = _getBarHeight(\n calculateAppropriateBarWidth(uniqueY as number[] | Date[], totalHeight, _yAxisPadding),\n );\n domainMargin += _barHeight.current / 2;\n }\n\n return {\n ..._margins.current,\n top: _margins.current.top! + domainMargin,\n bottom: _margins.current.bottom! + domainMargin,\n };\n },\n [_getBarHeight, _points, _yAxisPadding, _yAxisType],\n );\n\n function updatePosition(newX: number, newY: number) {\n const threshold = 1; // Set a threshold for movement\n const { x, y } = clickPosition;\n // Calculate the distance moved\n const distance = Math.sqrt(Math.pow(newX - x, 2) + Math.pow(newY - y, 2));\n // Update the position only if the distance moved is greater than the threshold\n if (distance > threshold) {\n setClickPosition({ x: newX, y: newY });\n setPopoverOpen(true);\n }\n }\n\n if (!_isChartEmpty()) {\n _barHeight.current = _getBarHeight(DEFAULT_BAR_HEIGHT);\n\n const calloutProps: ChartPopoverProps = {\n isPopoverOpen,\n clickPosition,\n color: calloutColor,\n legend: calloutLegend,\n XValue: xCalloutValue,\n YValue: yCalloutValue,\n ...props.calloutProps,\n };\n const tickParams: ModifiedCartesianChartProps['tickParams'] = {\n tickValues: props.tickValues,\n tickFormat: props.tickFormat,\n };\n\n return (\n <CartesianChart\n {...props}\n yAxisPadding={_yAxisPadding}\n chartTitle={_getChartTitle()}\n points={_points}\n chartType={ChartTypes.GanttChart}\n xAxisType={_xAxisType}\n yAxisType={_yAxisType}\n componentRef={cartesianChartRef}\n stringDatasetForYAxisDomain={_yAxisLabels}\n calloutProps={calloutProps}\n tickParams={tickParams}\n legendBars={_getLegendData()}\n createYAxis={createYAxisForHorizontalBarChartWithAxis}\n getDomainNRangeValues={_getDomainNRangeValues}\n createStringYAxis={createStringYAxisForHorizontalBarChartWithAxis}\n getMinMaxOfYAxis={findHBCWANumericMinMaxOfY}\n customizedCallout={_getCustomizedCallout()}\n getmargins={_getMargins}\n getYDomainMargins={_getYDomainMargins}\n onChartMouseLeave={_handleChartMouseLeave}\n useUTC={useUTC}\n children={_createBars}\n />\n );\n } else {\n return (\n <div id={_emptyChartId} role={'alert'} style={{ opacity: '0' }} aria-label={'Graph has no data to display'} />\n );\n }\n },\n);\n\nGanttChart.displayName = 'GanttChart';\n"],"names":["React","max","d3Max","min","d3Min","useId","Legends","CartesianChart","ChartPopover","ChartTypes","YAxisType","XAxisTypes","getTypeOfAxis","getNextColor","findHBCWANumericMinMaxOfY","createYAxisForHorizontalBarChartWithAxis","createStringYAxisForHorizontalBarChartWithAxis","areArraysEqual","MIN_DOMAIN_MARGIN","sortAxisCategories","calculateAppropriateBarWidth","getColorFromToken","getScalePadding","getDateFormatLevel","useRtl","formatDateToLocaleString","getMultiLevelDateTimeFormatOptions","toImage","DEFAULT_BAR_HEIGHT","MIN_BAR_HEIGHT","GanttChart","forwardRef","useUTC","yAxisCategoryOrder","maxBarHeight","props","forwardedRef","_barHeight","useRef","_margins","_calloutAnchorPoint","_emptyChartId","_legendId","_legendMap","_prevProps","calloutColor","setCalloutColor","useState","hoveredLegend","setHoveredLegend","calloutLegend","setCalloutLegend","xCalloutValue","setXCalloutValue","yCalloutValue","setYCalloutValue","selectedLegends","setSelectedLegends","legendProps","calloutDataPoint","setCalloutDataPoint","clickPosition","setClickPosition","x","y","isPopoverOpen","setPopoverOpen","cartesianChartRef","_legendsRef","_isRTL","useEffect","current","useImperativeHandle","componentRef","chartContainer","opts","toSVG","_points","useMemo","colorIndex","data","map","point","legend","startColor","color","endColor","enableGradient","gradient","id","_xAxisType","length","start","DateAxis","_yAxisType","StringAxis","_yAxisPadding","yAxisPadding","undefined","_dateFormatOptions","lowestFormatLevel","highestFormatLevel","forEach","p","startFormatLevel","endFormatLevel","end","Math","_mapYValueToXValues","useCallback","yValueToXValues","push","_getOrderedYAxisLabels","Object","keys","sort","a","b","reverse","_yAxisLabels","_getDomainNRangeValues","points","margins","containerWidth","chartType","isRTL","xAxisType","barWidth","tickValues","shiftX","xValues","xMin","xMax","dStartValue","dEndValue","rStartValue","left","rEndValue","right","_getMargins","_getFormattedXValue","formattedStartX","formattedEndX","culture","toString","_getCustomizedCallout","defaultRender","XValue","yAxisCalloutData","YValue","xAxisCalloutData","onRenderCalloutPerDataPoint","_getAriaLabel","xValue","yValue","callOutAccessibilityData","ariaLabel","_getHighlightedLegend","_legendHighlighted","includes","_noLegendHighlighted","_showCallout","target","updatePosition","clientX","clientY","rect","getBoundingClientRect","top","_onBarFocus","focusEvent","_onBarHover","mouseEvent","_onBarLeave","_handleChartMouseLeave","_getBarHeight","adjustedValue","barHeight","_getOrderedDataPoints","result","yValueToPoints","i","_createBars","xScale","yScalePrimary","yScale","getGradientId","legendId","gradientDefs","index","linearGradient","key","stop","offset","stopColor","scaleBandwidth","bandwidth","bars","rectStartX","rectEndX","rectY","shouldHighlight","width","abs","height","rx","roundCorners","fill","opacity","onClick","onMouseOver","event","onMouseLeave","onFocus","onBlur","tabIndex","role","aria-label","g","defs","_onLegendHover","_onLegendLeave","_onLegendSelectionChange","_selectedLegends","currentLegend","canSelectMultipleLegends","slice","onChange","_getLegendData","actions","legendTitle","title","hoverAction","onMouseOutAction","legends","enabledWrapLines","enabledLegendsWrapLines","overflowText","legendsOverflowText","legendRef","_getChartTitle","chartTitle","_isChartEmpty","_getYDomainMargins","containerHeight","domainMargin","ySet","Set","add","uniqueY","Array","from","totalHeight","bottom","newX","newY","threshold","distance","sqrt","pow","calloutProps","tickParams","tickFormat","yAxisType","stringDatasetForYAxisDomain","legendBars","createYAxis","getDomainNRangeValues","createStringYAxis","getMinMaxOfYAxis","customizedCallout","getmargins","getYDomainMargins","onChartMouseLeave","children","div","style","displayName"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../src/components/GanttChart/GanttChart.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { max as d3Max, min as d3Min } from 'd3-array';\nimport { ScaleLinear, ScaleBand, ScaleTime } from 'd3-scale';\nimport { useId } from '@fluentui/react-utilities';\nimport type { JSXElement } from '@fluentui/react-utilities';\nimport { Legend, Legends, LegendContainer } from '../Legends/index';\nimport { Margins, GanttChartDataPoint } from '../../types/DataPoint';\nimport { CartesianChart, ModifiedCartesianChartProps } from '../CommonComponents/index';\nimport { GanttChartProps } from './GanttChart.types';\nimport { ChartPopover } from '../CommonComponents/ChartPopover';\nimport { ChartPopoverProps, ImageExportOptions, Chart } from '../../index';\nimport {\n ChartTypes,\n YAxisType,\n XAxisTypes,\n getTypeOfAxis,\n getNextColor,\n findHBCWANumericMinMaxOfY,\n createYAxisForHorizontalBarChartWithAxis,\n IDomainNRange,\n createStringYAxisForHorizontalBarChartWithAxis,\n areArraysEqual,\n MIN_DOMAIN_MARGIN,\n sortAxisCategories,\n calculateAppropriateBarWidth,\n getColorFromToken,\n getScalePadding,\n getDateFormatLevel,\n useRtl,\n} from '../../utilities/index';\nimport { formatDateToLocaleString, getMultiLevelDateTimeFormatOptions } from '@fluentui/chart-utilities';\nimport { toImage } from '../../utilities/image-export-utils';\n\ntype NumberScale = ScaleLinear<number, number>;\ntype StringScale = ScaleBand<string>;\ntype DateScale = ScaleTime<Date, number>;\n\nconst DEFAULT_BAR_HEIGHT = 24;\nconst MIN_BAR_HEIGHT = 1;\n\nexport const GanttChart: React.FunctionComponent<GanttChartProps> = React.forwardRef<HTMLDivElement, GanttChartProps>(\n ({ useUTC = true, yAxisCategoryOrder = 'default', maxBarHeight = 24, ...props }, forwardedRef) => {\n const _barHeight = React.useRef<number>(DEFAULT_BAR_HEIGHT);\n const _margins = React.useRef<Margins>({});\n const _calloutAnchorPoint = React.useRef<GanttChartDataPoint | null>(null);\n const _emptyChartId = useId('Gantt_empty');\n const _legendId = useId('gantt_legend');\n const _legendMap = React.useRef<Record<string, { id: string; startColor: string; endColor: string }>>({});\n const _prevProps = React.useRef<Partial<GanttChartProps>>({});\n\n const [calloutColor, setCalloutColor] = React.useState<string>('');\n const [hoveredLegend, setHoveredLegend] = React.useState<string>('');\n const [calloutLegend, setCalloutLegend] = React.useState<string>('');\n const [xCalloutValue, setXCalloutValue] = React.useState<string>('');\n const [yCalloutValue, setYCalloutValue] = React.useState<string>('');\n const [selectedLegends, setSelectedLegends] = React.useState<string[]>(props.legendProps?.selectedLegends || []);\n const [calloutDataPoint, setCalloutDataPoint] = React.useState<GanttChartDataPoint>();\n const [clickPosition, setClickPosition] = React.useState({ x: 0, y: 0 });\n const [isPopoverOpen, setPopoverOpen] = React.useState(false);\n const cartesianChartRef = React.useRef<Chart>(null);\n const _legendsRef = React.useRef<LegendContainer>(null);\n const _isRTL = useRtl();\n\n React.useEffect(() => {\n if (!areArraysEqual(_prevProps.current.legendProps?.selectedLegends, props.legendProps?.selectedLegends)) {\n setSelectedLegends(props.legendProps?.selectedLegends || []);\n }\n _prevProps.current = props;\n }, [props]);\n\n React.useImperativeHandle(\n props.componentRef,\n () => ({\n chartContainer: cartesianChartRef.current?.chartContainer ?? null,\n toImage: (opts?: ImageExportOptions): Promise<string> => {\n return toImage(cartesianChartRef.current?.chartContainer, _legendsRef.current?.toSVG, _isRTL, opts);\n },\n }),\n [],\n );\n\n const _points = React.useMemo(() => {\n _legendMap.current = {};\n let colorIndex = 0;\n\n return (\n props.data?.map(point => {\n const legend = `${point.legend}`;\n if (!_legendMap.current[legend]) {\n let startColor = point.color ? getColorFromToken(point.color) : getNextColor(colorIndex, 0);\n let endColor = startColor;\n\n if (props.enableGradient) {\n startColor = point.gradient?.[0]!;\n endColor = point.gradient?.[1]!;\n }\n\n _legendMap.current[legend] = { id: `${_legendId}_${colorIndex}`, startColor, endColor };\n colorIndex += 1;\n }\n\n const { startColor, endColor } = _legendMap.current[legend];\n return {\n ...point,\n color: startColor,\n ...(props.enableGradient ? { gradient: [startColor, endColor] as [string, string] } : {}),\n };\n }) ?? []\n );\n }, [props.data, props.enableGradient]);\n\n const _xAxisType = React.useMemo(() => {\n if (_points.length > 0) {\n return getTypeOfAxis(_points[0].x.start, true) as XAxisTypes;\n }\n return XAxisTypes.DateAxis;\n }, [_points]);\n\n const _yAxisType = React.useMemo(() => {\n if (_points.length > 0) {\n return getTypeOfAxis(_points[0].y, false) as YAxisType;\n }\n return YAxisType.StringAxis;\n }, [_points]);\n\n const _yAxisPadding = React.useMemo(() => {\n return getScalePadding(props.yAxisPadding, undefined, 1 / 2);\n }, [props.yAxisPadding]);\n\n const _dateFormatOptions = React.useMemo(() => {\n if (_xAxisType !== XAxisTypes.DateAxis) {\n return undefined;\n }\n\n let lowestFormatLevel = 100;\n let highestFormatLevel = -1;\n _points.forEach(p => {\n const startFormatLevel = getDateFormatLevel(p.x.start as Date, useUTC as boolean);\n const endFormatLevel = getDateFormatLevel(p.x.end as Date, useUTC as boolean);\n lowestFormatLevel = Math.min(lowestFormatLevel, startFormatLevel, endFormatLevel);\n highestFormatLevel = Math.max(highestFormatLevel, startFormatLevel, endFormatLevel);\n });\n\n return getMultiLevelDateTimeFormatOptions(lowestFormatLevel, highestFormatLevel);\n }, [useUTC, _points, _xAxisType]);\n\n const _mapYValueToXValues = React.useCallback(() => {\n const yValueToXValues: Record<string, number[]> = {};\n _points.forEach(point => {\n if (!yValueToXValues[point.y]) {\n yValueToXValues[point.y] = [];\n }\n yValueToXValues[point.y].push(+point.x.end - +point.x.start);\n });\n return yValueToXValues;\n }, [_points]);\n\n const _getOrderedYAxisLabels = React.useCallback(() => {\n const yValueToXValues = _mapYValueToXValues();\n\n if (_yAxisType !== YAxisType.StringAxis) {\n return Object.keys(yValueToXValues).sort((a, b) => +a - +b);\n }\n\n if (yAxisCategoryOrder === 'default') {\n return Object.keys(yValueToXValues).reverse();\n }\n return sortAxisCategories(yValueToXValues, yAxisCategoryOrder);\n }, [_mapYValueToXValues, _yAxisType, yAxisCategoryOrder]);\n\n const _yAxisLabels = React.useMemo(() => _getOrderedYAxisLabels(), [_getOrderedYAxisLabels]);\n\n const _getDomainNRangeValues = React.useCallback(\n (\n points: GanttChartDataPoint[],\n margins: Margins,\n containerWidth: number,\n chartType: ChartTypes,\n isRTL: boolean,\n xAxisType: XAxisTypes,\n barWidth: number,\n tickValues: Date[] | number[] | undefined,\n shiftX: number,\n ): IDomainNRange => {\n const xValues: (Date | number)[] = [];\n points.forEach(point => {\n xValues.push(point.x.start, point.x.end);\n });\n\n const xMin = d3Min(xValues) || 0;\n const xMax = d3Max(xValues) || 0;\n\n return {\n dStartValue: isRTL ? xMax : xMin,\n dEndValue: isRTL ? xMin : xMax,\n rStartValue: margins.left! + (isRTL ? 0 : shiftX),\n rEndValue: containerWidth - margins.right! - (isRTL ? shiftX : 0),\n };\n },\n [],\n );\n\n const _getMargins = React.useCallback((margins: Margins) => {\n _margins.current = margins;\n }, []);\n\n const _getFormattedXValue = React.useCallback(\n (point: GanttChartDataPoint): string => {\n let formattedStartX: string;\n let formattedEndX: string;\n\n if (_xAxisType === XAxisTypes.DateAxis) {\n formattedStartX = formatDateToLocaleString(\n point.x.start as Date,\n props.culture,\n useUTC as boolean,\n false,\n _dateFormatOptions,\n );\n formattedEndX = formatDateToLocaleString(\n point.x.end as Date,\n props.culture,\n useUTC as boolean,\n false,\n _dateFormatOptions,\n );\n } else {\n formattedStartX = point.x.start.toString();\n formattedEndX = point.x.end.toString();\n }\n\n return `${formattedStartX} - ${formattedEndX}`;\n },\n [props.culture, useUTC, _dateFormatOptions, _xAxisType],\n );\n\n const _getCustomizedCallout = React.useCallback(() => {\n const defaultRender = (point?: GanttChartDataPoint): JSXElement | null => {\n return point ? (\n <ChartPopover\n isPopoverOpen={isPopoverOpen}\n clickPosition={clickPosition}\n XValue={point.yAxisCalloutData || point.y.toString()}\n legend={point.legend}\n YValue={point.xAxisCalloutData || _getFormattedXValue(point)}\n color={point.color}\n culture={props.culture}\n />\n ) : null;\n };\n\n return props.onRenderCalloutPerDataPoint\n ? props.onRenderCalloutPerDataPoint(calloutDataPoint, defaultRender)\n : null;\n //eslint-disable-next-line react-hooks/exhaustive-deps\n }, [_getFormattedXValue, calloutDataPoint, props.culture, props.onRenderCalloutPerDataPoint]);\n\n const _getAriaLabel = React.useCallback(\n (point: GanttChartDataPoint): string => {\n const xValue = point.xAxisCalloutData || _getFormattedXValue(point);\n const yValue = point.yAxisCalloutData || point.y;\n return (\n point.callOutAccessibilityData?.ariaLabel ||\n `${yValue}. ` + (point.legend ? `${point.legend}, ` : '') + `${xValue}.`\n );\n },\n [_getFormattedXValue],\n );\n\n const _getHighlightedLegend = React.useCallback(() => {\n return selectedLegends.length > 0 ? selectedLegends : hoveredLegend ? [hoveredLegend] : [];\n }, [hoveredLegend, selectedLegends]);\n\n /**\n * This function checks if the given legend is highlighted or not.\n * A legend can be highlighted in 2 ways:\n * 1. selection: if the user clicks on it\n * 2. hovering: if there is no selected legend and the user hovers over it\n */\n const _legendHighlighted = React.useCallback(\n (legend: string | undefined) => {\n return _getHighlightedLegend().includes(`${legend}`);\n },\n [_getHighlightedLegend],\n );\n\n /**\n * This function checks if none of the legends is selected or hovered.\n */\n const _noLegendHighlighted = React.useCallback(() => {\n return _getHighlightedLegend().length === 0;\n }, [_getHighlightedLegend]);\n\n const _showCallout = React.useCallback(\n (target: React.MouseEvent<SVGElement> | React.FocusEvent<SVGElement>, point: GanttChartDataPoint) => {\n if (!(_noLegendHighlighted() || _legendHighlighted(point.legend)) || _calloutAnchorPoint.current === point) {\n return;\n }\n if ('clientX' in target && 'clientY' in target) {\n updatePosition(target.clientX, target.clientY);\n } else {\n const rect = (target.target as SVGElement).getBoundingClientRect();\n updatePosition(rect.left, rect.top);\n }\n _calloutAnchorPoint.current = point;\n setPopoverOpen(true);\n setCalloutLegend(point.legend!);\n setCalloutColor(point.color!);\n setXCalloutValue(point.yAxisCalloutData || point.y.toString());\n setYCalloutValue(point.xAxisCalloutData! || _getFormattedXValue(point));\n setCalloutDataPoint(point);\n },\n [_getFormattedXValue, _legendHighlighted, _noLegendHighlighted],\n );\n\n const _onBarFocus = React.useCallback(\n (point: GanttChartDataPoint, focusEvent: React.FocusEvent<SVGElement>): void => {\n _showCallout(focusEvent, point);\n },\n [_showCallout],\n );\n\n const _onBarHover = React.useCallback(\n (point: GanttChartDataPoint, mouseEvent: React.MouseEvent<SVGElement>): void => {\n _showCallout(mouseEvent, point);\n },\n [_showCallout],\n );\n\n const _onBarLeave = React.useCallback((): void => {\n // do nothing\n }, []);\n\n const _handleChartMouseLeave = React.useCallback((): void => {\n _calloutAnchorPoint.current = null;\n setPopoverOpen(false);\n setCalloutLegend('');\n setCalloutColor('');\n setXCalloutValue('');\n setYCalloutValue('');\n setCalloutDataPoint(undefined);\n }, []);\n\n const _getBarHeight = React.useCallback(\n (adjustedValue: number): number => {\n let barHeight: number;\n if (typeof props.barHeight === 'number') {\n barHeight = props.barHeight;\n } else {\n barHeight = adjustedValue;\n }\n if (typeof maxBarHeight === 'number') {\n barHeight = Math.min(barHeight, maxBarHeight);\n }\n barHeight = Math.max(barHeight, MIN_BAR_HEIGHT);\n return barHeight;\n },\n [maxBarHeight, props.barHeight],\n );\n\n const _getOrderedDataPoints = React.useCallback(() => {\n const result: GanttChartDataPoint[] = [];\n\n const yValueToPoints: Record<string, GanttChartDataPoint[]> = {};\n _points.forEach(point => {\n if (!yValueToPoints[point.y]) {\n yValueToPoints[point.y] = [];\n }\n yValueToPoints[point.y].push(point);\n });\n\n for (let i = _yAxisLabels.length - 1; i >= 0; i--) {\n const yValue = _yAxisLabels[i];\n if (yValueToPoints[yValue]) {\n result.push(...yValueToPoints[yValue].sort((a, b) => +a.x.start - +b.x.start));\n }\n }\n\n return result;\n }, [_points, _yAxisLabels]);\n\n const _createBars = React.useCallback(\n ({\n xScale,\n yScalePrimary: yScale,\n }: {\n xScale: DateScale | NumberScale;\n yScalePrimary: NumberScale | StringScale;\n }): JSXElement => {\n const getGradientId = (legend: string | undefined) => {\n const legendId = _legendMap.current[`${legend}`].id;\n return `${legendId}_gradient`;\n };\n\n const gradientDefs: JSXElement[] = [];\n if (props.enableGradient) {\n Object.keys(_legendMap.current).forEach((legend: string, index: number) => {\n const { startColor, endColor } = _legendMap.current[legend];\n gradientDefs.push(\n <linearGradient key={index} id={getGradientId(legend)}>\n <stop offset=\"0\" stopColor={startColor} />\n <stop offset=\"100%\" stopColor={endColor} />\n </linearGradient>,\n );\n });\n }\n\n let scaleBandwidth = 0;\n if (_yAxisType === YAxisType.StringAxis) {\n scaleBandwidth = (yScale as StringScale).bandwidth();\n _barHeight.current = _getBarHeight(scaleBandwidth);\n }\n\n const points = _getOrderedDataPoints();\n const bars = points.map((point: GanttChartDataPoint, index: number) => {\n const rectStartX = xScale(point.x.start);\n const rectEndX = xScale(point.x.end);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const rectY = yScale(point.y as any)! + (scaleBandwidth - _barHeight.current) / 2;\n\n const shouldHighlight = _noLegendHighlighted() || _legendHighlighted(point.legend);\n\n return (\n <rect\n key={index}\n x={Math.min(rectStartX, rectEndX)}\n y={rectY}\n width={Math.abs(rectEndX - rectStartX)}\n height={_barHeight.current}\n rx={props.roundCorners ? 3 : 0}\n fill={props.enableGradient ? `url(#${getGradientId(point.legend)})` : point.color}\n opacity={shouldHighlight ? 1 : 0.1}\n onClick={point.onClick}\n onMouseOver={(event: React.MouseEvent<SVGElement>) => _onBarHover(point, event)}\n onMouseLeave={_onBarLeave}\n onFocus={(event: React.FocusEvent<SVGElement>) => _onBarFocus(point, event)}\n onBlur={_onBarLeave}\n tabIndex={shouldHighlight ? 0 : -1}\n role=\"img\"\n aria-label={_getAriaLabel(point)}\n />\n );\n });\n return (\n <g>\n {gradientDefs.length > 0 ? <defs>{gradientDefs}</defs> : null}\n {bars}\n </g>\n );\n },\n [\n _getAriaLabel,\n _getBarHeight,\n _getOrderedDataPoints,\n _legendHighlighted,\n _noLegendHighlighted,\n _onBarFocus,\n _onBarHover,\n _onBarLeave,\n _yAxisType,\n props.enableGradient,\n props.roundCorners,\n ],\n );\n\n const _onLegendHover = React.useCallback((legend: string): void => {\n setHoveredLegend(legend);\n }, []);\n\n const _onLegendLeave = React.useCallback((): void => {\n setHoveredLegend('');\n }, []);\n\n const _onLegendSelectionChange = React.useCallback(\n (_selectedLegends: string[], event: React.MouseEvent<HTMLButtonElement>, currentLegend?: Legend): void => {\n if (props.legendProps?.canSelectMultipleLegends) {\n setSelectedLegends(_selectedLegends);\n } else {\n setSelectedLegends(_selectedLegends.slice(-1));\n }\n if (props.legendProps?.onChange) {\n props.legendProps.onChange(_selectedLegends, event, currentLegend);\n }\n },\n [props.legendProps],\n );\n\n const _getLegendData = React.useCallback((): JSXElement => {\n const actions: Legend[] = [];\n\n Object.keys(_legendMap.current).forEach((legendTitle: string) => {\n const legend: Legend = {\n title: legendTitle,\n color: _legendMap.current[legendTitle].startColor,\n hoverAction: () => {\n _handleChartMouseLeave();\n _onLegendHover(legendTitle);\n },\n onMouseOutAction: () => {\n _onLegendLeave();\n },\n };\n\n actions.push(legend);\n });\n\n const legends = (\n <Legends\n legends={actions}\n enabledWrapLines={props.enabledLegendsWrapLines}\n overflowText={props.legendsOverflowText}\n onChange={_onLegendSelectionChange}\n {...props.legendProps}\n legendRef={_legendsRef}\n />\n );\n return legends;\n }, [\n _handleChartMouseLeave,\n _onLegendHover,\n _onLegendLeave,\n _onLegendSelectionChange,\n props.enabledLegendsWrapLines,\n props.legendProps,\n props.legendsOverflowText,\n ]);\n\n const _getChartTitle = React.useCallback((): string => {\n return (props.chartTitle ? `${props.chartTitle}. ` : '') + `Gantt chart with ${_points.length} data points. `;\n }, [_points.length, props.chartTitle]);\n\n const _isChartEmpty = React.useCallback((): boolean => {\n return _points.length === 0;\n }, [_points.length]);\n\n const _getYDomainMargins = React.useCallback(\n (containerHeight: number): Margins => {\n let domainMargin = MIN_DOMAIN_MARGIN;\n\n const ySet = new Set<string | number>();\n _points.forEach((point: GanttChartDataPoint) => {\n ySet.add(point.y);\n });\n const uniqueY = Array.from(ySet);\n\n /** Total height available to render the bars */\n const totalHeight =\n containerHeight -\n (_margins.current.top! + MIN_DOMAIN_MARGIN) -\n (_margins.current.bottom! + MIN_DOMAIN_MARGIN);\n\n if (_yAxisType !== YAxisType.StringAxis) {\n _barHeight.current = _getBarHeight(\n calculateAppropriateBarWidth(uniqueY as number[] | Date[], totalHeight, _yAxisPadding),\n );\n domainMargin += _barHeight.current / 2;\n }\n\n return {\n ..._margins.current,\n top: _margins.current.top! + domainMargin,\n bottom: _margins.current.bottom! + domainMargin,\n };\n },\n [_getBarHeight, _points, _yAxisPadding, _yAxisType],\n );\n\n function updatePosition(newX: number, newY: number) {\n const threshold = 1; // Set a threshold for movement\n const { x, y } = clickPosition;\n // Calculate the distance moved\n const distance = Math.sqrt(Math.pow(newX - x, 2) + Math.pow(newY - y, 2));\n // Update the position only if the distance moved is greater than the threshold\n if (distance > threshold) {\n setClickPosition({ x: newX, y: newY });\n setPopoverOpen(true);\n }\n }\n\n if (!_isChartEmpty()) {\n _barHeight.current = _getBarHeight(DEFAULT_BAR_HEIGHT);\n\n const calloutProps: ChartPopoverProps = {\n isPopoverOpen,\n clickPosition,\n color: calloutColor,\n legend: calloutLegend,\n XValue: xCalloutValue,\n YValue: yCalloutValue,\n ...props.calloutProps,\n };\n const tickParams: ModifiedCartesianChartProps['tickParams'] = {\n tickValues: props.tickValues,\n tickFormat: props.tickFormat,\n };\n\n return (\n <CartesianChart\n {...props}\n yAxisPadding={_yAxisPadding}\n chartTitle={_getChartTitle()}\n points={_points}\n chartType={ChartTypes.GanttChart}\n xAxisType={_xAxisType}\n yAxisType={_yAxisType}\n componentRef={cartesianChartRef}\n stringDatasetForYAxisDomain={_yAxisLabels}\n calloutProps={calloutProps}\n tickParams={tickParams}\n legendBars={_getLegendData()}\n createYAxis={createYAxisForHorizontalBarChartWithAxis}\n getDomainNRangeValues={_getDomainNRangeValues}\n createStringYAxis={createStringYAxisForHorizontalBarChartWithAxis}\n getMinMaxOfYAxis={findHBCWANumericMinMaxOfY}\n customizedCallout={_getCustomizedCallout()}\n getmargins={_getMargins}\n getYDomainMargins={_getYDomainMargins}\n onChartMouseLeave={_handleChartMouseLeave}\n useUTC={useUTC}\n children={_createBars}\n />\n );\n } else {\n return (\n <div id={_emptyChartId} role={'alert'} style={{ opacity: '0' }} aria-label={'Graph has no data to display'} />\n );\n }\n },\n);\n\nGanttChart.displayName = 'GanttChart';\n"],"names":["React","max","d3Max","min","d3Min","useId","Legends","CartesianChart","ChartPopover","ChartTypes","YAxisType","XAxisTypes","getTypeOfAxis","getNextColor","findHBCWANumericMinMaxOfY","createYAxisForHorizontalBarChartWithAxis","createStringYAxisForHorizontalBarChartWithAxis","areArraysEqual","MIN_DOMAIN_MARGIN","sortAxisCategories","calculateAppropriateBarWidth","getColorFromToken","getScalePadding","getDateFormatLevel","useRtl","formatDateToLocaleString","getMultiLevelDateTimeFormatOptions","toImage","DEFAULT_BAR_HEIGHT","MIN_BAR_HEIGHT","GanttChart","forwardRef","useUTC","yAxisCategoryOrder","maxBarHeight","props","forwardedRef","_barHeight","useRef","_margins","_calloutAnchorPoint","_emptyChartId","_legendId","_legendMap","_prevProps","calloutColor","setCalloutColor","useState","hoveredLegend","setHoveredLegend","calloutLegend","setCalloutLegend","xCalloutValue","setXCalloutValue","yCalloutValue","setYCalloutValue","selectedLegends","setSelectedLegends","legendProps","calloutDataPoint","setCalloutDataPoint","clickPosition","setClickPosition","x","y","isPopoverOpen","setPopoverOpen","cartesianChartRef","_legendsRef","_isRTL","useEffect","current","useImperativeHandle","componentRef","chartContainer","opts","toSVG","_points","useMemo","colorIndex","data","map","point","legend","startColor","color","endColor","enableGradient","gradient","id","_xAxisType","length","start","DateAxis","_yAxisType","StringAxis","_yAxisPadding","yAxisPadding","undefined","_dateFormatOptions","lowestFormatLevel","highestFormatLevel","forEach","p","startFormatLevel","endFormatLevel","end","Math","_mapYValueToXValues","useCallback","yValueToXValues","push","_getOrderedYAxisLabels","Object","keys","sort","a","b","reverse","_yAxisLabels","_getDomainNRangeValues","points","margins","containerWidth","chartType","isRTL","xAxisType","barWidth","tickValues","shiftX","xValues","xMin","xMax","dStartValue","dEndValue","rStartValue","left","rEndValue","right","_getMargins","_getFormattedXValue","formattedStartX","formattedEndX","culture","toString","_getCustomizedCallout","defaultRender","XValue","yAxisCalloutData","YValue","xAxisCalloutData","onRenderCalloutPerDataPoint","_getAriaLabel","xValue","yValue","callOutAccessibilityData","ariaLabel","_getHighlightedLegend","_legendHighlighted","includes","_noLegendHighlighted","_showCallout","target","updatePosition","clientX","clientY","rect","getBoundingClientRect","top","_onBarFocus","focusEvent","_onBarHover","mouseEvent","_onBarLeave","_handleChartMouseLeave","_getBarHeight","adjustedValue","barHeight","_getOrderedDataPoints","result","yValueToPoints","i","_createBars","xScale","yScalePrimary","yScale","getGradientId","legendId","gradientDefs","index","linearGradient","key","stop","offset","stopColor","scaleBandwidth","bandwidth","bars","rectStartX","rectEndX","rectY","shouldHighlight","width","abs","height","rx","roundCorners","fill","opacity","onClick","onMouseOver","event","onMouseLeave","onFocus","onBlur","tabIndex","role","aria-label","g","defs","_onLegendHover","_onLegendLeave","_onLegendSelectionChange","_selectedLegends","currentLegend","canSelectMultipleLegends","slice","onChange","_getLegendData","actions","legendTitle","title","hoverAction","onMouseOutAction","legends","enabledWrapLines","enabledLegendsWrapLines","overflowText","legendsOverflowText","legendRef","_getChartTitle","chartTitle","_isChartEmpty","_getYDomainMargins","containerHeight","domainMargin","ySet","Set","add","uniqueY","Array","from","totalHeight","bottom","newX","newY","threshold","distance","sqrt","pow","calloutProps","tickParams","tickFormat","yAxisType","stringDatasetForYAxisDomain","legendBars","createYAxis","getDomainNRangeValues","createStringYAxis","getMinMaxOfYAxis","customizedCallout","getmargins","getYDomainMargins","onChartMouseLeave","children","div","style","displayName"],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
'use client';
|
|
1
2
|
"use strict";
|
|
2
3
|
Object.defineProperty(exports, "__esModule", {
|
|
3
4
|
value: true
|
|
@@ -583,8 +584,7 @@ const GaugeChart = /*#__PURE__*/ _react.forwardRef((props, forwardedRef)=>{
|
|
|
583
584
|
onMouseEnter: (e)=>_handleMouseOver(e, segment.legend),
|
|
584
585
|
onMouseLeave: (e)=>_handleCalloutDismiss(),
|
|
585
586
|
onMouseMove: (e)=>_handleMouseOver(e, segment.legend),
|
|
586
|
-
|
|
587
|
-
tabIndex: segment.legend !== '' ? 0 : undefined
|
|
587
|
+
tabIndex: _legendHighlighted(segment.legend) || _noLegendHighlighted() ? 0 : undefined
|
|
588
588
|
}));
|
|
589
589
|
}), _renderNeedle(), /*#__PURE__*/ _react.createElement("g", {
|
|
590
590
|
onMouseEnter: (e)=>_handleMouseOver(e, 'Chart value'),
|