فهرست رتبهدار (RankedList)
«برترین N» یک چیز با عدد، نوار ملایم، تغییر نسبت به یک دورهٔ نامبرده و یک مقصد برای هر ردیف
معرفی
RankedList پاسخ «چه چیزی بالاست؟» است: واژههای پرتکرار، هشتگها، صفحهها، موجودیتها، برنامههای یک شبکه، مضمونهای گفتمان. هر ردیف یک چیز است با رتبه (اختیاری)، نام، عدد بهصورت متن، یک نوار ملایم که همان عدد را تکرار میکند، تغییر نسبت به دورهٔ مقایسه و یک مقصد برای کل ردیف.
جای ابر رنگی کلمه و نمودار میلهای افقی را میگیرد: رنگ ابر تزئین است و اندازهٔ واژه خواندنی نیست؛ نمودار میلهای افقی محور و برچسب ریز دارد و نه فهرست معنایی است نه پیوند.
- یک
<ol>با نام است؛ صفحهخوان تعداد و ترتیب را میگوید. - نوار
aria-hiddenاست و یک رنگ (--chart-1) با شدت متناسب؛ هیچ معنایی فقط به نوار یا رنگ تکیه ندارد. - ردیف با
hrefپیوند است (ازlinkComponentقاب)، باonSelectدکمه؛ هر دو کل ردیف را هدف میکنند و فوکوس دیدنی دارند. - بارگذاری، خالیبودن و خطا از
stateمیآید؛ کارت دور آن مال شماست.
چه زمانی استفاده نکنیم:
- روند در زمان — از
PartoLineChartیاPartoAreaChartاستفاده کنید - سهم چند دسته از یک کل با رنگ معنادار (احساس، موضع) — از
Distributionاستفاده کنید - فهرست رکوردهای کامل با چند ستون و مرتبسازی — از
DataTableاستفاده کنید - توزیع روی نقشهٔ ایران — از
IranMapاستفاده کنید
زمین بازی
import { RankedList } from '@partodata/ui/ranked-list'
<RankedList
aria-label="واژههای پرتکرار"
items={items} showRank maxItems={5}
/>استفاده
import { RankedList } from '@partodata/ui/ranked-list'RankedList فقط از زیرمسیر @partodata/ui/ranked-list میآید (در بستهی اصلی نیست: state آن نمای حالت صفحه را میآورد).
<ChartCard>
<ChartCardHeader title="واژههای پرتکرار" />
<ChartCardContent className="p-3">
<RankedList
aria-label="واژههای پرتکرار"
items={words.map((word) => ({
id: word.id,
label: word.text,
value: word.count,
delta: { value: word.change, comparisonLabel: 'نسبت به 7 روز قبل' },
href: `/search?q=${encodeURIComponent(word.text)}`,
}))}
maxItems={8}
onShowAll={() => router.push('/words')}
/>
</ChartCardContent>
</ChartCard>داخل DashboardChart height="content" حالت را به همان DashboardChart state بدهید و RankedList را بدون state بگذارید.
حالتها و انواع
بارگذاری، خالی و خطا
هنوز واژهای ثبت نشده است
بارگذاری انجام نشد
لحظهای بعد دوباره تلاش کنید.
<RankedList
aria-label="صفحههای برتر"
items={pages}
state={pageState({ data: pages, isLoading, error, onRetry: load, emptyCopy: { title: 'هنوز صفحهای ثبت نشده است' } })}
/>فیلتری که فهرست میراند
<RankedList
aria-label="هشتگها"
size="sm"
selectedId={hashtag}
items={tags.map((tag) => ({
id: tag.id,
label: `#${tag.name}`,
value: tag.count,
onSelect: () => setHashtag(tag.id),
}))}
/>ردیف برگزیده aria-pressed میگیرد و علاوه بر رنگ، قاب نازک و برچسب پررنگتر دارد.
راهنمای استفاده
بکنید
هر delta را با comparisonLabel بدهید («نسبت به 7 روز قبل»). اگر همهٔ ردیفها یک دوره دارند، فهرست آن را یک بار
بالای خود مینویسد و در هر ردیف برای فناوری کمکی نگه میدارد.
بکنید
رنگ تغییر را از قطبیت شاخص بگیرید. شمار منشن، دسترسی و رتبه قطبیت ندارند و delta بهطور پیشفرض neutral است؛
فقط وقتی افزایش واقعاً خبر خوب یا بد است tone بدهید.
نکنید
فهرست را خودتان مرتب نکنید و رنگ هر ردیف را جدا ندهید؛ فهرست به ترتیبی که میدهید نشان داده میشود و فقط یک رنگ دارد.
نکنید
برای یک ردیف هم href هم onSelect ندهید؛ ردیف یک مقصد دارد.
Props
RankedList
RankedListItem
دسترسیپذیری
- فهرست
olبا نام است و هر ردیفli؛ شمار و ترتیب را صفحهخوان میگوید - هر ردیف تعاملی یک توقف Tab با حلقهٔ فوکوس دیدنی و ناحیهٔ لمس حداقل 36 (یا 28) پیکسل است
- عدد و تغییر همیشه متناند؛ نوار و رنگ تنها حامل معنا نیستند (WCAG 1.4.1)
- جهت تغییر با پیکان و علامت چاپی دیده میشود، نه با رنگ
- ارقام ASCII چاپ میشوند و فونت فارسیشان میکند
کامپوننتهای مرتبط
- Distribution — سهم چند دستهٔ رنگمعنادار از یک کل
- HashtagPerformanceRow — ردیف عملکرد یک هشتگ با روند
- PartoWordCloud — ابر واژهها برای نمایش و کشف، نه برای خواندن رتبه
- DataTable — فهرست چندستونه با مرتبسازی