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

UI প্রিমিটিভ

যেসব আকার কোনও কম্পোনেন্ট হতে পারে না, কারণ সেগুলি এমন একটি দেহ ঘিরে রাখে যা কেবল আহ্বানকারীই জানে: সেকশন কার্ড, ডেটা গ্রিড, ডিসক্লোজার মেনু, আর শেলগুলির নিজস্ব কাঠামো। tokens.css ক্লাস দেয়, আর অ্যাপ মার্কআপ লেখে। নিচের সবটাই সেই মার্কআপ যা ui.Styleguide ফেরত দেয়, শুধু তার শব্দগুলি আপনার ভাষায়, আর ui-এর পরীক্ষাগুলি সেই মার্কআপকেই tokens.css-এর বিপরীতে ধরে রাখে।

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

box

প্যাডিংযুক্ত বিভাগের কার্ড, আর যে শিরোনামটি তার বাইরে বসে।

কোন কার্ড কোনটি

rst-list আর rst-card-এ ইচ্ছে করেই কোনো প্যাডিং নেই: এরা সারির একটি ধারা ধরে রাখে, আর প্রতিটি সারি নিজেই নিজের প্যাডিং দেয়। এদের ভিতরে সরাসরি কোনো ফর্ম, অনুচ্ছেদ, লিঙ্কের সারি বা সারি নয় এমন কিছু রাখলে তা সীমানার গায়ে লেগে বসবে; কিনারা ছুঁয়ে থাকা লেখাই সেই লক্ষণ। যেকোনো বিষয়বস্তুর জন্য প্যাডিংযুক্ত কার্ডটি rst-box, আর তার শিরোনাম আসে আগে, সহোদর rst-box-head হিসেবে।

প্রিভিউ
<div rst-box-head>
  <h2>পেআউট</h2>
  <a rst-btn href="/payout/edit">সম্পাদনা</a>
</div>
<section rst-box>
  <p>স্ক্রিনের সবকিছু বাক্সের ভিতরে থাকে।</p>
  <div rst-box-foot>2 ঘণ্টা আগে হালনাগাদ</div>
</section>

button

বোতাম আসে চার রকমে আর তিন মাপে, আর একটি লিংকও বোতামের মতো দেখাতে পারে। ফর্ম পাঠানোর সময় যে স্পিনার দেখায়, তার জন্য form-foot দেখুন।

প্রিভিউ
<p>
  <button rst-btn type="button">বাতিল</button> <button rst-btn="primary" type="button">সংরক্ষণ করুন</button> <button rst-btn="ghost" type="button">প্রিভিউ</button> <button rst-btn="danger" type="button">মুছুন</button>
</p>
<p>
  <button rst-btn="primary sm" type="button">ছোট</button> <button rst-btn="primary" type="button">সাধারণ</button> <button rst-btn="primary lg" type="button">বড়</button> <a rst-btn href="/orders">অর্ডার দেখুন</a>
</p>
<p>
  <button rst-btn="primary block" type="button">চালিয়ে যান</button>
</p>
<p>
  <button rst-btn type="button" disabled>আর্কাইভ করা</button>
</p>

dropdown

হেডারের বাড়তি মেনু আর তালিকা বারের ফিল্টারের পিছনে থাকা details/summary মেনু, সঙ্গে প্রয়োগ করা ফিল্টার একটি সরানো-যায় এমন চিপ হিসেবে।

প্রিভিউ
<details rst-dropdown 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>
    <span class="rst-sr-only">অর্ডার ছাঁকুন: পরিশোধিত</span>
  </summary>
  <div rst-dropdown-menu>
    <a aria-current="true" href="/orders?status=paid">পরিশোধিত</a>
    <details rst-menu-group name="rst-menus-price" open>
      <summary>দাম</summary>
      <div>
        <a href="/orders?price=free">বিনামূল্যে</a>
      </div>
    </details>
  </div>
</details>
<span rst-ftok>
  <span rst-ftok-k>পরিশোধিত</span>
  <a href="/orders" aria-label="ছাঁকনি সরান: পরিশোধিত">✕</a>
</span>

form-layout

যে অ্যাট্রিবিউটগুলো ফর্মকে তার ছন্দ আর সংরক্ষণের পট্টি দেয়। কোনো পার্শিয়াল এগুলো বের করে না; এরা ব্যবহারকারীর নিজের সাজানো ফিল্ডের সারিকে ঘিরে রাখে।

