easyshell/public/logo.svg
Ethanfly c0fe5b3321 Implement SFTP functionality and enhance UI/UX
- Added SFTP file management capabilities including list, upload, download, delete, and directory operations.
- Integrated SFTP progress callbacks to provide real-time feedback during file transfers.
- Updated the UI to include a dedicated SFTP browser and host information panel.
- Enhanced the sidebar and title bar with improved styling and animations for a cyberpunk theme.
- Refactored host management to support editing and connecting to hosts with a more intuitive interface.
- Updated package dependencies to support new features and improve performance.
2025-12-29 13:50:23 +08:00

109 lines
4.0 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<defs>
<!-- 主渐变 - 青色到紫色 -->
<linearGradient id="mainGradient" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#00f5ff;stop-opacity:1" />
<stop offset="50%" style="stop-color:#a855f7;stop-opacity:1" />
<stop offset="100%" style="stop-color:#ff6b35;stop-opacity:1" />
</linearGradient>
<!-- 发光效果 -->
<filter id="glow" x="-50%" y="-50%" width="200%" height="200%">
<feGaussianBlur stdDeviation="8" result="coloredBlur"/>
<feMerge>
<feMergeNode in="coloredBlur"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
<!-- 外发光 -->
<filter id="outerGlow" x="-100%" y="-100%" width="300%" height="300%">
<feGaussianBlur stdDeviation="12" result="blur"/>
<feFlood flood-color="#00f5ff" flood-opacity="0.6"/>
<feComposite in2="blur" operator="in"/>
<feMerge>
<feMergeNode/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
<!-- 内部渐变 -->
<linearGradient id="shellGradient" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" style="stop-color:#00f5ff;stop-opacity:1" />
<stop offset="100%" style="stop-color:#a855f7;stop-opacity:1" />
</linearGradient>
<!-- 背景渐变 -->
<radialGradient id="bgGradient" cx="50%" cy="50%" r="50%">
<stop offset="0%" style="stop-color:#1a1a2e;stop-opacity:1" />
<stop offset="100%" style="stop-color:#0a0a15;stop-opacity:1" />
</radialGradient>
</defs>
<!-- 背景圆形 -->
<circle cx="256" cy="256" r="250" fill="url(#bgGradient)" stroke="url(#mainGradient)" stroke-width="4"/>
<!-- 六边形装饰框 -->
<polygon
points="256,40 430,130 430,310 256,400 82,310 82,130"
fill="none"
stroke="url(#mainGradient)"
stroke-width="3"
opacity="0.5"
/>
<!-- 内部六边形 -->
<polygon
points="256,80 390,150 390,290 256,360 122,290 122,150"
fill="none"
stroke="#00f5ff"
stroke-width="2"
opacity="0.3"
/>
<!-- 终端窗口背景 -->
<rect x="120" y="140" width="272" height="200" rx="12" ry="12"
fill="#0d1117" stroke="url(#shellGradient)" stroke-width="3" filter="url(#outerGlow)"/>
<!-- 终端标题栏 -->
<rect x="120" y="140" width="272" height="32" rx="12" ry="12" fill="#161b22"/>
<rect x="120" y="160" width="272" height="12" fill="#161b22"/>
<!-- 窗口按钮 -->
<circle cx="142" cy="156" r="6" fill="#ff5f56"/>
<circle cx="162" cy="156" r="6" fill="#ffbd2e"/>
<circle cx="182" cy="156" r="6" fill="#27ca40"/>
<!-- Shell 提示符 > -->
<g filter="url(#glow)">
<path d="M160 220 L200 250 L160 280"
fill="none"
stroke="#00f5ff"
stroke-width="12"
stroke-linecap="round"
stroke-linejoin="round"/>
</g>
<!-- 光标闪烁线 -->
<rect x="220" y="235" width="120" height="30" rx="4" fill="url(#shellGradient)" opacity="0.9" filter="url(#glow)"/>
<!-- 装饰性扫描线 -->
<line x1="140" y1="300" x2="372" y2="300" stroke="#00f5ff" stroke-width="1" opacity="0.5"/>
<line x1="140" y1="310" x2="320" y2="310" stroke="#a855f7" stroke-width="1" opacity="0.3"/>
<!-- 底部装饰点 -->
<circle cx="256" cy="420" r="8" fill="#00f5ff" filter="url(#glow)"/>
<circle cx="220" cy="430" r="4" fill="#a855f7" opacity="0.7"/>
<circle cx="292" cy="430" r="4" fill="#ff6b35" opacity="0.7"/>
<!-- 顶部装饰 -->
<polygon points="256,60 266,80 246,80" fill="#00f5ff" filter="url(#glow)"/>
<!-- 角落装饰 -->
<path d="M80 180 L80 140 L120 140" fill="none" stroke="#00f5ff" stroke-width="2" opacity="0.6"/>
<path d="M432 180 L432 140 L392 140" fill="none" stroke="#a855f7" stroke-width="2" opacity="0.6"/>
<path d="M80 332 L80 372 L120 372" fill="none" stroke="#ff6b35" stroke-width="2" opacity="0.6"/>
<path d="M432 332 L432 372 L392 372" fill="none" stroke="#00f5ff" stroke-width="2" opacity="0.6"/>
</svg>