snapshot of https://github.com/shadcn-ui/ui.git (main, 2026-09-15; blobs > 131072B omitted)
All checks were successful
Release / Create Version PR or Publish Stable Release (push) Has been skipped
Release / Publish Prerelease to NPM (push) Has been skipped
Monitor Registries / Monitor registry health (push) Has been skipped

This commit is contained in:
upstream-mirror
2026-09-15 22:44:43 +05:00
commit 1416db152c
5727 changed files with 630238 additions and 0 deletions

View File

@@ -0,0 +1,35 @@
import {
Card,
CardContent,
CardFooter,
CardHeader,
} from "@/styles/base-rhea/ui/card"
import { Skeleton } from "@/styles/base-rhea/ui/skeleton"
export function AccountAccess() {
return (
<Card>
<CardHeader className="gap-2">
<Skeleton className="h-5 w-36 rounded-md" />
<Skeleton className="h-4 w-64 rounded-md" />
</CardHeader>
<CardContent className="flex flex-col gap-6">
<div className="flex flex-col gap-2">
<Skeleton className="h-3 w-24 rounded-md" />
<Skeleton className="h-9 w-full rounded-lg" />
</div>
<div className="flex flex-col gap-2">
<div className="flex items-center justify-between">
<Skeleton className="h-3 w-32 rounded-md" />
<Skeleton className="h-3 w-12 rounded-md" />
</div>
<Skeleton className="h-9 w-full rounded-lg" />
</div>
</CardContent>
<CardFooter className="flex-col gap-4">
<Skeleton className="h-9 w-full rounded-lg" />
<Skeleton className="h-14 w-full rounded-xl" />
</CardFooter>
</Card>
)
}

View File

@@ -0,0 +1,17 @@
import { Card, CardAction, CardHeader } from "@/styles/base-rhea/ui/card"
import { Skeleton } from "@/styles/base-rhea/ui/skeleton"
export function AnalyticsCard() {
return (
<Card className="mx-auto w-full max-w-sm data-[size=sm]:pb-0" size="sm">
<CardHeader className="gap-2">
<Skeleton className="h-5 w-24 rounded-md" />
<Skeleton className="h-4 w-40 rounded-md" />
<CardAction>
<Skeleton className="h-7 w-28 rounded-lg" />
</CardAction>
</CardHeader>
<Skeleton className="mx-6 mb-6 aspect-[1/0.35] w-auto rounded-lg" />
</Card>
)
}

View File

@@ -0,0 +1,41 @@
import {
Card,
CardContent,
CardFooter,
CardHeader,
} from "@/styles/base-rhea/ui/card"
import { Skeleton } from "@/styles/base-rhea/ui/skeleton"
export function ClaimableBalance() {
return (
<Card>
<CardHeader className="gap-3">
<Skeleton className="h-4 w-36 rounded-md" />
<Skeleton className="h-12 w-56 rounded-lg" />
<Skeleton className="h-6 w-32 rounded-full" />
</CardHeader>
<CardContent className="flex flex-1 flex-col justify-end">
<div className="flex flex-col gap-3 rounded-xl bg-muted p-4">
<div className="flex items-center justify-between">
<Skeleton className="h-4 w-28 rounded-md bg-muted-foreground/15" />
<Skeleton className="h-4 w-20 rounded-md bg-muted-foreground/15" />
</div>
<div className="flex items-center justify-between">
<Skeleton className="h-4 w-32 rounded-md bg-muted-foreground/15" />
<Skeleton className="h-4 w-16 rounded-md bg-muted-foreground/15" />
</div>
<Skeleton className="h-px w-full rounded-none bg-muted-foreground/15" />
<div className="flex items-center justify-between">
<Skeleton className="h-4 w-36 rounded-md bg-muted-foreground/15" />
<Skeleton className="h-4 w-24 rounded-md bg-muted-foreground/15" />
</div>
</div>
</CardContent>
<CardFooter className="flex-col gap-2">
<Skeleton className="h-3 w-full rounded-md" />
<Skeleton className="h-3 w-11/12 rounded-md" />
<Skeleton className="h-3 w-3/4 rounded-md" />
</CardFooter>
</Card>
)
}

View File

