313 lines
6.9 KiB
CSS
313 lines
6.9 KiB
CSS
/* 面板组件共享样式 */
|
|
|
|
/* 引入变量文件 */
|
|
@import './variables.css';
|
|
|
|
/* 面板基础样式 */
|
|
.dock-panel {
|
|
position: relative;
|
|
overflow: hidden;
|
|
background-color: var(--color-background);
|
|
border: 1px solid var(--color-border);
|
|
}
|
|
|
|
/* 面板标题栏样式 */
|
|
.dock-panel-titlebar {
|
|
display: flex;
|
|
align-items: center;
|
|
padding: 0 var(--spacing-md);
|
|
height: var(--panel-titlebar-height);
|
|
background-color: var(--color-background-secondary);
|
|
cursor: grab;
|
|
user-select: none;
|
|
font-size: var(--font-size-sm);
|
|
font-weight: 500;
|
|
transition: all var(--transition-fast);
|
|
border-bottom: 1px solid var(--color-border);
|
|
}
|
|
|
|
.dock-panel-titlebar:hover {
|
|
background-color: var(--color-background-tertiary);
|
|
}
|
|
|
|
.dock-panel-titlebar:active {
|
|
cursor: grabbing;
|
|
}
|
|
|
|
/* 面板内容区域样式 */
|
|
.dock-panel-content {
|
|
flex: 1;
|
|
overflow: auto;
|
|
position: relative;
|
|
background-color: var(--color-background);
|
|
}
|
|
|
|
/* 面板图标样式 */
|
|
.dock-panel-icon {
|
|
font-size: var(--font-size-base);
|
|
margin-right: 6px;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
color: var(--color-text-primary);
|
|
}
|
|
|
|
/* 面板标题样式 */
|
|
.dock-panel-title {
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
flex: 1;
|
|
color: var(--color-text-primary);
|
|
}
|
|
|
|
/* 面板操作按钮容器 */
|
|
.dock-panel-actions {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 2px;
|
|
}
|
|
|
|
/* 面板按钮基础样式 */
|
|
.dock-panel-btn {
|
|
background: none;
|
|
border: none;
|
|
cursor: pointer;
|
|
padding: 2px 4px;
|
|
border-radius: var(--panel-border-radius);
|
|
color: var(--color-text-secondary);
|
|
font-size: var(--font-size-xs);
|
|
width: 20px;
|
|
height: 20px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
transition: all var(--transition-fast);
|
|
}
|
|
|
|
.dock-panel-btn:hover {
|
|
background-color: var(--color-background-tertiary);
|
|
color: var(--color-text-primary);
|
|
}
|
|
|
|
/* 关闭按钮特殊样式 */
|
|
.dock-panel-close-btn:hover {
|
|
background-color: #ef4444 !important;
|
|
color: white !important;
|
|
}
|
|
|
|
/* 空面板内容样式 */
|
|
.dock-panel-empty-content {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
height: 100%;
|
|
width: 100%;
|
|
color: var(--color-text-tertiary);
|
|
font-size: var(--font-size-sm);
|
|
padding: 12px;
|
|
}
|
|
|
|
/* 面板位置相关样式 */
|
|
.dock-panel-left, .dock-panel-right {
|
|
display: flex;
|
|
flex-direction: column;
|
|
width: 100%;
|
|
}
|
|
|
|
.dock-panel-top, .dock-panel-bottom {
|
|
display: flex;
|
|
flex-direction: column;
|
|
height: 100%;
|
|
}
|
|
|
|
/* 位置相关面板样式 */
|
|
.dock-panel-left {
|
|
border-right: 1px solid var(--color-border);
|
|
}
|
|
|
|
.dock-panel-right {
|
|
border-left: 1px solid var(--color-border);
|
|
}
|
|
|
|
.dock-panel-top {
|
|
border-bottom: 1px solid var(--color-border);
|
|
}
|
|
|
|
.dock-panel-bottom {
|
|
border-top: 1px solid var(--color-border);
|
|
}
|
|
|
|
/* 面板折叠状态样式 */
|
|
.dock-panel-collapsed {
|
|
background-color: var(--color-background-tertiary);
|
|
overflow: hidden;
|
|
}
|
|
|
|
.dock-panel-collapsed .dock-panel-titlebar {
|
|
padding: 0;
|
|
min-width: 40px;
|
|
min-height: 40px;
|
|
background-color: var(--color-background-tertiary);
|
|
z-index: var(--z-index-panel);
|
|
}
|
|
|
|
.dock-panel-collapsed .dock-panel-content {
|
|
display: none;
|
|
}
|
|
|
|
/* 左侧/右侧面板折叠样式 */
|
|
.dock-panel-left.collapsed, .dock-panel-right.collapsed {
|
|
width: var(--panel-titlebar-height-collapsed);
|
|
}
|
|
|
|
.dock-panel-left.collapsed .dock-panel-titlebar,
|
|
.dock-panel-right.collapsed .dock-panel-titlebar {
|
|
justify-content: center;
|
|
flex-direction: column;
|
|
height: 100%;
|
|
width: 40px;
|
|
}
|
|
|
|
/* 顶部/底部面板折叠样式 */
|
|
.dock-panel-top.collapsed, .dock-panel-bottom.collapsed {
|
|
height: var(--panel-titlebar-height-collapsed);
|
|
}
|
|
|
|
.dock-panel-top.collapsed .dock-panel-titlebar,
|
|
.dock-panel-bottom.collapsed .dock-panel-titlebar {
|
|
justify-content: center;
|
|
flex-direction: row;
|
|
width: 100%;
|
|
height: 40px;
|
|
}
|
|
|
|
/* 折叠状态下的展开按钮 */
|
|
.dock-panel-expand-btn {
|
|
background: var(--color-background-secondary);
|
|
border: 1px solid var(--color-border);
|
|
cursor: pointer;
|
|
padding: var(--spacing-sm);
|
|
border-radius: var(--panel-border-radius);
|
|
color: var(--color-text-primary);
|
|
width: 100%;
|
|
height: 100%;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
transition: all var(--transition-fast);
|
|
}
|
|
|
|
.dock-panel-expand-btn:hover {
|
|
background-color: var(--color-background-tertiary);
|
|
border-color: var(--color-border-hover);
|
|
color: var(--color-primary);
|
|
}
|
|
|
|
/* 面板区域容器样式 */
|
|
.panel-area-left, .panel-area-right {
|
|
display: flex;
|
|
flex-direction: column;
|
|
overflow: hidden;
|
|
background-color: var(--color-background);
|
|
}
|
|
|
|
.panel-area-top, .panel-area-bottom {
|
|
display: flex;
|
|
overflow: hidden;
|
|
background-color: var(--color-background);
|
|
}
|
|
|
|
/* 面板区域位置样式 */
|
|
.panel-area-left {
|
|
border-right: 1px solid var(--color-border);
|
|
}
|
|
|
|
.panel-area-right {
|
|
border-left: 1px solid var(--color-border);
|
|
}
|
|
|
|
.panel-area-top {
|
|
border-bottom: 1px solid var(--color-border);
|
|
}
|
|
|
|
.panel-area-bottom {
|
|
border-top: 1px solid var(--color-border);
|
|
}
|
|
|
|
/* 面板分隔条样式 */
|
|
.dock-panel-separator {
|
|
background-color: var(--color-border);
|
|
transition: background-color var(--transition-fast);
|
|
position: relative;
|
|
}
|
|
|
|
.dock-panel-separator:hover {
|
|
background-color: var(--color-border-hover);
|
|
}
|
|
|
|
/* 垂直分隔条(适用于上下方向面板之间) */
|
|
.dock-panel-separator-vertical {
|
|
width: var(--panel-separator-size);
|
|
cursor: col-resize;
|
|
z-index: var(--z-index-base);
|
|
}
|
|
|
|
/* 水平分隔条(适用于左右方向面板之间) */
|
|
.dock-panel-separator-horizontal {
|
|
height: var(--panel-separator-size);
|
|
cursor: row-resize;
|
|
z-index: var(--z-index-base);
|
|
}
|
|
|
|
/* 面板区域之间的分隔条 - 保持原始尺寸 */
|
|
.dock-panel-container > div[class*="cursor-col-resize"],
|
|
.dock-panel-container > div[class*="cursor-row-resize"] {
|
|
background-color: var(--color-border);
|
|
transition: background-color var(--transition-fast);
|
|
}
|
|
|
|
/* 面板区域之间的分隔条 - 鼠标悬停效果 */
|
|
.dock-panel-container > div[class*="cursor-col-resize"]:hover,
|
|
.dock-panel-container > div[class*="cursor-row-resize"]:hover {
|
|
background-color: var(--color-border-hover);
|
|
}
|
|
|
|
/* 子面板之间的分隔条 - 使用更小的尺寸 */
|
|
.panel-area-left .dock-panel-separator-horizontal,
|
|
.panel-area-right .dock-panel-separator-horizontal {
|
|
height: 4px;
|
|
}
|
|
|
|
.panel-area-top .dock-panel-separator-vertical,
|
|
.panel-area-bottom .dock-panel-separator-vertical {
|
|
width: 4px;
|
|
}
|
|
|
|
/* 面板过渡动画 */
|
|
.dock-panel-enter-active,
|
|
.dock-panel-leave-active {
|
|
transition: all var(--transition-normal);
|
|
}
|
|
|
|
.dock-panel-enter-from,
|
|
.dock-panel-leave-to {
|
|
opacity: 0;
|
|
transform: translateY(10px);
|
|
}
|
|
|
|
/* 停靠预览动画 */
|
|
@keyframes dockPreviewPulse {
|
|
0% { opacity: 0.5; }
|
|
50% { opacity: 0.7; }
|
|
100% { opacity: 0.5; }
|
|
}
|
|
|
|
.dock-preview {
|
|
animation: dockPreviewPulse 1.5s infinite;
|
|
}
|
|
|
|
/* 过渡动画通用类 */
|
|
.panel-transition {
|
|
transition: all var(--transition-fast) ease;
|
|
} |