মূল বিষয়ে যান
বিভাগসমূহ
ভাষা, এখন বাংলা
Rastrillo ডিজাইন সিস্টেম

রুট

যে অংশগুলো নিজেরাই একটি গোটা রেসপন্স, কোনো রেসপন্সের টুকরো নয়।

প্রতিটি উদাহরণ সত্যিই চলে, কিন্তু এর লিংকগুলো কোথাও নিয়ে যায় না। HTML কপি করার জন্য মার্কআপ দেখায়।

error-page

ত্রুটির উত্তরের পুরো অংশ: স্ট্যাটাস, একটি সৎ বাক্য, ফিরে যাওয়ার পথ, আর 500-এর রেফারেন্স যা একজন প্রশাসক কাজে লাগাতে পারেন।

404: পাওয়া যায়নি

প্রিভিউ
<div rst-error>
  <p rst-error-status>404</p>
  <h1 rst-error-title>সেই পৃষ্ঠাটি খুঁজে পাওয়া যায়নি</h1>
  <p rst-error-body>লিঙ্কটি হয়তো পুরোনো, বা পৃষ্ঠাটি সরিয়ে নেওয়া হয়েছে। ঠিকানাটি দেখে নিন, বা শুরুতে ফিরে যান।</p>
  <p rst-error-cta>
    <a rst-btn="primary" href="/">শুরুর পৃষ্ঠা</a>
  </p>
</div>
{{template "error-page" dict "Status" 404 "HomeHref" "/"}}

403: প্রবেশাধিকার নেই

প্রিভিউ
<div rst-error>
  <p rst-error-status>403</p>
  <h1 rst-error-title>আপনি এটি দেখতে পারবেন না</h1>
  <p rst-error-body>এখানে আপনার অ্যাকাউন্টের প্রবেশাধিকার নেই। আপনার যদি মনে হয় থাকা উচিত, তাহলে যিনি এই সাইটটি চালান তাঁকে জিজ্ঞাসা করুন।</p>
  <p rst-error-cta>
    <a rst-btn="primary" href="/">শুরুর পৃষ্ঠা</a>
    <a rst-btn href="/posts">ফিরে যান</a>
  </p>
</div>
{{template "error-page" dict "Status" 403 "HomeHref" "/" "BackHref" "/posts"}}

422: প্রক্রিয়া করা যায়নি

প্রিভিউ
<div rst-error>
  <p rst-error-status>422</p>
  <h1 rst-error-title>এটি পাঠানো যায়নি</h1>
  <p rst-error-body>যা পাঠানো হয়েছিল তার কিছু ঠিক ছিল না। ফিরে গিয়ে আবার চেষ্টা করুন; কিছুই সংরক্ষণ করা হয়নি।</p>
  <p rst-error-cta>
    <a rst-btn="primary" href="/">শুরুর পৃষ্ঠা</a>
    <a rst-btn href="/posts/1/edit">ফিরে যান</a>
  </p>
</div>
{{template "error-page" dict
    "Status" 422
    "HomeHref" "/"
    "BackHref" "/posts/1/edit"}}

500: সার্ভার ত্রুটি

প্রিভিউ
<div rst-error>
  <p rst-error-status>500</p>
  <h1 rst-error-title>আমাদের দিকে কিছু একটা ভুল হয়েছে</h1>
  <p rst-error-body>এটি আপনার দোষ নয়। সমস্যাটি নথিভুক্ত করা হয়েছে। একটু পরে আবার চেষ্টা করুন; যদি বারবার হতে থাকে, নিচের রেফারেন্সটি জানান।</p>
  <p rst-error-cta>
    <a rst-btn="primary" href="/">শুরুর পৃষ্ঠা</a>
  </p>
  <p class="rst-mono" rst-error-ref dir="auto">রেফারেন্স: k3f9tq</p>
</div>
{{template "error-page" dict "Status" 500 "HomeHref" "/" "Ref" "k3f9tq"}}

