Skip to content

Refactor/progressbar spinner motion#35869

Draft
robertpenner wants to merge 6 commits intomicrosoft:masterfrom
robertpenner:refactor/progressbar-spinner-motion
Draft

Refactor/progressbar spinner motion#35869
robertpenner wants to merge 6 commits intomicrosoft:masterfrom
robertpenner:refactor/progressbar-spinner-motion

Conversation

@robertpenner
Copy link
Collaborator

Previous Behavior

New Behavior

Related Issue(s)

  • Fixes #

@github-actions
Copy link

Pull request demo site: URL

@github-actions
Copy link

github-actions bot commented Mar 12, 2026

📊 Bundle size report

Package & Exports Baseline (minified/GZIP) PR Change
react-components
react-components: entire library
1.292 MB
323.336 kB
1.29 MB
322.981 kB
-2.762 kB
-355 B
react-progress
ProgressBar
15.7 kB
6.214 kB
19.69 kB
7.724 kB
3.99 kB
1.51 kB
react-spinner
Spinner
23.503 kB
7.812 kB
25.989 kB
9.271 kB
2.486 kB
1.459 kB
Unchanged fixtures
Package & Exports Size (minified/GZIP)
react-components
react-components: Button, FluentProvider & webLightTheme
70.397 kB
19.96 kB
react-components
react-components: Accordion, Button, FluentProvider, Image, Menu, Popover
236.62 kB
68.716 kB
react-components
react-components: FluentProvider & webLightTheme
43.612 kB
14.022 kB
react-portal-compat
PortalCompatProvider
8.386 kB
2.624 kB
react-timepicker-compat
TimePicker
108.174 kB
35.695 kB
🤖 This report was generated against 2095d48e326c499b63ea3d0c49edc67ea1d2104b

