טקסט ועיצוב

עיצוב כרטיס פריסה עם צבעים, מאפייני טקסט וטוקנים של ערכת נושא.

האפליקציה של הפרק הזה רצה במסוף. יש לפתוח אותו עם ⌘⌥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 מקבל ערכי hex, שמות צבעים רגילים (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?