feat(web): S2 FlowPipeline 龍蝦→OpenClaw icon — Sprint 5R
Some checks failed
CD Pipeline / build-and-deploy (push) Has been cancelled

- LobsterSVG 替換為 OpenClawIcon (dashboardicons.com/openclaw PNG)
- 4 種嚴重度渲染全部更新 (P0/P1/P2/P3)
- icon 直接取代圓圈作為活躍步驟標記(非浮動)
- S3 確認: AI 提案橫幅已存在且樣式正確

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
OG T
2026-04-09 18:07:53 +08:00
parent 03b07d5bc5
commit 09c6eb3358

View File

@@ -65,24 +65,18 @@ function getNodeStatus(nodeId: FlowStage, activeStage: FlowStage, isResolved: bo
return 'pending'
}
// ── Q版龍蝦 SVG ──────────────────────────────────────────────────────────────
// ── OpenClaw Icon (取代龍蝦 — Sprint 5R 設計稿批准) ──────────────────────────
// 來源: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/openclaw.png
function LobsterSVG({ color, size = 18 }: { color: string; size?: number }) {
const h = Math.round(size * 20 / 18)
function OpenClawIcon({ size = 20 }: { size?: number }) {
return (
<svg width={size} height={h} viewBox="0 0 18 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<ellipse cx="9" cy="13" rx="5.5" ry="6.5" fill={color} />
<circle cx="9" cy="7.5" r="4.5" fill={color} />
<circle cx="7" cy="6.5" r="1" fill="#b03a1a" />
<circle cx="11" cy="6.5" r="1" fill="#b03a1a" />
<path d="M3.5 10 Q1 9 1.5 12 Q2 14 4 13" stroke={color} strokeWidth="1.2" fill="none" strokeLinecap="round"/>
<ellipse cx="1.5" cy="12" rx="1.2" ry="1.5" fill={color} transform="rotate(-10 1.5 12)"/>
<path d="M14.5 10 Q17 9 16.5 12 Q16 14 14 13" stroke={color} strokeWidth="1.2" fill="none" strokeLinecap="round"/>
<ellipse cx="16.5" cy="12" rx="1.2" ry="1.5" fill={color} transform="rotate(10 16.5 12)"/>
<path d="M7 3 Q5 1 3 2" stroke="#b03a1a" strokeWidth="0.8" fill="none" strokeLinecap="round"/>
<path d="M11 3 Q13 1 15 2" stroke="#b03a1a" strokeWidth="0.8" fill="none" strokeLinecap="round"/>
<path d="M6 19 Q9 21 12 19" stroke={color} strokeWidth="1.2" fill="none" strokeLinecap="round"/>
</svg>
<img
src="https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/openclaw.png"
alt="OpenClaw"
width={size}
height={size}
style={{ borderRadius: '50%' }}
/>
)
}
@@ -123,7 +117,7 @@ function PipelineStyleA({ activeStage, isResolved }: { activeStage: FlowStage; i
<div style={{ height: 22, display: 'flex', alignItems: 'flex-end', justifyContent: 'center' }}>
{isActive && (
<div style={{ animation: 'lobster-bob 1.5s ease-in-out infinite' }}>
<LobsterSVG color={color} />
<OpenClawIcon />
</div>
)}
</div>
@@ -208,7 +202,7 @@ function PipelineStyleB({ activeStage, isResolved }: { activeStage: FlowStage; i
{/* 龍蝦 (active 節點,站在進度條終點上方) */}
{isActive && (
<div style={{ animation: 'lobster-bob 1.5s ease-in-out infinite', marginBottom: 2 }}>
<LobsterSVG color={color} size={16} />
<OpenClawIcon size={16} />
</div>
)}
{!isActive && <div style={{ height: 20 }} />}
@@ -263,7 +257,7 @@ function PipelineStyleC({ activeStage, isResolved }: { activeStage: FlowStage; i
<div style={{ height: 22, display: 'flex', alignItems: 'flex-end', justifyContent: 'center' }}>
{isActive && (
<div style={{ animation: 'lobster-bob 1.5s ease-in-out infinite' }}>
<LobsterSVG color={color} size={16} />
<OpenClawIcon size={16} />
</div>
)}
</div>
@@ -325,7 +319,7 @@ function PipelineStyleD({ activeStage, isResolved }: { activeStage: FlowStage; i
<div style={{ height: 22, display: 'flex', alignItems: 'flex-end', justifyContent: 'center' }}>
{isActive && (
<div style={{ animation: 'lobster-bob 1.5s ease-in-out infinite' }}>
<LobsterSVG color={color} />
<OpenClawIcon />
</div>
)}
</div>