@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.
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 +661 -717
  15. package/build/index.js +3396 -3303
  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,14 @@
1
+ import { type CartesianChartProps } from '../core/CartesianChart';
2
+ import type { ChartSeries } from '../core/series';
3
+ type Props = Omit<CartesianChartProps, 'series' | 'orientation'> & {
4
+ series: readonly ChartSeries[];
5
+ };
6
+ /**
7
+ * Alan grafiği — çizginin altı dolu; `isStacked` ile seriler üst üste (bütünün parçaları).
8
+ * Taban SIFIR: alanın yüksekliği değerin kendisi, kırpılmış bir eksen alanı yanlış oranda gösterir.
9
+ *
10
+ * Klavye: `←`/`→` önceki/sonraki x · `Home`/`End` · `Escape`.
11
+ */
12
+ declare const AreaChart: ({ series, ...rest }: Props) => import("react").JSX.Element;
13
+ declare const _default: typeof AreaChart;
14
+ export default _default;
@@ -0,0 +1,16 @@
1
+ import { type CartesianChartProps } from '../core/CartesianChart';
2
+ import type { ChartSeries } from '../core/series';
3
+ type Props = Omit<CartesianChartProps, 'series' | 'curve' | 'hasPoints'> & {
4
+ series: readonly ChartSeries[];
5
+ };
6
+ /**
7
+ * Çubuk / sütun grafiği — kategoriler arası karşılaştırma. Birden çok seri yan yana (gruplu) ya da
8
+ * `isStacked` ile üst üste; `orientation="horizontal"` uzun kategori adları için (etiket kesilmez,
9
+ * sığmazsa "…" ile kısalır, tam adı ipucu ve tabloda).
10
+ * Eksi değer sıfırın ALTINA iner; yığında artı ve eksi ayrı birikir.
11
+ *
12
+ * Klavye: `←`/`→` (ya da `↑`/`↓`) önceki/sonraki kategori · `Home`/`End` · `Escape`.
13
+ */
14
+ declare const BarChart: ({ series, ...rest }: Props) => import("react").JSX.Element;
15
+ declare const _default: typeof BarChart;
16
+ export default _default;
@@ -0,0 +1,43 @@
1
+ import { type ValueFormat } from '../core/format';
2
+ import { type ChartTone } from '../core/palette';
3
+ export type BoxPlotGroup = {
4
+ id: string;
5
+ label: string;
6
+ /** Ham gözlemler — beş sayı özeti ve aykırılar bileşende hesaplanır (Tukey, 1,5 × IQR). */
7
+ values: readonly number[];
8
+ tone?: ChartTone;
9
+ };
10
+ /** Özetin okunan adları — metin kütüphaneden gelmez. */
11
+ export type BoxPlotLabels = {
12
+ min: string;
13
+ q1: string;
14
+ median: string;
15
+ q3: string;
16
+ max: string;
17
+ outliers: string;
18
+ count: string;
19
+ };
20
+ type Props = {
21
+ label: string;
22
+ description?: string;
23
+ groups: readonly BoxPlotGroup[];
24
+ /** Grup ekseninin ve tablonun ilk sütun başlığı. */
25
+ groupLabel: string;
26
+ labels: BoxPlotLabels;
27
+ height?: number;
28
+ width?: number;
29
+ formatValue?: ValueFormat;
30
+ className?: string;
31
+ testId?: string;
32
+ };
33
+ /**
34
+ * Kutu grafiği — grupların dağılımını karşılaştırır: kutu Q1–Q3, çizgi medyan, bıyıklar 1,5 × IQR
35
+ * içindeki en uç gözlem, dışarıdakiler nokta (aykırı).
36
+ * ⚠ Bıyık ucu bir HESAP değil bir GÖZLEM: Q3 + 1,5 × IQR'ye kadar çizmek, verinin hiç ulaşmadığı
37
+ * bir değeri gösterirdi.
38
+ *
39
+ * Klavye: `←`/`→` önceki/sonraki grup · `Home`/`End` · `Escape`.
40
+ */
41
+ declare const BoxPlot: ({ label, description, groups, groupLabel, labels: summaryLabels, height, width: fixedWidth, formatValue, className, testId, }: Props) => import("react").JSX.Element;
42
+ declare const _default: typeof BoxPlot;
43
+ export default _default;
@@ -0,0 +1,16 @@
1
+ import { type CartesianChartProps } from '../core/CartesianChart';
2
+ import type { ComposedSeries } from '../core/series';
3
+ type Props = Omit<CartesianChartProps, 'series' | 'orientation'> & {
4
+ /** Seri başına tür (`line` / `area` / `bar`) ve eksen (`left` / `right`). */
5
+ series: readonly ComposedSeries[];
6
+ };
7
+ /**
8
+ * Bileşik grafik — çubuk, çizgi ve alan aynı x ekseninde; farklı birimdeki seri SAĞ eksene
9
+ * (`axis: 'right'`). Çizim sırası: alan → çubuk → çizgi (çizgi her zaman görünür kalır).
10
+ * ⚠ İki eksen okuyucuyu yanıltabilir: sağ eksendeki seri `format` ile kendi birimini söylemeli.
11
+ *
12
+ * Klavye: `←`/`→` önceki/sonraki x · `Home`/`End` · `Escape`.
13
+ */
14
+ declare const ComposedChart: (props: Props) => import("react").JSX.Element;
15
+ declare const _default: typeof ComposedChart;
16
+ export default _default;
@@ -0,0 +1,30 @@
1
+ import { type ValueFormat } from '../core/format';
2
+ import { type ChartTone } from '../core/palette';
3
+ type Props = {
4
+ label: string;
5
+ description?: string;
6
+ /** Sütun adları (x). */
7
+ columns: readonly string[];
8
+ /** Satır adları (y). */
9
+ rows: readonly string[];
10
+ /** `values[satır][sütun]`; `null` boş hücre (veri yok — sıfır değil). */
11
+ values: readonly (readonly (number | null)[])[];
12
+ /** Hücre değerinin adı ("Sipariş"). */
13
+ valueLabel: string;
14
+ tone?: ChartTone;
15
+ height?: number;
16
+ width?: number;
17
+ formatValue?: ValueFormat;
18
+ className?: string;
19
+ testId?: string;
20
+ };
21
+ /**
22
+ * Isı haritası — iki kategorik boyutta bir değerin yoğunluğu. Renk TEK TONUN yoğunluğu
23
+ * (sıralı ölçek): çok renkli bir ölçek düşük-yüksek sırasını okutmuyordu.
24
+ * Değer renk tek başına okunmaz: ipucu, duyuru ve veri tablosu sayıyı söyler.
25
+ *
26
+ * Klavye: `←`/`→` sütun · `↑`/`↓` satır · `Home`/`End` ilk/son hücre · `Escape`.
27
+ */
28
+ declare const Heatmap: ({ label, description, columns, rows, values, valueLabel, tone, height, width: fixedWidth, formatValue, className, testId, }: Props) => import("react").JSX.Element;
29
+ declare const _default: typeof Heatmap;
30
+ export default _default;
@@ -0,0 +1,29 @@
1
+ import { type ValueFormat } from '../core/format';
2
+ import { type ChartTone } from '../core/palette';
3
+ type Props = {
4
+ label: string;
5
+ description?: string;
6
+ /** Ham gözlemler; bölmeleri bileşen hesaplar. Sonlu olmayan değerler atılır. */
7
+ values: readonly number[];
8
+ /** Hedef bölme sayısı; verilmezse Sturges. Sınırlar "güzel" adıma oturur, sayı yaklaşık. */
9
+ bins?: number;
10
+ /** Değişkenin adı (x ekseni, tablo). */
11
+ valueLabel: string;
12
+ /** Sıklığın adı ("Sipariş sayısı"). */
13
+ countLabel: string;
14
+ tone?: ChartTone;
15
+ height?: number;
16
+ width?: number;
17
+ formatValue?: ValueFormat;
18
+ className?: string;
19
+ testId?: string;
20
+ };
21
+ /**
22
+ * Histogram — tek değişkenin dağılımı. x ekseni SÜREKLİ (bölme sınırları), sütunlar bitişik.
23
+ * Bölme: `[alt, üst)`, son bölme üst ucu DAHİL eder (en büyük değer dışarıda kalmaz).
24
+ *
25
+ * Klavye: `←`/`→` önceki/sonraki bölme · `Home`/`End` · `Escape`.
26
+ */
27
+ declare const Histogram: ({ label, description, values, bins: binCount, valueLabel, countLabel, tone, height, width: fixedWidth, formatValue, className, testId, }: Props) => import("react").JSX.Element;
28
+ declare const _default: typeof Histogram;
29
+ export default _default;
@@ -0,0 +1,14 @@
1
+ import { type CartesianChartProps } from '../core/CartesianChart';
2
+ import type { ChartSeries } from '../core/series';
3
+ type Props = Omit<CartesianChartProps, 'series' | 'isStacked' | 'orientation'> & {
4
+ series: readonly ChartSeries[];
5
+ };
6
+ /**
7
+ * Çizgi grafiği — bir ya da daha çok serinin x boyunca değişimi. Sayısal x sürekli eksen, metin x
8
+ * kategorik eksen. `null` değer çizgiyi KESER (eksik veri sıfır değildir).
9
+ *
10
+ * Klavye: grafiğe sekmeyle gelinir · `←`/`→` önceki/sonraki x · `Home`/`End` · `Escape`.
11
+ */
12
+ declare const LineChart: ({ series, ...rest }: Props) => import("react").JSX.Element;
13
+ declare const _default: typeof LineChart;
14
+ export default _default;
@@ -0,0 +1,36 @@
1
+ import { type ValueFormat } from '../core/format';
2
+ import { type ChartTone } from '../core/palette';
3
+ export type PieSlice = {
4
+ id: string;
5
+ label: string;
6
+ value: number;
7
+ tone?: ChartTone;
8
+ };
9
+ type Props = {
10
+ label: string;
11
+ description?: string;
12
+ data: readonly PieSlice[];
13
+ /** `donut` ortası boş halka; ortaya `centerLabel` / `centerValue` yazılır. */
14
+ variant?: 'pie' | 'donut';
15
+ /** Halkanın ortasındaki büyük değer (toplam); verilmezse görünür dilimlerin toplamı. */
16
+ centerValue?: string;
17
+ /** Halkanın ortasındaki küçük yazı ("Toplam"). */
18
+ centerLabel?: string;
19
+ /** Değerin adı (tablo sütunu). */
20
+ valueLabel: string;
21
+ height?: number;
22
+ width?: number;
23
+ formatValue?: ValueFormat;
24
+ className?: string;
25
+ testId?: string;
26
+ };
27
+ /**
28
+ * Pasta / halka grafiği — bir bütünün parçaları. Dilim sırası verinin sırası (saat 12'den, saat
29
+ * yönünde). Sıfır ve eksi değer dilim açmaz (bütünün parçası olamaz); tabloda görünür.
30
+ * ⚠ Altıdan çok dilim okunmaz — kategorik palet altı tonda döner; uzun kuyruğu "Diğer"de toplayın.
31
+ *
32
+ * Klavye: `←`/`→` önceki/sonraki dilim · `Home`/`End` · `Escape`.
33
+ */
34
+ declare const PieChart: ({ label, description, data, variant, centerValue, centerLabel, valueLabel, height, width: fixedWidth, formatValue, className, testId, }: Props) => import("react").JSX.Element;
35
+ declare const _default: typeof PieChart;
36
+ export default _default;
@@ -0,0 +1,40 @@
1
+ import { type ValueFormat } from '../core/format';
2
+ import { type ChartTone } from '../core/palette';
3
+ export type RadarAxis = {
4
+ key: string;
5
+ label: string;
6
+ };
7
+ export type RadarSeries = {
8
+ id: string;
9
+ label: string;
10
+ /** Eksen anahtarı → değer. Eksik ya da `null` değer merkezde çizilir, ipucunda "—" okunur. */
11
+ values: Readonly<Record<string, number | null | undefined>>;
12
+ tone?: ChartTone;
13
+ };
14
+ type Props = {
15
+ label: string;
16
+ description?: string;
17
+ /** Saat 12'den saat yönünde dizilen eksenler. ⚠ Üçten az eksen bir alan çizmez. */
18
+ axes: readonly RadarAxis[];
19
+ series: readonly RadarSeries[];
20
+ /**
21
+ * Ortak ölçeğin üst ucu. Verilmezse en büyük değerden "güzel" bir sayıya yuvarlanır.
22
+ * ⚠ Bütün eksenler AYNI ölçeği paylaşır: birimleri farklı eksenleri önce normalleştirin (0-100).
23
+ */
24
+ max?: number;
25
+ height?: number;
26
+ width?: number;
27
+ formatValue?: ValueFormat;
28
+ className?: string;
29
+ testId?: string;
30
+ };
31
+ /**
32
+ * Radar (örümcek) grafiği — birkaç serinin aynı eksen takımında karşılaştırılması. Izgara
33
+ * ÇOKGEN (çember değil): değer eksen üzerinde okunur, eksenler arası eğri bir değer vaat etmez.
34
+ *
35
+ * Etkileşim EKSEN başınadır: işaretçi en yakın ekseni seçer ve ipucu o eksendeki bütün serileri
36
+ * okur. Klavye: `←`/`→` önceki/sonraki eksen · `Home`/`End` · `Escape`.
37
+ */
38
+ declare const RadarChart: ({ label, description, axes, series, max, height, width: fixedWidth, formatValue, className, testId, }: Props) => import("react").JSX.Element;
39
+ declare const _default: typeof RadarChart;
40
+ export default _default;
@@ -0,0 +1,41 @@
1
+ import { type ValueFormat } from '../core/format';
2
+ import { type ChartTone } from '../core/palette';
3
+ export type ScatterPoint = {
4
+ x: number;
5
+ y: number;
6
+ /** Balon grafiği: noktanın büyüklüğü (alanla orantılı). */
7
+ size?: number;
8
+ /** Noktanın adı (ipucu ve tablo). */
9
+ label?: string;
10
+ };
11
+ export type ScatterSeries = {
12
+ id: string;
13
+ label: string;
14
+ tone?: ChartTone;
15
+ data: readonly ScatterPoint[];
16
+ };
17
+ type Props = {
18
+ label: string;
19
+ description?: string;
20
+ series: readonly ScatterSeries[];
21
+ /** Eksen ve tablo başlıkları. */
22
+ xLabel: string;
23
+ yLabel: string;
24
+ /** Balon grafiğinde büyüklüğün adı ("Nüfus"); verilmezse ipucunda büyüklük satırı yok. */
25
+ sizeLabel?: string;
26
+ height?: number;
27
+ width?: number;
28
+ formatX?: ValueFormat;
29
+ formatY?: ValueFormat;
30
+ className?: string;
31
+ testId?: string;
32
+ };
33
+ /**
34
+ * Saçılım grafiği — iki sayısal değişkenin ilişkisi; `size` ile balon grafiği.
35
+ * İsabet: mekânsal kova (her harekette tüm noktalar taranmaz). Klavye noktaları x sırasıyla gezer.
36
+ *
37
+ * Klavye: `←`/`→` önceki/sonraki nokta · `Home`/`End` · `Escape`.
38
+ */
39
+ declare const ScatterPlot: ({ label, description, series, xLabel, yLabel, sizeLabel, height, width: fixedWidth, formatX, formatY, className, testId, }: Props) => import("react").JSX.Element;
40
+ declare const _default: typeof ScatterPlot;
41
+ export default _default;
@@ -0,0 +1,43 @@
1
+ import { type CartesianSeries, type Orientation } from './cartesian';
2
+ import { type ValueFormat } from './format';
3
+ import type { Curve } from './path';
4
+ /** Veri satırı — x alanı ve seri alanları; eksik değer `null`. */
5
+ export type ChartRow = Record<string, string | number | null | undefined>;
6
+ export type CartesianChartProps = {
7
+ /** Grafiğin okunan adı. */
8
+ label: string;
9
+ /** Okunan ek açıklama — eğilimi bir cümleyle söyler. */
10
+ description?: string;
11
+ data: readonly ChartRow[];
12
+ /** Satırdaki x alanının adı. */
13
+ xKey: string;
14
+ /** Veri tablosunun ilk sütun başlığı; verilmezse `xKey`. */
15
+ xLabel?: string;
16
+ series: readonly (CartesianSeries & {
17
+ format?: ValueFormat;
18
+ })[];
19
+ /** Yükseklik (px). Genişlik kapsayıcıdan ölçülür. */
20
+ height?: number;
21
+ /** Sabit genişlik (px) — ölçüm yapılmaz. */
22
+ width?: number;
23
+ isStacked?: boolean;
24
+ orientation?: Orientation;
25
+ curve?: Curve;
26
+ /** Çizgi üzerinde her veri noktası. Çok noktalı seride kapalı tutun. */
27
+ hasPoints?: boolean;
28
+ /** x değerinin yazısı (eksen, ipucu, tablo). */
29
+ formatX?: (value: string | number) => string;
30
+ /** Değerin yazısı (ipucu, tablo); seri kendi `format`ını verebilir. Eksen kısa gösterimde. */
31
+ formatValue?: ValueFormat;
32
+ /** Sol değer ekseninin sabit uçları. */
33
+ domain?: readonly [number | undefined, number | undefined];
34
+ className?: string;
35
+ testId?: string;
36
+ };
37
+ /**
38
+ * Kartezyen grafik — Çizgi, Alan, Çubuk ve Bileşik grafiğin ortak gövdesi. Dışa `LineChart`,
39
+ * `AreaChart`, `BarChart`, `ComposedChart` olarak verilir.
40
+ */
41
+ declare const CartesianChart: ({ label, description, data, xKey, xLabel, series, height, width: fixedWidth, isStacked, orientation, curve, hasPoints, formatX, formatValue, domain, className, testId, }: CartesianChartProps) => import("react").JSX.Element;
42
+ declare const _default: typeof CartesianChart;
43
+ export default _default;
@@ -0,0 +1,55 @@
1
+ import { type ReactNode, type RefObject } from 'react';
2
+ import type { ChartTable, LegendEntry, TooltipContent } from './types';
3
+ export type ChartFrameProps = {
4
+ /** Grafiğin okunan adı. */
5
+ label: string;
6
+ /** Okunan ek açıklama — eğilimi bir cümleyle söyler ("Ekimde %12 artış"). */
7
+ description?: string;
8
+ containerRef: RefObject<HTMLDivElement | null>;
9
+ width: number;
10
+ height: number;
11
+ /** Ağır çizim — BELLEĞE ALINMIŞ öğe; üzerine gelindiğinde yeniden çizilmez. */
12
+ plot: ReactNode;
13
+ /** Etkin öğenin vurgusu (kılavuz çizgi, halka, nokta) — çizimin ÜSTÜNDE. */
14
+ overlay: (active: number) => ReactNode;
15
+ /** Çizimin ALTINDAKİ vurgu (çubuk bandının zemini): üstte olsaydı çubuğun rengini değiştirirdi. */
16
+ underlay?: (active: number) => ReactNode;
17
+ /** Klavye ve işaretçiyle gezilen öğe sayısı. */
18
+ itemCount: number;
19
+ /** Izgarada gezinme (ısı haritası): satır uzunluğu. Verilirse ↑/↓ satır atlar. */
20
+ columns?: number;
21
+ /** İşaretçi → öğe; isabet yoksa `null`. Koordinatlar çizim kutusuna göre. */
22
+ pick: (x: number, y: number) => number | null;
23
+ tooltip: (index: number) => TooltipContent;
24
+ /** İpucunun bağlandığı nokta. */
25
+ anchor: (index: number) => {
26
+ x: number;
27
+ y: number;
28
+ };
29
+ /**
30
+ * İpucunun noktanın hangi yanında açılacağı. `inward` (kartezyen): merkeze bakan yan — kenardaki
31
+ * nokta ipucunu kutunun dışına itmez. `outward` (pasta, radar): merkezden uzak yan — içeride
32
+ * çizimin kendisini (halkanın ortasındaki toplamı) örtüyordu. `inward` sığmayınca öteki yana
33
+ * çevrilir, `outward` kutunun kenarına kırpılır.
34
+ */
35
+ tooltipSide?: 'inward' | 'outward';
36
+ /** Klavyeyle gelinen öğenin okunan özeti. */
37
+ announce: (index: number) => string;
38
+ table: ChartTable;
39
+ legend?: {
40
+ entries: LegendEntry[];
41
+ hidden: ReadonlySet<string>;
42
+ onToggle: (id: string) => void;
43
+ };
44
+ className?: string;
45
+ testId?: string;
46
+ };
47
+ /**
48
+ * Grafik çerçevesi — ölçüm kutusu, SVG, ipucu, lejant ve gizli veri tablosu.
49
+ *
50
+ * Klavye (grafik tek bir sekme durağı): `→`/`↓` sonraki öğe · `←`/`↑` önceki öğe (ızgarada `↑`/`↓`
51
+ * satır) · `Home`/`End` ilk/son · `Escape` vurguyu kaldırır. Gelinen öğe duyurulur.
52
+ * İşaretçi: tek bir dinleyici, kare başına bir isabet hesabı (`requestAnimationFrame`).
53
+ */
54
+ declare const ChartFrame: ({ label, description, containerRef, width, height, plot, overlay, underlay, itemCount, columns, pick, tooltip, anchor, tooltipSide, announce, table, legend, className, testId, }: ChartFrameProps) => import("react").JSX.Element;
55
+ export default ChartFrame;
@@ -0,0 +1,34 @@
1
+ import type { PlotArea } from './types';
2
+ export type Tick = {
3
+ /** Eksen boyunca konum (px). */
4
+ position: number;
5
+ label: string;
6
+ };
7
+ /** Bir karakterin yaklaşık genişliği (px) — 11 px eksen yazısında ölçülmüş ortalama. */
8
+ export declare const CHAR_WIDTH = 6.4;
9
+ /** Etiketin kaplayacağı yaklaşık genişlik. Ölçüm (DOM) yerine tahmin: sunucuda da çalışır. */
10
+ export declare const labelWidth: (label: string) => number;
11
+ /**
12
+ * Üst üste binecek etiketleri SEYRELTİR: her `k`. etiket kalır. Bölme çizgisi ve veri yerinde;
13
+ * yalnızca yazı atlanır.
14
+ */
15
+ export declare const thinTicks: (ticks: readonly Tick[], minGap?: number) => Tick[];
16
+ /** Metni yaklaşık genişliğe sığdırır (yatay çubuk grafiğinin kategori etiketleri). */
17
+ export declare const fitLabel: (label: string, width: number) => string;
18
+ type ValueAxisProps = {
19
+ area: PlotArea;
20
+ ticks: readonly Tick[];
21
+ side: 'left' | 'right' | 'bottom';
22
+ /** Izgara çizgileri — yalnızca bir eksen çizer (sol ya da alt), iki ızgara üst üste binmesin. */
23
+ hasGrid?: boolean;
24
+ };
25
+ /** Değer ekseni: bölme yazıları + ızgara. Eksen ÇİZGİSİ yok — ızgara yeter, mürekkep tasarrufu. */
26
+ export declare const ValueAxis: ({ area, ticks, side, hasGrid }: ValueAxisProps) => import("react").JSX.Element;
27
+ type CategoryAxisProps = {
28
+ area: PlotArea;
29
+ ticks: readonly Tick[];
30
+ side: 'bottom' | 'left';
31
+ };
32
+ /** Kategori ekseni: taban çizgisi + yazılar (seyreltilmiş). */
33
+ export declare const CategoryAxis: ({ area, ticks, side }: CategoryAxisProps) => import("react").JSX.Element;
34
+ export {};
@@ -0,0 +1,79 @@
1
+ /** KARTEZYEN GEOMETRİ — Çizgi, Alan, Çubuk ve Bileşik grafiğin ortak, saf (DOM'suz) motoru. */
2
+ import { type Tick } from './axes';
3
+ import type { ValueFormat } from './format';
4
+ import { type ChartTone } from './palette';
5
+ import { type Curve, type MaybePoint } from './path';
6
+ import type { PlotArea } from './types';
7
+ export type CartesianSeriesType = 'line' | 'area' | 'bar';
8
+ export type CartesianSeries = {
9
+ /** Satırdaki alanın adı. */
10
+ key: string;
11
+ label: string;
12
+ type: CartesianSeriesType;
13
+ tone?: ChartTone;
14
+ /** İkinci değer ekseni (sağ) — farklı birimdeki seri. */
15
+ axis?: 'left' | 'right';
16
+ };
17
+ export type Orientation = 'vertical' | 'horizontal';
18
+ export type CartesianInput = {
19
+ rows: readonly Record<string, unknown>[];
20
+ xKey: string;
21
+ /** Yalnızca GÖRÜNÜR seriler, tonları çözülmüş. */
22
+ series: readonly (CartesianSeries & {
23
+ tone: ChartTone;
24
+ })[];
25
+ width: number;
26
+ height: number;
27
+ isStacked: boolean;
28
+ orientation: Orientation;
29
+ curve: Curve;
30
+ formatX: (value: unknown) => string;
31
+ formatLeft: ValueFormat;
32
+ formatRight: ValueFormat;
33
+ /** Değer ekseninin sabit uçları; verilmeyen uç veriden. */
34
+ domain?: readonly [number | undefined, number | undefined];
35
+ };
36
+ export type BarShape = {
37
+ key: string;
38
+ index: number;
39
+ tone: ChartTone;
40
+ x: number;
41
+ y: number;
42
+ width: number;
43
+ height: number;
44
+ };
45
+ export type CartesianGeometry = {
46
+ area: PlotArea;
47
+ /** Kategori ekseni boyunca her satırın merkezi (px). */
48
+ centers: number[];
49
+ /** Kategori bandının genişliği; sürekli eksende 0. */
50
+ bandwidth: number;
51
+ isContinuous: boolean;
52
+ categoryTicks: Tick[];
53
+ leftTicks: Tick[];
54
+ rightTicks: Tick[];
55
+ hasRightAxis: boolean;
56
+ lines: {
57
+ key: string;
58
+ tone: ChartTone;
59
+ d: string;
60
+ }[];
61
+ areas: {
62
+ key: string;
63
+ tone: ChartTone;
64
+ d: string;
65
+ }[];
66
+ bars: BarShape[];
67
+ /** Seri → dizin → çizgi/alan noktası (vurgu halkası için). */
68
+ points: Record<string, MaybePoint[]>;
69
+ /** Dizin → ipucunun bağlanacağı en üst değer noktası. */
70
+ anchors: {
71
+ x: number;
72
+ y: number;
73
+ }[];
74
+ /** Sol değer ekseninde SIFIRIN konumu — yalnızca tanım aralığı eksiye indiğinde (yoksa `null`). */
75
+ zero: number | null;
76
+ };
77
+ /** Sayıya çevirir; sonlu olmayan değer `null` (eksik veri). */
78
+ export declare const toNumber: (value: unknown) => number | null;
79
+ export declare const cartesianGeometry: (input: CartesianInput) => CartesianGeometry;
@@ -0,0 +1,9 @@
1
+ /** SAYI BİÇİMİ — eksen ve ipucu metni. Dil `labels.locale`ten, verilmezse tarayıcının dili. */
2
+ export type ValueFormat = (value: number) => string;
3
+ /**
4
+ * Eksen bölmesi: KISA gösterim ("12 B", "1,2 Mn"). Uzun bir sayı dar bir eksende üst üste biniyor;
5
+ * tam değer ipucunda ve veri tablosunda okunur.
6
+ */
7
+ export declare const compactNumber: (locale?: string) => ValueFormat;
8
+ /** İpucu ve tablo: tam değer, en çok iki ondalık. */
9
+ export declare const fullNumber: (locale?: string) => ValueFormat;
@@ -0,0 +1,9 @@
1
+ import type { PlotArea } from './types';
2
+ /** Çizim alanı — sol kenar en uzun sol bölme yazısı kadar, alt kenar x yazıları için. */
3
+ export declare const plotArea: (width: number, height: number, leftLabels: readonly string[], { top, right, bottom }?: {
4
+ top?: number | undefined;
5
+ right?: number | undefined;
6
+ bottom?: number | undefined;
7
+ }) => PlotArea;
8
+ /** Eksen başına bölme sayısı: yatayda ~90 px, dikeyde ~48 px'te bir. */
9
+ export declare const tickCount: (length: number, horizontal: boolean) => number;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * SERİ RENKLERİ — hanui kategorik paleti (`cat-1…5`, `series-2`). Her ton iki temanın üç
3
+ * yüzeyinde ≥3:1 (`check:contrast`) ve iki ton arasında ΔE ≥ 8 (palet üreteci).
4
+ * ⚠ Marka yeşilleri (çam, mint) seri rengi OLMAZ: yeşil eylemin rengi. `cat-3` orta aydınlıkta bir
5
+ * kategori yeşili.
6
+ */
7
+ export type ChartTone = 'cat-1' | 'cat-2' | 'cat-3' | 'cat-4' | 'cat-5' | 'series-1' | 'series-2' | 'muted';
8
+ /** Sıra: ilk iki seri en uzak iki ton (mavi, kil) — iki serili grafik en sık durum. */
9
+ export declare const TONE_ORDER: readonly ChartTone[];
10
+ /** Verilmeyen tonu sıradan alır; altıdan fazla seride döner (lejant adı ayırt eder). */
11
+ export declare const toneAt: (index: number, tone?: ChartTone) => ChartTone;
12
+ /** CSS rengi — tema değişince yeniden çizim gerekmez, değişken çözülür. */
13
+ export declare const toneColor: (tone: ChartTone) => string;
@@ -0,0 +1,24 @@
1
+ /** SVG YOLLARI — dize üretimi; DOM'a dokunmaz, saf fonksiyon (test edilebilir, sunucuda çalışır). */
2
+ export type Point = {
3
+ x: number;
4
+ y: number;
5
+ };
6
+ /** `null` boşluk demektir: çizgi orada KESİLİR, sıfıra inmez (eksik veri ≠ sıfır). */
7
+ export type MaybePoint = Point | null;
8
+ export type Curve = 'linear' | 'monotone';
9
+ /** Çizgi yolu; `null` noktalarda kesilir. */
10
+ export declare const linePath: (points: readonly MaybePoint[], curve?: Curve) => string;
11
+ /**
12
+ * Alan yolu: üst çizgi + taban çizgisi (yığılmış alanda bir alttaki serinin üstü). Her kesintisiz
13
+ * parça kendi kapalı şekli.
14
+ */
15
+ export declare const areaPath: (top: readonly MaybePoint[], base: readonly MaybePoint[], curve?: Curve) => string;
16
+ /** Kutupsal → kartezyen; açı radyan, 0 = saat 12 yönü, saat yönünde artar. */
17
+ export declare const polar: (cx: number, cy: number, radius: number, angle: number) => Point;
18
+ /**
19
+ * Halka / pasta dilimi. `inner` 0 ise pasta. ⚠ Tam tur (2π) TEK bir yay olarak çizilemez (başlangıç
20
+ * ve bitiş aynı nokta, yay kaybolur); iki yarım yaya bölünür.
21
+ */
22
+ export declare const arcPath: (cx: number, cy: number, outer: number, inner: number, start: number, end: number) => string;
23
+ /** Kapalı çokgen (radar). */
24
+ export declare const polygonPath: (points: readonly Point[]) => string;
@@ -0,0 +1,40 @@
1
+ /** ÖLÇEKLER — değer → piksel. Grafik kütüphanesi bağımlılığı yok; davranış testlerde sabit. */
2
+ export type LinearScale = {
3
+ (value: number): number;
4
+ domain: readonly [number, number];
5
+ range: readonly [number, number];
6
+ invert: (pixel: number) => number;
7
+ };
8
+ export type BandScale = {
9
+ /** Kategorinin bandının BAŞLANGICI (px). Bilinmeyen kategori `NaN`. */
10
+ (key: string): number;
11
+ domain: readonly string[];
12
+ range: readonly [number, number];
13
+ /** Bandın genişliği — çubuğun kalınlığı. */
14
+ bandwidth: number;
15
+ /** İki bant başlangıcı arası. */
16
+ step: number;
17
+ /** Piksele en yakın kategorinin dizini (`-1`: boş ölçek). */
18
+ indexAt: (pixel: number) => number;
19
+ };
20
+ /** Doğrusal ölçek. Sıfır genişlikli tanım aralığı aralığın ortasına eşlenir (bölme hatası yok). */
21
+ export declare const scaleLinear: (domain: readonly [number, number], range: readonly [number, number]) => LinearScale;
22
+ /**
23
+ * Kategorik (band) ölçek. `paddingInner` bantlar arası boşluğun adıma oranı, `paddingOuter` iki
24
+ * uçtaki boşluğun adıma oranı.
25
+ */
26
+ export declare const scaleBand: (domain: readonly string[], range: readonly [number, number], { paddingInner, paddingOuter }?: {
27
+ paddingInner?: number | undefined;
28
+ paddingOuter?: number | undefined;
29
+ }) => BandScale;
30
+ /** 1-2-5 × 10ⁿ adımı — "güzel" eksen bölmesi. */
31
+ export declare const tickStep: (min: number, max: number, count: number) => number;
32
+ /**
33
+ * Tanım aralığını adımın katlarına genişletir — eksen "güzel" bir sayıda başlar ve biter.
34
+ * ⚠ Tek değerli (ya da boş) aralık genişletilir: 0 → [0, 1], 5 → [0, 8]; aksi hâlde ölçek çöker.
35
+ */
36
+ export declare const niceDomain: (min: number, max: number, count?: number) => [number, number];
37
+ /** Aralığı kapsayan bölme değerleri; uçlar dahil. */
38
+ export declare const ticks: (min: number, max: number, count?: number) => number[];
39
+ /** Sıralı dizide değere en yakın öğenin dizini — işaretçi isabeti için ikili arama. */
40
+ export declare const nearestIndex: (sorted: readonly number[], value: number) => number;
@@ -0,0 +1,11 @@
1
+ import type { CartesianSeries } from './cartesian';
2
+ import type { ValueFormat } from './format';
3
+ /** Türü sarmalayıcının sabitlediği seri: Çizgi, Alan, Çubuk. */
4
+ export type ChartSeries = Omit<CartesianSeries, 'type'> & {
5
+ /** Bu serinin değer yazısı (ipucu, tablo) — birimi farklı seri. */
6
+ format?: ValueFormat;
7
+ };
8
+ /** Bileşik grafiğin serisi: türü seri başına. */
9
+ export type ComposedSeries = CartesianSeries & {
10
+ format?: ValueFormat;
11
+ };
@@ -0,0 +1,12 @@
1
+ /**
2
+ * MEKÂNSAL KOVA — işaretçiye en yakın noktayı her harekette TÜM noktaları taramadan bulur.
3
+ * Noktalar sabit boyutlu piksel hücrelerine dağıtılır; arama yalnızca komşu hücrelerde.
4
+ */
5
+ export type SpatialIndex = {
6
+ /** `(x, y)`ye `radius` içindeki en yakın noktanın dizini; yoksa `null`. */
7
+ nearest: (x: number, y: number, radius: number) => number | null;
8
+ };
9
+ export declare const spatialIndex: (points: readonly {
10
+ x: number;
11
+ y: number;
12
+ }[], cell?: number) => SpatialIndex;