|
|
@@ -1,15 +1,9 @@
|
|
|
import z from "zod"
|
|
|
import { EOL } from "os"
|
|
|
import { NamedError } from "@opencode-ai/util/error"
|
|
|
+import { logo as glyphs } from "./logo"
|
|
|
|
|
|
export namespace UI {
|
|
|
- const LOGO = [
|
|
|
- [` `, ` ▄ `],
|
|
|
- [`█▀▀█ █▀▀█ █▀▀█ █▀▀▄ `, `█▀▀▀ █▀▀█ █▀▀█ █▀▀█`],
|
|
|
- [`█░░█ █░░█ █▀▀▀ █░░█ `, `█░░░ █░░█ █░░█ █▀▀▀`],
|
|
|
- [`▀▀▀▀ █▀▀▀ ▀▀▀▀ ▀ ▀ `, `▀▀▀▀ ▀▀▀▀ ▀▀▀▀ ▀▀▀▀`],
|
|
|
- ]
|
|
|
-
|
|
|
export const CancelledError = NamedError.create("UICancelledError", z.void())
|
|
|
|
|
|
export const Style = {
|
|
|
@@ -47,15 +41,50 @@ export namespace UI {
|
|
|
}
|
|
|
|
|
|
export function logo(pad?: string) {
|
|
|
- const result = []
|
|
|
- for (const row of LOGO) {
|
|
|
+ const result: string[] = []
|
|
|
+ const reset = "\x1b[0m"
|
|
|
+ const left = {
|
|
|
+ fg: Bun.color("gray", "ansi") ?? "",
|
|
|
+ shadow: "\x1b[38;5;235m",
|
|
|
+ bg: "\x1b[48;5;235m",
|
|
|
+ }
|
|
|
+ const right = {
|
|
|
+ fg: reset,
|
|
|
+ shadow: "\x1b[38;5;238m",
|
|
|
+ bg: "\x1b[48;5;238m",
|
|
|
+ }
|
|
|
+ const gap = " "
|
|
|
+ const draw = (line: string, fg: string, shadow: string, bg: string) => {
|
|
|
+ const parts: string[] = []
|
|
|
+ for (const char of line) {
|
|
|
+ if (char === "_") {
|
|
|
+ parts.push(bg, " ", reset)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ if (char === "^") {
|
|
|
+ parts.push(fg, bg, "▀", reset)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ if (char === "~") {
|
|
|
+ parts.push(shadow, "▀", reset)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ if (char === " ") {
|
|
|
+ parts.push(" ")
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ parts.push(fg, char, reset)
|
|
|
+ }
|
|
|
+ return parts.join("")
|
|
|
+ }
|
|
|
+ glyphs.left.forEach((row, index) => {
|
|
|
if (pad) result.push(pad)
|
|
|
- result.push(Bun.color("gray", "ansi"))
|
|
|
- result.push(row[0])
|
|
|
- result.push("\x1b[0m")
|
|
|
- result.push(row[1])
|
|
|
+ result.push(draw(row, left.fg, left.shadow, left.bg))
|
|
|
+ result.push(gap)
|
|
|
+ const other = glyphs.right[index] ?? ""
|
|
|
+ result.push(draw(other, right.fg, right.shadow, right.bg))
|
|
|
result.push(EOL)
|
|
|
- }
|
|
|
+ })
|
|
|
return result.join("").trimEnd()
|
|
|
}
|
|
|
|