HQTUI: داشبوردهای ترمینالی شیک برای TypeScript، Rust، Go و Python
خلاصهٔ کاملتر
HQTUI یه کتابخونهٔ متنباز با لایسنس MIT برای ساختن رابط کاربری تو ترمینال (TUI) هست که الان به نسخهٔ v0.10.3 رسیده. سازندههاش میگن هدف اینه که داشبوردهایی در حد btop رو با یه API ساده بسازید. نسخهٔ مرجعش TypeScript هست و روی Bun، Node و Deno اجرا میشه. حالا پورتهای نیتیو Rust، Go، Python و Zig هم داره که به JavaScript نیازی ندارن. C++ هم یه دموی نیتیو روی هستهٔ مشترک C داره و Ruby، PHP، Perl و Nim هم binding آزمایشی دارن.
کافیه createApp() رو صدا بزنید تا تم تیره، truecolor، پشتیبانی موس، مدیریت تغییر اندازه و تنظیم خودکار نرخ فریم رو یهجا بگیرید. نمونهٔ خود سایت این شکلیه:
const app = await createApp();
app.render(({ ui }) => {
ui.panel({ title: "Hello" }, (panel) => {
panel.text("Hello, terminal.");
});
});سرعتش از differential rendering میاد، یعنی هر فریم با فریم قبلی مقایسه میشه و فقط خونههای تغییرکرده تو ترمینال نوشته میشن. کل صفحه تو چهار typed array نگه داشته میشه و تو مسیرهای پرتکرار هیچ تخصیص حافظهای برای هر خونه انجام نمیشه. مثلاً عوض شدن CPU 72% به CPU 73% فقط یه کاراکتر خروجی داره. نرخ فریم بهطور عادی ۳۰، روی SSH پونزده و وقتی چیزی عوض نشه صفره.
برای نمودارها از کاراکترهای Braille استفاده میکنه، یعنی هر خونهٔ ترمینال یه ماتریس ۲ در ۴ پیکسلی میشه و یه پنل 40x10 با رزولوشن 80x40 نمودار میکشه. اگه ترمینال پشتیبانی نکنه، خودش به بلاک یا ASCII برمیگرده. رنگها هم خودکار به ۲۵۶ یا ۱۶ رنگ کم میشن و حالت NO_COLOR پشتیبانی میشه. بیش از ۳۰ ویجت، ۹ تم آماده، ۳۷۰ آیکون و ۳۹۶۳ ایموجی هم داخلش هست.
دو نکتهٔ کاربردی دیگه هم داره. یه رندرر headless داره که خروجی رو بهصورت متن، ANSI، HTML یا جدول خونهها برمیگردونه، پس بدون ترمینال واقعی میشه تستش کرد. اگه برنامه با Ctrl+C، SIGTERM یا یه خطای مدیریتنشده بسته بشه، ترمینال رو به حالت قبل برمیگردونه.
نکات کلیدی:
- نسخهٔ فعلی v0.10.3 با لایسنس MIT هست.
- نسخهٔ TypeScript صفر وابستگی زمان اجرا داره و پورتها فقط از کتابخونهٔ استاندارد زبانشون استفاده میکنن.
- روی صفحهٔ 160x50، فریمی که ۱۰٪ خونههاش عوض شده حدود 0.29 میلیثانیه طول میکشه.
- نرخ فریم ۳۰ در حالت عادی، ۱۵ روی SSH و صفر در حالت بیکاری هست.
- پورت Zig برای نسخهٔ 0.16 نوشته شده و دموی C++ به C++17، CMake و GCC یا Clang نیاز داره.




