PluginProbe ʕ •ᴥ•ʔ
Hostinger Tools / 3.0.67
Hostinger Tools v3.0.67
3.0.67 3.0.66 1.8.1 1.8.2 1.8.3 1.9.1 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.4 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.1.1 2.1.2 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 3.0.0 3.0.10 3.0.11 3.0.12 3.0.13 3.0.14 3.0.15 3.0.16 3.0.17 3.0.18 3.0.19 3.0.2 3.0.20 3.0.21 3.0.22 3.0.23 3.0.24 3.0.25 3.0.26 3.0.27 3.0.28 3.0.29 3.0.3 3.0.30 3.0.31 3.0.32 3.0.33 3.0.34 3.0.35 3.0.36 3.0.37 3.0.38 3.0.39 3.0.4 3.0.40 3.0.41 3.0.42 3.0.43 3.0.44 3.0.45 3.0.46 3.0.47 3.0.48 3.0.49 3.0.5 3.0.50 3.0.51 3.0.52 3.0.53 3.0.54 3.0.55 3.0.56 3.0.57 3.0.58 3.0.59 3.0.6 3.0.60 3.0.61 3.0.62 3.0.65 3.0.7 3.0.8 3.0.9 trunk 1.8.0
hostinger / vue-frontend / src / components / Loaders / CircleLoader.vue
hostinger / vue-frontend / src / components / Loaders Last commit date
CircleLoader.vue 8 months ago SkeletonLoader.vue 8 months ago
CircleLoader.vue
81 lines
1 <script lang="ts" setup>
2 import { computed } from "vue";
3
4 import { Color } from "@/types";
5 import { wrapInCssVar } from "@/utils/helpers";
6
7 const props = withDefaults(defineProps<Props>(), {
8 color: "primary",
9 size: "medium",
10 dimensions: undefined,
11 borderSize: undefined,
12 borderColor: undefined
13 });
14
15 const DIMENSION_MAP = {
16 small: "24px",
17 medium: "40px",
18 large: "72px"
19 } as const;
20
21 type HCircleLoaderSize = keyof typeof DIMENSION_MAP;
22
23 interface Props {
24 color?: Color;
25 size?: HCircleLoaderSize;
26 dimensions?: string;
27 borderSize?: string;
28 borderColor?: Color;
29 }
30
31 const getDimensions = () => {
32 if (props.dimensions) {
33 return props.dimensions;
34 }
35
36 return DIMENSION_MAP[props.size];
37 };
38
39 const getBorder = () => props.borderSize || "4px";
40
41 const getBorderColor = (): string => {
42 if (props.borderColor) {
43 return wrapInCssVar(props.borderColor);
44 }
45
46 return wrapInCssVar(`${props.color}-light`);
47 };
48
49 const style = computed(() => ({
50 color: wrapInCssVar(props.color),
51 borderColor: getBorderColor(),
52 width: getDimensions(),
53 borderSize: getBorder(),
54 height: getDimensions()
55 }));
56 </script>
57
58 <template>
59 <div class="loader" />
60 </template>
61
62 <style lang="scss" scoped>
63 .loader {
64 border: v-bind("style.borderSize") solid v-bind("style.borderColor");
65 border-top: v-bind("style.borderSize") solid v-bind("style.color");
66 width: v-bind("style.width");
67 height: v-bind("style.height");
68 border-radius: 50%;
69 animation: spin 1s linear infinite;
70 }
71
72 @keyframes spin {
73 0% {
74 transform: rotate(0deg);
75 }
76 100% {
77 transform: rotate(360deg);
78 }
79 }
80 </style>
81