import React, { FC } from "react"; import { Text, TouchableOpacity, View } from "react-native"; import lineColorList from "@/assets/originData/lineColorList"; import { lightColors, useThemeColors } from "@/lib/theme"; type Props = { item: any[]; // StationProps[] (路線をまたぐ同名駅の配列) width: number; height: number; onPress?: () => void; }; /** * グリッド表示専用の軽量駅カード。 * Sign コンポーネントを使わず、駅番号・駅名をシンプルに描画するだけで * hooks・Lottie・前後駅計算などを一切持たない純粋な表示コンポーネント。 */ export const GridMiniSign: FC = React.memo(({ item, width, height, onPress }) => { const { fixed } = useThemeColors(); const station = item[0]; const isSpot = !!station.isSpot; const lineId = isSpot ? "" : (station.StationNumber?.slice(0, 1) ?? "Y"); const lineNum = isSpot ? "" : (station.StationNumber?.slice(1) ?? ""); const lineColor = lineColorList[lineId] ?? fixed.primary; const rawName = station.Station_JP ?? ""; const displayName = rawName.startsWith(".") ? rawName.slice(1) : rawName; const nameLen = displayName.length; const nameFontSize = nameLen <= 3 ? 22 : nameLen <= 5 ? 16 : 12; return ( {/* 駅番号バッジ */} {lineId + "\n" + lineNum} {/* 駅名(日本語・英語) */} {displayName} {station.Station_EN} {/* 下帯 */} ); });