mirror of
https://github.com/Ark0N/Codeman.git
synced 2026-10-03 14:09:42 +02:00
Overlay renderer (xterm-zerolag-input): - Add charTop/charHeight to CellDimensions and RenderParams for precise vertical text positioning matching xterm's canvas renderer - Convert device.char dimensions to CSS pixels via devicePixelRatio - Extend line div background 1px past cell boundary to cover compositing seam between overlay layer (z-index:7) and canvas layer below - Remove -webkit-font-smoothing/text-rendering overrides that made overlay text thinner than canvas text - Add per-span height/lineHeight for natural CSS vertical centering - Add setPrompt() method for runtime prompt strategy switching (fixes tab switching crash with "setPrompt is not a function") app.js duplicate class members: - Remove dead formatTokens duplicate (line ~5590 shadowed precise version) - Remove fire-and-forget resetCircuitBreaker duplicate (shadowed notification version) - Rename mux-panel killAllSessions to killAllMuxSessions (was shadowing Codeman session killer, breaking Ctrl+K) Other: - Update index.html onclick to use killAllMuxSessions - Add getTeamTasks mock to test route context Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
48 lines
1.6 KiB
TypeScript
48 lines
1.6 KiB
TypeScript
import type { XtermTerminal, CellDimensions } from './types.js';
|
|
|
|
/**
|
|
* Get cell dimensions from the terminal, handling xterm.js v5 (private API)
|
|
* and v7+ (public API).
|
|
*
|
|
* Returns CSS-pixel values. xterm's `device.char` is in device pixels, so
|
|
* we divide by `devicePixelRatio` to stay consistent with `css.cell`.
|
|
*
|
|
* Returns `null` if the terminal is not yet rendered or dimensions are
|
|
* unavailable.
|
|
*/
|
|
export function getCellDimensions(terminal: XtermTerminal): CellDimensions | null {
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
const t = terminal as any;
|
|
const dpr = typeof devicePixelRatio === 'number' && devicePixelRatio > 0
|
|
? devicePixelRatio : 1;
|
|
|
|
// Try v7+ public API first
|
|
if (t.dimensions?.css?.cell) {
|
|
const cellH = t.dimensions.css.cell.height;
|
|
return {
|
|
width: t.dimensions.css.cell.width,
|
|
height: cellH,
|
|
charTop: (t.dimensions?.device?.char?.top ?? 0) / dpr,
|
|
charHeight: (t.dimensions?.device?.char?.height ?? (cellH * dpr)) / dpr,
|
|
};
|
|
}
|
|
|
|
// Fall back to v5 private API
|
|
try {
|
|
const dims = t._core?._renderService?.dimensions;
|
|
if (dims?.css?.cell) {
|
|
const cellH = dims.css.cell.height;
|
|
return {
|
|
width: dims.css.cell.width,
|
|
height: cellH,
|
|
charTop: (dims.device?.char?.top ?? 0) / dpr,
|
|
charHeight: (dims.device?.char?.height ?? (cellH * dpr)) / dpr,
|
|
};
|
|
}
|
|
} catch {
|
|
// Private API may throw in some environments
|
|
}
|
|
|
|
return null;
|
|
}
|