@@ -0,0 +1,7 @@
{
Copy link

@github-actions github-actions bot Mar 12, 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/Charts-DonutChart 1 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/Charts-DonutChart.Dynamic.default.chromium.png 5581 Changed
vr-tests-react-components/Menu Converged - submenuIndicator slotted content 1 screenshots
Image Name Diff(in Pixels) Image Type
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 505 Changed
vr-tests-react-components/Positioning.Positioning end.updated 2 times.chromium.png 726 Changed
vr-tests-react-components/ProgressBar converged 4 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/ProgressBar converged.Indeterminate + thickness - Dark Mode.default.chromium.png 208 Changed
vr-tests-react-components/ProgressBar converged.Indeterminate + thickness - RTL.default.chromium.png 162 Changed
vr-tests-react-components/ProgressBar converged.Indeterminate + thickness - High Contrast.default.chromium.png 404 Changed
vr-tests-react-components/ProgressBar converged.Indeterminate + thickness.default.chromium.png 325 Changed
vr-tests-react-components/Skeleton converged 1 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/Skeleton converged.Translucent Skeleton with square.default.chromium.png 2 Changed
vr-tests-react-components/Spinner converged 17 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/Spinner converged.Inverted - High Contrast.default.chromium.png 80 Changed
vr-tests-react-components/Spinner converged.Inverted - Dark Mode.default.chromium.png 52 Changed
vr-tests-react-components/Spinner converged.Inverted with Label - Dark Mode.default.chromium.png 421 Changed
vr-tests-react-components/Spinner converged.Inverted with Label.default.chromium.png 209 Changed
vr-tests-react-components/Spinner converged.Inverted.default.chromium.png 58 Changed
vr-tests-react-components/Spinner converged.Inverted with Label - High Contrast.default.chromium.png 675 Changed
vr-tests-react-components/Spinner converged.Primary - Dark Mode.default.chromium.png 28 Changed
vr-tests-react-components/Spinner converged.Primary - High Contrast.default.chromium.png 112 Changed
vr-tests-react-components/Spinner converged.Animation.default.chromium.png 4876 Changed
vr-tests-react-components/Spinner converged.Primary with Label - Dark Mode.default.chromium.png 259 Changed
vr-tests-react-components/Spinner converged.Primary with Label - RTL.default.chromium.png 50 Changed
vr-tests-react-components/Spinner converged.Primary with Label - High Contrast.default.chromium.png 361 Changed
vr-tests-react-components/Spinner converged.Primary.default.chromium.png 37 Changed
vr-tests-react-components/Spinner converged.Primary + size.default.chromium.png 301 Changed
vr-tests-react-components/Spinner converged.Animation - RTL.default.chromium.png 4346 Changed
vr-tests-react-components/Spinner converged.Primary with Label.default.chromium.png 209 Changed
vr-tests-react-components/Spinner converged.Spinner Min Width.default.chromium.png 102 Changed
vr-tests-react-components/TagPicker 2 screenshots
Image Name Diff(in Pixels) Image Type
vr-tests-react-components/TagPicker.disabled - Dark Mode.disabled input hover.chromium.png 658 Changed
vr-tests-react-components/TagPicker.disabled - RTL.disabled input hover.chromium.png 635 Changed

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

…nts (CSS Animation Plan Group A)

ProgressBar (A1):
- Add progressBarMotions.ts with ProgressBarIndeterminate (createMotionComponent)
- Wrap indeterminate bar in renderProgressBar.tsx with ProgressBarIndeterminate
- Remove CSS keyframe animation from useProgressBarStyles.styles.ts; keep position/layout styles
- Keep maxWidth: 100% media query for reduced motion layout change
- Add @fluentui/react-motion dependency

Spinner (A3):
- Add spinnerMotions.ts with SpinnerRotation (createMotionComponent, 1500ms linear infinite)
- Wrap spinner slot in renderSpinner.tsx with SpinnerRotation
- Remove CSS rotation animationName/duration/timing/iteration from useSpinnerStyles.styles.ts
- Reduced motion handled via WAAPI reducedMotion: { duration: 1800 }
- Add @fluentui/react-motion dependency
…nts (CSS Animation Plan Group A)

ProgressBar (A1):
- Add progressBarMotions.ts with ProgressBarIndeterminate (createMotionComponent)
- Wrap indeterminate bar in renderProgressBar.tsx with ProgressBarIndeterminate
- Remove CSS keyframe animation from useProgressBarStyles.styles.ts; keep position/layout styles
- Keep maxWidth: 100% media query for reduced motion layout change
- Add @fluentui/react-motion dependency

Spinner (A3):
- Add spinnerMotions.ts with SpinnerRotation (createMotionComponent, 1500ms linear infinite)
- Wrap spinner slot in renderSpinner.tsx with SpinnerRotation
- Remove CSS rotation animationName/duration/timing/iteration from useSpinnerStyles.styles.ts
- Reduced motion handled via WAAPI reducedMotion: { duration: 1800 }
- Add @fluentui/react-motion dependency
…do-elements to WAAPI motion components (B2)

Convert spinnerTail ::before/::after pseudo-elements to real <span> elements
animated by Web Animations API motion components. This is a DOM structure
change — consumers targeting ::before/::after in custom CSS will be affected.

Changes:
- Spinner.types.ts: add internal tailArcClassName/tailArcRtlClassName to SpinnerState
- spinnerMotions.ts: add SpinnerTailMotion (sweep), SpinnerArcStartMotion (::before),
  SpinnerArcEndMotion (::after), all 1.5s curveEasyEase infinite
- useSpinnerStyles.styles.ts: replace pseudo-element styles with real element
  classes (useSpinnerTailArcBaseClassName), move RTL bg to rtlTailArc style,
  reduced motion hides arcs via display:none and shows static conic-gradient on tail
- renderSpinner.tsx: render two arc <span> children inside spinnerTail, each
  wrapped in their respective motion component; spinnerTail itself wrapped in
  SpinnerTailMotion
- API report updated for new SpinnerState fields

BREAKING CHANGE: Spinner DOM structure changed — spinnerTail no longer uses
::before/::after pseudo-elements; arc segments are now real <span> children.
@robertpenner robertpenner force-pushed the refactor/progressbar-spinner-motion branch from 267976b to 7f8e3e4 Compare March 19, 2026 16:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant