// From DeskPark apps/web/src/components/Suit.tsx (MIT, see viewer/NOTICE), as it is. import type { Suit as SuitType } from './PlayingCard'; /** 花色矢量图形:跨平台一致(避免 Unicode 花色在部分手机上被渲染成 emoji)。 */ const PATHS: Record, string> = { H: 'M50 90C22 68 5 51 5 31 5 16 16 6 30 6c9 0 16 5 20 13 4-8 11-13 20-13 14 0 25 10 25 25 0 20-17 37-45 59z', D: 'M50 3c11 17 24 32 39 47-15 15-28 30-39 47C39 80 26 65 11 50 26 35 39 20 50 3z', S: 'M50 4c13 19 43 33 43 57 0 14-10 22-22 22-8 0-14-4-17-10 1 10 5 17 13 22H33c8-5 12-12 13-22-3 6-9 10-17 10C17 83 7 75 7 61 7 37 37 23 50 4z', C: 'M50 7a19 19 0 0 1 15 30.6A19 19 0 1 1 55.5 70c1.3 10 5 18.5 13.5 24h-38c8.5-5.5 12.2-14 13.5-24A19 19 0 1 1 35 37.6 19 19 0 0 1 50 7z', }; export function SuitIcon({ suit, size = '1em', className, }: { suit: SuitType; size?: string | number; className?: string; }) { if (suit === 'J') return null; return ( ); } /** 卡面底色,用于图标中的镂空细节 */ const CUT = { fill: 'var(--card-face)' }; /** 人头牌图标:J 羽毛帽、Q 圆珠冠、K 十字王冠(取代重复的字母,避免与左上角点数重复) */ export function CourtIcon({ rank, className }: { rank: number; className?: string }) { return ( ); } /** 王牌图标:星芒(与人头牌的王冠明显区分) */ export function JesterIcon({ className }: { className?: string }) { return ( ); }