Color Picker
پنل کامل انتخاب رنگ پشتِ یک دکمهٔ سواچ: مربعِ اشباع/درخشندگیِ قابلکشیدن، اسلایدر فام، اسلایدر شفافیتِ اختیاری و فیلد هگز، همه روی یک رنگ مشترک هماهنگ.
این کامپوننت فعلاً برای ۱ فریمورک از ۴ فریمورک آماده است.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
نصب
با CLI اختصاصی dig-ui کامپوننت را از رجیستری دیگ نصب کنید؛ وابستگیها و فایلها خودکار اضافه میشوند.
pnpm dlx dig-ui@latest add https://design-system-tau-green.vercel.app/r/color-picker.jsonnpx dig-ui@latest add https://design-system-tau-green.vercel.app/r/color-picker.jsonyarn dlx dig-ui@latest add https://design-system-tau-green.vercel.app/r/color-picker.jsonbunx --bun dig-ui@latest add https://design-system-tau-green.vercel.app/r/color-picker.jsonاین کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Reka UI در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Bits UI در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Angular CDK در دست کار است.
استفاده
import { ColorPicker, ColorPickerTrigger, ColorPickerContent } from "@/components/ui/color-picker"
<ColorPicker defaultValue="#7c3aed" onChangeEnd={(color) => console.log(color.toString("hex"))}>
<ColorPickerTrigger />
<ColorPickerContent />
</ColorPicker>این کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Reka UI در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Bits UI در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Angular CDK در دست کار است.
ترکیب اجزا
دسترسپذیری
- پنل بازشونده role="dialog" دارد و با Escape یا کلیک بیرون بسته میشود: همان useDismissableLayer که Popover دارد.
- مربع اشباع/درخشندگی role="slider" با aria-valuetext توصیفی (مثل «اشباع ۸۰٪، درخشندگی ۶۰٪») دارد و با پیکانهای چهارجهته با کیبورد قابلتنظیم است.
- دکمهٔ trigger پیشفرض کد هگز فعلی را هم بهصورت متن نشان میدهد، نه فقط رنگ: برای کاربرانی که رنگ را بهسختی تشخیص میدهند هم قابلخواندن است.
مرجع API
ColorPicker
نگهدارندهٔ state؛ خودش چیزی رندر نمیکند جز Popover اطراف بچهها.
| ویژگی | نوع | پیشفرض | توضیح |
|---|---|---|---|
| value | string | — | رنگِ کنترلشده. |
| defaultValue | string | "#7c3aed" | رنگ اولیه در حالت کنترلنشده. |
| onChange | (color: Color) => void | — | با هر تغییرِ پیوسته (کشیدن دستگیرهها) صدا زده میشود. |
| onChangeEnd | (color: Color) => void | — | فقط هنگام رهاکردن دستگیره یا تایید مقدار فیلد هگز. |
| open / defaultOpen / onOpenChange | boolean / boolean / (open: boolean) => void | — | کنترل باز/بستهٔ پاپاور: مستقیم به Popover عبور میکند. |
| disabled | boolean | false | Trigger باز نمیشود؛ اگر با open کنترلشده باز نگه داشته شود، ColorArea و هر دو ColorSlider و ColorField داخلِ Content همزمان قفل میشوند. |
ColorPickerTrigger
یک PopoverTrigger با ظاهر پیشفرض؛ تمام ویژگیهای استاندارد button پشتیبانی میشود.
| ویژگی | نوع | پیشفرض | توضیح |
|---|---|---|---|
| children | React.ReactNode | — | اگر ندهید، پیشفرض ColorSwatch + کد هگز رنگ فعلی نشان داده میشود. |
| className | string | — | کلاسهای تکمیلی دکمه. |
ColorPickerContent
یک PopoverContent؛ side/align/sideOffset/showArrow هم از PopoverContent ارث میبرد.
| ویژگی | نوع | پیشفرض | توضیح |
|---|---|---|---|
| showAlpha | boolean | true | نمایش/عدمنمایش ColorSlider کانال شفافیت. |
این کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Reka UI در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Bits UI در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Angular CDK در دست کار است.
نمونهها
Basic
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
Without Alpha
برای رنگهایی که همیشه کاملاً کدر مصرف میشوند.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
Custom Trigger
با دادن children به ColorPickerTrigger، ظاهر پیشفرض (سواچ + هگز) کاملاً کنار میرود.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
Default Open
برای نمایش/تست، پنل را از ابتدا باز نگه دارید.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
Controlled
onChange حین تغییر (پیوسته) و onChangeEnd فقط هنگام رهاکردن دستگیره/بستن ویرایش: هر دو یک Color کامل میدهند.
آخرین مقدار ثبتشده: —
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
غیرفعال (Disabled)
Trigger باز نمیشود، پس کاربر اصلاً به محتوای Popover نمیرسد. اگر بخواهید فقط بعضی از ورودیهای Content را قفل کنید (مثلاً فقط فیلد هگز)، بهجای disabled روی ColorPicker، آن پراپ را مستقیم روی همان کامپوننتِ داخلی بدهید.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
کدام نمونه برای کدام موقعیت
| نمونه | کجا به کار میآید |
|---|---|
| Basic | انتخاب رنگ برچسب یا تم در تنظیمات یک پروژه |
| Without Alpha | برای رنگهایی که همیشه کاملاً کدر مصرف میشوند. |
| Custom Trigger | با دادن children به ColorPickerTrigger، ظاهر پیشفرض (سواچ + هگز) کاملاً کنار میرود. |
| Default Open | برای نمایش/تست، پنل را از ابتدا باز نگه دارید. |
| Controlled | onChange حین تغییر (پیوسته) و onChangeEnd فقط هنگام رهاکردن دستگیره/بستن ویرایش: هر دو یک Color کامل میدهند. |
| غیرفعال (Disabled) | انتخابگر رنگی که فعلاً در دسترس کاربر نیست |
دستورالعمل استفاده
برای رنگِ بدون پشتیبانیِ شفافیت، آلفا را خاموش کنید
انجام بده
اگر رنگ نهایی قرار است روی یک پسزمینهٔ کاملاً توپر بنشیند (نه یک لایهٔ نیمشفاف)، showAlpha={false} بدهید تا کاربر گیج نشود.
انجام نده
نگهداشتنِ اسلایدر شفافیت وقتی مقصدِ رنگ اصلاً آلفا را پشتیبانی نمیکند، یک کنترلِ بیاثر و گیجکننده اضافه میکند.