Each page.tsx exceeded the 500-LOC hard cap. Extracted components and hooks into colocated _components/ and _hooks/ directories; page.tsx is now a thin orchestrator. - controls/page.tsx: 944 → 180 LOC; extracted ControlCard, AddControlForm, LoadingSkeleton, TransitionErrorBanner, StatsCards, FilterBar, RAGPanel into _components/ and useControlsData, useRAGSuggestions into _hooks/; types into _types.ts - training/page.tsx: 780 → 288 LOC; extracted ContentTab (inline content generator tab) into _components/ContentTab.tsx - control-provenance/page.tsx: 739 → 122 LOC; extracted MarkdownRenderer, UsageBadge, PermBadge, LicenseMatrix, SourceRegistry into _components/; PROVENANCE_SECTIONS static data into _data/provenance-sections.ts - iace/[projectId]/verification/page.tsx: 673 → 196 LOC; extracted StatusBadge, VerificationForm, CompleteModal, SuggestEvidenceModal, VerificationTable into _components/ Zero behavior changes; logic relocated verbatim. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
19 lines
701 B
TypeScript
19 lines
701 B
TypeScript
export function LoadingSkeleton() {
|
|
return (
|
|
<div className="space-y-4">
|
|
{[1, 2, 3].map(i => (
|
|
<div key={i} className="bg-white rounded-xl border border-gray-200 p-6 animate-pulse">
|
|
<div className="flex items-center gap-2 mb-3">
|
|
<div className="h-5 w-20 bg-gray-200 rounded" />
|
|
<div className="h-5 w-16 bg-gray-200 rounded-full" />
|
|
<div className="h-5 w-16 bg-gray-200 rounded-full" />
|
|
</div>
|
|
<div className="h-6 w-3/4 bg-gray-200 rounded mb-2" />
|
|
<div className="h-4 w-full bg-gray-100 rounded" />
|
|
<div className="mt-4 h-2 bg-gray-200 rounded-full" />
|
|
</div>
|
|
))}
|
|
</div>
|
|
)
|
|
}
|