mirror of
https://github.com/BetterSEQTA/BetterSEQTA-Plus.git
synced 2026-08-28 09:11:06 +00:00
68 lines
1.9 KiB
Svelte
68 lines
1.9 KiB
Svelte
<script lang="ts">
|
|
import type { GoogleCalendarSyncProgress } from "@/seqta/utils/googleCalendar/types";
|
|
|
|
let {
|
|
progress = null,
|
|
} = $props<{
|
|
progress?: GoogleCalendarSyncProgress | null;
|
|
}>();
|
|
|
|
const percent = $derived(
|
|
progress && progress.total > 0
|
|
? Math.min(100, Math.round((progress.current / progress.total) * 100))
|
|
: progress?.phase === "preparing"
|
|
? 8
|
|
: 0,
|
|
);
|
|
</script>
|
|
|
|
{#if progress && progress.phase !== "done"}
|
|
<div class="bsplus-cal-progress" role="status" aria-live="polite" aria-busy="true">
|
|
<div class="bsplus-cal-progress-label">{progress.message}</div>
|
|
<div class="bsplus-cal-progress-track" aria-hidden="true">
|
|
<div class="bsplus-cal-progress-bar" style:width={`${percent}%`}></div>
|
|
</div>
|
|
{#if progress.total > 0}
|
|
<div class="bsplus-cal-progress-meta">{progress.current} / {progress.total}</div>
|
|
{/if}
|
|
</div>
|
|
{/if}
|
|
|
|
<style>
|
|
.bsplus-cal-progress {
|
|
margin-top: 8px;
|
|
padding: 10px;
|
|
border-radius: 10px;
|
|
background: color-mix(in srgb, var(--bsplus-cal-accent, var(--better-main, #3b82f6)) 10%, transparent);
|
|
border: 1px solid color-mix(in srgb, var(--bsplus-cal-accent, var(--better-main, #3b82f6)) 22%, transparent);
|
|
}
|
|
|
|
.bsplus-cal-progress-label {
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
color: var(--bsplus-cal-text, var(--text-primary, #111));
|
|
margin-bottom: 8px;
|
|
}
|
|
|
|
.bsplus-cal-progress-track {
|
|
height: 8px;
|
|
border-radius: 999px;
|
|
overflow: hidden;
|
|
background: color-mix(in srgb, var(--bsplus-cal-text, #111) 10%, transparent);
|
|
}
|
|
|
|
.bsplus-cal-progress-bar {
|
|
height: 100%;
|
|
border-radius: 999px;
|
|
background: var(--bsplus-cal-accent, var(--better-main, #3b82f6));
|
|
transition: width 0.25s ease;
|
|
}
|
|
|
|
.bsplus-cal-progress-meta {
|
|
margin-top: 6px;
|
|
font-size: 10px;
|
|
color: color-mix(in srgb, var(--bsplus-cal-text, #111) 62%, transparent);
|
|
text-align: right;
|
|
}
|
|
</style>
|