Buckets:
| import { bind } from 'decko'; | |
| import { Component, h } from 'preact'; | |
| import { Xterm, XtermOptions } from './xterm'; | |
| import '@xterm/xterm/css/xterm.css'; | |
| import { Modal } from '../modal'; | |
| interface Props extends XtermOptions { | |
| id: string; | |
| } | |
| interface State { | |
| modal: boolean; | |
| } | |
| export class Terminal extends Component<Props, State> { | |
| private container: HTMLElement; | |
| private xterm: Xterm; | |
| constructor(props: Props) { | |
| super(); | |
| this.xterm = new Xterm(props, this.showModal); | |
| } | |
| async componentDidMount() { | |
| await this.xterm.refreshToken(); | |
| this.xterm.open(this.container); | |
| this.xterm.connect(); | |
| } | |
| componentWillUnmount() { | |
| this.xterm.dispose(); | |
| } | |
| render({ id }: Props, { modal }: State) { | |
| return ( | |
| <div id={id} ref={c => (this.container = c as HTMLElement)}> | |
| <Modal show={modal}> | |
| <label class="file-label"> | |
| <input onChange={this.sendFile} class="file-input" type="file" multiple /> | |
| <span class="file-cta">Choose files…</span> | |
| </label> | |
| </Modal> | |
| </div> | |
| ); | |
| } | |
| showModal() { | |
| this.setState({ modal: true }); | |
| } | |
| sendFile(event: Event) { | |
| this.setState({ modal: false }); | |
| const files = (event.target as HTMLInputElement).files; | |
| if (files) this.xterm.sendFile(files); | |
| } | |
| } | |
Xet Storage Details
- Size:
- 1.49 kB
- Xet hash:
- f65c938e6e541cb22415fa5268162bbfb8f50fd6661b048db40e909a8be67efa
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.