@bagelink/vue 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/dist/components/DataPreview.vue.d.ts +3 -19
- package/dist/components/DataPreview.vue.d.ts.map +1 -1
- package/dist/components/FormSchema.vue.d.ts +3 -19
- package/dist/components/FormSchema.vue.d.ts.map +1 -1
- package/dist/components/PersonPreview.vue.d.ts +1 -1
- package/dist/components/PersonPreview.vue.d.ts.map +1 -1
- package/dist/components/formkit/FileUploader.vue.d.ts.map +1 -1
- package/dist/components/formkit/index.d.ts +10 -8
- package/dist/components/formkit/index.d.ts.map +1 -1
- package/dist/components/index.d.ts +0 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/index.cjs +206 -351
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +206 -351
- package/dist/plugins/bagel.d.ts +3 -0
- package/dist/plugins/bagel.d.ts.map +1 -1
- package/dist/style.css +140 -273
- package/package.json +1 -1
- package/src/components/DataPreview.vue +5 -6
- package/src/components/FormSchema.vue +7 -10
- package/src/components/PersonPreview.vue +147 -123
- package/src/components/formkit/FileUploader.vue +264 -254
- package/src/components/formkit/index.ts +10 -10
- package/src/components/index.ts +0 -1
- package/src/index.ts +1 -1
- package/src/plugins/bagel.ts +17 -1
- package/src/components/FileUploader.vue +0 -353
|
@@ -1,86 +1,99 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
2
|
+
<div class="files-wrapper flex">
|
|
3
|
+
<div
|
|
4
|
+
ref="dropZoneEl"
|
|
5
|
+
class="drop-zone flex-grow"
|
|
6
|
+
@click="openFileDialog"
|
|
7
|
+
@drop.prevent.stop="onDrop"
|
|
8
|
+
@dragleave="draggingOver = false"
|
|
9
|
+
>
|
|
10
|
+
<Transition name="pop">
|
|
11
|
+
<div
|
|
12
|
+
ref="dropCircle"
|
|
13
|
+
v-if="draggingOver"
|
|
14
|
+
class="drop-circle"
|
|
15
|
+
/>
|
|
16
|
+
</Transition>
|
|
17
|
+
<div
|
|
18
|
+
class="img-label"
|
|
19
|
+
v-if="allowUpload"
|
|
20
|
+
>
|
|
21
|
+
<p>
|
|
22
|
+
{{ computedDragDropLabel }} <span>{{ computedDrowseLabel }}</span>
|
|
23
|
+
</p>
|
|
24
|
+
</div>
|
|
25
|
+
<div class="uploading-wrap">
|
|
26
|
+
<div
|
|
27
|
+
v-for="(item, index) in files"
|
|
28
|
+
:class="{ uploading: item.uploading }"
|
|
29
|
+
:key="index"
|
|
30
|
+
>
|
|
31
|
+
<div class="load-file-bar">
|
|
32
|
+
<!-- Preview File if image -->
|
|
33
|
+
<img
|
|
34
|
+
width="40"
|
|
35
|
+
v-if="isImg(item)"
|
|
36
|
+
:src="item.dataUrl"
|
|
37
|
+
:alt="item.name"
|
|
38
|
+
style="margin-inline-end: 10px"
|
|
39
|
+
>
|
|
40
|
+
<p>
|
|
41
|
+
{{ item.name }}
|
|
42
|
+
</p>
|
|
43
|
+
<div class="flex">
|
|
44
|
+
<div
|
|
45
|
+
class="pie"
|
|
46
|
+
:style="`--p:${item.progress}`"
|
|
47
|
+
style="--b: 2px"
|
|
48
|
+
:class="{ complete: item.progress === 100 }"
|
|
49
|
+
>
|
|
50
|
+
<span
|
|
51
|
+
class="progress"
|
|
52
|
+
v-if="item.progress < 100"
|
|
53
|
+
>{{
|
|
54
|
+
`${item.progress.toFixed(0)}`
|
|
55
|
+
}}</span>
|
|
56
|
+
<MaterialIcon
|
|
57
|
+
class="success"
|
|
58
|
+
icon="check"
|
|
59
|
+
/>
|
|
60
|
+
</div>
|
|
61
|
+
<Btn
|
|
62
|
+
thin
|
|
63
|
+
class="delete-btn"
|
|
64
|
+
@click.stop="deleteImg(item)"
|
|
65
|
+
icon="delete"
|
|
66
|
+
v-if="item.progress === 100"
|
|
67
|
+
/>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
</div>
|
|
72
|
+
</div>
|
|
73
|
+
<input
|
|
74
|
+
class="file-input"
|
|
75
|
+
type="file"
|
|
76
|
+
@change="handleFileInput"
|
|
77
|
+
ref="fileInputEl"
|
|
78
|
+
:multiple="context?.attrs.multiple || false"
|
|
79
|
+
>
|
|
80
|
+
</div>
|
|
68
81
|
</template>
|
|
69
82
|
|
|
70
83
|
<script setup lang="ts">
|
|
71
84
|
interface UploadFile {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
85
|
+
dataUrl: string;
|
|
86
|
+
progress: number;
|
|
87
|
+
uploading: boolean;
|
|
88
|
+
file?: File;
|
|
89
|
+
name: string;
|
|
90
|
+
serverFile?: any;
|
|
91
|
+
uploaded: boolean;
|
|
79
92
|
}
|
|
80
93
|
|
|
81
|
-
import { onMounted, onUnmounted } from
|
|
94
|
+
import { onMounted, onUnmounted } from 'vue';
|
|
82
95
|
|
|
83
|
-
import { MaterialIcon, Btn, useBagel } from
|
|
96
|
+
import { MaterialIcon, Btn, useBagel } from '@bagelink/vue';
|
|
84
97
|
|
|
85
98
|
const bagel = useBagel();
|
|
86
99
|
|
|
@@ -92,129 +105,130 @@ const fileInputEl = $ref<HTMLInputElement>();
|
|
|
92
105
|
const files = $ref<UploadFile[]>([]);
|
|
93
106
|
|
|
94
107
|
const props = withDefaults(
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
108
|
+
defineProps<{
|
|
109
|
+
context: Record<string, any>;
|
|
110
|
+
dragDropLabel?: string;
|
|
111
|
+
browseLabel?: string;
|
|
112
|
+
}>(),
|
|
113
|
+
{
|
|
114
|
+
dragDropLabel: 'Drag and drop your files here',
|
|
115
|
+
browseLabel: 'or browse',
|
|
116
|
+
},
|
|
104
117
|
);
|
|
105
118
|
|
|
119
|
+
const computedDragDropLabel = $computed(() => props?.context?.attrs?.dragDropLabel || props?.dragDropLabel);
|
|
120
|
+
const computedDrowseLabel = $computed(() => props?.context?.attrs?.browseLabel || props?.browseLabel);
|
|
121
|
+
|
|
106
122
|
const allowUpload = $computed(() => {
|
|
107
|
-
|
|
108
|
-
|
|
123
|
+
const tooManyFiles = !props.context?.attrs.multiple && files.length > 0;
|
|
124
|
+
return !tooManyFiles;
|
|
109
125
|
});
|
|
110
126
|
|
|
111
|
-
const openFileDialog = () => (allowUpload ? fileInputEl?.click() :
|
|
127
|
+
const openFileDialog = () => (allowUpload ? fileInputEl?.click() : '');
|
|
112
128
|
|
|
113
129
|
function animateCircle(e: DragEvent) {
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
130
|
+
e.preventDefault();
|
|
131
|
+
const zoneRect = dropZoneEl?.getBoundingClientRect?.();
|
|
132
|
+
if (!zoneRect) return;
|
|
133
|
+
draggingOver = true;
|
|
134
|
+
const left = e.clientX - zoneRect.left;
|
|
135
|
+
const top = e.clientY - zoneRect.top;
|
|
136
|
+
dropCircle?.style?.setProperty?.('left', `${left}px`);
|
|
137
|
+
dropCircle?.style?.setProperty?.('top', `${top}px`);
|
|
122
138
|
}
|
|
123
139
|
|
|
124
140
|
function emitValue() {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
else alert("not implemented");
|
|
141
|
+
// const fileValues = files.map((f) => f.serverFile?.id);
|
|
142
|
+
// console.log({ files });
|
|
143
|
+
if (!props.context?.attrs.multiple) return props.context?.node.input(files[0].serverFile);
|
|
144
|
+
// eslint-disable-next-line no-alert
|
|
145
|
+
return alert('not implemented');
|
|
131
146
|
}
|
|
132
147
|
|
|
133
|
-
const isImg = (file: UploadFile) =>
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
file.serverFile.extension?.match(/jpg|png|gif|bmp|jpeg/i);
|
|
148
|
+
const isImg = (file: UploadFile) => file.file?.type.includes('image') ||
|
|
149
|
+
file.serverFile?.mimetype?.match(/image\/|jpg|png|gif|bmp|jpeg/i) ||
|
|
150
|
+
file.serverFile.extension?.match(/jpg|png|gif|bmp|jpeg/i);
|
|
137
151
|
|
|
138
152
|
function uploadFiles() {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
153
|
+
files.forEach(async (file) => {
|
|
154
|
+
if (file.uploaded || file.uploading || !file.file) return;
|
|
155
|
+
file.uploading = true;
|
|
156
|
+
file.serverFile = await bagel.uploadFile(file.file, {
|
|
157
|
+
onUploadProgress: (e) => (file.progress = e.progress * 100 - 1),
|
|
158
|
+
});
|
|
159
|
+
file.progress += 1;
|
|
160
|
+
emitValue();
|
|
161
|
+
file.uploaded = true;
|
|
162
|
+
file.uploading = false;
|
|
163
|
+
});
|
|
150
164
|
}
|
|
151
165
|
|
|
152
166
|
const deleteImg = async (file: UploadFile) => {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
167
|
+
await bagel.delete(`files/${file.serverFile.id}`);
|
|
168
|
+
const index = files.indexOf(file);
|
|
169
|
+
files.splice(index, 1);
|
|
170
|
+
emitValue();
|
|
157
171
|
};
|
|
158
172
|
|
|
159
173
|
function readAsDataURL(file: File): Promise<any> {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
174
|
+
return new Promise((resolve, reject) => {
|
|
175
|
+
const reader = new FileReader();
|
|
176
|
+
reader.onload = () => resolve(reader.result);
|
|
177
|
+
reader.onerror = reject;
|
|
178
|
+
reader.readAsDataURL(file);
|
|
179
|
+
});
|
|
166
180
|
}
|
|
167
181
|
|
|
168
182
|
async function addFiles(addedFiles: FileList) {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
183
|
+
if (!allowUpload) return;
|
|
184
|
+
for (let i = 0; i < addedFiles.length; i++) {
|
|
185
|
+
const f = addedFiles[i];
|
|
186
|
+
const file: UploadFile = {
|
|
187
|
+
// eslint-disable-next-line no-await-in-loop
|
|
188
|
+
dataUrl: await readAsDataURL(f),
|
|
189
|
+
file: f,
|
|
190
|
+
name: f.name,
|
|
191
|
+
progress: 0,
|
|
192
|
+
uploading: false,
|
|
193
|
+
uploaded: false,
|
|
194
|
+
};
|
|
195
|
+
files.push(file);
|
|
196
|
+
}
|
|
197
|
+
uploadFiles();
|
|
184
198
|
}
|
|
185
199
|
|
|
186
200
|
onMounted(() => {
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
201
|
+
dropZoneEl?.addEventListener('dragover', animateCircle);
|
|
202
|
+
if (!props.context?.attrs.multiple && props.context?.value) {
|
|
203
|
+
files.push({
|
|
204
|
+
serverFile: props.context?.value,
|
|
205
|
+
uploaded: true,
|
|
206
|
+
uploading: false,
|
|
207
|
+
progress: 100,
|
|
208
|
+
dataUrl: props.context?.value?.url,
|
|
209
|
+
name: props.context?.value?.name,
|
|
210
|
+
});
|
|
211
|
+
}
|
|
198
212
|
});
|
|
199
|
-
onUnmounted(() => dropZoneEl?.removeEventListener(
|
|
213
|
+
onUnmounted(() => dropZoneEl?.removeEventListener('dragover', animateCircle));
|
|
200
214
|
|
|
201
215
|
function handleFileInput(e: Event) {
|
|
202
|
-
|
|
203
|
-
|
|
216
|
+
const filesToAdd: FileList = (e.target as any).files;
|
|
217
|
+
void addFiles(filesToAdd); // TODO: Nati: should be awaited?
|
|
204
218
|
}
|
|
205
219
|
|
|
206
220
|
function onDrop(e: DragEvent) {
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
221
|
+
draggingOver = false;
|
|
222
|
+
e.preventDefault();
|
|
223
|
+
const filesToAdd = e.dataTransfer?.files;
|
|
224
|
+
if (filesToAdd) void addFiles(filesToAdd); // TODO: Nati: should be awaited?
|
|
211
225
|
}
|
|
212
226
|
</script>
|
|
213
227
|
<style>
|
|
214
228
|
.uploading-wrap {
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
229
|
+
width: 100%;
|
|
230
|
+
padding-right: 5px;
|
|
231
|
+
padding-left: 5px;
|
|
218
232
|
}
|
|
219
233
|
|
|
220
234
|
/*
|
|
@@ -222,166 +236,162 @@ function onDrop(e: DragEvent) {
|
|
|
222
236
|
*/
|
|
223
237
|
|
|
224
238
|
.img-label .icon-font {
|
|
225
|
-
|
|
226
|
-
|
|
239
|
+
font-size: 30px;
|
|
240
|
+
margin-bottom: 10px;
|
|
227
241
|
}
|
|
228
242
|
|
|
229
243
|
.img-label span {
|
|
230
|
-
|
|
244
|
+
text-decoration: underline;
|
|
231
245
|
}
|
|
232
246
|
|
|
233
247
|
.file-input {
|
|
234
|
-
|
|
248
|
+
display: none;
|
|
235
249
|
}
|
|
236
250
|
|
|
237
251
|
.files-wrapper {
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
252
|
+
flex-direction: column;
|
|
253
|
+
border-radius: 10px;
|
|
254
|
+
/*overflow: hidden;*/
|
|
255
|
+
min-height: calc(var(--input-height) * 1.5);
|
|
242
256
|
|
|
243
|
-
|
|
257
|
+
font-size: var(--input-font-size);
|
|
244
258
|
}
|
|
245
259
|
|
|
246
260
|
.drop-zone {
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
261
|
+
background-color: var(--input-bg);
|
|
262
|
+
height: 100%;
|
|
263
|
+
width: 100%;
|
|
264
|
+
flex-grow: 1;
|
|
265
|
+
position: relative;
|
|
266
|
+
overflow: hidden;
|
|
267
|
+
cursor: pointer;
|
|
268
|
+
transition: var(--bgl-transition);
|
|
269
|
+
outline: dashed 1px var(--border-color);
|
|
270
|
+
border-radius: 10px;
|
|
271
|
+
padding: 1px;
|
|
272
|
+
display: flex;
|
|
273
|
+
flex-direction: column;
|
|
274
|
+
align-items: center;
|
|
275
|
+
justify-content: center;
|
|
276
|
+
color: var(--input-color);
|
|
263
277
|
}
|
|
264
278
|
|
|
265
279
|
.drop-zone:hover {
|
|
266
|
-
|
|
267
|
-
|
|
280
|
+
color: var(--bgl-primary);
|
|
281
|
+
outline: dashed 1px var(--bgl-primary-tint);
|
|
268
282
|
}
|
|
269
283
|
|
|
270
284
|
.drop-circle {
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
285
|
+
pointer-events: none;
|
|
286
|
+
position: absolute;
|
|
287
|
+
width: 100px;
|
|
288
|
+
height: 100px;
|
|
289
|
+
border-radius: 50%;
|
|
290
|
+
background-color: var(--bgl-primary-tint);
|
|
291
|
+
display: flex;
|
|
292
|
+
transform: translate(-50%, -50%) scale(1);
|
|
293
|
+
transform-origin: left top;
|
|
280
294
|
}
|
|
281
295
|
|
|
282
296
|
.load-file-bar {
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
297
|
+
display: flex;
|
|
298
|
+
align-items: center;
|
|
299
|
+
justify-content: space-between;
|
|
300
|
+
background: var(--bgl-white);
|
|
301
|
+
border-radius: var(--btn-border-radius);
|
|
302
|
+
width: 100%;
|
|
303
|
+
color: var(--input-color);
|
|
304
|
+
height: var(--btn-height);
|
|
305
|
+
padding: 0.5rem;
|
|
306
|
+
height: 46px;
|
|
307
|
+
box-shadow: 0 1px 2px 0 rgb(0 0 0 / 10%);
|
|
308
|
+
white-space: nowrap;
|
|
295
309
|
}
|
|
296
310
|
|
|
297
311
|
.load-file-bar p {
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
312
|
+
width: calc(100% - 40px);
|
|
313
|
+
overflow: hidden;
|
|
314
|
+
text-overflow: ellipsis;
|
|
301
315
|
}
|
|
302
316
|
|
|
303
317
|
.load-file-bar span {
|
|
304
|
-
|
|
318
|
+
font-size: 10px;
|
|
305
319
|
}
|
|
306
320
|
|
|
307
321
|
.pie {
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
322
|
+
width: 30px;
|
|
323
|
+
height: 30px;
|
|
324
|
+
position: relative;
|
|
325
|
+
display: flex;
|
|
326
|
+
align-items: center;
|
|
327
|
+
justify-content: center;
|
|
314
328
|
}
|
|
315
329
|
|
|
316
330
|
.pie:before {
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
farthest-side,
|
|
330
|
-
#0000 calc(99% - var(--b)),
|
|
331
|
-
#000 calc(100% - var(--b))
|
|
332
|
-
);
|
|
331
|
+
content: "";
|
|
332
|
+
position: absolute;
|
|
333
|
+
border-radius: 50%;
|
|
334
|
+
inset: 0;
|
|
335
|
+
transition: all 0.2s ease-in-out;
|
|
336
|
+
background: conic-gradient(var(--bgl-primary) calc(var(--p) * 1%), #0000 0);
|
|
337
|
+
-webkit-mask: radial-gradient(farthest-side,
|
|
338
|
+
#0000 calc(99% - var(--b)),
|
|
339
|
+
#000 calc(100% - var(--b)));
|
|
340
|
+
mask: radial-gradient(farthest-side,
|
|
341
|
+
#0000 calc(99% - var(--b)),
|
|
342
|
+
#000 calc(100% - var(--b)));
|
|
333
343
|
}
|
|
334
344
|
|
|
335
345
|
.pie .success {
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
346
|
+
transform: scale(0);
|
|
347
|
+
opacity: 0;
|
|
348
|
+
transition: all 0.3s ease-in-out;
|
|
339
349
|
}
|
|
340
350
|
|
|
341
351
|
.pie .progress {
|
|
342
|
-
|
|
343
|
-
|
|
352
|
+
position: absolute;
|
|
353
|
+
font-size: 10px;
|
|
344
354
|
}
|
|
345
355
|
|
|
346
356
|
.pie.complete .progress {
|
|
347
|
-
|
|
357
|
+
display: none;
|
|
348
358
|
}
|
|
349
359
|
|
|
350
360
|
.pie.complete .success {
|
|
351
|
-
|
|
352
|
-
|
|
361
|
+
transform: scale(1.3);
|
|
362
|
+
opacity: 1;
|
|
353
363
|
}
|
|
354
364
|
|
|
355
365
|
.pie.complete:before {
|
|
356
|
-
|
|
366
|
+
background: conic-gradient(var(--bgl-green) calc(var(--p) * 1%), #0000 0);
|
|
357
367
|
}
|
|
358
368
|
|
|
359
369
|
.pie.complete {
|
|
360
|
-
|
|
370
|
+
color: var(--bgl-green);
|
|
361
371
|
}
|
|
362
372
|
</style>
|
|
363
373
|
<style>
|
|
364
374
|
.pop-enter-active {
|
|
365
|
-
|
|
375
|
+
transition: scale 0.2s cubic-bezier(0.55, 0, 0.1, 1);
|
|
366
376
|
}
|
|
367
377
|
|
|
368
378
|
.pop-leave-active {
|
|
369
|
-
|
|
379
|
+
transition: scale 0.2s cubic-bezier(0.55, 0, 0.1, 1);
|
|
370
380
|
}
|
|
371
381
|
|
|
372
382
|
.pop-enter-from,
|
|
373
383
|
.pop-leave-to {
|
|
374
|
-
|
|
384
|
+
scale: 0;
|
|
375
385
|
}
|
|
376
386
|
|
|
377
387
|
.delete-btn {
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
388
|
+
margin-inline-end: -30px;
|
|
389
|
+
opacity: 0;
|
|
390
|
+
margin-inline-start: 10px;
|
|
381
391
|
}
|
|
382
392
|
|
|
383
393
|
.uploading-wrap:hover .delete-btn {
|
|
384
|
-
|
|
385
|
-
|
|
394
|
+
opacity: 1;
|
|
395
|
+
margin-inline-end: 0;
|
|
386
396
|
}
|
|
387
397
|
</style>
|