refactor(vscode-ide-companion): 重构 WebViewProvider 初始化逻辑

- 抽离初始化代理连接逻辑到单独的方法中
- 优化面板恢复时的代理连接流程
- 移除 EmptyState 组件中的信息横幅
- 在 App 组件中添加可关闭的信息横幅
- 调整输入表单样式,移除冗余样式
This commit is contained in:
yiliang114
2025-11-19 00:34:45 +08:00
parent 732220e651
commit 0577fe6f36
6 changed files with 309 additions and 201 deletions

View File

@@ -46,74 +46,3 @@
font-weight: 400;
max-width: 400px;
}
/* Banner Styles */
.empty-state-banner {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
padding: 12px 16px;
background-color: var(--app-input-secondary-background);
border: 1px solid var(--app-primary-border-color);
border-radius: var(--corner-radius-medium);
width: 100%;
max-width: 500px;
}
.banner-content {
display: flex;
align-items: center;
gap: 12px;
flex: 1;
min-width: 0;
}
.banner-icon {
flex-shrink: 0;
width: 16px;
height: 16px;
fill: var(--app-primary-foreground);
}
.banner-content label {
font-size: 13px;
color: var(--app-primary-foreground);
margin: 0;
line-height: 1.4;
}
.banner-link {
color: var(--app-claude-orange);
text-decoration: none;
cursor: pointer;
}
.banner-link:hover {
text-decoration: underline;
}
.banner-close {
flex-shrink: 0;
width: 20px;
height: 20px;
padding: 0;
background: transparent;
border: none;
border-radius: var(--corner-radius-small);
color: var(--app-primary-foreground);
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: background-color 0.2s;
}
.banner-close:hover {
background-color: var(--app-ghost-button-hover-background);
}
.banner-close svg {
width: 10px;
height: 10px;
}

View File

@@ -6,17 +6,11 @@
import type React from 'react';
import './EmptyState.css';
// Extend Window interface to include ICON_URI
declare global {
interface Window {
ICON_URI?: string;
}
}
import { generateIconUrl } from '../utils/resourceUrl.js';
export const EmptyState: React.FC = () => {
// Get icon URI from window, fallback to empty string if not available
const iconUri = window.ICON_URI || '';
// Generate icon URL using the utility function
const iconUri = generateIconUrl('icon.png');
return (
<div className="empty-state">
@@ -37,49 +31,6 @@ export const EmptyState: React.FC = () => {
</div>
</div>
</div>
{/* Info Banner */}
<div className="empty-state-banner">
<div className="banner-content">
<svg
className="banner-icon"
width="16"
height="16"
viewBox="0 0 20 20"
xmlns="http://www.w3.org/2000/svg"
>
<path d="M5.14648 7.14648C5.34175 6.95122 5.65825 6.95122 5.85352 7.14648L8.35352 9.64648C8.44728 9.74025 8.5 9.86739 8.5 10C8.5 10.0994 8.47037 10.1958 8.41602 10.2773L8.35352 10.3535L5.85352 12.8535C5.65825 13.0488 5.34175 13.0488 5.14648 12.8535C4.95122 12.6583 4.95122 12.3417 5.14648 12.1465L7.29297 10L5.14648 7.85352C4.95122 7.65825 4.95122 7.34175 5.14648 7.14648Z"></path>
<path d="M14.5 12C14.7761 12 15 12.2239 15 12.5C15 12.7761 14.7761 13 14.5 13H9.5C9.22386 13 9 12.7761 9 12.5C9 12.2239 9.22386 12 9.5 12H14.5Z"></path>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M16.5 4C17.3284 4 18 4.67157 18 5.5V14.5C18 15.3284 17.3284 16 16.5 16H3.5C2.67157 16 2 15.3284 2 14.5V5.5C2 4.67157 2.67157 4 3.5 4H16.5ZM3.5 5C3.22386 5 3 5.22386 3 5.5V14.5C3 14.7761 3.22386 15 3.5 15H16.5C16.7761 15 17 14.7761 17 14.5V5.5C17 5.22386 16.7761 5 16.5 5H3.5Z"
></path>
</svg>
<label>
Prefer the Terminal experience?{' '}
<a href="#" className="banner-link">
Switch back in Settings.
</a>
</label>
</div>
<button className="banner-close" aria-label="Close banner">
<svg
width="10"
height="10"
viewBox="0 0 14 14"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M1 1L13 13M1 13L13 1"
stroke="currentColor"
strokeWidth="1.5"
strokeLinecap="round"
></path>
</svg>
</button>
</div>
</div>
</div>
);