@skdx/angular-charts 0.34.0 → 0.35.0

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