/* 面板组件共享样式 */ /* 引入变量文件 */ @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; }