500 একমাত্র অবস্থা যার সঙ্গে একটি রেফারেন্স থাকে: পরিচালক সেটি দিয়ে লগে grep করতে পারেন।

503: এখন পাওয়া যাচ্ছে না

প্রিভিউ
<div rst-error>
  <p rst-error-status>503</p>
  <h1 rst-error-title>সাইটটি এখন সাময়িকভাবে বন্ধ আছে</h1>
  <p rst-error-body>সাইটটি হালনাগাদ হচ্ছে বা ব্যস্ত আছে। এক মিনিট পরে আবার চেষ্টা করুন।</p>
  <p rst-error-cta>
    <a rst-btn="primary" href="/">শুরুর পৃষ্ঠা</a>
  </p>
</div>
{{template "error-page" dict "Status" 503 "HomeHref" "/"}}

বাকি সব কিছু: সাধারণ জোড়া

প্রিভিউ
<div rst-error>
  <p rst-error-status>418</p>
  <h1 rst-error-title>কিছু একটা ঠিক নেই</h1>
  <p rst-error-body>সেই অনুরোধটি সম্পন্ন করা যায়নি। ফিরে গিয়ে আবার চেষ্টা করুন।</p>
  <p rst-error-cta>
    <a rst-btn="primary" href="/">শুরুর পৃষ্ঠা</a>
  </p>
</div>
{{template "error-page" dict "Status" 418 "HomeHref" "/"}}

পাঁচটি অবস্থার ভাষা ফ্রেমওয়ার্কের ক্যাটালগে লেখা আছে। ষষ্ঠটি সাধারণ জোড়ায় ফিরে যায়, পাঠকের সামনে অনুপস্থিত কোনো কী-এর নাম তুলে ধরে না।

back-nav

এক ধাপ উপরে ফেরার লিঙ্ক, বিস্তারিত বা সম্পাদনার পর্দার উপরে।

একটি রেকর্ডে ফিরে যাওয়া

প্রিভিউ
<nav rst-back-nav>
  <a href="/orders/1">← অর্ডার AB3PX</a>
</nav>
{{template "back-nav" dict "Href" "/orders/1" "Label" "অর্ডার AB3PX"}}

locale-menu

ভাষা বদলের সুইচ: একটি details মেনু, যাতে /_locale-এ পাঠানো এক-ফিল্ডের POST ফর্ম থাকে, যাতে বাছাইটি locale কুকিতে গিয়ে বসে আর পাঠক একই পথেই থাকেন।

বারোটি ভাষা, বর্তমানটি চিহ্নিত।

