UNPKG

console-gui-tools

Version:

A simple library to draw option menu, text popup or other widgets and layout on a Node.js console.

27 lines (20 loc) 97.8 kB
/* eslint-disable linebreak-style */ /* ____ _ ____ _ _____ _ / ___|___ _ __ ___ ___ | | ___ / ___|_ _(_) |_ _|__ ___ | |___ | | / _ \| '_ \/ __|/ _ \| |/ _ \ | | _| | | | | | |/ _ \ / _ \| / __| | |__| (_) | | | \__ \ (_) | | __/ | |_| | |_| | | | | (_) | (_) | \__ \ \____\___/|_| |_|___/\___/|_|\___| \____|\__,_|_| |_|\___/ \___/|_|___/ v3.7.0 A simple library to draw option menu, text popup or other widgets and layout on a Node.js console. Author: Elia Lazzari License: MIT Repository: git+https://github.com/Elius94/console-gui-tools.git This program is free software: you can redistribute it and/or modify Build: Tue, 11 Jun 2024 09:30:19 GMT for Node node18.18, ECMAScript es2022 */ "use strict";var re=Object.create;var j=Object.defineProperty;var ne=Object.getOwnPropertyDescriptor;var le=Object.getOwnPropertyNames;var he=Object.getPrototypeOf,ae=Object.prototype.hasOwnProperty;var ue=(a,o)=>{for(var t in o)j(a,t,{get:o[t],enumerable:!0})},Et=(a,o,t,e)=>{if(o&&typeof o=="object"||typeof o=="function")for(let i of le(o))!ae.call(a,i)&&i!==t&&j(a,i,{get:()=>o[i],enumerable:!(e=ne(o,i))||e.enumerable});return a};var _=(a,o,t)=>(t=a!=null?re(he(a)):{},Et(o||!a||!a.__esModule?j(t,"default",{value:a,enumerable:!0}):t,a)),de=a=>Et(j({},"__esModule",{value:!0}),a);var Me={};ue(Me,{Box:()=>et,Button:()=>it,ButtonPopup:()=>G,ConfirmPopup:()=>J,ConsoleManager:()=>y,Control:()=>K,CustomPopup:()=>H,EOL:()=>f.EOL,FileSelectorPopup:()=>Q,InPageWidgetBuilder:()=>k,InputPopup:()=>Z,OptionPopup:()=>tt,PageBuilder:()=>E,Progress:()=>st});module.exports=de(Me);var te=require("events"),wt=_(require("readline"),1);var r={normal:{topLeft:"\u250C",topRight:"\u2510",bottomLeft:"\u2514",bottomRight:"\u2518",horizontal:"\u2500",vertical:"\u2502",cross:"\u253C",left:"\u251C",right:"\u2524",top:"\u252C",bottom:"\u2534",start:"",end:"",color:""},selected:{topLeft:"\u2554",topRight:"\u2557",bottomLeft:"\u255A",bottomRight:"\u255D",horizontal:"\u2550",vertical:"\u2551",cross:"\u256C",left:"\u2560",right:"\u2563",top:"\u2566",bottom:"\u2569",start:"",end:"",color:""},hovered:{topLeft:"\u2553",topRight:"\u2556",bottomLeft:"\u2559",bottomRight:"\u255C",horizontal:"\u2500",vertical:"\u2502",cross:"\u256B",left:"\u255F",right:"\u2562",top:"\u2565",bottom:"\u2568",start:"",end:"",color:""}};function x(a,o,t){if(g(a)<=o)return a;let e=a.substring(0,o-1);return(t?e.substring(0,e.lastIndexOf(" ")):e)+"\u2026"}function Lt(a){return{text:a.text,color:a.style?.color,bg:a.style?.bg,italic:a.style?.italic,bold:a.style?.bold,dim:a.style?.dim,underline:a.style?.underline,inverse:a.style?.inverse,hidden:a.style?.hidden,strikethrough:a.style?.strikethrough,overline:a.style?.overline}}function Tt(a){return{text:a.text,style:{color:a?.color,bg:a?.bg,italic:a?.italic,bold:a?.bold,dim:a?.dim,underline:a?.underline,inverse:a?.inverse,hidden:a?.hidden,strikethrough:a?.strikethrough,overline:a?.overline}}}function g(a){let o=new RegExp("[\x1B\x9B][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]","g");return Array.from(a.replace(o,"")).length}var lt=class{constructor(o=100){this.rowsPerPage=o,this.scrollIndex=0,this.content=[]}addRow(...o){let t=o.map(e=>Tt(e));return this.content.push(t),this}addSpacer(o=1){if(o>0)for(let t=0;t<o;t++)this.addRow({text:"",color:""});return this}getContent(){return this.getPageHeight()>this.rowsPerPage?this.content.slice(this.getPageHeight()-this.scrollIndex-this.rowsPerPage,this.getPageHeight()-this.scrollIndex):this.content}getPageHeight(){return this.content.length}getViewedPageHeight(){return this.getContent().length}setScrollIndex(o){return this.scrollIndex=o,this}setRowsPerPage(o){return this.rowsPerPage=o,this}increaseScrollIndex(){return this.scrollIndex<this.getPageHeight()-this.rowsPerPage&&this.scrollIndex++,this}decreaseScrollIndex(){return this.scrollIndex>0&&this.scrollIndex--,this}clear(){return this.content=[],this}},E=lt;var ht=class extends E{constructor(o=100){super(o)}},k=ht;var Wt=require("events");var Ot=(a=0)=>o=>`\x1B[${o+a}m`,Pt=(a=0)=>o=>`\x1B[${38+a};5;${o}m`,$t=(a=0)=>(o,t,e)=>`\x1B[${38+a};2;${o};${t};${e}m`,w={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},Bt=Object.keys(w.modifier),at=Object.keys(w.color),ut=Object.keys(w.bgColor),Rt=[...at,...ut];function ce(){let a=new Map;for(let[o,t]of Object.entries(w)){for(let[e,i]of Object.entries(t))w[e]={open:`\x1B[${i[0]}m`,close:`\x1B[${i[1]}m`},t[e]=w[e],a.set(i[0],i[1]);Object.defineProperty(w,o,{value:t,enumerable:!1})}return Object.defineProperty(w,"codes",{value:a,enumerable:!1}),w.color.close="\x1B[39m",w.bgColor.close="\x1B[49m",w.color.ansi=Ot(),w.color.ansi256=Pt(),w.color.ansi16m=$t(),w.bgColor.ansi=Ot(10),w.bgColor.ansi256=Pt(10),w.bgColor.ansi16m=$t(10),Object.defineProperties(w,{rgbToAnsi256:{value(o,t,e){return o===t&&t===e?o<8?16:o>248?231:Math.round((o-8)/247*24)+232:16+36*Math.round(o/255*5)+6*Math.round(t/255*5)+Math.round(e/255*5)},enumerable:!1},hexToRgb:{value(o){let t=/[a-f\d]{6}|[a-f\d]{3}/i.exec(o.toString(16));if(!t)return[0,0,0];let[e]=t;e.length===3&&(e=[...e].map(s=>s+s).join(""));let i=Number.parseInt(e,16);return[i>>16&255,i>>8&255,i&255]},enumerable:!1},hexToAnsi256:{value:o=>w.rgbToAnsi256(...w.hexToRgb(o)),enumerable:!1},ansi256ToAnsi:{value(o){if(o<8)return 30+o;if(o<16)return 90+(o-8);let t,e,i;if(o>=232)t=((o-232)*10+8)/255,e=t,i=t;else{o-=16;let l=o%36;t=Math.floor(o/36)/5,e=Math.floor(l/6)/5,i=l%6/5}let s=Math.max(t,e,i)*2;if(s===0)return 30;let n=30+(Math.round(i)<<2|Math.round(e)<<1|Math.round(t));return s===2&&(n+=60),n},enumerable:!1},rgbToAnsi:{value:(o,t,e)=>w.ansi256ToAnsi(w.rgbToAnsi256(o,t,e)),enumerable:!1},hexToAnsi:{value:o=>w.ansi256ToAnsi(w.hexToAnsi256(o)),enumerable:!1}}),w}var pe=ce(),R=pe;var Y=_(require("process"),1),kt=_(require("os"),1),dt=_(require("tty"),1);function $(a,o=globalThis.Deno?globalThis.Deno.args:Y.default.argv){let t=a.startsWith("-")?"":a.length===1?"-":"--",e=o.indexOf(t+a),i=o.indexOf("--");return e!==-1&&(i===-1||e<i)}var{env:v}=Y.default,X;$("no-color")||$("no-colors")||$("color=false")||$("color=never")?X=0:($("color")||$("colors")||$("color=true")||$("color=always"))&&(X=1);function ge(){if("FORCE_COLOR"in v)return v.FORCE_COLOR==="true"?1:v.FORCE_COLOR==="false"?0:v.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(v.FORCE_COLOR,10),3)}function fe(a){return a===0?!1:{level:a,hasBasic:!0,has256:a>=2,has16m:a>=3}}function be(a,{streamIsTTY:o,sniffFlags:t=!0}={}){let e=ge();e!==void 0&&(X=e);let i=t?X:e;if(i===0)return 0;if(t){if($("color=16m")||$("color=full")||$("color=truecolor"))return 3;if($("color=256"))return 2}if("TF_BUILD"in v&&"AGENT_NAME"in v)return 1;if(a&&!o&&i===void 0)return 0;let s=i||0;if(v.TERM==="dumb")return s;if(Y.default.platform==="win32"){let n=kt.default.release().split(".");return Number(n[0])>=10&&Number(n[2])>=10586?Number(n[2])>=14931?3:2:1}if("CI"in v)return"GITHUB_ACTIONS"in v?3:["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(n=>n in v)||v.CI_NAME==="codeship"?1:s;if("TEAMCITY_VERSION"in v)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(v.TEAMCITY_VERSION)?1:0;if(v.COLORTERM==="truecolor"||v.TERM==="xterm-kitty")return 3;if("TERM_PROGRAM"in v){let n=Number.parseInt((v.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(v.TERM_PROGRAM){case"iTerm.app":return n>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(v.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(v.TERM)||"COLORTERM"in v?1:s}function It(a,o={}){let t=be(a,{streamIsTTY:a&&a.isTTY,...o});return fe(t)}var me={stdout:It({isTTY:dt.default.isatty(1)}),stderr:It({isTTY:dt.default.isatty(2)})},Vt=me;function Nt(a,o,t){let e=a.indexOf(o);if(e===-1)return a;let i=o.length,s=0,n="";do n+=a.slice(s,e)+o+t,s=e+i,e=a.indexOf(o,s);while(e!==-1);return n+=a.slice(s),n}function Ft(a,o,t,e){let i=0,s="";do{let n=a[e-1]==="\r";s+=a.slice(i,n?e-1:e)+o+(n?`\r `:` `)+t,i=e+1,e=a.indexOf(` `,i)}while(e!==-1);return s+=a.slice(i),s}var{stdout:_t,stderr:At}=Vt,ct=Symbol("GENERATOR"),A=Symbol("STYLER"),D=Symbol("IS_EMPTY"),zt=["ansi","ansi","ansi256","ansi16m"],z=Object.create(null),xe=(a,o={})=>{if(o.level&&!(Number.isInteger(o.level)&&o.level>=0&&o.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let t=_t?_t.level:0;a.level=o.level===void 0?t:o.level};var ye=a=>{let o=(...t)=>t.join(" ");return xe(o,a),Object.setPrototypeOf(o,U.prototype),o};function U(a){return ye(a)}Object.setPrototypeOf(U.prototype,Function.prototype);for(let[a,o]of Object.entries(R))z[a]={get(){let t=q(this,gt(o.open,o.close,this[A]),this[D]);return Object.defineProperty(this,a,{value:t}),t}};z.visible={get(){let a=q(this,this[A],!0);return Object.defineProperty(this,"visible",{value:a}),a}};var pt=(a,o,t,...e)=>a==="rgb"?o==="ansi16m"?R[t].ansi16m(...e):o==="ansi256"?R[t].ansi256(R.rgbToAnsi256(...e)):R[t].ansi(R.rgbToAnsi(...e)):a==="hex"?pt("rgb",o,t,...R.hexToRgb(...e)):R[t][a](...e),Ce=["rgb","hex","ansi256"];for(let a of Ce){z[a]={get(){let{level:t}=this;return function(...e){let i=gt(pt(a,zt[t],"color",...e),R.color.close,this[A]);return q(this,i,this[D])}}};let o="bg"+a[0].toUpperCase()+a.slice(1);z[o]={get(){let{level:t}=this;return function(...e){let i=gt(pt(a,zt[t],"bgColor",...e),R.bgColor.close,this[A]);return q(this,i,this[D])}}}}var Se=Object.defineProperties(()=>{},{...z,level:{enumerable:!0,get(){return this[ct].level},set(a){this[ct].level=a}}}),gt=(a,o,t)=>{let e,i;return t===void 0?(e=a,i=o):(e=t.openAll+a,i=o+t.closeAll),{open:a,close:o,openAll:e,closeAll:i,parent:t}},q=(a,o,t)=>{let e=(...i)=>we(e,i.length===1?""+i[0]:i.join(" "));return Object.setPrototypeOf(e,Se),e[ct]=a,e[A]=o,e[D]=t,e},we=(a,o)=>{if(a.level<=0||!o)return a[D]?"":o;let t=a[A];if(t===void 0)return o;let{openAll:e,closeAll:i}=t;if(o.includes("\x1B"))for(;t!==void 0;)o=Nt(o,t.close,t.open),t=t.parent;let s=o.indexOf(` `);return s!==-1&&(o=Ft(o,i,e,s)),e+o+i};Object.defineProperties(U.prototype,z);var ve=U(),We=U({level:At?At.level:0});var L=ve;L.level=3;var ft=class extends Wt.EventEmitter{constructor(t){super();this.currentY=0;this.Terminal=t,this.width=this.Terminal.columns,this.height=this.Terminal.rows,this.buffer=[],this.cursor={x:0,y:0},this.Terminal.on("resize",()=>{this.emit("resize")})}write(...t){if(this.currentY++,this.cursor.y<this.buffer.length){let e="",i=[];for(let l=0;l<t.length;l++){let h=t[l];if(h.text!==void 0){let u=h.text.toString(),d={...h.style,index:[g(e),g(e)+g(u)]};i.push(d),e+=u}}let s=this.buffer[this.cursor.y].styleIndex,n=this.mergeStyles(i,s,this.cursor.x,g(e));this.buffer[this.cursor.y].styleIndex=n,this.buffer[this.cursor.y].text=this.replaceAt(this.buffer[this.cursor.y].text,this.cursor.x,e),this.cursorTo(0,this.cursor.y+1)}}cursorTo(t,e){this.cursor.x=t,this.cursor.y=e}moveCursor(t,e){this.Terminal.cursorTo(t,e)}update(){this.cursorTo(0,0),this.width=this.Terminal.columns,this.height=this.Terminal.rows,this.buffer=[];for(let t=0;t<this.Terminal.rows;t++)this.buffer[t]={text:" ".repeat(this.Terminal.columns),styleIndex:[{color:"gray",bg:"",italic:!1,bold:!1,index:[0,this.Terminal.columns]}]}}print(){this.buffer.forEach((t,e)=>{this.Terminal.cursorTo(0,e);let i="";t.styleIndex.forEach(s=>{let n=b=>b;if(s.color)if(s.color[0]==="#")n=L.hex(s.color);else if(s.color.includes("rgb")){let b=[...s.color.matchAll(/\d+/g)].map(P=>P[0]);n=L.rgb(Number(b[0]),Number(b[1]),Number(b[2]))}else n=L[s.color];let l=b=>b;if(s.bg)if(s.bg[0]==="#")l=L.bgHex(s.bg);else if(s.bg.includes("rgb")){let b=[...s.bg.matchAll(/\d+/g)].map(P=>P[0]);l=L.bgRgb(Number(b[0]),Number(b[1]),Number(b[2]))}else l=L[s.bg];let h=s.italic?L.italic:b=>b,u=s.bold?L.bold:b=>b,d=s.dim?L.dim:b=>b,c=s.underline?L.underline:b=>b,p=s.overline?L.overline:b=>b,C=s.inverse?L.inverse:b=>b,M=s.hidden?L.hidden:b=>b,B=s.strikethrough?L.strikethrough:b=>b;i+=n(l(h(u(d(c(p(C(M(B(t.text.substring(s.index[0],s.index[1])))))))))))}),this.Terminal.write(i)}),this.Terminal.clearScreenDown()}replaceAt(t,e,i){return t.substring(0,e)+i+t.substring(e+i.length)}mergeStyles(t,e,i,s){let n=[...t],l=[...e],h=i,u=s,d=[];return l.forEach(c=>{if(c.index[0]<h&&c.index[1]<h){d.push(c);return}else if(c.index[0]<h&&c.index[1]>=h&&c.index[1]<=h+u){d.push({...c,index:[c.index[0],h]});return}else if(c.index[0]<h&&c.index[1]>h+u){d.push({...c,index:[c.index[0],h]}),d.push({...c,index:[h+u,c.index[1]]});return}else{if(c.index[0]>=h&&c.index[1]<=h+u)return;if(c.index[0]>=h&&c.index[0]<=h+u&&c.index[1]>h+u){d.push({...c,index:[h+u,c.index[1]]});return}else if(c.index[0]>h+u&&c.index[1]>h+u){d.push(c);return}}this.emit("error",new Error("mergeStyles: This should never happen"))}),n.forEach(c=>{d.push({...c,index:[c.index[0]+h,c.index[1]+h]})}),d.sort(this.sortByIndex),d}sortByIndex(t,e){return t.index[0]<e.index[0]?-1:t.index[0]>e.index[0]?1:0}},Dt=ft;var Ut=require("events");var H=class extends Ut.EventEmitter{constructor(t){if(!t)throw new Error("PopupConfig is required");let{id:e,title:i,content:s,width:n,visible:l=!1}=t;if(!e)throw new Error("id is required");if(!i)throw new Error("title is required");if(!s)throw new Error("content is required");if(!n)throw new Error("width is required");super();this.parsingMouseFrame=!1;this.dragging=!1;this.dragStart={x:0,y:0};this.focused=!1;this.mouseListener=t=>{let e=t.data.x,i=t.data.y;if(e>this.absoluteValues.x&&e<this.absoluteValues.x+this.absoluteValues.width&&i>this.absoluteValues.y&&i<this.absoluteValues.y+this.absoluteValues.height?t.name==="MOUSE_WHEEL_DOWN"?(this.content.increaseScrollIndex(),this.focused=!0):t.name==="MOUSE_WHEEL_UP"?(this.content.decreaseScrollIndex(),this.focused=!0):t.name==="MOUSE_LEFT_BUTTON_PRESSED"&&(this.focused=!0):this.focused=!1,t.name==="MOUSE_DRAG"&&t.data.left===!0&&this.dragging===!1&&this.focused)e>this.absoluteValues.x&&e<this.absoluteValues.x+this.absoluteValues.width&&i>this.absoluteValues.y&&i<this.absoluteValues.y+3&&(this.dragging=!0,this.dragStart={x:e,y:i});else if(t.name==="MOUSE_DRAG"&&t.data.left===!0&&this.dragging===!0){if(i-this.dragStart.y+this.absoluteValues.y<0||e-this.dragStart.x+this.absoluteValues.x<0)return;this.offsetX+=e-this.dragStart.x,this.offsetY+=i-this.dragStart.y,this.dragStart={x:e,y:i},this.CM.refresh()}else t.name==="MOUSE_LEFT_BUTTON_RELEASED"&&this.dragging===!0&&(this.dragging=!1,this.CM.refresh())};if(this.CM=new y,this.id=e,this.title=i,this.content=s,this.width=n,this.visible=l,this.marginTop=4,this.offsetX=0,this.offsetY=0,this.absoluteValues={x:0,y:0,width:0,height:0},this.CM.popupCollection[this.id]){this.CM.unregisterPopup(this);let h=`CustomPopup ${this.id} already exists.`;throw this.CM.error(h),new Error(h)}this.CM.registerPopup(this)}keyListener(t,e){let i=this.CM.mouse.isMouseFrame(e,this.parsingMouseFrame);if(i===1){this.parsingMouseFrame=!0;return}else if(i===-1){this.parsingMouseFrame=!1;return}switch(e.name){case"up":this.content.increaseScrollIndex();break;case"down":this.content.decreaseScrollIndex();break;case"return":this.emit("confirm"),this.CM.unregisterPopup(this),this.hide();break;case"escape":this.emit("cancel"),this.CM.unregisterPopup(this),this.hide();break;case"q":this.CM.emit("exit"),this.CM.unregisterPopup(this),this.hide();break;default:break}this.CM.refresh()}getContent(){return this.content}setContent(t){return this.content=t,this.CM.refresh(),this}setWidth(t){return this.width=t,this.CM.refresh(),this}show(){return this.visible||(this.manageInput(),this.visible=!0,this.CM.refresh(),this.CM.unfocusOtherWidgets(this.id)),this}hide(){return this.visible&&(this.unManageInput(),this.visible=!1,this.CM.restoreFocusInWidgets(),this.CM.refresh()),this}isVisible(){return this.visible}getPosition(){return this.absoluteValues}manageInput(){return this.CM.setKeyListener(this.id,this.keyListener.bind(this)),this.CM.mouse&&this.CM.setMouseListener(`${this.id}_mouse`,this.mouseListener.bind(this)),this}unManageInput(){return this.CM.removeKeyListener(this.id),this.CM.mouse&&this.CM.removeMouseListener(`${this.id}_mouse`),this}drawLine(t,e){let i="",s=[...t];if(t.forEach(n=>{i+=n.text}),g(i)>e-2){s=JSON.parse(JSON.stringify(t));let l=g(i)-e;for(let h=s.length-1;h>=0;h--)if(g(s[h].text)>l+2){s[h].text=x(s[h].text,g(s[h].text)-l-2,!0);break}else l-=g(s[h].text),s.splice(h,1);i="",s.forEach(h=>{i+=h.text})}s.unshift({text:r.normal.vertical,style:{color:"white"}}),g(i)<=e&&s.push({text:`${" ".repeat(e-g(i))}`,style:{color:""}}),s.push({text:r.normal.vertical,style:{color:"white"}}),this.CM.Screen.write(...s)}draw(){let e=this.title.length>this.width?this.title.length+4:this.width+4+1,i=Math.round((e-this.title.length)/2),s=Math.round(this.CM.Screen.width/2-e/2),n=r.normal.topLeft;for(let c=0;c<e;c++)n+=r.normal.horizontal;n+=`${r.normal.topRight}${f.EOL}`,n+=`${r.normal.vertical}${" ".repeat(i)}${this.title}${" ".repeat(e-i-this.title.length)}${r.normal.vertical}${f.EOL}`,n+=`${r.normal.left}${r.normal.horizontal.repeat(e)}${r.normal.right}${f.EOL}`;let h=`${n}`.split(f.EOL),u=Math.round(this.CM.Screen.width/2-e/2);h.forEach((c,p)=>{this.CM.Screen.cursorTo(s+this.offsetX,this.marginTop+p+this.offsetY),this.CM.Screen.write({text:c,style:{color:"white"}})});let d=this.content.getContent();return d.forEach((c,p)=>{this.CM.Screen.cursorTo(s+this.offsetX,this.marginTop+p+h.length-1+this.offsetY),this.drawLine(c,e)}),this.CM.Screen.cursorTo(s+this.offsetX,this.marginTop+d.length+h.length-1+this.offsetY),this.CM.Screen.write({text:`${r.normal.bottomLeft}${r.normal.horizontal.repeat(e)}${r.normal.bottomRight}`,style:{color:"white"}}),this.absoluteValues={x:u+this.offsetX,y:this.marginTop+this.offsetY,width:e,height:h.length},this}};var Ht=require("events");var G=class extends Ht.EventEmitter{constructor(t){if(!t)throw new Error("The config is required");let{id:e,title:i,message:s,buttons:n=["Ok","Cancel","?"],visible:l=!1}=t;if(!e)throw new Error("The id is required");if(!i)throw new Error("The title is required");super();this.parsingMouseFrame=!1;this.buttonsAbsoluteValues=[];this.dragging=!1;this.dragStart={x:0,y:0};this.focused=!1;this.mouseListener=t=>{let e=t.data.x,i=t.data.y;if(e>this.absoluteValues.x&&e<this.absoluteValues.x+this.absoluteValues.width&&i>this.absoluteValues.y&&i<this.absoluteValues.y+this.absoluteValues.height){if(t.name==="MOUSE_LEFT_BUTTON_PRESSED"){for(let s=0;s<this.buttonsAbsoluteValues.length;s++){let n=this.buttonsAbsoluteValues[s];if(e>n.x&&e<n.x+n.width&&i>n.y&&i<n.y+n.height){this.selected=s,this.CM.refresh();break}}this.focused=!0;return}if(t.name==="MOUSE_LEFT_BUTTON_RELEASED"){this.focused&&(this.buttons&&this.buttons.length===2&&this.buttons[0].toLowerCase()==="yes"&&this.buttons[1].toLowerCase()==="no"?this.selected===0?this.emit("confirm"):this.emit("cancel"):this.emit("confirm",this.buttons[this.selected]),this.CM.unregisterPopup(this),this.hide());return}if(t.name==="MOUSE_MOTION")for(let s=0;s<this.buttonsAbsoluteValues.length;s++){let n=this.buttonsAbsoluteValues[s];if(e>n.x&&e<n.x+n.width&&i>n.y&&i<n.y+n.height){this.hovered=s,this.CM.refresh();break}}}else this.focused=!1;if(t.name==="MOUSE_DRAG"&&t.data.left===!0&&this.dragging===!1&&this.focused)e>this.absoluteValues.x&&e<this.absoluteValues.x+this.absoluteValues.width&&i>this.absoluteValues.y&&i<this.absoluteValues.y+3&&(this.dragging=!0,this.dragStart={x:e,y:i});else if(t.name==="MOUSE_DRAG"&&t.data.left===!0&&this.dragging===!0){if(i-this.dragStart.y+this.absoluteValues.y<0||e-this.dragStart.x+this.absoluteValues.x<0)return;this.offsetX+=e-this.dragStart.x,this.offsetY+=i-this.dragStart.y,this.dragStart={x:e,y:i},this.CM.refresh()}else t.name==="MOUSE_LEFT_BUTTON_RELEASED"&&this.dragging===!0&&(this.dragging=!1,this.CM.refresh())};if(this.CM=new y,this.id=e,this.title=i,this.message=s||"",this.buttons=n,this.selected=0,this.hovered=-1,this.visible=l,this.marginTop=4,this.offsetX=0,this.offsetY=0,this.absoluteValues={x:0,y:0,width:0,height:0},this.CM.popupCollection[this.id]){this.CM.unregisterPopup(this);let h=`ButtonPopup ${this.id} already exists.`;throw this.CM.error(h),new Error(h)}this.CM.registerPopup(this)}keyListener(t,e){let i=this.CM.mouse.isMouseFrame(e,this.parsingMouseFrame);if(i===1){this.parsingMouseFrame=!0;return}else if(i===-1){this.parsingMouseFrame=!1;return}switch(e.name){case"left":if(this.selected>0&&this.selected<=this.buttons.length)this.selected--;else return;break;case"right":if(this.selected>=0&&this.selected<this.buttons.length-1)this.selected++;else return;break;case"return":this.emit("confirm",this.buttons[this.selected]),this.CM.unregisterPopup(this),this.hide();break;case"escape":this.emit("cancel"),this.CM.unregisterPopup(this),this.hide();break;case"q":this.CM.emit("exit"),this.CM.unregisterPopup(this),this.hide();break;default:break}this.CM.refresh()}show(){return this.visible||(this.manageInput(),this.visible=!0,this.CM.refresh(),this.CM.unfocusOtherWidgets(this.id)),this}hide(){return this.visible&&(this.unManageInput(),this.visible=!1,this.CM.restoreFocusInWidgets(),this.CM.refresh()),this}isVisible(){return this.visible}getPosition(){return this.absoluteValues}manageInput(){return this.CM.setKeyListener(this.id,this.keyListener.bind(this)),this.CM.mouse&&this.CM.setMouseListener(`${this.id}_mouse`,this.mouseListener.bind(this)),this}unManageInput(){return this.CM.removeKeyListener(this.id),this.CM.mouse&&this.CM.removeMouseListener(`${this.id}_mouse`),this}draw(){let s=0,n=[],l=0,h=0;this.buttons.forEach(m=>{let T=m.length+4+1;l+T>this.CM.Screen.width-2*1?(h++,n[h]?n[h].push(m):n[h]=[m],l=T,l>s&&(s=l-1)):(n[h]?n[h].push(m):n[h]=[m],l+=T,l>s&&(s=l-1))});let u=`${this.title}`;u.length>this.CM.Screen.width-2*1&&(u=x(u,this.CM.Screen.width-2*1,!0));let d=u.length+2*1,p=(this.message?`${this.message}`:"").split(f.EOL);p.length>0&&(p=p.map(m=>m.length>this.CM.Screen.width-2*1?x(m,this.CM.Screen.width-2*1,!0):m)),p.forEach(m=>{m.length>d&&(d=m.length)}),d<s&&(d=s+2*1);let C=Math.round((d-u.length)/2),M=p.map(m=>Math.round((d-m.length)/2)),B=r.normal.topLeft;for(let m=0;m<d;m++)B+=r.normal.horizontal;B+=`${r.normal.topRight}${f.EOL}`,B+=`${r.normal.vertical}${" ".repeat(C)}${u}${" ".repeat(d-C-u.length)}${r.normal.vertical}${f.EOL}`,B+=`${r.normal.left}${r.normal.horizontal.repeat(d)}${r.normal.right}${f.EOL}`;let b=r.normal.bottomLeft;for(let m=0;m<d;m++)b+=r.normal.horizontal;b+=`${r.normal.bottomRight}${f.EOL}`;let P="";p.length>0&&p[0].length>0&&p.forEach((m,T)=>{P+=`${r.normal.vertical}${" ".repeat(M[T])}${m}${" ".repeat(d-M[T]-m.length)}${r.normal.vertical}${f.EOL}`});let ee=p.length+3;this.buttonsAbsoluteValues=[];let rt=Math.round(this.CM.Screen.width/2-d/2);n.forEach(m=>{for(let T=0;T<3;T++){let nt=m.map(O=>O.length+4+1),Mt=nt.reduce((O,N)=>O+N,0)-1,V=d-Mt>=0?d-Mt:0;m.forEach((O,N)=>{let I;I=this.selected===this.buttons.indexOf(O)?"selected":"normal",this.hovered===this.buttons.indexOf(O)&&this.selected!==this.buttons.indexOf(O)&&(I="hovered"),N<m.length?(N===0&&(P+=`${r.normal.vertical}${" ".repeat(V/2)}`),T===0?P+=`${r[I].topLeft}${r[I].horizontal.repeat(2>1?2*(2-1)+O.length:O.length)}${r[I].topRight}`:T===1?P+=`${r[I].vertical}${2>1?" ".repeat(2-1):""}${O}${2>1?" ".repeat(2-1):""}${r[I].vertical}`:T===2?P+=`${r[I].bottomLeft}${r[I].horizontal.repeat(2>1?2*(2-1)+O.length:O.length)}${r[I].bottomRight}`:this.CM.error("Error in ButtonPopup draw function"),N===m.length-1?P+=" ".repeat(V%2?Math.round(V/2):V/2)+`${r.normal.vertical}${f.EOL}`:P+=" ".repeat(1)):N===m.length&&(P+=" ".repeat(V%2?Math.round(V/2):V/2)+`${r.normal.vertical}${f.EOL}`);let ie={id:this.buttons.indexOf(O),x:rt+this.offsetX+V/2+nt.slice(0,N).reduce((se,oe)=>se+oe,0)+1,y:this.marginTop+this.offsetY-(h+1)/2+this.buttons.indexOf(O)+ee,width:nt[N]-1+1,height:3};this.buttonsAbsoluteValues.push(ie)})}});let vt=`${B}${P}${b}`.split(f.EOL);return vt.forEach((m,T)=>{this.CM.Screen.cursorTo(rt+this.offsetX,this.marginTop+T+this.offsetY),this.CM.Screen.write({text:m,style:{color:"white"}})}),this.absoluteValues={x:rt+this.offsetX,y:this.marginTop+this.offsetY,width:d,height:vt.length},this}},Gt=G;var J=class extends Gt{constructor(o){if(!o)throw new Error("The config is not defined");let{id:t,title:e,message:i}=o;super({id:t,title:e,message:i,buttons:["Yes","No"],visible:!1}),super.keyListener=(s,n)=>{let l=this.CM.mouse.isMouseFrame(n,this.parsingMouseFrame);if(l===1){this.parsingMouseFrame=!0;return}else if(l===-1){this.parsingMouseFrame=!1;return}switch(n.name){case"left":if(this.selected>0&&this.selected<=this.buttons.length)this.selected--;else return;break;case"right":if(this.selected>=0&&this.selected<this.buttons.length-1)this.selected++;else return;break;case"return":this.selected===0?this.emit("confirm"):this.emit("cancel"),this.CM.unregisterPopup(this),this.hide();break;case"escape":this.emit("cancel"),this.CM.unregisterPopup(this),this.hide();break;case"q":this.CM.emit("exit"),this.CM.unregisterPopup(this),this.hide();break;default:break}this.CM.refresh()}}};var Kt=require("events");var bt=_(require("fs"),1),F=_(require("path"),1);var Q=class extends Kt.EventEmitter{constructor(t){if(!t)throw new Error("The config is required");let{id:e,title:i,basePath:s,selectDirectory:n=!1,allowedExtensions:l=[],limitToPath:h=!1,visible:u=!1}=t;if(!e)throw new Error("The id is required");if(!i)throw new Error("The title is required");if(!s)throw new Error("The basePath is required");super();this.parsingMouseFrame=!1;this.dragging=!1;this.dragStart={x:0,y:0};this.focused=!1;this.mouseListener=t=>{let e=t.data.x,i=t.data.y;if(e>this.absoluteValues.x&&e<this.absoluteValues.x+this.absoluteValues.width&&i>this.absoluteValues.y&&i<this.absoluteValues.y+this.absoluteValues.height){if(t.name==="MOUSE_WHEEL_DOWN"){let s=this.options.indexOf(this.selected);this.setSelected(this.options[(s+1)%this.options.length]),this.CM.Screen.height-this.marginTop-4<this.options.length?this.selected===this.options[this.adaptOptions().length+this.startIndex]&&this.startIndex++:this.startIndex=0,this.focused=!0}else if(t.name==="MOUSE_WHEEL_UP"){let s=this.options.indexOf(this.selected);this.setSelected(this.options[(s-1+this.options.length)%this.options.length]),this.startIndex>0&&this.selected===this.adaptOptions()[0]&&this.startIndex--,this.focused=!0}else if(t.name==="MOUSE_LEFT_BUTTON_PRESSED"){let s=i-this.absoluteValues.y-4;s>=0&&s<this.adaptOptions().length&&this.setSelected(this.options[this.startIndex+s]),this.focused=!0}}else this.focused=!1;if(t.name==="MOUSE_DRAG"&&t.data.left===!0&&this.dragging===!1&&this.focused)e>this.absoluteValues.x&&e<this.absoluteValues.x+this.absoluteValues.width&&i>this.absoluteValues.y&&i<this.absoluteValues.y+3&&(this.dragging=!0,this.dragStart={x:e,y:i});else if(t.name==="MOUSE_DRAG"&&t.data.left===!0&&this.dragging===!0){if(i-this.dragStart.y+this.absoluteValues.y<0||e-this.dragStart.x+this.absoluteValues.x<0)return;this.offsetX+=e-this.dragStart.x,this.offsetY+=i-this.dragStart.y,this.dragStart={x:e,y:i},this.CM.refresh()}else t.name==="MOUSE_LEFT_BUTTON_RELEASED"&&this.dragging===!0&&(this.dragging=!1,this.CM.refresh())};if(this.CM=new y,this.id=e,this.title=i,this.basePath=s,this.currentPath=s,this.selectDirectory=n,this.allowedExtensions=l,this.limitToPath=h,this.visible=u,this.marginTop=4,this.startIndex=0,this.selected={text:"../",name:"../",type:"dir",path:F.default.join(s,"../")},this.offsetX=0,this.offsetY=0,this.absoluteValues={x:0,y:0,width:0,height:0},this.CM.popupCollection[this.id]){this.CM.unregisterPopup(this);let d=`FileSelectorPopup ${this.id} already exists.`;throw this.CM.error(d),new Error(d)}this.CM.registerPopup(this),this.options=[{text:"../",name:"../",type:"dir",path:F.default.join(s,"../")}],this.updateList(this.basePath)}listDir(t){return new Promise((e,i)=>{bt.default.readdir(t,(s,n)=>{s?i(s):e(n.map(l=>{let h=F.default.join(t,l);return bt.default.statSync(h).isDirectory()?{text:`\u{1F4C1} ${l}/`,name:l,type:"dir",path:h}:{text:`\u{1F4C4} ${l}`,name:l,type:"file",path:h}}).filter(l=>{let h=this.allowedExtensions.length===0||this.allowedExtensions.includes(F.default.extname(l.name));return this.selectDirectory&&l.type==="file"?!1:h||l.type==="dir"}))})})}updateList(t){this.limitToPath&&!F.default.resolve(t).includes(F.default.resolve(this.basePath))||(this.currentPath=t,this.listDir(this.currentPath).then(e=>{this.options=[{text:"../",name:"../",type:"dir",path:F.default.join(this.currentPath,"../")}].concat(e),this.setSelected(this.options[0]),this.CM.refresh()}))}adaptOptions(){return this.options.slice(this.startIndex,this.startIndex+this.CM.Screen.height-this.marginTop-6)}keyListener(t,e){let i=this.CM.mouse.isMouseFrame(e,this.parsingMouseFrame);if(i===1){this.parsingMouseFrame=!0;return}else if(i===-1){this.parsingMouseFrame=!1;return}let s=this.options.indexOf(this.selected);switch(e.name){case"down":this.setSelected(this.options[(s+1)%this.options.length]),this.CM.Screen.height-this.marginTop-4<this.options.length?this.selected===this.options[this.adaptOptions().length+this.startIndex]&&this.startIndex++:this.startIndex=0;break;case"up":this.setSelected(this.options[(s-1+this.options.length)%this.options.length]),this.startIndex>0&&this.selected===this.adaptOptions()[0]&&this.startIndex--;break;case"pagedown":if(this.CM.Screen.height-this.marginTop-4<this.options.length)this.setSelected(this.options[(s+this.adaptOptions().length)%this.options.length]),this.startIndex+this.adaptOptions().length<this.options.length?this.startIndex+=this.adaptOptions().length:this.startIndex=0;else return;break;case"pageup":if(this.CM.Screen.height-this.marginTop-4<this.options.length)this.setSelected(this.options[(s-this.adaptOptions().length+this.options.length)%this.options.length]),this.startIndex>this.adaptOptions().length?this.startIndex-=this.adaptOptions().length:this.startIndex=0;else return;break;case"return":this.selectDirectory?this.selected.type==="dir"&&(this.emit("confirm",{path:this.selected.path,name:this.selected.name}),this.CM.unregisterPopup(this),this.hide()):this.selected.type==="dir"?this.updateList(this.selected.path):(this.emit("confirm",{path:this.selected.path,name:this.selected.name}),this.CM.unregisterPopup(this),this.hide());break;case"space":this.selected.type==="dir"&&this.updateList(this.selected.path);break;case"escape":this.emit("cancel"),this.CM.unregisterPopup(this),this.hide();break;case"q":this.CM.emit("exit"),this.CM.unregisterPopup(this),this.hide();break;default:break}this.CM.refresh()}getSelected(){return this.selected}setSelected(t){return this.selected=t,this.CM.refresh(),this}show(){return this.visible||(this.manageInput(),this.visible=!0,this.CM.refresh(),this.CM.unfocusOtherWidgets(this.id)),this}hide(){return this.visible&&(this.unManageInput(),this.visible=!1,this.CM.restoreFocusInWidgets(),this.CM.refresh()),this}isVisible(){return this.visible}getPosition(){return this.absoluteValues}manageInput(){return this.CM.setKeyListener(this.id,this.keyListener.bind(this)),this.CM.mouse&&this.CM.setMouseListener(`${this.id}_mouse`,this.mouseListener.bind(this)),this}unManageInput(){return this.CM.removeKeyListener(this.id),this.CM.mouse&&this.CM.removeMouseListener(`${this.id}_mouse`),this}draw(){let t=this.adaptOptions().indexOf(this.selected),e=this.options.indexOf(this.selected);t===-1&&(this.startIndex=e-this.adaptOptions().length+1>0?e-this.adaptOptions().length+1:0);let i=2,s=this.options.map(M=>M.text).reduce((M,B)=>Math.max(M,B.length),0),n=s>this.title.length?s+2*i:this.title.length+2*i,l=Math.round((n-this.title.length)/2),h=r.normal.topLeft;for(let M=0;M<n;M++)h+=r.normal.horizontal;h+=`${r.normal.topRight}${f.EOL}`,h+=`${r.normal.vertical}${" ".repeat(l)}${this.title}${" ".repeat(n-l-this.title.length)}${r.normal.vertical}${f.EOL}`,h+=`${r.normal.left}${r.normal.horizontal.repeat(n)}${r.normal.right}${f.EOL}`;let u=r.normal.bottomLeft;for(let M=0;M<n;M++)u+=r.normal.horizontal;u+=`${r.normal.bottomRight}${f.EOL}`;let d="";this.adaptOptions().forEach(M=>{d+=`${r.normal.vertical}${M.name===this.selected.name?"<":" "} ${M.text}${M.name===this.selected.name?" >":" "}${" ".repeat(n-M.text.toString().length-4)}${r.normal.vertical}${f.EOL}`});let p=`${h}${d}${u}`.split(f.EOL),C=Math.round(this.CM.Screen.width/2-n/2);return p.forEach((M,B)=>{this.CM.Screen.cursorTo(C+this.offsetX,this.marginTop+B+this.offsetY),this.CM.Screen.write({text:M,style:{color:"white"}})}),this.absoluteValues={x:C+this.offsetX,y:this.marginTop+this.offsetY,width:n,height:p.length},this}};var jt=require("events");var Z=class extends jt.EventEmitter{constructor(t){if(!t)throw new Error("InputPopup config is required");let{id:e,title:i,value:s,numeric:n,visible:l=!1}=t;if(!e)throw new Error("InputPopup id is required");if(!i)throw new Error("InputPopup title is required");if(s===void 0)throw new Error("InputPopup value is required");super();this.flashLoop=setInterval(()=>{this.draw(),this.CM.refresh()},500);this.parsingMouseFrame=!1;this.dragging=!1;this.dragStart={x:0,y:0};this.focused=!1;this.mouseListener=t=>{let e=t.data.x,i=t.data.y;if(e>this.absoluteValues.x&&e<this.absoluteValues.x+this.absoluteValues.width&&i>this.absoluteValues.y&&i<this.absoluteValues.y+this.absoluteValues.height?t.name==="MOUSE_WHEEL_DOWN"?(this.numeric&&(this.value=Number(this.value)-1,this.CM.refresh()),this.focused=!0):t.name==="MOUSE_WHEEL_UP"?(this.numeric&&(this.value=Number(this.value)+1,this.CM.refresh()),this.focused=!0):t.name==="MOUSE_LEFT_BUTTON_PRESSED"&&(this.focused=!0):this.focused=!1,t.name==="MOUSE_DRAG"&&t.data.left===!0&&this.dragging===!1&&this.focused)e>this.absoluteValues.x&&e<this.absoluteValues.x+this.absoluteValues.width&&i>this.absoluteValues.y&&i<this.absoluteValues.y+3&&(this.dragging=!0,this.dragStart={x:e,y:i});else if(t.name==="MOUSE_DRAG"&&t.data.left===!0&&this.dragging===!0){if(i-this.dragStart.y+this.absoluteValues.y<0||e-this.dragStart.x+this.absoluteValues.x<0)return;this.offsetX+=e-this.dragStart.x,this.offsetY+=i-this.dragStart.y,this.dragStart={x:e,y:i},this.CM.refresh()}else t.name==="MOUSE_LEFT_BUTTON_RELEASED"&&this.dragging===!0&&(this.dragging=!1,this.CM.refresh())};if(this.CM=new y,this.id=e,this.title=i,this.value=s,this.cursorPos=0,this.numeric=n||!1,this.visible=l,this.marginTop=4,this.offsetX=0,this.offsetY=0,this.absoluteValues={x:0,y:0,width:0,height:0},this.placeholder=t.placeholder,this.maxLen=t.maxLen||20,this.CM.popupCollection[this.id]){this.CM.unregisterPopup(this);let h=`InputPopup ${this.id} already exists.`;throw this.CM.error(h),new Error(h)}this.CM.registerPopup(this)}keyListenerNumeric(t,e){let i=this.CM.mouse.isMouseFrame(e,this.parsingMouseFrame);if(i===1){this.parsingMouseFrame=!0;return}else if(i===-1){this.parsingMouseFrame=!1;return}let s=Number(this.value);if(Number.isNaN(s)&&(s=0),Number.isNaN(Number(e.name)))if(e.sequence==="-")this.value=s*-1;else if(e.sequence==="+")this.value=Math.abs(s);else if(e.sequence==="."||e.sequence===",")this.value.toString().indexOf(".")===-1&&(this.value=s+".");else switch(e.name){case"backspace":this.value.toString().length>0&&(this.value.toString().indexOf(".")===this.value.toString().length-1?this.value=s.toString():this.value.toString().indexOf(".")===this.value.toString().length-2?this.value=this.value.toString().slice(0,this.value.toString().length-1):this.value.toString().indexOf("-")===0&&this.value.toString().length===2?this.value=0:this.value=Number(s.toString().slice(0,s.toString().length-1)));break;case"return":this.confirmDel();break;case"escape":this.delete();break;case"q":this.delete();break;default:break}else if(s.toString().length<this.maxLen||this.maxLen===0){let n=this.value.toString();n+=e.name,this.value=Number(n)}this.CM.refresh()}keyListenerText(t,e){let i=this.CM.mouse.isMouseFrame(e,this.parsingMouseFrame);if(i===1){this.parsingMouseFrame=!0;return}else if(i===-1){this.parsingMouseFrame=!1;return}let s=this.value;switch(e.name){case"backspace":s.toString().length>0&&(this.value=s.toString().slice(0,s.toString().length-1));break;case"return":this.confirmDel();break;case"escape":this.delete();break;case"q":this.delete();break;case"delete":break;case"tab":this.value=s.toString()+" ";break;default:if((g(s.toString())<this.maxLen||this.maxLen===0)&&e.sequence.length===1){let n=s.toString();n+=e.sequence,this.value=n}break}this.CM.refresh()}getValue(){return this.value}setValue(t){return this.value=t,this.CM.refresh(),this}show(){return this.visible||(this.manageInput(),this.visible=!0,this.CM.refresh(),this.CM.unfocusOtherWidgets(this.id)),this}hide(){return this.visible&&(this.unManageInput(),this.visible=!1,this.CM.restoreFocusInWidgets(),this.CM.refresh()),this}isVisible(){return this.visible}getPosition(){return this.absoluteValues}manageInput(){return this.numeric?this.CM.setKeyListener(this.id,this.keyListenerNumeric.bind(this)):this.CM.setKeyListener(this.id,this.keyListenerText.bind(this)),this.CM.mouse&&this.CM.setMouseListener(`${this.id}_mouse`,this.mouseListener.bind(this)),this}unManageInput(){return this.numeric?this.CM.removeKeyListener(this.id):this.CM.removeKeyListener(this.id),this.CM.mouse&&this.CM.removeMouseListener(`${this.id}_mouse`),this}draw(){let e=this.title.length>this.value.toString().length?this.title.length+4:this.value.toString().length+4+1,i=Math.round((e-this.title.length)/2),s=r.normal.topLeft;for(let d=0;d<e;d++)s+=r.normal.horizontal;s+=`${r.normal.topRight}${f.EOL}`,s+=`${r.normal.vertical}${" ".repeat(i)}${this.title}${" ".repeat(e-i-this.title.length)}${r.normal.vertical}${f.EOL}`,s+=`${r.normal.left}${r.normal.horizontal.repeat(e)}${r.normal.right}${f.EOL}`;let n=r.normal.bottomLeft;for(let d=0;d<e;d++)n+=r.normal.horizontal;n+=`${r.normal.bottomRight}${f.EOL}`;let l=`${s}${n}`,h=l.split(f.EOL),u=Math.round(this.CM.Screen.width/2-e/2);return l.split(f.EOL).forEach((d,c)=>{if(this.CM.Screen.cursorTo(u+this.offsetX,this.marginTop+c+this.offsetY),c===3){let p=Math.round(Date.now()/100)%2;if(this.placeholder&&this.placeholder.length&&this.value.toString().length===0){let C=2+this.placeholder.length+1;this.CM.Screen.write({text:r.normal.vertical,style:{color:"white"}},{text:"> ",style:{color:"cyan"}},{text:p?"\u2588":" ",style:{color:"white"}},{text:this.placeholder,style:{color:"gray"}},{text:`${" ".repeat(e-C)}${r.normal.vertical}`,style:{color:"white"}})}else{let C=2+this.value.toString().length+1;this.CM.Screen.write({text:r.normal.vertical,style:{color:"white"}},{text:"> ",style:{color:"cyan"}},{text:this.value.toString(),style:{color:"white"}},{text:p?"\u2588":" ",style:{color:"white"}},{text:`${" ".repeat(e-C)}${r.normal.vertical}`,style:{color:"white"}})}this.CM.Screen.cursorTo(u+this.offsetX,this.marginTop+c+1+this.offsetY)}this.CM.Screen.write({text:d,style:{color:"white"}})}),this.absoluteValues={x:u+this.offsetX,y:this.marginTop+this.offsetY,width:e,height:h.length},this}confirmDel(){this.emit("confirm",this.numeric?Number(this.value):this.value),this.delete()}delete(){this.CM.unregisterPopup(this),this.hide(),clearInterval(this.flashLoop)}};var Xt=require("events");var tt=class extends Xt.EventEmitter{constructor(t){if(!t)throw new Error("OptionPopup config is required");let{id:e,title:i,options:s,selected:n,visible:l=!1}=t;if(!e)throw new Error("OptionPopup id is required");if(!i)throw new Error("OptionPopup title is required");if(!s)throw new Error("OptionPopup options is required");if(n==null)throw new Error("OptionPopup selected is required");super();this.parsingMouseFrame=!1;this.dragging=!1;this.dragStart={x:0,y:0};this.focused=!1;this.mouseListener=t=>{let e=t.data.x,i=t.data.y;if(e>this.absoluteValues.x&&e<this.absoluteValues.x+this.absoluteValues.width&&i>this.absoluteValues.y&&i<this.absoluteValues.y+this.absoluteValues.height){if(t.name==="MOUSE_WHEEL_DOWN")this.setSelected(this.options[(this.options.indexOf(this.selected)+1)%this.options.length]),this.CM.Screen.height-this.marginTop-4<this.options.length?this.selected===this.options[this.adaptOptions().length+this.startIndex]&&this.startIndex++:this.startIndex=0,this.focused=!0;else if(t.name==="MOUSE_WHEEL_UP")this.setSelected(this.options[(this.options.indexOf(this.selected)-1+this.options.length)%this.options.length]),this.startIndex>0&&this.selected===this.adaptOptions()[0]&&this.startIndex--,this.focused=!0;else if(t.name==="MOUSE_LEFT_BUTTON_PRESSED"){let s=i-this.absoluteValues.y-4;s>=0&&s<this.adaptOptions().length&&this.setSelected(this.options[this.startIndex+s]),this.focused=!0}}else this.focused=!1;if(t.name==="MOUSE_DRAG"&&t.data.left===!0&&this.dragging===!1&&this.focused)e>this.absoluteValues.x&&e<this.absoluteValues.x+this.absoluteValues.width&&i>this.absoluteValues.y&&i<this.absoluteValues.y+3&&(this.dragging=!0,this.dragStart={x:e,y:i});else if(t.name==="MOUSE_DRAG"&&t.data.left===!0&&this.dragging===!0){if(i-this.dragStart.y+this.absoluteValues.y<0||e-this.dragStart.x+this.absoluteValues.x<0)return;this.offsetX+=e-this.dragStart.x,this.offsetY+=i-this.dragStart.y,this.dragStart={x:e,y:i},this.CM.refresh()}else t.name==="MOUSE_LEFT_BUTTON_RELEASED"&&this.dragging===!0&&(this.dragging=!1,this.CM.refresh())};if(this.CM=new y,this.id=e,this.title=i,this.options=s,this.selected=n,this.visible=l,this.marginTop=4,this.startIndex=0,this.offsetX=0,this.offsetY=0,this.absoluteValues={x:0,y:0,width:0,height:0},this.CM.popupCollection[this.id]){this.CM.unregisterPopup(this);let h=`OptionPopup ${this.id} already exists.`;throw this.CM.error(h),new Error(h)}this.CM.registerPopup(this)}adaptOptions(){return this.options.slice(this.startIndex,this.startIndex+this.CM.Screen.height-this.marginTop-6)}keyListener(t,e){let i=this.CM.mouse.isMouseFrame(e,this.parsingMouseFrame);if(i===1){this.parsingMouseFrame=!0;return}else if(i===-1){this.parsingMouseFrame=!1;return}switch(e.name){case"down":this.setSelected(this.options[(this.options.indexOf(this.selected)+1)%this.options.length]),this.CM.Screen.height-this.marginTop-4<this.options.length?this.selected===this.options[this.adaptOptions().length+this.startIndex]&&this.startIndex++:this.startIndex=0;break;case"up":this.setSelected(this.options[(this.options.indexOf(this.selected)-1+this.options.length)%this.options.length]),this.startIndex>0&&this.selected===this.adaptOptions()[0]&&this.startIndex--;break;case"pagedown":if(this.CM.Screen.height-this.marginTop-4<this.options.length)this.setSelected(this.options[(this.options.indexOf(this.selected)+this.adaptOptions().length)%this.options.length]),this.startIndex+this.adaptOptions().length<this.options.length?this.startIndex+=this.adaptOptions().length:this.startIndex=0;else return;break;case"pageup":if(this.CM.Screen.height-this.marginTop-4<this.options.length)this.setSelected(this.options[(this.options.indexOf(this.selected)-this.adaptOptions().length+this.options.length)%this.options.length]),this.startIndex>this.adaptOptions().length?this.startIndex-=this.adaptOptions().length:this.startIndex=0;else return;break;case"return":this.emit("confirm",this.selected),this.CM.unregisterPopup(this),this.hide();break;case"escape":this.emit("cancel"),this.CM.unregisterPopup(this),this.hide();break;case"q":this.CM.emit("exit"),this.CM.unregisterPopup(this),this.hide();break;default:break}this.CM.refresh()}getSelected(){return this.selected}setSelected(t){return this.selected=t,this.CM.refresh(),this}show(){return this.visible||(this.manageInput(),this.visible=!0,this.CM.refresh(),this.CM.unfocusOtherWidgets(this.id)),this}hide(){return this.visible&&(this.unManageInput(),this.visible=!1,this.CM.restoreFocusInWidgets(),this.CM.refresh()),this}isVisible(){return this.visible}getPosition(){return this.absoluteValues}manageInput(){return this.CM.setKeyListener(this.id,this.keyListener.bind(this)),this.CM.mouse&&this.CM.setMouseListener(`${this.id}_mouse`,this.mouseListener.bind(this)),this}unManageInput(){return this.CM.removeKeyListener(this.id),this.CM.mouse&&this.CM.removeMouseListener(`${this.id}_mouse`),this}draw(){this.adaptOptions().indexOf(this.selected)===-1&&(this.startIndex=this.options.indexOf(this.selected)-this.adaptOptions().length+1>0?this.options.indexOf(this.selected)-this.adaptOptions().length+1:0);let t=2,e=this.options.map(p=>p.toString()).reduce((p,C)=>Math.max(p,C.length),0),i=e>this.title.length?e+2*t:this.title.length+2*t,s=Math.round((i-this.title.length)/2),n=r.normal.topLeft;for(let p=0;p<i;p++)n+=r.normal.horizontal;n+=`${r.normal.topRight}${f.EOL}`,n+=`${r.normal.vertical}${" ".repeat(s)}${this.title}${" ".repeat(i-s-this.title.length)}${r.normal.vertical}${f.EOL}`,n+=`${r.normal.left}${r.normal.horizontal.repeat(i)}${r.normal.right}${f.EOL}`;let l=r.normal.bottomLeft;for(let p=0;p<i;p++)l+=r.normal.horizontal;l+=`${r.normal.bottomRight}${f.EOL}`;let h="";this.adaptOptions().forEach(p=>{h+=`${r.normal.vertical}${p===this.selected?"<":" "} ${p}${p===this.selected?" >":" "}${" ".repeat(i-p.toString().length-4)}${r.normal.vertical}${f.EOL}`});let d=`${n}${h}${l}`.split(f.EOL),c=Math.round(this.CM.Screen.width/2-i/2);return d.forEach((p,C)=>{this.CM.Screen.cursorTo(c+this.offsetX,this.marginTop+C+this.offsetY),this.CM.Screen.write({text:p,style:{color:"white"}})}),this.absoluteValues={x:c+this.offsetX,y:this.marginTop+this.offsetY,width:i,height:d.length},this}};var Yt=require("events");var K=class extends Yt.EventEmitter{constructor(t){if(!t)throw new Error("The configuration object is required.");if(!t.id)throw new Error("The id is required.");if(!t.attributes)throw new Error("The attributes are required.");if(!t.children)throw new Error("The children are required.");super();this.parsingMouseFrame=!1;this.absoluteValues={x:0,y:0,width:0,height:0};this.draggable=!0;this.dragging=!1;this.dragStart={x:0,y:0};this.focused=!1;this.hovered=!1;this.mouseListener=t=>{let e=t.data.x,i=t.data.y;if(e>this.absoluteValues.x&&e<this.absoluteValues.x+this.absoluteValues.width&&i>this.absoluteValues.y&&i<=this.absoluteValues.y+this.absoluteValues.height){let s=Object.keys(this.CM.popupCollection);for(let l=s.length-1;l>=0;l--){let h=this.CM.popupCollection[s[l]];if(h.isVisible()&&h.getPosition){let u=h.getPosition();if(e>u.x&&e<u.x+u.width&&i>u.y&&i<u.y+u.height)return}}this.emit("mouse",t);let n={name:t.name,data:{x:e-this.absoluteValues.x,y:i-this.absoluteValues.y}};if(this.emit("relativeMouse",n),t.name==="MOUSE_LEFT_BUTTON_PRESSED"){this.focused||(this.focused=!0);return}t.name==="MOUSE_MOTION"&&(this.focused=!0,this.hovered||(this.hovered=!0))}else t.name!=="MOUSE_MOTION"&&(this.focused=!1),this.hovered&&(this.hovered=!1,this.emit("hoverOut",t));if(this.draggable)if(t.name==="MOUSE_DRAG"&&t.data.left===!0&&this.dragging===!1&&this.focused)e>this.absoluteValues.x&&e<=this.absoluteValues.x+this.absoluteValues.width&&i>this.absoluteValues.y&&i<=this.absoluteValues.y+this.absoluteValues.height&&(this.dragging=!0,this.dragStart={x:e,y:i});else if(t.name==="MOUSE_DRAG"&&t.data.left===!0&&this.dragging===!0){if(i-this.dragStart.y+this.absoluteValues.y<0||e-this.dragStart.x+this.absoluteValues.x<0)return;this.absoluteValues.x+=e-this.dragStart.x,this.absoluteValues.y+=i-this.dragStart.y,this.dragStart={x:e,y:i},this.CM.refresh()}else t.name==="MOUSE_LEFT_BUTTON_RELEASED"&&this.dragging===!0&&(this.dragging=!1,this.CM.refresh())};if(this.CM=new y,this.id=t.id,this.visible=t.visible||!0,this.absoluteValues=t.attributes,this.children=t.children,this.CM.controlsCollection[this.id]){this.CM.unregisterControl(this);let e=`Control ${this.id} already exists.`;throw this.CM.error(e),new Error(e)}this.CM.registerControl(this),this.visible&&(this.manageInput(),this.CM.refresh())}delete(){this.unfocus(),this.hide(),this.CM.unregisterControl(this)}keyListener(t,e){let i=this.CM.mouse.isMouseFrame(e,this.parsingMouseFrame);if(i===1){this.parsingMouseFrame=!0;return}else if(i===-1){this.parsingMouseFrame=!1;return}switch(e.name){case"return":break;case"escape":this.unfocus();break;default:break}this.emit("keypress",e),this.CM.refresh()}getContent(){return this.children}focus(){return this.visible&&!this.focused&&(this.focused=!0,this.manageInput()),this}unfocus(){return this.visible&&this.focused&&(this.unManageInput(),this.focused=!1),this}show(){return this.visible||(this.manageInput(),this.visible=!0,this.CM.refresh()),this}hide(){return this.visible&&(this.unManageInput(),this.visible=!1,this.CM.refresh()),this}isVisible(){return this.visible}isFocused(){return this.focused}manageInput(){return this.CM.setKeyListener(this.id,this.keyListener.bind(this)),this.CM.mouse&&this.CM.setMouseListener(`${this.id}_mouse`,this.mouseListener.bind(this)),this}unManageInput(){return this.CM.removeKeyListener(this.id),this.CM.mouse&&this.CM.removeMouseListener(`${this.id}_mouse`),this}drawLine(t){let e="",i=[...t];if(t.forEach(s=>{e+=s.text}),g(e)>this.absoluteValues.width){i=[...JSON.parse(JSON.stringify(t))];let n=g(e)-this.CM.Screen.width+1;for(let l=i.length-1;l>=0;l--)if(g(i[l].text)>n+2){i[l].text=x(i[l].text,g(i[l].text)-n-2,!0);break