mirror of
https://github.com/supabase/supabase.git
synced 2026-10-17 07:09:07 +03:00
## Context This is largely just a mechanical change here: Opting to use lucide icons with the `Icon` suffix across all icon imports within `studio` - so that it’s clearer which components are icons + reduces the possibility of name collision with our own components - e.g <User /> vs <UserIcon /> Also added a eslint rule for this: <img width="1069" height="167" alt="image" src="https://github.com/user-attachments/assets/7f36f443-5ca2-4bf6-8d22-86e774513bfc" /> And updated `AGENTS.md` as such: ``` Icons come from `lucide-react`, always imported with the `Icon` suffix (`import { CheckIcon, Trash2Icon } from 'lucide-react'`) — never the bare names (`Check`) or `Check as CheckIcon` aliases (lint-enforced). ```
76 lines
1.7 KiB
TypeScript
76 lines
1.7 KiB
TypeScript
import { FilesBucket as FilesBucketIcon } from 'icons'
|
|
import {
|
|
FileIcon,
|
|
FilmIcon,
|
|
FolderOpenIcon,
|
|
ImageIcon,
|
|
LoaderCircleIcon,
|
|
MusicIcon,
|
|
} from 'lucide-react'
|
|
|
|
import { STORAGE_ROW_STATUS, STORAGE_ROW_TYPES, STORAGE_VIEWS } from './Storage.constants'
|
|
|
|
export const ICON_STROKE_WIDTH = 1.5
|
|
|
|
interface StorageRowIconProps {
|
|
view: STORAGE_VIEWS
|
|
status: STORAGE_ROW_STATUS
|
|
fileType: string
|
|
isOpened?: boolean
|
|
mimeType: string | undefined
|
|
}
|
|
|
|
export const StorageRowIcon = ({
|
|
view,
|
|
status,
|
|
fileType,
|
|
isOpened = false,
|
|
mimeType,
|
|
}: StorageRowIconProps) => {
|
|
if (view === STORAGE_VIEWS.LIST && status === STORAGE_ROW_STATUS.LOADING) {
|
|
return (
|
|
<LoaderCircleIcon
|
|
size={14}
|
|
strokeWidth={ICON_STROKE_WIDTH}
|
|
className="animate-spin text-foreground-lighter"
|
|
/>
|
|
)
|
|
}
|
|
|
|
if (fileType === STORAGE_ROW_TYPES.FOLDER) {
|
|
return isOpened ? (
|
|
<FolderOpenIcon
|
|
size={16}
|
|
strokeWidth={ICON_STROKE_WIDTH}
|
|
className="text-foreground-lighter"
|
|
/>
|
|
) : (
|
|
<FilesBucketIcon
|
|
size={16}
|
|
strokeWidth={ICON_STROKE_WIDTH}
|
|
className="text-foreground-lighter"
|
|
/>
|
|
)
|
|
}
|
|
|
|
if (mimeType?.includes('image')) {
|
|
return (
|
|
<ImageIcon size={16} strokeWidth={ICON_STROKE_WIDTH} className="text-foreground-lighter" />
|
|
)
|
|
}
|
|
|
|
if (mimeType?.includes('audio')) {
|
|
return (
|
|
<MusicIcon size={16} strokeWidth={ICON_STROKE_WIDTH} className="text-foreground-lighter" />
|
|
)
|
|
}
|
|
|
|
if (mimeType?.includes('video')) {
|
|
return (
|
|
<FilmIcon size={16} strokeWidth={ICON_STROKE_WIDTH} className="text-foreground-lighter" />
|
|
)
|
|
}
|
|
|
|
return <FileIcon size={16} strokeWidth={ICON_STROKE_WIDTH} className="text-foreground-lighter" />
|
|
}
|