From d28d8333ebe71e2937660b13d9afb1d516cf14f0 Mon Sep 17 00:00:00 2001 From: wlodekm Date: Fri, 15 Nov 2024 09:46:47 +0200 Subject: v1.0.2 --- v2/elements.ts | 124 --------------------------------------------------------- 1 file changed, 124 deletions(-) delete mode 100644 v2/elements.ts (limited to 'v2/elements.ts') diff --git a/v2/elements.ts b/v2/elements.ts deleted file mode 100644 index c364930..0000000 --- a/v2/elements.ts +++ /dev/null @@ -1,124 +0,0 @@ -import chalk from "chalk"; -import { type Key } from 'node:readline'; -import { type Screen } from "./screen.ts"; - -export abstract class Element { - focusable: boolean = false; - focused: boolean = false; - // screen property is asigned by the addElement function of Scren - //@ts-ignore - screen: Screen; - abstract render(): void; - onkeypres(key: Key): void {}; -} - -export class Text extends Element { - text: string; - br: boolean; - - processText: (text: string) => string; - - constructor(text: string, processText = (t:string)=>t) { - super(); - this.text = text; - this.processText = processText - } - render() { - process.stdout.write(this.processText(this.text)) - } -} - -export class HR extends Element { - constructor() { - super() - } - render(): void { - console.log('-'.repeat(process.stdout.columns)) - } -} - -export class BR extends Element { - constructor() { - super() - } - render(): void { - console.log() - } -} - -export class Input extends Element { - focusable: boolean = true; - value: string = ""; - - textarea = false; - br = false; - - isPassword: boolean = false; - - render(): void { - let text = this.value - if (this.isPassword) text = text.replace(/[^]/g, '*'); - if (this.focused) text += "_" - process.stdout.write(text) - } - - onkeypres(key: Key): void { - //@ts-ignore - if (key.meta || key.code || ["return", "backspace"].includes(key.name)) { - switch (key.name) { - case "return": - if(this.textarea) { - this.value += '\n' - break; - } - this.focused = false; - const focusableIDs = Object.keys(this.screen.getFocusable()); - const focusedIndex = focusableIDs.indexOf(this.screen.focusedElementId); - this.screen.focus(focusableIDs[(focusedIndex + 1) % focusableIDs.length]); - break; - - case "backspace": - const prevValue = '' + this.value - // logs.push(`doing backspace : before ${prevValue}, after ${prevValue.substring(0, prevValue.length - 1)} : 0-${prevValue.length - 1}`) - this.value = prevValue.substring(0, prevValue.length - 1) - break; - } - this.screen.render() - return; - } - // check if the character ism't typable - // checks: - // sequience length > 1 (eg ^[ ^[[A) - // key name != sequence (and if name exists) - //@ts-ignore - if (!key.sequence || key.sequence.length > 1 || key.name != key.sequence?.toLowerCase() && !["space"].includes(key.name) && key.name) return; - this.value += key.sequence; - this.screen.render() - } - - constructor(isPassword: boolean = false, br: boolean = false, textarea: boolean = false) { - super() - this.br = br - this.isPassword = isPassword; - this.textarea = textarea; - } -} - -export class Button extends Text { - focusable: boolean = true; - onclick: ()=>void; - constructor (text: string, onclick=()=>{}) { - super(text); - this.onclick = onclick - } - render(): void { - process.stdout.write(`(${(this.focused ? chalk.bgWhite : (a:string)=>a)(this.text)})`) - } - - onkeypres(key: Key): void { - //@ts-ignore - if (["return", "space"].includes(key.name)) { - this.onclick.call(this.screen) - } - } -} -- cgit 1.4.1-2-gfad0