{"_id":"@bunli/tui","_rev":"15-4f2388f6cb1a96f967ae793ca78379d5","name":"@bunli/tui","dist-tags":{"latest":"0.6.0"},"versions":{"0.2.0":{"name":"@bunli/tui","version":"0.2.0","keywords":["bunli","cli","tui","terminal","ui","interactive"],"author":"Bunli Contributors","license":"MIT","_id":"@bunli/tui@0.2.0","maintainers":[{"name":"bunli","email":"bunli@aryalabs.ai"}],"dist":{"shasum":"f290310f410fd4600b0d914b7614a563d2ed165e","tarball":"https://registry.npmjs.org/@bunli/tui/-/tui-0.2.0.tgz","fileCount":29,"integrity":"sha512-VU6i1lfR5RsschX9mHMLUgHkStYohygRHkldzTRNCjvBg0pCfD4MFJyLKe6DrnWg1+P8uB1NqXVWu9CViVu1mQ==","signatures":[{"sig":"MEQCIApiVE1pkzuBl3FUGGyArDJorTUq8bOTXtJkguio5UEFAiB4oLuXCUQGFOeEszXTXdu9FjqRNIKgJ6HHdn5BHu9V1w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":22815},"main":"src/index.ts","type":"module","shasum":"f290310f410fd4600b0d914b7614a563d2ed165e","exports":{".":{"types":"./dist/index.d.ts","default":"./src/index.ts"}},"scripts":{"test":"bun test","build":"bun run scripts/build.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"bunli","email":"bunli@aryalabs.ai"},"_integrity":"sha512-VU6i1lfR5RsschX9mHMLUgHkStYohygRHkldzTRNCjvBg0pCfD4MFJyLKe6DrnWg1+P8uB1NqXVWu9CViVu1mQ==","_npmVersion":"10.8.3","description":"Terminal User Interface plugin for Bunli CLI framework","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@bunli/core":"0.2.0","@opentui/core":"^0.1.27","@opentui/react":"^0.1.27"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.0","@types/bun":"latest","typescript":"^5.3.3","@types/react":"^19.2.2"},"peerDependencies":{"react":"^19.2.0","@opentui/core":"^0.1.27"},"_npmOperationalInternal":{"tmp":"tmp/tui_0.2.0_1761299621102_0.9920343866308867","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@bunli/tui","version":"0.3.0","keywords":["bunli","cli","tui","terminal","ui","interactive"],"author":"Bunli Contributors","license":"MIT","_id":"@bunli/tui@0.3.0","maintainers":[{"name":"bunli","email":"bunli@aryalabs.ai"}],"dist":{"shasum":"9fe0abc80c9364979996b1f707ead538536a87a9","tarball":"https://registry.npmjs.org/@bunli/tui/-/tui-0.3.0.tgz","fileCount":29,"integrity":"sha512-SLOSE2TLqPvyZORGjnb08SWb9Pf86+aASHh/NukaP9/WpEIE501htsDF4Ui/JKBONG7V9n3gV8JULP4+ev790A==","signatures":[{"sig":"MEUCIHTzax4hkd8VwpGtk4y1yl6yh7J28QrbYDn6tWaZz4JDAiEAopdUDmItaIHICN/GpBz5C5Z9psadH0rliC9VmPhliag=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23039},"main":"src/index.ts","type":"module","shasum":"9fe0abc80c9364979996b1f707ead538536a87a9","exports":{".":{"types":"./dist/index.d.ts","default":"./src/index.ts"}},"scripts":{"test":"bun test","build":"bun run scripts/build.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"bunli","email":"bunli@aryalabs.ai"},"_integrity":"sha512-SLOSE2TLqPvyZORGjnb08SWb9Pf86+aASHh/NukaP9/WpEIE501htsDF4Ui/JKBONG7V9n3gV8JULP4+ev790A==","_npmVersion":"10.8.3","description":"Terminal User Interface plugin for Bunli CLI framework","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@bunli/core":"0.4.0","@opentui/core":"^0.1.75","@opentui/react":"^0.1.75"},"_hasShrinkwrap":false,"devDependencies":{"react":"19.2.4","@types/bun":"1.3.7","typescript":"^5.8.3","@types/react":"19.2.10"},"peerDependencies":{"react":"^19.2.4","@opentui/core":"^0.1.75"},"_npmOperationalInternal":{"tmp":"tmp/tui_0.3.0_1769765882610_0.8080326289621111","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@bunli/tui","version":"0.3.1","keywords":["bunli","cli","tui","terminal","ui","interactive"],"author":{"name":"Bunli Contributors"},"license":"MIT","_id":"@bunli/tui@0.3.1","maintainers":[{"name":"bunli","email":"bunli@aryalabs.ai"}],"dist":{"shasum":"dde846aeff75d2ce571e1b23b8767b60fffbba06","tarball":"https://registry.npmjs.org/@bunli/tui/-/tui-0.3.1.tgz","fileCount":29,"integrity":"sha512-p/+GkwRLuVCc3nNfjEd+XJ0cc07/cEDSgOiRKhSlKS2pC0qsJLIouI2gjdDs6A9Uo5KiCCqdqcPKcQ66hWugQg==","signatures":[{"sig":"MEQCIH76JfZTg1j5GPA4RuI/pfmeJGuDVFPoy3sFDNG3dkTiAiAjtQIr7Po4m7eBkOB68k7hMpNkUGdxzfsh2N7PApX/EQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23045},"main":"src/index.ts","type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./src/index.ts"}},"gitHead":"b9c4271413d4211e22075f801253c01700dad753","scripts":{"test":"bun test","build":"bun run scripts/build.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"bunli","email":"bunli@aryalabs.ai"},"_npmVersion":"10.8.2","description":"Terminal User Interface plugin for Bunli CLI framework","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@bunli/core":"workspace:*","@opentui/core":"^0.1.75","@opentui/react":"^0.1.75"},"_hasShrinkwrap":false,"devDependencies":{"react":"19.2.4","@types/bun":"1.3.7","typescript":"^5.8.3","@types/react":"19.2.10"},"peerDependencies":{"react":"^19.2.4","@opentui/core":"^0.1.75"},"_npmOperationalInternal":{"tmp":"tmp/tui_0.3.1_1770401380941_0.3882787599510107","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@bunli/tui","version":"0.3.2","keywords":["bunli","cli","tui","terminal","ui","interactive"],"author":{"name":"Bunli Contributors"},"license":"MIT","_id":"@bunli/tui@0.3.2","maintainers":[{"name":"bunli","email":"bunli@aryalabs.ai"}],"dist":{"shasum":"fbbdf2c0164f2e1922c87699cb10f35f9872e986","tarball":"https://registry.npmjs.org/@bunli/tui/-/tui-0.3.2.tgz","fileCount":29,"integrity":"sha512-Qhr5ycHrrzECCch3uT9eWmxQ8JZPj9Hj8h55DI1QjOzmAzsO6I/8c0+HwMUu8m6yRtH+eeI5LFqmLOGNvpo0qw==","signatures":[{"sig":"MEQCIFCvOOiN9Iq3jDKMdTYIvRsHkGS7hc5mFHFgMHx9kkssAiALHARbdEz7vJjpqiJD5tns/B4tljwILRY5k1uyxlgsLw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23039},"main":"src/index.ts","type":"module","_from":"file:/home/runner/work/_temp/bunli-pack-e60flv/bunli-tui-0.3.2.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./src/index.ts"}},"scripts":{"test":"bun test","build":"bun run scripts/build.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"bunli","email":"bunli@aryalabs.ai"},"_resolved":"/home/runner/work/_temp/bunli-pack-e60flv/bunli-tui-0.3.2.tgz","_integrity":"sha512-Qhr5ycHrrzECCch3uT9eWmxQ8JZPj9Hj8h55DI1QjOzmAzsO6I/8c0+HwMUu8m6yRtH+eeI5LFqmLOGNvpo0qw==","_npmVersion":"10.8.2","description":"Terminal User Interface plugin for Bunli CLI framework","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@bunli/core":"0.5.4","@opentui/core":"^0.1.75","@opentui/react":"^0.1.75"},"_hasShrinkwrap":false,"devDependencies":{"react":"19.2.4","@types/bun":"1.3.7","typescript":"^5.8.3","@types/react":"19.2.10"},"peerDependencies":{"react":"^19.2.4","@opentui/core":"^0.1.75"},"_npmOperationalInternal":{"tmp":"tmp/tui_0.3.2_1770407762185_0.8947850513331299","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"@bunli/tui","version":"0.3.3","keywords":["bunli","cli","tui","terminal","ui","interactive"],"author":{"name":"Bunli Contributors"},"license":"MIT","_id":"@bunli/tui@0.3.3","maintainers":[{"name":"bunli","email":"bunli@aryalabs.ai"}],"dist":{"shasum":"fa44659581c1f035dd0902743e1a5fcf6e14394f","tarball":"https://registry.npmjs.org/@bunli/tui/-/tui-0.3.3.tgz","fileCount":32,"integrity":"sha512-KjmlmFDeeJ7QBujyXjPej3cdKIaV0kfSAIVUaY7yYs+pbiqis4UUOm1SkmWp2xUZYXtitdzku5vgaeNGTcoPjg==","signatures":[{"sig":"MEUCIQC4C2MdJfSViXW1iCle26EWHF3Om48KsddIfJFfTgsr0wIgA5Ok/XHOgxYSbY9ozE/QvHXoAmYOBPnkbNIGfnjFzoA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26317},"main":"src/index.ts","type":"module","_from":"file:/home/runner/work/_temp/bunli-pack-FLKiVI/bunli-tui-0.3.3.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./src/index.ts"}},"scripts":{"test":"bun test","build":"bun run scripts/build.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"bunli","email":"bunli@aryalabs.ai"},"_resolved":"/home/runner/work/_temp/bunli-pack-FLKiVI/bunli-tui-0.3.3.tgz","_integrity":"sha512-KjmlmFDeeJ7QBujyXjPej3cdKIaV0kfSAIVUaY7yYs+pbiqis4UUOm1SkmWp2xUZYXtitdzku5vgaeNGTcoPjg==","_npmVersion":"10.8.2","description":"Terminal User Interface plugin for Bunli CLI framework","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@bunli/core":"0.5.5","@opentui/core":"^0.1.75","@opentui/react":"^0.1.75"},"_hasShrinkwrap":false,"devDependencies":{"react":"19.2.4","@types/bun":"1.3.7","typescript":"^5.8.3","@types/react":"19.2.10"},"peerDependencies":{"react":"^19.2.4","@opentui/core":"^0.1.75"},"_npmOperationalInternal":{"tmp":"tmp/tui_0.3.3_1771994542491_0.6611227183905066","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"@bunli/tui","version":"0.3.4","keywords":["bunli","cli","tui","terminal","ui","interactive"],"author":{"name":"Bunli Contributors"},"license":"MIT","_id":"@bunli/tui@0.3.4","maintainers":[{"name":"bunli","email":"bunli@aryalabs.ai"}],"dist":{"shasum":"e82de8685d6024f8189c18dd7da2ff177b53e92c","tarball":"https://registry.npmjs.org/@bunli/tui/-/tui-0.3.4.tgz","fileCount":32,"integrity":"sha512-l9JXI7PK7LWR6siMYymTZZbFMJCKr3lkqi0AHBkCaoEhR7IHJOjUa5CY8Ya1StHBPfA80BowHJyRAK/NpBHfEA==","signatures":[{"sig":"MEYCIQDjET8SiroLSlYAY1O/VBz6hW9HxDgYBGpmYBZaKSpWkgIhAMpcCtTGWjTakUjpy+0uPlk5lzDjB+GJLwfbkWE4gLjV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26317},"main":"src/index.ts","type":"module","_from":"file:/home/runner/work/_temp/bunli-pack-mR6z0t/bunli-tui-0.3.4.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./src/index.ts"}},"scripts":{"test":"bun test","build":"bun run scripts/build.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"bunli","email":"bunli@aryalabs.ai"},"_resolved":"/home/runner/work/_temp/bunli-pack-mR6z0t/bunli-tui-0.3.4.tgz","_integrity":"sha512-l9JXI7PK7LWR6siMYymTZZbFMJCKr3lkqi0AHBkCaoEhR7IHJOjUa5CY8Ya1StHBPfA80BowHJyRAK/NpBHfEA==","_npmVersion":"10.8.2","description":"Terminal User Interface plugin for Bunli CLI framework","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@bunli/core":"0.5.6","@opentui/core":"^0.1.75","@opentui/react":"^0.1.75"},"_hasShrinkwrap":false,"devDependencies":{"react":"19.2.4","@types/bun":"1.3.7","typescript":"^5.8.3","@types/react":"19.2.10"},"peerDependencies":{"react":"^19.2.4","@opentui/core":"^0.1.75"},"_npmOperationalInternal":{"tmp":"tmp/tui_0.3.4_1772001869759_0.7610446076917763","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"@bunli/tui","version":"0.3.5","keywords":["bunli","cli","tui","terminal","ui","interactive"],"author":{"name":"Bunli Contributors"},"license":"MIT","_id":"@bunli/tui@0.3.5","maintainers":[{"name":"bunli","email":"bunli@aryalabs.ai"}],"dist":{"shasum":"659bb207b3d2019cec6b6d990cb8b67c77bc8a9c","tarball":"https://registry.npmjs.org/@bunli/tui/-/tui-0.3.5.tgz","fileCount":32,"integrity":"sha512-mkPLinnnvq4EaYNKLiFQu8Y9pMkoDHOhCs+EksmGf1M0wGQSRwvK/5x+W2s2K8gMq1TdB2yLaOqlP2vjwGSq2Q==","signatures":[{"sig":"MEQCIARcI8cplwzIUshE6H5GNvaLF9tj94iqkxHO+E7JIXs4AiB71tkJCnU98Cw2eAp0fSex8yntTRyZdVuepfAuk7splQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26317},"main":"src/index.ts","type":"module","_from":"file:/home/runner/work/_temp/bunli-pack-Rs9dPu/bunli-tui-0.3.5.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./src/index.ts"}},"scripts":{"test":"bun test","build":"bun run scripts/build.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"bunli","email":"bunli@aryalabs.ai"},"_resolved":"/home/runner/work/_temp/bunli-pack-Rs9dPu/bunli-tui-0.3.5.tgz","_integrity":"sha512-mkPLinnnvq4EaYNKLiFQu8Y9pMkoDHOhCs+EksmGf1M0wGQSRwvK/5x+W2s2K8gMq1TdB2yLaOqlP2vjwGSq2Q==","_npmVersion":"10.8.2","description":"Terminal User Interface plugin for Bunli CLI framework","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@bunli/core":"0.5.7","@opentui/core":"^0.1.75","@opentui/react":"^0.1.75"},"_hasShrinkwrap":false,"devDependencies":{"react":"19.2.4","@types/bun":"1.3.7","typescript":"^5.8.3","@types/react":"19.2.10"},"peerDependencies":{"react":"^19.2.4","@opentui/core":"^0.1.75"},"_npmOperationalInternal":{"tmp":"tmp/tui_0.3.5_1772002782405_0.35219319350508393","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@bunli/tui","version":"0.4.0","keywords":["bunli","cli","tui","terminal","ui","interactive"],"author":{"name":"Bunli Contributors"},"license":"MIT","_id":"@bunli/tui@0.4.0","maintainers":[{"name":"bunli","email":"bunli@aryalabs.ai"}],"dist":{"shasum":"02f2d4442f22aaefa542d5a6182e314e5286ba2d","tarball":"https://registry.npmjs.org/@bunli/tui/-/tui-0.4.0.tgz","fileCount":32,"integrity":"sha512-1Jp1zKSnm7rKRkHxgz2lEFLZf8Z74HY0PLHZxwV2Tp9gOJraFPL5hMFjckvyJuPqiugot/UqfxmGEDsn/4ubUA==","signatures":[{"sig":"MEUCIH2mYMlNNFltKwdqwVOomqiF45vKRHfju60Nbk/yRvviAiEAmH9W9hb84DlyNWF0lnddFtojGNAaHCZfoWpcANHXWSo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26317},"main":"src/index.ts","type":"module","_from":"file:/home/runner/work/_temp/bunli-pack-VDYB15/bunli-tui-0.4.0.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./src/index.ts"}},"scripts":{"test":"bun test","build":"bun run scripts/build.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"bunli","email":"bunli@aryalabs.ai"},"_resolved":"/home/runner/work/_temp/bunli-pack-VDYB15/bunli-tui-0.4.0.tgz","_integrity":"sha512-1Jp1zKSnm7rKRkHxgz2lEFLZf8Z74HY0PLHZxwV2Tp9gOJraFPL5hMFjckvyJuPqiugot/UqfxmGEDsn/4ubUA==","_npmVersion":"10.8.2","description":"Terminal User Interface plugin for Bunli CLI framework","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@bunli/core":"0.6.0","@opentui/core":"^0.1.75","@opentui/react":"^0.1.75"},"_hasShrinkwrap":false,"devDependencies":{"react":"19.2.4","@types/bun":"1.3.7","typescript":"^5.8.3","@types/react":"19.2.10"},"peerDependencies":{"react":"^19.2.4","@opentui/core":"^0.1.75"},"_npmOperationalInternal":{"tmp":"tmp/tui_0.4.0_1772144623005_0.39795092340314553","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@bunli/tui","version":"0.4.1","keywords":["bunli","cli","tui","terminal","ui","interactive"],"author":{"name":"Bunli Contributors"},"license":"MIT","_id":"@bunli/tui@0.4.1","maintainers":[{"name":"bunli","email":"bunli@aryalabs.ai"}],"dist":{"shasum":"3124feec36166730e841981bc7260773d929a308","tarball":"https://registry.npmjs.org/@bunli/tui/-/tui-0.4.1.tgz","fileCount":32,"integrity":"sha512-fs7OXhE3wesnIM2I3jCNZLC4PKsAEg7EG0AUrMS/1UWleCnULbhcqZ7JuGBRvqhtO92BejJwoPogqNYRZAgi0A==","signatures":[{"sig":"MEQCIH7YoR+qYJ+G4wC4U1nusdYiAdFtmaoS91KyBuMfpHeKAiAdXUjpZFa/jZEkQ9PVVPqiuT22wV0p8P2sbr5vbn9nog==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26319},"main":"src/index.ts","type":"module","_from":"file:/home/runner/work/_temp/bunli-pack-Hqt4Ou/bunli-tui-0.4.1.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./src/index.ts"}},"scripts":{"test":"bun test","build":"bun run scripts/build.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"bunli","email":"bunli@aryalabs.ai"},"_resolved":"/home/runner/work/_temp/bunli-pack-Hqt4Ou/bunli-tui-0.4.1.tgz","_integrity":"sha512-fs7OXhE3wesnIM2I3jCNZLC4PKsAEg7EG0AUrMS/1UWleCnULbhcqZ7JuGBRvqhtO92BejJwoPogqNYRZAgi0A==","_npmVersion":"10.8.2","description":"Terminal User Interface plugin for Bunli CLI framework","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@bunli/core":"^0.6.1","@opentui/core":"^0.1.75","@opentui/react":"^0.1.75"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.4","@types/bun":"1.3.9","typescript":"^5.8.3","@types/react":"19.2.10"},"peerDependencies":{"react":"^19.2.4","@opentui/core":"^0.1.75"},"_npmOperationalInternal":{"tmp":"tmp/tui_0.4.1_1772178839984_0.6252544305611889","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@bunli/tui","version":"0.4.2","keywords":["bunli","cli","tui","terminal","ui","interactive"],"author":{"name":"Bunli Contributors"},"license":"MIT","_id":"@bunli/tui@0.4.2","maintainers":[{"name":"bunli","email":"bunli@aryalabs.ai"}],"dist":{"shasum":"715c7695935acedee60238ccb921dc01960931eb","tarball":"https://registry.npmjs.org/@bunli/tui/-/tui-0.4.2.tgz","fileCount":32,"integrity":"sha512-dcBxgRubEnjEebSh9cWDkeF0nCzqMIdso9Yd6ywylHISytSytF55RUc+uHSq3kmV2rSOVUUSIrYwnw6CTc4d7g==","signatures":[{"sig":"MEUCIFmXbw0GB0NyLezFP1wsAa9cH/fN1liYWKu2OhcEyiTDAiEAg0NzRNAM67ryra+FFtSnJQhVF9nyo4rNVmMxtFvoGCQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26319},"main":"src/index.ts","type":"module","_from":"file:/home/runner/work/_temp/bunli-pack-PEnvt0/bunli-tui-0.4.2.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./src/index.ts"}},"scripts":{"test":"bun test","build":"bun run scripts/build.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"bunli","email":"bunli@aryalabs.ai"},"_resolved":"/home/runner/work/_temp/bunli-pack-PEnvt0/bunli-tui-0.4.2.tgz","_integrity":"sha512-dcBxgRubEnjEebSh9cWDkeF0nCzqMIdso9Yd6ywylHISytSytF55RUc+uHSq3kmV2rSOVUUSIrYwnw6CTc4d7g==","_npmVersion":"10.8.2","description":"Terminal User Interface plugin for Bunli CLI framework","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@bunli/core":"^0.7.0","@opentui/core":"^0.1.75","@opentui/react":"^0.1.75"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.4","@types/bun":"1.3.9","typescript":"^5.8.3","@types/react":"19.2.10"},"peerDependencies":{"react":"^19.2.4","@opentui/core":"^0.1.75"},"_npmOperationalInternal":{"tmp":"tmp/tui_0.4.2_1772295636770_0.37706597433946754","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@bunli/tui","version":"0.5.0","keywords":["bunli","cli","tui","terminal","ui","interactive"],"author":{"name":"Bunli Contributors"},"license":"MIT","_id":"@bunli/tui@0.5.0","maintainers":[{"name":"bunli","email":"bunli@aryalabs.ai"}],"dist":{"shasum":"c8a8d6795c89f6a10f36b2e8d87de2a55370e3b7","tarball":"https://registry.npmjs.org/@bunli/tui/-/tui-0.5.0.tgz","fileCount":82,"integrity":"sha512-8fbsGR/9pdcRn6BRrOrHgZoLb9MvS0zRSsLciPvnEKzEQ61aHHUceSZv6vXKoTWxWFuhK1Bu9OwjHOs/n1M27w==","signatures":[{"sig":"MEUCIGwss8WLOOEhbncTNrv9aW6ZkbMa4YSFF8mgm4qT1NsaAiEAp8/Byv2IF99trNjWxZ19uTRV7RoILvDqDBnoNlao3Ko=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":141925},"main":"src/index.ts","type":"module","_from":"file:/home/runner/work/_temp/bunli-pack-cN7Imq/bunli-tui-0.5.0.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./src/index.ts"},"./charts":{"types":"./dist/charts/index.d.ts","default":"./src/charts/index.tsx"},"./inline":{"types":"./dist/inline/index.d.ts","default":"./src/inline/index.ts"},"./interactive":{"types":"./dist/interactive/index.d.ts","default":"./src/interactive/index.tsx"},"./utils/sync-batcher":{"types":"./dist/utils/sync-batcher.d.ts","default":"./src/utils/sync-batcher.ts"}},"scripts":{"test":"bun test","build":"bun run scripts/build.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"bunli","email":"bunli@aryalabs.ai"},"_resolved":"/home/runner/work/_temp/bunli-pack-cN7Imq/bunli-tui-0.5.0.tgz","_integrity":"sha512-8fbsGR/9pdcRn6BRrOrHgZoLb9MvS0zRSsLciPvnEKzEQ61aHHUceSZv6vXKoTWxWFuhK1Bu9OwjHOs/n1M27w==","_npmVersion":"10.8.2","description":"Terminal User Interface plugin for Bunli CLI framework","directories":{},"_nodeVersion":"20.20.0","dependencies":{"debug":"^4.4.3","@opentui/core":"^0.1.84","@bunli/runtime":"^0.1.0","@opentui/react":"^0.1.84","@standard-schema/spec":"^1.1.0","@standard-schema/utils":"^0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.4","@types/bun":"1.3.9","typescript":"^5.8.3","@types/react":"19.2.10"},"peerDependencies":{"react":"^19.2.4","@opentui/core":"^0.1.75"},"_npmOperationalInternal":{"tmp":"tmp/tui_0.5.0_1772565965032_0.8840733203739641","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@bunli/tui","version":"0.5.1","keywords":["bunli","cli","tui","terminal","ui","interactive"],"author":{"name":"Bunli Contributors"},"license":"MIT","_id":"@bunli/tui@0.5.1","maintainers":[{"name":"bunli","email":"bunli@aryalabs.ai"}],"dist":{"shasum":"83c925075e86060bb279303b987911522e683d60","tarball":"https://registry.npmjs.org/@bunli/tui/-/tui-0.5.1.tgz","fileCount":82,"integrity":"sha512-KJC+p+WHU9RvproH7FHen5k9UmH8AheHtezYiohC+S0iI3NT43d73G3sHFUUbsIHWjYgFDwH4BF+hg1IkfMoeQ==","signatures":[{"sig":"MEUCIBIcTtKa56GEzYzgaHWwE1xR/TDDs4dS5BESRL7/pHodAiEAgkdycVpoFXcwFcVRr4qXluhSvdsmx374PXQDEtjc8jU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140636},"main":"src/index.ts","type":"module","_from":"file:/home/runner/work/_temp/bunli-pack-QFdw50/bunli-tui-0.5.1.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./src/index.ts"},"./charts":{"types":"./dist/charts/index.d.ts","default":"./src/charts/index.tsx"},"./inline":{"types":"./dist/inline/index.d.ts","default":"./src/inline/index.ts"},"./interactive":{"types":"./dist/interactive/index.d.ts","default":"./src/interactive/index.tsx"},"./utils/sync-batcher":{"types":"./dist/utils/sync-batcher.d.ts","default":"./src/utils/sync-batcher.ts"}},"scripts":{"test":"bun test","build":"bun run scripts/build.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"bunli","email":"bunli@aryalabs.ai"},"_resolved":"/home/runner/work/_temp/bunli-pack-QFdw50/bunli-tui-0.5.1.tgz","_integrity":"sha512-KJC+p+WHU9RvproH7FHen5k9UmH8AheHtezYiohC+S0iI3NT43d73G3sHFUUbsIHWjYgFDwH4BF+hg1IkfMoeQ==","_npmVersion":"10.8.2","description":"Terminal User Interface plugin for Bunli CLI framework","directories":{},"_nodeVersion":"20.20.0","dependencies":{"debug":"^4.4.3","@opentui/core":"^0.1.84","@bunli/runtime":"^0.1.1","@opentui/react":"^0.1.84","@standard-schema/spec":"^1.1.0","@standard-schema/utils":"^0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.4","@types/bun":"1.3.9","typescript":"^5.8.3","@types/react":"19.2.10"},"peerDependencies":{"react":"^19.2.4","@opentui/core":"^0.1.75"},"_npmOperationalInternal":{"tmp":"tmp/tui_0.5.1_1772649733463_0.06294161031218848","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@bunli/tui","version":"0.5.2","keywords":["bunli","cli","tui","terminal","ui","interactive"],"author":{"name":"Bunli Contributors"},"license":"MIT","_id":"@bunli/tui@0.5.2","maintainers":[{"name":"bunli","email":"bunli@aryalabs.ai"}],"dist":{"shasum":"c17dcb96def7011d50b8f66a07032a5def7c3457","tarball":"https://registry.npmjs.org/@bunli/tui/-/tui-0.5.2.tgz","fileCount":82,"integrity":"sha512-yufuPe0QzV2qglBbNrwCEfVNeATYb9AEtWiqBFII0m7f0zYSxvu/Qit4r2LlmdhQAU2DhMvtFF1ii8sVxgt7ZQ==","signatures":[{"sig":"MEUCIH8FQRnltI+fr+QWzv0denj0SOxJfnYGWhIqIKWsxtZUAiEAvnMvGds15PBd2ce/e1NUj1Wke5g980677xzRgRa13yI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":140636},"main":"src/index.ts","type":"module","_from":"file:/home/runner/work/_temp/bunli-pack-QajLjg/bunli-tui-0.5.2.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./src/index.ts"},"./charts":{"types":"./dist/charts/index.d.ts","default":"./src/charts/index.tsx"},"./inline":{"types":"./dist/inline/index.d.ts","default":"./src/inline/index.ts"},"./interactive":{"types":"./dist/interactive/index.d.ts","default":"./src/interactive/index.tsx"},"./utils/sync-batcher":{"types":"./dist/utils/sync-batcher.d.ts","default":"./src/utils/sync-batcher.ts"}},"scripts":{"test":"bun test","build":"bun run scripts/build.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"bunli","email":"bunli@aryalabs.ai"},"_resolved":"/home/runner/work/_temp/bunli-pack-QajLjg/bunli-tui-0.5.2.tgz","_integrity":"sha512-yufuPe0QzV2qglBbNrwCEfVNeATYb9AEtWiqBFII0m7f0zYSxvu/Qit4r2LlmdhQAU2DhMvtFF1ii8sVxgt7ZQ==","_npmVersion":"10.8.2","description":"Terminal User Interface plugin for Bunli CLI framework","directories":{},"_nodeVersion":"20.20.0","dependencies":{"debug":"^4.4.3","@opentui/core":"^0.1.84","@bunli/runtime":"^0.2.0","@opentui/react":"^0.1.84","@standard-schema/spec":"^1.1.0","@standard-schema/utils":"^0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.4","@types/bun":"1.3.9","typescript":"^5.8.3","@types/react":"19.2.10"},"peerDependencies":{"react":"^19.2.4","@opentui/core":"^0.1.75"},"_npmOperationalInternal":{"tmp":"tmp/tui_0.5.2_1772653872891_0.7289367592595173","host":"s3://npm-registry-packages-npm-production"}},"0.5.3":{"name":"@bunli/tui","version":"0.5.3","keywords":["bunli","cli","tui","terminal","ui","interactive"],"author":{"name":"Bunli Contributors"},"license":"MIT","_id":"@bunli/tui@0.5.3","maintainers":[{"name":"bunli","email":"bunli@aryalabs.ai"}],"dist":{"shasum":"feb8e0d9b311b571d750b44154668460af77a15b","tarball":"https://registry.npmjs.org/@bunli/tui/-/tui-0.5.3.tgz","fileCount":88,"integrity":"sha512-mx+7Ut6H+ACP/FA96EMKiVy+7j0mYZI47Qrscw8+GVcHrJHcKtMEx6dcHR7ZFITYg6wsfs2cHG83FWAGSe9MEw==","signatures":[{"sig":"MEUCIQCwB9Ne6lRB+4+wZ2dSo/2KgyfB6hpe1zaptVPl4YdVywIgZCAA1zodZIcSQhDlV7dtNOjsQTvug7q9/Ys1voCxgrQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":166704},"main":"src/index.ts","type":"module","_from":"file:/home/runner/work/_temp/bunli-pack-hBvVmJ/bunli-tui-0.5.3.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./src/index.ts"},"./charts":{"types":"./dist/charts/index.d.ts","default":"./src/charts/index.tsx"},"./inline":{"types":"./dist/inline/index.d.ts","default":"./src/inline/index.ts"},"./interactive":{"types":"./dist/interactive/index.d.ts","default":"./src/interactive/index.tsx"},"./utils/sync-batcher":{"types":"./dist/utils/sync-batcher.d.ts","default":"./src/utils/sync-batcher.ts"}},"scripts":{"test":"bun test","build":"bun run scripts/build.ts","typecheck":"tsc --noEmit"},"_npmUser":{"name":"bunli","email":"bunli@aryalabs.ai"},"_resolved":"/home/runner/work/_temp/bunli-pack-hBvVmJ/bunli-tui-0.5.3.tgz","_integrity":"sha512-mx+7Ut6H+ACP/FA96EMKiVy+7j0mYZI47Qrscw8+GVcHrJHcKtMEx6dcHR7ZFITYg6wsfs2cHG83FWAGSe9MEw==","_npmVersion":"10.8.2","description":"Terminal User Interface plugin for Bunli CLI framework","directories":{},"_nodeVersion":"20.20.0","dependencies":{"debug":"^4.4.3","@opentui/core":"^0.1.84","@bunli/runtime":"^0.2.0","@opentui/react":"^0.1.84","@standard-schema/spec":"^1.1.0","@standard-schema/utils":"^0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"react":"^19.2.4","@types/bun":"1.3.9","typescript":"^5.8.3","@types/react":"19.2.10"},"peerDependencies":{"react":"^19.2.4","@opentui/core":"^0.1.75"},"_npmOperationalInternal":{"tmp":"tmp/tui_0.5.3_1772920681890_0.5456476425145063","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@bunli/tui","version":"0.6.0","description":"Terminal User Interface plugin for Bunli CLI framework","type":"module","main":"src/index.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./src/index.ts"},"./inline":{"types":"./dist/inline/index.d.ts","default":"./src/inline/index.ts"},"./interactive":{"types":"./dist/interactive/index.d.ts","default":"./src/interactive/index.tsx"},"./charts":{"types":"./dist/charts/index.d.ts","default":"./src/charts/index.tsx"},"./utils/sync-batcher":{"types":"./dist/utils/sync-batcher.d.ts","default":"./src/utils/sync-batcher.ts"}},"scripts":{"build":"bun run scripts/build.ts && tsgo","test":"bun test","typecheck":"tsgo --noEmit"},"dependencies":{"@bunli/runtime":"^0.3.0","@opentui/core":"^0.1.90","@opentui/react":"^0.1.90","@standard-schema/spec":"^1.1.0","@standard-schema/utils":"^0.3.0","debug":"^4.4.3","fuse.js":"^7.1.0"},"devDependencies":{"@tsconfig/bun":"1.0.10","@types/bun":"1.3.10","@types/react":"19.2.14","react":"^19.2.4","typescript":"^6.0.2"},"peerDependencies":{"@opentui/core":"^0.1.90","react":"^19.2.4"},"keywords":["bunli","cli","tui","terminal","ui","interactive"],"author":{"name":"Bunli Contributors"},"license":"MIT","_id":"@bunli/tui@0.6.0","_integrity":"sha512-vz+xOO1iXFd5J8mWv3zh6oydnR+M1ZZaejlTd0kMJi3cOxNJPDGQNjfkMlu6CmNMaJVFhNgB9auoO8Csz0VSrw==","_resolved":"/home/runner/work/_temp/bunli-pack-Dz8CSL/bunli-tui-0.6.0.tgz","_from":"file:/home/runner/work/_temp/bunli-pack-Dz8CSL/bunli-tui-0.6.0.tgz","_nodeVersion":"20.20.1","_npmVersion":"10.8.2","dist":{"integrity":"sha512-vz+xOO1iXFd5J8mWv3zh6oydnR+M1ZZaejlTd0kMJi3cOxNJPDGQNjfkMlu6CmNMaJVFhNgB9auoO8Csz0VSrw==","shasum":"69b72f2ac77b95811a1bce4cae5ecef529262607","tarball":"https://registry.npmjs.org/@bunli/tui/-/tui-0.6.0.tgz","fileCount":161,"unpackedSize":278503,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCDa9EoPZhD+miuieUM+xylLfGs9VBa2o8G2cd7xjeFtAIhAP4cLdA4FdYgGixuZBCq8G7T7EWZZQmgk9uvvsmzsgcv"}]},"_npmUser":{"name":"bunli","email":"bunli@aryalabs.ai"},"directories":{},"maintainers":[{"name":"bunli","email":"bunli@aryalabs.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/tui_0.6.0_1774654003896_0.4429938045447095"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-24T09:53:41.015Z","modified":"2026-03-27T23:26:44.142Z","0.2.0":"2025-10-24T09:53:41.343Z","0.3.0":"2026-01-30T09:38:02.742Z","0.3.1":"2026-02-06T18:09:41.080Z","0.3.2":"2026-02-06T19:56:02.328Z","0.3.3":"2026-02-25T04:42:22.641Z","0.3.4":"2026-02-25T06:44:29.917Z","0.3.5":"2026-02-25T06:59:42.568Z","0.4.0":"2026-02-26T22:23:43.158Z","0.4.1":"2026-02-27T07:54:00.124Z","0.4.2":"2026-02-28T16:20:36.919Z","0.5.0":"2026-03-03T19:26:05.180Z","0.5.1":"2026-03-04T18:42:13.624Z","0.5.2":"2026-03-04T19:51:13.048Z","0.5.3":"2026-03-07T21:58:02.085Z","0.6.0":"2026-03-27T23:26:44.046Z"},"author":{"name":"Bunli Contributors"},"license":"MIT","keywords":["bunli","cli","tui","terminal","ui","interactive"],"description":"Terminal User Interface plugin for Bunli CLI framework","maintainers":[{"name":"bunli","email":"bunli@aryalabs.ai"}],"readme":"# @bunli/tui\n\nA React-based Terminal User Interface library for Bunli CLI framework, powered by OpenTUI's React renderer.\n\n## Features\n\n- **React-based Components**: Build TUIs using familiar React patterns and JSX\n- **Component Library**: Form, layout, feedback, data-display, and chart components for alternate-buffer TUIs\n- **OpenTUI Integration**: Full access to OpenTUI's React hooks and components\n- **Type Safety**: Complete TypeScript support with proper type inference\n- **Animation Support**: Built-in timeline system for smooth animations\n- **Keyboard Handling**: Easy keyboard event management with `useKeyboard`\n- **First-Class TUI Support**: TUI rendering is a first-class feature, not a plugin\n- **Theme System**: Preset themes with token overrides via `ThemeProvider`/`createTheme`\n\n## Installation\n\n```bash\nbun add @bunli/tui react\n```\n\n## Quick Start\n\n```typescript\nimport { createCLI, defineCommand } from '@bunli/core'\n\nconst cli = await createCLI({\n  name: 'my-app',\n  version: '1.0.0'\n})\n\n// Define a command with TUI using the render property\nconst myCommand = defineCommand({\n  name: 'deploy',\n  description: 'Deploy application',\n  render: () => (\n    <box title=\"Deployment\" style={{ border: true, padding: 2 }}>\n      <text>Deploying...</text>\n    </box>\n  ),\n  handler: async () => {\n    // Non-TUI fallback when render is skipped\n    console.log('Deploying application...')\n  }\n})\n\ncli.command(myCommand)\nawait cli.run()\n```\n\nBunli auto-wires the OpenTUI runtime. Runtime/context APIs now come from `@bunli/runtime/app`, prompt/session APIs come from `@bunli/runtime/prompt`, and `@bunli/tui` focuses on UI components and hooks.\n\n### TUI Execution Semantics\n\n- Commands with `render` run in interactive terminals.\n- Non-interactive terminals fall back to `handler` when present.\n- Configure fullscreen flows explicitly with `bufferMode: 'alternate'`.\n\n### Render Lifecycle (Runtime Exit)\n\nCommands that use `render` must eventually call `useRuntime().exit()` (for example on submit/cancel/quit), or the command will not exit.\n\n```typescript\nimport { useRuntime } from '@bunli/runtime/app'\nimport { useKeyboard } from '@bunli/tui'\n\nfunction DeployTUI() {\n  const runtime = useRuntime()\n\n  useKeyboard((key) => {\n    if (key.name === 'q' || (key.ctrl && key.name === 'c')) {\n      runtime.exit()\n    }\n  })\n\n  return <text>Press q to quit</text>\n}\n```\n\n## Buffer Modes (Alternate vs Standard)\n\nOpenTUI can render using either the alternate screen buffer (full-screen TUI) or the standard terminal buffer (leaves output in scrollback).\n\nConfigure this in `createCLI()` config:\n\n```typescript\nconst cli = await createCLI({\n  name: 'my-app',\n  version: '1.0.0',\n  tui: {\n    renderer: {\n      bufferMode: 'alternate' // or 'standard'\n    }\n  }\n})\n```\n\nNotes:\n- `bufferMode: 'standard'` is the default.\n- Use `bufferMode: 'alternate'` for fullscreen/blocking experiences.\n- Mouse tracking is disabled by default (`useMouse: false`) to avoid leaking raw mouse escape sequences after exit in standard-buffer workflows. Enable explicitly when needed.\n\n## Usage\n\n### Module Split\n\nUse subpath exports depending on mode:\n\n- `@bunli/tui/interactive`: alternate-buffer interactive components.\n- `@bunli/tui/charts`: terminal-native chart primitives.\n- `@bunli/tui`: root export that re-exports shared components/hooks.\n- `@bunli/runtime/app`: runtime lifecycle/context APIs.\n- `@bunli/runtime/prompt`: prompt/session APIs.\n\n### Clack Migration Quick Map\n\nUse this when replacing a clack mental model with Bunli-native APIs:\n\n```typescript\n// clack\n// import { intro, outro, confirm, select, multiselect, log } from '@clack/prompts'\n\n// bunli\n// prompt is provided via handler args by Bunli\n\nprompt.intro('Setup')\nconst confirmed = await prompt.confirm('Continue?', { default: true })\nconst env = await prompt.select('Environment', {\n  options: [\n    { label: 'Development', value: 'dev' },\n    { label: 'Production', value: 'prod' }\n  ]\n})\nconst features = await prompt.multiselect('Features', {\n  options: [\n    { label: 'Testing', value: 'testing' },\n    { label: 'Docker', value: 'docker' }\n  ],\n  initialValues: ['testing']\n})\nprompt.log.success(`Selected ${env}`)\nprompt.outro('Done')\n```\n\n### Basic TUI Component\n\n```typescript\nimport { defineCommand } from '@bunli/core'\n\nfunction MyTUI() {\n  return (\n    <box title=\"My App\" style={{ border: true, padding: 2 }}>\n      <text>Hello from My App!</text>\n    </box>\n  )\n}\n\nexport const myCommand = defineCommand({\n  name: 'my-command',\n  description: 'My command with TUI',\n  render: () => <MyTUI />,\n  handler: async () => {\n    console.log('Running my-command in CLI mode')\n  }\n})\n```\n\n### Using Form Components\n\n```typescript\nimport { defineCommand } from '@bunli/core'\nimport { useRuntime } from '@bunli/runtime/app'\nimport { SchemaForm } from '@bunli/tui'\nimport { z } from 'zod'\n\nconst configSchema = z.object({\n  apiUrl: z.string().url('Enter a valid URL'),\n  region: z.enum(['us-east', 'us-west'])\n})\n\nfunction ConfigTUI() {\n  const runtime = useRuntime()\n  const regions = [\n    { label: 'US East', value: 'us-east', hint: 'US East region' },\n    { label: 'US West', value: 'us-west', hint: 'US West region' }\n  ]\n\n  return (\n    <SchemaForm\n      title=\"Configure Settings\"\n      schema={configSchema}\n      fields={[\n        {\n          kind: 'text',\n          name: 'apiUrl',\n          label: 'API URL',\n          placeholder: 'https://api.example.com',\n          required: true\n        },\n        {\n          kind: 'select',\n          name: 'region',\n          label: 'Region',\n          options: regions\n        }\n      ]}\n      onSubmit={(values) => {\n        console.log('Validated form values:', values)\n      }}\n      onCancel={() => runtime.exit()}\n    />\n  )\n}\n\nexport const configureCommand = defineCommand({\n  name: 'configure',\n  description: 'Configure application settings',\n  render: () => <ConfigTUI />\n})\n```\n\n### Using OpenTUI Hooks\n\n```typescript\nimport { useRuntime } from '@bunli/runtime/app'\nimport { useKeyboard, useTimeline, useTerminalDimensions } from '@bunli/tui'\n\nfunction InteractiveTUI({ command }) {\n  const [count, setCount] = useState(0)\n  const { width, height } = useTerminalDimensions()\n  const runtime = useRuntime()\n  \n  const timeline = useTimeline({ duration: 2000 })\n  \n  useKeyboard((key) => {\n    if (key.name === 'q') {\n      runtime.exit()\n    }\n    if (key.name === 'space') {\n      setCount(prev => prev + 1)\n    }\n  })\n  \n  useEffect(() => {\n    timeline.add({ count: 0 }, {\n      count: 100,\n      duration: 2000,\n      onUpdate: (anim) => setCount(anim.targets[0].count)\n    })\n  }, [])\n  \n  return (\n    <box title=\"Interactive Demo\" style={{ border: true, padding: 2 }}>\n      <text>Count: {count}</text>\n      <text>Terminal: {width}x{height}</text>\n      <text>Press SPACE to increment, Q to quit</text>\n    </box>\n  )\n}\n```\n\n## Component Library\n\nInteractive components are available from `@bunli/tui/interactive` and root exports.\n\nIncluded primitives:\n- Form: `Form`, `SchemaForm`, `FormField`, `SelectField`\n- Form v2: `NumberField`, `PasswordField`, `TextareaField`, `CheckboxField`, `MultiSelectField`\n- Layout: `Container`, `Stack`, `Grid`, `Panel`, `Card`, `Divider`, `SectionHeader`\n- Navigation/flow: `Tabs`, `Menu`, `CommandPalette`, `Modal`\n- Feedback: `Alert`, `Badge`, `Toast`, `ProgressBar`, `EmptyState`\n- Data display: `List`, `Table`, `DataTable`, `KeyValueList`, `Stat`, `Markdown`, `Diff`\n- Charts: `BarChart`, `LineChart`, `Sparkline` from `@bunli/tui/charts`\n- Runtime orchestration/hooks: import from `@bunli/runtime/app` (`DialogProvider`, `useDialogManager`, `FocusScopeProvider`, `useScopedKeyboard`, etc.)\n\n### Keyboard Contracts\n\nDefault keyboard bindings for interactive primitives:\n\n- `Modal`: `Esc` / `Ctrl+C` close, `Tab`/`Shift+Tab` focus trap\n- `Dialog confirm`: `Left`/`h`/`y` -> confirm, `Right`/`l`/`n` -> cancel choice, `Tab` toggle, `Enter` submit\n- `Dialog choose`: `Up`/`k` previous, `Down`/`j` next, `Enter` submit. Disabled options are skipped for selection/navigation.\n- `Menu`: `Up`/`k`, `Down`/`j`, `Enter`\n- `Tabs`: `Left`/`h` previous tab, `Right`/`l` next tab\n- `CommandPalette`: `Up`/`k`, `Down`/`j`, `Enter`\n- `DataTable`: `Left`/`h` previous sort column, `Right`/`l` next sort column, `Up`/`k` previous row, `Down`/`j` next row, `Enter` select row\n- `Form`: `Tab`/`Shift+Tab` field navigation, `Ctrl+S` submit, `Ctrl+R` reset, `F8`/`Shift+F8` jump error fields, `Esc` cancel\n\n### Dialog Manager\n\nUse the dialog manager to stack confirm/choose flows with consistent priority handling and dismissal semantics.\n\n```typescript\nimport { useDialogManager, DialogDismissedError } from '@bunli/runtime/app'\n\nfunction Screen() {\n  const dialogs = useDialogManager()\n\n  async function deploy() {\n    try {\n      const confirmed = await dialogs.confirm({\n        title: 'Deploy',\n        message: 'Ship this release now?'\n      })\n      if (!confirmed) return\n\n      const target = await dialogs.choose({\n        title: 'Target',\n        options: [\n          { label: 'Staging', value: 'staging', section: 'General' },\n          { label: 'Production', value: 'production', section: 'Protected', disabled: true }\n        ]\n      })\n\n      console.log('Deploying to', target)\n    } catch (error) {\n      if (error instanceof DialogDismissedError) {\n        console.log('Dialog dismissed')\n      }\n    }\n  }\n\n  return <box />\n}\n```\n\n### Form\n\nA schema-driven container for controlled interactive forms.\n\n```typescript\nconst runtime = useRuntime()\n\n<Form \n  title=\"My Form\"\n  schema={schema}\n  onSubmit={(values) => console.log(values)}\n  onCancel={() => runtime.exit()}\n>\n  {/* Form fields */}\n</Form>\n```\n\n**Props:**\n- `title: string` - Form title\n- `schema: StandardSchemaV1` - Validation schema (Zod and other Standard Schema adapters supported)\n- `onSubmit: (values) => void | Promise<void>` - Submit handler with schema-validated values\n- `onCancel?: () => void` - Cancel handler (optional)\n- `onValidationError?: (errors: Record<string, string>) => void` - Validation error callback\n- `initialValues?: Partial<InferOutput<schema>>` - Initial controlled values\n- `validateOnChange?: boolean` - Validate while typing/selecting (default `true`)\n- `submitHint?: string` - Footer hint override\n- `onReset?: () => void` - Reset callback\n- `onDirtyChange?: (isDirty, dirtyFields) => void` - Dirty-state callback\n- `onSubmitStateChange?: ({ isSubmitting, isValidating }) => void` - async state callback\n- `scopeId?: string` - keyboard scope boundary id for nested interactive flows\n\n### SchemaForm\n\nA higher-level schema form builder that renders fields from descriptors.\n\n```typescript\n<SchemaForm\n  title=\"Deploy\"\n  schema={schema}\n  fields={[\n    { kind: 'text', name: 'service', label: 'Service' },\n    { kind: 'select', name: 'env', label: 'Environment', options: envOptions },\n    { kind: 'checkbox', name: 'telemetry', label: 'Enable telemetry' },\n    {\n      kind: 'textarea',\n      name: 'notes',\n      label: 'Release notes',\n      visibleWhen: (values) => values.env === 'production'\n    }\n  ]}\n  onSubmit={(values) => console.log(values)}\n/>\n```\n\nSupported `SchemaForm` field kinds:\n- `text`\n- `select`\n- `multiselect`\n- `number`\n- `password`\n- `textarea`\n- `checkbox`\n\nField-level behavior:\n- `visibleWhen(values) => boolean` for conditional rendering.\n- `deriveDefault(values) => unknown` for dependent default initialization.\n\n### FormField\n\nA controlled text field bound to form context.\n\n```typescript\n<FormField\n  label=\"Username\"\n  name=\"username\"\n  placeholder=\"Enter username\"\n  required\n  defaultValue=\"\"\n/>\n```\n\n**Props:**\n- `label: string` - Field label\n- `name: string` - Field name\n- `placeholder?: string` - Placeholder text\n- `required?: boolean` - Whether field is required\n- `description?: string` - Helper text\n- `defaultValue?: string` - Initial value for form state\n- `onChange?: (value: string) => void` - Change handler\n- `onSubmit?: (value: string) => void` - Submit handler\n\n### SelectField\n\nA controlled select field bound to form context.\n\n```typescript\n<SelectField\n  label=\"Environment\"\n  name=\"env\"\n  options={[\n    { label: 'Development', value: 'dev', hint: 'Development environment' },\n    { label: 'Production', value: 'prod', hint: 'Production environment' }\n  ]}\n  defaultValue=\"dev\"\n  onChange={setEnvironment}\n/>\n```\n\n**Props:**\n- `label: string` - Field label\n- `name: string` - Field name\n- `options: SelectOption[]` - Available options\n- `required?: boolean` - Whether field is required\n- `description?: string` - Helper text\n- `defaultValue?: SelectOption['value']` - Initial selected value\n- `onChange?: (value: SelectOption['value']) => void` - Change handler\n\n### ProgressBar\n\nA progress bar component for showing completion status.\n\n```typescript\n<ProgressBar \n  value={75} \n  label=\"Upload Progress\" \n  color=\"#00ff00\" \n/>\n```\n\n**Props:**\n- `value: number` - Progress value (0-100)\n- `label?: string` - Progress label\n- `color?: string` - Progress bar color\n\n### Chart Primitives\n\n`@bunli/tui/charts` supports negative and sparse values, axis labels, and multi-series palettes.\n\n```typescript\nimport { BarChart, LineChart } from '@bunli/tui/charts'\n\n<BarChart\n  series={[\n    { name: 'build', points: [{ label: 'Mon', value: -2 }, { label: 'Tue', value: 6 }] },\n    { name: 'test', points: [{ label: 'Mon', value: null }, { label: 'Tue', value: 4 }] }\n  ]}\n  axis={{ yLabel: 'Jobs', xLabel: 'Day', showRange: true }}\n/>\n\n<LineChart\n  series={{ name: 'latency', points: [{ value: 120 }, { value: 98 }, { value: null }, { value: 104 }] }}\n  axis={{ yLabel: 'ms' }}\n/>\n```\n\n### ThemeProvider and Tokens\n\nUse `ThemeProvider` to apply a built-in theme preset or token overrides.\n\n```typescript\nimport { ThemeProvider, createTheme } from '@bunli/tui/interactive'\n\nconst customTheme = createTheme({\n  preset: 'dark',\n  tokens: {\n    accent: '#3ec7ff',\n    textSuccess: '#3cd89b'\n  }\n})\n\nfunction App() {\n  return (\n    <ThemeProvider theme={customTheme}>\n      <Panel title=\"Deploy status\">\n        <Alert tone=\"success\" message=\"Ready to ship\" />\n      </Panel>\n    </ThemeProvider>\n  )\n}\n```\n\n## OpenTUI Hooks\n\nThe package re-exports useful OpenTUI React hooks:\n\n### useKeyboard\n\nHandle keyboard events.\n\n```typescript\nimport { useRuntime } from '@bunli/runtime/app'\nimport { useKeyboard } from '@bunli/tui'\n\nconst runtime = useRuntime()\n\nuseKeyboard((key) => {\n  if (key.name === 'escape') {\n    runtime.exit()\n  }\n})\n```\n\n### useRenderer\n\nAccess the OpenTUI renderer instance.\n\n```typescript\nimport { useRenderer } from '@bunli/tui'\n\nconst renderer = useRenderer()\nrenderer.console.show()\n```\n\nUse `useRenderer()` for advanced renderer inspection/control only. Use `useRuntime().exit()` for normal command completion.\n\n### useTerminalDimensions\n\nGet current terminal dimensions.\n\n```typescript\nimport { useTerminalDimensions } from '@bunli/tui'\n\nconst { width, height } = useTerminalDimensions()\n```\n\n### useTimeline\n\nCreate and manage animations.\n\n```typescript\nimport { useTimeline } from '@bunli/tui'\n\nconst timeline = useTimeline({ duration: 2000 })\n\ntimeline.add({ x: 0 }, {\n  x: 100,\n  duration: 2000,\n  onUpdate: (anim) => setX(anim.targets[0].x)\n})\n```\n\n### useOnResize\n\nHandle terminal resize events.\n\n```typescript\nimport { useOnResize } from '@bunli/tui'\n\nuseOnResize((width, height) => {\n  console.log(`Terminal resized to ${width}x${height}`)\n})\n```\n\n## Renderer Configuration\n\nRenderer options are passed via `createCLI({ tui: { renderer } })` and optional command-level overrides in `command.tui.renderer`.\n\n## OpenTUI Components\n\nYou can use any OpenTUI React components directly:\n\n```typescript\nimport { render } from '@opentui/react'\n\nfunction MyComponent() {\n  return (\n    <box style={{ border: true, padding: 2 }}>\n      <text>Hello World</text>\n      <input placeholder=\"Type here...\" />\n      <select options={options} />\n    </box>\n  )\n}\n```\n\nAvailable components:\n- `<box>` - Container with borders and layout\n- `<text>` - Text display with styling\n- `<input>` - Text input field\n- `<select>` - Dropdown selection\n- `<scrollbox>` - Scrollable container\n- `<ascii-font>` - ASCII art text\n- `<tab-select>` - Tab-based selection\n\n## Examples\n\nSee the `examples/tui-demo` directory for complete examples:\n\n- **Deploy Command**: Animated progress bar with timeline\n- **Configure Command**: Form with input and select fields\n\n## TypeScript Support\n\nThe package provides full TypeScript support:\n\n```typescript\nimport type { TuiComponent, TuiComponentProps } from '@bunli/tui'\n\nconst MyTUI: TuiComponent = ({ command, args, store }) => {\n  // Fully typed props\n  return <box>{command.name}</box>\n}\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}