/** * @license * Copyright 2025 Google LLC * SPDX-License-Identifier: Apache-2.0 */ import type React from 'react'; import { Box } from 'ink'; import { ThemedGradient } from './ThemedGradient.js'; import { shortAsciiLogo, longAsciiLogo, tinyAsciiLogo } from './AsciiArt.js'; import { getAsciiArtWidth } from '../utils/textUtils.js'; import { useTerminalSize } from '../hooks/useTerminalSize.js'; import { useSnowfall } from '../hooks/useSnowfall.js'; interface HeaderProps { customAsciiArt?: string; // For user-defined ASCII art version: string; nightly: boolean; } export const Header: React.FC = ({ customAsciiArt, version, nightly, }) => { const { columns: terminalWidth } = useTerminalSize(); let displayTitle; const widthOfLongLogo = getAsciiArtWidth(longAsciiLogo); const widthOfShortLogo = getAsciiArtWidth(shortAsciiLogo); if (customAsciiArt) { displayTitle = customAsciiArt; } else if (terminalWidth >= widthOfLongLogo) { displayTitle = longAsciiLogo; } else if (terminalWidth >= widthOfShortLogo) { displayTitle = shortAsciiLogo; } else { displayTitle = tinyAsciiLogo; } const artWidth = getAsciiArtWidth(displayTitle); const title = useSnowfall(displayTitle); return ( {title} {nightly && ( v{version} )} ); };