فریم‌ورک کنسول

برنامه‌های فول‌استک React بسازید که در console.log رندر می‌شوند.

شروع

این صفحه در کنسول شما اجرا می‌شود. آن را با ⌘⌥JCtrl+Shift+J⌘⌥KCtrl+Shift+K⌘⌥C باز کنید (ابتدا قابلیت‌های توسعه‌دهنده را فعال کنید)، روی پیش‌نمایش زیر کلیک کنید و ↑ ↓ را فشار دهید.

1import { useState } from "react";2import { AsciiFont, Box, Text, useInput } from "@textjs/app";34export default function Page() {5  const [count, setCount] = useState(0);6  useInput((e) => {7    if (e.key === "up") setCount((c) => c + 1);8    if (e.key === "down") setCount((c) => c - 1);9  });1011  return (12    <Box className="flex-col gap-1 p-2">13      <AsciiFont text="▼ TEXT.JS" />14      <Text color="muted">React 19 in console.log</Text>15      <Text bold color="accent">count = {count}</Text>16    </Box>17  );18}
viewport:3

React 19

⁦Text.js⁩ از رندر هم‌زمان، Suspense و مرزهای خطا پشتیبانی می‌کند.

App Router

پوشه‌های داخل ⁦app/⁩ به مسیر و چیدمان تبدیل می‌شوند و دکمه‌های بازگشت و جلو و پیوندهای عمیق کار می‌کنند.

شبکه واکنش‌گرا

شبکه در هر میزان بزرگ‌نمایی صفحه، با اندازه پنل متصل DevTools هماهنگ می‌شود.

ورودی صفحه‌کلید

کلیدها، جای‌گذاری و ترکیب نویسه‌های IME از طریق یک <textarea> پنهان به برنامه می‌رسند.

جدول‌ها، نمودارها، فرم‌ها و میان‌برها

زنده
preview://table:1
↑ ↓ حرکت · s مرتب‌سازی · Space انتخاب
مستندات
چیدمان
  • <Box>
  • <Stack>
  • <Grid>
  • <SplitPane>
  • <ScrollBox>
  • <Center>
داده‌ها
  • <List>
  • <Table>
  • <Tree>
  • <Markdown>
  • <Code>
  • <Diff>
نمودارها
  • <LineChart>
  • <BarChart>
  • <Sparkline>
  • <ProgressBar>
  • <Gradient>
  • <Image>
کنترل‌ها
  • <Input>
  • <Select>
  • <Checkbox>
  • <Switch>
  • <Slider>
  • <Dialog>
صفحه‌کلید
  • useKeymap
  • <KeyHelp>
  • <KeyHints>
  • <CommandPalette>
  • <StatusBar>
  • useFocus

هر فریم تغییریافته یک فراخوانی console.log است

کامیتی که هیچ سلولی را تغییر ندهد، هرگز به کنسول نمی‌رسد.

  1. React 19

    01کامیت

    ⁦React⁩ با یک reconciler سفارشی کامیت می‌کند.

  2. Yoga

    02چیدمان

    ⁦Yoga⁩ جعبه‌ها را روی سلول‌های کامل می‌چیند.

  3. CellBuffer

    03ترسیم

    فقط ردیف‌های آسیب‌دیده دوباره ترسیم می‌شوند.

  4. هش ردیف

    04دروازهٔ تغییر

    فریم‌های بدون تغییر اینجا متوقف می‌شوند.

  5. RLE

    05کدگذاری

    3,200 سلول به 149 span از نوع ⁦%c⁩ تبدیل می‌شوند.

  6. console.log

    06ارسال

    فریم‌ها با فاصلهٔ حداقل 66 ms به انتها افزوده می‌شوند.

فریم تغییریافته فریم بدون تغییر، 0 فراخوانی

فریم‌های افزوده‌شده به انتها

پاک کردن کنسول پیش از هر فریم، آن را تا ترسیم فریم بعدی در DevTools خالی نگه می‌دارد. Turbolog در عوض هر فریم را به انتها می‌افزاید.

