پرتوپرتو

تغییرات (Changelog)

تاریخچهٔ نسخه‌های منتشرشدهٔ سیستم طراحی پرتو با تاریخ شمسی

معرفی

این صفحه تاریخچهٔ نسخه‌های منتشرشدهٔ پکیج @partodata/ui در npm را به همراه دسته‌بندی هر تغییر نشان می‌دهد. هر push به شاخهٔ main که از تست‌ها و build رد شود، به صورت خودکار منتشر می‌شود. این فهرست به‌صورت دستی نگه‌داری می‌شود و ممکن است با تأخیر به‌روزرسانی شود — نسخه‌های ۱.۱.۱۵ تا ۱.۱.۲۴ نیز روی npm منتشر شده‌اند اما هنوز در این صفحه دسته‌بندی نشده‌اند.

برای فهرست کامل و رسمی هر نسخه، به CHANGELOG.md در ریشهٔ ریپازیتوری مراجعه کنید؛ برای جزئیات commit-level و diffهای فنی، به انتشارهای GitHub مراجعه کنید.

نصب آخرین نسخه

pnpm add @partodata/ui@latest

نسخه‌های اخیر

آخرین تغییرات منتشرشده در پکیج به همراه دسته‌بندی هر تغییر.

نسخهٔ ۲.۹.۰

آخرین نسخه

۱۶ مرداد ۱۴۰۵

بازطراحی «آخرین تغییرات» — جنس هر تغییر حالا واقعاً دیده می‌شود

تغییر ناسازگار۱
  • ReleaseTimeline دیگر از ActionTimelineProps ارث نمی‌برد. یک mapper نازک روی ActionTimeline بود و حالا رندرکنندهٔ مستقل است، پس propهای ارثی — به‌ویژه hideConnector — حذف شده‌اند. در عوض formatDate، emptyState و limit گرفته و density را رعایت می‌کند. سخت‌گیرانه این یک تغییر ناسازگار است و major می‌طلبد؛ عمداً minor منتشر شد چون کامپوننت ده روز پیش در ۲.۸.۰ آمده و هیچ مصرف‌کننده‌ای prop حذف‌شده را پاس نمی‌دهد — و major یعنی مصرف‌کننده‌های ^2.8 هرگز رفع رنگِ بالا را دریافت نکنند، که کل هدف این انتشار است.

رفع اشکال۲
  • عرض پنل از lg به default آمد: ۷۲۰ پیکسل یعنی ۷۵ نویسهٔ فارسی در هر سطر، حالا ۴۸. روی موبایل ۲۸۱ پیکسل بود (۲۶ نویسه) با ۲۵٪ اسکریمِ مرده، حالا تمام‌عرض. جداکنندهٔ ورودی‌ها divide-y با کنتراست ۱.۲۳:۱ بود — نامرئی — و جای خود را به فضای خالی داد. نقطهٔ خوانده‌نشده ۱.۹۶:۱ بود، جایی که WCAG 1.4.11 حداقل ۳:۱ می‌خواهد.

  • ادبیات محصول اصلاح شد: «به‌روزرسانی جدید» → «تازه در {محصول}»، «مشاهدهٔ همهٔ تغییرات» → «تاریخچهٔ کامل تغییرات»، «متوجه شدم» → «بستن». همین تغییر آخر یک باگ دسترسی‌پذیری را آشکار کرد — نام قابل‌دسترسِ دکمه با برچسب sr-only خودِ ✕ دیالوگ یکی شد، یعنی دو کنترل با یک نام و یک رفتار؛ دکمهٔ اضافیِ فوتر حذف شد به‌جای اینکه واژهٔ سومی اختراع شود.

دسترسی‌پذیری۲
  • جنس تغییر در دو سبز رمزگذاری شده بود: feature روی --sentiment-positive و improvement روی --brand-default — فقط ۹.۹ درجه اختلاف فام، ΔE ۰.۰۶۴ در OKLab، و زیر شبیه‌سازی دوترانوپیا هر دو به یک زردِ بی‌رمق فرومی‌ریختند (ΔE ۰.۰۶۳). یعنی دو جنسی که در تقریباً هر انتشار کنار هم می‌آیند، عملاً یک رنگ بودند. رفع به‌صورت مسئلهٔ کانال انجام شد نه پالت: جنس را اول واژهٔ فارسی حمل می‌کند، بعد آیکون، بعد ته‌رنگ. improvement به --status-middle-text (آبی) رفت. نتیجه: ΔE ۰.۲۷۷ تیره و ۰.۲۳۹ زیر دوترانوپیا، و هر چهار جنس بین ۴.۸۳:۱ تا ۶.۶۸:۱.

  • در ReleaseTimeline وضع بدتر بود: جنس تغییر یک واژهٔ ۱۰ پیکسلی بدون آیکون بود که فقط با رنگ تفکیک می‌شد — یعنی رنگ به‌عنوان تنها نشانه، و زیر کفِ خوانایی ۱۲ پیکسلیِ فارسی که خودِ همین دیزاین‌سیستم مستند کرده است.

