refactor(StorageCleaner): improve style consistency and checkbox alignment

- Group storage options, auto-refresh toggle, and clean button into unified card
- Remove card wrappers from StorageOptionsGrid and AutoRefreshToggle (now sections within parent card)
- Align OptionItem and Select All checkboxes with consistent px-3.5 padding
- Distinguish indeterminate vs checked checkbox states visually
- Standardize spacing (space-y-4), add select-none to page root
- Fix import path for StorageCleanerConfirm to relative ./
This commit is contained in:
雨霖铃
2026-05-28 23:43:02 +08:00
parent 4f7e402dba
commit 77168e2652
4 changed files with 58 additions and 57 deletions
@@ -41,15 +41,9 @@ export default function StorageOptionsGrid({
};
return (
<div
className={cn(
'w-full rounded-xl border border-border bg-card text-card-foreground shadow-sm overflow-hidden',
className,
)}
{...props}
>
<div className="p-3">
<div className="grid grid-cols-2 gap-2.5 items-stretch">
<div className={cn('w-full overflow-hidden', className)} {...props}>
<div className="px-0 pt-3.5 pb-2">
<div className="grid grid-cols-2 gap-2 items-stretch">
{optionKeys.map(({ key, isCount }) => (
<OptionItem
key={key}
@@ -65,9 +59,9 @@ export default function StorageOptionsGrid({
<div
onClick={handleToggleAll}
className="border-t border-border flex justify-between items-center px-4 py-2.5 bg-muted/20 hover:bg-muted/50 cursor-pointer select-none"
className="border-t border-border flex justify-between items-center px-3.5 py-2.5 bg-muted/20 hover:bg-muted/40 cursor-pointer select-none transition-colors"
>
<Label className="text-xs font-bold text-muted-foreground/90 cursor-pointer">
<Label className="text-xs font-bold text-muted-foreground/90 cursor-pointer tracking-wide uppercase">
{t('storageCleaner:selectAll')}
</Label>
@@ -75,7 +69,7 @@ export default function StorageOptionsGrid({
checked={allSelected ? true : someSelected ? 'indeterminate' : false}
onClick={(e) => e.stopPropagation()}
onCheckedChange={(checked) => onSelectAll(checked === true)}
className="h-4 w-4 shrink-0 rounded border-input data-[state=checked]:bg-primary data-[state=indeterminate]:bg-primary"
className="h-4 w-4 shrink-0 rounded border-input data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground data-[state=indeterminate]:bg-muted-foreground/40"
/>
</div>
</div>