@appscode/design-system 2.0.60 → 2.0.62
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/vue-components/styles/base/utilities/_colors.scss +1 -1
- package/vue-components/styles/components/_accordion.scss +0 -47
- package/vue-components/styles/components/_table.scss +26 -1
- package/vue-components/styles/components/_terminal.scss +1 -1
- package/vue-components/styles/components/form-fields/_input.scss +42 -29
- package/vue-components/styles/theme/_dark.scss +1 -1
- package/vue-components/v3/accordion/Accordion.vue +6 -2
- package/vue-components/v3/alert/Toast.vue +13 -2
- package/vue-components/v3/avatar/Avatar.vue +69 -0
- package/vue-components/v3/cards/Cluster.vue +3 -3
- package/vue-components/v3/cards/Payment.vue +25 -5
- package/vue-components/v3/divider/Divider.vue +45 -0
- package/vue-components/v3/form-fields/CheckRadio.vue +40 -0
- package/vue-components/v3/messages/Message.vue +6 -4
- package/vue-components/v3/skeleton/Skeleton.vue +47 -0
- package/vue-components/v3/skeleton/Skeletons.vue +15 -0
- package/vue-components/v3/steps/ColoredSteps.vue +11 -1
- package/vue-components/v3/table/TableContainer.vue +0 -27
package/package.json
CHANGED
|
@@ -1,27 +1,4 @@
|
|
|
1
1
|
.ac-accordion-wrapper {
|
|
2
|
-
&.is-marginless {
|
|
3
|
-
.single-accordion-item {
|
|
4
|
-
margin: 0;
|
|
5
|
-
padding: 0;
|
|
6
|
-
|
|
7
|
-
.accordion-heading {
|
|
8
|
-
padding: 10px 20px;
|
|
9
|
-
position: relative;
|
|
10
|
-
z-index: 1;
|
|
11
|
-
|
|
12
|
-
&::after {
|
|
13
|
-
position: absolute;
|
|
14
|
-
content: "";
|
|
15
|
-
left: 0;
|
|
16
|
-
top: 0;
|
|
17
|
-
width: 4px;
|
|
18
|
-
height: 100%;
|
|
19
|
-
background-color: $ac-primary;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
2
|
.single-accordion-item {
|
|
26
3
|
background-color: $white-100;
|
|
27
4
|
padding: 15px 20px;
|
|
@@ -69,7 +46,6 @@
|
|
|
69
46
|
|
|
70
47
|
.accordion-body {
|
|
71
48
|
max-height: 0;
|
|
72
|
-
transition: max-height 0.2s ease-out;
|
|
73
49
|
overflow: hidden;
|
|
74
50
|
|
|
75
51
|
p {
|
|
@@ -92,26 +68,3 @@
|
|
|
92
68
|
}
|
|
93
69
|
}
|
|
94
70
|
}
|
|
95
|
-
|
|
96
|
-
/****************************************
|
|
97
|
-
Responsive Classes
|
|
98
|
-
*****************************************/
|
|
99
|
-
// Extra small devices (portrait phones, less than 576px)
|
|
100
|
-
@media (max-width: 575.98px) {
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// Small devices (landscape phones, 576px and up)
|
|
104
|
-
@media (min-width: 576px) and (max-width: 767.98px) {
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
// Medium devices (tablets, 768px and up)
|
|
108
|
-
@media (min-width: 768px) and (max-width: 991.98px) {
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
// Large devices (desktops, 992px and up)
|
|
112
|
-
@media (min-width: 992px) and (max-width: 1199.98px) {
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
// Extra large devices (large desktops, 1200px and up)
|
|
116
|
-
@media (min-width: 1200px) {
|
|
117
|
-
}
|
|
@@ -1,6 +1,31 @@
|
|
|
1
1
|
// INFO TABLE END
|
|
2
|
-
|
|
3
2
|
// GENERAL TABLE START
|
|
3
|
+
|
|
4
|
+
.table-container {
|
|
5
|
+
&.ac-table-container {
|
|
6
|
+
&::-webkit-scrollbar {
|
|
7
|
+
height: 7px;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/* Track */
|
|
11
|
+
&::-webkit-scrollbar-track {
|
|
12
|
+
background-color: #d1d4de;
|
|
13
|
+
border-radius: 10px;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/* Handle */
|
|
17
|
+
&::-webkit-scrollbar-thumb {
|
|
18
|
+
background-color: $gray-60;
|
|
19
|
+
border-radius: 10px;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/* Handle on hover */
|
|
23
|
+
&::-webkit-scrollbar-thumb:hover {
|
|
24
|
+
background-color: $secondary-95;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
4
29
|
.table.ac-table {
|
|
5
30
|
background-color: transparent;
|
|
6
31
|
margin-bottom: 0;
|
|
@@ -3,6 +3,19 @@
|
|
|
3
3
|
z-index: 1;
|
|
4
4
|
margin-bottom: 16px;
|
|
5
5
|
|
|
6
|
+
.prepend {
|
|
7
|
+
position: absolute;
|
|
8
|
+
left: 1px;
|
|
9
|
+
top: 1px;
|
|
10
|
+
width: 32px;
|
|
11
|
+
height: 34px;
|
|
12
|
+
display: flex;
|
|
13
|
+
align-items: center;
|
|
14
|
+
border-radius: 4px 0 0 4px;
|
|
15
|
+
justify-content: center;
|
|
16
|
+
border-right: 1px solid $color-border-dark;
|
|
17
|
+
background-color: $white-100;
|
|
18
|
+
}
|
|
6
19
|
&.is-disable {
|
|
7
20
|
opacity: 0.5;
|
|
8
21
|
|
|
@@ -497,35 +510,35 @@
|
|
|
497
510
|
}
|
|
498
511
|
}
|
|
499
512
|
|
|
500
|
-
.is-checkradio[type="radio"] + label::after,
|
|
501
|
-
.is-checkradio[type="radio"] + label:after {
|
|
502
|
-
|
|
503
|
-
}
|
|
504
|
-
|
|
505
|
-
.is-checkradio[type="checkbox"]:checked + label::before,
|
|
506
|
-
.is-checkradio[type="checkbox"]:checked + label:before,
|
|
507
|
-
.is-checkradio[type="radio"]:checked + label::before,
|
|
508
|
-
.is-checkradio[type="radio"]:checked + label:before {
|
|
509
|
-
|
|
510
|
-
}
|
|
511
|
-
|
|
512
|
-
.is-checkradio[type="checkbox"]:hover:not([disabled]) + label::before,
|
|
513
|
-
.is-checkradio[type="checkbox"]:hover:not([disabled]) + label:before,
|
|
514
|
-
.is-checkradio[type="radio"]:hover:not([disabled]) + label::before,
|
|
515
|
-
.is-checkradio[type="radio"]:hover:not([disabled]) + label:before {
|
|
516
|
-
|
|
517
|
-
}
|
|
518
|
-
|
|
519
|
-
.switch[type="checkbox"].is-primary:checked + label::before,
|
|
520
|
-
.switch[type="checkbox"].is-primary:checked + label:before {
|
|
521
|
-
|
|
522
|
-
}
|
|
523
|
-
|
|
524
|
-
.is-checkradio[type="checkbox"] + label::after,
|
|
525
|
-
.is-checkradio[type="checkbox"] + label:after {
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
}
|
|
513
|
+
// .is-checkradio[type="radio"] + label::after,
|
|
514
|
+
// .is-checkradio[type="radio"] + label:after {
|
|
515
|
+
// background: $ac-primary;
|
|
516
|
+
// }
|
|
517
|
+
|
|
518
|
+
// .is-checkradio[type="checkbox"]:checked + label::before,
|
|
519
|
+
// .is-checkradio[type="checkbox"]:checked + label:before,
|
|
520
|
+
// .is-checkradio[type="radio"]:checked + label::before,
|
|
521
|
+
// .is-checkradio[type="radio"]:checked + label:before {
|
|
522
|
+
// border: 0.2rem solid $ac-primary;
|
|
523
|
+
// }
|
|
524
|
+
|
|
525
|
+
// .is-checkradio[type="checkbox"]:hover:not([disabled]) + label::before,
|
|
526
|
+
// .is-checkradio[type="checkbox"]:hover:not([disabled]) + label:before,
|
|
527
|
+
// .is-checkradio[type="radio"]:hover:not([disabled]) + label::before,
|
|
528
|
+
// .is-checkradio[type="radio"]:hover:not([disabled]) + label:before {
|
|
529
|
+
// border-color: $primary-30 !important;
|
|
530
|
+
// }
|
|
531
|
+
|
|
532
|
+
// .switch[type="checkbox"].is-primary:checked + label::before,
|
|
533
|
+
// .switch[type="checkbox"].is-primary:checked + label:before {
|
|
534
|
+
// background-color: $ac-primary;
|
|
535
|
+
// }
|
|
536
|
+
|
|
537
|
+
// .is-checkradio[type="checkbox"] + label::after,
|
|
538
|
+
// .is-checkradio[type="checkbox"] + label:after {
|
|
539
|
+
// border-width: 0.2rem;
|
|
540
|
+
// border-color: $ac-primary;
|
|
541
|
+
// }
|
|
529
542
|
|
|
530
543
|
// file upload
|
|
531
544
|
.file.ac-file {
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
+
import { ref } from "vue";
|
|
3
|
+
|
|
2
4
|
interface Props {
|
|
3
5
|
modifierClasses?: string;
|
|
4
6
|
}
|
|
@@ -6,6 +8,8 @@ interface Props {
|
|
|
6
8
|
withDefaults(defineProps<Props>(), {
|
|
7
9
|
modifierClasses: "",
|
|
8
10
|
});
|
|
11
|
+
|
|
12
|
+
const isActive = ref(true);
|
|
9
13
|
</script>
|
|
10
14
|
|
|
11
15
|
<template>
|
|
@@ -16,13 +20,13 @@ withDefaults(defineProps<Props>(), {
|
|
|
16
20
|
<!-- accordion heading start -->
|
|
17
21
|
<div class="accordion-heading">
|
|
18
22
|
<h6 class="is-small">Hello Accordion title</h6>
|
|
19
|
-
<button class="icon">
|
|
23
|
+
<button class="icon" @click="isActive = !isActive">
|
|
20
24
|
<i class="fa fa-plus" aria-hidden="true"></i>
|
|
21
25
|
</button>
|
|
22
26
|
</div>
|
|
23
27
|
<!-- accordion heading end -->
|
|
24
28
|
<!-- accordion body start -->
|
|
25
|
-
<div class="accordion-body">
|
|
29
|
+
<div class="accordion-body" :style="{ 'max-height': isActive ? '100%' : 0 }">
|
|
26
30
|
<slot />
|
|
27
31
|
</div>
|
|
28
32
|
<!-- accordion body end -->
|
|
@@ -13,8 +13,19 @@ withDefaults(defineProps<Props>(), {
|
|
|
13
13
|
<div class="toast-header is-flex is-align-items-center">
|
|
14
14
|
<h6 class="mr-auto">Toast Header</h6>
|
|
15
15
|
<small>2 hours ago</small>
|
|
16
|
-
<button type="button" class="button ac-button is-
|
|
17
|
-
<span class="
|
|
16
|
+
<button type="button" class="button ac-button is-white ml-8">
|
|
17
|
+
<span class="icon">
|
|
18
|
+
<svg
|
|
19
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
20
|
+
fill="none"
|
|
21
|
+
viewBox="0 0 24 24"
|
|
22
|
+
stroke-width="1.5"
|
|
23
|
+
stroke="currentColor"
|
|
24
|
+
class="w-6 h-6"
|
|
25
|
+
>
|
|
26
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M6 18 18 6M6 6l12 12" />
|
|
27
|
+
</svg>
|
|
28
|
+
</span>
|
|
18
29
|
</button>
|
|
19
30
|
</div>
|
|
20
31
|
<div class="toast-body">
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
interface Props {
|
|
3
|
+
size?: string;
|
|
4
|
+
imgUrl?: string;
|
|
5
|
+
rounded?: boolean;
|
|
6
|
+
roundedClass?: string;
|
|
7
|
+
dots?: boolean;
|
|
8
|
+
isInitial?: boolean;
|
|
9
|
+
dotBgColor?: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
withDefaults(defineProps<Props>(), {
|
|
13
|
+
size: "32x32",
|
|
14
|
+
imgUrl: "https://bulma.io/images/placeholders/32x32.png",
|
|
15
|
+
rounded: false,
|
|
16
|
+
roundedClass: "",
|
|
17
|
+
dots: false,
|
|
18
|
+
isInitial: false,
|
|
19
|
+
dotBgColor: "",
|
|
20
|
+
});
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
<template>
|
|
24
|
+
<figure class="image" :class="`is-${size}`">
|
|
25
|
+
<span v-if="dots" class="dots" :class="dotBgColor"></span>
|
|
26
|
+
<div v-if="isInitial" class="is-initial" :class="[rounded ? 'is-rounded' : '', roundedClass]">jd</div>
|
|
27
|
+
<img v-else :class="[rounded ? 'is-rounded' : '', roundedClass]" :src="imgUrl" alt="avatar-image" />
|
|
28
|
+
</figure>
|
|
29
|
+
</template>
|
|
30
|
+
|
|
31
|
+
<style lang="scss">
|
|
32
|
+
figure {
|
|
33
|
+
position: relative;
|
|
34
|
+
z-index: 1;
|
|
35
|
+
|
|
36
|
+
.dots {
|
|
37
|
+
position: absolute;
|
|
38
|
+
right: calc(5% - 6px);
|
|
39
|
+
top: calc(30% - 6px);
|
|
40
|
+
width: 12px;
|
|
41
|
+
height: 12px;
|
|
42
|
+
background-color: $info;
|
|
43
|
+
border-radius: 50%;
|
|
44
|
+
border: 2px solid $white-100;
|
|
45
|
+
box-shadow: 2px 2px 2px rgba(5, 5, 5, 0.16);
|
|
46
|
+
z-index: 2;
|
|
47
|
+
&.is-not-active {
|
|
48
|
+
background-color: $gray-60;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
.is-initial {
|
|
52
|
+
position: relative;
|
|
53
|
+
z-index: 1;
|
|
54
|
+
background-color: $gray-90;
|
|
55
|
+
height: 100%;
|
|
56
|
+
width: 100%;
|
|
57
|
+
display: flex;
|
|
58
|
+
align-items: center;
|
|
59
|
+
justify-content: center;
|
|
60
|
+
font-size: 16px;
|
|
61
|
+
font-weight: 500;
|
|
62
|
+
color: $color-heading;
|
|
63
|
+
border: 1px solid $color-border;
|
|
64
|
+
&.is-rounded {
|
|
65
|
+
border-radius: 50%;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
</style>
|
|
@@ -14,8 +14,8 @@ interface Props {
|
|
|
14
14
|
|
|
15
15
|
withDefaults(defineProps<Props>(), {
|
|
16
16
|
clusterData: () => ({
|
|
17
|
-
name: "",
|
|
18
|
-
providerIcon: "",
|
|
17
|
+
name: "Cluster Name",
|
|
18
|
+
providerIcon: "https://via.placeholder.com/100/dddddd/808080",
|
|
19
19
|
tags: [],
|
|
20
20
|
details: [],
|
|
21
21
|
}),
|
|
@@ -34,7 +34,7 @@ const OptionDots = defineAsyncComponent(() => import("../option-dots/Options.vue
|
|
|
34
34
|
<div class="card-details-inner" :class="modifierClasses">
|
|
35
35
|
<div class="c-header">
|
|
36
36
|
<div class="c-logo">
|
|
37
|
-
<img :src="clusterData.providerIcon" alt="" />
|
|
37
|
+
<img :src="clusterData.providerIcon" :alt="clusterData.name" />
|
|
38
38
|
</div>
|
|
39
39
|
<div class="c-content">
|
|
40
40
|
<div class="is-flex is-justify-content-space-between pr-32">
|
|
@@ -1,6 +1,22 @@
|
|
|
1
|
-
<script setup lang="ts"
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
interface Props {
|
|
3
|
+
modifierClasses?: string;
|
|
4
|
+
cardNumber?: number;
|
|
5
|
+
expire?: string;
|
|
6
|
+
name?: string;
|
|
7
|
+
cardType?: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
withDefaults(defineProps<Props>(), {
|
|
11
|
+
modifierClasses: "",
|
|
12
|
+
cardNumber: 2296,
|
|
13
|
+
expire: "12/23",
|
|
14
|
+
name: "John Smith",
|
|
15
|
+
cardType: "VISA",
|
|
16
|
+
});
|
|
17
|
+
</script>
|
|
2
18
|
<template>
|
|
3
|
-
<div class="ac-payment-card-wrapper">
|
|
19
|
+
<div class="ac-payment-card-wrapper" :class="modifierClasses">
|
|
4
20
|
<!-- single card start -->
|
|
5
21
|
<div class="ac-payment-card payment-bg-2">
|
|
6
22
|
<div class="payment-card-inner">
|
|
@@ -36,7 +52,7 @@
|
|
|
36
52
|
<p class="p-card-number is-star">****</p>
|
|
37
53
|
<p class="p-card-number is-star">****</p>
|
|
38
54
|
<p class="p-card-number is-star">****</p>
|
|
39
|
-
<p class="p-card-number">
|
|
55
|
+
<p class="p-card-number">{{ cardNumber }}</p>
|
|
40
56
|
</div>
|
|
41
57
|
<!-- card body end -->
|
|
42
58
|
<!-- card footer start -->
|
|
@@ -45,10 +61,14 @@
|
|
|
45
61
|
<div class="p-card-expiry">
|
|
46
62
|
<p>Expiry Date <span>12/20</span></p>
|
|
47
63
|
</div>
|
|
48
|
-
<p class="user-name">
|
|
64
|
+
<p class="user-name">{{ name }}</p>
|
|
49
65
|
</div>
|
|
50
66
|
<div class="p-card-logo">
|
|
51
|
-
<img
|
|
67
|
+
<img
|
|
68
|
+
v-if="cardType === 'VISA'"
|
|
69
|
+
src="https://bb-developer-v1.web.app/_nuxt/img/visa-card-logo.6a56d8c.svg"
|
|
70
|
+
alt="visa-card"
|
|
71
|
+
/>
|
|
52
72
|
</div>
|
|
53
73
|
</div>
|
|
54
74
|
<!-- card footer end -->
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
interface Props {
|
|
3
|
+
modifierClasses?: string;
|
|
4
|
+
label?: boolean;
|
|
5
|
+
horizontal?: boolean;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
withDefaults(defineProps<Props>(), {
|
|
9
|
+
modifierClasses: "",
|
|
10
|
+
label: false,
|
|
11
|
+
horizontal: false,
|
|
12
|
+
});
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<template>
|
|
16
|
+
<div class="divider" :class="[horizontal ? 'is-horizontal' : '', modifierClasses]">
|
|
17
|
+
<span v-if="label">OR</span>
|
|
18
|
+
</div>
|
|
19
|
+
</template>
|
|
20
|
+
<style lang="scss">
|
|
21
|
+
.divider {
|
|
22
|
+
height: 1px;
|
|
23
|
+
width: 100%;
|
|
24
|
+
background-color: $color-border;
|
|
25
|
+
margin: 16px 0;
|
|
26
|
+
position: relative;
|
|
27
|
+
&.is-horizontal {
|
|
28
|
+
width: 1px;
|
|
29
|
+
min-height: 32px;
|
|
30
|
+
margin: 0 16px;
|
|
31
|
+
span {
|
|
32
|
+
top: 50%;
|
|
33
|
+
margin-top: -8px;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
span {
|
|
37
|
+
position: absolute;
|
|
38
|
+
right: 50%;
|
|
39
|
+
margin-right: -16px;
|
|
40
|
+
background: $white-100;
|
|
41
|
+
top: -10px;
|
|
42
|
+
padding-inline: 8px;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
</style>
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
interface Props {
|
|
3
|
+
modifierClasses?: string;
|
|
4
|
+
name: string;
|
|
5
|
+
label?: string;
|
|
6
|
+
type?: string;
|
|
7
|
+
check?: boolean;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
withDefaults(defineProps<Props>(), {
|
|
11
|
+
modifierClasses: "",
|
|
12
|
+
name: "checkbox",
|
|
13
|
+
label: "Checkbox",
|
|
14
|
+
type: "checkbox",
|
|
15
|
+
check: false,
|
|
16
|
+
});
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<template>
|
|
20
|
+
<div class="field">
|
|
21
|
+
<input
|
|
22
|
+
class="is-checkradio"
|
|
23
|
+
:class="[type === 'checkbox' ? 'has-background-color' : '', modifierClasses]"
|
|
24
|
+
:id="name"
|
|
25
|
+
:type="type"
|
|
26
|
+
:name="name"
|
|
27
|
+
:checked="check"
|
|
28
|
+
/>
|
|
29
|
+
<label :for="name">{{ label }}</label>
|
|
30
|
+
</div>
|
|
31
|
+
</template>
|
|
32
|
+
|
|
33
|
+
<style lang="scss">
|
|
34
|
+
.is-checkradio[type="checkbox"].is-primary:checked.has-background-color + label::before,
|
|
35
|
+
.is-checkradio[type="checkbox"].is-primary:checked.has-background-color + label:before,
|
|
36
|
+
.is-checkradio[type="checkbox"].is-primary:checked.has-background-color + label::after,
|
|
37
|
+
.is-checkradio[type="checkbox"].is-primary:checked.has-background-color + label:after {
|
|
38
|
+
background-color: $ac-primary !important;
|
|
39
|
+
}
|
|
40
|
+
</style>
|
|
@@ -12,10 +12,12 @@ withDefaults(defineProps<Props>(), {
|
|
|
12
12
|
<div class="thumbnail">
|
|
13
13
|
<slot name="thumbnail" />
|
|
14
14
|
</div>
|
|
15
|
-
<
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
<div class="is-flex is-align-items-center gap-4">
|
|
16
|
+
<span>
|
|
17
|
+
{{ message }}
|
|
18
|
+
</span>
|
|
18
19
|
|
|
19
|
-
|
|
20
|
+
<slot name="details" />
|
|
21
|
+
</div>
|
|
20
22
|
</div>
|
|
21
23
|
</template>
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
interface Props {
|
|
3
|
+
modifierClasses?: string;
|
|
4
|
+
height?: string;
|
|
5
|
+
width?: string;
|
|
6
|
+
rounded?: boolean;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
withDefaults(defineProps<Props>(), {
|
|
10
|
+
modifierClasses: "",
|
|
11
|
+
height: "16px",
|
|
12
|
+
width: "100%",
|
|
13
|
+
rounded: false,
|
|
14
|
+
});
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<template>
|
|
18
|
+
<div class="skeleton" :class="[rounded ? 'is-rounded' : '', modifierClasses]"></div>
|
|
19
|
+
</template>
|
|
20
|
+
|
|
21
|
+
<style lang="scss">
|
|
22
|
+
.skeletons {
|
|
23
|
+
display: flex;
|
|
24
|
+
flex-direction: column;
|
|
25
|
+
gap: 8px;
|
|
26
|
+
}
|
|
27
|
+
.skeleton {
|
|
28
|
+
background: linear-gradient(90deg, $secondary-95 25%, $secondary-90 50%, $secondary-95 75%);
|
|
29
|
+
background-size: 200% 100%;
|
|
30
|
+
animation: loading 2s infinite ease-in-out;
|
|
31
|
+
border-radius: 4px;
|
|
32
|
+
display: flex;
|
|
33
|
+
height: v-bind(height);
|
|
34
|
+
width: v-bind(width);
|
|
35
|
+
&.is-rounded {
|
|
36
|
+
border-radius: 50%;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
@keyframes loading {
|
|
40
|
+
0% {
|
|
41
|
+
background-position: 200% 0;
|
|
42
|
+
}
|
|
43
|
+
100% {
|
|
44
|
+
background-position: -200% 0;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
</style>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
interface Props {
|
|
3
|
+
modifierClasses?: string;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
withDefaults(defineProps<Props>(), {
|
|
7
|
+
modifierClasses: "",
|
|
8
|
+
});
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<template>
|
|
12
|
+
<div class="skeletons" :class="modifierClasses">
|
|
13
|
+
<slot></slot>
|
|
14
|
+
</div>
|
|
15
|
+
</template>
|
|
@@ -1,5 +1,15 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
interface Props {
|
|
3
|
+
modifierClasses?: string;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
withDefaults(defineProps<Props>(), {
|
|
7
|
+
modifierClasses: "",
|
|
8
|
+
});
|
|
9
|
+
</script>
|
|
10
|
+
|
|
1
11
|
<template>
|
|
2
|
-
<div class="colored-steps">
|
|
12
|
+
<div class="colored-steps" :class="modifierClasses">
|
|
3
13
|
<ol class="steps">
|
|
4
14
|
<li class="step">
|
|
5
15
|
<div class="step-header bg-primary"></div>
|
|
@@ -24,30 +24,3 @@ onMounted(() => {
|
|
|
24
24
|
<slot />
|
|
25
25
|
</div>
|
|
26
26
|
</template>
|
|
27
|
-
|
|
28
|
-
<style lang="scss">
|
|
29
|
-
.table-container {
|
|
30
|
-
&.ac-table-container {
|
|
31
|
-
&::-webkit-scrollbar {
|
|
32
|
-
height: 7px;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/* Track */
|
|
36
|
-
&::-webkit-scrollbar-track {
|
|
37
|
-
background-color: #d1d4de;
|
|
38
|
-
border-radius: 10px;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/* Handle */
|
|
42
|
-
&::-webkit-scrollbar-thumb {
|
|
43
|
-
background-color: $primary-95;
|
|
44
|
-
border-radius: 10px;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/* Handle on hover */
|
|
48
|
-
&::-webkit-scrollbar-thumb:hover {
|
|
49
|
-
background-color: $primary-95;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
</style>
|