@ahmetilhn/hanui 4.0.0 → 5.3.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/README.md +259 -39
- package/build/charts.cjs +2 -0
- package/build/charts.cjs.map +1 -0
- package/build/charts.css +1 -0
- package/build/charts.js +1843 -0
- package/build/charts.js.map +1 -0
- package/build/chat.cjs +3 -0
- package/build/chat.cjs.map +1 -0
- package/build/chat.css +1 -0
- package/build/chat.js +707 -0
- package/build/chat.js.map +1 -0
- package/build/index.cjs +7 -7
- package/build/index.cjs.map +1 -1
- package/build/index.d.ts +661 -717
- package/build/index.js +3396 -3303
- package/build/index.js.map +1 -1
- package/build/scss/_colors.generated.scss +119 -0
- package/build/scss/_index.scss +6 -0
- package/build/scss/_metrics.generated.scss +49 -0
- package/build/scss/_mixins.scss +675 -0
- package/build/scss/_variables.scss +51 -0
- package/build/styles.css +1 -1
- package/build/types/charts/AreaChart/index.d.ts +14 -0
- package/build/types/charts/BarChart/index.d.ts +16 -0
- package/build/types/charts/BoxPlot/index.d.ts +43 -0
- package/build/types/charts/ComposedChart/index.d.ts +16 -0
- package/build/types/charts/Heatmap/index.d.ts +30 -0
- package/build/types/charts/Histogram/index.d.ts +29 -0
- package/build/types/charts/LineChart/index.d.ts +14 -0
- package/build/types/charts/PieChart/index.d.ts +36 -0
- package/build/types/charts/RadarChart/index.d.ts +40 -0
- package/build/types/charts/ScatterPlot/index.d.ts +41 -0
- package/build/types/charts/core/CartesianChart.d.ts +43 -0
- package/build/types/charts/core/ChartFrame.d.ts +55 -0
- package/build/types/charts/core/axes.d.ts +34 -0
- package/build/types/charts/core/cartesian.d.ts +79 -0
- package/build/types/charts/core/format.d.ts +9 -0
- package/build/types/charts/core/margins.d.ts +9 -0
- package/build/types/charts/core/palette.d.ts +13 -0
- package/build/types/charts/core/path.d.ts +24 -0
- package/build/types/charts/core/scale.d.ts +40 -0
- package/build/types/charts/core/series.d.ts +11 -0
- package/build/types/charts/core/spatial.d.ts +12 -0
- package/build/types/charts/core/stats.d.ts +34 -0
- package/build/types/charts/core/types.d.ts +31 -0
- package/build/types/charts/core/useChartWidth.d.ts +7 -0
- package/build/types/charts/index.d.ts +21 -0
- package/build/types/chat/ActionList/index.d.ts +46 -0
- package/build/types/chat/AppBar/index.d.ts +21 -0
- package/build/types/chat/ChatMessage/index.d.ts +24 -0
- package/build/types/chat/ChatThread/index.d.ts +24 -0
- package/build/types/chat/Citation/index.d.ts +15 -0
- package/build/types/chat/CodeBlock/index.d.ts +27 -0
- package/build/types/chat/DescriptionList/index.d.ts +16 -0
- package/build/types/chat/Legend/index.d.ts +20 -0
- package/build/types/chat/MessageActions/index.d.ts +21 -0
- package/build/types/chat/PromptInput/index.d.ts +47 -0
- package/build/types/chat/PromptSuggestions/index.d.ts +25 -0
- package/build/types/chat/Prose/index.d.ts +15 -0
- package/build/types/chat/ReasoningBlock/index.d.ts +24 -0
- package/build/types/chat/ReasoningText/index.d.ts +14 -0
- package/build/types/chat/SegmentBar/index.d.ts +46 -0
- package/build/types/chat/SourceList/index.d.ts +25 -0
- package/build/types/chat/TerminalOutput/index.d.ts +25 -0
- package/build/types/chat/ToolCall/index.d.ts +41 -0
- package/build/types/chat/index.d.ts +26 -0
- package/build/types/helpers/class-name.helper.d.ts +3 -0
- package/build/types/helpers/component.helper.d.ts +13 -0
- package/build/types/helpers/label.helper.d.ts +12 -0
- package/build/types/theme/palette.d.ts +203 -0
- package/build/types/theme/tokens.d.ts +208 -0
- package/build/types/types/common-element-props.type.d.ts +8 -0
- package/build/types/types/link.type.d.ts +14 -0
- package/build/types/types/theme.type.d.ts +223 -0
- package/package.json +19 -2
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HAM PALET — kütüphanenin TEK hex kaynağı; değerler OKLCH'te türetilir.
|
|
3
|
+
* ⚠ ÜRETİLMİŞ DOSYA: `scripts/lib/palette-recipe.mjs` tarifini değiştir, `npm run tokens`.
|
|
4
|
+
* ⚠ Dört ankor sabit: marka için `pine` / `mint`, nötr eksen için `ink` / `canvas`.
|
|
5
|
+
* Geri kalan her şey onlardan türer.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* MARKA — kılavuzun iki ankoru ve arayüzün mürekkebi.
|
|
9
|
+
* ⚠ `mint` AÇIK ZEMİNDE METİN OLAMAZ (krem üzerinde 1,24:1).
|
|
10
|
+
*/
|
|
11
|
+
export declare const BRAND: {
|
|
12
|
+
readonly pine: "#00322a";
|
|
13
|
+
readonly mint: "#43ff9c";
|
|
14
|
+
readonly ink: "#141413";
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* KURUMSAL YARDIMCI RENKLER — kâğıt / slate / sis, MARKA EKSENİNDE.
|
|
18
|
+
* ⚠ Yalnızca marka şeridinde (`band-*`) yaşar; arayüz nötrleri sıcak mürekkep merdivenidir.
|
|
19
|
+
*/
|
|
20
|
+
export declare const CORPORATE: {
|
|
21
|
+
readonly paper: "#e9f7ed";
|
|
22
|
+
readonly slate: "#325a4d";
|
|
23
|
+
readonly mist: "#8abaa1";
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* NÖTR EKSEN — SICAK MÜREKKEP: açık uç krem kâğıt (`n25` = canvas), koyu uç siyah (`n900` = ink).
|
|
27
|
+
* ⚠ Marka ekseninde DEĞİL: 4.x'te öyleydi ve arayüzün her yüzeyi yeşil çiziliyordu.
|
|
28
|
+
* ⚠ `n0` kartın zemini — sayfadan bir kademe açık, saf beyaz değil.
|
|
29
|
+
*/
|
|
30
|
+
export declare const NEUTRAL: {
|
|
31
|
+
readonly n0: "#fffefc";
|
|
32
|
+
readonly n25: "#faf9f5";
|
|
33
|
+
readonly n50: "#f5f0e8";
|
|
34
|
+
readonly n100: "#efe9de";
|
|
35
|
+
readonly n150: "#e8e0d3";
|
|
36
|
+
readonly n200: "#e4dfd8";
|
|
37
|
+
readonly n250: "#ded8d0";
|
|
38
|
+
readonly n300: "#d0c8bd";
|
|
39
|
+
readonly n400: "#b4b1a9";
|
|
40
|
+
readonly n500: "#8e8b82";
|
|
41
|
+
readonly n550: "#67655e";
|
|
42
|
+
readonly n600: "#4d4b46";
|
|
43
|
+
readonly n700: "#3d3d3a";
|
|
44
|
+
readonly n800: "#252523";
|
|
45
|
+
readonly n900: "#141413";
|
|
46
|
+
};
|
|
47
|
+
/** BANT — üst bant, alt bilgi, tablo başlıkları ve BİRİNCİL EYLEM; tabanı `pine`. */
|
|
48
|
+
export declare const BAND: {
|
|
49
|
+
readonly base: "#00322a";
|
|
50
|
+
readonly two: "#154c3d";
|
|
51
|
+
readonly three: "#225f4d";
|
|
52
|
+
readonly dark: "#00322a";
|
|
53
|
+
readonly darkLine: "#143f34";
|
|
54
|
+
readonly fgThree: "#79a790";
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* KOYU TEMA YÜZEYLERİ — sıcak siyah.
|
|
58
|
+
* ⚠ Kademeler arası fark bilinçle küçük (1,03-1,14:1); derinliği kenarlık kurar.
|
|
59
|
+
*/
|
|
60
|
+
export declare const SURFACE_DARK: {
|
|
61
|
+
readonly page: "#141413";
|
|
62
|
+
readonly surface: "#181715";
|
|
63
|
+
readonly surfaceTwo: "#1f1e1b";
|
|
64
|
+
readonly surfaceThree: "#2a2925";
|
|
65
|
+
readonly inset: "#0e0e0d";
|
|
66
|
+
readonly border: "#33312d";
|
|
67
|
+
readonly borderStrong: "#4a4843";
|
|
68
|
+
readonly text: "#faf9f5";
|
|
69
|
+
readonly textTwo: "#b4b1a9";
|
|
70
|
+
readonly textThree: "#8e8b82";
|
|
71
|
+
readonly actionSoft: "#4a4843";
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* BİRİNCİL EYLEMİN SINIRI — dolgunun kendisi değil, KENARI.
|
|
75
|
+
* ⚠ Koyu temada çam dolgu kaybolur; mint saç çizgisi grafik eşiğini her zeminde geçer.
|
|
76
|
+
*/
|
|
77
|
+
export declare const ACTION_LINE: {
|
|
78
|
+
readonly light: "#00322a";
|
|
79
|
+
readonly dark: "#43ff9c";
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* DÖNÜŞÜM EYLEMİ ("sepete ekle") — ekrandaki tek PARLAK yeşil.
|
|
83
|
+
* ⚠ Birincil eylemden ayrımı TON AÇISI DEĞİL AYDINLIK.
|
|
84
|
+
* ⚠ Etkileşim yönü açık temada TERS: hover AÇILIR, active KOYULUR.
|
|
85
|
+
*/
|
|
86
|
+
export declare const CART: {
|
|
87
|
+
readonly base: "#1ba055";
|
|
88
|
+
readonly hover: "#20b360";
|
|
89
|
+
readonly active: "#19934e";
|
|
90
|
+
readonly soft: "#84cb97";
|
|
91
|
+
readonly dark: "#37c971";
|
|
92
|
+
readonly darkHover: "#4cdd82";
|
|
93
|
+
readonly darkActive: "#30b464";
|
|
94
|
+
readonly darkSoft: "#466e51";
|
|
95
|
+
readonly on: "#021407";
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* BAĞLANTI VE ODAK — 4.x `role` ailesinin yeşil kalan yarısı.
|
|
99
|
+
* ⚠ Seçim, ilerleme, onay kutusu ve anahtar bu aileyi KULLANMAZ; mürekkep merdivenindedir.
|
|
100
|
+
* ⚠ TON AÇISI GÖZLE ÖLÇÜLDÜ: H 162 ilk kesin yeşil, yukarı çekilmez.
|
|
101
|
+
*/
|
|
102
|
+
export declare const LINK: {
|
|
103
|
+
readonly base: "#1f7b56";
|
|
104
|
+
readonly hover: "#176446";
|
|
105
|
+
readonly text: "#17704e";
|
|
106
|
+
readonly dark: "#60d4a1";
|
|
107
|
+
readonly darkHover: "#76eab5";
|
|
108
|
+
};
|
|
109
|
+
/** ANKORLAR — halka ve vurgu renklerinin türediği iki uç. */
|
|
110
|
+
export declare const ANCHOR: {
|
|
111
|
+
readonly red: "#de1b2c";
|
|
112
|
+
readonly green: "#18904c";
|
|
113
|
+
};
|
|
114
|
+
/**
|
|
115
|
+
* DURUM AİLELERİ — altı aile tek şablondan çıkar; değişen tek şey ton açısı.
|
|
116
|
+
* ⚠ TINT ZEMİNLERİ AYDINLIKTA BİR KADEME DÜŞÜK: L .95'te chroma çok küçük.
|
|
117
|
+
*/
|
|
118
|
+
export declare const STATUS: {
|
|
119
|
+
readonly okBg: "#c2f6cf";
|
|
120
|
+
readonly okFg: "#166e3a";
|
|
121
|
+
readonly okLine: "#7eda99";
|
|
122
|
+
readonly okBgDark: "#132d1b";
|
|
123
|
+
readonly okFgDark: "#56d682";
|
|
124
|
+
readonly okLineDark: "#2c5137";
|
|
125
|
+
readonly warnBg: "#f9dcb9";
|
|
126
|
+
readonly warnFg: "#7c5212";
|
|
127
|
+
readonly warnLine: "#e8b97f";
|
|
128
|
+
readonly warnBgDark: "#322311";
|
|
129
|
+
readonly warnFgDark: "#eeaa4c";
|
|
130
|
+
readonly warnLineDark: "#594327";
|
|
131
|
+
readonly offBg: "#dcdad6";
|
|
132
|
+
readonly offFg: "#5b5851";
|
|
133
|
+
readonly offLine: "#c5c2bb";
|
|
134
|
+
readonly offBgDark: "#2f2e2a";
|
|
135
|
+
readonly offFgDark: "#bcb9b0";
|
|
136
|
+
readonly offLineDark: "#494743";
|
|
137
|
+
readonly badBg: "#f9d8d5";
|
|
138
|
+
readonly badFg: "#a91922";
|
|
139
|
+
readonly badLine: "#e9b3ae";
|
|
140
|
+
readonly badBgDark: "#431514";
|
|
141
|
+
readonly badFgDark: "#f2a099";
|
|
142
|
+
readonly badLineDark: "#732f2c";
|
|
143
|
+
readonly oemBg: "#a7f7c8";
|
|
144
|
+
readonly oemFg: "#0c5d3a";
|
|
145
|
+
readonly oemLine: "#6ace97";
|
|
146
|
+
readonly oemBgDark: "#0f291b";
|
|
147
|
+
readonly oemFgDark: "#43c485";
|
|
148
|
+
readonly oemLineDark: "#224b35";
|
|
149
|
+
readonly altBg: "#e5dcf9";
|
|
150
|
+
readonly altFg: "#751dc8";
|
|
151
|
+
readonly altLine: "#c9bae7";
|
|
152
|
+
readonly altBgDark: "#2e184c";
|
|
153
|
+
readonly altFgDark: "#c3aaf1";
|
|
154
|
+
readonly altLineDark: "#533281";
|
|
155
|
+
};
|
|
156
|
+
/** YIKICI EYLEM DOLGUSU — üzerine açık metin gelir, aydınlığı bu yüzden sınırlı. */
|
|
157
|
+
export declare const DANGER_SOLID: {
|
|
158
|
+
readonly base: "#c21625";
|
|
159
|
+
readonly hover: "#a2111d";
|
|
160
|
+
readonly dark: "#f53039";
|
|
161
|
+
readonly darkHover: "#f26a64";
|
|
162
|
+
readonly onDark: "#1b0102";
|
|
163
|
+
};
|
|
164
|
+
/** İKON VURGUSU — WCAG 1.4.11, 3:1 grafik eşiği; metin katmanından bir kademe açık. */
|
|
165
|
+
export declare const ACCENT: {
|
|
166
|
+
readonly red: "#de1b2c";
|
|
167
|
+
readonly redDark: "#f64f4e";
|
|
168
|
+
readonly green: "#18904c";
|
|
169
|
+
readonly greenDark: "#37c971";
|
|
170
|
+
readonly greenHover: "#12783e";
|
|
171
|
+
readonly greenHoverDark: "#4cdd82";
|
|
172
|
+
readonly onGreen: "#021407";
|
|
173
|
+
};
|
|
174
|
+
/** İNDİRİM ETİKETİ — olumlu durum ailesiyle aynı; ayrı bir yeşil değil. */
|
|
175
|
+
export declare const SALE: {
|
|
176
|
+
readonly bg: "#c2f6cf";
|
|
177
|
+
readonly fg: "#166e3a";
|
|
178
|
+
readonly bgDark: "#132d1b";
|
|
179
|
+
readonly fgDark: "#56d682";
|
|
180
|
+
};
|
|
181
|
+
/** YILDIZ ALTINI — puan sayısının yanında durduğu için metin eşiğini de geçer. */
|
|
182
|
+
export declare const STAR: {
|
|
183
|
+
readonly light: "#846310";
|
|
184
|
+
readonly dark: "#ebb737";
|
|
185
|
+
};
|
|
186
|
+
/**
|
|
187
|
+
* KATEGORİK PALET — grafik serileri ve kategori işaretleri.
|
|
188
|
+
* ⚠ Marka yeşilleri seri rengi OLMAZ; `cat3` orta aydınlıkta bir kategori yeşili.
|
|
189
|
+
*/
|
|
190
|
+
export declare const CATEGORY: {
|
|
191
|
+
readonly cat1: "#2774cd";
|
|
192
|
+
readonly cat1Dark: "#7eaeeb";
|
|
193
|
+
readonly cat2: "#b75225";
|
|
194
|
+
readonly cat2Dark: "#ec8f6b";
|
|
195
|
+
readonly cat3: "#2c8761";
|
|
196
|
+
readonly cat3Dark: "#58c393";
|
|
197
|
+
readonly cat4: "#8b7126";
|
|
198
|
+
readonly cat4Dark: "#c7a74f";
|
|
199
|
+
readonly cat5: "#c02f8f";
|
|
200
|
+
readonly cat5Dark: "#ed81c1";
|
|
201
|
+
readonly series2: "#8f3beb";
|
|
202
|
+
readonly series2Dark: "#b699eb";
|
|
203
|
+
};
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { HanuiFonts } from '@/types/theme.type';
|
|
2
|
+
/** AÇIK TEMA — varsayılan. */
|
|
3
|
+
export declare const LIGHT_THEME: {
|
|
4
|
+
readonly page: "#faf9f5";
|
|
5
|
+
readonly surface: "#fffefc";
|
|
6
|
+
readonly 'surface-2': "#efe9de";
|
|
7
|
+
readonly 'surface-3': "#e8e0d3";
|
|
8
|
+
/** Girinti sayfanın ALTINA iner (arama kutusu, kod bloğu, pasif girdi). */
|
|
9
|
+
readonly 'surface-inset': "#f5f0e8";
|
|
10
|
+
readonly border: "#ded8d0";
|
|
11
|
+
readonly 'border-strong': "#d0c8bd";
|
|
12
|
+
readonly text: "#141413";
|
|
13
|
+
readonly 'text-2': "#4d4b46";
|
|
14
|
+
readonly 'text-3': "#67655e";
|
|
15
|
+
readonly shell: "#181715";
|
|
16
|
+
readonly 'shell-2': "#1f1e1b";
|
|
17
|
+
readonly 'shell-3': "#2a2925";
|
|
18
|
+
readonly 'on-shell': "#faf9f5";
|
|
19
|
+
readonly 'on-shell-2': "#b4b1a9";
|
|
20
|
+
/** Mürekkep üzerinde hata metni (terminalin stderr'i). Açık temanın `bad-fg`i burada 2:1'in altında. */
|
|
21
|
+
readonly 'on-shell-danger': "#f2a099";
|
|
22
|
+
/** Koyu temada kabuk sayfadan 1,03:1 ayrışıyor; görünür kılan bu çizgi. */
|
|
23
|
+
readonly 'shell-line': "#33312d";
|
|
24
|
+
readonly action: "#00322a";
|
|
25
|
+
readonly 'action-hover': "#154c3d";
|
|
26
|
+
readonly 'action-active': "#225f4d";
|
|
27
|
+
readonly 'on-action': "#fffefc";
|
|
28
|
+
/** Dolgunun SINIRI; açık temada dolgunun kendisi (bkz. `ACTION_LINE`). */
|
|
29
|
+
readonly 'action-line': "#00322a";
|
|
30
|
+
/** Pasif dolgu; saydamlık DEĞİL kendi rengi (bkz. */
|
|
31
|
+
readonly 'action-soft': "#d0c8bd";
|
|
32
|
+
/** PASİF DOLGU ÜZERİNDEKİ METİN. */
|
|
33
|
+
readonly 'on-action-soft': "#3d3d3a";
|
|
34
|
+
readonly cart: "#1ba055";
|
|
35
|
+
readonly 'cart-hover': "#20b360";
|
|
36
|
+
readonly 'cart-active': "#19934e";
|
|
37
|
+
readonly 'cart-soft': "#84cb97";
|
|
38
|
+
readonly 'on-cart': "#021407";
|
|
39
|
+
readonly selected: "#141413";
|
|
40
|
+
readonly 'selected-hover': "#252523";
|
|
41
|
+
readonly 'selected-active': "#3d3d3a";
|
|
42
|
+
readonly 'on-selected': "#faf9f5";
|
|
43
|
+
/** Seçili satır / seçenek zemini — kenarlık ya da işaretle BİRLİKTE (seçim yalnız zeminle verilmez). */
|
|
44
|
+
readonly 'selected-tint': "#e8e0d3";
|
|
45
|
+
readonly 'selected-line': "#141413";
|
|
46
|
+
readonly link: "#17704e";
|
|
47
|
+
readonly 'link-hover': "#176446";
|
|
48
|
+
readonly 'ok-bg': "#c2f6cf";
|
|
49
|
+
readonly 'ok-fg': "#166e3a";
|
|
50
|
+
readonly 'ok-line': "#7eda99";
|
|
51
|
+
readonly 'warn-bg': "#f9dcb9";
|
|
52
|
+
readonly 'warn-fg': "#7c5212";
|
|
53
|
+
readonly 'warn-line': "#e8b97f";
|
|
54
|
+
readonly 'off-bg': "#dcdad6";
|
|
55
|
+
readonly 'off-fg': "#5b5851";
|
|
56
|
+
readonly 'off-line': "#c5c2bb";
|
|
57
|
+
readonly 'bad-bg': "#f9d8d5";
|
|
58
|
+
readonly 'bad-fg': "#a91922";
|
|
59
|
+
readonly 'bad-line': "#e9b3ae";
|
|
60
|
+
readonly 'oem-bg': "#a7f7c8";
|
|
61
|
+
readonly 'oem-fg': "#0c5d3a";
|
|
62
|
+
readonly 'oem-line': "#6ace97";
|
|
63
|
+
readonly 'alt-bg': "#e5dcf9";
|
|
64
|
+
readonly 'alt-fg': "#751dc8";
|
|
65
|
+
readonly 'alt-line': "#c9bae7";
|
|
66
|
+
readonly 'sale-bg': "#c2f6cf";
|
|
67
|
+
readonly 'sale-fg': "#166e3a";
|
|
68
|
+
readonly 'red-accent': "#de1b2c";
|
|
69
|
+
readonly 'green-accent': "#18904c";
|
|
70
|
+
readonly 'green-accent-hover': "#12783e";
|
|
71
|
+
readonly 'on-green': "#021407";
|
|
72
|
+
readonly star: "#846310";
|
|
73
|
+
readonly 'danger-solid': "#c21625";
|
|
74
|
+
readonly 'danger-solid-hover': "#a2111d";
|
|
75
|
+
readonly 'on-danger': "#fffefc";
|
|
76
|
+
readonly 'nav-bg': "#faf9f5";
|
|
77
|
+
readonly 'nav-bg-2': "#efe9de";
|
|
78
|
+
readonly 'nav-fg': "#141413";
|
|
79
|
+
readonly 'nav-fg-2': "#4d4b46";
|
|
80
|
+
readonly 'nav-fg-3': "#67655e";
|
|
81
|
+
readonly 'nav-line': "#e4dfd8";
|
|
82
|
+
readonly 'nav-line-strong': "#d0c8bd";
|
|
83
|
+
readonly 'nav-hover': "#efe9de";
|
|
84
|
+
readonly 'footer-bg': "#efe9de";
|
|
85
|
+
readonly 'band-bg': "#00322a";
|
|
86
|
+
readonly 'band-fg': "#e9f7ed";
|
|
87
|
+
readonly 'band-fg-2': "#8abaa1";
|
|
88
|
+
/**
|
|
89
|
+
* Bandın ÜÇÜNCÜ metin kademesi ve imza vurgusu. Panelin kenar çubuğu rayı bu ikisini bir dönem
|
|
90
|
+
* SABİT HEX olarak taşıyordu (`#799a8f`, `#43ff9c`)
|
|
91
|
+
*/
|
|
92
|
+
readonly 'band-fg-3': "#79a790";
|
|
93
|
+
readonly 'band-accent': "#43ff9c";
|
|
94
|
+
readonly 'band-line': "#143f34";
|
|
95
|
+
readonly 'band-hover': string;
|
|
96
|
+
readonly 'shadow-xs': `0 1px 2px ${string}`;
|
|
97
|
+
readonly 'shadow-sm': `0 1px 2px ${string}, 0 1px 3px ${string}`;
|
|
98
|
+
readonly 'shadow-md': `0 2px 4px ${string}, 0 6px 16px ${string}`;
|
|
99
|
+
readonly 'shadow-lg': `0 4px 8px ${string}, 0 16px 32px ${string}`;
|
|
100
|
+
readonly 'shadow-xl': `0 8px 16px ${string}, 0 28px 56px ${string}`;
|
|
101
|
+
/** Yapışkan alt bar; gölge YUKARI düşer. */
|
|
102
|
+
readonly 'shadow-up': `0 -2px 4px ${string}, 0 -8px 24px ${string}`;
|
|
103
|
+
/** Odak halkası BAĞLANTI YEŞİLİ: odak bir gezinme olayıdır. Çam DEĞİL — birincil dolguyla aynı ton. */
|
|
104
|
+
readonly ring: `0 0 0 3px ${string}`;
|
|
105
|
+
readonly 'ring-color': "#1f7b56";
|
|
106
|
+
readonly 'ring-danger': `0 0 0 3px ${string}`;
|
|
107
|
+
readonly 'ring-ok': `0 0 0 4px ${string}`;
|
|
108
|
+
readonly scrim: string;
|
|
109
|
+
readonly 'scrim-soft': string;
|
|
110
|
+
readonly glass: string;
|
|
111
|
+
readonly 'glass-solid': "#fffefc";
|
|
112
|
+
readonly 'on-scrim': "#fffefc";
|
|
113
|
+
readonly 'skeleton-a': "#efe9de";
|
|
114
|
+
readonly 'skeleton-b': "#faf9f5";
|
|
115
|
+
readonly track: string;
|
|
116
|
+
/** Görsel yer tutucu (medya yoksa). */
|
|
117
|
+
readonly 'media-bg': "#efe9de";
|
|
118
|
+
readonly 'glow-1': string;
|
|
119
|
+
readonly 'glow-2': string;
|
|
120
|
+
readonly 'glow-cart': string;
|
|
121
|
+
readonly 'cat-1': "#2774cd";
|
|
122
|
+
readonly 'cat-2': "#b75225";
|
|
123
|
+
readonly 'cat-3': "#2c8761";
|
|
124
|
+
readonly 'cat-4': "#8b7126";
|
|
125
|
+
readonly 'cat-5': "#c02f8f";
|
|
126
|
+
readonly 'series-1': "#252523";
|
|
127
|
+
readonly 'series-2': "#8f3beb";
|
|
128
|
+
};
|
|
129
|
+
/** KOYU TEMA. */
|
|
130
|
+
export declare const DARK_THEME: Record<keyof typeof LIGHT_THEME, string>;
|
|
131
|
+
/** ÖLÇÜ TOKEN'LARI — temadan bağımsız, çalışma zamanında EZİLEBİLİR. */
|
|
132
|
+
export declare const METRIC_TOKENS: {
|
|
133
|
+
readonly 'radius-xs': "4px";
|
|
134
|
+
readonly 'radius-sm': "6px";
|
|
135
|
+
readonly 'radius-md': "8px";
|
|
136
|
+
readonly 'radius-lg': "12px";
|
|
137
|
+
readonly 'radius-xl': "16px";
|
|
138
|
+
readonly 'radius-pill': "999px";
|
|
139
|
+
/** YOĞUNLUK ÇARPANLARI — akışkan ölçeğin üzerine binen tek ayar. */
|
|
140
|
+
readonly 'type-scale': "1";
|
|
141
|
+
readonly 'space-scale': "1";
|
|
142
|
+
readonly 'space-0': "0";
|
|
143
|
+
readonly 'space-1': "4px";
|
|
144
|
+
readonly 'space-2': "8px";
|
|
145
|
+
readonly 'space-3': string;
|
|
146
|
+
readonly 'space-4': string;
|
|
147
|
+
readonly 'space-5': string;
|
|
148
|
+
readonly 'space-6': string;
|
|
149
|
+
readonly 'space-7': string;
|
|
150
|
+
readonly 'space-8': string;
|
|
151
|
+
readonly 'space-9': string;
|
|
152
|
+
readonly 'font-size-2xs': string;
|
|
153
|
+
readonly 'font-size-xs': string;
|
|
154
|
+
readonly 'font-size-sm': string;
|
|
155
|
+
readonly 'font-size-base': string;
|
|
156
|
+
readonly 'font-size-body': string;
|
|
157
|
+
readonly 'font-size-lg': string;
|
|
158
|
+
readonly 'font-size-xl': string;
|
|
159
|
+
readonly 'font-size-2xl': string;
|
|
160
|
+
readonly 'font-size-3xl': string;
|
|
161
|
+
readonly 'font-size-4xl': string;
|
|
162
|
+
/** FORM DENETİMİ PUNTOSU — ölçekten AYRI ve 16px'in altına inmez. */
|
|
163
|
+
readonly 'font-size-control': `max(16px, ${string})`;
|
|
164
|
+
readonly 'leading-none': "1";
|
|
165
|
+
readonly 'leading-tight': "1.16";
|
|
166
|
+
readonly 'leading-snug': "1.35";
|
|
167
|
+
readonly 'leading-normal': "1.62";
|
|
168
|
+
readonly 'leading-relaxed': "1.75";
|
|
169
|
+
readonly 'icon-xs': "14px";
|
|
170
|
+
readonly 'icon-sm': "16px";
|
|
171
|
+
readonly 'icon-md': "18px";
|
|
172
|
+
readonly 'icon-lg': "20px";
|
|
173
|
+
readonly 'icon-xl': "24px";
|
|
174
|
+
readonly 'duration-instant': "80ms";
|
|
175
|
+
readonly 'duration-fast': "140ms";
|
|
176
|
+
readonly 'duration-normal': "200ms";
|
|
177
|
+
readonly 'duration-slow': "320ms";
|
|
178
|
+
readonly 'ease-out': "cubic-bezier(0.22, 1, 0.36, 1)";
|
|
179
|
+
readonly 'ease-in-out': "cubic-bezier(0.4, 0, 0.2, 1)";
|
|
180
|
+
readonly 'ease-spring': "cubic-bezier(0.34, 1.4, 0.64, 1)";
|
|
181
|
+
readonly 'duration-spin': "700ms";
|
|
182
|
+
readonly 'duration-shimmer': "1400ms";
|
|
183
|
+
/** Durum noktasının nabzı — "çalışıyor / bağlanıyor"; 700 ms telaş, 2 sn ölü gibi okunuyordu. */
|
|
184
|
+
readonly 'duration-pulse': "1600ms";
|
|
185
|
+
};
|
|
186
|
+
/** YOĞUN (compact) KİP — `<html data-hanui-density="compact">`. */
|
|
187
|
+
export declare const COMPACT_DENSITY: {
|
|
188
|
+
readonly 'type-scale': "0.93";
|
|
189
|
+
readonly 'space-scale': "0.88";
|
|
190
|
+
};
|
|
191
|
+
/** DAR EKRAN KADEMELERİ — `@media (max-width: 640px)`. */
|
|
192
|
+
export declare const NARROW_METRICS: {
|
|
193
|
+
readonly 'radius-lg': "10px";
|
|
194
|
+
readonly 'radius-xl': "13px";
|
|
195
|
+
readonly 'icon-xs': "13px";
|
|
196
|
+
readonly 'icon-sm': "15px";
|
|
197
|
+
readonly 'icon-md': "16px";
|
|
198
|
+
readonly 'icon-lg': "18px";
|
|
199
|
+
readonly 'icon-xl': "20px";
|
|
200
|
+
readonly 'leading-tight': "1.18";
|
|
201
|
+
readonly 'leading-snug': "1.38";
|
|
202
|
+
readonly 'leading-normal': "1.52";
|
|
203
|
+
readonly 'leading-relaxed': "1.62";
|
|
204
|
+
};
|
|
205
|
+
/** `NARROW_METRICS`in devreye girdiği genişlik — `$breakpoint-mobile` ile aynı. */
|
|
206
|
+
export declare const NARROW_BREAKPOINT = "640px";
|
|
207
|
+
/** Kütüphanenin varsayılan font yığınları — hepsi sistem fontlarına iner. */
|
|
208
|
+
export declare const DEFAULT_FONTS: Required<HanuiFonts>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Her bileşenin kabul ettiği ortak kanca noktaları. */
|
|
2
|
+
export type CommonElementProps = Partial<{
|
|
3
|
+
className: string;
|
|
4
|
+
id: string;
|
|
5
|
+
testId: string;
|
|
6
|
+
}>;
|
|
7
|
+
/** Sınıf birleştiricinin kabul ettiği değerler. */
|
|
8
|
+
export type ClassValue = string | false | null | undefined;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AnchorHTMLAttributes, ComponentType, ReactNode } from 'react';
|
|
2
|
+
/** Kütüphanenin bir bağlantı bileşenine geçirdiği props. */
|
|
3
|
+
export type HanuiLinkProps = AnchorHTMLAttributes<HTMLAnchorElement> & {
|
|
4
|
+
href: string;
|
|
5
|
+
children?: ReactNode;
|
|
6
|
+
[key: string]: unknown;
|
|
7
|
+
};
|
|
8
|
+
/** Tüketicinin yönlendiricisi (`next/link`, `react-router`ın `Link`i…). */
|
|
9
|
+
export type HanuiLinkComponent = ComponentType<HanuiLinkProps>;
|
|
10
|
+
/**
|
|
11
|
+
* Bileşenden yönlendiriciye geçirilecek ek props.
|
|
12
|
+
* @example // Next.js App Router: sayfa numarasına basınca liste yukarı sıçramasın.…
|
|
13
|
+
*/
|
|
14
|
+
export type HanuiLinkExtraProps = Record<string, unknown>;
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import type { HanuiLinkComponent } from '@/types/link.type';
|
|
2
|
+
import { LIGHT_THEME, METRIC_TOKENS } from '@/theme/tokens';
|
|
3
|
+
/**
|
|
4
|
+
* Sayı biçimlendiricileri: değere bağlı metinler dizeyle verilemez.
|
|
5
|
+
* ⚠ `helpers/label.helper.ts` de aynı imzayı ELLE taşıyordu.
|
|
6
|
+
*/
|
|
7
|
+
export type Formatter<TArgs extends unknown[]> = (...args: TArgs) => string;
|
|
8
|
+
/**
|
|
9
|
+
* Dışarıdan verilebilecek tema yapılandırması.
|
|
10
|
+
* @example initHanui({ theme: { light: { link: '#0a58ca', 'ring-color': '#0d6efd' }, dark: {…
|
|
11
|
+
*/
|
|
12
|
+
export type HanuiThemeConfig = Partial<{
|
|
13
|
+
light: HanuiThemeTokens;
|
|
14
|
+
dark: HanuiThemeTokens;
|
|
15
|
+
fonts: HanuiFonts;
|
|
16
|
+
/**
|
|
17
|
+
* Ölçü ezmeleri — yarıçap, boşluk, punto, süre.
|
|
18
|
+
* @example initHanui({ theme: { metrics: { 'radius-md': '2px', 'radius-lg': '4px' } } });
|
|
19
|
+
*/
|
|
20
|
+
metrics: HanuiMetrics;
|
|
21
|
+
}>;
|
|
22
|
+
/** Yazı tipi ailesi sözleşmesi. */
|
|
23
|
+
export type HanuiFonts = Partial<{
|
|
24
|
+
heading: string;
|
|
25
|
+
body: string;
|
|
26
|
+
mono: string;
|
|
27
|
+
}>;
|
|
28
|
+
/**
|
|
29
|
+
* Kullanıcının SEÇİMİ. `system` = açık bir seçim yok, işletim sistemi tercihi izlenir
|
|
30
|
+
* (`prefers-color-scheme`).
|
|
31
|
+
*/
|
|
32
|
+
export type HanuiColorPreference = HanuiColorScheme | 'system';
|
|
33
|
+
/** ÇÖZÜLMÜŞ tema — ekranda gerçekten hangisi çizili. */
|
|
34
|
+
export type HanuiColorScheme = 'light' | 'dark';
|
|
35
|
+
/** Bir temanın TAM eşlemesi. */
|
|
36
|
+
export type HanuiResolvedTokens = Record<HanuiToken, string>;
|
|
37
|
+
/** Bir temanın token → değer eşlemesi. */
|
|
38
|
+
export type HanuiThemeTokens = Partial<Record<HanuiToken, string>>;
|
|
39
|
+
/** Bilgi yoğunluğu. `default` vitrin, `compact` operasyon paneli. */
|
|
40
|
+
export type HanuiDensity = 'default' | 'compact';
|
|
41
|
+
/** Ölçü ezmeleri. */
|
|
42
|
+
export type HanuiMetrics = Partial<Record<HanuiMetricToken, string>>;
|
|
43
|
+
/** Ölçü token adları — `METRIC_TOKENS`ten türetilir. */
|
|
44
|
+
export type HanuiMetricToken = keyof typeof METRIC_TOKENS;
|
|
45
|
+
/** Token adları — `LIGHT_THEME`den türetilir, elle listelenmez. */
|
|
46
|
+
export type HanuiToken = keyof typeof LIGHT_THEME;
|
|
47
|
+
export type HanuiContextValue = {
|
|
48
|
+
/** Tüketicinin yönlendiricisi (`next/link`, `react-router`ın `Link`i…). */
|
|
49
|
+
linkComponent?: HanuiLinkComponent;
|
|
50
|
+
/** Uygulanan tema ezmeleri. */
|
|
51
|
+
theme?: HanuiThemeConfig;
|
|
52
|
+
/**
|
|
53
|
+
* Arayüz metinleri.
|
|
54
|
+
* ⚠ Referans bir dönem `theme/labels.ts`yi gösteriyordu; o dosya yalnızca tek satırlık bir başlık
|
|
55
|
+
* yorumu taşıyordu (sıfır export, sıfır…
|
|
56
|
+
*/
|
|
57
|
+
labels?: HanuiLabels;
|
|
58
|
+
};
|
|
59
|
+
export type HanuiLabels = Partial<{
|
|
60
|
+
/** Kip pencere ve alt sayfanın kapatma düğmesi. `Modal`, `BottomSheet`. */
|
|
61
|
+
close: string;
|
|
62
|
+
/**
|
|
63
|
+
* Bildirim yığınının bölge adı ("Bildirimler"). `ToastHub`.
|
|
64
|
+
* ⚠ Yığın bir `role="region"` ve `aria-live` bölgesi; adsız bir bölge ekran okuyucuda yalnızca
|
|
65
|
+
* "bölge" diye okunur.
|
|
66
|
+
*/
|
|
67
|
+
notifications: string;
|
|
68
|
+
/** Vazgeçme eylemi. `ConfirmDialog`, `PromptDialog`. */
|
|
69
|
+
cancel: string;
|
|
70
|
+
/** Kaydetme/gönderme eylemi. `PromptDialog`. */
|
|
71
|
+
submit: string;
|
|
72
|
+
/** Bekleme göstergesinin ekran okuyucu metni. `Spinner`. */
|
|
73
|
+
loading: string;
|
|
74
|
+
/** Zorunlu alanın yıldızının yanındaki okunabilir karşılık. `Field`. */
|
|
75
|
+
required: string;
|
|
76
|
+
/** Filtre şeridinin erişilebilir adı. `FilterBar`. */
|
|
77
|
+
filters: string;
|
|
78
|
+
/** Kırıntı yolunun gezinme bölgesi adı. `Breadcrumb`. */
|
|
79
|
+
breadcrumb: string;
|
|
80
|
+
/** Alfabe atlama şeridinin gezinme bölgesi adı. `DirectoryJump`. */
|
|
81
|
+
directoryJump: string;
|
|
82
|
+
/** Seçim yokken `Select` tetikleyicisinde görünen metin. */
|
|
83
|
+
selectPlaceholder: string;
|
|
84
|
+
/** Şifreyi görünür kılan düğmenin erişilebilir adı. `PasswordInput`. */
|
|
85
|
+
passwordShow: string;
|
|
86
|
+
/** Şifreyi gizleyen düğmenin erişilebilir adı. `PasswordInput`. */
|
|
87
|
+
passwordHide: string;
|
|
88
|
+
/** Baş harf büyütmesinde kullanılacak dil etiketi. `Avatar`. */
|
|
89
|
+
locale: string;
|
|
90
|
+
/** Para birimi simgesi ya da kodu. `Price`. */
|
|
91
|
+
currency: string;
|
|
92
|
+
combobox: Partial<{
|
|
93
|
+
searchPlaceholder: string;
|
|
94
|
+
emptyMessage: string;
|
|
95
|
+
loadingMessage: string;
|
|
96
|
+
clearLabel: string;
|
|
97
|
+
}>;
|
|
98
|
+
pagination: Partial<{
|
|
99
|
+
/** Gezinme bölgesinin adı ("Sayfalar"). */
|
|
100
|
+
label: string;
|
|
101
|
+
previous: string;
|
|
102
|
+
next: string;
|
|
103
|
+
}>;
|
|
104
|
+
quantity: Partial<{
|
|
105
|
+
label: string;
|
|
106
|
+
decrease: string;
|
|
107
|
+
increase: string;
|
|
108
|
+
}>;
|
|
109
|
+
range: Partial<{
|
|
110
|
+
/** Alt kulbun ad eki ("En az"). */
|
|
111
|
+
min: string;
|
|
112
|
+
/** Üst kulbun ad eki ("En çok"). */
|
|
113
|
+
max: string;
|
|
114
|
+
}>;
|
|
115
|
+
dataTable: Partial<{
|
|
116
|
+
empty: string;
|
|
117
|
+
loading: string;
|
|
118
|
+
}>;
|
|
119
|
+
/**
|
|
120
|
+
* Sohbet bileşenleri (`@ahmetilhn/hanui/chat`). Çağrı yerine ÖZGÜ metinler buraya girmez:
|
|
121
|
+
* `PromptInput.placeholder`, `ReasoningBlock.summary`, `ToolCall.name`.
|
|
122
|
+
*/
|
|
123
|
+
chat: Partial<{
|
|
124
|
+
/** Sohbet akışının bölge adı ("Sohbet"). `ChatThread`. */
|
|
125
|
+
thread: string;
|
|
126
|
+
/** Gönder düğmesi. `PromptInput`. */
|
|
127
|
+
send: string;
|
|
128
|
+
/** Akışı durdur düğmesi. `PromptInput`. */
|
|
129
|
+
stop: string;
|
|
130
|
+
/** Kullanıcı yukarı kaydırınca beliren düğme ("En yeniye in"). `ChatThread`. */
|
|
131
|
+
scrollToLatest: string;
|
|
132
|
+
/** Yanıt tamamlandığında duyurulan cümle ("Yanıt hazır"). `ChatThread`. */
|
|
133
|
+
replyReady: string;
|
|
134
|
+
/** Mesaj eylemleri araç çubuğunun adı. `MessageActions`. */
|
|
135
|
+
messageActions: string;
|
|
136
|
+
/** Kaynak listesinin adı ("Kaynaklar"). `SourceList`. */
|
|
137
|
+
sources: string;
|
|
138
|
+
/** Atıf numarasının okunan adı, örn. `n => 'Kaynak ' + n`. `Citation`. */
|
|
139
|
+
citation: Formatter<[index: number]>;
|
|
140
|
+
/** stderr satırının önündeki gizli işaret ("hata çıktısı"): renk tek başına anlam taşımaz. */
|
|
141
|
+
stderr: string;
|
|
142
|
+
/** Araç çağrısının durum metinleri. `ToolCall`. */
|
|
143
|
+
toolStatus: Partial<Record<'running' | 'ok' | 'error' | 'aborted' | 'interrupted', string>>;
|
|
144
|
+
/** Kod bloğunu kopyalama düğmesi, örn. `language => language + ' kodunu kopyala'`. `CodeBlock`. */
|
|
145
|
+
codeCopy: Formatter<[language: string]>;
|
|
146
|
+
/** Kopyalandıktan sonra duyurulan cümle. `CodeBlock`. */
|
|
147
|
+
codeCopied: string;
|
|
148
|
+
}>;
|
|
149
|
+
copyField: Partial<{
|
|
150
|
+
/** Kopyalama düğmesinin adı. */
|
|
151
|
+
copy: Formatter<[value: string]>;
|
|
152
|
+
copied: Formatter<[value: string]>;
|
|
153
|
+
announcement: string;
|
|
154
|
+
}>;
|
|
155
|
+
/**
|
|
156
|
+
* Dosya yukleme.
|
|
157
|
+
* ⚠ `tooLarge` bir BICIMLENDIRICI: mesaj dosya adini ve siniri TASIMALI.
|
|
158
|
+
*/
|
|
159
|
+
fileUpload: Partial<{
|
|
160
|
+
tooLarge: Formatter<[name: string, max: string]>;
|
|
161
|
+
/** Yukleme sirasindaki ekran okuyucu duyurusu. */
|
|
162
|
+
uploading: Formatter<[name: string]>;
|
|
163
|
+
/** Dosya secildiginde yapilan duyuru. */
|
|
164
|
+
added: Formatter<[count: number]>;
|
|
165
|
+
}>;
|
|
166
|
+
/**
|
|
167
|
+
* Sayisal gostergenin YON metni.
|
|
168
|
+
* ⚠ Uc deger de SR-ONLY: ok isareti gorsel bir sinyal ve ekran okuyucuya hicbir sey soylemiyor.
|
|
169
|
+
*/
|
|
170
|
+
stat: Partial<{
|
|
171
|
+
increase: string;
|
|
172
|
+
decrease: string;
|
|
173
|
+
unchanged: string;
|
|
174
|
+
}>;
|
|
175
|
+
/** Adim gostergesinin DURUM metinleri — hepsi sr-only. */
|
|
176
|
+
steps: Partial<{
|
|
177
|
+
completed: string;
|
|
178
|
+
current: string;
|
|
179
|
+
upcoming: string;
|
|
180
|
+
}>;
|
|
181
|
+
/** Zaman cizelgesinin DURUM metinleri — hepsi sr-only. */
|
|
182
|
+
timeline: Partial<{
|
|
183
|
+
completed: string;
|
|
184
|
+
current: string;
|
|
185
|
+
failed: string;
|
|
186
|
+
}>;
|
|
187
|
+
/** Etiket girisi. `removed` bir bicimlendirici: hangi etiketin kalktigi. */
|
|
188
|
+
tagInput: Partial<{
|
|
189
|
+
added: Formatter<[value: string]>;
|
|
190
|
+
removed: Formatter<[value: string]>;
|
|
191
|
+
}>;
|
|
192
|
+
rating: Partial<{
|
|
193
|
+
/** Yıldızların ekran okuyucu karşılığı ("5 üzerinden 4,5 — 12 değerlendirme"). */
|
|
194
|
+
srLabel: Formatter<[value: number, count: number | undefined]>;
|
|
195
|
+
/** Puan girişinde yıldız sayısı ("4 yıldız"). */
|
|
196
|
+
starCount: Formatter<[star: number]>;
|
|
197
|
+
/** Beş puanın anlamı. */
|
|
198
|
+
scale: Record<1 | 2 | 3 | 4 | 5, string>;
|
|
199
|
+
}>;
|
|
200
|
+
}>;
|
|
201
|
+
export type InitHanuiOptions = Partial<{
|
|
202
|
+
/** Tema ve ölçü ezmeleri. */
|
|
203
|
+
theme: HanuiThemeConfig;
|
|
204
|
+
/** Başlangıç şeması. */
|
|
205
|
+
colorScheme: HanuiColorScheme;
|
|
206
|
+
/** Bilgi yoğunluğu. */
|
|
207
|
+
density: HanuiDensity;
|
|
208
|
+
}>;
|
|
209
|
+
export type HanuiThemeState = {
|
|
210
|
+
/**
|
|
211
|
+
* ÇÖZÜLMÜŞ tema — ekranda çizili olan. `preference` `system` iken bu alan işletim sisteminin o
|
|
212
|
+
* anki tercihini taşır.
|
|
213
|
+
*/
|
|
214
|
+
scheme: HanuiColorScheme;
|
|
215
|
+
/** Kullanıcının SEÇİMİ. */
|
|
216
|
+
preference: HanuiColorPreference;
|
|
217
|
+
/** `'system'` verildiğinde AÇIK seçim silinir ve sistem tercihi izlenir. */
|
|
218
|
+
setScheme: (preference: HanuiColorPreference) => void;
|
|
219
|
+
/** Açık ↔ koyu. `system` iken ÇÖZÜLMÜŞ değerin tersine geçer. */
|
|
220
|
+
toggle: () => void;
|
|
221
|
+
/** Sunucu çıktısında ve hidrasyondan önceki ilk karede `false`. */
|
|
222
|
+
isReady: boolean;
|
|
223
|
+
};
|