UNPKG

react-terminal-plus

Version:

A improved version of `react-terminal` - react-terminal-plus

130 lines (101 loc) โ€ข 5.92 kB
# react-terminal-plus <p align="center">๐Ÿš€ React component that renders and feels like a Terminal ๐Ÿ–ฅ</p> <p align="center"> <a href="#features">Features</a> โ€ข <a href="#installation">Installation</a> โ€ข <a href="#usage">Usage</a> โ€ข <a href="#props">Props</a> โ€ข <a href="#development">Development</a> โ€ข <a href="#credits">Credits</a> </p> <img alt="react-terminal-plus preview" src="./react-terminal-plus.gif" /> ## Features - Mobile support. ๐Ÿ“ฑ - Customizable commands, prompt and error message. โœ… - Support callbacks(async/non-async) for commands. ๐Ÿ”„ - Command history using arrow up and down. ๐Ÿ”ผ - Support for copy/paste through keyboard and browser's context. ๐Ÿ“‹ - Cancel running command using `Ctrl + C`. โ›” - In-built themes and support to create more. ๐Ÿš€ - Clear the terminal with `clear` command or using `Ctrl + L`. ๐Ÿงน - Local storage support for the command history. ๐Ÿ’พ - Full TypeScript support. ๐ŸŽ‰ ## Installation ``` npm install react-terminal-plus ``` OR ``` yarn add react-terminal-plus ``` OR ``` pnpm i react-terminal-plus ``` ## Usage ```tsx import { TerminalContextProvider, ReactTerminal } from "react-terminal-plus"; function App(props) { // Define commands here const commands = { whoami: "jackharper", cd: (directory) => `changed path to ${directory}`, }; return ( <TerminalContextProvider> <ReactTerminal commands={commands} /> </TerminalContextProvider> ); } ``` ## Creating custom themes The component comes with few in-built themes: `light`, `dark`, `material-light`, `material-dark`, `material-ocean`, `matrix` and `dracula`. You can also create custom themes by passing `themes` parameter in props, as follows: ``` <ReactTerminal commands={commands} themes={{ "my-custom-theme": { themeBGColor: "#272B36", themeToolbarColor: "#DBDBDB", themeColor: "#FFFEFC", themePromptColor: "#a917a8" } }} theme="my-custom-theme" /> ``` ## Props | name | description | default | | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | | `welcomeMessage` | A welcome message to show at the start, before the prompt begins. Value can be either a string or JSX | null | | `prompt` | Terminal prompt | >>> | | `commands` | List of commands to be provided as a key value pair where value can be either a string, JSX/HTML tag or callback | null | | `errorMessage` | Message to show when unidentified command executed, can be either a string, JSX/HTML tag or callback | "not found!" | | `enableInput` | Whether to enable user input | true | | `showControlBar` | Whether to show the top control bar | true | | `showControlButtons` | Whether to show the control buttons at the top bar of the terminal | true | | `theme` | Theme of the terminal | "light" | | `themes` | Themes object to supply custom themes | null | | `defaultHandler` | Default handler to be used (if provided) when no commands match. Useful when you don't know list of commands beforehand/want to send them to server for handling. | null | ## In-built commands | command | description | | ------- | ------------------ | | clear | clears the console | | cls | clears the console | ## In-built shortcuts | shortcut | description | | ------------------ | ----------------------------------------------------------- | | ctrl + c | copy OR cancel running command if there is no selected text | | ctrl + v | paste | | ctrl + l | clear the console | | ctrl + a | moves the cursor to the beginning of the line | | ctrl + e | moves the cursor to the end of the line | | Home | moves the cursor to the beginning of the line | | End | moves the cursor to the end of the line | | ctrl + left-arrow | moves the cursor to the backward word | | ctrl + right-arrow | moves the cursor to the forward word | ## Development See [`.github/CONTRIBUTING.md`](./.github/CONTRIBUTING.md), then [`.github/DEVELOPMENT.md`](./.github/DEVELOPMENT.md). Thanks! ๐Ÿ’ช ## Credits This repository resulted from a [`react-terminal`](https://github.com/bony2023/react-terminal) fork, and as such we would like to thank all its contributors for creating such an amazing piece of OS software. ๐Ÿ’–