@@ -0,0 +1,53 @@
import {
Card,
CardContent,
CardFooter,
CardHeader,
} from "@/styles/base-rhea/ui/card"
import { Skeleton } from "@/styles/base-rhea/ui/skeleton"
const bars = [60, 80, 65, 95, 50, 100]
export function ContributionHistory() {
return (
<Card>
<CardHeader className="gap-2">
<Skeleton className="h-5 w-44 rounded-md" />
<Skeleton className="h-4 w-52 rounded-md" />
</CardHeader>
<CardContent>
<div className="flex h-[200px] w-full items-end gap-3">
{bars.map((height, i) => (
<div
key={i}
className="flex h-full flex-1 flex-col justify-end gap-2"
>
<Skeleton
className="w-full rounded-t-md rounded-b-none"
style={{ height: `${height}%` }}
/>
<Skeleton className="mx-auto h-3 w-6 rounded-md" />
</div>
))}
</div>
</CardContent>
<CardContent>
<div className="grid w-full grid-cols-1 gap-3 xl:grid-cols-2">
<div className="flex flex-col gap-2 rounded-xl bg-muted p-4">
<Skeleton className="h-3 w-20 rounded-md bg-muted-foreground/15" />
<Skeleton className="h-5 w-28 rounded-md bg-muted-foreground/15" />
<Skeleton className="h-3 w-24 rounded-md bg-muted-foreground/15" />
</div>
<div className="hidden flex-col gap-2 rounded-xl bg-muted p-4 xl:flex">
<Skeleton className="h-3 w-24 rounded-md bg-muted-foreground/15" />
<Skeleton className="h-5 w-32 rounded-md bg-muted-foreground/15" />
<Skeleton className="h-3 w-28 rounded-md bg-muted-foreground/15" />
</div>
</div>
</CardContent>
<CardFooter>
<Skeleton className="h-9 w-full rounded-lg" />
</CardFooter>
</Card>
)
}

View File

@@ -0,0 +1,49 @@
import {
Card,
CardAction,
CardContent,
CardHeader,
} from "@/styles/base-rhea/ui/card"
import { Skeleton } from "@/styles/base-rhea/ui/skeleton"
const rows = [0, 1, 2, 3]
const miniBars = [40, 60, 80, 50]
export function DividendIncome() {
return (
<Card>
<CardHeader className="gap-2">
<Skeleton className="h-5 w-48 rounded-md" />
<Skeleton className="h-4 w-64 rounded-md" />
<CardAction>
<Skeleton className="size-8 rounded-md" />
</CardAction>
</CardHeader>
<CardContent>
<div className="flex flex-col gap-2">
{rows.map((row) => (
<div
key={row}
className="flex items-center gap-3 rounded-xl bg-muted p-3"
>
<div className="flex flex-1 flex-col gap-2">
<Skeleton className="h-4 w-28 rounded-md bg-muted-foreground/15" />
<Skeleton className="h-3 w-20 rounded-md bg-muted-foreground/15" />
</div>
<div className="hidden h-8 w-24 items-end gap-1 md:flex">
{miniBars.map((h, i) => (
<Skeleton
key={i}
className="flex-1 rounded-t-sm rounded-b-none bg-muted-foreground/15"
style={{ height: `${h}%` }}
/>
))}
</div>
<Skeleton className="hidden h-4 w-16 rounded-md bg-muted-foreground/15 md:block" />
</div>
))}
</div>
</CardContent>
</Card>
)
}

View File

@@ -0,0 +1,20 @@
import { Card, CardContent } from "@/styles/base-rhea/ui/card"
import { Skeleton } from "@/styles/base-rhea/ui/skeleton"
export function EmptyDistributeTrack() {
return (
<Card>
<CardContent>
<div className="flex flex-col items-center gap-4 p-4">
<Skeleton className="size-12 rounded-xl" />
<div className="flex flex-col items-center gap-2">
<Skeleton className="h-5 w-40 rounded-md" />
<Skeleton className="h-3 w-64 rounded-md" />
<Skeleton className="h-3 w-48 rounded-md" />
</div>
<Skeleton className="h-9 w-32 rounded-lg" />
</div>
</CardContent>
</Card>
)
}

View File