প্রিভিউ
<form rst-form-flow method="post" action="/settings">
  <div rst-field>
    <label rst-field-label for="name">নাম</label>
    <input rst-input type="text" id="name" name="name">
  </div>
  <div rst-field>
    <label rst-field-label for="email">ইমেল</label>
    <input rst-input type="email" id="email" name="email">
  </div>
  <div rst-field-row>
    <div class="rst-grow" rst-field>
      <label rst-field-label for="city">শহর</label>
      <input rst-input type="text" id="city" name="city">
    </div>
    <div rst-field>
      <label rst-field-label for="zip">পিন</label>
      <input rst-input="short" type="text" id="zip" name="zip">
    </div>
  </div>
  <div rst-form-bar>
    <span rst-form-bar-note>পরিবর্তন সঙ্গে সঙ্গে সংরক্ষিত হয়।</span>
    <div rst-form-actions>
      <a rst-btn href="/settings">বাতিল</a>
      <button rst-btn="primary" type="submit">সংরক্ষণ করুন</button>
    </div>
  </div>
</form>

help

সীমানাযুক্ত একটি প্রশ্নচিহ্ন, যা সহায়তা নিবন্ধে নিয়ে যায়। এর CSS টুলটিপ কেবল সাজসজ্জা; লিঙ্কটি নিজের পূর্ণ বাক্যের লেবেল বহন করে।

প্রিভিউ
<a rst-help rst-tip href="/help/orders" target="_blank" rel="noopener" aria-label="সহায়তা: অর্ডার" data-tip="অর্ডার সম্পর্কে">
  <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.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/><path d="M12 17h.01"/></svg>
</a>

list-grid

ডেটা টেবিলের আসল শব্দভান্ডার: কার্ড একবারেই তার কলাম ঠিক করে, সারিরা কেবল ঘর বেছে নেয়।

পর্দাগুলো উপর-নিচে সাজে

একটি স্ক্রিন হলো একটি কলাম: page-header, তারপর section-header + কার্ড, তারপর পরের section-header + কার্ড, পড়ার ক্রমে। আনুভূমিক বিন্যাস কেবল সেই প্রকরণগুলোর জন্য যেগুলো তা নিয়েই আসে: rst-box-head, rst-field-row, rst-lbar, rst-lrow ঘর, rst-seg-tabs।

প্রিভিউ
<div rst-card style="--rst-cols: 2fr 110px var(--rst-col-menu)">
  <div rst-lrow="head">
    <span>অর্ডার</span>
    <span class="rst-m-hide">অবস্থা</span>
    <span></span>
  </div>
  <div rst-lrow>
    <a class="rst-nm" href="/orders/AB3PX"><bdi>Grace Hopper</bdi>
      <small>AB3PX · <bdi>grace@example.com</bdi></small>
    </a>
    <span class="rst-m-hide rst-cell-mut">পরিশোধিত</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>
        <a href="/orders/AB3PX">দেখুন</a>
        <hr>
        <a class="rst-danger" href="/orders/AB3PX/refund">অর্ডারের টাকা ফেরত দিন…</a>
      </div>
    </details>
  </div>
  <p rst-no-match>কোনো অর্ডার মেলেনি। <a href="/orders">ছাঁকনি মুছুন</a></p>
</div>
<p rst-count-line>
  <strong>412</strong>টির মধ্যে <strong>1–20</strong> দেখানো হচ্ছে</p>

modal

মোডালের নিজস্ব একটি URL থাকে, এটি ক্লায়েন্টের অবস্থা নয়: নিচের পাতাটি inert চিহ্নিত, তার উপরে প্যানেল, আর বন্ধ করার জন্য একটি সাধারণ লিঙ্ক।

প্রিভিউ
<div rst-backdrop inert>
  <div rst-page>
    <h1>সেটিংস</h1>
  </div>
</div>
<div rst-modal-overlay>
  <dialog rst-modal-panel open aria-labelledby="modal-title">
    <nav>
      <a href="/settings/profile" aria-current="page">প্রোফাইল</a>
      <a href="/settings/billing">বিলিং</a>
      <a href="/settings/notifications">বিজ্ঞপ্তি</a>
    </nav>
    <section>
      <a rst-modal-close href="/settings" aria-label="সেটিংস বন্ধ করুন">✕</a>
      <h2 id="modal-title">প্রোফাইল</h2>
      <p>পুরো অ্যাকাউন্ট জুড়ে যে নাম আর ছবি দেখা যায়, তা বদলান।</p>
    </section>
  </dialog>
</div>

যে URL-এ এর থাকার কথা, সেখানেই একে চলতে দেখুন (নতুন ট্যাবে খোলে).

selbox

নির্বাচন মোডে তালিকার সারি যে চেকবক্সটি পরে। এর লেবেল সারিটির পরিচয় আবার বলে দেয়।

প্রিভিউ
<label rst-selbox>
  <input type="checkbox" aria-label="অর্ডার AB3PX নির্বাচন করুন">
</label>

shell-sidebar

কোনো কনটেন্ট পাতায় sidebar শেলের কাঠামো: ফোনে, সূচিতে ফিরে যাওয়ার একটি নিয়ন্ত্রণ।

