fix: input alignment

This commit is contained in:
Alexej Wolff
2026-02-11 01:07:43 +01:00
parent c404b1e17c
commit 2bfe8d95cc
9 changed files with 169 additions and 91 deletions
+1 -63
View File
@@ -1,9 +1,5 @@
import { useState, useEffect, useRef } from "react";
import {
useParams,
Link,
useSearchParams,
} from "react-router-dom";
import { useParams, Link, useSearchParams } from "react-router-dom";
import ReactMarkdown from "react-markdown";
import { useAuth } from "../contexts/AuthContext";
import {
@@ -44,61 +40,6 @@ function formatTokens(tokens: number): string {
return tokens.toString();
}
// Пытаемся определить локацию из последних сообщений
function detectLocation(messages: ChatMessage[]): string {
if (!messages || messages.length === 0) return "Неизвестно";
// Берём последние 3 сообщения ассистента
const recentAssistant = messages
.filter((m) => m.role === "assistant")
.slice(-3)
.map((m) => m.content)
.join(" ");
// Паттерны для определения локации
const locationPatterns = [
/(?:находи(?:тесь|шься)|оказыва(?:етесь|ешься)|стои(?:те|шь))\s+(?:в|на|у)\s+([^.,!?]+)/i,
/(?:вошл[аи]?|входи(?:те|шь)|попада(?:ете|ешь))\s+(?:в|на)\s+([^.,!?]+)/i,
/(?:прибыл[аи]?|приход(?:ите|ишь)|добрал(?:ись|ась|ся))\s+(?:в|на|до)\s+([^.,!?]+)/i,
/(?:комнат[аеуы]|зал[аеуы]?|пещер[аеуы]|лес[ау|замок|двор(?:ец)?|тавер[нуыа]|город[ауе]?|деревн[яюией]|тронн[ыйая]|подземель[яеи])\s*([^.,!?]*)/i,
];
for (const pattern of locationPatterns) {
const match = recentAssistant.match(pattern);
if (match && match[1]) {
// Чистим и обрезаем результат
let location = match[1].trim();
if (location.length > 25) location = location.substring(0, 25) + "...";
return location;
}
}
// Простой поиск ключевых слов
const simpleLocations: [RegExp, string][] = [
[/тронн(?:ый|ого|ом)\s*зал/i, "Тронный зал"],
[/тавер[нуыа]/i, "Таверна"],
[/замок|замк[ауе]/i, "Замок"],
[/лес[ау]?/i, "Лес"],
[/пещер[аеуы]/i, "Пещера"],
[/город[ауе]?/i, "Город"],
[/деревн[яюией]/i, "Деревня"],
[/подземель[яеи]/i, "Подземелье"],
[/двор(?:ец|ц[ауе])/i, "Дворец"],
[/рын(?:ок|к[ауе])/i, "Рынок"],
[/храм[ауе]?/i, "Храм"],
[/библиотек/i, "Библиотека"],
[/казарм/i, "Казармы"],
];
for (const [pattern, name] of simpleLocations) {
if (pattern.test(recentAssistant)) {
return name;
}
}
return "Неизвестно";
}
export default function GamePage() {
const { id } = useParams<{ id: string }>();
const [searchParams] = useSearchParams();
@@ -409,9 +350,6 @@ export default function GamePage() {
<span className="stat-badge tokens">
🎟 {formatTokens(estimateTokens(session?.messages || []))}
</span>
<span className="stat-badge location">
📍 {detectLocation(session?.messages || [])}
</span>
</div>
</header>