@fluentui/react-charts 9.3.17 → 9.3.18
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 +18 -2
- package/dist/index.d.ts +11 -11
- package/lib/components/AnnotationOnlyChart/AnnotationOnlyChart.types.js +3 -1
- package/lib/components/AnnotationOnlyChart/AnnotationOnlyChart.types.js.map +1 -1
- package/lib/components/AreaChart/AreaChart.js +3 -5
- package/lib/components/AreaChart/AreaChart.js.map +1 -1
- package/lib/components/AreaChart/AreaChart.types.js.map +1 -1
- package/lib/components/AreaChart/useAreaChartStyles.styles.raw.js.map +1 -1
- package/lib/components/ChartTable/ChartTable.js.map +1 -1
- package/lib/components/ChartTable/ChartTable.types.js +4 -1
- package/lib/components/ChartTable/ChartTable.types.js.map +1 -1
- package/lib/components/ChartTable/useChartTableStyles.styles.raw.js.map +1 -1
- package/lib/components/CommonComponents/Annotations/ChartAnnotationLayer.types.js.map +1 -1
- package/lib/components/CommonComponents/Annotations/useChartAnnotationLayer.styles.raw.js.map +1 -1
- package/lib/components/CommonComponents/CartesianChart.js +6 -6
- package/lib/components/CommonComponents/CartesianChart.js.map +1 -1
- package/lib/components/CommonComponents/CartesianChart.types.js +2 -1
- package/lib/components/CommonComponents/CartesianChart.types.js.map +1 -1
- package/lib/components/CommonComponents/ChartPopover.js.map +1 -1
- package/lib/components/CommonComponents/ChartPopover.types.js.map +1 -1
- package/lib/components/CommonComponents/useCartesianChartStyles.styles.raw.js.map +1 -1
- package/lib/components/CommonComponents/useChartPopoverStyles.styles.raw.js.map +1 -1
- package/lib/components/DeclarativeChart/DeclarativeChart.js +0 -1
- package/lib/components/DeclarativeChart/DeclarativeChart.js.map +1 -1
- package/lib/components/DeclarativeChart/PlotlyColorAdapter.js +0 -1
- package/lib/components/DeclarativeChart/PlotlyColorAdapter.js.map +1 -1
- package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js +0 -1
- package/lib/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
- 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.raw.js.map +1 -1
- package/lib/components/DonutChart/DonutChart.js +1 -2
- package/lib/components/DonutChart/DonutChart.js.map +1 -1
- package/lib/components/DonutChart/DonutChart.types.js +4 -1
- package/lib/components/DonutChart/DonutChart.types.js.map +1 -1
- package/lib/components/DonutChart/Pie/Pie.js +2 -5
- 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.raw.js.map +1 -1
- package/lib/components/DonutChart/useDonutChartStyles.styles.raw.js.map +1 -1
- package/lib/components/FunnelChart/FunnelChart.js.map +1 -1
- package/lib/components/FunnelChart/FunnelChart.types.js +4 -1
- package/lib/components/FunnelChart/FunnelChart.types.js.map +1 -1
- package/lib/components/FunnelChart/funnelGeometry.js +0 -1
- package/lib/components/FunnelChart/funnelGeometry.js.map +1 -1
- package/lib/components/FunnelChart/useFunnelChartStyles.styles.raw.js.map +1 -1
- package/lib/components/GanttChart/GanttChart.js.map +1 -1
- package/lib/components/GanttChart/GanttChart.types.js.map +1 -1
- package/lib/components/GanttChart/useGanttChartStyles.styles.raw.js.map +1 -1
- package/lib/components/GaugeChart/GaugeChart.js +1 -4
- package/lib/components/GaugeChart/GaugeChart.js.map +1 -1
- package/lib/components/GaugeChart/GaugeChart.types.js.map +1 -1
- package/lib/components/GaugeChart/useGaugeChartStyles.styles.raw.js.map +1 -1
- package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js +2 -3
- package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js.map +1 -1
- package/lib/components/GroupedVerticalBarChart/GroupedVerticalBarChart.types.js.map +1 -1
- package/lib/components/GroupedVerticalBarChart/useGroupedVerticalBarChartStyles.styles.raw.js.map +1 -1
- package/lib/components/HeatMapChart/HeatMapChart.js.map +1 -1
- package/lib/components/HorizontalBarChart/HorizontalBarChart.js +1 -1
- package/lib/components/HorizontalBarChart/HorizontalBarChart.js.map +1 -1
- package/lib/components/HorizontalBarChart/HorizontalBarChart.types.js +0 -1
- package/lib/components/HorizontalBarChart/HorizontalBarChart.types.js.map +1 -1
- package/lib/components/HorizontalBarChart/useHorizontalBarChartStyles.styles.raw.js.map +1 -1
- package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js +1 -2
- package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js.map +1 -1
- package/lib/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.types.js.map +1 -1
- package/lib/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.raw.js.map +1 -1
- package/lib/components/Legends/Legends.js +1 -1
- package/lib/components/Legends/Legends.js.map +1 -1
- package/lib/components/Legends/Legends.types.js +3 -1
- package/lib/components/Legends/Legends.types.js.map +1 -1
- package/lib/components/Legends/shape.js.map +1 -1
- package/lib/components/Legends/useLegendsStyles.styles.raw.js.map +1 -1
- package/lib/components/LineChart/LineChart.js +16 -16
- package/lib/components/LineChart/LineChart.js.map +1 -1
- package/lib/components/LineChart/LineChart.types.js.map +1 -1
- package/lib/components/LineChart/eventAnnotation/EventAnnotation.js.map +1 -1
- package/lib/components/LineChart/eventAnnotation/LabelLink.js.map +1 -1
- package/lib/components/LineChart/useLineChartStyles.styles.raw.js.map +1 -1
- package/lib/components/PolarChart/PolarChart.js.map +1 -1
- package/lib/components/PolarChart/PolarChart.types.js +4 -1
- package/lib/components/PolarChart/PolarChart.types.js.map +1 -1
- package/lib/components/PolarChart/PolarChart.utils.js.map +1 -1
- package/lib/components/PolarChart/usePolarChartStyles.styles.raw.js.map +1 -1
- package/lib/components/ResponsiveContainer/ResponsiveContainer.js.map +1 -1
- package/lib/components/ResponsiveContainer/ResponsiveContainer.types.js +4 -1
- package/lib/components/ResponsiveContainer/ResponsiveContainer.types.js.map +1 -1
- package/lib/components/ResponsiveContainer/useResponsiveChildStyles.styles.raw.js.map +1 -1
- package/lib/components/ResponsiveContainer/withResponsiveContainer.js.map +1 -1
- package/lib/components/SankeyChart/SankeyChart.js +2 -2
- package/lib/components/SankeyChart/SankeyChart.js.map +1 -1
- package/lib/components/SankeyChart/SankeyChart.types.js.map +1 -1
- package/lib/components/SankeyChart/useSankeyChartStyles.styles.raw.js.map +1 -1
- package/lib/components/ScatterChart/ScatterChart.js +3 -4
- package/lib/components/ScatterChart/ScatterChart.js.map +1 -1
- package/lib/components/ScatterChart/ScatterChart.types.js +1 -1
- package/lib/components/ScatterChart/ScatterChart.types.js.map +1 -1
- package/lib/components/ScatterChart/useScatterChartStyles.styles.raw.js.map +1 -1
- package/lib/components/Sparkline/Sparkline.js +3 -4
- package/lib/components/Sparkline/Sparkline.js.map +1 -1
- package/lib/components/Sparkline/Sparkline.types.js.map +1 -1
- package/lib/components/Sparkline/useSparklineStyles.styles.raw.js.map +1 -1
- package/lib/components/VegaDeclarativeChart/VegaDeclarativeChartHooks.js.map +1 -1
- package/lib/components/VegaDeclarativeChart/VegaLiteSchemaAdapter.js +1 -1
- package/lib/components/VegaDeclarativeChart/VegaLiteSchemaAdapter.js.map +1 -1
- package/lib/components/VerticalBarChart/VerticalBarChart.js +5 -8
- package/lib/components/VerticalBarChart/VerticalBarChart.js.map +1 -1
- package/lib/components/VerticalBarChart/VerticalBarChart.types.js.map +1 -1
- package/lib/components/VerticalBarChart/useVerticalBarChartStyles.styles.raw.js.map +1 -1
- package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.js +5 -5
- package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.js.map +1 -1
- package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.types.js +4 -1
- package/lib/components/VerticalStackedBarChart/VerticalStackedBarChart.types.js.map +1 -1
- package/lib/components/VerticalStackedBarChart/useVerticalStackedBarChartStyles.styles.raw.js.map +1 -1
- package/lib/types/ChartAnnotation.js +1 -1
- package/lib/types/ChartAnnotation.js.map +1 -1
- package/lib/types/DataPoint.js.map +1 -1
- package/lib/types/EventAnnotation.js +1 -1
- package/lib/types/EventAnnotation.js.map +1 -1
- package/lib/utilities/ChartTitle.js.map +1 -1
- package/lib/utilities/FocusableTooltipText.js.map +1 -1
- package/lib/utilities/async-utils.js +20 -20
- package/lib/utilities/async-utils.js.map +1 -1
- package/lib/utilities/hooks.js.map +1 -1
- package/lib/utilities/image-export-utils.js.map +1 -1
- package/lib/utilities/scatterpolar-utils.js.map +1 -1
- package/lib/utilities/test-data.js.map +1 -1
- package/lib/utilities/utilities.js +4 -7
- package/lib/utilities/utilities.js.map +1 -1
- package/lib/utilities/vbc-utils.js.map +1 -1
- package/lib-commonjs/components/AnnotationOnlyChart/AnnotationOnlyChart.types.js +3 -3
- package/lib-commonjs/components/AnnotationOnlyChart/AnnotationOnlyChart.types.js.map +1 -1
- package/lib-commonjs/components/AreaChart/AreaChart.js +3 -5
- package/lib-commonjs/components/AreaChart/AreaChart.js.map +1 -1
- package/lib-commonjs/components/AreaChart/AreaChart.types.js.map +1 -1
- package/lib-commonjs/components/AreaChart/useAreaChartStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/ChartTable/ChartTable.js.map +1 -1
- package/lib-commonjs/components/ChartTable/ChartTable.types.js +4 -3
- package/lib-commonjs/components/ChartTable/ChartTable.types.js.map +1 -1
- package/lib-commonjs/components/ChartTable/useChartTableStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/Annotations/ChartAnnotationLayer.types.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/Annotations/useChartAnnotationLayer.styles.raw.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/CartesianChart.js +6 -6
- package/lib-commonjs/components/CommonComponents/CartesianChart.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/CartesianChart.types.js +1 -2
- package/lib-commonjs/components/CommonComponents/CartesianChart.types.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/ChartPopover.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/ChartPopover.types.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/useCartesianChartStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/CommonComponents/useChartPopoverStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/DeclarativeChart/DeclarativeChart.js +0 -1
- package/lib-commonjs/components/DeclarativeChart/DeclarativeChart.js.map +1 -1
- package/lib-commonjs/components/DeclarativeChart/PlotlyColorAdapter.js +0 -2
- package/lib-commonjs/components/DeclarativeChart/PlotlyColorAdapter.js.map +1 -1
- package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.js +0 -2
- package/lib-commonjs/components/DeclarativeChart/PlotlySchemaAdapter.js.map +1 -1
- 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.raw.js.map +1 -1
- package/lib-commonjs/components/DonutChart/DonutChart.js +1 -2
- package/lib-commonjs/components/DonutChart/DonutChart.js.map +1 -1
- package/lib-commonjs/components/DonutChart/DonutChart.types.js +4 -3
- package/lib-commonjs/components/DonutChart/DonutChart.types.js.map +1 -1
- package/lib-commonjs/components/DonutChart/Pie/Pie.js +2 -5
- 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.raw.js.map +1 -1
- package/lib-commonjs/components/DonutChart/useDonutChartStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/FunnelChart/FunnelChart.js.map +1 -1
- package/lib-commonjs/components/FunnelChart/FunnelChart.types.js +4 -3
- package/lib-commonjs/components/FunnelChart/FunnelChart.types.js.map +1 -1
- package/lib-commonjs/components/FunnelChart/funnelGeometry.js +0 -2
- package/lib-commonjs/components/FunnelChart/funnelGeometry.js.map +1 -1
- package/lib-commonjs/components/FunnelChart/useFunnelChartStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/GanttChart/GanttChart.js.map +1 -1
- package/lib-commonjs/components/GanttChart/GanttChart.types.js.map +1 -1
- package/lib-commonjs/components/GanttChart/useGanttChartStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/GaugeChart/GaugeChart.js +1 -4
- package/lib-commonjs/components/GaugeChart/GaugeChart.js.map +1 -1
- package/lib-commonjs/components/GaugeChart/GaugeChart.types.js.map +1 -1
- package/lib-commonjs/components/GaugeChart/useGaugeChartStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js +2 -3
- package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.js.map +1 -1
- package/lib-commonjs/components/GroupedVerticalBarChart/GroupedVerticalBarChart.types.js.map +1 -1
- package/lib-commonjs/components/GroupedVerticalBarChart/useGroupedVerticalBarChartStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/HeatMapChart/HeatMapChart.js.map +1 -1
- package/lib-commonjs/components/HorizontalBarChart/HorizontalBarChart.js +1 -1
- package/lib-commonjs/components/HorizontalBarChart/HorizontalBarChart.js.map +1 -1
- package/lib-commonjs/components/HorizontalBarChart/HorizontalBarChart.types.js +3 -3
- package/lib-commonjs/components/HorizontalBarChart/HorizontalBarChart.types.js.map +1 -1
- package/lib-commonjs/components/HorizontalBarChart/useHorizontalBarChartStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js +1 -2
- package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.js.map +1 -1
- package/lib-commonjs/components/HorizontalBarChartWithAxis/HorizontalBarChartWithAxis.types.js.map +1 -1
- package/lib-commonjs/components/HorizontalBarChartWithAxis/useHorizontalBarChartWithAxisStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/Legends/Legends.js +1 -1
- package/lib-commonjs/components/Legends/Legends.js.map +1 -1
- package/lib-commonjs/components/Legends/Legends.types.js +3 -3
- package/lib-commonjs/components/Legends/Legends.types.js.map +1 -1
- package/lib-commonjs/components/Legends/shape.js.map +1 -1
- package/lib-commonjs/components/Legends/useLegendsStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/LineChart/LineChart.js +16 -16
- 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/EventAnnotation.js.map +1 -1
- package/lib-commonjs/components/LineChart/eventAnnotation/LabelLink.js.map +1 -1
- package/lib-commonjs/components/LineChart/useLineChartStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/PolarChart/PolarChart.js.map +1 -1
- package/lib-commonjs/components/PolarChart/PolarChart.types.js +4 -3
- package/lib-commonjs/components/PolarChart/PolarChart.types.js.map +1 -1
- package/lib-commonjs/components/PolarChart/PolarChart.utils.js.map +1 -1
- package/lib-commonjs/components/PolarChart/usePolarChartStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/ResponsiveContainer/ResponsiveContainer.js.map +1 -1
- package/lib-commonjs/components/ResponsiveContainer/ResponsiveContainer.types.js +4 -3
- package/lib-commonjs/components/ResponsiveContainer/ResponsiveContainer.types.js.map +1 -1
- package/lib-commonjs/components/ResponsiveContainer/useResponsiveChildStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/ResponsiveContainer/withResponsiveContainer.js.map +1 -1
- package/lib-commonjs/components/SankeyChart/SankeyChart.js +2 -2
- package/lib-commonjs/components/SankeyChart/SankeyChart.js.map +1 -1
- package/lib-commonjs/components/SankeyChart/SankeyChart.types.js.map +1 -1
- package/lib-commonjs/components/SankeyChart/useSankeyChartStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/ScatterChart/ScatterChart.js +3 -4
- package/lib-commonjs/components/ScatterChart/ScatterChart.js.map +1 -1
- package/lib-commonjs/components/ScatterChart/ScatterChart.types.js +1 -1
- package/lib-commonjs/components/ScatterChart/ScatterChart.types.js.map +1 -1
- package/lib-commonjs/components/ScatterChart/useScatterChartStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/Sparkline/Sparkline.js +3 -4
- package/lib-commonjs/components/Sparkline/Sparkline.js.map +1 -1
- package/lib-commonjs/components/Sparkline/Sparkline.types.js.map +1 -1
- package/lib-commonjs/components/Sparkline/useSparklineStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/VegaDeclarativeChart/VegaDeclarativeChartHooks.js.map +1 -1
- package/lib-commonjs/components/VegaDeclarativeChart/VegaLiteSchemaAdapter.js +1 -1
- package/lib-commonjs/components/VegaDeclarativeChart/VegaLiteSchemaAdapter.js.map +1 -1
- package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.js +5 -8
- package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.js.map +1 -1
- package/lib-commonjs/components/VerticalBarChart/VerticalBarChart.types.js.map +1 -1
- package/lib-commonjs/components/VerticalBarChart/useVerticalBarChartStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.js +5 -5
- package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.js.map +1 -1
- package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.types.js +4 -3
- package/lib-commonjs/components/VerticalStackedBarChart/VerticalStackedBarChart.types.js.map +1 -1
- package/lib-commonjs/components/VerticalStackedBarChart/useVerticalStackedBarChartStyles.styles.raw.js.map +1 -1
- package/lib-commonjs/types/ChartAnnotation.js +0 -2
- package/lib-commonjs/types/ChartAnnotation.js.map +1 -1
- package/lib-commonjs/types/DataPoint.js.map +1 -1
- package/lib-commonjs/types/EventAnnotation.js +0 -2
- package/lib-commonjs/types/EventAnnotation.js.map +1 -1
- package/lib-commonjs/utilities/ChartTitle.js.map +1 -1
- package/lib-commonjs/utilities/FocusableTooltipText.js.map +1 -1
- package/lib-commonjs/utilities/async-utils.js +20 -20
- package/lib-commonjs/utilities/async-utils.js.map +1 -1
- package/lib-commonjs/utilities/hooks.js.map +1 -1
- package/lib-commonjs/utilities/image-export-utils.js.map +1 -1
- package/lib-commonjs/utilities/scatterpolar-utils.js.map +1 -1
- package/lib-commonjs/utilities/test-data.js.map +1 -1
- package/lib-commonjs/utilities/utilities.js +2 -2
- package/lib-commonjs/utilities/utilities.js.map +1 -1
- package/lib-commonjs/utilities/vbc-utils.js.map +1 -1
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/LineChart/LineChart.types.ts"],"sourcesContent":["import { RenderFunction } from '../../utilities/index';\nimport {\n ChartProps,\n LineChartPoints,\n Margins,\n Basestate,\n RefArrayData,\n CustomizedCalloutData,\n} from '../../types/index';\nimport { EventAnnotation } from '../../types/EventAnnotation';\nimport {\n CartesianChartProps,\n CartesianChartStyleProps,\n CartesianChartStyles,\n ChildProps,\n} from '../CommonComponents/index';\n\nexport type { ChildProps, LineChartPoints, Margins, Basestate, RefArrayData };\n\n/**\n * Line Chart properties\n * {@docCategory LineChart}\n */\nexport interface LineChartProps extends CartesianChartProps {\n /**\n * Data to render in the chart.\n */\n data: ChartProps;\n\n /**\n * Call to provide customized styling that will layer on top of the variant rules.\n */\n styles?: LineChartStyles;\n\n /**\n * Show event annotation\n */\n eventAnnotationProps?: EventsAnnotationProps;\n\n /**\n * Define a custom callout renderer for a data point\n */\n onRenderCalloutPerDataPoint?: RenderFunction<CustomizedCalloutData>;\n\n /**\n * Define a custom callout renderer for a stack; default is to render per data point\n */\n onRenderCalloutPerStack?: RenderFunction<CustomizedCalloutData>;\n\n /**\n * Callback for getting callout description message\n */\n getCalloutDescriptionMessage?: (calloutDataProps: CustomizedCalloutData) => string | undefined;\n\n /*\n * Color fill bars for the chart,\n */\n colorFillBars?: ColorFillBarsProps[];\n\n /**\n * if this is set to true, then for each line there will be a unique shape assigned to the point,\n * there are total 8 shapes which are as follow circle, square, triangele, diamond, pyramid,\n * hexagon, pentagon and octagon, which will get assigned as respectively, if there are more\n * than 8 lines in the line chart then it will again start from cicle to octagon.\n * setting this flag to true will also change the behavior of the points, like for a\n * line, last point shape and first point shape will be visible all the times, and all\n * other points will get enlarge only when hovered over them\n * if set to false default shape will be circle, with the existing behavior\n * @default false\n */\n allowMultipleShapesForPoints?: boolean;\n\n /*\n * Optimize line chart rendering for large data set. If this prop is enabled, line chart\n * can easily render over 10K datapoints with multiple lines smoothly.\n * This rendering mechanism does not support gaps in lines.\n */\n optimizeLargeData?: boolean;\n\n /**\n * The prop used to define the culture to localized the numbers\n */\n culture?: string;\n\n /**\n * @default false\n * The prop used to enable the perf optimization\n */\n enablePerfOptimization?: boolean;\n\n /**\n * To enable callout for individual line or complete stack.\n * @default true\n * @type \\{boolean \\}\n */\n isCalloutForStack?: boolean;\n}\n\n/**\n * {@docCategory LineChart}\n */\nexport interface EventsAnnotationProps {\n events: EventAnnotation[];\n strokeColor?: string;\n labelColor?: string;\n labelHeight?: number;\n labelWidth?: number;\n mergedLabel: (count: number) => string;\n}\n\n/**\n * Line Chart styles\n * {@docCategory LineChart}\n */\nexport interface LineChartStyles extends CartesianChartStyles {\n /**\n * styles for line border\n */\n lineBorder?: string;\n\n /**\n * styles for marker label\n */\n markerLabel?: string;\n}\n\n/**\n * Line Chart style properties\n * {@docCategory LineChart}\n */\nexport interface LineChartStyleProps extends CartesianChartStyleProps {}\n\n/**\n * {@docCategory LineChart}\n */\nexport interface ColorFillBarsProps {\n legend: string;\n color: string;\n data: ColorFillBarData[];\n applyPattern?: boolean;\n onLegendClick?: (selectedLegend: string | string[] | null) => void | undefined;\n}\n\n/**\n * {@docCategory LineChart}\n */\nexport interface ColorFillBarData {\n startX: number | Date;\n endX: number | Date;\n}\n"],"names":[],"mappings":"AA+IA;;CAEC,GACD,WAGC"}
|
|
1
|
+
{"version":3,"sources":["../src/components/LineChart/LineChart.types.ts"],"sourcesContent":["import type { RenderFunction } from '../../utilities/index';\nimport type {\n ChartProps,\n LineChartPoints,\n Margins,\n Basestate,\n RefArrayData,\n CustomizedCalloutData,\n} from '../../types/index';\nimport type { EventAnnotation } from '../../types/EventAnnotation';\nimport type {\n CartesianChartProps,\n CartesianChartStyleProps,\n CartesianChartStyles,\n ChildProps,\n} from '../CommonComponents/index';\n\nexport type { ChildProps, LineChartPoints, Margins, Basestate, RefArrayData };\n\n/**\n * Line Chart properties\n * {@docCategory LineChart}\n */\nexport interface LineChartProps extends CartesianChartProps {\n /**\n * Data to render in the chart.\n */\n data: ChartProps;\n\n /**\n * Call to provide customized styling that will layer on top of the variant rules.\n */\n styles?: LineChartStyles;\n\n /**\n * Show event annotation\n */\n eventAnnotationProps?: EventsAnnotationProps;\n\n /**\n * Define a custom callout renderer for a data point\n */\n onRenderCalloutPerDataPoint?: RenderFunction<CustomizedCalloutData>;\n\n /**\n * Define a custom callout renderer for a stack; default is to render per data point\n */\n onRenderCalloutPerStack?: RenderFunction<CustomizedCalloutData>;\n\n /**\n * Callback for getting callout description message\n */\n getCalloutDescriptionMessage?: (calloutDataProps: CustomizedCalloutData) => string | undefined;\n\n /*\n * Color fill bars for the chart,\n */\n colorFillBars?: ColorFillBarsProps[];\n\n /**\n * if this is set to true, then for each line there will be a unique shape assigned to the point,\n * there are total 8 shapes which are as follow circle, square, triangele, diamond, pyramid,\n * hexagon, pentagon and octagon, which will get assigned as respectively, if there are more\n * than 8 lines in the line chart then it will again start from cicle to octagon.\n * setting this flag to true will also change the behavior of the points, like for a\n * line, last point shape and first point shape will be visible all the times, and all\n * other points will get enlarge only when hovered over them\n * if set to false default shape will be circle, with the existing behavior\n * @default false\n */\n allowMultipleShapesForPoints?: boolean;\n\n /*\n * Optimize line chart rendering for large data set. If this prop is enabled, line chart\n * can easily render over 10K datapoints with multiple lines smoothly.\n * This rendering mechanism does not support gaps in lines.\n */\n optimizeLargeData?: boolean;\n\n /**\n * The prop used to define the culture to localized the numbers\n */\n culture?: string;\n\n /**\n * @default false\n * The prop used to enable the perf optimization\n */\n enablePerfOptimization?: boolean;\n\n /**\n * To enable callout for individual line or complete stack.\n * @default true\n * @type \\{boolean \\}\n */\n isCalloutForStack?: boolean;\n}\n\n/**\n * {@docCategory LineChart}\n */\nexport interface EventsAnnotationProps {\n events: EventAnnotation[];\n strokeColor?: string;\n labelColor?: string;\n labelHeight?: number;\n labelWidth?: number;\n mergedLabel: (count: number) => string;\n}\n\n/**\n * Line Chart styles\n * {@docCategory LineChart}\n */\nexport interface LineChartStyles extends CartesianChartStyles {\n /**\n * styles for line border\n */\n lineBorder?: string;\n\n /**\n * styles for marker label\n */\n markerLabel?: string;\n}\n\n/**\n * Line Chart style properties\n * {@docCategory LineChart}\n */\nexport interface LineChartStyleProps extends CartesianChartStyleProps {}\n\n/**\n * {@docCategory LineChart}\n */\nexport interface ColorFillBarsProps {\n legend: string;\n color: string;\n data: ColorFillBarData[];\n applyPattern?: boolean;\n onLegendClick?: (selectedLegend: string | string[] | null) => void | undefined;\n}\n\n/**\n * {@docCategory LineChart}\n */\nexport interface ColorFillBarData {\n startX: number | Date;\n endX: number | Date;\n}\n"],"names":[],"mappings":"AA+IA;;CAEC,GACD,WAGC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/LineChart/eventAnnotation/EventAnnotation.tsx"],"sourcesContent":["import * as React from 'react';\nimport { ScaleTime } from 'd3-scale';\nimport { tokens } from '@fluentui/react-theme';\nimport { findIndex } from '../../../utilities/index';\nimport { LineDef, LabelLink
|
|
1
|
+
{"version":3,"sources":["../src/components/LineChart/eventAnnotation/EventAnnotation.tsx"],"sourcesContent":["import * as React from 'react';\nimport type { ScaleTime } from 'd3-scale';\nimport { tokens } from '@fluentui/react-theme';\nimport { findIndex } from '../../../utilities/index';\nimport type { LineDef, LabelDef } from './LabelLink';\nimport { LabelLink } from './LabelLink';\nimport type { EventsAnnotationProps } from '../LineChart.types';\nimport { getColorFromToken } from '../../../utilities/colors';\n\ninterface IEventsAnnotationExtendProps extends EventsAnnotationProps {\n scale: ScaleTime<number, number>;\n chartYBottom: number;\n chartYTop: number;\n}\n\nexport const EventsAnnotation: React.FunctionComponent<IEventsAnnotationExtendProps> = props => {\n const textWidth = props.labelWidth ? props.labelWidth : 105;\n const textY = props.chartYTop - 20;\n const lineTopY = textY + 7;\n const textPadding = 5;\n const lineHeight = 18;\n const fontSize = '10pt';\n const axisRange = props.scale.range();\n\n const lineDefs: LineDef[] = props.events.map(e => ({ ...e, x: props.scale(e.date) }));\n\n lineDefs.sort((e1, e2) => +e1.date - +e2.date);\n\n const fill: string | undefined = props.strokeColor\n ? getColorFromToken(props.strokeColor, false /*ToDo fix */)\n : tokens.colorNeutralForeground1;\n\n const lines = uniqBy(lineDefs, x => x.date.toString()).map((x, i) => (\n <line key={i} x1={x.x} x2={x.x} y1={lineTopY} y2={props.chartYBottom} stroke={fill} strokeDasharray=\"8\" />\n ));\n\n const labelLinks = calculateLabels(lineDefs, textWidth + textPadding, axisRange[1], axisRange[0]).map((x, i) => (\n <LabelLink\n key={i}\n {...{\n lineDefs,\n labelDef: x,\n textY,\n textWidth,\n textLineHeight: lineHeight,\n textFontSize: fontSize,\n textColor: props.labelColor,\n mergedLabel: props.mergedLabel,\n }}\n />\n ));\n\n return (\n <>\n {lines}\n {labelLinks}\n </>\n );\n};\n\nfunction calculateLabels(lineDefs: LineDef[], textWidth: number, maxX: number, minX: number): LabelDef[] {\n const calculateLabel = (lastX: number, currentIdx: number): LabelDef[] => {\n // base case 1\n if (currentIdx === lineDefs.length) {\n return [];\n }\n\n const { x } = lineDefs[currentIdx];\n const leftXBoundary = x - textWidth;\n\n // cannot render on top of other text\n if (x < lastX) {\n return [];\n }\n\n // base case 2\n if (currentIdx === lineDefs.length - 1) {\n if (lastX < leftXBoundary) {\n return [{ x, anchor: 'end', aggregatedIdx: [currentIdx] }];\n } else if (x + textWidth < maxX) {\n return [{ x, anchor: 'start', aggregatedIdx: [currentIdx] }];\n }\n\n return [];\n }\n\n if (lastX < leftXBoundary) {\n // label on left side\n return backtrack(currentIdx, 'end');\n } else {\n // label on right side\n return backtrack(currentIdx, 'start');\n }\n };\n\n const backtrack = (currentIdx: number, anchor: 'start' | 'end'): LabelDef[] => {\n const bd = anchor === 'end' ? lineDefs[currentIdx].x : lineDefs[currentIdx].x + textWidth;\n\n let idx = findIndex(\n lineDefs,\n ds => ds.x > bd && (ds.x - textWidth >= bd || ds.x + textWidth < maxX),\n currentIdx + 1,\n );\n if (idx === -1) {\n idx = lineDefs.length;\n }\n\n const aggregatedIdx: number[] = [];\n for (let i = currentIdx; i < idx; i++) {\n aggregatedIdx.push(i);\n }\n const next = calculateLabel(bd, idx);\n\n next.unshift({ x: lineDefs[currentIdx].x, anchor, aggregatedIdx });\n return next;\n };\n\n return calculateLabel(minX, 0);\n}\n\n/** Get unique items of `arr`, comparing based on the result of calling `iteratee` on each item. */\nfunction uniqBy<T>(arr: T[], iteratee: (x: T) => string): T[] {\n const seen: string[] = [];\n const result: T[] = [];\n for (const x of arr) {\n const comp = iteratee(x);\n if (seen.indexOf(comp) === -1) {\n result.push(x);\n seen.push(comp);\n }\n }\n return result;\n}\n"],"names":["React","tokens","findIndex","LabelLink","getColorFromToken","EventsAnnotation","props","textWidth","labelWidth","textY","chartYTop","lineTopY","textPadding","lineHeight","fontSize","axisRange","scale","range","lineDefs","events","map","e","x","date","sort","e1","e2","fill","strokeColor","colorNeutralForeground1","lines","uniqBy","toString","i","line","key","x1","x2","y1","y2","chartYBottom","stroke","strokeDasharray","labelLinks","calculateLabels","labelDef","textLineHeight","textFontSize","textColor","labelColor","mergedLabel","maxX","minX","calculateLabel","lastX","currentIdx","length","leftXBoundary","anchor","aggregatedIdx","backtrack","bd","idx","ds","push","next","unshift","arr","iteratee","seen","result","comp","indexOf"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/LineChart/eventAnnotation/LabelLink.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { EventAnnotation } from '../../../types/EventAnnotation';\nimport { Textbox } from './Textbox';\nimport { getColorFromToken } from '../../../utilities/colors';\nimport { tokens } from '@fluentui/react-theme';\n\nexport interface LineDef extends EventAnnotation {\n x: number;\n}\n\nexport interface LabelDef {\n x: number;\n aggregatedIdx: number[];\n anchor: 'start' | 'end';\n}\n\ninterface LabelLinkProps {\n lineDefs: LineDef[];\n labelDef: LabelDef;\n textY: number;\n textWidth: number;\n textLineHeight: number;\n textFontSize: string;\n textColor: string | undefined;\n mergedLabel: (count: number) => string;\n}\n\nexport const LabelLink: React.FunctionComponent<LabelLinkProps> = props => {\n const gRef = React.useRef<SVGGElement>(null);\n const [showCard, setShowCard] = React.useState(false);\n const onClick = () => setShowCard(true);\n\n let callout: React.ReactNode = null;\n if (showCard) {\n const cards = props.labelDef.aggregatedIdx.map(i => props.lineDefs[i].onRenderCard!).filter(c => !!c);\n if (cards.length > 0) {\n callout = null;\n // TODO - need to replace callout with popover\n /*callout = {\n /* <Callout\n target={gRef.current}\n // eslint-disable-next-line react/jsx-no-bind\n onDismiss={onDismiss}\n setInitialFocus={true}\n role=\"dialog\"\n >\n <FocusZone isCircularNavigation={true} direction={FocusZoneDirection.vertical}>\n <List<() => React.ReactNode>\n items={cards}\n // eslint-disable-next-line react/jsx-no-bind\n onRenderCell={onRenderCell}\n />\n </FocusZone>\n </Callout>\n };*/\n }\n }\n\n let text: string;\n const fill: string | undefined = props.textColor\n ? getColorFromToken(props.textColor, false)\n : tokens.colorNeutralForeground1;\n\n if (props.labelDef.aggregatedIdx.length === 1) {\n text = props.lineDefs[props.labelDef.aggregatedIdx[0]].event;\n } else {\n text = props.mergedLabel(props.labelDef.aggregatedIdx.length);\n }\n\n return (\n <>\n <g ref={gRef} onClick={onClick} data-is-focusable={false} style={{ cursor: 'pointer' }} role=\"button\">\n <Textbox\n text={text}\n x={props.labelDef.x}\n y={props.textY}\n width={props.textWidth}\n lineHeight={props.textLineHeight}\n textAnchor={props.labelDef.anchor}\n fontSize={props.textFontSize}\n fill={fill}\n />\n </g>\n {callout}\n </>\n );\n};\n"],"names":["React","Textbox","getColorFromToken","tokens","LabelLink","props","gRef","useRef","showCard","setShowCard","useState","onClick","callout","cards","labelDef","aggregatedIdx","map","i","lineDefs","onRenderCard","filter","c","length","text","fill","textColor","colorNeutralForeground1","event","mergedLabel","g","ref","data-is-focusable","style","cursor","role","x","y","textY","width","textWidth","lineHeight","textLineHeight","textAnchor","anchor","fontSize","textFontSize"],"mappings":"AAAA;AAEA,YAAYA,WAAW,QAAQ;AAE/B,SAASC,OAAO,QAAQ,YAAY;AACpC,SAASC,iBAAiB,QAAQ,4BAA4B;AAC9D,SAASC,MAAM,QAAQ,wBAAwB;AAuB/C,OAAO,MAAMC,YAAqDC,CAAAA;IAChE,MAAMC,OAAON,MAAMO,MAAM,CAAc;IACvC,MAAM,CAACC,UAAUC,YAAY,GAAGT,MAAMU,QAAQ,CAAC;IAC/C,MAAMC,UAAU,IAAMF,YAAY;IAElC,IAAIG,UAA2B;IAC/B,IAAIJ,UAAU;QACZ,MAAMK,QAAQR,MAAMS,QAAQ,CAACC,aAAa,CAACC,GAAG,CAACC,CAAAA,IAAKZ,MAAMa,QAAQ,CAACD,EAAE,CAACE,YAAY,EAAGC,MAAM,CAACC,CAAAA,IAAK,CAAC,CAACA;QACnG,IAAIR,MAAMS,MAAM,GAAG,GAAG;YACpBV,UAAU;QACV,8CAA8C;QAC9C;;;;;;;;;;;;;;;;QAgBE,GACJ;IACF;IAEA,IAAIW;IACJ,MAAMC,OAA2BnB,MAAMoB,SAAS,GAC5CvB,kBAAkBG,MAAMoB,SAAS,EAAE,SACnCtB,OAAOuB,uBAAuB;IAElC,IAAIrB,MAAMS,QAAQ,CAACC,aAAa,CAACO,MAAM,KAAK,GAAG;QAC7CC,OAAOlB,MAAMa,QAAQ,CAACb,MAAMS,QAAQ,CAACC,aAAa,CAAC,EAAE,CAAC,CAACY,KAAK;IAC9D,OAAO;QACLJ,OAAOlB,MAAMuB,WAAW,CAACvB,MAAMS,QAAQ,CAACC,aAAa,CAACO,MAAM;IAC9D;IAEA,qBACE,wDACE,oBAACO;QAAEC,KAAKxB;QAAMK,SAASA;QAASoB,qBAAmB;QAAOC,OAAO;YAAEC,QAAQ;QAAU;QAAGC,MAAK;qBAC3F,oBAACjC;QACCsB,MAAMA;QACNY,GAAG9B,MAAMS,QAAQ,CAACqB,CAAC;QACnBC,GAAG/B,MAAMgC,KAAK;QACdC,OAAOjC,MAAMkC,SAAS;QACtBC,YAAYnC,MAAMoC,cAAc;QAChCC,YAAYrC,MAAMS,QAAQ,CAAC6B,MAAM;QACjCC,UAAUvC,MAAMwC,YAAY;QAC5BrB,MAAMA;SAGTZ;AAGP,EAAE"}
|
|
1
|
+
{"version":3,"sources":["../src/components/LineChart/eventAnnotation/LabelLink.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport type { EventAnnotation } from '../../../types/EventAnnotation';\nimport { Textbox } from './Textbox';\nimport { getColorFromToken } from '../../../utilities/colors';\nimport { tokens } from '@fluentui/react-theme';\n\nexport interface LineDef extends EventAnnotation {\n x: number;\n}\n\nexport interface LabelDef {\n x: number;\n aggregatedIdx: number[];\n anchor: 'start' | 'end';\n}\n\ninterface LabelLinkProps {\n lineDefs: LineDef[];\n labelDef: LabelDef;\n textY: number;\n textWidth: number;\n textLineHeight: number;\n textFontSize: string;\n textColor: string | undefined;\n mergedLabel: (count: number) => string;\n}\n\nexport const LabelLink: React.FunctionComponent<LabelLinkProps> = props => {\n const gRef = React.useRef<SVGGElement>(null);\n const [showCard, setShowCard] = React.useState(false);\n const onClick = () => setShowCard(true);\n\n let callout: React.ReactNode = null;\n if (showCard) {\n const cards = props.labelDef.aggregatedIdx.map(i => props.lineDefs[i].onRenderCard!).filter(c => !!c);\n if (cards.length > 0) {\n callout = null;\n // TODO - need to replace callout with popover\n /*callout = {\n /* <Callout\n target={gRef.current}\n // eslint-disable-next-line react/jsx-no-bind\n onDismiss={onDismiss}\n setInitialFocus={true}\n role=\"dialog\"\n >\n <FocusZone isCircularNavigation={true} direction={FocusZoneDirection.vertical}>\n <List<() => React.ReactNode>\n items={cards}\n // eslint-disable-next-line react/jsx-no-bind\n onRenderCell={onRenderCell}\n />\n </FocusZone>\n </Callout>\n };*/\n }\n }\n\n let text: string;\n const fill: string | undefined = props.textColor\n ? getColorFromToken(props.textColor, false)\n : tokens.colorNeutralForeground1;\n\n if (props.labelDef.aggregatedIdx.length === 1) {\n text = props.lineDefs[props.labelDef.aggregatedIdx[0]].event;\n } else {\n text = props.mergedLabel(props.labelDef.aggregatedIdx.length);\n }\n\n return (\n <>\n <g ref={gRef} onClick={onClick} data-is-focusable={false} style={{ cursor: 'pointer' }} role=\"button\">\n <Textbox\n text={text}\n x={props.labelDef.x}\n y={props.textY}\n width={props.textWidth}\n lineHeight={props.textLineHeight}\n textAnchor={props.labelDef.anchor}\n fontSize={props.textFontSize}\n fill={fill}\n />\n </g>\n {callout}\n </>\n );\n};\n"],"names":["React","Textbox","getColorFromToken","tokens","LabelLink","props","gRef","useRef","showCard","setShowCard","useState","onClick","callout","cards","labelDef","aggregatedIdx","map","i","lineDefs","onRenderCard","filter","c","length","text","fill","textColor","colorNeutralForeground1","event","mergedLabel","g","ref","data-is-focusable","style","cursor","role","x","y","textY","width","textWidth","lineHeight","textLineHeight","textAnchor","anchor","fontSize","textFontSize"],"mappings":"AAAA;AAEA,YAAYA,WAAW,QAAQ;AAE/B,SAASC,OAAO,QAAQ,YAAY;AACpC,SAASC,iBAAiB,QAAQ,4BAA4B;AAC9D,SAASC,MAAM,QAAQ,wBAAwB;AAuB/C,OAAO,MAAMC,YAAqDC,CAAAA;IAChE,MAAMC,OAAON,MAAMO,MAAM,CAAc;IACvC,MAAM,CAACC,UAAUC,YAAY,GAAGT,MAAMU,QAAQ,CAAC;IAC/C,MAAMC,UAAU,IAAMF,YAAY;IAElC,IAAIG,UAA2B;IAC/B,IAAIJ,UAAU;QACZ,MAAMK,QAAQR,MAAMS,QAAQ,CAACC,aAAa,CAACC,GAAG,CAACC,CAAAA,IAAKZ,MAAMa,QAAQ,CAACD,EAAE,CAACE,YAAY,EAAGC,MAAM,CAACC,CAAAA,IAAK,CAAC,CAACA;QACnG,IAAIR,MAAMS,MAAM,GAAG,GAAG;YACpBV,UAAU;QACV,8CAA8C;QAC9C;;;;;;;;;;;;;;;;QAgBE,GACJ;IACF;IAEA,IAAIW;IACJ,MAAMC,OAA2BnB,MAAMoB,SAAS,GAC5CvB,kBAAkBG,MAAMoB,SAAS,EAAE,SACnCtB,OAAOuB,uBAAuB;IAElC,IAAIrB,MAAMS,QAAQ,CAACC,aAAa,CAACO,MAAM,KAAK,GAAG;QAC7CC,OAAOlB,MAAMa,QAAQ,CAACb,MAAMS,QAAQ,CAACC,aAAa,CAAC,EAAE,CAAC,CAACY,KAAK;IAC9D,OAAO;QACLJ,OAAOlB,MAAMuB,WAAW,CAACvB,MAAMS,QAAQ,CAACC,aAAa,CAACO,MAAM;IAC9D;IAEA,qBACE,wDACE,oBAACO;QAAEC,KAAKxB;QAAMK,SAASA;QAASoB,qBAAmB;QAAOC,OAAO;YAAEC,QAAQ;QAAU;QAAGC,MAAK;qBAC3F,oBAACjC;QACCsB,MAAMA;QACNY,GAAG9B,MAAMS,QAAQ,CAACqB,CAAC;QACnBC,GAAG/B,MAAMgC,KAAK;QACdC,OAAOjC,MAAMkC,SAAS;QACtBC,YAAYnC,MAAMoC,cAAc;QAChCC,YAAYrC,MAAMS,QAAQ,CAAC6B,MAAM;QACjCC,UAAUvC,MAAMwC,YAAY;QAC5BrB,MAAMA;SAGTZ;AAGP,EAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/LineChart/useLineChartStyles.styles.ts"],"sourcesContent":["'use client';\n\nimport { GriffelStyle
|
|
1
|
+
{"version":3,"sources":["../src/components/LineChart/useLineChartStyles.styles.ts"],"sourcesContent":["'use client';\n\nimport type { GriffelStyle } from '@griffel/react';\nimport { makeStyles, mergeClasses } from '@griffel/react';\nimport { tokens } from '@fluentui/react-theme';\nimport type { LineChartProps, LineChartStyles } from './LineChart.types';\nimport type { SlotClassNames } from '@fluentui/react-utilities/src/index';\nimport { HighContrastSelector } from '../../utilities/index';\nimport { getMarkerLabelStyle, getTooltipStyle } from '../../utilities/index';\n\n/**\n * @internal\n */\nexport const linechartClassNames: SlotClassNames<LineChartStyles> = {\n tooltip: 'fui-line__tooltip',\n lineBorder: 'fui-line_lineBorder',\n markerLabel: 'fui-line__markerLabel',\n root: 'fui-line__root',\n xAxis: 'fui-line__xAxis',\n yAxis: 'fui-line__yAxis',\n legendContainer: 'fui-line__legendContainer',\n hover: 'fui-line__hover',\n descriptionMessage: 'fui-line__descriptionMessage',\n axisTitle: 'fui-line__axisTitle',\n chartTitle: 'fui-line__chartTitle',\n opacityChangeOnHover: 'fui-line__opacityChangeOnHover',\n shapeStyles: 'fui-line__shapeStyles',\n chartWrapper: 'fui-line__chartWrapper',\n svgTooltip: '',\n chart: '',\n axisAnnotation: '',\n plotContainer: '',\n annotationLayer: '',\n};\n\n/**\n * Base Styles\n */\nconst useStyles = makeStyles({\n tooltip: getTooltipStyle() as GriffelStyle,\n markerLabel: getMarkerLabelStyle() as GriffelStyle,\n lineBorder: {\n stroke: tokens.colorNeutralBackground1,\n [HighContrastSelector]: {\n stroke: 'Canvas',\n },\n },\n});\n\n/**\n * Apply styling to the Carousel slots based on the state\n */\nexport const useLineChartStyles = (props: LineChartProps): LineChartStyles => {\n const baseStyles = useStyles();\n return {\n tooltip: mergeClasses(linechartClassNames.tooltip, baseStyles.tooltip /*props.styles?.tooltip*/),\n lineBorder: mergeClasses(linechartClassNames.lineBorder, baseStyles.lineBorder /*props.styles?.lineBorder*/),\n markerLabel: mergeClasses(linechartClassNames.markerLabel, baseStyles.markerLabel /*props.styles?.markerLabel*/),\n };\n};\n"],"names":["makeStyles","mergeClasses","tokens","HighContrastSelector","getMarkerLabelStyle","getTooltipStyle","linechartClassNames","tooltip","lineBorder","markerLabel","root","xAxis","yAxis","legendContainer","hover","descriptionMessage","axisTitle","chartTitle","opacityChangeOnHover","shapeStyles","chartWrapper","svgTooltip","chart","axisAnnotation","plotContainer","annotationLayer","useStyles","stroke","colorNeutralBackground1","useLineChartStyles","props","baseStyles"],"mappings":"AAAA;AAGA,SAASA,UAAU,EAAEC,YAAY,QAAQ,iBAAiB;AAC1D,SAASC,MAAM,QAAQ,wBAAwB;AAG/C,SAASC,oBAAoB,QAAQ,wBAAwB;AAC7D,SAASC,mBAAmB,EAAEC,eAAe,QAAQ,wBAAwB;AAE7E;;CAEC,GACD,OAAO,MAAMC,sBAAuD;IAClEC,SAAS;IACTC,YAAY;IACZC,aAAa;IACbC,MAAM;IACNC,OAAO;IACPC,OAAO;IACPC,iBAAiB;IACjBC,OAAO;IACPC,oBAAoB;IACpBC,WAAW;IACXC,YAAY;IACZC,sBAAsB;IACtBC,aAAa;IACbC,cAAc;IACdC,YAAY;IACZC,OAAO;IACPC,gBAAgB;IAChBC,eAAe;IACfC,iBAAiB;AACnB,EAAE;AAEF;;CAEC,GACD,MAAMC,YAAY1B,WAAW;IAC3BO,SAASF;IACTI,aAAaL;IACbI,YAAY;QACVmB,QAAQzB,OAAO0B,uBAAuB;QACtC,CAACzB,qBAAqB,EAAE;YACtBwB,QAAQ;QACV;IACF;AACF;AAEA;;CAEC,GACD,OAAO,MAAME,qBAAqB,CAACC;IACjC,MAAMC,aAAaL;IACnB,OAAO;QACLnB,SAASN,aAAaK,oBAAoBC,OAAO,EAAEwB,WAAWxB,OAAO,CAAC,uBAAuB;QAC7FC,YAAYP,aAAaK,oBAAoBE,UAAU,EAAEuB,WAAWvB,UAAU,CAAC,0BAA0B;QACzGC,aAAaR,aAAaK,oBAAoBG,WAAW,EAAEsB,WAAWtB,WAAW,CAAC,2BAA2B;IAC/G;AACF,EAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/PolarChart/PolarChart.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { PolarChartProps } from './PolarChart.types';\nimport { usePolarChartStyles } from './usePolarChartStyles.styles';\nimport { useImageExport } from '../../utilities/hooks';\nimport {\n pointRadial as d3PointRadial,\n areaRadial as d3AreaRadial,\n lineRadial as d3LineRadial,\n curveLinearClosed as d3CurveLinearClosed,\n} from 'd3-shape';\nimport { AreaPolarSeries, LinePolarSeries, PolarDataPoint, ScatterPolarSeries } from '../../types/DataPoint';\nimport { tokens } from '@fluentui/react-theme';\nimport { Legend, Legends } from '../Legends/index';\nimport {\n createRadialScale,\n getContinuousScaleDomain,\n getScaleType,\n EPSILON,\n createAngularScale,\n formatAngle,\n} from './PolarChart.utils';\nimport { ChartPopover } from '../CommonComponents/ChartPopover';\nimport {\n getColorFromToken,\n getCurveFactory,\n getNextColor,\n isPlottable,\n sortAxisCategories,\n} from '../../utilities/index';\nimport { extent as d3Extent } from 'd3-array';\nimport { useArrowNavigationGroup } from '@fluentui/react-tabster';\nimport { formatToLocaleString } from '@fluentui/chart-utilities';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\n\nconst DEFAULT_LEGEND_HEIGHT = 32;\nconst LABEL_WIDTH = 36;\nconst LABEL_HEIGHT = 16;\nconst LABEL_OFFSET = 10;\nconst TICK_SIZE = 6;\nconst MIN_MARKER_SIZE_PX = 2;\nconst MAX_MARKER_SIZE_PX = 16;\nconst MIN_MARKER_SIZE_PX_MARKERS_ONLY = 4;\n\nexport const PolarChart: React.FunctionComponent<PolarChartProps> = React.forwardRef<HTMLDivElement, PolarChartProps>(\n (props, forwardedRef) => {\n const { chartContainerRef, legendsRef } = useImageExport(props.componentRef, props.hideLegend, false);\n const legendContainerRef = React.useRef<HTMLDivElement>(null);\n const { targetDocument } = useFluent();\n const _window = targetDocument?.defaultView;\n\n const [containerWidth, setContainerWidth] = React.useState<number>(200);\n const [containerHeight, setContainerHeight] = React.useState<number>(200);\n const [legendContainerHeight, setLegendContainerHeight] = React.useState<number>(\n props.hideLegend ? 0 : DEFAULT_LEGEND_HEIGHT,\n );\n const [isPopoverOpen, setPopoverOpen] = React.useState<boolean>(false);\n const [popoverTarget, setPopoverTarget] = React.useState<SVGElement | null>(null);\n const [popoverXValue, setPopoverXValue] = React.useState<string>('');\n const [popoverLegend, setPopoverLegend] = React.useState<string>('');\n const [popoverColor, setPopoverColor] = React.useState<string>('');\n const [popoverYValue, setPopoverYValue] = React.useState<string>('');\n const [hoveredLegend, setHoveredLegend] = React.useState<string>('');\n const [selectedLegends, setSelectedLegends] = React.useState<string[]>(props.legendProps?.selectedLegends || []);\n const [activePoint, setActivePoint] = React.useState<string>('');\n\n React.useEffect(() => {\n if (chartContainerRef.current) {\n const { width, height } = chartContainerRef.current.getBoundingClientRect();\n setContainerWidth(width);\n setContainerHeight(height);\n }\n }, [chartContainerRef]);\n React.useEffect(() => {\n if (props.hideLegend) {\n setLegendContainerHeight(0);\n } else if (legendContainerRef.current) {\n const { height } = legendContainerRef.current.getBoundingClientRect();\n const marginTop = _window?.getComputedStyle(legendContainerRef.current).marginTop || '0px';\n setLegendContainerHeight(Math.max(height, DEFAULT_LEGEND_HEIGHT) + parseFloat(marginTop));\n }\n }, [props.hideLegend, _window]);\n\n React.useEffect(() => {\n setSelectedLegends(props.legendProps?.selectedLegends || []);\n }, [props.legendProps?.selectedLegends]);\n\n const margins = React.useMemo(\n () => ({\n left: LABEL_OFFSET + LABEL_WIDTH,\n right: LABEL_OFFSET + LABEL_WIDTH,\n top: LABEL_OFFSET + LABEL_HEIGHT,\n bottom: LABEL_OFFSET + LABEL_HEIGHT,\n ...props.margins,\n }),\n [props.margins],\n );\n\n const svgWidth = React.useMemo(() => props.width || containerWidth, [props.width, containerWidth]);\n const svgHeight = React.useMemo(\n () => (props.height || containerHeight) - legendContainerHeight,\n [props.height, containerHeight, legendContainerHeight],\n );\n const outerRadius = React.useMemo(\n () => Math.min(svgWidth - (margins.left + margins.right), svgHeight - (margins.top + margins.bottom)) / 2,\n [svgWidth, svgHeight, margins],\n );\n const innerRadius = React.useMemo(\n () => Math.max(0, Math.min(Math.abs(props.hole || 0), 1)) * outerRadius,\n [props.hole, outerRadius],\n );\n\n const legendColorMap = React.useRef<Record<string, string>>({});\n const chartData = React.useMemo(() => {\n legendColorMap.current = {};\n let colorIndex = 0;\n const renderingOrder = ['areapolar', 'linepolar', 'scatterpolar'];\n\n return props.data\n .map(series => {\n const seriesColor = series.color ? getColorFromToken(series.color) : getNextColor(colorIndex++, 0);\n if (!(series.legend in legendColorMap.current)) {\n legendColorMap.current[series.legend] = seriesColor;\n }\n\n return {\n ...series,\n color: seriesColor,\n data: series.data.map(point => {\n return {\n ...point,\n color: point.color ? getColorFromToken(point.color) : seriesColor,\n };\n }),\n };\n })\n .sort((a, b) => {\n return renderingOrder.indexOf(a.type) - renderingOrder.indexOf(b.type);\n });\n }, [props.data]);\n\n const mapCategoryToValues = React.useCallback(\n (isAngularAxis?: boolean) => {\n const categoryToValues: Record<string, number[]> = {};\n chartData.forEach(series => {\n series.data.forEach(point => {\n const category = (isAngularAxis ? point.theta : point.r) as string;\n if (!categoryToValues[category]) {\n categoryToValues[category] = [];\n }\n const value = isAngularAxis ? point.r : point.theta;\n if (typeof value === 'number') {\n categoryToValues[category].push(value);\n }\n });\n });\n return categoryToValues;\n },\n [chartData],\n );\n\n const getOrderedRCategories = React.useCallback(() => {\n return sortAxisCategories(mapCategoryToValues(), props.radialAxis?.categoryOrder);\n }, [mapCategoryToValues, props.radialAxis?.categoryOrder]);\n\n const getOrderedACategories = React.useCallback(() => {\n return sortAxisCategories(mapCategoryToValues(true), props.angularAxis?.categoryOrder);\n }, [mapCategoryToValues, props.angularAxis?.categoryOrder]);\n\n const rValues = React.useMemo(() => chartData.flatMap(series => series.data.map(point => point.r)), [chartData]);\n const rScaleType = React.useMemo(\n () =>\n getScaleType(rValues, {\n scaleType: props.radialAxis?.scaleType,\n supportsLog: true,\n }),\n [rValues, props.radialAxis?.scaleType],\n );\n const rScaleDomain = React.useMemo(\n () =>\n rScaleType === 'category'\n ? getOrderedRCategories()\n : getContinuousScaleDomain(rScaleType, rValues as (number | Date)[], {\n rangeStart: props.radialAxis?.rangeStart,\n rangeEnd: props.radialAxis?.rangeEnd,\n }),\n [getOrderedRCategories, rScaleType, rValues, props.radialAxis?.rangeStart, props.radialAxis?.rangeEnd],\n );\n const {\n scale: rScale,\n tickValues: rTickValues,\n tickLabels: rTickLabels,\n } = React.useMemo(\n () =>\n createRadialScale(rScaleType, rScaleDomain, [innerRadius, outerRadius], {\n useUTC: props.useUTC,\n tickCount: props.radialAxis?.tickCount,\n tickValues: props.radialAxis?.tickValues,\n tickText: props.radialAxis?.tickText,\n tickFormat: props.radialAxis?.tickFormat,\n culture: props.culture,\n tickStep: props.radialAxis?.tickStep,\n tick0: props.radialAxis?.tick0,\n dateLocalizeOptions: props.dateLocalizeOptions,\n }),\n [\n rScaleType,\n rScaleDomain,\n innerRadius,\n outerRadius,\n props.culture,\n props.dateLocalizeOptions,\n props.radialAxis?.tick0,\n props.radialAxis?.tickCount,\n props.radialAxis?.tickFormat,\n props.radialAxis?.tickStep,\n props.radialAxis?.tickText,\n props.radialAxis?.tickValues,\n props.useUTC,\n ],\n );\n\n const aValues = React.useMemo(\n () => chartData.flatMap(series => series.data.map(point => point.theta)),\n [chartData],\n );\n const aScaleType = React.useMemo(\n () =>\n getScaleType(aValues, {\n scaleType: props.angularAxis?.scaleType,\n }),\n [aValues, props.angularAxis?.scaleType],\n );\n const aDomain = React.useMemo(\n () =>\n aScaleType === 'category'\n ? getOrderedACategories()\n : (getContinuousScaleDomain(aScaleType, aValues as number[]) as number[]),\n [getOrderedACategories, aScaleType, aValues],\n );\n const {\n scale: aScale,\n tickValues: aTickValues,\n tickLabels: aTickLabels,\n } = React.useMemo(\n () =>\n createAngularScale(aScaleType, aDomain, {\n tickCount: props.angularAxis?.tickCount,\n tickValues: props.angularAxis?.tickValues,\n tickText: props.angularAxis?.tickText,\n tickFormat: props.angularAxis?.tickFormat,\n culture: props.culture,\n tickStep: props.angularAxis?.tickStep,\n tick0: props.angularAxis?.tick0,\n direction: props.direction,\n unit: props.angularAxis?.unit,\n }),\n [\n aScaleType,\n aDomain,\n props.angularAxis?.tick0,\n props.angularAxis?.tickCount,\n props.angularAxis?.tickFormat,\n props.angularAxis?.tickStep,\n props.angularAxis?.tickText,\n props.angularAxis?.tickValues,\n props.angularAxis?.unit,\n props.culture,\n props.direction,\n ],\n );\n\n const classes = usePolarChartStyles(props);\n\n const renderPolarGrid = React.useCallback(() => {\n const extRTickValues = [];\n const rDomain = rScale.domain();\n if (innerRadius > 0 && rDomain[0] !== rTickValues[0]) {\n extRTickValues.push(rDomain[0]);\n }\n extRTickValues.push(...rTickValues);\n if (rDomain[rDomain.length - 1] !== rTickValues[rTickValues.length - 1]) {\n extRTickValues.push(rDomain[rDomain.length - 1]);\n }\n\n return (\n <g>\n <g>\n {extRTickValues.map((r, rIndex) => {\n const className = rIndex === extRTickValues.length - 1 ? classes.gridLineOuter : classes.gridLineInner;\n\n if (props.shape === 'polygon') {\n let d = '';\n aTickValues.forEach((a, aIndex) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const radialPoint = d3PointRadial(aScale(a), rScale(r as any)!);\n d += (aIndex === 0 ? 'M' : 'L') + radialPoint.join(',') + ' ';\n });\n d += 'Z';\n\n return <path key={rIndex} d={d} className={className} />;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return <circle key={rIndex} cx={0} cy={0} r={rScale(r as any)} className={className} />;\n })}\n </g>\n <g>\n {aTickValues.map((a, aIndex) => {\n const radialPoint1 = d3PointRadial(aScale(a), innerRadius);\n const radialPoint2 = d3PointRadial(aScale(a), outerRadius);\n\n return (\n <path\n key={aIndex}\n d={`M${radialPoint1.join(',')} L${radialPoint2.join(',')}`}\n className={classes.gridLineInner}\n />\n );\n })}\n </g>\n </g>\n );\n }, [\n innerRadius,\n outerRadius,\n rTickValues,\n aTickValues,\n rScale,\n aScale,\n props.shape,\n classes.gridLineInner,\n classes.gridLineOuter,\n ]);\n\n const renderPolarTicks = React.useCallback(() => {\n const radialAxisAngle = props.direction === 'clockwise' ? 0 : Math.PI / 2;\n const radialAxisStartPoint = d3PointRadial(radialAxisAngle, innerRadius);\n const radialAxisEndPoint = d3PointRadial(radialAxisAngle, outerRadius);\n // (0, pi]\n const sign = radialAxisAngle > EPSILON && radialAxisAngle - Math.PI < EPSILON ? 1 : -1;\n\n return (\n <g>\n <g>\n <path\n d={`M${radialAxisStartPoint.join(',')} L${radialAxisEndPoint.join(',')}`}\n className={classes.gridLineOuter}\n />\n {rTickValues.map((r, rIndex) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const [pointX, pointY] = d3PointRadial(radialAxisAngle, rScale(r as any)!);\n return (\n <g key={rIndex}>\n <path\n d={`M${pointX},${pointY} L${pointX + TICK_SIZE * Math.cos(radialAxisAngle) * sign},${\n pointY + TICK_SIZE * Math.sin(radialAxisAngle) * sign\n }`}\n className={classes.gridLineOuter}\n />\n <text\n x={pointX + (TICK_SIZE + LABEL_OFFSET) * Math.cos(radialAxisAngle) * sign}\n y={pointY + (TICK_SIZE + LABEL_OFFSET) * Math.sin(radialAxisAngle) * sign}\n textAnchor={\n // pi/2 or 3pi/2\n Math.abs(radialAxisAngle - Math.PI / 2) < EPSILON ||\n Math.abs(radialAxisAngle - (3 * Math.PI) / 2) < EPSILON\n ? 'middle'\n : // (0, pi/2) or (pi, 3pi/2)\n (radialAxisAngle > EPSILON && radialAxisAngle - Math.PI / 2 < -EPSILON) ||\n (radialAxisAngle - Math.PI > EPSILON && radialAxisAngle - (3 * Math.PI) / 2 < -EPSILON)\n ? 'start'\n : 'end'\n }\n dominantBaseline=\"middle\"\n aria-hidden={true}\n className={classes.tickLabel}\n >\n {rTickLabels[rIndex]}\n </text>\n </g>\n );\n })}\n </g>\n <g>\n {aTickValues.map((a, aIndex) => {\n const angle = aScale(a);\n const [pointX, pointY] = d3PointRadial(angle, outerRadius + LABEL_OFFSET);\n\n return (\n <text\n key={aIndex}\n x={pointX}\n y={pointY}\n textAnchor={\n Math.abs(angle) < EPSILON || Math.abs(angle - Math.PI) < EPSILON\n ? 'middle'\n : angle > Math.PI\n ? 'end'\n : 'start'\n }\n dominantBaseline=\"middle\"\n aria-hidden={true}\n className={classes.tickLabel}\n >\n {aTickLabels[aIndex]}\n </text>\n );\n })}\n </g>\n </g>\n );\n }, [\n rTickValues,\n aTickValues,\n rScale,\n aScale,\n outerRadius,\n classes.gridLineOuter,\n classes.tickLabel,\n aTickLabels,\n innerRadius,\n rTickLabels,\n props.direction,\n ]);\n\n const getActiveLegends = React.useCallback(() => {\n return selectedLegends.length > 0 ? selectedLegends : hoveredLegend ? [hoveredLegend] : [];\n }, [selectedLegends, hoveredLegend]);\n\n const legendHighlighted = React.useCallback(\n (legendTitle: string) => {\n const activeLegends = getActiveLegends();\n return activeLegends.includes(legendTitle) || activeLegends.length === 0;\n },\n [getActiveLegends],\n );\n\n const renderRadialArea = React.useCallback(\n (series: AreaPolarSeries) => {\n const radialArea = d3AreaRadial<PolarDataPoint>()\n .angle(d => aScale(d.theta))\n .innerRadius(innerRadius)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .outerRadius(d => rScale(d.r as any)!)\n .curve(getCurveFactory(series.lineOptions?.curve, d3CurveLinearClosed))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .defined(d => isPlottable(aScale(d.theta), rScale(d.r as any)));\n const shouldHighlight = legendHighlighted(series.legend);\n\n return (\n <path\n d={radialArea(series.data)!}\n fill={series.color}\n fillOpacity={shouldHighlight ? 0.7 : 0.1}\n pointerEvents=\"none\"\n />\n );\n },\n [innerRadius, rScale, aScale, legendHighlighted],\n );\n\n const renderRadialLine = React.useCallback(\n (series: AreaPolarSeries | LinePolarSeries) => {\n const radialLine = d3LineRadial<PolarDataPoint>()\n .angle(d => aScale(d.theta))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .radius(d => rScale(d.r as any)!)\n .curve(getCurveFactory(series.lineOptions?.curve))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .defined(d => isPlottable(aScale(d.theta), rScale(d.r as any)));\n\n return (\n <path\n d={radialLine(series.data)!}\n fill=\"none\"\n stroke={series.color}\n strokeOpacity={legendHighlighted(series.legend) ? 1 : 0.1}\n strokeWidth={series.lineOptions?.strokeWidth ?? 3}\n strokeDasharray={series.lineOptions?.strokeDasharray}\n strokeDashoffset={series.lineOptions?.strokeDashoffset}\n strokeLinecap={series.lineOptions?.strokeLinecap}\n pointerEvents=\"none\"\n />\n );\n },\n [rScale, aScale, legendHighlighted],\n );\n\n const [minMarkerSize, maxMarkerSize] = React.useMemo(\n () => d3Extent<number>(chartData.flatMap(series => series.data.map(point => point.markerSize as number))),\n [chartData],\n );\n\n const showPopover = React.useCallback(\n (\n event: React.MouseEvent<SVGElement> | React.FocusEvent<SVGElement>,\n point: PolarDataPoint,\n pointId: string,\n legend: string,\n ) => {\n setPopoverTarget(event.currentTarget);\n setPopoverOpen(legendHighlighted(legend));\n setPopoverXValue(point.angularAxisCalloutData ?? formatAngle(point.theta, props.angularAxis?.unit));\n setPopoverLegend(legend);\n setPopoverColor(point.color!);\n setPopoverYValue(\n point.radialAxisCalloutData ?? (formatToLocaleString(point.r, props.culture, props.useUTC) as string),\n );\n setActivePoint(pointId);\n },\n [legendHighlighted, props.angularAxis?.unit, props.culture, props.useUTC],\n );\n\n const hidePopover = React.useCallback(() => {\n setPopoverOpen(false);\n setActivePoint('');\n }, []);\n\n const markersOnlyMode = React.useMemo(\n () => chartData.filter(s => s.type === 'areapolar' || s.type === 'linepolar').length === 0,\n [chartData],\n );\n\n const renderRadialPoints = React.useCallback(\n (series: AreaPolarSeries | LinePolarSeries | ScatterPolarSeries, seriesIndex: number) => {\n const shouldHighlight = legendHighlighted(series.legend);\n return (\n <g>\n {series.data.map((point, pointIndex) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!isPlottable(aScale(point.theta), rScale(point.r as any))) {\n return null;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const [x, y] = d3PointRadial(aScale(point.theta), rScale(point.r as any)!);\n const id = `${seriesIndex}-${pointIndex}`;\n const isActive = activePoint === id;\n const minPx = markersOnlyMode ? MIN_MARKER_SIZE_PX_MARKERS_ONLY : MIN_MARKER_SIZE_PX;\n let radius = minPx;\n if (typeof point.markerSize !== 'undefined' && minMarkerSize !== maxMarkerSize) {\n radius =\n minPx +\n ((point.markerSize - minMarkerSize!) / (maxMarkerSize! - minMarkerSize!)) *\n (MAX_MARKER_SIZE_PX - minPx);\n }\n\n const xValue =\n point.radialAxisCalloutData || (formatToLocaleString(point.r, props.culture, props.useUTC) as string);\n const legend = series.legend;\n const yValue = point.angularAxisCalloutData || formatAngle(point.theta, props.angularAxis?.unit);\n const ariaLabel = point.callOutAccessibilityData?.ariaLabel || `${xValue}. ${legend}, ${yValue}.`;\n\n return (\n <circle\n key={pointIndex}\n cx={x}\n cy={y}\n r={radius}\n fill={isActive ? tokens.colorNeutralBackground1 : point.color}\n stroke={isActive ? point.color : 'none'}\n strokeWidth={isActive ? 2 : 0}\n opacity={shouldHighlight ? 1 : 0.1}\n tabIndex={shouldHighlight ? 0 : -1}\n onMouseOver={e => showPopover(e, point, id, series.legend)}\n onFocus={e => showPopover(e, point, id, series.legend)}\n role=\"img\"\n aria-label={ariaLabel}\n />\n );\n })}\n </g>\n );\n },\n [\n legendHighlighted,\n rScale,\n aScale,\n activePoint,\n showPopover,\n minMarkerSize,\n maxMarkerSize,\n markersOnlyMode,\n props.angularAxis?.unit,\n props.culture,\n props.useUTC,\n ],\n );\n\n const onLegendSelectionChange = React.useCallback(\n (_selectedLegends: string[], event: React.MouseEvent<HTMLButtonElement>, currentLegend?: Legend) => {\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 renderLegends = React.useCallback(() => {\n if (props.hideLegend) {\n return null;\n }\n\n const legends: Legend[] = Object.keys(legendColorMap.current).map(legendTitle => {\n return {\n title: legendTitle,\n color: legendColorMap.current[legendTitle],\n hoverAction: () => {\n setHoveredLegend(legendTitle);\n },\n onMouseOutAction: () => {\n setHoveredLegend('');\n },\n };\n });\n\n return (\n <div ref={legendContainerRef} className={classes.legendContainer}>\n <Legends\n legends={legends}\n centerLegends\n onChange={onLegendSelectionChange}\n legendRef={legendsRef}\n {...props.legendProps}\n />\n </div>\n );\n }, [props.hideLegend, props.legendProps, legendsRef, onLegendSelectionChange, classes.legendContainer]);\n\n const focusAttributes = useArrowNavigationGroup({ axis: 'horizontal' });\n\n return (\n <div className={classes.root} ref={chartContainerRef} onMouseLeave={hidePopover} onBlur={hidePopover}>\n <div className={classes.chartWrapper} {...focusAttributes}>\n <svg\n className={classes.chart}\n width={svgWidth}\n height={svgHeight}\n role=\"region\"\n aria-label={\n (props.chartTitle ? `${props.chartTitle}. ` : '') + `Polar chart with ${chartData.length} data series.`\n }\n >\n <g transform={`translate(${svgWidth / 2}, ${svgHeight / 2})`}>\n {renderPolarGrid()}\n <g>\n {chartData.map((series, seriesIndex) => {\n return (\n <g\n key={seriesIndex}\n role=\"region\"\n aria-label={`${series.legend}, series ${seriesIndex + 1} of ${chartData.length} with ${\n series.data.length\n } data points.`}\n >\n {series.type === 'areapolar' && renderRadialArea(series)}\n {(series.type === 'areapolar' || series.type === 'linepolar') && renderRadialLine(series)}\n {renderRadialPoints(series, seriesIndex)}\n </g>\n );\n })}\n </g>\n {renderPolarTicks()}\n </g>\n </svg>\n </div>\n {renderLegends()}\n {!props.hideTooltip && (\n <ChartPopover\n isPopoverOpen={isPopoverOpen}\n positioning={{\n target: popoverTarget,\n }}\n XValue={popoverXValue}\n legend={popoverLegend}\n color={popoverColor}\n YValue={popoverYValue}\n />\n )}\n </div>\n );\n },\n);\n\nPolarChart.displayName = 'PolarChart';\n"],"names":["React","usePolarChartStyles","useImageExport","pointRadial","d3PointRadial","areaRadial","d3AreaRadial","lineRadial","d3LineRadial","curveLinearClosed","d3CurveLinearClosed","tokens","Legends","createRadialScale","getContinuousScaleDomain","getScaleType","EPSILON","createAngularScale","formatAngle","ChartPopover","getColorFromToken","getCurveFactory","getNextColor","isPlottable","sortAxisCategories","extent","d3Extent","useArrowNavigationGroup","formatToLocaleString","useFluent_unstable","useFluent","DEFAULT_LEGEND_HEIGHT","LABEL_WIDTH","LABEL_HEIGHT","LABEL_OFFSET","TICK_SIZE","MIN_MARKER_SIZE_PX","MAX_MARKER_SIZE_PX","MIN_MARKER_SIZE_PX_MARKERS_ONLY","PolarChart","forwardRef","props","forwardedRef","chartContainerRef","legendsRef","componentRef","hideLegend","legendContainerRef","useRef","targetDocument","_window","defaultView","containerWidth","setContainerWidth","useState","containerHeight","setContainerHeight","legendContainerHeight","setLegendContainerHeight","isPopoverOpen","setPopoverOpen","popoverTarget","setPopoverTarget","popoverXValue","setPopoverXValue","popoverLegend","setPopoverLegend","popoverColor","setPopoverColor","popoverYValue","setPopoverYValue","hoveredLegend","setHoveredLegend","selectedLegends","setSelectedLegends","legendProps","activePoint","setActivePoint","useEffect","current","width","height","getBoundingClientRect","marginTop","getComputedStyle","Math","max","parseFloat","margins","useMemo","left","right","top","bottom","svgWidth","svgHeight","outerRadius","min","innerRadius","abs","hole","legendColorMap","chartData","colorIndex","renderingOrder","data","map","series","seriesColor","color","legend","point","sort","a","b","indexOf","type","mapCategoryToValues","useCallback","isAngularAxis","categoryToValues","forEach","category","theta","r","value","push","getOrderedRCategories","radialAxis","categoryOrder","getOrderedACategories","angularAxis","rValues","flatMap","rScaleType","scaleType","supportsLog","rScaleDomain","rangeStart","rangeEnd","scale","rScale","tickValues","rTickValues","tickLabels","rTickLabels","useUTC","tickCount","tickText","tickFormat","culture","tickStep","tick0","dateLocalizeOptions","aValues","aScaleType","aDomain","aScale","aTickValues","aTickLabels","direction","unit","classes","renderPolarGrid","extRTickValues","rDomain","domain","length","g","rIndex","className","gridLineOuter","gridLineInner","shape","d","aIndex","radialPoint","join","path","key","circle","cx","cy","radialPoint1","radialPoint2","renderPolarTicks","radialAxisAngle","PI","radialAxisStartPoint","radialAxisEndPoint","sign","pointX","pointY","cos","sin","text","x","y","textAnchor","dominantBaseline","aria-hidden","tickLabel","angle","getActiveLegends","legendHighlighted","legendTitle","activeLegends","includes","renderRadialArea","radialArea","curve","lineOptions","defined","shouldHighlight","fill","fillOpacity","pointerEvents","renderRadialLine","radialLine","radius","stroke","strokeOpacity","strokeWidth","strokeDasharray","strokeDashoffset","strokeLinecap","minMarkerSize","maxMarkerSize","markerSize","showPopover","event","pointId","currentTarget","angularAxisCalloutData","radialAxisCalloutData","hidePopover","markersOnlyMode","filter","s","renderRadialPoints","seriesIndex","pointIndex","id","isActive","minPx","xValue","yValue","ariaLabel","callOutAccessibilityData","colorNeutralBackground1","opacity","tabIndex","onMouseOver","e","onFocus","role","aria-label","onLegendSelectionChange","_selectedLegends","currentLegend","canSelectMultipleLegends","slice","onChange","renderLegends","legends","Object","keys","title","hoverAction","onMouseOutAction","div","ref","legendContainer","centerLegends","legendRef","focusAttributes","axis","root","onMouseLeave","onBlur","chartWrapper","svg","chart","chartTitle","transform","hideTooltip","positioning","target","XValue","YValue","displayName"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../src/components/PolarChart/PolarChart.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport type { PolarChartProps } from './PolarChart.types';\nimport { usePolarChartStyles } from './usePolarChartStyles.styles';\nimport { useImageExport } from '../../utilities/hooks';\nimport {\n pointRadial as d3PointRadial,\n areaRadial as d3AreaRadial,\n lineRadial as d3LineRadial,\n curveLinearClosed as d3CurveLinearClosed,\n} from 'd3-shape';\nimport type { AreaPolarSeries, LinePolarSeries, PolarDataPoint, ScatterPolarSeries } from '../../types/DataPoint';\nimport { tokens } from '@fluentui/react-theme';\nimport type { Legend } from '../Legends/index';\nimport { Legends } from '../Legends/index';\nimport {\n createRadialScale,\n getContinuousScaleDomain,\n getScaleType,\n EPSILON,\n createAngularScale,\n formatAngle,\n} from './PolarChart.utils';\nimport { ChartPopover } from '../CommonComponents/ChartPopover';\nimport {\n getColorFromToken,\n getCurveFactory,\n getNextColor,\n isPlottable,\n sortAxisCategories,\n} from '../../utilities/index';\nimport { extent as d3Extent } from 'd3-array';\nimport { useArrowNavigationGroup } from '@fluentui/react-tabster';\nimport { formatToLocaleString } from '@fluentui/chart-utilities';\nimport { useFluent_unstable as useFluent } from '@fluentui/react-shared-contexts';\n\nconst DEFAULT_LEGEND_HEIGHT = 32;\nconst LABEL_WIDTH = 36;\nconst LABEL_HEIGHT = 16;\nconst LABEL_OFFSET = 10;\nconst TICK_SIZE = 6;\nconst MIN_MARKER_SIZE_PX = 2;\nconst MAX_MARKER_SIZE_PX = 16;\nconst MIN_MARKER_SIZE_PX_MARKERS_ONLY = 4;\n\nexport const PolarChart: React.FunctionComponent<PolarChartProps> = React.forwardRef<HTMLDivElement, PolarChartProps>(\n (props, forwardedRef) => {\n const { chartContainerRef, legendsRef } = useImageExport(props.componentRef, props.hideLegend, false);\n const legendContainerRef = React.useRef<HTMLDivElement>(null);\n const { targetDocument } = useFluent();\n const _window = targetDocument?.defaultView;\n\n const [containerWidth, setContainerWidth] = React.useState<number>(200);\n const [containerHeight, setContainerHeight] = React.useState<number>(200);\n const [legendContainerHeight, setLegendContainerHeight] = React.useState<number>(\n props.hideLegend ? 0 : DEFAULT_LEGEND_HEIGHT,\n );\n const [isPopoverOpen, setPopoverOpen] = React.useState<boolean>(false);\n const [popoverTarget, setPopoverTarget] = React.useState<SVGElement | null>(null);\n const [popoverXValue, setPopoverXValue] = React.useState<string>('');\n const [popoverLegend, setPopoverLegend] = React.useState<string>('');\n const [popoverColor, setPopoverColor] = React.useState<string>('');\n const [popoverYValue, setPopoverYValue] = React.useState<string>('');\n const [hoveredLegend, setHoveredLegend] = React.useState<string>('');\n const [selectedLegends, setSelectedLegends] = React.useState<string[]>(props.legendProps?.selectedLegends || []);\n const [activePoint, setActivePoint] = React.useState<string>('');\n\n React.useEffect(() => {\n if (chartContainerRef.current) {\n const { width, height } = chartContainerRef.current.getBoundingClientRect();\n setContainerWidth(width);\n setContainerHeight(height);\n }\n }, [chartContainerRef]);\n React.useEffect(() => {\n if (props.hideLegend) {\n setLegendContainerHeight(0);\n } else if (legendContainerRef.current) {\n const { height } = legendContainerRef.current.getBoundingClientRect();\n const marginTop = _window?.getComputedStyle(legendContainerRef.current).marginTop || '0px';\n setLegendContainerHeight(Math.max(height, DEFAULT_LEGEND_HEIGHT) + parseFloat(marginTop));\n }\n }, [props.hideLegend, _window]);\n\n React.useEffect(() => {\n setSelectedLegends(props.legendProps?.selectedLegends || []);\n }, [props.legendProps?.selectedLegends]);\n\n const margins = React.useMemo(\n () => ({\n left: LABEL_OFFSET + LABEL_WIDTH,\n right: LABEL_OFFSET + LABEL_WIDTH,\n top: LABEL_OFFSET + LABEL_HEIGHT,\n bottom: LABEL_OFFSET + LABEL_HEIGHT,\n ...props.margins,\n }),\n [props.margins],\n );\n\n const svgWidth = React.useMemo(() => props.width || containerWidth, [props.width, containerWidth]);\n const svgHeight = React.useMemo(\n () => (props.height || containerHeight) - legendContainerHeight,\n [props.height, containerHeight, legendContainerHeight],\n );\n const outerRadius = React.useMemo(\n () => Math.min(svgWidth - (margins.left + margins.right), svgHeight - (margins.top + margins.bottom)) / 2,\n [svgWidth, svgHeight, margins],\n );\n const innerRadius = React.useMemo(\n () => Math.max(0, Math.min(Math.abs(props.hole || 0), 1)) * outerRadius,\n [props.hole, outerRadius],\n );\n\n const legendColorMap = React.useRef<Record<string, string>>({});\n const chartData = React.useMemo(() => {\n legendColorMap.current = {};\n let colorIndex = 0;\n const renderingOrder = ['areapolar', 'linepolar', 'scatterpolar'];\n\n return props.data\n .map(series => {\n const seriesColor = series.color ? getColorFromToken(series.color) : getNextColor(colorIndex++, 0);\n if (!(series.legend in legendColorMap.current)) {\n legendColorMap.current[series.legend] = seriesColor;\n }\n\n return {\n ...series,\n color: seriesColor,\n data: series.data.map(point => {\n return {\n ...point,\n color: point.color ? getColorFromToken(point.color) : seriesColor,\n };\n }),\n };\n })\n .sort((a, b) => {\n return renderingOrder.indexOf(a.type) - renderingOrder.indexOf(b.type);\n });\n }, [props.data]);\n\n const mapCategoryToValues = React.useCallback(\n (isAngularAxis?: boolean) => {\n const categoryToValues: Record<string, number[]> = {};\n chartData.forEach(series => {\n series.data.forEach(point => {\n const category = (isAngularAxis ? point.theta : point.r) as string;\n if (!categoryToValues[category]) {\n categoryToValues[category] = [];\n }\n const value = isAngularAxis ? point.r : point.theta;\n if (typeof value === 'number') {\n categoryToValues[category].push(value);\n }\n });\n });\n return categoryToValues;\n },\n [chartData],\n );\n\n const getOrderedRCategories = React.useCallback(() => {\n return sortAxisCategories(mapCategoryToValues(), props.radialAxis?.categoryOrder);\n }, [mapCategoryToValues, props.radialAxis?.categoryOrder]);\n\n const getOrderedACategories = React.useCallback(() => {\n return sortAxisCategories(mapCategoryToValues(true), props.angularAxis?.categoryOrder);\n }, [mapCategoryToValues, props.angularAxis?.categoryOrder]);\n\n const rValues = React.useMemo(() => chartData.flatMap(series => series.data.map(point => point.r)), [chartData]);\n const rScaleType = React.useMemo(\n () =>\n getScaleType(rValues, {\n scaleType: props.radialAxis?.scaleType,\n supportsLog: true,\n }),\n [rValues, props.radialAxis?.scaleType],\n );\n const rScaleDomain = React.useMemo(\n () =>\n rScaleType === 'category'\n ? getOrderedRCategories()\n : getContinuousScaleDomain(rScaleType, rValues as (number | Date)[], {\n rangeStart: props.radialAxis?.rangeStart,\n rangeEnd: props.radialAxis?.rangeEnd,\n }),\n [getOrderedRCategories, rScaleType, rValues, props.radialAxis?.rangeStart, props.radialAxis?.rangeEnd],\n );\n const {\n scale: rScale,\n tickValues: rTickValues,\n tickLabels: rTickLabels,\n } = React.useMemo(\n () =>\n createRadialScale(rScaleType, rScaleDomain, [innerRadius, outerRadius], {\n useUTC: props.useUTC,\n tickCount: props.radialAxis?.tickCount,\n tickValues: props.radialAxis?.tickValues,\n tickText: props.radialAxis?.tickText,\n tickFormat: props.radialAxis?.tickFormat,\n culture: props.culture,\n tickStep: props.radialAxis?.tickStep,\n tick0: props.radialAxis?.tick0,\n dateLocalizeOptions: props.dateLocalizeOptions,\n }),\n [\n rScaleType,\n rScaleDomain,\n innerRadius,\n outerRadius,\n props.culture,\n props.dateLocalizeOptions,\n props.radialAxis?.tick0,\n props.radialAxis?.tickCount,\n props.radialAxis?.tickFormat,\n props.radialAxis?.tickStep,\n props.radialAxis?.tickText,\n props.radialAxis?.tickValues,\n props.useUTC,\n ],\n );\n\n const aValues = React.useMemo(\n () => chartData.flatMap(series => series.data.map(point => point.theta)),\n [chartData],\n );\n const aScaleType = React.useMemo(\n () =>\n getScaleType(aValues, {\n scaleType: props.angularAxis?.scaleType,\n }),\n [aValues, props.angularAxis?.scaleType],\n );\n const aDomain = React.useMemo(\n () =>\n aScaleType === 'category'\n ? getOrderedACategories()\n : (getContinuousScaleDomain(aScaleType, aValues as number[]) as number[]),\n [getOrderedACategories, aScaleType, aValues],\n );\n const {\n scale: aScale,\n tickValues: aTickValues,\n tickLabels: aTickLabels,\n } = React.useMemo(\n () =>\n createAngularScale(aScaleType, aDomain, {\n tickCount: props.angularAxis?.tickCount,\n tickValues: props.angularAxis?.tickValues,\n tickText: props.angularAxis?.tickText,\n tickFormat: props.angularAxis?.tickFormat,\n culture: props.culture,\n tickStep: props.angularAxis?.tickStep,\n tick0: props.angularAxis?.tick0,\n direction: props.direction,\n unit: props.angularAxis?.unit,\n }),\n [\n aScaleType,\n aDomain,\n props.angularAxis?.tick0,\n props.angularAxis?.tickCount,\n props.angularAxis?.tickFormat,\n props.angularAxis?.tickStep,\n props.angularAxis?.tickText,\n props.angularAxis?.tickValues,\n props.angularAxis?.unit,\n props.culture,\n props.direction,\n ],\n );\n\n const classes = usePolarChartStyles(props);\n\n const renderPolarGrid = React.useCallback(() => {\n const extRTickValues = [];\n const rDomain = rScale.domain();\n if (innerRadius > 0 && rDomain[0] !== rTickValues[0]) {\n extRTickValues.push(rDomain[0]);\n }\n extRTickValues.push(...rTickValues);\n if (rDomain[rDomain.length - 1] !== rTickValues[rTickValues.length - 1]) {\n extRTickValues.push(rDomain[rDomain.length - 1]);\n }\n\n return (\n <g>\n <g>\n {extRTickValues.map((r, rIndex) => {\n const className = rIndex === extRTickValues.length - 1 ? classes.gridLineOuter : classes.gridLineInner;\n\n if (props.shape === 'polygon') {\n let d = '';\n aTickValues.forEach((a, aIndex) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const radialPoint = d3PointRadial(aScale(a), rScale(r as any)!);\n d += (aIndex === 0 ? 'M' : 'L') + radialPoint.join(',') + ' ';\n });\n d += 'Z';\n\n return <path key={rIndex} d={d} className={className} />;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return <circle key={rIndex} cx={0} cy={0} r={rScale(r as any)} className={className} />;\n })}\n </g>\n <g>\n {aTickValues.map((a, aIndex) => {\n const radialPoint1 = d3PointRadial(aScale(a), innerRadius);\n const radialPoint2 = d3PointRadial(aScale(a), outerRadius);\n\n return (\n <path\n key={aIndex}\n d={`M${radialPoint1.join(',')} L${radialPoint2.join(',')}`}\n className={classes.gridLineInner}\n />\n );\n })}\n </g>\n </g>\n );\n }, [\n innerRadius,\n outerRadius,\n rTickValues,\n aTickValues,\n rScale,\n aScale,\n props.shape,\n classes.gridLineInner,\n classes.gridLineOuter,\n ]);\n\n const renderPolarTicks = React.useCallback(() => {\n const radialAxisAngle = props.direction === 'clockwise' ? 0 : Math.PI / 2;\n const radialAxisStartPoint = d3PointRadial(radialAxisAngle, innerRadius);\n const radialAxisEndPoint = d3PointRadial(radialAxisAngle, outerRadius);\n // (0, pi]\n const sign = radialAxisAngle > EPSILON && radialAxisAngle - Math.PI < EPSILON ? 1 : -1;\n\n return (\n <g>\n <g>\n <path\n d={`M${radialAxisStartPoint.join(',')} L${radialAxisEndPoint.join(',')}`}\n className={classes.gridLineOuter}\n />\n {rTickValues.map((r, rIndex) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const [pointX, pointY] = d3PointRadial(radialAxisAngle, rScale(r as any)!);\n return (\n <g key={rIndex}>\n <path\n d={`M${pointX},${pointY} L${pointX + TICK_SIZE * Math.cos(radialAxisAngle) * sign},${\n pointY + TICK_SIZE * Math.sin(radialAxisAngle) * sign\n }`}\n className={classes.gridLineOuter}\n />\n <text\n x={pointX + (TICK_SIZE + LABEL_OFFSET) * Math.cos(radialAxisAngle) * sign}\n y={pointY + (TICK_SIZE + LABEL_OFFSET) * Math.sin(radialAxisAngle) * sign}\n textAnchor={\n // pi/2 or 3pi/2\n Math.abs(radialAxisAngle - Math.PI / 2) < EPSILON ||\n Math.abs(radialAxisAngle - (3 * Math.PI) / 2) < EPSILON\n ? 'middle'\n : // (0, pi/2) or (pi, 3pi/2)\n (radialAxisAngle > EPSILON && radialAxisAngle - Math.PI / 2 < -EPSILON) ||\n (radialAxisAngle - Math.PI > EPSILON && radialAxisAngle - (3 * Math.PI) / 2 < -EPSILON)\n ? 'start'\n : 'end'\n }\n dominantBaseline=\"middle\"\n aria-hidden={true}\n className={classes.tickLabel}\n >\n {rTickLabels[rIndex]}\n </text>\n </g>\n );\n })}\n </g>\n <g>\n {aTickValues.map((a, aIndex) => {\n const angle = aScale(a);\n const [pointX, pointY] = d3PointRadial(angle, outerRadius + LABEL_OFFSET);\n\n return (\n <text\n key={aIndex}\n x={pointX}\n y={pointY}\n textAnchor={\n Math.abs(angle) < EPSILON || Math.abs(angle - Math.PI) < EPSILON\n ? 'middle'\n : angle > Math.PI\n ? 'end'\n : 'start'\n }\n dominantBaseline=\"middle\"\n aria-hidden={true}\n className={classes.tickLabel}\n >\n {aTickLabels[aIndex]}\n </text>\n );\n })}\n </g>\n </g>\n );\n }, [\n rTickValues,\n aTickValues,\n rScale,\n aScale,\n outerRadius,\n classes.gridLineOuter,\n classes.tickLabel,\n aTickLabels,\n innerRadius,\n rTickLabels,\n props.direction,\n ]);\n\n const getActiveLegends = React.useCallback(() => {\n return selectedLegends.length > 0 ? selectedLegends : hoveredLegend ? [hoveredLegend] : [];\n }, [selectedLegends, hoveredLegend]);\n\n const legendHighlighted = React.useCallback(\n (legendTitle: string) => {\n const activeLegends = getActiveLegends();\n return activeLegends.includes(legendTitle) || activeLegends.length === 0;\n },\n [getActiveLegends],\n );\n\n const renderRadialArea = React.useCallback(\n (series: AreaPolarSeries) => {\n const radialArea = d3AreaRadial<PolarDataPoint>()\n .angle(d => aScale(d.theta))\n .innerRadius(innerRadius)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .outerRadius(d => rScale(d.r as any)!)\n .curve(getCurveFactory(series.lineOptions?.curve, d3CurveLinearClosed))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .defined(d => isPlottable(aScale(d.theta), rScale(d.r as any)));\n const shouldHighlight = legendHighlighted(series.legend);\n\n return (\n <path\n d={radialArea(series.data)!}\n fill={series.color}\n fillOpacity={shouldHighlight ? 0.7 : 0.1}\n pointerEvents=\"none\"\n />\n );\n },\n [innerRadius, rScale, aScale, legendHighlighted],\n );\n\n const renderRadialLine = React.useCallback(\n (series: AreaPolarSeries | LinePolarSeries) => {\n const radialLine = d3LineRadial<PolarDataPoint>()\n .angle(d => aScale(d.theta))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .radius(d => rScale(d.r as any)!)\n .curve(getCurveFactory(series.lineOptions?.curve))\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .defined(d => isPlottable(aScale(d.theta), rScale(d.r as any)));\n\n return (\n <path\n d={radialLine(series.data)!}\n fill=\"none\"\n stroke={series.color}\n strokeOpacity={legendHighlighted(series.legend) ? 1 : 0.1}\n strokeWidth={series.lineOptions?.strokeWidth ?? 3}\n strokeDasharray={series.lineOptions?.strokeDasharray}\n strokeDashoffset={series.lineOptions?.strokeDashoffset}\n strokeLinecap={series.lineOptions?.strokeLinecap}\n pointerEvents=\"none\"\n />\n );\n },\n [rScale, aScale, legendHighlighted],\n );\n\n const [minMarkerSize, maxMarkerSize] = React.useMemo(\n () => d3Extent<number>(chartData.flatMap(series => series.data.map(point => point.markerSize as number))),\n [chartData],\n );\n\n const showPopover = React.useCallback(\n (\n event: React.MouseEvent<SVGElement> | React.FocusEvent<SVGElement>,\n point: PolarDataPoint,\n pointId: string,\n legend: string,\n ) => {\n setPopoverTarget(event.currentTarget);\n setPopoverOpen(legendHighlighted(legend));\n setPopoverXValue(point.angularAxisCalloutData ?? formatAngle(point.theta, props.angularAxis?.unit));\n setPopoverLegend(legend);\n setPopoverColor(point.color!);\n setPopoverYValue(\n point.radialAxisCalloutData ?? (formatToLocaleString(point.r, props.culture, props.useUTC) as string),\n );\n setActivePoint(pointId);\n },\n [legendHighlighted, props.angularAxis?.unit, props.culture, props.useUTC],\n );\n\n const hidePopover = React.useCallback(() => {\n setPopoverOpen(false);\n setActivePoint('');\n }, []);\n\n const markersOnlyMode = React.useMemo(\n () => chartData.filter(s => s.type === 'areapolar' || s.type === 'linepolar').length === 0,\n [chartData],\n );\n\n const renderRadialPoints = React.useCallback(\n (series: AreaPolarSeries | LinePolarSeries | ScatterPolarSeries, seriesIndex: number) => {\n const shouldHighlight = legendHighlighted(series.legend);\n return (\n <g>\n {series.data.map((point, pointIndex) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!isPlottable(aScale(point.theta), rScale(point.r as any))) {\n return null;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const [x, y] = d3PointRadial(aScale(point.theta), rScale(point.r as any)!);\n const id = `${seriesIndex}-${pointIndex}`;\n const isActive = activePoint === id;\n const minPx = markersOnlyMode ? MIN_MARKER_SIZE_PX_MARKERS_ONLY : MIN_MARKER_SIZE_PX;\n let radius = minPx;\n if (typeof point.markerSize !== 'undefined' && minMarkerSize !== maxMarkerSize) {\n radius =\n minPx +\n ((point.markerSize - minMarkerSize!) / (maxMarkerSize! - minMarkerSize!)) *\n (MAX_MARKER_SIZE_PX - minPx);\n }\n\n const xValue =\n point.radialAxisCalloutData || (formatToLocaleString(point.r, props.culture, props.useUTC) as string);\n const legend = series.legend;\n const yValue = point.angularAxisCalloutData || formatAngle(point.theta, props.angularAxis?.unit);\n const ariaLabel = point.callOutAccessibilityData?.ariaLabel || `${xValue}. ${legend}, ${yValue}.`;\n\n return (\n <circle\n key={pointIndex}\n cx={x}\n cy={y}\n r={radius}\n fill={isActive ? tokens.colorNeutralBackground1 : point.color}\n stroke={isActive ? point.color : 'none'}\n strokeWidth={isActive ? 2 : 0}\n opacity={shouldHighlight ? 1 : 0.1}\n tabIndex={shouldHighlight ? 0 : -1}\n onMouseOver={e => showPopover(e, point, id, series.legend)}\n onFocus={e => showPopover(e, point, id, series.legend)}\n role=\"img\"\n aria-label={ariaLabel}\n />\n );\n })}\n </g>\n );\n },\n [\n legendHighlighted,\n rScale,\n aScale,\n activePoint,\n showPopover,\n minMarkerSize,\n maxMarkerSize,\n markersOnlyMode,\n props.angularAxis?.unit,\n props.culture,\n props.useUTC,\n ],\n );\n\n const onLegendSelectionChange = React.useCallback(\n (_selectedLegends: string[], event: React.MouseEvent<HTMLButtonElement>, currentLegend?: Legend) => {\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 renderLegends = React.useCallback(() => {\n if (props.hideLegend) {\n return null;\n }\n\n const legends: Legend[] = Object.keys(legendColorMap.current).map(legendTitle => {\n return {\n title: legendTitle,\n color: legendColorMap.current[legendTitle],\n hoverAction: () => {\n setHoveredLegend(legendTitle);\n },\n onMouseOutAction: () => {\n setHoveredLegend('');\n },\n };\n });\n\n return (\n <div ref={legendContainerRef} className={classes.legendContainer}>\n <Legends\n legends={legends}\n centerLegends\n onChange={onLegendSelectionChange}\n legendRef={legendsRef}\n {...props.legendProps}\n />\n </div>\n );\n }, [props.hideLegend, props.legendProps, legendsRef, onLegendSelectionChange, classes.legendContainer]);\n\n const focusAttributes = useArrowNavigationGroup({ axis: 'horizontal' });\n\n return (\n <div className={classes.root} ref={chartContainerRef} onMouseLeave={hidePopover} onBlur={hidePopover}>\n <div className={classes.chartWrapper} {...focusAttributes}>\n <svg\n className={classes.chart}\n width={svgWidth}\n height={svgHeight}\n role=\"region\"\n aria-label={\n (props.chartTitle ? `${props.chartTitle}. ` : '') + `Polar chart with ${chartData.length} data series.`\n }\n >\n <g transform={`translate(${svgWidth / 2}, ${svgHeight / 2})`}>\n {renderPolarGrid()}\n <g>\n {chartData.map((series, seriesIndex) => {\n return (\n <g\n key={seriesIndex}\n role=\"region\"\n aria-label={`${series.legend}, series ${seriesIndex + 1} of ${chartData.length} with ${\n series.data.length\n } data points.`}\n >\n {series.type === 'areapolar' && renderRadialArea(series)}\n {(series.type === 'areapolar' || series.type === 'linepolar') && renderRadialLine(series)}\n {renderRadialPoints(series, seriesIndex)}\n </g>\n );\n })}\n </g>\n {renderPolarTicks()}\n </g>\n </svg>\n </div>\n {renderLegends()}\n {!props.hideTooltip && (\n <ChartPopover\n isPopoverOpen={isPopoverOpen}\n positioning={{\n target: popoverTarget,\n }}\n XValue={popoverXValue}\n legend={popoverLegend}\n color={popoverColor}\n YValue={popoverYValue}\n />\n )}\n </div>\n );\n },\n);\n\nPolarChart.displayName = 'PolarChart';\n"],"names":["React","usePolarChartStyles","useImageExport","pointRadial","d3PointRadial","areaRadial","d3AreaRadial","lineRadial","d3LineRadial","curveLinearClosed","d3CurveLinearClosed","tokens","Legends","createRadialScale","getContinuousScaleDomain","getScaleType","EPSILON","createAngularScale","formatAngle","ChartPopover","getColorFromToken","getCurveFactory","getNextColor","isPlottable","sortAxisCategories","extent","d3Extent","useArrowNavigationGroup","formatToLocaleString","useFluent_unstable","useFluent","DEFAULT_LEGEND_HEIGHT","LABEL_WIDTH","LABEL_HEIGHT","LABEL_OFFSET","TICK_SIZE","MIN_MARKER_SIZE_PX","MAX_MARKER_SIZE_PX","MIN_MARKER_SIZE_PX_MARKERS_ONLY","PolarChart","forwardRef","props","forwardedRef","chartContainerRef","legendsRef","componentRef","hideLegend","legendContainerRef","useRef","targetDocument","_window","defaultView","containerWidth","setContainerWidth","useState","containerHeight","setContainerHeight","legendContainerHeight","setLegendContainerHeight","isPopoverOpen","setPopoverOpen","popoverTarget","setPopoverTarget","popoverXValue","setPopoverXValue","popoverLegend","setPopoverLegend","popoverColor","setPopoverColor","popoverYValue","setPopoverYValue","hoveredLegend","setHoveredLegend","selectedLegends","setSelectedLegends","legendProps","activePoint","setActivePoint","useEffect","current","width","height","getBoundingClientRect","marginTop","getComputedStyle","Math","max","parseFloat","margins","useMemo","left","right","top","bottom","svgWidth","svgHeight","outerRadius","min","innerRadius","abs","hole","legendColorMap","chartData","colorIndex","renderingOrder","data","map","series","seriesColor","color","legend","point","sort","a","b","indexOf","type","mapCategoryToValues","useCallback","isAngularAxis","categoryToValues","forEach","category","theta","r","value","push","getOrderedRCategories","radialAxis","categoryOrder","getOrderedACategories","angularAxis","rValues","flatMap","rScaleType","scaleType","supportsLog","rScaleDomain","rangeStart","rangeEnd","scale","rScale","tickValues","rTickValues","tickLabels","rTickLabels","useUTC","tickCount","tickText","tickFormat","culture","tickStep","tick0","dateLocalizeOptions","aValues","aScaleType","aDomain","aScale","aTickValues","aTickLabels","direction","unit","classes","renderPolarGrid","extRTickValues","rDomain","domain","length","g","rIndex","className","gridLineOuter","gridLineInner","shape","d","aIndex","radialPoint","join","path","key","circle","cx","cy","radialPoint1","radialPoint2","renderPolarTicks","radialAxisAngle","PI","radialAxisStartPoint","radialAxisEndPoint","sign","pointX","pointY","cos","sin","text","x","y","textAnchor","dominantBaseline","aria-hidden","tickLabel","angle","getActiveLegends","legendHighlighted","legendTitle","activeLegends","includes","renderRadialArea","radialArea","curve","lineOptions","defined","shouldHighlight","fill","fillOpacity","pointerEvents","renderRadialLine","radialLine","radius","stroke","strokeOpacity","strokeWidth","strokeDasharray","strokeDashoffset","strokeLinecap","minMarkerSize","maxMarkerSize","markerSize","showPopover","event","pointId","currentTarget","angularAxisCalloutData","radialAxisCalloutData","hidePopover","markersOnlyMode","filter","s","renderRadialPoints","seriesIndex","pointIndex","id","isActive","minPx","xValue","yValue","ariaLabel","callOutAccessibilityData","colorNeutralBackground1","opacity","tabIndex","onMouseOver","e","onFocus","role","aria-label","onLegendSelectionChange","_selectedLegends","currentLegend","canSelectMultipleLegends","slice","onChange","renderLegends","legends","Object","keys","title","hoverAction","onMouseOutAction","div","ref","legendContainer","centerLegends","legendRef","focusAttributes","axis","root","onMouseLeave","onBlur","chartWrapper","svg","chart","chartTitle","transform","hideTooltip","positioning","target","XValue","YValue","displayName"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/PolarChart/PolarChart.types.ts"],"sourcesContent":["import * as React from 'react';\nimport {\n AreaPolarSeries,\n AxisCategoryOrder,\n AxisProps,\n AxisScaleType,\n Chart,\n LinePolarSeries,\n Margins,\n ScatterPolarSeries,\n} from '../../types/DataPoint';\nimport { LegendsProps } from '../Legends/Legends.types';\n\n/**\n * Configuration options for a polar axis.\n * {@docCategory PolarChart}\n */\nexport type PolarAxisProps = AxisProps & {\n /**\n * Values at which ticks should be placed on the axis.\n */\n tickValues?: number[] | Date[] | string[];\n\n /**\n * Format string for the axis ticks.\n * For numbers, see: https://d3js.org/d3-format.\n * And for dates see: https://d3js.org/d3-time-format.\n */\n tickFormat?: string;\n\n /**\n * Number of ticks to display on the axis.\n */\n tickCount?: number;\n\n /**\n * Defines the order of categories on the axis.\n * @default 'default'\n */\n categoryOrder?: AxisCategoryOrder;\n\n /**\n * Scale type for the axis.\n * @default 'default'\n */\n scaleType?: AxisScaleType;\n\n /**\n * Start value of the axis range.\n */\n rangeStart?: number | Date;\n\n /**\n * End value of the axis range.\n */\n rangeEnd?: number | Date;\n};\n\n/**\n * Polar Chart properties\n * {@docCategory PolarChart}\n */\nexport interface PolarChartProps {\n /**\n * Data series to be rendered in the polar chart.\n */\n data: (AreaPolarSeries | LinePolarSeries | ScatterPolarSeries)[];\n\n /**\n * Width of the polar chart.\n * @default 200\n */\n width?: number;\n\n /**\n * Height of the polar chart.\n * @default 200\n */\n height?: number;\n\n /**\n * Margins around the chart area.\n */\n margins?: Margins;\n\n /**\n * If true, hides the legend.\n * @default false\n */\n hideLegend?: boolean;\n\n /**\n * If true, hides the tooltip.\n * @default false\n */\n hideTooltip?: boolean;\n\n /*\n * Properties for customizing the legend.\n */\n legendProps?: Partial<LegendsProps>;\n\n /**\n * Style properties for the polar chart.\n */\n styles?: PolarChartStyles;\n\n /**\n * Title of the chart.\n */\n chartTitle?: string;\n\n /**\n * Fraction of the radius to cut out from the center of the chart.\n * Accepts values in the range [0, 1].\n */\n hole?: number;\n\n /**\n * Shape of the polar chart.\n * @default 'circle'\n */\n shape?: 'circle' | 'polygon';\n\n /**\n * Direction in which the chart is drawn.\n * @default 'counterclockwise'\n */\n direction?: 'clockwise' | 'counterclockwise';\n\n /**\n * Configuration options for the radial axis.\n */\n radialAxis?: PolarAxisProps;\n\n /**\n * Configuration options for the angular axis.\n */\n angularAxis?: PolarAxisProps & {\n /**\n * Format unit for angular values.\n * @default 'degrees'\n */\n unit?: 'radians' | 'degrees';\n };\n\n /**\n * Optional callback to access the Chart interface. Use this instead of ref for accessing\n * the public methods and properties of the component.\n */\n componentRef?: React.Ref<Chart>;\n\n /**\n * Locale identifier string used to format numbers and dates according to the specified culture.\n * Example: 'en-US', 'fr-FR'.\n */\n culture?: string;\n\n /**\n * Options for localizing date values.\n */\n dateLocalizeOptions?: Intl.DateTimeFormatOptions;\n\n /**\n * If true, date values are treated as UTC dates.\n * @default false\n */\n useUTC?: boolean;\n}\n\n/**\n * Polar Chart style properties\n * {@docCategory PolarChart}\n */\nexport interface PolarChartStyleProps {}\n\n/**\n * Polar Chart styles\n * {@docCategory PolarChart}\n */\nexport interface PolarChartStyles {\n /**\n * Style for the root element.\n */\n root?: string;\n\n /**\n * Style for the chart wrapper element.\n */\n chartWrapper?: string;\n\n /**\n * Style for the chart element.\n */\n chart?: string;\n\n /**\n * Style for the inner grid lines.\n */\n gridLineInner?: string;\n\n /**\n * Style for the outer grid lines.\n */\n gridLineOuter?: string;\n\n /**\n * Style for the tick labels.\n */\n tickLabel?: string;\n\n /**\n * Style for the legend container.\n */\n legendContainer?: string;\n}\n"],"names":[
|
|
1
|
+
{"version":3,"sources":["../src/components/PolarChart/PolarChart.types.ts"],"sourcesContent":["import type * as React from 'react';\nimport type {\n AreaPolarSeries,\n AxisCategoryOrder,\n AxisProps,\n AxisScaleType,\n Chart,\n LinePolarSeries,\n Margins,\n ScatterPolarSeries,\n} from '../../types/DataPoint';\nimport type { LegendsProps } from '../Legends/Legends.types';\n\n/**\n * Configuration options for a polar axis.\n * {@docCategory PolarChart}\n */\nexport type PolarAxisProps = AxisProps & {\n /**\n * Values at which ticks should be placed on the axis.\n */\n tickValues?: number[] | Date[] | string[];\n\n /**\n * Format string for the axis ticks.\n * For numbers, see: https://d3js.org/d3-format.\n * And for dates see: https://d3js.org/d3-time-format.\n */\n tickFormat?: string;\n\n /**\n * Number of ticks to display on the axis.\n */\n tickCount?: number;\n\n /**\n * Defines the order of categories on the axis.\n * @default 'default'\n */\n categoryOrder?: AxisCategoryOrder;\n\n /**\n * Scale type for the axis.\n * @default 'default'\n */\n scaleType?: AxisScaleType;\n\n /**\n * Start value of the axis range.\n */\n rangeStart?: number | Date;\n\n /**\n * End value of the axis range.\n */\n rangeEnd?: number | Date;\n};\n\n/**\n * Polar Chart properties\n * {@docCategory PolarChart}\n */\nexport interface PolarChartProps {\n /**\n * Data series to be rendered in the polar chart.\n */\n data: (AreaPolarSeries | LinePolarSeries | ScatterPolarSeries)[];\n\n /**\n * Width of the polar chart.\n * @default 200\n */\n width?: number;\n\n /**\n * Height of the polar chart.\n * @default 200\n */\n height?: number;\n\n /**\n * Margins around the chart area.\n */\n margins?: Margins;\n\n /**\n * If true, hides the legend.\n * @default false\n */\n hideLegend?: boolean;\n\n /**\n * If true, hides the tooltip.\n * @default false\n */\n hideTooltip?: boolean;\n\n /*\n * Properties for customizing the legend.\n */\n legendProps?: Partial<LegendsProps>;\n\n /**\n * Style properties for the polar chart.\n */\n styles?: PolarChartStyles;\n\n /**\n * Title of the chart.\n */\n chartTitle?: string;\n\n /**\n * Fraction of the radius to cut out from the center of the chart.\n * Accepts values in the range [0, 1].\n */\n hole?: number;\n\n /**\n * Shape of the polar chart.\n * @default 'circle'\n */\n shape?: 'circle' | 'polygon';\n\n /**\n * Direction in which the chart is drawn.\n * @default 'counterclockwise'\n */\n direction?: 'clockwise' | 'counterclockwise';\n\n /**\n * Configuration options for the radial axis.\n */\n radialAxis?: PolarAxisProps;\n\n /**\n * Configuration options for the angular axis.\n */\n angularAxis?: PolarAxisProps & {\n /**\n * Format unit for angular values.\n * @default 'degrees'\n */\n unit?: 'radians' | 'degrees';\n };\n\n /**\n * Optional callback to access the Chart interface. Use this instead of ref for accessing\n * the public methods and properties of the component.\n */\n componentRef?: React.Ref<Chart>;\n\n /**\n * Locale identifier string used to format numbers and dates according to the specified culture.\n * Example: 'en-US', 'fr-FR'.\n */\n culture?: string;\n\n /**\n * Options for localizing date values.\n */\n dateLocalizeOptions?: Intl.DateTimeFormatOptions;\n\n /**\n * If true, date values are treated as UTC dates.\n * @default false\n */\n useUTC?: boolean;\n}\n\n/**\n * Polar Chart style properties\n * {@docCategory PolarChart}\n */\nexport interface PolarChartStyleProps {}\n\n/**\n * Polar Chart styles\n * {@docCategory PolarChart}\n */\nexport interface PolarChartStyles {\n /**\n * Style for the root element.\n */\n root?: string;\n\n /**\n * Style for the chart wrapper element.\n */\n chartWrapper?: string;\n\n /**\n * Style for the chart element.\n */\n chart?: string;\n\n /**\n * Style for the inner grid lines.\n */\n gridLineInner?: string;\n\n /**\n * Style for the outer grid lines.\n */\n gridLineOuter?: string;\n\n /**\n * Style for the tick labels.\n */\n tickLabel?: string;\n\n /**\n * Style for the legend container.\n */\n legendContainer?: string;\n}\n"],"names":[],"mappings":"AAgLA;;;CAGC,GACD,WAmCC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/PolarChart/PolarChart.utils.ts"],"sourcesContent":["import {\n scaleBand as d3ScaleBand,\n scaleLinear as d3ScaleLinear,\n scaleLog as d3ScaleLog,\n scaleTime as d3ScaleTime,\n scaleUtc as d3ScaleUtc,\n NumberValue,\n ScaleBand,\n ScaleContinuousNumeric,\n ScaleTime,\n} from 'd3-scale';\nimport { extent as d3Extent, range as d3Range } from 'd3-array';\nimport { format as d3Format } from 'd3-format';\nimport { AxisScaleType } from '../../types/DataPoint';\nimport {\n generateDateTicks,\n generateNumericTicks,\n getDateFormatLevel,\n isValidDomainValue,\n precisionRound,\n} from '../../utilities/utilities';\nimport {\n isInvalidValue,\n formatToLocaleString,\n getMultiLevelDateTimeFormatOptions,\n formatDateToLocaleString,\n} from '@fluentui/chart-utilities';\nimport { timeFormat as d3TimeFormat, utcFormat as d3UtcFormat } from 'd3-time-format';\nimport { PolarChartProps } from './PolarChart.types';\n\nexport const EPSILON = 1e-6;\n\nexport const createRadialScale = (\n scaleType: string,\n domain: (string | number | Date)[],\n range: number[],\n opts: {\n useUTC?: boolean;\n tickCount?: number;\n tickValues?: (string | number | Date)[];\n tickText?: string[];\n tickFormat?: string;\n culture?: string;\n tickStep?: number | string;\n tick0?: number | Date;\n dateLocalizeOptions?: Intl.DateTimeFormatOptions;\n } = {},\n): {\n scale: ScaleBand<string> | ScaleContinuousNumeric<number, number, undefined> | ScaleTime<number, number>;\n tickValues: (string | number | Date)[];\n tickLabels: string[];\n} => {\n if (scaleType === 'category') {\n const scale = d3ScaleBand()\n .domain(domain as string[])\n .range(range)\n .paddingInner(1);\n const tickValues = Array.isArray(opts.tickValues) ? (opts.tickValues as string[]) : (domain as string[]);\n const tickFormat = (domainValue: string, index: number) => {\n if (Array.isArray(opts.tickValues) && Array.isArray(opts.tickText) && !isInvalidValue(opts.tickText[index])) {\n return opts.tickText[index];\n }\n return domainValue;\n };\n return { scale, tickValues, tickLabels: tickValues.map(tickFormat) };\n }\n\n let scale: ScaleContinuousNumeric<number, number, undefined> | ScaleTime<number, number>;\n if (scaleType === 'date') {\n scale = opts.useUTC ? d3ScaleUtc() : d3ScaleTime();\n } else {\n scale = scaleType === 'log' ? d3ScaleLog() : d3ScaleLinear();\n }\n\n scale.domain(domain as (number | Date)[]);\n scale.range(range);\n scale.nice();\n\n const tickCount = opts.tickCount ?? 4;\n let tickFormat;\n let customTickValues = Array.isArray(opts.tickValues) ? (opts.tickValues as (number | Date)[]) : undefined;\n if (scaleType === 'date') {\n let lowestFormatLevel = 100;\n let highestFormatLevel = -1;\n\n (scale as ScaleTime<number, number>).ticks().forEach((domainValue: Date) => {\n const formatLevel = getDateFormatLevel(domainValue, opts.useUTC);\n if (formatLevel > highestFormatLevel) {\n highestFormatLevel = formatLevel;\n }\n if (formatLevel < lowestFormatLevel) {\n lowestFormatLevel = formatLevel;\n }\n });\n const formatOptions =\n opts.dateLocalizeOptions ?? getMultiLevelDateTimeFormatOptions(lowestFormatLevel, highestFormatLevel);\n tickFormat = (domainValue: Date, index: number) => {\n if (Array.isArray(opts.tickValues) && Array.isArray(opts.tickText) && !isInvalidValue(opts.tickText[index])) {\n return opts.tickText[index];\n }\n if (isInvalidValue(opts.culture) && typeof opts.tickFormat === 'string') {\n if (opts.useUTC) {\n return d3UtcFormat(opts.tickFormat)(domainValue);\n } else {\n return d3TimeFormat(opts.tickFormat)(domainValue);\n }\n }\n return formatDateToLocaleString(domainValue, opts.culture, opts.useUTC, false, formatOptions);\n };\n if (opts.tickStep) {\n customTickValues = generateDateTicks(opts.tickStep, opts.tick0, scale.domain() as Date[], opts.useUTC);\n }\n } else {\n const defaultTickFormat = (scale as ScaleContinuousNumeric<number, number>).tickFormat(tickCount);\n tickFormat = (domainValue: NumberValue, index: number) => {\n if (Array.isArray(opts.tickValues) && Array.isArray(opts.tickText) && !isInvalidValue(opts.tickText[index])) {\n return opts.tickText[index];\n }\n if (typeof opts.tickFormat === 'string') {\n return d3Format(opts.tickFormat)(domainValue);\n }\n const value = typeof domainValue === 'number' ? domainValue : domainValue.valueOf();\n return defaultTickFormat(value) === '' ? '' : (formatToLocaleString(value, opts.culture) as string);\n };\n if (opts.tickStep) {\n customTickValues = generateNumericTicks(\n scaleType as AxisScaleType,\n opts.tickStep,\n opts.tick0,\n scale.domain() as number[],\n );\n }\n }\n const tickValues = customTickValues ?? scale.ticks(tickCount);\n\n return { scale, tickValues, tickLabels: tickValues.map(tickFormat) };\n};\n\nexport const getScaleType = (\n values: (string | number | Date)[],\n opts: {\n scaleType?: AxisScaleType;\n supportsLog?: boolean;\n } = {},\n): string => {\n let scaleType = 'category';\n if (typeof values[0] === 'number') {\n if (opts.supportsLog && opts.scaleType === 'log') {\n scaleType = 'log';\n } else {\n scaleType = 'linear';\n }\n } else if (values[0] instanceof Date) {\n scaleType = 'date';\n }\n return scaleType;\n};\n\nexport const getContinuousScaleDomain = (\n scaleType: string,\n values: (number | Date)[],\n opts: {\n rangeStart?: number | Date;\n rangeEnd?: number | Date;\n } = {},\n): (number | Date)[] => {\n let [min, max] = d3Extent(values.filter(v => isValidDomainValue(v, scaleType as AxisScaleType)) as (number | Date)[]);\n if (scaleType === 'linear') {\n [min, max] = d3Extent([min, max, 0] as number[]);\n }\n if (!isInvalidValue(opts.rangeStart)) {\n min = opts.rangeStart;\n }\n if (!isInvalidValue(opts.rangeEnd)) {\n max = opts.rangeEnd;\n }\n\n if (isInvalidValue(min) || isInvalidValue(max)) {\n return [];\n }\n return [min!, max!];\n};\n\nconst degToRad = (deg: number) => (deg * Math.PI) / 180;\n\nconst radToDeg = (rad: number) => (rad * 180) / Math.PI;\n\nconst normalizeAngle = (deg: number, direction: PolarChartProps['direction']) =>\n (((direction === 'clockwise' ? deg : 450 - deg) % 360) + 360) % 360;\n\nexport const createAngularScale = (\n scaleType: string,\n domain: (string | number | Date)[],\n opts: {\n tickCount?: number;\n tickValues?: (string | number | Date)[];\n tickText?: string[];\n tickFormat?: string;\n culture?: string;\n tickStep?: number | string;\n tick0?: number | Date;\n direction?: PolarChartProps['direction'];\n unit?: NonNullable<PolarChartProps['angularAxis']>['unit'];\n } = {},\n): { scale: (v: string | number) => number; tickValues: (string | number)[]; tickLabels: string[] } => {\n if (scaleType === 'category') {\n const categoryIndexMap: Record<string, number> = {};\n (domain as string[]).forEach((d, i) => {\n categoryIndexMap[d] = i;\n });\n const period = 360 / domain.length;\n const tickValues = Array.isArray(opts.tickValues) ? (opts.tickValues as string[]) : (domain as string[]);\n const tickFormat = (domainValue: string, index: number) => {\n if (Array.isArray(opts.tickValues) && Array.isArray(opts.tickText) && !isInvalidValue(opts.tickText[index])) {\n return opts.tickText[index];\n }\n return domainValue;\n };\n return {\n scale: (v: string) => degToRad(normalizeAngle(categoryIndexMap[v] * period, opts.direction)),\n tickValues,\n tickLabels: tickValues.map(tickFormat),\n };\n }\n\n let customTickValues = Array.isArray(opts.tickValues) ? (opts.tickValues as number[]) : undefined;\n const tickFormat = (domainValue: number, index: number) => {\n if (Array.isArray(opts.tickValues) && Array.isArray(opts.tickText) && !isInvalidValue(opts.tickText[index])) {\n return opts.tickText[index];\n }\n if (typeof opts.tickFormat === 'string') {\n return d3Format(opts.tickFormat)(domainValue);\n }\n return formatAngle(domainValue, opts.unit);\n };\n if (opts.tickStep) {\n customTickValues = generateNumericTicks(scaleType as AxisScaleType, opts.tickStep, opts.tick0, [\n 0,\n (opts.unit === 'radians' ? 2 * Math.PI : 360) - EPSILON,\n ])?.map(v => (opts.unit === 'radians' ? radToDeg(v) : v));\n }\n const tickValues = customTickValues ?? d3Range(0, 360, 360 / (opts.tickCount ?? 8));\n\n return {\n scale: (v: number) => degToRad(normalizeAngle(v, opts.direction)),\n tickValues,\n tickLabels: tickValues.map(tickFormat),\n };\n};\n\nexport const formatAngle = (\n value: string | number,\n unit: NonNullable<PolarChartProps['angularAxis']>['unit'],\n): string =>\n typeof value === 'string'\n ? value\n : unit === 'radians'\n ? `${precisionRound(value / 180, 6)}π`\n : `${precisionRound(value, 6)}°`;\n"],"names":["scaleBand","d3ScaleBand","scaleLinear","d3ScaleLinear","scaleLog","d3ScaleLog","scaleTime","d3ScaleTime","scaleUtc","d3ScaleUtc","extent","d3Extent","range","d3Range","format","d3Format","generateDateTicks","generateNumericTicks","getDateFormatLevel","isValidDomainValue","precisionRound","isInvalidValue","formatToLocaleString","getMultiLevelDateTimeFormatOptions","formatDateToLocaleString","timeFormat","d3TimeFormat","utcFormat","d3UtcFormat","EPSILON","createRadialScale","scaleType","domain","opts","scale","paddingInner","tickValues","Array","isArray","tickFormat","domainValue","index","tickText","tickLabels","map","useUTC","nice","tickCount","customTickValues","undefined","lowestFormatLevel","highestFormatLevel","ticks","forEach","formatLevel","formatOptions","dateLocalizeOptions","culture","tickStep","tick0","defaultTickFormat","value","valueOf","getScaleType","values","supportsLog","Date","getContinuousScaleDomain","min","max","filter","v","rangeStart","rangeEnd","degToRad","deg","Math","PI","radToDeg","rad","normalizeAngle","direction","createAngularScale","categoryIndexMap","d","i","period","length","formatAngle","unit"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../src/components/PolarChart/PolarChart.utils.ts"],"sourcesContent":["import type { NumberValue, ScaleBand, ScaleContinuousNumeric, ScaleTime } from 'd3-scale';\nimport {\n scaleBand as d3ScaleBand,\n scaleLinear as d3ScaleLinear,\n scaleLog as d3ScaleLog,\n scaleTime as d3ScaleTime,\n scaleUtc as d3ScaleUtc,\n} from 'd3-scale';\nimport { extent as d3Extent, range as d3Range } from 'd3-array';\nimport { format as d3Format } from 'd3-format';\nimport type { AxisScaleType } from '../../types/DataPoint';\nimport {\n generateDateTicks,\n generateNumericTicks,\n getDateFormatLevel,\n isValidDomainValue,\n precisionRound,\n} from '../../utilities/utilities';\nimport {\n isInvalidValue,\n formatToLocaleString,\n getMultiLevelDateTimeFormatOptions,\n formatDateToLocaleString,\n} from '@fluentui/chart-utilities';\nimport { timeFormat as d3TimeFormat, utcFormat as d3UtcFormat } from 'd3-time-format';\nimport type { PolarChartProps } from './PolarChart.types';\n\nexport const EPSILON = 1e-6;\n\nexport const createRadialScale = (\n scaleType: string,\n domain: (string | number | Date)[],\n range: number[],\n opts: {\n useUTC?: boolean;\n tickCount?: number;\n tickValues?: (string | number | Date)[];\n tickText?: string[];\n tickFormat?: string;\n culture?: string;\n tickStep?: number | string;\n tick0?: number | Date;\n dateLocalizeOptions?: Intl.DateTimeFormatOptions;\n } = {},\n): {\n scale: ScaleBand<string> | ScaleContinuousNumeric<number, number, undefined> | ScaleTime<number, number>;\n tickValues: (string | number | Date)[];\n tickLabels: string[];\n} => {\n if (scaleType === 'category') {\n const scale = d3ScaleBand()\n .domain(domain as string[])\n .range(range)\n .paddingInner(1);\n const tickValues = Array.isArray(opts.tickValues) ? (opts.tickValues as string[]) : (domain as string[]);\n const tickFormat = (domainValue: string, index: number) => {\n if (Array.isArray(opts.tickValues) && Array.isArray(opts.tickText) && !isInvalidValue(opts.tickText[index])) {\n return opts.tickText[index];\n }\n return domainValue;\n };\n return { scale, tickValues, tickLabels: tickValues.map(tickFormat) };\n }\n\n let scale: ScaleContinuousNumeric<number, number, undefined> | ScaleTime<number, number>;\n if (scaleType === 'date') {\n scale = opts.useUTC ? d3ScaleUtc() : d3ScaleTime();\n } else {\n scale = scaleType === 'log' ? d3ScaleLog() : d3ScaleLinear();\n }\n\n scale.domain(domain as (number | Date)[]);\n scale.range(range);\n scale.nice();\n\n const tickCount = opts.tickCount ?? 4;\n let tickFormat;\n let customTickValues = Array.isArray(opts.tickValues) ? (opts.tickValues as (number | Date)[]) : undefined;\n if (scaleType === 'date') {\n let lowestFormatLevel = 100;\n let highestFormatLevel = -1;\n\n (scale as ScaleTime<number, number>).ticks().forEach((domainValue: Date) => {\n const formatLevel = getDateFormatLevel(domainValue, opts.useUTC);\n if (formatLevel > highestFormatLevel) {\n highestFormatLevel = formatLevel;\n }\n if (formatLevel < lowestFormatLevel) {\n lowestFormatLevel = formatLevel;\n }\n });\n const formatOptions =\n opts.dateLocalizeOptions ?? getMultiLevelDateTimeFormatOptions(lowestFormatLevel, highestFormatLevel);\n tickFormat = (domainValue: Date, index: number) => {\n if (Array.isArray(opts.tickValues) && Array.isArray(opts.tickText) && !isInvalidValue(opts.tickText[index])) {\n return opts.tickText[index];\n }\n if (isInvalidValue(opts.culture) && typeof opts.tickFormat === 'string') {\n if (opts.useUTC) {\n return d3UtcFormat(opts.tickFormat)(domainValue);\n } else {\n return d3TimeFormat(opts.tickFormat)(domainValue);\n }\n }\n return formatDateToLocaleString(domainValue, opts.culture, opts.useUTC, false, formatOptions);\n };\n if (opts.tickStep) {\n customTickValues = generateDateTicks(opts.tickStep, opts.tick0, scale.domain() as Date[], opts.useUTC);\n }\n } else {\n const defaultTickFormat = (scale as ScaleContinuousNumeric<number, number>).tickFormat(tickCount);\n tickFormat = (domainValue: NumberValue, index: number) => {\n if (Array.isArray(opts.tickValues) && Array.isArray(opts.tickText) && !isInvalidValue(opts.tickText[index])) {\n return opts.tickText[index];\n }\n if (typeof opts.tickFormat === 'string') {\n return d3Format(opts.tickFormat)(domainValue);\n }\n const value = typeof domainValue === 'number' ? domainValue : domainValue.valueOf();\n return defaultTickFormat(value) === '' ? '' : (formatToLocaleString(value, opts.culture) as string);\n };\n if (opts.tickStep) {\n customTickValues = generateNumericTicks(\n scaleType as AxisScaleType,\n opts.tickStep,\n opts.tick0,\n scale.domain() as number[],\n );\n }\n }\n const tickValues = customTickValues ?? scale.ticks(tickCount);\n\n return { scale, tickValues, tickLabels: tickValues.map(tickFormat) };\n};\n\nexport const getScaleType = (\n values: (string | number | Date)[],\n opts: {\n scaleType?: AxisScaleType;\n supportsLog?: boolean;\n } = {},\n): string => {\n let scaleType = 'category';\n if (typeof values[0] === 'number') {\n if (opts.supportsLog && opts.scaleType === 'log') {\n scaleType = 'log';\n } else {\n scaleType = 'linear';\n }\n } else if (values[0] instanceof Date) {\n scaleType = 'date';\n }\n return scaleType;\n};\n\nexport const getContinuousScaleDomain = (\n scaleType: string,\n values: (number | Date)[],\n opts: {\n rangeStart?: number | Date;\n rangeEnd?: number | Date;\n } = {},\n): (number | Date)[] => {\n let [min, max] = d3Extent(values.filter(v => isValidDomainValue(v, scaleType as AxisScaleType)) as (number | Date)[]);\n if (scaleType === 'linear') {\n [min, max] = d3Extent([min, max, 0] as number[]);\n }\n if (!isInvalidValue(opts.rangeStart)) {\n min = opts.rangeStart;\n }\n if (!isInvalidValue(opts.rangeEnd)) {\n max = opts.rangeEnd;\n }\n\n if (isInvalidValue(min) || isInvalidValue(max)) {\n return [];\n }\n return [min!, max!];\n};\n\nconst degToRad = (deg: number) => (deg * Math.PI) / 180;\n\nconst radToDeg = (rad: number) => (rad * 180) / Math.PI;\n\nconst normalizeAngle = (deg: number, direction: PolarChartProps['direction']) =>\n (((direction === 'clockwise' ? deg : 450 - deg) % 360) + 360) % 360;\n\nexport const createAngularScale = (\n scaleType: string,\n domain: (string | number | Date)[],\n opts: {\n tickCount?: number;\n tickValues?: (string | number | Date)[];\n tickText?: string[];\n tickFormat?: string;\n culture?: string;\n tickStep?: number | string;\n tick0?: number | Date;\n direction?: PolarChartProps['direction'];\n unit?: NonNullable<PolarChartProps['angularAxis']>['unit'];\n } = {},\n): { scale: (v: string | number) => number; tickValues: (string | number)[]; tickLabels: string[] } => {\n if (scaleType === 'category') {\n const categoryIndexMap: Record<string, number> = {};\n (domain as string[]).forEach((d, i) => {\n categoryIndexMap[d] = i;\n });\n const period = 360 / domain.length;\n const tickValues = Array.isArray(opts.tickValues) ? (opts.tickValues as string[]) : (domain as string[]);\n const tickFormat = (domainValue: string, index: number) => {\n if (Array.isArray(opts.tickValues) && Array.isArray(opts.tickText) && !isInvalidValue(opts.tickText[index])) {\n return opts.tickText[index];\n }\n return domainValue;\n };\n return {\n scale: (v: string) => degToRad(normalizeAngle(categoryIndexMap[v] * period, opts.direction)),\n tickValues,\n tickLabels: tickValues.map(tickFormat),\n };\n }\n\n let customTickValues = Array.isArray(opts.tickValues) ? (opts.tickValues as number[]) : undefined;\n const tickFormat = (domainValue: number, index: number) => {\n if (Array.isArray(opts.tickValues) && Array.isArray(opts.tickText) && !isInvalidValue(opts.tickText[index])) {\n return opts.tickText[index];\n }\n if (typeof opts.tickFormat === 'string') {\n return d3Format(opts.tickFormat)(domainValue);\n }\n return formatAngle(domainValue, opts.unit);\n };\n if (opts.tickStep) {\n customTickValues = generateNumericTicks(scaleType as AxisScaleType, opts.tickStep, opts.tick0, [\n 0,\n (opts.unit === 'radians' ? 2 * Math.PI : 360) - EPSILON,\n ])?.map(v => (opts.unit === 'radians' ? radToDeg(v) : v));\n }\n const tickValues = customTickValues ?? d3Range(0, 360, 360 / (opts.tickCount ?? 8));\n\n return {\n scale: (v: number) => degToRad(normalizeAngle(v, opts.direction)),\n tickValues,\n tickLabels: tickValues.map(tickFormat),\n };\n};\n\nexport const formatAngle = (\n value: string | number,\n unit: NonNullable<PolarChartProps['angularAxis']>['unit'],\n): string =>\n typeof value === 'string'\n ? value\n : unit === 'radians'\n ? `${precisionRound(value / 180, 6)}π`\n : `${precisionRound(value, 6)}°`;\n"],"names":["scaleBand","d3ScaleBand","scaleLinear","d3ScaleLinear","scaleLog","d3ScaleLog","scaleTime","d3ScaleTime","scaleUtc","d3ScaleUtc","extent","d3Extent","range","d3Range","format","d3Format","generateDateTicks","generateNumericTicks","getDateFormatLevel","isValidDomainValue","precisionRound","isInvalidValue","formatToLocaleString","getMultiLevelDateTimeFormatOptions","formatDateToLocaleString","timeFormat","d3TimeFormat","utcFormat","d3UtcFormat","EPSILON","createRadialScale","scaleType","domain","opts","scale","paddingInner","tickValues","Array","isArray","tickFormat","domainValue","index","tickText","tickLabels","map","useUTC","nice","tickCount","customTickValues","undefined","lowestFormatLevel","highestFormatLevel","ticks","forEach","formatLevel","formatOptions","dateLocalizeOptions","culture","tickStep","tick0","defaultTickFormat","value","valueOf","getScaleType","values","supportsLog","Date","getContinuousScaleDomain","min","max","filter","v","rangeStart","rangeEnd","degToRad","deg","Math","PI","radToDeg","rad","normalizeAngle","direction","createAngularScale","categoryIndexMap","d","i","period","length","formatAngle","unit"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/PolarChart/usePolarChartStyles.styles.ts"],"sourcesContent":["'use client';\n\nimport { makeStyles, mergeClasses } from '@griffel/react';\nimport { PolarChartStyles, PolarChartProps } from './PolarChart.types';\nimport type { SlotClassNames } from '@fluentui/react-utilities';\nimport { tokens, typographyStyles } from '@fluentui/react-theme';\n\n/**\n * @internal\n */\nexport const polarChartClassNames: SlotClassNames<PolarChartStyles> = {\n root: 'fui-polar__root',\n chartWrapper: 'fui-polar__chartWrapper',\n chart: 'fui-polar__chart',\n gridLineInner: 'fui-polar__gridLineInner',\n gridLineOuter: 'fui-polar__gridLineOuter',\n tickLabel: 'fui-polar__tickLabel',\n legendContainer: 'fui-polar__legendContainer',\n};\n\nconst useStyles = makeStyles({\n root: {\n ...typographyStyles.body1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n width: '100%',\n height: '100%',\n textAlign: 'left',\n },\n\n chart: {\n display: 'block',\n },\n\n gridLine: {\n fill: 'none',\n stroke: tokens.colorNeutralForeground1,\n strokeWidth: '1px',\n },\n\n gridLineInner: {\n opacity: 0.2,\n },\n\n gridLineOuter: {\n opacity: 1,\n },\n\n tickLabel: {\n ...typographyStyles.caption2Strong,\n fill: tokens.colorNeutralForeground1,\n },\n\n legendContainer: {\n width: '100%',\n },\n});\n\n/**\n * Apply styling to the PolarChart component\n */\nexport const usePolarChartStyles = (props: PolarChartProps): PolarChartStyles => {\n const baseStyles = useStyles();\n\n return {\n root: mergeClasses(polarChartClassNames.root, baseStyles.root, props.styles?.root),\n chartWrapper: mergeClasses(polarChartClassNames.chartWrapper, props.styles?.chartWrapper),\n chart: mergeClasses(polarChartClassNames.chart, baseStyles.chart, props.styles?.chart),\n gridLineInner: mergeClasses(\n polarChartClassNames.gridLineInner,\n baseStyles.gridLine,\n baseStyles.gridLineInner,\n props.styles?.gridLineInner,\n ),\n gridLineOuter: mergeClasses(\n polarChartClassNames.gridLineOuter,\n baseStyles.gridLine,\n baseStyles.gridLineOuter,\n props.styles?.gridLineOuter,\n ),\n tickLabel: mergeClasses(polarChartClassNames.tickLabel, baseStyles.tickLabel, props.styles?.tickLabel),\n legendContainer: mergeClasses(\n polarChartClassNames.legendContainer,\n baseStyles.legendContainer,\n props.styles?.legendContainer,\n ),\n };\n};\n"],"names":["makeStyles","mergeClasses","tokens","typographyStyles","polarChartClassNames","root","chartWrapper","chart","gridLineInner","gridLineOuter","tickLabel","legendContainer","useStyles","body1","display","flexDirection","alignItems","width","height","textAlign","gridLine","fill","stroke","colorNeutralForeground1","strokeWidth","opacity","caption2Strong","usePolarChartStyles","props","baseStyles","styles"],"mappings":"AAAA;AAEA,SAASA,UAAU,EAAEC,YAAY,QAAQ,iBAAiB;AAG1D,SAASC,MAAM,EAAEC,gBAAgB,QAAQ,wBAAwB;AAEjE;;CAEC,GACD,OAAO,MAAMC,uBAAyD;IACpEC,MAAM;IACNC,cAAc;IACdC,OAAO;IACPC,eAAe;IACfC,eAAe;IACfC,WAAW;IACXC,iBAAiB;AACnB,EAAE;AAEF,MAAMC,YAAYZ,WAAW;IAC3BK,MAAM;QACJ,GAAGF,iBAAiBU,KAAK;QACzBC,SAAS;QACTC,eAAe;QACfC,YAAY;QACZC,OAAO;QACPC,QAAQ;QACRC,WAAW;IACb;IAEAZ,OAAO;QACLO,SAAS;IACX;IAEAM,UAAU;QACRC,MAAM;QACNC,QAAQpB,OAAOqB,uBAAuB;QACtCC,aAAa;IACf;IAEAhB,eAAe;QACbiB,SAAS;IACX;IAEAhB,eAAe;QACbgB,SAAS;IACX;IAEAf,WAAW;QACT,GAAGP,iBAAiBuB,cAAc;QAClCL,MAAMnB,OAAOqB,uBAAuB;IACtC;IAEAZ,iBAAiB;QACfM,OAAO;IACT;AACF;AAEA;;CAEC,GACD,OAAO,MAAMU,sBAAsB,CAACC;QAI+BA,eACDA,gBACIA,gBAKhEA,gBAMAA,gBAE4EA,gBAI5EA;IAtBJ,MAAMC,aAAajB;IAEnB,OAAO;QACLP,MAAMJ,aAAaG,qBAAqBC,IAAI,EAAEwB,WAAWxB,IAAI,GAAEuB,gBAAAA,MAAME,MAAM,cAAZF,oCAAAA,cAAcvB,IAAI;QACjFC,cAAcL,aAAaG,qBAAqBE,YAAY,GAAEsB,iBAAAA,MAAME,MAAM,cAAZF,qCAAAA,eAActB,YAAY;QACxFC,OAAON,aAAaG,qBAAqBG,KAAK,EAAEsB,WAAWtB,KAAK,GAAEqB,iBAAAA,MAAME,MAAM,cAAZF,qCAAAA,eAAcrB,KAAK;QACrFC,eAAeP,aACbG,qBAAqBI,aAAa,EAClCqB,WAAWT,QAAQ,EACnBS,WAAWrB,aAAa,GACxBoB,iBAAAA,MAAME,MAAM,cAAZF,qCAAAA,eAAcpB,aAAa;QAE7BC,eAAeR,aACbG,qBAAqBK,aAAa,EAClCoB,WAAWT,QAAQ,EACnBS,WAAWpB,aAAa,GACxBmB,iBAAAA,MAAME,MAAM,cAAZF,qCAAAA,eAAcnB,aAAa;QAE7BC,WAAWT,aAAaG,qBAAqBM,SAAS,EAAEmB,WAAWnB,SAAS,GAAEkB,iBAAAA,MAAME,MAAM,cAAZF,qCAAAA,eAAclB,SAAS;QACrGC,iBAAiBV,aACfG,qBAAqBO,eAAe,EACpCkB,WAAWlB,eAAe,GAC1BiB,iBAAAA,MAAME,MAAM,cAAZF,qCAAAA,eAAcjB,eAAe;IAEjC;AACF,EAAE"}
|
|
1
|
+
{"version":3,"sources":["../src/components/PolarChart/usePolarChartStyles.styles.ts"],"sourcesContent":["'use client';\n\nimport { makeStyles, mergeClasses } from '@griffel/react';\nimport type { PolarChartStyles, PolarChartProps } from './PolarChart.types';\nimport type { SlotClassNames } from '@fluentui/react-utilities';\nimport { tokens, typographyStyles } from '@fluentui/react-theme';\n\n/**\n * @internal\n */\nexport const polarChartClassNames: SlotClassNames<PolarChartStyles> = {\n root: 'fui-polar__root',\n chartWrapper: 'fui-polar__chartWrapper',\n chart: 'fui-polar__chart',\n gridLineInner: 'fui-polar__gridLineInner',\n gridLineOuter: 'fui-polar__gridLineOuter',\n tickLabel: 'fui-polar__tickLabel',\n legendContainer: 'fui-polar__legendContainer',\n};\n\nconst useStyles = makeStyles({\n root: {\n ...typographyStyles.body1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n width: '100%',\n height: '100%',\n textAlign: 'left',\n },\n\n chart: {\n display: 'block',\n },\n\n gridLine: {\n fill: 'none',\n stroke: tokens.colorNeutralForeground1,\n strokeWidth: '1px',\n },\n\n gridLineInner: {\n opacity: 0.2,\n },\n\n gridLineOuter: {\n opacity: 1,\n },\n\n tickLabel: {\n ...typographyStyles.caption2Strong,\n fill: tokens.colorNeutralForeground1,\n },\n\n legendContainer: {\n width: '100%',\n },\n});\n\n/**\n * Apply styling to the PolarChart component\n */\nexport const usePolarChartStyles = (props: PolarChartProps): PolarChartStyles => {\n const baseStyles = useStyles();\n\n return {\n root: mergeClasses(polarChartClassNames.root, baseStyles.root, props.styles?.root),\n chartWrapper: mergeClasses(polarChartClassNames.chartWrapper, props.styles?.chartWrapper),\n chart: mergeClasses(polarChartClassNames.chart, baseStyles.chart, props.styles?.chart),\n gridLineInner: mergeClasses(\n polarChartClassNames.gridLineInner,\n baseStyles.gridLine,\n baseStyles.gridLineInner,\n props.styles?.gridLineInner,\n ),\n gridLineOuter: mergeClasses(\n polarChartClassNames.gridLineOuter,\n baseStyles.gridLine,\n baseStyles.gridLineOuter,\n props.styles?.gridLineOuter,\n ),\n tickLabel: mergeClasses(polarChartClassNames.tickLabel, baseStyles.tickLabel, props.styles?.tickLabel),\n legendContainer: mergeClasses(\n polarChartClassNames.legendContainer,\n baseStyles.legendContainer,\n props.styles?.legendContainer,\n ),\n };\n};\n"],"names":["makeStyles","mergeClasses","tokens","typographyStyles","polarChartClassNames","root","chartWrapper","chart","gridLineInner","gridLineOuter","tickLabel","legendContainer","useStyles","body1","display","flexDirection","alignItems","width","height","textAlign","gridLine","fill","stroke","colorNeutralForeground1","strokeWidth","opacity","caption2Strong","usePolarChartStyles","props","baseStyles","styles"],"mappings":"AAAA;AAEA,SAASA,UAAU,EAAEC,YAAY,QAAQ,iBAAiB;AAG1D,SAASC,MAAM,EAAEC,gBAAgB,QAAQ,wBAAwB;AAEjE;;CAEC,GACD,OAAO,MAAMC,uBAAyD;IACpEC,MAAM;IACNC,cAAc;IACdC,OAAO;IACPC,eAAe;IACfC,eAAe;IACfC,WAAW;IACXC,iBAAiB;AACnB,EAAE;AAEF,MAAMC,YAAYZ,WAAW;IAC3BK,MAAM;QACJ,GAAGF,iBAAiBU,KAAK;QACzBC,SAAS;QACTC,eAAe;QACfC,YAAY;QACZC,OAAO;QACPC,QAAQ;QACRC,WAAW;IACb;IAEAZ,OAAO;QACLO,SAAS;IACX;IAEAM,UAAU;QACRC,MAAM;QACNC,QAAQpB,OAAOqB,uBAAuB;QACtCC,aAAa;IACf;IAEAhB,eAAe;QACbiB,SAAS;IACX;IAEAhB,eAAe;QACbgB,SAAS;IACX;IAEAf,WAAW;QACT,GAAGP,iBAAiBuB,cAAc;QAClCL,MAAMnB,OAAOqB,uBAAuB;IACtC;IAEAZ,iBAAiB;QACfM,OAAO;IACT;AACF;AAEA;;CAEC,GACD,OAAO,MAAMU,sBAAsB,CAACC;QAI+BA,eACDA,gBACIA,gBAKhEA,gBAMAA,gBAE4EA,gBAI5EA;IAtBJ,MAAMC,aAAajB;IAEnB,OAAO;QACLP,MAAMJ,aAAaG,qBAAqBC,IAAI,EAAEwB,WAAWxB,IAAI,GAAEuB,gBAAAA,MAAME,MAAM,cAAZF,oCAAAA,cAAcvB,IAAI;QACjFC,cAAcL,aAAaG,qBAAqBE,YAAY,GAAEsB,iBAAAA,MAAME,MAAM,cAAZF,qCAAAA,eAActB,YAAY;QACxFC,OAAON,aAAaG,qBAAqBG,KAAK,EAAEsB,WAAWtB,KAAK,GAAEqB,iBAAAA,MAAME,MAAM,cAAZF,qCAAAA,eAAcrB,KAAK;QACrFC,eAAeP,aACbG,qBAAqBI,aAAa,EAClCqB,WAAWT,QAAQ,EACnBS,WAAWrB,aAAa,GACxBoB,iBAAAA,MAAME,MAAM,cAAZF,qCAAAA,eAAcpB,aAAa;QAE7BC,eAAeR,aACbG,qBAAqBK,aAAa,EAClCoB,WAAWT,QAAQ,EACnBS,WAAWpB,aAAa,GACxBmB,iBAAAA,MAAME,MAAM,cAAZF,qCAAAA,eAAcnB,aAAa;QAE7BC,WAAWT,aAAaG,qBAAqBM,SAAS,EAAEmB,WAAWnB,SAAS,GAAEkB,iBAAAA,MAAME,MAAM,cAAZF,qCAAAA,eAAclB,SAAS;QACrGC,iBAAiBV,aACfG,qBAAqBO,eAAe,EACpCkB,WAAWlB,eAAe,GAC1BiB,iBAAAA,MAAME,MAAM,cAAZF,qCAAAA,eAAcjB,eAAe;IAEjC;AACF,EAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/ResponsiveContainer/ResponsiveContainer.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { getWindow } from '../../utilities/getWindow';\nimport { ResponsiveChildProps, ResponsiveContainerProps } from './ResponsiveContainer.types';\nimport { useResponsiveChildStyles } from './useResponsiveChildStyles.styles';\nimport { mergeClasses } from '@griffel/react';\n\n/**\n * Responsive Container component\n * {@docCategory ResponsiveContainer}\n */\nexport const ResponsiveContainer: React.FC<ResponsiveContainerProps> = props => {\n const containerRef = React.useRef<HTMLDivElement>(null);\n const onResizeRef = React.useRef<ResponsiveContainerProps['onResize'] | undefined>(undefined);\n const childClasses = useResponsiveChildStyles();\n\n const [size, setSize] = React.useState<{ containerWidth?: number; containerHeight?: number }>({});\n\n onResizeRef.current = props.onResize;\n\n React.useEffect(() => {\n const _window = getWindow(containerRef.current) as (Window & typeof globalThis) | undefined;\n let animationFrameId: number | undefined;\n let resizeObserver: ResizeObserver | undefined;\n\n const resizeCallback = (entries: ResizeObserverEntry[]) => {\n const { width: containerWidth, height: containerHeight } = entries[0].contentRect;\n // rAF is an alternative to the throttle function. For more info, see:\n // https://css-tricks.com/debouncing-throttling-explained-examples/#aa-requestanimationframe-raf\n animationFrameId = _window?.requestAnimationFrame(() => {\n setSize(prevSize => {\n const roundedWidth = Math.floor(containerWidth);\n const roundedHeight = Math.floor(containerHeight);\n if (prevSize.containerWidth === roundedWidth && prevSize.containerHeight === roundedHeight) {\n return prevSize;\n }\n\n return { containerWidth: roundedWidth, containerHeight: roundedHeight };\n });\n });\n onResizeRef.current?.(containerWidth, containerHeight);\n };\n\n if (_window && _window.ResizeObserver) {\n resizeObserver = new _window.ResizeObserver(resizeCallback);\n if (containerRef.current) {\n resizeObserver.observe(containerRef.current);\n }\n }\n\n return () => {\n if (animationFrameId) {\n _window?.cancelAnimationFrame(animationFrameId);\n }\n\n resizeObserver?.disconnect();\n };\n }, []);\n\n const chartContent = React.useMemo(() => {\n let calculatedWidth = size.containerWidth;\n let calculatedHeight = size.containerHeight;\n\n if (typeof props.aspect === 'number' && props.aspect > 0) {\n if (calculatedWidth) {\n calculatedHeight = calculatedWidth / props.aspect;\n } else if (calculatedHeight) {\n calculatedWidth = calculatedHeight * props.aspect;\n }\n\n if (typeof props.maxHeight === 'number' && calculatedHeight && calculatedHeight > props.maxHeight) {\n calculatedHeight = props.maxHeight;\n }\n }\n\n return React.Children.map(props.children, child => {\n return React.cloneElement<ResponsiveChildProps>(child, {\n width: calculatedWidth,\n height: calculatedHeight,\n // For SankeyChart\n shouldResize: (calculatedWidth ?? 0) + (calculatedHeight ?? 0),\n styles: {\n root: mergeClasses(child.props.styles?.root, childClasses.root),\n chartWrapper: mergeClasses(child.props.styles?.chartWrapper, childClasses.chartWrapper),\n chart: mergeClasses(child.props.styles?.chart, childClasses.chart),\n },\n });\n });\n }, [size, props.aspect, props.maxHeight, props.children]);\n\n return (\n <div\n ref={containerRef}\n style={{\n width: props.width ?? '100%',\n height: props.height ?? '100%',\n minWidth: props.minWidth,\n minHeight: props.minHeight,\n maxHeight: props.maxHeight,\n }}\n >\n {chartContent}\n </div>\n );\n};\nResponsiveContainer.displayName = 'ResponsiveContainer';\n"],"names":["React","getWindow","useResponsiveChildStyles","mergeClasses","ResponsiveContainer","props","containerRef","useRef","onResizeRef","undefined","childClasses","size","setSize","useState","current","onResize","useEffect","_window","animationFrameId","resizeObserver","resizeCallback","entries","width","containerWidth","height","containerHeight","contentRect","requestAnimationFrame","prevSize","roundedWidth","Math","floor","roundedHeight","ResizeObserver","observe","cancelAnimationFrame","disconnect","chartContent","useMemo","calculatedWidth","calculatedHeight","aspect","maxHeight","Children","map","children","child","cloneElement","shouldResize","styles","root","chartWrapper","chart","div","ref","style","minWidth","minHeight","displayName"],"mappings":"AAAA;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,SAAS,QAAQ,4BAA4B;AAEtD,SAASC,wBAAwB,QAAQ,oCAAoC;AAC7E,SAASC,YAAY,QAAQ,iBAAiB;AAE9C;;;CAGC,GACD,OAAO,MAAMC,sBAA0DC,CAAAA;IACrE,MAAMC,eAAeN,MAAMO,MAAM,CAAiB;IAClD,MAAMC,cAAcR,MAAMO,MAAM,CAAmDE;IACnF,MAAMC,eAAeR;IAErB,MAAM,CAACS,MAAMC,QAAQ,GAAGZ,MAAMa,QAAQ,CAAwD,CAAC;IAE/FL,YAAYM,OAAO,GAAGT,MAAMU,QAAQ;IAEpCf,MAAMgB,SAAS,CAAC;QACd,MAAMC,UAAUhB,UAAUK,aAAaQ,OAAO;QAC9C,IAAII;QACJ,IAAIC;QAEJ,MAAMC,iBAAiB,CAACC;gBAetBb;YAdA,MAAM,EAAEc,OAAOC,cAAc,EAAEC,QAAQC,eAAe,EAAE,GAAGJ,OAAO,CAAC,EAAE,CAACK,WAAW;YACjF,sEAAsE;YACtE,gGAAgG;YAChGR,mBAAmBD,oBAAAA,8BAAAA,QAASU,qBAAqB,CAAC;gBAChDf,QAAQgB,CAAAA;oBACN,MAAMC,eAAeC,KAAKC,KAAK,CAACR;oBAChC,MAAMS,gBAAgBF,KAAKC,KAAK,CAACN;oBACjC,IAAIG,SAASL,cAAc,KAAKM,gBAAgBD,SAASH,eAAe,KAAKO,eAAe;wBAC1F,OAAOJ;oBACT;oBAEA,OAAO;wBAAEL,gBAAgBM;wBAAcJ,iBAAiBO;oBAAc;gBACxE;YACF;aACAxB,uBAAAA,YAAYM,OAAO,cAAnBN,2CAAAA,0BAAAA,aAAsBe,gBAAgBE;QACxC;QAEA,IAAIR,WAAWA,QAAQgB,cAAc,EAAE;YACrCd,iBAAiB,IAAIF,QAAQgB,cAAc,CAACb;YAC5C,IAAId,aAAaQ,OAAO,EAAE;gBACxBK,eAAee,OAAO,CAAC5B,aAAaQ,OAAO;YAC7C;QACF;QAEA,OAAO;YACL,IAAII,kBAAkB;gBACpBD,oBAAAA,8BAAAA,QAASkB,oBAAoB,CAACjB;YAChC;YAEAC,2BAAAA,qCAAAA,eAAgBiB,UAAU;QAC5B;IACF,GAAG,EAAE;IAEL,MAAMC,eAAerC,MAAMsC,OAAO,CAAC;QACjC,IAAIC,kBAAkB5B,KAAKY,cAAc;QACzC,IAAIiB,mBAAmB7B,KAAKc,eAAe;QAE3C,IAAI,OAAOpB,MAAMoC,MAAM,KAAK,YAAYpC,MAAMoC,MAAM,GAAG,GAAG;YACxD,IAAIF,iBAAiB;gBACnBC,mBAAmBD,kBAAkBlC,MAAMoC,MAAM;YACnD,OAAO,IAAID,kBAAkB;gBAC3BD,kBAAkBC,mBAAmBnC,MAAMoC,MAAM;YACnD;YAEA,IAAI,OAAOpC,MAAMqC,SAAS,KAAK,YAAYF,oBAAoBA,mBAAmBnC,MAAMqC,SAAS,EAAE;gBACjGF,mBAAmBnC,MAAMqC,SAAS;YACpC;QACF;QAEA,OAAO1C,MAAM2C,QAAQ,CAACC,GAAG,CAACvC,MAAMwC,QAAQ,EAAEC,CAAAA;gBAOjBA,qBACQA,sBACPA;YARxB,qBAAO9C,MAAM+C,YAAY,CAAuBD,OAAO;gBACrDxB,OAAOiB;gBACPf,QAAQgB;gBACR,kBAAkB;gBAClBQ,cAAc,AAACT,CAAAA,4BAAAA,6BAAAA,kBAAmB,CAAA,IAAMC,CAAAA,6BAAAA,8BAAAA,mBAAoB,CAAA;gBAC5DS,QAAQ;oBACNC,MAAM/C,cAAa2C,sBAAAA,MAAMzC,KAAK,CAAC4C,MAAM,cAAlBH,0CAAAA,oBAAoBI,IAAI,EAAExC,aAAawC,IAAI;oBAC9DC,cAAchD,cAAa2C,uBAAAA,MAAMzC,KAAK,CAAC4C,MAAM,cAAlBH,2CAAAA,qBAAoBK,YAAY,EAAEzC,aAAayC,YAAY;oBACtFC,OAAOjD,cAAa2C,uBAAAA,MAAMzC,KAAK,CAAC4C,MAAM,cAAlBH,2CAAAA,qBAAoBM,KAAK,EAAE1C,aAAa0C,KAAK;gBACnE;YACF;QACF;IACF,GAAG;QAACzC;QAAMN,MAAMoC,MAAM;QAAEpC,MAAMqC,SAAS;QAAErC,MAAMwC,QAAQ;KAAC;QAM3CxC,cACCA;IALd,qBACE,oBAACgD;QACCC,KAAKhD;QACLiD,OAAO;YACLjC,OAAOjB,CAAAA,eAAAA,MAAMiB,KAAK,cAAXjB,0BAAAA,eAAe;YACtBmB,QAAQnB,CAAAA,gBAAAA,MAAMmB,MAAM,cAAZnB,2BAAAA,gBAAgB;YACxBmD,UAAUnD,MAAMmD,QAAQ;YACxBC,WAAWpD,MAAMoD,SAAS;YAC1Bf,WAAWrC,MAAMqC,SAAS;QAC5B;OAECL;AAGP,EAAE;AACFjC,oBAAoBsD,WAAW,GAAG"}
|
|
1
|
+
{"version":3,"sources":["../src/components/ResponsiveContainer/ResponsiveContainer.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { getWindow } from '../../utilities/getWindow';\nimport type { ResponsiveChildProps, ResponsiveContainerProps } from './ResponsiveContainer.types';\nimport { useResponsiveChildStyles } from './useResponsiveChildStyles.styles';\nimport { mergeClasses } from '@griffel/react';\n\n/**\n * Responsive Container component\n * {@docCategory ResponsiveContainer}\n */\nexport const ResponsiveContainer: React.FC<ResponsiveContainerProps> = props => {\n const containerRef = React.useRef<HTMLDivElement>(null);\n const onResizeRef = React.useRef<ResponsiveContainerProps['onResize'] | undefined>(undefined);\n const childClasses = useResponsiveChildStyles();\n\n const [size, setSize] = React.useState<{ containerWidth?: number; containerHeight?: number }>({});\n\n onResizeRef.current = props.onResize;\n\n React.useEffect(() => {\n const _window = getWindow(containerRef.current) as (Window & typeof globalThis) | undefined;\n let animationFrameId: number | undefined;\n let resizeObserver: ResizeObserver | undefined;\n\n const resizeCallback = (entries: ResizeObserverEntry[]) => {\n const { width: containerWidth, height: containerHeight } = entries[0].contentRect;\n // rAF is an alternative to the throttle function. For more info, see:\n // https://css-tricks.com/debouncing-throttling-explained-examples/#aa-requestanimationframe-raf\n animationFrameId = _window?.requestAnimationFrame(() => {\n setSize(prevSize => {\n const roundedWidth = Math.floor(containerWidth);\n const roundedHeight = Math.floor(containerHeight);\n if (prevSize.containerWidth === roundedWidth && prevSize.containerHeight === roundedHeight) {\n return prevSize;\n }\n\n return { containerWidth: roundedWidth, containerHeight: roundedHeight };\n });\n });\n onResizeRef.current?.(containerWidth, containerHeight);\n };\n\n if (_window && _window.ResizeObserver) {\n resizeObserver = new _window.ResizeObserver(resizeCallback);\n if (containerRef.current) {\n resizeObserver.observe(containerRef.current);\n }\n }\n\n return () => {\n if (animationFrameId) {\n _window?.cancelAnimationFrame(animationFrameId);\n }\n\n resizeObserver?.disconnect();\n };\n }, []);\n\n const chartContent = React.useMemo(() => {\n let calculatedWidth = size.containerWidth;\n let calculatedHeight = size.containerHeight;\n\n if (typeof props.aspect === 'number' && props.aspect > 0) {\n if (calculatedWidth) {\n calculatedHeight = calculatedWidth / props.aspect;\n } else if (calculatedHeight) {\n calculatedWidth = calculatedHeight * props.aspect;\n }\n\n if (typeof props.maxHeight === 'number' && calculatedHeight && calculatedHeight > props.maxHeight) {\n calculatedHeight = props.maxHeight;\n }\n }\n\n return React.Children.map(props.children, child => {\n return React.cloneElement<ResponsiveChildProps>(child, {\n width: calculatedWidth,\n height: calculatedHeight,\n // For SankeyChart\n shouldResize: (calculatedWidth ?? 0) + (calculatedHeight ?? 0),\n styles: {\n root: mergeClasses(child.props.styles?.root, childClasses.root),\n chartWrapper: mergeClasses(child.props.styles?.chartWrapper, childClasses.chartWrapper),\n chart: mergeClasses(child.props.styles?.chart, childClasses.chart),\n },\n });\n });\n }, [size, props.aspect, props.maxHeight, props.children]);\n\n return (\n <div\n ref={containerRef}\n style={{\n width: props.width ?? '100%',\n height: props.height ?? '100%',\n minWidth: props.minWidth,\n minHeight: props.minHeight,\n maxHeight: props.maxHeight,\n }}\n >\n {chartContent}\n </div>\n );\n};\nResponsiveContainer.displayName = 'ResponsiveContainer';\n"],"names":["React","getWindow","useResponsiveChildStyles","mergeClasses","ResponsiveContainer","props","containerRef","useRef","onResizeRef","undefined","childClasses","size","setSize","useState","current","onResize","useEffect","_window","animationFrameId","resizeObserver","resizeCallback","entries","width","containerWidth","height","containerHeight","contentRect","requestAnimationFrame","prevSize","roundedWidth","Math","floor","roundedHeight","ResizeObserver","observe","cancelAnimationFrame","disconnect","chartContent","useMemo","calculatedWidth","calculatedHeight","aspect","maxHeight","Children","map","children","child","cloneElement","shouldResize","styles","root","chartWrapper","chart","div","ref","style","minWidth","minHeight","displayName"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/ResponsiveContainer/ResponsiveContainer.types.ts"],"sourcesContent":["import * as React from 'react';\n\n/**\n * Responsive Child styles\n * {@docCategory ResponsiveContainer}\n */\nexport interface ResponsiveChildStyles {\n root?: string;\n chartWrapper?: string;\n chart?: string;\n}\n\n/**\n * Responsive Child props\n * {@docCategory ResponsiveContainer}\n */\nexport interface ResponsiveChildProps {\n width?: number;\n height?: number;\n shouldResize?: number;\n styles?: ResponsiveChildStyles;\n}\n\n/**\n * Responsive Container props\n * {@docCategory ResponsiveContainer}\n */\nexport interface ResponsiveContainerProps {\n /**\n * Aspect ratio (width / height) of the container. If specified, the height will be calculated by width / aspect.\n */\n aspect?: number;\n\n /**\n * Width of the container\n */\n width?: number | string;\n\n /**\n * Height of the container\n */\n height?: number | string;\n\n /**\n * Minimum width of the container\n */\n minWidth?: number | string;\n\n /**\n * Minimum height of the container\n */\n minHeight?: number | string;\n\n /**\n * Maximum height of the container\n */\n maxHeight?: number;\n\n /**\n * Callback providing the updated chart width and height values when the container is resized\n */\n onResize?: (width: number, height: number) => void;\n\n /**\n * Child component to be rendered within the container\n */\n children: React.ReactElement<ResponsiveChildProps>;\n}\n"],"names":[
|
|
1
|
+
{"version":3,"sources":["../src/components/ResponsiveContainer/ResponsiveContainer.types.ts"],"sourcesContent":["import type * as React from 'react';\n\n/**\n * Responsive Child styles\n * {@docCategory ResponsiveContainer}\n */\nexport interface ResponsiveChildStyles {\n root?: string;\n chartWrapper?: string;\n chart?: string;\n}\n\n/**\n * Responsive Child props\n * {@docCategory ResponsiveContainer}\n */\nexport interface ResponsiveChildProps {\n width?: number;\n height?: number;\n shouldResize?: number;\n styles?: ResponsiveChildStyles;\n}\n\n/**\n * Responsive Container props\n * {@docCategory ResponsiveContainer}\n */\nexport interface ResponsiveContainerProps {\n /**\n * Aspect ratio (width / height) of the container. If specified, the height will be calculated by width / aspect.\n */\n aspect?: number;\n\n /**\n * Width of the container\n */\n width?: number | string;\n\n /**\n * Height of the container\n */\n height?: number | string;\n\n /**\n * Minimum width of the container\n */\n minWidth?: number | string;\n\n /**\n * Minimum height of the container\n */\n minHeight?: number | string;\n\n /**\n * Maximum height of the container\n */\n maxHeight?: number;\n\n /**\n * Callback providing the updated chart width and height values when the container is resized\n */\n onResize?: (width: number, height: number) => void;\n\n /**\n * Child component to be rendered within the container\n */\n children: React.ReactElement<ResponsiveChildProps>;\n}\n"],"names":[],"mappings":"AAuBA;;;CAGC,GACD,WAwCC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/ResponsiveContainer/useResponsiveChildStyles.styles.ts"],"sourcesContent":["'use client';\n\nimport { makeStyles, mergeClasses } from '@griffel/react';\nimport { ResponsiveChildStyles } from './ResponsiveContainer.types';\nimport { SlotClassNames } from '@fluentui/react-utilities';\n\nexport const responsiveChildClassNames: SlotClassNames<ResponsiveChildStyles> = {\n root: 'fui-charts-resp-child__root',\n chartWrapper: 'fui-charts-resp-child__chartWrapper',\n chart: 'fui-charts-resp-child__chart',\n};\n\nconst useStyles = makeStyles({\n root: {\n width: '100%',\n height: '100%',\n },\n chartWrapper: {\n width: '100%',\n },\n chart: {\n // This overrides the pixel width of svg allowing it to resize properly within a flexbox or grid layout.\n // Note: height is not set to 100% because that causes the charts to resize vertically in an infinite loop.\n width: '100%',\n },\n});\n\nexport const useResponsiveChildStyles = (): ResponsiveChildStyles => {\n const baseStyles = useStyles();\n\n return {\n root: mergeClasses(responsiveChildClassNames.root, baseStyles.root),\n chartWrapper: mergeClasses(responsiveChildClassNames.chartWrapper, baseStyles.chartWrapper),\n chart: mergeClasses(responsiveChildClassNames.chart, baseStyles.chart),\n };\n};\n"],"names":["makeStyles","mergeClasses","responsiveChildClassNames","root","chartWrapper","chart","useStyles","width","height","useResponsiveChildStyles","baseStyles"],"mappings":"AAAA;AAEA,SAASA,UAAU,EAAEC,YAAY,QAAQ,iBAAiB;AAI1D,OAAO,MAAMC,4BAAmE;IAC9EC,MAAM;IACNC,cAAc;IACdC,OAAO;AACT,EAAE;AAEF,MAAMC,YAAYN,WAAW;IAC3BG,MAAM;QACJI,OAAO;QACPC,QAAQ;IACV;IACAJ,cAAc;QACZG,OAAO;IACT;IACAF,OAAO;QACL,wGAAwG;QACxG,2GAA2G;QAC3GE,OAAO;IACT;AACF;AAEA,OAAO,MAAME,2BAA2B;IACtC,MAAMC,aAAaJ;IAEnB,OAAO;QACLH,MAAMF,aAAaC,0BAA0BC,IAAI,EAAEO,WAAWP,IAAI;QAClEC,cAAcH,aAAaC,0BAA0BE,YAAY,EAAEM,WAAWN,YAAY;QAC1FC,OAAOJ,aAAaC,0BAA0BG,KAAK,EAAEK,WAAWL,KAAK;IACvE;AACF,EAAE"}
|
|
1
|
+
{"version":3,"sources":["../src/components/ResponsiveContainer/useResponsiveChildStyles.styles.ts"],"sourcesContent":["'use client';\n\nimport { makeStyles, mergeClasses } from '@griffel/react';\nimport type { ResponsiveChildStyles } from './ResponsiveContainer.types';\nimport type { SlotClassNames } from '@fluentui/react-utilities';\n\nexport const responsiveChildClassNames: SlotClassNames<ResponsiveChildStyles> = {\n root: 'fui-charts-resp-child__root',\n chartWrapper: 'fui-charts-resp-child__chartWrapper',\n chart: 'fui-charts-resp-child__chart',\n};\n\nconst useStyles = makeStyles({\n root: {\n width: '100%',\n height: '100%',\n },\n chartWrapper: {\n width: '100%',\n },\n chart: {\n // This overrides the pixel width of svg allowing it to resize properly within a flexbox or grid layout.\n // Note: height is not set to 100% because that causes the charts to resize vertically in an infinite loop.\n width: '100%',\n },\n});\n\nexport const useResponsiveChildStyles = (): ResponsiveChildStyles => {\n const baseStyles = useStyles();\n\n return {\n root: mergeClasses(responsiveChildClassNames.root, baseStyles.root),\n chartWrapper: mergeClasses(responsiveChildClassNames.chartWrapper, baseStyles.chartWrapper),\n chart: mergeClasses(responsiveChildClassNames.chart, baseStyles.chart),\n };\n};\n"],"names":["makeStyles","mergeClasses","responsiveChildClassNames","root","chartWrapper","chart","useStyles","width","height","useResponsiveChildStyles","baseStyles"],"mappings":"AAAA;AAEA,SAASA,UAAU,EAAEC,YAAY,QAAQ,iBAAiB;AAI1D,OAAO,MAAMC,4BAAmE;IAC9EC,MAAM;IACNC,cAAc;IACdC,OAAO;AACT,EAAE;AAEF,MAAMC,YAAYN,WAAW;IAC3BG,MAAM;QACJI,OAAO;QACPC,QAAQ;IACV;IACAJ,cAAc;QACZG,OAAO;IACT;IACAF,OAAO;QACL,wGAAwG;QACxG,2GAA2G;QAC3GE,OAAO;IACT;AACF;AAEA,OAAO,MAAME,2BAA2B;IACtC,MAAMC,aAAaJ;IAEnB,OAAO;QACLH,MAAMF,aAAaC,0BAA0BC,IAAI,EAAEO,WAAWP,IAAI;QAClEC,cAAcH,aAAaC,0BAA0BE,YAAY,EAAEM,WAAWN,YAAY;QAC1FC,OAAOJ,aAAaC,0BAA0BG,KAAK,EAAEK,WAAWL,KAAK;IACvE;AACF,EAAE"}
|