دیزاین سیستم کامپوننت‌ها

کتابخانه کامپوننت

۱۶ کامپوننت آماده که کل رابط تقویمم از آن‌ها ساخته شده است. همه نمونه‌های این صفحه با همان کلاس‌های واقعی assets/app.css رندر شده‌اند — نه بازطراحی‌ای برای مستندات. نمونه‌ها زنده‌اند: سوییچ و چک‌باکس را بزنید، چیپ و تب را عوض کنید. با تغییر پوسته از نوار بالا، همه را در هر دو تم ببینید.

کنترل‌های عمل۳ کامپوننت — از دکمه متن‌محور تا شناور

۱دکمه

.btn۵ گونه · ۲ اندازه · استیت‌های هاور، فوکوس، غیرفعال و بارگذاری · دکمه متنی .linkish

پرکاربردترین کامپوننت سیستم با پنج گونه. سلسله‌مراتب با گونه ساخته می‌شود، نه با اندازه یا رنگ اضافه.

اصلی — primary
تنال — tonal
خطی — outline
متنی — text
مخرب — danger-text
متنی درون‌خطی — linkish
linkish غیرفعال
با آیکون ۱۷px
کوچک — sm
غیرفعال
در حال انجام
هاور (اجباری‌شده)
گونهکلاسچه زمانی
اصلی.btn.primaryاکشن اصلی هر نما — فقط یکی در هر نما
تنال.btn.tonalاکشن دوم در کنار اصلی (مثل «افزودن» در سایدبار)
خطی.btn.outlineانصراف، بستن، اکشن‌های خنثی دیالوگ
متنی.btn.textلینک‌های درون‌متنی و اکشن‌های کم‌اهمیت
مخرب.btn.danger-textفقط حذف — همیشه تنها و در سمت مخالف اکشن اصلی
متنی درون‌خطی.linkishاکشن کم‌اهمیت داخل متن یا پانویس فرم («بازگشت»، «ارسال مجدد») — رنگ لینک، هاور با پس‌زمینه ظریف، استیت غیرفعال مجاز

اندازه‌ها: پیش‌فرض ۴۰px · کوچک .sm ۳۲px · حالت بارگذاری = جایگزینی متن با اسپینر (عرض ثابت می‌ماند).

<button class="btn primary">ذخیره رویداد</button>
<button class="btn primary" disabled>ذخیره</button>   <!-- تا اعتبارسنجی فرم -->
<button class="btn primary"><span class="spinner"></span></button> <!-- در حال ذخیره -->

بایدر

  • فعل مثبت کوتاه: «ذخیره»، «ایجاد رویداد»، «ارسال کد».
  • در فرم دیالوگ: اصلی برای تأیید، خطی برای انصراف، مخرب تنها برای حذف.

نبایدر

  • دو دکمه primary در یک نما یا گروه کنار هم.
  • فعل منفی یا مبهم: «عدم ذخیره»، «تأیید نهایی نهایی».

۲دکمه آیکونی

.icon-btn۲ اندازه · همیشه با aria-label

اکشنی که آیکونش خودگویاست؛ دایره‌ای، دو اندازه، همیشه با aria-label.

پیش‌فرض ۴۰px
کوچک ۳۰px
هاور (اجباری‌شده)

هاور: پس‌زمینه سطح ۲ + متن به رنگ اصلی. فقط جایی که معنی آیکون قطعی است؛ در غیر این صورت دکمه متنی.

<button class="icon-btn" aria-label="بستن">
  <svg viewBox="0 0 24 24" width="20" height="20" ></svg>
</button>

۳دکمه شناور (FAB)

.fab۵۶px · شعاع ۱۸ · میان‌بر N

میان‌بر «ایجاد» در کلاس‌های compact و medium که سایدبار دائمی ندارند. رفتارش با زمینه عوض می‌شود: در نمای وظایف «ایجاد وظیفه»، در بقیه نماها «ایجاد رویداد».

