File size: 1,524 Bytes
43a06dc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<script lang="ts">
    import IconLink from "@tabler/icons-svelte/IconLink.svelte";
    import IconLoader2 from "@tabler/icons-svelte/IconLoader2.svelte";

    export let loading: boolean;
</script>

<div id="input-icons" class:loading>
    <div class="input-icon spinner-icon">
        <IconLoader2 />
    </div>
    <div class="input-icon link-icon">
        <IconLink />
    </div>
</div>

<style>
    #input-icons {
        display: flex;
        position: relative;
        align-items: center;
        justify-content: center;
        width: 18px;
        height: 18px;
    }

    #input-icons :global(svg) {
        stroke: var(--gray);
        width: 18px;
        height: 18px;
        stroke-width: 2px;
    }

    .input-icon {
        display: flex;
        position: absolute;
        transition:
            transform 0.25s,
            opacity 0.25s;
    }

    .link-icon {
        transform: none;
        opacity: 1;
    }

    .spinner-icon {
        transform: scale(0.4);
        opacity: 0;
    }

    .spinner-icon :global(svg) {
        animation: spin 0.7s infinite linear;
    }

    .loading .link-icon :global(svg) {
        animation: spin 0.7s infinite linear;
    }

    .loading .link-icon {
        transform: scale(0.4);
        opacity: 0;
    }

    .loading .spinner-icon {
        transform: none;
        opacity: 1;
    }

    @keyframes spin {
        0% {
            transform: rotate(0deg);
        }
        100% {
            transform: rotate(360deg);
        }
    }
</style>