প্রিভিউ
<details rst-dropdown rst-locale name="rst-menus">
  <summary>
    ভাষা
    <span rst-caret aria-hidden="true">
      <svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6 9 6 6 6-6"/></svg>
    </span>
  </summary>
  <div rst-dropdown-menu>
    <form method="post" action="/_locale">
      <input type="hidden" name="locale" value="en">
      <input type="hidden" name="return" value="/">
      <button type="submit" lang="en">English</button>
    </form>
    <form method="post" action="/_locale">
      <input type="hidden" name="locale" value="ga">
      <input type="hidden" name="return" value="/">
      <button type="submit" lang="ga">Gaeilge</button>
    </form>
    <form method="post" action="/_locale">
      <input type="hidden" name="locale" value="zh-Hans">
      <input type="hidden" name="return" value="/">
      <button type="submit" lang="zh-Hans">简体中文</button>
    </form>
    <form method="post" action="/_locale">
      <input type="hidden" name="locale" value="es">
      <input type="hidden" name="return" value="/">
      <button type="submit" lang="es">Español</button>
    </form>
    <form method="post" action="/_locale">
      <input type="hidden" name="locale" value="hi">
      <input type="hidden" name="return" value="/">
      <button type="submit" lang="hi">हिन्दी</button>
    </form>
    <form method="post" action="/_locale">
      <input type="hidden" name="locale" value="pt-PT">
      <input type="hidden" name="return" value="/">
      <button type="submit" lang="pt-PT">Português</button>
    </form>
    <form method="post" action="/_locale">
      <input type="hidden" name="locale" value="bn">
      <input type="hidden" name="return" value="/">
      <button type="submit" lang="bn" aria-current="true">বাংলা</button>
    </form>
    <form method="post" action="/_locale">
      <input type="hidden" name="locale" value="ru">
      <input type="hidden" name="return" value="/">
      <button type="submit" lang="ru">Русский</button>
    </form>
    <form method="post" action="/_locale">
      <input type="hidden" name="locale" value="ja">
      <input type="hidden" name="return" value="/">
      <button type="submit" lang="ja">日本語</button>
    </form>
    <form method="post" action="/_locale">
      <input type="hidden" name="locale" value="yue">
      <input type="hidden" name="return" value="/">
      <button type="submit" lang="yue">廣東話</button>
    </form>
    <form method="post" action="/_locale">
      <input type="hidden" name="locale" value="vi">
      <input type="hidden" name="return" value="/">
      <button type="submit" lang="vi">Tiếng Việt</button>
    </form>
    <form method="post" action="/_locale">
      <input type="hidden" name="locale" value="ar">
      <input type="hidden" name="return" value="/">
      <button type="submit" lang="ar">العربية</button>
    </form>
  </div>
</details>
{{template "locale-menu" dict "Items" .Locales "Return" "/"}}

এটি /_locale-এ পোস্ট করে, তাই এর একটি সার্ভার লাগে। এর Items আসে rastrillo.LocaleItems(r) থেকে। এই পাতার নিজস্ব হেডারের সুইচারটি কেবল লিংক দিয়ে তৈরি সংস্করণ।

scheme-menu

রঙের ধরন বদলানোর সুইচ: /_theme-এ এক-ক্ষেত্রের POST ফর্মের একটি details মেনু, হালকা, গাঢ় ও সিস্টেমের জন্য, যাতে পছন্দটি ধরন কুকিতে থাকে আর পাঠক একই পাতায় থাকেন।

তিনটি পছন্দ, বর্তমানে গাঢ়।

প্রিভিউ
<details rst-dropdown rst-scheme name="rst-menus">
  <summary>
    রঙের ধরন
    <span rst-caret aria-hidden="true">
      <svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m6 9 6 6 6-6"/></svg>
    </span>
  </summary>
  <div rst-dropdown-menu role="group" aria-label="রঙের ধরন">
    <form method="post" action="/_theme">
      <input type="hidden" name="scheme" value="light">
      <input type="hidden" name="return" value="/">
      <button type="submit">হালকা</button>
    </form>
    <form method="post" action="/_theme">
      <input type="hidden" name="scheme" value="dark">
      <input type="hidden" name="return" value="/">
      <button type="submit" aria-current="true">গাঢ়</button>
    </form>
    <form method="post" action="/_theme">
      <input type="hidden" name="scheme" value="system">
      <input type="hidden" name="return" value="/">
      <button type="submit">সিস্টেম</button>
    </form>
  </div>
</details>
{{template "scheme-menu" dict "Scheme" "dark" "Return" "/"}}

এটি /_theme-এ পোস্ট করে, তাই এর একটি সার্ভার লাগে। এর Scheme আসে rastrillo.SchemeFrom(r) থেকে; ui.ForRequest সেটি বহন করে। এই পাতার নিজস্ব বারের সুইচটি গ্যালারির নিজের।

api-tokens

apitoken-এর PageData থেকে টোকেন পাতা: একবার দেখানো, তৈরির ফর্ম, তালিকা আর বাতিলের বোতাম।

চারটি টোকেন, তার দুটি সক্রিয়

