Files
EvoBGP/apps/web/src/components/skeletons.tsx
T
DenozordecandCursor 094f75913b
quality / commitlint (push) Skipped
quality / changes (push) Successful in 8s
quality / go (push) Skipped
quality / bird2 (push) Skipped
quality / docker-check (push) Skipped
quality / openapi (push) Successful in 22s
quality / web (push) Successful in 1m0s
CD / quality (push) Successful in 1m35s
CD / publish (push) Successful in 2m59s
fix(web): unify ReUI chrome and stop tab underline overlap
Секции страниц переведены на segmented Tabs (c-tabs-9), статус грида — ToggleGroup в toolbar. Убраны календарь задач, пустые вкладки мониторинга и demo-деревья ReUI. KPI overflow как в CFDM, DetailPanel на карточке модуля, один FrameSection.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-23 12:46:20 +07:00

68 lines
2.1 KiB
TypeScript

import { Skeleton } from '@evobgp/ui/components/skeleton'
import { KpiStatGrid, panelCardInsetClassName } from '@/components/reui-kit'
import {
chartPanelGridClassName,
dashboardMainSidebarClassName,
} from '@/lib/ui-surface'
export function KpiStatGridSkeleton({ count = 4 }: { count?: number }) {
return (
<KpiStatGrid
items={[]}
isLoading
skeletonCount={count}
aria-label="Загрузка показателей"
/>
)
}
/** Matches dashboard layout: KPI row, charts, main+sidebar, bottom grids. */
export function AnalyticsDashboardSkeleton() {
return (
<div className="@container flex flex-col gap-4">
<KpiStatGridSkeleton count={6} />
<div className={chartPanelGridClassName}>
<Skeleton className="h-72 w-full rounded-xl" />
<Skeleton className="h-72 w-full rounded-xl" />
</div>
<div className={dashboardMainSidebarClassName}>
<Skeleton className="h-96 w-full min-w-0 rounded-xl" />
<Skeleton className="h-96 w-full min-w-0 rounded-xl" />
</div>
<div className={chartPanelGridClassName}>
<Skeleton className="h-64 w-full rounded-xl" />
<Skeleton className="h-64 w-full rounded-xl" />
</div>
</div>
)
}
export function KpiSparklineSkeleton({ count = 4 }: { count?: number }) {
return <KpiStatGridSkeleton count={count} />
}
export function TableSkeleton({ rows = 6, cols = 4 }: { rows?: number; cols?: number }) {
return (
<div className="overflow-hidden rounded-xl ring-1 ring-foreground/10">
<div className="flex flex-col">
<div className={`flex gap-2 border-b ${panelCardInsetClassName}`}>
{Array.from({ length: cols }).map((_, i) => (
<Skeleton className="h-4 flex-1" key={`h-${i}`} />
))}
</div>
{Array.from({ length: rows }).map((_, r) => (
<div className={`flex gap-2 border-b ${panelCardInsetClassName}`} key={`r-${r}`}>
{Array.from({ length: cols }).map((_, c) => (
<Skeleton className="h-4 flex-1" key={`c-${r}-${c}`} />
))}
</div>
))}
</div>
</div>
)
}