Terminal
import { Terminal } from '@hanzo/ui'
Default
A bare shell with the built-ins (`help`, `clear`, `date`, `echo …`) and nothing else wired up.
terminal
>
export function Default() {return <Terminal prompt=">" />}
With history
Commands rendered up front, as `initialCommands` would carry over from a previous session.
terminal
$echo Welcome to Terminal
Welcome to Terminal
$help
Available commands: help, clear, echo, date
$
export function WithHistory() {return (<Terminal initialCommands={[ { id: "1", input: "echo Welcome to Terminal", output: "Welcome to Terminal", timestamp: new Date(), type: "success", }, { id: "2", input: "help", output: "Available commands: help, clear, echo, date", timestamp: new Date(), type: "info", }, ]} />)}
Themes
The same terminal in each of the four built-in palettes.
terminal
$
terminal
$
terminal
$
terminal
$
export function Themes() {return (<YStack gap="$4"><Terminal theme="dark" /><Terminal theme="matrix" /><Terminal theme="dracula" /><Terminal theme="light" /></YStack>)}
Custom command handler
`onCommand` answers anything the built-ins don't, and `autoCompleteCommands` offers those names on Tab.
terminal
$
export function CustomCommands() {const handleCommand = async (command: string) => {const [cmd, ...args] = command.split(" ")switch (cmd) {case "time":return new Date().toLocaleTimeString()case "greet":return `Hello, ${args.join(" ") || "stranger"}!`default:return `Command not found: ${cmd}`}}return (<Terminal prompt="$" onCommand={handleCommand} autoCompleteCommands={["time", "greet", "help", "clear"]} />)}
Types
export type TerminalTheme = 'dark' | 'light' | 'matrix' | 'dracula'
export type TerminalLineType = 'command' | 'error' | 'success' | 'info'
export interface TerminalCommand {id: stringinput: stringoutput: string | React.ReactNodetimestamp: Datetype?: TerminalLineType}
export interface TerminalProps extends Omit<YStackProps, 'children' | 'theme'> {/** Shown before every command line and the input line. */prompt?: string/** Lines shown before anything is typed. */initialCommands?: TerminalCommand[]/** Handles anything the built-ins (`clear`/`help`/`date`/`echo`) do not. */onCommand?: (command: string) => Promise<string | React.ReactNode> | string | React.ReactNodetheme?: TerminalTheme/** Arrow-key history navigation. */enableHistory?: boolean/** Tab-completion against `autoCompleteCommands`. */enableAutoComplete?: booleanautoCompleteCommands?: string[]maxHistorySize?: number}
Exports
Terminaltype TerminalCommandtype TerminalLineTypetype TerminalPropstype TerminalTheme