مستندات۱
  • در نمونه‌های منتشرشده، هیچ بولتی دیگر عنوان خودش را تکرار نمی‌کند. فهرست قبلی این قاعده را در تک‌تک ورودی‌ها می‌شکست و چون همان نمونه‌ای است که همه کپی می‌کنند، داشت اشتباه را آموزش می‌داد.

نگهداری۱
  • این نسخه ۹ روز منتشر نشده ماند: publish-npm وقتی نسخهٔ محلی از قبل روی npm باشد با exit 0 و پیام «skipping publish» رد می‌شود، و کسی نسخه را bump نکرده بود. اگر رفعی که مرج شده به اپ شما نرسیده، مکانیزمش همین است — npm view @partodata/ui version را با packages/ui/package.json مقایسه کنید.

نسخهٔ ۲.۸.۱

۷ تغییر

۷ مرداد ۱۴۰۵

رفع چند شکافی که مصرف‌کننده‌ها را وادار به دور زدن دیزاین‌سیستم می‌کرد

ویژگی‌های جدید۲
  • CardContent حالا padding="none" دارد، برای فرزندی که باید تا لبهٔ کارت برسد (یک DataTable، یک قاب رسانه). راه پشتیبانی‌شده‌ای برایش نبود، پس مصرف‌کننده‌ها در استایل‌شیت خودشان padding: 0 !important می‌نوشتند — هم جنگ ویژگی با دیزاین‌سیستم، هم وابسته‌کردن اپ به یک ویژگی داخلی.

  • مقیاس عرض Dialog تا 7xl باز شد. سقف قبلی 3xl (۷۶۸ پیکسل) عرض یک فرم است؛ دیالوگی که میزبان یک میز کارِ مرور‌و‌انتخاب باشد در ۷۶۸ پیکسل ساخته نمی‌شود. تنها راه فرار، نوشتن دستی max-w-[1100px] بود که قاعدهٔ fixed-max-width در design-lint به‌درستی ردش می‌کند — یعنی دیزاین‌سیستم هم‌زمان اندازه را دریغ می‌کرد و راه دور زدنش را هم می‌بست.

رفع اشکال۴
  • مقدار side در Sheet و Sidebar منطقی شد. این دو نام فیزیکی داشتند (left/right) ولی با CSS منطقی پیاده شده بودند (start-0/end-0)، پس زیر dir="rtl" نام و نتیجه با هم نمی‌خواندند: side="right" سمت چپ کاربر کشیده می‌شد. حالا start/end رسمی‌اند و left/right به‌عنوان alias منسوخ می‌مانند — با تست ثابت شده که خروجی کلاس‌ها بایت‌به‌بایت یکسان است، پس هیچ مصرف‌کننده‌ای جابه‌جا نمی‌شود.

  • hit-area-* دیگر utilityهای موقعیت را خنثی نمی‌کند. مقدار position: relative آن در @layer utilities بود — هم‌ویژگی با .absolute و بعد از آن نوشته شده، پس روی ترتیب منبع برنده می‌شد. دکمهٔ بستنِ خودِ SheetContent کلاس hit-area-6 absolute دارد؛ absolute می‌باخت و دکمه از گوشه‌اش بیرون می‌افتاد و زیر لبهٔ نمایشگر می‌نشست — یعنی در Sheet هر مصرف‌کننده‌ای غیرقابل‌کلیک بود.

  • همان دو کامپوننت زیر TypeScript سخت‌گیر قابل استفاده شدند: value حالا صریحاً DateRange | undefined است. با exactOptionalPropertyTypes، یک value?: DateRange سادهٔ اختیاری مقدار undefined را رد می‌کند — یعنی نمی‌شد «چیزی انتخاب نشده» را بیان کرد، دقیقاً همان حالتی که placeholder برایش وجود دارد. تایپ DateRange هم re-export شد.

  • parto-design-lint دیگر تطابق‌های داخل کامنت را گزارش نمی‌کند. بررسی‌ها تطبیق زیررشته‌اند، پس مستندکردن یک قاعده خودش گیت را می‌شکست. بدنهٔ کامنت‌ها پیش از اسکن خالی می‌شود و آفست بایت‌ها حفظ می‌شود تا شمارهٔ خط و ستون دقیق بماند.

