refactor(PBI-77): standaardiseer loading-skeletons rond shadcn Skeleton (#186)

* refactor(PBI-77): align TaskDialogSkeleton with entity-dialog-layout (T-899)

Use entityDialogContentClasses/HeaderClasses/BodyClasses/FooterClasses from
components/shared/entity-dialog-layout.ts instead of hand-copied class strings.
Header, body, and footer skeletons now mimic the actual TaskDialog form fields
(code, title, description, plan, priority, status, delete + cancel/save buttons).

Fixes mobile layout-shift: the shared content-classes include max-sm: fullscreen
modifiers that the previous hand-rolled subset missed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* refactor(PBI-77): extract BacklogPageSkeleton from 3 identical loadings (T-900)

The loading.tsx files for products/[id], sprint/[sprintId], and
sprint/[sprintId]/planning were 100% identical hand-rolled animate-pulse markup.
Extract the shape into components/loading/backlog-page-skeleton.tsx using the
shadcn <Skeleton> component, and re-export it from the three loading files.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* refactor(PBI-77): dashboard + settings loading on shadcn Skeleton (T-901)

Replace hand-rolled animate-pulse + bg-border divs with the shadcn <Skeleton>
component for consistent bg-muted color and pulse timing across all five
loading.tsx files. No layout-shift: heights, widths, and rounded radii are
preserved.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Janpeter Visser 2026-05-10 12:59:08 +02:00 committed by GitHub
parent a0e5867857
commit f8693d126b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 92 additions and 127 deletions

View file

@ -0,0 +1,32 @@
import { Skeleton } from '@/components/ui/skeleton'
export default function BacklogPageSkeleton() {
return (
<div className="flex flex-col h-full">
<div className="px-4 py-3 border-b border-border bg-surface-container-low shrink-0 flex items-center justify-between">
<div className="space-y-1.5">
<Skeleton className="h-4 w-32" />
<Skeleton className="h-3 w-48" />
</div>
<Skeleton className="h-7 w-24" />
</div>
<div className="flex-1 flex overflow-hidden">
<div className="w-2/5 border-r border-border p-4 space-y-3">
<Skeleton className="h-4 w-24" />
{[1, 2, 3, 4, 5].map((i) => (
<Skeleton key={i} className="h-8 w-full" />
))}
</div>
<div className="flex-1 p-4 space-y-3">
<Skeleton className="h-4 w-16" />
<div className="flex gap-2 flex-wrap">
{[1, 2, 3].map((i) => (
<Skeleton key={i} className="w-28 h-24 rounded-lg" />
))}
</div>
</div>
</div>
</div>
)
}