מה חדש ב-Text.js
כל השינויים הבולטים ב-Text.js מתועדים בקובץ זה.
תוספות
- textjs.org: ספרדית, צרפתית, גרמנית, פורטוגזית ברזילאית, קוריאנית וסינית מפושטת ומסורתית יצאו ממצב טיוטה בכתובות textjs.org/es, /fr, /de, /pt-br, /ko, /zh-cn ו-/zh-tw. בורר השפה בתחתית האתר וכפתור שפת הדפדפן מציעים אותן, כמו את היפנית. מנועי חיפוש מאנדקסים את הדפים המתורגמים ומתאימים כל אחד לגרסתו באנגלית.
- textjs.org: איטלקית, רוסית, טורקית, פולנית, אינדונזית, וייטנאמית והינדית יצאו ממצב טיוטה בכתובות textjs.org/it, /ru, /tr, /pl, /id, /vi ו-/hi. בורר השפה בתחתית האתר וכפתור שפת הדפדפן מציעים אותן, כמו את השפות האחרות. מנועי חיפוש מאנדקסים את הדפים המתורגמים ומתאימים כל אחד לגרסתו באנגלית.
- textjs.org: ערבית, עברית, פרסית ואורדו יצאו ממצב טיוטה בכתובות textjs.org/ar, /he, /fa ו-/ur. בורר השפה בתחתית האתר וכפתור שפת הדפדפן מציעים אותן, כמו את השפות האחרות. מנועי חיפוש מאנדקסים את הדפים המתורגמים ומתאימים כל אחד לגרסתו באנגלית.
שינויים
@textjs/react:<FocusPad>ו-<ViewportControl>מציגים את התוויות ברוחב הקבוע שלהם באמצעות רשימת הגופנים--monoשל העמוד כשהיא מוגדרת, ומשתמשים ב-Geist Mono כחלופה כמו קודם. עמוד עם תוויות בערבית או בעברית יכול להוסיף ל---monoגופנים לכתב שלו.
תיקונים
- textjs.org: בטלפונים, קוד בתוך השורה שאורכו חורג מהשורה נשבר לשורות במקום להרחיב את העמוד. textjs.org/docs/internationalization היה רחב מדי ב-92 px במסך ברוחב 390 px.
תוספות
@textjs/react:<FocusPad messages>מחליף כל אחת מהמחרוזות המובנות של המשטח, עבור אתרים מתורגמים. הוא מכסה כל שורה, את תוויות קורא המסך ואת בקרת גודל המסוף. גם<TextCanvas>ו-<ViewportControl>מקבליםmessages. הרכיב<ViewportControl>משתמש רק במפתחות של בקרת הגודל. מחרוזות שמכילות ערך, כגון "אחר כך ללחוץ כאן וללחוץ על ↑ ↓.", הן פונקציות שמחזירות את המשפט השלם.defaultFocusPadMessagesמכיל את הטקסט באנגלית. ראו תרגום משטח המיקוד.@textjs/react: בדפים מימין לשמאל, משטח המיקוד משאיר סמלי מקשים כגון ⌘ ⌥ J וגדלי מסוף כגון 120×36 משמאל לימין, והופך את בקרת הגודל ואת סרגל השלבים בתמונת ראי. בדפים בסינית וביפנית הוא משמיט את הרווח בין שני המשפטים שלו; בקוריאנית הרווח נשאר.- textjs.org: הכתובת textjs.org/ja יצאה ממצב טיוטה. בורר השפה בתחתית האתר פותח את אותו דף באנגלית או ביפנית. דפדפן שמוגדר ליפנית מקבל כפתור קריאה ביפנית, ודפדפן באנגלית בכתובת textjs.org/ja מקבל כפתור קריאה באנגלית. הכפתור מפסיק להופיע לאחר בחירת שפה או סגירתו. מנועי חיפוש מאנדקסים את הדפים המתורגמים ליפנית ומתאימים כל אחד לגרסתו באנגלית.
- textjs.org: בכתובת textjs.org/ja, משטח המיקוד מוצג ביפנית בכל דף, כולל התוויות שמתחת למקשים של כל הדגמה.
שינויים
@textjs/core: המסופים של Chromium ושל Firefox מנקים פלט של ספרייטים מונפשים ב-16 MB במקום ב-4 MB, כך שבכתובת textjs.org/doom מופיע "המסוף נוקה" בערך כל 19 שניות במקום כל 4.5. ב-Safari ובספרייטים שמצוירים כחצאי בלוקים▀, הסף נשאר 4 MB. שיא זיכרון הערימה של הדף בכתובת textjs.org/doom עולה מ-10.8 MB לכ-12–13 MB.- textjs.org: דף תיעוד מוריד רק את ה-Markdown שלו במקום את כל 33 הדפים, כך שדפי תיעוד באנגלית טוענים 43–47 KB פחות JavaScript (gzip), ודפי תיעוד ב-/ja טוענים 60–64 KB פחות. ריחוף מעל קישור לדף תיעוד אחר או העברת המיקוד אליו מביאים את הדף מראש, כך שהוא עדיין נפתח מיד.
תיקונים
- textjs.org/ja: החיפוש באמצעות ⌘K מציג את כותרות התיעוד ביפנית ומתאים אליהן שאילתות ביפנית. בעבר הוא הציג כותרות באנגלית מתחת לשמות דפים ביפנית. שמות באנגלית עדיין מוצאים דפים:
routingמוצא את ルーティング ו-open the consoleמוצא את コンソールを開く. - textjs.org: דוגמת תיעוד שרצה במסוף מציגה שוב את השינויים שלה בתצוגה המקדימה בדף בכתובת textjs.org/ja, וגם בדוגמת הטקסט הדו-כיווני בכתובת textjs.org/docs/internationalization. בשורה שמעל דוגמה במסוף מופיע כעת "▼ תיעוד › מונה" במקום "▼ תיעוד › מבוא › מונה".
תוספות
- textjs.org/doom משמיע את אפקטי הקול של Doom, עם הצידוד בסטריאו ודעיכת העוצמה לפי מרחק של Doom עצמו. הצליל מתחיל בלחיצה הראשונה בעכבר או במקלדת בדף, מושהה יחד עם המשחק, ומציית להגדרת עוצמת האפקטים בתפריט אפשרויות → עוצמת קול של Doom. אין מוזיקה.
שינויים
@textjs/react,@textjs/app: רמז המיקוד ("יש ללחוץ על הדף כדי להשתמש במקלדת") הוא פס ענברי עם טקסט שחור מודגש בכל ערכת נושא. בעבר הוא השתמש בצבעי ערכת הנושא בהיפוך. בכל פעם שהוא מופיע, הוא מהבהב 4 פעמים במשך כ-6 שניות, ואז נשאר ענברי. הוא אינו מהבהב כשצמצום תנועה מופעל. כל מחזור הבהוב רושם עד 8 פריימים נוספים במסוף.- textjs.org: Doom עבר לכתובת textjs.org/doom. הכתובת textjs.org/playground/doom מפנה לשם.
תיקונים
@textjs/core,@textjs/react: החלונית "בעיות" של Chrome כבר אינה מדווחת "לרכיב שדה בטופס צריך להיות מאפיין id או name" בכל דף. רכיב ה-<textarea>המוסתר של המקלדת נקראtextjs-input, ולרכיב ה-<select>של גודל המסוף ב-ViewportControl(גם בתוךsizeControlשלFocusPad) ישidוהשםtextjs-console-size. רכיב ה-<textarea>של המקלדת גם מונע הפעלה של 1Password, LastPass, Bitwarden ו-Dashlane.- textjs.org: כותרת המסוף בכתובת textjs.org/doom מציגה "Text.js / doom" במקום "Text.js / playground / doom".
- textjs.org/doom: חלון צר כבר אינו משאיר "·" מיותר אחרי "הצגת המקור".
- textjs.org: בחלון צר, בורר ההדגמות של Playground דועך בקצה שבו יש עוד הדגמות לגלילה, במקום לקטוע את ההדגמה האחרונה באמצע מילה.
- textjs.org/doom רץ בקצב של Doom, 35 טיקים לשנייה. בתוך שלב הוא רץ במהירות פי 3.8 במסך של 60 Hz (131 טיקים לשנייה) ופי 5.5 ב-120 Hz (192), מפני שהדף זיהה בטעות את קריאות השעון הנוספות ש-Doom מבצע בזמן ציור שלב כהמתנה פעילה, וקידם את השעון של Doom בטיק אחד בכל פריים אנימציה ובכל קריאה חוזרת של טיימר.
תוספות
@textjs/react:<Image renderMode="halfblock">מצייר חצאי בלוקים▀בכל מקום, כפי שעשה<Image>ב-1.3.@textjs/core/experimental:drawPixelsמקבלencoding: "rgba"לספרייט ללא אובדן נתונים עם אלפא רכה ויותר מ-256 צבעים, ופונקצייתfallbackשצובעת את התאים בכל מקום שבו אי אפשר להציג את הספרייט.@textjs/app: curl, Wget, HTTPie ו-xh מקבלים את הפריים הראשון של דף כטקסט ANSI בצבע מלא במקום את דף ה-HTML, ב-text dev, ב-text startובמתאמיםbun,vercelו-cloudflare. הפקודהtext buildמרנדרת מראש פריימים לדפים סטטיים.text startו-bunמרנדרים דפים דינמיים ודפים מרונדרים בצד השרת לפי בקשה, ומשיבים לנתיבים לא מוכרים עם דף האפליקציה "לא נמצא" ו-404. ברירת המחדל לפריימים היא 80 × 24. לשינוי הגודל או לכיבוי הפריימים, יש להשתמש ב-ansiבקובץtext.config.tsאו ב-export const ansiבדף. המתאםstaticמגיש ל-curl את דף ה-HTML. ראו curl ולקוחות טרמינל.@textjs/app/ansiמייצא אתwantsAnsiואתansiResponseלשרתים שאינם משתמשים ב-text startאו במתאם, ו-@textjs/reactמייצא אתframeToAnsi.- textjs.org: גרסה יפנית בטיוטה בכתובת textjs.org/ja, שמתחילה בתיעוד המבוא, ההתקנה והניתוב ובממשק האתר. פסקאות שלא תורגמו מוצגות באנגלית. הגרסה עדיין אינה מאונדקסת ואינה מוצעת בבורר השפה.
שינויים
@textjs/react:<Image>מצייר כעת ספרייט פיקסלים במסופים של Chromium ושל Firefox, עם עד 8 × 16 פיקסלים לתא באמנות פיקסלים ו-4 × 8 בתמונות. זה מפר במכוון את ההבטחה של מדיניות התמיכה שפריימים ייראו זהים בין גרסאות משנה. כדי לשמור על חצאי הבלוקים של 1.3, יש להעבירrenderMode="halfblock". Safari, טרמינלים (כוללtext run), פלט ANSI וטקסט פשוט, ודפים מרונדרים בצד השרת (runtime = "server") עדיין מציירים חצאי בלוקים.@textjs/app: סקריפטים ובדיקות זמינות שמביאים דפים באמצעות curl, Wget, HTTPie או xh מקבלים כעת טקסט ANSI. כדי להמשיך לקבל HTML, יש לשלוחAccept: text/html, או להגדירansi: falseבקובץtext.config.ts.@textjs/app: רכיבי שרת אסינכרוניים כבר אינם רצים בזמן ש-text buildמרנדר מראש את מעטפת הדף. הם מציגים את תוכן הגיבוי של<Suspense>, כמו קודם, בלי להתחיל את בקשות הנתונים שלהם בזמן הבנייה.@textjs/app: נגן הפריימים לדפים מרונדרים בצד השרת קטן ב-3 KB, עם 22.4 KB ב-gzip במקום 25.4 KB עבורexamples/dashboard. הוא כבר אינו כולל את מתודות הציור שלCellBuffer, גבולות תיבות או קיטוע טקסט.
תיקונים
@textjs/core: תרשימים ומחווני טעינה שומרים על הרשת שלהם ב-Windows 10. גופן המסוף שלו הוא Consolas, שאין בו בלוקים של שמיניות ▁▂▃▅▆▇, רבעים, ברייל, ▶ או ✓, והגליפים החלופיים שלהם גרמו לשורות לחרוג מהקצה הימני של הפריים.CssConsoleDriverמודד כעת, פעם אחת, אילו מהגליפים האלה גופן המסוף מצייר בסטייה של יותר מחמישית תא, ומצייר אותם כגליף הקרוב ביותר שקיים ב-Consolas:_▄▌█לשמיניות, חצאי בלוקים לרבעים ולברייל,►◄√×לחצים, סימני אישור וסימני ביטול. גופנים שמתאימים להם, כגון Cascadia Mono ב-Windows 11 ו-Menlo ב-macOS, מציירים את המקור.measureText: falseמכבה זאת.@textjs/core: אין עוד קווים אנכיים דקים ברוחב 1 px בין רקעים סמוכים ב-DevTools של Chrome ושל Edge, כגון ליד "חשבון" ו-"כמות" בכתובת textjs.org/coffee. Chromium מצמיד כל span של%cלפיקסלים של המכשיר בנפרד, והיה עלול להשאיר את הפיקסל שבו שני span נפגשו ללא שיוך לאף אחד מהם.CssConsoleDriverמרחיב כעת את הרקע של span ב-1 px מתחת לשכן אטום מימין (padding-right:1px;margin-right:-1px). הפריימים ב-Firefox וב-Safari אינם משתנים.@textjs/core: ספרייטים של<Image>ב-Chrome וב-Edge פועלים לפי אותו כלל של 1 px כמו טקסט. טקסט משמאל לספרייט שקוף כבר אינו צובע פס של 1 px מהרקע שלו מעל הקצה השמאלי של הספרייט, וספרייט נצמד ללא רווח לטקסט אטום מימינו, כולל טקסט בצבעים הפוכים. ספרייט שנמצא לבדו בשורות שלו מגיע כעת לקצה הימני של הפריים, כמו שורות הטקסט שמעליו ומתחתיו.@textjs/react:<ConsoleMirror>מצייר תמונה לצד טקסט כחצאי בלוקים, כמו המסוף, במקום כתמונה.
תוספות
@textjs/react/experimentalמייצא את<Pixels>למאגרי פריימים חיים ואתuseKeyStateלמקשים שמוחזקים לחוצים;@textjs/core/experimentalמייצא אתdrawPixels. אלה עשויים להשתנות בגרסת משנה.- textjs.org/playground/doom: אפשר לשחק בפרק התוכנה השיתופית של Doom במסוף של DevTools.
@textjs/react,@textjs/app: כשהדף אינו ממוקד, השורה האחרונה בפריים המסוף מציגה "יש ללחוץ על הדף כדי להשתמש במקלדת", כך שברור למי שלוחצים על האפליקציה במסוף מדוע המקשים הפסיקו לפעול. הרמז מופיע כשלאפליקציה יש מטפלuseInputאוusePasteאו יעד מיקוד, במסוף הדפדפן בלבד, כולל בנתיבים מרונדרים בצד השרת. תצוגות מראה מוטמעות והתצוגה המקדימה של VS Code אינן מציגות אותו. לכיבוי, יש להגדירfocusHint: falseבקובץtext.config.tsאו ב-createConsoleRoot.@textjs/react:usePageFocus()מחזיר אם הדף ממוקד. כדי לקבוע מתי האפליקציה זקוקה למקלדת, יש להגדירfocusHint: falseולרנדר<FocusHint active={…}>. הקודuseInput(handler, { ambient: true })מסמן קיצור מקשים פעיל תמיד שאינו מציג את הרמז בפני עצמו.
שינויים
@textjs/core: בזמן שספרייט של<Pixels>מונפש,ConsoleRendererמקבץ פריימי מפתח כל 51 ms ב-Chromium, קוצב פריימים ל-33 ms ב-Safari, ומנקה פלט שנוסף לסוף ב-CssConsoleDriverב-4 MB (SPRITE_MAX_BYTES). ספרייטים סטטיים ואפליקציות טקסט בלבד שומרים על הקצב הקיים ועל סף הניקוי של 300 פריימים.
תוספות
@textjs/core:bindTextSink(element, onText)קורא טקסט שאושר באמצעות IME או מקש מת מתוך textarea או שדה קלט מוסתרים, פעם אחת לכל אישור ולעולם לא באמצע ההרכבה.engine.bindTextSink(element)מחבר textarea שמרונדר באופן עצמאי ל-InputEngine. שניהם מחזירים פונקציה שמסירה את המאזינים.@textjs/app:POST /__textjs/inputמקבל{ type: "text", text }לטקסט של IME ומקשים מתים.InputMessageו-parseInputMessageבתוך@textjs/app/frame-protocolכוללים אותו.
שינויים
@textjs/app: middleware ומטפלי נתיבים מקבלים את הנתיב הקנוני./docs/ו-/docs//introמגיעים בתור/docsו-/docs/intro, כך ש-middleware שמפנה כדי להוסיף לוכסן בסוף מפנה כעת ללא סוף. יש להסיר את ההפניה הזאת. מקטע דינמי אינו יכול להכיל לוכסן מקודד:/files/a%2Fbמחזיר400.@textjs/app: עם middleware, האפשרות--adapter cloudflareשולחת כל בקשה ל-worker, כולל נכסים ששמם כולל גיבוב, ועםbasePathהיא שולחת גם בקשות מחוץ לנתיב הבסיס. כל בקשה שמפעילה את ה-worker היא הפעלה אחת של Functions ונספרת במכסת הבקשות של Workers. בתוכנית Workers Free, יש להגדיר את פרויקט Pages להיכשל במצב סגור (הגדרות → סביבת ריצה → כשל פתוח / סגור), אחרת Pages מגיש את הקבצים ללא middleware לאחר שהמכסה היומית נגמרת.
תיקונים
- שיטות קלט IME בסינית, ביפנית ובקוריאנית ומקשים מתים פועלים במסופים המוטמעים של textjs.org. המסופים ניקו את ה-textarea באמצע ההרכבה, ולכן האפליקציה קיבלה את האותיות הגולמיות או תו שגוי.
<FocusPad>שומר על מיקוד המקלדת באפליקציה אחרי לחיצה. בעבר הוא איבד את המיקוד מיד, ולכן שיטות קלט IME בסינית, ביפנית ובקוריאנית לא יכלו להרכיב טקסט.- מקשים מתים שאינם יוצרים הרכבה (ב-Windows וב-Linux ללא IME) מגיעים לאפליקציה כשה-textarea המוסתר ממוקד. בפריסת US-International, לחיצה על
'ואז עלeנותנתé, ולחיצה על'ואז עלtנותנת't.InputEngineחסם את אירוע ה-keydown שמשלים מקש מת, ולכן הדפדפן לא הכניס דבר.DeadKeyTrackerבתוך@textjs/coreמאפשר לאירוע ה-keydown הזה לעבור, וגם התצוגה המקדימה של VS Code משתמשת בו. - התצוגה המקדימה של VS Code מעבירה טקסט של IME ומקשים מתים, שבעבר השמיטה, וכבר אינה מעבירה לאפליקציה מקשים מתים או הקשות של הרכבת IME. עם שרת
text devמתוך@textjs/appבגרסה 1.1.0 או מוקדמת יותר, היא שולחת את הטקסט כהקשות מקשים או כהדבקה. @textjs/core:InputEngine.handleTextInputמתעלם מטקסט כל עודshouldCaptureמחזירfalse, כפי שכבר קרה בקלט מקשים והדבקה.text devמאגד מראש את@textjs/app/live-stubואת@textjs/app/live-player. אפליקציה עם דףruntime = "server"מצאה אותם רק אחרי טעינת הדף הראשונה, ולכן Vite איגד אותם שוב באמצע הטעינה, מה שגרם לשגיאות 404 עבור מקטעים לא מעודכנים ול-"קריאה לא תקינה להוק" משני עותקים של React.- תרשימים ומחווני טעינה מתאימים לפריים ב-Windows. ב-Consolas אין בלוקים ▁▂▃▅▆▇, רבעים, ברייל, ▶ או ✓, ולכן Windows צייר אותם בגופנים חלופיים ברוחב של עד 1.8 תאים, ושורות התרשימים חרגו מהקצה הימני של הפריים. רשימת גופני המסוף היא כעת
"SF Mono",Menlo,"Cascadia Mono",Consolas,monospace, ו-Windows 11 מצייר את כל הפריים ב-Cascadia Mono. גם<ConsoleMirror>, התצוגה המקדימה של VS Code ותצוגת הפריים של תוסף DevTools מציבים את Cascadia Mono לפני Consolas. @textjs/opencode: תחת Node ב-Windows, הגשר מוצא התקנה של OpenCode שבוצעה באמצעותnpm i -g opencode-ai. Node אינו יכול להפעיל את קובץ התיווךopencode.cmdשל npm לפי שם, ולכן הגשר התנהג כאילו OpenCode אינו מותקן. כעת הוא מחפש ב-PATHעם כל סיומת שלPATHEXTומפעיל קובצי תיווך מסוג.cmdדרךcmd.exe. תחת Bun (bunx) זה כבר פעל.text buildפועל ב-Windows. הוא נכשל בכל תבנית, עםCould not resolve entry module "virtual:textjs/api"או ללא הודעת שגיאה.text buildמדפיס את השגיאה כשרינדור מראש של מעטפות מסוף או בניית נתיבים מרונדרים בצד השרת נכשלים. בעבר הוא יצא עם קוד 1 אחרי השורה "הבנייה נכשלה" של Vite, ללא הסיבה.text devב-Windows מרנדר מחדש נתיבים מרונדרים בצד השרת בעת עריכת קובץ, וטוען מחדש את הדפדפן כשדף משנה את הייצואruntimeשלו.text devב-Windows כבר אינו מפעילmiddleware.tsעבור קובצי מקור ש-Vite מגיש כמודולים, כגון/app/page.tsx, כך שהפניית אימות כבר אינה משבשת את לקוח הפיתוח.text runו-text mcpפועלים כשנתיב הפרויקט מכיל שם קצר של Windows 8.3, כגוןC:\Users\RUNNER~1. הם הציגו "שגיאת אפליקציה" מפני שה-CLI והאפליקציה טענו את@textjs/appפעמיים.- ספריית
dist/שנבנתה ב-Windows מגישה את הדפים שרונדרו מראש ב-Linux וב-macOS. מניפסט הנתיבים החיים שמר את הנתיבים שלו עם לוכסנים הפוכים. text buildפועל כשהאפשרותviteבקובץtext.config.tsמגדירהbuild.rollupOptions.input. הקלט החליף את נקודות הכניסה של חבילות ה-API, הנתיבים המרונדרים בצד השרת והמתאמים, והבנייה נכשלה.text devיוצא כשעוצרים אותו בשניות הראשונות אחרי טעינת דף, ו-server.close()מושלם. סגירת Vite בזמן שביצע אופטימיזציה לתלויות שהתגלו זה עתה לא הסתיימה מעולם (vitejs/vite#22934).
אבטחה
@textjs/appבגרסה 1.1.0 ובגרסאות מוקדמות יותר אפשר לבקשה לדלג עלmiddleware.tsבאמצעות כתיבה אחרת של נתיב מוגן, כגון/ad%6din,/api//adminאו/admin%2Fx. ה-middleware התאים את הנתיב כפי שנשלח, ואילו דפים, מטפלי נתיבים וקבצים סטטיים אותרו לאחר פענוחו (פעמיים עבור מטפלי נתיבים). הדבר השפיע עלtext dev, עלtext startועל בניות עם--adapter bun, עםvercelועםcloudflare. בניות סטטיות אינן יכולות להשתמש ב-middleware ואינן מושפעות. יש לשדרג ל-1.2.0, ואז לבנות ולפרוס מחדש:.vercel/outputעבור Vercel,dist/עבור Cloudflare Pages וכלdist/עבור Bun (יש להפעיל מחדש את השרת). יש למחוק פריסות ישנות שעדיין נגישות בכתובות שלהן, או להגן עליהן.- כל מארח מחשב כעת שם נתיב קנוני אחד לכל בקשה ומשתמש בו עבור מנגנון ההתאמה,
request.nextUrlוכל חיפוש. הוא מפענח רצפים מקודדים באחוזים ומקודד מחדש את הנתיב כפי ש-new URL()כותב אותו, פותר מקטעי.ו-.., ומסיר לוכסנים חוזרים ולוכסנים בסוף. נתיבים עם%2F, עם%5Cאו עם קידוד אחוזים לא תקין מקבלים400. הפקודותtext dev,text startוהמתאם של Bun מגישים קבצים סטטיים רק בשם המדויק שלהם, כך שב-macOS וב-Windows הנתיב/ADMIN/report.txtכבר אינו מגיש אתpublic/admin/report.txt. - דפוסי התאמה, מקורות לשכתוב, מקטעי נתיב ו-
basePathמושווים באותה צורה מקודדת כמו נתיבי הבקשות, כך ש-matcher: "/café/:path*"ו-"/caf%c3%a9/:path*"מגינים על/caf%C3%A9, ו-"/ops%40corp/:path*"מגן על/ops@corp. Middleware ללא דפוס התאמה אינו רץ מחוץ ל-basePath. דפוס התאמה עם לוכסן בסוף, כגון/admin/, מתאים ל-/admin, ותנאיhostמתעלם מנקודה בסוף שם המארח. - הפעלה חיה של נתיב
runtime = "server"אינה מרנדרת דף ש-middleware שכתב לנתיב או לשאילתה אחרים, כגון שכתוב מ-/restrictedל-/login, או השיב לו בסטטוס שגיאה כגוןNextResponse.next({ status: 403 }). --adapter vercel: פונקציית מטפל הנתיב מקבלת את הנתיב שלה בכותרת בקשה שרק הנתיבים שנוצרו מגדירים, כך ש-/api/x/%252e%252e/adminכבר אינו מגיע ל-/api/admin, ואף צורת כתיבה של/_textjs/*אינה מפעילה את הפונקציה. הנתיבים שנוצרו מותאמים תוך הבחנה בין אותיות גדולות לקטנות, כך ש-/LEGACY/xכבר אינו מגיע לשכתוב של/legacy/:path*שה-middleware מעולם לא בדק. כל נתיב שעשוי לא להיות קנוני, כולל תווים גולמיים כגון{, עובר דרך ה-edge middleware, שנכלל כעת בכל בניית Vercel ומשכתב את הבקשה לנתיב הקנוני שלה.--adapter cloudflare: קבצים סטטיים מאותרים באמצעות הנתיב המקודד, כך ש-/x/%252e%252e/admin/report.txtכבר אינו מגיש את/admin/report.txt. עםbasePath, קבצים שמחוצה לו כבר אינם מוגשים ללא ה-worker.text devאינו מגיש קובציpublic/תחת/public/…או/@fs/…, קובצי מקור המיועדים לשרת בלבד כגוןmiddleware.tsו-text.config.tsבאותיות גדולות או קטנות אחרות, תחת נתיב/@fs/מקודד, כבקשות מודול ללא סיומת (/text.config?import) או דרך שכתוב בהגדרות, או מטפלי נתיבים מחוץ ל-basePath.
תוספות
- Text.js מרנדר במסופים של Firefox ושל Safari.
CssConsoleDriverמזהה את הדפדפן באמצעות בדיקות תכונות CSS. במקום שבו span של%cנשארים בתוך השורה, הוא כותב גובה שורה של 14 px ללא שוליים, מכבה גלישת שורות רכה ומשתמש בווילון עםline-height: 100vh. - שינוי גודל רספונסיבי משאיר מקום לעמודת קישורי המקור של Firefox. Safari מציב את Menlo ראשון ברשימת הגופנים: הדפים שלו אינם יכולים להשתמש ב-SF Mono שהותקן בידי המשתמש, אף ש-Web Inspector עשוי לצייר באמצעותו.
- לבחירת מסוף, יש להעביר
browser: "chromium" | "firefox" | "safari"אלcreateConsoleRoot, אלConsoleRendererאו אלCssConsoleDriver. - מעטפות שרונדרו מראש כוללות את ה-CSS לשני סוגי המסוף.
<FocusPad>מציג את קיצור המקשים למסוף של דפדפן המבקר: ⌘⌥K או Ctrl+Shift+K ב-Firefox, ו-⌘⌥C ב-Safari עם הערה להפעיל את "הצגת תכונות למפתחי אתרים".- רכיב
<FocusPad>שרונדר מראש מרנדר את קיצור המקשים של כל דפדפן. יש להגדירdata-browser(firefoxאוsafari) ו-data-os(mac) על<html>לפני הצביעה הראשונה כדי להציג רק את הקיצור המתאים למבקר; בלעדיהם הוא מציג את קיצור המקשים של Chrome ב-Windows וב-Linux עד להידרציה.
תיקונים
- ⌘⌥K ו-Ctrl+Shift+K (קיצור המקשים למסוף של Firefox) עוברים לדפדפן במקום להגיע לאפליקציה.
- שינוי גודל רספונסיבי לומד סרגלי כלים של הדפדפן שגובהם פחות מ-60 px (של Safari ושל Firefox) בזמן ש-DevTools סגור, כך שמסוף שמעוגן בתחתית מקבל כל שורה שנכנסת בו.
<FocusPad>משתמש בגובה שנלמד כדי לקבוע אם DevTools מעוגן. <FocusPad>כותב את קיצורי המקשים של Windows ושל Linux במצב הלחיצה שלו בתורCtrl+Shift+J.
אבטחה
@textjs/opencode: הגשר מדפיס קוד התאמה כשהוא מופעל, והדף textjs.org/opencode מבקש אותו בחיבור הראשון. עד שדף שולח את הקוד, הגשר משיב428ואינו מעביר דבר ל-OpenCode, אפילו ממקורות מורשים. כל קוד תקף להפעלה אחת של הגשר, האסימון שהוא מחזיר פועל רק מהמקור שביצע את ההתאמה, ועשרה קודים שגויים נועלים את ההתאמה עד להפעלה מחדש של הגשר.@textjs/opencode: פריסות תצוגה מקדימה של textjs.org ב-Cloudflare Pages כבר אינן מורשות כברירת מחדל. כדי להשתמש באחת מהן, יש להעביר--allow-origin.- textjs.org/opencode מסרב להתחבר לגשרים מתוך
@textjs/opencodeבגרסה 1.0.x. יש להריץbunx @textjs/opencode@latest proxy. - textjs.org שולח Content-Security-Policy,
Strict-Transport-Security,Cross-Origin-Opener-Policyו-Cross-Origin-Resource-Policy. הדף של OpenCode מתחבר רק לשרתים ב-127.0.0.1או ב-localhost.
- Text.js מרנדר במסופים של Firefox ושל Safari.
תוספות
- OpenCode Lite: סקירת הבדלים לפי קובץ, עיון בהיסטוריית הנחיות, הגדרת קיצורי מקשים עם מקש מוביל וניהול חשבונות ספקים ושרתי MCP. ארגז החול כולל חלונית טרמינל עם תסריט מוגדר מראש.
- OpenCode Lite: יש להקליד
/כדי לחפש פקודות או@כדי לצרף קובץ מהפרויקט. Tab פותח ספרייה בתפריט הקבצים. הפעלות מחוברות מחפשות בפרויקט של השרת; ארגז החול מחפש במאגר הדוגמה שלו. - textjs.org/coffee: הדגמת terminal.shop מתאימה את עצמה לגודל המסוף כמו אפליקציית ה-SSH, עם ה-layout הקטן, הבינוני והגדול שלה וההודעה "הטרמינל קטן מדי" מתחת ל-20 × 10. החשבון מוסיף אמצעי תשלום, פרופיל עם שם שניתן לעריכה ושינויים בלוח הזמנים השבועי למנויים. כשאין כניסה לחשבון, העגלה והשאלות הנפוצות, המידע הכללי ומידע ניפוי הבאגים של החשבון נפתחים ללא כניסה.
ביצועים
@textjs/react:Boxו-Textמעבירים למנגנון ההתאמה מאפייני סצנה שסוננו מראש, במקום להעתיק אובייקטי מאפיינים בעת הרכבה ועדכון.@textjs/core:SceneNode.getTextModel()מדלג על סריקות עץ בתוך השורה בעלי<Text>שמכילים מחרוזת אחת, ומשתמש מחדש במאגריrunOfמסוגUint16Arrayמאופסים שנשמרו במטמון.CssConsoleDriverסורק תאי BMP רצופים עם סגנון תואם בלולאה פנימית, ו-ConsoleRendererמדלג עלcountYogaNodes()בפריימים שלא השתנו.- textjs.org: נתיבים ולשוניות המלווה של המסוף מפוצלים למקטעי JS ו-CSS לפי נתיב. תמונות החנות מקודדות מחדש מקובצי המקור ב-
photos/final, ותמונות מוצר משניות נטענות בריחוף או בהחלפת שקופית.
תיקונים
<ViewportControl>משתמש ב-minWidthבפיקסלים במקום ב-20chומפרט את הגופנים החלופיים בעלי המידות התואמות לצד<FocusPad>, כך שבורר הגודל שומר על רוחבו כש-Geist Monoנטען.
תוספות
@textjs/opencode: הגשר של textjs.org/opencode כחבילה עצמאית ללא תלויות. יש להריץbunx @textjs/opencode proxy(אוnpx) כדי להפעיל אותו ללא התקנת Vite, React ו-MCP SDK. הפקודהtext proxyעדיין פועלת ומפעילה את אותו גשר.
שינויים
- חבילת הפריימוורק וה-CLI היא כעת
@textjs/app, לאחר שינוי השם מ-@textjs/nextכדי שהשם לא ירמוז על שילוב רשמי עם Next.js. החבילה@textjs/nextהוצאה משימוש לטובת@textjs/appואינה מקבלת גרסאות חדשות. למעבר, יש להריץbun remove @textjs/next && bun add @textjs/appולהחליף את@textjs/nextב-@textjs/appבייבואים, כולל נתיבי משנה כגון@textjs/app/link. ה-CLI עדיין נקראtext, ותבניות create-text-app תלויות ב-@textjs/app. - כפתור הגלולה
[▼]ומפקח הרכיבים במסוף נקראים Dev Overlay, וכותרת המפקח מציגה▼ Dev Overlay · Turbolog. השם Text.js DevTools מתייחס רק לתוסף של Chrome.<TextDevOverlay>והמאפיינים שלו לא השתנו. - מטפלי נתיבים שמייצאים
dynamic = "error"נכשלים עםTX031. Text.js התייחס אליו כאל"force-static"בלי לבדוק אם המטפל קורא את הבקשה, שזו משמעות הערך ב-Next.js. יש להשתמש ב-"force-static".
תיקונים
text startמשיב ל-Hostחסום עםTX028, כמוtext dev. כל שרת מציין את שם ההגדרה שהוא קורא:vite.server.allowedHostsעבורtext devו-server.allowedHostsעבורtext start.- textjs.org: פרק הפריסה במדור הלמידה כבר אינו מורה להוסיף שכתוב ב-
vercel.json. ב-Vercel וב-Cloudflare Pages, הפקודהtext buildכותבת בעצמה את קובץ הגיבויindex.html. דוגמת השכתוב משתמשת כעת ב-_redirectsשל Netlify. eslint-plugin-textjs: הכללroute-handler-exportsמאפשר את הייצואיםdynamicו-revalidateבקובץroute.ts, והכללvalid-route-moduleבודק שם ערכיdynamic.
תוספות
- textjs.org: סרטון מתנגן של פרק במדור הלמידה עובר לנגן קטן בפינה כשגוללים מעבר לו. כפתור הכתוביות שמתחת לכל סרטון מפעיל או מכבה כתוביות וזוכר את הבחירה.
<TextDevOverlay>מקבל את המאפייניםpill,shortcutו-shell, כך שאפליקציות ללא App Router יכולות להרכיב את מפקח הרכיבים עם מקשים ובקרות ערכת נושא משלהן.<FocusPad>מקבלbanner, שמוצג כשורה הראשונה של ההודעה (למשל לוגו טקסטואלי של אפליקציה) ומעל ההודעה במכשירי מגע.
שינויים
- textjs.org: בורר Playground מציג לוח בקרה, הזרמה, נחש, OpenCode וקפה (terminal.shop). לכל הדגמה יש כתובת משלה: OpenCode נמצא ב-
/opencodeו-terminal.shop ב-/coffee, והלוגואים הטקסטואליים שלהם מופיעים בראש ההודעה. המונה והטופס הועברו אל מחוץ ל-Playground; התיעוד עדיין מפעיל את שניהם כדוגמאות חיות. - ל-
<FocusPad>יש layout חדש. כל מצב מציג סרגל התקדמות בן שלושה חלקים, כותרת, רכיב גדול אחד ושורת טקסט. לפני פתיחת המסוף, הרכיב הגדול הוא קיצור המקשים של DevTools. בהמתנה ללחיצה, זהו מצביע. כשהאפליקציה פעילה, אלה ה-hintsשלה כסמלי מקשים שנדלקים כשמתקבלות הקשות, ומקשים ללא רמז מוצגים מתחת. תוויות השלבים, תג ה-"פעיל" הנפרד והשורה "יש לצפות במסוף." הוסרו. שורות מופיעות בהדרגה בשינויי מצב, לעולם לא בצביעה הראשונה, והתנועה כבויה תחתprefers-reduced-motion. טקסט משני עומד בדרישות הניגודיות של WCAG AA בשני מצבי המראה, ובורר גודל המסוף מציג טבעת מיקוד כשמגיעים אליו באמצעות המקלדת. - textjs.org: ה-Playground משתמש ב-layout החדש של
<FocusPad>. ההדגמה הנוכחית בבורר מקבלת את המשטח של סמלי המקשים, שדה הפקודה של OpenCode תואם לפינות ולגודל הטקסט של שדה הכתובת, ההערה של terminal.shop תופסת שתי שורות במקום שלוש, "הצגת המקור" ממוקם על קו הבסיס של בקרת הגודל, וטקסט משני במשטח עומד בדרישות הניגודיות של AA.
תיקונים
text devמגיש נתיביproxyדרך שרת ה-proxy בכל בקשה.fetch()שולחAccept: */*, ולכן שרת הפיתוח השיב להם תחילה ב-HTML של האפליקציה, ותבנית opencode נכשלה בהפעלה הראשונה עם "אסימון לא צפוי '<'".text devכבר אינו טוען עותק שני של React כשסריקת התלויות של Vite קוראת קובץ המיועד לשרת בלבד. הסריקה הפעילה את בדיקת הייבוא לשרת בלבד, שהדפיסה עקבת מחסנית ולאחר מכן "קריאה לא תקינה להוק" במסוף, ושיבשה את Fast Refresh.text devמטפל בכתובות דפים עם מחרוזת שאילתה, כגון/?demo. Vite התייחס אליהן כתיקיית הפרויקט וניטר את כל הדיסק, ולכן ב-Linux הדף מעולם לא נטען.- create-text-app: כפתור הגלולה של הפיתוח כבר אינו מכסה את רמז המקשים הראשון במסך הראשון של שום תבנית, שם ברירת המחדל לפרויקט הוא
my-appכדי להתאים לתיעוד, התבניות עוברות את ההגדרות המומלצות שלeslint-plugin-textjs, וקובץ ה-README של לוח הבקרה מסביר את הבנייה עם--adapter static. <FocusPad>ו-<ViewportControl>מגדירים גבולות רק באמצעות מאפיינים מפורטים. React הציג בפיתוח את האזהרה "עדכון מאפיין סגנון במהלך רינדור מחדש (border)" בכל פעם שרמז מקשים הבהב.- טקסט שהוא הפריט האחרון בשורה שומר כעת על מקומו כשהוא מתקצר. אחרי
<Spacer>, הוא נשאר במקום שבו הטקסט הארוך ביותר השאיר אותו, ורכיבים אחים שהתכווצו כדי להתאים לשורה גולשת נשארו מכווצים. <FocusPad>מחליף את השלבים, כותרת המשנה ושורות המקשים שלו כש-actionאוhintsמשתנים, כך שהחלפת הדגמות במשטח אחד אינה מדווחת כהזזת layout.@textjs/react/testingטוען את Yoga בזמן הייבוא, כך שבדיקה יכולה להחליף אתfetchבמימוש מדומה לפני ה-render()הראשון שלה.
הגרסה היציבה הראשונה.
▼ Text.js 1.0.0 (Turbolog).שינויים
- שינוי שובר תאימות: חבילת הפריימוורק וה-CLI היא כעת
@textjs/next(השםtextjsתפוס ב-npm). יש לעדכן ייבואים מ-textjsל-@textjs/next. - הגשר של OpenCode הוא
bunx @textjs/app proxyופועל מכל ספרייה. - המסוף מתאים כברירת מחדל לחלונית DevTools המעוגנת (עיגון בתחתית, משמאל או מימין, זום הדף, גלישת סרגל הכלים). כש-DevTools אינו מעוגן, ברירת המחדל היא
120×36. למשטחים נוספה בקרת גודל.
תוספות
useKeymapעם מסך עזרה אוטומטי?, רמזי מקשים ולוח פקודותCtrl+K.- רכיבי נתונים:
List(וירטואלי),Table,Tree. - תרשימים:
LineChart,BarChart,Sparkline,ProgressBar, וכןGradientו-Image. - פקדים:
Button,Checkbox,Switch,RadioGroup,Slider,Dialog,Confirmוהתראות קצרות. - layout:
Center,Stack,Grid,SplitPane,FocusScope. - הוקים לטיימרים, אנימציה, מדידה, נקודות שבירה, אחסון ולוח ההעתקה.
- טקסט מימין לשמאל. Text.js מממש את האלגוריתם הדו-כיווני של Unicode (UAX #9, Unicode 18.0) ועובר את כל 770,241 המקרים של
BidiTest.txtואת 91,707 המקרים שלBidiCharacterTest.txt. אותיות ערביות מקבלות צורה הקשרית, ו-<Text dir>מבודד span. - קודי שגיאה יציבים
TX###. שגיאות הפריימוורק כוללות קוד וקישור אלhttps://textjs.org/errors/<code>. @textjs/react/testingלרינדור רכיבים לטקסט בבדיקות.@textjs/react/terminalו-text run, שמרנדר אפליקציית App Router בטרמינל אמיתי.text mcp, שמגיש אפליקציה דרך Model Context Protocol כדי שסוכני תכנות יוכלו לנווט בה, ללחוץ על מקשים ולקרוא פריימים ללא דפדפן.- התוסף Text.js DevTools, חלונית לצד "מסוף" עם עץ הרכיבים, מפקח פריימים וציר זמן.
eslint-plugin-textjsותוסף VS Code עם תצוגות מקדימות חיות.apps/terminal-shop: חזית החנות של terminal.shop במסוף, מול ה-API האמיתי (ארגז חול לפיתוח כברירת מחדל, סביבת הייצור נעולה בשתי שכבות).- textjs.org: למידה, קורס בן 10 פרקים שרץ במסוף. רינדור מראש בזמן הבנייה עם הידרציה, גופנים באירוח עצמי עם מידות תואמות, נתיבי
.htmlללא לוכסן ודפי תיעוד חדשים עם תצוגות מקדימות חיות.
ביצועים
- נשברה נעילת המופע של הגבלת הקצב ב-DevTools לאחר ניקוי. אחרי פריים שמנקה, המרנדר ממתין 110 ms פעם אחת כדי שהפריימים הבאים יגיעו למסלול המיידי של DevTools. השהיית התצוגה ב-p50 ירדה מ-63 ms ל-10 ms.
- צביעה חלקית לפי רצועות שינוי: רק רצועות השורות שהשינוי נגע בהן נצבעות מחדש.
- גיבובים לכל שורה במטמון, מזהי סגנון כמספרים שלמים ופריימים ללא הקצאות בזמן חוסר פעילות.
- אפס טיימרים בזמן חוסר פעילות כשהדף מוסתר או אינו ממוקד.
תיקונים
- אין span ריקים מדומים בשכבת הצביעה במעברי שורה, ואין וילון כפול.
- הווילון נמצא בשורה משלו, כך שקישור המקור של DevTools (
VM12:1) לעולם אינו גורם לגלישה של שורה 0. - מחוון הטעינה המוגדר כברירת מחדל מתאים בדיוק לתאים (ב-Menlo אין גליפים של ברייל). הגרסה
brailleדורשת בחירה מפורשת. text buildב-Node כבר אינו מאגד את גרסאות הפיתוח של React.- textjs.org: הזזת ה-layout המצטברת היא 0 בכל נתיב. Playground ו-OpenCode חולקים layout אחד למשטח.
- textjs.org: סרגלי הצד של התיעוד ושל הלמידה נשארים מעוגנים בתחתית דפים ארוכים.
- textjs.org: לשוניות קבצים, בלוקי קוד וטבלאות בטקסט נגללים אופקית בלבד, כך ש-Safari ב-iOS לעולם אינו חוטף מחוות גלילה אנכיות של הדף.
- textjs.org: ההגדרה
scrollbar-gutter: stableחלה רק על מכשירים עם עכבר. ב-Safari ב-iOS היא גרמה לקפיצה בגלילה הראשונה. - textjs.org: עיגון גלילה כבוי. ב-Safari ב-iOS הוא קיבע את אזור הפתיחה מתחת לכותרת העליונה הדביקה.
- שינוי שובר תאימות: חבילת הפריימוורק וה-CLI היא כעת
פריימים ללא הבהוב ורינדור בצד השרת.
שינויים
- פריימים מתווספים לסוף במקום
console.clear()+console.log()בכל פריים. DevTools מנקה באופן סינכרוני, אבל מצייר הודעות חדשות בהגבלת קצב של 50 ms, ולכן הניקוי הותיר את המסוף ריק ב-70.6% מפעולות הציור של DevTools ב-15 fps וב-81.1% ב-60 fps. span מוביל ברוחב אפס משמש כווילון שמסתיר פריימים קודמים. המסוף מתנקה רק בפריים הראשון, אחריinvalidate(), במצב סרק לאחר שנערמו 100 פריימים, או ב-300. - פריימים שנפלטים מתוזמנים במרווח של לפחות 66 ms זה מזה (כ-15 fps). פריימים מהירים יותר מפעילים מחדש את הגבלת הקצב של DevTools ונזרקים: ב-60 fps צייר DevTools רק 67 מתוך 295 פריימים שנפלטו.
- Playground ו-OpenCode הם משטחי מיקוד במסך מלא.
ביצועים
- CSS של span עם מאפיינים מפורטים בלבד, שמצמצם את מספר המאפיינים ש-DevTools מעתיק לכל שורה מכ-33 לכ-7. צבעים הקסדצימליים ורצפים ריקים שהמפתח שלהם נקבע לפי הרקע בלבד.
- פענוח מצטבר של Markdown ושמירה במטמון של שורות
Markdown,Codeו-Diff. - עיבוד מאפייני רכיבי המארח במעבר יחיד, עדכוני מאפיינים דלילים וללא חישוב layout מחדש ב-Yoga כשגודל הטקסט אינו יכול להשתנות.
- פריים בהזרמה ירד מ-0.79 ms ל-0.14 ms, ופעימת מחוון טעינה מ-0.90 ms ל-0.056 ms. הפלט זהה ברמת הסיביות.
תוספות
- רינדור בצד השרת. עמוד שמייצא
runtime = "server"מרונדר בשרת, כולל רכיביasync function, ומזרים הפרשי תאים ברמת השורה באמצעות אירועים שנשלחים מהשרת לנגן פריימים בגודל של כ-19 kB בדחיסת gzip. - רינדור חלקי מראש.
text buildמטמיע את הפריים הראשון של כל נתיב סטטי ב-HTML שלו, כך שהמסוף מצייר לפני שמודול כלשהו נטען. middleware.ts, הגדרות מקטע נתיב (dynamic,revalidate) ו-textjs/cache(unstable_cache,revalidateTag,revalidatePath).text build --adapter static|bun|vercel|cloudflare.bench/devtools: סביבת בדיקה שמפעילה את ממשק DevTools האמיתי ומודדת ציורים ריקים, פריימים שנזרקו, השהיית תצוגה ושימוש במעבד של DevTools.
תיקונים
- DevTools כבר לא הופך טקסט מסוג
path:line,//host:portו-data:לקישורים. - הגשר של OpenCode מוצא את תהליך הרקע המנוהל (פורט זמני, אימות בסיסי), שולח את כותרת CSRF בפעולות כתיבה ומדווח על כשלים בשורה אחת.
- פריימים מתווספים לסוף במקום
שינויים
- קלט בדיד (לחיצה על מקש, הדבקה) מרונדר באופן סינכרוני באותה משימה במקום להמתין לפריים האנימציה הבא.
- ממשק טרמינל מצומצם של OpenCode שתואם לממשק האמיתי.
- התאמה מלאה של textjs.org למכשירים ניידים ולתצוגה רספונסיבית.
תוספות
@textjs/font: מפענח ומרנדר גופני FIGlet עם 17 גופנים כלולים, עבור<FigletText>ו-<AsciiFont>. הפלט תואם ל-273 דוגמאות ייחוס שהוקלטו מהקובץ הבינאריfigletבגרסה 2.2.5.text proxy: גשר CORS מקומי שמאפשר ל-textjs.org לתקשר עם שרת OpenCode המקומי.
תוספות
apps/opencode-console: לקוח OpenCode מחובר שמרונדר ב-console.log, עם חלופת הדגמה כשאין שרת פועל.- תבנית
opencodeעבורcreate-text-app. - textjs.org: דף נחיתה חדש, המלווה החי במסוף, Playground, עמוד OpenCode ותיעוד.
- תהליך עבודה לפריסה ב-GitHub Pages עם יצירת נתיבים סטטיים.
אבן הדרך הראשונה.
תוספות
@textjs/core:CellBufferעל מערכים מטיפוס מוגדר במבנה שטוח, layout של Yoga WASM, מדידת טקסט באמצעותIntl.Segmenterומנהל התקן לקידוד אורך רצף של%c. קריאתconsole.logאחת לכל פריים שהשתנה ואף אחת במצב סרק.@textjs/react: מנגנון התאמה של React 19, רכיבים ב-PascalCase (Box,Text,ScrollBox,Input,Textarea,Select,Tabs,Code,Markdown,Diff,Modal,Spinnerועוד), כליclassNameבסגנון Tailwind ברמת התא, ערכות נושא ורכיב ה-DOMFocusPad.textjs: ה-App Router המבוסס על מערכת הקבצים (layout,page,loading,error,not-found, מקטעים דינמיים, מטפלי נתיב),text dev,text build,text startוכלי הבדיקה[▼]בתוך המסוף.create-text-appעם התבניותstarterו-dashboard.