@ahmetilhn/hanui 1.2.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +121 -12
- package/build/index.cjs +18 -14
- package/build/index.cjs.map +1 -1
- package/build/index.d.ts +1860 -162
- package/build/index.js +4054 -1976
- package/build/index.js.map +1 -1
- package/build/styles.css +1 -1
- package/package.json +18 -5
package/build/index.d.ts
CHANGED
|
@@ -7,10 +7,14 @@ import { ForwardRefExoticComponent } from 'react';
|
|
|
7
7
|
import { HTMLAttributes } from 'react';
|
|
8
8
|
import { InputHTMLAttributes } from 'react';
|
|
9
9
|
import { JSX } from 'react';
|
|
10
|
+
import { KeyboardEvent as KeyboardEvent_2 } from 'react';
|
|
10
11
|
import { MemoExoticComponent } from 'react';
|
|
12
|
+
import { NamedExoticComponent } from 'react';
|
|
13
|
+
import { ReactElement } from 'react';
|
|
11
14
|
import { ReactNode } from 'react';
|
|
12
15
|
import { ReactPortal } from 'react';
|
|
13
16
|
import { RefAttributes } from 'react';
|
|
17
|
+
import { RefObject } from 'react';
|
|
14
18
|
import { TableHTMLAttributes } from 'react';
|
|
15
19
|
import { TextareaHTMLAttributes } from 'react';
|
|
16
20
|
|
|
@@ -20,6 +24,51 @@ export declare const ABOVE_MOBILE_MEDIA_QUERY = "(min-width: 641px)";
|
|
|
20
24
|
/** Kenar çubuğu ekranda olduğu için filtre paneli bu ölçünün üstünde gizlenir. */
|
|
21
25
|
export declare const ABOVE_TABLET_MEDIA_QUERY = "(min-width: 1025px)";
|
|
22
26
|
|
|
27
|
+
export declare const Accordion: typeof Accordion_2;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Akordeon — katlanabilir bölümler.
|
|
31
|
+
*
|
|
32
|
+
* <h3>Yerel `<details>` / `<summary>` üzerine</h3>
|
|
33
|
+
* Açık/kapalı durumu, klavye desteği (`Enter` ve `Space`), ekran okuyucu
|
|
34
|
+
* duyurusu ("genişletildi/daraltıldı") ve <strong>sayfa içi bulma</strong>
|
|
35
|
+
* tarayıcıdan gelir. Sonuncusu taklit bir uygulamada imkânsız: Ctrl+F ile
|
|
36
|
+
* aranan bir metin kapalı bir `<details>`in içindeyse tarayıcı bölümü kendisi
|
|
37
|
+
* açıyor; `display: none` ile gizlenmiş bir `<div>`de o metin hiç yok.
|
|
38
|
+
*
|
|
39
|
+
* <p>Bedeli, tek-açık kipin elle kurulması: `<details name="…">` bunu yerel
|
|
40
|
+
* olarak veriyor ama Safari 17.2 öncesinde yok ve orada TÜM bölümler
|
|
41
|
+
* birbirinden bağımsız açılıyordu — sessiz bir davranış farkı. Karar burada
|
|
42
|
+
* veriliyor, tarayıcıya bırakılmıyor.
|
|
43
|
+
*
|
|
44
|
+
* <h3>Yükseklik geçişi</h3>
|
|
45
|
+
* `interpolate-size: allow-keywords` + `height` geçişi ile `auto`ya
|
|
46
|
+
* canlandırılıyor. Desteklemeyen tarayıcıda geçiş düşer ve bölüm ANINDA
|
|
47
|
+
* açılır — eski davranış. Sabit bir piksel yüksekliği vermek ya da
|
|
48
|
+
* `max-height` numarası kullanmak yanlış: ilki içeriği kırpıyor, ikincisi
|
|
49
|
+
* kısa bölümlerde gözle görülür bir gecikme bırakıyordu.
|
|
50
|
+
*
|
|
51
|
+
* <h3>Klavye (yerel)</h3>
|
|
52
|
+
* <table>
|
|
53
|
+
* <tr><td>`Enter` / `Space`</td><td>bölümü açar/kapatır</td></tr>
|
|
54
|
+
* <tr><td>`Tab`</td><td>başlıklar arasında gezinir</td></tr>
|
|
55
|
+
* </table>
|
|
56
|
+
* Ok tuşu YOKTUR ve olmamalı: akordeon bir liste değil, her başlık bağımsız
|
|
57
|
+
* bir düğme (WAI-ARIA APG accordion deseni ok tuşlarını isteğe bağlı bırakıyor
|
|
58
|
+
* ve yerel öğe onları getirmiyor).
|
|
59
|
+
*/
|
|
60
|
+
declare const Accordion_2: FC<Props_35>;
|
|
61
|
+
|
|
62
|
+
export declare type AccordionItem = {
|
|
63
|
+
id: string;
|
|
64
|
+
/** Başlık satırı — tıklanabilir olan bu. */
|
|
65
|
+
title: ReactNode;
|
|
66
|
+
/** Başlığın sağında duran ikincil bilgi (sayaç, rozet). */
|
|
67
|
+
meta?: ReactNode;
|
|
68
|
+
content: ReactNode;
|
|
69
|
+
isDisabled?: boolean;
|
|
70
|
+
};
|
|
71
|
+
|
|
23
72
|
export declare const Alert: typeof Alert_2;
|
|
24
73
|
|
|
25
74
|
/**
|
|
@@ -29,10 +78,13 @@ export declare const Alert: typeof Alert_2;
|
|
|
29
78
|
* anında duyurur. `info` ve `success` duyurulmaz — sayfa yüklenirken her bilgi
|
|
30
79
|
* kutusunun okunması gürültü olurdu.
|
|
31
80
|
*/
|
|
32
|
-
declare const Alert_2: FC<
|
|
81
|
+
declare const Alert_2: FC<Props_17>;
|
|
33
82
|
|
|
34
83
|
export declare type AlertTone = 'info' | 'success' | 'warning' | 'danger';
|
|
35
84
|
|
|
85
|
+
/** Duyurunun aciliyeti. */
|
|
86
|
+
export declare type AnnouncePoliteness = 'polite' | 'assertive';
|
|
87
|
+
|
|
36
88
|
export declare const Avatar: typeof Avatar_2;
|
|
37
89
|
|
|
38
90
|
/**
|
|
@@ -49,7 +101,7 @@ export declare const Avatar: typeof Avatar_2;
|
|
|
49
101
|
* okumak "A İ Ahmet İlhan" gibi bir gürültü üretiyordu. Adın yanında
|
|
50
102
|
* durmadığı bir yerde kullanılıyorsa çağıran taraf metni kendisi yazar.
|
|
51
103
|
*/
|
|
52
|
-
declare const Avatar_2: FC<
|
|
104
|
+
declare const Avatar_2: FC<Props_18>;
|
|
53
105
|
|
|
54
106
|
export declare const Badge: typeof Badge_2;
|
|
55
107
|
|
|
@@ -70,7 +122,7 @@ export declare const Badge: typeof Badge_2;
|
|
|
70
122
|
* `link`) anlamlı: onlar bir durumu değil bir sayıyı bildirir ve tıklanabilir
|
|
71
123
|
* bir öğenin parçasıdır.
|
|
72
124
|
*/
|
|
73
|
-
declare const Badge_2: FC<
|
|
125
|
+
declare const Badge_2: FC<Props_19>;
|
|
74
126
|
|
|
75
127
|
export declare type BadgeTone = 'neutral' | 'success' | 'danger' | 'warning' | 'info'
|
|
76
128
|
/** Birincil sınıflandırma tinti (mavi-lacivert aile). */
|
|
@@ -150,11 +202,21 @@ declare type BaseProps_4 = {
|
|
|
150
202
|
previousLabel?: string;
|
|
151
203
|
/** Verilmezse `labels.pagination.next`. */
|
|
152
204
|
nextLabel?: string;
|
|
205
|
+
/**
|
|
206
|
+
* Sayfa değiştiğinde ekran okuyucuya duyurulacak metin
|
|
207
|
+
* ("3. sayfa · 1.248 sonuç").
|
|
208
|
+
*
|
|
209
|
+
* <p>Verilmediğinde duyuru YAPILMAZ. Görsel tarafta sayfa numarası
|
|
210
|
+
* `aria-current` ile zaten işaretli ama o yalnızca ODAK oraya geldiğinde
|
|
211
|
+
* okunuyor: bağlantıya basıp listenin başına dönen kullanıcı, kaçıncı
|
|
212
|
+
* sayfada olduğunu ve kaç sonuç kaldığını hiç duymuyordu.
|
|
213
|
+
*/
|
|
214
|
+
formatAnnouncement?: (page: number, totalPages: number) => string;
|
|
153
215
|
className?: string;
|
|
154
216
|
testId?: string;
|
|
155
217
|
};
|
|
156
218
|
|
|
157
|
-
export declare const BottomSheet: MemoExoticComponent<({ title, closeLabel, onClose, children, toolbar, footer, closeAbove, className, testId, }:
|
|
219
|
+
export declare const BottomSheet: MemoExoticComponent<({ title, closeLabel, onClose, children, toolbar, footer, closeAbove, className, testId, }: Props_40) => ReactPortal | null>;
|
|
158
220
|
|
|
159
221
|
export declare const Breadcrumb: typeof Breadcrumb_2;
|
|
160
222
|
|
|
@@ -167,7 +229,7 @@ export declare const Breadcrumb: typeof Breadcrumb_2;
|
|
|
167
229
|
* <p>Ayırıcı ikon `aria-hidden`; ekran okuyucu liste yapısından hiyerarşiyi
|
|
168
230
|
* zaten anlar.
|
|
169
231
|
*/
|
|
170
|
-
declare const Breadcrumb_2: FC<
|
|
232
|
+
declare const Breadcrumb_2: FC<Props_20>;
|
|
171
233
|
|
|
172
234
|
/**
|
|
173
235
|
* Yapılandırmayı CSS metnine çevirir.
|
|
@@ -338,6 +400,42 @@ declare type CardSectionProps = {
|
|
|
338
400
|
className?: string;
|
|
339
401
|
};
|
|
340
402
|
|
|
403
|
+
export declare const Carousel: typeof Carousel_2;
|
|
404
|
+
|
|
405
|
+
/**
|
|
406
|
+
* Kaydırılabilir şerit (carousel).
|
|
407
|
+
*
|
|
408
|
+
* <h3>OTOMATİK OYNATMA YOK — ve olmayacak</h3>
|
|
409
|
+
* Kendiliğinden ilerleyen bir şerit WCAG 2.2.2'yi ihlal ediyor (beş saniyeden
|
|
410
|
+
* uzun süren hareket duraklatılabilmeli) ama asıl sorun daha basit: kullanıcı
|
|
411
|
+
* okumaya başladığı kartı kaybediyor. Bir prop olarak bile eklenmedi —
|
|
412
|
+
* eklenseydi kullanılırdı.
|
|
413
|
+
*
|
|
414
|
+
* <h3>Kaydırma YEREL, JavaScript değil</h3>
|
|
415
|
+
* Şerit `overflow-x: auto` + `scroll-snap`: dokunmatikte parmakla kaydırma,
|
|
416
|
+
* masaüstünde shift+tekerlek ve <strong>klavyeyle ok tuşları</strong>
|
|
417
|
+
* tarayıcıdan geliyor. JavaScript ile `transform` kaydıran bir uygulama
|
|
418
|
+
* bunların hiçbirini getirmiyor ve kaydırma çubuğunu da götürüyor — kullanıcı
|
|
419
|
+
* şeridin devam ettiğini göremiyordu.
|
|
420
|
+
*
|
|
421
|
+
* <p>Düğmeler `scrollBy` çağırıyor: yerel kaydırmayı DEĞİŞTİRMİYOR,
|
|
422
|
+
* tetikliyor. İkisi aynı durumu paylaşıyor ve ayrışmaları imkânsız.
|
|
423
|
+
*
|
|
424
|
+
* <h3>Şerit klavyeyle ULAŞILABİLİR</h3>
|
|
425
|
+
* Kaydırılabilir bir kutu, içinde odaklanabilir öğe yoksa `tabindex`
|
|
426
|
+
* verilmediğinde klavye kullanıcısı için ulaşılamaz (WCAG 2.1.1). Şerit
|
|
427
|
+
* genellikle bağlantı taşıyan kartlardan oluşuyor ve o durumda ek bir durak
|
|
428
|
+
* gereksiz — bu yüzden `tabindex` yalnızca <strong>odaklanabilir çocuk
|
|
429
|
+
* yoksa</strong> yazılıyor.
|
|
430
|
+
*
|
|
431
|
+
* <h3>Klavye</h3>
|
|
432
|
+
* <table>
|
|
433
|
+
* <tr><td>`Tab`</td><td>önceki/sonraki düğmelerine ve kartların içine</td></tr>
|
|
434
|
+
* <tr><td>ok tuşları</td><td>şeridi kaydırır (yerel)</td></tr>
|
|
435
|
+
* </table>
|
|
436
|
+
*/
|
|
437
|
+
declare const Carousel_2: FC<Props_21>;
|
|
438
|
+
|
|
341
439
|
export declare const Checkbox: typeof Checkbox_2;
|
|
342
440
|
|
|
343
441
|
/**
|
|
@@ -428,8 +526,18 @@ export declare const ChipGroup: typeof ChipGroup_2;
|
|
|
428
526
|
* Radyo grubunda Tab tuşu <strong>gruba</strong> girer, seçenekler arasında ok
|
|
429
527
|
* tuşlarıyla gezilir. Her çipin ayrı ayrı Tab durağı olması, 7 seçenekli bir
|
|
430
528
|
* filtrede klavye kullanıcısını 7 kez Tab'lamaya zorluyordu.
|
|
529
|
+
*
|
|
530
|
+
* <h3>Klavye</h3>
|
|
531
|
+
* <table>
|
|
532
|
+
* <tr><td>`ArrowRight` / `ArrowDown`</td><td>sonraki seçenek; uçlarda DÖNER</td></tr>
|
|
533
|
+
* <tr><td>`ArrowLeft` / `ArrowUp`</td><td>önceki seçenek</td></tr>
|
|
534
|
+
* </table>
|
|
535
|
+
* ÇOKLU seçimde ok tuşu YOKTUR: orada her çip bağımsız bir onay kutusu ve
|
|
536
|
+
* `Tab` ile gezilir — ok tuşuyla gezinmek seçimi de değiştirirdi, oysa
|
|
537
|
+
* radyo grubunun aksine burada gezinmek seçmek demek değil. Nöbetçi:
|
|
538
|
+
* `components/__tests__/keyboard.test.tsx`.
|
|
431
539
|
*/
|
|
432
|
-
declare const ChipGroup_2: <T extends string>({ options, label, size, isScrollable, className, ...selection }:
|
|
540
|
+
declare const ChipGroup_2: <T extends string>({ options, label, size, isScrollable, className, ...selection }: Props_6<T>) => JSX.Element;
|
|
433
541
|
|
|
434
542
|
export declare type ChipOption<T extends string = string> = {
|
|
435
543
|
value: T;
|
|
@@ -441,6 +549,22 @@ export declare type ChipOption<T extends string = string> = {
|
|
|
441
549
|
|
|
442
550
|
export declare type ChipSize = 'sm' | 'md';
|
|
443
551
|
|
|
552
|
+
declare type CircleProps = {
|
|
553
|
+
/** Tamamlanan miktar. `undefined` → BELİRSİZ; çember döner. */
|
|
554
|
+
value?: number;
|
|
555
|
+
max?: number;
|
|
556
|
+
/** Erişilebilir ad. ZORUNLU. */
|
|
557
|
+
label: string;
|
|
558
|
+
valueText?: string;
|
|
559
|
+
/** Yüzdeyi çemberin ortasına yazar. */
|
|
560
|
+
isValueVisible?: boolean;
|
|
561
|
+
tone?: 'brand' | 'success' | 'warning' | 'danger';
|
|
562
|
+
/** Dış çap (px). */
|
|
563
|
+
size?: number;
|
|
564
|
+
className?: string;
|
|
565
|
+
testId?: string;
|
|
566
|
+
};
|
|
567
|
+
|
|
444
568
|
export declare const Combobox: typeof Combobox_2;
|
|
445
569
|
|
|
446
570
|
/**
|
|
@@ -480,8 +604,19 @@ export declare const Combobox: typeof Combobox_2;
|
|
|
480
604
|
* `role="combobox"` + `aria-activedescendant`. Masaüstünde odak arama
|
|
481
605
|
* kutusundan ayrılmaz; ok tuşları yalnızca <em>etkin</em> seçeneği değiştirir.
|
|
482
606
|
* Odağı seçeneklere taşımak, yazmaya devam etmeyi imkânsız kılıyordu.
|
|
607
|
+
*
|
|
608
|
+
* <h3>Klavye (APG: combobox with listbox popup)</h3>
|
|
609
|
+
* <table>
|
|
610
|
+
* <tr><td>`ArrowDown` / `ArrowUp`</td><td>etkin seçenek bir alt/üst; uçlarda DÖNER</td></tr>
|
|
611
|
+
* <tr><td>`Home` / `End`</td><td>ilk / son seçenek</td></tr>
|
|
612
|
+
* <tr><td>`Enter`</td><td>etkin seçeneği seçer, paneli kapatır</td></tr>
|
|
613
|
+
* <tr><td>`Escape`</td><td>kapatır, odak tetikleyiciye döner</td></tr>
|
|
614
|
+
* <tr><td>`Tab`</td><td>kapatır, gezinme sürer</td></tr>
|
|
615
|
+
* <tr><td>yazmak</td><td>filtreler ve etkin seçeneği başa çeker</td></tr>
|
|
616
|
+
* </table>
|
|
617
|
+
* Nöbetçi: `components/__tests__/keyboard.test.tsx`.
|
|
483
618
|
*/
|
|
484
|
-
declare const Combobox_2: <T extends string>({ options, value, onChange, labels, isSearchHidden, onSearch, isLoading, isDisabled, isClearable, icon, id, className, testId, "aria-describedby": describedBy, "aria-invalid": isInvalid, }:
|
|
619
|
+
declare const Combobox_2: <T extends string>({ options, value, onChange, labels, isSearchHidden, onSearch, isLoading, isDisabled, isClearable, icon, id, className, testId, "aria-describedby": describedBy, "aria-invalid": isInvalid, }: Props_7<T>) => JSX.Element;
|
|
485
620
|
|
|
486
621
|
/**
|
|
487
622
|
* Bileşenin çizdiği metinler.
|
|
@@ -514,6 +649,55 @@ export declare type ComboboxOption<T extends string = string> = {
|
|
|
514
649
|
isDisabled?: boolean;
|
|
515
650
|
};
|
|
516
651
|
|
|
652
|
+
export declare type CommandItem = {
|
|
653
|
+
id: string;
|
|
654
|
+
label: string;
|
|
655
|
+
/** Ayırt edici ikincil satır — bir komutun nereye götürdüğü. */
|
|
656
|
+
description?: string;
|
|
657
|
+
/** Gruplama başlığı ("Gezinme", "Eylemler"). Aynı grup ardışık çizilir. */
|
|
658
|
+
group?: string;
|
|
659
|
+
icon?: ReactNode;
|
|
660
|
+
/** Kısayol ipucu ("⌘K"). Yalnızca GÖSTERİLİR; tuşu çağıran bağlar. */
|
|
661
|
+
shortcut?: string;
|
|
662
|
+
onSelect: () => void;
|
|
663
|
+
};
|
|
664
|
+
|
|
665
|
+
export declare const CommandPalette: typeof CommandPalette_2;
|
|
666
|
+
|
|
667
|
+
/**
|
|
668
|
+
* Komut paleti — klavyeyle her şeye ulaşma.
|
|
669
|
+
*
|
|
670
|
+
* <h3>Neden `Combobox` + `Modal` bileşimi DEĞİL de ayrı bir bileşen</h3>
|
|
671
|
+
* Denendi ve iki yerde kırıldı. `Combobox` bir DEĞER seçtiriyor: seçim
|
|
672
|
+
* tetikleyicide kalıcı olarak görünüyor, `value`/`onChange` sözleşmesi var ve
|
|
673
|
+
* kapanınca seçili öğe hatırlanıyor. Palet ise bir EYLEM çalıştırıyor —
|
|
674
|
+
* hatırlanacak bir değer yok. İkincisi, `Combobox`ın tetikleyicisi var;
|
|
675
|
+
* palette tetikleyici KLAVYE KISAYOLU ve o kısayolu bağlamak çağıranın işi
|
|
676
|
+
* (hangi tuş, hangi sayfada — kütüphane bilemez).
|
|
677
|
+
*
|
|
678
|
+
* <h3>Kısayolu KÜTÜPHANE bağlamaz</h3>
|
|
679
|
+
* `⌘K` yaygın ama evrensel değil ve belge düzeyinde bir tuş dinleyicisi
|
|
680
|
+
* kurmak, tüketicinin kendi kısayollarıyla sessizce çakışmak demek. `shortcut`
|
|
681
|
+
* alanı yalnızca GÖSTERİLİYOR; `isOpen` çağıranın.
|
|
682
|
+
*
|
|
683
|
+
* <h3>Arama `matchesSearch` ile — aksan duyarsız</h3>
|
|
684
|
+
* "siparis" yazan kullanıcı "Sipariş"i bulmalı. Aynı normalizasyon
|
|
685
|
+
* `Combobox`ın yerel filtresinde de kullanılıyor; iki yerde iki farklı arama
|
|
686
|
+
* kuralı, aynı terimin iki farklı sonuç vermesi demekti.
|
|
687
|
+
*
|
|
688
|
+
* <h3>Klavye</h3>
|
|
689
|
+
* <table>
|
|
690
|
+
* <tr><td>`ArrowDown` / `ArrowUp`</td><td>etkin komut; uçlarda DÖNER</td></tr>
|
|
691
|
+
* <tr><td>`Home` / `End`</td><td>ilk / son komut</td></tr>
|
|
692
|
+
* <tr><td>`Enter`</td><td>etkin komutu çalıştırır ve kapatır</td></tr>
|
|
693
|
+
* <tr><td>`Escape`</td><td>kapatır, odak AÇAN öğeye döner</td></tr>
|
|
694
|
+
* </table>
|
|
695
|
+
* Odak arama kutusundan AYRILMAZ; etkin komut `aria-activedescendant` ile
|
|
696
|
+
* bildiriliyor. Odağı listeye taşımak yazmaya devam etmeyi imkânsız
|
|
697
|
+
* kılıyordu.
|
|
698
|
+
*/
|
|
699
|
+
declare const CommandPalette_2: ({ isOpen, onClose, items, label, searchPlaceholder, emptyMessage, className, testId, }: Props_42) => JSX.Element;
|
|
700
|
+
|
|
517
701
|
/**
|
|
518
702
|
* Her bileşenin kabul ettiği ortak kanca noktaları.
|
|
519
703
|
*
|
|
@@ -528,6 +712,41 @@ export declare type CommonElementProps = Partial<{
|
|
|
528
712
|
testId: string;
|
|
529
713
|
}>;
|
|
530
714
|
|
|
715
|
+
/**
|
|
716
|
+
* YOĞUN (compact) KİP — `<html data-hanui-density="compact">`.
|
|
717
|
+
*
|
|
718
|
+
* <h3>Gerekçe ölçülü</h3>
|
|
719
|
+
* Aynı bileşenleri iki uygulama kullanıyor: vitrin bir ekranda 8 satır,
|
|
720
|
+
* operasyon paneli 80 satır gösteriyor. Vitrin için doğru olan ferahlık,
|
|
721
|
+
* panelde kullanıcıyı kaydırmaya mahkûm ediyor; panel için doğru olan
|
|
722
|
+
* sıkılık vitrinde ucuz duruyor. İkisini tek ölçekle karşılamanın yolu yok.
|
|
723
|
+
*
|
|
724
|
+
* <h3>Yalnızca boşluk ve punto iner — ÖLÇEĞİN TAMAMI DEĞİL</h3>
|
|
725
|
+
* `space-0` ve `space-1` sabit kalır: 4 px'in altına inen bir boşluk kademesi
|
|
726
|
+
* bir boşluk değil bir çizim hatası. Yarıçap da sabit kalır — yuvarlaklık
|
|
727
|
+
* yoğunluğun değil markanın işi.
|
|
728
|
+
*
|
|
729
|
+
* <h3>DOKUNMA HEDEFİ KÜÇÜLMEZ</h3>
|
|
730
|
+
* `tap-target` görünmez bir örtü çiziyor ve ölçüsü (44 px) buraya girmiyor:
|
|
731
|
+
* yoğun kip bilgi yoğunluğunu artırmak içindir, dokunulabilirliği düşürmek
|
|
732
|
+
* için değil (WCAG 2.5.8). Görsel kutu küçülür, hedef küçülmez.
|
|
733
|
+
*/
|
|
734
|
+
export declare const COMPACT_DENSITY: {
|
|
735
|
+
readonly 'space-2': "6px";
|
|
736
|
+
readonly 'space-3': "8px";
|
|
737
|
+
readonly 'space-4': "12px";
|
|
738
|
+
readonly 'space-5': "16px";
|
|
739
|
+
readonly 'space-6': "24px";
|
|
740
|
+
readonly 'space-7': "32px";
|
|
741
|
+
readonly 'font-size-2xs': "11px";
|
|
742
|
+
readonly 'font-size-xs': "12px";
|
|
743
|
+
readonly 'font-size-sm': "13px";
|
|
744
|
+
readonly 'font-size-base': "15px";
|
|
745
|
+
readonly 'font-size-body': "16px";
|
|
746
|
+
readonly 'leading-normal': "1.5";
|
|
747
|
+
readonly 'leading-relaxed': "1.6";
|
|
748
|
+
};
|
|
749
|
+
|
|
531
750
|
export declare const ConfirmDialog: typeof ConfirmDialog_2;
|
|
532
751
|
|
|
533
752
|
/**
|
|
@@ -569,7 +788,7 @@ export declare const ConfirmDialog: typeof ConfirmDialog_2;
|
|
|
569
788
|
* }}
|
|
570
789
|
* />
|
|
571
790
|
*/
|
|
572
|
-
declare const ConfirmDialog_2: FC<
|
|
791
|
+
declare const ConfirmDialog_2: FC<Props_43>;
|
|
573
792
|
|
|
574
793
|
export declare type ConfirmKind = 'destructive' | 'warning' | 'neutral';
|
|
575
794
|
|
|
@@ -601,7 +820,7 @@ export declare const CopyField: typeof CopyField_2;
|
|
|
601
820
|
* kendisi kopyalayabilir. Sessizce hiçbir şey yapmamak, düğmeyi bozuk
|
|
602
821
|
* gösteriyordu.
|
|
603
822
|
*/
|
|
604
|
-
declare const CopyField_2: FC<
|
|
823
|
+
declare const CopyField_2: FC<Props_22>;
|
|
605
824
|
|
|
606
825
|
export declare type Crumb = {
|
|
607
826
|
label: string;
|
|
@@ -634,8 +853,17 @@ export declare const DataTable: typeof DataTable_2;
|
|
|
634
853
|
* <h3>Durum öncelik sırası</h3>
|
|
635
854
|
* `error` > `isLoading` > boş > satırlar. Hata varken yükleme veya boş
|
|
636
855
|
* mesajı gösterilmez; yüklenirken bayat satır çizilmez.
|
|
856
|
+
*
|
|
857
|
+
* <h3>Görünmez başlık `aria-label` DEĞİL, gizlenmiş METİN</h3>
|
|
858
|
+
* Eylem sütununun adı önce `<th aria-label="Eylemler">` olarak yazılıyordu.
|
|
859
|
+
* Eksen taraması bunu ihlal olarak bildirdi (`empty-table-header`) ve haklı:
|
|
860
|
+
* `aria-label`ın hücre başlığı olarak kullanılması destek teknolojilerinde
|
|
861
|
+
* tutarsız — bazı ekran okuyucular tablo gezinme kipinde sütun adını
|
|
862
|
+
* hücrenin İÇERİĞİNDEN okur ve boş bir `<th>` orada adsız kalır. Görsel olarak
|
|
863
|
+
* gizlenmiş gerçek bir metin düğümü hem okunur hem de sayfa çevirisine,
|
|
864
|
+
* bulma-değiştirmeye ve seçime dahil olur.
|
|
637
865
|
*/
|
|
638
|
-
declare const DataTable_2: FC<
|
|
866
|
+
declare const DataTable_2: FC<Props_47>;
|
|
639
867
|
|
|
640
868
|
export declare type DataTableColumn = {
|
|
641
869
|
/** Sütun kimliği (React key). */
|
|
@@ -645,18 +873,89 @@ export declare type DataTableColumn = {
|
|
|
645
873
|
/**
|
|
646
874
|
* Görsel başlığı olmayan sütunun erişilebilir adı (eylem sütunu gibi).
|
|
647
875
|
* Boş bir `<th>` ekran okuyucuda adsız bir sütun bırakıyordu.
|
|
876
|
+
*
|
|
877
|
+
* <p>Metin `aria-label` OLARAK DEĞİL, görsel olarak gizlenmiş gerçek bir
|
|
878
|
+
* metin düğümü olarak yazılır — gerekçe {@link DataTable} JSDoc'unda.
|
|
648
879
|
*/
|
|
649
880
|
srLabel?: string;
|
|
650
881
|
/**
|
|
651
|
-
* Sıralanabilir sütunun yönü (`aria-sort`).
|
|
652
|
-
*
|
|
882
|
+
* Sıralanabilir sütunun yönü (`aria-sort`).
|
|
883
|
+
*
|
|
884
|
+
* <p>`onSort` ile birlikte verildiğinde başlık TIKLANABİLİR olur ve yön
|
|
885
|
+
* oku çizilir. Tek başına verildiğinde yalnızca durumu bildirir —
|
|
886
|
+
* sıralamayı başka bir denetim (bir `Select`) yapıyorsa doğrusu budur.
|
|
653
887
|
*/
|
|
654
888
|
ariaSort?: 'ascending' | 'descending';
|
|
889
|
+
/**
|
|
890
|
+
* Sütun sıralanabilir. `DataTable.onSort` ile birlikte anlamlı; ikisinden
|
|
891
|
+
* biri eksikse başlık düz metin kalır — tıklanabilir görünüp hiçbir şey
|
|
892
|
+
* yapmayan bir başlık, kullanıcıya var olmayan bir yetenek vaat ediyordu.
|
|
893
|
+
*/
|
|
894
|
+
isSortable?: boolean;
|
|
895
|
+
/**
|
|
896
|
+
* Sütun yatay kaydırmada YERİNDE kalır.
|
|
897
|
+
*
|
|
898
|
+
* <p>Yalnızca İLK sütunda anlamlı: geniş bir tabloda sağa kaydıran
|
|
899
|
+
* kullanıcı hangi satıra baktığını kaybediyordu. İkinci bir yapışkan sütun
|
|
900
|
+
* `left` ofsetinin elle hesaplanmasını gerektirir ve o hesap sütun
|
|
901
|
+
* genişliğine bağlı — desteklenmiyor.
|
|
902
|
+
*/
|
|
903
|
+
isSticky?: boolean;
|
|
655
904
|
className?: string;
|
|
656
905
|
};
|
|
657
906
|
|
|
658
907
|
export declare const DataTableRow: FC<RowProps>;
|
|
659
908
|
|
|
909
|
+
export declare const DateField: typeof DateField_2;
|
|
910
|
+
|
|
911
|
+
/**
|
|
912
|
+
* Tarih alanı — <strong>yerel</strong> `<input type="date">`.
|
|
913
|
+
*
|
|
914
|
+
* <h3>Neden taklit bir takvim YOK</h3>
|
|
915
|
+
* Bu kütüphanenin kuralı: yerel öğe korunur, taklit yazmanın tek gerekçesi
|
|
916
|
+
* ölçülmüş bir kusurdur ({@link Select} bunun tek istisnası ve gerekçesi
|
|
917
|
+
* orada yazılı). Tarih alanında böyle bir kusur YOK — tersine, yerel öğenin
|
|
918
|
+
* taklidin veremeyeceği dört şeyi var:
|
|
919
|
+
*
|
|
920
|
+
* <ul>
|
|
921
|
+
* <li><b>Mobilde işletim sisteminin seçicisi.</b> iOS'ta tekerlek, Android'de
|
|
922
|
+
* takvim — kullanıcının her gün kullandığı, alışkın olduğu arayüz. Hiçbir
|
|
923
|
+
* web takvimi 360 px'lik bir ekranda ona yaklaşamıyor.</li>
|
|
924
|
+
* <li><b>Klavyeyle YAZARAK giriş.</b> Doğum tarihini bilen biri "01.01.1980"i
|
|
925
|
+
* üç saniyede yazıyor; taklit takvimde aynı iş kırk yıl geriye tıklamak
|
|
926
|
+
* demek.</li>
|
|
927
|
+
* <li><b>Yerel biçim.</b> Tarayıcı kullanıcının işletim sistemi ayarına göre
|
|
928
|
+
* gg.aa.yyyy ya da mm/dd/yyyy gösteriyor; değer her zaman ISO
|
|
929
|
+
* (`YYYY-MM-DD`) kalıyor. İki biçimi elle yönetmek, kütüphanenin
|
|
930
|
+
* kullanıcının yerel ayarını TAHMİN etmesi demekti.</li>
|
|
931
|
+
* <li><b>Ekran okuyucu.</b> Alan üç ayrı bölüm (gün/ay/yıl) olarak okunuyor
|
|
932
|
+
* ve ok tuşlarıyla artırılıyor. APG'ye uygun bir takvim ızgarası bunu
|
|
933
|
+
* ancak taklit edebilir.</li>
|
|
934
|
+
* </ul>
|
|
935
|
+
*
|
|
936
|
+
* <p>Bedeli: takvim açılışının görünüşü tarayıcıya ait ve tema token'larını
|
|
937
|
+
* izlemiyor. Kabul edildi — açılan panelin rengi, yukarıdaki dördünün
|
|
938
|
+
* yanında küçük bir bedel.
|
|
939
|
+
*
|
|
940
|
+
* <h3>`min` / `max` KULLANIN</h3>
|
|
941
|
+
* İkisi de yerel öğede var ve tarayıcı doğrulamayı kendisi yapıyor. Geçersiz
|
|
942
|
+
* bir tarihi yalnızca gönderimde yakalamak, kullanıcıyı formu doldurduktan
|
|
943
|
+
* sonra geri gönderiyordu.
|
|
944
|
+
*/
|
|
945
|
+
declare const DateField_2: ForwardRefExoticComponent<Omit<InputHTMLAttributes<HTMLInputElement>, "type"> & {
|
|
946
|
+
/** `date` (varsayılan) · `datetime-local` · `month` · `time`. */
|
|
947
|
+
type?: "date" | "datetime-local" | "month" | "time";
|
|
948
|
+
testId?: string;
|
|
949
|
+
} & RefAttributes<HTMLInputElement>>;
|
|
950
|
+
|
|
951
|
+
export declare const DateRange: MemoExoticComponent<({ value, onChange, startLabel, endLabel, separator, min, max, isSummaryVisible, isDisabled, className, testId, }: RangeProps) => JSX.Element>;
|
|
952
|
+
|
|
953
|
+
export declare type DateRangeValue = {
|
|
954
|
+
/** ISO tarih (`YYYY-MM-DD`) ya da boş dize. */
|
|
955
|
+
start: string;
|
|
956
|
+
end: string;
|
|
957
|
+
};
|
|
958
|
+
|
|
660
959
|
/** Kütüphanenin varsayılan font yığınları — hepsi sistem fontlarına iner. */
|
|
661
960
|
export declare const DEFAULT_FONTS: Required<HanuiFonts>;
|
|
662
961
|
|
|
@@ -764,7 +1063,41 @@ export declare const Divider: typeof Divider_2;
|
|
|
764
1063
|
* <p>Etiketli hâli `role="separator"` taşımaz: metin içerdiğinde ekran okuyucu
|
|
765
1064
|
* onu ayırıcı değil içerik olarak okumalı ("veya").
|
|
766
1065
|
*/
|
|
767
|
-
declare const Divider_2: FC<
|
|
1066
|
+
declare const Divider_2: FC<Props_23>;
|
|
1067
|
+
|
|
1068
|
+
export declare const Drawer: typeof Drawer_2;
|
|
1069
|
+
|
|
1070
|
+
/**
|
|
1071
|
+
* Çekmece (drawer) — kenardan açılan kipsel panel.
|
|
1072
|
+
*
|
|
1073
|
+
* <h3>{@link BottomSheet} ile farkı: EKRAN, tercih değil</h3>
|
|
1074
|
+
* İkisi de kipsel bir yan panel; ayrım hangi ekranda doğru olduklarında:
|
|
1075
|
+
*
|
|
1076
|
+
* <ul>
|
|
1077
|
+
* <li>`BottomSheet` DAR ekran içindir. Baş parmağın erişebildiği yer
|
|
1078
|
+
* ekranın dibi; kenardan gelen bir panel telefonda ekranın tamamını
|
|
1079
|
+
* kaplıyor ve "panel" olmaktan çıkıyor.</li>
|
|
1080
|
+
* <li><b>`Drawer` GENİŞ ekran içindir.</b> Filtre paneli ve ayrıntı
|
|
1081
|
+
* incelemesi sayfanın yanında durur; kullanıcı listeyi görmeye devam
|
|
1082
|
+
* eder. Aynı panel dipten gelseydi 1440 px'lik bir ekranda içeriğin
|
|
1083
|
+
* tamamını örtüyordu.</li>
|
|
1084
|
+
* </ul>
|
|
1085
|
+
*
|
|
1086
|
+
* <h3>`isOpen` alır — ve bu {@link BottomSheet}ten bilinçli bir AYRILIK</h3>
|
|
1087
|
+
* `BottomSheet` "açıkken çizilir, kapatmak için kaldırılır" sözleşmesini
|
|
1088
|
+
* kullanıyor ve bunun bir bedeli var: React sökülen bir ağacı bekletmediği
|
|
1089
|
+
* için <strong>çıkış animasyonu çizilemiyor</strong>, panel bir karede yok
|
|
1090
|
+
* oluyor. Çekmece açık/kapalı durumu kendisi taşıyor; `<dialog>` kapanırken
|
|
1091
|
+
* `@starting-style` + `allow-discrete` ile geri kayıyor.
|
|
1092
|
+
*
|
|
1093
|
+
* <h3>Klavye</h3>
|
|
1094
|
+
* <table>
|
|
1095
|
+
* <tr><td>`Escape`</td><td>kapatır — üst üste açık panellerde YALNIZCA en üstteki</td></tr>
|
|
1096
|
+
* <tr><td>`Tab`</td><td>odak panelin içinde döner (tarayıcı: `showModal()`)</td></tr>
|
|
1097
|
+
* </table>
|
|
1098
|
+
* Açılışta odak kapatma düğmesine DEĞİL ilk anlamlı öğeye gider.
|
|
1099
|
+
*/
|
|
1100
|
+
declare const Drawer_2: ({ isOpen, onClose, title, closeLabel, children, side, size, footer, toolbar, className, testId, }: Props_44) => JSX.Element;
|
|
768
1101
|
|
|
769
1102
|
export declare const EmptyState: typeof EmptyState_2;
|
|
770
1103
|
|
|
@@ -776,11 +1109,17 @@ export declare const EmptyState: typeof EmptyState_2;
|
|
|
776
1109
|
* yapacağını bilmeli: aramayı temizle, filtreyi kaldır, listeye dön. `action`
|
|
777
1110
|
* isteğe bağlı ama çağıran taraf onu vermezse kullanıcı tıkanır.
|
|
778
1111
|
*
|
|
779
|
-
* <
|
|
780
|
-
*
|
|
781
|
-
*
|
|
1112
|
+
* <h3>BOŞ ile YÜKLENEMEDİ ayrı durumlardır</h3>
|
|
1113
|
+
* Ağ hatasını "kayıt kalmamış" diye okuyan kullanıcı yanlış karar veriyor.
|
|
1114
|
+
* İkisi `tone` ile ayrılıyor: `error` farklı bir ton taşıyor ve
|
|
1115
|
+
* `role="alert"` ile duyuruluyor, ama YERLEŞİM aynı — iki durum arasındaki
|
|
1116
|
+
* geçiş sıçramıyor.
|
|
1117
|
+
*
|
|
1118
|
+
* <p>Ayrım önce bu bileşenin DIŞINDAYDI ("ağ hatasında çizilmez") ve sonucu
|
|
1119
|
+
* şuydu: her çağıran kendi hata kutusunu yazıyor, kutular birbirinden farklı
|
|
1120
|
+
* görünüyordu. Ayrım korunuyor, kararın yeri değişti.
|
|
782
1121
|
*/
|
|
783
|
-
declare const EmptyState_2: FC<
|
|
1122
|
+
declare const EmptyState_2: FC<Props_24>;
|
|
784
1123
|
|
|
785
1124
|
export declare const Field: typeof Field_2;
|
|
786
1125
|
|
|
@@ -808,7 +1147,7 @@ export declare const Field: typeof Field_2;
|
|
|
808
1147
|
* // `{...props}` yaymayan bileşenlerde (Combobox, Select) yalnızca `id`:
|
|
809
1148
|
* <Field label="Şehir">{props => <Combobox id={props.id} … />}</Field>
|
|
810
1149
|
*/
|
|
811
|
-
declare const Field_2: FC<
|
|
1150
|
+
declare const Field_2: FC<Props_15>;
|
|
812
1151
|
|
|
813
1152
|
/** Girdiye yayılacak erişilebilirlik bağları. */
|
|
814
1153
|
export declare type FieldChildProps = {
|
|
@@ -828,6 +1167,39 @@ declare type FieldProps = {
|
|
|
828
1167
|
className?: string;
|
|
829
1168
|
};
|
|
830
1169
|
|
|
1170
|
+
export declare const FileUpload: typeof FileUpload_2;
|
|
1171
|
+
|
|
1172
|
+
/**
|
|
1173
|
+
* Dosya yükleme — sürükle-bırak <strong>ve</strong> düğme.
|
|
1174
|
+
*
|
|
1175
|
+
* <h3>Yerel `<input type="file">` KORUNUR</h3>
|
|
1176
|
+
* Görsel olarak gizlenir ama DOM'da kalır ve `<label>` ile alana bağlanır:
|
|
1177
|
+
* klavyeyle `Tab` + `Enter`, ekran okuyucuda "dosya seç, düğme" duyurusu,
|
|
1178
|
+
* işletim sisteminin dosya seçicisi ve mobilde kamera/galeri seçenekleri
|
|
1179
|
+
* <em>bedava</em> gelir. `<div>` üzerine `onDrop` yazıp düğmeyi taklit etmek
|
|
1180
|
+
* bunların hiçbirini getirmiyor — ve sürükle-bırak zaten <strong>tek başına
|
|
1181
|
+
* erişilebilir değil</strong>: fare gerektiriyor (WCAG 2.5.7).
|
|
1182
|
+
*
|
|
1183
|
+
* <h3>Doğrulama BİLEŞENDE, ama yalnızca ÖLÇÜLEBİLİR olan</h3>
|
|
1184
|
+
* Boyut sınırı burada uygulanıyor çünkü cevabı kesin ve anında verilebiliyor:
|
|
1185
|
+
* aşan dosya `onSelect`e hiç ulaşmıyor, kullanıcı yüklemenin bitmesini
|
|
1186
|
+
* beklemeden hatayı görüyor. Tür/içerik doğrulaması burada YAPILMIYOR —
|
|
1187
|
+
* `accept` bir öneri, gerçek karar sunucunun ve istemcide "geçerli" demek
|
|
1188
|
+
* yanlış bir söz olurdu.
|
|
1189
|
+
*
|
|
1190
|
+
* <h3>Sonuç DUYURULUYOR</h3>
|
|
1191
|
+
* Dosya eklendiğinde ve reddedildiğinde `useAnnounce` ile ekran okuyucuya
|
|
1192
|
+
* bildiriliyor. Listeye sessizce eklenen bir satır, görmeyen kullanıcı için
|
|
1193
|
+
* hiç olmamış demekti.
|
|
1194
|
+
*
|
|
1195
|
+
* <h3>Klavye</h3>
|
|
1196
|
+
* <table>
|
|
1197
|
+
* <tr><td>`Tab`</td><td>alana, sonra her dosyanın kaldırma düğmesine</td></tr>
|
|
1198
|
+
* <tr><td>`Enter` / `Space`</td><td>alanda: dosya seçiciyi açar</td></tr>
|
|
1199
|
+
* </table>
|
|
1200
|
+
*/
|
|
1201
|
+
declare const FileUpload_2: ({ files, onSelect, onRemove, label, hint, accept, isMultiple, maxSize, removeLabel, dropLabel, sizeErrorText, isDisabled, error, children, className, testId, }: Props_16) => JSX.Element;
|
|
1202
|
+
|
|
831
1203
|
export declare const FilterBar: typeof FilterBar_2;
|
|
832
1204
|
|
|
833
1205
|
/**
|
|
@@ -847,7 +1219,7 @@ export declare const FilterBar: typeof FilterBar_2;
|
|
|
847
1219
|
* daraltılabilir kalır: alan tercihen 220px'tir ama sığmadığı yerde küçülür,
|
|
848
1220
|
* taşmaz.
|
|
849
1221
|
*/
|
|
850
|
-
declare const FilterBar_2: FC<
|
|
1222
|
+
declare const FilterBar_2: FC<Props_48>;
|
|
851
1223
|
|
|
852
1224
|
/**
|
|
853
1225
|
* Şerit içindeki tek alanın genişlik sözleşmesi. İçine `Field` + girdi ya da
|
|
@@ -894,7 +1266,32 @@ export declare const FilterBarField: FC<FieldProps>;
|
|
|
894
1266
|
/** Sayı biçimlendiricileri: değere bağlı metinler dizeyle verilemez. */
|
|
895
1267
|
declare type Formatter<TArgs extends unknown[]> = (...args: TArgs) => string;
|
|
896
1268
|
|
|
897
|
-
/**
|
|
1269
|
+
/**
|
|
1270
|
+
* Kullanıcının SEÇİMİ. `system` = açık bir seçim yok, işletim sistemi tercihi
|
|
1271
|
+
* izlenir (`prefers-color-scheme`).
|
|
1272
|
+
*
|
|
1273
|
+
* <h3>Bu tip neden sonradan eklendi</h3>
|
|
1274
|
+
* `HanuiColorScheme`in JSDoc'u "`system` işletim sistemi tercihini izler"
|
|
1275
|
+
* diyordu ama tipte `system` YOKTU — belge bir yeteneği anlatıyor, tip onu
|
|
1276
|
+
* yasaklıyordu. İki çözüm vardı: cümleyi silmek ya da yeteneği gerçekten
|
|
1277
|
+
* eklemek. İkincisi seçildi çünkü eksik olan gerçek bir davranıştı: üç
|
|
1278
|
+
* durumlu tema anahtarı (Açık / Koyu / Sistem) yaygın bir kalıp ve kütüphane
|
|
1279
|
+
* onu kuramıyordu — `system`e dönmenin yolu özniteliği ELLE silmekti ve bunu
|
|
1280
|
+
* tüketicinin bilmesi gerekiyordu.
|
|
1281
|
+
*
|
|
1282
|
+
* <p>Ekleme KIRICI DEĞİL: `scheme` hâlâ çözülmüş değeri döndürüyor, yalnızca
|
|
1283
|
+
* `preference` alanı ve `setScheme('system')` girişi eklendi.
|
|
1284
|
+
*/
|
|
1285
|
+
export declare type HanuiColorPreference = HanuiColorScheme | 'system';
|
|
1286
|
+
|
|
1287
|
+
/**
|
|
1288
|
+
* ÇÖZÜLMÜŞ tema — ekranda gerçekten hangisi çizili.
|
|
1289
|
+
*
|
|
1290
|
+
* <p>Burada `system` YOKTUR ve olamaz: `system` bir tercih, bir tema değil.
|
|
1291
|
+
* Çözüldüğünde ya açık ya koyu olur ve bileşenlerin gördüğü şey o. İkisini tek
|
|
1292
|
+
* tipte toplamak, `scheme === 'system'` yazan bir tüketiciye hangi renklerin
|
|
1293
|
+
* çizildiğini hâlâ söylemiyordu.
|
|
1294
|
+
*/
|
|
898
1295
|
export declare type HanuiColorScheme = 'light' | 'dark';
|
|
899
1296
|
|
|
900
1297
|
export declare type HanuiContextValue = {
|
|
@@ -916,6 +1313,15 @@ export declare type HanuiContextValue = {
|
|
|
916
1313
|
labels?: HanuiLabels;
|
|
917
1314
|
};
|
|
918
1315
|
|
|
1316
|
+
/**
|
|
1317
|
+
* Bilgi yoğunluğu. `default` vitrin, `compact` operasyon paneli.
|
|
1318
|
+
*
|
|
1319
|
+
* <p>Seçim `<html data-hanui-density>` ile taşınır — tıpkı tema gibi, ve aynı
|
|
1320
|
+
* sebeple: bir ölçek kararı tek bir React ağacının değil BELGENİN kararıdır;
|
|
1321
|
+
* portal ile gövdeye taşınan kip pencere de aynı yoğunlukta olmalı.
|
|
1322
|
+
*/
|
|
1323
|
+
export declare type HanuiDensity = 'default' | 'compact';
|
|
1324
|
+
|
|
919
1325
|
/**
|
|
920
1326
|
* Yazı tipi ailesi sözleşmesi.
|
|
921
1327
|
*
|
|
@@ -1038,6 +1444,12 @@ export declare type HanuiLinkProps = AnchorHTMLAttributes<HTMLAnchorElement> & {
|
|
|
1038
1444
|
[key: string]: unknown;
|
|
1039
1445
|
};
|
|
1040
1446
|
|
|
1447
|
+
/** Ölçü ezmeleri. Kısmî verilebilir; verilmeyen her ölçü varsayılanında kalır. */
|
|
1448
|
+
export declare type HanuiMetrics = Partial<Record<HanuiMetricToken, string>>;
|
|
1449
|
+
|
|
1450
|
+
/** Ölçü token adları — `METRIC_TOKENS`ten türetilir. */
|
|
1451
|
+
export declare type HanuiMetricToken = keyof typeof METRIC_TOKENS;
|
|
1452
|
+
|
|
1041
1453
|
/**
|
|
1042
1454
|
* Kütüphane sağlayıcısı.
|
|
1043
1455
|
*
|
|
@@ -1086,6 +1498,18 @@ export declare type HanuiThemeConfig = Partial<{
|
|
|
1086
1498
|
light: HanuiThemeTokens;
|
|
1087
1499
|
dark: HanuiThemeTokens;
|
|
1088
1500
|
fonts: HanuiFonts;
|
|
1501
|
+
/**
|
|
1502
|
+
* Ölçü ezmeleri — yarıçap, boşluk, punto, süre.
|
|
1503
|
+
*
|
|
1504
|
+
* <p>Renk gibi tema başına DEĞİL tek blokta: bir markanın yuvarlaklığı açık
|
|
1505
|
+
* temada 12 px, koyu temada 8 px olmaz. Ayrı verilebilseydi iki değerin
|
|
1506
|
+
* ayrışması kaçınılmazdı ve fark yalnızca tema değiştirildiğinde
|
|
1507
|
+
* görünürdü — yani neredeyse hiç.
|
|
1508
|
+
*
|
|
1509
|
+
* @example
|
|
1510
|
+
* initHanui({ theme: { metrics: { 'radius-md': '2px', 'radius-lg': '4px' } } });
|
|
1511
|
+
*/
|
|
1512
|
+
metrics: HanuiMetrics;
|
|
1089
1513
|
}>;
|
|
1090
1514
|
|
|
1091
1515
|
/** Bir temanın token → değer eşlemesi. Kısmî verilebilir; eksikler varsayılandan gelir. */
|
|
@@ -1094,6 +1518,12 @@ export declare type HanuiThemeTokens = Partial<Record<HanuiToken, string>>;
|
|
|
1094
1518
|
/** Token adları — `LIGHT_THEME`den türetilir, elle listelenmez. */
|
|
1095
1519
|
export declare type HanuiToken = keyof typeof LIGHT_THEME;
|
|
1096
1520
|
|
|
1521
|
+
declare type HubProps = {
|
|
1522
|
+
/** Kapatma düğmelerinin erişilebilir adı. Verilmezse `labels.close`. */
|
|
1523
|
+
closeLabel?: string;
|
|
1524
|
+
className?: string;
|
|
1525
|
+
};
|
|
1526
|
+
|
|
1097
1527
|
export declare const IconButton: typeof IconButton_2;
|
|
1098
1528
|
|
|
1099
1529
|
/**
|
|
@@ -1165,13 +1595,22 @@ export declare type IconButtonVariant = 'ghost' | 'outline' | 'solid' | 'cart' |
|
|
|
1165
1595
|
export declare const initHanui: (options?: InitHanuiOptions) => void;
|
|
1166
1596
|
|
|
1167
1597
|
export declare type InitHanuiOptions = Partial<{
|
|
1168
|
-
/** Tema ezmeleri. Yalnızca değiştirilen token'lar verilir. */
|
|
1598
|
+
/** Tema ve ölçü ezmeleri. Yalnızca değiştirilen token'lar verilir. */
|
|
1169
1599
|
theme: HanuiThemeConfig;
|
|
1170
1600
|
/**
|
|
1171
1601
|
* Başlangıç şeması. Verilmezse `<html data-hanui-theme>` neyse o kalır;
|
|
1172
1602
|
* o da yoksa sistem tercihi (`prefers-color-scheme`) devreye girer.
|
|
1173
1603
|
*/
|
|
1174
1604
|
colorScheme: HanuiColorScheme;
|
|
1605
|
+
/**
|
|
1606
|
+
* Bilgi yoğunluğu. Verilmezse `<html data-hanui-density>` neyse o kalır;
|
|
1607
|
+
* o da yoksa `default`.
|
|
1608
|
+
*
|
|
1609
|
+
* <p>Uygulama başına SABİT bir karar olduğunda (operasyon paneli her zaman
|
|
1610
|
+
* `compact`) buradan verilir; kullanıcıya seçtiren bir uygulama özniteliği
|
|
1611
|
+
* kendisi yazar.
|
|
1612
|
+
*/
|
|
1613
|
+
density: HanuiDensity;
|
|
1175
1614
|
}>;
|
|
1176
1615
|
|
|
1177
1616
|
export declare const Input: typeof Input_2;
|
|
@@ -1213,7 +1652,7 @@ export declare const LIGHT_THEME: {
|
|
|
1213
1652
|
readonly 'border-strong': "#c9d0da";
|
|
1214
1653
|
readonly text: "#11151b";
|
|
1215
1654
|
readonly 'text-2': "#5a6472";
|
|
1216
|
-
readonly 'text-3': "#
|
|
1655
|
+
readonly 'text-3': "#626c7a";
|
|
1217
1656
|
readonly graphite: "#1f2937";
|
|
1218
1657
|
readonly 'graphite-2': "#2b3646";
|
|
1219
1658
|
readonly 'graphite-3': "#3a4658";
|
|
@@ -1255,8 +1694,8 @@ export declare const LIGHT_THEME: {
|
|
|
1255
1694
|
readonly 'sale-bg': "#e8f4eb";
|
|
1256
1695
|
readonly 'sale-fg': "#1d6e31";
|
|
1257
1696
|
readonly 'red-accent': "#dc2626";
|
|
1258
|
-
readonly 'green-accent': "#
|
|
1259
|
-
readonly 'green-accent-hover': "#
|
|
1697
|
+
readonly 'green-accent': "#299d46";
|
|
1698
|
+
readonly 'green-accent-hover': "#23883c";
|
|
1260
1699
|
readonly 'on-green': "#06280f";
|
|
1261
1700
|
readonly star: "#9a5f04";
|
|
1262
1701
|
readonly 'danger-solid': "#dc2626";
|
|
@@ -1266,7 +1705,7 @@ export declare const LIGHT_THEME: {
|
|
|
1266
1705
|
readonly 'nav-bg-2': "#eef0f4";
|
|
1267
1706
|
readonly 'nav-fg': "#11151b";
|
|
1268
1707
|
readonly 'nav-fg-2': "#5a6472";
|
|
1269
|
-
readonly 'nav-fg-3': "#
|
|
1708
|
+
readonly 'nav-fg-3': "#626c7a";
|
|
1270
1709
|
readonly 'nav-line': "#e2e6ec";
|
|
1271
1710
|
readonly 'nav-line-strong': "#c9d0da";
|
|
1272
1711
|
readonly 'nav-hover': "#eef0f4";
|
|
@@ -1313,6 +1752,31 @@ declare type LinkProps = BaseProps_4 & {
|
|
|
1313
1752
|
linkProps?: HanuiLinkExtraProps;
|
|
1314
1753
|
};
|
|
1315
1754
|
|
|
1755
|
+
export declare type ListboxNavigation<T extends HTMLElement = HTMLElement> = {
|
|
1756
|
+
activeIndex: number;
|
|
1757
|
+
setActiveIndex: (index: number) => void;
|
|
1758
|
+
/**
|
|
1759
|
+
* Etkin seçeneği görünür alanda tutmak için LİSTEYE bağlanır.
|
|
1760
|
+
*
|
|
1761
|
+
* <p>Tip parametresi çağıran taraf için: `Select` bu referansı `<ul>`e
|
|
1762
|
+
* veriyor ve panel açıldığında `focus()` çağırıyor. `HTMLElement`e sabitlense
|
|
1763
|
+
* çağıran ikinci bir referans tutmak ve ikisini elle eşlemek zorunda kalırdı.
|
|
1764
|
+
*/
|
|
1765
|
+
listRef: RefObject<T | null>;
|
|
1766
|
+
handleKeyDown: (event: KeyboardEvent_2<HTMLElement>) => void;
|
|
1767
|
+
};
|
|
1768
|
+
|
|
1769
|
+
export declare type ListboxNavigationOptions = {
|
|
1770
|
+
/** Seçenek sayısı. Liste süzüldüğünde değişir. */
|
|
1771
|
+
count: number;
|
|
1772
|
+
isOpen: boolean;
|
|
1773
|
+
/** Açılışta etkin olacak dizin — genellikle seçili olan. */
|
|
1774
|
+
initialIndex?: number;
|
|
1775
|
+
/** `Enter` / `Space` ile seçildiğinde. */
|
|
1776
|
+
onSelect: (index: number) => void;
|
|
1777
|
+
onClose: () => void;
|
|
1778
|
+
};
|
|
1779
|
+
|
|
1316
1780
|
/**
|
|
1317
1781
|
* Aranan metin, hedefin içinde geçiyor mu?
|
|
1318
1782
|
*
|
|
@@ -1322,6 +1786,134 @@ declare type LinkProps = BaseProps_4 & {
|
|
|
1322
1786
|
*/
|
|
1323
1787
|
export declare const matchesSearch: (haystack: string, needle: string) => boolean;
|
|
1324
1788
|
|
|
1789
|
+
export declare const Menu: typeof Menu_2;
|
|
1790
|
+
|
|
1791
|
+
/**
|
|
1792
|
+
* Menü — bir listeden EYLEM seçme.
|
|
1793
|
+
*
|
|
1794
|
+
* <h3>{@link Select} ile farkı: seçim mi eylem mi</h3>
|
|
1795
|
+
* Görsel olarak benzerler; ayrım seçilen şeyin ne olduğunda:
|
|
1796
|
+
*
|
|
1797
|
+
* <ul>
|
|
1798
|
+
* <li>`Select` bir DEĞER seçer. Seçim kalıcıdır, tetikleyicide görünür ve
|
|
1799
|
+
* geri alınabilir. ARIA rolü `listbox`.</li>
|
|
1800
|
+
* <li><b>`Menu` bir EYLEM çalıştırır.</b> "Sil", "Kopyala", "Dışa aktar".
|
|
1801
|
+
* Seçilen şey hatırlanmaz; menü kapanır ve iş yapılır. ARIA rolü
|
|
1802
|
+
* `menu`.</li>
|
|
1803
|
+
* </ul>
|
|
1804
|
+
*
|
|
1805
|
+
* <p>Ayrım ekran okuyucuda duyuluyor: `listbox` "3 seçenekten 2.'si seçili"
|
|
1806
|
+
* der, `menu` "menü, 3 öğe" der. Eylem listesini `listbox` olarak sunmak,
|
|
1807
|
+
* kullanıcıya kalıcı bir seçim yaptığını söylüyordu.
|
|
1808
|
+
*
|
|
1809
|
+
* <h3>Odak GERÇEKTEN taşınır</h3>
|
|
1810
|
+
* `Select` odağı tetikleyicide tutup etkin seçeneği `aria-activedescendant`
|
|
1811
|
+
* ile bildiriyor; menüde bu YANLIŞ olurdu. APG menü deseni gerçek odak
|
|
1812
|
+
* istiyor çünkü menü öğeleri düğme gibi davranıyor — ve harfe atlama
|
|
1813
|
+
* (type-ahead) yalnızca odaklanmış bir öğe üzerinde anlamlı.
|
|
1814
|
+
*
|
|
1815
|
+
* <h3>Klavye (APG: menu button)</h3>
|
|
1816
|
+
* <table>
|
|
1817
|
+
* <tr><td>`Enter` / `Space` / `ArrowDown`</td><td>tetikleyicide: açar, İLK öğeye odaklanır</td></tr>
|
|
1818
|
+
* <tr><td>`ArrowUp`</td><td>tetikleyicide: açar, SON öğeye odaklanır</td></tr>
|
|
1819
|
+
* <tr><td>`ArrowDown` / `ArrowUp`</td><td>öğeler arasında; uçlarda DÖNER</td></tr>
|
|
1820
|
+
* <tr><td>`Home` / `End`</td><td>ilk / son öğe</td></tr>
|
|
1821
|
+
* <tr><td>harf</td><td>o harfle başlayan ilk öğeye atlar</td></tr>
|
|
1822
|
+
* <tr><td>`Enter` / `Space`</td><td>öğeyi çalıştırır ve menüyü kapatır</td></tr>
|
|
1823
|
+
* <tr><td>`Escape` / `Tab`</td><td>kapatır, odak TETİKLEYİCİYE döner</td></tr>
|
|
1824
|
+
* </table>
|
|
1825
|
+
*/
|
|
1826
|
+
declare const Menu_2: ({ trigger, items, label, side, align, className, testId, }: Props_4) => JSX.Element | null;
|
|
1827
|
+
|
|
1828
|
+
export declare type MenuItem = {
|
|
1829
|
+
id: string;
|
|
1830
|
+
label: string;
|
|
1831
|
+
icon?: ReactNode;
|
|
1832
|
+
onSelect: () => void;
|
|
1833
|
+
isDisabled?: boolean;
|
|
1834
|
+
/** Geri alınamaz eylem: yıkıcı tonda çizilir. */
|
|
1835
|
+
isDanger?: boolean;
|
|
1836
|
+
};
|
|
1837
|
+
|
|
1838
|
+
/**
|
|
1839
|
+
* ÖLÇÜ TOKEN'LARI — temadan bağımsız, çalışma zamanında EZİLEBİLİR.
|
|
1840
|
+
*
|
|
1841
|
+
* <h3>Neden bunlar da CSS değişkeni</h3>
|
|
1842
|
+
* Bir zamanlar yalnızca renkler ve font aileleri çalışma zamanında
|
|
1843
|
+
* eziliyordu; yarıçap, boşluk, süre ve tipografi ölçeği `_variables.scss`
|
|
1844
|
+
* içinde SCSS sabitiydi. Sonucu şuydu: bir tüketici markasının RENGİNİ
|
|
1845
|
+
* verebiliyor ama YUVARLAKLIĞINI veremiyordu. Oysa bir markayı tanınır kılan
|
|
1846
|
+
* şeylerin listesinde yarıçap renkten sonra gelir — keskin köşeli bir
|
|
1847
|
+
* kurumsal panelle yumuşak köşeli bir vitrin aynı pakete aynı derecede
|
|
1848
|
+
* ihtiyaç duyuyor. Aynısı bilgi yoğunluğu (boşluk ölçeği) ve hareket süresi
|
|
1849
|
+
* için de geçerli.
|
|
1850
|
+
*
|
|
1851
|
+
* <h3>SCSS sabiti olarak KALANLAR ve nedenleri</h3>
|
|
1852
|
+
* <ul>
|
|
1853
|
+
* <li><b>Kırılma noktaları</b> — `@media (max-width: var(--x))` GEÇERSİZ
|
|
1854
|
+
* CSS. Medya sorgusu özel özellik okuyamaz; taşınsalardı bütün duyarlı
|
|
1855
|
+
* yerleşim sessizce çökerdi.</li>
|
|
1856
|
+
* <li><b>Katman (`z-*`)</b> — bir yığılma bağlamı sayısı, marka kararı
|
|
1857
|
+
* değil. Tüketicinin ezmesi gereken bir şey değil; ezerse kip pencere
|
|
1858
|
+
* perdenin altında kalır.</li>
|
|
1859
|
+
* <li><b>Ağırlık, harf aralığı, kapsayıcı genişlikleri, sayfa dolgusu</b> —
|
|
1860
|
+
* ölçek değil tekil değer; ezme ihtiyacı ölçülmedi. Gerektiğinde
|
|
1861
|
+
* buraya taşınabilir, ters yön (geri alma) kırıcıdır.</li>
|
|
1862
|
+
* </ul>
|
|
1863
|
+
*
|
|
1864
|
+
* <h3>Değerler DİZE, sayı değil</h3>
|
|
1865
|
+
* `'4px'` yazılıyor çünkü çıktı doğrudan bir CSS bildirimi. Sayı tutulup
|
|
1866
|
+
* birim sonradan eklenseydi, `radius-pill` (999px) ile `leading-normal`
|
|
1867
|
+
* (birimsiz 1.62) aynı listede duramazdı.
|
|
1868
|
+
*/
|
|
1869
|
+
export declare const METRIC_TOKENS: {
|
|
1870
|
+
readonly 'radius-xs': "4px";
|
|
1871
|
+
readonly 'radius-sm': "6px";
|
|
1872
|
+
readonly 'radius-md': "8px";
|
|
1873
|
+
readonly 'radius-lg': "12px";
|
|
1874
|
+
readonly 'radius-xl': "16px";
|
|
1875
|
+
readonly 'radius-pill': "999px";
|
|
1876
|
+
readonly 'space-0': "0";
|
|
1877
|
+
readonly 'space-1': "4px";
|
|
1878
|
+
readonly 'space-2': "8px";
|
|
1879
|
+
readonly 'space-3': "12px";
|
|
1880
|
+
readonly 'space-4': "16px";
|
|
1881
|
+
readonly 'space-5': "24px";
|
|
1882
|
+
readonly 'space-6': "32px";
|
|
1883
|
+
readonly 'space-7': "48px";
|
|
1884
|
+
readonly 'space-8': "64px";
|
|
1885
|
+
readonly 'space-9': "96px";
|
|
1886
|
+
readonly 'font-size-2xs': "12px";
|
|
1887
|
+
readonly 'font-size-xs': "13px";
|
|
1888
|
+
readonly 'font-size-sm': "15px";
|
|
1889
|
+
readonly 'font-size-base': "16px";
|
|
1890
|
+
readonly 'font-size-body': "17px";
|
|
1891
|
+
readonly 'font-size-lg': "19px";
|
|
1892
|
+
readonly 'font-size-xl': "23px";
|
|
1893
|
+
readonly 'font-size-2xl': "29px";
|
|
1894
|
+
readonly 'font-size-3xl': "37px";
|
|
1895
|
+
readonly 'font-size-4xl': "47px";
|
|
1896
|
+
readonly 'leading-none': "1";
|
|
1897
|
+
readonly 'leading-tight': "1.16";
|
|
1898
|
+
readonly 'leading-snug': "1.35";
|
|
1899
|
+
readonly 'leading-normal': "1.62";
|
|
1900
|
+
readonly 'leading-relaxed': "1.75";
|
|
1901
|
+
readonly 'icon-xs': "14px";
|
|
1902
|
+
readonly 'icon-sm': "16px";
|
|
1903
|
+
readonly 'icon-md': "18px";
|
|
1904
|
+
readonly 'icon-lg': "20px";
|
|
1905
|
+
readonly 'icon-xl': "24px";
|
|
1906
|
+
readonly 'duration-instant': "80ms";
|
|
1907
|
+
readonly 'duration-fast': "140ms";
|
|
1908
|
+
readonly 'duration-normal': "200ms";
|
|
1909
|
+
readonly 'duration-slow': "320ms";
|
|
1910
|
+
readonly 'ease-out': "cubic-bezier(0.22, 1, 0.36, 1)";
|
|
1911
|
+
readonly 'ease-in-out': "cubic-bezier(0.4, 0, 0.2, 1)";
|
|
1912
|
+
readonly 'ease-spring': "cubic-bezier(0.34, 1.4, 0.64, 1)";
|
|
1913
|
+
readonly 'duration-spin': "700ms";
|
|
1914
|
+
readonly 'duration-shimmer': "1400ms";
|
|
1915
|
+
};
|
|
1916
|
+
|
|
1325
1917
|
/**
|
|
1326
1918
|
* Kırılma noktaları — `styles/_variables.scss` içindeki `$breakpoint-*` ile
|
|
1327
1919
|
* <strong>aynı</strong> değerler.
|
|
@@ -1362,8 +1954,18 @@ export declare const Modal: typeof Modal_2;
|
|
|
1362
1954
|
* Dar ekranda ortalanmış bir pencere, klavye açıldığında yukarı sıkışıyor ve
|
|
1363
1955
|
* dip düğmeleri klavyenin altında kalıyordu. Alt sayfa baş parmağın
|
|
1364
1956
|
* erişebildiği yerde durur.
|
|
1957
|
+
*
|
|
1958
|
+
* <h3>Klavye</h3>
|
|
1959
|
+
* <table>
|
|
1960
|
+
* <tr><td>`Escape`</td><td>kapatır — `isDismissable={false}` iken KAPATMAZ</td></tr>
|
|
1961
|
+
* <tr><td>`Tab`</td><td>odak panelin içinde döner (tarayıcı: `showModal()`)</td></tr>
|
|
1962
|
+
* </table>
|
|
1963
|
+
* Odak tuzağı tarayıcıdan gelir; kütüphanenin işi `cancel` olayını React
|
|
1964
|
+
* durumuna bağlamak. Yakalanmadığında pencere kapanıyor ama `isOpen` `true`
|
|
1965
|
+
* kalıyor ve bir daha açılamıyordu. Nöbetçi:
|
|
1966
|
+
* `components/__tests__/keyboard.test.tsx`.
|
|
1365
1967
|
*/
|
|
1366
|
-
declare const Modal_2: ({ isOpen, onClose, title, closeLabel, children, description, footer, icon, tone, size, isDismissable, className, testId, }:
|
|
1968
|
+
declare const Modal_2: ({ isOpen, onClose, title, closeLabel, children, description, footer, icon, tone, size, isDismissable, className, testId, }: Props_41) => JSX.Element;
|
|
1367
1969
|
|
|
1368
1970
|
export declare type ModalTone = 'neutral' | 'danger' | 'warning' | 'success' | 'info';
|
|
1369
1971
|
|
|
@@ -1410,7 +2012,7 @@ export declare const PageHeader: typeof PageHeader_2;
|
|
|
1410
2012
|
* Düğmeler başlık bloğunun ALT kenarına hizalanır. `baseline` verildiğinde iki
|
|
1411
2013
|
* satırlık başlıklarda düğme ilk satıra çekiliyordu.
|
|
1412
2014
|
*/
|
|
1413
|
-
declare const PageHeader_2: FC<
|
|
2015
|
+
declare const PageHeader_2: FC<Props_25>;
|
|
1414
2016
|
|
|
1415
2017
|
export declare const Pagination: typeof Pagination_2;
|
|
1416
2018
|
|
|
@@ -1433,7 +2035,7 @@ export declare const Pagination: typeof Pagination_2;
|
|
|
1433
2035
|
* kalırlar — `<a>` etiketinin "devre dışı" hâli yok, `aria-disabled` ise
|
|
1434
2036
|
* tıklamayı engellemez. Sayfa numaraları tarayıcıya zaten tam listeyi veriyor.
|
|
1435
2037
|
*/
|
|
1436
|
-
declare const Pagination_2: FC<
|
|
2038
|
+
declare const Pagination_2: FC<Props_49>;
|
|
1437
2039
|
|
|
1438
2040
|
export declare const Panel: typeof Panel_2;
|
|
1439
2041
|
|
|
@@ -1458,7 +2060,7 @@ export declare const Panel: typeof Panel_2;
|
|
|
1458
2060
|
* <PanelForm>…alanlar…</PanelForm>
|
|
1459
2061
|
* </Panel>
|
|
1460
2062
|
*/
|
|
1461
|
-
declare const Panel_2: FC<
|
|
2063
|
+
declare const Panel_2: FC<Props_26>;
|
|
1462
2064
|
|
|
1463
2065
|
/**
|
|
1464
2066
|
* Panel içindeki form ızgarası.
|
|
@@ -1490,6 +2092,72 @@ declare type PanelRowProps = {
|
|
|
1490
2092
|
className?: string;
|
|
1491
2093
|
};
|
|
1492
2094
|
|
|
2095
|
+
export declare const Popover: typeof Popover_2;
|
|
2096
|
+
|
|
2097
|
+
/**
|
|
2098
|
+
* Popover — <strong>eylem taşıyabilen</strong>, odaklanabilir yüzey.
|
|
2099
|
+
*
|
|
2100
|
+
* <h3>{@link Tooltip} ile farkı: içine ne konabildiği</h3>
|
|
2101
|
+
* İkisi de tetikleyiciye yapışan bir yüzey açıyor; ayrım içeriğin
|
|
2102
|
+
* ERİŞİLEBİLİR olup olmamasında:
|
|
2103
|
+
*
|
|
2104
|
+
* <ul>
|
|
2105
|
+
* <li>`Tooltip` yalnızca AÇIKLAMA taşır. `pointer-events: none` ve klavyeyle
|
|
2106
|
+
* içine girilemez — içine bir bağlantı konsa ona ulaşmanın yolu olmazdı
|
|
2107
|
+
* (fare balona giderken tetikleyiciden çıkıyor).</li>
|
|
2108
|
+
* <li><b>`Popover` odak alır.</b> Açıldığında odak içeri girer, `Escape`
|
|
2109
|
+
* kapatır ve odak tetikleyiciye döner. Bağlantı, düğme, kısa bir form
|
|
2110
|
+
* konabilir.</li>
|
|
2111
|
+
* </ul>
|
|
2112
|
+
*
|
|
2113
|
+
* <h3>Kipsel DEĞİL</h3>
|
|
2114
|
+
* Arka plan tıklanabilir kalır ve sayfa kaydırılabilir. Kararı bekleyen,
|
|
2115
|
+
* kaçınılmaz bir seçim `Modal`ın işi; popover yardımcı bir yüzey ve
|
|
2116
|
+
* kullanıcıyı hapsetmemeli. Bu yüzden `<dialog>` DEĞİL portal + `usePositioning`:
|
|
2117
|
+
* `showModal()` arka planı inert bırakıyor, `<dialog open>` (kipsiz) ise üst
|
|
2118
|
+
* katmana hiç girmiyor ve `z-index` yarışına dönüyordu.
|
|
2119
|
+
*
|
|
2120
|
+
* <h3>Klavye</h3>
|
|
2121
|
+
* <table>
|
|
2122
|
+
* <tr><td>`Enter` / `Space`</td><td>tetikleyicide: açar</td></tr>
|
|
2123
|
+
* <tr><td>`Escape`</td><td>kapatır, odak TETİKLEYİCİYE döner</td></tr>
|
|
2124
|
+
* <tr><td>`Tab`</td><td>yüzeyin içinde gezinir; dışına çıkınca KAPANIR</td></tr>
|
|
2125
|
+
* </table>
|
|
2126
|
+
* Odak tuzağı YOK — kipsel olmayan bir yüzeyde odağı hapsetmek, kullanıcıyı
|
|
2127
|
+
* sayfadan koparır. Odak dışarı çıktığında yüzey kapanır.
|
|
2128
|
+
*/
|
|
2129
|
+
declare const Popover_2: ({ trigger, children, label, side, align, isOpen: controlledOpen, onOpenChange, className, testId, }: Props_5) => JSX.Element | null;
|
|
2130
|
+
|
|
2131
|
+
/** Tercih edilen kenar boyunca hizalama. */
|
|
2132
|
+
export declare type PositionAlign = 'start' | 'center' | 'end';
|
|
2133
|
+
|
|
2134
|
+
export declare type PositioningOptions = {
|
|
2135
|
+
side?: PositionSide;
|
|
2136
|
+
align?: PositionAlign;
|
|
2137
|
+
/** Tetikleyici ile yüzey arasındaki boşluk (px). */
|
|
2138
|
+
offset?: number;
|
|
2139
|
+
/** Görünüm alanının kenarından bırakılacak asgari pay (px). */
|
|
2140
|
+
padding?: number;
|
|
2141
|
+
/** Kapalıyken ölçüm yapılmaz ve dinleyici kurulmaz. */
|
|
2142
|
+
isOpen: boolean;
|
|
2143
|
+
};
|
|
2144
|
+
|
|
2145
|
+
export declare type PositioningState = {
|
|
2146
|
+
/** Yüzeye uygulanacak stil — `position: fixed` + hesaplanmış koordinat. */
|
|
2147
|
+
style: {
|
|
2148
|
+
position: 'fixed';
|
|
2149
|
+
top: number;
|
|
2150
|
+
left: number;
|
|
2151
|
+
};
|
|
2152
|
+
/** ÇÖZÜLMÜŞ kenar: çarpışma yüzünden tercih edilenin karşıtı olabilir. */
|
|
2153
|
+
side: PositionSide;
|
|
2154
|
+
/** İlk ölçüm yapıldı mı. Yapılmadan çizilen yüzey sol üst köşede parlıyor. */
|
|
2155
|
+
isPositioned: boolean;
|
|
2156
|
+
};
|
|
2157
|
+
|
|
2158
|
+
/** Yüzeyin tercih ettiği kenar. Yer yoksa karşıtına düşer. */
|
|
2159
|
+
export declare type PositionSide = 'top' | 'bottom' | 'left' | 'right';
|
|
2160
|
+
|
|
1493
2161
|
/**
|
|
1494
2162
|
* `showModal()` ÇAĞRILDIKTAN SONRA çağrılır. Odak bir metin alanına düştüyse
|
|
1495
2163
|
* panelin kendisine geri alınır; düşmediyse hiçbir şey yapılmaz.
|
|
@@ -1513,7 +2181,36 @@ export declare const Price: typeof Price_2;
|
|
|
1513
2181
|
* küçük bir yeşil rozet. Kırmızı fiyat ucuz durur ve kırmızıyı "olumsuz"
|
|
1514
2182
|
* anlamından koparır.
|
|
1515
2183
|
*/
|
|
1516
|
-
declare const Price_2: FC<
|
|
2184
|
+
declare const Price_2: FC<Props_27>;
|
|
2185
|
+
|
|
2186
|
+
export declare const Progress: typeof Progress_2;
|
|
2187
|
+
|
|
2188
|
+
/**
|
|
2189
|
+
* İlerleme çubuğu — <strong>ölçülebilir</strong> bekleme.
|
|
2190
|
+
*
|
|
2191
|
+
* <h3>{@link Spinner} ile farkı: sonu bilinip bilinmediği</h3>
|
|
2192
|
+
* `Spinner` "bir şey oluyor" der ve başka bir şey söyleyemez. Ölçülebilir bir
|
|
2193
|
+
* işte (dosya yükleme, içe aktarma, çok adımlı ödeme) bu yetmiyor: kullanıcı
|
|
2194
|
+
* beklemeye değip değmeyeceğine karar veremiyor ve iki saniyeyle iki dakika
|
|
2195
|
+
* arasındaki farkı ancak bekleyerek öğreniyordu.
|
|
2196
|
+
*
|
|
2197
|
+
* <p>`value` verilmediğinde çubuk BELİRSİZ kipe düşer: yine bir çubuk çizer
|
|
2198
|
+
* ama `aria-valuenow` yazmaz. Bu kasıtlı — bilinmeyen bir değeri "0" diye
|
|
2199
|
+
* bildirmek, ekran okuyucuya işin hiç ilerlemediğini söylüyordu.
|
|
2200
|
+
*
|
|
2201
|
+
* <h3>Yüzde tek başına yeterli DEĞİL</h3>
|
|
2202
|
+
* `valueText` verildiğinde ekran okuyucu onu okur ("5 dosyadan 3'ü"), yüzdeyi
|
|
2203
|
+
* değil. Aynı bilgi görsel tarafta `isValueVisible` ile yazılabiliyor; ikisi
|
|
2204
|
+
* de aynı gerçeği söylemek zorunda.
|
|
2205
|
+
*
|
|
2206
|
+
* <h3>Renk tek başına anlam taşımaz</h3>
|
|
2207
|
+
* `tone` yalnızca bir vurgu: "tamamlandı" ya da "başarısız" durumu çubuğun
|
|
2208
|
+
* rengiyle DEĞİL, yanındaki metinle ve çağıran tarafın çizdiği ikonla
|
|
2209
|
+
* anlatılır (WCAG 1.4.1).
|
|
2210
|
+
*/
|
|
2211
|
+
declare const Progress_2: ({ value, max, label, valueText, isValueVisible, tone, size, className, testId, }: Props_33) => JSX.Element;
|
|
2212
|
+
|
|
2213
|
+
export declare const ProgressCircle: MemoExoticComponent<({ value, max, label, valueText, isValueVisible, tone, size, className, testId, }: CircleProps) => JSX.Element>;
|
|
1517
2214
|
|
|
1518
2215
|
export declare const PromptDialog: typeof PromptDialog_2;
|
|
1519
2216
|
|
|
@@ -1536,7 +2233,7 @@ export declare const PromptDialog: typeof PromptDialog_2;
|
|
|
1536
2233
|
* (`Modal` dip şeridi formun dışında çizer). `multiline` kipinde Enter satır
|
|
1537
2234
|
* başı yapar, gönderme düğmeden.
|
|
1538
2235
|
*/
|
|
1539
|
-
declare const PromptDialog_2: FC<
|
|
2236
|
+
declare const PromptDialog_2: FC<Props_45>;
|
|
1540
2237
|
|
|
1541
2238
|
declare type Props = {
|
|
1542
2239
|
children: ReactNode;
|
|
@@ -1574,6 +2271,66 @@ declare type Props = {
|
|
|
1574
2271
|
};
|
|
1575
2272
|
|
|
1576
2273
|
declare type Props_10 = {
|
|
2274
|
+
/** Radyo grubu adı — aynı gruptaki kartlar ok tuşlarıyla gezilir. */
|
|
2275
|
+
name: string;
|
|
2276
|
+
value: string;
|
|
2277
|
+
isSelected: boolean;
|
|
2278
|
+
isDisabled?: boolean;
|
|
2279
|
+
onChange: (value: string) => void;
|
|
2280
|
+
/** Zengin gövde: kartın içeriği çağırana aittir. */
|
|
2281
|
+
children: ReactNode;
|
|
2282
|
+
} & CommonElementProps;
|
|
2283
|
+
|
|
2284
|
+
declare type Props_11 = {
|
|
2285
|
+
min: number;
|
|
2286
|
+
max: number;
|
|
2287
|
+
step?: number;
|
|
2288
|
+
value: RangeValue;
|
|
2289
|
+
/** Sürükleme sürerken her adımda çağrılır — ekrandaki değeri günceller. */
|
|
2290
|
+
onChange: (value: RangeValue) => void;
|
|
2291
|
+
/**
|
|
2292
|
+
* Sürükleme <em>bittiğinde</em> çağrılır. Adres çubuğuna yazmak veya
|
|
2293
|
+
* sunucuya istek atmak gibi pahalı işler buraya bağlanır.
|
|
2294
|
+
*/
|
|
2295
|
+
onCommit?: (value: RangeValue) => void;
|
|
2296
|
+
/** Ham sayıyı okunur metne çevirir ("125000" → "1.250 TL"). */
|
|
2297
|
+
formatValue?: (value: number) => string;
|
|
2298
|
+
/** Grubun erişilebilir adı ("Fiyat aralığı"). */
|
|
2299
|
+
label: string;
|
|
2300
|
+
/** Alt kulbun erişilebilir ad eki. Verilmezse `labels.range.min`. */
|
|
2301
|
+
minLabel?: string;
|
|
2302
|
+
/** Üst kulbun erişilebilir ad eki. Verilmezse `labels.range.max`. */
|
|
2303
|
+
maxLabel?: string;
|
|
2304
|
+
isDisabled?: boolean;
|
|
2305
|
+
className?: string;
|
|
2306
|
+
testId?: string;
|
|
2307
|
+
};
|
|
2308
|
+
|
|
2309
|
+
declare type Props_12 = {
|
|
2310
|
+
value: number | null;
|
|
2311
|
+
onChange: (value: number) => void;
|
|
2312
|
+
/** Grubun erişilebilir adı ("Ürün puanı"). */
|
|
2313
|
+
label: string;
|
|
2314
|
+
/**
|
|
2315
|
+
* Puan açıklamaları. Hem ekran okuyucuya okunur hem de seçildiğinde
|
|
2316
|
+
* yıldızların altında yazar. Verilmezse `labels.rating.scale`.
|
|
2317
|
+
*
|
|
2318
|
+
* <p>Dolu yıldız sayısı tek başına bir renk/şekil sinyali. Yanına açıklama
|
|
2319
|
+
* yazmak hem anlamı netleştirir hem de renk körü kullanıcıya ikinci bir ipucu
|
|
2320
|
+
* verir (WCAG 1.4.1).
|
|
2321
|
+
*/
|
|
2322
|
+
ratingLabels?: RatingLabels;
|
|
2323
|
+
/**
|
|
2324
|
+
* Ekran okuyucuda yıldız sayısını okuyan biçimlendirici ("4 yıldız").
|
|
2325
|
+
* Verilmezse `labels.rating.starCount`.
|
|
2326
|
+
*/
|
|
2327
|
+
formatStarCount?: (star: number) => string;
|
|
2328
|
+
isDisabled?: boolean;
|
|
2329
|
+
className?: string;
|
|
2330
|
+
testId?: string;
|
|
2331
|
+
};
|
|
2332
|
+
|
|
2333
|
+
declare type Props_13 = {
|
|
1577
2334
|
value: number;
|
|
1578
2335
|
onChange: (value: number) => void;
|
|
1579
2336
|
/** Grubun ve girdinin erişilebilir adı. Verilmezse `labels.quantity.label`. */
|
|
@@ -1590,7 +2347,27 @@ declare type Props_10 = {
|
|
|
1590
2347
|
testId?: string;
|
|
1591
2348
|
};
|
|
1592
2349
|
|
|
1593
|
-
declare type
|
|
2350
|
+
declare type Props_14 = {
|
|
2351
|
+
values: string[];
|
|
2352
|
+
onChange: (values: string[]) => void;
|
|
2353
|
+
/** Alanın erişilebilir adı. ZORUNLU. */
|
|
2354
|
+
label: string;
|
|
2355
|
+
placeholder?: string;
|
|
2356
|
+
/** Her etiketin kaldırma düğmesinin ad öneki ("Kaldır"). ZORUNLU. */
|
|
2357
|
+
removeLabel: string;
|
|
2358
|
+
/** Etiketi bitiren tuşlar. Varsayılan `Enter` ve virgül. */
|
|
2359
|
+
separators?: string[];
|
|
2360
|
+
/** En fazla kaç etiket. Dolduğunda girdi PASİF olur, gizlenmez. */
|
|
2361
|
+
maxTags?: number;
|
|
2362
|
+
isDisabled?: boolean;
|
|
2363
|
+
id?: string;
|
|
2364
|
+
'aria-describedby'?: string;
|
|
2365
|
+
'aria-invalid'?: boolean;
|
|
2366
|
+
className?: string;
|
|
2367
|
+
testId?: string;
|
|
2368
|
+
};
|
|
2369
|
+
|
|
2370
|
+
declare type Props_15 = BaseProps_2 & {
|
|
1594
2371
|
isRequired?: boolean;
|
|
1595
2372
|
/**
|
|
1596
2373
|
* Zorunluluk yıldızının ekran okuyucu karşılığı ("(zorunlu)").
|
|
@@ -1602,7 +2379,35 @@ declare type Props_11 = BaseProps_2 & {
|
|
|
1602
2379
|
requiredLabel?: string;
|
|
1603
2380
|
};
|
|
1604
2381
|
|
|
1605
|
-
declare type
|
|
2382
|
+
declare type Props_16 = {
|
|
2383
|
+
files: UploadFile[];
|
|
2384
|
+
/** Kullanıcı dosya seçtiğinde/bıraktığında çağrılır — DOĞRULANMIŞ liste. */
|
|
2385
|
+
onSelect: (files: File[]) => void;
|
|
2386
|
+
onRemove: (id: string) => void;
|
|
2387
|
+
/** Alanın görünür etiketi ve erişilebilir adı. ZORUNLU. */
|
|
2388
|
+
label: string;
|
|
2389
|
+
/** Etiketin altındaki kural cümlesi ("PDF veya JPG, en fazla 5 MB"). */
|
|
2390
|
+
hint?: string;
|
|
2391
|
+
/** `<input accept>` — tarayıcının dosya seçicisini süzer. */
|
|
2392
|
+
accept?: string;
|
|
2393
|
+
isMultiple?: boolean;
|
|
2394
|
+
/** Bayt. Aşan dosya `onSelect`e HİÇ ulaşmaz; hata metni burada üretilir. */
|
|
2395
|
+
maxSize?: number;
|
|
2396
|
+
/** Kaldırma düğmelerinin erişilebilir ad öneki ("Kaldır"). */
|
|
2397
|
+
removeLabel: string;
|
|
2398
|
+
/** Sürükle-bırak alanının içine yazılan çağrı ("Dosyaları buraya bırakın"). */
|
|
2399
|
+
dropLabel: string;
|
|
2400
|
+
/** Boyut aşıldığında yazılan hata; `{name}` ve `{max}` yerine konur. */
|
|
2401
|
+
sizeErrorText?: string;
|
|
2402
|
+
isDisabled?: boolean;
|
|
2403
|
+
/** Alanın tamamına ait hata (sunucu reddi). */
|
|
2404
|
+
error?: string;
|
|
2405
|
+
children?: ReactNode;
|
|
2406
|
+
className?: string;
|
|
2407
|
+
testId?: string;
|
|
2408
|
+
};
|
|
2409
|
+
|
|
2410
|
+
declare type Props_17 = {
|
|
1606
2411
|
children: ReactNode;
|
|
1607
2412
|
tone?: AlertTone;
|
|
1608
2413
|
title?: string;
|
|
@@ -1612,7 +2417,7 @@ declare type Props_12 = {
|
|
|
1612
2417
|
testId?: string;
|
|
1613
2418
|
};
|
|
1614
2419
|
|
|
1615
|
-
declare type
|
|
2420
|
+
declare type Props_18 = {
|
|
1616
2421
|
/** Tam ad; baş harfler buradan üretilir ve görsel yoksa `alt` metnidir. */
|
|
1617
2422
|
name: string;
|
|
1618
2423
|
/**
|
|
@@ -1633,7 +2438,7 @@ declare type Props_13 = {
|
|
|
1633
2438
|
testId?: string;
|
|
1634
2439
|
};
|
|
1635
2440
|
|
|
1636
|
-
declare type
|
|
2441
|
+
declare type Props_19 = {
|
|
1637
2442
|
children: ReactNode;
|
|
1638
2443
|
tone?: BadgeTone;
|
|
1639
2444
|
variant?: BadgeVariant;
|
|
@@ -1643,7 +2448,18 @@ declare type Props_14 = {
|
|
|
1643
2448
|
testId?: string;
|
|
1644
2449
|
};
|
|
1645
2450
|
|
|
1646
|
-
declare type
|
|
2451
|
+
declare type Props_2 = Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'href'> & {
|
|
2452
|
+
href: string;
|
|
2453
|
+
children: ReactNode;
|
|
2454
|
+
/** Sonda ok gösterilir — "devam et" anlamı taşıyan bağlantılarda. */
|
|
2455
|
+
hasArrow?: boolean;
|
|
2456
|
+
tone?: 'brand' | 'muted';
|
|
2457
|
+
size?: 'sm' | 'md';
|
|
2458
|
+
/** Yönlendiriciye geçirilecek ek props. */
|
|
2459
|
+
linkProps?: HanuiLinkExtraProps;
|
|
2460
|
+
};
|
|
2461
|
+
|
|
2462
|
+
declare type Props_20 = {
|
|
1647
2463
|
items: Crumb[];
|
|
1648
2464
|
/** Gezinme bölgesinin erişilebilir adı. Verilmezse `labels.breadcrumb`. */
|
|
1649
2465
|
label?: string;
|
|
@@ -1653,9 +2469,30 @@ declare type Props_15 = {
|
|
|
1653
2469
|
testId?: string;
|
|
1654
2470
|
};
|
|
1655
2471
|
|
|
1656
|
-
declare type
|
|
1657
|
-
|
|
1658
|
-
|
|
2472
|
+
declare type Props_21 = {
|
|
2473
|
+
children: ReactNode;
|
|
2474
|
+
/** Şeridin erişilebilir adı ("Öne çıkan ürünler"). ZORUNLU. */
|
|
2475
|
+
label: string;
|
|
2476
|
+
/** Önceki/sonraki düğmelerinin erişilebilir adları. ZORUNLU. */
|
|
2477
|
+
previousLabel: string;
|
|
2478
|
+
nextLabel: string;
|
|
2479
|
+
/**
|
|
2480
|
+
* Sayfa göstergesinin ad üreticisi (`index` 1 tabanlı).
|
|
2481
|
+
*
|
|
2482
|
+
* <p>Verilmediğinde nokta göstergesi ÇİZİLMEZ: adsız bir nokta ekran
|
|
2483
|
+
* okuyucuda "düğme" diye okunuyor ve kullanıcı nereye gittiğini
|
|
2484
|
+
* bilmiyordu.
|
|
2485
|
+
*/
|
|
2486
|
+
formatDotLabel?: (index: number, total: number) => string;
|
|
2487
|
+
/** Bir kartın asgari genişliği. Şerit buna göre kaç kart göstereceğine karar verir. */
|
|
2488
|
+
itemMinWidth?: number;
|
|
2489
|
+
className?: string;
|
|
2490
|
+
testId?: string;
|
|
2491
|
+
};
|
|
2492
|
+
|
|
2493
|
+
declare type Props_22 = {
|
|
2494
|
+
/** Gösterilecek ve panoya kopyalanacak değer. */
|
|
2495
|
+
value: string;
|
|
1659
2496
|
/**
|
|
1660
2497
|
* Kopyalama düğmesinin erişilebilir adı ve `title`ı.
|
|
1661
2498
|
*
|
|
@@ -1682,13 +2519,13 @@ declare type Props_16 = {
|
|
|
1682
2519
|
testId?: string;
|
|
1683
2520
|
};
|
|
1684
2521
|
|
|
1685
|
-
declare type
|
|
2522
|
+
declare type Props_23 = {
|
|
1686
2523
|
/** Ortada gösterilen metin ("veya"). */
|
|
1687
2524
|
label?: string;
|
|
1688
2525
|
className?: string;
|
|
1689
2526
|
};
|
|
1690
2527
|
|
|
1691
|
-
declare type
|
|
2528
|
+
declare type Props_24 = {
|
|
1692
2529
|
title: string;
|
|
1693
2530
|
description?: string;
|
|
1694
2531
|
icon?: ReactNode;
|
|
@@ -1696,12 +2533,27 @@ declare type Props_18 = {
|
|
|
1696
2533
|
action?: ReactNode;
|
|
1697
2534
|
/** İkincil eylem veya ipucu. */
|
|
1698
2535
|
secondaryAction?: ReactNode;
|
|
2536
|
+
/**
|
|
2537
|
+
* `error` — liste BOŞ değil, ÇEKİLEMEDİ.
|
|
2538
|
+
*
|
|
2539
|
+
* <p>İkisi ayrı durumlar ve ayrı görünmek zorundalar: ağ hatasını "kayıt
|
|
2540
|
+
* kalmamış" diye okuyan kullanıcı yanlış karar veriyor (ürün aramayı
|
|
2541
|
+
* bırakıyor, siparişinin silindiğini sanıyor). Varyant `role="alert"`
|
|
2542
|
+
* taşıyor ve tonu farklı — layout aynı kalıyor ki iki durum arasındaki
|
|
2543
|
+
* geçiş sıçramasın.
|
|
2544
|
+
*
|
|
2545
|
+
* <p>Ayrım ÖNCE bu bileşenin dışındaydı ("ağ hatasında bu bileşen
|
|
2546
|
+
* çizilmez") ve sonucu şuydu: her çağıran kendi hata kutusunu yazıyor,
|
|
2547
|
+
* kutular birbirinden farklı görünüyordu. Ayrım korunuyor — ama artık
|
|
2548
|
+
* BİLEŞENDE kodlu, çağıranın disiplinine bırakılmış değil.
|
|
2549
|
+
*/
|
|
2550
|
+
tone?: 'empty' | 'error';
|
|
1699
2551
|
size?: 'sm' | 'md';
|
|
1700
2552
|
className?: string;
|
|
1701
2553
|
testId?: string;
|
|
1702
2554
|
};
|
|
1703
2555
|
|
|
1704
|
-
declare type
|
|
2556
|
+
declare type Props_25 = {
|
|
1705
2557
|
title: string;
|
|
1706
2558
|
/** Başlığın üstündeki küçük bağlam etiketi ("HESABIM", "KATEGORİ"). */
|
|
1707
2559
|
eyebrow?: string;
|
|
@@ -1724,18 +2576,7 @@ declare type Props_19 = {
|
|
|
1724
2576
|
testId?: string;
|
|
1725
2577
|
};
|
|
1726
2578
|
|
|
1727
|
-
declare type
|
|
1728
|
-
href: string;
|
|
1729
|
-
children: ReactNode;
|
|
1730
|
-
/** Sonda ok gösterilir — "devam et" anlamı taşıyan bağlantılarda. */
|
|
1731
|
-
hasArrow?: boolean;
|
|
1732
|
-
tone?: 'brand' | 'muted';
|
|
1733
|
-
size?: 'sm' | 'md';
|
|
1734
|
-
/** Yönlendiriciye geçirilecek ek props. */
|
|
1735
|
-
linkProps?: HanuiLinkExtraProps;
|
|
1736
|
-
};
|
|
1737
|
-
|
|
1738
|
-
declare type Props_20 = {
|
|
2579
|
+
declare type Props_26 = {
|
|
1739
2580
|
children: ReactNode;
|
|
1740
2581
|
/** Panel başlığı. Verilmezse başlık şeridi hiç çizilmez. */
|
|
1741
2582
|
title?: string;
|
|
@@ -1757,11 +2598,25 @@ declare type Props_20 = {
|
|
|
1757
2598
|
testId?: string;
|
|
1758
2599
|
};
|
|
1759
2600
|
|
|
1760
|
-
declare type
|
|
2601
|
+
declare type Props_27 = {
|
|
1761
2602
|
/** BİÇİMLENMİŞ tutar: "1.299,90". Bileşen hesap yapmaz. */
|
|
1762
2603
|
value: string;
|
|
1763
2604
|
/** Para birimi simgesi ya da kodu. Verilmezse `labels.currency`. */
|
|
1764
2605
|
currency?: string;
|
|
2606
|
+
/**
|
|
2607
|
+
* Değeri `Intl.NumberFormat` ile biçimlendirir.
|
|
2608
|
+
*
|
|
2609
|
+
* <p>`value` bu kipte de bir DİZE olarak kalıyor ve sayıya çevriliyor —
|
|
2610
|
+
* bileşen hâlâ HESAP YAPMIYOR, yalnızca ayırıcıları ve para birimi
|
|
2611
|
+
* konumunu yerel ayardan alıyor. Yerel ayar `labels.locale`den; verilmezse
|
|
2612
|
+
* biçimlendirme YAPILMAZ ve değer olduğu gibi yazılır. Yanlış yerel ayarda
|
|
2613
|
+
* biçimlendirilmiş bir tutar, biçimlendirilmemiş olandan kötü: "1,250" bir
|
|
2614
|
+
* yerde bin iki yüz elli, başka bir yerde bir tam iki yüz elli.
|
|
2615
|
+
*
|
|
2616
|
+
* <p>Para birimi simgesinin ÖN/ARKA konumu da yerel ayara bağlı ve şu anda
|
|
2617
|
+
* her zaman arkada — `Intl` açıldığında doğru konumu o veriyor.
|
|
2618
|
+
*/
|
|
2619
|
+
isFormatted?: boolean;
|
|
1765
2620
|
/** Üstü çizili liste fiyatı; indirim varsa verilir (biçimlenmiş). */
|
|
1766
2621
|
listValue?: string;
|
|
1767
2622
|
/** İndirim oranı (tam sayı yüzde). */
|
|
@@ -1773,7 +2628,7 @@ declare type Props_21 = {
|
|
|
1773
2628
|
testId?: string;
|
|
1774
2629
|
};
|
|
1775
2630
|
|
|
1776
|
-
declare type
|
|
2631
|
+
declare type Props_28 = {
|
|
1777
2632
|
/** 0–5 arası puan. Yarım yıldız desteklenir. */
|
|
1778
2633
|
value: number;
|
|
1779
2634
|
/** Değerlendirme sayısı; verilirse yıldızların yanında gösterilir. */
|
|
@@ -1794,7 +2649,7 @@ declare type Props_22 = {
|
|
|
1794
2649
|
testId?: string;
|
|
1795
2650
|
};
|
|
1796
2651
|
|
|
1797
|
-
declare type
|
|
2652
|
+
declare type Props_29 = {
|
|
1798
2653
|
title: string;
|
|
1799
2654
|
description?: string;
|
|
1800
2655
|
/** Üstte gösterilen küçük büyük-harf etiket. */
|
|
@@ -1807,7 +2662,54 @@ declare type Props_23 = {
|
|
|
1807
2662
|
testId?: string;
|
|
1808
2663
|
};
|
|
1809
2664
|
|
|
1810
|
-
declare type
|
|
2665
|
+
declare type Props_3 = {
|
|
2666
|
+
/** Balonda gösterilecek açıklama. */
|
|
2667
|
+
content: ReactNode;
|
|
2668
|
+
/** Açıklamanın bağlandığı öğe — düğme, ikon, etiket. */
|
|
2669
|
+
children: ReactNode;
|
|
2670
|
+
/**
|
|
2671
|
+
* Tercih edilen kenar. Yer yoksa KARŞITINA düşer; üçüncü bir kenara
|
|
2672
|
+
* atlamaz (bkz. `usePositioning`).
|
|
2673
|
+
*/
|
|
2674
|
+
side?: PositionSide;
|
|
2675
|
+
/**
|
|
2676
|
+
* Açılma gecikmesi (ms). Fare bir araç çubuğunun üzerinden geçerken sıfır
|
|
2677
|
+
* gecikme, art arda beş balon açıp kapatıyordu.
|
|
2678
|
+
*/
|
|
2679
|
+
openDelay?: number;
|
|
2680
|
+
/**
|
|
2681
|
+
* @deprecated `side` kullanın. Bu prop bir sonraki büyük sürümde kalkacak.
|
|
2682
|
+
*
|
|
2683
|
+
* <p>Ad değişti çünkü davranış değişti: `position` SABİT bir kenar
|
|
2684
|
+
* yazıyordu ve balon oraya sığmadığında görünüm alanının dışına taşıyordu.
|
|
2685
|
+
* `side` yalnızca TERCİH — yer yoksa karşıt kenara düşülüyor. Aynı adı
|
|
2686
|
+
* korumak, artık doğru olmayan bir sözü sürdürmek olurdu.
|
|
2687
|
+
*/
|
|
2688
|
+
position?: 'top' | 'bottom';
|
|
2689
|
+
className?: string;
|
|
2690
|
+
};
|
|
2691
|
+
|
|
2692
|
+
declare type Props_30 = {
|
|
2693
|
+
children: ReactNode;
|
|
2694
|
+
/**
|
|
2695
|
+
* Kaydırılabilir bölgenin erişilebilir adı. ZORUNLU.
|
|
2696
|
+
*
|
|
2697
|
+
* <p>Bölge klavyeyle odaklanabilir olduğunda ekran okuyucu onu duyuruyor;
|
|
2698
|
+
* adsız bir bölge "bölge" diye okunuyor ve kullanıcı neyin içinde olduğunu
|
|
2699
|
+
* bilmiyordu.
|
|
2700
|
+
*/
|
|
2701
|
+
label: string;
|
|
2702
|
+
/** Kaydırma yönü. `both` iki eksende de kaydırır. */
|
|
2703
|
+
axis?: 'vertical' | 'horizontal' | 'both';
|
|
2704
|
+
/** En fazla yükseklik — dikey kaydırmada zorunlu, yoksa kutu uzar gider. */
|
|
2705
|
+
maxHeight?: number | string;
|
|
2706
|
+
/** Kenarlarda içeriğin devam ettiğini gösteren solma. */
|
|
2707
|
+
hasFade?: boolean;
|
|
2708
|
+
className?: string;
|
|
2709
|
+
testId?: string;
|
|
2710
|
+
};
|
|
2711
|
+
|
|
2712
|
+
declare type Props_31 = {
|
|
1811
2713
|
/** Genişlik: sayı px, dize doğrudan CSS değeri. */
|
|
1812
2714
|
width?: number | string;
|
|
1813
2715
|
height?: number | string;
|
|
@@ -1818,7 +2720,66 @@ declare type Props_24 = {
|
|
|
1818
2720
|
className?: string;
|
|
1819
2721
|
};
|
|
1820
2722
|
|
|
1821
|
-
declare type
|
|
2723
|
+
declare type Props_32 = {
|
|
2724
|
+
/** Ölçülen şeyin adı ("Bugünkü sipariş"). */
|
|
2725
|
+
label: string;
|
|
2726
|
+
/** Değerin KENDİSİ — biçimlendirilmiş dize. Bileşen hesap yapmaz. */
|
|
2727
|
+
value: ReactNode;
|
|
2728
|
+
/** Değerin yanındaki birim ("₺", "adet"). */
|
|
2729
|
+
unit?: string;
|
|
2730
|
+
/** Değişim metni ("%12", "+3"). `trend` ile birlikte anlamlı. */
|
|
2731
|
+
delta?: string;
|
|
2732
|
+
/**
|
|
2733
|
+
* Değişimin yönü.
|
|
2734
|
+
*
|
|
2735
|
+
* <p>Yön TEK BAŞINA iyi/kötü demek değildir: "iade oranı %12 arttı" kötü,
|
|
2736
|
+
* "ciro %12 arttı" iyi. Renk kararı {@link isUpPositive} ile ayrı veriliyor.
|
|
2737
|
+
*/
|
|
2738
|
+
trend?: StatTrend;
|
|
2739
|
+
/**
|
|
2740
|
+
* Artış İYİ mi. Varsayılan `true`.
|
|
2741
|
+
*
|
|
2742
|
+
* <p>`false` verildiğinde yukarı ok kırmızı, aşağı ok yeşil çizilir — iade
|
|
2743
|
+
* oranı, hata sayısı, terk edilen sepet gibi ölçüler için. Yönü her zaman
|
|
2744
|
+
* yeşil çizmek, kötüleşen bir ölçüyü iyi haber gibi gösteriyordu.
|
|
2745
|
+
*/
|
|
2746
|
+
isUpPositive?: boolean;
|
|
2747
|
+
/** Değerin altındaki bir cümlelik bağlam ("geçen haftaya göre"). */
|
|
2748
|
+
description?: ReactNode;
|
|
2749
|
+
/** Sol üstte duran ikon madalyonu. */
|
|
2750
|
+
icon?: ReactNode;
|
|
2751
|
+
size?: 'sm' | 'md';
|
|
2752
|
+
className?: string;
|
|
2753
|
+
testId?: string;
|
|
2754
|
+
};
|
|
2755
|
+
|
|
2756
|
+
declare type Props_33 = {
|
|
2757
|
+
/**
|
|
2758
|
+
* Tamamlanan miktar. `undefined` → BELİRSİZ ilerleme (sonu bilinmiyor);
|
|
2759
|
+
* çubuk kendi kendine akar.
|
|
2760
|
+
*/
|
|
2761
|
+
value?: number;
|
|
2762
|
+
/** Ölçeğin üst ucu. */
|
|
2763
|
+
max?: number;
|
|
2764
|
+
/** Çubuğun erişilebilir adı ("Yükleme", "Ödeme adımı"). ZORUNLU. */
|
|
2765
|
+
label: string;
|
|
2766
|
+
/**
|
|
2767
|
+
* Ekran okuyucuya okunan METİN karşılığı ("3 / 5 dosya").
|
|
2768
|
+
*
|
|
2769
|
+
* <p>Verilmezse ekran okuyucu ham yüzdeyi okur. Bir dosya yüklemesinde
|
|
2770
|
+
* "yüzde altmış" ile "5 dosyadan 3'ü" arasındaki fark, kullanıcının
|
|
2771
|
+
* bekleyip beklememeye karar verebilmesi.
|
|
2772
|
+
*/
|
|
2773
|
+
valueText?: string;
|
|
2774
|
+
/** Yüzdeyi çubuğun yanında GÖRÜNÜR olarak yazar. */
|
|
2775
|
+
isValueVisible?: boolean;
|
|
2776
|
+
tone?: 'brand' | 'success' | 'warning' | 'danger';
|
|
2777
|
+
size?: 'sm' | 'md';
|
|
2778
|
+
className?: string;
|
|
2779
|
+
testId?: string;
|
|
2780
|
+
};
|
|
2781
|
+
|
|
2782
|
+
declare type Props_34 = {
|
|
1822
2783
|
size?: 'sm' | 'md' | 'lg';
|
|
1823
2784
|
/**
|
|
1824
2785
|
* Ekran okuyucuya okunacak metin; görsel olarak gizli.
|
|
@@ -1832,7 +2793,44 @@ declare type Props_25 = {
|
|
|
1832
2793
|
className?: string;
|
|
1833
2794
|
};
|
|
1834
2795
|
|
|
1835
|
-
declare type
|
|
2796
|
+
declare type Props_35 = {
|
|
2797
|
+
items: AccordionItem[];
|
|
2798
|
+
/**
|
|
2799
|
+
* Aynı anda YALNIZCA BİR bölüm açık kalır.
|
|
2800
|
+
*
|
|
2801
|
+
* <p>Varsayılan çoklu: bir SSS listesinde iki soruyu yan yana okumak
|
|
2802
|
+
* yaygın bir ihtiyaç ve tek-açık kip, kullanıcının az önce açtığı bölümü
|
|
2803
|
+
* habersizce kapatıyordu. Tek-açık yalnızca bölümler UZUN olduğunda
|
|
2804
|
+
* (mobil filtre paneli) doğru.
|
|
2805
|
+
*/
|
|
2806
|
+
isSingle?: boolean;
|
|
2807
|
+
/** Kontrolsüz kullanımda açılışta açık olan bölümler. */
|
|
2808
|
+
defaultOpenIds?: string[];
|
|
2809
|
+
/** Kontrollü kullanım; `onChange` ile birlikte verilir. */
|
|
2810
|
+
openIds?: string[];
|
|
2811
|
+
onChange?: (openIds: string[]) => void;
|
|
2812
|
+
className?: string;
|
|
2813
|
+
testId?: string;
|
|
2814
|
+
};
|
|
2815
|
+
|
|
2816
|
+
declare type Props_36 = {
|
|
2817
|
+
steps: StepItem[];
|
|
2818
|
+
/** Bulunulan adımın DİZİNİ (0 tabanlı). Öncesi tamamlanmış sayılır. */
|
|
2819
|
+
currentIndex: number;
|
|
2820
|
+
/**
|
|
2821
|
+
* Bir adıma dönülebiliyorsa verilir. Verilmediğinde adımlar düğme DEĞİL
|
|
2822
|
+
* düz metin olur — tıklanabilir görünüp hiçbir şey yapmayan bir adım,
|
|
2823
|
+
* kullanıcıya var olmayan bir yol vaat ediyordu.
|
|
2824
|
+
*/
|
|
2825
|
+
onStepClick?: (index: number) => void;
|
|
2826
|
+
/** Akışın erişilebilir adı ("Ödeme adımları"). ZORUNLU. */
|
|
2827
|
+
label: string;
|
|
2828
|
+
orientation?: 'horizontal' | 'vertical';
|
|
2829
|
+
className?: string;
|
|
2830
|
+
testId?: string;
|
|
2831
|
+
};
|
|
2832
|
+
|
|
2833
|
+
declare type Props_37 = {
|
|
1836
2834
|
items: TabItem[];
|
|
1837
2835
|
/** Kontrolsüz kullanımda açılışta seçili sekme. */
|
|
1838
2836
|
defaultTabId?: string;
|
|
@@ -1847,11 +2845,21 @@ declare type Props_26 = {
|
|
|
1847
2845
|
onChange?: (id: string) => void;
|
|
1848
2846
|
/** Sekme çubuğunun erişilebilir adı. */
|
|
1849
2847
|
ariaLabel?: string;
|
|
2848
|
+
/**
|
|
2849
|
+
* Ok tuşu yalnızca ODAĞI taşır; seçim `Enter`/`Space` ile yapılır.
|
|
2850
|
+
*
|
|
2851
|
+
* <p>Varsayılan OTOMATİK etkinleştirme (ok tuşu odakla birlikte seçimi de
|
|
2852
|
+
* taşır) ve APG panel içeriği hazır olduğu sürece onu öneriyor. Ama panel
|
|
2853
|
+
* PAHALIYSA — her sekme bir istek atıyorsa — otomatik etkinleştirme,
|
|
2854
|
+
* kullanıcı beşinci sekmeye giderken dört istek atıyor. Manuel kipte
|
|
2855
|
+
* kullanıcı hedefine varıp `Enter`a basıyor: tek istek.
|
|
2856
|
+
*/
|
|
2857
|
+
isManualActivation?: boolean;
|
|
1850
2858
|
className?: string;
|
|
1851
2859
|
testId?: string;
|
|
1852
2860
|
};
|
|
1853
2861
|
|
|
1854
|
-
declare type
|
|
2862
|
+
declare type Props_38 = {
|
|
1855
2863
|
label: string;
|
|
1856
2864
|
/** İkon DIŞARIDAN gelir: hangi ikonun hangi konuya ait olduğu uygulamanın bilgisi. */
|
|
1857
2865
|
icon: ReactNode;
|
|
@@ -1865,7 +2873,27 @@ declare type Props_27 = {
|
|
|
1865
2873
|
testId?: string;
|
|
1866
2874
|
};
|
|
1867
2875
|
|
|
1868
|
-
declare type
|
|
2876
|
+
declare type Props_39 = {
|
|
2877
|
+
events: TimelineEvent[];
|
|
2878
|
+
/** Akışın erişilebilir adı ("Sipariş geçmişi"). ZORUNLU. */
|
|
2879
|
+
label: string;
|
|
2880
|
+
className?: string;
|
|
2881
|
+
testId?: string;
|
|
2882
|
+
};
|
|
2883
|
+
|
|
2884
|
+
declare type Props_4 = {
|
|
2885
|
+
/** Tetikleyici. TEK öğe; bileşen ona `ref` ve ARIA ekliyor. */
|
|
2886
|
+
trigger: ReactElement;
|
|
2887
|
+
items: MenuItem[];
|
|
2888
|
+
/** Menünün erişilebilir adı ("Satır eylemleri"). ZORUNLU. */
|
|
2889
|
+
label: string;
|
|
2890
|
+
side?: PositionSide;
|
|
2891
|
+
align?: PositionAlign;
|
|
2892
|
+
className?: string;
|
|
2893
|
+
testId?: string;
|
|
2894
|
+
};
|
|
2895
|
+
|
|
2896
|
+
declare type Props_40 = {
|
|
1869
2897
|
title: string;
|
|
1870
2898
|
/** Kapatma düğmesinin erişilebilir adı. Verilmezse `labels.close`. */
|
|
1871
2899
|
closeLabel?: string;
|
|
@@ -1891,7 +2919,7 @@ declare type Props_28 = {
|
|
|
1891
2919
|
testId?: string;
|
|
1892
2920
|
};
|
|
1893
2921
|
|
|
1894
|
-
declare type
|
|
2922
|
+
declare type Props_41 = {
|
|
1895
2923
|
isOpen: boolean;
|
|
1896
2924
|
onClose: () => void;
|
|
1897
2925
|
title: string;
|
|
@@ -1930,17 +2958,21 @@ declare type Props_29 = {
|
|
|
1930
2958
|
testId?: string;
|
|
1931
2959
|
};
|
|
1932
2960
|
|
|
1933
|
-
declare type
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
2961
|
+
declare type Props_42 = {
|
|
2962
|
+
isOpen: boolean;
|
|
2963
|
+
onClose: () => void;
|
|
2964
|
+
items: CommandItem[];
|
|
2965
|
+
/** Pencerenin erişilebilir adı ("Komut paleti"). ZORUNLU. */
|
|
2966
|
+
label: string;
|
|
2967
|
+
/** Arama kutusunun yer tutucusu ve erişilebilir adı. ZORUNLU. */
|
|
2968
|
+
searchPlaceholder: string;
|
|
2969
|
+
/** Sonuç yokken yazılan metin. ZORUNLU. */
|
|
2970
|
+
emptyMessage: string;
|
|
1940
2971
|
className?: string;
|
|
2972
|
+
testId?: string;
|
|
1941
2973
|
};
|
|
1942
2974
|
|
|
1943
|
-
declare type
|
|
2975
|
+
declare type Props_43 = {
|
|
1944
2976
|
isOpen: boolean;
|
|
1945
2977
|
onClose: () => void;
|
|
1946
2978
|
/**
|
|
@@ -1968,12 +3000,45 @@ declare type Props_30 = {
|
|
|
1968
3000
|
cancelLabel?: string;
|
|
1969
3001
|
/** Verilmezse `labels.close`. */
|
|
1970
3002
|
closeLabel?: string;
|
|
3003
|
+
/**
|
|
3004
|
+
* Onayın türü — ikon, ton ve onay düğmesinin varyantını birlikte belirler.
|
|
3005
|
+
*
|
|
3006
|
+
* <p>Ad `kind`ten `variant`a taşındı: aynı işi yapan üçüncü bir ad
|
|
3007
|
+
* kütüphanede zaten `variant` olarak duruyordu (`Button`, `Badge`) ve
|
|
3008
|
+
* tüketici her bileşende hangisinin geçerli olduğunu hatırlamak zorunda
|
|
3009
|
+
* kalıyordu. Nöbetçi: `src/__tests__/api-consistency.test.ts`.
|
|
3010
|
+
*/
|
|
3011
|
+
variant?: ConfirmKind;
|
|
3012
|
+
/** @deprecated `variant` kullanın. Bir sonraki büyük sürümde kalkacak. */
|
|
1971
3013
|
kind?: ConfirmKind;
|
|
1972
3014
|
/** Ek bağlam: silinecek kaydın özeti, uyarı kutusu. */
|
|
1973
3015
|
children?: ReactNode;
|
|
1974
3016
|
};
|
|
1975
3017
|
|
|
1976
|
-
declare type
|
|
3018
|
+
declare type Props_44 = {
|
|
3019
|
+
isOpen: boolean;
|
|
3020
|
+
onClose: () => void;
|
|
3021
|
+
title: string;
|
|
3022
|
+
/** Kapatma düğmesinin erişilebilir adı. Verilmezse `labels.close`. */
|
|
3023
|
+
closeLabel?: string;
|
|
3024
|
+
children: ReactNode;
|
|
3025
|
+
/**
|
|
3026
|
+
* Panelin hangi kenardan geldiği. Mantıksal: `end` RTL'de sola açılır.
|
|
3027
|
+
*
|
|
3028
|
+
* <p>Varsayılan `end` — filtre ve ayrıntı panelleri okuma yönünün SONUNDAN
|
|
3029
|
+
* gelir; `start` gezinme panelleri içindir.
|
|
3030
|
+
*/
|
|
3031
|
+
side?: 'start' | 'end';
|
|
3032
|
+
size?: 'sm' | 'md' | 'lg';
|
|
3033
|
+
/** Dipte duran eylem şeridi; gövde kaydırılırken yerinde kalır. */
|
|
3034
|
+
footer?: ReactNode;
|
|
3035
|
+
/** Başlığın altında duran, gövdeyle birlikte kaymayan şerit. */
|
|
3036
|
+
toolbar?: ReactNode;
|
|
3037
|
+
className?: string;
|
|
3038
|
+
testId?: string;
|
|
3039
|
+
};
|
|
3040
|
+
|
|
3041
|
+
declare type Props_45 = BaseProps_3 & {
|
|
1977
3042
|
/** Boş (yalnızca boşluk dahil) değer gönderilemez. */
|
|
1978
3043
|
isRequired?: boolean;
|
|
1979
3044
|
/**
|
|
@@ -1986,7 +3051,7 @@ declare type Props_31 = BaseProps_3 & {
|
|
|
1986
3051
|
requiredLabel?: string;
|
|
1987
3052
|
};
|
|
1988
3053
|
|
|
1989
|
-
declare type
|
|
3054
|
+
declare type Props_46 = TableHTMLAttributes<HTMLTableElement> & Partial<{
|
|
1990
3055
|
/**
|
|
1991
3056
|
* Hücre dolgusu. Tablolar aynı iskeleti paylaşır ama yoğunlukları içeriğe
|
|
1992
3057
|
* göre değişir: yüzlerce satırlık bir liste sıkı, karşılaştırma matrisi
|
|
@@ -2004,7 +3069,7 @@ declare type Props_32 = TableHTMLAttributes<HTMLTableElement> & Partial<{
|
|
|
2004
3069
|
hasRowHover: boolean;
|
|
2005
3070
|
}>;
|
|
2006
3071
|
|
|
2007
|
-
declare type
|
|
3072
|
+
declare type Props_47 = {
|
|
2008
3073
|
columns: DataTableColumn[];
|
|
2009
3074
|
/**
|
|
2010
3075
|
* Gövde satırları (`<tr>`). Ekranların özel hücreleri, bağlantıları ve satır
|
|
@@ -2031,11 +3096,28 @@ declare type Props_33 = {
|
|
|
2031
3096
|
* gidiyordu.
|
|
2032
3097
|
*/
|
|
2033
3098
|
hasViewportCap?: boolean;
|
|
3099
|
+
/**
|
|
3100
|
+
* Sıralanabilir bir başlığa basıldığında çağrılır.
|
|
3101
|
+
*
|
|
3102
|
+
* <p>Sıralamanın KENDİSİ burada yapılmaz: veri çağıranın ve sıralama
|
|
3103
|
+
* neredeyse her zaman sunucuda (sayfalanmış bir listede istemcide sıralamak
|
|
3104
|
+
* yalnızca görünen sayfayı sıralar — kullanıcı "en ucuz" dediğinde en ucuz
|
|
3105
|
+
* 24 ürünü değil, o sayfadaki en ucuzu görüyordu).
|
|
3106
|
+
*/
|
|
3107
|
+
onSort?: (key: string, direction: 'ascending' | 'descending') => void;
|
|
3108
|
+
/**
|
|
3109
|
+
* Satır seçildiğinde beliren TOPLU EYLEM şeridi.
|
|
3110
|
+
*
|
|
3111
|
+
* <p>Tablonun ÜSTÜNDE ve yapışkan: kullanıcı yüzlerce satır arasında
|
|
3112
|
+
* seçim yapıp aşağı kaydırdığında eylem şeridi ekranın dışında kalıyor ve
|
|
3113
|
+
* seçimin ne işe yaradığı görünmüyordu.
|
|
3114
|
+
*/
|
|
3115
|
+
bulkBar?: ReactNode;
|
|
2034
3116
|
className?: string;
|
|
2035
3117
|
testId?: string;
|
|
2036
3118
|
};
|
|
2037
3119
|
|
|
2038
|
-
declare type
|
|
3120
|
+
declare type Props_48 = {
|
|
2039
3121
|
/**
|
|
2040
3122
|
* Filtreler uygulanır. `preventDefault` bileşenin işi; çağıran yalnızca
|
|
2041
3123
|
* durumunu günceller (sayfayı 1'e almak + aramayı uygulamak gibi).
|
|
@@ -2051,11 +3133,29 @@ declare type Props_34 = {
|
|
|
2051
3133
|
testId?: string;
|
|
2052
3134
|
};
|
|
2053
3135
|
|
|
2054
|
-
declare type
|
|
3136
|
+
declare type Props_49 = LinkProps | ButtonProps;
|
|
3137
|
+
|
|
3138
|
+
declare type Props_5 = {
|
|
3139
|
+
/**
|
|
3140
|
+
* Tetikleyici. TEK bir öğe olmak zorunda: bileşen ona `ref`, `onClick` ve
|
|
3141
|
+
* `aria-expanded` ekliyor.
|
|
3142
|
+
*/
|
|
3143
|
+
trigger: ReactElement;
|
|
3144
|
+
children: ReactNode;
|
|
3145
|
+
/** Yüzeyin erişilebilir adı. ZORUNLU — adsız bir bölge "grup" diye okunur. */
|
|
3146
|
+
label: string;
|
|
3147
|
+
side?: PositionSide;
|
|
3148
|
+
align?: PositionAlign;
|
|
3149
|
+
/** Kontrollü kullanım. Verilmezse bileşen durumu kendisi tutar. */
|
|
3150
|
+
isOpen?: boolean;
|
|
3151
|
+
onOpenChange?: (isOpen: boolean) => void;
|
|
3152
|
+
className?: string;
|
|
3153
|
+
testId?: string;
|
|
3154
|
+
};
|
|
2055
3155
|
|
|
2056
|
-
declare type
|
|
3156
|
+
declare type Props_6<T extends string> = SingleProps<T> | MultipleProps<T>;
|
|
2057
3157
|
|
|
2058
|
-
declare type
|
|
3158
|
+
declare type Props_7<T extends string> = {
|
|
2059
3159
|
options: ComboboxOption<T>[];
|
|
2060
3160
|
value: T | null;
|
|
2061
3161
|
onChange: (value: T | null) => void;
|
|
@@ -2087,7 +3187,20 @@ declare type Props_5<T extends string> = {
|
|
|
2087
3187
|
testId?: string;
|
|
2088
3188
|
};
|
|
2089
3189
|
|
|
2090
|
-
declare type
|
|
3190
|
+
declare type Props_8<T extends string> = {
|
|
3191
|
+
options: SegmentOption<T>[];
|
|
3192
|
+
value: T;
|
|
3193
|
+
onChange: (value: T) => void;
|
|
3194
|
+
/** Grubun erişilebilir adı ("Görünüm"). ZORUNLU. */
|
|
3195
|
+
label: string;
|
|
3196
|
+
/** Etiketler gizlenir, yalnızca ikon çizilir. `label` yine okunur. */
|
|
3197
|
+
isIconOnly?: boolean;
|
|
3198
|
+
size?: 'sm' | 'md';
|
|
3199
|
+
className?: string;
|
|
3200
|
+
testId?: string;
|
|
3201
|
+
};
|
|
3202
|
+
|
|
3203
|
+
declare type Props_9<T extends string> = {
|
|
2091
3204
|
options: SelectOption<T>[];
|
|
2092
3205
|
value: T;
|
|
2093
3206
|
onChange: (value: T) => void;
|
|
@@ -2123,66 +3236,6 @@ declare type Props_6<T extends string> = {
|
|
|
2123
3236
|
testId?: string;
|
|
2124
3237
|
};
|
|
2125
3238
|
|
|
2126
|
-
declare type Props_7 = {
|
|
2127
|
-
/** Radyo grubu adı — aynı gruptaki kartlar ok tuşlarıyla gezilir. */
|
|
2128
|
-
name: string;
|
|
2129
|
-
value: string;
|
|
2130
|
-
isSelected: boolean;
|
|
2131
|
-
isDisabled?: boolean;
|
|
2132
|
-
onChange: (value: string) => void;
|
|
2133
|
-
/** Zengin gövde: kartın içeriği çağırana aittir. */
|
|
2134
|
-
children: ReactNode;
|
|
2135
|
-
} & CommonElementProps;
|
|
2136
|
-
|
|
2137
|
-
declare type Props_8 = {
|
|
2138
|
-
min: number;
|
|
2139
|
-
max: number;
|
|
2140
|
-
step?: number;
|
|
2141
|
-
value: RangeValue;
|
|
2142
|
-
/** Sürükleme sürerken her adımda çağrılır — ekrandaki değeri günceller. */
|
|
2143
|
-
onChange: (value: RangeValue) => void;
|
|
2144
|
-
/**
|
|
2145
|
-
* Sürükleme <em>bittiğinde</em> çağrılır. Adres çubuğuna yazmak veya
|
|
2146
|
-
* sunucuya istek atmak gibi pahalı işler buraya bağlanır.
|
|
2147
|
-
*/
|
|
2148
|
-
onCommit?: (value: RangeValue) => void;
|
|
2149
|
-
/** Ham sayıyı okunur metne çevirir ("125000" → "1.250 TL"). */
|
|
2150
|
-
formatValue?: (value: number) => string;
|
|
2151
|
-
/** Grubun erişilebilir adı ("Fiyat aralığı"). */
|
|
2152
|
-
label: string;
|
|
2153
|
-
/** Alt kulbun erişilebilir ad eki. Verilmezse `labels.range.min`. */
|
|
2154
|
-
minLabel?: string;
|
|
2155
|
-
/** Üst kulbun erişilebilir ad eki. Verilmezse `labels.range.max`. */
|
|
2156
|
-
maxLabel?: string;
|
|
2157
|
-
isDisabled?: boolean;
|
|
2158
|
-
className?: string;
|
|
2159
|
-
testId?: string;
|
|
2160
|
-
};
|
|
2161
|
-
|
|
2162
|
-
declare type Props_9 = {
|
|
2163
|
-
value: number | null;
|
|
2164
|
-
onChange: (value: number) => void;
|
|
2165
|
-
/** Grubun erişilebilir adı ("Ürün puanı"). */
|
|
2166
|
-
label: string;
|
|
2167
|
-
/**
|
|
2168
|
-
* Puan açıklamaları. Hem ekran okuyucuya okunur hem de seçildiğinde
|
|
2169
|
-
* yıldızların altında yazar. Verilmezse `labels.rating.scale`.
|
|
2170
|
-
*
|
|
2171
|
-
* <p>Dolu yıldız sayısı tek başına bir renk/şekil sinyali. Yanına açıklama
|
|
2172
|
-
* yazmak hem anlamı netleştirir hem de renk körü kullanıcıya ikinci bir ipucu
|
|
2173
|
-
* verir (WCAG 1.4.1).
|
|
2174
|
-
*/
|
|
2175
|
-
ratingLabels?: RatingLabels;
|
|
2176
|
-
/**
|
|
2177
|
-
* Ekran okuyucuda yıldız sayısını okuyan biçimlendirici ("4 yıldız").
|
|
2178
|
-
* Verilmezse `labels.rating.starCount`.
|
|
2179
|
-
*/
|
|
2180
|
-
formatStarCount?: (star: number) => string;
|
|
2181
|
-
isDisabled?: boolean;
|
|
2182
|
-
className?: string;
|
|
2183
|
-
testId?: string;
|
|
2184
|
-
};
|
|
2185
|
-
|
|
2186
3239
|
export declare const QuantityStepper: typeof QuantityStepper_2;
|
|
2187
3240
|
|
|
2188
3241
|
/**
|
|
@@ -2195,7 +3248,7 @@ export declare const QuantityStepper: typeof QuantityStepper_2;
|
|
|
2195
3248
|
* vuruşunda değil: "12" yazarken "1"i anında 1'e sabitlemek kullanıcının
|
|
2196
3249
|
* yazmasını engellerdi.
|
|
2197
3250
|
*/
|
|
2198
|
-
declare const QuantityStepper_2: FC<
|
|
3251
|
+
declare const QuantityStepper_2: FC<Props_13>;
|
|
2199
3252
|
|
|
2200
3253
|
export declare const Radio: typeof Radio_2;
|
|
2201
3254
|
|
|
@@ -2244,7 +3297,26 @@ export declare const RadioCard: typeof RadioCard_2;
|
|
|
2244
3297
|
*
|
|
2245
3298
|
* <p>{@link Radio} yalın satır içindir, gövde taşıyamaz — ikisi karışmaz.
|
|
2246
3299
|
*/
|
|
2247
|
-
declare const RadioCard_2: FC<
|
|
3300
|
+
declare const RadioCard_2: FC<Props_10>;
|
|
3301
|
+
|
|
3302
|
+
declare type RangeProps = {
|
|
3303
|
+
value: DateRangeValue;
|
|
3304
|
+
onChange: (value: DateRangeValue) => void;
|
|
3305
|
+
/** Başlangıç alanının erişilebilir adı ("Başlangıç"). ZORUNLU. */
|
|
3306
|
+
startLabel: string;
|
|
3307
|
+
/** Bitiş alanının erişilebilir adı ("Bitiş"). ZORUNLU. */
|
|
3308
|
+
endLabel: string;
|
|
3309
|
+
/** İki alanın arasındaki ayraç. Varsayılan yarım tire. */
|
|
3310
|
+
separator?: string;
|
|
3311
|
+
/** Ölçeğin uçları; ikisi de yerel öğeye geçer. */
|
|
3312
|
+
min?: string;
|
|
3313
|
+
max?: string;
|
|
3314
|
+
/** Seçilen aralığın okunur özetini gösterir. */
|
|
3315
|
+
isSummaryVisible?: boolean;
|
|
3316
|
+
isDisabled?: boolean;
|
|
3317
|
+
className?: string;
|
|
3318
|
+
testId?: string;
|
|
3319
|
+
};
|
|
2248
3320
|
|
|
2249
3321
|
export declare const RangeSlider: typeof RangeSlider_2;
|
|
2250
3322
|
|
|
@@ -2270,8 +3342,20 @@ export declare const RangeSlider: typeof RangeSlider_2;
|
|
|
2270
3342
|
* Kaydırırken her adımda adres çubuğuna yazmak, tek bir sürüklemede onlarca
|
|
2271
3343
|
* gezinme kaydı bırakıp geri tuşunu kullanılamaz hâle getiriyordu. Ekran anında
|
|
2272
3344
|
* güncellenir (`onChange`), sorgu yalnızca kulp bırakılınca yazılır.
|
|
3345
|
+
*
|
|
3346
|
+
* <h3>Klavye</h3>
|
|
3347
|
+
* <table>
|
|
3348
|
+
* <tr><td>`ArrowRight` / `ArrowUp`</td><td>bir adım artırır</td></tr>
|
|
3349
|
+
* <tr><td>`ArrowLeft` / `ArrowDown`</td><td>bir adım azaltır</td></tr>
|
|
3350
|
+
* <tr><td>`Home` / `End`</td><td>ölçeğin ucuna gider</td></tr>
|
|
3351
|
+
* <tr><td>`PageUp` / `PageDown`</td><td>büyük adım</td></tr>
|
|
3352
|
+
* </table>
|
|
3353
|
+
* Tamamı YEREL öğeden gelir — kütüphane hiçbir tuşu kendisi işlemez. Buraya
|
|
3354
|
+
* ait olan iki şey ayrıca ölçülüyor: kulpların birbirini geçmemesi ve
|
|
3355
|
+
* `onCommit`in tuş bırakıldığında (`keyup`) çalışması. Nöbetçi:
|
|
3356
|
+
* `components/__tests__/keyboard.test.tsx`.
|
|
2273
3357
|
*/
|
|
2274
|
-
declare const RangeSlider_2: ({ min, max, step, value, onChange, onCommit, formatValue, label, minLabel, maxLabel, isDisabled, className, testId, }:
|
|
3358
|
+
declare const RangeSlider_2: ({ min, max, step, value, onChange, onCommit, formatValue, label, minLabel, maxLabel, isDisabled, className, testId, }: Props_11) => JSX.Element;
|
|
2275
3359
|
|
|
2276
3360
|
export declare type RangeValue = [number, number];
|
|
2277
3361
|
|
|
@@ -2286,7 +3370,7 @@ export declare const Rating: typeof Rating_2;
|
|
|
2286
3370
|
*
|
|
2287
3371
|
* <p>Etkileşimli kardeşi {@link RatingInput}.
|
|
2288
3372
|
*/
|
|
2289
|
-
declare const Rating_2: FC<
|
|
3373
|
+
declare const Rating_2: FC<Props_28>;
|
|
2290
3374
|
|
|
2291
3375
|
export declare const RatingInput: typeof RatingInput_2;
|
|
2292
3376
|
|
|
@@ -2303,8 +3387,19 @@ export declare const RatingInput: typeof RatingInput_2;
|
|
|
2303
3387
|
* <p>{@link Rating} genişletilemez: o `<span>` üretiyor ve açıkça
|
|
2304
3388
|
* salt-gösterim. İkisini tek bileşende toplamak, gösterim tarafına hiç
|
|
2305
3389
|
* kullanılmayan etkileşim kodu taşımak olurdu.
|
|
3390
|
+
*
|
|
3391
|
+
* <h3>Klavye (APG: radio group — tamamı YEREL)</h3>
|
|
3392
|
+
* <table>
|
|
3393
|
+
* <tr><td>`ArrowRight` / `ArrowDown`</td><td>bir sonraki yıldız</td></tr>
|
|
3394
|
+
* <tr><td>`ArrowLeft` / `ArrowUp`</td><td>bir önceki yıldız</td></tr>
|
|
3395
|
+
* <tr><td>`Tab`</td><td>grubu TEK durak olarak geçer</td></tr>
|
|
3396
|
+
* </table>
|
|
3397
|
+
* Kütüphane hiçbir tuşu işlemiyor; nöbetçi bu yüzden tuşları değil DEVRİ
|
|
3398
|
+
* ölçüyor — beş gerçek radyo, tek grup adı, okunabilir adlar
|
|
3399
|
+
* (`components/__tests__/keyboard.test.tsx`). Yıldızlar `<span>`e dönerse
|
|
3400
|
+
* test kırılır.
|
|
2306
3401
|
*/
|
|
2307
|
-
declare const RatingInput_2: ({ value, onChange, label, ratingLabels, formatStarCount, isDisabled, className, testId, }:
|
|
3402
|
+
declare const RatingInput_2: ({ value, onChange, label, ratingLabels, formatStarCount, isDisabled, className, testId, }: Props_12) => JSX.Element;
|
|
2308
3403
|
|
|
2309
3404
|
/** Beş puanın her birinin ne anlama geldiği. */
|
|
2310
3405
|
export declare type RatingLabels = Record<1 | 2 | 3 | 4 | 5, string>;
|
|
@@ -2326,6 +3421,37 @@ declare type RowProps = HTMLAttributes<HTMLTableRowElement> & {
|
|
|
2326
3421
|
isWarning?: boolean;
|
|
2327
3422
|
};
|
|
2328
3423
|
|
|
3424
|
+
export declare const ScrollArea: typeof ScrollArea_2;
|
|
3425
|
+
|
|
3426
|
+
/**
|
|
3427
|
+
* Kaydırma kutusu — <strong>klavyeyle erişilebilir</strong> kaydırma bölgesi.
|
|
3428
|
+
*
|
|
3429
|
+
* <h3>Neden bir bileşen: `overflow: auto` TEK BAŞINA yetmiyor</h3>
|
|
3430
|
+
* Kaydırılabilir bir bölge klavyeyle ulaşılabilir olmak zorunda (WCAG 2.1.1).
|
|
3431
|
+
* İçinde odaklanabilir öğe olmayan bir kutu — uzun bir metin, bir tablo, bir
|
|
3432
|
+
* kod bloğu — `tabindex` verilmediğinde klavye kullanıcısı için
|
|
3433
|
+
* <strong>ulaşılamaz</strong>: `Tab` onu atlıyor ve ok tuşları sayfayı
|
|
3434
|
+
* kaydırıyor, kutuyu değil. Firefox bunu kendiliğinden yapıyor, Chrome ve
|
|
3435
|
+
* Safari yapmıyor.
|
|
3436
|
+
*
|
|
3437
|
+
* <p>Ama `tabindex="0"` KOŞULSUZ verilemez: içerik sığdığında kutu
|
|
3438
|
+
* kaydırılamaz olur ve gereksiz bir `Tab` durağına dönüşür. Bileşen taşmayı
|
|
3439
|
+
* ÖLÇÜYOR ve `tabindex`i yalnızca gerçekten kaydırılabilirken yazıyor.
|
|
3440
|
+
*
|
|
3441
|
+
* <h3>Kaydırma çubuğu temalı</h3>
|
|
3442
|
+
* İşletim sisteminin açık çubuğu koyu temada kutunun kenarında parlak bir
|
|
3443
|
+
* şerit bırakıyordu.
|
|
3444
|
+
*
|
|
3445
|
+
* <h3>Klavye</h3>
|
|
3446
|
+
* <table>
|
|
3447
|
+
* <tr><td>`Tab`</td><td>kaydırılabilir bölgeye odaklanır (yalnızca taşma varsa)</td></tr>
|
|
3448
|
+
* <tr><td>ok tuşları · `PageUp`/`PageDown` · `Home`/`End`</td><td>kaydırır</td></tr>
|
|
3449
|
+
* </table>
|
|
3450
|
+
* Tuşların hepsi TARAYICIDAN geliyor; bileşenin işi yalnızca bölgeyi
|
|
3451
|
+
* odaklanabilir kılmak.
|
|
3452
|
+
*/
|
|
3453
|
+
declare const ScrollArea_2: FC<Props_30>;
|
|
3454
|
+
|
|
2329
3455
|
declare type ScrollerProps = HTMLAttributes<HTMLDivElement> & {
|
|
2330
3456
|
/**
|
|
2331
3457
|
* Çerçeve (hairline + yarıçap + yüzey). Gömülü tablolarda kapatılır: orada
|
|
@@ -2345,7 +3471,52 @@ export declare const SectionHeader: typeof SectionHeader_2;
|
|
|
2345
3471
|
* İkisini birbirine bağlamak, doğru görünüm için yanlış başlık düzeyi seçmeye
|
|
2346
3472
|
* zorlardı.
|
|
2347
3473
|
*/
|
|
2348
|
-
declare const SectionHeader_2: FC<
|
|
3474
|
+
declare const SectionHeader_2: FC<Props_29>;
|
|
3475
|
+
|
|
3476
|
+
export declare const SegmentedControl: typeof SegmentedControl_2;
|
|
3477
|
+
|
|
3478
|
+
/**
|
|
3479
|
+
* Bölmeli denetim — <strong>görünüm</strong> değiştirme.
|
|
3480
|
+
*
|
|
3481
|
+
* <h3>{@link ChipGroup} ile farkı: filtre mi görünüm mü</h3>
|
|
3482
|
+
* İkisi de `radiogroup` ve ikisi de tek seçim; ayrım seçilen şeyin ne
|
|
3483
|
+
* olduğunda:
|
|
3484
|
+
*
|
|
3485
|
+
* <ul>
|
|
3486
|
+
* <li>`ChipGroup` bir FİLTRE. Seçim listeyi daraltıyor, seçenek sayısı
|
|
3487
|
+
* değişken ve "hiçbiri" geçerli bir durum — çipe ikinci kez basmak
|
|
3488
|
+
* seçimi kaldırıyor.</li>
|
|
3489
|
+
* <li><b>`SegmentedControl` bir GÖRÜNÜM anahtarı.</b> Liste/ızgara,
|
|
3490
|
+
* aylık/yıllık, gelen/giden. Seçenek sayısı 2-4 ve SABİT; <strong>seçili
|
|
3491
|
+
* durum her zaman tektir</strong> — "hiçbiri" diye bir hâl yok, çünkü
|
|
3492
|
+
* ekranda bir şey çizilmek zorunda.</li>
|
|
3493
|
+
* </ul>
|
|
3494
|
+
*
|
|
3495
|
+
* <p>Bu yüzden seçili öğeye ikinci kez basmak hiçbir şey yapmaz; `ChipGroup`ta
|
|
3496
|
+
* aynı hareket seçimi kaldırıyor. Aynı bileşeni iki iş için kullanmak, bu
|
|
3497
|
+
* davranış farkını kaybetmek olurdu.
|
|
3498
|
+
*
|
|
3499
|
+
* <h3>Neden `Tabs` değil</h3>
|
|
3500
|
+
* `Tabs` bir PANEL değiştirir ve `aria-controls` ile ona bağlanır; bölmeli
|
|
3501
|
+
* denetim aynı içeriğin başka bir SUNUMUNU seçiyor — gösterilen veri aynı.
|
|
3502
|
+
* Sekme olarak sunmak ekran okuyucuya var olmayan bir panel vaat ediyordu.
|
|
3503
|
+
*
|
|
3504
|
+
* <h3>Klavye (APG: radio group)</h3>
|
|
3505
|
+
* <table>
|
|
3506
|
+
* <tr><td>`ArrowRight` / `ArrowDown`</td><td>sonraki seçenek; uçlarda DÖNER</td></tr>
|
|
3507
|
+
* <tr><td>`ArrowLeft` / `ArrowUp`</td><td>önceki seçenek</td></tr>
|
|
3508
|
+
* <tr><td>`Tab`</td><td>grubu TEK durak olarak geçer (dönen `tabindex`)</td></tr>
|
|
3509
|
+
* </table>
|
|
3510
|
+
*/
|
|
3511
|
+
declare const SegmentedControl_2: <T extends string>({ options, value, onChange, label, isIconOnly, size, className, testId, }: Props_8<T>) => JSX.Element;
|
|
3512
|
+
|
|
3513
|
+
export declare type SegmentOption<T extends string = string> = {
|
|
3514
|
+
value: T;
|
|
3515
|
+
label: string;
|
|
3516
|
+
/** Yalnızca ikon gösterilecekse `label` erişilebilir ad olarak kalır. */
|
|
3517
|
+
icon?: ReactNode;
|
|
3518
|
+
isDisabled?: boolean;
|
|
3519
|
+
};
|
|
2349
3520
|
|
|
2350
3521
|
export declare const Select: typeof Select_2;
|
|
2351
3522
|
|
|
@@ -2370,11 +3541,22 @@ export declare const Select: typeof Select_2;
|
|
|
2370
3541
|
* Seçenekleri tek tek odaklanabilir yapmak, aynı bileşende iki ayrı klavye
|
|
2371
3542
|
* modeli demekti (APG: listbox + activedescendant).
|
|
2372
3543
|
*
|
|
3544
|
+
* <table>
|
|
3545
|
+
* <tr><td>`ArrowDown`/`ArrowUp`/`Enter`/`Space` (kapalıyken)</td><td>paneli açar</td></tr>
|
|
3546
|
+
* <tr><td>`ArrowDown` / `ArrowUp`</td><td>etkin seçenek bir alt/üst; uçlarda DÖNER</td></tr>
|
|
3547
|
+
* <tr><td>`Home` / `End`</td><td>ilk / son seçenek</td></tr>
|
|
3548
|
+
* <tr><td>`Enter` / `Space`</td><td>etkin seçeneği seçer</td></tr>
|
|
3549
|
+
* <tr><td>`Escape`</td><td>seçim yapmadan kapatır, odak tetikleyicide</td></tr>
|
|
3550
|
+
* <tr><td>`Tab`</td><td>kapatır, gezinme sürer</td></tr>
|
|
3551
|
+
* </table>
|
|
3552
|
+
* Etkin seçenek açılışta SEÇİLİ olandan başlar. Nöbetçi:
|
|
3553
|
+
* `components/__tests__/keyboard.test.tsx`.
|
|
3554
|
+
*
|
|
2373
3555
|
* <h3>20+ seçenek varsa bu bileşen DEĞİL</h3>
|
|
2374
3556
|
* Aramasız bir liste 20 satırdan sonra taranamaz hâle gelir; orada
|
|
2375
3557
|
* {@link Combobox} kullanılır.
|
|
2376
3558
|
*/
|
|
2377
|
-
declare const Select_2: <T extends string>({ options, value, onChange, label, placeholder, closeLabel, icon, size, align, isDisabled, id, className, testId, "aria-describedby": describedBy, "aria-invalid": isInvalid, }:
|
|
3559
|
+
declare const Select_2: <T extends string>({ options, value, onChange, label, placeholder, closeLabel, icon, size, align, isDisabled, id, className, testId, "aria-describedby": describedBy, "aria-invalid": isInvalid, }: Props_9<T>) => JSX.Element;
|
|
2378
3560
|
|
|
2379
3561
|
export declare type SelectOption<T extends string = string> = {
|
|
2380
3562
|
value: T;
|
|
@@ -2382,6 +3564,12 @@ export declare type SelectOption<T extends string = string> = {
|
|
|
2382
3564
|
isDisabled?: boolean;
|
|
2383
3565
|
};
|
|
2384
3566
|
|
|
3567
|
+
declare type ShapeProps = {
|
|
3568
|
+
/** Kaç kopya çizilecek — bir listenin bilinen satır sayısı. */
|
|
3569
|
+
count?: number;
|
|
3570
|
+
className?: string;
|
|
3571
|
+
};
|
|
3572
|
+
|
|
2385
3573
|
declare type SingleProps<T extends string> = BaseProps<T> & {
|
|
2386
3574
|
isMultiple?: false;
|
|
2387
3575
|
value: T | null;
|
|
@@ -2402,7 +3590,15 @@ export declare const Skeleton: typeof Skeleton_2;
|
|
|
2402
3590
|
* <p>`aria-hidden`: ekran okuyucuya "yükleniyor" bilgisini veren, iskeletin
|
|
2403
3591
|
* kendisi değil onu saran bölgenin `aria-busy` özelliğidir.
|
|
2404
3592
|
*/
|
|
2405
|
-
declare const Skeleton_2: FC<
|
|
3593
|
+
declare const Skeleton_2: FC<Props_31>;
|
|
3594
|
+
|
|
3595
|
+
export declare const SkeletonCard: NamedExoticComponent<ShapeProps>;
|
|
3596
|
+
|
|
3597
|
+
export declare const SkeletonRows: NamedExoticComponent<ShapeProps>;
|
|
3598
|
+
|
|
3599
|
+
export declare const SkeletonTable: NamedExoticComponent<ShapeProps & {
|
|
3600
|
+
columns?: number;
|
|
3601
|
+
}>;
|
|
2406
3602
|
|
|
2407
3603
|
export declare const Spinner: typeof Spinner_2;
|
|
2408
3604
|
|
|
@@ -2413,7 +3609,137 @@ export declare const Spinner: typeof Spinner_2;
|
|
|
2413
3609
|
* bilinmeyen</em> bir bekleme için — düğme içi işlem veya belirsiz süreli bir
|
|
2414
3610
|
* sorgu gibi.
|
|
2415
3611
|
*/
|
|
2416
|
-
declare const Spinner_2: FC<
|
|
3612
|
+
declare const Spinner_2: FC<Props_34>;
|
|
3613
|
+
|
|
3614
|
+
export declare const Stat: typeof Stat_2;
|
|
3615
|
+
|
|
3616
|
+
/**
|
|
3617
|
+
* Ölçüm kutusu (KPI).
|
|
3618
|
+
*
|
|
3619
|
+
* <h3>Bileşen HESAP YAPMAZ</h3>
|
|
3620
|
+
* `value` ve `delta` biçimlendirilmiş dizeler. Yüzde hesabı, para birimi ve
|
|
3621
|
+
* yuvarlama çağıranın: bir gösterge panelinde "%12,5" ile "%13" arasındaki
|
|
3622
|
+
* farkı belirleyen şey ürün kararı, bileşenin varsayılanı değil. Aynı sebeple
|
|
3623
|
+
* `Price` de hesap yapmıyor.
|
|
3624
|
+
*
|
|
3625
|
+
* <h3>Yön TEK BAŞINA iyi/kötü demek DEĞİL</h3>
|
|
3626
|
+
* "İade oranı %12 arttı" kötü haber, "ciro %12 arttı" iyi. Yükselen her oku
|
|
3627
|
+
* yeşile boyamak, kötüleşen bir ölçüyü iyi gibi gösteriyordu — `isUpPositive`
|
|
3628
|
+
* bu kararı çağırana bırakıyor.
|
|
3629
|
+
*
|
|
3630
|
+
* <h3>Renk tek sinyal değil</h3>
|
|
3631
|
+
* Değişim üç şeyle birden anlatılıyor: <strong>ok yönü</strong> (biçim),
|
|
3632
|
+
* <strong>renk</strong> ve ekran okuyucuya okunan <strong>metin</strong>
|
|
3633
|
+
* ("artış" / "azalış" / "değişim yok"). Yalnızca renk kullanılsaydı renk körü
|
|
3634
|
+
* bir kullanıcı için artışla azalış aynı görünüyordu (WCAG 1.4.1).
|
|
3635
|
+
*
|
|
3636
|
+
* <h3>Rakamlar TABULAR</h3>
|
|
3637
|
+
* Alt alta duran ölçüm kutularında orantılı rakamlar sütunu tırtıklı
|
|
3638
|
+
* gösteriyor; `tabular-nums` her basamağı aynı genişlikte çiziyor.
|
|
3639
|
+
*/
|
|
3640
|
+
declare const Stat_2: FC<Props_32>;
|
|
3641
|
+
|
|
3642
|
+
/** Değişimin yönü. `flat` "değişmedi" — yokluk DEĞİL. */
|
|
3643
|
+
export declare type StatTrend = 'up' | 'down' | 'flat';
|
|
3644
|
+
|
|
3645
|
+
export declare type StepItem = {
|
|
3646
|
+
id: string;
|
|
3647
|
+
label: string;
|
|
3648
|
+
/** Etiketin altındaki bir cümlelik açıklama. */
|
|
3649
|
+
description?: ReactNode;
|
|
3650
|
+
};
|
|
3651
|
+
|
|
3652
|
+
export declare const Steps: typeof Steps_2;
|
|
3653
|
+
|
|
3654
|
+
/**
|
|
3655
|
+
* Adım göstergesi (stepper) — çok adımlı akışta NEREDE olunduğu.
|
|
3656
|
+
*
|
|
3657
|
+
* <h3>Üç durum, ÜÇ AYRI işaret</h3>
|
|
3658
|
+
* Tamamlanan adım <strong>tik</strong>, bulunulan adım <strong>dolu
|
|
3659
|
+
* madalyon + sıra numarası</strong>, sıradaki adım <strong>boş
|
|
3660
|
+
* madalyon</strong> taşıyor. Renk bunlara EŞLİK ediyor, tek başına
|
|
3661
|
+
* anlatmıyor (WCAG 1.4.1): üçünü yalnızca renkle ayırmak, renk körü bir
|
|
3662
|
+
* kullanıcı için "üç aynı daire" demekti.
|
|
3663
|
+
*
|
|
3664
|
+
* <p>Durum ayrıca METİN olarak okunuyor — her adımın erişilebilir adına
|
|
3665
|
+
* "tamamlandı" / "şu anki adım" / "sıradaki" ekleniyor. Görsel işaret ekran
|
|
3666
|
+
* okuyucuya geçmiyor; `aria-current` tek başına yalnızca BULUNULAN adımı
|
|
3667
|
+
* söylüyor, tamamlananları değil.
|
|
3668
|
+
*
|
|
3669
|
+
* <h3>Geri dönülebilirlik AÇIKÇA bildirilir</h3>
|
|
3670
|
+
* `onStepClick` verilmediğinde adımlar `<button>` bile değil: tıklanabilir
|
|
3671
|
+
* görünüp hiçbir şey yapmayan bir adım, kullanıcıya var olmayan bir yol vaat
|
|
3672
|
+
* ediyordu. Verildiğinde yalnızca TAMAMLANMIŞ adımlar tıklanabilir — ileri
|
|
3673
|
+
* atlamak, atlanan adımın verisini toplamadan devam etmek demek.
|
|
3674
|
+
*
|
|
3675
|
+
* <h3>Klavye</h3>
|
|
3676
|
+
* <table>
|
|
3677
|
+
* <tr><td>`Tab`</td><td>tıklanabilir adımlar arasında gezinir</td></tr>
|
|
3678
|
+
* <tr><td>`Enter` / `Space`</td><td>adıma döner</td></tr>
|
|
3679
|
+
* </table>
|
|
3680
|
+
* Ok tuşu YOK: adımlar bir seçim listesi değil, her biri bağımsız bir
|
|
3681
|
+
* gezinme bağlantısı.
|
|
3682
|
+
*/
|
|
3683
|
+
declare const Steps_2: FC<Props_36>;
|
|
3684
|
+
|
|
3685
|
+
export declare const Switch: typeof Switch_2;
|
|
3686
|
+
|
|
3687
|
+
/**
|
|
3688
|
+
* Anahtar (switch) — <strong>anında</strong> uygulanan aç/kapa.
|
|
3689
|
+
*
|
|
3690
|
+
* <h3>`Checkbox` ile farkı: NE ZAMAN etkili olduğu</h3>
|
|
3691
|
+
* İkisi de iki durumlu ve ikisi de yerel `<input type="checkbox">` üzerine
|
|
3692
|
+
* kurulu; ayrım görünüşte değil ZAMANLAMADA:
|
|
3693
|
+
*
|
|
3694
|
+
* <ul>
|
|
3695
|
+
* <li>{@link Checkbox} bir formda <strong>gönderilecek</strong> seçimdir.
|
|
3696
|
+
* "Sözleşmeyi okudum" işaretlendiğinde hiçbir şey olmaz; karar
|
|
3697
|
+
* "Kaydet"e basıldığında geçerli olur. Geri almak için işareti kaldırıp
|
|
3698
|
+
* yeniden göndermek gerekir.</li>
|
|
3699
|
+
* <li><b>`Switch` ANINDA uygulanır.</b> "Kampanya bildirimleri" açıldığı
|
|
3700
|
+
* anda sunucuya gider. Kaydet düğmesi yoktur, olmamalıdır da —
|
|
3701
|
+
* kullanıcı anahtarı çevirdikten sonra bir düğme aramak zorunda
|
|
3702
|
+
* kalıyordu.</li>
|
|
3703
|
+
* </ul>
|
|
3704
|
+
*
|
|
3705
|
+
* <p>Ayrım keyfi değil ekran okuyucuda DUYULUYOR: `role="switch"` "açık/kapalı"
|
|
3706
|
+
* diye okunur, onay kutusu "işaretli/işaretsiz" diye. İkisi kullanıcıya farklı
|
|
3707
|
+
* bir söz veriyor.
|
|
3708
|
+
*
|
|
3709
|
+
* <h3>Yerel öğe korunur</h3>
|
|
3710
|
+
* `<input type="checkbox" role="switch">` — `Space` ile değiştirme, `Tab`
|
|
3711
|
+
* sırası, form gönderimine katılma ve `:disabled` semantiği tarayıcıdan gelir.
|
|
3712
|
+
* `<div role="switch" tabindex="0">` yazmak bunların hepsini elle yeniden
|
|
3713
|
+
* kurmak demekti.
|
|
3714
|
+
*
|
|
3715
|
+
* <h3>Durum RENKLE ANLATILMAZ</h3>
|
|
3716
|
+
* Açık ve kapalı hâl arasındaki fark yalnızca zemin rengi olsaydı renk körü
|
|
3717
|
+
* bir kullanıcı için iki durum aynı görünürdü (WCAG 1.4.1). Kulp KONUM
|
|
3718
|
+
* değiştiriyor — bu bir biçim farkı — ve zorlanmış renk kipinde çerçeve +
|
|
3719
|
+
* konum tek başına yeterli kalıyor.
|
|
3720
|
+
*
|
|
3721
|
+
* <h3>Klavye</h3>
|
|
3722
|
+
* <table>
|
|
3723
|
+
* <tr><td>`Space`</td><td>durumu değiştirir</td></tr>
|
|
3724
|
+
* </table>
|
|
3725
|
+
*
|
|
3726
|
+
* @example
|
|
3727
|
+
* <Switch
|
|
3728
|
+
* label="Kampanya bildirimleri"
|
|
3729
|
+
* hint="E-posta ile ayda en fazla iki ileti"
|
|
3730
|
+
* checked={isSubscribed}
|
|
3731
|
+
* onChange={event => subscribe(event.target.checked)}
|
|
3732
|
+
* />
|
|
3733
|
+
*/
|
|
3734
|
+
declare const Switch_2: ForwardRefExoticComponent<Omit<InputHTMLAttributes<HTMLInputElement>, "role" | "type"> & {
|
|
3735
|
+
/** Anahtarın görünür etiketi. */
|
|
3736
|
+
label: ReactNode;
|
|
3737
|
+
/** Etiketin altındaki açıklama; `aria-describedby` ile bağlanır. */
|
|
3738
|
+
hint?: string;
|
|
3739
|
+
/** Etiket anahtarın SOLUNDA durur — ayar listelerinin yaygın düzeni. */
|
|
3740
|
+
isLabelFirst?: boolean;
|
|
3741
|
+
testId?: string;
|
|
3742
|
+
} & RefAttributes<HTMLInputElement>>;
|
|
2417
3743
|
|
|
2418
3744
|
export declare type TabItem = {
|
|
2419
3745
|
id: string;
|
|
@@ -2443,7 +3769,7 @@ export declare const Table: typeof Table_2;
|
|
|
2443
3769
|
* <p>Operasyon ekranlarının durum satırlı (yükleniyor/hata/boş) sürümü için
|
|
2444
3770
|
* {@link DataTable}.
|
|
2445
3771
|
*/
|
|
2446
|
-
declare const Table_2: FC<
|
|
3772
|
+
declare const Table_2: FC<Props_46>;
|
|
2447
3773
|
|
|
2448
3774
|
export declare const TableCheckbox: typeof TableCheckbox_2;
|
|
2449
3775
|
|
|
@@ -2458,6 +3784,13 @@ export declare const TableCheckbox: typeof TableCheckbox_2;
|
|
|
2458
3784
|
*
|
|
2459
3785
|
* <p>Renk `Checkbox` ile aynı kaynaktan: `accent-color` mavi — onay kutusu bir
|
|
2460
3786
|
* seçimdir, bir dönüşüm değil.
|
|
3787
|
+
*
|
|
3788
|
+
* <h3>Klavye</h3>
|
|
3789
|
+
* <table>
|
|
3790
|
+
* <tr><td>`Space`</td><td>seçimi değiştirir</td></tr>
|
|
3791
|
+
* </table>
|
|
3792
|
+
* Yerel öğe: `Space`, `indeterminate` durumu ve form gönderimine katılma
|
|
3793
|
+
* platformdan gelir. Nöbetçi: `components/__tests__/keyboard.test.tsx`.
|
|
2461
3794
|
*/
|
|
2462
3795
|
declare const TableCheckbox_2: ForwardRefExoticComponent<Omit<InputHTMLAttributes<HTMLInputElement>, "type" | "aria-label"> & {
|
|
2463
3796
|
/**
|
|
@@ -2507,8 +3840,52 @@ export declare const Tabs: typeof Tabs_2;
|
|
|
2507
3840
|
* <li><b>Kontrollü + panelsiz</b> — `activeId` + `onChange` verilir,
|
|
2508
3841
|
* `content` verilmez; bileşen yalnızca çubuğu çizer.</li>
|
|
2509
3842
|
* </ul>
|
|
3843
|
+
*
|
|
3844
|
+
* <h3>Klavye (APG: tabs, OTOMATİK etkinleştirme)</h3>
|
|
3845
|
+
* <table>
|
|
3846
|
+
* <tr><td>`ArrowRight` / `ArrowLeft`</td><td>sonraki / önceki sekme; uçlarda DÖNER</td></tr>
|
|
3847
|
+
* <tr><td>`Tab`</td><td>çubuktan panele çıkar — çubuk TEK durak</td></tr>
|
|
3848
|
+
* </table>
|
|
3849
|
+
* Ok tuşu odakla birlikte seçimi de taşır (otomatik etkinleştirme). Panel
|
|
3850
|
+
* içeriği hazır ve ucuz olduğu sürece APG'nin önerdiği budur; her sekmesi bir
|
|
3851
|
+
* istek atan pahalı bir panelde `isManualActivation` verilir — orada otomatik
|
|
3852
|
+
* etkinleştirme, kullanıcı beşinci sekmeye giderken dört istek atıyordu.
|
|
3853
|
+
* Nöbetçi: `components/__tests__/keyboard.test.tsx`.
|
|
3854
|
+
*/
|
|
3855
|
+
declare const Tabs_2: FC<Props_37>;
|
|
3856
|
+
|
|
3857
|
+
export declare const TagInput: typeof TagInput_2;
|
|
3858
|
+
|
|
3859
|
+
/**
|
|
3860
|
+
* Etiket girdisi — yazılan metni kaldırılabilir çiplere çevirir.
|
|
3861
|
+
*
|
|
3862
|
+
* <h3>Yerel `<input>` KORUNUR</h3>
|
|
3863
|
+
* Yazma, panodan yapıştırma, mobil klavye ve `Tab` sırası tarayıcıdan geliyor.
|
|
3864
|
+
* Çipler girdinin İÇİNDE görünüyor ama DOM'da kardeşi: `<input>` çocuk
|
|
3865
|
+
* alamıyor ve çipleri içine koymanın tek yolu girdiyi taklit etmekti.
|
|
3866
|
+
*
|
|
3867
|
+
* <h3>Neden {@link Combobox} değil</h3>
|
|
3868
|
+
* `Combobox` BİLİNEN bir listeden seçtiriyor; burada değer serbest — kullanıcı
|
|
3869
|
+
* listede olmayan bir şey yazıyor (arama terimi, OEM kodu, e-posta). Seçilecek
|
|
3870
|
+
* bir liste varsa `Combobox` doğrusu.
|
|
3871
|
+
*
|
|
3872
|
+
* <h3>Yinelenen değer sessizce YUTULMAZ</h3>
|
|
3873
|
+
* Aynı etiket ikinci kez yazıldığında eklenmiyor ama girdi de temizleniyor;
|
|
3874
|
+
* kullanıcı "yazdım, kayboldu" diyordu. Artık var olan çip bir kare
|
|
3875
|
+
* vurgulanıyor ve ekran okuyucuya "zaten ekli" duyuruluyor.
|
|
3876
|
+
*
|
|
3877
|
+
* <h3>Klavye</h3>
|
|
3878
|
+
* <table>
|
|
3879
|
+
* <tr><td>`Enter` / `,`</td><td>yazılanı etikete çevirir</td></tr>
|
|
3880
|
+
* <tr><td>`Backspace` (girdi BOŞken)</td><td>SON etiketi kaldırır</td></tr>
|
|
3881
|
+
* <tr><td>`Tab`</td><td>girdiden çıkar — yazılan metin de etikete DÖNER</td></tr>
|
|
3882
|
+
* <tr><td>çipin çarpısı</td><td>o etiketi kaldırır</td></tr>
|
|
3883
|
+
* </table>
|
|
3884
|
+
* `Tab`ta yazılanın etikete dönmesi bilinçli: yarım kalmış bir metin alanı
|
|
3885
|
+
* terk edildiğinde kayboluyordu ve kullanıcı bunu ancak gönderdikten sonra
|
|
3886
|
+
* fark ediyordu.
|
|
2510
3887
|
*/
|
|
2511
|
-
declare const
|
|
3888
|
+
declare const TagInput_2: ({ values, onChange, label, placeholder, removeLabel, separators, maxTags, isDisabled, id, className, testId, "aria-describedby": describedBy, "aria-invalid": isInvalid, }: Props_14) => JSX.Element;
|
|
2512
3889
|
|
|
2513
3890
|
export declare const Textarea: typeof Textarea_2;
|
|
2514
3891
|
|
|
@@ -2521,8 +3898,33 @@ export declare const Textarea: typeof Textarea_2;
|
|
|
2521
3898
|
*
|
|
2522
3899
|
* <p>Yeniden boyutlandırma yalnızca <strong>dikey</strong>: yatayda büyütmek
|
|
2523
3900
|
* alanı kapsayıcısının dışına taşırıp yerleşimi bozuyordu.
|
|
3901
|
+
*
|
|
3902
|
+
* <h3>Otomatik yükseklik neden CSS ile değil</h3>
|
|
3903
|
+
* `field-sizing: content` bu işi tek satırda yapıyor ama bugün yalnızca
|
|
3904
|
+
* Chromium'da var. Ölçüm yolu her yerde çalışıyor ve tarayıcı desteği
|
|
3905
|
+
* geldiğinde tek dosyada değiştirilecek.
|
|
2524
3906
|
*/
|
|
2525
3907
|
declare const Textarea_2: ForwardRefExoticComponent<TextareaHTMLAttributes<HTMLTextAreaElement> & {
|
|
3908
|
+
/**
|
|
3909
|
+
* Alan içeriğiyle birlikte BÜYÜR — kaydırma çubuğu yerine yükseklik.
|
|
3910
|
+
*
|
|
3911
|
+
* <p>Sabit yükseklikli bir alanda kullanıcı yazdığının tamamını göremiyor:
|
|
3912
|
+
* dört satırlık bir kutuya on satır yazan kişi, gönderdiğinde ne yazdığını
|
|
3913
|
+
* kontrol etmek için kutunun içinde kaydırmak zorunda kalıyordu. `maxRows`
|
|
3914
|
+
* ile tavan konur; ötesinde kaydırma geri döner (sayfa boyunca uzayan bir
|
|
3915
|
+
* alan, altındaki gönder düğmesini ekrandan çıkarıyordu).
|
|
3916
|
+
*/
|
|
3917
|
+
isAutoSize?: boolean;
|
|
3918
|
+
/** Otomatik büyümenin tavanı (satır). */
|
|
3919
|
+
maxRows?: number;
|
|
3920
|
+
/**
|
|
3921
|
+
* Kalan karakter sayacını gösterir. `maxLength` ile birlikte anlamlı.
|
|
3922
|
+
*
|
|
3923
|
+
* <p>Sayaç `aria-hidden`: aynı bilgi her tuşta duyurulsaydı yazma
|
|
3924
|
+
* kesintiye uğrardı. Sınıra YAKLAŞILDIĞINDA (son %10) sayaç uyarı tonuna
|
|
3925
|
+
* geçiyor — sınıra çarpıp yazamamak, yaklaştığını görmemekten kötü.
|
|
3926
|
+
*/
|
|
3927
|
+
hasCounter?: boolean;
|
|
2526
3928
|
testId?: string;
|
|
2527
3929
|
} & RefAttributes<HTMLTextAreaElement>>;
|
|
2528
3930
|
|
|
@@ -2548,8 +3950,20 @@ export declare const TextLink: typeof TextLink_2;
|
|
|
2548
3950
|
declare const TextLink_2: ({ href, children, hasArrow, tone, size, className, linkProps, ...rest }: Props_2) => JSX.Element;
|
|
2549
3951
|
|
|
2550
3952
|
declare type ThemeState = {
|
|
3953
|
+
/**
|
|
3954
|
+
* ÇÖZÜLMÜŞ tema — ekranda çizili olan. `preference` `system` iken bu alan
|
|
3955
|
+
* işletim sisteminin o anki tercihini taşır.
|
|
3956
|
+
*/
|
|
2551
3957
|
scheme: HanuiColorScheme;
|
|
2552
|
-
|
|
3958
|
+
/**
|
|
3959
|
+
* Kullanıcının SEÇİMİ. Üç durumlu bir tema anahtarı (Açık / Koyu / Sistem)
|
|
3960
|
+
* bunu okur; `scheme` okunsaydı "Sistem" seçiliyken düğme "Koyu"yu işaretli
|
|
3961
|
+
* gösterirdi.
|
|
3962
|
+
*/
|
|
3963
|
+
preference: HanuiColorPreference;
|
|
3964
|
+
/** `'system'` verildiğinde AÇIK seçim silinir ve sistem tercihi izlenir. */
|
|
3965
|
+
setScheme: (preference: HanuiColorPreference) => void;
|
|
3966
|
+
/** Açık ↔ koyu. `system` iken ÇÖZÜLMÜŞ değerin tersine geçer. */
|
|
2553
3967
|
toggle: () => void;
|
|
2554
3968
|
/**
|
|
2555
3969
|
* Sunucu çıktısında ve hidrasyondan önceki ilk karede `false`.
|
|
@@ -2582,7 +3996,113 @@ export declare const Tile: typeof Tile_2;
|
|
|
2582
3996
|
* "1.248 ürün" cümlesi hem sayı biçimine hem dile bağlı. Bileşen içinde
|
|
2583
3997
|
* `toLocaleString` çağırmak, o kararı kütüphanenin varsayımına bağlıyordu.
|
|
2584
3998
|
*/
|
|
2585
|
-
declare const Tile_2: ({ label, icon, href, meta, isActive, linkProps, className, testId }:
|
|
3999
|
+
declare const Tile_2: ({ label, icon, href, meta, isActive, linkProps, className, testId }: Props_38) => JSX.Element;
|
|
4000
|
+
|
|
4001
|
+
export declare const Timeline: typeof Timeline_2;
|
|
4002
|
+
|
|
4003
|
+
/**
|
|
4004
|
+
* Zaman çizelgesi — sipariş durumu, işlem geçmişi.
|
|
4005
|
+
*
|
|
4006
|
+
* <h3>{@link Steps} ile farkı: ileri mi geri mi bakıyor</h3>
|
|
4007
|
+
* İkisi de sıralı ve durumlu; ayrım yönlerinde:
|
|
4008
|
+
*
|
|
4009
|
+
* <ul>
|
|
4010
|
+
* <li>`Steps` İLERİ bakar: kullanıcı bir akışın içinde ve kalan adımları
|
|
4011
|
+
* görüyor. Adım sayısı sabit, adımlara dönülebilir.</li>
|
|
4012
|
+
* <li><b>`Timeline` GERİ bakar:</b> olmuş şeylerin kaydı. Olay sayısı
|
|
4013
|
+
* değişken, hiçbiri tıklanabilir değil ve <strong>başarısız</strong>
|
|
4014
|
+
* diye bir durum var — bir adım "başarısız" olamaz, akış orada durur;
|
|
4015
|
+
* bir olay olabilir ve kayıtta kalır.</li>
|
|
4016
|
+
* </ul>
|
|
4017
|
+
*
|
|
4018
|
+
* <h3>Zaman biçimlendirmesi ÇAĞIRANIN</h3>
|
|
4019
|
+
* `time` biçimlendirilmiş bir dize. Kütüphane `Intl` çağırsaydı yerel ayarı
|
|
4020
|
+
* ve "3 saat önce" mi "14:32" mi yazılacağını kendisi seçmiş olurdu — ikisi
|
|
4021
|
+
* de bağlama bağlı kararlar.
|
|
4022
|
+
*
|
|
4023
|
+
* <h3>Durum renkle DEĞİL, üç şeyle birden</h3>
|
|
4024
|
+
* İşaretin <strong>biçimi</strong> (dolu / halka / tik / çarpı), rengi ve
|
|
4025
|
+
* ekran okuyucuya okunan <strong>metni</strong>. Yalnızca renk kullanılsaydı
|
|
4026
|
+
* "tamamlandı" ile "başarısız" renk körü bir kullanıcı için aynı daireydi.
|
|
4027
|
+
*/
|
|
4028
|
+
declare const Timeline_2: FC<Props_39>;
|
|
4029
|
+
|
|
4030
|
+
export declare type TimelineEvent = {
|
|
4031
|
+
id: string;
|
|
4032
|
+
title: string;
|
|
4033
|
+
/** Zaman damgası — BİÇİMLENDİRİLMİŞ dize. Bileşen tarih biçimlendirmez. */
|
|
4034
|
+
time?: string;
|
|
4035
|
+
description?: ReactNode;
|
|
4036
|
+
status?: TimelineStatus;
|
|
4037
|
+
/** Varsayılan işaretin yerine geçen ikon. */
|
|
4038
|
+
icon?: ReactNode;
|
|
4039
|
+
};
|
|
4040
|
+
|
|
4041
|
+
/** Bir olayın durumu. `pending` HENÜZ olmadı — başarısız değil. */
|
|
4042
|
+
export declare type TimelineStatus = 'done' | 'current' | 'pending' | 'failed';
|
|
4043
|
+
|
|
4044
|
+
/**
|
|
4045
|
+
* BİLDİRİM SÖZLEŞMESİ — süre, ikon ve renk kararları TEK YERDE.
|
|
4046
|
+
*
|
|
4047
|
+
* <h3>Neden harici bir kütüphaneye sarmalayıcı DEĞİL</h3>
|
|
4048
|
+
* Tüketici `react-hot-toast` taşıyordu ve gövdeyi kendi yazmak zorunda
|
|
4049
|
+
* kalmıştı: kütüphanenin goober sınıfı bizim modül sınıfımızla AYNI
|
|
4050
|
+
* özgüllükteydi ve kazananı kaynak sırası belirliyordu — aynı bildirim
|
|
4051
|
+
* geliştirmede ve üretimde İKİ FARKLI RENKTE çıkıyordu. Bir sarmalayıcı bu
|
|
4052
|
+
* sorunu çözmez, erteler.
|
|
4053
|
+
*
|
|
4054
|
+
* @example
|
|
4055
|
+
* toast.success('Adres kaydedildi');
|
|
4056
|
+
* toast.error('Kart reddedildi', { action: { label: 'Yeniden dene', onClick: retry } });
|
|
4057
|
+
*/
|
|
4058
|
+
export declare const toast: {
|
|
4059
|
+
show: (message: string, options?: ToastOptions) => number;
|
|
4060
|
+
info: (message: string, options?: ToastOptions) => number;
|
|
4061
|
+
success: (message: string, options?: ToastOptions) => number;
|
|
4062
|
+
warning: (message: string, options?: ToastOptions) => number;
|
|
4063
|
+
error: (message: string, options?: ToastOptions) => number;
|
|
4064
|
+
dismiss: (id: number) => void;
|
|
4065
|
+
/** Tümünü kapatır — sayfa geçişinde bayat bildirim taşınmasın. */
|
|
4066
|
+
clear: () => void;
|
|
4067
|
+
};
|
|
4068
|
+
|
|
4069
|
+
export declare const ToastHub: typeof ToastHub_2;
|
|
4070
|
+
|
|
4071
|
+
/**
|
|
4072
|
+
* Bildirim yığını — uygulamada <strong>BİR KEZ</strong> çizilir.
|
|
4073
|
+
*
|
|
4074
|
+
* <h3>Neden tek yığın</h3>
|
|
4075
|
+
* Birden fazla canlı bölge, ekran okuyucuların duyuruları birleştirip sırayla
|
|
4076
|
+
* okumasına ya da tamamen atlamasına yol açıyor. Yığın kök yerleşimde bir kez
|
|
4077
|
+
* durur; `toast.*` çağrıları React ağacının dışından da çalışır.
|
|
4078
|
+
*
|
|
4079
|
+
* <h3>Duyuru bölgesi HER ZAMAN DOM'da</h3>
|
|
4080
|
+
* Kapsayıcı bildirim yokken de çiziliyor. Sonradan DOM'a eklenen bir canlı
|
|
4081
|
+
* bölgenin ilk duyurusu güvenilmez — ekran okuyucu bölgeyi izlemeye
|
|
4082
|
+
* başlamadan içerik gelmiş oluyor.
|
|
4083
|
+
*
|
|
4084
|
+
* <h3>Klavye</h3>
|
|
4085
|
+
* <table>
|
|
4086
|
+
* <tr><td>`Tab`</td><td>bildirimin eylemine ve kapatma düğmesine ulaşır</td></tr>
|
|
4087
|
+
* <tr><td>odak/hover</td><td>kapanma sayacını DURDURUR</td></tr>
|
|
4088
|
+
* </table>
|
|
4089
|
+
*/
|
|
4090
|
+
declare const ToastHub_2: ({ closeLabel, className }: HubProps) => ReactPortal | null;
|
|
4091
|
+
|
|
4092
|
+
export declare type ToastOptions = {
|
|
4093
|
+
tone?: ToastTone;
|
|
4094
|
+
/** Görüntülenme süresi (ms). `0` → kendiliğinden kapanmaz. */
|
|
4095
|
+
duration?: number;
|
|
4096
|
+
/** Başlığın altındaki bir cümlelik ayrıntı. */
|
|
4097
|
+
description?: ReactNode;
|
|
4098
|
+
/** Bildirimin içindeki tek eylem ("Geri al"). */
|
|
4099
|
+
action?: {
|
|
4100
|
+
label: string;
|
|
4101
|
+
onClick: () => void;
|
|
4102
|
+
};
|
|
4103
|
+
};
|
|
4104
|
+
|
|
4105
|
+
export declare type ToastTone = 'info' | 'success' | 'warning' | 'danger';
|
|
2586
4106
|
|
|
2587
4107
|
export declare const Tooltip: typeof Tooltip_2;
|
|
2588
4108
|
|
|
@@ -2595,19 +4115,41 @@ export declare const Tooltip: typeof Tooltip_2;
|
|
|
2595
4115
|
* bir arayüzde "üzerine gelince açıklama çıkar" demek, kullanıcıların çoğu
|
|
2596
4116
|
* için açıklamanın hiç olmaması demek.
|
|
2597
4117
|
*
|
|
4118
|
+
* <h3>Balon PORTAL ile gövdede</h3>
|
|
4119
|
+
* Önce tetikleyicinin içinde `position: absolute` ile duruyordu ve üç yerde
|
|
4120
|
+
* birden bozuluyordu: `overflow: hidden` taşıyan bir kapsayıcının içinde
|
|
4121
|
+
* (kart, tablo hücresi, `Panel`) KIRPILIYOR, ekranın kenarında görünüm
|
|
4122
|
+
* alanının dışına TAŞIYOR, `transform` taşıyan bir atanın altında yığılma
|
|
4123
|
+
* bağlamına HAPSOLUYORDU. Konum artık `usePositioning` ile ölçülüyor;
|
|
4124
|
+
* gerekçenin tamamı orada.
|
|
4125
|
+
*
|
|
2598
4126
|
* <h3>Neden yalnızca AÇIKLAMA taşır</h3>
|
|
2599
4127
|
* Balonda <em>yalnızca</em> yardımcı metin durur — bağlantı, düğme veya
|
|
2600
|
-
* okunması zorunlu bir bilgi değil.
|
|
2601
|
-
*
|
|
2602
|
-
*
|
|
2603
|
-
*
|
|
2604
|
-
*
|
|
2605
|
-
* <h3>
|
|
2606
|
-
*
|
|
2607
|
-
*
|
|
2608
|
-
*
|
|
4128
|
+
* okunması zorunlu bir bilgi değil. İçine bir eylem konsaydı ona erişmenin
|
|
4129
|
+
* yolu olmazdı: balon `pointer-events: none` ve klavyeyle içine girilemiyor.
|
|
4130
|
+
* Eylem taşıyan yüzey `Popover`ın işi; kalıcı olması gereken metin `Field`ın
|
|
4131
|
+
* `hint`i.
|
|
4132
|
+
*
|
|
4133
|
+
* <h3>Dokunmatik: uzun basma</h3>
|
|
4134
|
+
* Dokunmatikte `hover` yok — ipucu orada hiç açılmıyordu. Uzun basma balonu
|
|
4135
|
+
* açar; ekranın herhangi bir yerine dokunmak kapatır. Bağlam menüsü
|
|
4136
|
+
* bastırılır: uzun basmada iOS'ta seçim büyüteci, Android'de kopyala menüsü
|
|
4137
|
+
* çıkıyor ve ikisi de balonun üstüne biniyordu.
|
|
4138
|
+
*
|
|
4139
|
+
* <h3>Kapanma toleransı</h3>
|
|
4140
|
+
* İmleç tetikleyiciden çıkar çıkmaz kapatmak, balonun kendisine ulaşmayı
|
|
4141
|
+
* imkânsız kılıyordu (metin seçilemiyor). Kapanış {@link CLOSE_DELAY} kadar
|
|
4142
|
+
* bekletilir ve bu sürede balona giren imleç onu açık tutar.
|
|
4143
|
+
*
|
|
4144
|
+
* <h3>Klavye</h3>
|
|
4145
|
+
* <table>
|
|
4146
|
+
* <tr><td>`Tab`</td><td>tetikleyiciye gelince GECİKMESİZ açılır</td></tr>
|
|
4147
|
+
* <tr><td>`Escape`</td><td>kapatır; odak tetikleyicide kalır</td></tr>
|
|
4148
|
+
* </table>
|
|
4149
|
+
* Gecikme fare için var; Tab ile gelen kullanıcı zaten bilinçli olarak orada
|
|
4150
|
+
* duruyor.
|
|
2609
4151
|
*/
|
|
2610
|
-
declare const Tooltip_2:
|
|
4152
|
+
declare const Tooltip_2: ({ content, children, side, position, openDelay, className }: Props_3) => JSX.Element;
|
|
2611
4153
|
|
|
2612
4154
|
/**
|
|
2613
4155
|
* Ölçü basamakları.
|
|
@@ -2676,6 +4218,23 @@ export declare enum UIVariant {
|
|
|
2676
4218
|
DANGER = "DANGER"
|
|
2677
4219
|
}
|
|
2678
4220
|
|
|
4221
|
+
export declare type UploadFile = {
|
|
4222
|
+
id: string;
|
|
4223
|
+
name: string;
|
|
4224
|
+
/** Bayt. Ekranda okunur biçime çevrilir. */
|
|
4225
|
+
size: number;
|
|
4226
|
+
/** 0-100. `undefined` → yükleme başlamadı ya da bitti. */
|
|
4227
|
+
progress?: number;
|
|
4228
|
+
/** Bu dosyaya ait hata. Satır kırmızı çizilir ve metin okunur. */
|
|
4229
|
+
error?: string;
|
|
4230
|
+
};
|
|
4231
|
+
|
|
4232
|
+
/**
|
|
4233
|
+
* Duyuru fonksiyonu döndürür. Referans SABİT: bağımlılık dizisine güvenle
|
|
4234
|
+
* konur, her render'da yeni bir kapanış üretip etkileri tetiklemez.
|
|
4235
|
+
*/
|
|
4236
|
+
export declare const useAnnounce: () => ((message: string, politeness?: AnnouncePoliteness) => void);
|
|
4237
|
+
|
|
2679
4238
|
/**
|
|
2680
4239
|
* Sağlayıcı ZORUNLU DEĞİL.
|
|
2681
4240
|
*
|
|
@@ -2711,6 +4270,92 @@ export declare const useHanui: () => HanuiContextValue;
|
|
|
2711
4270
|
*/
|
|
2712
4271
|
export declare const useHanuiTheme: () => ThemeState;
|
|
2713
4272
|
|
|
4273
|
+
/**
|
|
4274
|
+
* LISTBOX KLAVYE GEZİNMESİ — `Select` ve `Combobox`ın ortak modeli.
|
|
4275
|
+
*
|
|
4276
|
+
* <h3>Neden bir kanca</h3>
|
|
4277
|
+
* İki bileşen aynı klavye modelini <strong>kopya kod</strong> olarak
|
|
4278
|
+
* taşıyordu: `ArrowDown`/`ArrowUp` uçlarda dönme, `Home`/`End`, `Enter` ile
|
|
4279
|
+
* seçme, `Escape` ile kapatma, `Tab` ile kapatıp gezinmeye devam etme ve
|
|
4280
|
+
* etkin seçeneği görünür alanda tutma. Altı davranış, iki yerde. Kopya kod
|
|
4281
|
+
* ayrışmaya açık ve ayrışma sessiz: bir bileşende `Home` çalışıp diğerinde
|
|
4282
|
+
* çalışmadığında hiçbir test kırılmıyordu — ikisinin de kendi testi vardı ve
|
|
4283
|
+
* ikisi de kendi davranışını doğruluyordu.
|
|
4284
|
+
*
|
|
4285
|
+
* <p>Kanca yalnızca <strong>gezinmeyi</strong> taşıyor. Açılma kararı (panel
|
|
4286
|
+
* mi alt sayfa mı), filtreleme ve seçim sözleşmesi (`value`/`onChange`) hâlâ
|
|
4287
|
+
* bileşenlerin: ikisi orada gerçekten farklı ve tek bir kancaya toplamak
|
|
4288
|
+
* `Select`e hiç kullanmayacağı arama koduna taşıtırdı.
|
|
4289
|
+
*
|
|
4290
|
+
* <h3>Klavye</h3>
|
|
4291
|
+
* <table>
|
|
4292
|
+
* <tr><td>`ArrowDown` / `ArrowUp`</td><td>etkin seçenek; uçlarda DÖNER</td></tr>
|
|
4293
|
+
* <tr><td>`Home` / `End`</td><td>ilk / son</td></tr>
|
|
4294
|
+
* <tr><td>`Enter` / `Space`</td><td>etkin seçeneği seçer</td></tr>
|
|
4295
|
+
* <tr><td>`Escape`</td><td>kapatır</td></tr>
|
|
4296
|
+
* <tr><td>`Tab`</td><td>kapatır, gezinme SÜRER (`preventDefault` yok)</td></tr>
|
|
4297
|
+
* </table>
|
|
4298
|
+
*
|
|
4299
|
+
* <p>`Space` yalnızca `hasSpaceSelect` ile: `Combobox`ın arama kutusunda boşluk
|
|
4300
|
+
* bir KARAKTER ve onu seçime çevirmek "fren balatası" yazmayı imkânsız
|
|
4301
|
+
* kılıyordu.
|
|
4302
|
+
*/
|
|
4303
|
+
export declare const useListboxNavigation: <T extends HTMLElement = HTMLElement>({ count, isOpen, initialIndex, onSelect, onClose }: ListboxNavigationOptions, { hasSpaceSelect }?: {
|
|
4304
|
+
hasSpaceSelect?: boolean | undefined;
|
|
4305
|
+
}) => ListboxNavigation<T>;
|
|
4306
|
+
|
|
4307
|
+
/**
|
|
4308
|
+
* ÇARPIŞMAYA DUYARLI KONUMLANDIRMA — `Tooltip`, `Popover`, `Menu` ve açılır
|
|
4309
|
+
* listelerin ortak temeli.
|
|
4310
|
+
*
|
|
4311
|
+
* <h3>Neden var: `position: absolute` yetmiyordu</h3>
|
|
4312
|
+
* `Tooltip` balonu tetikleyicinin içinde, `position: absolute` ile duruyordu.
|
|
4313
|
+
* Üç somut sonucu vardı:
|
|
4314
|
+
*
|
|
4315
|
+
* <ul>
|
|
4316
|
+
* <li><b>Kırpılma.</b> `overflow: hidden` taşıyan her kapsayıcı (kart,
|
|
4317
|
+
* tablo kaydırma kutusu, `Panel`) balonu kesiyordu. Bir tablo hücresinde
|
|
4318
|
+
* ipucu görünmüyordu — hiç.</li>
|
|
4319
|
+
* <li><b>Taşma.</b> Ekranın sağ kenarındaki bir tetikleyicinin balonu
|
|
4320
|
+
* görünüm alanının dışına çıkıyor, yatay kaydırma açıyordu.</li>
|
|
4321
|
+
* <li><b>Yığılma bağlamı.</b> `transform` taşıyan bir ata (`Card` hover
|
|
4322
|
+
* animasyonu) yeni bir yığılma bağlamı açıyor ve `z-index` orada
|
|
4323
|
+
* hapsoluyordu; balon kendi kartının altında kalıyordu.</li>
|
|
4324
|
+
* </ul>
|
|
4325
|
+
*
|
|
4326
|
+
* <p>Çözüm portal + `position: fixed`: yüzey gövdeye taşınır, koordinat
|
|
4327
|
+
* görünüm alanına göre hesaplanır. Kırpılacak bir kapsayıcı ve yarışılacak bir
|
|
4328
|
+
* yığılma bağlamı kalmaz.
|
|
4329
|
+
*
|
|
4330
|
+
* <h3>Neden yeni bir bağımlılık YOK</h3>
|
|
4331
|
+
* `floating-ui` bu işi yapıyor ve iyi yapıyor; ama paketin tek çalışma zamanı
|
|
4332
|
+
* bağımlılığının ikon seti olması bilinçli bir karar (bkz. README). Burada
|
|
4333
|
+
* ihtiyaç duyulan şey o kütüphanenin küçük bir alt kümesi: bir kenar, bir
|
|
4334
|
+
* hizalama ve karşıt kenara düşme. Ok konumlandırma, otomatik yerleşim
|
|
4335
|
+
* (`autoPlacement`), sanal öğe ve middleware zinciri gerekmiyor — ve
|
|
4336
|
+
* gerektiğinde eklenecek yer burası.
|
|
4337
|
+
*
|
|
4338
|
+
* <h3>CSS Anchor Positioning neden kullanılmıyor</h3>
|
|
4339
|
+
* Denendi ve BUGÜN kullanılamıyor: `anchor-name` / `position-anchor` yalnızca
|
|
4340
|
+
* Chromium'da var (Safari ve Firefox'ta bayrak arkasında bile değil). İki
|
|
4341
|
+
* kod yolu tutmak — biri modern tarayıcıda, biri yedekte — konumlandırmayı iki
|
|
4342
|
+
* kez yazmak ve ikisinin ayrışmasını beklemek demek. Ölçüm tabanlı yol her
|
|
4343
|
+
* yerde çalışıyor; tarayıcı desteği geldiğinde geçiş TEK dosyada.
|
|
4344
|
+
*
|
|
4345
|
+
* <h3>Ölçüm ne zaman yenileniyor</h3>
|
|
4346
|
+
* Açılışta, pencere yeniden boyutlandığında ve <em>herhangi bir atanın</em>
|
|
4347
|
+
* kaydırılmasında. Sonuncusu için `capture: true` ile belge düzeyinde tek bir
|
|
4348
|
+
* dinleyici: kaydırma olayı baloncuklanmıyor ve her ata için ayrı dinleyici
|
|
4349
|
+
* kurmak, derin bir ağaçta onlarca dinleyici demekti.
|
|
4350
|
+
*/
|
|
4351
|
+
export declare const usePositioning: (anchorRef: {
|
|
4352
|
+
current: HTMLElement | null;
|
|
4353
|
+
}, surfaceRef: {
|
|
4354
|
+
current: HTMLElement | null;
|
|
4355
|
+
}, { side, align, offset, padding, isOpen }: PositioningOptions) => PositioningState;
|
|
4356
|
+
|
|
4357
|
+
export declare const useScrollLock: (isLocked?: boolean) => void;
|
|
4358
|
+
|
|
2714
4359
|
/**
|
|
2715
4360
|
* Alt sayfayi <strong>gorunen</strong> alana yaslar.
|
|
2716
4361
|
*
|
|
@@ -2738,4 +4383,57 @@ export declare const useHanuiTheme: () => ThemeState;
|
|
|
2738
4383
|
*/
|
|
2739
4384
|
export declare const useSheetViewport: (isActive?: boolean) => void;
|
|
2740
4385
|
|
|
4386
|
+
/**
|
|
4387
|
+
* SANALLAŞTIRMA — yalnızca görünen satırları çiz.
|
|
4388
|
+
*
|
|
4389
|
+
* <h3>Ölçülen sorun</h3>
|
|
4390
|
+
* 1121 markalı bir `Combobox` listesinde DOM 1121 satır taşıyordu. Panel
|
|
4391
|
+
* açılışı mobilde gözle görülür şekilde donuyor, her tuş vuruşunda liste
|
|
4392
|
+
* yeniden çiziliyordu. Ekran okuyucu tarafında da bedeli var: 1121 öğelik bir
|
|
4393
|
+
* `listbox`ta gezinmek pratikte imkânsız.
|
|
4394
|
+
*
|
|
4395
|
+
* <h3>Neden kütüphane içinde</h3>
|
|
4396
|
+
* `react-window` / `@tanstack/virtual` bu işi yapıyor ve iyi yapıyor; ama
|
|
4397
|
+
* paketin tek çalışma zamanı bağımlılığının ikon seti olması bilinçli bir
|
|
4398
|
+
* karar. Burada gereken şey o kütüphanelerin küçük bir alt kümesi: SABİT
|
|
4399
|
+
* yükseklikli satırlar, tek eksen, yatay yok, değişken yükseklik yok.
|
|
4400
|
+
*
|
|
4401
|
+
* <h3>SABİT satır yüksekliği — ve bu bir kısıt</h3>
|
|
4402
|
+
* Değişken yükseklikli sanallaştırma her satırın ölçülmesini ve bir konum
|
|
4403
|
+
* haritası tutulmasını gerektiriyor. Açılır liste satırları zaten sabit
|
|
4404
|
+
* yükseklikte (`min-height` + tek satır metin); ikincil satır taşıyan
|
|
4405
|
+
* seçeneklerde ölçü `rowHeight` ile verilir.
|
|
4406
|
+
*
|
|
4407
|
+
* <h3>`overscan` neden var</h3>
|
|
4408
|
+
* Yalnızca görünen satırlar çizilseydi hızlı kaydırmada alt kenarda bir kare
|
|
4409
|
+
* boyunca boşluk görünüyordu — tarayıcı kaydırma olayını boyamadan sonra
|
|
4410
|
+
* veriyor. Görünür alanın üstüne ve altına birkaç satır fazladan çizilir.
|
|
4411
|
+
*
|
|
4412
|
+
* <h3>Klavye gezinmesiyle ilişkisi</h3>
|
|
4413
|
+
* Etkin seçeneği görünür tutan `scrollIntoView`, o seçenek ÇİZİLMEMİŞSE
|
|
4414
|
+
* çalışmaz. `scrollToIndex` bu yüzden var: klavyeyle listenin dibine giden
|
|
4415
|
+
* kullanıcı için konum önce hesaplanır, satır sonra çizilir.
|
|
4416
|
+
*/
|
|
4417
|
+
export declare const useVirtualList: (count: number, { rowHeight, overscan, isEnabled }?: {
|
|
4418
|
+
rowHeight?: number | undefined;
|
|
4419
|
+
overscan?: number | undefined;
|
|
4420
|
+
isEnabled?: boolean | undefined;
|
|
4421
|
+
}) => {
|
|
4422
|
+
scrollRef: RefObject<HTMLElement | null>;
|
|
4423
|
+
range: VirtualRange;
|
|
4424
|
+
scrollToIndex: (index: number) => void;
|
|
4425
|
+
measure: () => void;
|
|
4426
|
+
};
|
|
4427
|
+
|
|
4428
|
+
export declare type VirtualRange = {
|
|
4429
|
+
/** Çizilecek ilk öğenin dizini. */
|
|
4430
|
+
start: number;
|
|
4431
|
+
/** Çizilecek son öğenin dizini (dahil DEĞİL). */
|
|
4432
|
+
end: number;
|
|
4433
|
+
/** Listenin gerçek toplam yüksekliği — kaydırma çubuğu doğru boyda olmalı. */
|
|
4434
|
+
totalHeight: number;
|
|
4435
|
+
/** Görünen ilk öğenin üstünde bırakılacak boşluk. */
|
|
4436
|
+
offset: number;
|
|
4437
|
+
};
|
|
4438
|
+
|
|
2741
4439
|
export { }
|