تغییرات (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را از آن میگیرد.
تاریخچهٔ کامل
همهٔ نسخههای منتشرشده از ابتدای پروژه تا کنون.
- امروز
- انتشار نسخهٔ ۲.۹.۰۷ تغییر
بازطراحی «آخرین تغییرات» — جنس هر تغییر حالا واقعاً دیده میشود
- ۷ مرداد ۱۴۰۵
- انتشار نسخهٔ ۲.۸.۱۷ تغییر
رفع چند شکافی که مصرفکنندهها را وادار به دور زدن دیزاینسیستم میکرد
- ۶ مرداد ۱۴۰۵
- انتشار نسخهٔ ۲.۸.۰۱۳ تغییر
سطح مشترک «آخرین تغییرات» برای همهٔ پنلها
- ۲۹ تیر ۱۴۰۵
- انتشار نسخهٔ ۲.۷.۴۱ تغییر
بهروزرسانی مانیفست برای data-slot تازهٔ EngagementRate
- انتشار نسخهٔ ۲.۷.۳۳ تغییر
رفع باگ RTL در نشانگر EngagementRate
- ۲۸ تیر ۱۴۰۵
- انتشار نسخهٔ ۲.۷.۲۳ تغییر
انتشار سفتکاری — دروازهٔ کنتراست در CI، ۶ مسیر subpath جدید، و نامهای جدید theme.css
- ۲۷ تیر ۱۴۰۵
- انتشار نسخهٔ ۲.۷.۱۲ تغییر
اولین انتشار با نام جدید @partodata/ui — مهاجرت نام پکیج
- ۲۵ تیر ۱۴۰۵
- انتشار نسخهٔ ۲.۷.۰۳ تغییر
DataTable v2 — فیلتر faceted، اصلاح ستونهای pin شده، و نوار صفحهبندی غنی
- ۲۴ تیر ۱۴۰۵
- انتشار نسخهٔ ۲.۶.۱۰۳ تغییر
دور همترازی با آخرین shadcn/ui — بدون بدهی مهاجرت
- ۲۳ تیر ۱۴۰۵
- انتشار نسخهٔ ۲.۶.۹۲ تغییر
دور خط فارسی و مهار سرریز — حذف کامل underline
- ۲۲ تیر ۱۴۰۵
- انتشار نسخهٔ ۲.۶.۸۱ تغییر
ستونهای pin شدهٔ جدول اکنون پسزمینهٔ سطر خود را دنبال میکنند
- انتشار نسخهٔ ۲.۶.۷۲ تغییر
توکنهای on-color چیپهای solid و API سطحِ زمینه (surface-context)
- ۲۱ تیر ۱۴۰۵
- انتشار نسخهٔ ۲.۶.۶۲ تغییر
پاس صحت ۱۲۹ کامپوننت اختصاصی پرتو — ~۱۴۹ اصلاح
- ۲۰ تیر ۱۴۰۵
- انتشار نسخهٔ ۲.۶.۵۱ تغییر
بستهٔ بزرگ همترازی Supabase — ۸۶ اصلاح اندازهگیریشده
- انتشار نسخهٔ ۲.۶.۴۱ تغییر
دور وفاداری Supabase — چیپ آیکون Alert، مقیاس سایهٔ v4، و اصلاحات جزئی
- ۱۵ تیر ۱۴۰۵
- انتشار نسخهٔ ۲.۰.۰۹ تغییر
نسخهٔ بازآرایی سیستم طراحی — کالیبراسیون کامل با Supabase و نصب تکخطی
- ۶ خرداد ۱۴۰۵
- انتشار نسخهٔ ۱.۱.۱۴۶ تغییر
PasswordInput + بهینهسازی ESLint و پالایش Input
- انتشار نسخهٔ ۱.۱.۱۳۹ تغییر
مهاجرت رنگ برند به سبز عمیق و audit جامع WCAG
- انتشار نسخهٔ ۱.۱.۱۲۲ تغییر
سازگاری RSC و گسترش subpath exports
- ۲۳ اردیبهشت ۱۴۰۵
- انتشار نسخهٔ ۱.۱.۹۱۳ تغییر
بازطراحی جامع Post family + legends روی همهٔ ۱۱ چارت
- ۱۹ اردیبهشت ۱۴۰۵
- انتشار نسخهٔ ۱.۱.۷۸ تغییر
تثبیت دسترسیپذیری، contrast توکنها و پوشش کامل مستندات
- ۱۳ اردیبهشت ۱۴۰۵
- انتشار نسخهٔ ۱.۱.۵۵ تغییر
بهینهسازی tree-shake — کاهش ۹۷٪ در هزینهٔ import مجزا
- ۲۳ فروردین ۱۴۰۵
- انتشار نسخهٔ ۱.۱.۴۲ تغییر
خودکارسازی تستهای دسترسیپذیری و RTL
- ۱۹ فروردین ۱۴۰۵
- انتشار نسخهٔ ۱.۱.۳۴ تغییر
تکمیل آمادگی DS — کامپوننتهای جدید، چارتهای مدرن و audit جامع
- ۲۹ اسفند ۱۴۰۴
- انتشار نسخهٔ ۱.۱.۲۴ تغییر
i18n، استانداردسازی size variants و CI quality gates
- ۳ اسفند ۱۴۰۴
- انتشار نسخهٔ ۱.۰.۵۱ تغییر
افزودن کامپوننت HashtagInput
- ۲ اسفند ۱۴۰۴
- انتشار نسخهٔ ۱.۰.۴۲ تغییر
رفع اشکالهای UI در Instagram Post و EngagementRate
- ۲۹ بهمن ۱۴۰۴
- انتشار نسخهٔ ۱.۰.۳۱ تغییر
رفع اشکالات عمومی
- ۱۹ بهمن ۱۴۰۴
- انتشار نسخهٔ ۱.۰.۲۲ تغییر
انتشار وصلهٔ سوم
- انتشار نسخهٔ ۱.۰.۱۲ تغییر
انتشار وصلهٔ اول
- انتشار نسخهٔ ۱.۰.۰۲ تغییر
نسخهٔ اولیهٔ پایدار سیستم طراحی پرتو