diff --git a/web/src/components/save/OmniboxIcon.svelte b/web/src/components/save/OmniboxIcon.svelte index 49d673c6..709fe28c 100644 --- a/web/src/components/save/OmniboxIcon.svelte +++ b/web/src/components/save/OmniboxIcon.svelte @@ -3,10 +3,39 @@ import IconLoader2 from "@tabler/icons-svelte/IconLoader2.svelte"; export let loading: boolean; + export let animated = !!loading; + + /* + initial spinner state is equal to loading state, + just so it's animated on init (or not). + on transition start, it overrides the value + to start spinning (to prevent zooming in with no spinning). + + then, on transition end, when the spinner is hidden, + and if loading state is false, the class is removed + and the spinner doesn't spin in background while being invisible. + + if loading state is true, then it will just stay spinning + (aka when it's visible and should be spinning). + + the spin on transition start is needed for the whirlpool effect + of the link icon being sucked into the spinner. + + this may be unnecessarily complicated but i think it looks neat. + */