import type { Messages } from './en'; /** Azərbaycanca. Şəkil `en.tsx`-dən gəlir — əskik açar `tsc` xətasıdır. */ export const az: Messages = { common: { language: 'Dil', copy: 'Kopyala', copied: 'Kopyalandı', close: 'Bağla', loading: 'Yüklənir…', skipToContent: 'Məzmuna keç', }, error: { title: 'Bu önizləmə render oluna bilmədi.', titleFor: (label: string) => `${label} render oluna bilmədi.`, cell: 'Xəta', }, nav: { brandCaption: 'Dizayn Sistemi', searchPlaceholder: 'Komponent axtar…', searchShortcut: 'Axtarmaq üçün kəsik işarəsinə bas', /* Azərbaycancada saydan sonra isim təkdə qalır — “40 komponent”. */ matchCount: (n: number) => `${n} komponent`, overview: 'İcmal', introduction: 'Giriş', tokens: 'Dizayn tokenləri', icons: 'İkonlar', buttons: 'Düymələr', alerts: 'Bildirişlər', avatars: 'Avatarlar', badges: 'Nişanlar', toasts: 'Bildirişlər', parity: 'Figma uyğunluğu', noMatch: 'Uyğunluq yoxdur.', open: 'Naviqasiyanı aç', hide: 'Naviqasiyanı gizlət', show: 'Naviqasiyanı göstər', rail: 'Dizayn sistemi naviqasiyası', railDescription: 'Əsaslar və kitdəki bütün komponentlər.', }, header: { breadcrumb: 'Naviqasiya zənciri', root: 'Dizayn Sistemi', components: 'Komponentlər', foundations: 'Əsaslar', notFound: 'Tapılmadı', }, notFound: { title: (path: string) => `“${path}” ünvanında heç nə yoxdur`, body: 'Yan paneldən komponent seç.', }, toolbar: { figma: 'Figma', dark: 'Tünd', light: 'Açıq', bridge: { live: 'Bridge işləyir və Figma plugin pəncərəsi açıqdır.', noPlugin: 'Bridge işləyir, amma onu heç nə sorğulamır. Figma-da: Plugins → Development → “CBAR Figma bridge”.', off: 'Portda bridge yoxdur — hər Figma paneli commit olunmuş snapshot-u oxuyur.', idle: 'Bu sessiyada canlı Figma sorğuları söndürülüb.', }, status: { live: 'Canlı', noPlugin: 'Plugin yoxdur', off: 'Bridge yoxdur', idle: 'Sönülü', probing: 'Bridge yoxlanılır…', }, file: 'Fayl', a11y: 'Axe', a11yHint: 'Hər keçiddə axe-core-u bu səhifənin main hissəsinə qarşı işlədir. Yalnız development üçün — burada `color-contrast` da yoxlanılır, jsdom test dəsti isə bunu bacarmır.', }, a11y: { title: 'Əlçatanlıq', running: 'Yoxlanılır…', rerun: 'Yenidən işlət', none: 'Bu səhifənin main hissəsində pozuntu yoxdur.', clean: 'Təmiz', count: (n: number) => `${n} element`, reference: 'Qayda haqqında', scope: 'Yalnız
yoxlanılır. Saytın öz çərçivəsi daxil deyil.', impact: { critical: 'Kritik', serious: 'Ciddi', moderate: 'Orta', minor: 'Kiçik', }, }, table: { props: 'Prop-lar', prop: 'Prop', type: 'Tip', default: 'Default', description: 'Təsvir', figmaSpec: 'Figma ölçüləri', required: 'məcburi', }, matrix: { copyAll: (total: number) => `${total} variantın hamısını kopyala`, copyAllTitle: 'Bu şəbəkənin hər xanası, bir import bloku altında', }, playground: { title: 'Sınaq meydanı', snippetTitle: 'Məhz bu vəziyyət üçün import sətri və JSX', controls: 'Prop-lar', reset: 'Sıfırla', resetTitle: 'Bu komponentin default prop-larına qayıt', }, share: { share: 'Paylaş', copyLink: 'Bu vəziyyətin linkini kopyala', copyPreview: 'Önizləmə linkini kopyala', copyCode: 'Komponenti və import-u kopyala', openPreview: 'Önizləməni yeni tabda aç', linkCopied: 'Link kopyalandı', }, embed: { openInShowcase: 'Showcase-də aç', notFound: 'Belə komponent yoxdur.', }, tour: { reopen: 'İntro tur', title: 'UI kitə giriş', step: (index: number, total: number) => `Addım ${index} / ${total}`, back: 'Geri', next: 'İrəli', done: 'Başlayaq', skip: 'Keç', progress: 'Turun gedişi', slides: { welcome: { title: 'Dizayn sisteminə xoş gəlmisiniz', body: 'Bu sayt paket kimi publish olunan UI kitin dokumentasiyasıdır. Altı slayd — içində nə var və bu sayt nə bacarır. Təxminən bir dəqiqə.', components: (n: number) => `${n} komponent`, icons: (n: number) => `${n} ikon`, subpaths: (n: number) => `${n} import yolu`, }, components: { title: 'Komponentlər və variantları', body: 'Kontrollar iki müstəqil oxdan qurulur: dolğu üsulu və rəng palitrası. Onları kəsişdirmək bir neçə prop-un CBAR-ın bütün kanvasını örtməsinin səbəbidir — hər komponent səhifəsi həmin kəsişməni şəbəkə kimi çəkir.', caption: 'Hər kontrol həm də ölçü alır — xs-dən xl-ə.', }, tokens: { title: 'Tokenlər, və bunu sübut edən bir açar', body: 'Heç bir komponent rəng adı yazmır. Onlar rol adı yazır — background, ctl-solid, muted-foreground — token faylı isə həmin rolları CBAR-ın ramp-larına bağlayır. Rebrendinqin bir fayla sığmasının səbəbi məhz bu dolayılıqdır.', tryIt: 'Bas — bu dialoqun arxasındakı sayt da onunla birlikdə dəyişir.', switchLabel: 'Tema', dark: 'Tünd', light: 'Açıq', }, icons: { title: 'Bütöv ikon dəsti', body: 'CBAR-ın kitabxanası kitlə birlikdə gəlir, hər ikon həm outline, həm solid çəkilib. Onlar bir-bir tree-shake olunur, ona görə tək ikon import etmək bir kilobaytdan az tutur.', familyLabel: 'İkon ailəsi', outline: 'Outline', solid: 'Solid', }, site: { title: 'Bu sayt nə bacarır', body: 'Hər səhifə eyni dörd hissədən qurulub:', playground: 'Hər prop üçün bir kontrolu olan playground — vəziyyəti URL-də yaşayır.', matrix: 'Figma kanvasının istifadə etdiyi düzülüşdə variant şəbəkələri.', copy: 'İstənilən şeyi kopyala — bir xana, bütöv şəbəkə, bir nümunə. Kopyaladığın ekrandakı elementin özüdür, import sətirləri ilə birlikdə.', parity: 'Figma-nın çəkdiyi ilə kitin gerçəkləşdirdiyini tutuşduran parity hesabatı.', search: 'ilə hər yerdən sidebar-da axtar', }, start: { title: 'Buradan başla', body: 'Quraşdır, stylesheet-i bir dəfə import et, sonra komponentləri bir-bir götür.', copyInstall: 'Quraşdırma əmrini kopyala', links: 'Yaxud oxumağa davam et:', }, }, }, introduction: { title: 'UI Kit', lead: 'Bu, tətbiq deyil — publish olunan komponent kitabxanasıdır. Buradakı hər komponent komanda yoldaşlarına öz import yolu ilə çatır və CBAR dizayn sistemi onun tokenlərinə hopdurulub.', install: { title: 'Quraşdırma', body: 'Paket öz kompilyasiya olunmuş stil faylını daşıyır, ona görə istifadə edən tətbiqdə heç bir Tailwind konfiqurasiyası lazım deyil.', copyInstall: 'Quraşdırma əmrini kopyala', copyUsage: 'Import sətirlərini kopyala', }, structure: { title: 'Necə qurulub', folders: { term: 'Hər komponent üçün bir qovluq', def: 'İmplementasiya, test və index.ts bir yerdə yaşayır, və məhz həmin index.ts subpath-i yaradır — scripts/gen-exports.mjs qovluq quruluşunu oxuyub package.json#exports-u ondan yazır. Yeniləməyi unuda biləcəyin əl siyahısı yoxdur.', }, tokens: { term: 'İki token qatı', def: 'tokens.css xam dəyərləri saxlayır və maşın tərəfindən idarə olunur; theme.css onları rollara bağlayır və rolları Tailwind-ə açır. Komponentlər yalnız rol adı çəkə bilər, ona görə rebrendinq bir fayldır — və ya bir figma-sync buraxılışı.', }, styles: { term: 'Stillər hazır kompilyasiya olunmuş gəlir', def: 'Publish olunan paket Tailwind CLI ilə yığılmış styles.css daşıyır. Onsuz da Tailwind v4 işlədən tətbiqlər əvəzinə token qatlarını import edib utility-ləri öz build-lərində yarada bilər.', }, deps: { term: 'Sıfır runtime asılılığı', def: 'Kiti quraşdırmaq sənin lock faylına heç nə əlavə etmir. Radix yenə əlçatanlıq müqaviləsini daşıyır, tailwind-merge yenə className-ini qalib edir — sadəcə birincisi dist-ə kompilyasiya olunub, ikincisi src-ə köçürülüb, yəni onlar kitin problemidir, sənin yox. İkonlar, variant qurucusu, class kompozeri, komanda paleti, toast-lar və tarix hesabı onsuz da kitin öz kodu idi.', }, }, usingSite: { title: 'Bu saytdan istifadə', overview: (count: number) => `${count} komponentin hamısı bir scroll-da, canlı render olunur.`, tokens: 'işləyən sənəddən oxunan hər primitiv və rol, yanında CBAR-ın öz hex dəyəri ilə.', icons: 'bütün ikon dəsti, axtarışla, hər ikon üçün dörd kopyalama formatı ilə.', parity: 'CBAR-ın Figma faylının çəkdiyi ilə bu kitin implementasiya etdiyinin müqayisəsi.', toolbar: 'Tema və dil keçidləri URL-də yaşayır, ona görə bu saytın istənilən görünüşü kiməsə göndərə biləcəyin linkdir.', copy: 'Demək olar hər şey kopyalanır: playground-un cari vəziyyəti, tək bir matris xanası, bütöv bir şəbəkə, bir nümunə. Kopyaladığın — ekrandakı elementin özüdür, import sətirləri ilə birlikdə.', }, adding: { title: 'Komponent əlavə etmək', body: 'Claude Code-da bir əmr qovluğu, testi və export-u qurur:', copySkill: 'Əmri kopyala', byHand: 'Əl ilə: npx shadcn@latest add , yaranan faylı öz qovluğuna köçür, "use client" direktivi ilə başlayan index.ts əlavə et, sonra pnpm exports:gen işlət.', }, }, overview: { lead: (count: number) => ( <> {count} komponent, src/{' '} qovluğundan canlı render olunur — build-dən yox. Hər kart komponentin öz səhifəsinə, tam Figma variant şəbəkəsinə aparır. ), }, component: { copyCode: 'Kodu kopyala', copyCodeTitle: 'Bu nümunə üçün import-lar və JSX', compositions: 'Kompozisiyalar', }, tokens: { title: 'Dizayn tokenləri', intro: ( <> tokens.css primitivləri saxlayır və maşın tərəfindən idarə olunur — figma-sync bacarığı onu bütövlükdə yenidən yazır. theme.css onları aşağıdakı semantik rollara bağlayır, komponentlər isə yalnız həmin rolları işlədə bilər. ), hexNote: ( <> Hər nümunə yazılmış dəyəri, altında isə CBAR-ın öz hex-ini göstərir — oklch-dan çevrilmiş deyil, generatorun elan yanına yazdığı şərhdən oxunub, yəni Figma-nın çap etdiyi rəqəmdir. Rol həm də bağlandığı primitivin adını verir, brauzer isə onu itirir. Başdakı{' '} ≈ Figma qarşılığı olmayan bir neçə dəyəri bildirir — interpolyasiya olunmuş addım və ya alfa daşıyan rol — onlar yazılmış dəyərdən çəkilib. ), semanticRoles: 'Semantik rollar', radius: 'Künc radiusu', radiusNote: 'Hər radius --ui-radius-dən törəyir, ona görə bir redaktə bütün kitin künclərini dəyişir. Komponentlər Tailwind alias-ını (rounded-md) çağırır, primitivi heç vaxt.', elevation: 'Hündürlük (kölgə)', elevationNote: 'İki qatlı kölgələr — dar təmas kölgəsi üstəgəl yumşaq ətraf kölgəsi. Tək bulanıq kölgə dərinlik kimi yox, boz ləkə kimi oxunur.', motion: 'Hərəkət', motionNote: 'Komponentlərin birbaşa adını çəkə biləcəyi yeganə qrup — z-index şkalası ilə birlikdə: müddət və easing tema üzrə yenidən bağlanmır, ona görə onların üstündə semantik qat yoxdur. Bütün hərəkət prefers-reduced-motion altında globals.css-dəki qlobal qayda ilə söndürülür, deməli heç bir komponentin bunu ayrıca həll etməsi lazım deyil.', tokenColumn: 'Token', valueColumn: 'Dəyər', syncTitle: 'Figma-dan sinxronlaşdırma', syncNote: 'tokens.css maşın tərəfindən idarə olunur. Figma bridge işləyəndə figma-sync bacarığı Variables-i oxuyur, fərqi göstərir və primitivləri yenidən yazır. theme.css — primitivlərdən rollara keçid — əl ilə idarə olunur və sinxronizasiyadan sağ çıxır.', copyCss: 'CSS kopyala', copyCssTitle: (section: string) => `Bütün ${section} tokenlərini hex dəyərləri ilə CSS kimi kopyala`, copyHexTitle: (hex: string) => `${hex} kopyala`, derivedNote: 'Təxmini — bu dəyər üçün Figma hex-i yoxdur, ona görə yazılmış dəyərdən çəkilib. Ya kitin CBAR şkalasından kənara interpolyasiya etdiyi addımdır, ya da heç bir şkala addımının təyin etmədiyi alfalı dəyər.', }, icons: { title: 'İkonlar', lead: (count: number, categories: number, pkg: string) => ( <> Bütöv CBAR dəsti — {categories} kateqoriyada {count} ikon, hər biri bir variant{' '} prop-u arxasında outline və solid çəkilişi ilə. {pkg}/icons ünvanından gəlirlər və qəsdən kök barrel-də yoxdurlar ki, CheckIcon kimi adlar tətbiqin öz dəsti ilə toqquşmasın. Kopyalamaq üçün birinə klikləyin. ), searchPlaceholder: 'İkon axtar…', allCategories: 'Bütün kateqoriyalar', variant: 'Variant', family: 'Ailə', size: 'Ölçü', detailMeta: (category: string, shared: boolean, size: number) => ( <> CBAR {category} ·{' '} {shared ? 'hər iki ailə üçün bir çəkiliş' : 'outline + solid'} · {size}px ), sharedNote: ( <> CBAR bunu bir dəfə çəkib — variant ardıcıllıq üçün qəbul olunur, amma heç nəyi dəyişmir. ), copyUsage: 'Import + JSX kopyala', copySvg: 'SVG kopyala', copySvgTitle: 'Render olunmuş markup, kit sinifləri çıxarılıb', copyName: 'Adı kopyala', copyComponent: 'Komponenti kopyala', copyComponentTitle: 'Müstəqil React komponenti — bu kitdən asılı deyil', empty: (query: string, category: string | null) => `“${query}” üzrə heç nə tapılmadı${category ? ` (${category} kateqoriyasında)` : ''}.`, }, buttons: { title: 'Düymələr', lead: (pkg: string) => ( <> Bir komponentdən doqquz variant, yeddi palitra və doqquz ölçü — {pkg}/button{' '} ünvanından gəlir. CBAR-ın modelləşdirdiyi kimi, görünüş və rəng ayrı prop-lardır: variantların beşi istənilən palitra ilə birləşir, dördü öz rəngini sabitləyir və palitranı nəzərə almır. Hər xana CBAR-ın öz dəstinin default çəkdiyi hər iki tərəf ikonunu daşıyır;{' '} İkonlar idarəsi onları söndürür. Xananın üzərinə gəlib onu import sətirləri ilə birlikdə JSX kimi kopyala — bir dəfəyə bir xana, çünki yapışdırılan vahid elə budur. Filtrlər URL-də yaşayır, yəni baxdığın görünüş göndərdiyin linkdir. ), searchPlaceholder: 'Variant, palitra, ölçü axtar…', palette: 'Palitra', size: 'Ölçü', icons: 'İkonlar', disabled: 'Deaktiv', all: 'Hamısı', empty: (query: string) => ( <> “{query}” üzrə heç nə tapılmadı. Variant (outline), palitra (green) və ya ölçü (icon-lg) yoxla. ), composableTitle: 'Birləşən variantlar', composableLead: ( <> Beş görünüş, yeddi palitra, beş hündürlük. Hamısı cəmi on iki cva qeydinə başa gəlir, çünki variant rəng adı yazmır — palitra sinfinin qurduğu --ctl-* rollarını oxuyur. Elə buna görə yeni palitra hər variant üçün əlavə xərc yaratmır. ), composableGrid: (disabled: boolean) => `size × colorPalette${disabled ? ', disabled' : ''}`, pinnedTitle: 'Rəngi sabitlənmiş variantlar', pinnedDescription: 'Bu dördü theme.css-dəki semantik rollardan boyanır, ona görə öz rəngini daşıyır və colorPalette-i nəzərə almır — yuxarıdakı palitra filtri onlara çatmır. link variantının ümumiyyətlə qutusu yoxdur, buna görə onun sətri idarə elementi kimi yox, mətn kimi oxunur.', iconOnlyTitle: 'Yalnız ikon ölçüləri', iconOnlyDescription: (palette: string) => `Ayrıca komponentlə yox, ölçü ilə kvadrat: 32 / 36 / 40 / 44px, burada colorPalette="${palette}" ilə çəkilib. İkon uşaq elementdir, ona görə kopyalanan xana iki import sətri gətirir. Hər birinə aria-label ver — oxunacaq mətn yoxdur.`, tabs: { label: 'Görünüş', gallery: 'Qalereya', figma: 'Figma düzümü', }, figma: { lead: ( <> Eyni buttonlar, CBAR-ın canvas-ında çəkildiyi formada: hər palitraya bir zolaq, hər treatment-ə bir sütun, hər state-ə bir sətir. Button set-i ( 2446:6959) dörd ölçüsünü yan-yana bloklar kimi düzür, ona görə aşağıdakı{' '} Ölçü seçimi hansı bloka baxdığındır. Hamısı seçsən canvas-ın özünü alırsan. ), stateNote: ( <> Burada yalnız disabled bir prop-dur. hover və{' '} active CSS state-idir, ona görə o iki sətir məhz{' '} controlVariants-in :hover arxasına qoyduğu class ilə məcburi çəkilir — sətir kit-in həqiqətən çəkdiyini göstərir, təxmini deyil. Bir sətri paylaşırlar, çünki CBAR beş treatment-in hamısında ikisini eyni çəkir, kit-in isə öz{' '} :active treatment-i yoxdur. ), copyNote: ( <> Kopyaladığın həmin məcburi class olmadan buttondur: hover bir state-dir, variant deyil — snippet kontroldur, qalanını kursorun edir. ), swapNote: ( <> CBAR-ın Button set-i bu zolağı tərs boyayır — onun{' '} colorPalette=primary-si surface-colored-secondary-yə bağlanıb. Figma dəyişənləri, IconButton və ProgressCircle burada çəkiləni təsdiqləyir, ona görə set səhv bağlanmış sayılır. Tam izah docs/FigmaParity.mdx-dədir. ), sizeNote: ( <> CBAR Button üçün sm pilləsini çəkmir — xs-dən{' '} md-yə atlayır. Kit onu 36px-də doldurur və o, Qalereya tabındadır. ), state: 'State', allSizes: 'Hamısı', grid: (palette: string, size: string) => `colorPalette="${palette}", size="${size}"`, }, }, alerts: { title: 'Bildirişlər', lead: (pkg: string) => ( <> Bir komponentdən dörd variant və yeddi palitra — {pkg}/alert ünvanından gəlir. Button-dan fərqli olaraq, heç biri hover state daşımır — bildiriş interaktiv deyil. Xananın üzərinə gəlib onu import sətri ilə birlikdə JSX kimi kopyala — bir dəfəyə bir xana, çünki yapışdırılan vahid elə budur. Filtrlər URL-də yaşayır, yəni baxdığın görünüş göndərdiyin linkdir. ), searchPlaceholder: 'Variant, palitra, ölçü axtar…', palette: 'Palitra', size: 'Ölçü', all: 'Hamısı', empty: (query: string) => ( <> “{query}” üzrə heç nə tapılmadı. Variant (surface), palitra ( tertiary) və ya ölçü (lg) yoxla. ), grid: 'size × colorPalette', cellTitle: 'Diqqət', cellDescription: 'Canvas-dakı hər variant birini daşıyır.', tabs: { label: 'Görünüş', gallery: 'Qalereya', figma: 'Figma düzümü', }, figma: { lead: ( <> Eyni bildirişlər, CBAR-ın canvas-ında çəkildiyi formada: hər status-a bir zolaq, hər treatment-ə bir sətir, hər ölçüyə bir sütun. Alert set-i ( 2446:316) heç bir interaksiya state-i çəkmir — burada göstərilən hər prop həqiqi prop-dur. Hər xana 421px enindədir və ikon, başlıq və təsvir daşıyır, çünki canvas-dakı 72 variantın hamısı belədir və üçündən heç biri property arxasında deyil. ), bandNote: ( <> CBAR treatment-i mənadan eyni kit kimi ayırır: status kit-in{' '} colorPalette kimi ifadə etdiyi şeydir. Uyğunluq adlardan yox, rənglərdən oxunur — info firuzəyi secondary-dir (#4BC7B5),{' '} info-secondary isə tünd-mavi primary (#004976); dəyişən cədvəli də bunu deyir. tertiary burada zolağı olmayan yeganə kit palitrasıdır; o hələ də hər kit palitrasını gəzən Qalereya tabındadır. ), sizeNote: ( <> CBAR ən kiçik pilləni default adlandırır; kit onu sm{' '} adlandırır ki, pillə digər komponentlərin hamısı kimi oxunsun. Təsvir də onunla birlikdə dəyişir — 12 / 16 / 18px — set-də çəkildiyi kimi. ), outlineNote: ( <> Burada iki şey qəsdən fayldan köçürülmür: onun outline variantı{' '} warning, success və info-secondary-də artıq qalmış tünd-mavi çalar daşıyır, digər üçündə isə yox; həmçinin altı zolağın hamısında eyni status ikonu çəkilir. /parity?tab=findings tabındakı 7-ci bulguya bax. ), status: 'Status', grid: (status: string, palette: string) => `status="${status}" (colorPalette="${palette}")`, }, }, avatars: { title: 'Avatarlar', lead: (pkg: string) => ( <> Bir komponentdən üç treatment, yeddi palitra, altı pillə və iki forma —{' '} {pkg}/avatar ünvanından gəlir. shape CBAR-ın açıq şəkildə çəkdiyi üçüncü oxdur, ona görə buradakı hər tor bir formaya bağlanır, üç ölçünü birdən oxutmağa çalışmır. Xananın üzərinə gəlib onu import sətri ilə birlikdə JSX kimi kopyala — bir dəfəyə bir xana, çünki yapışdırılan vahid elə budur. Filtrlər URL-də yaşayır, yəni baxdığın görünüş göndərdiyin linkdir. ), searchPlaceholder: 'Variant, palitra, ölçü, forma axtar…', palette: 'Palitra', size: 'Ölçü', shape: 'Forma', all: 'Hamısı', empty: (query: string) => ( <> “{query}” üzrə heç nə tapılmadı. Variant (outline), palitra ( tertiary), ölçü (2xs) və ya forma (square) yoxla. ), grid: 'size × colorPalette', tabs: { label: 'Görünüş', gallery: 'Qalereya', figma: 'Figma düzümü', }, figma: { lead: ( <> Eyni avatarlar, CBAR-ın canvas-ında çəkildiyi formada: hər palitraya bir zolaq, hər treatment-ə bir blok, aşağı forma, yana ölçü. avatar set-i ( 2446:757) heç bir interaksiya state-i çəkmir, ona görə burada göstərilən hər prop həqiqi prop-dur. Bloklar yan-yana durur və sətrə keçmək əvəzinə sürüşür, çünki soldan sağa kiçilən pillə canvas-ın göstərdiyi şeydir. ), bandNote: ( <> Dörd zolağın ikisi faylda səhv adlandırılıb. CBAR-ın{' '} colorPalette=primary dəyəri surface/colored/secondary ( #4BC7B5, firuzəyi), secondary dəyəri isə{' '} surface/colored/primary (#004976, tünd-mavi) ilə bağlanıb — yəni çarpazdır, tam olaraq Button set-ində olduğu kimi, halbuki dəyişən cədvəli{' '} brand/primary/500 = #004976 deyir. Hər başlıq zolağı həqiqətən boyayan kit palitrasını adlandırır. third və neutral sadəcə addır və uyğun gəlir; red, green və yellow üçün burada zolaq yoxdur, onlar hələ də Qalereya tabındadır. ), sizeNote: ( <> Bridge ilə ölçülüb: pillə 24 / 32 / 36 / 40 / 48 / 64px, mətn isə 10 / 12 / 14 / 16 / 20 / 24px — hər pillə kit-in çəkdiyi ilə eynidir. Kvadrat künc altı ölçünün hamısında{' '} radius/md-dir, ölçü ilə böyümür: 24px-lik avatar da 64px-lik avatar kimi 8px saxlayır. ), swapNote: ( <> CBAR-ın avatar set-i bu zolağı əks rolla boyayır — Button-un daşıdığı eyni çarpazlıq. Kit dəyişən cədvəli ilə razıdır və bunun üçün dəyişdirilmir; başlıq onu həqiqətən nəyin boyadığını adlandırır. Tam izah /parity?tab=findings tabındakı 1-ci tapıntıdadır. ), imageNote: ( <> Set-in beşinci oxu — avatar-type — cəmi altı dəfə çəkilib:{' '} solid / square / third-də, hər pilləyə bir dənə. Kit bunu prop kimi yox, uşaq komponent kimi ifadə edir (AvatarFallback{' '} əvəzinə AvatarImage), buna görə uyğunluq hesabatı onu{' '} initials-a bağlayır. Aşağıdakı şəkil yerli placeholder-dir: canvas bunları fotoqrafiya ilə doldurur, onu isə yaymaq bizim ixtiyarımızda deyil. ), palette: 'Palitra', grid: 'shape × size', imageGrid: 'size', }, }, badges: { title: 'Nişanlar', lead: (pkg: string) => ( <> Yeddi palitraya qarşı beş treatment, üstəgəl öz rəngini sabitləyən beş qısayol —{' '} {pkg}/badge ünvanından gəlir. Nişan interaktiv deyil, ona görə{' '} asChild onu linkə çevirməyibsə buradakı heç nəyin hover state-i yoxdur. Xananın üzərinə gəlib onu import sətri ilə birlikdə JSX kimi kopyala — bir dəfəyə bir xana, çünki yapışdırılan vahid elə budur. Filtrlər URL-də yaşayır, yəni baxdığın görünüş göndərdiyin linkdir. ), searchPlaceholder: 'Variant, palitra, ölçü axtar…', palette: 'Palitra', size: 'Ölçü', icons: 'İkonlar', all: 'Hamısı', empty: (query: string) => ( <> “{query}” üzrə heç nə tapılmadı. Variant (surface), palitra ( tertiary) və ya ölçü (xs) yoxla. ), grid: 'size × colorPalette', composableTitle: 'Kompozisiyalı treatment-lər', composableLead: ( <> Bu beşi --ctl-* rollarından boyanır, deməli colorPalette qəbul edir və hər cütlük üçün bir xana var. ), shorthandTitle: 'Qısayollar', shorthandLead: ( <> Bu beşi isə rəngini semantik rollardan sabitləyir, ona görə colorPalette-i spesifiklikdə yarışmaq əvəzinə tamamilə iqnor edir — məhz buna görə burada palitra oxu ilə yox, size ilə çarpazlanır. Nəzərə al:{' '} variant="secondary" neytral boz roldur, firuzəyi{' '} colorPalette="secondary" ramp-ı deyil; iki ad toqquşur, bu da köhnə qısayolları saxlamağın qiymətidir. ), shorthandGrid: 'colorPalette bu beşinə təsir etmir', tabs: { label: 'Görünüş', gallery: 'Qalereya', figma: 'Figma düzümü', }, figma: { lead: ( <> Eyni nişanlar, CBAR-ın canvas-ında çəkildiyi formada: hər rəngə bir zolaq, hər ölçüyə bir sətir, hər treatment-ə bir sütun. Badge set-i (2456:5146) 32 variant elan edir və 32-si də aşağıdadır — səkkizlik dörd zolaq. Set heç bir interaksiya state-i çəkmir, ona görə burada göstərilən hər prop həqiqi prop-dur. ), bandNote: ( <> CBAR treatment ilə mənanı kit ilə eyni cür ayırır: color kit-in{' '} colorPalette kimi ifadə etdiyi şeydir. Uyğunlaşdırma adlardan yox, doldurma rənglərindən oxunur — adlar ramp yox, rol bildirir (removed,{' '} default), deməli uyğunlaşdırmaq üçün ad yoxdur. Hər başlıq zolağı həqiqətən boyayan kit palitrasını adlandırır. ), defaultNote: ( <> color="default" firuzəyi secondary-dir, tünd-mavi{' '} primary yox. Bridge ilə ölçüldü: #4BC7B5 solid /{' '} #CFF3EC surface / #A6E8DA kənar — tam olaraq{' '} secondary-500 / -100 / -200, yəni Alert set-inin{' '} info zolağı üçün işlətdiyi eyni üç dəyər. Beləliklə{' '} primary, tertiary və yellow üçün burada zolaq qalmır; hər üçü Qalereya tabındadır, o tab bütün kit palitralarını gəzir. ), variantNote: ( <> Canvas iki treatment çəkir. CBAR-ın surface-i kit-in{' '} surface-idir: həmin 16 variantın hamısı{' '} box-shadow: 0 0 1px 0 <rəng> inset daşıyır — inset kölgə kimi çəkilmiş 1px kənar, yəni kit-in bu adla nəzərdə tutduğu tint-üstəgəl-kənar. Kit-in{' '} subtle, outline və ghost variantlarının burada sütunu yoxdur, onlar Qalereya tabındadır. ), iconNote: ( <> .iconStart? və .iconEnd? set-də boolean-dır və hər ikisi{' '} true ilə başlayır, ona görə canvas-dakı hər variant iki tərəfində bir qlif daşıyır — Outline/Interface/Plus və{' '} Outline/Interface/Settings, set-in öz swap default-ları. Kit ikonları prop kimi yox, uşaq komponent kimi qəbul edir, deməli düzülüş uşaqların sırasıdır və uyğunluq səhifəsində müqayisə ediləsi bir şey yoxdur; burada isə o, Figma-nın başladığı yerdən başlayan bir idarəedicidir. Ölçüldü: qutu, padding, boşluq, mətn və qlif hər dörd pillədə kit ilə üst-üstə düşür. ), color: 'Rəng', grid: (color: string, palette: string) => `color="${color}" (colorPalette="${palette}")`, }, }, toasts: { title: 'Bildirişlər', lead: (pkg: string) => ( <> Bir komponentdən beş status — {pkg}/toast ünvanından gəlir. Toast bu rəfdə istisnadır: statusu prop deyil. Toast-ı render etmirsən — toast.success(…){' '} çağırırsan, store isə onu tətbiqin kökünə yaxın quraşdırılmış yeganə Toaster-ə ötürür. Ona görə aşağıdakı qalereya həm hər kind-in necə göründüyünü, həm də onları yaradan çağırışları göstərir. Filtrlər URL-də yaşayır, yəni baxdığın görünüş göndərdiyin linkdir. ), searchPlaceholder: 'Kind axtar…', closeButton: 'Bağlama düyməsi', icons: 'İkonlar', all: 'Hamısı', dismissAll: 'Hamısını bağla', empty: (query: string) => ( <> “{query}” üzrə heç nə tapılmadı. Kind yoxla (warning, loading). ), kindsTitle: 'Bütün kind-lər', kindsLead: ( <> Altı kind, CBAR-ın beş state-inə qarşı: loading-in canvas-da qarşılığı yoxdur, dizayn faylının neutral dediyi isə kit-in default-udur. Rəng tamamilə kind-dən gəlir — o, palitranı seçir, səth və aparıcı kənar isə oradan{' '} --ctl-subtle və --ctl-border oxuyur. ), kindsGrid: 'kind — kopyalama düyməsi sənə markup yox, çağırışı verir', liveTitle: 'Həqiqisi', liveLead: ( <> Yuxarıdakı şəbəkə statik çəkilib ki, altısı birdən müqayisə oluna bilsin. Bu isə toast-ın həqiqətən necə qaldırıldığıdır. Burada heç nə pinlənmir, ona görə hər biri dörd saniyəyə öz özünə yox olur — pinlənmiş toast səni növbəti səhifəyə qədər izləyərdi, çünki növbə bütün tətbiqin paylaşdığı modul-singletondur. ), position: { title: 'Harada görünür', lead: ( <> bottom-right sadəcə defolt dəyərdir. Künc toast-ın qaldırılarkən{' '} seçilməyən yeganə tərəfidir: o, Toaster-ə aiddir, yəni tətbiqdəki bütün toast-lar onu bölüşür. Aşağıdan birini seç — showcase-in öz Toaster-i yerini dəyişir və düymə şəkil yox, əsl toast qaldırır. ), legend: 'Toaster mövqeyi', demo: 'Burada birini qaldır', /* İngiliscə qalır — kopyalanan çağırışların içindəki bütün dəyərlər kimi. */ demoBody: 'The Toaster owns the corner; the call does not.', note: ( <> Altı dəyər var və yığılma sırası da onlara uyğun gəlir: ən yenisi kənara ən yaxın, yəni yuxarı künc aşağıya doğru, aşağı künc yuxarıya doğru dolur. Yalnız bir{' '} Toaster quraşdır — ikincisi toast-ları iki künc arasında bölmür, bütün növbəni iki dəfə çəkir. ), }, tabs: { label: 'Görünüş', gallery: 'Qalereya', figma: 'Figma düzümü', }, figma: { lead: ( <> Eyni bildirişlər, CBAR-ın canvas-ında çəkildiyi formada: tək sütun, hər state-ə bir sətir, yuxarıdan aşağı. Toast set-i (2414:10758) beş variant elan edir və beşi də aşağıdadır. Hər biri 306px enində, 12px 16px padding, 6px radius və yalnız aparıcı kənarda 3px kənarla — çərçivə deyil. Set heç bir interaksiya state-i çəkmir, ona görə burada göstərilən hər prop həqiqi prop-dur. ), bandNote: ( <> Bu dəfə uyğunlaşdırmada təxmin yoxdur: figma_css bağlı dəyişən adlarını birbaşa verir — info üçün --surface-subtle-secondary /{' '} --border-colored-secondary, neutral üçün{' '} --border-colored-black — və bunlar komponentdəki kindPalettes{' '} ilə onsuz da üst-üstə düşür. Deməli CBAR-ın info-su firuzəyi{' '} secondary-dir; Alert-in info zolağı və Badge-in{' '} default rəngindən sonra bunu deyən üçüncü set. ), neutralNote: ( <> Beşdən dördü bit-bərabər uyğun gəlir. neutral gəlmir, səbəbi isə dizayn faylındadır: CBAR eyni rol üçün iki dəyişən daşıyır —{' '} --surface-subtle-neutral (#E5E5E5), Alert onu işlədir, və{' '} --surface-subtle-gray (#F9F9F9), Toast və Badge onu işlədir. Kit-də bir palette-black var, ona görə Alert ilə razılaşır və burada bir pillə açıq görünür. Onu yenidən yönləndirmək iki set-i düzəldib, düzgün olanı sındırardı. ), iconNote: ( <> iconLeft? və iconRight? set-də boolean-dır və hər ikisi{' '} true ilə başlayır. Canvas hər beş state-in sol yuvasına eyni{' '} qlifi qoyur — Solid/Status/Info-circle — və yalnız rəngini dəyişir; yanındakı bağlama xaçı da eyni rəngi alır. Kit buna uyğunlaşdırıldı, ona görə bu tab heç nə məcbur etmir: gördüyün şey komponentin özüdür, kit-i işlədən istənilən tətbiqdə toast belə çıxır. ), inkNote: ( <> Mürəkkəb CBAR-ın özününküdür, ikon vektorlarından ölçülüb və hər biri onsuz da adlandırılmış ramp addımıdır — green-600 #16A34A, red-600{' '} #F00000, yellow-ink #865F28,{' '} secondary-500 #4BC7B5, neutral-800{' '} #222222 — məhz buna görə kit onları beş literal kimi yox, bir token kimi (--ctl-icon) mənimsəyə bildi. Qiymətini bilmək lazımdır: öz çalarlarına qarşı onlar success-də 3.00:1, error-da 3.65:1 və info-da{' '} 1.74:1 verir — orada firuzəyi qlif firuzəyi səthin üstündə oturur. Yanındakı başlıq və təsvir isə --ctl-fg-də qalır (6.18 / 6.86 / 8.34), yəni mətn təsirlənmir — qlif rəngin onsuz da dediyini təkrarlayan bəzəkdir.{' '} /parity?tab=findings tabına bax. ), closeNote: ( <> Canvas-ın sağ yuvası bağlama düyməsidir və default açıqdır — ona görə bu tab da onu açıq çəkir. Kit-in Toaster closeButton-u isə bağlı başlayır və Qalereya tabı onu göstərir. Kit default-unu çevirmək artıq kit-i işlədən hər tətbiqdəki hər toast-a düymə əlavə edərdi, ona görə o, məcburiyyət deyil, seçim olaraq qalır. ), copyNote: ( <> Xananı kopyalayanda markup yox, toast.* çağırışını alırsan — ekrandakı səthi paketin yaymadığı daxili komponent çəkir, deməli yapışdırılası JSX yoxdur. Bu səhifədə kopyaladığının gördüyünlə hərfən eyni olmadığı yeganə yerdir və qaydanı yumşaltmaq üçün düzgün istiqamət budur. ), state: 'State', gridTitle: 'state', grid: 'state — canvas sırası, yuxarıdan aşağı', }, }, parity: { title: 'Figma uyğunluğu', tabs: { report: 'Hesabat', findings: 'Tapıntılar', }, findingsEnglishOnly: 'Bu səhifə ingiliscə saxlanılır: node id-ləri, hex dəyərləri və dəyişən yollarından ibarət audit qeydidir və Figma faylını açıq saxlayan adam üçün nəzərdə tutulub.', lead: ( <> CBAR-ın kanvasındakı hər komponent dəsti, kitin qurduğu oxlarla tutuşdurulur. Yerli bridge plugin-i ilə götürülüb — bütün sənəd üzrə figma_sets — və{' '} showcase/src/registry/figma-spec.json {' '} faylında saxlanılır. Dizayn faylı dəyişəndə pnpm figma:spec ilə yenidən götür. ), stateNote: ( <> Boşluq avtomatik olaraq səhv demək deyil. CBAR dəstlərin çoxunda state oxu çəkir, kit isə onları prop kimi yox, CSS-də render edir — həmin sətirlər işarələnib və saylara daxil edilmir. ), slotsNote: ( <> Diqqətlə oxunmalı sətir slots-dur. Bunlar variant oxu olmayan property-lərdir — iconLeft?, .iconEnd?, .label? — heç bir variant adı onları çəkmir. Button həm sol, həm sağ ikon açarını daşıyır, hər ikisi default açıqdır, ona görə dəst dörd ikon düzülüşü çəkir. Kit ikonları uşaq element kimi qəbul edir, ona görə müqayisə ediləsi bir şey yoxdur; bu sətir komponentin demo-sunun nə göstərməli olduğunun siyahısıdır. ✓ / ✗ CBAR-ın boolean üçün default-udur,{' '} ⇄ dəyişdirilə bilən instansiyanı, ✎ mətn slotunu bildirir. ), stats: { sets: 'Figma dəstləri', linked: 'Komponentə bağlanıb', gaps: 'Ox boşluğu olan', kitOnly: 'Yalnız kitdə olan', }, badge: { match: 'uyğun', diff: 'fərqlənir', state: 'state oxu', noProp: 'prop yoxdur', extra: 'yalnız kitdə', }, values: { both: 'hər ikisində', drawnInCss: 'CSS-də çəkilib', onlyFigma: 'yalnız Figma-da', onlyKit: 'yalnız kitdə', takenAsChildren: 'burada uşaq element kimi qəbul olunur', }, slots: 'slot-lar', linkedSets: 'Bağlanmış dəstlər', pageMeta: (page: string, variants: number) => `“${page}” səhifəsi · ${variants} variant`, setMeta: (page: string, variants: number) => `${page} · ${variants} variant`, unlinkedTitle: (count: number) => `Komponenti olmayan Figma dəstləri (${count})`, unlinkedNote: 'Ya doğrudan kitdə yoxdur, ya da Figma-da başqa komponentin bir parçası kimi çəkilib — Select içindəki axtarış sahəsi, Pagination zolağının bir səhifə xanası.', kitOnlyTitle: (count: number) => `Figma dəsti olmayan kit komponentləri (${count})`, kitOnlyNote: 'Əsasən məlumat yüklü vidcetlər və CBAR-ın heç vaxt çəkmədiyi üst qatlar. Onlar kitin öz qaydalarına tabedir, ona görə müqayisə ediləsi bir şey yoxdur — amma dizayn baxışının da tutmayacağı elə onlardır.', }, figma: { title: 'Figma', badge: { match: 'uyğun', diff: 'fərqlənir', state: 'CSS-də çəkilib', noProp: 'prop yoxdur', extra: 'yalnız kitdə', slot: 'slot', }, columns: { figmaProperty: 'Figma property', type: 'Tip', values: 'Dəyərlər', figmaDefault: 'Figma default', kitProp: 'Kit prop', status: 'Status', property: 'Property', figma: 'Figma', kit: 'Kit', }, valueKinds: { boolean: 'açıq / bağlı', text: 'sərbəst mətn', instance: 'dəyişdirilə bilən instansiya', }, children: 'uşaq elementlər', missingHere: (values: string) => `burada yoxdur: ${values}`, kitAdds: (values: string) => `kit əlavə edir: ${values}`, status: { live: (file: string) => `canlı · ${file}`, noPlugin: 'bridge işləyir · plugin pəncərəsi bağlıdır', notRunning: 'snapshot · bridge işləmir', snapshot: 'snapshot', }, onPage: (page: string) => `Figma “${page}” səhifəsindədir`, setMissing: (set: string) => ( <> Bu qeyd {set} komponent dəstinə işarə edir, amma o,{' '} figma-spec.json faylında yoxdur. Dizayn faylı dəyişəndən sonra pnpm figma:spec əmrini yenidən işlət. ), setSummary: (set: string, page: string, variants: number, props: number) => ( <> {set} komponent dəsti, “{page}” səhifəsi — {variants}{' '} variant, {props} property. Yerli bridge plugin-i ilə götürülüb; aşağıdakı canlı hissə üçün o işləməlidir. ), matchingVariant: (label: string) => ( <> Uyğun gələn variant{' '} {label} ), opening: 'Açılır…', openInFigma: 'Figma-da aç', unmatched: (values: string) => ( <> CBAR {values} çəkmir — kit komponent dəstində olmayan bir pillə təklif edir. Aşağıdakıların heç biri eyni şərtlərdə müqayisə olmazdı, ona görə buraxılıb. ), guessed: (values: string) => ( <> {values} üçün qərar verən prop yoxdur — Figma-nın öz default-u işlədilib. Qəsdən seçmək üçün bu qeydin figma bağlantısına pin və ya valueMap əlavə et. ), noVariant: 'Dəstdə bu dəyərlərlə variant yoxdur. CBAR bütün kombinasiyaları çəkmir — fərqlənən oxlar üçün yuxarıdakı property cədvəlinə bax.', svgTooBig: (kb: number) => `Bu variant ${kb} kB SVG kimi export olunur — inline etmək üçün çox böyükdür. Onun əvəzinə Figma-da aç.`, loading: 'Yüklənir…', computedStyle: 'Hesablanmış stil', computedStyleNote: ( <> Figma-nın getCSSAsync() nəticəsi soldakı elementin{' '} getComputedStyle nəticəsi ilə üz-üzə. Boş xana property-ni yalnız bir tərəfin bildirdiyini göstərir — Figma çərçivənin sıxdığı hər şeyi yazmır. ), }, groups: { Actions: 'Əməliyyatlar', 'Data display': 'Məlumatın göstərilməsi', Feedback: 'Geri bildiriş', Forms: 'Formalar', Navigation: 'Naviqasiya', Disclosure: 'Açılan bloklar', Overlays: 'Üst qatlar', Data: 'Məlumat', Layout: 'Tərtibat', }, };