/** * Prompt Preview - Shows a live preview of the custom terminal prompt */ import type { ReactNode } from 'react'; import { cn } from '@/lib/utils'; import type { ThemeMode } from '@automaker/types'; import { getTerminalTheme } from '@/config/terminal-themes'; interface PromptPreviewProps { format: 'standard' | 'minimal' | 'powerline' | 'starship'; theme: ThemeMode; showGitBranch: boolean; showGitStatus: boolean; showUserHost: boolean; showPath: boolean; pathStyle: 'full' | 'short' | 'basename'; pathDepth: number; showTime: boolean; showExitStatus: boolean; isOmpTheme?: boolean; promptThemeLabel?: string; className?: string; } export function PromptPreview({ format, theme, showGitBranch, showGitStatus, showUserHost, showPath, pathStyle, pathDepth, showTime, showExitStatus, isOmpTheme = false, promptThemeLabel, className, }: PromptPreviewProps) { const terminalTheme = getTerminalTheme(theme); const formatPath = (inputPath: string) => { let displayPath = inputPath; let prefix = ''; if (displayPath.startsWith('~/')) { prefix = '~/'; displayPath = displayPath.slice(2); } else if (displayPath.startsWith('/')) { prefix = '/'; displayPath = displayPath.slice(1); } const segments = displayPath.split('/').filter((segment) => segment.length > 0); const depth = Math.max(0, pathDepth); const trimmedSegments = depth > 0 ? segments.slice(-depth) : segments; let formattedSegments = trimmedSegments; if (pathStyle === 'basename' && trimmedSegments.length > 0) { formattedSegments = [trimmedSegments[trimmedSegments.length - 1]]; } else if (pathStyle === 'short') { formattedSegments = trimmedSegments.map((segment, index) => { if (index < trimmedSegments.length - 1) { return segment.slice(0, 1); } return segment; }); } const joined = formattedSegments.join('/'); if (prefix === '/' && joined.length === 0) { return '/'; } if (prefix === '~/' && joined.length === 0) { return '~'; } return `${prefix}${joined}`; }; // Generate preview text based on format const renderPrompt = () => { if (isOmpTheme) { return (