@@ -0,0 +1,56 @@
import { AccountAccess } from "./account-access"
import { AnalyticsCard } from "./analytics-card"
import { ClaimableBalance } from "./claimable-balance"
import { ContributionHistory } from "./contribution-history"
import { DividendIncome } from "./dividend-income"
import { EmptyDistributeTrack } from "./empty-distribute-track"
import { NewMilestone } from "./new-milestone"
import { NotificationSettings } from "./notification-settings"
import { Payments } from "./payments"
import { PayoutThreshold } from "./payout-threshold"
import { PowerUsage } from "./power-usage"
import { QrConnect } from "./qr-connect"
import { SavingsTargets } from "./savings-targets"
import { SidebarNav } from "./sidebar-nav"
import { TransferFunds } from "./transfer-funds"
import { UIElements } from "./ui-elements"
export function CardsSkeletonDemo() {
return (
<div
data-slot="demo"
className="theme-neutral relative flex w-full max-w-none flex-col gap-(--gap) bg-muted p-12 pb-0! [--gap:--spacing(8)] 3xl:[--gap:--spacing(8)] min-[1900px]:[--gap:--spacing(10)]! lg:p-8 lg:[--gap:--spacing(6)] xl:p-12 dark:bg-muted/30"
>
<div className="relative z-10 mx-auto grid gap-(--gap) **:data-[slot=card]:w-full min-[1900px]:grid-cols-5! md:max-w-3xl md:grid-cols-2 lg:max-w-none lg:grid-cols-3 xl:max-w-[1600px] xl:grid-cols-4 2xl:max-w-[1900px]">
<div className="flex flex-col items-start gap-(--gap)">
<UIElements />
<SidebarNav />
<SavingsTargets />
</div>
<div className="hidden flex-col gap-(--gap) lg:flex">
<ContributionHistory />
<ClaimableBalance />
<DividendIncome />
</div>
<div className="hidden flex-col gap-(--gap) 3xl:flex!">
<NewMilestone />
<PayoutThreshold />
<AccountAccess />
</div>
<div className="hidden flex-col gap-(--gap) md:flex">
<QrConnect />
<TransferFunds />
<Payments />
</div>
<div className="hidden flex-col gap-(--gap) xl:flex">
<EmptyDistributeTrack />
<AnalyticsCard />
<NotificationSettings />
<PowerUsage />
</div>
</div>
<div className="absolute inset-x-0 top-0 z-1 h-80 bg-linear-to-b from-background via-muted to-transparent dark:via-muted/30" />
<div className="absolute inset-x-0 bottom-0 z-20 h-80 bg-linear-to-t from-background via-muted to-transparent dark:via-muted/30" />
</div>
)
}

View File

@@ -0,0 +1,38 @@
import {
Card,
CardContent,
CardFooter,
CardHeader,
} from "@/styles/base-rhea/ui/card"
import { Skeleton } from "@/styles/base-rhea/ui/skeleton"
export function NewMilestone() {
return (
<Card>
<CardHeader className="gap-2">
<Skeleton className="h-5 w-44 rounded-md" />
<Skeleton className="h-4 w-72 rounded-md" />
</CardHeader>
<CardContent className="flex flex-col gap-4">
<div className="flex flex-col gap-2">
<Skeleton className="h-3 w-20 rounded-md" />
<Skeleton className="h-9 w-full rounded-lg" />
</div>
<div className="grid grid-cols-2 gap-3">
<div className="flex flex-col gap-2">
<Skeleton className="h-3 w-24 rounded-md" />
<Skeleton className="h-9 w-full rounded-lg" />
</div>
<div className="flex flex-col gap-2">
<Skeleton className="h-3 w-20 rounded-md" />
<Skeleton className="h-9 w-full rounded-lg" />
</div>
</div>
</CardContent>
<CardFooter className="flex-col gap-2">
<Skeleton className="h-9 w-full rounded-lg" />
<Skeleton className="h-9 w-full rounded-lg" />
</CardFooter>
</Card>
)
}

View File

