This commit is contained in:
syuilo 2025-05-13 11:37:46 +09:00
parent 5c44e5ba59
commit 5a8cd627ef
3 changed files with 34 additions and 2 deletions

View File

@ -33,7 +33,7 @@ SPDX-License-Identifier: AGPL-3.0-only
</div>
</div>
<div>
<MkLoading v-if="ctx.uploading" :em="true"/>
<MkSystemIcon v-if="ctx.uploading" type="waiting" style="width: 40px;"/>
<MkSystemIcon v-else-if="ctx.uploaded" type="success" style="width: 40px;"/>
<MkSystemIcon v-else-if="ctx.uploadFailed" type="error" style="width: 40px;"/>
</div>
@ -321,6 +321,12 @@ onMounted(() => {
min-width: 0;
}
@container (max-width: 500px) {
.itemBody {
font-size: 90%;
}
}
.itemInfo {
opacity: 0.7;
margin-top: 4px;

View File

@ -28,13 +28,17 @@ SPDX-License-Identifier: AGPL-3.0-only
<path d="M96,63L63,96" style="--l:47;--duration:0.3s;--delay:0.2s;" :class="[$style.line, $style.animLine]"/>
<circle cx="80" cy="80" r="56" style="--l:350;" :class="[$style.line, $style.animCircle]"/>
</svg>
<svg v-else-if="type === 'waiting'" :class="[$style.icon, $style.waiting]" viewBox="0 0 160 160">
<circle cx="80" cy="80" r="56" style="--l:350;" :class="[$style.line, $style.animCircleWaiting]"/>
<circle cx="80" cy="80" r="56" style="opacity: 0.25;" :class="[$style.line]"/>
</svg>
</template>
<script lang="ts" setup>
import {} from 'vue';
const props = defineProps<{
type: 'info' | 'question' | 'success' | 'warn' | 'error';
type: 'info' | 'question' | 'success' | 'warn' | 'error' | 'waiting';
}>();
</script>
@ -62,6 +66,10 @@ const props = defineProps<{
&.error {
color: var(--MI_THEME-error);
}
&.waiting {
color: var(--MI_THEME-accent);
}
}
.line {
@ -87,6 +95,13 @@ const props = defineProps<{
transform: rotate(-90deg);
}
.animCircleWaiting {
stroke-dasharray: var(--l);
stroke-dashoffset: calc(var(--l) / 1.5);
animation: waiting 0.75s linear infinite;
transform-origin: center;
}
.animFade {
opacity: 0;
animation: fade-in var(--duration, 0.5s) cubic-bezier(0,0,.25,1) 1 forwards;
@ -104,6 +119,15 @@ const props = defineProps<{
}
}
@keyframes waiting {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
@keyframes fade-in {
0% {
opacity: 0;

View File

@ -23,6 +23,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<MkSystemIcon v-if="iconType === 'success'" type="success" style="width: 150px;"/>
<MkSystemIcon v-if="iconType === 'warn'" type="warn" style="width: 150px;"/>
<MkSystemIcon v-if="iconType === 'error'" type="error" style="width: 150px;"/>
<MkSystemIcon v-if="iconType === 'waiting'" type="waiting" style="width: 150px;"/>
<MkSelect
v-model="iconType" :items="[
{ label: 'info', value: 'info' },
@ -30,6 +31,7 @@ SPDX-License-Identifier: AGPL-3.0-only
{ label: 'success', value: 'success' },
{ label: 'warn', value: 'warn' },
{ label: 'error', value: 'error' },
{ label: 'waiting', value: 'waiting' },
]"
></MkSelect>