ColorPicker
Rang tanlash: to'yinganlik maydoni, hue va shaffoflik slayderlari, hex input, pipetka va tayyor ranglar.
'use client';
import { ColorPicker } from '@akhatmirzo/ui';
import { useState } from 'react';
export default function ColorPickerBasic() {
const [color, setColor] = useState('#4f46e5');
return (
<div className="w-full max-w-60">
<ColorPicker value={color} onValueChange={setColor} aria-label="Asosiy rang" />
</div>
);
}
Import
import { ColorPicker } from '@akhatmirzo/ui';Qachon ishlatish
- Foydalanuvchi o'z rangini tanlaydi — brend rangi, teg yoki kategoriya rangi, mavzu sozlamalari.
- Ranglar soni cheklangan bo'lsa —
swatchesbilan tayyor palitrani bering; erkin tanlash baribir mavjud qoladi. - Faqat bir nechta rangdan tanlash kerak bo'lsa (5–6 ta) —
RadioGroupyokiSegmentedControlbilan rangli namunalar soddaroq.
Tuzilishi
Trigger — Input ko'rinishidagi tugma: chapda rang namunasi, yonida hex matn.
Bosilganda Popover ochiladi:
- To'yinganlik maydoni (2D) — gorizontal o'q to'yinganlik, vertikal — yorqinlik.
- Hue slayderi — rang tusi (0–360°),
Sliderkomponenti. - Shaffoflik slayderi — faqat
alphabilan. - Pipetka — brauzerda
EyeDropperAPI bo'lsa (hozircha Chromium) ekrandan rang oladi; bo'lmasa tugma ko'rinmaydi. - Hex input — to'liq 6 (yoki 8) belgili hex darhol qo'llanadi; qisqa
#abc—Enteryoki fokus chiqqanda. Noto'g'ri matn xato holatida ko'rinadi va fokus chiqqanda oldingi rangga qaytadi. - Tayyor ranglar (
swatches).
Qiymat doim kichik harfli #rrggbb ko'rinishida qaytadi (onValueChange('#0ea5e9')).
Oq, qora yoki kulrang tanlanganda hue saqlanadi — slayder "sakramaydi".
Field bilan
Field ichida trigger nomi — label va joriy rang ("Brend rangi #0EA5E9"), izoh va
xato aria-describedby ga ulanadi. name — forma uchun yashirin <input>.
Tugmalar va havolalarda ishlatiladi
'use client';
import { ColorPicker, Field } from '@akhatmirzo/ui';
export default function ColorPickerWithField() {
return (
<div className="w-full max-w-60">
<Field label="Brend rangi" description="Tugmalar va havolalarda ishlatiladi">
<ColorPicker name="brand" defaultValue="#0ea5e9" />
</Field>
</div>
);
}
Shaffoflik
alpha — panelda shaffoflik slayderi chiqadi, qiymat #rrggbbaa bo'ladi (#10b98180 — 50%).
Rang namunalari ostida shaxmat foni ko'rinadi.
Qiymat: #10b98180
'use client';
import { ColorPicker } from '@akhatmirzo/ui';
import { useState } from 'react';
export default function ColorPickerAlpha() {
const [color, setColor] = useState('#10b98180');
return (
<div className="flex w-full max-w-60 flex-col gap-2">
<ColorPicker alpha value={color} onValueChange={setColor} aria-label="Fon rangi" />
<p className="m-0 text-sm text-text-muted">
Qiymat: <span className="font-mono text-text">{color}</span>
</p>
</div>
);
}
Tayyor ranglar
Standart swatches — kutubxona palitrasidan 10 ta rang (defaultColorSwatches sifatida eksport
qilinadi). O'z palitrangizni bering yoki [] bilan yashiring.
'use client';
import { ColorPicker } from '@akhatmirzo/ui';
// Faqat brend palitrasidagi ranglar
const brand = ['#4f46e5', '#0ea5e9', '#10b981', '#f59e0b', '#e11d48'];
export default function ColorPickerSwatches() {
return (
<div className="w-full max-w-60">
<ColorPicker swatches={brand} defaultValue="#10b981" aria-label="Teg rangi" />
</div>
);
}
O'lchamlar va holatlar
size — trigger balandligi Input bilan bir xil: sm 32px, md 40px (standart), lg 48px.
disabled — ochilmaydi; invalid (yoki Field error) — qizil chegara.
'use client';
import { ColorPicker } from '@akhatmirzo/ui';
export default function ColorPickerSizes() {
return (
<div className="flex w-full max-w-60 flex-col gap-3">
<ColorPicker size="sm" aria-label="Kichik" />
<ColorPicker aria-label="O'rtacha" />
<ColorPicker size="lg" aria-label="Katta" />
<ColorPicker disabled aria-label="O'chirilgan" />
</div>
);
}
Props
Qolgan <button> atributlari va ref trigger'ga tushadi.
| Prop | Tip | Standart | Tavsif |
|---|---|---|---|
value | string | — | Rang `#rrggbb` (alpha bilan `#rrggbbaa`) |
defaultValue | string | '#4f46e5' | Boshlang'ich rang |
onValueChange | (value: string) => void | — | Rang o'zgarganda |
swatches | string[] | defaultColorSwatches | Tayyor ranglar (10 ta) |
alpha | boolean | false | Shaffoflik slayderi va `#rrggbbaa` qiymat |
eyeDropper | boolean | true | EyeDropper API bo'lsa pipetka tugmasi |
size | 'sm' | 'md' | 'lg' | 'md' | Trigger balandligi 32 / 40 / 48px |
disabled | boolean | — | O'chirilgan holat |
invalid | boolean | — | Xato holati (Field ichida avtomatik) |
name | string | — | Forma uchun yashirin input |
open / defaultOpen | boolean | — | Panel holati |
onOpenChange | (open: boolean) => void | — | Panel ochilganda / yopilganda |
labels | { trigger?; saturation?; saturationValue?; hue?; alpha?; hex?; eyeDropper?; swatches? } | — | Ichki matnlar (o'zbekcha standart) — quyidagi jadval |
contentClassName | string | — | Panel klassi |
labels
| Prop | Tip | Standart | Tavsif |
|---|---|---|---|
trigger | string | 'Rang tanlash' | Trigger nomi (Field bo'lmasa) |
saturation | string | "To'yinganlik va yorqinlik" | 2D maydon nomi |
saturationValue | (s: number, v: number) => string | "to'yinganlik 80%, yorqinlik 60%" | 2D maydonning aria-valuetext matni |
hue | string | 'Rang tusi' | Hue slayderi |
alpha | string | 'Shaffoflik' | Shaffoflik slayderi |
hex | string | 'HEX' | Hex input |
eyeDropper | string | 'Ekrandan rang olish' | Pipetka tugmasi |
swatches | string | 'Tayyor ranglar' | Swatch guruhi |
Data atributlari
| Atribut | Qayerda | Qiymat |
|---|---|---|
data-state | trigger | open · closed |
data-size | trigger | sm · md · lg |
data-invalid | trigger | xato holatida mavjud |
data-disabled | trigger | o'chirilganda mavjud |
data-state | swatch | on · off |
data-slot | qismlar | color-picker · color-picker-content · color-picker-area · color-picker-hue · color-picker-alpha |
Klaviatura
| Tugma | Qayerda | Harakat |
|---|---|---|
Enter / Space | trigger | Panelni ochish |
Esc | panel | Yopish, fokus trigger'ga qaytadi |
← / → | 2D maydon | To'yinganlik ±1% (Shift bilan ±10%) |
↑ / ↓ | 2D maydon | Yorqinlik ±1% (Shift bilan ±10%) |
PageUp / PageDown | 2D maydon | Yorqinlik ±10% |
Home / End | 2D maydon | To'yinganlik 0% / 100% |
| strelkalar | hue / alpha | Slider klaviaturasi |
Enter | hex input | Kiritilgan rangni qo'llash |
Accessibility
- Trigger — oddiy
<button>;Fieldichida nomi label + joriy hex, aks holda"Rang tanlash, #4F46E5"(aria-labelyokilabels.triggerbilan o'zgartiriladi). - 2D maydon —
role="slider",aria-valuenow(to'yinganlik) va ikkala o'qni aytadiganaria-valuetext: "to'yinganlik 80%, yorqinlik 60%". - Hue va shaffoflik —
Sliderkomponenti:role="slider",aria-valuetext("210°", "50%"). - Tayyor ranglar —
role="group"ichida tugmalar, har biri hex nomli vaaria-pressed. - Pipetka — faqat API mavjud bo'lsa ko'rinadi (serverda va qo'llab-quvvatlamaydigan
brauzerlarda yashirin),
aria-label="Ekrandan rang olish". - Rang yagona signal emas — tanlangan swatch qo'shimcha halqa bilan ajratiladi, trigger hex matnni ham ko'rsatadi.