improvement(ui): unify loading animations - #7746
Conversation
Use Relay for shared loading indicators and the Sim wordmark morph for workspace and workflow loading. Show workflow navigation feedback as soon as a destination is selected, including sidebar and search navigation.
…g-animatinos # Conflicts: # apps/sim/app/(landing)/components/footer/components/footer-wordmark-loop/footer-wordmark-loop.tsx
Replace the relay loader with a compact fading highlight around a ring. Keep the weighted orbit and reduced-motion fallback. This commit records the gradient variant before returning to the orbiting-dot design.
Replace the gradient highlight with a solid dot on a 3-unit ring. Record the dot variant with its slowdown centered at the top before experimenting with a clockwise offset.
Keep the dot moving through the top while accelerating through the bottom. Rotate the ring and dot together so their alignment stays fixed when scaled. This commit records the updated dot spinner variant.
Give the running strip and Stop highlight matching 15-degree edges with rounded corners and a 2.75px gap. Round the strip's outer end to follow the node contour, and preserve the thicker dot loader at 16px in the run button. Checkpoint for the slanted strip version before trying a vertical gap.
Use Static in light mode and Graphite in dark mode for workflow loading, while keeping the existing gradients available for the landing page. Remove the temporary pinned preview so loading ends normally. Checkpoint the rounded vertical gap between the Stop highlight and the running strip before restoring the slanted strip version for comparison.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
| const navigate = useCallback<NavigateToWorkflow>( | ||
| (href, options) => { | ||
| const destination = new URL(href, window.location.href) | ||
| const isWorkflowSwitch = | ||
| destination.origin === window.location.origin && | ||
| /^\/workspace\/[^/]+\/w\/[^/]+\/?$/.test(destination.pathname) && | ||
| destination.pathname !== window.location.pathname | ||
|
|
||
| startTransition(() => { | ||
| setIsNavigating(isWorkflowSwitch) | ||
| if (options?.replace) { | ||
| router.replace(href, { scroll: options.scroll, transitionTypes: options.transitionTypes }) | ||
| } else if (options) { | ||
| router.push(href, { scroll: options.scroll, transitionTypes: options.transitionTypes }) | ||
| } else { | ||
| router.push(href) | ||
| } | ||
| }) |
There was a problem hiding this comment.
Navigation feedback is incomplete
The immediate loading indicator only appears when navigation uses this new callback. Creating a workflow from the sidebar and duplicating the active workflow still call router.push directly, so those user-initiated switches leave the old canvas visible until the destination route commits. Route every workflow switch through the shared navigation function so loading feedback remains consistent.
Knowledge Base Used:
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
| </g> | ||
| </WordmarkFrame> | ||
|
|
||
| <div className='-translate-x-1/2 absolute top-full left-1/2 flex w-max flex-col gap-2 pt-5'> |
There was a problem hiding this comment.
The commands are now positioned below a wordmark that is centered independently, so they no longer participate in vertical centering. Because the containing canvas clips overflow, a canvas around 300px tall or shorter can hide the lower command rows. Keep the complete empty state in normal layout flow or reposition it for short canvases.
Summary
Type of Change
Testing
Checklist
Screenshots/Videos
No screenshots or videos attached.