۵۶×۵۶ · شعاع ۱۸ · سایه ۲
ویژگیمقدار
جایگاهگوشه پایین—ابتدا (inset-inline-start در RTL) · ۲۰px از لبه‌ها، بالای ناوبری پایین
هاورسایه ۳ + ۲px بالا؛ فشردن: مقیاس ۰٫۹۶
کلید میان‌برN — همان عملکرد FAB
ورودی و تنظیم۴ کامپوننت — فرم‌ها و کنترل‌های وضعیت

۴فیلد ورودی

.fieldخانواده ورودی — input / select / textarea

خانواده سه‌تایی ورودی متن، انتخابی و چندخطی — با لیبل بالای فیلد و خطای زیر آن.

پایان نمی‌تواند قبل از شروع باشد
قاعدهمقدار
ارتفاع کنترل۴۲px (textarea حداقل ۸۸)
لیبل۱۳px / ۶۰۰ / --muted — همیشه بیرون فیلد
فوکوسخط برند + هاله ۳px با ۱۴٪ شفافیت
خطاکلاس .invalid روی field + متن .err — هرگز فقط رنگ قرمز بدون متن
ورودی عددی چپ‌چین.input.ltr برای شماره‌همراه و کدها — جهت LTR، ارقام هم‌عرض
placeholderمثال واقعی، نه دستور («مثلاً: جلسه تیم فنی»)

جعبه‌های OTP

ورودی کد یک‌بارمصرف: شش خانه جدا با یک input نامرئی روی همه؛ ارقام فارسی، جهت چپ‌به‌راست.

۳۴۲

استیت‌ها: .fill پر · .cur فعلی (هاله برند) · .bad کد غلط (قرمز + لرزش .shake)

<div class="otp-boxes">
  <span class="box fill">۳</span> <!-- … ۶ خانه -->
  <input class="otp-input" inputmode="numeric" maxlength="6">
</div>

۵انتخابگر تاریخ و ساعت

.dt-field۲ سِگمنت · ۴ استیت

یک کنترل پیوسته به‌جای چهار جعبه جدا: سِگمنت تاریخ (بازکردن تقویم جلالی) + خط جداکننده + سِگمنت ساعت با دو سلکت بی‌خطِ «ساعت : دقیقه». در یک سطر جا می‌شود حتی در ۳۲۰px.

:
:
:
پایان نمی‌تواند قبل از شروع باشد
تمام‌روز
استیت / جزءرفتار
.open / فوکوسکل قرص هاله برند می‌گیرد — حتی وقتی فوکوس روی سلکت ساعت است
.time-offبا فعال‌کردن «تمام‌روز» سِگمنت ساعت محو-نیمه‌شفاف و غیرکلیک‌شدنی می‌شود
.field.invalidکل قرص قرمز تعطیلات + متن خطا زیر آن
سِگمنت تاریخآیکون تقویم + «روز ماه» فارسی؛ کلیک = پاپ‌آور تقویم (§انتخاب تاریخ جلالی)
سِگمنت ساعتدو سلکت ۴۶px بی‌خط و بی‌چورون، ارقام فارسی، وسط‌چین
<div class="dt-field">
  <button class="dt-date" data-dp="start">…۹ شهریور</button>
  <span class="dt-sep"></span>
  <div class="dt-time"><select class="dt-t"></select><span class="dt-colon">:</span><select class="dt-t"></select></div>
</div>

۶چک‌باکس گرد

.ccheck۲۲px · رنگ‌پذیر با --c

امضای بصری وظایف تقویمم: دایره‌ای و رنگ‌پذیر — از رنگ تقویمِ والد رنگ می‌گیرد.

خالی — کلیک کنید
انجام‌شده (پیش‌فرض برند)
رنگ تقویم والد — --c

۲۲px · تیک با انیمیشن مقیاس ۰٫۵→۱ · عنوان وظیفه انجام‌شده خط‌می‌خورد و کم‌رنگ می‌شود.

<button class="ccheck" style="--c: var(--ev-4)"
        role="checkbox" aria-checked="true"><svg…/></button>

۷سوییچ

.switch۴۴×۲۶ · اثر بی‌درنگ، بدون تأیید

تنظیم بی‌درنگِ وضعیت‌ها — بدون دکمه تأیید. جابه‌جایی دستگیره با inset-inline-start انیمیت می‌شود تا در RTL درست حرکت کند.

