@skdx/angular-charts 0.33.0 → 0.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +96 -41
- package/fesm2022/skdx-angular-charts-area.mjs +14 -2
- package/fesm2022/skdx-angular-charts-area.mjs.map +1 -1
- package/fesm2022/skdx-angular-charts-bar.mjs +18 -15
- package/fesm2022/skdx-angular-charts-bar.mjs.map +1 -1
- package/fesm2022/skdx-angular-charts-boxplot.mjs +18 -6
- package/fesm2022/skdx-angular-charts-boxplot.mjs.map +1 -1
- package/fesm2022/skdx-angular-charts-candlestick.mjs +41 -8
- package/fesm2022/skdx-angular-charts-candlestick.mjs.map +1 -1
- package/fesm2022/skdx-angular-charts-chord.mjs +18 -6
- package/fesm2022/skdx-angular-charts-chord.mjs.map +1 -1
- package/fesm2022/skdx-angular-charts-funnel.mjs +29 -8
- package/fesm2022/skdx-angular-charts-funnel.mjs.map +1 -1
- package/fesm2022/skdx-angular-charts-gantt.mjs +23 -11
- package/fesm2022/skdx-angular-charts-gantt.mjs.map +1 -1
- package/fesm2022/skdx-angular-charts-heatmap.mjs +53 -15
- package/fesm2022/skdx-angular-charts-heatmap.mjs.map +1 -1
- package/fesm2022/skdx-angular-charts-internal.mjs +2709 -494
- package/fesm2022/skdx-angular-charts-internal.mjs.map +1 -1
- package/fesm2022/skdx-angular-charts-line.mjs +14 -2
- package/fesm2022/skdx-angular-charts-line.mjs.map +1 -1
- package/fesm2022/skdx-angular-charts-map.mjs +35 -8
- package/fesm2022/skdx-angular-charts-map.mjs.map +1 -1
- package/fesm2022/skdx-angular-charts-pie.mjs +37 -5
- package/fesm2022/skdx-angular-charts-pie.mjs.map +1 -1
- package/fesm2022/skdx-angular-charts-radar.mjs +35 -8
- package/fesm2022/skdx-angular-charts-radar.mjs.map +1 -1
- package/fesm2022/skdx-angular-charts-radial.mjs +108 -0
- package/fesm2022/skdx-angular-charts-radial.mjs.map +1 -0
- package/fesm2022/skdx-angular-charts-sankey.mjs +18 -6
- package/fesm2022/skdx-angular-charts-sankey.mjs.map +1 -1
- package/fesm2022/skdx-angular-charts-scatter.mjs +37 -5
- package/fesm2022/skdx-angular-charts-scatter.mjs.map +1 -1
- package/fesm2022/skdx-angular-charts-sparkline.mjs +42 -8
- package/fesm2022/skdx-angular-charts-sparkline.mjs.map +1 -1
- package/fesm2022/skdx-angular-charts-sunburst.mjs +18 -6
- package/fesm2022/skdx-angular-charts-sunburst.mjs.map +1 -1
- package/fesm2022/skdx-angular-charts-treemap.mjs +26 -6
- package/fesm2022/skdx-angular-charts-treemap.mjs.map +1 -1
- package/fesm2022/skdx-angular-charts-waterfall.mjs +18 -6
- package/fesm2022/skdx-angular-charts-waterfall.mjs.map +1 -1
- package/fesm2022/skdx-angular-charts.mjs +2 -0
- package/fesm2022/skdx-angular-charts.mjs.map +1 -1
- package/package.json +7 -3
- package/types/skdx-angular-charts-area.d.ts +1 -1
- package/types/skdx-angular-charts-bar.d.ts +5 -13
- package/types/skdx-angular-charts-boxplot.d.ts +2 -2
- package/types/skdx-angular-charts-candlestick.d.ts +10 -4
- package/types/skdx-angular-charts-chord.d.ts +2 -2
- package/types/skdx-angular-charts-funnel.d.ts +5 -3
- package/types/skdx-angular-charts-gantt.d.ts +6 -6
- package/types/skdx-angular-charts-heatmap.d.ts +16 -8
- package/types/skdx-angular-charts-internal.d.ts +581 -44
- package/types/skdx-angular-charts-line.d.ts +1 -1
- package/types/skdx-angular-charts-map.d.ts +4 -3
- package/types/skdx-angular-charts-pie.d.ts +10 -2
- package/types/skdx-angular-charts-radar.d.ts +8 -3
- package/types/skdx-angular-charts-radial.d.ts +34 -0
- package/types/skdx-angular-charts-sankey.d.ts +2 -2
- package/types/skdx-angular-charts-scatter.d.ts +10 -3
- package/types/skdx-angular-charts-sparkline.d.ts +13 -5
- package/types/skdx-angular-charts-sunburst.d.ts +2 -2
- package/types/skdx-angular-charts-treemap.d.ts +4 -4
- package/types/skdx-angular-charts-waterfall.d.ts +2 -2
- package/types/skdx-angular-charts.d.ts +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skdx-angular-charts-internal.mjs","sources":["../../src/internal/core/palette.ts","../../src/internal/core/scale.ts","../../src/internal/core/frame.ts","../../src/internal/core/shapes.ts","../../src/internal/core/bar.ts","../../src/internal/core/line.ts","../../src/internal/core/scatter.ts","../../src/internal/core/pie.ts","../../src/internal/core/sparkline.ts","../../src/internal/core/radar.ts","../../src/internal/core/heatmap.ts","../../src/internal/core/funnel.ts","../../src/internal/core/sankey.ts","../../src/internal/core/treemap.ts","../../src/internal/core/candlestick.ts","../../src/internal/core/waterfall.ts","../../src/internal/core/gantt.ts","../../src/internal/core/boxplot.ts","../../src/internal/core/sunburst.ts","../../src/internal/core/chord.ts","../../src/internal/core/map.ts","../../src/internal/core/index.ts","../../src/internal/shapes.component.ts","../../src/internal/frame.component.ts","../../src/internal/index.ts","../../src/internal/skdx-angular-charts-internal.ts"],"sourcesContent":["/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\n/**\n * Series colors, cycling through the `@skdx/tokens` scales so charts follow the\n * active theme. Load `@skdx/tokens/css` (or any theme) for these to resolve.\n */\nexport const SERIES_COLORS: readonly string[] = [\n 'primary',\n 'success',\n 'warning',\n 'danger',\n 'neutral',\n]\n .flatMap((scale) => [500, 700].map((shade) => `var(--skdx-color-${scale}-${shade})`))\n // Interleave: every 500 first, then every 700.\n .sort((a, b) => Number(a.endsWith('700)')) - Number(b.endsWith('700)')));\n\nexport const CHART_COLORS = {\n axis: 'var(--skdx-color-border-strong)',\n grid: 'var(--skdx-color-border-subtle)',\n label: 'var(--skdx-color-text-muted)',\n fontFamily: 'var(--skdx-font-family)',\n fontSize: 'var(--skdx-font-size-xs)',\n} as const;\n\nexport const seriesColor = (index: number, override?: string | undefined): string =>\n override ?? (SERIES_COLORS[index % SERIES_COLORS.length] as string);\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\n/** Maps `[d0, d1]` onto `[r0, r1]` linearly; a zero-width domain maps to `r0`. */\nexport function linearScale(\n [d0, d1]: readonly [number, number],\n [r0, r1]: readonly [number, number],\n): (value: number) => number {\n const span = d1 - d0;\n return (value) => (span === 0 ? r0 : r0 + ((value - d0) / span) * (r1 - r0));\n}\n\n/** Round tick values covering `[min, max]` with a 1/2/5 step, about `count` of them. */\nexport function niceTicks(min: number, max: number, count = 5): number[] {\n if (min === max) return [min];\n const raw = (max - min) / Math.max(1, count);\n const magnitude = 10 ** Math.floor(Math.log10(raw));\n const norm = raw / magnitude;\n const step = (norm < 1.5 ? 1 : norm < 3.5 ? 2 : norm < 7.5 ? 5 : 10) * magnitude;\n const start = Math.floor(min / step) * step;\n const end = Math.ceil(max / step) * step;\n const ticks: number[] = [];\n for (let v = start; v <= end + step / 2; v += step) ticks.push(round(v));\n return ticks;\n}\n\n/** Evenly spaced slots for `count` categories across `[r0, r1]` with 20% gaps. */\nexport function bandScale(count: number, [r0, r1]: readonly [number, number]) {\n const step = count === 0 ? 0 : (r1 - r0) / count;\n const bandwidth = step * 0.8;\n return {\n step,\n bandwidth,\n start: (i: number) => r0 + i * step + (step - bandwidth) / 2,\n center: (i: number) => r0 + (i + 0.5) * step,\n };\n}\n\nconst round = (v: number) => Number(v.toPrecision(12));\n\n/** Pixel coordinates rounded to 2 decimals, so the markup stays readable. */\nexport const px = (n: number): number => Number(n.toFixed(2));\n\nexport const formatValue = (v: number): string => new Intl.NumberFormat().format(round(v));\n\n/** SVG path through the points: straight segments, or a monotone cubic (Fritsch–Carlson) that never overshoots. */\nexport function pathThrough(\n points: { x: number; y: number }[],\n curve: 'linear' | 'monotone' = 'linear',\n): string {\n if (points.length === 0) return '';\n const first = points[0] as { x: number; y: number };\n if (curve === 'linear' || points.length < 3)\n return `M${points.map((p) => `${p.x} ${p.y}`).join('L')}`;\n const n = points.length;\n const dx = points.slice(1).map((p, i) => p.x - (points[i] as { x: number }).x);\n const dy = points.slice(1).map((p, i) => p.y - (points[i] as { y: number }).y);\n const slope = dx.map((d, i) => (d === 0 ? 0 : (dy[i] as number) / d));\n const m: number[] = [slope[0] as number];\n for (let i = 1; i < n - 1; i++) {\n const a = slope[i - 1] as number;\n const b = slope[i] as number;\n m.push(a * b <= 0 ? 0 : (a + b) / 2);\n }\n m.push(slope[n - 2] as number);\n for (let i = 0; i < n - 1; i++) {\n const s = slope[i] as number;\n if (s === 0) {\n m[i] = 0;\n m[i + 1] = 0;\n continue;\n }\n const a = (m[i] as number) / s;\n const b = (m[i + 1] as number) / s;\n const h = Math.hypot(a, b);\n if (h > 3) {\n m[i] = (3 * a * s) / h;\n m[i + 1] = (3 * b * s) / h;\n }\n }\n let d = `M${first.x} ${first.y}`;\n for (let i = 0; i < n - 1; i++) {\n const p0 = points[i] as { x: number; y: number };\n const p1 = points[i + 1] as { x: number; y: number };\n const h = (dx[i] as number) / 3;\n d += `C${px(p0.x + h)} ${px(p0.y + h * (m[i] as number))} ${px(p1.x - h)} ${px(p1.y - h * (m[i + 1] as number))} ${p1.x} ${p1.y}`;\n }\n return d;\n}\n\n/** Ticks at powers of ten covering `[min, max]` (both > 0), with 2× and 5× steps when a decade or less. */\nexport function logTicks(min: number, max: number): number[] {\n const lo = Math.floor(Math.log10(min));\n const hi = Math.ceil(Math.log10(max));\n const steps = hi - lo <= 1 ? [1, 2, 5] : [1];\n const ticks: number[] = [];\n for (let k = lo; k <= hi; k++) for (const s of steps) ticks.push(round(s * 10 ** k));\n return ticks.filter((t) => t >= min / 1.0001 && t <= max * 1.0001);\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { CHART_COLORS, seriesColor } from './palette.js';\nimport { bandScale, formatValue, linearScale, logTicks, niceTicks, px } from './scale.js';\nimport type { Box, Canvas, ChartInput, Frame, LegendItem, Shape, Sized, Tick } from './types.js';\n\nexport const MARGIN = { top: 16, right: 16, bottom: 32, left: 48 } as const;\n\nexport function plotBox(\n width: number,\n height: number,\n margin: Record<'top' | 'right' | 'bottom' | 'left', number> = MARGIN,\n): Box {\n return {\n x: margin.left,\n y: margin.top,\n width: Math.max(0, width - margin.left - margin.right),\n height: Math.max(0, height - margin.top - margin.bottom),\n };\n}\n\nexport const size = (input: Sized, w = 600, h = 300) => ({\n width: input.width ?? w,\n height: input.height ?? h,\n});\n\nexport const LEGEND_HEIGHT = 20;\n\n/** Vertical room the legend row takes, to shift the plot down by. */\nexport const legendTop = (input: Sized): number => (input.legend ? LEGEND_HEIGHT : 0);\n\nconst CHAR = 6.5;\n\n/** One row of swatches and names along the top edge, wrapping when it runs out of width. */\nexport function legendShapes(items: LegendItem[], width: number): Shape[] {\n const shapes: Shape[] = [];\n let x = 8;\n let y = 10;\n for (const item of items) {\n const w = 18 + item.name.length * CHAR;\n if (x + w > width - 8 && x > 8) {\n x = 8;\n y += LEGEND_HEIGHT;\n }\n shapes.push(\n { kind: 'rect', part: 'legend-swatch', x, y: y - 5, width: 10, height: 10, fill: item.color },\n {\n kind: 'text',\n part: 'legend-label',\n x: x + 14,\n y,\n text: item.name,\n baseline: 'middle',\n fill: CHART_COLORS.label,\n },\n );\n x += w + 12;\n }\n return shapes;\n}\n\n/** The common tail of every layout: size, legend decorations and the tooltip switch. */\nexport function canvas(\n input: Sized,\n width: number,\n height: number,\n legend: LegendItem[] = [],\n): Canvas {\n return {\n width,\n height,\n tooltip: input.tooltip ?? true,\n shapes: input.legend ? legendShapes(legend, width) : [],\n };\n}\n\n/** A tooltip box next to the pointer, kept inside the canvas. */\nexport function tooltipShapes(\n x: number,\n y: number,\n text: string,\n width: number,\n height: number,\n): Shape[] {\n const w = text.length * CHAR + 12;\n const h = 22;\n const bx = Math.max(0, Math.min(width - w, x + 12));\n const by = Math.max(0, Math.min(height - h, y - h - 6));\n return [\n {\n kind: 'rect',\n part: 'tooltip',\n x: px(bx),\n y: px(by),\n width: px(w),\n height: h,\n fill: 'var(--skdx-color-surface-raised)',\n stroke: CHART_COLORS.axis,\n },\n {\n kind: 'text',\n part: 'tooltip-label',\n x: px(bx + 6),\n y: px(by + h / 2),\n text,\n baseline: 'middle',\n fill: 'var(--skdx-color-text-default)',\n },\n ];\n}\n\n/** `[min, max]` of the values, widened to include zero when asked; `[0, 0]` when empty. */\nexport function extent(values: number[], includeZero: boolean): readonly [number, number] {\n if (values.length === 0) return [0, 0];\n const min = Math.min(...values);\n const max = Math.max(...values);\n return includeZero ? [Math.min(0, min), Math.max(0, max)] : [min, max];\n}\n\n/** A nice-ticked linear axis over `[min, max]` mapped onto `range`. */\nexport function axis(\n [min, max]: readonly [number, number],\n range: readonly [number, number],\n log = false,\n) {\n if (log) {\n const lo = Math.max(min, Number.EPSILON);\n const ticks = logTicks(lo, Math.max(max, lo));\n const domain = [Math.log10(lo), Math.log10(Math.max(max, lo))] as const;\n const lin = linearScale(domain, range);\n const scale = (v: number) => lin(Math.log10(Math.max(v, Number.EPSILON)));\n return {\n scale,\n domain,\n ticks: ticks.map((v): Tick => ({ pos: px(scale(v)), label: formatValue(v) })),\n zero: px(range[0]),\n };\n }\n const ticks = niceTicks(min, max);\n const domain = [ticks[0] as number, ticks[ticks.length - 1] as number] as const;\n const scale = linearScale(domain, range);\n return {\n scale,\n domain,\n ticks: ticks.map((v): Tick => ({ pos: px(scale(v)), label: formatValue(v) })),\n /** Pixel position of zero, clamped into the domain. */\n zero: px(scale(Math.min(Math.max(0, domain[0]), domain[1]))),\n };\n}\n\nexport interface FrameScales {\n frame: Frame;\n x: ReturnType<typeof bandScale>;\n y: (value: number) => number;\n categories: string[];\n}\n\n/** Axes, ticks and scales shared by the category charts; `yExtent` is the y domain to cover. */\nexport function buildFrame(input: ChartInput, yExtent: readonly [number, number]): FrameScales {\n const { width, height } = size(input);\n const plot = plotBox(width, height, { ...MARGIN, top: MARGIN.top + legendTop(input) });\n const count = Math.max(input.categories?.length ?? 0, ...input.series.map((s) => s.data.length));\n const categories = Array.from(\n { length: count },\n (_, i) => input.categories?.[i] ?? String(i + 1),\n );\n const y = axis(yExtent, [plot.y + plot.height, plot.y]);\n const x = bandScale(count, [plot.x, plot.x + plot.width]);\n return {\n frame: {\n ...canvas(\n input,\n width,\n height,\n input.series.map((s, i) => ({ name: s.name, color: seriesColor(i, s.color) })),\n ),\n plot,\n xTicks: categories.map((label, i) => ({ pos: px(x.center(i)), label })),\n yTicks: y.ticks,\n baseline: y.zero,\n },\n x,\n y: y.scale,\n categories,\n };\n}\n\nexport const values = (input: ChartInput): number[] => input.series.flatMap((s) => s.data);\n\n/** Tooltip text for a value in a series: `Series, Category: 1,234`. */\nexport const markTitle = (series: string, category: string, value: number): string =>\n `${series}, ${category}: ${formatValue(value)}`;\n\n/**\n * Tooltip shapes for the mark under the pointer, or none. Reads the mark's\n * `<title>` and converts the pointer position into viewBox units.\n */\nexport function hoverTooltip(\n target: EventTarget | null,\n svg: Element,\n clientX: number,\n clientY: number,\n width: number,\n height: number,\n): Shape[] {\n const mark = (target as Element | null)?.closest?.('[data-skdx-part]');\n const title =\n mark && Array.from(mark.children).find((c) => c.tagName.toLowerCase() === 'title')?.textContent;\n if (!title) return [];\n const r = svg.getBoundingClientRect();\n const x = r.width ? ((clientX - r.left) * width) / r.width : clientX;\n const y = r.height ? ((clientY - r.top) * height) / r.height : clientY;\n return tooltipShapes(x, y, title, width, height);\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { CHART_COLORS } from './palette.js';\nimport type { Frame, Shape } from './types.js';\n\n/** Grid, axis line and tick labels of an axis frame, as shapes. */\nexport function frameShapes(frame: Frame): Shape[] {\n const { plot, xTicks, yTicks, baseline } = frame;\n const right = plot.x + plot.width;\n return [\n ...yTicks.map((t): Shape => ({\n kind: 'line',\n part: 'grid',\n x1: plot.x,\n x2: right,\n y1: t.pos,\n y2: t.pos,\n stroke: CHART_COLORS.grid,\n })),\n {\n kind: 'line',\n part: 'axis',\n x1: plot.x,\n x2: right,\n y1: baseline,\n y2: baseline,\n stroke: CHART_COLORS.axis,\n },\n ...yTicks.map((t): Shape => ({\n kind: 'text',\n part: 'y-label',\n x: plot.x - 8,\n y: t.pos,\n text: t.label,\n anchor: 'end',\n baseline: 'middle',\n fill: CHART_COLORS.label,\n })),\n ...xTicks.map((t): Shape => ({\n kind: 'text',\n part: 'x-label',\n x: t.pos,\n y: plot.y + plot.height + 20,\n text: t.label,\n anchor: 'middle',\n fill: CHART_COLORS.label,\n })),\n ];\n}\n\nexport const label = (\n x: number,\n y: number,\n text: string,\n extra: Partial<Extract<Shape, { kind: 'text' }>> = {},\n): Shape => ({\n kind: 'text',\n part: 'label',\n x,\n y,\n text,\n fill: CHART_COLORS.label,\n ...extra,\n});\n\n/** A dot with its native tooltip. */\nexport const point = (cx: number, cy: number, r: number, fill: string, title?: string): Shape => ({\n kind: 'circle',\n part: 'point',\n cx,\n cy,\n r,\n fill,\n title,\n});\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { buildFrame, extent, markTitle, values } from './frame.js';\nimport { seriesColor } from './palette.js';\nimport { px } from './scale.js';\nimport { frameShapes } from './shapes.js';\nimport type { BarChartInput, Canvas, Shape } from './types.js';\n\nexport function layoutBarChart(input: BarChartInput): Canvas {\n const yExtent = input.stacked ? stackedExtent(input) : extent(values(input), true);\n const { frame, x, y, categories } = buildFrame(input, yExtent);\n const bars: Shape[] = [];\n\n // Running stack tops per category, positives up and negatives down.\n const up = new Array<number>(categories.length).fill(0);\n const down = new Array<number>(categories.length).fill(0);\n const groupWidth = input.stacked ? x.bandwidth : x.bandwidth / Math.max(1, input.series.length);\n\n input.series.forEach((s, si) => {\n const color = seriesColor(si, s.color);\n categories.forEach((category, ci) => {\n const value = s.data[ci];\n if (value === undefined) return;\n let from = 0;\n let to = value;\n if (input.stacked) {\n const stack = value >= 0 ? up : down;\n from = stack[ci] as number;\n to = from + value;\n stack[ci] = to;\n }\n const y0 = y(from);\n const y1 = y(to);\n bars.push({\n kind: 'rect',\n part: 'bar',\n x: px(x.start(ci) + (input.stacked ? 0 : si * groupWidth)),\n y: px(Math.min(y0, y1)),\n width: px(groupWidth),\n height: px(Math.abs(y1 - y0)),\n fill: color,\n title: markTitle(s.name, category, value),\n });\n });\n });\n\n return { ...frame, shapes: [...frameShapes(frame), ...bars, ...frame.shapes] };\n}\n\nfunction stackedExtent(input: BarChartInput): readonly [number, number] {\n let min = 0;\n let max = 0;\n const count = Math.max(0, ...input.series.map((s) => s.data.length));\n for (let ci = 0; ci < count; ci++) {\n let up = 0;\n let down = 0;\n for (const s of input.series) {\n const v = s.data[ci] ?? 0;\n if (v >= 0) up += v;\n else down += v;\n }\n min = Math.min(min, down);\n max = Math.max(max, up);\n }\n return [min, max];\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { buildFrame, extent, markTitle, values, type FrameScales } from './frame.js';\nimport { seriesColor } from './palette.js';\nimport { pathThrough, px } from './scale.js';\nimport { frameShapes, point } from './shapes.js';\nimport type { AreaChartInput, Canvas, LineChartInput, Shape } from './types.js';\n\n/** A stroke per series and a dot per value; `close` turns a stroke into a filled area. */\nfunction polylines(input: LineChartInput, { frame, x, y, categories }: FrameScales, area: boolean) {\n const points: Shape[] = [];\n const lines: Shape[] = [];\n const areas: Shape[] = [];\n input.series.forEach((s, si) => {\n const color = seriesColor(si, s.color);\n const coords = s.data.map((value, ci) => {\n const p = { x: px(x.center(ci)), y: px(y(value)) };\n points.push(point(p.x, p.y, 3, color, markTitle(s.name, categories[ci] as string, value)));\n return p;\n });\n const d = pathThrough(coords, input.curve);\n lines.push({\n kind: 'path',\n part: 'line',\n d,\n stroke: color,\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n });\n if (area) {\n const first = coords[0];\n const last = coords[coords.length - 1];\n areas.push({\n kind: 'path',\n part: 'area',\n d:\n d && first && last\n ? `${d}L${last.x} ${frame.baseline}L${first.x} ${frame.baseline}Z`\n : '',\n fill: color,\n fillOpacity: 0.25,\n });\n }\n });\n return {\n ...frame,\n shapes: [...frameShapes(frame), ...areas, ...lines, ...points, ...frame.shapes],\n };\n}\n\nexport function layoutLineChart(input: LineChartInput): Canvas {\n return polylines(input, buildFrame(input, extent(values(input), false)), false);\n}\n\nexport function layoutAreaChart(input: AreaChartInput): Canvas {\n return polylines(input, buildFrame(input, extent(values(input), true)), true);\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { axis, canvas, extent, legendTop, MARGIN, plotBox, size } from './frame.js';\nimport { seriesColor } from './palette.js';\nimport { formatValue, px } from './scale.js';\nimport { frameShapes, point } from './shapes.js';\nimport type { Canvas, ScatterChartInput } from './types.js';\n\nexport function layoutScatterChart(input: ScatterChartInput): Canvas {\n const { width, height } = size(input);\n const plot = plotBox(width, height, { ...MARGIN, top: MARGIN.top + legendTop(input) });\n const pairs = input.series.flatMap((s) => s.data);\n const x = axis(\n extent(\n pairs.map((p) => p[0]),\n false,\n ),\n [plot.x, plot.x + plot.width],\n );\n const y = axis(\n extent(\n pairs.map((p) => p[1]),\n false,\n ),\n [plot.y + plot.height, plot.y],\n );\n const legend = input.series.map((s, i) => ({ name: s.name, color: seriesColor(i, s.color) }));\n const c = canvas(input, width, height, legend);\n const points = input.series.flatMap((s, si) => {\n const color = seriesColor(si, s.color);\n return s.data.map(([vx, vy]) =>\n point(\n px(x.scale(vx)),\n px(y.scale(vy)),\n 3,\n color,\n `${s.name}: ${formatValue(vx)}, ${formatValue(vy)}`,\n ),\n );\n });\n const frame = { ...c, plot, xTicks: x.ticks, yTicks: y.ticks, baseline: y.zero };\n return { ...c, shapes: [...frameShapes(frame), ...points, ...c.shapes] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { canvas, legendTop, size } from './frame.js';\nimport { seriesColor } from './palette.js';\nimport { formatValue, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { Canvas, PieChartInput, Shape } from './types.js';\n\nconst TAU = 2 * Math.PI;\n\n/** Wedge (or ring segment when `r0 > 0`) from angle `a0` to `a1`, clockwise from 12 o'clock. */\nexport function arc(cx: number, cy: number, r: number, r0: number, a0: number, a1: number): string {\n const at = (radius: number, a: number) =>\n `${px(cx + radius * Math.sin(a))} ${px(cy - radius * Math.cos(a))}`;\n // A full circle has coincident endpoints, which an arc command cannot draw: split it in two.\n if (a1 - a0 >= TAU - 1e-9) {\n const half = a0 + TAU / 2;\n return `${arc(cx, cy, r, r0, a0, half)}${arc(cx, cy, r, r0, half, a1)}`;\n }\n const large = a1 - a0 > Math.PI ? 1 : 0;\n const outer = `M${at(r, a0)}A${r} ${r} 0 ${large} 1 ${at(r, a1)}`;\n return r0 > 0\n ? `${outer}L${at(r0, a1)}A${r0} ${r0} 0 ${large} 0 ${at(r0, a0)}Z`\n : `${outer}L${px(cx)} ${px(cy)}Z`;\n}\n\nexport function layoutPieChart(input: PieChartInput): Canvas {\n const { width, height } = size(input, 300, 300);\n const top = legendTop(input);\n const cx = width / 2;\n const cy = top + (height - top) / 2;\n const r = Math.max(0, Math.min(width, height - top) / 2 - 8);\n const r0 = r * Math.min(0.95, Math.max(0, input.innerRadius ?? 0));\n const total = input.data.reduce((sum, d) => sum + Math.max(0, d.value), 0);\n let angle = 0;\n const labels: Shape[] = [];\n const slices = input.data.map((d, i): Shape => {\n const percent = total > 0 ? Math.max(0, d.value) / total : 0;\n const a0 = angle;\n angle += percent * TAU;\n if (input.labels && percent > 0.03) {\n const mid = (a0 + angle) / 2;\n const lr = (r + r0) / 2;\n labels.push(\n label(\n px(cx + lr * Math.sin(mid)),\n px(cy - lr * Math.cos(mid)),\n `${d.name} ${Math.round(percent * 100)}%`,\n {\n part: 'slice-label',\n anchor: 'middle',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-on-accent)',\n },\n ),\n );\n }\n return {\n kind: 'path',\n part: 'slice',\n d: percent > 0 ? arc(cx, cy, r, r0, a0, angle) : '',\n fill: seriesColor(i, d.color),\n title: `${d.name}: ${formatValue(d.value)} (${Math.round(percent * 100)}%)`,\n };\n });\n const c = canvas(\n input,\n width,\n height,\n input.data.map((d, i) => ({ name: d.name, color: seriesColor(i, d.color) })),\n );\n return { ...c, shapes: [...slices, ...c.shapes, ...labels] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { extent, size } from './frame.js';\nimport { seriesColor } from './palette.js';\nimport { linearScale, pathThrough, px } from './scale.js';\nimport { point } from './shapes.js';\nimport type { Canvas, SparklineInput } from './types.js';\n\nconst PAD = 2;\n\nexport function layoutSparkline(input: SparklineInput): Canvas {\n const { width, height } = size(input, 120, 32);\n const n = input.data.length;\n const y = linearScale(extent(input.data, false), [height - PAD, PAD]);\n const x = (i: number) => (n < 2 ? width / 2 : PAD + (i / (n - 1)) * (width - 2 * PAD));\n const coords = input.data.map((v, i) => ({ x: px(x(i)), y: px(y(v)) }));\n const line = pathThrough(coords, input.curve);\n const last = coords[coords.length - 1];\n const first = coords[0];\n const color = seriesColor(0, input.color);\n return {\n width,\n height,\n tooltip: input.tooltip ?? true,\n shapes: [\n {\n kind: 'path',\n part: 'area',\n d:\n line && first && last\n ? `${line}L${last.x} ${height - PAD}L${first.x} ${height - PAD}Z`\n : '',\n fill: color,\n fillOpacity: 0.15,\n },\n { kind: 'path', part: 'line', d: line, stroke: color, strokeWidth: 1.5 },\n // The most recent point, drawn as a dot.\n ...(last ? [point(last.x, last.y, 2, color)] : []),\n ],\n };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { canvas, legendTop, markTitle, size } from './frame.js';\nimport { CHART_COLORS, seriesColor } from './palette.js';\nimport { formatValue, niceTicks, px } from './scale.js';\nimport { label, point } from './shapes.js';\nimport type { Canvas, RadarChartInput, Shape } from './types.js';\n\nexport function layoutRadarChart(input: RadarChartInput): Canvas {\n const { width, height } = size(input, 300, 300);\n const top = legendTop(input);\n const cx = width / 2;\n const cy = top + (height - top) / 2;\n const radius = Math.max(0, Math.min(width, height - top) / 2 - 36);\n const n = input.categories.length;\n const angle = (i: number) => -Math.PI / 2 + (i * 2 * Math.PI) / Math.max(1, n);\n // Normalized: every series is scaled to its own maximum and the rings read as percentages.\n const ticks = input.normalize\n ? [0, 25, 50, 75, 100]\n : niceTicks(0, Math.max(0, ...input.series.flatMap((s) => s.data)), 4);\n const max = ticks[ticks.length - 1] as number;\n const seriesMax = input.series.map((s) => Math.max(0, ...s.data));\n const norm = (si: number, v: number) =>\n input.normalize\n ? (seriesMax[si] as number) > 0\n ? (v / (seriesMax[si] as number)) * 100\n : 0\n : v;\n const at = (i: number, value: number) => {\n const r = max > 0 ? (value / max) * radius : 0;\n return { x: px(cx + r * Math.cos(angle(i))), y: px(cy + r * Math.sin(angle(i))) };\n };\n const polygon = (value: (i: number) => number) =>\n n === 0\n ? ''\n : `M${input.categories\n .map((_, i) => {\n const p = at(i, value(i));\n return `${p.x} ${p.y}`;\n })\n .join('L')}Z`;\n\n // Concentric grid polygons, one per tick, innermost first, then a spoke per category.\n const rings = ticks.filter((t) => t > 0);\n const grid: Shape[] = [\n ...rings.map((t): Shape => ({\n kind: 'path',\n part: 'grid',\n d: polygon(() => t),\n stroke: CHART_COLORS.grid,\n })),\n ...input.categories.map((_, i): Shape => {\n const p = at(i, max);\n return {\n kind: 'line',\n part: 'grid',\n x1: px(cx),\n y1: px(cy),\n x2: p.x,\n y2: p.y,\n stroke: CHART_COLORS.grid,\n };\n }),\n ...rings.map((t) =>\n label(px(cx + 4), at(0, t).y, input.normalize ? `${t}%` : formatValue(t), {\n part: 'y-label',\n baseline: 'middle',\n }),\n ),\n ...input.categories.map((text, i) => {\n const cos = Math.cos(angle(i));\n const r = radius + 14;\n return label(px(cx + r * cos), px(cy + r * Math.sin(angle(i))), text, {\n part: 'x-label',\n anchor: cos > 0.1 ? 'start' : cos < -0.1 ? 'end' : 'middle',\n baseline: 'middle',\n });\n }),\n ];\n\n const points: Shape[] = [];\n const polygons = input.series.map((s, si): Shape => {\n const color = seriesColor(si, s.color);\n input.categories.forEach((category, i) => {\n const value = s.data[i] ?? 0;\n const p = at(i, norm(si, value));\n points.push(point(p.x, p.y, 3, color, markTitle(s.name, category, value)));\n });\n return {\n kind: 'path',\n part: 'area',\n d: polygon((i) => norm(si, s.data[i] ?? 0)),\n fill: color,\n fillOpacity: 0.25,\n stroke: color,\n strokeWidth: 2,\n };\n });\n\n const c = canvas(\n input,\n width,\n height,\n input.series.map((s, i) => ({ name: s.name, color: seriesColor(i, s.color) })),\n );\n return { ...c, shapes: [...grid, ...polygons, ...points, ...c.shapes] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { canvas, plotBox, size } from './frame.js';\nimport { seriesColor } from './palette.js';\nimport { formatValue, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { Canvas, HeatmapInput, Shape } from './types.js';\n\nconst MARGIN = { top: 24, right: 8, bottom: 8, left: 64 } as const;\n\nexport function layoutHeatmap(input: HeatmapInput): Canvas {\n const { width, height } = size(input);\n const plot = plotBox(width, height, MARGIN);\n const cellW = plot.width / Math.max(1, input.columns.length);\n const cellH = plot.height / Math.max(1, input.rows.length);\n const all = input.data.flat();\n const min = Math.min(...all);\n const max = Math.max(...all);\n const color = seriesColor(0, input.color);\n const negative = input.negativeColor ?? 'var(--skdx-color-danger-500)';\n const span = Math.max(Math.abs(min), Math.abs(max));\n // Diverging: opacity is the distance from zero, color the sign.\n // Otherwise 0.15..1, the value's place between the smallest and largest cell.\n const opacity = (v: number) =>\n input.diverging\n ? span === 0\n ? 1\n : px(0.15 + (0.85 * Math.abs(v)) / span)\n : max === min\n ? 1\n : px(0.15 + (0.85 * (v - min)) / (max - min));\n const cells: Shape[] = [];\n input.rows.forEach((row, ri) => {\n input.columns.forEach((column, ci) => {\n const value = input.data[ri]?.[ci];\n if (value === undefined) return;\n cells.push({\n kind: 'rect',\n part: 'cell',\n x: px(plot.x + ci * cellW),\n y: px(plot.y + ri * cellH),\n width: px(cellW),\n height: px(cellH),\n fill: input.diverging && value < 0 ? negative : color,\n opacity: opacity(value),\n title: `${row}, ${column}: ${formatValue(value)}`,\n });\n });\n });\n const c = canvas(input, width, height);\n return {\n ...c,\n shapes: [\n ...input.rows.map((text, i) =>\n label(plot.x - 8, px(plot.y + (i + 0.5) * cellH), text, {\n part: 'y-label',\n anchor: 'end',\n baseline: 'middle',\n }),\n ),\n ...input.columns.map((text, i) =>\n label(px(plot.x + (i + 0.5) * cellW), plot.y - 8, text, {\n part: 'x-label',\n anchor: 'middle',\n }),\n ),\n ...cells,\n ...c.shapes,\n ],\n };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { canvas, legendTop, size } from './frame.js';\nimport { seriesColor } from './palette.js';\nimport { formatValue, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { Canvas, FunnelChartInput, Shape } from './types.js';\n\nconst PAD = 8;\nconst GAP = 4;\n\nexport function layoutFunnelChart(input: FunnelChartInput): Canvas {\n const { width, height } = size(input, 400, 300);\n const n = input.data.length;\n const max = Math.max(0, ...input.data.map((d) => d.value));\n const first = input.data[0]?.value ?? 0;\n const full = Math.max(0, width - 2 * PAD);\n const offset = legendTop(input);\n const stageH = n === 0 ? 0 : (height - offset - 2 * PAD) / n;\n const widthOf = (value: number) => (max > 0 ? (Math.max(0, value) / max) * full : 0);\n const legend = input.data.map((d, i) => ({ name: d.name, color: seriesColor(i, d.color) }));\n const stages = input.data.flatMap((d, i): Shape[] => {\n const top = widthOf(d.value);\n const bottom = widthOf(input.data[i + 1]?.value ?? d.value);\n const y0 = offset + PAD + i * stageH;\n const y1 = y0 + stageH - GAP;\n const cx = width / 2;\n const percent = first > 0 ? d.value / first : 0;\n return [\n {\n kind: 'path',\n part: 'stage',\n d: `M${px(cx - top / 2)} ${px(y0)}L${px(cx + top / 2)} ${px(y0)}L${px(cx + bottom / 2)} ${px(y1)}L${px(cx - bottom / 2)} ${px(y1)}Z`,\n fill: seriesColor(i, d.color),\n title: `${d.name}: ${formatValue(d.value)} (${Math.round(percent * 100)}%)`,\n },\n label(px(cx), px((y0 + y1) / 2), `${d.name} · ${formatValue(d.value)}`, {\n part: 'stage-label',\n anchor: 'middle',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-on-accent)',\n }),\n ];\n });\n const c = canvas(input, width, height, legend);\n return { ...c, shapes: [...stages, ...c.shapes] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { canvas, legendTop, plotBox, size } from './frame.js';\nimport { seriesColor } from './palette.js';\nimport { formatValue, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { SankeyInput, Shape, Canvas } from './types.js';\n\nconst NODE_WIDTH = 16;\nconst NODE_PAD = 8;\n\ninterface Node {\n name: string;\n depth: number;\n value: number;\n color: string;\n x: number;\n y: number;\n height: number;\n /** Running offsets for the ribbons leaving and entering. */\n outY: number;\n inY: number;\n}\n\nexport function layoutSankey(input: SankeyInput): Canvas {\n const { width, height } = size(input);\n const plot = plotBox(width, height, { top: 8 + legendTop(input), right: 96, bottom: 8, left: 8 });\n const nodes = new Map<string, Node>();\n const node = (name: string) => {\n let n = nodes.get(name);\n if (!n) {\n n = {\n name,\n depth: 0,\n value: 0,\n color: seriesColor(nodes.size),\n x: 0,\n y: 0,\n height: 0,\n outY: 0,\n inY: 0,\n };\n nodes.set(name, n);\n }\n return n;\n };\n const links = dropBackEdges(input.links.filter((l) => l.value > 0 && l.source !== l.target));\n for (const l of links) {\n node(l.source);\n node(l.target);\n }\n // Depth = longest path from a source; the graph is acyclic after dropBackEdges.\n for (let pass = 0, changed = true; changed && pass <= nodes.size; pass++) {\n changed = false;\n for (const l of links) {\n const d = node(l.source).depth + 1;\n if (d > node(l.target).depth) {\n node(l.target).depth = d;\n changed = true;\n }\n }\n }\n const outSum = new Map<string, number>();\n const inSum = new Map<string, number>();\n for (const l of links) {\n outSum.set(l.source, (outSum.get(l.source) ?? 0) + l.value);\n inSum.set(l.target, (inSum.get(l.target) ?? 0) + l.value);\n }\n for (const n of nodes.values())\n n.value = Math.max(outSum.get(n.name) ?? 0, inSum.get(n.name) ?? 0);\n\n const columns = new Map<number, Node[]>();\n for (const n of nodes.values()) columns.set(n.depth, [...(columns.get(n.depth) ?? []), n]);\n const depths = Math.max(0, ...columns.keys());\n const scale = Math.min(\n ...[...columns.values()].map(\n (col) => (plot.height - NODE_PAD * (col.length - 1)) / col.reduce((s, n) => s + n.value, 0),\n ),\n );\n for (const [depth, col] of columns) {\n let y = plot.y;\n for (const n of col) {\n n.x = plot.x + (depths === 0 ? 0 : (depth * (plot.width - NODE_WIDTH)) / depths);\n n.y = y;\n n.height = n.value * scale;\n n.outY = n.inY = y;\n y += n.height + NODE_PAD;\n }\n }\n\n const shapes: Shape[] = [];\n for (const l of links) {\n const s = node(l.source);\n const t = node(l.target);\n const h = l.value * scale;\n const x0 = s.x + NODE_WIDTH;\n const x1 = t.x;\n const mx = (x0 + x1) / 2;\n const sy = s.outY;\n const ty = t.inY;\n s.outY += h;\n t.inY += h;\n shapes.push({\n kind: 'path',\n part: 'link',\n d: `M${px(x0)} ${px(sy)}C${px(mx)} ${px(sy)} ${px(mx)} ${px(ty)} ${px(x1)} ${px(ty)}L${px(x1)} ${px(ty + h)}C${px(mx)} ${px(ty + h)} ${px(mx)} ${px(sy + h)} ${px(x0)} ${px(sy + h)}Z`,\n fill: s.color,\n opacity: 0.4,\n title: `${l.source} → ${l.target}: ${formatValue(l.value)}`,\n });\n }\n for (const n of nodes.values()) {\n shapes.push({\n kind: 'rect',\n part: 'node',\n x: px(n.x),\n y: px(n.y),\n width: NODE_WIDTH,\n height: px(n.height),\n fill: n.color,\n title: `${n.name}: ${formatValue(n.value)}`,\n });\n const last = n.depth === depths;\n shapes.push(\n label(px(last ? n.x - 6 : n.x + NODE_WIDTH + 6), px(n.y + n.height / 2), n.name, {\n anchor: last ? 'end' : 'start',\n baseline: 'middle',\n }),\n );\n }\n return { ...canvas(input, width, height), shapes };\n}\n\n/** Removes the links that close a cycle (depth-first back edges), so every remaining path terminates. */\nfunction dropBackEdges(links: SankeyInput['links']): SankeyInput['links'] {\n const out = new Map<string, SankeyInput['links']>();\n for (const l of links) out.set(l.source, [...(out.get(l.source) ?? []), l]);\n const state = new Map<string, 'active' | 'done'>();\n const back = new Set<SankeyInput['links'][number]>();\n const visit = (name: string) => {\n state.set(name, 'active');\n for (const l of out.get(name) ?? []) {\n const s = state.get(l.target);\n if (s === 'active') back.add(l);\n else if (s === undefined) visit(l.target);\n }\n state.set(name, 'done');\n };\n for (const l of links) if (!state.has(l.source)) visit(l.source);\n return links.filter((l) => !back.has(l));\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { canvas, legendTop, size } from './frame.js';\nimport { seriesColor } from './palette.js';\nimport { formatValue, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { Shape, Canvas, TreeNode, TreemapInput } from './types.js';\n\ninterface Tile {\n node: TreeNode;\n value: number;\n color: string;\n area: number;\n}\n\nconst nodeValue = (n: TreeNode): number =>\n n.value ?? (n.children ?? []).reduce((s, c) => s + nodeValue(c), 0);\n\n/** Squarified treemap (Bruls, Huizing, van Wijk): rows of tiles kept as close to square as possible. */\nfunction squarify(\n items: Tile[],\n x: number,\n y: number,\n w: number,\n h: number,\n out: (t: Tile, box: [number, number, number, number]) => void,\n) {\n if (items.length === 0) return;\n const worst = (row: Tile[], side: number) => {\n const sum = row.reduce((s, t) => s + t.area, 0);\n const max = Math.max(...row.map((t) => t.area));\n const min = Math.min(...row.map((t) => t.area));\n return Math.max((side * side * max) / (sum * sum), (sum * sum) / (side * side * min));\n };\n const side = Math.min(w, h);\n let row: Tile[] = [];\n let i = 0;\n while (i < items.length) {\n const next = [...row, items[i] as Tile];\n if (row.length === 0 || worst(next, side) <= worst(row, side)) {\n row = next;\n i++;\n } else break;\n }\n const sum = row.reduce((s, t) => s + t.area, 0);\n if (w >= h) {\n const rowW = sum / h;\n let ry = y;\n for (const t of row) {\n const th = t.area / rowW;\n out(t, [x, ry, rowW, th]);\n ry += th;\n }\n squarify(items.slice(i), x + rowW, y, w - rowW, h, out);\n } else {\n const rowH = sum / w;\n let rx = x;\n for (const t of row) {\n const tw = t.area / rowH;\n out(t, [rx, y, tw, rowH]);\n rx += tw;\n }\n squarify(items.slice(i), x, y + rowH, w, h - rowH, out);\n }\n}\n\nexport function layoutTreemap(input: TreemapInput): Canvas {\n const { width, height } = size(input);\n const top = legendTop(input);\n const shapes: Shape[] = [];\n const legend = input.data.map((n, i) => ({ name: n.name, color: seriesColor(i, n.color) }));\n // Branches are outlined and their children tiled inside a 2px inset; leaves are filled.\n const tile = (\n nodes: TreeNode[],\n x: number,\n y: number,\n w: number,\n h: number,\n inherited: string | undefined,\n ) => {\n const total = nodes.reduce((s, n) => s + Math.max(0, nodeValue(n)), 0);\n const tiles = nodes\n .map((node, i) => ({\n node,\n value: nodeValue(node),\n color: node.color ?? inherited ?? seriesColor(i),\n area: total > 0 ? (Math.max(0, nodeValue(node)) / total) * w * h : 0,\n }))\n .filter((t) => t.area > 0)\n .sort((a, b) => b.area - a.area);\n squarify(tiles, x, y, w, h, (t, [tx, ty, tw, th]) => {\n const title = `${t.node.name}: ${formatValue(t.value)}`;\n const branch = (t.node.children?.length ?? 0) > 0;\n shapes.push({\n kind: 'rect',\n part: branch ? 'branch' : 'tile',\n x: px(tx),\n y: px(ty),\n width: px(tw),\n height: px(th),\n fill: t.color,\n opacity: branch ? 0.15 : undefined,\n stroke: 'var(--skdx-color-surface-default)',\n title,\n });\n if (branch)\n tile(\n t.node.children as TreeNode[],\n tx + 2,\n ty + 2,\n Math.max(0, tw - 4),\n Math.max(0, th - 4),\n t.color,\n );\n else if (tw > 40 && th > 20)\n shapes.push(\n label(px(tx + 6), px(ty + 6), t.node.name, {\n baseline: 'hanging',\n fill: 'var(--skdx-color-text-on-accent)',\n }),\n );\n });\n };\n tile(input.data, 0, top, width, height - top, undefined);\n const c = canvas(input, width, height, legend);\n return { ...c, shapes: [...shapes, ...c.shapes] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { axis, canvas, extent, legendTop, MARGIN, plotBox, size } from './frame.js';\nimport { bandScale, formatValue, px } from './scale.js';\nimport { frameShapes } from './shapes.js';\nimport type { CandlestickInput, Shape, Canvas } from './types.js';\n\nconst UP = 'var(--skdx-color-success-500)';\nconst DOWN = 'var(--skdx-color-danger-500)';\n\nexport function layoutCandlestick(input: CandlestickInput): Canvas {\n const { width, height } = size(input);\n const plot = plotBox(width, height, { ...MARGIN, top: MARGIN.top + legendTop(input) });\n const y = axis(\n extent(\n input.data.flatMap((c) => [c.low, c.high]),\n false,\n ),\n [plot.y + plot.height, plot.y],\n input.scale === 'log',\n );\n const x = bandScale(input.data.length, [plot.x, plot.x + plot.width]);\n const legend = [\n { name: 'Up', color: UP },\n { name: 'Down', color: DOWN },\n ];\n const c = canvas(input, width, height, legend);\n const frame = {\n ...c,\n plot,\n xTicks: input.data.map((c, i) => ({ pos: px(x.center(i)), label: c.label })),\n yTicks: y.ticks,\n baseline: plot.y + plot.height,\n };\n const shapes: Shape[] = frameShapes(frame);\n input.data.forEach((c, i) => {\n const color = c.close >= c.open ? UP : DOWN;\n const title = `${c.label}: O ${formatValue(c.open)} H ${formatValue(c.high)} L ${formatValue(c.low)} C ${formatValue(c.close)}`;\n const top = y.scale(Math.max(c.open, c.close));\n const bottom = y.scale(Math.min(c.open, c.close));\n shapes.push(\n {\n kind: 'line',\n part: 'wick',\n x1: px(x.center(i)),\n x2: px(x.center(i)),\n y1: px(y.scale(c.high)),\n y2: px(y.scale(c.low)),\n stroke: color,\n title,\n },\n {\n kind: 'rect',\n part: 'candle',\n x: px(x.start(i)),\n y: px(top),\n width: px(x.bandwidth),\n height: px(Math.max(1, bottom - top)),\n fill: color,\n title,\n },\n );\n });\n return { ...c, shapes: [...shapes, ...c.shapes] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { axis, canvas, legendTop, MARGIN, plotBox, size } from './frame.js';\nimport { bandScale, formatValue, px } from './scale.js';\nimport { frameShapes } from './shapes.js';\nimport { CHART_COLORS, seriesColor } from './palette.js';\nimport type { Shape, Canvas, WaterfallInput } from './types.js';\n\nconst UP = 'var(--skdx-color-success-500)';\nconst DOWN = 'var(--skdx-color-danger-500)';\n\nexport function layoutWaterfall(input: WaterfallInput): Canvas {\n const { width, height } = size(input);\n const plot = plotBox(width, height, { ...MARGIN, top: MARGIN.top + legendTop(input) });\n const steps: { name: string; from: number; to: number; color: string; title: string }[] = [];\n let running = 0;\n for (const d of input.data) {\n const from = running;\n running += d.value;\n steps.push({\n name: d.name,\n from,\n to: running,\n color: d.color ?? (d.value >= 0 ? UP : DOWN),\n title: `${d.name}: ${d.value >= 0 ? '+' : ''}${formatValue(d.value)}`,\n });\n }\n if (input.total !== undefined)\n steps.push({\n name: input.total,\n from: 0,\n to: running,\n color: seriesColor(0),\n title: `${input.total}: ${formatValue(running)}`,\n });\n const totals = steps.flatMap((s) => [s.from, s.to]);\n const y = axis([Math.min(0, ...totals), Math.max(0, ...totals)], [plot.y + plot.height, plot.y]);\n const x = bandScale(steps.length, [plot.x, plot.x + plot.width]);\n const c = canvas(input, width, height, [\n { name: 'Increase', color: UP },\n { name: 'Decrease', color: DOWN },\n ]);\n const shapes: Shape[] = frameShapes({\n ...c,\n plot,\n xTicks: steps.map((s, i) => ({ pos: px(x.center(i)), label: s.name })),\n yTicks: y.ticks,\n baseline: y.zero,\n });\n steps.forEach((s, i) => {\n const y0 = y.scale(s.from);\n const y1 = y.scale(s.to);\n shapes.push({\n kind: 'rect',\n part: 'bar',\n x: px(x.start(i)),\n y: px(Math.min(y0, y1)),\n width: px(x.bandwidth),\n height: px(Math.max(1, Math.abs(y1 - y0))),\n fill: s.color,\n title: s.title,\n });\n const next = steps[i + 1];\n if (next)\n shapes.push({\n kind: 'line',\n part: 'connector',\n x1: px(x.start(i) + x.bandwidth),\n x2: px(x.start(i + 1)),\n y1: px(y1),\n y2: px(y.scale(next.from)),\n stroke: CHART_COLORS.axis,\n dash: '4 3',\n });\n });\n return { ...c, shapes: [...shapes, ...c.shapes] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { axis, canvas, legendTop, plotBox, size } from './frame.js';\nimport { CHART_COLORS, seriesColor } from './palette.js';\nimport { bandScale, formatValue, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { GanttInput, Shape, Canvas } from './types.js';\n\nexport function layoutGantt(input: GanttInput): Canvas {\n const { width, height } = size(input);\n const plot = plotBox(width, height, {\n top: 8 + legendTop(input),\n right: 16,\n bottom: 32,\n left: 112,\n });\n const format = input.format ?? formatValue;\n const times = input.tasks.flatMap((t) => [t.start, t.end]);\n const x = axis(times.length ? [Math.min(...times), Math.max(...times)] : [0, 0], [\n plot.x,\n plot.x + plot.width,\n ]);\n const rows = bandScale(input.tasks.length, [plot.y, plot.y + plot.height]);\n const shapes: Shape[] = [];\n const ticks = x.ticks.map((t) => ({ ...t, label: format(Number(t.label.replace(/,/g, ''))) }));\n for (const t of ticks) {\n shapes.push({\n kind: 'line',\n part: 'grid',\n x1: t.pos,\n x2: t.pos,\n y1: plot.y,\n y2: plot.y + plot.height,\n stroke: CHART_COLORS.grid,\n });\n shapes.push(\n label(t.pos, plot.y + plot.height + 20, t.label, { part: 'x-label', anchor: 'middle' }),\n );\n }\n input.tasks.forEach((t, i) => {\n const x0 = x.scale(Math.min(t.start, t.end));\n const x1 = x.scale(Math.max(t.start, t.end));\n shapes.push(\n label(plot.x - 8, px(rows.center(i)), t.name, {\n part: 'y-label',\n anchor: 'end',\n baseline: 'middle',\n }),\n );\n shapes.push({\n kind: 'rect',\n part: 'bar',\n x: px(x0),\n y: px(rows.start(i)),\n width: px(Math.max(1, x1 - x0)),\n height: px(rows.bandwidth),\n fill: seriesColor(i, t.color),\n title: `${t.name}: ${format(t.start)} – ${format(t.end)}`,\n });\n });\n const c = canvas(\n input,\n width,\n height,\n input.tasks.map((t, i) => ({ name: t.name, color: seriesColor(i, t.color) })),\n );\n return { ...c, shapes: [...shapes, ...c.shapes] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { axis, canvas, extent, legendTop, MARGIN, plotBox, size } from './frame.js';\nimport { seriesColor } from './palette.js';\nimport { bandScale, formatValue, px } from './scale.js';\nimport { frameShapes } from './shapes.js';\nimport type { BoxplotInput, Shape, Canvas } from './types.js';\n\n/** Linear-interpolated quantile of a sorted sample. */\nconst quantile = (sorted: number[], q: number): number => {\n if (sorted.length === 0) return 0;\n const pos = (sorted.length - 1) * q;\n const lo = Math.floor(pos);\n const hi = Math.ceil(pos);\n const a = sorted[lo] as number;\n const b = sorted[hi] as number;\n return a + (b - a) * (pos - lo);\n};\n\n/** Five-number summary with Tukey fences: whiskers reach the last sample within 1.5 IQR. */\nexport function boxStats(data: number[]) {\n const sorted = [...data].sort((a, b) => a - b);\n const q1 = quantile(sorted, 0.25);\n const median = quantile(sorted, 0.5);\n const q3 = quantile(sorted, 0.75);\n const iqr = q3 - q1;\n const inside = sorted.filter((v) => v >= q1 - 1.5 * iqr && v <= q3 + 1.5 * iqr);\n return {\n q1,\n median,\n q3,\n low: inside[0] ?? q1,\n high: inside[inside.length - 1] ?? q3,\n outliers: sorted.filter((v) => v < q1 - 1.5 * iqr || v > q3 + 1.5 * iqr),\n };\n}\n\nexport function layoutBoxplot(input: BoxplotInput): Canvas {\n const { width, height } = size(input);\n const plot = plotBox(width, height, { ...MARGIN, top: MARGIN.top + legendTop(input) });\n const y = axis(\n extent(\n input.series.flatMap((s) => s.data),\n false,\n ),\n [plot.y + plot.height, plot.y],\n );\n const x = bandScale(input.series.length, [plot.x, plot.x + plot.width]);\n const c = canvas(\n input,\n width,\n height,\n input.series.map((s, i) => ({ name: s.name, color: seriesColor(i, s.color) })),\n );\n const shapes: Shape[] = frameShapes({\n ...c,\n plot,\n xTicks: input.series.map((s, i) => ({ pos: px(x.center(i)), label: s.name })),\n yTicks: y.ticks,\n baseline: plot.y + plot.height,\n });\n input.series.forEach((s, i) => {\n const st = boxStats(s.data);\n const color = seriesColor(i, s.color);\n const cx = px(x.center(i));\n const title = `${s.name}: min ${formatValue(st.low)} Q1 ${formatValue(st.q1)} median ${formatValue(st.median)} Q3 ${formatValue(st.q3)} max ${formatValue(st.high)}`;\n const boxW = x.bandwidth * 0.6;\n const bx = px(x.center(i) - boxW / 2);\n shapes.push(\n {\n kind: 'line',\n part: 'whisker',\n x1: cx,\n x2: cx,\n y1: px(y.scale(st.high)),\n y2: px(y.scale(st.low)),\n stroke: color,\n title,\n },\n {\n kind: 'rect',\n part: 'box',\n x: bx,\n y: px(y.scale(st.q3)),\n width: px(boxW),\n height: px(Math.max(1, y.scale(st.q1) - y.scale(st.q3))),\n fill: color,\n stroke: color,\n opacity: 0.5,\n title,\n },\n {\n kind: 'line',\n part: 'median',\n x1: bx,\n x2: px(bx + boxW),\n y1: px(y.scale(st.median)),\n y2: px(y.scale(st.median)),\n stroke: color,\n title,\n },\n ...st.outliers.map((v): Shape => ({\n kind: 'circle',\n part: 'outlier',\n cx,\n cy: px(y.scale(v)),\n r: 3,\n fill: color,\n title: `${s.name}: ${formatValue(v)}`,\n })),\n );\n });\n return { ...c, shapes: [...shapes, ...c.shapes] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { canvas, legendTop, size } from './frame.js';\nimport { seriesColor } from './palette.js';\nimport { arc } from './pie.js';\nimport { formatValue } from './scale.js';\nimport type { Shape, Canvas, SunburstInput, TreeNode } from './types.js';\n\nconst TAU = 2 * Math.PI;\n\nconst nodeValue = (n: TreeNode): number =>\n n.value ?? (n.children ?? []).reduce((s, c) => s + nodeValue(c), 0);\nconst depthOf = (nodes: TreeNode[]): number =>\n nodes.length === 0 ? 0 : 1 + Math.max(...nodes.map((n) => depthOf(n.children ?? [])));\n\nexport function layoutSunburst(input: SunburstInput): Canvas {\n const { width, height } = size(input, 300, 300);\n const top = legendTop(input);\n const cx = width / 2;\n const cy = top + (height - top) / 2;\n const ringWidth =\n Math.max(0, Math.min(width, height - top) / 2 - 8) / Math.max(1, depthOf(input.data));\n const shapes: Shape[] = [];\n const walk = (\n nodes: TreeNode[],\n depth: number,\n a0: number,\n span: number,\n color: string | undefined,\n ) => {\n const total = nodes.reduce((s, n) => s + Math.max(0, nodeValue(n)), 0);\n let angle = a0;\n nodes.forEach((n, i) => {\n const value = Math.max(0, nodeValue(n));\n const sweep = total > 0 ? (value / total) * span : 0;\n const fill = n.color ?? color ?? seriesColor(i);\n if (sweep > 0) {\n shapes.push({\n kind: 'path',\n part: 'arc',\n d: arc(cx, cy, ringWidth * (depth + 1), ringWidth * depth, angle, angle + sweep),\n fill,\n opacity: 1 - depth * 0.2,\n stroke: 'var(--skdx-color-surface-default)',\n title: `${n.name}: ${formatValue(value)}`,\n });\n walk(n.children ?? [], depth + 1, angle, sweep, fill);\n }\n angle += sweep;\n });\n };\n walk(input.data, 0, 0, TAU, undefined);\n const c = canvas(\n input,\n width,\n height,\n input.data.map((n, i) => ({ name: n.name, color: n.color ?? seriesColor(i) })),\n );\n return { ...c, shapes: [...shapes, ...c.shapes] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { canvas, legendTop, size } from './frame.js';\nimport { seriesColor } from './palette.js';\nimport { arc } from './pie.js';\nimport { formatValue, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { ChordInput, Shape, Canvas } from './types.js';\n\nconst TAU = 2 * Math.PI;\nconst PAD = 0.04;\nconst RING = 12;\n\nexport function layoutChord(input: ChordInput): Canvas {\n const { width, height } = size(input, 300, 300);\n const top = legendTop(input);\n const cx = width / 2;\n const cy = top + (height - top) / 2;\n const r = Math.max(0, Math.min(width, height - top) / 2 - 36);\n const r0 = Math.max(0, r - RING);\n const n = input.names.length;\n const cell = (i: number, j: number) => Math.max(0, input.matrix[i]?.[j] ?? 0);\n const rowSum = input.names.map((_, i) => input.names.reduce((s, _n, j) => s + cell(i, j), 0));\n const total = rowSum.reduce((s, v) => s + v, 0);\n const unit = total > 0 ? (TAU - PAD * n) / total : 0;\n const at = (a: number, radius: number) =>\n `${px(cx + radius * Math.sin(a))} ${px(cy - radius * Math.cos(a))}`;\n\n // Each group spans its row sum; inside it, subgroup j spans matrix[i][j].\n const groups: { a0: number; a1: number; sub: { a0: number; a1: number }[] }[] = [];\n let angle = 0;\n for (let i = 0; i < n; i++) {\n const a0 = angle;\n const sub = input.names.map((_, j) => {\n const s0 = angle;\n angle += cell(i, j) * unit;\n return { a0: s0, a1: angle };\n });\n groups.push({ a0, a1: angle, sub });\n angle += PAD;\n }\n\n const shapes: Shape[] = [];\n for (let i = 0; i < n; i++) {\n for (let j = i; j < n; j++) {\n const out = cell(i, j);\n const back = cell(j, i);\n if (out + back === 0) continue;\n const a = (groups[i] as (typeof groups)[number]).sub[j] as { a0: number; a1: number };\n const b = (groups[j] as (typeof groups)[number]).sub[i] as { a0: number; a1: number };\n const large = (s: { a0: number; a1: number }) => (s.a1 - s.a0 > Math.PI ? 1 : 0);\n const d =\n i === j\n ? `M${at(a.a0, r0)}A${r0} ${r0} 0 ${large(a)} 1 ${at(a.a1, r0)}Q${px(cx)} ${px(cy)} ${at(a.a0, r0)}Z`\n : `M${at(a.a0, r0)}A${r0} ${r0} 0 ${large(a)} 1 ${at(a.a1, r0)}Q${px(cx)} ${px(cy)} ${at(b.a0, r0)}A${r0} ${r0} 0 ${large(b)} 1 ${at(b.a1, r0)}Q${px(cx)} ${px(cy)} ${at(a.a0, r0)}Z`;\n const from = out >= back ? i : j;\n shapes.push({\n kind: 'path',\n part: 'chord',\n d,\n fill: seriesColor(from),\n opacity: 0.5,\n title:\n i === j\n ? `${input.names[i]}: ${formatValue(out)}`\n : `${input.names[i]} ↔ ${input.names[j]}: ${formatValue(out)} / ${formatValue(back)}`,\n });\n }\n }\n groups.forEach((g, i) => {\n if (g.a1 <= g.a0) return;\n shapes.push({\n kind: 'path',\n part: 'group',\n d: arc(cx, cy, r, r0, g.a0, g.a1),\n fill: seriesColor(i),\n title: `${input.names[i]}: ${formatValue(rowSum[i] as number)}`,\n });\n const mid = (g.a0 + g.a1) / 2;\n const sin = Math.sin(mid);\n shapes.push(\n label(px(cx + (r + 8) * sin), px(cy - (r + 8) * Math.cos(mid)), input.names[i] as string, {\n anchor: sin > 0.1 ? 'start' : sin < -0.1 ? 'end' : 'middle',\n baseline: 'middle',\n }),\n );\n });\n const c = canvas(\n input,\n width,\n height,\n input.names.map((name, i) => ({ name, color: seriesColor(i) })),\n );\n return { ...c, shapes: [...shapes, ...c.shapes] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { canvas, legendTop, size } from './frame.js';\nimport { seriesColor } from './palette.js';\nimport { formatValue, px } from './scale.js';\nimport type { MapInput, Shape, Canvas } from './types.js';\n\nconst PAD = 8;\n\nconst rings = (f: MapInput['features'][number]): [number, number][][] =>\n f.geometry.type === 'Polygon' ? f.geometry.coordinates : f.geometry.coordinates.flat();\n\n/** Mercator latitude, clamped to ±85° so the poles stay finite. */\nconst mercatorY = (lat: number) =>\n Math.log(Math.tan(Math.PI / 4 + (Math.max(-85, Math.min(85, lat)) * Math.PI) / 360));\n\n/** Projection fitted to the features' bounds (equirectangular by default, or Mercator); opacity follows the value. */\nexport function layoutMap(input: MapInput): Canvas {\n const { width, height } = size(input);\n const top = legendTop(input);\n const toY = input.projection === 'mercator' ? mercatorY : (lat: number) => lat;\n const points = input.features.flatMap((f) => rings(f).flat());\n const lons = points.map((p) => p[0]);\n const lats = points.map((p) => toY(p[1]));\n const [minLon, maxLon, minLat, maxLat] = points.length\n ? [Math.min(...lons), Math.max(...lons), Math.min(...lats), Math.max(...lats)]\n : [0, 1, 0, 1];\n const scale = Math.min(\n (width - 2 * PAD) / Math.max(1e-9, maxLon - minLon),\n (height - top - 2 * PAD) / Math.max(1e-9, maxLat - minLat),\n );\n const ox = (width - (maxLon - minLon) * scale) / 2;\n const oy = top + (height - top - (maxLat - minLat) * scale) / 2;\n const project = ([lon, lat]: [number, number]) =>\n `${px(ox + (lon - minLon) * scale)} ${px(oy + (maxLat - toY(lat)) * scale)}`;\n\n const values = input.features.map((f) => f.value);\n const min = Math.min(...values);\n const max = Math.max(...values);\n const color = seriesColor(0, input.color);\n const shapes: Shape[] = input.features.map((f) => ({\n kind: 'path',\n part: 'region',\n d: rings(f)\n .map((ring) => `M${ring.map(project).join('L')}Z`)\n .join(''),\n fill: color,\n opacity: max === min ? 1 : px(0.15 + (0.85 * (f.value - min)) / (max - min)),\n stroke: 'var(--skdx-color-surface-default)',\n title: `${f.name}: ${formatValue(f.value)}`,\n }));\n return { ...canvas(input, width, height), shapes };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nexport type * from './types.js';\nexport { layoutBarChart } from './bar.js';\nexport { layoutAreaChart, layoutLineChart } from './line.js';\nexport { layoutScatterChart } from './scatter.js';\nexport { layoutPieChart } from './pie.js';\nexport { layoutSparkline } from './sparkline.js';\nexport { layoutRadarChart } from './radar.js';\nexport { layoutHeatmap } from './heatmap.js';\nexport { layoutFunnelChart } from './funnel.js';\nexport { hoverTooltip } from './frame.js';\nexport { CHART_COLORS } from './palette.js';\nexport { layoutSankey } from './sankey.js';\nexport { layoutTreemap } from './treemap.js';\nexport { layoutCandlestick } from './candlestick.js';\nexport { layoutWaterfall } from './waterfall.js';\nexport { layoutGantt } from './gantt.js';\nexport { layoutBoxplot } from './boxplot.js';\nexport { layoutSunburst } from './sunburst.js';\nexport { layoutChord } from './chord.js';\nexport { layoutMap } from './map.js';\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\nimport type { Shape } from './core/index.js';\n\n/** Draws a core shape list back to front. */\n@Component({\n selector: 'g[skdxChartShapes]',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @for (s of shapes(); track $index) {\n @switch (s.kind) {\n @case ('path') {\n <svg:path\n [attr.data-skdx-part]=\"s.part\"\n [attr.d]=\"s.d\"\n [attr.fill]=\"s.fill ?? 'none'\"\n [attr.stroke]=\"s.stroke\"\n [attr.stroke-width]=\"s.strokeWidth\"\n [attr.stroke-linecap]=\"s.strokeLinecap\"\n [attr.stroke-linejoin]=\"s.strokeLinejoin\"\n [attr.opacity]=\"s.opacity\"\n [attr.fill-opacity]=\"s.fillOpacity\"\n >\n @if (s.title) {\n <svg:title>{{ s.title }}</svg:title>\n }\n </svg:path>\n }\n @case ('rect') {\n <svg:rect\n [attr.data-skdx-part]=\"s.part\"\n [attr.x]=\"s.x\"\n [attr.y]=\"s.y\"\n [attr.width]=\"s.width\"\n [attr.height]=\"s.height\"\n [attr.fill]=\"s.fill\"\n [attr.stroke]=\"s.stroke\"\n [attr.fill-opacity]=\"s.opacity\"\n >\n @if (s.title) {\n <svg:title>{{ s.title }}</svg:title>\n }\n </svg:rect>\n }\n @case ('line') {\n <svg:line\n [attr.data-skdx-part]=\"s.part\"\n [attr.x1]=\"s.x1\"\n [attr.y1]=\"s.y1\"\n [attr.x2]=\"s.x2\"\n [attr.y2]=\"s.y2\"\n [attr.stroke]=\"s.stroke\"\n [attr.stroke-dasharray]=\"s.dash\"\n >\n @if (s.title) {\n <svg:title>{{ s.title }}</svg:title>\n }\n </svg:line>\n }\n @case ('circle') {\n <svg:circle\n [attr.data-skdx-part]=\"s.part\"\n [attr.cx]=\"s.cx\"\n [attr.cy]=\"s.cy\"\n [attr.r]=\"s.r\"\n [attr.fill]=\"s.fill\"\n >\n @if (s.title) {\n <svg:title>{{ s.title }}</svg:title>\n }\n </svg:circle>\n }\n @case ('text') {\n <svg:text\n [attr.data-skdx-part]=\"s.part\"\n [attr.x]=\"s.x\"\n [attr.y]=\"s.y\"\n [attr.text-anchor]=\"s.anchor\"\n [attr.dominant-baseline]=\"s.baseline\"\n [attr.fill]=\"s.fill\"\n >\n {{ s.text }}\n </svg:text>\n }\n }\n }\n `,\n})\nexport class SkdxChartShapesComponent {\n readonly shapes = input.required<Shape[]>();\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { ChangeDetectionStrategy, Component, Directive, input, signal } from '@angular/core';\n\nimport { CHART_COLORS, hoverTooltip, type Canvas, type Series, type Shape } from './core/index.js';\nimport { SkdxChartShapesComponent } from './shapes.component';\n\n/** The accessible `<svg>` root every chart renders into: projected marks, then decorations, then the hover tooltip. */\n@Component({\n selector: 'skdx-chart-root',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { style: 'display: inline-block' },\n imports: [SkdxChartShapesComponent],\n template: `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n [attr.viewBox]=\"'0 0 ' + layout().width + ' ' + layout().height\"\n [attr.width]=\"layout().width\"\n [attr.height]=\"layout().height\"\n role=\"img\"\n [attr.aria-label]=\"label()\"\n [attr.data-skdx-chart]=\"kind()\"\n [attr.font-family]=\"colors.fontFamily\"\n [attr.font-size]=\"colors.fontSize\"\n style=\"max-width: 100%; height: auto\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerleave)=\"tip.set([])\"\n >\n <title>{{ label() }}</title>\n <svg:g skdxChartShapes [shapes]=\"layout().shapes\"></svg:g>\n <svg:g skdxChartShapes [shapes]=\"tip()\"></svg:g>\n </svg>\n `,\n})\nexport class SkdxChartRootComponent {\n readonly layout = input.required<Canvas>();\n readonly kind = input.required<string>();\n readonly label = input.required<string>();\n\n protected readonly colors = CHART_COLORS;\n protected readonly tip = signal<Shape[]>([]);\n\n protected onPointerMove(e: PointerEvent): void {\n if (!this.layout().tooltip) return;\n const { width, height } = this.layout();\n const next = hoverTooltip(\n e.target,\n e.currentTarget as Element,\n e.clientX,\n e.clientY,\n width,\n height,\n );\n if (next.length > 0 || this.tip().length > 0) this.tip.set(next);\n }\n}\n\n/** The `<svg>` root, grid, axis and tick labels every axis chart shares; marks are projected. */\n@Directive()\nexport abstract class SkdxSizedBase {\n readonly width = input<number>();\n readonly height = input<number>();\n /** Accessible name of the chart; defaults to \"<Kind> chart\". */\n readonly label = input<string>();\n /** Draw a legend row above the plot. */\n readonly legend = input(false);\n /** Show a hover tooltip for the mark under the pointer. */\n readonly tooltip = input(true);\n\n protected sized() {\n return {\n width: this.width(),\n height: this.height(),\n legend: this.legend(),\n tooltip: this.tooltip(),\n };\n }\n}\n\n/** Inputs the category charts take. */\n@Directive()\nexport abstract class SkdxChartBase extends SkdxSizedBase {\n readonly series = input.required<Series[]>();\n readonly categories = input<string[]>();\n\n protected input() {\n return { ...this.sized(), series: this.series(), categories: this.categories() };\n }\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nexport * from './frame.component';\nexport * from './shapes.component';\nexport * from './core/index.js';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["MARGIN","TAU","PAD","nodeValue","UP","DOWN"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"skdx-angular-charts-internal.mjs","sources":["../../src/internal/core/format.ts","../../src/internal/core/palette.ts","../../src/internal/core/scale.ts","../../src/internal/core/frame.ts","../../src/internal/core/shapes.ts","../../src/internal/core/reference.ts","../../src/internal/core/cartesian.ts","../../src/internal/core/bar.ts","../../src/internal/core/line.ts","../../src/internal/core/scatter.ts","../../src/internal/core/pie.ts","../../src/internal/core/sparkline.ts","../../src/internal/core/radar.ts","../../src/internal/core/heatmap.ts","../../src/internal/core/funnel.ts","../../src/internal/core/radial.ts","../../src/internal/core/interact.ts","../../src/internal/core/export.ts","../../src/internal/core/animate.ts","../../src/internal/core/sankey.ts","../../src/internal/core/treemap.ts","../../src/internal/core/candlestick.ts","../../src/internal/core/waterfall.ts","../../src/internal/core/gantt.ts","../../src/internal/core/boxplot.ts","../../src/internal/core/sunburst.ts","../../src/internal/core/chord.ts","../../src/internal/core/map.ts","../../src/internal/core/index.ts","../../src/internal/shapes.component.ts","../../src/internal/frame.component.ts","../../src/internal/index.ts","../../src/internal/skdx-angular-charts-internal.ts"],"sourcesContent":["/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport type { Category, Format } from './types.js';\n\nconst round = (v: number) => Number(v.toPrecision(12));\n\nlet defaultNumberFormat: Intl.NumberFormat | undefined;\n\n/** The default: the runtime locale's plain number format, with float noise trimmed. */\nexport const formatValue = (v: number): string =>\n (defaultNumberFormat ??= new Intl.NumberFormat()).format(round(v));\n\n/** Seconds as `1h 02m`, `3m 05s` or `12s`. */\nconst duration = (seconds: number): string => {\n const s = Math.round(Math.abs(seconds));\n const sign = seconds < 0 ? '-' : '';\n const h = Math.floor(s / 3600);\n const m = Math.floor((s % 3600) / 60);\n const pad = (n: number) => String(n).padStart(2, '0');\n if (h > 0) return `${sign}${h}h ${pad(m)}m`;\n if (m > 0) return `${sign}${m}m ${pad(s % 60)}s`;\n return `${sign}${s}s`;\n};\n\n/** Turns a `Format` into a function; `undefined` gives the default number format. */\nexport function makeFormatter(format: Format | undefined): (value: number) => string {\n if (format === undefined) return formatValue;\n if (typeof format === 'function') return format;\n const { style, locale, digits, unit = '' } = format;\n const withUnit = (f: (v: number) => string) => (unit ? (v: number) => f(v) + unit : f);\n const digitsOf = (fallback?: number) =>\n digits === undefined\n ? fallback === undefined\n ? {}\n : { maximumFractionDigits: fallback }\n : { minimumFractionDigits: digits, maximumFractionDigits: digits };\n const number = (options: Intl.NumberFormatOptions) => {\n const nf = new Intl.NumberFormat(locale, options);\n return withUnit((v: number) => nf.format(round(v)));\n };\n const date = (options: Intl.DateTimeFormatOptions) => {\n const df = new Intl.DateTimeFormat(locale, options);\n return (v: number) => df.format(v);\n };\n switch (style) {\n case 'integer':\n return number({ maximumFractionDigits: 0 });\n case 'decimal':\n return number(digitsOf(2));\n case 'percent':\n return number({ style: 'percent', ...digitsOf(0) });\n case 'currency':\n return number({ style: 'currency', currency: format.currency ?? 'USD', ...digitsOf() });\n case 'compact':\n return number({ notation: 'compact', ...digitsOf(1) });\n case 'scientific':\n return number({ notation: 'scientific', ...digitsOf(2) });\n case 'date':\n return date({ dateStyle: 'medium' });\n case 'time':\n return date({ timeStyle: 'short' });\n case 'datetime':\n return date({ dateStyle: 'medium', timeStyle: 'short' });\n case 'duration':\n return withUnit(duration);\n }\n}\n\n/** A category as axis text: strings as they are, numbers and dates through `format`. */\nexport function categoryLabel(c: Category, format?: Format): string {\n if (typeof c === 'string') return c;\n const v = c instanceof Date ? c.getTime() : c;\n if (format) return makeFormatter(format)(v);\n return c instanceof Date ? new Intl.DateTimeFormat().format(c) : formatValue(v);\n}\n\n/** A category as a number, for positioning on numeric axes (Gantt, scatter references). */\nexport const categoryValue = (c: Category): number =>\n c instanceof Date ? c.getTime() : typeof c === 'number' ? c : Number(c);\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport type { Variant } from './types.js';\n\n/**\n * Series colors, cycling through the `@skdx/tokens` scales so charts follow the\n * active theme. Load `@skdx/tokens/css` (or any theme) for these to resolve.\n */\nexport const SERIES_COLORS: readonly string[] = [\n 'primary',\n 'success',\n 'warning',\n 'danger',\n 'neutral',\n]\n .flatMap((scale) => [500, 700].map((shade) => `var(--skdx-color-${scale}-${shade})`))\n // Interleave: every 500 first, then every 700.\n .sort((a, b) => Number(a.endsWith('700)')) - Number(b.endsWith('700)')));\n\nexport const CHART_COLORS = {\n axis: 'var(--skdx-color-border-strong)',\n grid: 'var(--skdx-color-border-subtle)',\n label: 'var(--skdx-color-text-muted)',\n focus: 'var(--skdx-color-focus-ring)',\n positive: 'var(--skdx-color-success-500)',\n negative: 'var(--skdx-color-danger-500)',\n fontFamily: 'var(--skdx-font-family)',\n fontSize: 'var(--skdx-font-size-xs)',\n} as const;\n\n/** Semantic color of a reference line, band or threshold sector. */\nexport const variantColor = (variant: Variant = 'neutral'): string =>\n variant === 'neutral' ? CHART_COLORS.axis : `var(--skdx-color-${variant}-500)`;\n\nexport const seriesColor = (index: number, override?: string): string =>\n override ?? (SERIES_COLORS[index % SERIES_COLORS.length] as string);\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport type { Curve, Value } from './types.js';\n\nexport { formatValue } from './format.js';\n\n/** Maps `[d0, d1]` onto `[r0, r1]` linearly; a zero-width domain maps to `r0`. */\nexport function linearScale(\n [d0, d1]: readonly [number, number],\n [r0, r1]: readonly [number, number],\n): (value: number) => number {\n const span = d1 - d0;\n return (value) => (span === 0 ? r0 : r0 + ((value - d0) / span) * (r1 - r0));\n}\n\n/** Round tick values covering `[min, max]` with a 1/2/5 step, about `count` of them. */\nexport function niceTicks(min: number, max: number, count = 5): number[] {\n if (min === max) return [min];\n const raw = (max - min) / Math.max(1, count);\n const magnitude = 10 ** Math.floor(Math.log10(raw));\n const norm = raw / magnitude;\n const step = (norm < 1.5 ? 1 : norm < 3.5 ? 2 : norm < 7.5 ? 5 : 10) * magnitude;\n const start = Math.floor(min / step) * step;\n const end = Math.ceil(max / step) * step;\n const ticks: number[] = [];\n for (let v = start; v <= end + step / 2; v += step) ticks.push(round(v));\n return ticks;\n}\n\n/** Evenly spaced slots for `count` categories across `[r0, r1]` with 20% gaps. */\nexport function bandScale(count: number, [r0, r1]: readonly [number, number]) {\n const step = count === 0 ? 0 : (r1 - r0) / count;\n const bandwidth = step * 0.8;\n return {\n step,\n bandwidth,\n start: (i: number) => r0 + i * step + (step - bandwidth) / 2,\n center: (i: number) => r0 + (i + 0.5) * step,\n };\n}\n\nconst round = (v: number) => Number(v.toPrecision(12));\n\n/** Pixel coordinates rounded to 2 decimals, so the markup stays readable. */\nexport const px = (n: number): number => Number(n.toFixed(2));\n\n/** `true` for a plottable number: not `null`, `NaN` or infinite. */\nexport const isFinite = (v: Value | undefined): v is number =>\n typeof v === 'number' && Number.isFinite(v);\n\n/** The plottable numbers of a list, in order. */\nexport const finite = (values: readonly (Value | undefined)[]): number[] => values.filter(isFinite);\n\n/** `[min, max]` over any number of values without spreading them as arguments; `[0, 0]` when empty. */\nexport function minMax(values: Iterable<Value | undefined>): [number, number] {\n let min = Infinity;\n let max = -Infinity;\n for (const v of values) {\n if (!isFinite(v)) continue;\n if (v < min) min = v;\n if (v > max) max = v;\n }\n return min === Infinity ? [0, 0] : [min, max];\n}\n\ntype Point = { x: number; y: number };\n\n/** SVG path through the points: straight segments, steps, or a monotone cubic (Fritsch–Carlson) that never overshoots. */\nexport function pathThrough(points: Point[], curve: Curve = 'linear'): string {\n if (points.length === 0) return '';\n const first = points[0] as Point;\n if (curve === 'step' || curve === 'stepBefore' || curve === 'stepAfter') {\n let d = `M${first.x} ${first.y}`;\n for (let i = 1; i < points.length; i++) {\n const a = points[i - 1] as Point;\n const b = points[i] as Point;\n if (curve === 'stepAfter') d += `H${b.x}V${b.y}`;\n else if (curve === 'stepBefore') d += `V${b.y}H${b.x}`;\n else d += `H${px((a.x + b.x) / 2)}V${b.y}H${b.x}`;\n }\n return d;\n }\n if (curve === 'linear' || points.length < 3)\n return `M${points.map((p) => `${p.x} ${p.y}`).join('L')}`;\n const n = points.length;\n const dx = points.slice(1).map((p, i) => p.x - (points[i] as Point).x);\n const dy = points.slice(1).map((p, i) => p.y - (points[i] as Point).y);\n const slope = dx.map((d, i) => (d === 0 ? 0 : (dy[i] as number) / d));\n const m: number[] = [slope[0] as number];\n for (let i = 1; i < n - 1; i++) {\n const a = slope[i - 1] as number;\n const b = slope[i] as number;\n m.push(a * b <= 0 ? 0 : (a + b) / 2);\n }\n m.push(slope[n - 2] as number);\n for (let i = 0; i < n - 1; i++) {\n const s = slope[i] as number;\n if (s === 0) {\n m[i] = 0;\n m[i + 1] = 0;\n continue;\n }\n const a = (m[i] as number) / s;\n const b = (m[i + 1] as number) / s;\n const h = Math.hypot(a, b);\n if (h > 3) {\n m[i] = (3 * a * s) / h;\n m[i + 1] = (3 * b * s) / h;\n }\n }\n let d = `M${first.x} ${first.y}`;\n for (let i = 0; i < n - 1; i++) {\n const p0 = points[i] as Point;\n const p1 = points[i + 1] as Point;\n const h = (dx[i] as number) / 3;\n d += `C${px(p0.x + h)} ${px(p0.y + h * (m[i] as number))} ${px(p1.x - h)} ${px(p1.y - h * (m[i + 1] as number))} ${p1.x} ${p1.y}`;\n }\n return d;\n}\n\nconst SECOND = 1000;\nconst MINUTE = 60 * SECOND;\nconst HOUR = 60 * MINUTE;\nconst DAY = 24 * HOUR;\n/** Calendar-friendly tick steps, in ms, from a second up to a week. */\nconst TIME_STEPS = [\n SECOND,\n 5 * SECOND,\n 15 * SECOND,\n 30 * SECOND,\n MINUTE,\n 5 * MINUTE,\n 15 * MINUTE,\n 30 * MINUTE,\n HOUR,\n 3 * HOUR,\n 6 * HOUR,\n 12 * HOUR,\n DAY,\n 2 * DAY,\n 7 * DAY,\n 14 * DAY,\n];\n\n/**\n * Round timestamps covering `[min, max]` (epoch ms), about `count` of them: seconds to weeks as\n * UTC-aligned multiples, then whole months or years.\n */\nexport function timeTicks(min: number, max: number, count = 6): number[] {\n if (!(max > min)) return [min];\n const span = max - min;\n const step = TIME_STEPS.find((s) => span / s <= count);\n const ticks: number[] = [];\n if (step !== undefined) {\n for (let t = Math.ceil(min / step) * step; t <= max; t += step) ticks.push(t);\n return ticks.length ? ticks : [min, max];\n }\n const months = span / (30 * DAY);\n const stepMonths = [1, 2, 3, 6, 12, 24, 60, 120].find((m) => months / m <= count) ?? 240;\n const d = new Date(min);\n let y = d.getUTCFullYear();\n let m = Math.ceil((d.getUTCMonth() + (d.getUTCDate() > 1 ? 1 : 0)) / stepMonths) * stepMonths;\n for (let t = Date.UTC(y, m, 1); t <= max;) {\n ticks.push(t);\n m += stepMonths;\n if (m >= 12) {\n y += Math.floor(m / 12);\n m %= 12;\n }\n t = Date.UTC(y, m, 1);\n }\n return ticks.length ? ticks : [min, max];\n}\n\n/** Ticks at powers of ten covering `[min, max]` (both > 0), with 2× and 5× steps when a decade or less. */\nexport function logTicks(min: number, max: number): number[] {\n const lo = Math.floor(Math.log10(min));\n const hi = Math.ceil(Math.log10(max));\n const steps = hi - lo <= 1 ? [1, 2, 5] : [1];\n const ticks: number[] = [];\n for (let k = lo; k <= hi; k++) for (const s of steps) ticks.push(round(s * 10 ** k));\n return ticks.filter((t) => t >= min / 1.0001 && t <= max * 1.0001);\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { makeFormatter } from './format.js';\nimport { CHART_COLORS, seriesColor } from './palette.js';\nimport { linearScale, logTicks, minMax, niceTicks, px } from './scale.js';\nimport type { AxisOptions, Box, Canvas, Format, LegendItem, Shape, Sized, Tick } from './types.js';\n\nexport const MARGIN = { top: 16, right: 16, bottom: 32, left: 48 } as const;\n\nexport type Margin = Record<'top' | 'right' | 'bottom' | 'left', number>;\n\nexport function plotBox(width: number, height: number, margin: Margin = MARGIN): Box {\n return {\n x: margin.left,\n y: margin.top,\n width: Math.max(0, width - margin.left - margin.right),\n height: Math.max(0, height - margin.top - margin.bottom),\n };\n}\n\nexport const size = (input: Sized, w = 600, h = 300) => ({\n width: input.width ?? w,\n height: input.height ?? h,\n});\n\nexport const LEGEND_HEIGHT = 20;\n\n/** Vertical room the legend row takes, to shift the plot down by. */\nexport const legendTop = (input: Sized): number => (input.legend ? LEGEND_HEIGHT : 0);\n\n/** Average glyph width at the chart font size, for text-width estimates. */\nexport const CHAR = 6.5;\n\n/** The series color for index `i`: an explicit override, else the chart palette, else the tokens. */\nexport const colorOf = (input: Sized, i: number, override?: string): string =>\n override ??\n (input.palette && input.palette.length > 0\n ? (input.palette[i % input.palette.length] as string)\n : seriesColor(i));\n\nexport const isHidden = (input: Sized, name: string): boolean =>\n input.hiddenSeries?.includes(name) ?? false;\n\n/** One row of swatches and names along the top edge, wrapping when it runs out of width. */\nexport function legendShapes(items: LegendItem[], width: number, hidden: string[] = []): Shape[] {\n const shapes: Shape[] = [];\n let x = 8;\n let y = 10;\n for (const item of items) {\n const w = 18 + item.name.length * CHAR;\n if (x + w > width - 8 && x > 8) {\n x = 8;\n y += LEGEND_HEIGHT;\n }\n const off = hidden.includes(item.name);\n const meta = { label: item.name, series: item.name, legend: true };\n shapes.push(\n {\n kind: 'rect',\n part: 'legend-swatch',\n x,\n y: y - 5,\n width: 10,\n height: 10,\n fill: item.color,\n opacity: off ? 0.3 : undefined,\n item: meta,\n },\n {\n kind: 'text',\n part: 'legend-label',\n x: x + 14,\n y,\n text: item.name,\n baseline: 'middle',\n fill: off ? CHART_COLORS.grid : CHART_COLORS.label,\n item: meta,\n },\n );\n x += w + 12;\n }\n return shapes;\n}\n\n/** The common tail of every layout: size, legend decorations, the tooltip switch and accessibility passthroughs. */\nexport function canvas(\n input: Sized,\n width: number,\n height: number,\n legend: LegendItem[] = [],\n): Canvas {\n return {\n width,\n height,\n tooltip: input.tooltip ?? true,\n description: input.description,\n decorative: input.decorative,\n animate: input.animate === true ? 300 : input.animate || undefined,\n responsive: input.responsive,\n shapes: input.legend ? legendShapes(legend, width, input.hiddenSeries ?? []) : [],\n };\n}\n\n/** A tooltip box next to the pointer, kept inside the canvas; one line per entry. */\nexport function tooltipShapes(\n x: number,\n y: number,\n text: string | string[],\n width: number,\n height: number,\n): Shape[] {\n const lines = Array.isArray(text) ? text : [text];\n const w = Math.max(...lines.map((l) => l.length)) * CHAR + 12;\n const h = 6 + lines.length * 16;\n const bx = Math.max(0, Math.min(width - w, x + 12));\n const by = Math.max(0, Math.min(height - h, y - h - 6));\n return [\n {\n kind: 'rect',\n part: 'tooltip',\n x: px(bx),\n y: px(by),\n width: px(w),\n height: h,\n fill: 'var(--skdx-color-surface-raised)',\n stroke: CHART_COLORS.axis,\n rx: 3,\n },\n ...lines.map((line, i): Shape => ({\n kind: 'text',\n part: 'tooltip-label',\n x: px(bx + 6),\n y: px(by + 11 + i * 16),\n text: line,\n baseline: 'middle',\n fill: 'var(--skdx-color-text-default)',\n weight: lines.length > 1 && i === 0 ? 'bold' : undefined,\n })),\n ];\n}\n\n/** `[min, max]` of the plottable values, widened to include zero when asked; `[0, 0]` when empty. */\nexport function extent(\n values: Iterable<number | null | undefined>,\n includeZero: boolean,\n): readonly [number, number] {\n const [min, max] = minMax(values);\n return includeZero ? [Math.min(0, min), Math.max(0, max)] : [min, max];\n}\n\nexport interface Axis {\n scale: (value: number) => number;\n domain: readonly [number, number];\n ticks: Tick[];\n /** Pixel position of zero, clamped into the domain. */\n zero: number;\n format: (value: number) => string;\n}\n\n/** A nice-ticked linear (or log) axis over `[min, max]` mapped onto `range`, honouring explicit bounds. */\nexport function axis(\n [min, max]: readonly [number, number],\n range: readonly [number, number],\n options: AxisOptions | boolean = false,\n chartFormat?: Format,\n): Axis {\n const opts: AxisOptions =\n typeof options === 'boolean' ? { scale: options ? 'log' : 'linear' } : options;\n const format = makeFormatter(opts.format ?? chartFormat);\n const lo = opts.min ?? min;\n const hi = opts.max ?? max;\n if (opts.scale === 'log') {\n const l = Math.max(lo, Number.EPSILON);\n const h = Math.max(hi, l);\n const ticks = logTicks(l, h);\n const domain = [Math.log10(l), Math.log10(h)] as const;\n const lin = linearScale(domain, range);\n const scale = (v: number) => lin(Math.log10(Math.max(v, Number.EPSILON)));\n return {\n scale,\n domain,\n format,\n ticks: ticks.map((v): Tick => ({ pos: px(scale(v)), label: format(v) })),\n zero: px(range[0]),\n };\n }\n const nice = niceTicks(lo, hi);\n // Explicit bounds win over the rounded ends; ticks outside them are dropped.\n const domain = [\n opts.min ?? (nice[0] as number),\n opts.max ?? (nice[nice.length - 1] as number),\n ] as const;\n const scale = linearScale(domain, range);\n const inside = nice.filter((v) => v >= domain[0] - 1e-9 && v <= domain[1] + 1e-9);\n const ticks = (inside.length >= 2 ? inside : [domain[0], domain[1]]).map((v): Tick => ({\n pos: px(scale(v)),\n label: format(v),\n }));\n return {\n scale,\n domain,\n format,\n ticks,\n zero: px(scale(Math.min(Math.max(0, domain[0]), domain[1]))),\n };\n}\n\n/** Keeps every n-th tick so labels of the given widths do not overlap along `width`. */\nexport function thinTicks(ticks: Tick[], width: number): Tick[] {\n if (ticks.length < 2) return ticks;\n const widest = ticks.reduce((w, t) => Math.max(w, t.label.length), 0) * CHAR + 8;\n const every = Math.max(1, Math.ceil((ticks.length * widest) / Math.max(1, width)));\n return every === 1 ? ticks : ticks.filter((_, i) => i % every === 0);\n}\n\n/** Tooltip text for a value in a series: `Series, Category: 1,234`. */\nexport const markTitle = (\n series: string,\n category: string,\n value: number,\n format: (v: number) => string,\n): string => `${series}, ${category}: ${format(value)}`;\n\n/**\n * The loading, error or empty placeholder, or `null` when the chart should draw. Charts call this\n * first so no axis is drawn around missing data.\n */\nexport function stateCanvas(input: Sized, empty: boolean, w?: number, h?: number): Canvas | null {\n const state =\n input.error !== undefined ? 'error' : input.loading ? 'loading' : empty ? 'empty' : null;\n if (!state) return null;\n const { width, height } = size(input, w, h);\n const text =\n state === 'error'\n ? (input.error as string)\n : state === 'loading'\n ? 'Loading…'\n : (input.emptyMessage ?? 'No data available');\n const shapes: Shape[] = [];\n if (state === 'loading')\n shapes.push({\n kind: 'rect',\n part: 'skeleton',\n x: 0,\n y: 0,\n width,\n height,\n fill: 'var(--skdx-color-surface-sunken)',\n rx: 4,\n });\n shapes.push({\n kind: 'text',\n part: `state-${state}`,\n x: px(width / 2),\n y: px(height / 2),\n text,\n anchor: 'middle',\n baseline: 'middle',\n fill: state === 'error' ? 'var(--skdx-color-text-danger)' : CHART_COLORS.label,\n });\n return { ...canvas(input, width, height), shapes, tooltip: false };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { CHART_COLORS } from './palette.js';\nimport { px } from './scale.js';\nimport type { ChartItem, Frame, Shape, Tick } from './types.js';\n\nexport interface FrameOptions {\n /** Ticks of the second value axis, drawn on the right edge. */\n rightTicks?: Tick[] | undefined;\n /** Categories run down the left edge and values along the bottom. */\n horizontal?: boolean | undefined;\n xLabel?: string | undefined;\n yLabel?: string | undefined;\n rightLabel?: string | undefined;\n}\n\n/** Grid, axis line and tick labels of an axis frame, as shapes. */\nexport function frameShapes(frame: Frame, options: FrameOptions = {}): Shape[] {\n const { plot, xTicks, yTicks, baseline } = frame;\n const right = plot.x + plot.width;\n const bottom = plot.y + plot.height;\n const shapes: Shape[] = [];\n if (options.horizontal) {\n // Value ticks along the bottom with vertical grid lines; category labels on the left.\n for (const t of yTicks)\n shapes.push({\n kind: 'line',\n part: 'grid',\n x1: t.pos,\n x2: t.pos,\n y1: plot.y,\n y2: bottom,\n stroke: CHART_COLORS.grid,\n });\n shapes.push({\n kind: 'line',\n part: 'axis',\n x1: baseline,\n x2: baseline,\n y1: plot.y,\n y2: bottom,\n stroke: CHART_COLORS.axis,\n });\n for (const t of yTicks)\n shapes.push(label(t.pos, bottom + 20, t.label, { part: 'x-label', anchor: 'middle' }));\n for (const t of xTicks)\n shapes.push(\n label(plot.x - 8, t.pos, t.label, { part: 'y-label', anchor: 'end', baseline: 'middle' }),\n );\n } else {\n for (const t of yTicks)\n shapes.push({\n kind: 'line',\n part: 'grid',\n x1: plot.x,\n x2: right,\n y1: t.pos,\n y2: t.pos,\n stroke: CHART_COLORS.grid,\n });\n shapes.push({\n kind: 'line',\n part: 'axis',\n x1: plot.x,\n x2: right,\n y1: baseline,\n y2: baseline,\n stroke: CHART_COLORS.axis,\n });\n for (const t of yTicks)\n shapes.push(\n label(plot.x - 8, t.pos, t.label, { part: 'y-label', anchor: 'end', baseline: 'middle' }),\n );\n for (const t of options.rightTicks ?? [])\n shapes.push(\n label(right + 8, t.pos, t.label, {\n part: 'y-label-right',\n anchor: 'start',\n baseline: 'middle',\n }),\n );\n for (const t of xTicks)\n shapes.push(label(t.pos, bottom + 20, t.label, { part: 'x-label', anchor: 'middle' }));\n }\n if (options.xLabel)\n shapes.push(\n label(px(plot.x + plot.width / 2), frame.height - 4, options.xLabel, {\n part: 'axis-title',\n anchor: 'middle',\n }),\n );\n if (options.yLabel)\n shapes.push(label(4, plot.y - 6, options.yLabel, { part: 'axis-title', anchor: 'start' }));\n if (options.rightLabel)\n shapes.push(\n label(frame.width - 4, plot.y - 6, options.rightLabel, { part: 'axis-title', anchor: 'end' }),\n );\n return shapes;\n}\n\nexport const label = (\n x: number,\n y: number,\n text: string,\n extra: Partial<Extract<Shape, { kind: 'text' }>> = {},\n): Shape => ({ kind: 'text', part: 'label', x, y, text, fill: CHART_COLORS.label, ...extra });\n\n/** A dot with its native tooltip. */\nexport const point = (\n cx: number,\n cy: number,\n r: number,\n fill: string,\n title?: string,\n item?: ChartItem,\n): Shape => ({ kind: 'circle', part: 'point', cx, cy, r, fill, title, item });\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { variantColor } from './palette.js';\nimport { px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { Box, Category, Reference, Shape } from './types.js';\n\nexport interface ReferenceScales {\n plot: Box;\n /** Pixel x of a data x, or `undefined` when it cannot be placed (unknown category). */\n x: (value: Category) => number | undefined;\n /** Pixel y of a data y on the named axis. */\n y: (value: number, axis: 'left' | 'right') => number;\n /** Categories run down the y axis and values along x (horizontal bars). */\n horizontal?: boolean | undefined;\n}\n\n/**\n * Lines and bands in data coordinates, drawn behind the marks: targets, SLAs, budgets,\n * forecast periods, healthy ranges. Each carries its label at the plot edge.\n */\nexport function referenceShapes(refs: Reference[] | undefined, s: ReferenceScales): Shape[] {\n const shapes: Shape[] = [];\n const { plot } = s;\n const right = plot.x + plot.width;\n const bottom = plot.y + plot.height;\n const clampX = (v: number) => Math.max(plot.x, Math.min(right, v));\n const clampY = (v: number) => Math.max(plot.y, Math.min(bottom, v));\n for (const r of refs ?? []) {\n const color = variantColor(r.variant);\n const meta = { part: 'reference-label', fill: color } as const;\n // Under horizontal orientation the value axis is x, so y references become vertical.\n const yAsX = s.horizontal === true;\n if ('y' in r) {\n const p = px(s.y(r.y, r.axis ?? 'left'));\n if (yAsX) {\n const x = clampX(p);\n shapes.push(...vline(x, plot.y, bottom, color, r.label, meta));\n } else {\n const y = clampY(p);\n shapes.push(...hline(plot.x, right, y, color, r.label, meta));\n }\n } else if ('x' in r) {\n const p = s.x(r.x);\n if (p === undefined) continue;\n if (yAsX) shapes.push(...hline(plot.x, right, clampY(px(p)), color, r.label, meta));\n else shapes.push(...vline(clampX(px(p)), plot.y, bottom, color, r.label, meta));\n } else if ('y1' in r) {\n const a = px(s.y(r.y1, r.axis ?? 'left'));\n const b = px(s.y(r.y2, r.axis ?? 'left'));\n if (yAsX)\n shapes.push(...vband(clampX(Math.min(a, b)), clampX(Math.max(a, b)), plot, color, r.label));\n else\n shapes.push(...hband(clampY(Math.min(a, b)), clampY(Math.max(a, b)), plot, color, r.label));\n } else {\n const a = s.x(r.x1);\n const b = s.x(r.x2);\n if (a === undefined || b === undefined) continue;\n const lo = px(Math.min(a, b));\n const hi = px(Math.max(a, b));\n if (yAsX) shapes.push(...hband(clampY(lo), clampY(hi), plot, color, r.label));\n else shapes.push(...vband(clampX(lo), clampX(hi), plot, color, r.label));\n }\n }\n return shapes;\n}\n\ntype TextExtra = Partial<Extract<Shape, { kind: 'text' }>>;\n\nfunction hline(\n x1: number,\n x2: number,\n y: number,\n stroke: string,\n text: string | undefined,\n extra: TextExtra,\n): Shape[] {\n const line: Shape = {\n kind: 'line',\n part: 'reference',\n x1,\n x2,\n y1: y,\n y2: y,\n stroke,\n dash: '6 4',\n strokeWidth: 1.5,\n title: text,\n };\n return text ? [line, label(x2 - 4, y - 5, text, { ...extra, anchor: 'end' })] : [line];\n}\n\nfunction vline(\n x: number,\n y1: number,\n y2: number,\n stroke: string,\n text: string | undefined,\n extra: TextExtra,\n): Shape[] {\n const line: Shape = {\n kind: 'line',\n part: 'reference',\n x1: x,\n x2: x,\n y1,\n y2,\n stroke,\n dash: '6 4',\n strokeWidth: 1.5,\n title: text,\n };\n return text ? [line, label(x + 4, y1 + 10, text, { ...extra, anchor: 'start' })] : [line];\n}\n\nfunction hband(y1: number, y2: number, plot: Box, fill: string, text: string | undefined): Shape[] {\n const band: Shape = {\n kind: 'rect',\n part: 'reference-area',\n x: plot.x,\n y: y1,\n width: plot.width,\n height: px(Math.max(0, y2 - y1)),\n fill,\n opacity: 0.12,\n title: text,\n };\n return text\n ? [\n band,\n label(plot.x + plot.width - 4, y1 + 12, text, {\n part: 'reference-label',\n fill,\n anchor: 'end',\n }),\n ]\n : [band];\n}\n\nfunction vband(x1: number, x2: number, plot: Box, fill: string, text: string | undefined): Shape[] {\n const band: Shape = {\n kind: 'rect',\n part: 'reference-area',\n x: x1,\n y: plot.y,\n width: px(Math.max(0, x2 - x1)),\n height: plot.height,\n fill,\n opacity: 0.12,\n title: text,\n };\n return text\n ? [band, label(x1 + 4, plot.y + 12, text, { part: 'reference-label', fill, anchor: 'start' })]\n : [band];\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { categoryLabel, categoryValue, makeFormatter } from './format.js';\nimport {\n axis,\n canvas,\n CHAR,\n colorOf,\n isHidden,\n legendTop,\n MARGIN,\n markTitle,\n plotBox,\n size,\n stateCanvas,\n thinTicks,\n type Axis,\n} from './frame.js';\nimport { CHART_COLORS } from './palette.js';\nimport { referenceShapes } from './reference.js';\nimport {\n bandScale,\n finite,\n isFinite,\n linearScale,\n minMax,\n niceTicks,\n pathThrough,\n px,\n timeTicks,\n} from './scale.js';\nimport { frameShapes, label, point } from './shapes.js';\nimport type {\n Canvas,\n CartesianSeries,\n Category,\n ChartInput,\n ChartItem,\n Curve,\n Hit,\n RangeSeries,\n Shape,\n Tick,\n Value,\n Zoom,\n} from './types.js';\n\ntype Kind = 'bar' | 'line' | 'area';\n\n/** Markers are drawn up to this many visible points per series. */\nexport const MARKER_LIMIT = 100;\n/** Per-point titles (and so per-point tooltips) are emitted up to this many visible points per series. */\nexport const TITLE_LIMIT = 2000;\nconst BRUSH_HEIGHT = 32;\nconst BRUSH_GAP = 28;\n\n/** A series after transforms, with its resolved role. */\ninterface Resolved {\n name: string;\n color: string;\n axis: 'left' | 'right';\n hidden: boolean;\n /** The original series index, for stable colors. */\n index: number;\n kind: Kind | 'range';\n data: Value[];\n low: Value[];\n high: Value[];\n curve: Curve;\n dash: string | undefined;\n markers: boolean | undefined;\n /** Stack group key, or `undefined` when not stacked. */\n stack: string | undefined;\n}\n\n/** Bars, lines, areas and range bands that share one category axis and up to two value axes. */\nexport function layoutCartesian(input: ChartInput, defaultType: Kind): Canvas {\n const format = makeFormatter(input.format);\n const { series: all, categories: cats } = transform(input, defaultType, format);\n const count = Math.max(cats.length, ...all.map((s) => Math.max(s.data.length, s.low.length)));\n const empty = all.every((s) => finite(s.data).length === 0 && finite(s.high).length === 0);\n const state = stateCanvas(input, empty);\n if (state) return state;\n\n // A time or linear axis places numeric/date categories proportionally instead of in even slots.\n const xType = input.xAxis?.type ?? 'category';\n const continuous =\n xType !== 'category' && cats.length > 0 && cats.every((c) => typeof c !== 'string');\n const xValues = continuous ? cats.map(categoryValue) : [];\n const [xMin, xMax] = minMax(xValues);\n const xFormat =\n input.xAxis?.format ??\n (xType === 'time'\n ? ({ style: xMax - xMin < 2 * 86_400_000 ? 'time' : 'date' } as const)\n : undefined);\n const labels = Array.from({ length: count }, (_, i) => {\n const c = cats[i];\n return c === undefined ? String(i + 1) : categoryLabel(c, xFormat);\n });\n const zoom = clampZoom(input.zoom, count);\n const visible = Array.from({ length: zoom.end - zoom.start }, (_, i) => zoom.start + i);\n const horizontal = input.orientation === 'horizontal';\n const shown = all.map((s) => ({ ...s, hidden: s.hidden || (horizontal && s.kind !== 'bar') }));\n const drawn = shown.filter((s) => !s.hidden);\n const percent = input.stacked === 'percent';\n\n // Stack offsets: per group and category, the running top for positives and bottom for negatives.\n const stackFrom = new Map<Resolved, Value[]>();\n const stackTo = new Map<Resolved, Value[]>();\n const groups = new Map<string, Resolved[]>();\n for (const s of drawn)\n if (s.stack !== undefined && s.kind !== 'range')\n groups.set(s.stack, [...(groups.get(s.stack) ?? []), s]);\n for (const members of groups.values()) {\n const up = new Array<number>(count).fill(0);\n const down = new Array<number>(count).fill(0);\n const totals = new Array<number>(count).fill(0);\n if (percent)\n for (const s of members)\n s.data.forEach((v, ci) => {\n if (isFinite(v)) totals[ci] = (totals[ci] as number) + Math.abs(v);\n });\n for (const s of members) {\n const from: Value[] = [];\n const to: Value[] = [];\n for (let ci = 0; ci < count; ci++) {\n const raw = s.data[ci];\n if (!isFinite(raw)) {\n from.push(null);\n to.push(null);\n continue;\n }\n const t = totals[ci] as number;\n const v = percent ? (t > 0 ? raw / t : 0) : raw;\n const stack = v >= 0 ? up : down;\n from.push(stack[ci] as number);\n stack[ci] = (stack[ci] as number) + v;\n to.push(stack[ci] as number);\n }\n stackFrom.set(s, from);\n stackTo.set(s, to);\n }\n }\n const valuesOf = (s: Resolved): { from: Value[]; to: Value[] } =>\n s.kind === 'range'\n ? { from: s.low, to: s.high }\n : { from: stackFrom.get(s) ?? new Array<Value>(count).fill(0), to: stackTo.get(s) ?? s.data };\n\n // Value extents per axis over the visible window; bars and areas grow the domain to include zero.\n const extentOf = (side: 'left' | 'right'): [number, number] => {\n const values: number[] = [];\n let zero = false;\n for (const s of drawn) {\n if (s.axis !== side) continue;\n const { from, to } = valuesOf(s);\n for (const i of visible) {\n const a = to[i];\n if (isFinite(a)) values.push(a);\n if (s.kind === 'range' || s.stack !== undefined) {\n const b = from[i];\n if (isFinite(b)) values.push(b);\n }\n }\n if (s.kind === 'bar' || s.kind === 'area') zero = true;\n }\n const [min, max] = minMax(values);\n return zero ? [Math.min(0, min), Math.max(0, max)] : [min, max];\n };\n\n const rightUsed = input.rightAxis !== undefined || drawn.some((s) => s.axis === 'right');\n const { width, height } = size(input);\n const brushRoom = input.brush ? BRUSH_HEIGHT + BRUSH_GAP : 0;\n const widestCategory =\n visible.reduce((w, i) => Math.max(w, (labels[i] as string).length), 0) * CHAR;\n const margin = {\n top: MARGIN.top + legendTop(input) + (input.yAxis?.label || input.rightAxis?.label ? 12 : 0),\n right: rightUsed ? MARGIN.left : MARGIN.right,\n bottom: MARGIN.bottom + brushRoom + (input.xAxis?.label ? 14 : 0),\n left: horizontal ? Math.max(MARGIN.left, widestCategory + 16) : MARGIN.left,\n };\n const plot = plotBox(width, height, margin);\n const valueRange: readonly [number, number] = horizontal\n ? [plot.x, plot.x + plot.width]\n : [plot.y + plot.height, plot.y];\n const bandRange: readonly [number, number] = horizontal\n ? [plot.y, plot.y + plot.height]\n : [plot.x, plot.x + plot.width];\n const percentFormat = percent ? ({ style: 'percent' } as const) : undefined;\n const left = axis(\n extentOf('left'),\n valueRange,\n { format: percentFormat, ...input.yAxis },\n input.format,\n );\n const right: Axis | undefined = rightUsed\n ? axis(\n extentOf('right'),\n valueRange,\n { format: percentFormat, ...input.rightAxis },\n input.format,\n )\n : undefined;\n const value = (v: number, side: 'left' | 'right') =>\n (side === 'right' && right ? right : left).scale(v);\n const band = bandScale(visible.length, bandRange);\n // Continuous: the visible values map linearly onto the band range, padded by half the smallest\n // gap so edge bars stay inside; the bar slot is that smallest gap.\n const visibleX = visible.map((i) => xValues[i] as number);\n const sortedX = [...visibleX].sort((a, b) => a - b);\n let minGap = Infinity;\n for (let k = 1; k < sortedX.length; k++)\n minGap = Math.min(minGap, (sortedX[k] as number) - (sortedX[k - 1] as number));\n const [vMin, vMax] = minMax(visibleX);\n const pad = minGap === Infinity ? Math.max(1, Math.abs(vMax) * 0.05 || 1) : minGap / 2;\n const xScale = linearScale([vMin - pad, vMax + pad], bandRange);\n const center = (vi: number) => px(continuous ? xScale(visibleX[vi] as number) : band.center(vi));\n const slot = continuous\n ? Math.abs(xScale(vMin + (minGap === Infinity ? pad : minGap)) - xScale(vMin)) * 0.8\n : band.bandwidth;\n const slotStart = (vi: number) => (continuous ? center(vi) - slot / 2 : band.start(vi));\n\n const categoryTicks = continuous\n ? (xType === 'time' ? timeTicks(vMin - pad, vMax + pad) : niceTicks(vMin - pad, vMax + pad))\n .filter((v) => v >= vMin - pad && v <= vMax + pad)\n .map((v): Tick => ({ pos: px(xScale(v)), label: categoryLabel(v, xFormat) }))\n : thinTicks(\n visible.map((i, vi): Tick => ({ pos: center(vi), label: labels[i] as string })),\n horizontal ? Infinity : plot.width,\n );\n const frame = {\n ...canvas(\n input,\n width,\n height,\n all.map((s) => ({ name: s.name, color: s.color })),\n ),\n plot,\n xTicks: categoryTicks,\n yTicks: left.ticks,\n baseline: left.zero,\n };\n const shapes: Shape[] = frameShapes(frame, {\n horizontal,\n rightTicks: right?.ticks,\n xLabel: input.xAxis?.label,\n yLabel: input.yAxis?.label,\n rightLabel: input.rightAxis?.label,\n });\n\n // References sit behind the marks. `x` references name a category (label, value or index).\n const indexOfCategory = (c: Category): number | undefined => {\n if (typeof c === 'number' && cats.every((x) => typeof x === 'string')) return c;\n const target = typeof c === 'string' ? c : categoryValue(c);\n for (let i = 0; i < count; i++) {\n const cat = cats[i];\n if (cat === undefined) continue;\n if (\n typeof target === 'string'\n ? cat === target || labels[i] === target\n : categoryValue(cat) === target\n )\n return i;\n }\n return undefined;\n };\n shapes.push(\n ...referenceShapes(input.references, {\n plot,\n horizontal,\n x: (c) => {\n if (continuous && typeof c !== 'string') return xScale(categoryValue(c));\n const i = indexOfCategory(c);\n const vi = i === undefined ? -1 : visible.indexOf(i);\n return vi < 0 ? undefined : band.center(vi);\n },\n y: value,\n }),\n );\n\n // One slot per plain bar series and one per bar stack group, side by side inside the band.\n const slots: (Resolved | string)[] = [];\n const slotOf = new Map<Resolved, number>();\n for (const s of drawn) {\n if (s.kind !== 'bar') continue;\n const key = s.stack ?? s;\n let at = slots.indexOf(key);\n if (at < 0) at = slots.push(key) - 1;\n slotOf.set(s, at);\n }\n const groupWidth = slot / Math.max(1, slots.length);\n\n const areas: Shape[] = [];\n const bars: Shape[] = [];\n const lines: Shape[] = [];\n const points: Shape[] = [];\n const texts: Shape[] = [];\n const fmt = (s: Resolved) => (s.axis === 'right' && right ? right : left).format;\n const itemOf = (s: Resolved, i: number, v: number, title: string): ChartItem => ({\n label: title,\n series: s.name,\n category: labels[i],\n index: i,\n value: v,\n });\n\n for (const s of drawn) {\n const { from, to } = valuesOf(s);\n const f = fmt(s);\n const titled = visible.length <= TITLE_LIMIT;\n if (s.kind === 'bar') {\n visible.forEach((i, vi) => {\n const raw = s.data[i];\n const a = from[i];\n const b = to[i];\n if (!isFinite(raw) || !isFinite(a) || !isFinite(b)) return;\n const v0 = value(a, s.axis);\n const v1 = value(b, s.axis);\n const b0 = slotStart(vi) + (slotOf.get(s) as number) * groupWidth;\n const title = markTitle(\n s.name,\n labels[i] as string,\n percent ? b - a : raw,\n percent ? f : f,\n );\n const rect: Shape = horizontal\n ? {\n kind: 'rect',\n part: 'bar',\n x: px(Math.min(v0, v1)),\n y: px(b0),\n width: px(Math.abs(v1 - v0)),\n height: px(groupWidth),\n fill: s.color,\n rx: input.radius,\n title: titled ? title : undefined,\n item: itemOf(s, i, raw, title),\n }\n : {\n kind: 'rect',\n part: 'bar',\n x: px(b0),\n y: px(Math.min(v0, v1)),\n width: px(groupWidth),\n height: px(Math.abs(v1 - v0)),\n fill: s.color,\n rx: input.radius,\n title: titled ? title : undefined,\n item: itemOf(s, i, raw, title),\n };\n bars.push(rect);\n if (input.labels) {\n const text = f(percent ? b - a : raw);\n texts.push(\n horizontal\n ? label(px(Math.max(v0, v1) + 4), px(b0 + groupWidth / 2), text, {\n baseline: 'middle',\n })\n : label(px(b0 + groupWidth / 2), px(Math.min(v0, v1) - 4), text, {\n anchor: 'middle',\n }),\n );\n }\n });\n continue;\n }\n // Lines, areas and ranges: polylines broken at gaps unless `connectNulls`.\n const segments: { x: number; y: number; y0: number; i: number }[][] = [];\n let current: { x: number; y: number; y0: number; i: number }[] = [];\n visible.forEach((i, vi) => {\n const a = from[i];\n const b = to[i];\n if (!isFinite(b) || !isFinite(a)) {\n if (!input.connectNulls && current.length) {\n segments.push(current);\n current = [];\n }\n return;\n }\n current.push({ x: center(vi), y: px(value(b, s.axis)), y0: px(value(a, s.axis)), i });\n });\n if (current.length) segments.push(current);\n const showMarkers = s.markers ?? visible.length <= MARKER_LIMIT;\n for (const seg of segments) {\n const d = pathThrough(seg, s.curve);\n if (s.kind === 'range') {\n const lower = pathThrough(\n [...seg].reverse().map((p) => ({ x: p.x, y: p.y0 })),\n s.curve,\n );\n areas.push({\n kind: 'path',\n part: 'range',\n d: `${d}L${lower.slice(1)}Z`,\n fill: s.color,\n fillOpacity: 0.2,\n title: s.name,\n });\n continue;\n }\n if (s.kind === 'area') {\n const bottom =\n s.stack !== undefined\n ? pathThrough(\n [...seg].reverse().map((p) => ({ x: p.x, y: p.y0 })),\n s.curve,\n ).slice(1)\n : `${seg[seg.length - 1]?.x} ${left.zero}L${seg[0]?.x} ${left.zero}`;\n areas.push({\n kind: 'path',\n part: 'area',\n d: `${d}L${bottom}Z`,\n fill: s.color,\n fillOpacity: 0.25,\n });\n }\n lines.push({\n kind: 'path',\n part: 'line',\n d,\n stroke: s.color,\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n dash: s.dash,\n });\n }\n if (s.kind !== 'range')\n for (const seg of segments)\n for (const p of seg) {\n if (!showMarkers && !titled && !input.labels) continue;\n const raw = s.data[p.i] as number;\n const shownValue = percent ? (to[p.i] as number) - (from[p.i] as number) : raw;\n const title = markTitle(s.name, labels[p.i] as string, shownValue, f);\n if (showMarkers || titled)\n points.push({\n ...point(\n p.x,\n p.y,\n showMarkers ? 3 : 0.01,\n s.color,\n titled ? title : undefined,\n itemOf(s, p.i, raw, title),\n ),\n // Invisible anchors keep click and keyboard access when markers are off.\n part: showMarkers ? 'point' : 'anchor',\n });\n if (input.labels) texts.push(label(p.x, p.y - 8, f(shownValue), { anchor: 'middle' }));\n }\n }\n\n const hit: Hit = {\n plot,\n xs: horizontal ? [] : visible.map((_, vi) => center(vi)),\n rows: visible.map((i) => [\n labels[i] as string,\n ...drawn.map((s) => {\n const f = fmt(s);\n if (s.kind === 'range') {\n const lo = s.low[i];\n const hi = s.high[i];\n return `${s.name}: ${isFinite(lo) && isFinite(hi) ? `${f(lo)} – ${f(hi)}` : '—'}`;\n }\n const v = s.data[i];\n return `${s.name}: ${isFinite(v) ? f(percent ? ((stackTo.get(s)?.[i] as number) ?? 0) - ((stackFrom.get(s)?.[i] as number) ?? 0) : v) : '—'}`;\n }),\n ]),\n count,\n zoom,\n crosshair: input.crosshair ?? false,\n };\n const brush: Shape[] = [];\n if (input.brush && !horizontal) {\n const box = {\n x: plot.x,\n y: plot.y + plot.height + BRUSH_GAP,\n width: plot.width,\n height: BRUSH_HEIGHT,\n };\n const first = drawn.find((s) => s.kind !== 'range');\n const window = {\n x: px(box.x + (zoom.start / Math.max(1, count)) * box.width),\n y: box.y,\n width: px(((zoom.end - zoom.start) / Math.max(1, count)) * box.width),\n height: box.height,\n };\n brush.push({\n kind: 'rect',\n part: 'brush',\n x: box.x,\n y: box.y,\n width: box.width,\n height: box.height,\n fill: 'var(--skdx-color-surface-sunken)',\n stroke: CHART_COLORS.grid,\n });\n if (first) {\n const values = finite(first.data);\n const [lo, hi] = minMax(values);\n const step = count > 1 ? box.width / (count - 1) : 0;\n const pts = first.data.flatMap((v, i) =>\n isFinite(v)\n ? [\n {\n x: px(box.x + i * step),\n y: px(\n box.y +\n box.height -\n (hi === lo ? 0.5 : (v - lo) / (hi - lo)) * (box.height - 4) -\n 2,\n ),\n },\n ]\n : [],\n );\n const d = pathThrough(pts);\n if (pts.length > 1)\n brush.push({\n kind: 'path',\n part: 'brush-series',\n d: `${d}L${pts[pts.length - 1]?.x} ${box.y + box.height}L${pts[0]?.x} ${box.y + box.height}Z`,\n fill: first.color,\n fillOpacity: 0.3,\n });\n }\n brush.push(\n {\n kind: 'rect',\n part: 'brush-window',\n ...window,\n fill: 'var(--skdx-color-primary-500)',\n opacity: 0.15,\n stroke: CHART_COLORS.axis,\n },\n {\n kind: 'rect',\n part: 'brush-handle',\n x: px(window.x - 3),\n y: box.y + 8,\n width: 6,\n height: box.height - 16,\n fill: CHART_COLORS.axis,\n rx: 2,\n },\n {\n kind: 'rect',\n part: 'brush-handle',\n x: px(window.x + window.width - 3),\n y: box.y + 8,\n width: 6,\n height: box.height - 16,\n fill: CHART_COLORS.axis,\n rx: 2,\n },\n );\n hit.brush = { box, window };\n }\n\n return {\n ...frame,\n shapes: [\n ...shapes,\n ...areas,\n ...bars,\n ...lines,\n ...points,\n ...texts,\n ...brush,\n ...frame.shapes,\n ],\n hit,\n };\n}\n\nfunction clampZoom(zoom: Zoom | undefined, count: number): Zoom {\n if (!zoom || count < 2) return { start: 0, end: count };\n const start = Math.max(0, Math.min(count - 1, Math.floor(zoom.start)));\n const end = Math.max(start + 1, Math.min(count, Math.ceil(zoom.end)));\n return end - start < 2 && count >= 2\n ? { start: Math.min(start, count - 2), end: Math.min(start, count - 2) + 2 }\n : { start, end };\n}\n\n/** Resolves series roles and applies `transform`, `sort` and chart-level stacking. */\nfunction transform(\n input: ChartInput,\n fallback: Kind,\n format: (v: number) => string,\n): { series: Resolved[]; categories: Category[] } {\n const defaultType = (s: CartesianSeries | RangeSeries): Kind | 'range' => s.type ?? fallback;\n let categories: Category[] = input.categories ?? [];\n let series: Resolved[] = input.series.map((s, index) => {\n const kind = defaultType(s);\n const stacked = input.stacked ? true : undefined;\n const own = s.type === 'range' ? undefined : s.stack;\n const stack =\n own === false ? undefined : own === true || (own === undefined && stacked) ? `${kind}` : own;\n return {\n name: s.name,\n color: colorOf(input, index, s.color),\n axis: s.axis ?? 'left',\n hidden: isHidden(input, s.name),\n index,\n kind,\n data: s.type === 'range' ? [] : s.data,\n low: s.type === 'range' ? s.low : [],\n high: s.type === 'range' ? s.high : [],\n curve: s.curve ?? input.curve ?? 'linear',\n dash: s.type === 'range' ? undefined : s.dash,\n markers: s.type === 'range' ? undefined : s.markers,\n stack: kind === 'range' || kind === 'line' ? undefined : stack,\n };\n });\n\n if (input.transform === 'histogram') {\n const samples = series.flatMap((s) => finite(s.data));\n const [lo, hi] = input.binDomain ?? minMax(samples);\n const n = Math.max(1, samples.length);\n const bins = Math.max(1, input.bins ?? Math.ceil(Math.log2(n) + 1));\n const width = input.binWidth ?? (hi > lo ? (hi - lo) / bins : 1);\n const binCount = hi > lo ? Math.max(1, Math.ceil((hi - lo) / width - 1e-9)) : 1;\n categories = Array.from(\n { length: binCount },\n (_, i) => `${format(lo + i * width)}–${format(lo + (i + 1) * width)}`,\n );\n series = series.map((s) => {\n const counts = new Array<number>(binCount).fill(0);\n const own = finite(s.data);\n for (const v of own) {\n if (v < lo || v > hi) continue;\n const b = Math.min(binCount - 1, Math.floor((v - lo) / width));\n counts[b] = (counts[b] as number) + 1;\n }\n let running = 0;\n const data = counts.map((c) => {\n if (input.binMode === 'density') return own.length ? c / (own.length * width) : 0;\n if (input.binMode === 'cumulative') return (running += c);\n return c;\n });\n return { ...s, data };\n });\n } else if (input.transform === 'cumulative') {\n series = series.map((s) => {\n let running = 0;\n return { ...s, data: s.data.map((v) => (isFinite(v) ? (running += v) : running)) };\n });\n }\n\n if (input.sort) {\n const first = series.find((s) => !s.hidden && s.kind !== 'range') ?? series[0];\n const n = Math.max(\n categories.length,\n ...series.map((s) => Math.max(s.data.length, s.low.length)),\n );\n const order = Array.from({ length: n }, (_, i) => i).sort((a, b) => {\n const va = first?.data[a] ?? first?.high[a];\n const vb = first?.data[b] ?? first?.high[b];\n const x = isFinite(va) ? va : -Infinity;\n const y = isFinite(vb) ? vb : -Infinity;\n return input.sort === 'asc' ? x - y : y - x;\n });\n const pick = (arr: Value[]): Value[] => (arr.length ? order.map((i) => arr[i] ?? null) : arr);\n const full = Array.from({ length: n }, (_, i) => categories[i] ?? String(i + 1));\n categories = order.map((i) => full[i] as Category);\n series = series.map((s) => ({\n ...s,\n data: pick(s.data),\n low: pick(s.low),\n high: pick(s.high),\n }));\n }\n return { series, categories };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { layoutCartesian } from './cartesian.js';\nimport type { BarChartInput, Canvas } from './types.js';\n\n/** Grouped, stacked, horizontal or histogram bars; series may also be lines, areas or ranges. */\nexport const layoutBarChart = (input: BarChartInput): Canvas => layoutCartesian(input, 'bar');\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { layoutCartesian } from './cartesian.js';\nimport type { AreaChartInput, Canvas, LineChartInput } from './types.js';\n\n/** One polyline per series with a dot per value; series may also be bars, areas or ranges. */\nexport const layoutLineChart = (input: LineChartInput): Canvas => layoutCartesian(input, 'line');\n\n/** Filled (optionally stacked) areas down to zero; series may also be bars, lines or ranges. */\nexport const layoutAreaChart = (input: AreaChartInput): Canvas => layoutCartesian(input, 'area');\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { categoryValue } from './format.js';\nimport {\n axis,\n canvas,\n colorOf,\n extent,\n isHidden,\n legendTop,\n MARGIN,\n plotBox,\n size,\n stateCanvas,\n} from './frame.js';\nimport { referenceShapes } from './reference.js';\nimport { isFinite, minMax, px } from './scale.js';\nimport { frameShapes, point } from './shapes.js';\nimport type { Canvas, ScatterChartInput, Shape } from './types.js';\n\nconst isPair = (p: readonly number[]): boolean => isFinite(p[0]) && isFinite(p[1]);\n\nexport function layoutScatterChart(input: ScatterChartInput): Canvas {\n const shown = input.series.map((s, i) => ({\n ...s,\n index: i,\n color: colorOf(input, i, s.color),\n data: isHidden(input, s.name) ? [] : s.data.filter(isPair),\n }));\n const pairs = shown.flatMap((s) => s.data);\n const state = stateCanvas(input, pairs.length === 0);\n if (state) return state;\n const { width, height } = size(input);\n const plot = plotBox(width, height, {\n ...MARGIN,\n top: MARGIN.top + legendTop(input) + (input.yAxis?.label ? 12 : 0),\n bottom: MARGIN.bottom + (input.xAxis?.label ? 14 : 0),\n });\n const x = axis(\n extent(\n pairs.map((p) => p[0]),\n false,\n ),\n [plot.x, plot.x + plot.width],\n input.xAxis ?? {},\n input.format,\n );\n const y = axis(\n extent(\n pairs.map((p) => p[1]),\n false,\n ),\n [plot.y + plot.height, plot.y],\n input.yAxis ?? {},\n input.format,\n );\n const [sMin, sMax] = minMax(pairs.map((p) => p[2]));\n const [rMin, rMax] = input.sizeRange ?? [3, 18];\n // Bubble area, not radius, follows the value, so a doubled value reads as doubled.\n const radius = (s: number | undefined) =>\n !isFinite(s)\n ? 3\n : sMax === sMin\n ? (rMin + rMax) / 2\n : rMin + Math.sqrt((s - sMin) / (sMax - sMin)) * (rMax - rMin);\n const legend = input.series.map((s, i) => ({ name: s.name, color: colorOf(input, i, s.color) }));\n const c = canvas(input, width, height, legend);\n const marks: Shape[] = [];\n const trends: Shape[] = [];\n for (const s of shown) {\n const bubbles = s.data.some((p) => p.length > 2);\n for (const [vx, vy, vs] of s.data) {\n const title = `${s.name}: ${x.format(vx)}, ${y.format(vy)}${isFinite(vs) ? ` (${y.format(vs)})` : ''}`;\n const r = bubbles ? radius(vs) : 3;\n marks.push({\n ...point(px(x.scale(vx)), px(y.scale(vy)), px(r), s.color, title, {\n label: title,\n series: s.name,\n value: vy,\n }),\n part: bubbles ? 'bubble' : 'point',\n });\n }\n if (input.trendline && s.data.length >= 2) {\n const line = leastSquares(s.data.map(([a, b]) => [a, b]));\n if (line) {\n const [x0, x1] = x.domain;\n trends.push({\n kind: 'line',\n part: 'trendline',\n x1: px(x.scale(x0)),\n y1: px(y.scale(line.slope * x0 + line.intercept)),\n x2: px(x.scale(x1)),\n y2: px(y.scale(line.slope * x1 + line.intercept)),\n stroke: s.color,\n dash: '5 4',\n strokeWidth: 1.5,\n title: `${s.name} trend: r² ${line.r2.toFixed(2)}`,\n });\n }\n }\n }\n const frame = { ...c, plot, xTicks: x.ticks, yTicks: y.ticks, baseline: y.zero };\n const references = referenceShapes(input.references, {\n plot,\n x: (v) => x.scale(categoryValue(v)),\n y: (v) => y.scale(v),\n });\n return {\n ...c,\n shapes: [\n ...frameShapes(frame, { xLabel: input.xAxis?.label, yLabel: input.yAxis?.label }),\n ...references,\n ...(marks.some((m) => m.part === 'bubble')\n ? marks.map((m) => (m.kind === 'circle' ? { ...m, opacity: 0.7 } : m))\n : marks),\n ...trends,\n ...c.shapes,\n ],\n };\n}\n\n/** Ordinary least squares over `[x, y]` pairs; `undefined` when x is constant. */\nexport function leastSquares(\n pairs: [number, number][],\n): { slope: number; intercept: number; r2: number } | undefined {\n const n = pairs.length;\n const mx = pairs.reduce((s, p) => s + p[0], 0) / n;\n const my = pairs.reduce((s, p) => s + p[1], 0) / n;\n let sxx = 0;\n let sxy = 0;\n let syy = 0;\n for (const [a, b] of pairs) {\n sxx += (a - mx) ** 2;\n sxy += (a - mx) * (b - my);\n syy += (b - my) ** 2;\n }\n if (sxx === 0) return undefined;\n const slope = sxy / sxx;\n const r2 = syy === 0 ? 1 : (sxy * sxy) / (sxx * syy);\n return { slope, intercept: my - slope * mx, r2 };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { makeFormatter } from './format.js';\nimport { canvas, colorOf, isHidden, legendTop, size, stateCanvas } from './frame.js';\nimport { isFinite, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { Canvas, PieChartInput, Shape } from './types.js';\n\nconst TAU = 2 * Math.PI;\n\n/** Wedge (or ring segment when `r0 > 0`) from angle `a0` to `a1`, clockwise from 12 o'clock. */\nexport function arc(cx: number, cy: number, r: number, r0: number, a0: number, a1: number): string {\n const at = (radius: number, a: number) =>\n `${px(cx + radius * Math.sin(a))} ${px(cy - radius * Math.cos(a))}`;\n // A full circle has coincident endpoints, which an arc command cannot draw: split it in two.\n if (a1 - a0 >= TAU - 1e-9) {\n const half = a0 + TAU / 2;\n return `${arc(cx, cy, r, r0, a0, half)}${arc(cx, cy, r, r0, half, a1)}`;\n }\n const large = a1 - a0 > Math.PI ? 1 : 0;\n const outer = `M${at(r, a0)}A${r} ${r} 0 ${large} 1 ${at(r, a1)}`;\n return r0 > 0\n ? `${outer}L${at(r0, a1)}A${r0} ${r0} 0 ${large} 0 ${at(r0, a0)}Z`\n : `${outer}L${px(cx)} ${px(cy)}Z`;\n}\n\nexport function layoutPieChart(input: PieChartInput): Canvas {\n const state = stateCanvas(\n input,\n !input.data.some((d) => isFinite(d.value) && d.value > 0),\n 300,\n 300,\n );\n if (state) return state;\n const format = makeFormatter(input.format);\n const { width, height } = size(input, 300, 300);\n const top = legendTop(input);\n const start = ((input.startAngle ?? 0) * Math.PI) / 180;\n const end = ((input.endAngle ?? (input.startAngle ?? 0) + 360) * Math.PI) / 180;\n const sweep = Math.max(0, Math.min(TAU, end - start));\n // A half circle only needs half the height: centre it on the flat edge.\n const half = sweep <= Math.PI + 1e-9 && Math.abs(Math.sin(start)) > 0.99;\n const cx = width / 2;\n const r = half\n ? Math.max(0, Math.min(width / 2, height - top) - 8)\n : Math.max(0, Math.min(width, height - top) / 2 - 8);\n const cy = half\n ? start < 0 || start > Math.PI\n ? height - 8\n : top + 8\n : top + (height - top) / 2;\n const r0 = r * Math.min(0.95, Math.max(0, input.innerRadius ?? 0));\n const shown = input.data.map((d) => ({\n ...d,\n value: isFinite(d.value) && !isHidden(input, d.name) ? Math.max(0, d.value) : 0,\n }));\n const total = shown.reduce((sum, d) => sum + d.value, 0);\n let angle = start;\n const labels: Shape[] = [];\n const slices = shown.map((d, i): Shape => {\n const percent = total > 0 ? d.value / total : 0;\n const a0 = angle;\n angle += percent * sweep;\n const share = `${Math.round(percent * 100)}%`;\n if (input.labels && percent > 0.03) {\n const mid = (a0 + angle) / 2;\n const lr = (r + r0) / 2;\n labels.push(\n label(px(cx + lr * Math.sin(mid)), px(cy - lr * Math.cos(mid)), `${d.name} ${share}`, {\n part: 'slice-label',\n anchor: 'middle',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-on-accent)',\n }),\n );\n }\n const title = `${d.name}: ${format(d.value)} (${share})`;\n return {\n kind: 'path',\n part: 'slice',\n d: percent > 0 ? arc(cx, cy, r, r0, a0, angle) : '',\n fill: colorOf(input, i, d.color),\n title,\n item: percent > 0 ? { label: title, name: d.name, index: i, value: d.value } : undefined,\n };\n });\n if (input.centerLabel)\n labels.push(\n label(px(cx), px(half ? cy - 12 : cy), input.centerLabel, {\n part: 'center-label',\n anchor: 'middle',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-default)',\n weight: 'bold',\n }),\n );\n const c = canvas(\n input,\n width,\n height,\n input.data.map((d, i) => ({ name: d.name, color: colorOf(input, i, d.color) })),\n );\n return { ...c, shapes: [...slices, ...c.shapes, ...labels] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { makeFormatter } from './format.js';\nimport { CHAR, colorOf, extent, size, stateCanvas } from './frame.js';\nimport { CHART_COLORS } from './palette.js';\nimport { finite, isFinite, linearScale, pathThrough, px } from './scale.js';\nimport { label, point } from './shapes.js';\nimport type { Canvas, Shape, SparklineInput } from './types.js';\n\nconst PAD = 2;\n\n/** A small axis-less trend: an area (default), a bare line, or bars; optional extremes and last value. */\nexport function layoutSparkline(input: SparklineInput): Canvas {\n const values = finite(input.data);\n const state = stateCanvas(input, values.length === 0, 120, 32);\n if (state) return state;\n const format = makeFormatter(input.format);\n const { width, height } = size(input, 120, 32);\n const n = input.data.length;\n const first = values[0] as number;\n const last = values[values.length - 1] as number;\n const lastText = input.lastValue ? format(last) : '';\n const right = width - PAD - (lastText ? lastText.length * CHAR + 6 : 0);\n const variant = input.variant ?? 'area';\n const y = linearScale(extent(values, variant === 'bar'), [height - PAD, PAD]);\n const x = (i: number) => (n < 2 ? (PAD + right) / 2 : PAD + (i / (n - 1)) * (right - PAD));\n const color = input.trend\n ? last >= first\n ? CHART_COLORS.positive\n : CHART_COLORS.negative\n : colorOf(input, 0, input.color);\n const shapes: Shape[] = [];\n const coords = input.data.flatMap((v, i) =>\n isFinite(v) ? [{ x: px(x(i)), y: px(y(v)), v, i }] : [],\n );\n const tail = coords[coords.length - 1];\n if (variant === 'bar') {\n const slot = n > 0 ? (right - PAD) / n : 0;\n const zero = px(y(0));\n input.data.forEach((v, i) => {\n if (!isFinite(v)) return;\n const top = px(y(v));\n shapes.push({\n kind: 'rect',\n part: 'bar',\n x: px(PAD + i * slot + slot * 0.1),\n y: Math.min(top, zero),\n width: px(Math.max(1, slot * 0.8)),\n height: px(Math.max(1, Math.abs(zero - top))),\n fill: v < 0 && input.trend ? CHART_COLORS.negative : color,\n title: input.tooltip === false ? undefined : format(v),\n });\n });\n } else {\n const line = pathThrough(coords, input.curve);\n const head = coords[0];\n if (variant === 'area')\n shapes.push({\n kind: 'path',\n part: 'area',\n d:\n line && head && tail\n ? `${line}L${tail.x} ${height - PAD}L${head.x} ${height - PAD}Z`\n : '',\n fill: color,\n fillOpacity: 0.15,\n });\n shapes.push({ kind: 'path', part: 'line', d: line, stroke: color, strokeWidth: 1.5 });\n // The most recent point, drawn as a dot.\n if (tail) shapes.push(point(tail.x, tail.y, 2, color, undefined));\n }\n if (input.extremes && coords.length > 1) {\n const min = coords.reduce((a, b) => (b.v < a.v ? b : a));\n const max = coords.reduce((a, b) => (b.v > a.v ? b : a));\n shapes.push(\n { ...point(min.x, min.y, 2.5, CHART_COLORS.negative, format(min.v)), part: 'min' },\n { ...point(max.x, max.y, 2.5, CHART_COLORS.positive, format(max.v)), part: 'max' },\n );\n }\n if (lastText && tail)\n shapes.push(\n label(px(right + 4), tail.y, lastText, {\n part: 'last-value',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-default)',\n }),\n );\n return {\n width,\n height,\n tooltip: input.tooltip ?? true,\n description: input.description,\n decorative: input.decorative,\n animate: input.animate === true ? 300 : input.animate || undefined,\n responsive: input.responsive,\n shapes,\n };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { makeFormatter } from './format.js';\nimport { canvas, colorOf, isHidden, legendTop, markTitle, size, stateCanvas } from './frame.js';\nimport { CHART_COLORS } from './palette.js';\nimport { finite, isFinite, minMax, niceTicks, px } from './scale.js';\nimport { label, point } from './shapes.js';\nimport type { Canvas, RadarChartInput, Shape } from './types.js';\n\nexport function layoutRadarChart(input: RadarChartInput): Canvas {\n const state = stateCanvas(\n input,\n input.categories.length === 0 || input.series.every((s) => finite(s.data).length === 0),\n 300,\n 300,\n );\n if (state) return state;\n const format = makeFormatter(input.format);\n const { width, height } = size(input, 300, 300);\n const top = legendTop(input);\n const cx = width / 2;\n const cy = top + (height - top) / 2;\n const radius = Math.max(0, Math.min(width, height - top) / 2 - 36);\n const n = input.categories.length;\n const angle = (i: number) => -Math.PI / 2 + (i * 2 * Math.PI) / Math.max(1, n);\n const shown = input.series.filter((s) => !isHidden(input, s.name));\n // Normalized: every series is scaled to its own maximum and the rings read as percentages.\n const ticks = input.normalize\n ? [0, 25, 50, 75, 100]\n : niceTicks(0, input.max ?? Math.max(0, minMax(shown.flatMap((s) => s.data))[1]), 4);\n const max = input.max ?? (ticks[ticks.length - 1] as number);\n const seriesMax = input.series.map((s) => Math.max(0, minMax(s.data)[1]));\n const norm = (si: number, v: number) =>\n input.normalize\n ? (seriesMax[si] as number) > 0\n ? (v / (seriesMax[si] as number)) * 100\n : 0\n : v;\n const at = (i: number, value: number) => {\n const r = max > 0 ? (Math.min(value, max) / max) * radius : 0;\n return { x: px(cx + r * Math.cos(angle(i))), y: px(cy + r * Math.sin(angle(i))) };\n };\n const polygon = (value: (i: number) => number) =>\n n === 0\n ? ''\n : `M${input.categories\n .map((_, i) => {\n const p = at(i, value(i));\n return `${p.x} ${p.y}`;\n })\n .join('L')}Z`;\n\n // Concentric grid polygons, one per tick, innermost first, then a spoke per category.\n const rings = ticks.filter((t) => t > 0 && t <= max);\n const grid: Shape[] = [\n ...rings.map((t): Shape => ({\n kind: 'path',\n part: 'grid',\n d: polygon(() => t),\n stroke: CHART_COLORS.grid,\n })),\n ...input.categories.map((_, i): Shape => {\n const p = at(i, max);\n return {\n kind: 'line',\n part: 'grid',\n x1: px(cx),\n y1: px(cy),\n x2: p.x,\n y2: p.y,\n stroke: CHART_COLORS.grid,\n };\n }),\n ...rings.map((t) =>\n label(px(cx + 4), at(0, t).y, input.normalize ? `${t}%` : format(t), {\n part: 'y-label',\n baseline: 'middle',\n }),\n ),\n ...input.categories.map((text, i) => {\n const cos = Math.cos(angle(i));\n const r = radius + 14;\n return label(px(cx + r * cos), px(cy + r * Math.sin(angle(i))), text, {\n part: 'x-label',\n anchor: cos > 0.1 ? 'start' : cos < -0.1 ? 'end' : 'middle',\n baseline: 'middle',\n });\n }),\n ];\n\n const points: Shape[] = [];\n const polygons: Shape[] = [];\n input.series.forEach((s, si) => {\n if (isHidden(input, s.name)) return;\n const color = colorOf(input, si, s.color);\n const value = (i: number) => {\n const v = s.data[i];\n return isFinite(v) ? v : 0;\n };\n input.categories.forEach((category, i) => {\n const raw = s.data[i];\n if (!isFinite(raw)) return;\n const p = at(i, norm(si, raw));\n const title = markTitle(s.name, category, raw, format);\n points.push(\n point(p.x, p.y, 3, color, title, {\n label: title,\n series: s.name,\n category,\n index: i,\n value: raw,\n }),\n );\n });\n polygons.push({\n kind: 'path',\n part: 'area',\n d: polygon((i) => norm(si, value(i))),\n fill: (input.fill ?? true) ? color : undefined,\n fillOpacity: 0.25,\n stroke: color,\n strokeWidth: 2,\n });\n });\n\n const c = canvas(\n input,\n width,\n height,\n input.series.map((s, i) => ({ name: s.name, color: colorOf(input, i, s.color) })),\n );\n return { ...c, shapes: [...grid, ...polygons, ...points, ...c.shapes] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { makeFormatter } from './format.js';\nimport { canvas, colorOf, plotBox, size, stateCanvas } from './frame.js';\nimport { isFinite, minMax, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { CalendarCell, Canvas, HeatmapInput, Shape, Value } from './types.js';\n\nconst MARGIN = { top: 24, right: 8, bottom: 8, left: 64 } as const;\nconst DAY = 86_400_000;\nconst WEEKDAYS = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];\n\n/** Days as a weekday × week matrix, columns labelled where a month starts. */\nexport function calendarMatrix(cells: CalendarCell[]): {\n rows: string[];\n columns: string[];\n data: Value[][];\n /** `dates[row][column]` as an ISO day, for tooltips. */\n dates: (string | undefined)[][];\n} {\n const days = cells\n .map((c) => ({ day: Math.floor(new Date(c.date).getTime() / DAY), value: c.value }))\n .filter((c) => Number.isFinite(c.day));\n if (days.length === 0)\n return {\n rows: WEEKDAYS,\n columns: [],\n data: WEEKDAYS.map(() => []),\n dates: WEEKDAYS.map(() => []),\n };\n const [first, last] = minMax(days.map((d) => d.day));\n // Monday-based weekday: epoch day 0 (1970-01-01) was a Thursday.\n const weekday = (day: number) => (((day + 3) % 7) + 7) % 7;\n const startWeek = first - weekday(first);\n const weeks = Math.floor((last - startWeek) / 7) + 1;\n const data: Value[][] = WEEKDAYS.map(() => new Array<Value>(weeks).fill(null));\n const dates = WEEKDAYS.map(() => new Array<string | undefined>(weeks).fill(undefined));\n for (const d of days) {\n const w = Math.floor((d.day - startWeek) / 7);\n (data[weekday(d.day)] as Value[])[w] = d.value;\n (dates[weekday(d.day)] as (string | undefined)[])[w] = new Date(d.day * DAY)\n .toISOString()\n .slice(0, 10);\n }\n const months = new Intl.DateTimeFormat(undefined, { month: 'short' });\n let lastMonth = -1;\n const columns = Array.from({ length: weeks }, (_, w) => {\n const date = new Date((startWeek + w * 7 + 6) * DAY);\n const m = date.getUTCMonth();\n if (m === lastMonth) return '';\n lastMonth = m;\n return months.format(date);\n });\n return { rows: WEEKDAYS, columns, data, dates };\n}\n\nexport function layoutHeatmap(input: HeatmapInput): Canvas {\n const cal = input.calendar ? calendarMatrix(input.calendar) : undefined;\n const rows = cal?.rows ?? input.rows ?? [];\n const columns = cal?.columns ?? input.columns ?? [];\n const data = cal?.data ?? input.data ?? [];\n const all = data.flat();\n const state = stateCanvas(\n input,\n rows.length === 0 || columns.length === 0 || !all.some(isFinite),\n );\n if (state) return state;\n const format = makeFormatter(input.format);\n const { width, height } = size(input);\n const plot = plotBox(width, height, cal ? { ...MARGIN, left: 40 } : MARGIN);\n const cellW = plot.width / Math.max(1, columns.length);\n const cellH = plot.height / Math.max(1, rows.length);\n const [min, max] = input.domain ?? minMax(all);\n const color = colorOf(input, 0, input.color);\n const negative = input.negativeColor ?? 'var(--skdx-color-danger-500)';\n const span = Math.max(Math.abs(min), Math.abs(max));\n // Diverging: opacity is the distance from zero, color the sign.\n // Otherwise 0.15..1, the value's place between the smallest and largest cell.\n const clamp01 = (v: number) => Math.max(0, Math.min(1, v));\n const opacity = (v: number) =>\n input.diverging\n ? span === 0\n ? 1\n : px(0.15 + 0.85 * clamp01(Math.abs(v) / span))\n : max === min\n ? 1\n : px(0.15 + 0.85 * clamp01((v - min) / (max - min)));\n const cells: Shape[] = [];\n const texts: Shape[] = [];\n const gap = cal ? 1 : 0;\n rows.forEach((row, ri) => {\n columns.forEach((column, ci) => {\n const value = data[ri]?.[ci];\n if (!isFinite(value)) return;\n const where = cal ? (cal.dates[ri]?.[ci] ?? row) : `${row}, ${column}`;\n const title = `${where}: ${format(value)}`;\n const x = px(plot.x + ci * cellW + gap);\n const y = px(plot.y + ri * cellH + gap);\n cells.push({\n kind: 'rect',\n part: 'cell',\n x,\n y,\n width: px(Math.max(0, cellW - 2 * gap)),\n height: px(Math.max(0, cellH - 2 * gap)),\n fill: input.diverging && value < 0 ? negative : color,\n opacity: opacity(value),\n rx: cal ? 2 : undefined,\n title,\n item: { label: title, category: column, name: row, index: ci, value },\n });\n if (input.labels && cellW > 24 && cellH > 12)\n texts.push(\n label(px(plot.x + (ci + 0.5) * cellW), px(plot.y + (ri + 0.5) * cellH), format(value), {\n part: 'cell-label',\n anchor: 'middle',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-default)',\n }),\n );\n });\n });\n const c = canvas(input, width, height);\n return {\n ...c,\n shapes: [\n ...rows.map((text, i) =>\n label(plot.x - 8, px(plot.y + (i + 0.5) * cellH), text, {\n part: 'y-label',\n anchor: 'end',\n baseline: 'middle',\n }),\n ),\n ...columns.flatMap((text, i) =>\n text\n ? [\n label(px(plot.x + (i + 0.5) * cellW), plot.y - 8, text, {\n part: 'x-label',\n anchor: cal ? 'start' : 'middle',\n }),\n ]\n : [],\n ),\n ...cells,\n ...texts,\n ...c.shapes,\n ],\n };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { makeFormatter } from './format.js';\nimport { canvas, colorOf, legendTop, size, stateCanvas } from './frame.js';\nimport { isFinite, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { Canvas, FunnelChartInput, Shape } from './types.js';\n\nconst PAD = 8;\nconst GAP = 4;\n\n/**\n * Stages narrowing with their value (conversion), or a pyramid widening toward the end\n * (shares of a whole). Vertical by default, horizontal when asked.\n */\nexport function layoutFunnelChart(input: FunnelChartInput): Canvas {\n const pyramid = input.variant === 'pyramid';\n // A pyramid widens toward its base: smallest stage first, shares of the total instead of conversion.\n const data = input.data\n .filter((d) => isFinite(d.value))\n .sort((a, b) => (pyramid ? a.value - b.value : 0));\n const state = stateCanvas(input, data.length === 0, 400, 300);\n if (state) return state;\n const format = makeFormatter(input.format);\n const { width, height } = size(input, 400, 300);\n const n = data.length;\n const horizontal = input.orientation === 'horizontal';\n const max = Math.max(0, ...data.map((d) => d.value));\n const total = data.reduce((s, d) => s + Math.max(0, d.value), 0);\n const first = data[0]?.value ?? 0;\n const offset = legendTop(input);\n // Along: the axis stages are stacked on; across: the axis a stage's width is measured on.\n const along = horizontal ? width : height - offset;\n const across = horizontal ? height - offset : width;\n const full = Math.max(0, across - 2 * PAD);\n const stageLen = n === 0 ? 0 : (along - 2 * PAD) / n;\n const widthOf = (value: number) => (max > 0 ? (Math.max(0, value) / max) * full : 0);\n const legend = data.map((d, i) => ({ name: d.name, color: colorOf(input, i, d.color) }));\n const mid = horizontal ? offset + (height - offset) / 2 : width / 2;\n const stages = data.flatMap((d, i): Shape[] => {\n const near = widthOf(d.value);\n const far = widthOf(data[i + 1]?.value ?? d.value);\n const p0 = PAD + i * stageLen + (horizontal ? 0 : offset);\n const p1 = p0 + stageLen - GAP;\n const percent = pyramid ? (total > 0 ? d.value / total : 0) : first > 0 ? d.value / first : 0;\n const previous = data[i - 1]?.value;\n const drop =\n !pyramid && previous !== undefined && previous > 0\n ? ` · −${Math.round((1 - d.value / previous) * 100)}% from ${data[i - 1]?.name}`\n : '';\n const title = `${d.name}: ${format(d.value)} (${Math.round(percent * 100)}%)${drop}`;\n const d0 = horizontal\n ? `M${px(p0)} ${px(mid - near / 2)}L${px(p0)} ${px(mid + near / 2)}L${px(p1)} ${px(mid + far / 2)}L${px(p1)} ${px(mid - far / 2)}Z`\n : `M${px(mid - near / 2)} ${px(p0)}L${px(mid + near / 2)} ${px(p0)}L${px(mid + far / 2)} ${px(p1)}L${px(mid - far / 2)} ${px(p1)}Z`;\n return [\n {\n kind: 'path',\n part: 'stage',\n d: d0,\n fill: colorOf(input, i, d.color),\n title,\n item: { label: title, name: d.name, index: i, value: d.value },\n },\n label(\n px(horizontal ? (p0 + p1) / 2 : mid),\n px(horizontal ? mid : (p0 + p1) / 2),\n `${d.name} · ${format(d.value)}`,\n {\n part: 'stage-label',\n anchor: 'middle',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-on-accent)',\n },\n ),\n ];\n });\n const c = canvas(input, width, height, legend);\n return { ...c, shapes: [...stages, ...c.shapes] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { makeFormatter } from './format.js';\nimport { canvas, colorOf, isHidden, legendTop, size, stateCanvas } from './frame.js';\nimport { CHART_COLORS, variantColor } from './palette.js';\nimport { arc } from './pie.js';\nimport { isFinite, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { Canvas, RadialBarInput, Shape } from './types.js';\n\nconst rad = (deg: number) => (deg * Math.PI) / 180;\n\n/**\n * Concentric arcs, one per datum, each a share of `max`: KPI completion, utilization,\n * quota attainment. `bands` and `target` turn it into a gauge; `startAngle`/`endAngle` open it.\n */\nexport function layoutRadialBar(input: RadialBarInput): Canvas {\n const data = input.data.filter((d) => isFinite(d.value));\n const state = stateCanvas(input, data.length === 0, 300, 300);\n if (state) return state;\n const format = makeFormatter(input.format);\n const { width, height } = size(input, 300, 300);\n const top = legendTop(input);\n const cx = width / 2;\n const cy = top + (height - top) / 2;\n const outer = Math.max(0, Math.min(width, height - top) / 2 - (input.bands ? 20 : 8));\n const inner = outer * Math.min(0.95, Math.max(0, input.innerRadius ?? 0.3));\n const start = rad(input.startAngle ?? 0);\n const end = rad(input.endAngle ?? (input.startAngle ?? 0) + 360);\n const sweep = Math.max(0, Math.min(2 * Math.PI, end - start));\n const max = input.max ?? Math.max(0, ...data.map((d) => d.value));\n const n = data.length;\n const gap = Math.max(0, input.gap ?? 0.25);\n const thickness = n === 0 ? 0 : (outer - inner) / (n + gap * (n - 1));\n const rounded = input.rounded ?? true;\n const ratio = (v: number) => (max > 0 ? Math.max(0, Math.min(1, v / max)) : 0);\n const shapes: Shape[] = [];\n const legend = data.map((d, i) => ({ name: d.name, color: colorOf(input, i, d.color) }));\n\n // Threshold sectors outside the arcs, e.g. poor / fair / good.\n for (const b of input.bands ?? []) {\n const a0 = start + ratio(b.from) * sweep;\n const a1 = start + ratio(b.to) * sweep;\n if (a1 <= a0) continue;\n shapes.push({\n kind: 'path',\n part: 'band',\n d: arc(cx, cy, outer + 14, outer + 6, a0, a1),\n fill: variantColor(b.variant),\n opacity: 0.6,\n title: `${format(b.from)} – ${format(b.to)}`,\n });\n }\n\n data.forEach((d, i) => {\n if (isHidden(input, d.name)) return;\n const r1 = outer - i * thickness * (1 + gap);\n const r0 = r1 - thickness;\n const color = colorOf(input, i, d.color);\n const a1 = start + ratio(d.value) * sweep;\n const title = `${d.name}: ${format(d.value)} (${Math.round(ratio(d.value) * 100)}%)`;\n if (input.track ?? true)\n shapes.push({\n kind: 'path',\n part: 'track',\n d: arc(cx, cy, r1, r0, start, start + sweep),\n fill: CHART_COLORS.grid,\n opacity: 0.6,\n });\n if (a1 > start) {\n shapes.push({\n kind: 'path',\n part: 'bar',\n d: arc(cx, cy, r1, r0, start, a1),\n fill: color,\n title,\n item: { label: title, name: d.name, index: i, value: d.value },\n });\n if (rounded && sweep < 2 * Math.PI - 1e-9) {\n const rm = (r0 + r1) / 2;\n for (const a of [start, a1])\n shapes.push({\n kind: 'circle',\n part: 'bar-cap',\n cx: px(cx + rm * Math.sin(a)),\n cy: px(cy - rm * Math.cos(a)),\n r: px(thickness / 2),\n fill: color,\n });\n }\n }\n if (input.labels) {\n const rm = (r0 + r1) / 2;\n shapes.push(\n label(\n px(cx + rm * Math.sin(start) - 6 * Math.cos(start)),\n px(cy - rm * Math.cos(start) - 6 * Math.sin(start)),\n `${d.name} ${format(d.value)}`,\n { part: 'bar-label', anchor: Math.cos(start) >= 0 ? 'end' : 'start', baseline: 'middle' },\n ),\n );\n }\n });\n\n if (input.target !== undefined && isFinite(input.target)) {\n const a = start + ratio(input.target) * sweep;\n const rIn = outer - n * thickness * (1 + gap) + thickness * gap;\n shapes.push({\n kind: 'line',\n part: 'target',\n x1: px(cx + rIn * Math.sin(a)),\n y1: px(cy - rIn * Math.cos(a)),\n x2: px(cx + (outer + 4) * Math.sin(a)),\n y2: px(cy - (outer + 4) * Math.cos(a)),\n stroke: 'var(--skdx-color-text-default)',\n strokeWidth: 2,\n title: `Target: ${format(input.target)}`,\n });\n }\n if (input.centerLabel)\n shapes.push(\n label(px(cx), px(cy), input.centerLabel, {\n part: 'center-label',\n anchor: 'middle',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-default)',\n weight: 'bold',\n }),\n );\n const c = canvas(input, width, height, legend);\n return { ...c, shapes: [...shapes, ...c.shapes] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { CHAR, tooltipShapes } from './frame.js';\nimport { CHART_COLORS } from './palette.js';\nimport { px } from './scale.js';\nimport type { Canvas, ChartItem, Hit, Shape, Zoom } from './types.js';\n\n/*\n * Pure interaction helpers shared by every framework root: the roots hold the state\n * (tooltip shapes, focused mark, hidden series, zoom) and call these on events, so\n * hit-testing, keyboard stepping and zoom math cannot drift between frameworks.\n */\n\n/** Converts a client position into viewBox units of the svg. */\nexport function toViewBox(\n svg: Element,\n clientX: number,\n clientY: number,\n width: number,\n height: number,\n): { x: number; y: number } {\n const r = svg.getBoundingClientRect();\n return {\n x: r.width ? ((clientX - r.left) * width) / r.width : clientX,\n y: r.height ? ((clientY - r.top) * height) / r.height : clientY,\n };\n}\n\nconst inside = (b: { x: number; y: number; width: number; height: number }, x: number, y: number) =>\n x >= b.x && x <= b.x + b.width && y >= b.y && y <= b.y + b.height;\n\n/** Index of the visible category whose center is nearest to viewBox `x`. */\nfunction nearestIndex(hit: Hit, x: number): number {\n let best = 0;\n let dist = Infinity;\n hit.xs.forEach((cx, i) => {\n const d = Math.abs(cx - x);\n if (d < dist) {\n dist = d;\n best = i;\n }\n });\n return best;\n}\n\n/** The crosshair line and shared tooltip at the category nearest to `x`, or none outside the plot. */\nexport function crosshairShapes(layout: Canvas, x: number, y: number): Shape[] {\n const hit = layout.hit;\n if (!hit || !hit.crosshair || hit.xs.length === 0 || !inside(hit.plot, x, y)) return [];\n const i = nearestIndex(hit, x);\n const cx = hit.xs[i] as number;\n return [\n {\n kind: 'line',\n part: 'crosshair',\n x1: cx,\n x2: cx,\n y1: hit.plot.y,\n y2: hit.plot.y + hit.plot.height,\n stroke: CHART_COLORS.axis,\n dash: '3 3',\n },\n ...tooltipShapes(cx, y, hit.rows[i] ?? [], layout.width, layout.height),\n ];\n}\n\n/**\n * Tooltip shapes for the mark under the pointer, or none. Reads the mark's\n * `<title>` and converts the pointer position into viewBox units.\n */\nexport function hoverTooltip(\n target: EventTarget | null,\n svg: Element,\n clientX: number,\n clientY: number,\n width: number,\n height: number,\n): Shape[] {\n const mark = (target as Element | null)?.closest?.('[data-skdx-part]');\n const title =\n mark && Array.from(mark.children).find((c) => c.tagName.toLowerCase() === 'title')?.textContent;\n if (!title) return [];\n const { x, y } = toViewBox(svg, clientX, clientY, width, height);\n return tooltipShapes(x, y, title, width, height);\n}\n\n/** What to draw for a pointer at the given position: the crosshair when on, else the hovered mark's tooltip. */\nexport function pointerShapes(\n layout: Canvas,\n target: EventTarget | null,\n svg: Element,\n clientX: number,\n clientY: number,\n): Shape[] {\n if (!layout.tooltip) return [];\n if (layout.hit?.crosshair) {\n const { x, y } = toViewBox(svg, clientX, clientY, layout.width, layout.height);\n const cross = crosshairShapes(layout, x, y);\n if (cross.length > 0) return cross;\n }\n return hoverTooltip(target, svg, clientX, clientY, layout.width, layout.height);\n}\n\n/** The shape index and item of the mark an event landed on, if it stands for something. */\nexport function itemAt(\n layout: Canvas,\n target: EventTarget | null,\n): { index: number; item: ChartItem } | undefined {\n const mark = (target as Element | null)?.closest?.('[data-skdx-i]');\n const i = Number(mark?.getAttribute('data-skdx-i'));\n const item = Number.isInteger(i) ? layout.shapes[i]?.item : undefined;\n return item ? { index: i, item } : undefined;\n}\n\n/** Indexes of the shapes a keyboard user can land on, in drawing order. */\nexport const focusTargets = (layout: Canvas): number[] =>\n layout.shapes.flatMap((s, i) => (s.item && !s.item.legend ? [i] : []));\n\n/** A representative point of a shape, where its tooltip is anchored. */\nexport function anchorOf(s: Shape): { x: number; y: number } {\n switch (s.kind) {\n case 'rect':\n return { x: s.x + s.width / 2, y: s.y };\n case 'circle':\n return { x: s.cx, y: s.cy - s.r };\n case 'line':\n return { x: (s.x1 + s.x2) / 2, y: Math.min(s.y1, s.y2) };\n case 'text':\n return { x: s.x, y: s.y };\n case 'path': {\n const m = /M\\s*(-?[\\d.]+)[ ,](-?[\\d.]+)/.exec(s.d);\n return m ? { x: Number(m[1]), y: Number(m[2]) } : { x: 0, y: 0 };\n }\n }\n}\n\n/** The focus ring around a shape plus its tooltip, for keyboard users. */\nexport function focusShapes(layout: Canvas, index: number | null): Shape[] {\n const s = index === null ? undefined : layout.shapes[index];\n if (!s) return [];\n const ring = CHART_COLORS.focus;\n let outline: Shape;\n switch (s.kind) {\n case 'rect':\n outline = {\n kind: 'rect',\n part: 'focus',\n x: s.x - 2,\n y: s.y - 2,\n width: s.width + 4,\n height: s.height + 4,\n fill: 'none',\n stroke: ring,\n rx: 2,\n };\n break;\n case 'circle':\n outline = {\n kind: 'circle',\n part: 'focus',\n cx: s.cx,\n cy: s.cy,\n r: s.r + 3,\n fill: 'none',\n stroke: ring,\n };\n break;\n case 'line':\n outline = {\n kind: 'line',\n part: 'focus',\n x1: s.x1,\n y1: s.y1,\n x2: s.x2,\n y2: s.y2,\n stroke: ring,\n strokeWidth: 4,\n };\n break;\n case 'text':\n outline = {\n kind: 'rect',\n part: 'focus',\n x: s.x - 2,\n y: s.y - 8,\n width: s.text.length * CHAR + 4,\n height: 16,\n fill: 'none',\n stroke: ring,\n rx: 2,\n };\n break;\n case 'path':\n outline = { kind: 'path', part: 'focus', d: s.d, stroke: ring, strokeWidth: 2, fill: 'none' };\n break;\n }\n const { x, y } = anchorOf(s);\n const text = s.item?.label ?? s.title ?? '';\n return [outline, ...(text ? tooltipShapes(px(x), px(y), text, layout.width, layout.height) : [])];\n}\n\n/**\n * The mark to focus after a key press: arrows step, Home/End jump, Escape clears (`null`);\n * `undefined` means the key was not handled and should propagate.\n */\nexport function nextFocus(\n layout: Canvas,\n current: number | null,\n key: string,\n): number | null | undefined {\n const targets = focusTargets(layout);\n if (targets.length === 0) return undefined;\n const at = current === null ? -1 : targets.indexOf(current);\n switch (key) {\n case 'ArrowRight':\n case 'ArrowDown':\n return targets[Math.min(targets.length - 1, at + 1)];\n case 'ArrowLeft':\n case 'ArrowUp':\n return targets[Math.max(0, at <= 0 ? 0 : at - 1)];\n case 'Home':\n return targets[0];\n case 'End':\n return targets[targets.length - 1];\n case 'Escape':\n return null;\n default:\n return undefined;\n }\n}\n\nconst MIN_WINDOW = 2;\n\nconst clampZoom = (start: number, span: number, count: number): Zoom => {\n const window = Math.max(MIN_WINDOW, Math.min(count, Math.round(span)));\n const s = Math.max(0, Math.min(count - window, Math.round(start)));\n return { start: s, end: s + window };\n};\n\n/** Whether the zoom shows everything. */\nexport const isUnzoomed = (zoom: Zoom | undefined, count: number): boolean =>\n !zoom || (zoom.start <= 0 && zoom.end >= count);\n\n/** The window after a wheel step at viewBox `x`: scrolling up narrows around the pointer, down widens. */\nexport function zoomWheel(hit: Hit, deltaY: number, x: number): Zoom | undefined {\n if (hit.count <= MIN_WINDOW || !hit.plot.width) return undefined;\n const { start, end } = hit.zoom;\n const window = end - start;\n const factor = deltaY > 0 ? 1.25 : 0.8;\n const next = Math.max(MIN_WINDOW, Math.min(hit.count, Math.round(window * factor)));\n if (next === window)\n return deltaY > 0 && !isUnzoomed(hit.zoom, hit.count)\n ? clampZoom(start, next, hit.count)\n : undefined;\n const f = Math.max(0, Math.min(1, (x - hit.plot.x) / hit.plot.width));\n const anchor = start + f * window;\n return clampZoom(anchor - f * next, next, hit.count);\n}\n\n/**\n * The window after a pinch: `ratio` is the current finger distance over the distance when the\n * pinch began (`> 1` narrows the window), anchored at viewBox `x`.\n */\nexport function zoomPinch(hit: Hit, from: Zoom, ratio: number, x: number): Zoom {\n const window = from.end - from.start;\n const next = Math.max(\n MIN_WINDOW,\n Math.min(hit.count, Math.round(window / Math.max(0.05, ratio))),\n );\n const f = Math.max(0, Math.min(1, (x - hit.plot.x) / Math.max(1, hit.plot.width)));\n return clampZoom(from.start + f * window - f * next, next, hit.count);\n}\n\n/** The window after dragging the plot by `dx` viewBox pixels from where `from` was set. */\nexport function zoomPan(hit: Hit, from: Zoom, dx: number): Zoom {\n const window = from.end - from.start;\n const perCategory = hit.plot.width / Math.max(1, window);\n return clampZoom(from.start - dx / perCategory, window, hit.count);\n}\n\nexport type BrushGrab = 'move' | 'left' | 'right';\n\n/**\n * What a pointer-down at viewBox (x, y) grabs in the range strip: a handle, the window,\n * or (outside the window) a window re-centred there. `undefined` outside the strip.\n */\nexport function brushGrab(\n hit: Hit,\n x: number,\n y: number,\n): { grab: BrushGrab; zoom: Zoom } | undefined {\n const b = hit.brush;\n if (!b || !inside(b.box, x, y)) return undefined;\n const w = b.window;\n if (Math.abs(x - w.x) <= 6) return { grab: 'left', zoom: hit.zoom };\n if (Math.abs(x - (w.x + w.width)) <= 6) return { grab: 'right', zoom: hit.zoom };\n if (x > w.x && x < w.x + w.width) return { grab: 'move', zoom: hit.zoom };\n const window = hit.zoom.end - hit.zoom.start;\n const at = ((x - b.box.x) / Math.max(1, b.box.width)) * hit.count;\n return { grab: 'move', zoom: clampZoom(at - window / 2, window, hit.count) };\n}\n\n/** The window after dragging a brush grab by `dx` viewBox pixels. */\nexport function brushDrag(hit: Hit, grab: BrushGrab, from: Zoom, dx: number): Zoom {\n const b = hit.brush;\n if (!b) return from;\n const categories = (dx / Math.max(1, b.box.width)) * hit.count;\n if (grab === 'move') return clampZoom(from.start + categories, from.end - from.start, hit.count);\n if (grab === 'left') {\n const start = Math.max(0, Math.min(from.end - MIN_WINDOW, Math.round(from.start + categories)));\n return { start, end: from.end };\n }\n const end = Math.min(\n hit.count,\n Math.max(from.start + MIN_WINDOW, Math.round(from.end + categories)),\n );\n return { start: from.start, end };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { CHART_COLORS } from './palette.js';\nimport type { Canvas, Shape } from './types.js';\n\nconst esc = (s: string) => s.replace(/&/g, '&').replace(/</g, '<').replace(/\"/g, '"');\n\nconst attrs = (pairs: [string, string | number | undefined][]) =>\n pairs\n .filter(([, v]) => v !== undefined && v !== '')\n .map(([k, v]) => ` ${k}=\"${esc(String(v))}\"`)\n .join('');\n\n/** One shape as SVG markup. Shared by the export and usable for server rendering. */\nexport function shapeMarkup(s: Shape): string {\n const title = s.title ? `<title>${esc(s.title)}</title>` : '';\n const part: [string, string] = ['data-skdx-part', s.part];\n switch (s.kind) {\n case 'path':\n return `<path${attrs([part, ['d', s.d], ['fill', s.fill ?? 'none'], ['stroke', s.stroke], ['stroke-width', s.strokeWidth], ['stroke-linecap', s.strokeLinecap], ['stroke-linejoin', s.strokeLinejoin], ['stroke-dasharray', s.dash], ['opacity', s.opacity], ['fill-opacity', s.fillOpacity]])}>${title}</path>`;\n case 'rect':\n return `<rect${attrs([part, ['x', s.x], ['y', s.y], ['width', s.width], ['height', s.height], ['rx', s.rx], ['fill', s.fill], ['stroke', s.stroke], ['fill-opacity', s.opacity]])}>${title}</rect>`;\n case 'line':\n return `<line${attrs([part, ['x1', s.x1], ['y1', s.y1], ['x2', s.x2], ['y2', s.y2], ['stroke', s.stroke], ['stroke-width', s.strokeWidth], ['stroke-dasharray', s.dash]])}>${title}</line>`;\n case 'circle':\n return `<circle${attrs([part, ['cx', s.cx], ['cy', s.cy], ['r', s.r], ['fill', s.fill], ['stroke', s.stroke]])}>${title}</circle>`;\n case 'text':\n return `<text${attrs([part, ['x', s.x], ['y', s.y], ['text-anchor', s.anchor], ['dominant-baseline', s.baseline], ['fill', s.fill], ['font-weight', s.weight]])}>${esc(s.text)}</text>`;\n }\n}\n\n/**\n * A standalone SVG document of a layout, for download or server rendering. Colors stay as\n * `var(--skdx-…)` references unless `resolve` maps them to concrete values, e.g. from\n * `getComputedStyle(document.documentElement).getPropertyValue(name)`.\n */\nexport function svgMarkup(\n layout: Canvas,\n label: string,\n resolve?: (cssVariable: string) => string,\n): string {\n let body = layout.shapes.map(shapeMarkup).join('');\n if (resolve)\n body = body.replace(/var\\((--[\\w-]+)\\)/g, (m, name: string) => resolve(name).trim() || m);\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${layout.width} ${layout.height}\" width=\"${layout.width}\" height=\"${layout.height}\" role=\"img\" aria-label=\"${esc(label)}\" font-family=\"${esc(CHART_COLORS.fontFamily)}\" font-size=\"${esc(CHART_COLORS.fontSize)}\"><title>${esc(label)}</title>${body}</svg>`;\n}\n\n/**\n * Rasterizes SVG markup (from `svgMarkup`, with tokens resolved) to a PNG blob at `scale` device\n * pixels per unit. Browser only: needs `Image`, `document` and a canvas.\n */\nexport function svgToPng(\n markup: string,\n width: number,\n height: number,\n scale = 2,\n background?: string,\n): Promise<Blob> {\n return new Promise((resolve, reject) => {\n const url = URL.createObjectURL(new Blob([markup], { type: 'image/svg+xml;charset=utf-8' }));\n const img = new Image();\n img.onload = () => {\n URL.revokeObjectURL(url);\n const canvas = document.createElement('canvas');\n canvas.width = Math.round(width * scale);\n canvas.height = Math.round(height * scale);\n const ctx = canvas.getContext('2d');\n if (!ctx) return reject(new Error('canvas 2d context unavailable'));\n if (background) {\n ctx.fillStyle = background;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n }\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n canvas.toBlob(\n (blob) => (blob ? resolve(blob) : reject(new Error('toBlob failed'))),\n 'image/png',\n );\n };\n img.onerror = () => {\n URL.revokeObjectURL(url);\n reject(new Error('svg could not be decoded'));\n };\n img.src = url;\n });\n}\n\n/** RFC 4180 CSV of rows, for \"download data\" and clipboard copy. */\nexport function csv(rows: (string | number | null | undefined)[][]): string {\n const cell = (v: string | number | null | undefined) => {\n const s = v === null || v === undefined ? '' : String(v);\n return /[\",\\n\\r]/.test(s) ? `\"${s.replace(/\"/g, '\"\"')}\"` : s;\n };\n return rows.map((r) => r.map(cell).join(',')).join('\\r\\n');\n}\n\n/** Series and categories as CSV rows: a header of series names, one row per category. */\nexport function seriesCsv(\n series: { name: string; data: (number | null)[] }[],\n categories: (string | number | Date)[] = [],\n): string {\n const n = Math.max(categories.length, ...series.map((s) => s.data.length));\n const rows: (string | number | null | undefined)[][] = [['', ...series.map((s) => s.name)]];\n for (let i = 0; i < n; i++) {\n const c = categories[i];\n rows.push([\n c instanceof Date ? c.toISOString() : (c ?? i + 1),\n ...series.map((s) => s.data[i]),\n ]);\n }\n return csv(rows);\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport type { Canvas } from './types.js';\n\n/** Above this many shapes animation switches itself off; the transitions would cost more than they explain. */\nexport const ANIMATION_LIMIT = 1500;\n\nconst MARKS =\n '[data-skdx-part]:not([data-skdx-part^=\"tooltip\"]):not([data-skdx-part=\"focus\"]):not([data-skdx-part=\"crosshair\"])';\n\n/**\n * The static stylesheet every root ships: marks fade in on mount and their geometry transitions on\n * change, both over `--skdx-chart-duration`, which is `0ms` (nothing moves) unless the root sets it\n * from `animationDuration`. Tooltips, focus rings and the crosshair are excluded so interaction\n * stays immediate; `prefers-reduced-motion` turns everything off. Geometry transitions rely on\n * SVG 2 presentation attributes as CSS properties, which evergreen browsers support.\n */\nexport const ANIMATION_CSS = `@keyframes skdx-in{from{opacity:0}to{opacity:1}}${MARKS}{animation:skdx-in var(--skdx-chart-duration,0ms) ease-out;transition:${[\n 'x',\n 'y',\n 'width',\n 'height',\n 'cx',\n 'cy',\n 'r',\n 'opacity',\n 'fill-opacity',\n 'd',\n]\n .map((p) => `${p} var(--skdx-chart-duration,0ms) ease-out`)\n .join(',')}}@media (prefers-reduced-motion:reduce){${MARKS}{animation:none;transition:none}}`;\n\n/** The `--skdx-chart-duration` value for a layout, e.g. `300ms`, or `undefined` when it must not animate. */\nexport function animationDuration(layout: Canvas): string | undefined {\n const ms = layout.animate;\n return ms && layout.shapes.length <= ANIMATION_LIMIT ? `${ms}ms` : undefined;\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { makeFormatter } from './format.js';\nimport { canvas, colorOf, legendTop, plotBox, size, stateCanvas } from './frame.js';\nimport { isFinite, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { Canvas, SankeyInput, Shape } from './types.js';\n\nconst NODE_WIDTH = 16;\nconst NODE_PAD = 8;\n\ninterface Node {\n name: string;\n depth: number;\n value: number;\n color: string;\n x: number;\n y: number;\n height: number;\n /** Running offsets for the ribbons leaving and entering. */\n outY: number;\n inY: number;\n}\n\nexport function layoutSankey(input: SankeyInput): Canvas {\n const usable = input.links.filter(\n (l) => isFinite(l.value) && l.value > 0 && l.source !== l.target,\n );\n const state = stateCanvas(input, usable.length === 0);\n if (state) return state;\n const formatValue = makeFormatter(input.format);\n const { width, height } = size(input);\n const plot = plotBox(width, height, { top: 8 + legendTop(input), right: 96, bottom: 8, left: 8 });\n const nodes = new Map<string, Node>();\n const node = (name: string) => {\n let n = nodes.get(name);\n if (!n) {\n n = {\n name,\n depth: 0,\n value: 0,\n color: colorOf(input, nodes.size),\n x: 0,\n y: 0,\n height: 0,\n outY: 0,\n inY: 0,\n };\n nodes.set(name, n);\n }\n return n;\n };\n const links = dropBackEdges(usable);\n for (const l of links) {\n node(l.source);\n node(l.target);\n }\n // Depth = longest path from a source; the graph is acyclic after dropBackEdges.\n for (let pass = 0, changed = true; changed && pass <= nodes.size; pass++) {\n changed = false;\n for (const l of links) {\n const d = node(l.source).depth + 1;\n if (d > node(l.target).depth) {\n node(l.target).depth = d;\n changed = true;\n }\n }\n }\n const outSum = new Map<string, number>();\n const inSum = new Map<string, number>();\n for (const l of links) {\n outSum.set(l.source, (outSum.get(l.source) ?? 0) + l.value);\n inSum.set(l.target, (inSum.get(l.target) ?? 0) + l.value);\n }\n for (const n of nodes.values())\n n.value = Math.max(outSum.get(n.name) ?? 0, inSum.get(n.name) ?? 0);\n\n const columns = new Map<number, Node[]>();\n for (const n of nodes.values()) columns.set(n.depth, [...(columns.get(n.depth) ?? []), n]);\n const depths = Math.max(0, ...columns.keys());\n const scale = Math.min(\n ...[...columns.values()].map(\n (col) => (plot.height - NODE_PAD * (col.length - 1)) / col.reduce((s, n) => s + n.value, 0),\n ),\n );\n for (const [depth, col] of columns) {\n let y = plot.y;\n for (const n of col) {\n n.x = plot.x + (depths === 0 ? 0 : (depth * (plot.width - NODE_WIDTH)) / depths);\n n.y = y;\n n.height = n.value * scale;\n n.outY = n.inY = y;\n y += n.height + NODE_PAD;\n }\n }\n\n const shapes: Shape[] = [];\n for (const l of links) {\n const s = node(l.source);\n const t = node(l.target);\n const h = l.value * scale;\n const x0 = s.x + NODE_WIDTH;\n const x1 = t.x;\n const mx = (x0 + x1) / 2;\n const sy = s.outY;\n const ty = t.inY;\n s.outY += h;\n t.inY += h;\n shapes.push({\n kind: 'path',\n part: 'link',\n d: `M${px(x0)} ${px(sy)}C${px(mx)} ${px(sy)} ${px(mx)} ${px(ty)} ${px(x1)} ${px(ty)}L${px(x1)} ${px(ty + h)}C${px(mx)} ${px(ty + h)} ${px(mx)} ${px(sy + h)} ${px(x0)} ${px(sy + h)}Z`,\n fill: s.color,\n opacity: 0.4,\n title: `${l.source} → ${l.target}: ${formatValue(l.value)}`,\n item: {\n label: `${l.source} → ${l.target}: ${formatValue(l.value)}`,\n name: l.source,\n category: l.target,\n value: l.value,\n },\n });\n }\n for (const n of nodes.values()) {\n shapes.push({\n kind: 'rect',\n part: 'node',\n x: px(n.x),\n y: px(n.y),\n width: NODE_WIDTH,\n height: px(n.height),\n fill: n.color,\n title: `${n.name}: ${formatValue(n.value)}`,\n item: { label: `${n.name}: ${formatValue(n.value)}`, name: n.name, value: n.value },\n });\n const last = n.depth === depths;\n shapes.push(\n label(px(last ? n.x - 6 : n.x + NODE_WIDTH + 6), px(n.y + n.height / 2), n.name, {\n anchor: last ? 'end' : 'start',\n baseline: 'middle',\n }),\n );\n }\n return { ...canvas(input, width, height), shapes };\n}\n\n/** Removes the links that close a cycle (depth-first back edges), so every remaining path terminates. */\nfunction dropBackEdges(links: SankeyInput['links']): SankeyInput['links'] {\n const out = new Map<string, SankeyInput['links']>();\n for (const l of links) out.set(l.source, [...(out.get(l.source) ?? []), l]);\n const state = new Map<string, 'active' | 'done'>();\n const back = new Set<SankeyInput['links'][number]>();\n const visit = (name: string) => {\n state.set(name, 'active');\n for (const l of out.get(name) ?? []) {\n const s = state.get(l.target);\n if (s === 'active') back.add(l);\n else if (s === undefined) visit(l.target);\n }\n state.set(name, 'done');\n };\n for (const l of links) if (!state.has(l.source)) visit(l.source);\n return links.filter((l) => !back.has(l));\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { makeFormatter } from './format.js';\nimport { canvas, colorOf, isHidden, legendTop, size, stateCanvas } from './frame.js';\nimport { isFinite, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { Canvas, Shape, TreemapInput, TreeNode } from './types.js';\n\ninterface Tile {\n node: TreeNode;\n value: number;\n color: string;\n area: number;\n}\n\nconst nodeValue = (n: TreeNode): number =>\n isFinite(n.value) ? n.value : (n.children ?? []).reduce((s, c) => s + nodeValue(c), 0);\n\n/** Squarified treemap (Bruls, Huizing, van Wijk): rows of tiles kept as close to square as possible. */\nfunction squarify(\n items: Tile[],\n x: number,\n y: number,\n w: number,\n h: number,\n out: (t: Tile, box: [number, number, number, number]) => void,\n) {\n if (items.length === 0) return;\n const worst = (row: Tile[], side: number) => {\n const sum = row.reduce((s, t) => s + t.area, 0);\n const max = Math.max(...row.map((t) => t.area));\n const min = Math.min(...row.map((t) => t.area));\n return Math.max((side * side * max) / (sum * sum), (sum * sum) / (side * side * min));\n };\n const side = Math.min(w, h);\n let row: Tile[] = [];\n let i = 0;\n while (i < items.length) {\n const next = [...row, items[i] as Tile];\n if (row.length === 0 || worst(next, side) <= worst(row, side)) {\n row = next;\n i++;\n } else break;\n }\n const sum = row.reduce((s, t) => s + t.area, 0);\n if (w >= h) {\n const rowW = sum / h;\n let ry = y;\n for (const t of row) {\n const th = t.area / rowW;\n out(t, [x, ry, rowW, th]);\n ry += th;\n }\n squarify(items.slice(i), x + rowW, y, w - rowW, h, out);\n } else {\n const rowH = sum / w;\n let rx = x;\n for (const t of row) {\n const tw = t.area / rowH;\n out(t, [rx, y, tw, rowH]);\n rx += tw;\n }\n squarify(items.slice(i), x, y + rowH, w, h - rowH, out);\n }\n}\n\nexport function layoutTreemap(input: TreemapInput): Canvas {\n const state = stateCanvas(input, !input.data.some((n) => nodeValue(n) > 0));\n if (state) return state;\n const formatValue = makeFormatter(input.format);\n const { width, height } = size(input);\n const top = legendTop(input);\n const shapes: Shape[] = [];\n const legend = input.data.map((n, i) => ({ name: n.name, color: colorOf(input, i, n.color) }));\n // Branches are outlined and their children tiled inside a 2px inset; leaves are filled.\n const tile = (\n nodes: TreeNode[],\n x: number,\n y: number,\n w: number,\n h: number,\n inherited: string | undefined,\n ) => {\n const total = nodes.reduce((s, n) => s + Math.max(0, nodeValue(n)), 0);\n const tiles = nodes\n .map((node, i) => ({\n node,\n value: nodeValue(node),\n color: node.color ?? inherited ?? colorOf(input, i),\n area: total > 0 ? (Math.max(0, nodeValue(node)) / total) * w * h : 0,\n }))\n .filter((t) => t.area > 0 && !(inherited === undefined && isHidden(input, t.node.name)))\n .sort((a, b) => b.area - a.area);\n squarify(tiles, x, y, w, h, (t, [tx, ty, tw, th]) => {\n const title = `${t.node.name}: ${formatValue(t.value)}`;\n const branch = (t.node.children?.length ?? 0) > 0;\n shapes.push({\n kind: 'rect',\n part: branch ? 'branch' : 'tile',\n x: px(tx),\n y: px(ty),\n width: px(tw),\n height: px(th),\n fill: t.color,\n opacity: branch ? 0.15 : undefined,\n stroke: 'var(--skdx-color-surface-default)',\n title,\n item: { label: title, name: t.node.name, value: t.value },\n });\n if (branch)\n tile(\n t.node.children as TreeNode[],\n tx + 2,\n ty + 2,\n Math.max(0, tw - 4),\n Math.max(0, th - 4),\n t.color,\n );\n else if (tw > 40 && th > 20)\n shapes.push(\n label(px(tx + 6), px(ty + 6), t.node.name, {\n baseline: 'hanging',\n fill: 'var(--skdx-color-text-on-accent)',\n }),\n );\n });\n };\n tile(input.data, 0, top, width, height - top, undefined);\n const c = canvas(input, width, height, legend);\n return { ...c, shapes: [...shapes, ...c.shapes] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { categoryLabel, categoryValue, makeFormatter } from './format.js';\nimport {\n axis,\n canvas,\n extent,\n legendTop,\n MARGIN,\n plotBox,\n size,\n stateCanvas,\n thinTicks,\n} from './frame.js';\nimport { CHART_COLORS } from './palette.js';\nimport { referenceShapes } from './reference.js';\nimport { bandScale, isFinite, minMax, pathThrough, px } from './scale.js';\nimport { frameShapes } from './shapes.js';\nimport type { Candle, CandlestickInput, Canvas, Hit, Shape } from './types.js';\n\nconst UP = CHART_COLORS.positive;\nconst DOWN = CHART_COLORS.negative;\nconst VOLUME_SHARE = 0.22;\nconst BRUSH_HEIGHT = 32;\nconst BRUSH_GAP = 28;\n\nconst valid = (c: Candle) =>\n isFinite(c.open) && isFinite(c.high) && isFinite(c.low) && isFinite(c.close);\n\n/** Candles or OHLC bars on a time axis, with an optional volume pane, references, zoom and brush. */\nexport function layoutCandlestick(input: CandlestickInput): Canvas {\n const all = input.data.filter(valid);\n const state = stateCanvas(input, all.length === 0);\n if (state) return state;\n const format = makeFormatter(input.format);\n const count = all.length;\n const start = Math.max(0, Math.min(count - 2, Math.floor(input.zoom?.start ?? 0)));\n const end = input.zoom ? Math.max(start + 2, Math.min(count, Math.ceil(input.zoom.end))) : count;\n const zoom = { start, end };\n const data = all.slice(start, end);\n const hasVolume = all.some((c) => isFinite(c.volume));\n const { width, height } = size(input);\n const brushRoom = input.brush ? BRUSH_HEIGHT + BRUSH_GAP : 0;\n const outer = plotBox(width, height, {\n ...MARGIN,\n top: MARGIN.top + legendTop(input),\n bottom: MARGIN.bottom + brushRoom,\n });\n const volumeH = hasVolume ? outer.height * VOLUME_SHARE : 0;\n const plot = { ...outer, height: Math.max(0, outer.height - volumeH - (hasVolume ? 8 : 0)) };\n const y = axis(\n extent(\n data.flatMap((c) => [c.low, c.high]),\n false,\n ),\n [plot.y + plot.height, plot.y],\n input.scale === 'log',\n input.format,\n );\n const x = bandScale(data.length, [plot.x, plot.x + plot.width]);\n const labels = data.map((c) => categoryLabel(c.label, input.xAxis?.format));\n const legend = [\n { name: 'Up', color: UP },\n { name: 'Down', color: DOWN },\n ];\n const c0 = canvas(input, width, height, legend);\n const frame = {\n ...c0,\n plot,\n xTicks: thinTicks(\n data.map((_, i) => ({ pos: px(x.center(i)), label: labels[i] as string })),\n plot.width,\n ),\n yTicks: y.ticks,\n baseline: plot.y + plot.height,\n };\n const shapes: Shape[] = frameShapes(frame);\n shapes.push(\n ...referenceShapes(input.references, {\n plot,\n x: (v) => {\n const target = typeof v === 'string' ? v : categoryValue(v);\n const i = data.findIndex((c, idx) =>\n typeof target === 'string'\n ? labels[idx] === target || c.label === target\n : categoryValue(c.label) === target,\n );\n return i < 0 ? undefined : x.center(i);\n },\n y: (v) => y.scale(v),\n }),\n );\n const ohlc = input.variant === 'ohlc';\n const rows: string[][] = [];\n data.forEach((c, i) => {\n const up = c.close >= c.open;\n const color = up ? UP : DOWN;\n const cx = px(x.center(i));\n const title = `${labels[i]}: O ${format(c.open)} H ${format(c.high)} L ${format(c.low)} C ${format(c.close)}${isFinite(c.volume) ? ` V ${format(c.volume)}` : ''}`;\n const item = { label: title, category: labels[i] as string, index: start + i, value: c.close };\n rows.push([\n labels[i] as string,\n `Open: ${format(c.open)}`,\n `High: ${format(c.high)}`,\n `Low: ${format(c.low)}`,\n `Close: ${format(c.close)}`,\n ...(isFinite(c.volume) ? [`Volume: ${format(c.volume)}`] : []),\n ]);\n const top = y.scale(Math.max(c.open, c.close));\n const bottom = y.scale(Math.min(c.open, c.close));\n if (ohlc) {\n const half = x.bandwidth / 2;\n shapes.push(\n {\n kind: 'line',\n part: 'wick',\n x1: cx,\n x2: cx,\n y1: px(y.scale(c.high)),\n y2: px(y.scale(c.low)),\n stroke: color,\n strokeWidth: 1.5,\n title,\n item,\n },\n {\n kind: 'line',\n part: 'open',\n x1: px(cx - half),\n x2: cx,\n y1: px(y.scale(c.open)),\n y2: px(y.scale(c.open)),\n stroke: color,\n strokeWidth: 1.5,\n },\n {\n kind: 'line',\n part: 'close',\n x1: cx,\n x2: px(cx + half),\n y1: px(y.scale(c.close)),\n y2: px(y.scale(c.close)),\n stroke: color,\n strokeWidth: 1.5,\n },\n );\n } else {\n shapes.push(\n {\n kind: 'line',\n part: 'wick',\n x1: cx,\n x2: cx,\n y1: px(y.scale(c.high)),\n y2: px(y.scale(c.low)),\n stroke: color,\n title,\n },\n {\n kind: 'rect',\n part: 'candle',\n x: px(x.start(i)),\n y: px(top),\n width: px(x.bandwidth),\n height: px(Math.max(1, bottom - top)),\n fill: color,\n title,\n item,\n },\n );\n }\n });\n if (hasVolume) {\n const vTop = plot.y + plot.height + 8;\n const [, vMax] = minMax(data.map((c) => c.volume));\n data.forEach((c, i) => {\n if (!isFinite(c.volume)) return;\n const h = vMax > 0 ? (c.volume / vMax) * volumeH : 0;\n shapes.push({\n kind: 'rect',\n part: 'volume',\n x: px(x.start(i)),\n y: px(vTop + volumeH - h),\n width: px(x.bandwidth),\n height: px(Math.max(h, 0)),\n fill: c.close >= c.open ? UP : DOWN,\n opacity: 0.4,\n title: `${labels[i]}: volume ${format(c.volume)}`,\n });\n });\n }\n const hit: Hit = {\n plot: outer,\n xs: data.map((_, i) => px(x.center(i))),\n rows,\n count,\n zoom,\n crosshair: input.crosshair ?? false,\n };\n if (input.brush) {\n const box = {\n x: outer.x,\n y: outer.y + outer.height + BRUSH_GAP,\n width: outer.width,\n height: BRUSH_HEIGHT,\n };\n const closes = all.map((c) => c.close);\n const [lo, hi] = minMax(closes);\n const step = count > 1 ? box.width / (count - 1) : 0;\n const pts = closes.map((v, i) => ({\n x: px(box.x + i * step),\n y: px(box.y + box.height - (hi === lo ? 0.5 : (v - lo) / (hi - lo)) * (box.height - 4) - 2),\n }));\n const window = {\n x: px(box.x + (start / count) * box.width),\n y: box.y,\n width: px(((end - start) / count) * box.width),\n height: box.height,\n };\n shapes.push(\n {\n kind: 'rect',\n part: 'brush',\n ...box,\n fill: 'var(--skdx-color-surface-sunken)',\n stroke: CHART_COLORS.grid,\n },\n {\n kind: 'path',\n part: 'brush-series',\n d:\n pts.length > 1\n ? `${pathThrough(pts)}L${pts[pts.length - 1]?.x} ${box.y + box.height}L${pts[0]?.x} ${box.y + box.height}Z`\n : '',\n fill: 'var(--skdx-color-primary-500)',\n fillOpacity: 0.3,\n },\n {\n kind: 'rect',\n part: 'brush-window',\n ...window,\n fill: 'var(--skdx-color-primary-500)',\n opacity: 0.15,\n stroke: CHART_COLORS.axis,\n },\n {\n kind: 'rect',\n part: 'brush-handle',\n x: px(window.x - 3),\n y: box.y + 8,\n width: 6,\n height: box.height - 16,\n fill: CHART_COLORS.axis,\n rx: 2,\n },\n {\n kind: 'rect',\n part: 'brush-handle',\n x: px(window.x + window.width - 3),\n y: box.y + 8,\n width: 6,\n height: box.height - 16,\n fill: CHART_COLORS.axis,\n rx: 2,\n },\n );\n hit.brush = { box, window };\n }\n return { ...c0, shapes: [...shapes, ...c0.shapes], hit };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { makeFormatter } from './format.js';\nimport {\n axis,\n canvas,\n colorOf,\n legendTop,\n MARGIN,\n plotBox,\n size,\n stateCanvas,\n thinTicks,\n} from './frame.js';\nimport { CHART_COLORS } from './palette.js';\nimport { bandScale, isFinite, px } from './scale.js';\nimport { frameShapes } from './shapes.js';\nimport type { Canvas, Shape, WaterfallInput } from './types.js';\n\nconst UP = 'var(--skdx-color-success-500)';\nconst DOWN = 'var(--skdx-color-danger-500)';\n\nexport function layoutWaterfall(input: WaterfallInput): Canvas {\n const data = input.data.filter((d) => isFinite(d.value));\n const state = stateCanvas(input, data.length === 0);\n if (state) return state;\n const formatValue = makeFormatter(input.format);\n const { width, height } = size(input);\n const plot = plotBox(width, height, { ...MARGIN, top: MARGIN.top + legendTop(input) });\n const steps: { name: string; from: number; to: number; color: string; title: string }[] = [];\n let running = 0;\n for (const d of data) {\n const from = running;\n running += d.value;\n steps.push({\n name: d.name,\n from,\n to: running,\n color: d.color ?? (d.value >= 0 ? UP : DOWN),\n title: `${d.name}: ${d.value >= 0 ? '+' : ''}${formatValue(d.value)}`,\n });\n }\n if (input.total !== undefined)\n steps.push({\n name: input.total,\n from: 0,\n to: running,\n color: colorOf(input, 0),\n title: `${input.total}: ${formatValue(running)}`,\n });\n const totals = steps.flatMap((s) => [s.from, s.to]);\n const y = axis(\n [Math.min(0, ...totals), Math.max(0, ...totals)],\n [plot.y + plot.height, plot.y],\n {},\n input.format,\n );\n const x = bandScale(steps.length, [plot.x, plot.x + plot.width]);\n const c = canvas(input, width, height, [\n { name: 'Increase', color: UP },\n { name: 'Decrease', color: DOWN },\n ]);\n const shapes: Shape[] = frameShapes({\n ...c,\n plot,\n xTicks: thinTicks(\n steps.map((s, i) => ({ pos: px(x.center(i)), label: s.name })),\n plot.width,\n ),\n yTicks: y.ticks,\n baseline: y.zero,\n });\n steps.forEach((s, i) => {\n const y0 = y.scale(s.from);\n const y1 = y.scale(s.to);\n shapes.push({\n kind: 'rect',\n part: 'bar',\n x: px(x.start(i)),\n y: px(Math.min(y0, y1)),\n width: px(x.bandwidth),\n height: px(Math.max(1, Math.abs(y1 - y0))),\n fill: s.color,\n title: s.title,\n item: { label: s.title, name: s.name, index: i, value: s.to - s.from },\n });\n const next = steps[i + 1];\n if (next)\n shapes.push({\n kind: 'line',\n part: 'connector',\n x1: px(x.start(i) + x.bandwidth),\n x2: px(x.start(i + 1)),\n y1: px(y1),\n y2: px(y.scale(next.from)),\n stroke: CHART_COLORS.axis,\n dash: '4 3',\n });\n });\n return { ...c, shapes: [...shapes, ...c.shapes] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { categoryValue, makeFormatter } from './format.js';\nimport {\n axis,\n canvas,\n CHAR,\n colorOf,\n isHidden,\n legendTop,\n plotBox,\n size,\n stateCanvas,\n thinTicks,\n} from './frame.js';\nimport { CHART_COLORS } from './palette.js';\nimport { referenceShapes } from './reference.js';\nimport { bandScale, isFinite, minMax, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { Canvas, GanttInput, Shape } from './types.js';\n\n/**\n * Intervals on a numeric time axis, one row per task, or per `group` when tasks share one.\n * Generic enough for schedules, on-call shifts, uptime windows and market sessions.\n */\nexport function layoutGantt(input: GanttInput): Canvas {\n const tasks = input.tasks.filter((t) => isFinite(t.start) && isFinite(t.end));\n const state = stateCanvas(input, tasks.length === 0);\n if (state) return state;\n const { width, height } = size(input);\n const rowNames = [...new Set(tasks.map((t) => t.group ?? t.name))];\n const widest = Math.max(0, ...rowNames.map((n) => n.length)) * CHAR;\n const plot = plotBox(width, height, {\n top: 8 + legendTop(input),\n right: 16,\n bottom: 32,\n left: Math.min(width / 2, Math.max(64, widest + 16)),\n });\n const format = makeFormatter(input.format);\n const [lo, hi] = minMax(tasks.flatMap((t) => [t.start, t.end]));\n const x = axis([lo, hi], [plot.x, plot.x + plot.width], {}, input.format);\n const rows = bandScale(rowNames.length, [plot.y, plot.y + plot.height]);\n const shapes: Shape[] = [];\n for (const t of thinTicks(x.ticks, plot.width)) {\n shapes.push({\n kind: 'line',\n part: 'grid',\n x1: t.pos,\n x2: t.pos,\n y1: plot.y,\n y2: plot.y + plot.height,\n stroke: CHART_COLORS.grid,\n });\n shapes.push(\n label(t.pos, plot.y + plot.height + 20, t.label, { part: 'x-label', anchor: 'middle' }),\n );\n }\n rowNames.forEach((name, i) =>\n shapes.push(\n label(plot.x - 8, px(rows.center(i)), name, {\n part: 'y-label',\n anchor: 'end',\n baseline: 'middle',\n }),\n ),\n );\n shapes.push(\n ...referenceShapes(input.references, {\n plot,\n x: (v) => x.scale(categoryValue(v)),\n y: (v) => rows.center(v),\n }),\n );\n tasks.forEach((t, i) => {\n if (isHidden(input, t.name)) return;\n const row = rowNames.indexOf(t.group ?? t.name);\n const x0 = x.scale(Math.min(t.start, t.end));\n const x1 = x.scale(Math.max(t.start, t.end));\n const title = `${t.name}: ${format(t.start)} – ${format(t.end)}`;\n shapes.push({\n kind: 'rect',\n part: 'bar',\n x: px(x0),\n y: px(rows.start(row)),\n width: px(Math.max(1, x1 - x0)),\n height: px(rows.bandwidth),\n fill: colorOf(input, i, t.color),\n rx: 2,\n title,\n item: { label: title, name: t.name, category: t.group, index: i, value: t.end - t.start },\n });\n });\n const c = canvas(\n input,\n width,\n height,\n input.tasks.map((t, i) => ({ name: t.name, color: colorOf(input, i, t.color) })),\n );\n return { ...c, shapes: [...shapes, ...c.shapes] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { makeFormatter } from './format.js';\nimport {\n axis,\n canvas,\n colorOf,\n extent,\n isHidden,\n legendTop,\n MARGIN,\n plotBox,\n size,\n stateCanvas,\n thinTicks,\n} from './frame.js';\nimport { bandScale, finite, px } from './scale.js';\nimport { frameShapes } from './shapes.js';\nimport type { BoxplotInput, Canvas, Shape } from './types.js';\n\n/** Linear-interpolated quantile of a sorted sample. */\nconst quantile = (sorted: number[], q: number): number => {\n if (sorted.length === 0) return 0;\n const pos = (sorted.length - 1) * q;\n const lo = Math.floor(pos);\n const hi = Math.ceil(pos);\n const a = sorted[lo] as number;\n const b = sorted[hi] as number;\n return a + (b - a) * (pos - lo);\n};\n\n/** Five-number summary with Tukey fences: whiskers reach the last sample within 1.5 IQR. */\nexport function boxStats(data: (number | null)[]) {\n const sorted = finite(data).sort((a, b) => a - b);\n const q1 = quantile(sorted, 0.25);\n const median = quantile(sorted, 0.5);\n const q3 = quantile(sorted, 0.75);\n const iqr = q3 - q1;\n const inside = sorted.filter((v) => v >= q1 - 1.5 * iqr && v <= q3 + 1.5 * iqr);\n return {\n q1,\n median,\n q3,\n low: inside[0] ?? q1,\n high: inside[inside.length - 1] ?? q3,\n outliers: sorted.filter((v) => v < q1 - 1.5 * iqr || v > q3 + 1.5 * iqr),\n };\n}\n\nexport function layoutBoxplot(input: BoxplotInput): Canvas {\n const state = stateCanvas(\n input,\n input.series.every((s) => finite(s.data).length === 0),\n );\n if (state) return state;\n const formatValue = makeFormatter(input.format);\n const { width, height } = size(input);\n const plot = plotBox(width, height, { ...MARGIN, top: MARGIN.top + legendTop(input) });\n const y = axis(\n extent(\n input.series.flatMap((s) => (isHidden(input, s.name) ? [] : s.data)),\n false,\n ),\n [plot.y + plot.height, plot.y],\n {},\n input.format,\n );\n const x = bandScale(input.series.length, [plot.x, plot.x + plot.width]);\n const c = canvas(\n input,\n width,\n height,\n input.series.map((s, i) => ({ name: s.name, color: colorOf(input, i, s.color) })),\n );\n const shapes: Shape[] = frameShapes({\n ...c,\n plot,\n xTicks: thinTicks(\n input.series.map((s, i) => ({ pos: px(x.center(i)), label: s.name })),\n plot.width,\n ),\n yTicks: y.ticks,\n baseline: plot.y + plot.height,\n });\n input.series.forEach((s, i) => {\n if (isHidden(input, s.name) || finite(s.data).length === 0) return;\n const st = boxStats(s.data);\n const color = colorOf(input, i, s.color);\n const cx = px(x.center(i));\n const title = `${s.name}: min ${formatValue(st.low)} Q1 ${formatValue(st.q1)} median ${formatValue(st.median)} Q3 ${formatValue(st.q3)} max ${formatValue(st.high)}`;\n const boxW = x.bandwidth * 0.6;\n const bx = px(x.center(i) - boxW / 2);\n shapes.push(\n {\n kind: 'line',\n part: 'whisker',\n x1: cx,\n x2: cx,\n y1: px(y.scale(st.high)),\n y2: px(y.scale(st.low)),\n stroke: color,\n title,\n },\n {\n kind: 'rect',\n part: 'box',\n x: bx,\n y: px(y.scale(st.q3)),\n width: px(boxW),\n height: px(Math.max(1, y.scale(st.q1) - y.scale(st.q3))),\n fill: color,\n stroke: color,\n opacity: 0.5,\n title,\n item: { label: title, series: s.name, index: i, value: st.median },\n },\n {\n kind: 'line',\n part: 'median',\n x1: bx,\n x2: px(bx + boxW),\n y1: px(y.scale(st.median)),\n y2: px(y.scale(st.median)),\n stroke: color,\n title,\n },\n ...st.outliers.map((v): Shape => ({\n kind: 'circle',\n part: 'outlier',\n cx,\n cy: px(y.scale(v)),\n r: 3,\n fill: color,\n title: `${s.name}: ${formatValue(v)}`,\n })),\n );\n });\n return { ...c, shapes: [...shapes, ...c.shapes] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { makeFormatter } from './format.js';\nimport { canvas, colorOf, isHidden, legendTop, size, stateCanvas } from './frame.js';\nimport { arc } from './pie.js';\nimport { isFinite } from './scale.js';\nimport type { Canvas, Shape, SunburstInput, TreeNode } from './types.js';\n\nconst TAU = 2 * Math.PI;\n\nconst nodeValue = (n: TreeNode): number =>\n isFinite(n.value) ? n.value : (n.children ?? []).reduce((s, c) => s + nodeValue(c), 0);\nconst depthOf = (nodes: TreeNode[]): number =>\n nodes.length === 0 ? 0 : 1 + Math.max(...nodes.map((n) => depthOf(n.children ?? [])));\n\nexport function layoutSunburst(input: SunburstInput): Canvas {\n const state = stateCanvas(input, !input.data.some((n) => nodeValue(n) > 0), 300, 300);\n if (state) return state;\n const formatValue = makeFormatter(input.format);\n const { width, height } = size(input, 300, 300);\n const top = legendTop(input);\n const cx = width / 2;\n const cy = top + (height - top) / 2;\n const ringWidth =\n Math.max(0, Math.min(width, height - top) / 2 - 8) / Math.max(1, depthOf(input.data));\n const shapes: Shape[] = [];\n const walk = (\n nodes: TreeNode[],\n depth: number,\n a0: number,\n span: number,\n color: string | undefined,\n ) => {\n const total = nodes.reduce((s, n) => s + Math.max(0, nodeValue(n)), 0);\n let angle = a0;\n nodes.forEach((n, i) => {\n const value = depth === 0 && isHidden(input, n.name) ? 0 : Math.max(0, nodeValue(n));\n const sweep = total > 0 ? (value / total) * span : 0;\n const fill = n.color ?? color ?? colorOf(input, i);\n if (sweep > 0) {\n shapes.push({\n kind: 'path',\n part: 'arc',\n d: arc(cx, cy, ringWidth * (depth + 1), ringWidth * depth, angle, angle + sweep),\n fill,\n opacity: 1 - depth * 0.2,\n stroke: 'var(--skdx-color-surface-default)',\n title: `${n.name}: ${formatValue(value)}`,\n item: { label: `${n.name}: ${formatValue(value)}`, name: n.name, value },\n });\n walk(n.children ?? [], depth + 1, angle, sweep, fill);\n }\n angle += sweep;\n });\n };\n walk(input.data, 0, 0, TAU, undefined);\n const c = canvas(\n input,\n width,\n height,\n input.data.map((n, i) => ({ name: n.name, color: colorOf(input, i, n.color) })),\n );\n return { ...c, shapes: [...shapes, ...c.shapes] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { makeFormatter } from './format.js';\nimport { canvas, colorOf, isHidden, legendTop, size, stateCanvas } from './frame.js';\nimport { arc } from './pie.js';\nimport { isFinite, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { Canvas, ChordInput, Shape } from './types.js';\n\nconst TAU = 2 * Math.PI;\nconst PAD = 0.04;\nconst RING = 12;\n\nexport function layoutChord(input: ChordInput): Canvas {\n const state = stateCanvas(\n input,\n input.names.length === 0 || !input.matrix.some((row) => row.some((v) => isFinite(v) && v > 0)),\n 300,\n 300,\n );\n if (state) return state;\n const formatValue = makeFormatter(input.format);\n const { width, height } = size(input, 300, 300);\n const top = legendTop(input);\n const cx = width / 2;\n const cy = top + (height - top) / 2;\n const r = Math.max(0, Math.min(width, height - top) / 2 - 36);\n const r0 = Math.max(0, r - RING);\n const n = input.names.length;\n const cell = (i: number, j: number) => {\n const v = input.matrix[i]?.[j];\n const hidden =\n isHidden(input, input.names[i] as string) || isHidden(input, input.names[j] as string);\n return hidden || !isFinite(v) ? 0 : Math.max(0, v);\n };\n const rowSum = input.names.map((_, i) => input.names.reduce((s, _n, j) => s + cell(i, j), 0));\n const total = rowSum.reduce((s, v) => s + v, 0);\n const unit = total > 0 ? (TAU - PAD * n) / total : 0;\n const at = (a: number, radius: number) =>\n `${px(cx + radius * Math.sin(a))} ${px(cy - radius * Math.cos(a))}`;\n\n // Each group spans its row sum; inside it, subgroup j spans matrix[i][j].\n const groups: { a0: number; a1: number; sub: { a0: number; a1: number }[] }[] = [];\n let angle = 0;\n for (let i = 0; i < n; i++) {\n const a0 = angle;\n const sub = input.names.map((_, j) => {\n const s0 = angle;\n angle += cell(i, j) * unit;\n return { a0: s0, a1: angle };\n });\n groups.push({ a0, a1: angle, sub });\n angle += PAD;\n }\n\n const shapes: Shape[] = [];\n for (let i = 0; i < n; i++) {\n for (let j = i; j < n; j++) {\n const out = cell(i, j);\n const back = cell(j, i);\n if (out + back === 0) continue;\n const a = (groups[i] as (typeof groups)[number]).sub[j] as { a0: number; a1: number };\n const b = (groups[j] as (typeof groups)[number]).sub[i] as { a0: number; a1: number };\n const large = (s: { a0: number; a1: number }) => (s.a1 - s.a0 > Math.PI ? 1 : 0);\n const d =\n i === j\n ? `M${at(a.a0, r0)}A${r0} ${r0} 0 ${large(a)} 1 ${at(a.a1, r0)}Q${px(cx)} ${px(cy)} ${at(a.a0, r0)}Z`\n : `M${at(a.a0, r0)}A${r0} ${r0} 0 ${large(a)} 1 ${at(a.a1, r0)}Q${px(cx)} ${px(cy)} ${at(b.a0, r0)}A${r0} ${r0} 0 ${large(b)} 1 ${at(b.a1, r0)}Q${px(cx)} ${px(cy)} ${at(a.a0, r0)}Z`;\n const from = out >= back ? i : j;\n shapes.push({\n kind: 'path',\n part: 'chord',\n d,\n fill: colorOf(input, from),\n opacity: 0.5,\n title:\n i === j\n ? `${input.names[i]}: ${formatValue(out)}`\n : `${input.names[i]} ↔ ${input.names[j]}: ${formatValue(out)} / ${formatValue(back)}`,\n });\n }\n }\n groups.forEach((g, i) => {\n if (g.a1 <= g.a0) return;\n shapes.push({\n kind: 'path',\n part: 'group',\n d: arc(cx, cy, r, r0, g.a0, g.a1),\n fill: colorOf(input, i),\n title: `${input.names[i]}: ${formatValue(rowSum[i] as number)}`,\n item: {\n label: `${input.names[i]}: ${formatValue(rowSum[i] as number)}`,\n name: input.names[i],\n index: i,\n value: rowSum[i] as number,\n },\n });\n const mid = (g.a0 + g.a1) / 2;\n const sin = Math.sin(mid);\n shapes.push(\n label(px(cx + (r + 8) * sin), px(cy - (r + 8) * Math.cos(mid)), input.names[i] as string, {\n anchor: sin > 0.1 ? 'start' : sin < -0.1 ? 'end' : 'middle',\n baseline: 'middle',\n }),\n );\n });\n const c = canvas(\n input,\n width,\n height,\n input.names.map((name, i) => ({ name, color: colorOf(input, i) })),\n );\n return { ...c, shapes: [...shapes, ...c.shapes] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { makeFormatter } from './format.js';\nimport { canvas, colorOf, legendTop, size, stateCanvas } from './frame.js';\nimport { minMax, px } from './scale.js';\nimport type { Canvas, MapInput, Shape } from './types.js';\n\nconst PAD = 8;\n\nconst rings = (f: MapInput['features'][number]): [number, number][][] =>\n f.geometry.type === 'Polygon' ? f.geometry.coordinates : f.geometry.coordinates.flat();\n\n/** Mercator latitude, clamped to ±85° so the poles stay finite. */\nconst mercatorY = (lat: number) =>\n Math.log(Math.tan(Math.PI / 4 + (Math.max(-85, Math.min(85, lat)) * Math.PI) / 360));\n\n/** Projection fitted to the features' bounds (equirectangular by default, or Mercator); opacity follows the value. */\nexport function layoutMap(input: MapInput): Canvas {\n const state = stateCanvas(input, input.features.length === 0);\n if (state) return state;\n const formatValue = makeFormatter(input.format);\n const { width, height } = size(input);\n const top = legendTop(input);\n const toY = input.projection === 'mercator' ? mercatorY : (lat: number) => lat;\n const points = input.features.flatMap((f) => rings(f).flat());\n const [minLon, maxLon] = points.length ? minMax(points.map((p) => p[0])) : [0, 1];\n const [minLat, maxLat] = points.length ? minMax(points.map((p) => toY(p[1]))) : [0, 1];\n const scale = Math.min(\n (width - 2 * PAD) / Math.max(1e-9, maxLon - minLon),\n (height - top - 2 * PAD) / Math.max(1e-9, maxLat - minLat),\n );\n const ox = (width - (maxLon - minLon) * scale) / 2;\n const oy = top + (height - top - (maxLat - minLat) * scale) / 2;\n const project = ([lon, lat]: [number, number]) =>\n `${px(ox + (lon - minLon) * scale)} ${px(oy + (maxLat - toY(lat)) * scale)}`;\n\n const [min, max] = minMax(input.features.map((f) => f.value));\n const color = colorOf(input, 0, input.color);\n const shapes: Shape[] = input.features.map((f) => ({\n kind: 'path',\n part: 'region',\n d: rings(f)\n .map((ring) => `M${ring.map(project).join('L')}Z`)\n .join(''),\n fill: color,\n opacity:\n max === min || !Number.isFinite(f.value)\n ? 1\n : px(0.15 + (0.85 * (f.value - min)) / (max - min)),\n stroke: 'var(--skdx-color-surface-default)',\n title: `${f.name}: ${formatValue(f.value)}`,\n item: { label: `${f.name}: ${formatValue(f.value)}`, name: f.name, value: f.value },\n }));\n return { ...canvas(input, width, height), shapes };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nexport type * from './types.js';\nexport { layoutBarChart } from './bar.js';\nexport { layoutAreaChart, layoutLineChart } from './line.js';\nexport { layoutCartesian, MARKER_LIMIT, TITLE_LIMIT } from './cartesian.js';\nexport { layoutScatterChart } from './scatter.js';\nexport { layoutPieChart } from './pie.js';\nexport { layoutSparkline } from './sparkline.js';\nexport { layoutRadarChart } from './radar.js';\nexport { layoutHeatmap } from './heatmap.js';\nexport { layoutFunnelChart } from './funnel.js';\nexport { layoutRadialBar } from './radial.js';\nexport { CHART_COLORS, SERIES_COLORS, variantColor } from './palette.js';\nexport { makeFormatter, formatValue, categoryLabel } from './format.js';\nexport { stateCanvas, tooltipShapes } from './frame.js';\nexport {\n anchorOf,\n brushDrag,\n brushGrab,\n crosshairShapes,\n focusShapes,\n focusTargets,\n hoverTooltip,\n isUnzoomed,\n itemAt,\n nextFocus,\n pointerShapes,\n toViewBox,\n zoomPan,\n zoomPinch,\n zoomWheel,\n type BrushGrab,\n} from './interact.js';\nexport { csv, seriesCsv, shapeMarkup, svgMarkup, svgToPng } from './export.js';\nexport { ANIMATION_CSS, ANIMATION_LIMIT, animationDuration } from './animate.js';\nexport { timeTicks } from './scale.js';\nexport { layoutSankey } from './sankey.js';\nexport { layoutTreemap } from './treemap.js';\nexport { layoutCandlestick } from './candlestick.js';\nexport { layoutWaterfall } from './waterfall.js';\nexport { layoutGantt } from './gantt.js';\nexport { layoutBoxplot } from './boxplot.js';\nexport { layoutSunburst } from './sunburst.js';\nexport { layoutChord } from './chord.js';\nexport { layoutMap } from './map.js';\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\nimport type { Shape } from './core/index.js';\n\n/** Draws a core shape list back to front; marks with an `item` carry their index for hit-testing. */\n@Component({\n selector: 'g[skdxChartShapes]',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @for (s of shapes(); track $index) {\n @switch (s.kind) {\n @case ('path') {\n <svg:path\n [attr.data-skdx-part]=\"s.part\"\n [attr.data-skdx-i]=\"s.item ? $index : null\"\n [attr.d]=\"s.d\"\n [attr.fill]=\"s.fill ?? 'none'\"\n [attr.stroke]=\"s.stroke\"\n [attr.stroke-width]=\"s.strokeWidth\"\n [attr.stroke-linecap]=\"s.strokeLinecap\"\n [attr.stroke-linejoin]=\"s.strokeLinejoin\"\n [attr.stroke-dasharray]=\"s.dash\"\n [attr.opacity]=\"s.opacity\"\n [attr.fill-opacity]=\"s.fillOpacity\"\n >\n @if (s.title) {\n <svg:title>{{ s.title }}</svg:title>\n }\n </svg:path>\n }\n @case ('rect') {\n <svg:rect\n [attr.data-skdx-part]=\"s.part\"\n [attr.data-skdx-i]=\"s.item ? $index : null\"\n [attr.x]=\"s.x\"\n [attr.y]=\"s.y\"\n [attr.width]=\"s.width\"\n [attr.height]=\"s.height\"\n [attr.rx]=\"s.rx\"\n [attr.fill]=\"s.fill\"\n [attr.stroke]=\"s.stroke\"\n [attr.fill-opacity]=\"s.opacity\"\n >\n @if (s.title) {\n <svg:title>{{ s.title }}</svg:title>\n }\n </svg:rect>\n }\n @case ('line') {\n <svg:line\n [attr.data-skdx-part]=\"s.part\"\n [attr.data-skdx-i]=\"s.item ? $index : null\"\n [attr.x1]=\"s.x1\"\n [attr.y1]=\"s.y1\"\n [attr.x2]=\"s.x2\"\n [attr.y2]=\"s.y2\"\n [attr.stroke]=\"s.stroke\"\n [attr.stroke-width]=\"s.strokeWidth\"\n [attr.stroke-dasharray]=\"s.dash\"\n >\n @if (s.title) {\n <svg:title>{{ s.title }}</svg:title>\n }\n </svg:line>\n }\n @case ('circle') {\n <svg:circle\n [attr.data-skdx-part]=\"s.part\"\n [attr.data-skdx-i]=\"s.item ? $index : null\"\n [attr.cx]=\"s.cx\"\n [attr.cy]=\"s.cy\"\n [attr.r]=\"s.r\"\n [attr.fill]=\"s.fill\"\n [attr.stroke]=\"s.stroke\"\n [attr.opacity]=\"s.opacity\"\n >\n @if (s.title) {\n <svg:title>{{ s.title }}</svg:title>\n }\n </svg:circle>\n }\n @case ('text') {\n <svg:text\n [attr.data-skdx-part]=\"s.part\"\n [attr.data-skdx-i]=\"s.item ? $index : null\"\n [attr.x]=\"s.x\"\n [attr.y]=\"s.y\"\n [attr.text-anchor]=\"s.anchor\"\n [attr.dominant-baseline]=\"s.baseline\"\n [attr.fill]=\"s.fill\"\n [attr.font-weight]=\"s.weight\"\n [textContent]=\"s.text\"\n ></svg:text>\n }\n }\n }\n `,\n})\nexport class SkdxChartShapesComponent {\n readonly shapes = input.required<Shape[]>();\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n Directive,\n ElementRef,\n inject,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\n\nimport {\n ANIMATION_CSS,\n animationDuration,\n brushDrag,\n brushGrab,\n CHART_COLORS,\n focusShapes,\n focusTargets,\n itemAt,\n nextFocus,\n pointerShapes,\n toViewBox,\n zoomPan,\n zoomPinch,\n zoomWheel,\n type AxisOptions,\n type BrushGrab,\n type Canvas,\n type CartesianSeries,\n type Category,\n type ChartItem,\n type Curve,\n type Format,\n type RangeSeries,\n type Reference,\n type Shape,\n type XAxisOptions,\n type Zoom,\n} from './core/index.js';\nimport { SkdxChartShapesComponent } from './shapes.component';\n\ninterface Drag {\n x: number;\n zoom: Zoom;\n grab: BrushGrab | 'pan' | 'pinch';\n /** Finger distance when a pinch began. */\n distance?: number;\n}\n\n/**\n * The accessible `<svg>` root every chart renders into: marks, decorations, then the hover or\n * keyboard tooltip. Owns focus state; reports legend toggles and zoom changes to the chart.\n */\n@Component({\n selector: 'skdx-chart-root',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[style.display]': \"responsive() ? 'block' : 'inline-block'\" },\n imports: [SkdxChartShapesComponent],\n template: `\n <svg\n #svg\n xmlns=\"http://www.w3.org/2000/svg\"\n [attr.viewBox]=\"'0 0 ' + layout().width + ' ' + layout().height\"\n [attr.width]=\"layout().width\"\n [attr.height]=\"layout().height\"\n [attr.role]=\"layout().decorative ? 'presentation' : 'img'\"\n [attr.aria-hidden]=\"layout().decorative ? 'true' : null\"\n [attr.aria-label]=\"layout().decorative ? null : label()\"\n [attr.aria-describedby]=\"descId()\"\n [attr.tabindex]=\"focusable() ? 0 : null\"\n [attr.data-skdx-chart]=\"kind()\"\n [attr.font-family]=\"colors.fontFamily\"\n [attr.font-size]=\"colors.fontSize\"\n [style.max-width]=\"'100%'\"\n [style.height]=\"'auto'\"\n [style.outline]=\"'none'\"\n [style.cursor]=\"canZoom() ? 'grab' : null\"\n [style.touch-action]=\"canZoom() ? 'none' : null\"\n [style.--skdx-chart-duration]=\"duration()\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerleave)=\"tip.set([])\"\n (pointerdown)=\"onPointerDown($event)\"\n (pointerup)=\"onPointerUp($event)\"\n (pointercancel)=\"onPointerUp($event)\"\n (wheel)=\"onWheel($event)\"\n (dblclick)=\"canZoom() && zoomChange.emit(undefined)\"\n (click)=\"onClick($event)\"\n (keydown)=\"onKeyDown($event)\"\n (blur)=\"focused.set(null)\"\n >\n <title>{{ label() }}</title>\n @if (layout().description) {\n <svg:desc [attr.id]=\"descId()\">{{ layout().description }}</svg:desc>\n }\n <svg:g\n skdxChartShapes\n [shapes]=\"layout().shapes\"\n ></svg:g>\n <svg:g\n skdxChartShapes\n [shapes]=\"tip()\"\n ></svg:g>\n <svg:g\n skdxChartShapes\n [shapes]=\"focusShapes()\"\n ></svg:g>\n </svg>\n `,\n})\nexport class SkdxChartRootComponent {\n readonly layout = input.required<Canvas>();\n readonly kind = input.required<string>();\n readonly label = input.required<string>();\n /** Wheel and pinch zoom, drag pans the category axis. */\n readonly zoomable = input(false);\n /** Measure the host and report its width, so the chart can lay out at that width. */\n readonly responsive = input(false);\n /** A mark was clicked, or Enter/Space was pressed on the focused mark. */\n readonly itemClick = output<ChartItem>();\n /** The legend toggled a series; the chart applies it through its `hiddenSeries` model. */\n readonly hiddenSeriesChange = output<string[]>();\n /** Wheel, drag, pinch or brush moved the window; the chart applies it through its `zoom` model. */\n readonly zoomChange = output<Zoom | undefined>();\n /** The host's measured width, under `responsive`. */\n readonly measured = output<number>();\n\n protected readonly colors = CHART_COLORS;\n protected readonly duration = computed(() => animationDuration(this.layout()) ?? null);\n private readonly pointers = new Map<number, number>();\n private readonly svg = viewChild.required<ElementRef<SVGSVGElement>>('svg');\n\n constructor() {\n const host = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n const destroy = inject(DestroyRef);\n afterNextRender(() => {\n // Angular strips `<style>` from templates and cannot resolve imported `styles` statically,\n // so the animation stylesheet is appended once; it is inert until `--skdx-chart-duration` is set.\n const style = document.createElementNS('http://www.w3.org/2000/svg', 'style');\n style.textContent = ANIMATION_CSS;\n this.svg().nativeElement.prepend(style);\n if (typeof ResizeObserver === 'undefined') return;\n const ro = new ResizeObserver(([entry]) => {\n const w = Math.floor(entry?.contentRect.width ?? 0);\n if (w > 0 && this.responsive()) this.measured.emit(w);\n });\n ro.observe(host);\n destroy.onDestroy(() => ro.disconnect());\n });\n }\n protected readonly tip = signal<Shape[]>([]);\n protected readonly focused = signal<number | null>(null);\n protected readonly canZoom = computed(() => {\n const hit = this.layout().hit;\n return Boolean(hit && (this.zoomable() || hit.brush));\n });\n protected readonly focusable = computed(\n () => !this.layout().decorative && focusTargets(this.layout()).length > 0,\n );\n protected readonly descId = computed(() =>\n this.layout().description ? `${this.kind()}-desc-${this.label().replace(/\\W+/g, '-')}` : null,\n );\n protected readonly focusShapes = computed(() => focusShapes(this.layout(), this.focused()));\n private drag: Drag | null = null;\n\n private viewBox(e: MouseEvent) {\n const { width, height } = this.layout();\n return toViewBox(e.currentTarget as Element, e.clientX, e.clientY, width, height);\n }\n\n protected onPointerMove(e: PointerEvent): void {\n const layout = this.layout();\n if (this.pointers.has(e.pointerId)) this.pointers.set(e.pointerId, this.viewBox(e).x);\n if (this.drag && layout.hit) {\n const d = this.drag;\n if (d.grab === 'pinch') {\n const [a, b] = [...this.pointers.values()];\n if (a === undefined || b === undefined || !d.distance) return;\n this.zoomChange.emit(\n zoomPinch(layout.hit, d.zoom, Math.abs(a - b) / d.distance, (a + b) / 2),\n );\n return;\n }\n const { x } = this.viewBox(e);\n this.zoomChange.emit(\n d.grab === 'pan'\n ? zoomPan(layout.hit, d.zoom, x - d.x)\n : brushDrag(layout.hit, d.grab, d.zoom, x - d.x),\n );\n return;\n }\n if (!layout.tooltip) return;\n const next = pointerShapes(layout, e.target, e.currentTarget as Element, e.clientX, e.clientY);\n if (next.length > 0 || this.tip().length > 0) this.tip.set(next);\n }\n\n protected onPointerDown(e: PointerEvent): void {\n const hit = this.layout().hit;\n if (!hit || !this.canZoom() || e.button !== 0) return;\n const { x, y } = this.viewBox(e);\n this.pointers.set(e.pointerId, x);\n if (this.pointers.size === 2) {\n // A second finger turns any drag into a pinch around the midpoint.\n const [a, b] = [...this.pointers.values()] as [number, number];\n this.drag = { x: (a + b) / 2, zoom: hit.zoom, grab: 'pinch', distance: Math.abs(a - b) || 1 };\n } else {\n const grabbed = brushGrab(hit, x, y);\n if (grabbed) {\n this.drag = { x, zoom: grabbed.zoom, grab: grabbed.grab };\n if (grabbed.zoom !== hit.zoom) this.zoomChange.emit(grabbed.zoom);\n } else if (\n this.zoomable() &&\n x >= hit.plot.x &&\n x <= hit.plot.x + hit.plot.width &&\n y >= hit.plot.y &&\n y <= hit.plot.y + hit.plot.height\n )\n this.drag = { x, zoom: hit.zoom, grab: 'pan' };\n else {\n this.pointers.delete(e.pointerId);\n return;\n }\n }\n (e.currentTarget as Element).setPointerCapture(e.pointerId);\n this.tip.set([]);\n }\n\n protected onPointerUp(e: PointerEvent): void {\n this.pointers.delete(e.pointerId);\n const el = e.currentTarget as Element;\n if (el.hasPointerCapture(e.pointerId)) el.releasePointerCapture(e.pointerId);\n if (this.pointers.size === 0 || this.drag?.grab === 'pinch') this.drag = null;\n }\n\n protected onWheel(e: WheelEvent): void {\n const hit = this.layout().hit;\n if (!hit || !this.canZoom()) return;\n const { x, y } = this.viewBox(e);\n if (y < hit.plot.y || y > hit.plot.y + hit.plot.height) return;\n const next = zoomWheel(hit, e.deltaY, x);\n if (!next) return;\n e.preventDefault();\n this.zoomChange.emit(next);\n }\n\n protected onClick(e: MouseEvent): void {\n const hit = itemAt(this.layout(), e.target);\n if (!hit) return;\n if (hit.item.legend && hit.item.series !== undefined)\n this.hiddenSeriesChange.emit([hit.item.series]);\n else this.itemClick.emit(hit.item);\n }\n\n protected onKeyDown(e: KeyboardEvent): void {\n if (!this.focusable()) return;\n const focused = this.focused();\n if ((e.key === 'Enter' || e.key === ' ') && focused !== null) {\n const item = this.layout().shapes[focused]?.item;\n if (item) {\n e.preventDefault();\n this.itemClick.emit(item);\n }\n return;\n }\n const next = nextFocus(this.layout(), focused, e.key);\n if (next === undefined) return;\n e.preventDefault();\n this.focused.set(next);\n }\n}\n\n/** Size, state, formatting, accessibility and interaction inputs every chart takes. */\n@Directive()\nexport abstract class SkdxSizedBase {\n readonly width = input<number>();\n readonly height = input<number>();\n /** Accessible name of the chart; defaults to \"<Kind> chart\". */\n readonly label = input<string>();\n /** Draw a legend row above the plot. */\n readonly legend = input(false);\n /** Show a hover tooltip for the mark under the pointer. */\n readonly tooltip = input(true);\n /** How values are written: a function or an `Intl` style such as `{ style: 'currency', currency: 'EUR' }`. */\n readonly format = input<Format>();\n /** Categorical series colors, cycled by series index. */\n readonly palette = input<string[]>();\n /** Series left out of the plot; two-way bindable, the legend toggles it. */\n readonly hiddenSeries = model<string[] | undefined>(undefined);\n /** Draw a loading placeholder instead of the chart. */\n readonly loading = input(false);\n /** Draw this message instead of the chart. */\n readonly error = input<string>();\n /** Written in place of an empty chart. */\n readonly emptyMessage = input<string>();\n /** Longer accessible description, rendered as the svg `<desc>`. */\n readonly description = input<string>();\n /** Hide the chart from assistive technology. */\n readonly decorative = input(false);\n /** Fade marks in and transition them on change; `true` is 300 ms, a number sets the duration. */\n readonly animate = input<boolean | number>(false);\n /** Lay the chart out at the host's width, so text keeps its size. */\n readonly responsive = input(false);\n /** The width the root measured under `responsive`. */\n protected readonly measuredWidth = signal<number | undefined>(undefined);\n /** Visible category window; two-way bindable, wheel, drag, pinch and brush update it. */\n readonly zoom = model<Zoom | undefined>(undefined);\n /** Wheel zooms and drag pans the category axis. */\n readonly zoomable = input(false);\n /** A mark was clicked, or Enter/Space was pressed on the focused mark. */\n readonly itemClick = output<ChartItem>();\n\n /** Applies a legend toggle reported by the root. */\n protected toggle([name]: string[]): void {\n const current = this.hiddenSeries() ?? [];\n if (name === undefined) return;\n this.hiddenSeries.set(\n current.includes(name) ? current.filter((n) => n !== name) : [...current, name],\n );\n }\n\n protected sized() {\n return {\n width: this.responsive() && this.measuredWidth() ? this.measuredWidth() : this.width(),\n height: this.height(),\n animate: this.animate(),\n responsive: this.responsive(),\n legend: this.legend(),\n tooltip: this.tooltip(),\n format: this.format(),\n palette: this.palette(),\n hiddenSeries: this.hiddenSeries(),\n loading: this.loading(),\n error: this.error(),\n emptyMessage: this.emptyMessage(),\n description: this.description(),\n decorative: this.decorative(),\n zoom: this.zoom(),\n };\n }\n}\n\n/** Inputs the cartesian charts (bar, line, area) take. */\n@Directive()\nexport abstract class SkdxChartBase extends SkdxSizedBase {\n readonly series = input.required<(CartesianSeries | RangeSeries)[]>();\n /** X-axis labels; numbers and dates are written with `xAxis.format`. */\n readonly categories = input<Category[]>();\n readonly xAxis = input<XAxisOptions>();\n readonly yAxis = input<AxisOptions>();\n /** Enables the second y axis; series opt in with `axis: 'right'`. */\n readonly rightAxis = input<AxisOptions>();\n /** Lines and bands in data coordinates: targets, SLAs, forecast periods. */\n readonly references = input<Reference[]>();\n /** Write each value next to its mark. */\n readonly labels = input(false);\n readonly curve = input<Curve>();\n readonly connectNulls = input(false);\n /** Stack the series; `'percent'` normalizes each category to 100%. */\n readonly stacked = input<boolean | 'percent'>(false);\n readonly orientation = input<'vertical' | 'horizontal'>();\n /** Corner radius of bars. */\n readonly radius = input<number>();\n readonly sort = input<'asc' | 'desc'>();\n readonly transform = input<'histogram' | 'cumulative'>();\n readonly bins = input<number>();\n readonly binWidth = input<number>();\n readonly binDomain = input<[number, number]>();\n readonly binMode = input<'count' | 'density' | 'cumulative'>();\n /** Draw a range strip under the plot showing the whole series and the zoomed window. */\n readonly brush = input(false);\n /** Snap the hover tooltip to the nearest category and list every series. */\n readonly crosshair = input(false);\n\n protected input() {\n return {\n ...this.sized(),\n series: this.series(),\n categories: this.categories(),\n xAxis: this.xAxis(),\n yAxis: this.yAxis(),\n rightAxis: this.rightAxis(),\n references: this.references(),\n labels: this.labels(),\n curve: this.curve(),\n connectNulls: this.connectNulls(),\n stacked: this.stacked(),\n orientation: this.orientation(),\n radius: this.radius(),\n sort: this.sort(),\n transform: this.transform(),\n bins: this.bins(),\n binWidth: this.binWidth(),\n binDomain: this.binDomain(),\n binMode: this.binMode(),\n brush: this.brush(),\n crosshair: this.crosshair(),\n };\n }\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nexport * from './frame.component';\nexport * from './shapes.component';\nexport * from './core/index.js';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["round","DAY","MARGIN","BRUSH_HEIGHT","BRUSH_GAP","clampZoom","TAU","PAD","nodeValue","UP","DOWN"],"mappings":"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"}
|