متن و سبک‌دهی

به یک کارت استقرار با رنگ‌ها، ویژگی‌های متن و توکن‌های پوسته سبک بدهید.

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

در این فصل

  • ویژگی‌های متن
  • توکن‌های پوسته
  • کارت استقرار
  • پوسته‌ها

هر سلول یک نویسه، یک رنگ پیش‌زمینه، یک پس‌زمینه و مجموعه‌ای از ویژگی‌ها دارد. Text.js آن‌ها را به spanهای CSS با %c کامپایل می‌کند تا کنسول رنگ‌های واقعی و متن ضخیم و مورب را نمایش دهد.

ویژگی‌های متن

کامپوننت <Text> ویژگی‌های bold، dim، italic، underline و strikethrough را می‌پذیرد. عناصر تودرتوی <Text> به spanهای دارای سبک در یک خط تبدیل می‌شوند.

<Text>  Deployed <Text bold>acme-web</Text> to <Text color="accent">iad1</Text></Text>

توکن‌های پوسته

ویژگی color مقادیر هگز، نام‌های سادهٔ رنگ‌ها (emerald) و توکن‌های پوسته را می‌پذیرد؛ طیف‌های پالت Tailwind از طریق کلاس‌ها (text-emerald-400) اعمال می‌شوند. توکن‌ها از پوستهٔ فعال پیروی می‌کنند، پس برای هر کاربرد معنایی آن‌ها را ترجیح دهید. یک کامپوننت وضعیت اضافه کنید:

app/status.tsx+15tsx
افزوده‌شده: import { Text } from "@textjs/app";افزوده‌شده: افزوده‌شده: export type DeployStatus = "ready" | "building" | "error" | "queued";افزوده‌شده: افزوده‌شده: export const STATUS = {افزوده‌شده:   ready: { label: "Ready", color: "success" },افزوده‌شده:   building: { label: "Building", color: "warning" },افزوده‌شده:   error: { label: "Error", color: "danger" },افزوده‌شده:   queued: { label: "Queued", color: "subtle" },افزوده‌شده: } as const;افزوده‌شده: افزوده‌شده: export function Status({ status }: { status: DeployStatus }) {افزوده‌شده:   const s = STATUS[status];افزوده‌شده:   return <Text color={s.color} wrap="nowrap">{`● ${s.label}`}</Text>;افزوده‌شده: }

کارت استقرار

کلاس bg-surface کارت را از پس‌زمینه برجسته می‌کند. شناسهٔ استقرار رنگ وضعیت را می‌گیرد، هنگام ساخت مورب می‌شود و در صورت خطا روی آن خط کشیده می‌شود.

app/page.tsx+23-1tsx
حذف‌شده: import { Box, Spacer, Text, useInput } from "@textjs/app";افزوده‌شده: import { Box, Spacer, Text, useAppTheme, useInput } from "@textjs/app";افزوده‌شده: import { Status, STATUS, type DeployStatus } from "./status";افزوده‌شده: افزوده‌شده: const ORDER: DeployStatus[] = ["ready", "building", "error", "queued"];افزوده‌شده: export default function Page() {افزوده‌شده:   const { theme, cycleTheme } = useAppTheme();افزوده‌شده:   const [status, setStatus] = useState<DeployStatus>("ready");افزوده‌شده: افزوده‌شده:   useInput((e) => {افزوده‌شده:     if (e.input === "t") cycleTheme();افزوده‌شده:     if (e.input === "s") setStatus((s) => ORDER[(ORDER.indexOf(s) + 1) % ORDER.length]);افزوده‌شده:   });افزوده‌شده:   return (    <Box className="flex-col grow">      {/* top bar, now with the theme name on the right */}افزوده‌شده:       <Box className="flex-col border rounded px-2 py-1 bg-surface">افزوده‌شده:         <Box className="flex-row gap-2 h-1">افزوده‌شده:           <Text bold>acme-web</Text>افزوده‌شده:           <Status status={status} />افزوده‌شده:         </Box>افزوده‌شده:         <Text color="muted" wrap="truncate-end">feat: stream cells downward</Text>افزوده‌شده:         <Text color={STATUS[status].color} italic={status === "building"} strikethrough={status === "error"}>افزوده‌شده:           dpl_8fK2افزوده‌شده:         </Text>افزوده‌شده:       </Box>    </Box>  );}

ویژگی wrap="truncate-end" پیام‌های طولانی کامیت را به‌جای ادامه دادن در ردیف دوم، با … پایان می‌دهد.

پوسته‌ها

⁦Text.js⁩ با پنج پوسته ارائه می‌شود: ⁦Geist Dark⁩، ⁦OpenCode Dark⁩، ⁦Tokyo Night⁩، ⁦Amber CRT⁩ و ⁦Geist Light⁩. برای جابه‌جایی چرخشی میان آن‌ها، کلید t را در کنسول فشار دهید. کل فریم با پالت جدید دوباره ترسیم می‌شود، چون هر رنگ در نمونه‌های بالا یک توکن است.

امتحان کنید

این Acme Deploys در پایان فصل است که در DevTools اجرا می‌شود. روی پد کلیک کنید، سپس از کلیدهای زیر استفاده کنید.

▼ 03 · متن و سبک‌دهی

باز کردن کنسول

⌘⌥J
CtrlShiftJ
⌘⌥K
CtrlShiftK
⌘⌥C

برنامه در DevTools رندر می‌شود.ابتدا گزینهٔ «نمایش قابلیت‌ها برای توسعه‌دهندگان وب» را در تنظیمات Safari ← پیشرفته فعال کنید. سپس اینجا کلیک کنید و ⁦t⁩ را فشار دهید.

باز کردن در رایانه

این برنامه در کنسول DevTools رندر می‌شود که به مرورگر دسکتاپ نیاز دارد.

آزمون

2 پرسش

برای تکمیل فصل به همهٔ پرسش‌ها پاسخ دهید.

Why use color="success" instead of a hex value?

 

What does wrap="truncate-end" do?