123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- '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
|