Import source: cshare-app/src/components/StorageBar
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,61 @@
|
||||
import { formatFileSize } from '../data/mockData';
|
||||
|
||||
export function StorageBar({ used, total, byType }) {
|
||||
const pct = Math.min(100, (used / total) * 100);
|
||||
|
||||
return (
|
||||
<div className="card" style={{
|
||||
padding: '20px 24px',
|
||||
animation: 'fadeInUp 0.4s 0.3s ease both',
|
||||
}}>
|
||||
<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: '12px' }}>
|
||||
<span style={{
|
||||
fontSize: '0.6875rem', color: 'var(--text-muted)', textTransform: 'uppercase',
|
||||
letterSpacing: '0.08em', fontFamily: 'var(--font-heading)', fontWeight: 600,
|
||||
}}>
|
||||
Storage Used
|
||||
</span>
|
||||
<span style={{
|
||||
fontSize: '0.8125rem', fontFamily: 'var(--font-heading)', fontWeight: 600,
|
||||
color: pct > 85 ? 'var(--danger)' : 'var(--accent)',
|
||||
}}>
|
||||
{formatFileSize(used)} / {formatFileSize(total)}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
{/* Segmented bar */}
|
||||
<div style={{
|
||||
height: '8px', borderRadius: '4px', background: 'var(--bg-surface)',
|
||||
overflow: 'hidden', display: 'flex', marginBottom: '14px',
|
||||
}}>
|
||||
{Object.entries(byType).map(([label, { size, color }]) => {
|
||||
const segPct = (size / total) * 100;
|
||||
return segPct > 0 ? (
|
||||
<div
|
||||
key={label}
|
||||
style={{
|
||||
width: `${segPct}%`,
|
||||
height: '100%',
|
||||
background: color,
|
||||
transition: 'width 0.8s cubic-bezier(0.4, 0, 0.2, 1)',
|
||||
}}
|
||||
title={`${label}: ${formatFileSize(size)}`}
|
||||
/>
|
||||
) : null;
|
||||
})}
|
||||
</div>
|
||||
|
||||
{/* Legend */}
|
||||
<div style={{ display: 'flex', flexWrap: 'wrap', gap: '12px' }}>
|
||||
{Object.entries(byType).map(([label, { size, color }]) => (
|
||||
<div key={label} style={{ display: 'flex', alignItems: 'center', gap: '6px' }}>
|
||||
<div style={{ width: '8px', height: '8px', borderRadius: '2px', background: color }} />
|
||||
<span style={{ fontSize: '0.6875rem', color: 'var(--text-muted)' }}>
|
||||
{label} <span style={{ color: 'var(--text-secondary)' }}>{formatFileSize(size)}</span>
|
||||
</span>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user