38 lines
1.0 KiB
TypeScript
38 lines
1.0 KiB
TypeScript
import chalk from "chalk";
|
|
|
|
// Semantic palette for CLI output. Keep in sync with docs/cli/index.md.
|
|
export const LOBSTER_PALETTE = {
|
|
accent: "#FF5A2D",
|
|
accentBright: "#FF7A3D",
|
|
accentDim: "#D14A22",
|
|
info: "#FF8A5B",
|
|
success: "#2FBF71",
|
|
warn: "#FFB020",
|
|
error: "#E23D2D",
|
|
muted: "#8B7F77",
|
|
} as const;
|
|
|
|
const hex = (value: string) => chalk.hex(value);
|
|
|
|
export const theme = {
|
|
accent: hex(LOBSTER_PALETTE.accent),
|
|
accentBright: hex(LOBSTER_PALETTE.accentBright),
|
|
accentDim: hex(LOBSTER_PALETTE.accentDim),
|
|
info: hex(LOBSTER_PALETTE.info),
|
|
success: hex(LOBSTER_PALETTE.success),
|
|
warn: hex(LOBSTER_PALETTE.warn),
|
|
error: hex(LOBSTER_PALETTE.error),
|
|
muted: hex(LOBSTER_PALETTE.muted),
|
|
heading: chalk.bold.hex(LOBSTER_PALETTE.accent),
|
|
command: hex(LOBSTER_PALETTE.accentBright),
|
|
option: hex(LOBSTER_PALETTE.warn),
|
|
} as const;
|
|
|
|
export const isRich = () => Boolean(process.stdout.isTTY && chalk.level > 0);
|
|
|
|
export const colorize = (
|
|
rich: boolean,
|
|
color: (value: string) => string,
|
|
value: string,
|
|
) => (rich ? color(value) : value);
|