49 lines
813 B
Vue
49 lines
813 B
Vue
<template>
|
|
<div v-if="isLoading" class="preview-loader" :class="{ shifted }">
|
|
<div class="spinner"></div>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup>
|
|
defineProps({
|
|
isLoading: {
|
|
type: Boolean,
|
|
required: true,
|
|
},
|
|
shifted: {
|
|
type: Boolean,
|
|
default: false,
|
|
},
|
|
});
|
|
</script>
|
|
|
|
<style scoped>
|
|
.preview-loader {
|
|
position: fixed;
|
|
top: 2rem;
|
|
right: 2rem;
|
|
z-index: 1000;
|
|
pointer-events: none;
|
|
transition: all 0.2s ease-in-out var(--curve);
|
|
}
|
|
|
|
.spinner {
|
|
width: 2rem;
|
|
height: 2rem;
|
|
border-radius: 50%;
|
|
display: inline-block;
|
|
border-top: 3px solid #000;
|
|
border-right: 3px solid transparent;
|
|
box-sizing: border-box;
|
|
animation: rotation 1s linear infinite;
|
|
}
|
|
|
|
@keyframes rotation {
|
|
0% {
|
|
transform: rotate(0deg);
|
|
}
|
|
100% {
|
|
transform: rotate(360deg);
|
|
}
|
|
}
|
|
</style>
|