feat: add indeterminate ProgressCircle#501
Conversation
✅ Heimdall Review Status
✅
|
| Code Owner | Status | Calculation | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| ui-systems-eng-team |
✅
1/1
|
Denominator calculation
|
| color={colorValue} | ||
| size={progressCircleHeight} | ||
| weight="thin" | ||
| /> |
There was a problem hiding this comment.
How easy do you think it would be to have this value not be hardcoded? Particularly for v9 branch. I guess wed need text to be hidden still and then somehow have this be 100% height (If possible?)
There was a problem hiding this comment.
depends if we want to merge this pr before or after v9
There was a problem hiding this comment.
since we are pushing back the release of v9. we should merge this change in v8. I'll then remove the fixed height in cds-v9 branch following the new pattern after sync.
There was a problem hiding this comment.
Would it be bad to have a loadingSpinnerSize prop or something similar on ButtonBaseProps (and include for IconButton? Or does that feel weird? We could also expose a node prop for this , such as loadingNode or something.
Advanced hoping to adjust size here and I'm wondering if possible, although in v9 with it being padding maybe the size prop doesn't make as much sense, vs a node for overriding.
Also if we say this isn't worth it then that's fine!
There was a problem hiding this comment.
I added progressCircleSize prop to both Button and IconButton.
|
Great work! Excited to see this when it's fully ready. |
51d9266 to
3cd6279
Compare
ec42a2a to
1b026ee
Compare
01c655f to
1146e85
Compare
ecf32ca to
83f3dee
Compare
…-label math - Add indeterminate prop to ProgressCircle (web & mobile): spinning state with configurable weight, default stroke ratio 0.11; animate full SVG on mobile, CSS keyframes on web; hide default content when indeterminate. - Add getProgressSize(weight) in common and deprecate useProgressSize; use getProgressSize in ProgressBar and ProgressCircle on both platforms. - Simplify ProgressBarWithFloatLabel (web & mobile): remove usePreviousValues, useIsoEffect, and imperative animation; use shared getEndTranslateX so float label trailing edge follows fill end (containerWidth * progress - textWidth); web uses useMotionProps + MotionBox, mobile animates translateX to target. - ProgressBar/ProgressCircle: progress optional with default 0; add originX/ originY in getProgressCircleParams; web ProgressCircle uses pathLength=1. - Deprecate Spinner (web & mobile) in favor of indeterminate ProgressCircle. - ProgressBar tests: update float-label position expectation (80) and accept transform none/translateX(0) for zero progress; iconSvgMap regenerated.
e36c29b to
8540288
Compare
hcopp
left a comment
There was a problem hiding this comment.
Looks great, thanks for being thorough!
* feat: add indeterminate ProgressCircle (#501) * feat: add indeterminate ProgressCircle, unify progress size and float-label math - Add indeterminate prop to ProgressCircle (web & mobile): spinning state with configurable weight, default stroke ratio 0.11; animate full SVG on mobile, CSS keyframes on web; hide default content when indeterminate. - Add getProgressSize(weight) in common and deprecate useProgressSize; use getProgressSize in ProgressBar and ProgressCircle on both platforms. - Simplify ProgressBarWithFloatLabel (web & mobile): remove usePreviousValues, useIsoEffect, and imperative animation; use shared getEndTranslateX so float label trailing edge follows fill end (containerWidth * progress - textWidth); web uses useMotionProps + MotionBox, mobile animates translateX to target. - ProgressBar/ProgressCircle: progress optional with default 0; add originX/ originY in getProgressCircleParams; web ProgressCircle uses pathLength=1. - Deprecate Spinner (web & mobile) in favor of indeterminate ProgressCircle. - ProgressBar tests: update float-label position expectation (80) and accept transform none/translateX(0) for zero progress; iconSvgMap regenerated. * update test and deprecation message * add more button stories * a11y fix * remove 0.11 * add progressCircleSize prop * update changelogs and package versions * add progressCircleSize prop to IconButton * fix removal version * chore: deprecate CardGroup (#560) * chore: deprecate CardGroup * Update changelog * feat: added cds skills for distribution (#561) * chore: deprecate old card (#562) * chore: deprecate old card 1. derpecated Card and related components and types 2. added derepcate-cds-api-skill * update changelogs * tweaks --------- Co-authored-by: Hunter Copp <huntercolecopp@gmail.com> Co-authored-by: Harry <ruikun.hao@coinbase.com>
What changed? Why?
feat: add indeterminate ProgressCircle, unify progress size and float-label math
configurable weight, default stroke ratio 0.11; animate full SVG on mobile,
CSS keyframes on web; hide default content when indeterminate.
getProgressSize in ProgressBar and ProgressCircle on both platforms.
useIsoEffect, and imperative animation; use shared getEndTranslateX so float
label trailing edge follows fill end (containerWidth * progress - textWidth);
web uses useMotionProps + MotionBox, mobile animates translateX to target.
originY in getProgressCircleParams; web ProgressCircle uses pathLength=1.
transform none/translateX(0) for zero progress; iconSvgMap regenerated.
The look of indeterminate ProgressCircle is based on the loading Button figma design
Root cause (required for bugfixes)
UI changes
storybook
docs
Simulator.Screen.Recording.-.iPhone.16.Pro.-.2026-03-17.at.12.02.31.mov
Simulator.Screen.Recording.-.iPhone.16.Pro.-.2026-03-17.at.12.01.33.mov
Simulator.Screen.Recording.-.iPhone.16.Pro.-.2026-03-17.at.12.03.13.mov
Testing
How has it been tested?
Testing instructions
Illustrations/Icons Checklist
Required if this PR changes files under
packages/illustrations/**orpackages/icons/**Change management
type=routine
risk=low
impact=sev5
automerge=false