প্রিভিউ
<div rst-tokens>
  <section rst-box>
    <form rst-form method="post" action="/tokens">
      <div rst-field>
        <label rst-field-label for="agent">এজেন্টের নাম</label>
        <input rst-input type="text" id="agent" name="agent" maxlength="40">
      </div>
      <label rst-switch>
        <input type="checkbox" name="for_self" value="on">
        <span rst-switch-track aria-hidden="true"></span>
        এই টোকেন আমার জন্য, কোনো এজেন্টের জন্য নয়
      </label>
      <fieldset rst-choice>
        <legend>অ্যাক্সেস</legend>
        <div rst-choice-cards>
          <label>
            <input type="radio" name="access" value="write" checked>
            <span>
              <span rst-choice-title>পড়া ও লেখা</span>
            </span>
          </label>
          <label>
            <input type="radio" name="access" value="read">
            <span>
              <span rst-choice-title>শুধু পড়া</span>
            </span>
          </label>
        </div>
      </fieldset>
      <div rst-field>
        <label rst-field-label for="expiry">মেয়াদ শেষ</label>
        <select rst-input="short" id="expiry" name="expiry">
          <option value="30">30 দিন</option>
          <option value="90" selected>90 দিন</option>
          <option value="365">1 বছর</option>
          <option value="never">কখনও না</option>
        </select>
      </div>
      <div rst-form-foot>
        <button rst-btn="primary lg" type="submit">টোকেন তৈরি করুন</button>
      </div>
    </form>
  </section>
  <div rst-card rst-tokens-list>
    <div rst-lrow="head">
      <span>টোকেন</span>
      <span class="rst-m-hide">অ্যাক্সেস</span>
      <span class="rst-m-hide">তৈরি হয়েছে</span>
      <span class="rst-m-hide">শেষ ব্যবহার</span>
      <span class="rst-m-hide">মেয়াদ শেষ</span>
      <span></span>
      <span></span>
    </div>
    <div rst-lrow>
      <span class="rst-nm"><span rst-actor>Grace Hopper-এর জন্য Claude</span>
        <small>
          <code>k3Jx9QpL2mWa</code>
        </small>
      </span>
      <span rst-tokens-fact><span rst-tokens-fact-label>অ্যাক্সেস</span>পড়া ও লেখা</span>
      <span rst-tokens-fact><span rst-tokens-fact-label>তৈরি হয়েছে</span><time datetime="2026-08-02">2026-08-02</time></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>শেষ ব্যবহার</span><time datetime="2026-08-11">2026-08-11</time></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>মেয়াদ শেষ</span><time datetime="2026-10-31">2026-10-31</time></span>
      <span rst-tokens-state></span>
      <details rst-row-menu name="rst-menus">
        <summary aria-label="Grace Hopper-এর জন্য Claude-এর জন্য কাজ">
          <svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="1"/><circle cx="12" cy="5" r="1"/><circle cx="12" cy="19" r="1"/></svg>
        </summary>
        <div rst-row-menu-panel>
          <form method="post" action="/tokens/revoke">
            <input type="hidden" name="id" value="k3Jx9QpL2mWa">
            <button type="submit">বাতিল করুন</button>
          </form>
        </div>
      </details>
    </div>
    <div rst-lrow>
      <span class="rst-nm"><span rst-actor>Grace Hopper</span>
        <small>
          <code>Qm2vR8sT4xYb</code>
        </small>
      </span>
      <span rst-tokens-fact><span rst-tokens-fact-label>অ্যাক্সেস</span>শুধু পড়া</span>
      <span rst-tokens-fact><span rst-tokens-fact-label>তৈরি হয়েছে</span><time datetime="2026-08-02">2026-08-02</time></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>শেষ ব্যবহার</span></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>মেয়াদ শেষ</span>কখনও না</span>
      <span rst-tokens-state></span>
      <details rst-row-menu name="rst-menus">
        <summary aria-label="Grace Hopper-এর জন্য কাজ">
          <svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="1"/><circle cx="12" cy="5" r="1"/><circle cx="12" cy="19" r="1"/></svg>
        </summary>
        <div rst-row-menu-panel>
          <form method="post" action="/tokens/revoke">
            <input type="hidden" name="id" value="Qm2vR8sT4xYb">
            <button type="submit">বাতিল করুন</button>
          </form>
        </div>
      </details>
    </div>
    <div rst-lrow>
      <span class="rst-nm"><span rst-actor>Grace Hopper-এর জন্য Codex</span>
        <small>
          <code>Zp7wN1cH6kLd</code>
        </small>
      </span>
      <span rst-tokens-fact><span rst-tokens-fact-label>অ্যাক্সেস</span>পড়া ও লেখা</span>
      <span rst-tokens-fact><span rst-tokens-fact-label>তৈরি হয়েছে</span><time datetime="2026-08-02">2026-08-02</time></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>শেষ ব্যবহার</span></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>মেয়াদ শেষ</span>কখনও না</span>
      <span rst-tokens-state><span rst-status rst-tone="neutral">বাতিল</span></span>
    </div>
    <div rst-lrow>
      <span class="rst-nm"><span rst-actor>Grace Hopper-এর জন্য Nightly import</span>
        <small>
          <code>Vb4tG9yK3nMe</code>
        </small>
      </span>
      <span rst-tokens-fact><span rst-tokens-fact-label>অ্যাক্সেস</span>শুধু পড়া</span>
      <span rst-tokens-fact><span rst-tokens-fact-label>তৈরি হয়েছে</span><time datetime="2026-08-02">2026-08-02</time></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>শেষ ব্যবহার</span></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>মেয়াদ শেষ</span><time datetime="2026-08-11">2026-08-11</time></span>
      <span rst-tokens-state><span rst-status rst-tone="warning">মেয়াদোত্তীর্ণ</span></span>
    </div>
  </div>
  <div rst-tokens-revoke>
    <form method="post" action="/tokens/revoke-agent">
      <input type="hidden" name="agent" value="Claude">
      <button rst-btn type="submit">এই এজেন্টের সব টোকেন বাতিল করুন: Claude</button>
    </form>
    <form method="post" action="/tokens/revoke-all">
      <button rst-btn="danger" type="submit">সব টোকেন বাতিল করুন</button>
    </form>
  </div>
