{"_id":"@aryee337/aery-tui","_rev":"25-96b337ef13e9b63b08f156068be1f2ef","name":"@aryee337/aery-tui","dist-tags":{"release":"0.2.10","latest":"0.3.8"},"versions":{"0.1.148":{"name":"@aryee337/aery-tui","version":"0.1.148","keywords":["tui","terminal","ui","text-editor","differential-rendering","typescript","cli"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@aryee337/aery-tui@0.1.148","maintainers":[{"name":"paryee","email":"aryeebus337@gmail.com"}],"homepage":"https://github.com/aryee337/aery#readme","bugs":{"url":"https://github.com/aryee337/aery/issues"},"dist":{"shasum":"71245ddacb0d17a3ade9df1818f399323051756c","tarball":"https://registry.npmjs.org/@aryee337/aery-tui/-/aery-tui-0.1.148.tgz","fileCount":109,"integrity":"sha512-pEI3aynm48TKIc8BvXsV3d+RQfLojmF6tgOus076TzxEAV4/KvUltuuh2VGed/DLU0VRGt0oiUfvGTrMKYsOsg==","signatures":[{"sig":"MEQCIB45LgEXbiAhnKlmfFJAUOvqYykrkwZTKedHDCBy3XhhAiAXIPfH73eHn6N8pEK455CSe0WhI8pGzipWAsgK2EBa6g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1666647},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"a60aab44e758aae5256500362edb73d8378e1fb6","scripts":{"test":"node --test test/*.test.ts","build":"tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"paryee","email":"aryeebus337@gmail.com"},"repository":{"url":"git+https://github.com/aryee337/aery.git","type":"git","directory":"packages/tui"},"_npmVersion":"10.8.2","description":"Terminal User Interface library with differential rendering for efficient text-based applications","directories":{},"_nodeVersion":"20.20.2","dependencies":{"marked":"15.0.12","get-east-asian-width":"1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"chalk":"5.6.2","@xterm/headless":"5.5.0"},"_npmOperationalInternal":{"tmp":"tmp/aery-tui_0.1.148_1779998689131_0.9232930299930722","host":"s3://npm-registry-packages-npm-production"}},"0.2.11":{"name":"@aryee337/aery-tui","version":"0.2.11","keywords":["tui","terminal","ui","text-editor","differential-rendering","typescript","cli"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@aryee337/aery-tui@0.2.11","maintainers":[{"name":"paryee","email":"aryeebus337@gmail.com"}],"homepage":"https://github.com/aryee337/aery#readme","bugs":{"url":"https://github.com/aryee337/aery/issues"},"dist":{"shasum":"320af1ccc944903569d4c526022ad4b10665df3a","tarball":"https://registry.npmjs.org/@aryee337/aery-tui/-/aery-tui-0.2.11.tgz","fileCount":109,"integrity":"sha512-PB05Sr9hUdStx9p7jwHKTIAJSA5IRxAhBp9PQ6FAAnQCTXD2P3iDB/k6cd+RE2sLDTnjCOSNUPXET3Wicq3dEQ==","signatures":[{"sig":"MEYCIQCJ8N3ZmY2/cIIrR5RV/RHdRF1hQwH2GuVXgCZiPPNuOgIhAONQAqWf7T2jr/7q6/OzWIssKfMVKwgPpEVDLcgDsCvp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1666646},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"c6522a1977501acd7be42438a09067f8ee026513","scripts":{"test":"node --test test/*.test.ts","build":"tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"paryee","email":"aryeebus337@gmail.com"},"repository":{"url":"git+https://github.com/aryee337/aery.git","type":"git","directory":"packages/tui"},"_npmVersion":"10.8.2","description":"Terminal User Interface library with differential rendering for efficient text-based applications","directories":{},"_nodeVersion":"20.20.2","dependencies":{"marked":"15.0.12","get-east-asian-width":"1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"chalk":"5.6.2","@xterm/headless":"5.5.0"},"_npmOperationalInternal":{"tmp":"tmp/aery-tui_0.2.11_1779998972829_0.4886737341474541","host":"s3://npm-registry-packages-npm-production"}},"0.2.12":{"name":"@aryee337/aery-tui","version":"0.2.12","keywords":["tui","terminal","ui","text-editor","differential-rendering","typescript","cli"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@aryee337/aery-tui@0.2.12","maintainers":[{"name":"paryee","email":"aryeebus337@gmail.com"}],"homepage":"https://github.com/aryee337/aery#readme","bugs":{"url":"https://github.com/aryee337/aery/issues"},"dist":{"shasum":"6c28a48b9181d65df79eaa76a88ee64c1b7faeb0","tarball":"https://registry.npmjs.org/@aryee337/aery-tui/-/aery-tui-0.2.12.tgz","fileCount":109,"integrity":"sha512-kArw9UbbTTg75BD5+bozftnVFmLMkaj9fYV1xyZNFkwBbYd1sASqYda/V8AJqLPV3yJxah1II9eMd65Fp6bLAw==","signatures":[{"sig":"MEQCICbuQFgcTiYBTVFKnMckkmuMZ96gyOFTPj3SmkrZcIoRAiA/3doyg7lk+CGpvWpinqmNYGmQNRt3cDc37bp/V7QzHA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1666646},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"c47cfd7235f74a70c09227495ba0048501a5fa1b","scripts":{"test":"node --test test/*.test.ts","build":"tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"paryee","email":"aryeebus337@gmail.com"},"repository":{"url":"git+https://github.com/aryee337/aery.git","type":"git","directory":"packages/tui"},"_npmVersion":"10.8.2","description":"Terminal User Interface library with differential rendering for efficient text-based applications","directories":{},"_nodeVersion":"20.20.2","dependencies":{"marked":"15.0.12","get-east-asian-width":"1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"chalk":"5.6.2","@xterm/headless":"5.5.0"},"_npmOperationalInternal":{"tmp":"tmp/aery-tui_0.2.12_1779999198086_0.9720927742556995","host":"s3://npm-registry-packages-npm-production"}},"0.2.13":{"name":"@aryee337/aery-tui","version":"0.2.13","keywords":["tui","terminal","ui","text-editor","differential-rendering","typescript","cli"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@aryee337/aery-tui@0.2.13","maintainers":[{"name":"paryee","email":"aryeebus337@gmail.com"}],"homepage":"https://github.com/aryee337/aery#readme","bugs":{"url":"https://github.com/aryee337/aery/issues"},"dist":{"shasum":"f3918c7e8fcb214f9fb726cb49f91de07d7651fe","tarball":"https://registry.npmjs.org/@aryee337/aery-tui/-/aery-tui-0.2.13.tgz","fileCount":109,"integrity":"sha512-F8m1Gf9IxIAy0Qh4RYV5al58yqtT96iN7neVBEm96nFuNwTEMKkPUAamCjrF4T5N40SuHuYL+Hq+bx7eyz1bgQ==","signatures":[{"sig":"MEQCIB2fSegiQcFJbtBjbj/pFyAjj8U1vnTYQkMMFUHtbDdIAiBGZ8m45XEqT/5CCID0Mh2l10kxQwsXEFqZaZBnnjX6HA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1666646},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"7fb5de3d8e35b7e41f638bb169687b2038217060","scripts":{"test":"node --test test/*.test.ts","build":"tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"paryee","email":"aryeebus337@gmail.com"},"repository":{"url":"git+https://github.com/aryee337/aery.git","type":"git","directory":"packages/tui"},"_npmVersion":"10.8.2","description":"Terminal User Interface library with differential rendering for efficient text-based applications","directories":{},"_nodeVersion":"20.20.2","dependencies":{"marked":"15.0.12","get-east-asian-width":"1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"chalk":"5.6.2","@xterm/headless":"5.5.0"},"_npmOperationalInternal":{"tmp":"tmp/aery-tui_0.2.13_1779999385419_0.33737376952965303","host":"s3://npm-registry-packages-npm-production"}},"0.2.14":{"name":"@aryee337/aery-tui","version":"0.2.14","keywords":["tui","terminal","ui","text-editor","differential-rendering","typescript","cli"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@aryee337/aery-tui@0.2.14","maintainers":[{"name":"paryee","email":"aryeebus337@gmail.com"}],"homepage":"https://github.com/eminent337/aery#readme","bugs":{"url":"https://github.com/eminent337/aery/issues"},"dist":{"shasum":"d443894abe6186fa57a0322f21fa4bc0312a1533","tarball":"https://registry.npmjs.org/@aryee337/aery-tui/-/aery-tui-0.2.14.tgz","fileCount":109,"integrity":"sha512-NcNbRTdrz8uK2cpOYmCP6NYm8qyFbYT87Gb2aABOd8Volgwf5Dt9Pn0hPlKJiffbA1J+00CNBNvmfG2eUBY3+g==","signatures":[{"sig":"MEUCIQCWNWX0kto0pGpWtkcMDI00aa3xfkSYPsfU3WBPVNclBAIgPHaGLq8zsRZhd1V2WBx6JSAxgUgLWkI/8hW9I63PCMU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1666648},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"0d74e2d4b476629821bdd405e6a596c79a9dc496","scripts":{"test":"node --test test/*.test.ts","build":"tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"paryee","email":"aryeebus337@gmail.com"},"repository":{"url":"git+https://github.com/eminent337/aery.git","type":"git","directory":"packages/tui"},"_npmVersion":"10.8.2","description":"Terminal User Interface library with differential rendering for efficient text-based applications","directories":{},"_nodeVersion":"20.20.2","dependencies":{"marked":"15.0.12","get-east-asian-width":"1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"chalk":"5.6.2","@xterm/headless":"5.5.0"},"_npmOperationalInternal":{"tmp":"tmp/aery-tui_0.2.14_1780011197206_0.11238701868552492","host":"s3://npm-registry-packages-npm-production"}},"0.2.15":{"name":"@aryee337/aery-tui","version":"0.2.15","keywords":["tui","terminal","ui","text-editor","differential-rendering","typescript","cli"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@aryee337/aery-tui@0.2.15","maintainers":[{"name":"paryee","email":"aryeebus337@gmail.com"}],"homepage":"https://github.com/eminent337/aery#readme","bugs":{"url":"https://github.com/eminent337/aery/issues"},"dist":{"shasum":"a8c5c8c1000f7af1d243ad35b6765097024720a4","tarball":"https://registry.npmjs.org/@aryee337/aery-tui/-/aery-tui-0.2.15.tgz","fileCount":109,"integrity":"sha512-jtTN1lUHMaZQ9Dc2fgvUgvXFdZOdDNoQdd9KOb3ET+QwYx8EHxofNOpcWtvSaDOmW3rV0vhhs1J0dugKnTKeMg==","signatures":[{"sig":"MEQCIHSt7/bf0UsUZT6dI1YAVthLvst9HIIKjSfce30eCtU1AiBLQ3sai7fATZLlri4KOqSDjh//UZeva/rWBd59LlbGJw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1666648},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"0bada4780fe39c9376249922071cf22bb3ef313a","scripts":{"test":"node --test test/*.test.ts","build":"tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"paryee","email":"aryeebus337@gmail.com"},"repository":{"url":"git+https://github.com/eminent337/aery.git","type":"git","directory":"packages/tui"},"_npmVersion":"10.8.2","description":"Terminal User Interface library with differential rendering for efficient text-based applications","directories":{},"_nodeVersion":"20.20.2","dependencies":{"marked":"15.0.12","get-east-asian-width":"1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"chalk":"5.6.2","@xterm/headless":"5.5.0"},"_npmOperationalInternal":{"tmp":"tmp/aery-tui_0.2.15_1780028247804_0.4875230546416278","host":"s3://npm-registry-packages-npm-production"}},"0.2.16":{"name":"@aryee337/aery-tui","version":"0.2.16","keywords":["tui","terminal","ui","text-editor","differential-rendering","typescript","cli"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@aryee337/aery-tui@0.2.16","maintainers":[{"name":"paryee","email":"aryeebus337@gmail.com"}],"homepage":"https://github.com/eminent337/aery#readme","bugs":{"url":"https://github.com/eminent337/aery/issues"},"dist":{"shasum":"502a6bc26cdadf23b05902a2208f7cfeacee1569","tarball":"https://registry.npmjs.org/@aryee337/aery-tui/-/aery-tui-0.2.16.tgz","fileCount":109,"integrity":"sha512-tlTyM61WLjJNrX3C+B91kCcEVKdVTPgfJb9ugEe6zErEKldWi78qFJLlmasYpifyRGhVGNxuSjgeH2/lEZbBhw==","signatures":[{"sig":"MEUCIQCEpgtXl9SUVOpEyc1n4lwoBKzFC9aj1K9F6rSGIzs0ZAIgD1lpJsDnRq6ix7tiofcJ1y//s/6j9c/hcXFO+DRhLA8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1666648},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"45b5daa18977f194fd564268dfb4d386ccbe3461","scripts":{"test":"node --test test/*.test.ts","build":"tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"paryee","email":"aryeebus337@gmail.com"},"repository":{"url":"git+https://github.com/eminent337/aery.git","type":"git","directory":"packages/tui"},"_npmVersion":"10.8.2","description":"Terminal User Interface library with differential rendering for efficient text-based applications","directories":{},"_nodeVersion":"20.20.2","dependencies":{"marked":"15.0.12","get-east-asian-width":"1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"chalk":"5.6.2","@xterm/headless":"5.5.0"},"_npmOperationalInternal":{"tmp":"tmp/aery-tui_0.2.16_1780032844961_0.3637677584423744","host":"s3://npm-registry-packages-npm-production"}},"0.2.18":{"name":"@aryee337/aery-tui","version":"0.2.18","keywords":["tui","terminal","ui","text-editor","differential-rendering","typescript","cli"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@aryee337/aery-tui@0.2.18","maintainers":[{"name":"paryee","email":"aryeebus337@gmail.com"}],"homepage":"https://github.com/eminent337/aery#readme","bugs":{"url":"https://github.com/eminent337/aery/issues"},"dist":{"shasum":"3540a576e6cda8b928a075d7a43d7dfcb5bb43c3","tarball":"https://registry.npmjs.org/@aryee337/aery-tui/-/aery-tui-0.2.18.tgz","fileCount":109,"integrity":"sha512-bOgrmGlo344r01TkPG7cC3OJw4RZrcAGzj6jIfemGFXoRVwzoCNqVw3jiZH0DhTHvqUaSygvyQcvHiDayvS4gA==","signatures":[{"sig":"MEUCIEVtmhcNSIO9cNkIXMARs7+ivPIZOA+MnGd6U36g2IR8AiEA+urTo0dVhOh6h3jyfOl3jyLat8rg/hJWAkg44jm/FqQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1666648},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"19da3922690e945dff974b0772d267f1e8ae3a56","scripts":{"test":"node --test test/*.test.ts","build":"tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"paryee","email":"aryeebus337@gmail.com"},"repository":{"url":"git+https://github.com/eminent337/aery.git","type":"git","directory":"packages/tui"},"_npmVersion":"10.8.2","description":"Terminal User Interface library with differential rendering for efficient text-based applications","directories":{},"_nodeVersion":"20.20.2","dependencies":{"marked":"15.0.12","get-east-asian-width":"1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"chalk":"5.6.2","@xterm/headless":"5.5.0"},"_npmOperationalInternal":{"tmp":"tmp/aery-tui_0.2.18_1780042103012_0.19895527982220162","host":"s3://npm-registry-packages-npm-production"}},"0.2.19":{"name":"@aryee337/aery-tui","version":"0.2.19","keywords":["tui","terminal","ui","text-editor","differential-rendering","typescript","cli"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@aryee337/aery-tui@0.2.19","maintainers":[{"name":"paryee","email":"aryeebus337@gmail.com"}],"homepage":"https://github.com/eminent337/aery#readme","bugs":{"url":"https://github.com/eminent337/aery/issues"},"dist":{"shasum":"624c61f3dbbfa15e619a64d299d3b84c1ebf20dc","tarball":"https://registry.npmjs.org/@aryee337/aery-tui/-/aery-tui-0.2.19.tgz","fileCount":109,"integrity":"sha512-WcJxBL0HiyjZlu+K51wCaVNQytVcFpluqu6Cdco+gWBzELrXMMaDIFsGbesJb7N3otKft4tFK6sKQeaXC3Zh7w==","signatures":[{"sig":"MEUCIQCfOOgXBzLyphhcf5ni3iwHy+uuqqyJzX3bok5HfhisfQIgfmwJZXBRXpH2sm1zqBU7IG7/AFastbSQUy76V4m4mwQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1666648},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"9851a5b2761a8762f291f84db489b23157d82e61","scripts":{"test":"node --test test/*.test.ts","build":"tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"paryee","email":"aryeebus337@gmail.com"},"repository":{"url":"git+https://github.com/eminent337/aery.git","type":"git","directory":"packages/tui"},"_npmVersion":"10.8.2","description":"Terminal User Interface library with differential rendering for efficient text-based applications","directories":{},"_nodeVersion":"20.20.2","dependencies":{"marked":"15.0.12","get-east-asian-width":"1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"chalk":"5.6.2","@xterm/headless":"5.5.0"},"_npmOperationalInternal":{"tmp":"tmp/aery-tui_0.2.19_1780047744507_0.5895001702272826","host":"s3://npm-registry-packages-npm-production"}},"0.2.20":{"name":"@aryee337/aery-tui","version":"0.2.20","keywords":["tui","terminal","ui","text-editor","differential-rendering","typescript","cli"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@aryee337/aery-tui@0.2.20","maintainers":[{"name":"paryee","email":"aryeebus337@gmail.com"}],"homepage":"https://github.com/eminent337/aery#readme","bugs":{"url":"https://github.com/eminent337/aery/issues"},"dist":{"shasum":"fe2f62eb0688bf03361a1bc99f42407ac833fec1","tarball":"https://registry.npmjs.org/@aryee337/aery-tui/-/aery-tui-0.2.20.tgz","fileCount":109,"integrity":"sha512-pCxSQTldZUltt8XSiccmJyzApB1NaE2SK7yQTEgDJ+DT6b2oeNXy5/u2hN0sZk/CT3b8vbkg+3vA6ErMJCi/hQ==","signatures":[{"sig":"MEQCIG8mh2h9afa9U2ZlxvJSrZZz5Jy2jY8PWmtfSWdtxgVsAiAik87VlkZdIa9lnDKZ0S8+cWp0UBZm3lndlWXHYjodrA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1666648},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"09948ba6989c0d235899225cfa96971fb6f765e8","scripts":{"test":"node --test test/*.test.ts","build":"tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"paryee","email":"aryeebus337@gmail.com"},"repository":{"url":"git+https://github.com/eminent337/aery.git","type":"git","directory":"packages/tui"},"_npmVersion":"10.8.2","description":"Terminal User Interface library with differential rendering for efficient text-based applications","directories":{},"_nodeVersion":"20.20.2","dependencies":{"marked":"15.0.12","get-east-asian-width":"1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"chalk":"5.6.2","@xterm/headless":"5.5.0"},"_npmOperationalInternal":{"tmp":"tmp/aery-tui_0.2.20_1780049042445_0.12427961745327454","host":"s3://npm-registry-packages-npm-production"}},"0.2.21":{"name":"@aryee337/aery-tui","version":"0.2.21","keywords":["tui","terminal","ui","text-editor","differential-rendering","typescript","cli"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@aryee337/aery-tui@0.2.21","maintainers":[{"name":"paryee","email":"aryeebus337@gmail.com"}],"homepage":"https://github.com/eminent337/aery#readme","bugs":{"url":"https://github.com/eminent337/aery/issues"},"dist":{"shasum":"811b23e5f4baf8996f5e810c876e97553380c159","tarball":"https://registry.npmjs.org/@aryee337/aery-tui/-/aery-tui-0.2.21.tgz","fileCount":109,"integrity":"sha512-1ogNaYtLtR0ROEbTi/zqkN9JJVB8JQ3rHFH/LelvT1hWLfcHWptPYHhreHdYE2KRyuw0qcNBt/j2ERdQdFi1hg==","signatures":[{"sig":"MEUCIQCJoCVRJ6Ygnbx4IQX9Wb2OH9c5QNutiWV6KynHwGItwwIgdWkfhEaj5v0Vwq/LmuDDuWpYrTT1hr+rkyEMt6z39d8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1666648},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"9adad0214000c6f088cf8f246b6225da62027508","scripts":{"test":"node --test test/*.test.ts","build":"tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"paryee","email":"aryeebus337@gmail.com"},"repository":{"url":"git+https://github.com/eminent337/aery.git","type":"git","directory":"packages/tui"},"_npmVersion":"10.8.2","description":"Terminal User Interface library with differential rendering for efficient text-based applications","directories":{},"_nodeVersion":"20.20.2","dependencies":{"marked":"15.0.12","get-east-asian-width":"1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"chalk":"5.6.2","@xterm/headless":"5.5.0"},"_npmOperationalInternal":{"tmp":"tmp/aery-tui_0.2.21_1780049083961_0.22183219143070132","host":"s3://npm-registry-packages-npm-production"}},"0.2.22":{"name":"@aryee337/aery-tui","version":"0.2.22","keywords":["tui","terminal","ui","text-editor","differential-rendering","typescript","cli"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@aryee337/aery-tui@0.2.22","maintainers":[{"name":"paryee","email":"aryeebus337@gmail.com"}],"homepage":"https://github.com/eminent337/aery#readme","bugs":{"url":"https://github.com/eminent337/aery/issues"},"dist":{"shasum":"c30480da752542f6d26058429ca804dd55245636","tarball":"https://registry.npmjs.org/@aryee337/aery-tui/-/aery-tui-0.2.22.tgz","fileCount":109,"integrity":"sha512-2y5hrlcy3E1KhTvkG0QHEdequvfaIBEvvATy1ROllevSGNz/BIBIDs5uQS935SRYfYxJmXmJmh8LS7AVA33XCw==","signatures":[{"sig":"MEUCIQDBG7hXhkID+7Cw/z4N6NtndpDaDU21A1OEIxhCUI1+ZAIgSIFRnwGPF30rAVxKJ9K3CYJDodcRrYq9JjtWWOf63LY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1666648},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"2b0723a78d1b591aa3b53de3daa0f511f1d9cca0","scripts":{"test":"node --test test/*.test.ts","build":"tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"paryee","email":"aryeebus337@gmail.com"},"repository":{"url":"git+https://github.com/eminent337/aery.git","type":"git","directory":"packages/tui"},"_npmVersion":"10.8.2","description":"Terminal User Interface library with differential rendering for efficient text-based applications","directories":{},"_nodeVersion":"20.20.2","dependencies":{"marked":"15.0.12","get-east-asian-width":"1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"chalk":"5.6.2","@xterm/headless":"5.5.0"},"_npmOperationalInternal":{"tmp":"tmp/aery-tui_0.2.22_1780051404283_0.6459494215195771","host":"s3://npm-registry-packages-npm-production"}},"0.2.23":{"name":"@aryee337/aery-tui","version":"0.2.23","keywords":["tui","terminal","ui","text-editor","differential-rendering","typescript","cli"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@aryee337/aery-tui@0.2.23","maintainers":[{"name":"paryee","email":"aryeebus337@gmail.com"}],"homepage":"https://github.com/eminent337/aery#readme","bugs":{"url":"https://github.com/eminent337/aery/issues"},"dist":{"shasum":"4f8c2d75a9b4bd18c38f1bbab3e63f4c07e23e9a","tarball":"https://registry.npmjs.org/@aryee337/aery-tui/-/aery-tui-0.2.23.tgz","fileCount":109,"integrity":"sha512-7WJK3vZ310l0CCIIH7yyiTlEPHOMqZfTek6PG99C80XlgckFUeZDUDkkQsL0/Ej2j3FotNKQt0uHHAIXaF31ng==","signatures":[{"sig":"MEQCIFAz04l1Ge7GFmSl8wuXGp4rqZ/V1WXcIk9gfS8X3KaaAiAiVa5eP+rEJSjqgy0M6cuYOBT+wSaCyJjG4hi5KV6g3g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1666648},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"9ede1370977f271c6c3d6b40f3eccc5005a10105","scripts":{"test":"node --test test/*.test.ts","build":"tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"paryee","email":"aryeebus337@gmail.com"},"repository":{"url":"git+https://github.com/eminent337/aery.git","type":"git","directory":"packages/tui"},"_npmVersion":"10.8.2","description":"Terminal User Interface library with differential rendering for efficient text-based applications","directories":{},"_nodeVersion":"20.20.2","dependencies":{"marked":"15.0.12","get-east-asian-width":"1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"chalk":"5.6.2","@xterm/headless":"5.5.0"},"_npmOperationalInternal":{"tmp":"tmp/aery-tui_0.2.23_1780057611479_0.9396975253738156","host":"s3://npm-registry-packages-npm-production"}},"0.2.24":{"name":"@aryee337/aery-tui","version":"0.2.24","keywords":["tui","terminal","ui","text-editor","differential-rendering","typescript","cli"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@aryee337/aery-tui@0.2.24","maintainers":[{"name":"paryee","email":"aryeebus337@gmail.com"}],"homepage":"https://github.com/eminent337/aery#readme","bugs":{"url":"https://github.com/eminent337/aery/issues"},"dist":{"shasum":"f8b9bdd3dd6150cf6f6e67c8d3d8a00fa7784c45","tarball":"https://registry.npmjs.org/@aryee337/aery-tui/-/aery-tui-0.2.24.tgz","fileCount":109,"integrity":"sha512-PLIEF1U7jK2U714uEFhsYqb0RKS2hkPIoy6MD98ubOB84FerICAGdAdPySYKo6k6kup2a+ZmxYkL84BMCaaRxQ==","signatures":[{"sig":"MEQCIEF4kbFYLarzmrKpfvo0E4XcY+4LaF4d2kwOCxe4quicAiATnoYjp1AbkmtpfNCCoFOelHwbez/57sBjjQnivRzAGA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1666648},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"f7c6c2cd2e158ad74d8312a3ba5ef59c458fb2ac","scripts":{"test":"node --test test/*.test.ts","build":"tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"paryee","email":"aryeebus337@gmail.com"},"repository":{"url":"git+https://github.com/eminent337/aery.git","type":"git","directory":"packages/tui"},"_npmVersion":"10.8.2","description":"Terminal User Interface library with differential rendering for efficient text-based applications","directories":{},"_nodeVersion":"20.20.2","dependencies":{"marked":"15.0.12","get-east-asian-width":"1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"chalk":"5.6.2","@xterm/headless":"5.5.0"},"_npmOperationalInternal":{"tmp":"tmp/aery-tui_0.2.24_1780059816646_0.8417704224878115","host":"s3://npm-registry-packages-npm-production"}},"0.2.25":{"name":"@aryee337/aery-tui","version":"0.2.25","keywords":["tui","terminal","ui","text-editor","differential-rendering","typescript","cli"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@aryee337/aery-tui@0.2.25","maintainers":[{"name":"paryee","email":"aryeebus337@gmail.com"}],"homepage":"https://github.com/eminent337/aery#readme","bugs":{"url":"https://github.com/eminent337/aery/issues"},"dist":{"shasum":"ec12cf355c32f361eb3ebde01127ff70517269cb","tarball":"https://registry.npmjs.org/@aryee337/aery-tui/-/aery-tui-0.2.25.tgz","fileCount":109,"integrity":"sha512-GdEI/NuXNKQHkmco8kqcAJshO5EYovxBvMWQKxLQ4kvIOUsJYtG1hOuwBTLRencBLef5dI8Md5wiOVFxKtRLig==","signatures":[{"sig":"MEUCIQDvc7QZdwdFSORpSlTZhYTF+9FdtrXjW2Nmp8hc1LCK+QIgP+oshportut99SncD30gQA77uKQqrGVLkW9fX6c3sJw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1666648},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"ed5e66d194220a7291eb73d968983e7e7d2ac61f","scripts":{"test":"node --test test/*.test.ts","build":"tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"paryee","email":"aryeebus337@gmail.com"},"repository":{"url":"git+https://github.com/eminent337/aery.git","type":"git","directory":"packages/tui"},"_npmVersion":"10.8.2","description":"Terminal User Interface library with differential rendering for efficient text-based applications","directories":{},"_nodeVersion":"20.20.2","dependencies":{"marked":"15.0.12","get-east-asian-width":"1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"chalk":"5.6.2","@xterm/headless":"5.5.0"},"_npmOperationalInternal":{"tmp":"tmp/aery-tui_0.2.25_1780060171385_0.970222710026202","host":"s3://npm-registry-packages-npm-production"}},"0.2.26":{"name":"@aryee337/aery-tui","version":"0.2.26","keywords":["tui","terminal","ui","text-editor","differential-rendering","typescript","cli"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@aryee337/aery-tui@0.2.26","maintainers":[{"name":"paryee","email":"aryeebus337@gmail.com"}],"homepage":"https://github.com/eminent337/aery#readme","bugs":{"url":"https://github.com/eminent337/aery/issues"},"dist":{"shasum":"f4bb008d873bb6e784befa7f2ec03a41290f743f","tarball":"https://registry.npmjs.org/@aryee337/aery-tui/-/aery-tui-0.2.26.tgz","fileCount":109,"integrity":"sha512-s6Uwa4kFM3GE0tVkDBflAN37CZOsOjvxWPN9VaV3k1qp5OfWxXgSHilIOPaQKE9IUug3fIVQ02QJWv5UXCHKyQ==","signatures":[{"sig":"MEQCICYCMejiuMVElBNOsUYy8KXFe3oWz7eQJSUQ6juxJYQGAiAY7wwoZj6NBzm9IQXyo20P+8F1ap0CPchZe32OpjlaNg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1666648},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"36655f65c794f1d5b3a5c69839ba3a528aeadba3","scripts":{"test":"node --test test/*.test.ts","build":"tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"paryee","email":"aryeebus337@gmail.com"},"repository":{"url":"git+https://github.com/eminent337/aery.git","type":"git","directory":"packages/tui"},"_npmVersion":"10.8.2","description":"Terminal User Interface library with differential rendering for efficient text-based applications","directories":{},"_nodeVersion":"20.20.2","dependencies":{"marked":"15.0.12","get-east-asian-width":"1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"chalk":"5.6.2","@xterm/headless":"5.5.0"},"_npmOperationalInternal":{"tmp":"tmp/aery-tui_0.2.26_1780061219726_0.5908034563569113","host":"s3://npm-registry-packages-npm-production"}},"0.2.27":{"name":"@aryee337/aery-tui","version":"0.2.27","keywords":["tui","terminal","ui","text-editor","differential-rendering","typescript","cli"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@aryee337/aery-tui@0.2.27","maintainers":[{"name":"paryee","email":"aryeebus337@gmail.com"}],"homepage":"https://github.com/eminent337/aery#readme","bugs":{"url":"https://github.com/eminent337/aery/issues"},"dist":{"shasum":"310ccc30c920e2d98731b53ac3dd5c2d52edcf21","tarball":"https://registry.npmjs.org/@aryee337/aery-tui/-/aery-tui-0.2.27.tgz","fileCount":109,"integrity":"sha512-HB7dp5VHPoshAIJvpT73lOJvT2HvhMdBNQxybXQksU0Hx0FhBmqbszne3+ye0GjnZnpF0zB1qagcMihqvcnUVQ==","signatures":[{"sig":"MEQCIFXxTnxkp2dr2Te9yvCZ7hX2W/A4CD9ocbCsDq7aILuFAiB3gYHQ2DL/cdj/GSWl9j5D6Tdi8mvZMQnJmvfg1LEE1A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1666648},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"76a4ecce538d9d24e2be74a7fe79bdda707a60db","scripts":{"test":"node --test test/*.test.ts","build":"tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"paryee","email":"aryeebus337@gmail.com"},"repository":{"url":"git+https://github.com/eminent337/aery.git","type":"git","directory":"packages/tui"},"_npmVersion":"10.8.2","description":"Terminal User Interface library with differential rendering for efficient text-based applications","directories":{},"_nodeVersion":"20.20.2","dependencies":{"marked":"15.0.12","get-east-asian-width":"1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"chalk":"5.6.2","@xterm/headless":"5.5.0"},"_npmOperationalInternal":{"tmp":"tmp/aery-tui_0.2.27_1780068062377_0.37228098505811924","host":"s3://npm-registry-packages-npm-production"}},"0.2.28":{"name":"@aryee337/aery-tui","version":"0.2.28","keywords":["tui","terminal","ui","text-editor","differential-rendering","typescript","cli"],"author":{"name":"Mario Zechner"},"license":"MIT","_id":"@aryee337/aery-tui@0.2.28","maintainers":[{"name":"paryee","email":"aryeebus337@gmail.com"}],"homepage":"https://github.com/eminent337/aery#readme","bugs":{"url":"https://github.com/eminent337/aery/issues"},"dist":{"shasum":"802396b40ea9e41d1ea1bdbc1bed875e2cde7da1","tarball":"https://registry.npmjs.org/@aryee337/aery-tui/-/aery-tui-0.2.28.tgz","fileCount":109,"integrity":"sha512-YDLg3Vii2hhYnAKXOR90/i3d3i6a0GdgPL9g2XQmaA9eH+C27tUkPykWMdjLYPydIwRG5H7RRs0fX12YuYV4Qg==","signatures":[{"sig":"MEYCIQCLp0BqbaPxo6scWEqOCSDFbzopDvimgaggRQlVqzTcawIhALlF8ELbR7jsr8JCOIaSVw/XYWJNLDhR/pyI8R7Lj/wK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1666648},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=22.19.0"},"gitHead":"4e0fc7ac331421e6840511567f3f01d7317fa71c","scripts":{"test":"node --test test/*.test.ts","build":"tsgo -p tsconfig.build.json","clean":"shx rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"paryee","email":"aryeebus337@gmail.com"},"repository":{"url":"git+https://github.com/eminent337/aery.git","type":"git","directory":"packages/tui"},"_npmVersion":"10.8.2","description":"Terminal User Interface library with differential rendering for efficient text-based applications","directories":{},"_nodeVersion":"20.20.2","dependencies":{"marked":"15.0.12","get-east-asian-width":"1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"chalk":"5.6.2","@xterm/headless":"5.5.0"},"_npmOperationalInternal":{"tmp":"tmp/aery-tui_0.2.28_1780068842842_0.05131541394718364","host":"s3://npm-registry-packages-npm-production"}},"0.2.29":{"name":"@aryee337/aery-tui","version":"0.2.29","keywords":["tui","terminal","ui","text-editor","differential-rendering","typescript","cli"],"author":{"name":"aryee337"},"license":"MIT","_id":"@aryee337/aery-tui@0.2.29","maintainers":[{"name":"paryee","email":"aryeebus337@gmail.com"}],"contributors":[],"homepage":"https://aery.dev","bugs":{"url":"https://github.com/eminent337/aery/issues"},"dist":{"shasum":"a3bf9ab8f1eafa96d764de9faaa22703f1e33c43","tarball":"https://registry.npmjs.org/@aryee337/aery-tui/-/aery-tui-0.2.29.tgz","fileCount":40,"integrity":"sha512-c5cVCD0JWIDd0Dsp9GshGwsJodCLVaaqQpo3+idgCpCStqLdic8wZbIQoeXmB2I4dvw+BwCcR8QaHQ/l+tMAyg==","signatures":[{"sig":"MEYCIQDHwgF2WWXBmlb2wjoqrpt1/ETA6Ya/p0gdiXxa7uz2ygIhAKI6uhEQtvqiJOhjf6s+VuszffOJ9zybqke2Ayvu2XHO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":499323},"main":"./src/index.ts","type":"module","types":"./src/index.ts","engines":{"bun":">=1.3.14"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts"},"./*":{"types":"./src/*.ts","import":"./src/*.ts"},"./*.js":"./src/*.ts","./components/*":{"types":"./src/components/*.ts","import":"./src/components/*.ts"}},"gitHead":"bfb3b2584c54a9af5192bf9adc23f19eb24b504b","scripts":{"fix":"biome check --write --unsafe .","fmt":"biome format --write .","lint":"biome lint .","test":"bun test --parallel test/*.test.ts","check":"biome check . && bun run check:types","check:types":"tsgo -p tsconfig.json --noEmit"},"_npmUser":{"name":"paryee","email":"aryeebus337@gmail.com"},"repository":{"url":"git+https://github.com/eminent337/aery.git","type":"git","directory":"packages/tui"},"_npmVersion":"11.14.1","description":"Terminal User Interface library with differential rendering for efficient text-based applications","directories":{},"_nodeVersion":"26.2.0","dependencies":{"marked":"catalog:","lru-cache":"catalog:","@aryee337/aery-utils":"catalog:","@aryee337/aery-engine":"catalog:"},"_hasShrinkwrap":false,"devDependencies":{"chalk":"catalog:","@xterm/headless":"catalog:"},"_npmOperationalInternal":{"tmp":"tmp/aery-tui_0.2.29_1781120531787_0.2963807689293798","host":"s3://npm-registry-packages-npm-production"}},"0.2.10":{"name":"@aryee337/aery-tui","version":"0.2.10","keywords":["tui","terminal","ui","text-editor","differential-rendering","typescript","cli"],"author":{"name":"aryee337"},"license":"MIT","_id":"@aryee337/aery-tui@0.2.10","maintainers":[{"name":"paryee","email":"aryeebus337@gmail.com"}],"contributors":[],"homepage":"https://aery.dev","bugs":{"url":"https://github.com/eminent337/aery/issues"},"dist":{"shasum":"93441f4e62f302fa6f16516d2b49b09eb1d87038","tarball":"https://registry.npmjs.org/@aryee337/aery-tui/-/aery-tui-0.2.10.tgz","fileCount":77,"integrity":"sha512-1ItISMfRHN/ehET/vyGbBRza394stuswPSMG6vPzyACxNc7L0rVTD3G0nJr6ZbFbueQv+HWPnrSEle7K9kv2/w==","signatures":[{"sig":"MEYCIQC7Amk4OIdz+GBa6pZIOD5/eUVI3Td+W3BMhsj48hU8HQIhANmhY1zC6WajyZTciS5ypEqu55dkZlkwiiBQ4Er5/6kU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":569326},"main":"./src/index.ts","type":"module","_from":"file:/tmp/aery-pack-mHFKWs/aryee337-aery-tui-0.2.10.tgz","types":"./dist/types/index.d.ts","engines":{"bun":">=1.3.14"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./src/index.ts"},"./*":{"types":"./dist/types/*.d.ts","import":"./src/*.ts"},"./*.js":"./src/*.ts","./components/*":{"types":"./dist/types/components/*.d.ts","import":"./src/components/*.ts"}},"scripts":{"fix":"biome check --write --unsafe .","fmt":"biome format --write .","lint":"biome lint .","test":"bun test --parallel test/*.test.ts","check":"biome check . && bun run check:types","check:types":"tsgo -p tsconfig.json --noEmit"},"_npmUser":{"name":"paryee","email":"aryeebus337@gmail.com"},"_resolved":"/tmp/aery-pack-mHFKWs/aryee337-aery-tui-0.2.10.tgz","_integrity":"sha512-1ItISMfRHN/ehET/vyGbBRza394stuswPSMG6vPzyACxNc7L0rVTD3G0nJr6ZbFbueQv+HWPnrSEle7K9kv2/w==","repository":{"url":"git+https://github.com/eminent337/aery.git","type":"git","directory":"packages/tui"},"_npmVersion":"11.16.0","description":"Terminal User Interface library with differential rendering for efficient text-based applications","directories":{},"_nodeVersion":"24.3.0","dependencies":{"marked":"^18.0.4","lru-cache":"11.5.1","@aryee337/aery-utils":"0.2.10","@aryee337/aery-engine":"0.2.10"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"chalk":"^5.6.2","@xterm/headless":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/aery-tui_0.2.10_1781138792730_0.9031617426994181","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@aryee337/aery-tui","version":"0.3.0","keywords":["tui","terminal","ui","text-editor","differential-rendering","typescript","cli"],"author":{"name":"aryee337"},"license":"MIT","_id":"@aryee337/aery-tui@0.3.0","maintainers":[{"name":"paryee","email":"aryeebus337@gmail.com"}],"contributors":[],"homepage":"https://aery.dev","bugs":{"url":"https://github.com/eminent337/aery/issues"},"dist":{"shasum":"a8d766282e0e9639523af50f7c4d0b64e593cd2d","tarball":"https://registry.npmjs.org/@aryee337/aery-tui/-/aery-tui-0.3.0.tgz","fileCount":40,"integrity":"sha512-+6JBwPKjAyNuaa/159LZ52eWpYSfnuU/Iak6BhG5ztUQ9wwUPJbA8v/qYvEHvdb8bFnfe84ZVrg6A6LD4LMpbQ==","signatures":[{"sig":"MEYCIQCawzjIOUl9jHqSp7OIH7kPqc7r7Zm/m8ZzJjK2h8zMEgIhAMUcmK3OK9tCS5oJEt3ZJjR4zdbTdpIUWSf+DHODj3+G","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":499437},"main":"./src/index.ts","type":"module","types":"./src/index.ts","engines":{"bun":">=1.3.14"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts"},"./*":{"types":"./src/*.ts","import":"./src/*.ts"},"./*.js":"./src/*.ts","./components/*":{"types":"./src/components/*.ts","import":"./src/components/*.ts"}},"gitHead":"7ae506fcc4e8919c6e375f0c1be1466120a681d6","scripts":{"fix":"biome check --write --unsafe .","fmt":"biome format --write .","lint":"biome lint .","test":"bun test --parallel test/*.test.ts","check":"biome check . && bun run check:types","check:types":"tsgo -p tsconfig.json --noEmit"},"_npmUser":{"name":"paryee","email":"aryeebus337@gmail.com"},"repository":{"url":"git+https://github.com/eminent337/aery.git","type":"git","directory":"packages/tui"},"_npmVersion":"11.14.1","description":"Terminal User Interface library with differential rendering for efficient text-based applications","directories":{},"_nodeVersion":"26.2.0","dependencies":{"marked":"catalog:","lru-cache":"catalog:","@aryee337/aery-utils":"workspace:*","@aryee337/aery-engine":"workspace:*"},"_hasShrinkwrap":false,"devDependencies":{"chalk":"catalog:","@xterm/headless":"catalog:"},"_npmOperationalInternal":{"tmp":"tmp/aery-tui_0.3.0_1781200343283_0.406048894199591","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@aryee337/aery-tui","version":"0.3.2","keywords":["tui","terminal","ui","text-editor","differential-rendering","typescript","cli"],"author":{"name":"aryee337"},"license":"MIT","_id":"@aryee337/aery-tui@0.3.2","maintainers":[{"name":"paryee","email":"aryeebus337@gmail.com"}],"contributors":[],"homepage":"https://aery.dev","bugs":{"url":"https://github.com/eminent337/aery/issues"},"dist":{"shasum":"e2f4d328c78c13bef4348fd3c5dd58ac957e344b","tarball":"https://registry.npmjs.org/@aryee337/aery-tui/-/aery-tui-0.3.2.tgz","fileCount":77,"integrity":"sha512-yUrxzr7b+xSOUp/clOD8pR/fSZZsOWkwQcGE7kQRGHP2FkrqZzUnShOtZi3QLVNpInRi6uOVBqXnrPcFMLcetA==","signatures":[{"sig":"MEQCIFeJVNCciSGJZ4zw+kcc+7/H2OXWbm9kQ6gFlZIHjQ3TAiBaR1seU5ipdegaep7v+ycMxGXDPux+MkcqUPHJjQjrnw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":569323},"main":"./src/index.ts","type":"module","_from":"file:/tmp/aery-pack-8DSqEO/aryee337-aery-tui-0.3.2.tgz","types":"./dist/types/index.d.ts","engines":{"bun":">=1.3.14"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./src/index.ts"},"./*":{"types":"./dist/types/*.d.ts","import":"./src/*.ts"},"./*.js":"./src/*.ts","./components/*":{"types":"./dist/types/components/*.d.ts","import":"./src/components/*.ts"}},"scripts":{"fix":"biome check --write --unsafe .","fmt":"biome format --write .","lint":"biome lint .","test":"bun test --parallel test/*.test.ts","check":"biome check . && bun run check:types","check:types":"tsgo -p tsconfig.json --noEmit"},"_npmUser":{"name":"paryee","email":"aryeebus337@gmail.com"},"_resolved":"/tmp/aery-pack-8DSqEO/aryee337-aery-tui-0.3.2.tgz","_integrity":"sha512-yUrxzr7b+xSOUp/clOD8pR/fSZZsOWkwQcGE7kQRGHP2FkrqZzUnShOtZi3QLVNpInRi6uOVBqXnrPcFMLcetA==","repository":{"url":"git+https://github.com/eminent337/aery.git","type":"git","directory":"packages/tui"},"_npmVersion":"11.17.0","description":"Terminal User Interface library with differential rendering for efficient text-based applications","directories":{},"_nodeVersion":"24.3.0","dependencies":{"marked":"^18.0.4","lru-cache":"11.5.1","@aryee337/aery-utils":"0.3.2","@aryee337/aery-engine":"0.3.2"},"_hasShrinkwrap":false,"devDependencies":{"chalk":"^5.6.2","@xterm/headless":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/aery-tui_0.3.2_1781212712167_0.8545728934849322","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"@aryee337/aery-tui","version":"0.3.5","keywords":["tui","terminal","ui","text-editor","differential-rendering","typescript","cli"],"author":{"name":"aryee337"},"license":"MIT","_id":"@aryee337/aery-tui@0.3.5","maintainers":[{"name":"paryee","email":"aryeebus337@gmail.com"}],"contributors":[],"homepage":"https://aery.dev","bugs":{"url":"https://github.com/eminent337/aery/issues"},"dist":{"shasum":"f9653c6faea1f2a85c9787e015fa5f5915d7dbaa","tarball":"https://registry.npmjs.org/@aryee337/aery-tui/-/aery-tui-0.3.5.tgz","fileCount":77,"integrity":"sha512-eOdq+vzNRUKQcNNUde0XYREUqsU4j0Xt5L9GuzFFfqrb+6XBkdtm86L76NagXSYFWL9dSPAoBTugmEaa29Naqg==","signatures":[{"sig":"MEUCIQCtz0I4v7bHqwoHCaUz9uF0SiU+93DjGuOETPBVm7Zo5QIgC/oj0U2AAzxil6XsWVATk0W3Jxg/5f5UuVPTEuY3ev4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":569339},"main":"./src/index.ts","type":"module","_from":"file:/tmp/aery-pack-BqnRij/aryee337-aery-tui-0.3.5.tgz","types":"./dist/types/index.d.ts","engines":{"bun":">=1.3.14"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./src/index.ts"},"./*":{"types":"./dist/types/*.d.ts","import":"./src/*.ts"},"./*.js":"./src/*.ts","./components/*":{"types":"./dist/types/components/*.d.ts","import":"./src/components/*.ts"}},"scripts":{"fix":"biome check --write --unsafe .","fmt":"biome format --write .","lint":"biome lint .","test":"bun test --parallel --timeout 30000 test/*.test.ts","check":"biome check . && bun run check:types","check:types":"tsgo -p tsconfig.json --noEmit"},"_npmUser":{"name":"paryee","email":"aryeebus337@gmail.com"},"_resolved":"/tmp/aery-pack-BqnRij/aryee337-aery-tui-0.3.5.tgz","_integrity":"sha512-eOdq+vzNRUKQcNNUde0XYREUqsU4j0Xt5L9GuzFFfqrb+6XBkdtm86L76NagXSYFWL9dSPAoBTugmEaa29Naqg==","repository":{"url":"git+https://github.com/eminent337/aery.git","type":"git","directory":"packages/tui"},"_npmVersion":"11.17.0","description":"Terminal User Interface library with differential rendering for efficient text-based applications","directories":{},"_nodeVersion":"24.3.0","dependencies":{"marked":"^18.0.4","lru-cache":"11.5.1","@aryee337/aery-utils":"0.3.5","@aryee337/aery-engine":"0.3.5"},"_hasShrinkwrap":false,"devDependencies":{"chalk":"^5.6.2","@xterm/headless":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/aery-tui_0.3.5_1781252813516_0.2692768822599416","host":"s3://npm-registry-packages-npm-production"}},"0.3.7":{"name":"@aryee337/aery-tui","version":"0.3.7","keywords":["tui","terminal","ui","text-editor","differential-rendering","typescript","cli"],"author":{"name":"aryee337"},"license":"MIT","_id":"@aryee337/aery-tui@0.3.7","maintainers":[{"name":"paryee","email":"aryeebus337@gmail.com"}],"contributors":[],"homepage":"https://aery.dev","bugs":{"url":"https://github.com/eminent337/aery/issues"},"dist":{"shasum":"d3a03414131aed89a03be5006992656f9634df1e","tarball":"https://registry.npmjs.org/@aryee337/aery-tui/-/aery-tui-0.3.7.tgz","fileCount":79,"integrity":"sha512-MMCZ2i5B3qHpverbNGaVo84bzEW0ogS/oEppB6iClgBILxB6OfMqd26NSbvKyTAkCqLfGQYcF6UKfKPUw5464w==","signatures":[{"sig":"MEUCIQClQAPq2UWWY83CqfxfILrQzJjpAYfjOuUUEork6/mVFgIgfLoW139jSab6KmWKtxnL8HU+l/SavP/6/c9Xj8NcWKg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":602252},"main":"./src/index.ts","type":"module","_from":"file:/tmp/aery-pack-YPH67D/aryee337-aery-tui-0.3.7.tgz","types":"./dist/types/index.d.ts","engines":{"bun":">=1.3.14"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./src/index.ts"},"./*":{"types":"./dist/types/*.d.ts","import":"./src/*.ts"},"./*.js":"./src/*.ts","./components/*":{"types":"./dist/types/components/*.d.ts","import":"./src/components/*.ts"}},"scripts":{"fix":"biome check --write --unsafe .","fmt":"biome format --write .","lint":"biome lint .","test":"bun test --parallel --timeout 30000 test/*.test.ts","check":"biome check . && bun run check:types","check:types":"tsgo -p tsconfig.json --noEmit"},"_npmUser":{"name":"paryee","email":"aryeebus337@gmail.com"},"_resolved":"/tmp/aery-pack-YPH67D/aryee337-aery-tui-0.3.7.tgz","_integrity":"sha512-MMCZ2i5B3qHpverbNGaVo84bzEW0ogS/oEppB6iClgBILxB6OfMqd26NSbvKyTAkCqLfGQYcF6UKfKPUw5464w==","repository":{"url":"git+https://github.com/eminent337/aery.git","type":"git","directory":"packages/tui"},"_npmVersion":"11.17.0","description":"Terminal User Interface library with differential rendering for efficient text-based applications","directories":{},"_nodeVersion":"24.3.0","dependencies":{"marked":"^18.0.4","lru-cache":"11.5.1","@aryee337/aery-utils":"0.3.7","@aryee337/aery-engine":"0.3.7"},"_hasShrinkwrap":false,"devDependencies":{"chalk":"^5.6.2","@xterm/headless":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/aery-tui_0.3.7_1781630128328_0.41323934124198214","host":"s3://npm-registry-packages-npm-production"}},"0.3.8":{"type":"module","name":"@aryee337/aery-tui","version":"0.3.8","description":"Terminal User Interface library with differential rendering for efficient text-based applications","homepage":"https://aery.dev","author":{"name":"aryee337"},"contributors":[],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/eminent337/aery.git","directory":"packages/tui"},"bugs":{"url":"https://github.com/eminent337/aery/issues"},"keywords":["tui","terminal","ui","text-editor","differential-rendering","typescript","cli"],"main":"./src/index.ts","types":"./src/index.ts","scripts":{"check":"biome check . && bun run check:types","check:types":"tsgo -p tsconfig.json --noEmit","lint":"biome lint .","test":"bun test --parallel --timeout 30000 test/*.test.ts","fix":"biome check --write --unsafe .","fmt":"biome format --write ."},"dependencies":{"@aryee337/aery-engine":"workspace:*","@aryee337/aery-utils":"workspace:*","lru-cache":"catalog:","marked":"catalog:"},"devDependencies":{"chalk":"catalog:","@xterm/headless":"catalog:"},"engines":{"bun":">=1.3.14"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts"},"./*":{"types":"./src/*.ts","import":"./src/*.ts"},"./components/*":{"types":"./src/components/*.ts","import":"./src/components/*.ts"},"./*.js":"./src/*.ts"},"gitHead":"28861a5556d2444acb088436dfbed0bee79bf888","_id":"@aryee337/aery-tui@0.3.8","_nodeVersion":"24.3.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-qoPpHraVH5Hurp/gl74MwGNO00TmtDwhYTMs0dWZWDwAqF7iiM/X7lQXD0J8qg0sek8BwNBNddYTADS9xJmWTQ==","shasum":"204df00b27130dc373e4ba5771d86c5d32d4d4b9","tarball":"https://registry.npmjs.org/@aryee337/aery-tui/-/aery-tui-0.3.8.tgz","fileCount":41,"unpackedSize":529859,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIH+yfxq5pvnI9OC4CHiO2ebMVtrYtUWkZnI6gUnuzdFRAiA2c37eeLEXccXR13tjADJE8PWkfGYHFvHzUqtc8rce/Q=="}]},"_npmUser":{"name":"paryee","email":"aryeebus337@gmail.com"},"directories":{},"maintainers":[{"name":"paryee","email":"aryeebus337@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/aery-tui_0.3.8_1782417579219_0.0580894431391501"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-28T20:04:48.939Z","modified":"2026-06-25T19:59:39.577Z","0.1.148":"2026-05-28T20:04:49.307Z","0.2.11":"2026-05-28T20:09:32.981Z","0.2.12":"2026-05-28T20:13:18.310Z","0.2.13":"2026-05-28T20:16:25.608Z","0.2.14":"2026-05-28T23:33:17.382Z","0.2.15":"2026-05-29T04:17:28.043Z","0.2.16":"2026-05-29T05:34:05.102Z","0.2.18":"2026-05-29T08:08:23.175Z","0.2.19":"2026-05-29T09:42:24.657Z","0.2.20":"2026-05-29T10:04:02.662Z","0.2.21":"2026-05-29T10:04:44.148Z","0.2.22":"2026-05-29T10:43:24.472Z","0.2.23":"2026-05-29T12:26:51.651Z","0.2.24":"2026-05-29T13:03:36.872Z","0.2.25":"2026-05-29T13:09:31.533Z","0.2.26":"2026-05-29T13:26:59.942Z","0.2.27":"2026-05-29T15:21:02.555Z","0.2.28":"2026-05-29T15:34:03.012Z","0.2.29":"2026-06-10T19:42:11.924Z","0.2.10":"2026-06-11T00:46:32.878Z","0.3.0":"2026-06-11T17:52:23.430Z","0.3.2":"2026-06-11T21:18:32.337Z","0.3.5":"2026-06-12T08:26:53.716Z","0.3.7":"2026-06-16T17:15:28.530Z","0.3.8":"2026-06-25T19:59:39.458Z"},"bugs":{"url":"https://github.com/eminent337/aery/issues"},"author":{"name":"aryee337"},"license":"MIT","homepage":"https://aery.dev","keywords":["tui","terminal","ui","text-editor","differential-rendering","typescript","cli"],"repository":{"type":"git","url":"git+https://github.com/eminent337/aery.git","directory":"packages/tui"},"description":"Terminal User Interface library with differential rendering for efficient text-based applications","contributors":[],"maintainers":[{"name":"paryee","email":"aryeebus337@gmail.com"}],"readme":"# @aryee337/aery-tui\n\nMinimal terminal UI framework with differential rendering and synchronized output for flicker-free interactive CLI applications.\n\n## Features\n\n- **Differential Rendering**: Three-strategy rendering system that only updates what changed\n- **Synchronized Output**: Uses CSI 2026 for atomic screen updates (no flicker)\n- **Bracketed Paste Mode**: Handles large pastes correctly with markers for >10 line pastes\n- **Component-based**: Simple Component interface with render() method\n- **Theme Support**: Components accept theme interfaces for customizable styling\n- **Built-in Components**: Text, TruncatedText, Input, Editor, Markdown, Loader, SelectList, SettingsList, Spacer, Image, Box, Container\n- **Inline Images**: Renders images in terminals that support Kitty or iTerm2 graphics protocols\n- **Autocomplete Support**: File paths and slash commands\n\n## Quick Start\n\n```typescript\nimport { TUI, Text, Editor, ProcessTerminal } from \"@aryee337/aery-tui\";\n\n// Create terminal\nconst terminal = new ProcessTerminal();\n\n// Create TUI\nconst tui = new TUI(terminal);\n\n// Add components\ntui.addChild(new Text(\"Welcome to my app!\"));\n\nconst editor = new Editor(editorTheme);\neditor.onSubmit = (text) => {\n\tconsole.log(\"Submitted:\", text);\n\ttui.addChild(new Text(`You said: ${text}`));\n};\ntui.addChild(editor);\n\n// Start\ntui.start();\n```\n\n## Core API\n\n### TUI\n\nMain container that manages components and rendering.\n\n```typescript\nconst tui = new TUI(terminal);\ntui.addChild(component);\ntui.removeChild(component);\ntui.start();\ntui.stop();\ntui.requestRender(); // Request a re-render\ntui.requestComponentRender(component); // Re-render only the root subtree containing `component` when safe (falls back to a full render on resize, overlays, images, or concurrent full requests)\n\n// Global debug key handler (Shift+Ctrl+D)\ntui.onDebug = () => console.log(\"Debug triggered\");\n```\n\n### Component Interface\n\nAll components implement:\n\n```typescript\ninterface Component {\n\trender(width: number): string[];\n\thandleInput?(data: string): void;\n\tinvalidate?(): void;\n}\n```\n\n| Method               | Description                                                                                                                                                        |\n| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| `render(width)`      | Returns an array of strings, one per line. Each line **must not exceed `width`** or the TUI will error. Use `truncateToWidth()` or manual wrapping to ensure this. |\n| `handleInput?(data)` | Called when the component has focus and receives keyboard input. The `data` string contains raw terminal input (may include ANSI escape sequences).                |\n| `invalidate?()`      | Called to clear any cached render state. Components should re-render from scratch on the next `render()` call.                                                     |\n\n## Built-in Components\n\n### Container\n\nGroups child components.\n\n```typescript\nconst container = new Container();\ncontainer.addChild(component);\ncontainer.removeChild(component);\n```\n\n### Box\n\nContainer that applies padding and background color to all children.\n\n```typescript\nconst box = new Box(\n\t1, // paddingX (default: 1)\n\t1, // paddingY (default: 1)\n\t(text) => chalk.bgGray(text), // optional background function\n);\nbox.addChild(new Text(\"Content\"));\nbox.setBgFn((text) => chalk.bgBlue(text)); // Change background dynamically\n```\n\n### Text\n\nDisplays multi-line text with word wrapping and padding.\n\n```typescript\nconst text = new Text(\n\t\"Hello World\", // text content\n\t1, // paddingX (default: 1)\n\t1, // paddingY (default: 1)\n\t(text) => chalk.bgGray(text), // optional background function\n);\ntext.setText(\"Updated text\");\ntext.setCustomBgFn((text) => chalk.bgBlue(text));\n```\n\n### TruncatedText\n\nSingle-line text that truncates to fit viewport width. Useful for status lines and headers.\n\n```typescript\nconst truncated = new TruncatedText(\n\t\"This is a very long line that will be truncated...\",\n\t0, // paddingX (default: 0)\n\t0, // paddingY (default: 0)\n);\n```\n\n### Input\n\nSingle-line text input with horizontal scrolling.\n\n```typescript\nconst input = new Input();\ninput.onSubmit = (value) => console.log(value);\ninput.setValue(\"initial\");\ninput.getValue();\n```\n\n**Key Bindings:**\n\n- `Enter` - Submit\n- `Ctrl+A` / `Ctrl+E` - Line start/end\n- `Ctrl+W` or `Alt+Backspace` - Delete word backwards\n- `Ctrl+U` - Delete to start of line\n- `Ctrl+K` - Delete to end of line\n- `Ctrl+Left` / `Ctrl+Right` - Word navigation\n- `Alt+Left` / `Alt+Right` - Word navigation\n- Arrow keys, Backspace, Delete work as expected\n\n### Editor\n\nMulti-line text editor with autocomplete, file completion, and paste handling.\n\n```typescript\ninterface SymbolTheme {\n\tcursor: string;\n\tellipsis: string;\n\tboxRound: {\n\t\ttopLeft: string;\n\t\ttopRight: string;\n\t\tbottomLeft: string;\n\t\tbottomRight: string;\n\t\thorizontal: string;\n\t\tvertical: string;\n\t};\n\tboxSharp: {\n\t\ttopLeft: string;\n\t\ttopRight: string;\n\t\tbottomLeft: string;\n\t\tbottomRight: string;\n\t\thorizontal: string;\n\t\tvertical: string;\n\t\tteeDown: string;\n\t\tteeUp: string;\n\t\tteeLeft: string;\n\t\tteeRight: string;\n\t\tcross: string;\n\t};\n\ttable: {\n\t\ttopLeft: string;\n\t\ttopRight: string;\n\t\tbottomLeft: string;\n\t\tbottomRight: string;\n\t\thorizontal: string;\n\t\tvertical: string;\n\t\tteeDown: string;\n\t\tteeUp: string;\n\t\tteeLeft: string;\n\t\tteeRight: string;\n\t\tcross: string;\n\t};\n\tquoteBorder: string;\n\thrChar: string;\n\tspinnerFrames: string[];\n}\n\ninterface EditorTheme {\n\tborderColor: (str: string) => string;\n\tselectList: SelectListTheme;\n\tsymbols: SymbolTheme;\n}\n\nconst editor = new Editor(theme);\neditor.onSubmit = (text) => console.log(text);\neditor.onChange = (text) => console.log(\"Changed:\", text);\neditor.disableSubmit = true; // Disable submit temporarily\neditor.setAutocompleteProvider(provider);\neditor.borderColor = (s) => chalk.blue(s); // Change border dynamically\n```\n\n**Features:**\n\n- Multi-line editing with word wrap\n- Slash command autocomplete (type `/`)\n- File path autocomplete (press `Tab`)\n- Large paste handling (>10 lines creates `[paste #1 +50 lines]` marker)\n- Horizontal lines above/below editor\n- Fake cursor rendering (hidden real cursor)\n\n**Key Bindings:**\n\n- `Enter` - Submit\n- `Shift+Enter`, `Ctrl+Enter`, or `Alt+Enter` - New line (terminal-dependent, Alt+Enter most reliable)\n- `Tab` - Autocomplete\n- `Ctrl+K` - Delete line\n- `Alt+D` / `Alt+Delete` - Delete word forward\n- `Ctrl+A` / `Ctrl+E` - Line start/end\n- `Ctrl+-` - Undo last edit\n- Arrow keys, Backspace, Delete work as expected\n\n### Markdown\n\nRenders markdown with syntax highlighting and theming support.\n\n```typescript\ninterface MarkdownTheme {\n\theading: (text: string) => string;\n\tlink: (text: string) => string;\n\tlinkUrl: (text: string) => string;\n\tcode: (text: string) => string;\n\tcodeBlock: (text: string) => string;\n\tcodeBlockBorder: (text: string) => string;\n\tquote: (text: string) => string;\n\tquoteBorder: (text: string) => string;\n\thr: (text: string) => string;\n\tlistBullet: (text: string) => string;\n\tbold: (text: string) => string;\n\titalic: (text: string) => string;\n\tstrikethrough: (text: string) => string;\n\tunderline: (text: string) => string;\n\thighlightCode?: (code: string, lang?: string) => string[];\n\tsymbols: SymbolTheme;\n}\n\ninterface DefaultTextStyle {\n\tcolor?: (text: string) => string;\n\tbgColor?: (text: string) => string;\n\tbold?: boolean;\n\titalic?: boolean;\n\tstrikethrough?: boolean;\n\tunderline?: boolean;\n}\n\nconst md = new Markdown(\n\t\"# Hello\\n\\nSome **bold** text\",\n\t1, // paddingX\n\t1, // paddingY\n\ttheme, // MarkdownTheme\n\tdefaultStyle, // optional DefaultTextStyle\n\t2, // optional code block indent (spaces)\n);\nmd.setText(\"Updated markdown\");\n```\n\n**Features:**\n\n- Headings, bold, italic, code blocks, lists, links, blockquotes\n- HTML tags rendered as plain text\n- Optional syntax highlighting via `highlightCode`\n- Padding support\n- Render caching for performance\n\n### Loader\n\nAnimated loading spinner.\n\n```typescript\nconst loader = new Loader(\n\ttui, // TUI instance for render updates\n\t(s) => chalk.cyan(s), // spinner color function\n\t(s) => chalk.gray(s), // message color function\n\t\"Loading...\", // message (default: \"Loading...\")\n);\nloader.start();\nloader.setMessage(\"Still loading...\");\nloader.stop();\n```\n\n### CancellableLoader\n\nExtends Loader with Escape key handling and an AbortSignal for cancelling async operations.\n\n```typescript\nconst loader = new CancellableLoader(\n\ttui, // TUI instance for render updates\n\t(s) => chalk.cyan(s), // spinner color function\n\t(s) => chalk.gray(s), // message color function\n\t\"Working...\", // message\n);\nloader.onAbort = () => done(null); // Called when user presses Escape\ndoAsyncWork(loader.signal).then(done);\n```\n\n**Properties:**\n\n- `signal: AbortSignal` - Aborted when user presses Escape\n- `aborted: boolean` - Whether the loader was aborted\n- `onAbort?: () => void` - Callback when user presses Escape\n\n### SelectList\n\nInteractive selection list with keyboard navigation.\n\n```typescript\ninterface SelectItem {\n\tvalue: string;\n\tlabel: string;\n\tdescription?: string;\n}\n\ninterface SelectListTheme {\n\tselectedPrefix: (text: string) => string;\n\tselectedText: (text: string) => string;\n\tdescription: (text: string) => string;\n\tscrollInfo: (text: string) => string;\n\tnoMatch: (text: string) => string;\n\tsymbols: SymbolTheme;\n}\n\nconst list = new SelectList(\n\t[\n\t\t{ value: \"opt1\", label: \"Option 1\", description: \"First option\" },\n\t\t{ value: \"opt2\", label: \"Option 2\", description: \"Second option\" },\n\t],\n\t5, // maxVisible\n\ttheme, // SelectListTheme\n);\n\nlist.onSelect = (item) => console.log(\"Selected:\", item);\nlist.onCancel = () => console.log(\"Cancelled\");\nlist.onSelectionChange = (item) => console.log(\"Highlighted:\", item);\nlist.setFilter(\"opt\"); // Filter items\n```\n\n**Controls:**\n\n- Arrow keys: Navigate\n- Enter: Select\n- Escape: Cancel\n\n### SettingsList\n\nSettings panel with value cycling and submenus.\n\n```typescript\ninterface SettingItem {\n\tid: string;\n\tlabel: string;\n\tdescription?: string;\n\tcurrentValue: string;\n\tvalues?: string[]; // If provided, Enter/Space cycles through these\n\tsubmenu?: (currentValue: string, done: (selectedValue?: string) => void) => Component;\n}\n\ninterface SettingsListTheme {\n\tlabel: (text: string, selected: boolean) => string;\n\tvalue: (text: string, selected: boolean) => string;\n\tdescription: (text: string) => string;\n\tcursor: string;\n\thint: (text: string) => string;\n}\n\nconst settings = new SettingsList(\n\t[\n\t\t{ id: \"theme\", label: \"Theme\", currentValue: \"dark\", values: [\"dark\", \"light\"] },\n\t\t{ id: \"model\", label: \"Model\", currentValue: \"gpt-4\", submenu: (val, done) => modelSelector },\n\t],\n\t10, // maxVisible\n\ttheme, // SettingsListTheme\n\t(id, newValue) => console.log(`${id} changed to ${newValue}`),\n\t() => console.log(\"Cancelled\"),\n);\nsettings.updateValue(\"theme\", \"light\");\n```\n\n**Controls:**\n\n- Arrow keys: Navigate\n- Enter/Space: Activate (cycle value or open submenu)\n- Escape: Cancel\n\n### Spacer\n\nEmpty lines for vertical spacing.\n\n```typescript\nconst spacer = new Spacer(2); // 2 empty lines (default: 1)\n```\n\n### Image\n\nRenders images inline for terminals that support the Kitty graphics protocol (Kitty, Ghostty, WezTerm) or iTerm2 inline images. Falls back to a text placeholder on unsupported terminals.\n\n```typescript\ninterface ImageTheme {\n\tfallbackColor: (str: string) => string;\n}\n\ninterface ImageOptions {\n\tmaxWidthCells?: number;\n\tmaxHeightCells?: number;\n\tfilename?: string;\n}\n\nconst image = new Image(\n\tbase64Data, // base64-encoded image data\n\t\"image/png\", // MIME type\n\ttheme, // ImageTheme\n\toptions, // optional ImageOptions\n);\ntui.addChild(image);\n```\n\nSupported formats: PNG, JPEG, GIF, WebP. Dimensions are parsed from the image headers automatically.\n\n## Autocomplete\n\n### CombinedAutocompleteProvider\n\nSupports both slash commands and file paths.\n\n```typescript\nimport { CombinedAutocompleteProvider } from \"@aryee337/aery-tui\";\nimport { getProjectDir } from \"@aryee337/aery-utils\";\n\nconst provider = new CombinedAutocompleteProvider(\n\t[\n\t\t{ name: \"help\", description: \"Show help\" },\n\t\t{ name: \"clear\", description: \"Clear screen\" },\n\t\t{ name: \"delete\", description: \"Delete last message\" },\n\t],\n\tgetProjectDir(), // base path for file completion\n);\n\neditor.setAutocompleteProvider(provider);\n```\n\n**Features:**\n\n- Type `/` to see slash commands\n- Press `Tab` for file path completion\n- Works with `~/`, `./`, `../`, and `@` prefix\n- Filters to attachable files for `@` prefix\n\n## Key Detection\n\nHelper functions for detecting keyboard input (supports Kitty keyboard protocol):\n\n```typescript\nimport {\n\tisEnter,\n\tisEscape,\n\tisTab,\n\tisShiftTab,\n\tisArrowUp,\n\tisArrowDown,\n\tisArrowLeft,\n\tisArrowRight,\n\tisCtrlA,\n\tisCtrlC,\n\tisCtrlE,\n\tisCtrlK,\n\tisCtrlO,\n\tisCtrlP,\n\tisCtrlLeft,\n\tisCtrlRight,\n\tisAltLeft,\n\tisAltRight,\n\tisShiftEnter,\n\tisAltEnter,\n\tisShiftCtrlO,\n\tisShiftCtrlD,\n\tisShiftCtrlP,\n\tisBackspace,\n\tisDelete,\n\tisHome,\n\tisEnd,\n\t// ... and more\n} from \"@aryee337/aery-tui\";\n\nif (isCtrlC(data)) {\n\tprocess.exit(0);\n}\n```\n\n## Differential Rendering\n\nThe TUI uses three rendering strategies:\n\n1. **First Render**: Output all lines without clearing scrollback\n2. **Width Changed or Change Above Viewport**: Clear screen and full re-render\n3. **Normal Update**: Move cursor to first changed line, clear to end, render changed lines\n\nAll updates are wrapped in **synchronized output** (`\\x1b[?2026h` ... `\\x1b[?2026l`) for atomic, flicker-free rendering.\n\n## Terminal Interface\n\nThe TUI works with any object implementing the `Terminal` interface:\n\n```typescript\ninterface Terminal {\n\tstart(onInput: (data: string) => void, onResize: () => void): void;\n\tstop(): void;\n\twrite(data: string): void;\n\tget columns(): number;\n\tget rows(): number;\n\tmoveBy(lines: number): void;\n\thideCursor(): void;\n\tshowCursor(): void;\n\tclearLine(): void;\n\tclearFromCursor(): void;\n\tclearScreen(): void;\n}\n```\n\n**Built-in implementations:**\n\n- `ProcessTerminal` - Uses `process.stdin/stdout`\n- `VirtualTerminal` - For testing (uses `@xterm/headless`)\n\n## Utilities\n\n```typescript\nimport { Ellipsis, visibleWidth, truncateToWidth, wrapTextWithAnsi } from \"@aryee337/aery-tui\";\n\n// Get visible width of string (ignoring ANSI codes, uses Bun.stringWidth)\nconst width = visibleWidth(\"\\x1b[31mHello\\x1b[0m\"); // 5\n\n// Truncate string to width (preserving ANSI codes, adds ellipsis)\nconst truncated = truncateToWidth(\"Hello World\", 8); // \"Hello…\" (default: Ellipsis.Unicode)\n\n// Truncate without ellipsis\nconst truncatedNoEllipsis = truncateToWidth(\"Hello World\", 8, Ellipsis.Omit); // \"Hello Wo\"\n\n// Wrap text to width (Bun.wrapAnsi word wrap, trims line ends, preserves ANSI)\nconst lines = wrapTextWithAnsi(\"This is a long line that needs wrapping\", 20);\n// [\"This is a long line\", \"that needs wrapping\"]\n```\n\n## Creating Custom Components\n\nWhen creating custom components, **each line returned by `render()` must not exceed the `width` parameter**. The TUI will error if any line is wider than the terminal.\n\n### Handling Input\n\nUse the key detection utilities to handle keyboard input:\n\n```typescript\nimport { isEnter, isEscape, isArrowUp, isArrowDown, isCtrlC, isTab, isBackspace } from \"@aryee337/aery-tui\";\nimport type { Component } from \"@aryee337/aery-tui\";\n\nclass MyInteractiveComponent implements Component {\n\tprivate selectedIndex = 0;\n\tprivate items = [\"Option 1\", \"Option 2\", \"Option 3\"];\n\n\tonSelect?: (index: number) => void;\n\tonCancel?: () => void;\n\n\thandleInput(data: string): void {\n\t\tif (isArrowUp(data)) {\n\t\t\tthis.selectedIndex = Math.max(0, this.selectedIndex - 1);\n\t\t} else if (isArrowDown(data)) {\n\t\t\tthis.selectedIndex = Math.min(this.items.length - 1, this.selectedIndex + 1);\n\t\t} else if (isEnter(data)) {\n\t\t\tthis.onSelect?.(this.selectedIndex);\n\t\t} else if (isEscape(data) || isCtrlC(data)) {\n\t\t\tthis.onCancel?.();\n\t\t}\n\t}\n\n\trender(width: number): string[] {\n\t\treturn this.items.map((item, i) => {\n\t\t\tconst prefix = i === this.selectedIndex ? \"> \" : \"  \";\n\t\t\treturn truncateToWidth(prefix + item, width);\n\t\t});\n\t}\n}\n```\n\n### Handling Line Width\n\nUse the provided utilities to ensure lines fit:\n\n```typescript\nimport { visibleWidth, truncateToWidth } from \"@aryee337/aery-tui\";\nimport type { Component } from \"@aryee337/aery-tui\";\n\nclass MyComponent implements Component {\n\tprivate text: string;\n\n\tconstructor(text: string) {\n\t\tthis.text = text;\n\t}\n\n\trender(width: number): string[] {\n\t\t// Option 1: Truncate long lines\n\t\treturn [truncateToWidth(this.text, width)];\n\n\t\t// Option 2: Check and pad to exact width\n\t\tconst line = this.text;\n\t\tconst visible = visibleWidth(line);\n\t\tif (visible > width) {\n\t\t\treturn [truncateToWidth(line, width)];\n\t\t}\n\t\t// Pad to exact width (optional, for backgrounds)\n\t\treturn [line + \" \".repeat(width - visible)];\n\t}\n}\n```\n\n### ANSI Code Considerations\n\n`visibleWidth()`, `truncateToWidth()`, and `wrapTextWithAnsi()` correctly handle ANSI escape codes:\n\n- `visibleWidth()` ignores ANSI codes when calculating width (via `Bun.stringWidth`)\n- `truncateToWidth()` preserves ANSI codes and properly closes them when truncating\n- `wrapTextWithAnsi()` preserves ANSI codes while word-wrapping and trimming line ends\n\n```typescript\nimport chalk from \"chalk\";\n\nconst styled = chalk.red(\"Hello\") + \" \" + chalk.blue(\"World\");\nconst width = visibleWidth(styled); // 11 (not counting ANSI codes)\nconst truncated = truncateToWidth(styled, 8); // Red \"Hello\" + \" W...\" with proper reset\n```\n\n### Caching\n\nFor performance, components should cache their rendered output and only re-render when necessary:\n\n```typescript\nclass CachedComponent implements Component {\n\tprivate text: string;\n\tprivate cachedWidth?: number;\n\tprivate cachedLines?: string[];\n\n\trender(width: number): string[] {\n\t\tif (this.cachedLines && this.cachedWidth === width) {\n\t\t\treturn this.cachedLines;\n\t\t}\n\n\t\tconst lines = [truncateToWidth(this.text, width)];\n\n\t\tthis.cachedWidth = width;\n\t\tthis.cachedLines = lines;\n\t\treturn lines;\n\t}\n\n\tinvalidate(): void {\n\t\tthis.cachedWidth = undefined;\n\t\tthis.cachedLines = undefined;\n\t}\n}\n```\n\n## Example\n\nSee `test/chat-simple.ts` for a complete chat interface example with:\n\n- Markdown messages with custom background colors\n- Loading spinner during responses\n- Editor with autocomplete and slash commands\n- Spacers between messages\n\nRun it:\n\n```bash\nnpx tsx test/chat-simple.ts\n```\n\n## Development\n\n```bash\n# Install dependencies (from monorepo root)\nnpm install\n\n# Run type checking\nnpm run check\n\n# Run the demo\nnpx tsx test/chat-simple.ts\n```\n","readmeFilename":"README.md"}