| <script lang="ts"> | |
| import PicletGenerator from '../PicletGenerator/PicletGenerator.svelte'; | |
| import type { GradioClient } from '$lib/types'; | |
| interface Props { | |
| fluxClient: GradioClient | null; | |
| joyCaptionClient: GradioClient | null; | |
| zephyrClient: GradioClient | null; | |
| qwenClient: GradioClient | null; | |
| } | |
| let { fluxClient, joyCaptionClient, zephyrClient, qwenClient }: Props = $props(); | |
| </script> | |
| <div class="scanner-page"> | |
| {#if fluxClient && joyCaptionClient && zephyrClient && qwenClient} | |
| <PicletGenerator | |
| {fluxClient} | |
| {joyCaptionClient} | |
| {zephyrClient} | |
| {qwenClient} | |
| /> | |
| {:else} | |
| <div class="loading-state"> | |
| <div class="spinner"></div> | |
| <p>Initializing scanner...</p> | |
| </div> | |
| {/if} | |
| </div> | |
| <style> | |
| .scanner-page { | |
| height: 100%; | |
| overflow-y: auto; | |
| -webkit-overflow-scrolling: touch; | |
| } | |
| .loading-state { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| justify-content: center; | |
| height: 100%; | |
| color: #666; | |
| } | |
| .spinner { | |
| width: 40px; | |
| height: 40px; | |
| border: 3px solid #f3f3f3; | |
| border-top: 3px solid #007bff; | |
| border-radius: 50%; | |
| animation: spin 1s linear infinite; | |
| margin-bottom: 1rem; | |
| } | |
| @keyframes spin { | |
| to { transform: rotate(360deg); } | |
| } | |
| </style> |