</div>
{{template "api-tokens" dict "Page" .Page "Path" "/tokens"}}

Handlers যা Render-কে দেয় তা Page হিসেবে, আর পাতার নিজের পাথ Path হিসেবে দিন। বাতিলের ফর্মগুলো Path/revoke, Path/revoke-agent আর Path/revoke-all-এ পাঠায়; একটি বদলাতে RevokePath, RevokeAgentPath বা RevokeAllPath সেট করুন।

এইমাত্র তৈরি: গোপন অংশ, একবার দেখানো

প্রিভিউ
<div rst-tokens>
  <div rst-callout rst-tone="positive" tabindex="-1" autofocus>
    <span rst-callout-ic aria-hidden="true">
      <svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="10"/><path d="m9 12 2 2 4-4"/></svg>
    </span>
    <div rst-callout-body>
      <strong>এই টোকেনটি এখনই কপি করুন। এটি আর দেখানো হবে না।</strong>
      <p>
        <code rst-tokens-secret>harbour_k3Jx9QpL2mWa_6bD2qK9xWz4rT8vN1mP3sL7yF5hJ0cG2aE4uB</code>
      </p>
    </div>
  </div>
  <section rst-box>
    <form rst-form method="post" action="/tokens">
      <div rst-field>
        <label rst-field-label for="agent">এজেন্টের নাম</label>
        <input rst-input type="text" id="agent" name="agent" maxlength="40">
      </div>
      <label rst-switch>
        <input type="checkbox" name="for_self" value="on">
        <span rst-switch-track aria-hidden="true"></span>
        এই টোকেন আমার জন্য, কোনো এজেন্টের জন্য নয়
      </label>
      <fieldset rst-choice>
        <legend>অ্যাক্সেস</legend>
        <div rst-choice-cards>
          <label>
            <input type="radio" name="access" value="write" checked>
            <span>
              <span rst-choice-title>পড়া ও লেখা</span>
            </span>
          </label>
          <label>
            <input type="radio" name="access" value="read">
            <span>
              <span rst-choice-title>শুধু পড়া</span>
            </span>
          </label>
        </div>
      </fieldset>
      <div rst-field>
        <label rst-field-label for="expiry">মেয়াদ শেষ</label>
        <select rst-input="short" id="expiry" name="expiry">
          <option value="30">30 দিন</option>
          <option value="90" selected>90 দিন</option>
          <option value="365">1 বছর</option>
          <option value="never">কখনও না</option>
        </select>
      </div>
      <div rst-form-foot>
        <button rst-btn="primary lg" type="submit">টোকেন তৈরি করুন</button>
      </div>
    </form>
  </section>
  <div rst-card rst-tokens-list>
    <div rst-lrow="head">
      <span>টোকেন</span>
      <span class="rst-m-hide">অ্যাক্সেস</span>
      <span class="rst-m-hide">তৈরি হয়েছে</span>
      <span class="rst-m-hide">শেষ ব্যবহার</span>
      <span class="rst-m-hide">মেয়াদ শেষ</span>
      <span></span>
      <span></span>
    </div>
    <div rst-lrow>
      <span class="rst-nm"><span rst-actor>Grace Hopper-এর জন্য Claude</span>
        <small>
          <code>k3Jx9QpL2mWa</code>
        </small>
      </span>
      <span rst-tokens-fact><span rst-tokens-fact-label>অ্যাক্সেস</span>পড়া ও লেখা</span>
      <span rst-tokens-fact><span rst-tokens-fact-label>তৈরি হয়েছে</span><time datetime="2026-08-02">2026-08-02</time></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>শেষ ব্যবহার</span><time datetime="2026-08-11">2026-08-11</time></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>মেয়াদ শেষ</span><time datetime="2026-10-31">2026-10-31</time></span>
      <span rst-tokens-state></span>
      <details rst-row-menu name="rst-menus">
        <summary aria-label="Grace Hopper-এর জন্য Claude-এর জন্য কাজ">
          <svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="1"/><circle cx="12" cy="5" r="1"/><circle cx="12" cy="19" r="1"/></svg>
        </summary>
        <div rst-row-menu-panel>
          <form method="post" action="/tokens/revoke">
            <input type="hidden" name="id" value="k3Jx9QpL2mWa">
            <button type="submit">বাতিল করুন</button>
          </form>
        </div>
      </details>
    </div>
    <div rst-lrow>
      <span class="rst-nm"><span rst-actor>Grace Hopper</span>
        <small>
          <code>Qm2vR8sT4xYb</code>
        </small>
      </span>
      <span rst-tokens-fact><span rst-tokens-fact-label>অ্যাক্সেস</span>শুধু পড়া</span>
      <span rst-tokens-fact><span rst-tokens-fact-label>তৈরি হয়েছে</span><time datetime="2026-08-02">2026-08-02</time></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>শেষ ব্যবহার</span></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>মেয়াদ শেষ</span>কখনও না</span>
      <span rst-tokens-state></span>
      <details rst-row-menu name="rst-menus">
        <summary aria-label="Grace Hopper-এর জন্য কাজ">
          <svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="1"/><circle cx="12" cy="5" r="1"/><circle cx="12" cy="19" r="1"/></svg>
        </summary>
        <div rst-row-menu-panel>
          <form method="post" action="/tokens/revoke">
            <input type="hidden" name="id" value="Qm2vR8sT4xYb">
            <button type="submit">বাতিল করুন</button>
          </form>
        </div>
      </details>
    </div>
    <div rst-lrow>
      <span class="rst-nm"><span rst-actor>Grace Hopper-এর জন্য Codex</span>
        <small>
          <code>Zp7wN1cH6kLd</code>
        </small>
      </span>
      <span rst-tokens-fact><span rst-tokens-fact-label>অ্যাক্সেস</span>পড়া ও লেখা</span>
      <span rst-tokens-fact><span rst-tokens-fact-label>তৈরি হয়েছে</span><time datetime="2026-08-02">2026-08-02</time></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>শেষ ব্যবহার</span></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>মেয়াদ শেষ</span>কখনও না</span>
      <span rst-tokens-state><span rst-status rst-tone="neutral">বাতিল</span></span>
    </div>
    <div rst-lrow>
      <span class="rst-nm"><span rst-actor>Grace Hopper-এর জন্য Nightly import</span>
        <small>
          <code>Vb4tG9yK3nMe</code>
        </small>
      </span>
      <span rst-tokens-fact><span rst-tokens-fact-label>অ্যাক্সেস</span>শুধু পড়া</span>
      <span rst-tokens-fact><span rst-tokens-fact-label>তৈরি হয়েছে</span><time datetime="2026-08-02">2026-08-02</time></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>শেষ ব্যবহার</span></span>
      <span rst-tokens-fact><span rst-tokens-fact-label>মেয়াদ শেষ</span><time datetime="2026-08-11">2026-08-11</time></span>
      <span rst-tokens-state><span rst-status rst-tone="warning">মেয়াদোত্তীর্ণ</span></span>
    </div>
  </div>
  <div rst-tokens-revoke>
    <form method="post" action="/tokens/revoke-agent">
      <input type="hidden" name="agent" value="Claude">
      <button rst-btn type="submit">এই এজেন্টের সব টোকেন বাতিল করুন: Claude</button>
    </form>
    <form method="post" action="/tokens/revoke-all">
      <button rst-btn="danger" type="submit">সব টোকেন বাতিল করুন</button>
    </form>
  </div>
