@skdx/angular-charts 0.39.0 → 0.41.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.
@@ -1 +1 @@
1
- {"version":3,"file":"skdx-angular-charts-internal.mjs","sources":["../../src/internal/core/format.ts","../../src/internal/core/scale.ts","../../src/internal/core/bins.ts","../../src/internal/core/geometry.ts","../../src/internal/core/palette.ts","../../src/internal/core/frame.ts","../../src/internal/core/shapes.ts","../../src/internal/core/reference.ts","../../src/internal/core/sampling.ts","../../src/internal/core/colors.ts","../../src/internal/core/scatter.ts","../../src/internal/core/transforms.ts","../../src/internal/core/cartesian.ts","../../src/internal/core/bar.ts","../../src/internal/core/line.ts","../../src/internal/core/identity.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/gauge.ts","../../src/internal/core/bubble.ts","../../src/internal/core/histogram.ts","../../src/internal/core/bullet.ts","../../src/internal/core/combo.ts","../../src/internal/core/range.ts","../../src/internal/core/network.ts","../../src/internal/core/timeline.ts","../../src/internal/core/interact.ts","../../src/internal/core/export.ts","../../src/internal/core/hierarchy.ts","../../src/internal/core/table.ts","../../src/internal/core/sync.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/marimekko.ts","../../src/internal/core/parallel.ts","../../src/internal/core/linearGauge.ts","../../src/internal/core/dumbbell.ts","../../src/internal/core/pareto.ts","../../src/internal/core/tree.ts","../../src/internal/core/circlePacking.ts","../../src/internal/core/icicle.ts","../../src/internal/core/bump.ts","../../src/internal/core/polarArea.ts","../../src/internal/core/swarm.ts","../../src/internal/core/waffle.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 = '', timeZone } = 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, timeZone ? { ...options, timeZone } : 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/**\n * A category as a number, for positioning on numeric axes (Gantt, scatter references). Strings\n * parse as numbers, else as dates (`2026-03-01`, `2026-03-01T12:00Z`), else `NaN`.\n */\nexport const categoryValue = (c: Category): number => {\n if (c instanceof Date) return c.getTime();\n if (typeof c === 'number') return c;\n const n = Number(c);\n return Number.isFinite(n) && c.trim() !== '' ? n : Date.parse(c);\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 { 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]`; `padding` is the gap share of each slot. */\nexport function bandScale(count: number, [r0, r1]: readonly [number, number], padding = 0.2) {\n const step = count === 0 ? 0 : (r1 - r0) / count;\n const bandwidth = step * (1 - Math.max(0, Math.min(0.9, padding)));\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 // `smooth` is the friendlier name for the monotone cubic.\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 { finite, minMax } from './scale.js';\nimport type { Value } from './types.js';\n\nexport interface BinOptions {\n /** Bin count. @default Sturges' rule, `ceil(log2(n) + 1)` */\n bins?: number | undefined;\n /** Bin width; wins over `bins`. */\n binWidth?: number | undefined;\n /** Value range covered; samples outside are dropped. @default the sample extent */\n domain?: [number, number] | undefined;\n /** Explicit, ascending bin edges; wins over everything else and allows unequal widths. */\n thresholds?: number[] | undefined;\n}\n\nexport interface Bin {\n /** Inclusive lower edge. */\n x0: number;\n /** Exclusive upper edge (inclusive for the last bin). */\n x1: number;\n count: number;\n}\n\n/**\n * Ascending bin edges for a sample: explicit `thresholds`, else equal widths from `binWidth`\n * or `bins` over `domain`. Deterministic: the same options always yield the same edges.\n */\nexport function binEdges(samples: readonly number[], options: BinOptions = {}): number[] {\n if (options.thresholds && options.thresholds.length >= 2)\n return [...options.thresholds].filter(Number.isFinite).sort((a, b) => a - b);\n const [lo, hi] = options.domain ?? minMax(samples);\n const n = Math.max(1, samples.length);\n const bins = Math.max(1, options.bins ?? Math.ceil(Math.log2(n) + 1));\n const width = options.binWidth ?? (hi > lo ? (hi - lo) / bins : 1);\n const count = hi > lo ? Math.max(1, Math.ceil((hi - lo) / width - 1e-9)) : 1;\n // Rounded so `12 + 5 × 6.6` reads as 45, not 45.000000000000004.\n return Array.from({ length: count + 1 }, (_, i) => Number((lo + i * width).toPrecision(12)));\n}\n\n/** Counts the finite samples into the bins between consecutive `edges`. */\nexport function binSamples(\n values: readonly (Value | undefined)[],\n edges: readonly number[],\n): Bin[] {\n const bins: Bin[] = [];\n for (let i = 0; i + 1 < edges.length; i++)\n bins.push({ x0: edges[i] as number, x1: edges[i + 1] as number, count: 0 });\n if (bins.length === 0) return bins;\n const lo = edges[0] as number;\n const hi = edges[edges.length - 1] as number;\n for (const v of finite(values)) {\n if (v < lo || v > hi) continue;\n // Binary search for the last edge <= v; the top edge closes the last bin.\n let a = 0;\n let b = bins.length - 1;\n while (a < b) {\n const m = (a + b + 1) >> 1;\n if ((bins[m] as Bin).x0 <= v) a = m;\n else b = m - 1;\n }\n (bins[a] as Bin).count++;\n }\n return bins;\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 { Shape } from './types.js';\n\nconst NUMBER = /-?\\d*\\.?\\d+(?:e[-+]?\\d+)?/gi;\nconst COMMAND = /([MLTHVCSQAZmlthvcsqaz])([^MLTHVCSQAZmlthvcsqaz]*)/g;\n\n/** How many coordinates each absolute command takes per repeat; `-1` is \"x only\", `-2` \"y only\". */\nconst ARITY: Record<string, number> = { M: 2, L: 2, T: 2, C: 6, S: 4, Q: 4, A: 7, H: -1, V: -2 };\n\n/**\n * A path moved by `(dx, dy)`: absolute commands are translated (for `A`, only the end point),\n * relative (lowercase) commands are left as they are, `Z` has nothing to move.\n */\nexport function translatePath(d: string, dx: number, dy: number): string {\n return d.replace(COMMAND, (_, cmd: string, args: string) => {\n const arity = ARITY[cmd];\n if (arity === undefined) return cmd + args;\n const nums = args.match(NUMBER) ?? [];\n const out = nums.map((n, i) => {\n const v = Number(n);\n if (arity === -1) return String(v + dx);\n if (arity === -2) return String(v + dy);\n const k = i % arity;\n if (arity === 7) return k === 5 ? String(v + dx) : k === 6 ? String(v + dy) : n;\n return String(k % 2 === 0 ? v + dx : v + dy);\n });\n return cmd + out.join(' ');\n });\n}\n\n/** Every shape moved by `(dx, dy)`. */\nexport const translateShapes = (shapes: readonly Shape[], dx: number, dy: number): Shape[] =>\n shapes.map((s): Shape => {\n switch (s.kind) {\n case 'rect':\n return { ...s, x: s.x + dx, y: s.y + dy };\n case 'circle':\n return { ...s, cx: s.cx + dx, cy: s.cy + dy };\n case 'line':\n return { ...s, x1: s.x1 + dx, x2: s.x2 + dx, y1: s.y1 + dy, y2: s.y2 + dy };\n case 'text':\n return { ...s, x: s.x + dx, y: s.y + dy };\n case 'path':\n return { ...s, d: translatePath(s.d, dx, dy) };\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 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\n/**\n * Semantic color for text: the line and band colors are mid-scale fills that fall under 2:1 on\n * text, so labels use the theme's readable text token for the same meaning.\n */\nexport const variantTextColor = (variant: Variant = 'neutral'): string =>\n variant === 'neutral'\n ? CHART_COLORS.label\n : variant === 'primary'\n ? 'var(--skdx-color-text-accent)'\n : `var(--skdx-color-text-${variant})`;\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 { makeFormatter } from './format.js';\nimport { translateShapes } from './geometry.js';\nimport { CHART_COLORS, seriesColor } from './palette.js';\nimport { linearScale, logTicks, minMax, niceTicks, px } from './scale.js';\nimport type {\n AxisOptions,\n Box,\n Canvas,\n ChartItem,\n Format,\n LegendItem,\n LegendOptions,\n Shape,\n Sized,\n Tick,\n TooltipOptions,\n} 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\n/** The legend options of an input; `undefined` when there is no legend. */\nexport function legendOptions(input: Sized): LegendOptions | undefined {\n const l = input.legend;\n if (!l) return undefined;\n if (l === true) return {};\n return l.enabled === false ? undefined : l;\n}\n\n/** The tooltip options of an input, with `enabled` resolved. */\nexport function tooltipOptions(\n input: Sized,\n): Omit<TooltipOptions, 'enabled'> & { enabled: boolean } {\n const t = input.tooltip;\n if (t === undefined || t === true) return { enabled: true };\n if (t === false) return { enabled: false };\n return { ...t, enabled: t.enabled ?? true };\n}\n\n/** Whether the shared axis tooltip (crosshair) is on: `crosshair`, or `tooltip.trigger: 'axis'`. */\nexport const axisTooltip = (input: Sized & { crosshair?: boolean | undefined }): boolean =>\n input.crosshair === true || tooltipOptions(input).trigger === 'axis';\n\nexport const LEGEND_HEIGHT = 20;\nexport const LEGEND_WIDTH = 120;\n\n/** The column width a `left`/`right` legend takes; 0 for a row legend or none. */\nconst legendSide = (input: Sized): number => {\n const l = legendOptions(input);\n return l && (l.position === 'left' || l.position === 'right') ? (l.width ?? LEGEND_WIDTH) : 0;\n};\n\n/**\n * The layout size: the input's, or the defaults. A bottom legend takes its row off the height\n * and a side legend its column off the width here, and `canvas` gives them back, so every layout\n * leaves room for them without knowing.\n */\nexport const size = (input: Sized, w = 600, h = 300) => ({\n width: (input.width ?? w) - legendSide(input),\n height: (input.height ?? h) - (legendOptions(input)?.position === 'bottom' ? LEGEND_HEIGHT : 0),\n});\n\n/**\n * Vertical room the legend rows take above the plot, to shift the plot down by. Pass the legend\n * items and the layout width to reserve every wrapped row; without them one row is assumed.\n */\nexport const legendTop = (input: Sized, items?: LegendItem[], width?: number): number => {\n const l = legendOptions(input);\n if (!l || !(l.position === undefined || l.position === 'top')) return 0;\n const rows = items ? Math.max(1, legendRows(items, width ?? size(input).width, l)) : 1;\n return rows * LEGEND_HEIGHT;\n};\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/**\n * One row of swatches and names along the top edge (or from `top`), wrapping when it runs out\n * of width. Entries carry a legend item so clicks toggle the series, unless `interactive` is off.\n */\nexport function legendShapes(\n items: LegendItem[],\n width: number,\n hidden: string[] = [],\n options: LegendOptions = {},\n top = 10,\n left = 8,\n column = false,\n): Shape[] {\n const shapes: Shape[] = [];\n const max = options.maxItems;\n const shown = max !== undefined && max >= 0 && items.length > max ? items.slice(0, max) : items;\n const more = items.length - shown.length;\n const interactive = options.interactive ?? true;\n let x = left;\n let y = top;\n const place = (\n text: string,\n color: string | undefined,\n meta: ChartItem | undefined,\n off: boolean,\n ) => {\n const w = (color ? 18 : 4) + text.length * CHAR;\n // A column puts every entry on its own row; a row wraps when it runs out of width.\n if (x > left && (column || x + w > width - 8)) {\n x = left;\n y += LEGEND_HEIGHT;\n }\n if (color)\n shapes.push({\n kind: 'rect',\n part: 'legend-swatch',\n x,\n y: y - 5,\n width: 10,\n height: 10,\n fill: color,\n opacity: off ? 0.3 : undefined,\n item: meta,\n });\n shapes.push({\n kind: 'text',\n part: 'legend-label',\n x: x + (color ? 14 : 0),\n y,\n text,\n baseline: 'middle',\n fill: off ? CHART_COLORS.grid : CHART_COLORS.label,\n item: meta,\n });\n x += w + 12;\n };\n for (const item of shown) {\n const off = hidden.includes(item.name);\n const meta = interactive ? { label: item.name, series: item.name, legend: true } : undefined;\n place(options.formatter?.(item.name) ?? item.name, item.color, meta, off);\n }\n if (more > 0) place(`+${more} more`, undefined, undefined, false);\n return options.align === 'end' ? mirrorRows(shapes, width) : shapes;\n}\n\n/** Right-aligns each legend row inside `width` (for `direction: 'rtl'`), keeping entry order. */\nfunction mirrorRows(shapes: Shape[], width: number): Shape[] {\n const rows = new Map<number, Shape[]>();\n for (const s of shapes) {\n const y = s.kind === 'rect' ? s.y + 5 : (s as { y: number }).y;\n rows.set(y, [...(rows.get(y) ?? []), s]);\n }\n const out: Shape[] = [];\n for (const row of rows.values()) {\n const right = Math.max(\n ...row.map((s) =>\n s.kind === 'rect'\n ? s.x + s.width\n : (s as { x: number; text: string }).x + (s as { text: string }).text.length * CHAR,\n ),\n );\n const shift = width - 8 - right;\n for (const s of row) out.push({ ...s, x: (s as { x: number }).x + shift } as Shape);\n }\n return out;\n}\n\n/** Rows a legend of these items wraps onto at `width`. */\nexport const legendRows = (\n items: LegendItem[],\n width: number,\n options: LegendOptions = {},\n): number =>\n new Set(legendShapes(items, width, [], options).flatMap((s) => (s.kind === 'text' ? [s.y] : [])))\n .size;\n\n/**\n * The common tail of every layout: size, legend decorations, the tooltip switch and accessibility\n * passthroughs. A bottom legend is placed under `height` and the canvas grows to hold it.\n */\nexport function canvas(\n input: Sized,\n width: number,\n height: number,\n legend: LegendItem[] = [],\n): Canvas {\n const given = legendOptions(input);\n const options =\n given && input.direction === 'rtl' && given.align === undefined\n ? { ...given, align: 'end' as const }\n : given;\n const tooltip = tooltipOptions(input);\n const bottom = options?.position === 'bottom';\n const side = legendSide(input);\n const hidden = input.hiddenSeries ?? [];\n // A side legend is a column beside the laid-out width; a left one also asks `placeLegend` to\n // move every other shape right by its width, since the layout drew them from x = 0.\n const shapes = !options\n ? []\n : side\n ? legendShapes(\n legend,\n Infinity,\n hidden,\n options,\n 10,\n (options.position === 'right' ? width : 0) + 8,\n true,\n )\n : legendShapes(legend, width, hidden, options, bottom ? height + 10 : 10);\n const rows = bottom ? legendRows(legend, width, options) : 0;\n return {\n width: width + side,\n height: bottom ? height + Math.max(1, rows) * LEGEND_HEIGHT : height,\n legendOffset: options?.position === 'left' ? side : undefined,\n tooltip: tooltip.enabled,\n tooltipFormatter: tooltip.formatter,\n axisTooltipFormatter: tooltip.axisFormatter,\n tooltipPortal: tooltip.portal,\n tooltipPlacement: tooltip.placement,\n tooltipAnchored: tooltip.followPointer === false ? true : undefined,\n description: input.description,\n decorative: input.decorative,\n animate: input.animate === true ? 300 : input.animate || undefined,\n responsive: Boolean(input.responsive),\n shapes,\n };\n}\n\n/**\n * Moves the marks of a chart laid out with a left legend right by the legend's width, keeping the\n * hit, edit and map models aligned. The roots apply it after layout; `svgMarkup` consumers of a\n * raw layout call it themselves. Idempotent: a placed layout is returned as it is.\n */\nexport function placeLegend(layout: Canvas): Canvas {\n const dx = layout.legendOffset;\n if (!dx) return layout;\n const shapes = [\n ...translateShapes(\n layout.shapes.filter((s) => !s.part.startsWith('legend-')),\n dx,\n 0,\n ),\n ...layout.shapes.filter((s) => s.part.startsWith('legend-')),\n ];\n const box = (b: Box): Box => ({ ...b, x: b.x + dx });\n const hit = layout.hit\n ? {\n ...layout.hit,\n plot: box(layout.hit.plot),\n xs: layout.hit.xs.map((x) => x + dx),\n brush: layout.hit.brush\n ? { box: box(layout.hit.brush.box), window: box(layout.hit.brush.window) }\n : undefined,\n }\n : undefined;\n const e = layout.edit;\n const edit = e\n ? {\n ...e,\n scale: (v: number) => e.scale(v) + dx,\n invert: (x: number) => e.invert(x - dx),\n bars: e.bars.map((b) => ({ ...b, x0: b.x0 + dx, x1: b.x1 + dx })),\n }\n : undefined;\n const map = layout.map ? { ...layout.map, plot: box(layout.map.plot) } : undefined;\n return { ...layout, shapes, hit, edit, map, legendOffset: undefined };\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 placement: 'auto' | 'top' | 'bottom' | 'left' | 'right' = 'auto',\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 // `auto` sits above-right of the anchor and slides inside the canvas; a fixed placement\n // centres the box on the named side and is only clamped.\n const wanted =\n placement === 'top'\n ? { x: x - w / 2, y: y - h - 8 }\n : placement === 'bottom'\n ? { x: x - w / 2, y: y + 8 }\n : placement === 'left'\n ? { x: x - w - 8, y: y - h / 2 }\n : placement === 'right'\n ? { x: x + 8, y: y - h / 2 }\n : { x: x + 12, y: y - h - 6 };\n const bx = Math.max(0, Math.min(width - w, wanted.x));\n const by = Math.max(0, Math.min(height - h, wanted.y));\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 /** Identity and placement, for charts with several value axes. */\n id?: string | undefined;\n position?: 'left' | 'right' | 'top' | 'bottom' | undefined;\n /** Pixel offset of the axis line from the plot edge, outward. */\n offset?: number | undefined;\n /** The options the axis was built from, for tick marks, lines and titles. */\n options?: AxisOptions | undefined;\n}\n\n/**\n * A nice-ticked linear (log, or sqrt) axis over `[min, max]` mapped onto `range`, honouring\n * explicit bounds; `nice: false` keeps the exact extent.\n */\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.reversed) range = [range[1], range[0]];\n const meta = { id: opts.id, position: opts.position, options: opts };\n if (opts.scale === 'sqrt') {\n // Signed square root: the domain keeps its sign, ticks stay nice in value space.\n const sq = (v: number) => Math.sign(v) * Math.sqrt(Math.abs(v));\n const nice = opts.nice === false ? [lo, hi] : niceTicks(lo, hi, opts.ticks);\n const d0 = opts.min ?? (nice[0] as number);\n const d1 = opts.max ?? (nice[nice.length - 1] as number);\n const lin = linearScale([sq(d0), sq(d1)], range);\n const scale = (v: number) => lin(sq(v));\n const inside = niceTicks(d0, d1, opts.ticks).filter((v) => v >= d0 - 1e-9 && v <= d1 + 1e-9);\n return {\n ...meta,\n scale,\n domain: [d0, d1],\n format,\n ticks: (inside.length >= 2 ? inside : [d0, d1]).map((v) => ({\n pos: px(scale(v)),\n label: format(v),\n })),\n zero: px(scale(Math.min(Math.max(0, d0), d1))),\n };\n }\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 ...meta,\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, opts.ticks);\n // Explicit bounds win over the rounded ends; ticks outside them are dropped. `nice: false`\n // keeps the exact extent and only the ticks that fall inside it.\n const domain = [\n opts.min ?? (opts.nice === false ? lo : (nice[0] as number)),\n opts.max ?? (opts.nice === false ? hi : (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 ...meta,\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/**\n * Left (or right) margin wide enough for the widest tick label a value axis over `[lo, hi]` will\n * draw, never below the default. Charts measure it before laying out so a long label such as\n * \"$180.00\" is not clipped by the svg edge.\n */\nexport const valueAxisRoom = (\n [lo, hi]: readonly [number, number],\n format: (value: number) => string,\n): number =>\n Math.max(\n MARGIN.left,\n niceTicks(lo, hi).reduce((w, v) => Math.max(w, format(v).length), 0) * CHAR + 14,\n );\n\n/** Whether an axis draws its grid lines. */\nexport const gridOn = (opts: AxisOptions | undefined): boolean => opts?.grid !== false;\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 { CHAR } from './frame.js';\nimport { CHART_COLORS } from './palette.js';\nimport { px } from './scale.js';\nimport type { AxisOptions, ChartItem, Frame, Shape, Tick } from './types.js';\n\n/**\n * Anchor for a tick label centred at `pos`: `end` when half of it would run past `width`, `start`\n * when it would run past 0, else `middle`. The outermost tick sits on the plot edge, where a long\n * date or currency label would otherwise be clipped by the svg.\n */\nexport const tickAnchor = (\n pos: number,\n text: string,\n width: number,\n): 'start' | 'middle' | 'end' => {\n const half = (text.length * CHAR) / 2;\n if (pos + half > width) return 'end';\n if (pos - half < 0) return 'start';\n return 'middle';\n};\n\n/** Tick marks, axis line and label rotation of one axis. */\nexport type AxisDecor = Pick<AxisOptions, 'showLine' | 'showTicks' | 'tickSize' | 'tickRotation'>;\n\n/** One value axis of a chart with several: its ticks, side, outward offset and title. */\nexport interface ValueAxisSpec extends AxisDecor {\n ticks: Tick[];\n /** `top`/`bottom` for horizontal charts. */\n position: 'left' | 'right' | 'top' | 'bottom';\n /** Pixel distance from the plot edge, outward. */\n offset: number;\n label?: string | undefined;\n}\n\nexport interface FrameOptions {\n /** Ticks of the second value axis, drawn on the right edge. */\n rightTicks?: Tick[] | undefined;\n /** Every value axis; when given, wins over `yTicks`/`rightTicks` for the value labels. */\n axes?: ValueAxisSpec[] | undefined;\n /** Categories run down the left edge and values along the bottom. */\n horizontal?: boolean | undefined;\n /** Category labels on the right (RTL). */\n rtl?: boolean | undefined;\n xLabel?: string | undefined;\n yLabel?: string | undefined;\n rightLabel?: string | undefined;\n /** Grid lines at the value ticks. @default true */\n grid?: boolean | undefined;\n /** Grid lines at the category ticks. @default false */\n categoryGrid?: boolean | undefined;\n /** Tick marks, line and label rotation of the category axis. */\n x?: AxisDecor | undefined;\n /** Tick marks and line of the value axis, when `axes` is not given. */\n y?: AxisDecor | 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 const grid = options.grid ?? true;\n const gridLine = (t: Tick, vertical: boolean): Shape =>\n vertical\n ? {\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 : {\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 const rot = options.x?.tickRotation ?? 0;\n const rotated = (x: number, y: number, text: string, part: string): Shape =>\n rot\n ? label(x, y, text, {\n part,\n anchor: rot < 0 ? 'end' : 'start',\n baseline: 'middle',\n rotate: rot,\n })\n : label(x, y, text, { part, anchor: tickAnchor(x, text, frame.width) });\n // Short marks across an axis line at the ticks.\n const marks = (ticks: Tick[], along: 'x' | 'y', at: number, dir: number, size: number) => {\n for (const t of ticks)\n shapes.push(\n along === 'x'\n ? {\n kind: 'line',\n part: 'tick',\n x1: t.pos,\n x2: t.pos,\n y1: at,\n y2: px(at + dir * size),\n stroke: CHART_COLORS.axis,\n }\n : {\n kind: 'line',\n part: 'tick',\n x1: at,\n x2: px(at + dir * size),\n y1: t.pos,\n y2: t.pos,\n stroke: CHART_COLORS.axis,\n },\n );\n };\n if (options.categoryGrid) for (const t of xTicks) shapes.push(gridLine(t, !options.horizontal));\n if (options.horizontal) {\n // Value ticks along the bottom (extra axes stack below, or above the plot) with vertical grid\n // lines; category labels on the left (or right).\n const axes: ValueAxisSpec[] = options.axes ?? [\n { ticks: yTicks, position: 'bottom', offset: 0, label: options.yLabel, ...options.y },\n ];\n if (grid) for (const t of yTicks) shapes.push(gridLine(t, true));\n if (axes[0]?.showLine !== false)\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 a of axes) {\n const top = a.position === 'top' || a.position === 'right';\n const y = px(top ? plot.y - a.offset : bottom + a.offset);\n const stacked = top || a.offset > 0;\n if (a.showLine && stacked)\n shapes.push({\n kind: 'line',\n part: 'axis',\n x1: plot.x,\n x2: right,\n y1: y,\n y2: y,\n stroke: CHART_COLORS.axis,\n });\n if (a.showTicks) marks(a.ticks, 'x', y, top ? -1 : 1, a.tickSize ?? 4);\n const ly = px(top ? y - 8 : y + 20);\n for (const t of a.ticks)\n shapes.push(\n top\n ? label(t.pos, ly, t.label, {\n part: 'x-label-top',\n anchor: tickAnchor(t.pos, t.label, frame.width),\n })\n : rotated(t.pos, ly, t.label, 'x-label'),\n );\n // The first axis keeps its title at the top left; stacked axes title their own label row.\n if (a.label)\n shapes.push(\n stacked\n ? label(4, ly, a.label, {\n part: 'axis-title',\n anchor: 'start',\n baseline: top ? undefined : 'middle',\n })\n : label(4, plot.y - 6, a.label, { part: 'axis-title', anchor: 'start' }),\n );\n }\n if (options.x?.showLine)\n shapes.push({\n kind: 'line',\n part: 'axis',\n x1: options.rtl ? right : plot.x,\n x2: options.rtl ? right : plot.x,\n y1: plot.y,\n y2: bottom,\n stroke: CHART_COLORS.axis,\n });\n if (options.x?.showTicks)\n marks(\n xTicks,\n 'y',\n options.rtl ? right : plot.x,\n options.rtl ? 1 : -1,\n options.x.tickSize ?? 4,\n );\n for (const t of xTicks)\n shapes.push(\n options.rtl\n ? label(right + 8, t.pos, t.label, {\n part: 'y-label',\n anchor: 'start',\n baseline: 'middle',\n })\n : label(plot.x - 8, t.pos, t.label, {\n part: 'y-label',\n anchor: 'end',\n baseline: 'middle',\n }),\n );\n } else {\n if (grid) for (const t of yTicks) shapes.push(gridLine(t, false));\n if (options.y?.showLine !== false)\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 const axes: ValueAxisSpec[] = options.axes ?? [\n { ticks: yTicks, position: 'left', offset: 0, label: options.yLabel, ...options.y },\n ...(options.rightTicks\n ? [\n {\n ticks: options.rightTicks,\n position: 'right' as const,\n offset: 0,\n label: options.rightLabel,\n },\n ]\n : []),\n ];\n for (const a of axes) {\n const left = a.position === 'left';\n const x = left ? plot.x - a.offset : right + a.offset;\n const part = left ? 'y-label' : 'y-label-right';\n if (a.showLine)\n shapes.push({\n kind: 'line',\n part: 'axis',\n x1: px(x),\n x2: px(x),\n y1: plot.y,\n y2: bottom,\n stroke: CHART_COLORS.axis,\n });\n if (a.showTicks) marks(a.ticks, 'y', px(x), left ? -1 : 1, a.tickSize ?? 4);\n for (const t of a.ticks)\n shapes.push(\n label(px(left ? x - 8 : x + 8), t.pos, t.label, {\n part,\n anchor: left ? 'end' : 'start',\n baseline: 'middle',\n }),\n );\n // Titles sit at the canvas edges for the innermost axes and above stacked outer axes.\n if (a.label)\n shapes.push(\n label(\n px(\n left\n ? a.offset === 0\n ? 4\n : Math.max(4, x - 40)\n : a.offset === 0\n ? frame.width - 4\n : Math.min(frame.width - 4, x + 40),\n ),\n plot.y - 6,\n a.label,\n { part: 'axis-title', anchor: left ? 'start' : 'end' },\n ),\n );\n }\n if (options.x?.showTicks) marks(xTicks, 'x', bottom, 1, options.x.tickSize ?? 4);\n for (const t of xTicks)\n shapes.push(rotated(t.pos, bottom + (rot ? 12 : 20), t.label, 'x-label'));\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.horizontal) {\n if (options.rightLabel)\n shapes.push(\n label(frame.width - 4, plot.y - 6, options.rightLabel, {\n part: 'axis-title',\n anchor: 'end',\n }),\n );\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, variantTextColor } from './palette.js';\nimport { px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { Annotation, 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 = r.color ?? variantColor(r.variant);\n const text = r.color ?? variantTextColor(r.variant);\n const meta = { part: 'reference-label', fill: text } 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(\n ...vband(clampX(Math.min(a, b)), clampX(Math.max(a, b)), plot, color, r.label, text),\n );\n else\n shapes.push(\n ...hband(clampY(Math.min(a, b)), clampY(Math.max(a, b)), plot, color, r.label, text),\n );\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, text));\n else shapes.push(...vband(clampX(lo), clampX(hi), plot, color, r.label, text));\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(\n y1: number,\n y2: number,\n plot: Box,\n fill: string,\n text: string | undefined,\n textFill: string,\n): 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: textFill,\n anchor: 'end',\n }),\n ]\n : [band];\n}\n\nfunction vband(\n x1: number,\n x2: number,\n plot: Box,\n fill: string,\n text: string | undefined,\n textFill: string,\n): 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 ? [\n band,\n label(x1 + 4, plot.y + 12, text, {\n part: 'reference-label',\n fill: textFill,\n anchor: 'start',\n }),\n ]\n : [band];\n}\n\n/**\n * Annotations over the marks: lines and bands reuse the reference drawing; points, callouts,\n * text and rectangles are placed at `(x, y)` in data coordinates. Each carries its label as a\n * `<title>` and an item, so it is hoverable and a keyboard stop.\n */\nexport function annotationShapes(\n annotations: Annotation[] | undefined,\n s: ReferenceScales,\n): Shape[] {\n const shapes: Shape[] = [];\n const { plot } = s;\n const right = plot.x + plot.width;\n const bottom = plot.y + plot.height;\n for (const a of annotations ?? []) {\n const color = a.color ?? variantColor(a.variant);\n const textColor = a.color ?? variantTextColor(a.variant);\n const at = (x: Category, y: number, axis: 'left' | 'right' | undefined) => {\n const cx = s.x(x);\n if (cx === undefined) return undefined;\n const cy = s.y(y, axis ?? 'left');\n // Horizontal orientation swaps the axes: categories run down y.\n return s.horizontal ? { x: px(cy), y: px(cx) } : { x: px(cx), y: px(cy) };\n };\n const id = a.id ?? a.label;\n const item = (label: string) => ({ label, id, name: a.label });\n if (a.type === 'line' || a.type === 'band') {\n const { type: _type, id: _id, ...ref } = a;\n shapes.push(...referenceShapes([ref], s));\n continue;\n }\n if (a.type === 'rect') {\n const p0 = at(a.x1, a.y1, a.axis);\n const p1 = at(a.x2, a.y2, a.axis);\n if (!p0 || !p1) continue;\n const x = Math.max(plot.x, Math.min(p0.x, p1.x));\n const y = Math.max(plot.y, Math.min(p0.y, p1.y));\n const title = a.label ?? '';\n shapes.push({\n kind: 'rect',\n part: 'annotation-rect',\n x: px(x),\n y: px(y),\n width: px(Math.max(0, Math.min(right, Math.max(p0.x, p1.x)) - x)),\n height: px(Math.max(0, Math.min(bottom, Math.max(p0.y, p1.y)) - y)),\n fill: color,\n opacity: 0.12,\n stroke: color,\n title: title || undefined,\n item: title ? item(title) : undefined,\n });\n if (a.label)\n shapes.push(\n label(px(x + 4), px(y + 12), a.label, { part: 'annotation-label', fill: textColor }),\n );\n continue;\n }\n const p = at(a.x, a.y, a.axis);\n if (!p) continue;\n if (a.type === 'text') {\n shapes.push(\n label(p.x, p.y, a.text, {\n part: 'annotation-text',\n fill: textColor,\n anchor: 'middle',\n baseline: 'middle',\n title: a.label,\n }),\n );\n continue;\n }\n const title = a.label ?? `${String(a.x)}, ${a.y}`;\n shapes.push({\n kind: 'circle',\n part: 'annotation-point',\n cx: p.x,\n cy: p.y,\n r: 5,\n fill: color,\n stroke: 'var(--skdx-color-surface-default)',\n title,\n item: item(title),\n });\n if (a.type === 'callout' && a.label) {\n const [dx, dy] = a.offset ?? [16, -16];\n const tx = px(Math.max(plot.x, Math.min(right, p.x + dx)));\n const ty = px(Math.max(plot.y, Math.min(bottom, p.y + dy)));\n shapes.push(\n {\n kind: 'line',\n part: 'annotation-leader',\n x1: p.x,\n y1: p.y,\n x2: tx,\n y2: ty,\n stroke: color,\n },\n label(tx, ty, a.label, {\n part: 'annotation-label',\n fill: textColor,\n anchor: dx >= 0 ? 'start' : 'end',\n baseline: 'middle',\n }),\n );\n }\n }\n return 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 { isFinite } from './scale.js';\nimport type { Sampling, Value } from './types.js';\n\n/*\n * Point reduction for dense series. Both strategies return the *indexes* to keep, in order, so\n * the caller can slice categories and every series consistently and items keep their original\n * index. Gaps (`null`) are always kept so the line still breaks where the data does.\n */\n\n/** Above this many visible points `sampling: 'auto'` kicks in. */\nexport const SAMPLING_THRESHOLD = 2000;\n\n/** The threshold and strategy a `Sampling` option resolves to; `undefined` when sampling is off. */\nexport function samplingOptions(\n sampling: Sampling | undefined,\n): { strategy: 'lttb' | 'minmax' | 'm4'; threshold: number } | undefined {\n if (sampling === 'none') return undefined;\n if (sampling === undefined || sampling === 'auto')\n return { strategy: 'lttb', threshold: SAMPLING_THRESHOLD };\n if (typeof sampling === 'string') return { strategy: sampling, threshold: SAMPLING_THRESHOLD };\n return { strategy: sampling.strategy, threshold: sampling.threshold ?? SAMPLING_THRESHOLD };\n}\n\n/**\n * Largest-Triangle-Three-Buckets (Steinarsson 2013): keeps the point of each bucket that forms\n * the largest triangle with the previous kept point and the next bucket's average, so peaks and\n * the visual shape survive. Returns the kept indexes into `values`.\n */\nexport function lttb(values: readonly Value[], threshold: number): number[] {\n const n = values.length;\n if (threshold >= n || threshold < 3) return values.map((_, i) => i);\n const kept: number[] = [0];\n // Gaps are kept on top of the budget so the line still breaks where the data does.\n const gaps: number[] = [];\n const size = (n - 2) / (threshold - 2);\n let a = 0;\n for (let i = 0; i < threshold - 2; i++) {\n const start = Math.floor((i + 1) * size) + 1;\n const end = Math.min(n - 1, Math.floor((i + 2) * size) + 1);\n // Average of the next bucket.\n let ax = 0;\n let ay = 0;\n let count = 0;\n for (let k = start; k < end; k++) {\n const v = values[k];\n if (!isFinite(v)) continue;\n ax += k;\n ay += v;\n count++;\n }\n ax = count ? ax / count : (start + end) / 2;\n ay = count ? ay / count : 0;\n const lo = Math.floor(i * size) + 1;\n const hi = Math.min(n - 1, Math.floor((i + 1) * size) + 1);\n const pa = values[a];\n const ya = isFinite(pa) ? pa : 0;\n let best = -1;\n let bestArea = -1;\n for (let k = lo; k < hi; k++) {\n const v = values[k];\n if (!isFinite(v)) {\n gaps.push(k);\n continue;\n }\n const area = Math.abs((a - ax) * (v - ya) - (a - k) * (ay - ya));\n if (area > bestArea) {\n bestArea = area;\n best = k;\n }\n }\n if (best < 0) best = lo;\n kept.push(best);\n a = best;\n }\n kept.push(n - 1);\n return gaps.length ? [...new Set([...kept, ...gaps])].sort((x, y) => x - y) : kept;\n}\n\n/** Keeps the minimum and maximum of each of `threshold / 2` equal buckets, plus every gap. */\nexport function minMaxSample(values: readonly Value[], threshold: number): number[] {\n const n = values.length;\n const buckets = Math.max(1, Math.floor(threshold / 2));\n if (buckets * 2 >= n) return values.map((_, i) => i);\n const kept: number[] = [];\n const size = n / buckets;\n for (let b = 0; b < buckets; b++) {\n const start = Math.floor(b * size);\n const end = b === buckets - 1 ? n : Math.floor((b + 1) * size);\n let lo = -1;\n let hi = -1;\n for (let k = start; k < end; k++) {\n const v = values[k];\n if (!isFinite(v)) {\n kept.push(k);\n continue;\n }\n if (lo < 0 || v < (values[lo] as number)) lo = k;\n if (hi < 0 || v > (values[hi] as number)) hi = k;\n }\n if (lo >= 0) kept.push(Math.min(lo, hi));\n if (hi >= 0 && hi !== lo) kept.push(Math.max(lo, hi));\n }\n return [...new Set(kept)].sort((a, b) => a - b);\n}\n\n/**\n * M4 (Jugel et al. 2014): keeps the first, last, minimum and maximum of each of `threshold / 4`\n * equal buckets, which reproduces a line chart pixel-exactly at that width. Gaps are kept.\n */\nexport function m4(values: readonly Value[], threshold: number): number[] {\n const n = values.length;\n const buckets = Math.max(1, Math.floor(threshold / 4));\n if (buckets * 4 >= n) return values.map((_, i) => i);\n const kept: number[] = [];\n const size = n / buckets;\n for (let b = 0; b < buckets; b++) {\n const start = Math.floor(b * size);\n const end = b === buckets - 1 ? n : Math.floor((b + 1) * size);\n let lo = -1;\n let hi = -1;\n let first = -1;\n let last = -1;\n for (let k = start; k < end; k++) {\n const v = values[k];\n if (!isFinite(v)) {\n kept.push(k);\n continue;\n }\n if (first < 0) first = k;\n last = k;\n if (lo < 0 || v < (values[lo] as number)) lo = k;\n if (hi < 0 || v > (values[hi] as number)) hi = k;\n }\n for (const k of [first, lo, hi, last]) if (k >= 0) kept.push(k);\n }\n return [...new Set(kept)].sort((a, b) => a - b);\n}\n\n/**\n * Indexes to keep for a set of series sharing one category axis: the union of each series'\n * sample, so every series keeps its own extremes. `undefined` when nothing needs sampling.\n */\nexport function sampleIndexes(\n series: readonly (readonly Value[])[],\n count: number,\n sampling: Sampling | undefined,\n): number[] | undefined {\n const opts = samplingOptions(sampling);\n if (!opts || count <= opts.threshold || series.length === 0) return undefined;\n const pick = opts.strategy === 'minmax' ? minMaxSample : opts.strategy === 'm4' ? m4 : lttb;\n const kept = new Set<number>();\n for (const s of series) for (const i of pick(s.slice(0, count), opts.threshold)) kept.add(i);\n return [...kept].sort((a, b) => a - b);\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 } from './frame.js';\nimport { CHART_COLORS } from './palette.js';\nimport { minMax, px } from './scale.js';\nimport type { Box, ColorLegendOptions, ColorScale, Shape } from './types.js';\n\n/** A resolved color scale: value → fill and opacity, plus what its legend needs. */\nexport interface ResolvedColorScale {\n /** Fill and opacity for a value; `undefined` for a non-finite value. */\n color: (value: number | null | undefined) => { fill: string; opacity: number } | undefined;\n /** The value range the scale covers. */\n domain: readonly [number, number];\n /** Legend swatches, low to high: a representative value (or class label) per swatch. */\n swatches: { fill: string; opacity: number; label: string }[];\n kind: ColorScale['type'];\n}\n\nconst clamp01 = (t: number) => Math.max(0, Math.min(1, t));\n\n/** `[r, g, b]` of a `#rgb`, `#rrggbb` or `rgb(r, g, b)` color; `undefined` for anything else. */\nexport function parseColor(c: string): [number, number, number] | undefined {\n const hex = /^#([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(c.trim());\n if (hex) {\n const h = hex[1] as string;\n const full =\n h.length === 3\n ? h\n .split('')\n .map((ch) => ch + ch)\n .join('')\n : h;\n return [0, 2, 4].map((i) => parseInt(full.slice(i, i + 2), 16)) as [number, number, number];\n }\n const rgb = /^rgba?\\(\\s*(\\d+)[\\s,]+(\\d+)[\\s,]+(\\d+)/i.exec(c.trim());\n return rgb ? [Number(rgb[1]), Number(rgb[2]), Number(rgb[3])] : undefined;\n}\n\n/**\n * The color at `t` (0–1) along the stops: interpolated in RGB when every stop is a concrete\n * color, else the nearest stop (token colors such as `var(--skdx-color-primary-500)` cannot be\n * mixed in the core, so they quantize).\n */\nexport function mixStops(stops: string[], t: number): string {\n if (stops.length === 0) return CHART_COLORS.axis;\n if (stops.length === 1) return stops[0] as string;\n const pos = clamp01(t) * (stops.length - 1);\n const i = Math.min(stops.length - 2, Math.floor(pos));\n const f = pos - i;\n const a = parseColor(stops[i] as string);\n const b = parseColor(stops[i + 1] as string);\n if (!a || !b) return stops[Math.round(pos)] as string;\n const mix = (k: 0 | 1 | 2) => Math.round(a[k] + (b[k] - a[k]) * f);\n return `rgb(${mix(0)}, ${mix(1)}, ${mix(2)})`;\n}\n\nconst quantize = (t: number, steps: number | undefined) =>\n steps !== undefined && steps >= 2\n ? Math.min(steps - 1, Math.floor(clamp01(t) * steps)) / (steps - 1)\n : clamp01(t);\n\n/**\n * Resolves a `ColorScale` over the data extent. Without explicit stops a sequential scale is\n * `baseColor` at an opacity ramp (0.15–1) and a diverging scale splits `negativeColor` /\n * `baseColor` around zero, which is what the heatmap and map always did.\n */\nexport function makeColorScale(\n scale: ColorScale | undefined,\n values: Iterable<number | null | undefined>,\n baseColor: string,\n negativeColor: string = CHART_COLORS.negative,\n format: (v: number) => string = String,\n): ResolvedColorScale {\n const [lo, hi] = minMax(values);\n const s = scale ?? { type: 'sequential' };\n const ramp = (t: number) => px(0.15 + 0.85 * t);\n if (s.type === 'threshold') {\n const { thresholds, colors, labels } = s;\n const color = (v: number | null | undefined) => {\n if (typeof v !== 'number' || !Number.isFinite(v)) return undefined;\n let i = 0;\n while (i < thresholds.length && v >= (thresholds[i] as number)) i++;\n return { fill: colors[Math.min(i, colors.length - 1)] ?? baseColor, opacity: 1 };\n };\n const swatches = colors.map((fill, i) => ({\n fill,\n opacity: 1,\n label:\n labels?.[i] ??\n (i === 0\n ? `< ${format(thresholds[0] ?? 0)}`\n : i === thresholds.length\n ? `≥ ${format(thresholds[i - 1] as number)}`\n : `${format(thresholds[i - 1] as number)} – ${format(thresholds[i] as number)}`),\n }));\n return { color, domain: [lo, hi], swatches, kind: 'threshold' };\n }\n if (s.type === 'ordinal') {\n const colors = s.colors?.length ? s.colors : [baseColor];\n const color = (v: number | null | undefined) =>\n typeof v === 'number' && Number.isFinite(v)\n ? { fill: colors[Math.abs(Math.round(v)) % colors.length] as string, opacity: 1 }\n : undefined;\n return {\n color,\n domain: [lo, hi],\n swatches: colors.map((fill, i) => ({ fill, opacity: 1, label: String(i) })),\n kind: 'ordinal',\n };\n }\n if (s.type === 'diverging') {\n const [min, mid, max] = s.domain ?? [\n -Math.max(Math.abs(lo), Math.abs(hi)),\n 0,\n Math.max(Math.abs(lo), Math.abs(hi)),\n ];\n const stops = s.colors;\n const t = (v: number) =>\n v < mid\n ? (0.5 * (v - min)) / Math.max(1e-12, mid - min)\n : 0.5 + (0.5 * (v - mid)) / Math.max(1e-12, max - mid);\n const at = (tt: number) => {\n const q = quantize(s.reversed ? 1 - clamp01(tt) : tt, s.steps);\n if (stops && stops.length >= 2) return { fill: mixStops(stops, q), opacity: 1 };\n // Two-sided opacity ramp: distance from the midpoint decides the strength, the side the color.\n const side = q < 0.5 ? negativeColor : baseColor;\n const strength = Math.abs(q - 0.5) * 2;\n return { fill: side, opacity: ramp(strength) };\n };\n const color = (v: number | null | undefined) =>\n typeof v === 'number' && Number.isFinite(v) ? at(t(v)) : undefined;\n const n = s.steps ?? 5;\n const swatches = Array.from({ length: n }, (_, i) => {\n const tt = n === 1 ? 0.5 : i / (n - 1);\n const v = tt < 0.5 ? min + (mid - min) * (tt * 2) : mid + (max - mid) * ((tt - 0.5) * 2);\n return { ...at(tt), label: format(v) };\n });\n return { color, domain: [min, max], swatches, kind: 'diverging' };\n }\n const [min, max] = s.domain ?? [lo, hi];\n const stops = s.colors;\n const at = (tt: number) => {\n const q = quantize(s.reversed ? 1 - clamp01(tt) : tt, s.steps);\n return stops && stops.length >= 2\n ? { fill: mixStops(stops, q), opacity: 1 }\n : { fill: stops?.[0] ?? baseColor, opacity: ramp(q) };\n };\n const color = (v: number | null | undefined) =>\n typeof v !== 'number' || !Number.isFinite(v)\n ? undefined\n : at(max === min ? 1 : (v - min) / (max - min));\n const n = s.steps ?? 5;\n const swatches = Array.from({ length: n }, (_, i) => {\n const tt = n === 1 ? 1 : i / (n - 1);\n return { ...at(tt), label: format(min + (max - min) * tt) };\n });\n return { color, domain: [min, max], swatches, kind: 'sequential' };\n}\n\n/** Vertical room a horizontal color legend takes under a plot. */\nexport const COLOR_LEGEND_HEIGHT = 34;\n/** Horizontal room a vertical color legend takes beside a plot. */\nexport const COLOR_LEGEND_WIDTH = 72;\n\n/** The room a `colorLegend` option reserves: a strip under the plot, or a column at its right. */\nexport function colorLegendRoom(option: boolean | ColorLegendOptions | undefined): {\n bottom: number;\n right: number;\n options: ColorLegendOptions;\n} {\n if (!option) return { bottom: 0, right: 0, options: {} };\n const options = option === true ? {} : option;\n return options.orientation === 'vertical'\n ? { bottom: 0, right: COLOR_LEGEND_WIDTH, options }\n : { bottom: COLOR_LEGEND_HEIGHT, right: 0, options };\n}\n\n/**\n * The color scale as swatches: a horizontal strip with labels underneath laid across `box`, or\n * (`orientation: 'vertical'`) a column of swatches down `box` with labels to the right.\n */\nexport function colorLegendShapes(\n scale: ResolvedColorScale,\n box: Box,\n options?: string | ColorLegendOptions,\n): Shape[] {\n const opts: ColorLegendOptions =\n typeof options === 'string' ? { title: options } : (options ?? {});\n const title = opts.title;\n const swatches = scale.swatches;\n if (swatches.length === 0 || box.width <= 0) return [];\n if (opts.orientation === 'vertical') {\n const room = Math.max(0, box.height - (title ? 16 : 0));\n const h = Math.min(16, room / swatches.length);\n const y0 = box.y + (title ? 16 : 0);\n const shapes: Shape[] = swatches.map((s, i): Shape => ({\n kind: 'rect',\n part: 'color-legend-swatch',\n x: px(box.x),\n y: px(y0 + i * h),\n width: 10,\n height: px(h),\n fill: s.fill,\n opacity: s.opacity,\n title: s.label,\n }));\n // A label per swatch while rows are tall enough for text; else every other row.\n const every = h >= 12 ? 1 : 2;\n swatches.forEach((s, i) => {\n if (i % every !== 0 && i !== swatches.length - 1) return;\n shapes.push({\n kind: 'text',\n part: 'color-legend-label',\n x: px(box.x + 14),\n y: px(y0 + (i + 0.5) * h),\n text: s.label,\n baseline: 'middle',\n fill: CHART_COLORS.label,\n });\n });\n if (title)\n shapes.push({\n kind: 'text',\n part: 'color-legend-title',\n x: px(box.x),\n y: px(box.y + 6),\n text: title,\n baseline: 'middle',\n fill: CHART_COLORS.label,\n });\n return shapes;\n }\n const w = Math.min(box.width / swatches.length, 96);\n const x0 = box.x + (box.width - w * swatches.length) / 2;\n const shapes: Shape[] = swatches.map((s, i): Shape => ({\n kind: 'rect',\n part: 'color-legend-swatch',\n x: px(x0 + i * w),\n y: px(box.y),\n width: px(w),\n height: 10,\n fill: s.fill,\n opacity: s.opacity,\n title: s.label,\n }));\n // Labels: every class for threshold scales, else the ends and the middle, thinned to what fits.\n const every =\n scale.kind === 'threshold'\n ? 1\n : Math.max(1, Math.ceil((swatches.length * 7 * CHAR) / Math.max(1, w * swatches.length)));\n swatches.forEach((s, i) => {\n if (i % every !== 0 && i !== swatches.length - 1) return;\n shapes.push({\n kind: 'text',\n part: 'color-legend-label',\n x: px(x0 + (i + 0.5) * w),\n y: px(box.y + 22),\n text: s.label,\n anchor: 'middle',\n fill: CHART_COLORS.label,\n });\n });\n if (title)\n shapes.push({\n kind: 'text',\n part: 'color-legend-title',\n x: px(x0 - 6),\n y: px(box.y + 5),\n text: title,\n anchor: 'end',\n baseline: 'middle',\n fill: CHART_COLORS.label,\n });\n return 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 { colorLegendRoom, colorLegendShapes, makeColorScale } from './colors.js';\nimport { categoryValue, makeFormatter } from './format.js';\nimport {\n axis,\n canvas,\n CHAR,\n colorOf,\n extent,\n isHidden,\n legendTop,\n MARGIN,\n plotBox,\n size,\n stateCanvas,\n type Axis,\n} from './frame.js';\nimport { annotationShapes, referenceShapes } from './reference.js';\nimport { isFinite, minMax, pathThrough, px } from './scale.js';\nimport { frameShapes, label, point } from './shapes.js';\nimport type {\n Canvas,\n Category,\n ChartDataIssue,\n ChartItem,\n ChartItemId,\n MarkerSymbol,\n ScatterChartInput,\n ScatterPoint,\n Shape,\n} from './types.js';\n\n/** Above this many points `sampling: 'auto'` keeps every k-th point. */\nexport const SCATTER_SAMPLING_THRESHOLD = 10_000;\n\n/** A point in one shape, whichever input form it came in. */\nexport interface Dot {\n x: number;\n y: number;\n size: number | undefined;\n label: string | undefined;\n id: ChartItemId | undefined;\n color: string | undefined;\n /** The quantity a color scale maps. */\n value: number | undefined;\n}\n\nconst toDot = (p: ScatterPoint): Dot =>\n Array.isArray(p)\n ? {\n x: p[0],\n y: p[1],\n size: p[2],\n label: undefined,\n id: undefined,\n color: undefined,\n value: undefined,\n }\n : { x: p.x, y: p.y, size: p.size, label: p.label, id: p.id, color: p.color, value: p.value };\n\n/** A marker of the given symbol centred on `(cx, cy)`; circles stay circles for the animation contract. */\nexport function marker(\n cx: number,\n cy: number,\n r: number,\n symbol: MarkerSymbol,\n fill: string,\n title: string | undefined,\n item: ChartItem | undefined,\n part: string,\n): Shape {\n if (symbol === 'circle') return { ...point(cx, cy, r, fill, title, item), part };\n const d =\n symbol === 'square'\n ? `M${px(cx - r)} ${px(cy - r)}h${px(2 * r)}v${px(2 * r)}h${px(-2 * r)}Z`\n : symbol === 'diamond'\n ? `M${px(cx)} ${px(cy - r * 1.3)}L${px(cx + r * 1.3)} ${px(cy)}L${px(cx)} ${px(cy + r * 1.3)}L${px(cx - r * 1.3)} ${px(cy)}Z`\n : `M${px(cx)} ${px(cy - r * 1.2)}L${px(cx + r * 1.15)} ${px(cy + r * 0.9)}L${px(cx - r * 1.15)} ${px(cy + r * 0.9)}Z`;\n return { kind: 'path', part, d, fill, title, item };\n}\n\nexport interface PointsOptions {\n /** Radius for a point's size over the whole data's size extent. */\n radius: (size: number | undefined, extent: readonly [number, number]) => number;\n /** Tooltip text of a point. */\n describe: (series: string, dot: Dot, x: Axis, y: Axis) => string;\n part: 'point' | 'bubble';\n opacity?: number | undefined;\n}\n\n/** Dots (or bubbles) on two linear axes: the engine behind ScatterChart and BubbleChart. */\nexport function layoutPoints(input: ScatterChartInput, options: PointsOptions): Canvas {\n const issues: ChartDataIssue[] = [];\n const all = input.series.map((s, i) => ({\n name: s.name,\n id: s.id,\n symbol: s.symbol ?? 'circle',\n color: colorOf(input, i, s.color),\n data: isHidden(input, s.name)\n ? []\n : s.data.flatMap((p, index) => {\n const d = toDot(p);\n return isFinite(d.x) && isFinite(d.y) ? [{ ...d, index }] : [];\n }),\n }));\n // Systematic sampling above the threshold: every k-th point, indexes kept, reported once.\n const threshold =\n input.sampling === 'auto'\n ? SCATTER_SAMPLING_THRESHOLD\n : typeof input.sampling === 'object'\n ? input.sampling.threshold\n : Infinity;\n const count = all.reduce((n, s) => n + s.data.length, 0);\n const every = count > threshold ? Math.ceil(count / threshold) : 1;\n if (every > 1)\n issues.push({\n code: 'sampled',\n severity: 'warning',\n message: `${count} points exceed the sampling threshold of ${threshold}; every ${every}th point is drawn.`,\n });\n const shown =\n every > 1 ? all.map((s) => ({ ...s, data: s.data.filter((_, k) => k % every === 0) })) : all;\n const dots = shown.flatMap((s) => s.data);\n const state = stateCanvas(input, dots.length === 0);\n if (state) return { ...state, issues };\n const { width, height } = size(input);\n const legendRoom = input.colorScale\n ? colorLegendRoom(input.colorLegend)\n : { bottom: 0, right: 0, options: {} };\n const plot = plotBox(width, height, {\n ...MARGIN,\n top: MARGIN.top + legendTop(input) + (input.yAxis?.label ? 12 : 0),\n right: MARGIN.right + legendRoom.right,\n bottom: MARGIN.bottom + (input.xAxis?.label ? 14 : 0) + legendRoom.bottom,\n });\n const markerSize = input.markerSize ?? 3;\n const hitRadius = Math.max(0, input.hitRadius ?? 0);\n const jitter = Math.max(0, input.jitter ?? 0);\n // Duplicates at one pixel are spread deterministically on a ring around it.\n const seen = new Map<string, number>();\n // A color scale maps each dot's `value`; dots without one keep their series color.\n const colors = input.colorScale\n ? makeColorScale(\n input.colorScale,\n dots.map((d) => d.value),\n colorOf(input, 0),\n undefined,\n makeFormatter(input.format),\n )\n : undefined;\n const x = axis(\n extent(\n dots.map((p) => p.x),\n false,\n ),\n [plot.x, plot.x + plot.width],\n input.xAxis ?? {},\n input.format,\n );\n const y = axis(\n extent(\n dots.map((p) => p.y),\n false,\n ),\n [plot.y + plot.height, plot.y],\n input.yAxis ?? {},\n input.format,\n );\n const sizes = minMax(dots.map((p) => p.size));\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 texts: Shape[] = [];\n const trends: Shape[] = [];\n // Labels that would cover an earlier label are dropped; the tooltip still carries them.\n const boxes: { x: number; y: number; w: number }[] = [];\n for (const s of shown) {\n const sized = s.data.some((p) => p.size !== undefined);\n for (const dot of s.data) {\n const di = dot.index;\n const title = options.describe(s.name, dot, x, y);\n const r = sized ? options.radius(dot.size, sizes) : markerSize;\n let cx = px(x.scale(dot.x));\n let cy = px(y.scale(dot.y));\n if (jitter > 0) {\n const key = `${Math.round(cx)},${Math.round(cy)}`;\n const k = seen.get(key) ?? 0;\n seen.set(key, k + 1);\n if (k > 0) {\n const a = k * 2.399963;\n cx = px(cx + jitter * Math.cos(a));\n cy = px(cy + jitter * Math.sin(a));\n }\n }\n const scaled = colors?.color(dot.value);\n const item: ChartItem = {\n label: title,\n id: dot.id,\n series: s.name,\n seriesId: s.id ?? s.name,\n name: dot.label,\n index: di,\n value: dot.y,\n };\n const fill = dot.color ?? scaled?.fill ?? s.color;\n marks.push(\n marker(cx, cy, px(r), s.symbol, fill, title, item, sized ? options.part : 'point'),\n );\n // An invisible, larger twin widens the pointer target without changing the drawing.\n if (hitRadius > 0)\n marks.push({\n kind: 'circle',\n part: 'hit',\n cx,\n cy,\n r: px(r + hitRadius),\n fill,\n opacity: 0,\n title,\n item,\n });\n if (input.labels && dot.label) {\n const w = dot.label.length * CHAR;\n const lx = cx - w / 2;\n const ly = cy - r - 4;\n if (!boxes.some((b) => Math.abs(b.y - ly) < 12 && lx < b.x + b.w + 4 && lx + w + 4 > b.x)) {\n boxes.push({ x: lx, y: ly, w });\n texts.push(\n label(cx, px(ly), dot.label, {\n part: 'point-label',\n anchor: 'middle',\n fill: 'var(--skdx-color-text-default)',\n }),\n );\n }\n }\n }\n if (input.trendline && s.data.length >= 2) {\n const type = input.trendline === true ? 'linear' : input.trendline;\n const fit = fitCurve(\n s.data.map((p) => [p.x, p.y]),\n type,\n );\n if (fit) {\n const [x0, x1] = x.domain;\n const title = `${s.name} trend${type === 'linear' ? '' : ` (${type})`}: r² ${fit.r2.toFixed(2)}`;\n const stroke = s.color;\n if (type === 'linear')\n trends.push({\n kind: 'line',\n part: 'trendline',\n x1: px(x.scale(x0)),\n y1: px(y.scale(fit.predict(x0))),\n x2: px(x.scale(x1)),\n y2: px(y.scale(fit.predict(x1))),\n stroke,\n dash: '5 4',\n strokeWidth: 1.5,\n title,\n });\n else {\n // Curved fits are sampled across the x domain; undefined stretches (log of x ≤ 0) break the path.\n const pts = Array.from({ length: 40 }, (_, k) => x0 + ((x1 - x0) * k) / 39)\n .map((v) => ({ v, p: fit.predict(v) }))\n .filter(({ p }) => Number.isFinite(p))\n .map(({ v, p }) => ({ x: px(x.scale(v)), y: px(y.scale(p)) }));\n if (pts.length > 1)\n trends.push({\n kind: 'path',\n part: 'trendline',\n d: pathThrough(pts),\n stroke,\n dash: '5 4',\n strokeWidth: 1.5,\n title,\n });\n }\n }\n }\n }\n const frame = { ...c, plot, xTicks: x.ticks, yTicks: y.ticks, baseline: y.zero };\n const scales = {\n plot,\n x: (v: Category) => x.scale(categoryValue(v)),\n y: (v: number) => y.scale(v),\n };\n const references = referenceShapes(input.references, scales);\n const legendShapes =\n colors && (legendRoom.bottom || legendRoom.right)\n ? colorLegendShapes(\n colors,\n legendRoom.right\n ? {\n x: plot.x + plot.width + 12,\n y: plot.y,\n width: legendRoom.right,\n height: plot.height,\n }\n : {\n x: plot.x,\n y: height - legendRoom.bottom + 8,\n width: plot.width,\n height: legendRoom.bottom,\n },\n legendRoom.options,\n )\n : [];\n const opacity = options.opacity;\n return {\n ...c,\n shapes: [\n ...frameShapes(frame, { xLabel: input.xAxis?.label, yLabel: input.yAxis?.label }),\n ...references,\n ...(opacity !== undefined && marks.some((m) => m.part === options.part)\n ? marks.map((m) =>\n (m.kind === 'circle' || m.kind === 'path') && m.part !== 'hit' ? { ...m, opacity } : m,\n )\n : marks),\n ...trends,\n ...texts,\n ...annotationShapes(input.annotations, scales),\n ...legendShapes,\n ...c.shapes,\n ],\n issues,\n };\n}\n\nexport type TrendType = 'linear' | 'exponential' | 'logarithmic' | 'power' | 'polynomial';\n\n/**\n * Least-squares fit of `[x, y]` pairs: a line, `y = a·e^(bx)` (y > 0), `y = a + b·ln x` (x > 0),\n * `y = a·x^b` (x, y > 0), or a quadratic. The log forms are linear fits in log space; r² is\n * always measured on the original scale. `undefined` when there is nothing to fit.\n */\nexport function fitCurve(\n pairs: [number, number][],\n type: TrendType = 'linear',\n): { predict: (x: number) => number; r2: number } | undefined {\n let predict: ((x: number) => number) | undefined;\n if (type === 'polynomial') {\n // Normal equations for a·x² + b·x + c, solved by Cramer's rule.\n let s0 = 0;\n let s1 = 0;\n let s2 = 0;\n let s3 = 0;\n let s4 = 0;\n let t0 = 0;\n let t1 = 0;\n let t2 = 0;\n for (const [x, y] of pairs) {\n s0 += 1;\n s1 += x;\n s2 += x * x;\n s3 += x ** 3;\n s4 += x ** 4;\n t0 += y;\n t1 += x * y;\n t2 += x * x * y;\n }\n const det = (m: number[]) =>\n (m[0] as number) *\n ((m[4] as number) * (m[8] as number) - (m[5] as number) * (m[7] as number)) -\n (m[1] as number) *\n ((m[3] as number) * (m[8] as number) - (m[5] as number) * (m[6] as number)) +\n (m[2] as number) *\n ((m[3] as number) * (m[7] as number) - (m[4] as number) * (m[6] as number));\n const m = [s4, s3, s2, s3, s2, s1, s2, s1, s0];\n const D = det(m);\n if (Math.abs(D) < 1e-12) return undefined;\n const a = det([t2, s3, s2, t1, s2, s1, t0, s1, s0]) / D;\n const b = det([s4, t2, s2, s3, t1, s1, s2, t0, s0]) / D;\n const c = det([s4, s3, t2, s3, s2, t1, s2, s1, t0]) / D;\n predict = (x) => a * x * x + b * x + c;\n } else {\n const fx = type === 'logarithmic' || type === 'power' ? Math.log : (v: number) => v;\n const fy = type === 'exponential' || type === 'power' ? Math.log : (v: number) => v;\n const usable = pairs.filter(([x, y]) => Number.isFinite(fx(x)) && Number.isFinite(fy(y)));\n const line = leastSquares(usable.map(([x, y]) => [fx(x), fy(y)]));\n if (!line) return undefined;\n const back = type === 'exponential' || type === 'power' ? Math.exp : (v: number) => v;\n predict = (x) => back(line.intercept + line.slope * fx(x));\n }\n const fit = predict;\n const used = pairs.filter(([x]) => Number.isFinite(fit(x)));\n if (used.length === 0) return undefined;\n const mean = used.reduce((s, [, y]) => s + y, 0) / used.length;\n let ssRes = 0;\n let ssTot = 0;\n for (const [x, y] of used) {\n ssRes += (y - fit(x)) ** 2;\n ssTot += (y - mean) ** 2;\n }\n return { predict: fit, r2: ssTot === 0 ? 1 : Math.max(0, 1 - ssRes / ssTot) };\n}\n\nexport function layoutScatterChart(input: ScatterChartInput): Canvas {\n const [rMin, rMax] = input.sizeRange ?? [3, 18];\n return layoutPoints(input, {\n part: 'bubble',\n opacity: 0.7,\n // Bubble area, not radius, follows the value, so a doubled value reads as doubled.\n radius: (s, [sMin, sMax]) =>\n !isFinite(s)\n ? 3\n : sMax === sMin\n ? (rMin + rMax) / 2\n : rMin + Math.sqrt((s - sMin) / (sMax - sMin)) * (rMax - rMin),\n describe: (name, dot, x, y) =>\n `${name}${dot.label ? ` ${dot.label}` : ''}: ${x.format(dot.x)}, ${y.format(dot.y)}${isFinite(dot.size) ? ` (${y.format(dot.size)})` : ''}`,\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 { binEdges, binSamples } from './bins.js';\nimport { isFinite } from './scale.js';\nimport type { SeriesTransform, Value } from './types.js';\n\n/*\n * Deterministic, pure series transforms. Every function returns a new array of the same length\n * (`filter` keeps gaps where a value was dropped), never mutates its input, and treats\n * `null`/`NaN` as gaps that pass through.\n */\n\nexport const cumulative = (data: readonly Value[]): Value[] => {\n let running = 0;\n return data.map((v) => (isFinite(v) ? (running += v) : null));\n};\n\n/** `v[i] - v[i-1]`; the first value, and any value after a gap, is a gap. */\nexport const difference = (data: readonly Value[]): Value[] =>\n data.map((v, i) => {\n const prev = data[i - 1];\n return i > 0 && isFinite(v) && isFinite(prev) ? v - prev : null;\n });\n\n/** `(v[i] - v[i-1]) / |v[i-1]|` as a fraction; a zero previous value is a gap. */\nexport const percentageChange = (data: readonly Value[]): Value[] =>\n data.map((v, i) => {\n const prev = data[i - 1];\n return i > 0 && isFinite(v) && isFinite(prev) && prev !== 0\n ? (v - prev) / Math.abs(prev)\n : null;\n });\n\n/** Trailing mean over `window` values; the first `window - 1` are gaps, as is any window with a gap. */\nexport function movingAverage(data: readonly Value[], window: number): Value[] {\n const w = Math.max(1, Math.floor(window));\n return data.map((_, i) => {\n if (i < w - 1) return null;\n let sum = 0;\n for (let k = i - w + 1; k <= i; k++) {\n const v = data[k];\n if (!isFinite(v)) return null;\n sum += v;\n }\n return sum / w;\n });\n}\n\n/** Exponential moving average with `alpha = 2 / (window + 1)`, seeded by the first `window` mean. */\nexport function exponentialMovingAverage(data: readonly Value[], window: number): Value[] {\n const w = Math.max(1, Math.floor(window));\n const alpha = 2 / (w + 1);\n let ema: number | undefined;\n let seedSum = 0;\n let seedCount = 0;\n return data.map((v) => {\n if (!isFinite(v)) return ema ?? null;\n if (ema === undefined) {\n seedSum += v;\n seedCount++;\n if (seedCount < w) return null;\n ema = seedSum / w;\n return ema;\n }\n ema = alpha * v + (1 - alpha) * ema;\n return ema;\n });\n}\n\n/** Values as a share of the maximum (0–1), or of the sum. */\nexport function normalize(data: readonly Value[], to: 'max' | 'sum' = 'max'): Value[] {\n let denom = 0;\n for (const v of data) if (isFinite(v)) denom = to === 'sum' ? denom + v : Math.max(denom, v);\n return data.map((v) => (isFinite(v) ? (denom === 0 ? 0 : v / denom) : null));\n}\n\n/** 1-based rank of each value, largest first by default; ties share the lower rank. */\nexport function rank(data: readonly Value[], order: 'asc' | 'desc' = 'desc'): Value[] {\n const sorted = data.filter(isFinite).sort((a, b) => (order === 'asc' ? a - b : b - a));\n return data.map((v) => (isFinite(v) ? sorted.indexOf(v) + 1 : null));\n}\n\n/** Keeps values inside `[min, max]`; the rest become gaps. */\nexport const filter = (data: readonly Value[], min = -Infinity, max = Infinity): Value[] =>\n data.map((v) => (isFinite(v) && v >= min && v <= max ? v : null));\n\n/** Values sorted; gaps go last. */\nexport const sortValues = (data: readonly Value[], order: 'asc' | 'desc' = 'asc'): Value[] =>\n [...data].sort((a, b) => {\n if (!isFinite(a)) return isFinite(b) ? 1 : 0;\n if (!isFinite(b)) return -1;\n return order === 'asc' ? a - b : b - a;\n });\n\n/** Folds every `every` consecutive values into one by `method`; a fold of only gaps is a gap. */\nexport function aggregate(\n data: readonly Value[],\n every: number,\n method: 'sum' | 'mean' | 'min' | 'max' = 'sum',\n): Value[] {\n const n = Math.max(1, Math.floor(every));\n const out: Value[] = [];\n for (let i = 0; i < data.length; i += n) {\n const chunk = data.slice(i, i + n).filter(isFinite);\n if (chunk.length === 0) {\n out.push(null);\n continue;\n }\n const sum = chunk.reduce((s, v) => s + v, 0);\n out.push(\n method === 'sum'\n ? sum\n : method === 'mean'\n ? sum / chunk.length\n : method === 'min'\n ? Math.min(...chunk)\n : Math.max(...chunk),\n );\n }\n return out;\n}\n\n/** Counts the values into equal-width bins (see `binEdges`); the result has one count per bin. */\nexport function binCounts(\n data: readonly Value[],\n options: {\n bins?: number | undefined;\n binWidth?: number | undefined;\n domain?: [number, number] | undefined;\n } = {},\n): { edges: number[]; counts: number[] } {\n const samples = data.filter(isFinite);\n const edges = binEdges(samples, options);\n return { edges, counts: binSamples(samples, edges).map((b) => b.count) };\n}\n\n/** Applies transforms in order. */\nexport function applyTransforms(\n data: readonly Value[],\n transforms: readonly SeriesTransform[] | undefined,\n): Value[] {\n let out: Value[] = [...data];\n for (const t of transforms ?? [])\n switch (t.type) {\n case 'cumulative':\n out = cumulative(out);\n break;\n case 'difference':\n out = difference(out);\n break;\n case 'percentageChange':\n out = percentageChange(out);\n break;\n case 'movingAverage':\n out = movingAverage(out, t.window);\n break;\n case 'normalize':\n out = normalize(out, t.to);\n break;\n case 'rank':\n out = rank(out, t.order);\n break;\n case 'filter':\n out = filter(out, t.min, t.max);\n break;\n case 'sort':\n out = sortValues(out, t.order);\n break;\n case 'aggregate':\n out = aggregate(out, t.every, t.method);\n break;\n case 'bin':\n out = binCounts(out, t).counts;\n break;\n }\n return out;\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 { binEdges, binSamples } from './bins.js';\nimport { categoryLabel, categoryValue, makeFormatter } from './format.js';\nimport {\n axis,\n axisTooltip,\n canvas,\n CHAR,\n colorOf,\n gridOn,\n isHidden,\n legendTop,\n MARGIN,\n markTitle,\n plotBox,\n size,\n stateCanvas,\n thinTicks,\n valueAxisRoom,\n type Axis,\n} from './frame.js';\nimport { CHART_COLORS } from './palette.js';\nimport { annotationShapes, referenceShapes } from './reference.js';\nimport { sampleIndexes } from './sampling.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 { marker } from './scatter.js';\nimport { frameShapes, label, point } from './shapes.js';\nimport { applyTransforms } from './transforms.js';\nimport type {\n AxisOptions,\n Canvas,\n CartesianSeries,\n Category,\n ChartDataIssue,\n ChartInput,\n ChartItem,\n ChartItemId,\n Curve,\n ErrorValue,\n GradientDef,\n Hit,\n MarkerSymbol,\n RangeSeries,\n SeriesTransform,\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 id: ChartItemId | undefined;\n color: string;\n /** The resolved value-axis id. */\n axis: string;\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 symbol: MarkerSymbol;\n markerSize: number;\n errors: ErrorValue[] | undefined;\n /** Stack group key, or `undefined` when not stacked. */\n stack: string | undefined;\n /** How a range series is drawn. */\n style: 'area' | 'bar' | 'line';\n fillOpacity: number;\n gradient: boolean;\n}\n\n/** `right` and `top` are the far side (away from the origin) in either orientation. */\nconst outer = (a: AxisOptions) => a.position === 'right' || a.position === 'top';\n\n/** The value axes of a chart, in declaration order, with ids and sides filled in. */\nexport function axisDefinitions(input: ChartInput): AxisOptions[] {\n const given =\n input.yAxis === undefined ? [] : Array.isArray(input.yAxis) ? input.yAxis : [input.yAxis];\n const defs = given.map((a, i): AxisOptions => ({\n ...a,\n id: a.id ?? (i === 0 ? 'left' : i === 1 ? 'right' : String(i)),\n position: a.position ?? (i === 1 ? 'right' : 'left'),\n }));\n if (defs.length === 0) defs.push({ id: 'left', position: 'left' });\n const hasRight = defs.some((a) => a.id === 'right' || outer(a));\n if (input.rightAxis) defs.push({ ...input.rightAxis, id: 'right', position: 'right' });\n else if (!hasRight && input.series.some((s) => s.axis === 'right'))\n defs.push({ id: 'right', position: 'right' });\n return defs;\n}\n\n/** Resolves a series' `axis` to an axis id; unknown ids fall back to the first axis. */\nexport function resolveAxis(\n defs: readonly AxisOptions[],\n axis: string | undefined,\n): string | undefined {\n const first = defs[0]?.id as string;\n if (axis === undefined || axis === 'left') return first;\n if (axis === 'right') return (defs.find((a) => a.id === 'right') ?? defs.find(outer))?.id;\n return defs.find((a) => a.id === axis)?.id;\n}\n\n/** Whether a series occupies a bar slot: plain bars and range bars. */\nconst isBarLike = (s: Resolved): boolean =>\n s.kind === 'bar' || (s.kind === 'range' && s.style === 'bar');\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 {\n series: all,\n categories: cats,\n issues,\n axes: defs,\n } = transform(input, defaultType, format);\n const rtl = input.direction === 'rtl';\n const base = input.baseline ?? 0;\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, issues };\n\n // A time or linear axis places numeric/date categories proportionally instead of in even slots;\n // under `time`, ISO strings parse as dates.\n const xType = input.xAxis?.type ?? 'category';\n const continuous =\n xType !== 'category' &&\n cats.length > 0 &&\n cats.every((c) => typeof c !== 'string' || (xType === 'time' && isFinite(categoryValue(c))));\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 window = 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 && !isBarLike(s)) }));\n const drawn = shown.filter((s) => !s.hidden);\n // Dense line/area series are sampled inside the visible window; items keep original indexes.\n const sampled = drawn.some((s) => !isBarLike(s))\n ? sampleIndexes(\n drawn\n .filter((s) => !isBarLike(s))\n .map((s) => window.map((i) => (s.kind === 'range' ? s.high[i] : s.data[i]) ?? null)),\n window.length,\n input.sampling,\n )\n : undefined;\n const visible = sampled ? sampled.map((k) => window[k] as number) : window;\n const percent = input.stacked === 'percent' || input.stackOffset === 'expand';\n const offset = input.stackOffset ?? 'zero';\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(base);\n const down = new Array<number>(count).fill(base);\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 // Silhouette centres every stack on zero; wiggle (Byron & Wattenberg) shifts each category's\n // baseline so the layers' slopes are minimized, the streamgraph. Both are per category offsets.\n if (offset === 'silhouette' || offset === 'wiggle') {\n const shift = new Array<number>(count).fill(0);\n if (offset === 'silhouette')\n for (let ci = 0; ci < count; ci++) shift[ci] = -((up[ci] as number) - base) / 2;\n else {\n let g0 = 0;\n for (let ci = 0; ci < count; ci++) {\n const n = members.length;\n let sum = 0;\n for (let k = 0; k < n; k++) {\n const s = members[k] as Resolved;\n const v = s.data[ci];\n const prev = s.data[ci - 1];\n const dv = ci > 0 && isFinite(v) && isFinite(prev) ? v - prev : 0;\n sum += (n - k - 0.5) * dv;\n }\n const total = (up[ci] as number) - base;\n g0 = ci === 0 ? -total / 2 : g0 - (total > 0 ? sum / Math.max(1, n) : 0);\n shift[ci] = g0;\n }\n }\n for (const s of members) {\n const from = stackFrom.get(s) as Value[];\n const to = stackTo.get(s) as Value[];\n for (let ci = 0; ci < count; ci++) {\n const f = from[ci];\n const t = to[ci];\n if (isFinite(f)) from[ci] = f + (shift[ci] as number);\n if (isFinite(t)) to[ci] = t + (shift[ci] as number);\n }\n }\n }\n }\n const valuesOf = (s: Resolved): { from: Value[]; to: Value[] } =>\n s.kind === 'range'\n ? { from: s.low, to: s.high }\n : {\n from: stackFrom.get(s) ?? new Array<Value>(count).fill(base),\n to: stackTo.get(s) ?? s.data,\n };\n\n // Value extents per axis over the visible window; bars and areas grow the domain to include the baseline.\n const extentOf = (axisId: string): [number, number] => {\n const values: number[] = [];\n let zero = false;\n for (const s of drawn) {\n if (s.axis !== axisId) 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.errors)\n for (const i of visible) {\n const e = errorRange(s.data[i], s.errors[i]);\n if (e) values.push(e[0], e[1]);\n }\n if ((s.kind === 'bar' || s.kind === 'area') && offset === 'zero') zero = true;\n }\n const [min, max] = minMax(values);\n return zero ? [Math.min(base, min), Math.max(base, max)] : [min, max];\n };\n\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 percentFormat = percent ? ({ style: 'percent' } as const) : undefined;\n // Value labels such as \"$160,000\" need more than the default margin; measure the nice ticks\n // the axis will use (explicit bounds and log scales fall back to the default).\n const labelRoom = (opts: AxisOptions): number => {\n if (opts.scale === 'log') return MARGIN.left;\n const [lo, hi] = extentOf(opts.id as string);\n const f = makeFormatter(opts.format ?? percentFormat ?? input.format);\n return (\n valueAxisRoom([opts.min ?? lo, opts.max ?? hi], f) +\n (opts.showTicks ? (opts.tickSize ?? 4) : 0)\n );\n };\n // Horizontal charts run the value axes along the bottom (near) and top (far) edges. Under RTL\n // the vertical sides swap so the first axis sits at the right, next to the reader.\n const sideOf = (a: AxisOptions): 'left' | 'right' | 'top' | 'bottom' =>\n horizontal ? (outer(a) ? 'top' : 'bottom') : outer(a) !== rtl ? 'right' : 'left';\n // A horizontal axis is one row of labels; a vertical one is as wide as its widest label.\n const roomOf = (a: AxisOptions) =>\n horizontal ? 24 + (a.showTicks ? (a.tickSize ?? 4) : 0) : labelRoom(a);\n const used = new Set(drawn.map((s) => s.axis));\n // The default single axis on the far side does not appear unless a series uses it.\n const shownAxes = defs.filter((a) => used.has(a.id as string) || defs.length > 1);\n // Axes of one side stack outward: each takes its label room beyond the previous one.\n const offsets = new Map<string, number>();\n const room = { left: 0, right: 0, top: 0, bottom: 0 };\n for (const a of shownAxes) {\n const side = sideOf(a);\n offsets.set(a.id as string, room[side]);\n room[side] += roomOf(a);\n }\n // The default bottom margin already holds the first bottom axis.\n const firstBottom = shownAxes.find((a) => sideOf(a) === 'bottom');\n const margin = {\n top: MARGIN.top + legendTop(input) + (defs.some((a) => a.label) ? 12 : 0) + room.top,\n right: horizontal\n ? rtl\n ? Math.max(MARGIN.left, widestCategory + 16)\n : MARGIN.right\n : Math.max(MARGIN.right, room.right),\n bottom:\n MARGIN.bottom +\n brushRoom +\n (input.xAxis?.label ? 14 : 0) +\n (input.xAxis?.tickRotation ? 24 : 0) +\n room.bottom -\n (firstBottom ? roomOf(firstBottom) : 0),\n left: horizontal\n ? rtl\n ? MARGIN.right\n : Math.max(MARGIN.left, widestCategory + 16)\n : Math.max(MARGIN.left, room.left),\n };\n const plot = plotBox(width, height, margin);\n const valueRange: readonly [number, number] = horizontal\n ? rtl\n ? [plot.x + plot.width, plot.x]\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 : rtl\n ? [plot.x + plot.width, plot.x]\n : [plot.x, plot.x + plot.width];\n const axes = new Map<string, Axis>(\n defs.map((a) => [\n a.id as string,\n {\n ...axis(\n extentOf(a.id as string),\n valueRange,\n { format: percentFormat, ...a },\n input.format,\n ),\n position: sideOf(a),\n offset: offsets.get(a.id as string) ?? 0,\n },\n ]),\n );\n const firstId = defs[0]?.id as string;\n const left = axes.get(firstId) as Axis;\n const axisOf = (id: string) => axes.get(resolveAxis(defs, id) ?? firstId) ?? left;\n const value = (v: number, id: string) => axisOf(id).scale(v);\n // Where bars grow from and areas fill down to: the baseline value, clamped into the axis.\n const baseOf = (a: Axis) =>\n px(a.scale(Math.min(Math.max(base, Math.min(...a.domain)), Math.max(...a.domain))));\n const band = bandScale(visible.length, bandRange, input.barGap);\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\n ? Infinity\n : plot.width /\n Math.max(0.2, Math.abs(Math.cos(((input.xAxis?.tickRotation ?? 0) * Math.PI) / 180))),\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: horizontal ? thinTicks(left.ticks, plot.width) : left.ticks,\n baseline: baseOf(left),\n };\n const firstDef = defs[0] as AxisOptions;\n const shapes: Shape[] = frameShapes(frame, {\n horizontal,\n rtl,\n axes: shownAxes.map((a) => {\n const ax = axes.get(a.id as string) as Axis;\n return {\n ticks: horizontal ? thinTicks(ax.ticks, plot.width) : ax.ticks,\n position: ax.position as 'left' | 'right' | 'top' | 'bottom',\n offset: ax.offset ?? 0,\n label: a.label,\n showLine: a.showLine,\n showTicks: a.showTicks,\n tickSize: a.tickSize,\n };\n }),\n xLabel: input.xAxis?.label,\n grid: gridOn(firstDef),\n categoryGrid: input.xAxis?.grid === true,\n x: input.xAxis,\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 const scales = {\n plot,\n horizontal,\n x: (c: Category) => {\n if (continuous && (typeof c !== 'string' || isFinite(categoryValue(c))))\n 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: (v: number, a: string) => value(v, a),\n };\n shapes.push(...referenceShapes(input.references, scales));\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 (!isBarLike(s)) 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 // `barWidth` caps the bar thickness; bars stay centred in their group slot.\n const barW = Math.min(groupWidth, input.barWidth ?? Infinity);\n const barInset = (groupWidth - barW) / 2;\n\n const areas: Shape[] = [];\n const bars: Shape[] = [];\n const lines: Shape[] = [];\n const points: Shape[] = [];\n const texts: Shape[] = [];\n const errorMarks: Shape[] = [];\n const defs2: GradientDef[] = [];\n const fmt = (s: Resolved) => axisOf(s.axis).format;\n const minBar = Math.max(0, input.minBarSize ?? 0);\n // A bar's pixel extent along the value axis, at least `minBarSize` long away from its base.\n const barSpan = (v0: number, v1: number, up: boolean): [number, number] => {\n const len = Math.abs(v1 - v0);\n if (len >= minBar) return [Math.min(v0, v1), len];\n // Grow away from the base: larger values go up (smaller y) vertically, right horizontally.\n const dir = horizontal ? (up ? 1 : -1) : up ? -1 : 1;\n const end = v0 + dir * minBar;\n return [Math.min(v0, end), minBar];\n };\n const itemOf = (s: Resolved, i: number, v: number, title: string): ChartItem => ({\n label: title,\n series: s.name,\n seriesId: s.id ?? s.name,\n category: labels[i],\n index: i,\n value: v,\n });\n // An error whisker through the mark: a bar along the value axis with two end caps.\n const whisker = (s: Resolved, i: number, at: number, plotted: number) => {\n const e = errorRange(plotted, s.errors?.[i]);\n if (!e) return;\n const a = px(value(e[0], s.axis));\n const b = px(value(e[1], s.axis));\n const cap = 4;\n const stroke = 'var(--skdx-color-text-default)';\n const title = `${s.name}, ${labels[i] as string}: ${fmt(s)(e[0])} – ${fmt(s)(e[1])}`;\n errorMarks.push(\n horizontal\n ? { kind: 'line', part: 'error-bar', x1: a, x2: b, y1: at, y2: at, stroke, title }\n : { kind: 'line', part: 'error-bar', x1: at, x2: at, y1: a, y2: b, stroke, title },\n horizontal\n ? {\n kind: 'line',\n part: 'error-cap',\n x1: a,\n x2: a,\n y1: px(at - cap),\n y2: px(at + cap),\n stroke,\n }\n : {\n kind: 'line',\n part: 'error-cap',\n x1: px(at - cap),\n x2: px(at + cap),\n y1: a,\n y2: a,\n stroke,\n },\n horizontal\n ? {\n kind: 'line',\n part: 'error-cap',\n x1: b,\n x2: b,\n y1: px(at - cap),\n y2: px(at + cap),\n stroke,\n }\n : {\n kind: 'line',\n part: 'error-cap',\n x1: px(at - cap),\n x2: px(at + cap),\n y1: b,\n y2: b,\n stroke,\n },\n );\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 // Above the title limit the series' bars collapse into one path: no per-bar DOM node, no\n // per-bar item (the crosshair still reads every category).\n let batched = '';\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 [start, span] = barSpan(v0, v1, b >= a);\n const b0 = slotStart(vi) + (slotOf.get(s) as number) * groupWidth + barInset;\n const x = px(horizontal ? start : b0);\n const y = px(horizontal ? b0 : start);\n const w = px(horizontal ? span : barW);\n const h = px(horizontal ? barW : span);\n if (!titled) {\n batched += `M${x} ${y}h${w}v${h}h${-w}Z`;\n return;\n }\n const title = markTitle(s.name, labels[i] as string, percent ? b - a : raw, f);\n bars.push({\n kind: 'rect',\n part: 'bar',\n x,\n y,\n width: w,\n height: h,\n fill: s.color,\n rx: input.radius,\n title,\n item: itemOf(s, i, raw, title),\n });\n whisker(s, i, px(b0 + barW / 2), raw);\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 + barW / 2), text, { baseline: 'middle' })\n : label(px(b0 + barW / 2), px(Math.min(v0, v1) - 4), text, { anchor: 'middle' }),\n );\n }\n });\n if (batched)\n bars.push({ kind: 'path', part: 'bars', d: batched, fill: s.color, title: s.name });\n continue;\n }\n if (s.kind === 'range' && s.style === 'bar') {\n // Floating bars from low to high, in their own slot like any bar series.\n visible.forEach((i, vi) => {\n const a = from[i];\n const b = to[i];\n if (!isFinite(a) || !isFinite(b)) return;\n const v0 = value(Math.min(a, b), s.axis);\n const v1 = value(Math.max(a, b), s.axis);\n const b0 = slotStart(vi) + (slotOf.get(s) as number) * groupWidth + barInset;\n const title = `${s.name}, ${labels[i] as string}: ${f(Math.min(a, b))} – ${f(Math.max(a, b))}`;\n const item = itemOf(s, i, b, title);\n const thickness = Math.max(1, Math.abs(v1 - v0));\n bars.push(\n horizontal\n ? {\n kind: 'rect',\n part: 'range',\n x: px(Math.min(v0, v1)),\n y: px(b0),\n width: px(thickness),\n height: px(barW),\n fill: s.color,\n rx: input.radius,\n title: titled ? title : undefined,\n item,\n }\n : {\n kind: 'rect',\n part: 'range',\n x: px(b0),\n y: px(Math.min(v0, v1)),\n width: px(barW),\n height: px(thickness),\n fill: s.color,\n rx: input.radius,\n title: titled ? title : undefined,\n item,\n },\n );\n });\n continue;\n }\n // Lines, areas and ranges: polylines broken at gaps unless nulls connect (or are zeros).\n const connect = input.nulls === 'connect' || (input.nulls === undefined && input.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 (!connect && 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' && s.style === 'line') {\n // Two outlines, no fill: the high line solid, the low line dashed.\n lines.push(\n {\n kind: 'path',\n part: 'range-high',\n d,\n stroke: s.color,\n strokeWidth: 2,\n strokeLinejoin: 'round',\n },\n {\n kind: 'path',\n part: 'range-low',\n d: pathThrough(\n seg.map((p) => ({ x: p.x, y: p.y0 })),\n s.curve,\n ),\n stroke: s.color,\n strokeWidth: 2,\n strokeLinejoin: 'round',\n dash: '4 3',\n },\n );\n continue;\n }\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 floor = baseOf(axisOf(s.axis));\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} ${floor}L${seg[0]?.x} ${floor}`;\n // A gradient fades the fill from the line down to the base; it lives in `Canvas.defs`.\n const gradientId = `skdx-g-${s.index}`;\n if (s.gradient && !defs2.some((g) => g.id === gradientId))\n defs2.push({\n id: gradientId,\n vertical: true,\n stops: [\n { offset: 0, color: s.color, opacity: s.fillOpacity },\n { offset: 1, color: s.color, opacity: 0 },\n ],\n });\n areas.push({\n kind: 'path',\n part: 'area',\n d: `${d}L${bottom}Z`,\n fill: s.gradient ? `url(#${gradientId})` : s.color,\n fillOpacity: s.gradient ? undefined : s.fillOpacity,\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' && titled)\n // Invisible anchors give range bands and lines a per-point tooltip and keyboard stop.\n for (const seg of segments)\n for (const p of seg) {\n const lo = s.low[p.i] as number;\n const hi = s.high[p.i] as number;\n const title = `${s.name}, ${labels[p.i] as string}: ${f(Math.min(lo, hi))} – ${f(Math.max(lo, hi))}`;\n points.push({\n ...point(p.x, p.y, 0.01, s.color, title, itemOf(s, p.i, hi, title)),\n part: 'anchor',\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 && !s.errors) 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 showMarkers && s.symbol !== 'circle'\n ? marker(\n p.x,\n p.y,\n s.markerSize,\n s.symbol,\n s.color,\n titled ? title : undefined,\n itemOf(s, p.i, raw, title),\n 'point',\n )\n : {\n ...point(\n p.x,\n p.y,\n showMarkers ? s.markerSize : 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 );\n if (titled) whisker(s, p.i, horizontal ? p.y : p.x, to[p.i] as number);\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: axisTooltip(input),\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 ...errorMarks,\n ...points,\n ...texts,\n ...annotationShapes(input.annotations, scales),\n ...brush,\n ...frame.shapes,\n ],\n hit,\n issues,\n defs: defs2.length ? defs2 : undefined,\n };\n}\n\n/** `[low, high]` of a value with its error, or `undefined` when either is missing. */\nfunction errorRange(v: Value | undefined, e: ErrorValue | undefined): [number, number] | undefined {\n if (!isFinite(v) || e === null || e === undefined) return undefined;\n if (typeof e === 'number') return isFinite(e) ? [v - Math.abs(e), v + Math.abs(e)] : undefined;\n return isFinite(e[0]) && isFinite(e[1])\n ? [Math.min(e[0], e[1]), Math.max(e[0], e[1])]\n : undefined;\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`, `transforms`, `sort` and chart-level stacking. */\nfunction transform(\n input: ChartInput,\n fallback: Kind,\n format: (v: number) => string,\n): { series: Resolved[]; categories: Category[]; issues: ChartDataIssue[]; axes: AxisOptions[] } {\n const defaultType = (s: CartesianSeries | RangeSeries): Kind | 'range' => s.type ?? fallback;\n const issues: ChartDataIssue[] = [];\n const axes = axisDefinitions(input);\n let categories: Category[] = input.categories ?? [];\n // Chart-level transforms that touch the categories run here; the rest run per series.\n const chartLevel: SeriesTransform[] = (input.transforms ?? []).filter(\n (t) => t.type === 'sort' || t.type === 'bin' || t.type === 'aggregate',\n );\n const seriesLevel = (input.transforms ?? []).filter((t) => !chartLevel.includes(t));\n const stackedAll =\n input.stacked || (input.stackOffset !== undefined && input.stackOffset !== 'zero');\n // Values that are neither numbers nor gaps (strings, Infinity) are reported once per series.\n const check = (name: string, id: ChartItemId | undefined, values: readonly Value[]) => {\n const bad = values.filter(\n (v) => v !== null && !(typeof v === 'number' && Number.isFinite(v)),\n ).length;\n if (bad)\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `Series \"${name}\" has ${bad} value${bad === 1 ? '' : 's'} that ${bad === 1 ? 'is' : 'are'} neither a number nor null; drawn as gaps.`,\n itemId: id ?? name,\n });\n if (categories.length && values.length !== categories.length && !input.transform)\n issues.push({\n code: 'length-mismatch',\n severity: 'warning',\n message: `Series \"${name}\" has ${values.length} values for ${categories.length} categories.`,\n itemId: id ?? name,\n });\n };\n let series: Resolved[] = input.series.map((s, index) => {\n const kind = defaultType(s);\n const stacked = stackedAll ? 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 if (s.type === 'range') {\n check(s.name, s.id, s.low);\n check(s.name, s.id, s.high);\n } else check(s.name, s.id, s.data);\n const zeros = (values: Value[]) =>\n input.nulls === 'zero' ? values.map((v) => (isFinite(v) ? v : 0)) : values;\n const axisId = resolveAxis(axes, s.axis);\n if (axisId === undefined)\n issues.push({\n code: 'unknown-axis',\n severity: 'warning',\n message: `Series \"${s.name}\" names axis \"${String(s.axis)}\", which is not defined; drawn on the first axis.`,\n itemId: s.id ?? s.name,\n });\n return {\n name: s.name,\n id: s.id,\n color: colorOf(input, index, s.color),\n axis: axisId ?? (axes[0]?.id as string),\n hidden: isHidden(input, s.name),\n index,\n kind,\n data:\n s.type === 'range'\n ? []\n : zeros(applyTransforms(applyTransforms(s.data, seriesLevel), s.transforms)),\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 symbol: s.type === 'range' ? 'circle' : (s.symbol ?? 'circle'),\n markerSize: s.type === 'range' ? 3 : (s.markerSize ?? 3),\n errors: s.type === 'range' ? undefined : s.errors,\n stack: kind === 'range' || kind === 'line' ? undefined : stack,\n style: s.type === 'range' ? (s.style ?? 'area') : 'area',\n fillOpacity: (s.type === 'range' ? undefined : s.fillOpacity) ?? input.fillOpacity ?? 0.25,\n gradient: s.type !== 'range' && s.gradient === true,\n };\n });\n const n = () =>\n Math.max(categories.length, ...series.map((s) => Math.max(s.data.length, s.low.length)));\n const pickBy = (order: number[]) => {\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 const sortBy = (order: 'asc' | 'desc', by?: string) => {\n const first =\n (by !== undefined ? series.find((s) => s.name === by) : undefined) ??\n series.find((s) => !s.hidden && s.kind !== 'range') ??\n series[0];\n if (by !== undefined && !series.some((s) => s.name === by))\n issues.push({\n code: 'unknown-series',\n severity: 'warning',\n message: `sort.by names \"${by}\", which is not a series; sorted by the first series.`,\n });\n const idx = 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 order === 'asc' ? x - y : y - x;\n });\n pickBy(idx);\n };\n const bin = (opts: {\n bins?: number | undefined;\n binWidth?: number | undefined;\n domain?: [number, number] | undefined;\n }) => {\n const samples = series.flatMap((s) => finite(s.data));\n const edges = binEdges(samples, opts);\n categories = edges.slice(1).map((hi, i) => `${format(edges[i] as number)}–${format(hi)}`);\n series = series.map((s) => {\n const own = finite(s.data);\n let running = 0;\n const data = binSamples(own, edges).map((b) => {\n if (input.binMode === 'density')\n return own.length ? b.count / (own.length * (b.x1 - b.x0)) : 0;\n if (input.binMode === 'cumulative') return (running += b.count);\n return b.count;\n });\n return { ...s, data };\n });\n };\n // Folds every `every` consecutive categories into one, labelled by the first of the fold.\n const aggregate = (every: number, method: 'sum' | 'mean' | 'min' | 'max') => {\n const k = Math.max(1, Math.floor(every));\n const total = n();\n const fold = (arr: Value[]): Value[] => {\n if (!arr.length) return arr;\n const out: Value[] = [];\n for (let i = 0; i < total; i += k) {\n const chunk = finite(arr.slice(i, i + k));\n out.push(\n chunk.length === 0\n ? null\n : method === 'sum'\n ? chunk.reduce((a, b) => a + b, 0)\n : method === 'mean'\n ? chunk.reduce((a, b) => a + b, 0) / chunk.length\n : method === 'min'\n ? Math.min(...chunk)\n : Math.max(...chunk),\n );\n }\n return out;\n };\n const full = Array.from({ length: total }, (_, i) => categories[i] ?? String(i + 1));\n categories = full.filter((_, i) => i % k === 0);\n series = series.map((s) => ({\n ...s,\n data: fold(s.data),\n low: fold(s.low),\n high: fold(s.high),\n }));\n };\n\n if (input.transform === 'histogram')\n bin({ bins: input.bins, binWidth: input.binWidth, domain: input.binDomain });\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 for (const t of chartLevel)\n if (t.type === 'sort') sortBy(t.order ?? 'desc');\n else if (t.type === 'bin') bin(t);\n else if (t.type === 'aggregate') aggregate(t.every, t.method ?? 'sum');\n if (typeof input.sort === 'string') sortBy(input.sort);\n else if (input.sort) sortBy(input.sort.order, input.sort.by);\n // A fixed category domain sets the order and membership; missing categories are empty.\n const domain = input.xAxis?.domain;\n if (domain) {\n const total = n();\n const full = Array.from({ length: total }, (_, i) => categories[i] ?? String(i + 1));\n const at = (c: Category) => {\n const target = typeof c === 'string' ? c : categoryValue(c);\n return full.findIndex((cat) =>\n typeof target === 'string'\n ? cat === target || categoryLabel(cat) === target\n : categoryValue(cat) === target,\n );\n };\n const order = domain.map(at);\n const pick = (arr: Value[]): Value[] =>\n arr.length ? order.map((i) => (i < 0 ? null : (arr[i] ?? null))) : arr;\n categories = [...domain];\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, issues, axes };\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 { CHART_COLORS } from './palette.js';\nimport type {\n Canvas,\n ChartItem,\n ChartItemId,\n ChartItemRef,\n HighlightScope,\n Selection,\n Shape,\n Sized,\n} from './types.js';\n\n/*\n * Identity, selection and highlighting. Layouts stamp every mark with a `ChartItem`; the roots\n * (and `emphasize`) locate marks through `ChartItemRef`s, never through shape indexes, so ids\n * survive re-layouts, zooming and sampling.\n */\n\n/** Normalizes a `Selection` into refs; bare ids become `{ id }`. */\nexport function toRefs(selection: Selection | ChartItemRef | ChartItemId | null | undefined) {\n if (selection === undefined || selection === null) return [] as ChartItemRef[];\n const list = Array.isArray(selection) ? selection : [selection];\n return list.map((s): ChartItemRef => (typeof s === 'object' ? s : { id: s }));\n}\n\n/** Effective id of an item: the explicit id, else its name, else its series. */\nexport const itemId = (item: ChartItem): ChartItemId | undefined =>\n item.id ?? item.name ?? item.series;\n\n/** Effective series id of an item: the explicit series id, else the series name. */\nexport const seriesIdOf = (item: ChartItem): ChartItemId | undefined =>\n item.seriesId ?? item.series;\n\n/** Whether every field the ref gives matches the item. An empty ref matches nothing. */\nexport function matchesItem(item: ChartItem, ref: ChartItemRef): boolean {\n let any = false;\n if (ref.id !== undefined) {\n any = true;\n if (itemId(item) !== ref.id && item.id !== ref.id && item.name !== ref.id) return false;\n }\n if (ref.series !== undefined) {\n any = true;\n if (seriesIdOf(item) !== ref.series && item.series !== ref.series) return false;\n }\n if (ref.index !== undefined) {\n any = true;\n if (item.index !== ref.index) return false;\n }\n if (ref.category !== undefined) {\n any = true;\n if (item.category !== ref.category) return false;\n }\n return any;\n}\n\n/** Whether the item is in the selection. */\nexport const isSelected = (\n item: ChartItem,\n selection: Selection | undefined,\n refs = toRefs(selection),\n): boolean => refs.some((r) => matchesItem(item, r));\n\n/** Ids (or names) named by a selection, for layouts that key their data by id. */\nexport const selectedIds = (selection: Selection | undefined): ChartItemId[] =>\n toRefs(selection).flatMap((r) => (r.id !== undefined ? [r.id] : []));\n\n/** The ref a mark's item stands for, as reported by `onSelectedChange`. */\nexport function refOf(item: ChartItem): ChartItemRef {\n const ref: ChartItemRef = {};\n const id = itemId(item);\n if (id !== undefined) ref.id = id;\n const series = seriesIdOf(item);\n if (series !== undefined && item.series !== undefined) ref.series = series;\n if (item.index !== undefined) ref.index = item.index;\n return ref;\n}\n\n/** Whether two refs locate the same item. */\nexport const sameRef = (a: ChartItemRef, b: ChartItemRef): boolean =>\n a.id === b.id && a.series === b.series && a.index === b.index && a.category === b.category;\n\n/** The selection after a click on `item` in the given mode. */\nexport function toggleSelection(\n selection: Selection | undefined,\n item: ChartItem,\n mode: 'single' | 'multiple',\n): ChartItemRef[] {\n const refs = toRefs(selection);\n const ref = refOf(item);\n const on = refs.some((r) => matchesItem(item, r));\n if (mode === 'single') return on ? [] : [ref];\n return on ? refs.filter((r) => !matchesItem(item, r)) : [...refs, ref];\n}\n\nconst FADE = 0.2;\n\n/** A ring around a mark in the focus color, for selected items. */\nexport function outlineOf(s: Shape): Shape | undefined {\n const stroke = CHART_COLORS.focus;\n switch (s.kind) {\n case 'rect':\n return {\n kind: 'rect',\n part: 'selected',\n x: s.x - 1.5,\n y: s.y - 1.5,\n width: s.width + 3,\n height: s.height + 3,\n fill: 'none',\n stroke,\n rx: s.rx,\n };\n case 'circle':\n return {\n kind: 'circle',\n part: 'selected',\n cx: s.cx,\n cy: s.cy,\n r: s.r + 2.5,\n fill: 'none',\n stroke,\n };\n case 'path':\n return { kind: 'path', part: 'selected', d: s.d, fill: 'none', stroke, strokeWidth: 2.5 };\n case 'line':\n return {\n ...s,\n part: 'selected',\n stroke,\n strokeWidth: (s.strokeWidth ?? 1) + 3,\n title: undefined,\n item: undefined,\n };\n case 'text':\n return undefined;\n }\n}\n\n/** The shape at `factor` of its opacity; text dims to the grid color instead. */\nconst withOpacity = (s: Shape, factor: number): Shape =>\n s.kind === 'text'\n ? { ...s, fill: CHART_COLORS.grid }\n : { ...s, opacity: (s.opacity ?? 1) * factor };\n\n/**\n * Applies `selected` and `highlighted` to a laid-out chart: marks outside the highlight scope\n * fade, selected marks get an outline appended after the marks (so shape indexes, and with them\n * `data-skdx-i`, stay stable). Legend entries, grid, axes and tooltips are never touched.\n */\nexport function emphasize(layout: Canvas, input: Sized): Canvas {\n const refs = toRefs(input.selected);\n const highlights =\n input.highlighted === undefined || input.highlighted === null ? [] : toRefs(input.highlighted);\n const highlight = highlights[0];\n if (refs.length === 0 && !highlight) return layout;\n const scope: Required<HighlightScope> = {\n highlighted: input.highlightScope?.highlighted ?? 'item',\n faded: input.highlightScope?.faded ?? 'global',\n };\n const outlines: Shape[] = [];\n const lit = (item: ChartItem): boolean => {\n if (!highlight) return true;\n if (highlights.some((h) => matchesItem(item, h))) return true;\n if (scope.highlighted === 'series')\n return highlights.some(\n (h) => h.series !== undefined && matchesItem(item, { series: h.series }),\n );\n return false;\n };\n const fades = (item: ChartItem): boolean => {\n if (!highlight || scope.faded === 'none' || lit(item)) return false;\n if (scope.faded === 'series') {\n const series = highlight.series;\n return series !== undefined && matchesItem(item, { series });\n }\n return true;\n };\n const shapes = layout.shapes.map((s) => {\n const item = s.item;\n if (!item || item.legend) return s;\n if (refs.some((r) => matchesItem(item, r))) {\n const o = outlineOf(s);\n if (o) outlines.push(o);\n }\n return fades(item) ? withOpacity(s, FADE) : s;\n });\n return outlines.length ? { ...layout, shapes: [...shapes, ...outlines] } : { ...layout, 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 { isSelected, toRefs } from './identity.js';\nimport { CHART_COLORS } from './palette.js';\nimport { isFinite, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { Canvas, ChartDataIssue, ChartItem, 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\n/**\n * `arc` with rounded corners: the outer corners (and the inner ones of a ring) are replaced by\n * arcs of radius `cr`, clamped so a thin slice never inverts. Full circles keep square ends.\n */\nexport function roundedArc(\n cx: number,\n cy: number,\n r: number,\n r0: number,\n a0: number,\n a1: number,\n cr: number,\n): string {\n const sweep = a1 - a0;\n if (cr <= 0 || sweep >= TAU - 1e-9) return arc(cx, cy, r, r0, a0, a1);\n const s = Math.sin(Math.min(Math.PI / 2, sweep / 2));\n // The corner circle must fit both the ring thickness and the angular span.\n let c = Math.min(cr, r0 > 0 ? (r - r0) / 2 : r / 2, (r * s) / (1 + s));\n if (r0 > 0 && s < 1) c = Math.min(c, (r0 * s) / (1 - s));\n if (c <= 0.25) return arc(cx, cy, r, r0, a0, a1);\n const at = (radius: number, a: number) =>\n `${px(cx + radius * Math.sin(a))} ${px(cy - radius * Math.cos(a))}`;\n const corner = (p: string) => `A${px(c)} ${px(c)} 0 0 1 ${p}`;\n // Outer corners: centre at radius r - c, tangent to the rim at ±da and to the edge at radius rt.\n const da = Math.asin(c / (r - c));\n const rt = Math.sqrt((r - c) ** 2 - c * c);\n const large = a1 - a0 - 2 * da > Math.PI ? 1 : 0;\n let d = `M${at(rt, a0)}${corner(at(r, a0 + da))}A${r} ${r} 0 ${large} 1 ${at(r, a1 - da)}${corner(at(rt, a1))}`;\n if (r0 > 0) {\n const da0 = Math.asin(c / (r0 + c));\n const rt0 = Math.sqrt((r0 + c) ** 2 - c * c);\n const large0 = a1 - a0 - 2 * da0 > Math.PI ? 1 : 0;\n d += `L${at(rt0, a1)}${corner(at(r0, a1 - da0))}A${r0} ${r0} 0 ${large0} 0 ${at(r0, a0 + da0)}${corner(at(rt0, a0))}Z`;\n } else d += `L${px(cx)} ${px(cy)}Z`;\n return d;\n}\n\nexport function layoutPieChart(input: PieChartInput): Canvas {\n const issues: ChartDataIssue[] = [];\n for (const d of input.data)\n if (isFinite(d.value) && d.value < 0)\n issues.push({\n code: 'negative-value',\n severity: 'warning',\n message: `\"${d.name}\" is negative (${d.value}); a share of a whole cannot be, so it is drawn as zero.`,\n itemId: d.id ?? d.name,\n });\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, issues };\n const format = makeFormatter(input.format);\n const percentFormat = input.percentFormat\n ? makeFormatter(input.percentFormat)\n : (p: number) => `${Math.round(p * 100)}%`;\n const cornerRadius = Math.max(0, input.cornerRadius ?? 0);\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 outside = input.labels && input.labelPosition === 'outside';\n const cx = width / 2;\n const outer = Math.max(0.2, Math.min(1, input.outerRadius ?? 1));\n const room = outside ? 40 : 8;\n const r =\n (half\n ? Math.max(0, Math.min(width / 2, height - top) - room)\n : Math.max(0, Math.min(width, height - top) / 2 - room)) * outer;\n const cy = half\n ? start < 0 || start > Math.PI\n ? height - room\n : top + room\n : top + (height - top) / 2;\n const r0 =\n r * Math.min(0.95, Math.max(0, input.innerRadius ?? (input.variant === 'donut' ? 0.6 : 0)));\n // Slices keep their input index (and color) when sorted, so colors stay stable.\n const indexed = input.data.map((d, i) => ({\n ...d,\n i,\n value: isFinite(d.value) && !isHidden(input, d.name) ? Math.max(0, d.value) : 0,\n }));\n const shown = input.sort\n ? [...indexed].sort((a, b) => (input.sort === 'asc' ? a.value - b.value : b.value - a.value))\n : indexed;\n const total = shown.reduce((sum, d) => sum + d.value, 0);\n const visible = shown.filter((d) => d.value > 0).length;\n // A pad angle is taken between slices: each slice loses half of it at each end.\n const pad = Math.max(\n 0,\n Math.min(((input.padAngle ?? 0) * Math.PI) / 180, sweep / Math.max(1, visible) / 2),\n );\n const closed = sweep >= TAU - 1e-9;\n const gaps = visible > 1 ? (closed ? visible : visible - 1) : 0;\n const usable = sweep - gaps * pad;\n // Angular span per slice: proportional, except that slices below `minAngle` are widened to\n // it and the others shrink to make room (a few passes, since shrinking can push more below).\n const minRad = Math.min(((input.minAngle ?? 0) * Math.PI) / 180, usable / Math.max(1, visible));\n const spans = shown.map((d) => (total > 0 ? (d.value / total) * usable : 0));\n if (minRad > 0)\n for (let pass = 0; pass < shown.length; pass++) {\n const forced = shown.map((d, i) => d.value > 0 && (spans[i] as number) < minRad);\n if (!forced.some(Boolean)) break;\n const fixed = forced.filter(Boolean).length * minRad;\n const free = shown.reduce((s, d, i) => s + (forced[i] || d.value <= 0 ? 0 : d.value), 0);\n shown.forEach((d, i) => {\n spans[i] = forced[i] ? minRad : free > 0 ? (d.value / free) * (usable - fixed) : 0;\n });\n if (!shown.some((d, i) => d.value > 0 && !forced[i] && (spans[i] as number) < minRad)) break;\n }\n const refs = toRefs(input.selected);\n let angle = start + (closed && gaps ? pad / 2 : 0);\n const labels: Shape[] = [];\n const connectors: Shape[] = [];\n const placed: number[] = [];\n const slices = shown.map((d, si): Shape => {\n const percent = total > 0 ? d.value / total : 0;\n const a0 = angle;\n const a1 = angle + (spans[si] as number);\n if (percent > 0) angle = a1 + pad;\n const share = percentFormat(percent);\n const title = `${d.name}: ${format(d.value)} (${share})`;\n const item: ChartItem = {\n label: title,\n id: d.id ?? d.name,\n name: d.name,\n index: d.i,\n value: d.value,\n };\n const mid = (a0 + a1) / 2;\n if (input.labels && percent > 0) {\n const text = `${d.name} ${share}`;\n if (outside) {\n // Outside labels sit past the rim with a connector; ones that would overlap are dropped.\n const sin = Math.sin(mid);\n const ly = px(cy - (r + 14) * Math.cos(mid));\n if (!placed.some((y) => Math.abs(y - ly) < 12)) {\n placed.push(ly);\n connectors.push({\n kind: 'line',\n part: 'label-connector',\n x1: px(cx + r * sin),\n y1: px(cy - r * Math.cos(mid)),\n x2: px(cx + (r + 12) * sin),\n y2: px(cy - (r + 12) * Math.cos(mid)),\n stroke: CHART_COLORS.axis,\n });\n labels.push(\n label(px(cx + (r + 16) * sin), ly, text, {\n part: 'slice-label',\n anchor: sin > 0.1 ? 'start' : sin < -0.1 ? 'end' : 'middle',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-default)',\n }),\n );\n }\n } else if (percent > 0.03) {\n const lr = (r + r0) / 2;\n labels.push(\n label(px(cx + lr * Math.sin(mid)), px(cy - lr * Math.cos(mid)), text, {\n part: 'slice-label',\n anchor: 'middle',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-on-accent)',\n }),\n );\n }\n }\n // A selected slice is pulled out from the centre along its middle angle.\n const pull = isSelected(item, undefined, refs) ? Math.max(4, r * 0.06) : 0;\n return {\n kind: 'path',\n part: 'slice',\n d:\n percent > 0\n ? roundedArc(\n cx + pull * Math.sin(mid),\n cy - pull * Math.cos(mid),\n r,\n r0,\n a0,\n a1,\n cornerRadius,\n )\n : '',\n fill: colorOf(input, d.i, d.color),\n title,\n item: percent > 0 ? item : 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, ...connectors, ...c.shapes, ...labels], issues };\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 { canvas, CHAR, colorOf, extent, size, stateCanvas } from './frame.js';\nimport { CHART_COLORS } from './palette.js';\nimport { finite, isFinite, linearScale, minMax, 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 winloss = variant === 'winloss';\n // The target and band widen the value range so they always land inside the strip.\n const plotted = [\n ...values,\n ...(input.band ?? []),\n ...(input.target !== undefined ? [input.target] : []),\n ];\n const y = linearScale(winloss ? [-1, 1] : extent(plotted, variant === 'bar'), [\n height - PAD,\n PAD,\n ]);\n // Even spacing, or proportional positions from `x` (numbers or dates) when given for every value.\n const xs = input.x && input.x.length >= n ? input.x.map(categoryValue) : undefined;\n const [x0, x1] = xs ? minMax(xs) : [0, 1];\n const xLin = linearScale([x0, x1], [PAD, right]);\n const x = (i: number) =>\n n < 2\n ? (PAD + right) / 2\n : xs\n ? x1 === x0\n ? (PAD + right) / 2\n : xLin(xs[i] as number)\n : 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 if (input.band && !winloss) {\n const [b0, b1] = input.band;\n const top = Math.min(y(b0), y(b1));\n shapes.push({\n kind: 'rect',\n part: 'band',\n x: PAD,\n y: px(top),\n width: px(Math.max(0, right - PAD)),\n height: px(Math.abs(y(b1) - y(b0))),\n fill: CHART_COLORS.axis,\n opacity: 0.12,\n title: `${format(Math.min(b0, b1))} – ${format(Math.max(b0, b1))}`,\n });\n }\n if (input.target !== undefined && isFinite(input.target) && !winloss)\n shapes.push({\n kind: 'line',\n part: 'target',\n x1: PAD,\n x2: px(right),\n y1: px(y(input.target)),\n y2: px(y(input.target)),\n stroke: CHART_COLORS.axis,\n dash: '3 2',\n title: `Target: ${format(input.target)}`,\n });\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' || winloss) {\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 // Win/loss: every bar is the same height, only the direction and colour carry the sign.\n const top = px(y(winloss ? Math.sign(v) : 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: winloss\n ? v < 0\n ? CHART_COLORS.negative\n : CHART_COLORS.positive\n : v < 0 && input.trend\n ? CHART_COLORS.negative\n : 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 (and, when asked, the first), drawn as a dot.\n const marks = input.markers ?? ['last'];\n if (tail && marks.includes('last')) shapes.push(point(tail.x, tail.y, 2, color, undefined));\n if (head && marks.includes('first'))\n shapes.push({ ...point(head.x, head.y, 2, color, undefined), part: 'first' });\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 { ...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\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, ChartDataIssue, RadarChartInput, RadarMetric, Shape } from './types.js';\n\n/**\n * One polygon per series over a spoke per metric. Scaling: `none` shares one scale (values are\n * comparable); `metric` scales every axis by its own min/max (unlike units, the default when\n * `metrics` carry bounds); `series` scales every series to its own maximum (the historical\n * `normalize: true`, which only shows shape, never magnitude, and is reported as such).\n */\nexport function layoutRadarChart(input: RadarChartInput): Canvas {\n const metrics: RadarMetric[] =\n input.metrics ?? (input.categories ?? []).map((label) => ({ label }));\n const state = stateCanvas(\n input,\n metrics.length === 0 || input.series.every((s) => finite(s.data).length === 0),\n 300,\n 300,\n );\n if (state) return state;\n const issues: ChartDataIssue[] = [];\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 = metrics.length;\n const start = ((input.startAngle ?? 0) * Math.PI) / 180 - Math.PI / 2;\n const angle = (i: number) => start + (i * 2 * Math.PI) / Math.max(1, n);\n const shown = input.series.filter((s) => !isHidden(input, s.name));\n const mode =\n input.normalize === true\n ? 'series'\n : input.normalize === false || input.normalize === undefined\n ? input.metrics\n ? 'metric'\n : 'none'\n : input.normalize;\n if (mode === 'series' && shown.length > 1)\n issues.push({\n code: 'misleading-scale',\n severity: 'warning',\n message:\n \"normalize: 'series' scales each series to its own maximum, so polygons cannot be compared in magnitude; prefer 'metric' or 'none'.\",\n });\n const levels = Math.max(1, Math.round(input.levels ?? 4));\n // Shared scale: nice ticks over the largest value (or `max`).\n const sharedMax = input.max ?? Math.max(0, minMax(shown.flatMap((s) => s.data))[1]);\n const ticks =\n mode === 'none'\n ? niceTicks(0, sharedMax, levels)\n : Array.from({ length: levels + 1 }, (_, i) => (100 * i) / levels);\n const max = mode === 'none' ? (input.max ?? (ticks[ticks.length - 1] as number)) : 100;\n // Per-metric bounds: explicit, else the data extent on that axis, floored at zero.\n const bounds = metrics.map((m, i) => {\n const values = shown.map((s) => s.data[i]);\n const [lo, hi] = minMax(values);\n const min = m.min ?? Math.min(0, lo);\n const nice = niceTicks(min, m.max ?? hi, levels);\n return { min, max: m.max ?? (nice[nice.length - 1] as number) };\n });\n const seriesMax = input.series.map((s) => Math.max(0, minMax(s.data)[1]));\n // A value on axis `i` of series `si`, on the 0–max ring scale.\n const norm = (si: number, i: number, v: number): number => {\n if (mode === 'series')\n return (seriesMax[si] as number) > 0 ? (v / (seriesMax[si] as number)) * 100 : 0;\n if (mode === 'metric') {\n const b = bounds[i] as { min: number; max: number };\n return b.max > b.min ? ((v - b.min) / (b.max - b.min)) * 100 : 0;\n }\n return v;\n };\n const at = (i: number, value: number) => {\n const r = max > 0 ? (Math.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${metrics\n .map((_, i) => {\n const p = at(i, value(i));\n return `${p.x} ${p.y}`;\n })\n .join('L')}Z`;\n const ring = (t: number): Shape => {\n if (input.gridShape === 'circle') {\n const r = max > 0 ? (t / max) * radius : 0;\n return {\n kind: 'circle',\n part: 'grid',\n cx: px(cx),\n cy: px(cy),\n r: px(r),\n fill: 'none',\n stroke: CHART_COLORS.grid,\n };\n }\n return { kind: 'path', part: 'grid', d: polygon(() => t), stroke: CHART_COLORS.grid };\n };\n\n // Concentric grid rings, one per tick, innermost first, then a spoke per metric.\n const rings = ticks.filter((t) => t > 0 && t <= max);\n const ringLabel = (t: number) =>\n mode === 'none'\n ? format(t)\n : mode === 'series'\n ? `${t}%`\n : (() => {\n // Per-metric scale: the first axis' value at this ring.\n const b = bounds[0] as { min: number; max: number };\n return makeFormatter(metrics[0]?.format ?? input.format)(\n b.min + ((b.max - b.min) * t) / 100,\n );\n })();\n const grid: Shape[] = [\n ...rings.map(ring),\n ...metrics.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, ringLabel(t), { part: 'y-label', baseline: 'middle' }),\n ),\n ...metrics.map((m, 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))), m.label, {\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 const texts: Shape[] = [];\n const markers = input.markers ?? true;\n const markerSize = input.markerSize ?? 3;\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) ? norm(si, i, v) : 0;\n };\n metrics.forEach((m, i) => {\n const raw = s.data[i];\n if (!isFinite(raw)) return;\n const f = makeFormatter(m.format ?? input.format);\n const p = at(i, norm(si, i, raw));\n const title = markTitle(s.name, m.label, raw, f);\n points.push({\n ...point(p.x, p.y, markers ? markerSize : 0.01, color, title, {\n label: title,\n id: m.id,\n series: s.name,\n seriesId: s.id,\n category: m.label,\n index: i,\n value: raw,\n }),\n // Invisible anchors keep the tooltip and keyboard stop when markers are off.\n part: markers ? 'point' : 'anchor',\n });\n if (input.labels)\n texts.push(\n label(p.x, px(p.y - 7), f(raw), {\n part: 'value-label',\n anchor: 'middle',\n fill: 'var(--skdx-color-text-default)',\n }),\n );\n });\n polygons.push({\n kind: 'path',\n part: 'area',\n d: polygon(value),\n fill: (input.fill ?? true) ? color : undefined,\n fillOpacity: 0.25,\n stroke: color,\n strokeWidth: 2,\n title: s.name,\n item: { label: s.name, series: s.name, seriesId: s.id },\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, ...texts, ...c.shapes], issues };\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 { colorLegendRoom, colorLegendShapes, makeColorScale } from './colors.js';\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 {\n CalendarCell,\n Canvas,\n ChartDataIssue,\n ColorScale,\n HeatmapInput,\n Shape,\n Value,\n} 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; weeks start on Monday unless asked. */\nexport function calendarMatrix(\n cells: CalendarCell[],\n weekStart: 'monday' | 'sunday' = 'monday',\n): {\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 rows = weekStart === 'sunday' ? [WEEKDAYS[6] as string, ...WEEKDAYS.slice(0, 6)] : WEEKDAYS;\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 { rows, columns: [], data: rows.map(() => []), dates: rows.map(() => []) };\n const [first, last] = minMax(days.map((d) => d.day));\n // Epoch day 0 (1970-01-01) was a Thursday: +3 for Monday-based rows, +4 for Sunday-based.\n const shift = weekStart === 'sunday' ? 4 : 3;\n const weekday = (day: number) => (((day + shift) % 7) + 7) % 7;\n const startWeek = first - weekday(first);\n const weeks = Math.floor((last - startWeek) / 7) + 1;\n const data: Value[][] = rows.map(() => new Array<Value>(weeks).fill(null));\n const dates = rows.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, columns, data, dates };\n}\n\n/** The scale the legacy `color`/`diverging`/`steps`/`domain` props describe, unless a `colorScale` is given. */\nconst scaleOf = (input: HeatmapInput): ColorScale =>\n input.colorScale ??\n (input.diverging\n ? { type: 'diverging', steps: input.steps }\n : { type: 'sequential', domain: input.domain, steps: input.steps });\n\n/** Indexes of `sums` in the asked order, or in place. */\nconst order = (sums: number[], dir: 'asc' | 'desc' | undefined): number[] => {\n const idx = sums.map((_, i) => i);\n if (dir)\n idx.sort((a, b) => (dir === 'asc' ? 1 : -1) * ((sums[a] as number) - (sums[b] as number)));\n return idx;\n};\n\nexport function layoutHeatmap(input: HeatmapInput): Canvas {\n const issues: ChartDataIssue[] = [];\n const cal = input.calendar ? calendarMatrix(input.calendar, input.weekStart) : undefined;\n const rows0 = cal?.rows ?? input.rows ?? [];\n const columns0 = cal?.columns ?? input.columns ?? [];\n const data0 = cal?.data ?? input.data ?? [];\n if (!cal && (data0.length !== rows0.length || data0.some((r) => r.length !== columns0.length)))\n issues.push({\n code: 'ragged-matrix',\n severity: 'warning',\n message: `The matrix is ${data0.length} × ${data0[0]?.length ?? 0} but there are ${rows0.length} rows and ${columns0.length} columns; missing cells are blank.`,\n });\n const bad = data0.flat().filter((v) => v !== null && v !== undefined && !isFinite(v)).length;\n if (bad)\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `${bad} cell${bad === 1 ? ' is' : 's are'} neither a number nor null; drawn as blank.`,\n });\n const all = data0.flat();\n const state = stateCanvas(\n input,\n rows0.length === 0 || columns0.length === 0 || !all.some(isFinite),\n );\n if (state) return { ...state, issues };\n const format = makeFormatter(input.format);\n const { width, height } = size(input);\n const legendRoom = colorLegendRoom(input.colorLegend);\n const plot = plotBox(width, height, {\n ...MARGIN,\n left: cal ? 40 : MARGIN.left,\n right: MARGIN.right + legendRoom.right,\n bottom: MARGIN.bottom + legendRoom.bottom,\n });\n // Rows and columns are reordered by their sums when asked; labels and dates follow.\n const sum = (values: (Value | undefined)[]) =>\n values.reduce<number>((s, v) => s + (isFinite(v) ? v : 0), 0);\n const ri = order(\n rows0.map((_, r) => sum(data0[r] ?? [])),\n input.rowOrder,\n );\n const ci = order(\n columns0.map((_, c) => sum(data0.map((r) => r[c]))),\n input.columnOrder,\n );\n const rows = ri.map((r) => rows0[r] as string);\n const columns = ci.map((c) => columns0[c] as string);\n const cellW = plot.width / Math.max(1, columns.length);\n const cellH = plot.height / Math.max(1, rows.length);\n const colors = makeColorScale(\n scaleOf(input),\n all,\n colorOf(input, 0, input.color),\n input.negativeColor,\n format,\n );\n const cells: Shape[] = [];\n const texts: Shape[] = [];\n const gap = input.cellGap ?? (cal ? 1 : 0);\n const rx = input.cellRadius ?? (cal ? 2 : 0);\n rows.forEach((row, r) => {\n columns.forEach((column, c) => {\n const value = data0[ri[r] as number]?.[ci[c] as number];\n const date = cal?.dates[ri[r] as number]?.[ci[c] as number];\n const where = cal ? (date ?? row) : `${row}, ${column}`;\n const x = px(plot.x + c * cellW + gap);\n const y = px(plot.y + r * cellH + gap);\n const box = {\n x,\n y,\n width: px(Math.max(0, cellW - 2 * gap)),\n height: px(Math.max(0, cellH - 2 * gap)),\n rx: rx || undefined,\n };\n if (!isFinite(value)) {\n if (input.missingColor && (!cal || date))\n cells.push({\n kind: 'rect',\n part: 'missing',\n ...box,\n fill: input.missingColor,\n title: `${where}: —`,\n });\n return;\n }\n const fill = colors.color(value) as { fill: string; opacity: number };\n const title = `${where}: ${format(value)}`;\n cells.push({\n kind: 'rect',\n part: 'cell',\n ...box,\n fill: fill.fill,\n opacity: fill.opacity,\n title,\n item: {\n label: title,\n id: cal ? date : `${row}:${column}`,\n category: column,\n name: row,\n index: c,\n value,\n },\n });\n if (input.labels && cellW > 24 && cellH > 12)\n texts.push(\n label(px(plot.x + (c + 0.5) * cellW), px(plot.y + (r + 0.5) * cellH), format(value), {\n part: 'cell-label',\n anchor: 'middle',\n baseline: 'middle',\n // The cell composites its fill over the surface at the ramp's opacity: a faint cell\n // is mostly surface and reads with the default text token, a strong one is the fill\n // and needs the token meant to sit on it. A fixed token fails one end or the other.\n fill:\n fill.opacity >= 0.5\n ? 'var(--skdx-color-text-on-accent)'\n : 'var(--skdx-color-text-default)',\n }),\n );\n });\n });\n const c = canvas(input, width, height);\n const legend = input.colorLegend\n ? colorLegendShapes(\n colors,\n legendRoom.right\n ? { x: plot.x + plot.width + 12, y: plot.y, width: legendRoom.right, height: plot.height }\n : {\n x: plot.x,\n y: plot.y + plot.height + 8,\n width: plot.width,\n height: legendRoom.bottom,\n },\n legendRoom.options,\n )\n : [];\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 ...legend,\n ...c.shapes,\n ],\n issues,\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, ChartDataIssue, FunnelChartInput, Shape } from './types.js';\n\nconst PAD = 8;\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 const issues: ChartDataIssue[] = [];\n // A pyramid widens toward its base: smallest stage first, shares of the total instead of conversion.\n const sort = input.sort ?? (pyramid ? 'asc' : undefined);\n const data = input.data\n .filter((d) => {\n if (isFinite(d.value)) return true;\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `Stage \"${d.name}\" has no valid value and was dropped.`,\n itemId: d.id ?? d.name,\n });\n return false;\n })\n .sort((a, b) => (sort === 'asc' ? a.value - b.value : sort === 'desc' ? b.value - a.value : 0));\n const state = stateCanvas(input, data.length === 0, 400, 300);\n if (state) return { ...state, issues };\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 gap = Math.max(0, input.gap ?? 4);\n const labelPosition = input.labelPosition ?? 'inside';\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 // Outside labels take the right (or bottom) third of the across axis.\n const outside = labelPosition === 'outside';\n const full = Math.max(0, (outside ? (across * 2) / 3 : across) - 2 * PAD);\n const stageLen = n === 0 ? 0 : (along - 2 * PAD) / n;\n // The neck keeps the narrowest stage readable: widths run from `neck × full` to `full`.\n const neck = Math.max(0, Math.min(1, input.neckWidth ?? 0));\n const widthOf = (value: number) =>\n max > 0 ? (neck + (1 - neck) * (Math.max(0, value) / max)) * full : 0;\n const percentFormat = input.percentFormat\n ? makeFormatter(input.percentFormat)\n : (p: number) => `${Math.round(p * 100)}%`;\n const legend = data.map((d, i) => ({ name: d.name, color: colorOf(input, i, d.color) }));\n const mid =\n (horizontal ? offset + (height - offset) / 2 : width / 2) - (outside ? across / 6 : 0);\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 ? ` · −${percentFormat(1 - d.value / previous)} from ${data[i - 1]?.name}`\n : '';\n const title = `${d.name}: ${format(d.value)} (${percentFormat(percent)})${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 const stage: Shape = {\n kind: 'path',\n part: 'stage',\n d: d0,\n fill: colorOf(input, i, d.color),\n title,\n item: { label: title, id: d.id ?? d.name, name: d.name, index: i, value: d.value },\n };\n if (labelPosition === 'none') return [stage];\n const text = `${d.name} · ${format(d.value)}`;\n const center = (p0 + p1) / 2;\n if (outside) {\n // Beside the stage: below it when horizontal, to its right otherwise, in the text color.\n const at = mid + full / 2 + PAD;\n return [\n stage,\n label(px(horizontal ? center : at), px(horizontal ? at : center), text, {\n part: 'stage-label',\n anchor: horizontal ? 'middle' : 'start',\n baseline: horizontal ? 'hanging' : 'middle',\n fill: 'var(--skdx-color-text-default)',\n }),\n ];\n }\n return [\n stage,\n label(px(horizontal ? center : mid), px(horizontal ? mid : center), text, {\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], issues };\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, id: d.id, 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 { makeFormatter } from './format.js';\nimport { canvas, CHAR, colorOf, 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 { Band, Canvas, GaugeChartInput, Shape } from './types.js';\n\nconst rad = (deg: number) => (deg * Math.PI) / 180;\n\n/** Bounding box of the unit arc (plus the centre) from `a0` to `a1`, radians clockwise from 12 o'clock. */\nfunction arcBounds(a0: number, a1: number): { x0: number; y0: number; x1: number; y1: number } {\n const xs = [0];\n const ys = [0];\n const add = (a: number) => {\n xs.push(Math.sin(a));\n ys.push(-Math.cos(a));\n };\n add(a0);\n add(a1);\n // Every axis crossing inside the sweep is an extreme of the arc.\n for (let k = Math.ceil(a0 / (Math.PI / 2)); k * (Math.PI / 2) <= a1; k++) add(k * (Math.PI / 2));\n return { x0: Math.min(...xs), y0: Math.min(...ys), x1: Math.max(...xs), y1: Math.max(...ys) };\n}\n\n/**\n * One reading on an arc scale: a needle over threshold bands (`radial`), or the arc filled up to\n * the value (`solid`). `startAngle`/`endAngle` open or close the arc; `-90`/`90` is a semi-circle.\n */\nexport function layoutGaugeChart(input: GaugeChartInput): Canvas {\n const state = stateCanvas(input, !isFinite(input.value), 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 min = isFinite(input.min) ? input.min : 0;\n const max = isFinite(input.max) ? input.max : 100;\n const startDeg = input.startAngle ?? -120;\n const endDeg = input.endAngle ?? 120;\n const start = rad(startDeg);\n const end = rad(Math.max(startDeg, Math.min(startDeg + 360, endDeg)));\n const sweep = end - start;\n // A degenerate scale (min === max) has no direction: everything sits at the start.\n const ratio = (v: number) => (max > min ? Math.max(0, Math.min(1, (v - min) / (max - min))) : 0);\n const angleOf = (v: number) => start + ratio(v) * sweep;\n const solid = input.variant === 'solid';\n const tickCount =\n input.ticks === false ? 0 : input.ticks === true || input.ticks === undefined ? 5 : input.ticks;\n const tickLabels = input.tickLabels ?? true;\n\n // Fit the arc's bounding box into the canvas, leaving room for the tick labels around it:\n // their height above and below, their width at the sides.\n const tickValues = Array.from({ length: tickCount }, (_, i) =>\n tickCount === 1 ? min : min + ((max - min) * i) / (tickCount - 1),\n );\n const labelled = tickCount > 0 && tickLabels;\n const widest = labelled ? Math.max(...tickValues.map((v) => format(v).length)) * CHAR : 0;\n const padX = labelled ? 14 + widest : 10;\n const padY = labelled ? 26 : 10;\n const b = arcBounds(start, end);\n const bw = Math.max(b.x1 - b.x0, 0.2);\n const bh = Math.max(b.y1 - b.y0, 0.2);\n const r = Math.max(0, Math.min((width - 2 * padX) / bw, (height - top - 2 * padY) / bh));\n const cx = width / 2 - ((b.x0 + b.x1) / 2) * r;\n const cy = top + (height - top) / 2 - ((b.y0 + b.y1) / 2) * r;\n const thick = r * Math.max(0.04, Math.min(0.6, input.thickness ?? 0.18));\n const r0 = r - thick;\n const at = (radius: number, a: number) => ({\n x: px(cx + radius * Math.sin(a)),\n y: px(cy - radius * Math.cos(a)),\n });\n const shapes: Shape[] = [];\n const range = `${format(min)} – ${format(max)}`;\n const bands = (input.bands ?? []).filter((band) => isFinite(band.from) && isFinite(band.to));\n const bandOf = (v: number) => bands.find((band) => v >= band.from && v <= band.to);\n const bandColor = (band: Band) => band.color ?? variantColor(band.variant);\n\n // The track: the full arc in the grid colour, or the bands themselves on a radial gauge.\n shapes.push({\n kind: 'path',\n part: 'track',\n d: arc(cx, cy, r, r0, start, end),\n fill: CHART_COLORS.grid,\n opacity: 0.6,\n });\n for (const band of bands) {\n const a0 = angleOf(Math.min(band.from, band.to));\n const a1 = angleOf(Math.max(band.from, band.to));\n if (a1 <= a0) continue;\n const title = `${band.label ? `${band.label}: ` : ''}${format(band.from)} – ${format(band.to)}`;\n shapes.push(\n solid\n ? {\n kind: 'path',\n part: 'band',\n d: arc(cx, cy, r + 6, r + 2, a0, a1),\n fill: bandColor(band),\n opacity: 0.7,\n title,\n }\n : {\n kind: 'path',\n part: 'band',\n d: arc(cx, cy, r, r0, a0, a1),\n fill: bandColor(band),\n opacity: 0.75,\n title,\n },\n );\n }\n\n const valueTitle = `${input.caption ?? 'Value'}: ${format(input.value)} (${range})`;\n const item = { label: valueTitle, name: input.caption, value: input.value };\n const a = angleOf(input.value);\n if (solid) {\n const band = bandOf(input.value);\n const fill = band ? bandColor(band) : colorOf(input, 0);\n if (a > start + 1e-6)\n shapes.push({\n kind: 'path',\n part: 'value',\n d: arc(cx, cy, r, r0, start, a),\n fill,\n title: valueTitle,\n item,\n });\n else\n // Nothing to fill at the start: an invisible anchor keeps the tooltip and keyboard stop.\n shapes.push({ ...point(cx, cy), title: valueTitle, item });\n } else {\n const tip = at(r0 - 4, a);\n const base = 4;\n const left = at(base, a - Math.PI / 2);\n const right = at(base, a + Math.PI / 2);\n shapes.push(\n {\n kind: 'path',\n part: 'needle',\n d: `M${left.x} ${left.y}L${tip.x} ${tip.y}L${right.x} ${right.y}Z`,\n fill: 'var(--skdx-color-text-default)',\n title: valueTitle,\n item,\n },\n {\n kind: 'circle',\n part: 'hub',\n cx: px(cx),\n cy: px(cy),\n r: 5,\n fill: 'var(--skdx-color-text-default)',\n },\n );\n }\n\n // Ticks around the outside, the first at `min` and the last at `max`.\n for (const v of tickValues) {\n const ta = angleOf(v);\n const p0 = at(r + 2, ta);\n const p1 = at(r + 7, ta);\n shapes.push({\n kind: 'line',\n part: 'tick',\n x1: p0.x,\n y1: p0.y,\n x2: p1.x,\n y2: p1.y,\n stroke: CHART_COLORS.axis,\n });\n if (tickLabels) {\n const p = at(r + 12, ta);\n const cos = Math.sin(ta);\n shapes.push(\n label(p.x, p.y, format(v), {\n part: 'tick-label',\n anchor: cos > 0.3 ? 'start' : cos < -0.3 ? 'end' : 'middle',\n baseline: 'middle',\n }),\n );\n }\n }\n\n if (isFinite(input.target)) {\n const ta = angleOf(input.target);\n const p0 = at(r0 - 2, ta);\n const p1 = at(r + 4, ta);\n shapes.push({\n kind: 'line',\n part: 'target',\n x1: p0.x,\n y1: p0.y,\n x2: p1.x,\n y2: p1.y,\n stroke: 'var(--skdx-color-text-default)',\n strokeWidth: 2,\n title: `Target: ${format(input.target)}`,\n });\n }\n\n // The reading in the middle: low in the gap of an open arc, inside the bowl of a semi-circle\n // (whose centre is on the bottom edge), centred otherwise.\n const open = sweep < 2 * Math.PI - 1e-6;\n const textY = !open ? cy : b.y1 < 0.2 ? cy - r0 * 0.4 : cy + r0 * 0.45;\n shapes.push(\n label(px(cx), px(textY), input.centerLabel ?? format(input.value), {\n part: 'center-label',\n anchor: 'middle',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-default)',\n weight: 'bold',\n }),\n );\n if (input.caption)\n shapes.push(\n label(px(cx), px(textY + 16), input.caption, {\n part: 'caption',\n anchor: 'middle',\n baseline: 'middle',\n }),\n );\n\n const c = canvas(input, width, height);\n const target = isFinite(input.target) ? `, target ${format(input.target)}` : '';\n return {\n ...c,\n description:\n input.description ??\n `${input.caption ?? 'Value'} ${format(input.value)} on a scale from ${format(min)} to ${format(max)}${target}.`,\n shapes: [...shapes, ...c.shapes],\n };\n}\n\nconst point = (cx: number, cy: number): Shape => ({\n kind: 'circle',\n part: 'anchor',\n cx: px(cx),\n cy: px(cy),\n r: 0.01,\n fill: 'none',\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 { isFinite } from './scale.js';\nimport { layoutPoints } from './scatter.js';\nimport type { BubbleChartInput, Canvas } from './types.js';\n\n/**\n * Three quantities per mark: x, y and a magnitude the bubble's area is proportional to\n * (radius ∝ √z), floored at the smallest radius so tiny values stay visible. Negative\n * magnitudes count as zero; `NaN` magnitudes draw the smallest bubble.\n */\nexport function layoutBubbleChart(input: BubbleChartInput): Canvas {\n const [rMin, rMax] = input.sizeRange ?? [4, 24];\n const zFormat = makeFormatter(input.zAxis?.format ?? input.format);\n const zName = input.zAxis?.label;\n const xName = input.xAxis?.label;\n const yName = input.yAxis?.label;\n const named = (name: string | undefined, text: string) => (name ? `${name} ${text}` : text);\n return layoutPoints(\n {\n ...input,\n series: input.series.map((s) => ({\n name: s.name,\n id: s.id,\n color: s.color,\n data: s.data\n .filter((p) => isFinite(p.x) && isFinite(p.y))\n .map((p) => ({\n x: p.x,\n y: p.y,\n size: isFinite(p.z) ? Math.max(0, p.z) : 0,\n label: p.label,\n id: p.id,\n color: p.color,\n value: p.value ?? p.z,\n })),\n })),\n },\n {\n part: 'bubble',\n opacity: 0.7,\n radius: (z, [, zMax]) =>\n zMax > 0 && isFinite(z) ? Math.max(rMin, Math.sqrt(z / zMax) * rMax) : rMin,\n describe: (name, dot, x, y) =>\n `${name}${dot.label ? ` ${dot.label}` : ''}: ${named(xName, x.format(dot.x))}, ${named(yName, y.format(dot.y))}, ${named(zName, zFormat(dot.size ?? 0))}`,\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 { binEdges, binSamples } from './bins.js';\nimport { layoutCartesian } from './cartesian.js';\nimport { makeFormatter } from './format.js';\nimport { stateCanvas } from './frame.js';\nimport { finite } from './scale.js';\nimport type { Canvas, HistogramInput } from './types.js';\n\n/**\n * The distribution of a raw sample: equal-width bins by count or width (Sturges by default), or\n * explicit `thresholds`. Bars measure counts, density (area sums to 1) or shares of the sample.\n * Bins render as categories, so unequal `thresholds` bins are equally wide; density corrects for that.\n */\nexport function layoutHistogram(input: HistogramInput): Canvas {\n const samples = finite(input.data);\n const state = stateCanvas(input, samples.length === 0);\n if (state) return state;\n const edges = binEdges(samples, {\n bins: input.bins,\n binWidth: input.binWidth,\n domain: input.domain,\n thresholds: input.thresholds,\n });\n const bins = binSamples(samples, edges);\n const inside = bins.reduce((s, b) => s + b.count, 0);\n const mode = input.mode ?? 'count';\n const xFormat = makeFormatter(input.xAxis?.format ?? input.format);\n const yFormat = makeFormatter(\n mode === 'percent'\n ? { style: 'percent', digits: 1 }\n : mode === 'density'\n ? { style: 'decimal', digits: 3 }\n : input.format,\n );\n const name =\n input.name ?? (mode === 'density' ? 'Density' : mode === 'percent' ? 'Share' : 'Count');\n const measure = (b: (typeof bins)[number]) =>\n mode === 'density'\n ? inside > 0 && b.x1 > b.x0\n ? b.count / (inside * (b.x1 - b.x0))\n : 0\n : mode === 'percent'\n ? inside > 0\n ? b.count / inside\n : 0\n : b.count;\n const categories = bins.map((b) => `${xFormat(b.x0)}–${xFormat(b.x1)}`);\n const canvas = layoutCartesian(\n {\n ...input,\n format: yFormat,\n series: [{ name, data: bins.map(measure), color: input.color }],\n categories,\n xAxis: input.xAxis?.label ? { label: input.xAxis.label } : undefined,\n barGap: input.barGap ?? 0.05,\n transform: undefined,\n },\n 'bar',\n );\n // Tooltips name the bin, its observations and their share of the sample.\n const shapes = canvas.shapes.map((s, i) => {\n if (s.part !== 'bar' || !s.item || s.item.index === undefined) return s;\n const b = bins[s.item.index];\n if (!b) return s;\n const share = inside > 0 ? ` (${Math.round((b.count / inside) * 1000) / 10}%)` : '';\n const text = `${categories[s.item.index] ?? String(i)}: ${b.count}${share}${mode === 'count' ? '' : ` · ${name} ${yFormat(measure(b))}`}`;\n return {\n ...s,\n title: s.title === undefined ? undefined : text,\n item: { ...s.item, label: text },\n };\n });\n const rows = canvas.hit?.rows.map((row, i) => {\n const b = bins[i];\n return b\n ? [row[0] as string, `${name}: ${yFormat(measure(b))}`, `Observations: ${b.count}`]\n : row;\n });\n return { ...canvas, shapes, hit: canvas.hit && rows ? { ...canvas.hit, rows } : canvas.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 CHAR,\n colorOf,\n isHidden,\n legendTop,\n MARGIN,\n plotBox,\n size,\n stateCanvas,\n thinTicks,\n} from './frame.js';\nimport { CHART_COLORS, variantColor } from './palette.js';\nimport { bandScale, isFinite, minMax, px } from './scale.js';\nimport { frameShapes, label } from './shapes.js';\nimport type { Band, BulletChartInput, BulletDatum, Canvas, Shape } from './types.js';\n\n/** Qualitative ranges as ascending bands from the scale start. */\nfunction bandsOf(ranges: (number | Band)[] | undefined, from: number): Band[] {\n const out: Band[] = [];\n let last = from;\n for (const r of ranges ?? []) {\n const band: Band = typeof r === 'number' ? { from: last, to: r } : r;\n if (!isFinite(band.to)) continue;\n out.push(band);\n last = band.to;\n }\n return out;\n}\n\n/**\n * A measure against a target over qualitative ranges (Few's bullet graph): one row per KPI,\n * or one column when vertical. Reads compactly in dashboard cards where a gauge would not fit.\n */\nexport function layoutBulletChart(input: BulletChartInput): Canvas {\n const data = input.data.filter((d) => isFinite(d.value));\n const state = stateCanvas(\n input,\n data.length === 0,\n 600,\n 40 + 44 * Math.max(1, input.data.length),\n );\n if (state) return state;\n const format = makeFormatter(input.format);\n const vertical = input.orientation === 'vertical';\n const { width, height } = size(input, 600, vertical ? 300 : 40 + 44 * data.length);\n const rangeOf = (d: BulletDatum) => d.ranges ?? input.ranges;\n const all = data.flatMap((d) => [\n d.value,\n d.target,\n ...(rangeOf(d) ?? []).map((r) => (typeof r === 'number' ? r : r.to)),\n ]);\n const [lo, hi] = minMax(all);\n const min = input.min ?? Math.min(0, lo);\n const widest = Math.max(0, ...data.map((d) => d.name.length)) * CHAR;\n const plot = plotBox(width, height, {\n top: MARGIN.top + legendTop(input),\n right: input.labels && !vertical ? 56 : MARGIN.right,\n bottom: MARGIN.bottom,\n left: vertical ? MARGIN.left : Math.max(MARGIN.left, widest + 16),\n });\n const valueRange: readonly [number, number] = vertical\n ? [plot.y + plot.height, plot.y]\n : [plot.x, plot.x + plot.width];\n const scale = axis(\n [min, Math.max(min, hi)],\n valueRange,\n { min, max: input.max, ticks: input.ticks },\n input.format,\n );\n const rows = bandScale(\n data.length,\n vertical ? [plot.x, plot.x + plot.width] : [plot.y, plot.y + plot.height],\n 0.3,\n );\n const c = canvas(input, width, height);\n const categoryTicks = data.map((d, i) => ({ pos: px(rows.center(i)), label: d.name }));\n const shapes: Shape[] = frameShapes(\n {\n ...c,\n plot,\n xTicks: vertical ? thinTicks(categoryTicks, plot.width) : categoryTicks,\n yTicks: vertical ? scale.ticks : thinTicks(scale.ticks, plot.width),\n baseline: vertical ? scale.zero : scale.zero,\n },\n { horizontal: !vertical },\n );\n\n // A rect along the value axis spanning `[v0, v1]`, `t` thick, centred at the row's `mid`.\n const bar = (\n v0: number,\n v1: number,\n mid: number,\n t: number,\n extra: Omit<Extract<Shape, { kind: 'rect' }>, 'kind' | 'x' | 'y' | 'width' | 'height'>,\n ): Shape => {\n const a = scale.scale(v0);\n const b = scale.scale(v1);\n const len = Math.max(1, Math.abs(b - a));\n return vertical\n ? {\n kind: 'rect',\n x: px(mid - t / 2),\n y: px(Math.min(a, b)),\n width: px(t),\n height: px(len),\n ...extra,\n }\n : {\n kind: 'rect',\n x: px(Math.min(a, b)),\n y: px(mid - t / 2),\n width: px(len),\n height: px(t),\n ...extra,\n };\n };\n\n data.forEach((d, i) => {\n if (isHidden(input, d.name)) return;\n const mid = rows.center(i);\n const full = rows.bandwidth;\n const bands = bandsOf(rangeOf(d), min);\n bands.forEach((band, bi) => {\n const title = `${d.name} ${band.label ?? `range ${bi + 1}`}: ${format(band.from)} – ${format(band.to)}`;\n shapes.push(\n bar(band.from, band.to, mid, full, {\n part: 'range',\n fill: band.color ?? (band.variant ? variantColor(band.variant) : CHART_COLORS.axis),\n opacity: band.variant || band.color ? 0.25 : Math.max(0.1, 0.4 - bi * 0.1),\n title,\n }),\n );\n });\n const target = isFinite(d.target) ? ` · target ${format(d.target)}` : '';\n const inBand = bands.find((band) => d.value >= band.from && d.value <= band.to);\n const title = `${d.name}: ${format(d.value)}${target}${inBand?.label ? ` (${inBand.label})` : ''}`;\n shapes.push(\n bar(Math.min(min, d.value), d.value, mid, full / 3, {\n part: 'measure',\n fill: colorOf(input, i, d.color),\n title,\n item: { label: title, id: d.id, name: d.name, index: i, value: d.value },\n }),\n );\n if (isFinite(d.target)) {\n const t = px(scale.scale(d.target));\n shapes.push({\n kind: 'line',\n part: 'target',\n x1: vertical ? px(mid - full / 2.5) : t,\n x2: vertical ? px(mid + full / 2.5) : t,\n y1: vertical ? t : px(mid - full / 2.5),\n y2: vertical ? t : px(mid + full / 2.5),\n stroke: 'var(--skdx-color-text-default)',\n strokeWidth: 3,\n title: `${d.name} target: ${format(d.target)}`,\n });\n }\n if (input.labels) {\n // Past the target mark when the target is beyond the value, so the two never overlap.\n const v = scale.scale(isFinite(d.target) ? Math.max(d.value, d.target) : d.value);\n shapes.push(\n vertical\n ? label(px(mid), px(v - 6), format(d.value), { part: 'value-label', anchor: 'middle' })\n : label(px(v + 6), px(mid), format(d.value), { part: 'value-label', baseline: 'middle' }),\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 { layoutCartesian } from './cartesian.js';\nimport type { Canvas, ChartInput } from './types.js';\n\n/**\n * Bars, lines, areas and ranges on one category axis: every series declares its `type`, so a\n * revenue bar and a margin line (on `axis: 'right'`) share the frame, legend and crosshair.\n * `ComboChartInput` (the public props) requires a `type` per series so nothing but cartesian\n * series can be passed; the layout itself takes any cartesian input so the framework roots'\n * shared cartesian prop sets can call it.\n */\nexport const layoutComboChart = (input: ChartInput): 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 { Canvas, RangeChartInput } from './types.js';\n\n/**\n * Low–high intervals per category: a shaded band (`area`), floating bars (`bar`) or two\n * outlines (`line`). Inverted intervals (`low > high`) are normalized, equal ends draw a hairline,\n * and a missing end is a gap.\n */\nexport function layoutRangeChart(input: RangeChartInput): Canvas {\n const style = input.variant ?? 'area';\n return layoutCartesian(\n {\n ...input,\n series: input.series.map((s) => ({\n type: 'range',\n name: s.name,\n low: s.low,\n high: s.high,\n color: s.color,\n axis: s.axis,\n curve: s.curve,\n style,\n })),\n },\n 'bar',\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, CHAR, colorOf, isHidden, legendTop, plotBox, size, stateCanvas } from './frame.js';\nimport { selectedIds } from './identity.js';\nimport { CHART_COLORS } from './palette.js';\nimport { isFinite, minMax, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type {\n Canvas,\n ChartDataIssue,\n LegendItem,\n NetworkChartInput,\n NetworkNode,\n Shape,\n} from './types.js';\n\n/**\n * Trigonometry rounded to 1e-6: `Math.cos`/`Math.sin` are implementation-defined, so their\n * last-bit differences between a Node render and a browser render would otherwise reach the\n * markup and break hydration.\n */\nconst q = (v: number) => Math.round(v * 1e6) / 1e6;\n\n/** Node labels are drawn by default up to this many nodes. */\nexport const NETWORK_LABEL_LIMIT = 60;\n/** Per-edge titles and keyboard stops are emitted up to this many edges. */\nconst EDGE_TITLE_LIMIT = 500;\n\ninterface Placed {\n node: NetworkNode;\n index: number;\n x: number;\n y: number;\n r: number;\n color: string;\n degree: number;\n}\n\n/**\n * Nodes and edges of an arbitrary graph: force-directed (default), around a circle, or at\n * the nodes' own coordinates. Deterministic: the same input always gives the same picture.\n */\nexport function layoutNetworkChart(input: NetworkChartInput): Canvas {\n // Duplicate ids keep their first definition; edges to unknown ids are dropped. Both are reported.\n const issues: ChartDataIssue[] = [];\n const seen = new Map<string, NetworkNode>();\n for (const n of input.nodes)\n if (!seen.has(n.id)) seen.set(n.id, n);\n else\n issues.push({\n code: 'duplicate-id',\n severity: 'warning',\n message: `Node id \"${n.id}\" is duplicated; the first definition is kept.`,\n itemId: n.id,\n });\n const groupOf = (n: NetworkNode) => n.group;\n const nodes = [...seen.values()].filter(\n (n) => !(n.group !== undefined && isHidden(input, n.group)),\n );\n const ids = new Set(nodes.map((n) => n.id));\n const edges = input.edges.filter((e) => {\n const ok = ids.has(e.source) && ids.has(e.target);\n if (!ok && !(seen.has(e.source) && seen.has(e.target)))\n issues.push({\n code: 'unknown-node',\n severity: 'warning',\n message: `Edge ${e.source} → ${e.target} names a node that does not exist and was dropped.`,\n itemId: e.id,\n });\n return ok;\n });\n const state = stateCanvas(input, nodes.length === 0);\n if (state) return { ...state, issues };\n const format = makeFormatter(input.format);\n const { width, height } = size(input);\n const [rMin, rMax] = input.nodeRange ?? [5, 16];\n const labels = input.labels ?? nodes.length <= NETWORK_LABEL_LIMIT;\n const plot = plotBox(width, height, {\n top: legendTop(input) + rMax + 8,\n right: rMax + (labels ? 48 : 8),\n bottom: rMax + 8,\n left: rMax + 8,\n });\n const groups = [...new Set(input.nodes.map(groupOf).filter((g): g is string => g !== undefined))];\n const colorFor = (n: NetworkNode, i: number) =>\n n.color ?? colorOf(input, n.group !== undefined ? groups.indexOf(n.group) : i);\n const [, vMax] = minMax(nodes.map((n) => n.value));\n const radius = (v: number | undefined) =>\n isFinite(v) && vMax > 0 ? rMin + Math.sqrt(Math.max(0, v) / vMax) * (rMax - rMin) : rMin;\n const degree = new Map<string, number>();\n for (const e of edges) {\n degree.set(e.source, (degree.get(e.source) ?? 0) + 1);\n if (e.target !== e.source) degree.set(e.target, (degree.get(e.target) ?? 0) + 1);\n }\n\n const n = nodes.length;\n const at = new Map<string, number>(nodes.map((node, i) => [node.id, i]));\n let xs: number[];\n let ys: number[];\n const mode = input.arrange ?? 'force';\n if (mode === 'manual' && nodes.every((node) => isFinite(node.x) && isFinite(node.y))) {\n xs = nodes.map((node) => node.x as number);\n ys = nodes.map((node) => node.y as number);\n } else if (mode === 'circular' || mode === 'manual' || n < 3) {\n xs = nodes.map((_, i) => q(Math.cos((2 * Math.PI * i) / n - Math.PI / 2)));\n ys = nodes.map((_, i) => q(Math.sin((2 * Math.PI * i) / n - Math.PI / 2)));\n } else {\n ({ xs, ys } = force(\n n,\n edges.map((e) => [at.get(e.source) as number, at.get(e.target) as number]),\n input.iterations ?? Math.max(50, Math.min(300, Math.floor(30_000 / n))),\n ));\n }\n // Fit the positions into the plot, keeping the aspect ratio of the layout.\n const [x0, x1] = minMax(xs);\n const [y0, y1] = minMax(ys);\n const span = Math.max(x1 - x0, y1 - y0) || 1;\n const scale = Math.min(plot.width / span, plot.height / span);\n const ox = plot.x + (plot.width - (x1 - x0) * scale) / 2;\n const oy = plot.y + (plot.height - (y1 - y0) * scale) / 2;\n const placed: Placed[] = nodes.map((node, i) => ({\n node,\n index: i,\n x: px(ox + ((xs[i] as number) - x0) * scale),\n y: px(oy + ((ys[i] as number) - y0) * scale),\n r: px(radius(node.value)),\n color: colorFor(node, i),\n degree: degree.get(node.id) ?? 0,\n }));\n const byId = new Map(placed.map((p) => [p.node.id, p]));\n\n // Neighbourhood of the selected node; everything else is dimmed.\n // The selected node's neighbourhood is lit and the rest dimmed (the first selected id counts).\n const selectedId = selectedIds(input.selected)[0];\n const selected = selectedId !== undefined ? byId.get(String(selectedId)) : undefined;\n const near = new Set<string>();\n if (selected) {\n near.add(selected.node.id);\n for (const e of edges) {\n if (e.source === selected.node.id) near.add(e.target);\n if (e.target === selected.node.id) near.add(e.source);\n }\n }\n const dim = (id: string, id2 = id) =>\n selected && !(near.has(id) && near.has(id2)) ? 0.15 : undefined;\n const connected = (e: (typeof edges)[number]) =>\n !selected || e.source === selected.node.id || e.target === selected.node.id;\n\n const [, eMax] = minMax(edges.map((e) => e.value));\n const titled = edges.length <= EDGE_TITLE_LIMIT;\n // Labels (edge and node) that would cover an earlier label are dropped.\n const boxes: { x: number; y: number; w: number }[] = [];\n const placeText = (x: number, y: number, w: number) => {\n if (boxes.some((b) => Math.abs(b.y - y) < 12 && x < b.x + b.w + 4 && x + w + 4 > b.x))\n return false;\n boxes.push({ x, y, w });\n return true;\n };\n const arrows: Shape[] = [];\n const edgeTexts: Shape[] = [];\n const links: Shape[] = edges.map((e) => {\n const a = byId.get(e.source) as Placed;\n const b = byId.get(e.target) as Placed;\n const w = isFinite(e.value) && eMax > 0 ? 1 + 3 * Math.sqrt(Math.max(0, e.value) / eMax) : 1;\n const text = `${a.node.label ?? a.node.id} → ${b.node.label ?? b.node.id}${e.label ? ` ${e.label}` : ''}${isFinite(e.value) ? `: ${format(e.value)}` : ''}`;\n const opacity = connected(e) ? dim(e.source, e.target) : 0.15;\n const item = titled\n ? { label: text, id: e.id, name: e.source, category: e.target, value: e.value }\n : undefined;\n if (a === b) {\n // A self-link loops out of the node and back in.\n const loop = a.r * 2.5;\n return {\n kind: 'path',\n part: 'edge',\n d: `M${px(a.x)} ${px(a.y - a.r)}C${px(a.x - loop)} ${px(a.y - loop * 1.5)} ${px(a.x + loop)} ${px(a.y - loop * 1.5)} ${px(a.x)} ${px(a.y - a.r)}`,\n stroke: CHART_COLORS.axis,\n strokeWidth: w,\n opacity: opacity ?? 0.7,\n title: titled ? text : undefined,\n item,\n };\n }\n const len = Math.sqrt((b.x - a.x) * (b.x - a.x) + (b.y - a.y) * (b.y - a.y)) || 1;\n const ux = (b.x - a.x) / len;\n const uy = (b.y - a.y) / len;\n if (input.directed) {\n // An arrowhead whose tip touches the target node's rim.\n const tx = b.x - ux * b.r;\n const ty = b.y - uy * b.r;\n const bx = tx - ux * 6;\n const by = ty - uy * 6;\n arrows.push({\n kind: 'path',\n part: 'arrow',\n d: `M${px(tx)} ${px(ty)}L${px(bx - uy * 3)} ${px(by + ux * 3)}L${px(bx + uy * 3)} ${px(by - ux * 3)}Z`,\n fill: CHART_COLORS.axis,\n opacity: opacity ?? 0.7,\n });\n }\n const edgeText = `${e.label ?? ''}${isFinite(e.value) ? `${e.label ? ': ' : ''}${format(e.value)}` : ''}`;\n if (input.edgeLabels && edgeText) {\n const mx = (a.x + b.x) / 2;\n const my = (a.y + b.y) / 2;\n const tw = edgeText.length * CHAR;\n if (placeText(mx - tw / 2, my, tw))\n edgeTexts.push(\n label(px(mx), px(my), edgeText, {\n part: 'edge-label',\n anchor: 'middle',\n baseline: 'middle',\n }),\n );\n }\n return {\n kind: 'path',\n part: 'edge',\n d: `M${px(a.x)} ${px(a.y)}L${px(b.x)} ${px(b.y)}`,\n stroke: CHART_COLORS.axis,\n strokeWidth: w,\n opacity: opacity ?? 0.7,\n title: titled ? text : undefined,\n item,\n };\n });\n\n const marks: Shape[] = [];\n const texts: Shape[] = [];\n for (const p of placed) {\n const name = p.node.label ?? p.node.id;\n const value = isFinite(p.node.value) ? `: ${format(p.node.value)}` : '';\n const group = p.node.group !== undefined ? ` · ${p.node.group}` : '';\n const text = `${name}${value}${group} · ${p.degree} connection${p.degree === 1 ? '' : 's'}`;\n marks.push({\n kind: 'circle',\n part: 'node',\n cx: p.x,\n cy: p.y,\n r: p.r,\n fill: p.color,\n stroke:\n selected?.node.id === p.node.id\n ? 'var(--skdx-color-text-default)'\n : 'var(--skdx-color-surface-default)',\n opacity: dim(p.node.id),\n title: text,\n item: {\n label: text,\n name: p.node.id,\n category: p.node.group,\n index: p.index,\n value: p.node.value,\n },\n });\n if (!labels) continue;\n // Labels sit to the right of their node; one that would cover an earlier label is dropped.\n const w = name.length * CHAR;\n const lx = p.x + p.r + 4;\n const ly = p.y;\n if (!placeText(lx, ly, w)) continue;\n texts.push(\n label(px(lx), px(ly), name, {\n part: 'node-label',\n baseline: 'middle',\n fill: dim(p.node.id) === undefined ? 'var(--skdx-color-text-default)' : CHART_COLORS.grid,\n }),\n );\n }\n const legend: LegendItem[] = groups.map((g, i) => ({ name: g, color: colorOf(input, i) }));\n const c = canvas(input, width, height, legend);\n return {\n ...c,\n shapes: [...links, ...arrows, ...marks, ...edgeTexts, ...texts, ...c.shapes],\n issues,\n };\n}\n\n/**\n * Fruchterman–Reingold in the unit square with linear cooling. Deterministic: nodes start on a\n * circle in input order, the seed is quantised and every step afterwards uses only IEEE-exact\n * arithmetic (`+ - * /` and `sqrt`), so a server render and a browser render agree bit for bit —\n * `Math.cos`/`Math.sin`/`Math.hypot` are implementation-defined and their last-bit differences\n * would otherwise amplify over the iterations into a hydration mismatch.\n * ponytail: O(n²) per iteration; a Barnes–Hut tree if graphs exceed ~2000 nodes.\n */\nexport function force(\n n: number,\n edges: [number, number][],\n iterations: number,\n): { xs: number[]; ys: number[] } {\n const xs = Array.from({ length: n }, (_, i) => q(Math.cos((2 * Math.PI * i) / n)));\n const ys = Array.from({ length: n }, (_, i) => q(Math.sin((2 * Math.PI * i) / n)));\n const k = Math.sqrt(4 / n);\n const dx = new Array<number>(n).fill(0);\n const dy = new Array<number>(n).fill(0);\n for (let it = 0; it < iterations; it++) {\n const t = 0.1 * (1 - it / iterations) + 0.005;\n dx.fill(0);\n dy.fill(0);\n for (let i = 0; i < n; i++)\n for (let j = i + 1; j < n; j++) {\n let ex = (xs[i] as number) - (xs[j] as number);\n let ey = (ys[i] as number) - (ys[j] as number);\n // Coincident nodes get a deterministic nudge so they can separate.\n if (ex === 0 && ey === 0) {\n ex = 1e-3 * ((i % 7) + 1);\n ey = 1e-3 * ((j % 5) + 1);\n }\n const d2 = ex * ex + ey * ey;\n const f = (k * k) / d2;\n dx[i] = (dx[i] as number) + ex * f;\n dy[i] = (dy[i] as number) + ey * f;\n dx[j] = (dx[j] as number) - ex * f;\n dy[j] = (dy[j] as number) - ey * f;\n }\n for (const [a, b] of edges) {\n if (a === b) continue;\n const ex = (xs[a] as number) - (xs[b] as number);\n const ey = (ys[a] as number) - (ys[b] as number);\n const d = Math.sqrt(ex * ex + ey * ey) || 1e-6;\n const f = (d * d) / k / d;\n dx[a] = (dx[a] as number) - ex * f;\n dy[a] = (dy[a] as number) - ey * f;\n dx[b] = (dx[b] as number) + ex * f;\n dy[b] = (dy[b] as number) + ey * f;\n }\n for (let i = 0; i < n; i++) {\n const d =\n Math.sqrt((dx[i] as number) * (dx[i] as number) + (dy[i] as number) * (dy[i] as number)) ||\n 1e-6;\n const step = Math.min(d, t);\n xs[i] = (xs[i] as number) + ((dx[i] as number) / d) * step;\n ys[i] = (ys[i] as number) + ((dy[i] as number) / d) * step;\n }\n }\n return { xs, ys };\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 } from './format.js';\nimport {\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, variantColor } from './palette.js';\nimport { bandScale, linearScale, minMax, px, timeTicks } from './scale.js';\nimport { label } from './shapes.js';\nimport type {\n Canvas,\n ChartDataIssue,\n LegendItem,\n Shape,\n Tick,\n TimelineChartInput,\n TimelineEvent,\n} from './types.js';\n\nconst LABEL_H = 14;\n\ninterface Placed {\n event: TimelineEvent;\n index: number;\n time: number;\n lane: number;\n color: string;\n text: string;\n}\n\n/**\n * Point-in-time events on a time axis, sorted chronologically. Horizontal lanes stagger their\n * labels so dense events stay readable; the vertical layout is a list, one row per event, which\n * reads evenly however uneven the gaps are.\n */\nexport function layoutTimelineChart(input: TimelineChartInput): Canvas {\n const issues: ChartDataIssue[] = [];\n const parsed = input.events\n .map((event, index) => ({ event, index, time: new Date(event.date).getTime() }))\n .filter((e) => {\n if (!Number.isFinite(e.time)) {\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `Event \"${e.event.label}\" has an unparseable date and was dropped.`,\n itemId: e.event.id ?? e.event.label,\n });\n return false;\n }\n return !(e.event.group !== undefined && isHidden(input, e.event.group));\n })\n .sort((a, b) => a.time - b.time || a.index - b.index);\n const state = stateCanvas(input, parsed.length === 0);\n if (state) return { ...state, issues };\n const { width, height } = size(input);\n const vertical = input.orientation === 'vertical';\n const groups = [\n ...new Set(input.events.map((e) => e.group).filter((g): g is string => g !== undefined)),\n ];\n const lanes = groups.length ? groups : [''];\n const [t0, t1] = minMax(parsed.map((e) => e.time));\n const dateFormat =\n input.xAxis?.format ?? ({ style: t1 - t0 < 2 * 86_400_000 ? 'time' : 'date' } as const);\n const dateOf = (t: number) => categoryLabel(t, dateFormat);\n const showLabels = input.labels ?? true;\n const events: Placed[] = parsed.map((e) => {\n const g = e.event.group;\n const color =\n e.event.color ??\n (e.event.variant\n ? variantColor(e.event.variant)\n : colorOf(input, g === undefined ? 0 : groups.indexOf(g)));\n const desc = e.event.description ? ` — ${e.event.description}` : '';\n return {\n ...e,\n lane: g === undefined ? 0 : groups.indexOf(g),\n color,\n text: `${e.event.label} · ${dateOf(e.time)}${desc}`,\n };\n });\n const legend: LegendItem[] = groups.map((g, i) => ({ name: g, color: colorOf(input, i) }));\n const c = canvas(input, width, height, legend);\n const item = (e: Placed) => ({\n label: e.text,\n id: e.event.id,\n name: e.event.label,\n category: e.event.group,\n index: e.index,\n value: e.time,\n });\n const shapes: Shape[] = [];\n\n if (vertical) {\n // A list: the date column, a spine, one marker and label per row.\n const dateW = Math.max(...events.map((e) => dateOf(e.time).length)) * CHAR + 16;\n const plot = plotBox(width, height, {\n top: 8 + legendTop(input),\n right: 8,\n bottom: 8,\n left: dateW + 12,\n });\n const rows = bandScale(events.length, [plot.y, plot.y + plot.height], 0);\n const spine = px(plot.x);\n shapes.push({\n kind: 'line',\n part: 'axis',\n x1: spine,\n x2: spine,\n y1: plot.y,\n y2: plot.y + plot.height,\n stroke: CHART_COLORS.axis,\n });\n events.forEach((e, i) => {\n const y = px(rows.center(i));\n shapes.push(\n label(px(plot.x - 12), y, dateOf(e.time), {\n part: 'x-label',\n anchor: 'end',\n baseline: 'middle',\n }),\n {\n kind: 'circle',\n part: 'event',\n cx: spine,\n cy: y,\n r: 5,\n fill: e.color,\n stroke: 'var(--skdx-color-surface-default)',\n title: e.text,\n item: item(e),\n },\n );\n if (showLabels) {\n const desc = e.event.description;\n const room = rows.step >= 2 * LABEL_H && desc;\n shapes.push(\n label(px(plot.x + 12), room ? px(y - 7) : y, e.event.label, {\n part: 'event-label',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-default)',\n }),\n );\n if (room)\n shapes.push(\n label(px(plot.x + 12), px(y + 7), desc, {\n part: 'event-description',\n baseline: 'middle',\n }),\n );\n }\n });\n return { ...c, shapes: [...shapes, ...c.shapes], issues };\n }\n\n const laneW = groups.length ? Math.max(...groups.map((g) => g.length)) * CHAR + 16 : 8;\n // Half a date label at each end, so the first and last ticks stay inside the canvas.\n const dateW = (Math.max(dateOf(t0).length, dateOf(t1).length) * CHAR) / 2 + 4;\n const plot = plotBox(width, height, {\n top: 8 + legendTop(input),\n right: Math.max(16, dateW),\n bottom: 32 + (input.xAxis?.label ? 14 : 0),\n left: Math.max(16, laneW, dateW),\n });\n // Pad the time domain so the first and last markers and their labels stay inside.\n const padT = (t1 - t0) * 0.04 || 3_600_000;\n const x = linearScale([t0 - padT, t1 + padT], [plot.x, plot.x + plot.width]);\n const ticks: Tick[] = timeTicks(t0 - padT, t1 + padT)\n .filter((t) => t >= t0 - padT && t <= t1 + padT)\n .map((t) => ({ pos: px(x(t)), label: dateOf(t) }));\n for (const t of thinTicks(ticks, plot.width))\n shapes.push(\n {\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 label(t.pos, plot.y + plot.height + 20, t.label, { part: 'x-label', anchor: 'middle' }),\n );\n if (input.xAxis?.label)\n shapes.push(\n label(px(plot.x + plot.width / 2), height - 4, input.xAxis.label, {\n part: 'axis-title',\n anchor: 'middle',\n }),\n );\n const rows = bandScale(lanes.length, [plot.y, plot.y + plot.height], 0);\n const maxLevel = Math.max(0, Math.floor((rows.step / 2 - 14) / LABEL_H));\n lanes.forEach((name, li) => {\n const y = px(rows.center(li));\n shapes.push({\n kind: 'line',\n part: 'axis',\n x1: plot.x,\n x2: plot.x + plot.width,\n y1: y,\n y2: y,\n stroke: CHART_COLORS.axis,\n });\n if (name)\n shapes.push(\n label(plot.x - 8, y, name, { part: 'y-label', anchor: 'end', baseline: 'middle' }),\n );\n });\n // Labels stack upward in levels; a label that would need more room than the lane has is left\n // to the tooltip. Same-time events fan out across levels the same way.\n const lastEnd: number[][] = lanes.map(() => []);\n const texts: Shape[] = [];\n const marks: Shape[] = [];\n for (const e of events) {\n const cx = px(x(e.time));\n const cy = px(rows.center(e.lane));\n marks.push({\n kind: 'circle',\n part: 'event',\n cx,\n cy,\n r: 5,\n fill: e.color,\n stroke: 'var(--skdx-color-surface-default)',\n title: e.text,\n item: item(e),\n });\n if (!showLabels) continue;\n const w = e.event.label.length * CHAR;\n const left = cx - w / 2;\n const ends = lastEnd[e.lane] as number[];\n let level = 0;\n while (level <= maxLevel && (ends[level] ?? -Infinity) > left - 6) level++;\n if (level > maxLevel) continue;\n ends[level] = left + w;\n const ly = px(cy - 12 - level * LABEL_H);\n // Keep the text inside the canvas at the ends; the connector still points at the mark.\n const lx = px(Math.max(w / 2 + 2, Math.min(width - w / 2 - 2, cx)));\n if (level > 0)\n texts.push({\n kind: 'line',\n part: 'connector',\n x1: cx,\n x2: cx,\n y1: px(cy - 6),\n y2: px(ly + 4),\n stroke: CHART_COLORS.grid,\n });\n texts.push(\n label(lx, ly, e.event.label, {\n part: 'event-label',\n anchor: 'middle',\n fill: 'var(--skdx-color-text-default)',\n }),\n );\n }\n return { ...c, shapes: [...shapes, ...texts, ...marks, ...c.shapes], issues };\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 { refOf } from './identity.js';\nimport { CHART_COLORS } from './palette.js';\nimport { px } from './scale.js';\nimport type {\n Box,\n Canvas,\n ChartItem,\n ChartItemRef,\n EditModel,\n Hit,\n MapModel,\n MapView,\n Shape,\n TaskChange,\n Zoom,\n} 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 shared tooltip rows at the category nearest to `x`, through the axis formatter when set. */\nexport function crosshairRows(\n layout: Canvas,\n x: number,\n): { index: number; rows: string[] } | undefined {\n const hit = layout.hit;\n if (!hit || hit.xs.length === 0) return undefined;\n const index = nearestIndex(hit, x);\n const rows = hit.rows[index] ?? [];\n return { index, rows: layout.axisTooltipFormatter?.(rows, index) ?? rows };\n}\n\n/** The crosshair line alone, at the category nearest to `x`. */\nexport function crosshairLine(layout: Canvas, x: number): Shape | undefined {\n const hit = layout.hit;\n if (!hit || hit.xs.length === 0) return undefined;\n const cx = hit.xs[nearestIndex(hit, x)] as number;\n return {\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}\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 line = crosshairLine(layout, x) as Extract<Shape, { kind: 'line' }>;\n const { rows } = crosshairRows(layout, x) as { rows: string[] };\n const ay = layout.tooltipAnchored ? hit.plot.y + 8 : y;\n return [\n line,\n ...tooltipShapes(line.x1, ay, rows, layout.width, layout.height, layout.tooltipPlacement),\n ];\n}\n\n/** The crosshair shapes at a category label, for charts synced to another chart's pointer. */\nexport function crosshairAt(layout: Canvas, category: string): Shape[] {\n const hit = layout.hit;\n if (!hit || hit.xs.length === 0) return [];\n const i = hit.rows.findIndex((r) => r[0] === category);\n if (i < 0) return [];\n const x = hit.xs[i] as number;\n return crosshairShapes(layout, x, hit.plot.y + 8);\n}\n\n/**\n * What a pointer at the given position should show when the tooltip is rendered outside the svg\n * (`tooltip.portal`): the text lines, and the crosshair line to keep inside the svg.\n */\nexport function pointerTooltipText(\n layout: Canvas,\n target: EventTarget | null,\n svg: Element,\n clientX: number,\n clientY: number,\n): { lines: string[]; shapes: Shape[] } {\n if (!layout.tooltip) return { lines: [], shapes: [] };\n if (layout.hit?.crosshair) {\n const { x, y } = toViewBox(svg, clientX, clientY, layout.width, layout.height);\n if (inside(layout.hit.plot, x, y)) {\n const found = crosshairRows(layout, x);\n const line = crosshairLine(layout, x);\n if (found && line) return { lines: found.rows, shapes: [line] };\n }\n }\n const mark = (target as Element | null)?.closest?.('[data-skdx-part]');\n const item = layout.tooltipFormatter ? itemAt(layout, target)?.item : undefined;\n const text =\n (item && layout.tooltipFormatter?.(item)) ||\n (mark &&\n Array.from(mark.children).find((c) => c.tagName.toLowerCase() === 'title')?.textContent);\n if (!text) return { lines: [], shapes: [] };\n return { lines: Array.isArray(text) ? text : [text], shapes: [] };\n}\n\n/**\n * Tooltip shapes for the mark under the pointer, or none. Reads the mark's `<title>` (or its\n * item through `formatter`) 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 layout?: Canvas,\n): Shape[] {\n const mark = (target as Element | null)?.closest?.('[data-skdx-part]');\n const item = layout && layout.tooltipFormatter ? itemAt(layout, target)?.item : undefined;\n const text =\n (item && layout?.tooltipFormatter?.(item)) ||\n (mark &&\n Array.from(mark.children).find((c) => c.tagName.toLowerCase() === 'title')?.textContent);\n if (!text) return [];\n // Anchored tooltips sit at the mark itself (its top/centre), not under the pointer.\n const hit = layout?.tooltipAnchored ? itemAt(layout, target) : undefined;\n const shape = hit ? layout?.shapes[hit.index] : undefined;\n const { x, y } = shape ? anchorOf(shape) : toViewBox(svg, clientX, clientY, width, height);\n return tooltipShapes(x, y, text, width, height, layout?.tooltipPlacement);\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, layout);\n}\n\n/** The ref of the mark under the pointer (legend entries excluded), or `null` off any mark. */\nexport function hoveredRef(layout: Canvas, target: EventTarget | null): ChartItemRef | null {\n const hit = itemAt(layout, target);\n return hit && !hit.item.legend ? refOf(hit.item) : null;\n}\n\n/** Whether a shape's anchor lies inside a box. */\nconst anchorInside = (s: Shape, b: Box) => {\n const { x, y } = anchorOf(s);\n const cy = s.kind === 'circle' ? s.cy : s.kind === 'rect' ? s.y + s.height / 2 : y;\n return x >= b.x && x <= b.x + b.width && cy >= b.y && cy <= b.y + b.height;\n};\n\n/** Refs of the marks whose anchor lies inside a viewBox rectangle: rectangular brush selection. */\nexport function itemsInBox(layout: Canvas, box: Box): ChartItemRef[] {\n const seen = new Set<string>();\n const out: ChartItemRef[] = [];\n for (const s of layout.shapes) {\n if (!s.item || s.item.legend || s.part === 'anchor') continue;\n if (!anchorInside(s, box)) continue;\n const ref = refOf(s.item);\n const key = JSON.stringify(ref);\n if (seen.has(key)) continue;\n seen.add(key);\n out.push(ref);\n }\n return out;\n}\n\n/** The dashed rectangle drawn while a selection brush is dragged. */\nexport const brushBoxShape = (box: Box): Shape => ({\n kind: 'rect',\n part: 'selection-box',\n x: px(box.x),\n y: px(box.y),\n width: px(box.width),\n height: px(box.height),\n fill: CHART_COLORS.focus,\n opacity: 0.12,\n stroke: CHART_COLORS.focus,\n});\n\n/** A box from two corners, normalized. */\nexport const boxFrom = (x0: number, y0: number, x1: number, y1: number): Box => ({\n x: Math.min(x0, x1),\n y: Math.min(y0, y1),\n width: Math.abs(x1 - x0),\n height: Math.abs(y1 - y0),\n});\n\n/** Whether a point is inside a polygon (even-odd rule). */\nexport function insidePolygon(points: readonly { x: number; y: number }[], x: number, y: number) {\n let inside = false;\n for (let i = 0, j = points.length - 1; i < points.length; j = i++) {\n const a = points[i] as { x: number; y: number };\n const b = points[j] as { x: number; y: number };\n if (a.y > y !== b.y > y && x < ((b.x - a.x) * (y - a.y)) / (b.y - a.y) + a.x) inside = !inside;\n }\n return inside;\n}\n\n/** Refs of the marks whose anchor lies inside a drawn polygon: lasso selection. */\nexport function itemsInPolygon(\n layout: Canvas,\n points: readonly { x: number; y: number }[],\n): ChartItemRef[] {\n if (points.length < 3) return [];\n const seen = new Set<string>();\n const out: ChartItemRef[] = [];\n for (const s of layout.shapes) {\n if (!s.item || s.item.legend || s.part === 'anchor') continue;\n const { x, y } = anchorOf(s);\n const cy = s.kind === 'circle' ? s.cy : s.kind === 'rect' ? s.y + s.height / 2 : y;\n if (!insidePolygon(points, x, cy)) continue;\n const ref = refOf(s.item);\n const key = JSON.stringify(ref);\n if (seen.has(key)) continue;\n seen.add(key);\n out.push(ref);\n }\n return out;\n}\n\n/** The dashed outline drawn while a lasso is dragged. */\nexport const lassoShape = (points: readonly { x: number; y: number }[]): Shape => ({\n kind: 'path',\n part: 'selection-lasso',\n d: points.length ? `M${points.map((p) => `${px(p.x)} ${px(p.y)}`).join('L')}` : '',\n fill: CHART_COLORS.focus,\n fillOpacity: 0.12,\n stroke: CHART_COLORS.focus,\n dash: '4 3',\n});\n\n/*\n * Gantt editing: a root turns a pointer down on a bar into a grab (move, or resize either end)\n * and a drag into a proposed task change, all in the layout's time units.\n */\n\nexport interface GanttGrab {\n bar: EditModel['bars'][number];\n mode: 'move' | 'start' | 'end';\n}\n\nconst EDGE = 6;\n\n/** What a pointer down at viewBox `(x, y)` grabs on an editable Gantt, if anything. */\nexport function ganttGrab(layout: Canvas, x: number, y: number): GanttGrab | undefined {\n const edit = layout.edit;\n if (!edit) return undefined;\n for (const bar of edit.bars) {\n if (y < bar.y || y > bar.y + bar.height || x < bar.x0 - EDGE || x > bar.x1 + EDGE) continue;\n if (Math.abs(x - bar.x0) <= EDGE) return { bar, mode: 'start' };\n if (Math.abs(x - bar.x1) <= EDGE) return { bar, mode: 'end' };\n return { bar, mode: 'move' };\n }\n return undefined;\n}\n\n/** The task after dragging a grab by `dx` viewBox pixels; the end never crosses the start. */\nexport function ganttDrag(layout: Canvas, grab: GanttGrab, dx: number): TaskChange {\n const edit = layout.edit as EditModel;\n return shifted(edit, grab, edit.invert(grab.bar.x0 + dx) - edit.invert(grab.bar.x0));\n}\n\n/**\n * Keyboard editing of the focused bar (shape index `focus`): Shift+Arrow moves the task one\n * step, Alt+Arrow moves its end, Alt+Shift+Arrow its start. A step is the snap unit, or the\n * time under 10 px. `undefined` when the key or the focused shape is not an edit.\n */\nexport function ganttKey(\n layout: Canvas,\n focus: number | null,\n key: { key: string; shiftKey: boolean; altKey: boolean },\n): TaskChange | undefined {\n const edit = layout.edit;\n const dir = key.key === 'ArrowRight' ? 1 : key.key === 'ArrowLeft' ? -1 : 0;\n if (!edit || focus === null || !dir || !(key.shiftKey || key.altKey)) return undefined;\n const bar = edit.bars.find((b) => b.index === focus);\n if (!bar) return undefined;\n const mode = !key.altKey ? 'move' : key.shiftKey ? 'start' : 'end';\n const step = edit.snap ?? edit.invert(bar.x0 + 10) - edit.invert(bar.x0);\n return shifted(edit, { bar, mode }, dir * step);\n}\n\nfunction shifted(edit: EditModel, { bar, mode }: GanttGrab, delta: number): TaskChange {\n const snap = (v: number) => (edit.snap ? Math.round(v / edit.snap) * edit.snap : v);\n let start = bar.start;\n let end = bar.end;\n if (mode === 'move') {\n start = snap(bar.start + delta);\n end = start + (bar.end - bar.start);\n } else if (mode === 'start') start = Math.min(snap(bar.start + delta), bar.end);\n else end = Math.max(snap(bar.end + delta), bar.start);\n return { id: bar.id, name: bar.name, start, end };\n}\n\n/** The ghost outline of a task while it is dragged. */\nexport function ganttGhost(layout: Canvas, grab: GanttGrab, change: TaskChange): Shape {\n const edit = layout.edit as EditModel;\n const x0 = edit.scale(change.start);\n const x1 = edit.scale(change.end);\n return {\n kind: 'rect',\n part: 'edit-ghost',\n x: px(Math.min(x0, x1)),\n y: px(grab.bar.y),\n width: px(Math.max(1, Math.abs(x1 - x0))),\n height: px(grab.bar.height),\n fill: CHART_COLORS.focus,\n opacity: 0.25,\n stroke: CHART_COLORS.focus,\n rx: 2,\n };\n}\n\n/*\n * Map pan and zoom: the root keeps a `MapView` (controlled through the input, or its own) and\n * derives the next view from wheel and drag gestures with these helpers.\n */\n\nconst MAX_MAP_ZOOM = 64;\n\nconst clampZoomLevel = (z: number) => Math.max(1, Math.min(MAX_MAP_ZOOM, z));\n\n/** The view after a wheel step at viewBox `(x, y)`: scrolling up zooms in around the pointer. */\nexport function mapWheel(model: MapModel, deltaY: number, x: number, y: number): MapView {\n const factor = deltaY > 0 ? 1 / 1.25 : 1.25;\n const zoom = clampZoomLevel(model.view.zoom * factor);\n if (zoom === model.view.zoom) return model.view;\n // Keep the projected point under the pointer fixed: move the centre towards it. Latitude is\n // moved in the projection's own y unit and converted back, so Mercator pans stay exact.\n const { plot, scale } = model;\n const [cx, cy] = model.view.center;\n const px0 = (x - (plot.x + plot.width / 2)) / scale;\n const py0 = (y - (plot.y + plot.height / 2)) / scale;\n const ratio = model.view.zoom / zoom;\n return { center: [cx + px0 * (1 - ratio), model.fromY(model.toY(cy) - py0 * (1 - ratio))], zoom };\n}\n\n/** The view after dragging the map by `(dx, dy)` viewBox pixels from where `from` was set. */\nexport function mapPan(model: MapModel, from: MapModel['view'], dx: number, dy: number): MapView {\n const { scale } = model;\n return {\n center: [from.center[0] - dx / scale, model.fromY(model.toY(from.center[1]) + dy / scale)],\n zoom: from.zoom,\n };\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 && layout.tooltipFormatter?.(s.item)) || (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\n/** What `exportChart` produces and how. */\nexport type ChartExportOptions = {\n /** Accessible name written into the SVG. */\n label: string;\n /** Maps `var(--skdx-…)` to concrete colors, e.g. from `getComputedStyle`. Required for PNG. */\n resolve?: ((cssVariable: string) => string) | undefined;\n} & (\n | { type: 'svg' }\n | {\n type: 'png';\n /** Device pixels per unit. @default 2 */\n scale?: number | undefined;\n /** Fill behind the chart, e.g. the page surface; transparent by default. */\n background?: string | undefined;\n }\n | { type: 'csv'; rows: (string | number | null | undefined)[][] }\n);\n\n/**\n * One entry point for the export formats: SVG markup, a PNG blob (browser only), or CSV of the\n * rows given. Rejects when a PNG is asked for outside a browser.\n */\nexport function exportChart(layout: Canvas, options: ChartExportOptions): Promise<string | Blob> {\n switch (options.type) {\n case 'svg':\n return Promise.resolve(svgMarkup(layout, options.label, options.resolve));\n case 'csv':\n return Promise.resolve(csv(options.rows));\n case 'png': {\n if (typeof document === 'undefined' || typeof Image === 'undefined')\n return Promise.reject(new Error('PNG export needs a browser'));\n const markup = svgMarkup(layout, options.label, options.resolve);\n return svgToPng(markup, layout.width, layout.height, options.scale, options.background);\n }\n }\n}\n\nconst esc = (s: string) => s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/\"/g, '&quot;');\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], ['opacity', s.opacity]])}>${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], ['transform', s.rotate ? `rotate(${s.rotate} ${s.x} ${s.y})` : undefined]])}>${esc(s.text)}</text>`;\n }\n}\n\n/** The `<defs>` block for a layout's gradients, or an empty string. */\nexport function defsMarkup(layout: Canvas): string {\n const defs = layout.defs ?? [];\n if (defs.length === 0) return '';\n return `<defs>${defs\n .map(\n (g) =>\n `<linearGradient id=\"${esc(g.id)}\" x1=\"0\" y1=\"0\" x2=\"${g.vertical === false ? 1 : 0}\" y2=\"${g.vertical === false ? 0 : 1}\">${g.stops\n .map(\n (st) =>\n `<stop offset=\"${st.offset}\" stop-color=\"${esc(st.color)}\"${st.opacity === undefined ? '' : ` stop-opacity=\"${st.opacity}\"`}/>`,\n )\n .join('')}</linearGradient>`,\n )\n .join('')}</defs>`;\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 = defsMarkup(layout) + 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 { isFinite } from './scale.js';\nimport type { ChartItemId, TreeNode } from './types.js';\n\n/*\n * Shared tree traversal for Treemap and Sunburst: node sizes, depth, drill-down roots and\n * breadcrumbs, so both charts agree on what a tree means.\n */\n\n/** A node's size: its own value, else the sum of its children's. */\nexport const nodeValue = (n: TreeNode): number =>\n isFinite(n.value) ? n.value : (n.children ?? []).reduce((s, c) => s + nodeValue(c), 0);\n\n/**\n * Whether this node or anything under it carries a value. A branch in a tree where nobody sets\n * `value` sums to 0, which is not data and must not be printed as one.\n */\nexport const hasValue = (n: TreeNode): boolean =>\n isFinite(n.value) || (n.children ?? []).some(hasValue);\n\n/** Levels below the given nodes (0 for none). */\nexport const depthOf = (nodes: readonly TreeNode[]): number =>\n nodes.length === 0 ? 0 : 1 + Math.max(...nodes.map((n) => depthOf(n.children ?? [])));\n\n/** A node's identity: its id, else its name. */\nexport const nodeId = (n: TreeNode): ChartItemId => n.id ?? n.name;\n\n/** The path from a top-level node down to the node with `id` (or name), or `undefined`. */\nexport function findPath(nodes: readonly TreeNode[], id: ChartItemId): TreeNode[] | undefined {\n for (const n of nodes) {\n if (nodeId(n) === id || n.name === id) return [n];\n const below = findPath(n.children ?? [], id);\n if (below) return [n, ...below];\n }\n return undefined;\n}\n\n/** Children sorted by size, or as given. */\nexport const sortChildren = (\n nodes: readonly TreeNode[],\n sort: 'asc' | 'desc' | 'none' | undefined,\n): TreeNode[] =>\n sort === 'asc' || sort === 'desc'\n ? [...nodes].sort((a, b) =>\n sort === 'asc' ? nodeValue(a) - nodeValue(b) : nodeValue(b) - nodeValue(a),\n )\n : [...nodes];\n\n/** The tree cut at `maxDepth`: nodes at the limit keep their summed value and lose their children. */\nexport function cutDepth(\n nodes: readonly TreeNode[],\n maxDepth: number | undefined,\n depth = 1,\n): TreeNode[] {\n if (maxDepth === undefined) return [...nodes];\n return nodes.map((n) =>\n depth >= maxDepth\n ? { ...n, value: nodeValue(n), children: undefined }\n : { ...n, children: n.children ? cutDepth(n.children, maxDepth, depth + 1) : undefined },\n );\n}\n\n/**\n * The subtree to draw and the breadcrumb path for a controlled drill-down `root`; the whole\n * tree when `root` is unset or unknown.\n */\nexport function drill(\n nodes: readonly TreeNode[],\n root: ChartItemId | undefined,\n): { nodes: TreeNode[]; path: TreeNode[] } {\n if (root === undefined) return { nodes: [...nodes], path: [] };\n const path = findPath(nodes, root);\n if (!path) return { nodes: [...nodes], path: [] };\n const last = path[path.length - 1] as TreeNode;\n return { nodes: last.children?.length ? last.children : [last], path };\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 { AccessibleTableOptions, Canvas, ChartItem } from './types.js';\n\n/** Default row cap of the accessible table. */\nexport const TABLE_LIMIT = 500;\n\n/**\n * Header and rows of the accessible table for a layout: the shared crosshair rows when the chart\n * has them (one row per category, one column per series), else one row per titled mark\n * (series, name, category, value). `undefined` when the option is off, the chart is in a state,\n * or there are more rows than `maxRows`.\n */\nexport function tableRows(\n layout: Canvas,\n option: boolean | AccessibleTableOptions | undefined,\n): string[][] | undefined {\n if (!option) return undefined;\n const max = typeof option === 'object' ? (option.maxRows ?? TABLE_LIMIT) : TABLE_LIMIT;\n const hit = layout.hit;\n if (hit && hit.rows.length > 0) {\n const first = hit.rows[0] as string[];\n if (hit.rows.length > max) return undefined;\n // Row cells are \"Series: value\"; the header takes the series names from the first row.\n const header = ['', ...first.slice(1).map((c) => c.replace(/:\\s[^:]*$/, ''))];\n const rows = hit.rows.map((r) => [\n r[0] as string,\n ...r.slice(1).map((c) => c.slice(c.lastIndexOf(': ') + 2)),\n ]);\n return [header, ...rows];\n }\n const items = layout.shapes.flatMap((s) =>\n s.item && !s.item.legend && !(s.part === 'anchor' && !s.title) ? [s.item] : [],\n );\n if (items.length === 0 || items.length > max) return undefined;\n const cols = (['series', 'name', 'category', 'value'] as const).filter((k) =>\n items.some((it) => it[k] !== undefined),\n );\n const cell = (it: ChartItem, k: (typeof cols)[number]) =>\n it[k] === undefined ? '' : String(it[k]);\n return [\n cols.map((k) => k[0]?.toUpperCase() + k.slice(1)),\n ...items.map((it) => cols.map((k) => cell(it, k))),\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 type { ChartItemRef, Zoom } from './types.js';\n\n/*\n * Chart coordination: charts that share a `syncId` share highlight, selection, zoom, hidden\n * series and the crosshair. A group is a tiny framework-neutral pub/sub; each root publishes its own changes with\n * itself as the source and applies everyone else's. Nothing here touches the DOM, and a chart\n * without a `syncId` never joins a group, so charts stay standalone.\n */\n\n/** What a group shares. Every field is optional: a chart publishes only what changed. */\nexport interface SyncState {\n highlighted?: ChartItemRef | null | undefined;\n selected?: ChartItemRef[] | undefined;\n zoom?: Zoom | undefined;\n hiddenSeries?: string[] | undefined;\n /** The category under the crosshair (by label), or `null` when the pointer left. */\n crosshair?: string | null | undefined;\n}\n\nexport type SyncListener = (state: SyncState, source: object) => void;\n\nexport interface SyncGroup {\n /** Listens for changes published by other members; returns the unsubscribe function. */\n subscribe(listener: SyncListener): () => void;\n /** Publishes a change; `source` identifies the publisher so it can ignore its own echo. */\n publish(state: SyncState, source: object): void;\n /** The last published values, for members that join later. */\n readonly current: SyncState;\n}\n\nconst groups = new Map<string, { group: SyncGroup; listeners: Set<SyncListener> }>();\n\n/** The group for a `syncId`, created on first use; groups are keyed per JavaScript realm. */\nexport function syncGroup(id: string): SyncGroup {\n const existing = groups.get(id);\n if (existing) return existing.group;\n const listeners = new Set<SyncListener>();\n const current: SyncState = {};\n const group: SyncGroup = {\n current,\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n if (listeners.size === 0) groups.delete(id);\n };\n },\n publish(state, source) {\n Object.assign(current, state);\n for (const l of listeners) l(state, source);\n },\n };\n groups.set(id, { group, listeners });\n return group;\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, CHAR, colorOf, legendTop, plotBox, size, stateCanvas } from './frame.js';\nimport { selectedIds } from './identity.js';\nimport { isFinite, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { Canvas, ChartDataIssue, SankeyInput, SankeyLink, Shape } from './types.js';\n\ninterface Node {\n id: string;\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 issues: ChartDataIssue[] = [];\n const known = input.nodes ? new Set(input.nodes.map((n) => n.id)) : undefined;\n const usable = input.links.filter((l) => {\n if (!isFinite(l.value) || l.value <= 0) {\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `Link ${l.source} → ${l.target} has no positive value and was dropped.`,\n itemId: l.id,\n });\n return false;\n }\n if (l.source === l.target) {\n issues.push({\n code: 'self-link',\n severity: 'warning',\n message: `Link ${l.source} → ${l.target} points at its own node and was dropped.`,\n itemId: l.id,\n });\n return false;\n }\n if (known && !(known.has(l.source) && known.has(l.target))) {\n issues.push({\n code: 'unknown-node',\n severity: 'warning',\n message: `Link ${l.source} → ${l.target} names a node not in \\`nodes\\` and was dropped.`,\n itemId: l.id,\n });\n return false;\n }\n return true;\n });\n const { links, back } = dropBackEdges(usable);\n const policy = input.cyclePolicy ?? 'drop';\n for (const l of back)\n issues.push({\n code: 'cycle',\n severity: policy === 'error' ? 'error' : 'warning',\n message: `Link ${l.source} → ${l.target} closes a cycle and was ${policy === 'error' ? 'rejected' : 'dropped'}.`,\n itemId: l.id,\n });\n const state = stateCanvas(\n policy === 'error' && back.length > 0\n ? {\n ...input,\n error: input.error ?? `${back.length} link${back.length === 1 ? '' : 's'} close a cycle`,\n }\n : input,\n links.length === 0,\n );\n if (state) return { ...state, issues };\n const formatValue = makeFormatter(input.format);\n const NODE_PAD = Math.max(0, input.nodePadding ?? 8);\n const NODE_WIDTH = Math.max(1, input.nodeWidth ?? 16);\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 given = new Map((input.nodes ?? []).map((n) => [n.id, n]));\n const node = (id: string) => {\n let n = nodes.get(id);\n if (!n) {\n const meta = given.get(id);\n n = {\n id,\n name: meta?.label ?? id,\n depth: 0,\n value: 0,\n color: colorOf(input, nodes.size, meta?.color),\n x: 0,\n y: 0,\n height: 0,\n outY: 0,\n inY: 0,\n };\n nodes.set(id, n);\n }\n return n;\n };\n // Explicit nodes keep their order (and colors) even when links first mention them later.\n for (const n of input.nodes ?? []) node(n.id);\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 // Justified: every sink sits in the last column, however short its path was.\n if (input.align === 'justify') {\n const last = Math.max(0, ...[...nodes.values()].map((n) => n.depth));\n for (const n of nodes.values()) if (!outSum.has(n.id)) n.depth = last;\n }\n const selected = selectedIds(input.selected).map(String);\n const isSel = (id: string) => selected.includes(id);\n const touches = (id: string) =>\n selected.length === 0 ||\n isSel(id) ||\n links.some((l) => (isSel(l.source) && l.target === id) || (isSel(l.target) && l.source === id));\n for (const n of nodes.values()) n.value = Math.max(outSum.get(n.id) ?? 0, inSum.get(n.id) ?? 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 if (input.nodeSort)\n for (const col of columns.values())\n col.sort((a, b) => (input.nodeSort === 'asc' ? a.value - b.value : b.value - a.value));\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 // Ribbons leave and enter in link order, or by value when asked.\n const ordered = [...links];\n if (input.linkSort)\n ordered.sort((a, b) => (input.linkSort === 'asc' ? a.value - b.value : b.value - a.value));\n\n const shapes: Shape[] = [];\n const linkTexts: Shape[] = [];\n for (const l of ordered) {\n const s = node(l.source);\n const t = node(l.target);\n const h = l.value * scale;\n const lit = selected.length === 0 || isSel(l.source) || isSel(l.target);\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 const text = `${s.name} → ${t.name}: ${formatValue(l.value)}`;\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: lit ? 0.4 : 0.08,\n title: text,\n item: {\n label: text,\n id: l.id ?? `${l.source}→${l.target}`,\n name: l.source,\n category: l.target,\n value: l.value,\n },\n });\n // The value sits mid-ribbon, only where the gap can hold it beside the source node's label.\n const room = x1 - x0 > (s.name.length + formatValue(l.value).length) * CHAR + 24;\n if (input.linkLabels && h >= 12 && lit && room)\n linkTexts.push(\n label(px(mx), px((sy + ty + h) / 2), formatValue(l.value), {\n part: 'link-label',\n anchor: 'middle',\n baseline: 'middle',\n }),\n );\n }\n for (const n of nodes.values()) {\n const text = `${n.name}: ${formatValue(n.value)}`;\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 opacity: touches(n.id) ? undefined : 0.3,\n title: text,\n item: { label: text, id: n.id, name: n.name, value: n.value },\n });\n const last = n.depth === depths;\n if (input.nodeLabels ?? true)\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: [...shapes, ...linkTexts], issues };\n}\n\n/** Splits the links into a forest (no cycles) and the depth-first back edges that closed cycles. */\nfunction dropBackEdges(links: SankeyLink[]): { links: SankeyLink[]; back: SankeyLink[] } {\n const out = new Map<string, SankeyLink[]>();\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<SankeyLink>();\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: links.filter((l) => !back.has(l)), back: [...back] };\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 { makeColorScale } from './colors.js';\nimport { makeFormatter } from './format.js';\nimport { canvas, CHAR, colorOf, isHidden, legendTop, size, stateCanvas } from './frame.js';\nimport { cutDepth, drill, nodeId, nodeValue, sortChildren } from './hierarchy.js';\nimport { 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 opacity: number | undefined;\n area: number;\n}\n\ntype Box = [number, number, number, number];\ntype Place = (t: Tile, box: Box) => void;\n\n/** Squarified treemap (Bruls, Huizing, van Wijk): rows of tiles kept as close to square as possible. */\nfunction squarify(items: Tile[], x: number, y: number, w: number, h: number, out: Place) {\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\n/** Strips across the box: `slice` stacks them top to bottom, `dice` left to right. */\nfunction strips(\n items: Tile[],\n x: number,\n y: number,\n w: number,\n h: number,\n out: Place,\n slice: boolean,\n) {\n const total = items.reduce((s, t) => s + t.area, 0);\n let at = slice ? y : x;\n for (const t of items) {\n const share = total > 0 ? t.area / total : 0;\n if (slice) {\n const th = h * share;\n out(t, [x, at, w, th]);\n at += th;\n } else {\n const tw = w * share;\n out(t, [at, y, tw, h]);\n at += tw;\n }\n }\n}\n\n/**\n * Tiles by value, branches outlined with their children tiled inside. `rootId` shows one node's\n * subtree (controlled drill-down), `breadcrumbs` writes the path to it, `tiling` picks the\n * algorithm and `colorScale` colors leaves by value instead of by branch.\n */\nexport function layoutTreemap(input: TreemapInput): Canvas {\n const { nodes: roots, path } = drill(input.data, input.rootId);\n const nodes = cutDepth(roots, input.maxDepth);\n const state = stateCanvas(input, !nodes.some((n) => nodeValue(n) > 0));\n if (state) return state;\n const formatValue = makeFormatter(input.format);\n const { width, height } = size(input);\n const crumbs = input.breadcrumbs && path.length > 0;\n const top = legendTop(input) + (crumbs ? 20 : 0);\n const pad = Math.max(0, input.padding ?? 2);\n const sort = input.sort ?? 'desc';\n const tiling = input.tiling ?? 'squarify';\n const showLabels = input.labels ?? true;\n const shapes: Shape[] = [];\n const legend = nodes.map((n, i) => ({ name: n.name, color: colorOf(input, i, n.color) }));\n // Leaves are colored by value when a scale is given; branches keep the branch color.\n const leaves: number[] = [];\n const collect = (list: TreeNode[]) => {\n for (const n of list)\n if (n.children?.length) collect(n.children);\n else leaves.push(nodeValue(n));\n };\n collect(nodes);\n const scale = input.colorScale\n ? makeColorScale(input.colorScale, leaves, colorOf(input, 0), undefined, formatValue)\n : undefined;\n\n const tile = (\n list: TreeNode[],\n x: number,\n y: number,\n w: number,\n h: number,\n inherited: string | undefined,\n depth: number,\n ) => {\n const total = list.reduce((s, n) => s + Math.max(0, nodeValue(n)), 0);\n const tiles = sortChildren(list, sort)\n .map((node): Tile => {\n const value = nodeValue(node);\n const branch = (node.children?.length ?? 0) > 0;\n const scaled = !branch && scale ? scale.color(value) : undefined;\n return {\n node,\n value,\n color: scaled?.fill ?? node.color ?? inherited ?? colorOf(input, list.indexOf(node)),\n opacity: scaled?.opacity,\n area: total > 0 ? (Math.max(0, value) / total) * w * h : 0,\n };\n })\n .filter((t) => t.area > 0 && !(inherited === undefined && isHidden(input, t.node.name)));\n const place: Place = (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 : t.opacity,\n stroke: 'var(--skdx-color-surface-default)',\n title,\n item: { label: title, id: nodeId(t.node), name: t.node.name, value: t.value },\n });\n if (branch)\n tile(\n t.node.children as TreeNode[],\n tx + pad,\n ty + pad,\n Math.max(0, tw - 2 * pad),\n Math.max(0, th - 2 * pad),\n t.color,\n depth + 1,\n );\n else if (showLabels && 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 if (tiling === 'squarify') squarify(tiles, x, y, w, h, place);\n else\n strips(\n tiles,\n x,\n y,\n w,\n h,\n place,\n tiling === 'slice' || (tiling === 'sliceDice' && depth % 2 === 0),\n );\n };\n tile(nodes, 0, top, width, height - top, undefined, 0);\n if (crumbs) shapes.push(...breadcrumbShapes(path, 8, legendTop(input) + 10));\n const c = canvas(input, width, height, legend);\n return { ...c, shapes: [...shapes, ...c.shapes] };\n}\n\n/** The drill path as clickable crumbs (each carries the node's id) separated by `›`, from `x`. */\nexport function breadcrumbShapes(path: TreeNode[], x: number, y: number): Shape[] {\n const shapes: Shape[] = [];\n let at = x;\n path.forEach((n, i) => {\n if (i > 0) {\n shapes.push(label(px(at), y, '›', { part: 'breadcrumb-separator', baseline: 'middle' }));\n at += CHAR + 6;\n }\n shapes.push(\n label(px(at), y, n.name, {\n part: 'breadcrumb',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-default)',\n title: n.name,\n item: { label: n.name, id: nodeId(n), name: n.name },\n }),\n );\n at += n.name.length * CHAR + 6;\n });\n return 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 axisTooltip,\n canvas,\n colorOf,\n extent,\n isHidden,\n legendTop,\n MARGIN,\n plotBox,\n size,\n stateCanvas,\n thinTicks,\n valueAxisRoom,\n} from './frame.js';\nimport { CHART_COLORS, variantColor } from './palette.js';\nimport { annotationShapes, referenceShapes } from './reference.js';\nimport { bandScale, isFinite, linearScale, minMax, pathThrough, px, timeTicks } from './scale.js';\nimport { frameShapes, label } from './shapes.js';\nimport { exponentialMovingAverage, movingAverage } from './transforms.js';\nimport type {\n Candle,\n CandlestickInput,\n Canvas,\n ChartDataIssue,\n Hit,\n Shape,\n Tick,\n Value,\n} from './types.js';\n\nconst VOLUME_SHARE = 0.22;\nconst SELECTOR_HEIGHT = 20;\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 issues: ChartDataIssue[] = [];\n const all = input.data.filter((c) => {\n if (valid(c)) return true;\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `Candle \"${String(c.label)}\" has a non-finite open/high/low/close and was dropped.`,\n itemId: c.id,\n });\n return false;\n });\n const state = stateCanvas(input, all.length === 0);\n if (state) return { ...state, issues };\n const UP = input.upColor ?? CHART_COLORS.positive;\n const DOWN = input.downColor ?? CHART_COLORS.negative;\n const priceFormat = 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 selector = input.rangeSelector ?? [];\n // `compare` plots the change from the first visible close: y values (and the axis format)\n // become fractions while tooltips keep the prices and add the percentage.\n const base = input.compare ? (data[0] as Candle).close : undefined;\n const cmp = (v: number) => (base !== undefined && base !== 0 ? v / base - 1 : v);\n const pctFormat = base !== undefined ? { style: 'percent' as const, digits: 1 } : undefined;\n const pct = makeFormatter({ style: 'percent', digits: 1 });\n // Moving averages run over every close, so zooming never shortens the window; the visible\n // slice is drawn and read in the crosshair.\n const closes = all.map((c) => c.close);\n const overlays = (input.overlays ?? []).map((o, i) => {\n const name = o.name ?? `${o.type.toUpperCase()} ${o.period}`;\n const values: Value[] =\n o.type === 'ema'\n ? exponentialMovingAverage(closes, o.period)\n : movingAverage(closes, o.period);\n return {\n name,\n color: o.color ?? colorOf(input, i + 2),\n values: values.slice(start, end),\n hidden: isHidden(input, name),\n };\n });\n // The price extent is known before the plot box, so the left margin can hold the widest tick\n // label: a currency price such as \"$180.00\" overflows the default 48.\n const prices = extent(\n [\n ...data.flatMap((c) => [cmp(c.low), cmp(c.high)]),\n ...overlays\n .filter((o) => !o.hidden)\n .flatMap((o) => o.values.map((v) => (isFinite(v) ? cmp(v) : v))),\n ],\n false,\n );\n const outer = plotBox(width, height, {\n ...MARGIN,\n top: MARGIN.top + legendTop(input) + (selector.length ? SELECTOR_HEIGHT : 0),\n bottom: MARGIN.bottom + brushRoom,\n left:\n input.scale === 'log'\n ? MARGIN.left\n : valueAxisRoom(prices, makeFormatter(pctFormat ?? input.format)),\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 prices,\n [plot.y + plot.height, plot.y],\n { scale: input.scale === 'log' ? 'log' : 'linear', format: pctFormat },\n input.format,\n );\n // A time axis places candles by their label's time, so missing sessions leave gaps; the bar\n // width is 80% of the smallest gap. Otherwise every candle takes an equal slot.\n const times = data.map((c) => categoryValue(c.label));\n const timed = input.xAxis?.type === 'time' && times.every((t) => Number.isFinite(t));\n let x = bandScale(data.length, [plot.x, plot.x + plot.width]);\n let categoryTicks: Tick[] | undefined;\n if (timed) {\n const sorted = [...times].sort((a, b) => a - b);\n let gap = Infinity;\n for (let k = 1; k < sorted.length; k++)\n gap = Math.min(gap, (sorted[k] as number) - (sorted[k - 1] as number));\n const [tMin, tMax] = minMax(times);\n const pad = gap === Infinity ? Math.max(1, Math.abs(tMax) * 0.05 || 1) : gap / 2;\n const tx = linearScale([tMin - pad, tMax + pad], [plot.x, plot.x + plot.width]);\n const bandwidth = Math.abs(tx(tMin + (gap === Infinity ? pad : gap)) - tx(tMin)) * 0.8;\n x = {\n step: bandwidth,\n bandwidth,\n start: (i: number) => tx(times[i] as number) - bandwidth / 2,\n center: (i: number) => tx(times[i] as number),\n };\n const tickFormat = input.xAxis?.format ?? { style: 'date' as const };\n categoryTicks = timeTicks(tMin - pad, tMax + pad)\n .filter((t) => t >= tMin - pad && t <= tMax + pad)\n .map((t): Tick => ({ pos: px(tx(t)), label: categoryLabel(t, tickFormat) }));\n }\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 ...overlays.map((o) => ({ name: o.name, color: o.color })),\n ];\n const c0 = canvas(input, width, height, legend);\n const frame = {\n ...c0,\n plot,\n xTicks: thinTicks(\n categoryTicks ?? 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 const scales = {\n plot,\n x: (v: string | number | Date) => {\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: number) => y.scale(cmp(v)),\n };\n shapes.push(...referenceShapes(input.references, scales));\n // Quick zoom buttons: one text per range; the one matching the current window reads as active.\n selector.forEach((r, i) => {\n const range =\n r.candles > 0\n ? { start: Math.max(0, count - r.candles), end: count }\n : { start: 0, end: count };\n const active = range.start === start && range.end === end;\n shapes.push(\n label(px(plot.x + i * 40), px(outer.y - 8), r.label, {\n part: 'range-button',\n baseline: 'middle',\n fill: active ? 'var(--skdx-color-text-default)' : CHART_COLORS.label,\n weight: active ? 'bold' : undefined,\n title: `${r.label}: last ${r.candles > 0 ? Math.min(r.candles, count) : count} candles`,\n item: { label: r.label, name: r.label, range },\n }),\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 change = base !== undefined ? ` (${pct(cmp(c.close))})` : '';\n const title = `${labels[i]}: O ${priceFormat(c.open)} H ${priceFormat(c.high)} L ${priceFormat(c.low)} C ${priceFormat(c.close)}${change}${isFinite(c.volume) ? ` V ${priceFormat(c.volume)}` : ''}`;\n const item = {\n label: title,\n id: c.id,\n category: labels[i] as string,\n index: start + i,\n value: c.close,\n };\n rows.push([\n labels[i] as string,\n `Open: ${priceFormat(c.open)}`,\n `High: ${priceFormat(c.high)}`,\n `Low: ${priceFormat(c.low)}`,\n `Close: ${priceFormat(c.close)}${change}`,\n ...(isFinite(c.volume) ? [`Volume: ${priceFormat(c.volume)}`] : []),\n ...overlays\n .filter((o) => !o.hidden)\n .map(\n (o) => `${o.name}: ${isFinite(o.values[i]) ? priceFormat(o.values[i] as number) : '—'}`,\n ),\n ]);\n const top = y.scale(cmp(Math.max(c.open, c.close)));\n const bottom = y.scale(cmp(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(cmp(c.high))),\n y2: px(y.scale(cmp(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(cmp(c.open))),\n y2: px(y.scale(cmp(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(cmp(c.close))),\n y2: px(y.scale(cmp(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(cmp(c.high))),\n y2: px(y.scale(cmp(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 ${priceFormat(c.volume)}`,\n });\n });\n }\n // One path per overlay, broken where the average is not defined yet.\n for (const o of overlays) {\n if (o.hidden) continue;\n const pts = o.values.flatMap((v, i) =>\n isFinite(v) ? [{ x: px(x.center(i)), y: px(y.scale(cmp(v))) }] : [],\n );\n if (pts.length < 2) continue;\n shapes.push({\n kind: 'path',\n part: 'overlay',\n d: pathThrough(pts),\n stroke: o.color,\n strokeWidth: 1.5,\n strokeLinejoin: 'round',\n title: o.name,\n item: { label: o.name, series: o.name },\n });\n }\n // Event flags: a small pennant above the candle whose label matches; unknown labels are skipped.\n for (const f of input.flags ?? []) {\n const cx = scales.x(f.label);\n if (cx === undefined) continue;\n const i = data.findIndex((_, idx) => x.center(idx) === cx);\n const c = data[i] as Candle;\n const top = y.scale(cmp(c.high)) - 6;\n const color = variantColor(f.variant ?? 'primary');\n shapes.push({\n kind: 'path',\n part: 'flag',\n d: `M${px(cx)} ${px(top)}V${px(top - 10)}H${px(cx + 8)}L${px(cx + 5)} ${px(top - 7)}L${px(cx + 8)} ${px(top - 4)}H${px(cx)}Z`,\n fill: color,\n stroke: color,\n title: f.text,\n item: { label: f.text, name: f.text, category: labels[i] as string, index: start + i },\n });\n }\n shapes.push(...annotationShapes(input.annotations, scales));\n const hit: Hit = {\n plot: outer,\n xs: data.map((_, i) => px(x.center(i))),\n rows,\n count,\n zoom,\n crosshair: axisTooltip(input),\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, issues };\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 CHAR,\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, label } from './shapes.js';\nimport type { Canvas, ChartDataIssue, ChartItemId, Shape, WaterfallInput } from './types.js';\n\nconst UP = 'var(--skdx-color-success-500)';\nconst DOWN = 'var(--skdx-color-danger-500)';\n\ninterface Step {\n id: ChartItemId | undefined;\n name: string;\n from: number;\n to: number;\n color: string;\n title: string;\n /** A subtotal or total: stands on zero and shows the running total. */\n flat: boolean;\n}\n\n/**\n * Signed deltas stacked on the running total: `subtotal` and `total` rows stand on zero and show\n * the level reached, `start` opens the bridge at a given level, and the steps run down the y\n * axis when horizontal.\n */\nexport function layoutWaterfall(input: WaterfallInput): Canvas {\n const issues: ChartDataIssue[] = [];\n const data = input.data.filter((d) => {\n const flat = d.type === 'subtotal' || d.type === 'total' || d.subtotal;\n if (flat || isFinite(d.value)) return true;\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `Row \"${d.name}\" has no valid value and was dropped.`,\n itemId: d.id ?? d.name,\n });\n return false;\n });\n const state = stateCanvas(input, data.length === 0);\n if (state) return { ...state, issues };\n const formatValue = makeFormatter(input.format);\n const { width, height } = size(input);\n const horizontal = input.orientation === 'horizontal';\n const up = input.positiveColor ?? UP;\n const down = input.negativeColor ?? DOWN;\n const flatColor = input.totalColor ?? colorOf(input, 0);\n const steps: Step[] = [];\n let running = isFinite(input.start) ? input.start : 0;\n const signed = (v: number) => `${v >= 0 ? '+' : ''}${formatValue(v)}`;\n if (isFinite(input.start) && input.startLabel !== undefined)\n steps.push({\n id: undefined,\n name: input.startLabel,\n from: 0,\n to: running,\n color: flatColor,\n title: `${input.startLabel}: ${formatValue(running)}`,\n flat: true,\n });\n for (const d of data) {\n const type = d.type ?? (d.subtotal ? 'subtotal' : 'change');\n if (type !== 'change') {\n steps.push({\n id: d.id,\n name: d.name,\n from: 0,\n to: running,\n color: d.color ?? flatColor,\n title: `${d.name}: ${formatValue(running)}`,\n flat: true,\n });\n continue;\n }\n const from = running;\n running += d.value;\n steps.push({\n id: d.id,\n name: d.name,\n from,\n to: running,\n color: d.color ?? (d.value >= 0 ? up : down),\n title: `${d.name}: ${signed(d.value)}`,\n flat: false,\n });\n }\n if (input.total !== undefined)\n steps.push({\n id: undefined,\n name: input.total,\n from: 0,\n to: running,\n color: flatColor,\n title: `${input.total}: ${formatValue(running)}`,\n flat: true,\n });\n const widest = horizontal ? Math.max(0, ...steps.map((s) => s.name.length)) * CHAR + 16 : 0;\n const plot = plotBox(width, height, {\n ...MARGIN,\n top: MARGIN.top + legendTop(input),\n left: Math.max(MARGIN.left, widest),\n right: input.labels && horizontal ? 56 : MARGIN.right,\n });\n const totals = steps.flatMap((s) => [s.from, s.to]);\n const value = axis(\n [Math.min(0, ...totals), Math.max(0, ...totals)],\n horizontal ? [plot.x, plot.x + plot.width] : [plot.y + plot.height, plot.y],\n {},\n input.format,\n );\n const band = bandScale(\n steps.length,\n horizontal ? [plot.y, plot.y + plot.height] : [plot.x, plot.x + plot.width],\n );\n const c = canvas(input, width, height, [\n { name: 'Increase', color: up },\n { name: 'Decrease', color: down },\n ]);\n const categoryTicks = steps.map((s, i) => ({ pos: px(band.center(i)), label: s.name }));\n const shapes: Shape[] = frameShapes(\n {\n ...c,\n plot,\n xTicks: horizontal ? categoryTicks : thinTicks(categoryTicks, plot.width),\n yTicks: horizontal ? thinTicks(value.ticks, plot.width) : value.ticks,\n baseline: value.zero,\n },\n { horizontal },\n );\n steps.forEach((s, i) => {\n const v0 = value.scale(s.from);\n const v1 = value.scale(s.to);\n const lo = Math.min(v0, v1);\n const len = Math.max(1, Math.abs(v1 - v0));\n shapes.push({\n kind: 'rect',\n part: 'bar',\n x: px(horizontal ? lo : band.start(i)),\n y: px(horizontal ? band.start(i) : lo),\n width: px(horizontal ? len : band.bandwidth),\n height: px(horizontal ? band.bandwidth : len),\n fill: s.color,\n title: s.title,\n item: {\n label: s.title,\n id: s.id ?? s.name,\n name: s.name,\n index: i,\n value: s.flat ? s.to : s.to - s.from,\n },\n });\n if (input.labels) {\n const text = s.flat ? formatValue(s.to) : signed(s.to - s.from);\n const hi = Math.max(v0, v1);\n shapes.push(\n horizontal\n ? label(px(hi + 6), px(band.center(i)), text, { part: 'value-label', baseline: 'middle' })\n : label(px(band.center(i)), px(lo - 4), text, { part: 'value-label', anchor: 'middle' }),\n );\n }\n const next = steps[i + 1];\n // The connector carries the running total across; a flat bar is entered at its top.\n if (next && (input.connectors ?? true)) {\n const a = px(v1);\n const b = px(value.scale(next.flat ? next.to : next.from));\n shapes.push(\n horizontal\n ? {\n kind: 'line',\n part: 'connector',\n x1: a,\n x2: b,\n y1: px(band.start(i) + band.bandwidth),\n y2: px(band.start(i + 1)),\n stroke: CHART_COLORS.axis,\n dash: '4 3',\n }\n : {\n kind: 'line',\n part: 'connector',\n x1: px(band.start(i) + band.bandwidth),\n x2: px(band.start(i + 1)),\n y1: a,\n y2: b,\n stroke: CHART_COLORS.axis,\n dash: '4 3',\n },\n );\n }\n });\n return { ...c, shapes: [...shapes, ...c.shapes], issues };\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 { annotationShapes, referenceShapes } from './reference.js';\nimport { bandScale, isFinite, minMax, px } from './scale.js';\nimport { label, tickAnchor } from './shapes.js';\nimport type {\n Canvas,\n ChartDataIssue,\n ChartItemId,\n EditModel,\n GanttInput,\n GanttTask,\n Shape,\n} from './types.js';\n\n/**\n * Tasks on the longest dependency chain (by duration), the critical path: the chain that\n * decides the project's end. Ties keep the first chain found. Missing prerequisites are skipped.\n */\nexport function criticalPath(tasks: GanttTask[]): Set<GanttTask> {\n const byKey = new Map<ChartItemId, GanttTask>();\n for (const t of tasks) {\n if (t.id !== undefined && !byKey.has(t.id)) byKey.set(t.id, t);\n if (!byKey.has(t.name)) byKey.set(t.name, t);\n }\n const memo = new Map<GanttTask, { length: number; next: GanttTask | undefined }>();\n const visiting = new Set<GanttTask>();\n // Longest path ending at `t`: its own duration plus the longest chain among its prerequisites.\n const longest = (t: GanttTask): { length: number; next: GanttTask | undefined } => {\n const cached = memo.get(t);\n if (cached) return cached;\n if (visiting.has(t)) return { length: 0, next: undefined };\n visiting.add(t);\n let best: { length: number; next: GanttTask | undefined } = { length: 0, next: undefined };\n for (const dep of t.dependsOn ?? []) {\n const d = byKey.get(dep);\n if (!d || d === t) continue;\n const l = longest(d);\n if (l.length > best.length) best = { length: l.length, next: d };\n }\n visiting.delete(t);\n const result = { length: best.length + Math.max(0, t.end - t.start), next: best.next };\n memo.set(t, result);\n return result;\n };\n let end: GanttTask | undefined;\n let max = -1;\n for (const t of tasks) {\n const l = longest(t);\n if (l.length > max) {\n max = l.length;\n end = t;\n }\n }\n const path = new Set<GanttTask>();\n for (let t = end; t && !path.has(t); t = memo.get(t)?.next) path.add(t);\n return path;\n}\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 issues: ChartDataIssue[] = [];\n const tasks = input.tasks.filter((t) => {\n const ok = isFinite(t.start) && (t.milestone ? true : isFinite(t.end));\n if (!ok)\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `Task \"${t.name}\" has no valid start/end and was dropped.`,\n itemId: t.id ?? t.name,\n });\n else if (!t.milestone && t.end < t.start)\n issues.push({\n code: 'inverted-range',\n severity: 'warning',\n message: `Task \"${t.name}\" ends before it starts; the interval was normalized.`,\n itemId: t.id ?? t.name,\n });\n return ok;\n });\n const state = stateCanvas(input, tasks.length === 0);\n if (state) return { ...state, issues };\n const { width, height } = size(input);\n const critical = input.criticalPath ? criticalPath(tasks) : undefined;\n // Hierarchy: children sit under their parent (input order, recursively), indented per depth;\n // a collapsed parent hides its descendants. Tasks without a parent keep the flat order.\n const keyOf = (t: GanttTask) => t.id ?? t.name;\n const byKeyAll = new Map<ChartItemId, GanttTask>();\n for (const t of tasks) {\n if (t.id !== undefined && !byKeyAll.has(t.id)) byKeyAll.set(t.id, t);\n if (!byKeyAll.has(t.name)) byKeyAll.set(t.name, t);\n }\n const children = new Map<GanttTask, GanttTask[]>();\n const roots: GanttTask[] = [];\n for (const t of tasks) {\n const p = t.parent === undefined ? undefined : byKeyAll.get(t.parent);\n if (p && p !== t) children.set(p, [...(children.get(p) ?? []), t]);\n else roots.push(t);\n }\n const collapsed = new Set(input.collapsed ?? []);\n const isCollapsed = (t: GanttTask) => collapsed.has(keyOf(t)) || collapsed.has(t.name);\n const ordered: { task: GanttTask; depth: number }[] = [];\n const walk = (t: GanttTask, depth: number, seen: Set<GanttTask>) => {\n if (seen.has(t)) return;\n seen.add(t);\n ordered.push({ task: t, depth });\n if (!isCollapsed(t)) for (const c of children.get(t) ?? []) walk(c, depth + 1, seen);\n };\n const seen = new Set<GanttTask>();\n for (const r of roots) walk(r, 0, seen);\n const visible = ordered.map((o) => o.task);\n const depthOf = new Map(ordered.map((o) => [o.task, o.depth]));\n // A parent without an interval of its own spans its (visible) children.\n const spanOf = (t: GanttTask): { start: number; end: number } => {\n const kids = children.get(t) ?? [];\n if (kids.length === 0 || (isFinite(t.end) && t.end !== t.start))\n return { start: t.start, end: t.end };\n const spans = kids.map(spanOf);\n return {\n start: Math.min(...spans.map((s) => s.start)),\n end: Math.max(...spans.map((s) => s.end)),\n };\n };\n const rowNames = [...new Set(visible.map((t) => t.group ?? t.name))];\n const rowDepth = new Map<string, number>();\n for (const t of visible) {\n const row = t.group ?? t.name;\n if (!rowDepth.has(row)) rowDepth.set(row, depthOf.get(t) ?? 0);\n }\n const rowSuffix = (row: string) =>\n visible.some(\n (t) => (t.group ?? t.name) === row && isCollapsed(t) && (children.get(t)?.length ?? 0) > 0,\n )\n ? ' +'\n : '';\n const widest =\n Math.max(0, ...rowNames.map((n) => n.length + rowSuffix(n).length)) * CHAR +\n Math.max(0, ...rowNames.map((n) => (rowDepth.get(n) ?? 0) * 12));\n const plot = plotBox(width, height, {\n top: 8 + legendTop(input),\n right: 16,\n bottom: 32 + (input.xAxis?.label ? 14 : 0),\n left: Math.min(width / 2, Math.max(64, widest + 16)),\n });\n const format = makeFormatter(input.xAxis?.format ?? input.format);\n const today = input.today === undefined ? undefined : categoryValue(input.today);\n const [lo, hi] = minMax([\n ...visible.flatMap((t) => {\n const span = spanOf(t);\n return [\n ...(t.milestone ? [t.start] : [span.start, span.end]),\n ...(t.baseline ? [t.baseline.start, t.baseline.end] : []),\n ];\n }),\n ...(today !== undefined ? [today] : []),\n ]);\n const x = axis(\n [lo, hi],\n [plot.x, plot.x + plot.width],\n { ticks: input.xAxis?.ticks, format: input.xAxis?.format },\n input.format,\n );\n const rows = bandScale(rowNames.length, [plot.y, plot.y + plot.height]);\n const shapes: Shape[] = [];\n // Where editable bars sit, so a root can turn a drag into a task change.\n const bars: EditModel['bars'] = [];\n const invert = (pixel: number) =>\n x.domain[0] + ((pixel - plot.x) / Math.max(1, plot.width)) * (x.domain[1] - x.domain[0]);\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, {\n part: 'x-label',\n anchor: tickAnchor(t.pos, t.label, width),\n }),\n );\n }\n rowNames.forEach((name, i) => {\n const owner = visible.find((t) => (t.group ?? t.name) === name);\n shapes.push(\n label(plot.x - 8, px(rows.center(i)), `${name}${rowSuffix(name)}`, {\n part: 'y-label',\n anchor: 'end',\n baseline: 'middle',\n // The item lets an app toggle `collapsed` from a click on the row label.\n item:\n owner && (children.get(owner)?.length ?? 0) > 0\n ? { label: name, id: keyOf(owner), name: owner.name }\n : undefined,\n }),\n );\n });\n // Indentation is drawn as a leading offset: shift the label start by 12 px per depth.\n for (const s of shapes) {\n if (s.kind !== 'text' || s.part !== 'y-label') continue;\n const depth = rowDepth.get(s.text.replace(/ \\+$/, '')) ?? 0;\n if (depth) s.x = px(s.x + depth * 12);\n }\n // Non-working days (millisecond time axes, spans up to 400 days): shaded weekday bands.\n const DAY = 86_400_000;\n if (input.nonWorkingDays?.length && hi - lo <= 400 * DAY && hi > lo) {\n const days = new Set(input.nonWorkingDays);\n for (let d = Math.floor(lo / DAY) * DAY; d < hi; d += DAY) {\n if (!days.has(new Date(d).getUTCDay())) continue;\n const a = Math.max(lo, d);\n const b = Math.min(hi, d + DAY);\n if (b <= a) continue;\n shapes.push({\n kind: 'rect',\n part: 'non-working',\n x: px(x.scale(a)),\n y: plot.y,\n width: px(Math.max(0, x.scale(b) - x.scale(a))),\n height: plot.height,\n fill: CHART_COLORS.grid,\n opacity: 0.12,\n });\n }\n }\n if (input.xAxis?.label)\n shapes.push(\n label(px(plot.x + plot.width / 2), height - 4, input.xAxis.label, {\n part: 'axis-title',\n anchor: 'middle',\n }),\n );\n const scales = {\n plot,\n x: (v: string | number | Date) => x.scale(categoryValue(v)),\n y: (v: number) => rows.center(v),\n };\n shapes.push(\n ...referenceShapes(\n [\n ...(input.references ?? []),\n ...(today !== undefined ? [{ x: today, label: 'Today', variant: 'primary' as const }] : []),\n ],\n scales,\n ),\n );\n const placed = new Map<ChartItemId, { x0: number; x1: number; mid: number }>();\n const overlays: Shape[] = [];\n visible.forEach((t) => {\n if (isHidden(input, t.name)) return;\n const i = tasks.indexOf(t);\n const row = rowNames.indexOf(t.group ?? t.name);\n const span = spanOf(t);\n const x0 = x.scale(Math.min(span.start, span.end));\n const x1 = t.milestone ? x0 : x.scale(Math.max(span.start, span.end));\n const parentRow = (children.get(t)?.length ?? 0) > 0;\n if (t.baseline && !t.milestone) {\n const b0 = x.scale(Math.min(t.baseline.start, t.baseline.end));\n const b1 = x.scale(Math.max(t.baseline.start, t.baseline.end));\n shapes.push({\n kind: 'rect',\n part: 'baseline',\n x: px(b0),\n y: px(rows.start(row) + rows.bandwidth * 0.75),\n width: px(Math.max(1, b1 - b0)),\n height: px(rows.bandwidth / 4),\n fill: CHART_COLORS.axis,\n opacity: 0.6,\n rx: 1,\n title: `${t.name} planned: ${format(t.baseline.start)} – ${format(t.baseline.end)}`,\n });\n }\n const mid = rows.center(row);\n const color = colorOf(input, i, t.color);\n const faded = critical && !critical.has(t) ? 0.35 : undefined;\n if (!placed.has(t.name)) placed.set(t.name, { x0, x1, mid });\n if (t.id !== undefined && !placed.has(t.id)) placed.set(t.id, { x0, x1, mid });\n if (t.milestone) {\n // A milestone is a diamond at its start, as tall as the row.\n const h = rows.bandwidth / 2;\n const title = `${t.name}: ${format(t.start)}`;\n shapes.push({\n kind: 'path',\n part: 'milestone',\n d: `M${px(x0)} ${px(mid - h)}L${px(x0 + h)} ${px(mid)}L${px(x0)} ${px(mid + h)}L${px(x0 - h)} ${px(mid)}Z`,\n fill: color,\n opacity: faded,\n title,\n item: { label: title, id: t.id, name: t.name, category: t.group, index: i, value: t.start },\n });\n return;\n }\n const done = isFinite(t.progress) ? Math.max(0, Math.min(1, t.progress)) : undefined;\n const title = `${t.name}: ${format(span.start)} – ${format(span.end)}${done !== undefined ? ` · ${Math.round(done * 100)}% done` : ''}`;\n // Only leaf tasks are editable: a parent's span follows its children.\n if (!parentRow)\n bars.push({\n index: shapes.length,\n id: t.id ?? t.name,\n name: t.name,\n start: Math.min(t.start, t.end),\n end: Math.max(t.start, t.end),\n x0: px(x0),\n x1: px(x1),\n y: px(rows.start(row)),\n height: px(rows.bandwidth),\n });\n const barH = t.baseline ? rows.bandwidth * 0.7 : rows.bandwidth;\n shapes.push({\n kind: 'rect',\n part: parentRow ? 'summary' : 'bar',\n x: px(x0),\n y: px(rows.start(row)),\n width: px(Math.max(1, x1 - x0)),\n height: px(parentRow ? rows.bandwidth / 3 : barH),\n fill: color,\n rx: 2,\n opacity: faded,\n title,\n item: {\n label: title,\n id: t.id,\n name: t.name,\n category: t.group,\n index: i,\n value: Math.abs(t.end - t.start),\n },\n });\n if (done !== undefined && done > 0)\n overlays.push({\n kind: 'rect',\n part: 'progress',\n x: px(x0),\n y: px(mid - rows.bandwidth / 4),\n width: px(Math.max(1, (x1 - x0) * done)),\n height: px(rows.bandwidth / 2),\n fill: 'var(--skdx-color-text-default)',\n opacity: 0.35,\n rx: 1,\n });\n });\n // Dependencies: an elbow from the end of the prerequisite to the start of the task.\n const byKey = new Map<ChartItemId, GanttTask>();\n for (const t of tasks) {\n if (t.id !== undefined && !byKey.has(t.id)) byKey.set(t.id, t);\n if (!byKey.has(t.name)) byKey.set(t.name, t);\n }\n for (const t of tasks)\n for (const dep of t.dependsOn ?? []) {\n const from = placed.get(dep);\n const to = placed.get(t.id ?? t.name);\n if (!from) {\n issues.push({\n code: 'unknown-node',\n severity: 'warning',\n message: `Task \"${t.name}\" depends on \"${String(dep)}\", which does not exist.`,\n itemId: t.id ?? t.name,\n });\n continue;\n }\n if (!to || from === to) continue;\n const bend = Math.max(from.x1 + 6, to.x0 - 6);\n const source = byKey.get(dep);\n const onPath = critical && source && critical.has(source) && critical.has(t);\n const text = `${source?.name ?? String(dep)} → ${t.name}`;\n overlays.push({\n kind: 'path',\n part: 'dependency',\n d: `M${px(from.x1)} ${px(from.mid)}H${px(bend)}V${px(to.mid)}H${px(to.x0)}`,\n stroke: onPath ? 'var(--skdx-color-danger-500)' : CHART_COLORS.axis,\n strokeWidth: onPath ? 2.5 : 1.5,\n opacity: critical && !onPath ? 0.35 : undefined,\n title: text,\n item: { label: text, name: source?.name ?? String(dep), category: t.name },\n });\n }\n shapes.push(...overlays, ...annotationShapes(input.annotations, scales));\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 {\n ...c,\n shapes: [...shapes, ...c.shapes],\n issues,\n edit: { scale: (v: number) => x.scale(v), invert, bars },\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 {\n axis,\n canvas,\n CHAR,\n colorOf,\n extent,\n gridOn,\n isHidden,\n legendTop,\n MARGIN,\n plotBox,\n size,\n stateCanvas,\n thinTicks,\n} from './frame.js';\nimport { bandScale, finite, isFinite, px } from './scale.js';\nimport { frameShapes } from './shapes.js';\nimport type {\n BoxplotInput,\n BoxplotSeries,\n BoxSummary,\n Canvas,\n ChartDataIssue,\n ChartItemId,\n GroupedBoxSeries,\n Shape,\n Value,\n} from './types.js';\n\ntype Line = Extract<Shape, { kind: 'line' }>;\n\nexport type QuartileMethod = NonNullable<BoxplotInput['quartileMethod']>;\n\n/** Median of a sorted sample. */\nconst medianOf = (sorted: readonly number[]): number => {\n const n = sorted.length;\n if (n === 0) return 0;\n return n % 2\n ? (sorted[(n - 1) / 2] as number)\n : ((sorted[n / 2 - 1] as number) + (sorted[n / 2] as number)) / 2;\n};\n\n/** Linear-interpolated quantile of a sorted sample (R type 7, Excel QUARTILE.INC). */\nconst linear = (sorted: readonly 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/** Quantile excluding the median from the halves (R type 6, Excel QUARTILE.EXC); clamped at the ends. */\nconst exclusive = (sorted: readonly number[], q: number): number => {\n const n = sorted.length;\n if (n === 0) return 0;\n const pos = (n + 1) * q - 1;\n if (pos <= 0) return sorted[0] as number;\n if (pos >= n - 1) return sorted[n - 1] as number;\n const lo = Math.floor(pos);\n const a = sorted[lo] as number;\n const b = sorted[lo + 1] as number;\n return a + (b - a) * (pos - lo);\n};\n\n/**\n * Quartiles of a sorted sample by the given method. `tukey` uses hinges: the medians of the lower\n * and upper halves, both halves including the median for odd sizes.\n */\nexport function quartiles(\n sorted: readonly number[],\n method: QuartileMethod = 'linear',\n): { q1: number; median: number; q3: number } {\n const median = medianOf(sorted);\n const n = sorted.length;\n if (n === 0) return { q1: 0, median: 0, q3: 0 };\n if (method === 'tukey') {\n const half = Math.floor(n / 2);\n const lower = sorted.slice(0, n % 2 ? half + 1 : half);\n const upper = sorted.slice(n % 2 ? half : half);\n return { q1: medianOf(lower), median, q3: medianOf(upper) };\n }\n const f = method === 'exclusive' ? exclusive : linear;\n return { q1: f(sorted, 0.25), median, q3: f(sorted, 0.75) };\n}\n\n/**\n * Five-number summary with Tukey fences: whiskers reach the last sample within `whisker` × IQR\n * of the box (1.5 by default), everything beyond is an outlier. The mean is included for\n * the optional mean marker.\n */\nexport function boxStats(\n data: readonly Value[],\n method: QuartileMethod = 'linear',\n whisker = 1.5,\n): BoxSummary & { mean: number; outliers: number[]; count: number; low: number; high: number } {\n const sorted = finite(data).sort((a, b) => a - b);\n const { q1, median, q3 } = quartiles(sorted, method);\n const iqr = q3 - q1;\n const lo = q1 - whisker * iqr;\n const hi = q3 + whisker * iqr;\n const inside = sorted.filter((v) => v >= lo && v <= hi);\n const mean = sorted.length ? sorted.reduce((s, v) => s + v, 0) / sorted.length : 0;\n const min = inside[0] ?? q1;\n const max = inside[inside.length - 1] ?? q3;\n return {\n name: '',\n q1,\n median,\n q3,\n min,\n max,\n // `low`/`high` are the whisker ends under their pre-existing names.\n low: min,\n high: max,\n mean,\n outliers: sorted.filter((v) => v < lo || v > hi),\n count: sorted.length,\n };\n}\n\nconst isSummary = (s: BoxplotSeries): s is BoxSummary => 'median' in s && !('data' in s);\nconst isGrouped = (s: BoxplotSeries): s is GroupedBoxSeries =>\n 'data' in s && Array.isArray(s.data[0]);\n\n/** One drawn box: which series and category it belongs to, and its statistics. */\ninterface Cell {\n si: number;\n ci: number;\n name: string;\n id: ChartItemId | undefined;\n color: string;\n st: BoxSummary & { count?: number | undefined };\n raw: Value[] | undefined;\n}\n\n/**\n * One box per series (or per series and category when `categories` is set): raw samples\n * summarized with the chosen quartile method, or a given summary.\n */\nexport function layoutBoxplot(input: BoxplotInput): Canvas {\n const method = input.quartileMethod ?? 'linear';\n const whisker = input.whisker ?? 1.5;\n const issues: ChartDataIssue[] = [];\n const categories = input.categories;\n const grouped = categories !== undefined;\n const skip = (s: BoxplotSeries, message: string) =>\n issues.push({ code: 'invalid-value', severity: 'warning', message, itemId: s.id ?? s.name });\n const cells: Cell[] = [];\n input.series.forEach((s, si) => {\n const color = colorOf(input, si, s.color);\n const push = (ci: number, sample: Value[] | undefined, summary?: BoxSummary) => {\n const st: (BoxSummary & { count?: number | undefined }) | undefined =\n summary ??\n (sample && finite(sample).length ? boxStats(sample, method, whisker) : undefined);\n if (!st || ![st.min, st.q1, st.median, st.q3, st.max].every(isFinite)) return false;\n if (st.count !== undefined && st.count < 5)\n issues.push({\n code: 'small-sample',\n severity: 'warning',\n message: `Series \"${s.name}\"${grouped ? ` at \"${categories[ci] ?? ci}\"` : ''} has ${st.count} observation${st.count === 1 ? '' : 's'}; quartiles are not meaningful below 5.`,\n itemId: s.id ?? s.name,\n });\n cells.push({\n si,\n ci,\n name: s.name,\n id: s.id,\n color,\n st: { ...st, name: s.name },\n raw: sample,\n });\n return true;\n };\n if (!grouped) {\n const ok = isSummary(s)\n ? push(0, undefined, s)\n : isGrouped(s)\n ? push(0, s.data.flat())\n : push(0, s.data);\n if (!ok) skip(s, `Series \"${s.name}\" has no valid observations or summary and was skipped.`);\n return;\n }\n if (isSummary(s)) {\n skip(\n s,\n `Series \"${s.name}\" is a summary, which cannot be grouped by categories; it was skipped.`,\n );\n return;\n }\n if (!isGrouped(s)) {\n skip(\n s,\n `Series \"${s.name}\" is not grouped (its data is one sample, not one per category); it was drawn in the first category.`,\n );\n push(0, s.data);\n return;\n }\n categories.forEach((_, ci) => push(ci, s.data[ci]));\n });\n const state = stateCanvas(input, cells.length === 0);\n if (state) return { ...state, issues };\n const formatValue = makeFormatter(input.yAxis?.format ?? input.format);\n const { width, height } = size(input);\n const horizontal = input.orientation === 'horizontal';\n const groups = grouped ? categories : input.series.map((s) => s.name);\n const widest = Math.max(0, ...groups.map((n) => n.length)) * CHAR;\n const plot = plotBox(width, height, {\n ...MARGIN,\n top: MARGIN.top + legendTop(input) + (input.yAxis?.label ? 12 : 0),\n left: horizontal ? Math.max(MARGIN.left, widest + 16) : MARGIN.left,\n bottom: MARGIN.bottom + (horizontal && input.yAxis?.label ? 14 : 0),\n });\n const shown = cells.filter((c) => !isHidden(input, c.name));\n // The value axis runs up y, or along x when horizontal; groups take the other one.\n const values = shown.flatMap((c) => [\n c.st.min,\n c.st.max,\n ...(c.st.outliers ?? []),\n ...(isFinite(c.st.mean) ? [c.st.mean] : []),\n ]);\n const value = axis(\n extent(values, false),\n horizontal ? [plot.x, plot.x + plot.width] : [plot.y + plot.height, plot.y],\n input.yAxis ?? {},\n input.format,\n );\n const band = bandScale(\n groups.length,\n horizontal ? [plot.y, plot.y + plot.height] : [plot.x, plot.x + plot.width],\n );\n // Grouped: the visible series share each category's band side by side, like grouped bars.\n const slots = grouped ? [...new Set(shown.map((c) => c.si))] : [];\n const slotW = grouped ? band.bandwidth / Math.max(1, slots.length) : band.bandwidth;\n const center = (c: Cell) =>\n grouped ? band.start(c.ci) + (slots.indexOf(c.si) + 0.5) * slotW : band.center(c.si);\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 categoryTicks = groups.map((g, i) => ({ pos: px(band.center(i)), label: g }));\n const shapes: Shape[] = frameShapes(\n {\n ...c,\n plot,\n xTicks: horizontal ? categoryTicks : thinTicks(categoryTicks, plot.width),\n yTicks: horizontal ? thinTicks(value.ticks, plot.width) : value.ticks,\n baseline: horizontal ? plot.x : plot.y + plot.height,\n },\n {\n horizontal,\n grid: gridOn(input.yAxis),\n ...(horizontal ? { xLabel: input.yAxis?.label } : { yLabel: input.yAxis?.label }),\n },\n );\n // A segment along the value axis at the category position `at`, or a rect `t` thick around it.\n const seg = (v0: number, v1: number, at: number): Pick<Line, 'x1' | 'x2' | 'y1' | 'y2'> => {\n const a = px(value.scale(v0));\n const b = px(value.scale(v1));\n return horizontal ? { x1: a, x2: b, y1: at, y2: at } : { x1: at, x2: at, y1: a, y2: b };\n };\n const box = (v0: number, v1: number, mid: number, t: number) => {\n const a = value.scale(v0);\n const b = value.scale(v1);\n const len = Math.max(1, Math.abs(b - a));\n return horizontal\n ? { x: px(Math.min(a, b)), y: px(mid - t / 2), width: px(len), height: px(t) }\n : { x: px(mid - t / 2), y: px(Math.min(a, b)), width: px(t), height: px(len) };\n };\n /** A point from a value along the axis and an offset across the band. */\n const at = (v: number, across: number) =>\n horizontal ? `${px(value.scale(v))} ${px(across)}` : `${px(across)} ${px(value.scale(v))}`;\n const dot = (\n v: number,\n mid: number,\n r: number,\n fill: string,\n part: string,\n title: string,\n opacity?: number,\n ): Shape => ({\n kind: 'circle',\n part,\n cx: horizontal ? px(value.scale(v)) : px(mid),\n cy: horizontal ? px(mid) : px(value.scale(v)),\n r,\n fill,\n opacity,\n title,\n });\n for (const cell of shown) {\n const { st, color, name, raw } = cell;\n const mid = px(center(cell));\n const category = grouped ? categories[cell.ci] : undefined;\n const who = category !== undefined ? `${name}, ${category}` : name;\n const title = `${who}: min ${formatValue(st.min)} Q1 ${formatValue(st.q1)} median ${formatValue(st.median)} Q3 ${formatValue(st.q3)} max ${formatValue(st.max)}${input.mean && isFinite(st.mean) ? ` mean ${formatValue(st.mean)}` : ''}`;\n const item = {\n label: title,\n id: cell.id,\n series: name,\n seriesId: cell.id ?? name,\n category,\n index: grouped ? cell.ci : cell.si,\n value: st.median,\n };\n const boxW = slotW * 0.6;\n const half = boxW / 2;\n const medianLine = horizontal\n ? {\n x1: px(value.scale(st.median)),\n x2: px(value.scale(st.median)),\n y1: px(mid - half),\n y2: px(mid + half),\n }\n : {\n x1: px(mid - half),\n x2: px(mid + half),\n y1: px(value.scale(st.median)),\n y2: px(value.scale(st.median)),\n };\n // Notch: ±1.58 × IQR / √n around the median, clamped into the box; a rough 95% interval.\n const n = st.count;\n const notch =\n input.notched && n\n ? Math.min((1.58 * (st.q3 - st.q1)) / Math.sqrt(n), (st.q3 - st.q1) / 2)\n : 0;\n const body: Shape = notch\n ? {\n kind: 'path',\n part: 'box',\n d: `M${[\n at(st.q1, mid - half),\n at(st.median - notch, mid - half),\n at(st.median, mid - half + boxW / 4),\n at(st.median + notch, mid - half),\n at(st.q3, mid - half),\n at(st.q3, mid + half),\n at(st.median + notch, mid + half),\n at(st.median, mid + half - boxW / 4),\n at(st.median - notch, mid + half),\n at(st.q1, mid + half),\n ].join('L')}Z`,\n fill: color,\n stroke: color,\n fillOpacity: 0.5,\n title,\n item,\n }\n : {\n kind: 'rect',\n part: 'box',\n ...box(st.q1, st.q3, mid, boxW),\n fill: color,\n stroke: color,\n opacity: 0.5,\n title,\n item,\n };\n shapes.push(\n { kind: 'line', part: 'whisker', ...seg(st.max, st.min, mid), stroke: color, title },\n body,\n { kind: 'line', part: 'median', ...medianLine, stroke: color, title },\n ...(st.outliers ?? []).map((v) =>\n dot(v, mid, 3, color, 'outlier', `${who}: ${formatValue(v)}`),\n ),\n );\n if (input.mean && isFinite(st.mean)) {\n const cx = horizontal ? px(value.scale(st.mean)) : mid;\n const cy = horizontal ? mid : px(value.scale(st.mean));\n shapes.push({\n kind: 'path',\n part: 'mean',\n d: `M${cx} ${px(cy - 4)}L${px(cx + 4)} ${cy}L${cx} ${px(cy + 4)}L${px(cx - 4)} ${cy}Z`,\n fill: 'var(--skdx-color-text-default)',\n title: `${who} mean: ${formatValue(st.mean)}`,\n });\n }\n // Raw observations, jittered deterministically across the box so a dense sample stays readable.\n if (input.points && raw)\n finite(raw).forEach((v, k) => {\n const jitter = (((k * 7919) % 97) / 96 - 0.5) * boxW * 0.8;\n shapes.push(\n dot(v, mid + jitter, 2, color, 'observation', `${who}: ${formatValue(v)}`, 0.6),\n );\n });\n }\n return { ...c, shapes: [...shapes, ...c.shapes], issues };\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 { makeColorScale } from './colors.js';\nimport { makeFormatter } from './format.js';\nimport { canvas, CHAR, colorOf, isHidden, legendTop, size, stateCanvas } from './frame.js';\nimport { cutDepth, depthOf, drill, nodeId, nodeValue, sortChildren } from './hierarchy.js';\nimport { arc } from './pie.js';\nimport { px } from './scale.js';\nimport { label } from './shapes.js';\nimport { breadcrumbShapes } from './treemap.js';\nimport type { Canvas, Shape, SunburstInput, TreeNode } from './types.js';\n\nconst rad = (deg: number) => (deg * Math.PI) / 180;\n\n/**\n * Nested rings, one per tree depth, children inside their parent's span. `rootId` fills the\n * rings with one node's subtree (controlled drill-down), `padAngle` separates siblings and\n * `colorScale` colors leaves by value.\n */\nexport function layoutSunburst(input: SunburstInput): Canvas {\n const { nodes: roots, path } = drill(input.data, input.rootId);\n const nodes = cutDepth(roots, input.maxDepth);\n const state = stateCanvas(input, !nodes.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 inner = Math.min(0.9, Math.max(0, input.innerRadius ?? 0));\n // Crumbs sit in the hole when there is one, else in a row above the rings.\n const crumbs = input.breadcrumbs && path.length > 0;\n const crumbsAbove = crumbs && inner === 0;\n const top = legendTop(input) + (crumbsAbove ? 20 : 0);\n const cx = width / 2;\n const cy = top + (height - top) / 2;\n const radius = Math.max(0, Math.min(width, height - top) / 2 - 8);\n const hole = radius * inner;\n const ringWidth = (radius - hole) / Math.max(1, depthOf(nodes));\n const start = rad(input.startAngle ?? 0);\n const end = rad(input.endAngle ?? (input.startAngle ?? 0) + 360);\n const pad = Math.max(0, rad(input.padAngle ?? 0));\n const sort = input.sort ?? 'none';\n const leaves: number[] = [];\n const collect = (list: TreeNode[]) => {\n for (const n of list)\n if (n.children?.length) collect(n.children);\n else leaves.push(nodeValue(n));\n };\n collect(nodes);\n const scale = input.colorScale\n ? makeColorScale(input.colorScale, leaves, colorOf(input, 0), undefined, formatValue)\n : undefined;\n const shapes: Shape[] = [];\n const texts: Shape[] = [];\n const walk = (\n list: TreeNode[],\n depth: number,\n a0: number,\n span: number,\n color: string | undefined,\n ) => {\n const valueOf = (n: TreeNode) =>\n depth === 0 && isHidden(input, n.name) ? 0 : Math.max(0, nodeValue(n));\n const ordered = sortChildren(list, sort);\n const total = ordered.reduce((s, n) => s + valueOf(n), 0);\n // Siblings with a value share the span minus the pads between them.\n const gaps = Math.max(0, ordered.filter((n) => valueOf(n) > 0).length - 1);\n const usable = Math.max(0, span - gaps * pad);\n let angle = a0;\n ordered.forEach((n) => {\n const value = valueOf(n);\n const sweep = total > 0 ? (value / total) * usable : 0;\n const branch = (n.children?.length ?? 0) > 0;\n const scaled = !branch && scale ? scale.color(value) : undefined;\n const fill = scaled?.fill ?? n.color ?? color ?? colorOf(input, list.indexOf(n));\n if (sweep > 0) {\n const r0 = hole + ringWidth * depth;\n const r1 = r0 + ringWidth;\n // A name fits when the arc's middle circumference is longer than the text.\n if (input.labels && sweep * ((r0 + r1) / 2) > n.name.length * CHAR + 4) {\n const mid = angle + sweep / 2;\n const rm = (r0 + r1) / 2;\n texts.push(\n label(px(cx + rm * Math.sin(mid)), px(cy - rm * Math.cos(mid)), n.name, {\n part: 'arc-label',\n anchor: 'middle',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-on-accent)',\n }),\n );\n }\n const title = `${n.name}: ${formatValue(value)}`;\n shapes.push({\n kind: 'path',\n part: 'arc',\n d: arc(cx, cy, r1, r0, angle, angle + sweep),\n fill,\n opacity: scaled ? scaled.opacity : 1 - depth * 0.2,\n stroke: 'var(--skdx-color-surface-default)',\n title,\n item: { label: title, id: nodeId(n), name: n.name, value },\n });\n walk(n.children ?? [], depth + 1, angle, sweep, fill);\n angle += sweep + pad;\n }\n });\n };\n walk(nodes, 0, start, Math.max(0, Math.min(2 * Math.PI, end - start)), undefined);\n if (input.centerLabel)\n texts.push(\n label(px(cx), px(crumbs && !crumbsAbove ? cy - 8 : 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 if (crumbs) {\n const w =\n path.reduce((s, n) => s + n.name.length * CHAR + 6, 0) + (path.length - 1) * (CHAR + 6);\n texts.push(\n ...(crumbsAbove\n ? breadcrumbShapes(path, 8, legendTop(input) + 10)\n : breadcrumbShapes(path, cx - w / 2, input.centerLabel ? cy + 8 : cy)),\n );\n }\n const c = canvas(\n input,\n width,\n height,\n nodes.map((n, i) => ({ name: n.name, color: colorOf(input, i, n.color) })),\n );\n return { ...c, shapes: [...shapes, ...texts, ...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, CHAR, colorOf, isHidden, legendTop, size, stateCanvas } from './frame.js';\nimport { selectedIds } from './identity.js';\nimport { CHART_COLORS } from './palette.js';\nimport { arc } from './pie.js';\nimport { isFinite, niceTicks, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { Canvas, ChartDataIssue, ChordInput, Shape } from './types.js';\n\nconst TAU = 2 * Math.PI;\nconst RING = 12;\nconst TICK = 5;\n\n/** Names and a flow matrix from either input form; `links` are summed into the matrix. */\nexport function chordMatrix(input: ChordInput): {\n names: string[];\n matrix: number[][];\n issues: ChartDataIssue[];\n} {\n const issues: ChartDataIssue[] = [];\n if (input.links) {\n const names = [...(input.names ?? [])];\n const known = new Set(names);\n for (const l of input.links)\n for (const n of [l.source, l.target])\n if (!known.has(n)) {\n if (input.names)\n issues.push({\n code: 'unknown-node',\n severity: 'warning',\n message: `Link ${l.source} → ${l.target} names \"${n}\", which is not in \\`names\\`; it was added.`,\n itemId: l.id,\n });\n known.add(n);\n names.push(n);\n }\n const at = new Map(names.map((n, i) => [n, i]));\n const matrix = names.map(() => names.map(() => 0));\n for (const l of input.links) {\n if (!isFinite(l.value) || l.value < 0) {\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `Link ${l.source} → ${l.target} has no valid value and was dropped.`,\n itemId: l.id,\n });\n continue;\n }\n const row = matrix[at.get(l.source) as number] as number[];\n row[at.get(l.target) as number] = (row[at.get(l.target) as number] as number) + l.value;\n }\n return { names, matrix, issues };\n }\n const names = input.names ?? [];\n const matrix = input.matrix ?? [];\n if (matrix.length !== names.length || matrix.some((r) => r.length !== names.length))\n issues.push({\n code: 'ragged-matrix',\n severity: 'warning',\n message: `The matrix is ${matrix.length} × ${matrix[0]?.length ?? 0} but there are ${names.length} names; missing cells count as zero.`,\n });\n return { names, matrix, issues };\n}\n\nexport function layoutChord(input: ChordInput): Canvas {\n const { names: given, matrix: given2, issues } = chordMatrix(input);\n const state = stateCanvas(\n input,\n given.length === 0 || !given2.some((row) => row.some((v) => isFinite(v) && v > 0)),\n 300,\n 300,\n );\n if (state) return { ...state, issues };\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 // Group names sit outside the rim, so the circle keeps room for the widest one on either side;\n // without it the left-hand label runs off the svg.\n const nameGap = input.ticks ? 8 + TICK + 14 : 8;\n const nameRoom = nameGap + Math.max(0, ...given.map((s) => s.length)) * CHAR + 4;\n const r = Math.max(0, Math.min(width / 2 - nameRoom, (height - top) / 2 - 36));\n const r0 = Math.max(0, r - RING);\n const PAD = ((input.padding ?? 2.3) * Math.PI) / 180;\n // Groups keep their input order (and color) but can be arranged by total flow.\n const cellRaw = (i: number, j: number) => {\n const v = given2[i]?.[j];\n return isFinite(v) ? Math.max(0, v) : 0;\n };\n const totalOf = (i: number) => given.reduce((s, _n, j) => s + cellRaw(i, j) + cellRaw(j, i), 0);\n const order = given.map((_, i) => i);\n if (input.sort)\n order.sort((a, b) =>\n input.sort === 'asc' ? totalOf(a) - totalOf(b) : totalOf(b) - totalOf(a),\n );\n const names = order.map((i) => given[i] as string);\n const colorAt = (k: number) => colorOf(input, order[k] as number);\n const n = names.length;\n const selectedId = selectedIds(input.selected)[0];\n const selected = selectedId === undefined ? -1 : names.indexOf(String(selectedId));\n const cell = (i: number, j: number) => {\n const hidden = isHidden(input, names[i] as string) || isHidden(input, names[j] as string);\n return hidden ? 0 : cellRaw(order[i] as number, order[j] as number);\n };\n const rowSum = names.map((_, i) => 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 = 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 const tickLabels: { x: number; y: number }[] = [];\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 // The ribbon takes the color of the larger direction, so direction is visible.\n const from = out >= back ? i : j;\n const lit = selected < 0 || i === selected || j === selected;\n const text =\n i === j\n ? `${names[i]}: ${formatValue(out)}`\n : `${names[i]} → ${names[j]}: ${formatValue(out)} · ${names[j]} → ${names[i]}: ${formatValue(back)}`;\n shapes.push({\n kind: 'path',\n part: 'chord',\n d,\n fill: colorAt(from),\n opacity: lit ? 0.5 : 0.08,\n title: text,\n item: {\n label: text,\n id: `${names[i]}→${names[j]}`,\n name: names[i],\n category: names[j],\n value: out + back,\n },\n });\n }\n }\n groups.forEach((g, i) => {\n if (g.a1 <= g.a0) return;\n const text = `${names[i]}: ${formatValue(rowSum[i] as number)}`;\n shapes.push({\n kind: 'path',\n part: 'group',\n d: arc(cx, cy, r, r0, g.a0, g.a1),\n fill: colorAt(i),\n opacity:\n selected < 0 || i === selected || cell(i, selected) + cell(selected, i) > 0\n ? undefined\n : 0.3,\n title: text,\n item: { label: text, id: names[i], name: names[i], index: i, value: rowSum[i] as number },\n });\n const mid = (g.a0 + g.a1) / 2;\n const sin = Math.sin(mid);\n // Ticks sit on the rim; the group name moves out past their labels.\n const nameR = r + nameGap;\n shapes.push(\n label(px(cx + nameR * sin), px(cy - nameR * Math.cos(mid)), names[i] as string, {\n anchor: sin > 0.1 ? 'start' : sin < -0.1 ? 'end' : 'middle',\n baseline: 'middle',\n }),\n );\n if (!input.ticks) return;\n const sum = rowSum[i] as number;\n niceTicks(0, sum, 4)\n .filter((v) => v <= sum)\n .forEach((v, k) => {\n const a = g.a0 + v * unit;\n const s = Math.sin(a);\n const c = Math.cos(a);\n shapes.push({\n kind: 'line',\n part: 'tick',\n x1: px(cx + r * s),\n y1: px(cy - r * c),\n x2: px(cx + (r + TICK) * s),\n y2: px(cy - (r + TICK) * c),\n stroke: CHART_COLORS.axis,\n });\n if (k % 2) return;\n const lx = px(cx + (r + TICK + 3) * s);\n const ly = px(cy - (r + TICK + 3) * c);\n // A label that would sit on an earlier one is skipped.\n if (tickLabels.some((p) => Math.abs(p.x - lx) < 12 && Math.abs(p.y - ly) < 12)) return;\n tickLabels.push({ x: lx, y: ly });\n shapes.push(\n label(lx, ly, formatValue(v), {\n part: 'tick-label',\n anchor: s > 0.1 ? 'start' : s < -0.1 ? 'end' : 'middle',\n baseline: 'middle',\n }),\n );\n });\n });\n const c = canvas(\n input,\n width,\n height,\n names.map((name, i) => ({ name, color: colorAt(i) })),\n );\n return { ...c, shapes: [...shapes, ...c.shapes], issues };\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 { colorLegendRoom, colorLegendShapes, makeColorScale } from './colors.js';\nimport { makeFormatter } from './format.js';\nimport { canvas, colorOf, legendTop, size, stateCanvas } from './frame.js';\nimport { CHART_COLORS } from './palette.js';\nimport { isFinite, minMax, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { Canvas, ChartDataIssue, MapInput, Shape } from './types.js';\n\nconst PAD = 8;\n\ntype Feature = MapInput['features'][number];\n\n/** The rings of a polygon feature; point and line features have none. */\nconst rings = (f: Feature): [number, number][][] =>\n f.geometry.type === 'Polygon'\n ? f.geometry.coordinates\n : f.geometry.type === 'MultiPolygon'\n ? f.geometry.coordinates.flat()\n : [];\n/** The coordinates of a point feature. */\nconst pointsOf = (f: Feature): [number, number][] =>\n f.geometry.type === 'Point'\n ? [f.geometry.coordinates]\n : f.geometry.type === 'MultiPoint'\n ? f.geometry.coordinates\n : [];\n/** The line strings of a line feature. */\nconst linesOf = (f: Feature): [number, number][][] =>\n f.geometry.type === 'LineString'\n ? [f.geometry.coordinates]\n : f.geometry.type === 'MultiLineString'\n ? f.geometry.coordinates\n : [];\nconst every = (f: Feature): [number, number][] => [\n ...rings(f).flat(),\n ...pointsOf(f),\n ...linesOf(f).flat(),\n];\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\nconst validCoord = (p: [number, number] | undefined): p is [number, number] =>\n p !== undefined && Number.isFinite(p[0]) && Number.isFinite(p[1]);\n\n/**\n * Regions (a choropleth), a marker/bubble layer and a line layer, all under one projection\n * fitted to the regions' bounds (equirectangular by default, or Mercator). Region fill follows\n * the value through `colorScale`, by default a single color at an opacity ramp.\n */\nexport function layoutMap(input: MapInput): Canvas {\n const issues: ChartDataIssue[] = [];\n const features = input.features.filter((f) => {\n const ok = every(f).some(validCoord);\n if (!ok)\n issues.push({\n code: 'invalid-geometry',\n severity: 'warning',\n message: `Feature \"${f.name}\" has no valid coordinates and was dropped.`,\n itemId: f.id ?? f.name,\n });\n return ok;\n });\n const state = stateCanvas(input, features.length === 0);\n if (state) return { ...state, issues };\n const formatValue = makeFormatter(input.format);\n const { width, height } = size(input);\n const top = legendTop(input);\n const legendRoom = colorLegendRoom(input.colorLegend).bottom;\n const legendColumn = colorLegendRoom(input.colorLegend).right;\n const toY = input.projection === 'mercator' ? mercatorY : (lat: number) => lat;\n // The fit follows the polygons; point and line features only count when there are none.\n const regions = features.filter((f) => rings(f).length > 0);\n const points = (regions.length ? regions : features).flatMap((f) => every(f).filter(validCoord));\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 fitted = Math.min(\n (width - legendColumn - 2 * PAD) / Math.max(1e-9, maxLon - minLon),\n (height - top - legendRoom - 2 * PAD) / Math.max(1e-9, maxLat - minLat),\n );\n // The view: a zoom factor over the fitted scale and a projected centre (longitude, projected\n // latitude) that sits in the middle of the plot.\n const plot = {\n x: PAD,\n y: top + PAD,\n width: width - legendColumn - 2 * PAD,\n height: height - top - legendRoom - 2 * PAD,\n };\n const zoomLevel = Math.max(1, Math.min(64, input.view?.zoom ?? 1));\n const scale = fitted * zoomLevel;\n const center: [number, number] = input.view?.center\n ? [input.view.center[0], toY(input.view.center[1])]\n : [(minLon + maxLon) / 2, (minLat + maxLat) / 2];\n const ox = plot.x + plot.width / 2 - center[0] * scale;\n const oy = plot.y + plot.height / 2 + center[1] * scale;\n const projectXY = ([lon, lat]: [number, number]) => ({\n x: px(ox + lon * scale),\n y: px(oy - toY(lat) * scale),\n });\n const project = (p: [number, number]) => {\n const { x, y } = projectXY(p);\n return `${x} ${y}`;\n };\n\n const color = colorOf(input, 0, input.color);\n const colors = makeColorScale(\n input.colorScale,\n features.map((f) => f.value),\n color,\n undefined,\n formatValue,\n );\n const labels: Shape[] = [];\n const shapes: Shape[] = regions.map((f) => {\n const outline = rings(f);\n if (input.labels && outline.length) {\n // The label sits at the centroid of the largest ring's bounding box.\n const biggest = outline.reduce((a, b) => (b.length > a.length ? b : a));\n const [lx0, lx1] = minMax(biggest.map((p) => p[0]));\n const [ly0, ly1] = minMax(biggest.map((p) => toY(p[1])));\n labels.push(\n label(\n px(ox + ((lx0 + lx1) / 2 - minLon) * scale),\n px(oy + (maxLat - (ly0 + ly1) / 2) * scale),\n f.name,\n {\n part: 'region-label',\n anchor: 'middle',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-default)',\n },\n ),\n );\n }\n const fill = f.color !== undefined ? { fill: f.color, opacity: 1 } : colors.color(f.value);\n const title = `${f.name}${isFinite(f.value) ? `: ${formatValue(f.value)}` : ''}`;\n return {\n kind: 'path',\n part: 'region',\n d: outline.map((ring) => `M${ring.filter(validCoord).map(project).join('L')}Z`).join(''),\n fill: fill?.fill ?? CHART_COLORS.grid,\n opacity: fill?.opacity ?? 0.6,\n stroke: 'var(--skdx-color-surface-default)',\n title,\n item: { label: title, id: f.id ?? f.name, name: f.name, value: f.value },\n };\n });\n // Line layer: routes and connections, width by value; line features join it and take the\n // colour scale when they carry a value.\n const lines = [\n ...(input.lines ?? []),\n ...features.flatMap((f) =>\n linesOf(f).map((coordinates) => ({\n id: f.id,\n name: f.name,\n coordinates,\n value: f.value,\n color: f.color ?? (isFinite(f.value) ? colors.color(f.value)?.fill : undefined),\n dash: undefined,\n })),\n ),\n ].filter((l) => l.coordinates.filter(validCoord).length >= 2);\n const [, lMax] = minMax(lines.map((l) => l.value));\n const routes: Shape[] = lines.map((l, i) => {\n const title = `${l.name}${isFinite(l.value) ? `: ${formatValue(l.value)}` : ''}`;\n return {\n kind: 'path',\n part: 'route',\n d: `M${l.coordinates.filter(validCoord).map(project).join('L')}`,\n stroke: l.color ?? colorOf(input, 2),\n strokeWidth:\n isFinite(l.value) && lMax > 0 ? 1 + 3 * Math.sqrt(Math.max(0, l.value) / lMax) : 1.5,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n dash: l.dash,\n opacity: 0.85,\n title,\n item: { label: title, id: l.id ?? l.name, name: l.name, index: i, value: l.value },\n };\n });\n // Marker layer: dots, or bubbles whose area follows the value; point features join it.\n const marks = [\n ...(input.points ?? []),\n ...features.flatMap((f) =>\n pointsOf(f).map((coordinates) => ({\n id: f.id,\n name: f.name,\n coordinates,\n value: f.value,\n color: f.color ?? (isFinite(f.value) ? colors.color(f.value)?.fill : undefined),\n })),\n ),\n ].filter((p) => validCoord(p.coordinates));\n const [rMin, rMax] = input.sizeRange ?? [3, 14];\n const [, vMax] = minMax(marks.map((p) => p.value));\n const markers: Shape[] = marks.map((p, i) => {\n const { x: mx, y: my } = projectXY(p.coordinates);\n const sized = Number.isFinite(p.value) && vMax > 0;\n const title = `${p.name}${sized ? `: ${formatValue(p.value as number)}` : ''}`;\n return {\n kind: 'circle',\n part: sized ? 'bubble' : 'point',\n cx: mx,\n cy: my,\n r: px(sized ? Math.max(rMin, Math.sqrt(Math.max(0, p.value as number) / vMax) * rMax) : rMin),\n fill: p.color ?? colorOf(input, 1),\n stroke: 'var(--skdx-color-surface-default)',\n opacity: 0.85,\n title,\n item: { label: title, id: p.id ?? p.name, name: p.name, index: i, value: p.value },\n };\n });\n const legend = input.colorLegend\n ? colorLegendShapes(\n colors,\n legendColumn\n ? { x: plot.x + plot.width + 12, y: plot.y, width: legendColumn, height: plot.height }\n : { x: PAD, y: height - legendRoom + 8, width: width - 2 * PAD, height: legendRoom },\n colorLegendRoom(input.colorLegend).options,\n )\n : [];\n // The centre is reported in longitude/latitude (unprojected) so it round-trips through `view`.\n const unY =\n input.projection === 'mercator'\n ? (y: number) => (Math.atan(Math.exp(y)) * 360) / Math.PI - 90\n : (y: number) => y;\n return {\n ...canvas(input, width, height),\n shapes: [...shapes, ...routes, ...labels, ...markers, ...legend],\n issues,\n map: {\n view: { center: [center[0], unY(center[1])], zoom: zoomLevel },\n bounds: { minLon, maxLon, minLat, maxLat },\n plot,\n scale,\n toY,\n fromY: unY,\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 {\n axis,\n canvas,\n colorOf,\n isHidden,\n legendTop,\n MARGIN,\n plotBox,\n size,\n stateCanvas,\n thinTicks,\n} from './frame.js';\nimport { isFinite, px } from './scale.js';\nimport { frameShapes, label } from './shapes.js';\nimport type { Canvas, ChartDataIssue, MarimekkoChartInput, Shape } from './types.js';\n\n/**\n * Two encodings in one chart: column widths follow each category's total (market size, revenue),\n * segment heights inside a column follow that segment's share of the column (mix, composition).\n * Every tooltip names both, since neither reads off the axes alone.\n */\nexport function layoutMarimekkoChart(input: MarimekkoChartInput): Canvas {\n const issues: ChartDataIssue[] = [];\n const segments = input.segments.map((s, i) =>\n typeof s === 'string'\n ? { name: s, id: s, color: colorOf(input, i) }\n : { name: s.name, id: s.id ?? s.name, color: colorOf(input, i, s.color) },\n );\n const shownSeg = segments.map((s) => !isHidden(input, s.name));\n // Non-finite and negative values are drawn as zero and reported once each.\n const value = (category: MarimekkoChartInput['data'][number], si: number): number => {\n const v = category.values[si];\n if (v === null || v === undefined) return 0;\n if (!isFinite(v) || v < 0) {\n issues.push({\n code: isFinite(v) ? 'negative-value' : 'invalid-value',\n severity: 'warning',\n message: `\"${segments[si]?.name}\" in \"${category.name}\" is ${isFinite(v) ? 'negative' : 'not a number'}; drawn as zero.`,\n itemId: category.id ?? category.name,\n });\n return 0;\n }\n return v;\n };\n const columns = input.data.map((c, ci) => {\n const values = segments.map((_, si) => (shownSeg[si] ? value(c, si) : 0));\n const sum = values.reduce((s, v) => s + v, 0);\n const total = isFinite(c.total) && c.total >= 0 ? c.total : sum;\n return { c, ci, values, sum, total };\n });\n const grand = columns.reduce((s, col) => s + col.total, 0);\n const state = stateCanvas(input, grand <= 0);\n if (state) return { ...state, issues };\n const format = makeFormatter(input.format);\n const totalFormat = makeFormatter(input.xAxis?.format ?? input.format);\n const { width, height } = size(input);\n const plot = plotBox(width, height, {\n ...MARGIN,\n top: MARGIN.top + legendTop(input),\n bottom: MARGIN.bottom + (input.xAxis?.label ? 14 : 0) + (input.xAxis?.format ? 14 : 0),\n });\n const gap = Math.max(0, Math.min(0.2, input.gap ?? 0.01)) * plot.width;\n const gaps = Math.max(0, columns.length - 1);\n const usable = Math.max(0, plot.width - gap * gaps);\n const y = axis([0, 1], [plot.y + plot.height, plot.y], { format: { style: 'percent' } });\n const c = canvas(\n input,\n width,\n height,\n segments.map((s) => ({ name: s.name, color: s.color })),\n );\n // Column positions along x, each as wide as its share of the grand total.\n let x = plot.x;\n const placed = columns.map((col) => {\n const w = (col.total / grand) * usable;\n const box = { x, w };\n x += w + gap;\n return { ...col, ...box };\n });\n const xTicks = placed.map((p) => ({ pos: px(p.x + p.w / 2), label: p.c.name }));\n const shapes: Shape[] = frameShapes(\n { ...c, plot, xTicks: thinTicks(xTicks, plot.width), yTicks: y.ticks, baseline: y.zero },\n { xLabel: input.xAxis?.label, yLabel: undefined },\n );\n if (input.xAxis?.format)\n for (const p of placed)\n if (p.w > 24)\n shapes.push(\n label(px(p.x + p.w / 2), plot.y + plot.height + 34, totalFormat(p.total), {\n part: 'x-total',\n anchor: 'middle',\n }),\n );\n const cells: Shape[] = [];\n const texts: Shape[] = [];\n for (const p of placed) {\n let from = 0;\n p.values.forEach((v, si) => {\n const seg = segments[si] as (typeof segments)[number];\n if (v <= 0 || p.sum <= 0) return;\n const share = v / p.sum;\n const y0 = y.scale(from + share);\n const y1 = y.scale(from);\n from += share;\n const pct = `${Math.round(share * 100)}%`;\n const title = `${seg.name}, ${p.c.name}: ${format(v)} (${pct}) · column ${totalFormat(p.total)}`;\n const h = Math.max(0, y1 - y0);\n cells.push({\n kind: 'rect',\n part: 'cell',\n x: px(p.x),\n y: px(y0),\n width: px(p.w),\n height: px(h),\n fill: seg.color,\n stroke: 'var(--skdx-color-surface-default)',\n title,\n item: {\n label: title,\n id: `${p.c.id ?? p.c.name}:${seg.name}`,\n series: seg.name,\n seriesId: seg.id,\n category: p.c.name,\n index: p.ci,\n value: v,\n },\n });\n if (input.labels && h > 14 && p.w > 24)\n texts.push(\n label(px(p.x + p.w / 2), px(y0 + h / 2), pct, {\n part: 'cell-label',\n anchor: 'middle',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-on-accent)',\n }),\n );\n });\n }\n return { ...c, shapes: [...shapes, ...cells, ...texts, ...c.shapes], issues };\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, CHAR, colorOf, isHidden, legendTop, plotBox, size, stateCanvas } from './frame.js';\nimport { CHART_COLORS } from './palette.js';\nimport { isFinite, linearScale, minMax, niceTicks, pathThrough, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { Canvas, ChartDataIssue, ParallelCoordinatesInput, Shape } from './types.js';\n\n/** Per-row titles and keyboard stops are emitted up to this many rows. */\nexport const PARALLEL_TITLE_LIMIT = 500;\n\n/**\n * One vertical axis per dimension, each on its own scale, and one polyline per row through its\n * values: model comparisons, instance types, product specs. Filters fade the rows outside them.\n */\nexport function layoutParallelCoordinates(input: ParallelCoordinatesInput): Canvas {\n const issues: ChartDataIssue[] = [];\n const dims = input.dimensions;\n const rows = input.data.filter((r) => !(r.group !== undefined && isHidden(input, r.group)));\n const state = stateCanvas(input, dims.length === 0 || rows.length === 0);\n if (state) return { ...state, issues };\n const { width, height } = size(input);\n const groups = [\n ...new Set(input.data.map((r) => r.group).filter((g): g is string => g !== undefined)),\n ];\n const first = dims[0] as (typeof dims)[number];\n const last = dims[dims.length - 1] as (typeof dims)[number];\n const pad = (d: (typeof dims)[number]) => ((d.label ?? d.key).length * CHAR) / 2 + 8;\n const plot = plotBox(width, height, {\n top: 28 + legendTop(input),\n right: Math.max(16, pad(last)),\n bottom: 16,\n left: Math.max(48, pad(first)),\n });\n const value = (r: (typeof rows)[number], key: string) => {\n const v = r.values[key];\n if (v === undefined || v === null) return null;\n if (!isFinite(v)) {\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `\"${r.name}\" has a value on \"${key}\" that is not a number; drawn as a gap.`,\n itemId: r.id ?? r.name,\n });\n return null;\n }\n return v;\n };\n // One linear scale per axis over its own extent (or explicit bounds), niced at the ends.\n const axes = dims.map((d, i) => {\n const [lo, hi] = minMax(rows.map((r) => value(r, d.key)));\n const ticks = niceTicks(d.min ?? lo, d.max ?? hi);\n const min = d.min ?? (ticks[0] as number);\n const max = d.max ?? (ticks[ticks.length - 1] as number);\n const range: [number, number] = d.reversed\n ? [plot.y, plot.y + plot.height]\n : [plot.y + plot.height, plot.y];\n const scale = linearScale([min, max], range);\n const x = px(\n dims.length === 1 ? plot.x + plot.width / 2 : plot.x + (i * plot.width) / (dims.length - 1),\n );\n const f = makeFormatter(d.format ?? input.format);\n return {\n d,\n x,\n scale: (v: number) => px(scale(Math.max(min, Math.min(max, v)))),\n format: f,\n ticks: ticks.filter((t) => t >= min - 1e-9 && t <= max + 1e-9),\n };\n });\n const shapes: Shape[] = [];\n axes.forEach((a, i) => {\n shapes.push({\n kind: 'line',\n part: 'axis',\n x1: a.x,\n x2: a.x,\n y1: plot.y,\n y2: plot.y + plot.height,\n stroke: CHART_COLORS.axis,\n });\n const anchor = i === axes.length - 1 && axes.length > 1 ? 'start' : 'end';\n for (const t of a.ticks)\n shapes.push(\n label(px(anchor === 'end' ? a.x - 6 : a.x + 6), a.scale(t), a.format(t), {\n part: 'y-label',\n anchor,\n baseline: 'middle',\n }),\n );\n shapes.push(\n label(a.x, plot.y - 12, a.d.label ?? a.d.key, { part: 'axis-title', anchor: 'middle' }),\n );\n });\n const titled = rows.length <= PARALLEL_TITLE_LIMIT;\n const opacity = input.opacity ?? (rows.length > 200 ? 0.25 : 0.6);\n const passes = (r: (typeof rows)[number]) =>\n (input.filters ?? []).every((f) => {\n const v = value(r, f.key);\n return v !== null && v >= (f.min ?? -Infinity) && v <= (f.max ?? Infinity);\n });\n const lines: Shape[] = rows.map((r, index) => {\n const segments: { x: number; y: number }[][] = [];\n let current: { x: number; y: number }[] = [];\n for (const a of axes) {\n const v = value(r, a.d.key);\n if (v === null) {\n if (!input.connectNulls && current.length) {\n segments.push(current);\n current = [];\n }\n continue;\n }\n current.push({ x: a.x, y: a.scale(v) });\n }\n if (current.length) segments.push(current);\n const text = `${r.name}: ${axes\n .map((a) => {\n const v = value(r, a.d.key);\n return `${a.d.label ?? a.d.key} ${v === null ? '—' : a.format(v)}`;\n })\n .join(' · ')}`;\n return {\n kind: 'path',\n part: 'row',\n d: segments.map((s) => pathThrough(s, input.curve)).join(''),\n stroke:\n r.color ??\n (r.group !== undefined ? colorOf(input, groups.indexOf(r.group)) : colorOf(input, 0)),\n strokeWidth: 1.5,\n strokeLinejoin: 'round',\n opacity: passes(r) ? opacity : 0.08,\n title: titled ? text : undefined,\n item: titled\n ? { label: text, id: r.id ?? r.name, name: r.name, category: r.group, index }\n : undefined,\n };\n });\n const c = canvas(\n input,\n width,\n height,\n groups.map((g, i) => ({ name: g, color: colorOf(input, i) })),\n );\n return { ...c, shapes: [...shapes, ...lines, ...c.shapes], issues };\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 { layoutBulletChart } from './bullet.js';\nimport { makeFormatter } from './format.js';\nimport { stateCanvas } from './frame.js';\nimport { isFinite } from './scale.js';\nimport type { Canvas, LinearGaugeInput } from './types.js';\n\n/**\n * One reading on a straight scale: the bullet engine with gauge semantics (`value`, `min`,\n * `max`, `bands`, `target`). Reads in a KPI card where an arc would not fit.\n */\nexport function layoutLinearGauge(input: LinearGaugeInput): Canvas {\n const vertical = input.orientation === 'vertical';\n const state = stateCanvas(input, !isFinite(input.value), 600, vertical ? 300 : 64);\n if (state) return state;\n const format = makeFormatter(input.format);\n const min = input.min ?? 0;\n const bands = (input.bands ?? []).filter((b) => isFinite(b.from) && isFinite(b.to));\n const max =\n input.max ?? Math.max(100, input.value, input.target ?? -Infinity, ...bands.map((b) => b.to));\n const target = isFinite(input.target) ? `, target ${format(input.target)}` : '';\n const layout = layoutBulletChart({\n ...input,\n height: input.height ?? (vertical ? 300 : 64),\n data: [\n {\n id: 'value',\n name: input.caption ?? '',\n value: input.value,\n target: input.target,\n ranges: bands,\n },\n ],\n min,\n max,\n labels: input.labels ?? true,\n ticks: input.ticks,\n });\n return {\n ...layout,\n description:\n input.description ??\n `${input.caption ?? 'Value'} ${format(input.value)} on a scale from ${format(min)} to ${format(max)}${target}.`,\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 {\n axis,\n canvas,\n CHAR,\n colorOf,\n extent,\n gridOn,\n isHidden,\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, px } from './scale.js';\nimport { frameShapes, label } from './shapes.js';\nimport type { Canvas, ChartDataIssue, ChartItem, DumbbellChartInput, Shape } from './types.js';\n\n/**\n * A category with a start and an end value joined by a connector: before/after, plan/actual,\n * previous/current. Horizontal by default (categories down y), vertical on request.\n */\nexport function layoutDumbbellChart(input: DumbbellChartInput): Canvas {\n const issues: ChartDataIssue[] = [];\n const data = input.data.filter((d) => {\n const ok = isFinite(d.start) || isFinite(d.end);\n if (!ok)\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `\"${d.name}\" has neither a valid start nor end and was dropped.`,\n itemId: d.id ?? d.name,\n });\n return ok;\n });\n const state = stateCanvas(input, data.length === 0);\n if (state) return { ...state, issues };\n const format = makeFormatter(input.xAxis?.format ?? input.format);\n const { width, height } = size(input);\n const vertical = input.orientation === 'vertical';\n const startLabel = input.startLabel ?? 'Start';\n const endLabel = input.endLabel ?? 'End';\n // The legend toggles the two ends like any other series: a hidden end drops its markers, its\n // value labels and the connector that would dangle, and leaves the value axis to the rest.\n const hideStart = isHidden(input, startLabel);\n const hideEnd = isHidden(input, endLabel);\n const sorted = [...data];\n if (input.sort) {\n const key = (d: (typeof data)[number]) =>\n input.sort === 'change'\n ? (isFinite(d.end) ? d.end : 0) - (isFinite(d.start) ? d.start : 0)\n : isFinite(d.end)\n ? d.end\n : -Infinity;\n sorted.sort((a, b) => (input.sort === 'asc' ? key(a) - key(b) : key(b) - key(a)));\n }\n const widest = Math.max(0, ...sorted.map((d) => d.name.length)) * CHAR;\n const plot = plotBox(width, height, {\n ...MARGIN,\n top: MARGIN.top + legendTop(input) + (vertical && input.xAxis?.label ? 12 : 0),\n right: input.labels && !vertical ? 56 : MARGIN.right,\n bottom: MARGIN.bottom + (!vertical && input.xAxis?.label ? 14 : 0),\n left: vertical ? MARGIN.left : Math.max(MARGIN.left, widest + 16),\n });\n const value = axis(\n extent(\n sorted.flatMap((d) => [hideStart ? undefined : d.start, hideEnd ? undefined : d.end]),\n false,\n ),\n vertical ? [plot.y + plot.height, plot.y] : [plot.x, plot.x + plot.width],\n input.xAxis ?? {},\n input.format,\n );\n const band = bandScale(\n sorted.length,\n vertical ? [plot.x, plot.x + plot.width] : [plot.y, plot.y + plot.height],\n );\n const startColor = colorOf(input, 0);\n const endColor = colorOf(input, 1);\n const c = canvas(input, width, height, [\n { name: startLabel, color: startColor },\n { name: endLabel, color: endColor },\n ]);\n const categoryTicks = sorted.map((d, i) => ({ pos: px(band.center(i)), label: d.name }));\n const shapes: Shape[] = frameShapes(\n {\n ...c,\n plot,\n xTicks: vertical ? thinTicks(categoryTicks, plot.width) : categoryTicks,\n yTicks: vertical ? value.ticks : thinTicks(value.ticks, plot.width),\n baseline: vertical ? plot.y + plot.height : plot.x,\n },\n {\n horizontal: !vertical,\n grid: gridOn(input.xAxis),\n ...(vertical ? { yLabel: input.xAxis?.label } : { xLabel: input.xAxis?.label }),\n },\n );\n shapes.push(\n ...referenceShapes(input.references, {\n plot,\n horizontal: !vertical,\n x: (v) => {\n const i = sorted.findIndex((d) => d.name === v);\n return i < 0 ? undefined : band.center(i);\n },\n y: (v) => value.scale(v),\n }),\n );\n const r = input.markerSize ?? 5;\n const at = (v: number, mid: number) =>\n vertical ? { x: px(mid), y: px(value.scale(v)) } : { x: px(value.scale(v)), y: px(mid) };\n const connectors: Shape[] = [];\n const marks: Shape[] = [];\n const texts: Shape[] = [];\n sorted.forEach((d, i) => {\n const mid = band.center(i);\n const s = isFinite(d.start) ? format(d.start) : '—';\n const e = isFinite(d.end) ? format(d.end) : '—';\n const title = `${d.name}: ${s} → ${e}`;\n const item: ChartItem = {\n label: title,\n id: d.id ?? d.name,\n name: d.name,\n index: i,\n value: isFinite(d.end) ? d.end : undefined,\n };\n if (!hideStart && !hideEnd && isFinite(d.start) && isFinite(d.end)) {\n const a = at(d.start, mid);\n const b = at(d.end, mid);\n connectors.push({\n kind: 'line',\n part: 'connector',\n x1: a.x,\n y1: a.y,\n x2: b.x,\n y2: b.y,\n stroke: d.color ?? CHART_COLORS.axis,\n strokeWidth: 3,\n title,\n item,\n });\n }\n for (const [v, part, name, fill, hidden] of [\n [d.start, 'start', startLabel, startColor, hideStart],\n [d.end, 'end', endLabel, endColor, hideEnd],\n ] as const) {\n if (hidden || !isFinite(v)) continue;\n const p = at(v, mid);\n const text = `${d.name} · ${name}: ${format(v)}`;\n marks.push({\n kind: 'circle',\n part,\n cx: p.x,\n cy: p.y,\n r,\n fill,\n stroke: 'var(--skdx-color-surface-default)',\n title: text,\n item: { ...item, label: text, series: name },\n });\n if (input.labels)\n texts.push(\n vertical\n ? label(p.x, px(p.y + (part === 'end' ? -r - 4 : r + 12)), format(v), {\n part: 'value-label',\n anchor: 'middle',\n })\n : label(px(p.x + (part === 'end' ? r + 4 : -r - 4)), p.y, format(v), {\n part: 'value-label',\n anchor: part === 'end' ? 'start' : 'end',\n baseline: 'middle',\n }),\n );\n }\n });\n return { ...c, shapes: [...shapes, ...connectors, ...marks, ...texts, ...c.shapes], issues };\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 { isFinite } from './scale.js';\nimport type { Canvas, ChartDataIssue, ParetoChartInput } from './types.js';\n\n/**\n * Categories sorted by value with the cumulative share as a line on the right axis, so the\n * \"vital few\" causes stand out. Reuses the cartesian engine: bars on the left axis, the\n * cumulative line on a 0–100% right axis, an optional threshold reference (e.g. 80%).\n */\nexport function layoutParetoChart(input: ParetoChartInput): Canvas {\n const issues: ChartDataIssue[] = [];\n const data = input.data.filter((d) => {\n const ok = isFinite(d.value) && d.value >= 0;\n if (!ok)\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `\"${d.name}\" has no valid non-negative value and was dropped.`,\n itemId: d.id ?? d.name,\n });\n return ok;\n });\n // Stable descending sort: ties keep input order.\n const sorted = data.map((d, i) => ({ d, i })).sort((a, b) => b.d.value - a.d.value || a.i - b.i);\n const total = sorted.reduce((s, { d }) => s + d.value, 0);\n let running = 0;\n const share = sorted.map(({ d }) => (total > 0 ? (running += d.value) / total : 0));\n const threshold = input.threshold;\n const layout = layoutCartesian(\n {\n ...input,\n categories: sorted.map(({ d }) => d.name),\n series: [\n {\n name: input.name ?? 'Value',\n type: 'bar',\n data: sorted.map(({ d }) => d.value),\n color: sorted[0]?.d.color,\n },\n {\n name: input.cumulativeLabel ?? 'Cumulative',\n type: 'line',\n axis: 'right',\n data: share,\n curve: 'linear',\n },\n ],\n rightAxis: { min: 0, max: 1, format: { style: 'percent' } },\n references:\n threshold !== undefined && isFinite(threshold)\n ? [\n {\n y: threshold,\n axis: 'right',\n label: `${Math.round(threshold * 100)}%`,\n variant: 'primary',\n },\n ]\n : undefined,\n },\n 'bar',\n );\n // Bars carry the datum id and its own color, which the shared series cannot express.\n const shapes = layout.shapes.map((s) => {\n if (s.part !== 'bar' || s.kind !== 'rect' || !s.item || s.item.index === undefined) return s;\n const d = sorted[s.item.index]?.d;\n return d\n ? { ...s, fill: d.color ?? s.fill, item: { ...s.item, id: d.id ?? d.name, name: d.name } }\n : s;\n });\n return { ...layout, shapes, issues: [...issues, ...(layout.issues ?? [])] };\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, CHAR, colorOf, legendTop, plotBox, size, stateCanvas } from './frame.js';\nimport { cutDepth, drill, hasValue, nodeId, nodeValue } from './hierarchy.js';\nimport { CHART_COLORS } from './palette.js';\nimport { px } from './scale.js';\nimport { label } from './shapes.js';\nimport type {\n Canvas,\n ChartItemId,\n OrganizationChartInput,\n Shape,\n TreeChartInput,\n TreeNode,\n} from './types.js';\n\ninterface Placed {\n node: TreeNode;\n depth: number;\n /** Slot along the breadth axis: leaves count up in post-order, parents centre over children. */\n slot: number;\n parent: Placed | undefined;\n collapsed: boolean;\n color: string;\n}\n\n/**\n * A node-link tree: leaves get evenly spaced slots in post-order and every parent sits over the\n * middle of its children; depth runs down (or right). A tidy Reingold–Tilford layout is not\n * needed for the dashboard-sized trees this draws.\n */\nexport function layoutTreeChart(input: TreeChartInput): Canvas {\n const { nodes: roots, path } = drill(input.data, input.rootId);\n const nodes = cutDepth(roots, input.maxDepth);\n const state = stateCanvas(input, nodes.length === 0);\n if (state) return state;\n const format = makeFormatter(input.format);\n const { width, height } = size(input);\n const vertical = input.orientation !== 'horizontal';\n const box = input.nodeShape === 'box';\n const linkStyle = input.linkStyle ?? 'curve';\n const collapsed = new Set<ChartItemId>(input.collapsed ?? []);\n const labels = input.labels ?? true;\n\n // Walk: post-order slots for leaves; a collapsed node (or one at maxDepth) is a leaf.\n const placed: Placed[] = [];\n let slot = 0;\n let depthMax = 0;\n const walk = (n: TreeNode, depth: number, parent: Placed | undefined, i: number): Placed => {\n const isCollapsed = collapsed.has(nodeId(n)) || collapsed.has(n.name);\n const kids = isCollapsed ? [] : (n.children ?? []);\n const color = n.color ?? parent?.color ?? colorOf(input, i);\n const p: Placed = { node: n, depth, slot: 0, parent, collapsed: isCollapsed, color };\n depthMax = Math.max(depthMax, depth);\n if (kids.length === 0) p.slot = slot++;\n else {\n const children = kids.map((c, k) => walk(c, depth + 1, p, k));\n p.slot = ((children[0] as Placed).slot + (children[children.length - 1] as Placed).slot) / 2;\n }\n placed.push(p);\n return p;\n };\n nodes.forEach((n, i) => walk(n, 0, undefined, i));\n\n // Node geometry: boxes are as wide as their longest line; circles are dots.\n const textOf = (n: TreeNode) => Math.max(n.name.length, n.subtitle?.length ?? 0);\n const widest = Math.max(0, ...placed.map((p) => textOf(p.node))) * CHAR + 16;\n const boxH = input.nodeSize ?? 36;\n const r = input.nodeSize ?? 5;\n const nodeW = box ? widest : 2 * r;\n const nodeH = box ? boxH : 2 * r;\n // Room for the nodes at the edges, and for circle labels beside (horizontal) or below (vertical).\n const labelRoom = !box && labels ? widest : 0;\n const plot = plotBox(width, height, {\n top: legendTop(input) + nodeH / 2 + 4,\n bottom: nodeH / 2 + 4 + (vertical && !box ? 16 : 0),\n left: nodeW / 2 + 4,\n right: nodeW / 2 + 4 + (!vertical ? labelRoom : 0),\n });\n const leaves = Math.max(1, slot);\n const breadth = vertical ? plot.width : plot.height;\n const along = vertical ? plot.height : plot.width;\n const step = leaves === 1 ? 0 : breadth / (leaves - 1);\n const levelGap = depthMax === 0 ? 0 : along / depthMax;\n const at = (p: Placed) => {\n const b = leaves === 1 ? breadth / 2 : p.slot * step;\n const a = p.depth * levelGap;\n return vertical\n ? { x: px(plot.x + b), y: px(plot.y + a) }\n : { x: px(plot.x + a), y: px(plot.y + b) };\n };\n\n const links: Shape[] = [];\n const marks: Shape[] = [];\n const texts: Shape[] = [];\n for (const p of placed) {\n const { x, y } = at(p);\n if (p.parent) {\n const from = at(p.parent);\n // Links leave the parent's far edge and enter the child's near edge.\n const half = box ? (vertical ? nodeH / 2 : nodeW / 2) : r;\n const x0 = vertical ? from.x : px(from.x + half);\n const y0 = vertical ? px(from.y + half) : from.y;\n const x1 = vertical ? x : px(x - half);\n const y1 = vertical ? px(y - half) : y;\n const mx = px((x0 + x1) / 2);\n const my = px((y0 + y1) / 2);\n const d =\n linkStyle === 'straight'\n ? `M${x0} ${y0}L${x1} ${y1}`\n : linkStyle === 'elbow'\n ? vertical\n ? `M${x0} ${y0}V${my}H${x1}V${y1}`\n : `M${x0} ${y0}H${mx}V${y1}H${x1}`\n : vertical\n ? `M${x0} ${y0}C${x0} ${my} ${x1} ${my} ${x1} ${y1}`\n : `M${x0} ${y0}C${mx} ${y0} ${mx} ${y1} ${x1} ${y1}`;\n links.push({\n kind: 'path',\n part: 'link',\n d,\n stroke: CHART_COLORS.axis,\n strokeWidth: 1.5,\n title: `${p.parent.node.name} → ${p.node.name}`,\n });\n }\n const value = nodeValue(p.node);\n const title = `${p.node.name}${p.node.subtitle ? ` · ${p.node.subtitle}` : ''}${hasValue(p.node) ? `: ${format(value)}` : ''}${p.collapsed ? ' (collapsed)' : ''}`;\n const item = { label: title, id: nodeId(p.node), name: p.node.name, value };\n if (box) {\n marks.push({\n kind: 'rect',\n part: 'node',\n x: px(x - nodeW / 2),\n y: px(y - nodeH / 2),\n width: px(nodeW),\n height: px(nodeH),\n fill: p.color,\n rx: 4,\n title,\n item,\n });\n if (labels) {\n const two = Boolean(p.node.subtitle);\n texts.push(\n label(x, px(two ? y - 7 : y), p.node.name, {\n part: 'node-label',\n anchor: 'middle',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-on-accent)',\n weight: 'bold',\n }),\n );\n if (two)\n texts.push(\n label(x, px(y + 8), p.node.subtitle as string, {\n part: 'node-subtitle',\n anchor: 'middle',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-on-accent)',\n }),\n );\n }\n } else {\n marks.push({\n kind: 'circle',\n part: 'node',\n cx: x,\n cy: y,\n r: px(r),\n fill: p.color,\n stroke: 'var(--skdx-color-surface-default)',\n title,\n item,\n });\n if (labels)\n texts.push(\n vertical\n ? label(x, px(y + r + 12), p.node.name, {\n part: 'node-label',\n anchor: 'middle',\n fill: 'var(--skdx-color-text-default)',\n })\n : label(px(x + r + 4), y, p.node.name, {\n part: 'node-label',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-default)',\n }),\n );\n }\n if (p.collapsed)\n texts.push(\n label(\n px(box ? x + nodeW / 2 - 8 : x + r + (vertical ? 6 : -2)),\n px(box ? y - nodeH / 2 + 8 : y - r - 2),\n '+',\n {\n part: 'collapsed',\n anchor: 'middle',\n baseline: 'middle',\n fill: CHART_COLORS.label,\n weight: 'bold',\n },\n ),\n );\n }\n const crumbs = path.length\n ? [\n label(8, legendTop(input) + 10, path.map((n) => n.name).join(' › '), {\n part: 'breadcrumb',\n baseline: 'middle',\n }),\n ]\n : [];\n const c = canvas(input, width, height);\n return { ...c, shapes: [...links, ...marks, ...texts, ...crumbs, ...c.shapes] };\n}\n\n/** An organization chart: the tree with boxes and elbow links. */\nexport const layoutOrganizationChart = (input: OrganizationChartInput): Canvas =>\n layoutTreeChart({ ...input, nodeShape: 'box', linkStyle: 'elbow' });\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 { makeColorScale } from './colors.js';\nimport { makeFormatter } from './format.js';\nimport { canvas, CHAR, colorOf, isHidden, legendTop, size, stateCanvas } from './frame.js';\nimport { cutDepth, drill, nodeId, nodeValue } from './hierarchy.js';\nimport { px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { Canvas, ChartDataIssue, CirclePackingInput, Shape, TreeNode } from './types.js';\n\ninterface Circle {\n x: number;\n y: number;\n r: number;\n}\n\n/**\n * Packs circles of the given radii (largest first) around the origin: each next circle walks a\n * spiral outward until it overlaps none of the placed ones, so the result is deterministic and\n * compact enough for dashboards. Returns the circles and the enclosing radius.\n * ponytail: O(n²) per sibling set; a front-chain packer if a node ever has thousands of children.\n */\nexport function packCircles(\n radii: number[],\n padding: number,\n): { circles: Circle[]; enclosing: number } {\n const circles: Circle[] = [];\n const order = radii.map((r, i) => ({ r, i })).sort((a, b) => b.r - a.r);\n const out = new Array<Circle>(radii.length);\n for (const { r, i } of order) {\n let placed: Circle | undefined;\n if (circles.length === 0) placed = { x: 0, y: 0, r };\n else {\n const step = Math.max(1, r / 4);\n search: for (let d = 0; d < 1e6; d += step)\n for (let k = 0; k < 24; k++) {\n const a = (k / 24) * 2 * Math.PI + d * 0.05;\n const c = { x: d * Math.cos(a), y: d * Math.sin(a), r };\n if (circles.every((o) => Math.hypot(o.x - c.x, o.y - c.y) >= o.r + c.r + padding)) {\n placed = c;\n break search;\n }\n }\n }\n const c = placed ?? { x: 0, y: 0, r };\n circles.push(c);\n out[i] = c;\n }\n // Recentre on the bounding box and measure the enclosing radius from there.\n let x0 = Infinity;\n let x1 = -Infinity;\n let y0 = Infinity;\n let y1 = -Infinity;\n for (const c of circles) {\n x0 = Math.min(x0, c.x - c.r);\n x1 = Math.max(x1, c.x + c.r);\n y0 = Math.min(y0, c.y - c.r);\n y1 = Math.max(y1, c.y + c.r);\n }\n const cx = (x0 + x1) / 2;\n const cy = (y0 + y1) / 2;\n let enclosing = 0;\n for (const c of out) {\n c.x -= cx;\n c.y -= cy;\n enclosing = Math.max(enclosing, Math.hypot(c.x, c.y) + c.r);\n }\n return { circles: out, enclosing };\n}\n\n/** Nested circles sized by value: children packed inside their parent, leaves filled. */\nexport function layoutCirclePacking(input: CirclePackingInput): Canvas {\n const issues: ChartDataIssue[] = [];\n const { nodes: roots } = drill(input.data, input.rootId);\n // The legend lists every top-level branch, hidden ones included, so a hide can be undone; and\n // a branch keeps the colour of its place in that full list whatever is hidden.\n const branches = cutDepth(roots, input.maxDepth);\n const branchColor = new Map(\n branches.map((n, i) => [nodeId(n), colorOf(input, i, n.color)] as const),\n );\n const nodes = branches.filter((n) => !isHidden(input, n.name));\n const state = stateCanvas(input, !nodes.some((n) => nodeValue(n) > 0), 300, 300);\n if (state) return { ...state, issues };\n const format = makeFormatter(input.format);\n const { width, height } = size(input, 300, 300);\n const top = legendTop(input);\n const pad = input.padding ?? 2;\n const labels = input.labels ?? true;\n const leafValues: number[] = [];\n const collect = (n: TreeNode) => {\n if (n.children?.length) n.children.forEach(collect);\n else leafValues.push(nodeValue(n));\n };\n nodes.forEach(collect);\n const colors = makeColorScale(input.colorScale, leafValues, colorOf(input, 0), undefined, format);\n const shapes: Shape[] = [];\n const texts: Shape[] = [];\n\n // Pack `items` inside a circle of `radius` at (cx, cy): sibling radii follow √value.\n const pack = (\n items: TreeNode[],\n cx: number,\n cy: number,\n radius: number,\n inherited: string | undefined,\n ) => {\n const kept = items.filter((n) => {\n const ok = nodeValue(n) > 0;\n if (!ok)\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `\"${n.name}\" has no positive value and was dropped.`,\n itemId: nodeId(n),\n });\n return ok;\n });\n if (kept.length === 0) return;\n // Packed in √value units, then scaled into the parent; the gap is taken off each radius.\n const { circles, enclosing } = packCircles(\n kept.map((n) => Math.sqrt(nodeValue(n))),\n 0,\n );\n const k = enclosing > 0 ? (radius - pad) / enclosing : 0;\n kept.forEach((n, i) => {\n const c = circles[i] as Circle;\n const x = px(cx + c.x * k);\n const y = px(cy + c.y * k);\n const r = Math.max(0, c.r * k - pad / 2);\n const value = nodeValue(n);\n const branch = (n.children?.length ?? 0) > 0;\n const color = n.color ?? inherited ?? branchColor.get(nodeId(n)) ?? colorOf(input, i);\n const fill = branch ? color : input.colorScale ? (colors.color(value)?.fill ?? color) : color;\n const title = `${n.name}: ${format(value)}`;\n shapes.push({\n kind: 'circle',\n part: branch ? 'branch' : 'leaf',\n cx: x,\n cy: y,\n r: px(r),\n fill,\n opacity: branch\n ? 0.15\n : input.colorScale && !branch\n ? colors.color(value)?.opacity\n : undefined,\n stroke: 'var(--skdx-color-surface-default)',\n title,\n item: { label: title, id: nodeId(n), name: n.name, value },\n });\n if (labels && !branch && r * 2 > n.name.length * CHAR + 4)\n texts.push(\n label(x, y, n.name, {\n part: 'leaf-label',\n anchor: 'middle',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-on-accent)',\n }),\n );\n if (labels && branch && r * 2 > n.name.length * CHAR + 4)\n texts.push(\n label(x, px(y - r + 10), n.name, {\n part: 'branch-label',\n anchor: 'middle',\n baseline: 'middle',\n }),\n );\n if (branch) pack(n.children as TreeNode[], x, y, r, color);\n });\n };\n const radius = Math.max(0, Math.min(width, height - top) / 2 - 8);\n pack(nodes, width / 2, top + (height - top) / 2, radius, undefined);\n const c = canvas(\n input,\n width,\n height,\n branches.map((n) => ({ name: n.name, color: branchColor.get(nodeId(n)) as string })),\n );\n return { ...c, shapes: [...shapes, ...texts, ...c.shapes], issues };\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 { makeColorScale } from './colors.js';\nimport { makeFormatter } from './format.js';\nimport { canvas, CHAR, colorOf, isHidden, legendTop, plotBox, size, stateCanvas } from './frame.js';\nimport { cutDepth, depthOf, drill, nodeId, nodeValue, sortChildren } from './hierarchy.js';\nimport { px } from './scale.js';\nimport { label } from './shapes.js';\nimport { breadcrumbShapes } from './treemap.js';\nimport type { Canvas, ChartDataIssue, IcicleInput, Shape, TreeNode } from './types.js';\n\n/**\n * A rectangular sunburst (partition): one row per depth (or one column when horizontal), each\n * node a cell whose extent is its share of the parent's, children stacked under their parent.\n */\nexport function layoutIcicle(input: IcicleInput): Canvas {\n const issues: ChartDataIssue[] = [];\n const { nodes: roots, path } = drill(input.data, input.rootId);\n const nodes = cutDepth(roots, input.maxDepth).filter((n) => !isHidden(input, n.name));\n const state = stateCanvas(input, !nodes.some((n) => nodeValue(n) > 0));\n if (state) return { ...state, issues };\n const format = makeFormatter(input.format);\n const { width, height } = size(input);\n const horizontal = input.orientation === 'horizontal';\n const crumbs = input.breadcrumbs && path.length > 0;\n const top = legendTop(input) + (crumbs ? 20 : 0);\n const plot = plotBox(width, height, { top, right: 0, bottom: 0, left: 0 });\n const gap = input.padding ?? 1;\n const labels = input.labels ?? true;\n const levels = Math.max(1, depthOf(nodes));\n const thick = (horizontal ? plot.width : plot.height) / levels;\n const leafValues: number[] = [];\n const collect = (n: TreeNode) => {\n if (n.children?.length) n.children.forEach(collect);\n else leafValues.push(nodeValue(n));\n };\n nodes.forEach(collect);\n const colors = makeColorScale(input.colorScale, leafValues, colorOf(input, 0), undefined, format);\n const shapes: Shape[] = [];\n const texts: Shape[] = [];\n\n // `from`..`from + extent` along the breadth axis; depth picks the row (or column).\n const walk = (\n items: TreeNode[],\n depth: number,\n from: number,\n extent: number,\n inherited: string | undefined,\n ) => {\n const kept = sortChildren(items, input.sort).filter((n) => {\n const ok = nodeValue(n) > 0;\n if (!ok)\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `\"${n.name}\" has no positive value and was dropped.`,\n itemId: nodeId(n),\n });\n return ok;\n });\n const total = kept.reduce((s, n) => s + nodeValue(n), 0);\n let at = from;\n kept.forEach((n, i) => {\n const value = nodeValue(n);\n const span = total > 0 ? (value / total) * extent : 0;\n const branch = (n.children?.length ?? 0) > 0;\n const color = n.color ?? inherited ?? colorOf(input, i);\n const scaled = !branch && input.colorScale ? colors.color(value) : undefined;\n const a = depth * thick;\n const rect = horizontal\n ? { x: plot.x + a + gap / 2, y: at + gap / 2, width: thick - gap, height: span - gap }\n : { x: at + gap / 2, y: plot.y + a + gap / 2, width: span - gap, height: thick - gap };\n const title = `${n.name}: ${format(value)}`;\n shapes.push({\n kind: 'rect',\n part: 'cell',\n x: px(rect.x),\n y: px(rect.y),\n width: px(Math.max(0, rect.width)),\n height: px(Math.max(0, rect.height)),\n fill: scaled?.fill ?? color,\n opacity: scaled?.opacity ?? (branch ? 0.7 : undefined),\n title,\n item: { label: title, id: nodeId(n), name: n.name, value },\n });\n if (labels && rect.width > n.name.length * CHAR + 6 && rect.height > 12)\n texts.push(\n label(px(rect.x + 4), px(rect.y + rect.height / 2), n.name, {\n part: 'cell-label',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-on-accent)',\n }),\n );\n if (branch) walk(n.children as TreeNode[], depth + 1, at, span, color);\n at += span;\n });\n };\n walk(nodes, 0, horizontal ? plot.y : plot.x, horizontal ? plot.height : plot.width, undefined);\n if (crumbs) shapes.push(...breadcrumbShapes(path, 8, legendTop(input) + 10));\n const c = canvas(\n input,\n width,\n height,\n nodes.map((n, i) => ({ name: n.name, color: colorOf(input, i, n.color) })),\n );\n return { ...c, shapes: [...shapes, ...texts, ...c.shapes], issues };\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, makeFormatter } from './format.js';\nimport {\n canvas,\n CHAR,\n colorOf,\n isHidden,\n legendTop,\n MARGIN,\n plotBox,\n size,\n stateCanvas,\n thinTicks,\n} from './frame.js';\nimport { CHART_COLORS } from './palette.js';\nimport { bandScale, finite, isFinite, linearScale, pathThrough, px } from './scale.js';\nimport { frameShapes, label, point } from './shapes.js';\nimport type { BumpChartInput, Canvas, ChartDataIssue, Shape, Tick } from './types.js';\n\n/**\n * Ranks over categories: one line per series with rank 1 at the top. Ranks are computed per\n * category from the values (largest first, ties in series order) unless the data already are\n * ranks. A rank beyond `topRank`, or a gap, breaks the line.\n */\nexport function layoutBumpChart(input: BumpChartInput): Canvas {\n const issues: ChartDataIssue[] = [];\n const shown = input.series.map((s, index) => ({ ...s, index, hidden: isHidden(input, s.name) }));\n const count = Math.max(input.categories?.length ?? 0, ...shown.map((s) => s.data.length));\n const state = stateCanvas(\n input,\n count === 0 || shown.every((s) => s.hidden || finite(s.data).length === 0),\n );\n if (state) return { ...state, issues };\n for (const s of shown) {\n const bad = s.data.filter((v) => v !== null && !isFinite(v)).length;\n if (bad)\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `Series \"${s.name}\" has ${bad} value${bad === 1 ? '' : 's'} that ${bad === 1 ? 'is' : 'are'} neither a number nor null; drawn as gaps.`,\n itemId: s.id ?? s.name,\n });\n }\n const format = makeFormatter(input.format);\n const { width, height } = size(input);\n const drawn = shown.filter((s) => !s.hidden);\n // Ranks per category: largest value first; already-ranked data pass through.\n const ranks = drawn.map(() => new Array<number | null>(count).fill(null));\n for (let ci = 0; ci < count; ci++) {\n if (input.ranked) {\n drawn.forEach((s, si) => {\n const v = s.data[ci];\n (ranks[si] as (number | null)[])[ci] = isFinite(v) ? v : null;\n });\n continue;\n }\n const order = drawn\n .map((s, si) => ({ si, v: s.data[ci] }))\n .filter((e): e is { si: number; v: number } => isFinite(e.v))\n .sort((a, b) => b.v - a.v || a.si - b.si);\n order.forEach((e, k) => {\n (ranks[e.si] as (number | null)[])[ci] = k + 1;\n });\n }\n const top = input.topRank ?? Math.max(1, drawn.length);\n const labels = Array.from({ length: count }, (_, i) => {\n const c = input.categories?.[i];\n return c === undefined ? String(i + 1) : categoryLabel(c, input.xAxis?.format);\n });\n const showLabels = input.labels ?? true;\n const widest = showLabels ? Math.max(0, ...drawn.map((s) => s.name.length)) * CHAR + 12 : 0;\n const plot = plotBox(width, height, {\n ...MARGIN,\n top: MARGIN.top + legendTop(input),\n right: Math.max(MARGIN.right, widest),\n bottom: MARGIN.bottom + (input.xAxis?.label ? 14 : 0),\n });\n // Rank 1 sits at the top: the axis runs down from half a rank above 1 to half a rank below `top`.\n const y = linearScale([0.5, top + 0.5], [plot.y, plot.y + plot.height]);\n const band = bandScale(count, [plot.x, plot.x + plot.width], 0);\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 rankTicks: Tick[] = Array.from({ length: top }, (_, k) => ({\n pos: px(y(k + 1)),\n label: `#${k + 1}`,\n }));\n const shapes: Shape[] = frameShapes(\n {\n ...c,\n plot,\n xTicks: thinTicks(\n labels.map((text, i) => ({ pos: px(band.center(i)), label: text })),\n plot.width,\n ),\n yTicks: top > 20 ? rankTicks.filter((_, k) => k % Math.ceil(top / 20) === 0) : rankTicks,\n baseline: plot.y + plot.height,\n },\n { xLabel: input.xAxis?.label, grid: input.xAxis?.grid !== false },\n );\n const r = input.markerSize ?? 5;\n const lines: Shape[] = [];\n const marks: Shape[] = [];\n const texts: Shape[] = [];\n const used: number[] = [];\n drawn.forEach((s, si) => {\n const color = colorOf(input, s.index, s.color);\n const segments: { x: number; y: number }[][] = [];\n let current: { x: number; y: number }[] = [];\n let last: { x: number; y: number } | undefined;\n for (let ci = 0; ci < count; ci++) {\n const rank = (ranks[si] as (number | null)[])[ci];\n if (rank === null || rank === undefined || rank > top || rank < 1) {\n if (current.length) segments.push(current);\n current = [];\n continue;\n }\n const p = { x: px(band.center(ci)), y: px(y(rank)) };\n current.push(p);\n last = p;\n const v = s.data[ci];\n const title = `${s.name}, ${labels[ci] as string}: #${rank}${input.ranked || !isFinite(v) ? '' : ` (${format(v)})`}`;\n marks.push(\n point(p.x, p.y, r, color, title, {\n label: title,\n id: s.id ?? s.name,\n series: s.name,\n seriesId: s.id ?? s.name,\n category: labels[ci],\n index: ci,\n value: rank,\n }),\n );\n }\n if (current.length) segments.push(current);\n for (const seg of segments)\n lines.push({\n kind: 'path',\n part: 'line',\n d: pathThrough(seg, input.curve ?? 'monotone'),\n stroke: color,\n strokeWidth: 3,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n title: s.name,\n item: { label: s.name, id: s.id ?? s.name, series: s.name, seriesId: s.id ?? s.name },\n });\n // The name sits after the last drawn point; one that would collide with an earlier name is dropped.\n if (showLabels && last && !used.some((u) => Math.abs(u - last.y) < 12)) {\n used.push(last.y);\n texts.push(\n label(px(last.x + r + 4), last.y, s.name, {\n part: 'series-label',\n baseline: 'middle',\n // Text-safe: a mid-scale series color lands under 2:1 on the page; the line ends here anyway.\n fill: CHART_COLORS.label,\n }),\n );\n }\n });\n return { ...c, shapes: [...shapes, ...lines, ...marks, ...texts, ...c.shapes], issues };\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 } from './palette.js';\nimport { arc } from './pie.js';\nimport { isFinite, niceTicks, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { Canvas, ChartDataIssue, PolarAreaChartInput, Shape } from './types.js';\n\nconst rad = (deg: number) => (deg * Math.PI) / 180;\n\n/**\n * A Nightingale rose: every datum gets the same angle and its radius follows the value, by\n * default through a square root so that sector area, not radius, is proportional to it.\n */\nexport function layoutPolarAreaChart(input: PolarAreaChartInput): Canvas {\n const issues: ChartDataIssue[] = [];\n const data = input.data.map((d) => {\n const ok = isFinite(d.value);\n if (!ok)\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `\"${d.name}\" has no valid value and is drawn as zero.`,\n itemId: d.id ?? d.name,\n });\n else if (d.value < 0)\n issues.push({\n code: 'negative-value',\n severity: 'warning',\n message: `\"${d.name}\" is negative (${d.value}); a radius cannot be, so it is drawn as zero.`,\n itemId: d.id ?? d.name,\n });\n return { ...d, value: ok && d.value > 0 ? d.value : 0 };\n });\n const state = stateCanvas(input, !data.some((d) => d.value > 0), 300, 300);\n if (state) return { ...state, issues };\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.labels ? 40 : 12));\n const hole = outer * Math.min(0.9, Math.max(0, input.innerRadius ?? 0));\n const levels = Math.max(1, Math.round(input.levels ?? 4));\n const shownMax = Math.max(0, ...data.map((d) => (isHidden(input, d.name) ? 0 : d.value)));\n const ticks = niceTicks(0, input.max ?? shownMax, levels).filter((t) => t > 0);\n const max = input.max ?? (ticks[ticks.length - 1] as number);\n const sqrt = (input.scale ?? 'sqrt') === 'sqrt';\n const radius = (v: number) => {\n const t = max > 0 ? Math.max(0, Math.min(1, v / max)) : 0;\n return hole + (outer - hole) * (sqrt ? Math.sqrt(t) : t);\n };\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 n = data.length;\n const step = sweep / Math.max(1, n);\n const pad = Math.min(step * 0.9, rad(Math.max(0, input.padAngle ?? 0)));\n // Grid rings at the nice ticks, with the tick value written where the first ring meets 12 o'clock.\n const grid: Shape[] = ticks\n .filter((t) => t <= max)\n .flatMap((t): Shape[] => [\n {\n kind: 'circle',\n part: 'grid',\n cx: px(cx),\n cy: px(cy),\n r: px(radius(t)),\n fill: 'none',\n stroke: CHART_COLORS.grid,\n },\n label(px(cx + 4), px(cy - radius(t)), format(t), { part: 'y-label', baseline: 'middle' }),\n ]);\n const sectors: Shape[] = [];\n const texts: Shape[] = [];\n data.forEach((d, i) => {\n const a0 = start + i * step + pad / 2;\n const a1 = a0 + step - pad;\n const hidden = isHidden(input, d.name);\n const title = `${d.name}: ${format(d.value)}`;\n if (!hidden && d.value > 0 && a1 > a0)\n sectors.push({\n kind: 'path',\n part: 'sector',\n d: arc(cx, cy, radius(d.value), hole, a0, a1),\n fill: colorOf(input, i, d.color),\n stroke: 'var(--skdx-color-surface-default)',\n title,\n item: { label: title, id: d.id ?? d.name, name: d.name, index: i, value: d.value },\n });\n if (input.labels && !hidden) {\n const mid = (a0 + a1) / 2;\n const sin = Math.sin(mid);\n texts.push(\n label(px(cx + (outer + 8) * sin), px(cy - (outer + 8) * Math.cos(mid)), d.name, {\n part: 'sector-label',\n anchor: sin > 0.1 ? 'start' : sin < -0.1 ? 'end' : 'middle',\n baseline: 'middle',\n }),\n );\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: [...grid, ...sectors, ...texts, ...c.shapes], issues };\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 CHAR,\n colorOf,\n extent,\n gridOn,\n isHidden,\n legendTop,\n MARGIN,\n plotBox,\n size,\n stateCanvas,\n thinTicks,\n} from './frame.js';\nimport { referenceShapes } from './reference.js';\nimport { bandScale, finite, isFinite, px } from './scale.js';\nimport { frameShapes } from './shapes.js';\nimport type { Canvas, ChartDataIssue, Shape, SwarmPlotInput } from './types.js';\n\n/** Per-series dot titles and keyboard stops are emitted up to this many dots. */\nexport const SWARM_TITLE_LIMIT = 2000;\n\n/**\n * Offsets across the category band that keep dots of radius `r` from overlapping: samples come\n * sorted by their pixel position along the value axis; each dot takes the smallest sideways\n * offset (alternating sides, 1px steps) clear of every earlier dot within `2r` of it.\n * ponytail: O(n × offsets) per swarm; fine to a few thousand dots, a grid index beyond.\n */\nexport function swarmOffsets(positions: readonly number[], r: number, half: number): number[] {\n const placed: { p: number; off: number }[] = [];\n const out: number[] = [];\n const d2 = (2 * r) ** 2;\n for (const p of positions) {\n // Only dots close along the value axis can collide; they are the most recent ones.\n const near: { p: number; off: number }[] = [];\n for (let k = placed.length - 1; k >= 0 && p - (placed[k] as { p: number }).p < 2 * r; k--)\n near.push(placed[k] as { p: number; off: number });\n let off = 0;\n for (let step = 0; ; step++) {\n off = step === 0 ? 0 : (step % 2 ? 1 : -1) * Math.ceil(step / 2);\n if (Math.abs(off) > half) {\n // No room left in the band: sit at the edge and accept the overlap.\n off = Math.sign(off) * half;\n break;\n }\n if (near.every((n) => (n.p - p) ** 2 + (n.off - off) ** 2 >= d2)) break;\n }\n placed.push({ p, off });\n out.push(off);\n }\n return out;\n}\n\n/** Every observation as a dot, one swarm per series, spread sideways so none overlap. */\nexport function layoutSwarmPlot(input: SwarmPlotInput): Canvas {\n const issues: ChartDataIssue[] = [];\n for (const s of input.series) {\n const bad = s.data.filter((v) => v !== null && !Number.isFinite(v)).length;\n if (bad)\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `Series \"${s.name}\" has ${bad} value${bad === 1 ? '' : 's'} that ${bad === 1 ? 'is' : 'are'} neither a number nor null; skipped.`,\n itemId: s.id ?? s.name,\n });\n }\n const samples = input.series.map((s) => (isHidden(input, s.name) ? [] : finite(s.data)));\n const state = stateCanvas(\n input,\n samples.every((s) => s.length === 0),\n );\n if (state) return { ...state, issues };\n const format = makeFormatter(input.yAxis?.format ?? input.format);\n const { width, height } = size(input);\n const horizontal = input.orientation === 'horizontal';\n const widest = Math.max(0, ...input.series.map((s) => s.name.length)) * CHAR;\n const plot = plotBox(width, height, {\n ...MARGIN,\n top: MARGIN.top + legendTop(input) + (!horizontal && input.yAxis?.label ? 12 : 0),\n left: horizontal ? Math.max(MARGIN.left, widest + 16) : MARGIN.left,\n bottom: MARGIN.bottom + (horizontal && input.yAxis?.label ? 14 : 0),\n });\n const value = axis(\n extent(samples.flat(), false),\n horizontal ? [plot.x, plot.x + plot.width] : [plot.y + plot.height, plot.y],\n input.yAxis ?? {},\n input.format,\n );\n const band = bandScale(\n input.series.length,\n horizontal ? [plot.y, plot.y + plot.height] : [plot.x, plot.x + plot.width],\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 const categoryTicks = input.series.map((s, i) => ({ pos: px(band.center(i)), label: s.name }));\n const shapes: Shape[] = frameShapes(\n {\n ...c,\n plot,\n xTicks: horizontal ? categoryTicks : thinTicks(categoryTicks, plot.width),\n yTicks: horizontal ? thinTicks(value.ticks, plot.width) : value.ticks,\n baseline: horizontal ? plot.x : plot.y + plot.height,\n },\n {\n horizontal,\n grid: gridOn(input.yAxis),\n ...(horizontal ? { xLabel: input.yAxis?.label } : { yLabel: input.yAxis?.label }),\n },\n );\n shapes.push(\n ...referenceShapes(input.references, {\n plot,\n horizontal,\n x: (v) => {\n const i = input.series.findIndex((s) => s.name === v);\n return i < 0 ? undefined : band.center(i);\n },\n y: (v) => value.scale(v),\n }),\n );\n const r = input.markerSize ?? 3;\n const half = Math.max(0, band.bandwidth / 2 - r);\n const dots: Shape[] = [];\n input.series.forEach((s, si) => {\n const color = colorOf(input, si, s.color);\n const mid = band.center(si);\n // Keep the sample index so the item points back at the observation.\n const sorted = (isHidden(input, s.name) ? [] : s.data)\n .map((v, index) => ({ v, index }))\n .filter((e): e is { v: number; index: number } => isFinite(e.v))\n .sort((a, b) => value.scale(a.v) - value.scale(b.v));\n const offsets = swarmOffsets(\n sorted.map((e) => value.scale(e.v)),\n r,\n half,\n );\n const titled = sorted.length <= SWARM_TITLE_LIMIT;\n sorted.forEach((e, k) => {\n const p = value.scale(e.v);\n const off = offsets[k] as number;\n const title = `${s.name}: ${format(e.v)}`;\n dots.push({\n kind: 'circle',\n part: 'dot',\n cx: px(horizontal ? p : mid + off),\n cy: px(horizontal ? mid + off : p),\n r,\n fill: color,\n title: titled ? title : undefined,\n item: titled\n ? {\n label: title,\n id: s.id ?? s.name,\n series: s.name,\n seriesId: s.id ?? s.name,\n index: e.index,\n value: e.v,\n }\n : undefined,\n });\n });\n });\n return { ...c, shapes: [...shapes, ...dots, ...c.shapes], issues };\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, legendOptions, legendTop, size, stateCanvas } from './frame.js';\nimport { CHART_COLORS } from './palette.js';\nimport { isFinite, px } from './scale.js';\nimport type { Canvas, ChartDataIssue, Shape, WaffleChartInput } from './types.js';\n\nconst PAD = 8;\n\n/**\n * Cells per datum by the largest-remainder method: floors first, then the leftover cells go to the\n * largest fractional parts, so the counts add up to `round(sum(quotas))` exactly.\n */\nexport function waffleCounts(quotas: readonly number[]): number[] {\n const floors = quotas.map((q) => Math.floor(q));\n let left = Math.round(quotas.reduce((s, q) => s + q, 0)) - floors.reduce((s, f) => s + f, 0);\n const order = quotas\n .map((q, i) => ({ i, frac: q - Math.floor(q) }))\n .sort((a, b) => b.frac - a.frac || a.i - b.i);\n for (const { i } of order) {\n if (left <= 0) break;\n (floors[i] as number)++;\n left--;\n }\n return floors;\n}\n\n/** A grid of cells, each a share of the total, colored by datum; empty cells for the unaccounted rest. */\nexport function layoutWaffleChart(input: WaffleChartInput): Canvas {\n const issues: ChartDataIssue[] = [];\n const data = input.data.map((d) => {\n const ok = isFinite(d.value) && d.value >= 0;\n if (!ok)\n issues.push({\n code: isFinite(d.value) ? 'negative-value' : 'invalid-value',\n severity: 'warning',\n message: `\"${d.name}\" has no valid non-negative value and is drawn as zero.`,\n itemId: d.id ?? d.name,\n });\n return { ...d, value: ok ? d.value : 0 };\n });\n const sum = data.reduce((s, d) => s + (isHidden(input, d.name) ? 0 : d.value), 0);\n const state = stateCanvas(input, sum <= 0, 300, 300);\n if (state) return { ...state, issues };\n const format = makeFormatter(input.format);\n const total = isFinite(input.total) && input.total > 0 ? input.total : sum;\n const rows = Math.max(1, Math.round(input.rows ?? 10));\n const columns = Math.max(1, Math.round(input.columns ?? 10));\n const cells = rows * columns;\n const share = (v: number) => (total > 0 ? v / total : 0);\n const counts = waffleCounts(\n data.map((d) => (isHidden(input, d.name) ? 0 : Math.min(1, share(d.value)) * cells)),\n );\n const { width, height } = size(input, 300, 300);\n // `labels` appends the share to each legend entry; the entry still toggles by the datum's name.\n const shares = new Map(data.map((d) => [d.name, `${Math.round(share(d.value) * 100)}%`]));\n const legend = legendOptions(input);\n const legendItems = input.data.map((d, i) => ({\n name: d.name,\n color: colorOf(input, i, d.color),\n }));\n const legendInput =\n input.labels && legend\n ? {\n ...input,\n legend: {\n ...legend,\n formatter: (n: string) => `${legend.formatter?.(n) ?? n} ${shares.get(n) ?? ''}`,\n },\n }\n : input;\n const top = legendTop(legendInput, legendItems, width);\n const gap = Math.max(0, input.cellGap ?? 2);\n const cell = Math.max(1, Math.min((width - 2 * PAD) / columns, (height - top - 2 * PAD) / rows));\n const x0 = (width - cell * columns) / 2;\n const y0 = top + (height - top - cell * rows) / 2;\n const horizontal = input.orientation === 'horizontal';\n // Cell k's corner: columns fill bottom-up from the left, rows fill left-to-right from the top.\n const corner = (k: number) =>\n horizontal\n ? { x: x0 + (k % columns) * cell, y: y0 + Math.floor(k / columns) * cell }\n : { x: x0 + Math.floor(k / rows) * cell, y: y0 + (rows - 1 - (k % rows)) * cell };\n const rect = (\n k: number,\n fill: string,\n title: string,\n item?: Shape['item'],\n opacity?: number,\n ): Shape => {\n const { x, y } = corner(k);\n return {\n kind: 'rect',\n part: 'cell',\n x: px(x + gap / 2),\n y: px(y + gap / 2),\n width: px(Math.max(0.5, cell - gap)),\n height: px(Math.max(0.5, cell - gap)),\n fill,\n opacity,\n rx: input.cellRadius ?? 2,\n title,\n item,\n };\n };\n const shapes: Shape[] = [];\n let k = 0;\n data.forEach((d, i) => {\n const n = counts[i] as number;\n const title = `${d.name}: ${format(d.value)} (${Math.round(share(d.value) * 100)}%)`;\n const item = { label: title, id: d.id ?? d.name, name: d.name, index: i, value: d.value };\n for (let m = 0; m < n && k < cells; m++, k++)\n shapes.push(rect(k, colorOf(input, i, d.color), title, item));\n });\n const rest = total - sum;\n const restTitle =\n rest > 0 ? `Other: ${format(rest)} (${Math.round(share(rest) * 100)}%)` : 'Empty';\n for (; k < cells; k++) shapes.push(rect(k, CHART_COLORS.grid, restTitle, undefined, 0.6));\n const c = canvas(legendInput, width, height, legendItems);\n return { ...c, shapes: [...shapes, ...c.shapes], issues };\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 { layoutGaugeChart } from './gauge.js';\nexport { layoutBubbleChart } from './bubble.js';\nexport { layoutHistogram } from './histogram.js';\nexport { layoutBulletChart } from './bullet.js';\nexport { layoutComboChart } from './combo.js';\nexport { layoutRangeChart } from './range.js';\nexport { layoutNetworkChart, NETWORK_LABEL_LIMIT } from './network.js';\nexport { layoutTimelineChart } from './timeline.js';\nexport { binEdges, binSamples, type Bin, type BinOptions } from './bins.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 boxFrom,\n brushBoxShape,\n brushDrag,\n brushGrab,\n crosshairAt,\n crosshairLine,\n crosshairRows,\n crosshairShapes,\n ganttDrag,\n ganttGhost,\n ganttGrab,\n ganttKey,\n hoveredRef,\n insidePolygon,\n itemsInBox,\n itemsInPolygon,\n lassoShape,\n mapPan,\n mapWheel,\n pointerTooltipText,\n type GanttGrab,\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 {\n csv,\n defsMarkup,\n exportChart,\n seriesCsv,\n shapeMarkup,\n svgMarkup,\n svgToPng,\n type ChartExportOptions,\n} from './export.js';\nexport {\n emphasize,\n isSelected,\n itemId,\n matchesItem,\n refOf,\n sameRef,\n selectedIds,\n toggleSelection,\n toRefs,\n} from './identity.js';\nexport {\n colorLegendShapes,\n makeColorScale,\n mixStops,\n parseColor,\n type ResolvedColorScale,\n} from './colors.js';\nexport {\n aggregate,\n applyTransforms,\n binCounts,\n cumulative,\n difference,\n exponentialMovingAverage,\n filter,\n movingAverage,\n normalize,\n percentageChange,\n rank,\n sortValues,\n} from './transforms.js';\nexport {\n lttb,\n m4,\n minMaxSample,\n sampleIndexes,\n samplingOptions,\n SAMPLING_THRESHOLD,\n} from './sampling.js';\nexport {\n cutDepth,\n depthOf,\n drill,\n findPath,\n nodeId,\n nodeValue,\n sortChildren,\n} from './hierarchy.js';\nexport { tableRows, TABLE_LIMIT } from './table.js';\nexport { syncGroup, type SyncGroup, type SyncListener, type SyncState } from './sync.js';\nexport { annotationShapes, referenceShapes } from './reference.js';\nexport { legendOptions, placeLegend, tooltipOptions } from './frame.js';\nexport { translatePath, translateShapes } from './geometry.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';\nexport { layoutMarimekkoChart } from './marimekko.js';\nexport { layoutParallelCoordinates, PARALLEL_TITLE_LIMIT } from './parallel.js';\nexport { layoutLinearGauge } from './linearGauge.js';\nexport { layoutDumbbellChart } from './dumbbell.js';\nexport { layoutParetoChart } from './pareto.js';\nexport { layoutOrganizationChart, layoutTreeChart } from './tree.js';\nexport { layoutCirclePacking, packCircles } from './circlePacking.js';\nexport { layoutIcicle } from './icicle.js';\nexport { layoutBumpChart } from './bump.js';\nexport { layoutPolarAreaChart } from './polarArea.js';\nexport { layoutSwarmPlot, SWARM_TITLE_LIMIT, swarmOffsets } from './swarm.js';\nexport { layoutWaffleChart, waffleCounts } from './waffle.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 [attr.opacity]=\"s.opacity\"\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 [attr.pointer-events]=\"s.item ? null : 'none'\"\n [attr.transform]=\"s.rotate ? 'rotate(' + s.rotate + ' ' + s.x + ' ' + s.y + ')' : null\"\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 effect,\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 boxFrom,\n brushBoxShape,\n brushDrag,\n brushGrab,\n CHART_COLORS,\n crosshairAt,\n crosshairRows,\n emphasize,\n exportChart,\n focusShapes,\n focusTargets,\n ganttDrag,\n ganttGhost,\n ganttGrab,\n ganttKey,\n hoveredRef,\n itemAt,\n itemsInBox,\n itemsInPolygon,\n lassoShape,\n mapPan,\n mapWheel,\n matchesItem,\n nextFocus,\n placeLegend,\n pointerShapes,\n pointerTooltipText,\n refOf,\n sameRef,\n syncGroup,\n tableRows,\n toggleSelection,\n toViewBox,\n zoomPan,\n zoomPinch,\n zoomWheel,\n type AccessibleTableOptions,\n type Annotation,\n type AxisOptions,\n type BrushGrab,\n type Canvas,\n type CartesianSeries,\n type Category,\n type ChartDataIssue,\n type ChartExportOptions,\n type ChartItem,\n type ChartItemRef,\n type Curve,\n type Format,\n type GanttGrab,\n type HighlightScope,\n type LegendOptions,\n type MapView,\n type RangeSeries,\n type Reference,\n type ResponsiveOptions,\n type Sampling,\n type Selection,\n type SeriesTransform,\n type Shape,\n type Sized,\n type SyncState,\n type TaskChange,\n type TooltipOptions,\n type XAxisOptions,\n type Zoom,\n} from './core/index.js';\nimport { SkdxChartShapesComponent } from './shapes.component';\n\n/** How clicks (and, for `brush`/`lasso`, drags) change the selection. */\nexport type SelectionMode = 'none' | 'single' | 'multiple' | 'brush' | 'lasso';\n\ninterface Drag {\n x: number;\n y: number;\n zoom: Zoom;\n grab: BrushGrab | 'pan' | 'pinch' | 'select' | 'lasso' | 'edit' | 'map';\n /** Finger distance when a pinch began. */\n distance?: number;\n points?: { x: number; y: number }[];\n gantt?: GanttGrab;\n change?: TaskChange;\n view?: { center: [number, number]; zoom: 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, zoom, view, selection, highlight\n * and task changes to the chart, which applies them through its models.\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() || canPan() ? 'grab' : brushing() ? 'crosshair' : null\"\n [style.touch-action]=\"active() ? 'none' : null\"\n [style.--skdx-chart-duration]=\"duration()\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerleave)=\"onPointerLeave()\"\n (pointerdown)=\"onPointerDown($event)\"\n (pointerup)=\"onPointerUp($event)\"\n (pointercancel)=\"onPointerUp($event)\"\n (wheel)=\"onWheel($event)\"\n (dblclick)=\"onDoubleClick()\"\n (click)=\"onClick($event)\"\n (keydown)=\"onKeyDown($event)\"\n (blur)=\"onBlur()\"\n >\n <title>{{ label() }}</title>\n @if (layout().description) {\n <svg:desc [attr.id]=\"descId()\">{{ layout().description }}</svg:desc>\n }\n @if (layout().defs?.length) {\n <svg:defs>\n @for (g of layout().defs; track g.id) {\n <svg:linearGradient\n [attr.id]=\"g.id\"\n x1=\"0\"\n y1=\"0\"\n [attr.x2]=\"g.vertical === false ? 1 : 0\"\n [attr.y2]=\"g.vertical === false ? 0 : 1\"\n >\n @for (st of g.stops; track $index) {\n <svg:stop\n [attr.offset]=\"st.offset\"\n [attr.stop-color]=\"st.color\"\n [attr.stop-opacity]=\"st.opacity\"\n ></svg:stop>\n }\n </svg:linearGradient>\n }\n </svg:defs>\n }\n <svg:g\n skdxChartShapes\n [shapes]=\"layout().shapes\"\n ></svg:g>\n <svg:g\n skdxChartShapes\n [shapes]=\"tipShapes()\"\n ></svg:g>\n <svg:g\n skdxChartShapes\n [shapes]=\"focusShapes()\"\n ></svg:g>\n <svg:g\n skdxChartShapes\n [shapes]=\"overlay()\"\n ></svg:g>\n </svg>\n @if (portal(); as p) {\n <div\n role=\"tooltip\"\n [attr.data-skdx-tooltip]=\"kind()\"\n [style.left.px]=\"p.x + 12\"\n [style.top.px]=\"p.y + 12\"\n style=\"position:fixed;pointer-events:none;z-index:1000;background:var(--skdx-color-surface-raised);color:var(--skdx-color-text-default);border:1px solid var(--skdx-color-border-strong);border-radius:3px;padding:4px 8px;font-family:var(--skdx-font-family);font-size:var(--skdx-font-size-xs);white-space:nowrap\"\n >\n @for (line of p.lines; track $index) {\n <div [style.font-weight]=\"$index === 0 && p.lines.length > 1 ? 'bold' : null\">\n {{ line }}\n </div>\n }\n </div>\n }\n @if (table(); as rows) {\n <table\n [attr.data-skdx-table]=\"kind()\"\n style=\"position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0\"\n >\n <caption>\n {{\n caption()\n }}\n </caption>\n <thead>\n <tr>\n @for (h of rows[0] ?? []; track $index) {\n <th scope=\"col\">{{ h }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of rows.slice(1); track $index) {\n <tr>\n @for (cell of row; track $index) {\n @if ($index === 0) {\n <th scope=\"row\">{{ cell }}</th>\n } @else {\n <td>{{ cell }}</td>\n }\n }\n </tr>\n }\n </tbody>\n </table>\n }\n `,\n})\nexport class SkdxChartRootComponent {\n /** The chart's layout, before selection and highlight emphasis. */\n readonly layoutInput = input.required<Canvas>({ alias: 'layout' });\n /** The shared options, for emphasis and the accessible table. */\n readonly options = input<Sized>({});\n readonly kind = input.required<string>();\n readonly label = input.required<string>();\n /** Wheel and pinch zoom, drag pans the category axis (or the map). */\n readonly zoomable = input(false);\n /** Clicks select marks: one, any number, a dragged rectangle or a drawn outline. */\n readonly selectionMode = input<SelectionMode>('none');\n /** Gantt bars can be dragged and resized. */\n readonly editable = input(false);\n /** Charts sharing a `syncId` share highlight, selection, zoom, hidden series and the crosshair. */\n readonly syncId = input<string>();\n /** The category another chart of the group has its crosshair on. */\n readonly crosshair = input<string | null>(null);\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 map was panned or zoomed; the chart applies it through its `view` model. */\n readonly viewChange = output<MapView | undefined>();\n /** A click or brush changed the selection; the chart applies it through its `selected` model. */\n readonly selectedChange = output<ChartItemRef[]>();\n /** The mark under the pointer or focus changed. */\n readonly highlightedChange = output<ChartItemRef | null>();\n /** A data problem was found while laying out. */\n readonly dataIssue = output<ChartDataIssue>();\n /** A Gantt bar was dragged or resized. */\n readonly taskChange = output<TaskChange>();\n /** Another chart in the sync group published a change; the chart applies it through its models. */\n readonly syncChange = output<SyncState>();\n /** The host's measured width, under `responsive`. */\n readonly measured = output<number>();\n\n protected readonly colors = CHART_COLORS;\n protected readonly layout = computed(() =>\n emphasize(placeLegend(this.layoutInput()), this.options()),\n );\n protected readonly duration = computed(() => animationDuration(this.layout()) ?? null);\n protected readonly table = computed(() =>\n tableRows(this.layout(), this.options().accessibleTable),\n );\n protected readonly caption = computed(() => {\n const opt = this.options().accessibleTable;\n return (typeof opt === 'object' && opt.caption) || this.label();\n });\n private readonly pointers = new Map<number, number>();\n private readonly svg = viewChild.required<ElementRef<SVGSVGElement>>('svg');\n private hover: ChartItemRef | null = null;\n private readonly token = {};\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 effect(() => {\n for (const issue of this.layout().issues ?? []) this.dataIssue.emit(issue);\n });\n // Chart coordination: apply what the other members of the group publish.\n effect((onCleanup) => {\n const id = this.syncId();\n if (!id) return;\n const group = syncGroup(id);\n this.syncChange.emit(group.current);\n onCleanup(\n group.subscribe((state, source) => {\n if (source !== this.token) this.syncChange.emit(state);\n }),\n );\n });\n }\n protected readonly tip = signal<Shape[]>([]);\n protected readonly tipShapes = computed(() => {\n const own = this.tip();\n const cross = this.crosshair();\n return own.length || !cross ? own : crosshairAt(this.layout(), cross);\n });\n private lastCross: string | null = null;\n protected readonly portal = signal<{ x: number; y: number; lines: string[] } | null>(null);\n protected readonly focused = signal<number | null>(null);\n protected readonly overlay = signal<Shape[]>([]);\n protected readonly canZoom = computed(() => {\n const hit = this.layout().hit;\n return Boolean(hit && (this.zoomable() || hit.brush));\n });\n protected readonly canPan = computed(() => Boolean(this.layout().map && this.zoomable()));\n protected readonly canEdit = computed(() => Boolean(this.editable() && this.layout().edit));\n protected readonly brushing = computed(\n () => this.selectionMode() === 'brush' || this.selectionMode() === 'lasso',\n );\n protected readonly active = computed(\n () => this.canZoom() || this.canPan() || this.canEdit() || this.brushing(),\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 /** The rendered `<svg>`. */\n getSvgElement(): SVGSVGElement {\n return this.svg().nativeElement;\n }\n\n /** The current layout: shapes, size, hit model. */\n getLayout(): Canvas {\n return this.layout();\n }\n\n /** Moves keyboard focus to the first mark matching the ref; `false` when none matches. */\n focusItem(ref: ChartItemRef): boolean {\n const i = this.layout().shapes.findIndex(\n (s) => s.item && !s.item.legend && matchesItem(s.item, ref),\n );\n if (i < 0) return false;\n this.svg().nativeElement.focus();\n this.focused.set(i);\n return true;\n }\n\n /** SVG markup, a PNG blob, or CSV, through the core's `exportChart`. */\n export(options: Omit<ChartExportOptions, 'label'> & { label?: string }): Promise<string | Blob> {\n return exportChart(this.layout(), {\n ...options,\n label: options.label ?? this.label(),\n } as ChartExportOptions);\n }\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 private publish(state: SyncState) {\n const id = this.syncId();\n if (id) syncGroup(id).publish(state, this.token);\n }\n\n private setZoom(next: Zoom | undefined) {\n this.zoomChange.emit(next);\n this.publish({ zoom: next });\n }\n\n private setSelected(next: ChartItemRef[]) {\n this.selectedChange.emit(next);\n this.publish({ selected: next });\n }\n\n private highlight(next: ChartItemRef | null) {\n const prev = this.hover;\n if (prev === next || (prev && next && sameRef(prev, next))) return;\n this.hover = next;\n this.highlightedChange.emit(next);\n this.publish({ highlighted: next });\n }\n\n private select(item: ChartItem) {\n const mode = this.selectionMode();\n if (mode === 'none') return;\n this.setSelected(\n toggleSelection(this.options().selected, item, mode === 'single' ? 'single' : 'multiple'),\n );\n }\n\n private shareCrosshair(category: string | null) {\n if (!this.syncId() || this.lastCross === category) return;\n this.lastCross = category;\n this.publish({ crosshair: category });\n }\n\n private clearTip() {\n this.tip.set([]);\n this.portal.set(null);\n this.shareCrosshair(null);\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 const d = this.drag;\n if (d?.grab === 'select') {\n const { x, y } = this.viewBox(e);\n this.overlay.set([brushBoxShape(boxFrom(d.x, d.y, x, y))]);\n return;\n }\n if (d?.grab === 'lasso') {\n const { x, y } = this.viewBox(e);\n d.points = [...(d.points ?? []), { x, y }];\n this.overlay.set([lassoShape(d.points)]);\n return;\n }\n if (d?.grab === 'edit') {\n if (!d.gantt) return;\n const { x } = this.viewBox(e);\n d.change = ganttDrag(layout, d.gantt, x - d.x);\n this.overlay.set([ganttGhost(layout, d.gantt, d.change)]);\n return;\n }\n if (d?.grab === 'map') {\n if (!layout.map || !d.view) return;\n const { x, y } = this.viewBox(e);\n this.viewChange.emit(mapPan(layout.map, d.view, x - d.x, y - d.y));\n return;\n }\n if (d && layout.hit) {\n if (d.grab === 'pinch') {\n const [a, b] = [...this.pointers.values()];\n if (a === undefined || b === undefined || !d.distance) return;\n this.setZoom(zoomPinch(layout.hit, d.zoom, Math.abs(a - b) / d.distance, (a + b) / 2));\n return;\n }\n const { x } = this.viewBox(e);\n this.setZoom(\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) {\n if (layout.tooltipPortal) {\n const { lines, shapes } = pointerTooltipText(\n layout,\n e.target,\n e.currentTarget as Element,\n e.clientX,\n e.clientY,\n );\n this.tip.set(shapes);\n this.portal.set(lines.length ? { x: e.clientX, y: e.clientY, lines } : null);\n } else {\n const next = pointerShapes(\n layout,\n e.target,\n e.currentTarget as Element,\n e.clientX,\n e.clientY,\n );\n if (next.length > 0 || this.tip().length > 0) this.tip.set(next);\n }\n }\n this.highlight(hoveredRef(layout, e.target));\n if (this.syncId() && layout.hit?.crosshair) {\n const found = crosshairRows(layout, this.viewBox(e).x);\n this.shareCrosshair(found ? (layout.hit.rows[found.index]?.[0] ?? null) : null);\n }\n }\n\n protected onPointerLeave(): void {\n this.clearTip();\n this.highlight(null);\n }\n\n protected onBlur(): void {\n this.focused.set(null);\n this.highlight(null);\n }\n\n protected onDoubleClick(): void {\n if (this.canPan()) this.viewChange.emit(undefined);\n else if (this.canZoom()) this.setZoom(undefined);\n }\n\n protected onPointerDown(e: PointerEvent): void {\n if (e.button !== 0) return;\n const layout = this.layout();\n const { x, y } = this.viewBox(e);\n const legend = itemAt(layout, e.target)?.item.legend;\n const grabbed = this.canEdit() ? ganttGrab(layout, x, y) : undefined;\n if (grabbed) {\n this.drag = { x, y, zoom: { start: 0, end: 0 }, grab: 'edit', gantt: grabbed };\n (e.currentTarget as Element).setPointerCapture(e.pointerId);\n this.clearTip();\n return;\n }\n if (this.brushing() && !legend) {\n this.drag = {\n x,\n y,\n zoom: { start: 0, end: 0 },\n grab: this.selectionMode() === 'lasso' ? 'lasso' : 'select',\n points: [{ x, y }],\n };\n (e.currentTarget as Element).setPointerCapture(e.pointerId);\n this.clearTip();\n return;\n }\n if (this.canPan() && layout.map) {\n const p = layout.map.plot;\n if (x < p.x || x > p.x + p.width || y < p.y || y > p.y + p.height) return;\n this.drag = { x, y, zoom: { start: 0, end: 0 }, grab: 'map', view: layout.map.view };\n (e.currentTarget as Element).setPointerCapture(e.pointerId);\n this.clearTip();\n return;\n }\n const hit = layout.hit;\n if (!hit || !this.canZoom()) return;\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 = {\n x: (a + b) / 2,\n y,\n zoom: hit.zoom,\n grab: 'pinch',\n distance: Math.abs(a - b) || 1,\n };\n } else {\n const strip = brushGrab(hit, x, y);\n if (strip) {\n this.drag = { x, y, zoom: strip.zoom, grab: strip.grab };\n if (strip.zoom !== hit.zoom) this.setZoom(strip.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, y, 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.clearTip();\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 const d = this.drag;\n if (d?.grab === 'select' || d?.grab === 'lasso' || d?.grab === 'edit' || d?.grab === 'map') {\n this.overlay.set([]);\n const { x, y } = this.viewBox(e);\n const moved = Math.abs(x - d.x) > 2 || Math.abs(y - d.y) > 2;\n if (moved) {\n if (d.grab === 'select')\n this.setSelected(itemsInBox(this.layout(), boxFrom(d.x, d.y, x, y)));\n else if (d.grab === 'lasso')\n this.setSelected(itemsInPolygon(this.layout(), d.points ?? []));\n else if (d.grab === 'edit' && d.change) this.taskChange.emit(d.change);\n // The click that ends the drag must not toggle a mark.\n this.drag = { ...d, distance: -1 };\n return;\n }\n this.drag = null;\n return;\n }\n if (this.pointers.size === 0 || this.drag?.grab === 'pinch') this.drag = null;\n }\n\n protected onWheel(e: WheelEvent): void {\n const layout = this.layout();\n const { x, y } = this.viewBox(e);\n if (layout.map && this.canPan()) {\n const p = layout.map.plot;\n if (x < p.x || x > p.x + p.width || y < p.y || y > p.y + p.height) return;\n e.preventDefault();\n this.viewChange.emit(mapWheel(layout.map, e.deltaY, x, y));\n return;\n }\n const hit = layout.hit;\n if (!hit || !this.canZoom()) return;\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.setZoom(next);\n }\n\n protected onClick(e: MouseEvent): void {\n if (this.drag?.distance === -1) {\n this.drag = null;\n return;\n }\n const hit = itemAt(this.layout(), e.target);\n if (!hit) return;\n if (hit.item.range) this.setZoom(hit.item.range);\n else if (hit.item.legend && hit.item.series !== undefined) {\n this.hiddenSeriesChange.emit([hit.item.series]);\n } else {\n this.select(hit.item);\n this.itemClick.emit(hit.item);\n }\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.select(item);\n this.itemClick.emit(item);\n }\n return;\n }\n const change = this.canEdit() ? ganttKey(this.layout(), focused, e) : undefined;\n if (change) {\n e.preventDefault();\n this.taskChange.emit(change);\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 const item = next === null ? undefined : this.layout().shapes[next]?.item;\n this.highlight(item ? refOf(item) : null);\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; an object sets position, interactivity and item limit. */\n readonly legend = input<boolean | LegendOptions>(false);\n /** Show a hover tooltip for the mark under the pointer; an object configures it. */\n readonly tooltip = input<boolean | TooltipOptions>(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 /** Selected items; two-way bindable, clicks update it under `selectionMode`. */\n readonly selected = model<Selection | undefined>(undefined);\n /** Clicks select marks: one, any number, a dragged rectangle or a drawn outline. */\n readonly selectionMode = input<SelectionMode>('none');\n /** The item(s) under emphasis; two-way bindable, hover and focus update it. */\n readonly highlighted = model<Sized['highlighted']>(undefined);\n readonly highlightScope = input<HighlightScope>();\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 /** Render a visually hidden data table next to the svg. */\n readonly accessibleTable = input<boolean | AccessibleTableOptions>(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; an object adds `compact` overrides. */\n readonly responsive = input<boolean | ResponsiveOptions>(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 /** The map's pan/zoom state; two-way bindable, wheel and drag update it. */\n readonly view = model<MapView | undefined>(undefined);\n /** Wheel zooms and drag pans the category axis (or the map). */\n readonly zoomable = input(false);\n /** Gantt bars can be dragged and resized; listen to `(taskChange)`. */\n readonly editable = input(false);\n /** Charts sharing a `syncId` share highlight, selection, zoom, hidden series and the crosshair. */\n readonly syncId = input<string>();\n /** With `syncId`: a selection made in another chart of the group fades everything else here. */\n readonly crossFilter = input(false);\n /** The category another chart of the group has its crosshair on. */\n protected readonly syncedCrosshair = signal<string | null>(null);\n /** A mark was clicked, or Enter/Space was pressed on the focused mark. */\n readonly itemClick = output<ChartItem>();\n /** A data problem was found while laying out. */\n readonly dataIssue = output<ChartDataIssue>();\n /** A Gantt bar was dragged or resized. */\n readonly taskChange = output<TaskChange>();\n /** The root component, for the imperative surface. */\n protected readonly chartRoot = viewChild(SkdxChartRootComponent);\n /** Highlight received from the sync group, used while `highlighted` is not set. */\n protected readonly syncedHighlight = signal<Sized['highlighted']>(null);\n /** The shared options as one memoized object, so the root's input only changes when they do. */\n protected readonly options = computed(() => this.sized());\n\n /** The rendered `<svg>`, or `null` before the first render. */\n getSvgElement(): SVGSVGElement | null {\n return this.chartRoot()?.getSvgElement() ?? null;\n }\n\n /** The current layout: shapes, size, hit model. */\n getLayout(): Canvas | undefined {\n return this.chartRoot()?.getLayout();\n }\n\n resetZoom(): void {\n this.zoom.set(undefined);\n }\n\n zoomTo(zoom: Zoom): void {\n this.zoom.set(zoom);\n }\n\n /** Moves keyboard focus to the first mark matching the ref; `false` when none matches. */\n focusItem(ref: ChartItemRef): boolean {\n return this.chartRoot()?.focusItem(ref) ?? false;\n }\n\n /** SVG markup, a PNG blob, or CSV, through the core's `exportChart`. */\n export(options: Omit<ChartExportOptions, 'label'> & { label?: string }): Promise<string | Blob> {\n const root = this.chartRoot();\n return root ? root.export(options) : Promise.reject(new Error('not rendered yet'));\n }\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 /** Applies what another chart in the sync group published. */\n protected sync(state: SyncState): void {\n if ('highlighted' in state) this.syncedHighlight.set(state.highlighted ?? null);\n if (state.selected) {\n this.selected.set(state.selected);\n if (this.crossFilter())\n this.syncedHighlight.set(state.selected.length ? state.selected : null);\n }\n if ('zoom' in state) this.zoom.set(state.zoom);\n if (state.hiddenSeries) this.hiddenSeries.set(state.hiddenSeries);\n if ('crosshair' in state) this.syncedCrosshair.set(state.crosshair ?? null);\n }\n\n protected sized() {\n const own = this.highlighted();\n const responsive = this.responsive();\n const measured = this.measuredWidth();\n // Below the breakpoint the `compact` overrides replace the matching inputs.\n const compact =\n typeof responsive === 'object' &&\n measured !== undefined &&\n measured < (responsive.breakpoint ?? 480)\n ? responsive.compact\n : undefined;\n return {\n ...compact,\n width: responsive && measured ? measured : 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 selected: this.selected(),\n highlighted: own === undefined ? this.syncedHighlight() : own,\n highlightScope: this.highlightScope(),\n loading: this.loading(),\n error: this.error(),\n emptyMessage: this.emptyMessage(),\n description: this.description(),\n decorative: this.decorative(),\n accessibleTable: this.accessibleTable(),\n zoom: this.zoom(),\n view: this.view(),\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 /** Points, callouts, text and rectangles in data coordinates. */\n readonly annotations = input<Annotation[]>();\n /** Write each value next to its mark. */\n readonly labels = input(false);\n readonly curve = input<Curve>();\n readonly connectNulls = input(false);\n /** What a null does to a line: a gap, a bridge, or a zero. */\n readonly nulls = input<'gap' | 'connect' | 'zero'>();\n /** Stack the series; `'percent'` normalizes each category to 100%. */\n readonly stacked = input<boolean | 'percent'>(false);\n /** Where stacks stand: zero, expand (100%), silhouette or wiggle (streamgraph). */\n readonly stackOffset = input<'zero' | 'expand' | 'silhouette' | 'wiggle'>();\n readonly orientation = input<'vertical' | 'horizontal'>();\n /** Corner radius of bars. */\n readonly radius = input<number>();\n /** Share of each category slot left empty around its bars, 0–0.9. */\n readonly barGap = input<number>();\n /** Largest bar thickness in pixels. */\n readonly barWidth = input<number>();\n readonly sort = input<'asc' | 'desc'>();\n readonly transform = input<'histogram' | 'cumulative'>();\n /** Transforms applied to every series, in order. */\n readonly transforms = input<SeriesTransform[]>();\n readonly bins = input<number>();\n readonly binWidth = input<number>();\n readonly binDomain = input<[number, number]>();\n readonly binMode = input<'count' | 'density' | 'cumulative'>();\n /** Point reduction for dense series. */\n readonly sampling = input<Sampling>();\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 annotations: this.annotations(),\n labels: this.labels(),\n curve: this.curve(),\n connectNulls: this.connectNulls(),\n nulls: this.nulls(),\n stacked: this.stacked(),\n stackOffset: this.stackOffset(),\n orientation: this.orientation(),\n radius: this.radius(),\n barGap: this.barGap(),\n barWidth: this.barWidth(),\n sort: this.sort(),\n transform: this.transform(),\n transforms: this.transforms(),\n bins: this.bins(),\n binWidth: this.binWidth(),\n binDomain: this.binDomain(),\n binMode: this.binMode(),\n sampling: this.sampling(),\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","point","BRUSH_HEIGHT","BRUSH_GAP","clampZoom","TAU","PAD","rad"],"mappings":"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"}
1
+ {"version":3,"file":"skdx-angular-charts-internal.mjs","sources":["../../src/internal/core/format.ts","../../src/internal/core/scale.ts","../../src/internal/core/bins.ts","../../src/internal/core/geometry.ts","../../src/internal/core/palette.ts","../../src/internal/core/frame.ts","../../src/internal/core/shapes.ts","../../src/internal/core/reference.ts","../../src/internal/core/sampling.ts","../../src/internal/core/colors.ts","../../src/internal/core/scatter.ts","../../src/internal/core/transforms.ts","../../src/internal/core/cartesian.ts","../../src/internal/core/bar.ts","../../src/internal/core/line.ts","../../src/internal/core/identity.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/gauge.ts","../../src/internal/core/bubble.ts","../../src/internal/core/histogram.ts","../../src/internal/core/bullet.ts","../../src/internal/core/combo.ts","../../src/internal/core/range.ts","../../src/internal/core/network.ts","../../src/internal/core/timeline.ts","../../src/internal/core/surface.ts","../../src/internal/core/interact.ts","../../src/internal/core/export.ts","../../src/internal/core/hierarchy.ts","../../src/internal/core/table.ts","../../src/internal/core/sync.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/marimekko.ts","../../src/internal/core/parallel.ts","../../src/internal/core/linearGauge.ts","../../src/internal/core/dumbbell.ts","../../src/internal/core/pareto.ts","../../src/internal/core/tree.ts","../../src/internal/core/circlePacking.ts","../../src/internal/core/icicle.ts","../../src/internal/core/bump.ts","../../src/internal/core/polarArea.ts","../../src/internal/core/swarm.ts","../../src/internal/core/waffle.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 = '', timeZone } = 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, timeZone ? { ...options, timeZone } : 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/**\n * A category as a number, for positioning on numeric axes (Gantt, scatter references). Strings\n * parse as numbers, else as dates (`2026-03-01`, `2026-03-01T12:00Z`), else `NaN`.\n */\nexport const categoryValue = (c: Category): number => {\n if (c instanceof Date) return c.getTime();\n if (typeof c === 'number') return c;\n const n = Number(c);\n return Number.isFinite(n) && c.trim() !== '' ? n : Date.parse(c);\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 { 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]`; `padding` is the gap share of each slot. */\nexport function bandScale(count: number, [r0, r1]: readonly [number, number], padding = 0.2) {\n const step = count === 0 ? 0 : (r1 - r0) / count;\n const bandwidth = step * (1 - Math.max(0, Math.min(0.9, padding)));\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 // `smooth` is the friendlier name for the monotone cubic.\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 { finite, minMax } from './scale.js';\nimport type { Value } from './types.js';\n\nexport interface BinOptions {\n /** Bin count. @default Sturges' rule, `ceil(log2(n) + 1)` */\n bins?: number | undefined;\n /** Bin width; wins over `bins`. */\n binWidth?: number | undefined;\n /** Value range covered; samples outside are dropped. @default the sample extent */\n domain?: [number, number] | undefined;\n /** Explicit, ascending bin edges; wins over everything else and allows unequal widths. */\n thresholds?: number[] | undefined;\n}\n\nexport interface Bin {\n /** Inclusive lower edge. */\n x0: number;\n /** Exclusive upper edge (inclusive for the last bin). */\n x1: number;\n count: number;\n}\n\n/**\n * Ascending bin edges for a sample: explicit `thresholds`, else equal widths from `binWidth`\n * or `bins` over `domain`. Deterministic: the same options always yield the same edges.\n */\nexport function binEdges(samples: readonly number[], options: BinOptions = {}): number[] {\n if (options.thresholds && options.thresholds.length >= 2)\n return [...options.thresholds].filter(Number.isFinite).sort((a, b) => a - b);\n const [lo, hi] = options.domain ?? minMax(samples);\n const n = Math.max(1, samples.length);\n const bins = Math.max(1, options.bins ?? Math.ceil(Math.log2(n) + 1));\n const width = options.binWidth ?? (hi > lo ? (hi - lo) / bins : 1);\n const count = hi > lo ? Math.max(1, Math.ceil((hi - lo) / width - 1e-9)) : 1;\n // Rounded so `12 + 5 × 6.6` reads as 45, not 45.000000000000004.\n return Array.from({ length: count + 1 }, (_, i) => Number((lo + i * width).toPrecision(12)));\n}\n\n/** Counts the finite samples into the bins between consecutive `edges`. */\nexport function binSamples(\n values: readonly (Value | undefined)[],\n edges: readonly number[],\n): Bin[] {\n const bins: Bin[] = [];\n for (let i = 0; i + 1 < edges.length; i++)\n bins.push({ x0: edges[i] as number, x1: edges[i + 1] as number, count: 0 });\n if (bins.length === 0) return bins;\n const lo = edges[0] as number;\n const hi = edges[edges.length - 1] as number;\n for (const v of finite(values)) {\n if (v < lo || v > hi) continue;\n // Binary search for the last edge <= v; the top edge closes the last bin.\n let a = 0;\n let b = bins.length - 1;\n while (a < b) {\n const m = (a + b + 1) >> 1;\n if ((bins[m] as Bin).x0 <= v) a = m;\n else b = m - 1;\n }\n (bins[a] as Bin).count++;\n }\n return bins;\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 { Shape } from './types.js';\n\nconst NUMBER = /-?\\d*\\.?\\d+(?:e[-+]?\\d+)?/gi;\nconst COMMAND = /([MLTHVCSQAZmlthvcsqaz])([^MLTHVCSQAZmlthvcsqaz]*)/g;\n\n/** How many coordinates each absolute command takes per repeat; `-1` is \"x only\", `-2` \"y only\". */\nconst ARITY: Record<string, number> = { M: 2, L: 2, T: 2, C: 6, S: 4, Q: 4, A: 7, H: -1, V: -2 };\n\n/**\n * A path moved by `(dx, dy)`: absolute commands are translated (for `A`, only the end point),\n * relative (lowercase) commands are left as they are, `Z` has nothing to move.\n */\nexport function translatePath(d: string, dx: number, dy: number): string {\n return d.replace(COMMAND, (_, cmd: string, args: string) => {\n const arity = ARITY[cmd];\n if (arity === undefined) return cmd + args;\n const nums = args.match(NUMBER) ?? [];\n const out = nums.map((n, i) => {\n const v = Number(n);\n if (arity === -1) return String(v + dx);\n if (arity === -2) return String(v + dy);\n const k = i % arity;\n if (arity === 7) return k === 5 ? String(v + dx) : k === 6 ? String(v + dy) : n;\n return String(k % 2 === 0 ? v + dx : v + dy);\n });\n return cmd + out.join(' ');\n });\n}\n\n/** Every shape moved by `(dx, dy)`. */\nexport const translateShapes = (shapes: readonly Shape[], dx: number, dy: number): Shape[] =>\n shapes.map((s): Shape => {\n switch (s.kind) {\n case 'rect':\n return { ...s, x: s.x + dx, y: s.y + dy };\n case 'circle':\n return { ...s, cx: s.cx + dx, cy: s.cy + dy };\n case 'line':\n return { ...s, x1: s.x1 + dx, x2: s.x2 + dx, y1: s.y1 + dy, y2: s.y2 + dy };\n case 'text':\n return { ...s, x: s.x + dx, y: s.y + dy };\n case 'path':\n return { ...s, d: translatePath(s.d, dx, dy) };\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 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\n/**\n * Semantic color for text: the line and band colors are mid-scale fills that fall under 2:1 on\n * text, so labels use the theme's readable text token for the same meaning.\n */\nexport const variantTextColor = (variant: Variant = 'neutral'): string =>\n variant === 'neutral'\n ? CHART_COLORS.label\n : variant === 'primary'\n ? 'var(--skdx-color-text-accent)'\n : `var(--skdx-color-text-${variant})`;\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 { makeFormatter } from './format.js';\nimport { translateShapes } from './geometry.js';\nimport { CHART_COLORS, seriesColor } from './palette.js';\nimport { linearScale, logTicks, minMax, niceTicks, px } from './scale.js';\nimport type {\n AxisOptions,\n Box,\n Canvas,\n ChartItem,\n Format,\n LegendItem,\n LegendOptions,\n Shape,\n Sized,\n Tick,\n TooltipOptions,\n} 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\n/** The legend options of an input; `undefined` when there is no legend. */\nexport function legendOptions(input: Sized): LegendOptions | undefined {\n const l = input.legend;\n if (!l) return undefined;\n if (l === true) return {};\n return l.enabled === false ? undefined : l;\n}\n\n/** The tooltip options of an input, with `enabled` resolved. */\nexport function tooltipOptions(\n input: Sized,\n): Omit<TooltipOptions, 'enabled'> & { enabled: boolean } {\n const t = input.tooltip;\n if (t === undefined || t === true) return { enabled: true };\n if (t === false) return { enabled: false };\n return { ...t, enabled: t.enabled ?? true };\n}\n\n/** Whether the shared axis tooltip (crosshair) is on: `crosshair`, or `tooltip.trigger: 'axis'`. */\nexport const axisTooltip = (input: Sized & { crosshair?: boolean | undefined }): boolean =>\n input.crosshair === true || tooltipOptions(input).trigger === 'axis';\n\nexport const LEGEND_HEIGHT = 20;\nexport const LEGEND_WIDTH = 120;\n\n/** The column width a `left`/`right` legend takes; 0 for a row legend or none. */\nconst legendSide = (input: Sized): number => {\n const l = legendOptions(input);\n return l && (l.position === 'left' || l.position === 'right') ? (l.width ?? LEGEND_WIDTH) : 0;\n};\n\n/**\n * The layout size: the input's, or the defaults. A bottom legend takes its row off the height\n * and a side legend its column off the width here, and `canvas` gives them back, so every layout\n * leaves room for them without knowing.\n */\nexport const size = (input: Sized, w = 600, h = 300) => ({\n width: (input.width ?? w) - legendSide(input),\n height: (input.height ?? h) - (legendOptions(input)?.position === 'bottom' ? LEGEND_HEIGHT : 0),\n});\n\n/**\n * Vertical room the legend rows take above the plot, to shift the plot down by. Pass the legend\n * items and the layout width to reserve every wrapped row; without them one row is assumed.\n */\nexport const legendTop = (input: Sized, items?: LegendItem[], width?: number): number => {\n const l = legendOptions(input);\n if (!l || !(l.position === undefined || l.position === 'top')) return 0;\n const rows = items ? Math.max(1, legendRows(items, width ?? size(input).width, l)) : 1;\n return rows * LEGEND_HEIGHT;\n};\n\n/** Average glyph width at the chart font size, for text-width estimates. */\nexport const CHAR = 6.5;\n\n/** Fit visible chart text while callers keep the complete string as a title or item label. */\nexport function fitText(text: string, width: number): string {\n const chars = Array.from(text);\n const capacity = Math.max(0, Math.floor(width / CHAR));\n return chars.length <= capacity\n ? text\n : capacity === 0\n ? ''\n : `${chars.slice(0, capacity - 1).join('')}…`;\n}\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/**\n * One row of swatches and names along the top edge (or from `top`), wrapping when it runs out\n * of width. Entries carry a legend item so clicks toggle the series, unless `interactive` is off.\n */\nexport function legendShapes(\n items: LegendItem[],\n width: number,\n hidden: string[] = [],\n options: LegendOptions = {},\n top = 10,\n left = 8,\n column = false,\n): Shape[] {\n const shapes: Shape[] = [];\n const max = options.maxItems;\n const shown = max !== undefined && max >= 0 && items.length > max ? items.slice(0, max) : items;\n const more = items.length - shown.length;\n const interactive = options.interactive ?? true;\n let x = left;\n let y = top;\n const place = (\n text: string,\n color: string | undefined,\n meta: ChartItem | undefined,\n off: boolean,\n ) => {\n const w = (color ? 18 : 4) + text.length * CHAR;\n // A column puts every entry on its own row; a row wraps when it runs out of width.\n if (x > left && (column || x + w > width - 8)) {\n x = left;\n y += LEGEND_HEIGHT;\n }\n if (color)\n shapes.push({\n kind: 'rect',\n part: 'legend-swatch',\n x,\n y: y - 5,\n width: 10,\n height: 10,\n fill: color,\n opacity: off ? 0.3 : undefined,\n item: meta,\n });\n shapes.push({\n kind: 'text',\n part: 'legend-label',\n x: x + (color ? 14 : 0),\n y,\n text,\n baseline: 'middle',\n fill: off ? CHART_COLORS.grid : CHART_COLORS.label,\n item: meta,\n });\n x += w + 12;\n };\n for (const item of shown) {\n const off = hidden.includes(item.name);\n const meta = interactive ? { label: item.name, series: item.name, legend: true } : undefined;\n place(options.formatter?.(item.name) ?? item.name, item.color, meta, off);\n }\n if (more > 0) place(`+${more} more`, undefined, undefined, false);\n return options.align === 'end' ? mirrorRows(shapes, width) : shapes;\n}\n\n/** Right-aligns each legend row inside `width` (for `direction: 'rtl'`), keeping entry order. */\nfunction mirrorRows(shapes: Shape[], width: number): Shape[] {\n const rows = new Map<number, Shape[]>();\n for (const s of shapes) {\n const y = s.kind === 'rect' ? s.y + 5 : (s as { y: number }).y;\n rows.set(y, [...(rows.get(y) ?? []), s]);\n }\n const out: Shape[] = [];\n for (const row of rows.values()) {\n const right = Math.max(\n ...row.map((s) =>\n s.kind === 'rect'\n ? s.x + s.width\n : (s as { x: number; text: string }).x + (s as { text: string }).text.length * CHAR,\n ),\n );\n const shift = width - 8 - right;\n for (const s of row) out.push({ ...s, x: (s as { x: number }).x + shift } as Shape);\n }\n return out;\n}\n\n/** Rows a legend of these items wraps onto at `width`. */\nexport const legendRows = (\n items: LegendItem[],\n width: number,\n options: LegendOptions = {},\n): number =>\n new Set(legendShapes(items, width, [], options).flatMap((s) => (s.kind === 'text' ? [s.y] : [])))\n .size;\n\n/**\n * The common tail of every layout: size, legend decorations, the tooltip switch and accessibility\n * passthroughs. A bottom legend is placed under `height` and the canvas grows to hold it.\n */\nexport function canvas(\n input: Sized,\n width: number,\n height: number,\n legend: LegendItem[] = [],\n): Canvas {\n const given = legendOptions(input);\n const options =\n given && input.direction === 'rtl' && given.align === undefined\n ? { ...given, align: 'end' as const }\n : given;\n const tooltip = tooltipOptions(input);\n const bottom = options?.position === 'bottom';\n const side = legendSide(input);\n const hidden = input.hiddenSeries ?? [];\n // A side legend is a column beside the laid-out width; a left one also asks `placeLegend` to\n // move every other shape right by its width, since the layout drew them from x = 0.\n const shapes = !options\n ? []\n : side\n ? legendShapes(\n legend,\n Infinity,\n hidden,\n options,\n 10,\n (options.position === 'right' ? width : 0) + 8,\n true,\n )\n : legendShapes(legend, width, hidden, options, bottom ? height + 10 : 10);\n const rows = bottom ? legendRows(legend, width, options) : 0;\n return {\n width: width + side,\n height: bottom ? height + Math.max(1, rows) * LEGEND_HEIGHT : height,\n legendOffset: options?.position === 'left' ? side : undefined,\n tooltip: tooltip.enabled,\n tooltipFormatter: tooltip.formatter,\n axisTooltipFormatter: tooltip.axisFormatter,\n tooltipPortal: tooltip.portal,\n tooltipPlacement: tooltip.placement,\n tooltipAnchored: tooltip.followPointer === false ? true : undefined,\n description: input.description,\n decorative: input.decorative,\n animate: input.animate === true ? 300 : input.animate || undefined,\n responsive: Boolean(input.responsive),\n shapes,\n };\n}\n\n/**\n * Moves the marks of a chart laid out with a left legend right by the legend's width, keeping the\n * hit, edit and map models aligned. The roots apply it after layout; `svgMarkup` consumers of a\n * raw layout call it themselves. Idempotent: a placed layout is returned as it is.\n */\nexport function placeLegend(layout: Canvas): Canvas {\n const dx = layout.legendOffset;\n if (!dx) return layout;\n const shapes = [\n ...translateShapes(\n layout.shapes.filter((s) => !s.part.startsWith('legend-')),\n dx,\n 0,\n ),\n ...layout.shapes.filter((s) => s.part.startsWith('legend-')),\n ];\n const box = (b: Box): Box => ({ ...b, x: b.x + dx });\n const hit = layout.hit\n ? {\n ...layout.hit,\n plot: box(layout.hit.plot),\n xs: layout.hit.xs.map((x) => x + dx),\n brush: layout.hit.brush\n ? { box: box(layout.hit.brush.box), window: box(layout.hit.brush.window) }\n : undefined,\n }\n : undefined;\n const e = layout.edit;\n const edit = e\n ? {\n ...e,\n scale: (v: number) => e.scale(v) + dx,\n invert: (x: number) => e.invert(x - dx),\n bars: e.bars.map((b) => ({ ...b, x0: b.x0 + dx, x1: b.x1 + dx })),\n }\n : undefined;\n const map = layout.map ? { ...layout.map, plot: box(layout.map.plot) } : undefined;\n return { ...layout, shapes, hit, edit, map, legendOffset: undefined };\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 placement: 'auto' | 'top' | 'bottom' | 'left' | 'right' = 'auto',\n): Shape[] {\n const original = Array.isArray(text) ? text : [text];\n const capacity = Math.max(1, Math.floor((width - 12) / CHAR));\n const wrapped = original.flatMap((line) => {\n const result: string[] = [];\n let rest = Array.from(line);\n while (rest.length > capacity) {\n let end = rest.slice(0, capacity + 1).lastIndexOf(' ');\n if (end < 1) end = capacity;\n result.push(rest.slice(0, end).join(''));\n rest = rest.slice(end);\n if (rest[0] === ' ') rest.shift();\n }\n result.push(rest.join(''));\n return result;\n });\n const maxLines = Math.max(1, Math.floor((height - 6) / 16));\n const lines = wrapped.slice(0, maxLines);\n if (wrapped.length > maxLines)\n lines[maxLines - 1] = fitText(`${lines[maxLines - 1]}…`, width - 12);\n const w = Math.min(width, Math.max(0, ...lines.map((l) => Array.from(l).length)) * CHAR + 12);\n const h = Math.min(height, 6 + lines.length * 16);\n // `auto` sits above-right of the anchor and slides inside the canvas; a fixed placement\n // centres the box on the named side and is only clamped.\n const wanted =\n placement === 'top'\n ? { x: x - w / 2, y: y - h - 8 }\n : placement === 'bottom'\n ? { x: x - w / 2, y: y + 8 }\n : placement === 'left'\n ? { x: x - w - 8, y: y - h / 2 }\n : placement === 'right'\n ? { x: x + 8, y: y - h / 2 }\n : { x: x + 12, y: y - h - 6 };\n const bx = Math.max(0, Math.min(width - w, wanted.x));\n const by = Math.max(0, Math.min(height - h, wanted.y));\n return [\n {\n kind: 'rect',\n part: 'tooltip',\n title: original.join('\\n'),\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: 8,\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 /** Identity and placement, for charts with several value axes. */\n id?: string | undefined;\n position?: 'left' | 'right' | 'top' | 'bottom' | undefined;\n /** Pixel offset of the axis line from the plot edge, outward. */\n offset?: number | undefined;\n /** The options the axis was built from, for tick marks, lines and titles. */\n options?: AxisOptions | undefined;\n}\n\n/**\n * A nice-ticked linear (log, or sqrt) axis over `[min, max]` mapped onto `range`, honouring\n * explicit bounds; `nice: false` keeps the exact extent.\n */\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.reversed) range = [range[1], range[0]];\n const meta = { id: opts.id, position: opts.position, options: opts };\n if (opts.scale === 'sqrt') {\n // Signed square root: the domain keeps its sign, ticks stay nice in value space.\n const sq = (v: number) => Math.sign(v) * Math.sqrt(Math.abs(v));\n const nice = opts.nice === false ? [lo, hi] : niceTicks(lo, hi, opts.ticks);\n const d0 = opts.min ?? (nice[0] as number);\n const d1 = opts.max ?? (nice[nice.length - 1] as number);\n const lin = linearScale([sq(d0), sq(d1)], range);\n const scale = (v: number) => lin(sq(v));\n const inside = niceTicks(d0, d1, opts.ticks).filter((v) => v >= d0 - 1e-9 && v <= d1 + 1e-9);\n return {\n ...meta,\n scale,\n domain: [d0, d1],\n format,\n ticks: (inside.length >= 2 ? inside : [d0, d1]).map((v) => ({\n pos: px(scale(v)),\n label: format(v),\n })),\n zero: px(scale(Math.min(Math.max(0, d0), d1))),\n };\n }\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 ...meta,\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, opts.ticks);\n // Explicit bounds win over the rounded ends; ticks outside them are dropped. `nice: false`\n // keeps the exact extent and only the ticks that fall inside it.\n const domain = [\n opts.min ?? (opts.nice === false ? lo : (nice[0] as number)),\n opts.max ?? (opts.nice === false ? hi : (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 ...meta,\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/**\n * Left (or right) margin wide enough for the widest tick label a value axis over `[lo, hi]` will\n * draw, never below the default. Charts measure it before laying out so a long label such as\n * \"$180.00\" is not clipped by the svg edge.\n */\nexport const valueAxisRoom = (\n [lo, hi]: readonly [number, number],\n format: (value: number) => string,\n): number =>\n Math.max(\n MARGIN.left,\n niceTicks(lo, hi).reduce((w, v) => Math.max(w, format(v).length), 0) * CHAR + 14,\n );\n\n/** Whether an axis draws its grid lines. */\nexport const gridOn = (opts: AxisOptions | undefined): boolean => opts?.grid !== false;\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: 8,\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 { CHAR, fitText } from './frame.js';\nimport { CHART_COLORS } from './palette.js';\nimport { px } from './scale.js';\nimport type { AxisOptions, ChartItem, Frame, Shape, Tick } from './types.js';\n\n/**\n * Anchor for a tick label centred at `pos`: `end` when half of it would run past `width`, `start`\n * when it would run past 0, else `middle`. The outermost tick sits on the plot edge, where a long\n * date or currency label would otherwise be clipped by the svg.\n */\nexport const tickAnchor = (\n pos: number,\n text: string,\n width: number,\n): 'start' | 'middle' | 'end' => {\n const half = (text.length * CHAR) / 2;\n if (pos + half > width) return 'end';\n if (pos - half < 0) return 'start';\n return 'middle';\n};\n\n/** Tick marks, axis line and label rotation of one axis. */\nexport type AxisDecor = Pick<AxisOptions, 'showLine' | 'showTicks' | 'tickSize' | 'tickRotation'>;\n\n/** One value axis of a chart with several: its ticks, side, outward offset and title. */\nexport interface ValueAxisSpec extends AxisDecor {\n ticks: Tick[];\n /** `top`/`bottom` for horizontal charts. */\n position: 'left' | 'right' | 'top' | 'bottom';\n /** Pixel distance from the plot edge, outward. */\n offset: number;\n label?: string | undefined;\n}\n\nexport interface FrameOptions {\n /** Ticks of the second value axis, drawn on the right edge. */\n rightTicks?: Tick[] | undefined;\n /** Every value axis; when given, wins over `yTicks`/`rightTicks` for the value labels. */\n axes?: ValueAxisSpec[] | undefined;\n /** Categories run down the left edge and values along the bottom. */\n horizontal?: boolean | undefined;\n /** Category labels on the right (RTL). */\n rtl?: boolean | undefined;\n xLabel?: string | undefined;\n yLabel?: string | undefined;\n rightLabel?: string | undefined;\n /** Grid lines at the value ticks. @default true */\n grid?: boolean | undefined;\n /** Grid lines at the category ticks. @default false */\n categoryGrid?: boolean | undefined;\n /** Tick marks, line and label rotation of the category axis. */\n x?: AxisDecor | undefined;\n /** Tick marks and line of the value axis, when `axes` is not given. */\n y?: AxisDecor | 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 const grid = options.grid ?? true;\n const gridLine = (t: Tick, vertical: boolean): Shape =>\n vertical\n ? {\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 : {\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 const rot = options.x?.tickRotation ?? 0;\n const rotated = (x: number, y: number, text: string, part: string): Shape =>\n rot\n ? label(x, y, text, {\n part,\n anchor: rot < 0 ? 'end' : 'start',\n baseline: 'middle',\n rotate: rot,\n })\n : boundedLabel(x, y, text, frame.width, { part, anchor: tickAnchor(x, text, frame.width) });\n // Short marks across an axis line at the ticks.\n const marks = (ticks: Tick[], along: 'x' | 'y', at: number, dir: number, size: number) => {\n for (const t of ticks)\n shapes.push(\n along === 'x'\n ? {\n kind: 'line',\n part: 'tick',\n x1: t.pos,\n x2: t.pos,\n y1: at,\n y2: px(at + dir * size),\n stroke: CHART_COLORS.axis,\n }\n : {\n kind: 'line',\n part: 'tick',\n x1: at,\n x2: px(at + dir * size),\n y1: t.pos,\n y2: t.pos,\n stroke: CHART_COLORS.axis,\n },\n );\n };\n if (options.categoryGrid) for (const t of xTicks) shapes.push(gridLine(t, !options.horizontal));\n if (options.horizontal) {\n // Value ticks along the bottom (extra axes stack below, or above the plot) with vertical grid\n // lines; category labels on the left (or right).\n const axes: ValueAxisSpec[] = options.axes ?? [\n { ticks: yTicks, position: 'bottom', offset: 0, label: options.yLabel, ...options.y },\n ];\n if (grid) for (const t of yTicks) shapes.push(gridLine(t, true));\n if (axes[0]?.showLine !== false)\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 a of axes) {\n const top = a.position === 'top' || a.position === 'right';\n const y = px(top ? plot.y - a.offset : bottom + a.offset);\n const stacked = top || a.offset > 0;\n if (a.showLine && stacked)\n shapes.push({\n kind: 'line',\n part: 'axis',\n x1: plot.x,\n x2: right,\n y1: y,\n y2: y,\n stroke: CHART_COLORS.axis,\n });\n if (a.showTicks) marks(a.ticks, 'x', y, top ? -1 : 1, a.tickSize ?? 4);\n const ly = px(top ? y - 8 : y + 20);\n for (const t of a.ticks)\n shapes.push(\n top\n ? label(t.pos, ly, t.label, {\n part: 'x-label-top',\n anchor: tickAnchor(t.pos, t.label, frame.width),\n })\n : rotated(t.pos, ly, t.label, 'x-label'),\n );\n // The first axis keeps its title at the top left; stacked axes title their own label row.\n if (a.label)\n shapes.push(\n stacked\n ? label(4, ly, a.label, {\n part: 'axis-title',\n anchor: 'start',\n baseline: top ? undefined : 'middle',\n })\n : label(4, plot.y - 6, a.label, { part: 'axis-title', anchor: 'start' }),\n );\n }\n if (options.x?.showLine)\n shapes.push({\n kind: 'line',\n part: 'axis',\n x1: options.rtl ? right : plot.x,\n x2: options.rtl ? right : plot.x,\n y1: plot.y,\n y2: bottom,\n stroke: CHART_COLORS.axis,\n });\n if (options.x?.showTicks)\n marks(\n xTicks,\n 'y',\n options.rtl ? right : plot.x,\n options.rtl ? 1 : -1,\n options.x.tickSize ?? 4,\n );\n for (const t of xTicks)\n shapes.push(\n options.rtl\n ? label(right + 8, t.pos, t.label, {\n part: 'y-label',\n anchor: 'start',\n baseline: 'middle',\n })\n : label(plot.x - 8, t.pos, t.label, {\n part: 'y-label',\n anchor: 'end',\n baseline: 'middle',\n }),\n );\n } else {\n if (grid) for (const t of yTicks) shapes.push(gridLine(t, false));\n if (options.y?.showLine !== false)\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 const axes: ValueAxisSpec[] = options.axes ?? [\n { ticks: yTicks, position: 'left', offset: 0, label: options.yLabel, ...options.y },\n ...(options.rightTicks\n ? [\n {\n ticks: options.rightTicks,\n position: 'right' as const,\n offset: 0,\n label: options.rightLabel,\n },\n ]\n : []),\n ];\n for (const a of axes) {\n const left = a.position === 'left';\n const x = left ? plot.x - a.offset : right + a.offset;\n const part = left ? 'y-label' : 'y-label-right';\n if (a.showLine)\n shapes.push({\n kind: 'line',\n part: 'axis',\n x1: px(x),\n x2: px(x),\n y1: plot.y,\n y2: bottom,\n stroke: CHART_COLORS.axis,\n });\n if (a.showTicks) marks(a.ticks, 'y', px(x), left ? -1 : 1, a.tickSize ?? 4);\n for (const t of a.ticks)\n shapes.push(\n label(px(left ? x - 8 : x + 8), t.pos, t.label, {\n part,\n anchor: left ? 'end' : 'start',\n baseline: 'middle',\n }),\n );\n // Titles sit at the canvas edges for the innermost axes and above stacked outer axes.\n if (a.label)\n shapes.push(\n label(\n px(\n left\n ? a.offset === 0\n ? 4\n : Math.max(4, x - 40)\n : a.offset === 0\n ? frame.width - 4\n : Math.min(frame.width - 4, x + 40),\n ),\n plot.y - 6,\n a.label,\n { part: 'axis-title', anchor: left ? 'start' : 'end' },\n ),\n );\n }\n if (options.x?.showTicks) marks(xTicks, 'x', bottom, 1, options.x.tickSize ?? 4);\n for (const t of xTicks)\n shapes.push(rotated(t.pos, bottom + (rot ? 12 : 20), t.label, 'x-label'));\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.horizontal) {\n if (options.rightLabel)\n shapes.push(\n label(frame.width - 4, plot.y - 6, options.rightLabel, {\n part: 'axis-title',\n anchor: 'end',\n }),\n );\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 label that stays inside the SVG, with the full wording available as its native title. */\nexport function boundedLabel(\n x: number,\n y: number,\n text: string,\n width: number,\n extra: Partial<Extract<Shape, { kind: 'text' }>> = {},\n): Extract<Shape, { kind: 'text' }> {\n const at = Math.max(4, Math.min(width - 4, x));\n const anchor = extra.anchor ?? 'start';\n const available =\n anchor === 'middle'\n ? 2 * Math.min(at - 4, width - at - 4)\n : anchor === 'end'\n ? at - 4\n : width - at - 4;\n const visible = fitText(text, available);\n return {\n kind: 'text',\n part: 'label',\n x: at,\n y,\n fill: CHART_COLORS.label,\n ...extra,\n text: visible,\n title: visible === text ? extra.title : text,\n };\n}\n\n/** Keep inside and reference labels readable over arbitrary series colours. */\nexport function withLabelSurfaces(shapes: Shape[]): Shape[] {\n return shapes.flatMap((shape): Shape[] => {\n if (\n shape.kind !== 'text' ||\n (shape.fill !== 'var(--skdx-color-text-on-accent)' && shape.part !== 'reference-label')\n )\n return [shape];\n const width = shape.text.length * CHAR + 8;\n const x =\n shape.x - (shape.anchor === 'middle' ? width / 2 : shape.anchor === 'end' ? width - 4 : 4);\n const y = shape.y - (shape.baseline === 'hanging' ? 2 : shape.baseline === 'middle' ? 9 : 14);\n return [\n {\n kind: 'rect',\n part: 'label-background',\n x,\n y,\n width,\n height: 18,\n rx: 8,\n fill: 'var(--skdx-color-surface-raised)',\n },\n {\n ...shape,\n fill: shape.part === 'reference-label' ? shape.fill : 'var(--skdx-color-text-default)',\n },\n ];\n });\n}\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, variantTextColor } from './palette.js';\nimport { px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { Annotation, 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 = r.color ?? variantColor(r.variant);\n const text = r.color ?? variantTextColor(r.variant);\n const meta = { part: 'reference-label', fill: text } 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(\n ...vband(clampX(Math.min(a, b)), clampX(Math.max(a, b)), plot, color, r.label, text),\n );\n else\n shapes.push(\n ...hband(clampY(Math.min(a, b)), clampY(Math.max(a, b)), plot, color, r.label, text),\n );\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, text));\n else shapes.push(...vband(clampX(lo), clampX(hi), plot, color, r.label, text));\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(\n y1: number,\n y2: number,\n plot: Box,\n fill: string,\n text: string | undefined,\n textFill: string,\n): 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: textFill,\n anchor: 'end',\n }),\n ]\n : [band];\n}\n\nfunction vband(\n x1: number,\n x2: number,\n plot: Box,\n fill: string,\n text: string | undefined,\n textFill: string,\n): 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 ? [\n band,\n label(x1 + 4, plot.y + 12, text, {\n part: 'reference-label',\n fill: textFill,\n anchor: 'start',\n }),\n ]\n : [band];\n}\n\n/**\n * Annotations over the marks: lines and bands reuse the reference drawing; points, callouts,\n * text and rectangles are placed at `(x, y)` in data coordinates. Each carries its label as a\n * `<title>` and an item, so it is hoverable and a keyboard stop.\n */\nexport function annotationShapes(\n annotations: Annotation[] | undefined,\n s: ReferenceScales,\n): Shape[] {\n const shapes: Shape[] = [];\n const { plot } = s;\n const right = plot.x + plot.width;\n const bottom = plot.y + plot.height;\n for (const a of annotations ?? []) {\n const color = a.color ?? variantColor(a.variant);\n const textColor = a.color ?? variantTextColor(a.variant);\n const at = (x: Category, y: number, axis: 'left' | 'right' | undefined) => {\n const cx = s.x(x);\n if (cx === undefined) return undefined;\n const cy = s.y(y, axis ?? 'left');\n // Horizontal orientation swaps the axes: categories run down y.\n return s.horizontal ? { x: px(cy), y: px(cx) } : { x: px(cx), y: px(cy) };\n };\n const id = a.id ?? a.label;\n const item = (label: string) => ({ label, id, name: a.label });\n if (a.type === 'line' || a.type === 'band') {\n const { type: _type, id: _id, ...ref } = a;\n shapes.push(...referenceShapes([ref], s));\n continue;\n }\n if (a.type === 'rect') {\n const p0 = at(a.x1, a.y1, a.axis);\n const p1 = at(a.x2, a.y2, a.axis);\n if (!p0 || !p1) continue;\n const x = Math.max(plot.x, Math.min(p0.x, p1.x));\n const y = Math.max(plot.y, Math.min(p0.y, p1.y));\n const title = a.label ?? '';\n shapes.push({\n kind: 'rect',\n part: 'annotation-rect',\n x: px(x),\n y: px(y),\n width: px(Math.max(0, Math.min(right, Math.max(p0.x, p1.x)) - x)),\n height: px(Math.max(0, Math.min(bottom, Math.max(p0.y, p1.y)) - y)),\n fill: color,\n opacity: 0.12,\n stroke: color,\n title: title || undefined,\n item: title ? item(title) : undefined,\n });\n if (a.label)\n shapes.push(\n label(px(x + 4), px(y + 12), a.label, { part: 'annotation-label', fill: textColor }),\n );\n continue;\n }\n const p = at(a.x, a.y, a.axis);\n if (!p) continue;\n if (a.type === 'text') {\n shapes.push(\n label(p.x, p.y, a.text, {\n part: 'annotation-text',\n fill: textColor,\n anchor: 'middle',\n baseline: 'middle',\n title: a.label,\n }),\n );\n continue;\n }\n const title = a.label ?? `${String(a.x)}, ${a.y}`;\n shapes.push({\n kind: 'circle',\n part: 'annotation-point',\n cx: p.x,\n cy: p.y,\n r: 5,\n fill: color,\n stroke: 'var(--skdx-color-surface-default)',\n title,\n item: item(title),\n });\n if (a.type === 'callout' && a.label) {\n const [dx, dy] = a.offset ?? [16, -16];\n const tx = px(Math.max(plot.x, Math.min(right, p.x + dx)));\n const ty = px(Math.max(plot.y, Math.min(bottom, p.y + dy)));\n shapes.push(\n {\n kind: 'line',\n part: 'annotation-leader',\n x1: p.x,\n y1: p.y,\n x2: tx,\n y2: ty,\n stroke: color,\n },\n label(tx, ty, a.label, {\n part: 'annotation-label',\n fill: textColor,\n anchor: dx >= 0 ? 'start' : 'end',\n baseline: 'middle',\n }),\n );\n }\n }\n return 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 { isFinite } from './scale.js';\nimport type { Sampling, Value } from './types.js';\n\n/*\n * Point reduction for dense series. Both strategies return the *indexes* to keep, in order, so\n * the caller can slice categories and every series consistently and items keep their original\n * index. Gaps (`null`) are always kept so the line still breaks where the data does.\n */\n\n/** Above this many visible points `sampling: 'auto'` kicks in. */\nexport const SAMPLING_THRESHOLD = 2000;\n\n/** The threshold and strategy a `Sampling` option resolves to; `undefined` when sampling is off. */\nexport function samplingOptions(\n sampling: Sampling | undefined,\n): { strategy: 'lttb' | 'minmax' | 'm4'; threshold: number } | undefined {\n if (sampling === 'none') return undefined;\n if (sampling === undefined || sampling === 'auto')\n return { strategy: 'lttb', threshold: SAMPLING_THRESHOLD };\n if (typeof sampling === 'string') return { strategy: sampling, threshold: SAMPLING_THRESHOLD };\n return { strategy: sampling.strategy, threshold: sampling.threshold ?? SAMPLING_THRESHOLD };\n}\n\n/**\n * Largest-Triangle-Three-Buckets (Steinarsson 2013): keeps the point of each bucket that forms\n * the largest triangle with the previous kept point and the next bucket's average, so peaks and\n * the visual shape survive. Returns the kept indexes into `values`.\n */\nexport function lttb(values: readonly Value[], threshold: number): number[] {\n const n = values.length;\n if (threshold >= n || threshold < 3) return values.map((_, i) => i);\n const kept: number[] = [0];\n // Gaps are kept on top of the budget so the line still breaks where the data does.\n const gaps: number[] = [];\n const size = (n - 2) / (threshold - 2);\n let a = 0;\n for (let i = 0; i < threshold - 2; i++) {\n const start = Math.floor((i + 1) * size) + 1;\n const end = Math.min(n - 1, Math.floor((i + 2) * size) + 1);\n // Average of the next bucket.\n let ax = 0;\n let ay = 0;\n let count = 0;\n for (let k = start; k < end; k++) {\n const v = values[k];\n if (!isFinite(v)) continue;\n ax += k;\n ay += v;\n count++;\n }\n ax = count ? ax / count : (start + end) / 2;\n ay = count ? ay / count : 0;\n const lo = Math.floor(i * size) + 1;\n const hi = Math.min(n - 1, Math.floor((i + 1) * size) + 1);\n const pa = values[a];\n const ya = isFinite(pa) ? pa : 0;\n let best = -1;\n let bestArea = -1;\n for (let k = lo; k < hi; k++) {\n const v = values[k];\n if (!isFinite(v)) {\n gaps.push(k);\n continue;\n }\n const area = Math.abs((a - ax) * (v - ya) - (a - k) * (ay - ya));\n if (area > bestArea) {\n bestArea = area;\n best = k;\n }\n }\n if (best < 0) best = lo;\n kept.push(best);\n a = best;\n }\n kept.push(n - 1);\n return gaps.length ? [...new Set([...kept, ...gaps])].sort((x, y) => x - y) : kept;\n}\n\n/** Keeps the minimum and maximum of each of `threshold / 2` equal buckets, plus every gap. */\nexport function minMaxSample(values: readonly Value[], threshold: number): number[] {\n const n = values.length;\n const buckets = Math.max(1, Math.floor(threshold / 2));\n if (buckets * 2 >= n) return values.map((_, i) => i);\n const kept: number[] = [];\n const size = n / buckets;\n for (let b = 0; b < buckets; b++) {\n const start = Math.floor(b * size);\n const end = b === buckets - 1 ? n : Math.floor((b + 1) * size);\n let lo = -1;\n let hi = -1;\n for (let k = start; k < end; k++) {\n const v = values[k];\n if (!isFinite(v)) {\n kept.push(k);\n continue;\n }\n if (lo < 0 || v < (values[lo] as number)) lo = k;\n if (hi < 0 || v > (values[hi] as number)) hi = k;\n }\n if (lo >= 0) kept.push(Math.min(lo, hi));\n if (hi >= 0 && hi !== lo) kept.push(Math.max(lo, hi));\n }\n return [...new Set(kept)].sort((a, b) => a - b);\n}\n\n/**\n * M4 (Jugel et al. 2014): keeps the first, last, minimum and maximum of each of `threshold / 4`\n * equal buckets, which reproduces a line chart pixel-exactly at that width. Gaps are kept.\n */\nexport function m4(values: readonly Value[], threshold: number): number[] {\n const n = values.length;\n const buckets = Math.max(1, Math.floor(threshold / 4));\n if (buckets * 4 >= n) return values.map((_, i) => i);\n const kept: number[] = [];\n const size = n / buckets;\n for (let b = 0; b < buckets; b++) {\n const start = Math.floor(b * size);\n const end = b === buckets - 1 ? n : Math.floor((b + 1) * size);\n let lo = -1;\n let hi = -1;\n let first = -1;\n let last = -1;\n for (let k = start; k < end; k++) {\n const v = values[k];\n if (!isFinite(v)) {\n kept.push(k);\n continue;\n }\n if (first < 0) first = k;\n last = k;\n if (lo < 0 || v < (values[lo] as number)) lo = k;\n if (hi < 0 || v > (values[hi] as number)) hi = k;\n }\n for (const k of [first, lo, hi, last]) if (k >= 0) kept.push(k);\n }\n return [...new Set(kept)].sort((a, b) => a - b);\n}\n\n/**\n * Indexes to keep for a set of series sharing one category axis: the union of each series'\n * sample, so every series keeps its own extremes. `undefined` when nothing needs sampling.\n */\nexport function sampleIndexes(\n series: readonly (readonly Value[])[],\n count: number,\n sampling: Sampling | undefined,\n): number[] | undefined {\n const opts = samplingOptions(sampling);\n if (!opts || count <= opts.threshold || series.length === 0) return undefined;\n const pick = opts.strategy === 'minmax' ? minMaxSample : opts.strategy === 'm4' ? m4 : lttb;\n const kept = new Set<number>();\n for (const s of series) for (const i of pick(s.slice(0, count), opts.threshold)) kept.add(i);\n return [...kept].sort((a, b) => a - b);\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 } from './frame.js';\nimport { CHART_COLORS } from './palette.js';\nimport { minMax, px } from './scale.js';\nimport type { Box, ColorLegendOptions, ColorScale, Shape } from './types.js';\n\n/** A resolved color scale: value → fill and opacity, plus what its legend needs. */\nexport interface ResolvedColorScale {\n /** Fill and opacity for a value; `undefined` for a non-finite value. */\n color: (value: number | null | undefined) => { fill: string; opacity: number } | undefined;\n /** The value range the scale covers. */\n domain: readonly [number, number];\n /** Legend swatches, low to high: a representative value (or class label) per swatch. */\n swatches: { fill: string; opacity: number; label: string }[];\n kind: ColorScale['type'];\n}\n\nconst clamp01 = (t: number) => Math.max(0, Math.min(1, t));\n\n/** `[r, g, b]` of a `#rgb`, `#rrggbb` or `rgb(r, g, b)` color; `undefined` for anything else. */\nexport function parseColor(c: string): [number, number, number] | undefined {\n const hex = /^#([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(c.trim());\n if (hex) {\n const h = hex[1] as string;\n const full =\n h.length === 3\n ? h\n .split('')\n .map((ch) => ch + ch)\n .join('')\n : h;\n return [0, 2, 4].map((i) => parseInt(full.slice(i, i + 2), 16)) as [number, number, number];\n }\n const rgb = /^rgba?\\(\\s*(\\d+)[\\s,]+(\\d+)[\\s,]+(\\d+)/i.exec(c.trim());\n return rgb ? [Number(rgb[1]), Number(rgb[2]), Number(rgb[3])] : undefined;\n}\n\n/**\n * The color at `t` (0–1) along the stops: interpolated in RGB when every stop is a concrete\n * color, else the nearest stop (token colors such as `var(--skdx-color-primary-500)` cannot be\n * mixed in the core, so they quantize).\n */\nexport function mixStops(stops: string[], t: number): string {\n if (stops.length === 0) return CHART_COLORS.axis;\n if (stops.length === 1) return stops[0] as string;\n const pos = clamp01(t) * (stops.length - 1);\n const i = Math.min(stops.length - 2, Math.floor(pos));\n const f = pos - i;\n const a = parseColor(stops[i] as string);\n const b = parseColor(stops[i + 1] as string);\n if (!a || !b) return stops[Math.round(pos)] as string;\n const mix = (k: 0 | 1 | 2) => Math.round(a[k] + (b[k] - a[k]) * f);\n return `rgb(${mix(0)}, ${mix(1)}, ${mix(2)})`;\n}\n\nconst quantize = (t: number, steps: number | undefined) =>\n steps !== undefined && steps >= 2\n ? Math.min(steps - 1, Math.floor(clamp01(t) * steps)) / (steps - 1)\n : clamp01(t);\n\n/**\n * Resolves a `ColorScale` over the data extent. Without explicit stops a sequential scale is\n * `baseColor` at an opacity ramp (0.15–1) and a diverging scale splits `negativeColor` /\n * `baseColor` around zero, which is what the heatmap and map always did.\n */\nexport function makeColorScale(\n scale: ColorScale | undefined,\n values: Iterable<number | null | undefined>,\n baseColor: string,\n negativeColor: string = CHART_COLORS.negative,\n format: (v: number) => string = String,\n): ResolvedColorScale {\n const [lo, hi] = minMax(values);\n const s = scale ?? { type: 'sequential' };\n const ramp = (t: number) => px(0.15 + 0.85 * t);\n if (s.type === 'threshold') {\n const { thresholds, colors, labels } = s;\n const color = (v: number | null | undefined) => {\n if (typeof v !== 'number' || !Number.isFinite(v)) return undefined;\n let i = 0;\n while (i < thresholds.length && v >= (thresholds[i] as number)) i++;\n return { fill: colors[Math.min(i, colors.length - 1)] ?? baseColor, opacity: 1 };\n };\n const swatches = colors.map((fill, i) => ({\n fill,\n opacity: 1,\n label:\n labels?.[i] ??\n (i === 0\n ? `< ${format(thresholds[0] ?? 0)}`\n : i === thresholds.length\n ? `≥ ${format(thresholds[i - 1] as number)}`\n : `${format(thresholds[i - 1] as number)} – ${format(thresholds[i] as number)}`),\n }));\n return { color, domain: [lo, hi], swatches, kind: 'threshold' };\n }\n if (s.type === 'ordinal') {\n const colors = s.colors?.length ? s.colors : [baseColor];\n const color = (v: number | null | undefined) =>\n typeof v === 'number' && Number.isFinite(v)\n ? { fill: colors[Math.abs(Math.round(v)) % colors.length] as string, opacity: 1 }\n : undefined;\n return {\n color,\n domain: [lo, hi],\n swatches: colors.map((fill, i) => ({ fill, opacity: 1, label: String(i) })),\n kind: 'ordinal',\n };\n }\n if (s.type === 'diverging') {\n const [min, mid, max] = s.domain ?? [\n -Math.max(Math.abs(lo), Math.abs(hi)),\n 0,\n Math.max(Math.abs(lo), Math.abs(hi)),\n ];\n const stops = s.colors;\n const t = (v: number) =>\n v < mid\n ? (0.5 * (v - min)) / Math.max(1e-12, mid - min)\n : 0.5 + (0.5 * (v - mid)) / Math.max(1e-12, max - mid);\n const at = (tt: number) => {\n const q = quantize(s.reversed ? 1 - clamp01(tt) : tt, s.steps);\n if (stops && stops.length >= 2) return { fill: mixStops(stops, q), opacity: 1 };\n // Two-sided opacity ramp: distance from the midpoint decides the strength, the side the color.\n const side = q < 0.5 ? negativeColor : baseColor;\n const strength = Math.abs(q - 0.5) * 2;\n return { fill: side, opacity: ramp(strength) };\n };\n const color = (v: number | null | undefined) =>\n typeof v === 'number' && Number.isFinite(v) ? at(t(v)) : undefined;\n const n = s.steps ?? 5;\n const swatches = Array.from({ length: n }, (_, i) => {\n const tt = n === 1 ? 0.5 : i / (n - 1);\n const v = tt < 0.5 ? min + (mid - min) * (tt * 2) : mid + (max - mid) * ((tt - 0.5) * 2);\n return { ...at(tt), label: format(v) };\n });\n return { color, domain: [min, max], swatches, kind: 'diverging' };\n }\n const [min, max] = s.domain ?? [lo, hi];\n const stops = s.colors;\n const at = (tt: number) => {\n const q = quantize(s.reversed ? 1 - clamp01(tt) : tt, s.steps);\n return stops && stops.length >= 2\n ? { fill: mixStops(stops, q), opacity: 1 }\n : { fill: stops?.[0] ?? baseColor, opacity: ramp(q) };\n };\n const color = (v: number | null | undefined) =>\n typeof v !== 'number' || !Number.isFinite(v)\n ? undefined\n : at(max === min ? 1 : (v - min) / (max - min));\n const n = s.steps ?? 5;\n const swatches = Array.from({ length: n }, (_, i) => {\n const tt = n === 1 ? 1 : i / (n - 1);\n return { ...at(tt), label: format(min + (max - min) * tt) };\n });\n return { color, domain: [min, max], swatches, kind: 'sequential' };\n}\n\n/** Vertical room a horizontal color legend takes under a plot. */\nexport const COLOR_LEGEND_HEIGHT = 34;\n/** Horizontal room a vertical color legend takes beside a plot. */\nexport const COLOR_LEGEND_WIDTH = 72;\n\n/** The room a `colorLegend` option reserves: a strip under the plot, or a column at its right. */\nexport function colorLegendRoom(option: boolean | ColorLegendOptions | undefined): {\n bottom: number;\n right: number;\n options: ColorLegendOptions;\n} {\n if (!option) return { bottom: 0, right: 0, options: {} };\n const options = option === true ? {} : option;\n return options.orientation === 'vertical'\n ? { bottom: 0, right: COLOR_LEGEND_WIDTH, options }\n : { bottom: COLOR_LEGEND_HEIGHT, right: 0, options };\n}\n\n/**\n * The color scale as swatches: a horizontal strip with labels underneath laid across `box`, or\n * (`orientation: 'vertical'`) a column of swatches down `box` with labels to the right.\n */\nexport function colorLegendShapes(\n scale: ResolvedColorScale,\n box: Box,\n options?: string | ColorLegendOptions,\n): Shape[] {\n const opts: ColorLegendOptions =\n typeof options === 'string' ? { title: options } : (options ?? {});\n const title = opts.title;\n const swatches = scale.swatches;\n if (swatches.length === 0 || box.width <= 0) return [];\n if (opts.orientation === 'vertical') {\n const room = Math.max(0, box.height - (title ? 16 : 0));\n const h = Math.min(16, room / swatches.length);\n const y0 = box.y + (title ? 16 : 0);\n const shapes: Shape[] = swatches.map((s, i): Shape => ({\n kind: 'rect',\n part: 'color-legend-swatch',\n x: px(box.x),\n y: px(y0 + i * h),\n width: 10,\n height: px(h),\n fill: s.fill,\n opacity: s.opacity,\n title: s.label,\n }));\n // A label per swatch while rows are tall enough for text; else every other row.\n const every = h >= 12 ? 1 : 2;\n swatches.forEach((s, i) => {\n if (i % every !== 0 && i !== swatches.length - 1) return;\n shapes.push({\n kind: 'text',\n part: 'color-legend-label',\n x: px(box.x + 14),\n y: px(y0 + (i + 0.5) * h),\n text: s.label,\n baseline: 'middle',\n fill: CHART_COLORS.label,\n });\n });\n if (title)\n shapes.push({\n kind: 'text',\n part: 'color-legend-title',\n x: px(box.x),\n y: px(box.y + 6),\n text: title,\n baseline: 'middle',\n fill: CHART_COLORS.label,\n });\n return shapes;\n }\n const w = Math.min(box.width / swatches.length, 96);\n const x0 = box.x + (box.width - w * swatches.length) / 2;\n const shapes: Shape[] = swatches.map((s, i): Shape => ({\n kind: 'rect',\n part: 'color-legend-swatch',\n x: px(x0 + i * w),\n y: px(box.y),\n width: px(w),\n height: 10,\n fill: s.fill,\n opacity: s.opacity,\n title: s.label,\n }));\n // Labels: every class for threshold scales, else the ends and the middle, thinned to what fits.\n const every =\n scale.kind === 'threshold'\n ? 1\n : Math.max(1, Math.ceil((swatches.length * 7 * CHAR) / Math.max(1, w * swatches.length)));\n swatches.forEach((s, i) => {\n if (i % every !== 0 && i !== swatches.length - 1) return;\n shapes.push({\n kind: 'text',\n part: 'color-legend-label',\n x: px(x0 + (i + 0.5) * w),\n y: px(box.y + 22),\n text: s.label,\n anchor: 'middle',\n fill: CHART_COLORS.label,\n });\n });\n if (title)\n shapes.push({\n kind: 'text',\n part: 'color-legend-title',\n x: px(x0 - 6),\n y: px(box.y + 5),\n text: title,\n anchor: 'end',\n baseline: 'middle',\n fill: CHART_COLORS.label,\n });\n return 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 { colorLegendRoom, colorLegendShapes, makeColorScale } from './colors.js';\nimport { categoryValue, makeFormatter } from './format.js';\nimport {\n axis,\n canvas,\n CHAR,\n colorOf,\n extent,\n isHidden,\n legendTop,\n MARGIN,\n plotBox,\n size,\n stateCanvas,\n thinTicks,\n type Axis,\n} from './frame.js';\nimport { annotationShapes, referenceShapes } from './reference.js';\nimport { isFinite, minMax, pathThrough, px } from './scale.js';\nimport { frameShapes, label, point, tickAnchor } from './shapes.js';\nimport type {\n Canvas,\n Category,\n ChartDataIssue,\n ChartItem,\n ChartItemId,\n MarkerSymbol,\n ScatterChartInput,\n ScatterPoint,\n Shape,\n} from './types.js';\n\n/** Above this many points `sampling: 'auto'` keeps every k-th point. */\nexport const SCATTER_SAMPLING_THRESHOLD = 10_000;\n\n/** A point in one shape, whichever input form it came in. */\nexport interface Dot {\n x: number;\n y: number;\n size: number | undefined;\n label: string | undefined;\n id: ChartItemId | undefined;\n color: string | undefined;\n /** The quantity a color scale maps. */\n value: number | undefined;\n}\n\nconst toDot = (p: ScatterPoint): Dot =>\n Array.isArray(p)\n ? {\n x: p[0],\n y: p[1],\n size: p[2],\n label: undefined,\n id: undefined,\n color: undefined,\n value: undefined,\n }\n : { x: p.x, y: p.y, size: p.size, label: p.label, id: p.id, color: p.color, value: p.value };\n\n/** A marker of the given symbol centred on `(cx, cy)`; circles stay circles for the animation contract. */\nexport function marker(\n cx: number,\n cy: number,\n r: number,\n symbol: MarkerSymbol,\n fill: string,\n title: string | undefined,\n item: ChartItem | undefined,\n part: string,\n): Shape {\n if (symbol === 'circle') return { ...point(cx, cy, r, fill, title, item), part };\n const d =\n symbol === 'square'\n ? `M${px(cx - r)} ${px(cy - r)}h${px(2 * r)}v${px(2 * r)}h${px(-2 * r)}Z`\n : symbol === 'diamond'\n ? `M${px(cx)} ${px(cy - r * 1.3)}L${px(cx + r * 1.3)} ${px(cy)}L${px(cx)} ${px(cy + r * 1.3)}L${px(cx - r * 1.3)} ${px(cy)}Z`\n : `M${px(cx)} ${px(cy - r * 1.2)}L${px(cx + r * 1.15)} ${px(cy + r * 0.9)}L${px(cx - r * 1.15)} ${px(cy + r * 0.9)}Z`;\n return { kind: 'path', part, d, fill, title, item };\n}\n\nexport interface PointsOptions {\n /** Radius for a point's size over the whole data's size extent. */\n radius: (size: number | undefined, extent: readonly [number, number]) => number;\n /** Tooltip text of a point. */\n describe: (series: string, dot: Dot, x: Axis, y: Axis) => string;\n part: 'point' | 'bubble';\n opacity?: number | undefined;\n}\n\n/** Dots (or bubbles) on two linear axes: the engine behind ScatterChart and BubbleChart. */\nexport function layoutPoints(input: ScatterChartInput, options: PointsOptions): Canvas {\n const issues: ChartDataIssue[] = [];\n const all = input.series.map((s, i) => ({\n name: s.name,\n id: s.id,\n symbol: s.symbol ?? 'circle',\n color: colorOf(input, i, s.color),\n data: isHidden(input, s.name)\n ? []\n : s.data.flatMap((p, index) => {\n const d = toDot(p);\n return isFinite(d.x) && isFinite(d.y) ? [{ ...d, index }] : [];\n }),\n }));\n // Systematic sampling above the threshold: every k-th point, indexes kept, reported once.\n const threshold =\n input.sampling === 'auto'\n ? SCATTER_SAMPLING_THRESHOLD\n : typeof input.sampling === 'object'\n ? input.sampling.threshold\n : Infinity;\n const count = all.reduce((n, s) => n + s.data.length, 0);\n const every = count > threshold ? Math.ceil(count / threshold) : 1;\n if (every > 1)\n issues.push({\n code: 'sampled',\n severity: 'warning',\n message: `${count} points exceed the sampling threshold of ${threshold}; every ${every}th point is drawn.`,\n });\n const shown =\n every > 1 ? all.map((s) => ({ ...s, data: s.data.filter((_, k) => k % every === 0) })) : all;\n const dots = shown.flatMap((s) => s.data);\n const state = stateCanvas(input, dots.length === 0);\n if (state) return { ...state, issues };\n const { width, height } = size(input);\n const legendRoom = input.colorScale\n ? colorLegendRoom(input.colorLegend)\n : { bottom: 0, right: 0, options: {} };\n const legend = input.series.map((s, i) => ({ name: s.name, color: colorOf(input, i, s.color) }));\n const plot = plotBox(width, height, {\n ...MARGIN,\n top: MARGIN.top + legendTop(input, legend, width) + (input.yAxis?.label ? 12 : 0),\n right: MARGIN.right + legendRoom.right,\n bottom: MARGIN.bottom + (input.xAxis?.label ? 14 : 0) + legendRoom.bottom,\n });\n const markerSize = input.markerSize ?? 3;\n const hitRadius = Math.max(0, input.hitRadius ?? 0);\n const requestedJitter = Math.max(0, input.jitter ?? 0);\n const sizes = minMax(dots.map((p) => p.size));\n const extentFactor = (symbol: MarkerSymbol) =>\n symbol === 'diamond' ? 1.3 : symbol === 'triangle' ? 1.2 : 1;\n const requestedRadius = (dot: Dot, sized: boolean) =>\n Math.max(0, sized ? options.radius(dot.size, sizes) : markerSize);\n let largestExtent = 0;\n for (const series of shown) {\n const sized = series.data.some((dot) => dot.size !== undefined);\n const factor = extentFactor(series.symbol);\n for (const dot of series.data)\n largestExtent = Math.max(largestExtent, requestedRadius(dot, sized) * factor);\n }\n // Scale visible extents together only when a tiny plot cannot contain the requested size.\n // Keep data domains intact and use the same inset scales for marks/references/trends.\n const extentScale = Math.min(\n 1,\n (Math.min(plot.width, plot.height) * 0.45) / Math.max(1, largestExtent + requestedJitter),\n );\n const jitter = requestedJitter * extentScale;\n const inset = largestExtent * extentScale + jitter;\n // Duplicates at one pixel are spread deterministically on a ring around it.\n const seen = new Map<string, number>();\n // A color scale maps each dot's `value`; dots without one keep their series color.\n const colors = input.colorScale\n ? makeColorScale(\n input.colorScale,\n dots.map((d) => d.value),\n colorOf(input, 0),\n undefined,\n makeFormatter(input.format),\n )\n : undefined;\n const x = axis(\n extent(\n dots.map((p) => p.x),\n false,\n ),\n [plot.x + inset, plot.x + plot.width - inset],\n input.xAxis ?? {},\n input.format,\n );\n const y = axis(\n extent(\n dots.map((p) => p.y),\n false,\n ),\n [plot.y + plot.height - inset, plot.y + inset],\n input.yAxis ?? {},\n input.format,\n );\n const c = canvas(input, width, height, legend);\n const marks: Shape[] = [];\n const texts: Shape[] = [];\n const trends: Shape[] = [];\n // Labels that would cover an earlier label are dropped; the tooltip still carries them.\n const boxes: { x: number; y: number; w: number }[] = [];\n for (const s of shown) {\n const sized = s.data.some((p) => p.size !== undefined);\n for (const dot of s.data) {\n const di = dot.index;\n const title = options.describe(s.name, dot, x, y);\n const r = requestedRadius(dot, sized) * extentScale;\n let cx = px(x.scale(dot.x));\n let cy = px(y.scale(dot.y));\n if (jitter > 0) {\n const key = `${Math.round(cx)},${Math.round(cy)}`;\n const k = seen.get(key) ?? 0;\n seen.set(key, k + 1);\n if (k > 0) {\n const a = k * 2.399963;\n cx = px(cx + jitter * Math.cos(a));\n cy = px(cy + jitter * Math.sin(a));\n }\n }\n const scaled = colors?.color(dot.value);\n const item: ChartItem = {\n label: title,\n id: dot.id,\n series: s.name,\n seriesId: s.id ?? s.name,\n name: dot.label,\n index: di,\n value: dot.y,\n };\n const fill = dot.color ?? scaled?.fill ?? s.color;\n marks.push(\n marker(cx, cy, px(r), s.symbol, fill, title, item, sized ? options.part : 'point'),\n );\n // An invisible, larger twin widens the pointer target without changing the drawing.\n if (hitRadius > 0)\n marks.push({\n kind: 'circle',\n part: 'hit',\n cx,\n cy,\n r: px(r + hitRadius),\n fill,\n opacity: 0,\n title,\n item,\n });\n if (input.labels && dot.label) {\n const w = dot.label.length * CHAR;\n const lx = cx - w / 2;\n const ly = cy - r - 4;\n if (!boxes.some((b) => Math.abs(b.y - ly) < 12 && lx < b.x + b.w + 4 && lx + w + 4 > b.x)) {\n boxes.push({ x: lx, y: ly, w });\n texts.push(\n label(cx, px(ly), dot.label, {\n part: 'point-label',\n anchor: 'middle',\n fill: 'var(--skdx-color-text-default)',\n }),\n );\n }\n }\n }\n if (input.trendline && s.data.length >= 2) {\n const type = input.trendline === true ? 'linear' : input.trendline;\n const fit = fitCurve(\n s.data.map((p) => [p.x, p.y]),\n type,\n );\n if (fit) {\n const [x0, x1] = x.domain;\n const title = `${s.name} trend${type === 'linear' ? '' : ` (${type})`}: r² ${fit.r2.toFixed(2)}`;\n const stroke = s.color;\n if (type === 'linear')\n trends.push({\n kind: 'line',\n part: 'trendline',\n x1: px(x.scale(x0)),\n y1: px(y.scale(fit.predict(x0))),\n x2: px(x.scale(x1)),\n y2: px(y.scale(fit.predict(x1))),\n stroke,\n dash: '5 4',\n strokeWidth: 1.5,\n title,\n });\n else {\n // Curved fits are sampled across the x domain; undefined stretches (log of x ≤ 0) break the path.\n const pts = Array.from({ length: 40 }, (_, k) => x0 + ((x1 - x0) * k) / 39)\n .map((v) => ({ v, p: fit.predict(v) }))\n .filter(({ p }) => Number.isFinite(p))\n .map(({ v, p }) => ({ x: px(x.scale(v)), y: px(y.scale(p)) }));\n if (pts.length > 1)\n trends.push({\n kind: 'path',\n part: 'trendline',\n d: pathThrough(pts),\n stroke,\n dash: '5 4',\n strokeWidth: 1.5,\n title,\n });\n }\n }\n }\n }\n // Check the final edge anchors as well as average tick spacing.\n let tickRight = -Infinity;\n const candidates = thinTicks(x.ticks, Math.max(1, plot.width - 2 * inset));\n const kept = new Set<(typeof candidates)[number]>();\n for (const tick of [...candidates].sort((a, b) => a.pos - b.pos)) {\n const textWidth = tick.label.length * CHAR;\n const rotation = input.xAxis?.tickRotation ?? 0;\n const anchor = rotation\n ? rotation < 0\n ? 'end'\n : 'start'\n : tickAnchor(tick.pos, tick.label, width);\n const left = -(anchor === 'end' ? textWidth : anchor === 'middle' ? textWidth / 2 : 0);\n const angle = (rotation * Math.PI) / 180;\n const corners = [left, left + textWidth].flatMap((x) =>\n [-7, 7].map((y) => tick.pos + x * Math.cos(angle) - y * Math.sin(angle)),\n );\n const start = Math.min(...corners),\n end = Math.max(...corners);\n if (start < tickRight + 4) continue;\n tickRight = end;\n kept.add(tick);\n }\n const xTicks = candidates.filter((tick) => kept.has(tick));\n const frame = { ...c, plot, xTicks, yTicks: y.ticks, baseline: y.zero };\n const scales = {\n plot,\n x: (v: Category) => x.scale(categoryValue(v)),\n y: (v: number) => y.scale(v),\n };\n const references = referenceShapes(input.references, scales);\n const legendShapes =\n colors && (legendRoom.bottom || legendRoom.right)\n ? colorLegendShapes(\n colors,\n legendRoom.right\n ? {\n x: plot.x + plot.width + 12,\n y: plot.y,\n width: legendRoom.right,\n height: plot.height,\n }\n : {\n x: plot.x,\n y: height - legendRoom.bottom + 8,\n width: plot.width,\n height: legendRoom.bottom,\n },\n legendRoom.options,\n )\n : [];\n const opacity = options.opacity;\n return {\n ...c,\n shapes: [\n ...frameShapes(\n { ...frame, height: frame.height - legendRoom.bottom },\n {\n xLabel: input.xAxis?.label,\n x: input.xAxis,\n // Frame axes spread decoration fields; never forward a second title through y.\n y: {\n showLine: input.yAxis?.showLine,\n showTicks: input.yAxis?.showTicks,\n tickSize: input.yAxis?.tickSize,\n tickRotation: input.yAxis?.tickRotation,\n },\n },\n ),\n ...(input.yAxis?.label\n ? [label(4, plot.y - 14, input.yAxis.label, { part: 'axis-title', anchor: 'start' })]\n : []),\n ...references,\n ...(opacity !== undefined && marks.some((m) => m.part === options.part)\n ? marks.map((m) =>\n (m.kind === 'circle' || m.kind === 'path') && m.part !== 'hit' ? { ...m, opacity } : m,\n )\n : marks),\n ...trends,\n ...texts,\n ...annotationShapes(input.annotations, scales),\n ...legendShapes,\n ...c.shapes,\n ],\n issues,\n };\n}\n\nexport type TrendType = 'linear' | 'exponential' | 'logarithmic' | 'power' | 'polynomial';\n\n/**\n * Least-squares fit of `[x, y]` pairs: a line, `y = a·e^(bx)` (y > 0), `y = a + b·ln x` (x > 0),\n * `y = a·x^b` (x, y > 0), or a quadratic. The log forms are linear fits in log space; r² is\n * always measured on the original scale. `undefined` when there is nothing to fit.\n */\nexport function fitCurve(\n pairs: [number, number][],\n type: TrendType = 'linear',\n): { predict: (x: number) => number; r2: number } | undefined {\n let predict: ((x: number) => number) | undefined;\n if (type === 'polynomial') {\n // Normal equations for a·x² + b·x + c, solved by Cramer's rule.\n let s0 = 0;\n let s1 = 0;\n let s2 = 0;\n let s3 = 0;\n let s4 = 0;\n let t0 = 0;\n let t1 = 0;\n let t2 = 0;\n for (const [x, y] of pairs) {\n s0 += 1;\n s1 += x;\n s2 += x * x;\n s3 += x ** 3;\n s4 += x ** 4;\n t0 += y;\n t1 += x * y;\n t2 += x * x * y;\n }\n const det = (m: number[]) =>\n (m[0] as number) *\n ((m[4] as number) * (m[8] as number) - (m[5] as number) * (m[7] as number)) -\n (m[1] as number) *\n ((m[3] as number) * (m[8] as number) - (m[5] as number) * (m[6] as number)) +\n (m[2] as number) *\n ((m[3] as number) * (m[7] as number) - (m[4] as number) * (m[6] as number));\n const m = [s4, s3, s2, s3, s2, s1, s2, s1, s0];\n const D = det(m);\n if (Math.abs(D) < 1e-12) return undefined;\n const a = det([t2, s3, s2, t1, s2, s1, t0, s1, s0]) / D;\n const b = det([s4, t2, s2, s3, t1, s1, s2, t0, s0]) / D;\n const c = det([s4, s3, t2, s3, s2, t1, s2, s1, t0]) / D;\n predict = (x) => a * x * x + b * x + c;\n } else {\n const fx = type === 'logarithmic' || type === 'power' ? Math.log : (v: number) => v;\n const fy = type === 'exponential' || type === 'power' ? Math.log : (v: number) => v;\n const usable = pairs.filter(([x, y]) => Number.isFinite(fx(x)) && Number.isFinite(fy(y)));\n const line = leastSquares(usable.map(([x, y]) => [fx(x), fy(y)]));\n if (!line) return undefined;\n const back = type === 'exponential' || type === 'power' ? Math.exp : (v: number) => v;\n predict = (x) => back(line.intercept + line.slope * fx(x));\n }\n const fit = predict;\n const used = pairs.filter(([x]) => Number.isFinite(fit(x)));\n if (used.length === 0) return undefined;\n const mean = used.reduce((s, [, y]) => s + y, 0) / used.length;\n let ssRes = 0;\n let ssTot = 0;\n for (const [x, y] of used) {\n ssRes += (y - fit(x)) ** 2;\n ssTot += (y - mean) ** 2;\n }\n return { predict: fit, r2: ssTot === 0 ? 1 : Math.max(0, 1 - ssRes / ssTot) };\n}\n\nexport function layoutScatterChart(input: ScatterChartInput): Canvas {\n const [rMin, rMax] = input.sizeRange ?? [3, 18];\n return layoutPoints(input, {\n part: 'bubble',\n opacity: 0.7,\n // Bubble area, not radius, follows the value, so a doubled value reads as doubled.\n radius: (s, [sMin, sMax]) =>\n !isFinite(s)\n ? 3\n : sMax === sMin\n ? (rMin + rMax) / 2\n : rMin + Math.sqrt((s - sMin) / (sMax - sMin)) * (rMax - rMin),\n describe: (name, dot, x, y) =>\n `${name}${dot.label ? ` ${dot.label}` : ''}: ${x.format(dot.x)}, ${y.format(dot.y)}${isFinite(dot.size) ? ` (${y.format(dot.size)})` : ''}`,\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 { binEdges, binSamples } from './bins.js';\nimport { isFinite } from './scale.js';\nimport type { SeriesTransform, Value } from './types.js';\n\n/*\n * Deterministic, pure series transforms. Every function returns a new array of the same length\n * (`filter` keeps gaps where a value was dropped), never mutates its input, and treats\n * `null`/`NaN` as gaps that pass through.\n */\n\nexport const cumulative = (data: readonly Value[]): Value[] => {\n let running = 0;\n return data.map((v) => (isFinite(v) ? (running += v) : null));\n};\n\n/** `v[i] - v[i-1]`; the first value, and any value after a gap, is a gap. */\nexport const difference = (data: readonly Value[]): Value[] =>\n data.map((v, i) => {\n const prev = data[i - 1];\n return i > 0 && isFinite(v) && isFinite(prev) ? v - prev : null;\n });\n\n/** `(v[i] - v[i-1]) / |v[i-1]|` as a fraction; a zero previous value is a gap. */\nexport const percentageChange = (data: readonly Value[]): Value[] =>\n data.map((v, i) => {\n const prev = data[i - 1];\n return i > 0 && isFinite(v) && isFinite(prev) && prev !== 0\n ? (v - prev) / Math.abs(prev)\n : null;\n });\n\n/** Trailing mean over `window` values; the first `window - 1` are gaps, as is any window with a gap. */\nexport function movingAverage(data: readonly Value[], window: number): Value[] {\n const w = Math.max(1, Math.floor(window));\n return data.map((_, i) => {\n if (i < w - 1) return null;\n let sum = 0;\n for (let k = i - w + 1; k <= i; k++) {\n const v = data[k];\n if (!isFinite(v)) return null;\n sum += v;\n }\n return sum / w;\n });\n}\n\n/** Exponential moving average with `alpha = 2 / (window + 1)`, seeded by the first `window` mean. */\nexport function exponentialMovingAverage(data: readonly Value[], window: number): Value[] {\n const w = Math.max(1, Math.floor(window));\n const alpha = 2 / (w + 1);\n let ema: number | undefined;\n let seedSum = 0;\n let seedCount = 0;\n return data.map((v) => {\n if (!isFinite(v)) return ema ?? null;\n if (ema === undefined) {\n seedSum += v;\n seedCount++;\n if (seedCount < w) return null;\n ema = seedSum / w;\n return ema;\n }\n ema = alpha * v + (1 - alpha) * ema;\n return ema;\n });\n}\n\n/** Values as a share of the maximum (0–1), or of the sum. */\nexport function normalize(data: readonly Value[], to: 'max' | 'sum' = 'max'): Value[] {\n let denom = 0;\n for (const v of data) if (isFinite(v)) denom = to === 'sum' ? denom + v : Math.max(denom, v);\n return data.map((v) => (isFinite(v) ? (denom === 0 ? 0 : v / denom) : null));\n}\n\n/** 1-based rank of each value, largest first by default; ties share the lower rank. */\nexport function rank(data: readonly Value[], order: 'asc' | 'desc' = 'desc'): Value[] {\n const sorted = data.filter(isFinite).sort((a, b) => (order === 'asc' ? a - b : b - a));\n return data.map((v) => (isFinite(v) ? sorted.indexOf(v) + 1 : null));\n}\n\n/** Keeps values inside `[min, max]`; the rest become gaps. */\nexport const filter = (data: readonly Value[], min = -Infinity, max = Infinity): Value[] =>\n data.map((v) => (isFinite(v) && v >= min && v <= max ? v : null));\n\n/** Values sorted; gaps go last. */\nexport const sortValues = (data: readonly Value[], order: 'asc' | 'desc' = 'asc'): Value[] =>\n [...data].sort((a, b) => {\n if (!isFinite(a)) return isFinite(b) ? 1 : 0;\n if (!isFinite(b)) return -1;\n return order === 'asc' ? a - b : b - a;\n });\n\n/** Folds every `every` consecutive values into one by `method`; a fold of only gaps is a gap. */\nexport function aggregate(\n data: readonly Value[],\n every: number,\n method: 'sum' | 'mean' | 'min' | 'max' = 'sum',\n): Value[] {\n const n = Math.max(1, Math.floor(every));\n const out: Value[] = [];\n for (let i = 0; i < data.length; i += n) {\n const chunk = data.slice(i, i + n).filter(isFinite);\n if (chunk.length === 0) {\n out.push(null);\n continue;\n }\n const sum = chunk.reduce((s, v) => s + v, 0);\n out.push(\n method === 'sum'\n ? sum\n : method === 'mean'\n ? sum / chunk.length\n : method === 'min'\n ? Math.min(...chunk)\n : Math.max(...chunk),\n );\n }\n return out;\n}\n\n/** Counts the values into equal-width bins (see `binEdges`); the result has one count per bin. */\nexport function binCounts(\n data: readonly Value[],\n options: {\n bins?: number | undefined;\n binWidth?: number | undefined;\n domain?: [number, number] | undefined;\n } = {},\n): { edges: number[]; counts: number[] } {\n const samples = data.filter(isFinite);\n const edges = binEdges(samples, options);\n return { edges, counts: binSamples(samples, edges).map((b) => b.count) };\n}\n\n/** Applies transforms in order. */\nexport function applyTransforms(\n data: readonly Value[],\n transforms: readonly SeriesTransform[] | undefined,\n): Value[] {\n let out: Value[] = [...data];\n for (const t of transforms ?? [])\n switch (t.type) {\n case 'cumulative':\n out = cumulative(out);\n break;\n case 'difference':\n out = difference(out);\n break;\n case 'percentageChange':\n out = percentageChange(out);\n break;\n case 'movingAverage':\n out = movingAverage(out, t.window);\n break;\n case 'normalize':\n out = normalize(out, t.to);\n break;\n case 'rank':\n out = rank(out, t.order);\n break;\n case 'filter':\n out = filter(out, t.min, t.max);\n break;\n case 'sort':\n out = sortValues(out, t.order);\n break;\n case 'aggregate':\n out = aggregate(out, t.every, t.method);\n break;\n case 'bin':\n out = binCounts(out, t).counts;\n break;\n }\n return out;\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 { binEdges, binSamples } from './bins.js';\nimport { categoryLabel, categoryValue, makeFormatter } from './format.js';\nimport {\n axis,\n axisTooltip,\n canvas,\n CHAR,\n colorOf,\n gridOn,\n isHidden,\n legendTop,\n MARGIN,\n markTitle,\n plotBox,\n size,\n stateCanvas,\n thinTicks,\n valueAxisRoom,\n type Axis,\n} from './frame.js';\nimport { CHART_COLORS } from './palette.js';\nimport { annotationShapes, referenceShapes } from './reference.js';\nimport { sampleIndexes } from './sampling.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 { marker } from './scatter.js';\nimport { frameShapes, label, point, withLabelSurfaces } from './shapes.js';\nimport { applyTransforms } from './transforms.js';\nimport type {\n AxisOptions,\n Canvas,\n CartesianSeries,\n Category,\n ChartDataIssue,\n ChartInput,\n ChartItem,\n ChartItemId,\n Curve,\n ErrorValue,\n GradientDef,\n Hit,\n MarkerSymbol,\n RangeSeries,\n SeriesTransform,\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 id: ChartItemId | undefined;\n color: string;\n /** The resolved value-axis id. */\n axis: string;\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 symbol: MarkerSymbol;\n markerSize: number;\n errors: ErrorValue[] | undefined;\n /** Stack group key, or `undefined` when not stacked. */\n stack: string | undefined;\n /** How a range series is drawn. */\n style: 'area' | 'bar' | 'line';\n fillOpacity: number;\n gradient: boolean;\n}\n\n/** `right` and `top` are the far side (away from the origin) in either orientation. */\nconst outer = (a: AxisOptions) => a.position === 'right' || a.position === 'top';\n\n/** The value axes of a chart, in declaration order, with ids and sides filled in. */\nexport function axisDefinitions(input: ChartInput): AxisOptions[] {\n const given =\n input.yAxis === undefined ? [] : Array.isArray(input.yAxis) ? input.yAxis : [input.yAxis];\n const defs = given.map((a, i): AxisOptions => ({\n ...a,\n id: a.id ?? (i === 0 ? 'left' : i === 1 ? 'right' : String(i)),\n position: a.position ?? (i === 1 ? 'right' : 'left'),\n }));\n if (defs.length === 0) defs.push({ id: 'left', position: 'left' });\n const hasRight = defs.some((a) => a.id === 'right' || outer(a));\n if (input.rightAxis) defs.push({ ...input.rightAxis, id: 'right', position: 'right' });\n else if (!hasRight && input.series.some((s) => s.axis === 'right'))\n defs.push({ id: 'right', position: 'right' });\n return defs;\n}\n\n/** Resolves a series' `axis` to an axis id; unknown ids fall back to the first axis. */\nexport function resolveAxis(\n defs: readonly AxisOptions[],\n axis: string | undefined,\n): string | undefined {\n const first = defs[0]?.id as string;\n if (axis === undefined || axis === 'left') return first;\n if (axis === 'right') return (defs.find((a) => a.id === 'right') ?? defs.find(outer))?.id;\n return defs.find((a) => a.id === axis)?.id;\n}\n\n/** Whether a series occupies a bar slot: plain bars and range bars. */\nconst isBarLike = (s: Resolved): boolean =>\n s.kind === 'bar' || (s.kind === 'range' && s.style === 'bar');\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 {\n series: all,\n categories: cats,\n issues,\n axes: defs,\n } = transform(input, defaultType, format);\n const rtl = input.direction === 'rtl';\n const base = input.baseline ?? 0;\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, issues };\n\n // A time or linear axis places numeric/date categories proportionally instead of in even slots;\n // under `time`, ISO strings parse as dates.\n const xType = input.xAxis?.type ?? 'category';\n const continuous =\n xType !== 'category' &&\n cats.length > 0 &&\n cats.every((c) => typeof c !== 'string' || (xType === 'time' && isFinite(categoryValue(c))));\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 window = 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 && !isBarLike(s)) }));\n const drawn = shown.filter((s) => !s.hidden);\n // Dense line/area series are sampled inside the visible window; items keep original indexes.\n const sampled = drawn.some((s) => !isBarLike(s))\n ? sampleIndexes(\n drawn\n .filter((s) => !isBarLike(s))\n .map((s) => window.map((i) => (s.kind === 'range' ? s.high[i] : s.data[i]) ?? null)),\n window.length,\n input.sampling,\n )\n : undefined;\n const visible = sampled ? sampled.map((k) => window[k] as number) : window;\n const percent = input.stacked === 'percent' || input.stackOffset === 'expand';\n const offset = input.stackOffset ?? 'zero';\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(base);\n const down = new Array<number>(count).fill(base);\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 // Silhouette centres every stack on zero; wiggle (Byron & Wattenberg) shifts each category's\n // baseline so the layers' slopes are minimized, the streamgraph. Both are per category offsets.\n if (offset === 'silhouette' || offset === 'wiggle') {\n const shift = new Array<number>(count).fill(0);\n if (offset === 'silhouette')\n for (let ci = 0; ci < count; ci++) shift[ci] = -((up[ci] as number) - base) / 2;\n else {\n let g0 = 0;\n for (let ci = 0; ci < count; ci++) {\n const n = members.length;\n let sum = 0;\n for (let k = 0; k < n; k++) {\n const s = members[k] as Resolved;\n const v = s.data[ci];\n const prev = s.data[ci - 1];\n const dv = ci > 0 && isFinite(v) && isFinite(prev) ? v - prev : 0;\n sum += (n - k - 0.5) * dv;\n }\n const total = (up[ci] as number) - base;\n g0 = ci === 0 ? -total / 2 : g0 - (total > 0 ? sum / Math.max(1, n) : 0);\n shift[ci] = g0;\n }\n }\n for (const s of members) {\n const from = stackFrom.get(s) as Value[];\n const to = stackTo.get(s) as Value[];\n for (let ci = 0; ci < count; ci++) {\n const f = from[ci];\n const t = to[ci];\n if (isFinite(f)) from[ci] = f + (shift[ci] as number);\n if (isFinite(t)) to[ci] = t + (shift[ci] as number);\n }\n }\n }\n }\n const valuesOf = (s: Resolved): { from: Value[]; to: Value[] } =>\n s.kind === 'range'\n ? { from: s.low, to: s.high }\n : {\n from: stackFrom.get(s) ?? new Array<Value>(count).fill(base),\n to: stackTo.get(s) ?? s.data,\n };\n\n // Value extents per axis over the visible window; bars and areas grow the domain to include the baseline.\n const extentOf = (axisId: string): [number, number] => {\n const values: number[] = [];\n let zero = false;\n for (const s of drawn) {\n if (s.axis !== axisId) 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.errors)\n for (const i of visible) {\n const e = errorRange(s.data[i], s.errors[i]);\n if (e) values.push(e[0], e[1]);\n }\n if ((s.kind === 'bar' || s.kind === 'area') && offset === 'zero') zero = true;\n }\n const [min, max] = minMax(values);\n return zero ? [Math.min(base, min), Math.max(base, max)] : [min, max];\n };\n\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 percentFormat = percent ? ({ style: 'percent' } as const) : undefined;\n // Value labels such as \"$160,000\" need more than the default margin; measure the nice ticks\n // the axis will use (explicit bounds and log scales fall back to the default).\n const labelRoom = (opts: AxisOptions): number => {\n if (opts.scale === 'log') return MARGIN.left;\n const [lo, hi] = extentOf(opts.id as string);\n const f = makeFormatter(opts.format ?? percentFormat ?? input.format);\n return (\n valueAxisRoom([opts.min ?? lo, opts.max ?? hi], f) +\n (opts.showTicks ? (opts.tickSize ?? 4) : 0)\n );\n };\n // Horizontal charts run the value axes along the bottom (near) and top (far) edges. Under RTL\n // the vertical sides swap so the first axis sits at the right, next to the reader.\n const sideOf = (a: AxisOptions): 'left' | 'right' | 'top' | 'bottom' =>\n horizontal ? (outer(a) ? 'top' : 'bottom') : outer(a) !== rtl ? 'right' : 'left';\n // A horizontal axis is one row of labels; a vertical one is as wide as its widest label.\n const roomOf = (a: AxisOptions) =>\n horizontal ? 24 + (a.showTicks ? (a.tickSize ?? 4) : 0) : labelRoom(a);\n const used = new Set(drawn.map((s) => s.axis));\n // The default single axis on the far side does not appear unless a series uses it.\n const shownAxes = defs.filter((a) => used.has(a.id as string) || defs.length > 1);\n // Axes of one side stack outward: each takes its label room beyond the previous one.\n const offsets = new Map<string, number>();\n const room = { left: 0, right: 0, top: 0, bottom: 0 };\n for (const a of shownAxes) {\n const side = sideOf(a);\n offsets.set(a.id as string, room[side]);\n room[side] += roomOf(a);\n }\n // The default bottom margin already holds the first bottom axis.\n const firstBottom = shownAxes.find((a) => sideOf(a) === 'bottom');\n const legend = all.map((s) => ({ name: s.name, color: s.color }));\n const margin = {\n top:\n MARGIN.top +\n legendTop(input, legend, width) +\n (defs.some((a) => a.label) ? 12 : 0) +\n room.top,\n right: horizontal\n ? rtl\n ? Math.max(MARGIN.left, widestCategory + 16)\n : MARGIN.right\n : Math.max(MARGIN.right, room.right),\n bottom:\n MARGIN.bottom +\n brushRoom +\n (input.xAxis?.label ? 14 : 0) +\n (input.xAxis?.tickRotation ? 24 : 0) +\n room.bottom -\n (firstBottom ? roomOf(firstBottom) : 0),\n left: horizontal\n ? rtl\n ? MARGIN.right\n : Math.max(MARGIN.left, widestCategory + 16)\n : Math.max(MARGIN.left, room.left),\n };\n const plot = plotBox(width, height, margin);\n const valueRange: readonly [number, number] = horizontal\n ? rtl\n ? [plot.x + plot.width, plot.x]\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 : rtl\n ? [plot.x + plot.width, plot.x]\n : [plot.x, plot.x + plot.width];\n const axes = new Map<string, Axis>(\n defs.map((a) => [\n a.id as string,\n {\n ...axis(\n extentOf(a.id as string),\n valueRange,\n { format: percentFormat, ...a },\n input.format,\n ),\n position: sideOf(a),\n offset: offsets.get(a.id as string) ?? 0,\n },\n ]),\n );\n const firstId = defs[0]?.id as string;\n const left = axes.get(firstId) as Axis;\n const axisOf = (id: string) => axes.get(resolveAxis(defs, id) ?? firstId) ?? left;\n const value = (v: number, id: string) => axisOf(id).scale(v);\n // Where bars grow from and areas fill down to: the baseline value, clamped into the axis.\n const baseOf = (a: Axis) =>\n px(a.scale(Math.min(Math.max(base, Math.min(...a.domain)), Math.max(...a.domain))));\n const band = bandScale(visible.length, bandRange, input.barGap);\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\n ? Infinity\n : plot.width /\n Math.max(0.2, Math.abs(Math.cos(((input.xAxis?.tickRotation ?? 0) * Math.PI) / 180))),\n );\n const frame = {\n ...canvas(input, width, height, legend),\n plot,\n xTicks: categoryTicks,\n yTicks: horizontal ? thinTicks(left.ticks, plot.width) : left.ticks,\n baseline: baseOf(left),\n };\n const firstDef = defs[0] as AxisOptions;\n const shapes: Shape[] = frameShapes(frame, {\n horizontal,\n rtl,\n axes: shownAxes.map((a) => {\n const ax = axes.get(a.id as string) as Axis;\n return {\n ticks: horizontal ? thinTicks(ax.ticks, plot.width) : ax.ticks,\n position: ax.position as 'left' | 'right' | 'top' | 'bottom',\n offset: ax.offset ?? 0,\n label: a.label,\n showLine: a.showLine,\n showTicks: a.showTicks,\n tickSize: a.tickSize,\n };\n }),\n xLabel: input.xAxis?.label,\n grid: gridOn(firstDef),\n categoryGrid: input.xAxis?.grid === true,\n x: input.xAxis,\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 const scales = {\n plot,\n horizontal,\n x: (c: Category) => {\n if (continuous && (typeof c !== 'string' || isFinite(categoryValue(c))))\n 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: (v: number, a: string) => value(v, a),\n };\n const references = referenceShapes(input.references, scales);\n shapes.push(...references.filter((shape) => shape.part !== 'reference-label'));\n // The reference geometry stays behind data, but its label must survive overlapping marks.\n const referenceLabels = withLabelSurfaces(\n references.filter((shape) => shape.part === 'reference-label'),\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 (!isBarLike(s)) 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 // `barWidth` caps the bar thickness; bars stay centred in their group slot.\n const barW = Math.min(groupWidth, input.barWidth ?? Infinity);\n const barInset = (groupWidth - barW) / 2;\n\n const areas: Shape[] = [];\n const bars: Shape[] = [];\n const lines: Shape[] = [];\n const points: Shape[] = [];\n const texts: Shape[] = [];\n const errorMarks: Shape[] = [];\n const defs2: GradientDef[] = [];\n const fmt = (s: Resolved) => axisOf(s.axis).format;\n const minBar = Math.max(0, input.minBarSize ?? 0);\n // A bar's pixel extent along the value axis, at least `minBarSize` long away from its base.\n const barSpan = (v0: number, v1: number, up: boolean): [number, number] => {\n const len = Math.abs(v1 - v0);\n if (len >= minBar) return [Math.min(v0, v1), len];\n // Grow away from the base: larger values go up (smaller y) vertically, right horizontally.\n const dir = horizontal ? (up ? 1 : -1) : up ? -1 : 1;\n const end = v0 + dir * minBar;\n return [Math.min(v0, end), minBar];\n };\n const itemOf = (s: Resolved, i: number, v: number, title: string): ChartItem => ({\n label: title,\n series: s.name,\n seriesId: s.id ?? s.name,\n category: labels[i],\n index: i,\n value: v,\n });\n // An error whisker through the mark: a bar along the value axis with two end caps.\n const whisker = (s: Resolved, i: number, at: number, plotted: number) => {\n const e = errorRange(plotted, s.errors?.[i]);\n if (!e) return;\n const a = px(value(e[0], s.axis));\n const b = px(value(e[1], s.axis));\n const cap = 4;\n const stroke = 'var(--skdx-color-text-default)';\n const title = `${s.name}, ${labels[i] as string}: ${fmt(s)(e[0])} – ${fmt(s)(e[1])}`;\n errorMarks.push(\n horizontal\n ? { kind: 'line', part: 'error-bar', x1: a, x2: b, y1: at, y2: at, stroke, title }\n : { kind: 'line', part: 'error-bar', x1: at, x2: at, y1: a, y2: b, stroke, title },\n horizontal\n ? {\n kind: 'line',\n part: 'error-cap',\n x1: a,\n x2: a,\n y1: px(at - cap),\n y2: px(at + cap),\n stroke,\n }\n : {\n kind: 'line',\n part: 'error-cap',\n x1: px(at - cap),\n x2: px(at + cap),\n y1: a,\n y2: a,\n stroke,\n },\n horizontal\n ? {\n kind: 'line',\n part: 'error-cap',\n x1: b,\n x2: b,\n y1: px(at - cap),\n y2: px(at + cap),\n stroke,\n }\n : {\n kind: 'line',\n part: 'error-cap',\n x1: px(at - cap),\n x2: px(at + cap),\n y1: b,\n y2: b,\n stroke,\n },\n );\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 // Above the title limit the series' bars collapse into one path: no per-bar DOM node, no\n // per-bar item (the crosshair still reads every category).\n let batched = '';\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 [start, span] = barSpan(v0, v1, b >= a);\n const b0 = slotStart(vi) + (slotOf.get(s) as number) * groupWidth + barInset;\n const x = px(horizontal ? start : b0);\n const y = px(horizontal ? b0 : start);\n const w = px(horizontal ? span : barW);\n const h = px(horizontal ? barW : span);\n if (!titled) {\n batched += `M${x} ${y}h${w}v${h}h${-w}Z`;\n return;\n }\n const title = markTitle(s.name, labels[i] as string, percent ? b - a : raw, f);\n bars.push({\n kind: 'rect',\n part: 'bar',\n x,\n y,\n width: w,\n height: h,\n fill: s.color,\n rx: input.radius,\n title,\n item: itemOf(s, i, raw, title),\n });\n whisker(s, i, px(b0 + barW / 2), raw);\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 + barW / 2), text, { baseline: 'middle' })\n : label(px(b0 + barW / 2), px(Math.min(v0, v1) - 4), text, { anchor: 'middle' }),\n );\n }\n });\n if (batched)\n bars.push({ kind: 'path', part: 'bars', d: batched, fill: s.color, title: s.name });\n continue;\n }\n if (s.kind === 'range' && s.style === 'bar') {\n // Floating bars from low to high, in their own slot like any bar series.\n visible.forEach((i, vi) => {\n const a = from[i];\n const b = to[i];\n if (!isFinite(a) || !isFinite(b)) return;\n const v0 = value(Math.min(a, b), s.axis);\n const v1 = value(Math.max(a, b), s.axis);\n const b0 = slotStart(vi) + (slotOf.get(s) as number) * groupWidth + barInset;\n const title = `${s.name}, ${labels[i] as string}: ${f(Math.min(a, b))} – ${f(Math.max(a, b))}`;\n const item = itemOf(s, i, b, title);\n const thickness = Math.max(1, Math.abs(v1 - v0));\n bars.push(\n horizontal\n ? {\n kind: 'rect',\n part: 'range',\n x: px(Math.min(v0, v1)),\n y: px(b0),\n width: px(thickness),\n height: px(barW),\n fill: s.color,\n rx: input.radius,\n title: titled ? title : undefined,\n item,\n }\n : {\n kind: 'rect',\n part: 'range',\n x: px(b0),\n y: px(Math.min(v0, v1)),\n width: px(barW),\n height: px(thickness),\n fill: s.color,\n rx: input.radius,\n title: titled ? title : undefined,\n item,\n },\n );\n });\n continue;\n }\n // Lines, areas and ranges: polylines broken at gaps unless nulls connect (or are zeros).\n const connect = input.nulls === 'connect' || (input.nulls === undefined && input.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 (!connect && 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' && s.style === 'line') {\n // Two outlines, no fill: the high line solid, the low line dashed.\n lines.push(\n {\n kind: 'path',\n part: 'range-high',\n d,\n stroke: s.color,\n strokeWidth: 2,\n strokeLinejoin: 'round',\n },\n {\n kind: 'path',\n part: 'range-low',\n d: pathThrough(\n seg.map((p) => ({ x: p.x, y: p.y0 })),\n s.curve,\n ),\n stroke: s.color,\n strokeWidth: 2,\n strokeLinejoin: 'round',\n dash: '4 3',\n },\n );\n continue;\n }\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 floor = baseOf(axisOf(s.axis));\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} ${floor}L${seg[0]?.x} ${floor}`;\n // A gradient fades the fill from the line down to the base; it lives in `Canvas.defs`.\n const gradientId = `skdx-g-${s.index}`;\n if (s.gradient && !defs2.some((g) => g.id === gradientId))\n defs2.push({\n id: gradientId,\n vertical: true,\n stops: [\n { offset: 0, color: s.color, opacity: s.fillOpacity },\n { offset: 1, color: s.color, opacity: 0 },\n ],\n });\n areas.push({\n kind: 'path',\n part: 'area',\n d: `${d}L${bottom}Z`,\n fill: s.gradient ? `url(#${gradientId})` : s.color,\n fillOpacity: s.gradient ? undefined : s.fillOpacity,\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' && titled)\n // Invisible anchors give range bands and lines a per-point tooltip and keyboard stop.\n for (const seg of segments)\n for (const p of seg) {\n const lo = s.low[p.i] as number;\n const hi = s.high[p.i] as number;\n const title = `${s.name}, ${labels[p.i] as string}: ${f(Math.min(lo, hi))} – ${f(Math.max(lo, hi))}`;\n points.push({\n ...point(p.x, p.y, 0.01, s.color, title, itemOf(s, p.i, hi, title)),\n part: 'anchor',\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 && !s.errors) 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 showMarkers && s.symbol !== 'circle'\n ? marker(\n p.x,\n p.y,\n s.markerSize,\n s.symbol,\n s.color,\n titled ? title : undefined,\n itemOf(s, p.i, raw, title),\n 'point',\n )\n : {\n ...point(\n p.x,\n p.y,\n showMarkers ? s.markerSize : 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 );\n if (titled) whisker(s, p.i, horizontal ? p.y : p.x, to[p.i] as number);\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: axisTooltip(input),\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: 8,\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: 8,\n },\n );\n hit.brush = { box, window };\n }\n\n return {\n ...frame,\n shapes: [\n ...shapes,\n ...areas,\n ...bars,\n ...lines,\n ...errorMarks,\n ...points,\n ...texts,\n ...referenceLabels,\n ...annotationShapes(input.annotations, scales),\n ...brush,\n ...frame.shapes,\n ],\n hit,\n issues,\n defs: defs2.length ? defs2 : undefined,\n };\n}\n\n/** `[low, high]` of a value with its error, or `undefined` when either is missing. */\nfunction errorRange(v: Value | undefined, e: ErrorValue | undefined): [number, number] | undefined {\n if (!isFinite(v) || e === null || e === undefined) return undefined;\n if (typeof e === 'number') return isFinite(e) ? [v - Math.abs(e), v + Math.abs(e)] : undefined;\n return isFinite(e[0]) && isFinite(e[1])\n ? [Math.min(e[0], e[1]), Math.max(e[0], e[1])]\n : undefined;\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`, `transforms`, `sort` and chart-level stacking. */\nfunction transform(\n input: ChartInput,\n fallback: Kind,\n format: (v: number) => string,\n): { series: Resolved[]; categories: Category[]; issues: ChartDataIssue[]; axes: AxisOptions[] } {\n const defaultType = (s: CartesianSeries | RangeSeries): Kind | 'range' => s.type ?? fallback;\n const issues: ChartDataIssue[] = [];\n const axes = axisDefinitions(input);\n let categories: Category[] = input.categories ?? [];\n // Chart-level transforms that touch the categories run here; the rest run per series.\n const chartLevel: SeriesTransform[] = (input.transforms ?? []).filter(\n (t) => t.type === 'sort' || t.type === 'bin' || t.type === 'aggregate',\n );\n const seriesLevel = (input.transforms ?? []).filter((t) => !chartLevel.includes(t));\n const stackedAll =\n input.stacked || (input.stackOffset !== undefined && input.stackOffset !== 'zero');\n // Values that are neither numbers nor gaps (strings, Infinity) are reported once per series.\n const check = (name: string, id: ChartItemId | undefined, values: readonly Value[]) => {\n const bad = values.filter(\n (v) => v !== null && !(typeof v === 'number' && Number.isFinite(v)),\n ).length;\n if (bad)\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `Series \"${name}\" has ${bad} value${bad === 1 ? '' : 's'} that ${bad === 1 ? 'is' : 'are'} neither a number nor null; drawn as gaps.`,\n itemId: id ?? name,\n });\n if (categories.length && values.length !== categories.length && !input.transform)\n issues.push({\n code: 'length-mismatch',\n severity: 'warning',\n message: `Series \"${name}\" has ${values.length} values for ${categories.length} categories.`,\n itemId: id ?? name,\n });\n };\n let series: Resolved[] = input.series.map((s, index) => {\n const kind = defaultType(s);\n const stacked = stackedAll ? 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 if (s.type === 'range') {\n check(s.name, s.id, s.low);\n check(s.name, s.id, s.high);\n } else check(s.name, s.id, s.data);\n const zeros = (values: Value[]) =>\n input.nulls === 'zero' ? values.map((v) => (isFinite(v) ? v : 0)) : values;\n const axisId = resolveAxis(axes, s.axis);\n if (axisId === undefined)\n issues.push({\n code: 'unknown-axis',\n severity: 'warning',\n message: `Series \"${s.name}\" names axis \"${String(s.axis)}\", which is not defined; drawn on the first axis.`,\n itemId: s.id ?? s.name,\n });\n return {\n name: s.name,\n id: s.id,\n color: colorOf(input, index, s.color),\n axis: axisId ?? (axes[0]?.id as string),\n hidden: isHidden(input, s.name),\n index,\n kind,\n data:\n s.type === 'range'\n ? []\n : zeros(applyTransforms(applyTransforms(s.data, seriesLevel), s.transforms)),\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 symbol: s.type === 'range' ? 'circle' : (s.symbol ?? 'circle'),\n markerSize: s.type === 'range' ? 3 : (s.markerSize ?? 3),\n errors: s.type === 'range' ? undefined : s.errors,\n stack: kind === 'range' || kind === 'line' ? undefined : stack,\n style: s.type === 'range' ? (s.style ?? 'area') : 'area',\n fillOpacity: (s.type === 'range' ? undefined : s.fillOpacity) ?? input.fillOpacity ?? 0.25,\n gradient: s.type !== 'range' && s.gradient === true,\n };\n });\n const n = () =>\n Math.max(categories.length, ...series.map((s) => Math.max(s.data.length, s.low.length)));\n const pickBy = (order: number[]) => {\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 const sortBy = (order: 'asc' | 'desc', by?: string) => {\n const first =\n (by !== undefined ? series.find((s) => s.name === by) : undefined) ??\n series.find((s) => !s.hidden && s.kind !== 'range') ??\n series[0];\n if (by !== undefined && !series.some((s) => s.name === by))\n issues.push({\n code: 'unknown-series',\n severity: 'warning',\n message: `sort.by names \"${by}\", which is not a series; sorted by the first series.`,\n });\n const idx = 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 order === 'asc' ? x - y : y - x;\n });\n pickBy(idx);\n };\n const bin = (opts: {\n bins?: number | undefined;\n binWidth?: number | undefined;\n domain?: [number, number] | undefined;\n }) => {\n const samples = series.flatMap((s) => finite(s.data));\n const edges = binEdges(samples, opts);\n categories = edges.slice(1).map((hi, i) => `${format(edges[i] as number)}–${format(hi)}`);\n series = series.map((s) => {\n const own = finite(s.data);\n let running = 0;\n const data = binSamples(own, edges).map((b) => {\n if (input.binMode === 'density')\n return own.length ? b.count / (own.length * (b.x1 - b.x0)) : 0;\n if (input.binMode === 'cumulative') return (running += b.count);\n return b.count;\n });\n return { ...s, data };\n });\n };\n // Folds every `every` consecutive categories into one, labelled by the first of the fold.\n const aggregate = (every: number, method: 'sum' | 'mean' | 'min' | 'max') => {\n const k = Math.max(1, Math.floor(every));\n const total = n();\n const fold = (arr: Value[]): Value[] => {\n if (!arr.length) return arr;\n const out: Value[] = [];\n for (let i = 0; i < total; i += k) {\n const chunk = finite(arr.slice(i, i + k));\n out.push(\n chunk.length === 0\n ? null\n : method === 'sum'\n ? chunk.reduce((a, b) => a + b, 0)\n : method === 'mean'\n ? chunk.reduce((a, b) => a + b, 0) / chunk.length\n : method === 'min'\n ? Math.min(...chunk)\n : Math.max(...chunk),\n );\n }\n return out;\n };\n const full = Array.from({ length: total }, (_, i) => categories[i] ?? String(i + 1));\n categories = full.filter((_, i) => i % k === 0);\n series = series.map((s) => ({\n ...s,\n data: fold(s.data),\n low: fold(s.low),\n high: fold(s.high),\n }));\n };\n\n if (input.transform === 'histogram')\n bin({ bins: input.bins, binWidth: input.binWidth, domain: input.binDomain });\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 for (const t of chartLevel)\n if (t.type === 'sort') sortBy(t.order ?? 'desc');\n else if (t.type === 'bin') bin(t);\n else if (t.type === 'aggregate') aggregate(t.every, t.method ?? 'sum');\n if (typeof input.sort === 'string') sortBy(input.sort);\n else if (input.sort) sortBy(input.sort.order, input.sort.by);\n // A fixed category domain sets the order and membership; missing categories are empty.\n const domain = input.xAxis?.domain;\n if (domain) {\n const total = n();\n const full = Array.from({ length: total }, (_, i) => categories[i] ?? String(i + 1));\n const at = (c: Category) => {\n const target = typeof c === 'string' ? c : categoryValue(c);\n return full.findIndex((cat) =>\n typeof target === 'string'\n ? cat === target || categoryLabel(cat) === target\n : categoryValue(cat) === target,\n );\n };\n const order = domain.map(at);\n const pick = (arr: Value[]): Value[] =>\n arr.length ? order.map((i) => (i < 0 ? null : (arr[i] ?? null))) : arr;\n categories = [...domain];\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, issues, axes };\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 { CHART_COLORS } from './palette.js';\nimport type {\n Canvas,\n ChartItem,\n ChartItemId,\n ChartItemRef,\n HighlightScope,\n Selection,\n Shape,\n Sized,\n} from './types.js';\n\n/*\n * Identity, selection and highlighting. Layouts stamp every mark with a `ChartItem`; the roots\n * (and `emphasize`) locate marks through `ChartItemRef`s, never through shape indexes, so ids\n * survive re-layouts, zooming and sampling.\n */\n\n/** Normalizes a `Selection` into refs; bare ids become `{ id }`. */\nexport function toRefs(selection: Selection | ChartItemRef | ChartItemId | null | undefined) {\n if (selection === undefined || selection === null) return [] as ChartItemRef[];\n const list = Array.isArray(selection) ? selection : [selection];\n return list.map((s): ChartItemRef => (typeof s === 'object' ? s : { id: s }));\n}\n\n/** Effective id of an item: the explicit id, else its name, else its series. */\nexport const itemId = (item: ChartItem): ChartItemId | undefined =>\n item.id ?? item.name ?? item.series;\n\n/** Effective series id of an item: the explicit series id, else the series name. */\nexport const seriesIdOf = (item: ChartItem): ChartItemId | undefined =>\n item.seriesId ?? item.series;\n\n/** Whether every field the ref gives matches the item. An empty ref matches nothing. */\nexport function matchesItem(item: ChartItem, ref: ChartItemRef): boolean {\n let any = false;\n if (ref.id !== undefined) {\n any = true;\n if (itemId(item) !== ref.id && item.id !== ref.id && item.name !== ref.id) return false;\n }\n if (ref.series !== undefined) {\n any = true;\n if (seriesIdOf(item) !== ref.series && item.series !== ref.series) return false;\n }\n if (ref.index !== undefined) {\n any = true;\n if (item.index !== ref.index) return false;\n }\n if (ref.category !== undefined) {\n any = true;\n if (item.category !== ref.category) return false;\n }\n return any;\n}\n\n/** Whether the item is in the selection. */\nexport const isSelected = (\n item: ChartItem,\n selection: Selection | undefined,\n refs = toRefs(selection),\n): boolean => refs.some((r) => matchesItem(item, r));\n\n/** Ids (or names) named by a selection, for layouts that key their data by id. */\nexport const selectedIds = (selection: Selection | undefined): ChartItemId[] =>\n toRefs(selection).flatMap((r) => (r.id !== undefined ? [r.id] : []));\n\n/** The ref a mark's item stands for, as reported by `onSelectedChange`. */\nexport function refOf(item: ChartItem): ChartItemRef {\n const ref: ChartItemRef = {};\n const id = itemId(item);\n if (id !== undefined) ref.id = id;\n const series = seriesIdOf(item);\n if (series !== undefined && item.series !== undefined) ref.series = series;\n if (item.index !== undefined) ref.index = item.index;\n return ref;\n}\n\n/** Whether two refs locate the same item. */\nexport const sameRef = (a: ChartItemRef, b: ChartItemRef): boolean =>\n a.id === b.id && a.series === b.series && a.index === b.index && a.category === b.category;\n\n/** The selection after a click on `item` in the given mode. */\nexport function toggleSelection(\n selection: Selection | undefined,\n item: ChartItem,\n mode: 'single' | 'multiple',\n): ChartItemRef[] {\n const refs = toRefs(selection);\n const ref = refOf(item);\n const on = refs.some((r) => matchesItem(item, r));\n if (mode === 'single') return on ? [] : [ref];\n return on ? refs.filter((r) => !matchesItem(item, r)) : [...refs, ref];\n}\n\nconst FADE = 0.2;\n\n/** A ring around a mark in the focus color, for selected items. */\nexport function outlineOf(s: Shape): Shape | undefined {\n const stroke = CHART_COLORS.focus;\n switch (s.kind) {\n case 'rect':\n return {\n kind: 'rect',\n part: 'selected',\n x: s.x - 1.5,\n y: s.y - 1.5,\n width: s.width + 3,\n height: s.height + 3,\n fill: 'none',\n stroke,\n rx: s.rx,\n };\n case 'circle':\n return {\n kind: 'circle',\n part: 'selected',\n cx: s.cx,\n cy: s.cy,\n r: s.r + 2.5,\n fill: 'none',\n stroke,\n };\n case 'path':\n return { kind: 'path', part: 'selected', d: s.d, fill: 'none', stroke, strokeWidth: 2.5 };\n case 'line':\n return {\n ...s,\n part: 'selected',\n stroke,\n strokeWidth: (s.strokeWidth ?? 1) + 3,\n title: undefined,\n item: undefined,\n };\n case 'text':\n return undefined;\n }\n}\n\n/** The shape at `factor` of its opacity; text dims to the grid color instead. */\nconst withOpacity = (s: Shape, factor: number): Shape =>\n s.kind === 'text'\n ? { ...s, fill: CHART_COLORS.grid }\n : { ...s, opacity: (s.opacity ?? 1) * factor };\n\n/**\n * Applies `selected` and `highlighted` to a laid-out chart: marks outside the highlight scope\n * fade, selected marks get an outline appended after the marks (so shape indexes, and with them\n * `data-skdx-i`, stay stable). Legend entries, grid, axes and tooltips are never touched.\n */\nexport function emphasize(layout: Canvas, input: Sized): Canvas {\n const refs = toRefs(input.selected);\n const highlights =\n input.highlighted === undefined || input.highlighted === null ? [] : toRefs(input.highlighted);\n const highlight = highlights[0];\n if (refs.length === 0 && !highlight) return layout;\n const scope: Required<HighlightScope> = {\n highlighted: input.highlightScope?.highlighted ?? 'item',\n faded: input.highlightScope?.faded ?? 'global',\n };\n const outlines: Shape[] = [];\n const lit = (item: ChartItem): boolean => {\n if (!highlight) return true;\n if (highlights.some((h) => matchesItem(item, h))) return true;\n if (scope.highlighted === 'series')\n return highlights.some(\n (h) => h.series !== undefined && matchesItem(item, { series: h.series }),\n );\n return false;\n };\n const fades = (item: ChartItem): boolean => {\n if (!highlight || scope.faded === 'none' || lit(item)) return false;\n if (scope.faded === 'series') {\n const series = highlight.series;\n return series !== undefined && matchesItem(item, { series });\n }\n return true;\n };\n const shapes = layout.shapes.map((s) => {\n const item = s.item;\n if (!item || item.legend) return s;\n if (refs.some((r) => matchesItem(item, r))) {\n const o = outlineOf(s);\n if (o) outlines.push(o);\n }\n return fades(item) ? withOpacity(s, FADE) : s;\n });\n return outlines.length ? { ...layout, shapes: [...shapes, ...outlines] } : { ...layout, 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 { isSelected, toRefs } from './identity.js';\nimport { CHART_COLORS } from './palette.js';\nimport { isFinite, px } from './scale.js';\nimport { boundedLabel, label, withLabelSurfaces } from './shapes.js';\nimport type { Canvas, ChartDataIssue, ChartItem, 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\n/**\n * `arc` with rounded corners: the outer corners (and the inner ones of a ring) are replaced by\n * arcs of radius `cr`, clamped so a thin slice never inverts. Full circles keep square ends.\n */\nexport function roundedArc(\n cx: number,\n cy: number,\n r: number,\n r0: number,\n a0: number,\n a1: number,\n cr: number,\n): string {\n const sweep = a1 - a0;\n if (cr <= 0 || sweep >= TAU - 1e-9) return arc(cx, cy, r, r0, a0, a1);\n const s = Math.sin(Math.min(Math.PI / 2, sweep / 2));\n // The corner circle must fit both the ring thickness and the angular span.\n let c = Math.min(cr, r0 > 0 ? (r - r0) / 2 : r / 2, (r * s) / (1 + s));\n if (r0 > 0 && s < 1) c = Math.min(c, (r0 * s) / (1 - s));\n if (c <= 0.25) return arc(cx, cy, r, r0, a0, a1);\n const at = (radius: number, a: number) =>\n `${px(cx + radius * Math.sin(a))} ${px(cy - radius * Math.cos(a))}`;\n const corner = (p: string) => `A${px(c)} ${px(c)} 0 0 1 ${p}`;\n // Outer corners: centre at radius r - c, tangent to the rim at ±da and to the edge at radius rt.\n const da = Math.asin(c / (r - c));\n const rt = Math.sqrt((r - c) ** 2 - c * c);\n const large = a1 - a0 - 2 * da > Math.PI ? 1 : 0;\n let d = `M${at(rt, a0)}${corner(at(r, a0 + da))}A${r} ${r} 0 ${large} 1 ${at(r, a1 - da)}${corner(at(rt, a1))}`;\n if (r0 > 0) {\n const da0 = Math.asin(c / (r0 + c));\n const rt0 = Math.sqrt((r0 + c) ** 2 - c * c);\n const large0 = a1 - a0 - 2 * da0 > Math.PI ? 1 : 0;\n d += `L${at(rt0, a1)}${corner(at(r0, a1 - da0))}A${r0} ${r0} 0 ${large0} 0 ${at(r0, a0 + da0)}${corner(at(rt0, a0))}Z`;\n } else d += `L${px(cx)} ${px(cy)}Z`;\n return d;\n}\n\nexport function layoutPieChart(input: PieChartInput): Canvas {\n const issues: ChartDataIssue[] = [];\n for (const d of input.data)\n if (isFinite(d.value) && d.value < 0)\n issues.push({\n code: 'negative-value',\n severity: 'warning',\n message: `\"${d.name}\" is negative (${d.value}); a share of a whole cannot be, so it is drawn as zero.`,\n itemId: d.id ?? d.name,\n });\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, issues };\n const format = makeFormatter(input.format);\n const percentFormat = input.percentFormat\n ? makeFormatter(input.percentFormat)\n : (p: number) => `${Math.round(p * 100)}%`;\n const cornerRadius = Math.max(0, input.cornerRadius ?? 0);\n const { width, height } = size(input, 300, 300);\n const legend = input.data.map((d, i) => ({ name: d.name, color: colorOf(input, i, d.color) }));\n const top = legendTop(input, legend, width);\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 outside = input.labels && input.labelPosition === 'outside';\n const cx = width / 2;\n const outer = Math.max(0.2, Math.min(1, input.outerRadius ?? 1));\n const room = outside ? 40 : 8;\n const r =\n (half\n ? Math.max(0, Math.min(width / 2, height - top) - room)\n : Math.max(0, Math.min(width, height - top) / 2 - room)) * outer;\n const cy = half\n ? start < 0 || start > Math.PI\n ? height - room\n : top + room\n : top + (height - top) / 2;\n const r0 =\n r * Math.min(0.95, Math.max(0, input.innerRadius ?? (input.variant === 'donut' ? 0.6 : 0)));\n // Slices keep their input index (and color) when sorted, so colors stay stable.\n const indexed = input.data.map((d, i) => ({\n ...d,\n i,\n value: isFinite(d.value) && !isHidden(input, d.name) ? Math.max(0, d.value) : 0,\n }));\n const shown = input.sort\n ? [...indexed].sort((a, b) => (input.sort === 'asc' ? a.value - b.value : b.value - a.value))\n : indexed;\n const total = shown.reduce((sum, d) => sum + d.value, 0);\n const visible = shown.filter((d) => d.value > 0).length;\n // A pad angle is taken between slices: each slice loses half of it at each end.\n const pad = Math.max(\n 0,\n Math.min(((input.padAngle ?? 0) * Math.PI) / 180, sweep / Math.max(1, visible) / 2),\n );\n const closed = sweep >= TAU - 1e-9;\n const gaps = visible > 1 ? (closed ? visible : visible - 1) : 0;\n const usable = sweep - gaps * pad;\n // Angular span per slice: proportional, except that slices below `minAngle` are widened to\n // it and the others shrink to make room (a few passes, since shrinking can push more below).\n const minRad = Math.min(((input.minAngle ?? 0) * Math.PI) / 180, usable / Math.max(1, visible));\n const spans = shown.map((d) => (total > 0 ? (d.value / total) * usable : 0));\n if (minRad > 0)\n for (let pass = 0; pass < shown.length; pass++) {\n const forced = shown.map((d, i) => d.value > 0 && (spans[i] as number) < minRad);\n if (!forced.some(Boolean)) break;\n const fixed = forced.filter(Boolean).length * minRad;\n const free = shown.reduce((s, d, i) => s + (forced[i] || d.value <= 0 ? 0 : d.value), 0);\n shown.forEach((d, i) => {\n spans[i] = forced[i] ? minRad : free > 0 ? (d.value / free) * (usable - fixed) : 0;\n });\n if (!shown.some((d, i) => d.value > 0 && !forced[i] && (spans[i] as number) < minRad)) break;\n }\n const refs = toRefs(input.selected);\n let angle = start + (closed && gaps ? pad / 2 : 0);\n const labels: Shape[] = [];\n const connectors: Shape[] = [];\n const placed: number[] = [];\n const slices = shown.map((d, si): Shape => {\n const percent = total > 0 ? d.value / total : 0;\n const a0 = angle;\n const a1 = angle + (spans[si] as number);\n if (percent > 0) angle = a1 + pad;\n const share = percentFormat(percent);\n const title = `${d.name}: ${format(d.value)} (${share})`;\n const item: ChartItem = {\n label: title,\n id: d.id ?? d.name,\n name: d.name,\n index: d.i,\n value: d.value,\n };\n const mid = (a0 + a1) / 2;\n if (input.labels && percent > 0) {\n const text = `${d.name} ${share}`;\n if (outside) {\n // Outside labels sit past the rim with a connector; ones that would overlap are dropped.\n const sin = Math.sin(mid);\n const ly = px(cy - (r + 14) * Math.cos(mid));\n if (!placed.some((y) => Math.abs(y - ly) < 12)) {\n placed.push(ly);\n connectors.push({\n kind: 'line',\n part: 'label-connector',\n x1: px(cx + r * sin),\n y1: px(cy - r * Math.cos(mid)),\n x2: px(cx + (r + 12) * sin),\n y2: px(cy - (r + 12) * Math.cos(mid)),\n stroke: CHART_COLORS.axis,\n });\n labels.push(\n boundedLabel(px(cx + (r + 16) * sin), ly, text, width, {\n part: 'slice-label',\n anchor: sin > 0.1 ? 'start' : sin < -0.1 ? 'end' : 'middle',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-default)',\n }),\n );\n }\n } else if (percent > 0.03) {\n const lr = (r + r0) / 2;\n labels.push(\n boundedLabel(px(cx + lr * Math.sin(mid)), px(cy - lr * Math.cos(mid)), text, width, {\n part: 'slice-label',\n anchor: 'middle',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-on-accent)',\n }),\n );\n }\n }\n // A selected slice is pulled out from the centre along its middle angle.\n const pull = isSelected(item, undefined, refs) ? Math.max(4, r * 0.06) : 0;\n return {\n kind: 'path',\n part: 'slice',\n d:\n percent > 0\n ? roundedArc(\n cx + pull * Math.sin(mid),\n cy - pull * Math.cos(mid),\n r,\n r0,\n a0,\n a1,\n cornerRadius,\n )\n : '',\n fill: colorOf(input, d.i, d.color),\n title,\n item: percent > 0 ? item : 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(input, width, height, legend);\n return {\n ...c,\n shapes: withLabelSurfaces([...slices, ...connectors, ...c.shapes, ...labels]),\n issues,\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 { categoryValue, makeFormatter } from './format.js';\nimport { canvas, CHAR, colorOf, extent, size, stateCanvas } from './frame.js';\nimport { CHART_COLORS } from './palette.js';\nimport { finite, isFinite, linearScale, minMax, 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 winloss = variant === 'winloss';\n // The target and band widen the value range so they always land inside the strip.\n const plotted = [\n ...values,\n ...(input.band ?? []),\n ...(input.target !== undefined ? [input.target] : []),\n ];\n const y = linearScale(winloss ? [-1, 1] : extent(plotted, variant === 'bar'), [\n height - PAD,\n PAD,\n ]);\n // Even spacing, or proportional positions from `x` (numbers or dates) when given for every value.\n const xs = input.x && input.x.length >= n ? input.x.map(categoryValue) : undefined;\n const [x0, x1] = xs ? minMax(xs) : [0, 1];\n const xLin = linearScale([x0, x1], [PAD, right]);\n const x = (i: number) =>\n n < 2\n ? (PAD + right) / 2\n : xs\n ? x1 === x0\n ? (PAD + right) / 2\n : xLin(xs[i] as number)\n : 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 if (input.band && !winloss) {\n const [b0, b1] = input.band;\n const top = Math.min(y(b0), y(b1));\n shapes.push({\n kind: 'rect',\n part: 'band',\n x: PAD,\n y: px(top),\n width: px(Math.max(0, right - PAD)),\n height: px(Math.abs(y(b1) - y(b0))),\n fill: CHART_COLORS.axis,\n opacity: 0.12,\n title: `${format(Math.min(b0, b1))} – ${format(Math.max(b0, b1))}`,\n });\n }\n if (input.target !== undefined && isFinite(input.target) && !winloss)\n shapes.push({\n kind: 'line',\n part: 'target',\n x1: PAD,\n x2: px(right),\n y1: px(y(input.target)),\n y2: px(y(input.target)),\n stroke: CHART_COLORS.axis,\n dash: '3 2',\n title: `Target: ${format(input.target)}`,\n });\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' || winloss) {\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 // Win/loss: every bar is the same height, only the direction and colour carry the sign.\n const top = px(y(winloss ? Math.sign(v) : 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: winloss\n ? v < 0\n ? CHART_COLORS.negative\n : CHART_COLORS.positive\n : v < 0 && input.trend\n ? CHART_COLORS.negative\n : 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 (and, when asked, the first), drawn as a dot.\n const marks = input.markers ?? ['last'];\n if (tail && marks.includes('last')) shapes.push(point(tail.x, tail.y, 2, color, undefined));\n if (head && marks.includes('first'))\n shapes.push({ ...point(head.x, head.y, 2, color, undefined), part: 'first' });\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 { ...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\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, ChartDataIssue, RadarChartInput, RadarMetric, Shape } from './types.js';\n\n/**\n * One polygon per series over a spoke per metric. Scaling: `none` shares one scale (values are\n * comparable); `metric` scales every axis by its own min/max (unlike units, the default when\n * `metrics` carry bounds); `series` scales every series to its own maximum (the historical\n * `normalize: true`, which only shows shape, never magnitude, and is reported as such).\n */\nexport function layoutRadarChart(input: RadarChartInput): Canvas {\n const metrics: RadarMetric[] =\n input.metrics ?? (input.categories ?? []).map((label) => ({ label }));\n const state = stateCanvas(\n input,\n metrics.length === 0 || input.series.every((s) => finite(s.data).length === 0),\n 300,\n 300,\n );\n if (state) return state;\n const issues: ChartDataIssue[] = [];\n const format = makeFormatter(input.format);\n const { width, height } = size(input, 300, 300);\n const legend = input.series.map((s, i) => ({ name: s.name, color: colorOf(input, i, s.color) }));\n const top = legendTop(input, legend, width);\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 = metrics.length;\n const start = ((input.startAngle ?? 0) * Math.PI) / 180 - Math.PI / 2;\n const angle = (i: number) => start + (i * 2 * Math.PI) / Math.max(1, n);\n const shown = input.series.filter((s) => !isHidden(input, s.name));\n const mode =\n input.normalize === true\n ? 'series'\n : input.normalize === false || input.normalize === undefined\n ? input.metrics\n ? 'metric'\n : 'none'\n : input.normalize;\n if (mode === 'series' && shown.length > 1)\n issues.push({\n code: 'misleading-scale',\n severity: 'warning',\n message:\n \"normalize: 'series' scales each series to its own maximum, so polygons cannot be compared in magnitude; prefer 'metric' or 'none'.\",\n });\n const levels = Math.max(1, Math.round(input.levels ?? 4));\n // Shared scale: nice ticks over the largest value (or `max`).\n const sharedMax = input.max ?? Math.max(0, minMax(shown.flatMap((s) => s.data))[1]);\n const ticks =\n mode === 'none'\n ? niceTicks(0, sharedMax, levels)\n : Array.from({ length: levels + 1 }, (_, i) => (100 * i) / levels);\n const max = mode === 'none' ? (input.max ?? (ticks[ticks.length - 1] as number)) : 100;\n // Per-metric bounds: explicit, else the data extent on that axis, floored at zero.\n const bounds = metrics.map((m, i) => {\n const values = shown.map((s) => s.data[i]);\n const [lo, hi] = minMax(values);\n const min = m.min ?? Math.min(0, lo);\n const nice = niceTicks(min, m.max ?? hi, levels);\n return { min, max: m.max ?? (nice[nice.length - 1] as number) };\n });\n const seriesMax = input.series.map((s) => Math.max(0, minMax(s.data)[1]));\n // A value on axis `i` of series `si`, on the 0–max ring scale.\n const norm = (si: number, i: number, v: number): number => {\n if (mode === 'series')\n return (seriesMax[si] as number) > 0 ? (v / (seriesMax[si] as number)) * 100 : 0;\n if (mode === 'metric') {\n const b = bounds[i] as { min: number; max: number };\n return b.max > b.min ? ((v - b.min) / (b.max - b.min)) * 100 : 0;\n }\n return v;\n };\n const at = (i: number, value: number) => {\n const r = max > 0 ? (Math.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${metrics\n .map((_, i) => {\n const p = at(i, value(i));\n return `${p.x} ${p.y}`;\n })\n .join('L')}Z`;\n const ring = (t: number): Shape => {\n if (input.gridShape === 'circle') {\n const r = max > 0 ? (t / max) * radius : 0;\n return {\n kind: 'circle',\n part: 'grid',\n cx: px(cx),\n cy: px(cy),\n r: px(r),\n fill: 'none',\n stroke: CHART_COLORS.grid,\n };\n }\n return { kind: 'path', part: 'grid', d: polygon(() => t), stroke: CHART_COLORS.grid };\n };\n\n // Concentric grid rings, one per tick, innermost first, then a spoke per metric.\n const rings = ticks.filter((t) => t > 0 && t <= max);\n const ringLabel = (t: number) =>\n mode === 'none'\n ? format(t)\n : mode === 'series'\n ? `${t}%`\n : (() => {\n // Per-metric scale: the first axis' value at this ring.\n const b = bounds[0] as { min: number; max: number };\n return makeFormatter(metrics[0]?.format ?? input.format)(\n b.min + ((b.max - b.min) * t) / 100,\n );\n })();\n const grid: Shape[] = [\n ...rings.map(ring),\n ...metrics.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, ringLabel(t), { part: 'y-label', baseline: 'middle' }),\n ),\n ...metrics.map((m, 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))), m.label, {\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 const texts: Shape[] = [];\n const markers = input.markers ?? true;\n const markerSize = input.markerSize ?? 3;\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) ? norm(si, i, v) : 0;\n };\n metrics.forEach((m, i) => {\n const raw = s.data[i];\n if (!isFinite(raw)) return;\n const f = makeFormatter(m.format ?? input.format);\n const p = at(i, norm(si, i, raw));\n const title = markTitle(s.name, m.label, raw, f);\n points.push({\n ...point(p.x, p.y, markers ? markerSize : 0.01, color, title, {\n label: title,\n id: m.id,\n series: s.name,\n seriesId: s.id,\n category: m.label,\n index: i,\n value: raw,\n }),\n // Invisible anchors keep the tooltip and keyboard stop when markers are off.\n part: markers ? 'point' : 'anchor',\n });\n if (input.labels)\n texts.push(\n label(p.x, px(p.y - 7), f(raw), {\n part: 'value-label',\n anchor: 'middle',\n fill: 'var(--skdx-color-text-default)',\n }),\n );\n });\n polygons.push({\n kind: 'path',\n part: 'area',\n d: polygon(value),\n fill: (input.fill ?? true) ? color : undefined,\n fillOpacity: 0.25,\n stroke: color,\n strokeWidth: 2,\n title: s.name,\n item: { label: s.name, series: s.name, seriesId: s.id },\n });\n });\n\n const c = canvas(input, width, height, legend);\n return { ...c, shapes: [...grid, ...polygons, ...points, ...texts, ...c.shapes], issues };\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 { colorLegendRoom, colorLegendShapes, makeColorScale } from './colors.js';\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 {\n CalendarCell,\n Canvas,\n ChartDataIssue,\n ColorScale,\n HeatmapInput,\n Shape,\n Value,\n} 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; weeks start on Monday unless asked. */\nexport function calendarMatrix(\n cells: CalendarCell[],\n weekStart: 'monday' | 'sunday' = 'monday',\n): {\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 rows = weekStart === 'sunday' ? [WEEKDAYS[6] as string, ...WEEKDAYS.slice(0, 6)] : WEEKDAYS;\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 { rows, columns: [], data: rows.map(() => []), dates: rows.map(() => []) };\n const [first, last] = minMax(days.map((d) => d.day));\n // Epoch day 0 (1970-01-01) was a Thursday: +3 for Monday-based rows, +4 for Sunday-based.\n const shift = weekStart === 'sunday' ? 4 : 3;\n const weekday = (day: number) => (((day + shift) % 7) + 7) % 7;\n const startWeek = first - weekday(first);\n const weeks = Math.floor((last - startWeek) / 7) + 1;\n const data: Value[][] = rows.map(() => new Array<Value>(weeks).fill(null));\n const dates = rows.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, columns, data, dates };\n}\n\n/** The scale the legacy `color`/`diverging`/`steps`/`domain` props describe, unless a `colorScale` is given. */\nconst scaleOf = (input: HeatmapInput): ColorScale =>\n input.colorScale ??\n (input.diverging\n ? { type: 'diverging', steps: input.steps }\n : { type: 'sequential', domain: input.domain, steps: input.steps });\n\n/** Indexes of `sums` in the asked order, or in place. */\nconst order = (sums: number[], dir: 'asc' | 'desc' | undefined): number[] => {\n const idx = sums.map((_, i) => i);\n if (dir)\n idx.sort((a, b) => (dir === 'asc' ? 1 : -1) * ((sums[a] as number) - (sums[b] as number)));\n return idx;\n};\n\nexport function layoutHeatmap(input: HeatmapInput): Canvas {\n const issues: ChartDataIssue[] = [];\n const cal = input.calendar ? calendarMatrix(input.calendar, input.weekStart) : undefined;\n const rows0 = cal?.rows ?? input.rows ?? [];\n const columns0 = cal?.columns ?? input.columns ?? [];\n const data0 = cal?.data ?? input.data ?? [];\n if (!cal && (data0.length !== rows0.length || data0.some((r) => r.length !== columns0.length)))\n issues.push({\n code: 'ragged-matrix',\n severity: 'warning',\n message: `The matrix is ${data0.length} × ${data0[0]?.length ?? 0} but there are ${rows0.length} rows and ${columns0.length} columns; missing cells are blank.`,\n });\n const bad = data0.flat().filter((v) => v !== null && v !== undefined && !isFinite(v)).length;\n if (bad)\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `${bad} cell${bad === 1 ? ' is' : 's are'} neither a number nor null; drawn as blank.`,\n });\n const all = data0.flat();\n const state = stateCanvas(\n input,\n rows0.length === 0 || columns0.length === 0 || !all.some(isFinite),\n );\n if (state) return { ...state, issues };\n const format = makeFormatter(input.format);\n const { width, height } = size(input);\n const legendRoom = colorLegendRoom(input.colorLegend);\n const plot = plotBox(width, height, {\n ...MARGIN,\n left: cal ? 40 : MARGIN.left,\n right: MARGIN.right + legendRoom.right,\n bottom: MARGIN.bottom + legendRoom.bottom,\n });\n // Rows and columns are reordered by their sums when asked; labels and dates follow.\n const sum = (values: (Value | undefined)[]) =>\n values.reduce<number>((s, v) => s + (isFinite(v) ? v : 0), 0);\n const ri = order(\n rows0.map((_, r) => sum(data0[r] ?? [])),\n input.rowOrder,\n );\n const ci = order(\n columns0.map((_, c) => sum(data0.map((r) => r[c]))),\n input.columnOrder,\n );\n const rows = ri.map((r) => rows0[r] as string);\n const columns = ci.map((c) => columns0[c] as string);\n const cellW = plot.width / Math.max(1, columns.length);\n const cellH = plot.height / Math.max(1, rows.length);\n const colors = makeColorScale(\n scaleOf(input),\n all,\n colorOf(input, 0, input.color),\n input.negativeColor,\n format,\n );\n const cells: Shape[] = [];\n const texts: Shape[] = [];\n const gap = input.cellGap ?? (cal ? 1 : 0);\n const rx = input.cellRadius ?? (cal ? 2 : 0);\n rows.forEach((row, r) => {\n columns.forEach((column, c) => {\n const value = data0[ri[r] as number]?.[ci[c] as number];\n const date = cal?.dates[ri[r] as number]?.[ci[c] as number];\n const where = cal ? (date ?? row) : `${row}, ${column}`;\n const x = px(plot.x + c * cellW + gap);\n const y = px(plot.y + r * cellH + gap);\n const box = {\n x,\n y,\n width: px(Math.max(0, cellW - 2 * gap)),\n height: px(Math.max(0, cellH - 2 * gap)),\n rx: rx || undefined,\n };\n if (!isFinite(value)) {\n if (input.missingColor && (!cal || date))\n cells.push({\n kind: 'rect',\n part: 'missing',\n ...box,\n fill: input.missingColor,\n title: `${where}: —`,\n });\n return;\n }\n const fill = colors.color(value) as { fill: string; opacity: number };\n const title = `${where}: ${format(value)}`;\n cells.push({\n kind: 'rect',\n part: 'cell',\n ...box,\n fill: fill.fill,\n opacity: fill.opacity,\n title,\n item: {\n label: title,\n id: cal ? date : `${row}:${column}`,\n category: column,\n name: row,\n index: c,\n value,\n },\n });\n if (input.labels && cellW > 24 && cellH > 12)\n texts.push(\n label(px(plot.x + (c + 0.5) * cellW), px(plot.y + (r + 0.5) * cellH), format(value), {\n part: 'cell-label',\n anchor: 'middle',\n baseline: 'middle',\n // The cell composites its fill over the surface at the ramp's opacity: a faint cell\n // is mostly surface and reads with the default text token, a strong one is the fill\n // and needs the token meant to sit on it. A fixed token fails one end or the other.\n fill:\n fill.opacity >= 0.5\n ? 'var(--skdx-color-text-on-accent)'\n : 'var(--skdx-color-text-default)',\n }),\n );\n });\n });\n const c = canvas(input, width, height);\n const legend = input.colorLegend\n ? colorLegendShapes(\n colors,\n legendRoom.right\n ? { x: plot.x + plot.width + 12, y: plot.y, width: legendRoom.right, height: plot.height }\n : {\n x: plot.x,\n y: plot.y + plot.height + 8,\n width: plot.width,\n height: legendRoom.bottom,\n },\n legendRoom.options,\n )\n : [];\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 ...legend,\n ...c.shapes,\n ],\n issues,\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, CHAR, colorOf, legendTop, size, stateCanvas } from './frame.js';\nimport { isFinite, px } from './scale.js';\nimport { boundedLabel } from './shapes.js';\nimport type { Canvas, ChartDataIssue, FunnelChartInput, Shape } from './types.js';\n\nconst PAD = 8;\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 const issues: ChartDataIssue[] = [];\n // A pyramid widens toward its base: smallest stage first, shares of the total instead of conversion.\n const sort = input.sort ?? (pyramid ? 'asc' : undefined);\n const data = input.data\n .filter((d) => {\n if (isFinite(d.value)) return true;\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `Stage \"${d.name}\" has no valid value and was dropped.`,\n itemId: d.id ?? d.name,\n });\n return false;\n })\n .sort((a, b) => (sort === 'asc' ? a.value - b.value : sort === 'desc' ? b.value - a.value : 0));\n const state = stateCanvas(input, data.length === 0, 400, 300);\n if (state) return { ...state, issues };\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 gap = Math.max(0, input.gap ?? 4);\n const labelPosition = input.labelPosition ?? 'inside';\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 legend = data.map((d, i) => ({ name: d.name, color: colorOf(input, i, d.color) }));\n const offset = legendTop(input, legend, width);\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 // Outside labels take the right (or bottom) third of the across axis.\n const outside = labelPosition === 'outside';\n const full = Math.max(0, (outside ? (across * 2) / 3 : across) - 2 * PAD);\n const stageLen = n === 0 ? 0 : (along - 2 * PAD) / n;\n // The neck keeps the narrowest stage readable: widths run from `neck × full` to `full`.\n const neck = Math.max(0, Math.min(1, input.neckWidth ?? 0));\n const widthOf = (value: number) =>\n max > 0 ? (neck + (1 - neck) * (Math.max(0, value) / max)) * full : 0;\n const percentFormat = input.percentFormat\n ? makeFormatter(input.percentFormat)\n : (p: number) => `${Math.round(p * 100)}%`;\n const mid =\n (horizontal ? offset + (height - offset) / 2 : width / 2) - (outside ? across / 6 : 0);\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 change = previous !== undefined && previous > 0 ? d.value / previous - 1 : 0;\n const drop =\n !pyramid && previous !== undefined && previous > 0\n ? ` · ${change < 0 ? '−' : change > 0 ? '+' : ''}${percentFormat(Math.abs(change))} from ${data[i - 1]?.name}`\n : '';\n const title = `${d.name}: ${format(d.value)} (${percentFormat(percent)})${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 const stage: Shape = {\n kind: 'path',\n part: 'stage',\n d: d0,\n fill: colorOf(input, i, d.color),\n title,\n item: { label: title, id: d.id ?? d.name, name: d.name, index: i, value: d.value },\n };\n if (labelPosition === 'none') return [stage];\n const text = `${d.name} · ${format(d.value)}`;\n const center = (p0 + p1) / 2;\n if (outside) {\n // Beside the stage: below it when horizontal, to its right otherwise, in the text color.\n const at = mid + full / 2 + PAD;\n return [\n stage,\n boundedLabel(px(horizontal ? center : at), px(horizontal ? at : center), text, width, {\n part: 'stage-label',\n anchor: horizontal ? 'middle' : 'start',\n baseline: horizontal ? 'hanging' : 'middle',\n fill: 'var(--skdx-color-text-default)',\n }),\n ];\n }\n const caption = boundedLabel(\n px(horizontal ? center : mid),\n px(horizontal ? mid : center),\n text,\n width,\n {\n part: 'stage-label',\n anchor: 'middle',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-default)',\n },\n );\n return [\n stage,\n // A stage can be narrower than its label, and arbitrary series colors\n // cannot guarantee contrast. Keep the bounded label on a token surface.\n {\n kind: 'rect',\n part: 'stage-label-background',\n x: px(caption.x - (caption.text.length * CHAR + 8) / 2),\n y: px((horizontal ? mid : center) - 9),\n width: caption.text.length * CHAR + 8,\n height: 18,\n rx: 8,\n fill: 'var(--skdx-color-surface-default)',\n },\n caption,\n ];\n });\n const c = canvas(input, width, height, legend);\n return { ...c, shapes: [...stages, ...c.shapes], issues };\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 legend = data.map((d, i) => ({ name: d.name, color: colorOf(input, i, d.color) }));\n const top = legendTop(input, legend, width);\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\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, id: d.id, 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 { makeFormatter } from './format.js';\nimport { canvas, CHAR, colorOf, 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 { Band, Canvas, GaugeChartInput, Shape } from './types.js';\n\nconst rad = (deg: number) => (deg * Math.PI) / 180;\n\n/** Bounding box of the unit arc (plus the centre) from `a0` to `a1`, radians clockwise from 12 o'clock. */\nfunction arcBounds(a0: number, a1: number): { x0: number; y0: number; x1: number; y1: number } {\n const xs = [0];\n const ys = [0];\n const add = (a: number) => {\n xs.push(Math.sin(a));\n ys.push(-Math.cos(a));\n };\n add(a0);\n add(a1);\n // Every axis crossing inside the sweep is an extreme of the arc.\n for (let k = Math.ceil(a0 / (Math.PI / 2)); k * (Math.PI / 2) <= a1; k++) add(k * (Math.PI / 2));\n return { x0: Math.min(...xs), y0: Math.min(...ys), x1: Math.max(...xs), y1: Math.max(...ys) };\n}\n\n/**\n * One reading on an arc scale: a needle over threshold bands (`radial`), or the arc filled up to\n * the value (`solid`). `startAngle`/`endAngle` open or close the arc; `-90`/`90` is a semi-circle.\n */\nexport function layoutGaugeChart(input: GaugeChartInput): Canvas {\n const state = stateCanvas(input, !isFinite(input.value), 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 min = isFinite(input.min) ? input.min : 0;\n const max = isFinite(input.max) ? input.max : 100;\n const startDeg = input.startAngle ?? -120;\n const endDeg = input.endAngle ?? 120;\n const start = rad(startDeg);\n const end = rad(Math.max(startDeg, Math.min(startDeg + 360, endDeg)));\n const sweep = end - start;\n // A degenerate scale (min === max) has no direction: everything sits at the start.\n const ratio = (v: number) => (max > min ? Math.max(0, Math.min(1, (v - min) / (max - min))) : 0);\n const angleOf = (v: number) => start + ratio(v) * sweep;\n const solid = input.variant === 'solid';\n const tickCount =\n input.ticks === false ? 0 : input.ticks === true || input.ticks === undefined ? 5 : input.ticks;\n const tickLabels = input.tickLabels ?? true;\n\n // Fit the arc's bounding box into the canvas, leaving room for the tick labels around it:\n // their height above and below, their width at the sides.\n const tickValues = Array.from({ length: tickCount }, (_, i) =>\n tickCount === 1 ? min : min + ((max - min) * i) / (tickCount - 1),\n );\n const labelled = tickCount > 0 && tickLabels;\n const widest = labelled ? Math.max(...tickValues.map((v) => format(v).length)) * CHAR : 0;\n const padX = labelled ? 14 + widest : 10;\n const padY = labelled ? 26 : 10;\n const b = arcBounds(start, end);\n const bw = Math.max(b.x1 - b.x0, 0.2);\n const bh = Math.max(b.y1 - b.y0, 0.2);\n const r = Math.max(0, Math.min((width - 2 * padX) / bw, (height - top - 2 * padY) / bh));\n const cx = width / 2 - ((b.x0 + b.x1) / 2) * r;\n const cy = top + (height - top) / 2 - ((b.y0 + b.y1) / 2) * r;\n const thick = r * Math.max(0.04, Math.min(0.6, input.thickness ?? 0.18));\n const r0 = r - thick;\n const at = (radius: number, a: number) => ({\n x: px(cx + radius * Math.sin(a)),\n y: px(cy - radius * Math.cos(a)),\n });\n const shapes: Shape[] = [];\n const range = `${format(min)} – ${format(max)}`;\n const bands = (input.bands ?? []).filter((band) => isFinite(band.from) && isFinite(band.to));\n const bandOf = (v: number) => bands.find((band) => v >= band.from && v <= band.to);\n const bandColor = (band: Band) => band.color ?? variantColor(band.variant);\n\n // The track: the full arc in the grid colour, or the bands themselves on a radial gauge.\n shapes.push({\n kind: 'path',\n part: 'track',\n d: arc(cx, cy, r, r0, start, end),\n fill: CHART_COLORS.grid,\n opacity: 0.6,\n });\n for (const band of bands) {\n const a0 = angleOf(Math.min(band.from, band.to));\n const a1 = angleOf(Math.max(band.from, band.to));\n if (a1 <= a0) continue;\n const title = `${band.label ? `${band.label}: ` : ''}${format(band.from)} – ${format(band.to)}`;\n shapes.push(\n solid\n ? {\n kind: 'path',\n part: 'band',\n d: arc(cx, cy, r + 6, r + 2, a0, a1),\n fill: bandColor(band),\n opacity: 0.7,\n title,\n }\n : {\n kind: 'path',\n part: 'band',\n d: arc(cx, cy, r, r0, a0, a1),\n fill: bandColor(band),\n opacity: 0.75,\n title,\n },\n );\n }\n\n const valueTitle = `${input.caption ?? 'Value'}: ${format(input.value)} (${range})`;\n const item = { label: valueTitle, name: input.caption, value: input.value };\n const a = angleOf(input.value);\n if (solid) {\n const band = bandOf(input.value);\n const fill = band ? bandColor(band) : colorOf(input, 0);\n if (a > start + 1e-6)\n shapes.push({\n kind: 'path',\n part: 'value',\n d: arc(cx, cy, r, r0, start, a),\n fill,\n title: valueTitle,\n item,\n });\n else\n // Nothing to fill at the start: an invisible anchor keeps the tooltip and keyboard stop.\n shapes.push({ ...point(cx, cy), title: valueTitle, item });\n } else {\n const tip = at(r0 - 4, a);\n const base = 4;\n const left = at(base, a - Math.PI / 2);\n const right = at(base, a + Math.PI / 2);\n shapes.push(\n {\n kind: 'path',\n part: 'needle',\n d: `M${left.x} ${left.y}L${tip.x} ${tip.y}L${right.x} ${right.y}Z`,\n fill: 'var(--skdx-color-text-default)',\n title: valueTitle,\n item,\n },\n {\n kind: 'circle',\n part: 'hub',\n cx: px(cx),\n cy: px(cy),\n r: 5,\n fill: 'var(--skdx-color-text-default)',\n },\n );\n }\n\n // Ticks around the outside, the first at `min` and the last at `max`.\n for (const v of tickValues) {\n const ta = angleOf(v);\n const p0 = at(r + 2, ta);\n const p1 = at(r + 7, ta);\n shapes.push({\n kind: 'line',\n part: 'tick',\n x1: p0.x,\n y1: p0.y,\n x2: p1.x,\n y2: p1.y,\n stroke: CHART_COLORS.axis,\n });\n if (tickLabels) {\n const p = at(r + 12, ta);\n const cos = Math.sin(ta);\n shapes.push(\n label(p.x, p.y, format(v), {\n part: 'tick-label',\n anchor: cos > 0.3 ? 'start' : cos < -0.3 ? 'end' : 'middle',\n baseline: 'middle',\n }),\n );\n }\n }\n\n if (isFinite(input.target)) {\n const ta = angleOf(input.target);\n const p0 = at(r0 - 2, ta);\n const p1 = at(r + 4, ta);\n shapes.push({\n kind: 'line',\n part: 'target',\n x1: p0.x,\n y1: p0.y,\n x2: p1.x,\n y2: p1.y,\n stroke: 'var(--skdx-color-text-default)',\n strokeWidth: 2,\n title: `Target: ${format(input.target)}`,\n });\n }\n\n // The reading in the middle: low in the gap of an open arc, inside the bowl of a semi-circle\n // (whose centre is on the bottom edge), centred otherwise.\n const open = sweep < 2 * Math.PI - 1e-6;\n const textY = !open ? cy : b.y1 < 0.2 ? cy - r0 * 0.4 : cy + r0 * 0.45;\n shapes.push(\n label(px(cx), px(textY), input.centerLabel ?? format(input.value), {\n part: 'center-label',\n anchor: 'middle',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-default)',\n weight: 'bold',\n }),\n );\n if (input.caption)\n shapes.push(\n label(px(cx), px(textY + 16), input.caption, {\n part: 'caption',\n anchor: 'middle',\n baseline: 'middle',\n }),\n );\n\n const c = canvas(input, width, height);\n const target = isFinite(input.target) ? `, target ${format(input.target)}` : '';\n return {\n ...c,\n description:\n input.description ??\n `${input.caption ?? 'Value'} ${format(input.value)} on a scale from ${format(min)} to ${format(max)}${target}.`,\n shapes: [...shapes, ...c.shapes],\n };\n}\n\nconst point = (cx: number, cy: number): Shape => ({\n kind: 'circle',\n part: 'anchor',\n cx: px(cx),\n cy: px(cy),\n r: 0.01,\n fill: 'none',\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 { isFinite } from './scale.js';\nimport { layoutPoints } from './scatter.js';\nimport type { BubbleChartInput, Canvas } from './types.js';\n\n/**\n * Three quantities per mark: x, y and a magnitude the bubble's area is proportional to\n * (radius ∝ √z), floored at the smallest radius so tiny values stay visible. Negative\n * magnitudes count as zero; `NaN` magnitudes draw the smallest bubble.\n */\nexport function layoutBubbleChart(input: BubbleChartInput): Canvas {\n const [rMin, rMax] = input.sizeRange ?? [4, 24];\n const zFormat = makeFormatter(input.zAxis?.format ?? input.format);\n const zName = input.zAxis?.label;\n const xName = input.xAxis?.label;\n const yName = input.yAxis?.label;\n const named = (name: string | undefined, text: string) => (name ? `${name} ${text}` : text);\n return layoutPoints(\n {\n ...input,\n series: input.series.map((s) => ({\n name: s.name,\n id: s.id,\n color: s.color,\n data: s.data\n .filter((p) => isFinite(p.x) && isFinite(p.y))\n .map((p) => ({\n x: p.x,\n y: p.y,\n size: isFinite(p.z) ? Math.max(0, p.z) : 0,\n label: p.label,\n id: p.id,\n color: p.color,\n value: p.value ?? p.z,\n })),\n })),\n },\n {\n part: 'bubble',\n opacity: 0.7,\n radius: (z, [, zMax]) =>\n zMax > 0 && isFinite(z) ? Math.max(rMin, Math.sqrt(z / zMax) * rMax) : rMin,\n describe: (name, dot, x, y) =>\n `${name}${dot.label ? ` ${dot.label}` : ''}: ${named(xName, x.format(dot.x))}, ${named(yName, y.format(dot.y))}, ${named(zName, zFormat(dot.size ?? 0))}`,\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 { binEdges, binSamples } from './bins.js';\nimport { layoutCartesian } from './cartesian.js';\nimport { makeFormatter } from './format.js';\nimport { stateCanvas } from './frame.js';\nimport { finite } from './scale.js';\nimport type { Canvas, HistogramInput } from './types.js';\n\n/**\n * The distribution of a raw sample: equal-width bins by count or width (Sturges by default), or\n * explicit `thresholds`. Bars measure counts, density (area sums to 1) or shares of the sample.\n * Bins render as categories, so unequal `thresholds` bins are equally wide; density corrects for that.\n */\nexport function layoutHistogram(input: HistogramInput): Canvas {\n const samples = finite(input.data);\n const state = stateCanvas(input, samples.length === 0);\n if (state) return state;\n const edges = binEdges(samples, {\n bins: input.bins,\n binWidth: input.binWidth,\n domain: input.domain,\n thresholds: input.thresholds,\n });\n const bins = binSamples(samples, edges);\n const inside = bins.reduce((s, b) => s + b.count, 0);\n const mode = input.mode ?? 'count';\n const xFormat = makeFormatter(input.xAxis?.format ?? input.format);\n const yFormat = makeFormatter(\n mode === 'percent'\n ? { style: 'percent', digits: 1 }\n : mode === 'density'\n ? { style: 'decimal', digits: 3 }\n : input.format,\n );\n const name =\n input.name ?? (mode === 'density' ? 'Density' : mode === 'percent' ? 'Share' : 'Count');\n const measure = (b: (typeof bins)[number]) =>\n mode === 'density'\n ? inside > 0 && b.x1 > b.x0\n ? b.count / (inside * (b.x1 - b.x0))\n : 0\n : mode === 'percent'\n ? inside > 0\n ? b.count / inside\n : 0\n : b.count;\n const categories = bins.map((b) => `${xFormat(b.x0)}–${xFormat(b.x1)}`);\n const canvas = layoutCartesian(\n {\n ...input,\n format: yFormat,\n series: [{ name, data: bins.map(measure), color: input.color }],\n categories,\n xAxis: input.xAxis?.label ? { label: input.xAxis.label } : undefined,\n barGap: input.barGap ?? 0.05,\n transform: undefined,\n },\n 'bar',\n );\n // Tooltips name the bin, its observations and their share of the sample.\n const shapes = canvas.shapes.map((s, i) => {\n if (s.part !== 'bar' || !s.item || s.item.index === undefined) return s;\n const b = bins[s.item.index];\n if (!b) return s;\n const share = inside > 0 ? ` (${Math.round((b.count / inside) * 1000) / 10}%)` : '';\n const text = `${categories[s.item.index] ?? String(i)}: ${b.count}${share}${mode === 'count' ? '' : ` · ${name} ${yFormat(measure(b))}`}`;\n return {\n ...s,\n title: s.title === undefined ? undefined : text,\n item: { ...s.item, label: text },\n };\n });\n const rows = canvas.hit?.rows.map((row, i) => {\n const b = bins[i];\n return b\n ? [row[0] as string, `${name}: ${yFormat(measure(b))}`, `Observations: ${b.count}`]\n : row;\n });\n return { ...canvas, shapes, hit: canvas.hit && rows ? { ...canvas.hit, rows } : canvas.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 CHAR,\n colorOf,\n isHidden,\n legendTop,\n MARGIN,\n plotBox,\n size,\n stateCanvas,\n thinTicks,\n} from './frame.js';\nimport { CHART_COLORS, variantColor } from './palette.js';\nimport { bandScale, isFinite, minMax, px } from './scale.js';\nimport { frameShapes, label } from './shapes.js';\nimport type { Band, BulletChartInput, BulletDatum, Canvas, Shape } from './types.js';\n\n/** Qualitative ranges as ascending bands from the scale start. */\nfunction bandsOf(ranges: (number | Band)[] | undefined, from: number): Band[] {\n const out: Band[] = [];\n let last = from;\n for (const r of ranges ?? []) {\n const band: Band = typeof r === 'number' ? { from: last, to: r } : r;\n if (!isFinite(band.to)) continue;\n out.push(band);\n last = band.to;\n }\n return out;\n}\n\n/**\n * A measure against a target over qualitative ranges (Few's bullet graph): one row per KPI,\n * or one column when vertical. Reads compactly in dashboard cards where a gauge would not fit.\n */\nexport function layoutBulletChart(input: BulletChartInput): Canvas {\n const data = input.data.filter((d) => isFinite(d.value));\n const state = stateCanvas(\n input,\n data.length === 0,\n 600,\n 40 + 44 * Math.max(1, input.data.length),\n );\n if (state) return state;\n const format = makeFormatter(input.format);\n const vertical = input.orientation === 'vertical';\n const { width, height } = size(input, 600, vertical ? 300 : 40 + 44 * data.length);\n const rangeOf = (d: BulletDatum) => d.ranges ?? input.ranges;\n const all = data.flatMap((d) => [\n d.value,\n d.target,\n ...(rangeOf(d) ?? []).map((r) => (typeof r === 'number' ? r : r.to)),\n ]);\n const [lo, hi] = minMax(all);\n const min = input.min ?? Math.min(0, lo);\n const widest = Math.max(0, ...data.map((d) => d.name.length)) * CHAR;\n const plot = plotBox(width, height, {\n top: MARGIN.top + legendTop(input),\n right: input.labels && !vertical ? 56 : MARGIN.right,\n bottom: MARGIN.bottom,\n left: vertical ? MARGIN.left : Math.max(MARGIN.left, widest + 16),\n });\n const valueRange: readonly [number, number] = vertical\n ? [plot.y + plot.height, plot.y]\n : [plot.x, plot.x + plot.width];\n const scale = axis(\n [min, Math.max(min, hi)],\n valueRange,\n { min, max: input.max, ticks: input.ticks },\n input.format,\n );\n const rows = bandScale(\n data.length,\n vertical ? [plot.x, plot.x + plot.width] : [plot.y, plot.y + plot.height],\n 0.3,\n );\n const c = canvas(input, width, height);\n const categoryTicks = data.map((d, i) => ({ pos: px(rows.center(i)), label: d.name }));\n const shapes: Shape[] = frameShapes(\n {\n ...c,\n plot,\n xTicks: vertical ? thinTicks(categoryTicks, plot.width) : categoryTicks,\n yTicks: vertical ? scale.ticks : thinTicks(scale.ticks, plot.width),\n baseline: vertical ? scale.zero : scale.zero,\n },\n { horizontal: !vertical },\n );\n\n // A rect along the value axis spanning `[v0, v1]`, `t` thick, centred at the row's `mid`.\n const bar = (\n v0: number,\n v1: number,\n mid: number,\n t: number,\n extra: Omit<Extract<Shape, { kind: 'rect' }>, 'kind' | 'x' | 'y' | 'width' | 'height'>,\n ): Shape => {\n const a = scale.scale(v0);\n const b = scale.scale(v1);\n const len = Math.max(1, Math.abs(b - a));\n return vertical\n ? {\n kind: 'rect',\n x: px(mid - t / 2),\n y: px(Math.min(a, b)),\n width: px(t),\n height: px(len),\n ...extra,\n }\n : {\n kind: 'rect',\n x: px(Math.min(a, b)),\n y: px(mid - t / 2),\n width: px(len),\n height: px(t),\n ...extra,\n };\n };\n\n data.forEach((d, i) => {\n if (isHidden(input, d.name)) return;\n const mid = rows.center(i);\n const full = rows.bandwidth;\n const bands = bandsOf(rangeOf(d), min);\n bands.forEach((band, bi) => {\n const title = `${d.name} ${band.label ?? `range ${bi + 1}`}: ${format(band.from)} – ${format(band.to)}`;\n shapes.push(\n bar(band.from, band.to, mid, full, {\n part: 'range',\n fill: band.color ?? (band.variant ? variantColor(band.variant) : CHART_COLORS.axis),\n opacity: band.variant || band.color ? 0.25 : Math.max(0.1, 0.4 - bi * 0.1),\n title,\n }),\n );\n });\n const target = isFinite(d.target) ? ` · target ${format(d.target)}` : '';\n const inBand = bands.find((band) => d.value >= band.from && d.value <= band.to);\n const title = `${d.name}: ${format(d.value)}${target}${inBand?.label ? ` (${inBand.label})` : ''}`;\n shapes.push(\n bar(Math.min(min, d.value), d.value, mid, full / 3, {\n part: 'measure',\n fill: colorOf(input, i, d.color),\n title,\n item: { label: title, id: d.id, name: d.name, index: i, value: d.value },\n }),\n );\n if (isFinite(d.target)) {\n const t = px(scale.scale(d.target));\n shapes.push({\n kind: 'line',\n part: 'target',\n x1: vertical ? px(mid - full / 2.5) : t,\n x2: vertical ? px(mid + full / 2.5) : t,\n y1: vertical ? t : px(mid - full / 2.5),\n y2: vertical ? t : px(mid + full / 2.5),\n stroke: 'var(--skdx-color-text-default)',\n strokeWidth: 3,\n title: `${d.name} target: ${format(d.target)}`,\n });\n }\n if (input.labels) {\n // Past the target mark when the target is beyond the value, so the two never overlap.\n const v = scale.scale(isFinite(d.target) ? Math.max(d.value, d.target) : d.value);\n shapes.push(\n vertical\n ? label(px(mid), px(v - 6), format(d.value), { part: 'value-label', anchor: 'middle' })\n : label(px(v + 6), px(mid), format(d.value), { part: 'value-label', baseline: 'middle' }),\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 { layoutCartesian } from './cartesian.js';\nimport type { Canvas, ChartInput } from './types.js';\n\n/**\n * Bars, lines, areas and ranges on one category axis: every series declares its `type`, so a\n * revenue bar and a margin line (on `axis: 'right'`) share the frame, legend and crosshair.\n * `ComboChartInput` (the public props) requires a `type` per series so nothing but cartesian\n * series can be passed; the layout itself takes any cartesian input so the framework roots'\n * shared cartesian prop sets can call it.\n */\nexport const layoutComboChart = (input: ChartInput): 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 { Canvas, RangeChartInput } from './types.js';\n\n/**\n * Low–high intervals per category: a shaded band (`area`), floating bars (`bar`) or two\n * outlines (`line`). Inverted intervals (`low > high`) are normalized, equal ends draw a hairline,\n * and a missing end is a gap.\n */\nexport function layoutRangeChart(input: RangeChartInput): Canvas {\n const style = input.variant ?? 'area';\n return layoutCartesian(\n {\n ...input,\n series: input.series.map((s) => ({\n type: 'range',\n name: s.name,\n low: s.low,\n high: s.high,\n color: s.color,\n axis: s.axis,\n curve: s.curve,\n style,\n })),\n },\n 'bar',\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, CHAR, colorOf, isHidden, legendTop, plotBox, size, stateCanvas } from './frame.js';\nimport { selectedIds } from './identity.js';\nimport { CHART_COLORS } from './palette.js';\nimport { isFinite, minMax, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type {\n Canvas,\n ChartDataIssue,\n LegendItem,\n NetworkChartInput,\n NetworkNode,\n Shape,\n} from './types.js';\n\n/**\n * Trigonometry rounded to 1e-6: `Math.cos`/`Math.sin` are implementation-defined, so their\n * last-bit differences between a Node render and a browser render would otherwise reach the\n * markup and break hydration.\n */\nconst q = (v: number) => Math.round(v * 1e6) / 1e6;\n\n/** Node labels are drawn by default up to this many nodes. */\nexport const NETWORK_LABEL_LIMIT = 60;\n/** Per-edge titles and keyboard stops are emitted up to this many edges. */\nconst EDGE_TITLE_LIMIT = 500;\n\ninterface Placed {\n node: NetworkNode;\n index: number;\n x: number;\n y: number;\n r: number;\n color: string;\n degree: number;\n}\n\n/**\n * Nodes and edges of an arbitrary graph: force-directed (default), around a circle, or at\n * the nodes' own coordinates. Deterministic: the same input always gives the same picture.\n */\nexport function layoutNetworkChart(input: NetworkChartInput): Canvas {\n // Duplicate ids keep their first definition; edges to unknown ids are dropped. Both are reported.\n const issues: ChartDataIssue[] = [];\n const seen = new Map<string, NetworkNode>();\n for (const n of input.nodes)\n if (!seen.has(n.id)) seen.set(n.id, n);\n else\n issues.push({\n code: 'duplicate-id',\n severity: 'warning',\n message: `Node id \"${n.id}\" is duplicated; the first definition is kept.`,\n itemId: n.id,\n });\n const groupOf = (n: NetworkNode) => n.group;\n const nodes = [...seen.values()].filter(\n (n) => !(n.group !== undefined && isHidden(input, n.group)),\n );\n const ids = new Set(nodes.map((n) => n.id));\n const edges = input.edges.filter((e) => {\n const ok = ids.has(e.source) && ids.has(e.target);\n if (!ok && !(seen.has(e.source) && seen.has(e.target)))\n issues.push({\n code: 'unknown-node',\n severity: 'warning',\n message: `Edge ${e.source} → ${e.target} names a node that does not exist and was dropped.`,\n itemId: e.id,\n });\n return ok;\n });\n const state = stateCanvas(input, nodes.length === 0);\n if (state) return { ...state, issues };\n const format = makeFormatter(input.format);\n const { width, height } = size(input);\n const [rMin, rMax] = input.nodeRange ?? [5, 16];\n const labels = input.labels ?? nodes.length <= NETWORK_LABEL_LIMIT;\n const groups = [...new Set(input.nodes.map(groupOf).filter((g): g is string => g !== undefined))];\n const legend: LegendItem[] = groups.map((g, i) => ({ name: g, color: colorOf(input, i) }));\n const plot = plotBox(width, height, {\n top: legendTop(input, legend, width) + rMax + 8,\n right: rMax + (labels ? 48 : 8),\n bottom: rMax + 8,\n left: rMax + 8,\n });\n const colorFor = (n: NetworkNode, i: number) =>\n n.color ?? colorOf(input, n.group !== undefined ? groups.indexOf(n.group) : i);\n const [, vMax] = minMax(nodes.map((n) => n.value));\n const radius = (v: number | undefined) =>\n isFinite(v) && vMax > 0 ? rMin + Math.sqrt(Math.max(0, v) / vMax) * (rMax - rMin) : rMin;\n const degree = new Map<string, number>();\n for (const e of edges) {\n degree.set(e.source, (degree.get(e.source) ?? 0) + 1);\n if (e.target !== e.source) degree.set(e.target, (degree.get(e.target) ?? 0) + 1);\n }\n\n const n = nodes.length;\n const at = new Map<string, number>(nodes.map((node, i) => [node.id, i]));\n let xs: number[];\n let ys: number[];\n const mode = input.arrange ?? 'force';\n if (mode === 'manual' && nodes.every((node) => isFinite(node.x) && isFinite(node.y))) {\n xs = nodes.map((node) => node.x as number);\n ys = nodes.map((node) => node.y as number);\n } else if (mode === 'circular' || mode === 'manual' || n < 3) {\n xs = nodes.map((_, i) => q(Math.cos((2 * Math.PI * i) / n - Math.PI / 2)));\n ys = nodes.map((_, i) => q(Math.sin((2 * Math.PI * i) / n - Math.PI / 2)));\n } else {\n ({ xs, ys } = force(\n n,\n edges.map((e) => [at.get(e.source) as number, at.get(e.target) as number]),\n input.iterations ?? Math.max(50, Math.min(300, Math.floor(30_000 / n))),\n ));\n }\n // Fit the positions into the plot, keeping the aspect ratio of the layout.\n const [x0, x1] = minMax(xs);\n const [y0, y1] = minMax(ys);\n const span = Math.max(x1 - x0, y1 - y0) || 1;\n const scale = Math.min(plot.width / span, plot.height / span);\n const ox = plot.x + (plot.width - (x1 - x0) * scale) / 2;\n const oy = plot.y + (plot.height - (y1 - y0) * scale) / 2;\n const placed: Placed[] = nodes.map((node, i) => ({\n node,\n index: i,\n x: px(ox + ((xs[i] as number) - x0) * scale),\n y: px(oy + ((ys[i] as number) - y0) * scale),\n r: px(radius(node.value)),\n color: colorFor(node, i),\n degree: degree.get(node.id) ?? 0,\n }));\n const byId = new Map(placed.map((p) => [p.node.id, p]));\n\n // Neighbourhood of the selected node; everything else is dimmed.\n // The selected node's neighbourhood is lit and the rest dimmed (the first selected id counts).\n const selectedId = selectedIds(input.selected)[0];\n const selected = selectedId !== undefined ? byId.get(String(selectedId)) : undefined;\n const near = new Set<string>();\n if (selected) {\n near.add(selected.node.id);\n for (const e of edges) {\n if (e.source === selected.node.id) near.add(e.target);\n if (e.target === selected.node.id) near.add(e.source);\n }\n }\n const dim = (id: string, id2 = id) =>\n selected && !(near.has(id) && near.has(id2)) ? 0.15 : undefined;\n const connected = (e: (typeof edges)[number]) =>\n !selected || e.source === selected.node.id || e.target === selected.node.id;\n\n const [, eMax] = minMax(edges.map((e) => e.value));\n const titled = edges.length <= EDGE_TITLE_LIMIT;\n // Labels (edge and node) that would cover an earlier label are dropped.\n const boxes: { x: number; y: number; w: number }[] = [];\n const placeText = (x: number, y: number, w: number) => {\n if (boxes.some((b) => Math.abs(b.y - y) < 12 && x < b.x + b.w + 4 && x + w + 4 > b.x))\n return false;\n boxes.push({ x, y, w });\n return true;\n };\n const arrows: Shape[] = [];\n const edgeTexts: Shape[] = [];\n const links: Shape[] = edges.map((e) => {\n const a = byId.get(e.source) as Placed;\n const b = byId.get(e.target) as Placed;\n const w = isFinite(e.value) && eMax > 0 ? 1 + 3 * Math.sqrt(Math.max(0, e.value) / eMax) : 1;\n const text = `${a.node.label ?? a.node.id} → ${b.node.label ?? b.node.id}${e.label ? ` ${e.label}` : ''}${isFinite(e.value) ? `: ${format(e.value)}` : ''}`;\n const opacity = connected(e) ? dim(e.source, e.target) : 0.15;\n const item = titled\n ? { label: text, id: e.id, name: e.source, category: e.target, value: e.value }\n : undefined;\n if (a === b) {\n // A self-link loops out of the node and back in.\n const loop = a.r * 2.5;\n return {\n kind: 'path',\n part: 'edge',\n d: `M${px(a.x)} ${px(a.y - a.r)}C${px(a.x - loop)} ${px(a.y - loop * 1.5)} ${px(a.x + loop)} ${px(a.y - loop * 1.5)} ${px(a.x)} ${px(a.y - a.r)}`,\n stroke: CHART_COLORS.axis,\n strokeWidth: w,\n opacity: opacity ?? 0.7,\n title: titled ? text : undefined,\n item,\n };\n }\n const len = Math.sqrt((b.x - a.x) * (b.x - a.x) + (b.y - a.y) * (b.y - a.y)) || 1;\n const ux = (b.x - a.x) / len;\n const uy = (b.y - a.y) / len;\n if (input.directed) {\n // An arrowhead whose tip touches the target node's rim.\n const tx = b.x - ux * b.r;\n const ty = b.y - uy * b.r;\n const bx = tx - ux * 6;\n const by = ty - uy * 6;\n arrows.push({\n kind: 'path',\n part: 'arrow',\n d: `M${px(tx)} ${px(ty)}L${px(bx - uy * 3)} ${px(by + ux * 3)}L${px(bx + uy * 3)} ${px(by - ux * 3)}Z`,\n fill: CHART_COLORS.axis,\n opacity: opacity ?? 0.7,\n });\n }\n const edgeText = `${e.label ?? ''}${isFinite(e.value) ? `${e.label ? ': ' : ''}${format(e.value)}` : ''}`;\n if (input.edgeLabels && edgeText) {\n const mx = (a.x + b.x) / 2;\n const my = (a.y + b.y) / 2;\n const tw = edgeText.length * CHAR;\n if (placeText(mx - tw / 2, my, tw))\n edgeTexts.push(\n label(px(mx), px(my), edgeText, {\n part: 'edge-label',\n anchor: 'middle',\n baseline: 'middle',\n }),\n );\n }\n return {\n kind: 'path',\n part: 'edge',\n d: `M${px(a.x)} ${px(a.y)}L${px(b.x)} ${px(b.y)}`,\n stroke: CHART_COLORS.axis,\n strokeWidth: w,\n opacity: opacity ?? 0.7,\n title: titled ? text : undefined,\n item,\n };\n });\n\n const marks: Shape[] = [];\n const texts: Shape[] = [];\n for (const p of placed) {\n const name = p.node.label ?? p.node.id;\n const value = isFinite(p.node.value) ? `: ${format(p.node.value)}` : '';\n const group = p.node.group !== undefined ? ` · ${p.node.group}` : '';\n const text = `${name}${value}${group} · ${p.degree} connection${p.degree === 1 ? '' : 's'}`;\n marks.push({\n kind: 'circle',\n part: 'node',\n cx: p.x,\n cy: p.y,\n r: p.r,\n fill: p.color,\n stroke:\n selected?.node.id === p.node.id\n ? 'var(--skdx-color-text-default)'\n : 'var(--skdx-color-surface-default)',\n opacity: dim(p.node.id),\n title: text,\n item: {\n label: text,\n name: p.node.id,\n category: p.node.group,\n index: p.index,\n value: p.node.value,\n },\n });\n if (!labels) continue;\n // Labels sit to the right of their node; one that would cover an earlier label is dropped.\n const w = name.length * CHAR;\n const lx = p.x + p.r + 4;\n const ly = p.y;\n if (!placeText(lx, ly, w)) continue;\n texts.push(\n label(px(lx), px(ly), name, {\n part: 'node-label',\n baseline: 'middle',\n fill: dim(p.node.id) === undefined ? 'var(--skdx-color-text-default)' : CHART_COLORS.grid,\n }),\n );\n }\n const c = canvas(input, width, height, legend);\n return {\n ...c,\n shapes: [...links, ...arrows, ...marks, ...edgeTexts, ...texts, ...c.shapes],\n issues,\n };\n}\n\n/**\n * Fruchterman–Reingold in the unit square with linear cooling. Deterministic: nodes start on a\n * circle in input order, the seed is quantised and every step afterwards uses only IEEE-exact\n * arithmetic (`+ - * /` and `sqrt`), so a server render and a browser render agree bit for bit —\n * `Math.cos`/`Math.sin`/`Math.hypot` are implementation-defined and their last-bit differences\n * would otherwise amplify over the iterations into a hydration mismatch.\n * ponytail: O(n²) per iteration; a Barnes–Hut tree if graphs exceed ~2000 nodes.\n */\nexport function force(\n n: number,\n edges: [number, number][],\n iterations: number,\n): { xs: number[]; ys: number[] } {\n const xs = Array.from({ length: n }, (_, i) => q(Math.cos((2 * Math.PI * i) / n)));\n const ys = Array.from({ length: n }, (_, i) => q(Math.sin((2 * Math.PI * i) / n)));\n const k = Math.sqrt(4 / n);\n const dx = new Array<number>(n).fill(0);\n const dy = new Array<number>(n).fill(0);\n for (let it = 0; it < iterations; it++) {\n const t = 0.1 * (1 - it / iterations) + 0.005;\n dx.fill(0);\n dy.fill(0);\n for (let i = 0; i < n; i++)\n for (let j = i + 1; j < n; j++) {\n let ex = (xs[i] as number) - (xs[j] as number);\n let ey = (ys[i] as number) - (ys[j] as number);\n // Coincident nodes get a deterministic nudge so they can separate.\n if (ex === 0 && ey === 0) {\n ex = 1e-3 * ((i % 7) + 1);\n ey = 1e-3 * ((j % 5) + 1);\n }\n const d2 = ex * ex + ey * ey;\n const f = (k * k) / d2;\n dx[i] = (dx[i] as number) + ex * f;\n dy[i] = (dy[i] as number) + ey * f;\n dx[j] = (dx[j] as number) - ex * f;\n dy[j] = (dy[j] as number) - ey * f;\n }\n for (const [a, b] of edges) {\n if (a === b) continue;\n const ex = (xs[a] as number) - (xs[b] as number);\n const ey = (ys[a] as number) - (ys[b] as number);\n const d = Math.sqrt(ex * ex + ey * ey) || 1e-6;\n const f = (d * d) / k / d;\n dx[a] = (dx[a] as number) - ex * f;\n dy[a] = (dy[a] as number) - ey * f;\n dx[b] = (dx[b] as number) + ex * f;\n dy[b] = (dy[b] as number) + ey * f;\n }\n for (let i = 0; i < n; i++) {\n const d =\n Math.sqrt((dx[i] as number) * (dx[i] as number) + (dy[i] as number) * (dy[i] as number)) ||\n 1e-6;\n const step = Math.min(d, t);\n xs[i] = (xs[i] as number) + ((dx[i] as number) / d) * step;\n ys[i] = (ys[i] as number) + ((dy[i] as number) / d) * step;\n }\n }\n return { xs, ys };\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 } from './format.js';\nimport {\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, variantColor } from './palette.js';\nimport { bandScale, linearScale, minMax, px, timeTicks } from './scale.js';\nimport { label } from './shapes.js';\nimport type {\n Canvas,\n ChartDataIssue,\n LegendItem,\n Shape,\n Tick,\n TimelineChartInput,\n TimelineEvent,\n} from './types.js';\n\nconst LABEL_H = 14;\n\ninterface Placed {\n event: TimelineEvent;\n index: number;\n time: number;\n lane: number;\n color: string;\n text: string;\n}\n\n/**\n * Point-in-time events on a time axis, sorted chronologically. Horizontal lanes stagger their\n * labels so dense events stay readable; the vertical layout is a list, one row per event, which\n * reads evenly however uneven the gaps are.\n */\nexport function layoutTimelineChart(input: TimelineChartInput): Canvas {\n const issues: ChartDataIssue[] = [];\n const parsed = input.events\n .map((event, index) => ({ event, index, time: new Date(event.date).getTime() }))\n .filter((e) => {\n if (!Number.isFinite(e.time)) {\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `Event \"${e.event.label}\" has an unparseable date and was dropped.`,\n itemId: e.event.id ?? e.event.label,\n });\n return false;\n }\n return !(e.event.group !== undefined && isHidden(input, e.event.group));\n })\n .sort((a, b) => a.time - b.time || a.index - b.index);\n const state = stateCanvas(input, parsed.length === 0);\n if (state) return { ...state, issues };\n const { width, height } = size(input);\n const vertical = input.orientation === 'vertical';\n const groups = [\n ...new Set(input.events.map((e) => e.group).filter((g): g is string => g !== undefined)),\n ];\n const lanes = groups.length ? groups : [''];\n const [t0, t1] = minMax(parsed.map((e) => e.time));\n const dateFormat =\n input.xAxis?.format ?? ({ style: t1 - t0 < 2 * 86_400_000 ? 'time' : 'date' } as const);\n const dateOf = (t: number) => categoryLabel(t, dateFormat);\n const showLabels = input.labels ?? true;\n const events: Placed[] = parsed.map((e) => {\n const g = e.event.group;\n const color =\n e.event.color ??\n (e.event.variant\n ? variantColor(e.event.variant)\n : colorOf(input, g === undefined ? 0 : groups.indexOf(g)));\n const desc = e.event.description ? ` — ${e.event.description}` : '';\n return {\n ...e,\n lane: g === undefined ? 0 : groups.indexOf(g),\n color,\n text: `${e.event.label} · ${dateOf(e.time)}${desc}`,\n };\n });\n const legend: LegendItem[] = groups.map((g, i) => ({ name: g, color: colorOf(input, i) }));\n const c = canvas(input, width, height, legend);\n const item = (e: Placed) => ({\n label: e.text,\n id: e.event.id,\n name: e.event.label,\n category: e.event.group,\n index: e.index,\n value: e.time,\n });\n const shapes: Shape[] = [];\n\n if (vertical) {\n // A list: the date column, a spine, one marker and label per row.\n const dateW = Math.max(...events.map((e) => dateOf(e.time).length)) * CHAR + 16;\n const plot = plotBox(width, height, {\n top: 8 + legendTop(input, legend, width),\n right: 8,\n bottom: 8,\n left: dateW + 12,\n });\n const rows = bandScale(events.length, [plot.y, plot.y + plot.height], 0);\n const spine = px(plot.x);\n shapes.push({\n kind: 'line',\n part: 'axis',\n x1: spine,\n x2: spine,\n y1: plot.y,\n y2: plot.y + plot.height,\n stroke: CHART_COLORS.axis,\n });\n events.forEach((e, i) => {\n const y = px(rows.center(i));\n shapes.push(\n label(px(plot.x - 12), y, dateOf(e.time), {\n part: 'x-label',\n anchor: 'end',\n baseline: 'middle',\n }),\n {\n kind: 'circle',\n part: 'event',\n cx: spine,\n cy: y,\n r: 5,\n fill: e.color,\n stroke: 'var(--skdx-color-surface-default)',\n title: e.text,\n item: item(e),\n },\n );\n if (showLabels) {\n const desc = e.event.description;\n const room = rows.step >= 2 * LABEL_H && desc;\n shapes.push(\n label(px(plot.x + 12), room ? px(y - 7) : y, e.event.label, {\n part: 'event-label',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-default)',\n }),\n );\n if (room)\n shapes.push(\n label(px(plot.x + 12), px(y + 7), desc, {\n part: 'event-description',\n baseline: 'middle',\n }),\n );\n }\n });\n return { ...c, shapes: [...shapes, ...c.shapes], issues };\n }\n\n const laneW = groups.length ? Math.max(...groups.map((g) => g.length)) * CHAR + 16 : 8;\n // Half a date label at each end, so the first and last ticks stay inside the canvas.\n const dateW = (Math.max(dateOf(t0).length, dateOf(t1).length) * CHAR) / 2 + 4;\n const plot = plotBox(width, height, {\n top: 8 + legendTop(input, legend, width),\n right: Math.max(16, dateW),\n bottom: 32 + (input.xAxis?.label ? 14 : 0),\n left: Math.max(16, laneW, dateW),\n });\n // Pad the time domain so the first and last markers and their labels stay inside.\n const padT = (t1 - t0) * 0.04 || 3_600_000;\n const x = linearScale([t0 - padT, t1 + padT], [plot.x, plot.x + plot.width]);\n const ticks: Tick[] = timeTicks(t0 - padT, t1 + padT)\n .filter((t) => t >= t0 - padT && t <= t1 + padT)\n .map((t) => ({ pos: px(x(t)), label: dateOf(t) }));\n for (const t of thinTicks(ticks, plot.width))\n shapes.push(\n {\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 label(t.pos, plot.y + plot.height + 20, t.label, { part: 'x-label', anchor: 'middle' }),\n );\n if (input.xAxis?.label)\n shapes.push(\n label(px(plot.x + plot.width / 2), height - 4, input.xAxis.label, {\n part: 'axis-title',\n anchor: 'middle',\n }),\n );\n const rows = bandScale(lanes.length, [plot.y, plot.y + plot.height], 0);\n const maxLevel = Math.max(0, Math.floor((rows.step / 2 - 14) / LABEL_H));\n lanes.forEach((name, li) => {\n const y = px(rows.center(li));\n shapes.push({\n kind: 'line',\n part: 'axis',\n x1: plot.x,\n x2: plot.x + plot.width,\n y1: y,\n y2: y,\n stroke: CHART_COLORS.axis,\n });\n if (name)\n shapes.push(\n label(plot.x - 8, y, name, { part: 'y-label', anchor: 'end', baseline: 'middle' }),\n );\n });\n // Labels stack upward in levels; a label that would need more room than the lane has is left\n // to the tooltip. Same-time events fan out across levels the same way.\n const lastEnd: number[][] = lanes.map(() => []);\n const texts: Shape[] = [];\n const marks: Shape[] = [];\n for (const e of events) {\n const cx = px(x(e.time));\n const cy = px(rows.center(e.lane));\n marks.push({\n kind: 'circle',\n part: 'event',\n cx,\n cy,\n r: 5,\n fill: e.color,\n stroke: 'var(--skdx-color-surface-default)',\n title: e.text,\n item: item(e),\n });\n if (!showLabels) continue;\n const w = e.event.label.length * CHAR;\n const left = cx - w / 2;\n const ends = lastEnd[e.lane] as number[];\n let level = 0;\n while (level <= maxLevel && (ends[level] ?? -Infinity) > left - 6) level++;\n if (level > maxLevel) continue;\n ends[level] = left + w;\n const ly = px(cy - 12 - level * LABEL_H);\n // Keep the text inside the canvas at the ends; the connector still points at the mark.\n const lx = px(Math.max(w / 2 + 2, Math.min(width - w / 2 - 2, cx)));\n if (level > 0)\n texts.push({\n kind: 'line',\n part: 'connector',\n x1: cx,\n x2: cx,\n y1: px(cy - 6),\n y2: px(ly + 4),\n stroke: CHART_COLORS.grid,\n });\n texts.push(\n label(lx, ly, e.event.label, {\n part: 'event-label',\n anchor: 'middle',\n fill: 'var(--skdx-color-text-default)',\n }),\n );\n }\n return { ...c, shapes: [...shapes, ...texts, ...marks, ...c.shapes], issues };\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\n/** Shared input/surface rounding; consumer tokens can customize it without changing data geometry. */\nexport const CHART_SURFACE_RADIUS = 'var(--skdx-radius-default, var(--skdx-radius-md, 0.5rem))';\n\n/** Only rectangular UI surfaces follow control rounding. Data marks retain their geometry/options. */\nexport function chartSurfaceRadius(part: string): string | undefined {\n return [\n 'tooltip',\n 'skeleton',\n 'label-background',\n 'stage-label-background',\n 'brush-handle',\n ].includes(part)\n ? CHART_SURFACE_RADIUS\n : 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 { CHAR, tooltipShapes } from './frame.js';\nimport { refOf } from './identity.js';\nimport { CHART_COLORS } from './palette.js';\nimport { px } from './scale.js';\nimport type {\n Box,\n Canvas,\n ChartItem,\n ChartItemRef,\n EditModel,\n Hit,\n MapModel,\n MapView,\n Shape,\n TaskChange,\n Zoom,\n} 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 shared tooltip rows at the category nearest to `x`, through the axis formatter when set. */\nexport function crosshairRows(\n layout: Canvas,\n x: number,\n): { index: number; rows: string[] } | undefined {\n const hit = layout.hit;\n if (!hit || hit.xs.length === 0) return undefined;\n const index = nearestIndex(hit, x);\n const rows = hit.rows[index] ?? [];\n return { index, rows: layout.axisTooltipFormatter?.(rows, index) ?? rows };\n}\n\n/** The crosshair line alone, at the category nearest to `x`. */\nexport function crosshairLine(layout: Canvas, x: number): Shape | undefined {\n const hit = layout.hit;\n if (!hit || hit.xs.length === 0) return undefined;\n const cx = hit.xs[nearestIndex(hit, x)] as number;\n return {\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}\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 line = crosshairLine(layout, x) as Extract<Shape, { kind: 'line' }>;\n const { rows } = crosshairRows(layout, x) as { rows: string[] };\n const ay = layout.tooltipAnchored ? hit.plot.y + 8 : y;\n return [\n line,\n ...tooltipShapes(line.x1, ay, rows, layout.width, layout.height, layout.tooltipPlacement),\n ];\n}\n\n/** The crosshair shapes at a category label, for charts synced to another chart's pointer. */\nexport function crosshairAt(layout: Canvas, category: string): Shape[] {\n const hit = layout.hit;\n if (!hit || hit.xs.length === 0) return [];\n const i = hit.rows.findIndex((r) => r[0] === category);\n if (i < 0) return [];\n const x = hit.xs[i] as number;\n return crosshairShapes(layout, x, hit.plot.y + 8);\n}\n\n/**\n * What a pointer at the given position should show when the tooltip is rendered outside the svg\n * (`tooltip.portal`): the text lines, and the crosshair line to keep inside the svg.\n */\nexport function pointerTooltipText(\n layout: Canvas,\n target: EventTarget | null,\n svg: Element,\n clientX: number,\n clientY: number,\n): { lines: string[]; shapes: Shape[] } {\n if (!layout.tooltip) return { lines: [], shapes: [] };\n if (layout.hit?.crosshair) {\n const { x, y } = toViewBox(svg, clientX, clientY, layout.width, layout.height);\n if (inside(layout.hit.plot, x, y)) {\n const found = crosshairRows(layout, x);\n const line = crosshairLine(layout, x);\n if (found && line) return { lines: found.rows, shapes: [line] };\n }\n }\n const mark = (target as Element | null)?.closest?.('[data-skdx-part]');\n const item = layout.tooltipFormatter ? itemAt(layout, target)?.item : undefined;\n const text =\n (item && layout.tooltipFormatter?.(item)) ||\n (mark &&\n Array.from(mark.children).find((c) => c.tagName.toLowerCase() === 'title')?.textContent);\n if (!text) return { lines: [], shapes: [] };\n return { lines: Array.isArray(text) ? text : [text], shapes: [] };\n}\n\n/**\n * Tooltip shapes for the mark under the pointer, or none. Reads the mark's `<title>` (or its\n * item through `formatter`) 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 layout?: Canvas,\n): Shape[] {\n const mark = (target as Element | null)?.closest?.('[data-skdx-part]');\n const item = layout && layout.tooltipFormatter ? itemAt(layout, target)?.item : undefined;\n const text =\n (item && layout?.tooltipFormatter?.(item)) ||\n (mark &&\n Array.from(mark.children).find((c) => c.tagName.toLowerCase() === 'title')?.textContent);\n if (!text) return [];\n // Anchored tooltips sit at the mark itself (its top/centre), not under the pointer.\n const hit = layout?.tooltipAnchored ? itemAt(layout, target) : undefined;\n const shape = hit ? layout?.shapes[hit.index] : undefined;\n const { x, y } = shape ? anchorOf(shape) : toViewBox(svg, clientX, clientY, width, height);\n return tooltipShapes(x, y, text, width, height, layout?.tooltipPlacement);\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, layout);\n}\n\n/** The ref of the mark under the pointer (legend entries excluded), or `null` off any mark. */\nexport function hoveredRef(layout: Canvas, target: EventTarget | null): ChartItemRef | null {\n const hit = itemAt(layout, target);\n return hit && !hit.item.legend ? refOf(hit.item) : null;\n}\n\n/** Whether a shape's anchor lies inside a box. */\nconst anchorInside = (s: Shape, b: Box) => {\n const { x, y } = anchorOf(s);\n const cy = s.kind === 'circle' ? s.cy : s.kind === 'rect' ? s.y + s.height / 2 : y;\n return x >= b.x && x <= b.x + b.width && cy >= b.y && cy <= b.y + b.height;\n};\n\n/** Refs of the marks whose anchor lies inside a viewBox rectangle: rectangular brush selection. */\nexport function itemsInBox(layout: Canvas, box: Box): ChartItemRef[] {\n const seen = new Set<string>();\n const out: ChartItemRef[] = [];\n for (const s of layout.shapes) {\n if (!s.item || s.item.legend || s.part === 'anchor') continue;\n if (!anchorInside(s, box)) continue;\n const ref = refOf(s.item);\n const key = JSON.stringify(ref);\n if (seen.has(key)) continue;\n seen.add(key);\n out.push(ref);\n }\n return out;\n}\n\n/** The dashed rectangle drawn while a selection brush is dragged. */\nexport const brushBoxShape = (box: Box): Shape => ({\n kind: 'rect',\n part: 'selection-box',\n x: px(box.x),\n y: px(box.y),\n width: px(box.width),\n height: px(box.height),\n fill: CHART_COLORS.focus,\n opacity: 0.12,\n stroke: CHART_COLORS.focus,\n});\n\n/** A box from two corners, normalized. */\nexport const boxFrom = (x0: number, y0: number, x1: number, y1: number): Box => ({\n x: Math.min(x0, x1),\n y: Math.min(y0, y1),\n width: Math.abs(x1 - x0),\n height: Math.abs(y1 - y0),\n});\n\n/** Whether a point is inside a polygon (even-odd rule). */\nexport function insidePolygon(points: readonly { x: number; y: number }[], x: number, y: number) {\n let inside = false;\n for (let i = 0, j = points.length - 1; i < points.length; j = i++) {\n const a = points[i] as { x: number; y: number };\n const b = points[j] as { x: number; y: number };\n if (a.y > y !== b.y > y && x < ((b.x - a.x) * (y - a.y)) / (b.y - a.y) + a.x) inside = !inside;\n }\n return inside;\n}\n\n/** Refs of the marks whose anchor lies inside a drawn polygon: lasso selection. */\nexport function itemsInPolygon(\n layout: Canvas,\n points: readonly { x: number; y: number }[],\n): ChartItemRef[] {\n if (points.length < 3) return [];\n const seen = new Set<string>();\n const out: ChartItemRef[] = [];\n for (const s of layout.shapes) {\n if (!s.item || s.item.legend || s.part === 'anchor') continue;\n const { x, y } = anchorOf(s);\n const cy = s.kind === 'circle' ? s.cy : s.kind === 'rect' ? s.y + s.height / 2 : y;\n if (!insidePolygon(points, x, cy)) continue;\n const ref = refOf(s.item);\n const key = JSON.stringify(ref);\n if (seen.has(key)) continue;\n seen.add(key);\n out.push(ref);\n }\n return out;\n}\n\n/** The dashed outline drawn while a lasso is dragged. */\nexport const lassoShape = (points: readonly { x: number; y: number }[]): Shape => ({\n kind: 'path',\n part: 'selection-lasso',\n d: points.length ? `M${points.map((p) => `${px(p.x)} ${px(p.y)}`).join('L')}` : '',\n fill: CHART_COLORS.focus,\n fillOpacity: 0.12,\n stroke: CHART_COLORS.focus,\n dash: '4 3',\n});\n\n/*\n * Gantt editing: a root turns a pointer down on a bar into a grab (move, or resize either end)\n * and a drag into a proposed task change, all in the layout's time units.\n */\n\nexport interface GanttGrab {\n bar: EditModel['bars'][number];\n mode: 'move' | 'start' | 'end';\n}\n\nconst EDGE = 6;\n\n/** What a pointer down at viewBox `(x, y)` grabs on an editable Gantt, if anything. */\nexport function ganttGrab(layout: Canvas, x: number, y: number): GanttGrab | undefined {\n const edit = layout.edit;\n if (!edit) return undefined;\n for (const bar of edit.bars) {\n if (y < bar.y || y > bar.y + bar.height || x < bar.x0 - EDGE || x > bar.x1 + EDGE) continue;\n if (Math.abs(x - bar.x0) <= EDGE) return { bar, mode: 'start' };\n if (Math.abs(x - bar.x1) <= EDGE) return { bar, mode: 'end' };\n return { bar, mode: 'move' };\n }\n return undefined;\n}\n\n/** The task after dragging a grab by `dx` viewBox pixels; the end never crosses the start. */\nexport function ganttDrag(layout: Canvas, grab: GanttGrab, dx: number): TaskChange {\n const edit = layout.edit as EditModel;\n return shifted(edit, grab, edit.invert(grab.bar.x0 + dx) - edit.invert(grab.bar.x0));\n}\n\n/**\n * Keyboard editing of the focused bar (shape index `focus`): Shift+Arrow moves the task one\n * step, Alt+Arrow moves its end, Alt+Shift+Arrow its start. A step is the snap unit, or the\n * time under 10 px. `undefined` when the key or the focused shape is not an edit.\n */\nexport function ganttKey(\n layout: Canvas,\n focus: number | null,\n key: { key: string; shiftKey: boolean; altKey: boolean },\n): TaskChange | undefined {\n const edit = layout.edit;\n const dir = key.key === 'ArrowRight' ? 1 : key.key === 'ArrowLeft' ? -1 : 0;\n if (!edit || focus === null || !dir || !(key.shiftKey || key.altKey)) return undefined;\n const bar = edit.bars.find((b) => b.index === focus);\n if (!bar) return undefined;\n const mode = !key.altKey ? 'move' : key.shiftKey ? 'start' : 'end';\n const step = edit.snap ?? edit.invert(bar.x0 + 10) - edit.invert(bar.x0);\n return shifted(edit, { bar, mode }, dir * step);\n}\n\nfunction shifted(edit: EditModel, { bar, mode }: GanttGrab, delta: number): TaskChange {\n const snap = (v: number) => (edit.snap ? Math.round(v / edit.snap) * edit.snap : v);\n let start = bar.start;\n let end = bar.end;\n if (mode === 'move') {\n start = snap(bar.start + delta);\n end = start + (bar.end - bar.start);\n } else if (mode === 'start') start = Math.min(snap(bar.start + delta), bar.end);\n else end = Math.max(snap(bar.end + delta), bar.start);\n return { id: bar.id, name: bar.name, start, end };\n}\n\n/** The ghost outline of a task while it is dragged. */\nexport function ganttGhost(layout: Canvas, grab: GanttGrab, change: TaskChange): Shape {\n const edit = layout.edit as EditModel;\n const x0 = edit.scale(change.start);\n const x1 = edit.scale(change.end);\n return {\n kind: 'rect',\n part: 'edit-ghost',\n x: px(Math.min(x0, x1)),\n y: px(grab.bar.y),\n width: px(Math.max(1, Math.abs(x1 - x0))),\n height: px(grab.bar.height),\n fill: CHART_COLORS.focus,\n opacity: 0.25,\n stroke: CHART_COLORS.focus,\n rx: 2,\n };\n}\n\n/*\n * Map pan and zoom: the root keeps a `MapView` (controlled through the input, or its own) and\n * derives the next view from wheel and drag gestures with these helpers.\n */\n\nconst MAX_MAP_ZOOM = 64;\n\nconst clampZoomLevel = (z: number) => Math.max(1, Math.min(MAX_MAP_ZOOM, z));\n\n/** The view after a wheel step at viewBox `(x, y)`: scrolling up zooms in around the pointer. */\nexport function mapWheel(model: MapModel, deltaY: number, x: number, y: number): MapView {\n const factor = deltaY > 0 ? 1 / 1.25 : 1.25;\n const zoom = clampZoomLevel(model.view.zoom * factor);\n if (zoom === model.view.zoom) return model.view;\n // Keep the projected point under the pointer fixed: move the centre towards it. Latitude is\n // moved in the projection's own y unit and converted back, so Mercator pans stay exact.\n const { plot, scale } = model;\n const [cx, cy] = model.view.center;\n const px0 = (x - (plot.x + plot.width / 2)) / scale;\n const py0 = (y - (plot.y + plot.height / 2)) / scale;\n const ratio = model.view.zoom / zoom;\n return { center: [cx + px0 * (1 - ratio), model.fromY(model.toY(cy) - py0 * (1 - ratio))], zoom };\n}\n\n/** The view after dragging the map by `(dx, dy)` viewBox pixels from where `from` was set. */\nexport function mapPan(model: MapModel, from: MapModel['view'], dx: number, dy: number): MapView {\n const { scale } = model;\n return {\n center: [from.center[0] - dx / scale, model.fromY(model.toY(from.center[1]) + dy / scale)],\n zoom: from.zoom,\n };\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 && layout.tooltipFormatter?.(s.item)) || (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\n/** What `exportChart` produces and how. */\nexport type ChartExportOptions = {\n /** Accessible name written into the SVG. */\n label: string;\n /** Maps `var(--skdx-…)` to concrete colors, e.g. from `getComputedStyle`. Required for PNG. */\n resolve?: ((cssVariable: string) => string) | undefined;\n} & (\n | { type: 'svg' }\n | {\n type: 'png';\n /** Device pixels per unit. @default 2 */\n scale?: number | undefined;\n /** Fill behind the chart, e.g. the page surface; transparent by default. */\n background?: string | undefined;\n }\n | { type: 'csv'; rows: (string | number | null | undefined)[][] }\n);\n\ntype OptionalExportLabel<Options> = Options extends unknown\n ? Omit<Options, 'label'> & { label?: string }\n : never;\n\n/** Component export options; the chart supplies its accessible name when label is omitted. */\nexport type ChartInstanceExportOptions = OptionalExportLabel<ChartExportOptions>;\n\n/**\n * One entry point for the export formats: SVG markup, a PNG blob (browser only), or CSV of the\n * rows given. Rejects when a PNG is asked for outside a browser.\n */\nexport function exportChart(layout: Canvas, options: ChartExportOptions): Promise<string | Blob> {\n switch (options.type) {\n case 'svg':\n return Promise.resolve(svgMarkup(layout, options.label, options.resolve));\n case 'csv':\n return Promise.resolve(csv(options.rows));\n case 'png': {\n if (typeof document === 'undefined' || typeof Image === 'undefined')\n return Promise.reject(new Error('PNG export needs a browser'));\n const markup = svgMarkup(layout, options.label, options.resolve);\n return svgToPng(markup, layout.width, layout.height, options.scale, options.background);\n }\n }\n}\n\nconst esc = (s: string) => s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/\"/g, '&quot;');\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], ['opacity', s.opacity]])}>${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, ['aria-label', s.title], ['x', s.x], ['y', s.y], ['text-anchor', s.anchor], ['dominant-baseline', s.baseline], ['fill', s.fill], ['font-weight', s.weight], ['transform', s.rotate ? `rotate(${s.rotate} ${s.x} ${s.y})` : undefined]])}>${esc(s.text)}</text>`;\n }\n}\n\n/** The `<defs>` block for a layout's gradients, or an empty string. */\nexport function defsMarkup(layout: Canvas): string {\n const defs = layout.defs ?? [];\n if (defs.length === 0) return '';\n return `<defs>${defs\n .map(\n (g) =>\n `<linearGradient id=\"${esc(g.id)}\" x1=\"0\" y1=\"0\" x2=\"${g.vertical === false ? 1 : 0}\" y2=\"${g.vertical === false ? 0 : 1}\">${g.stops\n .map(\n (st) =>\n `<stop offset=\"${st.offset}\" stop-color=\"${esc(st.color)}\"${st.opacity === undefined ? '' : ` stop-opacity=\"${st.opacity}\"`}/>`,\n )\n .join('')}</linearGradient>`,\n )\n .join('')}</defs>`;\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 = defsMarkup(layout) + 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 { isFinite } from './scale.js';\nimport type { ChartItemId, TreeNode } from './types.js';\n\n/*\n * Shared tree traversal for Treemap and Sunburst: node sizes, depth, drill-down roots and\n * breadcrumbs, so both charts agree on what a tree means.\n */\n\n/** A node's size: its own value, else the sum of its children's. */\nexport const nodeValue = (n: TreeNode): number =>\n isFinite(n.value) ? n.value : (n.children ?? []).reduce((s, c) => s + nodeValue(c), 0);\n\n/**\n * Whether this node or anything under it carries a value. A branch in a tree where nobody sets\n * `value` sums to 0, which is not data and must not be printed as one.\n */\nexport const hasValue = (n: TreeNode): boolean =>\n isFinite(n.value) || (n.children ?? []).some(hasValue);\n\n/** Levels below the given nodes (0 for none). */\nexport const depthOf = (nodes: readonly TreeNode[]): number =>\n nodes.length === 0 ? 0 : 1 + Math.max(...nodes.map((n) => depthOf(n.children ?? [])));\n\n/** A node's identity: its id, else its name. */\nexport const nodeId = (n: TreeNode): ChartItemId => n.id ?? n.name;\n\n/** The path from a top-level node down to the node with `id` (or name), or `undefined`. */\nexport function findPath(nodes: readonly TreeNode[], id: ChartItemId): TreeNode[] | undefined {\n for (const n of nodes) {\n if (nodeId(n) === id || n.name === id) return [n];\n const below = findPath(n.children ?? [], id);\n if (below) return [n, ...below];\n }\n return undefined;\n}\n\n/** Children sorted by size, or as given. */\nexport const sortChildren = (\n nodes: readonly TreeNode[],\n sort: 'asc' | 'desc' | 'none' | undefined,\n): TreeNode[] =>\n sort === 'asc' || sort === 'desc'\n ? [...nodes].sort((a, b) =>\n sort === 'asc' ? nodeValue(a) - nodeValue(b) : nodeValue(b) - nodeValue(a),\n )\n : [...nodes];\n\n/** The tree cut at `maxDepth`: nodes at the limit keep their summed value and lose their children. */\nexport function cutDepth(\n nodes: readonly TreeNode[],\n maxDepth: number | undefined,\n depth = 1,\n): TreeNode[] {\n if (maxDepth === undefined) return [...nodes];\n return nodes.map((n) =>\n depth >= maxDepth\n ? { ...n, value: nodeValue(n), children: undefined }\n : { ...n, children: n.children ? cutDepth(n.children, maxDepth, depth + 1) : undefined },\n );\n}\n\n/**\n * The subtree to draw and the breadcrumb path for a controlled drill-down `root`; the whole\n * tree when `root` is unset or unknown.\n */\nexport function drill(\n nodes: readonly TreeNode[],\n root: ChartItemId | undefined,\n): { nodes: TreeNode[]; path: TreeNode[] } {\n if (root === undefined) return { nodes: [...nodes], path: [] };\n const path = findPath(nodes, root);\n if (!path) return { nodes: [...nodes], path: [] };\n const last = path[path.length - 1] as TreeNode;\n return { nodes: last.children?.length ? last.children : [last], path };\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 { AccessibleTableOptions, Canvas, ChartItem } from './types.js';\n\n/** Default row cap of the accessible table. */\nexport const TABLE_LIMIT = 500;\n\n/**\n * Header and rows of the accessible table for a layout: the shared crosshair rows when the chart\n * has them (one row per category, one column per series), else one row per titled mark\n * (series, name, category, value). `undefined` when the option is off, the chart is in a state,\n * or there are more rows than `maxRows`.\n */\nexport function tableRows(\n layout: Canvas,\n option: boolean | AccessibleTableOptions | undefined,\n): string[][] | undefined {\n if (!option) return undefined;\n const max = typeof option === 'object' ? (option.maxRows ?? TABLE_LIMIT) : TABLE_LIMIT;\n const hit = layout.hit;\n if (hit && hit.rows.length > 0) {\n const first = hit.rows[0] as string[];\n if (hit.rows.length > max) return undefined;\n // Row cells are \"Series: value\"; the header takes the series names from the first row.\n const header = ['', ...first.slice(1).map((c) => c.replace(/:\\s[^:]*$/, ''))];\n const rows = hit.rows.map((r) => [\n r[0] as string,\n ...r.slice(1).map((c) => c.slice(c.lastIndexOf(': ') + 2)),\n ]);\n return [header, ...rows];\n }\n const items = layout.shapes.flatMap((s) =>\n s.item && !s.item.legend && !(s.part === 'anchor' && !s.title) ? [s.item] : [],\n );\n if (items.length === 0 || items.length > max) return undefined;\n const cols = (['series', 'name', 'category', 'value'] as const).filter((k) =>\n items.some((it) => it[k] !== undefined),\n );\n const cell = (it: ChartItem, k: (typeof cols)[number]) =>\n it[k] === undefined ? '' : String(it[k]);\n return [\n cols.map((k) => k[0]?.toUpperCase() + k.slice(1)),\n ...items.map((it) => cols.map((k) => cell(it, k))),\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 type { ChartItemRef, Zoom } from './types.js';\n\n/*\n * Chart coordination: charts that share a `syncId` share highlight, selection, zoom, hidden\n * series and the crosshair. A group is a tiny framework-neutral pub/sub; each root publishes its own changes with\n * itself as the source and applies everyone else's. Nothing here touches the DOM, and a chart\n * without a `syncId` never joins a group, so charts stay standalone.\n */\n\n/** What a group shares. Every field is optional: a chart publishes only what changed. */\nexport interface SyncState {\n highlighted?: ChartItemRef | null | undefined;\n selected?: ChartItemRef[] | undefined;\n zoom?: Zoom | undefined;\n hiddenSeries?: string[] | undefined;\n /** The category under the crosshair (by label), or `null` when the pointer left. */\n crosshair?: string | null | undefined;\n}\n\nexport type SyncListener = (state: SyncState, source: object) => void;\n\nexport interface SyncGroup {\n /** Listens for changes published by other members; returns the unsubscribe function. */\n subscribe(listener: SyncListener): () => void;\n /** Publishes a change; `source` identifies the publisher so it can ignore its own echo. */\n publish(state: SyncState, source: object): void;\n /** The last published values, for members that join later. */\n readonly current: SyncState;\n}\n\nconst groups = new Map<string, { group: SyncGroup; listeners: Set<SyncListener> }>();\n\n/** The group for a `syncId`, created on first use; groups are keyed per JavaScript realm. */\nexport function syncGroup(id: string): SyncGroup {\n const existing = groups.get(id);\n if (existing) return existing.group;\n const listeners = new Set<SyncListener>();\n const current: SyncState = {};\n const group: SyncGroup = {\n current,\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n if (listeners.size === 0) groups.delete(id);\n };\n },\n publish(state, source) {\n Object.assign(current, state);\n for (const l of listeners) l(state, source);\n },\n };\n groups.set(id, { group, listeners });\n return group;\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, CHAR, colorOf, legendTop, plotBox, size, stateCanvas } from './frame.js';\nimport { selectedIds } from './identity.js';\nimport { isFinite, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { Canvas, ChartDataIssue, SankeyInput, SankeyLink, Shape } from './types.js';\n\ninterface Node {\n id: string;\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 issues: ChartDataIssue[] = [];\n const known = input.nodes ? new Set(input.nodes.map((n) => n.id)) : undefined;\n const usable = input.links.filter((l) => {\n if (!isFinite(l.value) || l.value <= 0) {\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `Link ${l.source} → ${l.target} has no positive value and was dropped.`,\n itemId: l.id,\n });\n return false;\n }\n if (l.source === l.target) {\n issues.push({\n code: 'self-link',\n severity: 'warning',\n message: `Link ${l.source} → ${l.target} points at its own node and was dropped.`,\n itemId: l.id,\n });\n return false;\n }\n if (known && !(known.has(l.source) && known.has(l.target))) {\n issues.push({\n code: 'unknown-node',\n severity: 'warning',\n message: `Link ${l.source} → ${l.target} names a node not in \\`nodes\\` and was dropped.`,\n itemId: l.id,\n });\n return false;\n }\n return true;\n });\n const { links, back } = dropBackEdges(usable);\n const policy = input.cyclePolicy ?? 'drop';\n for (const l of back)\n issues.push({\n code: 'cycle',\n severity: policy === 'error' ? 'error' : 'warning',\n message: `Link ${l.source} → ${l.target} closes a cycle and was ${policy === 'error' ? 'rejected' : 'dropped'}.`,\n itemId: l.id,\n });\n const state = stateCanvas(\n policy === 'error' && back.length > 0\n ? {\n ...input,\n error: input.error ?? `${back.length} link${back.length === 1 ? '' : 's'} close a cycle`,\n }\n : input,\n links.length === 0,\n );\n if (state) return { ...state, issues };\n const formatValue = makeFormatter(input.format);\n const NODE_PAD = Math.max(0, input.nodePadding ?? 8);\n const NODE_WIDTH = Math.max(1, input.nodeWidth ?? 16);\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 given = new Map((input.nodes ?? []).map((n) => [n.id, n]));\n const node = (id: string) => {\n let n = nodes.get(id);\n if (!n) {\n const meta = given.get(id);\n n = {\n id,\n name: meta?.label ?? id,\n depth: 0,\n value: 0,\n color: colorOf(input, nodes.size, meta?.color),\n x: 0,\n y: 0,\n height: 0,\n outY: 0,\n inY: 0,\n };\n nodes.set(id, n);\n }\n return n;\n };\n // Explicit nodes keep their order (and colors) even when links first mention them later.\n for (const n of input.nodes ?? []) node(n.id);\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 // Justified: every sink sits in the last column, however short its path was.\n if (input.align === 'justify') {\n const last = Math.max(0, ...[...nodes.values()].map((n) => n.depth));\n for (const n of nodes.values()) if (!outSum.has(n.id)) n.depth = last;\n }\n const selected = selectedIds(input.selected).map(String);\n const isSel = (id: string) => selected.includes(id);\n const touches = (id: string) =>\n selected.length === 0 ||\n isSel(id) ||\n links.some((l) => (isSel(l.source) && l.target === id) || (isSel(l.target) && l.source === id));\n for (const n of nodes.values()) n.value = Math.max(outSum.get(n.id) ?? 0, inSum.get(n.id) ?? 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 if (input.nodeSort)\n for (const col of columns.values())\n col.sort((a, b) => (input.nodeSort === 'asc' ? a.value - b.value : b.value - a.value));\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 // Ribbons leave and enter in link order, or by value when asked.\n const ordered = [...links];\n if (input.linkSort)\n ordered.sort((a, b) => (input.linkSort === 'asc' ? a.value - b.value : b.value - a.value));\n\n const shapes: Shape[] = [];\n const linkTexts: Shape[] = [];\n for (const l of ordered) {\n const s = node(l.source);\n const t = node(l.target);\n const h = l.value * scale;\n const lit = selected.length === 0 || isSel(l.source) || isSel(l.target);\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 const text = `${s.name} → ${t.name}: ${formatValue(l.value)}`;\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: lit ? 0.4 : 0.08,\n title: text,\n item: {\n label: text,\n id: l.id ?? `${l.source}→${l.target}`,\n name: l.source,\n category: l.target,\n value: l.value,\n },\n });\n // The value sits mid-ribbon, only where the gap can hold it beside the source node's label.\n const room = x1 - x0 > (s.name.length + formatValue(l.value).length) * CHAR + 24;\n if (input.linkLabels && h >= 12 && lit && room)\n linkTexts.push(\n label(px(mx), px((sy + ty + h) / 2), formatValue(l.value), {\n part: 'link-label',\n anchor: 'middle',\n baseline: 'middle',\n }),\n );\n }\n for (const n of nodes.values()) {\n const text = `${n.name}: ${formatValue(n.value)}`;\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 opacity: touches(n.id) ? undefined : 0.3,\n title: text,\n item: { label: text, id: n.id, name: n.name, value: n.value },\n });\n const last = n.depth === depths;\n if (input.nodeLabels ?? true)\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: [...shapes, ...linkTexts], issues };\n}\n\n/** Splits the links into a forest (no cycles) and the depth-first back edges that closed cycles. */\nfunction dropBackEdges(links: SankeyLink[]): { links: SankeyLink[]; back: SankeyLink[] } {\n const out = new Map<string, SankeyLink[]>();\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<SankeyLink>();\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: links.filter((l) => !back.has(l)), back: [...back] };\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 { makeColorScale } from './colors.js';\nimport { makeFormatter } from './format.js';\nimport { canvas, CHAR, colorOf, isHidden, legendTop, size, stateCanvas } from './frame.js';\nimport { cutDepth, drill, nodeId, nodeValue, sortChildren } from './hierarchy.js';\nimport { px } from './scale.js';\nimport { label, withLabelSurfaces } 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 opacity: number | undefined;\n area: number;\n}\n\ntype Box = [number, number, number, number];\ntype Place = (t: Tile, box: Box) => void;\n\n/** Squarified treemap (Bruls, Huizing, van Wijk): rows of tiles kept as close to square as possible. */\nfunction squarify(items: Tile[], x: number, y: number, w: number, h: number, out: Place) {\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\n/** Strips across the box: `slice` stacks them top to bottom, `dice` left to right. */\nfunction strips(\n items: Tile[],\n x: number,\n y: number,\n w: number,\n h: number,\n out: Place,\n slice: boolean,\n) {\n const total = items.reduce((s, t) => s + t.area, 0);\n let at = slice ? y : x;\n for (const t of items) {\n const share = total > 0 ? t.area / total : 0;\n if (slice) {\n const th = h * share;\n out(t, [x, at, w, th]);\n at += th;\n } else {\n const tw = w * share;\n out(t, [at, y, tw, h]);\n at += tw;\n }\n }\n}\n\n/**\n * Tiles by value, branches outlined with their children tiled inside. `rootId` shows one node's\n * subtree (controlled drill-down), `breadcrumbs` writes the path to it, `tiling` picks the\n * algorithm and `colorScale` colors leaves by value instead of by branch.\n */\nexport function layoutTreemap(input: TreemapInput): Canvas {\n const { nodes: roots, path } = drill(input.data, input.rootId);\n const nodes = cutDepth(roots, input.maxDepth);\n const state = stateCanvas(input, !nodes.some((n) => nodeValue(n) > 0));\n if (state) return state;\n const formatValue = makeFormatter(input.format);\n const { width, height } = size(input);\n const crumbs = input.breadcrumbs && path.length > 0;\n const legend = nodes.map((n, i) => ({ name: n.name, color: colorOf(input, i, n.color) }));\n const top = legendTop(input, legend, width) + (crumbs ? 20 : 0);\n const pad = Math.max(0, input.padding ?? 2);\n const sort = input.sort ?? 'desc';\n const tiling = input.tiling ?? 'squarify';\n const showLabels = input.labels ?? true;\n const shapes: Shape[] = [];\n // Leaves are colored by value when a scale is given; branches keep the branch color.\n const leaves: number[] = [];\n const collect = (list: TreeNode[]) => {\n for (const n of list)\n if (n.children?.length) collect(n.children);\n else leaves.push(nodeValue(n));\n };\n collect(nodes);\n const scale = input.colorScale\n ? makeColorScale(input.colorScale, leaves, colorOf(input, 0), undefined, formatValue)\n : undefined;\n\n const tile = (\n list: TreeNode[],\n x: number,\n y: number,\n w: number,\n h: number,\n inherited: string | undefined,\n depth: number,\n ) => {\n const total = list.reduce((s, n) => s + Math.max(0, nodeValue(n)), 0);\n const tiles = sortChildren(list, sort)\n .map((node): Tile => {\n const value = nodeValue(node);\n const branch = (node.children?.length ?? 0) > 0;\n const scaled = !branch && scale ? scale.color(value) : undefined;\n return {\n node,\n value,\n color: scaled?.fill ?? node.color ?? inherited ?? colorOf(input, list.indexOf(node)),\n opacity: scaled?.opacity,\n area: total > 0 ? (Math.max(0, value) / total) * w * h : 0,\n };\n })\n .filter((t) => t.area > 0 && !(inherited === undefined && isHidden(input, t.node.name)));\n const place: Place = (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 : t.opacity,\n stroke: 'var(--skdx-color-surface-default)',\n title,\n item: { label: title, id: nodeId(t.node), name: t.node.name, value: t.value },\n });\n if (branch)\n tile(\n t.node.children as TreeNode[],\n tx + pad,\n ty + pad,\n Math.max(0, tw - 2 * pad),\n Math.max(0, th - 2 * pad),\n t.color,\n depth + 1,\n );\n else if (showLabels && tw > 40 && th > 20) {\n const capacity = Math.max(1, Math.floor((tw - 12) / CHAR));\n const text =\n t.node.name.length > capacity ? `${t.node.name.slice(0, capacity - 1)}…` : t.node.name;\n shapes.push(\n label(px(tx + 6), px(ty + 6), text, {\n baseline: 'hanging',\n fill: 'var(--skdx-color-text-on-accent)',\n }),\n );\n }\n };\n if (tiling === 'squarify') squarify(tiles, x, y, w, h, place);\n else\n strips(\n tiles,\n x,\n y,\n w,\n h,\n place,\n tiling === 'slice' || (tiling === 'sliceDice' && depth % 2 === 0),\n );\n };\n tile(nodes, 0, top, width, height - top, undefined, 0);\n if (crumbs) shapes.push(...breadcrumbShapes(path, 8, legendTop(input, legend, width) + 10));\n const c = canvas(input, width, height, legend);\n return { ...c, shapes: withLabelSurfaces([...shapes, ...c.shapes]) };\n}\n\n/** The drill path as clickable crumbs (each carries the node's id) separated by `›`, from `x`. */\nexport function breadcrumbShapes(path: TreeNode[], x: number, y: number): Shape[] {\n const shapes: Shape[] = [];\n let at = x;\n path.forEach((n, i) => {\n if (i > 0) {\n shapes.push(label(px(at), y, '›', { part: 'breadcrumb-separator', baseline: 'middle' }));\n at += CHAR + 6;\n }\n shapes.push(\n label(px(at), y, n.name, {\n part: 'breadcrumb',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-default)',\n title: n.name,\n item: { label: n.name, id: nodeId(n), name: n.name },\n }),\n );\n at += n.name.length * CHAR + 6;\n });\n return 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 axisTooltip,\n canvas,\n colorOf,\n extent,\n isHidden,\n legendTop,\n MARGIN,\n plotBox,\n size,\n stateCanvas,\n thinTicks,\n valueAxisRoom,\n} from './frame.js';\nimport { CHART_COLORS, variantColor } from './palette.js';\nimport { annotationShapes, referenceShapes } from './reference.js';\nimport { bandScale, isFinite, linearScale, minMax, pathThrough, px, timeTicks } from './scale.js';\nimport { frameShapes, label } from './shapes.js';\nimport { exponentialMovingAverage, movingAverage } from './transforms.js';\nimport type {\n Candle,\n CandlestickInput,\n Canvas,\n ChartDataIssue,\n Hit,\n Shape,\n Tick,\n Value,\n} from './types.js';\n\nconst VOLUME_SHARE = 0.22;\nconst SELECTOR_HEIGHT = 20;\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 issues: ChartDataIssue[] = [];\n const all = input.data.filter((c) => {\n if (valid(c)) return true;\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `Candle \"${String(c.label)}\" has a non-finite open/high/low/close and was dropped.`,\n itemId: c.id,\n });\n return false;\n });\n const state = stateCanvas(input, all.length === 0);\n if (state) return { ...state, issues };\n const UP = input.upColor ?? CHART_COLORS.positive;\n const DOWN = input.downColor ?? CHART_COLORS.negative;\n const priceFormat = makeFormatter(input.format);\n const volumeFormat = makeFormatter(input.volumeFormat ?? { style: 'integer' });\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 selector = input.rangeSelector ?? [];\n // `compare` plots the change from the first visible close: y values (and the axis format)\n // become fractions while tooltips keep the prices and add the percentage.\n const base = input.compare ? (data[0] as Candle).close : undefined;\n const cmp = (v: number) => (base !== undefined && base !== 0 ? v / base - 1 : v);\n const pctFormat = base !== undefined ? { style: 'percent' as const, digits: 1 } : undefined;\n const pct = makeFormatter({ style: 'percent', digits: 1 });\n // Moving averages run over every close, so zooming never shortens the window; the visible\n // slice is drawn and read in the crosshair.\n const closes = all.map((c) => c.close);\n const overlays = (input.overlays ?? []).map((o, i) => {\n const name = o.name ?? `${o.type.toUpperCase()} ${o.period}`;\n const values: Value[] =\n o.type === 'ema'\n ? exponentialMovingAverage(closes, o.period)\n : movingAverage(closes, o.period);\n return {\n name,\n color: o.color ?? colorOf(input, i + 2),\n values: values.slice(start, end),\n hidden: isHidden(input, name),\n };\n });\n // The price extent is known before the plot box, so the left margin can hold the widest tick\n // label: a currency price such as \"$180.00\" overflows the default 48.\n const prices = extent(\n [\n ...data.flatMap((c) => [cmp(c.low), cmp(c.high)]),\n ...overlays\n .filter((o) => !o.hidden)\n .flatMap((o) => o.values.map((v) => (isFinite(v) ? cmp(v) : v))),\n ],\n false,\n );\n const legend = [\n { name: 'Up', color: UP },\n { name: 'Down', color: DOWN },\n ...overlays.map((o) => ({ name: o.name, color: o.color })),\n ];\n const outer = plotBox(width, height, {\n ...MARGIN,\n top: MARGIN.top + legendTop(input, legend, width) + (selector.length ? SELECTOR_HEIGHT : 0),\n bottom: MARGIN.bottom + brushRoom,\n left:\n input.scale === 'log'\n ? MARGIN.left\n : valueAxisRoom(prices, makeFormatter(pctFormat ?? input.yAxis?.format ?? input.format)),\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 prices,\n [plot.y + plot.height, plot.y],\n { scale: input.scale === 'log' ? 'log' : 'linear', format: pctFormat ?? input.yAxis?.format },\n input.format,\n );\n // A time axis places candles by their label's time, so missing sessions leave gaps; the bar\n // width is 80% of the smallest gap. Otherwise every candle takes an equal slot.\n const times = data.map((c) => categoryValue(c.label));\n const timed = input.xAxis?.type === 'time' && times.every((t) => Number.isFinite(t));\n let x = bandScale(data.length, [plot.x, plot.x + plot.width]);\n let categoryTicks: Tick[] | undefined;\n if (timed) {\n const sorted = [...times].sort((a, b) => a - b);\n let gap = Infinity;\n for (let k = 1; k < sorted.length; k++)\n gap = Math.min(gap, (sorted[k] as number) - (sorted[k - 1] as number));\n const [tMin, tMax] = minMax(times);\n const pad = gap === Infinity ? Math.max(1, Math.abs(tMax) * 0.05 || 1) : gap / 2;\n const tx = linearScale([tMin - pad, tMax + pad], [plot.x, plot.x + plot.width]);\n const bandwidth = Math.abs(tx(tMin + (gap === Infinity ? pad : gap)) - tx(tMin)) * 0.8;\n x = {\n step: bandwidth,\n bandwidth,\n start: (i: number) => tx(times[i] as number) - bandwidth / 2,\n center: (i: number) => tx(times[i] as number),\n };\n const tickFormat = input.xAxis?.format ?? { style: 'date' as const };\n categoryTicks = timeTicks(tMin - pad, tMax + pad)\n .filter((t) => t >= tMin - pad && t <= tMax + pad)\n .map((t): Tick => ({ pos: px(tx(t)), label: categoryLabel(t, tickFormat) }));\n }\n const labels = data.map((c) => categoryLabel(c.label, input.xAxis?.format));\n const c0 = canvas(input, width, height, legend);\n const frame = {\n ...c0,\n plot,\n xTicks: thinTicks(\n categoryTicks ?? 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 const scales = {\n plot,\n x: (v: string | number | Date) => {\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: number) => y.scale(cmp(v)),\n };\n shapes.push(...referenceShapes(input.references, scales));\n // Quick zoom buttons: one text per range; the one matching the current window reads as active.\n selector.forEach((r, i) => {\n const range =\n r.candles > 0\n ? { start: Math.max(0, count - r.candles), end: count }\n : { start: 0, end: count };\n const active = range.start === start && range.end === end;\n shapes.push(\n label(px(plot.x + i * 40), px(outer.y - 8), r.label, {\n part: 'range-button',\n baseline: 'middle',\n fill: active ? 'var(--skdx-color-text-default)' : CHART_COLORS.label,\n weight: active ? 'bold' : undefined,\n title: `${r.label}: last ${r.candles > 0 ? Math.min(r.candles, count) : count} candles`,\n item: { label: r.label, name: r.label, range },\n }),\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 change = base !== undefined ? ` (${pct(cmp(c.close))})` : '';\n const title = `${labels[i]}: O ${priceFormat(c.open)} H ${priceFormat(c.high)} L ${priceFormat(c.low)} C ${priceFormat(c.close)}${change}${isFinite(c.volume) ? ` V ${volumeFormat(c.volume)}` : ''}`;\n const item = {\n label: title,\n id: c.id,\n category: labels[i] as string,\n index: start + i,\n value: c.close,\n };\n rows.push([\n labels[i] as string,\n `Open: ${priceFormat(c.open)}`,\n `High: ${priceFormat(c.high)}`,\n `Low: ${priceFormat(c.low)}`,\n `Close: ${priceFormat(c.close)}${change}`,\n ...(isFinite(c.volume) ? [`Volume: ${volumeFormat(c.volume)}`] : []),\n ...overlays\n .filter((o) => !o.hidden)\n .map(\n (o) => `${o.name}: ${isFinite(o.values[i]) ? priceFormat(o.values[i] as number) : '—'}`,\n ),\n ]);\n const top = y.scale(cmp(Math.max(c.open, c.close)));\n const bottom = y.scale(cmp(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(cmp(c.high))),\n y2: px(y.scale(cmp(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(cmp(c.open))),\n y2: px(y.scale(cmp(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(cmp(c.close))),\n y2: px(y.scale(cmp(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(cmp(c.high))),\n y2: px(y.scale(cmp(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 ${volumeFormat(c.volume)}`,\n });\n });\n }\n // One path per overlay, broken where the average is not defined yet.\n for (const o of overlays) {\n if (o.hidden) continue;\n const pts = o.values.flatMap((v, i) =>\n isFinite(v) ? [{ x: px(x.center(i)), y: px(y.scale(cmp(v))) }] : [],\n );\n if (pts.length < 2) continue;\n shapes.push({\n kind: 'path',\n part: 'overlay',\n d: pathThrough(pts),\n stroke: o.color,\n strokeWidth: 1.5,\n strokeLinejoin: 'round',\n title: o.name,\n item: { label: o.name, series: o.name },\n });\n }\n // Event flags: a small pennant above the candle whose label matches; unknown labels are skipped.\n for (const f of input.flags ?? []) {\n const cx = scales.x(f.label);\n if (cx === undefined) continue;\n const i = data.findIndex((_, idx) => x.center(idx) === cx);\n const c = data[i] as Candle;\n const top = y.scale(cmp(c.high)) - 6;\n const color = variantColor(f.variant ?? 'primary');\n shapes.push({\n kind: 'path',\n part: 'flag',\n d: `M${px(cx)} ${px(top)}V${px(top - 10)}H${px(cx + 8)}L${px(cx + 5)} ${px(top - 7)}L${px(cx + 8)} ${px(top - 4)}H${px(cx)}Z`,\n fill: color,\n stroke: color,\n title: f.text,\n item: { label: f.text, name: f.text, category: labels[i] as string, index: start + i },\n });\n }\n shapes.push(...annotationShapes(input.annotations, scales));\n const hit: Hit = {\n plot: outer,\n xs: data.map((_, i) => px(x.center(i))),\n rows,\n count,\n zoom,\n crosshair: axisTooltip(input),\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: 8,\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: 8,\n },\n );\n hit.brush = { box, window };\n }\n return { ...c0, shapes: [...shapes, ...c0.shapes], hit, issues };\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 CHAR,\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, label } from './shapes.js';\nimport type { Canvas, ChartDataIssue, ChartItemId, Shape, WaterfallInput } from './types.js';\n\nconst UP = 'var(--skdx-color-success-500)';\nconst DOWN = 'var(--skdx-color-danger-500)';\n\ninterface Step {\n id: ChartItemId | undefined;\n name: string;\n from: number;\n to: number;\n color: string;\n title: string;\n /** A subtotal or total: stands on zero and shows the running total. */\n flat: boolean;\n}\n\n/**\n * Signed deltas stacked on the running total: `subtotal` and `total` rows stand on zero and show\n * the level reached, `start` opens the bridge at a given level, and the steps run down the y\n * axis when horizontal.\n */\nexport function layoutWaterfall(input: WaterfallInput): Canvas {\n const issues: ChartDataIssue[] = [];\n const data = input.data.filter((d) => {\n const flat = d.type === 'subtotal' || d.type === 'total' || d.subtotal;\n if (flat || isFinite(d.value)) return true;\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `Row \"${d.name}\" has no valid value and was dropped.`,\n itemId: d.id ?? d.name,\n });\n return false;\n });\n const state = stateCanvas(input, data.length === 0);\n if (state) return { ...state, issues };\n const formatValue = makeFormatter(input.format);\n const { width, height } = size(input);\n const horizontal = input.orientation === 'horizontal';\n const up = input.positiveColor ?? UP;\n const down = input.negativeColor ?? DOWN;\n const flatColor = input.totalColor ?? colorOf(input, 0);\n const steps: Step[] = [];\n let running = isFinite(input.start) ? input.start : 0;\n const signed = (v: number) => `${v >= 0 ? '+' : ''}${formatValue(v)}`;\n if (isFinite(input.start) && input.startLabel !== undefined)\n steps.push({\n id: undefined,\n name: input.startLabel,\n from: 0,\n to: running,\n color: flatColor,\n title: `${input.startLabel}: ${formatValue(running)}`,\n flat: true,\n });\n for (const d of data) {\n const type = d.type ?? (d.subtotal ? 'subtotal' : 'change');\n if (type !== 'change') {\n steps.push({\n id: d.id,\n name: d.name,\n from: 0,\n to: running,\n color: d.color ?? flatColor,\n title: `${d.name}: ${formatValue(running)}`,\n flat: true,\n });\n continue;\n }\n const from = running;\n running += d.value;\n steps.push({\n id: d.id,\n name: d.name,\n from,\n to: running,\n color: d.color ?? (d.value >= 0 ? up : down),\n title: `${d.name}: ${signed(d.value)}`,\n flat: false,\n });\n }\n if (input.total !== undefined)\n steps.push({\n id: undefined,\n name: input.total,\n from: 0,\n to: running,\n color: flatColor,\n title: `${input.total}: ${formatValue(running)}`,\n flat: true,\n });\n const widest = horizontal ? Math.max(0, ...steps.map((s) => s.name.length)) * CHAR + 16 : 0;\n const legend = [\n { name: 'Increase', color: up },\n { name: 'Decrease', color: down },\n ];\n const plot = plotBox(width, height, {\n ...MARGIN,\n top: MARGIN.top + legendTop(input, legend, width),\n left: Math.max(MARGIN.left, widest),\n right: input.labels && horizontal ? 56 : MARGIN.right,\n });\n const totals = steps.flatMap((s) => [s.from, s.to]);\n const value = axis(\n [Math.min(0, ...totals), Math.max(0, ...totals)],\n horizontal ? [plot.x, plot.x + plot.width] : [plot.y + plot.height, plot.y],\n {},\n input.format,\n );\n const band = bandScale(\n steps.length,\n horizontal ? [plot.y, plot.y + plot.height] : [plot.x, plot.x + plot.width],\n );\n const c = canvas(input, width, height, legend);\n const categoryTicks = steps.map((s, i) => ({ pos: px(band.center(i)), label: s.name }));\n const shapes: Shape[] = frameShapes(\n {\n ...c,\n plot,\n xTicks: horizontal ? categoryTicks : thinTicks(categoryTicks, plot.width),\n yTicks: horizontal ? thinTicks(value.ticks, plot.width) : value.ticks,\n baseline: value.zero,\n },\n { horizontal },\n );\n steps.forEach((s, i) => {\n const v0 = value.scale(s.from);\n const v1 = value.scale(s.to);\n const lo = Math.min(v0, v1);\n const len = Math.max(1, Math.abs(v1 - v0));\n shapes.push({\n kind: 'rect',\n part: 'bar',\n x: px(horizontal ? lo : band.start(i)),\n y: px(horizontal ? band.start(i) : lo),\n width: px(horizontal ? len : band.bandwidth),\n height: px(horizontal ? band.bandwidth : len),\n fill: s.color,\n title: s.title,\n item: {\n label: s.title,\n id: s.id ?? s.name,\n name: s.name,\n index: i,\n value: s.flat ? s.to : s.to - s.from,\n },\n });\n if (input.labels) {\n const text = s.flat ? formatValue(s.to) : signed(s.to - s.from);\n const hi = Math.max(v0, v1);\n shapes.push(\n horizontal\n ? label(px(hi + 6), px(band.center(i)), text, { part: 'value-label', baseline: 'middle' })\n : label(px(band.center(i)), px(lo - 4), text, { part: 'value-label', anchor: 'middle' }),\n );\n }\n const next = steps[i + 1];\n // The connector carries the running total across; a flat bar is entered at its top.\n if (next && (input.connectors ?? true)) {\n const a = px(v1);\n const b = px(value.scale(next.flat ? next.to : next.from));\n shapes.push(\n horizontal\n ? {\n kind: 'line',\n part: 'connector',\n x1: a,\n x2: b,\n y1: px(band.start(i) + band.bandwidth),\n y2: px(band.start(i + 1)),\n stroke: CHART_COLORS.axis,\n dash: '4 3',\n }\n : {\n kind: 'line',\n part: 'connector',\n x1: px(band.start(i) + band.bandwidth),\n x2: px(band.start(i + 1)),\n y1: a,\n y2: b,\n stroke: CHART_COLORS.axis,\n dash: '4 3',\n },\n );\n }\n });\n return { ...c, shapes: [...shapes, ...c.shapes], issues };\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 { annotationShapes, referenceShapes } from './reference.js';\nimport { bandScale, isFinite, minMax, px } from './scale.js';\nimport { label, tickAnchor } from './shapes.js';\nimport type {\n Canvas,\n ChartDataIssue,\n ChartItemId,\n EditModel,\n GanttInput,\n GanttTask,\n Shape,\n} from './types.js';\n\n/**\n * Tasks on the longest dependency chain (by duration), the critical path: the chain that\n * decides the project's end. Ties keep the first chain found. Missing prerequisites are skipped.\n */\nexport function criticalPath(tasks: GanttTask[]): Set<GanttTask> {\n const byKey = new Map<ChartItemId, GanttTask>();\n for (const t of tasks) {\n if (t.id !== undefined && !byKey.has(t.id)) byKey.set(t.id, t);\n if (!byKey.has(t.name)) byKey.set(t.name, t);\n }\n const memo = new Map<GanttTask, { length: number; next: GanttTask | undefined }>();\n const visiting = new Set<GanttTask>();\n // Longest path ending at `t`: its own duration plus the longest chain among its prerequisites.\n const longest = (t: GanttTask): { length: number; next: GanttTask | undefined } => {\n const cached = memo.get(t);\n if (cached) return cached;\n if (visiting.has(t)) return { length: 0, next: undefined };\n visiting.add(t);\n let best: { length: number; next: GanttTask | undefined } = { length: 0, next: undefined };\n for (const dep of t.dependsOn ?? []) {\n const d = byKey.get(dep);\n if (!d || d === t) continue;\n const l = longest(d);\n if (l.length > best.length) best = { length: l.length, next: d };\n }\n visiting.delete(t);\n const result = { length: best.length + Math.max(0, t.end - t.start), next: best.next };\n memo.set(t, result);\n return result;\n };\n let end: GanttTask | undefined;\n let max = -1;\n for (const t of tasks) {\n const l = longest(t);\n if (l.length > max) {\n max = l.length;\n end = t;\n }\n }\n const path = new Set<GanttTask>();\n for (let t = end; t && !path.has(t); t = memo.get(t)?.next) path.add(t);\n return path;\n}\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 issues: ChartDataIssue[] = [];\n const tasks = input.tasks.filter((t) => {\n const ok = isFinite(t.start) && (t.milestone ? true : isFinite(t.end));\n if (!ok)\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `Task \"${t.name}\" has no valid start/end and was dropped.`,\n itemId: t.id ?? t.name,\n });\n else if (!t.milestone && t.end < t.start)\n issues.push({\n code: 'inverted-range',\n severity: 'warning',\n message: `Task \"${t.name}\" ends before it starts; the interval was normalized.`,\n itemId: t.id ?? t.name,\n });\n return ok;\n });\n const state = stateCanvas(input, tasks.length === 0);\n if (state) return { ...state, issues };\n const { width, height } = size(input);\n const critical = input.criticalPath ? criticalPath(tasks) : undefined;\n // Hierarchy: children sit under their parent (input order, recursively), indented per depth;\n // a collapsed parent hides its descendants. Tasks without a parent keep the flat order.\n const keyOf = (t: GanttTask) => t.id ?? t.name;\n const byKeyAll = new Map<ChartItemId, GanttTask>();\n for (const t of tasks) {\n if (t.id !== undefined && !byKeyAll.has(t.id)) byKeyAll.set(t.id, t);\n if (!byKeyAll.has(t.name)) byKeyAll.set(t.name, t);\n }\n const children = new Map<GanttTask, GanttTask[]>();\n const roots: GanttTask[] = [];\n for (const t of tasks) {\n const p = t.parent === undefined ? undefined : byKeyAll.get(t.parent);\n if (p && p !== t) children.set(p, [...(children.get(p) ?? []), t]);\n else roots.push(t);\n }\n const collapsed = new Set(input.collapsed ?? []);\n const isCollapsed = (t: GanttTask) => collapsed.has(keyOf(t)) || collapsed.has(t.name);\n const ordered: { task: GanttTask; depth: number }[] = [];\n const walk = (t: GanttTask, depth: number, seen: Set<GanttTask>) => {\n if (seen.has(t)) return;\n seen.add(t);\n ordered.push({ task: t, depth });\n if (!isCollapsed(t)) for (const c of children.get(t) ?? []) walk(c, depth + 1, seen);\n };\n const seen = new Set<GanttTask>();\n for (const r of roots) walk(r, 0, seen);\n const visible = ordered.map((o) => o.task);\n const depthOf = new Map(ordered.map((o) => [o.task, o.depth]));\n // A parent without an interval of its own spans its (visible) children.\n const spanOf = (t: GanttTask): { start: number; end: number } => {\n const kids = children.get(t) ?? [];\n if (kids.length === 0 || (isFinite(t.end) && t.end !== t.start))\n return { start: t.start, end: t.end };\n const spans = kids.map(spanOf);\n return {\n start: Math.min(...spans.map((s) => s.start)),\n end: Math.max(...spans.map((s) => s.end)),\n };\n };\n const rowNames = [...new Set(visible.map((t) => t.group ?? t.name))];\n const rowDepth = new Map<string, number>();\n for (const t of visible) {\n const row = t.group ?? t.name;\n if (!rowDepth.has(row)) rowDepth.set(row, depthOf.get(t) ?? 0);\n }\n const rowSuffix = (row: string) =>\n visible.some(\n (t) => (t.group ?? t.name) === row && isCollapsed(t) && (children.get(t)?.length ?? 0) > 0,\n )\n ? ' +'\n : '';\n const widest =\n Math.max(0, ...rowNames.map((n) => n.length + rowSuffix(n).length)) * CHAR +\n Math.max(0, ...rowNames.map((n) => (rowDepth.get(n) ?? 0) * 12));\n const legend = input.tasks.map((t, i) => ({ name: t.name, color: colorOf(input, i, t.color) }));\n const plot = plotBox(width, height, {\n top: 8 + legendTop(input, legend, width),\n right: 16,\n bottom: 32 + (input.xAxis?.label ? 14 : 0),\n left: Math.min(width / 2, Math.max(64, widest + 16)),\n });\n const format = makeFormatter(input.xAxis?.format ?? input.format);\n const today = input.today === undefined ? undefined : categoryValue(input.today);\n const [lo, hi] = minMax([\n ...visible.flatMap((t) => {\n const span = spanOf(t);\n return [\n ...(t.milestone ? [t.start] : [span.start, span.end]),\n ...(t.baseline ? [t.baseline.start, t.baseline.end] : []),\n ];\n }),\n ...(today !== undefined ? [today] : []),\n ]);\n const x = axis(\n [lo, hi],\n [plot.x, plot.x + plot.width],\n { ticks: input.xAxis?.ticks, format: input.xAxis?.format },\n input.format,\n );\n const rows = bandScale(rowNames.length, [plot.y, plot.y + plot.height]);\n const shapes: Shape[] = [];\n // Where editable bars sit, so a root can turn a drag into a task change.\n const bars: EditModel['bars'] = [];\n const invert = (pixel: number) =>\n x.domain[0] + ((pixel - plot.x) / Math.max(1, plot.width)) * (x.domain[1] - x.domain[0]);\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, {\n part: 'x-label',\n anchor: tickAnchor(t.pos, t.label, width),\n }),\n );\n }\n rowNames.forEach((name, i) => {\n const owner = visible.find((t) => (t.group ?? t.name) === name);\n shapes.push(\n label(plot.x - 8, px(rows.center(i)), `${name}${rowSuffix(name)}`, {\n part: 'y-label',\n anchor: 'end',\n baseline: 'middle',\n // The item lets an app toggle `collapsed` from a click on the row label.\n item:\n owner && (children.get(owner)?.length ?? 0) > 0\n ? { label: name, id: keyOf(owner), name: owner.name }\n : undefined,\n }),\n );\n });\n // Indentation is drawn as a leading offset: shift the label start by 12 px per depth.\n for (const s of shapes) {\n if (s.kind !== 'text' || s.part !== 'y-label') continue;\n const depth = rowDepth.get(s.text.replace(/ \\+$/, '')) ?? 0;\n if (depth) s.x = px(s.x + depth * 12);\n }\n // Non-working days (millisecond time axes, spans up to 400 days): shaded weekday bands.\n const DAY = 86_400_000;\n if (input.nonWorkingDays?.length && hi - lo <= 400 * DAY && hi > lo) {\n const days = new Set(input.nonWorkingDays);\n for (let d = Math.floor(lo / DAY) * DAY; d < hi; d += DAY) {\n if (!days.has(new Date(d).getUTCDay())) continue;\n const a = Math.max(lo, d);\n const b = Math.min(hi, d + DAY);\n if (b <= a) continue;\n shapes.push({\n kind: 'rect',\n part: 'non-working',\n x: px(x.scale(a)),\n y: plot.y,\n width: px(Math.max(0, x.scale(b) - x.scale(a))),\n height: plot.height,\n fill: CHART_COLORS.grid,\n opacity: 0.12,\n });\n }\n }\n if (input.xAxis?.label)\n shapes.push(\n label(px(plot.x + plot.width / 2), height - 4, input.xAxis.label, {\n part: 'axis-title',\n anchor: 'middle',\n }),\n );\n const scales = {\n plot,\n x: (v: string | number | Date) => x.scale(categoryValue(v)),\n y: (v: number) => rows.center(v),\n };\n shapes.push(\n ...referenceShapes(\n [\n ...(input.references ?? []),\n ...(today !== undefined ? [{ x: today, label: 'Today', variant: 'primary' as const }] : []),\n ],\n scales,\n ),\n );\n const placed = new Map<ChartItemId, { x0: number; x1: number; mid: number }>();\n const overlays: Shape[] = [];\n visible.forEach((t) => {\n if (isHidden(input, t.name)) return;\n const i = tasks.indexOf(t);\n const row = rowNames.indexOf(t.group ?? t.name);\n const span = spanOf(t);\n const x0 = x.scale(Math.min(span.start, span.end));\n const x1 = t.milestone ? x0 : x.scale(Math.max(span.start, span.end));\n const parentRow = (children.get(t)?.length ?? 0) > 0;\n if (t.baseline && !t.milestone) {\n const b0 = x.scale(Math.min(t.baseline.start, t.baseline.end));\n const b1 = x.scale(Math.max(t.baseline.start, t.baseline.end));\n shapes.push({\n kind: 'rect',\n part: 'baseline',\n x: px(b0),\n y: px(rows.start(row) + rows.bandwidth * 0.75),\n width: px(Math.max(1, b1 - b0)),\n height: px(rows.bandwidth / 4),\n fill: CHART_COLORS.axis,\n opacity: 0.6,\n rx: 1,\n title: `${t.name} planned: ${format(t.baseline.start)} – ${format(t.baseline.end)}`,\n });\n }\n const mid = rows.center(row);\n const color = colorOf(input, i, t.color);\n const faded = critical && !critical.has(t) ? 0.35 : undefined;\n if (!placed.has(t.name)) placed.set(t.name, { x0, x1, mid });\n if (t.id !== undefined && !placed.has(t.id)) placed.set(t.id, { x0, x1, mid });\n if (t.milestone) {\n // A milestone is a diamond at its start, as tall as the row.\n const h = rows.bandwidth / 2;\n const title = `${t.name}: ${format(t.start)}`;\n shapes.push({\n kind: 'path',\n part: 'milestone',\n d: `M${px(x0)} ${px(mid - h)}L${px(x0 + h)} ${px(mid)}L${px(x0)} ${px(mid + h)}L${px(x0 - h)} ${px(mid)}Z`,\n fill: color,\n opacity: faded,\n title,\n item: { label: title, id: t.id, name: t.name, category: t.group, index: i, value: t.start },\n });\n return;\n }\n const done = isFinite(t.progress) ? Math.max(0, Math.min(1, t.progress)) : undefined;\n const title = `${t.name}: ${format(span.start)} – ${format(span.end)}${done !== undefined ? ` · ${Math.round(done * 100)}% done` : ''}`;\n // Only leaf tasks are editable: a parent's span follows its children.\n if (!parentRow)\n bars.push({\n index: shapes.length,\n id: t.id ?? t.name,\n name: t.name,\n start: Math.min(t.start, t.end),\n end: Math.max(t.start, t.end),\n x0: px(x0),\n x1: px(x1),\n y: px(rows.start(row)),\n height: px(rows.bandwidth),\n });\n const barH = t.baseline ? rows.bandwidth * 0.7 : rows.bandwidth;\n shapes.push({\n kind: 'rect',\n part: parentRow ? 'summary' : 'bar',\n x: px(x0),\n y: px(rows.start(row)),\n width: px(Math.max(1, x1 - x0)),\n height: px(parentRow ? rows.bandwidth / 3 : barH),\n fill: color,\n rx: 2,\n opacity: faded,\n title,\n item: {\n label: title,\n id: t.id,\n name: t.name,\n category: t.group,\n index: i,\n value: Math.abs(t.end - t.start),\n },\n });\n if (done !== undefined && done > 0)\n overlays.push({\n kind: 'rect',\n part: 'progress',\n x: px(x0),\n y: px(mid - rows.bandwidth / 4),\n width: px(Math.max(1, (x1 - x0) * done)),\n height: px(rows.bandwidth / 2),\n fill: 'var(--skdx-color-text-default)',\n opacity: 0.35,\n rx: 1,\n });\n });\n // Dependencies: an elbow from the end of the prerequisite to the start of the task.\n const byKey = new Map<ChartItemId, GanttTask>();\n for (const t of tasks) {\n if (t.id !== undefined && !byKey.has(t.id)) byKey.set(t.id, t);\n if (!byKey.has(t.name)) byKey.set(t.name, t);\n }\n for (const t of tasks)\n for (const dep of t.dependsOn ?? []) {\n const from = placed.get(dep);\n const to = placed.get(t.id ?? t.name);\n if (!from) {\n issues.push({\n code: 'unknown-node',\n severity: 'warning',\n message: `Task \"${t.name}\" depends on \"${String(dep)}\", which does not exist.`,\n itemId: t.id ?? t.name,\n });\n continue;\n }\n if (!to || from === to) continue;\n const bend = Math.max(from.x1 + 6, to.x0 - 6);\n const source = byKey.get(dep);\n const onPath = critical && source && critical.has(source) && critical.has(t);\n const text = `${source?.name ?? String(dep)} → ${t.name}`;\n overlays.push({\n kind: 'path',\n part: 'dependency',\n d: `M${px(from.x1)} ${px(from.mid)}H${px(bend)}V${px(to.mid)}H${px(to.x0)}`,\n stroke: onPath ? 'var(--skdx-color-danger-500)' : CHART_COLORS.axis,\n strokeWidth: onPath ? 2.5 : 1.5,\n opacity: critical && !onPath ? 0.35 : undefined,\n title: text,\n item: { label: text, name: source?.name ?? String(dep), category: t.name },\n });\n }\n shapes.push(...overlays, ...annotationShapes(input.annotations, scales));\n const c = canvas(input, width, height, legend);\n return {\n ...c,\n shapes: [...shapes, ...c.shapes],\n issues,\n edit: { scale: (v: number) => x.scale(v), invert, bars },\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 {\n axis,\n canvas,\n CHAR,\n colorOf,\n extent,\n gridOn,\n isHidden,\n legendTop,\n MARGIN,\n plotBox,\n size,\n stateCanvas,\n thinTicks,\n} from './frame.js';\nimport { bandScale, finite, isFinite, px } from './scale.js';\nimport { frameShapes } from './shapes.js';\nimport type {\n BoxplotInput,\n BoxplotSeries,\n BoxSummary,\n Canvas,\n ChartDataIssue,\n ChartItemId,\n GroupedBoxSeries,\n Shape,\n Value,\n} from './types.js';\n\ntype Line = Extract<Shape, { kind: 'line' }>;\n\nexport type QuartileMethod = NonNullable<BoxplotInput['quartileMethod']>;\n\n/** Median of a sorted sample. */\nconst medianOf = (sorted: readonly number[]): number => {\n const n = sorted.length;\n if (n === 0) return 0;\n return n % 2\n ? (sorted[(n - 1) / 2] as number)\n : ((sorted[n / 2 - 1] as number) + (sorted[n / 2] as number)) / 2;\n};\n\n/** Linear-interpolated quantile of a sorted sample (R type 7, Excel QUARTILE.INC). */\nconst linear = (sorted: readonly 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/** Quantile excluding the median from the halves (R type 6, Excel QUARTILE.EXC); clamped at the ends. */\nconst exclusive = (sorted: readonly number[], q: number): number => {\n const n = sorted.length;\n if (n === 0) return 0;\n const pos = (n + 1) * q - 1;\n if (pos <= 0) return sorted[0] as number;\n if (pos >= n - 1) return sorted[n - 1] as number;\n const lo = Math.floor(pos);\n const a = sorted[lo] as number;\n const b = sorted[lo + 1] as number;\n return a + (b - a) * (pos - lo);\n};\n\n/**\n * Quartiles of a sorted sample by the given method. `tukey` uses hinges: the medians of the lower\n * and upper halves, both halves including the median for odd sizes.\n */\nexport function quartiles(\n sorted: readonly number[],\n method: QuartileMethod = 'linear',\n): { q1: number; median: number; q3: number } {\n const median = medianOf(sorted);\n const n = sorted.length;\n if (n === 0) return { q1: 0, median: 0, q3: 0 };\n if (method === 'tukey') {\n const half = Math.floor(n / 2);\n const lower = sorted.slice(0, n % 2 ? half + 1 : half);\n const upper = sorted.slice(n % 2 ? half : half);\n return { q1: medianOf(lower), median, q3: medianOf(upper) };\n }\n const f = method === 'exclusive' ? exclusive : linear;\n return { q1: f(sorted, 0.25), median, q3: f(sorted, 0.75) };\n}\n\n/**\n * Five-number summary with Tukey fences: whiskers reach the last sample within `whisker` × IQR\n * of the box (1.5 by default), everything beyond is an outlier. The mean is included for\n * the optional mean marker.\n */\nexport function boxStats(\n data: readonly Value[],\n method: QuartileMethod = 'linear',\n whisker = 1.5,\n): BoxSummary & { mean: number; outliers: number[]; count: number; low: number; high: number } {\n const sorted = finite(data).sort((a, b) => a - b);\n const { q1, median, q3 } = quartiles(sorted, method);\n const iqr = q3 - q1;\n const lo = q1 - whisker * iqr;\n const hi = q3 + whisker * iqr;\n const inside = sorted.filter((v) => v >= lo && v <= hi);\n const mean = sorted.length ? sorted.reduce((s, v) => s + v, 0) / sorted.length : 0;\n const min = inside[0] ?? q1;\n const max = inside[inside.length - 1] ?? q3;\n return {\n name: '',\n q1,\n median,\n q3,\n min,\n max,\n // `low`/`high` are the whisker ends under their pre-existing names.\n low: min,\n high: max,\n mean,\n outliers: sorted.filter((v) => v < lo || v > hi),\n count: sorted.length,\n };\n}\n\nconst isSummary = (s: BoxplotSeries): s is BoxSummary => 'median' in s && !('data' in s);\nconst isGrouped = (s: BoxplotSeries): s is GroupedBoxSeries =>\n 'data' in s && Array.isArray(s.data[0]);\n\n/** One drawn box: which series and category it belongs to, and its statistics. */\ninterface Cell {\n si: number;\n ci: number;\n name: string;\n id: ChartItemId | undefined;\n color: string;\n st: BoxSummary & { count?: number | undefined };\n raw: Value[] | undefined;\n}\n\n/**\n * One box per series (or per series and category when `categories` is set): raw samples\n * summarized with the chosen quartile method, or a given summary.\n */\nexport function layoutBoxplot(input: BoxplotInput): Canvas {\n const method = input.quartileMethod ?? 'linear';\n const whisker = input.whisker ?? 1.5;\n const issues: ChartDataIssue[] = [];\n const categories = input.categories;\n const grouped = categories !== undefined;\n const skip = (s: BoxplotSeries, message: string) =>\n issues.push({ code: 'invalid-value', severity: 'warning', message, itemId: s.id ?? s.name });\n const cells: Cell[] = [];\n input.series.forEach((s, si) => {\n const color = colorOf(input, si, s.color);\n const push = (ci: number, sample: Value[] | undefined, summary?: BoxSummary) => {\n const st: (BoxSummary & { count?: number | undefined }) | undefined =\n summary ??\n (sample && finite(sample).length ? boxStats(sample, method, whisker) : undefined);\n if (!st || ![st.min, st.q1, st.median, st.q3, st.max].every(isFinite)) return false;\n if (st.count !== undefined && st.count < 5)\n issues.push({\n code: 'small-sample',\n severity: 'warning',\n message: `Series \"${s.name}\"${grouped ? ` at \"${categories[ci] ?? ci}\"` : ''} has ${st.count} observation${st.count === 1 ? '' : 's'}; quartiles are not meaningful below 5.`,\n itemId: s.id ?? s.name,\n });\n cells.push({\n si,\n ci,\n name: s.name,\n id: s.id,\n color,\n st: { ...st, name: s.name },\n raw: sample,\n });\n return true;\n };\n if (!grouped) {\n const ok = isSummary(s)\n ? push(0, undefined, s)\n : isGrouped(s)\n ? push(0, s.data.flat())\n : push(0, s.data);\n if (!ok) skip(s, `Series \"${s.name}\" has no valid observations or summary and was skipped.`);\n return;\n }\n if (isSummary(s)) {\n skip(\n s,\n `Series \"${s.name}\" is a summary, which cannot be grouped by categories; it was skipped.`,\n );\n return;\n }\n if (!isGrouped(s)) {\n skip(\n s,\n `Series \"${s.name}\" is not grouped (its data is one sample, not one per category); it was drawn in the first category.`,\n );\n push(0, s.data);\n return;\n }\n categories.forEach((_, ci) => push(ci, s.data[ci]));\n });\n const state = stateCanvas(input, cells.length === 0);\n if (state) return { ...state, issues };\n const formatValue = makeFormatter(input.yAxis?.format ?? input.format);\n const { width, height } = size(input);\n const horizontal = input.orientation === 'horizontal';\n const groups = grouped ? categories : input.series.map((s) => s.name);\n const widest = Math.max(0, ...groups.map((n) => n.length)) * CHAR;\n const legend = input.series.map((s, i) => ({ name: s.name, color: colorOf(input, i, s.color) }));\n const plot = plotBox(width, height, {\n ...MARGIN,\n top: MARGIN.top + legendTop(input, legend, width) + (input.yAxis?.label ? 12 : 0),\n left: horizontal ? Math.max(MARGIN.left, widest + 16) : MARGIN.left,\n bottom: MARGIN.bottom + (horizontal && input.yAxis?.label ? 14 : 0),\n });\n const shown = cells.filter((c) => !isHidden(input, c.name));\n // The value axis runs up y, or along x when horizontal; groups take the other one.\n const values = shown.flatMap((c) => [\n c.st.min,\n c.st.max,\n ...(c.st.outliers ?? []),\n ...(isFinite(c.st.mean) ? [c.st.mean] : []),\n ]);\n const value = axis(\n extent(values, false),\n horizontal ? [plot.x, plot.x + plot.width] : [plot.y + plot.height, plot.y],\n input.yAxis ?? {},\n input.format,\n );\n const band = bandScale(\n groups.length,\n horizontal ? [plot.y, plot.y + plot.height] : [plot.x, plot.x + plot.width],\n );\n // Grouped: the visible series share each category's band side by side, like grouped bars.\n const slots = grouped ? [...new Set(shown.map((c) => c.si))] : [];\n const slotW = grouped ? band.bandwidth / Math.max(1, slots.length) : band.bandwidth;\n const center = (c: Cell) =>\n grouped ? band.start(c.ci) + (slots.indexOf(c.si) + 0.5) * slotW : band.center(c.si);\n const c = canvas(input, width, height, legend);\n const categoryTicks = groups.map((g, i) => ({ pos: px(band.center(i)), label: g }));\n const shapes: Shape[] = frameShapes(\n {\n ...c,\n plot,\n xTicks: horizontal ? categoryTicks : thinTicks(categoryTicks, plot.width),\n yTicks: horizontal ? thinTicks(value.ticks, plot.width) : value.ticks,\n baseline: horizontal ? plot.x : plot.y + plot.height,\n },\n {\n horizontal,\n grid: gridOn(input.yAxis),\n ...(horizontal ? { xLabel: input.yAxis?.label } : { yLabel: input.yAxis?.label }),\n },\n );\n // A segment along the value axis at the category position `at`, or a rect `t` thick around it.\n const seg = (v0: number, v1: number, at: number): Pick<Line, 'x1' | 'x2' | 'y1' | 'y2'> => {\n const a = px(value.scale(v0));\n const b = px(value.scale(v1));\n return horizontal ? { x1: a, x2: b, y1: at, y2: at } : { x1: at, x2: at, y1: a, y2: b };\n };\n const box = (v0: number, v1: number, mid: number, t: number) => {\n const a = value.scale(v0);\n const b = value.scale(v1);\n const len = Math.max(1, Math.abs(b - a));\n return horizontal\n ? { x: px(Math.min(a, b)), y: px(mid - t / 2), width: px(len), height: px(t) }\n : { x: px(mid - t / 2), y: px(Math.min(a, b)), width: px(t), height: px(len) };\n };\n /** A point from a value along the axis and an offset across the band. */\n const at = (v: number, across: number) =>\n horizontal ? `${px(value.scale(v))} ${px(across)}` : `${px(across)} ${px(value.scale(v))}`;\n const dot = (\n v: number,\n mid: number,\n r: number,\n fill: string,\n part: string,\n title: string,\n opacity?: number,\n ): Shape => ({\n kind: 'circle',\n part,\n cx: horizontal ? px(value.scale(v)) : px(mid),\n cy: horizontal ? px(mid) : px(value.scale(v)),\n r,\n fill,\n opacity,\n title,\n });\n for (const cell of shown) {\n const { st, color, name, raw } = cell;\n const mid = px(center(cell));\n const category = grouped ? categories[cell.ci] : undefined;\n const who = category !== undefined ? `${name}, ${category}` : name;\n const title = `${who}: min ${formatValue(st.min)} Q1 ${formatValue(st.q1)} median ${formatValue(st.median)} Q3 ${formatValue(st.q3)} max ${formatValue(st.max)}${input.mean && isFinite(st.mean) ? ` mean ${formatValue(st.mean)}` : ''}`;\n const item = {\n label: title,\n id: cell.id,\n series: name,\n seriesId: cell.id ?? name,\n category,\n index: grouped ? cell.ci : cell.si,\n value: st.median,\n };\n const boxW = slotW * 0.6;\n const half = boxW / 2;\n const medianLine = horizontal\n ? {\n x1: px(value.scale(st.median)),\n x2: px(value.scale(st.median)),\n y1: px(mid - half),\n y2: px(mid + half),\n }\n : {\n x1: px(mid - half),\n x2: px(mid + half),\n y1: px(value.scale(st.median)),\n y2: px(value.scale(st.median)),\n };\n // Notch: ±1.58 × IQR / √n around the median, clamped into the box; a rough 95% interval.\n const n = st.count;\n const notch =\n input.notched && n\n ? Math.min((1.58 * (st.q3 - st.q1)) / Math.sqrt(n), (st.q3 - st.q1) / 2)\n : 0;\n const body: Shape = notch\n ? {\n kind: 'path',\n part: 'box',\n d: `M${[\n at(st.q1, mid - half),\n at(st.median - notch, mid - half),\n at(st.median, mid - half + boxW / 4),\n at(st.median + notch, mid - half),\n at(st.q3, mid - half),\n at(st.q3, mid + half),\n at(st.median + notch, mid + half),\n at(st.median, mid + half - boxW / 4),\n at(st.median - notch, mid + half),\n at(st.q1, mid + half),\n ].join('L')}Z`,\n fill: color,\n stroke: color,\n fillOpacity: 0.5,\n title,\n item,\n }\n : {\n kind: 'rect',\n part: 'box',\n ...box(st.q1, st.q3, mid, boxW),\n fill: color,\n stroke: color,\n opacity: 0.5,\n title,\n item,\n };\n shapes.push(\n { kind: 'line', part: 'whisker', ...seg(st.max, st.min, mid), stroke: color, title },\n body,\n { kind: 'line', part: 'median', ...medianLine, stroke: color, title },\n ...(st.outliers ?? []).map((v) =>\n dot(v, mid, 3, color, 'outlier', `${who}: ${formatValue(v)}`),\n ),\n );\n if (input.mean && isFinite(st.mean)) {\n const cx = horizontal ? px(value.scale(st.mean)) : mid;\n const cy = horizontal ? mid : px(value.scale(st.mean));\n shapes.push({\n kind: 'path',\n part: 'mean',\n d: `M${cx} ${px(cy - 4)}L${px(cx + 4)} ${cy}L${cx} ${px(cy + 4)}L${px(cx - 4)} ${cy}Z`,\n fill: 'var(--skdx-color-text-default)',\n title: `${who} mean: ${formatValue(st.mean)}`,\n });\n }\n // Raw observations, jittered deterministically across the box so a dense sample stays readable.\n if (input.points && raw)\n finite(raw).forEach((v, k) => {\n const jitter = (((k * 7919) % 97) / 96 - 0.5) * boxW * 0.8;\n shapes.push(\n dot(v, mid + jitter, 2, color, 'observation', `${who}: ${formatValue(v)}`, 0.6),\n );\n });\n }\n return { ...c, shapes: [...shapes, ...c.shapes], issues };\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 { makeColorScale } from './colors.js';\nimport { makeFormatter } from './format.js';\nimport { canvas, CHAR, colorOf, isHidden, legendTop, size, stateCanvas } from './frame.js';\nimport { cutDepth, depthOf, drill, nodeId, nodeValue, sortChildren } from './hierarchy.js';\nimport { arc } from './pie.js';\nimport { px } from './scale.js';\nimport { label, withLabelSurfaces } from './shapes.js';\nimport { breadcrumbShapes } from './treemap.js';\nimport type { Canvas, Shape, SunburstInput, TreeNode } from './types.js';\n\nconst rad = (deg: number) => (deg * Math.PI) / 180;\n\n/**\n * Nested rings, one per tree depth, children inside their parent's span. `rootId` fills the\n * rings with one node's subtree (controlled drill-down), `padAngle` separates siblings and\n * `colorScale` colors leaves by value.\n */\nexport function layoutSunburst(input: SunburstInput): Canvas {\n const { nodes: roots, path } = drill(input.data, input.rootId);\n const nodes = cutDepth(roots, input.maxDepth);\n const state = stateCanvas(input, !nodes.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 inner = Math.min(0.9, Math.max(0, input.innerRadius ?? 0));\n // Crumbs sit in the hole when there is one, else in a row above the rings.\n const crumbs = input.breadcrumbs && path.length > 0;\n const crumbsAbove = crumbs && inner === 0;\n const legend = nodes.map((n, i) => ({ name: n.name, color: colorOf(input, i, n.color) }));\n const top = legendTop(input, legend, width) + (crumbsAbove ? 20 : 0);\n const cx = width / 2;\n const cy = top + (height - top) / 2;\n const radius = Math.max(0, Math.min(width, height - top) / 2 - 8);\n const hole = radius * inner;\n const ringWidth = (radius - hole) / Math.max(1, depthOf(nodes));\n const start = rad(input.startAngle ?? 0);\n const end = rad(input.endAngle ?? (input.startAngle ?? 0) + 360);\n const pad = Math.max(0, rad(input.padAngle ?? 0));\n const sort = input.sort ?? 'none';\n const leaves: number[] = [];\n const collect = (list: TreeNode[]) => {\n for (const n of list)\n if (n.children?.length) collect(n.children);\n else leaves.push(nodeValue(n));\n };\n collect(nodes);\n const scale = input.colorScale\n ? makeColorScale(input.colorScale, leaves, colorOf(input, 0), undefined, formatValue)\n : undefined;\n const shapes: Shape[] = [];\n const texts: Shape[] = [];\n const walk = (\n list: TreeNode[],\n depth: number,\n a0: number,\n span: number,\n color: string | undefined,\n ) => {\n const valueOf = (n: TreeNode) =>\n depth === 0 && isHidden(input, n.name) ? 0 : Math.max(0, nodeValue(n));\n const ordered = sortChildren(list, sort);\n const total = ordered.reduce((s, n) => s + valueOf(n), 0);\n // Siblings with a value share the span minus the pads between them.\n const gaps = Math.max(0, ordered.filter((n) => valueOf(n) > 0).length - 1);\n const usable = Math.max(0, span - gaps * pad);\n let angle = a0;\n ordered.forEach((n) => {\n const value = valueOf(n);\n const sweep = total > 0 ? (value / total) * usable : 0;\n const branch = (n.children?.length ?? 0) > 0;\n const scaled = !branch && scale ? scale.color(value) : undefined;\n const fill = scaled?.fill ?? n.color ?? color ?? colorOf(input, list.indexOf(n));\n if (sweep > 0) {\n const r0 = hole + ringWidth * depth;\n const r1 = r0 + ringWidth;\n // A name fits when the arc's middle circumference is longer than the text.\n if (input.labels && sweep * ((r0 + r1) / 2) > n.name.length * CHAR + 4) {\n const mid = angle + sweep / 2;\n const rm = (r0 + r1) / 2;\n texts.push(\n label(px(cx + rm * Math.sin(mid)), px(cy - rm * Math.cos(mid)), n.name, {\n part: 'arc-label',\n anchor: 'middle',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-on-accent)',\n }),\n );\n }\n const title = `${n.name}: ${formatValue(value)}`;\n shapes.push({\n kind: 'path',\n part: 'arc',\n d: arc(cx, cy, r1, r0, angle, angle + sweep),\n fill,\n opacity: scaled ? scaled.opacity : 1 - depth * 0.2,\n stroke: 'var(--skdx-color-surface-default)',\n title,\n item: { label: title, id: nodeId(n), name: n.name, value },\n });\n walk(n.children ?? [], depth + 1, angle, sweep, fill);\n angle += sweep + pad;\n }\n });\n };\n walk(nodes, 0, start, Math.max(0, Math.min(2 * Math.PI, end - start)), undefined);\n if (input.centerLabel)\n texts.push(\n label(px(cx), px(crumbs && !crumbsAbove ? cy - 8 : 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 if (crumbs) {\n const w =\n path.reduce((s, n) => s + n.name.length * CHAR + 6, 0) + (path.length - 1) * (CHAR + 6);\n texts.push(\n ...(crumbsAbove\n ? breadcrumbShapes(path, 8, legendTop(input, legend, width) + 10)\n : breadcrumbShapes(path, cx - w / 2, input.centerLabel ? cy + 8 : cy)),\n );\n }\n const c = canvas(input, width, height, legend);\n return { ...c, shapes: withLabelSurfaces([...shapes, ...texts, ...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, CHAR, colorOf, isHidden, legendTop, size, stateCanvas } from './frame.js';\nimport { selectedIds } from './identity.js';\nimport { CHART_COLORS } from './palette.js';\nimport { arc } from './pie.js';\nimport { isFinite, niceTicks, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { Canvas, ChartDataIssue, ChordInput, Shape } from './types.js';\n\nconst TAU = 2 * Math.PI;\nconst RING = 12;\nconst TICK = 5;\n\n/** Names and a flow matrix from either input form; `links` are summed into the matrix. */\nexport function chordMatrix(input: ChordInput): {\n names: string[];\n matrix: number[][];\n issues: ChartDataIssue[];\n} {\n const issues: ChartDataIssue[] = [];\n if (input.links) {\n const names = [...(input.names ?? [])];\n const known = new Set(names);\n for (const l of input.links)\n for (const n of [l.source, l.target])\n if (!known.has(n)) {\n if (input.names)\n issues.push({\n code: 'unknown-node',\n severity: 'warning',\n message: `Link ${l.source} → ${l.target} names \"${n}\", which is not in \\`names\\`; it was added.`,\n itemId: l.id,\n });\n known.add(n);\n names.push(n);\n }\n const at = new Map(names.map((n, i) => [n, i]));\n const matrix = names.map(() => names.map(() => 0));\n for (const l of input.links) {\n if (!isFinite(l.value) || l.value < 0) {\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `Link ${l.source} → ${l.target} has no valid value and was dropped.`,\n itemId: l.id,\n });\n continue;\n }\n const row = matrix[at.get(l.source) as number] as number[];\n row[at.get(l.target) as number] = (row[at.get(l.target) as number] as number) + l.value;\n }\n return { names, matrix, issues };\n }\n const names = input.names ?? [];\n const matrix = input.matrix ?? [];\n if (matrix.length !== names.length || matrix.some((r) => r.length !== names.length))\n issues.push({\n code: 'ragged-matrix',\n severity: 'warning',\n message: `The matrix is ${matrix.length} × ${matrix[0]?.length ?? 0} but there are ${names.length} names; missing cells count as zero.`,\n });\n return { names, matrix, issues };\n}\n\nexport function layoutChord(input: ChordInput): Canvas {\n const { names: given, matrix: given2, issues } = chordMatrix(input);\n const state = stateCanvas(\n input,\n given.length === 0 || !given2.some((row) => row.some((v) => isFinite(v) && v > 0)),\n 300,\n 300,\n );\n if (state) return { ...state, issues };\n const formatValue = makeFormatter(input.format);\n const { width, height } = size(input, 300, 300);\n // Groups keep their input order (and color) but can be arranged by total flow.\n const cellRaw = (i: number, j: number) => {\n const v = given2[i]?.[j];\n return isFinite(v) ? Math.max(0, v) : 0;\n };\n const totalOf = (i: number) => given.reduce((s, _n, j) => s + cellRaw(i, j) + cellRaw(j, i), 0);\n const order = given.map((_, i) => i);\n if (input.sort)\n order.sort((a, b) =>\n input.sort === 'asc' ? totalOf(a) - totalOf(b) : totalOf(b) - totalOf(a),\n );\n const names = order.map((i) => given[i] as string);\n const colorAt = (k: number) => colorOf(input, order[k] as number);\n const legend = names.map((name, i) => ({ name, color: colorAt(i) }));\n const top = legendTop(input, legend, width);\n const cx = width / 2;\n const cy = top + (height - top) / 2;\n // Group names sit outside the rim, so the circle keeps room for the widest one on either side;\n // without it the left-hand label runs off the svg.\n const nameGap = input.ticks ? 8 + TICK + 14 : 8;\n const nameRoom = nameGap + Math.max(0, ...given.map((s) => s.length)) * CHAR + 4;\n const r = Math.max(0, Math.min(width / 2 - nameRoom, (height - top) / 2 - 36));\n const r0 = Math.max(0, r - RING);\n const PAD = ((input.padding ?? 2.3) * Math.PI) / 180;\n const n = names.length;\n const selectedId = selectedIds(input.selected)[0];\n const selected = selectedId === undefined ? -1 : names.indexOf(String(selectedId));\n const cell = (i: number, j: number) => {\n const hidden = isHidden(input, names[i] as string) || isHidden(input, names[j] as string);\n return hidden ? 0 : cellRaw(order[i] as number, order[j] as number);\n };\n const rowSum = names.map((_, i) => 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 = 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 const tickLabels: { x: number; y: number }[] = [];\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 // The ribbon takes the color of the larger direction, so direction is visible.\n const from = out >= back ? i : j;\n const lit = selected < 0 || i === selected || j === selected;\n const text =\n i === j\n ? `${names[i]}: ${formatValue(out)}`\n : `${names[i]} → ${names[j]}: ${formatValue(out)} · ${names[j]} → ${names[i]}: ${formatValue(back)}`;\n shapes.push({\n kind: 'path',\n part: 'chord',\n d,\n fill: colorAt(from),\n opacity: lit ? 0.5 : 0.08,\n title: text,\n item: {\n label: text,\n id: `${names[i]}→${names[j]}`,\n name: names[i],\n category: names[j],\n value: out + back,\n },\n });\n }\n }\n groups.forEach((g, i) => {\n if (g.a1 <= g.a0) return;\n const text = `${names[i]}: ${formatValue(rowSum[i] as number)}`;\n shapes.push({\n kind: 'path',\n part: 'group',\n d: arc(cx, cy, r, r0, g.a0, g.a1),\n fill: colorAt(i),\n opacity:\n selected < 0 || i === selected || cell(i, selected) + cell(selected, i) > 0\n ? undefined\n : 0.3,\n title: text,\n item: { label: text, id: names[i], name: names[i], index: i, value: rowSum[i] as number },\n });\n const mid = (g.a0 + g.a1) / 2;\n const sin = Math.sin(mid);\n // Ticks sit on the rim; the group name moves out past their labels.\n const nameR = r + nameGap;\n shapes.push(\n label(px(cx + nameR * sin), px(cy - nameR * Math.cos(mid)), names[i] as string, {\n anchor: sin > 0.1 ? 'start' : sin < -0.1 ? 'end' : 'middle',\n baseline: 'middle',\n }),\n );\n if (!input.ticks) return;\n const sum = rowSum[i] as number;\n niceTicks(0, sum, 4)\n .filter((v) => v <= sum)\n .forEach((v, k) => {\n const a = g.a0 + v * unit;\n const s = Math.sin(a);\n const c = Math.cos(a);\n shapes.push({\n kind: 'line',\n part: 'tick',\n x1: px(cx + r * s),\n y1: px(cy - r * c),\n x2: px(cx + (r + TICK) * s),\n y2: px(cy - (r + TICK) * c),\n stroke: CHART_COLORS.axis,\n });\n if (k % 2) return;\n const lx = px(cx + (r + TICK + 3) * s);\n const ly = px(cy - (r + TICK + 3) * c);\n // A label that would sit on an earlier one is skipped.\n if (tickLabels.some((p) => Math.abs(p.x - lx) < 12 && Math.abs(p.y - ly) < 12)) return;\n tickLabels.push({ x: lx, y: ly });\n shapes.push(\n label(lx, ly, formatValue(v), {\n part: 'tick-label',\n anchor: s > 0.1 ? 'start' : s < -0.1 ? 'end' : 'middle',\n baseline: 'middle',\n }),\n );\n });\n });\n const c = canvas(input, width, height, legend);\n return { ...c, shapes: [...shapes, ...c.shapes], issues };\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 { colorLegendRoom, colorLegendShapes, makeColorScale } from './colors.js';\nimport { makeFormatter } from './format.js';\nimport { canvas, colorOf, legendTop, size, stateCanvas } from './frame.js';\nimport { CHART_COLORS } from './palette.js';\nimport { isFinite, minMax, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { Canvas, ChartDataIssue, MapInput, Shape } from './types.js';\n\nconst PAD = 8;\n\ntype Feature = MapInput['features'][number];\n\n/** The rings of a polygon feature; point and line features have none. */\nconst rings = (f: Feature): [number, number][][] =>\n f.geometry.type === 'Polygon'\n ? f.geometry.coordinates\n : f.geometry.type === 'MultiPolygon'\n ? f.geometry.coordinates.flat()\n : [];\n/** The coordinates of a point feature. */\nconst pointsOf = (f: Feature): [number, number][] =>\n f.geometry.type === 'Point'\n ? [f.geometry.coordinates]\n : f.geometry.type === 'MultiPoint'\n ? f.geometry.coordinates\n : [];\n/** The line strings of a line feature. */\nconst linesOf = (f: Feature): [number, number][][] =>\n f.geometry.type === 'LineString'\n ? [f.geometry.coordinates]\n : f.geometry.type === 'MultiLineString'\n ? f.geometry.coordinates\n : [];\nconst every = (f: Feature): [number, number][] => [\n ...rings(f).flat(),\n ...pointsOf(f),\n ...linesOf(f).flat(),\n];\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\nconst validCoord = (p: [number, number] | undefined): p is [number, number] =>\n p !== undefined && Number.isFinite(p[0]) && Number.isFinite(p[1]);\n\n/**\n * Regions (a choropleth), a marker/bubble layer and a line layer, all under one projection\n * fitted to the regions' bounds (equirectangular by default, or Mercator). Region fill follows\n * the value through `colorScale`, by default a single color at an opacity ramp.\n */\nexport function layoutMap(input: MapInput): Canvas {\n const issues: ChartDataIssue[] = [];\n const features = input.features.filter((f) => {\n const ok = every(f).some(validCoord);\n if (!ok)\n issues.push({\n code: 'invalid-geometry',\n severity: 'warning',\n message: `Feature \"${f.name}\" has no valid coordinates and was dropped.`,\n itemId: f.id ?? f.name,\n });\n return ok;\n });\n const state = stateCanvas(input, features.length === 0);\n if (state) return { ...state, issues };\n const formatValue = makeFormatter(input.format);\n const { width, height } = size(input);\n const top = legendTop(input);\n const legendRoom = colorLegendRoom(input.colorLegend).bottom;\n const legendColumn = colorLegendRoom(input.colorLegend).right;\n const toY = input.projection === 'mercator' ? mercatorY : (lat: number) => lat;\n // The fit follows the polygons; point and line features only count when there are none.\n const regions = features.filter((f) => rings(f).length > 0);\n const points = (regions.length ? regions : features).flatMap((f) => every(f).filter(validCoord));\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 fitted = Math.min(\n (width - legendColumn - 2 * PAD) / Math.max(1e-9, maxLon - minLon),\n (height - top - legendRoom - 2 * PAD) / Math.max(1e-9, maxLat - minLat),\n );\n // The view: a zoom factor over the fitted scale and a projected centre (longitude, projected\n // latitude) that sits in the middle of the plot.\n const plot = {\n x: PAD,\n y: top + PAD,\n width: width - legendColumn - 2 * PAD,\n height: height - top - legendRoom - 2 * PAD,\n };\n const zoomLevel = Math.max(1, Math.min(64, input.view?.zoom ?? 1));\n const scale = fitted * zoomLevel;\n const center: [number, number] = input.view?.center\n ? [input.view.center[0], toY(input.view.center[1])]\n : [(minLon + maxLon) / 2, (minLat + maxLat) / 2];\n const ox = plot.x + plot.width / 2 - center[0] * scale;\n const oy = plot.y + plot.height / 2 + center[1] * scale;\n const projectXY = ([lon, lat]: [number, number]) => ({\n x: px(ox + lon * scale),\n y: px(oy - toY(lat) * scale),\n });\n const project = (p: [number, number]) => {\n const { x, y } = projectXY(p);\n return `${x} ${y}`;\n };\n\n const color = colorOf(input, 0, input.color);\n const colors = makeColorScale(\n input.colorScale,\n features.map((f) => f.value),\n color,\n undefined,\n formatValue,\n );\n const labels: Shape[] = [];\n const shapes: Shape[] = regions.map((f) => {\n const outline = rings(f);\n if (input.labels && outline.length) {\n // The label sits at the centroid of the largest ring's bounding box.\n const biggest = outline.reduce((a, b) => (b.length > a.length ? b : a));\n const [lx0, lx1] = minMax(biggest.map((p) => p[0]));\n const [ly0, ly1] = minMax(biggest.map((p) => toY(p[1])));\n labels.push(\n label(\n px(ox + ((lx0 + lx1) / 2 - minLon) * scale),\n px(oy + (maxLat - (ly0 + ly1) / 2) * scale),\n f.name,\n {\n part: 'region-label',\n anchor: 'middle',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-default)',\n },\n ),\n );\n }\n const fill = f.color !== undefined ? { fill: f.color, opacity: 1 } : colors.color(f.value);\n const title = `${f.name}${isFinite(f.value) ? `: ${formatValue(f.value)}` : ''}`;\n return {\n kind: 'path',\n part: 'region',\n d: outline.map((ring) => `M${ring.filter(validCoord).map(project).join('L')}Z`).join(''),\n fill: fill?.fill ?? CHART_COLORS.grid,\n opacity: fill?.opacity ?? 0.6,\n stroke: 'var(--skdx-color-surface-default)',\n title,\n item: { label: title, id: f.id ?? f.name, name: f.name, value: f.value },\n };\n });\n // Line layer: routes and connections, width by value; line features join it and take the\n // colour scale when they carry a value.\n const lines = [\n ...(input.lines ?? []),\n ...features.flatMap((f) =>\n linesOf(f).map((coordinates) => ({\n id: f.id,\n name: f.name,\n coordinates,\n value: f.value,\n color: f.color ?? (isFinite(f.value) ? colors.color(f.value)?.fill : undefined),\n dash: undefined,\n })),\n ),\n ].filter((l) => l.coordinates.filter(validCoord).length >= 2);\n const [, lMax] = minMax(lines.map((l) => l.value));\n const routes: Shape[] = lines.map((l, i) => {\n const title = `${l.name}${isFinite(l.value) ? `: ${formatValue(l.value)}` : ''}`;\n return {\n kind: 'path',\n part: 'route',\n d: `M${l.coordinates.filter(validCoord).map(project).join('L')}`,\n stroke: l.color ?? colorOf(input, 2),\n strokeWidth:\n isFinite(l.value) && lMax > 0 ? 1 + 3 * Math.sqrt(Math.max(0, l.value) / lMax) : 1.5,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n dash: l.dash,\n opacity: 0.85,\n title,\n item: { label: title, id: l.id ?? l.name, name: l.name, index: i, value: l.value },\n };\n });\n // Marker layer: dots, or bubbles whose area follows the value; point features join it.\n const marks = [\n ...(input.points ?? []),\n ...features.flatMap((f) =>\n pointsOf(f).map((coordinates) => ({\n id: f.id,\n name: f.name,\n coordinates,\n value: f.value,\n color: f.color ?? (isFinite(f.value) ? colors.color(f.value)?.fill : undefined),\n })),\n ),\n ].filter((p) => validCoord(p.coordinates));\n const [rMin, rMax] = input.sizeRange ?? [3, 14];\n const [, vMax] = minMax(marks.map((p) => p.value));\n const markers: Shape[] = marks.map((p, i) => {\n const { x: mx, y: my } = projectXY(p.coordinates);\n const sized = Number.isFinite(p.value) && vMax > 0;\n const title = `${p.name}${sized ? `: ${formatValue(p.value as number)}` : ''}`;\n return {\n kind: 'circle',\n part: sized ? 'bubble' : 'point',\n cx: mx,\n cy: my,\n r: px(sized ? Math.max(rMin, Math.sqrt(Math.max(0, p.value as number) / vMax) * rMax) : rMin),\n fill: p.color ?? colorOf(input, 1),\n stroke: 'var(--skdx-color-surface-default)',\n opacity: 0.85,\n title,\n item: { label: title, id: p.id ?? p.name, name: p.name, index: i, value: p.value },\n };\n });\n const legend = input.colorLegend\n ? colorLegendShapes(\n colors,\n legendColumn\n ? { x: plot.x + plot.width + 12, y: plot.y, width: legendColumn, height: plot.height }\n : { x: PAD, y: height - legendRoom + 8, width: width - 2 * PAD, height: legendRoom },\n colorLegendRoom(input.colorLegend).options,\n )\n : [];\n // The centre is reported in longitude/latitude (unprojected) so it round-trips through `view`.\n const unY =\n input.projection === 'mercator'\n ? (y: number) => (Math.atan(Math.exp(y)) * 360) / Math.PI - 90\n : (y: number) => y;\n return {\n ...canvas(input, width, height),\n shapes: [...shapes, ...routes, ...labels, ...markers, ...legend],\n issues,\n map: {\n view: { center: [center[0], unY(center[1])], zoom: zoomLevel },\n bounds: { minLon, maxLon, minLat, maxLat },\n plot,\n scale,\n toY,\n fromY: unY,\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 {\n axis,\n canvas,\n colorOf,\n isHidden,\n legendTop,\n MARGIN,\n plotBox,\n size,\n stateCanvas,\n thinTicks,\n} from './frame.js';\nimport { isFinite, px } from './scale.js';\nimport { frameShapes, label, withLabelSurfaces } from './shapes.js';\nimport type { Canvas, ChartDataIssue, MarimekkoChartInput, Shape } from './types.js';\n\n/**\n * Two encodings in one chart: column widths follow each category's total (market size, revenue),\n * segment heights inside a column follow that segment's share of the column (mix, composition).\n * Every tooltip names both, since neither reads off the axes alone.\n */\nexport function layoutMarimekkoChart(input: MarimekkoChartInput): Canvas {\n const issues: ChartDataIssue[] = [];\n const segments = input.segments.map((s, i) =>\n typeof s === 'string'\n ? { name: s, id: s, color: colorOf(input, i) }\n : { name: s.name, id: s.id ?? s.name, color: colorOf(input, i, s.color) },\n );\n const shownSeg = segments.map((s) => !isHidden(input, s.name));\n // Non-finite and negative values are drawn as zero and reported once each.\n const value = (category: MarimekkoChartInput['data'][number], si: number): number => {\n const v = category.values[si];\n if (v === null || v === undefined) return 0;\n if (!isFinite(v) || v < 0) {\n issues.push({\n code: isFinite(v) ? 'negative-value' : 'invalid-value',\n severity: 'warning',\n message: `\"${segments[si]?.name}\" in \"${category.name}\" is ${isFinite(v) ? 'negative' : 'not a number'}; drawn as zero.`,\n itemId: category.id ?? category.name,\n });\n return 0;\n }\n return v;\n };\n const columns = input.data.map((c, ci) => {\n const values = segments.map((_, si) => (shownSeg[si] ? value(c, si) : 0));\n const sum = values.reduce((s, v) => s + v, 0);\n const total = isFinite(c.total) && c.total >= 0 ? c.total : sum;\n return { c, ci, values, sum, total };\n });\n const grand = columns.reduce((s, col) => s + col.total, 0);\n const state = stateCanvas(input, grand <= 0);\n if (state) return { ...state, issues };\n const format = makeFormatter(input.format);\n const totalFormat = makeFormatter(input.xAxis?.format ?? input.format);\n const { width, height } = size(input);\n const legend = segments.map((s) => ({ name: s.name, color: s.color }));\n const plot = plotBox(width, height, {\n ...MARGIN,\n top: MARGIN.top + legendTop(input, legend, width),\n bottom: MARGIN.bottom + (input.xAxis?.label ? 14 : 0) + (input.xAxis?.format ? 14 : 0),\n });\n const gap = Math.max(0, Math.min(0.2, input.gap ?? 0.01)) * plot.width;\n const gaps = Math.max(0, columns.length - 1);\n const usable = Math.max(0, plot.width - gap * gaps);\n const y = axis([0, 1], [plot.y + plot.height, plot.y], { format: { style: 'percent' } });\n const c = canvas(input, width, height, legend);\n // Column positions along x, each as wide as its share of the grand total.\n let x = plot.x;\n const placed = columns.map((col) => {\n const w = (col.total / grand) * usable;\n const box = { x, w };\n x += w + gap;\n return { ...col, ...box };\n });\n const xTicks = placed.map((p) => ({ pos: px(p.x + p.w / 2), label: p.c.name }));\n const shapes: Shape[] = frameShapes(\n { ...c, plot, xTicks: thinTicks(xTicks, plot.width), yTicks: y.ticks, baseline: y.zero },\n { xLabel: input.xAxis?.label, yLabel: undefined },\n );\n if (input.xAxis?.format)\n for (const p of placed)\n if (p.w > 24)\n shapes.push(\n label(px(p.x + p.w / 2), plot.y + plot.height + 34, totalFormat(p.total), {\n part: 'x-total',\n anchor: 'middle',\n }),\n );\n const cells: Shape[] = [];\n const texts: Shape[] = [];\n for (const p of placed) {\n let from = 0;\n p.values.forEach((v, si) => {\n const seg = segments[si] as (typeof segments)[number];\n if (v <= 0 || p.sum <= 0) return;\n const share = v / p.sum;\n const y0 = y.scale(from + share);\n const y1 = y.scale(from);\n from += share;\n const pct = `${Math.round(share * 100)}%`;\n const title = `${seg.name}, ${p.c.name}: ${format(v)} (${pct}) · column ${totalFormat(p.total)}`;\n const h = Math.max(0, y1 - y0);\n cells.push({\n kind: 'rect',\n part: 'cell',\n x: px(p.x),\n y: px(y0),\n width: px(p.w),\n height: px(h),\n fill: seg.color,\n stroke: 'var(--skdx-color-surface-default)',\n title,\n item: {\n label: title,\n id: `${p.c.id ?? p.c.name}:${seg.name}`,\n series: seg.name,\n seriesId: seg.id,\n category: p.c.name,\n index: p.ci,\n value: v,\n },\n });\n if (input.labels && h > 14 && p.w > 24)\n texts.push(\n label(px(p.x + p.w / 2), px(y0 + h / 2), pct, {\n part: 'cell-label',\n anchor: 'middle',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-on-accent)',\n }),\n );\n });\n }\n return { ...c, shapes: withLabelSurfaces([...shapes, ...cells, ...texts, ...c.shapes]), issues };\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, CHAR, colorOf, isHidden, legendTop, plotBox, size, stateCanvas } from './frame.js';\nimport { CHART_COLORS } from './palette.js';\nimport { isFinite, linearScale, minMax, niceTicks, pathThrough, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { Canvas, ChartDataIssue, ParallelCoordinatesInput, Shape } from './types.js';\n\n/** Per-row titles and keyboard stops are emitted up to this many rows. */\nexport const PARALLEL_TITLE_LIMIT = 500;\n\n/**\n * One vertical axis per dimension, each on its own scale, and one polyline per row through its\n * values: model comparisons, instance types, product specs. Filters fade the rows outside them.\n */\nexport function layoutParallelCoordinates(input: ParallelCoordinatesInput): Canvas {\n const issues: ChartDataIssue[] = [];\n const dims = input.dimensions;\n const rows = input.data.filter((r) => !(r.group !== undefined && isHidden(input, r.group)));\n const state = stateCanvas(input, dims.length === 0 || rows.length === 0);\n if (state) return { ...state, issues };\n const { width, height } = size(input);\n const groups = [\n ...new Set(input.data.map((r) => r.group).filter((g): g is string => g !== undefined)),\n ];\n const first = dims[0] as (typeof dims)[number];\n const last = dims[dims.length - 1] as (typeof dims)[number];\n const pad = (d: (typeof dims)[number]) => ((d.label ?? d.key).length * CHAR) / 2 + 8;\n const legend = groups.map((g, i) => ({ name: g, color: colorOf(input, i) }));\n const plot = plotBox(width, height, {\n top: 28 + legendTop(input, legend, width),\n right: Math.max(16, pad(last)),\n bottom: 16,\n left: Math.max(48, pad(first)),\n });\n const value = (r: (typeof rows)[number], key: string) => {\n const v = r.values[key];\n if (v === undefined || v === null) return null;\n if (!isFinite(v)) {\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `\"${r.name}\" has a value on \"${key}\" that is not a number; drawn as a gap.`,\n itemId: r.id ?? r.name,\n });\n return null;\n }\n return v;\n };\n // One linear scale per axis over its own extent (or explicit bounds), niced at the ends.\n const axes = dims.map((d, i) => {\n const [lo, hi] = minMax(rows.map((r) => value(r, d.key)));\n const ticks = niceTicks(d.min ?? lo, d.max ?? hi);\n const min = d.min ?? (ticks[0] as number);\n const max = d.max ?? (ticks[ticks.length - 1] as number);\n const range: [number, number] = d.reversed\n ? [plot.y, plot.y + plot.height]\n : [plot.y + plot.height, plot.y];\n const scale = linearScale([min, max], range);\n const x = px(\n dims.length === 1 ? plot.x + plot.width / 2 : plot.x + (i * plot.width) / (dims.length - 1),\n );\n const f = makeFormatter(d.format ?? input.format);\n return {\n d,\n x,\n scale: (v: number) => px(scale(Math.max(min, Math.min(max, v)))),\n format: f,\n ticks: ticks.filter((t) => t >= min - 1e-9 && t <= max + 1e-9),\n };\n });\n const shapes: Shape[] = [];\n axes.forEach((a, i) => {\n shapes.push({\n kind: 'line',\n part: 'axis',\n x1: a.x,\n x2: a.x,\n y1: plot.y,\n y2: plot.y + plot.height,\n stroke: CHART_COLORS.axis,\n });\n const anchor = i === axes.length - 1 && axes.length > 1 ? 'start' : 'end';\n for (const t of a.ticks)\n shapes.push(\n label(px(anchor === 'end' ? a.x - 6 : a.x + 6), a.scale(t), a.format(t), {\n part: 'y-label',\n anchor,\n baseline: 'middle',\n }),\n );\n shapes.push(\n label(a.x, plot.y - 12, a.d.label ?? a.d.key, { part: 'axis-title', anchor: 'middle' }),\n );\n });\n const titled = rows.length <= PARALLEL_TITLE_LIMIT;\n const opacity = input.opacity ?? (rows.length > 200 ? 0.25 : 0.6);\n const passes = (r: (typeof rows)[number]) =>\n (input.filters ?? []).every((f) => {\n const v = value(r, f.key);\n return v !== null && v >= (f.min ?? -Infinity) && v <= (f.max ?? Infinity);\n });\n const lines: Shape[] = rows.map((r, index) => {\n const segments: { x: number; y: number }[][] = [];\n let current: { x: number; y: number }[] = [];\n for (const a of axes) {\n const v = value(r, a.d.key);\n if (v === null) {\n if (!input.connectNulls && current.length) {\n segments.push(current);\n current = [];\n }\n continue;\n }\n current.push({ x: a.x, y: a.scale(v) });\n }\n if (current.length) segments.push(current);\n const text = `${r.name}: ${axes\n .map((a) => {\n const v = value(r, a.d.key);\n return `${a.d.label ?? a.d.key} ${v === null ? '—' : a.format(v)}`;\n })\n .join(' · ')}`;\n return {\n kind: 'path',\n part: 'row',\n d: segments.map((s) => pathThrough(s, input.curve)).join(''),\n stroke:\n r.color ??\n (r.group !== undefined ? colorOf(input, groups.indexOf(r.group)) : colorOf(input, 0)),\n strokeWidth: 1.5,\n strokeLinejoin: 'round',\n opacity: passes(r) ? opacity : 0.08,\n title: titled ? text : undefined,\n item: titled\n ? { label: text, id: r.id ?? r.name, name: r.name, category: r.group, index }\n : undefined,\n };\n });\n const c = canvas(input, width, height, legend);\n return { ...c, shapes: [...shapes, ...lines, ...c.shapes], issues };\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 { layoutBulletChart } from './bullet.js';\nimport { makeFormatter } from './format.js';\nimport { stateCanvas } from './frame.js';\nimport { isFinite } from './scale.js';\nimport type { Canvas, LinearGaugeInput } from './types.js';\n\n/**\n * One reading on a straight scale: the bullet engine with gauge semantics (`value`, `min`,\n * `max`, `bands`, `target`). Reads in a KPI card where an arc would not fit.\n */\nexport function layoutLinearGauge(input: LinearGaugeInput): Canvas {\n const vertical = input.orientation === 'vertical';\n const state = stateCanvas(input, !isFinite(input.value), 600, vertical ? 300 : 64);\n if (state) return state;\n const format = makeFormatter(input.format);\n const min = input.min ?? 0;\n const bands = (input.bands ?? []).filter((b) => isFinite(b.from) && isFinite(b.to));\n const max =\n input.max ?? Math.max(100, input.value, input.target ?? -Infinity, ...bands.map((b) => b.to));\n const target = isFinite(input.target) ? `, target ${format(input.target)}` : '';\n const layout = layoutBulletChart({\n ...input,\n height: input.height ?? (vertical ? 300 : 64),\n data: [\n {\n id: 'value',\n name: input.caption ?? '',\n value: input.value,\n target: input.target,\n ranges: bands,\n },\n ],\n min,\n max,\n labels: input.labels ?? true,\n ticks: input.ticks,\n });\n return {\n ...layout,\n description:\n input.description ??\n `${input.caption ?? 'Value'} ${format(input.value)} on a scale from ${format(min)} to ${format(max)}${target}.`,\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 {\n axis,\n canvas,\n CHAR,\n colorOf,\n extent,\n gridOn,\n isHidden,\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, px } from './scale.js';\nimport { frameShapes, label } from './shapes.js';\nimport type { Canvas, ChartDataIssue, ChartItem, DumbbellChartInput, Shape } from './types.js';\n\n/**\n * A category with a start and an end value joined by a connector: before/after, plan/actual,\n * previous/current. Horizontal by default (categories down y), vertical on request.\n */\nexport function layoutDumbbellChart(input: DumbbellChartInput): Canvas {\n const issues: ChartDataIssue[] = [];\n const data = input.data.filter((d) => {\n const ok = isFinite(d.start) || isFinite(d.end);\n if (!ok)\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `\"${d.name}\" has neither a valid start nor end and was dropped.`,\n itemId: d.id ?? d.name,\n });\n return ok;\n });\n const state = stateCanvas(input, data.length === 0);\n if (state) return { ...state, issues };\n const format = makeFormatter(input.xAxis?.format ?? input.format);\n const { width, height } = size(input);\n const vertical = input.orientation === 'vertical';\n const startLabel = input.startLabel ?? 'Start';\n const endLabel = input.endLabel ?? 'End';\n // The legend toggles the two ends like any other series: a hidden end drops its markers, its\n // value labels and the connector that would dangle, and leaves the value axis to the rest.\n const hideStart = isHidden(input, startLabel);\n const hideEnd = isHidden(input, endLabel);\n const sorted = [...data];\n if (input.sort) {\n const key = (d: (typeof data)[number]) =>\n input.sort === 'change'\n ? (isFinite(d.end) ? d.end : 0) - (isFinite(d.start) ? d.start : 0)\n : isFinite(d.end)\n ? d.end\n : -Infinity;\n sorted.sort((a, b) => (input.sort === 'asc' ? key(a) - key(b) : key(b) - key(a)));\n }\n const widest = Math.max(0, ...sorted.map((d) => d.name.length)) * CHAR;\n const startColor = colorOf(input, 0);\n const endColor = colorOf(input, 1);\n const legend = [\n { name: startLabel, color: startColor },\n { name: endLabel, color: endColor },\n ];\n const plot = plotBox(width, height, {\n ...MARGIN,\n top: MARGIN.top + legendTop(input, legend, width) + (vertical && input.xAxis?.label ? 12 : 0),\n right: input.labels && !vertical ? 56 : MARGIN.right,\n bottom: MARGIN.bottom + (!vertical && input.xAxis?.label ? 14 : 0),\n left: vertical ? MARGIN.left : Math.max(MARGIN.left, widest + 16),\n });\n const value = axis(\n extent(\n sorted.flatMap((d) => [hideStart ? undefined : d.start, hideEnd ? undefined : d.end]),\n false,\n ),\n vertical ? [plot.y + plot.height, plot.y] : [plot.x, plot.x + plot.width],\n input.xAxis ?? {},\n input.format,\n );\n const band = bandScale(\n sorted.length,\n vertical ? [plot.x, plot.x + plot.width] : [plot.y, plot.y + plot.height],\n );\n const c = canvas(input, width, height, legend);\n const categoryTicks = sorted.map((d, i) => ({ pos: px(band.center(i)), label: d.name }));\n const shapes: Shape[] = frameShapes(\n {\n ...c,\n plot,\n xTicks: vertical ? thinTicks(categoryTicks, plot.width) : categoryTicks,\n yTicks: vertical ? value.ticks : thinTicks(value.ticks, plot.width),\n baseline: vertical ? plot.y + plot.height : plot.x,\n },\n {\n horizontal: !vertical,\n grid: gridOn(input.xAxis),\n ...(vertical ? { yLabel: input.xAxis?.label } : { xLabel: input.xAxis?.label }),\n },\n );\n shapes.push(\n ...referenceShapes(input.references, {\n plot,\n horizontal: !vertical,\n x: (v) => {\n const i = sorted.findIndex((d) => d.name === v);\n return i < 0 ? undefined : band.center(i);\n },\n y: (v) => value.scale(v),\n }),\n );\n const r = input.markerSize ?? 5;\n const at = (v: number, mid: number) =>\n vertical ? { x: px(mid), y: px(value.scale(v)) } : { x: px(value.scale(v)), y: px(mid) };\n const connectors: Shape[] = [];\n const marks: Shape[] = [];\n const texts: Shape[] = [];\n sorted.forEach((d, i) => {\n const mid = band.center(i);\n const s = isFinite(d.start) ? format(d.start) : '—';\n const e = isFinite(d.end) ? format(d.end) : '—';\n const title = `${d.name}: ${s} → ${e}`;\n const item: ChartItem = {\n label: title,\n id: d.id ?? d.name,\n name: d.name,\n index: i,\n value: isFinite(d.end) ? d.end : undefined,\n };\n if (!hideStart && !hideEnd && isFinite(d.start) && isFinite(d.end)) {\n const a = at(d.start, mid);\n const b = at(d.end, mid);\n connectors.push({\n kind: 'line',\n part: 'connector',\n x1: a.x,\n y1: a.y,\n x2: b.x,\n y2: b.y,\n stroke: d.color ?? CHART_COLORS.axis,\n strokeWidth: 3,\n title,\n item,\n });\n }\n for (const [v, part, name, fill, hidden] of [\n [d.start, 'start', startLabel, startColor, hideStart],\n [d.end, 'end', endLabel, endColor, hideEnd],\n ] as const) {\n if (hidden || !isFinite(v)) continue;\n const p = at(v, mid);\n const text = `${d.name} · ${name}: ${format(v)}`;\n marks.push({\n kind: 'circle',\n part,\n cx: p.x,\n cy: p.y,\n r,\n fill,\n stroke: 'var(--skdx-color-surface-default)',\n title: text,\n item: { ...item, label: text, series: name },\n });\n if (input.labels)\n texts.push(\n vertical\n ? label(p.x, px(p.y + (part === 'end' ? -r - 4 : r + 12)), format(v), {\n part: 'value-label',\n anchor: 'middle',\n })\n : label(px(p.x + (part === 'end' ? r + 4 : -r - 4)), p.y, format(v), {\n part: 'value-label',\n anchor: part === 'end' ? 'start' : 'end',\n baseline: 'middle',\n }),\n );\n }\n });\n return { ...c, shapes: [...shapes, ...connectors, ...marks, ...texts, ...c.shapes], issues };\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 { isFinite } from './scale.js';\nimport type { Canvas, ChartDataIssue, ParetoChartInput } from './types.js';\n\n/**\n * Categories sorted by value with the cumulative share as a line on the right axis, so the\n * \"vital few\" causes stand out. Reuses the cartesian engine: bars on the left axis, the\n * cumulative line on a 0–100% right axis, an optional threshold reference (e.g. 80%).\n */\nexport function layoutParetoChart(input: ParetoChartInput): Canvas {\n const issues: ChartDataIssue[] = [];\n const data = input.data.filter((d) => {\n const ok = isFinite(d.value) && d.value >= 0;\n if (!ok)\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `\"${d.name}\" has no valid non-negative value and was dropped.`,\n itemId: d.id ?? d.name,\n });\n return ok;\n });\n // Stable descending sort: ties keep input order.\n const sorted = data.map((d, i) => ({ d, i })).sort((a, b) => b.d.value - a.d.value || a.i - b.i);\n const total = sorted.reduce((s, { d }) => s + d.value, 0);\n let running = 0;\n const share = sorted.map(({ d }) => (total > 0 ? (running += d.value) / total : 0));\n const threshold = input.threshold;\n const layout = layoutCartesian(\n {\n ...input,\n categories: sorted.map(({ d }) => d.name),\n series: [\n {\n name: input.name ?? 'Value',\n type: 'bar',\n data: sorted.map(({ d }) => d.value),\n color: sorted[0]?.d.color,\n },\n {\n name: input.cumulativeLabel ?? 'Cumulative',\n type: 'line',\n axis: 'right',\n data: share,\n curve: 'linear',\n },\n ],\n rightAxis: { min: 0, max: 1, format: { style: 'percent' } },\n references:\n threshold !== undefined && isFinite(threshold)\n ? [\n {\n y: threshold,\n axis: 'right',\n label: `${Math.round(threshold * 100)}%`,\n variant: 'primary',\n },\n ]\n : undefined,\n },\n 'bar',\n );\n // Bars carry the datum id and its own color, which the shared series cannot express.\n const shapes = layout.shapes.map((s) => {\n if (s.part !== 'bar' || s.kind !== 'rect' || !s.item || s.item.index === undefined) return s;\n const d = sorted[s.item.index]?.d;\n return d\n ? { ...s, fill: d.color ?? s.fill, item: { ...s.item, id: d.id ?? d.name, name: d.name } }\n : s;\n });\n return { ...layout, shapes, issues: [...issues, ...(layout.issues ?? [])] };\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, CHAR, colorOf, legendTop, plotBox, size, stateCanvas } from './frame.js';\nimport { cutDepth, drill, hasValue, nodeId, nodeValue } from './hierarchy.js';\nimport { CHART_COLORS } from './palette.js';\nimport { px } from './scale.js';\nimport { label, withLabelSurfaces } from './shapes.js';\nimport type {\n Canvas,\n ChartItemId,\n OrganizationChartInput,\n Shape,\n TreeChartInput,\n TreeNode,\n} from './types.js';\n\ninterface Placed {\n node: TreeNode;\n depth: number;\n /** Slot along the breadth axis: leaves count up in post-order, parents centre over children. */\n slot: number;\n parent: Placed | undefined;\n collapsed: boolean;\n color: string;\n}\n\n/**\n * A node-link tree: leaves get evenly spaced slots in post-order and every parent sits over the\n * middle of its children; depth runs down (or right). A tidy Reingold–Tilford layout is not\n * needed for the dashboard-sized trees this draws.\n */\nexport function layoutTreeChart(input: TreeChartInput): Canvas {\n const { nodes: roots, path } = drill(input.data, input.rootId);\n const nodes = cutDepth(roots, input.maxDepth);\n const state = stateCanvas(input, nodes.length === 0);\n if (state) return state;\n const format = makeFormatter(input.format);\n const { width, height } = size(input);\n const vertical = input.orientation !== 'horizontal';\n const box = input.nodeShape === 'box';\n const linkStyle = input.linkStyle ?? 'curve';\n const collapsed = new Set<ChartItemId>(input.collapsed ?? []);\n const labels = input.labels ?? true;\n\n // Walk: post-order slots for leaves; a collapsed node (or one at maxDepth) is a leaf.\n const placed: Placed[] = [];\n let slot = 0;\n let depthMax = 0;\n const walk = (n: TreeNode, depth: number, parent: Placed | undefined, i: number): Placed => {\n const isCollapsed = collapsed.has(nodeId(n)) || collapsed.has(n.name);\n const kids = isCollapsed ? [] : (n.children ?? []);\n const color = n.color ?? parent?.color ?? colorOf(input, i);\n const p: Placed = { node: n, depth, slot: 0, parent, collapsed: isCollapsed, color };\n depthMax = Math.max(depthMax, depth);\n if (kids.length === 0) p.slot = slot++;\n else {\n const children = kids.map((c, k) => walk(c, depth + 1, p, k));\n p.slot = ((children[0] as Placed).slot + (children[children.length - 1] as Placed).slot) / 2;\n }\n placed.push(p);\n return p;\n };\n nodes.forEach((n, i) => walk(n, 0, undefined, i));\n\n // Node geometry: boxes are as wide as their longest line; circles are dots.\n const textOf = (n: TreeNode) => Math.max(n.name.length, n.subtitle?.length ?? 0);\n const widest = Math.max(0, ...placed.map((p) => textOf(p.node))) * CHAR + 16;\n const boxH = input.nodeSize ?? 36;\n const r = input.nodeSize ?? 5;\n const nodeW = box ? widest : 2 * r;\n const nodeH = box ? boxH : 2 * r;\n // Room for the nodes at the edges, and for circle labels beside (horizontal) or below (vertical).\n const labelRoom = !box && labels ? widest : 0;\n const plot = plotBox(width, height, {\n top: legendTop(input) + nodeH / 2 + 4,\n bottom: nodeH / 2 + 4 + (vertical && !box ? 16 : 0),\n left: nodeW / 2 + 4,\n right: nodeW / 2 + 4 + (!vertical ? labelRoom : 0),\n });\n const leaves = Math.max(1, slot);\n const breadth = vertical ? plot.width : plot.height;\n const along = vertical ? plot.height : plot.width;\n const step = leaves === 1 ? 0 : breadth / (leaves - 1);\n const levelGap = depthMax === 0 ? 0 : along / depthMax;\n const at = (p: Placed) => {\n const b = leaves === 1 ? breadth / 2 : p.slot * step;\n const a = p.depth * levelGap;\n return vertical\n ? { x: px(plot.x + b), y: px(plot.y + a) }\n : { x: px(plot.x + a), y: px(plot.y + b) };\n };\n\n const links: Shape[] = [];\n const marks: Shape[] = [];\n const texts: Shape[] = [];\n for (const p of placed) {\n const { x, y } = at(p);\n if (p.parent) {\n const from = at(p.parent);\n // Links leave the parent's far edge and enter the child's near edge.\n const half = box ? (vertical ? nodeH / 2 : nodeW / 2) : r;\n const x0 = vertical ? from.x : px(from.x + half);\n const y0 = vertical ? px(from.y + half) : from.y;\n const x1 = vertical ? x : px(x - half);\n const y1 = vertical ? px(y - half) : y;\n const mx = px((x0 + x1) / 2);\n const my = px((y0 + y1) / 2);\n const d =\n linkStyle === 'straight'\n ? `M${x0} ${y0}L${x1} ${y1}`\n : linkStyle === 'elbow'\n ? vertical\n ? `M${x0} ${y0}V${my}H${x1}V${y1}`\n : `M${x0} ${y0}H${mx}V${y1}H${x1}`\n : vertical\n ? `M${x0} ${y0}C${x0} ${my} ${x1} ${my} ${x1} ${y1}`\n : `M${x0} ${y0}C${mx} ${y0} ${mx} ${y1} ${x1} ${y1}`;\n links.push({\n kind: 'path',\n part: 'link',\n d,\n stroke: CHART_COLORS.axis,\n strokeWidth: 1.5,\n title: `${p.parent.node.name} → ${p.node.name}`,\n });\n }\n const value = nodeValue(p.node);\n const title = `${p.node.name}${p.node.subtitle ? ` · ${p.node.subtitle}` : ''}${hasValue(p.node) ? `: ${format(value)}` : ''}${p.collapsed ? ' (collapsed)' : ''}`;\n const item = { label: title, id: nodeId(p.node), name: p.node.name, value };\n if (box) {\n marks.push({\n kind: 'rect',\n part: 'node',\n x: px(x - nodeW / 2),\n y: px(y - nodeH / 2),\n width: px(nodeW),\n height: px(nodeH),\n fill: p.color,\n rx: 4,\n title,\n item,\n });\n if (labels) {\n const two = Boolean(p.node.subtitle);\n texts.push(\n label(x, px(two ? y - 7 : y), p.node.name, {\n part: 'node-label',\n anchor: 'middle',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-on-accent)',\n weight: 'bold',\n }),\n );\n if (two)\n texts.push(\n label(x, px(y + 8), p.node.subtitle as string, {\n part: 'node-subtitle',\n anchor: 'middle',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-on-accent)',\n }),\n );\n }\n } else {\n marks.push({\n kind: 'circle',\n part: 'node',\n cx: x,\n cy: y,\n r: px(r),\n fill: p.color,\n stroke: 'var(--skdx-color-surface-default)',\n title,\n item,\n });\n if (labels)\n texts.push(\n vertical\n ? label(x, px(y + r + 12), p.node.name, {\n part: 'node-label',\n anchor: 'middle',\n fill: 'var(--skdx-color-text-default)',\n })\n : label(px(x + r + 4), y, p.node.name, {\n part: 'node-label',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-default)',\n }),\n );\n }\n if (p.collapsed)\n texts.push(\n label(\n px(box ? x + nodeW / 2 - 8 : x + r + (vertical ? 6 : -2)),\n px(box ? y - nodeH / 2 + 8 : y - r - 2),\n '+',\n {\n part: 'collapsed',\n anchor: 'middle',\n baseline: 'middle',\n fill: CHART_COLORS.label,\n weight: 'bold',\n },\n ),\n );\n }\n const crumbs = path.length\n ? [\n label(8, legendTop(input) + 10, path.map((n) => n.name).join(' › '), {\n part: 'breadcrumb',\n baseline: 'middle',\n }),\n ]\n : [];\n const c = canvas(input, width, height);\n return {\n ...c,\n shapes: withLabelSurfaces([...links, ...marks, ...texts, ...crumbs, ...c.shapes]),\n };\n}\n\n/** An organization chart: the tree with boxes and elbow links. */\nexport const layoutOrganizationChart = (input: OrganizationChartInput): Canvas =>\n layoutTreeChart({ ...input, nodeShape: 'box', linkStyle: 'elbow' });\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 { makeColorScale } from './colors.js';\nimport { makeFormatter } from './format.js';\nimport { canvas, CHAR, colorOf, isHidden, legendTop, size, stateCanvas } from './frame.js';\nimport { cutDepth, drill, nodeId, nodeValue } from './hierarchy.js';\nimport { px } from './scale.js';\nimport { label, withLabelSurfaces } from './shapes.js';\nimport type { Canvas, ChartDataIssue, CirclePackingInput, Shape, TreeNode } from './types.js';\n\ninterface Circle {\n x: number;\n y: number;\n r: number;\n}\n\n/**\n * Packs circles of the given radii (largest first) around the origin: each next circle walks a\n * spiral outward until it overlaps none of the placed ones, so the result is deterministic and\n * compact enough for dashboards. Returns the circles and the enclosing radius.\n * ponytail: O(n²) per sibling set; a front-chain packer if a node ever has thousands of children.\n */\nexport function packCircles(\n radii: number[],\n padding: number,\n): { circles: Circle[]; enclosing: number } {\n const circles: Circle[] = [];\n const order = radii.map((r, i) => ({ r, i })).sort((a, b) => b.r - a.r);\n const out = new Array<Circle>(radii.length);\n for (const { r, i } of order) {\n let placed: Circle | undefined;\n if (circles.length === 0) placed = { x: 0, y: 0, r };\n else {\n const step = Math.max(1, r / 4);\n search: for (let d = 0; d < 1e6; d += step)\n for (let k = 0; k < 24; k++) {\n const a = (k / 24) * 2 * Math.PI + d * 0.05;\n const c = { x: d * Math.cos(a), y: d * Math.sin(a), r };\n if (circles.every((o) => Math.hypot(o.x - c.x, o.y - c.y) >= o.r + c.r + padding)) {\n placed = c;\n break search;\n }\n }\n }\n const c = placed ?? { x: 0, y: 0, r };\n circles.push(c);\n out[i] = c;\n }\n // Recentre on the bounding box and measure the enclosing radius from there.\n let x0 = Infinity;\n let x1 = -Infinity;\n let y0 = Infinity;\n let y1 = -Infinity;\n for (const c of circles) {\n x0 = Math.min(x0, c.x - c.r);\n x1 = Math.max(x1, c.x + c.r);\n y0 = Math.min(y0, c.y - c.r);\n y1 = Math.max(y1, c.y + c.r);\n }\n const cx = (x0 + x1) / 2;\n const cy = (y0 + y1) / 2;\n let enclosing = 0;\n for (const c of out) {\n c.x -= cx;\n c.y -= cy;\n enclosing = Math.max(enclosing, Math.hypot(c.x, c.y) + c.r);\n }\n return { circles: out, enclosing };\n}\n\n/** Nested circles sized by value: children packed inside their parent, leaves filled. */\nexport function layoutCirclePacking(input: CirclePackingInput): Canvas {\n const issues: ChartDataIssue[] = [];\n const { nodes: roots } = drill(input.data, input.rootId);\n // The legend lists every top-level branch, hidden ones included, so a hide can be undone; and\n // a branch keeps the colour of its place in that full list whatever is hidden.\n const branches = cutDepth(roots, input.maxDepth);\n const branchColor = new Map(\n branches.map((n, i) => [nodeId(n), colorOf(input, i, n.color)] as const),\n );\n const nodes = branches.filter((n) => !isHidden(input, n.name));\n const state = stateCanvas(input, !nodes.some((n) => nodeValue(n) > 0), 300, 300);\n if (state) return { ...state, issues };\n const format = makeFormatter(input.format);\n const { width, height } = size(input, 300, 300);\n const legend = branches.map((n) => ({\n name: n.name,\n color: branchColor.get(nodeId(n)) as string,\n }));\n const top = legendTop(input, legend, width);\n const pad = input.padding ?? 2;\n const labels = input.labels ?? true;\n const leafValues: number[] = [];\n const collect = (n: TreeNode) => {\n if (n.children?.length) n.children.forEach(collect);\n else leafValues.push(nodeValue(n));\n };\n nodes.forEach(collect);\n const colors = makeColorScale(input.colorScale, leafValues, colorOf(input, 0), undefined, format);\n const shapes: Shape[] = [];\n const texts: Shape[] = [];\n\n // Pack `items` inside a circle of `radius` at (cx, cy): sibling radii follow √value.\n const pack = (\n items: TreeNode[],\n cx: number,\n cy: number,\n radius: number,\n inherited: string | undefined,\n ) => {\n const kept = items.filter((n) => {\n const ok = nodeValue(n) > 0;\n if (!ok)\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `\"${n.name}\" has no positive value and was dropped.`,\n itemId: nodeId(n),\n });\n return ok;\n });\n if (kept.length === 0) return;\n // Packed in √value units, then scaled into the parent; the gap is taken off each radius.\n const { circles, enclosing } = packCircles(\n kept.map((n) => Math.sqrt(nodeValue(n))),\n 0,\n );\n const k = enclosing > 0 ? (radius - pad) / enclosing : 0;\n kept.forEach((n, i) => {\n const c = circles[i] as Circle;\n const x = px(cx + c.x * k);\n const y = px(cy + c.y * k);\n const r = Math.max(0, c.r * k - pad / 2);\n const value = nodeValue(n);\n const branch = (n.children?.length ?? 0) > 0;\n const color = n.color ?? inherited ?? branchColor.get(nodeId(n)) ?? colorOf(input, i);\n const fill = branch ? color : input.colorScale ? (colors.color(value)?.fill ?? color) : color;\n const title = `${n.name}: ${format(value)}`;\n shapes.push({\n kind: 'circle',\n part: branch ? 'branch' : 'leaf',\n cx: x,\n cy: y,\n r: px(r),\n fill,\n opacity: branch\n ? 0.15\n : input.colorScale && !branch\n ? colors.color(value)?.opacity\n : undefined,\n stroke: 'var(--skdx-color-surface-default)',\n title,\n item: { label: title, id: nodeId(n), name: n.name, value },\n });\n if (labels && !branch && r * 2 > n.name.length * CHAR + 4)\n texts.push(\n label(x, y, n.name, {\n part: 'leaf-label',\n anchor: 'middle',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-on-accent)',\n }),\n );\n if (labels && branch && r * 2 > n.name.length * CHAR + 4)\n texts.push(\n label(x, px(y - r + 10), n.name, {\n part: 'branch-label',\n anchor: 'middle',\n baseline: 'middle',\n }),\n );\n if (branch) pack(n.children as TreeNode[], x, y, r, color);\n });\n };\n const radius = Math.max(0, Math.min(width, height - top) / 2 - 8);\n pack(nodes, width / 2, top + (height - top) / 2, radius, undefined);\n const c = canvas(input, width, height, legend);\n return { ...c, shapes: withLabelSurfaces([...shapes, ...texts, ...c.shapes]), issues };\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 { makeColorScale } from './colors.js';\nimport { makeFormatter } from './format.js';\nimport { canvas, CHAR, colorOf, isHidden, legendTop, plotBox, size, stateCanvas } from './frame.js';\nimport { cutDepth, depthOf, drill, nodeId, nodeValue, sortChildren } from './hierarchy.js';\nimport { px } from './scale.js';\nimport { label, withLabelSurfaces } from './shapes.js';\nimport { breadcrumbShapes } from './treemap.js';\nimport type { Canvas, ChartDataIssue, IcicleInput, Shape, TreeNode } from './types.js';\n\n/**\n * A rectangular sunburst (partition): one row per depth (or one column when horizontal), each\n * node a cell whose extent is its share of the parent's, children stacked under their parent.\n */\nexport function layoutIcicle(input: IcicleInput): Canvas {\n const issues: ChartDataIssue[] = [];\n const { nodes: roots, path } = drill(input.data, input.rootId);\n const nodes = cutDepth(roots, input.maxDepth).filter((n) => !isHidden(input, n.name));\n const state = stateCanvas(input, !nodes.some((n) => nodeValue(n) > 0));\n if (state) return { ...state, issues };\n const format = makeFormatter(input.format);\n const { width, height } = size(input);\n const horizontal = input.orientation === 'horizontal';\n const crumbs = input.breadcrumbs && path.length > 0;\n const legend = nodes.map((n, i) => ({ name: n.name, color: colorOf(input, i, n.color) }));\n const top = legendTop(input, legend, width) + (crumbs ? 20 : 0);\n const plot = plotBox(width, height, { top, right: 0, bottom: 0, left: 0 });\n const gap = input.padding ?? 1;\n const labels = input.labels ?? true;\n const levels = Math.max(1, depthOf(nodes));\n const thick = (horizontal ? plot.width : plot.height) / levels;\n const leafValues: number[] = [];\n const collect = (n: TreeNode) => {\n if (n.children?.length) n.children.forEach(collect);\n else leafValues.push(nodeValue(n));\n };\n nodes.forEach(collect);\n const colors = makeColorScale(input.colorScale, leafValues, colorOf(input, 0), undefined, format);\n const shapes: Shape[] = [];\n const texts: Shape[] = [];\n\n // `from`..`from + extent` along the breadth axis; depth picks the row (or column).\n const walk = (\n items: TreeNode[],\n depth: number,\n from: number,\n extent: number,\n inherited: string | undefined,\n ) => {\n const kept = sortChildren(items, input.sort).filter((n) => {\n const ok = nodeValue(n) > 0;\n if (!ok)\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `\"${n.name}\" has no positive value and was dropped.`,\n itemId: nodeId(n),\n });\n return ok;\n });\n const total = kept.reduce((s, n) => s + nodeValue(n), 0);\n let at = from;\n kept.forEach((n, i) => {\n const value = nodeValue(n);\n const span = total > 0 ? (value / total) * extent : 0;\n const branch = (n.children?.length ?? 0) > 0;\n const color = n.color ?? inherited ?? colorOf(input, i);\n const scaled = !branch && input.colorScale ? colors.color(value) : undefined;\n const a = depth * thick;\n const rect = horizontal\n ? { x: plot.x + a + gap / 2, y: at + gap / 2, width: thick - gap, height: span - gap }\n : { x: at + gap / 2, y: plot.y + a + gap / 2, width: span - gap, height: thick - gap };\n const title = `${n.name}: ${format(value)}`;\n shapes.push({\n kind: 'rect',\n part: 'cell',\n x: px(rect.x),\n y: px(rect.y),\n width: px(Math.max(0, rect.width)),\n height: px(Math.max(0, rect.height)),\n fill: scaled?.fill ?? color,\n opacity: scaled?.opacity ?? (branch ? 0.7 : undefined),\n title,\n item: { label: title, id: nodeId(n), name: n.name, value },\n });\n if (labels && rect.width > n.name.length * CHAR + 6 && rect.height > 12)\n texts.push(\n label(px(rect.x + 4), px(rect.y + rect.height / 2), n.name, {\n part: 'cell-label',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-on-accent)',\n }),\n );\n if (branch) walk(n.children as TreeNode[], depth + 1, at, span, color);\n at += span;\n });\n };\n walk(nodes, 0, horizontal ? plot.y : plot.x, horizontal ? plot.height : plot.width, undefined);\n if (crumbs) shapes.push(...breadcrumbShapes(path, 8, legendTop(input, legend, width) + 10));\n const c = canvas(input, width, height, legend);\n return { ...c, shapes: withLabelSurfaces([...shapes, ...texts, ...c.shapes]), issues };\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, makeFormatter } from './format.js';\nimport {\n canvas,\n CHAR,\n colorOf,\n isHidden,\n legendTop,\n MARGIN,\n plotBox,\n size,\n stateCanvas,\n thinTicks,\n} from './frame.js';\nimport { CHART_COLORS } from './palette.js';\nimport { bandScale, finite, isFinite, linearScale, pathThrough, px } from './scale.js';\nimport { frameShapes, label, point } from './shapes.js';\nimport type { BumpChartInput, Canvas, ChartDataIssue, Shape, Tick } from './types.js';\n\n/**\n * Ranks over categories: one line per series with rank 1 at the top. Ranks are computed per\n * category from the values (largest first, ties in series order) unless the data already are\n * ranks. A rank beyond `topRank`, or a gap, breaks the line.\n */\nexport function layoutBumpChart(input: BumpChartInput): Canvas {\n const issues: ChartDataIssue[] = [];\n const shown = input.series.map((s, index) => ({ ...s, index, hidden: isHidden(input, s.name) }));\n const count = Math.max(input.categories?.length ?? 0, ...shown.map((s) => s.data.length));\n const state = stateCanvas(\n input,\n count === 0 || shown.every((s) => s.hidden || finite(s.data).length === 0),\n );\n if (state) return { ...state, issues };\n for (const s of shown) {\n const bad = s.data.filter((v) => v !== null && !isFinite(v)).length;\n if (bad)\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `Series \"${s.name}\" has ${bad} value${bad === 1 ? '' : 's'} that ${bad === 1 ? 'is' : 'are'} neither a number nor null; drawn as gaps.`,\n itemId: s.id ?? s.name,\n });\n }\n const format = makeFormatter(input.format);\n const { width, height } = size(input);\n const drawn = shown.filter((s) => !s.hidden);\n // Ranks per category: largest value first; already-ranked data pass through.\n const ranks = drawn.map(() => new Array<number | null>(count).fill(null));\n for (let ci = 0; ci < count; ci++) {\n if (input.ranked) {\n drawn.forEach((s, si) => {\n const v = s.data[ci];\n (ranks[si] as (number | null)[])[ci] = isFinite(v) ? v : null;\n });\n continue;\n }\n const order = drawn\n .map((s, si) => ({ si, v: s.data[ci] }))\n .filter((e): e is { si: number; v: number } => isFinite(e.v))\n .sort((a, b) => b.v - a.v || a.si - b.si);\n order.forEach((e, k) => {\n (ranks[e.si] as (number | null)[])[ci] = k + 1;\n });\n }\n const top = input.topRank ?? Math.max(1, drawn.length);\n const labels = Array.from({ length: count }, (_, i) => {\n const c = input.categories?.[i];\n return c === undefined ? String(i + 1) : categoryLabel(c, input.xAxis?.format);\n });\n const showLabels = input.labels ?? true;\n const widest = showLabels ? Math.max(0, ...drawn.map((s) => s.name.length)) * CHAR + 12 : 0;\n const legend = input.series.map((s, i) => ({ name: s.name, color: colorOf(input, i, s.color) }));\n const plot = plotBox(width, height, {\n ...MARGIN,\n top: MARGIN.top + legendTop(input, legend, width),\n right: Math.max(MARGIN.right, widest),\n bottom: MARGIN.bottom + (input.xAxis?.label ? 14 : 0),\n });\n // Rank 1 sits at the top: the axis runs down from half a rank above 1 to half a rank below `top`.\n const y = linearScale([0.5, top + 0.5], [plot.y, plot.y + plot.height]);\n const band = bandScale(count, [plot.x, plot.x + plot.width], 0);\n const c = canvas(input, width, height, legend);\n const rankTicks: Tick[] = Array.from({ length: top }, (_, k) => ({\n pos: px(y(k + 1)),\n label: `#${k + 1}`,\n }));\n const shapes: Shape[] = frameShapes(\n {\n ...c,\n plot,\n xTicks: thinTicks(\n labels.map((text, i) => ({ pos: px(band.center(i)), label: text })),\n plot.width,\n ),\n yTicks: top > 20 ? rankTicks.filter((_, k) => k % Math.ceil(top / 20) === 0) : rankTicks,\n baseline: plot.y + plot.height,\n },\n { xLabel: input.xAxis?.label, grid: input.xAxis?.grid !== false },\n );\n const r = input.markerSize ?? 5;\n const lines: Shape[] = [];\n const marks: Shape[] = [];\n const texts: Shape[] = [];\n const used: number[] = [];\n drawn.forEach((s, si) => {\n const color = colorOf(input, s.index, s.color);\n const segments: { x: number; y: number }[][] = [];\n let current: { x: number; y: number }[] = [];\n let last: { x: number; y: number } | undefined;\n for (let ci = 0; ci < count; ci++) {\n const rank = (ranks[si] as (number | null)[])[ci];\n if (rank === null || rank === undefined || rank > top || rank < 1) {\n if (current.length) segments.push(current);\n current = [];\n continue;\n }\n const p = { x: px(band.center(ci)), y: px(y(rank)) };\n current.push(p);\n last = p;\n const v = s.data[ci];\n const title = `${s.name}, ${labels[ci] as string}: #${rank}${input.ranked || !isFinite(v) ? '' : ` (${format(v)})`}`;\n marks.push(\n point(p.x, p.y, r, color, title, {\n label: title,\n id: s.id ?? s.name,\n series: s.name,\n seriesId: s.id ?? s.name,\n category: labels[ci],\n index: ci,\n value: rank,\n }),\n );\n }\n if (current.length) segments.push(current);\n for (const seg of segments)\n lines.push({\n kind: 'path',\n part: 'line',\n d: pathThrough(seg, input.curve ?? 'monotone'),\n stroke: color,\n strokeWidth: 3,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n title: s.name,\n item: { label: s.name, id: s.id ?? s.name, series: s.name, seriesId: s.id ?? s.name },\n });\n // The name sits after the last drawn point; one that would collide with an earlier name is dropped.\n if (showLabels && last && !used.some((u) => Math.abs(u - last.y) < 12)) {\n used.push(last.y);\n texts.push(\n label(px(last.x + r + 4), last.y, s.name, {\n part: 'series-label',\n baseline: 'middle',\n // Text-safe: a mid-scale series color lands under 2:1 on the page; the line ends here anyway.\n fill: CHART_COLORS.label,\n }),\n );\n }\n });\n return { ...c, shapes: [...shapes, ...lines, ...marks, ...texts, ...c.shapes], issues };\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 } from './palette.js';\nimport { arc } from './pie.js';\nimport { isFinite, niceTicks, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { Canvas, ChartDataIssue, PolarAreaChartInput, Shape } from './types.js';\n\nconst rad = (deg: number) => (deg * Math.PI) / 180;\n\n/**\n * A Nightingale rose: every datum gets the same angle and its radius follows the value, by\n * default through a square root so that sector area, not radius, is proportional to it.\n */\nexport function layoutPolarAreaChart(input: PolarAreaChartInput): Canvas {\n const issues: ChartDataIssue[] = [];\n const data = input.data.map((d) => {\n const ok = isFinite(d.value);\n if (!ok)\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `\"${d.name}\" has no valid value and is drawn as zero.`,\n itemId: d.id ?? d.name,\n });\n else if (d.value < 0)\n issues.push({\n code: 'negative-value',\n severity: 'warning',\n message: `\"${d.name}\" is negative (${d.value}); a radius cannot be, so it is drawn as zero.`,\n itemId: d.id ?? d.name,\n });\n return { ...d, value: ok && d.value > 0 ? d.value : 0 };\n });\n const state = stateCanvas(input, !data.some((d) => d.value > 0), 300, 300);\n if (state) return { ...state, issues };\n const format = makeFormatter(input.format);\n const { width, height } = size(input, 300, 300);\n const legend = input.data.map((d, i) => ({ name: d.name, color: colorOf(input, i, d.color) }));\n const top = legendTop(input, legend, width);\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.labels ? 40 : 12));\n const hole = outer * Math.min(0.9, Math.max(0, input.innerRadius ?? 0));\n const levels = Math.max(1, Math.round(input.levels ?? 4));\n const shownMax = Math.max(0, ...data.map((d) => (isHidden(input, d.name) ? 0 : d.value)));\n const ticks = niceTicks(0, input.max ?? shownMax, levels).filter((t) => t > 0);\n const max = input.max ?? (ticks[ticks.length - 1] as number);\n const sqrt = (input.scale ?? 'sqrt') === 'sqrt';\n const radius = (v: number) => {\n const t = max > 0 ? Math.max(0, Math.min(1, v / max)) : 0;\n return hole + (outer - hole) * (sqrt ? Math.sqrt(t) : t);\n };\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 n = data.length;\n const step = sweep / Math.max(1, n);\n const pad = Math.min(step * 0.9, rad(Math.max(0, input.padAngle ?? 0)));\n // Grid rings at the nice ticks, with the tick value written where the first ring meets 12 o'clock.\n const grid: Shape[] = ticks\n .filter((t) => t <= max)\n .flatMap((t): Shape[] => [\n {\n kind: 'circle',\n part: 'grid',\n cx: px(cx),\n cy: px(cy),\n r: px(radius(t)),\n fill: 'none',\n stroke: CHART_COLORS.grid,\n },\n label(px(cx + 4), px(cy - radius(t)), format(t), { part: 'y-label', baseline: 'middle' }),\n ]);\n const sectors: Shape[] = [];\n const texts: Shape[] = [];\n data.forEach((d, i) => {\n const a0 = start + i * step + pad / 2;\n const a1 = a0 + step - pad;\n const hidden = isHidden(input, d.name);\n const title = `${d.name}: ${format(d.value)}`;\n if (!hidden && d.value > 0 && a1 > a0)\n sectors.push({\n kind: 'path',\n part: 'sector',\n d: arc(cx, cy, radius(d.value), hole, a0, a1),\n fill: colorOf(input, i, d.color),\n stroke: 'var(--skdx-color-surface-default)',\n title,\n item: { label: title, id: d.id ?? d.name, name: d.name, index: i, value: d.value },\n });\n if (input.labels && !hidden) {\n const mid = (a0 + a1) / 2;\n const sin = Math.sin(mid);\n texts.push(\n label(px(cx + (outer + 8) * sin), px(cy - (outer + 8) * Math.cos(mid)), d.name, {\n part: 'sector-label',\n anchor: sin > 0.1 ? 'start' : sin < -0.1 ? 'end' : 'middle',\n baseline: 'middle',\n }),\n );\n }\n });\n const c = canvas(input, width, height, legend);\n return { ...c, shapes: [...grid, ...sectors, ...texts, ...c.shapes], issues };\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 CHAR,\n colorOf,\n extent,\n gridOn,\n isHidden,\n legendTop,\n MARGIN,\n plotBox,\n size,\n stateCanvas,\n thinTicks,\n} from './frame.js';\nimport { referenceShapes } from './reference.js';\nimport { bandScale, finite, isFinite, px } from './scale.js';\nimport { frameShapes } from './shapes.js';\nimport type { Canvas, ChartDataIssue, Shape, SwarmPlotInput } from './types.js';\n\n/** Per-series dot titles and keyboard stops are emitted up to this many dots. */\nexport const SWARM_TITLE_LIMIT = 2000;\n\n/**\n * Offsets across the category band that keep dots of radius `r` from overlapping: samples come\n * sorted by their pixel position along the value axis; each dot takes the smallest sideways\n * offset (alternating sides, 1px steps) clear of every earlier dot within `2r` of it.\n * ponytail: O(n × offsets) per swarm; fine to a few thousand dots, a grid index beyond.\n */\nexport function swarmOffsets(positions: readonly number[], r: number, half: number): number[] {\n const placed: { p: number; off: number }[] = [];\n const out: number[] = [];\n const d2 = (2 * r) ** 2;\n for (const p of positions) {\n // Only dots close along the value axis can collide; they are the most recent ones.\n const near: { p: number; off: number }[] = [];\n for (let k = placed.length - 1; k >= 0 && p - (placed[k] as { p: number }).p < 2 * r; k--)\n near.push(placed[k] as { p: number; off: number });\n let off = 0;\n for (let step = 0; ; step++) {\n off = step === 0 ? 0 : (step % 2 ? 1 : -1) * Math.ceil(step / 2);\n if (Math.abs(off) > half) {\n // No room left in the band: sit at the edge and accept the overlap.\n off = Math.sign(off) * half;\n break;\n }\n if (near.every((n) => (n.p - p) ** 2 + (n.off - off) ** 2 >= d2)) break;\n }\n placed.push({ p, off });\n out.push(off);\n }\n return out;\n}\n\n/** Every observation as a dot, one swarm per series, spread sideways so none overlap. */\nexport function layoutSwarmPlot(input: SwarmPlotInput): Canvas {\n const issues: ChartDataIssue[] = [];\n for (const s of input.series) {\n const bad = s.data.filter((v) => v !== null && !Number.isFinite(v)).length;\n if (bad)\n issues.push({\n code: 'invalid-value',\n severity: 'warning',\n message: `Series \"${s.name}\" has ${bad} value${bad === 1 ? '' : 's'} that ${bad === 1 ? 'is' : 'are'} neither a number nor null; skipped.`,\n itemId: s.id ?? s.name,\n });\n }\n const samples = input.series.map((s) => (isHidden(input, s.name) ? [] : finite(s.data)));\n const state = stateCanvas(\n input,\n samples.every((s) => s.length === 0),\n );\n if (state) return { ...state, issues };\n const format = makeFormatter(input.yAxis?.format ?? input.format);\n const { width, height } = size(input);\n const horizontal = input.orientation === 'horizontal';\n const widest = Math.max(0, ...input.series.map((s) => s.name.length)) * CHAR;\n const legend = input.series.map((s, i) => ({ name: s.name, color: colorOf(input, i, s.color) }));\n const plot = plotBox(width, height, {\n ...MARGIN,\n top:\n MARGIN.top + legendTop(input, legend, width) + (!horizontal && input.yAxis?.label ? 12 : 0),\n left: horizontal ? Math.max(MARGIN.left, widest + 16) : MARGIN.left,\n bottom: MARGIN.bottom + (horizontal && input.yAxis?.label ? 14 : 0),\n });\n const value = axis(\n extent(samples.flat(), false),\n horizontal ? [plot.x, plot.x + plot.width] : [plot.y + plot.height, plot.y],\n input.yAxis ?? {},\n input.format,\n );\n const band = bandScale(\n input.series.length,\n horizontal ? [plot.y, plot.y + plot.height] : [plot.x, plot.x + plot.width],\n );\n const c = canvas(input, width, height, legend);\n const categoryTicks = input.series.map((s, i) => ({ pos: px(band.center(i)), label: s.name }));\n const shapes: Shape[] = frameShapes(\n {\n ...c,\n plot,\n xTicks: horizontal ? categoryTicks : thinTicks(categoryTicks, plot.width),\n yTicks: horizontal ? thinTicks(value.ticks, plot.width) : value.ticks,\n baseline: horizontal ? plot.x : plot.y + plot.height,\n },\n {\n horizontal,\n grid: gridOn(input.yAxis),\n ...(horizontal ? { xLabel: input.yAxis?.label } : { yLabel: input.yAxis?.label }),\n },\n );\n shapes.push(\n ...referenceShapes(input.references, {\n plot,\n horizontal,\n x: (v) => {\n const i = input.series.findIndex((s) => s.name === v);\n return i < 0 ? undefined : band.center(i);\n },\n y: (v) => value.scale(v),\n }),\n );\n const r = input.markerSize ?? 3;\n const half = Math.max(0, band.bandwidth / 2 - r);\n const dots: Shape[] = [];\n input.series.forEach((s, si) => {\n const color = colorOf(input, si, s.color);\n const mid = band.center(si);\n // Keep the sample index so the item points back at the observation.\n const sorted = (isHidden(input, s.name) ? [] : s.data)\n .map((v, index) => ({ v, index }))\n .filter((e): e is { v: number; index: number } => isFinite(e.v))\n .sort((a, b) => value.scale(a.v) - value.scale(b.v));\n const offsets = swarmOffsets(\n sorted.map((e) => value.scale(e.v)),\n r,\n half,\n );\n const titled = sorted.length <= SWARM_TITLE_LIMIT;\n sorted.forEach((e, k) => {\n const p = value.scale(e.v);\n const off = offsets[k] as number;\n const title = `${s.name}: ${format(e.v)}`;\n dots.push({\n kind: 'circle',\n part: 'dot',\n cx: px(horizontal ? p : mid + off),\n cy: px(horizontal ? mid + off : p),\n r,\n fill: color,\n title: titled ? title : undefined,\n item: titled\n ? {\n label: title,\n id: s.id ?? s.name,\n series: s.name,\n seriesId: s.id ?? s.name,\n index: e.index,\n value: e.v,\n }\n : undefined,\n });\n });\n });\n return { ...c, shapes: [...shapes, ...dots, ...c.shapes], issues };\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, legendOptions, legendTop, size, stateCanvas } from './frame.js';\nimport { CHART_COLORS } from './palette.js';\nimport { isFinite, px } from './scale.js';\nimport type { Canvas, ChartDataIssue, Shape, WaffleChartInput } from './types.js';\n\nconst PAD = 8;\n\n/**\n * Cells per datum by the largest-remainder method: floors first, then the leftover cells go to the\n * largest fractional parts, so the counts add up to `round(sum(quotas))` exactly.\n */\nexport function waffleCounts(quotas: readonly number[]): number[] {\n const floors = quotas.map((q) => Math.floor(q));\n let left = Math.round(quotas.reduce((s, q) => s + q, 0)) - floors.reduce((s, f) => s + f, 0);\n const order = quotas\n .map((q, i) => ({ i, frac: q - Math.floor(q) }))\n .sort((a, b) => b.frac - a.frac || a.i - b.i);\n for (const { i } of order) {\n if (left <= 0) break;\n (floors[i] as number)++;\n left--;\n }\n return floors;\n}\n\n/** A grid of cells, each a share of the total, colored by datum; empty cells for the unaccounted rest. */\nexport function layoutWaffleChart(input: WaffleChartInput): Canvas {\n const issues: ChartDataIssue[] = [];\n const data = input.data.map((d) => {\n const ok = isFinite(d.value) && d.value >= 0;\n if (!ok)\n issues.push({\n code: isFinite(d.value) ? 'negative-value' : 'invalid-value',\n severity: 'warning',\n message: `\"${d.name}\" has no valid non-negative value and is drawn as zero.`,\n itemId: d.id ?? d.name,\n });\n return { ...d, value: ok ? d.value : 0 };\n });\n const sum = data.reduce((s, d) => s + (isHidden(input, d.name) ? 0 : d.value), 0);\n const state = stateCanvas(input, sum <= 0, 300, 300);\n if (state) return { ...state, issues };\n const format = makeFormatter(input.format);\n const total = isFinite(input.total) && input.total > 0 ? input.total : sum;\n const rows = Math.max(1, Math.round(input.rows ?? 10));\n const columns = Math.max(1, Math.round(input.columns ?? 10));\n const cells = rows * columns;\n const share = (v: number) => (total > 0 ? v / total : 0);\n const counts = waffleCounts(\n data.map((d) => (isHidden(input, d.name) ? 0 : Math.min(1, share(d.value)) * cells)),\n );\n const { width, height } = size(input, 300, 300);\n // `labels` appends the share to each legend entry; the entry still toggles by the datum's name.\n const shares = new Map(data.map((d) => [d.name, `${Math.round(share(d.value) * 100)}%`]));\n const legend = legendOptions(input);\n const legendItems = input.data.map((d, i) => ({\n name: d.name,\n color: colorOf(input, i, d.color),\n }));\n const legendInput =\n input.labels && legend\n ? {\n ...input,\n legend: {\n ...legend,\n formatter: (n: string) => `${legend.formatter?.(n) ?? n} ${shares.get(n) ?? ''}`,\n },\n }\n : input;\n const top = legendTop(legendInput, legendItems, width);\n const gap = Math.max(0, input.cellGap ?? 2);\n const cell = Math.max(1, Math.min((width - 2 * PAD) / columns, (height - top - 2 * PAD) / rows));\n const x0 = (width - cell * columns) / 2;\n const y0 = top + (height - top - cell * rows) / 2;\n const horizontal = input.orientation === 'horizontal';\n // Cell k's corner: columns fill bottom-up from the left, rows fill left-to-right from the top.\n const corner = (k: number) =>\n horizontal\n ? { x: x0 + (k % columns) * cell, y: y0 + Math.floor(k / columns) * cell }\n : { x: x0 + Math.floor(k / rows) * cell, y: y0 + (rows - 1 - (k % rows)) * cell };\n const rect = (\n k: number,\n fill: string,\n title: string,\n item?: Shape['item'],\n opacity?: number,\n stroke?: string,\n ): Shape => {\n const { x, y } = corner(k);\n return {\n kind: 'rect',\n part: 'cell',\n x: px(x + gap / 2),\n y: px(y + gap / 2),\n width: px(Math.max(0.5, cell - gap)),\n height: px(Math.max(0.5, cell - gap)),\n fill,\n stroke,\n opacity,\n rx: input.cellRadius ?? 2,\n title,\n item,\n };\n };\n const shapes: Shape[] = [];\n let k = 0;\n data.forEach((d, i) => {\n const n = counts[i] as number;\n const title = `${d.name}: ${format(d.value)} (${Math.round(share(d.value) * 100)}%)`;\n const item = { label: title, id: d.id ?? d.name, name: d.name, index: i, value: d.value };\n for (let m = 0; m < n && k < cells; m++, k++)\n shapes.push(rect(k, colorOf(input, i, d.color), title, item));\n });\n const rest = total - sum;\n const restTitle =\n rest > 0 ? `Other: ${format(rest)} (${Math.round(share(rest) * 100)}%)` : 'Empty';\n // A subtle fill alone is the same luminance as a dark stage; the outline carries the contrast.\n for (; k < cells; k++)\n shapes.push(rect(k, CHART_COLORS.grid, restTitle, undefined, 0.6, CHART_COLORS.axis));\n const c = canvas(legendInput, width, height, legendItems);\n return { ...c, shapes: [...shapes, ...c.shapes], issues };\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 { layoutGaugeChart } from './gauge.js';\nexport { layoutBubbleChart } from './bubble.js';\nexport { layoutHistogram } from './histogram.js';\nexport { layoutBulletChart } from './bullet.js';\nexport { layoutComboChart } from './combo.js';\nexport { layoutRangeChart } from './range.js';\nexport { layoutNetworkChart, NETWORK_LABEL_LIMIT } from './network.js';\nexport { layoutTimelineChart } from './timeline.js';\nexport { binEdges, binSamples, type Bin, type BinOptions } from './bins.js';\nexport { CHART_COLORS, SERIES_COLORS, variantColor } from './palette.js';\nexport { CHART_SURFACE_RADIUS, chartSurfaceRadius } from './surface.js';\nexport { makeFormatter, formatValue, categoryLabel } from './format.js';\nexport { stateCanvas, tooltipShapes } from './frame.js';\nexport {\n anchorOf,\n boxFrom,\n brushBoxShape,\n brushDrag,\n brushGrab,\n crosshairAt,\n crosshairLine,\n crosshairRows,\n crosshairShapes,\n ganttDrag,\n ganttGhost,\n ganttGrab,\n ganttKey,\n hoveredRef,\n insidePolygon,\n itemsInBox,\n itemsInPolygon,\n lassoShape,\n mapPan,\n mapWheel,\n pointerTooltipText,\n type GanttGrab,\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 {\n csv,\n defsMarkup,\n exportChart,\n seriesCsv,\n shapeMarkup,\n svgMarkup,\n svgToPng,\n type ChartExportOptions,\n type ChartInstanceExportOptions,\n} from './export.js';\nexport {\n emphasize,\n isSelected,\n itemId,\n matchesItem,\n refOf,\n sameRef,\n selectedIds,\n toggleSelection,\n toRefs,\n} from './identity.js';\nexport {\n colorLegendShapes,\n makeColorScale,\n mixStops,\n parseColor,\n type ResolvedColorScale,\n} from './colors.js';\nexport {\n aggregate,\n applyTransforms,\n binCounts,\n cumulative,\n difference,\n exponentialMovingAverage,\n filter,\n movingAverage,\n normalize,\n percentageChange,\n rank,\n sortValues,\n} from './transforms.js';\nexport {\n lttb,\n m4,\n minMaxSample,\n sampleIndexes,\n samplingOptions,\n SAMPLING_THRESHOLD,\n} from './sampling.js';\nexport {\n cutDepth,\n depthOf,\n drill,\n findPath,\n nodeId,\n nodeValue,\n sortChildren,\n} from './hierarchy.js';\nexport { tableRows, TABLE_LIMIT } from './table.js';\nexport { syncGroup, type SyncGroup, type SyncListener, type SyncState } from './sync.js';\nexport { annotationShapes, referenceShapes } from './reference.js';\nexport { legendOptions, placeLegend, tooltipOptions } from './frame.js';\nexport { translatePath, translateShapes } from './geometry.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';\nexport { layoutMarimekkoChart } from './marimekko.js';\nexport { layoutParallelCoordinates, PARALLEL_TITLE_LIMIT } from './parallel.js';\nexport { layoutLinearGauge } from './linearGauge.js';\nexport { layoutDumbbellChart } from './dumbbell.js';\nexport { layoutParetoChart } from './pareto.js';\nexport { layoutOrganizationChart, layoutTreeChart } from './tree.js';\nexport { layoutCirclePacking, packCircles } from './circlePacking.js';\nexport { layoutIcicle } from './icicle.js';\nexport { layoutBumpChart } from './bump.js';\nexport { layoutPolarAreaChart } from './polarArea.js';\nexport { layoutSwarmPlot, SWARM_TITLE_LIMIT, swarmOffsets } from './swarm.js';\nexport { layoutWaffleChart, waffleCounts } from './waffle.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 { chartSurfaceRadius, 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 [style.rx]=\"surfaceRadius(s.part)\"\n [attr.fill]=\"s.fill\"\n [attr.stroke]=\"s.stroke\"\n [attr.fill-opacity]=\"s.opacity\"\n [attr.pointer-events]=\"\n s.part === 'stage-label-background' || s.part === 'label-background' ? 'none' : null\n \"\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 [attr.opacity]=\"s.opacity\"\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.aria-label]=\"s.title\"\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 [attr.pointer-events]=\"s.item ? null : 'none'\"\n [attr.transform]=\"s.rotate ? 'rotate(' + s.rotate + ' ' + s.x + ' ' + s.y + ')' : null\"\n [textContent]=\"s.text\"\n ></svg:text>\n }\n }\n }\n `,\n})\nexport class SkdxChartShapesComponent {\n protected readonly surfaceRadius = chartSurfaceRadius;\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 effect,\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 boxFrom,\n brushBoxShape,\n brushDrag,\n brushGrab,\n CHART_COLORS,\n crosshairAt,\n crosshairRows,\n emphasize,\n exportChart,\n focusShapes,\n focusTargets,\n ganttDrag,\n ganttGhost,\n ganttGrab,\n ganttKey,\n hoveredRef,\n itemAt,\n itemsInBox,\n itemsInPolygon,\n lassoShape,\n mapPan,\n mapWheel,\n matchesItem,\n nextFocus,\n placeLegend,\n pointerShapes,\n pointerTooltipText,\n refOf,\n sameRef,\n syncGroup,\n tableRows,\n toggleSelection,\n toViewBox,\n zoomPan,\n zoomPinch,\n zoomWheel,\n type AccessibleTableOptions,\n type Annotation,\n type AxisOptions,\n type BrushGrab,\n type Canvas,\n type CartesianSeries,\n type Category,\n type ChartDataIssue,\n type ChartExportOptions,\n type ChartInstanceExportOptions,\n type ChartItem,\n type ChartItemRef,\n type Curve,\n type Format,\n type GanttGrab,\n type HighlightScope,\n type LegendOptions,\n type MapView,\n type RangeSeries,\n type Reference,\n type ResponsiveOptions,\n type Sampling,\n type Selection,\n type SeriesTransform,\n type Shape,\n type Sized,\n type SyncState,\n type TaskChange,\n type TooltipOptions,\n type XAxisOptions,\n type Zoom,\n} from './core/index.js';\nimport { SkdxChartShapesComponent } from './shapes.component';\n\n/** How clicks (and, for `brush`/`lasso`, drags) change the selection. */\nexport type SelectionMode = 'none' | 'single' | 'multiple' | 'brush' | 'lasso';\n\ninterface Drag {\n x: number;\n y: number;\n zoom: Zoom;\n grab: BrushGrab | 'pan' | 'pinch' | 'select' | 'lasso' | 'edit' | 'map';\n /** Finger distance when a pinch began. */\n distance?: number;\n points?: { x: number; y: number }[];\n gantt?: GanttGrab;\n change?: TaskChange;\n view?: { center: [number, number]; zoom: 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, zoom, view, selection, highlight\n * and task changes to the chart, which applies them through its models.\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-description]=\"layout().description\"\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.cursor]=\"canZoom() || canPan() ? 'grab' : brushing() ? 'crosshair' : null\"\n [style.touch-action]=\"active() ? 'none' : null\"\n [style.--skdx-chart-duration]=\"duration()\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerleave)=\"onPointerLeave()\"\n (pointerdown)=\"onPointerDown($event)\"\n (pointerup)=\"onPointerUp($event)\"\n (pointercancel)=\"onPointerUp($event)\"\n (wheel)=\"onWheel($event)\"\n (dblclick)=\"onDoubleClick()\"\n (click)=\"onClick($event)\"\n (keydown)=\"onKeyDown($event)\"\n (blur)=\"onBlur()\"\n >\n <title>{{ label() }}</title>\n @if (layout().description) {\n <svg:desc>{{ layout().description }}</svg:desc>\n }\n @if (layout().defs?.length) {\n <svg:defs>\n @for (g of layout().defs; track g.id) {\n <svg:linearGradient\n [attr.id]=\"g.id\"\n x1=\"0\"\n y1=\"0\"\n [attr.x2]=\"g.vertical === false ? 1 : 0\"\n [attr.y2]=\"g.vertical === false ? 0 : 1\"\n >\n @for (st of g.stops; track $index) {\n <svg:stop\n [attr.offset]=\"st.offset\"\n [attr.stop-color]=\"st.color\"\n [attr.stop-opacity]=\"st.opacity\"\n ></svg:stop>\n }\n </svg:linearGradient>\n }\n </svg:defs>\n }\n <svg:g\n skdxChartShapes\n [shapes]=\"layout().shapes\"\n ></svg:g>\n <svg:g\n skdxChartShapes\n [shapes]=\"tipShapes()\"\n ></svg:g>\n <svg:g\n skdxChartShapes\n [shapes]=\"focusShapes()\"\n ></svg:g>\n <svg:g\n skdxChartShapes\n [shapes]=\"overlay()\"\n ></svg:g>\n </svg>\n @if (portal(); as p) {\n <div\n role=\"tooltip\"\n [attr.data-skdx-tooltip]=\"kind()\"\n [style.left.px]=\"p.x + 12\"\n [style.top.px]=\"p.y + 12\"\n style=\"position:fixed;pointer-events:none;z-index:1000;background:var(--skdx-color-surface-raised);color:var(--skdx-color-text-default);border:1px solid var(--skdx-color-border-strong);border-radius:var(--skdx-radius-default, var(--skdx-radius-md, 0.5rem));padding:4px 8px;font-family:var(--skdx-font-family);font-size:var(--skdx-font-size-xs);white-space:nowrap\"\n >\n @for (line of p.lines; track $index) {\n <div [style.font-weight]=\"$index === 0 && p.lines.length > 1 ? 'bold' : null\">\n {{ line }}\n </div>\n }\n </div>\n }\n @if (table(); as rows) {\n <table\n [attr.data-skdx-table]=\"kind()\"\n style=\"position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0\"\n >\n <caption>\n {{\n caption()\n }}\n </caption>\n <thead>\n <tr>\n @for (h of rows[0] ?? []; track $index) {\n <th scope=\"col\">{{ h }}</th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of rows.slice(1); track $index) {\n <tr>\n @for (cell of row; track $index) {\n @if ($index === 0) {\n <th scope=\"row\">{{ cell }}</th>\n } @else {\n <td>{{ cell }}</td>\n }\n }\n </tr>\n }\n </tbody>\n </table>\n }\n `,\n})\nexport class SkdxChartRootComponent {\n /** The chart's layout, before selection and highlight emphasis. */\n readonly layoutInput = input.required<Canvas>({ alias: 'layout' });\n /** The shared options, for emphasis and the accessible table. */\n readonly options = input<Sized>({});\n readonly kind = input.required<string>();\n readonly label = input.required<string>();\n /** Wheel and pinch zoom, drag pans the category axis (or the map). */\n readonly zoomable = input(false);\n /** Clicks select marks: one, any number, a dragged rectangle or a drawn outline. */\n readonly selectionMode = input<SelectionMode>('none');\n /** Gantt bars can be dragged and resized. */\n readonly editable = input(false);\n /** Charts sharing a `syncId` share highlight, selection, zoom, hidden series and the crosshair. */\n readonly syncId = input<string>();\n /** The category another chart of the group has its crosshair on. */\n readonly crosshair = input<string | null>(null);\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 map was panned or zoomed; the chart applies it through its `view` model. */\n readonly viewChange = output<MapView | undefined>();\n /** A click or brush changed the selection; the chart applies it through its `selected` model. */\n readonly selectedChange = output<ChartItemRef[]>();\n /** The mark under the pointer or focus changed. */\n readonly highlightedChange = output<ChartItemRef | null>();\n /** A data problem was found while laying out. */\n readonly dataIssue = output<ChartDataIssue>();\n /** A Gantt bar was dragged or resized. */\n readonly taskChange = output<TaskChange>();\n /** Another chart in the sync group published a change; the chart applies it through its models. */\n readonly syncChange = output<SyncState>();\n /** The host's measured width, under `responsive`. */\n readonly measured = output<number>();\n\n protected readonly colors = CHART_COLORS;\n protected readonly layout = computed(() =>\n emphasize(placeLegend(this.layoutInput()), this.options()),\n );\n protected readonly duration = computed(() => animationDuration(this.layout()) ?? null);\n protected readonly table = computed(() =>\n tableRows(this.layout(), this.options().accessibleTable),\n );\n protected readonly caption = computed(() => {\n const opt = this.options().accessibleTable;\n return (typeof opt === 'object' && opt.caption) || this.label();\n });\n private readonly pointers = new Map<number, number>();\n private readonly svg = viewChild.required<ElementRef<SVGSVGElement>>('svg');\n private hover: ChartItemRef | null = null;\n private readonly token = {};\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 effect(() => {\n for (const issue of this.layout().issues ?? []) this.dataIssue.emit(issue);\n });\n // Chart coordination: apply what the other members of the group publish.\n effect((onCleanup) => {\n const id = this.syncId();\n if (!id) return;\n const group = syncGroup(id);\n this.syncChange.emit(group.current);\n onCleanup(\n group.subscribe((state, source) => {\n if (source !== this.token) this.syncChange.emit(state);\n }),\n );\n });\n }\n private readonly dismissedCrosshair = signal<string | null>(null);\n protected readonly tip = signal<Shape[]>([]);\n protected readonly tipShapes = computed(() => {\n const own = this.tip();\n const cross = this.crosshair();\n return own.length || !cross || cross === this.dismissedCrosshair()\n ? own\n : crosshairAt(this.layout(), cross);\n });\n private lastCross: string | null = null;\n protected readonly portal = signal<{ x: number; y: number; lines: string[] } | null>(null);\n protected readonly focused = signal<number | null>(null);\n protected readonly overlay = signal<Shape[]>([]);\n protected readonly canZoom = computed(() => {\n const hit = this.layout().hit;\n return Boolean(hit && (this.zoomable() || hit.brush));\n });\n protected readonly canPan = computed(() => Boolean(this.layout().map && this.zoomable()));\n protected readonly canEdit = computed(() => Boolean(this.editable() && this.layout().edit));\n protected readonly brushing = computed(\n () => this.selectionMode() === 'brush' || this.selectionMode() === 'lasso',\n );\n protected readonly active = computed(\n () => this.canZoom() || this.canPan() || this.canEdit() || this.brushing(),\n );\n protected readonly focusable = computed(\n () => !this.layout().decorative && focusTargets(this.layout()).length > 0,\n );\n protected readonly focusShapes = computed(() => focusShapes(this.layout(), this.focused()));\n private drag: Drag | null = null;\n\n /** The rendered `<svg>`. */\n getSvgElement(): SVGSVGElement {\n return this.svg().nativeElement;\n }\n\n /** The current layout: shapes, size, hit model. */\n getLayout(): Canvas {\n return this.layout();\n }\n\n /** Moves keyboard focus to the first mark matching the ref; `false` when none matches. */\n focusItem(ref: ChartItemRef): boolean {\n const i = this.layout().shapes.findIndex(\n (s) => s.item && !s.item.legend && matchesItem(s.item, ref),\n );\n if (i < 0) return false;\n this.svg().nativeElement.focus();\n this.focused.set(i);\n return true;\n }\n\n /** SVG markup, a PNG blob, or CSV, through the core's `exportChart`. */\n export(options: ChartInstanceExportOptions): Promise<string | Blob> {\n return exportChart(this.layout(), {\n ...options,\n label: options.label ?? this.label(),\n } as ChartExportOptions);\n }\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 private publish(state: SyncState) {\n const id = this.syncId();\n if (id) syncGroup(id).publish(state, this.token);\n }\n\n private setZoom(next: Zoom | undefined) {\n this.zoomChange.emit(next);\n this.publish({ zoom: next });\n }\n\n private setSelected(next: ChartItemRef[]) {\n this.selectedChange.emit(next);\n this.publish({ selected: next });\n }\n\n private highlight(next: ChartItemRef | null) {\n const prev = this.hover;\n if (prev === next || (prev && next && sameRef(prev, next))) return;\n this.hover = next;\n this.highlightedChange.emit(next);\n this.publish({ highlighted: next });\n }\n\n private select(item: ChartItem) {\n const mode = this.selectionMode();\n if (mode === 'none') return;\n this.setSelected(\n toggleSelection(this.options().selected, item, mode === 'single' ? 'single' : 'multiple'),\n );\n }\n\n private shareCrosshair(category: string | null) {\n if (!this.syncId() || this.lastCross === category) return;\n this.lastCross = category;\n this.publish({ crosshair: category });\n }\n\n private clearTip() {\n this.tip.set([]);\n this.portal.set(null);\n this.shareCrosshair(null);\n }\n\n protected onPointerMove(e: PointerEvent): void {\n this.dismissedCrosshair.set(null);\n const layout = this.layout();\n if (this.pointers.has(e.pointerId)) this.pointers.set(e.pointerId, this.viewBox(e).x);\n const d = this.drag;\n if (d?.grab === 'select') {\n const { x, y } = this.viewBox(e);\n this.overlay.set([brushBoxShape(boxFrom(d.x, d.y, x, y))]);\n return;\n }\n if (d?.grab === 'lasso') {\n const { x, y } = this.viewBox(e);\n d.points = [...(d.points ?? []), { x, y }];\n this.overlay.set([lassoShape(d.points)]);\n return;\n }\n if (d?.grab === 'edit') {\n if (!d.gantt) return;\n const { x } = this.viewBox(e);\n d.change = ganttDrag(layout, d.gantt, x - d.x);\n this.overlay.set([ganttGhost(layout, d.gantt, d.change)]);\n return;\n }\n if (d?.grab === 'map') {\n if (!layout.map || !d.view) return;\n const { x, y } = this.viewBox(e);\n this.viewChange.emit(mapPan(layout.map, d.view, x - d.x, y - d.y));\n return;\n }\n if (d && layout.hit) {\n if (d.grab === 'pinch') {\n const [a, b] = [...this.pointers.values()];\n if (a === undefined || b === undefined || !d.distance) return;\n this.setZoom(zoomPinch(layout.hit, d.zoom, Math.abs(a - b) / d.distance, (a + b) / 2));\n return;\n }\n const { x } = this.viewBox(e);\n this.setZoom(\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) {\n if (layout.tooltipPortal) {\n const { lines, shapes } = pointerTooltipText(\n layout,\n e.target,\n e.currentTarget as Element,\n e.clientX,\n e.clientY,\n );\n this.tip.set(shapes);\n this.portal.set(lines.length ? { x: e.clientX, y: e.clientY, lines } : null);\n } else {\n const next = pointerShapes(\n layout,\n e.target,\n e.currentTarget as Element,\n e.clientX,\n e.clientY,\n );\n if (next.length > 0 || this.tip().length > 0) this.tip.set(next);\n }\n }\n this.highlight(hoveredRef(layout, e.target));\n if (this.syncId() && layout.hit?.crosshair) {\n const found = crosshairRows(layout, this.viewBox(e).x);\n this.shareCrosshair(found ? (layout.hit.rows[found.index]?.[0] ?? null) : null);\n }\n }\n\n protected onPointerLeave(): void {\n this.clearTip();\n this.highlight(null);\n }\n\n protected onBlur(): void {\n this.focused.set(null);\n this.highlight(null);\n }\n\n protected onDoubleClick(): void {\n if (this.canPan()) this.viewChange.emit(undefined);\n else if (this.canZoom()) this.setZoom(undefined);\n }\n\n protected onPointerDown(e: PointerEvent): void {\n if (e.button !== 0) return;\n const layout = this.layout();\n const { x, y } = this.viewBox(e);\n const legend = itemAt(layout, e.target)?.item.legend;\n const grabbed = this.canEdit() ? ganttGrab(layout, x, y) : undefined;\n if (grabbed) {\n this.drag = { x, y, zoom: { start: 0, end: 0 }, grab: 'edit', gantt: grabbed };\n (e.currentTarget as Element).setPointerCapture(e.pointerId);\n this.clearTip();\n return;\n }\n if (this.brushing() && !legend) {\n this.drag = {\n x,\n y,\n zoom: { start: 0, end: 0 },\n grab: this.selectionMode() === 'lasso' ? 'lasso' : 'select',\n points: [{ x, y }],\n };\n (e.currentTarget as Element).setPointerCapture(e.pointerId);\n this.clearTip();\n return;\n }\n if (this.canPan() && layout.map) {\n const p = layout.map.plot;\n if (x < p.x || x > p.x + p.width || y < p.y || y > p.y + p.height) return;\n this.drag = { x, y, zoom: { start: 0, end: 0 }, grab: 'map', view: layout.map.view };\n (e.currentTarget as Element).setPointerCapture(e.pointerId);\n this.clearTip();\n return;\n }\n const hit = layout.hit;\n if (!hit || !this.canZoom()) return;\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 = {\n x: (a + b) / 2,\n y,\n zoom: hit.zoom,\n grab: 'pinch',\n distance: Math.abs(a - b) || 1,\n };\n } else {\n const strip = brushGrab(hit, x, y);\n if (strip) {\n this.drag = { x, y, zoom: strip.zoom, grab: strip.grab };\n if (strip.zoom !== hit.zoom) this.setZoom(strip.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, y, 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.clearTip();\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 const d = this.drag;\n if (d?.grab === 'select' || d?.grab === 'lasso' || d?.grab === 'edit' || d?.grab === 'map') {\n this.overlay.set([]);\n const { x, y } = this.viewBox(e);\n const moved = Math.abs(x - d.x) > 2 || Math.abs(y - d.y) > 2;\n if (moved) {\n if (d.grab === 'select')\n this.setSelected(itemsInBox(this.layout(), boxFrom(d.x, d.y, x, y)));\n else if (d.grab === 'lasso')\n this.setSelected(itemsInPolygon(this.layout(), d.points ?? []));\n else if (d.grab === 'edit' && d.change) this.taskChange.emit(d.change);\n // The click that ends the drag must not toggle a mark.\n this.drag = { ...d, distance: -1 };\n return;\n }\n this.drag = null;\n return;\n }\n if (this.pointers.size === 0 || this.drag?.grab === 'pinch') this.drag = null;\n }\n\n protected onWheel(e: WheelEvent): void {\n const layout = this.layout();\n const { x, y } = this.viewBox(e);\n if (layout.map && this.canPan()) {\n const p = layout.map.plot;\n if (x < p.x || x > p.x + p.width || y < p.y || y > p.y + p.height) return;\n e.preventDefault();\n this.viewChange.emit(mapWheel(layout.map, e.deltaY, x, y));\n return;\n }\n const hit = layout.hit;\n if (!hit || !this.canZoom()) return;\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.setZoom(next);\n }\n\n protected onClick(e: MouseEvent): void {\n if (this.drag?.distance === -1) {\n this.drag = null;\n return;\n }\n const hit = itemAt(this.layout(), e.target);\n if (!hit) return;\n if (hit.item.range) this.setZoom(hit.item.range);\n else if (hit.item.legend && hit.item.series !== undefined) {\n this.hiddenSeriesChange.emit([hit.item.series]);\n } else {\n this.select(hit.item);\n this.itemClick.emit(hit.item);\n }\n }\n\n protected onKeyDown(e: KeyboardEvent): void {\n if (e.key === 'Escape') {\n e.preventDefault();\n this.focused.set(null);\n this.clearTip();\n this.dismissedCrosshair.set(this.crosshair());\n this.highlight(null);\n return;\n }\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.select(item);\n this.itemClick.emit(item);\n }\n return;\n }\n const change = this.canEdit() ? ganttKey(this.layout(), focused, e) : undefined;\n if (change) {\n e.preventDefault();\n this.taskChange.emit(change);\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 const item = next === null ? undefined : this.layout().shapes[next]?.item;\n this.highlight(item ? refOf(item) : null);\n }\n}\n\n/** Size, state, formatting, accessibility and interaction inputs every chart takes. */\n@Directive({\n // A responsive chart must fill its container even when that container centers flex items.\n // Otherwise its last SVG width becomes the host's intrinsic width and it cannot grow again.\n host: {\n '[style.display]': \"responsive() ? 'block' : null\",\n '[style.width]': \"responsive() ? '100%' : null\",\n '[style.min-width]': \"responsive() ? '0' : null\",\n },\n})\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; an object sets position, interactivity and item limit. */\n readonly legend = input<boolean | LegendOptions>(false);\n /** Show a hover tooltip for the mark under the pointer; an object configures it. */\n readonly tooltip = input<boolean | TooltipOptions>(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 /** Selected items; two-way bindable, clicks update it under `selectionMode`. */\n readonly selected = model<Selection | undefined>(undefined);\n /** Clicks select marks: one, any number, a dragged rectangle or a drawn outline. */\n readonly selectionMode = input<SelectionMode>('none');\n /** The item(s) under emphasis; two-way bindable, hover and focus update it. */\n readonly highlighted = model<Sized['highlighted']>(undefined);\n readonly highlightScope = input<HighlightScope>();\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 /** Render a visually hidden data table next to the svg. */\n readonly accessibleTable = input<boolean | AccessibleTableOptions>(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; an object adds `compact` overrides. */\n readonly responsive = input<boolean | ResponsiveOptions>(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 /** The map's pan/zoom state; two-way bindable, wheel and drag update it. */\n readonly view = model<MapView | undefined>(undefined);\n /** Wheel zooms and drag pans the category axis (or the map). */\n readonly zoomable = input(false);\n /** Gantt bars can be dragged and resized; listen to `(taskChange)`. */\n readonly editable = input(false);\n /** Charts sharing a `syncId` share highlight, selection, zoom, hidden series and the crosshair. */\n readonly syncId = input<string>();\n /** With `syncId`: a selection made in another chart of the group fades everything else here. */\n readonly crossFilter = input(false);\n /** The category another chart of the group has its crosshair on. */\n protected readonly syncedCrosshair = signal<string | null>(null);\n /** A mark was clicked, or Enter/Space was pressed on the focused mark. */\n readonly itemClick = output<ChartItem>();\n /** A data problem was found while laying out. */\n readonly dataIssue = output<ChartDataIssue>();\n /** A Gantt bar was dragged or resized. */\n readonly taskChange = output<TaskChange>();\n /** The root component, for the imperative surface. */\n protected readonly chartRoot = viewChild(SkdxChartRootComponent);\n /** Highlight received from the sync group, used while `highlighted` is not set. */\n protected readonly syncedHighlight = signal<Sized['highlighted']>(null);\n /** The shared options as one memoized object, so the root's input only changes when they do. */\n protected readonly options = computed(() => this.sized());\n\n /** The rendered `<svg>`, or `null` before the first render. */\n getSvgElement(): SVGSVGElement | null {\n return this.chartRoot()?.getSvgElement() ?? null;\n }\n\n /** The current layout: shapes, size, hit model. */\n getLayout(): Canvas | undefined {\n return this.chartRoot()?.getLayout();\n }\n\n resetZoom(): void {\n this.zoom.set(undefined);\n }\n\n zoomTo(zoom: Zoom): void {\n this.zoom.set(zoom);\n }\n\n /** Moves keyboard focus to the first mark matching the ref; `false` when none matches. */\n focusItem(ref: ChartItemRef): boolean {\n return this.chartRoot()?.focusItem(ref) ?? false;\n }\n\n /** SVG markup, a PNG blob, or CSV, through the core's `exportChart`. */\n export(options: ChartInstanceExportOptions): Promise<string | Blob> {\n const root = this.chartRoot();\n return root ? root.export(options) : Promise.reject(new Error('not rendered yet'));\n }\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 /** Applies what another chart in the sync group published. */\n protected sync(state: SyncState): void {\n if ('highlighted' in state) this.syncedHighlight.set(state.highlighted ?? null);\n if (state.selected) {\n this.selected.set(state.selected);\n if (this.crossFilter())\n this.syncedHighlight.set(state.selected.length ? state.selected : null);\n }\n if ('zoom' in state) this.zoom.set(state.zoom);\n if (state.hiddenSeries) this.hiddenSeries.set(state.hiddenSeries);\n if ('crosshair' in state) this.syncedCrosshair.set(state.crosshair ?? null);\n }\n\n protected sized() {\n const own = this.highlighted();\n const responsive = this.responsive();\n const measured = this.measuredWidth();\n // Below the breakpoint the `compact` overrides replace the matching inputs.\n const compact =\n typeof responsive === 'object' &&\n measured !== undefined &&\n measured < (responsive.breakpoint ?? 480)\n ? responsive.compact\n : undefined;\n return {\n ...compact,\n width: responsive && measured ? measured : 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 selected: this.selected(),\n highlighted: own === undefined ? this.syncedHighlight() : own,\n highlightScope: this.highlightScope(),\n loading: this.loading(),\n error: this.error(),\n emptyMessage: this.emptyMessage(),\n description: this.description(),\n decorative: this.decorative(),\n accessibleTable: this.accessibleTable(),\n zoom: this.zoom(),\n view: this.view(),\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 /** Points, callouts, text and rectangles in data coordinates. */\n readonly annotations = input<Annotation[]>();\n /** Write each value next to its mark. */\n readonly labels = input(false);\n readonly curve = input<Curve>();\n readonly connectNulls = input(false);\n /** What a null does to a line: a gap, a bridge, or a zero. */\n readonly nulls = input<'gap' | 'connect' | 'zero'>();\n /** Stack the series; `'percent'` normalizes each category to 100%. */\n readonly stacked = input<boolean | 'percent'>(false);\n /** Where stacks stand: zero, expand (100%), silhouette or wiggle (streamgraph). */\n readonly stackOffset = input<'zero' | 'expand' | 'silhouette' | 'wiggle'>();\n readonly orientation = input<'vertical' | 'horizontal'>();\n /** Corner radius of bars. */\n readonly radius = input<number>();\n /** Share of each category slot left empty around its bars, 0–0.9. */\n readonly barGap = input<number>();\n /** Largest bar thickness in pixels. */\n readonly barWidth = input<number>();\n readonly sort = input<'asc' | 'desc'>();\n readonly transform = input<'histogram' | 'cumulative'>();\n /** Transforms applied to every series, in order. */\n readonly transforms = input<SeriesTransform[]>();\n readonly bins = input<number>();\n readonly binWidth = input<number>();\n readonly binDomain = input<[number, number]>();\n readonly binMode = input<'count' | 'density' | 'cumulative'>();\n /** Point reduction for dense series. */\n readonly sampling = input<Sampling>();\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 annotations: this.annotations(),\n labels: this.labels(),\n curve: this.curve(),\n connectNulls: this.connectNulls(),\n nulls: this.nulls(),\n stacked: this.stacked(),\n stackOffset: this.stackOffset(),\n orientation: this.orientation(),\n radius: this.radius(),\n barGap: this.barGap(),\n barWidth: this.barWidth(),\n sort: this.sort(),\n transform: this.transform(),\n transforms: this.transforms(),\n bins: this.bins(),\n binWidth: this.binWidth(),\n binDomain: this.binDomain(),\n binMode: this.binMode(),\n sampling: this.sampling(),\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","point","BRUSH_HEIGHT","BRUSH_GAP","clampZoom","TAU","PAD","rad"],"mappings":"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"}