|
'use client' |
|
|
|
import type { FC } from 'react' |
|
import { init } from 'emoji-mart' |
|
import data from '@emoji-mart/data' |
|
import style from './style.module.css' |
|
import classNames from '@/utils/classnames' |
|
import type { AppIconType } from '@/types/app' |
|
|
|
init({ data }) |
|
|
|
export type AppIconProps = { |
|
size?: 'xs' | 'tiny' | 'small' | 'medium' | 'large' |
|
rounded?: boolean |
|
iconType?: AppIconType | null |
|
icon?: string |
|
background?: string | null |
|
imageUrl?: string | null |
|
className?: string |
|
innerIcon?: React.ReactNode |
|
onClick?: () => void |
|
} |
|
|
|
const AppIcon: FC<AppIconProps> = ({ |
|
size = 'medium', |
|
rounded = false, |
|
iconType, |
|
icon, |
|
background, |
|
imageUrl, |
|
className, |
|
innerIcon, |
|
onClick, |
|
}) => { |
|
const wrapperClassName = classNames( |
|
style.appIcon, |
|
size !== 'medium' && style[size], |
|
rounded && style.rounded, |
|
className ?? '', |
|
'overflow-hidden', |
|
) |
|
|
|
const isValidImageIcon = iconType === 'image' && imageUrl |
|
|
|
return <span |
|
className={wrapperClassName} |
|
style={{ background: isValidImageIcon ? undefined : (background || '#FFEAD5') }} |
|
onClick={onClick} |
|
> |
|
{isValidImageIcon |
|
? <img src={imageUrl} className="w-full h-full" alt="app icon" /> |
|
: (innerIcon || ((icon && icon !== '') ? <em-emoji id={icon} /> : <em-emoji id='🤖' />)) |
|
} |
|
</span> |
|
} |
|
|
|
export default AppIcon |
|
|