خواندن نوشته
clear() + log()70.6% خالی
log(), appended1.0% خالی
0.163msبازترسیم کامل (چیدمان، ترسیم، کدگذاری)
0.011msویرایش یک ردیف، مانند فشردن کلید
0 فراخوانیفریم بیکار
149⁦ span⁩آرگومان‌های ⁦%c⁩ برای 3,200 سلول
داشبورد ⁦100×32⁩، میانگین 1,000 فریم · Apple M5 Pro · Bun 1.4.4مستندات موتور Turbolog

رندر مسیرها در سرور

برای رندر یک مسیر و کامپوننت‌های ناهمگام آن در سرور، runtime = "server" را صادر کنید. مرورگر به‌جای برنامه شما، یک پخش‌کننده فریم 21 kB (gzip) بارگیری می‌کند.

1import { Suspense } from "react";2import { Box, Text } from "@textjs/app";3import { db } from "@/lib/db";45export const runtime = "server";67async function Deploys() {8  const rows = await db.deploys.latest(5);9  return rows.map((d) => (10    <Text key={d.id}>{`${d.state}  ${d.branch}`}</Text>11  ));12}1314export default function Page() {15  return (16    <Box className="flex-col p-1">17      <Text bold>Deployments</Text>18      <Suspense fallback={<Text color="muted">Loading…</Text>}>19        <Deploys />20      </Suspense>21    </Box>22  );23}

کدنویسی با OpenCode در DevTools

⁦OpenCode Lite⁩ رابط متنی OpenCode است که با Text.js بازسازی شده تا در کنسول مرورگر شما اجرا شود.

محیط آزمایشی

یک عامل اسکریپت‌شده به هر پرامپتی پاسخ می‌دهد، بدون نیاز به نصب.

یک دستور

دستور bunx ⁦@textjs/opencode⁩⁦@latest proxy⁩ را اجرا کنید و کدی را که چاپ می‌کند وارد کنید. صفحه به OpenCode روی دستگاه شما متصل می‌شود.

مدل‌ها و نشست‌های شما

با دستور ⁦/models⁩ هر مدلی را که سرورتان پیکربندی کرده انتخاب کنید. نشست‌ها، عامل‌ها و مدل‌ها از سرور OpenCode شما می‌آیند.

ابزارهای ویرایش، لینت و آزمون

افزونه DevTools

پنلی با درخت کامپوننت‌ها، بازرس فریم و خط زمانی هر فریم اضافه می‌کند.

پنل Text.js

VS Code

پیش‌نمایش فریم را کنار کد شما نمایش می‌دهد و فایل‌های اولیه ⁦App Router⁩ را می‌سازد.

⌘K V

ESLint

تگ‌های DOM در کامپوننت‌های کنسول، کادرهای داخل متن و نویسه‌هایی را که Menlo ندارد شناسایی می‌کند.

eslint-plugin-textjs

آزمون

خارج از صفحه رندر کنید، کلیدها را فشار دهید و در هر اجراکننده آزمون، روی lastFrame() شرط بررسی کنید.

@textjs/app/testing

کدهای خطا

خطاها و هشدارهای دارای کد TX به صفحه‌ای پیوند دارند که روش رفع آن‌ها را توضیح می‌دهد.

TX###

⁦REPL⁩ کنسول

از پرامپت کنسول، برنامه در حال اجرا را متوقف کنید، اندازه‌اش را تغییر دهید، نمای وایرفریم آن را ببینید و آن را کپی کنید.

window.text

راست‌به‌چپ

الگوریتم دوجهته Unicode را پیاده‌سازی می‌کند و هر 770,241 مورد آزمون BidiTest.txt را با موفقیت می‌گذراند.

UAX #9

قلم‌های FIGlet

فایل‌های .flf را تجزیه می‌کند و با 273 خروجی ثبت‌شده از فایل باینری figlet مطابقت دارد.

@textjs/font