UNPKG

@shutootaki/gwm

Version:
33 lines 1.22 kB
import { useState, useEffect } from 'react'; import { useStdout } from 'ink'; /** * ターミナルの現在幅を返し、リサイズにも追従するカスタムフック。 * * - TTY でない環境 (CI, Jest など) では `stdout` が undefined になる場合があるため、 * その際はフォールバック値を返す。 * - `resize` イベントを購読し、幅が変わる度に再レンダーを発生させる。 */ export const useTerminalWidth = (fallback = 120) => { const { stdout } = useStdout(); const [width, setWidth] = useState(stdout?.columns ?? fallback); useEffect(() => { if (!stdout) return; const handler = () => { setWidth(stdout.columns ?? fallback); }; stdout.on('resize', handler); return () => { const stream = stdout; if (typeof stream.off === 'function') { // Node v14 以降は off API がある stream.off('resize', handler); } else { stdout.removeListener('resize', handler); } }; }, [stdout, fallback]); return width; }; //# sourceMappingURL=useTerminalWidth.js.map