codecheck
73 строки · 1.4 Кб
1<script setup lang="ts">
2interface Props {
3background?: string;
4color?: string;
5loading?: boolean;
6}
7
8const props = withDefaults(defineProps<Props>(), {
9background: "var(--color-primary)",
10color: "var(--color-text-secondary)",
11loading: true,
12});
13</script>
14
15<template>
16<button
17:style="`background: ${props.background}; color: ${props.color}`"
18class="button"
19>
20<slot v-if="props.loading" />
21<span v-else class="loader"></span>
22</button>
23</template>
24
25<style scoped lang="scss">
26// button {
27// background: none;
28// border: none;
29// cursor: pointer;
30// font-family: inherit; /* 1 */
31// font-size: 100%; /* 1 */
32// line-height: 1.15; /* 1 */
33// margin: 0; /* 2 */
34// }
35.button {
36padding: 0.5rem 0.75rem;
37border-radius: var(--border-radius);
38display: flex;
39justify-content: center;
40width: 100%;
41// background: var(--color-primary);
42color: var(--color-text-secondary);
43// position: relative;
44height: 2rem;
45&:disabled {
46opacity: 0.5;
47cursor: not-allowed;
48}
49}
50
51.loader {
52width: 1rem;
53height: 1rem;
54border-width: 2px;
55border-style: solid;
56// position: absolute;
57// border: 5px solid black;
58border-bottom-color: transparent;
59border-radius: 50%;
60display: inline-block;
61box-sizing: border-box;
62animation: rotation 1s linear infinite;
63}
64
65@keyframes rotation {
660% {
67transform: rotate(0deg);
68}
69100% {
70transform: rotate(360deg);
71}
72}
73</style>
74