Color Swatch Pickerv1.0.0

فهرستی از رنگ‌های از پیش‌تعیین‌شده (پالت برند، رنگ برچسب، رنگ تم) که کاربر با کلیک یا کیبورد یکی را انتخاب می‌کند: برخلاف ColorPicker که هر رنگی را می‌سازد، این فقط بین گزینه‌های ثابت یکی را برمی‌گزیند.

ری‌اکت ۱۹ و Next.js با پیاده‌سازی دسترس‌پذیری داخلی دیگویو ۳ با Composition API — هنوز برای این کامپوننت پورت نشدهSvelte ۵ با runes — هنوز برای این کامپوننت پورت نشدهانگولار با signals و دایرکتیوهای standalone — هنوز برای این کامپوننت پورت نشده

این کامپوننت فعلاً برای ۱ فریم‌ورک از ۴ فریم‌ورک آماده است.

این نمونه هنوز برای Vue پورت نشده است؛ آنچه می‌بینید نسخهٔ ری‌اکت است.

این نمونه هنوز برای Svelte پورت نشده است؛ آنچه می‌بینید نسخهٔ ری‌اکت است.

این نمونه هنوز برای Angular پورت نشده است؛ آنچه می‌بینید نسخهٔ ری‌اکت است.

نصب

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

پکیج‌منیجر پیش‌فرض Node.jsنصب سریع با لینک سخت و دیسک مشترکYarn نسخهٔ ۲ به بالا (Berry)رانتایم و پکیج‌منیجر Bun
npx digdesign@latest add https://docs.digdesign.ir/r/color-swatch-picker.json
pnpm dlx digdesign@latest add https://docs.digdesign.ir/r/color-swatch-picker.json
yarn dlx digdesign@latest add https://docs.digdesign.ir/r/color-swatch-picker.json
bunx --bun digdesign@latest add https://docs.digdesign.ir/r/color-swatch-picker.json

این کامپوننت هنوز برای Vue پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

این کامپوننت هنوز برای Svelte پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

این کامپوننت هنوز برای Angular پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

استفاده

import { ColorSwatchPicker, ColorSwatchPickerItem } from "@/components/ui/color-swatch-picker"

<ColorSwatchPicker defaultValue="#6366f1" onValueChange={(color) => console.log(color)}>
  <ColorSwatchPickerItem color="#ef4444" />
  <ColorSwatchPickerItem color="#6366f1" />
</ColorSwatchPicker>

این کامپوننت هنوز برای Vue پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

این کامپوننت هنوز برای Svelte پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

این کامپوننت هنوز برای Angular پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

ترکیب اجزا

همان الگوی roving-tabindex که RadioGroup/RadioGroupItem دارند: ColorSwatchPicker یک role="radiogroup" با Context مقدارِ انتخاب‌شده است، ColorSwatchPickerItem یک role="radio" با یک ColorSwatch داخلش. برخلاف RadioGroupItem که مقدار را از خصوصیت DOM دکمه می‌خواند، اینجا با next.click() به onClick خودِ آیتم می‌رسد، چون رنگ در closure همان آیتم است، نیازی به نوشتنش روی DOM نیست. size/radius را روی خودِ ColorSwatchPicker بدهید تا به همهٔ آیتم‌ها از Context برسد؛ یکی‌یکی روی هر Item دادنش لازم نیست.

دسترس‌پذیری

  • فقط یک آیتم (انتخاب‌شده، یا اولی اگر هنوز چیزی انتخاب نشده) در چرخهٔ Tab است؛ داخل گروه با پیکان‌ها جابه‌جا شوید: دقیقاً مثل هر radiogroup استاندارد.
  • پیکان‌های چپ/راست در RTL خودکار برعکس می‌شوند (بالا/پایین هم مثل چپ/راست عمل می‌کنند تا در چیدمان‌های چندردیفه هم قابل‌پیمایش بماند).
  • هر جفت از هشت رنگ --chart-1 تا --chart-8 برای کوررنگی protan و deutan سنجیده شده و از هم جداست؛ با این حال رنگ نباید تنها نشانه باشد (کوررنگی کامل، چاپ سیاه‌وسفید، رنگ‌های سفارشی). label بدهید تا نام رنگ با hover یا فوکوس در tooltip بیاید، و نام رنگ انتخاب‌شده را به متن هم نشان دهید.
  • ColorSwatchPicker خودش برچسب قابل‌دیدن ندارد؛ Label را با id بسازید و با aria-labelledby به گروه وصل کنید تا صفحه‌خوان نام گروه را بخواند.
  • هر آیتم aria-label خودکار از کد رنگش می‌سازد (مثل «رنگ #6366f1»)؛ اگر رنگ‌ها معنای خاصی دارند (مثل «قرمز فوری») یا رنگ یک توکن CSS است، prop label بدهید تا صفحه‌خوان نام رنگ را بخواند، نه کد یا «رنگ» خالی.
  • روی رنگ انتخاب‌شده یک تیک روی دایرهٔ کوچکِ رنگ پس‌زمینه نشان داده می‌شود؛ کنتراستش به روشنی یا تیرگی خود رنگ بستگی ندارد، پس برای توکن‌هایی که با تم عوض می‌شوند هم در هر دو تم خواناست.

مرجع API

ColorSwatchPicker

تمام ویژگی‌های استاندارد div نیز پشتیبانی می‌شود.

ویژگینوعپیش‌فرضتوضیح
valuestring—value آیتم انتخاب‌شده در حالت کنترل‌شده (اگر آیتم value نداشته باشد، همان color).
defaultValuestring—مقدار اولیه در حالت کنترل‌نشده.
onValueChange(value: string) => void—با انتخاب یک آیتم صدا زده می‌شود.
disabledboolean—غیرفعال‌کردن کل گروه.
size"sm" | "md" | "lg""md"اندازهٔ همهٔ سواچ‌های داخل گروه.
radius"none" | "sm" | "md" | "full""md"شعاع گوشهٔ همهٔ سواچ‌های داخل گروه.

ColorSwatchPickerItem

تمام ویژگی‌های استاندارد button نیز پشتیبانی می‌شود.

ویژگینوعپیش‌فرضتوضیح
colorstring—رنگ نمایشی: hex/rgb/hsl یا توکن CSS مثل "var(--chart-3)" که مرورگر resolve می‌کند و با تم عوض می‌شود.
valuestringcolorشناسهٔ گزینه که به onValueChange می‌رسد؛ برای رنگ دسته‌ها شناسهٔ پایدار بدهید.
labelstring—نام رنگ، مثل «قرمز»؛ aria-label می‌شود و با hover یا فوکوس در tooltip دیده می‌شود.
disabledboolean—خارج‌کردن این گزینه از انتخاب و Tab.

این کامپوننت هنوز برای Vue پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

این کامپوننت هنوز برای Svelte پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

این کامپوننت هنوز برای Angular پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.