خاموش
روشن — برند

۴۴×۲۶ · دستگیره ۱۸px · کاربرد: «تمام‌روز»، دید/پنهان‌کردن تقویم‌ها، تنظیمات اعلان.

ناوبری و انتخاب۳ کامپوننت — فیلتر، تب و شمارنده

۸چیپ

.chip۳ استیت · فیلتر و انتخاب

فیلتر و انتخاب از میان گزینه‌های کم‌شمار: فیلترهای نما، انتخاب نوع رویداد، انتخاب رنگ تقویم.

پیش‌فرض
انتخاب‌شده
با نقطه رنگ تقویم
هاور (اجباری‌شده)

انتخاب‌شده = ظرف برند با متن پررنگ؛ نه پرشدن کامل با برند (اکشن نیست). توضیح کامل الگوی فیلتر در الگوها.

۹تب قرصی

.tabpillارتفاع ۳۶ · شمارنده زنده

سوئیچ بین زیرمجموعه‌های هم‌سطح — نمای وظایف («همه / امروز / این هفته / انجام‌شده») — با شمارنده زنده.

گروه تب با شمارنده زنده

شمارنده با پس‌زمینه ۱۸٪ برند و رنگ لینک — نه پر برند (نشان ناوبری است، نه اعلان). ارتفاع ۳۶px.

۱۰نشان

.badge۳ گونه · فقط شمارش

شمارنده‌های ناوبری: تعداد وظایف باز روی ریل، سایدبار و نوار پایین.

۳
تک‌رقمی
۱۲
دورقمی
۴۸
خنثی (داخل تب)

حداقل ۲۰px · ۱۱px/۷۰۰ · ارقام فارسی · فقط ناوبری و شمارش — هرگز برای «جدید!» یا برچسب تبلیغ.

لایه‌ها و بازخورد۴ کامپوننت — از دیالوگ تا توست

۱۱دیالوگ و برگه پایین

.dialog۲ چیدمان — مرکزی و برگه پایین

یک کامپوننت، دو چیدمان: در دسکتاپ وسط صفحه با شعاع ۱۶، در موبایل (<۷۲۰px) برگه پایین با دستگیره و شعاع ۲۴ بالایی. جریان استاندارد: پیش‌نمایش فقط‌خواندنی ← دکمه «ویرایش» ← فرم.

قاعدهجزئیات
باز/بستهاسکریم ۴۵٪ + بلور ۳px · ورود: جابه‌جایی ۱۴px + محو ۲۲۰ms · خروج معکوس
بستنEsc، کلیک روی اسکریم، دکمه × — به همین ترتیب اولویت
قفل صفحهاسکرول بدنه هنگام باز بودن قفل می‌شود؛ فوکوس در دیالوگ محبوس است
پاورقیحداکثر یک دکمه اصلی؛ مخرب در سمت مقابل؛ بین «ذخیره/ویرایش» و «انصراف» فاصله ۸px
موبایلعرض کامل، ارتفاع حداکثر ۹۲dvh، دستگیره ۳۶×۴ در بالا — کشیدن به پایین برای بستن
<div class="dialog-backdrop open">
  <div class="dialog" role="dialog" aria-modal="true">
    <div class="dialog-head"></div>
    <div class="dialog-body"></div>
    <div class="dialog-foot"></div>
  </div>
</div>

۱۲منوی پاپ‌آور

.menuلنگرشده به دکمه · بستن با Esc

اکشن‌های فرعی لنگرشده به دکمه (⋯، فلش‌های نما، منوی تنظیمات تقویم).

ثابت‌موقعیت کنار لنگر · آیتم ≥ ۳۸px · بستن با کلیک بیرون یا Esc · آیتم مخرب با رنگ تعطیلات. ساختار و رفتار کامل در الگوی دیالوگ‌ها.

۱۳بنرها

.cf-banner.error-banner.ok-bannerتعارض همگام‌سازی + بازخورد درون‌فرم

دو سطح: بنر سطح اپ فقط برای تعارض نسخه‌ها بین دستگاه‌ها؛ بازخورد درون‌فرم برای خطا و موفقیت (ورود). همگام‌سازی موفق ساکت است — هیچ توستی نمی‌گذارد.

