PluginProbe ʕ •ᴥ•ʔ
Hostinger Tools / 3.0.72
Hostinger Tools v3.0.72
3.0.72 3.0.71 3.0.70 3.0.69 3.0.68 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 / CircleLoader.vue
hostinger / vue-frontend / src / components Last commit date
Button 10 months ago HostingerTools 10 months ago Icon 10 months ago Loaders 10 months ago Modals 10 months ago AccordionCard.vue 10 months ago Card.vue 10 months ago CircleLoader.vue 10 months ago CopyField.vue 10 months ago Label.vue 10 months ago NoResults.vue 10 months ago Notice.vue 1 year ago OverheadButton.vue 10 months ago PluginSplitNotice.vue 10 months ago Stepper.vue 10 months ago Toggle.vue 10 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