</div>
{{template "api-tokens" dict "Page" .Page "Path" "/tokens"}}

তৈরির ফর্মের জবাব Created সেট করে রেন্ডার করুন, আর তা রিডাইরেক্ট করবেন না: গোপন অংশ ওই জবাবেই আছে, আর কোথাও নেই।

এখনও কোনো টোকেন নেই

প্রিভিউ
<div rst-tokens>
  <section rst-box>
    <form rst-form method="post" action="/tokens">
      <div rst-field>
        <label rst-field-label for="agent">এজেন্টের নাম</label>
        <input rst-input type="text" id="agent" name="agent" maxlength="40">
      </div>
      <label rst-switch>
        <input type="checkbox" name="for_self" value="on">
        <span rst-switch-track aria-hidden="true"></span>
        এই টোকেন আমার জন্য, কোনো এজেন্টের জন্য নয়
      </label>
      <fieldset rst-choice>
        <legend>অ্যাক্সেস</legend>
        <div rst-choice-cards>
          <label>
            <input type="radio" name="access" value="write" checked>
            <span>
              <span rst-choice-title>পড়া ও লেখা</span>
            </span>
          </label>
          <label>
            <input type="radio" name="access" value="read">
            <span>
              <span rst-choice-title>শুধু পড়া</span>
            </span>
          </label>
        </div>
      </fieldset>
      <div rst-field>
        <label rst-field-label for="expiry">মেয়াদ শেষ</label>
        <select rst-input="short" id="expiry" name="expiry">
          <option value="30">30 দিন</option>
          <option value="90" selected>90 দিন</option>
          <option value="365">1 বছর</option>
          <option value="never">কখনও না</option>
        </select>
      </div>
      <div rst-form-foot>
        <button rst-btn="primary lg" type="submit">টোকেন তৈরি করুন</button>
      </div>
    </form>
  </section>
  <div rst-empty>
    <p rst-empty-body>এখনও কোনো টোকেন নেই।</p>
  </div>
</div>
{{template "api-tokens" dict "Page" .Page "Path" "/tokens"}}