@akhatmirzo/ui

ColorPicker

Rang tanlash: to'yinganlik maydoni, hue va shaffoflik slayderlari, hex input, pipetka va tayyor ranglar.

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 — swatches bilan tayyor palitrani bering; erkin tanlash baribir mavjud qoladi.
  • Faqat bir nechta rangdan tanlash kerak bo'lsa (5–6 ta) — RadioGroup yoki SegmentedControl bilan rangli namunalar soddaroq.

Tuzilishi

Trigger — Input ko'rinishidagi tugma: chapda rang namunasi, yonida hex matn. Bosilganda Popover ochiladi:

  1. To'yinganlik maydoni (2D) — gorizontal o'q to'yinganlik, vertikal — yorqinlik.
  2. Hue slayderi — rang tusi (0–360°), Slider komponenti.
  3. Shaffoflik slayderi — faqat alpha bilan.
  4. Pipetka — brauzerda EyeDropper API bo'lsa (hozircha Chromium) ekrandan rang oladi; bo'lmasa tugma ko'rinmaydi.
  5. Hex input — to'liq 6 (yoki 8) belgili hex darhol qo'llanadi; qisqa #abc — Enter yoki fokus chiqqanda. Noto'g'ri matn xato holatida ko'rinadi va fokus chiqqanda oldingi rangga qaytadi.
  6. 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

Shaffoflik

alpha — panelda shaffoflik slayderi chiqadi, qiymat #rrggbbaa bo'ladi (#10b98180 — 50%). Rang namunalari ostida shaxmat foni ko'rinadi.

Qiymat: #10b98180

Tayyor ranglar

Standart swatches — kutubxona palitrasidan 10 ta rang (defaultColorSwatches sifatida eksport qilinadi). O'z palitrangizni bering yoki [] bilan yashiring.

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.

Props

Qolgan <button> atributlari va ref trigger'ga tushadi.

PropTipStandartTavsif
valuestring—Rang `#rrggbb` (alpha bilan `#rrggbbaa`)
defaultValuestring'#4f46e5'Boshlang'ich rang
onValueChange(value: string) => void—Rang o'zgarganda
swatchesstring[]defaultColorSwatchesTayyor ranglar (10 ta)
alphabooleanfalseShaffoflik slayderi va `#rrggbbaa` qiymat
eyeDropperbooleantrueEyeDropper API bo'lsa pipetka tugmasi
size'sm' | 'md' | 'lg''md'Trigger balandligi 32 / 40 / 48px
disabledboolean—O'chirilgan holat
invalidboolean—Xato holati (Field ichida avtomatik)
namestring—Forma uchun yashirin input
open / defaultOpenboolean—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
contentClassNamestring—Panel klassi

labels

PropTipStandartTavsif
triggerstring'Rang tanlash'Trigger nomi (Field bo'lmasa)
saturationstring"To'yinganlik va yorqinlik"2D maydon nomi
saturationValue(s: number, v: number) => string"to'yinganlik 80%, yorqinlik 60%"2D maydonning aria-valuetext matni
huestring'Rang tusi'Hue slayderi
alphastring'Shaffoflik'Shaffoflik slayderi
hexstring'HEX'Hex input
eyeDropperstring'Ekrandan rang olish'Pipetka tugmasi
swatchesstring'Tayyor ranglar'Swatch guruhi

Data atributlari

AtributQayerdaQiymat
data-statetriggeropen · closed
data-sizetriggersm · md · lg
data-invalidtriggerxato holatida mavjud
data-disabledtriggero'chirilganda mavjud
data-stateswatchon · off
data-slotqismlarcolor-picker · color-picker-content · color-picker-area · color-picker-hue · color-picker-alpha

Klaviatura

TugmaQayerdaHarakat
Enter / SpacetriggerPanelni ochish
EscpanelYopish, fokus trigger'ga qaytadi
← / →2D maydonTo'yinganlik ±1% (Shift bilan ±10%)
↑ / ↓2D maydonYorqinlik ±1% (Shift bilan ±10%)
PageUp / PageDown2D maydonYorqinlik ±10%
Home / End2D maydonTo'yinganlik 0% / 100%
strelkalarhue / alphaSlider klaviaturasi
Enterhex inputKiritilgan rangni qo'llash

Accessibility

  • Trigger — oddiy <button>; Field ichida nomi label + joriy hex, aks holda "Rang tanlash, #4F46E5" (aria-label yoki labels.trigger bilan o'zgartiriladi).
  • 2D maydon — role="slider", aria-valuenow (to'yinganlik) va ikkala o'qni aytadigan aria-valuetext: "to'yinganlik 80%, yorqinlik 60%".
  • Hue va shaffoflik — Slider komponenti: role="slider", aria-valuetext ("210°", "50%").
  • Tayyor ranglar — role="group" ichida tugmalar, har biri hex nomli va aria-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.

Sahifada