کارایی۱
  • DatePicker و DateRangePicker صاحب subpath شدند (./date-picker و ./date-range-picker). هر دو فقط از barrel در دسترس بودند، پس یک فیلتر بازهٔ تاریخ جلالی کل سطح سوشال‌لیستنینگ را وارد chunk همان مسیر می‌کرد: ۲۶ کیلوبایت با subpath در برابر ۱۲۴۰ کیلوبایت با barrel.

نسخهٔ ۲.۸.۰

۱۳ تغییر

۶ مرداد ۱۴۰۵

سطح مشترک «آخرین تغییرات» برای همهٔ پنل‌ها

ویژگی‌های جدید۶
  • WhatsNewBell، WhatsNewPanel، WhatsNewSpotlight و هوک useWhatsNew — یک پیاده‌سازی مشترک برای نمایش آخرین تغییرات در پوستهٔ هر محصول. کلید «دیده‌شده» شناسهٔ یادداشت است و بر پایهٔ ترتیب آرایه حل می‌شود، نه برابری؛ به‌همراه یک مرحلهٔ بازیابی دوم بر پایهٔ زمان. پس نه روی «همیشه روشن» گیر می‌کند و نه روی «همیشه خاموش» — دو خرابی‌ای که پیاده‌سازی‌های قبلی هرکدام به یکی‌شان دچار بودند.

  • useWhatsNew().markSpotlightShown و یک اسکالر ذخیره‌شدهٔ دوم به‌نام lastSpotlightId. نمایش مودال نباید واترمارک را جلو ببرد: جلو رفتن واترمارک یعنی «هر چه پایین‌تر است خوانده شده»، درحالی‌که مودال فقط یک یادداشت را نشان داده — پس هر اعلانِ قدیمی‌ترِ دیده‌نشده را بی‌صدا مصرف می‌کرد. مودال را به markSpotlightShown وصل کنید، نه به markSeen.

  • linkComponent روی WhatsNewPanel و WhatsNewSpotlight — با همان نام و شکلی که AppShell و NavRail دارند. بدون آن، لینک فوتر پنل و CTA هر یادداشت یک <a> ساده‌اند، یعنی در یک اپ تک‌صفحه‌ای فقط برای رفتن به صفحهٔ تغییرات، کل صفحه دوباره بارگذاری می‌شود.

  • ReleaseTimeline برای صفحهٔ کامل تغییرات — یک نگاشت نازک روی ActionTimeline، پس گروه‌بندی روزانه و سرتیتر چسبان و حالت خالی همه از همان‌جا می‌آیند.

  • مدل دادهٔ مشترک در lib/release-notes با defineReleaseFeed. اعتبارسنجی هنگام ارزیابی ماژول اجرا می‌شود، و چون فایل محتوا را پوستهٔ برنامه import می‌کند، آرایهٔ نامرتب یا شناسهٔ تکراری یا تاریخِ بیش از یک روز آینده یا دومین spotlight در ۳۰ روز، همان next build محصول را می‌شکند — بدون آنکه لازم باشد چیزی در CI هیچ ریپویی سیم‌کشی شود.

  • ۱۲ کلید تازه در UI_STRINGS برای هر سه زبان، از جمله چهار برچسب نوع تغییر. breaking در متن کاربر «تغییر مهم» خوانده می‌شود، نه «تغییر ناسازگار» — مخاطب فرق دارد.

رفع اشکال۳
  • formatRelativeLocaleTime برای هر لحظهٔ آینده یک رشتهٔ ISO خام برمی‌گرداند، پس چیزی مثل «2026-08-04T00:00:00.000Z» می‌توانست وسط یک خط زمان فارسی بنشیند. حالا به formatTimeRemaining واگذار می‌شود که از قبل سه‌زبانه است.

  • formatRelativeLocaleTime برای هر چیزِ ۲۸ یا ۲۹ روزه «۰ ماه پیش» می‌نوشت: شاخهٔ هفته تا ۲۸ روز می‌رفت ولی شاخهٔ ماه بر ۳۰ تقسیم می‌کرد، پس آن دو روز به Math.floor(29 / 30) می‌افتادند. همین شکاف بین ماه و سال هم بود و ۳۶۰ تا ۳۶۴ روز «۰ سال پیش» می‌داد. هر دو آستانه حالا بر حسب روز نوشته شده‌اند. با نگاه‌کردن به یک خط زمان واقعی در مرورگر پیدا شد، نه با خواندن کد.

  • getUIStrings شکل خروجی را با as UIStrings ادعا می‌کرد نه بررسی. یعنی کلیدی که فقط به fa اضافه می‌شد همه‌جا تایپ‌چک می‌شد و در ar/en مقدار undefined رندر می‌کرد. کست حذف شد و جایش یک انتساب نوع‌دار نشست که خودِ tsc دقیقاً کلید و زبانِ جاافتاده را گزارش می‌کند.

