sparkle/add SpinnerBrand component#23660
Merged
ClementAupiais merged 6 commits intomainfrom Apr 3, 2026
Merged
Conversation
New Lottie-based spinner using the Dust logo animation with three variants: mono, colored, and colored-gray. Includes Storybook stories with a full size × variant gallery. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
1 Skipped Deployment
|
ykmsd
approved these changes
Apr 2, 2026
Contributor
ykmsd
left a comment
There was a problem hiding this comment.
As discussed IRL, I'm not sure about it and would love to see the version that is a bit slower
sparkle/src/lottie/spinnerDust.ts
Outdated
| @@ -0,0 +1,2 @@ | |||
| const animation = {"nm":"Logo-Spin-plan","ddd":0,"h":40,"w":40,"meta":{"g":"LottieFiles Figma v111"},"layers":[{"ty":0,"nm":"blue","sr":1,"st":0,"op":109,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[20,20]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[-20,20],"t":0},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[-20,20],"t":12},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[-20,20],"t":24},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[-20,20],"t":36},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20,20],"t":48},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20,20],"t":60},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[-20,20],"t":72},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[-20,20],"t":96},{"s":[-20,20],"t":120}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"w":40,"h":40,"refId":"1","ind":1},{"ty":4,"nm":"orange","sr":1,"st":0,"op":109,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[20,20]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20,-20],"t":0},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20,-20],"t":12},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20,-20],"t":36},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[60,20],"t":48},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[60,20],"t":60},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20,20],"t":72},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20,20],"t":96},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20,-20],"t":108},{"s":[20,-20],"t":120}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[],"ind":2},{"ty":4,"nm":"Union","sr":1,"st":0,"op":109,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[20,20]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[20,20]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[40,20],[20,20],[20,40],[0,40],[0,0],[40,0],[40,20]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":0,"k":[0.2118,0.2549,0.3255]},"r":1,"o":{"a":0,"k":100}}],"ind":3,"parent":2},{"ty":4,"nm":"Union","sr":1,"st":0,"op":109,"ip":60,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[20,20]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[20,20]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[40,20],[20,20],[20,40],[0,40],[0,0],[40,0],[40,20]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":0,"k":[0.2118,0.2549,0.3255]},"r":1,"o":{"a":0,"k":100}}],"ind":4,"parent":2},{"ty":4,"nm":"green","sr":1,"st":0,"op":109,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[20,20]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20,20],"t":0},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20,20],"t":12},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20,60],"t":24},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20,60],"t":36},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20,60],"t":60},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20,60],"t":72},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20,60],"t":96},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20,20],"t":108},{"s":[20,20],"t":120}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[],"ind":5},{"ty":4,"nm":"Union","sr":1,"st":0,"op":109,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[20,20]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[20,20]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-11.05],[11.05,0],[0,0],[0,0],[0,0]],"o":[[11.05,0],[0,11.05],[0,0],[0,0],[0,0],[0,0]],"v":[[20,0],[40,20],[20,40],[0,40],[0,0],[20,0]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":0,"k":[0.2118,0.2549,0.3255]},"r":1,"o":{"a":0,"k":100}}],"ind":6,"parent":5},{"ty":4,"nm":"Union","sr":1,"st":0,"op":109,"ip":60,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[20,20]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[20,20]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-11.05],[11.05,0],[0,0],[0,0],[0,0]],"o":[[11.05,0],[0,11.05],[0,0],[0,0],[0,0],[0,0]],"v":[[20,0],[40,20],[20,40],[0,40],[0,0],[20,0]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":0,"k":[0.2118,0.2549,0.3255]},"r":1,"o":{"a":0,"k":100}}],"ind":7,"parent":5},{"ty":4,"nm":"red","sr":1,"st":0,"op":109,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[20,20]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20,-20],"t":0},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20,-20],"t":12},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20,20],"t":24},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20,20],"t":36},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[60,20],"t":48},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[60,20],"t":60},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[60,20],"t":96},{"o":{"x":0.33,"y":1},"i":{"x":0.68,"y":1},"s":[20,-20],"t":108},{"s":[20,-20],"t":120}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[],"ind":8},{"ty":4,"nm":"Union","sr":1,"st":0,"op":109,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[20,20]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[20,20]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[11.05,0],[0,11.05],[0,0],[0,0]],"o":[[0,0],[0,11.05],[-11.05,0],[0,0],[0,0],[0,0]],"v":[[40,0],[40,20],[20,40],[0,20],[0,0],[40,0]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":0,"k":[0.2118,0.2549,0.3255]},"r":1,"o":{"a":0,"k":100}}],"ind":9,"parent":8},{"ty":4,"nm":"Union","sr":1,"st":0,"op":109,"ip":36,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[20,20]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[20,20]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[11.05,0],[0,11.05],[0,0],[0,0]],"o":[[0,0],[0,11.05],[-11.05,0],[0,0],[0,0],[0,0]],"v":[[40,0],[40,20],[20,40],[0,20],[0,0],[40,0]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":0,"k":[0.2118,0.2549,0.3255]},"r":1,"o":{"a":0,"k":100}}],"ind":10,"parent":8}],"v":"5.7.0","fr":60,"op":108,"ip":0,"assets":[{"nm":"[Asset] blue","id":"1","fr":30,"layers":[{"ty":4,"nm":"blue Bg","sr":1,"st":0,"op":109,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[20,20]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[20,20]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,-0.01],[0,0],[0.01,0],[0,0],[0,0.01],[0,0],[-0.01,0],[0,0]],"o":[[0,0],[0,0.01],[0,0],[-0.01,0],[0,0],[0,-0.01],[0,0],[0.01,0]],"v":[[40,0.01],[40,39.99],[39.99,40],[0.01,40],[0,39.99],[0,0.01],[0.01,0],[39.99,0]]}}}],"ind":1},{"ty":4,"nm":"Union","sr":1,"st":0,"op":109,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[20,20]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[20,20]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-5.52],[5.52,0],[0,0],[0,0],[0,0]],"o":[[5.52,0],[0,5.52],[0,0],[0,0],[0,0],[0,0]],"v":[[20,20],[30,30],[20,40],[0,40],[0,20],[20,20]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,5.52],[-5.52,0],[0,0],[0,0]],"o":[[0,0],[-5.52,0],[0,-5.52],[0,0],[0,0],[0,0]],"v":[[40,20],[20,20],[10,10],[20,0],[40,0],[40,20]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":0,"k":[0.2118,0.2549,0.3255]},"r":1,"o":{"a":0,"k":100}}],"ind":2},{"ty":4,"nm":"Union","sr":1,"st":0,"op":109,"ip":36,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[20,20]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[20,20]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-5.52],[5.52,0],[0,0],[0,0],[0,0]],"o":[[5.52,0],[0,5.52],[0,0],[0,0],[0,0],[0,0]],"v":[[20,20],[30,30],[20,40],[0,40],[0,20],[20,20]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,5.52],[-5.52,0],[0,0],[0,0]],"o":[[0,0],[-5.52,0],[0,-5.52],[0,0],[0,0],[0,0]],"v":[[40,20],[20,20],[10,10],[20,0],[40,0],[40,20]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":0,"k":[0.2118,0.2549,0.3255]},"r":1,"o":{"a":0,"k":100}}],"ind":3},{"ty":4,"nm":"Union","sr":1,"st":0,"op":109,"ip":60,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[20,20]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[20,20]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"shapes":[{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,-5.52],[5.52,0],[0,0],[0,0],[0,0]],"o":[[5.52,0],[0,5.52],[0,0],[0,0],[0,0],[0,0]],"v":[[20,20],[30,30],[20,40],[0,40],[0,20],[20,20]]}}},{"ty":"sh","bm":0,"hd":false,"nm":"","d":1,"ks":{"a":0,"k":{"c":true,"i":[[0,0],[0,0],[0,5.52],[-5.52,0],[0,0],[0,0]],"o":[[0,0],[-5.52,0],[0,-5.52],[0,0],[0,0],[0,0]],"v":[[40,20],[20,20],[10,10],[20,0],[40,0],[40,20]]}}},{"ty":"fl","bm":0,"hd":false,"nm":"","c":{"a":0,"k":[0.2118,0.2549,0.3255]},"r":1,"o":{"a":0,"k":100}}],"ind":4}]}]} as const; | |||
Contributor
There was a problem hiding this comment.
okay so this is how you define animation lottie 🙃
Contributor
Author
There was a problem hiding this comment.
Yes ahah its a gigantic json
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Exposes animation speed multiplier via lottieRef for testing and runtime control. Storybook Playground includes a number control (0.1–5, default 1). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Contributor
Author
|
@ykmsd just added a speed props to it, indeed 0.5 seems a bit better. WDYT |
Contributor
|
I'm team 0.4 but might change my opinion once the animation gets smoother 😄 |
- Replace FullColored animation with v2 (fixed version) - Strip opacity keyframes for clean transitions - Apply ease-in-out easing to all keyframes - Set default speed to 0.4 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Mono: updated to v2 with ease-in-out easing - Colored: updated to v2 fix with ease-in-out easing - ColoredGray: updated to v2 fix with ease-in-out easing Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds a forced-white version of the mono animation using replaceColors, handling both 3 and 4-element color arrays for compatibility. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
New Lottie-based spinner using the Dust logo animation with three variants: mono, colored, and colored-gray. Includes Storybook stories with a full size × variant gallery.
Tests
Manually tested via Storybook. Added stories including a Playground story for individual testing and a Gallery story that displays all size × variant combinations.
Risk
None. This is a new component addition with no impact on existing code.
Deploy Plan
Deploy sparkle