/** * 알림 팝업 표시 방식 미니 아이콘 (위치 + 배치) */ import React from 'react'; import type { TradeAlertPopupLayout, TradeAlertPopupPosition } from '../utils/tradeAlertPopupLayout'; interface Props { position: TradeAlertPopupPosition; layout: TradeAlertPopupLayout; size?: number; className?: string; } /** 화면 프레임 안 카드 배치를 그린 24×18 미니 프리뷰 */ const ICON_H = 18; function slotOrigin( position: TradeAlertPopupPosition, cols: number, rows: number, ): { x: number; y: number } { const blockW = cols === 1 ? 5 : cols === 3 ? 9.4 : 6.2; const blockH = rows === 1 ? 3.2 : rows === 3 ? 10.2 : 6.2; switch (position) { case 'left': return { x: 2, y: (ICON_H - blockH) / 2 }; case 'bottom': return { x: (24 - blockW) / 2, y: ICON_H - blockH - 1.5 }; case 'right': default: return { x: 24 - blockW - 2, y: (ICON_H - blockH) / 2 }; } } export const TradeAlertPopupModeIcon: React.FC = ({ position, layout, size = 22, className, }) => { const w = 24; const h = ICON_H; const cards: React.ReactNode[] = []; const card = (x: number, y: number, cw: number, ch: number, key: string) => ( ); if (layout === 'single') { const slots = slotOrigin(position, 1, 1); cards.push(card(slots.x, slots.y, 5, 4, 's')); } else if (layout === 'strip') { const o = slotOrigin(position, 3, 1); for (let i = 0; i < 3; i++) { cards.push(card(o.x + i * 3.2, o.y, 2.6, 3.2, `h${i}`)); } } else if (layout === 'grid') { const o = slotOrigin(position, 2, 2); for (let r = 0; r < 2; r++) { for (let c = 0; c < 2; c++) { cards.push(card(o.x + c * 3.2, o.y + r * 3.4, 2.6, 2.8, `g${r}${c}`)); } } } else { // stack const o = slotOrigin(position, 1, 3); for (let i = 0; i < 3; i++) { cards.push(card(o.x, o.y + i * 3.4, 5, 2.8, `v${i}`)); } } return ( {cards} ); }; export default TradeAlertPopupModeIcon;