@skdx/angular-charts 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +57 -0
- package/fesm2022/skdx-angular-charts-area.mjs +48 -0
- package/fesm2022/skdx-angular-charts-area.mjs.map +1 -0
- package/fesm2022/skdx-angular-charts-bar.mjs +57 -0
- package/fesm2022/skdx-angular-charts-bar.mjs.map +1 -0
- package/fesm2022/skdx-angular-charts-boxplot.mjs +50 -0
- package/fesm2022/skdx-angular-charts-boxplot.mjs.map +1 -0
- package/fesm2022/skdx-angular-charts-candlestick.mjs +50 -0
- package/fesm2022/skdx-angular-charts-candlestick.mjs.map +1 -0
- package/fesm2022/skdx-angular-charts-chord.mjs +53 -0
- package/fesm2022/skdx-angular-charts-chord.mjs.map +1 -0
- package/fesm2022/skdx-angular-charts-funnel.mjs +50 -0
- package/fesm2022/skdx-angular-charts-funnel.mjs.map +1 -0
- package/fesm2022/skdx-angular-charts-gantt.mjs +53 -0
- package/fesm2022/skdx-angular-charts-gantt.mjs.map +1 -0
- package/fesm2022/skdx-angular-charts-heatmap.mjs +56 -0
- package/fesm2022/skdx-angular-charts-heatmap.mjs.map +1 -0
- package/fesm2022/skdx-angular-charts-internal.mjs +1779 -0
- package/fesm2022/skdx-angular-charts-internal.mjs.map +1 -0
- package/fesm2022/skdx-angular-charts-line.mjs +48 -0
- package/fesm2022/skdx-angular-charts-line.mjs.map +1 -0
- package/fesm2022/skdx-angular-charts-map.mjs +45 -0
- package/fesm2022/skdx-angular-charts-map.mjs.map +1 -0
- package/fesm2022/skdx-angular-charts-pie.mjs +53 -0
- package/fesm2022/skdx-angular-charts-pie.mjs.map +1 -0
- package/fesm2022/skdx-angular-charts-radar.mjs +53 -0
- package/fesm2022/skdx-angular-charts-radar.mjs.map +1 -0
- package/fesm2022/skdx-angular-charts-sankey.mjs +50 -0
- package/fesm2022/skdx-angular-charts-sankey.mjs.map +1 -0
- package/fesm2022/skdx-angular-charts-scatter.mjs +50 -0
- package/fesm2022/skdx-angular-charts-scatter.mjs.map +1 -0
- package/fesm2022/skdx-angular-charts-sparkline.mjs +52 -0
- package/fesm2022/skdx-angular-charts-sparkline.mjs.map +1 -0
- package/fesm2022/skdx-angular-charts-sunburst.mjs +50 -0
- package/fesm2022/skdx-angular-charts-sunburst.mjs.map +1 -0
- package/fesm2022/skdx-angular-charts-treemap.mjs +42 -0
- package/fesm2022/skdx-angular-charts-treemap.mjs.map +1 -0
- package/fesm2022/skdx-angular-charts-waterfall.mjs +53 -0
- package/fesm2022/skdx-angular-charts-waterfall.mjs.map +1 -0
- package/fesm2022/skdx-angular-charts.mjs +29 -0
- package/fesm2022/skdx-angular-charts.mjs.map +1 -0
- package/package.json +115 -0
- package/types/skdx-angular-charts-area.d.ts +12 -0
- package/types/skdx-angular-charts-bar.d.ts +20 -0
- package/types/skdx-angular-charts-boxplot.d.ts +13 -0
- package/types/skdx-angular-charts-candlestick.d.ts +13 -0
- package/types/skdx-angular-charts-chord.d.ts +15 -0
- package/types/skdx-angular-charts-funnel.d.ts +13 -0
- package/types/skdx-angular-charts-gantt.d.ts +15 -0
- package/types/skdx-angular-charts-heatmap.d.ts +18 -0
- package/types/skdx-angular-charts-internal.d.ts +358 -0
- package/types/skdx-angular-charts-line.d.ts +12 -0
- package/types/skdx-angular-charts-map.d.ts +15 -0
- package/types/skdx-angular-charts-pie.d.ts +15 -0
- package/types/skdx-angular-charts-radar.d.ts +15 -0
- package/types/skdx-angular-charts-sankey.d.ts +13 -0
- package/types/skdx-angular-charts-scatter.d.ts +13 -0
- package/types/skdx-angular-charts-sparkline.d.ts +14 -0
- package/types/skdx-angular-charts-sunburst.d.ts +13 -0
- package/types/skdx-angular-charts-treemap.d.ts +13 -0
- package/types/skdx-angular-charts-waterfall.d.ts +15 -0
- package/types/skdx-angular-charts.d.ts +19 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skdx-angular-charts-internal.mjs","sources":["../../src/internal/core/palette.ts","../../src/internal/core/scale.ts","../../src/internal/core/frame.ts","../../src/internal/core/shapes.ts","../../src/internal/core/bar.ts","../../src/internal/core/line.ts","../../src/internal/core/scatter.ts","../../src/internal/core/pie.ts","../../src/internal/core/sparkline.ts","../../src/internal/core/radar.ts","../../src/internal/core/heatmap.ts","../../src/internal/core/funnel.ts","../../src/internal/core/sankey.ts","../../src/internal/core/treemap.ts","../../src/internal/core/candlestick.ts","../../src/internal/core/waterfall.ts","../../src/internal/core/gantt.ts","../../src/internal/core/boxplot.ts","../../src/internal/core/sunburst.ts","../../src/internal/core/chord.ts","../../src/internal/core/map.ts","../../src/internal/core/index.ts","../../src/internal/shapes.component.ts","../../src/internal/frame.component.ts","../../src/internal/index.ts","../../src/internal/skdx-angular-charts-internal.ts"],"sourcesContent":["/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\n/**\n * Series colors, cycling through the `@skdx/tokens` scales so charts follow the\n * active theme. Load `@skdx/tokens/css` (or any theme) for these to resolve.\n */\nexport const SERIES_COLORS: readonly string[] = [\n 'primary',\n 'success',\n 'warning',\n 'danger',\n 'neutral',\n]\n .flatMap((scale) => [500, 700].map((shade) => `var(--skdx-color-${scale}-${shade})`))\n // Interleave: every 500 first, then every 700.\n .sort((a, b) => Number(a.endsWith('700)')) - Number(b.endsWith('700)')));\n\nexport const CHART_COLORS = {\n axis: 'var(--skdx-color-border-strong)',\n grid: 'var(--skdx-color-border-subtle)',\n label: 'var(--skdx-color-text-muted)',\n fontFamily: 'var(--skdx-font-family)',\n fontSize: 'var(--skdx-font-size-xs)',\n} as const;\n\nexport const seriesColor = (index: number, override?: string | undefined): string =>\n override ?? (SERIES_COLORS[index % SERIES_COLORS.length] as string);\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\n/** Maps `[d0, d1]` onto `[r0, r1]` linearly; a zero-width domain maps to `r0`. */\nexport function linearScale(\n [d0, d1]: readonly [number, number],\n [r0, r1]: readonly [number, number],\n): (value: number) => number {\n const span = d1 - d0;\n return (value) => (span === 0 ? r0 : r0 + ((value - d0) / span) * (r1 - r0));\n}\n\n/** Round tick values covering `[min, max]` with a 1/2/5 step, about `count` of them. */\nexport function niceTicks(min: number, max: number, count = 5): number[] {\n if (min === max) return [min];\n const raw = (max - min) / Math.max(1, count);\n const magnitude = 10 ** Math.floor(Math.log10(raw));\n const norm = raw / magnitude;\n const step = (norm < 1.5 ? 1 : norm < 3.5 ? 2 : norm < 7.5 ? 5 : 10) * magnitude;\n const start = Math.floor(min / step) * step;\n const end = Math.ceil(max / step) * step;\n const ticks: number[] = [];\n for (let v = start; v <= end + step / 2; v += step) ticks.push(round(v));\n return ticks;\n}\n\n/** Evenly spaced slots for `count` categories across `[r0, r1]` with 20% gaps. */\nexport function bandScale(count: number, [r0, r1]: readonly [number, number]) {\n const step = count === 0 ? 0 : (r1 - r0) / count;\n const bandwidth = step * 0.8;\n return {\n step,\n bandwidth,\n start: (i: number) => r0 + i * step + (step - bandwidth) / 2,\n center: (i: number) => r0 + (i + 0.5) * step,\n };\n}\n\nconst round = (v: number) => Number(v.toPrecision(12));\n\n/** Pixel coordinates rounded to 2 decimals, so the markup stays readable. */\nexport const px = (n: number): number => Number(n.toFixed(2));\n\nexport const formatValue = (v: number): string => new Intl.NumberFormat().format(round(v));\n\n/** SVG path through the points: straight segments, or a monotone cubic (Fritsch–Carlson) that never overshoots. */\nexport function pathThrough(\n points: { x: number; y: number }[],\n curve: 'linear' | 'monotone' = 'linear',\n): string {\n if (points.length === 0) return '';\n const first = points[0] as { x: number; y: number };\n if (curve === 'linear' || points.length < 3)\n return `M${points.map((p) => `${p.x} ${p.y}`).join('L')}`;\n const n = points.length;\n const dx = points.slice(1).map((p, i) => p.x - (points[i] as { x: number }).x);\n const dy = points.slice(1).map((p, i) => p.y - (points[i] as { y: number }).y);\n const slope = dx.map((d, i) => (d === 0 ? 0 : (dy[i] as number) / d));\n const m: number[] = [slope[0] as number];\n for (let i = 1; i < n - 1; i++) {\n const a = slope[i - 1] as number;\n const b = slope[i] as number;\n m.push(a * b <= 0 ? 0 : (a + b) / 2);\n }\n m.push(slope[n - 2] as number);\n for (let i = 0; i < n - 1; i++) {\n const s = slope[i] as number;\n if (s === 0) {\n m[i] = 0;\n m[i + 1] = 0;\n continue;\n }\n const a = (m[i] as number) / s;\n const b = (m[i + 1] as number) / s;\n const h = Math.hypot(a, b);\n if (h > 3) {\n m[i] = (3 * a * s) / h;\n m[i + 1] = (3 * b * s) / h;\n }\n }\n let d = `M${first.x} ${first.y}`;\n for (let i = 0; i < n - 1; i++) {\n const p0 = points[i] as { x: number; y: number };\n const p1 = points[i + 1] as { x: number; y: number };\n const h = (dx[i] as number) / 3;\n d += `C${px(p0.x + h)} ${px(p0.y + h * (m[i] as number))} ${px(p1.x - h)} ${px(p1.y - h * (m[i + 1] as number))} ${p1.x} ${p1.y}`;\n }\n return d;\n}\n\n/** Ticks at powers of ten covering `[min, max]` (both > 0), with 2× and 5× steps when a decade or less. */\nexport function logTicks(min: number, max: number): number[] {\n const lo = Math.floor(Math.log10(min));\n const hi = Math.ceil(Math.log10(max));\n const steps = hi - lo <= 1 ? [1, 2, 5] : [1];\n const ticks: number[] = [];\n for (let k = lo; k <= hi; k++) for (const s of steps) ticks.push(round(s * 10 ** k));\n return ticks.filter((t) => t >= min / 1.0001 && t <= max * 1.0001);\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { CHART_COLORS, seriesColor } from './palette.js';\nimport { bandScale, formatValue, linearScale, logTicks, niceTicks, px } from './scale.js';\nimport type { Box, Canvas, ChartInput, Frame, LegendItem, Shape, Sized, Tick } from './types.js';\n\nexport const MARGIN = { top: 16, right: 16, bottom: 32, left: 48 } as const;\n\nexport function plotBox(\n width: number,\n height: number,\n margin: Record<'top' | 'right' | 'bottom' | 'left', number> = MARGIN,\n): Box {\n return {\n x: margin.left,\n y: margin.top,\n width: Math.max(0, width - margin.left - margin.right),\n height: Math.max(0, height - margin.top - margin.bottom),\n };\n}\n\nexport const size = (input: Sized, w = 600, h = 300) => ({\n width: input.width ?? w,\n height: input.height ?? h,\n});\n\nexport const LEGEND_HEIGHT = 20;\n\n/** Vertical room the legend row takes, to shift the plot down by. */\nexport const legendTop = (input: Sized): number => (input.legend ? LEGEND_HEIGHT : 0);\n\nconst CHAR = 6.5;\n\n/** One row of swatches and names along the top edge, wrapping when it runs out of width. */\nexport function legendShapes(items: LegendItem[], width: number): Shape[] {\n const shapes: Shape[] = [];\n let x = 8;\n let y = 10;\n for (const item of items) {\n const w = 18 + item.name.length * CHAR;\n if (x + w > width - 8 && x > 8) {\n x = 8;\n y += LEGEND_HEIGHT;\n }\n shapes.push(\n { kind: 'rect', part: 'legend-swatch', x, y: y - 5, width: 10, height: 10, fill: item.color },\n {\n kind: 'text',\n part: 'legend-label',\n x: x + 14,\n y,\n text: item.name,\n baseline: 'middle',\n fill: CHART_COLORS.label,\n },\n );\n x += w + 12;\n }\n return shapes;\n}\n\n/** The common tail of every layout: size, legend decorations and the tooltip switch. */\nexport function canvas(\n input: Sized,\n width: number,\n height: number,\n legend: LegendItem[] = [],\n): Canvas {\n return {\n width,\n height,\n tooltip: input.tooltip ?? true,\n shapes: input.legend ? legendShapes(legend, width) : [],\n };\n}\n\n/** A tooltip box next to the pointer, kept inside the canvas. */\nexport function tooltipShapes(\n x: number,\n y: number,\n text: string,\n width: number,\n height: number,\n): Shape[] {\n const w = text.length * CHAR + 12;\n const h = 22;\n const bx = Math.max(0, Math.min(width - w, x + 12));\n const by = Math.max(0, Math.min(height - h, y - h - 6));\n return [\n {\n kind: 'rect',\n part: 'tooltip',\n x: px(bx),\n y: px(by),\n width: px(w),\n height: h,\n fill: 'var(--skdx-color-surface-raised)',\n stroke: CHART_COLORS.axis,\n },\n {\n kind: 'text',\n part: 'tooltip-label',\n x: px(bx + 6),\n y: px(by + h / 2),\n text,\n baseline: 'middle',\n fill: 'var(--skdx-color-text-default)',\n },\n ];\n}\n\n/** `[min, max]` of the values, widened to include zero when asked; `[0, 0]` when empty. */\nexport function extent(values: number[], includeZero: boolean): readonly [number, number] {\n if (values.length === 0) return [0, 0];\n const min = Math.min(...values);\n const max = Math.max(...values);\n return includeZero ? [Math.min(0, min), Math.max(0, max)] : [min, max];\n}\n\n/** A nice-ticked linear axis over `[min, max]` mapped onto `range`. */\nexport function axis(\n [min, max]: readonly [number, number],\n range: readonly [number, number],\n log = false,\n) {\n if (log) {\n const lo = Math.max(min, Number.EPSILON);\n const ticks = logTicks(lo, Math.max(max, lo));\n const domain = [Math.log10(lo), Math.log10(Math.max(max, lo))] as const;\n const lin = linearScale(domain, range);\n const scale = (v: number) => lin(Math.log10(Math.max(v, Number.EPSILON)));\n return {\n scale,\n domain,\n ticks: ticks.map((v): Tick => ({ pos: px(scale(v)), label: formatValue(v) })),\n zero: px(range[0]),\n };\n }\n const ticks = niceTicks(min, max);\n const domain = [ticks[0] as number, ticks[ticks.length - 1] as number] as const;\n const scale = linearScale(domain, range);\n return {\n scale,\n domain,\n ticks: ticks.map((v): Tick => ({ pos: px(scale(v)), label: formatValue(v) })),\n /** Pixel position of zero, clamped into the domain. */\n zero: px(scale(Math.min(Math.max(0, domain[0]), domain[1]))),\n };\n}\n\nexport interface FrameScales {\n frame: Frame;\n x: ReturnType<typeof bandScale>;\n y: (value: number) => number;\n categories: string[];\n}\n\n/** Axes, ticks and scales shared by the category charts; `yExtent` is the y domain to cover. */\nexport function buildFrame(input: ChartInput, yExtent: readonly [number, number]): FrameScales {\n const { width, height } = size(input);\n const plot = plotBox(width, height, { ...MARGIN, top: MARGIN.top + legendTop(input) });\n const count = Math.max(input.categories?.length ?? 0, ...input.series.map((s) => s.data.length));\n const categories = Array.from(\n { length: count },\n (_, i) => input.categories?.[i] ?? String(i + 1),\n );\n const y = axis(yExtent, [plot.y + plot.height, plot.y]);\n const x = bandScale(count, [plot.x, plot.x + plot.width]);\n return {\n frame: {\n ...canvas(\n input,\n width,\n height,\n input.series.map((s, i) => ({ name: s.name, color: seriesColor(i, s.color) })),\n ),\n plot,\n xTicks: categories.map((label, i) => ({ pos: px(x.center(i)), label })),\n yTicks: y.ticks,\n baseline: y.zero,\n },\n x,\n y: y.scale,\n categories,\n };\n}\n\nexport const values = (input: ChartInput): number[] => input.series.flatMap((s) => s.data);\n\n/** Tooltip text for a value in a series: `Series, Category: 1,234`. */\nexport const markTitle = (series: string, category: string, value: number): string =>\n `${series}, ${category}: ${formatValue(value)}`;\n\n/**\n * Tooltip shapes for the mark under the pointer, or none. Reads the mark's\n * `<title>` and converts the pointer position into viewBox units.\n */\nexport function hoverTooltip(\n target: EventTarget | null,\n svg: Element,\n clientX: number,\n clientY: number,\n width: number,\n height: number,\n): Shape[] {\n const mark = (target as Element | null)?.closest?.('[data-skdx-part]');\n const title =\n mark && Array.from(mark.children).find((c) => c.tagName.toLowerCase() === 'title')?.textContent;\n if (!title) return [];\n const r = svg.getBoundingClientRect();\n const x = r.width ? ((clientX - r.left) * width) / r.width : clientX;\n const y = r.height ? ((clientY - r.top) * height) / r.height : clientY;\n return tooltipShapes(x, y, title, width, height);\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { CHART_COLORS } from './palette.js';\nimport type { Frame, Shape } from './types.js';\n\n/** Grid, axis line and tick labels of an axis frame, as shapes. */\nexport function frameShapes(frame: Frame): Shape[] {\n const { plot, xTicks, yTicks, baseline } = frame;\n const right = plot.x + plot.width;\n return [\n ...yTicks.map((t): Shape => ({\n kind: 'line',\n part: 'grid',\n x1: plot.x,\n x2: right,\n y1: t.pos,\n y2: t.pos,\n stroke: CHART_COLORS.grid,\n })),\n {\n kind: 'line',\n part: 'axis',\n x1: plot.x,\n x2: right,\n y1: baseline,\n y2: baseline,\n stroke: CHART_COLORS.axis,\n },\n ...yTicks.map((t): Shape => ({\n kind: 'text',\n part: 'y-label',\n x: plot.x - 8,\n y: t.pos,\n text: t.label,\n anchor: 'end',\n baseline: 'middle',\n fill: CHART_COLORS.label,\n })),\n ...xTicks.map((t): Shape => ({\n kind: 'text',\n part: 'x-label',\n x: t.pos,\n y: plot.y + plot.height + 20,\n text: t.label,\n anchor: 'middle',\n fill: CHART_COLORS.label,\n })),\n ];\n}\n\nexport const label = (\n x: number,\n y: number,\n text: string,\n extra: Partial<Extract<Shape, { kind: 'text' }>> = {},\n): Shape => ({\n kind: 'text',\n part: 'label',\n x,\n y,\n text,\n fill: CHART_COLORS.label,\n ...extra,\n});\n\n/** A dot with its native tooltip. */\nexport const point = (cx: number, cy: number, r: number, fill: string, title?: string): Shape => ({\n kind: 'circle',\n part: 'point',\n cx,\n cy,\n r,\n fill,\n title,\n});\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { buildFrame, extent, markTitle, values } from './frame.js';\nimport { seriesColor } from './palette.js';\nimport { px } from './scale.js';\nimport { frameShapes } from './shapes.js';\nimport type { BarChartInput, Canvas, Shape } from './types.js';\n\nexport function layoutBarChart(input: BarChartInput): Canvas {\n const yExtent = input.stacked ? stackedExtent(input) : extent(values(input), true);\n const { frame, x, y, categories } = buildFrame(input, yExtent);\n const bars: Shape[] = [];\n\n // Running stack tops per category, positives up and negatives down.\n const up = new Array<number>(categories.length).fill(0);\n const down = new Array<number>(categories.length).fill(0);\n const groupWidth = input.stacked ? x.bandwidth : x.bandwidth / Math.max(1, input.series.length);\n\n input.series.forEach((s, si) => {\n const color = seriesColor(si, s.color);\n categories.forEach((category, ci) => {\n const value = s.data[ci];\n if (value === undefined) return;\n let from = 0;\n let to = value;\n if (input.stacked) {\n const stack = value >= 0 ? up : down;\n from = stack[ci] as number;\n to = from + value;\n stack[ci] = to;\n }\n const y0 = y(from);\n const y1 = y(to);\n bars.push({\n kind: 'rect',\n part: 'bar',\n x: px(x.start(ci) + (input.stacked ? 0 : si * groupWidth)),\n y: px(Math.min(y0, y1)),\n width: px(groupWidth),\n height: px(Math.abs(y1 - y0)),\n fill: color,\n title: markTitle(s.name, category, value),\n });\n });\n });\n\n return { ...frame, shapes: [...frameShapes(frame), ...bars, ...frame.shapes] };\n}\n\nfunction stackedExtent(input: BarChartInput): readonly [number, number] {\n let min = 0;\n let max = 0;\n const count = Math.max(0, ...input.series.map((s) => s.data.length));\n for (let ci = 0; ci < count; ci++) {\n let up = 0;\n let down = 0;\n for (const s of input.series) {\n const v = s.data[ci] ?? 0;\n if (v >= 0) up += v;\n else down += v;\n }\n min = Math.min(min, down);\n max = Math.max(max, up);\n }\n return [min, max];\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { buildFrame, extent, markTitle, values, type FrameScales } from './frame.js';\nimport { seriesColor } from './palette.js';\nimport { pathThrough, px } from './scale.js';\nimport { frameShapes, point } from './shapes.js';\nimport type { AreaChartInput, Canvas, LineChartInput, Shape } from './types.js';\n\n/** A stroke per series and a dot per value; `close` turns a stroke into a filled area. */\nfunction polylines(input: LineChartInput, { frame, x, y, categories }: FrameScales, area: boolean) {\n const points: Shape[] = [];\n const lines: Shape[] = [];\n const areas: Shape[] = [];\n input.series.forEach((s, si) => {\n const color = seriesColor(si, s.color);\n const coords = s.data.map((value, ci) => {\n const p = { x: px(x.center(ci)), y: px(y(value)) };\n points.push(point(p.x, p.y, 3, color, markTitle(s.name, categories[ci] as string, value)));\n return p;\n });\n const d = pathThrough(coords, input.curve);\n lines.push({\n kind: 'path',\n part: 'line',\n d,\n stroke: color,\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n });\n if (area) {\n const first = coords[0];\n const last = coords[coords.length - 1];\n areas.push({\n kind: 'path',\n part: 'area',\n d:\n d && first && last\n ? `${d}L${last.x} ${frame.baseline}L${first.x} ${frame.baseline}Z`\n : '',\n fill: color,\n fillOpacity: 0.25,\n });\n }\n });\n return {\n ...frame,\n shapes: [...frameShapes(frame), ...areas, ...lines, ...points, ...frame.shapes],\n };\n}\n\nexport function layoutLineChart(input: LineChartInput): Canvas {\n return polylines(input, buildFrame(input, extent(values(input), false)), false);\n}\n\nexport function layoutAreaChart(input: AreaChartInput): Canvas {\n return polylines(input, buildFrame(input, extent(values(input), true)), true);\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { axis, canvas, extent, legendTop, MARGIN, plotBox, size } from './frame.js';\nimport { seriesColor } from './palette.js';\nimport { formatValue, px } from './scale.js';\nimport { frameShapes, point } from './shapes.js';\nimport type { Canvas, ScatterChartInput } from './types.js';\n\nexport function layoutScatterChart(input: ScatterChartInput): Canvas {\n const { width, height } = size(input);\n const plot = plotBox(width, height, { ...MARGIN, top: MARGIN.top + legendTop(input) });\n const pairs = input.series.flatMap((s) => s.data);\n const x = axis(\n extent(\n pairs.map((p) => p[0]),\n false,\n ),\n [plot.x, plot.x + plot.width],\n );\n const y = axis(\n extent(\n pairs.map((p) => p[1]),\n false,\n ),\n [plot.y + plot.height, plot.y],\n );\n const legend = input.series.map((s, i) => ({ name: s.name, color: seriesColor(i, s.color) }));\n const c = canvas(input, width, height, legend);\n const points = input.series.flatMap((s, si) => {\n const color = seriesColor(si, s.color);\n return s.data.map(([vx, vy]) =>\n point(\n px(x.scale(vx)),\n px(y.scale(vy)),\n 3,\n color,\n `${s.name}: ${formatValue(vx)}, ${formatValue(vy)}`,\n ),\n );\n });\n const frame = { ...c, plot, xTicks: x.ticks, yTicks: y.ticks, baseline: y.zero };\n return { ...c, shapes: [...frameShapes(frame), ...points, ...c.shapes] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { canvas, legendTop, size } from './frame.js';\nimport { seriesColor } from './palette.js';\nimport { formatValue, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { Canvas, PieChartInput, Shape } from './types.js';\n\nconst TAU = 2 * Math.PI;\n\n/** Wedge (or ring segment when `r0 > 0`) from angle `a0` to `a1`, clockwise from 12 o'clock. */\nexport function arc(cx: number, cy: number, r: number, r0: number, a0: number, a1: number): string {\n const at = (radius: number, a: number) =>\n `${px(cx + radius * Math.sin(a))} ${px(cy - radius * Math.cos(a))}`;\n // A full circle has coincident endpoints, which an arc command cannot draw: split it in two.\n if (a1 - a0 >= TAU - 1e-9) {\n const half = a0 + TAU / 2;\n return `${arc(cx, cy, r, r0, a0, half)}${arc(cx, cy, r, r0, half, a1)}`;\n }\n const large = a1 - a0 > Math.PI ? 1 : 0;\n const outer = `M${at(r, a0)}A${r} ${r} 0 ${large} 1 ${at(r, a1)}`;\n return r0 > 0\n ? `${outer}L${at(r0, a1)}A${r0} ${r0} 0 ${large} 0 ${at(r0, a0)}Z`\n : `${outer}L${px(cx)} ${px(cy)}Z`;\n}\n\nexport function layoutPieChart(input: PieChartInput): Canvas {\n const { width, height } = size(input, 300, 300);\n const top = legendTop(input);\n const cx = width / 2;\n const cy = top + (height - top) / 2;\n const r = Math.max(0, Math.min(width, height - top) / 2 - 8);\n const r0 = r * Math.min(0.95, Math.max(0, input.innerRadius ?? 0));\n const total = input.data.reduce((sum, d) => sum + Math.max(0, d.value), 0);\n let angle = 0;\n const labels: Shape[] = [];\n const slices = input.data.map((d, i): Shape => {\n const percent = total > 0 ? Math.max(0, d.value) / total : 0;\n const a0 = angle;\n angle += percent * TAU;\n if (input.labels && percent > 0.03) {\n const mid = (a0 + angle) / 2;\n const lr = (r + r0) / 2;\n labels.push(\n label(\n px(cx + lr * Math.sin(mid)),\n px(cy - lr * Math.cos(mid)),\n `${d.name} ${Math.round(percent * 100)}%`,\n {\n part: 'slice-label',\n anchor: 'middle',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-on-accent)',\n },\n ),\n );\n }\n return {\n kind: 'path',\n part: 'slice',\n d: percent > 0 ? arc(cx, cy, r, r0, a0, angle) : '',\n fill: seriesColor(i, d.color),\n title: `${d.name}: ${formatValue(d.value)} (${Math.round(percent * 100)}%)`,\n };\n });\n const c = canvas(\n input,\n width,\n height,\n input.data.map((d, i) => ({ name: d.name, color: seriesColor(i, d.color) })),\n );\n return { ...c, shapes: [...slices, ...c.shapes, ...labels] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { extent, size } from './frame.js';\nimport { seriesColor } from './palette.js';\nimport { linearScale, pathThrough, px } from './scale.js';\nimport { point } from './shapes.js';\nimport type { Canvas, SparklineInput } from './types.js';\n\nconst PAD = 2;\n\nexport function layoutSparkline(input: SparklineInput): Canvas {\n const { width, height } = size(input, 120, 32);\n const n = input.data.length;\n const y = linearScale(extent(input.data, false), [height - PAD, PAD]);\n const x = (i: number) => (n < 2 ? width / 2 : PAD + (i / (n - 1)) * (width - 2 * PAD));\n const coords = input.data.map((v, i) => ({ x: px(x(i)), y: px(y(v)) }));\n const line = pathThrough(coords, input.curve);\n const last = coords[coords.length - 1];\n const first = coords[0];\n const color = seriesColor(0, input.color);\n return {\n width,\n height,\n tooltip: input.tooltip ?? true,\n shapes: [\n {\n kind: 'path',\n part: 'area',\n d:\n line && first && last\n ? `${line}L${last.x} ${height - PAD}L${first.x} ${height - PAD}Z`\n : '',\n fill: color,\n fillOpacity: 0.15,\n },\n { kind: 'path', part: 'line', d: line, stroke: color, strokeWidth: 1.5 },\n // The most recent point, drawn as a dot.\n ...(last ? [point(last.x, last.y, 2, color)] : []),\n ],\n };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { canvas, legendTop, markTitle, size } from './frame.js';\nimport { CHART_COLORS, seriesColor } from './palette.js';\nimport { formatValue, niceTicks, px } from './scale.js';\nimport { label, point } from './shapes.js';\nimport type { Canvas, RadarChartInput, Shape } from './types.js';\n\nexport function layoutRadarChart(input: RadarChartInput): Canvas {\n const { width, height } = size(input, 300, 300);\n const top = legendTop(input);\n const cx = width / 2;\n const cy = top + (height - top) / 2;\n const radius = Math.max(0, Math.min(width, height - top) / 2 - 36);\n const n = input.categories.length;\n const angle = (i: number) => -Math.PI / 2 + (i * 2 * Math.PI) / Math.max(1, n);\n // Normalized: every series is scaled to its own maximum and the rings read as percentages.\n const ticks = input.normalize\n ? [0, 25, 50, 75, 100]\n : niceTicks(0, Math.max(0, ...input.series.flatMap((s) => s.data)), 4);\n const max = ticks[ticks.length - 1] as number;\n const seriesMax = input.series.map((s) => Math.max(0, ...s.data));\n const norm = (si: number, v: number) =>\n input.normalize\n ? (seriesMax[si] as number) > 0\n ? (v / (seriesMax[si] as number)) * 100\n : 0\n : v;\n const at = (i: number, value: number) => {\n const r = max > 0 ? (value / max) * radius : 0;\n return { x: px(cx + r * Math.cos(angle(i))), y: px(cy + r * Math.sin(angle(i))) };\n };\n const polygon = (value: (i: number) => number) =>\n n === 0\n ? ''\n : `M${input.categories\n .map((_, i) => {\n const p = at(i, value(i));\n return `${p.x} ${p.y}`;\n })\n .join('L')}Z`;\n\n // Concentric grid polygons, one per tick, innermost first, then a spoke per category.\n const rings = ticks.filter((t) => t > 0);\n const grid: Shape[] = [\n ...rings.map((t): Shape => ({\n kind: 'path',\n part: 'grid',\n d: polygon(() => t),\n stroke: CHART_COLORS.grid,\n })),\n ...input.categories.map((_, i): Shape => {\n const p = at(i, max);\n return {\n kind: 'line',\n part: 'grid',\n x1: px(cx),\n y1: px(cy),\n x2: p.x,\n y2: p.y,\n stroke: CHART_COLORS.grid,\n };\n }),\n ...rings.map((t) =>\n label(px(cx + 4), at(0, t).y, input.normalize ? `${t}%` : formatValue(t), {\n part: 'y-label',\n baseline: 'middle',\n }),\n ),\n ...input.categories.map((text, i) => {\n const cos = Math.cos(angle(i));\n const r = radius + 14;\n return label(px(cx + r * cos), px(cy + r * Math.sin(angle(i))), text, {\n part: 'x-label',\n anchor: cos > 0.1 ? 'start' : cos < -0.1 ? 'end' : 'middle',\n baseline: 'middle',\n });\n }),\n ];\n\n const points: Shape[] = [];\n const polygons = input.series.map((s, si): Shape => {\n const color = seriesColor(si, s.color);\n input.categories.forEach((category, i) => {\n const value = s.data[i] ?? 0;\n const p = at(i, norm(si, value));\n points.push(point(p.x, p.y, 3, color, markTitle(s.name, category, value)));\n });\n return {\n kind: 'path',\n part: 'area',\n d: polygon((i) => norm(si, s.data[i] ?? 0)),\n fill: color,\n fillOpacity: 0.25,\n stroke: color,\n strokeWidth: 2,\n };\n });\n\n const c = canvas(\n input,\n width,\n height,\n input.series.map((s, i) => ({ name: s.name, color: seriesColor(i, s.color) })),\n );\n return { ...c, shapes: [...grid, ...polygons, ...points, ...c.shapes] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { canvas, plotBox, size } from './frame.js';\nimport { seriesColor } from './palette.js';\nimport { formatValue, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { Canvas, HeatmapInput, Shape } from './types.js';\n\nconst MARGIN = { top: 24, right: 8, bottom: 8, left: 64 } as const;\n\nexport function layoutHeatmap(input: HeatmapInput): Canvas {\n const { width, height } = size(input);\n const plot = plotBox(width, height, MARGIN);\n const cellW = plot.width / Math.max(1, input.columns.length);\n const cellH = plot.height / Math.max(1, input.rows.length);\n const all = input.data.flat();\n const min = Math.min(...all);\n const max = Math.max(...all);\n const color = seriesColor(0, input.color);\n const negative = input.negativeColor ?? 'var(--skdx-color-danger-500)';\n const span = Math.max(Math.abs(min), Math.abs(max));\n // Diverging: opacity is the distance from zero, color the sign.\n // Otherwise 0.15..1, the value's place between the smallest and largest cell.\n const opacity = (v: number) =>\n input.diverging\n ? span === 0\n ? 1\n : px(0.15 + (0.85 * Math.abs(v)) / span)\n : max === min\n ? 1\n : px(0.15 + (0.85 * (v - min)) / (max - min));\n const cells: Shape[] = [];\n input.rows.forEach((row, ri) => {\n input.columns.forEach((column, ci) => {\n const value = input.data[ri]?.[ci];\n if (value === undefined) return;\n cells.push({\n kind: 'rect',\n part: 'cell',\n x: px(plot.x + ci * cellW),\n y: px(plot.y + ri * cellH),\n width: px(cellW),\n height: px(cellH),\n fill: input.diverging && value < 0 ? negative : color,\n opacity: opacity(value),\n title: `${row}, ${column}: ${formatValue(value)}`,\n });\n });\n });\n const c = canvas(input, width, height);\n return {\n ...c,\n shapes: [\n ...input.rows.map((text, i) =>\n label(plot.x - 8, px(plot.y + (i + 0.5) * cellH), text, {\n part: 'y-label',\n anchor: 'end',\n baseline: 'middle',\n }),\n ),\n ...input.columns.map((text, i) =>\n label(px(plot.x + (i + 0.5) * cellW), plot.y - 8, text, {\n part: 'x-label',\n anchor: 'middle',\n }),\n ),\n ...cells,\n ...c.shapes,\n ],\n };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { canvas, legendTop, size } from './frame.js';\nimport { seriesColor } from './palette.js';\nimport { formatValue, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { Canvas, FunnelChartInput, Shape } from './types.js';\n\nconst PAD = 8;\nconst GAP = 4;\n\nexport function layoutFunnelChart(input: FunnelChartInput): Canvas {\n const { width, height } = size(input, 400, 300);\n const n = input.data.length;\n const max = Math.max(0, ...input.data.map((d) => d.value));\n const first = input.data[0]?.value ?? 0;\n const full = Math.max(0, width - 2 * PAD);\n const offset = legendTop(input);\n const stageH = n === 0 ? 0 : (height - offset - 2 * PAD) / n;\n const widthOf = (value: number) => (max > 0 ? (Math.max(0, value) / max) * full : 0);\n const legend = input.data.map((d, i) => ({ name: d.name, color: seriesColor(i, d.color) }));\n const stages = input.data.flatMap((d, i): Shape[] => {\n const top = widthOf(d.value);\n const bottom = widthOf(input.data[i + 1]?.value ?? d.value);\n const y0 = offset + PAD + i * stageH;\n const y1 = y0 + stageH - GAP;\n const cx = width / 2;\n const percent = first > 0 ? d.value / first : 0;\n return [\n {\n kind: 'path',\n part: 'stage',\n d: `M${px(cx - top / 2)} ${px(y0)}L${px(cx + top / 2)} ${px(y0)}L${px(cx + bottom / 2)} ${px(y1)}L${px(cx - bottom / 2)} ${px(y1)}Z`,\n fill: seriesColor(i, d.color),\n title: `${d.name}: ${formatValue(d.value)} (${Math.round(percent * 100)}%)`,\n },\n label(px(cx), px((y0 + y1) / 2), `${d.name} · ${formatValue(d.value)}`, {\n part: 'stage-label',\n anchor: 'middle',\n baseline: 'middle',\n fill: 'var(--skdx-color-text-on-accent)',\n }),\n ];\n });\n const c = canvas(input, width, height, legend);\n return { ...c, shapes: [...stages, ...c.shapes] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { canvas, legendTop, plotBox, size } from './frame.js';\nimport { seriesColor } from './palette.js';\nimport { formatValue, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { SankeyInput, Shape, Canvas } from './types.js';\n\nconst NODE_WIDTH = 16;\nconst NODE_PAD = 8;\n\ninterface Node {\n name: string;\n depth: number;\n value: number;\n color: string;\n x: number;\n y: number;\n height: number;\n /** Running offsets for the ribbons leaving and entering. */\n outY: number;\n inY: number;\n}\n\nexport function layoutSankey(input: SankeyInput): Canvas {\n const { width, height } = size(input);\n const plot = plotBox(width, height, { top: 8 + legendTop(input), right: 96, bottom: 8, left: 8 });\n const nodes = new Map<string, Node>();\n const node = (name: string) => {\n let n = nodes.get(name);\n if (!n) {\n n = {\n name,\n depth: 0,\n value: 0,\n color: seriesColor(nodes.size),\n x: 0,\n y: 0,\n height: 0,\n outY: 0,\n inY: 0,\n };\n nodes.set(name, n);\n }\n return n;\n };\n const links = dropBackEdges(input.links.filter((l) => l.value > 0 && l.source !== l.target));\n for (const l of links) {\n node(l.source);\n node(l.target);\n }\n // Depth = longest path from a source; the graph is acyclic after dropBackEdges.\n for (let pass = 0, changed = true; changed && pass <= nodes.size; pass++) {\n changed = false;\n for (const l of links) {\n const d = node(l.source).depth + 1;\n if (d > node(l.target).depth) {\n node(l.target).depth = d;\n changed = true;\n }\n }\n }\n const outSum = new Map<string, number>();\n const inSum = new Map<string, number>();\n for (const l of links) {\n outSum.set(l.source, (outSum.get(l.source) ?? 0) + l.value);\n inSum.set(l.target, (inSum.get(l.target) ?? 0) + l.value);\n }\n for (const n of nodes.values())\n n.value = Math.max(outSum.get(n.name) ?? 0, inSum.get(n.name) ?? 0);\n\n const columns = new Map<number, Node[]>();\n for (const n of nodes.values()) columns.set(n.depth, [...(columns.get(n.depth) ?? []), n]);\n const depths = Math.max(0, ...columns.keys());\n const scale = Math.min(\n ...[...columns.values()].map(\n (col) => (plot.height - NODE_PAD * (col.length - 1)) / col.reduce((s, n) => s + n.value, 0),\n ),\n );\n for (const [depth, col] of columns) {\n let y = plot.y;\n for (const n of col) {\n n.x = plot.x + (depths === 0 ? 0 : (depth * (plot.width - NODE_WIDTH)) / depths);\n n.y = y;\n n.height = n.value * scale;\n n.outY = n.inY = y;\n y += n.height + NODE_PAD;\n }\n }\n\n const shapes: Shape[] = [];\n for (const l of links) {\n const s = node(l.source);\n const t = node(l.target);\n const h = l.value * scale;\n const x0 = s.x + NODE_WIDTH;\n const x1 = t.x;\n const mx = (x0 + x1) / 2;\n const sy = s.outY;\n const ty = t.inY;\n s.outY += h;\n t.inY += h;\n shapes.push({\n kind: 'path',\n part: 'link',\n d: `M${px(x0)} ${px(sy)}C${px(mx)} ${px(sy)} ${px(mx)} ${px(ty)} ${px(x1)} ${px(ty)}L${px(x1)} ${px(ty + h)}C${px(mx)} ${px(ty + h)} ${px(mx)} ${px(sy + h)} ${px(x0)} ${px(sy + h)}Z`,\n fill: s.color,\n opacity: 0.4,\n title: `${l.source} → ${l.target}: ${formatValue(l.value)}`,\n });\n }\n for (const n of nodes.values()) {\n shapes.push({\n kind: 'rect',\n part: 'node',\n x: px(n.x),\n y: px(n.y),\n width: NODE_WIDTH,\n height: px(n.height),\n fill: n.color,\n title: `${n.name}: ${formatValue(n.value)}`,\n });\n const last = n.depth === depths;\n shapes.push(\n label(px(last ? n.x - 6 : n.x + NODE_WIDTH + 6), px(n.y + n.height / 2), n.name, {\n anchor: last ? 'end' : 'start',\n baseline: 'middle',\n }),\n );\n }\n return { ...canvas(input, width, height), shapes };\n}\n\n/** Removes the links that close a cycle (depth-first back edges), so every remaining path terminates. */\nfunction dropBackEdges(links: SankeyInput['links']): SankeyInput['links'] {\n const out = new Map<string, SankeyInput['links']>();\n for (const l of links) out.set(l.source, [...(out.get(l.source) ?? []), l]);\n const state = new Map<string, 'active' | 'done'>();\n const back = new Set<SankeyInput['links'][number]>();\n const visit = (name: string) => {\n state.set(name, 'active');\n for (const l of out.get(name) ?? []) {\n const s = state.get(l.target);\n if (s === 'active') back.add(l);\n else if (s === undefined) visit(l.target);\n }\n state.set(name, 'done');\n };\n for (const l of links) if (!state.has(l.source)) visit(l.source);\n return links.filter((l) => !back.has(l));\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { canvas, legendTop, size } from './frame.js';\nimport { seriesColor } from './palette.js';\nimport { formatValue, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { Shape, Canvas, TreeNode, TreemapInput } from './types.js';\n\ninterface Tile {\n node: TreeNode;\n value: number;\n color: string;\n area: number;\n}\n\nconst nodeValue = (n: TreeNode): number =>\n n.value ?? (n.children ?? []).reduce((s, c) => s + nodeValue(c), 0);\n\n/** Squarified treemap (Bruls, Huizing, van Wijk): rows of tiles kept as close to square as possible. */\nfunction squarify(\n items: Tile[],\n x: number,\n y: number,\n w: number,\n h: number,\n out: (t: Tile, box: [number, number, number, number]) => void,\n) {\n if (items.length === 0) return;\n const worst = (row: Tile[], side: number) => {\n const sum = row.reduce((s, t) => s + t.area, 0);\n const max = Math.max(...row.map((t) => t.area));\n const min = Math.min(...row.map((t) => t.area));\n return Math.max((side * side * max) / (sum * sum), (sum * sum) / (side * side * min));\n };\n const side = Math.min(w, h);\n let row: Tile[] = [];\n let i = 0;\n while (i < items.length) {\n const next = [...row, items[i] as Tile];\n if (row.length === 0 || worst(next, side) <= worst(row, side)) {\n row = next;\n i++;\n } else break;\n }\n const sum = row.reduce((s, t) => s + t.area, 0);\n if (w >= h) {\n const rowW = sum / h;\n let ry = y;\n for (const t of row) {\n const th = t.area / rowW;\n out(t, [x, ry, rowW, th]);\n ry += th;\n }\n squarify(items.slice(i), x + rowW, y, w - rowW, h, out);\n } else {\n const rowH = sum / w;\n let rx = x;\n for (const t of row) {\n const tw = t.area / rowH;\n out(t, [rx, y, tw, rowH]);\n rx += tw;\n }\n squarify(items.slice(i), x, y + rowH, w, h - rowH, out);\n }\n}\n\nexport function layoutTreemap(input: TreemapInput): Canvas {\n const { width, height } = size(input);\n const top = legendTop(input);\n const shapes: Shape[] = [];\n const legend = input.data.map((n, i) => ({ name: n.name, color: seriesColor(i, n.color) }));\n // Branches are outlined and their children tiled inside a 2px inset; leaves are filled.\n const tile = (\n nodes: TreeNode[],\n x: number,\n y: number,\n w: number,\n h: number,\n inherited: string | undefined,\n ) => {\n const total = nodes.reduce((s, n) => s + Math.max(0, nodeValue(n)), 0);\n const tiles = nodes\n .map((node, i) => ({\n node,\n value: nodeValue(node),\n color: node.color ?? inherited ?? seriesColor(i),\n area: total > 0 ? (Math.max(0, nodeValue(node)) / total) * w * h : 0,\n }))\n .filter((t) => t.area > 0)\n .sort((a, b) => b.area - a.area);\n squarify(tiles, x, y, w, h, (t, [tx, ty, tw, th]) => {\n const title = `${t.node.name}: ${formatValue(t.value)}`;\n const branch = (t.node.children?.length ?? 0) > 0;\n shapes.push({\n kind: 'rect',\n part: branch ? 'branch' : 'tile',\n x: px(tx),\n y: px(ty),\n width: px(tw),\n height: px(th),\n fill: t.color,\n opacity: branch ? 0.15 : undefined,\n stroke: 'var(--skdx-color-surface-default)',\n title,\n });\n if (branch)\n tile(\n t.node.children as TreeNode[],\n tx + 2,\n ty + 2,\n Math.max(0, tw - 4),\n Math.max(0, th - 4),\n t.color,\n );\n else if (tw > 40 && th > 20)\n shapes.push(\n label(px(tx + 6), px(ty + 6), t.node.name, {\n baseline: 'hanging',\n fill: 'var(--skdx-color-text-on-accent)',\n }),\n );\n });\n };\n tile(input.data, 0, top, width, height - top, undefined);\n const c = canvas(input, width, height, legend);\n return { ...c, shapes: [...shapes, ...c.shapes] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { axis, canvas, extent, legendTop, MARGIN, plotBox, size } from './frame.js';\nimport { bandScale, formatValue, px } from './scale.js';\nimport { frameShapes } from './shapes.js';\nimport type { CandlestickInput, Shape, Canvas } from './types.js';\n\nconst UP = 'var(--skdx-color-success-500)';\nconst DOWN = 'var(--skdx-color-danger-500)';\n\nexport function layoutCandlestick(input: CandlestickInput): Canvas {\n const { width, height } = size(input);\n const plot = plotBox(width, height, { ...MARGIN, top: MARGIN.top + legendTop(input) });\n const y = axis(\n extent(\n input.data.flatMap((c) => [c.low, c.high]),\n false,\n ),\n [plot.y + plot.height, plot.y],\n input.scale === 'log',\n );\n const x = bandScale(input.data.length, [plot.x, plot.x + plot.width]);\n const legend = [\n { name: 'Up', color: UP },\n { name: 'Down', color: DOWN },\n ];\n const c = canvas(input, width, height, legend);\n const frame = {\n ...c,\n plot,\n xTicks: input.data.map((c, i) => ({ pos: px(x.center(i)), label: c.label })),\n yTicks: y.ticks,\n baseline: plot.y + plot.height,\n };\n const shapes: Shape[] = frameShapes(frame);\n input.data.forEach((c, i) => {\n const color = c.close >= c.open ? UP : DOWN;\n const title = `${c.label}: O ${formatValue(c.open)} H ${formatValue(c.high)} L ${formatValue(c.low)} C ${formatValue(c.close)}`;\n const top = y.scale(Math.max(c.open, c.close));\n const bottom = y.scale(Math.min(c.open, c.close));\n shapes.push(\n {\n kind: 'line',\n part: 'wick',\n x1: px(x.center(i)),\n x2: px(x.center(i)),\n y1: px(y.scale(c.high)),\n y2: px(y.scale(c.low)),\n stroke: color,\n title,\n },\n {\n kind: 'rect',\n part: 'candle',\n x: px(x.start(i)),\n y: px(top),\n width: px(x.bandwidth),\n height: px(Math.max(1, bottom - top)),\n fill: color,\n title,\n },\n );\n });\n return { ...c, shapes: [...shapes, ...c.shapes] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { axis, canvas, legendTop, MARGIN, plotBox, size } from './frame.js';\nimport { bandScale, formatValue, px } from './scale.js';\nimport { frameShapes } from './shapes.js';\nimport { CHART_COLORS, seriesColor } from './palette.js';\nimport type { Shape, Canvas, WaterfallInput } from './types.js';\n\nconst UP = 'var(--skdx-color-success-500)';\nconst DOWN = 'var(--skdx-color-danger-500)';\n\nexport function layoutWaterfall(input: WaterfallInput): Canvas {\n const { width, height } = size(input);\n const plot = plotBox(width, height, { ...MARGIN, top: MARGIN.top + legendTop(input) });\n const steps: { name: string; from: number; to: number; color: string; title: string }[] = [];\n let running = 0;\n for (const d of input.data) {\n const from = running;\n running += d.value;\n steps.push({\n name: d.name,\n from,\n to: running,\n color: d.color ?? (d.value >= 0 ? UP : DOWN),\n title: `${d.name}: ${d.value >= 0 ? '+' : ''}${formatValue(d.value)}`,\n });\n }\n if (input.total !== undefined)\n steps.push({\n name: input.total,\n from: 0,\n to: running,\n color: seriesColor(0),\n title: `${input.total}: ${formatValue(running)}`,\n });\n const totals = steps.flatMap((s) => [s.from, s.to]);\n const y = axis([Math.min(0, ...totals), Math.max(0, ...totals)], [plot.y + plot.height, plot.y]);\n const x = bandScale(steps.length, [plot.x, plot.x + plot.width]);\n const c = canvas(input, width, height, [\n { name: 'Increase', color: UP },\n { name: 'Decrease', color: DOWN },\n ]);\n const shapes: Shape[] = frameShapes({\n ...c,\n plot,\n xTicks: steps.map((s, i) => ({ pos: px(x.center(i)), label: s.name })),\n yTicks: y.ticks,\n baseline: y.zero,\n });\n steps.forEach((s, i) => {\n const y0 = y.scale(s.from);\n const y1 = y.scale(s.to);\n shapes.push({\n kind: 'rect',\n part: 'bar',\n x: px(x.start(i)),\n y: px(Math.min(y0, y1)),\n width: px(x.bandwidth),\n height: px(Math.max(1, Math.abs(y1 - y0))),\n fill: s.color,\n title: s.title,\n });\n const next = steps[i + 1];\n if (next)\n shapes.push({\n kind: 'line',\n part: 'connector',\n x1: px(x.start(i) + x.bandwidth),\n x2: px(x.start(i + 1)),\n y1: px(y1),\n y2: px(y.scale(next.from)),\n stroke: CHART_COLORS.axis,\n dash: '4 3',\n });\n });\n return { ...c, shapes: [...shapes, ...c.shapes] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { axis, canvas, legendTop, plotBox, size } from './frame.js';\nimport { CHART_COLORS, seriesColor } from './palette.js';\nimport { bandScale, formatValue, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { GanttInput, Shape, Canvas } from './types.js';\n\nexport function layoutGantt(input: GanttInput): Canvas {\n const { width, height } = size(input);\n const plot = plotBox(width, height, {\n top: 8 + legendTop(input),\n right: 16,\n bottom: 32,\n left: 112,\n });\n const format = input.format ?? formatValue;\n const times = input.tasks.flatMap((t) => [t.start, t.end]);\n const x = axis(times.length ? [Math.min(...times), Math.max(...times)] : [0, 0], [\n plot.x,\n plot.x + plot.width,\n ]);\n const rows = bandScale(input.tasks.length, [plot.y, plot.y + plot.height]);\n const shapes: Shape[] = [];\n const ticks = x.ticks.map((t) => ({ ...t, label: format(Number(t.label.replace(/,/g, ''))) }));\n for (const t of ticks) {\n shapes.push({\n kind: 'line',\n part: 'grid',\n x1: t.pos,\n x2: t.pos,\n y1: plot.y,\n y2: plot.y + plot.height,\n stroke: CHART_COLORS.grid,\n });\n shapes.push(\n label(t.pos, plot.y + plot.height + 20, t.label, { part: 'x-label', anchor: 'middle' }),\n );\n }\n input.tasks.forEach((t, i) => {\n const x0 = x.scale(Math.min(t.start, t.end));\n const x1 = x.scale(Math.max(t.start, t.end));\n shapes.push(\n label(plot.x - 8, px(rows.center(i)), t.name, {\n part: 'y-label',\n anchor: 'end',\n baseline: 'middle',\n }),\n );\n shapes.push({\n kind: 'rect',\n part: 'bar',\n x: px(x0),\n y: px(rows.start(i)),\n width: px(Math.max(1, x1 - x0)),\n height: px(rows.bandwidth),\n fill: seriesColor(i, t.color),\n title: `${t.name}: ${format(t.start)} – ${format(t.end)}`,\n });\n });\n const c = canvas(\n input,\n width,\n height,\n input.tasks.map((t, i) => ({ name: t.name, color: seriesColor(i, t.color) })),\n );\n return { ...c, shapes: [...shapes, ...c.shapes] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { axis, canvas, extent, legendTop, MARGIN, plotBox, size } from './frame.js';\nimport { seriesColor } from './palette.js';\nimport { bandScale, formatValue, px } from './scale.js';\nimport { frameShapes } from './shapes.js';\nimport type { BoxplotInput, Shape, Canvas } from './types.js';\n\n/** Linear-interpolated quantile of a sorted sample. */\nconst quantile = (sorted: number[], q: number): number => {\n if (sorted.length === 0) return 0;\n const pos = (sorted.length - 1) * q;\n const lo = Math.floor(pos);\n const hi = Math.ceil(pos);\n const a = sorted[lo] as number;\n const b = sorted[hi] as number;\n return a + (b - a) * (pos - lo);\n};\n\n/** Five-number summary with Tukey fences: whiskers reach the last sample within 1.5 IQR. */\nexport function boxStats(data: number[]) {\n const sorted = [...data].sort((a, b) => a - b);\n const q1 = quantile(sorted, 0.25);\n const median = quantile(sorted, 0.5);\n const q3 = quantile(sorted, 0.75);\n const iqr = q3 - q1;\n const inside = sorted.filter((v) => v >= q1 - 1.5 * iqr && v <= q3 + 1.5 * iqr);\n return {\n q1,\n median,\n q3,\n low: inside[0] ?? q1,\n high: inside[inside.length - 1] ?? q3,\n outliers: sorted.filter((v) => v < q1 - 1.5 * iqr || v > q3 + 1.5 * iqr),\n };\n}\n\nexport function layoutBoxplot(input: BoxplotInput): Canvas {\n const { width, height } = size(input);\n const plot = plotBox(width, height, { ...MARGIN, top: MARGIN.top + legendTop(input) });\n const y = axis(\n extent(\n input.series.flatMap((s) => s.data),\n false,\n ),\n [plot.y + plot.height, plot.y],\n );\n const x = bandScale(input.series.length, [plot.x, plot.x + plot.width]);\n const c = canvas(\n input,\n width,\n height,\n input.series.map((s, i) => ({ name: s.name, color: seriesColor(i, s.color) })),\n );\n const shapes: Shape[] = frameShapes({\n ...c,\n plot,\n xTicks: input.series.map((s, i) => ({ pos: px(x.center(i)), label: s.name })),\n yTicks: y.ticks,\n baseline: plot.y + plot.height,\n });\n input.series.forEach((s, i) => {\n const st = boxStats(s.data);\n const color = seriesColor(i, s.color);\n const cx = px(x.center(i));\n const title = `${s.name}: min ${formatValue(st.low)} Q1 ${formatValue(st.q1)} median ${formatValue(st.median)} Q3 ${formatValue(st.q3)} max ${formatValue(st.high)}`;\n const boxW = x.bandwidth * 0.6;\n const bx = px(x.center(i) - boxW / 2);\n shapes.push(\n {\n kind: 'line',\n part: 'whisker',\n x1: cx,\n x2: cx,\n y1: px(y.scale(st.high)),\n y2: px(y.scale(st.low)),\n stroke: color,\n title,\n },\n {\n kind: 'rect',\n part: 'box',\n x: bx,\n y: px(y.scale(st.q3)),\n width: px(boxW),\n height: px(Math.max(1, y.scale(st.q1) - y.scale(st.q3))),\n fill: color,\n stroke: color,\n opacity: 0.5,\n title,\n },\n {\n kind: 'line',\n part: 'median',\n x1: bx,\n x2: px(bx + boxW),\n y1: px(y.scale(st.median)),\n y2: px(y.scale(st.median)),\n stroke: color,\n title,\n },\n ...st.outliers.map((v): Shape => ({\n kind: 'circle',\n part: 'outlier',\n cx,\n cy: px(y.scale(v)),\n r: 3,\n fill: color,\n title: `${s.name}: ${formatValue(v)}`,\n })),\n );\n });\n return { ...c, shapes: [...shapes, ...c.shapes] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { canvas, legendTop, size } from './frame.js';\nimport { seriesColor } from './palette.js';\nimport { arc } from './pie.js';\nimport { formatValue } from './scale.js';\nimport type { Shape, Canvas, SunburstInput, TreeNode } from './types.js';\n\nconst TAU = 2 * Math.PI;\n\nconst nodeValue = (n: TreeNode): number =>\n n.value ?? (n.children ?? []).reduce((s, c) => s + nodeValue(c), 0);\nconst depthOf = (nodes: TreeNode[]): number =>\n nodes.length === 0 ? 0 : 1 + Math.max(...nodes.map((n) => depthOf(n.children ?? [])));\n\nexport function layoutSunburst(input: SunburstInput): Canvas {\n const { width, height } = size(input, 300, 300);\n const top = legendTop(input);\n const cx = width / 2;\n const cy = top + (height - top) / 2;\n const ringWidth =\n Math.max(0, Math.min(width, height - top) / 2 - 8) / Math.max(1, depthOf(input.data));\n const shapes: Shape[] = [];\n const walk = (\n nodes: TreeNode[],\n depth: number,\n a0: number,\n span: number,\n color: string | undefined,\n ) => {\n const total = nodes.reduce((s, n) => s + Math.max(0, nodeValue(n)), 0);\n let angle = a0;\n nodes.forEach((n, i) => {\n const value = Math.max(0, nodeValue(n));\n const sweep = total > 0 ? (value / total) * span : 0;\n const fill = n.color ?? color ?? seriesColor(i);\n if (sweep > 0) {\n shapes.push({\n kind: 'path',\n part: 'arc',\n d: arc(cx, cy, ringWidth * (depth + 1), ringWidth * depth, angle, angle + sweep),\n fill,\n opacity: 1 - depth * 0.2,\n stroke: 'var(--skdx-color-surface-default)',\n title: `${n.name}: ${formatValue(value)}`,\n });\n walk(n.children ?? [], depth + 1, angle, sweep, fill);\n }\n angle += sweep;\n });\n };\n walk(input.data, 0, 0, TAU, undefined);\n const c = canvas(\n input,\n width,\n height,\n input.data.map((n, i) => ({ name: n.name, color: n.color ?? seriesColor(i) })),\n );\n return { ...c, shapes: [...shapes, ...c.shapes] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { canvas, legendTop, size } from './frame.js';\nimport { seriesColor } from './palette.js';\nimport { arc } from './pie.js';\nimport { formatValue, px } from './scale.js';\nimport { label } from './shapes.js';\nimport type { ChordInput, Shape, Canvas } from './types.js';\n\nconst TAU = 2 * Math.PI;\nconst PAD = 0.04;\nconst RING = 12;\n\nexport function layoutChord(input: ChordInput): Canvas {\n const { width, height } = size(input, 300, 300);\n const top = legendTop(input);\n const cx = width / 2;\n const cy = top + (height - top) / 2;\n const r = Math.max(0, Math.min(width, height - top) / 2 - 36);\n const r0 = Math.max(0, r - RING);\n const n = input.names.length;\n const cell = (i: number, j: number) => Math.max(0, input.matrix[i]?.[j] ?? 0);\n const rowSum = input.names.map((_, i) => input.names.reduce((s, _n, j) => s + cell(i, j), 0));\n const total = rowSum.reduce((s, v) => s + v, 0);\n const unit = total > 0 ? (TAU - PAD * n) / total : 0;\n const at = (a: number, radius: number) =>\n `${px(cx + radius * Math.sin(a))} ${px(cy - radius * Math.cos(a))}`;\n\n // Each group spans its row sum; inside it, subgroup j spans matrix[i][j].\n const groups: { a0: number; a1: number; sub: { a0: number; a1: number }[] }[] = [];\n let angle = 0;\n for (let i = 0; i < n; i++) {\n const a0 = angle;\n const sub = input.names.map((_, j) => {\n const s0 = angle;\n angle += cell(i, j) * unit;\n return { a0: s0, a1: angle };\n });\n groups.push({ a0, a1: angle, sub });\n angle += PAD;\n }\n\n const shapes: Shape[] = [];\n for (let i = 0; i < n; i++) {\n for (let j = i; j < n; j++) {\n const out = cell(i, j);\n const back = cell(j, i);\n if (out + back === 0) continue;\n const a = (groups[i] as (typeof groups)[number]).sub[j] as { a0: number; a1: number };\n const b = (groups[j] as (typeof groups)[number]).sub[i] as { a0: number; a1: number };\n const large = (s: { a0: number; a1: number }) => (s.a1 - s.a0 > Math.PI ? 1 : 0);\n const d =\n i === j\n ? `M${at(a.a0, r0)}A${r0} ${r0} 0 ${large(a)} 1 ${at(a.a1, r0)}Q${px(cx)} ${px(cy)} ${at(a.a0, r0)}Z`\n : `M${at(a.a0, r0)}A${r0} ${r0} 0 ${large(a)} 1 ${at(a.a1, r0)}Q${px(cx)} ${px(cy)} ${at(b.a0, r0)}A${r0} ${r0} 0 ${large(b)} 1 ${at(b.a1, r0)}Q${px(cx)} ${px(cy)} ${at(a.a0, r0)}Z`;\n const from = out >= back ? i : j;\n shapes.push({\n kind: 'path',\n part: 'chord',\n d,\n fill: seriesColor(from),\n opacity: 0.5,\n title:\n i === j\n ? `${input.names[i]}: ${formatValue(out)}`\n : `${input.names[i]} ↔ ${input.names[j]}: ${formatValue(out)} / ${formatValue(back)}`,\n });\n }\n }\n groups.forEach((g, i) => {\n if (g.a1 <= g.a0) return;\n shapes.push({\n kind: 'path',\n part: 'group',\n d: arc(cx, cy, r, r0, g.a0, g.a1),\n fill: seriesColor(i),\n title: `${input.names[i]}: ${formatValue(rowSum[i] as number)}`,\n });\n const mid = (g.a0 + g.a1) / 2;\n const sin = Math.sin(mid);\n shapes.push(\n label(px(cx + (r + 8) * sin), px(cy - (r + 8) * Math.cos(mid)), input.names[i] as string, {\n anchor: sin > 0.1 ? 'start' : sin < -0.1 ? 'end' : 'middle',\n baseline: 'middle',\n }),\n );\n });\n const c = canvas(\n input,\n width,\n height,\n input.names.map((name, i) => ({ name, color: seriesColor(i) })),\n );\n return { ...c, shapes: [...shapes, ...c.shapes] };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { canvas, legendTop, size } from './frame.js';\nimport { seriesColor } from './palette.js';\nimport { formatValue, px } from './scale.js';\nimport type { MapInput, Shape, Canvas } from './types.js';\n\nconst PAD = 8;\n\nconst rings = (f: MapInput['features'][number]): [number, number][][] =>\n f.geometry.type === 'Polygon' ? f.geometry.coordinates : f.geometry.coordinates.flat();\n\n/** Mercator latitude, clamped to ±85° so the poles stay finite. */\nconst mercatorY = (lat: number) =>\n Math.log(Math.tan(Math.PI / 4 + (Math.max(-85, Math.min(85, lat)) * Math.PI) / 360));\n\n/** Projection fitted to the features' bounds (equirectangular by default, or Mercator); opacity follows the value. */\nexport function layoutMap(input: MapInput): Canvas {\n const { width, height } = size(input);\n const top = legendTop(input);\n const toY = input.projection === 'mercator' ? mercatorY : (lat: number) => lat;\n const points = input.features.flatMap((f) => rings(f).flat());\n const lons = points.map((p) => p[0]);\n const lats = points.map((p) => toY(p[1]));\n const [minLon, maxLon, minLat, maxLat] = points.length\n ? [Math.min(...lons), Math.max(...lons), Math.min(...lats), Math.max(...lats)]\n : [0, 1, 0, 1];\n const scale = Math.min(\n (width - 2 * PAD) / Math.max(1e-9, maxLon - minLon),\n (height - top - 2 * PAD) / Math.max(1e-9, maxLat - minLat),\n );\n const ox = (width - (maxLon - minLon) * scale) / 2;\n const oy = top + (height - top - (maxLat - minLat) * scale) / 2;\n const project = ([lon, lat]: [number, number]) =>\n `${px(ox + (lon - minLon) * scale)} ${px(oy + (maxLat - toY(lat)) * scale)}`;\n\n const values = input.features.map((f) => f.value);\n const min = Math.min(...values);\n const max = Math.max(...values);\n const color = seriesColor(0, input.color);\n const shapes: Shape[] = input.features.map((f) => ({\n kind: 'path',\n part: 'region',\n d: rings(f)\n .map((ring) => `M${ring.map(project).join('L')}Z`)\n .join(''),\n fill: color,\n opacity: max === min ? 1 : px(0.15 + (0.85 * (f.value - min)) / (max - min)),\n stroke: 'var(--skdx-color-surface-default)',\n title: `${f.name}: ${formatValue(f.value)}`,\n }));\n return { ...canvas(input, width, height), shapes };\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nexport type * from './types.js';\nexport { layoutBarChart } from './bar.js';\nexport { layoutAreaChart, layoutLineChart } from './line.js';\nexport { layoutScatterChart } from './scatter.js';\nexport { layoutPieChart } from './pie.js';\nexport { layoutSparkline } from './sparkline.js';\nexport { layoutRadarChart } from './radar.js';\nexport { layoutHeatmap } from './heatmap.js';\nexport { layoutFunnelChart } from './funnel.js';\nexport { hoverTooltip } from './frame.js';\nexport { CHART_COLORS } from './palette.js';\nexport { layoutSankey } from './sankey.js';\nexport { layoutTreemap } from './treemap.js';\nexport { layoutCandlestick } from './candlestick.js';\nexport { layoutWaterfall } from './waterfall.js';\nexport { layoutGantt } from './gantt.js';\nexport { layoutBoxplot } from './boxplot.js';\nexport { layoutSunburst } from './sunburst.js';\nexport { layoutChord } from './chord.js';\nexport { layoutMap } from './map.js';\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\nimport type { Shape } from './core/index.js';\n\n/** Draws a core shape list back to front. */\n@Component({\n selector: 'g[skdxChartShapes]',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @for (s of shapes(); track $index) {\n @switch (s.kind) {\n @case ('path') {\n <svg:path\n [attr.data-skdx-part]=\"s.part\"\n [attr.d]=\"s.d\"\n [attr.fill]=\"s.fill ?? 'none'\"\n [attr.stroke]=\"s.stroke\"\n [attr.stroke-width]=\"s.strokeWidth\"\n [attr.stroke-linecap]=\"s.strokeLinecap\"\n [attr.stroke-linejoin]=\"s.strokeLinejoin\"\n [attr.opacity]=\"s.opacity\"\n [attr.fill-opacity]=\"s.fillOpacity\"\n >\n @if (s.title) {\n <svg:title>{{ s.title }}</svg:title>\n }\n </svg:path>\n }\n @case ('rect') {\n <svg:rect\n [attr.data-skdx-part]=\"s.part\"\n [attr.x]=\"s.x\"\n [attr.y]=\"s.y\"\n [attr.width]=\"s.width\"\n [attr.height]=\"s.height\"\n [attr.fill]=\"s.fill\"\n [attr.stroke]=\"s.stroke\"\n [attr.fill-opacity]=\"s.opacity\"\n >\n @if (s.title) {\n <svg:title>{{ s.title }}</svg:title>\n }\n </svg:rect>\n }\n @case ('line') {\n <svg:line\n [attr.data-skdx-part]=\"s.part\"\n [attr.x1]=\"s.x1\"\n [attr.y1]=\"s.y1\"\n [attr.x2]=\"s.x2\"\n [attr.y2]=\"s.y2\"\n [attr.stroke]=\"s.stroke\"\n [attr.stroke-dasharray]=\"s.dash\"\n >\n @if (s.title) {\n <svg:title>{{ s.title }}</svg:title>\n }\n </svg:line>\n }\n @case ('circle') {\n <svg:circle\n [attr.data-skdx-part]=\"s.part\"\n [attr.cx]=\"s.cx\"\n [attr.cy]=\"s.cy\"\n [attr.r]=\"s.r\"\n [attr.fill]=\"s.fill\"\n >\n @if (s.title) {\n <svg:title>{{ s.title }}</svg:title>\n }\n </svg:circle>\n }\n @case ('text') {\n <svg:text\n [attr.data-skdx-part]=\"s.part\"\n [attr.x]=\"s.x\"\n [attr.y]=\"s.y\"\n [attr.text-anchor]=\"s.anchor\"\n [attr.dominant-baseline]=\"s.baseline\"\n [attr.fill]=\"s.fill\"\n >\n {{ s.text }}\n </svg:text>\n }\n }\n }\n `,\n})\nexport class SkdxChartShapesComponent {\n readonly shapes = input.required<Shape[]>();\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nimport { ChangeDetectionStrategy, Component, Directive, input, signal } from '@angular/core';\n\nimport { CHART_COLORS, hoverTooltip, type Canvas, type Series, type Shape } from './core/index.js';\nimport { SkdxChartShapesComponent } from './shapes.component';\n\n/** The accessible `<svg>` root every chart renders into: projected marks, then decorations, then the hover tooltip. */\n@Component({\n selector: 'skdx-chart-root',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { style: 'display: inline-block' },\n imports: [SkdxChartShapesComponent],\n template: `\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n [attr.viewBox]=\"'0 0 ' + layout().width + ' ' + layout().height\"\n [attr.width]=\"layout().width\"\n [attr.height]=\"layout().height\"\n role=\"img\"\n [attr.aria-label]=\"label()\"\n [attr.data-skdx-chart]=\"kind()\"\n [attr.font-family]=\"colors.fontFamily\"\n [attr.font-size]=\"colors.fontSize\"\n style=\"max-width: 100%; height: auto\"\n (pointermove)=\"onPointerMove($event)\"\n (pointerleave)=\"tip.set([])\"\n >\n <title>{{ label() }}</title>\n <svg:g skdxChartShapes [shapes]=\"layout().shapes\"></svg:g>\n <svg:g skdxChartShapes [shapes]=\"tip()\"></svg:g>\n </svg>\n `,\n})\nexport class SkdxChartRootComponent {\n readonly layout = input.required<Canvas>();\n readonly kind = input.required<string>();\n readonly label = input.required<string>();\n\n protected readonly colors = CHART_COLORS;\n protected readonly tip = signal<Shape[]>([]);\n\n protected onPointerMove(e: PointerEvent): void {\n if (!this.layout().tooltip) return;\n const { width, height } = this.layout();\n const next = hoverTooltip(\n e.target,\n e.currentTarget as Element,\n e.clientX,\n e.clientY,\n width,\n height,\n );\n if (next.length > 0 || this.tip().length > 0) this.tip.set(next);\n }\n}\n\n/** The `<svg>` root, grid, axis and tick labels every axis chart shares; marks are projected. */\n@Directive()\nexport abstract class SkdxSizedBase {\n readonly width = input<number>();\n readonly height = input<number>();\n /** Accessible name of the chart; defaults to \"<Kind> chart\". */\n readonly label = input<string>();\n /** Draw a legend row above the plot. */\n readonly legend = input(false);\n /** Show a hover tooltip for the mark under the pointer. */\n readonly tooltip = input(true);\n\n protected sized() {\n return {\n width: this.width(),\n height: this.height(),\n legend: this.legend(),\n tooltip: this.tooltip(),\n };\n }\n}\n\n/** Inputs the category charts take. */\n@Directive()\nexport abstract class SkdxChartBase extends SkdxSizedBase {\n readonly series = input.required<Series[]>();\n readonly categories = input<string[]>();\n\n protected input() {\n return { ...this.sized(), series: this.series(), categories: this.categories() };\n }\n}\n","/*\n * Copyright (c) 2026 SkandaDX\n * This file is part of the SkandaDX organization.\n * Licensed under the MIT License. See LICENSE in the repository root.\n */\n\nexport * from './frame.component';\nexport * from './shapes.component';\nexport * from './core/index.js';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["MARGIN","TAU","PAD","nodeValue","UP","DOWN"],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { computed, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import { SkdxChartBase, layoutLineChart, SkdxChartRootComponent } from '@skdx/angular-charts/internal';
|
|
4
|
+
|
|
5
|
+
/*
|
|
6
|
+
* Copyright (c) 2026 SkandaDX
|
|
7
|
+
* This file is part of the SkandaDX organization.
|
|
8
|
+
* Licensed under the MIT License. See LICENSE in the repository root.
|
|
9
|
+
*/
|
|
10
|
+
/** One polyline per series with a dot per value. */
|
|
11
|
+
class SkdxLineChartComponent extends SkdxChartBase {
|
|
12
|
+
constructor() {
|
|
13
|
+
super(...arguments);
|
|
14
|
+
this.layout = computed(() => layoutLineChart(this.input()), /* @ts-ignore */
|
|
15
|
+
...(ngDevMode ? [{ debugName: "layout" }] : /* istanbul ignore next */ []));
|
|
16
|
+
}
|
|
17
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: SkdxLineChartComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
18
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.1.4", type: SkdxLineChartComponent, isStandalone: true, selector: "skdx-line-chart", usesInheritance: true, ngImport: i0, template: `
|
|
19
|
+
<skdx-chart-root
|
|
20
|
+
[layout]="layout()"
|
|
21
|
+
kind="line"
|
|
22
|
+
[label]="label() ?? 'Line chart'"
|
|
23
|
+
></skdx-chart-root>
|
|
24
|
+
`, isInline: true, dependencies: [{ kind: "component", type: SkdxChartRootComponent, selector: "skdx-chart-root", inputs: ["layout", "kind", "label"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25
|
+
}
|
|
26
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: SkdxLineChartComponent, decorators: [{
|
|
27
|
+
type: Component,
|
|
28
|
+
args: [{
|
|
29
|
+
selector: 'skdx-line-chart',
|
|
30
|
+
standalone: true,
|
|
31
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
32
|
+
imports: [SkdxChartRootComponent],
|
|
33
|
+
template: `
|
|
34
|
+
<skdx-chart-root
|
|
35
|
+
[layout]="layout()"
|
|
36
|
+
kind="line"
|
|
37
|
+
[label]="label() ?? 'Line chart'"
|
|
38
|
+
></skdx-chart-root>
|
|
39
|
+
`,
|
|
40
|
+
}]
|
|
41
|
+
}] });
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Generated bundle index. Do not edit.
|
|
45
|
+
*/
|
|
46
|
+
|
|
47
|
+
export { SkdxLineChartComponent };
|
|
48
|
+
//# sourceMappingURL=skdx-angular-charts-line.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skdx-angular-charts-line.mjs","sources":["../../src/line/index.ts","../../src/line/skdx-angular-charts-line.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 { ChangeDetectionStrategy, Component, computed } from '@angular/core';\n\nimport {\n layoutLineChart,\n SkdxChartBase,\n SkdxChartRootComponent,\n} from '@skdx/angular-charts/internal';\n\n/** One polyline per series with a dot per value. */\n@Component({\n selector: 'skdx-line-chart',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SkdxChartRootComponent],\n template: `\n <skdx-chart-root\n [layout]=\"layout()\"\n kind=\"line\"\n [label]=\"label() ?? 'Line chart'\"\n ></skdx-chart-root>\n `,\n})\nexport class SkdxLineChartComponent extends SkdxChartBase {\n protected readonly layout = computed(() => layoutLineChart(this.input()));\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAAA;;;;AAIG;AAUH;AAcM,MAAO,sBAAuB,SAAQ,aAAa,CAAA;AAbzD,IAAA,WAAA,GAAA;;AAcqB,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,eAAe,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;mFAAC;AAC1E,IAAA;8GAFY,sBAAsB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EARvB;;;;;;AAMT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAPS,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FASrB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAblC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,sBAAsB,CAAC;AACjC,oBAAA,QAAQ,EAAE;;;;;;AAMT,EAAA,CAAA;AACF,iBAAA;;;AC3BD;;AAEG;;"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, computed, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import { SkdxSizedBase, layoutMap, SkdxChartRootComponent } from '@skdx/angular-charts/internal';
|
|
4
|
+
|
|
5
|
+
/*
|
|
6
|
+
* Copyright (c) 2026 SkandaDX
|
|
7
|
+
* This file is part of the SkandaDX organization.
|
|
8
|
+
* Licensed under the MIT License. See LICENSE in the repository root.
|
|
9
|
+
*/
|
|
10
|
+
/** Choropleth of GeoJSON-shaped regions, opacity by value. */
|
|
11
|
+
class SkdxMapChartComponent extends SkdxSizedBase {
|
|
12
|
+
constructor() {
|
|
13
|
+
super(...arguments);
|
|
14
|
+
this.features = input.required(/* @ts-ignore */
|
|
15
|
+
...(ngDevMode ? [{ debugName: "features" }] : /* istanbul ignore next */ []));
|
|
16
|
+
/** The region color; each region's opacity follows its value. */
|
|
17
|
+
this.color = input(/* @ts-ignore */
|
|
18
|
+
...(ngDevMode ? [undefined, { debugName: "color" }] : /* istanbul ignore next */ []));
|
|
19
|
+
this.l = computed(() => layoutMap({ ...this.sized(), features: this.features(), color: this.color() }), /* @ts-ignore */
|
|
20
|
+
...(ngDevMode ? [{ debugName: "l" }] : /* istanbul ignore next */ []));
|
|
21
|
+
}
|
|
22
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: SkdxMapChartComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
23
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: SkdxMapChartComponent, isStandalone: true, selector: "skdx-map-chart", inputs: { features: { classPropertyName: "features", publicName: "features", isSignal: true, isRequired: true, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
|
|
24
|
+
<skdx-chart-root [layout]="l()" kind="map" [label]="label() ?? 'Map'"></skdx-chart-root>
|
|
25
|
+
`, isInline: true, dependencies: [{ kind: "component", type: SkdxChartRootComponent, selector: "skdx-chart-root", inputs: ["layout", "kind", "label"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26
|
+
}
|
|
27
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: SkdxMapChartComponent, decorators: [{
|
|
28
|
+
type: Component,
|
|
29
|
+
args: [{
|
|
30
|
+
selector: 'skdx-map-chart',
|
|
31
|
+
standalone: true,
|
|
32
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
33
|
+
imports: [SkdxChartRootComponent],
|
|
34
|
+
template: `
|
|
35
|
+
<skdx-chart-root [layout]="l()" kind="map" [label]="label() ?? 'Map'"></skdx-chart-root>
|
|
36
|
+
`,
|
|
37
|
+
}]
|
|
38
|
+
}], propDecorators: { features: [{ type: i0.Input, args: [{ isSignal: true, alias: "features", required: true }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }] } });
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Generated bundle index. Do not edit.
|
|
42
|
+
*/
|
|
43
|
+
|
|
44
|
+
export { SkdxMapChartComponent };
|
|
45
|
+
//# sourceMappingURL=skdx-angular-charts-map.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skdx-angular-charts-map.mjs","sources":["../../src/map/index.ts","../../src/map/skdx-angular-charts-map.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 { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\nimport {\n layoutMap,\n type MapFeature,\n SkdxChartRootComponent,\n SkdxSizedBase,\n} from '@skdx/angular-charts/internal';\n\n/** Choropleth of GeoJSON-shaped regions, opacity by value. */\n@Component({\n selector: 'skdx-map-chart',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SkdxChartRootComponent],\n template: `\n <skdx-chart-root [layout]=\"l()\" kind=\"map\" [label]=\"label() ?? 'Map'\"></skdx-chart-root>\n `,\n})\nexport class SkdxMapChartComponent extends SkdxSizedBase {\n readonly features = input.required<MapFeature[]>();\n /** The region color; each region's opacity follows its value. */\n readonly color = input<string>();\n\n protected readonly l = computed(() =>\n layoutMap({ ...this.sized(), features: this.features(), color: this.color() }),\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAAA;;;;AAIG;AAWH;AAUM,MAAO,qBAAsB,SAAQ,aAAa,CAAA;AATxD,IAAA,WAAA,GAAA;;QAUW,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ;qFAAgB;;AAEzC,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK;6FAAU;AAEb,QAAA,IAAA,CAAA,CAAC,GAAG,QAAQ,CAAC,MAC9B,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;8EAC/E;AACF,IAAA;8GARY,qBAAqB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAJtB;;AAET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAHS,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAKrB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBATjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,sBAAsB,CAAC;AACjC,oBAAA,QAAQ,EAAE;;AAET,EAAA,CAAA;AACF,iBAAA;;;ACxBD;;AAEG;;"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, computed, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import { SkdxSizedBase, layoutPieChart, SkdxChartRootComponent } from '@skdx/angular-charts/internal';
|
|
4
|
+
|
|
5
|
+
/*
|
|
6
|
+
* Copyright (c) 2026 SkandaDX
|
|
7
|
+
* This file is part of the SkandaDX organization.
|
|
8
|
+
* Licensed under the MIT License. See LICENSE in the repository root.
|
|
9
|
+
*/
|
|
10
|
+
/** A pie, or a donut when `innerRadius` is set; one slice per datum. */
|
|
11
|
+
class SkdxPieChartComponent extends SkdxSizedBase {
|
|
12
|
+
constructor() {
|
|
13
|
+
super(...arguments);
|
|
14
|
+
this.data = input.required(/* @ts-ignore */
|
|
15
|
+
...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
|
|
16
|
+
/** Hole radius as a fraction of the outer radius: 0 is a pie, 0.6 a donut. */
|
|
17
|
+
this.innerRadius = input(/* @ts-ignore */
|
|
18
|
+
...(ngDevMode ? [undefined, { debugName: "innerRadius" }] : /* istanbul ignore next */ []));
|
|
19
|
+
this.layout = computed(() => layoutPieChart({ ...this.sized(), data: this.data(), innerRadius: this.innerRadius() }), /* @ts-ignore */
|
|
20
|
+
...(ngDevMode ? [{ debugName: "layout" }] : /* istanbul ignore next */ []));
|
|
21
|
+
}
|
|
22
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: SkdxPieChartComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
23
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: SkdxPieChartComponent, isStandalone: true, selector: "skdx-pie-chart", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, innerRadius: { classPropertyName: "innerRadius", publicName: "innerRadius", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
|
|
24
|
+
<skdx-chart-root
|
|
25
|
+
[layout]="layout()"
|
|
26
|
+
kind="pie"
|
|
27
|
+
[label]="label() ?? 'Pie chart'"
|
|
28
|
+
></skdx-chart-root>
|
|
29
|
+
`, isInline: true, dependencies: [{ kind: "component", type: SkdxChartRootComponent, selector: "skdx-chart-root", inputs: ["layout", "kind", "label"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
30
|
+
}
|
|
31
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: SkdxPieChartComponent, decorators: [{
|
|
32
|
+
type: Component,
|
|
33
|
+
args: [{
|
|
34
|
+
selector: 'skdx-pie-chart',
|
|
35
|
+
standalone: true,
|
|
36
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
37
|
+
imports: [SkdxChartRootComponent],
|
|
38
|
+
template: `
|
|
39
|
+
<skdx-chart-root
|
|
40
|
+
[layout]="layout()"
|
|
41
|
+
kind="pie"
|
|
42
|
+
[label]="label() ?? 'Pie chart'"
|
|
43
|
+
></skdx-chart-root>
|
|
44
|
+
`,
|
|
45
|
+
}]
|
|
46
|
+
}], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: true }] }], innerRadius: [{ type: i0.Input, args: [{ isSignal: true, alias: "innerRadius", required: false }] }] } });
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Generated bundle index. Do not edit.
|
|
50
|
+
*/
|
|
51
|
+
|
|
52
|
+
export { SkdxPieChartComponent };
|
|
53
|
+
//# sourceMappingURL=skdx-angular-charts-pie.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skdx-angular-charts-pie.mjs","sources":["../../src/pie/index.ts","../../src/pie/skdx-angular-charts-pie.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 { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\nimport {\n type Datum,\n layoutPieChart,\n SkdxChartRootComponent,\n SkdxSizedBase,\n} from '@skdx/angular-charts/internal';\n\n/** A pie, or a donut when `innerRadius` is set; one slice per datum. */\n@Component({\n selector: 'skdx-pie-chart',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SkdxChartRootComponent],\n template: `\n <skdx-chart-root\n [layout]=\"layout()\"\n kind=\"pie\"\n [label]=\"label() ?? 'Pie chart'\"\n ></skdx-chart-root>\n `,\n})\nexport class SkdxPieChartComponent extends SkdxSizedBase {\n readonly data = input.required<Datum[]>();\n /** Hole radius as a fraction of the outer radius: 0 is a pie, 0.6 a donut. */\n readonly innerRadius = input<number>();\n\n protected readonly layout = computed(() =>\n layoutPieChart({ ...this.sized(), data: this.data(), innerRadius: this.innerRadius() }),\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAAA;;;;AAIG;AAWH;AAcM,MAAO,qBAAsB,SAAQ,aAAa,CAAA;AAbxD,IAAA,WAAA,GAAA;;QAcW,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,QAAQ;iFAAW;;AAEhC,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK;mGAAU;AAEnB,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MACnC,cAAc,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;mFACxF;AACF,IAAA;8GARY,qBAAqB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EARtB;;;;;;AAMT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAPS,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FASrB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAbjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,sBAAsB,CAAC;AACjC,oBAAA,QAAQ,EAAE;;;;;;AAMT,EAAA,CAAA;AACF,iBAAA;;;AC5BD;;AAEG;;"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, computed, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import { SkdxSizedBase, layoutRadarChart, SkdxChartRootComponent } from '@skdx/angular-charts/internal';
|
|
4
|
+
|
|
5
|
+
/*
|
|
6
|
+
* Copyright (c) 2026 SkandaDX
|
|
7
|
+
* This file is part of the SkandaDX organization.
|
|
8
|
+
* Licensed under the MIT License. See LICENSE in the repository root.
|
|
9
|
+
*/
|
|
10
|
+
/** One polygon per series over a spoke per category. */
|
|
11
|
+
class SkdxRadarChartComponent extends SkdxSizedBase {
|
|
12
|
+
constructor() {
|
|
13
|
+
super(...arguments);
|
|
14
|
+
this.series = input.required(/* @ts-ignore */
|
|
15
|
+
...(ngDevMode ? [{ debugName: "series" }] : /* istanbul ignore next */ []));
|
|
16
|
+
/** One axis per category. */
|
|
17
|
+
this.categories = input.required(/* @ts-ignore */
|
|
18
|
+
...(ngDevMode ? [{ debugName: "categories" }] : /* istanbul ignore next */ []));
|
|
19
|
+
this.l = computed(() => layoutRadarChart({ ...this.sized(), series: this.series(), categories: this.categories() }), /* @ts-ignore */
|
|
20
|
+
...(ngDevMode ? [{ debugName: "l" }] : /* istanbul ignore next */ []));
|
|
21
|
+
}
|
|
22
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: SkdxRadarChartComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
23
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.4", type: SkdxRadarChartComponent, isStandalone: true, selector: "skdx-radar-chart", inputs: { series: { classPropertyName: "series", publicName: "series", isSignal: true, isRequired: true, transformFunction: null }, categories: { classPropertyName: "categories", publicName: "categories", isSignal: true, isRequired: true, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: `
|
|
24
|
+
<skdx-chart-root
|
|
25
|
+
[layout]="l()"
|
|
26
|
+
kind="radar"
|
|
27
|
+
[label]="label() ?? 'Radar chart'"
|
|
28
|
+
></skdx-chart-root>
|
|
29
|
+
`, isInline: true, dependencies: [{ kind: "component", type: SkdxChartRootComponent, selector: "skdx-chart-root", inputs: ["layout", "kind", "label"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
30
|
+
}
|
|
31
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.4", ngImport: i0, type: SkdxRadarChartComponent, decorators: [{
|
|
32
|
+
type: Component,
|
|
33
|
+
args: [{
|
|
34
|
+
selector: 'skdx-radar-chart',
|
|
35
|
+
standalone: true,
|
|
36
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
37
|
+
imports: [SkdxChartRootComponent],
|
|
38
|
+
template: `
|
|
39
|
+
<skdx-chart-root
|
|
40
|
+
[layout]="l()"
|
|
41
|
+
kind="radar"
|
|
42
|
+
[label]="label() ?? 'Radar chart'"
|
|
43
|
+
></skdx-chart-root>
|
|
44
|
+
`,
|
|
45
|
+
}]
|
|
46
|
+
}], propDecorators: { series: [{ type: i0.Input, args: [{ isSignal: true, alias: "series", required: true }] }], categories: [{ type: i0.Input, args: [{ isSignal: true, alias: "categories", required: true }] }] } });
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Generated bundle index. Do not edit.
|
|
50
|
+
*/
|
|
51
|
+
|
|
52
|
+
export { SkdxRadarChartComponent };
|
|
53
|
+
//# sourceMappingURL=skdx-angular-charts-radar.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skdx-angular-charts-radar.mjs","sources":["../../src/radar/index.ts","../../src/radar/skdx-angular-charts-radar.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 { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\n\nimport {\n layoutRadarChart,\n type Series,\n SkdxChartRootComponent,\n SkdxSizedBase,\n} from '@skdx/angular-charts/internal';\n\n/** One polygon per series over a spoke per category. */\n@Component({\n selector: 'skdx-radar-chart',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [SkdxChartRootComponent],\n template: `\n <skdx-chart-root\n [layout]=\"l()\"\n kind=\"radar\"\n [label]=\"label() ?? 'Radar chart'\"\n ></skdx-chart-root>\n `,\n})\nexport class SkdxRadarChartComponent extends SkdxSizedBase {\n readonly series = input.required<Series[]>();\n /** One axis per category. */\n readonly categories = input.required<string[]>();\n\n protected readonly l = computed(() =>\n layoutRadarChart({ ...this.sized(), series: this.series(), categories: this.categories() }),\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAAA;;;;AAIG;AAWH;AAcM,MAAO,uBAAwB,SAAQ,aAAa,CAAA;AAb1D,IAAA,WAAA,GAAA;;QAcW,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ;mFAAY;;QAEnC,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,QAAQ;uFAAY;AAE7B,QAAA,IAAA,CAAA,CAAC,GAAG,QAAQ,CAAC,MAC9B,gBAAgB,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;8EAC5F;AACF,IAAA;8GARY,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EARxB;;;;;;AAMT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAPS,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FASrB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAbnC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,OAAO,EAAE,CAAC,sBAAsB,CAAC;AACjC,oBAAA,QAAQ,EAAE;;;;;;AAMT,EAAA,CAAA;AACF,iBAAA;;;AC5BD;;AAEG;;"}
|