tamga-ui 0.4.4 → 0.5.0
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/CHANGELOG.md +863 -0
- package/README.md +3 -1
- package/dist/blocks/count-row.d.ts +3 -8
- package/dist/blocks/count-row.d.ts.map +1 -1
- package/dist/blocks/count-row.js +3 -8
- package/dist/blocks/filter-bar.d.ts +42 -28
- package/dist/blocks/filter-bar.d.ts.map +1 -1
- package/dist/blocks/filter-bar.js +13 -5
- package/dist/blocks/index.d.ts +4 -17
- package/dist/blocks/index.d.ts.map +1 -1
- package/dist/blocks/index.js +4 -17
- package/dist/blocks/save-bar.d.ts +4 -12
- package/dist/blocks/save-bar.d.ts.map +1 -1
- package/dist/blocks/save-bar.js +4 -12
- package/dist/components/a11y.d.ts.map +1 -1
- package/dist/components/a11y.js +4 -15
- package/dist/components/advanced-input.d.ts +54 -48
- package/dist/components/advanced-input.d.ts.map +1 -1
- package/dist/components/advanced-input.js +64 -59
- package/dist/components/announcement.d.ts +34 -0
- package/dist/components/announcement.d.ts.map +1 -0
- package/dist/components/announcement.js +12 -0
- package/dist/components/appearance.d.ts +33 -1
- package/dist/components/appearance.d.ts.map +1 -1
- package/dist/components/appearance.js +78 -7
- package/dist/components/avatar.d.ts +28 -21
- package/dist/components/avatar.d.ts.map +1 -1
- package/dist/components/avatar.js +46 -22
- package/dist/components/badge.d.ts +54 -4
- package/dist/components/badge.d.ts.map +1 -1
- package/dist/components/badge.js +42 -9
- package/dist/components/bar.d.ts.map +1 -1
- package/dist/components/bar.js +4 -20
- package/dist/components/button.d.ts +15 -7
- package/dist/components/button.d.ts.map +1 -1
- package/dist/components/button.js +54 -8
- package/dist/components/chart.d.ts +5 -0
- package/dist/components/chart.d.ts.map +1 -1
- package/dist/components/chart.js +18 -11
- package/dist/components/checkbox.d.ts +23 -1
- package/dist/components/checkbox.d.ts.map +1 -1
- package/dist/components/checkbox.js +3 -4
- package/dist/components/chrome.d.ts +38 -54
- package/dist/components/chrome.d.ts.map +1 -1
- package/dist/components/chrome.js +55 -63
- package/dist/components/combobox.d.ts.map +1 -1
- package/dist/components/combobox.js +19 -3
- package/dist/components/data-table.d.ts +4 -4
- package/dist/components/data-table.d.ts.map +1 -1
- package/dist/components/data-table.js +15 -16
- package/dist/components/date-picker.d.ts.map +1 -1
- package/dist/components/date-picker.js +11 -4
- package/dist/components/disclosure.d.ts +17 -2
- package/dist/components/disclosure.d.ts.map +1 -1
- package/dist/components/disclosure.js +4 -8
- package/dist/components/display.d.ts +119 -94
- package/dist/components/display.d.ts.map +1 -1
- package/dist/components/display.js +103 -106
- package/dist/components/empty-state.d.ts +70 -52
- package/dist/components/empty-state.d.ts.map +1 -1
- package/dist/components/empty-state.js +40 -52
- package/dist/components/error-state.d.ts +21 -4
- package/dist/components/error-state.d.ts.map +1 -1
- package/dist/components/error-state.js +16 -6
- package/dist/components/file-upload.d.ts +45 -2
- package/dist/components/file-upload.d.ts.map +1 -1
- package/dist/components/file-upload.js +32 -7
- package/dist/components/gauge.d.ts +72 -9
- package/dist/components/gauge.d.ts.map +1 -1
- package/dist/components/gauge.js +52 -49
- package/dist/components/icons.d.ts +1 -1
- package/dist/components/icons.d.ts.map +1 -1
- package/dist/components/icons.js +4 -0
- package/dist/components/input.d.ts +21 -0
- package/dist/components/input.d.ts.map +1 -1
- package/dist/components/input.js +15 -1
- package/dist/components/layout.d.ts +47 -70
- package/dist/components/layout.d.ts.map +1 -1
- package/dist/components/layout.js +31 -73
- package/dist/components/link.d.ts +5 -10
- package/dist/components/link.d.ts.map +1 -1
- package/dist/components/live-scope.d.ts.map +1 -1
- package/dist/components/live-scope.js +5 -8
- package/dist/components/log-view.d.ts +32 -1
- package/dist/components/log-view.d.ts.map +1 -1
- package/dist/components/log-view.js +42 -15
- package/dist/components/number-input.d.ts +20 -2
- package/dist/components/number-input.d.ts.map +1 -1
- package/dist/components/number-input.js +32 -9
- package/dist/components/overlay.d.ts +69 -61
- package/dist/components/overlay.d.ts.map +1 -1
- package/dist/components/overlay.js +129 -78
- package/dist/components/pagination.d.ts.map +1 -1
- package/dist/components/pagination.js +12 -7
- package/dist/components/pie.d.ts.map +1 -1
- package/dist/components/pie.js +8 -7
- package/dist/components/primitives.d.ts +136 -6
- package/dist/components/primitives.d.ts.map +1 -1
- package/dist/components/primitives.js +73 -20
- package/dist/components/progress.d.ts +44 -9
- package/dist/components/progress.d.ts.map +1 -1
- package/dist/components/progress.js +21 -9
- package/dist/components/radio-group.d.ts.map +1 -1
- package/dist/components/radio-group.js +11 -12
- package/dist/components/rail-link.d.ts +17 -1
- package/dist/components/rail-link.d.ts.map +1 -1
- package/dist/components/rail-link.js +3 -3
- package/dist/components/rich-text.d.ts +8 -1
- package/dist/components/rich-text.d.ts.map +1 -1
- package/dist/components/rich-text.js +13 -19
- package/dist/components/says-bubble.d.ts +38 -0
- package/dist/components/says-bubble.d.ts.map +1 -0
- package/dist/components/says-bubble.js +6 -0
- package/dist/components/scroll-x.d.ts +23 -0
- package/dist/components/scroll-x.d.ts.map +1 -0
- package/dist/components/scroll-x.js +27 -0
- package/dist/components/section.d.ts +18 -1
- package/dist/components/section.d.ts.map +1 -1
- package/dist/components/section.js +12 -1
- package/dist/components/segmented.d.ts +17 -1
- package/dist/components/segmented.d.ts.map +1 -1
- package/dist/components/segmented.js +26 -6
- package/dist/components/skeleton.d.ts.map +1 -1
- package/dist/components/skeleton.js +1 -1
- package/dist/components/slider.d.ts +16 -2
- package/dist/components/slider.d.ts.map +1 -1
- package/dist/components/slider.js +12 -5
- package/dist/components/sparkline.d.ts +9 -2
- package/dist/components/sparkline.d.ts.map +1 -1
- package/dist/components/sparkline.js +9 -5
- package/dist/components/spinner.d.ts +16 -1
- package/dist/components/spinner.d.ts.map +1 -1
- package/dist/components/spinner.js +24 -1
- package/dist/components/square-picker.d.ts +4 -20
- package/dist/components/square-picker.d.ts.map +1 -1
- package/dist/components/square-picker.js +4 -20
- package/dist/components/stacked-bar.d.ts.map +1 -1
- package/dist/components/stacked-bar.js +5 -4
- package/dist/components/surface.d.ts +32 -3
- package/dist/components/surface.d.ts.map +1 -1
- package/dist/components/surface.js +11 -4
- package/dist/components/switch.d.ts +14 -1
- package/dist/components/switch.d.ts.map +1 -1
- package/dist/components/switch.js +2 -3
- package/dist/components/tabs.d.ts +35 -11
- package/dist/components/tabs.d.ts.map +1 -1
- package/dist/components/tabs.js +48 -5
- package/dist/components/timeline-strip.d.ts +28 -3
- package/dist/components/timeline-strip.d.ts.map +1 -1
- package/dist/components/timeline-strip.js +19 -8
- package/dist/components/tone.d.ts +51 -19
- package/dist/components/tone.d.ts.map +1 -1
- package/dist/components/tone.js +69 -15
- package/dist/components/tree-select.d.ts.map +1 -1
- package/dist/components/tree-select.js +10 -3
- package/dist/fonts/LICENSE-jetbrains-mono.txt +93 -0
- package/dist/fonts/LICENSE-onest.txt +93 -0
- package/dist/fonts/LICENSE-red-hat-display.txt +93 -0
- package/dist/fonts/jetbrains-mono-latin-ext-wght-normal.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-latin-wght-normal.woff2 +0 -0
- package/dist/fonts/onest-latin-ext-wght-normal.woff2 +0 -0
- package/dist/fonts/onest-latin-wght-normal.woff2 +0 -0
- package/dist/fonts/red-hat-display-latin-ext-wght-normal.woff2 +0 -0
- package/dist/fonts/red-hat-display-latin-wght-normal.woff2 +0 -0
- package/dist/fonts.css +54 -0
- package/dist/index.d.ts +10 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -6
- package/dist/kit.css +3155 -648
- package/dist/lib/color.d.ts +8 -19
- package/dist/lib/color.d.ts.map +1 -1
- package/dist/lib/color.js +8 -19
- package/dist/lib/data-props.d.ts +4 -15
- package/dist/lib/data-props.d.ts.map +1 -1
- package/dist/lib/data-props.js +4 -15
- package/dist/lib/image.d.ts +4 -20
- package/dist/lib/image.d.ts.map +1 -1
- package/dist/lib/image.js +4 -20
- package/dist/lib/palette.d.ts +16 -20
- package/dist/lib/palette.d.ts.map +1 -1
- package/dist/lib/palette.js +136 -71
- package/dist/lib/scroll-lock.d.ts +4 -14
- package/dist/lib/scroll-lock.d.ts.map +1 -1
- package/dist/lib/scroll-lock.js +4 -14
- package/dist/patterns/app-shell.d.ts.map +1 -1
- package/dist/patterns/app-shell.js +4 -13
- package/dist/patterns/appearance-template.d.ts +20 -15
- package/dist/patterns/appearance-template.d.ts.map +1 -1
- package/dist/patterns/appearance-template.js +29 -8
- package/dist/patterns/list-template.d.ts.map +1 -1
- package/dist/patterns/list-template.js +1 -1
- package/dist/patterns/overview-template.d.ts.map +1 -1
- package/dist/patterns/overview-template.js +1 -1
- package/dist/patterns/settings-template.d.ts +1 -12
- package/dist/patterns/settings-template.d.ts.map +1 -1
- package/dist/patterns/settings-template.js +2 -2
- package/dist/patterns/shared.d.ts.map +1 -1
- package/dist/patterns/shared.js +8 -1
- package/dist/styles.css +2 -1
- package/dist/theme.css +94 -261
- package/package.json +3 -1
- package/dist/components/control-base.d.ts +0 -7
- package/dist/components/control-base.d.ts.map +0 -1
- package/dist/components/control-base.js +0 -6
|
@@ -7,7 +7,7 @@ import { type Tone } from "./tone.js";
|
|
|
7
7
|
*
|
|
8
8
|
* Gerekçe: docs/gerekce/05-yuzey-ve-kabuk.md
|
|
9
9
|
*/
|
|
10
|
-
export declare function Descriptions({ items, layout, className, ...rest }: {
|
|
10
|
+
export declare function Descriptions({ items, layout, split, className, ...rest }: {
|
|
11
11
|
items: readonly ({
|
|
12
12
|
term: string;
|
|
13
13
|
value: ReactNode;
|
|
@@ -18,58 +18,27 @@ export declare function Descriptions({ items, layout, className, ...rest }: {
|
|
|
18
18
|
* kartın içinde.
|
|
19
19
|
*/
|
|
20
20
|
layout?: "wide" | "compact";
|
|
21
|
+
/**
|
|
22
|
+
* Break the list into as many columns as fit. A six-row list at page width leaves the right
|
|
23
|
+
* half empty; split, it reads as two short lists rather than one long one. Each column keeps
|
|
24
|
+
* its own label column, so the values still line up. TR: Listeyi sığdığı kadar sütuna böl.
|
|
25
|
+
* Sayfa genişliğinde altı satırlık bir liste sağ yarıyı boş bırakıyor; bölününce uzun bir
|
|
26
|
+
* liste değil iki kısa liste okunuyor. Her sütun kendi etiket sütununu koruyor, yani değerler
|
|
27
|
+
* yine hizalı.
|
|
28
|
+
*/
|
|
29
|
+
split?: boolean;
|
|
21
30
|
className?: string;
|
|
22
31
|
/** `data-*` hooks pass through. TR: `data-*` kancaları geçiyor. */
|
|
23
32
|
[k: `data-${string}`]: unknown;
|
|
24
33
|
}): import("react").JSX.Element;
|
|
25
34
|
/**
|
|
26
|
-
* Tek bir sayı, büyük.
|
|
27
|
-
*
|
|
28
|
-
* `
|
|
29
|
-
* iskelet, var olmayan bir şeyin yerini tutuyordu. Kitin en tuhaf açığıydı.
|
|
30
|
-
*
|
|
31
|
-
* TIKLANABİLİR OLMASI SONRADAN GELDİ, ve gelmek zorundaydı. İlk hâli yalnız
|
|
32
|
-
* okunuyordu; oysa bir panodaki sayı neredeyse hiçbir zaman salt okunur
|
|
33
|
-
* değildir. Ölçüldü: bir ürün panelinde bu karo iki kez elle yeniden yazılmış,
|
|
34
|
-
* çünkü biri bir EKRAN AÇIYOR ("37 iade bekliyor" → iade listesi), öteki bir
|
|
35
|
-
* FİLTRE UYGULUYOR (aynı listeyi o adıma indiriyor). Kitin karosu ikisini de
|
|
36
|
-
* yapamadığı için iki kopya doğdu ve ikisi birbirine benzemez oldu. Yeteneği
|
|
37
|
-
* eksik bir bileşen, olmayan bir bileşenden daha çok kopya üretiyor.
|
|
38
|
-
*
|
|
39
|
-
* ÜÇ HÂL, VE SEMANTİK ELEMAN HER BİRİNDE FARKLI:
|
|
40
|
-
*
|
|
41
|
-
* okunur `<div>` — sayı bir bilgi
|
|
42
|
-
* `href` `<a>` — sayı bir yere gidiyor
|
|
43
|
-
* `onClick` `<button>` — sayı bir şeyi değiştiriyor, `pressed` ile açık/kapalı
|
|
35
|
+
* Tek bir sayı, büyük. Üç hâl, üç ayrı eleman: okunur `<div>`, `href` ile
|
|
36
|
+
* `<a>`, `onClick` ile `<button>`. Yönlendiren bir karo bir EKRAN açıyor,
|
|
37
|
+
* `pressed` olan bir FİLTRE uyguluyor; ikisi ayrı sözleşme.
|
|
44
38
|
*
|
|
45
|
-
*
|
|
46
|
-
* ve ekran okuyucunun hiç duyurmadığı bir kart üretir.
|
|
47
|
-
*
|
|
48
|
-
* FİZİK YALNIZ TIKLANABİLİR HÂLDE. Kitin 1. yasası (kenar + kaymış gölge,
|
|
49
|
-
* hover'da yükselme, basınca oturma) tıklanan şeyler içindir; okunan bir
|
|
50
|
-
* karonun hover'da oynaması, tıklanabilir olduğu yalanını söyler.
|
|
51
|
-
*
|
|
52
|
-
* Sayı `tabular-nums`: değişen bir sayaç, rakam genişlikleri eşit olmadığı
|
|
53
|
-
* sürece her güncellemede yatay olarak zıplar.
|
|
54
|
-
*
|
|
55
|
-
* `delta` bir yön taşır ama İYİ/KÖTÜ taşımaz — artan bir hata oranı da
|
|
56
|
-
* artıştır. Anlamı `better` veriyor: yükselmesi mi iyi, düşmesi mi.
|
|
57
|
-
*
|
|
58
|
-
* SAYI HER ZAMAN MÜREKKEP RENGİNDE. Bir süre `attention` diye bir bayrak
|
|
59
|
-
* vardı ve sayıyı kritik renge boyuyordu; kaldırıldı. Tek tüketicisinde beş
|
|
60
|
-
* karonun üçü kırmızıydı, ve üç kırmızı hiçbir şeyi öne çıkarmıyor — yalnız
|
|
61
|
-
* paneli alarm hâlinde gösteriyor. Bir sayının kötü olduğunu söylemenin yeri
|
|
62
|
-
* `delta` (yönü ve anlamı olan bir değişim) ya da karonun açtığı ekranın
|
|
63
|
-
* kendisi; karonun rengi değil.
|
|
64
|
-
*
|
|
65
|
-
* `accent` DENENDİ VE KALDIRILDI. Karonun sol kenarında verinin kendi rengini
|
|
66
|
-
* (bir iade adımının rengi) taşıyan ince bir şerit vardı. Tek tüketicisi vardı
|
|
67
|
-
* ve o tüketici reddetti: renk zaten listedeki rozette ve çiplerde duruyordu,
|
|
68
|
-
* kartın kenarında üçüncü kez söylenince aynı bileşen iki ekranda farklı
|
|
69
|
-
* görünüyordu. Tüketicisi olmayan bir prop, `SkeletonKpi`ın yıllarca yaşadığı
|
|
70
|
-
* boşluğun aynısı: duruyor, belgeleniyor, hiçbir şeyin yerini tutmuyor.
|
|
39
|
+
* Doküman: /docs/kpi
|
|
71
40
|
*/
|
|
72
|
-
export declare function Kpi({ label, value, unit, icon, note, delta, better, chart, href, onClick, pressed, linkComponent: Link, className, ...rest }: {
|
|
41
|
+
export declare function Kpi({ label, value, unit, icon, note, delta, better, chart, look, href, onClick, pressed, iconTone, linkComponent: Link, className, ...rest }: {
|
|
73
42
|
label: string;
|
|
74
43
|
value: string | number;
|
|
75
44
|
unit?: string;
|
|
@@ -83,12 +52,33 @@ export declare function Kpi({ label, value, unit, icon, note, delta, better, cha
|
|
|
83
52
|
better?: "up" | "down";
|
|
84
53
|
/** An inline chart, such as a `Sparkline`. TR: Satır içi grafik, `Sparkline` gibi. */
|
|
85
54
|
chart?: ReactNode;
|
|
55
|
+
/**
|
|
56
|
+
* `tile` the shape a KPI grid is built from: icon tile on the left, label over the number.
|
|
57
|
+
* `detail` the taller card, for a number that carries a curve and a change beside it: icon and
|
|
58
|
+
* label on top, the number and the chart side by side, the delta in a chip underneath. TR:
|
|
59
|
+
* `tile`, bir KPI ızgarasının kurulduğu biçim: solda ikon karosu, sayının üstünde etiket.
|
|
60
|
+
* `detail`, yanında bir eğri ve bir değişim taşıyan sayı için daha uzun kart: ikon ve etiket
|
|
61
|
+
* üstte, sayı ile grafik yan yana, değişim altta bir çipte.
|
|
62
|
+
*/
|
|
63
|
+
look?: "tile" | "detail";
|
|
86
64
|
/** Where the number leads. Makes the tile a link. TR: Sayının götürdüğü yer. Karoyu bağlantı yapar. */
|
|
87
65
|
href?: string;
|
|
88
66
|
/** What the number toggles. Makes the tile a button. TR: Sayının açıp kapadığı şey. Karoyu düğme yapar. */
|
|
89
67
|
onClick?: () => void;
|
|
90
68
|
/** Whether that toggle is currently on. TR: O anahtarın şu an açık olup olmadığı. */
|
|
91
69
|
pressed?: boolean;
|
|
70
|
+
/**
|
|
71
|
+
* The tone the icon box wears. TR: İkon kutusunun giydiği ton.
|
|
72
|
+
*
|
|
73
|
+
* It says what KIND of queue this tile counts, not whether the number is
|
|
74
|
+
* good: a row of four tiles all in the same grey reads as one block, and the
|
|
75
|
+
* eye has to read every label to tell them apart. Left out, the box stays
|
|
76
|
+
* transparent. TR: Bu karonun NE TÜR bir kuyruğu saydığını söylüyor, sayının
|
|
77
|
+
* iyi olup olmadığını değil: aynı gride duran dört karo tek bir blok gibi
|
|
78
|
+
* okunuyor ve göz ayırt etmek için her etiketi okumak zorunda kalıyor.
|
|
79
|
+
* Verilmezse kutu şeffaf kalıyor.
|
|
80
|
+
*/
|
|
81
|
+
iconTone?: Tone;
|
|
92
82
|
/** The router's link, so the tile does not force a full page load. TR: Yönlendiricinin bağlantısı, karo tam sayfa yüklemeye zorlamasın diye. */
|
|
93
83
|
linkComponent?: LinkComponent;
|
|
94
84
|
className?: string;
|
|
@@ -96,16 +86,12 @@ export declare function Kpi({ label, value, unit, icon, note, delta, better, cha
|
|
|
96
86
|
[k: `data-${string}`]: unknown;
|
|
97
87
|
}): import("react").JSX.Element;
|
|
98
88
|
/**
|
|
99
|
-
* KPI karolarının ızgarası.
|
|
89
|
+
* KPI karolarının ızgarası. Sütun sayısını KAP veriyor: karo 210 pikselin
|
|
90
|
+
* altına inmiyor, sığmayan alt satıra geçiyor. Sayılan bir sütun sayısı bir
|
|
91
|
+
* süre buradaydı ve kabı değil EKRANI ölçüyordu · dar bir sütunun içinde dört
|
|
92
|
+
* karo açıp sayıları kırpıyordu.
|
|
100
93
|
*
|
|
101
|
-
*
|
|
102
|
-
* (`grid gap-4 sm:grid-cols-2 xl:grid-cols-5`) ve ekrandan ekrana tutmuyordu —
|
|
103
|
-
* biri dörtlü, öteki beşli, bir üçüncüsü boşluğu 3 veriyordu. Izgara karonun
|
|
104
|
-
* kendi işi değil ama karo KÜMESİNİN işi, ve tek yerde durunca hepsi tutuyor.
|
|
105
|
-
*
|
|
106
|
-
* SÜTUN SAYISI VERİLMİYOR, SAYILIYOR: kaç karo varsa o kadar sütun (en çok
|
|
107
|
-
* altı). Elle verilen bir sütun sayısı, karo eklenince yalnız o ekranda
|
|
108
|
-
* güncelleniyor ve tek başına kalan bir karo tam satırı kaplıyor.
|
|
94
|
+
* Doküman: /docs/kpi
|
|
109
95
|
*/
|
|
110
96
|
export declare function KpiGrid({ children, className, ...rest }: {
|
|
111
97
|
children: ReactNode;
|
|
@@ -113,19 +99,21 @@ export declare function KpiGrid({ children, className, ...rest }: {
|
|
|
113
99
|
[k: `data-${string}`]: unknown;
|
|
114
100
|
}): import("react").JSX.Element;
|
|
115
101
|
/**
|
|
116
|
-
* Kod bloğu, kopyalanabilir.
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
* kurulum komutu. Üçünde de kullanıcının yaptığı tek şey KOPYALAMAK — o yüzden
|
|
120
|
-
* kopyalama düğmesi bir seçenek değil, bileşenin kendisi.
|
|
102
|
+
* Kod bloğu, kopyalanabilir. Kopyalama panosu her yerde çalışmıyor (HTTPS
|
|
103
|
+
* olmayan kaynak, izin verilmemiş); başarısızlık SESSİZ olmamalı, yoksa
|
|
104
|
+
* kullanıcı kopyalandığını sanıp boş yapıştırıyor.
|
|
121
105
|
*
|
|
122
|
-
*
|
|
123
|
-
* izin verilmemişse). Başarısızlık SESSİZ olmamalı: düğme metni değişmezse
|
|
124
|
-
* kullanıcı kopyalandığını sanır ve boş yapıştırır.
|
|
106
|
+
* Doküman: /docs/code
|
|
125
107
|
*/
|
|
126
|
-
export declare function Code({ children, labels, className, ...rest }: {
|
|
108
|
+
export declare function Code({ children, filename, labels, className, ...rest }: {
|
|
127
109
|
/** The text to be copied itself. TR: Kopyalanacak metnin kendisi. */
|
|
128
110
|
children: string;
|
|
111
|
+
/**
|
|
112
|
+
* The name on the strip: "webhook.js", "docker-compose.yml". Left out, the strip still stands
|
|
113
|
+
* and holds the copy button. TR: Şeritteki ad. Verilmezse şerit yine duruyor ve kopyala
|
|
114
|
+
* düğmesini taşıyor.
|
|
115
|
+
*/
|
|
116
|
+
filename?: string;
|
|
129
117
|
labels: {
|
|
130
118
|
copy: string;
|
|
131
119
|
copied: string;
|
|
@@ -141,23 +129,56 @@ export declare function Code({ children, labels, className, ...rest }: {
|
|
|
141
129
|
* `<kbd>` KULLANILIYOR, `<span>` değil: bir ekran okuyucu için "Ctrl" ile
|
|
142
130
|
* "bir tuşa basılacak" arasındaki fark bu elemanda yaşıyor.
|
|
143
131
|
*/
|
|
144
|
-
export declare function Kbd({ children, className }: {
|
|
132
|
+
export declare function Kbd({ children, inline, className, }: {
|
|
145
133
|
children: ReactNode;
|
|
134
|
+
/**
|
|
135
|
+
* The quieter key, for a row in a shortcut list. Twenty layered boxes down a list turn it into
|
|
136
|
+
* a keypad. TR: Daha sessiz tuş, bir kısayol listesinin satırı için. Bir listede yirmi katmanlı
|
|
137
|
+
* kutu, listeyi bir tuş takımına çeviriyor.
|
|
138
|
+
*/
|
|
139
|
+
inline?: boolean;
|
|
146
140
|
className?: string;
|
|
147
141
|
}): import("react").JSX.Element;
|
|
148
142
|
/**
|
|
149
|
-
* Sayaç rozeti
|
|
143
|
+
* Sayaç rozeti: bir ikonun köşesindeki SAYI (`StatusChip` bir DURUM taşır).
|
|
144
|
+
* `max` üstünde "+" ile kesiliyor, yoksa dört hane kutuyu şişirip altındaki
|
|
145
|
+
* ikonu eziyor. Sıfır gösterilmiyor.
|
|
150
146
|
*
|
|
151
|
-
*
|
|
152
|
-
|
|
147
|
+
* Doküman: /docs/badge
|
|
148
|
+
*/
|
|
149
|
+
/**
|
|
150
|
+
* Etiket rozeti · bir özelliğin durumu: BETA, YENİ, PRO.
|
|
153
151
|
*
|
|
154
|
-
* `
|
|
155
|
-
*
|
|
152
|
+
* SAYACIN (`Badge`) KARDEŞİ AMA AYNI ŞEY DEĞİL: sayaç bir MİKTAR taşıyor ve
|
|
153
|
+
* okunduktan sonra kayboluyor; etiket bir DURUM taşıyor ve yerinde duruyor.
|
|
154
|
+
* İkisini tek bileşene koymak, "sayı verilmemişse etiket" gibi bir kural
|
|
155
|
+
* demekti.
|
|
156
156
|
*
|
|
157
|
-
*
|
|
157
|
+
* Gerekçe: docs/gerekce/06-isaret-ve-ton.md
|
|
158
158
|
*/
|
|
159
|
-
export declare function
|
|
160
|
-
|
|
159
|
+
export declare function Tag({ children, look, className, ...rest }: {
|
|
160
|
+
children: ReactNode;
|
|
161
|
+
/**
|
|
162
|
+
* `dashed` not real yet (beta, coming), `solid` the loudest one, for what is new right now,
|
|
163
|
+
* `outline` the quiet standing fact (a plan name, a tier). TR: `dashed` henüz gerçek değil
|
|
164
|
+
* (beta, yakında), `solid` en yükseği · şu anda yeni olan için, `outline` ise sessiz duran
|
|
165
|
+
* gerçek (bir plan adı, bir kademe).
|
|
166
|
+
*/
|
|
167
|
+
look?: "dashed" | "solid" | "outline";
|
|
168
|
+
className?: string;
|
|
169
|
+
/** `data-*` hooks pass through. TR: `data-*` kancaları geçiyor. */
|
|
170
|
+
[k: `data-${string}`]: unknown;
|
|
171
|
+
}): import("react").JSX.Element;
|
|
172
|
+
export declare function Badge({ count, max, tone, dot, label, className, children, ...rest }: {
|
|
173
|
+
/** The number. Not needed when `dot` is set. TR: Sayı. `dot` verildiğinde gerekmiyor. */
|
|
174
|
+
count?: number;
|
|
175
|
+
/**
|
|
176
|
+
* Show a mark with NO number. Use it when the answer is "there is something new" rather than
|
|
177
|
+
* "there are four": a number nobody will act on is a number nobody reads. TR: Sayısız bir
|
|
178
|
+
* işaret göster. Cevap "dört tane var" değil "yeni bir şey var" olduğunda:
|
|
179
|
+
* kimsenin üzerine hareket etmeyeceği bir sayı, kimsenin okumadığı bir sayıdır.
|
|
180
|
+
*/
|
|
181
|
+
dot?: boolean;
|
|
161
182
|
max?: number;
|
|
162
183
|
tone?: Tone;
|
|
163
184
|
/**
|
|
@@ -175,34 +196,19 @@ export declare function Badge({ count, max, tone, label, className, children, ..
|
|
|
175
196
|
[k: `data-${string}`]: unknown;
|
|
176
197
|
}): import("react").JSX.Element;
|
|
177
198
|
/**
|
|
178
|
-
* Bir adım: kimliği ve çevrilmiş etiketi.
|
|
179
|
-
*
|
|
180
|
-
*
|
|
181
|
-
* bir zamanlar düz `string[]` idi: kimlik yoktu, React anahtarı ÇEVRİLMİŞ
|
|
182
|
-
* ETİKETTİ, ve iki adım aynı etiketi taşıdığında ya da dil değiştiğinde
|
|
183
|
-
* düğümler yeniden kuruluyordu. Kitin kendi kuralı bunu zaten söylüyor:
|
|
184
|
-
* bir öğenin adı etiketi değildir, çünkü etiket çevrilir ve değişir.
|
|
185
|
-
*
|
|
186
|
-
* `key` ve `label` DIŞINDAKİ her şey o adımın `<li>`sine iniyor, yani bir
|
|
187
|
-
* adım testin ya da stilin ihtiyaç duyduğu kancayı taşıyabiliyor. Kardeşi
|
|
188
|
-
* `Segmented` ile aynı sözleşme; ikisinin farklı olması bir asimetriydi.
|
|
199
|
+
* Bir adım: kimliği ve çevrilmiş etiketi. Kimlik etiketten AYRI, çünkü etiket
|
|
200
|
+
* çevriliyor; React anahtarı olarak kullanılırsa dil değişince düğümler
|
|
201
|
+
* yeniden kuruluyor. `key`/`label` dışındaki her şey adımın `<li>`sine iniyor.
|
|
189
202
|
*/
|
|
190
203
|
export type Step = {
|
|
191
204
|
key: string;
|
|
192
205
|
label: string;
|
|
193
206
|
} & Record<string, unknown>;
|
|
194
207
|
/**
|
|
195
|
-
* Adım göstergesi.
|
|
208
|
+
* Adım göstergesi. `<ol>` kullanılıyor: adımlar SIRALI ve sıra bilgi taşıyor;
|
|
209
|
+
* `<div>`lerle ekran okuyucu "öğe 2 / 3" diyemiyor.
|
|
196
210
|
*
|
|
197
|
-
*
|
|
198
|
-
* kaç adım kaldığını bilmiyor; sihirbazın varlık sebebi tam olarak budur.
|
|
199
|
-
*
|
|
200
|
-
* `<ol>` kullanılıyor: adımlar SIRALI ve sıra bilgi taşıyor. Ekran okuyucu
|
|
201
|
-
* "3 öğeli liste, öğe 2" der; `<div>`'lerle bu bilgi kaybolur.
|
|
202
|
-
*
|
|
203
|
-
* Tamamlanan adım bir onay işareti alıyor, aktif olan aksan kenarı, gelecek
|
|
204
|
-
* olan sönük. Üç durum üç ayrı görsel dil — çünkü "neredeyim" ve "ne kaldı"
|
|
205
|
-
* ayrı iki soru.
|
|
211
|
+
* Doküman: /docs/steps
|
|
206
212
|
*/
|
|
207
213
|
export declare function Steps({ steps, current, className, ...rest }: {
|
|
208
214
|
/**
|
|
@@ -218,4 +224,23 @@ export declare function Steps({ steps, current, className, ...rest }: {
|
|
|
218
224
|
/** `data-*` hooks pass through. TR: `data-*` kancaları geçiyor. */
|
|
219
225
|
[k: `data-${string}`]: unknown;
|
|
220
226
|
}): import("react").JSX.Element;
|
|
227
|
+
/**
|
|
228
|
+
* Rise — sayı sıfırdan hedefe YÜKSELEREK geliyor.
|
|
229
|
+
*
|
|
230
|
+
* Gerekçe: docs/gerekce/03-grafik-ve-olcum.md
|
|
231
|
+
*/
|
|
232
|
+
export declare function Rise({ value, format, duration, className, ...rest }: {
|
|
233
|
+
value: number;
|
|
234
|
+
/**
|
|
235
|
+
* How the number is written on the way up, not only at the end: the kit knows no currency and
|
|
236
|
+
* no thousands separator. TR: Sayının yolda nasıl yazıldığı, yalnız sonunda değil: kit ne para
|
|
237
|
+
* birimi bilir ne binlik ayracı.
|
|
238
|
+
*/
|
|
239
|
+
format?: (n: number) => string;
|
|
240
|
+
/** How long the climb takes, in ms. TR: Tırmanışın süresi, ms. */
|
|
241
|
+
duration?: number;
|
|
242
|
+
className?: string;
|
|
243
|
+
/** `data-*` hooks pass through. TR: `data-*` kancaları geçiyor. */
|
|
244
|
+
[k: `data-${string}`]: unknown;
|
|
245
|
+
}): import("react").JSX.Element;
|
|
221
246
|
//# sourceMappingURL=display.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../src/components/display.tsx"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../src/components/display.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,88 +1,51 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { createElement as _createElement } from "react";
|
|
4
|
-
import {
|
|
4
|
+
import { useEffect, useRef, useState } from "react";
|
|
5
5
|
import { cn } from "../lib/cn.js";
|
|
6
6
|
import { dataProps } from "../lib/data-props.js";
|
|
7
7
|
import { Icon } from "./icon.js";
|
|
8
8
|
import { PlainLink as PlainAnchor } from "./link.js";
|
|
9
|
-
import { Check,
|
|
9
|
+
import { Check, Copy } from "./icons.js";
|
|
10
10
|
import { toneOf } from "./tone.js";
|
|
11
|
-
/*
|
|
12
|
-
|
|
13
|
-
*
|
|
14
|
-
* Beşi de üründe HAM yazılmış hâlde duruyordu — `<dl>` beş dosyada, `<code>`
|
|
15
|
-
* sekiz dosyada, KPI karosu kendi 28 satırında. Yani tasarımları zaten
|
|
16
|
-
* verilmişti; eksik olan tek şey, o tasarımın bir kez yazılmış olmasıydı.
|
|
17
|
-
* ------------------------------------------------------------------ */
|
|
11
|
+
/* Okunacak şeyler: anahtar/değer, sayı, kod, adım, sayaç, tuş.
|
|
12
|
+
Gerekçeler: docs/gerekce/02-veri-ve-liste.md */
|
|
18
13
|
/**
|
|
19
14
|
* Anahtar/değer listesi — detay sayfalarının omurgası.
|
|
20
15
|
*
|
|
21
16
|
* Gerekçe: docs/gerekce/05-yuzey-ve-kabuk.md
|
|
22
17
|
*/
|
|
23
|
-
export function Descriptions({ items, layout = "wide", className, ...rest }) {
|
|
24
|
-
return (_jsx("dl", { ...dataProps(rest), className: cn("grid", layout === "wide"
|
|
25
|
-
? "gap-x-8
|
|
26
|
-
: "gap-x-4
|
|
18
|
+
export function Descriptions({ items, layout = "wide", split = false, className, ...rest }) {
|
|
19
|
+
return (_jsx("dl", { ...dataProps(rest), className: cn("grid", split && "tamga-desc-split", layout === "wide"
|
|
20
|
+
? "gap-x-8 sm:grid-cols-[minmax(0,14rem)_minmax(0,1fr)]"
|
|
21
|
+
: "gap-x-4 sm:grid-cols-[minmax(0,8rem)_minmax(0,1fr)]", className), children: items.map(({ term, value: deger, mono, ...rest }) => (_createElement("div", { ...rest, key: term, className: "col-span-full grid grid-cols-subgrid items-baseline gap-y-1 border-b border-dashed border-line py-3 last:border-b-0" },
|
|
27
22
|
_jsx("dt", { className: "text-small text-ink-faint", children: term }),
|
|
28
|
-
_jsx("dd", { className: cn("min-w-0 text-body text-ink", mono && "font-mono tabular-nums"), children: deger })))) }));
|
|
23
|
+
_jsx("dd", { className: cn("min-w-0 text-body font-semibold text-ink", mono && "font-mono tabular-nums"), children: deger })))) }));
|
|
29
24
|
}
|
|
30
25
|
/**
|
|
31
|
-
* Tek bir sayı, büyük.
|
|
32
|
-
*
|
|
33
|
-
* `
|
|
34
|
-
* iskelet, var olmayan bir şeyin yerini tutuyordu. Kitin en tuhaf açığıydı.
|
|
35
|
-
*
|
|
36
|
-
* TIKLANABİLİR OLMASI SONRADAN GELDİ, ve gelmek zorundaydı. İlk hâli yalnız
|
|
37
|
-
* okunuyordu; oysa bir panodaki sayı neredeyse hiçbir zaman salt okunur
|
|
38
|
-
* değildir. Ölçüldü: bir ürün panelinde bu karo iki kez elle yeniden yazılmış,
|
|
39
|
-
* çünkü biri bir EKRAN AÇIYOR ("37 iade bekliyor" → iade listesi), öteki bir
|
|
40
|
-
* FİLTRE UYGULUYOR (aynı listeyi o adıma indiriyor). Kitin karosu ikisini de
|
|
41
|
-
* yapamadığı için iki kopya doğdu ve ikisi birbirine benzemez oldu. Yeteneği
|
|
42
|
-
* eksik bir bileşen, olmayan bir bileşenden daha çok kopya üretiyor.
|
|
43
|
-
*
|
|
44
|
-
* ÜÇ HÂL, VE SEMANTİK ELEMAN HER BİRİNDE FARKLI:
|
|
45
|
-
*
|
|
46
|
-
* okunur `<div>` — sayı bir bilgi
|
|
47
|
-
* `href` `<a>` — sayı bir yere gidiyor
|
|
48
|
-
* `onClick` `<button>` — sayı bir şeyi değiştiriyor, `pressed` ile açık/kapalı
|
|
49
|
-
*
|
|
50
|
-
* Üçünü tek elemanla yapmak (her şey `<div onClick>`) klavyeyle gezilemeyen
|
|
51
|
-
* ve ekran okuyucunun hiç duyurmadığı bir kart üretir.
|
|
26
|
+
* Tek bir sayı, büyük. Üç hâl, üç ayrı eleman: okunur `<div>`, `href` ile
|
|
27
|
+
* `<a>`, `onClick` ile `<button>`. Yönlendiren bir karo bir EKRAN açıyor,
|
|
28
|
+
* `pressed` olan bir FİLTRE uyguluyor; ikisi ayrı sözleşme.
|
|
52
29
|
*
|
|
53
|
-
*
|
|
54
|
-
* hover'da yükselme, basınca oturma) tıklanan şeyler içindir; okunan bir
|
|
55
|
-
* karonun hover'da oynaması, tıklanabilir olduğu yalanını söyler.
|
|
56
|
-
*
|
|
57
|
-
* Sayı `tabular-nums`: değişen bir sayaç, rakam genişlikleri eşit olmadığı
|
|
58
|
-
* sürece her güncellemede yatay olarak zıplar.
|
|
59
|
-
*
|
|
60
|
-
* `delta` bir yön taşır ama İYİ/KÖTÜ taşımaz — artan bir hata oranı da
|
|
61
|
-
* artıştır. Anlamı `better` veriyor: yükselmesi mi iyi, düşmesi mi.
|
|
62
|
-
*
|
|
63
|
-
* SAYI HER ZAMAN MÜREKKEP RENGİNDE. Bir süre `attention` diye bir bayrak
|
|
64
|
-
* vardı ve sayıyı kritik renge boyuyordu; kaldırıldı. Tek tüketicisinde beş
|
|
65
|
-
* karonun üçü kırmızıydı, ve üç kırmızı hiçbir şeyi öne çıkarmıyor — yalnız
|
|
66
|
-
* paneli alarm hâlinde gösteriyor. Bir sayının kötü olduğunu söylemenin yeri
|
|
67
|
-
* `delta` (yönü ve anlamı olan bir değişim) ya da karonun açtığı ekranın
|
|
68
|
-
* kendisi; karonun rengi değil.
|
|
69
|
-
*
|
|
70
|
-
* `accent` DENENDİ VE KALDIRILDI. Karonun sol kenarında verinin kendi rengini
|
|
71
|
-
* (bir iade adımının rengi) taşıyan ince bir şerit vardı. Tek tüketicisi vardı
|
|
72
|
-
* ve o tüketici reddetti: renk zaten listedeki rozette ve çiplerde duruyordu,
|
|
73
|
-
* kartın kenarında üçüncü kez söylenince aynı bileşen iki ekranda farklı
|
|
74
|
-
* görünüyordu. Tüketicisi olmayan bir prop, `SkeletonKpi`ın yıllarca yaşadığı
|
|
75
|
-
* boşluğun aynısı: duruyor, belgeleniyor, hiçbir şeyin yerini tutmuyor.
|
|
30
|
+
* Doküman: /docs/kpi
|
|
76
31
|
*/
|
|
77
|
-
export function Kpi({ label, value, unit, icon, note, delta, better = "up", chart, href, onClick, pressed, linkComponent: Link = PlainAnchor, className, ...rest }) {
|
|
32
|
+
export function Kpi({ label, value, unit, icon, note, delta, better = "up", chart, look = "tile", href, onClick, pressed, iconTone, linkComponent: Link = PlainAnchor, className, ...rest }) {
|
|
78
33
|
const tone = delta === undefined || delta === 0
|
|
79
34
|
? "neutral"
|
|
80
35
|
: (delta > 0) === (better === "up")
|
|
81
36
|
? "positive"
|
|
82
37
|
: "danger";
|
|
83
38
|
const c = toneOf(tone);
|
|
84
|
-
const
|
|
85
|
-
|
|
39
|
+
const karo = icon ? (_jsx("span", { ...dataProps(rest), className: "tamga-kpi-tile", style: iconTone ? { background: toneOf(iconTone).bg, color: toneOf(iconTone).fg } : undefined, "aria-hidden": true, children: _jsx(Icon, { icon: icon, size: look === "detail" ? "sm" : "base" }) })) : null;
|
|
40
|
+
/* DEĞER MONO DEĞİL DISPLAY YÜZÜNDE, ve ağırlığı en üst basamakta. Mono, bir
|
|
41
|
+
SÜTUNDA okunan sayılar için: orada rakam genişliğinin eşit olması hizayı
|
|
42
|
+
kuruyor. Bir KPI karosunda sütun yok, tek bir sayı var ve işi okunmak
|
|
43
|
+
değil ÇARPMAK. */
|
|
44
|
+
const sayi = (_jsx("span", { className: cn("font-display leading-none font-extrabold tabular-nums text-ink", look === "detail" ? "text-display" : "text-display-sm"), children: value }));
|
|
45
|
+
const birim = unit ? (_jsx("span", { className: "font-mono text-small font-medium text-ink-faint", children: unit })) : null;
|
|
46
|
+
const degisim = delta !== undefined ? (_jsxs("span", { className: "tamga-kpi-delta", style: { background: c.bg, color: c.fg, borderColor: c.fg }, children: [delta > 0 ? "+" : "", delta, "%"] })) : null;
|
|
47
|
+
const govde = look === "detail" ? (_jsxs(_Fragment, { children: [_jsxs("span", { className: "tamga-kpi-ust", children: [karo, label] }), _jsxs("span", { className: "tamga-kpi-orta", children: [_jsxs("span", { className: "flex items-end gap-2", children: [sayi, birim] }), chart ? _jsx("span", { className: "shrink-0", children: chart }) : null] }), note ? _jsx("span", { className: "text-caption text-ink-faint", children: note }) : null, degisim] })) : (_jsxs(_Fragment, { children: [karo, _jsxs("span", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [_jsx("span", { className: "tamga-kpi-etiket", children: label }), _jsxs("span", { className: "flex items-end gap-2", children: [sayi, birim, degisim ? _jsx("span", { className: "ml-auto", children: degisim }) : null] }), note ? _jsx("span", { className: "text-caption text-ink-faint", children: note }) : null, chart ? _jsx("span", { className: "mt-3 block", children: chart }) : null] })] }));
|
|
48
|
+
const sinif = cn("tamga-kpi", look === "detail" && "tamga-kpi-detay", (href || onClick) && "tamga-kpi-live", className);
|
|
86
49
|
if (href) {
|
|
87
50
|
return (_jsx(Link, { href: href, className: sinif, children: govde }));
|
|
88
51
|
}
|
|
@@ -92,33 +55,24 @@ export function Kpi({ label, value, unit, icon, note, delta, better = "up", char
|
|
|
92
55
|
return _jsx("div", { className: sinif, children: govde });
|
|
93
56
|
}
|
|
94
57
|
/**
|
|
95
|
-
* KPI karolarının ızgarası.
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
* biri dörtlü, öteki beşli, bir üçüncüsü boşluğu 3 veriyordu. Izgara karonun
|
|
100
|
-
* kendi işi değil ama karo KÜMESİNİN işi, ve tek yerde durunca hepsi tutuyor.
|
|
58
|
+
* KPI karolarının ızgarası. Sütun sayısını KAP veriyor: karo 210 pikselin
|
|
59
|
+
* altına inmiyor, sığmayan alt satıra geçiyor. Sayılan bir sütun sayısı bir
|
|
60
|
+
* süre buradaydı ve kabı değil EKRANI ölçüyordu · dar bir sütunun içinde dört
|
|
61
|
+
* karo açıp sayıları kırpıyordu.
|
|
101
62
|
*
|
|
102
|
-
*
|
|
103
|
-
* altı). Elle verilen bir sütun sayısı, karo eklenince yalnız o ekranda
|
|
104
|
-
* güncelleniyor ve tek başına kalan bir karo tam satırı kaplıyor.
|
|
63
|
+
* Doküman: /docs/kpi
|
|
105
64
|
*/
|
|
106
65
|
export function KpiGrid({ children, className, ...rest }) {
|
|
107
|
-
|
|
108
|
-
return (_jsx("div", { ...dataProps(rest), className: cn("tamga-kpi-grid", className), style: { "--tamga-kpi-cols": sayi }, children: children }));
|
|
66
|
+
return (_jsx("div", { ...dataProps(rest), className: cn("tamga-kpi-grid", className), children: children }));
|
|
109
67
|
}
|
|
110
68
|
/**
|
|
111
|
-
* Kod bloğu, kopyalanabilir.
|
|
69
|
+
* Kod bloğu, kopyalanabilir. Kopyalama panosu her yerde çalışmıyor (HTTPS
|
|
70
|
+
* olmayan kaynak, izin verilmemiş); başarısızlık SESSİZ olmamalı, yoksa
|
|
71
|
+
* kullanıcı kopyalandığını sanıp boş yapıştırıyor.
|
|
112
72
|
*
|
|
113
|
-
*
|
|
114
|
-
* kurulum komutu. Üçünde de kullanıcının yaptığı tek şey KOPYALAMAK — o yüzden
|
|
115
|
-
* kopyalama düğmesi bir seçenek değil, bileşenin kendisi.
|
|
116
|
-
*
|
|
117
|
-
* Kopyalama panosu her yerde çalışmaz (HTTPS olmayan bir kaynakta, ya da
|
|
118
|
-
* izin verilmemişse). Başarısızlık SESSİZ olmamalı: düğme metni değişmezse
|
|
119
|
-
* kullanıcı kopyalandığını sanır ve boş yapıştırır.
|
|
73
|
+
* Doküman: /docs/code
|
|
120
74
|
*/
|
|
121
|
-
export function Code({ children, labels, className, ...rest }) {
|
|
75
|
+
export function Code({ children, filename, labels, className, ...rest }) {
|
|
122
76
|
const [state, setState] = useState("idle");
|
|
123
77
|
const timer = useRef(undefined);
|
|
124
78
|
/* Zamanlayıcı bir ref'te tutuluyor ve her tıklamada sıfırlanıyor.
|
|
@@ -139,7 +93,8 @@ export function Code({ children, labels, className, ...rest }) {
|
|
|
139
93
|
window.clearTimeout(timer.current);
|
|
140
94
|
timer.current = window.setTimeout(() => setState("idle"), 1600);
|
|
141
95
|
}
|
|
142
|
-
|
|
96
|
+
const satirlar = children.replace(/\n$/, "").split("\n");
|
|
97
|
+
return (_jsxs("div", { ...dataProps(rest), className: cn("tamga-code", className), children: [_jsxs("div", { className: "tamga-code-bar", children: [_jsx("span", { className: "min-w-0 flex-1 truncate font-mono text-caption", children: filename }), _jsxs("button", { type: "button", onClick: copy, className: "tamga-code-copy", "aria-label": labels.copy, children: [_jsx(Icon, { icon: state === "done" ? Check : Copy, size: "xs", weight: "bold" }), state === "done" ? labels.copied : state === "failed" ? labels.failed : labels.copy] })] }), _jsx("pre", { className: "tamga-code-pre", children: satirlar.map((satir, i) => (_jsxs("span", { className: "tamga-code-line", children: [_jsx("span", { className: "tamga-code-no", "aria-hidden": true, children: i + 1 }), _jsx("span", { className: "tamga-code-text", children: satir })] }, i))) })] }));
|
|
143
98
|
}
|
|
144
99
|
/**
|
|
145
100
|
* Klavye tuşu.
|
|
@@ -147,42 +102,47 @@ export function Code({ children, labels, className, ...rest }) {
|
|
|
147
102
|
* `<kbd>` KULLANILIYOR, `<span>` değil: bir ekran okuyucu için "Ctrl" ile
|
|
148
103
|
* "bir tuşa basılacak" arasındaki fark bu elemanda yaşıyor.
|
|
149
104
|
*/
|
|
150
|
-
export function Kbd({ children, className }) {
|
|
151
|
-
return
|
|
105
|
+
export function Kbd({ children, inline = false, className, }) {
|
|
106
|
+
return _jsx("kbd", { className: cn("tamga-kbd", inline && "tamga-kbd-inline", className), children: children });
|
|
152
107
|
}
|
|
153
108
|
/**
|
|
154
|
-
* Sayaç rozeti
|
|
109
|
+
* Sayaç rozeti: bir ikonun köşesindeki SAYI (`StatusChip` bir DURUM taşır).
|
|
110
|
+
* `max` üstünde "+" ile kesiliyor, yoksa dört hane kutuyu şişirip altındaki
|
|
111
|
+
* ikonu eziyor. Sıfır gösterilmiyor.
|
|
155
112
|
*
|
|
156
|
-
*
|
|
157
|
-
|
|
113
|
+
* Doküman: /docs/badge
|
|
114
|
+
*/
|
|
115
|
+
/**
|
|
116
|
+
* Etiket rozeti · bir özelliğin durumu: BETA, YENİ, PRO.
|
|
158
117
|
*
|
|
159
|
-
* `
|
|
160
|
-
*
|
|
118
|
+
* SAYACIN (`Badge`) KARDEŞİ AMA AYNI ŞEY DEĞİL: sayaç bir MİKTAR taşıyor ve
|
|
119
|
+
* okunduktan sonra kayboluyor; etiket bir DURUM taşıyor ve yerinde duruyor.
|
|
120
|
+
* İkisini tek bileşene koymak, "sayı verilmemişse etiket" gibi bir kural
|
|
121
|
+
* demekti.
|
|
161
122
|
*
|
|
162
|
-
*
|
|
123
|
+
* Gerekçe: docs/gerekce/06-isaret-ve-ton.md
|
|
163
124
|
*/
|
|
164
|
-
export function
|
|
165
|
-
|
|
125
|
+
export function Tag({ children, look = "outline", className, ...rest }) {
|
|
126
|
+
return (_jsx("span", { ...dataProps(rest), className: cn("tamga-tag", look === "dashed" && "tamga-tag-dashed", look === "solid" && "tamga-tag-solid", look === "outline" && "tamga-tag-outline", className), children: children }));
|
|
127
|
+
}
|
|
128
|
+
export function Badge({ count, max = 99, tone = "danger", dot = false, label, className, children, ...rest }) {
|
|
129
|
+
if (!dot && (count ?? 0) <= 0)
|
|
166
130
|
return _jsx(_Fragment, { children: children });
|
|
167
131
|
const c = toneOf(tone);
|
|
168
|
-
const shown = count > max ? `${max}+` : String(count);
|
|
169
|
-
const
|
|
132
|
+
const shown = (count ?? 0) > max ? `${max}+` : String(count ?? 0);
|
|
133
|
+
const isaret = dot ? (_jsx("span", { ...dataProps(rest), className: "tamga-count-dot", style: { background: c.mark }, role: "status", "aria-label": label })) : (_jsxs("span", { ...dataProps(rest), className: "tamga-count tabular-nums", style: { background: c.bg, color: c.fg, borderColor: c.fg }, children: [_jsx("span", { "aria-hidden": true, children: shown }), _jsxs("span", { className: "sr-only", children: [count, " ", label] })] }));
|
|
170
134
|
if (!children)
|
|
171
|
-
return
|
|
172
|
-
|
|
135
|
+
return isaret;
|
|
136
|
+
/* Rozet, üstüne oturduğu şeyin KARDEŞİ: çocuğu yapmak mümkün değil, çünkü
|
|
137
|
+
`children` herhangi bir eleman olabilir. Hover'da onunla birlikte gitmesini
|
|
138
|
+
`.tamga-count-yuva` sağlıyor (kit.css, düğmenin kaymalarıyla aynı). */
|
|
139
|
+
return (_jsxs("span", { className: cn("tamga-badge-wrap relative inline-flex", className), children: [children, _jsx("span", { className: "tamga-count-yuva", children: isaret })] }));
|
|
173
140
|
}
|
|
174
141
|
/**
|
|
175
|
-
* Adım göstergesi.
|
|
176
|
-
*
|
|
177
|
-
* Bir sihirbazın adım göstergesi yoksa kullanıcı kaçıncı adımda olduğunu ve
|
|
178
|
-
* kaç adım kaldığını bilmiyor; sihirbazın varlık sebebi tam olarak budur.
|
|
179
|
-
*
|
|
180
|
-
* `<ol>` kullanılıyor: adımlar SIRALI ve sıra bilgi taşıyor. Ekran okuyucu
|
|
181
|
-
* "3 öğeli liste, öğe 2" der; `<div>`'lerle bu bilgi kaybolur.
|
|
142
|
+
* Adım göstergesi. `<ol>` kullanılıyor: adımlar SIRALI ve sıra bilgi taşıyor;
|
|
143
|
+
* `<div>`lerle ekran okuyucu "öğe 2 / 3" diyemiyor.
|
|
182
144
|
*
|
|
183
|
-
*
|
|
184
|
-
* olan sönük. Üç durum üç ayrı görsel dil — çünkü "neredeyim" ve "ne kaldı"
|
|
185
|
-
* ayrı iki soru.
|
|
145
|
+
* Doküman: /docs/steps
|
|
186
146
|
*/
|
|
187
147
|
export function Steps({ steps, current, className, ...rest }) {
|
|
188
148
|
return (_jsx("ol", { ...dataProps(rest), className: cn("flex flex-wrap items-center gap-x-3 gap-y-2", className), children: steps.map(({ key, label, ...adimRest }, i) => {
|
|
@@ -191,3 +151,40 @@ export function Steps({ steps, current, className, ...rest }) {
|
|
|
191
151
|
return (_jsxs("li", { ...adimRest, className: "flex items-center gap-3", children: [_jsx("span", { className: "tamga-step-mark font-mono text-caption", "data-state": done ? "done" : active ? "current" : "todo", "aria-hidden": true, children: done ? _jsx(Icon, { icon: Check, size: "xs", weight: "bold" }) : i + 1 }), _jsx("span", { className: cn("text-small", active ? "font-medium text-ink" : "text-ink-faint"), "aria-current": active ? "step" : undefined, children: label }), i < steps.length - 1 ? (_jsx("span", { "aria-hidden": true, className: "tamga-step-line", "data-done": done ? "true" : "false" })) : null] }, key));
|
|
192
152
|
}) }));
|
|
193
153
|
}
|
|
154
|
+
/**
|
|
155
|
+
* Rise — sayı sıfırdan hedefe YÜKSELEREK geliyor.
|
|
156
|
+
*
|
|
157
|
+
* Gerekçe: docs/gerekce/03-grafik-ve-olcum.md
|
|
158
|
+
*/
|
|
159
|
+
export function Rise({ value, format = (n) => String(Math.round(n)), duration = 900, className, ...rest }) {
|
|
160
|
+
const [n, setN] = useState(value);
|
|
161
|
+
const kare = useRef(null);
|
|
162
|
+
useEffect(() => {
|
|
163
|
+
/* AZALTILMIŞ HAREKETTE TIRMANIŞ YOK: sayı hedefinde beliriyor. Hareket
|
|
164
|
+
duyarlılığı olan biri için değişen bir sayı, kayan bir sayfadan daha
|
|
165
|
+
yorucu · göz onu okumaya çalışıyor. */
|
|
166
|
+
const durgun = typeof window !== "undefined" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
167
|
+
if (durgun || duration <= 0) {
|
|
168
|
+
setN(value);
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
const bas = performance.now();
|
|
172
|
+
const adim = (t) => {
|
|
173
|
+
const o = Math.min(1, (t - bas) / duration);
|
|
174
|
+
/* Yavaşlayarak varıyor (`1-(1-o)³`): sabit hızla artan bir sayaç sayı
|
|
175
|
+
durduğunda "kesildi" gibi duruyor. */
|
|
176
|
+
setN(value * (1 - (1 - o) ** 3));
|
|
177
|
+
if (o < 1)
|
|
178
|
+
kare.current = requestAnimationFrame(adim);
|
|
179
|
+
};
|
|
180
|
+
kare.current = requestAnimationFrame(adim);
|
|
181
|
+
return () => {
|
|
182
|
+
if (kare.current !== null)
|
|
183
|
+
cancelAnimationFrame(kare.current);
|
|
184
|
+
};
|
|
185
|
+
}, [value, duration]);
|
|
186
|
+
return (_jsx("span", { ...dataProps(rest),
|
|
187
|
+
/* Sayı DEĞİŞİRKEN duyurulmuyor: `aria-live` olsaydı ekran okuyucu her
|
|
188
|
+
karede yeni bir sayı okurdu. Son değer zaten metinde. */
|
|
189
|
+
className: cn("font-display leading-none font-black tabular-nums text-ink", className), children: format(n) }));
|
|
190
|
+
}
|