checkpoint: console cols as 5-dot selector

This commit is contained in:
Aisland
2026-08-30 23:21:32 +08:00
parent 34db3e4651
commit 996b91a866
3 changed files with 19 additions and 13 deletions
+7 -4
View File
@@ -1122,11 +1122,14 @@ function ConsolePane() {
><span aria-hidden>{o.icon}</span></button>
))}
</div>
<label className="dsh-wt_consoleCols" title={T('console.colsLabel')}>
<div className="dsh-wt_consoleCols" role="group" aria-label={T('console.colsLabel')}>
<span>{T('console.cols')}</span>
<input type="range" min={1} max={5} step={1} value={cols} onChange={(e) => onCols(Number(e.target.value))} />
<span className="dsh-wt_consoleColsVal">{cols}</span>
</label>
<span className="dsh-wt_consoleColsDots">
{[1, 2, 3, 4, 5].map((v) => (
<button key={v} type="button" className={'dsh-wt_consoleColsDot' + (v <= cols ? ' dsh-wt_consoleColsDotOn' : '')} aria-label={String(v)} title={String(v)} onClick={() => onCols(v)} />
))}
</span>
</div>
</div>
<div ref={gridRef} className="dsh-wt_consoleGrid" style={{ ['--wt-cols' as any]: cols }}>
{cards.map((c) => (
+5 -3
View File
@@ -409,9 +409,11 @@ export const css = xtermCss + '\n' + [
'.dsh-wt_consoleThemeBtn:hover{opacity:1;background:var(--wt-chip)}',
'.dsh-wt_consoleThemeBtnOn{background:var(--wt-chip);color:var(--wt-text);opacity:1}',
'.dsh-wt_consoleGrid{display:flex;flex-wrap:wrap;justify-content:center;gap:64px;align-content:start;margin-top:clamp(32px,9vh,110px);width:100%;max-width:calc(var(--wt-cols,3)*242px + (var(--wt-cols,3) - 1)*64px);margin-left:auto;margin-right:auto}',
'.dsh-wt_consoleCols{display:inline-flex;align-items:center;gap:6px;padding:2px 8px;border:1px solid var(--wt-border);border-radius:999px;background:var(--wt-card);color:var(--wt-text3);font-size:11px}',
'.dsh-wt_consoleCols input{width:80px;accent-color:var(--dsw-alias-state-accent-primary,#4f8ef7)}',
'.dsh-wt_consoleColsVal{min-width:14px;text-align:center;font-variant-numeric:tabular-nums}',
'.dsh-wt_consoleCols{display:inline-flex;align-items:center;gap:8px;padding:2px 8px;border:1px solid var(--wt-border);border-radius:999px;background:var(--wt-card);color:var(--wt-text3);font-size:11px}',
'.dsh-wt_consoleColsDots{display:inline-flex;align-items:center;gap:6px}',
'.dsh-wt_consoleColsDot{width:11px;height:11px;border-radius:50%;border:1px solid var(--wt-borderHover);background:transparent;cursor:pointer;padding:0;transition:background .15s ease,border-color .15s ease,transform .15s ease}',
'.dsh-wt_consoleColsDot:hover{transform:scale(1.25);border-color:var(--dsw-alias-state-accent-primary,#4f8ef7)}',
'.dsh-wt_consoleColsDotOn{background:var(--dsw-alias-state-accent-primary,#4f8ef7);border-color:var(--dsw-alias-state-accent-primary,#4f8ef7)}',
'.dsh-wt_consoleCard{position:relative;box-sizing:border-box;flex:none;width:calc((100% - (var(--wt-cols,3) - 1)*64px)/var(--wt-cols,3));display:flex;flex-direction:column;gap:14px;aspect-ratio:1/1;min-height:192px;padding:21px;background:linear-gradient(135deg,rgba(255,255,255,.22) 0%,rgba(255,255,255,.07) 30%,rgba(255,255,255,.01) 60%,rgba(0,0,0,.07) 100%),rgba(18,23,32,.24);border:1px solid transparent;border-radius:16px;box-shadow:0 10px 28px rgba(0,0,0,.28),inset 0 1px 0 rgba(255,255,255,.13);cursor:pointer;transition:transform .14s ease,box-shadow .14s ease;overflow:hidden}',
// 玻璃边缘:四角黑白渐变描边(左上/右下=白,右上/左下=黑),1px 环挖空实现
'.dsh-wt_consoleCard::after{content:"";position:absolute;inset:0;border-radius:inherit;padding:1px;background:conic-gradient(from 45deg,rgba(0,0,0,.4) 0deg,rgba(255,255,255,.55) 90deg,rgba(0,0,0,.4) 180deg,rgba(255,255,255,.55) 270deg,rgba(0,0,0,.4) 360deg);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);mask-composite:exclude;pointer-events:none;opacity:.5}',