Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
85 commits
Select commit Hold shift + click to select a range
e5e79fc
add gradient declarations
shawn-grant Nov 20, 2024
b362372
replace color with gradient in ChartDataPoint and add gradient utilit…
shawn-grant Nov 20, 2024
758f388
refactor: update test-data.ts dataPoints to use gradient property
shawn-grant Nov 20, 2024
09b1252
feat: implement gradient support in DonutChart components
shawn-grant Nov 21, 2024
eef1cf2
test: update DonutChart tests to use gradient instead of color
shawn-grant Nov 21, 2024
0c562b5
feat: add gradient support to HorizontalBarChart and update rendering…
shawn-grant Nov 21, 2024
2eb7d67
refactor: replace color with gradient in HorizontalBarChart test cases
shawn-grant Nov 21, 2024
942d9a3
build: update charts api readme
shawn-grant Nov 21, 2024
d3cc0db
add update-snapshots script to package.json
shawn-grant Nov 21, 2024
5d90039
update tests and test snapshot
shawn-grant Nov 21, 2024
f64134a
Merge branch 'master' into chart-gradients
shawn-grant Nov 21, 2024
d9aa34d
refactor: update all DonutChart stories to use gradient pallete
shawn-grant Nov 21, 2024
40f628c
refactor: update HorizontalBarChart stories to use gradient palette
shawn-grant Nov 21, 2024
355faa6
Merge branch 'master' into chart-gradients
shawn-grant Nov 21, 2024
18988c5
fix HBC test snapshots
shawn-grant Nov 21, 2024
61e5ad7
update change files
shawn-grant Nov 21, 2024
fc6d1c4
update change files
shawn-grant Nov 22, 2024
e10f630
Merge branch 'chart-gradients' of https://github.com/shawn-grant/flue…
shawn-grant Nov 22, 2024
8a3d7bf
update change type to patch
shawn-grant Nov 22, 2024
751e2e0
Merge branch 'master' into chart-gradients
shawn-grant Nov 22, 2024
c58d7af
build: fix formatting issues
shawn-grant Nov 22, 2024
0cc5413
build: fix ci fail (vr-tests-react-components)
shawn-grant Nov 22, 2024
f75812e
add change file
shawn-grant Nov 22, 2024
78f2709
Merge branch 'master' into chart-gradients
shawn-grant Nov 25, 2024
0138bed
pr-fix(HorizontalBarChart): use tokens.colorBackgroundOverlay
shawn-grant Nov 25, 2024
610b397
feat(DonutChart): update gradient calculation and add custom gradient…
shawn-grant Nov 25, 2024
f01a57a
feat(HorizontalBarChart): add custom gradient story
shawn-grant Nov 25, 2024
7961be6
pr-fix(DonutChart): check both gradient colors are defined before app…
shawn-grant Nov 25, 2024
904d04f
update test snapshots
shawn-grant Nov 26, 2024
8a6ce72
pr-fix(DonutChart): rename gradient prop to color for Arc
shawn-grant Nov 26, 2024
969f516
pr-fix(DonutChart): rename gradient prop to color and update related …
shawn-grant Nov 26, 2024
dcf5e3d
pr-fix(HorizontalBarChart): rename gradient prop to color and update …
shawn-grant Nov 26, 2024
026000b
revert changes in vr-tests-react-components
shawn-grant Nov 26, 2024
25c7e0f
update tests
shawn-grant Nov 26, 2024
1f7ca56
Merge branch 'master' into chart-gradients
shawn-grant Nov 27, 2024
40ee893
pr-cleanup: revert changes in @fluentui/react-virtualizer
shawn-grant Nov 27, 2024
e15353b
fix tests
shawn-grant Nov 27, 2024
6c15c0d
minor change
shawn-grant Nov 27, 2024
6ecf234
pr-fix(charts): improve missing color handling
shawn-grant Nov 28, 2024
3d9a7e2
Merge branch 'master' into chart-gradients
shawn-grant Nov 28, 2024
81890dc
Merge branch 'master' into chart-gradients
shawn-grant Dec 2, 2024
5057918
Merge branch 'master' into chart-gradients
shawn-grant Dec 3, 2024
1168c3b
Merge branch 'master' into chart-gradients
shawn-grant Dec 7, 2024
87941da
Merge branch 'master' into chart-gradients
shawn-grant Feb 22, 2025
0e00ef8
resolved conflicts
v-baambati Mar 16, 2026
17f34ca
resolved conflicts
v-baambati Mar 16, 2026
bd9628f
resolved conflicts
v-baambati Mar 16, 2026
da704db
resolved conflicts
v-baambati Mar 16, 2026
7c8a980
resolved conflicts
v-baambati Mar 16, 2026
4989ef1
resolved merge conflicts
v-baambati Mar 17, 2026
aebf3cf
fixed build errors
v-baambati Mar 17, 2026
01e4331
updated Donut charts and Horizontal bar chart snaps
v-baambati Mar 18, 2026
85a2bd0
added change log file
v-baambati Mar 18, 2026
2f6fabb
Merge branch 'master' of https://github.com/microsoft/fluentui into c…
v-baambati Mar 18, 2026
0d75765
Enabled gradient functionality
v-baambati Mar 23, 2026
672dde0
Enabled gradient functionality
v-baambati Mar 23, 2026
208ad19
Merge branch 'master' of https://github.com/microsoft/fluentui into c…
v-baambati Mar 23, 2026
5571a0a
fixed build issues
v-baambati Mar 23, 2026
dbdd836
fixed build issues
v-baambati Mar 23, 2026
04de6e7
fixed build issues
v-baambati Mar 23, 2026
dfae458
fixed data mismatch issue
v-baambati Mar 23, 2026
2bb2bcf
removed unwanted console statement
v-baambati Mar 23, 2026
c30f76d
updated snaps for failed tests
v-baambati Mar 23, 2026
2dc2921
disabled vega test
v-baambati Mar 23, 2026
e430b65
disabled vega test
v-baambati Mar 23, 2026
ebb0c5b
fixed lint errors
v-baambati Mar 24, 2026
c190c6a
removed unwanted test file for testing
v-baambati Mar 24, 2026
8510299
Merge branch 'master' of https://github.com/microsoft/fluentui into c…
v-baambati Mar 24, 2026
228a965
Merge branch 'chart-gradients-work' of https://github.com/v-baambati/…
v-baambati Mar 24, 2026
e41a1cb
fixed swift lint issues
v-baambati Mar 24, 2026
87edd37
fixed swift lint issues
v-baambati Mar 24, 2026
d72e3be
fixed lint issue in Horizontalbarchart example
v-baambati Mar 24, 2026
7f8412e
fixed callout color issue when gradient enabled in Grouped verticalBa…
v-baambati Mar 26, 2026
d8229f4
added gradient functility to Dinut chart and Horizontalbarchartwith axis
v-baambati Mar 27, 2026
89ab82b
Merge branch 'master' of https://github.com/microsoft/fluentui into c…
v-baambati Mar 27, 2026
58b51a7
added gradient functility to Dinut chart and Horizontalbarchartwith axis
v-baambati Mar 27, 2026
a0b4458
updated snapshots
v-baambati Mar 27, 2026
0e198b8
updated react-charts api
v-baambati Mar 27, 2026
756d9db
Enabled gradient functiaonlity in Area chart
v-baambati Mar 30, 2026
bb2157b
added gradient funtioanlity in ganttchartbasic example
v-baambati Mar 30, 2026
36aa01c
Merge branch 'master' of https://github.com/microsoft/fluentui into c…
v-baambati Apr 2, 2026
91b2b0f
updated vega chart tests
v-baambati Apr 3, 2026
523b9ba
added basic test cases to validate gradient funtionality
v-baambati Apr 3, 2026
07e6945
added basic test cases to validate gradient funtionality
v-baambati Apr 3, 2026
4f49fd4
removed unwanted file chnages
v-baambati Apr 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "minor",
"comment": "Added gradiant color functiaonlity in Donut chart and horizontalbarchart",
"packageName": "@fluentui/react-charts",
"email": "132879294+v-baambati@users.noreply.github.com",
"dependentChangeType": "patch"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
Copy link
Copy Markdown

