diff options
| author | Somhairle H. Marisol <[email protected]> | 2026-09-18 15:49:44 +0800 |
|---|---|---|
| committer | Somhairle H. Marisol <[email protected]> | 2026-09-18 15:49:44 +0800 |
| commit | a7aab01f051487327e5ce52b6a8905208c546e8c (patch) | |
| tree | 630a624523bc15d1a9f59ab20693385eaf55befb /frontend/src/components/Status.svelte | |
| parent | 375584174fb7191a57c5423fea45924ad6d812d5 (diff) | |
| download | strategy-lab-a7aab01f051487327e5ce52b6a8905208c546e8c.tar.gz | |
[变更性质] feat(frontend)
[新增功能] 12 页面组件全量 shadcn:Card/Button/Table/Tabs/Select/Alert;375 底部 Tab Bar 改用 Tabs 组件实现
[实现方案] 页面级手写 class 全部移除(.btn/.banner/table.data/.badge/.tabs/.metric-row/.m-tile/.hint 等改为 shadcn + tailwind 工具类);Modal/DatasetWizard/DatasetCard/DiffView/CodeEditor/Status/Layout 同步
[影响范围] src/pages/*.svelte、src/components/*.svelte
Diffstat (limited to 'frontend/src/components/Status.svelte')
| -rw-r--r-- | frontend/src/components/Status.svelte | 60 |
1 files changed, 13 insertions, 47 deletions
diff --git a/frontend/src/components/Status.svelte b/frontend/src/components/Status.svelte index 6ae2cfb..ce2a753 100644 --- a/frontend/src/components/Status.svelte +++ b/frontend/src/components/Status.svelte @@ -1,4 +1,7 @@ <script lang="ts"> + import { Alert } from '$lib/components/ui/alert'; + import * as Card from '$lib/components/ui/card'; + interface Props { error?: string | null; busy?: boolean; @@ -11,60 +14,23 @@ </script> {#if busy} - <div class="status" role="status"> - <span class="spinner" aria-hidden="true"></span> + <div class="text-muted-foreground flex items-center gap-2 py-3 text-sm" role="status"> + <span class="inline-block size-4 rounded-full border-2 border-primary border-t-transparent align-[-0.125em] animate-spin" aria-hidden="true"></span> {busyText} </div> {:else if error} - <Alert variant="destructive" class="bg-[var(--danger-soft)] text-[var(--destructive)] border-[#f2c7c7]"> + <Alert variant="destructive"> <span aria-hidden="true">⚠</span> <span>{error}</span> </Alert> {:else if empty !== null && empty !== undefined && empty !== false} - <div class="state-empty"> - <p class="empty-title">{empty}</p> - {#if emptyHint}<p class="hint">{emptyHint}</p>{/if} - </div> + <Card.Root class="border-dashed text-center py-8 px-4 text-muted-foreground"> + <p class="font-semibold mb-1">{empty}</p> + {#if emptyHint}<p class="text-sm text-muted-foreground">{emptyHint}</p>{/if} + </Card.Root> {/if} {#if warnings && warnings.length > 0} - <div class="stack"> - {#each warnings as w, i (i)} - <Alert variant="default" class="bg-[var(--warn-soft)] text-[var(--warn)] border-[#f0ddb4]"><span aria-hidden="true">△</span><span>{w}</span></Alert> - {/each} - </div> + {#each warnings as w, i (i)} + <Alert variant="default"><span aria-hidden="true">△</span><span>{w}</span></Alert> + {/each} {/if} - -<script lang="ts" module> - import { Alert } from '$lib/components/ui/alert'; -</script> - -<style> - .status { - color: var(--text-3); - display: flex; - align-items: center; - gap: 0.5rem; - padding: 0.9rem 0; - font-size: 0.9rem; - } - .spinner { - width: 15px; - height: 15px; - border: 2px solid var(--teal); - border-top-color: transparent; - border-radius: 50%; - animation: spin 0.8s linear infinite; - } - @keyframes spin { - to { transform: rotate(360deg); } - } - .state-empty { - text-align: center; - padding: 2.2rem 1rem; - border: 1px dashed var(--border-strong); - border-radius: var(--radius); - color: var(--text-2); - background: var(--surface); - } - .empty-title { font-weight: 600; margin-bottom: 0.2rem; } -</style> |
