Giggles: فریمورک ریاکت برای ساخت اپهای ترمینالی
خلاصهٔ کاملتر
اگه تا حالا خواستی یه ابزار خط فرمانی با رابط کاربری شیک بسازی، احتمالاً با چالشهای زیادی روبرو شدی — از مدیریت ورودی کیبورد گرفته تا هندل کردن فوکوس و ناوبری بین صفحات. Giggles اومده همه این دردسرها رو حل کنه.
Giggles یه فریمورک ریاکتیه که روی کتابخونه Ink ساخته شده و هدفش اینه که بسازی TUI (Terminal User Interface) به همون راحتی ساخت یه اپ وب باشه. ایدههای اصلیش از اکوسیستم Charmbracelet الهام گرفته و سعی کرده تجربهای کامل و آمادهبهکار ارائه بده.
یکی از جالبترین ویژگیهاش اینه که هر کامپوننت مستقل کلیدهای خودش رو مدیریت میکنه. مثلاً یه text input داخل یه list داخل یه panel، هر کدوم جداگانه کلیدها رو میگیرن و اگه کلیدی برای اون کامپوننت تعریف نشده بود، بهصورت طبیعی به والد بالاتر پاس داده میشه. نه global input handler، نه کد هماهنگسازی پیچیده.
ناوبری بین صفحات هم با یه API ساده انجام میشه و وقتی برمیگردی به یه صفحه قبلی، همون کامپوننتی که آخرین بار فوکوس داشت دوباره فوکوس میگیره. این یعنی تجربه کاربری روان و طبیعی بدون اینکه خودت چیزی بنویسی.
Giggles یه سری hook و کامپوننت کامل داره: useFocusScope، useFocusNode، FocusTrap، useNavigation و خیلی موارد دیگه. یه registry هم برای keybinding داره که اپت میتونه همیشه به کاربر نشون بده در هر context چه کلیدهایی فعال هستن.
کتابخونه کامپوننتهاش هم چیزی کم نداره: text input، multi-select، autocomplete، command palette، virtual list برای دادههای حجیم، markdown renderer با syntax highlighting، code block، diff viewer، modal، spinner، paginator، badge، panel و غیره. همه با مقادیر پیشفرض منطقی و قابلیت سفارشیسازی کامل.
بخش giggles/terminal هم قابلیتهای قدرتمندی داره: با useShellOut میتونی کنترل ترمینال رو به برنامههایی مثل vim یا less بدی و بعد از اتمام کارشون دوباره پسش بگیری. useSpawn برای spawn کردن پروسسهای فرزند و stream کردن خروجیشون مستقیم توی UI هست. useTerminalSize هم اندازه ترمینال رو ردیابی میکنه و با تغییر اندازه پنجره، آپدیت میشه.
شروع کار هم خیلی راحته — فقط یه دستور npx create-giggles-app کافیه تا پروژهات آماده بشه. مستندات API و دموهای زنده هم روی سایت رسمیشون در دسترسن.
نکات کلیدی:
- ساختهشده روی Ink، مخصوص اپهای ترمینالی با ریاکت
- مدیریت فوکوس و ناوبری بین صفحات بهصورت built-in
- هر کامپوننت مستقلاً ورودی خودش رو مدیریت میکنه
- کتابخونه کامل از کامپوننتهای TUI: input، autocomplete، virtual list، markdown و...
- قابلیت واگذاری کنترل ترمینال به برنامههای خارجی مثل vim
- پشتیبانی از spawn پروسس و stream کردن خروجی در UI
- keybinding registry با آگاهی از context برای راهنمایی کاربر
- شروع سریع با npx create-giggles-app