প্রিভিউ
<div rst-shell-sidebar="page">
  <a rst-skip href="#main">মূল বিষয়ে যান</a>
  <div rst-shell-back>
    <a href="/#nav-reports" rel="up" aria-label="বিভাগসমূহে ফিরে যান">বিভাগসমূহ</a>
  </div>
  <aside rst-shell-rail>
    <h1 rst-shell-title>
      <span><a rst-shell-brand href="/">Notes</a></span><span>রিপোর্ট</span>
    </h1>
    <a rst-shell-brand href="/">Notes</a>
    <nav rst-shell-nav>
      <span rst-shell-group>কাজ</span>
      <a id="nav-dashboard" href="/dashboard">ড্যাশবোর্ড</a>
      <a id="nav-reports" href="/reports" aria-current="page">রিপোর্ট</a>
    </nav>
    <div rst-shell-rail-foot>
      <details rst-dropdown rst-shell-profile name="rst-shell-menu">
        <summary>
          <span rst-shell-avatar>
            <span rst-person-av aria-hidden="true">A</span>
            <span rst-person-name>Ada Lovelace</span>
          </span>
        </summary>
        <div rst-dropdown-menu>
          <div rst-shell-who>
            <span rst-person-av aria-hidden="true">A</span>
            <span rst-person-name>Ada Lovelace</span>
            <span rst-person-email>ada@example.com</span>
          </div>
          <a href="/settings">সেটিংস</a>
        </div>
      </details>
    </div>
  </aside>
  <main rst-shell-main id="main">
    <div rst-page>বিষয়বস্তু।</div>
  </main>
</div>

সাইডবার শেলের ডেমো খুলুন, একটি আলাদা প্রিভিউ। (নতুন ট্যাবে খোলে).

shell-topbar

টপবার শেলের নিজস্ব কাঠামো, মার্কআপ হিসেবে। Layout এটিকে একটি পূর্ণ টেমপ্লেট হিসেবে দেয়।

প্রিভিউ
<div rst-shell-topbar>
  <a rst-skip href="#main">মূল বিষয়ে যান</a>
  <header rst-shell-bar>
    <a rst-shell-brand href="/">Notes</a>
    <details rst-shell-menu name="rst-shell-menu">
      <summary>
        <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="M4 12h16"/><path d="M4 6h16"/><path d="M4 18h16"/></svg>মেনু</summary>
    </details>
    <div rst-shell-tail>
      <nav rst-shell-nav>
        <a href="/" aria-current="page">হোম</a>
        <a href="/archive">আর্কাইভ</a>
      </nav>
      <details rst-dropdown rst-shell-account 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>
          <a href="/settings">সেটিংস</a>
        </div>
      </details>
    </div>
  </header>
  <main rst-page id="main">বিষয়বস্তু।</main>
  <footer rst-shell-foot>rastrillo দিয়ে তৈরি</footer>
</div>

টপবার শেলের ডেমো খুলুন, এর নিজস্ব একটি প্রিভিউ। (নতুন ট্যাবে খোলে).

stat-band

ড্যাশবোর্ডের উপরে পরিসংখ্যানের একটি সারি।

প্রিভিউ
<div rst-stats>
  <div rst-stat="lead">
    <span rst-stat-label>এই মাসের আয়</span>
    <span rst-stat-num>&euro;48,210</span>
    <span rst-stat-delta rst-tone="positive">+12%</span>
    <span rst-stat-note>গত মাসের তুলনায়</span>
  </div>
  <div rst-stat>
    <span rst-stat-label>আজকের অর্ডার</span>
    <span rst-stat-num>318</span>
  </div>
  <div rst-stat>
    <span rst-stat-label>গড় অর্ডার মূল্য</span>
    <span rst-stat-num>&euro;41.20</span>
    <span rst-stat-delta rst-tone="negative">&minus;3%</span>
  </div>
  <div rst-stat>
    <span rst-stat-label>ফেরত</span>
    <span rst-stat-num>7</span>
  </div>
</div>

tblock

সীমানাযুক্ত একটি কার্ড, যার ভিতরের অংশ :has() দিয়ে কেবল সুইচ চালু থাকলেই দেখা যায়। সুইচই আসল অবস্থা; দেখানোটা কেবল সুবিধা।

প্রিভিউ
<div rst-tblock>
  <label rst-tblock-head>
    <input type="checkbox" name="notify" checked>
    <span rst-switch-track aria-hidden="true"></span>
    <span>
      <span rst-tblock-title>ইমেল বিজ্ঞপ্তি</span>
      <span rst-tblock-desc>আপনি যে থ্রেডে আছেন তার প্রতিটি উত্তরে পাঠানো হয়।</span>
    </span>
  </label>
  <div rst-tblock-body>
    <div rst-field>
      <label rst-field-label for="notify-freq">কত ঘনঘন</label>
      <input rst-input type="text" id="notify-freq" name="notify_freq" value="দৈনিক সারসংক্ষেপ">
    </div>
  </div>
</div>