114 lines
3.5 KiB
TypeScript
114 lines
3.5 KiB
TypeScript
/**
|
|
* Theme configuration for the CLI TUI using Ink.
|
|
* Defines colors, styles, and visual constants used throughout the application.
|
|
*/
|
|
|
|
import type { TextProps } from "ink";
|
|
|
|
/**
|
|
* Color type - supports Ink color names.
|
|
*/
|
|
export type Color = TextProps["color"];
|
|
|
|
/**
|
|
* Color palette for the application.
|
|
* All colors are compatible with Ink's Text component.
|
|
*/
|
|
export const colors = {
|
|
// Primary colors
|
|
primary: "cyan" as Color,
|
|
secondary: "blue" as Color,
|
|
accent: "magenta" as Color,
|
|
|
|
// Status colors
|
|
success: "green" as Color,
|
|
warning: "yellow" as Color,
|
|
error: "red" as Color,
|
|
info: "cyan" as Color,
|
|
|
|
// Text colors
|
|
text: "white" as Color,
|
|
textMuted: "gray" as Color,
|
|
textHighlight: "whiteBright" as Color,
|
|
|
|
// Background colors
|
|
bg: "black" as Color,
|
|
bgSelected: "blue" as Color,
|
|
bgHover: "gray" as Color,
|
|
|
|
// Border colors
|
|
border: "cyan" as Color,
|
|
borderFocused: "yellowBright" as Color,
|
|
borderMuted: "gray" as Color,
|
|
|
|
// Focus highlight color (very visible)
|
|
focus: "yellowBright" as Color,
|
|
} as const;
|
|
|
|
/**
|
|
* Layout constants for consistent spacing.
|
|
*/
|
|
export const layout = {
|
|
padding: {
|
|
small: 1,
|
|
medium: 2,
|
|
large: 3,
|
|
},
|
|
margin: {
|
|
small: 1,
|
|
medium: 2,
|
|
large: 3,
|
|
},
|
|
} as const;
|
|
|
|
/**
|
|
* ASCII art logo for the application header.
|
|
*/
|
|
export const logo = `
|
|
██╗ ██╗ ██████╗ ██╗ ██╗ █████╗ ██╗ ██╗ ███████╗████████╗
|
|
╚██╗██╔╝██╔═══██╗ ██║ ██║██╔══██╗██║ ██║ ██╔════╝╚══██╔══╝
|
|
╚███╔╝ ██║ ██║ ██║ █╗ ██║███████║██║ ██║ █████╗ ██║
|
|
██╔██╗ ██║ ██║ ██║███╗██║██╔══██║██║ ██║ ██╔══╝ ██║
|
|
██╔╝ ██╗╚██████╔╝ ╚███╔███╔╝██║ ██║███████╗███████╗███████╗ ██║
|
|
╚═╝ ╚═╝ ╚═════╝ ╚══╝╚══╝ ╚═╝ ╚═╝╚══════╝╚══════╝╚══════╝ ╚═╝
|
|
`.trim();
|
|
|
|
/**
|
|
* Small logo for status bar.
|
|
*/
|
|
export const logoSmall = "XO Wallet";
|
|
|
|
/**
|
|
* Helper to format satoshis for display.
|
|
* @param satoshis - Amount in satoshis
|
|
* @returns Formatted string with BCH amount
|
|
*/
|
|
export function formatSatoshis(satoshis: bigint | number): string {
|
|
const value = typeof satoshis === "bigint" ? satoshis : BigInt(satoshis);
|
|
const bch = Number(value) / 100_000_000;
|
|
return `${bch.toFixed(8)} BCH (${value.toLocaleString()} sats)`;
|
|
}
|
|
|
|
/**
|
|
* Helper to truncate long strings with ellipsis.
|
|
* @param str - String to truncate
|
|
* @param maxLength - Maximum length
|
|
* @returns Truncated string
|
|
*/
|
|
export function truncate(str: string, maxLength: number): string {
|
|
if (str.length <= maxLength) return str;
|
|
return str.slice(0, maxLength - 3) + "...";
|
|
}
|
|
|
|
/**
|
|
* Helper to format a hex string for display.
|
|
* @param hex - Hex string
|
|
* @param maxLength - Maximum display length
|
|
* @returns Formatted hex string
|
|
*/
|
|
export function formatHex(hex: string, maxLength: number = 16): string {
|
|
if (hex.length <= maxLength) return hex;
|
|
const half = Math.floor((maxLength - 3) / 2);
|
|
return `${hex.slice(0, half)}...${hex.slice(-half)}`;
|
|
}
|