@@ -0,0 +1,34 @@
import {
Card,
CardContent,
CardFooter,
CardHeader,
} from "@/styles/base-rhea/ui/card"
import { Skeleton } from "@/styles/base-rhea/ui/skeleton"
const rows = [0, 1, 2, 3]
export function NotificationSettings() {
return (
<Card>
<CardHeader className="gap-2">
<Skeleton className="h-5 w-32 rounded-md" />
<Skeleton className="h-4 w-64 rounded-md" />
</CardHeader>
<CardContent className="flex flex-col gap-4">
{rows.map((row) => (
<div key={row} className="flex items-start gap-3">
<Skeleton className="size-4 rounded-sm" />
<div className="flex flex-1 flex-col gap-2">
<Skeleton className="h-4 w-40 rounded-md" />
<Skeleton className="h-3 w-56 rounded-md" />
</div>
</div>
))}
</CardContent>
<CardFooter>
<Skeleton className="h-9 w-full rounded-lg" />
</CardFooter>
</Card>
)
}

View File

@@ -0,0 +1,37 @@
import { Card, CardContent, CardHeader } from "@/styles/base-rhea/ui/card"
import { Skeleton } from "@/styles/base-rhea/ui/skeleton"
const rows = [0, 1, 2]
export function Payments() {
return (
<Card>
<CardHeader className="flex flex-col gap-3">
<div className="flex items-center gap-2">
<Skeleton className="h-4 w-12 rounded-md" />
<Skeleton className="size-1.5 rounded-full" />
<Skeleton className="size-7 rounded-md" />
<Skeleton className="size-1.5 rounded-full" />
<Skeleton className="h-4 w-20 rounded-md" />
</div>
</CardHeader>
<CardContent>
<div className="flex flex-col gap-2">
{rows.map((row) => (
<div
key={row}
className="flex items-center gap-3 rounded-xl bg-muted p-3"
>
<Skeleton className="size-9 rounded-lg bg-muted-foreground/15" />
<div className="flex flex-1 flex-col gap-2">
<Skeleton className="h-4 w-40 rounded-md bg-muted-foreground/15" />
<Skeleton className="h-3 w-56 rounded-md bg-muted-foreground/15" />
</div>
<Skeleton className="size-4 rounded-md bg-muted-foreground/15" />
</div>
))}
</div>
</CardContent>
</Card>
)
}

View File

@@ -0,0 +1,43 @@
import {
Card,
CardAction,
CardContent,
CardFooter,
CardHeader,
} from "@/styles/base-rhea/ui/card"
import { Skeleton } from "@/styles/base-rhea/ui/skeleton"
export function PayoutThreshold() {
return (
<Card>
<CardHeader className="gap-2">
<Skeleton className="h-5 w-44 rounded-md" />
<Skeleton className="h-4 w-72 rounded-md" />
</CardHeader>
<CardContent className="flex flex-col gap-4">
<div className="flex flex-col gap-2">
<Skeleton className="h-3 w-32 rounded-md" />
<Skeleton className="h-9 w-full rounded-lg" />
</div>
<div className="flex flex-col gap-3">
<div className="flex items-baseline justify-between">
<Skeleton className="h-3 w-40 rounded-md" />
<Skeleton className="h-7 w-24 rounded-md" />
</div>
<Skeleton className="h-2 w-full rounded-full" />
<div className="flex items-center justify-between">
<Skeleton className="h-3 w-16 rounded-md" />
<Skeleton className="h-3 w-20 rounded-md" />
</div>
</div>
<div className="flex flex-col gap-2">
<Skeleton className="h-3 w-16 rounded-md" />
<Skeleton className="h-[100px] w-full rounded-lg" />
</div>
</CardContent>
<CardFooter>
<Skeleton className="h-9 w-full rounded-lg" />
</CardFooter>
</Card>
)
}

View File

@@ -0,0 +1,54 @@
import {
Card,
CardContent,
CardFooter,
CardHeader,
} from "@/styles/base-rhea/ui/card"
import { Skeleton } from "@/styles/base-rhea/ui/skeleton"
const bars = [30, 70, 80, 60, 90, 75, 100, 85]
export function PowerUsage() {
return (
<Card>
<CardHeader className="gap-2">
<Skeleton className="h-5 w-32 rounded-md" />
<Skeleton className="h-4 w-24 rounded-md" />
</CardHeader>
<CardContent className="flex flex-col gap-4">
<div className="flex h-[140px] w-full items-end gap-2">
{bars.map((height, i) => (
<div
key={i}
className="flex h-full flex-1 flex-col justify-end gap-1.5"
>
<Skeleton
className="w-full rounded-t rounded-b-none"
style={{ height: `${height}%` }}
/>
<Skeleton className="mx-auto h-3 w-5 rounded-md" />
</div>
))}
</div>
<Skeleton className="h-px w-full rounded-none" />
<div className="grid grid-cols-2 gap-4">
<div className="flex flex-col gap-1.5">
<Skeleton className="h-3 w-28 rounded-md" />
<Skeleton className="h-5 w-20 rounded-md" />
</div>
<div className="flex flex-col gap-1.5">
<Skeleton className="h-3 w-20 rounded-md" />
<Skeleton className="h-5 w-24 rounded-md" />
</div>
</div>
</CardContent>
<CardFooter className="flex-col items-start gap-2">
<Skeleton className="h-3 w-24 rounded-md" />
<div className="flex w-full items-center gap-2">
<Skeleton className="h-2 flex-1 rounded-full" />
<Skeleton className="h-3 w-10 rounded-md" />
</div>
</CardFooter>
</Card>
)
}

