feat: Add professional glitch-effect loading animation with minimum duration control

Implement unified LoadingOverlay component with advanced glitch effects:

Animation features:
- Glitch text effect with RGB chromatic aberration
- Dynamic clip-path based text slicing animations
- Random flicker and screen tearing effects
- Horizontal glitch block artifacts
- CRT-style scan line with color gradient
- Fractal noise overlay for authenticity

Technical improvements:
- Minimum display duration (600-800ms) to prevent flickering
- Smooth fade-in/fade-out transitions
- Consistent TERMIX branding across all loading states
- Multiple animation layers with different timing
- Mix-blend-mode and advanced CSS filters

Applied to:
- SSH terminal connection loading
- File manager directory loading
- Server metrics loading

Brand enhancement:
- Uses TERMIX monospace typography
- Cyberpunk-style visual effects
- Professional loading experience
- Stronger brand recognition

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
ZacharyZcR
2025-11-09 21:00:31 +08:00
parent cfed3deffb
commit bc02acf650
4 changed files with 511 additions and 34 deletions

View File

@@ -24,6 +24,7 @@ import {
} from "lucide-react";
import { useTranslation } from "react-i18next";
import type { FileItem } from "../../../types/index.js";
import { LoadingOverlay } from "@/ui/components/LoadingOverlay";
interface CreateIntent {
id: string;
@@ -871,19 +872,8 @@ export function FileManagerGrid({
onUndo,
]);
if (isLoading) {
return (
<div className="h-full flex items-center justify-center">
<div className="text-center">
<div className="animate-spin rounded-full h-8 w-8 border-b-2 border-blue-500 mx-auto mb-2"></div>
<p className="text-sm text-muted-foreground">{t("common.loading")}</p>
</div>
</div>
);
}
return (
<div className="h-full flex flex-col bg-dark-bg overflow-hidden">
<div className="h-full flex flex-col bg-dark-bg overflow-hidden relative">
<div className="flex-shrink-0 border-b border-dark-border">
<div className="flex items-center gap-1 p-2 border-b border-dark-border">
<button
@@ -1330,6 +1320,13 @@ export function FileManagerGrid({
</div>,
document.body,
)}
<LoadingOverlay
visible={isLoading}
minDuration={600}
message={t("common.loading")}
showLogo={true}
/>
</div>
);
}