import React from 'react'; import IconButton from '@mui/material/IconButton'; import Tooltip from '@mui/material/Tooltip'; import ChevronLeftIcon from '@mui/icons-material/ChevronLeft'; import ChevronRightIcon from '@mui/icons-material/ChevronRight'; /* ============================================================ * CollapseArrow:侧边栏折叠箭头(VSCode 风格) * * - 由父级绝对定位到主区边缘(即侧边栏与主区的 Separator 位置)垂直居中; * 侧边栏折叠为 0 后主区仍在,箭头始终可见可点,支持"再点击展开"。 * - 箭头始终指向栏的方向:展开时指栏(点击收起),折叠后反向(点击展开)。 * - 可见性:**常驻可见**——不透明背景(background.paper)+ 实心边框 + 阴影, * opacity 展开 0.9 / 折叠 1,hover 全亮加深阴影;不再半透明叠加 iframe 混色。 * - 28x28 触控目标,zIndex 12 盖在 iframe 内容之上。 * ============================================================ */ export default function CollapseArrow({ side, collapsed = false, onToggle }) { const right = side === 'right'; const label = collapsed ? `展开${right ? '右' : '左'}侧边栏` : `折叠${right ? '右' : '左'}侧边栏`; // 展开 → 指向栏(收起动作);折叠 → 反向(展开动作) const Icon = collapsed ? (right ? ChevronLeftIcon : ChevronRightIcon) : (right ? ChevronRightIcon : ChevronLeftIcon); return ( t.shadows[2], transition: 'opacity .12s ease, background-color .12s ease, box-shadow .12s ease', '&:hover': { opacity: 1, bgcolor: 'action.hover', boxShadow: (t) => t.shadows[4] }, '&:focus-visible': { outline: '2px solid', outlineColor: 'primary.main', outlineOffset: -2 }, }} > ); }