@akhatmirzo/ui

ScriptProvider

Kontentni foydalanuvchi tanlagan alifboda ko'rsatish: lotin yoki kirill, tanlov eslab qolinadi.

Oʻzbekiston boʻylab yetkazib berish

Buyurtmangiz 2–3 kun ichida eshigingizgacha yetkaziladi. Toʻlov — naqd yoki karta orqali.

Import

import { ScriptProvider, ScriptToggle, Translit, useScript } from '@akhatmirzo/ui';

Matn bazada bitta alifboda saqlanadi (odatda lotin), foydalanuvchi esa uni o'zi tanlagan alifboda o'qiydi. O'girish @akhatmirzo/core dagi toScript orqali bajariladi — manba alifbo avtomatik aniqlanadi, shuning uchun kirillda saqlangan matn ham lotinga to'g'ri o'giriladi.

QismVazifasi
ScriptProviderJoriy alifboni saqlaydi (ixtiyoriy — localStorage da)
ScriptToggle"Lotin | Кирилл" almashtirgich — SegmentedControl asosida
TranslitMatnni joriy alifboda chizadi va lang atributini qo'yadi
useScript{ script, setScript, t } — o'z komponentlaringiz va atributlar uchun

Qachon ishlatish

  • O'zbek tilidagi ilova — foydalanuvchilarning bir qismi kirillda o'qishni afzal ko'radi. Kontentni ikki marta yozish shart emas.
  • Sarlavha, tugma, qisqa matnlar uchun Translit yoki t(). Foydalanuvchi kiritgan ma'lumotni (ism, manzil) o'girmang — u qanday yozilgan bo'lsa, shunday qoladi.
  • Atributlar uchun (placeholder, aria-label, title) — useScript().t, chunki Translit element chizadi.
  • Boshqa tillar uchun emas — bu tarjima emas, faqat o'zbek tilining ikki yozuvi o'rtasida o'girish.

ScriptToggle

Provider ichida uning holatini o'zi boshqaradi. Standart matnlar — "Lotin", "Кирилл", guruh nomi (aria-label) — "Alifbo"; ularni labels bilan o'zgartirasiz. SegmentedControl prop'lari (size, fullWidth, disabled ...) ham ishlaydi.

Tanlovingiz eslab qolinadi — sahifani yangilab koʻring.

Provider'siz ham ishlatish mumkin — value va onValueChange bilan oddiy boshqariladigan komponent bo'ladi.

useScript

t(text) — matnni joriy alifboga o'giradi. Provider tashqarisida script — 'latin', t esa matnni o'zgartirmaydi, shuning uchun komponentingiz provider'siz ham buzilmaydi.

script: cyrillic

const { script, setScript, t } = useScript();

t('Salom'); // kirill tanlangan bo'lsa — "Салом"
setScript('cyrillic');

Tanlovni eslab qolish va SSR

storageKey berilsa, tanlov localStorage da shu kalit bilan saqlanadi va boshqa tablar bilan sinxronlanadi. Server render va birinchi render doim defaultScript bilan bo'ladi — saqlangan qiymat gidratatsiyadan keyin o'qiladi. Shu tufayli Next.js'da gidratatsiya xatosi chiqmaydi. localStorage taqiqlangan bo'lsa (private rejim), tanlov faqat joriy sessiyada qoladi.

app/layout.tsx
<ScriptProvider defaultScript="latin" storageKey="script">
  {children}
</ScriptProvider>

Boshqariladigan rejim: script + onScriptChange (masalan, tanlovni foydalanuvchi profilida saqlash uchun).

Boshqa komponentlar bilan

Provider ichida RegionSelect hudud nomlarini va MoneyInput showWords summani joriy alifboda ko'rsatadi.

Props

ScriptProvider

PropTipStandartTavsif
script'latin' | 'cyrillic'—Joriy alifbo (boshqariladigan rejim)
defaultScript'latin' | 'cyrillic''latin'Boshlang'ich alifbo; SSR va birinchi render shu bilan
onScriptChange(script: UzScript) => void—Alifbo o'zgarganda
storageKeystring—Tanlovni localStorage da shu kalit bilan eslab qolish
childrenReactNode—

ScriptToggle

SegmentedControl prop'larini (value, defaultValue, onValueChange va children dan tashqari) qabul qiladi.

PropTipStandartTavsif
value'latin' | 'cyrillic'—Boshqariladigan qiymat; berilmasa — provider'dagi alifbo
defaultValue'latin' | 'cyrillic''latin'Provider ham, value ham bo'lmaganda
onValueChange(script: UzScript) => void—Tanlov o'zgarganda (provider ham yangilanadi)
labels{ latin?: string; cyrillic?: string; group?: string }{ latin: "Lotin", cyrillic: "Кирилл", group: "Alifbo" }
size'sm' | 'md' | 'lg''md'

Translit

Qolgan HTML atributlar elementga uzatiladi.

PropTipStandartTavsif
childrenmajburiystring—O'giriladigan matn (lotin yoki kirill)
asElementType'span'Render qilinadigan element
langstring—Standart — joriy alifboga qarab uz-Latn yoki uz-Cyrl

useScript

PropTipStandartTavsif
script'latin' | 'cyrillic'—Joriy alifbo
setScript(script: UzScript) => void—Alifboni almashtirish
t(text: string) => string—Matnni joriy alifboga o'girish

Accessibility

  • lang atributi. Translit elementiga lang="uz-Latn" yoki lang="uz-Cyrl" qo'yiladi — ekran o'quvchi to'g'ri talaffuzni tanlaydi, qidiruv tizimlari yozuvni aniqlaydi. Provider bo'lmasa, lang matnning o'zidan aniqlanadi. <html lang> ga tegilmaydi.
  • ScriptToggle — radiogroup (aria-label — "Alifbo"), ←→ bilan yuriladi. "Кирилл" tugmasida lang="uz-Cyrl" bor, shuning uchun lotin interfeysda ham to'g'ri o'qiladi.
  • Fokus saqlanadi. Alifbo almashganda faqat matn o'zgaradi, elementlar qayta yaratilmaydi.

Sahifada