Text.js में नया क्या है

Text.js के सभी उल्लेखनीय बदलाव इस फ़ाइल में दर्ज हैं।

  1. जोड़ा गया

    • 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/react: अगर पेज में --mono फ़ॉन्ट स्टैक तय है, तो <FocusPad> और <ViewportControl> अपने मोनोस्पेस लेबल उसी में दिखाते हैं, और न होने पर पहले की तरह Geist Mono का इस्तेमाल करते हैं। अरबी या हिब्रू लेबल वाला पेज अपनी लिपि के फ़ॉन्ट --mono फ़ॉन्ट स्टैक में जोड़ सकता है।

    ठीक किया गया

    • textjs.org: फ़ोन पर, लाइन से लंबा इनलाइन कोड अब पेज को चौड़ा करने के बजाय अगली लाइन पर चला जाता है। 390 px की स्क्रीन पर textjs.org/docs/internationalization पेज 92 px ज़्यादा चौड़ा था।
  2. v1.5.0

    जोड़ा गया

    • @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 कंसोल ऐनिमेटेड स्प्राइट आउटपुट को 4 MB के बजाय 16 MB पर साफ़ करते हैं, इसलिए textjs.org/doom पर “कंसोल साफ़ किया गया” हर 4.5 सेकंड के बजाय लगभग हर 19 सेकंड में दिखता है। Safari और ▀ हाफ़-ब्लॉक के रूप में बनाए गए स्प्राइट 4 MB पर बने रहते हैं। textjs.org/doom पर पेज का पीक हीप 10.8 MB से बढ़कर लगभग 12–13 MB हो जाता है।
    • textjs.org: डॉक्यूमेंटेशन का पेज सभी 33 पेजों के बजाय सिर्फ़ अपना Markdown डाउनलोड करता है, इसलिए अंग्रेज़ी डॉक्यूमेंटेशन पेज 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 के द्विदिश टेक्स्ट उदाहरण के लिए फिर से पेज के प्रीव्यू में दिखते हैं। कंसोल में उदाहरण के ऊपर की लाइन अब “▼ डॉक्स › परिचय › काउंटर” के बजाय “▼ डॉक्स › काउंटर” दिखाती है।
  3. v1.4.1

    जोड़ा गया

    • textjs.org/doom, Doom के अपने स्टीरियो पैनिंग और दूरी के साथ घटती आवाज़ के साथ Doom के साउंड इफ़ेक्ट चलाता है। पेज पर आपके पहले क्लिक या कीप्रेस से आवाज़ शुरू होती है, गेम के साथ रुकती है, और Doom के Options → Sound Volume मेन्यू में Sfx Volume के अनुसार चलती है। संगीत नहीं है।

    बदला गया

    • @textjs/react, @textjs/app: फ़ोकस हिंट (“कीबोर्ड इस्तेमाल करने के लिए पेज पर क्लिक करें”) हर थीम में मोटे काले टेक्स्ट वाली ऐंबर पट्टी है। पहले इसमें थीम के रंग उलटे होते थे। हर बार दिखने पर, यह लगभग 6 सेकंड में 4 बार झपकती है, फिर ऐंबर बनी रहती है। कम मोशन चालू होने पर यह नहीं झपकती। हर ब्लिंक साइकल अधिकतम 8 अतिरिक्त कंसोल फ़्रेम लॉग करता है।
    • textjs.org: Doom को textjs.org/doom पर ले जाया गया। textjs.org/playground/doom वहां रीडायरेक्ट करता है।

    ठीक किया गया

    • @textjs/core, @textjs/react: Chrome का समस्याएं पैनल अब हर पेज पर “फ़ॉर्म फ़ील्ड एलिमेंट में id या name एट्रिब्यूट होना चाहिए” रिपोर्ट नहीं करता। छिपे हुए कीबोर्ड <textarea> का नाम textjs-input है, और ViewportControl के कंसोल साइज़ <select> (जो FocusPad के sizeControl में भी है) में एक id और textjs-console-size नाम है। कीबोर्ड <textarea> में 1Password, LastPass, Bitwarden और Dashlane भी बंद हैं।
    • textjs.org: textjs.org/doom का कंसोल हेडर “Text.js / playground / doom” के बजाय “Text.js / doom” दिखाता है।
    • textjs.org/doom: संकरी विंडो में अब “सोर्स देखें” के बाद अतिरिक्त “·” नहीं रहता।
    • textjs.org: संकरी विंडो में, Playground का डेमो पिकर आख़िरी डेमो को शब्द के बीच में काटने के बजाय उस किनारे पर फ़ेड होता है जहां स्क्रोल करने के लिए और डेमो हैं।
    • textjs.org/doom, Doom के 35 टिक प्रति सेकंड पर चलता है। किसी लेवल में यह 60 Hz डिस्प्ले पर 3.8× तेज़ (131 टिक प्रति सेकंड) और 120 Hz पर 5.5× तेज़ (192) चलता था, क्योंकि पेज लेवल बनाते समय Doom की अतिरिक्त क्लॉक रीड को बिज़ी-वेट समझता था, और हर ऐनिमेशन फ़्रेम व टाइमर कॉलबैक पर Doom की क्लॉक एक टिक आगे कर देता था।
  4. v1.4.0

    जोड़ा गया

    • @textjs/react: <Image renderMode="halfblock"> हर जगह ▀ हाफ़-ब्लॉक बनाता है, जैसे 1.3 में <Image> बनाता था।
    • @textjs/core/experimental: drawPixels सॉफ़्ट अल्फ़ा और 256 से ज़्यादा रंगों वाले लॉसलेस स्प्राइट के लिए encoding: "rgba" लेता है, और एक fallback फ़ंक्शन लेता है जो जहां स्प्राइट नहीं दिख सकता वहां सेल पेंट करता है।
    • @textjs/app: text dev, text start और bun, vercel व cloudflare अडैप्टर पर curl, Wget, HTTPie और xh को HTML पेज के बजाय पेज का पहला फ़्रेम ट्रूकलर ANSI टेक्स्ट के रूप में मिलता है। text build स्टैटिक पेजों के फ़्रेम की प्रीरेंडरिंग करता है। text start और bun अनुरोध पर डायनामिक और सर्वर पर रेंडर किए गए पेज रेंडर करते हैं, और अज्ञात पाथ के जवाब में ऐप का not-found पेज और 404 देते हैं। डिफ़ॉल्ट रूप से फ़्रेम 80 × 24 होते हैं। साइज़ बदलने या फ़्रेम बंद करने के लिए text.config.ts फ़ाइल में ansi या पेज में 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 भेजें, या text.config.ts फ़ाइल में ansi: false सेट करें।
    • @textjs/app: जब text build किसी पेज के शेल की प्रीरेंडरिंग करता है, तो अब async सर्वर कंपोनेंट नहीं चलते। वे पहले की तरह अपना <Suspense> फ़ॉलबैक दिखाते हैं, लेकिन बिल्ड के समय अपने डेटा अनुरोध शुरू नहीं करते।
    • @textjs/app: सर्वर पर रेंडर किए गए पेजों का फ़्रेम प्लेयर 3 KB छोटा है, examples/dashboard के लिए 25.4 KB के बजाय 22.4 KB gzip। अब इसमें CellBuffer के ड्रॉइंग मेथड, बॉक्स बॉर्डर या टेक्स्ट ट्रंकेशन नहीं भेजे जाते।

    ठीक किया गया

    • @textjs/core: Windows 10 पर चार्ट और स्पिनर अपनी ग्रिड बनाए रखते हैं। इसका कंसोल फ़ॉन्ट Consolas है, जिसमें ▁▂▃▅▆▇ आठवें हिस्से वाले ब्लॉक, क्वाड्रंट, ब्रेल, ▶ या ✓ नहीं हैं, और उनके फ़ॉलबैक ग्लिफ़ पंक्तियों को फ़्रेम के दाएं किनारे से बाहर ले जाते थे। CssConsoleDriver अब एक बार मापता है कि कंसोल फ़ॉन्ट इनमें से किन ग्लिफ़ को सेल के पांचवें हिस्से से ज़्यादा अंतर से बनाता है, और उन्हें Consolas के सबसे नज़दीकी ग्लिफ़ के रूप में बनाता है: आठवें हिस्सों के लिए _ ▄ ▌ █, क्वाड्रंट और ब्रेल के लिए हाफ़-ब्लॉक, तीर, टिक और क्रॉस के लिए ► ◄ √ ×। जिन फ़ॉन्ट में वे फ़िट होते हैं, जैसे Windows 11 पर Cascadia Mono और macOS पर Menlo, वे मूल ग्लिफ़ बनाते हैं। measureText: false इसे बंद करता है।
    • @textjs/core: Chrome और Edge DevTools में पास-पास के बैकग्राउंड के बीच अब 1 px की खड़ी महीन रेखाएं नहीं हैं, जैसे textjs.org/coffee में “खाता” और “मात्रा” के बगल में। Chromium हर %c span को अलग-अलग डिवाइस पिक्सेल पर स्नैप करता है और दो span के मिलने वाले पिक्सेल को दोनों में से किसी का भी नहीं मान सकता था। CssConsoleDriver अब span के बैकग्राउंड को दाईं ओर के अपारदर्शी पड़ोसी के नीचे 1 px बढ़ाता है (padding-right:1px;margin-right:-1px)। Firefox और Safari के फ़्रेम नहीं बदलते।
    • @textjs/core: Chrome और Edge में <Image> स्प्राइट टेक्स्ट वाले 1 px के नियम का ही पालन करते हैं। पारदर्शी स्प्राइट के बाईं ओर का टेक्स्ट अब स्प्राइट के बाएं किनारे पर अपने बैकग्राउंड की 1 px पट्टी नहीं पेंट करता, और स्प्राइट अपने दाईं ओर के अपारदर्शी टेक्स्ट से सटता है, जिसमें उलटे रंगों वाला टेक्स्ट भी शामिल है। अपनी पंक्तियों में अकेला स्प्राइट अब ऊपर और नीचे की टेक्स्ट पंक्तियों की तरह फ़्रेम के दाएं किनारे तक पहुंचता है।
    • @textjs/react: <ConsoleMirror> टेक्स्ट के बगल में फ़ोटो को इमेज के बजाय हाफ़-ब्लॉक के रूप में बनाता है, जैसे कंसोल करता है।
  5. v1.3.0

    जोड़ा गया

    • @textjs/react/experimental लाइव फ़्रेमबफ़र के लिए <Pixels> और दबाकर रखी गई कुंजियों के लिए useKeyState एक्सपोर्ट करता है; @textjs/core/experimental, drawPixels एक्सपोर्ट करता है। ये माइनर रिलीज़ में बदल सकते हैं।
    • textjs.org/playground/doom: DevTools कंसोल में Doom का शेयरवेयर एपिसोड खेलें।
    • @textjs/react, @textjs/app: जब पेज पर फ़ोकस नहीं होता, तो कंसोल फ़्रेम की आख़िरी पंक्ति में “कीबोर्ड इस्तेमाल करने के लिए पेज पर क्लिक करें” दिखता है, ताकि कंसोल में ऐप पर क्लिक करने वाले विज़िटर को पता चले कि कुंजियों ने काम करना क्यों बंद किया। यह सिर्फ़ ब्राउज़र कंसोल में तब दिखता है जब ऐप में useInput या usePaste हैंडलर या फ़ोकस टारगेट हो, सर्वर पर रेंडर किए गए रूट पर भी। इनलाइन मिरर और VS Code प्रीव्यू इसे नहीं दिखाते। इसे बंद करने के लिए text.config.ts या createConsoleRoot में focusHint: false सेट करें।
    • @textjs/react: usePageFocus() लौटाता है कि पेज पर फ़ोकस है या नहीं। ऐप को कब कीबोर्ड चाहिए, यह ख़ुद तय करने के लिए focusHint: false सेट करें और <FocusHint active={…}> रेंडर करें। useInput(handler, { ambient: true }) हमेशा चालू रहने वाला शॉर्टकट चिह्नित करता है जो अपने आप हिंट नहीं दिखाता।

    बदला गया

    • @textjs/core: जब <Pixels> स्प्राइट ऐनिमेट होता है, तो ConsoleRenderer, Chromium में हर 51 ms पर कीफ़्रेम बैच करता है, Safari में फ़्रेम का अंतराल 33 ms रखता है, और CssConsoleDriver में जोड़े गए आउटपुट को 4 MB (SPRITE_MAX_BYTES) पर साफ़ करता है। स्टैटिक स्प्राइट और सिर्फ़ टेक्स्ट वाले ऐप मौजूदा अंतराल और 300-फ़्रेम की क्लियर सीमा बनाए रखते हैं।
  6. v1.2.0

    जोड़ा गया

    • @textjs/core: bindTextSink(element, onText) छिपे हुए textarea या input से IME या डेड की द्वारा कमिट किया गया टेक्स्ट पढ़ता है, हर कमिट पर एक बार और कभी भी कंपोज़िशन के बीच में नहीं। engine.bindTextSink(element) आपके ख़ुद रेंडर किए गए textarea को InputEngine से जोड़ता है। दोनों ऐसा फ़ंक्शन लौटाते हैं जो लिसनर हटा देता है।
    • @textjs/app: POST /__textjs/input, IME और डेड-की टेक्स्ट के लिए { type: "text", text } स्वीकार करता है। @textjs/app/frame-protocol में InputMessage और parseInputMessage इसे शामिल करते हैं।

    बदला गया

    • @textjs/app: मिडलवेयर और रूट हैंडलर को कैननिकल पाथ मिलता है। /docs/ और /docs//intro, /docs और /docs/intro के रूप में पहुंचते हैं, इसलिए अंत में स्लैश जोड़ने के लिए रीडायरेक्ट करने वाला मिडलवेयर अब हमेशा रीडायरेक्ट करता रहता है। वह रीडायरेक्ट हटाएं। डायनामिक सेगमेंट में एन्कोड किया गया स्लैश नहीं हो सकता: /files/a%2Fb, 400 लौटाता है।
    • @textjs/app: मिडलवेयर के साथ, --adapter cloudflare हर अनुरोध वर्कर को भेजता है, हैश किए गए एसेट भी, और basePath के साथ यह बेस पाथ के बाहर के अनुरोध भी भेजता है। वर्कर चलाने वाला हर अनुरोध एक Functions इनवोकेशन है और आपके Workers अनुरोध कोटा में गिना जाता है। Workers Free प्लान पर, Pages प्रोजेक्ट को fail closed (Settings → Runtime → Fail open / closed) पर सेट करें, वरना दैनिक कोटा ख़त्म होने पर Pages आपकी फ़ाइलें बिना मिडलवेयर के सर्व करता है।

    ठीक किया गया

    • textjs.org के इनलाइन कंसोल में चीनी, जापानी और कोरियाई IME और डेड की काम करती हैं। कंसोल कंपोज़िशन के बीच में textarea साफ़ कर देते थे, इसलिए ऐप को कच्चे अक्षर या ग़लत कैरेक्टर मिलता था।
    • <FocusPad> क्लिक के बाद कीबोर्ड फ़ोकस ऐप पर रखता है। पहले यह तुरंत फ़ोकस हटा देता था, इसलिए चीनी, जापानी और कोरियाई IME टेक्स्ट कंपोज़ नहीं कर पाते थे।
    • कंपोज़ न करने वाली डेड की (Windows, और बिना IME वाला Linux) छिपे हुए textarea पर फ़ोकस होने पर ऐप तक पहुंचती हैं। US-International पर, ' फिर e से é और ' फिर t से 't मिलता है। InputEngine डेड की को पूरा करने वाला keydown रोक देता था, इसलिए ब्राउज़र कुछ भी नहीं डालता था। @textjs/core का DeadKeyTracker उस keydown को जाने देता है, और VS Code प्रीव्यू भी इसे इस्तेमाल करता है।
    • VS Code प्रीव्यू IME और डेड-की टेक्स्ट पहुंचाता है, जिसे वह पहले हटा देता था, और अब डेड की या IME कंपोज़िशन कीस्ट्रोक ऐप को फ़ॉरवर्ड नहीं करता। @textjs/app 1.1.0 या उससे पहले के text dev सर्वर के साथ, यह टेक्स्ट को कीप्रेस या पेस्ट के रूप में भेजता है।
    • @textjs/core: जब shouldCapture, false लौटाता है तो InputEngine.handleTextInput टेक्स्ट को अनदेखा करता है, जैसा की और पेस्ट इनपुट पहले से करते थे।
    • 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 एक्सटेंशन का फ़्रेम व्यू भी Consolas से पहले Cascadia Mono रखते हैं।
    • @textjs/opencode: Windows पर Node के अंतर्गत, ब्रिज npm i -g opencode-ai से इंस्टॉल किए गए OpenCode को ढूंढ लेता है। Node, npm के opencode.cmd शिम को नाम से शुरू नहीं कर सकता, इसलिए ब्रिज ऐसा व्यवहार करता था जैसे OpenCode इंस्टॉल नहीं है। अब यह हर PATHEXT एक्सटेंशन के साथ PATH में खोजता है और .cmd शिम को cmd.exe से चलाता है। Bun (bunx) के अंतर्गत यह पहले से काम करता था।
    • text build Windows पर काम करता है। यह हर टेंप्लेट के लिए Could not resolve entry module "virtual:textjs/api" के साथ या बिना किसी एरर मैसेज के विफल होता था।
    • कंसोल शेल की प्रीरेंडरिंग या सर्वर पर रेंडर किए गए रूट का बिल्ड विफल होने पर text build एरर प्रिंट करता है। पहले, यह Vite की “बिल्ड विफल” लाइन के बाद बिना कारण बताए कोड 1 के साथ बंद हो जाता था।
    • Windows पर text dev फ़ाइल एडिट करने पर सर्वर पर रेंडर किए गए रूट को फिर से रेंडर करता है, और पेज का runtime एक्सपोर्ट बदलने पर ब्राउज़र रीलोड करता है।
    • Windows पर text dev अब उन सोर्स फ़ाइलों के लिए middleware.ts नहीं चलाता जिन्हें Vite मॉड्यूल के रूप में सर्व करता है, जैसे /app/page.tsx, इसलिए ऑथ रीडायरेक्ट अब डेव क्लाइंट को नहीं तोड़ता।
    • प्रोजेक्ट पाथ में Windows 8.3 शॉर्ट नेम, जैसे C:\Users\RUNNER~1, होने पर text run और text mcp काम करते हैं। वे “ऐप एरर” दिखाते थे क्योंकि CLI और ऐप @textjs/app को दो बार लोड करते थे।
    • Windows पर बिल्ड किया गया dist/, Linux और macOS पर अपने प्रीरेंडर किए गए पेज सर्व करता है। लाइव रूट मैनिफ़ेस्ट अपने पाथ बैकस्लैश के साथ स्टोर करता था।
    • जब text.config.ts फ़ाइल का vite विकल्प build.rollupOptions.input सेट करता है, तो text build काम करता है। इनपुट API, सर्वर पर रेंडर किए गए रूट और अडैप्टर बंडल की एंट्री बदल देता था, और बिल्ड विफल हो जाता था।
    • पेज लोड के बाद शुरुआती सेकंड में रोकने पर text dev बंद हो जाता है, और server.close() रिज़ॉल्व होता है। नई मिली डिपेंडेंसी को ऑप्टिमाइज़ करते समय Vite को बंद करने की प्रक्रिया कभी पूरी नहीं होती थी (vitejs/vite#22934)।

    सुरक्षा

    • @textjs/app 1.1.0 और उससे पहले, अनुरोध सुरक्षित पाथ को दूसरे तरीके से लिखकर middleware.ts को छोड़ सकता था, जैसे /ad%6din, /api//admin या /admin%2Fx। मिडलवेयर भेजे गए पाथ से मैच करता था, जबकि पेज, रूट हैंडलर और स्टैटिक फ़ाइलें उसे डिकोड करने के बाद खोजे जाते थे (रूट हैंडलर के लिए दो बार)। इससे text dev, text start और --adapter bun, vercel व cloudflare बिल्ड प्रभावित थे। स्टैटिक बिल्ड मिडलवेयर इस्तेमाल नहीं कर सकते और प्रभावित नहीं हैं। 1.2.0 पर अपग्रेड करें, फिर दोबारा बिल्ड और डिप्लॉय करें: Vercel के लिए .vercel/output, Cloudflare Pages के लिए dist/, और Bun के लिए पूरा dist/ (सर्वर रीस्टार्ट करें)। अपने URL पर अब भी उपलब्ध पुराने डिप्लॉयमेंट हटाएं, या उन्हें सुरक्षित करें।
    • अब हर होस्ट हर अनुरोध के लिए एक कैननिकल पाथनेम तय करता है और उसे मैचर, 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 को सुरक्षित रखता है। बिना मैचर वाला मिडलवेयर basePath के बाहर नहीं चलता। अंत में स्लैश वाला मैचर, जैसे /admin/, /admin से मैच करता है, और host शर्त होस्ट नाम के अंत के डॉट को अनदेखा करती है।
    • runtime = "server" रूट का लाइव सेशन ऐसा पेज रेंडर नहीं करता जिसे मिडलवेयर ने दूसरे पाथ या क्वेरी पर रीराइट किया हो, जैसे /restricted से /login पर रीराइट, या जिसके जवाब में NextResponse.next({ status: 403 }) जैसा एरर स्टेटस दिया हो।
    • --adapter vercel: रूट हैंडलर फ़ंक्शन को उसका पाथ एक अनुरोध हेडर में मिलता है जिसे सिर्फ़ जनरेट किए गए रूट सेट करते हैं, इसलिए /api/x/%252e%252e/admin अब /api/admin तक नहीं पहुंचता, और /_textjs/* को किसी भी तरह लिखने पर फ़ंक्शन नहीं चलता। जनरेट किए गए रूट केस-सेंसिटिव तरीके से मैच करते हैं, इसलिए /LEGACY/x अब /legacy/:path* के ऐसे रीराइट तक नहीं पहुंचता जिसे मिडलवेयर ने कभी जांचा ही नहीं। हर ऐसा पाथ जो शायद कैननिकल न हो, जिसमें { जैसे रॉ कैरेक्टर भी शामिल हैं, एज मिडलवेयर से गुज़रता है, जो अब हर 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 के बाहर के रूट हैंडलर को सर्व नहीं करता।
  7. v1.1.0

    जोड़ा गया

    • Text.js, Firefox और Safari कंसोल में रेंडर करता है। CssConsoleDriver, CSS फ़ीचर जांचों से ब्राउज़र पहचानता है। जहां %c span इनलाइन रहते हैं, वहां यह बिना मार्जिन के 14 px लाइन ऊंचाई लिखता है, सॉफ़्ट रैपिंग बंद करता है और line-height: 100vh कर्टन इस्तेमाल करता है।
    • रिस्पॉन्सिव साइज़िंग Firefox के सोर्स लिंक कॉलम के लिए जगह छोड़ती है। Safari फ़ॉन्ट स्टैक में Menlo को पहले रखता है: इसके पेज यूज़र के इंस्टॉल किए गए SF Mono को इस्तेमाल नहीं कर सकते, जिसे Web Inspector इस्तेमाल कर सकता है।
    • कंसोल चुनने के लिए createConsoleRoot, ConsoleRenderer या CssConsoleDriver को browser: "chromium" | "firefox" | "safari" पास करें।
    • प्रीरेंडर किए गए शेल दोनों तरह के कंसोल की CSS रखते हैं।
    • <FocusPad> विज़िटर के ब्राउज़र का कंसोल शॉर्टकट दिखाता है: Firefox में ⌘⌥K या Ctrl+Shift+K, और Safari में ⌘⌥C के साथ “वेब डेवलपर के लिए सुविधाएं दिखाएं” चालू करने का नोट।
    • प्रीरेंडर किया गया <FocusPad> हर ब्राउज़र का शॉर्टकट रेंडर करता है। सिर्फ़ विज़िटर का शॉर्टकट दिखाने के लिए पहले पेंट से पहले <html> पर data-browser (firefox या safari) और data-os (mac) सेट करें; इनके बिना यह हाइड्रेट होने तक Chrome का Windows और Linux वाला शॉर्टकट दिखाता है।

    ठीक किया गया

    • ⌘⌥K और Ctrl+Shift+K (Firefox का कंसोल शॉर्टकट) ऐप तक पहुंचने के बजाय ब्राउज़र तक जाते हैं।
    • DevTools बंद होने पर रिस्पॉन्सिव साइज़िंग 60 px से कम ऊंचे ब्राउज़र टूलबार (Safari और Firefox के) की ऊंचाई सीखती है, इसलिए नीचे डॉक किए गए कंसोल को उसमें फ़िट होने वाली हर पंक्ति मिलती है। <FocusPad> सीखी गई ऊंचाई से पता लगाता है कि DevTools डॉक किया गया है या नहीं।
    • <FocusPad> अपनी क्लिक स्थिति में Windows और Linux के शॉर्टकट Ctrl+Shift+J के रूप में लिखता है।

    सुरक्षा

    • @textjs/opencode: शुरू होने पर ब्रिज एक पेयरिंग कोड प्रिंट करता है, और textjs.org/opencode पहले कनेक्शन पर उसे मांगता है। जब तक कोई पेज कोड नहीं भेजता, ब्रिज 428 जवाब देता है और OpenCode को कुछ फ़ॉरवर्ड नहीं करता, अनुमति वाले ओरिजिन के लिए भी नहीं। हर कोड ब्रिज के एक रन के लिए मान्य है, उसके लौटाए गए टोकन सिर्फ़ पेयर किए गए ओरिजिन से काम करते हैं, और 10 ग़लत कोड ब्रिज रीस्टार्ट होने तक पेयरिंग लॉक कर देते हैं।
    • @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 के सर्वर से कनेक्ट होता है।
  8. v1.0.4

    जोड़ा गया

    • OpenCode Lite: हर फ़ाइल के डिफ़ की समीक्षा करें, प्रॉम्प्ट इतिहास ब्राउज़ करें, लीडर शॉर्टकट कॉन्फ़िगर करें और प्रोवाइडर खातों व MCP सर्वर को मैनेज करें। सैंडबॉक्स में स्क्रिप्टेड टर्मिनल पेन शामिल है।
    • OpenCode Lite: कमांड खोजने के लिए / या प्रोजेक्ट फ़ाइल अटैच करने के लिए @ टाइप करें। Tab फ़ाइल मेन्यू में डायरेक्टरी खोलता है। कनेक्ट किए गए सेशन सर्वर के प्रोजेक्ट में खोजते हैं; सैंडबॉक्स अपनी उदाहरण रिपॉज़िटरी में खोजता है।
    • textjs.org/coffee: terminal.shop डेमो SSH ऐप की तरह कंसोल साइज़ के अनुसार चलता है, अपने छोटे, मध्यम और बड़े लेआउट के साथ, और 20 × 10 से कम पर “आपका टर्मिनल बहुत छोटा है” दिखाता है। खाते में पेमेंट मेथड, नाम एडिट करने वाली प्रोफ़ाइल और सब्सक्रिप्शन के लिए साप्ताहिक शेड्यूल बदलाव जुड़े हैं। साइन आउट होने पर, कार्ट और खाते के अक्सर पूछे जाने वाले सवाल, परिचय व डीबग जानकारी बिना साइन इन किए खुलते हैं।
  9. v1.0.3

    परफ़ॉर्मेंस

    • @textjs/react: Box और Text, माउंट और अपडेट पर Prop ऑब्जेक्ट कॉपी करने के बजाय पहले से छांटे गए सीन Prop रिकंसाइलर को पास करते हैं।
    • @textjs/core: SceneNode.getTextModel() सिंगल-स्ट्रिंग <Text> लीफ़ पर इनलाइन ट्री वॉक छोड़ देता है और कैश किए गए शून्य भरे Uint16Array runOf बफ़र दोबारा इस्तेमाल करता है। CssConsoleDriver इनर लूप में एक जैसी स्टाइल वाले लगातार BMP सेल स्कैन करता है, और ConsoleRenderer बिना बदले फ़्रेम पर countYogaNodes() छोड़ देता है।
    • textjs.org: रूट और कंसोल कंपैनियन टैब हर रूट के अलग JS और CSS चंक में बंटते हैं। स्टोर की फ़ोटो photos/final मास्टर से फिर एन्कोड की जाती हैं, और प्रोडक्ट की अतिरिक्त तस्वीरें होवर या स्लाइड बदलने पर लोड होती हैं।

    ठीक किया गया

    • <ViewportControl>, 20ch के बजाय पिक्सेल minWidth इस्तेमाल करता है और <FocusPad> के साथ मेट्रिक-मैच किए गए फ़ॉलबैक फ़ॉन्ट सूचीबद्ध करता है, इसलिए Geist Mono लोड होने पर साइज़ पिकर अपनी चौड़ाई बनाए रखता है।
  10. v1.0.2

    जोड़ा गया

    • @textjs/opencode: textjs.org/opencode ब्रिज अब बिना डिपेंडेंसी वाला अपना पैकेज है। Vite, React और MCP SDK इंस्टॉल किए बिना इसे शुरू करने के लिए bunx @textjs/opencode proxy (या npx) चलाएं। 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 · Turbolog है। Text.js DevTools सिर्फ़ Chrome एक्सटेंशन का नाम है। <TextDevOverlay> और इसके Prop नहीं बदले हैं।
    • dynamic = "error" एक्सपोर्ट करने वाले रूट हैंडलर TX031 के साथ विफल होते हैं। Text.js इसे "force-static" मानता था, बिना जांचे कि हैंडलर अनुरोध पढ़ता है या नहीं, जो Next.js में इस वैल्यू का मतलब है। "force-static" इस्तेमाल करें।

    ठीक किया गया

    • text start, ब्लॉक किए गए Host का जवाब text dev की तरह TX028 से देता है। हर सर्वर उस सेटिंग का नाम बताता है जिसे वह पढ़ता है: text dev के लिए vite.server.allowedHosts और text start के लिए server.allowedHosts।
    • textjs.org: सीखें का शिपिंग अध्याय अब आपको vercel.json रीराइट जोड़ने को नहीं कहता। Vercel और Cloudflare Pages पर text build ख़ुद index.html फ़ॉलबैक लिखता है। रीराइट उदाहरण अब Netlify का _redirects इस्तेमाल करता है।
    • eslint-plugin-textjs: route-handler-exports, route.ts में dynamic और revalidate एक्सपोर्ट की अनुमति देता है, और valid-route-module वहां dynamic की वैल्यू जांचता है।
  11. v1.0.1

    जोड़ा गया

    • textjs.org: सीखें के अध्याय का चल रहा वीडियो, उसके आगे स्क्रोल करने पर कोने के मिनी प्लेयर में चला जाता है। हर वीडियो के नीचे कैप्शन बटन कैप्शन चालू या बंद करता है और चुनाव याद रखता है।
    • <TextDevOverlay>, pill, shortcut और shell Prop लेता है, ताकि 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 टेंप्लेट पहले रन पर “अनपेक्षित टोकन '<'” के साथ विफल हो जाता था।
    • Vite का डिपेंडेंसी स्कैन सिर्फ़ सर्वर की फ़ाइल पढ़ने पर text dev अब React की दूसरी कॉपी लोड नहीं करता। स्कैन से सिर्फ़ सर्वर के इंपोर्ट की जांच सक्रिय हो जाती थी, जो स्टैक ट्रेस प्रिंट करती थी, फिर कंसोल में “अमान्य हुक कॉल”, और Fast Refresh टूट जाता था।
    • text dev, /?demo जैसे क्वेरी स्ट्रिंग वाले पेज URL संभालता है। Vite उन्हें प्रोजेक्ट फ़ोल्डर मानकर पूरी डिस्क वॉच करता था, इसलिए Linux पर पेज कभी लोड नहीं होता था।
    • create-text-app: डेव पिल अब किसी भी टेंप्लेट की पहली स्क्रीन पर पहली की हिंट को नहीं ढकता, डॉक्यूमेंटेशन से मेल खाने के लिए डिफ़ॉल्ट प्रोजेक्ट नाम my-app है, टेंप्लेट eslint-plugin-textjs के सुझाए गए कॉन्फ़िग में पास होते हैं, और डैशबोर्ड README में --adapter static बिल्ड समझाया गया है।
    • <FocusPad> और <ViewportControl> सिर्फ़ लॉन्गहैंड प्रॉपर्टी से बॉर्डर सेट करते हैं। डेवलपमेंट में हर बार की हिंट चमकने पर React “रीरेंडर के दौरान स्टाइल प्रॉपर्टी अपडेट हो रही है (border)” चेतावनी देता था।
    • पंक्ति का आख़िरी टेक्स्ट अब छोटा होने पर भी अपनी जगह बनाए रखता है। <Spacer> के बाद यह वहीं रहता था जहां सबसे लंबे टेक्स्ट ने इसे छोड़ा था, और ओवरफ़्लो होती पंक्ति में फ़िट होने के लिए सिकुड़े हुए सिबलिंग सिकुड़े ही रहते थे।
    • action या hints बदलने पर <FocusPad> अपने स्टेप, सबटाइटल और की पंक्तियां बदलता है, इसलिए एक पैड में डेमो बदलना लेआउट शिफ़्ट के रूप में रिपोर्ट नहीं होता।
    • @textjs/react/testing इंपोर्ट होने पर Yoga लोड करता है, ताकि टेस्ट अपने पहले render() से पहले fetch को स्टब कर सके।
  12. v1.0.0

    पहली स्थिर रिलीज़। ▼ Text.js 1.0.0 (Turbolog)।

    बदला गया

    • ब्रेकिंग बदलाव: फ़्रेमवर्क और CLI पैकेज अब @textjs/next है (npm पर textjs लिया जा चुका है)। इंपोर्ट को textjs से @textjs/next में अपडेट करें।
    • OpenCode ब्रिज bunx @textjs/app proxy है और किसी भी डायरेक्टरी से चलता है।
    • कंसोल डिफ़ॉल्ट रूप से डॉक किए गए DevTools पैनल में फ़िट होता है (नीचे, बाएं या दाएं डॉक, पेज ज़ूम, टूलबार रैप)। अनडॉक किए गए DevTools में फ़ॉलबैक 120×36 है। पैड में साइज़ कंट्रोल जोड़ा गया है।

    जोड़ा गया

    • अपने आप दिखने वाली ? मदद स्क्रीन, की हिंट और Ctrl+K कमांड पैलेट के साथ useKeymap।
    • डेटा कंपोनेंट: List (वर्चुअलाइज़्ड), Table, Tree।
    • चार्ट: LineChart, BarChart, Sparkline, ProgressBar, साथ में Gradient और Image।
    • कंट्रोल: Button, Checkbox, Switch, RadioGroup, Slider, Dialog, Confirm और टोस्ट।
    • लेआउट: Center, Stack, Grid, SplitPane, FocusScope।
    • टाइमर, ऐनिमेशन, माप, ब्रेकपॉइंट, स्टोरेज और क्लिपबोर्ड के लिए हुक।
    • दाएं-से-बाएं टेक्स्ट। Text.js, Unicode Bidirectional Algorithm (UAX #9, Unicode 18.0) लागू करता है और सभी 7,70,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 हो गया।
    • डैमेज-बैंड आंशिक पेंट: सिर्फ़ म्यूटेशन से प्रभावित पंक्ति बैंड दोबारा पेंट होते हैं।
    • कैश किए गए प्रति-पंक्ति हैश, पूर्णांक स्टाइल id और ज़ीरो-अलोकेशन आइडल फ़्रेम।
    • पेज छिपा होने या उस पर फ़ोकस न होने पर शून्य आइडल टाइमर।

    ठीक किया गया

    • पंक्ति के ब्रेक पर कोई अतिरिक्त खाली पेंट-लेयर span नहीं, और कोई दोहरा कर्टन नहीं।
    • कर्टन अपनी अलग लाइन पर रहता है, इसलिए DevTools सोर्स लिंक (VM12:1) कभी पंक्ति 0 को रैप नहीं करता।
    • डिफ़ॉल्ट स्पिनर सेल में सटीक फ़िट होता है (Menlo में ब्रेल ग्लिफ़ नहीं हैं)। braille वेरिएंट चुनकर चालू करना होता है।
    • Node पर text build अब React के डेवलपमेंट बिल्ड बंडल नहीं करता।
    • textjs.org: हर रूट पर कुल लेआउट शिफ़्ट 0 है। Playground और OpenCode एक ही पैड लेआउट साझा करते हैं।
    • textjs.org: डॉक्यूमेंटेशन और सीखें के साइडबार लंबे पेजों के नीचे पिन रहते हैं।
    • textjs.org: फ़ाइल टैब, कोड ब्लॉक और गद्य की टेबल सिर्फ़ क्षैतिज स्क्रोल होती हैं, इसलिए iOS Safari कभी पेज के लंबवत स्वाइप नहीं रोकता।
    • textjs.org: scrollbar-gutter: stable सिर्फ़ माउस वाले डिवाइस पर लागू होता है। iOS Safari पर इससे पहले स्क्रोल में उछाल आता था।
    • textjs.org: स्क्रोल ऐंकरिंग बंद है। iOS Safari पर यह हीरो को स्टिकी हेडर के नीचे पिन कर देती थी।
  13. v0.4.0

    ज़ीरो-फ़्लैश फ़्रेम और सर्वर रेंडरिंग।

    बदला गया

    • हर फ़्रेम पर console.clear() + console.log() के बजाय फ़्रेम जोड़े जाते हैं। DevTools कंसोल को सिंक्रोनस रूप से साफ़ करता है, लेकिन नए मैसेज 50 ms के थ्रॉटल पर पेंट करता है, इसलिए साफ़ करने से 15 fps पर DevTools के 70.6% पेंट और 60 fps पर 81.1% पेंट में कंसोल खाली रहता था। शुरुआत में शून्य-चौड़ाई वाला कर्टेन span पहले के फ़्रेम छिपाता है। कंसोल सिर्फ़ पहले फ़्रेम पर, invalidate() के बाद, 100 फ़्रेम जमा होने पर आइडल अवस्था में, या 300 फ़्रेम पर साफ़ होता है।
    • आउटपुट फ़्रेम के बीच कम से कम 66 ms का अंतर रखा जाता है (लगभग 15 fps)। इससे तेज़ फ़्रेम DevTools का थ्रॉटल फिर से शुरू कर देते हैं और ड्रॉप हो जाते हैं: 60 fps पर DevTools ने आउटपुट के 295 फ़्रेम में से 67 पेंट किए।
    • Playground और OpenCode फ़ुल-स्क्रीन फ़ोकस पैड हैं।

    परफ़ॉर्मेंस

    • span CSS में सिर्फ़ लॉन्गहैंड प्रॉपर्टी, जिससे हर लाइन पर 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 CPU मापता है।

    ठीक किया गया

    • DevTools अब path:line, //host:port और data: टेक्स्ट को लिंक में नहीं बदलता।
    • OpenCode ब्रिज मैनेज किया गया डेमन (अस्थायी पोर्ट, बेसिक ऑथ) ढूंढता है, राइट के समय CSRF हेडर भेजता है और विफलताओं की रिपोर्ट एक लाइन में देता है।
  14. v0.3.0

    बदला गया

    • अलग-अलग इनपुट (की दबाना, पेस्ट करना) अगले ऐनिमेशन फ़्रेम का इंतज़ार करने के बजाय उसी टास्क में सिंक्रोनस रूप से रेंडर होते हैं।
    • सीमित सुविधाओं वाला OpenCode TUI जो असली TUI से मेल खाता है।
    • textjs.org पर मोबाइल और रिस्पॉन्सिव डिज़ाइन का पूरा अपडेट।

    जोड़ा गया

    • @textjs/font: <FigletText> और <AsciiFont> के लिए 17 बंडल किए गए फ़ॉन्ट वाला FIGlet फ़ॉन्ट पार्सर और रेंडरर। आउटपुट figlet 2.2.5 बाइनरी से रिकॉर्ड किए गए 273 रेफ़रेंस से मेल खाता है।
    • text proxy: एक लोकल CORS ब्रिज ताकि textjs.org आपके OpenCode सर्वर से संपर्क कर सके।
  15. v0.2.0

    जोड़ा गया

    • apps/opencode-console: console.log में रेंडर किया गया कनेक्टेड OpenCode क्लाइंट, जिसमें कोई सर्वर न चलने पर डेमो फ़ॉलबैक है।
    • create-text-app के लिए opencode टेम्पलेट।
    • textjs.org: नया लैंडिंग पेज, लाइव कंसोल कंपैनियन, Playground, OpenCode पेज और डॉक्यूमेंटेशन।
    • स्टैटिक रूट जनरेशन वाला GitHub Pages डिप्लॉयमेंट वर्कफ़्लो।
  16. v0.1.0

    पहला पड़ाव।

    जोड़ा गया

    • @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 और अन्य), सेल-स्तर की Tailwind-शैली की className यूटिलिटी, थीम और DOM FocusPad।
    • textjs: फ़ाइल-सिस्टम App Router (layout, page, loading, error, not-found, डायनामिक सेगमेंट, रूट हैंडलर), text dev, text build, text start और कंसोल के अंदर [▼] इंस्पेक्टर।
    • starter और dashboard टेम्पलेट के साथ create-text-app।