@ahmetilhn/hanui 5.3.0 → 5.3.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"charts.js","sources":["../src/helpers/component.helper.ts","../src/charts/core/axes.tsx","../src/charts/core/path.ts","../src/charts/core/scale.ts","../src/charts/core/stats.ts","../src/charts/core/cartesian.ts","../src/helpers/class-name.helper.ts","../src/charts/core/palette.ts","../src/charts/core/ChartFrame.tsx","../src/charts/core/format.ts","../src/charts/core/useChartWidth.ts","../src/charts/core/CartesianChart.tsx","../src/charts/LineChart/index.tsx","../src/charts/AreaChart/index.tsx","../src/charts/BarChart/index.tsx","../src/charts/ComposedChart/index.tsx","../src/charts/PieChart/index.tsx","../src/charts/core/margins.ts","../src/charts/core/spatial.ts","../src/charts/ScatterPlot/index.tsx","../src/charts/Heatmap/index.tsx","../src/charts/BoxPlot/index.tsx","../src/charts/Histogram/index.tsx","../src/charts/RadarChart/index.tsx"],"sourcesContent":["/**\n * DevTools adı — modül düzeyinde YAN ETKİ bırakmadan.\n *\n * ⚠ `X.displayName = 'X'` KULLANILMAZ: modül düzeyindeki özellik ataması\n * bundler için yan etkidir ve hedefinin tüm bağımlılık zincirini ayakta tutar.\n * Ölçüldü: yalnızca `Badge` import eden uygulama 20,7 kB indiriyordu (paketin\n * tamamı 21,8 kB). Atama çağrıya dönüşünce `#__PURE__` işaretlenebiliyor →\n * `Badge` 2,71 kB. Nöbetçi `.size-limit.json`.\n *\n * @example\n * export default memo(named(Button, 'Button')) as typeof Button;\n */\nexport const named = <TComponent extends object>(\n component: TComponent,\n displayName: string,\n): TComponent => Object.assign(component, { displayName });\n","import type { PlotArea } from './types';\n\nimport styles from './axes.module.scss';\n\nexport type Tick = {\n /** Eksen boyunca konum (px). */\n position: number;\n label: string;\n};\n\n/** Bir karakterin yaklaşık genişliği (px) — 11 px eksen yazısında ölçülmüş ortalama. */\nexport const CHAR_WIDTH = 6.4;\n\n/** Etiketin kaplayacağı yaklaşık genişlik. Ölçüm (DOM) yerine tahmin: sunucuda da çalışır. */\nexport const labelWidth = (label: string): number => label.length * CHAR_WIDTH;\n\n/**\n * Üst üste binecek etiketleri SEYRELTİR: her `k`. etiket kalır. Bölme çizgisi ve veri yerinde;\n * yalnızca yazı atlanır.\n */\nexport const thinTicks = (ticks: readonly Tick[], minGap = 8): Tick[] => {\n if (ticks.length < 2) return [...ticks];\n\n const widest = Math.max(...ticks.map(tick => labelWidth(tick.label)));\n const spacing = Math.abs(ticks[1].position - ticks[0].position);\n const every = spacing <= 0 ? 1 : Math.max(1, Math.ceil((widest + minGap) / spacing));\n\n return ticks.filter((_, index) => index % every === 0);\n};\n\n/** Metni yaklaşık genişliğe sığdırır (yatay çubuk grafiğinin kategori etiketleri). */\nexport const fitLabel = (label: string, width: number): string => {\n const max = Math.max(1, Math.floor(width / CHAR_WIDTH));\n return label.length <= max ? label : `${label.slice(0, Math.max(1, max - 1))}…`;\n};\n\ntype ValueAxisProps = {\n area: PlotArea;\n ticks: readonly Tick[];\n side: 'left' | 'right' | 'bottom';\n /** Izgara çizgileri — yalnızca bir eksen çizer (sol ya da alt), iki ızgara üst üste binmesin. */\n hasGrid?: boolean;\n};\n\n/** Değer ekseni: bölme yazıları + ızgara. Eksen ÇİZGİSİ yok — ızgara yeter, mürekkep tasarrufu. */\nexport const ValueAxis = ({ area, ticks, side, hasGrid = false }: ValueAxisProps) => (\n <g className={styles.axis} aria-hidden>\n {ticks.map(tick =>\n side === 'bottom' ? (\n <g key={`${tick.position}-${tick.label}`}>\n {hasGrid && (\n <line\n className={styles.axis__grid}\n x1={tick.position}\n x2={tick.position}\n y1={area.top}\n y2={area.bottom}\n />\n )}\n <text\n className={styles.axis__label}\n x={tick.position}\n y={area.bottom + 16}\n textAnchor=\"middle\"\n >\n {tick.label}\n </text>\n </g>\n ) : (\n <g key={`${tick.position}-${tick.label}`}>\n {hasGrid && (\n <line\n className={styles.axis__grid}\n x1={area.left}\n x2={area.right}\n y1={tick.position}\n y2={tick.position}\n />\n )}\n <text\n className={styles.axis__label}\n x={side === 'left' ? area.left - 8 : area.right + 8}\n y={tick.position}\n dy=\"0.32em\"\n textAnchor={side === 'left' ? 'end' : 'start'}\n >\n {tick.label}\n </text>\n </g>\n ),\n )}\n </g>\n);\n\ntype CategoryAxisProps = {\n area: PlotArea;\n ticks: readonly Tick[];\n side: 'bottom' | 'left';\n};\n\n/** Kategori ekseni: taban çizgisi + yazılar (seyreltilmiş). */\nexport const CategoryAxis = ({ area, ticks, side }: CategoryAxisProps) => (\n <g className={styles.axis} aria-hidden>\n {side === 'bottom' ? (\n <>\n <line\n className={styles.axis__baseline}\n x1={area.left}\n x2={area.right}\n y1={area.bottom}\n y2={area.bottom}\n />\n {thinTicks(ticks).map(tick => (\n <text\n key={`${tick.position}-${tick.label}`}\n className={styles.axis__label}\n x={tick.position}\n y={area.bottom + 16}\n textAnchor=\"middle\"\n >\n {tick.label}\n </text>\n ))}\n </>\n ) : (\n <>\n <line\n className={styles.axis__baseline}\n x1={area.left}\n x2={area.left}\n y1={area.top}\n y2={area.bottom}\n />\n {ticks.map(tick => (\n <text\n key={`${tick.position}-${tick.label}`}\n className={styles.axis__label}\n x={area.left - 8}\n y={tick.position}\n dy=\"0.32em\"\n textAnchor=\"end\"\n >\n {fitLabel(tick.label, area.left - 12)}\n </text>\n ))}\n </>\n )}\n </g>\n);\n","/** SVG YOLLARI — dize üretimi; DOM'a dokunmaz, saf fonksiyon (test edilebilir, sunucuda çalışır). */\n\nexport type Point = { x: number; y: number };\n\nconst round = (value: number): number => Math.round(value * 100) / 100;\n\n/** `null` boşluk demektir: çizgi orada KESİLİR, sıfıra inmez (eksik veri ≠ sıfır). */\nexport type MaybePoint = Point | null;\n\nconst segments = (points: readonly MaybePoint[]): Point[][] => {\n const result: Point[][] = [];\n let current: Point[] = [];\n\n for (const point of points) {\n if (point === null || !Number.isFinite(point.x) || !Number.isFinite(point.y)) {\n if (current.length > 0) result.push(current);\n current = [];\n } else current.push(point);\n }\n\n if (current.length > 0) result.push(current);\n return result;\n};\n\n/** Doğrusal parça. */\nconst linear = (points: readonly Point[]): string =>\n points\n .map((point, index) => `${index === 0 ? 'M' : 'L'}${round(point.x)},${round(point.y)}`)\n .join('');\n\n/**\n * Monoton kübik eğri (Fritsch–Carlson). Veri noktalarının ARASINDA aşma yapmaz: tepe ya da dip\n * olmayan bir yerde eğri, sıradan bir Catmull-Rom'un yaptığı gibi verinin üstüne çıkmaz — grafik\n * olmayan bir değeri göstermez.\n */\nconst monotone = (points: readonly Point[]): string => {\n const count = points.length;\n if (count < 3) return linear(points);\n\n const slopes: number[] = [];\n const deltas: number[] = [];\n\n for (let index = 0; index < count - 1; index += 1) {\n const dx = points[index + 1].x - points[index].x;\n deltas.push(dx === 0 ? 0 : (points[index + 1].y - points[index].y) / dx);\n }\n\n slopes.push(deltas[0]);\n for (let index = 1; index < count - 1; index += 1)\n slopes.push(\n deltas[index - 1] * deltas[index] <= 0 ? 0 : (deltas[index - 1] + deltas[index]) / 2,\n );\n slopes.push(deltas[count - 2]);\n\n for (let index = 0; index < count - 1; index += 1) {\n if (deltas[index] === 0) {\n slopes[index] = 0;\n slopes[index + 1] = 0;\n continue;\n }\n\n const alpha = slopes[index] / deltas[index];\n const beta = slopes[index + 1] / deltas[index];\n const magnitude = alpha * alpha + beta * beta;\n\n if (magnitude > 9) {\n const tau = 3 / Math.sqrt(magnitude);\n slopes[index] = tau * alpha * deltas[index];\n slopes[index + 1] = tau * beta * deltas[index];\n }\n }\n\n let path = `M${round(points[0].x)},${round(points[0].y)}`;\n\n for (let index = 0; index < count - 1; index += 1) {\n const start = points[index];\n const end = points[index + 1];\n const third = (end.x - start.x) / 3;\n\n path +=\n `C${round(start.x + third)},${round(start.y + slopes[index] * third)} ` +\n `${round(end.x - third)},${round(end.y - slopes[index + 1] * third)} ` +\n `${round(end.x)},${round(end.y)}`;\n }\n\n return path;\n};\n\nexport type Curve = 'linear' | 'monotone';\n\n/** Çizgi yolu; `null` noktalarda kesilir. */\nexport const linePath = (points: readonly MaybePoint[], curve: Curve = 'linear'): string =>\n segments(points)\n .map(part => (curve === 'monotone' ? monotone(part) : linear(part)))\n .join('');\n\n/**\n * Alan yolu: üst çizgi + taban çizgisi (yığılmış alanda bir alttaki serinin üstü). Her kesintisiz\n * parça kendi kapalı şekli.\n */\nexport const areaPath = (\n top: readonly MaybePoint[],\n base: readonly MaybePoint[],\n curve: Curve = 'linear',\n): string => {\n const paths: string[] = [];\n let upper: Point[] = [];\n let lower: Point[] = [];\n\n const flush = () => {\n if (upper.length > 0) {\n const draw = curve === 'monotone' ? monotone : linear;\n const back = draw([...lower].reverse()).replace(/^M/, 'L');\n paths.push(`${draw(upper)}${back}Z`);\n }\n upper = [];\n lower = [];\n };\n\n top.forEach((point, index) => {\n const floor = base[index];\n if (point === null || floor === null || floor === undefined) flush();\n else {\n upper.push(point);\n lower.push(floor);\n }\n });\n flush();\n\n return paths.join('');\n};\n\n/** Kutupsal → kartezyen; açı radyan, 0 = saat 12 yönü, saat yönünde artar. */\nexport const polar = (cx: number, cy: number, radius: number, angle: number): Point => ({\n x: cx + radius * Math.sin(angle),\n y: cy - radius * Math.cos(angle),\n});\n\n/**\n * Halka / pasta dilimi. `inner` 0 ise pasta. ⚠ Tam tur (2π) TEK bir yay olarak çizilemez (başlangıç\n * ve bitiş aynı nokta, yay kaybolur); iki yarım yaya bölünür.\n */\nexport const arcPath = (\n cx: number,\n cy: number,\n outer: number,\n inner: number,\n start: number,\n end: number,\n): string => {\n const sweep = end - start;\n if (sweep <= 0 || outer <= 0) return '';\n\n if (sweep >= Math.PI * 2 - 1e-6) {\n /*\n * Tam tur: iki yarım çember; iç çember TERS yönde çizilir ve sıfır-olmayan kuralı deliği kendisi\n * açar. İki ayrı dilime bölmek, ayırıcı kenar çizgisinde görünür bir dikiş bırakıyordu.\n */\n const ring = (radius: number, sweepFlag: 0 | 1) =>\n `M${round(cx)},${round(cy - radius)}` +\n `A${radius},${radius} 0 1 ${sweepFlag} ${round(cx)},${round(cy + radius)}` +\n `A${radius},${radius} 0 1 ${sweepFlag} ${round(cx)},${round(cy - radius)}Z`;\n\n return ring(outer, 1) + (inner > 0 ? ring(inner, 0) : '');\n }\n\n const large = sweep > Math.PI ? 1 : 0;\n const o0 = polar(cx, cy, outer, start);\n const o1 = polar(cx, cy, outer, end);\n\n if (inner <= 0)\n return `M${round(cx)},${round(cy)}L${round(o0.x)},${round(o0.y)}A${outer},${outer} 0 ${large} 1 ${round(o1.x)},${round(o1.y)}Z`;\n\n const i1 = polar(cx, cy, inner, end);\n const i0 = polar(cx, cy, inner, start);\n\n return (\n `M${round(o0.x)},${round(o0.y)}A${outer},${outer} 0 ${large} 1 ${round(o1.x)},${round(o1.y)}` +\n `L${round(i1.x)},${round(i1.y)}A${inner},${inner} 0 ${large} 0 ${round(i0.x)},${round(i0.y)}Z`\n );\n};\n\n/** Kapalı çokgen (radar). */\nexport const polygonPath = (points: readonly Point[]): string =>\n points.length === 0 ? '' : `${linear(points)}Z`;\n","/** ÖLÇEKLER — değer → piksel. Grafik kütüphanesi bağımlılığı yok; davranış testlerde sabit. */\n\nexport type LinearScale = {\n (value: number): number;\n domain: readonly [number, number];\n range: readonly [number, number];\n invert: (pixel: number) => number;\n};\n\nexport type BandScale = {\n /** Kategorinin bandının BAŞLANGICI (px). Bilinmeyen kategori `NaN`. */\n (key: string): number;\n domain: readonly string[];\n range: readonly [number, number];\n /** Bandın genişliği — çubuğun kalınlığı. */\n bandwidth: number;\n /** İki bant başlangıcı arası. */\n step: number;\n /** Piksele en yakın kategorinin dizini (`-1`: boş ölçek). */\n indexAt: (pixel: number) => number;\n};\n\n/** Doğrusal ölçek. Sıfır genişlikli tanım aralığı aralığın ortasına eşlenir (bölme hatası yok). */\nexport const scaleLinear = (\n domain: readonly [number, number],\n range: readonly [number, number],\n): LinearScale => {\n const [d0, d1] = domain;\n const [r0, r1] = range;\n const span = d1 - d0;\n\n const scale = ((value: number) =>\n span === 0 ? (r0 + r1) / 2 : r0 + ((value - d0) / span) * (r1 - r0)) as LinearScale;\n\n scale.domain = domain;\n scale.range = range;\n scale.invert = pixel => (r1 === r0 ? d0 : d0 + ((pixel - r0) / (r1 - r0)) * span);\n\n return scale;\n};\n\n/**\n * Kategorik (band) ölçek. `paddingInner` bantlar arası boşluğun adıma oranı, `paddingOuter` iki\n * uçtaki boşluğun adıma oranı.\n */\nexport const scaleBand = (\n domain: readonly string[],\n range: readonly [number, number],\n { paddingInner = 0.2, paddingOuter = 0.1 } = {},\n): BandScale => {\n const [r0, r1] = range;\n const count = domain.length;\n const step = count === 0 ? 0 : (r1 - r0) / Math.max(1, count - paddingInner + paddingOuter * 2);\n const bandwidth = step * (1 - paddingInner);\n const start = r0 + step * paddingOuter;\n const index = new Map(domain.map((key, position) => [key, position]));\n\n const scale = ((key: string) => {\n const position = index.get(key);\n return position === undefined ? Number.NaN : start + position * step;\n }) as BandScale;\n\n scale.domain = domain;\n scale.range = range;\n scale.bandwidth = bandwidth;\n scale.step = step;\n scale.indexAt = pixel =>\n count === 0\n ? -1\n : Math.min(\n count - 1,\n Math.max(\n 0,\n Math.floor((pixel - r0 - step * paddingOuter + (step - bandwidth) / 2) / step),\n ),\n );\n\n return scale;\n};\n\n/** 1-2-5 × 10ⁿ adımı — \"güzel\" eksen bölmesi. */\nexport const tickStep = (min: number, max: number, count: number): number => {\n const span = Math.abs(max - min);\n if (span === 0 || !Number.isFinite(span) || count <= 0) return 1;\n\n const raw = span / count;\n const power = 10 ** Math.floor(Math.log10(raw));\n const error = raw / power;\n const factor = error >= 7.5 ? 10 : error >= 3.5 ? 5 : error >= 1.5 ? 2 : 1;\n\n return factor * power;\n};\n\n/** Kayan nokta artığını siler: 0.1 + 0.2 → 0.3. */\nconst clean = (value: number, step: number): number => {\n const decimals = Math.max(0, -Math.floor(Math.log10(step)) + 1);\n return Number(value.toFixed(Math.min(decimals, 12)));\n};\n\n/**\n * Tanım aralığını adımın katlarına genişletir — eksen \"güzel\" bir sayıda başlar ve biter.\n * ⚠ Tek değerli (ya da boş) aralık genişletilir: 0 → [0, 1], 5 → [0, 8]; aksi hâlde ölçek çöker.\n */\nexport const niceDomain = (min: number, max: number, count = 5): [number, number] => {\n if (!Number.isFinite(min) || !Number.isFinite(max)) return [0, 1];\n\n let low = Math.min(min, max);\n let high = Math.max(min, max);\n\n if (low === high) {\n if (low === 0) return [0, 1];\n const pad = Math.abs(low) * 0.5;\n low = low > 0 ? 0 : low - pad;\n high = high < 0 ? 0 : high + pad;\n }\n\n const step = tickStep(low, high, count);\n return [clean(Math.floor(low / step) * step, step), clean(Math.ceil(high / step) * step, step)];\n};\n\n/** Aralığı kapsayan bölme değerleri; uçlar dahil. */\nexport const ticks = (min: number, max: number, count = 5): number[] => {\n if (!Number.isFinite(min) || !Number.isFinite(max)) return [];\n if (min === max) return [min];\n\n const step = tickStep(min, max, count);\n /* 1e-9 payı: 0.3 / 0.1 = 2.9999999999999996 → uçtaki bölme sessizce düşüyordu. */\n const first = Math.ceil(min / step - 1e-9);\n const last = Math.floor(max / step + 1e-9);\n const values: number[] = [];\n\n for (let index = first; index <= last && values.length < 1000; index += 1)\n values.push(clean(index * step, step));\n\n return values;\n};\n\n/** Sıralı dizide değere en yakın öğenin dizini — işaretçi isabeti için ikili arama. */\nexport const nearestIndex = (sorted: readonly number[], value: number): number => {\n if (sorted.length === 0) return -1;\n\n let low = 0;\n let high = sorted.length - 1;\n\n while (low < high) {\n const middle = (low + high) >> 1;\n if (sorted[middle] < value) low = middle + 1;\n else high = middle;\n }\n\n if (low > 0 && Math.abs(sorted[low - 1] - value) <= Math.abs(sorted[low] - value)) return low - 1;\n return low;\n};\n","/** İSTATİSTİK — kutu grafiği ve histogram. Sonlu olmayan değerler (`NaN`, `±Infinity`) atılır. */\n\nimport { tickStep } from './scale';\n\nexport const finite = (values: readonly (number | null | undefined)[]): number[] =>\n values.filter((value): value is number => typeof value === 'number' && Number.isFinite(value));\n\n/** `[en küçük, en büyük]`; boş girdide `[0, 0]`. Dizi YAYILMAZ: büyük veride çağrı yığını taşmaz. */\nexport const extent = (values: readonly number[]): [number, number] => {\n if (values.length === 0) return [0, 0];\n\n let min = values[0];\n let max = values[0];\n for (const value of values) {\n if (value < min) min = value;\n if (value > max) max = value;\n }\n\n return [min, max];\n};\n\n/** Sıralı dizide çeyreklik — doğrusal ara değer (R tip 7 / Excel / NumPy varsayılanı). */\nexport const quantile = (sorted: readonly number[], probability: number): number => {\n if (sorted.length === 0) return Number.NaN;\n if (sorted.length === 1) return sorted[0];\n\n const position = (sorted.length - 1) * Math.min(1, Math.max(0, probability));\n const lower = Math.floor(position);\n const fraction = position - lower;\n\n return lower + 1 < sorted.length\n ? sorted[lower] + (sorted[lower + 1] - sorted[lower]) * fraction\n : sorted[lower];\n};\n\nexport type BoxStats = {\n count: number;\n min: number;\n q1: number;\n median: number;\n q3: number;\n max: number;\n /** Bıyıkların ucu: 1,5 × IQR içindeki en uç GÖZLEM (Tukey). */\n whiskerLow: number;\n whiskerHigh: number;\n /** Bıyık dışında kalan gözlemler. */\n outliers: number[];\n};\n\n/** Beş sayı özeti + Tukey bıyıkları. Boş girdide `null`. */\nexport const boxStats = (values: readonly number[]): BoxStats | null => {\n const sorted = finite(values).sort((first, second) => first - second);\n if (sorted.length === 0) return null;\n\n const q1 = quantile(sorted, 0.25);\n const q3 = quantile(sorted, 0.75);\n const fence = (q3 - q1) * 1.5;\n const inside = sorted.filter(value => value >= q1 - fence && value <= q3 + fence);\n\n return {\n count: sorted.length,\n min: sorted[0],\n q1,\n median: quantile(sorted, 0.5),\n q3,\n max: sorted[sorted.length - 1],\n whiskerLow: inside[0] ?? q1,\n whiskerHigh: inside[inside.length - 1] ?? q3,\n outliers: sorted.filter(value => value < q1 - fence || value > q3 + fence),\n };\n};\n\nexport type Bin = {\n /** Dahil alt sınır. */\n from: number;\n /** Hariç üst sınır — SON bölme dahil. */\n to: number;\n count: number;\n};\n\n/**\n * Histogram bölmeleri. Bölme sayısı verilmezse Sturges (`⌈log₂ n⌉ + 1`); sınırlar \"güzel\" bir adıma\n * oturur, yani bölmeler 0-10-20 gibi okunur.\n * ⚠ Son bölme üst ucu DAHİL eder: en büyük değer dışarıda kalmaz.\n */\nexport const histogram = (values: readonly number[], binCount?: number): Bin[] => {\n const data = finite(values);\n if (data.length === 0) return [];\n\n const [min, max] = extent(data);\n if (min === max) return [{ from: min, to: min + 1, count: data.length }];\n\n const target = binCount ?? Math.ceil(Math.log2(data.length)) + 1;\n const step = tickStep(min, max, Math.max(1, target));\n const start = Math.floor(min / step) * step;\n /* 1e-9 payı: (max - start) / step kayan noktada 5.000000001 çıkıp boş bir altıncı bölme açıyordu. */\n const count = Math.max(1, Math.ceil((max - start) / step - 1e-9));\n\n const bins: Bin[] = Array.from({ length: count }, (_, index) => ({\n from: start + index * step,\n to: start + (index + 1) * step,\n count: 0,\n }));\n\n for (const value of data) {\n const index = Math.min(bins.length - 1, Math.floor((value - start) / step));\n bins[index].count += 1;\n }\n\n return bins;\n};\n","/** KARTEZYEN GEOMETRİ — Çizgi, Alan, Çubuk ve Bileşik grafiğin ortak, saf (DOM'suz) motoru. */\n\nimport { fitLabel, labelWidth, type Tick } from './axes';\nimport type { ValueFormat } from './format';\nimport { type ChartTone } from './palette';\nimport { areaPath, type Curve, linePath, type MaybePoint } from './path';\nimport {\n type LinearScale,\n niceDomain,\n scaleBand,\n scaleLinear,\n ticks as linearTicks,\n} from './scale';\nimport { extent } from './stats';\nimport type { PlotArea } from './types';\n\nexport type CartesianSeriesType = 'line' | 'area' | 'bar';\n\nexport type CartesianSeries = {\n /** Satırdaki alanın adı. */\n key: string;\n label: string;\n type: CartesianSeriesType;\n tone?: ChartTone;\n /** İkinci değer ekseni (sağ) — farklı birimdeki seri. */\n axis?: 'left' | 'right';\n};\n\nexport type Orientation = 'vertical' | 'horizontal';\n\nexport type CartesianInput = {\n rows: readonly Record<string, unknown>[];\n xKey: string;\n /** Yalnızca GÖRÜNÜR seriler, tonları çözülmüş. */\n series: readonly (CartesianSeries & { tone: ChartTone })[];\n width: number;\n height: number;\n isStacked: boolean;\n orientation: Orientation;\n curve: Curve;\n formatX: (value: unknown) => string;\n formatLeft: ValueFormat;\n formatRight: ValueFormat;\n /** Değer ekseninin sabit uçları; verilmeyen uç veriden. */\n domain?: readonly [number | undefined, number | undefined];\n};\n\nexport type BarShape = {\n key: string;\n index: number;\n tone: ChartTone;\n x: number;\n y: number;\n width: number;\n height: number;\n};\n\nexport type CartesianGeometry = {\n area: PlotArea;\n /** Kategori ekseni boyunca her satırın merkezi (px). */\n centers: number[];\n /** Kategori bandının genişliği; sürekli eksende 0. */\n bandwidth: number;\n isContinuous: boolean;\n categoryTicks: Tick[];\n leftTicks: Tick[];\n rightTicks: Tick[];\n hasRightAxis: boolean;\n lines: { key: string; tone: ChartTone; d: string }[];\n areas: { key: string; tone: ChartTone; d: string }[];\n bars: BarShape[];\n /** Seri → dizin → çizgi/alan noktası (vurgu halkası için). */\n points: Record<string, MaybePoint[]>;\n /** Dizin → ipucunun bağlanacağı en üst değer noktası. */\n anchors: { x: number; y: number }[];\n /** Sol değer ekseninde SIFIRIN konumu — yalnızca tanım aralığı eksiye indiğinde (yoksa `null`). */\n zero: number | null;\n};\n\n/** Sayıya çevirir; sonlu olmayan değer `null` (eksik veri). */\nexport const toNumber = (value: unknown): number | null =>\n typeof value === 'number' && Number.isFinite(value) ? value : null;\n\nconst MARGIN = { top: 12, right: 16, bottom: 28, minLeft: 32 };\n\n/** Yığın: her dizin için artı ve eksi değerler AYRI birikir (eksi çubuk sıfırın altına iner). */\nconst stack = (\n rows: readonly Record<string, unknown>[],\n keys: readonly string[],\n): Record<string, { base: number; top: number }[]> => {\n const positive = rows.map(() => 0);\n const negative = rows.map(() => 0);\n const result: Record<string, { base: number; top: number }[]> = {};\n\n for (const key of keys)\n result[key] = rows.map((row, index) => {\n const value = toNumber(row[key]) ?? 0;\n if (value >= 0) {\n const base = positive[index];\n positive[index] += value;\n return { base, top: positive[index] };\n }\n const base = negative[index];\n negative[index] += value;\n return { base, top: negative[index] };\n });\n\n return result;\n};\n\nexport const cartesianGeometry = (input: CartesianInput): CartesianGeometry => {\n const { rows, xKey, series, width, height, isStacked, curve, formatX } = input;\n const hasBars = series.some(item => item.type === 'bar');\n const orientation: Orientation =\n hasBars && series.every(item => item.type === 'bar') ? input.orientation : 'vertical';\n const isHorizontal = orientation === 'horizontal';\n\n const xValues = rows.map(row => row[xKey]);\n const isContinuous =\n !hasBars &&\n !isHorizontal &&\n xValues.length > 1 &&\n xValues.every(value => toNumber(value) !== null);\n\n /* --- Yığınlar: aynı eksen + aynı tür birlikte yığılır; çizgi yığılmaz. --- */\n const stacks: Record<string, { base: number; top: number }[]> = {};\n if (isStacked)\n for (const axis of ['left', 'right'] as const)\n for (const type of ['bar', 'area'] as const) {\n const keys = series\n .filter(item => (item.axis ?? 'left') === axis && item.type === type)\n .map(item => item.key);\n Object.assign(stacks, stack(rows, keys));\n }\n\n const valueOf = (key: string, index: number): { base: number; top: number } | null => {\n if (stacks[key]) return stacks[key][index];\n const value = toNumber(rows[index][key]);\n return value === null ? null : { base: 0, top: value };\n };\n\n /* --- Değer tanım aralıkları (eksen başına). --- */\n const domainFor = (axis: 'left' | 'right'): [number, number] | null => {\n const members = series.filter(item => (item.axis ?? 'left') === axis);\n if (members.length === 0) return null;\n\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n for (const item of members)\n for (let index = 0; index < rows.length; index += 1) {\n const value = valueOf(item.key, index);\n if (!value) continue;\n min = Math.min(min, value.top, value.base);\n max = Math.max(max, value.top, value.base);\n }\n\n /* Çubuk ve alan sıfırdan çizilir: sıfır tanım aralığında OLMALI. */\n if (members.some(item => item.type !== 'line')) {\n min = Math.min(min, 0);\n max = Math.max(max, 0);\n }\n\n if (!Number.isFinite(min) || !Number.isFinite(max)) return [0, 1];\n\n const [fixedMin, fixedMax] =\n axis === 'left' ? (input.domain ?? [undefined, undefined]) : [undefined, undefined];\n const nice = niceDomain(fixedMin ?? min, fixedMax ?? max);\n return [fixedMin ?? nice[0], fixedMax ?? nice[1]];\n };\n\n const leftDomain = domainFor('left') ?? [0, 1];\n const rightDomain = domainFor('right');\n const hasRightAxis = rightDomain !== null && !isHorizontal;\n\n /* --- Kenar boşlukları: bölme yazısının en uzunu kadar. --- */\n const leftLabels = linearTicks(leftDomain[0], leftDomain[1], 5).map(input.formatLeft);\n const rightLabels = rightDomain\n ? linearTicks(rightDomain[0], rightDomain[1], 5).map(input.formatRight)\n : [];\n const categoryLabels = rows.map(row => formatX(row[xKey]));\n\n const left = isHorizontal\n ? Math.min(width * 0.4, Math.max(MARGIN.minLeft, ...categoryLabels.map(labelWidth)) + 12)\n : Math.max(MARGIN.minLeft, ...leftLabels.map(labelWidth)) + 10;\n const right = hasRightAxis\n ? Math.max(MARGIN.minLeft, ...rightLabels.map(labelWidth)) + 10\n : MARGIN.right;\n\n const area: PlotArea = {\n left,\n top: MARGIN.top,\n right: Math.max(left + 1, width - right),\n bottom: Math.max(MARGIN.top + 1, height - MARGIN.bottom),\n width: Math.max(1, width - right - left),\n height: Math.max(1, height - MARGIN.bottom - MARGIN.top),\n };\n\n /* --- Ölçekler. Kategori ekseni dikeyde yatay, yatayda dikey. --- */\n const categoryRange: [number, number] = isHorizontal\n ? [area.top, area.bottom]\n : [area.left, area.right];\n const valueRange: [number, number] = isHorizontal\n ? [area.left, area.right]\n : [area.bottom, area.top];\n\n const leftScale = scaleLinear(leftDomain, valueRange);\n const rightScale = rightDomain ? scaleLinear(rightDomain, valueRange) : leftScale;\n const scaleFor = (item: CartesianSeries) =>\n (item.axis ?? 'left') === 'right' && rightDomain ? rightScale : leftScale;\n\n let centers: number[];\n let bandwidth = 0;\n /* Sürekli eksenin ölçeği; bölmeler de bundan. ⚠ `Math.min(...dizi)` değil `extent`: on binlerce\n noktada yayılan argüman çağrı yığınını taşırıyordu. */\n let xScale: LinearScale | null = null;\n\n if (isContinuous) {\n const numeric = xValues.map(value => toNumber(value) as number);\n xScale = scaleLinear(extent(numeric), categoryRange);\n centers = numeric.map(xScale);\n } else {\n const band = scaleBand(\n rows.map((_, index) => String(index)),\n categoryRange,\n hasBars ? { paddingInner: 0.24, paddingOuter: 0.12 } : { paddingInner: 0, paddingOuter: 0 },\n );\n bandwidth = band.bandwidth;\n centers = rows.map((_, index) => band(String(index)) + band.bandwidth / 2);\n }\n\n /* Yön dönüşümü: (kategori, değer) → (x, y). */\n const at = (category: number, value: number) =>\n isHorizontal ? { x: value, y: category } : { x: category, y: value };\n\n /* --- Şekiller. --- */\n const bars: BarShape[] = [];\n const barSeries = series.filter(item => item.type === 'bar');\n const slots = isStacked ? 1 : Math.max(1, barSeries.length);\n const slotGap = slots > 1 ? Math.min(2, bandwidth * 0.04) : 0;\n const slotWidth = Math.max(1, (bandwidth - slotGap * (slots - 1)) / slots);\n\n barSeries.forEach((item, seriesIndex) => {\n const scale = scaleFor(item);\n const slot = isStacked ? 0 : seriesIndex;\n\n rows.forEach((_, index) => {\n const value = valueOf(item.key, index);\n if (!value || value.top === value.base) return;\n\n const start = centers[index] - bandwidth / 2 + slot * (slotWidth + slotGap);\n const v0 = scale(value.base);\n const v1 = scale(value.top);\n const low = Math.min(v0, v1);\n const span = Math.max(1, Math.abs(v1 - v0));\n\n bars.push(\n isHorizontal\n ? {\n key: item.key,\n index,\n tone: item.tone,\n x: low,\n y: start,\n width: span,\n height: slotWidth,\n }\n : {\n key: item.key,\n index,\n tone: item.tone,\n x: start,\n y: low,\n width: slotWidth,\n height: span,\n },\n );\n });\n });\n\n const points: Record<string, MaybePoint[]> = {};\n const lines: CartesianGeometry['lines'] = [];\n const areas: CartesianGeometry['areas'] = [];\n\n for (const item of series) {\n if (item.type === 'bar') continue;\n const scale = scaleFor(item);\n const top = rows.map((_, index) => {\n const value = valueOf(item.key, index);\n return value ? at(centers[index], scale(value.top)) : null;\n });\n points[item.key] = top;\n\n if (item.type === 'area') {\n const base = rows.map((_, index) => {\n const value = valueOf(item.key, index);\n return value ? at(centers[index], scale(value.base)) : null;\n });\n areas.push({ key: item.key, tone: item.tone, d: areaPath(top, base, curve) });\n }\n\n lines.push({ key: item.key, tone: item.tone, d: linePath(top, curve) });\n }\n\n /* --- İpucu çapası: dizindeki en uç değer (dikeyde en üst, yatayda en sağ). --- */\n const anchors = rows.map((_, index) => {\n let extreme: number | null = null;\n for (const item of series) {\n const value = valueOf(item.key, index);\n if (!value) continue;\n const pixel = scaleFor(item)(value.top);\n extreme =\n extreme === null\n ? pixel\n : isHorizontal\n ? Math.max(extreme, pixel)\n : Math.min(extreme, pixel);\n }\n const fallback = isHorizontal ? area.left : area.bottom;\n return at(centers[index], extreme ?? fallback);\n });\n\n /* --- Bölmeler. --- */\n const toTicks = (\n scale: typeof leftScale,\n domain: readonly [number, number],\n format: ValueFormat,\n ): Tick[] =>\n linearTicks(\n domain[0],\n domain[1],\n isHorizontal\n ? Math.max(2, Math.floor(area.width / 90))\n : Math.max(2, Math.floor(area.height / 48)),\n ).map(value => ({\n position: scale(value),\n label: format(value),\n }));\n\n const categoryTicks: Tick[] = xScale\n ? linearTicks(xScale.domain[0], xScale.domain[1], Math.max(2, Math.floor(area.width / 90))).map(\n value => ({\n position: (xScale as LinearScale)(value),\n label: formatX(value),\n }),\n )\n : rows.map((_, index) => ({\n position: centers[index],\n label: isHorizontal ? fitLabel(categoryLabels[index], left - 12) : categoryLabels[index],\n }));\n\n return {\n zero: leftDomain[0] < 0 && leftDomain[1] > 0 ? leftScale(0) : null,\n area,\n centers,\n bandwidth,\n isContinuous,\n categoryTicks,\n leftTicks: toTicks(leftScale, leftDomain, input.formatLeft),\n rightTicks:\n hasRightAxis && rightDomain ? toTicks(rightScale, rightDomain, input.formatRight) : [],\n hasRightAxis,\n lines,\n areas,\n bars,\n points,\n anchors,\n };\n};\n","import { ClassValue } from '@/types/common-element-props.type';\n\n/** Sınıf adı birleştirici. */\nexport const cx = (...values: ClassValue[]): string => {\n let result = '';\n\n for (const value of values) {\n if (!value) continue;\n result = result === '' ? value : `${result} ${value}`;\n }\n\n return result;\n};\n","/**\n * SERİ RENKLERİ — hanui kategorik paleti (`cat-1…5`, `series-2`). Her ton iki temanın üç\n * yüzeyinde ≥3:1 (`check:contrast`) ve iki ton arasında ΔE ≥ 8 (palet üreteci).\n * ⚠ Marka yeşilleri (çam, mint) seri rengi OLMAZ: yeşil eylemin rengi. `cat-3` orta aydınlıkta bir\n * kategori yeşili.\n */\nexport type ChartTone =\n 'cat-1' | 'cat-2' | 'cat-3' | 'cat-4' | 'cat-5' | 'series-1' | 'series-2' | 'muted';\n\n/** Sıra: ilk iki seri en uzak iki ton (mavi, kil) — iki serili grafik en sık durum. */\nexport const TONE_ORDER: readonly ChartTone[] = [\n 'cat-1',\n 'cat-2',\n 'cat-3',\n 'cat-4',\n 'cat-5',\n 'series-2',\n];\n\n/** Verilmeyen tonu sıradan alır; altıdan fazla seride döner (lejant adı ayırt eder). */\nexport const toneAt = (index: number, tone?: ChartTone): ChartTone =>\n tone ?? TONE_ORDER[index % TONE_ORDER.length];\n\n/** CSS rengi — tema değişince yeniden çizim gerekmez, değişken çözülür. */\nexport const toneColor = (tone: ChartTone): string =>\n tone === 'muted' ? 'var(--hanui-text-3)' : `var(--hanui-${tone})`;\n","'use client';\n\nimport {\n type KeyboardEvent,\n type PointerEvent,\n type ReactNode,\n type RefObject,\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\n\nimport { useAnnounce } from '@ahmetilhn/hanui';\n\nimport { cx } from '../../helpers/class-name.helper';\n\nimport { type ChartTone, toneColor } from './palette';\nimport type { ChartTable, LegendEntry, TooltipContent } from './types';\n\nimport styles from './ChartFrame.module.scss';\n\nexport type ChartFrameProps = {\n /** Grafiğin okunan adı. */\n label: string;\n /** Okunan ek açıklama — eğilimi bir cümleyle söyler (\"Ekimde %12 artış\"). */\n description?: string;\n containerRef: RefObject<HTMLDivElement | null>;\n width: number;\n height: number;\n /** Ağır çizim — BELLEĞE ALINMIŞ öğe; üzerine gelindiğinde yeniden çizilmez. */\n plot: ReactNode;\n /** Etkin öğenin vurgusu (kılavuz çizgi, halka, nokta) — çizimin ÜSTÜNDE. */\n overlay: (active: number) => ReactNode;\n /** Çizimin ALTINDAKİ vurgu (çubuk bandının zemini): üstte olsaydı çubuğun rengini değiştirirdi. */\n underlay?: (active: number) => ReactNode;\n /** Klavye ve işaretçiyle gezilen öğe sayısı. */\n itemCount: number;\n /** Izgarada gezinme (ısı haritası): satır uzunluğu. Verilirse ↑/↓ satır atlar. */\n columns?: number;\n /** İşaretçi → öğe; isabet yoksa `null`. Koordinatlar çizim kutusuna göre. */\n pick: (x: number, y: number) => number | null;\n tooltip: (index: number) => TooltipContent;\n /** İpucunun bağlandığı nokta. */\n anchor: (index: number) => { x: number; y: number };\n /**\n * İpucunun noktanın hangi yanında açılacağı. `inward` (kartezyen): merkeze bakan yan — kenardaki\n * nokta ipucunu kutunun dışına itmez. `outward` (pasta, radar): merkezden uzak yan — içeride\n * çizimin kendisini (halkanın ortasındaki toplamı) örtüyordu. `inward` sığmayınca öteki yana\n * çevrilir, `outward` kutunun kenarına kırpılır.\n */\n tooltipSide?: 'inward' | 'outward';\n /** Klavyeyle gelinen öğenin okunan özeti. */\n announce: (index: number) => string;\n table: ChartTable;\n legend?: {\n entries: LegendEntry[];\n hidden: ReadonlySet<string>;\n onToggle: (id: string) => void;\n };\n className?: string;\n testId?: string;\n};\n\n/** İpucunun işaretçiden uzaklığı (px). */\nconst TOOLTIP_GAP = 12;\n\n/**\n * Grafik çerçevesi — ölçüm kutusu, SVG, ipucu, lejant ve gizli veri tablosu.\n *\n * Klavye (grafik tek bir sekme durağı): `→`/`↓` sonraki öğe · `←`/`↑` önceki öğe (ızgarada `↑`/`↓`\n * satır) · `Home`/`End` ilk/son · `Escape` vurguyu kaldırır. Gelinen öğe duyurulur.\n * İşaretçi: tek bir dinleyici, kare başına bir isabet hesabı (`requestAnimationFrame`).\n */\nconst ChartFrame = ({\n label,\n description,\n containerRef,\n width,\n height,\n plot,\n overlay,\n underlay,\n itemCount,\n columns,\n pick,\n tooltip,\n anchor,\n tooltipSide = 'inward',\n announce,\n table,\n legend,\n className,\n testId,\n}: ChartFrameProps) => {\n const descriptionId = useId();\n const say = useAnnounce();\n const [active, setActive] = useState<number | null>(null);\n const frame = useRef<number | null>(null);\n const tooltipRef = useRef<HTMLDivElement>(null);\n const pending = useRef<{ x: number; y: number } | null>(null);\n\n /* Veri değişip öğe sayısı küçülürse vurgu dışarıda kalmasın. */\n useEffect(() => {\n if (active !== null && active >= itemCount) setActive(itemCount > 0 ? itemCount - 1 : null);\n }, [active, itemCount]);\n\n useEffect(\n () => () => {\n if (frame.current !== null) cancelAnimationFrame(frame.current);\n },\n [],\n );\n\n const handlePointerMove = useCallback(\n (event: PointerEvent<SVGSVGElement>) => {\n const box = event.currentTarget.getBoundingClientRect();\n pending.current = { x: event.clientX - box.left, y: event.clientY - box.top };\n if (frame.current !== null) return;\n\n frame.current = requestAnimationFrame(() => {\n frame.current = null;\n const point = pending.current;\n if (point) setActive(pick(point.x, point.y));\n });\n },\n [pick],\n );\n\n const move = (next: number) => {\n const clamped = Math.min(itemCount - 1, Math.max(0, next));\n setActive(clamped);\n say(announce(clamped));\n };\n\n const handleKeyDown = (event: KeyboardEvent<SVGSVGElement>) => {\n if (itemCount === 0) return;\n const current = active ?? -1;\n const row = columns ?? 1;\n\n const next =\n event.key === 'ArrowRight'\n ? current + 1\n : event.key === 'ArrowLeft'\n ? Math.max(0, current - 1)\n : event.key === 'ArrowDown'\n ? current < 0\n ? 0\n : current + row\n : event.key === 'ArrowUp'\n ? Math.max(0, current - row)\n : event.key === 'Home'\n ? 0\n : event.key === 'End'\n ? itemCount - 1\n : null;\n\n if (event.key === 'Escape' && active !== null) {\n event.preventDefault();\n setActive(null);\n return;\n }\n\n if (next === null) return;\n event.preventDefault();\n move(next);\n };\n\n const content = active === null ? null : tooltip(active);\n const point = active === null ? null : anchor(active);\n const pointX = point?.x;\n\n /*\n * Yatay konum ÖLÇÜLEREK yazılır: ipucunun genişliği içeriğe bağlı ve ancak çizildikten sonra\n * biliniyor. Tercih edilen yan sığmazsa öteki yana, ikisi de sığmazsa kutunun içine kırpılır —\n * ipucu kutudan taşıp dar ekranda yatay kaydırma açmaz. Boyamadan ÖNCE çalışır, sıçrama görünmez.\n * ⚠ Fiziksel `left`: SVG koordinatları RTL'de aynalanmaz, mantıksal özellik ipucunu ters yana atardı.\n */\n useLayoutEffect(() => {\n const node = tooltipRef.current;\n if (!node || pointX === undefined) return;\n\n const size = node.offsetWidth;\n const isRightHalf = pointX > width / 2;\n const prefersLeft = tooltipSide === 'outward' ? !isRightHalf : isRightHalf;\n const leftX = pointX - TOOLTIP_GAP - size;\n const rightX = pointX + TOOLTIP_GAP;\n const fitsLeft = leftX >= 0;\n const fitsRight = rightX + size <= width;\n /*\n * Radyal grafikte ÇEVRİLMEZ, kenara kırpılır: öteki yan grafiğin merkezi — sığmayan birkaç\n * piksel için ipucu halkanın ortasındaki toplamın üstüne atlıyordu (ölçüldü: 10 px eksik).\n */\n const x =\n tooltipSide === 'outward'\n ? prefersLeft\n ? leftX\n : rightX\n : prefersLeft\n ? fitsLeft || !fitsRight\n ? leftX\n : rightX\n : fitsRight || !fitsLeft\n ? rightX\n : leftX;\n\n node.style.left = `${Math.min(Math.max(0, x), Math.max(0, width - size))}px`;\n }, [active, pointX, width, tooltipSide]);\n\n return (\n <figure className={cx(styles.chart, className)} data-testid={testId}>\n <div ref={containerRef} className={styles.chart__canvas} style={{ blockSize: height }}>\n <svg\n className={styles.chart__svg}\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n role=\"img\"\n aria-label={label}\n aria-describedby={description ? descriptionId : undefined}\n tabIndex={itemCount > 0 ? 0 : undefined}\n onPointerMove={handlePointerMove}\n onPointerDown={handlePointerMove}\n onPointerLeave={() => setActive(null)}\n onKeyDown={handleKeyDown}\n onBlur={() => setActive(null)}\n >\n {active !== null && underlay && (\n <g className={styles.chart__overlay}>{underlay(active)}</g>\n )}\n {plot}\n {active !== null && <g className={styles.chart__overlay}>{overlay(active)}</g>}\n </svg>\n\n {content && point && (\n /* Okunan karşılığı duyuru ve tablo; ipucu yalnızca görsel. */\n <div\n ref={tooltipRef}\n aria-hidden\n className={styles.chart__tooltip}\n /* Noktanın YANINDA, dikey ortalı: noktayı ve kılavuz çizgiyi örtmez. */\n style={{ insetBlockStart: Math.max(24, Math.min(point.y, height - 24)) }}\n >\n {content.title && <span className={styles.chart__tooltipTitle}>{content.title}</span>}\n {content.rows.map(row => (\n <span key={row.id} className={styles.chart__tooltipRow}>\n {row.tone && (\n <span\n className={styles.chart__swatch}\n style={{ backgroundColor: toneColor(row.tone) }}\n />\n )}\n <span className={styles.chart__tooltipLabel}>{row.label}</span>\n <span className={styles.chart__tooltipValue}>{row.value}</span>\n </span>\n ))}\n </div>\n )}\n </div>\n\n {legend && legend.entries.length > 1 && (\n <ul className={styles.chart__legend}>\n {legend.entries.map(entry => {\n const isHidden = legend.hidden.has(entry.id);\n return (\n <li key={entry.id}>\n <button\n type=\"button\"\n className={cx(\n styles.chart__legendItem,\n isHidden && styles['chart__legendItem--hidden'],\n )}\n aria-pressed={!isHidden}\n onClick={() => legend.onToggle(entry.id)}\n >\n <LegendSwatch tone={entry.tone} isHidden={isHidden} />\n {entry.label}\n </button>\n </li>\n );\n })}\n </ul>\n )}\n\n {description && (\n <p id={descriptionId} className={styles.chart__srOnly}>\n {description}\n </p>\n )}\n\n {/*\n * Gizleme bir KAPTA: `<table>` `width: 1px` ve `overflow: hidden`ı yok sayıp içeriği kadar\n * genişliyor — dar ekranda sayfaya görünmez bir yatay kaydırma açıyordu (ölçüldü: 390 px\n * görünümde ısı haritasının tablosu 424 px).\n */}\n <div className={styles.chart__srOnly}>\n <table>\n <caption>{label}</caption>\n <thead>\n <tr>\n {table.columns.map((column, index) => (\n <th key={index} scope=\"col\">\n {column}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {table.rows.map((row, index) => (\n <tr key={index}>\n {row.map((cell, cellIndex) =>\n cellIndex === 0 ? (\n <th key={cellIndex} scope=\"row\">\n {cell}\n </th>\n ) : (\n <td key={cellIndex}>{cell}</td>\n ),\n )}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </figure>\n );\n};\n\n/** Gizli seri: içi BOŞ kare — renk tek başına durum taşımaz, biçim de değişir. */\nconst LegendSwatch = ({ tone, isHidden }: { tone: ChartTone; isHidden: boolean }) => (\n <span\n aria-hidden\n className={styles.chart__swatch}\n style={\n isHidden\n ? { backgroundColor: 'transparent', boxShadow: `inset 0 0 0 2px ${toneColor(tone)}` }\n : { backgroundColor: toneColor(tone) }\n }\n />\n);\n\nexport default ChartFrame;\n","/** SAYI BİÇİMİ — eksen ve ipucu metni. Dil `labels.locale`ten, verilmezse tarayıcının dili. */\n\nexport type ValueFormat = (value: number) => string;\n\nconst cache = new Map<string, Intl.NumberFormat>();\n\nconst formatter = (\n locale: string | undefined,\n options: Intl.NumberFormatOptions,\n): Intl.NumberFormat => {\n const key = `${locale ?? ''}|${JSON.stringify(options)}`;\n let instance = cache.get(key);\n\n if (!instance) {\n instance = new Intl.NumberFormat(locale, options);\n cache.set(key, instance);\n }\n\n return instance;\n};\n\n/**\n * Eksen bölmesi: KISA gösterim (\"12 B\", \"1,2 Mn\"). Uzun bir sayı dar bir eksende üst üste biniyor;\n * tam değer ipucunda ve veri tablosunda okunur.\n */\nexport const compactNumber =\n (locale?: string): ValueFormat =>\n value =>\n formatter(locale, { notation: 'compact', maximumFractionDigits: 1 }).format(value);\n\n/** İpucu ve tablo: tam değer, en çok iki ondalık. */\nexport const fullNumber =\n (locale?: string): ValueFormat =>\n value =>\n formatter(locale, { maximumFractionDigits: 2 }).format(value);\n","'use client';\n\nimport { type RefObject, useLayoutEffect, useRef, useState } from 'react';\n\n/** Ölçüm gelmeden (sunucu, ilk kare) kullanılan genişlik: grafik boş bir kutu değil, makul bir şekil çizer. */\nconst FALLBACK_WIDTH = 640;\n\n/** `useLayoutEffect` sunucuda uyarı basar; orada etkisiz bir eşdeğer. */\nconst useIsomorphicLayoutEffect = typeof window === 'undefined' ? () => {} : useLayoutEffect;\n\n/**\n * Kapsayıcının genişliği — `ResizeObserver` ile, BOYAMADAN ÖNCE ölçülür (ilk karede yanlış boyutta\n * çizilip zıplamasın). `fixed` verilirse ölçüm yapılmaz.\n */\nconst useChartWidth = (fixed?: number): [RefObject<HTMLDivElement | null>, number] => {\n const ref = useRef<HTMLDivElement>(null);\n const [width, setWidth] = useState(fixed ?? FALLBACK_WIDTH);\n\n useIsomorphicLayoutEffect(() => {\n if (fixed !== undefined) {\n setWidth(fixed);\n return;\n }\n\n const node = ref.current;\n if (!node) return;\n\n const measure = (next: number) => {\n /* Kesirli genişlik her alt piksel değişiminde yeniden çizdiriyordu. */\n const rounded = Math.floor(next);\n if (rounded > 0) setWidth(current => (current === rounded ? current : rounded));\n };\n\n measure(node.clientWidth);\n if (typeof ResizeObserver === 'undefined') return;\n\n const observer = new ResizeObserver(([entry]) => measure(entry.contentRect.width));\n observer.observe(node);\n return () => observer.disconnect();\n }, [fixed]);\n\n return [ref, width];\n};\n\nexport default useChartWidth;\n","'use client';\n\nimport { memo, useCallback, useMemo, useState } from 'react';\n\nimport { useHanui } from '@ahmetilhn/hanui';\n\nimport { CategoryAxis, ValueAxis } from './axes';\nimport { type CartesianSeries, cartesianGeometry, type Orientation, toNumber } from './cartesian';\nimport ChartFrame from './ChartFrame';\nimport { compactNumber, fullNumber, type ValueFormat } from './format';\nimport { toneAt, toneColor } from './palette';\nimport type { Curve } from './path';\nimport { nearestIndex } from './scale';\nimport type { TooltipContent } from './types';\nimport useChartWidth from './useChartWidth';\n\nimport styles from './CartesianChart.module.scss';\n\n/** Veri satırı — x alanı ve seri alanları; eksik değer `null`. */\nexport type ChartRow = Record<string, string | number | null | undefined>;\n\nexport type CartesianChartProps = {\n /** Grafiğin okunan adı. */\n label: string;\n /** Okunan ek açıklama — eğilimi bir cümleyle söyler. */\n description?: string;\n data: readonly ChartRow[];\n /** Satırdaki x alanının adı. */\n xKey: string;\n /** Veri tablosunun ilk sütun başlığı; verilmezse `xKey`. */\n xLabel?: string;\n series: readonly (CartesianSeries & { format?: ValueFormat })[];\n /** Yükseklik (px). Genişlik kapsayıcıdan ölçülür. */\n height?: number;\n /** Sabit genişlik (px) — ölçüm yapılmaz. */\n width?: number;\n isStacked?: boolean;\n orientation?: Orientation;\n curve?: Curve;\n /** Çizgi üzerinde her veri noktası. Çok noktalı seride kapalı tutun. */\n hasPoints?: boolean;\n /** x değerinin yazısı (eksen, ipucu, tablo). */\n formatX?: (value: string | number) => string;\n /** Değerin yazısı (ipucu, tablo); seri kendi `format`ını verebilir. Eksen kısa gösterimde. */\n formatValue?: ValueFormat;\n /** Sol değer ekseninin sabit uçları. */\n domain?: readonly [number | undefined, number | undefined];\n className?: string;\n testId?: string;\n};\n\nconst DEFAULT_HEIGHT = 280;\nconst MISSING = '—';\n\n/**\n * Kartezyen grafik — Çizgi, Alan, Çubuk ve Bileşik grafiğin ortak gövdesi. Dışa `LineChart`,\n * `AreaChart`, `BarChart`, `ComposedChart` olarak verilir.\n */\nconst CartesianChart = ({\n label,\n description,\n data,\n xKey,\n xLabel,\n series,\n height = DEFAULT_HEIGHT,\n width: fixedWidth,\n isStacked = false,\n orientation = 'vertical',\n curve = 'monotone',\n hasPoints = false,\n formatX = String,\n formatValue,\n domain,\n className,\n testId,\n}: CartesianChartProps) => {\n const { labels } = useHanui();\n const locale = labels?.locale;\n const [containerRef, width] = useChartWidth(fixedWidth);\n const [hidden, setHidden] = useState<ReadonlySet<string>>(() => new Set());\n\n const valueFormat = useMemo(() => formatValue ?? fullNumber(locale), [formatValue, locale]);\n const axisFormat = useMemo(() => compactNumber(locale), [locale]);\n const formatXValue = useCallback(\n (value: unknown) =>\n value === null || value === undefined ? '' : formatX(value as string | number),\n [formatX],\n );\n\n /* Ton seri SIRASINDAN gelir: bir seri gizlenince diğerlerinin rengi değişmez. */\n const toned = useMemo(\n () => series.map((item, index) => ({ ...item, tone: toneAt(index, item.tone) })),\n [series],\n );\n const visible = useMemo(() => toned.filter(item => !hidden.has(item.key)), [toned, hidden]);\n\n const geometry = useMemo(\n () =>\n cartesianGeometry({\n rows: data,\n xKey,\n series: visible,\n width,\n height,\n isStacked,\n orientation,\n curve,\n formatX: formatXValue,\n formatLeft: axisFormat,\n formatRight: axisFormat,\n domain,\n }),\n [\n data,\n xKey,\n visible,\n width,\n height,\n isStacked,\n orientation,\n curve,\n formatXValue,\n axisFormat,\n domain,\n ],\n );\n\n const isHorizontal =\n orientation === 'horizontal' &&\n visible.length > 0 &&\n visible.every(item => item.type === 'bar');\n /* Vurgu biçimi: çubukta kategorinin BANDI, çizgi/alanda dikey kılavuz çizgi. Kategorik x'li çizgide de\n bant genişliği sıfırdan büyük; vurguyu bant genişliğine değil çubuğun varlığına bağlamak gerekiyordu. */\n const hasBars = visible.some(item => item.type === 'bar');\n\n /* İsabet: kategori ekseninde en yakın merkez (sıralı dizide ikili arama). */\n const sorted = useMemo(() => {\n const order = geometry.centers\n .map((center, index) => ({ center, index }))\n .sort((a, b) => a.center - b.center);\n return { centers: order.map(item => item.center), indices: order.map(item => item.index) };\n }, [geometry.centers]);\n\n const pick = useCallback(\n (x: number, y: number) => {\n const { area } = geometry;\n if (x < area.left - 4 || x > area.right + 4 || y < area.top - 4 || y > area.bottom + 4)\n return null;\n const position = nearestIndex(sorted.centers, isHorizontal ? y : x);\n return position < 0 ? null : sorted.indices[position];\n },\n [geometry, sorted, isHorizontal],\n );\n\n const tooltip = useCallback(\n (index: number): TooltipContent => ({\n title: formatXValue(data[index]?.[xKey]),\n rows: visible.map(item => {\n const value = toNumber(data[index]?.[item.key]);\n return {\n id: item.key,\n label: item.label,\n tone: item.tone,\n value: value === null ? MISSING : (item.format ?? valueFormat)(value),\n };\n }),\n }),\n [data, xKey, visible, valueFormat, formatXValue],\n );\n\n const announce = useCallback(\n (index: number) => {\n const content = tooltip(index);\n return `${content.title}: ${content.rows.map(row => `${row.label} ${row.value}`).join(', ')}`;\n },\n [tooltip],\n );\n\n const table = useMemo(\n () => ({\n columns: [xLabel ?? xKey, ...toned.map(item => item.label)],\n rows: data.map(row => [\n formatXValue(row[xKey]),\n ...toned.map(item => {\n const value = toNumber(row[item.key]);\n return value === null ? MISSING : (item.format ?? valueFormat)(value);\n }),\n ]),\n }),\n [data, xKey, xLabel, toned, valueFormat, formatXValue],\n );\n\n const plot = useMemo(\n () => (\n <g>\n {isHorizontal ? (\n <>\n <ValueAxis area={geometry.area} ticks={geometry.leftTicks} side=\"bottom\" hasGrid />\n <CategoryAxis area={geometry.area} ticks={geometry.categoryTicks} side=\"left\" />\n </>\n ) : (\n <>\n <ValueAxis area={geometry.area} ticks={geometry.leftTicks} side=\"left\" hasGrid />\n {geometry.hasRightAxis && (\n <ValueAxis area={geometry.area} ticks={geometry.rightTicks} side=\"right\" />\n )}\n <CategoryAxis area={geometry.area} ticks={geometry.categoryTicks} side=\"bottom\" />\n </>\n )}\n\n {/* Eksi değerli grafikte sıfır çizgisi: çubuklar oradan başlıyor, eksenin ucundan değil. */}\n {geometry.zero !== null &&\n (isHorizontal ? (\n <line\n className={styles.zero}\n x1={geometry.zero}\n x2={geometry.zero}\n y1={geometry.area.top}\n y2={geometry.area.bottom}\n />\n ) : (\n <line\n className={styles.zero}\n x1={geometry.area.left}\n x2={geometry.area.right}\n y1={geometry.zero}\n y2={geometry.zero}\n />\n ))}\n\n {geometry.areas.map(shape => (\n <path\n key={`area-${shape.key}`}\n d={shape.d}\n className={styles.area}\n style={{ fill: `color-mix(in srgb, ${toneColor(shape.tone)} 18%, transparent)` }}\n />\n ))}\n\n {geometry.bars.map(bar => (\n <rect\n key={`bar-${bar.key}-${bar.index}`}\n className={styles.bar}\n x={bar.x}\n y={bar.y}\n width={bar.width}\n height={bar.height}\n rx={Math.min(3, bar.width / 4, bar.height / 4)}\n style={{ fill: toneColor(bar.tone) }}\n />\n ))}\n\n {geometry.lines.map(shape => (\n <path\n key={`line-${shape.key}`}\n d={shape.d}\n className={styles.line}\n style={{ stroke: toneColor(shape.tone) }}\n />\n ))}\n\n {/*\n * İki boşluk arasında kalan TEK değer çizgi üretmez (tek noktalı yol görünmez) — `hasPoints`\n * kapalıyken de işaretle çizilir; yoksa veri vardı ama grafikte yoktu.\n */}\n {visible\n .filter(item => item.type !== 'bar')\n .flatMap(item =>\n (geometry.points[item.key] ?? []).map((point, index, list) =>\n point && (hasPoints || (!list[index - 1] && !list[index + 1])) ? (\n <circle\n key={`point-${item.key}-${index}`}\n className={styles.point}\n cx={point.x}\n cy={point.y}\n r={3}\n style={{ fill: toneColor(item.tone) }}\n />\n ) : null,\n ),\n )}\n </g>\n ),\n [geometry, hasPoints, isHorizontal, visible],\n );\n\n const underlay = useCallback(\n (index: number) => {\n if (!hasBars || geometry.bandwidth <= 0) return null;\n const { area } = geometry;\n const center = geometry.centers[index];\n const pad = geometry.bandwidth * 0.12;\n\n return isHorizontal ? (\n <rect\n className={styles.band}\n x={area.left}\n width={area.width}\n y={center - geometry.bandwidth / 2 - pad}\n height={geometry.bandwidth + pad * 2}\n />\n ) : (\n <rect\n className={styles.band}\n y={area.top}\n height={area.height}\n x={center - geometry.bandwidth / 2 - pad}\n width={geometry.bandwidth + pad * 2}\n />\n );\n },\n [geometry, isHorizontal, hasBars],\n );\n\n const overlay = useCallback(\n (index: number) => {\n const { area } = geometry;\n const center = geometry.centers[index];\n\n return (\n <>\n {!hasBars && (\n <line\n className={styles.crosshair}\n x1={center}\n x2={center}\n y1={area.top}\n y2={area.bottom}\n />\n )}\n {visible\n .filter(item => item.type !== 'bar')\n .map(item => {\n const point = geometry.points[item.key]?.[index];\n return point ? (\n <circle\n key={item.key}\n className={styles.marker}\n cx={point.x}\n cy={point.y}\n r={4.5}\n style={{ fill: toneColor(item.tone) }}\n />\n ) : null;\n })}\n </>\n );\n },\n [geometry, visible, hasBars],\n );\n\n return (\n <ChartFrame\n label={label}\n description={description}\n containerRef={containerRef}\n width={width}\n height={height}\n plot={plot}\n overlay={overlay}\n underlay={underlay}\n itemCount={data.length}\n pick={pick}\n tooltip={tooltip}\n anchor={index => geometry.anchors[index] ?? { x: 0, y: 0 }}\n announce={announce}\n table={table}\n legend={{\n entries: toned.map(item => ({ id: item.key, label: item.label, tone: item.tone })),\n hidden,\n onToggle: id =>\n setHidden(current => {\n const next = new Set(current);\n if (next.has(id)) next.delete(id);\n /* Son görünür seri gizlenmez: boş bir grafik bir şey göstermez, geri getirmek de zorlaşır. */\n else if (toned.length - current.size > 1) next.add(id);\n return next;\n }),\n }}\n className={className}\n testId={testId}\n />\n );\n};\n\nexport default memo(CartesianChart) as typeof CartesianChart;\n","'use client';\n\nimport { memo, useMemo } from 'react';\n\nimport { named } from '../../helpers/component.helper';\nimport CartesianChart, { type CartesianChartProps } from '../core/CartesianChart';\nimport type { ChartSeries } from '../core/series';\n\ntype Props = Omit<CartesianChartProps, 'series' | 'isStacked' | 'orientation'> & {\n series: readonly ChartSeries[];\n};\n\n/**\n * Çizgi grafiği — bir ya da daha çok serinin x boyunca değişimi. Sayısal x sürekli eksen, metin x\n * kategorik eksen. `null` değer çizgiyi KESER (eksik veri sıfır değildir).\n *\n * Klavye: grafiğe sekmeyle gelinir · `←`/`→` önceki/sonraki x · `Home`/`End` · `Escape`.\n */\nconst LineChart = ({ series, ...rest }: Props) => {\n const lines = useMemo(() => series.map(item => ({ ...item, type: 'line' as const })), [series]);\n return <CartesianChart {...rest} series={lines} />;\n};\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(LineChart, 'LineChart')) as typeof LineChart;\n","'use client';\n\nimport { memo, useMemo } from 'react';\n\nimport { named } from '../../helpers/component.helper';\nimport CartesianChart, { type CartesianChartProps } from '../core/CartesianChart';\nimport type { ChartSeries } from '../core/series';\n\ntype Props = Omit<CartesianChartProps, 'series' | 'orientation'> & {\n series: readonly ChartSeries[];\n};\n\n/**\n * Alan grafiği — çizginin altı dolu; `isStacked` ile seriler üst üste (bütünün parçaları).\n * Taban SIFIR: alanın yüksekliği değerin kendisi, kırpılmış bir eksen alanı yanlış oranda gösterir.\n *\n * Klavye: `←`/`→` önceki/sonraki x · `Home`/`End` · `Escape`.\n */\nconst AreaChart = ({ series, ...rest }: Props) => {\n const areas = useMemo(() => series.map(item => ({ ...item, type: 'area' as const })), [series]);\n return <CartesianChart {...rest} series={areas} />;\n};\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(AreaChart, 'AreaChart')) as typeof AreaChart;\n","'use client';\n\nimport { memo, useMemo } from 'react';\n\nimport { named } from '../../helpers/component.helper';\nimport CartesianChart, { type CartesianChartProps } from '../core/CartesianChart';\nimport type { ChartSeries } from '../core/series';\n\ntype Props = Omit<CartesianChartProps, 'series' | 'curve' | 'hasPoints'> & {\n series: readonly ChartSeries[];\n};\n\n/**\n * Çubuk / sütun grafiği — kategoriler arası karşılaştırma. Birden çok seri yan yana (gruplu) ya da\n * `isStacked` ile üst üste; `orientation=\"horizontal\"` uzun kategori adları için (etiket kesilmez,\n * sığmazsa \"…\" ile kısalır, tam adı ipucu ve tabloda).\n * Eksi değer sıfırın ALTINA iner; yığında artı ve eksi ayrı birikir.\n *\n * Klavye: `←`/`→` (ya da `↑`/`↓`) önceki/sonraki kategori · `Home`/`End` · `Escape`.\n */\nconst BarChart = ({ series, ...rest }: Props) => {\n const bars = useMemo(() => series.map(item => ({ ...item, type: 'bar' as const })), [series]);\n return <CartesianChart {...rest} series={bars} />;\n};\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(BarChart, 'BarChart')) as typeof BarChart;\n","'use client';\n\nimport { memo } from 'react';\n\nimport { named } from '../../helpers/component.helper';\nimport CartesianChart, { type CartesianChartProps } from '../core/CartesianChart';\nimport type { ComposedSeries } from '../core/series';\n\ntype Props = Omit<CartesianChartProps, 'series' | 'orientation'> & {\n /** Seri başına tür (`line` / `area` / `bar`) ve eksen (`left` / `right`). */\n series: readonly ComposedSeries[];\n};\n\n/**\n * Bileşik grafik — çubuk, çizgi ve alan aynı x ekseninde; farklı birimdeki seri SAĞ eksene\n * (`axis: 'right'`). Çizim sırası: alan → çubuk → çizgi (çizgi her zaman görünür kalır).\n * ⚠ İki eksen okuyucuyu yanıltabilir: sağ eksendeki seri `format` ile kendi birimini söylemeli.\n *\n * Klavye: `←`/`→` önceki/sonraki x · `Home`/`End` · `Escape`.\n */\nconst ComposedChart = (props: Props) => <CartesianChart {...props} />;\n\nexport default /*#__PURE__*/ memo(\n /*#__PURE__*/ named(ComposedChart, 'ComposedChart'),\n) as typeof ComposedChart;\n","'use client';\n\nimport { memo, useCallback, useMemo, useState } from 'react';\n\nimport { useHanui } from '@ahmetilhn/hanui';\n\nimport { named } from '../../helpers/component.helper';\nimport ChartFrame from '../core/ChartFrame';\nimport { fullNumber, type ValueFormat } from '../core/format';\nimport { type ChartTone, toneAt, toneColor } from '../core/palette';\nimport { arcPath, polar } from '../core/path';\nimport useChartWidth from '../core/useChartWidth';\n\nimport styles from './index.module.scss';\n\nexport type PieSlice = {\n id: string;\n label: string;\n value: number;\n tone?: ChartTone;\n};\n\ntype Props = {\n label: string;\n description?: string;\n data: readonly PieSlice[];\n /** `donut` ortası boş halka; ortaya `centerLabel` / `centerValue` yazılır. */\n variant?: 'pie' | 'donut';\n /** Halkanın ortasındaki büyük değer (toplam); verilmezse görünür dilimlerin toplamı. */\n centerValue?: string;\n /** Halkanın ortasındaki küçük yazı (\"Toplam\"). */\n centerLabel?: string;\n /** Değerin adı (tablo sütunu). */\n valueLabel: string;\n height?: number;\n width?: number;\n formatValue?: ValueFormat;\n className?: string;\n testId?: string;\n};\n\n/** Etkin dilimin dışarı kayması (px). */\nconst LIFT = 6;\n/** Dilimler arası ince ayırıcı: aynı aydınlıkta iki komşu ton tek renk gibi okunmasın. */\nconst SEPARATOR = 1.5;\n\n/**\n * Pasta / halka grafiği — bir bütünün parçaları. Dilim sırası verinin sırası (saat 12'den, saat\n * 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.\n * ⚠ Altıdan çok dilim okunmaz — kategorik palet altı tonda döner; uzun kuyruğu \"Diğer\"de toplayın.\n *\n * Klavye: `←`/`→` önceki/sonraki dilim · `Home`/`End` · `Escape`.\n */\nconst PieChart = ({\n label,\n description,\n data,\n variant = 'donut',\n centerValue,\n centerLabel,\n valueLabel,\n height = 260,\n width: fixedWidth,\n formatValue,\n className,\n testId,\n}: Props) => {\n const { labels } = useHanui();\n const [containerRef, width] = useChartWidth(fixedWidth);\n const [hidden, setHidden] = useState<ReadonlySet<string>>(() => new Set());\n const full = useMemo(() => fullNumber(labels?.locale), [labels?.locale]);\n const fv = formatValue ?? full;\n\n const toned = useMemo(\n () => data.map((slice, index) => ({ ...slice, tone: toneAt(index, slice.tone) })),\n [data],\n );\n\n const geometry = useMemo(() => {\n const visible = toned.filter(\n slice => !hidden.has(slice.id) && Number.isFinite(slice.value) && slice.value > 0,\n );\n const total = visible.reduce((sum, slice) => sum + slice.value, 0);\n const cx = width / 2;\n const cy = height / 2;\n const outer = Math.max(8, Math.min(width, height) / 2 - LIFT - 4);\n const inner = variant === 'donut' ? outer * 0.62 : 0;\n\n let angle = 0;\n const slices = visible.map(slice => {\n const sweep = total > 0 ? (slice.value / total) * Math.PI * 2 : 0;\n const start = angle;\n angle += sweep;\n return { ...slice, start, end: angle, share: total > 0 ? slice.value / total : 0 };\n });\n\n return { cx, cy, outer, inner, total, slices };\n }, [toned, hidden, width, height, variant]);\n\n const percent = useMemo(() => {\n const format = new Intl.NumberFormat(labels?.locale, {\n style: 'percent',\n maximumFractionDigits: 1,\n });\n return (share: number) => format.format(share);\n }, [labels?.locale]);\n\n const plot = useMemo(() => {\n const { cx, cy, outer, inner, slices, total } = geometry;\n\n return (\n <g>\n {slices.map(slice => (\n <path\n key={slice.id}\n className={styles.slice}\n d={arcPath(cx, cy, outer, inner, slice.start, slice.end)}\n style={{ fill: toneColor(slice.tone), strokeWidth: slices.length > 1 ? SEPARATOR : 0 }}\n />\n ))}\n {variant === 'donut' && (\n <g aria-hidden className={styles.center}>\n <text\n className={styles.center__value}\n x={cx}\n y={centerLabel ? cy - 4 : cy}\n dy=\"0.32em\"\n textAnchor=\"middle\"\n >\n {centerValue ?? fv(total)}\n </text>\n {centerLabel && (\n <text\n className={styles.center__label}\n x={cx}\n y={cy + 16}\n dy=\"0.32em\"\n textAnchor=\"middle\"\n >\n {centerLabel}\n </text>\n )}\n </g>\n )}\n </g>\n );\n }, [geometry, variant, centerValue, centerLabel, fv]);\n\n const pick = useCallback(\n (px: number, py: number) => {\n const { cx, cy, outer, inner, slices } = geometry;\n const distance = Math.hypot(px - cx, py - cy);\n if (distance > outer + LIFT || distance < inner) return null;\n\n /* Açı: saat 12 = 0, saat yönünde artar (`polar` ile aynı). */\n let angle = Math.atan2(px - cx, -(py - cy));\n if (angle < 0) angle += Math.PI * 2;\n const index = slices.findIndex(slice => angle >= slice.start && angle < slice.end);\n return index < 0 ? null : index;\n },\n [geometry],\n );\n\n const describe = (index: number) => {\n const slice = geometry.slices[index];\n return `${fv(slice.value)} (${percent(slice.share)})`;\n };\n\n return (\n <ChartFrame\n label={label}\n description={description}\n containerRef={containerRef}\n width={width}\n height={height}\n plot={plot}\n overlay={index => {\n const { cx, cy, outer, inner, slices } = geometry;\n const slice = slices[index];\n const middle = (slice.start + slice.end) / 2;\n const shift = polar(0, 0, LIFT, middle);\n return (\n <path\n className={styles.slice}\n d={arcPath(cx + shift.x, cy + shift.y, outer, inner, slice.start, slice.end)}\n style={{ fill: toneColor(slice.tone), strokeWidth: SEPARATOR }}\n />\n );\n }}\n itemCount={geometry.slices.length}\n pick={pick}\n tooltip={index => {\n const slice = geometry.slices[index];\n return {\n rows: [{ id: slice.id, label: slice.label, value: describe(index), tone: slice.tone }],\n };\n }}\n anchor={index => {\n const { cx, cy, outer, slices } = geometry;\n const slice = slices[index];\n /* Dilimin DIŞ kenarı: ipucu dışarı açılır, dilimi ve ortadaki toplamı örtmez. */\n return polar(cx, cy, outer + LIFT, (slice.start + slice.end) / 2);\n }}\n tooltipSide=\"outward\"\n announce={index => `${geometry.slices[index].label}: ${describe(index)}`}\n table={{\n columns: [label, valueLabel],\n rows: toned.map(slice => [\n slice.label,\n Number.isFinite(slice.value) ? fv(slice.value) : '—',\n ]),\n }}\n legend={{\n entries: toned.map(slice => ({ id: slice.id, label: slice.label, tone: slice.tone })),\n hidden,\n onToggle: id =>\n setHidden(current => {\n const next = new Set(current);\n if (next.has(id)) next.delete(id);\n else if (toned.length - current.size > 1) next.add(id);\n return next;\n }),\n }}\n className={className}\n testId={testId}\n />\n );\n};\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(PieChart, 'PieChart')) as typeof PieChart;\n","import { labelWidth } from './axes';\nimport type { PlotArea } from './types';\n\n/** Çizim alanı — sol kenar en uzun sol bölme yazısı kadar, alt kenar x yazıları için. */\nexport const plotArea = (\n width: number,\n height: number,\n leftLabels: readonly string[],\n { top = 12, right = 16, bottom = 28 } = {},\n): PlotArea => {\n const left = Math.max(32, ...leftLabels.map(labelWidth)) + 10;\n\n return {\n left,\n top,\n right: Math.max(left + 1, width - right),\n bottom: Math.max(top + 1, height - bottom),\n width: Math.max(1, width - right - left),\n height: Math.max(1, height - top - bottom),\n };\n};\n\n/** Eksen başına bölme sayısı: yatayda ~90 px, dikeyde ~48 px'te bir. */\nexport const tickCount = (length: number, horizontal: boolean): number =>\n Math.max(2, Math.floor(length / (horizontal ? 90 : 48)));\n","/**\n * MEKÂNSAL KOVA — işaretçiye en yakın noktayı her harekette TÜM noktaları taramadan bulur.\n * Noktalar sabit boyutlu piksel hücrelerine dağıtılır; arama yalnızca komşu hücrelerde.\n */\n\nexport type SpatialIndex = {\n /** `(x, y)`ye `radius` içindeki en yakın noktanın dizini; yoksa `null`. */\n nearest: (x: number, y: number, radius: number) => number | null;\n};\n\nexport const spatialIndex = (\n points: readonly { x: number; y: number }[],\n cell = 24,\n): SpatialIndex => {\n const buckets = new Map<string, number[]>();\n const key = (column: number, row: number) => `${column}:${row}`;\n\n points.forEach((point, index) => {\n if (!Number.isFinite(point.x) || !Number.isFinite(point.y)) return;\n const id = key(Math.floor(point.x / cell), Math.floor(point.y / cell));\n const bucket = buckets.get(id);\n if (bucket) bucket.push(index);\n else buckets.set(id, [index]);\n });\n\n return {\n nearest: (x, y, radius) => {\n const reach = Math.ceil(radius / cell);\n const column = Math.floor(x / cell);\n const row = Math.floor(y / cell);\n let best: number | null = null;\n let bestDistance = radius * radius;\n\n for (let dx = -reach; dx <= reach; dx += 1)\n for (let dy = -reach; dy <= reach; dy += 1)\n for (const index of buckets.get(key(column + dx, row + dy)) ?? []) {\n const distance = (points[index].x - x) ** 2 + (points[index].y - y) ** 2;\n if (distance <= bestDistance) {\n bestDistance = distance;\n best = index;\n }\n }\n\n return best;\n },\n };\n};\n","'use client';\n\nimport { memo, useCallback, useMemo, useState } from 'react';\n\nimport { useHanui } from '@ahmetilhn/hanui';\n\nimport { named } from '../../helpers/component.helper';\nimport { ValueAxis } from '../core/axes';\nimport ChartFrame from '../core/ChartFrame';\nimport { compactNumber, fullNumber, type ValueFormat } from '../core/format';\nimport { plotArea, tickCount } from '../core/margins';\nimport { type ChartTone, toneAt, toneColor } from '../core/palette';\nimport { niceDomain, scaleLinear, ticks } from '../core/scale';\nimport { spatialIndex } from '../core/spatial';\nimport { extent, finite } from '../core/stats';\nimport useChartWidth from '../core/useChartWidth';\n\nimport styles from './index.module.scss';\n\nexport type ScatterPoint = {\n x: number;\n y: number;\n /** Balon grafiği: noktanın büyüklüğü (alanla orantılı). */\n size?: number;\n /** Noktanın adı (ipucu ve tablo). */\n label?: string;\n};\n\nexport type ScatterSeries = {\n id: string;\n label: string;\n tone?: ChartTone;\n data: readonly ScatterPoint[];\n};\n\ntype Props = {\n label: string;\n description?: string;\n series: readonly ScatterSeries[];\n /** Eksen ve tablo başlıkları. */\n xLabel: string;\n yLabel: string;\n /** Balon grafiğinde büyüklüğün adı (\"Nüfus\"); verilmezse ipucunda büyüklük satırı yok. */\n sizeLabel?: string;\n height?: number;\n width?: number;\n formatX?: ValueFormat;\n formatY?: ValueFormat;\n className?: string;\n testId?: string;\n};\n\n/** Noktanın yarıçapı (px): boyutsuz 4; balonda 3-16, alanla orantılı (karekök ölçek). */\nconst RADIUS = { plain: 4, min: 3, max: 16 };\n/** İşaretçinin noktayı \"yakaladığı\" uzaklık (px) — parmakla da isabet ettirilebilsin. */\nconst HIT_RADIUS = 22;\n\n/**\n * Saçılım grafiği — iki sayısal değişkenin ilişkisi; `size` ile balon grafiği.\n * İsabet: mekânsal kova (her harekette tüm noktalar taranmaz). Klavye noktaları x sırasıyla gezer.\n *\n * Klavye: `←`/`→` önceki/sonraki nokta · `Home`/`End` · `Escape`.\n */\nconst ScatterPlot = ({\n label,\n description,\n series,\n xLabel,\n yLabel,\n sizeLabel,\n height = 300,\n width: fixedWidth,\n formatX,\n formatY,\n className,\n testId,\n}: Props) => {\n const { labels } = useHanui();\n const [containerRef, width] = useChartWidth(fixedWidth);\n const [hidden, setHidden] = useState<ReadonlySet<string>>(() => new Set());\n\n const full = useMemo(() => fullNumber(labels?.locale), [labels?.locale]);\n const compact = useMemo(() => compactNumber(labels?.locale), [labels?.locale]);\n const fx = formatX ?? full;\n const fy = formatY ?? full;\n\n const toned = useMemo(\n () => series.map((item, index) => ({ ...item, tone: toneAt(index, item.tone) })),\n [series],\n );\n\n /* Düz nokta listesi — x sırasıyla (klavye sırası soldan sağa). */\n const flat = useMemo(\n () =>\n toned\n .filter(item => !hidden.has(item.id))\n .flatMap(item =>\n item.data\n .filter(point => Number.isFinite(point.x) && Number.isFinite(point.y))\n .map(point => ({ ...point, series: item })),\n )\n .sort((a, b) => a.x - b.x || a.y - b.y),\n [toned, hidden],\n );\n\n const geometry = useMemo(() => {\n const xDomain = niceDomain(...extent(flat.map(point => point.x)));\n const yDomain = niceDomain(...extent(flat.map(point => point.y)));\n const yTicks = ticks(yDomain[0], yDomain[1], tickCount(height, false));\n const area = plotArea(width, height, yTicks.map(compact), { right: 20 });\n const x = scaleLinear(xDomain, [area.left, area.right]);\n const y = scaleLinear(yDomain, [area.bottom, area.top]);\n\n const sizes = finite(flat.map(point => point.size));\n const [sizeMin, sizeMax] = extent(sizes);\n const radius = (size?: number) =>\n size === undefined || !Number.isFinite(size) || sizes.length === 0\n ? RADIUS.plain\n : sizeMax === sizeMin\n ? (RADIUS.min + RADIUS.max) / 2\n : Math.sqrt(\n RADIUS.min ** 2 +\n ((size - sizeMin) / (sizeMax - sizeMin)) * (RADIUS.max ** 2 - RADIUS.min ** 2),\n );\n\n const placed = flat.map(point => ({\n ...point,\n cx: x(point.x),\n cy: y(point.y),\n r: radius(point.size),\n }));\n\n return {\n area,\n placed,\n index: spatialIndex(placed.map(point => ({ x: point.cx, y: point.cy }))),\n xTicks: ticks(xDomain[0], xDomain[1], tickCount(area.width, true)).map(value => ({\n position: x(value),\n label: compact(value),\n })),\n yTicks: yTicks.map(value => ({ position: y(value), label: compact(value) })),\n };\n }, [flat, width, height, compact]);\n\n const plot = useMemo(\n () => (\n <g>\n <ValueAxis area={geometry.area} ticks={geometry.yTicks} side=\"left\" hasGrid />\n <ValueAxis area={geometry.area} ticks={geometry.xTicks} side=\"bottom\" hasGrid />\n {geometry.placed.map((point, index) => (\n <circle\n key={index}\n className={styles.point}\n cx={point.cx}\n cy={point.cy}\n r={point.r}\n style={{\n fill: `color-mix(in srgb, ${toneColor(point.series.tone)} 72%, transparent)`,\n stroke: toneColor(point.series.tone),\n }}\n />\n ))}\n </g>\n ),\n [geometry],\n );\n\n const pick = useCallback(\n (px: number, py: number) => geometry.index.nearest(px, py, HIT_RADIUS),\n [geometry],\n );\n\n const describe = (index: number) => {\n const point = geometry.placed[index];\n return {\n title: point.label ?? point.series.label,\n rows: [\n { id: 'series', label: point.series.label, value: '', tone: point.series.tone },\n { id: 'x', label: xLabel, value: fx(point.x) },\n { id: 'y', label: yLabel, value: fy(point.y) },\n ...(point.size !== undefined && sizeLabel\n ? [{ id: 'size', label: sizeLabel, value: full(point.size) }]\n : []),\n ],\n };\n };\n\n return (\n <ChartFrame\n label={label}\n description={description}\n containerRef={containerRef}\n width={width}\n height={height}\n plot={plot}\n overlay={index => {\n const point = geometry.placed[index];\n return (\n <circle\n className={styles.marker}\n cx={point.cx}\n cy={point.cy}\n r={point.r + 3}\n style={{ stroke: toneColor(point.series.tone) }}\n />\n );\n }}\n itemCount={geometry.placed.length}\n pick={pick}\n tooltip={describe}\n anchor={index => ({ x: geometry.placed[index].cx, y: geometry.placed[index].cy })}\n announce={index => {\n const point = geometry.placed[index];\n return `${point.label ? `${point.label}, ` : ''}${point.series.label}: ${xLabel} ${fx(point.x)}, ${yLabel} ${fy(point.y)}`;\n }}\n table={{\n columns: [label, xLabel, yLabel],\n rows: flat.map(point => [point.label ?? point.series.label, fx(point.x), fy(point.y)]),\n }}\n legend={{\n entries: toned.map(item => ({ id: item.id, label: item.label, tone: item.tone })),\n hidden,\n onToggle: id =>\n setHidden(current => {\n const next = new Set(current);\n if (next.has(id)) next.delete(id);\n else if (toned.length - current.size > 1) next.add(id);\n return next;\n }),\n }}\n className={className}\n testId={testId}\n />\n );\n};\n\nexport default /*#__PURE__*/ memo(\n /*#__PURE__*/ named(ScatterPlot, 'ScatterPlot'),\n) as typeof ScatterPlot;\n","'use client';\n\nimport { memo, useCallback, useId, useMemo } from 'react';\n\nimport { useHanui } from '@ahmetilhn/hanui';\n\nimport { named } from '../../helpers/component.helper';\nimport { fitLabel, labelWidth, thinTicks } from '../core/axes';\nimport ChartFrame from '../core/ChartFrame';\nimport { fullNumber, type ValueFormat } from '../core/format';\nimport { type ChartTone, toneColor } from '../core/palette';\nimport { scaleBand } from '../core/scale';\nimport { extent, finite } from '../core/stats';\nimport useChartWidth from '../core/useChartWidth';\n\nimport styles from './index.module.scss';\n\ntype Props = {\n label: string;\n description?: string;\n /** Sütun adları (x). */\n columns: readonly string[];\n /** Satır adları (y). */\n rows: readonly string[];\n /** `values[satır][sütun]`; `null` boş hücre (veri yok — sıfır değil). */\n values: readonly (readonly (number | null)[])[];\n /** Hücre değerinin adı (\"Sipariş\"). */\n valueLabel: string;\n tone?: ChartTone;\n height?: number;\n width?: number;\n formatValue?: ValueFormat;\n className?: string;\n testId?: string;\n};\n\n/** Renk yoğunluğu: en küçük değer %8, en büyük %100 — en açık hücre bile zeminden ayrışır. */\nconst MIN_MIX = 8;\nconst LEGEND_HEIGHT = 28;\n/** Renk ölçeği çubuğunun boyu (px). */\nconst SCALE_WIDTH = 140;\n\n/** Hücrenin değeri; eksik ya da sonlu olmayan değer `null` (boş hücre, sıfır değil). */\nconst valueAt = (values: Props['values'], row: number, column: number): number | null => {\n const value = values[row]?.[column];\n return typeof value === 'number' && Number.isFinite(value) ? value : null;\n};\n\n/** Bant ölçeği DİZİNLE anahtarlanır: aynı adı taşıyan iki satır tek banda çökmesin. */\nconst indices = (labels: readonly string[]) => labels.map((_, index) => String(index));\n\n/**\n * Isı haritası — iki kategorik boyutta bir değerin yoğunluğu. Renk TEK TONUN yoğunluğu\n * (sıralı ölçek): çok renkli bir ölçek düşük-yüksek sırasını okutmuyordu.\n * Değer renk tek başına okunmaz: ipucu, duyuru ve veri tablosu sayıyı söyler.\n *\n * Klavye: `←`/`→` sütun · `↑`/`↓` satır · `Home`/`End` ilk/son hücre · `Escape`.\n */\nconst Heatmap = ({\n label,\n description,\n columns,\n rows,\n values,\n valueLabel,\n tone = 'cat-1',\n height = 280,\n width: fixedWidth,\n formatValue,\n className,\n testId,\n}: Props) => {\n const { labels } = useHanui();\n const [containerRef, width] = useChartWidth(fixedWidth);\n const full = useMemo(() => fullNumber(labels?.locale), [labels?.locale]);\n const fv = formatValue ?? full;\n /* Bir sayfada iki ısı haritası aynı `id`yi taşımasın. */\n const gradientId = `hanui-heat-${useId().replace(/:/g, '')}`;\n\n const geometry = useMemo(() => {\n const left = Math.min(width * 0.3, Math.max(32, ...rows.map(labelWidth)) + 12);\n const area = { left, top: 8, right: width - 8, bottom: height - 28 - LEGEND_HEIGHT };\n const x = scaleBand(indices(columns), [area.left, area.right], {\n paddingInner: 0.06,\n paddingOuter: 0,\n });\n const y = scaleBand(indices(rows), [area.top, area.bottom], {\n paddingInner: 0.06,\n paddingOuter: 0,\n });\n const [min, max] = extent(finite(values.flat()));\n\n const mix = (value: number | null) =>\n value === null\n ? null\n : max === min\n ? 60\n : MIN_MIX + ((value - min) / (max - min)) * (100 - MIN_MIX);\n\n const cells = rows.flatMap((row, rowIndex) =>\n columns.map((column, columnIndex) => {\n const value = valueAt(values, rowIndex, columnIndex);\n return {\n row,\n column,\n key: `${rowIndex}:${columnIndex}`,\n value,\n x: x(String(columnIndex)),\n y: y(String(rowIndex)),\n width: x.bandwidth,\n height: y.bandwidth,\n mix: mix(value),\n };\n }),\n );\n\n return { area, x, y, cells, min, max };\n }, [columns, rows, values, width, height]);\n\n const color = toneColor(tone);\n\n const plot = useMemo(() => {\n const { area, x, y, cells } = geometry;\n const maxText = fv(geometry.max);\n const scaleRight = area.right - labelWidth(maxText) - 8;\n const columnTicks = thinTicks(\n columns.map((column, index) => ({\n position: x(String(index)) + x.bandwidth / 2,\n label: column,\n })),\n );\n\n return (\n <g>\n {cells.map(cell => (\n <rect\n key={cell.key}\n className={cell.mix === null ? styles.empty : undefined}\n x={cell.x}\n y={cell.y}\n width={cell.width}\n height={cell.height}\n rx={2}\n style={\n cell.mix === null\n ? undefined\n : { fill: `color-mix(in srgb, ${color} ${cell.mix}%, var(--hanui-surface))` }\n }\n />\n ))}\n <g aria-hidden className={styles.labels}>\n {rows.map((row, rowIndex) => (\n <text\n key={rowIndex}\n x={area.left - 8}\n y={y(String(rowIndex)) + y.bandwidth / 2}\n dy=\"0.32em\"\n textAnchor=\"end\"\n >\n {fitLabel(row, area.left - 12)}\n </text>\n ))}\n {columnTicks.map(tick => (\n <text key={tick.position} x={tick.position} y={area.bottom + 16} textAnchor=\"middle\">\n {tick.label}\n </text>\n ))}\n </g>\n {/* Renk ölçeği: en küçük → en büyük. */}\n <defs>\n <linearGradient id={gradientId}>\n <stop\n offset=\"0%\"\n style={{\n stopColor: `color-mix(in srgb, ${color} ${MIN_MIX}%, var(--hanui-surface))`,\n }}\n />\n <stop offset=\"100%\" style={{ stopColor: color }} />\n </linearGradient>\n </defs>\n {/* `en küçük ▬▬▬ en büyük` tek satırda; çubuk en büyük değerin yazısı kadar içeri çekilir. */}\n <g aria-hidden className={styles.labels}>\n <rect\n x={scaleRight - SCALE_WIDTH}\n y={height - 18}\n width={SCALE_WIDTH}\n height={8}\n rx={4}\n style={{ fill: `url(#${gradientId})` }}\n />\n <text x={scaleRight - SCALE_WIDTH - 8} y={height - 14} dy=\"0.32em\" textAnchor=\"end\">\n {fv(geometry.min)}\n </text>\n <text x={area.right} y={height - 14} dy=\"0.32em\" textAnchor=\"end\">\n {maxText}\n </text>\n </g>\n </g>\n );\n }, [geometry, columns, rows, color, gradientId, height, fv]);\n\n const pick = useCallback(\n (px: number, py: number) => {\n const { area, x, y } = geometry;\n if (px < area.left || px > area.right || py < area.top || py > area.bottom) return null;\n const column = x.indexAt(px);\n const row = y.indexAt(py);\n return column < 0 || row < 0 ? null : row * columns.length + column;\n },\n [geometry, columns.length],\n );\n\n const text = (index: number) => {\n const cell = geometry.cells[index];\n return { cell, value: cell.value === null ? '—' : fv(cell.value) };\n };\n\n return (\n <ChartFrame\n label={label}\n description={description}\n containerRef={containerRef}\n width={width}\n height={height}\n plot={plot}\n overlay={index => {\n const cell = geometry.cells[index];\n return (\n <rect\n className={styles.focus}\n x={cell.x - 1}\n y={cell.y - 1}\n width={cell.width + 2}\n height={cell.height + 2}\n rx={3}\n />\n );\n }}\n itemCount={geometry.cells.length}\n columns={columns.length}\n pick={pick}\n tooltip={index => {\n const { cell, value } = text(index);\n return {\n title: `${cell.row} · ${cell.column}`,\n rows: [{ id: 'value', label: valueLabel, value, tone }],\n };\n }}\n anchor={index => {\n const cell = geometry.cells[index];\n return { x: cell.x + cell.width / 2, y: cell.y + cell.height / 2 };\n }}\n announce={index => {\n const { cell, value } = text(index);\n return `${cell.row}, ${cell.column}: ${valueLabel} ${value}`;\n }}\n table={{\n columns: [label, ...columns],\n rows: rows.map((row, rowIndex) => [\n row,\n ...columns.map((_, columnIndex) => {\n const value = valueAt(values, rowIndex, columnIndex);\n return value === null ? '—' : fv(value);\n }),\n ]),\n }}\n className={className}\n testId={testId}\n />\n );\n};\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(Heatmap, 'Heatmap')) as typeof Heatmap;\n","'use client';\n\nimport { memo, useCallback, useMemo } from 'react';\n\nimport { useHanui } from '@ahmetilhn/hanui';\n\nimport { named } from '../../helpers/component.helper';\nimport { CategoryAxis, ValueAxis } from '../core/axes';\nimport ChartFrame from '../core/ChartFrame';\nimport { compactNumber, fullNumber, type ValueFormat } from '../core/format';\nimport { plotArea, tickCount } from '../core/margins';\nimport { type ChartTone, toneAt, toneColor } from '../core/palette';\nimport { niceDomain, scaleBand, scaleLinear, ticks } from '../core/scale';\nimport { type BoxStats, boxStats, extent } from '../core/stats';\nimport useChartWidth from '../core/useChartWidth';\n\nimport styles from './index.module.scss';\n\nexport type BoxPlotGroup = {\n id: string;\n label: string;\n /** Ham gözlemler — beş sayı özeti ve aykırılar bileşende hesaplanır (Tukey, 1,5 × IQR). */\n values: readonly number[];\n tone?: ChartTone;\n};\n\n/** Özetin okunan adları — metin kütüphaneden gelmez. */\nexport type BoxPlotLabels = {\n min: string;\n q1: string;\n median: string;\n q3: string;\n max: string;\n outliers: string;\n count: string;\n};\n\ntype Props = {\n label: string;\n description?: string;\n groups: readonly BoxPlotGroup[];\n /** Grup ekseninin ve tablonun ilk sütun başlığı. */\n groupLabel: string;\n labels: BoxPlotLabels;\n height?: number;\n width?: number;\n formatValue?: ValueFormat;\n className?: string;\n testId?: string;\n};\n\n/**\n * 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\n * içindeki en uç gözlem, dışarıdakiler nokta (aykırı).\n * ⚠ Bıyık ucu bir HESAP değil bir GÖZLEM: Q3 + 1,5 × IQR'ye kadar çizmek, verinin hiç ulaşmadığı\n * bir değeri gösterirdi.\n *\n * Klavye: `←`/`→` önceki/sonraki grup · `Home`/`End` · `Escape`.\n */\nconst BoxPlot = ({\n label,\n description,\n groups,\n groupLabel,\n labels: summaryLabels,\n height = 280,\n width: fixedWidth,\n formatValue,\n className,\n testId,\n}: Props) => {\n const { labels } = useHanui();\n const [containerRef, width] = useChartWidth(fixedWidth);\n const full = useMemo(() => fullNumber(labels?.locale), [labels?.locale]);\n const compact = useMemo(() => compactNumber(labels?.locale), [labels?.locale]);\n const fv = formatValue ?? full;\n\n const stats = useMemo(\n () =>\n groups.map((group, index) => ({\n group,\n tone: toneAt(index, group.tone),\n stats: boxStats(group.values),\n })),\n [groups],\n );\n\n const geometry = useMemo(() => {\n const all = stats.flatMap(item => (item.stats ? [item.stats.min, item.stats.max] : []));\n const [low, high] = all.length ? extent(all) : [0, 1];\n const yDomain = niceDomain(low, high);\n const yTicks = ticks(yDomain[0], yDomain[1], tickCount(height, false));\n const area = plotArea(width, height, yTicks.map(compact));\n const band = scaleBand(\n groups.map(group => group.id),\n [area.left, area.right],\n { paddingInner: 0.4, paddingOuter: 0.2 },\n );\n const y = scaleLinear(yDomain, [area.bottom, area.top]);\n\n return {\n area,\n band,\n y,\n yTicks: yTicks.map(value => ({ position: y(value), label: compact(value) })),\n groupTicks: groups.map(group => ({\n position: band(group.id) + band.bandwidth / 2,\n label: group.label,\n })),\n };\n }, [stats, groups, width, height, compact]);\n\n const summary = (value: BoxStats) => [\n { id: 'max', label: summaryLabels.max, value: fv(value.whiskerHigh) },\n { id: 'q3', label: summaryLabels.q3, value: fv(value.q3) },\n { id: 'median', label: summaryLabels.median, value: fv(value.median) },\n { id: 'q1', label: summaryLabels.q1, value: fv(value.q1) },\n { id: 'min', label: summaryLabels.min, value: fv(value.whiskerLow) },\n ...(value.outliers.length > 0\n ? [{ id: 'outliers', label: summaryLabels.outliers, value: full(value.outliers.length) }]\n : []),\n { id: 'count', label: summaryLabels.count, value: full(value.count) },\n ];\n\n const plot = useMemo(() => {\n const { area, band, y } = geometry;\n\n return (\n <g>\n <ValueAxis area={area} ticks={geometry.yTicks} side=\"left\" hasGrid />\n <CategoryAxis area={area} ticks={geometry.groupTicks} side=\"bottom\" />\n {stats.map(({ group, tone, stats: value }) => {\n if (!value) return null;\n const left = band(group.id);\n const center = left + band.bandwidth / 2;\n const cap = band.bandwidth * 0.3;\n const color = toneColor(tone);\n\n return (\n <g key={group.id} style={{ stroke: color }} className={styles.box}>\n <line x1={center} x2={center} y1={y(value.whiskerHigh)} y2={y(value.q3)} />\n <line x1={center} x2={center} y1={y(value.q1)} y2={y(value.whiskerLow)} />\n <line\n x1={center - cap}\n x2={center + cap}\n y1={y(value.whiskerHigh)}\n y2={y(value.whiskerHigh)}\n />\n <line\n x1={center - cap}\n x2={center + cap}\n y1={y(value.whiskerLow)}\n y2={y(value.whiskerLow)}\n />\n <rect\n x={left}\n width={band.bandwidth}\n y={y(value.q3)}\n height={Math.max(1, y(value.q1) - y(value.q3))}\n rx={2}\n style={{ fill: `color-mix(in srgb, ${color} 22%, transparent)` }}\n />\n <line\n className={styles.median}\n x1={left}\n x2={left + band.bandwidth}\n y1={y(value.median)}\n y2={y(value.median)}\n />\n {value.outliers.map((outlier, index) => (\n <circle key={index} className={styles.outlier} cx={center} cy={y(outlier)} r={3} />\n ))}\n </g>\n );\n })}\n </g>\n );\n }, [geometry, stats]);\n\n const pick = useCallback(\n (px: number, py: number) => {\n const { area, band } = geometry;\n if (px < area.left || px > area.right || py < area.top - 4 || py > area.bottom + 4)\n return null;\n const index = band.indexAt(px);\n return index < 0 ? null : index;\n },\n [geometry],\n );\n\n return (\n <ChartFrame\n label={label}\n description={description}\n containerRef={containerRef}\n width={width}\n height={height}\n plot={plot}\n underlay={index => {\n const { area, band } = geometry;\n const pad = band.step * 0.2;\n return (\n <rect\n className={styles.band}\n x={band(groups[index].id) - pad}\n width={band.bandwidth + pad * 2}\n y={area.top}\n height={area.height}\n />\n );\n }}\n overlay={() => null}\n itemCount={groups.length}\n pick={pick}\n tooltip={index => {\n const item = stats[index];\n return {\n title: item.group.label,\n rows: item.stats\n ? summary(item.stats).map(row => ({\n ...row,\n tone: row.id === 'median' ? item.tone : undefined,\n }))\n : [],\n };\n }}\n anchor={index => {\n const item = stats[index];\n const { band, y } = geometry;\n return {\n x: band(item.group.id) + band.bandwidth / 2,\n y: item.stats ? y(item.stats.q3) : geometry.area.bottom,\n };\n }}\n announce={index => {\n const item = stats[index];\n return item.stats\n ? `${item.group.label}: ${summary(item.stats)\n .map(row => `${row.label} ${row.value}`)\n .join(', ')}`\n : item.group.label;\n }}\n table={{\n columns: [\n groupLabel,\n summaryLabels.min,\n summaryLabels.q1,\n summaryLabels.median,\n summaryLabels.q3,\n summaryLabels.max,\n summaryLabels.count,\n ],\n rows: stats.map(({ group, stats: value }) =>\n value\n ? [\n group.label,\n fv(value.whiskerLow),\n fv(value.q1),\n fv(value.median),\n fv(value.q3),\n fv(value.whiskerHigh),\n full(value.count),\n ]\n : [group.label, '—', '—', '—', '—', '—', '0'],\n ),\n }}\n className={className}\n testId={testId}\n />\n );\n};\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(BoxPlot, 'BoxPlot')) as typeof BoxPlot;\n","'use client';\n\nimport { memo, useCallback, useMemo } from 'react';\n\nimport { useHanui } from '@ahmetilhn/hanui';\n\nimport { named } from '../../helpers/component.helper';\nimport { ValueAxis } from '../core/axes';\nimport ChartFrame from '../core/ChartFrame';\nimport { compactNumber, fullNumber, type ValueFormat } from '../core/format';\nimport { plotArea, tickCount } from '../core/margins';\nimport { type ChartTone, toneColor } from '../core/palette';\nimport { niceDomain, scaleLinear, ticks } from '../core/scale';\nimport { histogram } from '../core/stats';\nimport useChartWidth from '../core/useChartWidth';\n\nimport styles from './index.module.scss';\n\ntype Props = {\n label: string;\n description?: string;\n /** Ham gözlemler; bölmeleri bileşen hesaplar. Sonlu olmayan değerler atılır. */\n values: readonly number[];\n /** Hedef bölme sayısı; verilmezse Sturges. Sınırlar \"güzel\" adıma oturur, sayı yaklaşık. */\n bins?: number;\n /** Değişkenin adı (x ekseni, tablo). */\n valueLabel: string;\n /** Sıklığın adı (\"Sipariş sayısı\"). */\n countLabel: string;\n tone?: ChartTone;\n height?: number;\n width?: number;\n formatValue?: ValueFormat;\n className?: string;\n testId?: string;\n};\n\n/** İki komşu sütun arası (px) — bölmeler ayrı okunur, sürekli dağılım izlenimi bozulmaz. */\nconst GAP = 1;\n\n/**\n * Histogram — tek değişkenin dağılımı. x ekseni SÜREKLİ (bölme sınırları), sütunlar bitişik.\n * Bölme: `[alt, üst)`, son bölme üst ucu DAHİL eder (en büyük değer dışarıda kalmaz).\n *\n * Klavye: `←`/`→` önceki/sonraki bölme · `Home`/`End` · `Escape`.\n */\nconst Histogram = ({\n label,\n description,\n values,\n bins: binCount,\n valueLabel,\n countLabel,\n tone = 'cat-1',\n height = 260,\n width: fixedWidth,\n formatValue,\n className,\n testId,\n}: Props) => {\n const { labels } = useHanui();\n const [containerRef, width] = useChartWidth(fixedWidth);\n const full = useMemo(() => fullNumber(labels?.locale), [labels?.locale]);\n const compact = useMemo(() => compactNumber(labels?.locale), [labels?.locale]);\n const fv = formatValue ?? full;\n\n const bins = useMemo(() => histogram(values, binCount), [values, binCount]);\n\n const geometry = useMemo(() => {\n const maxCount = Math.max(1, ...bins.map(bin => bin.count));\n const yDomain = niceDomain(0, maxCount);\n const yTicks = ticks(0, yDomain[1], tickCount(height, false)).filter(Number.isInteger);\n const area = plotArea(width, height, yTicks.map(compact));\n const lower = bins[0]?.from ?? 0;\n const upper = bins[bins.length - 1]?.to ?? 1;\n const x = scaleLinear([lower, upper], [area.left, area.right]);\n const y = scaleLinear(yDomain, [area.bottom, area.top]);\n\n return {\n area,\n columns: bins.map(bin => ({\n x: x(bin.from) + GAP / 2,\n width: Math.max(1, x(bin.to) - x(bin.from) - GAP),\n y: y(bin.count),\n height: Math.max(0, area.bottom - y(bin.count)),\n center: (x(bin.from) + x(bin.to)) / 2,\n })),\n xTicks: ticks(lower, upper, tickCount(area.width, true)).map(value => ({\n position: x(value),\n label: compact(value),\n })),\n yTicks: yTicks.map(value => ({ position: y(value), label: compact(value) })),\n };\n }, [bins, width, height, compact]);\n\n const range = (index: number) => `${fv(bins[index].from)} – ${fv(bins[index].to)}`;\n\n const plot = useMemo(\n () => (\n <g>\n <ValueAxis area={geometry.area} ticks={geometry.yTicks} side=\"left\" hasGrid />\n <ValueAxis area={geometry.area} ticks={geometry.xTicks} side=\"bottom\" />\n <line\n className={styles.baseline}\n x1={geometry.area.left}\n x2={geometry.area.right}\n y1={geometry.area.bottom}\n y2={geometry.area.bottom}\n />\n {geometry.columns.map((column, index) =>\n column.height > 0 ? (\n <rect\n key={index}\n x={column.x}\n y={column.y}\n width={column.width}\n height={column.height}\n style={{ fill: toneColor(tone) }}\n />\n ) : null,\n )}\n </g>\n ),\n [geometry, tone],\n );\n\n const pick = useCallback(\n (px: number, py: number) => {\n const { area, columns } = geometry;\n if (px < area.left || px > area.right || py < area.top - 4 || py > area.bottom + 4)\n return null;\n const index = columns.findIndex(\n column => px >= column.x - GAP && px <= column.x + column.width + GAP,\n );\n return index < 0 ? null : index;\n },\n [geometry],\n );\n\n return (\n <ChartFrame\n label={label}\n description={description}\n containerRef={containerRef}\n width={width}\n height={height}\n plot={plot}\n underlay={index => {\n const column = geometry.columns[index];\n return (\n <rect\n className={styles.band}\n x={column.x - GAP / 2}\n width={column.width + GAP}\n y={geometry.area.top}\n height={geometry.area.height}\n />\n );\n }}\n overlay={() => null}\n itemCount={bins.length}\n pick={pick}\n tooltip={index => ({\n title: range(index),\n rows: [{ id: 'count', label: countLabel, value: full(bins[index].count), tone }],\n })}\n anchor={index => ({ x: geometry.columns[index].center, y: geometry.columns[index].y })}\n announce={index => `${valueLabel} ${range(index)}: ${countLabel} ${full(bins[index].count)}`}\n table={{\n columns: [valueLabel, countLabel],\n rows: bins.map((bin, index) => [range(index), full(bin.count)]),\n }}\n className={className}\n testId={testId}\n />\n );\n};\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(Histogram, 'Histogram')) as typeof Histogram;\n","'use client';\n\nimport { memo, useCallback, useMemo, useState } from 'react';\n\nimport { useHanui } from '@ahmetilhn/hanui';\n\nimport { named } from '../../helpers/component.helper';\nimport { fitLabel, labelWidth } from '../core/axes';\nimport ChartFrame from '../core/ChartFrame';\nimport { compactNumber, fullNumber, type ValueFormat } from '../core/format';\nimport { type ChartTone, toneAt, toneColor } from '../core/palette';\nimport { polar, polygonPath } from '../core/path';\nimport { niceDomain, ticks as tickValues } from '../core/scale';\nimport useChartWidth from '../core/useChartWidth';\n\nimport styles from './index.module.scss';\n\nexport type RadarAxis = {\n key: string;\n label: string;\n};\n\nexport type RadarSeries = {\n id: string;\n label: string;\n /** Eksen anahtarı → değer. Eksik ya da `null` değer merkezde çizilir, ipucunda \"—\" okunur. */\n values: Readonly<Record<string, number | null | undefined>>;\n tone?: ChartTone;\n};\n\ntype Props = {\n label: string;\n description?: string;\n /** Saat 12'den saat yönünde dizilen eksenler. ⚠ Üçten az eksen bir alan çizmez. */\n axes: readonly RadarAxis[];\n series: readonly RadarSeries[];\n /**\n * Ortak ölçeğin üst ucu. Verilmezse en büyük değerden \"güzel\" bir sayıya yuvarlanır.\n * ⚠ Bütün eksenler AYNI ölçeği paylaşır: birimleri farklı eksenleri önce normalleştirin (0-100).\n */\n max?: number;\n height?: number;\n width?: number;\n formatValue?: ValueFormat;\n className?: string;\n testId?: string;\n};\n\n/** Eksen etiketinin çemberden uzaklığı (px). */\nconst LABEL_GAP = 10;\n/** Ölçek sayısının dikey payı (px): halkalar bundan sıkışıksa sayılar seyrelir. */\nconst RING_LABEL_HEIGHT = 16;\n/** İşaretçinin eksen etiketinin ötesinde hâlâ isabet sayıldığı pay (px). */\nconst PICK_SLACK = 28;\n\nconst valueOf = (series: RadarSeries, key: string): number | null => {\n const value = series.values[key];\n return typeof value === 'number' && Number.isFinite(value) ? value : null;\n};\n\n/**\n * Radar (örümcek) grafiği — birkaç serinin aynı eksen takımında karşılaştırılması. Izgara\n * ÇOKGEN (çember değil): değer eksen üzerinde okunur, eksenler arası eğri bir değer vaat etmez.\n *\n * Etkileşim EKSEN başınadır: işaretçi en yakın ekseni seçer ve ipucu o eksendeki bütün serileri\n * okur. Klavye: `←`/`→` önceki/sonraki eksen · `Home`/`End` · `Escape`.\n */\nconst RadarChart = ({\n label,\n description,\n axes,\n series,\n max,\n height = 320,\n width: fixedWidth,\n formatValue,\n className,\n testId,\n}: Props) => {\n const { labels } = useHanui();\n const [containerRef, width] = useChartWidth(fixedWidth);\n const [hidden, setHidden] = useState<ReadonlySet<string>>(() => new Set());\n const compact = useMemo(() => compactNumber(labels?.locale), [labels?.locale]);\n const full = useMemo(() => fullNumber(labels?.locale), [labels?.locale]);\n const fv = formatValue ?? full;\n\n const toned = useMemo(\n () => series.map((item, index) => ({ ...item, tone: toneAt(index, item.tone) })),\n [series],\n );\n const visible = useMemo(() => toned.filter(item => !hidden.has(item.id)), [toned, hidden]);\n\n const geometry = useMemo(() => {\n const count = axes.length;\n const step = count > 0 ? (Math.PI * 2) / count : 0;\n const angles = axes.map((_, index) => index * step);\n\n /*\n * Yarıçap: dikeyde bir satır etiket payı, yatayda en uzun YAN etiketin payı. Etiket sığmazsa\n * kısaltılır — yarıçap etiketler için sonsuza kadar küçülmez.\n */\n const widest = Math.min(width * 0.22, Math.max(0, ...axes.map(axis => labelWidth(axis.label))));\n const radius = Math.max(24, Math.min(height / 2 - 24, width / 2 - widest - LABEL_GAP - 4));\n const cx = width / 2;\n const cy = height / 2;\n\n let peak = 0;\n for (const item of series)\n for (const axis of axes) {\n const value = valueOf(item, axis.key);\n if (value !== null && value > peak) peak = value;\n }\n const top = max !== undefined && max > 0 ? max : niceDomain(0, peak, 4)[1];\n const rings = tickValues(0, top, 4).filter(value => value > 0);\n const scale = (value: number) => (Math.min(Math.max(value, 0), top) / top) * radius;\n\n return { cx, cy, radius, angles, step, top, rings, scale, labelRoom: widest };\n }, [axes, series, max, width, height]);\n\n const shapes = useMemo(() => {\n const { cx, cy, angles, scale } = geometry;\n return visible.map(item => ({\n ...item,\n points: axes.map((axis, index) => {\n const value = valueOf(item, axis.key);\n return { ...polar(cx, cy, scale(value ?? 0), angles[index]), value };\n }),\n }));\n }, [geometry, visible, axes]);\n\n const plot = useMemo(() => {\n const { cx, cy, radius, angles, rings, scale, labelRoom } = geometry;\n const ringGap = rings.length > 0 ? scale(rings[0]) : radius;\n const ringEvery = Math.max(1, Math.ceil(RING_LABEL_HEIGHT / Math.max(1, ringGap)));\n\n return (\n <g>\n <g aria-hidden className={styles.grid}>\n {rings.map(ring => (\n <path\n key={ring}\n d={polygonPath(angles.map(angle => polar(cx, cy, scale(ring), angle)))}\n />\n ))}\n {angles.map((angle, index) => {\n const end = polar(cx, cy, radius, angle);\n return <line key={axes[index].key} x1={cx} y1={cy} x2={end.x} y2={end.y} />;\n })}\n </g>\n\n {shapes.map(shape => (\n <path\n key={shape.id}\n className={styles.shape}\n d={polygonPath(shape.points)}\n style={{\n fill: `color-mix(in srgb, ${toneColor(shape.tone)} 14%, transparent)`,\n stroke: toneColor(shape.tone),\n }}\n />\n ))}\n\n <g aria-hidden className={styles.labels}>\n {/*\n * Ölçek sayısı halkanın İÇİNDE: dışarıda, tepedeki eksen adıyla çakışıyordu. Halkalar\n * yazıdan sıkışıksa (dar ekran) sayılar seyrelir; en dıştaki her zaman kalır.\n */}\n {rings.map((ring, index) =>\n (rings.length - 1 - index) % ringEvery === 0 ? (\n <text key={ring} x={cx + 4} y={cy - scale(ring)} dy=\"1.1em\">\n {compact(ring)}\n </text>\n ) : null,\n )}\n {axes.map((axis, index) => {\n const angle = angles[index];\n const point = polar(cx, cy, radius + LABEL_GAP, angle);\n const sin = Math.sin(angle);\n const cos = Math.cos(angle);\n const anchor = sin > 0.3 ? 'start' : sin < -0.3 ? 'end' : 'middle';\n /* Üstteki etiket çizginin ÜSTÜNE, alttaki ALTINA oturur. */\n const dy = cos > 0.3 ? '-0.2em' : cos < -0.3 ? '0.9em' : '0.32em';\n return (\n <text\n key={axis.key}\n className={styles.axisLabel}\n x={point.x}\n y={point.y}\n dy={dy}\n textAnchor={anchor}\n >\n {fitLabel(axis.label, anchor === 'middle' ? radius * 1.4 : labelRoom)}\n </text>\n );\n })}\n </g>\n </g>\n );\n }, [geometry, shapes, axes, compact]);\n\n const pick = useCallback(\n (px: number, py: number) => {\n const { cx, cy, radius, step } = geometry;\n if (axes.length === 0 || Math.hypot(px - cx, py - cy) > radius + PICK_SLACK) return null;\n\n let angle = Math.atan2(px - cx, -(py - cy));\n if (angle < 0) angle += Math.PI * 2;\n return Math.round(angle / step) % axes.length;\n },\n [geometry, axes.length],\n );\n\n const read = (index: number) =>\n shapes.map(shape => {\n const value = shape.points[index].value;\n return {\n id: shape.id,\n label: shape.label,\n value: value === null ? '—' : fv(value),\n tone: shape.tone,\n };\n });\n\n return (\n <ChartFrame\n label={label}\n description={description}\n containerRef={containerRef}\n width={width}\n height={height}\n plot={plot}\n overlay={index => {\n const { cx, cy, radius, angles } = geometry;\n const end = polar(cx, cy, radius, angles[index]);\n return (\n <g>\n <line className={styles.spoke} x1={cx} y1={cy} x2={end.x} y2={end.y} />\n {shapes.map(shape => {\n const point = shape.points[index];\n return point.value === null ? null : (\n <circle\n key={shape.id}\n className={styles.marker}\n cx={point.x}\n cy={point.y}\n r={4.5}\n style={{ fill: toneColor(shape.tone) }}\n />\n );\n })}\n </g>\n );\n }}\n itemCount={axes.length}\n pick={pick}\n tooltip={index => ({ title: axes[index].label, rows: read(index) })}\n anchor={index => {\n const { cx, cy, radius, angles } = geometry;\n /* Eksenin dış ucu değil en uzak serinin noktası: ipucu boş ızgaranın üstünde durmasın. */\n let reach = 0;\n for (const shape of shapes) {\n const point = shape.points[index];\n reach = Math.max(reach, Math.hypot(point.x - cx, point.y - cy));\n }\n return polar(cx, cy, Math.min(radius, reach), angles[index]);\n }}\n tooltipSide=\"outward\"\n announce={index =>\n `${axes[index].label}: ${read(index)\n .map(row => `${row.label} ${row.value}`)\n .join(', ')}`\n }\n table={{\n columns: [label, ...toned.map(item => item.label)],\n rows: axes.map(axis => [\n axis.label,\n ...toned.map(item => {\n const value = valueOf(item, axis.key);\n return value === null ? '—' : fv(value);\n }),\n ]),\n }}\n legend={\n toned.length > 1\n ? {\n entries: toned.map(item => ({ id: item.id, label: item.label, tone: item.tone })),\n hidden,\n onToggle: id =>\n setHidden(current => {\n const next = new Set(current);\n if (next.has(id)) next.delete(id);\n else if (toned.length - current.size > 1) next.add(id);\n return next;\n }),\n }\n : undefined\n }\n className={className}\n testId={testId}\n />\n );\n};\n\nexport default /*#__PURE__*/ memo(\n /*#__PURE__*/ named(RadarChart, 'RadarChart'),\n) as typeof RadarChart;\n"],"names":["named","component","displayName","CHAR_WIDTH","labelWidth","label","thinTicks","ticks","minGap","widest","tick","spacing","every","_","index","fitLabel","width","max","ValueAxis","area","side","hasGrid","jsx","styles","jsxs","CategoryAxis","Fragment","round","value","segments","points","result","current","point","linear","monotone","count","slopes","deltas","dx","alpha","beta","magnitude","tau","path","start","end","third","linePath","curve","part","areaPath","top","base","paths","upper","lower","flush","draw","back","floor","polar","cx","cy","radius","angle","arcPath","outer","inner","sweep","ring","sweepFlag","large","o0","o1","i1","i0","polygonPath","scaleLinear","domain","range","d0","d1","r0","r1","span","scale","pixel","scaleBand","paddingInner","paddingOuter","step","bandwidth","key","position","tickStep","min","raw","power","error","clean","decimals","niceDomain","low","high","pad","first","last","values","nearestIndex","sorted","middle","finite","extent","quantile","probability","fraction","boxStats","second","q1","q3","fence","inside","histogram","binCount","data","target","bins","toNumber","MARGIN","stack","rows","keys","positive","negative","row","cartesianGeometry","input","xKey","series","height","isStacked","formatX","hasBars","item","isHorizontal","xValues","isContinuous","stacks","axis","type","valueOf","domainFor","members","fixedMin","fixedMax","nice","leftDomain","rightDomain","hasRightAxis","leftLabels","linearTicks","rightLabels","categoryLabels","left","right","categoryRange","valueRange","leftScale","rightScale","scaleFor","centers","xScale","numeric","band","at","category","bars","barSeries","slots","slotGap","slotWidth","seriesIndex","slot","v0","v1","lines","areas","anchors","extreme","fallback","toTicks","format","categoryTicks","TONE_ORDER","toneAt","tone","toneColor","TOOLTIP_GAP","ChartFrame","description","containerRef","plot","overlay","underlay","itemCount","columns","pick","tooltip","anchor","tooltipSide","announce","table","legend","className","testId","descriptionId","useId","say","useAnnounce","active","setActive","useState","frame","useRef","tooltipRef","pending","useEffect","handlePointerMove","useCallback","event","box","move","next","clamped","handleKeyDown","content","pointX","useLayoutEffect","node","size","isRightHalf","prefersLeft","leftX","rightX","fitsLeft","fitsRight","x","entry","isHidden","LegendSwatch","column","cell","cellIndex","cache","formatter","locale","options","instance","compactNumber","fullNumber","FALLBACK_WIDTH","useIsomorphicLayoutEffect","useChartWidth","fixed","ref","setWidth","measure","rounded","observer","DEFAULT_HEIGHT","MISSING","CartesianChart","xLabel","fixedWidth","orientation","hasPoints","formatValue","labels","useHanui","hidden","setHidden","valueFormat","useMemo","axisFormat","formatXValue","toned","visible","geometry","order","center","a","b","y","_a","shape","bar","list","id","CartesianChart$1","memo","LineChart","rest","index$9","AreaChart","index$8","BarChart","index$7","ComposedChart","props","index$6","LIFT","SEPARATOR","PieChart","variant","centerValue","centerLabel","valueLabel","full","fv","slice","total","sum","slices","percent","share","px","py","distance","describe","shift","index$5","plotArea","bottom","tickCount","length","horizontal","spatialIndex","buckets","bucket","reach","best","bestDistance","dy","RADIUS","HIT_RADIUS","ScatterPlot","yLabel","sizeLabel","formatY","compact","fx","fy","flat","xDomain","yDomain","yTicks","sizes","sizeMin","sizeMax","placed","index$4","MIN_MIX","LEGEND_HEIGHT","SCALE_WIDTH","valueAt","indices","Heatmap","gradientId","mix","cells","rowIndex","columnIndex","color","maxText","scaleRight","columnTicks","text","index$3","BoxPlot","groups","groupLabel","summaryLabels","stats","group","all","summary","cap","outlier","index$2","GAP","Histogram","countLabel","maxCount","bin","_b","index$1","LABEL_GAP","RING_LABEL_HEIGHT","PICK_SLACK","RadarChart","axes","angles","peak","rings","tickValues","shapes","labelRoom","ringGap","ringEvery","sin","cos","read"],"mappings":";;;;AAYO,MAAMA,KAAQ,CACnBC,GACAC,MACe,OAAO,OAAOD,GAAW,EAAE,aAAAC,GAAa;;;;;GCJ5CC,KAAa,KAGbC,KAAa,CAACC,MAA0BA,EAAM,SAASF,IAMvDG,KAAY,CAACC,GAAwBC,IAAS,MAAc;AACvE,MAAID,EAAM,SAAS,EAAG,QAAO,CAAC,GAAGA,CAAK;AAEtC,QAAME,IAAS,KAAK,IAAI,GAAGF,EAAM,IAAI,CAAAG,MAAQN,GAAWM,EAAK,KAAK,CAAC,CAAC,GAC9DC,IAAU,KAAK,IAAIJ,EAAM,CAAC,EAAE,WAAWA,EAAM,CAAC,EAAE,QAAQ,GACxDK,IAAQD,KAAW,IAAI,IAAI,KAAK,IAAI,GAAG,KAAK,MAAMF,IAASD,KAAUG,CAAO,CAAC;AAEnF,SAAOJ,EAAM,OAAO,CAACM,GAAGC,MAAUA,IAAQF,MAAU,CAAC;AACvD,GAGaG,KAAW,CAACV,GAAeW,MAA0B;AAChE,QAAMC,IAAM,KAAK,IAAI,GAAG,KAAK,MAAMD,IAAQb,EAAU,CAAC;AACtD,SAAOE,EAAM,UAAUY,IAAMZ,IAAQ,GAAGA,EAAM,MAAM,GAAG,KAAK,IAAI,GAAGY,IAAM,CAAC,CAAC,CAAC;AAC9E,GAWaC,KAAY,CAAC,EAAE,MAAAC,GAAM,OAAAZ,GAAO,MAAAa,GAAM,SAAAC,IAAU,GAAA,MACvD,gBAAAC,EAAC,OAAE,WAAWC,GAAO,MAAM,eAAW,IACnC,UAAAhB,EAAM;AAAA,EAAI,CAAAG,MACTU,MAAS,WACP,gBAAAI,EAAC,KAAA,EACE,UAAA;AAAA,IAAAH,KACC,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWC,GAAO;AAAA,QAClB,IAAIb,EAAK;AAAA,QACT,IAAIA,EAAK;AAAA,QACT,IAAIS,EAAK;AAAA,QACT,IAAIA,EAAK;AAAA,MAAA;AAAA,IAAA;AAAA,IAGb,gBAAAG;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWC,GAAO;AAAA,QAClB,GAAGb,EAAK;AAAA,QACR,GAAGS,EAAK,SAAS;AAAA,QACjB,YAAW;AAAA,QAEV,UAAAT,EAAK;AAAA,MAAA;AAAA,IAAA;AAAA,EACR,EAAA,GAjBM,GAAGA,EAAK,QAAQ,IAAIA,EAAK,KAAK,EAkBtC,IAEA,gBAAAc,EAAC,KAAA,EACE,UAAA;AAAA,IAAAH,KACC,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWC,GAAO;AAAA,QAClB,IAAIJ,EAAK;AAAA,QACT,IAAIA,EAAK;AAAA,QACT,IAAIT,EAAK;AAAA,QACT,IAAIA,EAAK;AAAA,MAAA;AAAA,IAAA;AAAA,IAGb,gBAAAY;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAWC,GAAO;AAAA,QAClB,GAAGH,MAAS,SAASD,EAAK,OAAO,IAAIA,EAAK,QAAQ;AAAA,QAClD,GAAGT,EAAK;AAAA,QACR,IAAG;AAAA,QACH,YAAYU,MAAS,SAAS,QAAQ;AAAA,QAErC,UAAAV,EAAK;AAAA,MAAA;AAAA,IAAA;AAAA,EACR,EAAA,GAlBM,GAAGA,EAAK,QAAQ,IAAIA,EAAK,KAAK,EAmBtC;AAEJ,GACF,GAUWe,KAAe,CAAC,EAAE,MAAAN,GAAM,OAAAZ,GAAO,MAAAa,QAC1C,gBAAAE,EAAC,KAAA,EAAE,WAAWC,GAAO,MAAM,eAAW,IACnC,UAAAH,MAAS,WACR,gBAAAI,EAAAE,IAAA,EACE,UAAA;AAAA,EAAA,gBAAAJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC,GAAO;AAAA,MAClB,IAAIJ,EAAK;AAAA,MACT,IAAIA,EAAK;AAAA,MACT,IAAIA,EAAK;AAAA,MACT,IAAIA,EAAK;AAAA,IAAA;AAAA,EAAA;AAAA,EAEVb,GAAUC,CAAK,EAAE,IAAI,CAAAG,MACpB,gBAAAY;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,WAAWC,GAAO;AAAA,MAClB,GAAGb,EAAK;AAAA,MACR,GAAGS,EAAK,SAAS;AAAA,MACjB,YAAW;AAAA,MAEV,UAAAT,EAAK;AAAA,IAAA;AAAA,IAND,GAAGA,EAAK,QAAQ,IAAIA,EAAK,KAAK;AAAA,EAAA,CAQtC;AAAA,EAAA,CACH,IAEA,gBAAAc,EAAAE,IAAA,EACE,UAAA;AAAA,EAAA,gBAAAJ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC,GAAO;AAAA,MAClB,IAAIJ,EAAK;AAAA,MACT,IAAIA,EAAK;AAAA,MACT,IAAIA,EAAK;AAAA,MACT,IAAIA,EAAK;AAAA,IAAA;AAAA,EAAA;AAAA,EAEVZ,EAAM,IAAI,CAAAG,MACT,gBAAAY;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,WAAWC,GAAO;AAAA,MAClB,GAAGJ,EAAK,OAAO;AAAA,MACf,GAAGT,EAAK;AAAA,MACR,IAAG;AAAA,MACH,YAAW;AAAA,MAEV,UAAAK,GAASL,EAAK,OAAOS,EAAK,OAAO,EAAE;AAAA,IAAA;AAAA,IAP/B,GAAGT,EAAK,QAAQ,IAAIA,EAAK,KAAK;AAAA,EAAA,CAStC;AAAA,EAAA,CACH,EAAA,CAEJ,GC/IIiB,IAAQ,CAACC,MAA0B,KAAK,MAAMA,IAAQ,GAAG,IAAI,KAK7DC,KAAW,CAACC,MAA6C;AAC7D,QAAMC,IAAoB,CAAA;AAC1B,MAAIC,IAAmB,CAAA;AAEvB,aAAWC,KAASH;AAClB,IAAIG,MAAU,QAAQ,CAAC,OAAO,SAASA,EAAM,CAAC,KAAK,CAAC,OAAO,SAASA,EAAM,CAAC,KACrED,EAAQ,SAAS,KAAGD,EAAO,KAAKC,CAAO,GAC3CA,IAAU,CAAA,KACLA,EAAQ,KAAKC,CAAK;AAG3B,SAAID,EAAQ,SAAS,KAAGD,EAAO,KAAKC,CAAO,GACpCD;AACT,GAGMG,KAAS,CAACJ,MACdA,EACG,IAAI,CAACG,GAAOnB,MAAU,GAAGA,MAAU,IAAI,MAAM,GAAG,GAAGa,EAAMM,EAAM,CAAC,CAAC,IAAIN,EAAMM,EAAM,CAAC,CAAC,EAAE,EACrF,KAAK,EAAE,GAONE,KAAW,CAACL,MAAqC;AACrD,QAAMM,IAAQN,EAAO;AACrB,MAAIM,IAAQ,EAAG,QAAOF,GAAOJ,CAAM;AAEnC,QAAMO,IAAmB,CAAA,GACnBC,IAAmB,CAAA;AAEzB,WAASxB,IAAQ,GAAGA,IAAQsB,IAAQ,GAAGtB,KAAS,GAAG;AACjD,UAAMyB,IAAKT,EAAOhB,IAAQ,CAAC,EAAE,IAAIgB,EAAOhB,CAAK,EAAE;AAC/C,IAAAwB,EAAO,KAAKC,MAAO,IAAI,KAAKT,EAAOhB,IAAQ,CAAC,EAAE,IAAIgB,EAAOhB,CAAK,EAAE,KAAKyB,CAAE;AAAA,EACzE;AAEA,EAAAF,EAAO,KAAKC,EAAO,CAAC,CAAC;AACrB,WAASxB,IAAQ,GAAGA,IAAQsB,IAAQ,GAAGtB,KAAS;AAC9C,IAAAuB,EAAO;AAAA,MACLC,EAAOxB,IAAQ,CAAC,IAAIwB,EAAOxB,CAAK,KAAK,IAAI,KAAKwB,EAAOxB,IAAQ,CAAC,IAAIwB,EAAOxB,CAAK,KAAK;AAAA,IAAA;AAEvF,EAAAuB,EAAO,KAAKC,EAAOF,IAAQ,CAAC,CAAC;AAE7B,WAAStB,IAAQ,GAAGA,IAAQsB,IAAQ,GAAGtB,KAAS,GAAG;AACjD,QAAIwB,EAAOxB,CAAK,MAAM,GAAG;AACvB,MAAAuB,EAAOvB,CAAK,IAAI,GAChBuB,EAAOvB,IAAQ,CAAC,IAAI;AACpB;AAAA,IACF;AAEA,UAAM0B,IAAQH,EAAOvB,CAAK,IAAIwB,EAAOxB,CAAK,GACpC2B,IAAOJ,EAAOvB,IAAQ,CAAC,IAAIwB,EAAOxB,CAAK,GACvC4B,IAAYF,IAAQA,IAAQC,IAAOA;AAEzC,QAAIC,IAAY,GAAG;AACjB,YAAMC,IAAM,IAAI,KAAK,KAAKD,CAAS;AACnC,MAAAL,EAAOvB,CAAK,IAAI6B,IAAMH,IAAQF,EAAOxB,CAAK,GAC1CuB,EAAOvB,IAAQ,CAAC,IAAI6B,IAAMF,IAAOH,EAAOxB,CAAK;AAAA,IAC/C;AAAA,EACF;AAEA,MAAI8B,IAAO,IAAIjB,EAAMG,EAAO,CAAC,EAAE,CAAC,CAAC,IAAIH,EAAMG,EAAO,CAAC,EAAE,CAAC,CAAC;AAEvD,WAAShB,IAAQ,GAAGA,IAAQsB,IAAQ,GAAGtB,KAAS,GAAG;AACjD,UAAM+B,IAAQf,EAAOhB,CAAK,GACpBgC,IAAMhB,EAAOhB,IAAQ,CAAC,GACtBiC,KAASD,EAAI,IAAID,EAAM,KAAK;AAElC,IAAAD,KACE,IAAIjB,EAAMkB,EAAM,IAAIE,CAAK,CAAC,IAAIpB,EAAMkB,EAAM,IAAIR,EAAOvB,CAAK,IAAIiC,CAAK,CAAC,IACjEpB,EAAMmB,EAAI,IAAIC,CAAK,CAAC,IAAIpB,EAAMmB,EAAI,IAAIT,EAAOvB,IAAQ,CAAC,IAAIiC,CAAK,CAAC,IAChEpB,EAAMmB,EAAI,CAAC,CAAC,IAAInB,EAAMmB,EAAI,CAAC,CAAC;AAAA,EACnC;AAEA,SAAOF;AACT,GAKaI,KAAW,CAAClB,GAA+BmB,IAAe,aACrEpB,GAASC,CAAM,EACZ,IAAI,CAAAoB,MAASD,MAAU,aAAad,GAASe,CAAI,IAAIhB,GAAOgB,CAAI,CAAE,EAClE,KAAK,EAAE,GAMCC,KAAW,CACtBC,GACAC,GACAJ,IAAe,aACJ;AACX,QAAMK,IAAkB,CAAA;AACxB,MAAIC,IAAiB,CAAA,GACjBC,IAAiB,CAAA;AAErB,QAAMC,IAAQ,MAAM;AAClB,QAAIF,EAAM,SAAS,GAAG;AACpB,YAAMG,IAAOT,MAAU,aAAad,KAAWD,IACzCyB,IAAOD,EAAK,CAAC,GAAGF,CAAK,EAAE,QAAA,CAAS,EAAE,QAAQ,MAAM,GAAG;AACzD,MAAAF,EAAM,KAAK,GAAGI,EAAKH,CAAK,CAAC,GAAGI,CAAI,GAAG;AAAA,IACrC;AACA,IAAAJ,IAAQ,CAAA,GACRC,IAAQ,CAAA;AAAA,EACV;AAEA,SAAAJ,EAAI,QAAQ,CAACnB,GAAOnB,MAAU;AAC5B,UAAM8C,IAAQP,EAAKvC,CAAK;AACxB,IAAImB,MAAU,QAAQ2B,MAAU,QAAQA,MAAU,SAAWH,EAAA,KAE3DF,EAAM,KAAKtB,CAAK,GAChBuB,EAAM,KAAKI,CAAK;AAAA,EAEpB,CAAC,GACDH,EAAA,GAEOH,EAAM,KAAK,EAAE;AACtB,GAGaO,KAAQ,CAACC,GAAYC,GAAYC,GAAgBC,OAA0B;AAAA,EACtF,GAAGH,IAAKE,IAAS,KAAK,IAAIC,CAAK;AAAA,EAC/B,GAAGF,IAAKC,IAAS,KAAK,IAAIC,CAAK;AACjC,IAMaC,KAAU,CACrBJ,GACAC,GACAI,GACAC,GACAvB,GACAC,MACW;AACX,QAAMuB,IAAQvB,IAAMD;AACpB,MAAIwB,KAAS,KAAKF,KAAS,EAAG,QAAO;AAErC,MAAIE,KAAS,KAAK,KAAK,IAAI,MAAM;AAK/B,UAAMC,IAAO,CAACN,GAAgBO,MAC5B,IAAI5C,EAAMmC,CAAE,CAAC,IAAInC,EAAMoC,IAAKC,CAAM,CAAC,IAC/BA,CAAM,IAAIA,CAAM,QAAQO,CAAS,IAAI5C,EAAMmC,CAAE,CAAC,IAAInC,EAAMoC,IAAKC,CAAM,CAAC,IACpEA,CAAM,IAAIA,CAAM,QAAQO,CAAS,IAAI5C,EAAMmC,CAAE,CAAC,IAAInC,EAAMoC,IAAKC,CAAM,CAAC;AAE1E,WAAOM,EAAKH,GAAO,CAAC,KAAKC,IAAQ,IAAIE,EAAKF,GAAO,CAAC,IAAI;AAAA,EACxD;AAEA,QAAMI,IAAQH,IAAQ,KAAK,KAAK,IAAI,GAC9BI,IAAKZ,GAAMC,GAAIC,GAAII,GAAOtB,CAAK,GAC/B6B,IAAKb,GAAMC,GAAIC,GAAII,GAAOrB,CAAG;AAEnC,MAAIsB,KAAS;AACX,WAAO,IAAIzC,EAAMmC,CAAE,CAAC,IAAInC,EAAMoC,CAAE,CAAC,IAAIpC,EAAM8C,EAAG,CAAC,CAAC,IAAI9C,EAAM8C,EAAG,CAAC,CAAC,IAAIN,CAAK,IAAIA,CAAK,MAAMK,CAAK,MAAM7C,EAAM+C,EAAG,CAAC,CAAC,IAAI/C,EAAM+C,EAAG,CAAC,CAAC;AAE9H,QAAMC,IAAKd,GAAMC,GAAIC,GAAIK,GAAOtB,CAAG,GAC7B8B,IAAKf,GAAMC,GAAIC,GAAIK,GAAOvB,CAAK;AAErC,SACE,IAAIlB,EAAM8C,EAAG,CAAC,CAAC,IAAI9C,EAAM8C,EAAG,CAAC,CAAC,IAAIN,CAAK,IAAIA,CAAK,MAAMK,CAAK,MAAM7C,EAAM+C,EAAG,CAAC,CAAC,IAAI/C,EAAM+C,EAAG,CAAC,CAAC,IACvF/C,EAAMgD,EAAG,CAAC,CAAC,IAAIhD,EAAMgD,EAAG,CAAC,CAAC,IAAIP,CAAK,IAAIA,CAAK,MAAMI,CAAK,MAAM7C,EAAMiD,EAAG,CAAC,CAAC,IAAIjD,EAAMiD,EAAG,CAAC,CAAC;AAE/F,GAGaC,KAAc,CAAC/C,MAC1BA,EAAO,WAAW,IAAI,KAAK,GAAGI,GAAOJ,CAAM,CAAC,KCjKjCgD,KAAc,CACzBC,GACAC,MACgB;AAChB,QAAM,CAACC,GAAIC,CAAE,IAAIH,GACX,CAACI,GAAIC,CAAE,IAAIJ,GACXK,IAAOH,IAAKD,GAEZK,IAAS,CAAC1D,MACdyD,MAAS,KAAKF,IAAKC,KAAM,IAAID,KAAOvD,IAAQqD,KAAMI,KAASD,IAAKD;AAElE,SAAAG,EAAM,SAASP,GACfO,EAAM,QAAQN,GACdM,EAAM,SAAS,OAAUF,MAAOD,IAAKF,IAAKA,KAAOM,IAAQJ,MAAOC,IAAKD,KAAOE,GAErEC;AACT,GAMaE,KAAY,CACvBT,GACAC,GACA,EAAE,cAAAS,IAAe,KAAK,cAAAC,IAAe,IAAA,IAAQ,OAC/B;AACd,QAAM,CAACP,GAAIC,CAAE,IAAIJ,GACX5C,IAAQ2C,EAAO,QACfY,IAAOvD,MAAU,IAAI,KAAKgD,IAAKD,KAAM,KAAK,IAAI,GAAG/C,IAAQqD,IAAeC,IAAe,CAAC,GACxFE,IAAYD,KAAQ,IAAIF,IACxB5C,IAAQsC,IAAKQ,IAAOD,GACpB5E,IAAQ,IAAI,IAAIiE,EAAO,IAAI,CAACc,GAAKC,MAAa,CAACD,GAAKC,CAAQ,CAAC,CAAC,GAE9DR,IAAS,CAACO,MAAgB;AAC9B,UAAMC,IAAWhF,EAAM,IAAI+E,CAAG;AAC9B,WAAOC,MAAa,SAAY,OAAO,MAAMjD,IAAQiD,IAAWH;AAAA,EAClE;AAEA,SAAAL,EAAM,SAASP,GACfO,EAAM,QAAQN,GACdM,EAAM,YAAYM,GAClBN,EAAM,OAAOK,GACbL,EAAM,UAAU,CAAAC,MACdnD,MAAU,IACN,KACA,KAAK;AAAA,IACHA,IAAQ;AAAA,IACR,KAAK;AAAA,MACH;AAAA,MACA,KAAK,OAAOmD,IAAQJ,IAAKQ,IAAOD,KAAgBC,IAAOC,KAAa,KAAKD,CAAI;AAAA,IAAA;AAAA,EAC/E,GAGDL;AACT,GAGaS,KAAW,CAACC,GAAa/E,GAAamB,MAA0B;AAC3E,QAAMiD,IAAO,KAAK,IAAIpE,IAAM+E,CAAG;AAC/B,MAAIX,MAAS,KAAK,CAAC,OAAO,SAASA,CAAI,KAAKjD,KAAS,EAAG,QAAO;AAE/D,QAAM6D,IAAMZ,IAAOjD,GACb8D,IAAQ,MAAM,KAAK,MAAM,KAAK,MAAMD,CAAG,CAAC,GACxCE,IAAQF,IAAMC;AAGpB,UAFeC,KAAS,MAAM,KAAKA,KAAS,MAAM,IAAIA,KAAS,MAAM,IAAI,KAEzDD;AAClB,GAGME,KAAQ,CAACxE,GAAe+D,MAAyB;AACrD,QAAMU,IAAW,KAAK,IAAI,GAAG,CAAC,KAAK,MAAM,KAAK,MAAMV,CAAI,CAAC,IAAI,CAAC;AAC9D,SAAO,OAAO/D,EAAM,QAAQ,KAAK,IAAIyE,GAAU,EAAE,CAAC,CAAC;AACrD,GAMaC,KAAa,CAACN,GAAa/E,GAAamB,IAAQ,MAAwB;AACnF,MAAI,CAAC,OAAO,SAAS4D,CAAG,KAAK,CAAC,OAAO,SAAS/E,CAAG,EAAG,QAAO,CAAC,GAAG,CAAC;AAEhE,MAAIsF,IAAM,KAAK,IAAIP,GAAK/E,CAAG,GACvBuF,IAAO,KAAK,IAAIR,GAAK/E,CAAG;AAE5B,MAAIsF,MAAQC,GAAM;AAChB,QAAID,MAAQ,EAAG,QAAO,CAAC,GAAG,CAAC;AAC3B,UAAME,IAAM,KAAK,IAAIF,CAAG,IAAI;AAC5B,IAAAA,IAAMA,IAAM,IAAI,IAAIA,IAAME,GAC1BD,IAAOA,IAAO,IAAI,IAAIA,IAAOC;AAAA,EAC/B;AAEA,QAAMd,IAAOI,GAASQ,GAAKC,GAAMpE,CAAK;AACtC,SAAO,CAACgE,GAAM,KAAK,MAAMG,IAAMZ,CAAI,IAAIA,GAAMA,CAAI,GAAGS,GAAM,KAAK,KAAKI,IAAOb,CAAI,IAAIA,GAAMA,CAAI,CAAC;AAChG,GAGapF,KAAQ,CAACyF,GAAa/E,GAAamB,IAAQ,MAAgB;AACtE,MAAI,CAAC,OAAO,SAAS4D,CAAG,KAAK,CAAC,OAAO,SAAS/E,CAAG,EAAG,QAAO,CAAA;AAC3D,MAAI+E,MAAQ/E,EAAK,QAAO,CAAC+E,CAAG;AAE5B,QAAML,IAAOI,GAASC,GAAK/E,GAAKmB,CAAK,GAE/BsE,IAAQ,KAAK,KAAKV,IAAML,IAAO,IAAI,GACnCgB,IAAO,KAAK,MAAM1F,IAAM0E,IAAO,IAAI,GACnCiB,IAAmB,CAAA;AAEzB,WAAS9F,IAAQ4F,GAAO5F,KAAS6F,KAAQC,EAAO,SAAS,KAAM9F,KAAS;AACtE,IAAA8F,EAAO,KAAKR,GAAMtF,IAAQ6E,GAAMA,CAAI,CAAC;AAEvC,SAAOiB;AACT,GAGaC,KAAe,CAACC,GAA2BlF,MAA0B;AAChF,MAAIkF,EAAO,WAAW,EAAG,QAAO;AAEhC,MAAIP,IAAM,GACNC,IAAOM,EAAO,SAAS;AAE3B,SAAOP,IAAMC,KAAM;AACjB,UAAMO,IAAUR,IAAMC,KAAS;AAC/B,IAAIM,EAAOC,CAAM,IAAInF,QAAamF,IAAS,IACtCP,IAAOO;AAAA,EACd;AAEA,SAAIR,IAAM,KAAK,KAAK,IAAIO,EAAOP,IAAM,CAAC,IAAI3E,CAAK,KAAK,KAAK,IAAIkF,EAAOP,CAAG,IAAI3E,CAAK,IAAU2E,IAAM,IACzFA;AACT,GCpJaS,KAAS,CAACJ,MACrBA,EAAO,OAAO,CAAChF,MAA2B,OAAOA,KAAU,YAAY,OAAO,SAASA,CAAK,CAAC,GAGlFqF,KAAS,CAACL,MAAgD;AACrE,MAAIA,EAAO,WAAW,EAAG,QAAO,CAAC,GAAG,CAAC;AAErC,MAAIZ,IAAMY,EAAO,CAAC,GACd3F,IAAM2F,EAAO,CAAC;AAClB,aAAWhF,KAASgF;AAClB,IAAIhF,IAAQoE,MAAKA,IAAMpE,IACnBA,IAAQX,MAAKA,IAAMW;AAGzB,SAAO,CAACoE,GAAK/E,CAAG;AAClB,GAGaiG,KAAW,CAACJ,GAA2BK,MAAgC;AAClF,MAAIL,EAAO,WAAW,EAAG,QAAO,OAAO;AACvC,MAAIA,EAAO,WAAW,EAAG,QAAOA,EAAO,CAAC;AAExC,QAAMhB,KAAYgB,EAAO,SAAS,KAAK,KAAK,IAAI,GAAG,KAAK,IAAI,GAAGK,CAAW,CAAC,GACrE3D,IAAQ,KAAK,MAAMsC,CAAQ,GAC3BsB,IAAWtB,IAAWtC;AAE5B,SAAOA,IAAQ,IAAIsD,EAAO,SACtBA,EAAOtD,CAAK,KAAKsD,EAAOtD,IAAQ,CAAC,IAAIsD,EAAOtD,CAAK,KAAK4D,IACtDN,EAAOtD,CAAK;AAClB,GAiBa6D,KAAW,CAACT,MAA+C;AACtE,QAAME,IAASE,GAAOJ,CAAM,EAAE,KAAK,CAACF,GAAOY,MAAWZ,IAAQY,CAAM;AACpE,MAAIR,EAAO,WAAW,EAAG,QAAO;AAEhC,QAAMS,IAAKL,GAASJ,GAAQ,IAAI,GAC1BU,IAAKN,GAASJ,GAAQ,IAAI,GAC1BW,KAASD,IAAKD,KAAM,KACpBG,IAASZ,EAAO,OAAO,CAAAlF,MAASA,KAAS2F,IAAKE,KAAS7F,KAAS4F,IAAKC,CAAK;AAEhF,SAAO;AAAA,IACL,OAAOX,EAAO;AAAA,IACd,KAAKA,EAAO,CAAC;AAAA,IACb,IAAAS;AAAA,IACA,QAAQL,GAASJ,GAAQ,GAAG;AAAA,IAC5B,IAAAU;AAAA,IACA,KAAKV,EAAOA,EAAO,SAAS,CAAC;AAAA,IAC7B,YAAYY,EAAO,CAAC,KAAKH;AAAA,IACzB,aAAaG,EAAOA,EAAO,SAAS,CAAC,KAAKF;AAAA,IAC1C,UAAUV,EAAO,OAAO,CAAAlF,MAASA,IAAQ2F,IAAKE,KAAS7F,IAAQ4F,IAAKC,CAAK;AAAA,EAAA;AAE7E,GAeaE,KAAY,CAACf,GAA2BgB,MAA6B;AAChF,QAAMC,IAAOb,GAAOJ,CAAM;AAC1B,MAAIiB,EAAK,WAAW,EAAG,QAAO,CAAA;AAE9B,QAAM,CAAC7B,GAAK/E,CAAG,IAAIgG,GAAOY,CAAI;AAC9B,MAAI7B,MAAQ/E,EAAK,QAAO,CAAC,EAAE,MAAM+E,GAAK,IAAIA,IAAM,GAAG,OAAO6B,EAAK,QAAQ;AAEvE,QAAMC,IAASF,KAAY,KAAK,KAAK,KAAK,KAAKC,EAAK,MAAM,CAAC,IAAI,GACzDlC,IAAOI,GAASC,GAAK/E,GAAK,KAAK,IAAI,GAAG6G,CAAM,CAAC,GAC7CjF,IAAQ,KAAK,MAAMmD,IAAML,CAAI,IAAIA,GAEjCvD,IAAQ,KAAK,IAAI,GAAG,KAAK,MAAMnB,IAAM4B,KAAS8C,IAAO,IAAI,CAAC,GAE1DoC,IAAc,MAAM,KAAK,EAAE,QAAQ3F,EAAA,GAAS,CAACvB,GAAGC,OAAW;AAAA,IAC/D,MAAM+B,IAAQ/B,IAAQ6E;AAAA,IACtB,IAAI9C,KAAS/B,IAAQ,KAAK6E;AAAA,IAC1B,OAAO;AAAA,EAAA,EACP;AAEF,aAAW/D,KAASiG,GAAM;AACxB,UAAM/G,IAAQ,KAAK,IAAIiH,EAAK,SAAS,GAAG,KAAK,OAAOnG,IAAQiB,KAAS8C,CAAI,CAAC;AAC1E,IAAAoC,EAAKjH,CAAK,EAAE,SAAS;AAAA,EACvB;AAEA,SAAOiH;AACT,GC9BaC,KAAW,CAACpG,MACvB,OAAOA,KAAU,YAAY,OAAO,SAASA,CAAK,IAAIA,IAAQ,MAE1DqG,KAAS,EAAE,KAAK,IAAI,OAAO,IAAI,QAAQ,IAAI,SAAS,GAAA,GAGpDC,KAAQ,CACZC,GACAC,MACoD;AACpD,QAAMC,IAAWF,EAAK,IAAI,MAAM,CAAC,GAC3BG,IAAWH,EAAK,IAAI,MAAM,CAAC,GAC3BpG,IAA0D,CAAA;AAEhE,aAAW8D,KAAOuC;AAChB,IAAArG,EAAO8D,CAAG,IAAIsC,EAAK,IAAI,CAACI,GAAKzH,MAAU;AACrC,YAAMc,IAAQoG,GAASO,EAAI1C,CAAG,CAAC,KAAK;AACpC,UAAIjE,KAAS,GAAG;AACd,cAAMyB,IAAOgF,EAASvH,CAAK;AAC3B,eAAAuH,EAASvH,CAAK,KAAKc,GACZ,EAAE,MAAAyB,GAAM,KAAKgF,EAASvH,CAAK,EAAA;AAAA,MACpC;AACA,YAAMuC,IAAOiF,EAASxH,CAAK;AAC3B,aAAAwH,EAASxH,CAAK,KAAKc,GACZ,EAAE,MAAAyB,GAAM,KAAKiF,EAASxH,CAAK,EAAA;AAAA,IACpC,CAAC;AAEH,SAAOiB;AACT,GAEayG,KAAoB,CAACC,MAA6C;AAC7E,QAAM,EAAE,MAAAN,GAAM,MAAAO,GAAM,QAAAC,GAAQ,OAAA3H,GAAO,QAAA4H,GAAQ,WAAAC,GAAW,OAAA5F,GAAO,SAAA6F,EAAA,IAAYL,GACnEM,IAAUJ,EAAO,KAAK,CAAAK,MAAQA,EAAK,SAAS,KAAK,GAGjDC,KADJF,KAAWJ,EAAO,MAAM,CAAAK,MAAQA,EAAK,SAAS,KAAK,IAAIP,EAAM,cAAc,gBACxC,cAE/BS,IAAUf,EAAK,IAAI,CAAAI,MAAOA,EAAIG,CAAI,CAAC,GACnCS,IACJ,CAACJ,KACD,CAACE,KACDC,EAAQ,SAAS,KACjBA,EAAQ,MAAM,CAAAtH,MAASoG,GAASpG,CAAK,MAAM,IAAI,GAG3CwH,IAA0D,CAAA;AAChE,MAAIP;AACF,eAAWQ,KAAQ,CAAC,QAAQ,OAAO;AACjC,iBAAWC,KAAQ,CAAC,OAAO,MAAM,GAAY;AAC3C,cAAMlB,IAAOO,EACV,OAAO,CAAAK,OAASA,EAAK,QAAQ,YAAYK,KAAQL,EAAK,SAASM,CAAI,EACnE,IAAI,CAAAN,MAAQA,EAAK,GAAG;AACvB,eAAO,OAAOI,GAAQlB,GAAMC,GAAMC,CAAI,CAAC;AAAA,MACzC;AAEJ,QAAMmB,IAAU,CAAC1D,GAAa/E,MAAwD;AACpF,QAAIsI,EAAOvD,CAAG,UAAUuD,EAAOvD,CAAG,EAAE/E,CAAK;AACzC,UAAMc,IAAQoG,GAASG,EAAKrH,CAAK,EAAE+E,CAAG,CAAC;AACvC,WAAOjE,MAAU,OAAO,OAAO,EAAE,MAAM,GAAG,KAAKA,EAAA;AAAA,EACjD,GAGM4H,IAAY,CAACH,MAAoD;AACrE,UAAMI,IAAUd,EAAO,OAAO,SAASK,GAAK,QAAQ,YAAYK,CAAI;AACpE,QAAII,EAAQ,WAAW,EAAG,QAAO;AAEjC,QAAIzD,IAAM,OAAO,mBACb/E,IAAM,OAAO;AACjB,eAAW+H,MAAQS;AACjB,eAAS3I,KAAQ,GAAGA,KAAQqH,EAAK,QAAQrH,MAAS,GAAG;AACnD,cAAMc,KAAQ2H,EAAQP,GAAK,KAAKlI,EAAK;AACrC,QAAKc,OACLoE,IAAM,KAAK,IAAIA,GAAKpE,GAAM,KAAKA,GAAM,IAAI,GACzCX,IAAM,KAAK,IAAIA,GAAKW,GAAM,KAAKA,GAAM,IAAI;AAAA,MAC3C;AAQF,QALI6H,EAAQ,KAAK,CAAAT,OAAQA,GAAK,SAAS,MAAM,MAC3ChD,IAAM,KAAK,IAAIA,GAAK,CAAC,GACrB/E,IAAM,KAAK,IAAIA,GAAK,CAAC,IAGnB,CAAC,OAAO,SAAS+E,CAAG,KAAK,CAAC,OAAO,SAAS/E,CAAG,EAAG,QAAO,CAAC,GAAG,CAAC;AAEhE,UAAM,CAACyI,IAAUC,CAAQ,IACvBN,MAAS,SAAUZ,EAAM,UAAU,CAAC,QAAW,MAAS,IAAK,CAAC,QAAW,MAAS,GAC9EmB,KAAOtD,GAAWoD,MAAY1D,GAAK2D,KAAY1I,CAAG;AACxD,WAAO,CAACyI,MAAYE,GAAK,CAAC,GAAGD,KAAYC,GAAK,CAAC,CAAC;AAAA,EAClD,GAEMC,IAAaL,EAAU,MAAM,KAAK,CAAC,GAAG,CAAC,GACvCM,IAAcN,EAAU,OAAO,GAC/BO,IAAeD,MAAgB,QAAQ,CAACb,GAGxCe,IAAaC,GAAYJ,EAAW,CAAC,GAAGA,EAAW,CAAC,GAAG,CAAC,EAAE,IAAIpB,EAAM,UAAU,GAC9EyB,IAAcJ,IAChBG,GAAYH,EAAY,CAAC,GAAGA,EAAY,CAAC,GAAG,CAAC,EAAE,IAAIrB,EAAM,WAAW,IACpE,CAAA,GACE0B,IAAiBhC,EAAK,IAAI,CAAAI,MAAOO,EAAQP,EAAIG,CAAI,CAAC,CAAC,GAEnD0B,IAAOnB,IACT,KAAK,IAAIjI,IAAQ,KAAK,KAAK,IAAIiH,GAAO,SAAS,GAAGkC,EAAe,IAAI/J,EAAU,CAAC,IAAI,EAAE,IACtF,KAAK,IAAI6H,GAAO,SAAS,GAAG+B,EAAW,IAAI5J,EAAU,CAAC,IAAI,IACxDiK,IAAQN,IACV,KAAK,IAAI9B,GAAO,SAAS,GAAGiC,EAAY,IAAI9J,EAAU,CAAC,IAAI,KAC3D6H,GAAO,OAEL9G,IAAiB;AAAA,IACrB,MAAAiJ;AAAA,IACA,KAAKnC,GAAO;AAAA,IACZ,OAAO,KAAK,IAAImC,IAAO,GAAGpJ,IAAQqJ,CAAK;AAAA,IACvC,QAAQ,KAAK,IAAIpC,GAAO,MAAM,GAAGW,IAASX,GAAO,MAAM;AAAA,IACvD,OAAO,KAAK,IAAI,GAAGjH,IAAQqJ,IAAQD,CAAI;AAAA,IACvC,QAAQ,KAAK,IAAI,GAAGxB,IAASX,GAAO,SAASA,GAAO,GAAG;AAAA,EAAA,GAInDqC,IAAkCrB,IACpC,CAAC9H,EAAK,KAAKA,EAAK,MAAM,IACtB,CAACA,EAAK,MAAMA,EAAK,KAAK,GACpBoJ,IAA+BtB,IACjC,CAAC9H,EAAK,MAAMA,EAAK,KAAK,IACtB,CAACA,EAAK,QAAQA,EAAK,GAAG,GAEpBqJ,IAAY1F,GAAY+E,GAAYU,CAAU,GAC9CE,IAAaX,IAAchF,GAAYgF,GAAaS,CAAU,IAAIC,GAClEE,IAAW,CAAC1B,OACfA,EAAK,QAAQ,YAAY,WAAWc,IAAcW,IAAaD;AAElE,MAAIG,GACA/E,IAAY,GAGZgF,IAA6B;AAEjC,MAAIzB,GAAc;AAChB,UAAM0B,IAAU3B,EAAQ,IAAI,CAAAtH,MAASoG,GAASpG,CAAK,CAAW;AAC9D,IAAAgJ,IAAS9F,GAAYmC,GAAO4D,CAAO,GAAGP,CAAa,GACnDK,IAAUE,EAAQ,IAAID,CAAM;AAAA,EAC9B,OAAO;AACL,UAAME,IAAOtF;AAAA,MACX2C,EAAK,IAAI,CAACtH,GAAGC,MAAU,OAAOA,CAAK,CAAC;AAAA,MACpCwJ;AAAA,MACAvB,IAAU,EAAE,cAAc,MAAM,cAAc,KAAA,IAAS,EAAE,cAAc,GAAG,cAAc,EAAA;AAAA,IAAE;AAE5F,IAAAnD,IAAYkF,EAAK,WACjBH,IAAUxC,EAAK,IAAI,CAACtH,GAAGC,MAAUgK,EAAK,OAAOhK,CAAK,CAAC,IAAIgK,EAAK,YAAY,CAAC;AAAA,EAC3E;AAGA,QAAMC,IAAK,CAACC,GAAkBpJ,MAC5BqH,IAAe,EAAE,GAAGrH,GAAO,GAAGoJ,MAAa,EAAE,GAAGA,GAAU,GAAGpJ,EAAA,GAGzDqJ,IAAmB,CAAA,GACnBC,IAAYvC,EAAO,OAAO,CAAAK,MAAQA,EAAK,SAAS,KAAK,GACrDmC,IAAQtC,IAAY,IAAI,KAAK,IAAI,GAAGqC,EAAU,MAAM,GACpDE,IAAUD,IAAQ,IAAI,KAAK,IAAI,GAAGvF,IAAY,IAAI,IAAI,GACtDyF,IAAY,KAAK,IAAI,IAAIzF,IAAYwF,KAAWD,IAAQ,MAAMA,CAAK;AAEzE,EAAAD,EAAU,QAAQ,CAAClC,GAAMsC,MAAgB;AACvC,UAAMhG,IAAQoF,EAAS1B,CAAI,GACrBuC,IAAO1C,IAAY,IAAIyC;AAE7B,IAAAnD,EAAK,QAAQ,CAACtH,IAAGC,MAAU;AACzB,YAAMc,KAAQ2H,EAAQP,EAAK,KAAKlI,CAAK;AACrC,UAAI,CAACc,MAASA,GAAM,QAAQA,GAAM,KAAM;AAExC,YAAMiB,KAAQ8H,EAAQ7J,CAAK,IAAI8E,IAAY,IAAI2F,KAAQF,IAAYD,IAC7DI,KAAKlG,EAAM1D,GAAM,IAAI,GACrB6J,KAAKnG,EAAM1D,GAAM,GAAG,GACpB2E,KAAM,KAAK,IAAIiF,IAAIC,EAAE,GACrBpG,KAAO,KAAK,IAAI,GAAG,KAAK,IAAIoG,KAAKD,EAAE,CAAC;AAE1C,MAAAP,EAAK;AAAA,QACHhC,IACI;AAAA,UACE,KAAKD,EAAK;AAAA,UACV,OAAAlI;AAAA,UACA,MAAMkI,EAAK;AAAA,UACX,GAAGzC;AAAA,UACH,GAAG1D;AAAA,UACH,OAAOwC;AAAA,UACP,QAAQgG;AAAA,QAAA,IAEV;AAAA,UACE,KAAKrC,EAAK;AAAA,UACV,OAAAlI;AAAA,UACA,MAAMkI,EAAK;AAAA,UACX,GAAGnG;AAAA,UACH,GAAG0D;AAAA,UACH,OAAO8E;AAAA,UACP,QAAQhG;AAAA,QAAA;AAAA,MACV;AAAA,IAER,CAAC;AAAA,EACH,CAAC;AAED,QAAMvD,IAAuC,CAAA,GACvC4J,IAAoC,CAAA,GACpCC,IAAoC,CAAA;AAE1C,aAAW3C,KAAQL,GAAQ;AACzB,QAAIK,EAAK,SAAS,MAAO;AACzB,UAAM1D,IAAQoF,EAAS1B,CAAI,GACrB5F,IAAM+E,EAAK,IAAI,CAACtH,GAAGC,OAAU;AACjC,YAAMc,IAAQ2H,EAAQP,EAAK,KAAKlI,EAAK;AACrC,aAAOc,IAAQmJ,EAAGJ,EAAQ7J,EAAK,GAAGwE,EAAM1D,EAAM,GAAG,CAAC,IAAI;AAAA,IACxD,CAAC;AAGD,QAFAE,EAAOkH,EAAK,GAAG,IAAI5F,GAEf4F,EAAK,SAAS,QAAQ;AACxB,YAAM3F,IAAO8E,EAAK,IAAI,CAACtH,IAAGC,MAAU;AAClC,cAAMc,KAAQ2H,EAAQP,EAAK,KAAKlI,CAAK;AACrC,eAAOc,KAAQmJ,EAAGJ,EAAQ7J,CAAK,GAAGwE,EAAM1D,GAAM,IAAI,CAAC,IAAI;AAAA,MACzD,CAAC;AACD,MAAA+J,EAAM,KAAK,EAAE,KAAK3C,EAAK,KAAK,MAAMA,EAAK,MAAM,GAAG7F,GAASC,GAAKC,GAAMJ,CAAK,GAAG;AAAA,IAC9E;AAEA,IAAAyI,EAAM,KAAK,EAAE,KAAK1C,EAAK,KAAK,MAAMA,EAAK,MAAM,GAAGhG,GAASI,GAAKH,CAAK,GAAG;AAAA,EACxE;AAGA,QAAM2I,KAAUzD,EAAK,IAAI,CAACtH,GAAGC,MAAU;AACrC,QAAI+K,IAAyB;AAC7B,eAAW7C,MAAQL,GAAQ;AACzB,YAAM/G,IAAQ2H,EAAQP,GAAK,KAAKlI,CAAK;AACrC,UAAI,CAACc,EAAO;AACZ,YAAM2D,KAAQmF,EAAS1B,EAAI,EAAEpH,EAAM,GAAG;AACtC,MAAAiK,IACEA,MAAY,OACRtG,KACA0D,IACE,KAAK,IAAI4C,GAAStG,EAAK,IACvB,KAAK,IAAIsG,GAAStG,EAAK;AAAA,IACjC;AACA,UAAMuG,IAAW7C,IAAe9H,EAAK,OAAOA,EAAK;AACjD,WAAO4J,EAAGJ,EAAQ7J,CAAK,GAAG+K,KAAWC,CAAQ;AAAA,EAC/C,CAAC,GAGKC,KAAU,CACdzG,GACAP,GACAiH,MAEA/B;AAAAA,IACElF,EAAO,CAAC;AAAA,IACRA,EAAO,CAAC;AAAA,IACRkE,IACI,KAAK,IAAI,GAAG,KAAK,MAAM9H,EAAK,QAAQ,EAAE,CAAC,IACvC,KAAK,IAAI,GAAG,KAAK,MAAMA,EAAK,SAAS,EAAE,CAAC;AAAA,EAAA,EAC5C,IAAI,CAAAS,OAAU;AAAA,IACd,UAAU0D,EAAM1D,CAAK;AAAA,IACrB,OAAOoK,EAAOpK,CAAK;AAAA,EAAA,EACnB,GAEEqK,KAAwBrB,IAC1BX,GAAYW,EAAO,OAAO,CAAC,GAAGA,EAAO,OAAO,CAAC,GAAG,KAAK,IAAI,GAAG,KAAK,MAAMzJ,EAAK,QAAQ,EAAE,CAAC,CAAC,EAAE;AAAA,IACxF,CAAAS,OAAU;AAAA,MACR,UAAWgJ,EAAuBhJ,CAAK;AAAA,MACvC,OAAOkH,EAAQlH,CAAK;AAAA,IAAA;AAAA,EACtB,IAEFuG,EAAK,IAAI,CAACtH,GAAGC,OAAW;AAAA,IACtB,UAAU6J,EAAQ7J,CAAK;AAAA,IACvB,OAAOmI,IAAelI,GAASoJ,EAAerJ,CAAK,GAAGsJ,IAAO,EAAE,IAAID,EAAerJ,CAAK;AAAA,EAAA,EACvF;AAEN,SAAO;AAAA,IACL,MAAM+I,EAAW,CAAC,IAAI,KAAKA,EAAW,CAAC,IAAI,IAAIW,EAAU,CAAC,IAAI;AAAA,IAC9D,MAAArJ;AAAA,IACA,SAAAwJ;AAAA,IACA,WAAA/E;AAAA,IACA,cAAAuD;AAAA,IACA,eAAA8C;AAAA,IACA,WAAWF,GAAQvB,GAAWX,GAAYpB,EAAM,UAAU;AAAA,IAC1D,YACEsB,KAAgBD,IAAciC,GAAQtB,GAAYX,GAAarB,EAAM,WAAW,IAAI,CAAA;AAAA,IACtF,cAAAsB;AAAA,IACA,OAAA2B;AAAA,IACA,OAAAC;AAAA,IACA,MAAAV;AAAA,IACA,QAAAnJ;AAAA,IACA,SAAA8J;AAAA,EAAA;AAEJ,GC5Wa9H,KAAK,IAAI8C,MAAiC;AACrD,MAAI7E,IAAS;AAEb,aAAWH,KAASgF;AAClB,IAAKhF,MACLG,IAASA,MAAW,KAAKH,IAAQ,GAAGG,CAAM,IAAIH,CAAK;AAGrD,SAAOG;AACT,GCFamK,KAAmC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAGaC,KAAS,CAACrL,GAAesL,MACpCA,KAAQF,GAAWpL,IAAQoL,GAAW,MAAM,GAGjCG,IAAY,CAACD,MACxBA,MAAS,UAAU,wBAAwB,eAAeA,CAAI;;;;;;;;;;;;;;;GC0C1DE,KAAc,IASdC,KAAa,CAAC;AAAA,EAClB,OAAAlM;AAAA,EACA,aAAAmM;AAAA,EACA,cAAAC;AAAA,EACA,OAAAzL;AAAA,EACA,QAAA4H;AAAA,EACA,MAAA8D;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,MAAAC;AAAA,EACA,SAAAC;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,WAAAC;AAAA,EACA,QAAAC;AACF,MAAuB;AACrB,QAAMC,IAAgBC,GAAA,GAChBC,IAAMC,GAAA,GACN,CAACC,GAAQC,CAAS,IAAIC,GAAwB,IAAI,GAClDC,IAAQC,GAAsB,IAAI,GAClCC,IAAaD,GAAuB,IAAI,GACxCE,IAAUF,GAAwC,IAAI;AAG5D,EAAAG,GAAU,MAAM;AACd,IAAIP,MAAW,QAAQA,KAAUf,OAAqBA,IAAY,IAAIA,IAAY,IAAI,IAAI;AAAA,EAC5F,GAAG,CAACe,GAAQf,CAAS,CAAC,GAEtBsB;AAAA,IACE,MAAM,MAAM;AACV,MAAIJ,EAAM,YAAY,QAAM,qBAAqBA,EAAM,OAAO;AAAA,IAChE;AAAA,IACA,CAAA;AAAA,EAAC;AAGH,QAAMK,IAAoBC;AAAA,IACxB,CAACC,MAAuC;AACtC,YAAMC,IAAMD,EAAM,cAAc,sBAAA;AAEhC,MADAJ,EAAQ,UAAU,EAAE,GAAGI,EAAM,UAAUC,EAAI,MAAM,GAAGD,EAAM,UAAUC,EAAI,IAAA,GACpER,EAAM,YAAY,SAEtBA,EAAM,UAAU,sBAAsB,MAAM;AAC1C,QAAAA,EAAM,UAAU;AAChB,cAAM9L,IAAQiM,EAAQ;AACtB,QAAIjM,KAAO4L,EAAUd,EAAK9K,EAAM,GAAGA,EAAM,CAAC,CAAC;AAAA,MAC7C,CAAC;AAAA,IACH;AAAA,IACA,CAAC8K,CAAI;AAAA,EAAA,GAGDyB,IAAO,CAACC,MAAiB;AAC7B,UAAMC,IAAU,KAAK,IAAI7B,IAAY,GAAG,KAAK,IAAI,GAAG4B,CAAI,CAAC;AACzD,IAAAZ,EAAUa,CAAO,GACjBhB,EAAIP,EAASuB,CAAO,CAAC;AAAA,EACvB,GAEMC,IAAgB,CAACL,MAAwC;AAC7D,QAAIzB,MAAc,EAAG;AACrB,UAAM7K,IAAU4L,KAAU,IACpBrF,IAAMuE,KAAW,GAEjB2B,IACJH,EAAM,QAAQ,eACVtM,IAAU,IACVsM,EAAM,QAAQ,cACZ,KAAK,IAAI,GAAGtM,IAAU,CAAC,IACvBsM,EAAM,QAAQ,cACZtM,IAAU,IACR,IACAA,IAAUuG,IACZ+F,EAAM,QAAQ,YACZ,KAAK,IAAI,GAAGtM,IAAUuG,CAAG,IACzB+F,EAAM,QAAQ,SACZ,IACAA,EAAM,QAAQ,QACZzB,IAAY,IACZ;AAEhB,QAAIyB,EAAM,QAAQ,YAAYV,MAAW,MAAM;AAC7C,MAAAU,EAAM,eAAA,GACNT,EAAU,IAAI;AACd;AAAA,IACF;AAEA,IAAIY,MAAS,SACbH,EAAM,eAAA,GACNE,EAAKC,CAAI;AAAA,EACX,GAEMG,IAAUhB,MAAW,OAAO,OAAOZ,EAAQY,CAAM,GACjD3L,IAAQ2L,MAAW,OAAO,OAAOX,EAAOW,CAAM,GAC9CiB,IAAS5M,KAAA,gBAAAA,EAAO;AAQtB,SAAA6M,GAAgB,MAAM;AACpB,UAAMC,IAAOd,EAAW;AACxB,QAAI,CAACc,KAAQF,MAAW,OAAW;AAEnC,UAAMG,IAAOD,EAAK,aACZE,IAAcJ,IAAS7N,IAAQ,GAC/BkO,IAAchC,MAAgB,YAAY,CAAC+B,IAAcA,GACzDE,IAAQN,IAASvC,KAAc0C,GAC/BI,IAASP,IAASvC,IAClB+C,IAAWF,KAAS,GACpBG,IAAYF,IAASJ,KAAQhO,GAK7BuO,IACJrC,MAAgB,YACZgC,IACEC,IACAC,IACFF,IACEG,KAAY,CAACC,IACXH,IACAC,IACFE,KAAa,CAACD,IACZD,IACAD;AAEV,IAAAJ,EAAK,MAAM,OAAO,GAAG,KAAK,IAAI,KAAK,IAAI,GAAGQ,CAAC,GAAG,KAAK,IAAI,GAAGvO,IAAQgO,CAAI,CAAC,CAAC;AAAA,EAC1E,GAAG,CAACpB,GAAQiB,GAAQ7N,GAAOkM,CAAW,CAAC,GAGrC,gBAAA1L,EAAC,YAAO,WAAWsC,GAAGvC,EAAO,OAAO+L,CAAS,GAAG,eAAaC,GAC3D,UAAA;AAAA,IAAA,gBAAA/L,EAAC,OAAA,EAAI,KAAKiL,GAAc,WAAWlL,EAAO,eAAe,OAAO,EAAE,WAAWqH,EAAA,GAC3E,UAAA;AAAA,MAAA,gBAAApH;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWD,EAAO;AAAA,UAClB,OAAAP;AAAA,UACA,QAAA4H;AAAA,UACA,SAAS,OAAO5H,CAAK,IAAI4H,CAAM;AAAA,UAC/B,MAAK;AAAA,UACL,cAAYvI;AAAA,UACZ,oBAAkBmM,IAAcgB,IAAgB;AAAA,UAChD,UAAUX,IAAY,IAAI,IAAI;AAAA,UAC9B,eAAeuB;AAAA,UACf,eAAeA;AAAA,UACf,gBAAgB,MAAMP,EAAU,IAAI;AAAA,UACpC,WAAWc;AAAA,UACX,QAAQ,MAAMd,EAAU,IAAI;AAAA,UAE3B,UAAA;AAAA,YAAAD,MAAW,QAAQhB,KAClB,gBAAAtL,EAAC,KAAA,EAAE,WAAWC,EAAO,gBAAiB,UAAAqL,EAASgB,CAAM,EAAA,CAAE;AAAA,YAExDlB;AAAA,YACAkB,MAAW,QAAQ,gBAAAtM,EAAC,KAAA,EAAE,WAAWC,EAAO,gBAAiB,UAAAoL,EAAQiB,CAAM,EAAA,CAAE;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAG3EgB,KAAW3M;AAAA,MAEV,gBAAAT;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAKyM;AAAA,UACL,eAAW;AAAA,UACX,WAAW1M,EAAO;AAAA,UAElB,OAAO,EAAE,iBAAiB,KAAK,IAAI,IAAI,KAAK,IAAIU,EAAM,GAAG2G,IAAS,EAAE,CAAC,EAAA;AAAA,UAEpE,UAAA;AAAA,YAAAgG,EAAQ,SAAS,gBAAAtN,EAAC,QAAA,EAAK,WAAWC,EAAO,qBAAsB,YAAQ,MAAA,CAAM;AAAA,YAC7EqN,EAAQ,KAAK,IAAI,CAAArG,wBACf,QAAA,EAAkB,WAAWhH,EAAO,mBAClC,UAAA;AAAA,cAAAgH,EAAI,QACH,gBAAAjH;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAWC,EAAO;AAAA,kBAClB,OAAO,EAAE,iBAAiB8K,EAAU9D,EAAI,IAAI,EAAA;AAAA,gBAAE;AAAA,cAAA;AAAA,gCAGjD,QAAA,EAAK,WAAWhH,EAAO,qBAAsB,YAAI,OAAM;AAAA,gCACvD,QAAA,EAAK,WAAWA,EAAO,qBAAsB,YAAI,MAAA,CAAM;AAAA,YAAA,EAAA,GAR/CgH,EAAI,EASf,CACD;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACH,GAEJ;AAAA,IAEC8E,KAAUA,EAAO,QAAQ,SAAS,KACjC,gBAAA/L,EAAC,MAAA,EAAG,WAAWC,EAAO,eACnB,UAAA8L,EAAO,QAAQ,IAAI,CAAAmC,MAAS;AAC3B,YAAMC,IAAWpC,EAAO,OAAO,IAAImC,EAAM,EAAE;AAC3C,+BACG,MAAA,EACC,UAAA,gBAAAhO;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAWsC;AAAA,YACTvC,EAAO;AAAA,YACPkO,KAAYlO,EAAO,2BAA2B;AAAA,UAAA;AAAA,UAEhD,gBAAc,CAACkO;AAAA,UACf,SAAS,MAAMpC,EAAO,SAASmC,EAAM,EAAE;AAAA,UAEvC,UAAA;AAAA,YAAA,gBAAAlO,EAACoO,IAAA,EAAa,MAAMF,EAAM,MAAM,UAAAC,GAAoB;AAAA,YACnDD,EAAM;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA,EACT,GAZOA,EAAM,EAaf;AAAA,IAEJ,CAAC,EAAA,CACH;AAAA,IAGDhD,uBACE,KAAA,EAAE,IAAIgB,GAAe,WAAWjM,EAAO,eACrC,UAAAiL,EAAA,CACH;AAAA,sBAQD,OAAA,EAAI,WAAWjL,EAAO,eACrB,4BAAC,SAAA,EACC,UAAA;AAAA,MAAA,gBAAAD,EAAC,aAAS,UAAAjB,EAAA,CAAM;AAAA,wBACf,SAAA,EACC,UAAA,gBAAAiB,EAAC,QACE,UAAA8L,EAAM,QAAQ,IAAI,CAACuC,GAAQ7O,MAC1B,gBAAAQ,EAAC,QAAe,OAAM,OACnB,eADMR,CAET,CACD,GACH,EAAA,CACF;AAAA,MACA,gBAAAQ,EAAC,SAAA,EACE,UAAA8L,EAAM,KAAK,IAAI,CAAC7E,GAAKzH,MACpB,gBAAAQ,EAAC,MAAA,EACE,UAAAiH,EAAI;AAAA,QAAI,CAACqH,GAAMC,MACdA,MAAc,IACZ,gBAAAvO,EAAC,MAAA,EAAmB,OAAM,OACvB,eADMuO,CAET,IAEA,gBAAAvO,EAAC,MAAA,EAAoB,eAAZuO,CAAiB;AAAA,MAAA,EAE9B,GATO/O,CAUT,CACD,EAAA,CACH;AAAA,IAAA,EAAA,CACF,EAAA,CACF;AAAA,EAAA,GACF;AAEJ,GAGM4O,KAAe,CAAC,EAAE,MAAAtD,GAAM,UAAAqD,QAC5B,gBAAAnO;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,eAAW;AAAA,IACX,WAAWC,EAAO;AAAA,IAClB,OACEkO,IACI,EAAE,iBAAiB,eAAe,WAAW,mBAAmBpD,EAAUD,CAAI,CAAC,OAC/E,EAAE,iBAAiBC,EAAUD,CAAI,EAAA;AAAA,EAAE;AAE3C,GChVI0D,yBAAY,IAAA,GAEZC,KAAY,CAChBC,GACAC,MACsB;AACtB,QAAMpK,IAAM,GAAGmK,KAAU,EAAE,IAAI,KAAK,UAAUC,CAAO,CAAC;AACtD,MAAIC,IAAWJ,GAAM,IAAIjK,CAAG;AAE5B,SAAKqK,MACHA,IAAW,IAAI,KAAK,aAAaF,GAAQC,CAAO,GAChDH,GAAM,IAAIjK,GAAKqK,CAAQ,IAGlBA;AACT,GAMaC,KACX,CAACH,MACD,CAAApO,MACEmO,GAAUC,GAAQ,EAAE,UAAU,WAAW,uBAAuB,EAAA,CAAG,EAAE,OAAOpO,CAAK,GAGxEwO,KACX,CAACJ,MACD,CAAApO,MACEmO,GAAUC,GAAQ,EAAE,uBAAuB,EAAA,CAAG,EAAE,OAAOpO,CAAK,GC7B1DyO,KAAiB,KAGjBC,KAA4B,OAAO,SAAW,MAAc,MAAM;AAAC,IAAIxB,IAMvEyB,KAAgB,CAACC,MAA+D;AACpF,QAAMC,IAAMzC,GAAuB,IAAI,GACjC,CAAChN,GAAO0P,CAAQ,IAAI5C,GAAS0C,KAASH,EAAc;AAE1D,SAAAC,GAA0B,MAAM;AAC9B,QAAIE,MAAU,QAAW;AACvB,MAAAE,EAASF,CAAK;AACd;AAAA,IACF;AAEA,UAAMzB,IAAO0B,EAAI;AACjB,QAAI,CAAC1B,EAAM;AAEX,UAAM4B,IAAU,CAAClC,MAAiB;AAEhC,YAAMmC,IAAU,KAAK,MAAMnC,CAAI;AAC/B,MAAImC,IAAU,KAAGF,EAAS,OAAY1O,MAAY4O,IAAU5O,IAAU4O,CAAQ;AAAA,IAChF;AAGA,QADAD,EAAQ5B,EAAK,WAAW,GACpB,OAAO,iBAAmB,IAAa;AAE3C,UAAM8B,IAAW,IAAI,eAAe,CAAC,CAACrB,CAAK,MAAMmB,EAAQnB,EAAM,YAAY,KAAK,CAAC;AACjF,WAAAqB,EAAS,QAAQ9B,CAAI,GACd,MAAM8B,EAAS,WAAA;AAAA,EACxB,GAAG,CAACL,CAAK,CAAC,GAEH,CAACC,GAAKzP,CAAK;AACpB;;;;;;;;;GCSM8P,KAAiB,KACjBC,KAAU,KAMVC,KAAiB,CAAC;AAAA,EACtB,OAAA3Q;AAAA,EACA,aAAAmM;AAAA,EACA,MAAA3E;AAAA,EACA,MAAAa;AAAA,EACA,QAAAuI;AAAA,EACA,QAAAtI;AAAA,EACA,QAAAC,IAASkI;AAAA,EACT,OAAOI;AAAA,EACP,WAAArI,IAAY;AAAA,EACZ,aAAAsI,IAAc;AAAA,EACd,OAAAlO,IAAQ;AAAA,EACR,WAAAmO,IAAY;AAAA,EACZ,SAAAtI,IAAU;AAAA,EACV,aAAAuI;AAAA,EACA,QAAAtM;AAAA,EACA,WAAAuI;AAAA,EACA,QAAAC;AACF,MAA2B;AACzB,QAAM,EAAE,QAAA+D,EAAA,IAAWC,GAAA,GACbvB,IAASsB,KAAA,gBAAAA,EAAQ,QACjB,CAAC7E,GAAczL,CAAK,IAAIuP,GAAcW,CAAU,GAChD,CAACM,GAAQC,CAAS,IAAI3D,GAA8B,MAAM,oBAAI,KAAK,GAEnE4D,IAAcC,EAAQ,MAAMN,KAAejB,GAAWJ,CAAM,GAAG,CAACqB,GAAarB,CAAM,CAAC,GACpF4B,IAAaD,EAAQ,MAAMxB,GAAcH,CAAM,GAAG,CAACA,CAAM,CAAC,GAC1D6B,IAAexD;AAAA,IACnB,CAACzM,MACCA,KAAU,OAA8B,KAAKkH,EAAQlH,CAAwB;AAAA,IAC/E,CAACkH,CAAO;AAAA,EAAA,GAIJgJ,IAAQH;AAAA,IACZ,MAAMhJ,EAAO,IAAI,CAACK,GAAMlI,OAAW,EAAE,GAAGkI,GAAM,MAAMmD,GAAOrL,GAAOkI,EAAK,IAAI,IAAI;AAAA,IAC/E,CAACL,CAAM;AAAA,EAAA,GAEHoJ,IAAUJ,EAAQ,MAAMG,EAAM,OAAO,OAAQ,CAACN,EAAO,IAAIxI,EAAK,GAAG,CAAC,GAAG,CAAC8I,GAAON,CAAM,CAAC,GAEpFQ,IAAWL;AAAA,IACf,MACEnJ,GAAkB;AAAA,MAChB,MAAMX;AAAA,MACN,MAAAa;AAAA,MACA,QAAQqJ;AAAA,MACR,OAAA/Q;AAAA,MACA,QAAA4H;AAAA,MACA,WAAAC;AAAA,MACA,aAAAsI;AAAA,MACA,OAAAlO;AAAA,MACA,SAAS4O;AAAA,MACT,YAAYD;AAAA,MACZ,aAAaA;AAAA,MACb,QAAA7M;AAAA,IAAA,CACD;AAAA,IACH;AAAA,MACE8C;AAAA,MACAa;AAAA,MACAqJ;AAAA,MACA/Q;AAAA,MACA4H;AAAA,MACAC;AAAA,MACAsI;AAAA,MACAlO;AAAA,MACA4O;AAAA,MACAD;AAAA,MACA7M;AAAA,IAAA;AAAA,EACF,GAGIkE,IACJkI,MAAgB,gBAChBY,EAAQ,SAAS,KACjBA,EAAQ,MAAM,CAAA/I,MAAQA,EAAK,SAAS,KAAK,GAGrCD,IAAUgJ,EAAQ,KAAK,CAAA/I,MAAQA,EAAK,SAAS,KAAK,GAGlDlC,IAAS6K,EAAQ,MAAM;AAC3B,UAAMM,IAAQD,EAAS,QACpB,IAAI,CAACE,GAAQpR,OAAW,EAAE,QAAAoR,GAAQ,OAAApR,IAAQ,EAC1C,KAAK,CAACqR,GAAGC,MAAMD,EAAE,SAASC,EAAE,MAAM;AACrC,WAAO,EAAE,SAASH,EAAM,IAAI,OAAQjJ,EAAK,MAAM,GAAG,SAASiJ,EAAM,IAAI,CAAAjJ,MAAQA,EAAK,KAAK,EAAA;AAAA,EACzF,GAAG,CAACgJ,EAAS,OAAO,CAAC,GAEfjF,IAAOsB;AAAA,IACX,CAACkB,GAAW8C,MAAc;AACxB,YAAM,EAAE,MAAAlR,MAAS6Q;AACjB,UAAIzC,IAAIpO,EAAK,OAAO,KAAKoO,IAAIpO,EAAK,QAAQ,KAAKkR,IAAIlR,EAAK,MAAM,KAAKkR,IAAIlR,EAAK,SAAS;AACnF,eAAO;AACT,YAAM2E,IAAWe,GAAaC,EAAO,SAASmC,IAAeoJ,IAAI9C,CAAC;AAClE,aAAOzJ,IAAW,IAAI,OAAOgB,EAAO,QAAQhB,CAAQ;AAAA,IACtD;AAAA,IACA,CAACkM,GAAUlL,GAAQmC,CAAY;AAAA,EAAA,GAG3B+D,IAAUqB;AAAA,IACd,CAACvN,MAAA;;AAAmC;AAAA,QAClC,OAAO+Q,GAAaS,IAAAzK,EAAK/G,CAAK,MAAV,gBAAAwR,EAAc5J,EAAK;AAAA,QACvC,MAAMqJ,EAAQ,IAAI,CAAA/I,MAAQ;;AACxB,gBAAMpH,IAAQoG,IAASsK,KAAAzK,EAAK/G,CAAK,MAAV,gBAAAwR,GAActJ,EAAK,IAAI;AAC9C,iBAAO;AAAA,YACL,IAAIA,EAAK;AAAA,YACT,OAAOA,EAAK;AAAA,YACZ,MAAMA,EAAK;AAAA,YACX,OAAOpH,MAAU,OAAOmP,MAAW/H,EAAK,UAAU0I,GAAa9P,CAAK;AAAA,UAAA;AAAA,QAExE,CAAC;AAAA,MAAA;AAAA;AAAA,IAEH,CAACiG,GAAMa,GAAMqJ,GAASL,GAAaG,CAAY;AAAA,EAAA,GAG3C1E,IAAWkB;AAAA,IACf,CAACvN,MAAkB;AACjB,YAAM8N,IAAU5B,EAAQlM,CAAK;AAC7B,aAAO,GAAG8N,EAAQ,KAAK,KAAKA,EAAQ,KAAK,IAAI,CAAArG,MAAO,GAAGA,EAAI,KAAK,IAAIA,EAAI,KAAK,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA,IAC7F;AAAA,IACA,CAACyE,CAAO;AAAA,EAAA,GAGJI,IAAQuE;AAAA,IACZ,OAAO;AAAA,MACL,SAAS,CAACV,KAAUvI,GAAM,GAAGoJ,EAAM,IAAI,CAAA9I,MAAQA,EAAK,KAAK,CAAC;AAAA,MAC1D,MAAMnB,EAAK,IAAI,CAAAU,MAAO;AAAA,QACpBsJ,EAAatJ,EAAIG,CAAI,CAAC;AAAA,QACtB,GAAGoJ,EAAM,IAAI,CAAA9I,MAAQ;AACnB,gBAAMpH,IAAQoG,GAASO,EAAIS,EAAK,GAAG,CAAC;AACpC,iBAAOpH,MAAU,OAAOmP,MAAW/H,EAAK,UAAU0I,GAAa9P,CAAK;AAAA,QACtE,CAAC;AAAA,MAAA,CACF;AAAA,IAAA;AAAA,IAEH,CAACiG,GAAMa,GAAMuI,GAAQa,GAAOJ,GAAaG,CAAY;AAAA,EAAA,GAGjDnF,IAAOiF;AAAA,IACX,wBACG,KAAA,EACE,UAAA;AAAA,MAAA1I,IACC,gBAAAzH,EAAAE,IAAA,EACE,UAAA;AAAA,QAAA,gBAAAJ,EAACJ,IAAA,EAAU,MAAM8Q,EAAS,MAAM,OAAOA,EAAS,WAAW,MAAK,UAAS,SAAO,GAAA,CAAC;AAAA,QACjF,gBAAA1Q,EAACG,MAAa,MAAMuQ,EAAS,MAAM,OAAOA,EAAS,eAAe,MAAK,OAAA,CAAO;AAAA,MAAA,EAAA,CAChF,IAEA,gBAAAxQ,EAAAE,IAAA,EACE,UAAA;AAAA,QAAA,gBAAAJ,EAACJ,IAAA,EAAU,MAAM8Q,EAAS,MAAM,OAAOA,EAAS,WAAW,MAAK,QAAO,SAAO,GAAA,CAAC;AAAA,QAC9EA,EAAS,gBACR,gBAAA1Q,EAACJ,IAAA,EAAU,MAAM8Q,EAAS,MAAM,OAAOA,EAAS,YAAY,MAAK,QAAA,CAAQ;AAAA,QAE3E,gBAAA1Q,EAACG,MAAa,MAAMuQ,EAAS,MAAM,OAAOA,EAAS,eAAe,MAAK,SAAA,CAAS;AAAA,MAAA,GAClF;AAAA,MAIDA,EAAS,SAAS,SAChB/I,IACC,gBAAA3H;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWC,GAAO;AAAA,UAClB,IAAIyQ,EAAS;AAAA,UACb,IAAIA,EAAS;AAAA,UACb,IAAIA,EAAS,KAAK;AAAA,UAClB,IAAIA,EAAS,KAAK;AAAA,QAAA;AAAA,MAAA,IAGpB,gBAAA1Q;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWC,GAAO;AAAA,UAClB,IAAIyQ,EAAS,KAAK;AAAA,UAClB,IAAIA,EAAS,KAAK;AAAA,UAClB,IAAIA,EAAS;AAAA,UACb,IAAIA,EAAS;AAAA,QAAA;AAAA,MAAA;AAAA,MAIlBA,EAAS,MAAM,IAAI,CAAAO,MAClB,gBAAAjR;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,GAAGiR,EAAM;AAAA,UACT,WAAWhR,GAAO;AAAA,UAClB,OAAO,EAAE,MAAM,sBAAsB8K,EAAUkG,EAAM,IAAI,CAAC,qBAAA;AAAA,QAAqB;AAAA,QAH1E,QAAQA,EAAM,GAAG;AAAA,MAAA,CAKzB;AAAA,MAEAP,EAAS,KAAK,IAAI,CAAAQ,MACjB,gBAAAlR;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,WAAWC,GAAO;AAAA,UAClB,GAAGiR,EAAI;AAAA,UACP,GAAGA,EAAI;AAAA,UACP,OAAOA,EAAI;AAAA,UACX,QAAQA,EAAI;AAAA,UACZ,IAAI,KAAK,IAAI,GAAGA,EAAI,QAAQ,GAAGA,EAAI,SAAS,CAAC;AAAA,UAC7C,OAAO,EAAE,MAAMnG,EAAUmG,EAAI,IAAI,EAAA;AAAA,QAAE;AAAA,QAP9B,OAAOA,EAAI,GAAG,IAAIA,EAAI,KAAK;AAAA,MAAA,CASnC;AAAA,MAEAR,EAAS,MAAM,IAAI,CAAAO,MAClB,gBAAAjR;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,GAAGiR,EAAM;AAAA,UACT,WAAWhR,GAAO;AAAA,UAClB,OAAO,EAAE,QAAQ8K,EAAUkG,EAAM,IAAI,EAAA;AAAA,QAAE;AAAA,QAHlC,QAAQA,EAAM,GAAG;AAAA,MAAA,CAKzB;AAAA,MAMAR,EACE,OAAO,CAAA/I,MAAQA,EAAK,SAAS,KAAK,EAClC;AAAA,QAAQ,QACNgJ,EAAS,OAAOhJ,EAAK,GAAG,KAAK,CAAA,GAAI;AAAA,UAAI,CAAC/G,GAAOnB,GAAO2R,MACnDxQ,MAAUmP,KAAc,CAACqB,EAAK3R,IAAQ,CAAC,KAAK,CAAC2R,EAAK3R,IAAQ,CAAC,KACzD,gBAAAQ;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,WAAWC,GAAO;AAAA,cAClB,IAAIU,EAAM;AAAA,cACV,IAAIA,EAAM;AAAA,cACV,GAAG;AAAA,cACH,OAAO,EAAE,MAAMoK,EAAUrD,EAAK,IAAI,EAAA;AAAA,YAAE;AAAA,YAL/B,SAASA,EAAK,GAAG,IAAIlI,CAAK;AAAA,UAAA,IAO/B;AAAA,QAAA;AAAA,MACN;AAAA,IACF,GACJ;AAAA,IAEF,CAACkR,GAAUZ,GAAWnI,GAAc8I,CAAO;AAAA,EAAA,GAGvCnF,IAAWyB;AAAA,IACf,CAACvN,MAAkB;AACjB,UAAI,CAACiI,KAAWiJ,EAAS,aAAa,EAAG,QAAO;AAChD,YAAM,EAAE,MAAA7Q,MAAS6Q,GACXE,IAASF,EAAS,QAAQlR,CAAK,GAC/B2F,IAAMuL,EAAS,YAAY;AAEjC,aAAO/I,IACL,gBAAA3H;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWC,GAAO;AAAA,UAClB,GAAGJ,EAAK;AAAA,UACR,OAAOA,EAAK;AAAA,UACZ,GAAG+Q,IAASF,EAAS,YAAY,IAAIvL;AAAA,UACrC,QAAQuL,EAAS,YAAYvL,IAAM;AAAA,QAAA;AAAA,MAAA,IAGrC,gBAAAnF;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWC,GAAO;AAAA,UAClB,GAAGJ,EAAK;AAAA,UACR,QAAQA,EAAK;AAAA,UACb,GAAG+Q,IAASF,EAAS,YAAY,IAAIvL;AAAA,UACrC,OAAOuL,EAAS,YAAYvL,IAAM;AAAA,QAAA;AAAA,MAAA;AAAA,IAGxC;AAAA,IACA,CAACuL,GAAU/I,GAAcF,CAAO;AAAA,EAAA,GAG5B4D,IAAU0B;AAAA,IACd,CAACvN,MAAkB;AACjB,YAAM,EAAE,MAAAK,MAAS6Q,GACXE,IAASF,EAAS,QAAQlR,CAAK;AAErC,aACE,gBAAAU,EAAAE,IAAA,EACG,UAAA;AAAA,QAAA,CAACqH,KACA,gBAAAzH;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWC,GAAO;AAAA,YAClB,IAAI2Q;AAAA,YACJ,IAAIA;AAAA,YACJ,IAAI/Q,EAAK;AAAA,YACT,IAAIA,EAAK;AAAA,UAAA;AAAA,QAAA;AAAA,QAGZ4Q,EACE,OAAO,CAAA/I,MAAQA,EAAK,SAAS,KAAK,EAClC,IAAI,CAAAA,MAAQ;;AACX,gBAAM/G,MAAQqQ,KAAAN,EAAS,OAAOhJ,EAAK,GAAG,MAAxB,gBAAAsJ,GAA4BxR;AAC1C,iBAAOmB,KACL,gBAAAX;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,WAAWC,GAAO;AAAA,cAClB,IAAIU,GAAM;AAAA,cACV,IAAIA,GAAM;AAAA,cACV,GAAG;AAAA,cACH,OAAO,EAAE,MAAMoK,EAAUrD,EAAK,IAAI,EAAA;AAAA,YAAE;AAAA,YAL/BA,EAAK;AAAA,UAAA,IAOV;AAAA,QACN,CAAC;AAAA,MAAA,GACL;AAAA,IAEJ;AAAA,IACA,CAACgJ,GAAUD,GAAShJ,CAAO;AAAA,EAAA;AAG7B,SACE,gBAAAzH;AAAA,IAACiL;AAAA,IAAA;AAAA,MACC,OAAAlM;AAAA,MACA,aAAAmM;AAAA,MACA,cAAAC;AAAA,MACA,OAAAzL;AAAA,MACA,QAAA4H;AAAA,MACA,MAAA8D;AAAA,MACA,SAAAC;AAAA,MACA,UAAAC;AAAA,MACA,WAAW/E,EAAK;AAAA,MAChB,MAAAkF;AAAA,MACA,SAAAC;AAAA,MACA,QAAQ,CAAAlM,MAASkR,EAAS,QAAQlR,CAAK,KAAK,EAAE,GAAG,GAAG,GAAG,EAAA;AAAA,MACvD,UAAAqM;AAAA,MACA,OAAAC;AAAA,MACA,QAAQ;AAAA,QACN,SAAS0E,EAAM,IAAI,CAAA9I,OAAS,EAAE,IAAIA,EAAK,KAAK,OAAOA,EAAK,OAAO,MAAMA,EAAK,OAAO;AAAA,QACjF,QAAAwI;AAAA,QACA,UAAU,CAAAkB,MACRjB,EAAU,CAAAzP,MAAW;AACnB,gBAAMyM,IAAO,IAAI,IAAIzM,CAAO;AAC5B,iBAAIyM,EAAK,IAAIiE,CAAE,IAAGjE,EAAK,OAAOiE,CAAE,IAEvBZ,EAAM,SAAS9P,EAAQ,OAAO,KAAGyM,EAAK,IAAIiE,CAAE,GAC9CjE;AAAA,QACT,CAAC;AAAA,MAAA;AAAA,MAEL,WAAAnB;AAAA,MACA,QAAAC;AAAA,IAAA;AAAA,EAAA;AAGN,GAEAoF,KAAeC,GAAK5B,EAAc,GChX5B6B,KAAY,CAAC,EAAE,QAAAlK,GAAQ,GAAGmK,QAAkB;AAChD,QAAMpH,IAAQiG,EAAQ,MAAMhJ,EAAO,IAAI,CAAAK,OAAS,EAAE,GAAGA,GAAM,MAAM,OAAA,EAAkB,GAAG,CAACL,CAAM,CAAC;AAC9F,SAAO,gBAAArH,EAAC0P,IAAA,EAAgB,GAAG8B,GAAM,QAAQpH,GAAO;AAClD,GAEAqH,KAA6B,gBAAAH,GAAmB,gBAAA5S,GAAM6S,IAAW,WAAW,CAAC,GCLvEG,KAAY,CAAC,EAAE,QAAArK,GAAQ,GAAGmK,QAAkB;AAChD,QAAMnH,IAAQgG,EAAQ,MAAMhJ,EAAO,IAAI,CAAAK,OAAS,EAAE,GAAGA,GAAM,MAAM,OAAA,EAAkB,GAAG,CAACL,CAAM,CAAC;AAC9F,SAAO,gBAAArH,EAAC0P,IAAA,EAAgB,GAAG8B,GAAM,QAAQnH,GAAO;AAClD,GAEAsH,KAA6B,gBAAAL,GAAmB,gBAAA5S,GAAMgT,IAAW,WAAW,CAAC,GCHvEE,KAAW,CAAC,EAAE,QAAAvK,GAAQ,GAAGmK,QAAkB;AAC/C,QAAM7H,IAAO0G,EAAQ,MAAMhJ,EAAO,IAAI,CAAAK,OAAS,EAAE,GAAGA,GAAM,MAAM,MAAA,EAAiB,GAAG,CAACL,CAAM,CAAC;AAC5F,SAAO,gBAAArH,EAAC0P,IAAA,EAAgB,GAAG8B,GAAM,QAAQ7H,GAAM;AACjD,GAEAkI,KAA6B,gBAAAP,GAAmB,gBAAA5S,GAAMkT,IAAU,UAAU,CAAC,GCLrEE,KAAgB,CAACC,MAAiB,gBAAA/R,EAAC0P,IAAA,EAAgB,GAAGqC,GAAO,GAEnEC,KAA6B,gBAAAV;AAAA,EACb,gBAAA5S,GAAMoT,IAAe,eAAe;AACpD;;;;GCkBMG,KAAO,GAEPC,KAAY,KASZC,KAAW,CAAC;AAAA,EAChB,OAAApT;AAAA,EACA,aAAAmM;AAAA,EACA,MAAA3E;AAAA,EACA,SAAA6L,IAAU;AAAA,EACV,aAAAC;AAAA,EACA,aAAAC;AAAA,EACA,YAAAC;AAAA,EACA,QAAAjL,IAAS;AAAA,EACT,OAAOsI;AAAA,EACP,aAAAG;AAAA,EACA,WAAA/D;AAAA,EACA,QAAAC;AACF,MAAa;AACX,QAAM,EAAE,QAAA+D,EAAA,IAAWC,GAAA,GACb,CAAC9E,GAAczL,CAAK,IAAIuP,GAAcW,CAAU,GAChD,CAACM,GAAQC,CAAS,IAAI3D,GAA8B,MAAM,oBAAI,KAAK,GACnEgG,IAAOnC,EAAQ,MAAMvB,GAAWkB,KAAA,gBAAAA,EAAQ,MAAM,GAAG,CAACA,KAAA,gBAAAA,EAAQ,MAAM,CAAC,GACjEyC,IAAK1C,KAAeyC,GAEpBhC,IAAQH;AAAA,IACZ,MAAM9J,EAAK,IAAI,CAACmM,GAAOlT,OAAW,EAAE,GAAGkT,GAAO,MAAM7H,GAAOrL,GAAOkT,EAAM,IAAI,IAAI;AAAA,IAChF,CAACnM,CAAI;AAAA,EAAA,GAGDmK,IAAWL,EAAQ,MAAM;AAC7B,UAAMI,IAAUD,EAAM;AAAA,MACpB,CAAAkC,MAAS,CAACxC,EAAO,IAAIwC,EAAM,EAAE,KAAK,OAAO,SAASA,EAAM,KAAK,KAAKA,EAAM,QAAQ;AAAA,IAAA,GAE5EC,IAAQlC,EAAQ,OAAO,CAACmC,GAAKF,MAAUE,IAAMF,EAAM,OAAO,CAAC,GAC3DlQ,IAAK9C,IAAQ,GACb+C,IAAK6E,IAAS,GACdzE,IAAQ,KAAK,IAAI,GAAG,KAAK,IAAInD,GAAO4H,CAAM,IAAI,IAAI2K,KAAO,CAAC,GAC1DnP,IAAQsP,MAAY,UAAUvP,IAAQ,OAAO;AAEnD,QAAIF,IAAQ;AACZ,UAAMkQ,IAASpC,EAAQ,IAAI,CAAAiC,MAAS;AAClC,YAAM3P,IAAQ4P,IAAQ,IAAKD,EAAM,QAAQC,IAAS,KAAK,KAAK,IAAI,GAC1DpR,IAAQoB;AACd,aAAAA,KAASI,GACF,EAAE,GAAG2P,GAAO,OAAAnR,GAAO,KAAKoB,GAAO,OAAOgQ,IAAQ,IAAID,EAAM,QAAQC,IAAQ,EAAA;AAAA,IACjF,CAAC;AAED,WAAO,EAAE,IAAAnQ,GAAI,IAAAC,GAAI,OAAAI,GAAO,OAAAC,GAAO,OAAA6P,GAAO,QAAAE,EAAA;AAAA,EACxC,GAAG,CAACrC,GAAON,GAAQxQ,GAAO4H,GAAQ8K,CAAO,CAAC,GAEpCU,IAAUzC,EAAQ,MAAM;AAC5B,UAAM3F,IAAS,IAAI,KAAK,aAAasF,KAAA,gBAAAA,EAAQ,QAAQ;AAAA,MACnD,OAAO;AAAA,MACP,uBAAuB;AAAA,IAAA,CACxB;AACD,WAAO,CAAC+C,MAAkBrI,EAAO,OAAOqI,CAAK;AAAA,EAC/C,GAAG,CAAC/C,KAAA,gBAAAA,EAAQ,MAAM,CAAC,GAEb5E,IAAOiF,EAAQ,MAAM;AACzB,UAAM,EAAE,IAAA7N,GAAI,IAAAC,GAAI,OAAAI,GAAO,OAAAC,GAAO,QAAA+P,GAAQ,OAAAF,MAAUjC;AAEhD,6BACG,KAAA,EACE,UAAA;AAAA,MAAAmC,EAAO,IAAI,CAAAH,MACV,gBAAA1S;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,WAAWC,GAAO;AAAA,UAClB,GAAG2C,GAAQJ,GAAIC,GAAII,GAAOC,GAAO4P,EAAM,OAAOA,EAAM,GAAG;AAAA,UACvD,OAAO,EAAE,MAAM3H,EAAU2H,EAAM,IAAI,GAAG,aAAaG,EAAO,SAAS,IAAIX,KAAY,EAAA;AAAA,QAAE;AAAA,QAHhFQ,EAAM;AAAA,MAAA,CAKd;AAAA,MACAN,MAAY,WACX,gBAAAlS,EAAC,KAAA,EAAE,eAAW,IAAC,WAAWD,GAAO,QAC/B,UAAA;AAAA,QAAA,gBAAAD;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWC,GAAO;AAAA,YAClB,GAAGuC;AAAA,YACH,GAAG8P,IAAc7P,IAAK,IAAIA;AAAA,YAC1B,IAAG;AAAA,YACH,YAAW;AAAA,YAEV,UAAA4P,KAAeI,EAAGE,CAAK;AAAA,UAAA;AAAA,QAAA;AAAA,QAEzBL,KACC,gBAAAtS;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWC,GAAO;AAAA,YAClB,GAAGuC;AAAA,YACH,GAAGC,IAAK;AAAA,YACR,IAAG;AAAA,YACH,YAAW;AAAA,YAEV,UAAA6P;AAAA,UAAA;AAAA,QAAA;AAAA,MACH,EAAA,CAEJ;AAAA,IAAA,GAEJ;AAAA,EAEJ,GAAG,CAAC5B,GAAU0B,GAASC,GAAaC,GAAaG,CAAE,CAAC,GAE9ChH,IAAOsB;AAAA,IACX,CAACiG,GAAYC,MAAe;AAC1B,YAAM,EAAE,IAAAzQ,GAAI,IAAAC,GAAI,OAAAI,GAAO,OAAAC,GAAO,QAAA+P,MAAWnC,GACnCwC,IAAW,KAAK,MAAMF,IAAKxQ,GAAIyQ,IAAKxQ,CAAE;AAC5C,UAAIyQ,IAAWrQ,IAAQoP,MAAQiB,IAAWpQ,EAAO,QAAO;AAGxD,UAAIH,IAAQ,KAAK,MAAMqQ,IAAKxQ,GAAI,EAAEyQ,IAAKxQ,EAAG;AAC1C,MAAIE,IAAQ,MAAGA,KAAS,KAAK,KAAK;AAClC,YAAMnD,IAAQqT,EAAO,UAAU,CAAAH,MAAS/P,KAAS+P,EAAM,SAAS/P,IAAQ+P,EAAM,GAAG;AACjF,aAAOlT,IAAQ,IAAI,OAAOA;AAAA,IAC5B;AAAA,IACA,CAACkR,CAAQ;AAAA,EAAA,GAGLyC,IAAW,CAAC3T,MAAkB;AAClC,UAAMkT,IAAQhC,EAAS,OAAOlR,CAAK;AACnC,WAAO,GAAGiT,EAAGC,EAAM,KAAK,CAAC,KAAKI,EAAQJ,EAAM,KAAK,CAAC;AAAA,EACpD;AAEA,SACE,gBAAA1S;AAAA,IAACiL;AAAA,IAAA;AAAA,MACC,OAAAlM;AAAA,MACA,aAAAmM;AAAA,MACA,cAAAC;AAAA,MACA,OAAAzL;AAAA,MACA,QAAA4H;AAAA,MACA,MAAA8D;AAAA,MACA,SAAS,CAAA5L,MAAS;AAChB,cAAM,EAAE,IAAAgD,GAAI,IAAAC,GAAI,OAAAI,GAAO,OAAAC,GAAO,QAAA+P,MAAWnC,GACnCgC,IAAQG,EAAOrT,CAAK,GACpBiG,KAAUiN,EAAM,QAAQA,EAAM,OAAO,GACrCU,IAAQ7Q,GAAM,GAAG,GAAG0P,IAAMxM,CAAM;AACtC,eACE,gBAAAzF;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWC,GAAO;AAAA,YAClB,GAAG2C,GAAQJ,IAAK4Q,EAAM,GAAG3Q,IAAK2Q,EAAM,GAAGvQ,GAAOC,GAAO4P,EAAM,OAAOA,EAAM,GAAG;AAAA,YAC3E,OAAO,EAAE,MAAM3H,EAAU2H,EAAM,IAAI,GAAG,aAAaR,GAAA;AAAA,UAAU;AAAA,QAAA;AAAA,MAGnE;AAAA,MACA,WAAWxB,EAAS,OAAO;AAAA,MAC3B,MAAAjF;AAAA,MACA,SAAS,CAAAjM,MAAS;AAChB,cAAMkT,IAAQhC,EAAS,OAAOlR,CAAK;AACnC,eAAO;AAAA,UACL,MAAM,CAAC,EAAE,IAAIkT,EAAM,IAAI,OAAOA,EAAM,OAAO,OAAOS,EAAS3T,CAAK,GAAG,MAAMkT,EAAM,MAAM;AAAA,QAAA;AAAA,MAEzF;AAAA,MACA,QAAQ,CAAAlT,MAAS;AACf,cAAM,EAAE,IAAAgD,GAAI,IAAAC,GAAI,OAAAI,GAAO,QAAAgQ,MAAWnC,GAC5BgC,IAAQG,EAAOrT,CAAK;AAE1B,eAAO+C,GAAMC,GAAIC,GAAII,IAAQoP,KAAOS,EAAM,QAAQA,EAAM,OAAO,CAAC;AAAA,MAClE;AAAA,MACA,aAAY;AAAA,MACZ,UAAU,CAAAlT,MAAS,GAAGkR,EAAS,OAAOlR,CAAK,EAAE,KAAK,KAAK2T,EAAS3T,CAAK,CAAC;AAAA,MACtE,OAAO;AAAA,QACL,SAAS,CAACT,GAAOwT,CAAU;AAAA,QAC3B,MAAM/B,EAAM,IAAI,CAAAkC,MAAS;AAAA,UACvBA,EAAM;AAAA,UACN,OAAO,SAASA,EAAM,KAAK,IAAID,EAAGC,EAAM,KAAK,IAAI;AAAA,QAAA,CAClD;AAAA,MAAA;AAAA,MAEH,QAAQ;AAAA,QACN,SAASlC,EAAM,IAAI,CAAAkC,OAAU,EAAE,IAAIA,EAAM,IAAI,OAAOA,EAAM,OAAO,MAAMA,EAAM,OAAO;AAAA,QACpF,QAAAxC;AAAA,QACA,UAAU,CAAAkB,MACRjB,EAAU,CAAAzP,MAAW;AACnB,gBAAMyM,IAAO,IAAI,IAAIzM,CAAO;AAC5B,iBAAIyM,EAAK,IAAIiE,CAAE,IAAGjE,EAAK,OAAOiE,CAAE,IACvBZ,EAAM,SAAS9P,EAAQ,OAAO,KAAGyM,EAAK,IAAIiE,CAAE,GAC9CjE;AAAA,QACT,CAAC;AAAA,MAAA;AAAA,MAEL,WAAAnB;AAAA,MACA,QAAAC;AAAA,IAAA;AAAA,EAAA;AAGN,GAEAoH,KAA6B,gBAAA/B,GAAmB,gBAAA5S,GAAMyT,IAAU,UAAU,CAAC,GCjO9DmB,KAAW,CACtB5T,GACA4H,GACAoB,GACA,EAAE,KAAA5G,IAAM,IAAI,OAAAiH,IAAQ,IAAI,QAAAwK,IAAS,GAAA,IAAO,CAAA,MAC3B;AACb,QAAMzK,IAAO,KAAK,IAAI,IAAI,GAAGJ,EAAW,IAAI5J,EAAU,CAAC,IAAI;AAE3D,SAAO;AAAA,IACL,MAAAgK;AAAA,IACA,KAAAhH;AAAA,IACA,OAAO,KAAK,IAAIgH,IAAO,GAAGpJ,IAAQqJ,CAAK;AAAA,IACvC,QAAQ,KAAK,IAAIjH,IAAM,GAAGwF,IAASiM,CAAM;AAAA,IACzC,OAAO,KAAK,IAAI,GAAG7T,IAAQqJ,IAAQD,CAAI;AAAA,IACvC,QAAQ,KAAK,IAAI,GAAGxB,IAASxF,IAAMyR,CAAM;AAAA,EAAA;AAE7C,GAGaC,KAAY,CAACC,GAAgBC,MACxC,KAAK,IAAI,GAAG,KAAK,MAAMD,KAAUC,IAAa,KAAK,GAAG,CAAC,GCd5CC,KAAe,CAC1BnT,GACA8N,IAAO,OACU;AACjB,QAAMsF,wBAAc,IAAA,GACdrP,IAAM,CAAC8J,GAAgBpH,MAAgB,GAAGoH,CAAM,IAAIpH,CAAG;AAE7D,SAAAzG,EAAO,QAAQ,CAACG,GAAOnB,MAAU;AAC/B,QAAI,CAAC,OAAO,SAASmB,EAAM,CAAC,KAAK,CAAC,OAAO,SAASA,EAAM,CAAC,EAAG;AAC5D,UAAMyQ,IAAK7M,EAAI,KAAK,MAAM5D,EAAM,IAAI2N,CAAI,GAAG,KAAK,MAAM3N,EAAM,IAAI2N,CAAI,CAAC,GAC/DuF,IAASD,EAAQ,IAAIxC,CAAE;AAC7B,IAAIyC,IAAQA,EAAO,KAAKrU,CAAK,IACxBoU,EAAQ,IAAIxC,GAAI,CAAC5R,CAAK,CAAC;AAAA,EAC9B,CAAC,GAEM;AAAA,IACL,SAAS,CAACyO,GAAG8C,GAAGrO,MAAW;AACzB,YAAMoR,IAAQ,KAAK,KAAKpR,IAAS4L,CAAI,GAC/BD,IAAS,KAAK,MAAMJ,IAAIK,CAAI,GAC5BrH,IAAM,KAAK,MAAM8J,IAAIzC,CAAI;AAC/B,UAAIyF,IAAsB,MACtBC,IAAetR,IAASA;AAE5B,eAASzB,IAAK,CAAC6S,GAAO7S,KAAM6S,GAAO7S,KAAM;AACvC,iBAASgT,IAAK,CAACH,GAAOG,KAAMH,GAAOG,KAAM;AACvC,qBAAWzU,KAASoU,EAAQ,IAAIrP,EAAI8J,IAASpN,GAAIgG,IAAMgN,CAAE,CAAC,KAAK,CAAA,GAAI;AACjE,kBAAMf,KAAY1S,EAAOhB,CAAK,EAAE,IAAIyO,MAAM,KAAKzN,EAAOhB,CAAK,EAAE,IAAIuR,MAAM;AACvE,YAAImC,KAAYc,MACdA,IAAed,GACfa,IAAOvU;AAAA,UAEX;AAEJ,aAAOuU;AAAA,IACT;AAAA,EAAA;AAEJ;;;GCOMG,KAAS,EAAE,OAAO,GAAG,KAAK,GAAG,KAAK,GAAA,GAElCC,KAAa,IAQbC,KAAc,CAAC;AAAA,EACnB,OAAArV;AAAA,EACA,aAAAmM;AAAA,EACA,QAAA7D;AAAA,EACA,QAAAsI;AAAA,EACA,QAAA0E;AAAA,EACA,WAAAC;AAAA,EACA,QAAAhN,IAAS;AAAA,EACT,OAAOsI;AAAA,EACP,SAAApI;AAAA,EACA,SAAA+M;AAAA,EACA,WAAAvI;AAAA,EACA,QAAAC;AACF,MAAa;AACX,QAAM,EAAE,QAAA+D,EAAA,IAAWC,GAAA,GACb,CAAC9E,GAAczL,CAAK,IAAIuP,GAAcW,CAAU,GAChD,CAACM,GAAQC,CAAS,IAAI3D,GAA8B,MAAM,oBAAI,KAAK,GAEnEgG,IAAOnC,EAAQ,MAAMvB,GAAWkB,KAAA,gBAAAA,EAAQ,MAAM,GAAG,CAACA,KAAA,gBAAAA,EAAQ,MAAM,CAAC,GACjEwE,IAAUnE,EAAQ,MAAMxB,GAAcmB,KAAA,gBAAAA,EAAQ,MAAM,GAAG,CAACA,KAAA,gBAAAA,EAAQ,MAAM,CAAC,GACvEyE,IAAKjN,KAAWgL,GAChBkC,IAAKH,KAAW/B,GAEhBhC,IAAQH;AAAA,IACZ,MAAMhJ,EAAO,IAAI,CAACK,GAAMlI,OAAW,EAAE,GAAGkI,GAAM,MAAMmD,GAAOrL,GAAOkI,EAAK,IAAI,IAAI;AAAA,IAC/E,CAACL,CAAM;AAAA,EAAA,GAIHsN,IAAOtE;AAAA,IACX,MACEG,EACG,OAAO,CAAA9I,MAAQ,CAACwI,EAAO,IAAIxI,EAAK,EAAE,CAAC,EACnC;AAAA,MAAQ,CAAAA,MACPA,EAAK,KACF,OAAO,OAAS,OAAO,SAAS/G,EAAM,CAAC,KAAK,OAAO,SAASA,EAAM,CAAC,CAAC,EACpE,IAAI,CAAAA,OAAU,EAAE,GAAGA,GAAO,QAAQ+G,IAAO;AAAA,IAAA,EAE7C,KAAK,CAACmJ,GAAGC,MAAMD,EAAE,IAAIC,EAAE,KAAKD,EAAE,IAAIC,EAAE,CAAC;AAAA,IAC1C,CAACN,GAAON,CAAM;AAAA,EAAA,GAGVQ,IAAWL,EAAQ,MAAM;AAC7B,UAAMuE,IAAU5P,GAAW,GAAGW,GAAOgP,EAAK,IAAI,CAAAhU,MAASA,EAAM,CAAC,CAAC,CAAC,GAC1DkU,IAAU7P,GAAW,GAAGW,GAAOgP,EAAK,IAAI,CAAAhU,MAASA,EAAM,CAAC,CAAC,CAAC,GAC1DmU,IAAS7V,GAAM4V,EAAQ,CAAC,GAAGA,EAAQ,CAAC,GAAGrB,GAAUlM,GAAQ,EAAK,CAAC,GAC/DzH,IAAOyT,GAAS5T,GAAO4H,GAAQwN,EAAO,IAAIN,CAAO,GAAG,EAAE,OAAO,GAAA,CAAI,GACjEvG,IAAIzK,GAAYoR,GAAS,CAAC/U,EAAK,MAAMA,EAAK,KAAK,CAAC,GAChDkR,IAAIvN,GAAYqR,GAAS,CAAChV,EAAK,QAAQA,EAAK,GAAG,CAAC,GAEhDkV,IAAQrP,GAAOiP,EAAK,IAAI,CAAAhU,MAASA,EAAM,IAAI,CAAC,GAC5C,CAACqU,GAASC,CAAO,IAAItP,GAAOoP,CAAK,GACjCrS,IAAS,CAACgL,MACdA,MAAS,UAAa,CAAC,OAAO,SAASA,CAAI,KAAKqH,EAAM,WAAW,IAC7Db,GAAO,QACPe,MAAYD,KACTd,GAAO,MAAMA,GAAO,OAAO,IAC5B,KAAK;AAAA,MACHA,GAAO,OAAO,KACVxG,IAAOsH,MAAYC,IAAUD,MAAad,GAAO,OAAO,IAAIA,GAAO,OAAO;AAAA,IAAA,GAGlFgB,IAASP,EAAK,IAAI,CAAAhU,OAAU;AAAA,MAChC,GAAGA;AAAA,MACH,IAAIsN,EAAEtN,EAAM,CAAC;AAAA,MACb,IAAIoQ,EAAEpQ,EAAM,CAAC;AAAA,MACb,GAAG+B,EAAO/B,EAAM,IAAI;AAAA,IAAA,EACpB;AAEF,WAAO;AAAA,MACL,MAAAd;AAAA,MACA,QAAAqV;AAAA,MACA,OAAOvB,GAAauB,EAAO,IAAI,CAAAvU,OAAU,EAAE,GAAGA,EAAM,IAAI,GAAGA,EAAM,GAAA,EAAK,CAAC;AAAA,MACvE,QAAQ1B,GAAM2V,EAAQ,CAAC,GAAGA,EAAQ,CAAC,GAAGpB,GAAU3T,EAAK,OAAO,EAAI,CAAC,EAAE,IAAI,CAAAS,OAAU;AAAA,QAC/E,UAAU2N,EAAE3N,CAAK;AAAA,QACjB,OAAOkU,EAAQlU,CAAK;AAAA,MAAA,EACpB;AAAA,MACF,QAAQwU,EAAO,IAAI,CAAAxU,OAAU,EAAE,UAAUyQ,EAAEzQ,CAAK,GAAG,OAAOkU,EAAQlU,CAAK,IAAI;AAAA,IAAA;AAAA,EAE/E,GAAG,CAACqU,GAAMjV,GAAO4H,GAAQkN,CAAO,CAAC,GAE3BpJ,IAAOiF;AAAA,IACX,wBACG,KAAA,EACC,UAAA;AAAA,MAAA,gBAAArQ,EAACJ,IAAA,EAAU,MAAM8Q,EAAS,MAAM,OAAOA,EAAS,QAAQ,MAAK,QAAO,SAAO,GAAA,CAAC;AAAA,MAC5E,gBAAA1Q,EAACJ,IAAA,EAAU,MAAM8Q,EAAS,MAAM,OAAOA,EAAS,QAAQ,MAAK,UAAS,SAAO,GAAA,CAAC;AAAA,MAC7EA,EAAS,OAAO,IAAI,CAAC/P,GAAOnB,MAC3B,gBAAAQ;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,WAAWC,GAAO;AAAA,UAClB,IAAIU,EAAM;AAAA,UACV,IAAIA,EAAM;AAAA,UACV,GAAGA,EAAM;AAAA,UACT,OAAO;AAAA,YACL,MAAM,sBAAsBoK,EAAUpK,EAAM,OAAO,IAAI,CAAC;AAAA,YACxD,QAAQoK,EAAUpK,EAAM,OAAO,IAAI;AAAA,UAAA;AAAA,QACrC;AAAA,QARKnB;AAAA,MAAA,CAUR;AAAA,IAAA,GACH;AAAA,IAEF,CAACkR,CAAQ;AAAA,EAAA,GAGLjF,IAAOsB;AAAA,IACX,CAACiG,GAAYC,MAAevC,EAAS,MAAM,QAAQsC,GAAIC,GAAIkB,EAAU;AAAA,IACrE,CAACzD,CAAQ;AAAA,EAAA,GAGLyC,IAAW,CAAC3T,MAAkB;AAClC,UAAMmB,IAAQ+P,EAAS,OAAOlR,CAAK;AACnC,WAAO;AAAA,MACL,OAAOmB,EAAM,SAASA,EAAM,OAAO;AAAA,MACnC,MAAM;AAAA,QACJ,EAAE,IAAI,UAAU,OAAOA,EAAM,OAAO,OAAO,OAAO,IAAI,MAAMA,EAAM,OAAO,KAAA;AAAA,QACzE,EAAE,IAAI,KAAK,OAAOgP,GAAQ,OAAO8E,EAAG9T,EAAM,CAAC,EAAA;AAAA,QAC3C,EAAE,IAAI,KAAK,OAAO0T,GAAQ,OAAOK,EAAG/T,EAAM,CAAC,EAAA;AAAA,QAC3C,GAAIA,EAAM,SAAS,UAAa2T,IAC5B,CAAC,EAAE,IAAI,QAAQ,OAAOA,GAAW,OAAO9B,EAAK7R,EAAM,IAAI,EAAA,CAAG,IAC1D,CAAA;AAAA,MAAC;AAAA,IACP;AAAA,EAEJ;AAEA,SACE,gBAAAX;AAAA,IAACiL;AAAA,IAAA;AAAA,MACC,OAAAlM;AAAA,MACA,aAAAmM;AAAA,MACA,cAAAC;AAAA,MACA,OAAAzL;AAAA,MACA,QAAA4H;AAAA,MACA,MAAA8D;AAAA,MACA,SAAS,CAAA5L,MAAS;AAChB,cAAMmB,IAAQ+P,EAAS,OAAOlR,CAAK;AACnC,eACE,gBAAAQ;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWC,GAAO;AAAA,YAClB,IAAIU,EAAM;AAAA,YACV,IAAIA,EAAM;AAAA,YACV,GAAGA,EAAM,IAAI;AAAA,YACb,OAAO,EAAE,QAAQoK,EAAUpK,EAAM,OAAO,IAAI,EAAA;AAAA,UAAE;AAAA,QAAA;AAAA,MAGpD;AAAA,MACA,WAAW+P,EAAS,OAAO;AAAA,MAC3B,MAAAjF;AAAA,MACA,SAAS0H;AAAA,MACT,QAAQ,CAAA3T,OAAU,EAAE,GAAGkR,EAAS,OAAOlR,CAAK,EAAE,IAAI,GAAGkR,EAAS,OAAOlR,CAAK,EAAE,GAAA;AAAA,MAC5E,UAAU,CAAAA,MAAS;AACjB,cAAMmB,IAAQ+P,EAAS,OAAOlR,CAAK;AACnC,eAAO,GAAGmB,EAAM,QAAQ,GAAGA,EAAM,KAAK,OAAO,EAAE,GAAGA,EAAM,OAAO,KAAK,KAAKgP,CAAM,IAAI8E,EAAG9T,EAAM,CAAC,CAAC,KAAK0T,CAAM,IAAIK,EAAG/T,EAAM,CAAC,CAAC;AAAA,MAC1H;AAAA,MACA,OAAO;AAAA,QACL,SAAS,CAAC5B,GAAO4Q,GAAQ0E,CAAM;AAAA,QAC/B,MAAMM,EAAK,IAAI,OAAS,CAAChU,EAAM,SAASA,EAAM,OAAO,OAAO8T,EAAG9T,EAAM,CAAC,GAAG+T,EAAG/T,EAAM,CAAC,CAAC,CAAC;AAAA,MAAA;AAAA,MAEvF,QAAQ;AAAA,QACN,SAAS6P,EAAM,IAAI,CAAA9I,OAAS,EAAE,IAAIA,EAAK,IAAI,OAAOA,EAAK,OAAO,MAAMA,EAAK,OAAO;AAAA,QAChF,QAAAwI;AAAA,QACA,UAAU,CAAAkB,MACRjB,EAAU,CAAAzP,MAAW;AACnB,gBAAMyM,IAAO,IAAI,IAAIzM,CAAO;AAC5B,iBAAIyM,EAAK,IAAIiE,CAAE,IAAGjE,EAAK,OAAOiE,CAAE,IACvBZ,EAAM,SAAS9P,EAAQ,OAAO,KAAGyM,EAAK,IAAIiE,CAAE,GAC9CjE;AAAA,QACT,CAAC;AAAA,MAAA;AAAA,MAEL,WAAAnB;AAAA,MACA,QAAAC;AAAA,IAAA;AAAA,EAAA;AAGN,GAEAkJ,KAA6B,gBAAA7D;AAAA,EACb,gBAAA5S,GAAM0V,IAAa,aAAa;AAChD;;;;GCzMMgB,KAAU,GACVC,KAAgB,IAEhBC,KAAc,KAGdC,KAAU,CAACjQ,GAAyB2B,GAAaoH,MAAkC;;AACvF,QAAM/N,KAAQ0Q,IAAA1L,EAAO2B,CAAG,MAAV,gBAAA+J,EAAc3C;AAC5B,SAAO,OAAO/N,KAAU,YAAY,OAAO,SAASA,CAAK,IAAIA,IAAQ;AACvE,GAGMkV,KAAU,CAACxF,MAA8BA,EAAO,IAAI,CAACzQ,GAAGC,MAAU,OAAOA,CAAK,CAAC,GAS/EiW,KAAU,CAAC;AAAA,EACf,OAAA1W;AAAA,EACA,aAAAmM;AAAA,EACA,SAAAM;AAAA,EACA,MAAA3E;AAAA,EACA,QAAAvB;AAAA,EACA,YAAAiN;AAAA,EACA,MAAAzH,IAAO;AAAA,EACP,QAAAxD,IAAS;AAAA,EACT,OAAOsI;AAAA,EACP,aAAAG;AAAA,EACA,WAAA/D;AAAA,EACA,QAAAC;AACF,MAAa;AACX,QAAM,EAAE,QAAA+D,EAAA,IAAWC,GAAA,GACb,CAAC9E,GAAczL,CAAK,IAAIuP,GAAcW,CAAU,GAChD4C,IAAOnC,EAAQ,MAAMvB,GAAWkB,KAAA,gBAAAA,EAAQ,MAAM,GAAG,CAACA,KAAA,gBAAAA,EAAQ,MAAM,CAAC,GACjEyC,IAAK1C,KAAeyC,GAEpBkD,IAAa,cAAcvJ,GAAA,EAAQ,QAAQ,MAAM,EAAE,CAAC,IAEpDuE,IAAWL,EAAQ,MAAM;AAE7B,UAAMxQ,IAAO,EAAE,MADF,KAAK,IAAIH,IAAQ,KAAK,KAAK,IAAI,IAAI,GAAGmH,EAAK,IAAI/H,EAAU,CAAC,IAAI,EAAE,GACxD,KAAK,GAAG,OAAOY,IAAQ,GAAG,QAAQ4H,IAAS,KAAK+N,GAAA,GAC/DpH,IAAI/J,GAAUsR,GAAQhK,CAAO,GAAG,CAAC3L,EAAK,MAAMA,EAAK,KAAK,GAAG;AAAA,MAC7D,cAAc;AAAA,MACd,cAAc;AAAA,IAAA,CACf,GACKkR,IAAI7M,GAAUsR,GAAQ3O,CAAI,GAAG,CAAChH,EAAK,KAAKA,EAAK,MAAM,GAAG;AAAA,MAC1D,cAAc;AAAA,MACd,cAAc;AAAA,IAAA,CACf,GACK,CAAC6E,GAAK/E,CAAG,IAAIgG,GAAOD,GAAOJ,EAAO,KAAA,CAAM,CAAC,GAEzCqQ,IAAM,CAACrV,MACXA,MAAU,OACN,OACAX,MAAQ+E,IACN,KACA0Q,MAAY9U,IAAQoE,MAAQ/E,IAAM+E,MAAS,MAAM0Q,KAEnDQ,IAAQ/O,EAAK;AAAA,MAAQ,CAACI,GAAK4O,MAC/BrK,EAAQ,IAAI,CAAC6C,GAAQyH,MAAgB;AACnC,cAAMxV,IAAQiV,GAAQjQ,GAAQuQ,GAAUC,CAAW;AACnD,eAAO;AAAA,UACL,KAAA7O;AAAA,UACA,QAAAoH;AAAA,UACA,KAAK,GAAGwH,CAAQ,IAAIC,CAAW;AAAA,UAC/B,OAAAxV;AAAA,UACA,GAAG2N,EAAE,OAAO6H,CAAW,CAAC;AAAA,UACxB,GAAG/E,EAAE,OAAO8E,CAAQ,CAAC;AAAA,UACrB,OAAO5H,EAAE;AAAA,UACT,QAAQ8C,EAAE;AAAA,UACV,KAAK4E,EAAIrV,CAAK;AAAA,QAAA;AAAA,MAElB,CAAC;AAAA,IAAA;AAGH,WAAO,EAAE,MAAAT,GAAM,GAAAoO,GAAG,GAAA8C,GAAG,OAAA6E,GAAO,KAAAlR,GAAK,KAAA/E,EAAA;AAAA,EACnC,GAAG,CAAC6L,GAAS3E,GAAMvB,GAAQ5F,GAAO4H,CAAM,CAAC,GAEnCyO,IAAQhL,EAAUD,CAAI,GAEtBM,IAAOiF,EAAQ,MAAM;AACzB,UAAM,EAAE,MAAAxQ,GAAM,GAAAoO,GAAG,GAAA8C,GAAG,OAAA6E,MAAUlF,GACxBsF,IAAUvD,EAAG/B,EAAS,GAAG,GACzBuF,IAAapW,EAAK,QAAQf,GAAWkX,CAAO,IAAI,GAChDE,IAAclX;AAAA,MAClBwM,EAAQ,IAAI,CAAC6C,GAAQ7O,OAAW;AAAA,QAC9B,UAAUyO,EAAE,OAAOzO,CAAK,CAAC,IAAIyO,EAAE,YAAY;AAAA,QAC3C,OAAOI;AAAA,MAAA,EACP;AAAA,IAAA;AAGJ,6BACG,KAAA,EACE,UAAA;AAAA,MAAAuH,EAAM,IAAI,CAAAtH,MACT,gBAAAtO;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,WAAWsO,EAAK,QAAQ,OAAOrO,GAAO,QAAQ;AAAA,UAC9C,GAAGqO,EAAK;AAAA,UACR,GAAGA,EAAK;AAAA,UACR,OAAOA,EAAK;AAAA,UACZ,QAAQA,EAAK;AAAA,UACb,IAAI;AAAA,UACJ,OACEA,EAAK,QAAQ,OACT,SACA,EAAE,MAAM,sBAAsByH,CAAK,IAAIzH,EAAK,GAAG,2BAAA;AAAA,QAA2B;AAAA,QAV3EA,EAAK;AAAA,MAAA,CAab;AAAA,wBACA,KAAA,EAAE,eAAW,IAAC,WAAWrO,GAAO,QAC9B,UAAA;AAAA,QAAA4G,EAAK,IAAI,CAACI,GAAK4O,MACd,gBAAA7V;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,GAAGH,EAAK,OAAO;AAAA,YACf,GAAGkR,EAAE,OAAO8E,CAAQ,CAAC,IAAI9E,EAAE,YAAY;AAAA,YACvC,IAAG;AAAA,YACH,YAAW;AAAA,YAEV,UAAAtR,GAASwH,GAAKpH,EAAK,OAAO,EAAE;AAAA,UAAA;AAAA,UANxBgW;AAAA,QAAA,CAQR;AAAA,QACAK,EAAY,IAAI,CAAA9W,wBACd,QAAA,EAAyB,GAAGA,EAAK,UAAU,GAAGS,EAAK,SAAS,IAAI,YAAW,UACzE,YAAK,MAAA,GADGT,EAAK,QAEhB,CACD;AAAA,MAAA,GACH;AAAA,MAEA,gBAAAY,EAAC,QAAA,EACC,UAAA,gBAAAE,EAAC,kBAAA,EAAe,IAAIwV,GAClB,UAAA;AAAA,QAAA,gBAAA1V;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,QAAO;AAAA,YACP,OAAO;AAAA,cACL,WAAW,sBAAsB+V,CAAK,IAAIX,EAAO;AAAA,YAAA;AAAA,UACnD;AAAA,QAAA;AAAA,QAEF,gBAAApV,EAAC,UAAK,QAAO,QAAO,OAAO,EAAE,WAAW+V,IAAM,CAAG;AAAA,MAAA,EAAA,CACnD,EAAA,CACF;AAAA,wBAEC,KAAA,EAAE,eAAW,IAAC,WAAW9V,GAAO,QAC/B,UAAA;AAAA,QAAA,gBAAAD;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,GAAGiW,IAAaX;AAAA,YAChB,GAAGhO,IAAS;AAAA,YACZ,OAAOgO;AAAA,YACP,QAAQ;AAAA,YACR,IAAI;AAAA,YACJ,OAAO,EAAE,MAAM,QAAQI,CAAU,IAAA;AAAA,UAAI;AAAA,QAAA;AAAA,0BAEtC,QAAA,EAAK,GAAGO,IAAaX,KAAc,GAAG,GAAGhO,IAAS,IAAI,IAAG,UAAS,YAAW,OAC3E,UAAAmL,EAAG/B,EAAS,GAAG,GAClB;AAAA,QACA,gBAAA1Q,EAAC,QAAA,EAAK,GAAGH,EAAK,OAAO,GAAGyH,IAAS,IAAI,IAAG,UAAS,YAAW,OACzD,UAAA0O,EAAA,CACH;AAAA,MAAA,EAAA,CACF;AAAA,IAAA,GACF;AAAA,EAEJ,GAAG,CAACtF,GAAUlF,GAAS3E,GAAMkP,GAAOL,GAAYpO,GAAQmL,CAAE,CAAC,GAErDhH,IAAOsB;AAAA,IACX,CAACiG,GAAYC,MAAe;AAC1B,YAAM,EAAE,MAAApT,GAAM,GAAAoO,GAAG,GAAA8C,EAAA,IAAML;AACvB,UAAIsC,IAAKnT,EAAK,QAAQmT,IAAKnT,EAAK,SAASoT,IAAKpT,EAAK,OAAOoT,IAAKpT,EAAK,OAAQ,QAAO;AACnF,YAAMwO,IAASJ,EAAE,QAAQ+E,CAAE,GACrB/L,IAAM8J,EAAE,QAAQkC,CAAE;AACxB,aAAO5E,IAAS,KAAKpH,IAAM,IAAI,OAAOA,IAAMuE,EAAQ,SAAS6C;AAAA,IAC/D;AAAA,IACA,CAACqC,GAAUlF,EAAQ,MAAM;AAAA,EAAA,GAGrB2K,IAAO,CAAC3W,MAAkB;AAC9B,UAAM8O,IAAOoC,EAAS,MAAMlR,CAAK;AACjC,WAAO,EAAE,MAAA8O,GAAM,OAAOA,EAAK,UAAU,OAAO,MAAMmE,EAAGnE,EAAK,KAAK,EAAA;AAAA,EACjE;AAEA,SACE,gBAAAtO;AAAA,IAACiL;AAAA,IAAA;AAAA,MACC,OAAAlM;AAAA,MACA,aAAAmM;AAAA,MACA,cAAAC;AAAA,MACA,OAAAzL;AAAA,MACA,QAAA4H;AAAA,MACA,MAAA8D;AAAA,MACA,SAAS,CAAA5L,MAAS;AAChB,cAAM8O,IAAOoC,EAAS,MAAMlR,CAAK;AACjC,eACE,gBAAAQ;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWC,GAAO;AAAA,YAClB,GAAGqO,EAAK,IAAI;AAAA,YACZ,GAAGA,EAAK,IAAI;AAAA,YACZ,OAAOA,EAAK,QAAQ;AAAA,YACpB,QAAQA,EAAK,SAAS;AAAA,YACtB,IAAI;AAAA,UAAA;AAAA,QAAA;AAAA,MAGV;AAAA,MACA,WAAWoC,EAAS,MAAM;AAAA,MAC1B,SAASlF,EAAQ;AAAA,MACjB,MAAAC;AAAA,MACA,SAAS,CAAAjM,MAAS;AAChB,cAAM,EAAE,MAAA8O,GAAM,OAAAhO,MAAU6V,EAAK3W,CAAK;AAClC,eAAO;AAAA,UACL,OAAO,GAAG8O,EAAK,GAAG,MAAMA,EAAK,MAAM;AAAA,UACnC,MAAM,CAAC,EAAE,IAAI,SAAS,OAAOiE,GAAY,OAAAjS,GAAO,MAAAwK,EAAA,CAAM;AAAA,QAAA;AAAA,MAE1D;AAAA,MACA,QAAQ,CAAAtL,MAAS;AACf,cAAM8O,IAAOoC,EAAS,MAAMlR,CAAK;AACjC,eAAO,EAAE,GAAG8O,EAAK,IAAIA,EAAK,QAAQ,GAAG,GAAGA,EAAK,IAAIA,EAAK,SAAS,EAAA;AAAA,MACjE;AAAA,MACA,UAAU,CAAA9O,MAAS;AACjB,cAAM,EAAE,MAAA8O,GAAM,OAAAhO,MAAU6V,EAAK3W,CAAK;AAClC,eAAO,GAAG8O,EAAK,GAAG,KAAKA,EAAK,MAAM,KAAKiE,CAAU,IAAIjS,CAAK;AAAA,MAC5D;AAAA,MACA,OAAO;AAAA,QACL,SAAS,CAACvB,GAAO,GAAGyM,CAAO;AAAA,QAC3B,MAAM3E,EAAK,IAAI,CAACI,GAAK4O,MAAa;AAAA,UAChC5O;AAAA,UACA,GAAGuE,EAAQ,IAAI,CAACjM,GAAGuW,MAAgB;AACjC,kBAAMxV,IAAQiV,GAAQjQ,GAAQuQ,GAAUC,CAAW;AACnD,mBAAOxV,MAAU,OAAO,MAAMmS,EAAGnS,CAAK;AAAA,UACxC,CAAC;AAAA,QAAA,CACF;AAAA,MAAA;AAAA,MAEH,WAAA0L;AAAA,MACA,QAAAC;AAAA,IAAA;AAAA,EAAA;AAGN,GAEAmK,KAA6B,gBAAA9E,GAAmB,gBAAA5S,GAAM+W,IAAS,SAAS,CAAC;;;;;GCrNnEY,KAAU,CAAC;AAAA,EACf,OAAAtX;AAAA,EACA,aAAAmM;AAAA,EACA,QAAAoL;AAAA,EACA,YAAAC;AAAA,EACA,QAAQC;AAAA,EACR,QAAAlP,IAAS;AAAA,EACT,OAAOsI;AAAA,EACP,aAAAG;AAAA,EACA,WAAA/D;AAAA,EACA,QAAAC;AACF,MAAa;AACX,QAAM,EAAE,QAAA+D,EAAA,IAAWC,GAAA,GACb,CAAC9E,GAAczL,CAAK,IAAIuP,GAAcW,CAAU,GAChD4C,IAAOnC,EAAQ,MAAMvB,GAAWkB,KAAA,gBAAAA,EAAQ,MAAM,GAAG,CAACA,KAAA,gBAAAA,EAAQ,MAAM,CAAC,GACjEwE,IAAUnE,EAAQ,MAAMxB,GAAcmB,KAAA,gBAAAA,EAAQ,MAAM,GAAG,CAACA,KAAA,gBAAAA,EAAQ,MAAM,CAAC,GACvEyC,IAAK1C,KAAeyC,GAEpBiE,IAAQpG;AAAA,IACZ,MACEiG,EAAO,IAAI,CAACI,GAAOlX,OAAW;AAAA,MAC5B,OAAAkX;AAAA,MACA,MAAM7L,GAAOrL,GAAOkX,EAAM,IAAI;AAAA,MAC9B,OAAO3Q,GAAS2Q,EAAM,MAAM;AAAA,IAAA,EAC5B;AAAA,IACJ,CAACJ,CAAM;AAAA,EAAA,GAGH5F,IAAWL,EAAQ,MAAM;AAC7B,UAAMsG,IAAMF,EAAM,QAAQ,CAAA/O,MAASA,EAAK,QAAQ,CAACA,EAAK,MAAM,KAAKA,EAAK,MAAM,GAAG,IAAI,EAAG,GAChF,CAACzC,GAAKC,CAAI,IAAIyR,EAAI,SAAShR,GAAOgR,CAAG,IAAI,CAAC,GAAG,CAAC,GAC9C9B,IAAU7P,GAAWC,GAAKC,CAAI,GAC9B4P,IAAS7V,GAAM4V,EAAQ,CAAC,GAAGA,EAAQ,CAAC,GAAGrB,GAAUlM,GAAQ,EAAK,CAAC,GAC/DzH,IAAOyT,GAAS5T,GAAO4H,GAAQwN,EAAO,IAAIN,CAAO,CAAC,GAClDhL,IAAOtF;AAAA,MACXoS,EAAO,IAAI,CAAAI,MAASA,EAAM,EAAE;AAAA,MAC5B,CAAC7W,EAAK,MAAMA,EAAK,KAAK;AAAA,MACtB,EAAE,cAAc,KAAK,cAAc,IAAA;AAAA,IAAI,GAEnCkR,IAAIvN,GAAYqR,GAAS,CAAChV,EAAK,QAAQA,EAAK,GAAG,CAAC;AAEtD,WAAO;AAAA,MACL,MAAAA;AAAA,MACA,MAAA2J;AAAA,MACA,GAAAuH;AAAA,MACA,QAAQ+D,EAAO,IAAI,CAAAxU,OAAU,EAAE,UAAUyQ,EAAEzQ,CAAK,GAAG,OAAOkU,EAAQlU,CAAK,IAAI;AAAA,MAC3E,YAAYgW,EAAO,IAAI,CAAAI,OAAU;AAAA,QAC/B,UAAUlN,EAAKkN,EAAM,EAAE,IAAIlN,EAAK,YAAY;AAAA,QAC5C,OAAOkN,EAAM;AAAA,MAAA,EACb;AAAA,IAAA;AAAA,EAEN,GAAG,CAACD,GAAOH,GAAQ5W,GAAO4H,GAAQkN,CAAO,CAAC,GAEpCoC,IAAU,CAACtW,MAAoB;AAAA,IACnC,EAAE,IAAI,OAAO,OAAOkW,EAAc,KAAK,OAAO/D,EAAGnS,EAAM,WAAW,EAAA;AAAA,IAClE,EAAE,IAAI,MAAM,OAAOkW,EAAc,IAAI,OAAO/D,EAAGnS,EAAM,EAAE,EAAA;AAAA,IACvD,EAAE,IAAI,UAAU,OAAOkW,EAAc,QAAQ,OAAO/D,EAAGnS,EAAM,MAAM,EAAA;AAAA,IACnE,EAAE,IAAI,MAAM,OAAOkW,EAAc,IAAI,OAAO/D,EAAGnS,EAAM,EAAE,EAAA;AAAA,IACvD,EAAE,IAAI,OAAO,OAAOkW,EAAc,KAAK,OAAO/D,EAAGnS,EAAM,UAAU,EAAA;AAAA,IACjE,GAAIA,EAAM,SAAS,SAAS,IACxB,CAAC,EAAE,IAAI,YAAY,OAAOkW,EAAc,UAAU,OAAOhE,EAAKlS,EAAM,SAAS,MAAM,EAAA,CAAG,IACtF,CAAA;AAAA,IACJ,EAAE,IAAI,SAAS,OAAOkW,EAAc,OAAO,OAAOhE,EAAKlS,EAAM,KAAK,EAAA;AAAA,EAAE,GAGhE8K,IAAOiF,EAAQ,MAAM;AACzB,UAAM,EAAE,MAAAxQ,GAAM,MAAA2J,GAAM,GAAAuH,EAAA,IAAML;AAE1B,6BACG,KAAA,EACC,UAAA;AAAA,MAAA,gBAAA1Q,EAACJ,IAAA,EAAU,MAAAC,GAAY,OAAO6Q,EAAS,QAAQ,MAAK,QAAO,SAAO,GAAA,CAAC;AAAA,wBAClEvQ,IAAA,EAAa,MAAAN,GAAY,OAAO6Q,EAAS,YAAY,MAAK,UAAS;AAAA,MACnE+F,EAAM,IAAI,CAAC,EAAE,OAAAC,GAAO,MAAA5L,GAAM,OAAOxK,QAAY;AAC5C,YAAI,CAACA,EAAO,QAAO;AACnB,cAAMwI,IAAOU,EAAKkN,EAAM,EAAE,GACpB9F,IAAS9H,IAAOU,EAAK,YAAY,GACjCqN,IAAMrN,EAAK,YAAY,KACvBuM,IAAQhL,EAAUD,CAAI;AAE5B,eACE,gBAAA5K,EAAC,OAAiB,OAAO,EAAE,QAAQ6V,EAAA,GAAS,WAAW9V,GAAO,KAC5D,UAAA;AAAA,UAAA,gBAAAD,EAAC,QAAA,EAAK,IAAI4Q,GAAQ,IAAIA,GAAQ,IAAIG,EAAEzQ,EAAM,WAAW,GAAG,IAAIyQ,EAAEzQ,EAAM,EAAE,GAAG;AAAA,UACzE,gBAAAN,EAAC,QAAA,EAAK,IAAI4Q,GAAQ,IAAIA,GAAQ,IAAIG,EAAEzQ,EAAM,EAAE,GAAG,IAAIyQ,EAAEzQ,EAAM,UAAU,GAAG;AAAA,UACxE,gBAAAN;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,IAAI4Q,IAASiG;AAAA,cACb,IAAIjG,IAASiG;AAAA,cACb,IAAI9F,EAAEzQ,EAAM,WAAW;AAAA,cACvB,IAAIyQ,EAAEzQ,EAAM,WAAW;AAAA,YAAA;AAAA,UAAA;AAAA,UAEzB,gBAAAN;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,IAAI4Q,IAASiG;AAAA,cACb,IAAIjG,IAASiG;AAAA,cACb,IAAI9F,EAAEzQ,EAAM,UAAU;AAAA,cACtB,IAAIyQ,EAAEzQ,EAAM,UAAU;AAAA,YAAA;AAAA,UAAA;AAAA,UAExB,gBAAAN;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,GAAG8I;AAAA,cACH,OAAOU,EAAK;AAAA,cACZ,GAAGuH,EAAEzQ,EAAM,EAAE;AAAA,cACb,QAAQ,KAAK,IAAI,GAAGyQ,EAAEzQ,EAAM,EAAE,IAAIyQ,EAAEzQ,EAAM,EAAE,CAAC;AAAA,cAC7C,IAAI;AAAA,cACJ,OAAO,EAAE,MAAM,sBAAsByV,CAAK,qBAAA;AAAA,YAAqB;AAAA,UAAA;AAAA,UAEjE,gBAAA/V;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAWC,GAAO;AAAA,cAClB,IAAI6I;AAAA,cACJ,IAAIA,IAAOU,EAAK;AAAA,cAChB,IAAIuH,EAAEzQ,EAAM,MAAM;AAAA,cAClB,IAAIyQ,EAAEzQ,EAAM,MAAM;AAAA,YAAA;AAAA,UAAA;AAAA,UAEnBA,EAAM,SAAS,IAAI,CAACwW,GAAStX,MAC5B,gBAAAQ,EAAC,YAAmB,WAAWC,GAAO,SAAS,IAAI2Q,GAAQ,IAAIG,EAAE+F,CAAO,GAAG,GAAG,EAAA,GAAjEtX,CAAoE,CAClF;AAAA,QAAA,EAAA,GAhCKkX,EAAM,EAiCd;AAAA,MAEJ,CAAC;AAAA,IAAA,GACH;AAAA,EAEJ,GAAG,CAAChG,GAAU+F,CAAK,CAAC,GAEdhL,IAAOsB;AAAA,IACX,CAACiG,GAAYC,MAAe;AAC1B,YAAM,EAAE,MAAApT,GAAM,MAAA2J,EAAA,IAASkH;AACvB,UAAIsC,IAAKnT,EAAK,QAAQmT,IAAKnT,EAAK,SAASoT,IAAKpT,EAAK,MAAM,KAAKoT,IAAKpT,EAAK,SAAS;AAC/E,eAAO;AACT,YAAML,IAAQgK,EAAK,QAAQwJ,CAAE;AAC7B,aAAOxT,IAAQ,IAAI,OAAOA;AAAA,IAC5B;AAAA,IACA,CAACkR,CAAQ;AAAA,EAAA;AAGX,SACE,gBAAA1Q;AAAA,IAACiL;AAAA,IAAA;AAAA,MACC,OAAAlM;AAAA,MACA,aAAAmM;AAAA,MACA,cAAAC;AAAA,MACA,OAAAzL;AAAA,MACA,QAAA4H;AAAA,MACA,MAAA8D;AAAA,MACA,UAAU,CAAA5L,MAAS;AACjB,cAAM,EAAE,MAAAK,GAAM,MAAA2J,EAAA,IAASkH,GACjBvL,IAAMqE,EAAK,OAAO;AACxB,eACE,gBAAAxJ;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWC,GAAO;AAAA,YAClB,GAAGuJ,EAAK8M,EAAO9W,CAAK,EAAE,EAAE,IAAI2F;AAAA,YAC5B,OAAOqE,EAAK,YAAYrE,IAAM;AAAA,YAC9B,GAAGtF,EAAK;AAAA,YACR,QAAQA,EAAK;AAAA,UAAA;AAAA,QAAA;AAAA,MAGnB;AAAA,MACA,SAAS,MAAM;AAAA,MACf,WAAWyW,EAAO;AAAA,MAClB,MAAA7K;AAAA,MACA,SAAS,CAAAjM,MAAS;AAChB,cAAMkI,IAAO+O,EAAMjX,CAAK;AACxB,eAAO;AAAA,UACL,OAAOkI,EAAK,MAAM;AAAA,UAClB,MAAMA,EAAK,QACPkP,EAAQlP,EAAK,KAAK,EAAE,IAAI,CAAAT,OAAQ;AAAA,YAC9B,GAAGA;AAAA,YACH,MAAMA,EAAI,OAAO,WAAWS,EAAK,OAAO;AAAA,UAAA,EACxC,IACF,CAAA;AAAA,QAAC;AAAA,MAET;AAAA,MACA,QAAQ,CAAAlI,MAAS;AACf,cAAMkI,IAAO+O,EAAMjX,CAAK,GAClB,EAAE,MAAAgK,GAAM,EAAA,IAAMkH;AACpB,eAAO;AAAA,UACL,GAAGlH,EAAK9B,EAAK,MAAM,EAAE,IAAI8B,EAAK,YAAY;AAAA,UAC1C,GAAG9B,EAAK,QAAQ,EAAEA,EAAK,MAAM,EAAE,IAAIgJ,EAAS,KAAK;AAAA,QAAA;AAAA,MAErD;AAAA,MACA,UAAU,CAAAlR,MAAS;AACjB,cAAMkI,IAAO+O,EAAMjX,CAAK;AACxB,eAAOkI,EAAK,QACR,GAAGA,EAAK,MAAM,KAAK,KAAKkP,EAAQlP,EAAK,KAAK,EACvC,IAAI,CAAAT,MAAO,GAAGA,EAAI,KAAK,IAAIA,EAAI,KAAK,EAAE,EACtC,KAAK,IAAI,CAAC,KACbS,EAAK,MAAM;AAAA,MACjB;AAAA,MACA,OAAO;AAAA,QACL,SAAS;AAAA,UACP6O;AAAA,UACAC,EAAc;AAAA,UACdA,EAAc;AAAA,UACdA,EAAc;AAAA,UACdA,EAAc;AAAA,UACdA,EAAc;AAAA,UACdA,EAAc;AAAA,QAAA;AAAA,QAEhB,MAAMC,EAAM;AAAA,UAAI,CAAC,EAAE,OAAAC,GAAO,OAAOpW,EAAA,MAC/BA,IACI;AAAA,YACEoW,EAAM;AAAA,YACNjE,EAAGnS,EAAM,UAAU;AAAA,YACnBmS,EAAGnS,EAAM,EAAE;AAAA,YACXmS,EAAGnS,EAAM,MAAM;AAAA,YACfmS,EAAGnS,EAAM,EAAE;AAAA,YACXmS,EAAGnS,EAAM,WAAW;AAAA,YACpBkS,EAAKlS,EAAM,KAAK;AAAA,UAAA,IAElB,CAACoW,EAAM,OAAO,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAAA,QAAA;AAAA,MAChD;AAAA,MAEF,WAAA1K;AAAA,MACA,QAAAC;AAAA,IAAA;AAAA,EAAA;AAGN,GAEA8K,KAA6B,gBAAAzF,GAAmB,gBAAA5S,GAAM2X,IAAS,SAAS,CAAC;;;GC1OnEW,KAAM,GAQNC,KAAY,CAAC;AAAA,EACjB,OAAAlY;AAAA,EACA,aAAAmM;AAAA,EACA,QAAA5F;AAAA,EACA,MAAMgB;AAAA,EACN,YAAAiM;AAAA,EACA,YAAA2E;AAAA,EACA,MAAApM,IAAO;AAAA,EACP,QAAAxD,IAAS;AAAA,EACT,OAAOsI;AAAA,EACP,aAAAG;AAAA,EACA,WAAA/D;AAAA,EACA,QAAAC;AACF,MAAa;AACX,QAAM,EAAE,QAAA+D,EAAA,IAAWC,GAAA,GACb,CAAC9E,GAAczL,CAAK,IAAIuP,GAAcW,CAAU,GAChD4C,IAAOnC,EAAQ,MAAMvB,GAAWkB,KAAA,gBAAAA,EAAQ,MAAM,GAAG,CAACA,KAAA,gBAAAA,EAAQ,MAAM,CAAC,GACjEwE,IAAUnE,EAAQ,MAAMxB,GAAcmB,KAAA,gBAAAA,EAAQ,MAAM,GAAG,CAACA,KAAA,gBAAAA,EAAQ,MAAM,CAAC,GACvEyC,IAAK1C,KAAeyC,GAEpB/L,IAAO4J,EAAQ,MAAMhK,GAAUf,GAAQgB,CAAQ,GAAG,CAAChB,GAAQgB,CAAQ,CAAC,GAEpEoK,IAAWL,EAAQ,MAAM;;AAC7B,UAAM8G,IAAW,KAAK,IAAI,GAAG,GAAG1Q,EAAK,IAAI,CAAA2Q,MAAOA,EAAI,KAAK,CAAC,GACpDvC,IAAU7P,GAAW,GAAGmS,CAAQ,GAChCrC,IAAS7V,GAAM,GAAG4V,EAAQ,CAAC,GAAGrB,GAAUlM,GAAQ,EAAK,CAAC,EAAE,OAAO,OAAO,SAAS,GAC/EzH,IAAOyT,GAAS5T,GAAO4H,GAAQwN,EAAO,IAAIN,CAAO,CAAC,GAClDtS,MAAQ8O,IAAAvK,EAAK,CAAC,MAAN,gBAAAuK,EAAS,SAAQ,GACzB/O,MAAQoV,IAAA5Q,EAAKA,EAAK,SAAS,CAAC,MAApB,gBAAA4Q,EAAuB,OAAM,GACrCpJ,IAAIzK,GAAY,CAACtB,GAAOD,CAAK,GAAG,CAACpC,EAAK,MAAMA,EAAK,KAAK,CAAC,GACvDkR,IAAIvN,GAAYqR,GAAS,CAAChV,EAAK,QAAQA,EAAK,GAAG,CAAC;AAEtD,WAAO;AAAA,MACL,MAAAA;AAAA,MACA,SAAS4G,EAAK,IAAI,CAAA2Q,OAAQ;AAAA,QACxB,GAAGnJ,EAAEmJ,EAAI,IAAI,IAAIJ,KAAM;AAAA,QACvB,OAAO,KAAK,IAAI,GAAG/I,EAAEmJ,EAAI,EAAE,IAAInJ,EAAEmJ,EAAI,IAAI,IAAIJ,EAAG;AAAA,QAChD,GAAGjG,EAAEqG,EAAI,KAAK;AAAA,QACd,QAAQ,KAAK,IAAI,GAAGvX,EAAK,SAASkR,EAAEqG,EAAI,KAAK,CAAC;AAAA,QAC9C,SAASnJ,EAAEmJ,EAAI,IAAI,IAAInJ,EAAEmJ,EAAI,EAAE,KAAK;AAAA,MAAA,EACpC;AAAA,MACF,QAAQnY,GAAMiD,GAAOD,GAAOuR,GAAU3T,EAAK,OAAO,EAAI,CAAC,EAAE,IAAI,CAAAS,OAAU;AAAA,QACrE,UAAU2N,EAAE3N,CAAK;AAAA,QACjB,OAAOkU,EAAQlU,CAAK;AAAA,MAAA,EACpB;AAAA,MACF,QAAQwU,EAAO,IAAI,CAAAxU,OAAU,EAAE,UAAUyQ,EAAEzQ,CAAK,GAAG,OAAOkU,EAAQlU,CAAK,IAAI;AAAA,IAAA;AAAA,EAE/E,GAAG,CAACmG,GAAM/G,GAAO4H,GAAQkN,CAAO,CAAC,GAE3B9Q,IAAQ,CAAClE,MAAkB,GAAGiT,EAAGhM,EAAKjH,CAAK,EAAE,IAAI,CAAC,MAAMiT,EAAGhM,EAAKjH,CAAK,EAAE,EAAE,CAAC,IAE1E4L,IAAOiF;AAAA,IACX,wBACG,KAAA,EACC,UAAA;AAAA,MAAA,gBAAArQ,EAACJ,IAAA,EAAU,MAAM8Q,EAAS,MAAM,OAAOA,EAAS,QAAQ,MAAK,QAAO,SAAO,GAAA,CAAC;AAAA,MAC5E,gBAAA1Q,EAACJ,MAAU,MAAM8Q,EAAS,MAAM,OAAOA,EAAS,QAAQ,MAAK,SAAA,CAAS;AAAA,MACtE,gBAAA1Q;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWC,GAAO;AAAA,UAClB,IAAIyQ,EAAS,KAAK;AAAA,UAClB,IAAIA,EAAS,KAAK;AAAA,UAClB,IAAIA,EAAS,KAAK;AAAA,UAClB,IAAIA,EAAS,KAAK;AAAA,QAAA;AAAA,MAAA;AAAA,MAEnBA,EAAS,QAAQ;AAAA,QAAI,CAACrC,GAAQ7O,MAC7B6O,EAAO,SAAS,IACd,gBAAArO;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,GAAGqO,EAAO;AAAA,YACV,GAAGA,EAAO;AAAA,YACV,OAAOA,EAAO;AAAA,YACd,QAAQA,EAAO;AAAA,YACf,OAAO,EAAE,MAAMtD,EAAUD,CAAI,EAAA;AAAA,UAAE;AAAA,UAL1BtL;AAAA,QAAA,IAOL;AAAA,MAAA;AAAA,IACN,GACF;AAAA,IAEF,CAACkR,GAAU5F,CAAI;AAAA,EAAA,GAGXW,IAAOsB;AAAA,IACX,CAACiG,GAAYC,MAAe;AAC1B,YAAM,EAAE,MAAApT,GAAM,SAAA2L,EAAA,IAAYkF;AAC1B,UAAIsC,IAAKnT,EAAK,QAAQmT,IAAKnT,EAAK,SAASoT,IAAKpT,EAAK,MAAM,KAAKoT,IAAKpT,EAAK,SAAS;AAC/E,eAAO;AACT,YAAML,IAAQgM,EAAQ;AAAA,QACpB,CAAA6C,MAAU2E,KAAM3E,EAAO,IAAI2I,MAAOhE,KAAM3E,EAAO,IAAIA,EAAO,QAAQ2I;AAAA,MAAA;AAEpE,aAAOxX,IAAQ,IAAI,OAAOA;AAAA,IAC5B;AAAA,IACA,CAACkR,CAAQ;AAAA,EAAA;AAGX,SACE,gBAAA1Q;AAAA,IAACiL;AAAA,IAAA;AAAA,MACC,OAAAlM;AAAA,MACA,aAAAmM;AAAA,MACA,cAAAC;AAAA,MACA,OAAAzL;AAAA,MACA,QAAA4H;AAAA,MACA,MAAA8D;AAAA,MACA,UAAU,CAAA5L,MAAS;AACjB,cAAM6O,IAASqC,EAAS,QAAQlR,CAAK;AACrC,eACE,gBAAAQ;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWC,GAAO;AAAA,YAClB,GAAGoO,EAAO,IAAI2I,KAAM;AAAA,YACpB,OAAO3I,EAAO,QAAQ2I;AAAA,YACtB,GAAGtG,EAAS,KAAK;AAAA,YACjB,QAAQA,EAAS,KAAK;AAAA,UAAA;AAAA,QAAA;AAAA,MAG5B;AAAA,MACA,SAAS,MAAM;AAAA,MACf,WAAWjK,EAAK;AAAA,MAChB,MAAAgF;AAAA,MACA,SAAS,CAAAjM,OAAU;AAAA,QACjB,OAAOkE,EAAMlE,CAAK;AAAA,QAClB,MAAM,CAAC,EAAE,IAAI,SAAS,OAAO0X,GAAY,OAAO1E,EAAK/L,EAAKjH,CAAK,EAAE,KAAK,GAAG,MAAAsL,GAAM;AAAA,MAAA;AAAA,MAEjF,QAAQ,CAAAtL,OAAU,EAAE,GAAGkR,EAAS,QAAQlR,CAAK,EAAE,QAAQ,GAAGkR,EAAS,QAAQlR,CAAK,EAAE,EAAA;AAAA,MAClF,UAAU,CAAAA,MAAS,GAAG+S,CAAU,IAAI7O,EAAMlE,CAAK,CAAC,KAAK0X,CAAU,IAAI1E,EAAK/L,EAAKjH,CAAK,EAAE,KAAK,CAAC;AAAA,MAC1F,OAAO;AAAA,QACL,SAAS,CAAC+S,GAAY2E,CAAU;AAAA,QAChC,MAAMzQ,EAAK,IAAI,CAAC2Q,GAAK5X,MAAU,CAACkE,EAAMlE,CAAK,GAAGgT,EAAK4E,EAAI,KAAK,CAAC,CAAC;AAAA,MAAA;AAAA,MAEhE,WAAApL;AAAA,MACA,QAAAC;AAAA,IAAA;AAAA,EAAA;AAGN,GAEAqL,KAA6B,gBAAAhG,GAAmB,gBAAA5S,GAAMuY,IAAW,WAAW,CAAC;;;;;;;GCjIvEM,KAAY,IAEZC,KAAoB,IAEpBC,KAAa,IAEbxP,KAAU,CAACZ,GAAqB9C,MAA+B;AACnE,QAAMjE,IAAQ+G,EAAO,OAAO9C,CAAG;AAC/B,SAAO,OAAOjE,KAAU,YAAY,OAAO,SAASA,CAAK,IAAIA,IAAQ;AACvE,GASMoX,KAAa,CAAC;AAAA,EAClB,OAAA3Y;AAAA,EACA,aAAAmM;AAAA,EACA,MAAAyM;AAAA,EACA,QAAAtQ;AAAA,EACA,KAAA1H;AAAA,EACA,QAAA2H,IAAS;AAAA,EACT,OAAOsI;AAAA,EACP,aAAAG;AAAA,EACA,WAAA/D;AAAA,EACA,QAAAC;AACF,MAAa;AACX,QAAM,EAAE,QAAA+D,EAAA,IAAWC,GAAA,GACb,CAAC9E,GAAczL,CAAK,IAAIuP,GAAcW,CAAU,GAChD,CAACM,GAAQC,CAAS,IAAI3D,GAA8B,MAAM,oBAAI,KAAK,GACnEgI,IAAUnE,EAAQ,MAAMxB,GAAcmB,KAAA,gBAAAA,EAAQ,MAAM,GAAG,CAACA,KAAA,gBAAAA,EAAQ,MAAM,CAAC,GACvEwC,IAAOnC,EAAQ,MAAMvB,GAAWkB,KAAA,gBAAAA,EAAQ,MAAM,GAAG,CAACA,KAAA,gBAAAA,EAAQ,MAAM,CAAC,GACjEyC,IAAK1C,KAAeyC,GAEpBhC,IAAQH;AAAA,IACZ,MAAMhJ,EAAO,IAAI,CAACK,GAAMlI,OAAW,EAAE,GAAGkI,GAAM,MAAMmD,GAAOrL,GAAOkI,EAAK,IAAI,IAAI;AAAA,IAC/E,CAACL,CAAM;AAAA,EAAA,GAEHoJ,IAAUJ,EAAQ,MAAMG,EAAM,OAAO,OAAQ,CAACN,EAAO,IAAIxI,EAAK,EAAE,CAAC,GAAG,CAAC8I,GAAON,CAAM,CAAC,GAEnFQ,IAAWL,EAAQ,MAAM;AAC7B,UAAMvP,IAAQ6W,EAAK,QACbtT,IAAOvD,IAAQ,IAAK,KAAK,KAAK,IAAKA,IAAQ,GAC3C8W,IAASD,EAAK,IAAI,CAACpY,GAAGC,MAAUA,IAAQ6E,CAAI,GAM5ClF,IAAS,KAAK,IAAIO,IAAQ,MAAM,KAAK,IAAI,GAAG,GAAGiY,EAAK,IAAI,CAAA5P,MAAQjJ,GAAWiJ,EAAK,KAAK,CAAC,CAAC,CAAC,GACxFrF,IAAS,KAAK,IAAI,IAAI,KAAK,IAAI4E,IAAS,IAAI,IAAI5H,IAAQ,IAAIP,IAASoY,KAAY,CAAC,CAAC,GACnF/U,IAAK9C,IAAQ,GACb+C,IAAK6E,IAAS;AAEpB,QAAIuQ,IAAO;AACX,eAAWnQ,KAAQL;AACjB,iBAAWU,KAAQ4P,GAAM;AACvB,cAAMrX,IAAQ2H,GAAQP,GAAMK,EAAK,GAAG;AACpC,QAAIzH,MAAU,QAAQA,IAAQuX,MAAMA,IAAOvX;AAAA,MAC7C;AACF,UAAMwB,IAAMnC,MAAQ,UAAaA,IAAM,IAAIA,IAAMqF,GAAW,GAAG6S,GAAM,CAAC,EAAE,CAAC,GACnEC,IAAQC,GAAW,GAAGjW,GAAK,CAAC,EAAE,OAAO,CAAAxB,MAASA,IAAQ,CAAC;AAG7D,WAAO,EAAE,IAAAkC,GAAI,IAAAC,GAAI,QAAAC,GAAQ,QAAAkV,GAAQ,MAAAvT,GAAM,KAAAvC,GAAK,OAAAgW,GAAO,OAFrC,CAACxX,MAAmB,KAAK,IAAI,KAAK,IAAIA,GAAO,CAAC,GAAGwB,CAAG,IAAIA,IAAOY,GAEnB,WAAWvD,EAAA;AAAA,EACvE,GAAG,CAACwY,GAAMtQ,GAAQ1H,GAAKD,GAAO4H,CAAM,CAAC,GAE/B0Q,IAAS3H,EAAQ,MAAM;AAC3B,UAAM,EAAE,IAAA7N,GAAI,IAAAC,GAAI,QAAAmV,GAAQ,OAAA5T,MAAU0M;AAClC,WAAOD,EAAQ,IAAI,CAAA/I,OAAS;AAAA,MAC1B,GAAGA;AAAA,MACH,QAAQiQ,EAAK,IAAI,CAAC5P,GAAMvI,MAAU;AAChC,cAAMc,IAAQ2H,GAAQP,GAAMK,EAAK,GAAG;AACpC,eAAO,EAAE,GAAGxF,GAAMC,GAAIC,GAAIuB,EAAM1D,KAAS,CAAC,GAAGsX,EAAOpY,CAAK,CAAC,GAAG,OAAAc,EAAA;AAAA,MAC/D,CAAC;AAAA,IAAA,EACD;AAAA,EACJ,GAAG,CAACoQ,GAAUD,GAASkH,CAAI,CAAC,GAEtBvM,IAAOiF,EAAQ,MAAM;AACzB,UAAM,EAAE,IAAA7N,GAAI,IAAAC,GAAI,QAAAC,GAAQ,QAAAkV,GAAQ,OAAAE,GAAO,OAAA9T,GAAO,WAAAiU,MAAcvH,GACtDwH,IAAUJ,EAAM,SAAS,IAAI9T,EAAM8T,EAAM,CAAC,CAAC,IAAIpV,GAC/CyV,IAAY,KAAK,IAAI,GAAG,KAAK,KAAKX,KAAoB,KAAK,IAAI,GAAGU,CAAO,CAAC,CAAC;AAEjF,6BACG,KAAA,EACC,UAAA;AAAA,MAAA,gBAAAhY,EAAC,KAAA,EAAE,eAAW,IAAC,WAAWD,GAAO,MAC9B,UAAA;AAAA,QAAA6X,EAAM,IAAI,CAAA9U,MACT,gBAAAhD;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,GAAGuD,GAAYqU,EAAO,IAAI,CAAAjV,MAASJ,GAAMC,GAAIC,GAAIuB,EAAMhB,CAAI,GAAGL,CAAK,CAAC,CAAC;AAAA,UAAA;AAAA,UADhEK;AAAA,QAAA,CAGR;AAAA,QACA4U,EAAO,IAAI,CAACjV,GAAOnD,MAAU;AAC5B,gBAAMgC,IAAMe,GAAMC,GAAIC,GAAIC,GAAQC,CAAK;AACvC,iBAAO,gBAAA3C,EAAC,QAAA,EAA2B,IAAIwC,GAAI,IAAIC,GAAI,IAAIjB,EAAI,GAAG,IAAIA,EAAI,EAAA,GAApDmW,EAAKnY,CAAK,EAAE,GAA2C;AAAA,QAC3E,CAAC;AAAA,MAAA,GACH;AAAA,MAECwY,EAAO,IAAI,CAAA/G,MACV,gBAAAjR;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,WAAWC,GAAO;AAAA,UAClB,GAAGsD,GAAY0N,EAAM,MAAM;AAAA,UAC3B,OAAO;AAAA,YACL,MAAM,sBAAsBlG,EAAUkG,EAAM,IAAI,CAAC;AAAA,YACjD,QAAQlG,EAAUkG,EAAM,IAAI;AAAA,UAAA;AAAA,QAC9B;AAAA,QANKA,EAAM;AAAA,MAAA,CAQd;AAAA,wBAEA,KAAA,EAAE,eAAW,IAAC,WAAWhR,GAAO,QAK9B,UAAA;AAAA,QAAA6X,EAAM;AAAA,UAAI,CAAC9U,GAAMxD,OACfsY,EAAM,SAAS,IAAItY,KAAS2Y,MAAc,IACzC,gBAAAnY,EAAC,QAAA,EAAgB,GAAGwC,IAAK,GAAG,GAAGC,IAAKuB,EAAMhB,CAAI,GAAG,IAAG,SACjD,UAAAwR,EAAQxR,CAAI,EAAA,GADJA,CAEX,IACE;AAAA,QAAA;AAAA,QAEL2U,EAAK,IAAI,CAAC5P,GAAMvI,MAAU;AACzB,gBAAMmD,IAAQiV,EAAOpY,CAAK,GACpBmB,IAAQ4B,GAAMC,GAAIC,GAAIC,IAAS6U,IAAW5U,CAAK,GAC/CyV,IAAM,KAAK,IAAIzV,CAAK,GACpB0V,IAAM,KAAK,IAAI1V,CAAK,GACpBgJ,IAASyM,IAAM,MAAM,UAAUA,IAAM,OAAO,QAAQ,UAEpDnE,IAAKoE,IAAM,MAAM,WAAWA,IAAM,OAAO,UAAU;AACzD,iBACE,gBAAArY;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,WAAWC,GAAO;AAAA,cAClB,GAAGU,EAAM;AAAA,cACT,GAAGA,EAAM;AAAA,cACT,IAAAsT;AAAA,cACA,YAAYtI;AAAA,cAEX,aAAS5D,EAAK,OAAO4D,MAAW,WAAWjJ,IAAS,MAAMuV,CAAS;AAAA,YAAA;AAAA,YAP/DlQ,EAAK;AAAA,UAAA;AAAA,QAUhB,CAAC;AAAA,MAAA,EAAA,CACH;AAAA,IAAA,GACF;AAAA,EAEJ,GAAG,CAAC2I,GAAUsH,GAAQL,GAAMnD,CAAO,CAAC,GAE9B/I,IAAOsB;AAAA,IACX,CAACiG,GAAYC,MAAe;AAC1B,YAAM,EAAE,IAAAzQ,GAAI,IAAAC,GAAI,QAAAC,GAAQ,MAAA2B,MAASqM;AACjC,UAAIiH,EAAK,WAAW,KAAK,KAAK,MAAM3E,IAAKxQ,GAAIyQ,IAAKxQ,CAAE,IAAIC,IAAS+U,GAAY,QAAO;AAEpF,UAAI9U,IAAQ,KAAK,MAAMqQ,IAAKxQ,GAAI,EAAEyQ,IAAKxQ,EAAG;AAC1C,aAAIE,IAAQ,MAAGA,KAAS,KAAK,KAAK,IAC3B,KAAK,MAAMA,IAAQ0B,CAAI,IAAIsT,EAAK;AAAA,IACzC;AAAA,IACA,CAACjH,GAAUiH,EAAK,MAAM;AAAA,EAAA,GAGlBW,IAAO,CAAC9Y,MACZwY,EAAO,IAAI,CAAA/G,MAAS;AAClB,UAAM3Q,IAAQ2Q,EAAM,OAAOzR,CAAK,EAAE;AAClC,WAAO;AAAA,MACL,IAAIyR,EAAM;AAAA,MACV,OAAOA,EAAM;AAAA,MACb,OAAO3Q,MAAU,OAAO,MAAMmS,EAAGnS,CAAK;AAAA,MACtC,MAAM2Q,EAAM;AAAA,IAAA;AAAA,EAEhB,CAAC;AAEH,SACE,gBAAAjR;AAAA,IAACiL;AAAA,IAAA;AAAA,MACC,OAAAlM;AAAA,MACA,aAAAmM;AAAA,MACA,cAAAC;AAAA,MACA,OAAAzL;AAAA,MACA,QAAA4H;AAAA,MACA,MAAA8D;AAAA,MACA,SAAS,CAAA5L,MAAS;AAChB,cAAM,EAAE,IAAAgD,GAAI,IAAAC,GAAI,QAAAC,GAAQ,QAAAkV,MAAWlH,GAC7BlP,IAAMe,GAAMC,GAAIC,GAAIC,GAAQkV,EAAOpY,CAAK,CAAC;AAC/C,iCACG,KAAA,EACC,UAAA;AAAA,UAAA,gBAAAQ,EAAC,QAAA,EAAK,WAAWC,GAAO,OAAO,IAAIuC,GAAI,IAAIC,GAAI,IAAIjB,EAAI,GAAG,IAAIA,EAAI,GAAG;AAAA,UACpEwW,EAAO,IAAI,CAAA/G,MAAS;AACnB,kBAAMtQ,IAAQsQ,EAAM,OAAOzR,CAAK;AAChC,mBAAOmB,EAAM,UAAU,OAAO,OAC5B,gBAAAX;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,WAAWC,GAAO;AAAA,gBAClB,IAAIU,EAAM;AAAA,gBACV,IAAIA,EAAM;AAAA,gBACV,GAAG;AAAA,gBACH,OAAO,EAAE,MAAMoK,EAAUkG,EAAM,IAAI,EAAA;AAAA,cAAE;AAAA,cALhCA,EAAM;AAAA,YAAA;AAAA,UAQjB,CAAC;AAAA,QAAA,GACH;AAAA,MAEJ;AAAA,MACA,WAAW0G,EAAK;AAAA,MAChB,MAAAlM;AAAA,MACA,SAAS,CAAAjM,OAAU,EAAE,OAAOmY,EAAKnY,CAAK,EAAE,OAAO,MAAM8Y,EAAK9Y,CAAK,EAAA;AAAA,MAC/D,QAAQ,CAAAA,MAAS;AACf,cAAM,EAAE,IAAAgD,GAAI,IAAAC,GAAI,QAAAC,GAAQ,QAAAkV,MAAWlH;AAEnC,YAAIoD,IAAQ;AACZ,mBAAW7C,KAAS+G,GAAQ;AAC1B,gBAAMrX,IAAQsQ,EAAM,OAAOzR,CAAK;AAChC,UAAAsU,IAAQ,KAAK,IAAIA,GAAO,KAAK,MAAMnT,EAAM,IAAI6B,GAAI7B,EAAM,IAAI8B,CAAE,CAAC;AAAA,QAChE;AACA,eAAOF,GAAMC,GAAIC,GAAI,KAAK,IAAIC,GAAQoR,CAAK,GAAG8D,EAAOpY,CAAK,CAAC;AAAA,MAC7D;AAAA,MACA,aAAY;AAAA,MACZ,UAAU,OACR,GAAGmY,EAAKnY,CAAK,EAAE,KAAK,KAAK8Y,EAAK9Y,CAAK,EAChC,IAAI,CAAAyH,MAAO,GAAGA,EAAI,KAAK,IAAIA,EAAI,KAAK,EAAE,EACtC,KAAK,IAAI,CAAC;AAAA,MAEf,OAAO;AAAA,QACL,SAAS,CAAClI,GAAO,GAAGyR,EAAM,IAAI,CAAA9I,MAAQA,EAAK,KAAK,CAAC;AAAA,QACjD,MAAMiQ,EAAK,IAAI,CAAA5P,MAAQ;AAAA,UACrBA,EAAK;AAAA,UACL,GAAGyI,EAAM,IAAI,CAAA9I,MAAQ;AACnB,kBAAMpH,IAAQ2H,GAAQP,GAAMK,EAAK,GAAG;AACpC,mBAAOzH,MAAU,OAAO,MAAMmS,EAAGnS,CAAK;AAAA,UACxC,CAAC;AAAA,QAAA,CACF;AAAA,MAAA;AAAA,MAEH,QACEkQ,EAAM,SAAS,IACX;AAAA,QACE,SAASA,EAAM,IAAI,CAAA9I,OAAS,EAAE,IAAIA,EAAK,IAAI,OAAOA,EAAK,OAAO,MAAMA,EAAK,OAAO;AAAA,QAChF,QAAAwI;AAAA,QACA,UAAU,CAAAkB,MACRjB,EAAU,CAAAzP,MAAW;AACnB,gBAAMyM,IAAO,IAAI,IAAIzM,CAAO;AAC5B,iBAAIyM,EAAK,IAAIiE,CAAE,IAAGjE,EAAK,OAAOiE,CAAE,IACvBZ,EAAM,SAAS9P,EAAQ,OAAO,KAAGyM,EAAK,IAAIiE,CAAE,GAC9CjE;AAAA,QACT,CAAC;AAAA,MAAA,IAEL;AAAA,MAEN,WAAAnB;AAAA,MACA,QAAAC;AAAA,IAAA;AAAA,EAAA;AAGN,GAEAzM,KAA6B,gBAAA8R;AAAA,EACb,gBAAA5S,GAAMgZ,IAAY,YAAY;AAC9C;"}
1
+ {"version":3,"file":"charts.js","sources":["../src/helpers/component.helper.ts","../src/charts/core/axes.tsx","../src/charts/core/path.ts","../src/charts/core/scale.ts","../src/charts/core/stats.ts","../src/charts/core/cartesian.ts","../src/helpers/class-name.helper.ts","../src/charts/core/palette.ts","../src/charts/core/ChartFrame.tsx","../src/charts/core/format.ts","../src/charts/core/useChartWidth.ts","../src/charts/core/CartesianChart.tsx","../src/charts/LineChart/index.tsx","../src/charts/AreaChart/index.tsx","../src/charts/BarChart/index.tsx","../src/charts/ComposedChart/index.tsx","../src/charts/PieChart/index.tsx","../src/charts/core/margins.ts","../src/charts/core/spatial.ts","../src/charts/ScatterPlot/index.tsx","../src/charts/Heatmap/index.tsx","../src/charts/BoxPlot/index.tsx","../src/charts/Histogram/index.tsx","../src/charts/RadarChart/index.tsx"],"sourcesContent":["/**\n * DevTools adı — modül düzeyinde YAN ETKİ bırakmadan.\n *\n * ⚠ `X.displayName = 'X'` KULLANILMAZ: modül düzeyindeki özellik ataması\n * bundler için yan etkidir ve hedefinin tüm bağımlılık zincirini ayakta tutar.\n * Ölçüldü: yalnızca `Badge` import eden uygulama 20,7 kB indiriyordu (paketin\n * tamamı 21,8 kB). Atama çağrıya dönüşünce `#__PURE__` işaretlenebiliyor →\n * `Badge` 2,71 kB. Nöbetçi `.size-limit.json`.\n *\n * @example\n * export default memo(named(Button, 'Button')) as typeof Button;\n */\nexport const named = <TComponent extends object>(\n component: TComponent,\n displayName: string,\n): TComponent => Object.assign(component, { displayName });\n","import type { TickFormat } from './format';\nimport type { PlotArea } from './types';\n\nimport styles from './axes.module.scss';\n\nexport type Tick = {\n /** Eksen boyunca konum (px). */\n position: number;\n label: string;\n};\n\n/** Bölme değerlerini konumlu bölmelere çevirir. Yazılar LİSTE olarak biçimlenir — basamak tüm bölmelerden. */\nexport const placeTicks = (\n values: readonly number[],\n scale: (value: number) => number,\n format: TickFormat,\n): Tick[] => {\n const labels = format(values);\n return values.map((value, index) => ({ position: scale(value), label: labels[index] }));\n};\n\n/** Bir karakterin yaklaşık genişliği (px) — 11 px eksen yazısında ölçülmüş ortalama. */\nexport const CHAR_WIDTH = 6.4;\n\n/** Etiketin kaplayacağı yaklaşık genişlik. Ölçüm (DOM) yerine tahmin: sunucuda da çalışır. */\nexport const labelWidth = (label: string): number => label.length * CHAR_WIDTH;\n\n/**\n * Üst üste binecek etiketleri SEYRELTİR: her `k`. etiket kalır. Bölme çizgisi ve veri yerinde;\n * yalnızca yazı atlanır.\n */\nexport const thinTicks = (ticks: readonly Tick[], minGap = 8): Tick[] => {\n if (ticks.length < 2) return [...ticks];\n\n const widest = Math.max(...ticks.map(tick => labelWidth(tick.label)));\n const spacing = Math.abs(ticks[1].position - ticks[0].position);\n const every = spacing <= 0 ? 1 : Math.max(1, Math.ceil((widest + minGap) / spacing));\n\n return ticks.filter((_, index) => index % every === 0);\n};\n\n/** Metni yaklaşık genişliğe sığdırır (yatay çubuk grafiğinin kategori etiketleri). */\nexport const fitLabel = (label: string, width: number): string => {\n const max = Math.max(1, Math.floor(width / CHAR_WIDTH));\n return label.length <= max ? label : `${label.slice(0, Math.max(1, max - 1))}…`;\n};\n\ntype ValueAxisProps = {\n area: PlotArea;\n ticks: readonly Tick[];\n side: 'left' | 'right' | 'bottom';\n /** Izgara çizgileri — yalnızca bir eksen çizer (sol ya da alt), iki ızgara üst üste binmesin. */\n hasGrid?: boolean;\n};\n\n/** Değer ekseni: bölme yazıları + ızgara. Eksen ÇİZGİSİ yok — ızgara yeter, mürekkep tasarrufu. */\nexport const ValueAxis = ({ area, ticks, side, hasGrid = false }: ValueAxisProps) => (\n <g className={styles.axis} aria-hidden>\n {ticks.map(tick =>\n side === 'bottom' ? (\n <g key={`${tick.position}-${tick.label}`}>\n {hasGrid && (\n <line\n className={styles.axis__grid}\n x1={tick.position}\n x2={tick.position}\n y1={area.top}\n y2={area.bottom}\n />\n )}\n <text\n className={styles.axis__label}\n x={tick.position}\n y={area.bottom + 16}\n textAnchor=\"middle\"\n >\n {tick.label}\n </text>\n </g>\n ) : (\n <g key={`${tick.position}-${tick.label}`}>\n {hasGrid && (\n <line\n className={styles.axis__grid}\n x1={area.left}\n x2={area.right}\n y1={tick.position}\n y2={tick.position}\n />\n )}\n <text\n className={styles.axis__label}\n x={side === 'left' ? area.left - 8 : area.right + 8}\n y={tick.position}\n dy=\"0.32em\"\n textAnchor={side === 'left' ? 'end' : 'start'}\n >\n {tick.label}\n </text>\n </g>\n ),\n )}\n </g>\n);\n\ntype CategoryAxisProps = {\n area: PlotArea;\n ticks: readonly Tick[];\n side: 'bottom' | 'left';\n};\n\n/** Kategori ekseni: taban çizgisi + yazılar (seyreltilmiş). */\nexport const CategoryAxis = ({ area, ticks, side }: CategoryAxisProps) => (\n <g className={styles.axis} aria-hidden>\n {side === 'bottom' ? (\n <>\n <line\n className={styles.axis__baseline}\n x1={area.left}\n x2={area.right}\n y1={area.bottom}\n y2={area.bottom}\n />\n {thinTicks(ticks).map(tick => (\n <text\n key={`${tick.position}-${tick.label}`}\n className={styles.axis__label}\n x={tick.position}\n y={area.bottom + 16}\n textAnchor=\"middle\"\n >\n {tick.label}\n </text>\n ))}\n </>\n ) : (\n <>\n <line\n className={styles.axis__baseline}\n x1={area.left}\n x2={area.left}\n y1={area.top}\n y2={area.bottom}\n />\n {ticks.map(tick => (\n <text\n key={`${tick.position}-${tick.label}`}\n className={styles.axis__label}\n x={area.left - 8}\n y={tick.position}\n dy=\"0.32em\"\n textAnchor=\"end\"\n >\n {fitLabel(tick.label, area.left - 12)}\n </text>\n ))}\n </>\n )}\n </g>\n);\n","/** SVG YOLLARI — dize üretimi; DOM'a dokunmaz, saf fonksiyon (test edilebilir, sunucuda çalışır). */\n\nexport type Point = { x: number; y: number };\n\nconst round = (value: number): number => Math.round(value * 100) / 100;\n\n/** `null` boşluk demektir: çizgi orada KESİLİR, sıfıra inmez (eksik veri ≠ sıfır). */\nexport type MaybePoint = Point | null;\n\nconst segments = (points: readonly MaybePoint[]): Point[][] => {\n const result: Point[][] = [];\n let current: Point[] = [];\n\n for (const point of points) {\n if (point === null || !Number.isFinite(point.x) || !Number.isFinite(point.y)) {\n if (current.length > 0) result.push(current);\n current = [];\n } else current.push(point);\n }\n\n if (current.length > 0) result.push(current);\n return result;\n};\n\n/** Doğrusal parça. */\nconst linear = (points: readonly Point[]): string =>\n points\n .map((point, index) => `${index === 0 ? 'M' : 'L'}${round(point.x)},${round(point.y)}`)\n .join('');\n\n/**\n * Monoton kübik eğri (Fritsch–Carlson). Veri noktalarının ARASINDA aşma yapmaz: tepe ya da dip\n * olmayan bir yerde eğri, sıradan bir Catmull-Rom'un yaptığı gibi verinin üstüne çıkmaz — grafik\n * olmayan bir değeri göstermez.\n */\nconst monotone = (points: readonly Point[]): string => {\n const count = points.length;\n if (count < 3) return linear(points);\n\n const slopes: number[] = [];\n const deltas: number[] = [];\n\n for (let index = 0; index < count - 1; index += 1) {\n const dx = points[index + 1].x - points[index].x;\n deltas.push(dx === 0 ? 0 : (points[index + 1].y - points[index].y) / dx);\n }\n\n slopes.push(deltas[0]);\n for (let index = 1; index < count - 1; index += 1)\n slopes.push(\n deltas[index - 1] * deltas[index] <= 0 ? 0 : (deltas[index - 1] + deltas[index]) / 2,\n );\n slopes.push(deltas[count - 2]);\n\n for (let index = 0; index < count - 1; index += 1) {\n if (deltas[index] === 0) {\n slopes[index] = 0;\n slopes[index + 1] = 0;\n continue;\n }\n\n const alpha = slopes[index] / deltas[index];\n const beta = slopes[index + 1] / deltas[index];\n const magnitude = alpha * alpha + beta * beta;\n\n if (magnitude > 9) {\n const tau = 3 / Math.sqrt(magnitude);\n slopes[index] = tau * alpha * deltas[index];\n slopes[index + 1] = tau * beta * deltas[index];\n }\n }\n\n let path = `M${round(points[0].x)},${round(points[0].y)}`;\n\n for (let index = 0; index < count - 1; index += 1) {\n const start = points[index];\n const end = points[index + 1];\n const third = (end.x - start.x) / 3;\n\n path +=\n `C${round(start.x + third)},${round(start.y + slopes[index] * third)} ` +\n `${round(end.x - third)},${round(end.y - slopes[index + 1] * third)} ` +\n `${round(end.x)},${round(end.y)}`;\n }\n\n return path;\n};\n\nexport type Curve = 'linear' | 'monotone';\n\n/** Çizgi yolu; `null` noktalarda kesilir. */\nexport const linePath = (points: readonly MaybePoint[], curve: Curve = 'linear'): string =>\n segments(points)\n .map(part => (curve === 'monotone' ? monotone(part) : linear(part)))\n .join('');\n\n/**\n * Alan yolu: üst çizgi + taban çizgisi (yığılmış alanda bir alttaki serinin üstü). Her kesintisiz\n * parça kendi kapalı şekli.\n */\nexport const areaPath = (\n top: readonly MaybePoint[],\n base: readonly MaybePoint[],\n curve: Curve = 'linear',\n): string => {\n const paths: string[] = [];\n let upper: Point[] = [];\n let lower: Point[] = [];\n\n const flush = () => {\n if (upper.length > 0) {\n const draw = curve === 'monotone' ? monotone : linear;\n const back = draw([...lower].reverse()).replace(/^M/, 'L');\n paths.push(`${draw(upper)}${back}Z`);\n }\n upper = [];\n lower = [];\n };\n\n top.forEach((point, index) => {\n const floor = base[index];\n if (point === null || floor === null || floor === undefined) flush();\n else {\n upper.push(point);\n lower.push(floor);\n }\n });\n flush();\n\n return paths.join('');\n};\n\n/** Kutupsal → kartezyen; açı radyan, 0 = saat 12 yönü, saat yönünde artar. */\nexport const polar = (cx: number, cy: number, radius: number, angle: number): Point => ({\n x: cx + radius * Math.sin(angle),\n y: cy - radius * Math.cos(angle),\n});\n\n/**\n * Halka / pasta dilimi. `inner` 0 ise pasta. ⚠ Tam tur (2π) TEK bir yay olarak çizilemez (başlangıç\n * ve bitiş aynı nokta, yay kaybolur); iki yarım yaya bölünür.\n */\nexport const arcPath = (\n cx: number,\n cy: number,\n outer: number,\n inner: number,\n start: number,\n end: number,\n): string => {\n const sweep = end - start;\n if (sweep <= 0 || outer <= 0) return '';\n\n if (sweep >= Math.PI * 2 - 1e-6) {\n /*\n * Tam tur: iki yarım çember; iç çember TERS yönde çizilir ve sıfır-olmayan kuralı deliği kendisi\n * açar. İki ayrı dilime bölmek, ayırıcı kenar çizgisinde görünür bir dikiş bırakıyordu.\n */\n const ring = (radius: number, sweepFlag: 0 | 1) =>\n `M${round(cx)},${round(cy - radius)}` +\n `A${radius},${radius} 0 1 ${sweepFlag} ${round(cx)},${round(cy + radius)}` +\n `A${radius},${radius} 0 1 ${sweepFlag} ${round(cx)},${round(cy - radius)}Z`;\n\n return ring(outer, 1) + (inner > 0 ? ring(inner, 0) : '');\n }\n\n const large = sweep > Math.PI ? 1 : 0;\n const o0 = polar(cx, cy, outer, start);\n const o1 = polar(cx, cy, outer, end);\n\n if (inner <= 0)\n return `M${round(cx)},${round(cy)}L${round(o0.x)},${round(o0.y)}A${outer},${outer} 0 ${large} 1 ${round(o1.x)},${round(o1.y)}Z`;\n\n const i1 = polar(cx, cy, inner, end);\n const i0 = polar(cx, cy, inner, start);\n\n return (\n `M${round(o0.x)},${round(o0.y)}A${outer},${outer} 0 ${large} 1 ${round(o1.x)},${round(o1.y)}` +\n `L${round(i1.x)},${round(i1.y)}A${inner},${inner} 0 ${large} 0 ${round(i0.x)},${round(i0.y)}Z`\n );\n};\n\n/** Kapalı çokgen (radar). */\nexport const polygonPath = (points: readonly Point[]): string =>\n points.length === 0 ? '' : `${linear(points)}Z`;\n","/** ÖLÇEKLER — değer → piksel. Grafik kütüphanesi bağımlılığı yok; davranış testlerde sabit. */\n\nexport type LinearScale = {\n (value: number): number;\n domain: readonly [number, number];\n range: readonly [number, number];\n invert: (pixel: number) => number;\n};\n\nexport type BandScale = {\n /** Kategorinin bandının BAŞLANGICI (px). Bilinmeyen kategori `NaN`. */\n (key: string): number;\n domain: readonly string[];\n range: readonly [number, number];\n /** Bandın genişliği — çubuğun kalınlığı. */\n bandwidth: number;\n /** İki bant başlangıcı arası. */\n step: number;\n /** Piksele en yakın kategorinin dizini (`-1`: boş ölçek). */\n indexAt: (pixel: number) => number;\n};\n\n/** Doğrusal ölçek. Sıfır genişlikli tanım aralığı aralığın ortasına eşlenir (bölme hatası yok). */\nexport const scaleLinear = (\n domain: readonly [number, number],\n range: readonly [number, number],\n): LinearScale => {\n const [d0, d1] = domain;\n const [r0, r1] = range;\n const span = d1 - d0;\n\n const scale = ((value: number) =>\n span === 0 ? (r0 + r1) / 2 : r0 + ((value - d0) / span) * (r1 - r0)) as LinearScale;\n\n scale.domain = domain;\n scale.range = range;\n scale.invert = pixel => (r1 === r0 ? d0 : d0 + ((pixel - r0) / (r1 - r0)) * span);\n\n return scale;\n};\n\n/**\n * Kategorik (band) ölçek. `paddingInner` bantlar arası boşluğun adıma oranı, `paddingOuter` iki\n * uçtaki boşluğun adıma oranı.\n */\nexport const scaleBand = (\n domain: readonly string[],\n range: readonly [number, number],\n { paddingInner = 0.2, paddingOuter = 0.1 } = {},\n): BandScale => {\n const [r0, r1] = range;\n const count = domain.length;\n const step = count === 0 ? 0 : (r1 - r0) / Math.max(1, count - paddingInner + paddingOuter * 2);\n const bandwidth = step * (1 - paddingInner);\n const start = r0 + step * paddingOuter;\n const index = new Map(domain.map((key, position) => [key, position]));\n\n const scale = ((key: string) => {\n const position = index.get(key);\n return position === undefined ? Number.NaN : start + position * step;\n }) as BandScale;\n\n scale.domain = domain;\n scale.range = range;\n scale.bandwidth = bandwidth;\n scale.step = step;\n scale.indexAt = pixel =>\n count === 0\n ? -1\n : Math.min(\n count - 1,\n Math.max(\n 0,\n Math.floor((pixel - r0 - step * paddingOuter + (step - bandwidth) / 2) / step),\n ),\n );\n\n return scale;\n};\n\n/** 1-2-5 × 10ⁿ adımı — \"güzel\" eksen bölmesi. */\nexport const tickStep = (min: number, max: number, count: number): number => {\n const span = Math.abs(max - min);\n if (span === 0 || !Number.isFinite(span) || count <= 0) return 1;\n\n const raw = span / count;\n const power = 10 ** Math.floor(Math.log10(raw));\n const error = raw / power;\n const factor = error >= 7.5 ? 10 : error >= 3.5 ? 5 : error >= 1.5 ? 2 : 1;\n\n return factor * power;\n};\n\n/** Kayan nokta artığını siler: 0.1 + 0.2 → 0.3. */\nconst clean = (value: number, step: number): number => {\n const decimals = Math.max(0, -Math.floor(Math.log10(step)) + 1);\n return Number(value.toFixed(Math.min(decimals, 12)));\n};\n\n/**\n * Tanım aralığını adımın katlarına genişletir — eksen \"güzel\" bir sayıda başlar ve biter.\n * ⚠ Tek değerli (ya da boş) aralık genişletilir: 0 → [0, 1], 5 → [0, 8]; aksi hâlde ölçek çöker.\n */\nexport const niceDomain = (min: number, max: number, count = 5): [number, number] => {\n if (!Number.isFinite(min) || !Number.isFinite(max)) return [0, 1];\n\n let low = Math.min(min, max);\n let high = Math.max(min, max);\n\n if (low === high) {\n if (low === 0) return [0, 1];\n const pad = Math.abs(low) * 0.5;\n low = low > 0 ? 0 : low - pad;\n high = high < 0 ? 0 : high + pad;\n }\n\n const step = tickStep(low, high, count);\n return [clean(Math.floor(low / step) * step, step), clean(Math.ceil(high / step) * step, step)];\n};\n\n/** Aralığı kapsayan bölme değerleri; uçlar dahil. */\nexport const ticks = (min: number, max: number, count = 5): number[] => {\n if (!Number.isFinite(min) || !Number.isFinite(max)) return [];\n if (min === max) return [min];\n\n const step = tickStep(min, max, count);\n /* 1e-9 payı: 0.3 / 0.1 = 2.9999999999999996 → uçtaki bölme sessizce düşüyordu. */\n const first = Math.ceil(min / step - 1e-9);\n const last = Math.floor(max / step + 1e-9);\n const values: number[] = [];\n\n for (let index = first; index <= last && values.length < 1000; index += 1)\n values.push(clean(index * step, step));\n\n return values;\n};\n\n/** Sıralı dizide değere en yakın öğenin dizini — işaretçi isabeti için ikili arama. */\nexport const nearestIndex = (sorted: readonly number[], value: number): number => {\n if (sorted.length === 0) return -1;\n\n let low = 0;\n let high = sorted.length - 1;\n\n while (low < high) {\n const middle = (low + high) >> 1;\n if (sorted[middle] < value) low = middle + 1;\n else high = middle;\n }\n\n if (low > 0 && Math.abs(sorted[low - 1] - value) <= Math.abs(sorted[low] - value)) return low - 1;\n return low;\n};\n","/** İSTATİSTİK — kutu grafiği ve histogram. Sonlu olmayan değerler (`NaN`, `±Infinity`) atılır. */\n\nimport { tickStep } from './scale';\n\nexport const finite = (values: readonly (number | null | undefined)[]): number[] =>\n values.filter((value): value is number => typeof value === 'number' && Number.isFinite(value));\n\n/** `[en küçük, en büyük]`; boş girdide `[0, 0]`. Dizi YAYILMAZ: büyük veride çağrı yığını taşmaz. */\nexport const extent = (values: readonly number[]): [number, number] => {\n if (values.length === 0) return [0, 0];\n\n let min = values[0];\n let max = values[0];\n for (const value of values) {\n if (value < min) min = value;\n if (value > max) max = value;\n }\n\n return [min, max];\n};\n\n/** Sıralı dizide çeyreklik — doğrusal ara değer (R tip 7 / Excel / NumPy varsayılanı). */\nexport const quantile = (sorted: readonly number[], probability: number): number => {\n if (sorted.length === 0) return Number.NaN;\n if (sorted.length === 1) return sorted[0];\n\n const position = (sorted.length - 1) * Math.min(1, Math.max(0, probability));\n const lower = Math.floor(position);\n const fraction = position - lower;\n\n return lower + 1 < sorted.length\n ? sorted[lower] + (sorted[lower + 1] - sorted[lower]) * fraction\n : sorted[lower];\n};\n\nexport type BoxStats = {\n count: number;\n min: number;\n q1: number;\n median: number;\n q3: number;\n max: number;\n /** Bıyıkların ucu: 1,5 × IQR içindeki en uç GÖZLEM (Tukey). */\n whiskerLow: number;\n whiskerHigh: number;\n /** Bıyık dışında kalan gözlemler. */\n outliers: number[];\n};\n\n/** Beş sayı özeti + Tukey bıyıkları. Boş girdide `null`. */\nexport const boxStats = (values: readonly number[]): BoxStats | null => {\n const sorted = finite(values).sort((first, second) => first - second);\n if (sorted.length === 0) return null;\n\n const q1 = quantile(sorted, 0.25);\n const q3 = quantile(sorted, 0.75);\n const fence = (q3 - q1) * 1.5;\n const inside = sorted.filter(value => value >= q1 - fence && value <= q3 + fence);\n\n return {\n count: sorted.length,\n min: sorted[0],\n q1,\n median: quantile(sorted, 0.5),\n q3,\n max: sorted[sorted.length - 1],\n whiskerLow: inside[0] ?? q1,\n whiskerHigh: inside[inside.length - 1] ?? q3,\n outliers: sorted.filter(value => value < q1 - fence || value > q3 + fence),\n };\n};\n\nexport type Bin = {\n /** Dahil alt sınır. */\n from: number;\n /** Hariç üst sınır — SON bölme dahil. */\n to: number;\n count: number;\n};\n\n/**\n * Histogram bölmeleri. Bölme sayısı verilmezse Sturges (`⌈log₂ n⌉ + 1`); sınırlar \"güzel\" bir adıma\n * oturur, yani bölmeler 0-10-20 gibi okunur.\n * ⚠ Son bölme üst ucu DAHİL eder: en büyük değer dışarıda kalmaz.\n */\nexport const histogram = (values: readonly number[], binCount?: number): Bin[] => {\n const data = finite(values);\n if (data.length === 0) return [];\n\n const [min, max] = extent(data);\n if (min === max) return [{ from: min, to: min + 1, count: data.length }];\n\n const target = binCount ?? Math.ceil(Math.log2(data.length)) + 1;\n const step = tickStep(min, max, Math.max(1, target));\n const start = Math.floor(min / step) * step;\n /* 1e-9 payı: (max - start) / step kayan noktada 5.000000001 çıkıp boş bir altıncı bölme açıyordu. */\n const count = Math.max(1, Math.ceil((max - start) / step - 1e-9));\n\n const bins: Bin[] = Array.from({ length: count }, (_, index) => ({\n from: start + index * step,\n to: start + (index + 1) * step,\n count: 0,\n }));\n\n for (const value of data) {\n const index = Math.min(bins.length - 1, Math.floor((value - start) / step));\n bins[index].count += 1;\n }\n\n return bins;\n};\n","/** KARTEZYEN GEOMETRİ — Çizgi, Alan, Çubuk ve Bileşik grafiğin ortak, saf (DOM'suz) motoru. */\n\nimport { fitLabel, labelWidth, placeTicks, type Tick } from './axes';\nimport type { TickFormat } from './format';\nimport { type ChartTone } from './palette';\nimport { areaPath, type Curve, linePath, type MaybePoint } from './path';\nimport {\n type LinearScale,\n niceDomain,\n scaleBand,\n scaleLinear,\n ticks as linearTicks,\n} from './scale';\nimport { extent } from './stats';\nimport type { PlotArea } from './types';\n\nexport type CartesianSeriesType = 'line' | 'area' | 'bar';\n\nexport type CartesianSeries = {\n /** Satırdaki alanın adı. */\n key: string;\n label: string;\n type: CartesianSeriesType;\n tone?: ChartTone;\n /** İkinci değer ekseni (sağ) — farklı birimdeki seri. */\n axis?: 'left' | 'right';\n};\n\nexport type Orientation = 'vertical' | 'horizontal';\n\nexport type CartesianInput = {\n rows: readonly Record<string, unknown>[];\n xKey: string;\n /** Yalnızca GÖRÜNÜR seriler, tonları çözülmüş. */\n series: readonly (CartesianSeries & { tone: ChartTone })[];\n width: number;\n height: number;\n isStacked: boolean;\n orientation: Orientation;\n curve: Curve;\n formatX: (value: unknown) => string;\n /** Değer ekseni bölmeleri — basamak listeden çıktığı için LİSTE alır. */\n formatLeft: TickFormat;\n formatRight: TickFormat;\n /** Değer ekseninin sabit uçları; verilmeyen uç veriden. */\n domain?: readonly [number | undefined, number | undefined];\n};\n\nexport type BarShape = {\n key: string;\n index: number;\n tone: ChartTone;\n x: number;\n y: number;\n width: number;\n height: number;\n};\n\nexport type CartesianGeometry = {\n area: PlotArea;\n /** Kategori ekseni boyunca her satırın merkezi (px). */\n centers: number[];\n /** Kategori bandının genişliği; sürekli eksende 0. */\n bandwidth: number;\n isContinuous: boolean;\n categoryTicks: Tick[];\n leftTicks: Tick[];\n rightTicks: Tick[];\n hasRightAxis: boolean;\n lines: { key: string; tone: ChartTone; d: string }[];\n areas: { key: string; tone: ChartTone; d: string }[];\n bars: BarShape[];\n /** Seri → dizin → çizgi/alan noktası (vurgu halkası için). */\n points: Record<string, MaybePoint[]>;\n /** Dizin → ipucunun bağlanacağı en üst değer noktası. */\n anchors: { x: number; y: number }[];\n /** Sol değer ekseninde SIFIRIN konumu — yalnızca tanım aralığı eksiye indiğinde (yoksa `null`). */\n zero: number | null;\n};\n\n/** Sayıya çevirir; sonlu olmayan değer `null` (eksik veri). */\nexport const toNumber = (value: unknown): number | null =>\n typeof value === 'number' && Number.isFinite(value) ? value : null;\n\nconst MARGIN = { top: 12, right: 16, bottom: 28, minLeft: 32 };\n\n/** Yığın: her dizin için artı ve eksi değerler AYRI birikir (eksi çubuk sıfırın altına iner). */\nconst stack = (\n rows: readonly Record<string, unknown>[],\n keys: readonly string[],\n): Record<string, { base: number; top: number }[]> => {\n const positive = rows.map(() => 0);\n const negative = rows.map(() => 0);\n const result: Record<string, { base: number; top: number }[]> = {};\n\n for (const key of keys)\n result[key] = rows.map((row, index) => {\n const value = toNumber(row[key]) ?? 0;\n if (value >= 0) {\n const base = positive[index];\n positive[index] += value;\n return { base, top: positive[index] };\n }\n const base = negative[index];\n negative[index] += value;\n return { base, top: negative[index] };\n });\n\n return result;\n};\n\nexport const cartesianGeometry = (input: CartesianInput): CartesianGeometry => {\n const { rows, xKey, series, width, height, isStacked, curve, formatX } = input;\n const hasBars = series.some(item => item.type === 'bar');\n const orientation: Orientation =\n hasBars && series.every(item => item.type === 'bar') ? input.orientation : 'vertical';\n const isHorizontal = orientation === 'horizontal';\n\n const xValues = rows.map(row => row[xKey]);\n const isContinuous =\n !hasBars &&\n !isHorizontal &&\n xValues.length > 1 &&\n xValues.every(value => toNumber(value) !== null);\n\n /* --- Yığınlar: aynı eksen + aynı tür birlikte yığılır; çizgi yığılmaz. --- */\n const stacks: Record<string, { base: number; top: number }[]> = {};\n if (isStacked)\n for (const axis of ['left', 'right'] as const)\n for (const type of ['bar', 'area'] as const) {\n const keys = series\n .filter(item => (item.axis ?? 'left') === axis && item.type === type)\n .map(item => item.key);\n Object.assign(stacks, stack(rows, keys));\n }\n\n const valueOf = (key: string, index: number): { base: number; top: number } | null => {\n if (stacks[key]) return stacks[key][index];\n const value = toNumber(rows[index][key]);\n return value === null ? null : { base: 0, top: value };\n };\n\n /* --- Değer tanım aralıkları (eksen başına). --- */\n const domainFor = (axis: 'left' | 'right'): [number, number] | null => {\n const members = series.filter(item => (item.axis ?? 'left') === axis);\n if (members.length === 0) return null;\n\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n for (const item of members)\n for (let index = 0; index < rows.length; index += 1) {\n const value = valueOf(item.key, index);\n if (!value) continue;\n min = Math.min(min, value.top, value.base);\n max = Math.max(max, value.top, value.base);\n }\n\n /* Çubuk ve alan sıfırdan çizilir: sıfır tanım aralığında OLMALI. */\n if (members.some(item => item.type !== 'line')) {\n min = Math.min(min, 0);\n max = Math.max(max, 0);\n }\n\n if (!Number.isFinite(min) || !Number.isFinite(max)) return [0, 1];\n\n const [fixedMin, fixedMax] =\n axis === 'left' ? (input.domain ?? [undefined, undefined]) : [undefined, undefined];\n const nice = niceDomain(fixedMin ?? min, fixedMax ?? max);\n return [fixedMin ?? nice[0], fixedMax ?? nice[1]];\n };\n\n const leftDomain = domainFor('left') ?? [0, 1];\n const rightDomain = domainFor('right');\n const hasRightAxis = rightDomain !== null && !isHorizontal;\n\n /* --- Kenar boşlukları: bölme yazısının en uzunu kadar. --- */\n const leftLabels = input.formatLeft(linearTicks(leftDomain[0], leftDomain[1], 5));\n const rightLabels = rightDomain\n ? input.formatRight(linearTicks(rightDomain[0], rightDomain[1], 5))\n : [];\n const categoryLabels = rows.map(row => formatX(row[xKey]));\n\n const left = isHorizontal\n ? Math.min(width * 0.4, Math.max(MARGIN.minLeft, ...categoryLabels.map(labelWidth)) + 12)\n : Math.max(MARGIN.minLeft, ...leftLabels.map(labelWidth)) + 10;\n const right = hasRightAxis\n ? Math.max(MARGIN.minLeft, ...rightLabels.map(labelWidth)) + 10\n : MARGIN.right;\n\n const area: PlotArea = {\n left,\n top: MARGIN.top,\n right: Math.max(left + 1, width - right),\n bottom: Math.max(MARGIN.top + 1, height - MARGIN.bottom),\n width: Math.max(1, width - right - left),\n height: Math.max(1, height - MARGIN.bottom - MARGIN.top),\n };\n\n /* --- Ölçekler. Kategori ekseni dikeyde yatay, yatayda dikey. --- */\n const categoryRange: [number, number] = isHorizontal\n ? [area.top, area.bottom]\n : [area.left, area.right];\n const valueRange: [number, number] = isHorizontal\n ? [area.left, area.right]\n : [area.bottom, area.top];\n\n const leftScale = scaleLinear(leftDomain, valueRange);\n const rightScale = rightDomain ? scaleLinear(rightDomain, valueRange) : leftScale;\n const scaleFor = (item: CartesianSeries) =>\n (item.axis ?? 'left') === 'right' && rightDomain ? rightScale : leftScale;\n\n let centers: number[];\n let bandwidth = 0;\n /* Sürekli eksenin ölçeği; bölmeler de bundan. ⚠ `Math.min(...dizi)` değil `extent`: on binlerce\n noktada yayılan argüman çağrı yığınını taşırıyordu. */\n let xScale: LinearScale | null = null;\n\n if (isContinuous) {\n const numeric = xValues.map(value => toNumber(value) as number);\n xScale = scaleLinear(extent(numeric), categoryRange);\n centers = numeric.map(xScale);\n } else {\n const band = scaleBand(\n rows.map((_, index) => String(index)),\n categoryRange,\n hasBars ? { paddingInner: 0.24, paddingOuter: 0.12 } : { paddingInner: 0, paddingOuter: 0 },\n );\n bandwidth = band.bandwidth;\n centers = rows.map((_, index) => band(String(index)) + band.bandwidth / 2);\n }\n\n /* Yön dönüşümü: (kategori, değer) → (x, y). */\n const at = (category: number, value: number) =>\n isHorizontal ? { x: value, y: category } : { x: category, y: value };\n\n /* --- Şekiller. --- */\n const bars: BarShape[] = [];\n const barSeries = series.filter(item => item.type === 'bar');\n const slots = isStacked ? 1 : Math.max(1, barSeries.length);\n const slotGap = slots > 1 ? Math.min(2, bandwidth * 0.04) : 0;\n const slotWidth = Math.max(1, (bandwidth - slotGap * (slots - 1)) / slots);\n\n barSeries.forEach((item, seriesIndex) => {\n const scale = scaleFor(item);\n const slot = isStacked ? 0 : seriesIndex;\n\n rows.forEach((_, index) => {\n const value = valueOf(item.key, index);\n if (!value || value.top === value.base) return;\n\n const start = centers[index] - bandwidth / 2 + slot * (slotWidth + slotGap);\n const v0 = scale(value.base);\n const v1 = scale(value.top);\n const low = Math.min(v0, v1);\n const span = Math.max(1, Math.abs(v1 - v0));\n\n bars.push(\n isHorizontal\n ? {\n key: item.key,\n index,\n tone: item.tone,\n x: low,\n y: start,\n width: span,\n height: slotWidth,\n }\n : {\n key: item.key,\n index,\n tone: item.tone,\n x: start,\n y: low,\n width: slotWidth,\n height: span,\n },\n );\n });\n });\n\n const points: Record<string, MaybePoint[]> = {};\n const lines: CartesianGeometry['lines'] = [];\n const areas: CartesianGeometry['areas'] = [];\n\n for (const item of series) {\n if (item.type === 'bar') continue;\n const scale = scaleFor(item);\n const top = rows.map((_, index) => {\n const value = valueOf(item.key, index);\n return value ? at(centers[index], scale(value.top)) : null;\n });\n points[item.key] = top;\n\n if (item.type === 'area') {\n const base = rows.map((_, index) => {\n const value = valueOf(item.key, index);\n return value ? at(centers[index], scale(value.base)) : null;\n });\n areas.push({ key: item.key, tone: item.tone, d: areaPath(top, base, curve) });\n }\n\n lines.push({ key: item.key, tone: item.tone, d: linePath(top, curve) });\n }\n\n /* --- İpucu çapası: dizindeki en uç değer (dikeyde en üst, yatayda en sağ). --- */\n const anchors = rows.map((_, index) => {\n let extreme: number | null = null;\n for (const item of series) {\n const value = valueOf(item.key, index);\n if (!value) continue;\n const pixel = scaleFor(item)(value.top);\n extreme =\n extreme === null\n ? pixel\n : isHorizontal\n ? Math.max(extreme, pixel)\n : Math.min(extreme, pixel);\n }\n const fallback = isHorizontal ? area.left : area.bottom;\n return at(centers[index], extreme ?? fallback);\n });\n\n /* --- Bölmeler. --- */\n const toTicks = (\n scale: typeof leftScale,\n domain: readonly [number, number],\n format: TickFormat,\n ): Tick[] =>\n placeTicks(\n linearTicks(\n domain[0],\n domain[1],\n isHorizontal\n ? Math.max(2, Math.floor(area.width / 90))\n : Math.max(2, Math.floor(area.height / 48)),\n ),\n scale,\n format,\n );\n\n const categoryTicks: Tick[] = xScale\n ? linearTicks(xScale.domain[0], xScale.domain[1], Math.max(2, Math.floor(area.width / 90))).map(\n value => ({\n position: (xScale as LinearScale)(value),\n label: formatX(value),\n }),\n )\n : rows.map((_, index) => ({\n position: centers[index],\n label: isHorizontal ? fitLabel(categoryLabels[index], left - 12) : categoryLabels[index],\n }));\n\n return {\n zero: leftDomain[0] < 0 && leftDomain[1] > 0 ? leftScale(0) : null,\n area,\n centers,\n bandwidth,\n isContinuous,\n categoryTicks,\n leftTicks: toTicks(leftScale, leftDomain, input.formatLeft),\n rightTicks:\n hasRightAxis && rightDomain ? toTicks(rightScale, rightDomain, input.formatRight) : [],\n hasRightAxis,\n lines,\n areas,\n bars,\n points,\n anchors,\n };\n};\n","import { ClassValue } from '@/types/common-element-props.type';\n\n/** Sınıf adı birleştirici. */\nexport const cx = (...values: ClassValue[]): string => {\n let result = '';\n\n for (const value of values) {\n if (!value) continue;\n result = result === '' ? value : `${result} ${value}`;\n }\n\n return result;\n};\n","/**\n * SERİ RENKLERİ — hanui kategorik paleti (`cat-1…5`, `series-2`). Her ton iki temanın üç\n * yüzeyinde ≥3:1 (`check:contrast`) ve iki ton arasında ΔE ≥ 8 (palet üreteci).\n * ⚠ Marka yeşilleri (çam, mint) seri rengi OLMAZ: yeşil eylemin rengi. `cat-3` orta aydınlıkta bir\n * kategori yeşili.\n */\nexport type ChartTone =\n 'cat-1' | 'cat-2' | 'cat-3' | 'cat-4' | 'cat-5' | 'series-1' | 'series-2' | 'muted';\n\n/** Sıra: ilk iki seri en uzak iki ton (mavi, kil) — iki serili grafik en sık durum. */\nexport const TONE_ORDER: readonly ChartTone[] = [\n 'cat-1',\n 'cat-2',\n 'cat-3',\n 'cat-4',\n 'cat-5',\n 'series-2',\n];\n\n/** Verilmeyen tonu sıradan alır; altıdan fazla seride döner (lejant adı ayırt eder). */\nexport const toneAt = (index: number, tone?: ChartTone): ChartTone =>\n tone ?? TONE_ORDER[index % TONE_ORDER.length];\n\n/** CSS rengi — tema değişince yeniden çizim gerekmez, değişken çözülür. */\nexport const toneColor = (tone: ChartTone): string =>\n tone === 'muted' ? 'var(--hanui-text-3)' : `var(--hanui-${tone})`;\n","'use client';\n\nimport {\n type KeyboardEvent,\n type PointerEvent,\n type ReactNode,\n type RefObject,\n useCallback,\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\n\nimport { useAnnounce } from '@ahmetilhn/hanui';\n\nimport { cx } from '../../helpers/class-name.helper';\n\nimport { type ChartTone, toneColor } from './palette';\nimport type { ChartTable, LegendEntry, TooltipContent } from './types';\n\nimport styles from './ChartFrame.module.scss';\n\nexport type ChartFrameProps = {\n /** Grafiğin okunan adı. */\n label: string;\n /** Okunan ek açıklama — eğilimi bir cümleyle söyler (\"Ekimde %12 artış\"). */\n description?: string;\n containerRef: RefObject<HTMLDivElement | null>;\n width: number;\n height: number;\n /** Ağır çizim — BELLEĞE ALINMIŞ öğe; üzerine gelindiğinde yeniden çizilmez. */\n plot: ReactNode;\n /** Etkin öğenin vurgusu (kılavuz çizgi, halka, nokta) — çizimin ÜSTÜNDE. */\n overlay: (active: number) => ReactNode;\n /** Çizimin ALTINDAKİ vurgu (çubuk bandının zemini): üstte olsaydı çubuğun rengini değiştirirdi. */\n underlay?: (active: number) => ReactNode;\n /** Klavye ve işaretçiyle gezilen öğe sayısı. */\n itemCount: number;\n /** Izgarada gezinme (ısı haritası): satır uzunluğu. Verilirse ↑/↓ satır atlar. */\n columns?: number;\n /** İşaretçi → öğe; isabet yoksa `null`. Koordinatlar çizim kutusuna göre. */\n pick: (x: number, y: number) => number | null;\n tooltip: (index: number) => TooltipContent;\n /** İpucunun bağlandığı nokta. */\n anchor: (index: number) => { x: number; y: number };\n /**\n * İpucunun noktanın hangi yanında açılacağı. `inward` (kartezyen): merkeze bakan yan — kenardaki\n * nokta ipucunu kutunun dışına itmez. `outward` (pasta, radar): merkezden uzak yan — içeride\n * çizimin kendisini (halkanın ortasındaki toplamı) örtüyordu. `inward` sığmayınca öteki yana\n * çevrilir, `outward` kutunun kenarına kırpılır.\n */\n tooltipSide?: 'inward' | 'outward';\n /** Klavyeyle gelinen öğenin okunan özeti. */\n announce: (index: number) => string;\n table: ChartTable;\n legend?: {\n entries: LegendEntry[];\n hidden: ReadonlySet<string>;\n onToggle: (id: string) => void;\n };\n className?: string;\n testId?: string;\n};\n\n/** İpucunun işaretçiden uzaklığı (px). */\nconst TOOLTIP_GAP = 12;\n\n/**\n * Grafik çerçevesi — ölçüm kutusu, SVG, ipucu, lejant ve gizli veri tablosu.\n *\n * Klavye (grafik tek bir sekme durağı): `→`/`↓` sonraki öğe · `←`/`↑` önceki öğe (ızgarada `↑`/`↓`\n * satır) · `Home`/`End` ilk/son · `Escape` vurguyu kaldırır. Gelinen öğe duyurulur.\n * İşaretçi: tek bir dinleyici, kare başına bir isabet hesabı (`requestAnimationFrame`).\n */\nconst ChartFrame = ({\n label,\n description,\n containerRef,\n width,\n height,\n plot,\n overlay,\n underlay,\n itemCount,\n columns,\n pick,\n tooltip,\n anchor,\n tooltipSide = 'inward',\n announce,\n table,\n legend,\n className,\n testId,\n}: ChartFrameProps) => {\n const descriptionId = useId();\n const say = useAnnounce();\n const [active, setActive] = useState<number | null>(null);\n const frame = useRef<number | null>(null);\n const tooltipRef = useRef<HTMLDivElement>(null);\n const pending = useRef<{ x: number; y: number } | null>(null);\n\n /* Veri değişip öğe sayısı küçülürse vurgu dışarıda kalmasın. */\n useEffect(() => {\n if (active !== null && active >= itemCount) setActive(itemCount > 0 ? itemCount - 1 : null);\n }, [active, itemCount]);\n\n useEffect(\n () => () => {\n if (frame.current !== null) cancelAnimationFrame(frame.current);\n },\n [],\n );\n\n const handlePointerMove = useCallback(\n (event: PointerEvent<SVGSVGElement>) => {\n const box = event.currentTarget.getBoundingClientRect();\n pending.current = { x: event.clientX - box.left, y: event.clientY - box.top };\n if (frame.current !== null) return;\n\n frame.current = requestAnimationFrame(() => {\n frame.current = null;\n const point = pending.current;\n if (point) setActive(pick(point.x, point.y));\n });\n },\n [pick],\n );\n\n const move = (next: number) => {\n const clamped = Math.min(itemCount - 1, Math.max(0, next));\n setActive(clamped);\n say(announce(clamped));\n };\n\n const handleKeyDown = (event: KeyboardEvent<SVGSVGElement>) => {\n if (itemCount === 0) return;\n const current = active ?? -1;\n const row = columns ?? 1;\n\n const next =\n event.key === 'ArrowRight'\n ? current + 1\n : event.key === 'ArrowLeft'\n ? Math.max(0, current - 1)\n : event.key === 'ArrowDown'\n ? current < 0\n ? 0\n : current + row\n : event.key === 'ArrowUp'\n ? Math.max(0, current - row)\n : event.key === 'Home'\n ? 0\n : event.key === 'End'\n ? itemCount - 1\n : null;\n\n if (event.key === 'Escape' && active !== null) {\n event.preventDefault();\n setActive(null);\n return;\n }\n\n if (next === null) return;\n event.preventDefault();\n move(next);\n };\n\n const content = active === null ? null : tooltip(active);\n const point = active === null ? null : anchor(active);\n const pointX = point?.x;\n\n /*\n * Yatay konum ÖLÇÜLEREK yazılır: ipucunun genişliği içeriğe bağlı ve ancak çizildikten sonra\n * biliniyor. Tercih edilen yan sığmazsa öteki yana, ikisi de sığmazsa kutunun içine kırpılır —\n * ipucu kutudan taşıp dar ekranda yatay kaydırma açmaz. Boyamadan ÖNCE çalışır, sıçrama görünmez.\n * ⚠ Fiziksel `left`: SVG koordinatları RTL'de aynalanmaz, mantıksal özellik ipucunu ters yana atardı.\n */\n useLayoutEffect(() => {\n const node = tooltipRef.current;\n if (!node || pointX === undefined) return;\n\n const size = node.offsetWidth;\n const isRightHalf = pointX > width / 2;\n const prefersLeft = tooltipSide === 'outward' ? !isRightHalf : isRightHalf;\n const leftX = pointX - TOOLTIP_GAP - size;\n const rightX = pointX + TOOLTIP_GAP;\n const fitsLeft = leftX >= 0;\n const fitsRight = rightX + size <= width;\n /*\n * Radyal grafikte ÇEVRİLMEZ, kenara kırpılır: öteki yan grafiğin merkezi — sığmayan birkaç\n * piksel için ipucu halkanın ortasındaki toplamın üstüne atlıyordu (ölçüldü: 10 px eksik).\n */\n const x =\n tooltipSide === 'outward'\n ? prefersLeft\n ? leftX\n : rightX\n : prefersLeft\n ? fitsLeft || !fitsRight\n ? leftX\n : rightX\n : fitsRight || !fitsLeft\n ? rightX\n : leftX;\n\n node.style.left = `${Math.min(Math.max(0, x), Math.max(0, width - size))}px`;\n }, [active, pointX, width, tooltipSide]);\n\n return (\n <figure className={cx(styles.chart, className)} data-testid={testId}>\n <div ref={containerRef} className={styles.chart__canvas} style={{ blockSize: height }}>\n <svg\n className={styles.chart__svg}\n width={width}\n height={height}\n viewBox={`0 0 ${width} ${height}`}\n role=\"img\"\n aria-label={label}\n aria-describedby={description ? descriptionId : undefined}\n tabIndex={itemCount > 0 ? 0 : undefined}\n onPointerMove={handlePointerMove}\n onPointerDown={handlePointerMove}\n onPointerLeave={() => setActive(null)}\n onKeyDown={handleKeyDown}\n onBlur={() => setActive(null)}\n >\n {active !== null && underlay && (\n <g className={styles.chart__overlay}>{underlay(active)}</g>\n )}\n {plot}\n {active !== null && <g className={styles.chart__overlay}>{overlay(active)}</g>}\n </svg>\n\n {content && point && (\n /* Okunan karşılığı duyuru ve tablo; ipucu yalnızca görsel. */\n <div\n ref={tooltipRef}\n aria-hidden\n className={styles.chart__tooltip}\n /* Noktanın YANINDA, dikey ortalı: noktayı ve kılavuz çizgiyi örtmez. */\n style={{ insetBlockStart: Math.max(24, Math.min(point.y, height - 24)) }}\n >\n {content.title && <span className={styles.chart__tooltipTitle}>{content.title}</span>}\n {content.rows.map(row => (\n <span key={row.id} className={styles.chart__tooltipRow}>\n {row.tone && (\n <span\n className={styles.chart__swatch}\n style={{ backgroundColor: toneColor(row.tone) }}\n />\n )}\n <span className={styles.chart__tooltipLabel}>{row.label}</span>\n <span className={styles.chart__tooltipValue}>{row.value}</span>\n </span>\n ))}\n </div>\n )}\n </div>\n\n {legend && legend.entries.length > 1 && (\n <ul className={styles.chart__legend}>\n {legend.entries.map(entry => {\n const isHidden = legend.hidden.has(entry.id);\n return (\n <li key={entry.id}>\n <button\n type=\"button\"\n className={cx(\n styles.chart__legendItem,\n isHidden && styles['chart__legendItem--hidden'],\n )}\n aria-pressed={!isHidden}\n onClick={() => legend.onToggle(entry.id)}\n >\n <LegendSwatch tone={entry.tone} isHidden={isHidden} />\n {entry.label}\n </button>\n </li>\n );\n })}\n </ul>\n )}\n\n {description && (\n <p id={descriptionId} className={styles.chart__srOnly}>\n {description}\n </p>\n )}\n\n {/*\n * Gizleme bir KAPTA: `<table>` `width: 1px` ve `overflow: hidden`ı yok sayıp içeriği kadar\n * genişliyor — dar ekranda sayfaya görünmez bir yatay kaydırma açıyordu (ölçüldü: 390 px\n * görünümde ısı haritasının tablosu 424 px).\n */}\n <div className={styles.chart__srOnly}>\n <table>\n <caption>{label}</caption>\n <thead>\n <tr>\n {table.columns.map((column, index) => (\n <th key={index} scope=\"col\">\n {column}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {table.rows.map((row, index) => (\n <tr key={index}>\n {row.map((cell, cellIndex) =>\n cellIndex === 0 ? (\n <th key={cellIndex} scope=\"row\">\n {cell}\n </th>\n ) : (\n <td key={cellIndex}>{cell}</td>\n ),\n )}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </figure>\n );\n};\n\n/** Gizli seri: içi BOŞ kare — renk tek başına durum taşımaz, biçim de değişir. */\nconst LegendSwatch = ({ tone, isHidden }: { tone: ChartTone; isHidden: boolean }) => (\n <span\n aria-hidden\n className={styles.chart__swatch}\n style={\n isHidden\n ? { backgroundColor: 'transparent', boxShadow: `inset 0 0 0 2px ${toneColor(tone)}` }\n : { backgroundColor: toneColor(tone) }\n }\n />\n);\n\nexport default ChartFrame;\n","/** SAYI BİÇİMİ — eksen ve ipucu metni. Dil `labels.locale`ten, verilmezse tarayıcının dili. */\n\nexport type ValueFormat = (value: number) => string;\n\nconst cache = new Map<string, Intl.NumberFormat>();\n\nconst formatter = (\n locale: string | undefined,\n options: Intl.NumberFormatOptions,\n): Intl.NumberFormat => {\n const key = `${locale ?? ''}|${JSON.stringify(options)}`;\n let instance = cache.get(key);\n\n if (!instance) {\n instance = new Intl.NumberFormat(locale, options);\n cache.set(key, instance);\n }\n\n return instance;\n};\n\n/** Eksen bölmelerinin yazısı — tek değerden değil LİSTEDEN: gereken basamak bölmelerin hepsinden çıkar. */\nexport type TickFormat = (values: readonly number[]) => string[];\n\n/**\n * Bilimsel gösterimde ilk ve son anlamlı basamağın üssü (12 050 → 4 ve 1, 0,005 → −3 ve −3). On\n * basamakta yuvarlanır: kayan nokta artığı (`0.30000000000000004`) basamak sayılmaz.\n */\nconst digitExponents = (value: number): { first: number; last: number } | null => {\n if (value === 0 || !Number.isFinite(value)) return null;\n\n const [mantissa, exponent] = Math.abs(value).toExponential(9).split('e');\n const first = Number(exponent);\n\n return { first, last: first - (mantissa.replace('.', '').replace(/0+$/, '').length - 1) };\n};\n\n/**\n * Eksen bölmeleri: KISA gösterim (\"12 B\", \"1,2 Mn\"). Uzun bir sayı dar bir eksende üst üste biniyor;\n * tam değer ipucunda ve veri tablosunda okunur.\n *\n * Basamak sayısı bölmelerin HEPSİNİ tam yazan en az basamak: en küçük anlamlı basamağı en ince olan\n * bölme belirler, her bölme o basamağa kadar yazılır. 0,005 adımlı eksen \"0 · 0,005 · 0,01 · 0,015\",\n * 50 adımlı \"12 B · 12,05 B · 12,1 B\".\n *\n * ⚠ Eskiden sabit \"en çok bir ondalık\" yazıyordu ve adımı 0,1'in altında kalan HER eksen sıfıra\n * çöküyordu: 0,001-0,014 USD'lik maliyet grafiği \"0 · 0 · 0 · 0\" okunuyordu (ölçüldü: tüketicide).\n * Kısa gösterimde de aynı hata vardı — 12 050 ile 12 100 ikisi de \"12,1 B\".\n */\nexport const tickLabels =\n (locale?: string): TickFormat =>\n values => {\n const last = values.reduce(\n (finest, value) => Math.min(finest, digitExponents(value)?.last ?? finest),\n Number.POSITIVE_INFINITY,\n );\n\n return values.map(value =>\n formatter(locale, {\n notation: 'compact',\n maximumSignificantDigits: Math.min(\n 21,\n Math.max(1, (digitExponents(value)?.first ?? 0) - last + 1),\n ),\n }).format(value),\n );\n };\n\n/** İpucu ve tablo: tam değer, en çok iki ondalık. */\nexport const fullNumber =\n (locale?: string): ValueFormat =>\n value =>\n formatter(locale, { maximumFractionDigits: 2 }).format(value);\n","'use client';\n\nimport { type RefObject, useLayoutEffect, useRef, useState } from 'react';\n\n/** Ölçüm gelmeden (sunucu, ilk kare) kullanılan genişlik: grafik boş bir kutu değil, makul bir şekil çizer. */\nconst FALLBACK_WIDTH = 640;\n\n/** `useLayoutEffect` sunucuda uyarı basar; orada etkisiz bir eşdeğer. */\nconst useIsomorphicLayoutEffect = typeof window === 'undefined' ? () => {} : useLayoutEffect;\n\n/**\n * Kapsayıcının genişliği — `ResizeObserver` ile, BOYAMADAN ÖNCE ölçülür (ilk karede yanlış boyutta\n * çizilip zıplamasın). `fixed` verilirse ölçüm yapılmaz.\n */\nconst useChartWidth = (fixed?: number): [RefObject<HTMLDivElement | null>, number] => {\n const ref = useRef<HTMLDivElement>(null);\n const [width, setWidth] = useState(fixed ?? FALLBACK_WIDTH);\n\n useIsomorphicLayoutEffect(() => {\n if (fixed !== undefined) {\n setWidth(fixed);\n return;\n }\n\n const node = ref.current;\n if (!node) return;\n\n const measure = (next: number) => {\n /* Kesirli genişlik her alt piksel değişiminde yeniden çizdiriyordu. */\n const rounded = Math.floor(next);\n if (rounded > 0) setWidth(current => (current === rounded ? current : rounded));\n };\n\n measure(node.clientWidth);\n if (typeof ResizeObserver === 'undefined') return;\n\n const observer = new ResizeObserver(([entry]) => measure(entry.contentRect.width));\n observer.observe(node);\n return () => observer.disconnect();\n }, [fixed]);\n\n return [ref, width];\n};\n\nexport default useChartWidth;\n","'use client';\n\nimport { memo, useCallback, useMemo, useState } from 'react';\n\nimport { useHanui } from '@ahmetilhn/hanui';\n\nimport { CategoryAxis, ValueAxis } from './axes';\nimport { type CartesianSeries, cartesianGeometry, type Orientation, toNumber } from './cartesian';\nimport ChartFrame from './ChartFrame';\nimport { fullNumber, tickLabels, type ValueFormat } from './format';\nimport { toneAt, toneColor } from './palette';\nimport type { Curve } from './path';\nimport { nearestIndex } from './scale';\nimport type { TooltipContent } from './types';\nimport useChartWidth from './useChartWidth';\n\nimport styles from './CartesianChart.module.scss';\n\n/** Veri satırı — x alanı ve seri alanları; eksik değer `null`. */\nexport type ChartRow = Record<string, string | number | null | undefined>;\n\nexport type CartesianChartProps = {\n /** Grafiğin okunan adı. */\n label: string;\n /** Okunan ek açıklama — eğilimi bir cümleyle söyler. */\n description?: string;\n data: readonly ChartRow[];\n /** Satırdaki x alanının adı. */\n xKey: string;\n /** Veri tablosunun ilk sütun başlığı; verilmezse `xKey`. */\n xLabel?: string;\n series: readonly (CartesianSeries & { format?: ValueFormat })[];\n /** Yükseklik (px). Genişlik kapsayıcıdan ölçülür. */\n height?: number;\n /** Sabit genişlik (px) — ölçüm yapılmaz. */\n width?: number;\n isStacked?: boolean;\n orientation?: Orientation;\n curve?: Curve;\n /** Çizgi üzerinde her veri noktası. Çok noktalı seride kapalı tutun. */\n hasPoints?: boolean;\n /** x değerinin yazısı (eksen, ipucu, tablo). */\n formatX?: (value: string | number) => string;\n /** Değerin yazısı (ipucu, tablo); seri kendi `format`ını verebilir. Eksen kısa gösterimde. */\n formatValue?: ValueFormat;\n /** Sol değer ekseninin sabit uçları. */\n domain?: readonly [number | undefined, number | undefined];\n className?: string;\n testId?: string;\n};\n\nconst DEFAULT_HEIGHT = 280;\nconst MISSING = '—';\n\n/**\n * Kartezyen grafik — Çizgi, Alan, Çubuk ve Bileşik grafiğin ortak gövdesi. Dışa `LineChart`,\n * `AreaChart`, `BarChart`, `ComposedChart` olarak verilir.\n */\nconst CartesianChart = ({\n label,\n description,\n data,\n xKey,\n xLabel,\n series,\n height = DEFAULT_HEIGHT,\n width: fixedWidth,\n isStacked = false,\n orientation = 'vertical',\n curve = 'monotone',\n hasPoints = false,\n formatX = String,\n formatValue,\n domain,\n className,\n testId,\n}: CartesianChartProps) => {\n const { labels } = useHanui();\n const locale = labels?.locale;\n const [containerRef, width] = useChartWidth(fixedWidth);\n const [hidden, setHidden] = useState<ReadonlySet<string>>(() => new Set());\n\n const valueFormat = useMemo(() => formatValue ?? fullNumber(locale), [formatValue, locale]);\n const axisFormat = useMemo(() => tickLabels(locale), [locale]);\n const formatXValue = useCallback(\n (value: unknown) =>\n value === null || value === undefined ? '' : formatX(value as string | number),\n [formatX],\n );\n\n /* Ton seri SIRASINDAN gelir: bir seri gizlenince diğerlerinin rengi değişmez. */\n const toned = useMemo(\n () => series.map((item, index) => ({ ...item, tone: toneAt(index, item.tone) })),\n [series],\n );\n const visible = useMemo(() => toned.filter(item => !hidden.has(item.key)), [toned, hidden]);\n\n const geometry = useMemo(\n () =>\n cartesianGeometry({\n rows: data,\n xKey,\n series: visible,\n width,\n height,\n isStacked,\n orientation,\n curve,\n formatX: formatXValue,\n formatLeft: axisFormat,\n formatRight: axisFormat,\n domain,\n }),\n [\n data,\n xKey,\n visible,\n width,\n height,\n isStacked,\n orientation,\n curve,\n formatXValue,\n axisFormat,\n domain,\n ],\n );\n\n const isHorizontal =\n orientation === 'horizontal' &&\n visible.length > 0 &&\n visible.every(item => item.type === 'bar');\n /* Vurgu biçimi: çubukta kategorinin BANDI, çizgi/alanda dikey kılavuz çizgi. Kategorik x'li çizgide de\n bant genişliği sıfırdan büyük; vurguyu bant genişliğine değil çubuğun varlığına bağlamak gerekiyordu. */\n const hasBars = visible.some(item => item.type === 'bar');\n\n /* İsabet: kategori ekseninde en yakın merkez (sıralı dizide ikili arama). */\n const sorted = useMemo(() => {\n const order = geometry.centers\n .map((center, index) => ({ center, index }))\n .sort((a, b) => a.center - b.center);\n return { centers: order.map(item => item.center), indices: order.map(item => item.index) };\n }, [geometry.centers]);\n\n const pick = useCallback(\n (x: number, y: number) => {\n const { area } = geometry;\n if (x < area.left - 4 || x > area.right + 4 || y < area.top - 4 || y > area.bottom + 4)\n return null;\n const position = nearestIndex(sorted.centers, isHorizontal ? y : x);\n return position < 0 ? null : sorted.indices[position];\n },\n [geometry, sorted, isHorizontal],\n );\n\n const tooltip = useCallback(\n (index: number): TooltipContent => ({\n title: formatXValue(data[index]?.[xKey]),\n rows: visible.map(item => {\n const value = toNumber(data[index]?.[item.key]);\n return {\n id: item.key,\n label: item.label,\n tone: item.tone,\n value: value === null ? MISSING : (item.format ?? valueFormat)(value),\n };\n }),\n }),\n [data, xKey, visible, valueFormat, formatXValue],\n );\n\n const announce = useCallback(\n (index: number) => {\n const content = tooltip(index);\n return `${content.title}: ${content.rows.map(row => `${row.label} ${row.value}`).join(', ')}`;\n },\n [tooltip],\n );\n\n const table = useMemo(\n () => ({\n columns: [xLabel ?? xKey, ...toned.map(item => item.label)],\n rows: data.map(row => [\n formatXValue(row[xKey]),\n ...toned.map(item => {\n const value = toNumber(row[item.key]);\n return value === null ? MISSING : (item.format ?? valueFormat)(value);\n }),\n ]),\n }),\n [data, xKey, xLabel, toned, valueFormat, formatXValue],\n );\n\n const plot = useMemo(\n () => (\n <g>\n {isHorizontal ? (\n <>\n <ValueAxis area={geometry.area} ticks={geometry.leftTicks} side=\"bottom\" hasGrid />\n <CategoryAxis area={geometry.area} ticks={geometry.categoryTicks} side=\"left\" />\n </>\n ) : (\n <>\n <ValueAxis area={geometry.area} ticks={geometry.leftTicks} side=\"left\" hasGrid />\n {geometry.hasRightAxis && (\n <ValueAxis area={geometry.area} ticks={geometry.rightTicks} side=\"right\" />\n )}\n <CategoryAxis area={geometry.area} ticks={geometry.categoryTicks} side=\"bottom\" />\n </>\n )}\n\n {/* Eksi değerli grafikte sıfır çizgisi: çubuklar oradan başlıyor, eksenin ucundan değil. */}\n {geometry.zero !== null &&\n (isHorizontal ? (\n <line\n className={styles.zero}\n x1={geometry.zero}\n x2={geometry.zero}\n y1={geometry.area.top}\n y2={geometry.area.bottom}\n />\n ) : (\n <line\n className={styles.zero}\n x1={geometry.area.left}\n x2={geometry.area.right}\n y1={geometry.zero}\n y2={geometry.zero}\n />\n ))}\n\n {geometry.areas.map(shape => (\n <path\n key={`area-${shape.key}`}\n d={shape.d}\n className={styles.area}\n style={{ fill: `color-mix(in srgb, ${toneColor(shape.tone)} 18%, transparent)` }}\n />\n ))}\n\n {geometry.bars.map(bar => (\n <rect\n key={`bar-${bar.key}-${bar.index}`}\n className={styles.bar}\n x={bar.x}\n y={bar.y}\n width={bar.width}\n height={bar.height}\n rx={Math.min(3, bar.width / 4, bar.height / 4)}\n style={{ fill: toneColor(bar.tone) }}\n />\n ))}\n\n {geometry.lines.map(shape => (\n <path\n key={`line-${shape.key}`}\n d={shape.d}\n className={styles.line}\n style={{ stroke: toneColor(shape.tone) }}\n />\n ))}\n\n {/*\n * İki boşluk arasında kalan TEK değer çizgi üretmez (tek noktalı yol görünmez) — `hasPoints`\n * kapalıyken de işaretle çizilir; yoksa veri vardı ama grafikte yoktu.\n */}\n {visible\n .filter(item => item.type !== 'bar')\n .flatMap(item =>\n (geometry.points[item.key] ?? []).map((point, index, list) =>\n point && (hasPoints || (!list[index - 1] && !list[index + 1])) ? (\n <circle\n key={`point-${item.key}-${index}`}\n className={styles.point}\n cx={point.x}\n cy={point.y}\n r={3}\n style={{ fill: toneColor(item.tone) }}\n />\n ) : null,\n ),\n )}\n </g>\n ),\n [geometry, hasPoints, isHorizontal, visible],\n );\n\n const underlay = useCallback(\n (index: number) => {\n if (!hasBars || geometry.bandwidth <= 0) return null;\n const { area } = geometry;\n const center = geometry.centers[index];\n const pad = geometry.bandwidth * 0.12;\n\n return isHorizontal ? (\n <rect\n className={styles.band}\n x={area.left}\n width={area.width}\n y={center - geometry.bandwidth / 2 - pad}\n height={geometry.bandwidth + pad * 2}\n />\n ) : (\n <rect\n className={styles.band}\n y={area.top}\n height={area.height}\n x={center - geometry.bandwidth / 2 - pad}\n width={geometry.bandwidth + pad * 2}\n />\n );\n },\n [geometry, isHorizontal, hasBars],\n );\n\n const overlay = useCallback(\n (index: number) => {\n const { area } = geometry;\n const center = geometry.centers[index];\n\n return (\n <>\n {!hasBars && (\n <line\n className={styles.crosshair}\n x1={center}\n x2={center}\n y1={area.top}\n y2={area.bottom}\n />\n )}\n {visible\n .filter(item => item.type !== 'bar')\n .map(item => {\n const point = geometry.points[item.key]?.[index];\n return point ? (\n <circle\n key={item.key}\n className={styles.marker}\n cx={point.x}\n cy={point.y}\n r={4.5}\n style={{ fill: toneColor(item.tone) }}\n />\n ) : null;\n })}\n </>\n );\n },\n [geometry, visible, hasBars],\n );\n\n return (\n <ChartFrame\n label={label}\n description={description}\n containerRef={containerRef}\n width={width}\n height={height}\n plot={plot}\n overlay={overlay}\n underlay={underlay}\n itemCount={data.length}\n pick={pick}\n tooltip={tooltip}\n anchor={index => geometry.anchors[index] ?? { x: 0, y: 0 }}\n announce={announce}\n table={table}\n legend={{\n entries: toned.map(item => ({ id: item.key, label: item.label, tone: item.tone })),\n hidden,\n onToggle: id =>\n setHidden(current => {\n const next = new Set(current);\n if (next.has(id)) next.delete(id);\n /* Son görünür seri gizlenmez: boş bir grafik bir şey göstermez, geri getirmek de zorlaşır. */\n else if (toned.length - current.size > 1) next.add(id);\n return next;\n }),\n }}\n className={className}\n testId={testId}\n />\n );\n};\n\nexport default memo(CartesianChart) as typeof CartesianChart;\n","'use client';\n\nimport { memo, useMemo } from 'react';\n\nimport { named } from '../../helpers/component.helper';\nimport CartesianChart, { type CartesianChartProps } from '../core/CartesianChart';\nimport type { ChartSeries } from '../core/series';\n\ntype Props = Omit<CartesianChartProps, 'series' | 'isStacked' | 'orientation'> & {\n series: readonly ChartSeries[];\n};\n\n/**\n * Çizgi grafiği — bir ya da daha çok serinin x boyunca değişimi. Sayısal x sürekli eksen, metin x\n * kategorik eksen. `null` değer çizgiyi KESER (eksik veri sıfır değildir).\n *\n * Klavye: grafiğe sekmeyle gelinir · `←`/`→` önceki/sonraki x · `Home`/`End` · `Escape`.\n */\nconst LineChart = ({ series, ...rest }: Props) => {\n const lines = useMemo(() => series.map(item => ({ ...item, type: 'line' as const })), [series]);\n return <CartesianChart {...rest} series={lines} />;\n};\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(LineChart, 'LineChart')) as typeof LineChart;\n","'use client';\n\nimport { memo, useMemo } from 'react';\n\nimport { named } from '../../helpers/component.helper';\nimport CartesianChart, { type CartesianChartProps } from '../core/CartesianChart';\nimport type { ChartSeries } from '../core/series';\n\ntype Props = Omit<CartesianChartProps, 'series' | 'orientation'> & {\n series: readonly ChartSeries[];\n};\n\n/**\n * Alan grafiği — çizginin altı dolu; `isStacked` ile seriler üst üste (bütünün parçaları).\n * Taban SIFIR: alanın yüksekliği değerin kendisi, kırpılmış bir eksen alanı yanlış oranda gösterir.\n *\n * Klavye: `←`/`→` önceki/sonraki x · `Home`/`End` · `Escape`.\n */\nconst AreaChart = ({ series, ...rest }: Props) => {\n const areas = useMemo(() => series.map(item => ({ ...item, type: 'area' as const })), [series]);\n return <CartesianChart {...rest} series={areas} />;\n};\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(AreaChart, 'AreaChart')) as typeof AreaChart;\n","'use client';\n\nimport { memo, useMemo } from 'react';\n\nimport { named } from '../../helpers/component.helper';\nimport CartesianChart, { type CartesianChartProps } from '../core/CartesianChart';\nimport type { ChartSeries } from '../core/series';\n\ntype Props = Omit<CartesianChartProps, 'series' | 'curve' | 'hasPoints'> & {\n series: readonly ChartSeries[];\n};\n\n/**\n * Çubuk / sütun grafiği — kategoriler arası karşılaştırma. Birden çok seri yan yana (gruplu) ya da\n * `isStacked` ile üst üste; `orientation=\"horizontal\"` uzun kategori adları için (etiket kesilmez,\n * sığmazsa \"…\" ile kısalır, tam adı ipucu ve tabloda).\n * Eksi değer sıfırın ALTINA iner; yığında artı ve eksi ayrı birikir.\n *\n * Klavye: `←`/`→` (ya da `↑`/`↓`) önceki/sonraki kategori · `Home`/`End` · `Escape`.\n */\nconst BarChart = ({ series, ...rest }: Props) => {\n const bars = useMemo(() => series.map(item => ({ ...item, type: 'bar' as const })), [series]);\n return <CartesianChart {...rest} series={bars} />;\n};\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(BarChart, 'BarChart')) as typeof BarChart;\n","'use client';\n\nimport { memo } from 'react';\n\nimport { named } from '../../helpers/component.helper';\nimport CartesianChart, { type CartesianChartProps } from '../core/CartesianChart';\nimport type { ComposedSeries } from '../core/series';\n\ntype Props = Omit<CartesianChartProps, 'series' | 'orientation'> & {\n /** Seri başına tür (`line` / `area` / `bar`) ve eksen (`left` / `right`). */\n series: readonly ComposedSeries[];\n};\n\n/**\n * Bileşik grafik — çubuk, çizgi ve alan aynı x ekseninde; farklı birimdeki seri SAĞ eksene\n * (`axis: 'right'`). Çizim sırası: alan → çubuk → çizgi (çizgi her zaman görünür kalır).\n * ⚠ İki eksen okuyucuyu yanıltabilir: sağ eksendeki seri `format` ile kendi birimini söylemeli.\n *\n * Klavye: `←`/`→` önceki/sonraki x · `Home`/`End` · `Escape`.\n */\nconst ComposedChart = (props: Props) => <CartesianChart {...props} />;\n\nexport default /*#__PURE__*/ memo(\n /*#__PURE__*/ named(ComposedChart, 'ComposedChart'),\n) as typeof ComposedChart;\n","'use client';\n\nimport { memo, useCallback, useMemo, useState } from 'react';\n\nimport { useHanui } from '@ahmetilhn/hanui';\n\nimport { named } from '../../helpers/component.helper';\nimport ChartFrame from '../core/ChartFrame';\nimport { fullNumber, type ValueFormat } from '../core/format';\nimport { type ChartTone, toneAt, toneColor } from '../core/palette';\nimport { arcPath, polar } from '../core/path';\nimport useChartWidth from '../core/useChartWidth';\n\nimport styles from './index.module.scss';\n\nexport type PieSlice = {\n id: string;\n label: string;\n value: number;\n tone?: ChartTone;\n};\n\ntype Props = {\n label: string;\n description?: string;\n data: readonly PieSlice[];\n /** `donut` ortası boş halka; ortaya `centerLabel` / `centerValue` yazılır. */\n variant?: 'pie' | 'donut';\n /** Halkanın ortasındaki büyük değer (toplam); verilmezse görünür dilimlerin toplamı. */\n centerValue?: string;\n /** Halkanın ortasındaki küçük yazı (\"Toplam\"). */\n centerLabel?: string;\n /** Değerin adı (tablo sütunu). */\n valueLabel: string;\n height?: number;\n width?: number;\n formatValue?: ValueFormat;\n className?: string;\n testId?: string;\n};\n\n/** Etkin dilimin dışarı kayması (px). */\nconst LIFT = 6;\n/** Dilimler arası ince ayırıcı: aynı aydınlıkta iki komşu ton tek renk gibi okunmasın. */\nconst SEPARATOR = 1.5;\n\n/**\n * Pasta / halka grafiği — bir bütünün parçaları. Dilim sırası verinin sırası (saat 12'den, saat\n * 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.\n * ⚠ Altıdan çok dilim okunmaz — kategorik palet altı tonda döner; uzun kuyruğu \"Diğer\"de toplayın.\n *\n * Klavye: `←`/`→` önceki/sonraki dilim · `Home`/`End` · `Escape`.\n */\nconst PieChart = ({\n label,\n description,\n data,\n variant = 'donut',\n centerValue,\n centerLabel,\n valueLabel,\n height = 260,\n width: fixedWidth,\n formatValue,\n className,\n testId,\n}: Props) => {\n const { labels } = useHanui();\n const [containerRef, width] = useChartWidth(fixedWidth);\n const [hidden, setHidden] = useState<ReadonlySet<string>>(() => new Set());\n const full = useMemo(() => fullNumber(labels?.locale), [labels?.locale]);\n const fv = formatValue ?? full;\n\n const toned = useMemo(\n () => data.map((slice, index) => ({ ...slice, tone: toneAt(index, slice.tone) })),\n [data],\n );\n\n const geometry = useMemo(() => {\n const visible = toned.filter(\n slice => !hidden.has(slice.id) && Number.isFinite(slice.value) && slice.value > 0,\n );\n const total = visible.reduce((sum, slice) => sum + slice.value, 0);\n const cx = width / 2;\n const cy = height / 2;\n const outer = Math.max(8, Math.min(width, height) / 2 - LIFT - 4);\n const inner = variant === 'donut' ? outer * 0.62 : 0;\n\n let angle = 0;\n const slices = visible.map(slice => {\n const sweep = total > 0 ? (slice.value / total) * Math.PI * 2 : 0;\n const start = angle;\n angle += sweep;\n return { ...slice, start, end: angle, share: total > 0 ? slice.value / total : 0 };\n });\n\n return { cx, cy, outer, inner, total, slices };\n }, [toned, hidden, width, height, variant]);\n\n const percent = useMemo(() => {\n const format = new Intl.NumberFormat(labels?.locale, {\n style: 'percent',\n maximumFractionDigits: 1,\n });\n return (share: number) => format.format(share);\n }, [labels?.locale]);\n\n const plot = useMemo(() => {\n const { cx, cy, outer, inner, slices, total } = geometry;\n\n return (\n <g>\n {slices.map(slice => (\n <path\n key={slice.id}\n className={styles.slice}\n d={arcPath(cx, cy, outer, inner, slice.start, slice.end)}\n style={{ fill: toneColor(slice.tone), strokeWidth: slices.length > 1 ? SEPARATOR : 0 }}\n />\n ))}\n {variant === 'donut' && (\n <g aria-hidden className={styles.center}>\n <text\n className={styles.center__value}\n x={cx}\n y={centerLabel ? cy - 4 : cy}\n dy=\"0.32em\"\n textAnchor=\"middle\"\n >\n {centerValue ?? fv(total)}\n </text>\n {centerLabel && (\n <text\n className={styles.center__label}\n x={cx}\n y={cy + 16}\n dy=\"0.32em\"\n textAnchor=\"middle\"\n >\n {centerLabel}\n </text>\n )}\n </g>\n )}\n </g>\n );\n }, [geometry, variant, centerValue, centerLabel, fv]);\n\n const pick = useCallback(\n (px: number, py: number) => {\n const { cx, cy, outer, inner, slices } = geometry;\n const distance = Math.hypot(px - cx, py - cy);\n if (distance > outer + LIFT || distance < inner) return null;\n\n /* Açı: saat 12 = 0, saat yönünde artar (`polar` ile aynı). */\n let angle = Math.atan2(px - cx, -(py - cy));\n if (angle < 0) angle += Math.PI * 2;\n const index = slices.findIndex(slice => angle >= slice.start && angle < slice.end);\n return index < 0 ? null : index;\n },\n [geometry],\n );\n\n const describe = (index: number) => {\n const slice = geometry.slices[index];\n return `${fv(slice.value)} (${percent(slice.share)})`;\n };\n\n return (\n <ChartFrame\n label={label}\n description={description}\n containerRef={containerRef}\n width={width}\n height={height}\n plot={plot}\n overlay={index => {\n const { cx, cy, outer, inner, slices } = geometry;\n const slice = slices[index];\n const middle = (slice.start + slice.end) / 2;\n const shift = polar(0, 0, LIFT, middle);\n return (\n <path\n className={styles.slice}\n d={arcPath(cx + shift.x, cy + shift.y, outer, inner, slice.start, slice.end)}\n style={{ fill: toneColor(slice.tone), strokeWidth: SEPARATOR }}\n />\n );\n }}\n itemCount={geometry.slices.length}\n pick={pick}\n tooltip={index => {\n const slice = geometry.slices[index];\n return {\n rows: [{ id: slice.id, label: slice.label, value: describe(index), tone: slice.tone }],\n };\n }}\n anchor={index => {\n const { cx, cy, outer, slices } = geometry;\n const slice = slices[index];\n /* Dilimin DIŞ kenarı: ipucu dışarı açılır, dilimi ve ortadaki toplamı örtmez. */\n return polar(cx, cy, outer + LIFT, (slice.start + slice.end) / 2);\n }}\n tooltipSide=\"outward\"\n announce={index => `${geometry.slices[index].label}: ${describe(index)}`}\n table={{\n columns: [label, valueLabel],\n rows: toned.map(slice => [\n slice.label,\n Number.isFinite(slice.value) ? fv(slice.value) : '—',\n ]),\n }}\n legend={{\n entries: toned.map(slice => ({ id: slice.id, label: slice.label, tone: slice.tone })),\n hidden,\n onToggle: id =>\n setHidden(current => {\n const next = new Set(current);\n if (next.has(id)) next.delete(id);\n else if (toned.length - current.size > 1) next.add(id);\n return next;\n }),\n }}\n className={className}\n testId={testId}\n />\n );\n};\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(PieChart, 'PieChart')) as typeof PieChart;\n","import { labelWidth } from './axes';\nimport type { PlotArea } from './types';\n\n/** Çizim alanı — sol kenar en uzun sol bölme yazısı kadar, alt kenar x yazıları için. */\nexport const plotArea = (\n width: number,\n height: number,\n leftLabels: readonly string[],\n { top = 12, right = 16, bottom = 28 } = {},\n): PlotArea => {\n const left = Math.max(32, ...leftLabels.map(labelWidth)) + 10;\n\n return {\n left,\n top,\n right: Math.max(left + 1, width - right),\n bottom: Math.max(top + 1, height - bottom),\n width: Math.max(1, width - right - left),\n height: Math.max(1, height - top - bottom),\n };\n};\n\n/** Eksen başına bölme sayısı: yatayda ~90 px, dikeyde ~48 px'te bir. */\nexport const tickCount = (length: number, horizontal: boolean): number =>\n Math.max(2, Math.floor(length / (horizontal ? 90 : 48)));\n","/**\n * MEKÂNSAL KOVA — işaretçiye en yakın noktayı her harekette TÜM noktaları taramadan bulur.\n * Noktalar sabit boyutlu piksel hücrelerine dağıtılır; arama yalnızca komşu hücrelerde.\n */\n\nexport type SpatialIndex = {\n /** `(x, y)`ye `radius` içindeki en yakın noktanın dizini; yoksa `null`. */\n nearest: (x: number, y: number, radius: number) => number | null;\n};\n\nexport const spatialIndex = (\n points: readonly { x: number; y: number }[],\n cell = 24,\n): SpatialIndex => {\n const buckets = new Map<string, number[]>();\n const key = (column: number, row: number) => `${column}:${row}`;\n\n points.forEach((point, index) => {\n if (!Number.isFinite(point.x) || !Number.isFinite(point.y)) return;\n const id = key(Math.floor(point.x / cell), Math.floor(point.y / cell));\n const bucket = buckets.get(id);\n if (bucket) bucket.push(index);\n else buckets.set(id, [index]);\n });\n\n return {\n nearest: (x, y, radius) => {\n const reach = Math.ceil(radius / cell);\n const column = Math.floor(x / cell);\n const row = Math.floor(y / cell);\n let best: number | null = null;\n let bestDistance = radius * radius;\n\n for (let dx = -reach; dx <= reach; dx += 1)\n for (let dy = -reach; dy <= reach; dy += 1)\n for (const index of buckets.get(key(column + dx, row + dy)) ?? []) {\n const distance = (points[index].x - x) ** 2 + (points[index].y - y) ** 2;\n if (distance <= bestDistance) {\n bestDistance = distance;\n best = index;\n }\n }\n\n return best;\n },\n };\n};\n","'use client';\n\nimport { memo, useCallback, useMemo, useState } from 'react';\n\nimport { useHanui } from '@ahmetilhn/hanui';\n\nimport { named } from '../../helpers/component.helper';\nimport { placeTicks, ValueAxis } from '../core/axes';\nimport ChartFrame from '../core/ChartFrame';\nimport { fullNumber, tickLabels, type ValueFormat } from '../core/format';\nimport { plotArea, tickCount } from '../core/margins';\nimport { type ChartTone, toneAt, toneColor } from '../core/palette';\nimport { niceDomain, scaleLinear, ticks } from '../core/scale';\nimport { spatialIndex } from '../core/spatial';\nimport { extent, finite } from '../core/stats';\nimport useChartWidth from '../core/useChartWidth';\n\nimport styles from './index.module.scss';\n\nexport type ScatterPoint = {\n x: number;\n y: number;\n /** Balon grafiği: noktanın büyüklüğü (alanla orantılı). */\n size?: number;\n /** Noktanın adı (ipucu ve tablo). */\n label?: string;\n};\n\nexport type ScatterSeries = {\n id: string;\n label: string;\n tone?: ChartTone;\n data: readonly ScatterPoint[];\n};\n\ntype Props = {\n label: string;\n description?: string;\n series: readonly ScatterSeries[];\n /** Eksen ve tablo başlıkları. */\n xLabel: string;\n yLabel: string;\n /** Balon grafiğinde büyüklüğün adı (\"Nüfus\"); verilmezse ipucunda büyüklük satırı yok. */\n sizeLabel?: string;\n height?: number;\n width?: number;\n formatX?: ValueFormat;\n formatY?: ValueFormat;\n className?: string;\n testId?: string;\n};\n\n/** Noktanın yarıçapı (px): boyutsuz 4; balonda 3-16, alanla orantılı (karekök ölçek). */\nconst RADIUS = { plain: 4, min: 3, max: 16 };\n/** İşaretçinin noktayı \"yakaladığı\" uzaklık (px) — parmakla da isabet ettirilebilsin. */\nconst HIT_RADIUS = 22;\n\n/**\n * Saçılım grafiği — iki sayısal değişkenin ilişkisi; `size` ile balon grafiği.\n * İsabet: mekânsal kova (her harekette tüm noktalar taranmaz). Klavye noktaları x sırasıyla gezer.\n *\n * Klavye: `←`/`→` önceki/sonraki nokta · `Home`/`End` · `Escape`.\n */\nconst ScatterPlot = ({\n label,\n description,\n series,\n xLabel,\n yLabel,\n sizeLabel,\n height = 300,\n width: fixedWidth,\n formatX,\n formatY,\n className,\n testId,\n}: Props) => {\n const { labels } = useHanui();\n const [containerRef, width] = useChartWidth(fixedWidth);\n const [hidden, setHidden] = useState<ReadonlySet<string>>(() => new Set());\n\n const full = useMemo(() => fullNumber(labels?.locale), [labels?.locale]);\n const tickFormat = useMemo(() => tickLabels(labels?.locale), [labels?.locale]);\n const fx = formatX ?? full;\n const fy = formatY ?? full;\n\n const toned = useMemo(\n () => series.map((item, index) => ({ ...item, tone: toneAt(index, item.tone) })),\n [series],\n );\n\n /* Düz nokta listesi — x sırasıyla (klavye sırası soldan sağa). */\n const flat = useMemo(\n () =>\n toned\n .filter(item => !hidden.has(item.id))\n .flatMap(item =>\n item.data\n .filter(point => Number.isFinite(point.x) && Number.isFinite(point.y))\n .map(point => ({ ...point, series: item })),\n )\n .sort((a, b) => a.x - b.x || a.y - b.y),\n [toned, hidden],\n );\n\n const geometry = useMemo(() => {\n const xDomain = niceDomain(...extent(flat.map(point => point.x)));\n const yDomain = niceDomain(...extent(flat.map(point => point.y)));\n const yTicks = ticks(yDomain[0], yDomain[1], tickCount(height, false));\n const area = plotArea(width, height, tickFormat(yTicks), { right: 20 });\n const x = scaleLinear(xDomain, [area.left, area.right]);\n const y = scaleLinear(yDomain, [area.bottom, area.top]);\n\n const sizes = finite(flat.map(point => point.size));\n const [sizeMin, sizeMax] = extent(sizes);\n const radius = (size?: number) =>\n size === undefined || !Number.isFinite(size) || sizes.length === 0\n ? RADIUS.plain\n : sizeMax === sizeMin\n ? (RADIUS.min + RADIUS.max) / 2\n : Math.sqrt(\n RADIUS.min ** 2 +\n ((size - sizeMin) / (sizeMax - sizeMin)) * (RADIUS.max ** 2 - RADIUS.min ** 2),\n );\n\n const placed = flat.map(point => ({\n ...point,\n cx: x(point.x),\n cy: y(point.y),\n r: radius(point.size),\n }));\n\n return {\n area,\n placed,\n index: spatialIndex(placed.map(point => ({ x: point.cx, y: point.cy }))),\n xTicks: placeTicks(ticks(xDomain[0], xDomain[1], tickCount(area.width, true)), x, tickFormat),\n yTicks: placeTicks(yTicks, y, tickFormat),\n };\n }, [flat, width, height, tickFormat]);\n\n const plot = useMemo(\n () => (\n <g>\n <ValueAxis area={geometry.area} ticks={geometry.yTicks} side=\"left\" hasGrid />\n <ValueAxis area={geometry.area} ticks={geometry.xTicks} side=\"bottom\" hasGrid />\n {geometry.placed.map((point, index) => (\n <circle\n key={index}\n className={styles.point}\n cx={point.cx}\n cy={point.cy}\n r={point.r}\n style={{\n fill: `color-mix(in srgb, ${toneColor(point.series.tone)} 72%, transparent)`,\n stroke: toneColor(point.series.tone),\n }}\n />\n ))}\n </g>\n ),\n [geometry],\n );\n\n const pick = useCallback(\n (px: number, py: number) => geometry.index.nearest(px, py, HIT_RADIUS),\n [geometry],\n );\n\n const describe = (index: number) => {\n const point = geometry.placed[index];\n return {\n title: point.label ?? point.series.label,\n rows: [\n { id: 'series', label: point.series.label, value: '', tone: point.series.tone },\n { id: 'x', label: xLabel, value: fx(point.x) },\n { id: 'y', label: yLabel, value: fy(point.y) },\n ...(point.size !== undefined && sizeLabel\n ? [{ id: 'size', label: sizeLabel, value: full(point.size) }]\n : []),\n ],\n };\n };\n\n return (\n <ChartFrame\n label={label}\n description={description}\n containerRef={containerRef}\n width={width}\n height={height}\n plot={plot}\n overlay={index => {\n const point = geometry.placed[index];\n return (\n <circle\n className={styles.marker}\n cx={point.cx}\n cy={point.cy}\n r={point.r + 3}\n style={{ stroke: toneColor(point.series.tone) }}\n />\n );\n }}\n itemCount={geometry.placed.length}\n pick={pick}\n tooltip={describe}\n anchor={index => ({ x: geometry.placed[index].cx, y: geometry.placed[index].cy })}\n announce={index => {\n const point = geometry.placed[index];\n return `${point.label ? `${point.label}, ` : ''}${point.series.label}: ${xLabel} ${fx(point.x)}, ${yLabel} ${fy(point.y)}`;\n }}\n table={{\n columns: [label, xLabel, yLabel],\n rows: flat.map(point => [point.label ?? point.series.label, fx(point.x), fy(point.y)]),\n }}\n legend={{\n entries: toned.map(item => ({ id: item.id, label: item.label, tone: item.tone })),\n hidden,\n onToggle: id =>\n setHidden(current => {\n const next = new Set(current);\n if (next.has(id)) next.delete(id);\n else if (toned.length - current.size > 1) next.add(id);\n return next;\n }),\n }}\n className={className}\n testId={testId}\n />\n );\n};\n\nexport default /*#__PURE__*/ memo(\n /*#__PURE__*/ named(ScatterPlot, 'ScatterPlot'),\n) as typeof ScatterPlot;\n","'use client';\n\nimport { memo, useCallback, useId, useMemo } from 'react';\n\nimport { useHanui } from '@ahmetilhn/hanui';\n\nimport { named } from '../../helpers/component.helper';\nimport { fitLabel, labelWidth, thinTicks } from '../core/axes';\nimport ChartFrame from '../core/ChartFrame';\nimport { fullNumber, type ValueFormat } from '../core/format';\nimport { type ChartTone, toneColor } from '../core/palette';\nimport { scaleBand } from '../core/scale';\nimport { extent, finite } from '../core/stats';\nimport useChartWidth from '../core/useChartWidth';\n\nimport styles from './index.module.scss';\n\ntype Props = {\n label: string;\n description?: string;\n /** Sütun adları (x). */\n columns: readonly string[];\n /** Satır adları (y). */\n rows: readonly string[];\n /** `values[satır][sütun]`; `null` boş hücre (veri yok — sıfır değil). */\n values: readonly (readonly (number | null)[])[];\n /** Hücre değerinin adı (\"Sipariş\"). */\n valueLabel: string;\n tone?: ChartTone;\n height?: number;\n width?: number;\n formatValue?: ValueFormat;\n className?: string;\n testId?: string;\n};\n\n/** Renk yoğunluğu: en küçük değer %8, en büyük %100 — en açık hücre bile zeminden ayrışır. */\nconst MIN_MIX = 8;\nconst LEGEND_HEIGHT = 28;\n/** Renk ölçeği çubuğunun boyu (px). */\nconst SCALE_WIDTH = 140;\n\n/** Hücrenin değeri; eksik ya da sonlu olmayan değer `null` (boş hücre, sıfır değil). */\nconst valueAt = (values: Props['values'], row: number, column: number): number | null => {\n const value = values[row]?.[column];\n return typeof value === 'number' && Number.isFinite(value) ? value : null;\n};\n\n/** Bant ölçeği DİZİNLE anahtarlanır: aynı adı taşıyan iki satır tek banda çökmesin. */\nconst indices = (labels: readonly string[]) => labels.map((_, index) => String(index));\n\n/**\n * Isı haritası — iki kategorik boyutta bir değerin yoğunluğu. Renk TEK TONUN yoğunluğu\n * (sıralı ölçek): çok renkli bir ölçek düşük-yüksek sırasını okutmuyordu.\n * Değer renk tek başına okunmaz: ipucu, duyuru ve veri tablosu sayıyı söyler.\n *\n * Klavye: `←`/`→` sütun · `↑`/`↓` satır · `Home`/`End` ilk/son hücre · `Escape`.\n */\nconst Heatmap = ({\n label,\n description,\n columns,\n rows,\n values,\n valueLabel,\n tone = 'cat-1',\n height = 280,\n width: fixedWidth,\n formatValue,\n className,\n testId,\n}: Props) => {\n const { labels } = useHanui();\n const [containerRef, width] = useChartWidth(fixedWidth);\n const full = useMemo(() => fullNumber(labels?.locale), [labels?.locale]);\n const fv = formatValue ?? full;\n /* Bir sayfada iki ısı haritası aynı `id`yi taşımasın. */\n const gradientId = `hanui-heat-${useId().replace(/:/g, '')}`;\n\n const geometry = useMemo(() => {\n const left = Math.min(width * 0.3, Math.max(32, ...rows.map(labelWidth)) + 12);\n const area = { left, top: 8, right: width - 8, bottom: height - 28 - LEGEND_HEIGHT };\n const x = scaleBand(indices(columns), [area.left, area.right], {\n paddingInner: 0.06,\n paddingOuter: 0,\n });\n const y = scaleBand(indices(rows), [area.top, area.bottom], {\n paddingInner: 0.06,\n paddingOuter: 0,\n });\n const [min, max] = extent(finite(values.flat()));\n\n const mix = (value: number | null) =>\n value === null\n ? null\n : max === min\n ? 60\n : MIN_MIX + ((value - min) / (max - min)) * (100 - MIN_MIX);\n\n const cells = rows.flatMap((row, rowIndex) =>\n columns.map((column, columnIndex) => {\n const value = valueAt(values, rowIndex, columnIndex);\n return {\n row,\n column,\n key: `${rowIndex}:${columnIndex}`,\n value,\n x: x(String(columnIndex)),\n y: y(String(rowIndex)),\n width: x.bandwidth,\n height: y.bandwidth,\n mix: mix(value),\n };\n }),\n );\n\n return { area, x, y, cells, min, max };\n }, [columns, rows, values, width, height]);\n\n const color = toneColor(tone);\n\n const plot = useMemo(() => {\n const { area, x, y, cells } = geometry;\n const maxText = fv(geometry.max);\n const scaleRight = area.right - labelWidth(maxText) - 8;\n const columnTicks = thinTicks(\n columns.map((column, index) => ({\n position: x(String(index)) + x.bandwidth / 2,\n label: column,\n })),\n );\n\n return (\n <g>\n {cells.map(cell => (\n <rect\n key={cell.key}\n className={cell.mix === null ? styles.empty : undefined}\n x={cell.x}\n y={cell.y}\n width={cell.width}\n height={cell.height}\n rx={2}\n style={\n cell.mix === null\n ? undefined\n : { fill: `color-mix(in srgb, ${color} ${cell.mix}%, var(--hanui-surface))` }\n }\n />\n ))}\n <g aria-hidden className={styles.labels}>\n {rows.map((row, rowIndex) => (\n <text\n key={rowIndex}\n x={area.left - 8}\n y={y(String(rowIndex)) + y.bandwidth / 2}\n dy=\"0.32em\"\n textAnchor=\"end\"\n >\n {fitLabel(row, area.left - 12)}\n </text>\n ))}\n {columnTicks.map(tick => (\n <text key={tick.position} x={tick.position} y={area.bottom + 16} textAnchor=\"middle\">\n {tick.label}\n </text>\n ))}\n </g>\n {/* Renk ölçeği: en küçük → en büyük. */}\n <defs>\n <linearGradient id={gradientId}>\n <stop\n offset=\"0%\"\n style={{\n stopColor: `color-mix(in srgb, ${color} ${MIN_MIX}%, var(--hanui-surface))`,\n }}\n />\n <stop offset=\"100%\" style={{ stopColor: color }} />\n </linearGradient>\n </defs>\n {/* `en küçük ▬▬▬ en büyük` tek satırda; çubuk en büyük değerin yazısı kadar içeri çekilir. */}\n <g aria-hidden className={styles.labels}>\n <rect\n x={scaleRight - SCALE_WIDTH}\n y={height - 18}\n width={SCALE_WIDTH}\n height={8}\n rx={4}\n style={{ fill: `url(#${gradientId})` }}\n />\n <text x={scaleRight - SCALE_WIDTH - 8} y={height - 14} dy=\"0.32em\" textAnchor=\"end\">\n {fv(geometry.min)}\n </text>\n <text x={area.right} y={height - 14} dy=\"0.32em\" textAnchor=\"end\">\n {maxText}\n </text>\n </g>\n </g>\n );\n }, [geometry, columns, rows, color, gradientId, height, fv]);\n\n const pick = useCallback(\n (px: number, py: number) => {\n const { area, x, y } = geometry;\n if (px < area.left || px > area.right || py < area.top || py > area.bottom) return null;\n const column = x.indexAt(px);\n const row = y.indexAt(py);\n return column < 0 || row < 0 ? null : row * columns.length + column;\n },\n [geometry, columns.length],\n );\n\n const text = (index: number) => {\n const cell = geometry.cells[index];\n return { cell, value: cell.value === null ? '—' : fv(cell.value) };\n };\n\n return (\n <ChartFrame\n label={label}\n description={description}\n containerRef={containerRef}\n width={width}\n height={height}\n plot={plot}\n overlay={index => {\n const cell = geometry.cells[index];\n return (\n <rect\n className={styles.focus}\n x={cell.x - 1}\n y={cell.y - 1}\n width={cell.width + 2}\n height={cell.height + 2}\n rx={3}\n />\n );\n }}\n itemCount={geometry.cells.length}\n columns={columns.length}\n pick={pick}\n tooltip={index => {\n const { cell, value } = text(index);\n return {\n title: `${cell.row} · ${cell.column}`,\n rows: [{ id: 'value', label: valueLabel, value, tone }],\n };\n }}\n anchor={index => {\n const cell = geometry.cells[index];\n return { x: cell.x + cell.width / 2, y: cell.y + cell.height / 2 };\n }}\n announce={index => {\n const { cell, value } = text(index);\n return `${cell.row}, ${cell.column}: ${valueLabel} ${value}`;\n }}\n table={{\n columns: [label, ...columns],\n rows: rows.map((row, rowIndex) => [\n row,\n ...columns.map((_, columnIndex) => {\n const value = valueAt(values, rowIndex, columnIndex);\n return value === null ? '—' : fv(value);\n }),\n ]),\n }}\n className={className}\n testId={testId}\n />\n );\n};\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(Heatmap, 'Heatmap')) as typeof Heatmap;\n","'use client';\n\nimport { memo, useCallback, useMemo } from 'react';\n\nimport { useHanui } from '@ahmetilhn/hanui';\n\nimport { named } from '../../helpers/component.helper';\nimport { CategoryAxis, placeTicks, ValueAxis } from '../core/axes';\nimport ChartFrame from '../core/ChartFrame';\nimport { fullNumber, tickLabels, type ValueFormat } from '../core/format';\nimport { plotArea, tickCount } from '../core/margins';\nimport { type ChartTone, toneAt, toneColor } from '../core/palette';\nimport { niceDomain, scaleBand, scaleLinear, ticks } from '../core/scale';\nimport { type BoxStats, boxStats, extent } from '../core/stats';\nimport useChartWidth from '../core/useChartWidth';\n\nimport styles from './index.module.scss';\n\nexport type BoxPlotGroup = {\n id: string;\n label: string;\n /** Ham gözlemler — beş sayı özeti ve aykırılar bileşende hesaplanır (Tukey, 1,5 × IQR). */\n values: readonly number[];\n tone?: ChartTone;\n};\n\n/** Özetin okunan adları — metin kütüphaneden gelmez. */\nexport type BoxPlotLabels = {\n min: string;\n q1: string;\n median: string;\n q3: string;\n max: string;\n outliers: string;\n count: string;\n};\n\ntype Props = {\n label: string;\n description?: string;\n groups: readonly BoxPlotGroup[];\n /** Grup ekseninin ve tablonun ilk sütun başlığı. */\n groupLabel: string;\n labels: BoxPlotLabels;\n height?: number;\n width?: number;\n formatValue?: ValueFormat;\n className?: string;\n testId?: string;\n};\n\n/**\n * 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\n * içindeki en uç gözlem, dışarıdakiler nokta (aykırı).\n * ⚠ Bıyık ucu bir HESAP değil bir GÖZLEM: Q3 + 1,5 × IQR'ye kadar çizmek, verinin hiç ulaşmadığı\n * bir değeri gösterirdi.\n *\n * Klavye: `←`/`→` önceki/sonraki grup · `Home`/`End` · `Escape`.\n */\nconst BoxPlot = ({\n label,\n description,\n groups,\n groupLabel,\n labels: summaryLabels,\n height = 280,\n width: fixedWidth,\n formatValue,\n className,\n testId,\n}: Props) => {\n const { labels } = useHanui();\n const [containerRef, width] = useChartWidth(fixedWidth);\n const full = useMemo(() => fullNumber(labels?.locale), [labels?.locale]);\n const tickFormat = useMemo(() => tickLabels(labels?.locale), [labels?.locale]);\n const fv = formatValue ?? full;\n\n const stats = useMemo(\n () =>\n groups.map((group, index) => ({\n group,\n tone: toneAt(index, group.tone),\n stats: boxStats(group.values),\n })),\n [groups],\n );\n\n const geometry = useMemo(() => {\n const all = stats.flatMap(item => (item.stats ? [item.stats.min, item.stats.max] : []));\n const [low, high] = all.length ? extent(all) : [0, 1];\n const yDomain = niceDomain(low, high);\n const yTicks = ticks(yDomain[0], yDomain[1], tickCount(height, false));\n const area = plotArea(width, height, tickFormat(yTicks));\n const band = scaleBand(\n groups.map(group => group.id),\n [area.left, area.right],\n { paddingInner: 0.4, paddingOuter: 0.2 },\n );\n const y = scaleLinear(yDomain, [area.bottom, area.top]);\n\n return {\n area,\n band,\n y,\n yTicks: placeTicks(yTicks, y, tickFormat),\n groupTicks: groups.map(group => ({\n position: band(group.id) + band.bandwidth / 2,\n label: group.label,\n })),\n };\n }, [stats, groups, width, height, tickFormat]);\n\n const summary = (value: BoxStats) => [\n { id: 'max', label: summaryLabels.max, value: fv(value.whiskerHigh) },\n { id: 'q3', label: summaryLabels.q3, value: fv(value.q3) },\n { id: 'median', label: summaryLabels.median, value: fv(value.median) },\n { id: 'q1', label: summaryLabels.q1, value: fv(value.q1) },\n { id: 'min', label: summaryLabels.min, value: fv(value.whiskerLow) },\n ...(value.outliers.length > 0\n ? [{ id: 'outliers', label: summaryLabels.outliers, value: full(value.outliers.length) }]\n : []),\n { id: 'count', label: summaryLabels.count, value: full(value.count) },\n ];\n\n const plot = useMemo(() => {\n const { area, band, y } = geometry;\n\n return (\n <g>\n <ValueAxis area={area} ticks={geometry.yTicks} side=\"left\" hasGrid />\n <CategoryAxis area={area} ticks={geometry.groupTicks} side=\"bottom\" />\n {stats.map(({ group, tone, stats: value }) => {\n if (!value) return null;\n const left = band(group.id);\n const center = left + band.bandwidth / 2;\n const cap = band.bandwidth * 0.3;\n const color = toneColor(tone);\n\n return (\n <g key={group.id} style={{ stroke: color }} className={styles.box}>\n <line x1={center} x2={center} y1={y(value.whiskerHigh)} y2={y(value.q3)} />\n <line x1={center} x2={center} y1={y(value.q1)} y2={y(value.whiskerLow)} />\n <line\n x1={center - cap}\n x2={center + cap}\n y1={y(value.whiskerHigh)}\n y2={y(value.whiskerHigh)}\n />\n <line\n x1={center - cap}\n x2={center + cap}\n y1={y(value.whiskerLow)}\n y2={y(value.whiskerLow)}\n />\n <rect\n x={left}\n width={band.bandwidth}\n y={y(value.q3)}\n height={Math.max(1, y(value.q1) - y(value.q3))}\n rx={2}\n style={{ fill: `color-mix(in srgb, ${color} 22%, transparent)` }}\n />\n <line\n className={styles.median}\n x1={left}\n x2={left + band.bandwidth}\n y1={y(value.median)}\n y2={y(value.median)}\n />\n {value.outliers.map((outlier, index) => (\n <circle key={index} className={styles.outlier} cx={center} cy={y(outlier)} r={3} />\n ))}\n </g>\n );\n })}\n </g>\n );\n }, [geometry, stats]);\n\n const pick = useCallback(\n (px: number, py: number) => {\n const { area, band } = geometry;\n if (px < area.left || px > area.right || py < area.top - 4 || py > area.bottom + 4)\n return null;\n const index = band.indexAt(px);\n return index < 0 ? null : index;\n },\n [geometry],\n );\n\n return (\n <ChartFrame\n label={label}\n description={description}\n containerRef={containerRef}\n width={width}\n height={height}\n plot={plot}\n underlay={index => {\n const { area, band } = geometry;\n const pad = band.step * 0.2;\n return (\n <rect\n className={styles.band}\n x={band(groups[index].id) - pad}\n width={band.bandwidth + pad * 2}\n y={area.top}\n height={area.height}\n />\n );\n }}\n overlay={() => null}\n itemCount={groups.length}\n pick={pick}\n tooltip={index => {\n const item = stats[index];\n return {\n title: item.group.label,\n rows: item.stats\n ? summary(item.stats).map(row => ({\n ...row,\n tone: row.id === 'median' ? item.tone : undefined,\n }))\n : [],\n };\n }}\n anchor={index => {\n const item = stats[index];\n const { band, y } = geometry;\n return {\n x: band(item.group.id) + band.bandwidth / 2,\n y: item.stats ? y(item.stats.q3) : geometry.area.bottom,\n };\n }}\n announce={index => {\n const item = stats[index];\n return item.stats\n ? `${item.group.label}: ${summary(item.stats)\n .map(row => `${row.label} ${row.value}`)\n .join(', ')}`\n : item.group.label;\n }}\n table={{\n columns: [\n groupLabel,\n summaryLabels.min,\n summaryLabels.q1,\n summaryLabels.median,\n summaryLabels.q3,\n summaryLabels.max,\n summaryLabels.count,\n ],\n rows: stats.map(({ group, stats: value }) =>\n value\n ? [\n group.label,\n fv(value.whiskerLow),\n fv(value.q1),\n fv(value.median),\n fv(value.q3),\n fv(value.whiskerHigh),\n full(value.count),\n ]\n : [group.label, '—', '—', '—', '—', '—', '0'],\n ),\n }}\n className={className}\n testId={testId}\n />\n );\n};\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(BoxPlot, 'BoxPlot')) as typeof BoxPlot;\n","'use client';\n\nimport { memo, useCallback, useMemo } from 'react';\n\nimport { useHanui } from '@ahmetilhn/hanui';\n\nimport { named } from '../../helpers/component.helper';\nimport { placeTicks, ValueAxis } from '../core/axes';\nimport ChartFrame from '../core/ChartFrame';\nimport { fullNumber, tickLabels, type ValueFormat } from '../core/format';\nimport { plotArea, tickCount } from '../core/margins';\nimport { type ChartTone, toneColor } from '../core/palette';\nimport { niceDomain, scaleLinear, ticks } from '../core/scale';\nimport { histogram } from '../core/stats';\nimport useChartWidth from '../core/useChartWidth';\n\nimport styles from './index.module.scss';\n\ntype Props = {\n label: string;\n description?: string;\n /** Ham gözlemler; bölmeleri bileşen hesaplar. Sonlu olmayan değerler atılır. */\n values: readonly number[];\n /** Hedef bölme sayısı; verilmezse Sturges. Sınırlar \"güzel\" adıma oturur, sayı yaklaşık. */\n bins?: number;\n /** Değişkenin adı (x ekseni, tablo). */\n valueLabel: string;\n /** Sıklığın adı (\"Sipariş sayısı\"). */\n countLabel: string;\n tone?: ChartTone;\n height?: number;\n width?: number;\n formatValue?: ValueFormat;\n className?: string;\n testId?: string;\n};\n\n/** İki komşu sütun arası (px) — bölmeler ayrı okunur, sürekli dağılım izlenimi bozulmaz. */\nconst GAP = 1;\n\n/**\n * Histogram — tek değişkenin dağılımı. x ekseni SÜREKLİ (bölme sınırları), sütunlar bitişik.\n * Bölme: `[alt, üst)`, son bölme üst ucu DAHİL eder (en büyük değer dışarıda kalmaz).\n *\n * Klavye: `←`/`→` önceki/sonraki bölme · `Home`/`End` · `Escape`.\n */\nconst Histogram = ({\n label,\n description,\n values,\n bins: binCount,\n valueLabel,\n countLabel,\n tone = 'cat-1',\n height = 260,\n width: fixedWidth,\n formatValue,\n className,\n testId,\n}: Props) => {\n const { labels } = useHanui();\n const [containerRef, width] = useChartWidth(fixedWidth);\n const full = useMemo(() => fullNumber(labels?.locale), [labels?.locale]);\n const tickFormat = useMemo(() => tickLabels(labels?.locale), [labels?.locale]);\n const fv = formatValue ?? full;\n\n const bins = useMemo(() => histogram(values, binCount), [values, binCount]);\n\n const geometry = useMemo(() => {\n const maxCount = Math.max(1, ...bins.map(bin => bin.count));\n const yDomain = niceDomain(0, maxCount);\n const yTicks = ticks(0, yDomain[1], tickCount(height, false)).filter(Number.isInteger);\n const area = plotArea(width, height, tickFormat(yTicks));\n const lower = bins[0]?.from ?? 0;\n const upper = bins[bins.length - 1]?.to ?? 1;\n const x = scaleLinear([lower, upper], [area.left, area.right]);\n const y = scaleLinear(yDomain, [area.bottom, area.top]);\n\n return {\n area,\n columns: bins.map(bin => ({\n x: x(bin.from) + GAP / 2,\n width: Math.max(1, x(bin.to) - x(bin.from) - GAP),\n y: y(bin.count),\n height: Math.max(0, area.bottom - y(bin.count)),\n center: (x(bin.from) + x(bin.to)) / 2,\n })),\n xTicks: placeTicks(ticks(lower, upper, tickCount(area.width, true)), x, tickFormat),\n yTicks: placeTicks(yTicks, y, tickFormat),\n };\n }, [bins, width, height, tickFormat]);\n\n const range = (index: number) => `${fv(bins[index].from)} – ${fv(bins[index].to)}`;\n\n const plot = useMemo(\n () => (\n <g>\n <ValueAxis area={geometry.area} ticks={geometry.yTicks} side=\"left\" hasGrid />\n <ValueAxis area={geometry.area} ticks={geometry.xTicks} side=\"bottom\" />\n <line\n className={styles.baseline}\n x1={geometry.area.left}\n x2={geometry.area.right}\n y1={geometry.area.bottom}\n y2={geometry.area.bottom}\n />\n {geometry.columns.map((column, index) =>\n column.height > 0 ? (\n <rect\n key={index}\n x={column.x}\n y={column.y}\n width={column.width}\n height={column.height}\n style={{ fill: toneColor(tone) }}\n />\n ) : null,\n )}\n </g>\n ),\n [geometry, tone],\n );\n\n const pick = useCallback(\n (px: number, py: number) => {\n const { area, columns } = geometry;\n if (px < area.left || px > area.right || py < area.top - 4 || py > area.bottom + 4)\n return null;\n const index = columns.findIndex(\n column => px >= column.x - GAP && px <= column.x + column.width + GAP,\n );\n return index < 0 ? null : index;\n },\n [geometry],\n );\n\n return (\n <ChartFrame\n label={label}\n description={description}\n containerRef={containerRef}\n width={width}\n height={height}\n plot={plot}\n underlay={index => {\n const column = geometry.columns[index];\n return (\n <rect\n className={styles.band}\n x={column.x - GAP / 2}\n width={column.width + GAP}\n y={geometry.area.top}\n height={geometry.area.height}\n />\n );\n }}\n overlay={() => null}\n itemCount={bins.length}\n pick={pick}\n tooltip={index => ({\n title: range(index),\n rows: [{ id: 'count', label: countLabel, value: full(bins[index].count), tone }],\n })}\n anchor={index => ({ x: geometry.columns[index].center, y: geometry.columns[index].y })}\n announce={index => `${valueLabel} ${range(index)}: ${countLabel} ${full(bins[index].count)}`}\n table={{\n columns: [valueLabel, countLabel],\n rows: bins.map((bin, index) => [range(index), full(bin.count)]),\n }}\n className={className}\n testId={testId}\n />\n );\n};\n\nexport default /*#__PURE__*/ memo(/*#__PURE__*/ named(Histogram, 'Histogram')) as typeof Histogram;\n","'use client';\n\nimport { memo, useCallback, useMemo, useState } from 'react';\n\nimport { useHanui } from '@ahmetilhn/hanui';\n\nimport { named } from '../../helpers/component.helper';\nimport { fitLabel, labelWidth } from '../core/axes';\nimport ChartFrame from '../core/ChartFrame';\nimport { fullNumber, tickLabels, type ValueFormat } from '../core/format';\nimport { type ChartTone, toneAt, toneColor } from '../core/palette';\nimport { polar, polygonPath } from '../core/path';\nimport { niceDomain, ticks as tickValues } from '../core/scale';\nimport useChartWidth from '../core/useChartWidth';\n\nimport styles from './index.module.scss';\n\nexport type RadarAxis = {\n key: string;\n label: string;\n};\n\nexport type RadarSeries = {\n id: string;\n label: string;\n /** Eksen anahtarı → değer. Eksik ya da `null` değer merkezde çizilir, ipucunda \"—\" okunur. */\n values: Readonly<Record<string, number | null | undefined>>;\n tone?: ChartTone;\n};\n\ntype Props = {\n label: string;\n description?: string;\n /** Saat 12'den saat yönünde dizilen eksenler. ⚠ Üçten az eksen bir alan çizmez. */\n axes: readonly RadarAxis[];\n series: readonly RadarSeries[];\n /**\n * Ortak ölçeğin üst ucu. Verilmezse en büyük değerden \"güzel\" bir sayıya yuvarlanır.\n * ⚠ Bütün eksenler AYNI ölçeği paylaşır: birimleri farklı eksenleri önce normalleştirin (0-100).\n */\n max?: number;\n height?: number;\n width?: number;\n formatValue?: ValueFormat;\n className?: string;\n testId?: string;\n};\n\n/** Eksen etiketinin çemberden uzaklığı (px). */\nconst LABEL_GAP = 10;\n/** Ölçek sayısının dikey payı (px): halkalar bundan sıkışıksa sayılar seyrelir. */\nconst RING_LABEL_HEIGHT = 16;\n/** İşaretçinin eksen etiketinin ötesinde hâlâ isabet sayıldığı pay (px). */\nconst PICK_SLACK = 28;\n\nconst valueOf = (series: RadarSeries, key: string): number | null => {\n const value = series.values[key];\n return typeof value === 'number' && Number.isFinite(value) ? value : null;\n};\n\n/**\n * Radar (örümcek) grafiği — birkaç serinin aynı eksen takımında karşılaştırılması. Izgara\n * ÇOKGEN (çember değil): değer eksen üzerinde okunur, eksenler arası eğri bir değer vaat etmez.\n *\n * Etkileşim EKSEN başınadır: işaretçi en yakın ekseni seçer ve ipucu o eksendeki bütün serileri\n * okur. Klavye: `←`/`→` önceki/sonraki eksen · `Home`/`End` · `Escape`.\n */\nconst RadarChart = ({\n label,\n description,\n axes,\n series,\n max,\n height = 320,\n width: fixedWidth,\n formatValue,\n className,\n testId,\n}: Props) => {\n const { labels } = useHanui();\n const [containerRef, width] = useChartWidth(fixedWidth);\n const [hidden, setHidden] = useState<ReadonlySet<string>>(() => new Set());\n const tickFormat = useMemo(() => tickLabels(labels?.locale), [labels?.locale]);\n const full = useMemo(() => fullNumber(labels?.locale), [labels?.locale]);\n const fv = formatValue ?? full;\n\n const toned = useMemo(\n () => series.map((item, index) => ({ ...item, tone: toneAt(index, item.tone) })),\n [series],\n );\n const visible = useMemo(() => toned.filter(item => !hidden.has(item.id)), [toned, hidden]);\n\n const geometry = useMemo(() => {\n const count = axes.length;\n const step = count > 0 ? (Math.PI * 2) / count : 0;\n const angles = axes.map((_, index) => index * step);\n\n /*\n * Yarıçap: dikeyde bir satır etiket payı, yatayda en uzun YAN etiketin payı. Etiket sığmazsa\n * kısaltılır — yarıçap etiketler için sonsuza kadar küçülmez.\n */\n const widest = Math.min(width * 0.22, Math.max(0, ...axes.map(axis => labelWidth(axis.label))));\n const radius = Math.max(24, Math.min(height / 2 - 24, width / 2 - widest - LABEL_GAP - 4));\n const cx = width / 2;\n const cy = height / 2;\n\n let peak = 0;\n for (const item of series)\n for (const axis of axes) {\n const value = valueOf(item, axis.key);\n if (value !== null && value > peak) peak = value;\n }\n const top = max !== undefined && max > 0 ? max : niceDomain(0, peak, 4)[1];\n const rings = tickValues(0, top, 4).filter(value => value > 0);\n const scale = (value: number) => (Math.min(Math.max(value, 0), top) / top) * radius;\n\n return { cx, cy, radius, angles, step, top, rings, scale, labelRoom: widest };\n }, [axes, series, max, width, height]);\n\n const shapes = useMemo(() => {\n const { cx, cy, angles, scale } = geometry;\n return visible.map(item => ({\n ...item,\n points: axes.map((axis, index) => {\n const value = valueOf(item, axis.key);\n return { ...polar(cx, cy, scale(value ?? 0), angles[index]), value };\n }),\n }));\n }, [geometry, visible, axes]);\n\n const plot = useMemo(() => {\n const { cx, cy, radius, angles, rings, scale, labelRoom } = geometry;\n const ringGap = rings.length > 0 ? scale(rings[0]) : radius;\n const ringEvery = Math.max(1, Math.ceil(RING_LABEL_HEIGHT / Math.max(1, ringGap)));\n const ringLabels = tickFormat(rings);\n\n return (\n <g>\n <g aria-hidden className={styles.grid}>\n {rings.map(ring => (\n <path\n key={ring}\n d={polygonPath(angles.map(angle => polar(cx, cy, scale(ring), angle)))}\n />\n ))}\n {angles.map((angle, index) => {\n const end = polar(cx, cy, radius, angle);\n return <line key={axes[index].key} x1={cx} y1={cy} x2={end.x} y2={end.y} />;\n })}\n </g>\n\n {shapes.map(shape => (\n <path\n key={shape.id}\n className={styles.shape}\n d={polygonPath(shape.points)}\n style={{\n fill: `color-mix(in srgb, ${toneColor(shape.tone)} 14%, transparent)`,\n stroke: toneColor(shape.tone),\n }}\n />\n ))}\n\n <g aria-hidden className={styles.labels}>\n {/*\n * Ölçek sayısı halkanın İÇİNDE: dışarıda, tepedeki eksen adıyla çakışıyordu. Halkalar\n * yazıdan sıkışıksa (dar ekran) sayılar seyrelir; en dıştaki her zaman kalır.\n */}\n {rings.map((ring, index) =>\n (rings.length - 1 - index) % ringEvery === 0 ? (\n <text key={ring} x={cx + 4} y={cy - scale(ring)} dy=\"1.1em\">\n {ringLabels[index]}\n </text>\n ) : null,\n )}\n {axes.map((axis, index) => {\n const angle = angles[index];\n const point = polar(cx, cy, radius + LABEL_GAP, angle);\n const sin = Math.sin(angle);\n const cos = Math.cos(angle);\n const anchor = sin > 0.3 ? 'start' : sin < -0.3 ? 'end' : 'middle';\n /* Üstteki etiket çizginin ÜSTÜNE, alttaki ALTINA oturur. */\n const dy = cos > 0.3 ? '-0.2em' : cos < -0.3 ? '0.9em' : '0.32em';\n return (\n <text\n key={axis.key}\n className={styles.axisLabel}\n x={point.x}\n y={point.y}\n dy={dy}\n textAnchor={anchor}\n >\n {fitLabel(axis.label, anchor === 'middle' ? radius * 1.4 : labelRoom)}\n </text>\n );\n })}\n </g>\n </g>\n );\n }, [geometry, shapes, axes, tickFormat]);\n\n const pick = useCallback(\n (px: number, py: number) => {\n const { cx, cy, radius, step } = geometry;\n if (axes.length === 0 || Math.hypot(px - cx, py - cy) > radius + PICK_SLACK) return null;\n\n let angle = Math.atan2(px - cx, -(py - cy));\n if (angle < 0) angle += Math.PI * 2;\n return Math.round(angle / step) % axes.length;\n },\n [geometry, axes.length],\n );\n\n const read = (index: number) =>\n shapes.map(shape => {\n const value = shape.points[index].value;\n return {\n id: shape.id,\n label: shape.label,\n value: value === null ? '—' : fv(value),\n tone: shape.tone,\n };\n });\n\n return (\n <ChartFrame\n label={label}\n description={description}\n containerRef={containerRef}\n width={width}\n height={height}\n plot={plot}\n overlay={index => {\n const { cx, cy, radius, angles } = geometry;\n const end = polar(cx, cy, radius, angles[index]);\n return (\n <g>\n <line className={styles.spoke} x1={cx} y1={cy} x2={end.x} y2={end.y} />\n {shapes.map(shape => {\n const point = shape.points[index];\n return point.value === null ? null : (\n <circle\n key={shape.id}\n className={styles.marker}\n cx={point.x}\n cy={point.y}\n r={4.5}\n style={{ fill: toneColor(shape.tone) }}\n />\n );\n })}\n </g>\n );\n }}\n itemCount={axes.length}\n pick={pick}\n tooltip={index => ({ title: axes[index].label, rows: read(index) })}\n anchor={index => {\n const { cx, cy, radius, angles } = geometry;\n /* Eksenin dış ucu değil en uzak serinin noktası: ipucu boş ızgaranın üstünde durmasın. */\n let reach = 0;\n for (const shape of shapes) {\n const point = shape.points[index];\n reach = Math.max(reach, Math.hypot(point.x - cx, point.y - cy));\n }\n return polar(cx, cy, Math.min(radius, reach), angles[index]);\n }}\n tooltipSide=\"outward\"\n announce={index =>\n `${axes[index].label}: ${read(index)\n .map(row => `${row.label} ${row.value}`)\n .join(', ')}`\n }\n table={{\n columns: [label, ...toned.map(item => item.label)],\n rows: axes.map(axis => [\n axis.label,\n ...toned.map(item => {\n const value = valueOf(item, axis.key);\n return value === null ? '—' : fv(value);\n }),\n ]),\n }}\n legend={\n toned.length > 1\n ? {\n entries: toned.map(item => ({ id: item.id, label: item.label, tone: item.tone })),\n hidden,\n onToggle: id =>\n setHidden(current => {\n const next = new Set(current);\n if (next.has(id)) next.delete(id);\n else if (toned.length - current.size > 1) next.add(id);\n return next;\n }),\n }\n : undefined\n }\n className={className}\n testId={testId}\n />\n );\n};\n\nexport default /*#__PURE__*/ memo(\n /*#__PURE__*/ named(RadarChart, 'RadarChart'),\n) as typeof RadarChart;\n"],"names":["named","component","displayName","placeTicks","values","scale","format","labels","value","index","CHAR_WIDTH","labelWidth","label","thinTicks","ticks","minGap","widest","tick","spacing","every","_","fitLabel","width","max","ValueAxis","area","side","hasGrid","jsx","styles","jsxs","CategoryAxis","Fragment","round","segments","points","result","current","point","linear","monotone","count","slopes","deltas","dx","alpha","beta","magnitude","tau","path","start","end","third","linePath","curve","part","areaPath","top","base","paths","upper","lower","flush","draw","back","floor","polar","cx","cy","radius","angle","arcPath","outer","inner","sweep","ring","sweepFlag","large","o0","o1","i1","i0","polygonPath","scaleLinear","domain","range","d0","d1","r0","r1","span","pixel","scaleBand","paddingInner","paddingOuter","step","bandwidth","key","position","tickStep","min","raw","power","error","clean","decimals","niceDomain","low","high","pad","first","last","nearestIndex","sorted","middle","finite","extent","quantile","probability","fraction","boxStats","second","q1","q3","fence","inside","histogram","binCount","data","target","bins","toNumber","MARGIN","stack","rows","keys","positive","negative","row","cartesianGeometry","input","xKey","series","height","isStacked","formatX","hasBars","item","isHorizontal","xValues","isContinuous","stacks","axis","type","valueOf","domainFor","members","fixedMin","fixedMax","nice","leftDomain","rightDomain","hasRightAxis","leftLabels","linearTicks","rightLabels","categoryLabels","left","right","categoryRange","valueRange","leftScale","rightScale","scaleFor","centers","xScale","numeric","band","at","category","bars","barSeries","slots","slotGap","slotWidth","seriesIndex","slot","v0","v1","lines","areas","anchors","extreme","fallback","toTicks","categoryTicks","TONE_ORDER","toneAt","tone","toneColor","TOOLTIP_GAP","ChartFrame","description","containerRef","plot","overlay","underlay","itemCount","columns","pick","tooltip","anchor","tooltipSide","announce","table","legend","className","testId","descriptionId","useId","say","useAnnounce","active","setActive","useState","frame","useRef","tooltipRef","pending","useEffect","handlePointerMove","useCallback","event","box","move","next","clamped","handleKeyDown","content","pointX","useLayoutEffect","node","size","isRightHalf","prefersLeft","leftX","rightX","fitsLeft","fitsRight","x","entry","isHidden","LegendSwatch","column","cell","cellIndex","cache","formatter","locale","options","instance","digitExponents","mantissa","exponent","tickLabels","finest","_a","fullNumber","FALLBACK_WIDTH","useIsomorphicLayoutEffect","useChartWidth","fixed","ref","setWidth","measure","rounded","observer","DEFAULT_HEIGHT","MISSING","CartesianChart","xLabel","fixedWidth","orientation","hasPoints","formatValue","useHanui","hidden","setHidden","valueFormat","useMemo","axisFormat","formatXValue","toned","visible","geometry","order","center","a","b","y","shape","bar","list","id","CartesianChart$1","memo","LineChart","rest","index$9","AreaChart","index$8","BarChart","index$7","ComposedChart","props","index$6","LIFT","SEPARATOR","PieChart","variant","centerValue","centerLabel","valueLabel","full","fv","slice","total","sum","slices","percent","share","px","py","distance","describe","shift","index$5","plotArea","bottom","tickCount","length","horizontal","spatialIndex","buckets","bucket","reach","best","bestDistance","dy","RADIUS","HIT_RADIUS","ScatterPlot","yLabel","sizeLabel","formatY","tickFormat","fx","fy","flat","xDomain","yDomain","yTicks","sizes","sizeMin","sizeMax","placed","index$4","MIN_MIX","LEGEND_HEIGHT","SCALE_WIDTH","valueAt","indices","Heatmap","gradientId","mix","cells","rowIndex","columnIndex","color","maxText","scaleRight","columnTicks","text","index$3","BoxPlot","groups","groupLabel","summaryLabels","stats","group","all","summary","cap","outlier","index$2","GAP","Histogram","countLabel","maxCount","bin","_b","index$1","LABEL_GAP","RING_LABEL_HEIGHT","PICK_SLACK","RadarChart","axes","angles","peak","rings","tickValues","shapes","labelRoom","ringGap","ringEvery","ringLabels","sin","cos","read"],"mappings":"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"}