۲ رویداد در دستگاه دیگر تغییر کرده‌اند
کد تأیید شد
قاعدهجزئیات
بنر سطح اپ .cf-bannerچسبیده زیر نوار بالا، تمام‌عرض، بدون سایه؛ پنهان‌سازی با اتریبیوت hidden و قانون .cf-banner[hidden]؛ فقط یک عمل: «مشاهده و تصمیم»
بازخورد فرم .error-banner / .ok-bannerدرون فرم، زیر فیلدها؛ پیش‌فرض پنهان و نمایش با کلاس .on؛ رنگ از --holiday و --ok با پس‌زمینه ۸–۱۰٪
نقش دسترس‌پذیریخطا role=alert · موفقیت role=status

۱۴توست

.toastحداکثر ۱ اکشن · حدود ۴ ثانیه

تأیید کوتاه عمل‌های پس‌زمینه — حداکثر یک اکشن، بدون استک پشته‌ای طولانی.

رویداد حذف شدبازگردانی

میان‌چین پایین · معکوس‌رنگ (تیره در تم روشن و برعکس) · ورود ۲۴۰ms از پایین · بعد از ~۴ ثانیه محو · اکشن با رنگ برندِ روشن‌شده.

<div class="toast">رویداد حذف شد<span class="act">بازگردانی</span></div>
داده‌های تقویم۲ کامپوننت — نمایش داده‌های جلالی

۱۵شبکه ماه جلالی

.mgrid۵ استیت روز + نقطه رویداد

قلب محصول، در سه اندازه استفاده می‌شود: مینی‌ماهِ سایدبار، پاپ‌آور انتخاب تاریخ و نمای سال (۱۲ عدد پشت‌سرهم).

شیدسچپج
۳۰۱۲۳۴۵۶ ۷۸۹۱۰۱۱۱۲۱۳ ۱۴۱۵۱۶۱۷۱۸۱۹۲۰
استیتنشانه
.todayدایره پر برند + عدد سفید پررنگ — تنها استفاده پر برند در گرید
.selحلقه داخلی ۲px برند (انتخاب پاپ‌آور)
.holجمعه/تعطیل — عدد با رنگ تعطیلات
.outروزهای ماه مجاور — ۴۵٪ شفاف
.dotنقطه ۴px پایین روز با رنگ تقویمِ دارای رویداد (--dc)

هفته شنبه‌شروع (ش ی د س چ پ ج) · نسبت ۱:۱ · گپ ۲px · هاور سطح ۲. جزئیات رفتار در الگوی انتخاب تاریخ.

۱۶چیپ رویداد و ردیف وظیفه

.ev-chip.taskچیپ رویداد + ردیف وظیفه — همان مارک‌آپ نمای وظایف

دو واحد نمایش داده تقویممحور — رنگ هر دو از تقویمِ والد می‌آید (--c).

۰۹:۳۰جلسه تیم فنی
۱۴:۰۰تماس با مشتری
🎂 تولد سارا
ارسال گزارش هفتگی
خلاصه هفته برای تیم محصول
۵ شهریور
خرید بلیت جلسه
۳ شهریور · موعد گذشته
جزءمشخصات
چیپ رویداد (سلول ماه)پس‌زمینه ۱۳٪ رنگ تقویم + نوار ۳px ابتدای سطر؛ ساعت با ۱۰px کم‌رنگ؛ عنوان با بیضی کوتاه می‌شود؛ تمام‌روز بدون ساعت
ردیف وظیفه .taskچک‌باکس گرد رنگ تقویم + عنوان ۱۴٫۵px + یادداشت یک‌خطی بیضی‌شونده + نقطه اولویت .pri + موعد در .task-side؛ انجام‌شده: خط‌خورد و کم‌رنگ؛ موعد گذشته: رنگ تعطیلات + «موعد گذشته»
نقاط اولویت۷px · بالا --ev-5 · متوسط --ev-4 · پایین --ev-3

کلیک روی هر دو ← دیالوگ پیش‌نمایش (نه ویرایش مستقیم) — الگوی کامل در بخش بعدی.