View File

@@ -0,0 +1,17 @@
import { Card, CardContent, CardHeader } from "@/styles/base-rhea/ui/card"
import { Skeleton } from "@/styles/base-rhea/ui/skeleton"
export function QrConnect() {
return (
<Card>
<CardContent className="flex justify-center pt-6">
<Skeleton className="size-44 rounded-xl" />
</CardContent>
<CardHeader className="items-center gap-2 text-center">
<Skeleton className="h-5 w-56 rounded-md" />
<Skeleton className="h-4 w-64 rounded-md" />
<Skeleton className="h-4 w-48 rounded-md" />
</CardHeader>
</Card>
)
}

View File

@@ -0,0 +1,44 @@
import {
Card,
CardContent,
CardFooter,
CardHeader,
} from "@/styles/base-rhea/ui/card"
import { Skeleton } from "@/styles/base-rhea/ui/skeleton"
const rows = [0, 1]
export function SavingsTargets() {
return (
<Card>
<CardHeader className="gap-2">
<Skeleton className="h-5 w-36 rounded-md" />
<div className="flex flex-col gap-1.5">
<Skeleton className="h-4 w-full max-w-64 rounded-md" />
<Skeleton className="h-4 w-48 rounded-md" />
</div>
</CardHeader>
<CardContent>
<div className="flex flex-col gap-3">
{rows.map((row) => (
<div
key={row}
className="flex flex-col gap-3 rounded-xl bg-muted p-4"
>
<Skeleton className="h-3 w-24 rounded-md bg-muted-foreground/15" />
<Skeleton className="h-8 w-36 rounded-md bg-muted-foreground/15" />
<Skeleton className="h-2 w-full rounded-full bg-muted-foreground/15" />
<div className="flex items-center justify-between">
<Skeleton className="h-3 w-24 rounded-md bg-muted-foreground/15" />
<Skeleton className="h-3 w-20 rounded-md bg-muted-foreground/15" />
</div>
</div>
))}
</div>
</CardContent>
<CardFooter className="justify-center">
<Skeleton className="h-3 w-56 rounded-md" />
</CardFooter>
</Card>
)
}

View File

@@ -0,0 +1,39 @@
import { Card } from "@/styles/base-rhea/ui/card"
import { Skeleton } from "@/styles/base-rhea/ui/skeleton"
const groupA = [0, 1, 2, 3, 4]
const groupB = [0, 1, 2, 3, 4]
function NavSkeleton({ groups }: { groups: number[][] }) {
return (
<div className="flex flex-col gap-1 p-2">
{groups.map((items, gi) => (
<div key={gi} className="flex flex-col gap-1 px-2 py-1.5">
<Skeleton className="mb-1 h-3 w-20 rounded-md" />
{items.map((item) => (
<div key={item} className="flex items-center gap-2 px-2 py-2">
<Skeleton className="size-4 rounded-md" />
<Skeleton className="h-3 w-24 rounded-md" />
</div>
))}
{gi < groups.length - 1 && (
<Skeleton className="my-1 h-px w-full rounded-none" />
)}
</div>
))}
</div>
)
}
export function SidebarNav() {
return (
<div className="grid w-full items-start gap-4 xl:grid-cols-2 xl:gap-6">
<Card className="w-full overflow-hidden rounded-3xl py-0">
<NavSkeleton groups={[groupA, groupB]} />
</Card>
<Card className="hidden w-full overflow-hidden rounded-3xl py-0 xl:flex">
<NavSkeleton groups={[groupA, groupB]} />
</Card>
</div>
)
}

