Import source: cshare-app/src/components/SkeletonLoader
Import the existing local project snapshot. This commit organizes existing files; it does not represent newly developed functionality.
This commit is contained in:
@@ -0,0 +1,115 @@
|
|||||||
|
export function Skeleton({ width, height, radius = 'var(--radius-sm)', style = {} }) {
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className="skeleton"
|
||||||
|
style={{
|
||||||
|
width: width ?? '100%',
|
||||||
|
height: height ?? '16px',
|
||||||
|
borderRadius: radius,
|
||||||
|
...style,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function SkeletonCard({ lines = 3, hasAvatar = false }) {
|
||||||
|
return (
|
||||||
|
<div style={{ padding: '24px' }}>
|
||||||
|
{hasAvatar && (
|
||||||
|
<div style={{ display: 'flex', alignItems: 'center', gap: '12px', marginBottom: '16px' }}>
|
||||||
|
<Skeleton width="40px" height="40px" radius="50%" />
|
||||||
|
<div style={{ flex: 1 }}>
|
||||||
|
<Skeleton width="60%" height="14px" style={{ marginBottom: '6px' }} />
|
||||||
|
<Skeleton width="40%" height="12px" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
{Array.from({ length: lines }).map((_, i) => (
|
||||||
|
<Skeleton
|
||||||
|
key={i}
|
||||||
|
width={i === lines - 1 ? '45%' : '100%'}
|
||||||
|
height="12px"
|
||||||
|
style={{ marginBottom: i < lines - 1 ? '8px' : 0 }}
|
||||||
|
/>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function SkeletonStatCards({ count = 3 }) {
|
||||||
|
return (
|
||||||
|
<div style={{
|
||||||
|
display: 'grid',
|
||||||
|
gridTemplateColumns: 'repeat(auto-fit, minmax(200px, 1fr))',
|
||||||
|
gap: '16px',
|
||||||
|
}}>
|
||||||
|
{Array.from({ length: count }).map((_, i) => (
|
||||||
|
<div
|
||||||
|
key={i}
|
||||||
|
className="card"
|
||||||
|
style={{ padding: '20px 24px' }}
|
||||||
|
>
|
||||||
|
<div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: '12px' }}>
|
||||||
|
<Skeleton width="80px" height="10px" />
|
||||||
|
<Skeleton width="32px" height="32px" radius="var(--radius-sm)" />
|
||||||
|
</div>
|
||||||
|
<Skeleton width="60%" height="36px" style={{ marginBottom: '8px' }} />
|
||||||
|
<Skeleton width="90px" height="12px" />
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function SkeletonFileRows({ count = 5 }) {
|
||||||
|
return (
|
||||||
|
<div style={{
|
||||||
|
background: 'var(--bg-elevated)',
|
||||||
|
border: '1px solid var(--border-subtle)',
|
||||||
|
borderRadius: 'var(--radius-lg)',
|
||||||
|
overflow: 'hidden',
|
||||||
|
}}>
|
||||||
|
<div style={{
|
||||||
|
display: 'grid',
|
||||||
|
gridTemplateColumns: '1fr 100px 120px 80px 80px 120px',
|
||||||
|
gap: '12px',
|
||||||
|
padding: '14px 20px',
|
||||||
|
borderBottom: '1px solid var(--border-subtle)',
|
||||||
|
}}>
|
||||||
|
{['File', 'Size', 'Expiry', 'Views', 'DL', 'Actions'].map((h) => (
|
||||||
|
<Skeleton key={h} width="100%" height="10px" />
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
{Array.from({ length: count }).map((_, i) => (
|
||||||
|
<div
|
||||||
|
key={i}
|
||||||
|
style={{
|
||||||
|
display: 'grid',
|
||||||
|
gridTemplateColumns: '1fr 100px 120px 80px 80px 120px',
|
||||||
|
gap: '12px',
|
||||||
|
alignItems: 'center',
|
||||||
|
padding: '16px 20px',
|
||||||
|
borderBottom: '1px solid var(--border-subtle)',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<div style={{ display: 'flex', alignItems: 'center', gap: '10px' }}>
|
||||||
|
<Skeleton width="36px" height="36px" radius="var(--radius-sm)" />
|
||||||
|
<div style={{ flex: 1 }}>
|
||||||
|
<Skeleton width="70%" height="14px" style={{ marginBottom: '4px' }} />
|
||||||
|
<Skeleton width="40%" height="10px" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<Skeleton width="60px" height="12px" />
|
||||||
|
<Skeleton width="80px" height="12px" />
|
||||||
|
<Skeleton width="24px" height="12px" />
|
||||||
|
<Skeleton width="24px" height="12px" />
|
||||||
|
<div style={{ display: 'flex', gap: '4px' }}>
|
||||||
|
<Skeleton width="28px" height="28px" radius="var(--radius-sm)" />
|
||||||
|
<Skeleton width="28px" height="28px" radius="var(--radius-sm)" />
|
||||||
|
<Skeleton width="28px" height="28px" radius="var(--radius-sm)" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user