fix: add safety guards to font size change and show buttons on all screen sizes
- Add null checks and try/catch around fitAddon.fit() to prevent viewport errors - Use requestAnimationFrame to ensure DOM is stable before fitting - Remove isMobile condition from font size buttons in TerminalComponent - Font size controls now visible on both mobile and desktop terminals
This commit is contained in:
@@ -266,9 +266,17 @@ export const TerminalComponent: React.FC<TerminalProps> = ({
|
|||||||
const newSize = Math.max(MIN_FONT_SIZE, Math.min(MAX_FONT_SIZE, fontSize + delta));
|
const newSize = Math.max(MIN_FONT_SIZE, Math.min(MAX_FONT_SIZE, fontSize + delta));
|
||||||
setFontSize(newSize);
|
setFontSize(newSize);
|
||||||
localStorage.setItem(FONT_SIZE_KEY, newSize.toString());
|
localStorage.setItem(FONT_SIZE_KEY, newSize.toString());
|
||||||
if (termRef.current) {
|
if (termRef.current && fitAddonRef.current) {
|
||||||
termRef.current.options.fontSize = newSize;
|
termRef.current.options.fontSize = newSize;
|
||||||
fitAddonRef.current?.fit();
|
requestAnimationFrame(() => {
|
||||||
|
if (termRef.current && fitAddonRef.current) {
|
||||||
|
try {
|
||||||
|
fitAddonRef.current.fit();
|
||||||
|
} catch {
|
||||||
|
// Ignore fit errors during re-initialization
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -345,26 +353,22 @@ export const TerminalComponent: React.FC<TerminalProps> = ({
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div className="terminal-header-right">
|
<div className="terminal-header-right">
|
||||||
{isMobile && (
|
<button
|
||||||
<>
|
className="terminal-header-button"
|
||||||
<button
|
onClick={() => handleFontSizeChange(-1)}
|
||||||
className="terminal-header-button"
|
type="button"
|
||||||
onClick={() => handleFontSizeChange(-1)}
|
aria-label="Decrease font size"
|
||||||
type="button"
|
>
|
||||||
aria-label="Decrease font size"
|
A-
|
||||||
>
|
</button>
|
||||||
A-
|
<button
|
||||||
</button>
|
className="terminal-header-button"
|
||||||
<button
|
onClick={() => handleFontSizeChange(1)}
|
||||||
className="terminal-header-button"
|
type="button"
|
||||||
onClick={() => handleFontSizeChange(1)}
|
aria-label="Increase font size"
|
||||||
type="button"
|
>
|
||||||
aria-label="Increase font size"
|
A+
|
||||||
>
|
</button>
|
||||||
A+
|
|
||||||
</button>
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
{onClose && (
|
{onClose && (
|
||||||
<button className="terminal-close" onClick={onClose} type="button">
|
<button className="terminal-close" onClick={onClose} type="button">
|
||||||
Close
|
Close
|
||||||
|
|||||||
Reference in New Issue
Block a user