edvoyui-component-library-test-flight 0.0.168 → 0.0.170
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 +10 -3
- package/src/App.vue +0 -16
- package/src/assets/svg/CheckTick.vue +0 -21
- package/src/assets/svg/ChevronBigDown.vue +0 -22
- package/src/assets/svg/ChevronDownSolid.vue +0 -19
- package/src/assets/svg/ChevronDownStroke.vue +0 -22
- package/src/assets/svg/ChevronDownStrokeSolid.vue +0 -19
- package/src/assets/svg/SearchBigZoomIn.vue +0 -21
- package/src/assets/svg/SortArrow.vue +0 -24
- package/src/assets/svg/Student.vue +0 -30
- package/src/assets/svg/partner.vue +0 -33
- package/src/assets/svg/people.vue +0 -25
- package/src/components/HelloWorld.vue +0 -1974
- package/src/components/accordion/EUIAccordion.vue +0 -152
- package/src/components/alerts/EUIAlerts.vue +0 -194
- package/src/components/avatar/EUIAvatar.vue +0 -96
- package/src/components/breadcrumb/EUIBreadcrumb.vue +0 -59
- package/src/components/button/EUIButton.vue +0 -154
- package/src/components/button/EUIButtonGroup.vue +0 -287
- package/src/components/button/buttonAnimateTab.vue +0 -74
- package/src/components/checkbox/EUICheckbox.vue +0 -110
- package/src/components/datepicker/EUIDatepicker.vue +0 -295
- package/src/components/delete.vue +0 -262
- package/src/components/dragModal/EUIDrag.vue +0 -179
- package/src/components/dropdown/EUIMultiDropdown.vue +0 -174
- package/src/components/errorMessage/EUIErrorMessage.vue +0 -25
- package/src/components/input/EUIInput.vue +0 -223
- package/src/components/input/EUINumberInput.vue +0 -250
- package/src/components/loader/EUICircleLoader.vue +0 -31
- package/src/components/loader/EUICubeLoader.vue +0 -237
- package/src/components/loader/EUILoader.vue +0 -17
- package/src/components/loader/EUISquareLoader.vue +0 -47
- package/src/components/modal/EUIModal.vue +0 -224
- package/src/components/pillSelect/EUIPillSelect.vue +0 -149
- package/src/components/popover/EUIPopover.vue +0 -297
- package/src/components/radio/EUIRadio.vue +0 -75
- package/src/components/searchInput/EUISearch.vue +0 -223
- package/src/components/searchTagSelect/EUISearchTagSelect.vue +0 -642
- package/src/components/searchTagSelect/SearchInput.vue +0 -167
- package/src/components/searchexpand/EUISearchExpand.vue +0 -148
- package/src/components/searchexpand/EUISearchToggle.vue +0 -86
- package/src/components/select/EUISelect.vue +0 -1092
- package/src/components/selectSearch/EUISelectSearch.vue +0 -23
- package/src/components/slideover/EUISlideover.vue +0 -207
- package/src/components/stepperTimeline/EUIStepperHorizontal.vue +0 -242
- package/src/components/stepperTimeline/EUIStepperTimeline.vue +0 -16
- package/src/components/stepperTimeline/EUIStepperVertical.vue +0 -112
- package/src/components/table/ColumnResizeTable.vue +0 -740
- package/src/components/table/EUIDashboardTable.vue +0 -514
- package/src/components/table/EUIPageLimit.vue +0 -66
- package/src/components/table/EUIPagination.vue +0 -175
- package/src/components/table/EUIStudentPagination.vue +0 -172
- package/src/components/table/EUITable.vue +0 -559
- package/src/components/table/EUITableCheckbox.vue +0 -98
- package/src/components/table/GrowthTable.vue +0 -575
- package/src/components/table/GrowthTableView.vue +0 -108
- package/src/components/table/ResizeTableview.vue +0 -198
- package/src/components/table/UCheckbox.vue +0 -169
- package/src/components/table/UTable.vue +0 -611
- package/src/components/table/UTableview.vue +0 -189
- package/src/components/tabs/EUITabOutline.vue +0 -263
- package/src/components/tabs/EUITabs.vue +0 -226
- package/src/components/tag/EUITag.vue +0 -88
- package/src/components/telephone/EUITelephone.vue +0 -299
- package/src/components/textArea/EUITextArea.vue +0 -155
- package/src/components/timeLine/EUITimeLine.vue +0 -148
- package/src/components/toggle/EUIToggle.vue +0 -101
- package/src/components/tooltip/EUITooltip.vue +0 -111
- package/src/components/uidemo/select-com.vue +0 -120
|
@@ -1,250 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div>
|
|
3
|
-
<label
|
|
4
|
-
v-if="!inputFilled && label"
|
|
5
|
-
:for="`${name}-${id}`"
|
|
6
|
-
:class="[
|
|
7
|
-
'text-xs w-full text-gray-500 cursor-pointer font-medium',
|
|
8
|
-
required && `after:content-['*'] after:ml-0.5 after:text-red-500`,
|
|
9
|
-
]"
|
|
10
|
-
>
|
|
11
|
-
{{ label }}
|
|
12
|
-
</label>
|
|
13
|
-
<div
|
|
14
|
-
:class="[
|
|
15
|
-
'relative',
|
|
16
|
-
{ 'pointer-events-none cursor-not-allowed': disabled },
|
|
17
|
-
{
|
|
18
|
-
'h-14 rounded-2xl focus-within:border-purple-600 focus-within:ring-1 focus-within:ring-purple-600 border border-gray-200':
|
|
19
|
-
inputFilled,
|
|
20
|
-
},
|
|
21
|
-
'group cursor-pointer relative w-full mb-2 overflow-hidden',
|
|
22
|
-
]"
|
|
23
|
-
>
|
|
24
|
-
<label
|
|
25
|
-
v-if="inputFilled"
|
|
26
|
-
:for="`${name}-${id}`"
|
|
27
|
-
:class="[
|
|
28
|
-
getIconClass(),
|
|
29
|
-
inputValue
|
|
30
|
-
? 'top-3.5 text-xs text-gray-400 leading-none cursor-default'
|
|
31
|
-
: 'top-1/2 text-sm w-full text-gray-700 cursor-pointer h-14 pt-5 pb-4',
|
|
32
|
-
disabled ? 'cursor-not-allowed bg-gray-50 z-10' : 'z-0 bg-white',
|
|
33
|
-
required && `after:content-['*'] after:ml-0.5 after:text-red-500`,
|
|
34
|
-
'absolute font-medium left-0 px-4 -translate-y-1/2 duration-300 group-focus-within:top-3.5 group-focus-within:text-xs group-focus-within:text-gray-400 rounded-2xl group-focus-within:bg-transparent group-focus-within:-translate-y-1/2 group-focus-within:ring-transparent group-focus-within:h-auto group-focus-within:py-0 first-letter:capitalize transition-all ease-in-out',
|
|
35
|
-
]"
|
|
36
|
-
>
|
|
37
|
-
{{ label || "Label" }}
|
|
38
|
-
</label>
|
|
39
|
-
<div
|
|
40
|
-
v-if="icon && iconType"
|
|
41
|
-
:class="[
|
|
42
|
-
'absolute inset-y-0 flex items-center pointer-events-none',
|
|
43
|
-
iconType === 'startIcon' ? 'left-0 pl-3' : 'right-0 pr-3',
|
|
44
|
-
disabled ? 'z-20' : '',
|
|
45
|
-
]"
|
|
46
|
-
>
|
|
47
|
-
<component :is="icon" class="text-gray-400 size-6" aria-hidden="true" />
|
|
48
|
-
</div>
|
|
49
|
-
<input
|
|
50
|
-
:id="`${name}-${id}`"
|
|
51
|
-
ref="input"
|
|
52
|
-
type="number"
|
|
53
|
-
:value="modelValue"
|
|
54
|
-
:min="min"
|
|
55
|
-
:max="max"
|
|
56
|
-
:step="step || 1"
|
|
57
|
-
:placeholder="placeholder"
|
|
58
|
-
:name="name"
|
|
59
|
-
:class="[
|
|
60
|
-
'z-10 block placeholder:text-gray-400 focus:outline-none text-sm font-medium appearance-none disabled:opacity-75 autofill:bg-white leading-6 transition-all duration-100 border-none outline-none',
|
|
61
|
-
inputFilled
|
|
62
|
-
? 'pt-6 pb-3 rounded-2xl size-full'
|
|
63
|
-
: 'py-3 h-10 w-full ring-1 ring-gray-200 focus-within:ring-purple-600 focus-within:ring-2 ring-inset',
|
|
64
|
-
!inputFilled && rounded ? 'rounded-2xl' : 'rounded-md',
|
|
65
|
-
disabled ? 'cursor-not-allowed' : 'cursor-text',
|
|
66
|
-
getIconClass(),
|
|
67
|
-
!inputFilled && className,
|
|
68
|
-
'pr-8',
|
|
69
|
-
]"
|
|
70
|
-
:required="required"
|
|
71
|
-
:disabled="disabled"
|
|
72
|
-
:readonly="readonly"
|
|
73
|
-
autocomplete="off"
|
|
74
|
-
inputmode="numeric"
|
|
75
|
-
pattern="^([0-9]{1,5}(\.[0-9]{1,2})?|100000(\.0{1,2})?)$"
|
|
76
|
-
@keypress="handleKeyPress"
|
|
77
|
-
@wheel.prevent=""
|
|
78
|
-
@keydown.up.prevent=""
|
|
79
|
-
@keydown.down.prevent=""
|
|
80
|
-
@input="emitInput"
|
|
81
|
-
@focus="hasFocus = true"
|
|
82
|
-
@blur="hasFocus = false"
|
|
83
|
-
/>
|
|
84
|
-
</div>
|
|
85
|
-
<template v-if="errors && Object.keys(errors).length">
|
|
86
|
-
<EUIErrorMessage :errors="errors" :name="name" />
|
|
87
|
-
</template>
|
|
88
|
-
</div>
|
|
89
|
-
</template>
|
|
90
|
-
|
|
91
|
-
<script lang="ts" setup>
|
|
92
|
-
import EUIErrorMessage from "../errorMessage/EUIErrorMessage.vue";
|
|
93
|
-
import {
|
|
94
|
-
defineProps,
|
|
95
|
-
defineEmits,
|
|
96
|
-
computed,
|
|
97
|
-
PropType,
|
|
98
|
-
ref,
|
|
99
|
-
onMounted,
|
|
100
|
-
} from "vue";
|
|
101
|
-
|
|
102
|
-
const props = defineProps({
|
|
103
|
-
errors: { type: Object, required: false, default: () => {} },
|
|
104
|
-
modelValue: {
|
|
105
|
-
type: [String, Number],
|
|
106
|
-
default: "",
|
|
107
|
-
},
|
|
108
|
-
name: {
|
|
109
|
-
type: String,
|
|
110
|
-
required: false,
|
|
111
|
-
default: "",
|
|
112
|
-
},
|
|
113
|
-
label: {
|
|
114
|
-
type: String,
|
|
115
|
-
required: true,
|
|
116
|
-
default: "",
|
|
117
|
-
},
|
|
118
|
-
autoFocus: {
|
|
119
|
-
type: Boolean,
|
|
120
|
-
required: false,
|
|
121
|
-
default: false,
|
|
122
|
-
},
|
|
123
|
-
placeholder: {
|
|
124
|
-
type: String,
|
|
125
|
-
required: false,
|
|
126
|
-
default: "",
|
|
127
|
-
},
|
|
128
|
-
iconType: {
|
|
129
|
-
type: String as PropType<"startIcon" | "endIcon">,
|
|
130
|
-
default: "",
|
|
131
|
-
},
|
|
132
|
-
icon: {
|
|
133
|
-
type: [Object, String],
|
|
134
|
-
default: "",
|
|
135
|
-
},
|
|
136
|
-
disabled: {
|
|
137
|
-
type: Boolean,
|
|
138
|
-
default: false,
|
|
139
|
-
},
|
|
140
|
-
required: {
|
|
141
|
-
type: Boolean,
|
|
142
|
-
default: false,
|
|
143
|
-
},
|
|
144
|
-
readonly: {
|
|
145
|
-
type: Boolean,
|
|
146
|
-
default: false,
|
|
147
|
-
},
|
|
148
|
-
inputFilled: {
|
|
149
|
-
type: Boolean,
|
|
150
|
-
default: false,
|
|
151
|
-
},
|
|
152
|
-
rounded: Boolean,
|
|
153
|
-
className: {
|
|
154
|
-
type: Array as PropType<string[]>,
|
|
155
|
-
required: false,
|
|
156
|
-
default: () => [],
|
|
157
|
-
},
|
|
158
|
-
min: {
|
|
159
|
-
type: Number,
|
|
160
|
-
default: 0,
|
|
161
|
-
required: true,
|
|
162
|
-
},
|
|
163
|
-
max: {
|
|
164
|
-
type: Number,
|
|
165
|
-
default: 100,
|
|
166
|
-
required: true,
|
|
167
|
-
},
|
|
168
|
-
step: {
|
|
169
|
-
type: Number,
|
|
170
|
-
default: 1,
|
|
171
|
-
required: true,
|
|
172
|
-
},
|
|
173
|
-
});
|
|
174
|
-
|
|
175
|
-
const hasFocus = ref(false);
|
|
176
|
-
const input = ref<HTMLInputElement>();
|
|
177
|
-
|
|
178
|
-
const id = "id"; //generateUID();
|
|
179
|
-
|
|
180
|
-
const emit = defineEmits(["update:modelValue"]);
|
|
181
|
-
|
|
182
|
-
const emitInput = (event: Event) => {
|
|
183
|
-
const inputEl = event.target as HTMLInputElement;
|
|
184
|
-
const newValue = parseFloat(inputEl.value);
|
|
185
|
-
|
|
186
|
-
// Only emit valid numbers within range
|
|
187
|
-
if (!isNaN(newValue)) {
|
|
188
|
-
if (newValue >= props.min && newValue <= props.max) {
|
|
189
|
-
emit("update:modelValue", newValue);
|
|
190
|
-
} else if (newValue > props.max) {
|
|
191
|
-
emit("update:modelValue", props.max);
|
|
192
|
-
inputEl.value = String(props.max);
|
|
193
|
-
} else if (newValue < props.min) {
|
|
194
|
-
emit("update:modelValue", props.min);
|
|
195
|
-
inputEl.value = String(props.min);
|
|
196
|
-
}
|
|
197
|
-
} else {
|
|
198
|
-
emit("update:modelValue", props.min);
|
|
199
|
-
inputEl.value = String(props.min);
|
|
200
|
-
}
|
|
201
|
-
};
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
const handleKeyPress = (e: KeyboardEvent) => {
|
|
205
|
-
const inputEl = e.target as HTMLInputElement | null;
|
|
206
|
-
if (!inputEl) return; // Safety check
|
|
207
|
-
const allowDecimal = props.step < 1;
|
|
208
|
-
// Allow digits
|
|
209
|
-
if (/[0-9]/.test(e.key)) return;
|
|
210
|
-
// Allow one '.' only if step < 1
|
|
211
|
-
if (allowDecimal && e.key === '.' && !inputEl.value.includes('.')) return;
|
|
212
|
-
// Otherwise block input
|
|
213
|
-
e.preventDefault();
|
|
214
|
-
};
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
const inputValue = computed(() => {
|
|
218
|
-
return props.modelValue === 0 ? true : !!props.modelValue;
|
|
219
|
-
});
|
|
220
|
-
|
|
221
|
-
const getIconClass = () => {
|
|
222
|
-
switch (props.iconType) {
|
|
223
|
-
case "startIcon":
|
|
224
|
-
return "pl-12 pr-4";
|
|
225
|
-
case "endIcon":
|
|
226
|
-
return "pr-12 pl-4";
|
|
227
|
-
default:
|
|
228
|
-
return "px-4";
|
|
229
|
-
}
|
|
230
|
-
};
|
|
231
|
-
|
|
232
|
-
onMounted(() => {
|
|
233
|
-
if (props?.autoFocus) {
|
|
234
|
-
input?.value?.focus();
|
|
235
|
-
}
|
|
236
|
-
});
|
|
237
|
-
</script>
|
|
238
|
-
|
|
239
|
-
<style lang="scss" scoped>
|
|
240
|
-
/* Chrome, Safari, Edge, Opera */
|
|
241
|
-
input::-webkit-outer-spin-button,
|
|
242
|
-
input::-webkit-inner-spin-button {
|
|
243
|
-
-webkit-appearance: none;
|
|
244
|
-
margin: 0;
|
|
245
|
-
}
|
|
246
|
-
/* Firefox */
|
|
247
|
-
input[type="number"] {
|
|
248
|
-
-moz-appearance: textfield;
|
|
249
|
-
}
|
|
250
|
-
</style>
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="flex flex-col items-center justify-center gap-4 mx-auto size-72">
|
|
3
|
-
<div class="relative min-h-16">
|
|
4
|
-
<div class="circle-loader">
|
|
5
|
-
</div>
|
|
6
|
-
</div>
|
|
7
|
-
</div>
|
|
8
|
-
</template>
|
|
9
|
-
|
|
10
|
-
<script setup lang="ts">
|
|
11
|
-
|
|
12
|
-
</script>
|
|
13
|
-
|
|
14
|
-
<style lang="scss" scoped>
|
|
15
|
-
.circle-loader {
|
|
16
|
-
@apply box-border size-16 rounded-full relative transform rotate-45 border-[0.8rem] border-solid border-violet-500/25;
|
|
17
|
-
&::before {
|
|
18
|
-
content: "";
|
|
19
|
-
@apply absolute box-border -inset-3 rounded-full border-[0.8rem] border-solid border-violet-600;
|
|
20
|
-
animation: circleProgress 1s infinite linear;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
@keyframes circleProgress {
|
|
25
|
-
0% {clip-path:polygon(50% 50%,0 0,0 0,0 0,0 0,0 0)}
|
|
26
|
-
25% {clip-path:polygon(50% 50%,0 0,100% 0,100% 0,100% 0,100% 0)}
|
|
27
|
-
50% {clip-path:polygon(50% 50%,0 0,100% 0,100% 100%,100% 100%,100% 100%)}
|
|
28
|
-
75% {clip-path:polygon(50% 50%,0 0,100% 0,100% 100%,0 100%,0 100%)}
|
|
29
|
-
100% {clip-path:polygon(50% 50%,0 0,100% 0,100% 100%,0 100%,0 0)}
|
|
30
|
-
}
|
|
31
|
-
</style>
|
|
@@ -1,237 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="flex flex-col items-center justify-center gap-4 size-72 mx-auto">
|
|
3
|
-
<div class="min-h-16 relative">
|
|
4
|
-
<div class="cube">
|
|
5
|
-
<div class="sides">
|
|
6
|
-
<div class="top"></div>
|
|
7
|
-
<div class="right"></div>
|
|
8
|
-
<div class="bottom"></div>
|
|
9
|
-
<div class="left"></div>
|
|
10
|
-
<div class="front"></div>
|
|
11
|
-
<div class="back"></div>
|
|
12
|
-
</div>
|
|
13
|
-
</div>
|
|
14
|
-
</div>
|
|
15
|
-
</div>
|
|
16
|
-
</template>
|
|
17
|
-
|
|
18
|
-
<script setup lang="ts">
|
|
19
|
-
|
|
20
|
-
</script>
|
|
21
|
-
|
|
22
|
-
<style lang="scss">
|
|
23
|
-
:root {
|
|
24
|
-
--cube-side: 2.75rem;
|
|
25
|
-
--cube-side-half: calc(var(--cube-side) / 2);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
@keyframes rotate {
|
|
29
|
-
0% {
|
|
30
|
-
transform: rotateX(-37.5deg) rotateY(45deg);
|
|
31
|
-
}
|
|
32
|
-
50% {
|
|
33
|
-
transform: rotateX(-37.5deg) rotateY(405deg);
|
|
34
|
-
}
|
|
35
|
-
100% {
|
|
36
|
-
transform: rotateX(-37.5deg) rotateY(405deg);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
.cube, .cube * {
|
|
41
|
-
@apply size-[2.75rem] absolute top-1 left-[-0.4rem];
|
|
42
|
-
}
|
|
43
|
-
.sides {
|
|
44
|
-
animation: rotate 3s ease infinite;
|
|
45
|
-
animation-delay: 0.8s;
|
|
46
|
-
transform-style: preserve-3d;
|
|
47
|
-
transform: rotateX(-37.5deg) rotateY(45deg);
|
|
48
|
-
}
|
|
49
|
-
.cube .sides * {
|
|
50
|
-
@apply box-border bg-violet-600 border border-solid border-white;
|
|
51
|
-
}
|
|
52
|
-
.cube .sides .top {
|
|
53
|
-
animation: top-animation 3s ease infinite;
|
|
54
|
-
animation-delay: 0ms;
|
|
55
|
-
transform: rotateX(90deg) translateZ(var(--cube-side));
|
|
56
|
-
animation-fill-mode: forwards;
|
|
57
|
-
transform-origin: 50% 50%;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
@keyframes top-animation {
|
|
61
|
-
0% {
|
|
62
|
-
opacity: 1;
|
|
63
|
-
transform: rotateX(90deg) translateZ(var(--cube-side));
|
|
64
|
-
}
|
|
65
|
-
20% {
|
|
66
|
-
opacity: 1;
|
|
67
|
-
transform: rotateX(90deg) translateZ(var(--cube-side-half));
|
|
68
|
-
}
|
|
69
|
-
70% {
|
|
70
|
-
opacity: 1;
|
|
71
|
-
transform: rotateX(90deg) translateZ(var(--cube-side-half));
|
|
72
|
-
}
|
|
73
|
-
90% {
|
|
74
|
-
opacity: 1;
|
|
75
|
-
transform: rotateX(90deg) translateZ(var(--cube-side));
|
|
76
|
-
}
|
|
77
|
-
100% {
|
|
78
|
-
opacity: 1;
|
|
79
|
-
transform: rotateX(90deg) translateZ(var(--cube-side));
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
.cube .sides .bottom {
|
|
84
|
-
animation: bottom-animation 3s ease infinite;
|
|
85
|
-
animation-delay: 0ms;
|
|
86
|
-
transform: rotateX(-90deg) translateZ(var(--cube-side));
|
|
87
|
-
animation-fill-mode: forwards;
|
|
88
|
-
transform-origin: 50% 50%;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
@keyframes bottom-animation {
|
|
92
|
-
0% {
|
|
93
|
-
opacity: 1;
|
|
94
|
-
transform: rotateX(-90deg) translateZ(var(--cube-side));
|
|
95
|
-
}
|
|
96
|
-
20% {
|
|
97
|
-
opacity: 1;
|
|
98
|
-
transform: rotateX(-90deg) translateZ(var(--cube-side-half));
|
|
99
|
-
}
|
|
100
|
-
70% {
|
|
101
|
-
opacity: 1;
|
|
102
|
-
transform: rotateX(-90deg) translateZ(var(--cube-side-half));
|
|
103
|
-
}
|
|
104
|
-
90% {
|
|
105
|
-
opacity: 1;
|
|
106
|
-
transform: rotateX(-90deg) translateZ(var(--cube-side));
|
|
107
|
-
}
|
|
108
|
-
100% {
|
|
109
|
-
opacity: 1;
|
|
110
|
-
transform: rotateX(-90deg) translateZ(var(--cube-side));
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
.cube .sides .front {
|
|
115
|
-
animation: front-animation 3s ease infinite;
|
|
116
|
-
animation-delay: 100ms;
|
|
117
|
-
transform: rotateY(0deg) translateZ(var(--cube-side));
|
|
118
|
-
animation-fill-mode: forwards;
|
|
119
|
-
transform-origin: 50% 50%;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
@keyframes front-animation {
|
|
123
|
-
0% {
|
|
124
|
-
opacity: 1;
|
|
125
|
-
transform: rotateY(0deg) translateZ(var(--cube-side));
|
|
126
|
-
}
|
|
127
|
-
20% {
|
|
128
|
-
opacity: 1;
|
|
129
|
-
transform: rotateY(0deg) translateZ(var(--cube-side-half));
|
|
130
|
-
}
|
|
131
|
-
70% {
|
|
132
|
-
opacity: 1;
|
|
133
|
-
transform: rotateY(0deg) translateZ(var(--cube-side-half));
|
|
134
|
-
}
|
|
135
|
-
90% {
|
|
136
|
-
opacity: 1;
|
|
137
|
-
transform: rotateY(0deg) translateZ(var(--cube-side));
|
|
138
|
-
}
|
|
139
|
-
100% {
|
|
140
|
-
opacity: 1;
|
|
141
|
-
transform: rotateY(0deg) translateZ(var(--cube-side));
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
.cube .sides .back {
|
|
146
|
-
animation: back-animation 3s ease infinite;
|
|
147
|
-
animation-delay: 100ms;
|
|
148
|
-
transform: rotateY(-180deg) translateZ(var(--cube-side));
|
|
149
|
-
animation-fill-mode: forwards;
|
|
150
|
-
transform-origin: 50% 50%;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
@keyframes back-animation {
|
|
154
|
-
0% {
|
|
155
|
-
opacity: 1;
|
|
156
|
-
transform: rotateY(-180deg) translateZ(var(--cube-side));
|
|
157
|
-
}
|
|
158
|
-
20% {
|
|
159
|
-
opacity: 1;
|
|
160
|
-
transform: rotateY(-180deg) translateZ(var(--cube-side-half));
|
|
161
|
-
}
|
|
162
|
-
70% {
|
|
163
|
-
opacity: 1;
|
|
164
|
-
transform: rotateY(-180deg) translateZ(var(--cube-side-half));
|
|
165
|
-
}
|
|
166
|
-
90% {
|
|
167
|
-
opacity: 1;
|
|
168
|
-
transform: rotateY(-180deg) translateZ(var(--cube-side));
|
|
169
|
-
}
|
|
170
|
-
100% {
|
|
171
|
-
opacity: 1;
|
|
172
|
-
transform: rotateY(-180deg) translateZ(var(--cube-side));
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
.cube .sides .left {
|
|
177
|
-
animation: left-animation 3s ease infinite;
|
|
178
|
-
animation-delay: 100ms;
|
|
179
|
-
transform: rotateY(-90deg) translateZ(var(--cube-side));
|
|
180
|
-
animation-fill-mode: forwards;
|
|
181
|
-
transform-origin: 50% 50%;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
@keyframes left-animation {
|
|
185
|
-
0% {
|
|
186
|
-
opacity: 1;
|
|
187
|
-
transform: rotateY(-90deg) translateZ(var(--cube-side));
|
|
188
|
-
}
|
|
189
|
-
20% {
|
|
190
|
-
opacity: 1;
|
|
191
|
-
transform: rotateY(-90deg) translateZ(var(--cube-side-half));
|
|
192
|
-
}
|
|
193
|
-
70% {
|
|
194
|
-
opacity: 1;
|
|
195
|
-
transform: rotateY(-90deg) translateZ(var(--cube-side-half));
|
|
196
|
-
}
|
|
197
|
-
90% {
|
|
198
|
-
opacity: 1;
|
|
199
|
-
transform: rotateY(-90deg) translateZ(var(--cube-side));
|
|
200
|
-
}
|
|
201
|
-
100% {
|
|
202
|
-
opacity: 1;
|
|
203
|
-
transform: rotateY(-90deg) translateZ(var(--cube-side));
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
.cube .sides .right {
|
|
208
|
-
animation: right-animation 3s ease infinite;
|
|
209
|
-
animation-delay: 100ms;
|
|
210
|
-
transform: rotateY(90deg) translateZ(var(--cube-side));
|
|
211
|
-
animation-fill-mode: forwards;
|
|
212
|
-
transform-origin: 50% 50%;
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
@keyframes right-animation {
|
|
216
|
-
0% {
|
|
217
|
-
opacity: 1;
|
|
218
|
-
transform: rotateY(90deg) translateZ(var(--cube-side));
|
|
219
|
-
}
|
|
220
|
-
20% {
|
|
221
|
-
opacity: 1;
|
|
222
|
-
transform: rotateY(90deg) translateZ(var(--cube-side-half));
|
|
223
|
-
}
|
|
224
|
-
70% {
|
|
225
|
-
opacity: 1;
|
|
226
|
-
transform: rotateY(90deg) translateZ(var(--cube-side-half));
|
|
227
|
-
}
|
|
228
|
-
90% {
|
|
229
|
-
opacity: 1;
|
|
230
|
-
transform: rotateY(90deg) translateZ(var(--cube-side));
|
|
231
|
-
}
|
|
232
|
-
100% {
|
|
233
|
-
opacity: 1;
|
|
234
|
-
transform: rotateY(90deg) translateZ(var(--cube-side));
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
</style>
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
<<template>
|
|
2
|
-
<div class="grid grid-cols-3">
|
|
3
|
-
<EUISquareLoader />
|
|
4
|
-
<EUICircleLoader />
|
|
5
|
-
<EUICubeLoader />
|
|
6
|
-
</div>
|
|
7
|
-
</template>
|
|
8
|
-
|
|
9
|
-
<script setup lang="ts">
|
|
10
|
-
import EUICircleLoader from './EUICircleLoader.vue';
|
|
11
|
-
import EUICubeLoader from './EUICubeLoader.vue';
|
|
12
|
-
import EUISquareLoader from './EUISquareLoader.vue';
|
|
13
|
-
</script>
|
|
14
|
-
|
|
15
|
-
<style scoped>
|
|
16
|
-
|
|
17
|
-
</style>
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="flex flex-col items-center justify-center gap-4 size-72 mx-auto">
|
|
3
|
-
<div class="min-h-16 relative">
|
|
4
|
-
<div class="square-loader">
|
|
5
|
-
</div>
|
|
6
|
-
</div>
|
|
7
|
-
</div>
|
|
8
|
-
</template>
|
|
9
|
-
|
|
10
|
-
<script setup lang="ts">
|
|
11
|
-
|
|
12
|
-
</script>
|
|
13
|
-
|
|
14
|
-
<style lang="scss">
|
|
15
|
-
:root {
|
|
16
|
-
--primary: #705CFF;
|
|
17
|
-
--primary-2: #705CFF60;
|
|
18
|
-
--primary-3: #705CFF30;
|
|
19
|
-
}
|
|
20
|
-
.square-loader {
|
|
21
|
-
--s: 20px;
|
|
22
|
-
--_d: calc(0.353*var(--s));
|
|
23
|
-
width: calc(var(--s) + var(--_d));
|
|
24
|
-
aspect-ratio: 1;
|
|
25
|
-
display: grid;
|
|
26
|
-
&:before,
|
|
27
|
-
&:after {
|
|
28
|
-
content: "";
|
|
29
|
-
grid-area: 1/1;
|
|
30
|
-
clip-path: polygon(var(--_d) 0,100% 0,100% calc(100% - var(--_d)),calc(100% - var(--_d)) 100%,0 100%,0 var(--_d));
|
|
31
|
-
background: conic-gradient(from -90deg at calc(100% - var(--_d)) var(--_d), var(--primary-3) 135deg, var(--primary) 0 270deg, var(--primary-2) 0);
|
|
32
|
-
animation: l6 2s infinite;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
&:after {
|
|
36
|
-
animation-delay:-1s;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
@keyframes l6{
|
|
41
|
-
0% {transform:translate(0,0)}
|
|
42
|
-
25% {transform:translate(30px,0)}
|
|
43
|
-
50% {transform:translate(30px,30px)}
|
|
44
|
-
75% {transform:translate(0,30px)}
|
|
45
|
-
100%{transform:translate(0,0)}
|
|
46
|
-
}
|
|
47
|
-
</style>
|