دسترسی‌پذیری۲
  • گروه‌های نوع تغییر role="group" گرفتند، عمداً نه یک section برچسب‌دار. یک section برچسب‌دار لندمارک است و این نشانه‌گذاری به‌ازای هر نوع تغییر در هر یادداشت تکرار می‌شود — یک تاریخچهٔ بیست‌تایی چهل لندمارک به منوی صفحه‌خوان اضافه می‌کرد و لندمارک‌های واقعی را دفن می‌کرد.

  • قانون parto/no-muted-readable-text در پلاگین ESLint دو اصلاح گرفت که در همین نسخه منتشر شدند: نام مستعار text-muted را هم می‌گیرد (پیش‌تر فقط text-foreground-muted را می‌دید، درحالی‌که هر دو به یک لایهٔ غیرِقابل‌خواندن اشاره می‌کنند)، و عناصر تزئینی را خودکار مستثنا می‌کند (aria-hidden درست، یا نامی که به Illustration ختم می‌شود).

مستندات۱
  • حکم واژگانی whats-new → «آخرین تغییرات» در terminology.json ثبت شد و «تازه‌ها» و «چه خبر» ممنوع شدند. پیش از حکم سنجیده شد: صفر مورد از هر دو شکل ممنوع در کل کورپوس، پس گیت از روز اول تمیز است.

نگهداری۱
  • چهار خروجی subpath تازه: whats-new، release-timeline، hooks/use-whats-new و release-notes. این سطح در پوستهٔ برنامه سوار می‌شود، یعنی روی همهٔ صفحه‌ها بارگذاری می‌شود؛ release-notes همان جایی است که فایل محتوای هر محصول defineReleaseFeed را از آن می‌گیرد.

تاریخچهٔ کامل