@github-actions github-actions bot Mar 16, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🕵🏾‍♀️ visual changes to review in the Visual Change Report

vr-tests-react-components/Avatar Converged 1 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/Avatar Converged.badgeMask - RTL.normal.chromium.png 6 Changed
vr-tests-react-components/CalendarCompat 4 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/CalendarCompat.multiDayView - High Contrast.default.chromium.png 4406 Changed
vr-tests-react-components/CalendarCompat.multiDayView - RTL.default.chromium.png 1040 Changed
vr-tests-react-components/CalendarCompat.multiDayView.default.chromium_1.png 1034 Changed
vr-tests-react-components/CalendarCompat.multiDayView - Dark Mode.default.chromium.png 4406 Changed
vr-tests-react-components/Charts-DonutChart 2 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/Charts-DonutChart.Dynamic.default.chromium.png 5581 Changed
vr-tests-react-components/Charts-DonutChart.Dynamic - RTL.default.chromium.png 5570 Changed
vr-tests-react-components/Charts-HorizontalBarChart 10 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/Charts-HorizontalBarChart.Basic - Dark Mode.default.chromium.png 30 Changed
vr-tests-react-components/Charts-HorizontalBarChart.Basic - Dark Mode.hover.chromium.png 29 Changed
vr-tests-react-components/Charts-HorizontalBarChart.Basic - RTL.default.chromium.png 85 Changed
vr-tests-react-components/Charts-HorizontalBarChart.Basic.default.chromium.png 85 Changed
vr-tests-react-components/Charts-HorizontalBarChart.Basic.hover.chromium.png 82 Changed
vr-tests-react-components/Charts-HorizontalBarChart.Variant - Dark Mode.default.chromium.png 25 Changed
vr-tests-react-components/Charts-HorizontalBarChart.Variant.default.chromium.png 53 Changed
vr-tests-react-components/Charts-HorizontalBarChart.With_Benchmark - Dark Mode.default.chromium.png 9 Changed
vr-tests-react-components/Charts-HorizontalBarChart.Variant - RTL.default.chromium.png 53 Changed
vr-tests-react-components/Charts-HorizontalBarChart.With_Benchmark.default.chromium.png 36 Changed
vr-tests-react-components/Menu Converged - submenuIndicator slotted content 2 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/Menu Converged - submenuIndicator slotted content.default - RTL.submenus open.chromium.png 404 Changed
vr-tests-react-components/Menu Converged - submenuIndicator slotted content.default.submenus open.chromium.png 413 Changed
vr-tests-react-components/Positioning 2 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/Positioning.Positioning end.chromium.png 609 Changed
vr-tests-react-components/Positioning.Positioning end.updated 2 times.chromium.png 55 Changed
vr-tests-react-components/ProgressBar converged 2 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/ProgressBar converged.Indeterminate + thickness - Dark Mode.default.chromium.png 38 Changed
vr-tests-react-components/ProgressBar converged.Indeterminate + thickness - High Contrast.default.chromium.png 45 Changed
vr-tests-react-components/TagPicker 2 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/TagPicker.disabled - High Contrast.disabled input hover.chromium.png 1319 Changed
vr-tests-react-components/TagPicker.disabled - RTL.disabled input hover.chromium.png 635 Changed

