Hook dan REPL konsol
useInput, useFocus, useViewport, useConsoleStats, dan window.text.
Hook menghubungkan komponen ke input, fokus, dan viewport.
useInput
useInput((e) => { if (e.key === "up") setIndex((i) => i - 1); if (e.ctrl && e.key === "p") setPaletteOpen(true);});| Kolom | Deskripsi |
|---|---|
key | "up" "return" "escape" "tab"… |
input | Teks yang dihasilkan tombol |
ctrl meta shift alt | Pengubah |
stopPropagation() | Hentikan handler dengan prioritas lebih rendah |
Pintasan browser seperti ⌘⌥J dan ⌘R selalu diteruskan.
usePaste dan useWheel menerima opsi yang sama. ambient tidak berpengaruh pada useWheel.
| Opsi | Deskripsi |
|---|---|
isActive | false menonaktifkan handler tanpa melepas komponen (default true) |
priority | Prioritas lebih tinggi berjalan lebih dulu (default 0). Komponen yang memiliki fokus menggunakan FOCUSED_INPUT_PRIORITY (10) |
global | Tetap menerima input saat <Modal> di luar komponen ini terbuka (default false) |
ambient | Jangan hitung handler ini untuk petunjuk fokus (default false) |
Pintasan Dev Overlay (F2 atau Ctrl+`) bersifat ambient, sehingga halaman tanpa input keyboard lain tidak menampilkan petunjuk.
useInput((e) => { if (e.key === "f2") toggleOverlay();}, { ambient: true });usePaste dan useWheel
usePaste((e) => insert(e.text));useWheel((e) => scrollBy(e.rows));useKeyState (eksperimental)
@textjs/react/experimental mengekspor useKeyState untuk melacak tombol fisik yang ditahan berdasarkan KeyboardEvent.code ("KeyW", "ArrowUp", "ControlLeft"). Memeriksa keys.isDown(code) secara berkala atau membaca keys.pressed tidak memicu rendering ulang React. Berikan callback untuk merespons penekanan dan pelepasan tombol saat terjadi.
import { useKeyState } from "@textjs/react/experimental";const keys = useKeyState((e) => { if (e.code === "Space" && e.down) fire();});Tombol yang ditahan dilepas secara otomatis saat halaman kehilangan fokus. Lihat Perubahan yang memutus kompatibilitas untuk mengetahui cara pemberian versi ekspor eksperimental.
useViewport
const { cols, rows, focused, paused } = useViewport();usePageFocus
usePageFocus() mengembalikan apakah halaman memiliki fokus. Penekanan tombol hanya diterima aplikasi saat halaman memiliki fokus. Nilainya sama dengan useViewport().focused, tetapi rendering ulang hanya terjadi saat fokus berubah.
const focused = usePageFocus();Saat halaman tidak memiliki fokus dan aplikasi memiliki handler useInput atau usePaste, hook useKeyState, atau target fokus yang dapat dijangkau dengan Tab, baris terakhir frame konsol menjadi bilah kuning ambar bertuliskan “Klik halaman untuk menggunakan keyboard”. Handler bertanda ambient tidak dihitung. Petunjuk ini tidak muncul di terminal, dalam pengujian, atau pada cerminan inline. Setiap kali muncul, petunjuk berkedip selama sekitar 6 detik, kecuali setelan pengurangan gerakan sistem aktif. Untuk menentukan sendiri kapan petunjuk muncul, tetapkan focusHint: false di text.config.ts atau createConsoleRoot dan render <FocusHint>:
<FocusHint active={editing} />useConsoleStats
const { totalMs, spanCount } = useConsoleStats({ interval: 250 });useApp
const { exit, pause, resume } = useApp();REPL window.text
Setiap aplikasi menambahkan fungsi pembantu ke window.text. Ketik fungsi tersebut di prompt DevTools.
text.help()text.resize(120, 36) // pin the grid sizetext.responsive(true) // fit the docked console againtext.pause()text.stats()text.wireframe()text.copyText()