همهٔ نسخه‌های منتشرشده از ابتدای پروژه تا کنون.

  1. امروز
  2. انتشار نسخهٔ ۲.۹.۰۷ تغییر

    بازطراحی «آخرین تغییرات» — جنس هر تغییر حالا واقعاً دیده می‌شود

  3. ۷ مرداد ۱۴۰۵
  4. انتشار نسخهٔ ۲.۸.۱۷ تغییر

    رفع چند شکافی که مصرف‌کننده‌ها را وادار به دور زدن دیزاین‌سیستم می‌کرد

  5. ۶ مرداد ۱۴۰۵
  6. انتشار نسخهٔ ۲.۸.۰۱۳ تغییر

    سطح مشترک «آخرین تغییرات» برای همهٔ پنل‌ها

  7. ۲۹ تیر ۱۴۰۵
  8. انتشار نسخهٔ ۲.۷.۴۱ تغییر

    به‌روزرسانی مانیفست برای data-slot تازهٔ EngagementRate

  9. انتشار نسخهٔ ۲.۷.۳۳ تغییر

    رفع باگ RTL در نشانگر EngagementRate

  10. ۲۸ تیر ۱۴۰۵
  11. انتشار نسخهٔ ۲.۷.۲۳ تغییر

    انتشار سفت‌کاری — دروازهٔ کنتراست در CI، ۶ مسیر subpath جدید، و نام‌های جدید theme.css

  12. ۲۷ تیر ۱۴۰۵
  13. انتشار نسخهٔ ۲.۷.۱۲ تغییر

    اولین انتشار با نام جدید @partodata/ui — مهاجرت نام پکیج

  14. ۲۵ تیر ۱۴۰۵
  15. انتشار نسخهٔ ۲.۷.۰۳ تغییر

    DataTable v2 — فیلتر faceted، اصلاح ستون‌های pin شده، و نوار صفحه‌بندی غنی

  16. ۲۴ تیر ۱۴۰۵
  17. انتشار نسخهٔ ۲.۶.۱۰۳ تغییر

    دور هم‌ترازی با آخرین shadcn/ui — بدون بدهی مهاجرت

  18. ۲۳ تیر ۱۴۰۵
  19. انتشار نسخهٔ ۲.۶.۹۲ تغییر

    دور خط فارسی و مهار سرریز — حذف کامل underline

  20. ۲۲ تیر ۱۴۰۵
  21. انتشار نسخهٔ ۲.۶.۸۱ تغییر

    ستون‌های pin شدهٔ جدول اکنون پس‌زمینهٔ سطر خود را دنبال می‌کنند

  22. انتشار نسخهٔ ۲.۶.۷۲ تغییر

    توکن‌های on-color چیپ‌های solid و API سطحِ زمینه (surface-context)

  23. ۲۱ تیر ۱۴۰۵
  24. انتشار نسخهٔ ۲.۶.۶۲ تغییر

    پاس صحت ۱۲۹ کامپوننت اختصاصی پرتو — ~۱۴۹ اصلاح

  25. ۲۰ تیر ۱۴۰۵
  26. انتشار نسخهٔ ۲.۶.۵۱ تغییر

    بستهٔ بزرگ هم‌ترازی Supabase — ۸۶ اصلاح اندازه‌گیری‌شده

  27. انتشار نسخهٔ ۲.۶.۴۱ تغییر

    دور وفاداری Supabase — چیپ آیکون Alert، مقیاس سایهٔ v4، و اصلاحات جزئی

  28. ۱۵ تیر ۱۴۰۵
  29. انتشار نسخهٔ ۲.۰.۰۹ تغییر

    نسخهٔ بازآرایی سیستم طراحی — کالیبراسیون کامل با Supabase و نصب تک‌خطی

  30. ۶ خرداد ۱۴۰۵
  31. انتشار نسخهٔ ۱.۱.۱۴۶ تغییر

    PasswordInput + بهینه‌سازی ESLint و پالایش Input

  32. انتشار نسخهٔ ۱.۱.۱۳۹ تغییر

    مهاجرت رنگ برند به سبز عمیق و audit جامع WCAG

  33. انتشار نسخهٔ ۱.۱.۱۲۲ تغییر

    سازگاری RSC و گسترش subpath exports

  34. ۲۳ اردیبهشت ۱۴۰۵
  35. انتشار نسخهٔ ۱.۱.۹۱۳ تغییر

    بازطراحی جامع Post family + legends روی همهٔ ۱۱ چارت

  36. ۱۹ اردیبهشت ۱۴۰۵
  37. انتشار نسخهٔ ۱.۱.۷۸ تغییر

    تثبیت دسترسی‌پذیری، contrast توکن‌ها و پوشش کامل مستندات

  38. ۱۳ اردیبهشت ۱۴۰۵
  39. انتشار نسخهٔ ۱.۱.۵۵ تغییر

    بهینه‌سازی tree-shake — کاهش ۹۷٪ در هزینهٔ import مجزا

  40. ۲۳ فروردین ۱۴۰۵
  41. انتشار نسخهٔ ۱.۱.۴۲ تغییر

    خودکارسازی تست‌های دسترسی‌پذیری و RTL

  42. ۱۹ فروردین ۱۴۰۵
  43. انتشار نسخهٔ ۱.۱.۳۴ تغییر

    تکمیل آمادگی DS — کامپوننت‌های جدید، چارت‌های مدرن و audit جامع

  44. ۲۹ اسفند ۱۴۰۴
  45. انتشار نسخهٔ ۱.۱.۲۴ تغییر

    i18n، استانداردسازی size variants و CI quality gates

  46. ۳ اسفند ۱۴۰۴
  47. انتشار نسخهٔ ۱.۰.۵۱ تغییر

    افزودن کامپوننت HashtagInput

  48. ۲ اسفند ۱۴۰۴
  49. انتشار نسخهٔ ۱.۰.۴۲ تغییر

    رفع اشکال‌های UI در Instagram Post و EngagementRate

  50. ۲۹ بهمن ۱۴۰۴
  51. انتشار نسخهٔ ۱.۰.۳۱ تغییر

    رفع اشکالات عمومی

  52. ۱۹ بهمن ۱۴۰۴
  53. انتشار نسخهٔ ۱.۰.۲۲ تغییر

    انتشار وصلهٔ سوم

  54. انتشار نسخهٔ ۱.۰.۱۲ تغییر

    انتشار وصلهٔ اول

  55. انتشار نسخهٔ ۱.۰.۰۲ تغییر

    نسخهٔ اولیهٔ پایدار سیستم طراحی پرتو

در این صفحه