refactor: 重构纹理图集工具,实现浏览器端实时处理

将合图处理从服务端迁移到浏览器端,使用 Web Worker 实现高性能打包算法,新增三栏布局界面和精灵动画预览功能

- 新增 atlasStore 状态管理,实现文件、配置、结果的统一管理
- 新增 atlas-packer 打包算法库(MaxRects/Shelf),支持浏览器端快速合图
- 新增 atlas-worker Web Worker,实现异步打包处理避免阻塞 UI
- 新增三栏布局组件:FileListPanel、CanvasPreview、AtlasConfigPanel
- 新增 AnimationPreviewDialog 支持精灵动画帧预览和帧率控制
- 优化所有工具页面的响应式布局和交互体验

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-26 22:05:25 +08:00
parent 663917f663
commit 140608845a
27 changed files with 4034 additions and 499 deletions

View File

@@ -1,11 +1,14 @@
"use client";
import Link from "next/link";
import { usePathname } from "next/navigation";
import { Sparkles } from "lucide-react";
import { useEffect, useMemo, useState } from "react";
import { useTranslation, getServerTranslations } from "@/lib/i18n";
import { cn } from "@/lib/utils";
export function Footer() {
const pathname = usePathname();
const [mounted, setMounted] = useState(false);
const { t } = useTranslation();
@@ -26,8 +29,14 @@ export function Footer() {
[mounted]
);
// Check if we're in the dashboard area (tools pages)
const isDashboard = pathname?.startsWith("/tools");
return (
<footer className="border-t border-white/5 bg-background/50">
<footer className={cn(
"border-t border-white/5 bg-background/50",
isDashboard && "lg:ml-64"
)}>
<div className="container py-12">
<div className="grid gap-10 md:grid-cols-[1.5fr_1fr]">
<div>