الجديد في 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 بكسل على شاشة بعرض 390 بكسل.
الإضافات
@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 كلها، لذا تحمّل صفحات التوثيق الإنجليزية JavaScript أقل بمقدار 43–47 KB (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. لا توجد موسيقى.
التغييرات
@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صفحة HTML إلى curl. راجع 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 للصور. يخالف هذا عمدًا وعد سياسة الدعم بأن تبدو الإطارات متطابقة بين الإصدارات الفرعية. مرّرrenderMode="halfblock"للاحتفاظ بأنصاف كتل 1.3. لا يزال 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 أو مفتاح ميت من مساحة نص أو حقل إدخال مخفي، مرة واحدة لكل اعتماد وليس أثناء التكوين. يربطengine.bindTextSink(element)مساحة نص تعرضها بنفسك مع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كل طلب إلى العامل، بما فيه الأصول ذات الأسماء المبنية على التجزئة، ومعbasePathيرسل أيضًا الطلبات خارج المسار الأساسي. يُعد كل طلب يشغّل العامل استدعاءً واحدًا لـFunctions ويُحتسب ضمن حصة طلبات Workers. في خطة Workers Free، اضبط مشروع Pages على الإغلاق عند الفشل (الإعدادات → وقت التشغيل → الفتح / الإغلاق عند الفشل)، وإلا فستقدّم Pages ملفاتك دون middleware بمجرد نفاد الحصة اليومية.
الإصلاحات
- تعمل محررات أسلوب الإدخال الصينية واليابانية والكورية والمفاتيح الميتة في وحدات التحكم المضمّنة في textjs.org. كانت وحدات التحكم تمسح مساحة النص أثناء التكوين، فيتلقى التطبيق الحروف الخام أو المحرف الخطأ.
- يحافظ
<FocusPad>على تركيز لوحة المفاتيح داخل التطبيق بعد النقر. كان يفقد التركيز فورًا، مما منع محررات أسلوب الإدخال الصينية واليابانية والكورية من تكوين النص. - تصل المفاتيح الميتة التي لا تكوّن نصًا (في Windows، وفي Linux دون IME) إلى التطبيق مع تركيز مساحة النص المخفية. في تخطيط US-International، يعطي
'ثمeالمحرفéويعطي'ثمtالنص't. كانInputEngineيحظر حدث ضغط المفتاح الذي يكمل المفتاح الميت، فلا يُدرج المتصفح شيئًا. يسمحDeadKeyTrackerفي@textjs/coreبمرور ذلك الحدث، وتستخدمه معاينة 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. كانا يعرضان «خطأ في التطبيق» لأن واجهة سطر الأوامر والتطبيق حمّلا@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 (أعد تشغيل الخادم). احذف عمليات النشر القديمة التي لا تزال متاحة بعناوين URL الخاصة بها، أو احمها. - يحسب كل مضيف الآن اسم مسار موحّدًا واحدًا لكل طلب ويستخدمه للمطابق و
request.nextUrlوكل عملية بحث. يفك تسلسلات الترميز المئوي ويعيد ترميز المسار كما يكتبهnew URL()، ويحل المقطعين.و..، ويزيل الشرطات المائلة المكررة والختامية. تحصل المسارات التي تحتوي على%2Fأو%5Cأو ترميز مئوي غير صالح على400. يقدّمtext devوtext startومحوّل Bun الملفات الثابتة بأسمائها الدقيقة فقط، لذا لم يعد/ADMIN/report.txtيقدّمpublic/admin/report.txtعلى macOS و Windows. - تُقارن المطابقات ومصادر إعادة الكتابة ومقاطع المسارات و
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، لم تعد الملفات خارجه تُقدّم دون العامل.- لا يقدّم
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، بتخطيطاته الصغيرة والمتوسطة والكبيرة ورسالة «الطرفية صغيرة جدًا» تحت 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يعمل ويشغّل الجسر نفسه.
التغييرات
- أصبحت حزمة إطار العمل وواجهة سطر الأوامر
@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. تظل واجهة سطر الأوامرtext، وتعتمد قوالب create-text-app على@textjs/app. - أصبح اسم زر
[▼]والمفتّش داخل وحدة التحكم «طبقة التطوير»، ويقرأ عنوان المفتّش▼ 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). لكل عرض توضيحي عنوان URL خاص: يوجد OpenCode على
/opencodeو terminal.shop على/coffee، ويتصدر شعاراهما النصيان الرسالة. نُقل العدّاد والنموذج خارج Playground؛ ولا يزال التوثيق يشغّلهما كمثالين حيين. - أصبح لدى
<FocusPad>تخطيط جديد. تعرض كل حالة شريط تقدم من ثلاثة أجزاء وعنوانًا وعنصرًا كبيرًا واحدًا وسطرًا نصيًا. قبل فتح وحدة التحكم، يكون العنصر الكبير اختصار DevTools. وعند انتظار نقرة، يكون مؤشرًا. وبعد التشغيل، يصبحhintsالخاصة بالتطبيق على هيئة رموز مفاتيح تضيء عند وصول ضغطات المفاتيح، وتُعرض المفاتيح التي لا تملك تلميحًا أسفلها. أُزيلت تسميات الخطوات وشارة «مباشر» المنفصلة وسطر «راقب وحدة التحكم.». تظهر الصفوف تدريجيًا عند تغير الحالة، وليس عند الرسم الأول، وتُعطّل الحركة معprefers-reduced-motion. يستوفي النص الثانوي تباين WCAG AA في كلا المظهرين، ويعرض منتقي حجم وحدة التحكم حلقة تركيز عند الوصول إليه بلوحة المفاتيح. - textjs.org: يستخدم Playground تخطيط
<FocusPad>الجديد. يحمل العرض الحالي في المنتقي سطح رموز المفاتيح نفسه، ويطابق حقل أوامر OpenCode زوايا حقل URL وحجم خطه، وتشغل ملاحظة terminal.shop سطرين بدلًا من ثلاثة، ويقع «عرض المصدر» على خط أساس عنصر التحكم بالحجم، ويستوفي النص الخافت في اللوحة تباين AA.
الإصلاحات
- يقدّم
text devمساراتproxyعبر الوكيل لكل طلب. يرسلfetch()الترويسةAccept: */*، لذا كان خادم التطوير يجيب عنها أولًا بصفحة HTML للتطبيق، ويفشل قالب opencode عند تشغيله الأول برسالة «رمز غير متوقع '<'». - لم يعد
text devيحمّل نسخة ثانية من React عندما يقرأ فحص اعتماديات Vite ملفًا خاصًا بالخادم. كان الفحص يفعّل التحقق من الاستيراد الخاص بالخادم، الذي يطبع تتبع المكدس، ثم «استدعاء خطاف غير صالح» في وحدة التحكم، ويعطّل Fast Refresh. - يتعامل
text devمع عناوين URL للصفحات ذات سلسلة استعلام، مثل/?demo. كان Vite يعاملها كمجلد المشروع ويراقب القرص كله، لذا لم تكن الصفحة تُحمّل أبدًا على Linux. - create-text-app: لم يعد زر التطوير يغطي أول تلميح مفتاح في الشاشة الأولى لأي قالب، وأصبح اسم المشروع الافتراضي
my-appليتطابق مع التوثيق، وتجتاز القوالب الإعدادات الموصى بها فيeslint-plugin-textjs، ويشرح ملف README للوحة المعلومات البناء باستخدام--adapter static. - يضبط
<FocusPad>و<ViewportControl>الحدود باستخدام الخصائص المفصّلة فقط. كان React يحذّر «تحديث خاصية نمط أثناء إعادة العرض (border)» في وضع التطوير كلما ومض تلميح مفتاح. - يحافظ النص الذي يشكّل العنصر الأخير في صف على موضعه الآن عندما يقصر. بعد
<Spacer>، كان يبقى حيث تركه أطول نص، وكانت العناصر الشقيقة التي تقلصت لتلائم صفًا متجاوزًا حدوده تبقى متقلصة. - يستبدل
<FocusPad>خطواته والعنوان الفرعي وصفوف المفاتيح عند تغيرactionأوhints، لذا لا يُبلّغ عن تبديل العروض التوضيحية داخل لوحة واحدة كإزاحة في التخطيط. - تحمّل
@textjs/react/testingمكتبة Yoga عند استيرادها، ليتمكن الاختبار من استبدالfetchبدالة وهمية قبل أولrender().
أول إصدار مستقر.
▼ Text.js 1.0.0 (Turbolog).التغييرات
- تغيير غير متوافق: أصبحت حزمة إطار العمل وواجهة سطر الأوامر
@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وإشعارات عابرة. - التخطيط:
CenterوStackوGridوSplitPaneوFocusScope. - خطافات للمؤقتات والحركة والقياس ونقاط التوقف والتخزين والحافظة.
- نص من اليمين إلى اليسار. يطبّق Text.js خوارزمية Unicode ثنائية الاتجاه (UAX #9، Unicode 18.0) ويجتاز جميع حالات
BidiTest.txtالبالغ عددها 770,241 وحالاتBidiCharacterTest.txtالبالغ عددها 91,707. تُوصَل أشكال الحروف العربية، ويعزل<Text dir>عنصر span. - رموز أخطاء
TX###مستقرة. تحمل أخطاء إطار العمل رمزًا ورابطًا إلىhttps://textjs.org/errors/<code>. @textjs/react/testingلعرض المكوّنات كنص في الاختبارات.@textjs/react/terminalوtext run، الذي يعرض تطبيق App Router في طرفية حقيقية.text mcp، الذي يقدّم تطبيقًا عبر بروتوكول سياق النموذج ليتمكن وكلاء البرمجة من التنقل فيه وضغط المفاتيح وقراءة الإطارات دون متصفح.- إضافة 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: تبلغ إزاحة التخطيط التراكمية 0 في كل مسار. يشترك Playground و OpenCode في تخطيط لوحة واحد.
- textjs.org: يبقى الشريطان الجانبيان للتوثيق وقسم تعلّم مثبتين عند أسفل الصفحات الطويلة.
- textjs.org: تمرّر علامات تبويب الملفات وكتل الشيفرة وجداول النص أفقيًا فقط، لذا لا يستحوذ iOS Safari على سحبات الصفحة العمودية.
- textjs.org: تُطبّق
scrollbar-gutter: stableعلى الأجهزة ذات الفأرة فقط. كانت تتسبب في قفزة عند التمرير الأول في iOS Safari. - textjs.org: تثبيت موضع التمرير معطّل. كان يثبّت القسم الرئيسي تحت الرأس الثابت في iOS Safari.
- تغيير غير متوافق: أصبحت حزمة إطار العمل وواجهة سطر الأوامر
إطارات بلا وميض والعرض على الخادم.
التغييرات
- تُلحق الإطارات بدلًا من استدعاء
console.clear()+console.log()لكل إطار. تطبّق DevTools المسح تزامنيًا، لكنها ترسم الرسائل الجديدة بفاصل تقييد قدره 50 ms، لذا ترك المسح وحدة التحكم فارغة في 70.6% من عمليات رسم DevTools عند 15 إطارًا في الثانية و81.1% عند 60 إطارًا في الثانية. يخفي span ساتر بعرض صفري في البداية الإطارات السابقة. تُمسح وحدة التحكم فقط عند الإطار الأول، وبعدinvalidate()، وعند الخمول بعد تكديس 100 إطار، أو عند 300 إطار. - تُضبط وتيرة الإطارات الصادرة بفاصل لا يقل عن 66 ms بينها (نحو 15 إطارًا في الثانية). تعيد الإطارات الأسرع بدء تقييد DevTools وتُسقط: عند 60 إطارًا في الثانية، رسمت DevTools عددًا قدره 67 من أصل 295 إطارًا صادرًا.
- يمثّل كل من Playground و OpenCode لوحة تركيز بملء الشاشة.
الأداء
- CSS لعناصر span بخصائص مفصّلة فقط، مما يقلّل الخصائص التي تنسخها DevTools إلى كل سطر من نحو 33 إلى نحو 7. ألوان بالنظام الست عشري، وتسلسلات فارغة تُحدّد مفاتيحها بالخلفية فقط.
- تحليل تزايدي لمحتوى Markdown وتخزين مؤقت لصفوف
MarkdownوCodeوDiff. - معالجة خصائص المضيف بمرور واحد، وتحديثات متفرقة للخصائص، وعدم إعادة التخطيط باستخدام 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على مصفوفات مسطّحة محدّدة النوع، وتخطيط 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 على مستوى الخلية، وسمات ومكوّنFocusPadفي DOM.textjs: نظام App Router المعتمد على نظام الملفات (layout،page،loading،error،not-found، والمقاطع الديناميكية، ومعالجات المسارات)، وtext dev، وtext build، وtext start، والمفتّش[▼]داخل وحدة التحكم.create-text-appمع قالبَيstarterوdashboard.