O'rnatish
Paketlarni o'rnatish, CSS'ni ulash va birinchi komponent.
Kutubxona to'rtta mustaqil paketdan iborat. Komponentlar uchun @akhatmirzo/ui va
@akhatmirzo/tokens yetarli — qolganlari kerak bo'lsa qo'shiladi.
Talablar
- React 18 yoki undan yangi (19 ham qo'llab-quvvatlanadi)
- Tailwind CSS v4 — komponentlar Tailwind klasslari bilan yozilgan, stillarni sizning Tailwind build'ingiz yaratadi
- ESM'ni tushunadigan bundler: Vite, Next.js, Rsbuild va boshqalar
O'rnatish
Paketlarni qo'shing
pnpm add @akhatmirzo/ui @akhatmirzo/tokensShrift ixtiyoriy, lekin dizayn Manrope uchun moslangan:
pnpm add @fontsource-variable/manropeCSS'ni ulang
Asosiy CSS faylingizda Tailwind'dan keyin tokenlarni ulang va Tailwind'ga komponentlar klasslarini skanerlashni ayting:
@import 'tailwindcss';
@import '@fontsource-variable/manrope';
@import '@akhatmirzo/tokens/theme.css';
/* Yo'l shu CSS faylga nisbatan yoziladi */
@source '../node_modules/@akhatmirzo/ui/dist';@source'ni unutmang
Tailwind v4 node_modules ichini o'zi skanerlamaydi. @source qatori bo'lmasa, komponentlar
ko'rinadi, lekin stillarsiz qoladi. Yo'lni CSS faylingiz joylashuviga qarab to'g'rilang — masalan,
src/styles/app.css uchun '../../node_modules/@akhatmirzo/ui/dist'.
Provayderlarni qo'ying
Ilova ildizida bir marta. toast(), confirm() va tooltiplar shularsiz ishlamaydi:
import { ConfirmProvider, Toaster, TooltipProvider } from '@akhatmirzo/ui';
export function App() {
return (
<TooltipProvider>
<ConfirmProvider>
<Routes />
<Toaster position="bottom-right" />
</ConfirmProvider>
</TooltipProvider>
);
}Birinchi komponent
import { Button, toast } from '@akhatmirzo/ui';
export function SaveButton() {
return (
<Button variant="primary" onClick={() => toast.success('Saqlandi')}>
Saqlash
</Button>
);
}Vite
Tailwind v4 Vite'ga rasmiy plagin orqali ulanadi:
pnpm add -D tailwindcss @tailwindcss/viteimport tailwindcss from '@tailwindcss/vite';
import react from '@vitejs/plugin-react';
import { defineConfig } from 'vite';
export default defineConfig({
plugins: [react(), tailwindcss()],
});CSS fayl odatda src/ ichida turadi, shuning uchun @source bir pog'ona yuqoriga chiqadi:
@import 'tailwindcss';
@import '@fontsource-variable/manrope';
@import '@akhatmirzo/tokens/theme.css';
@source '../node_modules/@akhatmirzo/ui/dist';Provayderlarni src/main.tsx da yoki App ildizida qo'ying — yuqoridagi 3-qadamdagidek.
Next.js (App Router)
Komponentlar holat va brauzer API'laridan foydalanadi, shuning uchun ularni client
komponentlarda ishlating — fayl boshida 'use client' bo'lsin.
Tailwind v4 Next.js'da PostCSS plagini orqali ishlaydi:
pnpm add -D tailwindcss @tailwindcss/postcssexport default {
plugins: { '@tailwindcss/postcss': {} },
};@import 'tailwindcss';
@import '@fontsource-variable/manrope';
@import '@akhatmirzo/tokens/theme.css';
@source '../node_modules/@akhatmirzo/ui/dist';Provayderlarni alohida faylga chiqaring va layout.tsx da o'rab qo'ying:
'use client';
import { ConfirmProvider, Toaster, TooltipProvider } from '@akhatmirzo/ui';
import type { ReactNode } from 'react';
export function Providers({ children }: { children: ReactNode }) {
return (
<TooltipProvider>
<ConfirmProvider>
{children}
<Toaster />
</ConfirmProvider>
</TooltipProvider>
);
}import { Providers } from './providers';
import './globals.css';
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="uz">
<body className="bg-background font-sans text-text antialiased">
<Providers>{children}</Providers>
</body>
</html>
);
}Qo'shimcha paketlar
Komponentlarsiz ham ishlatish mumkin — har biri mustaqil:
pnpm add @akhatmirzo/core @akhatmirzo/hooks| Paket | Nima beradi |
|---|---|
@akhatmirzo/ui | React komponentlar (Tailwind v4 + Radix) |
@akhatmirzo/tokens | Dizayn tokenlari: CSS o'zgaruvchilari va Tailwind @theme |
@akhatmirzo/core | Formatlash, validatsiya, matn, storage va API — React'siz, bog'liqliksiz |
@akhatmirzo/hooks | React hooklar: useDebounce, useHotkeys, useLocalStorage va boshqalar |
core va hooks alohida o'rnatilishi shart emas
@akhatmirzo/ui ularni o'zi bog'liqlik sifatida oladi. Ularni o'z kodingizda to'g'ridan-to'g'ri
import qilsangiz, package.json ga ham qo'shib qo'ying.
Muammolar
Tailwind @akhatmirzo/ui klasslarini ko'rmayapti. CSS faylingizda @source qatori borligini
va yo'l shu CSS faylga nisbatan to'g'ri yozilganini tekshiring. pnpm monorepo'da yo'l
ilovaning o'z node_modules papkasiga qarashi kerak (repo ildizidagisiga emas).
<Toaster /> va <ConfirmProvider> ilova ildizida bir marta render qilinishi kerak. Ular
bo'lmasa, funksiyalar xato bermaydi, lekin ekranda hech narsa chiqmaydi.
Komponentni ishlatayotgan faylning birinchi qatoriga 'use client'; qo'shing. Server
komponentda faqat statik ko'rinishdagi elementlarni render qilish mumkin.
Tokenlar <html data-theme="dark"> atributiga qaraydi — class="dark" yetarli emas.
Dark mode sahifasida next-themes bilan sozlash ko'rsatilgan.