import { Skeleton, SkeletonArticle, SkeletonAvatar, SkeletonButton, SkeletonDetail, SkeletonImage, SkeletonInput, SkeletonNode, SkeletonRows, SkeletonStat, SkeletonTable, } from "@godxjp/ui/feedback"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@godxjp/ui/data-display"; import { Flex, PageContainer, ResponsiveGrid } from "@godxjp/ui/layout"; /** * Skeleton · loading placeholders. Three levels: * Skeleton · custom pulsing block (h + w via className). * SkeletonTable · pre-mount DataTable placeholder (rows, columns props). * SkeletonStat · StatCard/KPI tile placeholder (no props; use in ResponsiveGrid). * SkeletonDetail · single-record detail placeholder (title + metadata rows, no props). * SkeletonArticle · avatar + heading + paragraph (Ant Design's own Skeleton shape). * SkeletonAvatar/Button/Input/Node/Image · the shaped presets, also on the Skeleton namespace. * Never use a spinner overlay on skeletonable content. */ export default function Demo() { return ( Skeleton · custom pulsing blocks Base primitive. Pass className for h + w. Use when SkeletonTable / SkeletonStat do not match the target layout (e.g. a single loading line, a media placeholder, inline metadata). SkeletonArticle · avatar + heading + paragraph Ant Design's own Skeleton shape. Defaults follow it exactly: no avatar, a 38% heading and three body lines; with an avatar the heading drops to 50% and the body to two lines. `active` swaps the resting pulse for the travelling sheen · `round` pills every line · `loading={false}` renders children instead. Shaped presets · the boxes the controls occupy Each preset carries the box of the control it stands in for, from the --control-height tier · SkeletonButton is two heights wide, SkeletonInput five. Reachable as named exports or through the Skeleton namespace (Skeleton.Button…). SkeletonRows · generic repeated rows Use for non-table list layouts with deterministic row count. SkeletonTable · DataTable pre-mount placeholder Drop-in while deferred prop / query resolves. Match rows to page size and columns to column count so the layout does not jump on hydration. Do NOT wrap in Card · it owns its own structure. SkeletonStat · KPI / StatCard tile placeholder Use inside a ResponsiveGrid · one SkeletonStat per expected StatCard. No props. Do NOT wrap in an extra Card (SkeletonStat owns its own bordered box). SkeletonDetail · single-record detail loading state The ready-made detail placeholder (title + metadata rows). Reach for this on a record / show page while the record loads · do NOT hand-compose it from base Skeleton blocks. No props. ); }