/**
* GUARDiA Messenger — 라인 아이콘 컴포넌트 (React Native)
* react-native-svg 없이 View + StyleSheet만 사용하여 선 아이콘을 구현.
* 폐쇄망/온프레미스 환경 호환.
* stroke 스타일은 View border로 표현, 복잡한 패스는 Text 유니코드 대체.
*/
import { View, StyleSheet, Text } from 'react-native'
interface Props {
name: keyof typeof ICONS
size?: number
color?: string
}
/** 아이콘 이름 → 렌더 함수 맵 */
const ICONS = {
dashboard: (s: number, c: string) => ,
sr: (s: number, c: string) => ,
chat: (s: number, c: string) => ,
bell: (s: number, c: string) => ,
settings: (s: number, c: string) => ,
server: (s: number, c: string) => ,
alert: (s: number, c: string) => ,
check: (s: number, c: string) => ,
sync: (s: number, c: string) => ,
user: (s: number, c: string) => ,
lock: (s: number, c: string) => ,
globe: (s: number, c: string) => ,
mail: (s: number, c: string) => ,
send: (s: number, c: string) => ,
mic: (s: number, c: string) => ,
building: (s: number, c: string) => ,
ai: (s: number, c: string) => ,
zap: (s: number, c: string) => ,
} as const
export default function LineIcon({ name, size = 22, color = '#00A0C8' }: Props) {
const renderer = ICONS[name]
if (!renderer) return null
return renderer(size, color)
}
/* ─── 개별 아이콘 구현 ───────────────────────────── */
function DashboardIcon({ size, color }: { size: number; color: string }) {
const b = size * 0.07
return (
)
}
function SrIcon({ size, color }: { size: number; color: string }) {
const b = size * 0.07
return (
)
}
function ChatIcon({ size, color }: { size: number; color: string }) {
const b = size * 0.07
return (
)
}
function BellIcon({ size, color }: { size: number; color: string }) {
const b = size * 0.07
return (
)
}
function SettingsIcon({ size, color }: { size: number; color: string }) {
const b = size * 0.07
const r = (size - b * 2) / 2
const innerR = r * 0.3
return (
)
}
function ServerIcon({ size, color }: { size: number; color: string }) {
const b = size * 0.07
return (
)
}
function AlertIcon({ size, color }: { size: number; color: string }) {
const b = size * 0.07
return (
)
}
function CheckIcon({ size, color }: { size: number; color: string }) {
const b = size * 0.07
return (
)
}
function SyncIcon({ size, color }: { size: number; color: string }) {
const b = size * 0.07
return (
)
}
function UserIcon({ size, color }: { size: number; color: string }) {
const b = size * 0.07
return (
)
}
function LockIcon({ size, color }: { size: number; color: string }) {
const b = size * 0.07
return (
)
}
function GlobeIcon({ size, color }: { size: number; color: string }) {
const b = size * 0.07
return (
)
}
function MailIcon({ size, color }: { size: number; color: string }) {
const b = size * 0.07
return (
)
}
function SendIcon({ size, color }: { size: number; color: string }) {
return (
➤
)
}
function MicIcon({ size, color }: { size: number; color: string }) {
const b = size * 0.07
return (
)
}
function BuildingIcon({ size, color }: { size: number; color: string }) {
const b = size * 0.07
return (
)
}
function AiIcon({ size, color }: { size: number; color: string }) {
const b = size * 0.07
return (
{[0,1,2].map(i => (
))}
)
}
function ZapIcon({ size, color }: { size: number; color: string }) {
return (
⚡
)
}