PluginProbe
Hostinger Tools / 3.0.61
Hostinger Tools v3.0.61
3.0.77 3.0.76 3.0.75 3.0.74 3.0.73 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 All 108 releases
hostinger / vue-frontend / src / components / Loaders / SkeletonLoader.vue

SkeletonLoader.vue in Hostinger Tools 3.0.61, at vue-frontend/src/components/Loaders/SkeletonLoader.vue

98 lines 1.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <script lang="ts" setup>
2 import { computed } from "vue";
3
4 type DimensionValue = number | string;
5
6 type Props = {
7 circle?: boolean;
8 rounded?: boolean;
9 roundedXs?: boolean;
10 roundedXl?: boolean;
11 width?: DimensionValue;
12 height?: DimensionValue;
13 isInline?: boolean;
14 };
15
16 const props = defineProps<Props>();
17
18 const classes = computed(() => ({
19 "skeleton-loader--circle": props.circle,
20 "skeleton-loader--rounded": props.rounded,
21 "skeleton-loader--rounded-xs": props.roundedXs,
22 "skeleton-loader--rounded-xl": props.roundedXl,
23 "skeleton-loader--inline": props.isInline
24 }));
25
26 const getSkeletonSize = (value?: DimensionValue) => {
27 if (Number.isInteger(value)) {
28 return `${value}px`;
29 }
30
31 return value;
32 };
33 </script>
34
35 <template>
36 <div
37 class="skeleton-loader"
38 :class="{ ...classes }"
39 :style="{
40 'max-width': getSkeletonSize(width),
41 height: getSkeletonSize(height),
42 width: props.isInline ? getSkeletonSize(width) : undefined,
43 }"
44 />
45 </template>
46
47 <style lang="scss" scoped>
48 .skeleton-loader {
49 position: relative;
50 overflow: hidden;
51 background-color: var(--gray-1);
52 width: 100%;
53
54 &::after {
55 top: 0;
56 left: 0;
57 right: 0;
58 bottom: 0;
59 content: "";
60 position: absolute;
61 animation: HSkeletonLoader-keyframes-wave 1.6s linear 0.5s infinite;
62 transform: translateX(-100%);
63 background: linear-gradient(90deg, transparent, var(--gray-2));
64 }
65
66 &--circle {
67 border-radius: 50%;
68 }
69
70 &--rounded {
71 border-radius: 8px;
72 }
73 &--rounded-xs {
74 border-radius: 4px;
75 }
76 &--rounded-xl {
77 border-radius: 24px;
78 }
79
80 &--inline {
81 display: inline-block;
82 vertical-align: middle;
83 }
84 }
85
86 @keyframes HSkeletonLoader-keyframes-wave {
87 0% {
88 transform: translateX(-100%);
89 }
90 60% {
91 transform: translateX(100%);
92 }
93 100% {
94 transform: translateX(100%);
95 }
96 }
97 </style>
98