import { TooltipPosition, WdEveEntityPortrait, WdEveEntityPortraitSize, WdEveEntityPortraitType, WdTooltipWrapper, } from '@/hooks/Mapper/components/ui-kit'; import { SystemView } from '@/hooks/Mapper/components/ui-kit/SystemView'; import { emitMapEvent } from '@/hooks/Mapper/events'; import { isDocked } from '@/hooks/Mapper/helpers/isDocked.ts'; import { CharacterTypeRaw, WithIsOwnCharacter } from '@/hooks/Mapper/types'; import { WithClassName } from '@/hooks/Mapper/types/common.ts'; import { Commands } from '@/hooks/Mapper/types/mapHandlers'; import clsx from 'clsx'; import { useCallback } from 'react'; import classes from './CharacterCard.module.scss'; export type CharacterCardProps = { compact?: boolean; showSystem?: boolean; showTicker?: boolean; showShip?: boolean; showShipName?: boolean; useSystemsCache?: boolean; showCorporationLogo?: boolean; showAllyLogo?: boolean; showAllyLogoPlaceholder?: boolean; simpleMode?: boolean; } & WithIsOwnCharacter & WithClassName; type CharacterCardInnerProps = CharacterCardProps & CharacterTypeRaw; const SHIP_NAME_RX = /u'|'/g; export const getShipName = (name: string) => { return name .replace(SHIP_NAME_RX, '') .replace(/\\u([\dA-Fa-f]{4})/g, (_, grp) => String.fromCharCode(parseInt(grp, 16))) .replace(/\\x([\dA-Fa-f]{2})/g, (_, grp) => String.fromCharCode(parseInt(grp, 16))); }; export const CharacterCard = ({ simpleMode, compact = false, isOwn, showSystem, showShip, showShipName, showCorporationLogo, showAllyLogo, showAllyLogoPlaceholder, showTicker, useSystemsCache, className, ...char }: CharacterCardInnerProps) => { const handleSelect = useCallback(() => { emitMapEvent({ name: Commands.centerSystem, data: char?.location?.solar_system_id?.toString(), }); }, [char]); const shipNameText = char.ship?.ship_name ? getShipName(char.ship.ship_name) : ''; const tickerText = char.alliance_id ? char.alliance_ticker : char.corporation_ticker; const shipType = char.ship?.ship_type_info?.name; const locationShown = showSystem && char.location?.solar_system_id; // INFO: Simple mode show only name and icon of ally/corp. By default it compact view if (simpleMode) { return (