42 lines
862 B
TypeScript
42 lines
862 B
TypeScript
import { RGBA } from "@opentui/core"
|
|
|
|
export function ansiToRgba(code: number) {
|
|
if (code < 16) {
|
|
const ansi = [
|
|
"#000000",
|
|
"#800000",
|
|
"#008000",
|
|
"#808000",
|
|
"#000080",
|
|
"#800080",
|
|
"#008080",
|
|
"#c0c0c0",
|
|
"#808080",
|
|
"#ff0000",
|
|
"#00ff00",
|
|
"#ffff00",
|
|
"#0000ff",
|
|
"#ff00ff",
|
|
"#00ffff",
|
|
"#ffffff",
|
|
]
|
|
return RGBA.fromHex(ansi[code] ?? "#000000")
|
|
}
|
|
|
|
if (code < 232) {
|
|
const index = code - 16
|
|
const b = index % 6
|
|
const g = Math.floor(index / 6) % 6
|
|
const r = Math.floor(index / 36)
|
|
const value = (x: number) => (x === 0 ? 0 : x * 40 + 55)
|
|
return RGBA.fromInts(value(r), value(g), value(b))
|
|
}
|
|
|
|
if (code < 256) {
|
|
const gray = (code - 232) * 10 + 8
|
|
return RGBA.fromInts(gray, gray, gray)
|
|
}
|
|
|
|
return RGBA.fromInts(0, 0, 0)
|
|
}
|