@hypersocial/cli-games 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/README.md +100 -0
- package/dist/chunk-AVGB32MC.js +697 -0
- package/dist/chunk-AVGB32MC.js.map +1 -0
- package/dist/cli.js +13694 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +695 -0
- package/dist/index.js +13764 -0
- package/dist/index.js.map +1 -0
- package/dist/themes.d.ts +125 -0
- package/dist/themes.js +27 -0
- package/dist/themes.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/themes/index.ts"],"sourcesContent":["/**\n * Terminal color themes\n *\n * Provides both CSS colors (for UI) and ANSI escape codes (for terminal).\n */\n\n/**\n * Available theme identifiers\n */\nexport type PhosphorMode =\n | 'cyan'\n | 'cyanLight'\n | 'amber'\n | 'green'\n | 'white'\n | 'hotpink'\n | 'hotpinkLight'\n | 'blood'\n | 'ice'\n | 'iceLight'\n | 'bladerunner'\n | 'bladerunnerLight'\n | 'tron'\n | 'tronLight'\n | 'daylight'\n | 'kawaii'\n | 'kawaiiLight'\n | 'oled'\n | 'solarized'\n | 'solarizedLight'\n | 'nord'\n | 'nordLight'\n | 'highcontrast'\n | 'highcontrastLight'\n | 'banana'\n | 'cream';\n\n/**\n * Theme color definition for CSS/UI usage\n */\nexport interface ThemeColors {\n /** Display name */\n name: string;\n /** Emoji icon for quick switcher / UI */\n icon: string;\n /** Primary text/accent color (hex) */\n primary: string;\n /** Secondary accent color (hex) */\n secondary: string;\n /** Subtle glow effect (rgba) */\n glow: string;\n /** Intense glow effect (rgba) */\n glowIntense: string;\n /** Background color (hex) */\n bg: string;\n /** Status bar background - slightly elevated from bg */\n statusBarBg: string;\n /** Terminal foreground color - defaults to primary if not set */\n foreground?: string;\n}\n\n/**\n * All theme definitions with CSS colors\n */\nexport const themes: Record<PhosphorMode, ThemeColors> = {\n cyan: {\n name: 'Cyberpunk',\n icon: '🔵',\n primary: '#00D9FF',\n secondary: '#FF006E',\n glow: 'rgba(0, 217, 255, 0.5)',\n glowIntense: 'rgba(0, 217, 255, 0.8)',\n bg: '#0A1628',\n statusBarBg: '#0D1E38',\n },\n cyanLight: {\n name: 'Cyberpunk Light',\n icon: '💠',\n primary: '#0099CC',\n secondary: '#CC0066',\n glow: 'rgba(0, 153, 204, 0.15)',\n glowIntense: 'rgba(0, 153, 204, 0.3)',\n bg: '#F8FAFF',\n statusBarBg: '#EEF2FA',\n foreground: '#2d3640', // Dark text for terminal readability\n },\n amber: {\n name: 'Fallout',\n icon: '🟠',\n primary: '#FFB000',\n secondary: '#FF6600',\n glow: 'rgba(255, 176, 0, 0.5)',\n glowIntense: 'rgba(255, 176, 0, 0.8)',\n bg: '#1C1408',\n statusBarBg: '#2A1E0C',\n },\n green: {\n name: 'Matrix',\n icon: '🟢',\n primary: '#39FF14',\n secondary: '#00FF00',\n glow: 'rgba(57, 255, 20, 0.5)',\n glowIntense: 'rgba(57, 255, 20, 0.8)',\n bg: '#001A00',\n statusBarBg: '#002800',\n },\n white: {\n name: 'Ghost',\n icon: '⚪',\n primary: '#FFFFFF',\n secondary: '#88CCFF',\n glow: 'rgba(255, 255, 255, 0.3)',\n glowIntense: 'rgba(255, 255, 255, 0.5)',\n bg: '#0C0C0C',\n statusBarBg: '#1A1A1A',\n },\n hotpink: {\n name: 'Synthwave',\n icon: '🩷',\n primary: '#FF6AC1',\n secondary: '#00D9FF',\n glow: 'rgba(255, 106, 193, 0.5)',\n glowIntense: 'rgba(255, 106, 193, 0.8)',\n bg: '#0F0818',\n statusBarBg: '#1A0F28',\n },\n hotpinkLight: {\n name: 'Synthwave Light',\n icon: '🌷',\n primary: '#D84A9C',\n secondary: '#0099BB',\n glow: 'rgba(216, 74, 156, 0.15)',\n glowIntense: 'rgba(216, 74, 156, 0.3)',\n bg: '#FFF8FC',\n statusBarBg: '#F5EEF2',\n foreground: '#2d3640', // Dark text for terminal readability\n },\n blood: {\n name: 'Blood',\n icon: '🔴',\n primary: '#FF3333',\n secondary: '#AA0000',\n glow: 'rgba(255, 51, 51, 0.5)',\n glowIntense: 'rgba(255, 51, 51, 0.8)',\n bg: '#1A0505',\n statusBarBg: '#280808',\n },\n ice: {\n name: 'Ice',\n icon: '🩵',\n primary: '#88FFFF',\n secondary: '#4488FF',\n glow: 'rgba(136, 255, 255, 0.4)',\n glowIntense: 'rgba(136, 255, 255, 0.7)',\n bg: '#051520',\n statusBarBg: '#082030',\n },\n iceLight: {\n name: 'Ice Light',\n icon: '🧊',\n primary: '#0077AA',\n secondary: '#2255CC',\n glow: 'rgba(0, 119, 170, 0.12)',\n glowIntense: 'rgba(0, 119, 170, 0.25)',\n bg: '#F0FAFF',\n statusBarBg: '#E5F0F8',\n foreground: '#2d3640', // Dark text for terminal readability\n },\n bladerunner: {\n name: 'Blade Runner',\n icon: '🟧',\n primary: '#FF6B35',\n secondary: '#00CED1',\n glow: 'rgba(255, 107, 53, 0.6)',\n glowIntense: 'rgba(255, 107, 53, 0.9)',\n bg: '#1F0E08',\n statusBarBg: '#2D150C',\n },\n bladerunnerLight: {\n name: 'Blade Runner Light',\n icon: '🌅',\n primary: '#CC4400',\n secondary: '#008B8B',\n glow: 'rgba(204, 68, 0, 0.15)',\n glowIntense: 'rgba(204, 68, 0, 0.3)',\n bg: '#FFFAF5',\n statusBarBg: '#F5EFEA',\n foreground: '#2d3640', // Dark text for terminal readability\n },\n tron: {\n name: 'Tron',\n icon: '🔷',\n primary: '#6FFFE9',\n secondary: '#FF6B00',\n glow: 'rgba(111, 255, 233, 0.5)',\n glowIntense: 'rgba(111, 255, 233, 0.8)',\n bg: '#020815',\n statusBarBg: '#051020',\n },\n tronLight: {\n name: 'Tron Light',\n icon: '💎',\n primary: '#008080',\n secondary: '#CC5500',\n glow: 'rgba(0, 128, 128, 0.15)',\n glowIntense: 'rgba(0, 128, 128, 0.3)',\n bg: '#F5FFFF',\n statusBarBg: '#EAF5F5',\n foreground: '#2d3640', // Dark text for terminal readability\n },\n daylight: {\n name: 'Daylight',\n icon: '☀️',\n primary: '#1a1a1a',\n secondary: '#0066CC',\n glow: 'rgba(0, 102, 204, 0.1)',\n glowIntense: 'rgba(0, 102, 204, 0.2)',\n bg: '#FAFAF8',\n statusBarBg: '#EEEEEC',\n foreground: '#1a1a1a', // Matches primary for consistent dark text\n },\n kawaii: {\n name: 'Kawaii',\n icon: '🌸',\n primary: '#FF69B4',\n secondary: '#87CEEB',\n glow: 'rgba(255, 105, 180, 0.6)',\n glowIntense: 'rgba(255, 105, 180, 0.9)',\n bg: '#1E0818',\n statusBarBg: '#2D0F25',\n },\n kawaiiLight: {\n name: 'Kawaii Light',\n icon: '🎀',\n primary: '#D4458B',\n secondary: '#7B68EE',\n glow: 'rgba(255, 105, 180, 0.2)',\n glowIntense: 'rgba(255, 105, 180, 0.4)',\n bg: '#FFF5F8',\n statusBarBg: '#F5EAEE',\n foreground: '#2d3640', // Dark text for terminal readability\n },\n oled: {\n name: 'OLED Black',\n icon: '⚫',\n primary: '#FFFFFF',\n secondary: '#00D9FF',\n glow: 'rgba(255, 255, 255, 0.3)',\n glowIntense: 'rgba(255, 255, 255, 0.5)',\n bg: '#000000',\n statusBarBg: '#0A0A0A',\n },\n solarized: {\n name: 'Solarized',\n icon: '🌊',\n primary: '#2AA198',\n secondary: '#859900',\n glow: 'rgba(42, 161, 152, 0.4)',\n glowIntense: 'rgba(42, 161, 152, 0.6)',\n bg: '#002B36',\n statusBarBg: '#073642',\n foreground: '#D4D4D4', // Light gray for better readability\n },\n solarizedLight: {\n name: 'Solarized Light',\n icon: '🏖️',\n primary: '#657B83',\n secondary: '#268BD2',\n glow: 'rgba(38, 139, 210, 0.15)',\n glowIntense: 'rgba(38, 139, 210, 0.25)',\n bg: '#FDF6E3',\n statusBarBg: '#EEE8D5',\n foreground: '#586e75', // Solarized base01 for terminal text\n },\n nord: {\n name: 'Nord',\n icon: '❄️',\n primary: '#88C0D0',\n secondary: '#81A1C1',\n glow: 'rgba(136, 192, 208, 0.3)',\n glowIntense: 'rgba(136, 192, 208, 0.5)',\n bg: '#2E3440',\n statusBarBg: '#3B4252',\n },\n nordLight: {\n name: 'Nord Light',\n icon: '🏔️',\n primary: '#2E3440',\n secondary: '#5E81AC',\n glow: 'rgba(94, 129, 172, 0.15)',\n glowIntense: 'rgba(94, 129, 172, 0.25)',\n bg: '#ECEFF4',\n statusBarBg: '#E5E9F0',\n foreground: '#2E3440', // Nord polar night for terminal text\n },\n highcontrast: {\n name: 'High Contrast',\n icon: '◐',\n primary: '#FFFFFF',\n secondary: '#FFFF00',\n glow: 'rgba(255, 255, 255, 0.1)',\n glowIntense: 'rgba(255, 255, 255, 0.2)',\n bg: '#000000',\n statusBarBg: '#111111',\n },\n highcontrastLight: {\n name: 'High Contrast Light',\n icon: '◑',\n primary: '#000000',\n secondary: '#0000CC',\n glow: 'rgba(0, 0, 0, 0.05)',\n glowIntense: 'rgba(0, 0, 0, 0.1)',\n bg: '#FFFFFF',\n statusBarBg: '#EEEEEE',\n foreground: '#000000', // Maximum contrast for terminal text\n },\n banana: {\n name: 'Banana',\n icon: '🍌',\n primary: '#FFE135',\n secondary: '#8B7500',\n glow: 'rgba(255, 225, 53, 0.5)',\n glowIntense: 'rgba(255, 225, 53, 0.8)',\n bg: '#1A1800',\n statusBarBg: '#282400',\n },\n cream: {\n name: 'Cream',\n icon: '🍦',\n primary: '#4A3C2A',\n secondary: '#C17844',\n glow: 'rgba(193, 120, 68, 0.12)',\n glowIntense: 'rgba(193, 120, 68, 0.22)',\n bg: '#EDE5D4',\n statusBarBg: '#E3DBCA',\n foreground: '#4A3C2A',\n },\n};\n\n/**\n * ANSI escape codes for terminal text coloring\n */\nconst ansiCodes: Record<PhosphorMode, string> = {\n cyan: '\\x1b[96m',\n cyanLight: '\\x1b[38;5;31m',\n amber: '\\x1b[93m',\n green: '\\x1b[92m',\n white: '\\x1b[97m',\n hotpink: '\\x1b[95m',\n hotpinkLight: '\\x1b[38;5;169m',\n blood: '\\x1b[91m',\n ice: '\\x1b[96m',\n iceLight: '\\x1b[38;5;31m',\n bladerunner: '\\x1b[38;5;208m',\n bladerunnerLight: '\\x1b[38;5;166m',\n tron: '\\x1b[96m',\n tronLight: '\\x1b[38;5;30m',\n daylight: '\\x1b[34m',\n kawaii: '\\x1b[95m',\n kawaiiLight: '\\x1b[35m',\n oled: '\\x1b[97m',\n solarized: '\\x1b[36m',\n solarizedLight: '\\x1b[38;5;66m',\n nord: '\\x1b[96m',\n nordLight: '\\x1b[38;5;59m',\n highcontrast: '\\x1b[97m',\n highcontrastLight: '\\x1b[30m',\n banana: '\\x1b[93m',\n cream: '\\x1b[38;5;130m',\n};\n\n/**\n * Light themes that need dark text\n */\nconst lightThemes: Set<PhosphorMode> = new Set([\n 'cyanLight',\n 'hotpinkLight',\n 'iceLight',\n 'bladerunnerLight',\n 'tronLight',\n 'daylight',\n 'kawaiiLight',\n 'solarizedLight',\n 'nordLight',\n 'highcontrastLight',\n 'cream',\n]);\n\n/**\n * Subtle background colors for game elements\n */\nconst subtleColors: Partial<Record<PhosphorMode, string>> = {\n cyanLight: '\\x1b[38;5;153m',\n hotpinkLight: '\\x1b[38;5;225m',\n iceLight: '\\x1b[38;5;195m',\n bladerunnerLight: '\\x1b[38;5;223m',\n tronLight: '\\x1b[38;5;159m',\n daylight: '\\x1b[38;5;252m',\n kawaiiLight: '\\x1b[38;5;218m',\n solarizedLight: '\\x1b[38;5;187m',\n nordLight: '\\x1b[38;5;255m',\n highcontrastLight: '\\x1b[38;5;250m',\n cream: '\\x1b[38;5;223m',\n oled: '\\x1b[38;5;234m',\n highcontrast: '\\x1b[38;5;238m',\n};\n\n// ============================================================================\n// API Functions\n// ============================================================================\n\n/**\n * Get theme colors by mode\n */\nexport function getTheme(mode: PhosphorMode): ThemeColors {\n return themes[mode];\n}\n\n/**\n * Get ANSI escape code for a theme\n */\nexport function getAnsiColor(mode: PhosphorMode): string {\n return ansiCodes[mode] || '\\x1b[92m';\n}\n\n/**\n * Check if a theme is light (needs dark text)\n */\nexport function isLightTheme(mode: PhosphorMode): boolean {\n return lightThemes.has(mode);\n}\n\n/**\n * Get subtle background color for game elements\n */\nexport function getSubtleColor(mode: PhosphorMode): string {\n return subtleColors[mode] || '\\x1b[38;5;236m';\n}\n\n/**\n * Get all available theme modes\n */\nexport function getThemeModes(): PhosphorMode[] {\n return Object.keys(themes) as PhosphorMode[];\n}\n\nconst VALID_THEME_MODES = new Set<string>(Object.keys(themes));\n\n/**\n * Check if a string is a valid theme mode\n */\nexport function isValidThemeMode(value: string): value is PhosphorMode {\n return VALID_THEME_MODES.has(value);\n}\n\n/**\n * ANSI reset code\n */\nexport const ANSI_RESET = '\\x1b[0m';\n\n// ============================================================================\n// xterm.js Terminal Theme\n// ============================================================================\n\n/**\n * xterm.js ITheme-compatible color set.\n * Includes the 16 ANSI colors, selection, cursor, scrollbar, and foreground/background.\n */\nexport interface ITerminalTheme {\n background: string;\n foreground: string;\n cursor: string;\n cursorAccent: string;\n selectionBackground: string;\n selectionForeground: string;\n black: string;\n red: string;\n green: string;\n yellow: string;\n blue: string;\n magenta: string;\n cyan: string;\n white: string;\n brightBlack: string;\n brightRed: string;\n brightGreen: string;\n brightYellow: string;\n brightBlue: string;\n brightMagenta: string;\n brightCyan: string;\n brightWhite: string;\n scrollbarSliderBackground: string;\n scrollbarSliderHoverBackground: string;\n scrollbarSliderActiveBackground: string;\n}\n\n/**\n * Generate a full xterm.js theme from a PhosphorMode.\n *\n * Maps theme colors to the 16 ANSI colors, selection, cursor, and scrollbar.\n * Light themes get inverted black/white and muted ANSI colors for readability.\n */\nexport function getTerminalTheme(mode: PhosphorMode): ITerminalTheme {\n const theme = themes[mode];\n const isLight = lightThemes.has(mode);\n\n const selectionBg = isLight ? '#3399FF' : theme.primary;\n const selectionFg = isLight ? '#000000' : '#000000';\n\n // For light themes, invert black/white so apps that hard-code dark backgrounds\n // (e.g. Codex using \\033[40m) remain readable on light terminal backgrounds.\n let black, white, brightBlack, brightWhite;\n\n if (isLight) {\n black = theme.bg;\n white = '#1a1a1a';\n brightBlack = '#e0e0e0';\n brightWhite = '#2a2a2a';\n } else {\n black = theme.bg;\n white = '#FFFFFF';\n brightBlack = '#636B7C';\n brightWhite = '#FFFFFF';\n }\n\n const cursorAccent = isLight\n ? (theme.foreground ?? '#1a1a1a')\n : theme.bg;\n\n return {\n background: \"rgba(0, 0, 0, 0)\",\n foreground: theme.foreground ?? theme.primary,\n cursor: theme.secondary,\n cursorAccent,\n selectionBackground: selectionBg,\n selectionForeground: selectionFg,\n black,\n red: isLight ? \"#c41a16\" : \"#FF0040\",\n green: isLight ? \"#007400\" : \"#39FF14\",\n yellow: isLight ? \"#826b00\" : \"#E5C400\",\n blue: isLight ? \"#0451a5\" : \"#7AA2F7\",\n magenta: isLight ? \"#a626a4\" : theme.secondary,\n cyan: isLight ? \"#0598bc\" : theme.primary,\n white,\n brightBlack,\n brightRed: isLight ? \"#e45649\" : \"#FF006E\",\n brightGreen: isLight ? \"#50a14f\" : \"#39FF14\",\n brightYellow: isLight ? \"#c18401\" : \"#FFD400\",\n brightBlue: isLight ? \"#4078f2\" : \"#89B4FA\",\n brightMagenta: isLight ? \"#c678dd\" : theme.secondary,\n brightCyan: isLight ? \"#0184bc\" : theme.primary,\n brightWhite,\n scrollbarSliderBackground: isLight ? 'rgba(0, 0, 0, 0.12)' : 'rgba(255, 255, 255, 0.1)',\n scrollbarSliderHoverBackground: isLight ? 'rgba(0, 0, 0, 0.2)' : 'rgba(255, 255, 255, 0.18)',\n scrollbarSliderActiveBackground: isLight ? 'rgba(0, 0, 0, 0.28)' : 'rgba(255, 255, 255, 0.25)',\n };\n}\n\n// ============================================================================\n// Light Theme Escape Sequence Transformer\n// ============================================================================\n\nfunction srgbToLinear(channel: number): number {\n const normalized = channel / 255;\n return normalized <= 0.04045\n ? normalized / 12.92\n : Math.pow((normalized + 0.055) / 1.055, 2.4);\n}\n\nfunction relativeLuminance(r: number, g: number, b: number): number {\n return 0.2126 * srgbToLinear(r) + 0.7152 * srgbToLinear(g) + 0.0722 * srgbToLinear(b);\n}\n\nfunction contrastRatio(\n fgR: number,\n fgG: number,\n fgB: number,\n bgR: number,\n bgG: number,\n bgB: number\n): number {\n const fgLum = relativeLuminance(fgR, fgG, fgB);\n const bgLum = relativeLuminance(bgR, bgG, bgB);\n const lighter = Math.max(fgLum, bgLum);\n const darker = Math.min(fgLum, bgLum);\n return (lighter + 0.05) / (darker + 0.05);\n}\n\nfunction ensureReadableForegroundOnLightTheme(\n red: number,\n green: number,\n blue: number,\n bgR: number,\n bgG: number,\n bgB: number,\n minContrast = 4.2\n): [number, number, number] {\n if (contrastRatio(red, green, blue, bgR, bgG, bgB) >= minContrast) {\n return [red, green, blue];\n }\n\n for (let step = 1; step <= 20; step += 1) {\n const factor = 1 - step / 20;\n const nextR = Math.round(red * factor);\n const nextG = Math.round(green * factor);\n const nextB = Math.round(blue * factor);\n if (contrastRatio(nextR, nextG, nextB, bgR, bgG, bgB) >= minContrast) {\n return [nextR, nextG, nextB];\n }\n }\n\n return [30, 30, 30];\n}\n\nfunction ansi256ToRgb(colorIndex: number): [number, number, number] | null {\n if (colorIndex < 0 || colorIndex > 255) return null;\n\n // Standard + bright ANSI palette.\n const basePalette: Array<[number, number, number]> = [\n [0, 0, 0],\n [205, 49, 49],\n [13, 188, 121],\n [229, 229, 16],\n [36, 114, 200],\n [188, 63, 188],\n [17, 168, 205],\n [229, 229, 229],\n [102, 102, 102],\n [241, 76, 76],\n [35, 209, 139],\n [245, 245, 67],\n [59, 142, 234],\n [214, 112, 214],\n [41, 184, 219],\n [255, 255, 255],\n ];\n\n if (colorIndex <= 15) return basePalette[colorIndex];\n\n if (colorIndex >= 16 && colorIndex <= 231) {\n const idx = colorIndex - 16;\n const red = Math.floor(idx / 36);\n const green = Math.floor((idx % 36) / 6);\n const blue = idx % 6;\n const level = [0, 95, 135, 175, 215, 255];\n return [level[red], level[green], level[blue]];\n }\n\n const gray = 8 + (colorIndex - 232) * 10;\n return [gray, gray, gray];\n}\n\n/**\n * Transform ANSI escape sequences for light themes.\n *\n * Apps like Codex use true color (24-bit) escape sequences that bypass our\n * theme's ANSI color settings. This intercepts dark backgrounds/foregrounds\n * and inverts them so TUI apps remain readable on light backgrounds.\n *\n * @param data - Raw terminal data with ANSI escape sequences\n * @param themeBg - The theme's background color hex (e.g., \"#F5E6D3\")\n * @returns Transformed data with inverted colors for light themes\n */\nexport function transformEscapeSequencesForLightTheme(data: string, themeBg: string): string {\n const bgR = parseInt(themeBg.slice(1, 3), 16);\n const bgG = parseInt(themeBg.slice(3, 5), 16);\n const bgB = parseInt(themeBg.slice(5, 7), 16);\n // Keep a small but visible contrast band so TUI input/panel regions\n // remain distinguishable on light themes.\n const highlightDelta = 22;\n const highlightR = Math.max(bgR - highlightDelta, 0);\n const highlightG = Math.max(bgG - highlightDelta, 0);\n const highlightB = Math.max(bgB - highlightDelta, 0);\n\n const transformSgr = (sequence: string) => {\n const body = sequence.slice(2, -1);\n if (body.length === 0) return sequence;\n\n const normalized = body.replace(/:/g, ';');\n const rawParams = normalized.split(';');\n const params: number[] = [];\n\n for (const raw of rawParams) {\n if (raw === '') {\n params.push(0);\n continue;\n }\n const value = Number(raw);\n if (!Number.isFinite(value)) {\n return sequence;\n }\n params.push(value);\n }\n\n let changed = false;\n const out: number[] = [];\n\n for (let i = 0; i < params.length; i += 1) {\n const code = params[i];\n\n // 24-bit background color (48;2;R;G;B)\n if (code === 48 && params[i + 1] === 2 && i + 4 < params.length) {\n const hasColorSpace = i + 5 < params.length\n && params[i + 2] === 0\n && params[i + 3] <= 255\n && params[i + 4] <= 255\n && params[i + 5] <= 255;\n const offset = hasColorSpace ? 3 : 2;\n const red = params[i + offset];\n const green = params[i + offset + 1];\n const blue = params[i + offset + 2];\n const sum = red + green + blue;\n\n if (sum < 600) {\n // Dark and mid-range backgrounds -> theme bg (invisible)\n out.push(48, 2, bgR, bgG, bgB);\n changed = true;\n } else {\n // Preserve bright panel/input backgrounds as subtle contrast.\n out.push(48, 2, highlightR, highlightG, highlightB);\n changed = true;\n }\n i += hasColorSpace ? 5 : 4;\n continue;\n }\n\n // 8-bit background color (48;5;N)\n if (code === 48 && params[i + 1] === 5 && i + 2 < params.length) {\n const colorIndex = params[i + 2];\n if (colorIndex === 7 || colorIndex === 8 || colorIndex === 15 || (colorIndex >= 247 && colorIndex <= 255)) {\n // White/bright backgrounds often represent panel surfaces in TUIs.\n // Keep them as a subtle highlight instead of fully flattening.\n out.push(48, 2, highlightR, highlightG, highlightB);\n changed = true;\n } else if (colorIndex === 0 || colorIndex === 16 || (colorIndex >= 232 && colorIndex <= 246)) {\n // Map black and dark-to-mid grays (232-246) to theme bg.\n out.push(48, 2, bgR, bgG, bgB);\n changed = true;\n } else {\n out.push(48, 5, colorIndex);\n }\n i += 2;\n continue;\n }\n\n // 24-bit foreground color (38;2;R;G;B)\n if (code === 38 && params[i + 1] === 2 && i + 4 < params.length) {\n const hasColorSpace = i + 5 < params.length\n && params[i + 2] === 0\n && params[i + 3] <= 255\n && params[i + 4] <= 255\n && params[i + 5] <= 255;\n const offset = hasColorSpace ? 3 : 2;\n const red = params[i + offset];\n const green = params[i + offset + 1];\n const blue = params[i + offset + 2];\n const [nextR, nextG, nextB] = ensureReadableForegroundOnLightTheme(red, green, blue, bgR, bgG, bgB);\n if (nextR !== red || nextG !== green || nextB !== blue) {\n out.push(38, 2, nextR, nextG, nextB);\n changed = true;\n } else {\n out.push(38, 2, red, green, blue);\n }\n i += hasColorSpace ? 5 : 4;\n continue;\n }\n\n // 8-bit foreground color (38;5;N)\n if (code === 38 && params[i + 1] === 5 && i + 2 < params.length) {\n const colorIndex = params[i + 2];\n const rgb = ansi256ToRgb(colorIndex);\n if (!rgb) {\n out.push(38, 5, colorIndex);\n i += 2;\n continue;\n }\n const [red, green, blue] = rgb;\n const [nextR, nextG, nextB] = ensureReadableForegroundOnLightTheme(red, green, blue, bgR, bgG, bgB);\n if (nextR !== red || nextG !== green || nextB !== blue) {\n out.push(38, 2, nextR, nextG, nextB);\n changed = true;\n } else {\n out.push(38, 5, colorIndex);\n }\n i += 2;\n continue;\n }\n\n // Faint text often becomes unreadable on light backgrounds.\n if (code === 2) {\n changed = true;\n continue;\n }\n\n // Standard ANSI background black (40)\n if (code === 40) {\n out.push(48, 2, bgR, bgG, bgB);\n changed = true;\n continue;\n }\n\n // ANSI white/bright white background (47, 107)\n if (code === 47 || code === 107) {\n out.push(48, 2, highlightR, highlightG, highlightB);\n changed = true;\n continue;\n }\n\n // Bright black background (100)\n if (code === 100) {\n out.push(48, 2, highlightR, highlightG, highlightB);\n changed = true;\n continue;\n }\n\n // ANSI black foreground (30)\n if (code === 30) {\n out.push(38, 2, 60, 60, 60);\n changed = true;\n continue;\n }\n\n // Bright black foreground (90)\n if (code === 90) {\n out.push(38, 2, 100, 100, 100);\n changed = true;\n continue;\n }\n\n // ANSI white foreground (37)\n if (code === 37) {\n out.push(38, 2, 40, 40, 40);\n changed = true;\n continue;\n }\n\n // Bright white foreground (97)\n if (code === 97) {\n out.push(38, 2, 30, 30, 30);\n changed = true;\n continue;\n }\n\n // Reverse video (7) can create harsh dark pills on light themes when\n // apps rely on default background swapping. Force a subtle theme-aware bg.\n if (code === 7) {\n out.push(48, 2, highlightR, highlightG, highlightB);\n changed = true;\n continue;\n }\n\n // Inverse-off (27) should clear the background we introduced for code 7.\n if (code === 27) {\n out.push(49);\n changed = true;\n continue;\n }\n\n out.push(code);\n }\n\n if (!changed) return sequence;\n return `\\x1b[${out.join(';')}m`;\n };\n\n return data.replace(/\\x1b\\[[0-9:;]*m/g, transformSgr);\n}\n\n/**\n * Transform ANSI escape sequences for dark themes with non-black backgrounds.\n *\n * Apps like Claude Code use true-color (24-bit) escape sequences for dark\n * backgrounds (e.g. \\033[48;2;0;0;0m) which bypass the ANSI color mapping.\n * On dark themes where the bg isn't pure black, these show as jarring strips.\n * This remaps near-black and near-white backgrounds to the theme bg.\n */\nexport function transformEscapeSequencesForDarkTheme(data: string, themeBg: string): string {\n const bgR = parseInt(themeBg.slice(1, 3), 16);\n const bgG = parseInt(themeBg.slice(3, 5), 16);\n const bgB = parseInt(themeBg.slice(5, 7), 16);\n\n const transformSgr = (sequence: string) => {\n const body = sequence.slice(2, -1);\n if (body.length === 0) return sequence;\n\n const normalized = body.replace(/:/g, ';');\n const rawParams = normalized.split(';');\n const params: number[] = [];\n\n for (const raw of rawParams) {\n if (raw === '') { params.push(0); continue; }\n const value = Number(raw);\n if (!Number.isFinite(value)) return sequence;\n params.push(value);\n }\n\n let changed = false;\n const out: number[] = [];\n\n for (let i = 0; i < params.length; i += 1) {\n const code = params[i];\n\n // 24-bit background color (48;2;R;G;B) — remap near-black/near-white\n if (code === 48 && params[i + 1] === 2 && i + 4 < params.length) {\n const hasColorSpace = i + 5 < params.length\n && params[i + 2] === 0\n && params[i + 3] <= 255\n && params[i + 4] <= 255\n && params[i + 5] <= 255;\n const offset = hasColorSpace ? 3 : 2;\n const red = params[i + offset];\n const green = params[i + offset + 1];\n const blue = params[i + offset + 2];\n const sum = red + green + blue;\n\n // Near-black and near-white backgrounds are usually hard-coded TUI\n // panel fills that clash with themed dark terminals.\n if (sum < 40 || sum > 700) {\n out.push(48, 2, bgR, bgG, bgB);\n changed = true;\n } else {\n out.push(48, 2, red, green, blue);\n }\n i += hasColorSpace ? 5 : 4;\n continue;\n }\n\n // 8-bit background color (48;5;N) — remap black/near-black and white\n if (code === 48 && params[i + 1] === 5 && i + 2 < params.length) {\n const colorIndex = params[i + 2];\n if (\n colorIndex === 0\n || colorIndex === 7\n || colorIndex === 8\n || colorIndex === 15\n || colorIndex === 16\n || colorIndex === 231\n || (colorIndex >= 232 && colorIndex <= 234)\n || (colorIndex >= 250 && colorIndex <= 255)\n ) {\n out.push(48, 2, bgR, bgG, bgB);\n changed = true;\n } else {\n out.push(48, 5, colorIndex);\n }\n i += 2;\n continue;\n }\n\n // Standard ANSI white/bright white background\n if (code === 47 || code === 107) {\n out.push(48, 2, bgR, bgG, bgB);\n changed = true;\n continue;\n }\n\n out.push(code);\n }\n\n if (!changed) return sequence;\n return `\\x1b[${out.join(';')}m`;\n };\n\n return data.replace(/\\x1b\\[[0-9:;]*m/g, transformSgr);\n}\n"],"mappings":"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","names":[]}
|