There were 4 duplicate changes discarded. Check the build logs for more information.

"type": "patch",
"comment": "Introduce gradients and rounded corners to v9 charts",
"packageName": "@fluentui/react-charts-preview",
"email": "shawngrant333@gmail.com",
"dependentChangeType": "patch"
}
49 changes: 46 additions & 3 deletions packages/charts/react-charts/library/etc/react-charts.api.md
Original file line number Diff line number Diff line change
Expand Up @@ -435,7 +435,7 @@ export type ChartDataMode = 'default' | 'fraction' | 'percentage' | 'hidden';
// @public (undocumented)
export interface ChartDataPoint {
callOutAccessibilityData?: AccessibilityProps;
color?: string;
color?: string | [string, string];
data?: number;
horizontalBarChartdata?: HorizontalDataPoint;
legend?: string;
Expand Down Expand Up @@ -658,6 +658,36 @@ export interface DataSeries {
useSecondaryYScale?: boolean;
}

// @public (undocumented)
export const DataVizGradientPalette: {
gradient1: string;
gradient2: string;
gradient3: string;
gradient4: string;
gradient5: string;
gradient6: string;
gradient7: string;
gradient8: string;
gradient9: string;
gradient10: string;
gradient1Ext: string;
gradient2Ext: string;
gradient3Ext: string;
gradient4Ext: string;
gradient5Ext: string;
gradient6Ext: string;
gradient7Ext: string;
gradient8Ext: string;
gradient9Ext: string;
gradient10Ext: string;
success: string;
highSuccess: string;
warning: string;
error: string;
highError: string;
disabled: string;
};

// @public (undocumented)
export const DataVizPalette: {
color1: string;
Expand Down Expand Up @@ -731,6 +761,7 @@ export interface DonutChartProps extends CartesianChartProps {
componentRef?: React_2.Ref<Chart>;
culture?: string;
data?: ChartProps;
enableGradient?: boolean;
height?: number;
hideLabels?: boolean;
hideLegend?: boolean;
Expand Down Expand Up @@ -796,10 +827,14 @@ export interface EventsAnnotationProps {
}

// @public (undocumented)
export interface ExtendedSegment extends GaugeChartSegment {
export interface ExtendedSegment extends Omit<GaugeChartSegment, 'color'> {
// (undocumented)
color: string | [string, string];
// (undocumented)
end: number;
// (undocumented)
gradientId?: string;
// (undocumented)
start: number;
}

Expand Down Expand Up @@ -973,12 +1008,18 @@ export const getColorFromToken: (token: string, isDarkTheme?: boolean) => string
// @public (undocumented)
export function getContrastTextColor(backgroundColor: string, isDarkTheme?: boolean): string;

// @public (undocumented)
export const getGradientFromToken: (token: string, isDarkTheme?: boolean) => [string, string];

// @public (undocumented)
export const getInvertedTextColor: (color: string, isDarkTheme?: boolean) => string;

// @public (undocumented)
export const getNextColor: (index: number, offset?: number, isDarkTheme?: boolean) => string;

// @public (undocumented)
export const getNextGradient: (index: number, offset?: number, isDarkTheme?: boolean) => [string, string];

// @public (undocumented)
export const getSegmentLabel: (segment: ExtendedSegment, minValue: number, maxValue: number, variant?: GaugeChartVariant, isAriaLabel?: boolean) => string;

Expand All @@ -1000,6 +1041,7 @@ export interface GroupedVerticalBarChartProps extends CartesianChartProps {
culture?: string;
data?: GroupedVerticalBarChartData[];
dataV2?: (BarSeries<string, number> | LineSeries<string, number>)[];
enableGradient?: boolean;
hideLabels?: boolean;
isCalloutForStack?: boolean;
maxBarWidth?: number;
Expand Down Expand Up @@ -1118,6 +1160,7 @@ export interface HorizontalBarChartProps extends React_2.RefAttributes<HTMLDivEl
color?: string;
culture?: string;
data?: ChartProps[];
enableGradient?: boolean;
hideLabels?: boolean;
hideRatio?: boolean[];
hideTooltip?: boolean;
Expand Down Expand Up @@ -1910,7 +1953,7 @@ export const VerticalBarChart: React_2.FunctionComponent<VerticalBarChartProps>;
export interface VerticalBarChartDataPoint {
barLabel?: string;
callOutAccessibilityData?: AccessibilityProps;
color?: string;
color?: string | [string, string];
legend?: string;
lineData?: LineDataInVerticalBarChart;
onClick?: VoidFunction;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -657,6 +657,32 @@ describe('AreaChart - Accessibility tests', () => {
});
});

describe('Area Chart - Gradient', () => {
beforeEach(() => {
jest.spyOn(global.Math, 'random').mockReturnValue(0.1);
updateChartWidthAndHeight();
});
afterEach(() => {
jest.spyOn(global.Math, 'random').mockRestore();
sharedAfterEach();
});

it('Should compare AreaChart snapshots with enableGradient true and false', () => {
// Test with enableGradient={false}
const { container: containerGradientFalse } = render(<AreaChart data={chartData} enableGradient={false} />);
const gradientFalseHtml = (containerGradientFalse.firstChild as Element)?.outerHTML;
expect(containerGradientFalse.firstChild).toMatchSnapshot('area-chart-gradient-disabled');

// Test with enableGradient={true}
const { container: containerGradientTrue } = render(<AreaChart data={chartData} enableGradient={true} />);
const gradientTrueHtml = (containerGradientTrue.firstChild as Element)?.outerHTML;
expect(containerGradientTrue.firstChild).toMatchSnapshot('area-chart-gradient-enabled');

// Compare the rendered HTML to verify they are different
expect(gradientFalseHtml).not.toBe(gradientTrueHtml);
});
});

const emptyPoint = [
{
legend: 'metaData1',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import {
XAxisTypes,
getTypeOfAxis,
getNextColor,
getNextGradient,
getColorFromToken,
getSecureProps,
areArraysEqual,
Expand Down Expand Up @@ -688,8 +689,11 @@ export const AreaChart: React.FunctionComponent<AreaChartProps> = React.forwardR
{props.enableGradient && (
<defs>
<linearGradient id={`gradient_${index}`} x1="0%" x2="0%" y1="0%" y2="100%">
<stop offset="0" stopColor={_colors[index]} />
<stop offset="100%" stopColor="transparent" />
<stop offset="0" stopColor={Array.isArray(_colors[index]) ? _colors[index][0] : _colors[index]} />
<stop
offset="100%"
stopColor={Array.isArray(_colors[index]) ? _colors[index][1] : _colors[index] + '33'}
/>
</linearGradient>
</defs>
)}
Expand All @@ -698,7 +702,7 @@ export const AreaChart: React.FunctionComponent<AreaChartProps> = React.forwardR
d={line(singleStackedData)!}
fill={'transparent'}
strokeWidth={points[index]?.lineOptions?.strokeWidth ?? 3}
stroke={_colors[index]}
stroke={Array.isArray(_colors[index]) ? _colors[index][0] : _colors[index]}
opacity={_getLineOpacity(points[index]!.legend)}
onMouseMove={event => _onRectMouseMove(event)}
onMouseOut={_onRectMouseOut}
Expand Down Expand Up @@ -727,7 +731,13 @@ export const AreaChart: React.FunctionComponent<AreaChartProps> = React.forwardR
<path
id={`${index}-graph-${_uniqueIdForGraph}`}
d={area(singleStackedData)!}
fill={props.enableGradient ? `url(#gradient_${index})` : _colors[index]}
fill={
props.enableGradient
? `url(#gradient_${index})`
: Array.isArray(_colors[index])
? _colors[index][0]
: _colors[index]
}
opacity={layerOpacity}
fillOpacity={_getOpacity(points[index]!.legend)}
onMouseMove={event => _onRectMouseMove(event)}
Expand Down Expand Up @@ -926,8 +936,10 @@ export const AreaChart: React.FunctionComponent<AreaChartProps> = React.forwardR
let color: string;
// isInverted property is applicable to v8 themes only
if (typeof item.color === 'undefined') {
color = getNextColor(index, 0);
// If enableGradient and no color defined, use gradient array; otherwise use solid color
color = props.enableGradient ? getNextGradient(index)[0] : getNextColor(index, 0);
} else {
// Use solid colors when gradient is disabled
color = getColorFromToken(item.color);
}

Expand Down
Loading
Loading