labsUI

Terminal

Terminal window. Snippet mode types install commands once scrolled into view, with the full transcript kept in the DOM for SEO and no-JS; log mode streams lines into a live region that follows the bottom unless you scroll up, then offers a jump back. Status lines carry glyphs, copy grabs the commands.

npx @kznlabs/labsui add terminal

zsh — clips

$bun create next-app clips --empty
Creating a new Next.js app in ./clips
Created clips in 1.8s
$cd clips && bun add motion lucide-react
installed motion@14.6.0
installed lucide-react@1.4.0
2 packages installed [612ms]

clipper.log

12:04:00Clipper#4021 connected to 12 servers

<Terminal>

Terminal window. Snippet mode types install commands once in view (full text stays in the DOM for SEO and no-JS); log mode streams lines and follows the bottom unless you scroll up, offering a jump back when new output arrives.

  • lines*
    TerminalLine[]

    Lines in order; append to stream a log.

  • bodyClassName
    string

    Size the scrolling body, e.g. "h-64".

  • copyText
    string | false

    What Copy puts on the clipboard; defaults to the commands. false hides it.

  • logdefault false
    boolean

    Live log: role="log", sticks to the bottom unless you scroll up to read.

  • promptdefault "$"
    string

    Symbol before commands.

  • speeddefault 35
    number

    Ms per typed character.

  • titledefault "Terminal"
    string

    Window title.

  • typingdefault false
    boolean

    Types the commands and reveals the output once in view (install snippets).

PropTypeDefault
lines*

Lines in order; append to stream a log.

TerminalLine[]—
bodyClassName

Size the scrolling body, e.g. "h-64".

string—
copyText

What Copy puts on the clipboard; defaults to the commands. false hides it.

string | false—
log

Live log: role="log", sticks to the bottom unless you scroll up to read.

booleanfalse
prompt

Symbol before commands.

string"$"
speed

Ms per typed character.

number35
title

Window title.

string"Terminal"
typing

Types the commands and reveals the output once in view (install snippets).

booleanfalse
type TerminalLine
{ id?: string | number; kind?: Kind; text: string; time?: string; }

* required. Every component also takes className.