@ahmetilhn/hanui 4.1.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.
Files changed (75) hide show
  1. package/README.md +259 -39
  2. package/build/charts.cjs +2 -0
  3. package/build/charts.cjs.map +1 -0
  4. package/build/charts.css +1 -0
  5. package/build/charts.js +1843 -0
  6. package/build/charts.js.map +1 -0
  7. package/build/chat.cjs +3 -0
  8. package/build/chat.cjs.map +1 -0
  9. package/build/chat.css +1 -0
  10. package/build/chat.js +707 -0
  11. package/build/chat.js.map +1 -0
  12. package/build/index.cjs +7 -7
  13. package/build/index.cjs.map +1 -1
  14. package/build/index.d.ts +472 -222
  15. package/build/index.js +3336 -3096
  16. package/build/index.js.map +1 -1
  17. package/build/scss/_colors.generated.scss +119 -0
  18. package/build/scss/_index.scss +6 -0
  19. package/build/scss/_metrics.generated.scss +49 -0
  20. package/build/scss/_mixins.scss +675 -0
  21. package/build/scss/_variables.scss +51 -0
  22. package/build/styles.css +1 -1
  23. package/build/types/charts/AreaChart/index.d.ts +14 -0
  24. package/build/types/charts/BarChart/index.d.ts +16 -0
  25. package/build/types/charts/BoxPlot/index.d.ts +43 -0
  26. package/build/types/charts/ComposedChart/index.d.ts +16 -0
  27. package/build/types/charts/Heatmap/index.d.ts +30 -0
  28. package/build/types/charts/Histogram/index.d.ts +29 -0
  29. package/build/types/charts/LineChart/index.d.ts +14 -0
  30. package/build/types/charts/PieChart/index.d.ts +36 -0
  31. package/build/types/charts/RadarChart/index.d.ts +40 -0
  32. package/build/types/charts/ScatterPlot/index.d.ts +41 -0
  33. package/build/types/charts/core/CartesianChart.d.ts +43 -0
  34. package/build/types/charts/core/ChartFrame.d.ts +55 -0
  35. package/build/types/charts/core/axes.d.ts +34 -0
  36. package/build/types/charts/core/cartesian.d.ts +79 -0
  37. package/build/types/charts/core/format.d.ts +9 -0
  38. package/build/types/charts/core/margins.d.ts +9 -0
  39. package/build/types/charts/core/palette.d.ts +13 -0
  40. package/build/types/charts/core/path.d.ts +24 -0
  41. package/build/types/charts/core/scale.d.ts +40 -0
  42. package/build/types/charts/core/series.d.ts +11 -0
  43. package/build/types/charts/core/spatial.d.ts +12 -0
  44. package/build/types/charts/core/stats.d.ts +34 -0
  45. package/build/types/charts/core/types.d.ts +31 -0
  46. package/build/types/charts/core/useChartWidth.d.ts +7 -0
  47. package/build/types/charts/index.d.ts +21 -0
  48. package/build/types/chat/ActionList/index.d.ts +46 -0
  49. package/build/types/chat/AppBar/index.d.ts +21 -0
  50. package/build/types/chat/ChatMessage/index.d.ts +24 -0
  51. package/build/types/chat/ChatThread/index.d.ts +24 -0
  52. package/build/types/chat/Citation/index.d.ts +15 -0
  53. package/build/types/chat/CodeBlock/index.d.ts +27 -0
  54. package/build/types/chat/DescriptionList/index.d.ts +16 -0
  55. package/build/types/chat/Legend/index.d.ts +20 -0
  56. package/build/types/chat/MessageActions/index.d.ts +21 -0
  57. package/build/types/chat/PromptInput/index.d.ts +47 -0
  58. package/build/types/chat/PromptSuggestions/index.d.ts +25 -0
  59. package/build/types/chat/Prose/index.d.ts +15 -0
  60. package/build/types/chat/ReasoningBlock/index.d.ts +24 -0
  61. package/build/types/chat/ReasoningText/index.d.ts +14 -0
  62. package/build/types/chat/SegmentBar/index.d.ts +46 -0
  63. package/build/types/chat/SourceList/index.d.ts +25 -0
  64. package/build/types/chat/TerminalOutput/index.d.ts +25 -0
  65. package/build/types/chat/ToolCall/index.d.ts +41 -0
  66. package/build/types/chat/index.d.ts +26 -0
  67. package/build/types/helpers/class-name.helper.d.ts +3 -0
  68. package/build/types/helpers/component.helper.d.ts +13 -0
  69. package/build/types/helpers/label.helper.d.ts +12 -0
  70. package/build/types/theme/palette.d.ts +203 -0
  71. package/build/types/theme/tokens.d.ts +208 -0
  72. package/build/types/types/common-element-props.type.d.ts +8 -0
  73. package/build/types/types/link.type.d.ts +14 -0
  74. package/build/types/types/theme.type.d.ts +223 -0
  75. package/package.json +19 -2
