PluginProbe
Hostinger Tools / 3.0.48
Hostinger Tools v3.0.48
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 / Toggle.vue

Toggle.vue in Hostinger Tools 3.0.48, at vue-frontend/src/components/Toggle.vue

228 lines 3.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <script setup lang="ts">
2 import { computed, ref, watch } from "vue";
3
4 interface Props {
5 modelValue: boolean;
6 bind?: boolean;
7 isDisabled?: boolean;
8 }
9
10 type Emits = {
11 "update:modelValue": [value: boolean];
12 click: [];
13 };
14
15 const props = withDefaults(defineProps<Props>(), {
16 bind: true,
17 });
18
19 const emit = defineEmits<Emits>();
20
21 const inputValue = ref(props.modelValue);
22
23 const displayValue = computed(() =>
24 props.bind ? inputValue.value : props.modelValue
25 );
26
27 const onChange = (event: Event) => {
28 inputValue.value = (event.target as HTMLInputElement).checked;
29 emit("update:modelValue", inputValue.value);
30 };
31
32 const onClick = () => {
33 if (!props.bind && !props.isDisabled) {
34 emit("click");
35 }
36 };
37
38 watch(
39 () => props.modelValue,
40 (value) => {
41 inputValue.value = value;
42 }
43 );
44 </script>
45
46 <template>
47 <div class="toggle__element-container">
48 <label
49 class="toggle h-mb-0"
50 :class="{ active: displayValue, 'toggle--disabled': isDisabled }"
51 @click="onClick"
52 >
53 <input
54 type="checkbox"
55 :checked="displayValue"
56 :disabled="!bind || isDisabled"
57 @change="onChange"
58 />
59 <span />
60 </label>
61 </div>
62 </template>
63 <style lang="scss" scoped>
64 $toggle-width: 40px;
65 $toggle-height: 22px;
66 $toggle-border-radius: 1.25em;
67 $toggle-border-size: 1px;
68
69 .toggle {
70 width: $toggle-width;
71 height: $toggle-height;
72 background: var(--gray-border);
73 border: 1px solid var(--gray-border);
74 border-radius: $toggle-border-radius;
75 position: relative;
76 overflow: hidden;
77 transition: all 0.5s;
78 cursor: pointer;
79 display: flex;
80 align-items: center;
81
82 color: var(--grayscale-000-gray-000-38);
83
84 &.active {
85 background: var(--primary);
86 }
87
88 &.toggle > span {
89 width: 20px;
90 height: 20px;
91 transform: translate(0%, 0);
92 border: 0;
93 box-shadow: var(--shadow);
94 opacity: 1;
95 }
96
97 input {
98 margin-left: -999px;
99 height: 0;
100 width: 0;
101 overflow: hidden;
102 position: absolute;
103 opacity: 0;
104 }
105
106 input:empty ~ span &--on {
107 display: none;
108 }
109
110 input:empty ~ span &--off {
111 display: inline;
112 }
113
114 input:checked ~ span {
115 opacity: 1;
116 background: var(--light);
117 transform: translate(100%, 0);
118 }
119
120 input:checked ~ span > &--on {
121 display: inline;
122 }
123
124 input:checked ~ span &--off {
125 display: none;
126 }
127
128 > span {
129 width: $toggle-height;
130 height: $toggle-height;
131 opacity: 0.4;
132 display: inline-flex;
133 align-items: center;
134 justify-content: center;
135 border: 1px solid var(--gray-light);
136 border-radius: 50%;
137 transform: translate(0, 0);
138 margin: -1px;
139 transition: all 0.15s;
140 overflow: hidden;
141
142 background: var(--light);
143 }
144
145 &--disabled {
146 opacity: 0.38;
147 pointer-events: none;
148 }
149
150 &--disabled,
151 &--unavailable {
152 color: var(--gray-border);
153 }
154 }
155
156 .toggle--primary {
157 color: var(--primary);
158 }
159
160 .toggle--secondary {
161 color: var(--secondary);
162 }
163
164 .toggle--success {
165 color: var(--success);
166 }
167
168 .toggle--info {
169 color: var(--primary-hostinger);
170 }
171
172 .toggle--warning {
173 color: var(--warning);
174 }
175
176 .toggle--warning-regular {
177 color: var(--warning-regular);
178 }
179
180 .toggle--danger {
181 color: var(--danger);
182 }
183
184 .toggle--light {
185 color: var(--light);
186 }
187
188 .toggle--dark {
189 color: var(--dark);
190 }
191
192 .toggle--black {
193 color: var(--dark);
194 }
195
196 .toggle--gray {
197 color: var(--gray);
198 }
199
200 .toggle--gray-light {
201 color: var(--gray-light);
202 }
203
204 .toggle--header-bg {
205 color: var(--header-bg);
206 }
207
208 .toggle--danger-light {
209 color: var(--danger-light);
210 }
211
212 .toggle--success-dark {
213 color: var(--success-dark);
214 }
215
216 .toggle--success-light {
217 color: var(--success-light);
218 }
219
220 .toggle--warning-light {
221 color: var(--warning-light);
222 }
223
224 .toggle--warning-dark {
225 color: var(--warning-dark);
226 }
227 </style>
228