View File

@@ -0,0 +1,55 @@
import {
Card,
CardAction,
CardContent,
CardFooter,
CardHeader,
} from "@/styles/base-rhea/ui/card"
import { Skeleton } from "@/styles/base-rhea/ui/skeleton"
export function TransferFunds() {
return (
<Card>
<CardHeader className="gap-2">
<Skeleton className="h-5 w-36 rounded-md" />
<Skeleton className="h-4 w-64 rounded-md" />
<CardAction>
<Skeleton className="size-8 rounded-md" />
</CardAction>
</CardHeader>
<CardContent className="flex flex-col gap-4">
<div className="flex flex-col gap-2">
<Skeleton className="h-3 w-32 rounded-md" />
<Skeleton className="h-9 w-full rounded-lg" />
</div>
<div className="flex flex-col gap-2">
<Skeleton className="h-3 w-24 rounded-md" />
<Skeleton className="h-9 w-full rounded-lg" />
</div>
<div className="flex flex-col gap-2">
<Skeleton className="h-3 w-20 rounded-md" />
<Skeleton className="h-9 w-full rounded-lg" />
</div>
<div className="flex flex-col gap-3 rounded-xl bg-muted p-4">
<div className="flex items-center justify-between">
<Skeleton className="h-4 w-28 rounded-md bg-muted-foreground/15" />
<Skeleton className="h-4 w-24 rounded-md bg-muted-foreground/15" />
</div>
<Skeleton className="h-px w-full rounded-none bg-muted-foreground/15" />
<div className="flex items-center justify-between">
<Skeleton className="h-4 w-28 rounded-md bg-muted-foreground/15" />
<Skeleton className="h-4 w-12 rounded-md bg-muted-foreground/15" />
</div>
<Skeleton className="h-px w-full rounded-none bg-muted-foreground/15" />
<div className="flex items-center justify-between">
<Skeleton className="h-4 w-24 rounded-md bg-muted-foreground/15" />
<Skeleton className="h-4 w-20 rounded-md bg-muted-foreground/15" />
</div>
</div>
</CardContent>
<CardFooter>
<Skeleton className="h-9 w-full rounded-lg" />
</CardFooter>
</Card>
)
}

View File

@@ -0,0 +1,45 @@
import { Card, CardContent } from "@/styles/base-rhea/ui/card"
import { Skeleton } from "@/styles/base-rhea/ui/skeleton"
export function UIElements() {
return (
<Card className="w-full">
<CardContent className="flex flex-col gap-6">
<Skeleton className="h-8 w-full rounded-2xl" />
<div className="flex flex-wrap gap-2">
<Skeleton className="h-9 w-20 rounded-lg" />
<Skeleton className="h-9 w-24 rounded-lg" />
<Skeleton className="h-9 w-20 rounded-lg" />
</div>
<div className="flex flex-col gap-3">
<Skeleton className="h-9 w-full rounded-lg" />
<Skeleton className="h-20 w-full rounded-lg" />
</div>
<div className="flex items-center gap-2">
<div className="flex gap-2">
<Skeleton className="h-5 w-12 rounded-full" />
<Skeleton className="h-5 w-16 rounded-full" />
<Skeleton className="hidden h-5 w-14 rounded-full 4xl:block" />
</div>
<div className="ml-auto flex gap-3">
<Skeleton className="size-4 rounded-full" />
<Skeleton className="size-4 rounded-full" />
</div>
<div className="flex gap-3">
<Skeleton className="size-4 rounded-sm" />
<Skeleton className="hidden size-4 rounded-sm 4xl:block" />
</div>
<Skeleton className="ml-auto h-5 w-9 rounded-full 4xl:hidden" />
</div>
<div className="flex items-center gap-4">
<Skeleton className="h-9 w-24 rounded-lg" />
<div className="flex">
<Skeleton className="h-9 w-28 rounded-l-lg rounded-r-none" />
<Skeleton className="ml-px h-9 w-9 rounded-l-none rounded-r-lg" />
</div>
<Skeleton className="ml-auto hidden h-5 w-9 rounded-full 4xl:block" />
</div>
</CardContent>
</Card>
)
}