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