ان پٹ اور کی میپس

کی بورڈ سے ڈیپلائمنٹس میں نیویگیٹ کریں اور ? ہیلپ اوورلے شامل کریں۔

اس باب کی ایپ آپ کے کونسول میں چل رہی ہے۔ اسے ⌘⌥JCtrl+Shift+J⌘⌥KCtrl+Shift+K⌘⌥C سے کھولیں (پہلے ڈیولپر فیچرز فعال کریں)، پھر اسے آزمائیں۔
باب دیکھیں3:25

اس باب میں

  • `useInput`
  • کی میپس
  • مدد کا اوورلے
  • فوکس

کی اسٹروکس صفحے پر ایک پوشیدہ ان پٹ سے آپ کی ایپ تک پہنچتے ہیں، اس لیے صفحے کو فوکس درکار ہے۔ اسی لیے ہر Text.js ایپ آپ سے پہلے صفحے پر کلک کرنے کو کہتی ہے۔ فوکس ملنے کے بعد، آپ جو بھی کلید دباتے ہیں وہ React تک پہنچتی ہے۔

useInput

useInput وہ لو لیول ہک ہے جو آپ نے اب تک استعمال کیا ہے۔ اسے ایک KeyEvent ملتا ہے جس میں نارملائز کردہ key ("up"، "return"، "escape")، input میں ٹائپ کردہ حرف، اور ctrl، alt، shift اور meta ہوتے ہیں۔

useInput((e) => {  if (e.ctrl && e.key === "k") openPalette();});

کسی کلید کو ٹری میں مزید نیچے کے ہینڈلرز تک پہنچنے سے روکنے کے لیے e.stopPropagation() کال کریں۔

کی میپس

جب کسی اسکرین پر دو سے زیادہ کلیدیں ہوں تو انہیں useKeymap کے ساتھ بیان کریں۔ بائنڈنگز اسٹرنگز ہوتی ہیں: "up, k" دونوں میں سے کوئی ایک کلید ہے، "g g" ایک ترتیب ہے، اور "ctrl+k" ایک ساتھ دبائی جانے والی کلیدیں ہیں۔ لیبل والی بائنڈنگز <KeyHelp>، <KeyHints> اور کمانڈ پیلیٹ میں بھی نظر آتی ہیں۔

app/deployments/page.tsx+31tsx
شامل کردہ: import { useState } from "react";شامل کردہ: import { Box, KeyHelp, Text, useKeymap } from "@textjs/app";شامل کردہ: import { DEPLOYMENTS } from "../../lib/deployments";شامل کردہ: شامل کردہ: export default function DeploymentsPage() {شامل کردہ:   const [index, setIndex] = useState(0);شامل کردہ:   const [open, setOpen] = useState(false);شامل کردہ:   const move = (by: number) => setIndex((i) => Math.max(0, Math.min(DEPLOYMENTS.length - 1, i + by)));شامل کردہ: شامل کردہ:   useKeymap({شامل کردہ:     "up, k": { label: "Previous deployment", run: () => move(-1) },شامل کردہ:     "down, j": { label: "Next deployment", run: () => move(1) },شامل کردہ:     enter: { label: "Toggle details", run: () => setOpen((o) => !o) },شامل کردہ:     "g g": { label: "First deployment", run: () => setIndex(0) },شامل کردہ:   });شامل کردہ: شامل کردہ:   return (شامل کردہ:     <Box className="flex-row grow p-1 gap-2">شامل کردہ:       <Box className="flex-col grow">شامل کردہ:         {DEPLOYMENTS.map((d, i) => (شامل کردہ:           <Box key={d.id} className="flex-row h-1 gap-2 px-1" backgroundColor={i === index ? "selection" : undefined}>شامل کردہ:             <Text>{i === index ? "›" : " "}</Text>شامل کردہ:             <Text bold={i === index} wrap="truncate-end">{d.commit}</Text>شامل کردہ:           </Box>شامل کردہ:         ))}شامل کردہ:       </Box>شامل کردہ:       {open && <Details deployment={DEPLOYMENTS[index]} />}شامل کردہ:       <KeyHelp />شامل کردہ:     </Box>شامل کردہ:   );شامل کردہ: }

فی الحال DEPLOYMENTS، lib/deployments.ts فائل میں ایک عام ایرے ہے۔ باب 6 میں اسے روٹ ہینڈلر کے پیچھے منتقل کیا جائے گا۔

مدد کا اوورلے

<KeyHelp />، ? کی کلید سنتا ہے اور ایک موڈل کھولتا ہے جو اس وقت فعال تمام لیبل والی بائنڈنگز کو گروپس میں دکھاتا ہے۔ کونسول میں ? دبائیں، پھر اسے بند کرنے کے لیے ? یا q دبائیں۔ موڈل کے اندر کی بائنڈنگز فوکس کو اپنے اندر محدود رکھتی ہیں، اس لیے نیچے کی فہرست موڈل بند ہونے تک ردعمل دینا روک دیتی ہے۔

فوکس

<Input>، <Select> اور <Table> جیسے کمپوننٹس صرف فوکس ہونے پر کلیدیں وصول کرتے ہیں۔ Tab ان کے درمیان فوکس منتقل کرتا ہے؛ useFocus() اور useFocusManager() سے آپ خود یہ کر سکتے ہیں۔

آزمائیں

یہ باب کے اختتام پر Acme Deploys ہے، جو DevTools میں چل رہی ہے۔ پیڈ پر کلک کریں، پھر نیچے دی گئی کلیدیں استعمال کریں۔

▼ 04 · ان پٹ اور کی میپس

کونسول کھولیں

⌘⌥J
CtrlShiftJ
⌘⌥K
CtrlShiftK
⌘⌥C

ایپ DevTools میں رینڈر ہوتی ہے۔پہلے Safari کی ترتیبات → ایڈوانسڈ میں “ویب ڈیولپرز کے لیے فیچرز دکھائیں” آن کریں۔ پھر یہاں کلک کریں اور ↓ دبائیں۔

ڈیسک ٹاپ پر کھولیں

یہ ایپ DevTools کونسول میں رینڈر ہوتی ہے، جس کے لیے ڈیسک ٹاپ براؤزر چاہیے۔

کوئز

2 سوالات

باب مکمل کرنے کے لیے ہر سوال کا جواب دیں۔

In useKeymap, what does the binding "g g" mean?

 

ٹائپ کرنے سے پہلے آپ صفحے پر کلک کیوں کرتے ہیں؟