@@ -0,0 +1,34 @@
1
+ /** İSTATİSTİK — kutu grafiği ve histogram. Sonlu olmayan değerler (`NaN`, `±Infinity`) atılır. */
2
+ export declare const finite: (values: readonly (number | null | undefined)[]) => number[];
3
+ /** `[en küçük, en büyük]`; boş girdide `[0, 0]`. Dizi YAYILMAZ: büyük veride çağrı yığını taşmaz. */
4
+ export declare const extent: (values: readonly number[]) => [number, number];
5
+ /** Sıralı dizide çeyreklik — doğrusal ara değer (R tip 7 / Excel / NumPy varsayılanı). */
6
+ export declare const quantile: (sorted: readonly number[], probability: number) => number;
7
+ export type BoxStats = {
8
+ count: number;
9
+ min: number;
10
+ q1: number;
11
+ median: number;
12
+ q3: number;
13
+ max: number;
14
+ /** Bıyıkların ucu: 1,5 × IQR içindeki en uç GÖZLEM (Tukey). */
15
+ whiskerLow: number;
16
+ whiskerHigh: number;
17
+ /** Bıyık dışında kalan gözlemler. */
18
+ outliers: number[];
19
+ };
20
+ /** Beş sayı özeti + Tukey bıyıkları. Boş girdide `null`. */
21
+ export declare const boxStats: (values: readonly number[]) => BoxStats | null;
22
+ export type Bin = {
23
+ /** Dahil alt sınır. */
24
+ from: number;
25
+ /** Hariç üst sınır — SON bölme dahil. */
26
+ to: number;
27
+ count: number;
28
+ };
29
+ /**
30
+ * Histogram bölmeleri. Bölme sayısı verilmezse Sturges (`⌈log₂ n⌉ + 1`); sınırlar "güzel" bir adıma
31
+ * oturur, yani bölmeler 0-10-20 gibi okunur.
32
+ * ⚠ Son bölme üst ucu DAHİL eder: en büyük değer dışarıda kalmaz.
33
+ */
34
+ export declare const histogram: (values: readonly number[], binCount?: number) => Bin[];
@@ -0,0 +1,31 @@
1
+ import type { ChartTone } from './palette';
2
+ /** İpucunun bir satırı — renk karesi + ad + değer. */
3
+ export type TooltipRow = {
4
+ id: string;
5
+ label: string;
6
+ value: string;
7
+ tone?: ChartTone;
8
+ };
9
+ export type TooltipContent = {
10
+ title?: string;
11
+ rows: TooltipRow[];
12
+ };
13
+ /** Görsel olarak gizli veri tablosu — ekran okuyucu grafiği TABLO olarak da okur. */
14
+ export type ChartTable = {
15
+ columns: string[];
16
+ rows: string[][];
17
+ };
18
+ export type LegendEntry = {
19
+ id: string;
20
+ label: string;
21
+ tone: ChartTone;
22
+ };
23
+ /** Grafiğin çizim alanı — eksenler kenar boşluklarında. */
24
+ export type PlotArea = {
25
+ left: number;
26
+ top: number;
27
+ right: number;
28
+ bottom: number;
29
+ width: number;
30
+ height: number;
31
+ };
@@ -0,0 +1,7 @@
1
+ import { type RefObject } from 'react';
2
+ /**
3
+ * Kapsayıcının genişliği — `ResizeObserver` ile, BOYAMADAN ÖNCE ölçülür (ilk karede yanlış boyutta
4
+ * çizilip zıplamasın). `fixed` verilirse ölçüm yapılmaz.
5
+ */
6
+ declare const useChartWidth: (fixed?: number) => [RefObject<HTMLDivElement | null>, number];
7
+ export default useChartWidth;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @ahmetilhn/hanui/charts — SVG grafikleri, sıfır bağımlılık. Dışa verilen her ad bir SÖZLEŞMEDİR.
3
+ *
4
+ * ⚠ Ana girişe ait her şey paket adıyla alınır (`@ahmetilhn/hanui`); göreli yol yalnızca durumsuz
5
+ * yardımcılar ve SCSS içindir. Nöbetçi `__tests__/subentry-boundary.test.ts`.
6
+ * Stiller `@ahmetilhn/hanui/charts.css` — `styles.css`ten SONRA içe aktarılır.
7
+ */
8
+ export { default as LineChart } from './LineChart';
9
+ export { default as AreaChart } from './AreaChart';
10
+ export { default as BarChart } from './BarChart';
11
+ export { default as ComposedChart } from './ComposedChart';
12
+ export { default as PieChart, type PieSlice } from './PieChart';
13
+ export { default as ScatterPlot, type ScatterPoint, type ScatterSeries } from './ScatterPlot';
14
+ export { default as Heatmap } from './Heatmap';
15
+ export { default as BoxPlot, type BoxPlotGroup, type BoxPlotLabels } from './BoxPlot';
16
+ export { default as Histogram } from './Histogram';
17
+ export { default as RadarChart, type RadarAxis, type RadarSeries } from './RadarChart';
18
+ export type { ChartRow } from './core/CartesianChart';
19
+ export type { ChartSeries, ComposedSeries } from './core/series';
20
+ export type { ChartTone } from './core/palette';
21
+ export type { ValueFormat } from './core/format';
@@ -0,0 +1,46 @@
1
+ import { type FC, type ReactNode } from 'react';
2
+ type ListProps = {
3
+ /** Listenin erişilebilir adı ("Bağlam haritası"). */
4
+ label: string;
5
+ /** `ActionListItem` öğeleri. */
6
+ children: ReactNode;
7
+ /**
8
+ * Verilirse liste SANALLAŞTIRILIR: yalnızca görünen satırlar çizilir. Satır yüksekliği SABİT
9
+ * olmalı (px).
10
+ */
11
+ rowHeight?: number;
12
+ /** Sanal listede görünen alanın yüksekliği (px). */
13
+ maxHeight?: number;
14
+ className?: string;
15
+ testId?: string;
16
+ };
17
+ type ItemProps = {
18
+ children: ReactNode;
19
+ /** Satırın başında duran öğe (kimlik, ikon). */
20
+ start?: ReactNode;
21
+ /** Satırın sonunda duran öğe (tur numarası, süre). */
22
+ end?: ReactNode;
23
+ onClick?: () => void;
24
+ href?: string;
25
+ /** Verilirse satır bir SEÇİMDİR (`aria-pressed`); verilmezse düz bir eylem. */
26
+ isSelected?: boolean;
27
+ /** Geri planda kalan satır (gizlenmiş, eski) — renkle, saydamlıkla değil. */
28
+ isMuted?: boolean;
29
+ testId?: string;
30
+ /** Sanal listenin kendisi yazar: satırın gerçek konumu ve listenin gerçek boyu. */
31
+ 'aria-posinset'?: number;
32
+ 'aria-setsize'?: number;
33
+ };
34
+ /**
35
+ * Çerçeveli satır listesi — her satır bir EYLEM (açar, gider) ya da bir SEÇİM (ayrıntıyı gösterir).
36
+ *
37
+ * ⚠ Seçim mi eylem mi satır başına `isSelected` ile söylenir: verilirse satır bir aç/kapa düğmesidir
38
+ * (`aria-pressed`), verilmezse düz bir eylem. Eylemi seçim gibi sunmak kalıcı bir durum vaat ediyordu.
39
+ * ⚠ Sanal listede ekran okuyucu yalnızca çizilen satırları görür; gerçek konumu `aria-posinset` /
40
+ * `aria-setsize` söyler.
41
+ */
42
+ declare const ActionList: FC<ListProps>;
43
+ /** `ActionList` satırı — kendi `li`sini taşır. */
44
+ export declare const ActionListItem: FC<ItemProps>;
45
+ declare const _default: typeof ActionList;
46
+ export default _default;
@@ -0,0 +1,21 @@
1
+ import { type FC, type ReactNode } from 'react';
2
+ type Props = {
3
+ /** Sol baştaki marka (logo + ad). */
4
+ brand: ReactNode;
5
+ /** Markanın yanında, esneyen orta bölge (model, bağlantı durumu). */
6
+ start?: ReactNode;
7
+ /** Sağdaki eylem kümesi. */
8
+ end?: ReactNode;
9
+ className?: string;
10
+ testId?: string;
11
+ };
12
+ /**
13
+ * Uygulamanın üst bandı — sayfaya yapışık, sayfanın devamı (bant sayfayı ÖRTMEZ: `nav-*`).
14
+ *
15
+ * Kendi yüksekliğini ölçüp `--hanui-header-height`e yazar. README bu `ResizeObserver` kodunu her
16
+ * tüketiciye elle yazdırıyordu; sabit bir sayı yazan da vardı ve bant mobilde iki satıra düştüğünde
17
+ * yapışkan başlıklar altında kalıyordu.
18
+ */
19
+ declare const AppBar: FC<Props>;
20
+ declare const _default: typeof AppBar;
21
+ export default _default;
@@ -0,0 +1,24 @@
1
+ import { type FC, type ReactNode } from 'react';
2
+ export type ChatMessageAuthor = 'user' | 'assistant';
3
+ type Props = {
4
+ author: ChatMessageAuthor;
5
+ children: ReactNode;
6
+ /** Asistan mesajının avatarı (`Avatar tone="brand"`); ilk satır hizasında durur. */
7
+ avatar?: ReactNode;
8
+ /** Mesajın altındaki eylem çubuğu (`MessageActions`). */
9
+ actions?: ReactNode;
10
+ /** Yanıt hâlâ akıyor — `aria-busy`: ekran okuyucu yarım metni okumaz. */
11
+ isStreaming?: boolean;
12
+ className?: string;
13
+ testId?: string;
14
+ };
15
+ /**
16
+ * Sohbet mesajı. Kullanıcı mesajı sağa yaslı bir balon (`surface-2`, satır sonları korunur);
17
+ * asistan mesajı tam genişlik, avatar sol üstte.
18
+ *
19
+ * ⚠ Eylemler hover'da VE `:focus-within`de belirginleşir: klavye kullanıcısı da görmeli. Gizlenmez,
20
+ * yalnızca sessizleşir — `opacity` değil renk (soluklaştırma yasak).
21
+ */
22
+ declare const ChatMessage: FC<Props>;
23
+ declare const _default: typeof ChatMessage;
24
+ export default _default;
@@ -0,0 +1,24 @@
1
+ import { type FC, type ReactNode } from 'react';
2
+ type Props = {
3
+ /** Mesajlar (`ChatMessage`). */
4
+ children: ReactNode;
5
+ /** Alt dok — yazma alanı (`PromptInput`) ve ipucu satırı. */
6
+ dock?: ReactNode;
7
+ /** Yanıt akıyor. Akış bittiğinde "yanıt hazır" duyurulur. */
8
+ isStreaming?: boolean;
9
+ /** Bölgenin adı; verilmezse `labels.chat.thread`. */
10
+ label?: string;
11
+ className?: string;
12
+ testId?: string;
13
+ };
14
+ /**
15
+ * Sohbet iskeleti — kaydırma alanı, ortalanmış sütun ve alt dok.
16
+ *
17
+ * - Sona yapışık kalır; kullanıcı yukarı kaydırınca bırakır ve "en yeniye in" düğmesi belirir.
18
+ * - ⚠ Akan belirteçler OKUNMAZ (`aria-live` yok, `role="log"` değil): her belirteci duyuran bir bölge
19
+ * ekran okuyucuyu kullanılamaz kılıyordu. Yanıt BİTTİĞİNDE tek bir cümle duyurulur.
20
+ * - Dok sayfanın dibine yapışır ve `safe-area` payını taşır; iOS'ta klavye açıkken görünür kalır.
21
+ */
22
+ declare const ChatThread: FC<Props>;
23
+ declare const _default: typeof ChatThread;
24
+ export default _default;
@@ -0,0 +1,15 @@
1
+ import { type FC } from 'react';
2
+ type Props = {
3
+ /** Kaynağın numarası — `SourceList`teki sırayla eşleşir (1'den başlar). */
4
+ index: number;
5
+ href?: string;
6
+ onClick?: () => void;
7
+ className?: string;
8
+ };
9
+ /**
10
+ * Metin içi atıf — "[3]". Okunan adı `labels.chat.citation(3)` ("Kaynak 3"): görünen rakam tek
11
+ * başına ekran okuyucuda "üç" diye, bağlamsız okunuyordu.
12
+ */
13
+ declare const Citation: FC<Props>;
14
+ declare const _default: typeof Citation;
15
+ export default _default;
@@ -0,0 +1,27 @@
1
+ import { type FC } from 'react';
2
+ type Props = {
3
+ /** Ham kod — kopyalanan ve `html` yokken çizilen metin. */
4
+ code: string;
5
+ /** Dil adı; başlık şeridinde ve kopyalama düğmesinin adında. */
6
+ language?: string;
7
+ /**
8
+ * ÖNCEDEN VURGULANMIŞ HTML (Shiki çıktısı). Verilmezse düz `<pre>` çizilir.
9
+ * ⚠ GÜVENLİK ÇAĞIRANIN: bu dize olduğu gibi DOM'a yazılır. Yalnızca kendi vurgulayıcınızın
10
+ * ürettiği çıktıyı verin; kullanıcı girdisini asla doğrudan geçirmeyin.
11
+ */
12
+ html?: string;
13
+ /** Gövdenin tavanı (px); uzun kod kendi içinde kayar. */
14
+ maxHeight?: number;
15
+ className?: string;
16
+ testId?: string;
17
+ };
18
+ /**
19
+ * Kod bloğu — başlık şeridi (dil + kopyala) ve kod gövdesi.
20
+ *
21
+ * ⚠ Vurgulayıcı İÇERMEZ (Shiki tüketicide). Shiki'nin çift tema çıktısı (`--shiki-light` /
22
+ * `--shiki-dark` değişkenleri) burada temaya bağlanır; vurgusuz kod da aynı kutuda okunur.
23
+ * Kod satırları SARILMAZ: dar ekranda kutu yatay kayar (kodun girintisi anlamdır).
24
+ */
25
+ declare const CodeBlock: FC<Props>;
26
+ declare const _default: typeof CodeBlock;
27
+ export default _default;
@@ -0,0 +1,16 @@
1
+ import { type FC, type ReactNode } from 'react';
2
+ export type DescriptionItem = {
3
+ term: ReactNode;
4
+ description: ReactNode;
5
+ /** Değer teknik bir kimlik (kod, yol, karma): teknik fontta ve satır içinde bölünebilir. */
6
+ isTechnical?: boolean;
7
+ };
8
+ type Props = {
9
+ items: DescriptionItem[];
10
+ className?: string;
11
+ testId?: string;
12
+ };
13
+ /** Terim–değer listesi — yerel `<dl>`; ekran okuyucu terimi değeriyle birlikte okur. */
14
+ declare const DescriptionList: FC<Props>;
15
+ declare const _default: typeof DescriptionList;
16
+ export default _default;
@@ -0,0 +1,20 @@
1
+ import { type FC } from 'react';
2
+ /** Kategorik paletin adları (`cat-*`, `series-*`) + bekleme/boşluk için `muted`. */
3
+ export type LegendTone = 'cat-1' | 'cat-2' | 'cat-3' | 'cat-4' | 'cat-5' | 'series-1' | 'series-2' | 'muted';
4
+ export type LegendItem = {
5
+ id: string;
6
+ label: string;
7
+ tone: LegendTone;
8
+ };
9
+ type Props = {
10
+ items: LegendItem[];
11
+ className?: string;
12
+ testId?: string;
13
+ };
14
+ /**
15
+ * Grafik lejantı — renk karesi + ad. Renk yalnızca kategorik paletten gelir (iki temanın üç
16
+ * yüzeyinde ≥3:1); ad her zaman metin olarak yazılır, renk tek başına anlam taşımaz.
17
+ */
18
+ declare const Legend: FC<Props>;
19
+ declare const _default: typeof Legend;
20
+ export default _default;
@@ -0,0 +1,21 @@
1
+ import { type FC, type ReactNode } from 'react';
2
+ type Props = {
3
+ /** `IconButton` / `Button size={UISize.XSMALL}` öğeleri. */
4
+ children: ReactNode;
5
+ /** Araç çubuğunun sonunda duran okunan bilgi (süre, belirteç, maliyet). */
6
+ meta?: ReactNode;
7
+ /** Araç çubuğunun adı; verilmezse `labels.chat.messageActions`. */
8
+ label?: string;
9
+ className?: string;
10
+ testId?: string;
11
+ };
12
+ /**
13
+ * Mesajın eylem çubuğu — kopyala, yeniden dene, ayrıntı.
14
+ *
15
+ * Klavye (`role="toolbar"`, tek sekme durağı değil — her düğme sekme sırasında kalır):
16
+ * `ArrowRight` / `ArrowLeft` sonraki / önceki eylem · `Home` / `End` ilk / son.
17
+ * ⚠ Satır içi araç çubuğu: ok tuşu yalnızca odak ÇUBUKTAYKEN çalışır, sayfayı kaydırmaz.
18
+ */
19
+ declare const MessageActions: FC<Props>;
20
+ declare const _default: typeof MessageActions;
21
+ export default _default;
@@ -0,0 +1,47 @@
1
+ import { type ReactNode } from 'react';
2
+ type Props = {
3
+ value: string;
4
+ onChange: (value: string) => void;
5
+ /** Enter ya da gönder düğmesi. Boş (yalnızca boşluk) metinde çağrılmaz. */
6
+ onSubmit: () => void;
7
+ /** Akışı durdurur — `isBusy` iken düğme ve `Escape`. */
8
+ onStop?: () => void;
9
+ /** Yanıt akıyor: gönder yerine durdur düğmesi. */
10
+ isBusy?: boolean;
11
+ /** Alanın tamamı pasif — yazılamaz. */
12
+ isDisabled?: boolean;
13
+ /**
14
+ * Yazmaya izin var ama GÖNDERİM kapalı (bağlantı yok, oturum hazırlanıyor). Kullanıcı mesajını
15
+ * yazabilir; gönder düğmesi ve `Enter` bekler.
16
+ */
17
+ isSubmitDisabled?: boolean;
18
+ /** Yer tutucu — çağrı yerine ÖZGÜ metin, `labels`a girmez. */
19
+ placeholder: string;
20
+ /** Alanın erişilebilir adı; verilmezse yer tutucu. */
21
+ label?: string;
22
+ /** Otomatik büyümenin tavanı (satır). */
23
+ maxRows?: number;
24
+ /** Alanın altındaki ipucu satırı (`Kbd` ile kısayollar). */
25
+ hint?: ReactNode;
26
+ /** Alanın solunda (ek dosya, model seçici). */
27
+ start?: ReactNode;
28
+ /** Gönder düğmesinin solunda. */
29
+ end?: ReactNode;
30
+ className?: string;
31
+ testId?: string;
32
+ };
33
+ /**
34
+ * Sohbet yazma alanı — çerçevesiz `Textarea` + yuvarlak gönder / durdur düğmesi.
35
+ *
36
+ * Klavye: `Enter` gönderir · `Shift+Enter` yeni satır · `Escape` (akış sürerken) durdurur.
37
+ * - ⚠ IME yazımı sırasında (`isComposing`, Türkçe dışı klavyeler) `Enter` GÖNDERMEZ: harf seçimini
38
+ * onaylıyor, mesajı değil.
39
+ * - ⚠ `Escape` açık bir yüzey (modal, menü, bildirim) varken DOKUNMAZ (`hasOpenSurface`): kullanıcı
40
+ * yalnızca o yüzeyi kapatmak istiyordu, arkadaki akış da duruyordu.
41
+ * - Gönder düğmesi ekranın TEK birincil eylemi: çam dolgu, koyu temada mint sınır.
42
+ * - Odak göstergesini çerçeve çizer (`:focus-within`); alan çerçevesiz (`variant="bare"`).
43
+ * - `ref` metin alanına iletilir: gönderimden ya da bir öneri seçildikten sonra odağı geri vermek için.
44
+ */
45
+ declare const PromptInput: import("react").ForwardRefExoticComponent<Props & import("react").RefAttributes<HTMLTextAreaElement>>;
46
+ declare const _default: typeof PromptInput;
47
+ export default _default;
@@ -0,0 +1,25 @@
1
+ import { type FC } from 'react';
2
+ export type PromptSuggestion = {
3
+ id: string;
4
+ /** Gönderilecek istem ya da kısa adı. */
5
+ label: string;
6
+ /** İkinci satır — neyi sorduğu. */
7
+ description?: string;
8
+ };
9
+ type Props = {
10
+ /** Grubun erişilebilir adı ("Örnek istemler"). */
11
+ label: string;
12
+ items: PromptSuggestion[];
13
+ onPick: (item: PromptSuggestion) => void;
14
+ className?: string;
15
+ testId?: string;
16
+ };
17
+ /**
18
+ * Hazır istem önerileri — boş sohbetin başlangıç kartları.
19
+ *
20
+ * ⚠ Bunlar EYLEM, seçim değil: `ChipGroup` (seçim) yerine düğme ızgarası. Basmak bir şey seçmez,
21
+ * istemi gönderir ya da yazma alanına koyar.
22
+ */
23
+ declare const PromptSuggestions: FC<Props>;
24
+ declare const _default: typeof PromptSuggestions;
25
+ export default _default;
@@ -0,0 +1,15 @@
1
+ import { type FC, type HTMLAttributes } from 'react';
2
+ type Props = HTMLAttributes<HTMLDivElement> & {
3
+ testId?: string;
4
+ };
5
+ /**
6
+ * Uzun metin kabı — markdown çıktısının (başlık, paragraf, liste, alıntı, tablo, satır içi kod,
7
+ * bağlantı, formül) tipografisi.
8
+ *
9
+ * ⚠ AYRIŞTIRICI İÇERMEZ: `react-markdown`, `remark`/`rehype` eklentileri ve KaTeX tüketicide kalır;
10
+ * hanui yalnızca çıktının nasıl göründüğünü verir (`linkComponent` ile aynı desen). Bir UI paketinin
11
+ * markdown ayrıştırıcısı taşıması, Hanparça'nın hiç kullanmadığı yüzlerce kB demek.
12
+ */
13
+ declare const Prose: FC<Props>;
14
+ declare const _default: typeof Prose;
15
+ export default _default;
@@ -0,0 +1,24 @@
1
+ import { type FC, type ReactNode } from 'react';
2
+ type Props = {
3
+ /** Başlık — çağrı yerine ÖZGÜ ("Düşündü · 3 araç · 2,4 sn"), `labels`a girmez. */
4
+ summary: ReactNode;
5
+ /** Tur sürüyor: blok AÇIK durur ve gösterge döner. */
6
+ isRunning?: boolean;
7
+ /** Süren işin göstergesi; verilmezse `Spinner`. Marka yükleyicisi buraya geçer. */
8
+ indicator?: ReactNode;
9
+ /** Kapalı bir turda açılış durumu. */
10
+ isDefaultOpen?: boolean;
11
+ /** Gövde: `ReasoningText`, ara metinler, `ToolCall`lar. */
12
+ children: ReactNode;
13
+ className?: string;
14
+ testId?: string;
15
+ };
16
+ /**
17
+ * "Model ne yaptı" bloğu — akıl yürütme, ara metinler, araç çağrıları.
18
+ *
19
+ * Tur sürerken AÇIK durur, bitince kapanır. ⚠ Kullanıcı bloğu elle açtıysa ya da kapattıysa o
20
+ * tercihe DOKUNULMAZ: tur bittiğinde okuduğu bloğun elinden çekilmesi en sık şikâyetti.
21
+ */
22
+ declare const ReasoningBlock: FC<Props>;
23
+ declare const _default: typeof ReasoningBlock;
24
+ export default _default;
@@ -0,0 +1,14 @@
1
+ import { type FC } from 'react';
2
+ type Props = {
3
+ text: string;
4
+ /** Kaydırılabildiğinde bölgenin okunan adı ("Akıl yürütme"). */
5
+ label: string;
6
+ /** Kutunun tavanı (px); akan metin bu yükseklikte sona yapışık kayar. */
7
+ maxHeight?: number;
8
+ className?: string;
9
+ testId?: string;
10
+ };
11
+ /** Akıl yürütme metni — yüksekliği sınırlı, akarken sona yapışık (`ScrollArea isFollowingEnd`). */
12
+ declare const ReasoningText: FC<Props>;
13
+ declare const _default: typeof ReasoningText;
14
+ export default _default;
@@ -0,0 +1,46 @@
1
+ import { type FC } from 'react';
2
+ import type { LegendTone } from '../Legend';
3
+ export type SegmentBarSegment = {
4
+ id: string;
5
+ /** Parçanın okunan adı, değeriyle: "Önek · 12,4 B". Özet adın parçası olur. */
6
+ label: string;
7
+ tone: LegendTone;
8
+ } & ({
9
+ /** Yığılmış çubukta parçanın büyüklüğü — parçalar sırayla dizilir. */
10
+ value: number;
11
+ from?: never;
12
+ to?: never;
13
+ } | {
14
+ /** Zaman çizelgesinde parçanın başlangıcı ve bitişi (aynı ölçekte). */
15
+ from: number;
16
+ to: number;
17
+ value?: never;
18
+ });
19
+ export type SegmentBarMarker = {
20
+ id: string;
21
+ /** Konum, `max` ile aynı ölçekte. */
22
+ at: number;
23
+ label: string;
24
+ tone?: 'neutral' | 'danger';
25
+ };
26
+ type Props = {
27
+ /** Grafiğin adı ("Bağlam bileşimi"); parçaların ve işaretlerin adlarıyla birlikte okunur. */
28
+ label: string;
29
+ /** Ölçeğin tavanı. */
30
+ max: number;
31
+ segments: SegmentBarSegment[];
32
+ /** Dikey çizgi işaretleri — bütçe sınırı, hedef. */
33
+ markers?: SegmentBarMarker[];
34
+ className?: string;
35
+ testId?: string;
36
+ };
37
+ /**
38
+ * Parçalı çubuk — yığılmış bileşim (`value`) ya da zaman çizelgesi (`from`/`to`).
39
+ *
40
+ * Erişilebilirlik: çubuk TEK bir görseldir (`role="img"`); adı grafiğin adı + her parçanın ve
41
+ * işaretin okunan adıdır. Parça başına odaklanılabilir öğe çizilmez — bir çubuğun içinde sekme
42
+ * durağı dizmek, okunan özetten daha az bilgi verip daha çok tuş istiyordu.
43
+ */
44
+ declare const SegmentBar: FC<Props>;
45
+ declare const _default: typeof SegmentBar;
46
+ export default _default;
@@ -0,0 +1,25 @@
1
+ import { type FC } from 'react';
2
+ export type SourceItem = {
3
+ id: string;
4
+ title: string;
5
+ /** Dış kaynak — yeni sekmede açılır. */
6
+ url?: string;
7
+ /** Kaynağın alan adı ("tr.wikipedia.org") — başlığın altında. */
8
+ domain?: string;
9
+ /** Uygulama içinde açılan kaynak (yan panel, kip pencere). `url` ile birlikte verilmez. */
10
+ onSelect?: () => void;
11
+ };
12
+ type Props = {
13
+ items: SourceItem[];
14
+ /** Listenin adı; verilmezse `labels.chat.sources`. */
15
+ label?: string;
16
+ className?: string;
17
+ testId?: string;
18
+ };
19
+ /**
20
+ * Yanıtın kaynakları — numaralı liste; numara yanıttaki `Citation` ile eşleşir.
21
+ * Dış bağlantı yeni sekmede açılır ve `noopener` taşır; uygulama içi kaynak bir düğmedir.
22
+ */
23
+ declare const SourceList: FC<Props>;
24
+ declare const _default: typeof SourceList;
25
+ export default _default;
@@ -0,0 +1,25 @@
1
+ import { type FC } from 'react';
2
+ export type TerminalChunk = {
3
+ stream: 'stdout' | 'stderr';
4
+ text: string;
5
+ };
6
+ type Props = {
7
+ /** Çalıştırılan komut — `$` istemiyle ilk satırda. */
8
+ command?: string;
9
+ chunks: TerminalChunk[];
10
+ /** Kaydırılabildiğinde bölgenin okunan adı ("Komut çıktısı"). */
11
+ label: string;
12
+ /** Gövdenin tavanı (px). */
13
+ maxHeight?: number;
14
+ className?: string;
15
+ testId?: string;
16
+ };
17
+ /**
18
+ * Terminal çıktısı — MÜREKKEP yüzey, iki temada da koyu (`shell*`). Akarken sona yapışık kalır.
19
+ *
20
+ * ⚠ stderr satırı renkten başka bir işaret de taşır: görsel olarak gizli bir önek
21
+ * (`labels.chat.stderr`, "hata çıktısı"). Kırmızı tek başına anlam taşıyamaz (1.4.1).
22
+ */
23
+ declare const TerminalOutput: FC<Props>;
24
+ declare const _default: typeof TerminalOutput;
25
+ export default _default;
@@ -0,0 +1,41 @@
1
+ import { type FC, type ReactNode } from 'react';
2
+ export type ToolCallStatus = 'running' | 'ok' | 'error' | 'aborted' | 'interrupted';
3
+ type Props = {
4
+ /** Aracın ikonu. */
5
+ icon?: ReactNode;
6
+ /** Aracın adı — çağrı yerine özgü ("bash", "araştır"). */
7
+ name: string;
8
+ /** Tek satırlık özet (komut, sorgu); teknik fontta, taşan kesilir. */
9
+ summary?: string;
10
+ status: ToolCallStatus;
11
+ /** Sağdaki ikincil bilgi (süre). */
12
+ meta?: ReactNode;
13
+ isDefaultOpen?: boolean;
14
+ /**
15
+ * Kontrollü açılış — `onOpenChange` ile. Örn. çalışırken açık, bitince (kullanıcı dokunmadıysa)
16
+ * kapalı bir terminal kartı.
17
+ */
18
+ isOpen?: boolean;
19
+ onOpenChange?: (isOpen: boolean) => void;
20
+ /** Gövde — `ToolCallSection`lar. */
21
+ children?: ReactNode;
22
+ className?: string;
23
+ testId?: string;
24
+ };
25
+ /**
26
+ * Araç çağrısı kartı — ikon, ad, özet, durum noktası ve süre; açılınca bölümleri.
27
+ *
28
+ * Durum hem noktayla hem OKUNAN metinle bildirilir (`labels.chat.toolStatus`): renk tek başına
29
+ * anlam taşımaz. Çalışan çağrının noktası nabız atar ve NÖTRDÜR — süren iş marka yüzeyi değil.
30
+ */
31
+ declare const ToolCall: FC<Props>;
32
+ type SectionProps = {
33
+ /** Bölümün başlığı ("Girdi", "Çıktı", "Hata") — overline. */
34
+ label: string;
35
+ children: ReactNode;
36
+ className?: string;
37
+ };
38
+ /** Araç çağrısının bir bölümü — başlık + gövde. */
39
+ export declare const ToolCallSection: FC<SectionProps>;
40
+ declare const _default: typeof ToolCall;
41
+ export default _default;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @ahmetilhn/hanui/chat — sohbet ve uygulama bileşenleri. Dışa verilen her ad bir SÖZLEŞMEDİR.
3
+ *
4
+ * ⚠ Ana girişe ait HER ŞEY (bileşenler, `useHanui`, kancalar) paket adıyla alınır:
5
+ * `import { … } from '@ahmetilhn/hanui'`. Göreli yol yalnızca durumsuz yardımcılar (`cx`,
6
+ * `named`, metin çözümü) ve SCSS içindir. Nöbetçi `__tests__/subentry-boundary.test.ts`.
7
+ * Stiller `@ahmetilhn/hanui/chat.css` — `styles.css`ten AYRI ve ONDAN SONRA içe aktarılır.
8
+ */
9
+ export { default as ChatThread } from './ChatThread';
10
+ export { default as ChatMessage, type ChatMessageAuthor } from './ChatMessage';
11
+ export { default as PromptInput } from './PromptInput';
12
+ export { default as PromptSuggestions, type PromptSuggestion } from './PromptSuggestions';
13
+ export { default as Prose } from './Prose';
14
+ export { default as CodeBlock } from './CodeBlock';
15
+ export { default as ReasoningBlock } from './ReasoningBlock';
16
+ export { default as ReasoningText } from './ReasoningText';
17
+ export { default as ToolCall, ToolCallSection, type ToolCallStatus } from './ToolCall';
18
+ export { default as TerminalOutput, type TerminalChunk } from './TerminalOutput';
19
+ export { default as SourceList, type SourceItem } from './SourceList';
20
+ export { default as Citation } from './Citation';
21
+ export { default as MessageActions } from './MessageActions';
22
+ export { default as AppBar } from './AppBar';
23
+ export { default as ActionList, ActionListItem } from './ActionList';
24
+ export { default as SegmentBar, type SegmentBarMarker, type SegmentBarSegment } from './SegmentBar';
25
+ export { default as Legend, type LegendItem, type LegendTone } from './Legend';
26
+ export { default as DescriptionList, type DescriptionItem } from './DescriptionList';
@@ -0,0 +1,3 @@
1
+ import { ClassValue } from '@/types/common-element-props.type';
2
+ /** Sınıf adı birleştirici. */
3
+ export declare const cx: (...values: ClassValue[]) => string;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * DevTools adı — modül düzeyinde YAN ETKİ bırakmadan.
3
+ *
4
+ * ⚠ `X.displayName = 'X'` KULLANILMAZ: modül düzeyindeki özellik ataması
5
+ * bundler için yan etkidir ve hedefinin tüm bağımlılık zincirini ayakta tutar.
6
+ * Ölçüldü: yalnızca `Badge` import eden uygulama 20,7 kB indiriyordu (paketin
7
+ * tamamı 21,8 kB). Atama çağrıya dönüşünce `#__PURE__` işaretlenebiliyor →
8
+ * `Badge` 2,71 kB. Nöbetçi `.size-limit.json`.
9
+ *
10
+ * @example
11
+ * export default memo(named(Button, 'Button')) as typeof Button;
12
+ */
13
+ export declare const named: <TComponent extends object>(component: TComponent, displayName: string) => TComponent;
@@ -0,0 +1,12 @@
1
+ /** Metin çözümlemesi: prop → sağlayıcı config'i → geliştirme uyarısı. */
2
+ import type { Formatter } from '@/types/theme.type';
3
+ /** Uyarı durumu testler arasında sızmamalı; her test kendi durumundan başlar. */
4
+ export declare const resetLabelWarnings: () => void;
5
+ /**
6
+ * Verilen metni çözer.
7
+ * @param key Uyarıda gösterilecek yol (`Modal.closeLabel`).
8
+ * @param values Öncelik sırasına göre adaylar: prop önce, config sonra.
9
+ */
10
+ export declare const resolveLabel: (key: string, ...values: (string | undefined)[]) => string;
11
+ /** Biçimlendirici çözümü — değere bağlı metinler için. */
12
+ export declare const resolveFormatter: <TArgs extends unknown[]>(key: string, formatter: Formatter<TArgs> | undefined, ...args: TArgs) => string;